diff --git a/_maps/RandomRuins/LavaRuins/lavaland_biodome_beach.dmm b/_maps/RandomRuins/LavaRuins/lavaland_biodome_beach.dmm index 40f5bfb987..56bc9a0548 100644 --- a/_maps/RandomRuins/LavaRuins/lavaland_biodome_beach.dmm +++ b/_maps/RandomRuins/LavaRuins/lavaland_biodome_beach.dmm @@ -1,4 +1,4 @@ -//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE "aa" = ( /turf/template_noop, /area/template_noop) @@ -146,7 +146,7 @@ /area/ruin/powered/beach) "aF" = ( /obj/machinery/vending/boozeomat{ - emagged = 1; + set_obj_flags = "EMAGGED"; req_access_txt = "0" }, /turf/open/floor/wood, diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_animal_hospital.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_animal_hospital.dmm index 9ad1915924..3f05b33fe5 100644 --- a/_maps/RandomRuins/LavaRuins/lavaland_surface_animal_hospital.dmm +++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_animal_hospital.dmm @@ -491,7 +491,7 @@ }, /area/ruin/powered/animal_hospital) "bI" = ( -/obj/structure/sign/bluecross_2{ +/obj/structure/sign/departments/medbay/alt{ name = "animal hospital" }, /turf/closed/wall/mineral/titanium/nodiagonal, diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_greed.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_greed.dmm index c0789e84d1..1422cde1a4 100644 --- a/_maps/RandomRuins/LavaRuins/lavaland_surface_greed.dmm +++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_greed.dmm @@ -1,4 +1,4 @@ -//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE "a" = ( /turf/open/floor/plating/asteroid/basalt/lava_land_surface, /area/lavaland/surface/outdoors) @@ -55,7 +55,7 @@ /area/ruin/powered/greed) "k" = ( /obj/machinery/computer/arcade/battle{ - emagged = 1 + set_obj_flags = "EMAGGED" }, /turf/open/floor/engine/cult, /area/ruin/powered/greed) diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_syndicate_base1.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_syndicate_base1.dmm index a63b837e54..d5d121fde1 100644 --- a/_maps/RandomRuins/LavaRuins/lavaland_surface_syndicate_base1.dmm +++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_syndicate_base1.dmm @@ -327,7 +327,7 @@ /turf/closed/wall/mineral/plastitanium/explosive, /area/ruin/unpowered/syndicate_lava_base/cargo) "dQ" = ( -/obj/structure/sign/securearea, +/obj/structure/sign/warning/securearea, /turf/closed/wall/mineral/plastitanium/nodiagonal, /area/ruin/unpowered/syndicate_lava_base/testlab) "dR" = ( @@ -1393,7 +1393,7 @@ /turf/open/floor/plasteel, /area/ruin/unpowered/syndicate_lava_base/cargo) "fx" = ( -/obj/structure/sign/securearea, +/obj/structure/sign/warning/securearea, /turf/closed/wall/mineral/plastitanium/nodiagonal, /area/ruin/unpowered/syndicate_lava_base/cargo) "fy" = ( @@ -1453,7 +1453,7 @@ }, /area/ruin/unpowered/syndicate_lava_base/virology) "fD" = ( -/obj/structure/sign/biohazard, +/obj/structure/sign/warning/biohazard, /turf/closed/wall/mineral/plastitanium/nodiagonal, /area/ruin/unpowered/syndicate_lava_base/virology) "fE" = ( @@ -1583,17 +1583,17 @@ /turf/open/floor/plating, /area/ruin/unpowered/syndicate_lava_base/cargo) "gf" = ( -/obj/structure/sign/vacuum{ +/obj/structure/sign/warning/vacuum{ pixel_y = -32 }, /obj/machinery/light/small, /turf/open/floor/plating, /area/ruin/unpowered/syndicate_lava_base/cargo) "gg" = ( -/obj/structure/sign/fire{ +/obj/structure/sign/warning/fire{ pixel_y = 32 }, -/obj/structure/sign/xeno_warning_mining{ +/obj/structure/sign/warning/xeno_mining{ pixel_y = -32 }, /turf/open/floor/plating, @@ -1962,7 +1962,7 @@ }, /area/ruin/unpowered/syndicate_lava_base/main) "gO" = ( -/obj/structure/sign/cargo, +/obj/structure/sign/departments/cargo, /turf/closed/wall/mineral/plastitanium/nodiagonal, /area/ruin/unpowered/syndicate_lava_base/cargo) "gP" = ( @@ -2263,7 +2263,7 @@ /area/ruin/unpowered/syndicate_lava_base/virology) "hv" = ( /obj/machinery/disposal/bin, -/obj/structure/sign/deathsposal{ +/obj/structure/sign/warning/deathsposal{ pixel_x = 32 }, /obj/effect/turf_decal/stripes/red/box, @@ -2376,7 +2376,7 @@ /turf/open/floor/plating, /area/ruin/unpowered/syndicate_lava_base/virology) "hI" = ( -/obj/structure/sign/vacuum{ +/obj/structure/sign/warning/vacuum{ pixel_x = -32 }, /turf/open/floor/plating, @@ -2389,7 +2389,7 @@ /obj/machinery/light/small{ dir = 4 }, -/obj/structure/sign/fire{ +/obj/structure/sign/warning/fire{ pixel_x = 32 }, /obj/structure/closet/emcloset/anchored, @@ -2680,7 +2680,7 @@ /turf/open/floor/plasteel, /area/ruin/unpowered/syndicate_lava_base/main) "iq" = ( -/obj/structure/sign/securearea, +/obj/structure/sign/warning/securearea, /turf/closed/wall/mineral/plastitanium/nodiagonal, /area/ruin/unpowered/syndicate_lava_base/main) "ir" = ( @@ -3531,7 +3531,7 @@ }, /area/ruin/unpowered/syndicate_lava_base/main) "jU" = ( -/obj/structure/sign/engineering, +/obj/structure/sign/departments/engineering, /turf/closed/wall/mineral/plastitanium/nodiagonal, /area/ruin/unpowered/syndicate_lava_base/engineering) "jV" = ( @@ -4064,7 +4064,7 @@ /turf/open/floor/plasteel/white, /area/ruin/unpowered/syndicate_lava_base/medbay) "kT" = ( -/obj/structure/sign/bluecross_2, +/obj/structure/sign/departments/medbay/alt, /turf/closed/wall/mineral/plastitanium/nodiagonal, /area/ruin/unpowered/syndicate_lava_base/medbay) "kU" = ( @@ -4076,7 +4076,7 @@ }, /obj/machinery/power/smes/engineering, /obj/structure/cable/yellow, -/obj/structure/sign/electricshock{ +/obj/structure/sign/warning/electricshock{ pixel_x = -32 }, /obj/effect/decal/cleanable/dirt, @@ -4766,7 +4766,7 @@ /turf/open/floor/plating, /area/ruin/unpowered/syndicate_lava_base/telecomms) "mq" = ( -/obj/structure/sign/vacuum{ +/obj/structure/sign/warning/vacuum{ pixel_x = -32 }, /turf/open/floor/plating, @@ -4778,7 +4778,7 @@ /obj/machinery/light/small{ dir = 4 }, -/obj/structure/sign/fire{ +/obj/structure/sign/warning/fire{ pixel_x = 32 }, /obj/structure/closet/emcloset/anchored, @@ -4955,7 +4955,7 @@ /turf/open/floor/circuit/green, /area/ruin/unpowered/syndicate_lava_base/telecomms) "mN" = ( -/obj/structure/sign/securearea, +/obj/structure/sign/warning/securearea, /turf/closed/wall/mineral/plastitanium/nodiagonal, /area/ruin/unpowered/syndicate_lava_base/telecomms) "mP" = ( @@ -5115,7 +5115,7 @@ /turf/open/floor/plasteel/floorgrime, /area/ruin/unpowered/syndicate_lava_base/engineering) "nf" = ( -/obj/structure/sign/fire, +/obj/structure/sign/warning/fire, /turf/closed/wall/mineral/plastitanium/nodiagonal, /area/ruin/unpowered/syndicate_lava_base/engineering) "ng" = ( @@ -5448,13 +5448,6 @@ /area/ruin/unpowered/syndicate_lava_base/telecomms) "nJ" = ( /obj/structure/table/reinforced, -/obj/item/device/radio/intercom{ - broadcasting = 0; - dir = 8; - freerange = 1; - listening = 1; - name = "Pirate Radio Listening Channel" - }, /turf/open/floor/plasteel/vault{ dir = 5 }, @@ -5782,11 +5775,8 @@ "oj" = ( /obj/structure/table/reinforced, /obj/item/device/radio/intercom{ - broadcasting = 1; - dir = 8; freerange = 1; - listening = 0; - name = "Pirate Radio Broadcast Channel" + name = "Syndicate Radio Intercom" }, /turf/open/floor/plasteel/vault{ dir = 5 @@ -5943,9 +5933,7 @@ frequency = 1441; id = "syndie_lavaland_inc_in" }, -/obj/structure/sign/vacuum{ - desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; - name = "EXTERNAL AIRLOCK"; +/obj/structure/sign/warning/vacuum/external{ pixel_y = -32 }, /turf/open/floor/engine{ @@ -5962,10 +5950,10 @@ }, /area/ruin/unpowered/syndicate_lava_base/engineering) "oD" = ( -/obj/structure/sign/xeno_warning_mining{ +/obj/structure/sign/warning/xeno_mining{ pixel_x = -32 }, -/obj/structure/sign/fire{ +/obj/structure/sign/warning/fire{ pixel_x = 32 }, /turf/open/floor/plating, @@ -5986,7 +5974,7 @@ }, /area/ruin/unpowered/syndicate_lava_base/engineering) "oF" = ( -/obj/structure/sign/securearea, +/obj/structure/sign/warning/securearea, /turf/closed/wall/mineral/plastitanium/nodiagonal, /area/ruin/unpowered/syndicate_lava_base/arrivals) "oG" = ( @@ -6009,7 +5997,7 @@ }, /area/ruin/unpowered/syndicate_lava_base/engineering) "oI" = ( -/obj/structure/sign/vacuum{ +/obj/structure/sign/warning/vacuum{ pixel_x = -32 }, /obj/machinery/light/small{ @@ -6018,7 +6006,7 @@ /turf/open/floor/plating, /area/ruin/unpowered/syndicate_lava_base/arrivals) "oP" = ( -/obj/structure/sign/chemistry, +/obj/structure/sign/departments/chemistry, /turf/closed/wall/mineral/plastitanium/nodiagonal, /area/ruin/unpowered/syndicate_lava_base/testlab) @@ -6320,7 +6308,7 @@ eh eh eh eh -gj +eh eh ab ab @@ -6338,7 +6326,7 @@ ab ab ab mn -mo +mn mN nj mn @@ -6574,8 +6562,8 @@ dG dG lS mn -mo mn +mo nL mn mn @@ -6711,7 +6699,7 @@ je jk jx jx -jP +jy jy jy ms @@ -6719,7 +6707,7 @@ mT no nN ol -ow +mT ab ab ab @@ -6740,7 +6728,7 @@ ac ac ae ae -aL +ae ae fC gw @@ -6782,7 +6770,7 @@ ab ae ae ae -aL +ae ae ae ae @@ -6792,7 +6780,7 @@ ae fD ad eh -gj +eh eh hW dG @@ -6938,10 +6926,10 @@ hK ha ha ha -iN ha ha -jy +ha +jP jM jN jZ @@ -6954,7 +6942,7 @@ jy jy nS on -ow +mT ab ab ab @@ -6981,7 +6969,7 @@ ae gB hb ha -ha +iN ha ii iw @@ -7045,7 +7033,7 @@ lB lY lA mW -jy +jP nT op ox @@ -7111,12 +7099,12 @@ ab ae ae ae +ae +ae aL ae ae ae -ae -ae oP fH gG @@ -7130,7 +7118,7 @@ iR hz jn jA -jP +jy jy jy jy @@ -7236,7 +7224,7 @@ jy nu nX om -ow +mT ab ab ab @@ -7263,7 +7251,7 @@ fO gG hg hz -hO +hz hz hz iB @@ -7277,7 +7265,7 @@ jy jy jy jy -jP +jy jy mX nv @@ -7393,13 +7381,13 @@ ab ab ab as -cO +as as dI dZ ew as -cO +as as gJ hh @@ -7412,7 +7400,7 @@ iX hz jq jA -hO +hz kg kt kQ @@ -7441,7 +7429,7 @@ ab ab ab ac -cO +as as as as @@ -7457,7 +7445,7 @@ hz iF iY hz -hz +hO hz hz kh @@ -7471,7 +7459,7 @@ na nz ob os -oy +kQ ac ab ab @@ -7501,7 +7489,7 @@ hz hz hz hz -hO +hz hz hz jr @@ -7588,7 +7576,7 @@ ec ez eY ft -dy +dP gN hj hj @@ -7650,15 +7638,15 @@ jF jT ju ju +ju +ju +ju kU ju ju ju ju ju -kU -ju -ju ju ju ab @@ -7678,7 +7666,7 @@ ab ab ac dy -dP +dy eA fa dy @@ -7835,7 +7823,7 @@ ha ha ju jJ -jX +kl kl kA kY @@ -7916,7 +7904,7 @@ ab dy eF eF -dP +dy gf dy eF @@ -7980,7 +7968,7 @@ ab ju kD lb -kU +ju kD lb ju diff --git a/_maps/RandomRuins/SpaceRuins/DJstation.dmm b/_maps/RandomRuins/SpaceRuins/DJstation.dmm index f60b3bd4a5..905e795de5 100644 --- a/_maps/RandomRuins/SpaceRuins/DJstation.dmm +++ b/_maps/RandomRuins/SpaceRuins/DJstation.dmm @@ -16,7 +16,7 @@ "ae" = ( /obj/structure/lattice, /turf/template_noop, -/area/template_noop) +/area/space/nearstation) "af" = ( /turf/closed/wall, /area/ruin/space/djstation) @@ -85,10 +85,7 @@ icon_state = "4-8" }, /obj/item/storage/box/lights/mixed, -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'HIGH VOLTAGE'"; - icon_state = "shock"; - name = "HIGH VOLTAGE"; +/obj/structure/sign/warning/electricshock{ pixel_y = -32 }, /turf/open/floor/plating, @@ -282,7 +279,7 @@ "aZ" = ( /obj/structure/disposalpipe/segment, /turf/open/floor/plating/airless, -/area/template_noop) +/area/space/nearstation) "ba" = ( /turf/open/floor/plasteel/freezer, /area/ruin/space/djstation) @@ -333,11 +330,7 @@ /turf/open/floor/plasteel/cafeteria, /area/ruin/space/djstation) "bh" = ( -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; - icon_state = "space"; - layer = 4; - name = "EXTERNAL AIRLOCK"; +/obj/structure/sign/warning/vacuum/external{ pixel_y = -32 }, /turf/open/floor/plasteel/cafeteria, @@ -356,7 +349,7 @@ }, /obj/structure/disposaloutlet, /turf/open/floor/plating/airless, -/area/template_noop) +/area/space/nearstation) (1,1,1) = {" aa diff --git a/_maps/RandomRuins/SpaceRuins/TheDerelict.dmm b/_maps/RandomRuins/SpaceRuins/TheDerelict.dmm index 90781df44c..16def0b934 100644 --- a/_maps/RandomRuins/SpaceRuins/TheDerelict.dmm +++ b/_maps/RandomRuins/SpaceRuins/TheDerelict.dmm @@ -204,10 +204,6 @@ /obj/structure/cable, /turf/open/floor/plasteel, /area/ruin/space/derelict/solar_control) -"aE" = ( -/obj/structure/grille, -/turf/open/floor/plating/airless, -/area/template_noop) "aF" = ( /obj/effect/spawner/structure/window/hollow/reinforced/end{ dir = 1 @@ -366,7 +362,7 @@ "bd" = ( /obj/structure/grille/broken, /turf/open/floor/plating/airless, -/area/ruin/unpowered/no_grav) +/area/space/nearstation) "be" = ( /obj/machinery/light/small, /turf/open/floor/plasteel, @@ -639,7 +635,7 @@ /turf/open/floor/plasteel/airless{ icon_state = "damaged4" }, -/area/ruin/unpowered/no_grav) +/area/space/nearstation) "cc" = ( /obj/structure/cable{ icon_state = "1-2" @@ -950,7 +946,7 @@ "de" = ( /obj/effect/spawner/lootdrop/maintenance, /turf/open/floor/plasteel/airless/solarpanel, -/area/ruin/unpowered/no_grav) +/area/space/nearstation) "df" = ( /obj/structure/cable{ icon_state = "0-4" @@ -983,7 +979,7 @@ /area/ruin/space/derelict/gravity_generator) "dj" = ( /turf/open/floor/plasteel/airless/solarpanel, -/area/ruin/unpowered/no_grav) +/area/space/nearstation) "dk" = ( /obj/item/stack/cable_coil/cut/red, /turf/template_noop, @@ -1085,11 +1081,11 @@ /turf/closed/wall, /area/ruin/space/derelict/bridge) "dA" = ( -/obj/structure/sign/electricshock, +/obj/structure/sign/warning/electricshock, /turf/closed/wall/r_wall, /area/ruin/space/derelict/singularity_engine) "dB" = ( -/obj/structure/sign/securearea, +/obj/structure/sign/warning/securearea, /turf/closed/wall/r_wall, /area/ruin/space/derelict/singularity_engine) "dC" = ( @@ -1103,7 +1099,7 @@ /turf/open/floor/plating/airless, /area/ruin/space/derelict/gravity_generator) "dD" = ( -/obj/structure/sign/securearea{ +/obj/structure/sign/warning/securearea{ name = "ENGINEERING ACCESS" }, /turf/closed/wall/r_wall, @@ -1296,10 +1292,7 @@ /area/ruin/space/derelict/gravity_generator) "ek" = ( /obj/structure/closet/radiation, -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'RADIOACTIVE AREA'"; - icon_state = "radiation"; - name = "RADIOACTIVE AREA"; +/obj/structure/sign/warning/radiation/rad_area{ pixel_x = 32 }, /turf/open/floor/plasteel, @@ -1449,6 +1442,10 @@ }, /turf/open/floor/plasteel, /area/ruin/space/derelict/bridge) +"eL" = ( +/obj/structure/lattice, +/turf/template_noop, +/area/ruin/space/derelict/singularity_engine) "eM" = ( /obj/structure/cable{ icon_state = "2-8" @@ -2258,11 +2255,7 @@ name = "External Engineering" }, /turf/open/floor/plating/airless, -/area/template_noop) -"hC" = ( -/obj/structure/grille, -/turf/template_noop, -/area/template_noop) +/area/ruin/space/derelict/singularity_engine) "hD" = ( /turf/open/floor/plasteel/airless{ icon_state = "damaged4" @@ -2341,7 +2334,7 @@ }, /obj/structure/grille, /turf/template_noop, -/area/template_noop) +/area/space/nearstation) "hR" = ( /obj/structure/table, /obj/structure/window/reinforced{ @@ -2400,11 +2393,11 @@ /turf/open/floor/plasteel/airless{ icon_state = "damaged5" }, -/area/ruin/unpowered/no_grav) +/area/space/nearstation) "ib" = ( /obj/item/stack/cable_coil/cut/red, /turf/open/floor/plating/airless, -/area/ruin/unpowered/no_grav) +/area/space/nearstation) "ic" = ( /obj/structure/table, /obj/structure/window/reinforced{ @@ -2488,7 +2481,7 @@ /turf/open/floor/plasteel/airless{ icon_state = "damaged4" }, -/area/ruin/unpowered/no_grav) +/area/space/nearstation) "ir" = ( /obj/structure/chair{ dir = 1 @@ -2513,7 +2506,7 @@ dir = 6 }, /turf/template_noop, -/area/template_noop) +/area/space/nearstation) "iv" = ( /obj/structure/table, /obj/structure/window/reinforced{ @@ -2667,7 +2660,7 @@ }, /obj/structure/grille, /turf/template_noop, -/area/template_noop) +/area/space/nearstation) "iU" = ( /obj/structure/table, /obj/structure/window/reinforced{ @@ -3243,7 +3236,7 @@ "kL" = ( /obj/structure/window/fulltile, /turf/template_noop, -/area/template_noop) +/area/space/nearstation) "kM" = ( /obj/structure/girder, /turf/open/floor/plating, @@ -3340,7 +3333,7 @@ /obj/structure/lattice, /obj/item/stack/cable_coil/cut/red, /turf/template_noop, -/area/template_noop) +/area/space/nearstation) "le" = ( /obj/effect/decal/cleanable/blood/splatter, /turf/open/floor/plasteel/airless, @@ -3676,7 +3669,7 @@ icon_state = "medium" }, /turf/open/floor/plating/airless, -/area/template_noop) +/area/ruin/unpowered/no_grav) "mn" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating/airless, @@ -4104,7 +4097,7 @@ "nI" = ( /obj/structure/girder/reinforced, /turf/open/floor/plating/airless, -/area/ruin/unpowered/no_grav) +/area/ruin/space/derelict/se_solar) "nJ" = ( /obj/structure/cable{ icon_state = "2-4" @@ -4449,20 +4442,65 @@ }, /turf/open/floor/plasteel, /area/ruin/space/derelict/bridge) +"rK" = ( +/turf/template_noop, +/area/ruin/space/derelict/medical) +"tS" = ( +/turf/template_noop, +/area/ruin/unpowered/no_grav) +"vf" = ( +/obj/structure/grille, +/turf/open/floor/plating/airless, +/area/space/nearstation) +"vC" = ( +/obj/structure/window/reinforced{ + dir = 1 + }, +/turf/template_noop, +/area/space/nearstation) "wK" = ( /turf/open/floor/plasteel/airless{ icon_state = "damaged3" }, /area/ruin/space/derelict/se_solar) +"xi" = ( +/obj/item/shard{ + icon_state = "medium" + }, +/turf/template_noop, +/area/ruin/unpowered/no_grav) "Av" = ( /obj/item/stack/rods, /turf/open/floor/plating/airless, /area/ruin/space/derelict/hallway/primary/port) +"Bx" = ( +/turf/open/floor/plasteel/airless{ + icon_state = "damaged3" + }, +/area/space/nearstation) +"Ev" = ( +/turf/open/floor/plasteel/airless{ + icon_state = "damaged2" + }, +/area/space/nearstation) +"Gu" = ( +/obj/structure/grille, +/turf/template_noop, +/area/space/nearstation) +"GM" = ( +/obj/structure/lattice, +/turf/template_noop, +/area/ruin/unpowered/no_grav) "Ih" = ( /turf/open/floor/plasteel/airless{ icon_state = "damaged3" }, /area/ruin/space/derelict/hallway/primary/port) +"IA" = ( +/turf/open/floor/plasteel/airless{ + icon_state = "floorscorched2" + }, +/area/space/nearstation) "KN" = ( /turf/closed/wall, /area/ruin/space/derelict/hallway/primary/port) @@ -4472,6 +4510,12 @@ }, /turf/open/floor/plating/airless, /area/ruin/space/derelict/hallway/primary/port) +"Lv" = ( +/turf/closed/wall, +/area/space/nearstation) +"Oj" = ( +/turf/closed/wall/r_wall, +/area/ruin/space/derelict/bridge/access) "OT" = ( /turf/closed/wall/r_wall, /area/ruin/space/derelict/hallway/primary/port) @@ -4481,9 +4525,15 @@ icon_state = "damaged4" }, /area/ruin/space/derelict/singularity_engine) +"Sv" = ( +/turf/closed/wall/r_wall, +/area/space/nearstation) "Tm" = ( /turf/open/floor/plating/airless, /area/ruin/space/derelict/hallway/primary/port) +"Uz" = ( +/turf/open/floor/plating/airless, +/area/space/nearstation) "Vz" = ( /turf/open/floor/plasteel/airless, /area/ruin/space/derelict/hallway/primary/port) @@ -4493,6 +4543,10 @@ icon_state = "damaged2" }, /area/ruin/space/derelict/singularity_engine) +"ZB" = ( +/obj/structure/lattice, +/turf/template_noop, +/area/space/nearstation) (1,1,1) = {" aa @@ -4665,7 +4719,7 @@ aa aa aa aa -hC +Gu hQ hQ iu @@ -4673,7 +4727,7 @@ iI iT hQ hQ -hC +Gu aa aa aa @@ -4789,7 +4843,7 @@ hR jL aY aY -ab +ZB aa aa aa @@ -5126,7 +5180,7 @@ iV je ju jL -ab +ZB aa aa aa @@ -5578,7 +5632,7 @@ hS ij hS jL -ab +ZB aa aa aa @@ -5691,8 +5745,8 @@ gX gX jv jL -ab -ab +ZB +ZB ay aa aa @@ -5806,7 +5860,7 @@ jw jL dE ay -ab +ZB aa aa aa @@ -6038,7 +6092,7 @@ aa aa aa aa -ab +ZB aa aa aa @@ -6151,7 +6205,7 @@ fZ aa aa aa -ab +ZB aa aa aa @@ -6261,10 +6315,10 @@ gL gU gn gL -ab -ab +ZB +ZB aa -ab +ZB aa aa aa @@ -6375,9 +6429,9 @@ gn gL gm gn -ab -ab -ab +ZB +ZB +ZB aa aa aa @@ -6490,7 +6544,7 @@ fZ fZ fZ gL -ab +ZB aa aa aa @@ -6603,8 +6657,8 @@ kN kW fZ gL -ab -ab +ZB +ZB aa aa aa @@ -6717,7 +6771,7 @@ kn fZ gL gL -ab +ZB aa aa aa @@ -6832,7 +6886,7 @@ ln gL gL aa -ab +ZB aa aa aa @@ -6945,17 +6999,17 @@ ka jY gL aa -ab +ZB aa aa aa aa aa -ab +ZB aa aa aa -ab +ZB aa aa aa @@ -7027,12 +7081,12 @@ aa aa aa aa -ab +ZB dr dr dr -ab -ab +ZB +ZB aa aa aa @@ -7058,17 +7112,17 @@ jY lF gL gL -ab +ZB aa aa aa aa -ab +ZB aa aa aa aa -ab +ZB aa aa aa @@ -7146,7 +7200,7 @@ dr dr dr dr -ab +ZB aa aa aa @@ -7171,20 +7225,20 @@ lo go jY gL -ab -ab -ab -ab +ZB +ZB +ZB +ZB aa aa aa aa -ab +ZB aa -ab -ab +ZB +ZB aa -ab +ZB aa aa aa @@ -7249,9 +7303,9 @@ aa aa aa aa -ab -ab -ab +ZB +ZB +ZB dr dr fL @@ -7259,8 +7313,8 @@ em ez dr dr -ab -ab +ZB +ZB aa aa hy @@ -7286,18 +7340,18 @@ go gL gL fZ -ab -ab -ab -ab -ab -ab -ab -ab +ZB +ZB +ZB +ZB +ZB +ZB +ZB +ZB ch -ab -ab -ab +ZB +ZB +ZB aa aa aa @@ -7361,9 +7415,9 @@ aa aa aa aa -ab -ab -ab +ZB +ZB +ZB dr dr ez @@ -7373,7 +7427,7 @@ ez ez dr dr -ab +ZB aa hm hz @@ -7403,14 +7457,14 @@ aa aa aa aa -ab +ZB aa aa aa md mZ mZ -ab +ZB aa aa aa @@ -7468,7 +7522,7 @@ aa aa aa aa -ab +ZB aa aa dr @@ -7516,14 +7570,14 @@ gL aa gL gL -ab +ZB gL aa aa me mU mZ -ab +ZB ay aa aa @@ -7571,18 +7625,18 @@ bl bl bl bl -ab -ab -ab -ab -ab +ZB +ZB +ZB +ZB +ZB aa aa aa -ab -ab -ab -ab +ZB +ZB +ZB +ZB dr dr dr @@ -7631,7 +7685,7 @@ mJ gL fZ gL -ab +ZB gL md mU @@ -7674,27 +7728,27 @@ ax aX be ax -ac -ac -ac -ac -ac -ac -ay -ay +vf +vf +vf +vf +vf +vf +Uz +Uz cb aa aa -ab +ZB aa aa aa aa aa -ab -ab -ab -ab +ZB +ZB +ZB +ZB dr dr ee @@ -7716,7 +7770,7 @@ dX dW dW hB -ab +eL hz hz hz @@ -7795,7 +7849,7 @@ bl bl bl bl -ab +ZB aa aa aa @@ -7805,9 +7859,9 @@ aa aa aa aa -ab -aY -ab +ZB +Sv +ZB dr dr ef @@ -7828,8 +7882,8 @@ gI dP gY hn -ab -ab +eL +eL hz hz hz @@ -7908,8 +7962,8 @@ aR aR bg ax -ab -ab +ZB +ZB aa aa aa @@ -7918,7 +7972,7 @@ aa aa aa aa -aY +Sv de dr dr @@ -7939,13 +7993,13 @@ gt fq gJ gR -ab -ab -hC -ab -ab -aa -aa +eL +eL +hn +eL +eL +rK +rK hz hz jj @@ -8022,7 +8076,7 @@ bo ax ax aa -ab +ZB aa aa aa @@ -8032,7 +8086,7 @@ aa aa aa aa -ab +ZB dr dr dP @@ -8052,13 +8106,13 @@ gu dW dW dW -ab -ab -ab -ab -ab -ab -aa +eL +eL +eL +eL +eL +eL +rK iO hz jk @@ -8145,7 +8199,7 @@ aa aa aa aa -ab +ZB dr dA dQ @@ -8170,8 +8224,8 @@ dW ez dr dr -ab -ab +eL +eL hv ja hv @@ -8253,8 +8307,8 @@ aa aa aa aa -ab -ab +ZB +ZB cl cl cl @@ -8284,7 +8338,7 @@ ez dr dr dr -ab +eL hv hz jl @@ -8475,9 +8529,9 @@ ax ax aa aa -ab +ZB aa -ab +ZB co cv cG @@ -8587,8 +8641,8 @@ aR ax ax aa -ay -ab +Uz +ZB aa cl cp @@ -8700,8 +8754,8 @@ ax ax ax aa -ac -ch +vf +Lv aa cl co @@ -8813,8 +8867,8 @@ aR bg ax aa -ac -ch +vf +Lv aa cl cq @@ -8850,7 +8904,7 @@ ez dr dr dr -ab +GM ay ay gD @@ -8926,15 +8980,15 @@ bp aR ax ax -ac -ch +vf +Lv aa cl cl -ab +ZB aa aa -ab +ZB cl cl dr @@ -8962,9 +9016,9 @@ ez dr dr dr -ab -aa -aa +GM +tS +tS jm jF fZ @@ -9039,8 +9093,8 @@ bp ax ax ax -ab -ab +ZB +ZB aa aa aa @@ -9048,8 +9102,8 @@ aa aa aa aa -ab -ab +ZB +ZB dr dr dO @@ -9074,10 +9128,10 @@ dO ez dr dr -ab -ab -ab -ab +GM +GM +GM +GM jn ay gD @@ -9152,7 +9206,7 @@ aR aR bT ax -ay +Uz aa aa aa @@ -9162,7 +9216,7 @@ aa aa aa aa -ab +ZB dr dr dX @@ -9187,10 +9241,10 @@ dP dO dr dr -ab -aa -aa -ab +GM +tS +tS +GM ay gD jp @@ -9274,7 +9328,7 @@ aa aa aa aa -aY +Sv dj dr dr @@ -9300,10 +9354,10 @@ dX dP dr dr -ab -aa -iR -ab +GM +tS +xi +GM ay ay jp @@ -9387,9 +9441,9 @@ aa aa aa aa -ab -aY -ab +ZB +Sv +ZB dr dr en @@ -9412,11 +9466,11 @@ dO ez dr dr -ab -aa +GM +tS iD -aa -ab +tS +GM ay ay jp @@ -9500,9 +9554,9 @@ aa aa aa aa -ab -ab -ab +ZB +ZB +ZB dr dr eo @@ -9525,11 +9579,11 @@ ez ez dr dr -aa -aa +tS +tS iD -aa -aa +tS +tS jo gP gD @@ -9614,9 +9668,9 @@ aa aa aa aa -ab -ab -ab +ZB +ZB +ZB dr dr dr @@ -9637,7 +9691,7 @@ dr dr dr dr -ab +GM ay ay iE @@ -9705,7 +9759,7 @@ aa aa aa aa -ay +Uz ax bj ax @@ -9727,17 +9781,17 @@ aa aa aa aa -ab -ab -ab -ab -ci -ci -ci -ci -ci -ci -ci +ZB +ZB +ZB +ZB +dr +dr +dr +dr +dr +dr +dr dr ez fQ @@ -9750,7 +9804,7 @@ dr dr dr dr -ab +GM fZ fZ fZ @@ -9818,7 +9872,7 @@ aa aa aa aa -ay +Uz ax bj ax @@ -9841,16 +9895,16 @@ aa aa aa aa -ab +ZB aa aa aa aa aa aa -ab -ab -ci +ZB +ZB +dr dr dW dO @@ -9859,10 +9913,10 @@ dX ez dr dr -aa -aa -aa -aa +tS +tS +tS +tS gL gU gm @@ -9905,18 +9959,18 @@ aa aa aa aa -aY -ac -ac -ac -ac -ac -ac -ab -ac -ac -ac -ac +nB +vf +vf +vf +vf +vf +vf +ZB +vf +vf +vf +vf "} (49,1,1) = {" aa @@ -9931,7 +9985,7 @@ aa aa aa aa -ay +Uz ax bj ax @@ -9962,8 +10016,8 @@ aa aa aa aa -ab -ab +ZB +ZB dr dr ez @@ -9971,8 +10025,8 @@ fY ez dr dr -ab -aa +GM +tS gL gL gl @@ -10015,10 +10069,10 @@ aa aa aa aa -ab -ab -ab -aY +ZB +ZB +ZB +nB aa aa aa @@ -10026,10 +10080,10 @@ aa aa aa aa -ab +ZB aa aa -ac +vf "} (50,1,1) = {" aa @@ -10044,7 +10098,7 @@ aa aa aa aa -ay +Uz ax bj ax @@ -10076,7 +10130,7 @@ aa aa aa aa -ab +ZB dr dr dr @@ -10084,7 +10138,7 @@ dr gk gk gk -ab +GM gx ha gL @@ -10124,14 +10178,14 @@ nd mU md aY -aY +nB nI -ab -ab +ZB +ZB ld nV nV -aY +nB aa aa on @@ -10142,7 +10196,7 @@ on oz ox aa -ac +vf "} (51,1,1) = {" aa @@ -10157,7 +10211,7 @@ aa aa aa aa -ay +Uz ax bj bj @@ -10188,10 +10242,10 @@ aa aa aa aa -ci -ci +Oj +Oj aa -ab +ZB dr dr gk @@ -10239,7 +10293,7 @@ nz ac aa nV -ab +ZB nV nV wK @@ -10255,7 +10309,7 @@ on oA ox aa -ac +vf "} (52,1,1) = {" aa @@ -10270,7 +10324,7 @@ aa aa aa aa -ay +Uz ax bj bj @@ -10368,7 +10422,7 @@ on os ox aa -ac +vf "} (53,1,1) = {" aa @@ -10383,7 +10437,7 @@ aa aa aa aa -aY +Sv ax bj bj @@ -10471,7 +10525,7 @@ nB oe nB nB -ab +ZB aa aa ot @@ -10481,7 +10535,7 @@ aa oB aa aa -ac +vf "} (54,1,1) = {" aa @@ -10496,7 +10550,7 @@ aa aa aa aa -ay +Uz ax bj bj @@ -10594,7 +10648,7 @@ oo ou oo oD -ac +vf "} (55,1,1) = {" aa @@ -10609,7 +10663,7 @@ aa aa aa aa -ay +Uz ax bj bj @@ -10697,7 +10751,7 @@ nB og nB nB -ab +ZB aa aa ot @@ -10707,7 +10761,7 @@ aa oB aa aa -ab +ZB "} (56,1,1) = {" aa @@ -10722,7 +10776,7 @@ aa aa aa aa -ay +Uz ax bj bj @@ -10820,7 +10874,7 @@ on ov ox aa -ac +vf "} (57,1,1) = {" aa @@ -10835,7 +10889,7 @@ aa aa aa aa -ay +Uz ax bj bj @@ -10857,15 +10911,15 @@ aa aa aa aa -ci +Oj dk -ci +Oj aa aa aa aa aa -ab +ZB cs fz fx @@ -10933,7 +10987,7 @@ on ov ox aa -ac +vf "} (58,1,1) = {" aa @@ -10948,7 +11002,7 @@ aa aa aa aa -ay +Uz ax bj bj @@ -10970,15 +11024,15 @@ aa aa aa aa -ci -ci -ci +Oj +Oj +Oj aa aa aa aa -ab -ab +ZB +ZB cs fA fx @@ -10995,9 +11049,9 @@ fZ gz hD gk -gP -gC -gC +Bx +IA +IA iq gk go @@ -11009,9 +11063,9 @@ kK aa gD ay -ab -ab -ab +ZB +ZB +ZB me ml mu @@ -11046,7 +11100,7 @@ on oC ox aa -ab +ZB "} (59,1,1) = {" aa @@ -11061,7 +11115,7 @@ aa aa aa aa -ay +Uz ax bj bj @@ -11083,15 +11137,15 @@ aa aa aa aa -ci -ci -ci +Oj +Oj +Oj aa aa aa -ab -ab -ab +ZB +ZB +ZB cs fB fx @@ -11108,10 +11162,10 @@ fZ gz gz gk -gC +IA iq ia -gC +IA gk gk jQ @@ -11121,10 +11175,10 @@ gk ch aa aa -ab +ZB ch aa -ab +ZB mf mf mf @@ -11156,10 +11210,10 @@ aa aa aa aa -ab +ZB aa aa -ab +ZB "} (60,1,1) = {" aa @@ -11174,7 +11228,7 @@ aa aa aa aa -aY +Sv ax bj bj @@ -11221,21 +11275,21 @@ fZ hD gL gk -gP -gC +Bx +IA aa aa -ay +Uz fZ gc fZ fD fD -ab +ZB aa aa aa -ab +ZB aa aa aY @@ -11262,32 +11316,32 @@ mf mf mf mf -ac -ac -ac -ac -ab -ac -ac -ab -ab -ac +vf +vf +vf +vf +ZB +vf +vf +ZB +ZB +vf aa "} (61,1,1) = {" aa aa aa -ab -ac -ac -ac -ac +ZB +vf +vf +vf +vf aa aa aa aa -ay +Uz ax bj bj @@ -11335,20 +11389,20 @@ gz gL gk iq -gC +IA aa aa -ab +ZB jG jR jG -ab -ab +ZB +ZB aa aa eV -ab -ab +ZB +ZB aa aa aY @@ -11392,15 +11446,15 @@ aa aa aa aa -ab +ZB aa aa -ac +vf aa aa aa aa -ay +Uz ax bj bj @@ -11442,16 +11496,16 @@ fx fZ gL aa -ab +ZB ch ay ch -ab +ZB aa aa aa aa -ab +ZB jG jS ch @@ -11460,11 +11514,11 @@ aa aa aa aa -ab +ZB dk aa -ab -ab +ZB +ZB aa aa aa @@ -11501,19 +11555,19 @@ aa aa "} (63,1,1) = {" -ab +ZB aa af ai ap -ab -ab -ac +ZB +ZB +vf aa aa aa aa -ay +Uz ax bj bj @@ -11554,17 +11608,17 @@ fT gB cs cs -ab +ZB hc gC gC ch -ab -ab -ab -ab -ab -ay +ZB +ZB +ZB +ZB +ZB +Uz ch jR kb @@ -11573,10 +11627,10 @@ aa aa aa aa -ab -ab -ab -ab +ZB +ZB +ZB +ZB aa aa aa @@ -11614,19 +11668,19 @@ aa aa "} (64,1,1) = {" -ac +vf aa ag ai ap aa aa -ac +vf aa aa aa aa -ay +Uz ax bj bj @@ -11667,17 +11721,17 @@ fx fx cs cs -ab +ZB ch ay gC hc -ab +ZB aa aa aa aa -ab +ZB jG jG ay @@ -11687,8 +11741,8 @@ aa aa aa aa -ab -ab +ZB +ZB aa aa aa @@ -11727,19 +11781,19 @@ aa aa "} (65,1,1) = {" -ac +vf aa ah aj ap aa aa -ac +vf aa aa aa aa -ay +Uz ax bj bj @@ -11790,7 +11844,7 @@ aa aa aa aa -ay +Uz aa jG kc @@ -11800,8 +11854,8 @@ aa aa aa aa -ab -ab +ZB +ZB aa aa aa @@ -11819,7 +11873,7 @@ aa aa it ml -iS +vC aa aa aa @@ -11840,19 +11894,19 @@ aa aa "} (66,1,1) = {" -ac +vf aa aa ak aa aa aa -ac -ay -ay -ay -ay -ay +vf +Uz +Uz +Uz +Uz +Uz ax bj bj @@ -11892,7 +11946,7 @@ cs cs cs cs -ab +ZB aa ch gC @@ -11903,7 +11957,7 @@ aa dk aa aa -ab +ZB aa jG kd @@ -11913,7 +11967,7 @@ aa kU aa aa -ab +ZB aa aa aa @@ -11932,7 +11986,7 @@ aa aa aa mZ -iS +vC aa aa aa @@ -11953,7 +12007,7 @@ aa aa "} (67,1,1) = {" -ac +vf aa ah al @@ -11998,14 +12052,14 @@ eP fe fo aY -ab -ab +ZB +ZB dk -ab +ZB aa aa aa -ab +ZB aa hc gC @@ -12016,7 +12070,7 @@ aa aa aa aa -ab +ZB aa ch ke @@ -12025,9 +12079,9 @@ aa aa aa aa -ab -ab -ab +ZB +ZB +ZB aa aa aa @@ -12045,7 +12099,7 @@ aa aa aa aa -iS +vC aa aa aa @@ -12066,7 +12120,7 @@ aa aa "} (68,1,1) = {" -ac +vf aa ah al @@ -12110,11 +12164,11 @@ eK eQ eP fo -ab +ZB aa aa aa -ab +ZB aa aa aa @@ -12129,7 +12183,7 @@ aa aa aa aa -ab +ZB aa ch kf @@ -12137,8 +12191,8 @@ ch aa aa aa -ab -ab +ZB +ZB aa aa aa @@ -12237,22 +12291,22 @@ gW hp hp gV -gD +Ev aa aa aa aa -ay -ab +Uz +ZB jT kg aa aa aa -ab +ZB ld -ab -ab +ZB +ZB aa aa aa @@ -12355,7 +12409,7 @@ ia aa aa aa -ab +ZB aa ch kc @@ -12366,7 +12420,7 @@ aa ld aa aa -ab +ZB aa aa eV @@ -12463,21 +12517,21 @@ gW hq hr gV -ay -ab +Uz +ZB iq aa aa -ab +ZB aa ch jR jG aa aa -ab -ab -ab +ZB +ZB +ZB aa aa aa @@ -12518,7 +12572,7 @@ aa aa "} (72,1,1) = {" -ab +ZB aa ah an @@ -12563,8 +12617,8 @@ ea oE fo aY -ab -ab +ZB +ZB aa aa aa @@ -12578,18 +12632,18 @@ hq gV ib iq -ab -gP +ZB +Bx gV -ay +Uz aa ch kc jG aa aa -ab -ab +ZB +ZB aa aa aa @@ -12631,7 +12685,7 @@ aa aa "} (73,1,1) = {" -ab +ZB aa ah an @@ -12676,7 +12730,7 @@ eS oE dz fD -ab +ZB aa aa aa @@ -12694,8 +12748,8 @@ gV gV gV gV -ay -ab +Uz +ZB hc kc jG @@ -12744,16 +12798,16 @@ aa aa "} (74,1,1) = {" -ac +vf aa aa ak aa aa aa -ac -aE -aE +vf +vf +vf as aV bc @@ -12857,27 +12911,27 @@ aa aa "} (75,1,1) = {" -ac +vf aa ah an ap aa aa -ac -ab -aE -aE +vf +ZB +vf +vf aa bd -bi -bi +Gu +Gu aa aa aa aa -bi -bi +Gu +Gu as az as @@ -12970,14 +13024,14 @@ aa aa "} (76,1,1) = {" -ac +vf aa ah an ap aa aa -ac +vf aa aa aa @@ -13083,14 +13137,14 @@ aa aa "} (77,1,1) = {" -ac +vf aa ah ao ap -ab -ab -ac +ZB +ZB +vf aa aa aa @@ -13196,14 +13250,14 @@ aa aa "} (78,1,1) = {" -ac +vf aa aa aa -ab +ZB aa aa -ab +ZB aa aa aa @@ -13309,14 +13363,14 @@ aa aa "} (79,1,1) = {" -ac -ac -ac -ac -ab -ac -ac -ac +vf +vf +vf +vf +ZB +vf +vf +vf aa aa aa diff --git a/_maps/RandomRuins/SpaceRuins/abandonedteleporter.dmm b/_maps/RandomRuins/SpaceRuins/abandonedteleporter.dmm index c08a68b6c7..1403cfdd16 100644 --- a/_maps/RandomRuins/SpaceRuins/abandonedteleporter.dmm +++ b/_maps/RandomRuins/SpaceRuins/abandonedteleporter.dmm @@ -8,7 +8,7 @@ "c" = ( /obj/structure/lattice, /turf/template_noop, -/area/template_noop) +/area/space/nearstation) "d" = ( /obj/structure/frame/computer, /turf/open/floor/plating/airless, @@ -81,12 +81,6 @@ /obj/machinery/portable_atmospherics/canister/air, /turf/open/floor/plating/airless, /area/ruin/space/abandoned_tele) -"t" = ( -/obj/effect/spawner/structure/window/hollow/reinforced/end{ - dir = 4 - }, -/turf/open/floor/plating/airless, -/area/ruin/space/abandoned_tele) "u" = ( /obj/effect/decal/cleanable/blood/old, /turf/open/floor/plating/airless, @@ -131,7 +125,7 @@ "C" = ( /obj/structure/lattice, /turf/open/space, -/area/ruin/space/abandoned_tele) +/area/space/nearstation) (1,1,1) = {" a @@ -181,7 +175,7 @@ c c k h -t +k c c a diff --git a/_maps/RandomRuins/SpaceRuins/abandonedzoo.dmm b/_maps/RandomRuins/SpaceRuins/abandonedzoo.dmm index 379be838e9..c2714a467c 100644 --- a/_maps/RandomRuins/SpaceRuins/abandonedzoo.dmm +++ b/_maps/RandomRuins/SpaceRuins/abandonedzoo.dmm @@ -267,7 +267,7 @@ dir = 4 }, /turf/template_noop, -/area/template_noop) +/area/space/nearstation) "aL" = ( /turf/open/floor/plasteel{ icon_state = "dark" @@ -305,7 +305,7 @@ dir = 8 }, /turf/template_noop, -/area/template_noop) +/area/space/nearstation) "aR" = ( /obj/machinery/light/small{ dir = 4 @@ -698,7 +698,7 @@ "bP" = ( /obj/structure/lattice, /turf/template_noop, -/area/template_noop) +/area/space/nearstation) "bQ" = ( /obj/machinery/shieldwallgen{ active = 2; @@ -748,9 +748,11 @@ "bX" = ( /turf/open/floor/plating/airless, /area/ruin/space/has_grav/abandonedzoo) +"KN" = ( +/turf/template_noop, +/area/space/nearstation) (1,1,1) = {" -aa ab ag ag @@ -772,7 +774,6 @@ ab aa "} (2,1,1) = {" -aa ac ah ai @@ -794,7 +795,6 @@ ac aa "} (3,1,1) = {" -aa ac ah ap @@ -816,7 +816,6 @@ ac aa "} (4,1,1) = {" -aa ac ai ah @@ -838,7 +837,6 @@ ac aa "} (5,1,1) = {" -aa ac aj ai @@ -860,7 +858,6 @@ ac aa "} (6,1,1) = {" -aa ad ak ak @@ -885,7 +882,6 @@ aa aa aa aa -aa at at aF @@ -907,7 +903,6 @@ aa aa aa aa -aa ag ax aG @@ -929,7 +924,6 @@ aa aa aa aa -aa ag ay aH @@ -951,7 +945,6 @@ aa aa aa aa -aa ag ay aH @@ -973,7 +966,6 @@ aa aa aa aa -aa ag az aI @@ -995,7 +987,6 @@ aa aa aa aa -aa at at aF @@ -1014,7 +1005,6 @@ aa aa "} (13,1,1) = {" -aa ae ak ak @@ -1036,7 +1026,6 @@ bS aa "} (14,1,1) = {" -aa ac al an @@ -1058,7 +1047,6 @@ ac aa "} (15,1,1) = {" -aa ac am am @@ -1080,7 +1068,6 @@ bT aa "} (16,1,1) = {" -aa ac an aq @@ -1102,7 +1089,6 @@ bU bW "} (17,1,1) = {" -aa ac ao an @@ -1124,7 +1110,6 @@ bP aa "} (18,1,1) = {" -aa af ak ak @@ -1142,7 +1127,7 @@ ag ag bN bP -aa +KN aa "} (19,1,1) = {" @@ -1163,29 +1148,6 @@ aa aa aa aa -aa bV aa "} -(20,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} diff --git a/_maps/RandomRuins/SpaceRuins/asteroid1.dmm b/_maps/RandomRuins/SpaceRuins/asteroid1.dmm index 421b289659..922702926d 100644 --- a/_maps/RandomRuins/SpaceRuins/asteroid1.dmm +++ b/_maps/RandomRuins/SpaceRuins/asteroid1.dmm @@ -20,12 +20,9 @@ a a a a -a -a -a -a -a -a +b +b +b a a a @@ -33,43 +30,37 @@ a "} (2,1,1) = {" a +b +b a a a a a a +c +c +c +b a a a -a -a -a -a -a -a -a -a -a -a +b "} (3,1,1) = {" a +b +b a a a a -a -a -a -a -a -a -a -a -a -a -a +b +b +c +c +c +b a a a @@ -78,19 +69,16 @@ a (4,1,1) = {" a a -a -a -a -a -a -a +b a a a a b -b -b +c +c +c +a a a a @@ -101,14 +89,10 @@ a a a a +a +a +a b -b -a -a -a -a -a -a c c c @@ -116,25 +100,23 @@ b a a a -b +a +a a "} (6,1,1) = {" a a a -b -b a a a a b b -c -c -c -b +a +a +a a a a @@ -145,16 +127,13 @@ a a a a -a b a a a a -b -c -c -c +a +a a a a @@ -167,16 +146,13 @@ a a a a -a -a -a -a -a b -c -c -c b +b +a +a +a +a a a a @@ -189,8 +165,8 @@ a a a a -a -a +c +b a a a @@ -201,33 +177,27 @@ a a a a -a -a -a -a -a +b +b "} (10,1,1) = {" a a a -a -a b a a a a a +b +b +b a a a -a -a -a -a -a -a +c +b "} (11,1,1) = {" a @@ -235,16 +205,13 @@ a a a a +a +a +a +a +c +c b -b -b -a -a -a -a -a -a -a a a a @@ -257,21 +224,18 @@ a a a a +a +a +b +b +c c -b a a a a -b -b a a -a -a -b -b -a "} (13,1,1) = {" a @@ -279,21 +243,18 @@ a a a a -b -a -a -a a a b -b -b -a -a -a c b a +a +a +a +a +a +a "} (14,1,1) = {" a @@ -303,13 +264,10 @@ a a a a -a -a -a -a -c -c b +b +b +a a a a @@ -318,120 +276,7 @@ a a "} (15,1,1) = {" -a -a -a -a -a -a -a -a -a b -b -c -c -a -a -a -a -a -a -a -"} -(16,1,1) = {" -a -a -a -a -a -a -a -a -a -b -c -b -a -a -a -a -a -a -a -a -"} -(17,1,1) = {" -a -a -a -a -a -a -a -a -a -b -b -b -a -a -a -a -a -a -a -a -"} -(18,1,1) = {" -a -a -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(19,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(20,1,1) = {" -a -a -a -a a a a diff --git a/_maps/RandomRuins/SpaceRuins/asteroid2.dmm b/_maps/RandomRuins/SpaceRuins/asteroid2.dmm index cfcc39dd2a..22c54103f0 100644 --- a/_maps/RandomRuins/SpaceRuins/asteroid2.dmm +++ b/_maps/RandomRuins/SpaceRuins/asteroid2.dmm @@ -29,8 +29,6 @@ a a a a -a -a b a "} @@ -38,8 +36,6 @@ a a a a -a -a b b b @@ -59,8 +55,6 @@ a (3,1,1) = {" a a -a -a b b b @@ -80,8 +74,6 @@ a "} (4,1,1) = {" a -a -a b b b @@ -102,8 +94,6 @@ a "} (5,1,1) = {" a -a -a b b b @@ -123,8 +113,6 @@ a a "} (6,1,1) = {" -a -a b b b @@ -145,8 +133,6 @@ a a "} (7,1,1) = {" -a -a b b b @@ -167,8 +153,6 @@ a a "} (8,1,1) = {" -a -a b b c @@ -189,8 +173,6 @@ a a "} (9,1,1) = {" -a -a b b b @@ -212,8 +194,6 @@ a "} (10,1,1) = {" a -a -a b b b @@ -234,8 +214,6 @@ a "} (11,1,1) = {" a -a -a b b b @@ -257,8 +235,6 @@ a (12,1,1) = {" a a -a -a b b d @@ -279,8 +255,6 @@ a (13,1,1) = {" a a -a -a b b d @@ -301,8 +275,6 @@ b (14,1,1) = {" a a -a -a b b b @@ -325,8 +297,6 @@ a a a a -a -a b b b @@ -349,8 +319,6 @@ a a a a -a -a b b b @@ -366,8 +334,6 @@ b "} (17,1,1) = {" a -a -a b a a @@ -388,8 +354,6 @@ a "} (18,1,1) = {" a -a -a b b a @@ -417,8 +381,6 @@ a a a a -a -a b b b @@ -431,8 +393,6 @@ a a "} (20,1,1) = {" -a -a b a a diff --git a/_maps/RandomRuins/SpaceRuins/asteroid3.dmm b/_maps/RandomRuins/SpaceRuins/asteroid3.dmm index cb02102435..29a8fe18b4 100644 --- a/_maps/RandomRuins/SpaceRuins/asteroid3.dmm +++ b/_maps/RandomRuins/SpaceRuins/asteroid3.dmm @@ -23,8 +23,6 @@ (1,1,1) = {" a a -a -a b a a @@ -50,8 +48,6 @@ a a a a -a -a b b d @@ -65,8 +61,6 @@ a a "} (3,1,1) = {" -a -a b b a @@ -87,8 +81,6 @@ b a "} (4,1,1) = {" -a -a b b b @@ -109,8 +101,6 @@ b a "} (5,1,1) = {" -a -a b b c @@ -132,8 +122,6 @@ a "} (6,1,1) = {" a -a -a b c c @@ -155,8 +143,6 @@ a (7,1,1) = {" a a -a -a b b c @@ -176,8 +162,6 @@ a "} (8,1,1) = {" a -a -a b b c @@ -198,8 +182,6 @@ b "} (9,1,1) = {" a -a -a b b c @@ -220,8 +202,6 @@ b "} (10,1,1) = {" a -a -a b b c @@ -242,8 +222,6 @@ b "} (11,1,1) = {" a -a -a b b c @@ -265,8 +243,6 @@ b (12,1,1) = {" a a -a -a b d d @@ -287,8 +263,6 @@ b (13,1,1) = {" a a -a -a b d d @@ -309,8 +283,6 @@ a (14,1,1) = {" a a -a -a b d d @@ -329,8 +301,6 @@ a a "} (15,1,1) = {" -a -a b a b @@ -353,8 +323,6 @@ b (16,1,1) = {" a a -a -a b b b @@ -376,8 +344,6 @@ a a a a -a -a b b c @@ -401,8 +367,6 @@ a a a a -a -a c d d @@ -419,8 +383,6 @@ a (19,1,1) = {" a a -a -a b a a @@ -438,25 +400,3 @@ a b a "} -(20,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} diff --git a/_maps/RandomRuins/SpaceRuins/asteroid4.dmm b/_maps/RandomRuins/SpaceRuins/asteroid4.dmm index da6047ce22..fcd24c54b4 100644 --- a/_maps/RandomRuins/SpaceRuins/asteroid4.dmm +++ b/_maps/RandomRuins/SpaceRuins/asteroid4.dmm @@ -35,9 +35,6 @@ }, /turf/closed/wall/mineral/titanium, /area/ruin/unpowered) -"l" = ( -/turf/closed/wall/mineral/titanium, -/area/ruin/unpowered) "m" = ( /obj/structure/chair{ dir = 1 @@ -75,6 +72,10 @@ (1,1,1) = {" a +c +c +b +b a a a @@ -84,51 +85,39 @@ a a a a -a -a -a -a -a -a -a -a +b +b a a "} (2,1,1) = {" -a -a -a +b c c b +e +e +a +a +a +a +a +a +b b -a -a -a -a -a -a -a -a -a b b a a "} (3,1,1) = {" -a -a b c c b e e -a -a -a +e a a a @@ -136,34 +125,33 @@ b b b b +b a a +b "} (4,1,1) = {" -a -a b -c -c +b +b +b b e e -e a a a -b -b +a +a b b b a a -b +a "} (5,1,1) = {" a -a b b b @@ -176,19 +164,16 @@ a a a a -b -b -b a a a +b +a "} (6,1,1) = {" a -a -a -b b +c b b b @@ -202,15 +187,13 @@ a a a a -b +a a "} (7,1,1) = {" a -a -a b -c +b b b b @@ -230,30 +213,6 @@ a (8,1,1) = {" a a -a -b -b -b -b -b -e -e -a -a -a -a -a -a -a -a -a -a -"} -(9,1,1) = {" -a -a -a -a b b b @@ -271,25 +230,43 @@ a a a "} +(9,1,1) = {" +a +a +b +b +b +b +a +a +a +a +a +d +d +h +h +a +a +a +"} (10,1,1) = {" a a a -a b -b -b -b -a +c +c a a a a d d -h -h -a +d +d +d +d a a "} @@ -299,30 +276,6 @@ a a a a -b -c -c -a -a -a -a -d -d -d -d -d -d -a -a -"} -(12,1,1) = {" -a -a -a -a -a -a -a a a a @@ -332,14 +285,12 @@ d d g j -l -l +j +j o a "} -(13,1,1) = {" -a -a +(12,1,1) = {" a a a @@ -359,9 +310,7 @@ n p a "} -(14,1,1) = {" -a -a +(13,1,1) = {" a a a @@ -376,41 +325,54 @@ f d i j -l -l +j +j o a "} +(14,1,1) = {" +a +a +a +a +a +a +d +d +d +d +d +d +d +d +d +d +a +a +"} (15,1,1) = {" a a a +d +d +d +d +d +d +d a a +f +f +d a a a -d -d -d -d -d -d -d -d -d -d -a -a "} (16,1,1) = {" a a -a -a -a -d -d d d d @@ -418,9 +380,12 @@ d d a a -f -f -d +a +a +a +a +a +a a a a @@ -431,74 +396,6 @@ a a a d -d -d -d -d -a -a -a -a -a -a -a -a -a -a -a -"} -(18,1,1) = {" -a -a -a -a -a -a -d -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(19,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(20,1,1) = {" -a -a -a -a -a -a -a a a a diff --git a/_maps/RandomRuins/SpaceRuins/asteroid5.dmm b/_maps/RandomRuins/SpaceRuins/asteroid5.dmm index ed4e0743c6..04f3e57b3e 100644 --- a/_maps/RandomRuins/SpaceRuins/asteroid5.dmm +++ b/_maps/RandomRuins/SpaceRuins/asteroid5.dmm @@ -43,12 +43,10 @@ a a a a -a -a -a -a -a -a +b +c +c +c a a a @@ -85,14 +83,12 @@ a a a a -a b c c c -a -a -a +c +b a a "} @@ -102,6 +98,10 @@ a a a a +b +b +c +c a a a @@ -121,22 +121,16 @@ a a a a -a -a -a -a -a -a -a +d +d +d b c c c -c b -a -a -a +b +b "} (4,1,1) = {" a @@ -144,14 +138,11 @@ a a a a -a b b -c -c -a -a -a +b +b +b a a a @@ -171,30 +162,30 @@ a d d d -b -c -c -c +d +d +b +b +b +b b b b -a "} (5,1,1) = {" a a a -a -a -a +c +c +c +b +b b b b b b -a -a -a a a a @@ -220,13 +211,12 @@ b b b b -a "} (6,1,1) = {" a a a -a +c c c c @@ -236,21 +226,19 @@ b b b b +c +c +c +a +a +a +a +a +a +a +a +b b -a -a -a -a -a -a -a -a -a -a -a -a -a -d d d d @@ -262,13 +250,12 @@ b b b b -a +b "} (7,1,1) = {" a a a -a c c c @@ -289,73 +276,67 @@ a a a a -a -b b d d d d b +c +c +c +c b b b b b -b -b -a "} (8,1,1) = {" a a -a -a -c +b c c c b b b -b -b -b -c -c -c -a -a -a -a -a -a -a -b d d d d b +b +b +a +a +a +a +a +a +a +d +d +d +b +b +b c c c c b b -b -b -b +c +c a "} (9,1,1) = {" a a -a b -c -c -c +b b b b @@ -363,95 +344,83 @@ d d d d -b -b -b -a -a -a -a -a -a -a +d d d d b -b -b -c -c -c -c -b -b -c -c a a +a +a +a +a +b +d +d +b +b +b +b +c +c +c +c +b +b +c +c +a "} (10,1,1) = {" a -a -a b b b b b -d -d -d -d -d -d -d -d -b -a -a -a -a -a -a -b -d -d -b -b -b -b -c -c -c -c -b -b c +d +d +d +a +a +d +d +d c a a +a +a +a +a +d +d +d +b +c +c +c +c +c +c +c +b +b +b +b +a "} (11,1,1) = {" a -a b b b b b -c d d -d -a -a -d -d -d -c -a -a a a a @@ -460,15 +429,24 @@ d d d b -c -c -c -c -c -c -c +a +a +a +a +a +a +d +d b b +c +c +c +c +d +d +d +b b b a @@ -476,8 +454,6 @@ a "} (12,1,1) = {" a -a -b b b b @@ -488,10 +464,11 @@ a a a a -d -d -d -b +a +a +a +a +a a a a @@ -500,29 +477,27 @@ a a d d -b -b -c c c c d d d +d +d +d +b b b b -a -a a "} (13,1,1) = {" a -a -b b b b +c d d a @@ -539,57 +514,55 @@ a a a a -a +b d d c c +b +d +d c d d d -d -d -d b b b b a -a "} (14,1,1) = {" a -a b b b c d +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +d d -a -a -a -a -a -a -a -a -a -a -a -a -a -a b -d -d c c b d d -c +b d d d @@ -598,22 +571,20 @@ b b b a -a "} (15,1,1) = {" -a -a b b b -c +d +d d a a a a a -a +b a a a @@ -629,8 +600,8 @@ b c c b -d -d +b +b b d d @@ -640,10 +611,8 @@ b b b a -a "} (16,1,1) = {" -a b b b @@ -655,7 +624,7 @@ a a a a -b +a a a a @@ -672,8 +641,8 @@ c c b b -b -b +d +d d d d @@ -681,11 +650,9 @@ b b b b -a -a +b "} (17,1,1) = {" -a b b b @@ -701,42 +668,40 @@ a a a a -a -a -a +b +b +b a a a d d b +b +b +b +b +d +d +d +d +b +b +b +b c c -b -b -d -d -d -d -d -b -b -b -b -b -a "} (18,1,1) = {" -a -b -b -b +c +c d d d a a -a +b +b a a a @@ -746,7 +711,7 @@ a b b b -a +b a a d @@ -755,21 +720,19 @@ b b b b -b d d d -d -b -b +c b b c c -a +b +c +c "} (19,1,1) = {" -a c c d @@ -779,19 +742,19 @@ a a b b -a -a +b a a a a b b -b +c +c b a a -d +b d b b @@ -800,7 +763,7 @@ b d d d -c +b b b c @@ -808,10 +771,8 @@ c b c c -a "} (20,1,1) = {" -a c c d @@ -828,49 +789,47 @@ a a b b -c -c b a a +a +a b d +d +d b b -b -b +d d d d b b b -c -c +b b c c -a "} (21,1,1) = {" -a c c +b d d -d -a -a -b -b -b a a a a -b -b -b +a +a +a +a +a +a +a +a a a a @@ -879,25 +838,23 @@ b d d d -b -b -d -d -d -d -b -b -b -b -b c c -a +c +b +d +d +b +b +b +b +b +b +b "} (22,1,1) = {" -a -c -c +b +b b d d @@ -917,7 +874,7 @@ a a a a -b +a d d d @@ -934,23 +891,23 @@ b b b b -a "} (23,1,1) = {" a b b +d +d +d +a +a +a +a +a +a +a +a b -d -d -a -a -a -a -a -a -a -a a a a @@ -963,13 +920,10 @@ a d d d -c -c -c -b d d -b +d +d b b b @@ -980,12 +934,21 @@ a "} (24,1,1) = {" a +b +b +c +d +d +d +d +a +a +a +a +a +a +a a -b -b -d -d -d a a a @@ -995,17 +958,7 @@ a a a b -a -a -a -a -a -a -a -a -a -d -d +c d d d @@ -1018,53 +971,49 @@ b b b a -a "} (25,1,1) = {" a +b +b +b +b +d +d +d a -b -b +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +d +d +d +d +d c -d -d -d -d -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b c -d -d -d -d -d -b -b -b -b -b b a a +a +a "} (26,1,1) = {" a -a b b b @@ -1090,14 +1039,13 @@ a a a a -d -d -d -d -d -c -c -b +a +a +a +a +a +a +a a a a @@ -1106,21 +1054,18 @@ a "} (27,1,1) = {" a -a +b +b +c +c b b b +a +a +a +b b -d -d -d -a -a -a -a -a -a -a a a a @@ -1129,6 +1074,7 @@ a a a a +b a a a @@ -1150,28 +1096,26 @@ a a a b -b c c b b b -a -a -a +b +b +b b b a a a a -a -a -a -a +d +d +d +b +b b -a -a a a a @@ -1192,28 +1136,26 @@ a a a a +a +a +a b -c +b +b +b +b +a +a +a +a +a +a +d +d +d c b b -b -b -b -b -b -b -a -a -a -a -d -d -d -b -b -b -a a a a @@ -1238,11 +1180,10 @@ a a a a -b -b -b -b -b +a +a +a +a a a a @@ -1252,13 +1193,12 @@ a d d d -c b b -a -a -a -a +b +b +b +b a a a @@ -1288,9 +1228,8 @@ a a a a -a -a -a +d +d d d d @@ -1300,8 +1239,7 @@ b b b b -a -a +b a a a @@ -1330,9 +1268,6 @@ a a a a -a -d -d d d d @@ -1343,7 +1278,8 @@ b b b b -a +b +c a a a @@ -1371,20 +1307,20 @@ a a a a -a -a d d d -b -b -b -b -b -b +d +d +d +d +c +c +c b b c +b a a a @@ -1392,10 +1328,8 @@ a a a a -a -a -a -a +b +b a "} (34,1,1) = {" @@ -1413,7 +1347,6 @@ a a a a -a d d d @@ -1421,14 +1354,13 @@ d d d d -c -c -c +d +d +d +b b b -c b -a a a a @@ -1437,7 +1369,7 @@ a a b b -a +b a "} (35,1,1) = {" @@ -1452,49 +1384,6 @@ a a a a -a -a -a -a -d -d -d -d -d -d -d -d -d -d -b -b -b -b -a -a -a -a -a -a -b -b -b -a -a -"} -(36,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a b b b @@ -1522,6 +1411,45 @@ b b b a +"} +(36,1,1) = {" +a +a +a +a +a +a +a +a +a +a +b +c +c +c +b +b +b +b +b +b +b +d +d +b +b +b +a +a +a +a +a +a +a +b +b +b +a a "} (37,1,1) = {" @@ -1534,21 +1462,20 @@ a a a a -a -a b c c c +c b b b b b b +c +c b -d -d b b b @@ -1559,9 +1486,8 @@ a a a a -b -b -b +a +a a a a @@ -1577,49 +1503,6 @@ a a a a -b -c -c -c -c -b -b -b -b -b -b -c -c -b -b -b -b -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(39,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a a c c @@ -1648,47 +1531,4 @@ a a a a -a -"} -(40,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a "} diff --git a/_maps/RandomRuins/SpaceRuins/bigderelict1.dmm b/_maps/RandomRuins/SpaceRuins/bigderelict1.dmm index b3d02e85cd..ff048c3b3c 100644 --- a/_maps/RandomRuins/SpaceRuins/bigderelict1.dmm +++ b/_maps/RandomRuins/SpaceRuins/bigderelict1.dmm @@ -18,7 +18,7 @@ /turf/open/floor/plating, /area/ruin/space/has_grav/derelictoutpost/cargobay) "af" = ( -/obj/structure/sign/vacuum{ +/obj/structure/sign/warning/vacuum{ pixel_y = 32 }, /obj/effect/decal/cleanable/cobweb, @@ -31,7 +31,7 @@ /turf/open/floor/plating, /area/ruin/space/has_grav/derelictoutpost/cargobay) "ah" = ( -/obj/structure/sign/vacuum{ +/obj/structure/sign/warning/vacuum{ pixel_y = 32 }, /turf/open/floor/plasteel, @@ -284,7 +284,7 @@ "aY" = ( /obj/structure/lattice, /turf/template_noop, -/area/template_noop) +/area/space/nearstation) "aZ" = ( /turf/closed/wall, /area/ruin/space/has_grav/derelictoutpost) @@ -364,7 +364,7 @@ /turf/open/floor/plasteel, /area/ruin/space/has_grav/derelictoutpost) "bk" = ( -/obj/structure/sign/vacuum{ +/obj/structure/sign/warning/vacuum{ pixel_y = 32 }, /turf/open/floor/plasteel, @@ -410,7 +410,7 @@ name = "gelatinous floor" }, /obj/structure/glowshroom/single, -/obj/structure/sign/vacuum{ +/obj/structure/sign/warning/vacuum{ pixel_y = 32 }, /obj/effect/decal/cleanable/blood/old{ @@ -2154,8 +2154,6 @@ aa aa aa aa -aa -aa ad ad ad @@ -2173,10 +2171,6 @@ aa aa aa aa -aa -aa -aa -aa "} (2,1,1) = {" aa @@ -2186,8 +2180,6 @@ aa aa aa aa -aa -aa aA aA aA @@ -2215,10 +2207,6 @@ ad aa aa aa -aa -aa -aa -aa "} (3,1,1) = {" aa @@ -2228,8 +2216,6 @@ aa aa aa aa -aa -aa aB aM aB @@ -2257,10 +2243,6 @@ ad aa aa aa -aa -aa -aa -aa "} (4,1,1) = {" aa @@ -2270,8 +2252,6 @@ aa aa aa aa -aa -aa aA aA aA @@ -2299,17 +2279,11 @@ ad ad aa aa -aa -aa -aa -aa "} (5,1,1) = {" aa aa aa -aa -aa ad ad ad @@ -2341,15 +2315,9 @@ ad ad aa aa -aa -aa -aa -aa "} (6,1,1) = {" aa -aa -aa ad ad ad @@ -2383,15 +2351,9 @@ ad aa aa aa -aa -aa -aa -aa "} (7,1,1) = {" aa -aa -aa ab ab ab @@ -2425,15 +2387,9 @@ ad aa aa aa -aa -aa -aa -aa "} (8,1,1) = {" aa -aa -aa ab af ai @@ -2467,14 +2423,8 @@ ad ad aa aa -aa -aa -aa -aa "} (9,1,1) = {" -aa -aa ab ab ab @@ -2509,14 +2459,8 @@ ad ad aa aa -aa -aa -aa -aa "} (10,1,1) = {" -aa -aa ac ae ag @@ -2551,14 +2495,8 @@ aC ad aa aa -aa -aa -aa -aa "} (11,1,1) = {" -aa -aa ac ae ag @@ -2593,14 +2531,8 @@ aC ad aa aa -aa -aa -aa -aa "} (12,1,1) = {" -aa -aa ac ae ag @@ -2635,14 +2567,8 @@ aC ad aa aa -aa -aa -aa -aa "} (13,1,1) = {" -aa -aa ac ae ag @@ -2677,14 +2603,8 @@ aC aC ad aa -aa -aa -aa -aa "} (14,1,1) = {" -aa -aa ac ae ag @@ -2719,14 +2639,8 @@ aC aC ad aa -aa -aa -aa -aa "} (15,1,1) = {" -aa -aa ac ae ag @@ -2761,14 +2675,8 @@ aC aC ad aa -aa -aa -aa -aa "} (16,1,1) = {" -aa -aa ac ae ag @@ -2803,14 +2711,8 @@ aC aC ad aa -aa -aa -aa -aa "} (17,1,1) = {" -aa -aa ac ae ag @@ -2845,14 +2747,8 @@ aC aC ad ad -aa -aa -aa -aa "} (18,1,1) = {" -aa -aa ac ae ag @@ -2887,14 +2783,8 @@ aC aC ad ad -aa -aa -aa -aa "} (19,1,1) = {" -aa -aa ab ab ab @@ -2929,15 +2819,9 @@ aC aC ad ad -aa -aa -aa -aa "} (20,1,1) = {" aa -aa -aa ab ah ak @@ -2971,15 +2855,9 @@ aC ad ad ad -aa -aa -aa -aa "} (21,1,1) = {" aa -aa -aa ab ab ab @@ -3013,10 +2891,6 @@ aC ad ad ad -aa -aa -aa -aa "} (22,1,1) = {" aa @@ -3024,8 +2898,6 @@ aa aa aa aa -aa -aa ad ad ad @@ -3055,10 +2927,6 @@ ad ad ad ad -aa -aa -aa -aa "} (23,1,1) = {" aa @@ -3067,8 +2935,6 @@ aa aa aa aa -aa -aa ad ad aa @@ -3097,10 +2963,6 @@ ad ad aa aa -aa -aa -aa -aa "} (24,1,1) = {" aa @@ -3112,8 +2974,6 @@ aa aa aa aa -aa -aa aY aK bz @@ -3139,10 +2999,6 @@ ad ad aa aa -aa -aa -aa -aa "} (25,1,1) = {" aa @@ -3154,8 +3010,6 @@ aa aa aa aa -aa -aa aY aK bA @@ -3181,10 +3035,6 @@ aa aa aa aa -aa -aa -aa -aa "} (26,1,1) = {" aa @@ -3196,8 +3046,6 @@ aa aa aa aa -aa -aa aY aK bB @@ -3223,10 +3071,6 @@ aa aa aa aa -aa -aa -aa -aa "} (27,1,1) = {" aa @@ -3238,8 +3082,6 @@ aa aa aa aa -aa -aa aY aZ bC @@ -3265,10 +3107,6 @@ aa aa aa aa -aa -aa -aa -aa "} (28,1,1) = {" aa @@ -3279,8 +3117,6 @@ aa aa aa aa -aa -aa ad aZ aZ @@ -3307,10 +3143,6 @@ aa aa aa aa -aa -aa -aa -aa "} (29,1,1) = {" aa @@ -3320,8 +3152,6 @@ aa aa aa aa -aa -aa aK aK aZ @@ -3349,10 +3179,6 @@ aa aa aa aa -aa -aa -aa -aa "} (30,1,1) = {" aa @@ -3362,8 +3188,6 @@ aa aa aa aa -aa -aa aL aR aL @@ -3391,10 +3215,6 @@ aa aa aa aa -aa -aa -aa -aa "} (31,1,1) = {" aa @@ -3404,8 +3224,6 @@ aa aa aa aa -aa -aa aK aK aZ @@ -3433,10 +3251,6 @@ aa aa aa aa -aa -aa -aa -aa "} (32,1,1) = {" aa @@ -3446,8 +3260,6 @@ aa aa aa aa -aa -aa ad ad aZ @@ -3475,10 +3287,6 @@ aa aa aa aa -aa -aa -aa -aa "} (33,1,1) = {" aa @@ -3488,8 +3296,6 @@ aa aa aa aa -aa -aa ad ad aZ @@ -3517,10 +3323,6 @@ aa aa aa aa -aa -aa -aa -aa "} (34,1,1) = {" aa @@ -3530,8 +3332,6 @@ aa aa aa aa -aa -aa ad ad aZ @@ -3559,10 +3359,6 @@ aa aa aa aa -aa -aa -aa -aa "} (35,1,1) = {" aa @@ -3572,8 +3368,6 @@ aa aa aa aa -aa -aa aK aK aZ @@ -3601,10 +3395,6 @@ aa aa aa aa -aa -aa -aa -aa "} (36,1,1) = {" aa @@ -3614,8 +3404,6 @@ aa aa aa aa -aa -aa aL aR aL @@ -3643,10 +3431,6 @@ aa aa aa aa -aa -aa -aa -aa "} (37,1,1) = {" aa @@ -3656,8 +3440,6 @@ aa aa aa aa -aa -aa aK aK aZ @@ -3685,10 +3467,6 @@ aa aa aa aa -aa -aa -aa -aa "} (38,1,1) = {" aa @@ -3699,8 +3477,6 @@ aa aa aa aa -aa -aa ad aZ aZ @@ -3727,10 +3503,6 @@ aa aa aa aa -aa -aa -aa -aa "} (39,1,1) = {" aa @@ -3741,8 +3513,6 @@ aa aa aa aa -aa -aa ad ad aC @@ -3769,10 +3539,6 @@ aa aa aa aa -aa -aa -aa -aa "} (40,1,1) = {" aa @@ -3784,8 +3550,6 @@ aa aa aa aa -aa -aa ad ad ad @@ -3811,8 +3575,4 @@ aa aa aa aa -aa -aa -aa -aa "} diff --git a/_maps/RandomRuins/SpaceRuins/bus.dmm b/_maps/RandomRuins/SpaceRuins/bus.dmm index 2c971b66e4..43c6f283f3 100644 --- a/_maps/RandomRuins/SpaceRuins/bus.dmm +++ b/_maps/RandomRuins/SpaceRuins/bus.dmm @@ -1,14 +1,14 @@ //MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE "aa" = ( -/turf/open/space, -/area/space) +/turf/template_noop, +/area/template_noop) "ab" = ( /turf/closed/mineral/ash_rock, /area/ruin/unpowered/no_grav) "ac" = ( /obj/item/trash/sosjerky, -/turf/open/space, -/area/space) +/turf/template_noop, +/area/template_noop) "ad" = ( /turf/open/floor/plating/asteroid/airless, /area/ruin/unpowered/no_grav) @@ -341,26 +341,6 @@ aa aa aa aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(2,1,1) = {" -aa -aa -aa -aa -aa ab ab ab @@ -375,7 +355,7 @@ ad aa aa "} -(3,1,1) = {" +(2,1,1) = {" aa aa aa @@ -395,7 +375,7 @@ ad ad aa "} -(4,1,1) = {" +(3,1,1) = {" aa aa aa @@ -415,7 +395,7 @@ aI ad ad "} -(5,1,1) = {" +(4,1,1) = {" aa aa aa @@ -435,7 +415,7 @@ aK ad ad "} -(6,1,1) = {" +(5,1,1) = {" aa aa ab @@ -455,7 +435,7 @@ aL ad ad "} -(7,1,1) = {" +(6,1,1) = {" aa aa ab @@ -475,7 +455,7 @@ aJ ad ad "} -(8,1,1) = {" +(7,1,1) = {" aa ab ab @@ -495,7 +475,7 @@ aM ad ad "} -(9,1,1) = {" +(8,1,1) = {" aa ab ab @@ -515,7 +495,7 @@ aN ad ad "} -(10,1,1) = {" +(9,1,1) = {" ab ab ab @@ -535,7 +515,7 @@ ad ad aa "} -(11,1,1) = {" +(10,1,1) = {" ab ab ab @@ -555,7 +535,7 @@ au ad aa "} -(12,1,1) = {" +(11,1,1) = {" ab ab ab @@ -575,7 +555,7 @@ ad aa aa "} -(13,1,1) = {" +(12,1,1) = {" aa ab ab @@ -595,7 +575,7 @@ ad aa aa "} -(14,1,1) = {" +(13,1,1) = {" ab ab ab @@ -615,7 +595,7 @@ ad aa aa "} -(15,1,1) = {" +(14,1,1) = {" ab ab ab @@ -635,7 +615,7 @@ aa aa aa "} -(16,1,1) = {" +(15,1,1) = {" ab ab ab @@ -655,7 +635,7 @@ aa aa aa "} -(17,1,1) = {" +(16,1,1) = {" aa ab ab @@ -675,7 +655,7 @@ aa aa aa "} -(18,1,1) = {" +(17,1,1) = {" aa aa ab @@ -695,7 +675,7 @@ aa aa aa "} -(19,1,1) = {" +(18,1,1) = {" aa aa aa @@ -715,7 +695,7 @@ aa aa aa "} -(20,1,1) = {" +(19,1,1) = {" aa aa aa @@ -735,7 +715,7 @@ aa aa aa "} -(21,1,1) = {" +(20,1,1) = {" aa aa aa @@ -755,7 +735,7 @@ aa aa aa "} -(22,1,1) = {" +(21,1,1) = {" aa ac aa @@ -775,23 +755,3 @@ aa aa aa "} -(23,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} diff --git a/_maps/RandomRuins/SpaceRuins/caravanambush.dmm b/_maps/RandomRuins/SpaceRuins/caravanambush.dmm index 2f3a1eb42c..b738fdbba1 100644 --- a/_maps/RandomRuins/SpaceRuins/caravanambush.dmm +++ b/_maps/RandomRuins/SpaceRuins/caravanambush.dmm @@ -3,173 +3,260 @@ /turf/template_noop, /area/template_noop) "ab" = ( -/turf/closed/wall/mineral/plastitanium, -/area/ruin/powered) +/obj/structure/girder/displaced, +/turf/template_noop, +/area/template_noop) "ac" = ( -/obj/machinery/door/airlock/external{ - icon_state = "door_locked"; - locked = 1 - }, -/turf/open/floor/plasteel, -/area/ruin/powered) +/obj/item/stack/sheet/mineral/plastitanium, +/turf/template_noop, +/area/template_noop) "ad" = ( -/turf/closed/wall, -/area/ruin/powered) +/obj/item/wallframe/camera, +/turf/template_noop, +/area/template_noop) "ae" = ( -/turf/closed/wall/mineral/plastitanium{ - dir = 1; - icon_state = "diagonalWall3" +/obj/structure/fluff/broken_flooring{ + icon_state = "plating"; + dir = 4 }, -/area/ruin/powered) +/turf/template_noop, +/area/template_noop) "af" = ( -/obj/machinery/suit_storage_unit, -/turf/open/floor/plasteel, -/area/ruin/powered) +/obj/structure/lattice/catwalk, +/turf/template_noop, +/area/template_noop) "ag" = ( -/turf/open/floor/plasteel, -/area/ruin/powered) +/obj/structure/lattice/catwalk, +/obj/structure/closet/crate/secure/weapon, +/obj/item/gun/ballistic/automatic/pistol/APS, +/turf/template_noop, +/area/template_noop) "ah" = ( -/turf/open/floor/plating/airless, -/area/ruin/powered) -"ai" = ( -/obj/machinery/door/airlock/external, -/turf/open/floor/plasteel, -/area/ruin/powered) -"aj" = ( -/obj/structure/statue/silver/medborg, -/turf/open/floor/plasteel, -/area/ruin/powered) -"ak" = ( -/mob/living/simple_animal/hostile/pirate/ranged{ +/obj/structure/lattice/catwalk, +/mob/living/simple_animal/hostile/pirate/space{ environment_smash = 0 }, -/turf/open/floor/plasteel, -/area/ruin/powered) +/turf/template_noop, +/area/template_noop) +"ai" = ( +/obj/structure/lattice, +/obj/structure/fluff/broken_flooring{ + dir = 2; + icon_state = "plating" + }, +/turf/template_noop, +/area/template_noop) +"aj" = ( +/obj/machinery/door/airlock/external{ + cyclelinkeddir = 2; + id_tag = "caravanpirate_bolt_port"; + locked = 1 + }, +/obj/docking_port/stationary{ + dir = 2; + dwidth = 14; + height = 13; + id = "caravanpirate_ambush"; + name = "Trade Route"; + width = 22 + }, +/obj/docking_port/mobile{ + callTime = 150; + dir = 2; + dwidth = 14; + height = 13; + id = "caravanpirate"; + movement_force = list("KNOCKDOWN" = 0, "THROW" = 0); + name = "Pirate Cutter"; + port_direction = 8; + preferred_direction = 4; + width = 22 + }, +/turf/open/floor/plating, +/area/shuttle/caravan/pirate) +"ak" = ( +/turf/open/floor/plating/airless{ + icon_state = "platingdmg2" + }, +/area/shuttle/caravan/freighter3) "al" = ( -/obj/structure/closet/emcloset, -/turf/open/floor/plasteel, -/area/ruin/powered) +/obj/structure/lattice, +/obj/structure/fluff/broken_flooring{ + icon_state = "singular" + }, +/turf/template_noop, +/area/shuttle/caravan/freighter1) "am" = ( -/obj/structure/closet{ - name = "pirate outfits" - }, -/obj/item/clothing/head/collectable/pirate, -/obj/item/clothing/suit/pirate, -/obj/item/clothing/under/pirate, -/obj/item/clothing/shoes/jackboots, -/obj/item/clothing/head/bandana, -/turf/open/floor/plasteel, -/area/ruin/powered) +/obj/structure/lattice, +/turf/template_noop, +/area/shuttle/caravan/freighter1) "an" = ( -/obj/structure/table, -/obj/item/stack/sheet/mineral/gold{ - amount = 25 +/obj/structure/lattice, +/obj/structure/fluff/broken_flooring{ + icon_state = "plating"; + dir = 4 }, -/obj/item/coin/plasma, -/turf/open/floor/plasteel, -/area/ruin/powered) +/turf/template_noop, +/area/template_noop) "ao" = ( -/obj/structure/table, -/obj/item/stack/sheet/mineral/gold{ - amount = 25 - }, -/obj/item/coin/gold, -/obj/item/coin/gold, -/obj/item/coin/mythril, -/obj/item/coin/plasma, -/turf/open/floor/plasteel, -/area/ruin/powered) +/obj/item/stack/sheet/mineral/titanium, +/turf/template_noop, +/area/template_noop) "ap" = ( -/obj/structure/table, -/obj/item/coin/gold, -/obj/item/coin/gold, -/obj/item/coin/gold, -/obj/item/coin/mythril, -/obj/item/coin/plasma, -/turf/open/floor/plasteel, -/area/ruin/powered) +/obj/structure/lattice, +/obj/structure/fluff/broken_flooring{ + icon_state = "pile"; + dir = 8 + }, +/turf/template_noop, +/area/template_noop) "aq" = ( -/obj/structure/table, -/mob/living/simple_animal/parrot{ - faction = list("pirate"); - name = "Pegwing" - }, -/turf/open/floor/plasteel, -/area/ruin/powered) +/turf/template_noop, +/area/shuttle/caravan/freighter1) "ar" = ( -/obj/structure/shuttle/engine/propulsion/burst{ - dir = 8 - }, -/turf/open/floor/plating/airless, -/area/ruin/powered) +/obj/structure/lattice, +/obj/item/stack/sheet/mineral/titanium, +/turf/template_noop, +/area/shuttle/caravan/freighter1) "as" = ( -/obj/structure/shuttle/engine/heater{ - dir = 8 +/obj/structure/fluff/broken_flooring{ + dir = 4; + icon_state = "singular" }, -/turf/closed/wall/mineral/plastitanium, -/area/ruin/powered) +/turf/template_noop, +/area/template_noop) "at" = ( -/obj/structure/bed, -/obj/item/bedsheet/brown, -/turf/open/floor/plasteel, -/area/ruin/powered) -"au" = ( -/obj/structure/chair{ +/obj/machinery/atmospherics/components/unary/vent_pump/on{ dir = 1 }, /turf/open/floor/plasteel, -/area/ruin/powered) +/area/shuttle/caravan/pirate) +"au" = ( +/mob/living/simple_animal/hostile/pirate, +/turf/open/floor/plasteel, +/area/shuttle/caravan/pirate) "av" = ( -/obj/structure/rack, -/obj/item/storage/bag/money/vault, -/turf/open/floor/plasteel, -/area/ruin/powered) +/obj/effect/turf_decal/bot_white/right, +/obj/structure/cable/yellow{ + icon_state = "0-2" + }, +/obj/machinery/power/apc{ + dir = 8; + name = "Tiny Freighter APC"; + pixel_x = -24; + req_access = null; + start_charge = 0 + }, +/obj/machinery/button/door{ + id = "caravantrade3_cargo_port"; + name = "Cargo Blast Door Control"; + pixel_y = 24 + }, +/obj/machinery/light/small{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/airless/dark, +/area/shuttle/caravan/freighter3) "aw" = ( -/obj/structure/closet/crate/secure/loot, -/turf/open/floor/plasteel, -/area/ruin/powered) +/obj/structure/rack, +/obj/item/storage/toolbox/mechanical, +/obj/item/device/flashlight, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/darkblue/side{ + dir = 4; + initial_gas_mix = "TEMP=2.7" + }, +/area/shuttle/caravan/freighter3) "ax" = ( -/obj/structure/table, -/turf/open/floor/plasteel, -/area/ruin/powered) +/obj/machinery/light/small{ + dir = 4 + }, +/obj/structure/cable/yellow, +/obj/machinery/power/apc{ + dir = 4; + name = "Small Freighter APC"; + pixel_x = 24; + req_access = null; + start_charge = 0 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plating/airless, +/area/shuttle/caravan/freighter1) "ay" = ( -/obj/machinery/computer, -/turf/open/floor/plasteel, -/area/ruin/powered) +/obj/effect/turf_decal/bot, +/obj/machinery/space_heater, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 4 + }, +/turf/open/floor/plating/airless{ + icon_state = "platingdmg3" + }, +/area/shuttle/caravan/freighter1) "az" = ( -/obj/structure/table, -/obj/item/storage/bag/money/vault, -/turf/open/floor/plasteel, -/area/ruin/powered) +/obj/machinery/door/airlock{ + id_tag = "caravantrade1_cabin2"; + name = "Cabin 2" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plasteel/vault/airless, +/area/shuttle/caravan/freighter1) "aA" = ( -/obj/structure/closet/crate{ - icon_state = "crateopen"; - opened = 1 +/obj/machinery/door/airlock{ + id_tag = "caravantrade1_cabin1"; + name = "Cabin 1" }, -/obj/item/stack/sheet/mineral/gold{ - amount = 25 - }, -/obj/item/stack/sheet/mineral/bananium{ - amount = 5 - }, -/obj/item/stack/sheet/mineral/silver{ - amount = 25 - }, -/obj/item/stack/sheet/mineral/uranium{ - amount = 10 - }, -/obj/item/stack/sheet/mineral/diamond{ - amount = 5 - }, -/turf/open/floor/plasteel, -/area/ruin/powered) +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plasteel/vault/airless, +/area/shuttle/caravan/freighter1) "aB" = ( -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/ruin/powered) +/obj/machinery/light/small, +/obj/structure/bed, +/obj/item/bedsheet, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/airalarm/all_access{ + dir = 8; + pixel_x = 24 + }, +/obj/machinery/button/door{ + id = "caravantrade1_cabin2"; + name = "Cabin Bolt Control"; + normaldoorcontrol = 1; + pixel_x = -25; + pixel_y = 6; + specialfunctions = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 1 + }, +/turf/open/floor/plasteel/vault/airless, +/area/shuttle/caravan/freighter1) "aC" = ( -/turf/closed/mineral, -/area/ruin/unpowered/no_grav) +/obj/machinery/light/small, +/obj/structure/bed, +/obj/item/bedsheet, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/airalarm/all_access{ + dir = 8; + pixel_x = 24 + }, +/obj/machinery/button/door{ + id = "caravantrade1_cabin1"; + name = "Cabin Bolt Control"; + normaldoorcontrol = 1; + pixel_x = -25; + pixel_y = 6; + specialfunctions = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 1 + }, +/turf/open/floor/plasteel/vault/airless, +/area/shuttle/caravan/freighter1) "aD" = ( /obj/item/stack/rods, /turf/template_noop, @@ -182,73 +269,151 @@ /turf/template_noop, /area/template_noop) "aF" = ( -/mob/living/simple_animal/hostile/pirate, -/turf/open/floor/plasteel, -/area/ruin/powered) +/obj/structure/toilet{ + dir = 4 + }, +/obj/structure/sink{ + pixel_y = 24 + }, +/obj/machinery/light/small, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/showroomfloor{ + initial_gas_mix = "TEMP=2.7" + }, +/area/shuttle/caravan/freighter1) "aG" = ( -/obj/structure/chair{ +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/darkblue/corner{ + dir = 4; + initial_gas_mix = "TEMP=2.7" + }, +/area/shuttle/caravan/freighter3) +"aH" = ( +/obj/machinery/door/airlock{ + name = "Restroom" + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/showroomfloor{ + initial_gas_mix = "TEMP=2.7" + }, +/area/shuttle/caravan/freighter1) +"aI" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/frame/computer{ + dir = 8 + }, +/obj/item/shard, +/turf/open/floor/plasteel/darkblue/side{ + dir = 8; + initial_gas_mix = "TEMP=2.7" + }, +/area/shuttle/caravan/freighter3) +"aJ" = ( +/obj/machinery/light/small{ + dir = 4 + }, +/obj/machinery/firealarm{ + dir = 4; + pixel_x = 24 + }, +/obj/effect/decal/cleanable/blood, +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 8 + }, +/mob/living/simple_animal/hostile/syndicate/ranged/space{ + environment_smash = 0; + name = "Syndicate Salvage Worker" + }, +/turf/open/floor/plasteel/yellow/corner{ + dir = 4; + initial_gas_mix = "TEMP=2.7" + }, +/area/shuttle/caravan/freighter1) +"aK" = ( +/obj/machinery/button/door{ + id = "caravantrade1_bolt"; + name = "External Bolt Control"; + normaldoorcontrol = 1; + pixel_x = -25; + pixel_y = 8; + specialfunctions = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on, +/turf/open/floor/plasteel/blue/corner{ + initial_gas_mix = "TEMP=2.7" + }, +/area/shuttle/caravan/freighter1) +"aL" = ( +/obj/machinery/airalarm/all_access{ + dir = 4; + pixel_x = -24 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/blood, +/obj/machinery/atmospherics/components/unary/vent_pump/on, +/turf/open/floor/plasteel/airless/dark, +/area/shuttle/caravan/freighter1) +"aM" = ( +/obj/effect/decal/cleanable/blood, +/turf/open/floor/plasteel/darkblue/corner{ + initial_gas_mix = "TEMP=2.7" + }, +/area/shuttle/caravan/freighter3) +"aN" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on, +/turf/open/floor/plasteel/airless/floorgrime, +/area/shuttle/caravan/freighter3) +"aO" = ( +/obj/machinery/airalarm/all_access{ + dir = 4; + pixel_x = -24 + }, +/obj/effect/decal/cleanable/blood, +/obj/machinery/atmospherics/components/unary/vent_pump/on{ dir = 1 }, -/mob/living/simple_animal/hostile/pirate, -/turf/open/floor/plasteel, -/area/ruin/powered) -"aH" = ( -/turf/open/floor/plating/asteroid/airless, -/area/ruin/unpowered/no_grav) -"aI" = ( -/turf/closed/wall/mineral/plastitanium, -/area/ruin/unpowered/no_grav) -"aJ" = ( -/obj/machinery/door/airlock/external{ - icon_state = "door_locked"; - locked = 1 - }, -/turf/open/floor/plating, -/area/ruin/unpowered/no_grav) -"aK" = ( -/turf/closed/wall/mineral/iron, -/area/ruin/unpowered/no_grav) -"aL" = ( -/obj/item/coin/mythril, -/turf/open/floor/plasteel, -/area/ruin/powered) -"aM" = ( -/obj/structure/chair, -/turf/open/floor/plasteel, -/area/ruin/powered) -"aN" = ( -/obj/structure/shuttle/engine/propulsion/burst{ - dir = 8 - }, -/turf/open/floor/plating/airless, -/area/ruin/unpowered/no_grav) -"aO" = ( -/obj/structure/shuttle/engine/heater{ - dir = 8 - }, -/turf/closed/wall/mineral/plastitanium, -/area/ruin/unpowered/no_grav) +/turf/open/floor/plasteel/airless/dark, +/area/shuttle/caravan/freighter3) "aP" = ( -/obj/structure/chair, -/obj/item/shard, -/obj/item/stack/sheet/metal, -/turf/open/floor/mineral/plastitanium/airless, -/area/ruin/unpowered/no_grav) -"aQ" = ( -/obj/structure/chair, -/obj/effect/decal/cleanable/shreds, -/turf/open/floor/mineral/plastitanium/airless, -/area/ruin/unpowered/no_grav) -"aR" = ( -/obj/item/shard, -/turf/open/floor/mineral/plastitanium/airless, -/area/ruin/unpowered/no_grav) -"aS" = ( -/turf/open/floor/plating/airless{ - icon_plating = "platingdmg1"; - icon_state = "platingdmg1" +/obj/machinery/atmospherics/components/unary/vent_pump/on, +/mob/living/simple_animal/hostile/pirate/space{ + environment_smash = 0 }, -/area/ruin/unpowered/no_grav) +/turf/open/floor/plasteel/airless/floorgrime, +/area/shuttle/caravan/freighter2) +"aQ" = ( +/obj/structure/rack, +/obj/item/tank/jetpack/carbondioxide, +/obj/item/tank/internals/emergency_oxygen/engi, +/obj/item/clothing/mask/gas, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/darkblue/side{ + dir = 4; + initial_gas_mix = "TEMP=2.7" + }, +/area/shuttle/caravan/freighter3) +"aR" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 8 + }, +/turf/open/floor/plasteel/airless, +/area/shuttle/caravan/freighter3) +"aS" = ( +/obj/machinery/power/smes{ + charge = 5e+006 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 5 + }, +/obj/structure/cable/yellow{ + icon_state = "0-4" + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/shuttle/caravan/syndicate3) "aT" = ( /obj/structure/fluff/broken_flooring{ icon_state = "singular" @@ -256,138 +421,205 @@ /turf/template_noop, /area/template_noop) "aU" = ( -/obj/structure/rack, -/obj/item/tank/internals/plasma/full, -/obj/item/tank/internals/plasma/full, -/obj/item/tank/internals/plasma/full, -/turf/open/floor/plasteel, -/area/ruin/powered) +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/structure/closet/crate, +/obj/machinery/power/terminal{ + dir = 1 + }, +/obj/structure/cable{ + icon_state = "0-2" + }, +/obj/item/stack/sheet/metal/twenty, +/obj/item/stack/sheet/glass{ + amount = 10 + }, +/obj/item/stack/sheet/mineral/plastitanium{ + amount = 20 + }, +/obj/item/storage/box/lights/bulbs, +/obj/item/storage/toolbox/mechanical, +/obj/item/stack/sheet/mineral/plasma{ + amount = 20 + }, +/turf/open/floor/plating, +/area/shuttle/caravan/syndicate3) "aV" = ( -/obj/structure/fluff/broken_flooring{ - icon_state = "singular" +/obj/effect/turf_decal/stripes/line{ + dir = 6 }, -/obj/effect/decal/cleanable/shreds, -/turf/open/floor/mineral/plastitanium/airless, -/area/ruin/unpowered/no_grav) +/obj/structure/cable, +/obj/machinery/power/port_gen/pacman{ + anchored = 1 + }, +/obj/item/wrench, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/shuttle/caravan/syndicate3) "aW" = ( -/obj/effect/gibspawner/human, -/turf/open/floor/mineral/plastitanium/airless, -/area/ruin/unpowered/no_grav) -"aX" = ( -/turf/open/floor/plating/airless{ - icon = 'icons/obj/smooth_structures/lattice.dmi'; - icon_plating = "lattice"; - icon_state = "lattice"; - name = "anchor chain" +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 }, -/area/template_noop) -"aY" = ( -/obj/structure/statue/gold/cmo, -/turf/open/floor/plasteel, -/area/ruin/powered) -"aZ" = ( -/obj/structure/table, -/obj/item/paper_bin, -/obj/item/pen, -/turf/open/floor/plasteel, -/area/ruin/powered) -"ba" = ( -/obj/structure/table, -/obj/item/stack/sheet/mineral/gold{ - amount = 25 - }, -/turf/open/floor/plasteel, -/area/ruin/powered) -"bb" = ( -/turf/closed/wall/mineral/plastitanium{ - dir = 4; - icon_state = "diagonalWall3" - }, -/area/ruin/powered) -"bc" = ( -/obj/structure/chair{ - dir = 1 - }, -/obj/item/stack/rods, -/obj/effect/gibspawner/human, -/turf/open/floor/mineral/plastitanium/airless, -/area/ruin/unpowered/no_grav) -"bd" = ( -/obj/structure/chair{ - dir = 1 - }, -/obj/item/shard, -/obj/item/stack/sheet/metal, -/obj/effect/decal/cleanable/shreds, -/turf/open/floor/mineral/plastitanium/airless, -/area/ruin/unpowered/no_grav) -"be" = ( -/turf/open/floor/mineral/plastitanium/airless, -/area/ruin/unpowered/no_grav) -"bf" = ( -/obj/item/stack/sheet/metal, -/turf/open/floor/plating/asteroid/airless, -/area/ruin/unpowered/no_grav) -"bg" = ( -/turf/open/floor/wood/airless, -/area/ruin/unpowered/no_grav) -"bh" = ( -/obj/structure/closet/crate/secure/weapon, -/obj/item/gun/ballistic/automatic/pistol/APS, -/turf/open/floor/wood/airless, -/area/ruin/unpowered/no_grav) -"bi" = ( -/mob/living/simple_animal/hostile/pirate/space{ - environment_smash = 0 - }, -/turf/open/floor/wood/airless, -/area/ruin/unpowered/no_grav) -"bj" = ( -/obj/structure/closet/crate/secure/weapon, -/obj/item/gun/ballistic/shotgun/automatic/dual_tube, -/turf/open/floor/wood/airless, -/area/ruin/unpowered/no_grav) -"bk" = ( -/obj/structure/girder, -/turf/template_noop, -/area/template_noop) -"bl" = ( -/turf/closed/wall/mineral/titanium, -/area/ruin/unpowered) -"bm" = ( -/obj/machinery/door/poddoor{ - id = "caravantrade1"; - name = "cargo blastdoor" - }, -/turf/open/floor/plating/airless{ - icon_plating = "platingdmg2"; - icon_state = "platingdmg2" - }, -/area/ruin/unpowered) -"bn" = ( -/turf/open/floor/plating/airless{ - icon_plating = "platingdmg1"; - icon_state = "platingdmg1" - }, -/area/ruin/unpowered) -"bo" = ( -/obj/structure/door_assembly/door_assembly_titanium{ +/obj/effect/decal/cleanable/dirt, +/obj/structure/door_assembly/door_assembly_com{ + anchored = 1; density = 0; name = "broken airlock" }, -/turf/open/floor/plating/airless{ - icon_plating = "platingdmg2"; - icon_state = "platingdmg2" +/turf/open/floor/plasteel/airless/dark, +/area/shuttle/caravan/freighter3) +"aX" = ( +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/door_assembly/door_assembly_min{ + anchored = 1; + density = 0; + name = "broken airlock" }, -/area/ruin/unpowered) -"bp" = ( -/turf/closed/wall/mineral/titanium/overspace, -/area/ruin/unpowered) -"bq" = ( -/obj/structure/fluff/broken_flooring{ - icon_state = "pile"; +/turf/open/floor/plasteel/airless/floorgrime, +/area/shuttle/caravan/freighter1) +"aY" = ( +/obj/effect/turf_decal/bot_white/right, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable/yellow{ + icon_state = "0-2" + }, +/obj/machinery/power/apc{ + dir = 8; + name = "Tiny Freighter APC"; + pixel_x = -24; + req_access = null; + start_charge = 0 + }, +/obj/machinery/button/door{ + id = "caravantrade2_cargo_port"; + name = "Cargo Blast Door Control"; + pixel_y = 24 + }, +/obj/machinery/light/small{ + dir = 1 + }, +/turf/open/floor/plasteel/airless/dark, +/area/shuttle/caravan/freighter2) +"aZ" = ( +/obj/machinery/door/firedoor, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/door_assembly/door_assembly_com{ + anchored = 1; + density = 0; + name = "broken airlock" + }, +/turf/open/floor/plasteel/airless/dark, +/area/shuttle/caravan/freighter2) +"ba" = ( +/obj/machinery/door/airlock/hatch{ + id_tag = "caravansyndicate3_bolt_starboard"; + name = "External Airlock"; + normalspeed = 0; + req_access_txt = "150" + }, +/turf/open/floor/plating, +/area/shuttle/caravan/syndicate3) +"bb" = ( +/obj/machinery/porta_turret/syndicate/pod{ + dir = 5; + faction = "pirate" + }, +/turf/closed/wall/mineral/plastitanium, +/area/shuttle/caravan/pirate) +"bc" = ( +/obj/machinery/porta_turret/syndicate/pod{ + dir = 6; + faction = "pirate" + }, +/turf/closed/wall/mineral/plastitanium, +/area/shuttle/caravan/pirate) +"bd" = ( +/turf/open/floor/plating/airless{ + icon_state = "platingdmg3" + }, +/area/shuttle/caravan/freighter3) +"be" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 1 + }, +/turf/open/floor/plasteel/vault/airless, +/area/shuttle/caravan/freighter1) +"bf" = ( +/obj/effect/turf_decal/bot_white, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 1 + }, +/turf/open/floor/plasteel/vault/airless, +/area/shuttle/caravan/freighter1) +"bg" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/airalarm/all_access{ + dir = 4; + pixel_x = -24 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 1 + }, +/turf/open/floor/plating/airless, +/area/shuttle/caravan/freighter2) +"bh" = ( +/obj/structure/chair{ + dir = 4 + }, +/obj/effect/gibspawner/human, +/turf/open/floor/plating/airless{ + icon_state = "platingdmg3" + }, +/area/shuttle/caravan/freighter2) +"bi" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/components/unary/vent_pump/on{ dir = 8 }, +/turf/open/floor/plasteel/airless{ + icon_state = "floorscorched1" + }, +/area/shuttle/caravan/freighter2) +"bj" = ( +/obj/machinery/light/small{ + dir = 8 + }, +/obj/machinery/button/door{ + id = "caravansyndicate3_bolt_port"; + name = "External Bolt Control"; + normaldoorcontrol = 1; + pixel_x = -24; + pixel_y = 6; + req_access_txt = "150"; + specialfunctions = 4 + }, +/turf/open/floor/plasteel/dark, +/area/shuttle/caravan/syndicate3) +"bk" = ( +/obj/machinery/light/small{ + dir = 8 + }, +/obj/machinery/button/door{ + id = "caravansyndicate3_bolt_starboard"; + name = "External Bolt Control"; + normaldoorcontrol = 1; + pixel_x = -24; + pixel_y = -6; + req_access_txt = "150"; + specialfunctions = 4 + }, +/turf/open/floor/plasteel/dark, +/area/shuttle/caravan/syndicate3) +"bl" = ( +/mob/living/simple_animal/hostile/carp, /turf/template_noop, /area/template_noop) "br" = ( @@ -398,758 +630,3250 @@ /obj/structure/lattice, /turf/template_noop, /area/template_noop) -"bu" = ( -/obj/item/stack/sheet/metal, -/obj/effect/decal/cleanable/dirt, -/obj/item/stack/rods, -/turf/open/floor/plating/airless{ - icon_plating = "platingdmg3"; - icon_state = "platingdmg3" - }, -/area/ruin/unpowered) -"bv" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/mineral/titanium/blue/airless, -/area/ruin/unpowered) -"bw" = ( -/turf/open/floor/mineral/titanium/blue/airless, -/area/ruin/unpowered) -"bx" = ( -/obj/machinery/button/door{ - pixel_x = 24 - }, -/turf/open/floor/mineral/titanium/blue/airless, -/area/ruin/unpowered) -"by" = ( -/obj/structure/bed, -/obj/item/bedsheet/black, -/turf/open/floor/mineral/titanium/blue/airless, -/area/ruin/unpowered) -"bz" = ( -/turf/closed/wall/mineral/titanium/interior, -/area/ruin/unpowered) -"bA" = ( -/obj/structure/fluff/broken_flooring{ - icon_state = "pile" - }, -/turf/template_noop, -/area/template_noop) -"bB" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating/airless{ - icon_plating = "platingdmg1"; - icon_state = "platingdmg1" - }, -/area/ruin/unpowered) -"bC" = ( -/turf/open/floor/plating/airless{ - icon_plating = "platingdmg3"; - icon_state = "platingdmg3" - }, -/area/ruin/unpowered) -"bD" = ( -/obj/structure/closet/crate/secure/gear, -/obj/item/ammo_casing/shotgun/techshell, -/obj/item/ammo_casing/shotgun/techshell, -/obj/item/ammo_casing/shotgun/techshell, -/obj/item/ammo_casing/shotgun/pulseslug, -/obj/item/storage/box/lethalshot, -/turf/open/floor/mineral/titanium/yellow/airless, -/area/ruin/unpowered) -"bE" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/mineral/titanium/yellow/airless, -/area/ruin/unpowered) -"bF" = ( -/mob/living/simple_animal/hostile/pirate/space/ranged{ - environment_smash = 0 - }, -/turf/open/floor/mineral/titanium/yellow/airless, -/area/ruin/unpowered) -"bG" = ( -/turf/open/floor/mineral/titanium/yellow/airless, -/area/ruin/unpowered) -"bH" = ( -/mob/living/simple_animal/hostile/pirate/space{ - environment_smash = 0 - }, -/turf/open/floor/mineral/titanium/blue/airless, -/area/ruin/unpowered) -"bI" = ( -/obj/structure/table, -/obj/item/storage/firstaid/regular, -/turf/open/floor/mineral/titanium/blue/airless, +"bt" = ( +/turf/closed/mineral/random, /area/ruin/unpowered) "bJ" = ( -/obj/effect/spawner/structure/window/shuttle, -/turf/open/floor/plating/airless{ - icon_plating = "platingdmg2"; - icon_state = "platingdmg2" - }, +/turf/closed/wall/mineral/plastitanium, /area/ruin/unpowered) -"bK" = ( -/obj/structure/fluff/broken_flooring{ - icon_state = "plating"; - dir = 1 - }, -/turf/template_noop, -/area/template_noop) -"bL" = ( -/obj/machinery/door/airlock/titanium, -/turf/open/floor/mineral/titanium/yellow/airless, -/area/ruin/unpowered) -"bM" = ( -/obj/effect/decal/cleanable/blood, -/turf/open/floor/mineral/titanium/blue/airless, -/area/ruin/unpowered) -"bN" = ( -/obj/structure/table, -/obj/item/paper_bin, -/obj/item/pen, -/turf/open/floor/mineral/titanium/blue/airless, -/area/ruin/unpowered) -"bO" = ( -/obj/machinery/door/airlock/titanium, -/turf/open/floor/plating/airless{ - icon_plating = "platingdmg3"; - icon_state = "platingdmg3" - }, -/area/ruin/unpowered) -"bP" = ( -/turf/closed/wall/mineral/plastitanium{ - dir = 8; - icon_state = "diagonalWall3" - }, -/area/ruin/powered) -"bQ" = ( -/obj/structure/fluff/broken_flooring{ - icon_state = "plating"; - dir = 1 - }, -/obj/structure/lattice, -/turf/template_noop, -/area/template_noop) -"bR" = ( -/obj/structure/girder, -/turf/open/floor/plating/airless{ - icon_plating = "platingdmg3"; - icon_state = "platingdmg3" - }, -/area/ruin/unpowered) -"bS" = ( -/obj/structure/girder, -/turf/open/floor/plating/airless{ - icon_plating = "platingdmg2"; - icon_state = "platingdmg2" - }, -/area/ruin/unpowered) -"bT" = ( -/obj/item/stack/sheet/metal, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating/airless{ - icon_plating = "platingdmg1"; - icon_state = "platingdmg1" - }, -/area/ruin/unpowered) -"bU" = ( -/obj/item/stack/rods, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating/airless{ - icon_plating = "platingdmg3"; - icon_state = "platingdmg3" - }, -/area/ruin/unpowered) -"bV" = ( -/obj/structure/closet/crate/secure/gear, -/obj/item/ammo_casing/shotgun/frag12, -/obj/item/ammo_casing/shotgun/frag12, -/obj/item/ammo_casing/shotgun/frag12, -/obj/item/ammo_casing/shotgun/frag12, -/obj/item/storage/box/beanbag, -/obj/item/storage/box/rubbershot, -/turf/open/floor/mineral/titanium/yellow/airless, -/area/ruin/unpowered) -"bW" = ( -/obj/structure/closet/crate/secure/gear, -/obj/item/ammo_box/c10mm, -/obj/item/ammo_casing/shotgun/meteorslug, -/obj/item/ammo_casing/shotgun/meteorslug, -/obj/item/ammo_casing/shotgun/meteorslug, -/turf/open/floor/mineral/titanium/yellow/airless, -/area/ruin/unpowered) -"bX" = ( -/obj/structure/closet/crate/secure/gear, -/obj/item/ammo_box/a40mm, -/obj/item/ammo_box/a40mm, -/turf/open/floor/mineral/titanium/yellow/airless, -/area/ruin/unpowered) -"bY" = ( -/obj/structure/chair{ - dir = 4 - }, -/obj/effect/mob_spawn/human/corpse/nanotrasensoldier, -/obj/effect/decal/cleanable/blood, -/turf/open/floor/mineral/titanium/blue/airless, -/area/ruin/unpowered) -"bZ" = ( -/obj/machinery/computer{ - dir = 8 - }, -/turf/open/floor/mineral/titanium/blue/airless, -/area/ruin/unpowered) -"ca" = ( -/obj/structure/shuttle/engine/propulsion/burst/left{ - dir = 8 - }, -/turf/open/floor/plating/airless, -/area/ruin/unpowered) -"cb" = ( -/obj/structure/shuttle/engine/heater{ - dir = 8 - }, -/turf/closed/wall/mineral/titanium, -/area/ruin/unpowered) -"cc" = ( -/obj/structure/table, -/turf/open/floor/mineral/titanium/blue/airless, -/area/ruin/unpowered) -"cd" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/bed, -/obj/item/bedsheet/black, -/turf/open/floor/mineral/titanium/blue/airless, -/area/ruin/unpowered) -"ce" = ( -/obj/structure/table, -/turf/open/floor/mineral/plastitanium, -/area/ruin/powered) -"cf" = ( -/obj/machinery/computer, -/turf/open/floor/mineral/plastitanium, -/area/ruin/powered) -"cg" = ( -/obj/structure/fluff/broken_flooring{ - icon_state = "plating"; - dir = 4 - }, -/obj/structure/lattice, -/turf/template_noop, -/area/template_noop) "ch" = ( -/obj/item/stack/rods, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating/airless{ - icon_plating = "platingdmg2"; - icon_state = "platingdmg2" - }, -/area/ruin/unpowered) -"ci" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating/airless{ - icon_plating = "platingdmg3"; - icon_state = "platingdmg3" - }, -/area/ruin/unpowered) -"cj" = ( -/turf/open/floor/plating/airless, -/area/ruin/unpowered) -"ck" = ( -/obj/structure/closet/crate/secure/weapon, -/obj/item/gun/ballistic/revolver/grenadelauncher/unrestricted, -/turf/open/floor/mineral/titanium/yellow/airless, -/area/ruin/unpowered) -"cl" = ( -/mob/living/simple_animal/hostile/pirate/space{ - environment_smash = 0 - }, -/turf/open/floor/mineral/titanium/yellow/airless, -/area/ruin/unpowered) -"cm" = ( -/obj/structure/door_assembly/door_assembly_titanium{ - density = 0; - name = "broken airlock" - }, -/turf/open/floor/mineral/titanium/yellow/airless, -/area/ruin/unpowered) -"cn" = ( -/obj/structure/table, -/obj/item/device/gps{ - gpstag = "Distress Signal" - }, -/turf/open/floor/mineral/titanium/blue/airless, -/area/ruin/unpowered) -"co" = ( -/obj/structure/shuttle/engine/propulsion/burst{ - dir = 8 - }, -/turf/open/floor/plating/airless, -/area/ruin/unpowered) -"cp" = ( -/obj/structure/closet/crate/secure/engineering, -/obj/item/storage/toolbox/mechanical, -/obj/item/storage/toolbox/mechanical, -/obj/item/storage/toolbox/electrical, -/obj/item/storage/toolbox/electrical, -/obj/item/clothing/gloves/color/yellow, -/turf/open/floor/mineral/titanium/yellow/airless, -/area/ruin/unpowered) -"cq" = ( -/obj/item/shard, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/mineral/titanium/blue/airless, -/area/ruin/unpowered) -"cr" = ( -/obj/structure/table_frame, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/mineral/titanium/blue/airless, -/area/ruin/unpowered) -"cs" = ( -/turf/open/floor/mineral/plastitanium, -/area/ruin/powered) -"ct" = ( -/obj/structure/chair{ - dir = 1 - }, -/mob/living/simple_animal/hostile/syndicate{ - environment_smash = 0; - name = "Syndicate Salvage Pilot" - }, -/turf/open/floor/mineral/plastitanium, -/area/ruin/powered) -"cu" = ( -/obj/structure/closet/crate/secure/engineering, -/obj/item/wrench/caravan, -/obj/item/screwdriver/caravan, -/obj/item/wirecutters/caravan, -/obj/item/crowbar/red/caravan, -/turf/open/floor/mineral/plastitanium, -/area/ruin/powered) -"cv" = ( -/obj/effect/decal/cleanable/dirt, -/mob/living/simple_animal/hostile/syndicate/ranged/space{ - environment_smash = 0; - name = "Syndicate Salvage Worker" - }, -/turf/open/floor/mineral/titanium/blue/airless, -/area/ruin/unpowered) -"cw" = ( -/obj/item/stack/rods, -/turf/open/floor/plating/airless{ - icon_plating = "platingdmg3"; - icon_state = "platingdmg3" - }, -/area/ruin/unpowered) -"cx" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating/airless{ - icon_plating = "platingdmg2"; - icon_state = "platingdmg2" - }, -/area/ruin/unpowered) -"cy" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/structure/girder, -/turf/open/floor/plating/airless{ - icon_plating = "platingdmg3"; - icon_state = "platingdmg3" - }, -/area/ruin/unpowered) -"cz" = ( -/obj/item/stack/sheet/metal, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating/airless{ - icon_plating = "platingdmg3"; - icon_state = "platingdmg3" - }, -/area/ruin/unpowered) -"cA" = ( -/obj/structure/closet/crate/secure/weapon, -/obj/item/gun/ballistic/shotgun/riot, -/obj/item/gun/ballistic/shotgun/riot, -/turf/open/floor/mineral/titanium/yellow/airless, -/area/ruin/unpowered) -"cB" = ( -/obj/structure/closet/crate/secure/weapon, -/obj/item/gun/syringe/syndicate, -/obj/item/gun/syringe/rapidsyringe, -/turf/open/floor/mineral/titanium/yellow/airless, -/area/ruin/unpowered) -"cC" = ( -/obj/structure/closet/crate/secure/weapon, -/obj/item/gun/ballistic/automatic/c20r/toy/unrestricted/riot, -/obj/item/gun/ballistic/automatic/c20r/toy/unrestricted/riot, -/turf/open/floor/mineral/titanium/yellow/airless, -/area/ruin/unpowered) -"cD" = ( -/mob/living/simple_animal/hostile/pirate/space/ranged{ - environment_smash = 0 - }, -/turf/open/floor/mineral/titanium/blue/airless, -/area/ruin/unpowered) -"cE" = ( -/obj/structure/table, -/obj/item/clipboard, -/turf/open/floor/mineral/titanium/blue/airless, -/area/ruin/unpowered) -"cF" = ( -/obj/structure/shuttle/engine/propulsion/burst/right{ - dir = 8 - }, -/turf/open/floor/plating/airless, -/area/ruin/unpowered) -"cG" = ( -/mob/living/simple_animal/hostile/syndicate/melee/space{ - environment_smash = 0; - name = "Syndicate Salvage Worker" - }, -/turf/open/floor/mineral/titanium/yellow/airless, -/area/ruin/unpowered) -"cH" = ( -/obj/item/stack/rods, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating/airless{ - icon_plating = "platingdmg1"; - icon_state = "platingdmg1" - }, -/area/ruin/unpowered) -"cI" = ( -/obj/structure/grille/broken, -/obj/item/shard, -/turf/open/floor/plating/airless{ - icon_plating = "platingdmg1"; - icon_state = "platingdmg1" - }, -/area/ruin/unpowered) -"cJ" = ( -/obj/structure/closet/crate/secure/engineering, -/obj/item/clothing/gloves/color/yellow, -/obj/item/clothing/gloves/color/yellow, -/turf/open/floor/mineral/plastitanium, -/area/ruin/powered) -"cK" = ( -/obj/structure/closet/crate, -/obj/item/stack/sheet/plasteel/twenty, -/obj/item/stack/sheet/plasteel/twenty, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/mineral/titanium/yellow/airless, -/area/ruin/unpowered) -"cL" = ( -/obj/item/stack/sheet/metal, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/mineral/titanium/yellow/airless, -/area/ruin/unpowered) -"cM" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating/airless{ - icon_plating = "platingdmg3"; - icon_state = "platingdmg3" - }, -/area/ruin/unpowered) -"cN" = ( -/obj/structure/closet/crate/secure/plasma, -/obj/item/tank/internals/plasma/full, -/obj/item/tank/internals/plasma/full, -/obj/item/stack/sheet/mineral/plasma{ - amount = 25 - }, -/turf/open/floor/mineral/titanium/yellow/airless, -/area/ruin/unpowered) -"cO" = ( -/obj/item/shard, -/turf/open/floor/mineral/titanium/blue/airless, -/area/ruin/unpowered) -"cP" = ( -/obj/item/chair, -/obj/effect/mob_spawn/human/corpse/nanotrasensoldier, -/obj/effect/decal/cleanable/blood, -/turf/open/floor/mineral/titanium/blue/airless, -/area/ruin/unpowered) -"cQ" = ( -/obj/item/stack/rods, -/obj/item/stack/sheet/metal, -/turf/open/floor/plating/airless{ - icon_plating = "platingdmg1"; - icon_state = "platingdmg1" - }, -/area/ruin/unpowered) -"cR" = ( -/obj/structure/fluff/broken_flooring{ - icon_state = "plating"; - dir = 8 - }, -/obj/structure/lattice, -/turf/template_noop, -/area/template_noop) -"cS" = ( -/obj/machinery/door/airlock/external{ - icon_state = "door_locked"; - locked = 1 - }, -/turf/open/floor/plating, -/area/ruin/powered) -"cT" = ( -/obj/machinery/porta_turret/syndicate/pod, -/turf/open/floor/plating/airless, -/area/ruin/powered) -"cU" = ( -/obj/effect/decal/cleanable/dirt, -/mob/living/simple_animal/hostile/syndicate/melee/space/stormtrooper{ - environment_smash = 0; - name = "Syndicate Salvage Leader" - }, -/turf/open/floor/mineral/titanium/yellow/airless, -/area/ruin/unpowered) -"cV" = ( -/obj/structure/chair{ - dir = 4 - }, -/obj/effect/decal/cleanable/blood, -/turf/open/floor/mineral/titanium/blue/airless, -/area/ruin/unpowered) -"cW" = ( -/obj/structure/closet/crate/secure/plasma, -/obj/item/tank/internals/plasma/full, -/obj/item/stack/sheet/mineral/plasma{ - amount = 25 - }, -/turf/open/floor/mineral/titanium/yellow/airless, -/area/ruin/unpowered) -"cX" = ( -/obj/structure/closet/crate/secure/engineering, -/obj/item/organ/cyberimp/arm/toolset, -/obj/item/organ/cyberimp/arm/toolset, -/turf/open/floor/mineral/titanium/yellow/airless, -/area/ruin/unpowered) -"cY" = ( -/obj/structure/closet/crate/secure/plasma, -/obj/item/mecha_parts/mecha_equipment/weapon/energy/plasma, -/turf/open/floor/mineral/titanium/yellow/airless, -/area/ruin/unpowered) -"cZ" = ( -/mob/living/simple_animal/hostile/syndicate/ranged/space/stormtrooper{ - environment_smash = 0; - name = "Syndicate Salvage Leader" - }, -/turf/open/floor/mineral/titanium/yellow/airless, -/area/ruin/unpowered) -"da" = ( -/obj/item/stack/rods, -/obj/item/shard, -/mob/living/simple_animal/hostile/syndicate/melee/space{ - environment_smash = 0; - name = "Syndicate Salvage Worker" - }, -/turf/open/floor/mineral/titanium/blue/airless, -/area/ruin/unpowered) -"db" = ( -/obj/item/shard, -/turf/open/floor/plating/airless{ - icon_plating = "platingdmg1"; - icon_state = "platingdmg1" - }, -/area/ruin/unpowered) +/turf/closed/wall/mineral/plastitanium, +/area/shuttle/caravan/pirate) "dc" = ( /obj/item/shard, /turf/template_noop, /area/template_noop) -"dd" = ( +"dB" = ( +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/shuttle/caravan/pirate) +"dD" = ( +/turf/open/floor/plating/asteroid/airless, +/area/ruin/unpowered) +"dE" = ( +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ruin/unpowered) +"dF" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/frame/computer, +/obj/item/shard, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/mineral/plastitanium/airless, +/area/ruin/unpowered) +"dG" = ( +/obj/machinery/light/small{ + dir = 8 + }, +/obj/structure/sign/warning/vacuum{ + pixel_x = -32 + }, +/turf/open/floor/plating, +/area/shuttle/caravan/pirate) +"dH" = ( +/obj/structure/grille, +/obj/structure/window/plastitanium, +/obj/machinery/door/poddoor{ + id = "caravanpirate_bridge" + }, +/turf/open/floor/plating, +/area/shuttle/caravan/pirate) +"dI" = ( +/obj/machinery/atmospherics/components/unary/tank/air, +/obj/effect/turf_decal/bot, +/turf/open/floor/plating, +/area/shuttle/caravan/pirate) +"dJ" = ( +/obj/machinery/suit_storage_unit/open, +/turf/open/floor/plasteel/vault{ + dir = 5 + }, +/area/shuttle/caravan/pirate) +"dK" = ( +/obj/machinery/door/airlock/external{ + cyclelinkeddir = 1; + id_tag = "caravanpirate_bolt_port"; + locked = 1 + }, +/turf/open/floor/plating, +/area/shuttle/caravan/pirate) +"dL" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/door_assembly/door_assembly_hatch{ + density = 0; + name = "broken airlock" + }, +/turf/open/floor/plating/airless, +/area/ruin/unpowered) +"dN" = ( +/obj/structure/shuttle/engine/propulsion/burst/left{ + dir = 8 + }, +/turf/open/floor/plating/airless, +/area/shuttle/caravan/pirate) +"dO" = ( +/obj/structure/shuttle/engine/heater{ + dir = 8 + }, +/obj/structure/window/reinforced{ + dir = 4 + }, +/turf/open/floor/plating/airless, +/area/shuttle/caravan/pirate) +"dP" = ( +/obj/structure/reagent_dispensers/watertank, +/obj/item/reagent_containers/glass/bucket, +/obj/item/mop, +/obj/effect/turf_decal/stripes/line{ + dir = 5 + }, +/turf/open/floor/plating, +/area/shuttle/caravan/pirate) +"dQ" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 8 + }, +/obj/machinery/meter, +/turf/open/floor/plating, +/area/shuttle/caravan/pirate) +"dR" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/engineering{ + name = "Engineering" + }, +/turf/open/floor/plating, +/area/shuttle/caravan/pirate) +"dS" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/white/side{ + dir = 9 + }, +/area/shuttle/caravan/pirate) +"dT" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/white/side{ + dir = 1 + }, +/area/shuttle/caravan/pirate) +"dU" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 1 + }, +/turf/open/floor/plasteel/white/side{ + dir = 1 + }, +/area/shuttle/caravan/pirate) +"dV" = ( +/obj/machinery/button/door{ + id = "caravanpirate_bolt_port"; + name = "External Bolt Control"; + normaldoorcontrol = 1; + pixel_x = -4; + pixel_y = 25; + specialfunctions = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/white/side{ + dir = 1 + }, +/area/shuttle/caravan/pirate) +"dW" = ( +/obj/machinery/light/small{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 10 + }, +/turf/open/floor/plasteel/white/side{ + dir = 1 + }, +/area/shuttle/caravan/pirate) +"dX" = ( +/obj/structure/sign/departments/medbay/alt, +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/shuttle/caravan/pirate) +"dY" = ( +/obj/structure/closet{ + name = "pirate outfits" + }, +/obj/item/clothing/head/collectable/pirate, +/obj/item/clothing/suit/pirate, +/obj/item/clothing/under/pirate, +/obj/item/clothing/shoes/jackboots, +/obj/item/clothing/head/bandana, +/turf/open/floor/plasteel/dark/side{ + dir = 5 + }, +/area/shuttle/caravan/pirate) +"dZ" = ( +/obj/machinery/light/small{ + dir = 1 + }, +/obj/structure/bed, +/obj/item/bedsheet/brown, +/turf/open/floor/plasteel/dark, +/area/shuttle/caravan/pirate) +"ea" = ( +/obj/structure/shuttle/engine/propulsion/burst{ + dir = 8 + }, +/turf/open/floor/plating/airless, +/area/shuttle/caravan/pirate) +"eb" = ( +/obj/structure/reagent_dispensers/fueltank, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/plating, +/area/shuttle/caravan/pirate) +"ec" = ( +/obj/machinery/light/small{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plating, +/area/shuttle/caravan/pirate) +"ed" = ( +/obj/structure/sign/departments/engineering, +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/shuttle/caravan/pirate) +"ee" = ( +/obj/structure/table, +/obj/item/circular_saw, +/obj/item/scalpel{ + pixel_y = 12 + }, +/obj/item/cautery{ + pixel_x = 4 + }, +/obj/machinery/light/small{ + dir = 8 + }, +/turf/open/floor/plasteel/white/side{ + dir = 8 + }, +/area/shuttle/caravan/pirate) +"ef" = ( +/turf/open/floor/plasteel/floorgrime, +/area/shuttle/caravan/pirate) +"eh" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 5 + }, +/turf/open/floor/plasteel/floorgrime, +/area/shuttle/caravan/pirate) +"ei" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/medical/glass{ + name = "Medbay" + }, +/turf/open/floor/plasteel/floorgrime, +/area/shuttle/caravan/pirate) +"ej" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/dark/side{ + dir = 4 + }, +/area/shuttle/caravan/pirate) +"ek" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 10 + }, +/turf/open/floor/plasteel/vault{ + dir = 5 + }, +/area/shuttle/caravan/pirate) +"el" = ( +/obj/structure/table, +/obj/machinery/microwave{ + pixel_y = 5 + }, +/turf/open/floor/plasteel/dark, +/area/shuttle/caravan/pirate) +"em" = ( +/obj/structure/shuttle/engine/propulsion/burst/right{ + dir = 8 + }, +/turf/open/floor/plating/airless, +/area/shuttle/caravan/pirate) +"en" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 4 + }, +/obj/machinery/space_heater, +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, +/turf/open/floor/plating, +/area/shuttle/caravan/pirate) +"eo" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plating, +/area/shuttle/caravan/pirate) +"ep" = ( +/obj/structure/table, +/obj/item/retractor, +/obj/item/hemostat, +/turf/open/floor/plasteel/white, +/area/shuttle/caravan/pirate) +"eq" = ( +/obj/structure/table/optable, +/obj/effect/turf_decal/bot, +/turf/open/floor/plasteel/white, +/area/shuttle/caravan/pirate) +"er" = ( +/obj/structure/table, +/obj/item/storage/firstaid/brute{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/storage/firstaid/fire, +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -24 + }, +/turf/open/floor/plasteel/white, +/area/shuttle/caravan/pirate) +"es" = ( +/obj/machinery/sleeper{ + dir = 1 + }, +/obj/effect/turf_decal/delivery, +/obj/machinery/airalarm/all_access{ + dir = 1; + pixel_y = -24 + }, +/turf/open/floor/plasteel/white, +/area/shuttle/caravan/pirate) +"et" = ( +/obj/structure/closet/crate/freezer/surplus_limbs, +/obj/effect/turf_decal/bot, +/turf/open/floor/plasteel/white, +/area/shuttle/caravan/pirate) +"eu" = ( /obj/structure/chair{ dir = 4 }, -/turf/open/floor/mineral/plastitanium, -/area/ruin/powered) -"de" = ( -/obj/structure/closet/crate/secure/plasma, -/obj/item/stack/sheet/mineral/plasma{ - amount = 25 +/obj/effect/decal/cleanable/blood, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/mineral/plastitanium/airless, +/area/ruin/unpowered) +"ew" = ( +/obj/effect/gibspawner/human, +/turf/open/floor/plating/asteroid/airless, +/area/ruin/unpowered) +"ex" = ( +/obj/item/stack/sheet/metal, +/turf/open/floor/plating/asteroid/airless, +/area/ruin/unpowered) +"ez" = ( +/obj/structure/bed, +/obj/item/bedsheet/brown, +/obj/machinery/firealarm{ + dir = 8; + pixel_x = -26 }, -/obj/item/stack/sheet/mineral/plasma{ - amount = 25 +/turf/open/floor/plasteel/dark/side{ + dir = 6 }, -/obj/item/tank/internals/plasma/full, -/obj/item/tank/internals/plasma/full, -/turf/open/floor/mineral/plastitanium, -/area/ruin/powered) -"df" = ( -/obj/structure/chair{ +/area/shuttle/caravan/pirate) +"eB" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plasteel/vault{ + dir = 5 + }, +/area/shuttle/caravan/pirate) +"eC" = ( +/obj/structure/table, +/obj/item/storage/fancy/donut_box{ + pixel_y = 18 + }, +/obj/item/storage/box/donkpockets{ + pixel_x = -3; + pixel_y = 7 + }, +/obj/item/storage/box/donkpockets{ + pixel_x = -6 + }, +/obj/item/reagent_containers/food/drinks/bottle/rum{ + pixel_x = 8; + pixel_y = 3 + }, +/obj/structure/sign/poster/contraband/red_rum{ + pixel_x = 32 + }, +/turf/open/floor/plasteel/dark, +/area/shuttle/caravan/pirate) +"eD" = ( +/obj/structure/table, +/obj/item/reagent_containers/food/drinks/bottle/rum{ + pixel_x = 3; + pixel_y = 6 + }, +/obj/item/reagent_containers/food/drinks/bottle/rum, +/turf/open/floor/plasteel/dark, +/area/shuttle/caravan/pirate) +"eE" = ( +/obj/structure/table, +/obj/item/coin/gold, +/obj/item/coin/silver, +/obj/item/coin/silver, +/turf/open/floor/plasteel/dark, +/area/shuttle/caravan/pirate) +"eF" = ( +/obj/structure/closet/crate/secure/loot, +/obj/machinery/airalarm/all_access{ + pixel_y = 24 + }, +/turf/open/floor/plasteel/dark, +/area/shuttle/caravan/pirate) +"eG" = ( +/obj/item/stack/cable_coil/yellow{ + amount = 1 + }, +/turf/open/floor/plating/airless{ + icon_state = "platingdmg3" + }, +/area/ruin/unpowered) +"eI" = ( +/obj/structure/rack, +/obj/item/storage/toolbox/emergency, +/obj/item/weldingtool, +/turf/open/floor/plasteel/darkred/corner{ + dir = 4 + }, +/area/shuttle/caravan/pirate) +"eJ" = ( +/obj/machinery/computer/camera_advanced/shuttle_docker/caravan/pirate, +/turf/open/floor/plasteel/darkred/side{ + dir = 1 + }, +/area/shuttle/caravan/pirate) +"eK" = ( +/obj/structure/cable/yellow{ + icon_state = "0-2" + }, +/obj/machinery/power/apc{ + dir = 8; + name = "Pirate Cutter APC"; + pixel_x = -24; + req_access = null + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/airalarm/all_access{ + dir = 8; + pixel_x = 24 + }, +/turf/open/floor/plating, +/area/shuttle/caravan/pirate) +"eL" = ( +/obj/machinery/light/small{ dir = 8 }, -/turf/open/floor/mineral/plastitanium, -/area/ruin/powered) -"dg" = ( -/obj/structure/closet/crate, -/obj/item/stack/sheet/rglass{ - amount = 20 +/obj/structure/closet/crate/secure/loot, +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 4 }, -/obj/item/stack/sheet/rglass{ - amount = 20 +/obj/structure/extinguisher_cabinet{ + pixel_x = -27 }, -/turf/open/floor/mineral/titanium/yellow/airless, -/area/ruin/unpowered) -"dh" = ( -/obj/structure/closet/crate{ - icon_state = "crateopen"; - opened = 1 +/turf/open/floor/plasteel/dark, +/area/shuttle/caravan/pirate) +"eM" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 4 }, +/turf/open/floor/plasteel/vault{ + dir = 5 + }, +/area/shuttle/caravan/pirate) +"eO" = ( /obj/item/stack/sheet/mineral/gold{ amount = 25 }, /obj/item/stack/sheet/mineral/bananium{ amount = 5 }, -/turf/open/floor/mineral/titanium/yellow/airless, -/area/ruin/unpowered) -"di" = ( -/obj/structure/closet/crate{ - icon_state = "crateopen"; - opened = 1 - }, /obj/item/stack/sheet/mineral/silver{ amount = 25 }, /obj/item/stack/sheet/mineral/uranium{ amount = 10 }, -/turf/open/floor/mineral/titanium/yellow/airless, -/area/ruin/unpowered) -"dj" = ( -/obj/effect/mob_spawn/human/corpse/nanotrasensoldier, -/obj/effect/decal/cleanable/blood, -/turf/open/floor/mineral/titanium/yellow/airless, -/area/ruin/unpowered) -"dk" = ( -/obj/structure/table, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/mineral/titanium/blue/airless, -/area/ruin/unpowered) -"dl" = ( -/obj/structure/closet/crate/secure/plasma, -/obj/item/stack/sheet/mineral/plasma{ - amount = 25 - }, -/obj/item/tank/internals/plasma/full, -/turf/open/floor/mineral/plastitanium, -/area/ruin/powered) -"dm" = ( -/obj/structure/chair, -/turf/open/floor/mineral/plastitanium, -/area/ruin/powered) -"dn" = ( -/obj/structure/closet/crate, -/obj/item/stack/sheet/mineral/gold{ - amount = 25 - }, -/obj/item/stack/sheet/mineral/silver{ - amount = 25 - }, -/turf/open/floor/mineral/plastitanium, -/area/ruin/powered) -"do" = ( -/obj/structure/closet/crate, -/obj/item/stack/sheet/metal/fifty, -/obj/item/stack/sheet/metal/fifty, -/obj/item/stack/sheet/glass/fifty, -/obj/item/stack/sheet/glass/fifty, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/mineral/titanium/yellow/airless, -/area/ruin/unpowered) -"dp" = ( -/obj/structure/closet/crate, -/obj/item/stack/sheet/mineral/silver{ - amount = 25 - }, -/turf/open/floor/mineral/titanium/yellow/airless, -/area/ruin/unpowered) -"dq" = ( -/mob/living/simple_animal/hostile/syndicate/ranged/space{ - environment_smash = 0; - name = "Syndicate Salvage Worker" - }, -/turf/open/floor/mineral/titanium/blue/airless, -/area/ruin/unpowered) -"dr" = ( -/obj/effect/decal/cleanable/dirt, -/obj/item/clipboard, -/turf/open/floor/mineral/titanium/blue/airless, -/area/ruin/unpowered) -"ds" = ( -/obj/structure/shuttle/engine/heater, -/turf/closed/wall/mineral/plastitanium, -/area/ruin/powered) -"dt" = ( -/obj/structure/closet/crate{ - icon_state = "crateopen"; - opened = 1 - }, /obj/item/stack/sheet/mineral/diamond{ amount = 5 }, -/obj/item/stack/sheet/mineral/gold{ - amount = 25 +/obj/structure/closet/crate, +/obj/item/coin/silver, +/obj/item/coin/silver, +/obj/item/coin/silver, +/obj/item/coin/gold, +/obj/item/coin/gold, +/turf/open/floor/plasteel/darkblue/corner, +/area/shuttle/caravan/pirate) +"eP" = ( +/obj/structure/table, +/obj/machinery/light/small{ + brightness = 3; + dir = 8 }, -/turf/open/floor/mineral/plastitanium, -/area/ruin/powered) -"du" = ( -/obj/structure/chair{ +/obj/item/stack/spacecash/c200, +/turf/open/floor/plasteel/dark, +/area/shuttle/caravan/pirate) +"eQ" = ( +/obj/structure/chair/office/dark{ + dir = 8 + }, +/turf/open/floor/plasteel/vault{ + dir = 5 + }, +/area/shuttle/caravan/pirate) +"eR" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on, +/turf/open/floor/plasteel/vault{ + dir = 5 + }, +/area/shuttle/caravan/pirate) +"eS" = ( +/turf/open/floor/plasteel/vault{ + dir = 5 + }, +/area/shuttle/caravan/pirate) +"eT" = ( +/obj/structure/chair/office/dark{ dir = 4 }, +/obj/machinery/turretid{ + icon_state = "control_kill"; + lethal = 1; + locked = 0; + pixel_y = -30; + req_access = null + }, +/mob/living/simple_animal/hostile/pirate/ranged{ + environment_smash = 0 + }, +/turf/open/floor/plasteel/vault{ + dir = 5 + }, +/area/shuttle/caravan/pirate) +"eU" = ( +/obj/machinery/computer/shuttle/caravan/pirate{ + dir = 8 + }, +/turf/open/floor/plasteel/darkred/side{ + dir = 8 + }, +/area/shuttle/caravan/pirate) +"eV" = ( +/obj/machinery/power/smes{ + charge = 5e+006 + }, +/obj/structure/cable/yellow{ + icon_state = "0-4" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 5 + }, +/turf/open/floor/plating, +/area/shuttle/caravan/pirate) +"eW" = ( +/obj/structure/cable/yellow{ + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plating, +/area/shuttle/caravan/pirate) +"eX" = ( +/obj/structure/table, +/obj/item/storage/box/lethalshot, +/turf/open/floor/plasteel/vault{ + dir = 5 + }, +/area/shuttle/caravan/pirate) +"eY" = ( +/obj/structure/table, +/obj/item/grenade/smokebomb{ + pixel_x = -4 + }, +/obj/item/grenade/smokebomb{ + pixel_x = 2 + }, +/obj/machinery/airalarm/all_access{ + pixel_y = 24 + }, +/turf/open/floor/plasteel/vault{ + dir = 5 + }, +/area/shuttle/caravan/pirate) +"eZ" = ( +/obj/structure/tank_dispenser/oxygen, +/obj/machinery/firealarm{ + dir = 2; + pixel_y = 24 + }, +/turf/open/floor/plasteel/vault{ + dir = 5 + }, +/area/shuttle/caravan/pirate) +"fa" = ( +/obj/structure/table, +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/machinery/door/window/southleft{ + name = "Weapon Storage" + }, +/obj/item/gun/ballistic/shotgun/automatic/combat, +/turf/open/floor/plasteel/vault{ + dir = 5 + }, +/area/shuttle/caravan/pirate) +"fb" = ( +/obj/structure/table, +/obj/item/gun/energy/laser{ + pixel_x = -3; + pixel_y = 3 + }, +/obj/item/gun/energy/laser, +/obj/machinery/door/window/southleft{ + base_state = "right"; + icon_state = "right"; + name = "Weapon Storage" + }, +/turf/open/floor/plasteel/vault{ + dir = 5 + }, +/area/shuttle/caravan/pirate) +"fc" = ( +/obj/structure/bed, +/obj/item/bedsheet/brown, +/obj/machinery/airalarm/all_access{ + dir = 4; + pixel_x = -24 + }, +/turf/open/floor/plasteel/darkred/corner{ + dir = 8 + }, +/area/shuttle/caravan/pirate) +"fd" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 8 + }, +/turf/open/floor/plasteel/vault{ + dir = 5 + }, +/area/shuttle/caravan/pirate) +"fe" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/darkblue/side{ + dir = 4 + }, +/area/shuttle/caravan/pirate) +"ff" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/command{ + name = "Bridge" + }, +/turf/open/floor/plasteel/vault{ + dir = 5 + }, +/area/shuttle/caravan/pirate) +"fg" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/dark, +/area/shuttle/caravan/pirate) +"fh" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 9 + }, +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -24 + }, +/turf/open/floor/plasteel/dark, +/area/shuttle/caravan/pirate) +"fi" = ( +/obj/structure/table/reinforced, +/obj/machinery/recharger, +/obj/item/melee/classic_baton, +/turf/open/floor/plasteel/darkred/corner, +/area/shuttle/caravan/pirate) +"fj" = ( +/obj/structure/table/reinforced, +/obj/machinery/button/door{ + id = "caravanpirate_bridge"; + name = "Bridge Blast Door Control"; + pixel_x = -16 + }, +/turf/open/floor/plasteel/darkred/side, +/area/shuttle/caravan/pirate) +"fk" = ( +/obj/machinery/power/terminal{ + dir = 1 + }, +/obj/structure/cable{ + icon_state = "0-2" + }, +/obj/structure/closet/crate, +/obj/item/stack/sheet/metal/twenty, +/obj/item/stack/sheet/glass{ + amount = 10 + }, +/obj/item/storage/toolbox/mechanical, +/obj/item/device/flashlight{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/stack/sheet/mineral/plasma{ + amount = 20 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/plating, +/area/shuttle/caravan/pirate) +"fl" = ( +/obj/machinery/light/small{ + dir = 8 + }, +/obj/structure/closet/crate/secure/weapon, +/obj/item/gun/ballistic/revolver/grenadelauncher/unrestricted, +/turf/open/floor/plasteel/red/side{ + dir = 8 + }, +/area/shuttle/caravan/pirate) +"fm" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on, +/turf/open/floor/plasteel/floorgrime, +/area/shuttle/caravan/pirate) +"fo" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 6 + }, +/turf/open/floor/plasteel/floorgrime, +/area/shuttle/caravan/pirate) +"fp" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/security, +/turf/open/floor/plasteel/floorgrime, +/area/shuttle/caravan/pirate) +"fq" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/darkred/side{ + dir = 8 + }, +/area/shuttle/caravan/pirate) +"fr" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 9 + }, +/turf/open/floor/plasteel/vault{ + dir = 5 + }, +/area/shuttle/caravan/pirate) +"fs" = ( +/obj/structure/rack, +/obj/item/storage/bag/money/vault, +/mob/living/simple_animal/parrot{ + faction = list("pirate"); + name = "Pegwing" + }, +/turf/open/floor/plasteel/darkblue/corner{ + dir = 4 + }, +/area/shuttle/caravan/pirate) +"ft" = ( +/obj/structure/cable, +/obj/machinery/power/port_gen/pacman{ + anchored = 1 + }, +/obj/item/wrench, +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, +/turf/open/floor/plating, +/area/shuttle/caravan/pirate) +"fu" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 5 + }, +/turf/open/floor/plating, +/area/shuttle/caravan/pirate) +"fv" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/red/side{ + dir = 10 + }, +/area/shuttle/caravan/pirate) +"fw" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/red/side, +/area/shuttle/caravan/pirate) +"fx" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/hidden, +/turf/open/floor/plasteel/red/side, +/area/shuttle/caravan/pirate) +"fy" = ( +/obj/machinery/button/door{ + id = "caravanpirate_bolt_starboard"; + name = "External Bolt Control"; + normaldoorcontrol = 1; + pixel_x = -4; + pixel_y = -25; + specialfunctions = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/red/side, +/area/shuttle/caravan/pirate) +"fz" = ( +/obj/machinery/light/small{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 9 + }, +/turf/open/floor/plasteel/red/side, +/area/shuttle/caravan/pirate) +"fA" = ( +/obj/structure/closet{ + name = "pirate outfits" + }, +/obj/item/clothing/head/collectable/pirate, +/obj/item/clothing/suit/pirate, +/obj/item/clothing/under/pirate, +/obj/item/clothing/shoes/jackboots, +/obj/item/clothing/head/bandana, +/turf/open/floor/plasteel/darkred/corner{ + dir = 1 + }, +/area/shuttle/caravan/pirate) +"fB" = ( +/obj/machinery/light/small, +/obj/structure/bed, +/obj/item/bedsheet/brown, +/turf/open/floor/plasteel/dark, +/area/shuttle/caravan/pirate) +"fC" = ( +/obj/structure/table, +/obj/machinery/cell_charger, +/obj/item/stack/cable_coil/yellow, +/obj/item/stock_parts/cell/high, +/obj/effect/turf_decal/bot, +/turf/open/floor/plating, +/area/shuttle/caravan/pirate) +"fD" = ( +/obj/machinery/door/airlock/external{ + cyclelinkeddir = 2; + id_tag = "caravanpirate_bolt_starboard"; + locked = 1 + }, +/turf/open/floor/plating, +/area/shuttle/caravan/pirate) +"fF" = ( +/obj/machinery/door/airlock/external{ + cyclelinkeddir = 1; + id_tag = "caravanpirate_bolt_starboard"; + locked = 1 + }, +/turf/open/floor/plating, +/area/shuttle/caravan/pirate) +"fG" = ( +/turf/closed/wall/mineral/titanium, +/area/shuttle/caravan/freighter1) +"fH" = ( +/turf/closed/wall/mineral/titanium/nodiagonal, +/area/shuttle/caravan/freighter1) +"fI" = ( +/obj/effect/spawner/structure/window/shuttle, +/obj/machinery/door/poddoor{ + id = "caravantrade1_bridge" + }, +/turf/open/floor/plating, +/area/shuttle/caravan/freighter1) +"fJ" = ( +/obj/structure/chair{ + dir = 1 + }, +/obj/machinery/turretid{ + ailock = 1; + control_area = null; + desc = "A specially designed set of turret controls. Looks to be covered in protective casing to prevent AI interfacing."; + icon_state = "control_kill"; + lethal = 1; + name = "Shuttle turret control"; + pixel_x = 32; + pixel_y = 32; + req_access = 150 + }, +/obj/structure/cable/yellow{ + icon_state = "0-4" + }, /mob/living/simple_animal/hostile/syndicate{ environment_smash = 0; name = "Syndicate Salvage Pilot" }, /turf/open/floor/mineral/plastitanium, -/area/ruin/powered) -"dv" = ( -/obj/structure/shuttle/engine/propulsion/burst, +/area/shuttle/caravan/syndicate2) +"fK" = ( +/obj/structure/shuttle/engine/propulsion/burst/left{ + dir = 8 + }, /turf/open/floor/plating/airless, -/area/ruin/powered) -"dw" = ( -/obj/structure/chair{ +/area/shuttle/caravan/freighter1) +"fL" = ( +/obj/structure/shuttle/engine/heater{ + dir = 8 + }, +/obj/structure/window/reinforced{ + dir = 4 + }, +/turf/open/floor/plating/airless, +/area/shuttle/caravan/freighter1) +"fN" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 1 }, -/turf/open/floor/mineral/plastitanium, -/area/ruin/powered) -"dx" = ( -/obj/structure/closet/crate, -/obj/item/stack/sheet/mineral/diamond{ - amount = 5 +/turf/open/floor/plating/airless, +/area/shuttle/caravan/freighter1) +"fO" = ( +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 }, -/obj/item/stack/sheet/mineral/uranium{ +/obj/machinery/door/airlock/engineering{ + name = "Engine Room" + }, +/turf/open/floor/plating/airless, +/area/shuttle/caravan/freighter1) +"fP" = ( +/obj/machinery/firealarm{ + dir = 2; + pixel_y = 24 + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 1 + }, +/turf/open/floor/plasteel/airless, +/area/shuttle/caravan/freighter1) +"fQ" = ( +/obj/machinery/light/small, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/airless, +/area/shuttle/caravan/freighter1) +"fR" = ( +/obj/machinery/airalarm/all_access{ + pixel_y = 24 + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 1 + }, +/turf/open/floor/plasteel/airless, +/area/shuttle/caravan/freighter1) +"fS" = ( +/obj/machinery/door/airlock{ + name = "Crew Cabins" + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/airless/floorgrime, +/area/shuttle/caravan/freighter1) +"fT" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/yellow/corner{ + dir = 4; + initial_gas_mix = "TEMP=2.7" + }, +/area/shuttle/caravan/freighter1) +"fU" = ( +/obj/machinery/light/small, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/yellow/side{ + dir = 1; + initial_gas_mix = "TEMP=2.7" + }, +/area/shuttle/caravan/freighter1) +"fV" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 10 + }, +/obj/effect/decal/cleanable/blood, +/turf/open/floor/plasteel/yellow/side{ + dir = 1; + initial_gas_mix = "TEMP=2.7" + }, +/area/shuttle/caravan/freighter1) +"fW" = ( +/obj/structure/closet/secure_closet/freezer{ + locked = 0; + name = "fridge" + }, +/obj/item/reagent_containers/food/drinks/beer{ + pixel_x = -3; + pixel_y = 3 + }, +/obj/item/reagent_containers/food/drinks/beer, +/obj/item/reagent_containers/food/drinks/beer{ + pixel_x = 3; + pixel_y = -3 + }, +/obj/item/reagent_containers/glass/beaker/waterbottle{ + pixel_x = -3; + pixel_y = 3 + }, +/obj/item/reagent_containers/glass/beaker/waterbottle, +/obj/item/reagent_containers/glass/beaker/waterbottle{ + pixel_x = 3; + pixel_y = -3 + }, +/obj/item/reagent_containers/food/snacks/pizzaslice/margherita{ + pixel_x = -3; + pixel_y = 3 + }, +/obj/item/reagent_containers/food/snacks/pizzaslice/margherita, +/obj/item/reagent_containers/food/snacks/chocolatebar, +/turf/open/floor/plasteel/yellow/side{ + dir = 5; + initial_gas_mix = "TEMP=2.7" + }, +/area/shuttle/caravan/freighter1) +"fX" = ( +/obj/structure/table, +/obj/machinery/microwave{ + pixel_y = 5 + }, +/turf/open/floor/plasteel/vault/airless, +/area/shuttle/caravan/freighter1) +"fY" = ( +/obj/machinery/light/small{ + dir = 8 + }, +/obj/structure/sign/warning/vacuum{ + pixel_x = 32 + }, +/turf/open/floor/plating, +/area/shuttle/caravan/freighter1) +"fZ" = ( +/turf/closed/wall/mineral/titanium, +/area/shuttle/caravan/freighter3) +"ga" = ( +/turf/closed/wall/mineral/titanium/nodiagonal, +/area/shuttle/caravan/freighter3) +"gb" = ( +/obj/machinery/door/poddoor{ + id = "caravantrade3_cargo_port"; + name = "Cargo Blast Door" + }, +/turf/open/floor/plating/airless, +/area/shuttle/caravan/freighter3) +"gc" = ( +/obj/machinery/door/airlock/external{ + cyclelinkeddir = 8; + req_access_txt = "13" + }, +/turf/open/floor/plating/airless, +/area/shuttle/caravan/freighter3) +"gd" = ( +/obj/effect/spawner/structure/window/shuttle, +/turf/open/floor/plating, +/area/shuttle/caravan/freighter3) +"ge" = ( +/obj/structure/shuttle/engine/propulsion/burst{ + dir = 8 + }, +/turf/open/floor/plating/airless, +/area/shuttle/caravan/freighter1) +"gf" = ( +/obj/machinery/power/smes{ + charge = 0 + }, +/obj/structure/cable/yellow{ + icon_state = "0-4" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 5 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating/airless, +/area/shuttle/caravan/freighter1) +"gg" = ( +/obj/structure/cable/yellow{ + icon_state = "2-8" + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plating/airless, +/area/shuttle/caravan/freighter1) +"gj" = ( +/obj/machinery/airalarm/all_access{ + dir = 4; + pixel_x = -24 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/effect/mob_spawn/human/corpse/cargo_tech, +/obj/effect/decal/cleanable/blood, +/turf/open/floor/plasteel/airless/floorgrime, +/area/shuttle/caravan/freighter1) +"gk" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/obj/structure/fluff/broken_flooring{ + icon_state = "singular" + }, +/obj/effect/decal/cleanable/blood, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating/airless, +/area/ruin/unpowered) +"gl" = ( +/obj/structure/chair/stool, +/turf/open/floor/plasteel/yellow/side{ + dir = 4; + initial_gas_mix = "TEMP=2.7" + }, +/area/shuttle/caravan/freighter1) +"gm" = ( +/obj/structure/table, +/obj/item/storage/box/donkpockets{ + pixel_x = 6; + pixel_y = 6 + }, +/obj/item/trash/plate{ + pixel_x = -5; + pixel_y = -3 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/vault/airless, +/area/shuttle/caravan/freighter1) +"gn" = ( +/obj/machinery/door/airlock/external{ + cyclelinkeddir = 1; + id_tag = "caravantrade1_bolt"; + locked = 1 + }, +/turf/open/floor/plating, +/area/shuttle/caravan/freighter1) +"go" = ( +/obj/machinery/light/small{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/rack, +/obj/item/storage/firstaid/regular, +/turf/open/floor/plasteel/darkblue/side{ + dir = 10; + initial_gas_mix = "TEMP=2.7" + }, +/area/shuttle/caravan/freighter1) +"gp" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/table/reinforced, +/obj/item/paper_bin{ + pixel_x = 6; + pixel_y = 6 + }, +/obj/item/pen{ + pixel_x = 6; + pixel_y = 6 + }, +/obj/item/folder/yellow{ + pixel_x = -6 + }, +/turf/open/floor/plasteel/darkblue/side{ + dir = 6; + initial_gas_mix = "TEMP=2.7" + }, +/area/shuttle/caravan/freighter1) +"gq" = ( +/obj/structure/shuttle/engine/propulsion/burst/left{ + dir = 8 + }, +/turf/open/floor/plating/airless, +/area/shuttle/caravan/freighter3) +"gs" = ( +/obj/effect/turf_decal/bot_white, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/airless/dark, +/area/shuttle/caravan/freighter3) +"gt" = ( +/obj/effect/turf_decal/bot_white, +/turf/open/floor/plasteel/airless/dark, +/area/shuttle/caravan/freighter3) +"gv" = ( +/obj/effect/turf_decal/bot_white, +/obj/structure/closet/crate/secure/engineering, +/obj/item/storage/toolbox/mechanical, +/obj/item/storage/toolbox/mechanical, +/obj/item/storage/toolbox/electrical, +/obj/item/storage/toolbox/electrical, +/obj/item/clothing/gloves/color/yellow, +/obj/item/clothing/gloves/color/yellow, +/obj/item/device/multitool, +/obj/item/device/multitool, +/turf/open/floor/plasteel/airless/dark, +/area/shuttle/caravan/freighter3) +"gw" = ( +/obj/effect/turf_decal/bot_white, +/obj/machinery/light/small{ + dir = 1 + }, +/obj/machinery/button/door{ + id = "caravantrade3_cargo_port"; + name = "Cargo Blast Door Control"; + pixel_y = 24 + }, +/turf/open/floor/plasteel/airless/dark, +/area/shuttle/caravan/freighter3) +"gy" = ( +/obj/machinery/light/small{ + dir = 8 + }, +/obj/structure/sign/warning/vacuum{ + pixel_x = -32; + pixel_y = 32 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/airless/dark, +/area/shuttle/caravan/freighter3) +"gD" = ( +/obj/machinery/power/terminal{ + dir = 1 + }, +/obj/structure/cable{ + icon_state = "0-2" + }, +/obj/structure/closet/crate, +/obj/item/stack/sheet/metal/twenty, +/obj/item/stack/sheet/glass{ amount = 10 }, -/obj/item/stack/sheet/mineral/silver{ +/obj/item/stack/rods/ten, +/obj/item/storage/box/lights/bulbs, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating/airless, +/area/shuttle/caravan/freighter1) +"gJ" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 8 + }, +/turf/open/floor/plasteel/airless, +/area/shuttle/caravan/freighter1) +"gN" = ( +/obj/effect/decal/cleanable/blood, +/mob/living/simple_animal/hostile/syndicate/melee/space/stormtrooper{ + environment_smash = 0; + name = "Syndicate Salvage Leader" + }, +/turf/open/floor/plasteel/darkblue/corner{ + dir = 4; + initial_gas_mix = "TEMP=2.7" + }, +/area/shuttle/caravan/freighter1) +"gO" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/computer/camera_advanced/shuttle_docker/caravan/trade1{ + dir = 8 + }, +/turf/open/floor/plasteel/darkblue/side{ + dir = 9; + initial_gas_mix = "TEMP=2.7" + }, +/area/shuttle/caravan/freighter1) +"gP" = ( +/obj/structure/shuttle/engine/propulsion/burst{ + dir = 8 + }, +/turf/open/floor/plating/airless, +/area/shuttle/caravan/freighter3) +"gQ" = ( +/obj/structure/shuttle/engine/heater{ + dir = 8 + }, +/obj/structure/window/reinforced{ + dir = 4 + }, +/turf/open/floor/plating/airless, +/area/shuttle/caravan/freighter3) +"gR" = ( +/obj/machinery/power/smes{ + charge = 0 + }, +/obj/structure/cable/yellow, +/obj/effect/turf_decal/stripes/line{ + dir = 5 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating/airless, +/area/shuttle/caravan/freighter3) +"gT" = ( +/mob/living/simple_animal/hostile/syndicate/melee/space{ + environment_smash = 0; + name = "Syndicate Salvage Worker" + }, +/turf/open/floor/plasteel/airless/floorgrime, +/area/shuttle/caravan/freighter3) +"gU" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 6 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/airless, +/area/shuttle/caravan/freighter3) +"gV" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/airless{ + icon_state = "floorscorched1" + }, +/area/shuttle/caravan/freighter3) +"gW" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/blue/side{ + dir = 4; + initial_gas_mix = "TEMP=2.7" + }, +/area/shuttle/caravan/freighter3) +"gY" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 10 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/airless/dark, +/area/shuttle/caravan/freighter3) +"ha" = ( +/obj/structure/table/reinforced, +/obj/item/folder/yellow, +/obj/item/pen{ + pixel_x = 6; + pixel_y = 6 + }, +/turf/open/floor/plasteel/darkblue/side{ + dir = 9; + initial_gas_mix = "TEMP=2.7" + }, +/area/shuttle/caravan/freighter3) +"hb" = ( +/obj/structure/cable, +/obj/machinery/power/port_gen/pacman{ + anchored = 1 + }, +/obj/item/wrench, +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, +/turf/open/floor/plating/airless, +/area/shuttle/caravan/freighter1) +"hc" = ( +/obj/machinery/airalarm/all_access{ + dir = 8; + pixel_x = 24 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plating/airless{ + icon_state = "platingdmg1" + }, +/area/shuttle/caravan/freighter1) +"hd" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 8 + }, +/turf/open/floor/plasteel/airless/floorgrime, +/area/shuttle/caravan/freighter1) +"he" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/airless, +/area/shuttle/caravan/freighter1) +"hf" = ( +/obj/machinery/door/airlock{ + name = "Crew Quarters" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/airless/floorgrime, +/area/shuttle/caravan/freighter1) +"hg" = ( +/obj/machinery/light/small{ + dir = 1 + }, +/obj/machinery/airalarm/all_access{ + pixel_y = 24 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/airless, +/area/shuttle/caravan/freighter1) +"hh" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden, +/turf/open/floor/plasteel/blue/side{ + dir = 4; + initial_gas_mix = "TEMP=2.7" + }, +/area/shuttle/caravan/freighter1) +"hi" = ( +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/door/airlock/command{ + name = "Bridge" + }, +/turf/open/floor/plasteel/airless/dark, +/area/shuttle/caravan/freighter1) +"hj" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 9 + }, +/turf/open/floor/plasteel/airless/dark, +/area/shuttle/caravan/freighter1) +"hk" = ( +/obj/structure/chair{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/mob_spawn/human/corpse/cargo_tech, +/obj/effect/decal/cleanable/blood, +/turf/open/floor/plasteel/darkblue/corner{ + initial_gas_mix = "TEMP=2.7" + }, +/area/shuttle/caravan/freighter1) +"hl" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/computer/shuttle/caravan/trade1{ + dir = 8 + }, +/turf/open/floor/plasteel/darkblue/side{ + dir = 10; + initial_gas_mix = "TEMP=2.7" + }, +/area/shuttle/caravan/freighter1) +"hm" = ( +/turf/closed/wall/mineral/titanium, +/area/shuttle/caravan/freighter2) +"hn" = ( +/turf/closed/wall/mineral/titanium/nodiagonal, +/area/shuttle/caravan/freighter2) +"ho" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/door/poddoor/preopen{ + id = "caravantrade2_cargo_port"; + name = "Cargo Blast Door" + }, +/turf/open/floor/plating/airless{ + icon_state = "platingdmg3" + }, +/area/shuttle/caravan/freighter2) +"hp" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/door/poddoor/preopen{ + id = "caravantrade2_cargo_port"; + name = "Cargo Blast Door" + }, +/turf/open/floor/plating/airless, +/area/shuttle/caravan/freighter2) +"hq" = ( +/obj/machinery/door/poddoor/preopen{ + id = "caravantrade2_cargo_port"; + name = "Cargo Blast Door" + }, +/turf/open/floor/plating/airless{ + icon_state = "platingdmg3" + }, +/area/shuttle/caravan/freighter2) +"hr" = ( +/obj/machinery/door/poddoor/preopen{ + id = "caravantrade2_cargo_port"; + name = "Cargo Blast Door" + }, +/turf/open/floor/plating/airless, +/area/shuttle/caravan/freighter2) +"hs" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/door/airlock/external{ + cyclelinkeddir = 8; + req_access_txt = "13" + }, +/turf/open/floor/plating/airless, +/area/shuttle/caravan/freighter2) +"ht" = ( +/obj/effect/spawner/structure/window/shuttle, +/turf/open/floor/plating, +/area/shuttle/caravan/freighter2) +"hu" = ( +/obj/machinery/space_heater, +/obj/machinery/power/terminal{ + dir = 1 + }, +/obj/structure/cable{ + icon_state = "0-2" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating/airless, +/area/shuttle/caravan/freighter3) +"hv" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/airless, +/area/shuttle/caravan/freighter3) +"hw" = ( +/obj/effect/turf_decal/box/white/corners{ + dir = 4 + }, +/turf/open/floor/plasteel/airless/dark, +/area/shuttle/caravan/freighter3) +"hx" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/closet/crate/secure/plasma, +/obj/item/tank/internals/plasma/full, +/obj/item/stack/sheet/mineral/plasma{ amount = 25 }, -/turf/open/floor/mineral/plastitanium, -/area/ruin/powered) -"dy" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/airless/dark, +/area/shuttle/caravan/freighter3) +"hy" = ( +/obj/effect/turf_decal/box/white/corners{ + dir = 1 + }, +/turf/open/floor/plasteel/airless/dark, +/area/shuttle/caravan/freighter3) +"hz" = ( +/obj/machinery/firealarm{ + dir = 4; + pixel_x = 24 + }, +/turf/open/floor/plasteel/blue/corner{ + dir = 4; + initial_gas_mix = "TEMP=2.7" + }, +/area/shuttle/caravan/freighter3) +"hB" = ( /mob/living/simple_animal/hostile/syndicate/ranged/space/stormtrooper{ environment_smash = 0; name = "Syndicate Salvage Leader" }, -/turf/open/floor/plating/asteroid/airless, -/area/ruin/unpowered/no_grav) -"dz" = ( +/turf/open/floor/plasteel/airless{ + icon_state = "damaged2" + }, +/area/shuttle/caravan/freighter3) +"hD" = ( +/obj/structure/shuttle/engine/propulsion/burst/right{ + dir = 8 + }, +/turf/open/floor/plating/airless, +/area/shuttle/caravan/freighter1) +"hE" = ( +/obj/effect/turf_decal/bot, +/obj/machinery/atmospherics/components/unary/tank/air{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating/airless, +/area/shuttle/caravan/freighter1) +"hF" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden, +/obj/machinery/meter, +/turf/open/floor/plating/airless, +/area/shuttle/caravan/freighter1) +"hG" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 10 + }, +/turf/open/floor/plasteel/airless/floorgrime, +/area/shuttle/caravan/freighter1) +"hH" = ( +/obj/structure/rack, +/obj/item/storage/belt/utility, +/obj/structure/extinguisher_cabinet{ + pixel_y = 29 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/airless/floorgrime, +/area/shuttle/caravan/freighter1) +"hI" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/structure/table, +/obj/item/stack/packageWrap, +/obj/item/crowbar, +/obj/item/device/flashlight{ + pixel_x = 1; + pixel_y = 5 + }, +/obj/machinery/airalarm/all_access{ + pixel_y = 24 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/airless, +/area/shuttle/caravan/freighter1) +"hJ" = ( +/obj/structure/table, +/obj/machinery/cell_charger, +/obj/machinery/firealarm{ + dir = 2; + pixel_y = 24 + }, +/obj/item/stack/cable_coil/yellow{ + pixel_x = 12; + pixel_y = 4 + }, +/turf/open/floor/plasteel/airless, +/area/shuttle/caravan/freighter1) +"hK" = ( +/obj/structure/table, +/obj/item/storage/toolbox/mechanical, +/obj/item/device/multitool, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/airless, +/area/shuttle/caravan/freighter1) +"hM" = ( +/obj/machinery/suit_storage_unit/standard_unit, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/airless, +/area/shuttle/caravan/freighter1) +"hN" = ( +/obj/structure/rack, +/obj/item/tank/internals/oxygen, +/obj/item/device/radio, +/obj/item/clothing/mask/gas, +/turf/open/floor/plasteel/blue/corner{ + dir = 4; + initial_gas_mix = "TEMP=2.7" + }, +/area/shuttle/caravan/freighter1) +"hO" = ( +/obj/machinery/light/small{ + dir = 8 + }, +/obj/machinery/firealarm{ + dir = 8; + pixel_x = -24 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/rack, +/obj/item/storage/toolbox/emergency, +/obj/item/wrench, +/turf/open/floor/plasteel/darkblue/side{ + dir = 9; + initial_gas_mix = "TEMP=2.7" + }, +/area/shuttle/caravan/freighter1) +"hP" = ( +/obj/structure/table/reinforced, +/obj/machinery/button/door{ + id = "caravantrade1_bridge"; + name = "Ship Blast Door Control" + }, +/turf/open/floor/plasteel/darkblue/side{ + dir = 5; + initial_gas_mix = "TEMP=2.7" + }, +/area/shuttle/caravan/freighter1) +"hQ" = ( +/obj/structure/shuttle/engine/propulsion/burst/left{ + dir = 8 + }, +/turf/open/floor/plating/airless, +/area/shuttle/caravan/freighter2) +"hS" = ( +/obj/effect/turf_decal/bot_white, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/airless{ + icon_state = "damaged5" + }, +/area/shuttle/caravan/freighter2) +"hT" = ( +/obj/effect/turf_decal/bot_white, +/obj/structure/closet/crate/secure/gear, +/obj/item/ammo_casing/shotgun/ion, +/obj/item/ammo_casing/shotgun/pulseslug, +/obj/item/ammo_casing/shotgun/dragonsbreath, +/obj/item/ammo_casing/shotgun/techshell, +/obj/item/ammo_casing/shotgun/techshell, +/turf/open/floor/plasteel/airless/dark, +/area/shuttle/caravan/freighter2) +"hU" = ( +/obj/effect/turf_decal/bot_white, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/airless{ + icon_state = "damaged2" + }, +/area/shuttle/caravan/freighter2) +"hV" = ( +/obj/effect/turf_decal/bot_white, +/obj/effect/decal/cleanable/dirt, +/obj/structure/closet/crate/secure/gear, +/obj/item/storage/box/lethalshot, +/obj/item/ammo_casing/shotgun/frag12, +/obj/item/ammo_casing/shotgun/frag12, +/obj/item/ammo_casing/shotgun/frag12, +/obj/item/ammo_casing/shotgun/frag12, +/turf/open/floor/plasteel/airless/dark, +/area/shuttle/caravan/freighter2) +"hW" = ( +/obj/effect/turf_decal/bot_white, +/obj/structure/closet/crate/secure/gear, +/obj/machinery/button/door{ + id = "caravantrade2_cargo_port"; + name = "Cargo Blast Door Control"; + pixel_y = 24 + }, +/obj/machinery/light/small{ + dir = 1 + }, +/obj/item/ammo_box/c10mm, +/obj/item/ammo_box/magazine/m10mm{ + pixel_x = -3; + pixel_y = 3 + }, +/obj/item/ammo_box/magazine/m10mm, +/turf/open/floor/plasteel/airless/dark, +/area/shuttle/caravan/freighter2) +"hX" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light/small{ + dir = 8 + }, +/obj/structure/sign/warning/vacuum{ + pixel_x = -32; + pixel_y = 32 + }, +/turf/open/floor/plating/airless, +/area/shuttle/caravan/freighter2) +"hY" = ( +/obj/structure/rack, +/obj/item/weldingtool, +/obj/item/crowbar, +/obj/item/wirecutters, +/obj/item/wrench, +/obj/item/screwdriver{ + pixel_y = 8 + }, +/turf/open/floor/plating/airless, +/area/shuttle/caravan/freighter2) +"hZ" = ( +/obj/machinery/power/port_gen/pacman{ + anchored = 1 + }, +/obj/item/wrench, +/obj/structure/cable, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/plating/airless, +/area/shuttle/caravan/freighter3) +"ia" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plasteel/airless{ + icon_state = "damaged2" + }, +/area/shuttle/caravan/freighter3) +"ib" = ( +/obj/effect/turf_decal/box/white/corners{ + dir = 8 + }, +/obj/structure/closet/crate/secure/plasma, +/obj/item/tank/internals/plasma/full, +/obj/item/stack/sheet/mineral/plasma{ + amount = 25 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating/airless, +/area/shuttle/caravan/freighter3) +"ic" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/airless{ + icon_state = "damaged5" + }, +/area/shuttle/caravan/freighter3) +"id" = ( +/obj/effect/turf_decal/box/white/corners, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/airless/dark, +/area/shuttle/caravan/freighter3) +"ie" = ( +/obj/machinery/airalarm/all_access{ + dir = 8; + pixel_x = 24 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/airless/floorgrime, +/area/shuttle/caravan/freighter3) +"if" = ( +/obj/machinery/firealarm{ + dir = 8; + pixel_x = -26 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/airless/dark, +/area/shuttle/caravan/freighter3) +"ig" = ( +/obj/structure/chair{ + dir = 4 + }, +/obj/effect/mob_spawn/human/corpse/cargo_tech, +/obj/effect/decal/cleanable/blood, +/turf/open/floor/plasteel/airless/dark, +/area/shuttle/caravan/freighter3) +"ih" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/obj/structure/frame/computer{ + dir = 8 + }, +/obj/item/shard, +/turf/open/floor/plasteel/airless{ + icon_state = "damaged3" + }, +/area/shuttle/caravan/freighter3) +"ii" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 8 + }, +/turf/open/floor/plasteel/airless/floorgrime, +/area/shuttle/caravan/freighter1) +"ij" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/airless{ + icon_state = "floorscorched1" + }, +/area/shuttle/caravan/freighter1) +"ik" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, /mob/living/simple_animal/hostile/syndicate/ranged/space{ environment_smash = 0; name = "Syndicate Salvage Worker" }, -/turf/open/floor/plating/asteroid/airless, -/area/ruin/unpowered/no_grav) -"dA" = ( -/obj/machinery/computer{ +/turf/open/floor/plasteel/airless, +/area/shuttle/caravan/freighter1) +"il" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/airless/floorgrime, +/area/shuttle/caravan/freighter1) +"im" = ( +/obj/item/stack/sheet/mineral/titanium, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/airless{ + icon_state = "damaged1" + }, +/area/shuttle/caravan/freighter1) +"in" = ( +/obj/effect/turf_decal/bot_white, +/obj/structure/closet/emcloset, +/turf/open/floor/plasteel/vault/airless, +/area/shuttle/caravan/freighter1) +"io" = ( +/obj/structure/shuttle/engine/propulsion/burst{ + dir = 8 + }, +/turf/open/floor/plating/airless, +/area/shuttle/caravan/freighter2) +"ip" = ( +/obj/structure/shuttle/engine/heater{ + dir = 8 + }, +/obj/structure/window/reinforced{ + dir = 4 + }, +/turf/open/floor/plating/airless, +/area/shuttle/caravan/freighter2) +"iq" = ( +/obj/machinery/power/smes{ + charge = 0 + }, +/obj/structure/cable/yellow, +/obj/effect/turf_decal/stripes/line{ + dir = 5 + }, +/turf/open/floor/plating/airless, +/area/shuttle/caravan/freighter2) +"is" = ( +/turf/open/floor/plasteel/airless{ + icon_state = "damaged2" + }, +/area/shuttle/caravan/freighter2) +"it" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 6 + }, +/turf/open/floor/plasteel/airless, +/area/shuttle/caravan/freighter2) +"iu" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/airless{ + icon_state = "damaged3" + }, +/area/shuttle/caravan/freighter2) +"iv" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/blue/side{ + dir = 4; + initial_gas_mix = "TEMP=2.7" + }, +/area/shuttle/caravan/freighter2) +"ix" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 10 + }, +/turf/open/floor/plasteel/airless{ + icon_state = "floorscorched1" + }, +/area/shuttle/caravan/freighter2) +"iy" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/fluff/broken_flooring{ + icon_state = "pile" + }, +/turf/open/floor/plating/airless{ + icon_state = "platingdmg1" + }, +/area/shuttle/caravan/freighter2) +"iz" = ( +/obj/item/shard, +/turf/open/floor/plating/airless{ + icon_state = "platingdmg3" + }, +/area/shuttle/caravan/freighter3) +"iA" = ( +/obj/machinery/meter, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden, +/turf/open/floor/plating/airless{ + icon_state = "platingdmg1" + }, +/area/shuttle/caravan/freighter3) +"iB" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating/airless, +/area/shuttle/caravan/freighter3) +"iC" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/hidden, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/airless{ + icon_state = "floorscorched1" + }, +/area/shuttle/caravan/freighter3) +"iD" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/mob/living/simple_animal/hostile/syndicate/melee/space{ + environment_smash = 0; + name = "Syndicate Salvage Worker" + }, +/turf/open/floor/plasteel/airless/floorgrime, +/area/shuttle/caravan/freighter3) +"iF" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/airless/dark, +/area/shuttle/caravan/freighter3) +"iH" = ( +/obj/structure/table/reinforced, +/obj/machinery/cell_charger, +/turf/open/floor/plasteel/darkblue/side{ + dir = 10; + initial_gas_mix = "TEMP=2.7" + }, +/area/shuttle/caravan/freighter3) +"iI" = ( +/obj/effect/turf_decal/box/white/corners{ + dir = 4 + }, +/obj/structure/closet/crate, +/obj/item/stack/sheet/mineral/uranium{ + amount = 10 + }, +/obj/item/stack/sheet/mineral/uranium{ + amount = 10 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/airless/dark, +/area/shuttle/caravan/freighter1) +"iJ" = ( +/obj/effect/turf_decal/box/white/corners{ dir = 1 }, -/turf/open/floor/plasteel, -/area/ruin/powered) -"dC" = ( -/obj/machinery/computer{ +/obj/effect/decal/cleanable/dirt, +/obj/structure/closet/crate, +/obj/item/stack/sheet/mineral/gold{ + amount = 25 + }, +/turf/open/floor/plasteel/airless/dark, +/area/shuttle/caravan/freighter1) +"iL" = ( +/obj/effect/turf_decal/box/white/corners{ + dir = 4 + }, +/obj/structure/closet/crate, +/obj/item/stack/sheet/rglass{ + amount = 20 + }, +/obj/item/stack/sheet/rglass{ + amount = 20 + }, +/turf/open/floor/plasteel/airless/dark, +/area/shuttle/caravan/freighter1) +"iM" = ( +/obj/effect/turf_decal/box/white/corners{ + dir = 1 + }, +/turf/open/floor/plasteel/airless/dark, +/area/shuttle/caravan/freighter1) +"iN" = ( +/obj/item/stack/sheet/metal/fifty, +/turf/open/floor/plasteel/airless{ + icon_state = "floorscorched2" + }, +/area/shuttle/caravan/freighter1) +"iO" = ( +/obj/effect/turf_decal/box/white/corners{ + dir = 4 + }, +/turf/open/floor/plasteel/airless{ + icon_state = "damaged4" + }, +/area/shuttle/caravan/freighter1) +"iP" = ( +/obj/effect/turf_decal/box/white/corners{ + dir = 1 + }, +/turf/open/floor/plasteel/airless{ + icon_state = "damaged5" + }, +/area/shuttle/caravan/freighter1) +"iR" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating/airless, +/area/shuttle/caravan/freighter1) +"iS" = ( +/obj/structure/girder, +/turf/open/floor/plating/airless{ + icon_state = "platingdmg1" + }, +/area/shuttle/caravan/freighter1) +"iT" = ( +/obj/machinery/space_heater, +/obj/machinery/power/terminal{ + dir = 1 + }, +/obj/structure/cable{ + icon_state = "0-2" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/plating/airless, +/area/shuttle/caravan/freighter2) +"iU" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plasteel/airless, +/area/shuttle/caravan/freighter2) +"iV" = ( +/obj/effect/turf_decal/box/white/corners{ + dir = 4 + }, +/obj/structure/closet/crate/secure/weapon, +/obj/item/gun/ballistic/shotgun/riot{ + pixel_x = -3; + pixel_y = 3 + }, +/obj/item/gun/ballistic/shotgun/riot, +/turf/open/floor/plasteel/airless/dark, +/area/shuttle/caravan/freighter2) +"iW" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/closet/crate/secure/weapon, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/item/gun/syringe/rapidsyringe, +/obj/item/gun/syringe/syndicate{ + pixel_x = 3; + pixel_y = -3 + }, +/turf/open/floor/plasteel/airless/dark, +/area/shuttle/caravan/freighter2) +"iX" = ( +/obj/effect/turf_decal/box/white/corners{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/airless/dark, +/area/shuttle/caravan/freighter2) +"iY" = ( +/obj/machinery/firealarm{ + dir = 4; + pixel_x = 24 + }, +/turf/open/floor/plasteel/blue/corner{ + dir = 4; + initial_gas_mix = "TEMP=2.7" + }, +/area/shuttle/caravan/freighter2) +"ja" = ( +/obj/effect/turf_decal/bot_white, +/obj/structure/closet/crate/secure/engineering, +/obj/item/organ/cyberimp/arm/toolset, +/obj/item/organ/cyberimp/eyes/hud/medical, +/obj/item/organ/cyberimp/brain/anti_stun, +/turf/open/floor/plasteel/airless/dark, +/area/shuttle/caravan/freighter3) +"jb" = ( +/obj/effect/turf_decal/bot_white, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/airless{ + icon_state = "damaged3" + }, +/area/shuttle/caravan/freighter3) +"jc" = ( +/obj/effect/turf_decal/bot_white, +/obj/structure/closet/crate/secure/plasma, +/obj/item/mecha_parts/mecha_equipment/weapon/energy/plasma, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/airless/dark, +/area/shuttle/caravan/freighter3) +"jd" = ( +/obj/effect/turf_decal/bot_white, +/obj/machinery/light/small, +/obj/machinery/button/door{ + id = "caravantrade3_cargo_starboard"; + name = "Cargo Blast Door Control"; + pixel_y = -24 + }, +/turf/open/floor/plasteel/airless/dark, +/area/shuttle/caravan/freighter3) +"je" = ( +/obj/machinery/light/small{ + dir = 8 + }, +/obj/structure/sign/warning/vacuum{ + pixel_x = -32; + pixel_y = -32 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/airless/dark, +/area/shuttle/caravan/freighter3) +"jg" = ( +/obj/structure/closet/crate, +/obj/item/stack/sheet/mineral/silver{ + amount = 25 + }, +/obj/item/stack/sheet/mineral/silver{ + amount = 25 + }, +/turf/open/floor/plasteel/airless/dark, +/area/shuttle/caravan/freighter1) +"jh" = ( +/turf/open/floor/plasteel/airless/dark, +/area/shuttle/caravan/freighter1) +"ji" = ( +/mob/living/simple_animal/hostile/syndicate/melee/space{ + environment_smash = 0; + name = "Syndicate Salvage Worker" + }, +/turf/open/floor/plasteel/vault/airless, +/area/shuttle/caravan/freighter1) +"jj" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/airless/dark, +/area/shuttle/caravan/freighter1) +"jk" = ( +/obj/structure/closet/crate, +/obj/item/stack/sheet/mineral/titanium{ + amount = 20 + }, +/obj/item/stack/sheet/mineral/titanium{ + amount = 20 + }, +/turf/open/floor/plasteel/vault/airless, +/area/shuttle/caravan/freighter1) +"jl" = ( +/obj/structure/closet/crate{ + icon_state = "crateopen"; + opened = 1 + }, +/obj/item/stack/sheet/metal/fifty, +/turf/open/floor/plasteel/airless/dark, +/area/shuttle/caravan/freighter1) +"jm" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/airless{ + icon_state = "damaged2" + }, +/area/shuttle/caravan/freighter1) +"jp" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/power/port_gen/pacman{ + anchored = 1 + }, +/obj/item/wrench, +/obj/structure/cable, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/plating/airless, +/area/shuttle/caravan/freighter2) +"jq" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plasteel/airless/floorgrime, +/area/shuttle/caravan/freighter2) +"jr" = ( +/obj/effect/turf_decal/box/white/corners{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/airless/dark, +/area/shuttle/caravan/freighter2) +"js" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plasteel/airless/dark, +/area/shuttle/caravan/freighter2) +"jt" = ( +/obj/effect/turf_decal/box/white/corners, +/obj/structure/closet/crate/secure/weapon, +/obj/item/gun/energy/e_gun/mini{ + pixel_x = -3; + pixel_y = 3 + }, +/obj/item/gun/energy/e_gun/mini, +/turf/open/floor/plasteel/airless/dark, +/area/shuttle/caravan/freighter2) +"ju" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/airalarm/all_access{ + dir = 8; + pixel_x = 24 + }, +/turf/open/floor/plasteel/airless, +/area/shuttle/caravan/freighter2) +"jv" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/firealarm{ + dir = 8; + pixel_x = -26 + }, +/turf/open/floor/plating/airless, +/area/shuttle/caravan/freighter2) +"jy" = ( +/obj/machinery/door/poddoor{ + id = "caravantrade3_cargo_starboard"; + name = "Cargo Blast Door" + }, +/turf/open/floor/plating/airless, +/area/shuttle/caravan/freighter3) +"jz" = ( +/obj/effect/turf_decal/box/white/corners{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/airless/dark, +/area/shuttle/caravan/freighter1) +"jA" = ( +/obj/effect/turf_decal/bot_white, +/obj/effect/decal/cleanable/dirt, +/obj/structure/closet/crate/secure/engineering, +/obj/item/wrench/caravan, +/obj/item/wirecutters/caravan, +/obj/item/crowbar/red/caravan, +/obj/item/screwdriver/caravan, +/turf/open/floor/plasteel/airless/dark, +/area/shuttle/caravan/freighter3) +"jB" = ( +/turf/open/floor/plasteel/vault/airless, +/area/shuttle/caravan/freighter1) +"jC" = ( +/obj/effect/turf_decal/box/white/corners{ + dir = 8 + }, +/turf/open/floor/plasteel/airless/dark, +/area/shuttle/caravan/freighter1) +"jD" = ( +/obj/effect/turf_decal/box/white/corners, +/obj/structure/closet/crate, +/obj/item/stack/sheet/glass/fifty, +/obj/item/stack/sheet/glass/fifty, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/airless/dark, +/area/shuttle/caravan/freighter1) +"jE" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/airless{ + icon_state = "damaged3" + }, +/area/shuttle/caravan/freighter1) +"jF" = ( +/obj/effect/turf_decal/box/white/corners{ + dir = 8 + }, +/obj/structure/closet/crate, +/obj/item/stack/sheet/plasteel/twenty, +/obj/item/stack/sheet/plasteel/twenty, +/turf/open/floor/plasteel/airless{ + icon_state = "damaged5" + }, +/area/shuttle/caravan/freighter1) +"jH" = ( +/obj/machinery/atmospherics/components/unary/tank/air{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, +/turf/open/floor/plating/airless, +/area/shuttle/caravan/freighter2) +"jI" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/meter, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden, +/turf/open/floor/plasteel/airless, +/area/shuttle/caravan/freighter2) +"jJ" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/airless/floorgrime, +/area/shuttle/caravan/freighter2) +"jK" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/hidden, +/turf/open/floor/plasteel/airless{ + icon_state = "floorscorched1" + }, +/area/shuttle/caravan/freighter2) +"jL" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/mob/living/simple_animal/hostile/pirate/space/ranged{ + environment_smash = 0 + }, +/turf/open/floor/plasteel/airless/floorgrime, +/area/shuttle/caravan/freighter2) +"jN" = ( +/turf/open/floor/plasteel/airless{ + icon_state = "floorscorched1" + }, +/area/shuttle/caravan/freighter2) +"jO" = ( +/obj/effect/decal/cleanable/dirt, +/mob/living/simple_animal/hostile/pirate/space/ranged{ + environment_smash = 0 + }, +/turf/open/floor/plating/airless, +/area/shuttle/caravan/freighter2) +"jP" = ( +/obj/structure/table/reinforced, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/obj/item/paper_bin{ + pixel_x = 6; + pixel_y = 6 + }, +/obj/item/pen{ + pixel_x = 6; + pixel_y = 6 + }, +/obj/item/folder/yellow{ + pixel_x = -6 + }, +/turf/open/floor/plating/airless, +/area/shuttle/caravan/freighter2) +"jQ" = ( +/obj/machinery/door/poddoor{ + id = "caravantrade1_cargo"; + name = "Cargo Blast Door" + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating/airless, +/area/shuttle/caravan/freighter1) +"jR" = ( +/obj/machinery/door/poddoor{ + id = "caravantrade1_cargo"; + name = "Cargo Blast Door" + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating/airless{ + icon_state = "platingdmg3" + }, +/area/shuttle/caravan/freighter1) +"jS" = ( +/obj/machinery/door/poddoor{ + id = "caravantrade1_cargo"; + name = "Cargo Blast Door" + }, +/turf/open/floor/plating/airless, +/area/shuttle/caravan/freighter1) +"jT" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating/airless{ + icon_state = "platingdmg3" + }, +/area/shuttle/caravan/freighter1) +"jV" = ( +/obj/structure/shuttle/engine/propulsion/burst/right{ + dir = 8 + }, +/turf/open/floor/plating/airless, +/area/shuttle/caravan/freighter2) +"jW" = ( +/obj/effect/turf_decal/bot_white/left, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/button/door{ + id = "caravantrade2_cargo_starboard"; + name = "Cargo Blast Door Control"; + pixel_y = -24 + }, +/obj/machinery/light/small, +/turf/open/floor/plasteel/airless/dark, +/area/shuttle/caravan/freighter2) +"jX" = ( +/obj/effect/turf_decal/bot_white, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/airless/dark, +/area/shuttle/caravan/freighter2) +"jY" = ( +/obj/effect/turf_decal/bot_white, +/obj/structure/closet/crate/secure/gear, +/obj/item/ammo_box/a40mm, +/obj/item/ammo_box/a40mm, +/turf/open/floor/plasteel/airless/dark, +/area/shuttle/caravan/freighter2) +"jZ" = ( +/obj/effect/turf_decal/bot_white, +/turf/open/floor/plasteel/airless/dark, +/area/shuttle/caravan/freighter2) +"ka" = ( +/obj/effect/turf_decal/bot_white, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/button/door{ + id = "caravantrade2_cargo_starboard"; + name = "Cargo Blast Door Control"; + pixel_y = -24 + }, +/obj/machinery/light/small, +/turf/open/floor/plasteel/airless/dark, +/area/shuttle/caravan/freighter2) +"kb" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light/small{ + dir = 8 + }, +/obj/structure/sign/warning/vacuum{ + pixel_x = -32; + pixel_y = -32 + }, +/turf/open/floor/plasteel/airless/dark, +/area/shuttle/caravan/freighter2) +"kc" = ( +/obj/structure/rack, +/obj/effect/decal/cleanable/dirt, +/obj/item/tank/internals/oxygen, +/obj/item/device/radio, +/obj/item/clothing/mask/gas, +/turf/open/floor/plasteel/airless{ + icon_state = "damaged5" + }, +/area/shuttle/caravan/freighter2) +"kd" = ( +/obj/structure/grille/broken, +/turf/open/floor/plating/airless{ + icon_state = "platingdmg2" + }, +/area/shuttle/caravan/freighter2) +"ke" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/door/poddoor{ + id = "caravantrade2_cargo_starboard"; + name = "Cargo Blast Door" + }, +/turf/open/floor/plating/airless, +/area/shuttle/caravan/freighter2) +"kf" = ( +/obj/machinery/door/poddoor{ + id = "caravantrade2_cargo_starboard"; + name = "Cargo Blast Door" + }, +/turf/open/floor/plating/airless, +/area/shuttle/caravan/freighter2) +"kg" = ( +/obj/machinery/porta_turret/syndicate/energy{ + dir = 1; + icon_state = "standard_lethal"; + mode = 1 + }, +/turf/closed/wall/mineral/plastitanium, +/area/shuttle/caravan/syndicate2) +"kh" = ( +/turf/closed/wall/mineral/plastitanium, +/area/shuttle/caravan/syndicate1) +"ki" = ( +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/shuttle/caravan/syndicate1) +"kj" = ( +/obj/machinery/porta_turret/syndicate/energy{ + dir = 4; + icon_state = "standard_lethal"; + mode = 1 + }, +/turf/closed/wall/mineral/plastitanium, +/area/shuttle/caravan/syndicate1) +"kk" = ( +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/shuttle/caravan/syndicate2) +"kl" = ( +/turf/closed/wall/mineral/plastitanium, +/area/shuttle/caravan/syndicate2) +"km" = ( +/obj/machinery/camera/xray{ + c_tag = "External View"; + dir = 1; + network = list("caravansyndicate2"); + pixel_y = 32 + }, +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/shuttle/caravan/syndicate2) +"kn" = ( +/obj/structure/shuttle/engine/propulsion/burst{ + dir = 8 + }, +/turf/closed/wall/mineral/plastitanium, +/area/shuttle/caravan/syndicate1) +"ko" = ( +/turf/closed/wall/mineral/plastitanium, +/area/shuttle/caravan/syndicate3) +"kp" = ( +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/shuttle/caravan/syndicate3) +"kq" = ( +/obj/machinery/porta_turret/syndicate/energy{ + dir = 1; + icon_state = "standard_lethal"; + mode = 1 + }, +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/shuttle/caravan/syndicate3) +"kr" = ( +/obj/machinery/door/airlock/hatch{ + id_tag = "caravansyndicate3_bolt_port"; + name = "External Airlock"; + normalspeed = 0; + req_access_txt = "150" + }, +/obj/docking_port/stationary{ + dir = 2; + dwidth = 6; + height = 7; + id = "caravansyndicate3_ambush"; + name = "Trade Route"; + width = 15 + }, +/obj/docking_port/mobile{ + dir = 2; + dwidth = 6; + height = 7; + id = "caravansyndicate3"; + name = "Syndicate Drop Ship"; + port_direction = 8; + preferred_direction = 4; + width = 15 + }, +/turf/open/floor/plating, +/area/shuttle/caravan/syndicate3) +"ks" = ( +/obj/structure/grille, +/obj/structure/window/plastitanium, +/obj/machinery/door/poddoor{ + id = "caravansyndicate3_bridge" + }, +/turf/open/floor/plating, +/area/shuttle/caravan/syndicate3) +"kt" = ( +/obj/machinery/computer/shuttle/caravan/syndicate2, +/turf/open/floor/mineral/plastitanium, +/area/shuttle/caravan/syndicate2) +"ku" = ( +/obj/structure/shuttle/engine/propulsion/burst/left{ + dir = 8 + }, +/turf/open/floor/plating/airless, +/area/shuttle/caravan/syndicate3) +"kv" = ( +/obj/structure/shuttle/engine/heater{ + dir = 8 + }, +/obj/structure/window/reinforced{ + dir = 4 + }, +/turf/open/floor/plating/airless, +/area/shuttle/caravan/syndicate3) +"kw" = ( +/obj/structure/chair, +/obj/machinery/light/small{ + dir = 8 + }, +/obj/structure/cable/yellow{ + icon_state = "0-2" + }, +/obj/machinery/power/apc{ + dir = 8; + name = "Syndicate Drop Ship APC"; + pixel_x = -24; + req_access = 150 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/pod/dark, +/area/shuttle/caravan/syndicate3) +"kx" = ( +/obj/structure/chair, +/obj/machinery/airalarm{ + pixel_y = 24; + req_access = 150 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/pod/dark, +/area/shuttle/caravan/syndicate3) +"ky" = ( +/obj/structure/chair, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/pod/dark, +/area/shuttle/caravan/syndicate3) +"kz" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/structure/closet/syndicate/personal{ + anchored = 1 + }, +/obj/machinery/light/small{ + dir = 4 + }, +/turf/open/floor/mineral/plastitanium, +/area/shuttle/caravan/syndicate3) +"kB" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/structure/closet/syndicate{ + anchored = 1 + }, +/obj/structure/sign/warning/vacuum{ + pixel_y = 32 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/mineral/plastitanium, +/area/shuttle/caravan/syndicate3) +"kC" = ( +/obj/structure/table/reinforced, +/obj/machinery/recharger, +/obj/machinery/light/small{ + dir = 8 + }, +/turf/open/floor/plasteel/darkred/side{ + dir = 10 + }, +/area/shuttle/caravan/syndicate3) +"kD" = ( +/obj/structure/table/reinforced, +/obj/machinery/button/door{ + id = "caravansyndicate3_bridge"; + name = "Bridge Blast Door Control"; + pixel_x = -16; + pixel_y = 5; + req_access_txt = "150" + }, +/obj/machinery/button/door{ + id = "caravansyndicate3_bolt_bridge"; + name = "Bridge Bolt Control"; + normaldoorcontrol = 1; + pixel_x = -16; + pixel_y = -5; + req_access_txt = "150"; + specialfunctions = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/darkred/side{ + dir = 6 + }, +/area/shuttle/caravan/syndicate3) +"kE" = ( +/obj/structure/shuttle/engine/propulsion/burst, +/turf/closed/wall/mineral/plastitanium, +/area/shuttle/caravan/syndicate2) +"kF" = ( +/obj/machinery/button/door{ + id = "caravansyndicate2_bolt"; + name = "External Bolt Control"; + normaldoorcontrol = 1; + pixel_y = -25; + req_access_txt = "150"; + specialfunctions = 4 + }, +/obj/machinery/computer/camera_advanced/shuttle_docker/caravan/syndicate2{ + dir = 4 + }, +/turf/open/floor/mineral/plastitanium, +/area/shuttle/caravan/syndicate2) +"kG" = ( +/obj/machinery/door/airlock/hatch{ + id_tag = "caravansyndicate1_bolt"; + locked = 1; + name = "External Airlock"; + normalspeed = 0; + req_access_txt = "150" + }, +/obj/effect/decal/cleanable/dirt, +/obj/docking_port/stationary{ + dir = 4; + dwidth = 4; + height = 5; + id = "caravansyndicate1_ambush"; + name = "Trade Route"; + width = 9 + }, +/obj/docking_port/mobile{ + callTime = 50; + dir = 4; + dwidth = 4; + height = 5; + id = "caravansyndicate1"; + ignitionTime = 25; + name = "Syndicate Fighter"; + port_direction = 2; + preferred_direction = 4; + width = 9 + }, +/turf/open/floor/plating, +/area/shuttle/caravan/syndicate1) +"kH" = ( +/obj/machinery/computer/security{ + dir = 8; + network = list("caravansyndicate2") + }, +/obj/machinery/power/apc/highcap/fifteen_k{ + dir = 2; + name = "Syndicate Fighter APC"; + pixel_y = -24; + req_access = 150 + }, +/obj/structure/cable/yellow{ + icon_state = "0-8" + }, +/turf/open/floor/mineral/plastitanium, +/area/shuttle/caravan/syndicate2) +"kI" = ( +/obj/machinery/button/door{ + id = "caravansyndicate1_bolt"; + name = "External Bolt Control"; + normaldoorcontrol = 1; + pixel_x = -25; + req_access_txt = "150"; + specialfunctions = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/computer/camera_advanced/shuttle_docker/caravan/syndicate1, +/turf/open/floor/mineral/plastitanium, +/area/shuttle/caravan/syndicate1) +"kJ" = ( +/obj/structure/shuttle/engine/propulsion/burst{ + dir = 8 + }, +/turf/open/floor/plating/airless, +/area/shuttle/caravan/syndicate3) +"kL" = ( +/obj/structure/cable/yellow{ + icon_state = "1-8" + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/darkred/side{ + dir = 1 + }, +/area/shuttle/caravan/syndicate3) +"kM" = ( +/turf/open/floor/plasteel/darkred/side{ + dir = 1 + }, +/area/shuttle/caravan/syndicate3) +"kN" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 10 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/closet/syndicate{ + anchored = 1 + }, +/turf/open/floor/mineral/plastitanium, +/area/shuttle/caravan/syndicate3) +"kO" = ( +/obj/machinery/airalarm{ + dir = 4; + pixel_x = -24; + req_access = 150 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/dark, +/area/shuttle/caravan/syndicate3) +"kP" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 10 + }, +/obj/structure/closet/syndicate{ + anchored = 1 + }, +/turf/open/floor/mineral/plastitanium, +/area/shuttle/caravan/syndicate3) +"kQ" = ( +/obj/machinery/airalarm{ + dir = 4; + pixel_x = -24; + req_access = 150 + }, +/turf/open/floor/plasteel/dark, +/area/shuttle/caravan/syndicate3) +"kR" = ( +/obj/structure/chair/office/dark{ + dir = 4 + }, +/obj/machinery/turretid{ + ailock = 1; + control_area = null; + desc = "A specially designed set of turret controls. Looks to be covered in protective casing to prevent AI interfacing."; + icon_state = "control_kill"; + lethal = 1; + name = "Shuttle turret control"; + pixel_y = 34; + req_access = 150 + }, +/turf/open/floor/plasteel/darkred/corner{ + dir = 4 + }, +/area/shuttle/caravan/syndicate3) +"kS" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/computer/camera_advanced/shuttle_docker/caravan/syndicate3{ + dir = 8 + }, +/turf/open/floor/plasteel/darkred/side{ + dir = 10 + }, +/area/shuttle/caravan/syndicate3) +"kT" = ( +/obj/machinery/door/airlock/hatch{ + id_tag = "caravansyndicate2_bolt"; + locked = 1; + name = "External Airlock"; + normalspeed = 0; + req_access_txt = "150" + }, +/obj/docking_port/stationary{ + dir = 1; + dwidth = 4; + height = 5; + id = "caravansyndicate2_ambush"; + name = "Trade Route"; + width = 9 + }, +/obj/docking_port/mobile{ + callTime = 50; + dir = 1; + dwidth = 4; + height = 5; + id = "caravansyndicate2"; + ignitionTime = 25; + name = "Syndicate Fighter"; + port_direction = 2; + preferred_direction = 1; + width = 9 + }, +/turf/open/floor/plating, +/area/shuttle/caravan/syndicate2) +"kU" = ( +/obj/machinery/door/airlock/external{ + cyclelinkeddir = 2; + id_tag = "caravantrade1_bolt"; + locked = 1 + }, +/obj/docking_port/stationary{ + dir = 2; + dwidth = 11; + height = 11; + id = "caravantrade1_ambush"; + name = "Trade Route"; + width = 27 + }, +/obj/docking_port/mobile{ + callTime = 250; + dir = 2; + dwidth = 11; + height = 11; + id = "caravantrade1"; + movement_force = list("KNOCKDOWN" = 0, "THROW" = 0); + name = "Small Freighter"; + port_direction = 8; + preferred_direction = 4; + width = 27 + }, +/turf/open/floor/plating, +/area/shuttle/caravan/freighter1) +"kV" = ( +/obj/structure/chair{ + dir = 4 + }, +/obj/machinery/turretid{ + ailock = 1; + control_area = null; + desc = "A specially designed set of turret controls. Looks to be covered in protective casing to prevent AI interfacing."; + icon_state = "control_kill"; + lethal = 1; + name = "Shuttle turret control"; + pixel_x = 32; + pixel_y = -28; + req_access = 150 + }, +/obj/structure/cable/yellow{ + icon_state = "0-2" + }, +/mob/living/simple_animal/hostile/syndicate{ + environment_smash = 0; + name = "Syndicate Salvage Pilot" + }, +/turf/open/floor/mineral/plastitanium, +/area/shuttle/caravan/syndicate1) +"kW" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/computer/shuttle/caravan/syndicate1{ dir = 8 }, /turf/open/floor/mineral/plastitanium, -/area/ruin/powered) +/area/shuttle/caravan/syndicate1) +"kX" = ( +/obj/machinery/camera/xray{ + c_tag = "External View"; + dir = 4; + network = list("caravansyndicate1"); + pixel_x = 32 + }, +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/shuttle/caravan/syndicate1) +"kZ" = ( +/turf/open/floor/plasteel/dark, +/area/shuttle/caravan/syndicate3) +"la" = ( +/turf/open/floor/plasteel/vault{ + dir = 5 + }, +/area/shuttle/caravan/syndicate3) +"lb" = ( +/obj/machinery/door/airlock/hatch{ + name = "Ready Room"; + req_access_txt = "150" + }, +/turf/open/floor/plasteel/vault{ + dir = 5 + }, +/area/shuttle/caravan/syndicate3) +"lc" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/vault{ + dir = 5 + }, +/area/shuttle/caravan/syndicate3) +"ld" = ( +/obj/machinery/door/airlock/hatch{ + id_tag = "caravansyndicate3_bolt_bridge"; + locked = 1; + name = "Bridge"; + req_access_txt = "150" + }, +/turf/open/floor/plasteel/vault{ + dir = 5 + }, +/area/shuttle/caravan/syndicate3) +"le" = ( +/obj/structure/chair/office/dark{ + dir = 4 + }, +/mob/living/simple_animal/hostile/syndicate{ + environment_smash = 0; + name = "Syndicate Salvage Pilot" + }, +/turf/open/floor/plasteel/dark, +/area/shuttle/caravan/syndicate3) +"lf" = ( +/obj/machinery/computer/shuttle/caravan/syndicate3{ + dir = 8 + }, +/turf/open/floor/plasteel/darkred/side{ + dir = 8 + }, +/area/shuttle/caravan/syndicate3) +"lg" = ( +/obj/machinery/power/apc/highcap/fifteen_k{ + dir = 8; + name = "Syndicate Fighter APC"; + pixel_x = -24; + req_access = 150 + }, +/obj/machinery/computer/security{ + dir = 1; + network = list("caravansyndicate1") + }, +/obj/structure/cable/yellow, +/turf/open/floor/mineral/plastitanium, +/area/shuttle/caravan/syndicate1) +"li" = ( +/turf/open/floor/plasteel/darkred/side, +/area/shuttle/caravan/syndicate3) +"lj" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/darkred/side, +/area/shuttle/caravan/syndicate3) +"lk" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 9 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/closet/syndicate{ + anchored = 1 + }, +/turf/open/floor/mineral/plastitanium, +/area/shuttle/caravan/syndicate3) +"ll" = ( +/obj/machinery/firealarm{ + dir = 8; + pixel_x = -24 + }, +/turf/open/floor/plasteel/dark, +/area/shuttle/caravan/syndicate3) +"lm" = ( +/obj/machinery/firealarm{ + dir = 8; + pixel_x = -24 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/dark, +/area/shuttle/caravan/syndicate3) +"ln" = ( +/obj/structure/chair/office/dark{ + dir = 4 + }, +/turf/open/floor/plasteel/darkred/corner, +/area/shuttle/caravan/syndicate3) +"lo" = ( +/obj/machinery/computer/crew{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/darkred/side{ + dir = 9 + }, +/area/shuttle/caravan/syndicate3) +"lp" = ( +/obj/structure/shuttle/engine/propulsion/burst/right{ + dir = 8 + }, +/turf/open/floor/plating/airless, +/area/shuttle/caravan/syndicate3) +"lq" = ( +/obj/structure/chair{ + dir = 1 + }, +/obj/machinery/light/small{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/pod/dark, +/area/shuttle/caravan/syndicate3) +"lr" = ( +/obj/structure/chair{ + dir = 1 + }, +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -26 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/pod/dark, +/area/shuttle/caravan/syndicate3) +"ls" = ( +/obj/structure/chair{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/pod/dark, +/area/shuttle/caravan/syndicate3) +"lt" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/light/small{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/obj/structure/closet/syndicate/personal{ + anchored = 1 + }, +/turf/open/floor/mineral/plastitanium, +/area/shuttle/caravan/syndicate3) +"lv" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/structure/sign/warning/vacuum{ + pixel_y = -32 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/closet/syndicate{ + anchored = 1 + }, +/turf/open/floor/mineral/plastitanium, +/area/shuttle/caravan/syndicate3) +"lw" = ( +/obj/structure/table/reinforced, +/obj/item/storage/toolbox/emergency, +/obj/item/wrench, +/obj/machinery/light/small{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/darkred/side{ + dir = 9 + }, +/area/shuttle/caravan/syndicate3) +"lx" = ( +/obj/structure/table/reinforced, +/obj/item/storage/firstaid/regular, +/obj/item/device/assembly/flash/handheld, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/darkred/side{ + dir = 5 + }, +/area/shuttle/caravan/syndicate3) +"ly" = ( +/obj/machinery/porta_turret/syndicate/energy{ + dir = 2; + icon_state = "standard_lethal"; + mode = 1 + }, +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/shuttle/caravan/syndicate3) +"lB" = ( +/turf/closed/mineral/random/high_chance, +/area/ruin/unpowered) +"lD" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating/airless{ + icon_state = "platingdmg1" + }, +/area/ruin/unpowered) +"lE" = ( +/obj/machinery/light/small, +/obj/effect/turf_decal/box/white/corners, +/obj/machinery/button/door{ + id = "caravantrade1_cargo"; + name = "Cargo Blast Door Control"; + pixel_y = -24 + }, +/obj/structure/closet/crate, +/obj/item/stack/sheet/mineral/diamond{ + amount = 5 + }, +/turf/open/floor/plasteel/airless/dark, +/area/shuttle/caravan/freighter1) +"tH" = ( +/obj/structure/shuttle/engine/propulsion/burst{ + dir = 8 + }, +/turf/closed/wall/mineral/plastitanium, +/area/ruin/unpowered) (1,1,1) = {" aa @@ -1167,6 +3891,11 @@ aa aa aa aa +bt +bt +bt +aa +aa aa aa aa @@ -1214,6 +3943,11 @@ aa aa aa aa +bt +bt +bt +bt +aa aa aa aa @@ -1260,7 +3994,12 @@ aa aa aa aa -aa +bt +bt +lB +lB +bt +bt aa aa aa @@ -1307,7 +4046,12 @@ aa aa aa aa -aa +bt +bt +lB +lB +bt +bt aa aa aa @@ -1350,11 +4094,16 @@ aa aa aa aa +bl aa aa aa -aa -aa +bt +bt +lB +lB +bt +bt aa aa aa @@ -1401,7 +4150,12 @@ aa aa aa aa -aa +bt +bt +lB +bt +bt +bt aa aa aa @@ -1449,6 +4203,11 @@ aa aa aa aa +bt +bt +bt +bt +aa aa aa aa @@ -1510,17 +4269,22 @@ aa aa aa aa -ab -ar -ab -ar -ab aa aa aa aa aa aa +kn +ki +kG +ki +kn +aa +aa +aa +aa +aa aa aa aa @@ -1556,19 +4320,24 @@ aa aa aa aa -cT -ab -as -ab -as -ab -cT aa aa aa -aC -aC -aC +aa +aa +aa +kn +ki +kI +kV +lg +ki +kn +aa +aa +aa +aa +aa aa aa aa @@ -1587,6 +4356,9 @@ aa aa aa aa +lB +lB +lB aa aa aa @@ -1604,18 +4376,20 @@ aa aa aa aa -ab -dm -dt -dw -ab aa -aC -aC +kh +ki +ki +ki +kW +ki +ki +ki +kh +aa +aa +aa aa -aC -aC -aC aa aa aa @@ -1634,12 +4408,36 @@ aa aa aa aa +lB +lB +lB +lB +aa +aa +aa +aa +aa +fK +ge +ge +ge +hD +fG aa aa aa aa aa aa +ki +kh +aa +kj +kX +kj +aa +kh +ki aa aa aa @@ -1648,25 +4446,6 @@ aa aa aa aa -aa -aa -aa -ab -dm -cs -dw -ab -aa -aC -aC -aC -aC -aC -aC -aa -aa -aa -aa "} (12,1,1) = {" aa @@ -1678,9 +4457,31 @@ aa aa aa aa -aC -aC -aC +aa +aa +aa +aa +lB +lB +lB +aa +aa +aa +aa +fG +fL +fL +fL +fL +fL +fH +fK +ge +hD +aa +aa +aa +kj aa aa aa @@ -1688,6 +4489,7 @@ aa aa aa aa +kj aa aa aa @@ -1696,24 +4498,6 @@ aa aa aa aa -aa -aa -cS -cs -cs -cs -cS -aa -aa -aC -aC -aC -aC -aa -aa -aa -aa -aa "} (13,1,1) = {" aa @@ -1721,13 +4505,7 @@ aa aa aa aa -aa -aa -aa -aa -aC -aC -aC +bl aa aa aa @@ -1742,19 +4520,30 @@ aa aa aa aa +fH +ay +gf +gD +hb +hE +fH +fL +fL +fL +fG +aa +aa +aa +aa +aa +aa +aa +aa aa aa aa -ab -dn -cs -dx -ab aa aa -aC -aC -aC aa aa aa @@ -1771,12 +4560,6 @@ aa aa aa aa -aH -aH -aC -aC -aC -aC aa aa aa @@ -1789,14 +4572,25 @@ aa aa aa aa +fH +fN +gg +ax +hc +hF +fH +iI +jg +jz +fH +aa +aa +aa +aa +aa aa aa aa -ab -cs -du -cs -ab aa aa aa @@ -1818,13 +4612,6 @@ aa aa aa aa -aH -aH -aC -aC -aC -aC -aC aa aa aa @@ -1837,13 +4624,25 @@ aa aa aa aa +fH +fO +fH +fH +fH +fO +fH +iJ +jh +lE +fH +aa +aa +aa +aa +aa +aa aa aa -ab -ce -dC -ce -ab aa aa aa @@ -1864,14 +4663,6 @@ aa aa aa aa -aC -aH -aH -aC -aC -aC -aC -aC aa aa aa @@ -1885,12 +4676,17 @@ aa aa aa aa -aa -ae +fH +fP +az aB -aB -aB -bb +fH +hG +ii +be +ji +jB +jQ aa aa aa @@ -1902,6 +4698,14 @@ aa aa aa aa +aa +aa +aa +aa +bt +bt +aa +aa "} (17,1,1) = {" aa @@ -1911,30 +4715,30 @@ aa aa aa aa -aC -aH -aH -aC -aC -aC -aC -aC -aH -aH -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa +aa +aa +aa +aa +aD +aa +aa +aa +aa +aa +aa +aa +aa +fI +fQ +fH +fH +fH +hH +ij +iL +jj +jC +jR aa aa aa @@ -1948,6 +4752,11 @@ aa aa aa aa +bt +bt +bt +bt +bt aa "} (18,1,1) = {" @@ -1958,30 +4767,30 @@ aa aa aa aa +aa +aa +br +aa +aa +aa +aa +bt +aa +aa +aa +aa +aa +fH +fR +aA aC -aH -aH -aC -aC -aC -aC -aC -aH -aH -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa +fG +hI +he +iM +jj +jD +jS aa aa aa @@ -1995,6 +4804,11 @@ aa aa aa aa +bt +bt +lB +bt +bt aa "} (19,1,1) = {" @@ -2003,18 +4817,11 @@ aa aa aa aa -aa -aa -aC -aC -aH -aH -aC -aC -aC -aC -aH -aH +tH +dE +dL +dE +bJ aa aa aa @@ -2022,15 +4829,20 @@ aa aa aa aa -bl aa aa aa -bl -aa -aa -aa -bl +fH +fS +fH +fH +fH +hJ +ik +iN +jk +jE +jQ aa aa aa @@ -2043,25 +4855,28 @@ aa aa aa aa +bt +bt +lB +lB +bt +bt +aa "} (20,1,1) = {" aa aa aa aa +tH +dE +dF +eu +eG +bJ +bJ aa -aa -aa -aC -aC -aC -aH -aH -aC -aC -aC -aH -aH +bt aa aa aa @@ -2069,15 +4884,17 @@ aa aa aa aa -bl -ca -co -cF -bl -ca -co -cF -bl +fH +fT +fH +aF +fH +hK +il +iO +jl +jF +jS aa aa aa @@ -2090,41 +4907,48 @@ aa aa aa aa +bt +bt +lB +lB +bt +aa +aa "} (21,1,1) = {" aa aa aa +bJ +dE +dE +dE +gk +lD +bs +bJ +aa +bt +bt aa aa aa aa -aC -aC -aC -aH -aH -aC -aC -aC -aH +aa +aa +fI +fU +fH aH +fH +fH +ij +iP +jm +am +jT aa -aa -aa -aa -aa -aa -aa -bl -cb -cb -cb -bl -cb -cb -cb -bl +aD aa aa aa @@ -2135,6 +4959,11 @@ aa aa aa aa +bt +bt +bt +bt +bt aa aa "} @@ -2142,36 +4971,34 @@ aa aa aa aa +dE +bJ +aa +bJ +bs +bs +aa +ae aa aa aa aa -aC -aC -aC -aC -aH -aH -aC -aC +bt +aa +aa +aa +aa +fI +fV +gj +gJ +hd +aX +im bf -aH -aa -aa -aa -aa -aa -aa -aa -bl -bv -bw -bw -bw -bw -bw -bw -bl +al +aq +ar aa aa aa @@ -2184,41 +5011,53 @@ aa aa aa aa +aa +aa +bt +bt +aa +aa +aa "} (23,1,1) = {" aa aa aa +bJ aa aa aa -aa -aa -aC -aC -aC -aC -aH -aC -aH -aH -aH -aa -aa -aa -aa -aa -aa +ab aa bs -bC -cv -cK -bG -bG -bw -bw -bl +ac +aD +aa +aa +aa +aa +aa +aa +aa +aa +fI +fW +gl +aJ +he +fH +in +iR +am +aq +aa +aa +aa +aa +aa +aa +aa +aa aa aa aa @@ -2235,6 +5074,35 @@ aa (24,1,1) = {" aa aa +br +aa +aa +aa +aa +aa +ac +aa +dD +ex +bt +bt +aa +aa +aa +aa +aa +aa +fH +fX +gm +fH +hf +fH +fH +iS +br +aa +aD aa aa aa @@ -2242,30 +5110,6 @@ aa aa aa aa -aC -aC -aC -aH -aC -aH -aH -aa -aa -aa -aa -aa -aa -bA -aa -aa -cg -ci -bE -bG -dg -bG -cc -bl aa aa aa @@ -2282,6 +5126,36 @@ aa (25,1,1) = {" aa aa +bt +bt +aa +aa +aa +aa +ad +bt +dD +bt +bt +bt +bt +bt +aa +aa +aa +aa +fH +fH +fH +fH +hg +hM +fH +aa +aa +aE +aa +ao aa aa aa @@ -2289,37 +5163,12 @@ aa aa aa aa -aC -aC -aC -aH -aH -aH -aH -aa -aa -aa -aa -aa -aa -aa -aD -aT -br -ci -cL -bG -dh -cG -bw -bm -aa -aa -aa -aa -aa aa aa +bt +bt +bt +bt aa aa aa @@ -2328,6 +5177,32 @@ aa "} (26,1,1) = {" aa +bt +bt +bt +aa +aa +aa +ew +bt +bt +dD +bt +bt +bt +bt +bt +aa +aa +aa +aa +kU +fY +gn +aK +hh +hN +fI aa aa aa @@ -2338,36 +5213,15 @@ aa aa aa aa -aC -aC -aH -aH -aC -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -cw -ci -bE -bG -do -bw -bm -aa -aa -aa -aa -aa -aa aa aa +bt +bt +bt +bt +bt +bt +bt aa aa aa @@ -2381,32 +5235,26 @@ aa aa aa aa +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt aa aa aa -aa -aC -aC -aC -aC -aa -aa -aa -aa -aa -aa -bq -aa -aa -aa -bs -cx -cM -cU -bG -bG -bw -bm +fG +fH +fH +fH +hi +fH +fH aa aa aa @@ -2417,10 +5265,48 @@ aa aa aa aa +as +bt +bt +bt +bt +bt +bt +bt +bt +aa +aa aa aa "} (28,1,1) = {" +bt +aa +aa +aa +dD +dD +bt +bt +bt +lB +lB +bt +bt +bt +bt +bt +bt +aa +aa +aa +aa +fH +go +aL +hj +hO +fH aa aa aa @@ -2431,11 +5317,101 @@ aa aa aa aa +bt +bt +bt +dD +dD +dD +dD +bt +bt +bt +bt +aa +aa +"} +(29,1,1) = {" +aa +aa +aa +dD +bt +bt +bt +bt +lB +lB +lB +lB +bt +bt +bt +bt +bt +aa +aa +aa +aa +fI +gp +gN +hk +hP +fI +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +bt +bt +bt +dD +dD +bt +dD +dD +bt +bt +bt +aa +aa +"} +(30,1,1) = {" +aa +aa +aa +bt +bt +bt +bt +lB +lB +lB +lB +lB +bt +bt +bt +bt +aa +aa +aa +aa +aa +fI +fI +gO +hl +fI +fI aa -aC -aC -aC -aC aa aa aa @@ -2445,119 +5421,17 @@ aa aa aa br -aa -bs -ci -cL -bG -di -dp -bx -bm -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(29,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ch -cy -bE -bl -cm -bl -bl -bl -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(30,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aI -aN -aI -aN -aI -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -bq -aa -bB -cz -bG -bG -dj -dq -bw -bO -aa -aa -aa -aa -aC -aa -aa -aC -aa -aa +bt +bt +dD +dD +bt +bt +bt +dD +bt +bt +bt aa aa "} @@ -2565,36 +5439,29 @@ aa aa aa aa +bt +bt +bt +lB +lB +lB +lB +lB +bt +bt +bt +bt aa aa aa aa aa -aI -aO -aI -aO -aI -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -bQ -ci -ci -bw -cV -bw -bw -bw -bl +aa +aa +fI +fI +fI +fI aa aa aa @@ -2605,6 +5472,18 @@ aa aa aa aa +bt +bt +bt +dD +dD +bt +bt +bt +dD +dD +bt +bt aa aa "} @@ -2612,16 +5491,18 @@ aa aa aa aa -aa -aa -aa -aa -aa -aI -aP -aV -bc -aI +bt +bt +bt +bt +lB +lB +lB +bt +bt +bt +bt +bt aa aa aa @@ -2633,42 +5514,47 @@ aa aa aa aa -bR -bz -cc -bN -bZ -cc -cE -bz -bp aa aa aa aa aa aa -aC aa aa aa aa +bt +bt +bt +bt +dD +bt +bt +bt +bt +dD +bt +bt +bt aa "} (33,1,1) = {" aa aa -aa -aa -aa -aa -aa -aa -aI -aQ -aW -bd -aI +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt aa aa aa @@ -2681,15 +5567,6 @@ aa aa aa aa -bp -bJ -bJ -bJ -bJ -bJ -bp -aa -aa aa aa aa @@ -2700,22 +5577,35 @@ aa aa aa aa +bt +bt +bt +dD +bt +bt +bt +bt +dD +dD +dD +bt aa "} (34,1,1) = {" aa aa -aa -aa -aa -aa -aa -aa -aJ -aR -aK -be -aJ +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt aa aa aa @@ -2739,30 +5629,34 @@ aa aa aa aa -aa -aC -aC -aC -aC -aa -aa -aa +bt +bt +bt +dD +dD +bt +bt +bt +bt +dD +dD +dD aa "} (35,1,1) = {" aa aa aa -aa -aa -aa -aa -aa -aI -aK -aK -aK -aI +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt aa aa aa @@ -2788,12 +5682,17 @@ aa aa aa aa -aa -aC -aC -aa -aa -aa +bt +bt +dD +dD +bt +bt +bt +bt +bt +bt +bt aa "} (36,1,1) = {" @@ -2801,16 +5700,9 @@ aa aa aa aa -aa -aa -aa -aa -aK -aS -aK -be -aK -aD +bt +bt +bt aa aa aa @@ -2835,13 +5727,25 @@ aa aa aa aa -aC -aC aa aa aa aa aa +aa +aa +aa +aa +dD +dD +bt +bt +bt +bt +bt +bt +bt +aa "} (37,1,1) = {" aa @@ -2851,12 +5755,6 @@ aa aa aa aa -aD -aa -aT -aK -aS -aI aa aa aa @@ -2889,6 +5787,17 @@ aa aa aa aa +aa +dD +bt +bt +bt +bt +bt +bt +bt +bt +aa "} (38,1,1) = {" aa @@ -2900,10 +5809,6 @@ aa aa aa aa -aD -aK -aa -aa aa aa aa @@ -2935,6 +5840,15 @@ aa aa aa aa +bt +bt +bt +bt +bt +bt +bt +bt +bt aa "} (39,1,1) = {" @@ -2945,13 +5859,6 @@ aa aa aa aa -aE -aa -aa -aX -aD -aa -aT aa aa aa @@ -2983,6 +5890,18 @@ aa aa aa aa +aa +aa +bt +bt +bt +bt +bt +bt +bt +bt +aa +aa "} (40,1,1) = {" aa @@ -2991,12 +5910,13 @@ aa aa aa aa +dN +ea +em aa -aa -aa -aa -aX -aa +dN +ea +em aa aa aa @@ -3027,6 +5947,10 @@ aa aa aa aa +bt +bt +bt +bt aa aa aa @@ -3037,12 +5961,15 @@ aa aa aa aa -aa -aa -aa -aa -aa -aX +ch +dO +dO +dO +dB +dO +dO +dO +ch aa aa aa @@ -3073,6 +6000,8 @@ aa aa aa aa +bt +bt aa aa aa @@ -3083,20 +6012,17 @@ aa aa aa aa -aa -aa -aa -aa -aa -aa -aX -aa -aa -aa -aa -aa -aa -aa +ch +dB +dP +eb +en +dB +eV +fk +ft +dB +ch aa aa aa @@ -3106,6 +6032,14 @@ aa aa aa aa +hm +hQ +io +io +io +io +jV +hm aa aa aa @@ -3130,20 +6064,17 @@ aa aa aa aa -aa -aa -aa -aa -aa -aa -aX -aX -aa -aa -aa -aa -aa -aa +dB +dI +dQ +ec +eo +eK +eW +ec +fu +fC +dB aa aa aa @@ -3153,6 +6084,14 @@ aa aa aa aa +hn +hn +ip +ip +ip +ip +hn +hn aa aa aa @@ -3177,6 +6116,17 @@ aa aa aa aa +dB +dB +dR +ed +dB +dB +dB +ed +dR +dB +dB aa aa aa @@ -3184,23 +6134,16 @@ aa aa aa aa -aX -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa +aa +aa +hn +aY +iq +iT +jp +jH +jW +hn aa aa aa @@ -3213,6 +6156,7 @@ aa aa aa aa +bl aa aa aa @@ -3224,20 +6168,17 @@ aa aa aa aa -aa -aa -aa -aa -aa -aa -aa -aX -aa -aa -aa -aa -aa -aa +dB +dJ +dS +ee +ep +dB +eX +fl +fv +dJ +dB aa aa aa @@ -3247,6 +6188,14 @@ aa aa aa aa +ho +hS +aP +iU +jq +jI +jX +ke aa aa aa @@ -3270,6 +6219,35 @@ aa aa aa aa +ch +dB +dB +dT +ef +eq +dB +eY +ef +fw +dB +dB +ch +bs +bs +bs +bs +bs +bs +bs +bs +hp +hT +is +iV +jr +jJ +jY +kf aa aa aa @@ -3278,30 +6256,6 @@ aa aa aa aa -aX -aa -aa -aa -aa -aa -aa -aa -aa -aa -aT -aa -aa -bl -aa -aa -aa -bl -aa -aa -aa -aa -aa -aa aa aa aa @@ -3317,6 +6271,35 @@ aa aa aa aa +aj +dG +dK +dU +at +er +dB +eZ +fm +fx +fD +dG +fF +af +af +af +ag +ah +af +af +af +hq +hU +it +iW +js +jK +jZ +ke aa aa aa @@ -3325,7 +6308,6 @@ aa aa aa aa -aX aa aa aa @@ -3334,29 +6316,6 @@ aa aa aa aa -aT -br -aa -bs -bS -cj -co -cF -bl -aa -aa -aa -aa -aa -aC -aC -aC -aC -aa -aa -aa -aa -aa aa aa "} @@ -3364,6 +6323,35 @@ aa aa aa aa +ch +dB +dB +dV +ef +es +dB +fa +au +fy +dB +dB +ch +bs +bs +bs +bs +bs +bs +bs +bs +hr +hV +iu +iX +jt +jL +jX +kf aa aa aa @@ -3372,7 +6360,6 @@ aa aa aa aa -aX aa aa aa @@ -3381,29 +6368,6 @@ aa aa aa aa -bk -aa -aE -aa -bl -cb -cb -cb -bl -aa -aa -aa -aa -aa -aC -aC -aC -aC -aa -aa -aa -aa -aa aa aa "} @@ -3412,14 +6376,34 @@ aa aa aa aa -aa -aa -aa -aa -aa -aa -aa -aX +dH +dJ +dW +eh +et +dB +fb +fo +fz +dJ +dH +aa +aa +aa +aa +aa +aa +aa +aa +aa +hn +hW +iv +iY +ju +bi +ka +hn aa aa aa @@ -3428,24 +6412,9 @@ aa aa aa aa -bl -bs -aD -bK -bT -ci -bw -bw -bl aa aa aa -aC -aC -aC -aC -aC -aC aa aa aa @@ -3459,14 +6428,35 @@ aa aa aa aa -aa -ab -aa -aa -aa -aa -ab -aX +ch +dB +dX +ei +dB +dB +dB +fp +dB +dB +ch +aa +aa +aa +aa +aa +aa +aa +aa +aa +hn +hn +aZ +hn +hn +hn +hn +hn +aa aa aa aa @@ -3475,25 +6465,9 @@ aa aa aa aa -bl -ci -bB -bB -bU -bE -bw -bH -bl aa aa aa -aC -aC -aC -aC -aC -aC -aC aa aa aa @@ -3507,13 +6481,41 @@ aa aa aa aa -ad -ar -ar -ar -ar -ad -aX +dB +dY +ej +ez +eL +fc +fq +fA +dB +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +hs +hX +ix +bg +jv +jN +kb +hs +aa +aa +aa +aa +aa +aa +aa +aa aa aa aa @@ -3523,29 +6525,6 @@ aa aa aa bl -bu -bC -bC -bV -bG -cA -cc -bl -aa -aa -aC -aC -aC -aC -aC -aC -aC -aC -aa -aa -aa -aa -aa aa "} (52,1,1) = {" @@ -3553,14 +6532,38 @@ aa aa aa aa -ab -ad -as -as -as -as -ad -ad +aa +dB +dZ +ek +eB +eM +fd +fr +fB +dB +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ht +hY +iy +bs +bh +jO +kc +ht +aa +aa +aa +aa aa aa aa @@ -3569,27 +6572,8 @@ aa aa aa aa -bm -bv -bD -bE -bG -ck -cB -bw -bm aa aa -aC -aC -aC -aC -aC -aC -aC -aC -aC -aC aa aa aa @@ -3597,46 +6581,51 @@ aa "} (53,1,1) = {" aa -ab -ad -ab -ab -aj -at -aw -aw -at -aY -ad -ab -ab -ab +aa +aa +aa +aa +bb +dB +el +eC +eO +fe +fs +dB +bc +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +bs +dc +aa +an +jP +ht +ht +aa +aa +aa +aa +aa +aa +aa aa aa aa aa aa -bm -bw -bE -bG -bF -bG -bG -bw -bm aa aa -aH -aC -aC -aC -aC -aC -aC -aC -aC -aC aa aa aa @@ -3644,46 +6633,51 @@ aa "} (54,1,1) = {" aa -ab -af -af -ab -ag -at -aF -aL -at -ag -ab -af -af -ad aa aa aa aa aa -bn -bw -bF -bG -bW -cl -bG -bw -bm +ch +dB +dB +dB +ff +dB +ch +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aD +aa +aa +bs +aa +bs +kd +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa aa aa -aH -aC -aC -aC -aC -aH -aH -dz -aH -aC aa aa aa @@ -3691,46 +6685,51 @@ aa "} (55,1,1) = {" aa -ac -ag -ag -ai -ak -ag -ag -ag -ak -ag -ai -ag -ag -ac -bg -bg -bg -bj -bg -bn -bx -bG -bG -bX -bG -cC -bx -bm aa aa -aH -aH -aC -aC -aH -aH -aH -aH -aH -aC +aa +aa +aa +aa +dB +eD +eP +fg +dB +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aT +aa +aD +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa aa aa aa @@ -3738,46 +6737,51 @@ aa "} (56,1,1) = {" aa -ac -ag -ag -ai -ag -at -ag -ag -at -ag -ai -ag -ag -ac -bg -bh -bi -bg -bg -bl -bl -bl -bL -bl -cm -bl -bl -bl aa aa -aC -aH -aH -aH -dz -aC -aC -aH -dz -aC +aa +aa +aa +aa +dB +eE +eQ +fg +dB +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +dc +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa aa aa aa @@ -3785,46 +6789,51 @@ aa "} (57,1,1) = {" aa -ad -af -af -ad -al -at -ag -ag -at -al -ab -af -af -ad aa aa aa aa aa -bo -bw -bw -bM -bw -bw -bw -bw -bO +aa +dB +eF +eR +fh +dB +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +br +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa aa aa -aC -aC -dy -aH -aC -aC -aC -aH -aH -aC aa aa aa @@ -3832,46 +6841,51 @@ aa "} (58,1,1) = {" aa -ae -ab -ab -ad -am -ag -ag -ag -ag -am -ad -ab -ab -bb aa aa aa aa aa -bl -by -bH -bw -bY -bw -cD -bw -bl +aa +dB +eI +eS +fi +dB +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa aa aa -aC -aC -aC -aC -aC -aC -aC -aH -aC -aC aa aa aa @@ -3881,16 +6895,35 @@ aa aa aa aa -ah -ad -an -at -ag -ag -at -az -ad -ah +aa +aa +aa +aa +dH +eJ +eT +fj +dH +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa aa aa aa @@ -3898,26 +6931,12 @@ aa aa aa aa -bp -bz -bI -bN -bZ -cn -cE -bz -bp aa aa aa aa aa aa -aC -aC -aH -aH -aC aa aa aa @@ -3928,16 +6947,33 @@ aa aa aa aa -ad -ab -ao -at -ag -ag -at -aZ -ab -ad +aa +aa +aa +aa +dH +dH +eU +dH +dH +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa aa aa aa @@ -3946,13 +6982,6 @@ aa aa aa aa -bp -bJ -bJ -bJ -bJ -bJ -bp aa aa aa @@ -3960,11 +6989,6 @@ aa aa aa aa -aC -aC -aH -aC -aC aa aa aa @@ -3975,16 +6999,21 @@ aa aa aa aa -ah -ab -ap -ag -ak -ag -aF -ba -ab -ah +aa +aa +aa +aa +aa +dH +dH +dH +aa +aa +aa +aa +aa +aa +aa aa aa aa @@ -4022,16 +7051,21 @@ aa aa aa aa -ad -ab -aq -au -ag -ag -aM -az -ab -ad +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa aa aa aa @@ -4069,16 +7103,21 @@ aa aa aa aa -ae -ab -ab -ab -ag -ag -ab -ab -ab -bb +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa aa aa aa @@ -4117,14 +7156,6 @@ aa aa aa aa -ae -ad -av -ag -ag -aU -ad -bb aa aa aa @@ -4149,11 +7180,24 @@ aa aa aa aa -ab -ar -ab -ar -ab +aa +aa +aa +aa +aa +aa +aa +ku +kJ +kJ +kJ +lp +aa +aa +aa +aa +aa +aa aa aa aa @@ -4165,12 +7209,6 @@ aa aa aa aa -ab -aw -ag -ag -aw -ad aa aa aa @@ -4195,13 +7233,24 @@ aa aa aa aa -cT -ab -as -ab -as -ab -cT +aa +aa +aa +aa +aa +ko +kv +kv +kv +kv +kv +ko +aa +aa +aa +aa +aa +aa aa aa aa @@ -4212,12 +7261,6 @@ aa aa aa aa -ab -ax -ag -ag -ax -ab aa aa aa @@ -4243,11 +7286,22 @@ aa aa aa aa -ab -dm -cs -dw -ab +aa +aa +aa +aa +kp +kp +aS +aU +aV +kp +kp +aa +aa +aa +aa +aa aa aa aa @@ -4259,12 +7313,6 @@ aa aa aa aa -ab -ay -aG -aM -dA -ab aa aa aa @@ -4290,11 +7338,22 @@ aa aa aa aa -ab -dm -cs -dw -ab +aa +aa +aa +aa +kp +kw +kL +kZ +li +lq +kp +aa +aa +aa +aa +aa aa aa aa @@ -4306,12 +7365,6 @@ aa aa aa aa -ab -az -ag -ag -ax -ab aa aa aa @@ -4337,15 +7390,26 @@ aa aa aa aa -cS -cs -cs -cs -cS aa aa aa aa +kp +kx +kM +la +li +lr +kp +aa +aa +aa +aa +bt +bt +bt +aa +aa "} (69,1,1) = {" aa @@ -4353,12 +7417,9 @@ aa aa aa aa -ad -aA -ag -ag -ag -ad +bt +bt +bt aa aa aa @@ -4384,14 +7445,22 @@ aa aa aa aa -ab -cs -cs -cs -ab +aa +kp +ky +kM +la +lj +ls +kp aa aa aa +bt +bt +bt +bt +bt aa "} (70,1,1) = {" @@ -4399,13 +7468,11 @@ aa aa aa aa -aa -ae -aB -aB -aB -aB -bb +bt +bt +bt +bt +bt aa aa aa @@ -4418,34 +7485,46 @@ aa aa aa aa -bl -aa -aa -aa -bl -aa -aa -aa -bl aa aa aa aa -ab -cs -du -cs -ab aa aa aa aa +aa +aa +aa +aa +aa +kp +kz +kN +la +lk +lt +kp +aa +aa +bt +bt +bt +lB +bt +bt +aa "} (71,1,1) = {" aa aa aa aa +bt +bt +bt +bt +bt aa aa aa @@ -4465,34 +7544,40 @@ aa aa aa aa -bl -ca -co -cF -bl -ca -co -cF -bl aa aa aa aa -ab -ce -dC -ce -ab aa aa +kq +kp +kp +lb +kp +kp +ly aa aa +bt +bt +lB +lB +lB +bt +bt "} (72,1,1) = {" aa aa aa aa +bt +bt +lB +lB +bt +bt aa aa aa @@ -4512,34 +7597,39 @@ aa aa aa aa -bl -cb -cb -cb -bl -cb -cb -cb -bl aa aa aa aa -ae -aB -aB -aB -bb -aa -aa +aa +kr +bj +kO +la +ll +bk +ba aa aa +bt +bt +lB +lB +lB +bt +bt "} (73,1,1) = {" aa aa aa aa +bt +bt +lB +lB +bt +bt aa aa aa @@ -4558,29 +7648,28 @@ aa aa aa aa -aa -bl -bw -bw -bw -bw -bw -bw -bw -bl -aa -aa -aa -aa -aa -aa +ao aa aa aa aa aa +kp +kB +kP +lc +lk +lv +kp aa aa +bt +bt +bt +lB +lB +bt +bt "} (74,1,1) = {" aa @@ -4588,33 +7677,11 @@ aa aa aa aa -aa -aa -aa -aa -aa -aa -aC -aC -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -bl -bw -bw -bG -bG -cW -bw -bw -bl +bt +bt +lB +lB +bt aa aa aa @@ -4628,6 +7695,33 @@ aa aa aa aa +aa +aa +aa +aa +aa +aa +aa +aT +aa +aa +aa +kp +kp +kp +ld +kp +kp +kp +aa +aa +aa +bt +bt +bt +bt +bt +aa "} (75,1,1) = {" aa @@ -4635,33 +7729,12 @@ aa aa aa aa -aa -aa -aa -aa -aa -aC -aC -aC -aC -aH -aH -aa -aa -aa -aa -aa -aa -aa -bl -cc -bG -bG -cN -bG -bG -cc -bl +bt +bt +lB +lB +bt +bt aa aa aa @@ -4672,9 +7745,35 @@ aa aa aa aa +fZ +gq +gP +gP +gP +bs +ab +aE aa aa aa +aa +aa +kp +kC +kQ +la +lm +lw +kp +aa +aa +aa +aa +aa +bt +bt +bt +aa "} (76,1,1) = {" aa @@ -4683,16 +7782,11 @@ aa aa aa aa -aa -aa -aa -aa -aC -aC -aC -aC -aH -aH +bt +bt +bt +bt +bt aa aa aa @@ -4700,19 +7794,29 @@ aa aa aa aa -bm -bw -bG -bG -bG -cX -bG -bw -bm +aa +aa +aa +ga +ga +gQ +gQ +gQ +iz +bs +aa +aD aa aa aa aa +ks +kD +kR +le +ln +lx +ks aa aa aa @@ -4731,35 +7835,40 @@ aa aa aa aa -aa -aa -aC -aC -aC -aC -aC -aH -aH -aH +bt +bt +bt +bt aa aa aa aa aa aa -bm -bw -bG -cG -bG -bG -bG -bw -bm aa aa aa aa +ga +av +gR +hu +hZ +ai +aT +aa +aa +aa +aa +aa +aa +ks +ks +kS +lf +lo +ks +ks aa aa aa @@ -4778,37 +7887,42 @@ aa aa aa aa -aC -aC -aC -aC -aC -aC -aC -aC -aH -aH -aH +aa +bt +bt aa aa aa aa aa -bm -bw -cp -bG -cG -cY -bG -bw -bm aa aa aa aa aa aa +gb +gs +aN +hv +ia +iA +ak +ap +aa +aa +br +aa +aa +aa +ks +ks +ks +ks +ks +aa +aa +aa aa aa aa @@ -4825,31 +7939,36 @@ aa aa aa aa -aC -aC -aC -aC -aC -aC -aC -aC -aH -aH -aH aa aa aa aa aa -bm -bx -bG -bG -bG -cZ -bG -bx -bm +aa +aa +aa +aa +aa +aa +aa +aa +aa +gb +jA +gT +hw +ib +iB +ja +bd +aa +aa +aa +aa +aa +aa +aa +aa aa aa aa @@ -4871,32 +7990,37 @@ aa aa aa aa -aa -aC -aC -aC -aC -aC -aC -aC -aC -aH -aH -aH +lB +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +gb +gt +gU +hx +ic +iC +jb +jy +aa +aa +aa aa aa aa aa aa -bl -bl -bl -cm -bl -cm -bl -bl -bl aa aa aa @@ -4917,42 +8041,47 @@ aa aa aa aa -aa -aa -aC -aC -aC -aC -aC -aC -aC -aC -aH -aH -aH -aa -aa -aa -aa -aa -bO -bw -bw -bw -cO -bM -bw -dr -bO +lB +lB +lB +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +gb +gv +gV +hy +id +iD +jc +jy +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa aa aa aa aa aa aa -aC -aC -aC aa aa aa @@ -4965,41 +8094,46 @@ aa aa aa aa -aa -aC -aC -aC -aC -aC -aC -aC -aC -aH -aH -aH +lB +lB +lB +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ga +gw +gW +hz +ie +aR +jd +ga +aa +aa +aa +kg +kk +kl +aa aa aa aa aa aa -bl -cd -cq -bv -cP -da -bv -bw -bl aa aa aa aa aa -aC -aC -aC -aC aa aa aa @@ -5012,41 +8146,46 @@ aa aa aa aa -aa -aC -aC -aC -aC -aC -aC -aC -aC -aH -aH -aH +lB +lB +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ga +ga +aW +ga +ga +ga +ga +ga +aa +aa +aa +aa +kl +kk +kE +aa aa aa aa aa aa -bp -bz -cr -cH -cQ -db -dk -bz -bp aa aa aa aa -aC -aC -aC -aC -aC aa aa aa @@ -5060,40 +8199,45 @@ aa aa aa aa -aH -aH -aC -aC -aC -aC -aC -aC -aH -aC -aH aa aa aa aa aa aa -bp -bn -cI -cR -bs -bn -bp aa aa aa aa -aC -aC -aC -aC -aC -aC +aa +aa +aa +aa +gc +gy +gY +aO +if +iF +je +gc +aa +aa +aa +aa +aa +kk +kk +kE +aa +aa +aa +aa +aa +aa +aa +aa +aa aa aa aa @@ -5107,17 +8251,6 @@ aa aa aa aa -aH -aH -aH -aC -aC -aC -aC -aH -aH -aC -aH aa aa aa @@ -5132,14 +8265,30 @@ aa aa aa aa +gd +aw +aG +hB +ig +aM +aQ +gd +aa +aa +aa +aa +kg +kk +kF +kk +aa +aa +aa +aa +aa aa aa aa -aC -aC -aC -aC -aC aa aa aa @@ -5155,16 +8304,35 @@ aa aa aa aa -aH -aH -aC -aH -aH -aH -aH -aH -aC -aC +aa +aa +aa +bt +bt +bt +bt +aa +aa +aa +aa +aa +aa +gd +gd +ha +aI +ih +iH +gd +gd +aa +aa +aa +aa +km +kt +fJ +kT aa aa aa @@ -5175,20 +8343,6 @@ aa aa aa aa -dc -aa -cT -aa -aa -aa -aa -aC -aC -aC -aC -aa -aa -aa aa aa aa @@ -5202,36 +8356,41 @@ aa aa aa aa -aH -aH -aH -aH -aC -aC -aC -aC -aC -aC +aa +aa +bt +bt +bt +bt +bt +bt +bt +bt +aa +aa +aa +aa +gd +gd +gd +gd +gd +gd aa aa aa aa aa -bP -ab -ab -ab -cS -ab -ab -ab -ab +kg +kk +kH +kk +aa +aa aa aa aa aa -aC -aC aa aa aa @@ -5249,30 +8408,35 @@ aa aa aa aa -aH -aH -aH -aC -aC -aC -aC -aC -aC -aC +aa +bt +bt +bt +bt +bt +bt +bt +bt +dD +dD aa aa aa aa aa -aB -ce -cs -cs -cs -dd -dd -ds -dv +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +kk +kk +kE aa aa aa @@ -5291,35 +8455,40 @@ aa aa aa aa +bl aa aa aa aa aa -aH -aH -aH -aC -aC -aC -aC -aC -aC -aC +bt +bt +bt +bt +bt +bt +dD +dD +dD +dD aa aa aa aa aa -aB -cf -ct -cJ -cs -de -dl -ab -ab +aa +aa +aa +aa +aa +aa +aa +aa +aa +kl +kk +kE +aa aa aa aa @@ -5343,12 +8512,17 @@ aa aa aa aa -aH -aH -aH -aC -aC -aC +aa +aa +bt +bt +bt +dD +dD +dD +dD +bt +bt aa aa aa @@ -5358,15 +8532,15 @@ aa aa aa aa -aB -ce -cu -cs -cs -df -df -ds -dv +aa +aa +aa +aa +kg +kk +kl +aa +aa aa aa aa @@ -5393,6 +8567,20 @@ aa aa aa aa +dD +dD +dD +dD +bt +bt +bt +bt +aa +aa +aa +aa +aa +aa aa aa aa @@ -5405,15 +8593,6 @@ aa aa aa aa -ae -ab -ab -ab -cS -ab -ab -ab -ab aa aa aa @@ -5441,6 +8620,13 @@ aa aa aa aa +bt +bt +bt +bt +bt +bt +bt aa aa aa @@ -5459,8 +8645,6 @@ aa aa aa aa -cT -aa aa aa aa @@ -5488,7 +8672,12 @@ aa aa aa aa -aa +bt +bt +bt +bt +bt +bt aa aa aa @@ -5535,7 +8724,12 @@ aa aa aa aa -aa +bt +bt +bt +bt +bt +bt aa aa aa @@ -5582,7 +8776,12 @@ aa aa aa aa -aa +bt +bt +bt +bt +bt +bt aa aa aa @@ -5629,6 +8828,63 @@ aa aa aa aa +bt +bt +bt +bt +bt +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(97,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +bt +bt +bt +aa aa aa aa diff --git a/_maps/RandomRuins/SpaceRuins/crashedship.dmm b/_maps/RandomRuins/SpaceRuins/crashedship.dmm index 177f1c3cbc..886335fa24 100644 --- a/_maps/RandomRuins/SpaceRuins/crashedship.dmm +++ b/_maps/RandomRuins/SpaceRuins/crashedship.dmm @@ -6,7 +6,7 @@ /obj/item/circular_saw, /obj/structure/lattice, /turf/template_noop, -/area/template_noop) +/area/space/nearstation) "ac" = ( /turf/closed/wall/mineral/titanium, /area/awaymission/BMPship/Aft) @@ -16,7 +16,7 @@ "ag" = ( /obj/machinery/porta_turret{ dir = 8; - emagged = 1; + set_obj_flags = "EMAGGED"; installation = /obj/item/gun/energy/lasercannon }, /turf/open/floor/engine, @@ -46,7 +46,7 @@ "am" = ( /obj/structure/lattice, /turf/template_noop, -/area/template_noop) +/area/space/nearstation) "an" = ( /obj/structure/window/reinforced, /obj/effect/spawner/structure/window/hollow/reinforced/middle{ @@ -243,7 +243,7 @@ /turf/open/floor/plating, /area/awaymission/BMPship/Fore) "aY" = ( -/obj/structure/sign/vacuum, +/obj/structure/sign/warning/vacuum, /turf/closed/wall/mineral/titanium, /area/awaymission/BMPship/Fore) "bb" = ( @@ -1860,7 +1860,7 @@ "gl" = ( /obj/machinery/porta_turret{ dir = 8; - emagged = 1; + set_obj_flags = "EMAGGED"; installation = /obj/item/gun/energy/lasercannon }, /turf/open/floor/engine, @@ -2200,6 +2200,13 @@ "hE" = ( /turf/closed/wall/mineral/titanium/nodiagonal, /area/awaymission/BMPship/Fore) +"vh" = ( +/turf/template_noop, +/area/space/nearstation) +"EQ" = ( +/obj/structure/lattice, +/turf/template_noop, +/area/awaymission/BMPship/Midship) (1,1,1) = {" aa @@ -3589,7 +3596,7 @@ aa aa am aa -am +EQ aq gt aq @@ -3638,8 +3645,8 @@ aa aa am aa -aa -am +vh +EQ gt at ha @@ -3689,7 +3696,7 @@ aa aa aa am -am +EQ gL hg ha diff --git a/_maps/RandomRuins/SpaceRuins/deepstorage.dmm b/_maps/RandomRuins/SpaceRuins/deepstorage.dmm index 39d6eca041..9fa52e5d2f 100644 --- a/_maps/RandomRuins/SpaceRuins/deepstorage.dmm +++ b/_maps/RandomRuins/SpaceRuins/deepstorage.dmm @@ -8,12 +8,6 @@ "ac" = ( /turf/open/floor/plating/asteroid/airless, /area/ruin/unpowered/no_grav) -"ad" = ( -/turf/closed/mineral/random/low_chance, -/area/asteroid/cave/space) -"ae" = ( -/turf/open/floor/plating/asteroid/airless, -/area/asteroid/cave/space) "af" = ( /turf/closed/wall/mineral/iron, /area/ruin/space/has_grav/deepstorage/kitchen) @@ -28,12 +22,6 @@ /obj/structure/closet/secure_closet/freezer/meat, /turf/open/floor/plasteel/freezer, /area/ruin/space/has_grav/deepstorage/kitchen) -"aj" = ( -/obj/machinery/light/small{ - dir = 8 - }, -/turf/open/floor/plating, -/area/ruin/space/has_grav/deepstorage/crusher) "ak" = ( /obj/machinery/conveyor{ dir = 4; @@ -112,17 +100,6 @@ }, /turf/open/floor/plating, /area/ruin/space/has_grav/deepstorage/crusher) -"av" = ( -/obj/structure/window/plasma/reinforced{ - dir = 8 - }, -/obj/machinery/conveyor{ - dir = 1; - id = "bunkerrecycle"; - movedir = 2 - }, -/turf/open/floor/plating, -/area/ruin/space/has_grav/deepstorage/crusher) "aw" = ( /obj/effect/baseturf_helper/asteroid/airless, /turf/closed/wall/mineral/iron, @@ -172,17 +149,6 @@ }, /turf/open/floor/plating, /area/ruin/space/has_grav/deepstorage/crusher) -"aF" = ( -/obj/machinery/conveyor{ - dir = 1; - id = "bunkerrecycle"; - movedir = 2 - }, -/obj/machinery/light/small{ - dir = 4 - }, -/turf/open/floor/plating, -/area/ruin/space/has_grav/deepstorage/crusher) "aG" = ( /obj/structure/closet/cardboard, /obj/item/stack/sheet/mineral/silver, @@ -1312,14 +1278,6 @@ }, /turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage) -"do" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/machinery/firealarm{ - dir = 4; - pixel_x = 24 - }, -/turf/open/floor/plasteel/floorgrime, -/area/ruin/space/has_grav/deepstorage) "dp" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/closed/wall/mineral/iron, @@ -2433,7 +2391,7 @@ /obj/machinery/light/small{ dir = 1 }, -/obj/structure/sign/securearea{ +/obj/structure/sign/warning/securearea{ pixel_y = 32 }, /obj/effect/turf_decal/stripes/corner{ @@ -2457,7 +2415,7 @@ /obj/machinery/camera{ network = list("Bunker1") }, -/obj/structure/sign/securearea{ +/obj/structure/sign/warning/securearea{ pixel_y = 32 }, /obj/effect/turf_decal/stripes/corner{ @@ -2485,7 +2443,7 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/visible{ dir = 4 }, -/obj/structure/sign/electricshock{ +/obj/structure/sign/warning/electricshock{ pixel_y = 32 }, /turf/open/floor/plating, @@ -2626,18 +2584,6 @@ /obj/machinery/light/small, /turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage) -"go" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ - dir = 4 - }, -/turf/open/floor/plasteel/floorgrime, -/area/ruin/space/has_grav/deepstorage) -"gp" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, -/turf/closed/wall/mineral/iron, -/area/ruin/space/has_grav/deepstorage/power) "gq" = ( /obj/structure/cable/yellow{ icon_state = "1-4" @@ -2649,20 +2595,11 @@ /obj/structure/cable/yellow{ icon_state = "0-8" }, -/obj/structure/sign/electricshock{ +/obj/structure/sign/warning/electricshock{ pixel_y = -32 }, /turf/open/floor/plating, /area/ruin/space/has_grav/deepstorage/power) -"gs" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{ - dir = 4 - }, -/obj/structure/cable{ - icon_state = "4-8" - }, -/turf/open/floor/plasteel/floorgrime, -/area/ruin/space/has_grav/deepstorage/power) "gt" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/visible, /obj/structure/cable/yellow{ @@ -2850,23 +2787,12 @@ }, /turf/open/floor/plating, /area/ruin/space/has_grav/deepstorage/power) -"gS" = ( -/obj/structure/grille, -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/structure/cable{ - icon_state = "1-8" - }, -/obj/machinery/door/firedoor, -/turf/open/floor/plating, -/area/ruin/space/has_grav/deepstorage/power) "gT" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/visible{ dir = 5 }, /obj/machinery/autolathe, -/obj/structure/sign/radiation{ +/obj/structure/sign/warning/radiation{ pixel_x = -32 }, /turf/open/floor/plasteel/floorgrime, @@ -3052,30 +2978,6 @@ /obj/effect/baseturf_helper/asteroid/airless, /turf/closed/mineral/random/low_chance, /area/ruin/unpowered/no_grav) -"hs" = ( -/turf/closed/wall/mineral/iron, -/area/ruin/space/has_grav/deepstorage/storage) -"ht" = ( -/turf/closed/wall/mineral/iron, -/area/ruin/space/has_grav/deepstorage/storage) -"hu" = ( -/turf/closed/wall/mineral/iron, -/area/ruin/space/has_grav/deepstorage/storage) -"hv" = ( -/turf/closed/wall/mineral/iron, -/area/ruin/space/has_grav/deepstorage/storage) -"hw" = ( -/turf/closed/wall/mineral/iron, -/area/ruin/space/has_grav/deepstorage/storage) -"hx" = ( -/turf/closed/wall/mineral/iron, -/area/ruin/space/has_grav/deepstorage/storage) -"hy" = ( -/turf/closed/wall/mineral/iron, -/area/ruin/space/has_grav/deepstorage/storage) -"hz" = ( -/turf/closed/wall/mineral/iron, -/area/ruin/space/has_grav/deepstorage/storage) "hA" = ( /obj/effect/baseturf_helper/asteroid/airless, /turf/closed/wall/mineral/iron, @@ -3084,57 +2986,6 @@ /obj/effect/baseturf_helper/asteroid/airless, /turf/closed/wall/mineral/iron, /area/ruin/space/has_grav/deepstorage/hydroponics) -"hC" = ( -/turf/closed/wall/mineral/iron, -/area/ruin/space/has_grav/deepstorage/storage) -"hD" = ( -/turf/closed/wall/mineral/iron, -/area/ruin/space/has_grav/deepstorage/storage) -"hE" = ( -/turf/closed/wall/mineral/iron, -/area/ruin/space/has_grav/deepstorage/storage) -"hF" = ( -/turf/closed/wall/mineral/iron, -/area/ruin/space/has_grav/deepstorage/storage) -"hG" = ( -/turf/closed/wall/mineral/iron, -/area/ruin/space/has_grav/deepstorage/storage) -"hH" = ( -/turf/closed/wall/mineral/iron, -/area/ruin/space/has_grav/deepstorage/storage) -"hI" = ( -/turf/closed/wall/mineral/iron, -/area/ruin/space/has_grav/deepstorage/storage) -"hJ" = ( -/turf/closed/wall/mineral/iron, -/area/ruin/space/has_grav/deepstorage/storage) -"hK" = ( -/turf/closed/wall/mineral/iron, -/area/ruin/space/has_grav/deepstorage/storage) -"hL" = ( -/turf/closed/wall/mineral/iron, -/area/ruin/space/has_grav/deepstorage/storage) -"hM" = ( -/turf/closed/wall/mineral/iron, -/area/ruin/space/has_grav/deepstorage/storage) -"hN" = ( -/turf/closed/wall/mineral/iron, -/area/ruin/space/has_grav/deepstorage/storage) -"hO" = ( -/turf/closed/wall/mineral/iron, -/area/ruin/space/has_grav/deepstorage/storage) -"hP" = ( -/turf/closed/wall/mineral/iron, -/area/ruin/space/has_grav/deepstorage/storage) -"hQ" = ( -/turf/closed/wall/mineral/iron, -/area/ruin/space/has_grav/deepstorage/storage) -"hR" = ( -/turf/closed/wall/mineral/iron, -/area/ruin/space/has_grav/deepstorage/storage) -"hS" = ( -/turf/closed/wall/mineral/iron, -/area/ruin/space/has_grav/deepstorage/storage) "hT" = ( /obj/effect/baseturf_helper/asteroid/airless, /turf/closed/wall/mineral/iron, @@ -3697,12 +3548,12 @@ ab ab ab ab -hE -hJ -hN -hP -hQ -hS +hU +hU +hU +hU +hU +hU hU hV dB @@ -3749,7 +3600,7 @@ ab ab ab ab -hF +hU bT bU cB @@ -3798,10 +3649,10 @@ ab ab ab aw -hz -hC -hD -hG +hU +hU +hU +hU bU bU cB @@ -3849,11 +3700,11 @@ ab ab ab ab -hs +hU aG aR bm -hH +hU bV ch cC @@ -3901,15 +3752,15 @@ ab ab ab ab -ht +hU aH aS bn -hI -hK -hO +hU +hU +hU cD -hR +hU dg dz dQ @@ -3953,7 +3804,7 @@ ab ab ab ab -hu +hU aI aT bo @@ -4005,7 +3856,7 @@ ab ab ab ab -hv +hU aJ aU bp @@ -4057,12 +3908,12 @@ ab ab ab ab -hw +hU aK aV bq bG -hL +hU cj cG bz @@ -4109,12 +3960,12 @@ ab ab ab ab -hx +hU aL aW br bH -hM +hU ck cH cT @@ -4161,7 +4012,7 @@ ab ab ab ab -hy +hU hA af af @@ -5707,55 +5558,3 @@ aa aa aa "} -(50,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} diff --git a/_maps/RandomRuins/SpaceRuins/derelict1.dmm b/_maps/RandomRuins/SpaceRuins/derelict1.dmm index d530f2134a..9c1a0d9783 100644 --- a/_maps/RandomRuins/SpaceRuins/derelict1.dmm +++ b/_maps/RandomRuins/SpaceRuins/derelict1.dmm @@ -5,7 +5,7 @@ "b" = ( /obj/structure/lattice, /turf/template_noop, -/area/template_noop) +/area/space/nearstation) "c" = ( /turf/closed/wall, /area/ruin/unpowered) @@ -105,22 +105,11 @@ a a a a -a -a -a -a -a -a -a -a b b b a a -a -a -a "} (2,1,1) = {" a @@ -146,23 +135,12 @@ a a a a -a -a -a -a -a -a -a -a b p p p c a -a -a -a "} (3,1,1) = {" a @@ -187,14 +165,6 @@ a a a a -a -a -a -a -a -a -a -a b b c @@ -202,9 +172,6 @@ q q c a -a -a -a "} (4,1,1) = {" a @@ -228,14 +195,6 @@ a a a a -a -a -a -a -a -a -a -a b b q @@ -244,9 +203,6 @@ q q c b -a -a -a "} (5,1,1) = {" a @@ -271,14 +227,6 @@ a a a a -a -a -a -a -a -a -a -a b q q @@ -286,9 +234,6 @@ q q c b -a -a -a "} (6,1,1) = {" a @@ -313,14 +258,6 @@ a a a a -a -a -a -a -a -a -a -a c q q @@ -328,9 +265,6 @@ q q p b -a -a -a "} (7,1,1) = {" a @@ -354,14 +288,6 @@ a a a a -a -a -a -a -a -a -a -a c q q @@ -370,9 +296,6 @@ c q b b -a -a -a "} (8,1,1) = {" a @@ -395,14 +318,6 @@ a a a a -a -a -a -a -a -a -a -a b b q @@ -412,9 +327,6 @@ b b b a -a -a -a "} (9,1,1) = {" a @@ -437,14 +349,6 @@ a a a a -a -a -a -a -a -a -a -a b b b @@ -454,9 +358,6 @@ b a a a -a -a -a "} (10,1,1) = {" a @@ -464,14 +365,6 @@ a a a a -a -a -a -a -a -a -a -a b b a @@ -496,23 +389,12 @@ a a a a -a -a -a "} (11,1,1) = {" a a a a -a -a -a -a -a -a -a -a b b b @@ -538,22 +420,11 @@ a a a a -a -a -a "} (12,1,1) = {" a a a -a -a -a -a -a -a -a -a b b b @@ -580,22 +451,11 @@ a a a a -a -a -a "} (13,1,1) = {" a a a -a -a -a -a -a -a -a -a b b b @@ -622,21 +482,10 @@ a a a a -a -a -a "} (14,1,1) = {" a a -a -a -a -a -a -a -a -a b b b @@ -664,21 +513,10 @@ a a a a -a -a -a "} (15,1,1) = {" a a -a -a -a -a -a -a -a -a b b b @@ -706,21 +544,10 @@ a a a a -a -a -a "} (16,1,1) = {" a a -a -a -a -a -a -a -a -a b b e @@ -748,22 +575,11 @@ a a a a -a -a -a "} (17,1,1) = {" a a a -a -a -a -a -a -a -a -a c f f @@ -790,22 +606,11 @@ a a a a -a -a -a "} (18,1,1) = {" a a a -a -a -a -a -a -a -a -a c c c @@ -832,21 +637,10 @@ a a a a -a -a -a "} (19,1,1) = {" a a -a -a -a -a -a -a -a -a b c g @@ -874,20 +668,9 @@ a a a a -a -a -a "} (20,1,1) = {" a -a -a -a -a -a -a -a -a b b c @@ -916,19 +699,8 @@ a a a a -a -a -a "} (21,1,1) = {" -a -a -a -a -a -a -a -a b b b @@ -958,19 +730,8 @@ a a a a -a -a -a "} (22,1,1) = {" -a -a -a -a -a -a -a -a b b b @@ -1000,19 +761,8 @@ a a a a -a -a -a "} (23,1,1) = {" -a -a -a -a -a -a -a -a b b b @@ -1042,21 +792,10 @@ a a a a -a -a -a "} (24,1,1) = {" a a -a -a -a -a -a -a -a -a b c j @@ -1084,21 +823,10 @@ a a a a -a -a -a "} (25,1,1) = {" a a -a -a -a -a -a -a -a -a b c c @@ -1126,23 +854,12 @@ a a a a -a -a -a "} (26,1,1) = {" a a a a -a -a -a -a -a -a -a -a b c c @@ -1168,23 +885,12 @@ a a a a -a -a -a "} (27,1,1) = {" a a a a -a -a -a -a -a -a -a -a b b c @@ -1210,23 +916,12 @@ a a a a -a -a -a "} (28,1,1) = {" a a a a -a -a -a -a -a -a -a -a b b l @@ -1252,23 +947,12 @@ a a a a -a -a -a "} (29,1,1) = {" a a a a -a -a -a -a -a -a -a -a b b b @@ -1294,23 +978,12 @@ a a a a -a -a -a "} (30,1,1) = {" a a a a -a -a -a -a -a -a -a -a b b b @@ -1336,9 +1009,6 @@ a a a a -a -a -a "} (31,1,1) = {" a @@ -1346,14 +1016,6 @@ a a a a -a -a -a -a -a -a -a -a b b b @@ -1378,385 +1040,4 @@ a a a a -a -a -a -"} -(32,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(33,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(34,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(35,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(36,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(37,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(38,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(39,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(40,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a "} diff --git a/_maps/RandomRuins/SpaceRuins/derelict2.dmm b/_maps/RandomRuins/SpaceRuins/derelict2.dmm index 98e6de9263..c57ac798ac 100644 --- a/_maps/RandomRuins/SpaceRuins/derelict2.dmm +++ b/_maps/RandomRuins/SpaceRuins/derelict2.dmm @@ -1,12 +1,12 @@ //MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE "a" = ( -/turf/open/space, -/area/space) +/turf/template_noop, +/area/template_noop) "b" = ( /obj/structure/window/reinforced{ dir = 4 }, -/turf/open/space, +/turf/template_noop, /area/space/nearstation) "c" = ( /obj/machinery/door/airlock/external, @@ -16,7 +16,7 @@ /obj/structure/window/reinforced{ dir = 8 }, -/turf/open/space, +/turf/template_noop, /area/space/nearstation) "e" = ( /obj/structure/window/reinforced{ @@ -51,7 +51,7 @@ /area/ruin/space/has_grav/powered/dinner_for_two) "k" = ( /obj/structure/window/reinforced, -/turf/open/space, +/turf/template_noop, /area/space/nearstation) "l" = ( /obj/structure/window/reinforced, @@ -91,7 +91,7 @@ /obj/structure/window/reinforced{ dir = 1 }, -/turf/open/space, +/turf/template_noop, /area/space/nearstation) "q" = ( /obj/machinery/light/small{ @@ -112,32 +112,9 @@ a a a a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a +k +c +p a a a @@ -154,32 +131,9 @@ a a a a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a +k +l +p a a a @@ -196,32 +150,9 @@ a a a a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a +k +l +p a a a @@ -238,32 +169,9 @@ a a a a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a +k +l +p a a a @@ -279,34 +187,11 @@ a a a a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a +f +g +c +g +f a a a @@ -320,521 +205,6 @@ a a a a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(7,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(8,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(9,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(10,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(11,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(12,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(13,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -k -c -p -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(14,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -k -l -p -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(15,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -k -l -p -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(16,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -k -l -p -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(17,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -f -g -c -g -f -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(18,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a f i i @@ -847,31 +217,8 @@ a a a a -a -a -a -a -a -a -a -a -a -a -a -a "} -(19,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a +(7,1,1) = {" a a a @@ -889,31 +236,8 @@ a a a a -a -a -a -a -a -a -a -a -a -a -a -a "} -(20,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a +(8,1,1) = {" b b b @@ -931,31 +255,8 @@ b b b b -a -a -a -a -a -a -a -a -a -a -a -a "} -(21,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a +(9,1,1) = {" c e e @@ -973,31 +274,8 @@ e e e c -a -a -a -a -a -a -a -a -a -a -a -a "} -(22,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a +(10,1,1) = {" d d d @@ -1015,31 +293,8 @@ d d d d -a -a -a -a -a -a -a -a -a -a -a -a "} -(23,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a +(11,1,1) = {" a a a @@ -1057,31 +312,8 @@ a a a a -a -a -a -a -a -a -a -a -a -a -a -a "} -(24,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a +(12,1,1) = {" a a a @@ -1099,31 +331,8 @@ a a a a -a -a -a -a -a -a -a -a -a -a -a -a "} -(25,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a +(13,1,1) = {" a a a @@ -1141,31 +350,8 @@ a a a a -a -a -a -a -a -a -a -a -a -a -a -a "} -(26,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a +(14,1,1) = {" a a a @@ -1183,31 +369,8 @@ a a a a -a -a -a -a -a -a -a -a -a -a -a -a "} -(27,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a +(15,1,1) = {" a a a @@ -1225,31 +388,8 @@ a a a a -a -a -a -a -a -a -a -a -a -a -a -a "} -(28,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a +(16,1,1) = {" a a a @@ -1267,31 +407,8 @@ a a a a -a -a -a -a -a -a -a -a -a -a -a -a "} -(29,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a +(17,1,1) = {" a a a @@ -1309,478 +426,4 @@ a a a a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(30,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(31,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(32,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(33,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(34,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(35,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(36,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(37,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(38,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(39,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(40,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a "} diff --git a/_maps/RandomRuins/SpaceRuins/derelict3.dmm b/_maps/RandomRuins/SpaceRuins/derelict3.dmm index 56c1e2c919..37b726dc75 100644 --- a/_maps/RandomRuins/SpaceRuins/derelict3.dmm +++ b/_maps/RandomRuins/SpaceRuins/derelict3.dmm @@ -11,12 +11,12 @@ "d" = ( /obj/structure/lattice, /turf/template_noop, -/area/template_noop) +/area/space/nearstation) "e" = ( /obj/structure/lattice, /obj/structure/lattice, /turf/template_noop, -/area/template_noop) +/area/space/nearstation) (1,1,1) = {" a @@ -42,21 +42,11 @@ a a a a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a +c +c +c +c +c a a "} @@ -83,23 +73,13 @@ a a a a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a +b +b +b +b +b +b +c a "} (3,1,1) = {" @@ -125,24 +105,14 @@ a a a a -a -a -a -a -a -a -a +b +b +b +b +b +b +b c -c -c -c -c -a -a -a -a -a -a "} (4,1,1) = {" a @@ -168,96 +138,6 @@ a a a a -a -a -a -a -a -b -b -b -b -b -b -c -a -a -a -a -a -"} -(5,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -b -b -b -b -b -b -c -a -a -a -a -"} -(6,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a d b b @@ -265,10 +145,70 @@ b b b c +"} +(5,1,1) = {" a a a a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +d +d +d +b +b +b +c +"} +(6,1,1) = {" +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +d +d +d +b +b +b +c "} (7,1,1) = {" a @@ -295,22 +235,12 @@ a a a a -a -a -a -a -a d d d b b -b c -a -a -a -a "} (8,1,1) = {" a @@ -337,21 +267,11 @@ a a a a -a -a -a -a -a d d d b b -b -c -a -a -a a "} (9,1,1) = {" @@ -378,22 +298,12 @@ a a a a -a -a -a -a -a -a -a d d +a +e d b -b -c -a -a -a a "} (10,1,1) = {" @@ -427,16 +337,6 @@ a a a a -d -d -d -b -b -a -a -a -a -a "} (11,1,1) = {" a @@ -459,21 +359,11 @@ a a a a -a -a -a -a -a -a -a -a -a d d a -e -d -b +a +a a a a @@ -498,20 +388,10 @@ a a a a -a -a -a -a -a -a -a -a -a -a -a -a -a -a +d +d +d +d a a a @@ -538,21 +418,11 @@ a a a a -a -a -a -a -a -a -a -a -a -a -a d d -a -a +d +d +d a a a @@ -578,23 +448,13 @@ a a a a -a -a -a -a -a -a -a -a -a -a +b +b +b +b d d d -d -a -a -a a a a @@ -617,25 +477,15 @@ a a a a -a -a -a -a -a -a -a -a -a -a -a d d +b +b +c +b +b +b d -d -d -a -a -a a a a @@ -658,26 +508,16 @@ a a a a -a -a -a -a -a -a -a -a -a -a +d +d b b b +c +b +b b d -d -d -a -a -a a a a @@ -699,18 +539,12 @@ a a a a -a -a -a -a -a -a -a -a d d b b +b +b c b b @@ -727,10 +561,6 @@ a a a a -a -a -a -a "} (18,1,1) = {" a @@ -739,24 +569,18 @@ a a a a -a -a -a -a -a -a -a -a -a d d b +d b +c +c +c b c b b -b d a a @@ -769,36 +593,26 @@ a a a a -a -a -a -a "} (19,1,1) = {" a a a -a -a -a -a -a -a -a -a -a -a -a d d -b -b -b +d +d +d +d +d b c b b b +b +b +b d a a @@ -811,41 +625,27 @@ a a a a -a -a -a -a "} (20,1,1) = {" a a a -a -a -a -a -a -a -a -a -a -d -d b -d -b -c -c -c -b -c b b d -a -a -a -a +d +d +d +b +b +b +b +b +b +d +d +d a a a @@ -860,23 +660,6 @@ a "} (21,1,1) = {" a -a -a -a -a -a -a -a -a -d -d -d -d -d -d -d -b -c b b b @@ -884,10 +667,17 @@ b b b d -a -a -a -a +d +d +b +b +b +b +d +d +d +d +d a a a @@ -901,18 +691,13 @@ a a "} (22,1,1) = {" -a -a -a -a -a -a -a -a -a b b b +b +c +b +b d d d @@ -920,11 +705,9 @@ d b b b -b -b -b d d +b d a a @@ -938,27 +721,12 @@ a a a a -a -a -a "} (23,1,1) = {" -a -a -a -a -a -a -a b b b -b -b -b -d -d -d +c b b b @@ -968,9 +736,11 @@ d d d d -a -a -a +d +d +d +d +d a a a @@ -985,35 +755,25 @@ a a "} (24,1,1) = {" -a -a -a -a -a -a -b -b b b c +c +c +c b b d d -d -d -b -b b d d -b d -a -a -a -a -a +d +d +d +d +d a a a @@ -1027,12 +787,6 @@ a a "} (25,1,1) = {" -a -a -a -a -a -a b b b @@ -1046,17 +800,13 @@ d d d d +b +b +b +b +b d d -d -d -d -a -a -a -a -a -a a a a @@ -1070,35 +820,25 @@ a "} (26,1,1) = {" a -a -a -a -a -a +b b b c c -c -c -b -b -d -d b d d d d +b +b +b +b +b +b +b +b d -d -d -d -a -a -a -a -a a a a @@ -1112,16 +852,9 @@ a "} (27,1,1) = {" a -a -a -a -a -a b b b -c -b b b b @@ -1129,17 +862,14 @@ d d d d -d b b b b b -d -d -a -a -a +b +b +b a a a @@ -1156,33 +886,23 @@ a a a a -a -a -a -a +b +b +b +b +d +d +d +b +b b b b c -c -b -d -d -d -d b b b b -b -b -b -b -d -a -a -a -a a a a @@ -1198,16 +918,9 @@ a a a a -a -a -a -a -b -b -b -b -b -b +d +d +d d d d @@ -1216,15 +929,12 @@ b b b b +c +c +c +c b b -b -b -a -a -a -a -a a a a @@ -1242,30 +952,20 @@ a a a a -a -a -a -a -b -b -b +d +d b d d -d -b -b b b +c +c b c b b b -b -a -a -a a a a @@ -1285,12 +985,6 @@ a a a a -a -a -a -d -d -d d d d @@ -1299,10 +993,8 @@ b b b b +b c -c -c -c b b a @@ -1317,8 +1009,6 @@ a a a a -a -a "} (32,1,1) = {" a @@ -1328,361 +1018,15 @@ a a a a -a -a -a -a d d -b +d d d b b -c -c -b -c b b -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(33,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -d -d -d -d -b -b -b -b -b -c -b -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(34,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -d -d -d -d -d -b -b -b -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(35,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(36,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(37,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(38,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(39,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(40,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a a a a diff --git a/_maps/RandomRuins/SpaceRuins/derelict4.dmm b/_maps/RandomRuins/SpaceRuins/derelict4.dmm index be888b990b..5aeb872327 100644 --- a/_maps/RandomRuins/SpaceRuins/derelict4.dmm +++ b/_maps/RandomRuins/SpaceRuins/derelict4.dmm @@ -112,12 +112,7 @@ a a a a -a -a -a -a -a -a +b a a a @@ -157,13 +152,8 @@ a a a a -a -a -a -a -a -a -a +b +b a a a @@ -177,6 +167,8 @@ a (3,1,1) = {" a a +c +c a a a @@ -196,16 +188,9 @@ a a a a -a -a -a -a -a -a -a -a -a -a +b +b +b a a a @@ -218,17 +203,10 @@ a "} (4,1,1) = {" a -a -a -a -a -a -a -a -a -a -a -a +b +c +c +c a a a @@ -247,6 +225,8 @@ b a a a +b +b a a a @@ -259,37 +239,32 @@ a a "} (5,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a b b +c +c +c +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a a a a @@ -301,7 +276,11 @@ a a "} (6,1,1) = {" -a +b +b +b +b +b a a a @@ -329,27 +308,26 @@ a a a a -b -b -b -a -a -a -a -a -a a a a "} (7,1,1) = {" -a -a -a -a -a -a b +b +b +b +b +a +a +a +a +a +a +c +c +c +c c c c @@ -367,19 +345,6 @@ a a a a -b -a -a -a -b -b -a -a -a -a -a -a -a a a a @@ -387,30 +352,25 @@ a (8,1,1) = {" a a -a -a -a b b +a +a +a +a +a +a +a c c c -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a +c +c +c +c +b +b +b a a a @@ -429,30 +389,25 @@ a (9,1,1) = {" a a +b +b +a +a a a a b -b -b -b -b -a -a -a -a -a -a c c -a -a -a -a -a -a -a -a +c +c +c +c +c +c +c +b +b a a a @@ -474,28 +429,23 @@ a a a a +a +a +a +a b b b +c +c +c +c +c +c +c +b b b -a -a -a -a -a -a -c -c -c -c -c -c -c -a -a -a -a a a a @@ -518,27 +468,22 @@ a a a a +a +b +b +b +b b b -a -a -a -a -a -a -a -c -c -c -c -c c c b b b -a -a +b +b +b +b a a a @@ -560,39 +505,34 @@ a a a a +a b b +b +b +d +d +b +b +b +b +b +b +b +b +d +a +a a a a a a b -c -c -c -c -c -c -c -c -c b b a a -a -a -a -a -a -a -a -a -a -a -a -a "} (13,1,1) = {" a @@ -603,6 +543,23 @@ a a a a +d +d +b +b +d +d +b +b +b +d +b +b +b +b +b +a +a a a a @@ -612,28 +569,6 @@ a b b b -c -c -c -c -c -c -c -b -b -b -a -a -a -a -a -a -a -a -a -a -a -a a "} (14,1,1) = {" @@ -645,19 +580,15 @@ a a a a -a -a -a -a -a +d +d +b b b b b b b -c -c b b b @@ -671,12 +602,11 @@ a a a a -a -a -a -a -a -a +b +b +b +b +b "} (15,1,1) = {" a @@ -687,137 +617,6 @@ a a a a -a -a -a -a -a -b -b -b -b -d -d -b -b -b -b -b -b -b -b -d -a -a -a -a -a -a -a -b -b -b -a -a -"} -(16,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -d -d -b -b -d -d -b -b -b -d -b -b -b -b -b -a -a -a -a -a -a -a -a -b -b -b -a -"} -(17,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -d -d -b -b -b -b -b -b -b -b -b -b -b -b -b -b -a -a -a -a -a -a -b -b -b -b -b -"} -(18,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a d d d @@ -846,12 +645,7 @@ b c c "} -(19,1,1) = {" -a -a -a -a -a +(16,1,1) = {" a a a @@ -888,12 +682,7 @@ d c c "} -(20,1,1) = {" -a -a -a -a -a +(17,1,1) = {" a a a @@ -930,12 +719,7 @@ c c a "} -(21,1,1) = {" -a -a -a -a -a +(18,1,1) = {" a a a @@ -972,12 +756,7 @@ c c a "} -(22,1,1) = {" -a -a -a -a -a +(19,1,1) = {" a a a @@ -1014,12 +793,7 @@ c c a "} -(23,1,1) = {" -a -a -a -a -a +(20,1,1) = {" a a a @@ -1056,12 +830,7 @@ a a a "} -(24,1,1) = {" -a -a -a -a -a +(21,1,1) = {" a a a @@ -1098,12 +867,7 @@ a a a "} -(25,1,1) = {" -a -a -a -a -a +(22,1,1) = {" a a a @@ -1140,12 +904,7 @@ a a a "} -(26,1,1) = {" -a -a -a -a -a +(23,1,1) = {" a a a @@ -1182,12 +941,7 @@ a a a "} -(27,1,1) = {" -a -a -a -a -a +(24,1,1) = {" a a a @@ -1224,12 +978,7 @@ a a a "} -(28,1,1) = {" -a -a -a -a -a +(25,1,1) = {" a a b @@ -1266,6 +1015,117 @@ a a a "} +(26,1,1) = {" +a +a +a +b +b +a +a +a +b +b +b +b +b +c +c +c +c +c +c +c +c +a +a +a +a +a +a +a +a +a +a +a +a +a +a +"} +(27,1,1) = {" +a +a +a +a +a +a +a +a +a +b +b +b +c +c +c +c +c +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +"} +(28,1,1) = {" +a +a +a +a +a +a +a +a +a +a +b +b +c +c +c +c +c +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +"} (29,1,1) = {" a a @@ -1275,24 +1135,19 @@ a a a a -b -b a a a -b -b -b -b -b -c -c -c -c -c -c -c -c +a +a +a +a +a +a +a +a +a +a a a a @@ -1323,14 +1178,9 @@ a a a a -b -b -b -c -c -c -c -c +a +a +a a a a @@ -1366,25 +1216,20 @@ a a a a -b -b +a +a +a +a +a +a +a +a +a +a +a c c c -c -c -a -a -a -a -a -a -a -a -a -a -a -a a a a @@ -1418,15 +1263,10 @@ a a a a -a -a -a -a -a -a -a -a -a +c +c +b +b a a a @@ -1460,15 +1300,10 @@ a a a a -a -a -a -a -a -a -a -a -a +c +c +d +b a a a @@ -1500,17 +1335,12 @@ a a a a +b a -a -a -a -a -a -a -a -c -c -c +b +d +b +b a a a @@ -1544,137 +1374,6 @@ a a a a -a -a -a -a -a -c -c -b -b -a -a -a -a -a -a -"} -(36,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -c -c -d -b -a -a -a -a -a -a -"} -(37,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -a -b -d -b -b -a -a -a -a -a -a -"} -(38,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a b b a @@ -1686,87 +1385,3 @@ a a a "} -(39,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(40,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} diff --git a/_maps/RandomRuins/SpaceRuins/derelict5.dmm b/_maps/RandomRuins/SpaceRuins/derelict5.dmm index 9a8e5000b9..93486d1056 100644 --- a/_maps/RandomRuins/SpaceRuins/derelict5.dmm +++ b/_maps/RandomRuins/SpaceRuins/derelict5.dmm @@ -105,11 +105,9 @@ a a a a -a -a -a -a -a +b +b +b a a a @@ -147,8 +145,6 @@ a a a a -a -a b b b @@ -176,7 +172,7 @@ a a a a -a +b a a a @@ -192,12 +188,10 @@ a a a b +a +a +a b -b -a -a -a -a "} (4,1,1) = {" a @@ -220,7 +214,6 @@ a a a a -b a a a @@ -235,11 +228,10 @@ a a a a -b a a a -b +a "} (5,1,1) = {" a @@ -251,6 +243,20 @@ a a a a +c +c +c +c +a +a +a +a +a +a +a +a +a +b a a a @@ -264,23 +270,7 @@ a a a a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a +b a "} (6,1,1) = {" @@ -291,10 +281,8 @@ a a a a -a -a -a -a +c +c c c c @@ -308,7 +296,6 @@ a a a a -b a a a @@ -322,7 +309,8 @@ a a a a -b +a +a a "} (7,1,1) = {" @@ -332,11 +320,11 @@ a a a a -a -a -a -c -c +b +b +b +b +b c c c @@ -350,11 +338,9 @@ a a a a -a -a -a -a -a +b +b +b a a a @@ -373,9 +359,7 @@ a a a a -a -a -a +b b b b @@ -385,9 +369,9 @@ c c c c -a -a -a +c +c +c a a a @@ -415,8 +399,9 @@ a a a a -a -a +b +b +b b b b @@ -428,8 +413,6 @@ c c c c -c -c a a a @@ -439,8 +422,7 @@ a b b b -a -a +b a a a @@ -457,8 +439,6 @@ a a a a -a -a b b b @@ -468,9 +448,9 @@ b b b b -c -c -c +b +b +b c c a @@ -498,9 +478,7 @@ a a a a -a -a -a +b b b b @@ -515,16 +493,16 @@ b b c c +c +c +a +a a a a a a a -b -b -b -b a a a @@ -540,8 +518,6 @@ a a a a -a -a b b b @@ -555,7 +531,7 @@ b b b b -c +b c c c @@ -582,8 +558,6 @@ a a a a -a -a b b b @@ -601,8 +575,8 @@ b c c c -a -a +c +c a a a @@ -624,24 +598,22 @@ a a a a -a -a b b b b b +d +d +f +f +e +f +e +e +e +d b -b -b -b -b -b -b -b -b -c -c c c c @@ -666,50 +638,6 @@ a a a a -a -a -b -b -b -b -b -d -d -f -f -e -f -e -e -e -d -b -c -c -c -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(16,1,1) = {" -a -a -a -a -a -a b b b @@ -745,9 +673,7 @@ a a a "} -(17,1,1) = {" -a -a +(16,1,1) = {" a a a @@ -787,9 +713,7 @@ a a a "} -(18,1,1) = {" -a -a +(17,1,1) = {" a a a @@ -829,9 +753,7 @@ a a a "} -(19,1,1) = {" -a -a +(18,1,1) = {" a a a @@ -871,9 +793,7 @@ a a a "} -(20,1,1) = {" -a -a +(19,1,1) = {" a a a @@ -913,9 +833,7 @@ a a a "} -(21,1,1) = {" -a -a +(20,1,1) = {" a a a @@ -955,9 +873,7 @@ b b a "} -(22,1,1) = {" -a -a +(21,1,1) = {" a a a @@ -997,9 +913,7 @@ b b a "} -(23,1,1) = {" -a -a +(22,1,1) = {" a a a @@ -1039,9 +953,7 @@ b b b "} -(24,1,1) = {" -a -a +(23,1,1) = {" a a a @@ -1081,9 +993,7 @@ b b b "} -(25,1,1) = {" -a -a +(24,1,1) = {" a a a @@ -1123,9 +1033,7 @@ b b b "} -(26,1,1) = {" -a -a +(25,1,1) = {" a b a @@ -1165,9 +1073,7 @@ b b b "} -(27,1,1) = {" -a -a +(26,1,1) = {" a a a @@ -1207,6 +1113,46 @@ c b b "} +(27,1,1) = {" +a +a +a +a +a +a +a +a +a +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +c +c +c +c +c +c +c +c +c +c +b +b +"} (28,1,1) = {" a a @@ -1217,8 +1163,6 @@ a a a a -a -a b b b @@ -1259,9 +1203,6 @@ a a a a -a -a -b b b b @@ -1288,11 +1229,14 @@ c c c c +c b b "} (30,1,1) = {" a +b +b a a a @@ -1300,10 +1244,6 @@ a a a a -a -a -a -b b b b @@ -1328,15 +1268,13 @@ c c c c -c -c +b +b b b "} (31,1,1) = {" -a -a -a +b b b a @@ -1361,6 +1299,7 @@ b b b b +b c c c @@ -1369,15 +1308,13 @@ c c c c -c -b b b b +a "} (32,1,1) = {" -a -a +b b b b @@ -1388,8 +1325,7 @@ a a a a -b -b +a b b b @@ -1410,8 +1346,8 @@ c c c c -c -c +b +b b b b @@ -1419,8 +1355,6 @@ a "} (33,1,1) = {" a -a -b b b b @@ -1446,10 +1380,10 @@ b b b b -c -c -c -c +b +b +b +b c c b @@ -1460,11 +1394,6 @@ b a "} (34,1,1) = {" -a -a -a -b -b b a a @@ -1472,6 +1401,11 @@ a a a a +b +a +a +a +a a a b @@ -1492,18 +1426,14 @@ b b b b -c -c -b b b b b a +a "} (35,1,1) = {" -a -a b a a @@ -1511,7 +1441,7 @@ a a a a -b +a a a a @@ -1546,6 +1476,8 @@ a (36,1,1) = {" a a +a +a b a a @@ -1560,11 +1492,7 @@ a a a a -b -b -b -b -b +a b b b @@ -1592,50 +1520,6 @@ a a a a -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -a -a -"} -(38,1,1) = {" -a -a -a -a -a -a -a -a a a a @@ -1669,87 +1553,3 @@ a a a "} -(39,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(40,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} diff --git a/_maps/RandomRuins/SpaceRuins/derelict6.dmm b/_maps/RandomRuins/SpaceRuins/derelict6.dmm index c1ba9f561c..c3497f45e8 100644 --- a/_maps/RandomRuins/SpaceRuins/derelict6.dmm +++ b/_maps/RandomRuins/SpaceRuins/derelict6.dmm @@ -4,14 +4,16 @@ /area/template_noop) "ab" = ( /obj/structure/lattice, -/turf/template_noop, -/area/template_noop) -"ac" = ( -/turf/open/floor/plating/airless{ - icon_plating = "platingdmg3"; - icon_state = "platingdmg3" +/obj/structure/fluff/broken_flooring{ + icon_state = "singular"; + dir = 1 }, -/area/ruin/unpowered) +/turf/template_noop, +/area/space/nearstation) +"ac" = ( +/obj/structure/lattice, +/turf/template_noop, +/area/space/nearstation) "ad" = ( /obj/structure/girder, /turf/open/floor/plating/airless{ @@ -23,14 +25,14 @@ /obj/item/stack/sheet/metal, /obj/structure/lattice, /turf/template_noop, -/area/template_noop) +/area/space/nearstation) "af" = ( -/obj/item/stack/sheet/metal, -/turf/open/floor/plating/airless{ - icon_plating = "platingdmg2"; - icon_state = "platingdmg2" +/obj/structure/fluff/broken_flooring{ + icon_state = "pile"; + dir = 8 }, -/area/ruin/unpowered) +/turf/template_noop, +/area/template_noop) "ag" = ( /turf/open/floor/plasteel/airless, /area/ruin/unpowered) @@ -58,11 +60,13 @@ }, /area/ruin/unpowered) "al" = ( -/turf/open/floor/plating/airless{ - icon_plating = "platingdmg2"; - icon_state = "platingdmg2" +/obj/structure/fluff/broken_flooring{ + icon_state = "singular"; + dir = 4 }, -/area/ruin/unpowered) +/obj/structure/lattice, +/turf/template_noop, +/area/space/nearstation) "am" = ( /obj/item/stack/rods, /turf/open/floor/plating/airless, @@ -167,6 +171,10 @@ /turf/open/floor/plasteel/airless, /area/ruin/unpowered) "aD" = ( +/turf/open/floor/plasteel/bar{ + initial_gas_mix = "TEMP=2.7" + }, +/obj/item/stack/sheet/metal, /turf/open/floor/plating/airless{ icon_plating = "platingdmg2"; icon_state = "platingdmg2" @@ -276,22 +284,15 @@ /turf/open/floor/plasteel/airless/bar, /area/ruin/unpowered) "aY" = ( -/turf/open/floor/plasteel/bar{ - initial_gas_mix = "TEMP=2.7" - }, +/obj/structure/lattice, /obj/item/stack/sheet/metal, -/turf/open/floor/plating/airless{ - icon_plating = "platingdmg2"; - icon_state = "platingdmg2" - }, -/area/ruin/unpowered) -"aZ" = ( -/obj/structure/fluff/broken_flooring{ - icon_state = "pile"; - dir = 8 - }, /turf/template_noop, -/area/template_noop) +/area/space/nearstation) +"aZ" = ( +/obj/structure/lattice, +/obj/item/shard, +/turf/template_noop, +/area/space/nearstation) "ba" = ( /mob/living/simple_animal/hostile/retaliate/ghost, /turf/open/floor/plasteel/airless/cafeteria, @@ -315,11 +316,6 @@ icon_state = "platingdmg2" }, /area/ruin/unpowered) -"bf" = ( -/obj/structure/lattice, -/obj/item/stack/sheet/metal, -/turf/template_noop, -/area/template_noop) "bg" = ( /obj/item/stack/sheet/metal, /turf/open/floor/plating/airless{ @@ -370,11 +366,6 @@ icon_state = "platingdmg3" }, /area/ruin/unpowered) -"bn" = ( -/obj/structure/lattice, -/obj/item/shard, -/turf/template_noop, -/area/template_noop) "bo" = ( /obj/item/stack/rods, /turf/template_noop, @@ -402,14 +393,6 @@ icon_state = "platingdmg1" }, /area/ruin/unpowered) -"bs" = ( -/obj/structure/lattice, -/obj/structure/fluff/broken_flooring{ - icon_state = "singular"; - dir = 1 - }, -/turf/template_noop, -/area/template_noop) "bt" = ( /obj/structure/fluff/broken_flooring{ icon_state = "side"; @@ -468,14 +451,6 @@ }, /turf/template_noop, /area/template_noop) -"bB" = ( -/obj/structure/fluff/broken_flooring{ - icon_state = "singular"; - dir = 4 - }, -/obj/structure/lattice, -/turf/template_noop, -/area/template_noop) "bC" = ( /obj/structure/lattice, /obj/structure/fluff/broken_flooring{ @@ -540,11 +515,7 @@ aa aa aa aa -aa -aa -ab -aa -aa +ac aa aa aa @@ -565,12 +536,10 @@ aa aa aa aa -aa -aa bA aa -ab -ab +ac +ac aa aa aa @@ -583,34 +552,28 @@ aa aa aa aa -aZ -aa "} (3,1,1) = {" aa aa aa aa +ac aa -aa -ab -aa -ab +ac bC bE aa aa aa -ab -ab -aa -ab -ab -aa -aa +ac +ac aa +ac +ac aa aa +af aa "} (4,1,1) = {" @@ -618,24 +581,20 @@ aa aa aa aa -aa -aa -ab ac +ap aw ag ag -aD +be bH aa -ab -ab -aa -ab -ab -ab -aa +ac +ac aa +ac +ac +ac aa aa aa @@ -645,37 +604,31 @@ aa aa aa aa -aa -aa bw ad ag ag ag ah -al -al -al -al -al -al -al -al +be +be +be +be +be +be +be +be bH aa aa -aa -aa "} (6,1,1) = {" aa aa aa -aa -aa -ab -ac ac +ap +ap at bD ag @@ -688,20 +641,16 @@ bg bl ah ay -al -ab -aa -aa +be +ac aa "} (7,1,1) = {" aa -aa -aa -ab -ab -ab -al +ac +ac +ac +be ai aw ag @@ -714,20 +663,16 @@ ap ap ah ah -al -al -aa -aa +be +be aa aa "} (8,1,1) = {" aa -aa -aa -ab -ab ac +ac +ap am ai ag @@ -743,18 +688,14 @@ aq bp ah as -ab -aa -aa +ac aa "} (9,1,1) = {" aa -aa -aa -ab -ab ac +ac +ap ah ai av @@ -769,19 +710,15 @@ bh ap ap br -ab -ab -aa -aa +ac +ac aa "} (10,1,1) = {" aa aa aa -aa -aa -ac +ap ah aq ag @@ -796,19 +733,15 @@ bi ap bq bl -ab -ab -aa -aa +ac +ac aa "} (11,1,1) = {" aa aa -aa -aa bw -af +as ai ai ag @@ -823,17 +756,13 @@ bj au ap aq +ac +ac ab -ab -bs -aa -aa "} (12,1,1) = {" -aa -aa -bs ab +ac ag ag an @@ -850,16 +779,12 @@ aR aR aR ai -ab -ab -ab -aa -aa +ac +ac +ac "} (13,1,1) = {" -aa -aa -ab +ac bt ag by @@ -877,16 +802,12 @@ aR aS ai ai -ab -ab -ab -aa -aa +ac +ac +ac "} (14,1,1) = {" aa -aa -aa bu ag ag @@ -904,17 +825,13 @@ aM aX aM ai -ab -ab -ab -aa -aa +ac +ac +ac "} (15,1,1) = {" aa aa -aa -aa ad ai ai @@ -931,19 +848,15 @@ aT au be ai -ab -aa -aa +ac aa aa "} (16,1,1) = {" aa -aa -aa -ab ac ap +ap ao ai ag @@ -952,23 +865,19 @@ ag aG aO bI -ab +ac be ap -ab +ac au aq aa aa aa -aa -aa "} (17,1,1) = {" aa -aa -aa -ab +ac bx ak ap @@ -984,20 +893,16 @@ ap bk bm az -ab +ac bo aa aa -aa -aa "} (18,1,1) = {" aa aa -aa -aa ae -ac +ap ap aq ag @@ -1008,11 +913,9 @@ aM ap ap ap -ab ac -ab -aa -aa +ap +ac aa aa aa @@ -1022,10 +925,8 @@ aa aa aa aa -aa -aa bz -ac +ap ai ag ag @@ -1033,12 +934,10 @@ ag ai aP ap -ab -be ac -bn -aa -aa +be +ap +aZ aa aa aa @@ -1049,10 +948,8 @@ aa aa aa aa -aa -aa -ab ac +ap ai ag ag @@ -1060,26 +957,22 @@ ag ai ap aV -aY +aD +ap +ac ac -ab -ab aa aa aa aA aa -aa -aa "} (21,1,1) = {" aa aa aa aa -aa -aa -af +as ar ag ag @@ -1087,12 +980,10 @@ ag ai au ap +ap +aY +ac ac -bf -ab -ab -aa -aa aa aa aa @@ -1104,10 +995,8 @@ aa aa aa aa -aa -aa -ab ac +ap aw at ag @@ -1115,7 +1004,7 @@ ai ai ai aq -ab +ac aa bo aa @@ -1123,26 +1012,20 @@ aa aa aa aa -aa -aa "} (23,1,1) = {" aa -aa -aa bv aa aa aa aa -bB -ab +al +ac bF ai -ab -ab -aa -aa +ac +ac aa aa aa @@ -1161,12 +1044,8 @@ aa aa aa aa -aa -aa -ab -ab -aa -aa +ac +ac aa aa aa @@ -1189,8 +1068,6 @@ aa aa aa aa -aa -aa bG aa aa @@ -1204,6 +1081,4 @@ aa aa aa aa -aa -aa "} diff --git a/_maps/RandomRuins/SpaceRuins/emptyshell.dmm b/_maps/RandomRuins/SpaceRuins/emptyshell.dmm index 583151d8ef..7cbaa3a0b6 100644 --- a/_maps/RandomRuins/SpaceRuins/emptyshell.dmm +++ b/_maps/RandomRuins/SpaceRuins/emptyshell.dmm @@ -53,6 +53,10 @@ }, /turf/open/floor/plating, /area/ruin/unpowered) +"Q" = ( +/obj/structure/lattice, +/turf/template_noop, +/area/space/nearstation) (1,1,1) = {" a @@ -61,7 +65,7 @@ a a a a -b +Q a a a @@ -76,12 +80,12 @@ a a a a -b -b -b +Q +Q +Q a a -b +Q a a a @@ -92,23 +96,23 @@ a a a a -b +Q a a -b +Q i i -b +Q a a a -b +Q a "} (4,1,1) = {" a -b -b +Q +Q c c c @@ -124,7 +128,7 @@ a "} (5,1,1) = {" a -b +Q c c c @@ -137,7 +141,7 @@ c c c c -b +Q "} (6,1,1) = {" a @@ -154,7 +158,7 @@ l c c c -b +Q "} (7,1,1) = {" a @@ -192,7 +196,7 @@ a "} (9,1,1) = {" a -b +Q c c d @@ -226,7 +230,7 @@ a "} (11,1,1) = {" a -b +Q c c f @@ -277,7 +281,7 @@ a "} (14,1,1) = {" a -b +Q c c c @@ -312,17 +316,17 @@ a (16,1,1) = {" a a -b +Q a -b -b -b +Q +Q +Q a -b -b -b +Q +Q +Q a -b +Q a a "} @@ -332,12 +336,12 @@ a a a a -b -b +Q +Q a -b -b -b +Q +Q +Q a a a diff --git a/_maps/RandomRuins/SpaceRuins/gasthelizards.dmm b/_maps/RandomRuins/SpaceRuins/gasthelizards.dmm index 3ca9545b00..cbdff3750b 100644 --- a/_maps/RandomRuins/SpaceRuins/gasthelizards.dmm +++ b/_maps/RandomRuins/SpaceRuins/gasthelizards.dmm @@ -5,7 +5,7 @@ "b" = ( /obj/structure/lattice, /turf/template_noop, -/area/template_noop) +/area/space/nearstation) "c" = ( /turf/closed/wall, /area/ruin/space/has_grav/gasthelizard) diff --git a/_maps/RandomRuins/SpaceRuins/gondolaasteroid.dmm b/_maps/RandomRuins/SpaceRuins/gondolaasteroid.dmm index b45f9a7794..de08efa647 100644 --- a/_maps/RandomRuins/SpaceRuins/gondolaasteroid.dmm +++ b/_maps/RandomRuins/SpaceRuins/gondolaasteroid.dmm @@ -23,9 +23,6 @@ /obj/structure/flora/ausbushes/ywflowers, /turf/open/floor/plating/asteroid/airless, /area/ruin/space/has_grav) -"g" = ( -/turf/open/floor/plating/asteroid/airless, -/area/ruin/space/has_grav) "h" = ( /mob/living/simple_animal/pet/gondola, /turf/open/floor/plating/asteroid/airless, @@ -761,7 +758,7 @@ b b b b -g +c c c c diff --git a/_maps/RandomRuins/SpaceRuins/intactemptyship.dmm b/_maps/RandomRuins/SpaceRuins/intactemptyship.dmm index 636eb1f614..c2996c55e6 100644 --- a/_maps/RandomRuins/SpaceRuins/intactemptyship.dmm +++ b/_maps/RandomRuins/SpaceRuins/intactemptyship.dmm @@ -80,10 +80,6 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/ruin/space/has_grav/powered/authorship) -"q" = ( -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/ruin/space/has_grav/powered/authorship) "r" = ( /obj/structure/table/wood, /obj/item/paper_bin, @@ -259,9 +255,9 @@ d c c c -q +p u -q +p c c c diff --git a/_maps/RandomRuins/SpaceRuins/listeningstation.dmm b/_maps/RandomRuins/SpaceRuins/listeningstation.dmm index b022d6b6e8..2fbe9de8d4 100644 --- a/_maps/RandomRuins/SpaceRuins/listeningstation.dmm +++ b/_maps/RandomRuins/SpaceRuins/listeningstation.dmm @@ -3,7 +3,7 @@ /turf/template_noop, /area/template_noop) "ab" = ( -/turf/closed/mineral, +/turf/closed/mineral/random, /area/ruin/unpowered/no_grav) "ac" = ( /turf/closed/wall, @@ -23,14 +23,12 @@ /area/ruin/space/has_grav/listeningstation) "ae" = ( /obj/structure/table/reinforced, -/obj/item/paper_bin, /obj/machinery/firealarm{ dir = 2; pixel_y = 24 }, /obj/effect/decal/cleanable/dirt, -/obj/item/paper/fluff/ruins/listeningstation/reports/november, -/obj/item/pen, +/obj/machinery/computer/libraryconsole/bookmanagement, /turf/open/floor/plasteel/dark, /area/ruin/space/has_grav/listeningstation) "af" = ( @@ -53,6 +51,14 @@ dir = 4 }, /obj/effect/decal/cleanable/dirt, +/obj/machinery/newscaster{ + pixel_y = 32 + }, +/obj/item/device/radio/intercom{ + freerange = 1; + name = "Syndicate Radio Intercom"; + pixel_x = -30 + }, /turf/open/floor/plasteel/dark, /area/ruin/space/has_grav/listeningstation) "ai" = ( @@ -106,7 +112,7 @@ /area/ruin/space/has_grav/listeningstation) "ao" = ( /obj/machinery/light/small, -/obj/structure/sign/vacuum{ +/obj/structure/sign/warning/vacuum{ pixel_y = 32 }, /obj/effect/decal/cleanable/dirt, @@ -145,11 +151,11 @@ /turf/open/floor/plasteel/showroomfloor, /area/ruin/space/has_grav/listeningstation) "as" = ( +/obj/effect/decal/cleanable/dirt, /obj/machinery/computer/med_data/syndie{ dir = 4; req_one_access = null }, -/obj/effect/decal/cleanable/dirt, /turf/open/floor/plasteel/dark, /area/ruin/space/has_grav/listeningstation) "at" = ( @@ -183,6 +189,10 @@ /obj/structure/extinguisher_cabinet{ pixel_x = 25 }, +/obj/structure/table, +/obj/item/paper_bin, +/obj/item/paper/fluff/ruins/listeningstation/reports/november, +/obj/item/pen, /turf/open/floor/plasteel/dark, /area/ruin/space/has_grav/listeningstation) "aw" = ( @@ -367,10 +377,6 @@ /area/ruin/space/has_grav/listeningstation) "aK" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/hatch{ - name = "Telecommunications"; - req_access_txt = "150" - }, /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ @@ -378,6 +384,10 @@ pixel_x = 5; pixel_y = 5 }, +/obj/machinery/door/airlock/hatch{ + name = "Telecommunications"; + req_access_txt = "150" + }, /turf/open/floor/plasteel/vault{ dir = 5 }, @@ -391,16 +401,16 @@ /area/ruin/space/has_grav/listeningstation) "aM" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/hatch{ - name = "E.V.A. Equipment"; - req_access_txt = "150" - }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ piping_layer = 3; pixel_x = 5; pixel_y = 5 }, +/obj/machinery/door/airlock/hatch{ + name = "E.V.A. Equipment"; + req_access_txt = "150" + }, /turf/open/floor/plasteel/vault{ dir = 5 }, @@ -411,7 +421,7 @@ dir = 8; pixel_x = -26 }, -/obj/structure/showcase/machinery/microwave, +/obj/machinery/microwave, /turf/open/floor/plasteel/vault{ dir = 5 }, @@ -459,9 +469,6 @@ /area/ruin/space/has_grav/listeningstation) "aR" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock{ - name = "Personal Quarters" - }, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -471,6 +478,9 @@ pixel_x = 5; pixel_y = 5 }, +/obj/machinery/door/airlock{ + name = "Personal Quarters" + }, /turf/open/floor/plasteel, /area/ruin/space/has_grav/listeningstation) "aS" = ( @@ -724,7 +734,7 @@ /obj/machinery/syndicatebomb/self_destruct{ anchored = 1 }, -/obj/structure/sign/securearea{ +/obj/structure/sign/warning/securearea{ desc = "A warning sign which reads 'DANGER: SELF DESTRUCT DEVICE'."; name = "DANGER: SELF DESTRUCT DEVICE"; pixel_x = 32 @@ -741,14 +751,11 @@ /turf/open/floor/plating, /area/ruin/space/has_grav/listeningstation) "bn" = ( -/obj/structure/sign/bluecross_2, +/obj/structure/sign/departments/medbay/alt, /turf/closed/wall, /area/ruin/space/has_grav/listeningstation) "bo" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/medical/glass{ - name = "Medbay" - }, /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ @@ -756,6 +763,9 @@ pixel_x = 5; pixel_y = 5 }, +/obj/machinery/door/airlock/medical/glass{ + name = "Medbay" + }, /turf/open/floor/plasteel/white, /area/ruin/space/has_grav/listeningstation) "bp" = ( @@ -834,11 +844,12 @@ }, /area/ruin/space/has_grav/listeningstation) "bu" = ( -/obj/machinery/sleeper/syndie{ - dir = 8 +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/obj/structure/closet/secure_closet/medical1{ + req_access = null; + req_access_txt = "150" }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, /turf/open/floor/plasteel/white, /area/ruin/space/has_grav/listeningstation) "bv" = ( @@ -988,6 +999,25 @@ dir = 5 }, /area/ruin/space/has_grav/listeningstation) +"bJ" = ( +/obj/docking_port/stationary{ + dir = 4; + dwidth = 6; + height = 7; + id = "caravansyndicate3_listeningpost"; + name = "Syndicate Listening Post"; + width = 15 + }, +/obj/docking_port/stationary{ + dir = 4; + dwidth = 4; + height = 5; + id = "caravansyndicate1_listeningpost"; + name = "Syndicate Listening Post"; + width = 9 + }, +/turf/template_noop, +/area/template_noop) (1,1,1) = {" aa @@ -2239,7 +2269,7 @@ aa aa aa aa -aa +bJ aa aa aa diff --git a/_maps/RandomRuins/SpaceRuins/mechtransport.dmm b/_maps/RandomRuins/SpaceRuins/mechtransport.dmm index 0f97ccfa4d..6e35de07be 100644 --- a/_maps/RandomRuins/SpaceRuins/mechtransport.dmm +++ b/_maps/RandomRuins/SpaceRuins/mechtransport.dmm @@ -12,9 +12,6 @@ "d" = ( /turf/closed/wall/mineral/titanium, /area/ruin/space/has_grav/powered/mechtransport) -"e" = ( -/turf/closed/wall/mineral/titanium, -/area/ruin/space/has_grav/powered/mechtransport) "f" = ( /obj/structure/closet/crate/secure/loot, /obj/effect/decal/cleanable/cobweb, @@ -61,9 +58,6 @@ }, /turf/open/floor/mineral/titanium/blue, /area/ruin/space/has_grav/powered/mechtransport) -"o" = ( -/turf/closed/wall/mineral/titanium, -/area/ruin/space/has_grav/powered/mechtransport) "p" = ( /obj/machinery/door/airlock/hatch{ name = "Cockpit"; @@ -71,9 +65,6 @@ }, /turf/open/floor/mineral/titanium, /area/ruin/space/has_grav/powered/mechtransport) -"q" = ( -/turf/closed/wall/mineral/titanium, -/area/ruin/space/has_grav/powered/mechtransport) "r" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/cobweb, @@ -146,7 +137,7 @@ "I" = ( /obj/structure/lattice, /turf/template_noop, -/area/template_noop) +/area/ruin/space/has_grav/powered/mechtransport) "J" = ( /obj/machinery/computer/mecha{ dir = 8 @@ -179,7 +170,7 @@ "P" = ( /obj/item/stack/sheet/metal, /turf/template_noop, -/area/template_noop) +/area/ruin/space/has_grav/powered/mechtransport) "Q" = ( /obj/structure/mecha_wreckage/gygax, /turf/open/floor/mineral/titanium/airless, @@ -188,23 +179,17 @@ /turf/open/floor/plating/airless{ icon_state = "platingdmg3" }, -/area/template_noop) +/area/ruin/space/has_grav/powered/mechtransport) "S" = ( /obj/item/stack/rods, /turf/open/floor/plating/airless, /area/ruin/space/has_grav/powered/mechtransport) "T" = ( -/turf/closed/wall/mineral/titanium, -/area/ruin/space/has_grav/powered/mechtransport) -"U" = ( -/turf/closed/wall/mineral/titanium, +/turf/template_noop, /area/ruin/space/has_grav/powered/mechtransport) "V" = ( /obj/item/stack/rods, /turf/template_noop, -/area/template_noop) -"W" = ( -/turf/closed/wall/mineral/titanium, /area/ruin/space/has_grav/powered/mechtransport) "X" = ( /obj/structure/shuttle/engine/propulsion, @@ -216,23 +201,23 @@ a a a b -e -e -e -e +d +d +d +d G I M P -a -a -a +T +T +T "} (2,1,1) = {" b -e -e -e +d +d +d r v B @@ -243,7 +228,7 @@ H I R V -a +T "} (3,1,1) = {" c @@ -259,14 +244,14 @@ H N I I -a -a +T +T "} (4,1,1) = {" c g l -e +d t w C @@ -276,14 +261,14 @@ w G H P -a -a +T +T "} (5,1,1) = {" c h m -e +d s x w @@ -294,13 +279,13 @@ O s S I -a +T "} (6,1,1) = {" c i n -e +d t y z @@ -310,14 +295,14 @@ L O H H -a -a +T +T "} (7,1,1) = {" c j J -e +d t z w @@ -326,15 +311,15 @@ y w w Q -e +d b X "} (8,1,1) = {" b -e -e -e +d +d +d u A y @@ -343,8 +328,8 @@ w B y s -e -e +d +d X "} (9,1,1) = {" @@ -352,14 +337,14 @@ a a a b -e -e +d +d D D D D D -e +d b b X diff --git a/_maps/RandomRuins/SpaceRuins/oldAIsat.dmm b/_maps/RandomRuins/SpaceRuins/oldAIsat.dmm index 7397d26b68..eff006f061 100644 --- a/_maps/RandomRuins/SpaceRuins/oldAIsat.dmm +++ b/_maps/RandomRuins/SpaceRuins/oldAIsat.dmm @@ -5,7 +5,7 @@ "ab" = ( /obj/structure/lattice, /turf/template_noop, -/area/template_noop) +/area/space/nearstation) "ac" = ( /turf/open/floor/plating/airless, /area/tcommsat/chamber) @@ -13,16 +13,16 @@ /obj/structure/lattice, /obj/structure/grille/broken, /turf/template_noop, -/area/template_noop) +/area/space/nearstation) "ae" = ( /obj/structure/lattice, /obj/structure/grille, /turf/template_noop, -/area/template_noop) +/area/space/nearstation) "af" = ( /obj/structure/grille, /turf/open/floor/plating/airless, -/area/template_noop) +/area/space/nearstation) "ag" = ( /turf/closed/wall/r_wall, /area/tcommsat/chamber) @@ -101,7 +101,7 @@ dir = 4 }, /turf/template_noop, -/area/template_noop) +/area/space/nearstation) "au" = ( /obj/structure/cable{ icon_state = "1-2" @@ -125,7 +125,7 @@ dir = 8 }, /turf/template_noop, -/area/template_noop) +/area/space/nearstation) "ay" = ( /obj/effect/spawner/lootdrop/crate_spawner, /turf/open/floor/plasteel/airless, @@ -256,7 +256,7 @@ /turf/template_noop, /area/template_noop) "aU" = ( -/obj/structure/sign/securearea, +/obj/structure/sign/warning/securearea, /turf/closed/wall/r_wall, /area/tcommsat/chamber) "aV" = ( @@ -402,7 +402,7 @@ }, /obj/structure/lattice, /turf/template_noop, -/area/template_noop) +/area/space/nearstation) "bs" = ( /obj/structure/window/reinforced{ dir = 1 @@ -435,7 +435,7 @@ }, /obj/structure/lattice, /turf/template_noop, -/area/template_noop) +/area/space/nearstation) "bz" = ( /obj/structure/window/reinforced{ dir = 8 @@ -482,7 +482,7 @@ }, /obj/structure/lattice, /turf/template_noop, -/area/template_noop) +/area/space/nearstation) "bG" = ( /obj/structure/window/reinforced{ dir = 4 @@ -669,7 +669,7 @@ /obj/structure/window/reinforced, /obj/structure/lattice, /turf/template_noop, -/area/template_noop) +/area/space/nearstation) "cl" = ( /obj/effect/turf_decal/stripes/line{ dir = 9 @@ -765,11 +765,7 @@ icon_state = "medium" }, /turf/template_noop, -/area/template_noop) -"cA" = ( -/obj/effect/spawner/structure/window/hollow/reinforced/middle, -/turf/open/floor/plating/airless, -/area/tcommsat/chamber) +/area/space/nearstation) "cB" = ( /obj/effect/spawner/structure/window/hollow/reinforced, /turf/open/floor/plating, @@ -822,7 +818,7 @@ /turf/open/floor/plasteel, /area/tcommsat/chamber) "cL" = ( -/obj/structure/sign/vacuum, +/obj/structure/sign/warning/vacuum, /turf/closed/wall/r_wall, /area/tcommsat/chamber) "cM" = ( diff --git a/_maps/RandomRuins/SpaceRuins/oldstation.dmm b/_maps/RandomRuins/SpaceRuins/oldstation.dmm index edc4867e34..830895550f 100644 --- a/_maps/RandomRuins/SpaceRuins/oldstation.dmm +++ b/_maps/RandomRuins/SpaceRuins/oldstation.dmm @@ -94,13 +94,6 @@ "ar" = ( /turf/open/floor/plating/airless, /area/ruin/space/has_grav/ancientstation/hivebot) -"as" = ( -/obj/effect/decal/cleanable/dirt, -/obj/item/banner, -/turf/open/floor/plasteel/blue/side{ - dir = 9 - }, -/area/ruin/space/has_grav/ancientstation/comm) "at" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor/plasteel/blue/corner{ @@ -139,13 +132,6 @@ dir = 4 }, /area/ruin/space/has_grav/ancientstation/comm) -"ay" = ( -/obj/effect/decal/cleanable/dirt, -/obj/item/banner, -/turf/open/floor/plasteel/blue/side{ - dir = 5 - }, -/area/ruin/space/has_grav/ancientstation/comm) "az" = ( /turf/closed/mineral/iron, /area/ruin/unpowered) @@ -360,11 +346,11 @@ /area/ruin/space/has_grav/ancientstation/hivebot) "bf" = ( /turf/open/floor/plating/airless, -/area/template_noop) +/area/space/nearstation) "bg" = ( /obj/structure/girder, /turf/open/floor/plating/airless, -/area/template_noop) +/area/space/nearstation) "bh" = ( /turf/closed/mineral/diamond, /area/ruin/unpowered) @@ -435,7 +421,7 @@ /area/ruin/space/has_grav/ancientstation/betanorth) "br" = ( /turf/closed/wall/rust, -/area/template_noop) +/area/space/nearstation) "bs" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/table, @@ -550,7 +536,7 @@ /turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/ancientstation) "bO" = ( -/obj/structure/sign/bluecross_2, +/obj/structure/sign/departments/medbay/alt, /turf/closed/wall/rust, /area/ruin/space/has_grav/ancientstation) "bP" = ( @@ -593,9 +579,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/ancientstation) -"bV" = ( -/turf/open/floor/plasteel/airless/floorgrime, -/area/ruin/space/has_grav/ancientstation) "bW" = ( /obj/item/twohanded/required/kirbyplants{ icon_state = "plant-25" @@ -604,7 +587,7 @@ /turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/ancientstation) "bX" = ( -/obj/structure/sign/science, +/obj/structure/sign/departments/science, /turf/closed/wall/rust, /area/ruin/space/has_grav/ancientstation) "bY" = ( @@ -1221,31 +1204,14 @@ dir = 4 }, /area/ruin/space/has_grav/ancientstation/betanorth) -"dE" = ( -/obj/effect/spawner/structure/window/hollow/reinforced, -/turf/open/floor/plating, -/area/template_noop) "dF" = ( /obj/structure/lattice, /turf/template_noop, /area/space/nearstation) -"dG" = ( -/turf/open/floor/plasteel/airless, -/area/template_noop) "dH" = ( /obj/structure/lattice/catwalk, /turf/template_noop, /area/template_noop) -"dI" = ( -/turf/open/floor/plasteel/airless{ - icon_state = "floorscorched1" - }, -/area/template_noop) -"dJ" = ( -/turf/open/floor/plasteel/airless{ - icon_state = "damaged5" - }, -/area/template_noop) "dK" = ( /obj/structure/lattice/catwalk, /obj/structure/cable{ @@ -1417,11 +1383,6 @@ /obj/machinery/portable_atmospherics/canister, /turf/open/floor/plating/airless, /area/ruin/space/has_grav/ancientstation/betanorth) -"eh" = ( -/turf/open/floor/plasteel/airless{ - icon_state = "damaged2" - }, -/area/template_noop) "ei" = ( /obj/structure/lattice/catwalk, /obj/structure/cable{ @@ -1500,14 +1461,6 @@ /obj/item/seeds/grape, /turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/ancientstation/hydroponics) -"es" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/door/airlock/public/glass{ - name = "Hydroponics" - }, -/obj/machinery/door/firedoor/closed, -/turf/open/floor/plasteel/floorgrime, -/area/ruin/space/has_grav/ancientstation/hydroponics) "et" = ( /obj/structure/cable{ icon_state = "1-2" @@ -1850,10 +1803,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/ancientstation) -"fo" = ( -/obj/machinery/door/firedoor, -/turf/open/floor/plasteel/airless/floorgrime, -/area/ruin/space/has_grav/ancientstation) "fp" = ( /obj/structure/sign/poster/official/here_for_your_safety, /turf/closed/wall/rust, @@ -3075,11 +3024,6 @@ dir = 4 }, /area/ruin/space/has_grav/ancientstation/rnd) -"ia" = ( -/turf/open/floor/plasteel/airless{ - icon_state = "floorscorched2" - }, -/area/template_noop) "ib" = ( /obj/structure/lattice/catwalk, /obj/structure/cable{ @@ -3087,12 +3031,6 @@ }, /turf/template_noop, /area/template_noop) -"ic" = ( -/obj/structure/cable{ - icon_state = "0-8" - }, -/turf/open/floor/plasteel/airless, -/area/template_noop) "id" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/power/solar_control{ @@ -3148,14 +3086,6 @@ }, /turf/open/floor/plasteel/cafeteria, /area/ruin/space/has_grav/ancientstation/kitchen) -"ij" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/door/airlock/public/glass{ - name = "Dining Area" - }, -/obj/machinery/door/firedoor/closed, -/turf/open/floor/plasteel/floorgrime, -/area/ruin/space/has_grav/ancientstation/kitchen) "ik" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor/plasteel/red/corner, @@ -3545,7 +3475,7 @@ /turf/open/floor/plating, /area/ruin/space/has_grav/ancientstation/engi) "iX" = ( -/obj/structure/sign/radiation, +/obj/structure/sign/warning/radiation, /turf/closed/wall/rust, /area/ruin/space/has_grav/ancientstation/engi) "iY" = ( @@ -3750,9 +3680,6 @@ /obj/item/storage/box/firingpins, /turf/open/floor/plating, /area/ruin/space/has_grav/ancientstation/deltacorridor) -"jA" = ( -/turf/open/floor/plasteel/floorgrime, -/area/template_noop) "jB" = ( /obj/structure/closet/crate/radiation, /obj/item/stack/sheet/mineral/uranium{ @@ -3862,7 +3789,7 @@ /obj/structure/lattice, /obj/item/solar_assembly, /turf/template_noop, -/area/template_noop) +/area/space/nearstation) "jR" = ( /obj/structure/cable, /turf/open/floor/plating/airless, @@ -4433,16 +4360,6 @@ /obj/item/pickaxe, /turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/ancientstation/deltacorridor) -"lr" = ( -/obj/effect/decal/cleanable/dirt, -/obj/item/ore/bluespace_crystal, -/turf/open/floor/plasteel/white, -/area/ruin/space/has_grav/ancientstation/rnd) -"ls" = ( -/obj/effect/decal/cleanable/dirt, -/obj/item/ore/bluespace_crystal/refined, -/turf/open/floor/plasteel/white, -/area/ruin/space/has_grav/ancientstation/rnd) "lt" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/mirror{ @@ -4451,10 +4368,6 @@ }, /turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/ancientstation) -"lu" = ( -/obj/item/stock_parts/manipulator, -/turf/open/floor/plasteel/airless/floorgrime, -/area/template_noop) "lv" = ( /obj/effect/decal/cleanable/dirt, /obj/item/stack/sheet/glass, @@ -4462,10 +4375,6 @@ dir = 4 }, /area/ruin/space/has_grav/ancientstation/betanorth) -"lw" = ( -/obj/item/stock_parts/matter_bin, -/turf/open/floor/plating/airless, -/area/template_noop) "lx" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/door/airlock/science{ @@ -4473,83 +4382,12 @@ }, /turf/open/floor/plating, /area/ruin/space/has_grav/ancientstation/hivebot) -"ly" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/door/airlock/science, -/turf/open/floor/plating, -/area/ruin/space/has_grav/ancientstation/hivebot) "lz" = ( /turf/open/floor/plating/airless{ tag = "icon-floor"; icon_state = "floor" }, /area/template_noop) -"lA" = ( -/turf/open/floor/plating/airless{ - tag = "icon-floor"; - icon_state = "floor" - }, -/area/template_noop) -"lB" = ( -/turf/open/floor/plating/airless{ - tag = "icon-floor"; - icon_state = "floor" - }, -/area/template_noop) -"lC" = ( -/turf/open/floor/plating/airless{ - tag = "icon-floor"; - icon_state = "floor" - }, -/area/template_noop) -"lD" = ( -/turf/open/floor/plating/airless{ - tag = "icon-floor"; - icon_state = "floor" - }, -/area/template_noop) -"lE" = ( -/turf/open/floor/plating/airless{ - tag = "icon-floor"; - icon_state = "floor" - }, -/area/template_noop) -"lF" = ( -/turf/open/floor/plating/airless{ - tag = "icon-floor"; - icon_state = "floor" - }, -/area/template_noop) -"lG" = ( -/turf/open/floor/plating/airless{ - tag = "icon-floor"; - icon_state = "floor" - }, -/area/template_noop) -"lH" = ( -/turf/open/floor/plating/airless{ - tag = "icon-floor"; - icon_state = "floor" - }, -/area/template_noop) -"lI" = ( -/turf/open/floor/plating/airless{ - tag = "icon-floor"; - icon_state = "floor" - }, -/area/template_noop) -"lJ" = ( -/turf/open/floor/plating/airless{ - tag = "icon-floor"; - icon_state = "floor" - }, -/area/template_noop) -"lK" = ( -/turf/open/floor/plating/airless{ - tag = "icon-floor"; - icon_state = "floor" - }, -/area/template_noop) "lL" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/supply/hidden, @@ -4563,42 +4401,6 @@ dir = 8 }, /area/ruin/space/has_grav/ancientstation/rnd) -"lN" = ( -/turf/open/floor/plating/airless{ - tag = "icon-floor"; - icon_state = "floor" - }, -/area/template_noop) -"lO" = ( -/turf/open/floor/plating/airless{ - tag = "icon-floor"; - icon_state = "floor" - }, -/area/template_noop) -"lP" = ( -/turf/open/floor/plating/airless{ - tag = "icon-floor"; - icon_state = "floor" - }, -/area/template_noop) -"lQ" = ( -/turf/open/floor/plating/airless{ - tag = "icon-floor"; - icon_state = "floor" - }, -/area/template_noop) -"lR" = ( -/turf/open/floor/plating/airless{ - tag = "icon-floor"; - icon_state = "floor" - }, -/area/template_noop) -"lS" = ( -/turf/open/floor/plating/airless{ - tag = "icon-floor"; - icon_state = "floor" - }, -/area/template_noop) "lT" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/supply/hidden, @@ -4608,68 +4410,6 @@ dir = 4 }, /area/ruin/space/has_grav/ancientstation/rnd) -"lU" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plasteel/orange/side{ - tag = "icon-orange (WEST)"; - icon_state = "orange"; - dir = 8 - }, -/area/ruin/space/has_grav/ancientstation/rnd) -"lV" = ( -/turf/open/floor/plating/airless{ - tag = "icon-floor"; - icon_state = "floor" - }, -/area/template_noop) -"lW" = ( -/turf/open/floor/plating/airless{ - tag = "icon-floor"; - icon_state = "floor" - }, -/area/template_noop) -"lX" = ( -/turf/open/floor/plating/airless{ - tag = "icon-floor"; - icon_state = "floor" - }, -/area/template_noop) -"lY" = ( -/turf/open/floor/plating/airless{ - tag = "icon-floor"; - icon_state = "floor" - }, -/area/template_noop) -"lZ" = ( -/turf/open/floor/plating/airless{ - tag = "icon-floor"; - icon_state = "floor" - }, -/area/template_noop) -"ma" = ( -/turf/open/floor/plating/airless{ - tag = "icon-floor"; - icon_state = "floor" - }, -/area/template_noop) -"mb" = ( -/turf/open/floor/plating/airless{ - tag = "icon-floor"; - icon_state = "floor" - }, -/area/template_noop) -"mc" = ( -/turf/open/floor/plating/airless{ - tag = "icon-floor"; - icon_state = "floor" - }, -/area/template_noop) -"md" = ( -/turf/open/floor/plating/airless{ - tag = "icon-floor"; - icon_state = "floor" - }, -/area/template_noop) "me" = ( /turf/open/floor/plating/airless, /area/ruin/space/has_grav/ancientstation/betanorth) @@ -4677,114 +4417,9 @@ /obj/structure/girder, /turf/open/floor/plating/airless, /area/ruin/space/has_grav/ancientstation/betanorth) -"mg" = ( -/turf/open/floor/plating/airless, -/area/ruin/space/has_grav/ancientstation/betanorth) -"mh" = ( -/turf/open/floor/plating/airless, -/area/ruin/space/has_grav/ancientstation/betanorth) -"mi" = ( -/turf/open/floor/plating/airless, -/area/ruin/space/has_grav/ancientstation/betanorth) -"mj" = ( -/turf/open/floor/plating/airless, -/area/ruin/space/has_grav/ancientstation/betanorth) -"mk" = ( -/turf/open/floor/plating/airless, -/area/ruin/space/has_grav/ancientstation/betanorth) -"ml" = ( -/turf/open/floor/plating/airless, -/area/ruin/space/has_grav/ancientstation/betanorth) -"mm" = ( -/turf/open/floor/plating/airless, -/area/ruin/space/has_grav/ancientstation/betanorth) -"mn" = ( -/turf/open/floor/plating/airless, -/area/ruin/space/has_grav/ancientstation/betanorth) -"mo" = ( -/turf/open/floor/plating/airless, -/area/ruin/space/has_grav/ancientstation/betanorth) -"mp" = ( -/turf/open/floor/plating/airless, -/area/ruin/space/has_grav/ancientstation/betanorth) -"mq" = ( -/obj/structure/girder, -/turf/open/floor/plating/airless, -/area/ruin/space/has_grav/ancientstation/betanorth) -"mr" = ( -/turf/open/floor/plating/airless, -/area/ruin/space/has_grav/ancientstation/betanorth) -"ms" = ( -/turf/open/floor/plating/airless, -/area/ruin/space/has_grav/ancientstation/betanorth) -"mt" = ( -/turf/open/floor/plating/airless, -/area/ruin/space/has_grav/ancientstation/betanorth) -"mu" = ( -/turf/open/floor/plating/airless, -/area/ruin/space/has_grav/ancientstation/betanorth) -"mv" = ( -/turf/open/floor/plating/airless, -/area/ruin/space/has_grav/ancientstation/betanorth) -"mw" = ( -/turf/open/floor/plating/airless, -/area/ruin/space/has_grav/ancientstation/betanorth) -"mx" = ( -/obj/structure/girder, -/turf/open/floor/plating/airless, -/area/ruin/space/has_grav/ancientstation/betanorth) -"my" = ( -/turf/open/floor/plating/airless, -/area/ruin/space/has_grav/ancientstation/betanorth) -"mz" = ( -/turf/open/floor/plating/airless, -/area/ruin/space/has_grav/ancientstation/betanorth) -"mA" = ( -/turf/open/floor/plating/airless, -/area/ruin/space/has_grav/ancientstation/betanorth) -"mB" = ( -/turf/open/floor/plating/airless, -/area/ruin/space/has_grav/ancientstation/betanorth) -"mC" = ( -/turf/open/floor/plating/airless, -/area/ruin/space/has_grav/ancientstation/betanorth) -"mD" = ( -/turf/open/floor/plating/airless, -/area/ruin/space/has_grav/ancientstation/betanorth) -"mE" = ( -/turf/open/floor/plating/airless, -/area/ruin/space/has_grav/ancientstation/betanorth) -"mF" = ( -/turf/open/floor/plating/airless, -/area/ruin/space/has_grav/ancientstation/betanorth) -"mG" = ( -/obj/structure/girder, -/turf/open/floor/plating/airless, -/area/ruin/space/has_grav/ancientstation/betanorth) "mH" = ( /turf/closed/wall/rust, /area/ruin/space/has_grav/ancientstation/atmo) -"mI" = ( -/turf/closed/wall/rust, -/area/ruin/space/has_grav/ancientstation/atmo) -"mJ" = ( -/turf/closed/wall/rust, -/area/ruin/space/has_grav/ancientstation/atmo) -"mK" = ( -/turf/closed/wall/rust, -/area/ruin/space/has_grav/ancientstation/atmo) -"mL" = ( -/turf/closed/wall/rust, -/area/ruin/space/has_grav/ancientstation/atmo) -"mM" = ( -/turf/closed/wall/rust, -/area/ruin/space/has_grav/ancientstation/atmo) -"mN" = ( -/turf/closed/wall/rust, -/area/ruin/space/has_grav/ancientstation/atmo) -"mO" = ( -/turf/closed/wall/rust, -/area/ruin/space/has_grav/ancientstation/atmo) "mP" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/computer{ @@ -4794,6 +4429,16 @@ }, /turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/ancientstation/sec) +"Dj" = ( +/obj/structure/transit_tube{ + dir = 4 + }, +/turf/template_noop, +/area/space/nearstation) +"Ga" = ( +/obj/structure/transit_tube/crossing/horizontal, +/turf/template_noop, +/area/space/nearstation) (1,1,1) = {" aa @@ -4807,14 +4452,13 @@ aa aa aa aa -aa me me -aA +dF me me aa -aA +dF me me aa @@ -4827,7 +4471,7 @@ aa aa aa jO -aA +dF jO jO jO @@ -4837,10 +4481,7 @@ kK kV ld aa -aA -aa -aa -aa +dF aa aa aa @@ -4858,7 +4499,6 @@ aa aa aa aa -aa me bq bJ @@ -4870,14 +4510,14 @@ bq bq eG me -aA -aA -aA +dF +dF +dF bf -aA -aA -aA -aA +dF +dF +dF +dF iT km km @@ -4895,9 +4535,6 @@ aa aa aa aa -aa -aa -aa "} (3,1,1) = {" aa @@ -4910,7 +4547,6 @@ aa aa aa aa -aa mf bJ bJ @@ -4925,7 +4561,7 @@ eH aa aa aa -aA +dF aa aa aa @@ -4947,9 +4583,6 @@ aa aa aa aa -aa -aa -aa "} (4,1,1) = {" aa @@ -4961,8 +4594,7 @@ aa aa aa aa -aa -aA +dF me me bJ @@ -4977,7 +4609,7 @@ bJ mf me aa -aA +dF aa aa aa @@ -4999,9 +4631,6 @@ aa aa aa aa -aa -aa -aa "} (5,1,1) = {" aa @@ -5014,8 +4643,7 @@ aa aa aa aa -aa -aA +dF me bw bI @@ -5034,17 +4662,14 @@ aa aa aa aa -aA +dF km jO jO aa aa aa -aA -aa -aa -aa +dF aa aa aa @@ -5065,7 +4690,6 @@ aa aa aa aa -aa ac ac ac @@ -5083,22 +4707,19 @@ fY bq me hL -aA -aA -aA -aA +dF +dF +dF +dF km km jO jO aa -aA -aa -aa -aA -aa +dF aa aa +dF aa aa aa @@ -5116,7 +4737,6 @@ aa aa aa aa -aa ac az bh @@ -5136,7 +4756,7 @@ fA bJ mf aa -aA +dF aa aa aa @@ -5145,10 +4765,7 @@ aa aa aa aa -aA -aa -aa -aa +dF aa aa aa @@ -5169,7 +4786,6 @@ aa aa aa aa -aa ac az ac @@ -5188,7 +4804,7 @@ bq hj aa aa -aA +dF aa aa aa @@ -5197,10 +4813,7 @@ aa aa aa aa -aA -aa -aa -aa +dF aa aa aa @@ -5221,8 +4834,7 @@ aa aa aa aa -aa -aA +dF ac aa bJ @@ -5231,15 +4843,15 @@ cf bI bJ me -aA +dF me fa me fZ gU me -aA -aA +dF +dF bf aa aa @@ -5249,10 +4861,7 @@ aa aa aa aa -aA -aa -aa -aa +dF aa aa aa @@ -5264,7 +4873,6 @@ aa aa "} (10,1,1) = {" -aa ab aa aa @@ -5272,7 +4880,7 @@ aa aa aa aa -aA +dF aa aa aa @@ -5282,8 +4890,8 @@ bK cg bK bJ -aA -aA +dF +dF aa me me @@ -5291,20 +4899,17 @@ ga me me aa -aA +dF bf aa aa aa -aA +dF aa aa aa aa -aA -aa -aa -aa +dF aa aa aa @@ -5325,8 +4930,7 @@ aa aa aa aa -aa -aA +dF aa aa aa @@ -5338,9 +4942,9 @@ mf aa aa aa -aA +dF ga -aA +dF aa aa br @@ -5348,11 +4952,11 @@ bg aa aa aa -aA +dF aa aa aa -aA +dF aa aa aa @@ -5363,9 +4967,6 @@ ab aa aa aa -aa -aa -aa "} (12,1,1) = {" aa @@ -5376,11 +4977,10 @@ aa aa aa aa -aa -aA +dF aa aa -aA +dF aa aa bd @@ -5391,19 +4991,16 @@ aa aa aa aa -aA +dF aa aa aa aa -aA -aa -aa -aa -aA +dF aa aa aa +dF aa aa aa @@ -5427,9 +5024,8 @@ aa aa aa aa -aa -aA -aA +dF +dF aa aa aa @@ -5443,26 +5039,23 @@ aa aa aa aa -aA +dF aa aa aa aa -aA +dF aa aa aa -aA +dF aa aa aa aa aa aa -aA -aa -aa -aa +dF aa aa aa @@ -5480,9 +5073,8 @@ aa aa aa aa -aa -aA -aA +dF +dF aa aa aa @@ -5510,10 +5102,7 @@ aa aa aa aa -aA -aa -aa -aa +dF aa aa aa @@ -5532,8 +5121,7 @@ aa aa aa aa -aa -aA +dF aZ aa aa @@ -5557,11 +5145,11 @@ dH ei dH hN -aA +dF aa aa aa -aA +dF aa lg ac @@ -5571,9 +5159,6 @@ aa aa aa aa -aa -aa -aa "} (16,1,1) = {" aa @@ -5584,8 +5169,7 @@ aa aa aa aa -aa -aA +dF aa aa aa @@ -5623,9 +5207,6 @@ aa aa aa aa -aa -aa -aa "} (17,1,1) = {" aa @@ -5636,8 +5217,7 @@ aa aa aa aa -aa -aA +dF aa aa aa @@ -5665,7 +5245,7 @@ jR aa aa aa -aA +dF ac lh lh @@ -5675,9 +5255,6 @@ aa aa aa aa -aa -aa -aa "} (18,1,1) = {" aa @@ -5688,8 +5265,7 @@ aa aa aa aa -aa -aA +dF aa aa aa @@ -5716,7 +5292,7 @@ lz aa aa aa -aA +dF aa aa ac @@ -5727,9 +5303,6 @@ aa aa aa aa -aa -aa -aa "} (19,1,1) = {" aa @@ -5740,8 +5313,7 @@ aa aa aa aa -aa -aA +dF aa aa aa @@ -5765,10 +5337,7 @@ dH ei ei ib -aA -aa -aa -aa +dF aa aa aa @@ -5792,8 +5361,7 @@ aa aa aa aa -aa -aA +dF aa aa aa @@ -5821,12 +5389,9 @@ aa aa aa aa -aA -aa -aA -aa -aa +dF aa +dF aa aa aa @@ -5844,8 +5409,7 @@ aa aa aa aa -aa -aA +dF aa aa aa @@ -5873,7 +5437,7 @@ aa aa aa aa -aA +dF aa aa aa @@ -5883,9 +5447,6 @@ ab aa aa aa -aa -aa -aa "} (22,1,1) = {" aa @@ -5896,8 +5457,7 @@ aa aa aa aa -aa -aA +dF aa aa aa @@ -5925,10 +5485,7 @@ aa aa aa aa -aA -aa -aa -aa +dF aa aa aa @@ -5948,8 +5505,7 @@ aa aa aa aa -aa -aA +dF aa aa aa @@ -5977,10 +5533,7 @@ aa aa aa aa -aA -aa -aa -aa +dF aa aa aa @@ -6000,8 +5553,7 @@ aa aa aa aa -aa -aA +dF aa aa aa @@ -6029,10 +5581,7 @@ aa aa aa aa -aA -aa -aa -aa +dF aa aa aa @@ -6052,8 +5601,7 @@ aa aa aa aa -aa -aA +dF aa aa aa @@ -6081,10 +5629,7 @@ dl aa aa aa -aA -aa -aa -aa +dF aa aa aa @@ -6104,8 +5649,7 @@ aa aa aa aa -aa -aA +dF aa aa aa @@ -6133,10 +5677,7 @@ dl aa aa aa -aA -aa -aa -aa +dF aa aa aa @@ -6156,8 +5697,7 @@ aa aa aa aa -aa -aA +dF aa aa aa @@ -6185,10 +5725,7 @@ dl aa aa aa -aA -aa -aa -aa +dF aa aa aa @@ -6208,8 +5745,7 @@ aa aa aa aa -aa -aA +dF aa aa aa @@ -6237,10 +5773,7 @@ dl aa aa aa -aA -aa -aa -aa +dF aa aa aa @@ -6260,7 +5793,6 @@ aa aa aa aa -aa aG aG aG @@ -6299,9 +5831,6 @@ aa aa aa aa -aa -aa -aa "} (30,1,1) = {" aa @@ -6310,7 +5839,6 @@ aa aa aa aa -aa aG aG aT @@ -6351,9 +5879,6 @@ aa aa aa aa -aa -aa -aa "} (31,1,1) = {" aa @@ -6362,7 +5887,6 @@ aa aa aa aa -aa aG aO aU @@ -6403,9 +5927,6 @@ aa aa aa aa -aa -aa -aa "} (32,1,1) = {" aa @@ -6413,7 +5934,6 @@ aa aa aa aa -aa ak ak ak @@ -6455,16 +5975,12 @@ aa aa aa aa -aa -aa -aa "} (33,1,1) = {" aa aa aa aa -aa ak ak aH @@ -6507,16 +6023,12 @@ aa aa aa aa -aa -aa -aa "} (34,1,1) = {" aa aa aa aa -aa by aH at @@ -6559,16 +6071,12 @@ aa aa aa aa -aa -aa -aa "} (35,1,1) = {" aa aa aa aa -aa al at aI @@ -6611,16 +6119,12 @@ aa aa aa aa -aa -aa -aa "} (36,1,1) = {" aa aa aa aa -aa am au aJ @@ -6663,16 +6167,12 @@ aa aa aa aa -aa -aa -aa "} (37,1,1) = {" aa aa aa aa -aa am av aK @@ -6715,16 +6215,12 @@ aa aa aa aa -aa -aa -aa "} (38,1,1) = {" aa aa aa aa -aa am aw aL @@ -6767,16 +6263,12 @@ aa aa aa aa -aa -aa -aa "} (39,1,1) = {" aa aa aa aa -aa an ax aI @@ -6819,16 +6311,12 @@ aa aa aa aa -aa -aa -aa "} (40,1,1) = {" aa aa aa aa -aa by aM ax @@ -6871,16 +6359,12 @@ aa aa aa aa -aa -aa -aa "} (41,1,1) = {" aa aa aa aa -aa ak ak aM @@ -6923,9 +6407,6 @@ aa aa aa aa -aa -aa -aa "} (42,1,1) = {" aa @@ -6933,7 +6414,6 @@ aa aa aa aa -aa ak ak ak @@ -6975,9 +6455,6 @@ aa aa aa aa -aa -aa -aa "} (43,1,1) = {" aa @@ -6986,7 +6463,6 @@ aa aa aa aa -aa aG aS aY @@ -7027,9 +6503,6 @@ aa aa aa aa -aa -aa -aa "} (44,1,1) = {" aa @@ -7038,7 +6511,6 @@ aa aa aa aa -aa aG aG aG @@ -7079,9 +6551,6 @@ aa aa aa aa -aa -aa -aa "} (45,1,1) = {" aa @@ -7091,7 +6560,6 @@ aa aa aa aa -aa aG aG aG @@ -7131,9 +6599,6 @@ aa aa aa aa -aa -aa -aa "} (46,1,1) = {" aa @@ -7143,7 +6608,6 @@ aa aa aa aa -aa aA aa aa @@ -7173,10 +6637,7 @@ aG aa aa aa -aA -aa -aa -aa +dF aa aa aa @@ -7195,7 +6656,6 @@ aa aa aa aa -aa aA aa aa @@ -7225,10 +6685,7 @@ aG aa aa aa -aA -aa -aa -aa +dF aa aa aa @@ -7246,7 +6703,6 @@ aa aa aa aa -aa aA aa aa @@ -7277,10 +6733,7 @@ aG aa aa aa -aA -aa -aa -aa +dF aa aa aa @@ -7300,7 +6753,6 @@ aa aa aa aa -aa aA aa aa @@ -7323,16 +6775,13 @@ il dv dv aa -bd +Dj aa aa aa aa aa -aA -aa -aa -aa +dF aa aa aa @@ -7350,7 +6799,6 @@ aa aa aa aa -aa ac az aa @@ -7375,13 +6823,13 @@ im dv aa aa -bd +Dj aa aa aa aa aa -aA +dF aa aa aa @@ -7391,9 +6839,6 @@ aa ab aa aa -aa -aa -aa "} (51,1,1) = {" aa @@ -7401,7 +6846,6 @@ aa aa aa aa -aa az az az @@ -7427,16 +6871,13 @@ dv dv aa aa -bd +Dj aa aa aa aa aa -aA -aa -aa -aa +dF aa aa aa @@ -7453,7 +6894,6 @@ aa aa aa aa -aa az az az @@ -7479,13 +6919,13 @@ aa aa aa aa -ch +Ga aa aa aa aa aa -aA +dF aa aa aa @@ -7495,9 +6935,6 @@ aa aa aa aa -aa -aa -aa "} (53,1,1) = {" aa @@ -7505,7 +6942,6 @@ aa aa aa aa -aa az az az @@ -7531,13 +6967,13 @@ aa aa aa aa -bd +Dj aa aa aa aa aa -aA +dF aa aa ac @@ -7547,9 +6983,6 @@ az aa aa aa -aa -aa -aa "} (54,1,1) = {" aa @@ -7566,7 +6999,6 @@ aa aa aa aa -aa cu aa aa @@ -7583,13 +7015,13 @@ aa aa aa aa -bd +Dj aa aa aa aa aa -aA +dF aa aa az @@ -7599,19 +7031,15 @@ az ac ac aa -aa -aa -aa "} (55,1,1) = {" -aa ab aa aa aa aa aa -aA +dF aa aa aa @@ -7635,13 +7063,13 @@ aa aa aa aa -bd +Dj aa aa aa aa aa -aA +dF aa aa aa @@ -7651,9 +7079,6 @@ lp az az aa -aa -aa -aa "} (56,1,1) = {" aa @@ -7664,8 +7089,7 @@ aa aa aa aa -aa -aA +dF aa aa aa @@ -7693,7 +7117,7 @@ bD aa aa aa -aA +dF aa aa aa @@ -7703,9 +7127,6 @@ lp az ac aa -aa -aa -aa "} (57,1,1) = {" aa @@ -7720,7 +7141,6 @@ aa aa aa aa -aa bD bZ cw @@ -7745,7 +7165,7 @@ bD aa aa aa -aA +dF aa aa aa @@ -7755,9 +7175,6 @@ az az ac aa -aa -aa -aa "} (58,1,1) = {" aa @@ -7767,8 +7184,7 @@ aa aa aa aa -aa -aA +dF aa aa aa @@ -7797,10 +7213,7 @@ bD aa aa aa -aA -aa -aa -aa +dF aa aa aa @@ -7817,9 +7230,8 @@ aa aa aa aa -aa -aA -aA +dF +dF aa aa aa @@ -7849,10 +7261,7 @@ bD aa aa aa -aA -aa -aa -aa +dF aa aa aa @@ -7868,7 +7277,6 @@ aa aa aa aa -aa ac ac ac @@ -7901,7 +7309,7 @@ bD aa aa aa -aA +dF aa aa aa @@ -7911,14 +7319,10 @@ aa aa aa ab -aa -aa -aa "} (61,1,1) = {" aa aa -aa ac ac ac @@ -7953,10 +7357,7 @@ bD aa aa aa -aA -aa -aa -aa +dF aa aa aa @@ -7969,7 +7370,6 @@ aa "} (62,1,1) = {" aa -aa ac ac ad @@ -8015,13 +7415,9 @@ aa aa aa aa -aa -aa -aa "} (63,1,1) = {" aa -aa ac ad ae @@ -8067,13 +7463,9 @@ aa aa aa aa -aa -aa -aa "} (64,1,1) = {" aa -aa ac ad af @@ -8119,12 +7511,8 @@ aa aa aa aa -aa -aa -aa "} (65,1,1) = {" -aa ac ac ad @@ -8171,12 +7559,8 @@ aa aa aa aa -aa -aa -aa "} (66,1,1) = {" -aa ac ac ad @@ -8223,12 +7607,8 @@ aa aa aa aa -aa -aa -aa "} (67,1,1) = {" -aa ac ac ad @@ -8275,12 +7655,8 @@ aa aa aa aa -aa -aa -aa "} (68,1,1) = {" -aa ac ac ad @@ -8327,12 +7703,8 @@ aa aa aa aa -aa -aa -aa "} (69,1,1) = {" -aa ac ac ad @@ -8379,12 +7751,8 @@ aa aa aa aa -aa -aa -aa "} (70,1,1) = {" -aa ac ac ad @@ -8431,12 +7799,8 @@ aa aa aa aa -aa -aa -aa "} (71,1,1) = {" -aa ac ac ad @@ -8483,12 +7847,8 @@ aa aa aa aa -aa -aa -aa "} (72,1,1) = {" -aa ac ac ad @@ -8535,12 +7895,8 @@ aa aa aa aa -aa -aa -aa "} (73,1,1) = {" -aa ac ac ad @@ -8587,12 +7943,8 @@ aa aa aa aa -aa -aa -aa "} (74,1,1) = {" -aa ac ac ad @@ -8639,12 +7991,8 @@ aa aa aa aa -aa -aa -aa "} (75,1,1) = {" -aa ac ac ad @@ -8691,13 +8039,9 @@ aa aa aa aa -aa -aa -aa "} (76,1,1) = {" aa -aa ac ad aj @@ -8743,13 +8087,9 @@ aa aa aa aa -aa -aa -aa "} (77,1,1) = {" aa -aa ac ac ad @@ -8795,13 +8135,9 @@ ab aa aa aa -aa -aa -aa "} (78,1,1) = {" aa -aa ac ac ac @@ -8847,14 +8183,10 @@ aa aa aa aa -aa -aa -aa "} (79,1,1) = {" aa aa -aa ac ac ar @@ -8899,9 +8231,6 @@ aa aa aa aa -aa -aa -aa "} (80,1,1) = {" aa @@ -8923,7 +8252,6 @@ aa aa aa aa -aa bD bD bD @@ -8951,7 +8279,4 @@ aa aa aa aa -aa -aa -aa "} diff --git a/_maps/RandomRuins/SpaceRuins/oldteleporter.dmm b/_maps/RandomRuins/SpaceRuins/oldteleporter.dmm index 5a4bd2492e..afcc31a692 100644 --- a/_maps/RandomRuins/SpaceRuins/oldteleporter.dmm +++ b/_maps/RandomRuins/SpaceRuins/oldteleporter.dmm @@ -5,7 +5,7 @@ "b" = ( /obj/structure/lattice, /turf/template_noop, -/area/ruin/space/oldteleporter) +/area/space/nearstation) "c" = ( /turf/open/floor/plating/airless, /area/ruin/space/oldteleporter) diff --git a/_maps/RandomRuins/SpaceRuins/onehalf.dmm b/_maps/RandomRuins/SpaceRuins/onehalf.dmm index 1615a67600..24a6c319ee 100644 --- a/_maps/RandomRuins/SpaceRuins/onehalf.dmm +++ b/_maps/RandomRuins/SpaceRuins/onehalf.dmm @@ -8,35 +8,35 @@ }, /obj/structure/lattice/catwalk, /turf/template_noop, -/area/template_noop) +/area/space/nearstation) "ac" = ( /obj/structure/cable{ icon_state = "4-8" }, /obj/structure/lattice/catwalk, /turf/template_noop, -/area/template_noop) +/area/space/nearstation) "ad" = ( /obj/structure/cable{ icon_state = "2-8" }, /obj/structure/lattice/catwalk, /turf/template_noop, -/area/template_noop) +/area/space/nearstation) "ae" = ( /obj/item/stack/cable_coil/cut/red{ amount = 2 }, /obj/structure/lattice/catwalk, /turf/template_noop, -/area/template_noop) +/area/space/nearstation) "af" = ( /obj/structure/cable{ icon_state = "1-8" }, /obj/structure/lattice/catwalk, /turf/template_noop, -/area/template_noop) +/area/space/nearstation) "ag" = ( /turf/closed/wall, /area/ruin/space/has_grav/onehalf/dorms_med) @@ -50,7 +50,7 @@ }, /obj/structure/lattice/catwalk, /turf/template_noop, -/area/template_noop) +/area/space/nearstation) "aj" = ( /turf/open/floor/plating/airless, /area/ruin/space/has_grav/onehalf/hallway) @@ -280,7 +280,7 @@ /obj/structure/lattice, /obj/item/storage/toolbox/syndicate, /turf/template_noop, -/area/template_noop) +/area/space/nearstation) "aT" = ( /obj/structure/cable{ icon_state = "1-2" @@ -830,7 +830,7 @@ icon_state = "small" }, /turf/template_noop, -/area/template_noop) +/area/space/nearstation) "ck" = ( /obj/effect/spawner/structure/window/reinforced, /obj/structure/disposalpipe/segment{ @@ -905,7 +905,7 @@ }, /obj/structure/lattice, /turf/template_noop, -/area/template_noop) +/area/space/nearstation) "ct" = ( /obj/structure/lattice, /obj/item/shard{ @@ -958,13 +958,6 @@ "cB" = ( /turf/template_noop, /area/ruin/space/has_grav/onehalf/hallway) -"cC" = ( -/obj/structure/lattice, -/obj/structure/cable{ - icon_state = "2-8" - }, -/turf/open/space, -/area/ruin/space/has_grav/onehalf/hallway) "cD" = ( /obj/structure/lattice, /obj/structure/disposalpipe/broken{ @@ -1039,13 +1032,6 @@ /obj/item/stack/sheet/plasteel, /turf/template_noop, /area/template_noop) -"cO" = ( -/obj/structure/lattice, -/obj/structure/cable{ - icon_state = "1-2" - }, -/turf/open/space, -/area/ruin/space/has_grav/onehalf/hallway) "cP" = ( /turf/open/floor/plasteel/airless{ icon_state = "damaged3" @@ -1098,7 +1084,7 @@ }, /obj/structure/lattice/catwalk, /turf/template_noop, -/area/template_noop) +/area/space/nearstation) "cX" = ( /obj/structure/cable{ icon_state = "1-2" @@ -1190,7 +1176,7 @@ /obj/item/stack/sheet/plasteel, /obj/structure/lattice/catwalk, /turf/template_noop, -/area/template_noop) +/area/space/nearstation) "di" = ( /obj/structure/cable{ icon_state = "4-8" @@ -1200,7 +1186,7 @@ }, /obj/structure/lattice/catwalk, /turf/template_noop, -/area/template_noop) +/area/space/nearstation) "dj" = ( /obj/structure/cable{ icon_state = "4-8" @@ -1211,7 +1197,7 @@ /obj/item/stack/rods, /obj/structure/lattice/catwalk, /turf/template_noop, -/area/template_noop) +/area/space/nearstation) "dk" = ( /obj/structure/cable{ icon_state = "1-8" @@ -1221,23 +1207,30 @@ }, /obj/structure/lattice/catwalk, /turf/template_noop, -/area/template_noop) +/area/space/nearstation) "dl" = ( /obj/item/stack/cable_coil/cut/red{ amount = 2 }, /turf/template_noop, /area/template_noop) +"Ky" = ( +/turf/template_noop, +/area/space/nearstation) +"Me" = ( +/obj/structure/lattice, +/turf/template_noop, +/area/space/nearstation) (1,1,1) = {" aa aa aa aa +Me aa -aa -aa -aa +aS +Me aa aa aa @@ -1255,50 +1248,6 @@ aa aa aa aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(3,1,1) = {" -aa -aa -aa -aa -aw -aa -aS -aw -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(4,1,1) = {" -aa -aa -aa aj ax aH @@ -1317,7 +1266,7 @@ aa aa aa "} -(5,1,1) = {" +(3,1,1) = {" aa aa ae @@ -1339,7 +1288,7 @@ aa aa aa "} -(6,1,1) = {" +(4,1,1) = {" aa aa ac @@ -1361,7 +1310,7 @@ aa aa aa "} -(7,1,1) = {" +(5,1,1) = {" aa ab af @@ -1383,7 +1332,7 @@ aa aa aa "} -(8,1,1) = {" +(6,1,1) = {" aa ac ag @@ -1405,7 +1354,7 @@ aa aa aa "} -(9,1,1) = {" +(7,1,1) = {" aa ac ag @@ -1427,7 +1376,7 @@ aa aa aa "} -(10,1,1) = {" +(8,1,1) = {" aa ac ag @@ -1441,7 +1390,7 @@ bO bR aa cs -aw +Me aa aa cr @@ -1449,7 +1398,7 @@ bP aa aa "} -(11,1,1) = {" +(9,1,1) = {" aa ac ag @@ -1467,11 +1416,11 @@ cA cr cN aa -aw +Me aa dl "} -(12,1,1) = {" +(10,1,1) = {" aa ac ag @@ -1482,18 +1431,18 @@ ag bi bx bQ -aw +Me bV aa aa -aw +Me cA aa cL dh aa "} -(13,1,1) = {" +(11,1,1) = {" aa ac ag @@ -1515,7 +1464,7 @@ bQ di aa "} -(14,1,1) = {" +(12,1,1) = {" aa ac ah @@ -1537,7 +1486,7 @@ dc dj aa "} -(15,1,1) = {" +(13,1,1) = {" aa ac ag @@ -1559,7 +1508,7 @@ dd ac aa "} -(16,1,1) = {" +(14,1,1) = {" aa ac ag @@ -1581,7 +1530,7 @@ bU ac aa "} -(17,1,1) = {" +(15,1,1) = {" aa ad ai @@ -1592,18 +1541,18 @@ aX bo bp bU -aa +Ky cj bU cF bU -aw -aa +Me +Ky bU ac aa "} -(18,1,1) = {" +(16,1,1) = {" aa aa aa @@ -1625,7 +1574,7 @@ bU ac aa "} -(19,1,1) = {" +(17,1,1) = {" aa aa aa @@ -1647,7 +1596,7 @@ bU ac aa "} -(20,1,1) = {" +(18,1,1) = {" aa aa aa @@ -1669,7 +1618,7 @@ de dk aa "} -(21,1,1) = {" +(19,1,1) = {" aa aa aa @@ -1691,7 +1640,7 @@ df ac aa "} -(22,1,1) = {" +(20,1,1) = {" aa aa aa @@ -1713,7 +1662,7 @@ df ac aa "} -(23,1,1) = {" +(21,1,1) = {" aa aa aa @@ -1735,7 +1684,7 @@ df ac aa "} -(24,1,1) = {" +(22,1,1) = {" aa aa aa @@ -1757,7 +1706,7 @@ dg dk aa "} -(25,1,1) = {" +(23,1,1) = {" aa aa aa @@ -1779,7 +1728,7 @@ bU ac aa "} -(26,1,1) = {" +(24,1,1) = {" aa aa aa @@ -1801,7 +1750,7 @@ bU ac aa "} -(27,1,1) = {" +(25,1,1) = {" aa aa aa @@ -1812,7 +1761,7 @@ ar br ar ar -aw +Me ad ai ai @@ -1823,7 +1772,7 @@ ai af aa "} -(28,1,1) = {" +(26,1,1) = {" aa aa aa @@ -1845,7 +1794,7 @@ aa aa aa "} -(29,1,1) = {" +(27,1,1) = {" aa aa aa @@ -1867,7 +1816,7 @@ aa aa aa "} -(30,1,1) = {" +(28,1,1) = {" aa aa aa @@ -1889,7 +1838,7 @@ aa aa aa "} -(31,1,1) = {" +(29,1,1) = {" aa aa aa @@ -1911,25 +1860,3 @@ aa aa aa "} -(32,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} diff --git a/_maps/RandomRuins/SpaceRuins/originalcontent.dmm b/_maps/RandomRuins/SpaceRuins/originalcontent.dmm index e55cee1581..6ba02315dc 100644 --- a/_maps/RandomRuins/SpaceRuins/originalcontent.dmm +++ b/_maps/RandomRuins/SpaceRuins/originalcontent.dmm @@ -916,8 +916,6 @@ aa aa aa aa -aa -aa ab ae ae @@ -963,8 +961,6 @@ aa aa aa aa -aa -aa ac af af @@ -1009,8 +1005,6 @@ aa aa aa aa -aa -aa ab ai af @@ -1056,8 +1050,6 @@ aa aa aa aa -aa -aa ac af af @@ -1100,8 +1092,6 @@ aa aa aa aa -aa -aa ab ae ae @@ -1147,8 +1137,6 @@ aa aa aa aa -aa -aa ac af af @@ -1193,8 +1181,6 @@ aa aa aa aa -aa -aa ab ai af @@ -1236,8 +1222,6 @@ aa aa aa aa -aa -aa ab ae ae @@ -1283,8 +1267,6 @@ aa aa aa aa -aa -aa ac af af @@ -1328,8 +1310,6 @@ aa aa aa aa -aa -aa ab ae ai @@ -1375,8 +1355,6 @@ aa aa aa aa -aa -aa ac af af @@ -1421,8 +1399,6 @@ aa aa aa aa -aa -aa ab ai af @@ -1468,8 +1444,6 @@ aa aa aa aa -aa -aa ac af af @@ -1515,8 +1489,6 @@ aa aa aa aa -aa -aa ac af af @@ -1560,8 +1532,6 @@ aa aa aa aa -aa -aa ab ae ai @@ -1607,8 +1577,6 @@ aa aa aa aa -aa -aa ac af af @@ -1652,8 +1620,6 @@ aa aa aa aa -aa -aa ab ae ai @@ -1699,8 +1665,6 @@ aa aa aa aa -aa -aa ac af af @@ -1746,8 +1710,6 @@ aa aa aa aa -aa -aa ac af af @@ -1792,8 +1754,6 @@ aa (20,1,1) = {" aa aa -aa -aa ab ai af @@ -1839,8 +1799,6 @@ aa (21,1,1) = {" aa aa -aa -aa ac af af @@ -1884,8 +1842,6 @@ aa aa "} (22,1,1) = {" -aa -aa ab ae ai @@ -1931,8 +1887,6 @@ aa aa "} (23,1,1) = {" -aa -aa ac af af @@ -1978,8 +1932,6 @@ aa aa "} (24,1,1) = {" -aa -aa ac af af @@ -2025,8 +1977,6 @@ aa aa "} (25,1,1) = {" -aa -aa ac af af @@ -2072,8 +2022,6 @@ aa aa "} (26,1,1) = {" -aa -aa ac af af @@ -2119,8 +2067,6 @@ aa aa "} (27,1,1) = {" -aa -aa ac af af @@ -2166,8 +2112,6 @@ aa aa "} (28,1,1) = {" -aa -aa ac af af @@ -2213,8 +2157,6 @@ aa aa "} (29,1,1) = {" -aa -aa ac af af @@ -2260,8 +2202,6 @@ aa aa "} (30,1,1) = {" -aa -aa ac af af @@ -2307,8 +2247,6 @@ aa aa "} (31,1,1) = {" -aa -aa ac af af @@ -2354,8 +2292,6 @@ aa aa "} (32,1,1) = {" -aa -aa ad ag af @@ -2402,8 +2338,6 @@ aa "} (33,1,1) = {" aa -aa -aa ac af al @@ -2449,8 +2383,6 @@ aa "} (34,1,1) = {" aa -aa -aa ac af al @@ -2496,8 +2428,6 @@ aa "} (35,1,1) = {" aa -aa -aa ac af am @@ -2543,8 +2473,6 @@ aa "} (36,1,1) = {" aa -aa -aa ac af af @@ -2590,8 +2518,6 @@ aa "} (37,1,1) = {" aa -aa -aa ah aj an @@ -2637,8 +2563,6 @@ aa "} (38,1,1) = {" aa -aa -aa ac af af @@ -2684,8 +2608,6 @@ aa "} (39,1,1) = {" aa -aa -aa ad ag af @@ -2732,8 +2654,6 @@ aa (40,1,1) = {" aa aa -aa -aa ad ag af @@ -2780,8 +2700,6 @@ aa aa aa aa -aa -aa ad ag af @@ -2828,8 +2746,6 @@ aa aa aa aa -aa -aa ad aw ag @@ -2877,8 +2793,6 @@ aa aa aa aa -aa -aa ac af af @@ -2924,8 +2838,6 @@ aa aa aa aa -aa -aa ad aw aw @@ -2974,8 +2886,6 @@ aa aa aa aa -aa -aa ad aw aw diff --git a/_maps/RandomRuins/SpaceRuins/shuttlerelic.dmm b/_maps/RandomRuins/SpaceRuins/shuttlerelic.dmm index ecadecdd04..aebbdec92a 100644 --- a/_maps/RandomRuins/SpaceRuins/shuttlerelic.dmm +++ b/_maps/RandomRuins/SpaceRuins/shuttlerelic.dmm @@ -79,24 +79,6 @@ /mob/living/simple_animal/hostile/retaliate/spaceman, /turf/open/floor/oldshuttle, /area/ruin/powered) -"p" = ( -/turf/closed/indestructible/oldshuttle/corner{ - dir = 8 - }, -/area/ruin/powered) -"q" = ( -/turf/closed/indestructible/oldshuttle/corner, -/area/ruin/powered) -"r" = ( -/turf/closed/indestructible/oldshuttle/corner{ - dir = 1 - }, -/area/ruin/powered) -"s" = ( -/turf/closed/indestructible/oldshuttle/corner{ - dir = 4 - }, -/area/ruin/powered) "t" = ( /obj/machinery/power/generator, /turf/open/floor/oldshuttle, @@ -180,7 +162,7 @@ g g g g -p +b d l w @@ -196,8 +178,8 @@ c g g g -p -r +b +f a a a @@ -217,7 +199,7 @@ c c c c -s +h a "} (7,1,1) = {" @@ -235,7 +217,7 @@ i c u c -s +h "} (8,1,1) = {" b @@ -251,7 +233,7 @@ m m c g -q +e c "} (9,1,1) = {" @@ -265,7 +247,7 @@ m m m m -p +b c g g @@ -299,7 +281,7 @@ m m m m -q +e c g g @@ -319,7 +301,7 @@ m m c g -p +b c "} (13,1,1) = {" @@ -337,7 +319,7 @@ i c u c -r +f "} (14,1,1) = {" a @@ -353,7 +335,7 @@ c c c c -r +f a "} (15,1,1) = {" @@ -366,8 +348,8 @@ c g g g -q -s +e +h a a a @@ -384,7 +366,7 @@ g g g g -q +e d l v diff --git a/_maps/RandomRuins/SpaceRuins/spacehotel.dmm b/_maps/RandomRuins/SpaceRuins/spacehotel.dmm index b24f14243d..5dff750d0f 100644 --- a/_maps/RandomRuins/SpaceRuins/spacehotel.dmm +++ b/_maps/RandomRuins/SpaceRuins/spacehotel.dmm @@ -5,11 +5,11 @@ "ab" = ( /obj/structure/grille, /turf/template_noop, -/area/template_noop) +/area/space/nearstation) "ac" = ( /obj/structure/lattice, /turf/template_noop, -/area/template_noop) +/area/space/nearstation) "ad" = ( /obj/machinery/power/solar, /obj/structure/cable/yellow{ @@ -774,7 +774,7 @@ /turf/open/floor/carpet, /area/ruin/space/has_grav/hotel) "cz" = ( -/obj/structure/sign/fire{ +/obj/structure/sign/warning/fire{ desc = "A sign that states the labeled room's number."; dir = 4; icon_state = "roomnum"; @@ -785,7 +785,7 @@ /turf/open/floor/carpet, /area/ruin/space/has_grav/hotel) "cA" = ( -/obj/structure/sign/fire{ +/obj/structure/sign/warning/fire{ desc = "A sign that states the labeled room's number."; dir = 8; icon_state = "roomnum"; @@ -802,7 +802,7 @@ /turf/open/floor/carpet, /area/ruin/space/has_grav/hotel) "cC" = ( -/obj/structure/sign/fire{ +/obj/structure/sign/warning/fire{ desc = "A sign that states the labeled room's number."; dir = 6; icon_state = "roomnum"; @@ -822,7 +822,7 @@ /turf/open/floor/carpet, /area/ruin/space/has_grav/hotel) "cE" = ( -/obj/structure/sign/fire{ +/obj/structure/sign/warning/fire{ desc = "A sign that states the labeled room's number."; dir = 10; icon_state = "roomnum"; @@ -946,7 +946,7 @@ /turf/open/floor/carpet, /area/ruin/space/has_grav/hotel) "cT" = ( -/obj/structure/sign/fire{ +/obj/structure/sign/warning/fire{ desc = "A sign that states the labeled room's number."; dir = 1; icon_state = "roomnum"; @@ -963,7 +963,7 @@ /turf/open/floor/carpet, /area/ruin/space/has_grav/hotel) "cV" = ( -/obj/structure/sign/fire{ +/obj/structure/sign/warning/fire{ desc = "A sign that states the labeled room's number."; icon_state = "roomnum"; name = "Room Number 1"; @@ -2172,7 +2172,7 @@ "gL" = ( /obj/structure/table, /obj/item/storage/box/donkpockets, -/obj/structure/sign/nosmoking_1{ +/obj/structure/sign/warning/nosmoking/circle{ pixel_y = 32 }, /turf/open/floor/plasteel/dark, @@ -2784,7 +2784,7 @@ /obj/structure/cable{ icon_state = "4-8" }, -/obj/structure/sign/fire{ +/obj/structure/sign/warning/fire{ desc = "A poster designed to remind the reader to wear appropriate insulation and head protection when working with material."; icon_state = "safety"; name = "Safety Poster"; @@ -3344,7 +3344,7 @@ /turf/open/floor/wood, /area/ruin/space/has_grav/hotel/pool) "jZ" = ( -/obj/structure/sign/nosmoking_2{ +/obj/structure/sign/warning/nosmoking{ pixel_y = 32 }, /turf/open/floor/plasteel, @@ -3464,7 +3464,7 @@ /obj/structure/cable{ icon_state = "0-8" }, -/obj/structure/sign/electricshock{ +/obj/structure/sign/warning/electricshock{ pixel_y = -32 }, /turf/open/floor/plasteel/yellow/side, @@ -3499,7 +3499,7 @@ /obj/structure/cable/yellow{ icon_state = "4-8" }, -/obj/structure/sign/vacuum{ +/obj/structure/sign/warning/vacuum{ pixel_y = -32 }, /turf/open/floor/plasteel/yellow/side, @@ -3678,7 +3678,7 @@ /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 1 }, -/obj/structure/sign/atmosplaque{ +/obj/structure/sign/plaques/atmos{ pixel_y = 32 }, /turf/open/floor/plating, @@ -3705,7 +3705,7 @@ "lb" = ( /obj/structure/table, /obj/machinery/recharger, -/obj/structure/sign/goldenplaque{ +/obj/structure/sign/plaques/golden{ pixel_x = -32 }, /turf/open/floor/plasteel/red/side{ @@ -4401,25 +4401,18 @@ aa aa aa aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab aa aa "} @@ -4475,29 +4468,22 @@ aa aa aa aa +ab +ab +ab +aa +ac aa aa +ac aa aa +ac aa aa +ac aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa +ab aa "} (3,1,1) = {" @@ -4551,30 +4537,23 @@ aa aa aa aa +ab +aa +ac aa aa +lV aa aa +lV aa aa +lV aa aa +lV aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa +ab aa "} (4,1,1) = {" @@ -4604,36 +4583,9 @@ aa aa aa aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa +ab +ab +ab ab ab ab @@ -4653,6 +4605,26 @@ aa aa aa aa +aa +ab +aa +aa +ac +aa +aa +lW +aa +aa +lW +aa +aa +lW +aa +aa +lW +aa +ab +aa "} (5,1,1) = {" aa @@ -4680,239 +4652,6 @@ aa aa aa aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -aa -ac -aa -aa -ac -aa -aa -ac -aa -aa -ac -aa -ab -aa -aa -aa -aa -aa -aa -"} -(6,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -aa -ac -aa -aa -lV -aa -aa -lV -aa -aa -lV -aa -aa -lV -aa -ab -aa -aa -aa -aa -aa -aa -"} -(7,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -ab -aa -aa -ac -aa -aa -lW -aa -aa -lW -aa -aa -lW -aa -aa -lW -aa -ab -aa -aa -aa -aa -aa -aa -"} -(8,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa ab aa aa @@ -4956,15 +4695,8 @@ lW aa ab aa -aa -aa -aa -aa -aa "} -(9,1,1) = {" -aa -aa +(6,1,1) = {" aa aa aa @@ -5033,15 +4765,8 @@ lW aa ab aa -aa -aa -aa -aa -aa "} -(10,1,1) = {" -aa -aa +(7,1,1) = {" aa aa aa @@ -5110,15 +4835,8 @@ lW aa aa ab -aa -aa -aa -aa -aa "} -(11,1,1) = {" -aa -aa +(8,1,1) = {" aa aa aa @@ -5187,15 +4905,8 @@ aj mO ac ab -aa -aa -aa -aa -aa "} -(12,1,1) = {" -aa -aa +(9,1,1) = {" aa aa aa @@ -5264,15 +4975,8 @@ lY aa aa ab -aa -aa -aa -aa -aa "} -(13,1,1) = {" -aa -aa +(10,1,1) = {" aa aa aa @@ -5341,15 +5045,8 @@ lY aa ab aa -aa -aa -aa -aa -aa "} -(14,1,1) = {" -aa -aa +(11,1,1) = {" aa aa aa @@ -5418,15 +5115,8 @@ lY aa ab aa -aa -aa -aa -aa -aa "} -(15,1,1) = {" -aa -aa +(12,1,1) = {" aa aa aa @@ -5495,15 +5185,8 @@ lY aa ab aa -aa -aa -aa -aa -aa "} -(16,1,1) = {" -aa -aa +(13,1,1) = {" aa aa aa @@ -5572,15 +5255,8 @@ lZ aa ab aa -aa -aa -aa -aa -aa "} -(17,1,1) = {" -aa -aa +(14,1,1) = {" aa aa aa @@ -5649,15 +5325,8 @@ ac aa ab aa -aa -aa -aa -aa -aa "} -(18,1,1) = {" -aa -aa +(15,1,1) = {" aa aa aa @@ -5726,15 +5395,8 @@ ab ab aa aa -aa -aa -aa -aa -aa "} -(19,1,1) = {" -aa -aa +(16,1,1) = {" aa aa aa @@ -5803,15 +5465,8 @@ aa aa aa aa -aa -aa -aa -aa -aa "} -(20,1,1) = {" -aa -aa +(17,1,1) = {" aa aa aa @@ -5880,15 +5535,8 @@ aa aa aa aa -aa -aa -aa -aa -aa "} -(21,1,1) = {" -aa -aa +(18,1,1) = {" aa aa aa @@ -5957,15 +5605,8 @@ aa aa aa aa -aa -aa -aa -aa -aa "} -(22,1,1) = {" -aa -aa +(19,1,1) = {" aa aa aa @@ -6034,15 +5675,8 @@ aa aa aa aa -aa -aa -aa -aa -aa "} -(23,1,1) = {" -aa -aa +(20,1,1) = {" aa aa aa @@ -6111,15 +5745,8 @@ aa aa aa aa -aa -aa -aa -aa -aa "} -(24,1,1) = {" -aa -aa +(21,1,1) = {" aa aa aa @@ -6188,15 +5815,8 @@ aa aa aa aa -aa -aa -aa -aa -aa "} -(25,1,1) = {" -aa -aa +(22,1,1) = {" aa aa aa @@ -6265,15 +5885,8 @@ aa aa aa aa -aa -aa -aa -aa -aa "} -(26,1,1) = {" -aa -aa +(23,1,1) = {" aa aa aa @@ -6342,15 +5955,8 @@ aa aa aa aa -aa -aa -aa -aa -aa "} -(27,1,1) = {" -aa -aa +(24,1,1) = {" aa aa aa @@ -6419,15 +6025,8 @@ aa aa aa aa -aa -aa -aa -aa -aa "} -(28,1,1) = {" -aa -aa +(25,1,1) = {" aa aa aa @@ -6496,15 +6095,8 @@ ab aa aa aa -aa -aa -aa -aa -aa "} -(29,1,1) = {" -aa -aa +(26,1,1) = {" aa aa aa @@ -6573,15 +6165,8 @@ ab aa aa aa -aa -aa -aa -aa -aa "} -(30,1,1) = {" -aa -aa +(27,1,1) = {" aa aa aa @@ -6650,15 +6235,8 @@ ab aa aa aa -aa -aa -aa -aa -aa "} -(31,1,1) = {" -aa -aa +(28,1,1) = {" aa aa aa @@ -6727,15 +6305,8 @@ ab aa aa aa -aa -aa -aa -aa -aa "} -(32,1,1) = {" -aa -aa +(29,1,1) = {" aa aa aa @@ -6804,15 +6375,8 @@ ab aa aa aa -aa -aa -aa -aa -aa "} -(33,1,1) = {" -aa -aa +(30,1,1) = {" aa aa aa @@ -6881,15 +6445,8 @@ ab aa aa aa -aa -aa -aa -aa -aa "} -(34,1,1) = {" -aa -aa +(31,1,1) = {" aa aa aa @@ -6958,15 +6515,8 @@ ab aa aa aa -aa -aa -aa -aa -aa "} -(35,1,1) = {" -aa -aa +(32,1,1) = {" aa aa aa @@ -7035,15 +6585,8 @@ ab aa aa aa -aa -aa -aa -aa -aa "} -(36,1,1) = {" -aa -aa +(33,1,1) = {" aa aa aa @@ -7112,15 +6655,8 @@ ab aa aa aa -aa -aa -aa -aa -aa "} -(37,1,1) = {" -aa -aa +(34,1,1) = {" aa aa aa @@ -7189,15 +6725,8 @@ ab aa aa aa -aa -aa -aa -aa -aa "} -(38,1,1) = {" -aa -aa +(35,1,1) = {" aa aa aa @@ -7266,15 +6795,8 @@ ab aa aa aa -aa -aa -aa -aa -aa "} -(39,1,1) = {" -aa -aa +(36,1,1) = {" aa aa aa @@ -7343,15 +6865,8 @@ ab aa aa aa -aa -aa -aa -aa -aa "} -(40,1,1) = {" -aa -aa +(37,1,1) = {" aa aa aa @@ -7420,15 +6935,8 @@ ab aa aa aa -aa -aa -aa -aa -aa "} -(41,1,1) = {" -aa -aa +(38,1,1) = {" aa aa aa @@ -7497,15 +7005,8 @@ ab aa aa aa -aa -aa -aa -aa -aa "} -(42,1,1) = {" -aa -aa +(39,1,1) = {" aa aa aa @@ -7574,15 +7075,8 @@ ab aa aa aa -aa -aa -aa -aa -aa "} -(43,1,1) = {" -aa -aa +(40,1,1) = {" aa aa aa @@ -7651,15 +7145,8 @@ ab aa aa aa -aa -aa -aa -aa -aa "} -(44,1,1) = {" -aa -aa +(41,1,1) = {" aa aa aa @@ -7728,15 +7215,8 @@ ab aa aa aa -aa -aa -aa -aa -aa "} -(45,1,1) = {" -aa -aa +(42,1,1) = {" aa aa aa @@ -7805,15 +7285,8 @@ ab aa aa aa -aa -aa -aa -aa -aa "} -(46,1,1) = {" -aa -aa +(43,1,1) = {" aa aa aa @@ -7882,15 +7355,8 @@ ab aa aa aa -aa -aa -aa -aa -aa "} -(47,1,1) = {" -aa -aa +(44,1,1) = {" aa aa aa @@ -7959,15 +7425,8 @@ ab aa aa aa -aa -aa -aa -aa -aa "} -(48,1,1) = {" -aa -aa +(45,1,1) = {" aa aa aa @@ -8036,15 +7495,8 @@ ab aa aa aa -aa -aa -aa -aa -aa "} -(49,1,1) = {" -aa -aa +(46,1,1) = {" aa aa aa @@ -8113,15 +7565,8 @@ ab aa aa aa -aa -aa -aa -aa -aa "} -(50,1,1) = {" -aa -aa +(47,1,1) = {" aa aa aa @@ -8190,15 +7635,8 @@ ab aa aa aa -aa -aa -aa -aa -aa "} -(51,1,1) = {" -aa -aa +(48,1,1) = {" aa aa aa @@ -8267,15 +7705,8 @@ ab aa aa aa -aa -aa -aa -aa -aa "} -(52,1,1) = {" -aa -aa +(49,1,1) = {" aa aa aa @@ -8344,15 +7775,8 @@ ab aa aa aa -aa -aa -aa -aa -aa "} -(53,1,1) = {" -aa -aa +(50,1,1) = {" aa aa aa @@ -8421,15 +7845,8 @@ ab aa aa aa -aa -aa -aa -aa -aa "} -(54,1,1) = {" -aa -aa +(51,1,1) = {" aa aa ab @@ -8498,15 +7915,8 @@ ab aa aa aa -aa -aa -aa -aa -aa "} -(55,1,1) = {" -aa -aa +(52,1,1) = {" aa ab aa @@ -8575,15 +7985,8 @@ ab aa aa aa -aa -aa -aa -aa -aa "} -(56,1,1) = {" -aa -aa +(53,1,1) = {" ab aa aa @@ -8652,15 +8055,8 @@ ab aa aa aa -aa -aa -aa -aa -aa "} -(57,1,1) = {" -aa -aa +(54,1,1) = {" ab ac ac @@ -8729,15 +8125,8 @@ ab aa aa aa -aa -aa -aa -aa -aa "} -(58,1,1) = {" -aa -aa +(55,1,1) = {" ab aa aa @@ -8806,15 +8195,8 @@ ab aa aa aa -aa -aa -aa -aa -aa "} -(59,1,1) = {" -aa -aa +(56,1,1) = {" ab aa aa @@ -8883,15 +8265,8 @@ ab aa aa aa -aa -aa -aa -aa -aa "} -(60,1,1) = {" -aa -aa +(57,1,1) = {" ab ac ac @@ -8960,15 +8335,8 @@ ab aa aa aa -aa -aa -aa -aa -aa "} -(61,1,1) = {" -aa -aa +(58,1,1) = {" ab aa aa @@ -9037,15 +8405,8 @@ ab aa aa aa -aa -aa -aa -aa -aa "} -(62,1,1) = {" -aa -aa +(59,1,1) = {" ab aa aa @@ -9114,15 +8475,8 @@ aa aa aa aa -aa -aa -aa -aa -aa "} -(63,1,1) = {" -aa -aa +(60,1,1) = {" ab ac ac @@ -9191,6 +8545,211 @@ aa aa aa aa +"} +(61,1,1) = {" +ab +aa +aa +aa +aa +aa +aa +aa +ag +aa +aa +aa +aa +aa +aa +aa +ab +aa +aa +aa +aa +aa +aa +aa +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(62,1,1) = {" +ab +aa +aa +aa +aa +aa +aa +aa +ag +aa +aa +aa +aa +aa +aa +aa +ab +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(63,1,1) = {" +ab +ac +ac +ad +ae +ae +ae +ae +ah +ak +ak +ak +ak +bd +ac +ac +ab +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa aa aa aa @@ -9198,239 +8757,6 @@ aa aa "} (64,1,1) = {" -aa -aa -ab -aa -aa -aa -aa -aa -aa -aa -ag -aa -aa -aa -aa -aa -aa -aa -ab -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(65,1,1) = {" -aa -aa -ab -aa -aa -aa -aa -aa -aa -aa -ag -aa -aa -aa -aa -aa -aa -aa -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(66,1,1) = {" -aa -aa -ab -ac -ac -ad -ae -ae -ae -ae -ah -ak -ak -ak -ak -bd -ac -ac -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(67,1,1) = {" -aa -aa ab aa aa @@ -9499,15 +8825,8 @@ aa aa aa aa -aa -aa -aa -aa -aa "} -(68,1,1) = {" -aa -aa +(65,1,1) = {" aa ab aa @@ -9576,15 +8895,8 @@ aa aa aa aa -aa -aa -aa -aa -aa "} -(69,1,1) = {" -aa -aa +(66,1,1) = {" aa aa ab @@ -9653,15 +8965,8 @@ aa aa aa aa -aa -aa -aa -aa -aa "} -(70,1,1) = {" -aa -aa +(67,1,1) = {" aa aa aa @@ -9730,394 +9035,4 @@ aa aa aa aa -aa -aa -aa -aa -aa -"} -(71,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(72,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(73,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(74,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(75,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa "} diff --git a/_maps/RandomRuins/SpaceRuins/turretedoutpost.dmm b/_maps/RandomRuins/SpaceRuins/turretedoutpost.dmm index f55f7cf0e6..953c1b2296 100644 --- a/_maps/RandomRuins/SpaceRuins/turretedoutpost.dmm +++ b/_maps/RandomRuins/SpaceRuins/turretedoutpost.dmm @@ -5,7 +5,7 @@ "ab" = ( /obj/structure/lattice, /turf/template_noop, -/area/template_noop) +/area/space/nearstation) "ac" = ( /obj/structure/grille, /turf/open/floor/plating/airless, diff --git a/_maps/RandomRuins/SpaceRuins/vaporwave.dmm b/_maps/RandomRuins/SpaceRuins/vaporwave.dmm index 896a34e5db..502c677325 100644 --- a/_maps/RandomRuins/SpaceRuins/vaporwave.dmm +++ b/_maps/RandomRuins/SpaceRuins/vaporwave.dmm @@ -184,10 +184,6 @@ /obj/effect/overlay/palmtree_r, /turf/open/floor/plating/asteroid/airless, /area/ruin/unpowered/no_grav) -"N" = ( -/obj/effect/turf_decal/sand, -/turf/open/floor/plasteel/airless/asteroid, -/area/ruin/unpowered/no_grav) "O" = ( /obj/structure/chair/comfy/black{ dir = 8 @@ -201,10 +197,6 @@ /obj/machinery/light/small, /turf/open/floor/plasteel/vaporwave, /area/ruin/space/has_grav/powered/aesthetic) -"Q" = ( -/obj/machinery/light/small, -/turf/open/floor/plasteel/vaporwave, -/area/ruin/space/has_grav/powered/aesthetic) "R" = ( /obj/machinery/light/small{ dir = 1 @@ -213,14 +205,6 @@ initial_gas_mix = "TEMP=2.7" }, /area/ruin/unpowered/no_grav) -"S" = ( -/obj/machinery/light/small{ - dir = 1 - }, -/turf/open/floor/plating/astplate{ - initial_gas_mix = "TEMP=2.7" - }, -/area/ruin/unpowered/no_grav) (1,1,1) = {" a @@ -372,7 +356,7 @@ k f D J -N +I d "} (10,1,1) = {" @@ -390,7 +374,7 @@ z E K E -N +I "} (11,1,1) = {" a @@ -407,7 +391,7 @@ f D L E -N +I "} (12,1,1) = {" a diff --git a/_maps/RandomRuins/SpaceRuins/way_home.dmm b/_maps/RandomRuins/SpaceRuins/way_home.dmm index eb3f983f85..ed455736c2 100644 --- a/_maps/RandomRuins/SpaceRuins/way_home.dmm +++ b/_maps/RandomRuins/SpaceRuins/way_home.dmm @@ -36,13 +36,8 @@ a a a a -a -a -a -a -a -a -a +b +b a "} (2,1,1) = {" @@ -68,14 +63,9 @@ a a a a -a -a -a -a -a -a -a -a +b +b +b "} (3,1,1) = {" a @@ -101,12 +91,7 @@ a a a a -a b -b -a -a -a a "} (4,1,1) = {" @@ -134,11 +119,6 @@ a a a a -b -b -b -a -a a "} (5,1,1) = {" @@ -152,22 +132,17 @@ a a a a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a b +b +a +a +a +a +a +a +a +a +a a a a @@ -182,17 +157,12 @@ a a a a -a -a -a -a -a -a -a -a -a -a -a +b +b +b +b +b +b a a a @@ -213,18 +183,13 @@ a a a a -a -a -a -a -a b b -a -a -a -a -a +b +b +b +b +b a a a @@ -243,19 +208,14 @@ a a a a -a -a -a -a -a b b b b b b -a -a +b +b a a a @@ -272,12 +232,7 @@ a (9,1,1) = {" a a -a -a -a -a -a -a +b a b b @@ -286,8 +241,8 @@ b b b b -a -a +b +c a a a @@ -304,11 +259,6 @@ a (10,1,1) = {" a a -a -a -a -a -a b b b @@ -317,10 +267,10 @@ b b b b -a -a -a -a +b +b +c +c a a a @@ -336,10 +286,7 @@ a (11,1,1) = {" a a -a -a b -a b b b @@ -349,10 +296,8 @@ b b b c -a -a -a -a +c +c a a a @@ -367,9 +312,6 @@ a "} (12,1,1) = {" a -a -a -a b b b @@ -382,12 +324,10 @@ b b c c -a -a -a -a -a -a +c +c +c +c a a a @@ -398,10 +338,6 @@ a a "} (13,1,1) = {" -a -a -a -a b b b @@ -414,89 +350,22 @@ b c c c +c +c +c +c +c +c +c a a a a a -a -a -a -a -a -a -a -a -a +b "} (14,1,1) = {" a -a -a -b -b -b -b -b -b -b -b -b -b -c -c -c -c -c -c -a -a -a -a -a -a -a -a -a -a -a -"} -(15,1,1) = {" -a -a -b -b -b -b -b -b -b -b -b -c -c -c -c -c -c -c -c -c -c -a -a -a -a -a -b -a -a -a -"} -(16,1,1) = {" -a -a -a b b b @@ -521,23 +390,74 @@ c a b b +"} +(15,1,1) = {" a a +b +b +b +b +b +b +b +c +a +a +a +a +c +c +c +c +c +c +b +b +b +b +a +"} +(16,1,1) = {" +a +a +b +b +b +b +b +b +b +a +a +a +a +a +a +c +c +c +b +b +b +b +b +b a "} (17,1,1) = {" a a +b +b a a b b b -b -b -b -b -c +a +a +a a a a @@ -545,16 +465,11 @@ a c c c -c -c -c b b b b -a -a -a +b a "} (18,1,1) = {" @@ -562,13 +477,13 @@ a a a a +a +a +a b -b -b -b -b -b -b +a +a +a a a a @@ -583,24 +498,20 @@ b b b b -b -a -a -a -a "} (19,1,1) = {" a a a a -b -b a a -b -b -b +a +a +a +a +a +a a a a @@ -609,17 +520,11 @@ a a a c -c -c b b b b b -a -a -a -a "} (20,1,1) = {" a @@ -631,7 +536,6 @@ a a a a -b a a a @@ -641,17 +545,13 @@ a a a a -c -c -c +a +a +a b b b b -b -a -a -a "} (21,1,1) = {" a @@ -675,14 +575,9 @@ a a a a -c -b -b -b -b -b -a a +b +b a "} (22,1,1) = {" @@ -711,265 +606,4 @@ a a b b -b -b -a -a -a -"} -(23,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -b -a -a -a -a -"} -(24,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -b -a -a -a -"} -(25,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(26,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(27,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(28,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(29,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(30,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a "} diff --git a/_maps/RandomRuins/SpaceRuins/whiteshipruin_box.dmm b/_maps/RandomRuins/SpaceRuins/whiteshipruin_box.dmm index 71196719a4..8660ae3dea 100644 --- a/_maps/RandomRuins/SpaceRuins/whiteshipruin_box.dmm +++ b/_maps/RandomRuins/SpaceRuins/whiteshipruin_box.dmm @@ -59,9 +59,6 @@ "al" = ( /turf/open/floor/plating, /area/ruin/space/has_grav/whiteship/box) -"am" = ( -/turf/closed/wall/mineral/titanium/interior, -/area/ruin/space/has_grav/whiteship/box) "an" = ( /obj/structure/rack, /obj/item/clothing/suit/space/hardsuit/medical, @@ -320,7 +317,6 @@ aa aa aa aa -aa "} (2,1,1) = {" aa @@ -332,9 +328,9 @@ aa aa aa ab -am +aj ae -am +aj ab aa aa @@ -344,7 +340,6 @@ aa aa aa aa -aa "} (3,1,1) = {" aa @@ -368,7 +363,6 @@ aa aa aa aa -aa "} (4,1,1) = {" aa @@ -392,7 +386,6 @@ aa aa aa aa -aa "} (5,1,1) = {" aa @@ -416,7 +409,6 @@ aa aa aa aa -aa "} (6,1,1) = {" aa @@ -440,7 +432,6 @@ aa aa aa aa -aa "} (7,1,1) = {" aa @@ -464,7 +455,6 @@ aa aa aa aa -aa "} (8,1,1) = {" aa @@ -488,7 +478,6 @@ aa aa aa aa -aa "} (9,1,1) = {" aa @@ -512,7 +501,6 @@ aa aa aa aa -aa "} (10,1,1) = {" aa @@ -524,9 +512,9 @@ aa aa aa ab -am +aj ae -am +aj ab aa aa @@ -536,7 +524,6 @@ aa aa aa aa -aa "} (11,1,1) = {" aa @@ -560,7 +547,6 @@ aa aa aa aa -aa "} (12,1,1) = {" aa @@ -584,7 +570,6 @@ aa aa aa aa -aa "} (13,1,1) = {" aa @@ -608,7 +593,6 @@ aa aa aa aa -aa "} (14,1,1) = {" aa @@ -620,9 +604,9 @@ aa aa ab ab -am +aj ae -am +aj ab ab aa @@ -632,7 +616,6 @@ aa aa aa aa -aa "} (15,1,1) = {" ab @@ -643,11 +626,11 @@ ah ar aa ab -am +aj ae ae ae -am +aj ab aa ad @@ -656,7 +639,6 @@ ah ah ar ab -aa "} (16,1,1) = {" ab @@ -680,7 +662,6 @@ ai ai ab ab -aa "} (17,1,1) = {" aa @@ -690,13 +671,13 @@ al al aj ab -am +aj ae ae ae ae ae -am +aj ab aj al @@ -704,7 +685,6 @@ al aj ab aa -aa "} (18,1,1) = {" aa @@ -728,7 +708,6 @@ aj ab aa aa -aa "} (19,1,1) = {" aa @@ -752,7 +731,6 @@ ab aa aa aa -aa "} (20,1,1) = {" aa @@ -776,14 +754,13 @@ ab aa aa aa -aa "} (21,1,1) = {" aa aa ab ab -am +aj au ae ae @@ -800,13 +777,12 @@ ab ab aa aa -aa "} (22,1,1) = {" aa ab ab -am +aj ae ae ae @@ -824,7 +800,6 @@ ab ab ab aa -aa "} (23,1,1) = {" ab @@ -833,7 +808,7 @@ ab ab ab ab -am +aj ae ab aD @@ -845,10 +820,9 @@ ae ae ac ae -am +aj ab aa -aa "} (24,1,1) = {" ac @@ -856,7 +830,7 @@ ae ae an an -am +aj ab aA ab @@ -872,7 +846,6 @@ ae aY ab ab -aa "} (25,1,1) = {" ab @@ -894,9 +867,8 @@ ae ab ae ae -am +aj ab -aa "} (26,1,1) = {" ab @@ -920,7 +892,6 @@ aX ae ae ab -aa "} (27,1,1) = {" ab @@ -944,7 +915,6 @@ ae ae ba ab -aa "} (28,1,1) = {" ab @@ -954,7 +924,7 @@ ae ae ae ab -am +aj ae ae ae @@ -968,7 +938,6 @@ ae ae ae ab -aa "} (29,1,1) = {" ab @@ -976,7 +945,7 @@ ae ae ae ae -am +aj ab ab ab @@ -992,16 +961,15 @@ ae ae ae ab -aa "} (30,1,1) = {" ab ae ae ae -am +aj ab -am +aj ae ae ae @@ -1014,9 +982,8 @@ aF ab ae ae -am +aj ab -aa "} (31,1,1) = {" ac @@ -1024,7 +991,7 @@ ae ak ae ab -am +aj ae ae ae @@ -1035,12 +1002,11 @@ ae ae ae ae -am -am +aj +aj aZ ab aa -aa "} (32,1,1) = {" ab @@ -1064,7 +1030,6 @@ ab ab ab aa -aa "} (33,1,1) = {" aa @@ -1083,12 +1048,11 @@ ae ae ae ae -am +aj ab ab aa aa -aa "} (34,1,1) = {" aa @@ -1096,7 +1060,7 @@ aa ab aq ab -am +aj az ae ae @@ -1106,13 +1070,12 @@ aF ae ae ae -am +aj ab ab aa aa aa -aa "} (35,1,1) = {" aa @@ -1136,5 +1099,4 @@ aa aa aa aa -aa "} diff --git a/_maps/RandomZLevels/Academy.dmm b/_maps/RandomZLevels/Academy.dmm index 535cb1377c..19653468d6 100644 --- a/_maps/RandomZLevels/Academy.dmm +++ b/_maps/RandomZLevels/Academy.dmm @@ -457,12 +457,6 @@ "bF" = ( /turf/closed/wall/mineral/titanium, /area/awaymission/academy/classrooms) -"bG" = ( -/turf/closed/wall/mineral/titanium, -/area/awaymission/academy/classrooms) -"bH" = ( -/turf/closed/wall/mineral/titanium, -/area/awaymission/academy/classrooms) "bI" = ( /obj/machinery/light{ dir = 8 @@ -547,9 +541,6 @@ "bV" = ( /turf/open/floor/plasteel/floorgrime, /area/awaymission/academy/classrooms) -"bW" = ( -/turf/closed/wall/mineral/titanium, -/area/awaymission/academy/classrooms) "bX" = ( /obj/effect/decal/cleanable/ash, /turf/open/floor/engine, @@ -631,11 +622,6 @@ }, /turf/open/floor/plasteel/dark, /area/awaymission/academy/headmaster) -"cn" = ( -/turf/open/floor/plasteel/vault{ - dir = 5 - }, -/area/awaymission/academy/headmaster) "co" = ( /obj/machinery/portable_atmospherics/scrubber/huge, /turf/open/floor/plating, @@ -658,9 +644,6 @@ }, /turf/open/floor/plasteel, /area/awaymission/academy/classrooms) -"cs" = ( -/turf/closed/wall/mineral/titanium, -/area/awaymission/academy/classrooms) "ct" = ( /obj/structure/chair, /turf/open/floor/plasteel, @@ -741,7 +724,7 @@ /turf/open/floor/plasteel/dark, /area/awaymission/academy/headmaster) "cH" = ( -/obj/structure/sign/nosmoking_1, +/obj/structure/sign/warning/nosmoking/circle, /turf/closed/wall, /area/awaymission/academy/headmaster) "cI" = ( @@ -795,12 +778,6 @@ dir = 6 }, /area/awaymission/academy/classrooms) -"cS" = ( -/obj/machinery/light{ - dir = 8 - }, -/turf/open/floor/plasteel, -/area/awaymission/academy/headmaster) "cT" = ( /obj/machinery/light{ dir = 8 @@ -1908,12 +1885,6 @@ dir = 4 }, /area/awaymission/academy/classrooms) -"gw" = ( -/obj/machinery/light{ - dir = 8 - }, -/turf/open/floor/wood, -/area/awaymission/academy/classrooms) "gx" = ( /obj/structure/closet/athletic_mixed, /turf/open/floor/engine/cult, @@ -2223,24 +2194,12 @@ }, /turf/open/floor/plasteel, /area/awaymission/academy/academyaft) -"hu" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/turf/open/floor/plasteel/hydrofloor, -/area/awaymission/academy/academyaft) "hv" = ( /obj/structure/cable{ icon_state = "4-8" }, /turf/open/floor/plasteel, /area/awaymission/academy/academyaft) -"hw" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/turf/open/floor/plating, -/area/awaymission/academy/academyaft) "hx" = ( /obj/structure/cable{ icon_state = "0-8" @@ -2315,12 +2274,6 @@ dir = 8 }, /area/awaymission/academy/academyaft) -"hG" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/turf/open/floor/plasteel, -/area/awaymission/academy/academyaft) "hH" = ( /obj/structure/cable{ icon_state = "4-8" @@ -3149,12 +3102,6 @@ "kf" = ( /turf/open/floor/plating, /area/awaymission/academy/academygate) -"kg" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/turf/open/floor/carpet, -/area/awaymission/academy/academygate) "kh" = ( /obj/machinery/power/apc{ dir = 1; @@ -4011,20 +3958,6 @@ }, /turf/open/floor/carpet, /area/awaymission/academy/headmaster) -"np" = ( -/obj/structure/frame/computer{ - anchored = 1; - dir = 4 - }, -/turf/open/floor/carpet, -/area/awaymission/academy/headmaster) -"nq" = ( -/obj/structure/frame/computer{ - anchored = 1; - dir = 8 - }, -/turf/open/floor/carpet, -/area/awaymission/academy/headmaster) (1,1,1) = {" aa diff --git a/_maps/RandomZLevels/beach.dmm b/_maps/RandomZLevels/beach.dmm index 10fa8be861..dddeadb0be 100644 --- a/_maps/RandomZLevels/beach.dmm +++ b/_maps/RandomZLevels/beach.dmm @@ -144,7 +144,7 @@ /area/awaymission/beach) "aA" = ( /obj/machinery/vending/boozeomat{ - emagged = 1 + set_obj_flags = "EMAGGED" }, /turf/open/floor/wood, /area/awaymission/beach) @@ -233,9 +233,6 @@ /obj/effect/overlay/palmtree_r, /turf/open/floor/plating/beach/sand, /area/space) -"aR" = ( -/turf/open/floor/plating/beach/sand, -/area/awaymission/beach) "aS" = ( /obj/machinery/door/airlock/sandstone, /turf/open/floor/wood, diff --git a/_maps/RandomZLevels/caves.dmm b/_maps/RandomZLevels/caves.dmm index b1e840ac15..46f33f533b 100644 --- a/_maps/RandomZLevels/caves.dmm +++ b/_maps/RandomZLevels/caves.dmm @@ -303,7 +303,7 @@ /obj/machinery/light/small/built{ dir = 4 }, -/obj/structure/sign/pods{ +/obj/structure/sign/warning/pods{ desc = "A warning sign which warns of potential mech traffic to and from different levels of the mine."; name = "\improper MECH TUNNEL PASSAGE B1 TO A2"; pixel_x = 32 @@ -373,9 +373,6 @@ initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/BMP_asteroid/level_three) -"bd" = ( -/turf/closed/wall/mineral/cult, -/area/awaymission/caves/BMP_asteroid/level_four) "be" = ( /mob/living/simple_animal/hostile/spawner/mining/goliath, /turf/open/floor/plating/asteroid/basalt{ @@ -625,7 +622,7 @@ }, /area/awaymission/caves/BMP_asteroid/level_two) "bP" = ( -/obj/structure/sign/pods{ +/obj/structure/sign/warning/pods{ desc = "A warning sign which warns of potential mech traffic to and from different levels of the mine."; name = "\improper MECH TUNNEL PASSAGE A2 TO B1"; pixel_x = 32 @@ -769,7 +766,7 @@ }, /area/awaymission/caves/BMP_asteroid) "ck" = ( -/obj/structure/sign/xeno_warning_mining{ +/obj/structure/sign/warning/xeno_mining{ pixel_y = -32 }, /turf/open/floor/plating/asteroid/basalt{ @@ -896,7 +893,7 @@ }, /area/awaymission/caves/research) "cE" = ( -/obj/structure/sign/vacuum{ +/obj/structure/sign/warning/vacuum{ name = "\improper LOW AIR AREA"; pixel_x = 32 }, @@ -925,18 +922,8 @@ initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/BMP_asteroid/level_two) -"cI" = ( -/turf/open/floor/plating{ - initial_gas_mix = "n2=23;o2=14" - }, -/area/awaymission/caves/BMP_asteroid/level_two) -"cJ" = ( -/turf/open/floor/plating/asteroid/basalt{ - initial_gas_mix = "n2=23;o2=14" - }, -/area/awaymission/caves/BMP_asteroid/level_two) "cK" = ( -/obj/structure/sign/securearea{ +/obj/structure/sign/warning/securearea{ desc = "A warning sign which reads 'HOLY SHIT NIGGA WHAT ARE YOU DOING'."; name = "\improper HOLY SHIT NIGGA WHAT ARE YOU DOING" }, @@ -1055,7 +1042,7 @@ }, /area/awaymission/caves/research) "cZ" = ( -/obj/structure/sign/vacuum{ +/obj/structure/sign/warning/vacuum{ name = "\improper LOW AIR AREA"; pixel_x = 32 }, @@ -1081,7 +1068,7 @@ /obj/machinery/light/small{ dir = 8 }, -/obj/structure/sign/pods{ +/obj/structure/sign/warning/pods{ desc = "A warning sign which warns of potential mech traffic to and from different levels of the mine."; name = "\improper MECH TUNNEL PASSAGE A2 TO A1"; pixel_x = -32 @@ -1330,12 +1317,6 @@ initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/BMP_asteroid) -"dV" = ( -/obj/machinery/door/airlock{ - name = "Dorm" - }, -/turf/open/floor/wood, -/area/awaymission/caves/northblock) "dW" = ( /turf/closed/wall, /area/awaymission/caves/BMP_asteroid) @@ -1761,7 +1742,7 @@ }, /area/awaymission/caves/BMP_asteroid/level_two) "fp" = ( -/obj/structure/sign/pods{ +/obj/structure/sign/warning/pods{ desc = "A warning sign which warns of potential mech traffic to and from different levels of the mine."; name = "\improper MECH TUNNEL PASSAGE A1 TO A2"; pixel_x = -32 @@ -1880,7 +1861,7 @@ /turf/open/floor/plating, /area/awaymission/caves/BMP_asteroid) "fI" = ( -/obj/structure/sign/bluecross{ +/obj/structure/sign/departments/medbay{ pixel_x = -32 }, /turf/open/floor/plating/asteroid/basalt{ @@ -1896,7 +1877,7 @@ /turf/open/floor/plasteel, /area/awaymission/caves/BMP_asteroid) "fL" = ( -/obj/structure/sign/examroom{ +/obj/structure/sign/departments/examroom{ pixel_y = 32 }, /turf/open/floor/plasteel, @@ -1956,12 +1937,6 @@ initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/BMP_asteroid) -"fV" = ( -/turf/open/floor/plasteel/elevatorshaft{ - name = "elevator flooring"; - initial_gas_mix = "n2=23;o2=14" - }, -/area/awaymission/caves/BMP_asteroid) "fW" = ( /obj/structure/girder, /turf/open/floor/plating{ @@ -1992,11 +1967,6 @@ /obj/machinery/microwave, /turf/open/floor/plasteel, /area/awaymission/caves/BMP_asteroid) -"fZ" = ( -/turf/open/floor/plating{ - initial_gas_mix = "n2=23;o2=14" - }, -/area/awaymission/caves/BMP_asteroid) "ga" = ( /obj/structure/ladder/unbreakable{ anchored = 1; @@ -7642,7 +7612,7 @@ dE dI dM dT -dV +dI eb em du @@ -14601,7 +14571,7 @@ bV fJ fQ fQ -fV +fQ fQ fJ bV @@ -16144,7 +16114,7 @@ bM bM bM fW -fZ +fy ev gf gm @@ -16401,10 +16371,10 @@ bM bM bM bM -fZ +fy gc gg -fZ +fy ev gm dW @@ -16659,7 +16629,7 @@ bM bM bM bM -fZ +fy gh bM go @@ -17172,11 +17142,11 @@ bM bM bM bM -fZ -fZ +fy +fy gi -fZ -fZ +fy +fy gq gy fH @@ -17430,9 +17400,9 @@ bM bM bM bM -fZ +fy dW -fZ +fy gq gu gq @@ -17687,7 +17657,7 @@ bM bM bM bM -fZ +fy gj ev gr @@ -17944,7 +17914,7 @@ bM bM bM bM -fZ +fy fW ev gq @@ -18467,7 +18437,7 @@ bL bL bV bV -fZ +fy gF gH ej @@ -18725,9 +18695,9 @@ bV bV bV bV -fZ +fy gI -fZ +fy gD eu eu @@ -18982,9 +18952,9 @@ bV bV bV gD -fZ -fZ -fZ +fy +fy +fy bV bV bV @@ -19238,11 +19208,11 @@ bL bV fW gB -fZ +fy gB gJ -fZ -fZ +fy +fy bM eu bV @@ -19499,7 +19469,7 @@ gE gG gJ gB -fZ +fy bM bV eu @@ -54288,7 +54258,7 @@ ao ao ao ai -bd +ax ad ad ad @@ -54811,7 +54781,7 @@ ad ad ad ad -bd +ax ao ai ao @@ -55056,7 +55026,7 @@ ax ai ai ai -bd +ax ad ad ad @@ -55324,7 +55294,7 @@ ad ad ad ad -bd +ax ao ai ai @@ -56094,7 +56064,7 @@ ad ad ad ad -bd +ax ao ai ai @@ -56200,12 +56170,12 @@ bJ bJ bJ bJ -cI -cI -cI -cI -cI -cI +bT +bT +bT +bT +bT +bT bJ bJ bJ @@ -56351,7 +56321,7 @@ ad ad ad ad -bd +ax ao ao ai @@ -56609,7 +56579,7 @@ ad ad ad ad -bd +ax ao am ai @@ -56991,7 +56961,7 @@ bJ cq bO bO -cI +bT bO bO bO @@ -57125,10 +57095,10 @@ aR ad ad ad -bd -bd +ax +ax ao -bd +ax ad ad ai @@ -57248,7 +57218,7 @@ bJ bJ bO bO -cI +bT bO bO bO @@ -57374,7 +57344,7 @@ ad ad ai ai -bd +ax ao ao ao @@ -57505,7 +57475,7 @@ bJ bJ bO bO -cI +bT bO bJ bJ @@ -57649,7 +57619,7 @@ ad ad ad ad -bd +ax ao ad ad @@ -57762,7 +57732,7 @@ bJ bJ bO bO -cI +bT bO bJ cm @@ -57884,8 +57854,8 @@ ax ax ad ad -bd -bd +ax +ax aR ao ao @@ -57896,7 +57866,7 @@ ao ao ao ao -bd +ax ai ad ad @@ -58019,7 +57989,7 @@ bO bO bO bO -cI +bT bO bJ cm @@ -58162,7 +58132,7 @@ ad ad ad ad -bd +ax ao ai ai @@ -58418,7 +58388,7 @@ ad ad ad ad -bd +ax ao ao am @@ -58675,7 +58645,7 @@ ad ad ad ad -bd +ax ao ao ai @@ -58912,8 +58882,8 @@ ax ad ad ai -bd -bd +ax +ax aR aR ao @@ -58924,14 +58894,14 @@ ao ao ao ao -bd +ax ai ai ad ad ad ad -bd +ax aw aB ai @@ -59188,7 +59158,7 @@ ad ad ad ad -bd +ax ao am ai @@ -59688,11 +59658,11 @@ ad ad ad ai -bd +ax ao ao ao -bd +ax ai ai ai @@ -59702,7 +59672,7 @@ ad ad ad ad -bd +ax ao ai ai @@ -60214,8 +60184,8 @@ ad ad ad ad -bd -bd +ax +ax ao ao am @@ -60469,7 +60439,7 @@ ad ad ad ad -bd +ax al ai ao @@ -60718,7 +60688,7 @@ ad ai ao ai -bd +ax ad ad ad @@ -61234,11 +61204,11 @@ ai aq ad al -bd -bd +ax +ax ai ad -bd +ax ai ao ai diff --git a/_maps/RandomZLevels/centcomAway.dmm b/_maps/RandomZLevels/centcomAway.dmm index 94f830e139..83ad870fb3 100644 --- a/_maps/RandomZLevels/centcomAway.dmm +++ b/_maps/RandomZLevels/centcomAway.dmm @@ -370,12 +370,6 @@ }, /turf/open/floor/plating, /area/awaymission/centcomAway/hangar) -"br" = ( -/turf/open/floor/plasteel/vault{ - dir = 5 - }, -/turf/closed/wall/mineral/titanium, -/area/awaymission/centcomAway/hangar) "bs" = ( /obj/structure/closet/crate, /turf/open/floor/plasteel/vault{ @@ -434,27 +428,12 @@ }, /turf/open/floor/plating, /area/awaymission/centcomAway/hangar) -"bD" = ( -/turf/closed/wall/mineral/titanium, -/area/awaymission/centcomAway/hangar) -"bE" = ( -/turf/closed/wall/mineral/titanium, -/area/awaymission/centcomAway/hangar) "bF" = ( /obj/machinery/door/airlock/external{ name = "Salvage Shuttle Dock" }, /turf/open/floor/plating, /area/awaymission/centcomAway/hangar) -"bG" = ( -/turf/closed/wall/mineral/titanium, -/area/awaymission/centcomAway/hangar) -"bH" = ( -/turf/closed/wall/mineral/titanium, -/area/awaymission/centcomAway/hangar) -"bI" = ( -/turf/closed/wall/mineral/titanium, -/area/awaymission/centcomAway/hangar) "bJ" = ( /obj/structure/chair/comfy/brown, /turf/open/floor/plasteel/bar{ @@ -503,12 +482,6 @@ "bR" = ( /turf/open/floor/plating, /area/awaymission/centcomAway/hangar) -"bS" = ( -/turf/closed/wall/mineral/titanium/interior, -/area/awaymission/centcomAway/hangar) -"bT" = ( -/turf/closed/wall/mineral/titanium/interior, -/area/awaymission/centcomAway/hangar) "bU" = ( /obj/structure/closet/emcloset, /turf/open/floor/mineral/titanium/blue, @@ -545,12 +518,6 @@ }, /turf/open/floor/mineral/titanium/blue, /area/awaymission/centcomAway/hangar) -"bZ" = ( -/turf/closed/wall/mineral/titanium, -/area/awaymission/centcomAway/hangar) -"ca" = ( -/turf/closed/wall/mineral/titanium, -/area/awaymission/centcomAway/hangar) "cb" = ( /obj/item/paper_bin, /obj/structure/table, @@ -578,7 +545,7 @@ }, /area/awaymission/centcomAway/cafe) "cg" = ( -/obj/structure/sign/botany, +/obj/structure/sign/departments/botany, /turf/closed/wall/r_wall, /area/awaymission/centcomAway/cafe) "ch" = ( @@ -646,21 +613,15 @@ /turf/open/floor/plating, /area/awaymission/centcomAway/maint) "cv" = ( -/obj/structure/sign/vacuum, +/obj/structure/sign/warning/vacuum, /turf/closed/wall/r_wall, /area/awaymission/centcomAway/maint) -"cw" = ( -/turf/closed/wall/mineral/titanium, -/area/awaymission/centcomAway/hangar) "cx" = ( /obj/machinery/door/airlock/maintenance_hatch{ req_access_txt = "101" }, /turf/open/floor/plating, /area/awaymission/centcomAway/hangar) -"cy" = ( -/turf/closed/wall/mineral/titanium, -/area/awaymission/centcomAway/hangar) "cz" = ( /turf/closed/wall, /area/awaymission/centcomAway/hangar) @@ -696,9 +657,6 @@ /obj/machinery/biogenerator, /turf/open/floor/plasteel/hydrofloor, /area/awaymission/centcomAway/cafe) -"cI" = ( -/turf/closed/wall/mineral/titanium, -/area/awaymission/centcomAway/hangar) "cJ" = ( /obj/structure/table/reinforced, /obj/item/paper_bin, @@ -737,12 +695,6 @@ }, /turf/open/floor/mineral/titanium/blue, /area/awaymission/centcomAway/hangar) -"cQ" = ( -/turf/closed/wall/mineral/titanium, -/area/awaymission/centcomAway/hangar) -"cR" = ( -/turf/open/floor/plating, -/area/awaymission/centcomAway/hangar) "cS" = ( /obj/structure/disposalpipe/segment{ dir = 6 @@ -895,9 +847,6 @@ dir = 4 }, /area/awaymission/centcomAway/cafe) -"du" = ( -/turf/closed/wall/mineral/titanium, -/area/awaymission/centcomAway/hangar) "dv" = ( /obj/structure/closet/crate, /obj/effect/turf_decal/stripes/line{ @@ -1023,25 +972,6 @@ }, /turf/open/floor/plating, /area/awaymission/centcomAway/cafe) -"dR" = ( -/turf/closed/wall/mineral/titanium, -/area/awaymission/centcomAway/hangar) -"dS" = ( -/obj/effect/spawner/structure/window/hollow/reinforced/end{ - dir = 8 - }, -/turf/open/floor/plating, -/area/awaymission/centcomAway/cafe) -"dT" = ( -/obj/effect/spawner/structure/window/hollow/reinforced/end{ - dir = 4 - }, -/turf/open/floor/plating, -/area/awaymission/centcomAway/cafe) -"dU" = ( -/obj/effect/spawner/structure/window/hollow/reinforced/middle, -/turf/open/floor/plating, -/area/awaymission/centcomAway/cafe) "dV" = ( /obj/structure/closet/secure_closet/freezer/kitchen, /turf/open/floor/plasteel/red, @@ -1119,10 +1049,6 @@ icon_state = "asteroid9" }, /area/awaymission/centcomAway/cafe) -"ei" = ( -/obj/effect/spawner/structure/window/hollow/reinforced, -/turf/open/floor/plating, -/area/awaymission/centcomAway/cafe) "ej" = ( /obj/machinery/vending/dinnerware, /turf/open/floor/plasteel/red, @@ -1162,15 +1088,6 @@ /obj/item/reagent_containers/food/condiment/enzyme, /turf/open/floor/plasteel/red, /area/awaymission/centcomAway/cafe) -"eq" = ( -/turf/closed/wall/mineral/titanium, -/area/awaymission/centcomAway/hangar) -"er" = ( -/turf/closed/wall/mineral/titanium, -/area/awaymission/centcomAway/hangar) -"es" = ( -/turf/closed/wall/mineral/titanium, -/area/awaymission/centcomAway/hangar) "et" = ( /obj/machinery/door/airlock/hatch{ name = "Cockpit"; @@ -1434,7 +1351,7 @@ }, /area/awaymission/centcomAway/general) "ft" = ( -/obj/structure/sign/electricshock, +/obj/structure/sign/warning/electricshock, /turf/closed/wall/r_wall, /area/awaymission/centcomAway/general) "fu" = ( @@ -1453,14 +1370,8 @@ }, /turf/open/floor/plating, /area/awaymission/centcomAway/general) -"fx" = ( -/obj/effect/spawner/structure/window/hollow/reinforced/end{ - dir = 4 - }, -/turf/open/floor/plating, -/area/awaymission/centcomAway/general) "fy" = ( -/obj/structure/sign/bluecross_2, +/obj/structure/sign/departments/medbay/alt, /turf/closed/wall/r_wall, /area/awaymission/centcomAway/general) "fz" = ( @@ -1575,7 +1486,7 @@ }, /area/awaymission/centcomAway/general) "fQ" = ( -/obj/structure/sign/science, +/obj/structure/sign/departments/science, /turf/closed/wall/r_wall, /area/awaymission/centcomAway/general) "fR" = ( @@ -1648,12 +1559,6 @@ }, /turf/open/floor/plating, /area/awaymission/centcomAway/general) -"ge" = ( -/obj/effect/spawner/structure/window/hollow/reinforced/end{ - dir = 4 - }, -/turf/open/floor/plating, -/area/awaymission/centcomAway/general) "gf" = ( /obj/effect/spawner/structure/window/hollow/reinforced/middle, /obj/structure/window/reinforced{ @@ -1661,10 +1566,6 @@ }, /turf/open/floor/plating, /area/awaymission/centcomAway/general) -"gg" = ( -/obj/effect/spawner/structure/window/hollow/reinforced/middle, -/turf/open/floor/plating, -/area/awaymission/centcomAway/general) "gh" = ( /obj/effect/spawner/structure/window/hollow/reinforced/directional{ dir = 5 @@ -1886,9 +1787,6 @@ }, /turf/closed/wall/mineral/titanium/interior, /area/awaymission/centcomAway/hangar) -"gT" = ( -/turf/closed/wall/mineral/titanium/interior, -/area/awaymission/centcomAway/hangar) "gU" = ( /obj/structure/table, /obj/item/paper/fluff/awaymissions/centcom/gateway_memo, @@ -1965,7 +1863,7 @@ /turf/open/floor/engine, /area/awaymission/centcomAway/general) "hi" = ( -/obj/structure/sign/biohazard, +/obj/structure/sign/warning/biohazard, /turf/closed/wall/r_wall, /area/awaymission/centcomAway/general) "hj" = ( @@ -2041,19 +1939,6 @@ }, /turf/open/floor/plating, /area/awaymission/centcomAway/courtroom) -"hu" = ( -/obj/effect/spawner/structure/window/hollow/reinforced, -/turf/open/floor/plating, -/area/awaymission/centcomAway/hangar) -"hv" = ( -/obj/structure/shuttle/engine/propulsion/burst{ - dir = 4 - }, -/turf/closed/wall/mineral/titanium, -/area/awaymission/centcomAway/hangar) -"hw" = ( -/turf/closed/wall/mineral/titanium, -/area/awaymission/centcomAway/hangar) "hx" = ( /obj/structure/table, /obj/item/clothing/gloves/color/yellow, @@ -2063,7 +1948,7 @@ /turf/open/floor/plating, /area/awaymission/centcomAway/hangar) "hy" = ( -/obj/structure/sign/securearea, +/obj/structure/sign/warning/securearea, /turf/closed/wall/r_wall, /area/awaymission/centcomAway/general) "hz" = ( @@ -2191,7 +2076,7 @@ /turf/open/floor/wood, /area/awaymission/centcomAway/courtroom) "hU" = ( -/obj/structure/sign/vacuum, +/obj/structure/sign/warning/vacuum, /turf/closed/wall/r_wall, /area/awaymission/centcomAway/hangar) "hV" = ( @@ -2263,11 +2148,6 @@ /obj/machinery/computer/mech_bay_power_console, /turf/open/floor/circuit, /area/awaymission/centcomAway/hangar) -"ik" = ( -/turf/open/floor/plasteel/vault{ - dir = 8 - }, -/area/awaymission/centcomAway/hangar) "il" = ( /obj/structure/mecha_wreckage/ripley, /turf/open/floor/plasteel/dark, @@ -2330,12 +2210,6 @@ /obj/effect/spawner/structure/window/hollow/reinforced/middle, /turf/open/floor/plating, /area/awaymission/centcomAway/courtroom) -"ix" = ( -/obj/effect/spawner/structure/window/hollow/reinforced/end{ - dir = 4 - }, -/turf/closed/wall/r_wall, -/area/awaymission/centcomAway/courtroom) "iy" = ( /obj/machinery/door/poddoor{ id = "XCCMechs"; @@ -2363,12 +2237,6 @@ }, /turf/open/floor/plasteel, /area/awaymission/centcomAway/hangar) -"iC" = ( -/obj/effect/spawner/structure/window/hollow/reinforced/end{ - dir = 4 - }, -/turf/open/floor/plating, -/area/awaymission/centcomAway/general) "iD" = ( /obj/structure/window/reinforced, /turf/open/floor/plasteel/vault{ @@ -2382,11 +2250,6 @@ /obj/machinery/recharge_station, /turf/open/floor/plasteel/dark, /area/awaymission/centcomAway/hangar) -"iG" = ( -/turf/open/floor/plasteel/vault{ - dir = 5 - }, -/area/awaymission/centcomAway/hangar) "iH" = ( /obj/structure/window/reinforced{ dir = 4 @@ -2575,11 +2438,6 @@ /obj/effect/decal/cleanable/cobweb/cobweb2, /turf/open/floor/plasteel/grimy, /area/awaymission/centcomAway/general) -"jl" = ( -/turf/open/floor/plasteel/green/corner{ - dir = 8 - }, -/area/awaymission/centcomAway/general) "jm" = ( /turf/open/floor/plasteel/green/corner{ dir = 2 @@ -2798,14 +2656,8 @@ /obj/effect/turf_decal/delivery, /turf/open/floor/plasteel, /area/awaymission/centcomAway/general) -"jT" = ( -/obj/effect/spawner/structure/window/hollow/reinforced/end{ - dir = 8 - }, -/turf/open/floor/plating, -/area/awaymission/centcomAway/general) "jU" = ( -/obj/structure/sign/vacuum, +/obj/structure/sign/warning/vacuum, /turf/closed/wall/r_wall, /area/awaymission/centcomAway/general) "jV" = ( @@ -2849,12 +2701,6 @@ }, /turf/open/floor/plating, /area/awaymission/centcomAway/hangar) -"kb" = ( -/obj/effect/spawner/structure/window/hollow/reinforced/end{ - dir = 8 - }, -/turf/open/floor/plating, -/area/awaymission/centcomAway/general) "kc" = ( /obj/machinery/gateway{ dir = 8 @@ -2908,10 +2754,6 @@ dir = 6 }, /area/awaymission/centcomAway/general) -"kk" = ( -/obj/effect/spawner/structure/window/hollow/reinforced, -/turf/open/floor/plating, -/area/awaymission/centcomAway/general) "kl" = ( /obj/effect/spawner/structure/window/hollow/reinforced/end{ dir = 1 @@ -2919,12 +2761,6 @@ /obj/structure/window/reinforced, /turf/open/floor/plating, /area/awaymission/centcomAway/general) -"km" = ( -/obj/effect/spawner/structure/window/hollow/reinforced/end{ - dir = 4 - }, -/turf/open/floor/plating, -/area/awaymission/centcomAway/general) "kn" = ( /obj/structure/table, /obj/item/device/flashlight/flare, @@ -3091,12 +2927,6 @@ dir = 6 }, /area/awaymission/centcomAway/general) -"kM" = ( -/obj/effect/spawner/structure/window/hollow/reinforced/end{ - dir = 1 - }, -/turf/open/floor/plating, -/area/awaymission/centcomAway/general) "kN" = ( /obj/structure/table/wood, /obj/item/clothing/accessory/medal, @@ -3790,11 +3620,6 @@ /obj/item/storage/belt/utility/full, /turf/open/floor/plasteel/grimy, /area/awaymission/centcomAway/general) -"mV" = ( -/turf/open/floor/plasteel/redyellow{ - dir = 5 - }, -/area/awaymission/centcomAway/thunderdome) "mW" = ( /obj/structure/chair/stool{ pixel_y = 8 @@ -8421,7 +8246,7 @@ bo bC bR bR -bS +bn bn bd bR @@ -8679,7 +8504,7 @@ aV bd bq bC -bS +bn cm cx cm @@ -8692,7 +8517,7 @@ bB bB bB bB -bS +bn bR bR bd @@ -8704,9 +8529,9 @@ gm gD gD gD -gT +bn he -gT +bn gD aV il @@ -8809,7 +8634,7 @@ aV bd bn bB -bT +bn cn cn cJ @@ -8823,7 +8648,7 @@ dz dz dz bB -bS +bn bR bR bd @@ -9483,9 +9308,9 @@ bd gm gD gD -gT +bn he -gT +bn gD gD aV @@ -9849,7 +9674,7 @@ aV bd bn bB -bT +bn cn cn cP @@ -9979,7 +9804,7 @@ aV bd bo bC -bS +bn cm cx cm @@ -10241,7 +10066,7 @@ bq bC bR bR -bS +bn bn bd bd diff --git a/_maps/RandomZLevels/challenge.dmm b/_maps/RandomZLevels/challenge.dmm index 282a1fc07f..8f454aedc9 100644 --- a/_maps/RandomZLevels/challenge.dmm +++ b/_maps/RandomZLevels/challenge.dmm @@ -242,7 +242,7 @@ "aX" = ( /obj/machinery/porta_turret{ dir = 8; - emagged = 1; + set_obj_flags = "EMAGGED"; installation = /obj/item/gun/energy/lasercannon }, /turf/open/floor/plating/airless, @@ -384,7 +384,7 @@ "bq" = ( /obj/machinery/porta_turret{ dir = 8; - emagged = 1; + set_obj_flags = "EMAGGED"; installation = /obj/item/gun/energy/lasercannon }, /turf/open/floor/plating, @@ -796,7 +796,7 @@ /turf/open/space, /area/space/nearstation) "cA" = ( -/obj/structure/sign/securearea, +/obj/structure/sign/warning/securearea, /turf/closed/indestructible{ icon_state = "iron0" }, @@ -899,12 +899,6 @@ }, /turf/open/floor/plating, /area/awaymission/challenge/end) -"cQ" = ( -/obj/machinery/light{ - dir = 8 - }, -/turf/open/floor/circuit, -/area/awaymission/challenge/end) "cR" = ( /obj/machinery/gateway{ dir = 9 @@ -929,12 +923,6 @@ dir = 4 }, /area/awaymission/challenge/end) -"cU" = ( -/obj/machinery/light{ - dir = 4 - }, -/turf/open/floor/circuit, -/area/awaymission/challenge/end) "cV" = ( /obj/machinery/gateway{ dir = 8 diff --git a/_maps/RandomZLevels/moonoutpost19.dmm b/_maps/RandomZLevels/moonoutpost19.dmm index 80e7c8e8eb..6fdda43ef6 100644 --- a/_maps/RandomZLevels/moonoutpost19.dmm +++ b/_maps/RandomZLevels/moonoutpost19.dmm @@ -16,22 +16,6 @@ heat_capacity = 1e+006 }, /area/awaymission/moonoutpost19/hive) -"ae" = ( -/obj/structure/alien/weeds, -/obj/structure/alien/resin/wall, -/turf/open/floor/plating/asteroid{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; - heat_capacity = 1e+006 - }, -/area/awaymission/moonoutpost19/hive) -"af" = ( -/obj/structure/alien/weeds, -/obj/structure/alien/resin/wall, -/turf/open/floor/plating/asteroid{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; - heat_capacity = 1e+006 - }, -/area/awaymission/moonoutpost19/hive) "ag" = ( /obj/structure/alien/weeds, /obj/structure/alien/weeds{ @@ -45,19 +29,6 @@ heat_capacity = 1e+006 }, /area/awaymission/moonoutpost19/hive) -"ah" = ( -/obj/structure/alien/weeds, -/obj/structure/alien/weeds{ - desc = "A large mottled egg."; - obj_integrity = 100; - icon_state = "egg_hatched"; - name = "egg" - }, -/turf/open/floor/plating/asteroid{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; - heat_capacity = 1e+006 - }, -/area/awaymission/moonoutpost19/hive) "ai" = ( /obj/structure/alien/weeds, /turf/open/floor/plating/asteroid{ @@ -81,19 +52,6 @@ heat_capacity = 1e+006 }, /area/awaymission/moonoutpost19/hive) -"al" = ( -/obj/structure/alien/weeds, -/obj/structure/alien/weeds{ - desc = "A large mottled egg."; - obj_integrity = 100; - icon_state = "egg_hatched"; - name = "egg" - }, -/turf/open/floor/plating/asteroid{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; - heat_capacity = 1e+006 - }, -/area/awaymission/moonoutpost19/hive) "am" = ( /obj/structure/alien/weeds/node, /turf/open/floor/plating/asteroid{ @@ -101,22 +59,6 @@ heat_capacity = 1e+006 }, /area/awaymission/moonoutpost19/hive) -"an" = ( -/obj/structure/alien/weeds, -/obj/structure/bed/nest, -/turf/open/floor/plating/asteroid{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; - heat_capacity = 1e+006 - }, -/area/awaymission/moonoutpost19/hive) -"ao" = ( -/obj/structure/alien/weeds, -/obj/structure/bed/nest, -/turf/open/floor/plating/asteroid{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; - heat_capacity = 1e+006 - }, -/area/awaymission/moonoutpost19/hive) "ap" = ( /obj/structure/alien/weeds, /obj/structure/bed/nest, @@ -128,20 +70,6 @@ heat_capacity = 1e+006 }, /area/awaymission/moonoutpost19/hive) -"aq" = ( -/obj/structure/alien/weeds, -/turf/open/floor/plating/asteroid{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; - heat_capacity = 1e+006 - }, -/area/awaymission/moonoutpost19/hive) -"ar" = ( -/obj/structure/alien/weeds, -/turf/open/floor/plating/asteroid{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; - heat_capacity = 1e+006 - }, -/area/awaymission/moonoutpost19/hive) "as" = ( /obj/structure/alien/weeds, /obj/structure/alien/resin/wall, @@ -178,14 +106,6 @@ heat_capacity = 1e+006 }, /area/awaymission/moonoutpost19/hive) -"ax" = ( -/obj/structure/alien/weeds, -/obj/effect/decal/cleanable/blood/gibs, -/turf/open/floor/plating/asteroid{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; - heat_capacity = 1e+006 - }, -/area/awaymission/moonoutpost19/hive) "ay" = ( /turf/open/floor/plasteel/darkred/side{ dir = 9; @@ -300,14 +220,6 @@ heat_capacity = 1e+006 }, /area/awaymission/moonoutpost19/hive) -"aL" = ( -/obj/structure/alien/weeds, -/obj/effect/decal/cleanable/blood/gibs, -/turf/open/floor/plating/asteroid{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; - heat_capacity = 1e+006 - }, -/area/awaymission/moonoutpost19/hive) "aM" = ( /obj/structure/alien/weeds, /mob/living/simple_animal/hostile/alien/drone{ @@ -433,16 +345,6 @@ heat_capacity = 1e+006 }, /area/awaymission/moonoutpost19/main) -"bb" = ( -/obj/structure/alien/weeds, -/mob/living/simple_animal/hostile/alien/drone{ - plants_off = 1 - }, -/turf/open/floor/plating/asteroid{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; - heat_capacity = 1e+006 - }, -/area/awaymission/moonoutpost19/hive) "bc" = ( /obj/structure/alien/weeds, /obj/effect/decal/cleanable/blood, @@ -503,14 +405,6 @@ heat_capacity = 1e+006 }, /area/awaymission/moonoutpost19/hive) -"bk" = ( -/obj/structure/alien/weeds, -/mob/living/simple_animal/hostile/alien/sentinel, -/turf/open/floor/plating/asteroid{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; - heat_capacity = 1e+006 - }, -/area/awaymission/moonoutpost19/hive) "bl" = ( /turf/closed/mineral/random/high_chance, /area/awaymission/moonoutpost19/hive) @@ -977,7 +871,7 @@ }, /area/awaymission/moonoutpost19/syndicate) "ce" = ( -/obj/structure/sign/biohazard{ +/obj/structure/sign/warning/biohazard{ pixel_y = 32 }, /obj/structure/alien/weeds/node, @@ -1005,7 +899,7 @@ }, /area/awaymission/moonoutpost19/syndicate) "cg" = ( -/obj/structure/sign/securearea{ +/obj/structure/sign/warning/securearea{ pixel_y = 32 }, /obj/effect/turf_decal/stripes/corner{ @@ -1127,7 +1021,7 @@ "cr" = ( /obj/machinery/door/airlock/public/glass{ density = 0; - emagged = 1; + set_obj_flags = "EMAGGED"; icon_state = "open"; locked = 1; name = "Dormitories" @@ -1438,7 +1332,7 @@ "cT" = ( /obj/machinery/door/airlock{ density = 0; - emagged = 1; + set_obj_flags = "EMAGGED"; icon_state = "open"; id_tag = "awaydorm4"; locked = 1; @@ -1750,7 +1644,7 @@ "du" = ( /obj/machinery/door/airlock/external{ density = 0; - emagged = 1; + set_obj_flags = "EMAGGED"; icon_state = "open"; locked = 1; opacity = 0; @@ -1827,7 +1721,7 @@ /turf/closed/mineral, /area/awaymission/moonoutpost19/main) "dB" = ( -/obj/structure/sign/vacuum{ +/obj/structure/sign/warning/vacuum{ desc = "A warning sign which reads 'HOSTILE ATMOSPHERE AHEAD'"; name = "\improper HOSTILE ATMOSPHERE AHEAD"; pixel_y = -32 @@ -1910,7 +1804,7 @@ "dI" = ( /obj/machinery/door/airlock/external{ density = 0; - emagged = 1; + set_obj_flags = "EMAGGED"; icon_state = "open"; locked = 1; opacity = 0; @@ -1998,14 +1892,6 @@ heat_capacity = 1e+006 }, /area/awaymission/moonoutpost19/main) -"dR" = ( -/obj/structure/alien/weeds, -/obj/structure/alien/resin/wall, -/turf/open/floor/plating/asteroid{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; - heat_capacity = 1e+006 - }, -/area/awaymission/moonoutpost19/main) "dS" = ( /obj/structure/alien/weeds, /obj/effect/decal/cleanable/blood, @@ -2024,13 +1910,6 @@ heat_capacity = 1e+006 }, /area/awaymission/moonoutpost19/main) -"dU" = ( -/obj/structure/alien/weeds, -/turf/open/floor/plating/asteroid{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; - heat_capacity = 1e+006 - }, -/area/awaymission/moonoutpost19/main) "dV" = ( /obj/structure/alien/weeds/node, /obj/structure/alien/resin/wall, @@ -2039,21 +1918,6 @@ heat_capacity = 1e+006 }, /area/awaymission/moonoutpost19/main) -"dW" = ( -/obj/structure/alien/weeds, -/obj/structure/alien/resin/wall, -/turf/open/floor/plating/asteroid{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; - heat_capacity = 1e+006 - }, -/area/awaymission/moonoutpost19/main) -"dX" = ( -/obj/structure/alien/weeds, -/turf/open/floor/plating/asteroid{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; - heat_capacity = 1e+006 - }, -/area/awaymission/moonoutpost19/main) "dY" = ( /obj/machinery/light/small, /turf/open/floor/plating/asteroid{ @@ -2085,7 +1949,7 @@ }, /area/awaymission/moonoutpost19/research) "ec" = ( -/obj/structure/sign/biohazard, +/obj/structure/sign/warning/biohazard, /turf/closed/wall/r_wall, /area/awaymission/moonoutpost19/research) "ed" = ( @@ -2220,12 +2084,6 @@ /obj/item/clothing/mask/facehugger/impregnated, /turf/open/floor/engine, /area/awaymission/moonoutpost19/research) -"es" = ( -/obj/structure/alien/weeds, -/obj/structure/bed/nest, -/obj/effect/decal/cleanable/blood/gibs, -/turf/open/floor/engine, -/area/awaymission/moonoutpost19/research) "et" = ( /obj/machinery/vending/coffee, /turf/open/floor/plasteel/dark, @@ -2247,16 +2105,6 @@ heat_capacity = 1e+006 }, /area/awaymission/moonoutpost19/research) -"ew" = ( -/obj/machinery/atmospherics/components/unary/portables_connector{ - dir = 4 - }, -/obj/machinery/portable_atmospherics/canister, -/obj/structure/alien/weeds, -/turf/open/floor/plasteel{ - heat_capacity = 1e+006 - }, -/area/awaymission/moonoutpost19/research) "ex" = ( /obj/structure/cable{ icon_state = "1-2" @@ -2299,41 +2147,18 @@ }, /area/awaymission/moonoutpost19/research) "eA" = ( -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'HIGH VOLTAGE'"; - icon_state = "shock"; - name = "HIGH VOLTAGE" - }, +/obj/structure/sign/warning/electricshock, /turf/closed/wall/r_wall, /area/awaymission/moonoutpost19/research) "eB" = ( /obj/structure/alien/weeds/node, /turf/open/floor/engine, /area/awaymission/moonoutpost19/research) -"eC" = ( -/obj/structure/alien/weeds, -/turf/open/floor/engine, -/area/awaymission/moonoutpost19/research) -"eD" = ( -/obj/structure/alien/weeds, -/obj/structure/alien/resin/wall, -/turf/open/floor/engine, -/area/awaymission/moonoutpost19/research) -"eE" = ( -/obj/structure/alien/weeds, -/obj/structure/alien/resin/wall, -/turf/open/floor/engine, -/area/awaymission/moonoutpost19/research) "eF" = ( /obj/structure/alien/weeds, /obj/structure/bed/nest, /turf/open/floor/engine, /area/awaymission/moonoutpost19/research) -"eG" = ( -/obj/structure/alien/weeds, -/obj/effect/decal/cleanable/blood/gibs, -/turf/open/floor/engine, -/area/awaymission/moonoutpost19/research) "eH" = ( /obj/structure/alien/weeds, /obj/structure/alien/weeds{ @@ -2412,25 +2237,11 @@ heat_capacity = 1e+006 }, /area/awaymission/moonoutpost19/research) -"eP" = ( -/obj/structure/alien/weeds, -/obj/structure/alien/weeds{ - desc = "A large mottled egg."; - obj_integrity = 100; - icon_state = "egg_hatched"; - name = "egg" - }, -/turf/open/floor/engine, -/area/awaymission/moonoutpost19/research) "eQ" = ( /obj/structure/alien/weeds, /obj/effect/decal/cleanable/blood, /turf/open/floor/engine, /area/awaymission/moonoutpost19/research) -"eR" = ( -/obj/structure/alien/weeds, -/turf/open/floor/engine, -/area/awaymission/moonoutpost19/research) "eS" = ( /obj/machinery/power/port_gen/pacman{ desc = "A portable generator for emergency backup power."; @@ -2579,7 +2390,7 @@ }, /area/awaymission/moonoutpost19/research) "fe" = ( -/obj/structure/sign/securearea{ +/obj/structure/sign/warning/securearea{ pixel_x = 32 }, /obj/structure/cable{ @@ -2692,16 +2503,6 @@ heat_capacity = 1e+006 }, /area/awaymission/moonoutpost19/research) -"fo" = ( -/obj/structure/alien/weeds, -/obj/structure/alien/weeds{ - desc = "A large mottled egg."; - obj_integrity = 100; - icon_state = "egg_hatched"; - name = "egg" - }, -/turf/open/floor/engine, -/area/awaymission/moonoutpost19/research) "fp" = ( /obj/structure/alien/weeds, /obj/structure/bed/nest, @@ -2788,7 +2589,7 @@ /obj/machinery/door/firedoor, /obj/machinery/door/airlock/research{ density = 0; - emagged = 1; + set_obj_flags = "EMAGGED"; icon_state = "open"; locked = 1; name = "Xenobiology Lab"; @@ -2916,16 +2717,6 @@ /obj/structure/alien/resin/wall, /turf/open/floor/engine, /area/awaymission/moonoutpost19/research) -"fI" = ( -/obj/machinery/atmospherics/pipe/simple/general/visible{ - desc = "A one meter section of pipe. This one has been applied with an acid-proof coating."; - dir = 4; - name = "Acid-Proof Pipe" - }, -/obj/structure/alien/weeds, -/obj/structure/alien/resin/wall, -/turf/open/floor/engine, -/area/awaymission/moonoutpost19/research) "fJ" = ( /obj/machinery/atmospherics/components/unary/outlet_injector{ desc = "Has a valve and pump attached to it. This one has been applied with an acid-proof coating."; @@ -3071,7 +2862,7 @@ }, /area/awaymission/moonoutpost19/research) "fX" = ( -/obj/structure/sign/biohazard{ +/obj/structure/sign/warning/biohazard{ pixel_x = 32 }, /obj/structure/cable{ @@ -3140,18 +2931,6 @@ }, /turf/open/floor/engine, /area/awaymission/moonoutpost19/research) -"gd" = ( -/obj/structure/alien/weeds, -/obj/structure/bed/nest, -/obj/effect/decal/cleanable/blood/gibs, -/turf/open/floor/engine, -/area/awaymission/moonoutpost19/research) -"ge" = ( -/obj/structure/alien/weeds, -/obj/structure/bed/nest, -/obj/item/clothing/mask/facehugger/impregnated, -/turf/open/floor/engine, -/area/awaymission/moonoutpost19/research) "gf" = ( /obj/structure/chair/stool, /turf/open/floor/plating{ @@ -3756,14 +3535,6 @@ heat_capacity = 1e+006 }, /area/awaymission/moonoutpost19/hive) -"hl" = ( -/obj/structure/alien/weeds, -/obj/structure/alien/egg, -/turf/open/floor/plating/asteroid{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; - heat_capacity = 1e+006 - }, -/area/awaymission/moonoutpost19/hive) "hm" = ( /obj/machinery/vending/medical{ req_access_txt = "201" @@ -3950,7 +3721,7 @@ /obj/machinery/door/firedoor, /obj/machinery/door/airlock/command{ density = 0; - emagged = 1; + set_obj_flags = "EMAGGED"; icon_state = "open"; locked = 1; name = "Research Director's Office"; @@ -4395,7 +4166,7 @@ }, /area/awaymission/moonoutpost19/research) "iu" = ( -/obj/structure/sign/securearea{ +/obj/structure/sign/warning/securearea{ pixel_y = 32 }, /obj/machinery/shower{ @@ -4883,7 +4654,7 @@ }, /area/awaymission/moonoutpost19/arrivals) "jx" = ( -/obj/structure/sign/science{ +/obj/structure/sign/departments/science{ pixel_y = 32 }, /obj/effect/decal/cleanable/dirt, @@ -5688,13 +5459,6 @@ "ld" = ( /turf/closed/wall/mineral/titanium, /area/awaymission/moonoutpost19/arrivals) -"le" = ( -/turf/open/floor/plating/asteroid{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; - heat_capacity = 1e+006 - }, -/turf/closed/wall/mineral/titanium, -/area/awaymission/moonoutpost19/arrivals) "lf" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor/plasteel/arrival{ @@ -5885,22 +5649,10 @@ temperature = 273.15 }, /area/awaymission/moonoutpost19/arrivals) -"ly" = ( -/turf/closed/wall/mineral/titanium, -/area/awaymission/moonoutpost19/arrivals) -"lz" = ( -/turf/closed/wall/mineral/titanium, -/area/awaymission/moonoutpost19/arrivals) "lA" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/awaymission/moonoutpost19/arrivals) -"lB" = ( -/turf/closed/wall/mineral/titanium, -/area/awaymission/moonoutpost19/arrivals) -"lC" = ( -/turf/closed/wall/mineral/titanium, -/area/awaymission/moonoutpost19/arrivals) "lD" = ( /obj/structure/shuttle/engine/heater{ dir = 4 @@ -6038,9 +5790,6 @@ temperature = 273.15 }, /area/awaymission/moonoutpost19/arrivals) -"lV" = ( -/turf/closed/wall/mineral/titanium/interior, -/area/awaymission/moonoutpost19/arrivals) "lW" = ( /obj/structure/table, /obj/item/storage/lockbox, @@ -6051,9 +5800,6 @@ /obj/item/device/radio/off, /turf/open/floor/mineral/titanium/yellow, /area/awaymission/moonoutpost19/arrivals) -"lY" = ( -/turf/closed/wall/mineral/titanium, -/area/awaymission/moonoutpost19/arrivals) "lZ" = ( /obj/machinery/computer/security/telescreen/entertainment{ pixel_x = -32 @@ -6230,7 +5976,7 @@ /turf/open/floor/mineral/titanium/yellow, /area/awaymission/moonoutpost19/arrivals) "mv" = ( -/obj/structure/sign/vacuum{ +/obj/structure/sign/warning/vacuum{ desc = "A warning sign which reads 'HOSTILE ATMOSPHERE AHEAD'"; name = "\improper HOSTILE ATMOSPHERE AHEAD" }, @@ -6343,7 +6089,7 @@ /turf/open/floor/mineral/titanium/yellow, /area/awaymission/moonoutpost19/arrivals) "mJ" = ( -/obj/structure/sign/vacuum{ +/obj/structure/sign/warning/vacuum{ desc = "A beacon used by a teleporter."; icon = 'icons/obj/radio.dmi'; icon_state = "beacon"; @@ -6490,9 +6236,6 @@ }, /turf/open/floor/mineral/titanium/yellow, /area/awaymission/moonoutpost19/arrivals) -"mX" = ( -/turf/closed/wall/mineral/titanium, -/area/awaymission/moonoutpost19/arrivals) "mY" = ( /obj/machinery/light/small{ dir = 4 @@ -6541,12 +6284,6 @@ heat_capacity = 1e+006 }, /area/awaymission/moonoutpost19/arrivals) -"nd" = ( -/turf/closed/wall/mineral/titanium, -/area/awaymission/moonoutpost19/arrivals) -"ne" = ( -/turf/closed/wall/mineral/titanium, -/area/awaymission/moonoutpost19/arrivals) "nf" = ( /obj/structure/filingcabinet, /turf/open/floor/mineral/titanium/blue, @@ -6601,7 +6338,7 @@ }, /area/awaymission/moonoutpost19/arrivals) "nm" = ( -/obj/structure/sign/vacuum{ +/obj/structure/sign/warning/vacuum{ desc = "A warning sign which reads 'HOSTILE ATMOSPHERE AHEAD'"; name = "\improper HOSTILE ATMOSPHERE AHEAD"; pixel_y = 32 @@ -6610,9 +6347,6 @@ heat_capacity = 1e+006 }, /area/awaymission/moonoutpost19/arrivals) -"nn" = ( -/turf/closed/wall/mineral/titanium, -/area/awaymission/moonoutpost19/arrivals) "no" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/stripes/line{ @@ -6680,9 +6414,6 @@ temperature = 251 }, /area/awaymission/moonoutpost19/arrivals) -"nv" = ( -/turf/closed/wall/mineral/titanium, -/area/awaymission/moonoutpost19/arrivals) "nw" = ( /obj/machinery/washing_machine, /turf/open/floor/plasteel/barber{ @@ -6851,7 +6582,7 @@ }, /area/awaymission/moonoutpost19/arrivals) "nK" = ( -/obj/structure/sign/vacuum{ +/obj/structure/sign/warning/vacuum{ desc = "A warning sign which reads 'HOSTILE ATMOSPHERE AHEAD'"; name = "\improper HOSTILE ATMOSPHERE AHEAD"; pixel_x = -32 @@ -7052,269 +6783,6 @@ heat_capacity = 1e+006 }, /area/awaymission/moonoutpost19/main) -"of" = ( -/obj/item/shard, -/turf/open/floor/mineral/titanium, -/area/awaymission/moonoutpost19/main) -"og" = ( -/obj/item/shard{ - icon_state = "medium" - }, -/turf/open/floor/mineral/titanium, -/area/awaymission/moonoutpost19/main) -"oh" = ( -/obj/item/shard{ - icon_state = "small" - }, -/turf/open/floor/mineral/titanium, -/area/awaymission/moonoutpost19/main) -"oi" = ( -/turf/open/floor/mineral/titanium, -/area/awaymission/moonoutpost19/main) -"oj" = ( -/obj/structure/grille/broken, -/turf/open/floor/mineral/titanium, -/area/awaymission/moonoutpost19/main) -"ok" = ( -/obj/item/stack/rods, -/turf/open/floor/mineral/titanium, -/area/awaymission/moonoutpost19/main) -"ol" = ( -/obj/item/stack/cable_coil, -/turf/open/floor/mineral/titanium, -/area/awaymission/moonoutpost19/main) -"om" = ( -/obj/item/stack/cable_coil{ - amount = 5 - }, -/turf/open/floor/mineral/titanium, -/area/awaymission/moonoutpost19/main) -"on" = ( -/obj/item/stack/cable_coil{ - amount = 2; - icon_state = "coil_red2"; - item_state = "coil_red2" - }, -/turf/open/floor/mineral/titanium, -/area/awaymission/moonoutpost19/main) -"oo" = ( -/obj/item/stack/cable_coil{ - amount = 1; - icon_state = "coil_red1"; - item_state = "coil_red1" - }, -/turf/open/floor/mineral/titanium, -/area/awaymission/moonoutpost19/main) -"op" = ( -/turf/open/floor/plasteel{ - heat_capacity = 1e+006 - }, -/area/awaymission/moonoutpost19/main) -"oq" = ( -/turf/open/floor/plasteel/floorgrime{ - dir = 8; - heat_capacity = 1e+006 - }, -/area/awaymission/moonoutpost19/main) -"or" = ( -/turf/open/floor/plasteel{ - dir = 8; - heat_capacity = 1e+006; - icon_state = "damaged1" - }, -/area/awaymission/moonoutpost19/main) -"os" = ( -/turf/open/floor/plasteel{ - dir = 8; - heat_capacity = 1e+006; - icon_state = "damaged2" - }, -/area/awaymission/moonoutpost19/main) -"ot" = ( -/turf/open/floor/plasteel{ - dir = 8; - heat_capacity = 1e+006; - icon_state = "damaged3" - }, -/area/awaymission/moonoutpost19/main) -"ou" = ( -/turf/open/floor/plasteel{ - dir = 8; - heat_capacity = 1e+006; - icon_state = "damaged4" - }, -/area/awaymission/moonoutpost19/main) -"ov" = ( -/turf/open/floor/plasteel{ - dir = 8; - heat_capacity = 1e+006; - icon_state = "damaged5" - }, -/area/awaymission/moonoutpost19/main) -"ow" = ( -/turf/open/floor/plasteel{ - dir = 8; - heat_capacity = 1e+006; - icon_state = "floorscorched1" - }, -/area/awaymission/moonoutpost19/main) -"ox" = ( -/turf/open/floor/plasteel{ - dir = 8; - heat_capacity = 1e+006; - icon_state = "floorscorched2" - }, -/area/awaymission/moonoutpost19/main) -"oy" = ( -/turf/open/floor/mineral/titanium/blue, -/area/awaymission/moonoutpost19/main) -"oz" = ( -/turf/open/floor/plating{ - heat_capacity = 1e+006 - }, -/area/awaymission/moonoutpost19/main) -"oA" = ( -/turf/open/floor/plating{ - heat_capacity = 1e+006; - icon_state = "platingdmg1" - }, -/area/awaymission/moonoutpost19/main) -"oB" = ( -/turf/open/floor/plating{ - heat_capacity = 1e+006; - icon_state = "platingdmg2" - }, -/area/awaymission/moonoutpost19/main) -"oC" = ( -/turf/open/floor/plating{ - heat_capacity = 1e+006; - icon_state = "platingdmg3" - }, -/area/awaymission/moonoutpost19/main) -"oD" = ( -/turf/open/floor/plating{ - heat_capacity = 1e+006; - icon_state = "panelscorched" - }, -/area/awaymission/moonoutpost19/main) -"oE" = ( -/turf/open/floor/plasteel{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; - heat_capacity = 1e+006 - }, -/area/awaymission/moonoutpost19/main) -"oF" = ( -/turf/open/floor/plasteel/floorgrime{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; - dir = 8; - heat_capacity = 1e+006; - temperature = 251 - }, -/area/awaymission/moonoutpost19/main) -"oG" = ( -/turf/open/floor/plasteel{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; - dir = 8; - heat_capacity = 1e+006; - icon_state = "damaged1"; - temperature = 251 - }, -/area/awaymission/moonoutpost19/main) -"oH" = ( -/turf/open/floor/plasteel{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; - dir = 8; - heat_capacity = 1e+006; - icon_state = "damaged2"; - temperature = 251 - }, -/area/awaymission/moonoutpost19/main) -"oI" = ( -/turf/open/floor/plasteel{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; - dir = 8; - heat_capacity = 1e+006; - icon_state = "damaged3"; - temperature = 251 - }, -/area/awaymission/moonoutpost19/main) -"oJ" = ( -/turf/open/floor/plasteel{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; - dir = 8; - heat_capacity = 1e+006; - icon_state = "damaged4"; - temperature = 251 - }, -/area/awaymission/moonoutpost19/main) -"oK" = ( -/turf/open/floor/plasteel{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; - dir = 8; - heat_capacity = 1e+006; - icon_state = "damaged5"; - temperature = 251 - }, -/area/awaymission/moonoutpost19/main) -"oL" = ( -/turf/open/floor/plasteel{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; - dir = 8; - heat_capacity = 1e+006; - icon_state = "floorscorched1"; - temperature = 251 - }, -/area/awaymission/moonoutpost19/main) -"oM" = ( -/turf/open/floor/plasteel{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; - dir = 8; - heat_capacity = 1e+006; - icon_state = "floorscorched2"; - temperature = 251 - }, -/area/awaymission/moonoutpost19/main) -"oN" = ( -/turf/open/floor/mineral/titanium/yellow, -/area/awaymission/moonoutpost19/main) -"oO" = ( -/turf/open/floor/plating{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; - heat_capacity = 1e+006 - }, -/area/awaymission/moonoutpost19/main) -"oP" = ( -/turf/open/floor/plating{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; - heat_capacity = 1e+006; - icon_state = "platingdmg1"; - temperature = 251 - }, -/area/awaymission/moonoutpost19/main) -"oQ" = ( -/turf/open/floor/plating{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; - heat_capacity = 1e+006; - icon_state = "platingdmg2"; - temperature = 251 - }, -/area/awaymission/moonoutpost19/main) -"oR" = ( -/turf/open/floor/plating{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; - heat_capacity = 1e+006; - icon_state = "platingdmg3"; - temperature = 251 - }, -/area/awaymission/moonoutpost19/main) -"oS" = ( -/turf/open/floor/plating{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; - heat_capacity = 1e+006; - icon_state = "panelscorched"; - temperature = 251 - }, -/area/awaymission/moonoutpost19/main) "oT" = ( /obj/structure/closet/secure_closet{ icon_state = "science"; @@ -32684,11 +32152,11 @@ ba ba ba lc -lV +lc mp mG mV -lV +lc lc ba ba diff --git a/_maps/RandomZLevels/research.dmm b/_maps/RandomZLevels/research.dmm index 6c9a86a7cc..adf8fb7f87 100644 --- a/_maps/RandomZLevels/research.dmm +++ b/_maps/RandomZLevels/research.dmm @@ -551,7 +551,7 @@ }, /area/awaymission/research/interior/engineering) "bP" = ( -/obj/structure/sign/vacuum{ +/obj/structure/sign/warning/vacuum{ pixel_x = 32 }, /turf/open/floor/plating, @@ -589,7 +589,7 @@ /turf/open/floor/plasteel/dark, /area/awaymission/research/interior/gateway) "bV" = ( -/obj/structure/sign/nosmoking_1{ +/obj/structure/sign/warning/nosmoking/circle{ pixel_x = -32 }, /turf/open/floor/plasteel/whiteyellow/side{ @@ -731,12 +731,6 @@ /obj/machinery/light/small, /turf/open/floor/plating, /area/awaymission/research/interior/maint) -"co" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/turf/open/floor/plating, -/area/awaymission/research/interior/maint) "cp" = ( /turf/closed/wall/r_wall, /area/awaymission/research/interior) @@ -1763,7 +1757,7 @@ /turf/open/floor/plasteel/whitered/side, /area/awaymission/research/interior/security) "fv" = ( -/obj/structure/sign/goldenplaque{ +/obj/structure/sign/plaques/golden{ pixel_x = 32 }, /turf/open/floor/plasteel/whitered/corner{ @@ -2007,12 +2001,6 @@ }, /turf/open/floor/plasteel/dark, /area/awaymission/research/interior/secure) -"gi" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/turf/open/floor/plasteel/dark, -/area/awaymission/research/interior/secure) "gj" = ( /obj/structure/cable{ icon_state = "4-8" @@ -2147,7 +2135,7 @@ /turf/open/floor/plasteel/whitepurple, /area/awaymission/research/interior) "gB" = ( -/obj/structure/sign/science, +/obj/structure/sign/departments/science, /turf/closed/wall/r_wall, /area/awaymission/research/interior) "gC" = ( @@ -2284,12 +2272,6 @@ dir = 1 }, /area/awaymission/research/interior) -"gW" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/turf/open/floor/plasteel/whitepurple, -/area/awaymission/research/interior) "gX" = ( /obj/effect/decal/cleanable/blood/drip, /turf/open/floor/plasteel/whitepurple/side{ @@ -2436,12 +2418,6 @@ dir = 10 }, /area/awaymission/research/interior/cryo) -"hw" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/turf/open/floor/plating, -/area/awaymission/research/interior/maint) "hx" = ( /obj/structure/cable{ icon_state = "2-4" @@ -2671,12 +2647,6 @@ }, /turf/open/floor/plasteel/purple, /area/awaymission/research/interior/genetics) -"ic" = ( -/obj/machinery/light{ - dir = 4 - }, -/turf/open/floor/plasteel/purple, -/area/awaymission/research/interior/genetics) "id" = ( /turf/closed/wall, /area/awaymission/research/interior/maint) @@ -3235,15 +3205,9 @@ /turf/open/floor/plasteel/whiteblue, /area/awaymission/research/interior) "jK" = ( -/obj/structure/sign/bluecross, +/obj/structure/sign/departments/medbay, /turf/closed/wall/r_wall, /area/awaymission/research/interior) -"jL" = ( -/obj/machinery/light{ - dir = 4 - }, -/turf/open/floor/plasteel/whiteblue, -/area/awaymission/research/interior) "jM" = ( /obj/machinery/light{ dir = 8 @@ -3531,43 +3495,6 @@ dir = 4 }, /area/awaymission/research/interior/dorm) -"kG" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/door/airlock/maintenance_hatch{ - req_access_txt = "12" - }, -/turf/open/floor/plating, -/area/awaymission/research/interior/maint) -"kH" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/turf/open/floor/plasteel/whitegreen/side{ - dir = 4 - }, -/area/awaymission/research/interior) -"kI" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/turf/open/floor/plasteel/whitegreen, -/area/awaymission/research/interior) -"kJ" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/turf/open/floor/plasteel/whitegreen/side{ - dir = 8 - }, -/area/awaymission/research/interior) -"kK" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/turf/open/floor/plating, -/area/awaymission/research/interior/maint) "kL" = ( /turf/open/floor/plating, /area/awaymission/research/interior/medbay) @@ -3585,15 +3512,6 @@ /obj/structure/chair/comfy/beige, /turf/open/floor/plasteel/whiteblue/side, /area/awaymission/research/interior/medbay) -"kP" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/light/small{ - dir = 4 - }, -/turf/open/floor/plating, -/area/awaymission/research/interior/maint) "kQ" = ( /obj/structure/chair/stool, /turf/open/floor/plasteel/yellowsiding{ @@ -4037,13 +3955,13 @@ /area/awaymission/research/exterior) "mg" = ( /obj/structure/closet/emcloset, -/obj/structure/sign/vacuum{ +/obj/structure/sign/warning/vacuum{ pixel_y = 32 }, /turf/open/floor/plating, /area/awaymission/research/interior/escapepods) "mh" = ( -/obj/structure/sign/pods{ +/obj/structure/sign/warning/pods{ pixel_x = -32 }, /turf/open/floor/plasteel/whitegreen/corner, @@ -4139,12 +4057,6 @@ "my" = ( /turf/closed/wall/mineral/titanium/interior, /area/awaymission/research/exterior) -"mz" = ( -/obj/structure/shuttle/engine/propulsion/burst{ - dir = 8 - }, -/turf/closed/wall/mineral/titanium, -/area/awaymission/research/exterior) "mA" = ( /obj/structure/chair{ dir = 8 @@ -4198,7 +4110,7 @@ }, /area/awaymission/research/interior/escapepods) "mI" = ( -/obj/structure/sign/pods{ +/obj/structure/sign/warning/pods{ pixel_x = -32 }, /turf/open/floor/plasteel/whitegreen/side{ @@ -4263,14 +4175,6 @@ }, /turf/open/floor/plasteel/whitegreen/side, /area/awaymission/research/interior/escapepods) -"mR" = ( -/obj/machinery/light{ - dir = 8 - }, -/turf/open/floor/plasteel/whitegreen/side{ - dir = 4 - }, -/area/awaymission/research/interior/escapepods) "mS" = ( /obj/machinery/door/airlock/external{ name = "Escape Pod Three"; @@ -4284,7 +4188,7 @@ }, /area/awaymission/research/interior/escapepods) "mU" = ( -/obj/structure/sign/vacuum{ +/obj/structure/sign/warning/vacuum{ pixel_y = -32 }, /obj/machinery/light, @@ -4299,7 +4203,7 @@ }, /area/awaymission/research/interior/escapepods) "mW" = ( -/obj/structure/sign/vacuum{ +/obj/structure/sign/warning/vacuum{ pixel_y = -32 }, /turf/open/floor/plasteel/whitegreen/side{ @@ -4347,9 +4251,6 @@ "nf" = ( /turf/closed/wall/mineral/plastitanium/nodiagonal, /area/awaymission/research/interior/engineering) -"ng" = ( -/turf/closed/wall/mineral/plastitanium/nodiagonal, -/area/awaymission/research/interior/engineering) (1,1,1) = {" aa @@ -42492,7 +42393,7 @@ aq ay an aL -ng +nf bf bs bK diff --git a/_maps/RandomZLevels/snowdin.dmm b/_maps/RandomZLevels/snowdin.dmm index 2df265cda6..2810199934 100644 --- a/_maps/RandomZLevels/snowdin.dmm +++ b/_maps/RandomZLevels/snowdin.dmm @@ -944,11 +944,6 @@ temperature = 140 }, /area/awaymission/snowdin/post) -"dg" = ( -/turf/open/floor/plating{ - temperature = 140 - }, -/area/awaymission/snowdin/post) "dh" = ( /obj/structure/table, /obj/item/storage/toolbox/emergency, @@ -1133,14 +1128,6 @@ temperature = 140 }, /area/awaymission/snowdin/post) -"dI" = ( -/obj/machinery/light/small{ - dir = 8 - }, -/turf/open/floor/plating{ - temperature = 140 - }, -/area/awaymission/snowdin/post) "dJ" = ( /turf/open/floor/carpet, /area/awaymission/snowdin/post) @@ -1429,9 +1416,6 @@ /obj/effect/spawner/lootdrop/snowdin/dungeonmisc, /turf/open/floor/plating/snowed/colder, /area/awaymission/snowdin/dungeon1) -"eC" = ( -/turf/open/floor/plating/snowed, -/area/awaymission/snowdin/post) "eD" = ( /turf/closed/wall/ice, /area/awaymission/snowdin/dungeon1) @@ -1965,9 +1949,6 @@ temperature = 140 }, /area/awaymission/snowdin/cave) -"gr" = ( -/turf/open/floor/plating/snowed, -/area/awaymission/snowdin/post) "gs" = ( /obj/structure/girder, /turf/open/floor/plating{ @@ -2102,9 +2083,6 @@ /obj/structure/reagent_dispensers/watertank, /turf/open/floor/plating, /area/awaymission/snowdin/post) -"gN" = ( -/turf/open/floor/plating, -/area/awaymission/snowdin/post) "gO" = ( /obj/structure/closet/crate, /obj/effect/spawner/lootdrop/snowdin/dungeonlite, @@ -2748,7 +2726,7 @@ /turf/open/floor/plasteel/whiteblue, /area/awaymission/snowdin/sekret) "iW" = ( -/obj/structure/sign/bluecross{ +/obj/structure/sign/departments/medbay{ pixel_x = -32 }, /turf/open/floor/plasteel{ @@ -2892,9 +2870,6 @@ wet = 0 }, /area/awaymission/snowdin/sekret) -"jw" = ( -/turf/open/floor/plating, -/area/awaymission/snowdin) "jx" = ( /obj/effect/decal/cleanable/blood, /obj/effect/gibspawner/human, @@ -3818,7 +3793,7 @@ }, /area/awaymission/snowdin/sekret) "ms" = ( -/obj/structure/sign/securearea{ +/obj/structure/sign/warning/securearea{ desc = "A warning sign which reads 'WEAPONS HOT'."; name = "WEAPONS HOT"; pixel_y = 32 @@ -4194,7 +4169,7 @@ }, /area/awaymission/snowdin/sekret) "nu" = ( -/obj/structure/sign/securearea{ +/obj/structure/sign/warning/securearea{ desc = "A warning sign which reads 'WEAPONS HOT'."; name = "WEAPONS HOT"; pixel_y = -32 @@ -11276,8 +11251,8 @@ ac ac ac iK -jw -jw +cQ +cQ iK ac ac @@ -11533,8 +11508,8 @@ ac ac ac iK -jw -jw +cQ +cQ iK ac ac @@ -14604,8 +14579,8 @@ dz dz dz jk -jw -jw +cQ +cQ jk dp ac @@ -14861,8 +14836,8 @@ dz dz dz jk -jw -jw +cQ +cQ jk dp dp @@ -36949,9 +36924,9 @@ ao ao cZ df -gN -gN -gN +ao +ao +ao df cZ ig @@ -37205,11 +37180,11 @@ cZ hM fu cZ -gN -gN +ao +ao fD -gN -gN +ao +ao cZ ig ig @@ -37463,10 +37438,10 @@ cZ cZ cZ df -gN +ao fD fD -gN +ao cZ cZ cZ @@ -42971,7 +42946,7 @@ cN cZ dd dj -dg +de df de dr @@ -43227,7 +43202,7 @@ cN cN cZ df -dg +de df de de @@ -43487,7 +43462,7 @@ de de de de -dg +de df ad df @@ -43495,7 +43470,7 @@ de dE dG de -dI +dd de de de @@ -43751,11 +43726,11 @@ df dB de de -dg de de de -dg +de +de de de de @@ -43997,7 +43972,7 @@ cN cN cN cZ -dg +de df ad ad @@ -44273,7 +44248,7 @@ cZ cZ cZ dY -dg +de de de de @@ -44517,7 +44492,7 @@ de de df ds -dg +de df dC dC @@ -44771,11 +44746,11 @@ cY ad cY de -dg +de df ad ad -dg +de ad ad ad @@ -45030,7 +45005,7 @@ cY ad df df -dg +de dv dv ad @@ -45286,7 +45261,7 @@ cN ad df df -dg +de du dw dw diff --git a/_maps/RandomZLevels/spacebattle.dmm b/_maps/RandomZLevels/spacebattle.dmm index d1b199e8a3..4dff027d92 100644 --- a/_maps/RandomZLevels/spacebattle.dmm +++ b/_maps/RandomZLevels/spacebattle.dmm @@ -226,7 +226,7 @@ "bc" = ( /obj/machinery/porta_turret{ dir = 8; - emagged = 1; + set_obj_flags = "EMAGGED"; installation = /obj/item/gun/energy/lasercannon }, /turf/open/floor/plating, @@ -322,7 +322,7 @@ "by" = ( /obj/machinery/porta_turret{ dir = 8; - emagged = 1; + set_obj_flags = "EMAGGED"; installation = /obj/item/gun/energy/lasercannon }, /turf/open/floor/plating, @@ -344,7 +344,7 @@ "bG" = ( /obj/machinery/porta_turret{ dir = 8; - emagged = 1; + set_obj_flags = "EMAGGED"; installation = /obj/item/gun/energy/lasercannon }, /turf/open/floor/plating, @@ -917,7 +917,7 @@ "dZ" = ( /obj/machinery/porta_turret{ dir = 8; - emagged = 1; + set_obj_flags = "EMAGGED"; installation = /obj/item/gun/energy/lasercannon }, /turf/open/floor/engine, @@ -1718,7 +1718,7 @@ "gP" = ( /obj/machinery/porta_turret{ dir = 8; - emagged = 1; + set_obj_flags = "EMAGGED"; installation = /obj/item/gun/energy/lasercannon }, /turf/open/floor/plating/airless, @@ -2613,7 +2613,7 @@ "kq" = ( /obj/machinery/porta_turret{ dir = 8; - emagged = 1; + set_obj_flags = "EMAGGED"; installation = /obj/item/gun/energy/lasercannon }, /turf/open/floor/engine/vacuum, diff --git a/_maps/RandomZLevels/undergroundoutpost45.dmm b/_maps/RandomZLevels/undergroundoutpost45.dmm index d7b5f88402..a2cb8ac3ce 100644 --- a/_maps/RandomZLevels/undergroundoutpost45.dmm +++ b/_maps/RandomZLevels/undergroundoutpost45.dmm @@ -25,12 +25,6 @@ "ag" = ( /turf/closed/wall/mineral/titanium, /area/awaymission/undergroundoutpost45/central) -"ah" = ( -/turf/closed/wall/mineral/titanium, -/area/awaymission/undergroundoutpost45/central) -"ai" = ( -/turf/closed/wall/mineral/titanium, -/area/awaymission/undergroundoutpost45/central) "aj" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor/plasteel{ @@ -146,12 +140,6 @@ heat_capacity = 1e+006 }, /area/awaymission/undergroundoutpost45/central) -"av" = ( -/turf/closed/wall/mineral/titanium, -/area/awaymission/undergroundoutpost45/central) -"aw" = ( -/turf/closed/wall/mineral/titanium, -/area/awaymission/undergroundoutpost45/central) "ax" = ( /obj/effect/landmark/awaystart, /turf/open/floor/plasteel{ @@ -168,7 +156,7 @@ }, /area/awaymission/undergroundoutpost45/central) "az" = ( -/obj/structure/sign/vacuum{ +/obj/structure/sign/warning/vacuum{ desc = "A beacon used by a teleporter."; icon = 'icons/obj/radio.dmi'; icon_state = "beacon"; @@ -180,9 +168,6 @@ heat_capacity = 1e+006 }, /area/awaymission/undergroundoutpost45/central) -"aA" = ( -/turf/closed/wall/mineral/titanium, -/area/awaymission/undergroundoutpost45/central) "aB" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on, /obj/effect/landmark/awaystart, @@ -197,9 +182,6 @@ "aD" = ( /turf/closed/wall/rust, /area/awaymission/undergroundoutpost45/central) -"aE" = ( -/turf/closed/wall/mineral/titanium, -/area/awaymission/undergroundoutpost45/central) "aF" = ( /turf/open/floor/plasteel/floorgrime{ dir = 8; @@ -1438,7 +1420,7 @@ "ds" = ( /obj/machinery/disposal/bin, /obj/structure/disposalpipe/trunk, -/obj/structure/sign/deathsposal{ +/obj/structure/sign/warning/deathsposal{ desc = "A warning sign which reads 'DISPOSAL: LEADS TO EXTERIOR'"; name = "\improper DISPOSAL: LEADS TO EXTERIOR"; pixel_y = 32 @@ -2201,11 +2183,7 @@ "eV" = ( /obj/structure/closet/emcloset, /obj/item/clothing/mask/breath, -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; - icon_state = "space"; - layer = 4; - name = "EXTERNAL AIRLOCK"; +/obj/structure/sign/warning/vacuum/external{ pixel_y = -32 }, /turf/open/floor/plating{ @@ -2721,7 +2699,7 @@ /obj/structure/disposalpipe/trunk{ dir = 1 }, -/obj/structure/sign/deathsposal{ +/obj/structure/sign/warning/deathsposal{ desc = "A warning sign which reads 'DISPOSAL: LEADS TO EXTERIOR'"; name = "\improper DISPOSAL: LEADS TO EXTERIOR"; pixel_y = -32 @@ -3815,7 +3793,7 @@ dir = 8 }, /obj/effect/decal/cleanable/dirt, -/obj/structure/sign/nosmoking_2{ +/obj/structure/sign/warning/nosmoking{ pixel_x = 32 }, /turf/open/floor/plasteel/dark{ @@ -3845,7 +3823,7 @@ pixel_y = 3 }, /obj/item/stock_parts/scanning_module, -/obj/structure/sign/nosmoking_2{ +/obj/structure/sign/warning/nosmoking{ pixel_x = -32 }, /obj/effect/turf_decal/stripes/line{ @@ -3994,7 +3972,7 @@ "iN" = ( /obj/structure/table, /obj/item/storage/firstaid/regular, -/obj/structure/sign/biohazard{ +/obj/structure/sign/warning/biohazard{ pixel_x = -32 }, /turf/open/floor/plasteel/floorgrime{ @@ -4155,7 +4133,7 @@ /obj/structure/disposalpipe/trunk{ dir = 4 }, -/obj/structure/sign/deathsposal{ +/obj/structure/sign/warning/deathsposal{ desc = "A warning sign which reads 'DISPOSAL: LEADS TO EXTERIOR'"; name = "\improper DISPOSAL: LEADS TO EXTERIOR"; pixel_y = -32 @@ -4893,7 +4871,7 @@ /obj/structure/table, /obj/item/storage/belt/utility, /obj/item/clothing/head/welding, -/obj/structure/sign/biohazard{ +/obj/structure/sign/warning/biohazard{ pixel_y = 32 }, /obj/item/device/assembly/prox_sensor, @@ -4906,7 +4884,7 @@ }, /area/awaymission/undergroundoutpost45/gateway) "kz" = ( -/obj/structure/sign/securearea{ +/obj/structure/sign/warning/securearea{ pixel_y = 32 }, /turf/open/floor/plasteel/floorgrime{ @@ -4957,7 +4935,7 @@ /obj/machinery/light/small{ dir = 8 }, -/obj/structure/sign/securearea{ +/obj/structure/sign/warning/securearea{ pixel_x = -32 }, /turf/open/floor/plasteel/white{ @@ -5179,7 +5157,7 @@ pixel_y = 25 }, /obj/effect/decal/cleanable/dirt, -/obj/structure/sign/nosmoking_2{ +/obj/structure/sign/warning/nosmoking{ pixel_x = -32 }, /obj/effect/turf_decal/stripes/line{ @@ -5215,7 +5193,7 @@ /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 8 }, -/obj/structure/sign/science{ +/obj/structure/sign/departments/science{ pixel_x = -32 }, /turf/open/floor/plasteel/purple/corner{ @@ -5337,7 +5315,7 @@ pixel_y = -1 }, /obj/item/device/multitool, -/obj/structure/sign/nosmoking_2{ +/obj/structure/sign/warning/nosmoking{ pixel_x = -32 }, /obj/effect/turf_decal/stripes/line{ @@ -5748,7 +5726,7 @@ /obj/structure/disposalpipe/trunk{ dir = 1 }, -/obj/structure/sign/deathsposal{ +/obj/structure/sign/warning/deathsposal{ desc = "A warning sign which reads 'DISPOSAL: LEADS TO EXTERIOR'"; name = "\improper DISPOSAL: LEADS TO EXTERIOR"; pixel_y = -32 @@ -5938,7 +5916,7 @@ "mm" = ( /obj/structure/closet/firecloset, /obj/machinery/light/small, -/obj/structure/sign/securearea{ +/obj/structure/sign/warning/securearea{ pixel_y = -32 }, /obj/effect/decal/cleanable/dirt, @@ -5960,7 +5938,7 @@ /area/awaymission/undergroundoutpost45/research) "mo" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/structure/sign/securearea{ +/obj/structure/sign/warning/securearea{ pixel_x = -32 }, /turf/open/floor/plasteel/purple/corner{ @@ -7626,7 +7604,7 @@ /obj/structure/disposalpipe/trunk{ dir = 4 }, -/obj/structure/sign/deathsposal{ +/obj/structure/sign/warning/deathsposal{ desc = "A warning sign which reads 'DISPOSAL: LEADS TO EXTERIOR'"; name = "\improper DISPOSAL: LEADS TO EXTERIOR"; pixel_y = -32 @@ -8186,7 +8164,7 @@ /area/awaymission/undergroundoutpost45/research) "qj" = ( /obj/effect/spawner/structure/window/reinforced, -/obj/structure/sign/securearea{ +/obj/structure/sign/warning/securearea{ desc = "A warning sign which reads 'SERVER ROOM'."; name = "SERVER ROOM"; pixel_y = 32 @@ -8402,7 +8380,7 @@ /obj/machinery/computer/monitor{ name = "primary power monitoring console" }, -/obj/structure/sign/nosmoking_2{ +/obj/structure/sign/warning/nosmoking{ pixel_x = -32 }, /turf/open/floor/plasteel/yellow/side{ @@ -8973,7 +8951,7 @@ /area/awaymission/undergroundoutpost45/research) "rA" = ( /obj/effect/spawner/structure/window/reinforced, -/obj/structure/sign/securearea{ +/obj/structure/sign/warning/securearea{ desc = "A warning sign which reads 'SERVER ROOM'."; name = "SERVER ROOM"; pixel_y = -32 @@ -9547,7 +9525,7 @@ /obj/structure/disposalpipe/trunk{ dir = 1 }, -/obj/structure/sign/deathsposal{ +/obj/structure/sign/warning/deathsposal{ desc = "A warning sign which reads 'DISPOSAL: LEADS TO EXTERIOR'"; name = "\improper DISPOSAL: LEADS TO EXTERIOR"; pixel_y = -32 @@ -10124,7 +10102,7 @@ /obj/machinery/atmospherics/components/unary/vent_scrubber/on{ dir = 1 }, -/obj/structure/sign/securearea{ +/obj/structure/sign/warning/securearea{ pixel_y = -32 }, /turf/open/floor/plasteel/yellow/side{ @@ -10246,7 +10224,7 @@ name = "Unfiltered to Mix"; on = 1 }, -/obj/structure/sign/nosmoking_2{ +/obj/structure/sign/warning/nosmoking{ pixel_x = 32 }, /turf/open/floor/plasteel/floorgrime{ @@ -10820,11 +10798,7 @@ "uN" = ( /obj/structure/closet/emcloset, /obj/item/clothing/mask/breath, -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; - icon_state = "space"; - layer = 4; - name = "EXTERNAL AIRLOCK"; +/obj/structure/sign/warning/vacuum/external{ pixel_x = -32 }, /turf/open/floor/plating{ @@ -10942,7 +10916,7 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, -/obj/structure/sign/securearea{ +/obj/structure/sign/warning/securearea{ pixel_x = 32 }, /obj/effect/decal/cleanable/dirt, @@ -10990,7 +10964,7 @@ /area/awaymission/undergroundoutpost45/engineering) "vc" = ( /obj/machinery/door/firedoor, -/obj/structure/sign/securearea{ +/obj/structure/sign/warning/securearea{ pixel_y = 32 }, /obj/machinery/door/poddoor/preopen{ @@ -11405,10 +11379,7 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'HIGH VOLTAGE'"; - icon_state = "shock"; - name = "HIGH VOLTAGE"; +/obj/structure/sign/warning/electricshock{ pixel_y = -32 }, /obj/machinery/vending/engivend{ @@ -11714,7 +11685,7 @@ /obj/structure/disposalpipe/trunk{ dir = 4 }, -/obj/structure/sign/deathsposal{ +/obj/structure/sign/warning/deathsposal{ desc = "A warning sign which reads 'DISPOSAL: LEADS TO EXTERIOR'"; name = "\improper DISPOSAL: LEADS TO EXTERIOR"; pixel_x = -32 @@ -12208,7 +12179,7 @@ dir = 2; id = "UO45_mining" }, -/obj/structure/sign/nosmoking_2{ +/obj/structure/sign/warning/nosmoking{ pixel_x = -32 }, /obj/effect/turf_decal/stripes/line{ @@ -12604,11 +12575,7 @@ /obj/machinery/light/small{ dir = 4 }, -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; - icon_state = "space"; - layer = 4; - name = "EXTERNAL AIRLOCK"; +/obj/structure/sign/warning/vacuum/external{ pixel_x = 32 }, /obj/effect/decal/cleanable/dirt, @@ -12745,16 +12712,6 @@ temperature = 363.9 }, /area/awaymission/undergroundoutpost45/caves) -"ys" = ( -/obj/structure/alien/weeds, -/obj/structure/bed/nest, -/turf/open/floor/plating/asteroid{ - initial_gas_mix = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9"; - heat_capacity = 1e+006; - name = "Cave Floor"; - temperature = 363.9 - }, -/area/awaymission/undergroundoutpost45/caves) "yt" = ( /obj/structure/alien/weeds, /obj/structure/glowshroom/single, @@ -12775,16 +12732,6 @@ temperature = 363.9 }, /area/awaymission/undergroundoutpost45/caves) -"yv" = ( -/obj/structure/alien/weeds, -/obj/effect/decal/cleanable/blood/gibs/core, -/turf/open/floor/plating/asteroid{ - initial_gas_mix = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9"; - heat_capacity = 1e+006; - name = "Cave Floor"; - temperature = 363.9 - }, -/area/awaymission/undergroundoutpost45/caves) "yw" = ( /obj/structure/alien/weeds, /obj/effect/decal/cleanable/blood/splatter, @@ -12795,24 +12742,6 @@ temperature = 363.9 }, /area/awaymission/undergroundoutpost45/caves) -"yx" = ( -/obj/structure/alien/weeds, -/turf/open/floor/plating/asteroid{ - initial_gas_mix = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9"; - heat_capacity = 1e+006; - name = "Cave Floor"; - temperature = 363.9 - }, -/area/awaymission/undergroundoutpost45/caves) -"yy" = ( -/obj/structure/alien/weeds, -/turf/open/floor/plating/asteroid{ - initial_gas_mix = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9"; - heat_capacity = 1e+006; - name = "Cave Floor"; - temperature = 363.9 - }, -/area/awaymission/undergroundoutpost45/caves) "yz" = ( /obj/structure/alien/resin/membrane, /turf/open/floor/plating/asteroid{ @@ -12862,37 +12791,6 @@ temperature = 363.9 }, /area/awaymission/undergroundoutpost45/caves) -"yE" = ( -/obj/structure/alien/weeds, -/obj/effect/decal/cleanable/blood/splatter, -/turf/open/floor/plating/asteroid{ - initial_gas_mix = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9"; - heat_capacity = 1e+006; - name = "Cave Floor"; - temperature = 363.9 - }, -/area/awaymission/undergroundoutpost45/caves) -"yF" = ( -/obj/structure/alien/weeds, -/obj/effect/decal/cleanable/blood/gibs/down, -/turf/open/floor/plating/asteroid{ - initial_gas_mix = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9"; - heat_capacity = 1e+006; - name = "Cave Floor"; - temperature = 363.9 - }, -/area/awaymission/undergroundoutpost45/caves) -"yG" = ( -/obj/structure/alien/weeds, -/obj/structure/bed/nest, -/obj/effect/mob_spawn/human, -/turf/open/floor/plating/asteroid{ - initial_gas_mix = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9"; - heat_capacity = 1e+006; - name = "Cave Floor"; - temperature = 363.9 - }, -/area/awaymission/undergroundoutpost45/caves) "yH" = ( /obj/structure/alien/weeds, /obj/effect/decal/cleanable/blood/gibs/down, @@ -12904,161 +12802,6 @@ temperature = 363.9 }, /area/awaymission/undergroundoutpost45/caves) -"yI" = ( -/obj/structure/alien/weeds, -/obj/effect/mob_spawn/human, -/turf/open/floor/plating/asteroid{ - initial_gas_mix = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9"; - heat_capacity = 1e+006; - name = "Cave Floor"; - temperature = 363.9 - }, -/area/awaymission/undergroundoutpost45/caves) -"yJ" = ( -/obj/item/shard, -/turf/open/floor/mineral/titanium/blue, -/area/awaymission/undergroundoutpost45/caves) -"yK" = ( -/obj/item/shard{ - icon_state = "medium" - }, -/turf/open/floor/mineral/titanium/blue, -/area/awaymission/undergroundoutpost45/caves) -"yL" = ( -/obj/item/shard{ - icon_state = "small" - }, -/turf/open/floor/mineral/titanium/blue, -/area/awaymission/undergroundoutpost45/caves) -"yM" = ( -/turf/open/floor/mineral/titanium/blue, -/area/awaymission/undergroundoutpost45/caves) -"yN" = ( -/obj/structure/grille/broken, -/turf/open/floor/mineral/titanium/blue, -/area/awaymission/undergroundoutpost45/caves) -"yO" = ( -/obj/item/stack/rods, -/turf/open/floor/mineral/titanium/blue, -/area/awaymission/undergroundoutpost45/caves) -"yP" = ( -/obj/item/stack/cable_coil, -/turf/open/floor/mineral/titanium/blue, -/area/awaymission/undergroundoutpost45/caves) -"yQ" = ( -/obj/item/stack/cable_coil{ - amount = 5 - }, -/turf/open/floor/mineral/titanium/blue, -/area/awaymission/undergroundoutpost45/caves) -"yR" = ( -/obj/item/stack/cable_coil{ - amount = 2; - icon_state = "coil_red2"; - item_state = "coil_red2" - }, -/turf/open/floor/mineral/titanium/blue, -/area/awaymission/undergroundoutpost45/caves) -"yS" = ( -/obj/item/stack/cable_coil{ - amount = 1; - icon_state = "coil_red1"; - item_state = "coil_red1" - }, -/turf/open/floor/mineral/titanium/blue, -/area/awaymission/undergroundoutpost45/caves) -"yT" = ( -/turf/open/floor/plasteel{ - heat_capacity = 1e+006 - }, -/area/awaymission/undergroundoutpost45/caves) -"yU" = ( -/turf/open/floor/plasteel/floorgrime{ - dir = 8; - heat_capacity = 1e+006 - }, -/area/awaymission/undergroundoutpost45/caves) -"yV" = ( -/turf/open/floor/plasteel{ - dir = 8; - heat_capacity = 1e+006; - icon_state = "damaged1" - }, -/area/awaymission/undergroundoutpost45/caves) -"yW" = ( -/turf/open/floor/plasteel{ - dir = 8; - heat_capacity = 1e+006; - icon_state = "damaged2" - }, -/area/awaymission/undergroundoutpost45/caves) -"yX" = ( -/turf/open/floor/plasteel{ - dir = 8; - heat_capacity = 1e+006; - icon_state = "damaged3" - }, -/area/awaymission/undergroundoutpost45/caves) -"yY" = ( -/turf/open/floor/plasteel{ - dir = 8; - heat_capacity = 1e+006; - icon_state = "damaged4" - }, -/area/awaymission/undergroundoutpost45/caves) -"yZ" = ( -/turf/open/floor/plasteel{ - dir = 8; - heat_capacity = 1e+006; - icon_state = "damaged5" - }, -/area/awaymission/undergroundoutpost45/caves) -"za" = ( -/turf/open/floor/plasteel{ - dir = 8; - heat_capacity = 1e+006; - icon_state = "floorscorched1" - }, -/area/awaymission/undergroundoutpost45/caves) -"zb" = ( -/turf/open/floor/plasteel{ - dir = 8; - heat_capacity = 1e+006; - icon_state = "floorscorched2" - }, -/area/awaymission/undergroundoutpost45/caves) -"zc" = ( -/turf/open/floor/plasteel/shuttle, -/area/awaymission/undergroundoutpost45/caves) -"zd" = ( -/turf/open/floor/plating{ - heat_capacity = 1e+006 - }, -/area/awaymission/undergroundoutpost45/caves) -"ze" = ( -/turf/open/floor/plating{ - heat_capacity = 1e+006; - icon_state = "platingdmg1" - }, -/area/awaymission/undergroundoutpost45/caves) -"zf" = ( -/turf/open/floor/plating{ - heat_capacity = 1e+006; - icon_state = "platingdmg2" - }, -/area/awaymission/undergroundoutpost45/caves) -"zg" = ( -/turf/open/floor/plating{ - heat_capacity = 1e+006; - icon_state = "platingdmg3" - }, -/area/awaymission/undergroundoutpost45/caves) -"zh" = ( -/turf/open/floor/plating{ - heat_capacity = 1e+006; - icon_state = "panelscorched" - }, -/area/awaymission/undergroundoutpost45/caves) "zi" = ( /obj/effect/mapping_helpers/planet_z, /turf/open/space, diff --git a/_maps/RandomZLevels/wildwest.dmm b/_maps/RandomZLevels/wildwest.dmm index e24d9dcb85..cdc243eb85 100644 --- a/_maps/RandomZLevels/wildwest.dmm +++ b/_maps/RandomZLevels/wildwest.dmm @@ -31,13 +31,6 @@ icon_state = "cult" }, /area/awaymission/wildwest/vault) -"ai" = ( -/turf/closed/indestructible{ - desc = "The patterns engraved on the wall seem to shift as you try to focus on them. You feel sick."; - icon = 'icons/turf/walls/cult_wall.dmi'; - icon_state = "cult" - }, -/area/awaymission/wildwest/vault) "aj" = ( /turf/open/floor/plating{ icon_state = "cultdamage3" @@ -561,9 +554,6 @@ /obj/machinery/door/window, /turf/open/floor/wood, /area/awaymission/wildwest/mines) -"cc" = ( -/turf/closed/wall/mineral/sandstone, -/area/awaymission/wildwest/mines) "cd" = ( /obj/effect/mob_spawn/human/cook{ mob_name = "Chef" @@ -933,9 +923,6 @@ }, /turf/open/floor/carpet, /area/awaymission/wildwest/mines) -"dl" = ( -/turf/closed/wall/mineral/sandstone, -/area/awaymission/wildwest/mines) "dm" = ( /obj/structure/mineral_door/wood{ icon_state = "wood" @@ -1405,7 +1392,7 @@ }, /area/awaymission/wildwest/gov) "eJ" = ( -/obj/structure/sign/vacuum, +/obj/structure/sign/warning/vacuum, /turf/closed/wall/r_wall, /area/awaymission/wildwest/refine) "eK" = ( @@ -2096,22 +2083,10 @@ "gJ" = ( /turf/closed/wall/mineral/titanium, /area/awaymission/wildwest/refine) -"gK" = ( -/turf/closed/wall/mineral/titanium, -/area/awaymission/wildwest/refine) "gL" = ( /obj/machinery/door/unpowered/shuttle, /turf/open/floor/mineral/titanium/yellow, /area/awaymission/wildwest/refine) -"gM" = ( -/turf/closed/wall/mineral/titanium, -/area/awaymission/wildwest/refine) -"gN" = ( -/turf/closed/wall/mineral/titanium, -/area/awaymission/wildwest/refine) -"gO" = ( -/turf/closed/wall/mineral/titanium, -/area/awaymission/wildwest/refine) "gP" = ( /obj/structure/chair, /turf/open/floor/mineral/titanium/yellow, @@ -2119,18 +2094,9 @@ "gQ" = ( /turf/open/floor/mineral/titanium/yellow, /area/awaymission/wildwest/refine) -"gR" = ( -/turf/closed/wall/mineral/titanium, -/area/awaymission/wildwest/refine) "gS" = ( /turf/closed/wall/mineral/titanium/nodiagonal, /area/awaymission/wildwest/refine) -"gT" = ( -/turf/closed/wall/mineral/titanium, -/area/awaymission/wildwest/refine) -"gU" = ( -/turf/closed/wall/mineral/titanium, -/area/awaymission/wildwest/refine) "gV" = ( /obj/effect/landmark/awaystart, /turf/open/floor/plating/ironsand{ @@ -22574,7 +22540,7 @@ ab ah ac ah -ai +ah ac ac ac diff --git a/_maps/_basemap.dm b/_maps/_basemap.dm index f522d569c1..794f57ea58 100644 --- a/_maps/_basemap.dm +++ b/_maps/_basemap.dm @@ -12,14 +12,14 @@ #ifdef ALL_MAPS #include "map_files\debug\runtimestation.dmm" - #include "cit_map_files\Deltastation\DeltaStation2.dmm" - #include "cit_map_files\MetaStation\MetaStation.dmm" - #include "cit_map_files\OmegaStation\OmegaStation.dmm" - #include "cit_map_files\PubbyStation\PubbyStation.dmm" - #include "cit_map_files\BoxStation\BoxStation.dmm" + #include "map_files\Deltastation\DeltaStation2.dmm" + #include "map_files\MetaStation\MetaStation.dmm" + #include "map_files\OmegaStation\OmegaStation.dmm" + #include "map_files\PubbyStation\PubbyStation.dmm" + #include "map_files\BoxStation\BoxStation.dmm" #ifdef TRAVISBUILDING #include "templates.dm" #endif #endif -#endif +#endif \ No newline at end of file diff --git a/_maps/boxstation.json b/_maps/boxstation.json index a1862ce62b..92d377171f 100644 --- a/_maps/boxstation.json +++ b/_maps/boxstation.json @@ -1,5 +1,11 @@ { "map_name": "Box Station", - "map_path": "cit_map_files/BoxStation", - "map_file": "BoxStation.dmm" + "map_path": "map_files/BoxStation", + "map_file": "BoxStation.dmm", + "shuttles": { + "cargo": "cargo_box", + "ferry": "ferry_fancy", + "whiteship": "whiteship_meta", + "emergency": "emergency_box" + } } diff --git a/_maps/deltastation.json b/_maps/deltastation.json index ff6dedd66d..6d20f578fa 100644 --- a/_maps/deltastation.json +++ b/_maps/deltastation.json @@ -1,5 +1,11 @@ { "map_name": "Delta Station", - "map_path": "cit_map_files/Deltastation", - "map_file": "DeltaStation2.dmm" + "map_path": "map_files/Deltastation", + "map_file": "DeltaStation2.dmm", + "shuttles": { + "emergency": "emergency_delta", + "ferry": "ferry_fancy", + "cargo": "cargo_delta", + "whiteship": "whiteship_delta" + } } diff --git a/_maps/map_files/BoxStation/BoxStation.dmm b/_maps/map_files/BoxStation/BoxStation.dmm index c81b9539e6..56d1c6add8 100644 --- a/_maps/map_files/BoxStation/BoxStation.dmm +++ b/_maps/map_files/BoxStation/BoxStation.dmm @@ -15,7 +15,7 @@ /turf/open/space, /area/space/nearstation) "aah" = ( -/obj/structure/sign/securearea{ +/obj/structure/sign/warning/securearea{ pixel_y = -32 }, /turf/open/space, @@ -77,10 +77,7 @@ }, /area/security/prison) "aaq" = ( -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'HIGH VOLTAGE'"; - icon_state = "shock"; - name = "HIGH VOLTAGE"; +/obj/structure/sign/warning/electricshock{ pixel_y = 32 }, /obj/machinery/hydroponics/soil, @@ -240,7 +237,7 @@ /area/security/prison) "aaR" = ( /obj/structure/lattice, -/obj/structure/sign/securearea{ +/obj/structure/sign/warning/securearea{ pixel_y = -32 }, /turf/open/space, @@ -875,7 +872,7 @@ /turf/open/floor/plasteel/dark, /area/ai_monitored/security/armory) "acw" = ( -/obj/structure/sign/securearea{ +/obj/structure/sign/warning/securearea{ pixel_y = -32 }, /obj/structure/lattice/catwalk, @@ -1307,11 +1304,7 @@ /turf/open/floor/wood, /area/crew_quarters/theatre) "adr" = ( -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; - icon_state = "space"; - layer = 4; - name = "EXTERNAL AIRLOCK"; +/obj/structure/sign/warning/vacuum/external{ pixel_x = -32 }, /turf/open/floor/plating, @@ -1396,7 +1389,7 @@ /turf/open/space, /area/solar/port/fore) "adB" = ( -/obj/structure/sign/securearea{ +/obj/structure/sign/warning/securearea{ pixel_x = 32 }, /turf/open/space, @@ -2135,12 +2128,6 @@ /turf/open/floor/plating, /area/ai_monitored/security/armory) "afa" = ( -/obj/machinery/door/airlock/titanium{ - name = "Emergency Shuttle Airlock" - }, -/obj/docking_port/mobile/emergency{ - name = "Box emergency shuttle" - }, /obj/docking_port/stationary{ dir = 4; dwidth = 12; @@ -2150,8 +2137,8 @@ turf_type = /turf/open/space; width = 32 }, -/turf/open/floor/plating, -/area/shuttle/escape) +/turf/open/space/basic, +/area/space) "afb" = ( /obj/machinery/recharger, /obj/structure/table, @@ -2259,7 +2246,8 @@ id = "pod3"; name = "escape pod 3"; port_direction = 2; - preferred_direction = 4 + preferred_direction = 4; + timid = 0 }, /turf/open/floor/mineral/titanium/blue, /area/shuttle/pod_3) @@ -2468,7 +2456,7 @@ /area/ai_monitored/storage/eva) "afQ" = ( /obj/effect/spawner/structure/window/reinforced, -/obj/structure/sign/securearea{ +/obj/structure/sign/warning/securearea{ pixel_x = -32 }, /turf/open/floor/plating, @@ -2530,7 +2518,7 @@ /turf/open/floor/plasteel, /area/security/main) "aga" = ( -/obj/structure/sign/pods{ +/obj/structure/sign/warning/pods{ pixel_x = 32 }, /obj/effect/turf_decal/stripes/line{ @@ -2773,7 +2761,7 @@ /obj/structure/cable{ icon_state = "1-2" }, -/obj/structure/sign/securearea{ +/obj/structure/sign/warning/securearea{ pixel_x = -32 }, /obj/machinery/door/poddoor/preopen{ @@ -3740,10 +3728,7 @@ /obj/structure/cable{ icon_state = "0-4" }, -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'HIGH VOLTAGE'"; - icon_state = "shock"; - name = "HIGH VOLTAGE"; +/obj/structure/sign/warning/electricshock{ pixel_x = -32 }, /obj/effect/spawner/structure/window/reinforced, @@ -3902,7 +3887,7 @@ }, /area/security/brig) "ajd" = ( -/obj/structure/sign/goldenplaque{ +/obj/structure/sign/plaques/golden{ pixel_y = 32 }, /turf/open/floor/plasteel/red/side{ @@ -3941,7 +3926,7 @@ }, /obj/structure/closet/secure_closet/courtroom, /obj/effect/decal/cleanable/cobweb, -/obj/structure/sign/securearea{ +/obj/structure/sign/warning/securearea{ pixel_x = -32 }, /obj/item/gavelhammer, @@ -4018,7 +4003,7 @@ /turf/open/floor/plasteel, /area/security/processing) "ajt" = ( -/obj/structure/sign/securearea{ +/obj/structure/sign/warning/securearea{ pixel_x = 32 }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ @@ -4285,11 +4270,7 @@ /area/maintenance/solars/port/fore) "ajZ" = ( /obj/effect/spawner/structure/window/reinforced, -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; - icon_state = "space"; - layer = 4; - name = "EXTERNAL AIRLOCK"; +/obj/structure/sign/warning/vacuum/external{ pixel_y = 32 }, /turf/open/floor/plating, @@ -4546,11 +4527,7 @@ /turf/open/floor/plating, /area/maintenance/solars/port/fore) "akG" = ( -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; - icon_state = "space"; - layer = 4; - name = "EXTERNAL AIRLOCK"; +/obj/structure/sign/warning/vacuum/external{ pixel_y = 32 }, /obj/effect/spawner/structure/window/reinforced, @@ -5036,11 +5013,7 @@ /turf/closed/wall/r_wall, /area/maintenance/solars/port/fore) "alS" = ( -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; - icon_state = "space"; - layer = 4; - name = "EXTERNAL AIRLOCK"; +/obj/structure/sign/warning/vacuum/external{ pixel_x = 32 }, /turf/open/floor/plating, @@ -5345,10 +5318,7 @@ /turf/open/floor/plating, /area/maintenance/port/fore) "amK" = ( -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'KEEP CLEAR OF DOCKING AREA'."; - name = "KEEP CLEAR: DOCKING AREA" - }, +/obj/structure/sign/warning/docking, /turf/closed/wall, /area/security/processing) "amL" = ( @@ -5669,10 +5639,7 @@ }, /area/hallway/primary/fore) "anx" = ( -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'HIGH VOLTAGE'"; - icon_state = "shock"; - name = "HIGH VOLTAGE"; +/obj/structure/sign/warning/electricshock{ pixel_y = 32 }, /turf/open/floor/plasteel/red/corner{ @@ -5680,10 +5647,7 @@ }, /area/hallway/primary/fore) "any" = ( -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'HIGH VOLTAGE'"; - icon_state = "shock"; - name = "HIGH VOLTAGE"; +/obj/structure/sign/warning/electricshock{ pixel_y = 32 }, /obj/machinery/light{ @@ -5705,7 +5669,7 @@ /obj/machinery/light{ dir = 1 }, -/obj/structure/sign/securearea{ +/obj/structure/sign/warning/securearea{ pixel_y = 32 }, /turf/open/floor/plasteel/red/corner{ @@ -5737,21 +5701,13 @@ /turf/open/floor/plating, /area/maintenance/fore/secondary) "anG" = ( -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; - icon_state = "space"; - layer = 4; - name = "EXTERNAL AIRLOCK"; +/obj/structure/sign/warning/vacuum/external{ pixel_y = 32 }, /turf/open/floor/plating, /area/maintenance/fore/secondary) "anH" = ( -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'HIGH VOLTAGE'"; - icon_state = "shock"; - name = "HIGH VOLTAGE" - }, +/obj/structure/sign/warning/electricshock, /turf/closed/wall/r_wall, /area/maintenance/solars/port/fore) "anI" = ( @@ -5787,29 +5743,17 @@ /turf/open/floor/plating, /area/security/processing) "anO" = ( -/obj/machinery/door/airlock/titanium{ - id_tag = "prisonshuttle"; - name = "Labor Shuttle Airlock" - }, -/obj/docking_port/mobile{ - dir = 8; - dwidth = 2; - height = 5; - id = "laborcamp"; - name = "labor camp shuttle"; - port_direction = 4; - width = 9 - }, /obj/docking_port/stationary{ dir = 8; dwidth = 2; height = 5; id = "laborcamp_home"; name = "fore bay 1"; + roundstart_template = /datum/map_template/shuttle/labour/box; width = 9 }, -/turf/open/floor/mineral/titanium/blue, -/area/shuttle/labor) +/turf/open/space/basic, +/area/space) "anP" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/security{ @@ -5821,10 +5765,7 @@ /turf/open/floor/plasteel, /area/security/processing) "anQ" = ( -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'HIGH VOLTAGE'"; - icon_state = "shock"; - name = "HIGH VOLTAGE"; +/obj/structure/sign/warning/electricshock{ pixel_y = 32 }, /obj/machinery/light{ @@ -5949,11 +5890,7 @@ "aoi" = ( /obj/structure/rack, /obj/item/clothing/mask/gas, -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; - icon_state = "space"; - layer = 4; - name = "EXTERNAL AIRLOCK"; +/obj/structure/sign/warning/vacuum/external{ pixel_y = 32 }, /obj/item/device/multitool, @@ -5996,11 +5933,7 @@ /turf/open/floor/plating, /area/maintenance/port/fore) "aoq" = ( -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; - icon_state = "space"; - layer = 4; - name = "EXTERNAL AIRLOCK"; +/obj/structure/sign/warning/vacuum/external{ pixel_y = -32 }, /obj/effect/spawner/structure/window/reinforced, @@ -6823,11 +6756,7 @@ /turf/open/floor/plating, /area/maintenance/solars/starboard/fore) "aqx" = ( -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'HIGH VOLTAGE'"; - icon_state = "shock"; - name = "HIGH VOLTAGE" - }, +/obj/structure/sign/warning/electricshock, /turf/closed/wall/r_wall, /area/maintenance/solars/starboard/fore) "aqy" = ( @@ -7098,11 +7027,7 @@ }, /area/holodeck/rec_center) "arp" = ( -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; - icon_state = "space"; - layer = 4; - name = "EXTERNAL AIRLOCK"; +/obj/structure/sign/warning/vacuum/external{ pixel_y = 32 }, /obj/effect/spawner/structure/window/reinforced, @@ -7810,7 +7735,8 @@ dir = 4; dwidth = 4; height = 9; - width = 9 + width = 9; + timid = 0 }, /obj/machinery/bluespace_beacon, /obj/machinery/computer/auxillary_base, @@ -8473,11 +8399,7 @@ /turf/open/floor/plating, /area/maintenance/fore) "ave" = ( -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; - icon_state = "space"; - layer = 4; - name = "EXTERNAL AIRLOCK"; +/obj/structure/sign/warning/vacuum/external{ pixel_y = 32 }, /obj/effect/spawner/lootdrop/maintenance, @@ -8571,11 +8493,7 @@ }, /area/crew_quarters/dorms) "avo" = ( -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'HIGH VOLTAGE'"; - icon_state = "shock"; - name = "HIGH VOLTAGE" - }, +/obj/structure/sign/warning/electricshock, /turf/closed/wall, /area/maintenance/department/electrical) "avp" = ( @@ -8705,11 +8623,7 @@ /turf/open/floor/plasteel, /area/crew_quarters/dorms) "avH" = ( -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'HIGH VOLTAGE'"; - icon_state = "shock"; - name = "HIGH VOLTAGE" - }, +/obj/structure/sign/warning/electricshock, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -8774,7 +8688,7 @@ /turf/open/floor/plasteel/floorgrime, /area/maintenance/department/electrical) "avP" = ( -/obj/structure/sign/pods, +/obj/structure/sign/warning/pods, /turf/closed/wall, /area/hallway/secondary/entry) "avQ" = ( @@ -9394,10 +9308,7 @@ /turf/open/floor/plating, /area/maintenance/port/fore) "axm" = ( -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'HIGH VOLTAGE'"; - icon_state = "shock"; - name = "HIGH VOLTAGE"; +/obj/structure/sign/warning/electricshock{ pixel_y = -32 }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ @@ -9434,10 +9345,7 @@ /turf/open/floor/plating, /area/maintenance/fore) "axr" = ( -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'HIGH VOLTAGE'"; - icon_state = "shock"; - name = "HIGH VOLTAGE"; +/obj/structure/sign/warning/electricshock{ pixel_y = -32 }, /obj/structure/cable{ @@ -9949,7 +9857,7 @@ /obj/structure/cable{ icon_state = "1-2" }, -/obj/structure/sign/securearea{ +/obj/structure/sign/warning/securearea{ pixel_x = 32 }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, @@ -10036,7 +9944,7 @@ /obj/structure/cable{ icon_state = "0-2" }, -/obj/structure/sign/securearea{ +/obj/structure/sign/warning/securearea{ pixel_y = 32 }, /obj/effect/spawner/structure/window/reinforced, @@ -10716,18 +10624,11 @@ /turf/open/floor/plating, /area/maintenance/department/electrical) "aAC" = ( -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'KEEP CLEAR OF DOCKING AREA'."; - name = "KEEP CLEAR: DOCKING AREA" - }, +/obj/structure/sign/warning/docking, /turf/closed/wall/r_wall, /area/hallway/secondary/entry) "aAD" = ( -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; - icon_state = "space"; - layer = 4; - name = "EXTERNAL AIRLOCK"; +/obj/structure/sign/warning/vacuum/external{ pixel_y = 32 }, /obj/effect/spawner/structure/window/reinforced, @@ -11938,11 +11839,7 @@ /turf/open/floor/plasteel/cafeteria, /area/crew_quarters/heads/hor) "aDI" = ( -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'HIGH VOLTAGE'"; - icon_state = "shock"; - name = "HIGH VOLTAGE" - }, +/obj/structure/sign/warning/electricshock, /turf/closed/wall/r_wall, /area/ai_monitored/storage/eva) "aDK" = ( @@ -12417,7 +12314,7 @@ network = list("SS13") }, /obj/structure/table, -/obj/structure/sign/biohazard{ +/obj/structure/sign/warning/biohazard{ pixel_x = -32 }, /obj/item/storage/firstaid/regular, @@ -12450,7 +12347,7 @@ "aEU" = ( /obj/structure/table, /obj/machinery/recharger, -/obj/structure/sign/biohazard{ +/obj/structure/sign/warning/biohazard{ pixel_x = 32 }, /turf/open/floor/plasteel, @@ -12494,7 +12391,7 @@ /turf/open/floor/plasteel/dark, /area/ai_monitored/storage/eva) "aFc" = ( -/obj/structure/sign/securearea, +/obj/structure/sign/warning/securearea, /turf/closed/wall/r_wall, /area/ai_monitored/storage/eva) "aFd" = ( @@ -13546,7 +13443,7 @@ /turf/open/floor/plasteel, /area/storage/primary) "aHF" = ( -/obj/structure/sign/securearea, +/obj/structure/sign/warning/securearea, /turf/closed/wall/r_wall, /area/ai_monitored/nuke_storage) "aHG" = ( @@ -14736,7 +14633,7 @@ /turf/open/floor/plasteel, /area/gateway) "aKB" = ( -/obj/structure/sign/securearea, +/obj/structure/sign/warning/securearea, /turf/closed/wall/r_wall, /area/gateway) "aKC" = ( @@ -14994,10 +14891,7 @@ /turf/open/floor/plasteel, /area/hallway/primary/port) "aLl" = ( -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'HIGH VOLTAGE'"; - icon_state = "shock"; - name = "HIGH VOLTAGE"; +/obj/structure/sign/warning/electricshock{ pixel_y = 32 }, /obj/machinery/atmospherics/components/unary/vent_scrubber/on, @@ -15157,10 +15051,7 @@ /obj/machinery/light{ dir = 1 }, -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'HIGH VOLTAGE'"; - icon_state = "shock"; - name = "HIGH VOLTAGE"; +/obj/structure/sign/warning/electricshock{ pixel_y = 32 }, /obj/effect/turf_decal/stripes/corner{ @@ -16235,10 +16126,7 @@ /area/hallway/primary/central) "aOF" = ( /obj/machinery/light, -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'HIGH VOLTAGE'"; - icon_state = "shock"; - name = "HIGH VOLTAGE"; +/obj/structure/sign/warning/electricshock{ pixel_y = -32 }, /obj/machinery/door/firedoor, @@ -16247,10 +16135,7 @@ }, /area/hallway/primary/central) "aOG" = ( -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'HIGH VOLTAGE'"; - icon_state = "shock"; - name = "HIGH VOLTAGE"; +/obj/structure/sign/warning/electricshock{ pixel_y = -32 }, /obj/machinery/door/firedoor, @@ -16519,7 +16404,7 @@ /area/hallway/secondary/entry) "aPw" = ( /obj/machinery/disposal/bin, -/obj/structure/sign/securearea{ +/obj/structure/sign/warning/securearea{ desc = "Under the painting a plaque reads: 'While the meat grinder may not have spared you, fear not. Not one part of you has gone to waste... You were delicious.'"; icon_state = "monkey_painting"; name = "Mr. Deempisi portrait"; @@ -16937,11 +16822,7 @@ /turf/open/floor/plating, /area/hallway/secondary/exit) "aQG" = ( -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; - icon_state = "space"; - layer = 4; - name = "EXTERNAL AIRLOCK"; +/obj/structure/sign/warning/vacuum/external{ pixel_y = 32 }, /obj/effect/turf_decal/stripes/line{ @@ -17390,10 +17271,7 @@ /turf/open/floor/plasteel, /area/storage/tools) "aRW" = ( -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'KEEP CLEAR OF DOCKING AREA'."; - name = "KEEP CLEAR: DOCKING AREA" - }, +/obj/structure/sign/warning/docking, /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/hallway/secondary/exit) @@ -17473,13 +17351,6 @@ /obj/machinery/atmospherics/components/unary/vent_scrubber/on, /turf/open/floor/plasteel, /area/crew_quarters/locker) -<<<<<<< HEAD -"aSj" = ( -/obj/effect/landmark/lightsout, -/turf/open/floor/plasteel, -/area/crew_quarters/locker) -======= ->>>>>>> e645319... Changes up the Construction Area on Box slightly. (#35009) "aSk" = ( /obj/structure/table, /obj/item/stack/cable_coil/random, @@ -17853,11 +17724,7 @@ cyclelinkeddir = 4; name = "Escape Airlock" }, -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; - icon_state = "space"; - layer = 4; - name = "EXTERNAL AIRLOCK"; +/obj/structure/sign/warning/vacuum/external{ pixel_y = 32 }, /turf/open/floor/plating, @@ -18424,10 +18291,7 @@ /turf/open/floor/plasteel, /area/storage/tools) "aVb" = ( -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'HIGH VOLTAGE'"; - icon_state = "shock"; - name = "HIGH VOLTAGE"; +/obj/structure/sign/warning/electricshock{ pixel_y = 32 }, /obj/machinery/door/firedoor, @@ -18436,7 +18300,7 @@ }, /area/hallway/primary/central) "aVc" = ( -/obj/structure/sign/securearea{ +/obj/structure/sign/warning/securearea{ pixel_x = 32 }, /obj/machinery/door/firedoor, @@ -18622,7 +18486,7 @@ /turf/open/floor/plasteel, /area/bridge) "aVt" = ( -/obj/structure/sign/securearea{ +/obj/structure/sign/warning/securearea{ pixel_x = -32 }, /obj/machinery/door/firedoor, @@ -18634,10 +18498,7 @@ /turf/open/floor/plasteel, /area/bridge) "aVu" = ( -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'HIGH VOLTAGE'"; - icon_state = "shock"; - name = "HIGH VOLTAGE"; +/obj/structure/sign/warning/electricshock{ pixel_y = 32 }, /obj/machinery/door/firedoor, @@ -18871,12 +18732,7 @@ /turf/open/floor/carpet, /area/library) "aWa" = ( -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; - icon_state = "space"; - layer = 4; - name = "EXTERNAL AIRLOCK" - }, +/obj/structure/sign/warning/vacuum/external, /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/hallway/secondary/entry) @@ -21250,7 +21106,7 @@ "bcg" = ( /obj/structure/table, /obj/item/aiModule/supplied/freeform, -/obj/structure/sign/kiddieplaque{ +/obj/structure/sign/plaques/kiddie{ pixel_x = 32 }, /obj/machinery/camera/motion{ @@ -21401,11 +21257,7 @@ /turf/open/floor/plasteel, /area/hallway/secondary/exit) "bcB" = ( -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; - icon_state = "space"; - layer = 4; - name = "EXTERNAL AIRLOCK"; +/obj/structure/sign/warning/vacuum/external{ pixel_x = 32 }, /obj/effect/turf_decal/stripes/line{ @@ -22322,7 +22174,7 @@ id = "garbage" }, /obj/machinery/recycler, -/obj/structure/sign/securearea{ +/obj/structure/sign/warning/securearea{ name = "\improper STAY CLEAR HEAVY MACHINERY"; pixel_y = 32 }, @@ -22404,11 +22256,7 @@ /turf/open/floor/plasteel/freezer, /area/crew_quarters/toilet/locker) "bfb" = ( -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; - icon_state = "space"; - layer = 4; - name = "EXTERNAL AIRLOCK"; +/obj/structure/sign/warning/vacuum/external{ pixel_y = 32 }, /obj/effect/landmark/event_spawn, @@ -22634,7 +22482,7 @@ /turf/open/floor/plating, /area/medical/medbay/central) "bfH" = ( -/obj/structure/sign/bluecross_2, +/obj/structure/sign/departments/medbay/alt, /turf/closed/wall, /area/medical/medbay/central) "bfI" = ( @@ -22734,7 +22582,7 @@ }, /area/hallway/primary/starboard) "bfZ" = ( -/obj/structure/sign/securearea{ +/obj/structure/sign/warning/securearea{ pixel_y = -32 }, /turf/open/floor/plasteel/purple/side{ @@ -23951,7 +23799,7 @@ dir = 1; id = "garbage" }, -/obj/structure/sign/vacuum{ +/obj/structure/sign/warning/vacuum{ pixel_x = -32 }, /turf/open/floor/plating, @@ -24472,7 +24320,7 @@ /obj/machinery/shower{ dir = 8 }, -/obj/structure/sign/securearea{ +/obj/structure/sign/warning/securearea{ pixel_x = 32 }, /obj/effect/turf_decal/stripes/line{ @@ -24580,10 +24428,7 @@ /turf/open/floor/plating, /area/maintenance/port) "bkE" = ( -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'KEEP CLEAR OF DOCKING AREA'."; - name = "KEEP CLEAR: DOCKING AREA" - }, +/obj/structure/sign/warning/docking, /turf/closed/wall/r_wall, /area/maintenance/port) "bkF" = ( @@ -25150,11 +24995,7 @@ /turf/open/floor/plating, /area/maintenance/starboard/aft) "blR" = ( -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; - icon_state = "space"; - layer = 4; - name = "EXTERNAL AIRLOCK"; +/obj/structure/sign/warning/vacuum/external{ pixel_y = 32 }, /obj/item/cigbutt, @@ -25527,7 +25368,7 @@ /obj/structure/chair/office/light{ dir = 1 }, -/obj/structure/sign/nosmoking_2{ +/obj/structure/sign/warning/nosmoking{ pixel_x = 28 }, /turf/open/floor/plasteel/white, @@ -25883,7 +25724,7 @@ /turf/open/floor/plasteel, /area/quartermaster/office) "bnF" = ( -/obj/structure/sign/nosmoking_2{ +/obj/structure/sign/warning/nosmoking{ pixel_y = 30 }, /obj/structure/disposalpipe/segment{ @@ -26011,10 +25852,7 @@ /turf/open/floor/plasteel, /area/crew_quarters/heads/hop) "bnT" = ( -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'HIGH VOLTAGE'"; - icon_state = "shock"; - name = "HIGH VOLTAGE"; +/obj/structure/sign/warning/electricshock{ pixel_x = -32 }, /obj/structure/cable{ @@ -26045,10 +25883,7 @@ /turf/open/floor/plating, /area/engine/gravity_generator) "bnW" = ( -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'RADIOACTIVE AREA'"; - icon_state = "radiation"; - name = "RADIOACTIVE AREA"; +/obj/structure/sign/warning/radiation/rad_area{ pixel_x = 32 }, /obj/structure/cable{ @@ -26363,12 +26198,7 @@ /turf/open/floor/plating, /area/maintenance/starboard) "boI" = ( -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; - icon_state = "space"; - layer = 4; - name = "EXTERNAL AIRLOCK" - }, +/obj/structure/sign/warning/vacuum/external, /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/quartermaster/storage) @@ -27209,7 +27039,7 @@ name = "Teleporter Maintenance"; req_access_txt = "17" }, -/obj/structure/sign/securearea{ +/obj/structure/sign/warning/securearea{ pixel_x = -32 }, /obj/structure/cable{ @@ -27262,7 +27092,7 @@ /obj/item/crowbar, /obj/item/clothing/neck/stethoscope, /obj/item/reagent_containers/spray/cleaner, -/obj/structure/sign/nosmoking_2{ +/obj/structure/sign/warning/nosmoking{ pixel_y = 30 }, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ @@ -27636,7 +27466,7 @@ /obj/structure/cable{ icon_state = "1-2" }, -/obj/structure/sign/securearea{ +/obj/structure/sign/warning/securearea{ pixel_x = -32 }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, @@ -27756,10 +27586,7 @@ /turf/open/floor/plasteel, /area/crew_quarters/heads/hop) "brU" = ( -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'HIGH VOLTAGE'"; - icon_state = "shock"; - name = "HIGH VOLTAGE"; +/obj/structure/sign/warning/electricshock{ pixel_y = -32 }, /obj/structure/cable{ @@ -28336,7 +28163,7 @@ /obj/structure/disposalpipe/segment{ dir = 10 }, -/obj/structure/sign/securearea{ +/obj/structure/sign/warning/securearea{ pixel_x = 32 }, /obj/machinery/light/small{ @@ -29128,7 +28955,7 @@ /obj/structure/cable{ icon_state = "1-2" }, -/obj/structure/sign/securearea{ +/obj/structure/sign/warning/securearea{ pixel_x = -32 }, /obj/structure/disposalpipe/segment, @@ -29339,7 +29166,7 @@ /turf/open/floor/plasteel/white, /area/medical/genetics) "bvA" = ( -/obj/structure/sign/securearea, +/obj/structure/sign/warning/securearea, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -29602,7 +29429,7 @@ /turf/open/floor/plasteel, /area/hallway/primary/central) "bwh" = ( -/obj/structure/sign/securearea{ +/obj/structure/sign/warning/securearea{ pixel_y = 32 }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, @@ -29656,10 +29483,7 @@ /area/engine/gravity_generator) "bwn" = ( /obj/structure/closet/radiation, -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'RADIOACTIVE AREA'"; - icon_state = "radiation"; - name = "RADIOACTIVE AREA"; +/obj/structure/sign/warning/radiation/rad_area{ pixel_x = -32 }, /obj/effect/turf_decal/stripes/line{ @@ -29673,10 +29497,7 @@ /area/engine/gravity_generator) "bwp" = ( /obj/structure/closet/radiation, -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'RADIOACTIVE AREA'"; - icon_state = "radiation"; - name = "RADIOACTIVE AREA"; +/obj/structure/sign/warning/radiation/rad_area{ pixel_x = 32 }, /obj/effect/turf_decal/stripes/line{ @@ -29796,7 +29617,7 @@ /turf/open/floor/plasteel, /area/medical/sleeper) "bwG" = ( -/obj/structure/sign/nosmoking_2, +/obj/structure/sign/warning/nosmoking, /turf/closed/wall, /area/medical/sleeper) "bwH" = ( @@ -30000,7 +29821,7 @@ /area/medical/sleeper) "bxa" = ( /obj/structure/chair, -/obj/structure/sign/nosmoking_2{ +/obj/structure/sign/warning/nosmoking{ pixel_x = -28 }, /turf/open/floor/plasteel/dark, @@ -30451,7 +30272,7 @@ }, /area/quartermaster/qm) "bye" = ( -/obj/structure/sign/securearea, +/obj/structure/sign/warning/securearea, /turf/closed/wall/r_wall, /area/medical/genetics) "byf" = ( @@ -30754,7 +30575,7 @@ /turf/open/floor/plasteel/red/side, /area/security/checkpoint/supply) "byP" = ( -/obj/structure/sign/securearea{ +/obj/structure/sign/warning/securearea{ pixel_y = 32 }, /turf/open/floor/plasteel/blue/side{ @@ -31006,7 +30827,7 @@ /obj/machinery/atmospherics/pipe/simple{ dir = 4 }, -/obj/structure/sign/securearea{ +/obj/structure/sign/warning/securearea{ desc = "A warning sign which reads 'SERVER ROOM'."; name = "SERVER ROOM"; pixel_y = 32 @@ -32077,7 +31898,7 @@ /turf/open/floor/plasteel/dark, /area/science/server) "bBV" = ( -/obj/structure/sign/securearea{ +/obj/structure/sign/warning/securearea{ desc = "A warning sign which reads 'SERVER ROOM'."; name = "SERVER ROOM"; pixel_y = -32 @@ -32235,7 +32056,7 @@ network = list("SS13","RD") }, /obj/machinery/light, -/obj/structure/sign/nosmoking_2{ +/obj/structure/sign/warning/nosmoking{ pixel_y = -32 }, /turf/open/floor/engine, @@ -32605,9 +32426,7 @@ /turf/open/floor/plating, /area/maintenance/starboard) "bDi" = ( -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'KEEP CLEAR OF DOCKING AREA'."; - name = "KEEP CLEAR: DOCKING AREA"; +/obj/structure/sign/warning/docking{ pixel_y = 32 }, /turf/open/space, @@ -32802,7 +32621,7 @@ /turf/open/floor/plasteel/white, /area/medical/sleeper) "bDD" = ( -/obj/structure/sign/nosmoking_2{ +/obj/structure/sign/warning/nosmoking{ pixel_x = -28 }, /obj/structure/bed, @@ -33090,7 +32909,7 @@ /area/science/storage) "bEp" = ( /obj/machinery/portable_atmospherics/canister/toxins, -/obj/structure/sign/nosmoking_2{ +/obj/structure/sign/warning/nosmoking{ pixel_y = 32 }, /obj/effect/turf_decal/delivery, @@ -33307,7 +33126,7 @@ /turf/open/floor/plasteel, /area/science/mixing) "bEO" = ( -/obj/structure/sign/securearea{ +/obj/structure/sign/warning/securearea{ pixel_x = -32 }, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ @@ -33738,7 +33557,7 @@ /turf/open/floor/plasteel/barber, /area/crew_quarters/heads/cmo) "bFQ" = ( -/obj/structure/sign/nosmoking_2{ +/obj/structure/sign/warning/nosmoking{ pixel_x = -32 }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, @@ -33932,11 +33751,7 @@ /turf/open/floor/plasteel, /area/storage/tech) "bGu" = ( -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'HIGH VOLTAGE'"; - icon_state = "shock"; - name = "HIGH VOLTAGE" - }, +/obj/structure/sign/warning/electricshock, /turf/closed/wall/r_wall, /area/storage/tech) "bGv" = ( @@ -34907,11 +34722,7 @@ /turf/open/floor/plasteel/barber, /area/crew_quarters/heads/cmo) "bIx" = ( -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'HIGH VOLTAGE'"; - icon_state = "shock"; - name = "HIGH VOLTAGE" - }, +/obj/structure/sign/warning/electricshock, /turf/closed/wall/r_wall, /area/science/xenobiology) "bIy" = ( @@ -35023,7 +34834,7 @@ /obj/structure/cable{ icon_state = "1-2" }, -/obj/structure/sign/securearea{ +/obj/structure/sign/warning/securearea{ pixel_x = 32 }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, @@ -35083,7 +34894,7 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, -/obj/structure/sign/xenobio{ +/obj/structure/sign/departments/xenobio{ pixel_y = -32 }, /turf/open/floor/plating, @@ -35110,7 +34921,7 @@ /turf/open/floor/plasteel, /area/science/mixing) "bIX" = ( -/obj/structure/sign/securearea{ +/obj/structure/sign/warning/securearea{ desc = "A warning sign which reads 'BOMB RANGE"; name = "BOMB RANGE" }, @@ -35148,29 +34959,17 @@ /turf/open/floor/plating, /area/quartermaster/miningdock) "bJc" = ( -/obj/machinery/door/airlock/titanium{ - name = "Mining Shuttle Airlock"; - req_access_txt = "0" - }, -/obj/docking_port/mobile{ - dir = 8; - dwidth = 3; - height = 5; - id = "mining"; - name = "mining shuttle"; - port_direction = 4; - width = 7 - }, /obj/docking_port/stationary{ dir = 8; dwidth = 3; height = 5; id = "mining_home"; name = "mining shuttle bay"; + roundstart_template = /datum/map_template/shuttle/mining/box; width = 7 }, -/turf/open/floor/plating, -/area/shuttle/mining) +/turf/open/space/basic, +/area/space) "bJd" = ( /obj/machinery/door/airlock/mining/glass{ cyclelinkeddir = 8; @@ -35207,7 +35006,7 @@ /turf/open/floor/plasteel, /area/storage/tech) "bJi" = ( -/obj/structure/sign/securearea, +/obj/structure/sign/warning/securearea, /turf/closed/wall/r_wall, /area/storage/tech) "bJj" = ( @@ -35700,12 +35499,7 @@ }, /area/quartermaster/miningdock) "bKm" = ( -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; - icon_state = "space"; - layer = 4; - name = "EXTERNAL AIRLOCK" - }, +/obj/structure/sign/warning/vacuum/external, /turf/closed/wall, /area/quartermaster/miningdock) "bKn" = ( @@ -35859,7 +35653,7 @@ /obj/structure/cable{ icon_state = "4-8" }, -/obj/structure/sign/securearea{ +/obj/structure/sign/warning/securearea{ pixel_y = -32 }, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ @@ -36135,7 +35929,7 @@ /turf/open/floor/plasteel/white, /area/medical/virology) "bLe" = ( -/obj/structure/sign/biohazard, +/obj/structure/sign/warning/biohazard, /turf/closed/wall, /area/science/xenobiology) "bLf" = ( @@ -36158,21 +35952,17 @@ /turf/open/floor/plating, /area/maintenance/port/aft) "bLh" = ( -/obj/structure/sign/fire, +/obj/structure/sign/warning/fire, /turf/closed/wall, /area/science/research) "bLi" = ( -/obj/structure/sign/nosmoking_2{ +/obj/structure/sign/warning/nosmoking{ pixel_x = -32 }, /turf/open/floor/plasteel/white, /area/science/mixing) "bLj" = ( -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; - icon_state = "space"; - layer = 4; - name = "EXTERNAL AIRLOCK"; +/obj/structure/sign/warning/vacuum/external{ pixel_y = -32 }, /turf/open/floor/plating, @@ -36625,11 +36415,7 @@ /turf/open/floor/plating, /area/science/research) "bMt" = ( -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; - icon_state = "space"; - layer = 4; - name = "EXTERNAL AIRLOCK"; +/obj/structure/sign/warning/vacuum/external{ pixel_y = 32 }, /turf/open/floor/engine/vacuum, @@ -36901,7 +36687,7 @@ /turf/open/floor/plasteel, /area/science/misc_lab) "bNf" = ( -/obj/structure/sign/biohazard, +/obj/structure/sign/warning/biohazard, /turf/closed/wall, /area/medical/virology) "bNg" = ( @@ -37508,7 +37294,7 @@ /turf/open/floor/engine/vacuum, /area/science/mixing) "bOF" = ( -/obj/structure/sign/fire{ +/obj/structure/sign/warning/fire{ pixel_y = -32 }, /obj/machinery/atmospherics/components/binary/pump{ @@ -37846,7 +37632,7 @@ /obj/machinery/shower{ dir = 4 }, -/obj/structure/sign/securearea{ +/obj/structure/sign/warning/securearea{ pixel_x = -32 }, /obj/effect/turf_decal/stripes/line{ @@ -37905,7 +37691,7 @@ /area/medical/virology) "bPx" = ( /obj/machinery/disposal/bin, -/obj/structure/sign/deathsposal{ +/obj/structure/sign/warning/deathsposal{ pixel_y = -32 }, /obj/structure/disposalpipe/trunk{ @@ -39193,7 +38979,7 @@ /turf/open/floor/plating, /area/engine/atmos) "bSD" = ( -/obj/structure/sign/atmosplaque{ +/obj/structure/sign/plaques/atmos{ pixel_y = -32 }, /obj/structure/table, @@ -40317,11 +40103,7 @@ }, /area/hallway/primary/aft) "bVi" = ( -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'HIGH VOLTAGE'"; - icon_state = "shock"; - name = "HIGH VOLTAGE" - }, +/obj/structure/sign/warning/electricshock, /turf/closed/wall, /area/science/xenobiology) "bVj" = ( @@ -40471,7 +40253,7 @@ /obj/structure/disposalpipe/trunk{ dir = 8 }, -/obj/structure/sign/deathsposal{ +/obj/structure/sign/warning/deathsposal{ pixel_y = 32 }, /turf/open/floor/plating, @@ -40487,7 +40269,7 @@ /turf/open/floor/plating, /area/maintenance/port/aft) "bVG" = ( -/obj/structure/sign/nosmoking_2{ +/obj/structure/sign/warning/nosmoking{ pixel_x = -28 }, /turf/open/floor/plating, @@ -40552,7 +40334,7 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/visible{ dir = 4 }, -/obj/structure/sign/securearea, +/obj/structure/sign/warning/securearea, /turf/closed/wall, /area/engine/atmos) "bVT" = ( @@ -41312,7 +41094,7 @@ /turf/closed/wall/r_wall, /area/engine/atmos) "bXL" = ( -/obj/structure/sign/securearea, +/obj/structure/sign/warning/securearea, /turf/closed/wall/r_wall, /area/engine/atmos) "bXM" = ( @@ -41440,7 +41222,7 @@ /area/engine/break_room) "bYc" = ( /obj/machinery/disposal/bin, -/obj/structure/sign/deathsposal{ +/obj/structure/sign/warning/deathsposal{ pixel_y = -32 }, /obj/structure/disposalpipe/trunk{ @@ -41570,7 +41352,7 @@ /turf/open/floor/plasteel/white, /area/science/misc_lab) "bYp" = ( -/obj/structure/sign/securearea{ +/obj/structure/sign/warning/securearea{ pixel_x = -32 }, /turf/open/floor/plasteel/yellow/side{ @@ -41601,11 +41383,7 @@ /turf/open/floor/plating, /area/maintenance/port/aft) "bYu" = ( -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; - icon_state = "space"; - layer = 4; - name = "EXTERNAL AIRLOCK"; +/obj/structure/sign/warning/vacuum/external{ pixel_x = -32 }, /turf/open/floor/plating, @@ -41740,7 +41518,7 @@ /turf/open/floor/plasteel, /area/engine/atmos) "bYR" = ( -/obj/structure/sign/nosmoking_2, +/obj/structure/sign/warning/nosmoking, /turf/closed/wall, /area/engine/atmos) "bYS" = ( @@ -42764,7 +42542,7 @@ /turf/open/floor/plating, /area/tcommsat/computer) "cbn" = ( -/obj/structure/sign/securearea{ +/obj/structure/sign/warning/securearea{ desc = "A warning sign which reads 'SERVER ROOM'."; name = "SERVER ROOM" }, @@ -42822,7 +42600,7 @@ /turf/open/floor/plasteel, /area/hallway/primary/aft) "cbs" = ( -/obj/structure/sign/securearea, +/obj/structure/sign/warning/securearea, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/closed/wall, /area/engine/engineering) @@ -43345,7 +43123,7 @@ /turf/open/floor/engine/co2, /area/engine/atmos) "ccE" = ( -/obj/structure/sign/nosmoking_2{ +/obj/structure/sign/warning/nosmoking{ pixel_y = 28 }, /turf/open/floor/plating, @@ -43607,7 +43385,6 @@ /turf/open/floor/plasteel, /area/engine/engineering) "cdp" = ( -/obj/effect/landmark/lightsout, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/atmospherics/components/unary/vent_scrubber/on{ dir = 8 @@ -43899,7 +43676,7 @@ /turf/open/floor/plasteel/dark/telecomms/mainframe, /area/tcommsat/server) "cec" = ( -/obj/structure/sign/nosmoking_2{ +/obj/structure/sign/warning/nosmoking{ pixel_y = -32 }, /obj/machinery/light, @@ -43990,7 +43767,7 @@ /turf/open/floor/plasteel, /area/crew_quarters/heads/chief) "cep" = ( -/obj/structure/sign/securearea, +/obj/structure/sign/warning/securearea, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/closed/wall/r_wall, /area/engine/engineering) @@ -44092,7 +43869,7 @@ /turf/open/floor/plating, /area/maintenance/aft) "ceE" = ( -/obj/structure/sign/fire{ +/obj/structure/sign/warning/fire{ pixel_y = -32 }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, @@ -44117,7 +43894,7 @@ /turf/closed/wall, /area/maintenance/aft) "ceI" = ( -/obj/structure/sign/biohazard, +/obj/structure/sign/warning/biohazard, /turf/closed/wall, /area/maintenance/aft) "ceJ" = ( @@ -44188,11 +43965,7 @@ /turf/open/floor/plating, /area/maintenance/starboard/aft) "ceU" = ( -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; - icon_state = "space"; - layer = 4; - name = "EXTERNAL AIRLOCK"; +/obj/structure/sign/warning/vacuum/external{ pixel_y = -32 }, /turf/open/floor/plating, @@ -44269,14 +44042,11 @@ }, /area/engine/engineering) "cfe" = ( -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'RADIOACTIVE AREA'"; - icon_state = "radiation"; - name = "RADIOACTIVE AREA"; +/obj/structure/sign/warning/radiation/rad_area{ pixel_x = -32 }, /obj/structure/disposalpipe/segment, -/obj/structure/sign/securearea{ +/obj/structure/sign/warning/securearea{ pixel_x = 32 }, /obj/structure/cable{ @@ -44490,7 +44260,7 @@ /turf/open/floor/plasteel, /area/engine/engineering) "cfK" = ( -/obj/structure/sign/securearea, +/obj/structure/sign/warning/securearea, /turf/closed/wall, /area/engine/engineering) "cfL" = ( @@ -44611,7 +44381,7 @@ /area/maintenance/disposal/incinerator) "cgb" = ( /obj/machinery/disposal/bin, -/obj/structure/sign/deathsposal{ +/obj/structure/sign/warning/deathsposal{ pixel_y = 32 }, /obj/structure/disposalpipe/trunk, @@ -44676,7 +44446,7 @@ /area/maintenance/starboard/aft) "cgk" = ( /obj/effect/spawner/structure/window/reinforced, -/obj/structure/sign/biohazard, +/obj/structure/sign/warning/biohazard, /turf/open/floor/plating, /area/science/xenobiology) "cgl" = ( @@ -44747,7 +44517,7 @@ /turf/open/floor/plating, /area/maintenance/starboard/aft) "cgt" = ( -/obj/structure/sign/securearea{ +/obj/structure/sign/warning/securearea{ pixel_y = 32 }, /obj/effect/spawner/lootdrop/maintenance, @@ -44802,11 +44572,7 @@ /turf/open/space, /area/solar/port/aft) "cgA" = ( -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; - icon_state = "space"; - layer = 4; - name = "EXTERNAL AIRLOCK"; +/obj/structure/sign/warning/vacuum/external{ pixel_x = -32 }, /turf/open/floor/plating, @@ -44842,11 +44608,7 @@ /turf/open/floor/plating, /area/maintenance/port/aft) "cgE" = ( -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'HIGH VOLTAGE'"; - icon_state = "shock"; - name = "HIGH VOLTAGE" - }, +/obj/structure/sign/warning/electricshock, /turf/closed/wall/r_wall, /area/maintenance/solars/port/aft) "cgF" = ( @@ -45600,7 +45362,7 @@ /turf/closed/wall/r_wall, /area/engine/atmos) "ciy" = ( -/obj/structure/sign/nosmoking_2{ +/obj/structure/sign/warning/nosmoking{ pixel_x = -28 }, /obj/machinery/atmospherics/components/unary/portables_connector/visible{ @@ -45641,7 +45403,7 @@ name = "output gas connector port" }, /obj/machinery/portable_atmospherics/canister, -/obj/structure/sign/nosmoking_2{ +/obj/structure/sign/warning/nosmoking{ pixel_x = 28 }, /turf/open/floor/plasteel/floorgrime, @@ -45902,7 +45664,7 @@ }, /area/crew_quarters/heads/chief) "cjk" = ( -/obj/structure/sign/securearea, +/obj/structure/sign/warning/securearea, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -46050,11 +45812,7 @@ /turf/open/floor/plating, /area/maintenance/solars/starboard/aft) "cjG" = ( -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'HIGH VOLTAGE'"; - icon_state = "shock"; - name = "HIGH VOLTAGE" - }, +/obj/structure/sign/warning/electricshock, /turf/closed/wall/r_wall, /area/maintenance/solars/starboard/aft) "cjH" = ( @@ -46795,11 +46553,7 @@ /turf/open/floor/plating, /area/maintenance/solars/starboard/aft) "clA" = ( -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; - icon_state = "space"; - layer = 4; - name = "EXTERNAL AIRLOCK"; +/obj/structure/sign/warning/vacuum/external{ pixel_y = 32 }, /turf/open/floor/plating, @@ -47071,11 +46825,7 @@ /turf/open/floor/plating, /area/maintenance/solars/starboard/aft) "cmx" = ( -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; - icon_state = "space"; - layer = 4; - name = "EXTERNAL AIRLOCK"; +/obj/structure/sign/warning/vacuum/external{ pixel_y = -32 }, /turf/open/floor/plating, @@ -47159,7 +46909,7 @@ }, /area/engine/engineering) "cmN" = ( -/obj/structure/sign/nosmoking_2{ +/obj/structure/sign/warning/nosmoking{ pixel_y = 32 }, /obj/structure/cable{ @@ -47206,7 +46956,7 @@ /obj/machinery/light/small{ dir = 8 }, -/obj/structure/sign/fire{ +/obj/structure/sign/warning/fire{ pixel_x = -32 }, /turf/open/floor/engine, @@ -47216,7 +46966,7 @@ dir = 1; on = 1 }, -/obj/structure/sign/fire{ +/obj/structure/sign/warning/fire{ pixel_x = 32 }, /obj/machinery/doorButtons/access_button{ @@ -47595,10 +47345,7 @@ /obj/structure/cable{ icon_state = "4-8" }, -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'HIGH VOLTAGE'"; - icon_state = "shock"; - name = "HIGH VOLTAGE"; +/obj/structure/sign/warning/electricshock{ pixel_x = -32 }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ @@ -47624,7 +47371,7 @@ /obj/structure/cable{ icon_state = "4-8" }, -/obj/structure/sign/nosmoking_2{ +/obj/structure/sign/warning/nosmoking{ pixel_y = 32 }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ @@ -47687,11 +47434,7 @@ /obj/machinery/atmospherics/components/unary/vent_pump/siphon{ dir = 1 }, -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; - icon_state = "space"; - layer = 4; - name = "EXTERNAL AIRLOCK"; +/obj/structure/sign/warning/vacuum/external{ pixel_y = -32 }, /turf/open/floor/engine/vacuum, @@ -48033,10 +47776,7 @@ /turf/open/floor/plasteel, /area/engine/engine_smes) "cpq" = ( -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'HIGH VOLTAGE'"; - icon_state = "shock"; - name = "HIGH VOLTAGE"; +/obj/structure/sign/warning/electricshock{ pixel_x = -32 }, /obj/machinery/computer/rdconsole/production{ @@ -48149,7 +47889,8 @@ id = "pod4"; name = "escape pod 4"; port_direction = 2; - preferred_direction = 4 + preferred_direction = 4; + timid = 0 }, /turf/open/floor/mineral/titanium/blue, /area/shuttle/pod_4) @@ -48412,7 +48153,7 @@ /turf/open/floor/plating, /area/maintenance/port/aft) "cqo" = ( -/obj/structure/sign/pods{ +/obj/structure/sign/warning/pods{ pixel_x = 32 }, /obj/effect/turf_decal/stripes/line{ @@ -48436,7 +48177,8 @@ dir = 8; id = "pod2"; name = "escape pod 2"; - port_direction = 2 + port_direction = 2; + timid = 0 }, /turf/open/floor/mineral/titanium/blue, /area/shuttle/pod_2) @@ -48450,7 +48192,7 @@ /turf/open/floor/plasteel, /area/hallway/secondary/entry) "cqs" = ( -/obj/structure/sign/fire, +/obj/structure/sign/warning/fire, /turf/closed/wall/r_wall, /area/maintenance/disposal/incinerator) "cqt" = ( @@ -48532,7 +48274,7 @@ /turf/open/floor/engine, /area/engine/engineering) "cqD" = ( -/obj/structure/sign/radiation, +/obj/structure/sign/warning/radiation, /turf/closed/wall/r_wall, /area/engine/supermatter) "cqE" = ( @@ -48643,11 +48385,7 @@ /turf/open/floor/plating, /area/engine/engineering) "cqT" = ( -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; - icon_state = "space"; - layer = 4; - name = "EXTERNAL AIRLOCK"; +/obj/structure/sign/warning/vacuum/external{ pixel_x = 32 }, /turf/open/floor/plating, @@ -48744,11 +48482,7 @@ /turf/open/floor/plating, /area/engine/engineering) "crp" = ( -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'HIGH VOLTAGE'"; - icon_state = "shock"; - name = "HIGH VOLTAGE" - }, +/obj/structure/sign/warning/electricshock, /turf/closed/wall/r_wall, /area/engine/engineering) "crq" = ( @@ -48964,11 +48698,7 @@ /turf/open/floor/plating, /area/engine/engineering) "crX" = ( -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; - icon_state = "space"; - layer = 4; - name = "EXTERNAL AIRLOCK"; +/obj/structure/sign/warning/vacuum/external{ pixel_x = 32 }, /obj/structure/closet/emcloset/anchored, @@ -49226,11 +48956,7 @@ /turf/open/floor/plating, /area/ai_monitored/turret_protected/aisat_interior) "csX" = ( -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; - icon_state = "space"; - layer = 4; - name = "EXTERNAL AIRLOCK"; +/obj/structure/sign/warning/vacuum/external{ pixel_y = 32 }, /turf/open/floor/plating, @@ -49291,7 +49017,7 @@ /area/ai_monitored/turret_protected/aisat_interior) "cti" = ( /obj/effect/spawner/structure/window/reinforced, -/obj/structure/sign/securearea{ +/obj/structure/sign/warning/securearea{ pixel_y = -32 }, /turf/open/floor/plating, @@ -49529,11 +49255,7 @@ }, /area/ai_monitored/turret_protected/aisat_interior) "ctR" = ( -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'RADIOACTIVE AREA'"; - icon_state = "radiation"; - name = "RADIOACTIVE AREA" - }, +/obj/structure/sign/warning/radiation/rad_area, /turf/closed/wall, /area/engine/engineering) "ctS" = ( @@ -50140,7 +49862,7 @@ /turf/closed/wall/r_wall, /area/ai_monitored/turret_protected/ai) "cvc" = ( -/obj/structure/sign/securearea{ +/obj/structure/sign/warning/securearea{ pixel_x = -32 }, /obj/machinery/porta_turret/ai{ @@ -50161,7 +49883,7 @@ /obj/machinery/porta_turret/ai{ dir = 4 }, -/obj/structure/sign/securearea{ +/obj/structure/sign/warning/securearea{ pixel_x = 32 }, /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ @@ -50429,7 +50151,7 @@ /turf/open/space, /area/space/nearstation) "cvL" = ( -/obj/structure/sign/securearea{ +/obj/structure/sign/warning/securearea{ pixel_x = 32 }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, @@ -50448,7 +50170,7 @@ /turf/open/floor/circuit, /area/ai_monitored/turret_protected/aisat/hallway) "cvN" = ( -/obj/structure/sign/securearea{ +/obj/structure/sign/warning/securearea{ pixel_x = -32 }, /obj/structure/cable{ @@ -50579,7 +50301,7 @@ /turf/open/floor/plasteel/dark, /area/ai_monitored/turret_protected/aisat/hallway) "cwe" = ( -/obj/structure/sign/securearea, +/obj/structure/sign/warning/securearea, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/closed/wall/r_wall, /area/ai_monitored/turret_protected/ai) @@ -50917,18 +50639,6 @@ /turf/open/floor/plasteel, /area/ai_monitored/security/armory) "cxE" = ( -/obj/machinery/door/airlock/titanium, -/obj/docking_port/mobile{ - dir = 8; - dwidth = 2; - height = 13; - id = "ferry"; - name = "ferry shuttle"; - port_direction = 1; - preferred_direction = 4; - roundstart_move = "ferry_away"; - width = 5 - }, /obj/docking_port/stationary{ dir = 8; dwidth = 2; @@ -50938,8 +50648,8 @@ turf_type = /turf/open/space; width = 5 }, -/turf/open/floor/pod/light, -/area/shuttle/transport) +/turf/open/space/basic, +/area/space) "cxF" = ( /obj/machinery/door/airlock/titanium{ name = "Escape Pod Airlock" @@ -50948,7 +50658,8 @@ dir = 8; id = "pod1"; name = "escape pod 1"; - port_direction = 2 + port_direction = 2; + timid = 0 }, /turf/open/floor/mineral/titanium/blue, /area/shuttle/pod_1) @@ -51019,28 +50730,6 @@ /turf/open/floor/plating, /area/hallway/secondary/entry) "cyd" = ( -/obj/docking_port/mobile{ - callTime = 250; - dheight = 0; - dir = 2; - dwidth = 11; - height = 15; - id = "whiteship"; - launch_status = 0; - movement_force = list("KNOCKDOWN" = 0, "THROW" = 0); - name = "NT Recovery White-Ship"; - port_direction = 8; - preferred_direction = 4; - roundstart_move = "whiteship_away"; - width = 28 - }, -/obj/machinery/door/airlock/titanium{ - name = "recovery shuttle external airlock" - }, -/obj/effect/decal/cleanable/dirt{ - desc = "A thin layer of dust coating the floor."; - name = "dust" - }, /obj/docking_port/stationary{ dir = 2; dwidth = 11; @@ -51049,26 +50738,8 @@ name = "SS13: Auxiliary Dock, Station-Port"; width = 35 }, -<<<<<<< HEAD -/turf/open/floor/mineral/titanium/blue, -/area/shuttle/abandoned) -"cye" = ( -/obj/effect/decal/cleanable/dirt{ - desc = "A thin layer of dust coating the floor."; - name = "dust" - }, -/turf/open/floor/mineral/titanium, -/area/shuttle/abandoned) -"cyf" = ( -/obj/structure/shuttle/engine/propulsion/left{ - dir = 8 - }, -/turf/open/floor/plating/airless, -/area/shuttle/abandoned) -======= /turf/open/space/basic, /area/space) ->>>>>>> e645319... Changes up the Construction Area on Box slightly. (#35009) "cyg" = ( /obj/machinery/door/airlock/command{ cyclelinkeddir = 1; @@ -51188,14 +50859,6 @@ /turf/open/floor/plasteel, /area/engine/engineering) "cyT" = ( -/obj/machinery/door/airlock/titanium{ - name = "Supply Shuttle Airlock"; - req_access_txt = "31" - }, -/obj/docking_port/mobile/supply{ - dwidth = 5; - width = 12 - }, /obj/docking_port/stationary{ dir = 8; dwidth = 5; @@ -51204,8 +50867,8 @@ name = "Cargo Bay"; width = 12 }, -/turf/open/floor/plating, -/area/shuttle/supply) +/turf/open/space/basic, +/area/space) "cyU" = ( /obj/structure/cable{ icon_state = "1-2" @@ -51687,7 +51350,7 @@ /turf/open/floor/plating, /area/maintenance/fore/secondary) "cAP" = ( -/obj/structure/sign/fire, +/obj/structure/sign/warning/fire, /turf/closed/wall/r_wall, /area/engine/supermatter) "cAQ" = ( @@ -53071,7 +52734,7 @@ /turf/open/floor/engine, /area/engine/engineering) "cFw" = ( -/obj/structure/sign/electricshock, +/obj/structure/sign/warning/electricshock, /turf/closed/wall/r_wall, /area/engine/supermatter) "cFy" = ( @@ -53770,20 +53433,17 @@ }, /area/science/robotics/lab) "cIg" = ( -/obj/structure/shuttle/engine/propulsion{ - dir = 4 - }, -/obj/docking_port/mobile/arrivals, /obj/docking_port/stationary{ dir = 8; dwidth = 3; height = 15; id = "arrivals_stationary"; name = "arrivals"; + roundstart_template = /datum/map_template/shuttle/arrival/box; width = 7 }, -/turf/open/floor/plating/airless, -/area/shuttle/arrival) +/turf/open/space/basic, +/area/space) "cIh" = ( /obj/machinery/door/airlock/external{ cyclelinkeddir = 1; @@ -54156,7 +53816,7 @@ /obj/structure/cable{ icon_state = "4-8" }, -/obj/structure/sign/nosmoking_2{ +/obj/structure/sign/warning/nosmoking{ pixel_y = 32 }, /obj/machinery/camera{ @@ -54412,1085 +54072,11 @@ /obj/effect/turf_decal/bot, /turf/open/floor/plasteel, /area/quartermaster/miningdock) -<<<<<<< HEAD -"Qll" = ( -/obj/machinery/door/airlock/titanium{ - name = "recovery shuttle external airlock" - }, -/obj/effect/decal/cleanable/dirt{ - desc = "A thin layer of dust coating the floor."; - name = "dust" - }, -/turf/open/floor/mineral/titanium/blue, -/area/shuttle/abandoned) -"Qlm" = ( -/obj/structure/toilet{ - pixel_y = 9 - }, -/obj/effect/decal/cleanable/dirt{ - desc = "A thin layer of dust coating the floor."; - name = "dust" - }, -/obj/effect/decal/cleanable/greenglow{ - desc = "Looks like something's sprung a leak" - }, -/obj/machinery/light/small/built{ - dir = 8 - }, -/turf/open/floor/mineral/titanium, -/area/shuttle/abandoned) -"Qln" = ( -/obj/structure/mirror{ - pixel_x = 28 - }, -/obj/structure/sink{ - dir = 4; - pixel_x = 11 - }, -/obj/effect/decal/cleanable/dirt{ - desc = "A thin layer of dust coating the floor."; - name = "dust" - }, -/obj/effect/decal/cleanable/dirt{ - desc = "A thin layer of dust coating the floor."; - name = "dust" - }, -/turf/open/floor/mineral/titanium, -/area/shuttle/abandoned) -"Qlo" = ( -/obj/structure/closet/wardrobe/mixed, -/obj/item/clothing/under/rank/centcom_officer{ - desc = "A badge on the arm indicates that it's meant to be worn by CentCom recovery teams. This one seems dusty and clearly hasn't been cleaned in some time."; - name = "\improper dusty old CentCom jumpsuit" - }, -/obj/item/clothing/under/rank/centcom_commander{ - desc = "A badge on the arm indicates that it's meant to be worn by CentCom recovery teams. This one seems dusty and clearly hasn't been cleaned in some time."; - name = "\improper dusty old CentCom jumpsuit" - }, -/obj/effect/decal/cleanable/dirt{ - desc = "A thin layer of dust coating the floor."; - name = "dust" - }, -/turf/open/floor/mineral/titanium, -/area/shuttle/abandoned) -"Qlp" = ( -/obj/structure/table, -/obj/item/storage/pill_bottle/dice{ - pixel_y = 3 - }, -/obj/effect/decal/cleanable/dirt{ - desc = "A thin layer of dust coating the floor."; - name = "dust" - }, -/turf/open/floor/mineral/titanium, -/area/shuttle/abandoned) -"Qlq" = ( -/obj/structure/table, -/obj/item/stack/sheet/metal/fifty, -/obj/item/stock_parts/cell/high{ - charge = 100; - maxcharge = 15000; - pixel_y = 2 - }, -/obj/effect/decal/cleanable/cobweb, -/obj/effect/decal/cleanable/dirt{ - desc = "A thin layer of dust coating the floor."; - name = "dust" - }, -/turf/open/floor/mineral/titanium, -/area/shuttle/abandoned) -"Qlr" = ( -/obj/machinery/suit_storage_unit/standard_unit, -/obj/effect/decal/cleanable/dirt{ - desc = "A thin layer of dust coating the floor."; - name = "dust" - }, -/turf/open/floor/mineral/titanium, -/area/shuttle/abandoned) -"Qlt" = ( -/obj/structure/tank_dispenser/oxygen{ - layer = 2.7; - pixel_x = -1; - pixel_y = 2 - }, -/obj/effect/decal/cleanable/dirt{ - desc = "A thin layer of dust coating the floor."; - name = "dust" - }, -/turf/open/floor/mineral/titanium, -/area/shuttle/abandoned) -"Qlu" = ( -/obj/structure/sign/vacuum{ - pixel_x = -32 - }, -/obj/effect/decal/cleanable/dirt{ - desc = "A thin layer of dust coating the floor."; - name = "dust" - }, -/obj/machinery/light/small/built{ - dir = 8 - }, -/turf/open/floor/mineral/titanium/blue, -/area/shuttle/abandoned) -"Qlv" = ( -/obj/item/storage/box/lights/mixed, -/obj/item/cigbutt, -/obj/structure/closet/crate{ - icon_state = "crateopen"; - name = "spare equipment crate"; - opened = 1 - }, -/obj/item/tank/internals/oxygen/red, -/obj/item/tank/internals/air, -/obj/effect/spawner/lootdrop/maintenance{ - lootcount = 2; - name = "2maintenance loot spawner" - }, -/obj/item/clothing/mask/breath, -/obj/item/clothing/mask/breath, -/obj/effect/decal/cleanable/dirt{ - desc = "A thin layer of dust coating the floor."; - name = "dust" - }, -/obj/effect/turf_decal/bot, -/turf/open/floor/plasteel, -/area/shuttle/abandoned) -"Qlw" = ( -/obj/structure/closet/crate{ - name = "emergency supplies crate" - }, -/obj/item/storage/toolbox/emergency, -/obj/item/storage/toolbox/emergency, -/obj/item/device/flashlight/flare{ - pixel_x = 3; - pixel_y = 3 - }, -/obj/item/device/flashlight/flare{ - pixel_x = -6; - pixel_y = -2 - }, -/obj/item/crowbar, -/obj/item/wrench, -/obj/effect/spawner/lootdrop/maintenance, -/obj/item/extinguisher, -/obj/item/extinguisher, -/obj/effect/decal/cleanable/cobweb/cobweb2, -/obj/effect/decal/cleanable/dirt{ - desc = "A thin layer of dust coating the floor."; - name = "dust" - }, -/obj/effect/turf_decal/bot, -/turf/open/floor/plasteel, -/area/shuttle/abandoned) -"Qlx" = ( -/obj/machinery/door/airlock/titanium{ - name = "bathroom" - }, -/obj/effect/decal/cleanable/dirt{ - desc = "A thin layer of dust coating the floor."; - name = "dust" - }, -/turf/open/floor/mineral/titanium/blue, -/area/shuttle/abandoned) -"Qly" = ( -/obj/effect/decal/cleanable/blood/old, -/obj/effect/decal/cleanable/blood/gibs/old, -/obj/effect/decal/cleanable/dirt{ - desc = "A thin layer of dust coating the floor."; - name = "dust" - }, -/obj/effect/decal/remains/human{ - desc = "They look like human remains, and have clearly been gnawed at." - }, -/obj/item/gun/energy/laser/retro, -/turf/open/floor/mineral/titanium/blue, -/area/shuttle/abandoned) -"Qlz" = ( -/obj/structure/bed, -/obj/item/bedsheet/centcom, -/obj/effect/decal/remains/human, -/obj/effect/decal/cleanable/blood/old, -/obj/effect/decal/cleanable/dirt{ - desc = "A thin layer of dust coating the floor."; - name = "dust" - }, -/obj/machinery/light/small/built{ - dir = 4 - }, -/turf/open/floor/mineral/titanium, -/area/shuttle/abandoned) -"QlA" = ( -/obj/structure/table, -/obj/item/storage/belt/utility, -/obj/item/storage/belt/utility, -/obj/item/device/radio/off, -/obj/item/device/radio/off, -/obj/item/device/radio/off, -/obj/item/device/radio/off, -/obj/effect/decal/cleanable/dirt{ - desc = "A thin layer of dust coating the floor."; - name = "dust" - }, -/obj/machinery/light/small/built{ - dir = 8 - }, -/turf/open/floor/mineral/titanium, -/area/shuttle/abandoned) -"QlB" = ( -/obj/effect/decal/cleanable/dirt{ - desc = "A thin layer of dust coating the floor."; - name = "dust" - }, -/obj/effect/decal/cleanable/oil, -/turf/open/floor/mineral/titanium/blue, -/area/shuttle/abandoned) -"QlD" = ( -/obj/machinery/door/airlock/titanium{ - name = "E.V.A. equipment" - }, -/obj/effect/decal/cleanable/dirt{ - desc = "A thin layer of dust coating the floor."; - name = "dust" - }, -/turf/open/floor/mineral/titanium/blue, -/area/shuttle/abandoned) -"QlF" = ( -/obj/effect/decal/cleanable/blood/old, -/obj/effect/decal/cleanable/blood/gibs/old, -/obj/effect/decal/cleanable/dirt{ - desc = "A thin layer of dust coating the floor."; - name = "dust" - }, -/obj/effect/decal/remains/human{ - desc = "They look like human remains, and have clearly been gnawed at." - }, -/turf/open/floor/mineral/titanium/blue, -/area/shuttle/abandoned) -"QlG" = ( -/obj/machinery/door/airlock/titanium{ - name = "cargo bay" - }, -/obj/effect/turf_decal/delivery{ - dir = 1 - }, -/turf/open/floor/plasteel{ - dir = 1 - }, -/area/shuttle/abandoned) -"QlH" = ( -/obj/effect/decal/cleanable/oil, -/obj/effect/decal/cleanable/dirt{ - desc = "A thin layer of dust coating the floor."; - name = "dust" - }, -/obj/effect/turf_decal/delivery{ - dir = 1 - }, -/turf/open/floor/plasteel{ - dir = 1 - }, -/area/shuttle/abandoned) -"QlI" = ( -/obj/effect/decal/cleanable/dirt{ - desc = "A thin layer of dust coating the floor."; - name = "dust" - }, -/obj/effect/turf_decal/delivery{ - dir = 1 - }, -/turf/open/floor/plasteel{ - dir = 1 - }, -/area/shuttle/abandoned) -"QlK" = ( -/obj/effect/decal/cleanable/robot_debris/old, -/obj/effect/decal/cleanable/oil, -/obj/effect/decal/cleanable/dirt{ - desc = "A thin layer of dust coating the floor."; - name = "dust" - }, -/obj/effect/turf_decal/delivery{ - dir = 1 - }, -/turf/open/floor/plasteel{ - dir = 1 - }, -/area/shuttle/abandoned) -"QlL" = ( -/obj/machinery/shower{ - dir = 4 - }, -/obj/machinery/door/window/westright{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt{ - desc = "A thin layer of dust coating the floor."; - name = "dust" - }, -/obj/item/soap/nanotrasen, -/obj/effect/decal/remains/human{ - desc = "They look like human remains, and have clearly been gnawed at." - }, -/obj/effect/decal/cleanable/blood/gibs/old, -/turf/open/floor/mineral/titanium, -/area/shuttle/abandoned) -"QlM" = ( -/obj/effect/decal/cleanable/blood/old, -/obj/structure/mirror{ - pixel_x = 28 - }, -/obj/effect/decal/cleanable/dirt{ - desc = "A thin layer of dust coating the floor."; - name = "dust" - }, -/obj/machinery/light/small/built{ - dir = 4 - }, -/turf/open/floor/mineral/titanium/blue, -/area/shuttle/abandoned) -"QlN" = ( -/obj/effect/decal/cleanable/blood/old, -/obj/effect/decal/cleanable/dirt{ - desc = "A thin layer of dust coating the floor."; - name = "dust" - }, -/obj/effect/decal/cleanable/blood/gibs/limb, -/obj/effect/decal/cleanable/dirt{ - desc = "A thin layer of dust coating the floor."; - name = "dust" - }, -/turf/open/floor/mineral/titanium/blue, -/area/shuttle/abandoned) -"QlO" = ( -/obj/structure/bed, -/obj/item/bedsheet/centcom, -/obj/effect/decal/cleanable/dirt{ - desc = "A thin layer of dust coating the floor."; - name = "dust" - }, -/turf/open/floor/mineral/titanium, -/area/shuttle/abandoned) -"QlP" = ( -/obj/structure/rack, -/obj/item/storage/toolbox/electrical{ - pixel_x = 1; - pixel_y = 6 - }, -/obj/item/storage/toolbox/mechanical{ - pixel_x = -2; - pixel_y = -1 - }, -/obj/item/clothing/head/welding{ - pixel_x = -3; - pixel_y = 5 - }, -/obj/item/clothing/glasses/welding, -/obj/effect/decal/cleanable/dirt{ - desc = "A thin layer of dust coating the floor."; - name = "dust" - }, -/turf/open/floor/mineral/titanium, -/area/shuttle/abandoned) -"QlR" = ( -/obj/machinery/portable_atmospherics/canister/oxygen, -/obj/effect/decal/cleanable/dirt{ - desc = "A thin layer of dust coating the floor."; - name = "dust" - }, -/obj/machinery/light/small{ - dir = 4 - }, -/turf/open/floor/mineral/titanium, -/area/shuttle/abandoned) -"QlS" = ( -/obj/effect/decal/cleanable/oil, -/obj/effect/decal/cleanable/dirt{ - desc = "A thin layer of dust coating the floor."; - name = "dust" - }, -/obj/effect/turf_decal/bot, -/turf/open/floor/plasteel, -/area/shuttle/abandoned) -"QlU" = ( -/obj/structure/closet/emcloset, -/obj/effect/decal/cleanable/dirt{ - desc = "A thin layer of dust coating the floor."; - name = "dust" - }, -/obj/effect/turf_decal/bot, -/obj/machinery/light/small, -/turf/open/floor/plasteel, -/area/shuttle/abandoned) -"QlV" = ( -/obj/structure/closet/firecloset/full, -/obj/effect/decal/cleanable/dirt{ - desc = "A thin layer of dust coating the floor."; - name = "dust" - }, -/obj/effect/turf_decal/bot, -/turf/open/floor/plasteel, -/area/shuttle/abandoned) -"QlW" = ( -/obj/structure/sign/restroom, -/turf/closed/wall/mineral/titanium, -/area/shuttle/abandoned) -"QlX" = ( -/obj/machinery/door/airlock/titanium{ - name = "bathroom" - }, -/obj/effect/decal/cleanable/blood/old, -/obj/effect/decal/cleanable/dirt{ - desc = "A thin layer of dust coating the floor."; - name = "dust" - }, -/turf/open/floor/mineral/titanium/blue, -/area/shuttle/abandoned) -"QlY" = ( -/obj/machinery/door/airlock/titanium{ - name = "dormitory" - }, -/obj/effect/decal/cleanable/blood/old, -/obj/effect/decal/cleanable/dirt{ - desc = "A thin layer of dust coating the floor."; - name = "dust" - }, -/turf/open/floor/mineral/titanium/blue, -/area/shuttle/abandoned) -"QlZ" = ( -/obj/machinery/vending/boozeomat{ - icon_deny = "smartfridge"; - icon_state = "smartfridge"; - req_access_txt = "0"; - use_power = 0 - }, -/turf/closed/wall/mineral/titanium, -/area/shuttle/abandoned) -"Qmb" = ( -/obj/machinery/door/airlock/titanium{ - name = "recovery shuttle interior airlock" - }, -/obj/effect/decal/cleanable/dirt{ - desc = "A thin layer of dust coating the floor."; - name = "dust" - }, -/obj/effect/decal/cleanable/dirt{ - desc = "A thin layer of dust coating the floor."; - name = "dust" - }, -/turf/open/floor/mineral/titanium/blue, -/area/shuttle/abandoned) -"Qmd" = ( -/obj/structure/sign/cargo, -/turf/closed/wall/mineral/titanium, -/area/shuttle/abandoned) -"Qme" = ( -/obj/machinery/door/airlock/titanium{ - name = "cargo bay" - }, -/obj/effect/decal/cleanable/dirt{ - desc = "A thin layer of dust coating the floor."; - name = "dust" - }, -/obj/effect/turf_decal/delivery{ - dir = 1 - }, -/turf/open/floor/plasteel{ - dir = 1 - }, -/area/shuttle/abandoned) -"Qmf" = ( -/obj/machinery/porta_turret/centcom_shuttle/weak{ - dir = 4 - }, -/turf/closed/wall/mineral/titanium, -/area/shuttle/abandoned) -"Qmg" = ( -/obj/machinery/vending/cigarette{ - use_power = 0 - }, -/turf/open/floor/mineral/titanium, -/area/shuttle/abandoned) -"Qmi" = ( -/obj/effect/decal/cleanable/blood/old, -/obj/effect/decal/cleanable/dirt{ - desc = "A thin layer of dust coating the floor."; - name = "dust" - }, -/obj/effect/decal/cleanable/blood/gibs/limb, -/turf/open/floor/mineral/titanium/blue, -/area/shuttle/abandoned) -"Qmj" = ( -/obj/effect/decal/cleanable/blood/gibs/old, -/obj/effect/decal/cleanable/dirt{ - desc = "A thin layer of dust coating the floor."; - name = "dust" - }, -/obj/machinery/light/built{ - dir = 1 - }, -/turf/open/floor/mineral/titanium/blue, -/area/shuttle/abandoned) -"Qmk" = ( -/obj/effect/decal/cleanable/blood/old, -/obj/effect/decal/cleanable/dirt{ - desc = "A thin layer of dust coating the floor."; - name = "dust" - }, -/turf/open/floor/mineral/titanium/blue, -/area/shuttle/abandoned) -"Qmn" = ( -/obj/effect/decal/cleanable/dirt{ - desc = "A thin layer of dust coating the floor."; - name = "dust" - }, -/obj/machinery/light/built{ - dir = 1 - }, -/turf/open/floor/mineral/titanium/blue, -/area/shuttle/abandoned) -"Qmo" = ( -/obj/structure/table, -/obj/effect/decal/cleanable/dirt{ - desc = "A thin layer of dust coating the floor."; - name = "dust" - }, -/obj/item/folder/blue, -/obj/item/pen, -/obj/machinery/light{ - dir = 1 - }, -/turf/open/floor/mineral/titanium, -/area/shuttle/abandoned) -"Qmp" = ( -/obj/structure/table, -/obj/effect/decal/cleanable/dirt{ - desc = "A thin layer of dust coating the floor."; - name = "dust" - }, -/obj/item/storage/photo_album, -/turf/open/floor/mineral/titanium, -/area/shuttle/abandoned) -"Qmq" = ( -/obj/structure/reagent_dispensers/fueltank, -/obj/structure/sign/vacuum{ - pixel_x = -32 - }, -/obj/effect/decal/cleanable/dirt{ - desc = "A thin layer of dust coating the floor."; - name = "dust" - }, -/obj/machinery/light/small/built{ - dir = 4 - }, -/turf/open/floor/mineral/titanium/blue, -/area/shuttle/abandoned) -"Qmr" = ( -/obj/machinery/vending/coffee, -/turf/open/floor/mineral/titanium, -/area/shuttle/abandoned) -"Qmt" = ( -/obj/structure/chair, -/obj/effect/decal/cleanable/dirt{ - desc = "A thin layer of dust coating the floor."; - name = "dust" - }, -/turf/open/floor/mineral/titanium, -/area/shuttle/abandoned) -"Qmw" = ( -/obj/effect/decal/cleanable/dirt{ - desc = "A thin layer of dust coating the floor."; - name = "dust" - }, -/obj/effect/decal/cleanable/dirt{ - desc = "A thin layer of dust coating the floor."; - name = "dust" - }, -/turf/open/floor/mineral/titanium, -/area/shuttle/abandoned) -"QmC" = ( -/obj/effect/decal/cleanable/dirt{ - desc = "A thin layer of dust coating the floor."; - name = "dust" - }, -/obj/machinery/turretid{ - icon_state = "control_kill"; - lethal = 1; - locked = 0; - pixel_x = -28; - req_access = null - }, -/turf/open/floor/mineral/titanium, -/area/shuttle/abandoned) -"QmD" = ( -/obj/effect/decal/cleanable/dirt{ - desc = "A thin layer of dust coating the floor."; - name = "dust" - }, -/obj/effect/decal/cleanable/dirt{ - desc = "A thin layer of dust coating the floor."; - name = "dust" - }, -/obj/structure/chair/office/light{ - dir = 1 - }, -/turf/open/floor/mineral/titanium/blue, -/area/shuttle/abandoned) -"QmF" = ( -/obj/machinery/door/airlock/titanium{ - name = "recovery shuttle interior airlock" - }, -/obj/effect/decal/cleanable/dirt{ - desc = "A thin layer of dust coating the floor."; - name = "dust" - }, -/turf/open/floor/mineral/titanium/blue, -/area/shuttle/abandoned) -"QmG" = ( -/obj/structure/chair{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt{ - desc = "A thin layer of dust coating the floor."; - name = "dust" - }, -/turf/open/floor/mineral/titanium, -/area/shuttle/abandoned) -"QmH" = ( -/obj/structure/table, -/obj/item/reagent_containers/food/drinks/shaker, -/obj/effect/decal/cleanable/dirt{ - desc = "A thin layer of dust coating the floor."; - name = "dust" - }, -/turf/open/floor/mineral/titanium, -/area/shuttle/abandoned) -"QmI" = ( -/obj/structure/table, -/obj/item/reagent_containers/food/condiment/peppermill{ - pixel_x = 3; - pixel_y = 4 - }, -/obj/item/reagent_containers/food/condiment/saltshaker{ - pixel_x = -3; - pixel_y = 4 - }, -/obj/effect/decal/cleanable/dirt{ - desc = "A thin layer of dust coating the floor."; - name = "dust" - }, -/turf/open/floor/mineral/titanium, -/area/shuttle/abandoned) -"QmJ" = ( -/obj/structure/table, -/obj/item/storage/fancy/donut_box, -/obj/effect/decal/cleanable/dirt{ - desc = "A thin layer of dust coating the floor."; - name = "dust" - }, -/turf/open/floor/mineral/titanium, -/area/shuttle/abandoned) -"QmK" = ( -/obj/structure/chair{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt{ - desc = "A thin layer of dust coating the floor."; - name = "dust" - }, -/turf/open/floor/mineral/titanium, -/area/shuttle/abandoned) -"QmL" = ( -/obj/machinery/door/airlock/titanium{ - name = "living quarters" - }, -/obj/effect/decal/cleanable/dirt{ - desc = "A thin layer of dust coating the floor."; - name = "dust" - }, -/turf/open/floor/mineral/titanium/blue, -/area/shuttle/abandoned) -"QmM" = ( -/obj/effect/decal/cleanable/dirt{ - desc = "A thin layer of dust coating the floor."; - name = "dust" - }, -/obj/item/roller{ - pixel_x = -3; - pixel_y = 7 - }, -/obj/item/roller{ - pixel_x = 3; - pixel_y = 4 - }, -/obj/item/reagent_containers/spray/cleaner, -/obj/structure/table, -/turf/open/floor/mineral/titanium, -/area/shuttle/abandoned) -"QmN" = ( -/obj/item/clothing/suit/bio_suit, -/obj/item/clothing/suit/bio_suit, -/obj/effect/decal/cleanable/dirt{ - desc = "A thin layer of dust coating the floor."; - name = "dust" - }, -/obj/item/clothing/gloves/color/latex, -/obj/item/clothing/gloves/color/latex, -/obj/item/clothing/head/bio_hood, -/obj/item/clothing/head/bio_hood, -/obj/item/clothing/mask/breath, -/obj/item/clothing/mask/breath, -/obj/structure/table, -/turf/open/floor/mineral/titanium, -/area/shuttle/abandoned) -"QmO" = ( -/obj/effect/decal/cleanable/blood/gibs/old, -/obj/effect/decal/cleanable/blood/old, -/obj/effect/decal/cleanable/dirt{ - desc = "A thin layer of dust coating the floor."; - name = "dust" - }, -/obj/effect/decal/remains/human{ - desc = "They look like human remains, and have clearly been gnawed at." - }, -/turf/open/floor/mineral/titanium, -/area/shuttle/abandoned) -"QmP" = ( -/obj/effect/decal/cleanable/dirt{ - desc = "A thin layer of dust coating the floor."; - name = "dust" - }, -/obj/item/clothing/gloves/color/black, -/obj/item/clothing/gloves/color/black, -/obj/item/clothing/suit/armor/vest, -/obj/item/clothing/suit/armor/vest, -/obj/structure/table, -/obj/item/clothing/head/helmet/swat/nanotrasen, -/obj/item/clothing/head/helmet/swat/nanotrasen, -/turf/open/floor/mineral/titanium, -/area/shuttle/abandoned) -"QmQ" = ( -/obj/item/storage/toolbox/emergency{ - pixel_x = -3; - pixel_y = 3 - }, -/obj/item/storage/toolbox/emergency, -/obj/item/storage/toolbox/emergency{ - pixel_x = 3; - pixel_y = -3 - }, -/obj/effect/decal/cleanable/dirt{ - desc = "A thin layer of dust coating the floor."; - name = "dust" - }, -/obj/structure/table, -/turf/open/floor/mineral/titanium, -/area/shuttle/abandoned) -"QmR" = ( -/obj/machinery/door/airlock/titanium{ - name = "bridge" - }, -/obj/effect/decal/cleanable/dirt{ - desc = "A thin layer of dust coating the floor."; - name = "dust" - }, -/turf/open/floor/mineral/titanium/blue, -/area/shuttle/abandoned) -"QmS" = ( -/obj/effect/decal/cleanable/blood/old, -/obj/structure/chair/comfy/black{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt{ - desc = "A thin layer of dust coating the floor."; - name = "dust" - }, -/turf/open/floor/mineral/titanium, -/area/shuttle/abandoned) -"QmT" = ( -/obj/effect/decal/cleanable/dirt{ - desc = "A thin layer of dust coating the floor."; - name = "dust" - }, -/obj/machinery/computer/shuttle/white_ship{ - dir = 8 - }, -/turf/open/floor/mineral/titanium, -/area/shuttle/abandoned) -"QmU" = ( -/obj/structure/reagent_dispensers/watertank, -/obj/effect/decal/cleanable/dirt{ - desc = "A thin layer of dust coating the floor."; - name = "dust" - }, -/obj/structure/light_construct/small{ - dir = 4 - }, -/turf/open/floor/mineral/titanium/blue, -/area/shuttle/abandoned) -"QmV" = ( -/obj/machinery/vending/cola/random, -/turf/open/floor/mineral/titanium, -/area/shuttle/abandoned) -"Qnd" = ( -/obj/effect/decal/cleanable/blood/old, -/obj/effect/decal/cleanable/dirt{ - desc = "A thin layer of dust coating the floor."; - name = "dust" - }, -/obj/structure/chair/office/light, -/turf/open/floor/mineral/titanium/blue, -/area/shuttle/abandoned) -"Qne" = ( -/obj/effect/decal/cleanable/blood/old, -/obj/effect/decal/cleanable/blood/gibs/old, -/obj/effect/decal/cleanable/dirt{ - desc = "A thin layer of dust coating the floor."; - name = "dust" - }, -/obj/item/clothing/head/centhat{ - desc = "There's a gouge through the top where something has clawed clean through it. Whoever was wearing it probably doesn't need a hat any more."; - name = "\improper damaged CentCom hat" - }, -/obj/effect/decal/remains/human{ - desc = "They look like human remains, and have clearly been gnawed at." - }, -/turf/open/floor/mineral/titanium/blue, -/area/shuttle/abandoned) -"Qnf" = ( -/obj/item/phone{ - pixel_x = -3; - pixel_y = 3 - }, -/obj/item/cigbutt/cigarbutt{ - pixel_x = 5; - pixel_y = -1 - }, -/obj/structure/table, -/obj/effect/decal/cleanable/dirt{ - desc = "A thin layer of dust coating the floor."; - name = "dust" - }, -/turf/open/floor/mineral/titanium, -/area/shuttle/abandoned) -"Qng" = ( -/obj/machinery/vending/snack/random, -/turf/open/floor/mineral/titanium, -/area/shuttle/abandoned) -"Qnh" = ( -/obj/effect/decal/cleanable/dirt{ - desc = "A thin layer of dust coating the floor."; - name = "dust" - }, -/obj/machinery/light/built{ - dir = 2 - }, -/turf/open/floor/mineral/titanium/blue, -/area/shuttle/abandoned) -"Qni" = ( -/obj/structure/sign/science{ - pixel_y = -32 - }, -/obj/effect/decal/cleanable/dirt{ - desc = "A thin layer of dust coating the floor."; - name = "dust" - }, -/turf/open/floor/mineral/titanium/blue, -/area/shuttle/abandoned) -"Qnj" = ( -/obj/effect/decal/cleanable/dirt{ - desc = "A thin layer of dust coating the floor."; - name = "dust" - }, -/obj/machinery/light, -/turf/open/floor/mineral/titanium/blue, -/area/shuttle/abandoned) -"Qnk" = ( -/obj/effect/decal/cleanable/dirt{ - desc = "A thin layer of dust coating the floor."; - name = "dust" - }, -/obj/structure/table, -/obj/item/device/megaphone, -/turf/open/floor/mineral/titanium, -/area/shuttle/abandoned) -"Qnl" = ( -/obj/effect/decal/cleanable/dirt{ - desc = "A thin layer of dust coating the floor."; - name = "dust" - }, -/obj/machinery/computer/camera_advanced/shuttle_docker/whiteship{ - station_lock_override = 1; - view_range = 15; - x_offset = -3; - y_offset = -7 - }, -/obj/machinery/light/built{ - dir = 2 - }, -/turf/open/floor/mineral/titanium, -/area/shuttle/abandoned) -"Qnm" = ( -/obj/structure/table, -/obj/effect/decal/cleanable/dirt{ - desc = "A thin layer of dust coating the floor."; - name = "dust" - }, -/turf/open/floor/mineral/titanium, -/area/shuttle/abandoned) -"Qnn" = ( -/obj/structure/table, -/obj/item/device/radio/off{ - pixel_y = 6 - }, -/obj/effect/decal/cleanable/dirt{ - desc = "A thin layer of dust coating the floor."; - name = "dust" - }, -/turf/open/floor/mineral/titanium, -/area/shuttle/abandoned) -"Qno" = ( -/obj/structure/sign/botany, -/turf/closed/wall/mineral/titanium, -/area/shuttle/abandoned) -"Qnp" = ( -/obj/machinery/door/airlock/titanium{ - name = "hydroponics" - }, -/obj/effect/decal/cleanable/dirt{ - desc = "A thin layer of dust coating the floor."; - name = "dust" - }, -/turf/open/floor/mineral/titanium/blue, -/area/shuttle/abandoned) -"Qnq" = ( -/obj/machinery/door/airlock/titanium{ - name = "kitchen" - }, -/obj/effect/decal/cleanable/dirt{ - desc = "A thin layer of dust coating the floor."; - name = "dust" - }, -/turf/open/floor/mineral/titanium/blue, -/area/shuttle/abandoned) -"Qnr" = ( -/obj/machinery/door/airlock/titanium{ - name = "laboratory" - }, -/obj/effect/decal/cleanable/dirt{ - desc = "A thin layer of dust coating the floor."; - name = "dust" - }, -/turf/open/floor/mineral/titanium/blue, -/area/shuttle/abandoned) -"Qns" = ( -/obj/structure/sign/bluecross_2, -/turf/closed/wall/mineral/titanium, -/area/shuttle/abandoned) -"Qnt" = ( -/obj/item/storage/bag/plants/portaseeder, -/obj/structure/table, -/obj/item/reagent_containers/spray/plantbgone{ - pixel_x = 13; - pixel_y = 5 - }, -/obj/item/reagent_containers/glass/bottle/nutrient/ez, -/obj/item/reagent_containers/glass/bottle/nutrient/ez, -/obj/item/reagent_containers/glass/bottle/nutrient/ez, -/obj/item/reagent_containers/glass/bottle/nutrient/rh{ - pixel_x = -2; - pixel_y = 3 - }, -/obj/effect/decal/cleanable/cobweb, -/obj/effect/decal/cleanable/dirt{ - desc = "A thin layer of dust coating the floor."; - name = "dust" - }, -/turf/open/floor/mineral/titanium, -/area/shuttle/abandoned) -"Qnu" = ( -/obj/machinery/biogenerator{ - idle_power_usage = 0; - use_power = 0 - }, -/turf/open/floor/mineral/titanium, -/area/shuttle/abandoned) -"Qnv" = ( -/obj/machinery/vending/hydroseeds{ - use_power = 0 - }, -/obj/effect/decal/cleanable/dirt{ - desc = "A thin layer of dust coating the floor."; - name = "dust" - }, -/obj/machinery/light/small/built{ - dir = 1 - }, -/turf/open/floor/mineral/titanium, -/area/shuttle/abandoned) -"Qnw" = ( -/obj/machinery/processor, -/obj/effect/decal/cleanable/dirt{ - desc = "A thin layer of dust coating the floor."; - name = "dust" - }, -/obj/machinery/light/small/built{ - dir = 1 - }, -/turf/open/floor/mineral/titanium, -/area/shuttle/abandoned) -"Qnx" = ( -/obj/structure/kitchenspike, -/obj/effect/decal/cleanable/blood/gibs/old, -/obj/effect/decal/cleanable/dirt{ - desc = "A thin layer of dust coating the floor."; - name = "dust" - }, -/turf/open/floor/mineral/titanium, -/area/shuttle/abandoned) -"Qny" = ( -/obj/structure/table, -/obj/machinery/microwave{ - pixel_x = -3; - pixel_y = 6 - }, -/obj/item/storage/box/donkpockets, -/obj/effect/decal/cleanable/dirt{ - desc = "A thin layer of dust coating the floor."; - name = "dust" - }, -/obj/effect/decal/cleanable/cobweb/cobweb2, -/turf/open/floor/mineral/titanium, -/area/shuttle/abandoned) -"Qnz" = ( -/obj/effect/decal/cleanable/oil, -/obj/effect/decal/cleanable/dirt{ - desc = "A thin layer of dust coating the floor."; - name = "dust" - }, -/turf/open/floor/mineral/titanium, -/area/shuttle/abandoned) -"QnA" = ( -/obj/machinery/sleeper{ - dir = 4; - use_power = 0 - }, -/obj/effect/decal/cleanable/dirt{ - desc = "A thin layer of dust coating the floor."; - name = "dust" - }, -/turf/open/floor/mineral/titanium, -/area/shuttle/abandoned) -"QnB" = ( -/obj/structure/closet/crate/freezer, -/obj/item/reagent_containers/blood/empty{ - pixel_x = -3; - pixel_y = -3 -======= "nxv" = ( /obj/machinery/power/apc{ - name = Construction Area APC; + name = "Construction Area APC"; + areastring = "/area/construction"; pixel_y = -24 ->>>>>>> e645319... Changes up the Construction Area on Box slightly. (#35009) }, /obj/structure/cable{ icon_state = "0-8" @@ -61556,11 +60142,11 @@ aaa aaa aaa aaa -cyc -cyc -Qll -cyc -cyc +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -61809,19 +60395,19 @@ aaa aaa aaa aaa -cyf -cym -cym -cym -cyR -Qmq -cyi -QmU -cyR -cym -cym -cym -cyF +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -62065,21 +60651,21 @@ aaa aaa aaa aaa -cyc -cyc -cyo -cyo -cyc -cyc -cyc -QmF -cyc -cyc -cyc -cyo -cyo -cyc -cyc +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -62322,21 +60908,21 @@ aaa aaa aaa aaa -cyc -cyc -cyc -cyc -cyc -Qmg -Qmr -cyi -QmV -Qng -cyc -cyc -cyc -cyc -cyc +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -62579,21 +61165,21 @@ aaa aaa aaa aaa -cyc -Qlm -cyc -QlL -QlW -cyI -cyI -cyI -cyI -cyI -cyc -Qnt -QnD -QnP -cyc +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -62836,21 +61422,21 @@ aaa aaa aaa aaa -cyR -Qln -Qlx -QlM -QlX -Qmi -cye -QmG -Qmw -cyI -Qno -Qnu -cyi -QnP -cyR +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -63093,21 +61679,21 @@ aaa aaa aaa aaa -cyc -cyc -cyc -cyc -cyc -Qmj -Qmt -QmH -cMc -cyI -Qnp -cyi -cyI -QnR -cyR +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -63350,21 +61936,21 @@ aaa aaa aaa aae -cyR -Qlo -Qly -QlN -QlY -Qmk -Qmt -QmI -cMc -Qnh -cyc -Qnv -QnE -QnP -cyc +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -63607,21 +62193,21 @@ aaa aaa aaa aaa -cyc -Qlp -Qlz -QlO -QlZ -cyI -Qmt -QmJ -cMc -cyI -cyc -cyc -QnF -cyc -cyc +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -63864,21 +62450,21 @@ aaa aaa aaa aaa -cyc -cyc -cyc -cyc -cyc -cyI -Qmw -QmK -cye -cyI -Qnq -cyI -QnG -QnT -cyc +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -64121,21 +62707,21 @@ aaa aaa aaa aaa -cyc -Qlq -QlA -cyn -cyc -cLY -cyI -cyi -cyI -cyI -cyc -Qnw -cyi -czr -cyR +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -64355,11 +62941,11 @@ ckq aaa aaa aaa -aCS -cMB -aCV -aCV -aCS +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -64369,7 +62955,7 @@ cwU aaa aaa aaa -cxt +aaa aaa aaa aaf @@ -64378,21 +62964,21 @@ aaa aaa aaa aaf -cyR -Qlr -QlB -QlP -cyc -cyc -cyc -QmL -cyc -cyc -cyc -Qnx -QnH -QnU -cyR +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -64612,11 +63198,11 @@ asE arB aaa aaa -aCS -aFC -aEr -aIG -aCS +aaa +aaa +aaa +aaa +aaa aaa aaa arB @@ -64625,9 +63211,9 @@ cyb asE arB aaa -cxt -cxD -cxt +aaa +aaa +aaa aaa aaf aaa @@ -64635,21 +63221,21 @@ aaa aaa aaf aaf -cyR -Qlr -cyi -cyI -QlD -cyi -cyI -cyI -cyI -cyI -cyc -Qny -QnI -QnV -cyc +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -64869,11 +63455,11 @@ cwT aAC aaa aaa -aCS -cLJ -aEr -cLK -aCS +aaa +aaa +aaa +aaa +aaa aaa aaa aAC @@ -64882,9 +63468,9 @@ auP cxY arB aaa -cxy -cxC -cCy +aaa +aaa +aaa aaa aaf aaa @@ -64892,21 +63478,21 @@ aaf aaa aAC aaf -cyc -Qlt -cyI -QlR -cyc -cyI -cye -QmM -cye -cyI -cyc -cyc -cyc -cyc -cyc +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -65125,13 +63711,13 @@ cyb asE arB aaa -aCS -aCS -aCS -aHs -aCS -aCS -aCS +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa arB asE @@ -65139,9 +63725,9 @@ cyb avP arB aaa -cxu -cLQ -cxu +aaa +aaa +aaa aaa arB awW @@ -65149,21 +63735,21 @@ awW asE arB aaf -cyc -cyc -QlD -cyc -cyc -Qmn -Qmw -QmN -Qmw -Qni -cyc -Qnz -QnJ -QnW -cyc +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -65382,45 +63968,45 @@ ayk awW aAD awW -aCS -aEo -aEr -aEr -aEr -aKg -aCS +aaa +aaa +aaa +aaa +aaa +aaa +aaa awW awW awW aQG aRX arB -cxu -cxu -cCw -cxu -cxu +aaa +aaa +aaa +aaa +aaa arB awY ayk awW aAD awW -Qll -Qlu -cyI -cyi -Qmb -cyI -Qmk -QmO -cyI -cyI -Qnr -cyI -QnK -QnX -cyR +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -65639,24 +64225,24 @@ ayl azy auP cIh -aCU -aEr -aFE -aFE -aFE -aEr -aCU +aaa +aaa +aaa +aaa +aaa +aaa +aaa azy auP cIh ayl aRY awW -cxw -cxB -cxC -cxI -cxw +aaa +aaa +aaa +aaa +aaa awW awZ ayl @@ -65664,20 +64250,20 @@ beK auP cyt cyd -cyi -QlF -cyx -Qmb -cyi -cyI -cMa -cyi -cyI -cyc -cye -czm -QnY -cyc +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -65896,45 +64482,45 @@ ayk awW awW awW -aCS -aEq -aEr -aEr -aEr -cLL -aCS +aaa +aaa +aaa +aaa +aaa +aaa +aaa awW awW awW awV aRY awW -cxu -cxB -cxC -cxI -cxu +aaa +aaa +aaa +aaa +aaa awW awZ ayk awW awW awW -cyc -cyc -QlG -cyc -cyc -cyI -cye -QmP -cye -Qnj -cyc -cyc -cyc -cyc -cyc +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -66153,45 +64739,45 @@ cqr azz aAF awW -aCV -aEt -aFE -aFE -aFE -aEr -aCV +aaa +aaa +aaa +aaa +aaa +aaa +aaa awW aOf azz aPu aRY awW -cxu -cLP -cxC -cxC -cxu +aaa +aaa +aaa +aaa +aaa awW awZ aym azz aAF awW -cyc -cyk -QlH -QlS -Qmd -cyI -cye -QmQ -Qmw -cyI -Qns -QnA -QnL -QnZ -cyc +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -66410,45 +64996,45 @@ aIK ayl aAE awW -aCV -aEs -aEr -aEr -aEr -aEr -aCV +aaa +aaa +aaa +aaa +aaa +aaa +aaa awW aOe ayl ayl aRY awW -cCu -cxC -cCx -cxC -cCz +aaa +aaa +aaa +aaa +aaa awW awZ ayl ayl aAE awW -cyR -cyj -QlI -QlI -Qme -cyI -cyI -cyi -cyI -cyI -cMf -cyi -QnM -Qoa -cyR +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -66667,45 +65253,45 @@ aIK ayl aAH awW -aCV -aEv -aFE -aFE -aFE -aEr -aCV +aaa +aaa +aaa +aaa +aaa +aaa +aaa awW aOh ayl ayl aRY awW -cxu -cxC -cxC -cLR -cxu +aaa +aaa +aaa +aaa +aaa awW awZ ayl ayl bgi awW -cyR -Qlv -QlI -QlU -cyc -cyc -cyc -QmR -cyc -cyc -cyc -QnB -QnN -Qob -cyR +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -66924,45 +65510,45 @@ cry azA aAG awW -aCV -aEu -aEr -aEr -aEr -aEr -aCV +aaa +aaa +aaa +aaa +aaa +aaa +aaa awW aOg azA aQH aRY awW -cxu -cxB -cxC -cxI -cxu +aaa +aaa +aaa +aaa +aaa awW awZ ayn azA bgh awW -cyc -Qlw -QlK -QlV -cyc -cyw -QmC -cyI -cye -Qnk -cyc -QnC -QnO -Qoc -cyc +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -67181,45 +65767,45 @@ crz awW awW awW -aCS -aEw -aFE -aFE -aFE -aKh -aCS +aaa +aaa +aaa +aaa +aaa +aaa +aaa awW awW awW awV aRY awW -cxw -cxB -cxC -cxI -cxw +aaa +aaa +aaa +aaa +aaa awW awZ ayk awW awW awW -cyc -cyc -cyR -cyc -cyc -Qmo -QmD -cyI -Qnd -Qnl -cyc -cyc -cyR -cyc -cyc +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -67438,24 +66024,24 @@ aIK azy auP cIh -aCU -aEr -aEr -aEr -aEr -aEr -aCU +aaa +aaa +aaa +aaa +aaa +aaa +aaa azy auP cIh ayl aRY awW -cxu -cxw +aaa +aaa cxE -cxw -cxu +aaa +aaa awW awZ ayl @@ -67466,13 +66052,13 @@ aaa aaa aaa aaa -cyR -Qmp -cyI -QmS -Qne -Qnm -cyR +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -67695,13 +66281,13 @@ ayp awW aAD awW -aCS -aEy -aEy -aEy -aEy -aEy -aCS +aaa +aaa +aaa +aaa +aaa +aaa +aaa awW awW awW @@ -67723,13 +66309,13 @@ aaa aaa aaa aaa -cyR -cLZ -cyO -QmT -Qnf -Qnn -cyR +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -67952,13 +66538,13 @@ ayo azB awW aaa -aCS -aEx -aFF +aaa +aaa +aaa cIg -aFF -aKi -aCS +aaa +aaa +aaa aaa awW aPt @@ -67980,13 +66566,13 @@ aaa aaa aaa aaa -Qmf -cyR -cyR -cyR -cyR -cyR -Qmf +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -71833,17 +70419,17 @@ bea bfq bji bkF -cys -cys -cys -cys -cys -cys -cys -cys -cys -cys -cys +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -72090,18 +70676,18 @@ bdZ bhO bjh bkE -cys -cyB -cyB -cyB -cyB -cMb -cyB -cyB -cyB -czf -cys -czs +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -72347,18 +70933,18 @@ aXQ bhQ bjj bkF -cys -cyB -cyB -cyB -cyB -cyB -cyB -cyB -cyB -cyB -czp -czt +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -72604,18 +71190,18 @@ aZt bhQ bjj bkF -cys -cLX -cyB -cyB -cyB -cyB -cyB -cyB -cyB -cyB -czp -czt +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -72861,18 +71447,18 @@ bgr bhQ bjj bkF -cys -cyB -cyB -cyB -cyB -cyB -cyB -cyB -cyB -cyB -czp -czt +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -73118,18 +71704,18 @@ bfa bhQ bjk bkE -cys -cyB -cyB -cyB -cyB -cyS -cyB -cyB -cyB -czf -cys -czu +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -73375,17 +71961,17 @@ bgs bhQ bjk bkF -cys -cys -cys -cyN -cyQ -cys +aaa +aaa +aaa +aaa +aaa +aaa cyT -cyZ -cys -cys -cys +aaa +aaa +aaa +aaa aaa aaa aaa @@ -75445,13 +74031,13 @@ aaa aaa aaa aaa -cTg -cTg -cTi -cTg -cTi -cTg -cTg +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa bCq bPS @@ -75702,13 +74288,13 @@ aaa aaa aaa aaa -cTg -bGg -cTo -cMl -bHx -cTx -cTg +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa bLv bPR @@ -75959,13 +74545,13 @@ bxx bxu bxu bDi -cTi -bGh -bHx -cTo -bHx -bLt -bMF +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa bCq bPS @@ -76216,13 +74802,13 @@ bzP bAS bxu aaa -cTg -bGg -cTo -cTo -bHx -bLs -cTg +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa bLv bPT @@ -76473,13 +75059,13 @@ bzR byd bxx aaa -cTg -cTg -cTi +aaa +aaa +aaa bJc -cTi -cTg -cTg +aaa +aaa +aaa aaa bCq bPV @@ -77954,15 +76540,15 @@ aaa aaa aaa aaa -akD -akD -ajX -akD -akD -ajX -akD -akD -akD +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -78211,15 +76797,15 @@ aaa aaa aaa aaa -ajX -akC -alj -alY -amI -amI -anM -aop -aoY +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -78468,15 +77054,15 @@ aaa aaa aaa aaa -ajX -akF -alm -akD -cLI -amI -amI -aop -aoY +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -78725,15 +77311,15 @@ aaa aaa aaa aaa -ajX -akE -all -alZ -amJ -anr -amI -aop -aoY +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa arP @@ -78982,15 +77568,15 @@ aaa aaa aaa aaa -akD -akD -alo -akD -akD -akD +aaa +aaa +aaa +aaa +aaa +aaa anO -akD -akD +aaa +aaa aaa aaa arP @@ -107279,23 +105865,23 @@ aaa aaa aaa aaa -cwI -cwI -cwI -cxg -cwI +aaa +aaa +aaa +aaa +aaa afa -cwI -crx -crx -crx -cwI -cxK -cwI -cxK -cwI -cwI -cwI +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -107533,27 +106119,27 @@ aaa aaa aaa aaa -cwI -cwI -cwI -cwI -cwY -cxd -cxe -cwI -cLO -anq -anq -anq -anq -anq -cLS -cwI -cxQ -cLU -cxU -cwI -cwI +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -107789,28 +106375,28 @@ aae aaa aaa aaa -cwI -crO -cwK -cwP -cwI -cwY -cxe -cxh -cwI -cxo -cwL -cwL -cwL -cwL -cwL -cxL -cwI -cxQ -cxQ -cxU -cxX -cxZ +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -108046,28 +106632,28 @@ aaa aaa aaa aaa -crx -crN -cwJ -cwO -cwI -cwY -cxe -cxh -cwI -cwL -cxq -cxq -cxq -cxq -cxq -cwL -cxM -cxQ -cxQ -cxV -cxX -cxZ +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -108303,28 +106889,28 @@ aaa aaa aaa aaa -crx -cwF -cwL -cwR -cwI -crx -cxf -crx -cxm -cwL -cxr -cxr -cxr -cxr -cxr -cwL -cwI -cxR -cLV -cxV -cxX -cxZ +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -108560,28 +107146,28 @@ aaa aaa aaa aaa -crx -crQ -cwL -cwQ -cwI -cwZ -cwL -cxi -cLN -cwL -cwL -cwL -cwL -cwL -cwL -cLT -cwW -cwI -cwI -cwI -cxX -cxZ +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -108817,28 +107403,28 @@ aaa aaa aaa aaa -crx -cwF -cwL -cwL -cwX -cwL -cwL -anq -cxj -cwL -cxq -cxq -cxq -cxq -cxq -cwL -crx -cxc -cLW -cxc -cxX -cxZ +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -109074,28 +107660,28 @@ aaa aaa aaa aaa -crx -cwG -amB -amB -cwW -cxa -cwL -cxj -cxj -cwL -cxr -cxr -cxr -cxr -cxr -cwL -cxO -cxa -cxa -cxa -cxX -cxZ +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -109331,28 +107917,28 @@ aaa aaa aaa aaa -cwI -crO -cwN -cwS -cwI -cxc -cwL -cwL -cwL -cwL -cwL -cwL -cwL -cwL -cwL -cwL -crx -cxa -cxa -cxa -cxX -cxZ +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -109589,27 +108175,27 @@ aaa aaa aaa aaa -cwI -cwI -cwI -cwI -cxb -cLM -cxa -cxa -cxp -cxs -cxs -cxs -cxs -cxs -cxp -crx -cxS -cxT -cxS -cwI -cwI +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -109849,23 +108435,23 @@ aaa aaa aaa aaa -cwI -crx -cwI -crx -cwI -cwI -cwI -crx -crx -crx -cwI -cwI -cwI -crx -cwI -crx -cwI +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa diff --git a/_maps/map_files/Deltastation/DeltaStation2.dmm b/_maps/map_files/Deltastation/DeltaStation2.dmm index 26a99bb158..9c25172b43 100644 --- a/_maps/map_files/Deltastation/DeltaStation2.dmm +++ b/_maps/map_files/Deltastation/DeltaStation2.dmm @@ -176,7 +176,7 @@ /turf/open/floor/plasteel/neutral, /area/shuttle/abandoned) "aay" = ( -/obj/structure/sign/vacuum, +/obj/structure/sign/warning/vacuum, /turf/closed/wall/mineral/titanium/nodiagonal, /area/shuttle/abandoned) "aaz" = ( @@ -616,7 +616,8 @@ /obj/docking_port/mobile/pod{ id = "pod1"; name = "escape pod 1"; - port_direction = 2 + port_direction = 2; + timid = 0 }, /obj/effect/turf_decal/stripes/end, /turf/open/floor/plasteel/white, @@ -632,7 +633,8 @@ /obj/docking_port/mobile/pod{ id = "pod2"; name = "escape pod 2"; - port_direction = 2 + port_direction = 2; + timid = 0 }, /obj/effect/turf_decal/stripes/end, /turf/open/floor/plasteel/white, @@ -903,7 +905,7 @@ dir = 8 }, /obj/structure/closet/emcloset/anchored, -/obj/structure/sign/vacuum{ +/obj/structure/sign/warning/vacuum{ pixel_x = -32 }, /obj/effect/turf_decal/bot, @@ -975,7 +977,7 @@ /turf/open/floor/plasteel, /area/hallway/secondary/entry) "aca" = ( -/obj/structure/sign/pods{ +/obj/structure/sign/warning/pods{ pixel_x = -32 }, /obj/effect/turf_decal/stripes/line{ @@ -1048,12 +1050,8 @@ /turf/open/floor/plasteel/neutral, /area/shuttle/abandoned) "aci" = ( -/obj/effect/decal/cleanable/dirt{ - desc = "A thin layer of dust coating the floor."; - name = "dust" - }, -/turf/open/floor/plasteel/neutral, -/area/shuttle/abandoned) +/turf/open/space/basic, +/area/space) "acj" = ( /obj/effect/decal/cleanable/dirt{ desc = "A thin layer of dust coating the floor."; @@ -1123,7 +1121,7 @@ }, /area/construction/mining/aux_base) "acs" = ( -/obj/structure/sign/electricshock, +/obj/structure/sign/warning/electricshock, /turf/closed/wall/r_wall, /area/maintenance/solars/starboard/fore) "act" = ( @@ -1256,23 +1254,17 @@ /turf/open/floor/plating/airless, /area/shuttle/arrival) "acF" = ( -/obj/docking_port/mobile/arrivals{ - dir = 2; - dwidth = 4; - height = 17; - name = "delta arrivals shuttle"; - width = 9 - }, /obj/docking_port/stationary{ dir = 2; dwidth = 4; height = 17; id = "arrivals_stationary"; name = "delta arrivals"; - width = 9 + width = 9; + roundstart_template = /datum/map_template/shuttle/arrival/delta }, -/turf/closed/wall/mineral/plastitanium, -/area/shuttle/arrival) +/turf/open/space/basic, +/area/space) "acG" = ( /obj/structure/table/reinforced, /obj/item/storage/belt/utility, @@ -1699,7 +1691,7 @@ /area/hallway/secondary/entry) "ads" = ( /obj/effect/spawner/structure/window/reinforced, -/obj/structure/sign/vacuum, +/obj/structure/sign/warning/vacuum, /turf/open/floor/plating, /area/hallway/secondary/entry) "adt" = ( @@ -1710,8 +1702,8 @@ /turf/open/floor/plasteel, /area/hallway/secondary/entry) "adu" = ( -/turf/closed/wall/mineral/titanium/nodiagonal, -/area/shuttle/arrival) +/turf/open/space/basic, +/area/space) "adv" = ( /turf/closed/wall/mineral/titanium, /area/shuttle/arrival) @@ -1823,7 +1815,7 @@ }, /area/shuttle/abandoned) "adH" = ( -/obj/structure/sign/vacuum, +/obj/structure/sign/warning/vacuum, /turf/closed/wall/mineral/titanium, /area/shuttle/abandoned) "adI" = ( @@ -2244,8 +2236,8 @@ /turf/open/floor/plating/airless, /area/shuttle/transport) "aeu" = ( -/turf/open/floor/pod/light, -/area/shuttle/transport) +/turf/open/space/basic, +/area/space) "aev" = ( /obj/structure/shuttle/engine/heater{ dir = 1 @@ -2394,7 +2386,7 @@ /turf/open/floor/plasteel/whiteblue/side, /area/shuttle/abandoned) "aeL" = ( -/obj/structure/sign/bluecross_2, +/obj/structure/sign/departments/medbay/alt, /turf/closed/wall/mineral/titanium, /area/shuttle/abandoned) "aeM" = ( @@ -2407,7 +2399,7 @@ }, /area/shuttle/abandoned) "aeN" = ( -/obj/structure/sign/engineering, +/obj/structure/sign/departments/engineering, /turf/closed/wall/mineral/titanium, /area/shuttle/abandoned) "aeO" = ( @@ -3089,7 +3081,6 @@ /obj/structure/cable/white{ icon_state = "2-8" }, -/obj/effect/landmark/lightsout, /obj/machinery/holopad, /obj/structure/cable/white{ icon_state = "1-2" @@ -3134,7 +3125,8 @@ dir = 2; dwidth = 4; height = 9; - width = 9 + width = 9; + timid = 0 }, /obj/machinery/bluespace_beacon, /obj/docking_port/mobile/auxillary_base, @@ -3180,7 +3172,7 @@ /turf/open/floor/plasteel/whitepurple/corner, /area/shuttle/abandoned) "agx" = ( -/obj/structure/sign/science, +/obj/structure/sign/departments/science, /turf/closed/wall/mineral/titanium, /area/shuttle/abandoned) "agy" = ( @@ -3360,27 +3352,6 @@ /turf/open/floor/plating, /area/shuttle/abandoned) "agS" = ( -/obj/machinery/door/airlock/titanium{ - cyclelinkeddir = 8; - name = "External Airlock" - }, -/obj/effect/decal/cleanable/dirt{ - desc = "A thin layer of dust coating the floor."; - name = "dust" - }, -/obj/docking_port/mobile{ - dheight = 0; - dir = 8; - dwidth = 11; - height = 15; - id = "whiteship"; - launch_status = 0; - name = "White-Ship"; - port_direction = 8; - preferred_direction = 8; - roundstart_move = "whiteship_away"; - width = 32 - }, /obj/docking_port/stationary{ dir = 8; dwidth = 11; @@ -3389,8 +3360,8 @@ name = "SS13: Auxiliary Dock, Station-Fore"; width = 32 }, -/turf/open/floor/plasteel/neutral, -/area/shuttle/abandoned) +/turf/open/space/basic, +/area/space) "agT" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/effect/turf_decal/stripes/line{ @@ -3992,17 +3963,6 @@ }, /area/shuttle/abandoned) "aid" = ( -/obj/docking_port/mobile{ - dir = 1; - dwidth = 2; - height = 13; - id = "ferry"; - name = "ferry shuttle"; - port_direction = 1; - preferred_direction = 4; - roundstart_move = "ferry_away"; - width = 5 - }, /obj/docking_port/stationary{ dir = 1; dwidth = 2; @@ -4012,9 +3972,8 @@ turf_type = /turf/open/space; width = 5 }, -/obj/machinery/door/airlock/titanium, -/turf/open/floor/pod/dark, -/area/shuttle/transport) +/turf/open/space/basic, +/area/space) "aie" = ( /obj/structure/frame/computer{ dir = 1 @@ -4458,7 +4417,7 @@ /turf/open/floor/plasteel, /area/hallway/secondary/entry) "ajh" = ( -/obj/structure/sign/pods, +/obj/structure/sign/warning/pods, /turf/closed/wall, /area/hallway/secondary/entry) "aji" = ( @@ -4737,7 +4696,7 @@ /turf/open/floor/plasteel, /area/maintenance/starboard/fore) "ajP" = ( -/obj/structure/sign/nosmoking_2, +/obj/structure/sign/warning/nosmoking, /turf/closed/wall, /area/maintenance/starboard/fore) "ajQ" = ( @@ -4866,13 +4825,6 @@ }, /turf/open/floor/plasteel/neutral, /area/hallway/secondary/entry) -"akh" = ( -/obj/effect/landmark/lightsout, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, -/turf/open/floor/plasteel/neutral, -/area/hallway/secondary/entry) "aki" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 1 @@ -7050,7 +7002,7 @@ /obj/structure/disposalpipe/segment{ dir = 10 }, -/obj/structure/sign/vacuum{ +/obj/structure/sign/warning/vacuum{ pixel_y = 32 }, /obj/effect/turf_decal/stripes/line{ @@ -7329,7 +7281,7 @@ "aqi" = ( /obj/structure/table/wood, /obj/item/device/flashlight/lamp, -/obj/structure/sign/nosmoking_2{ +/obj/structure/sign/warning/nosmoking{ pixel_x = 32 }, /turf/open/floor/wood, @@ -7885,7 +7837,7 @@ /turf/open/floor/circuit/green, /area/engine/atmospherics_engine) "arl" = ( -/obj/structure/sign/electricshock, +/obj/structure/sign/warning/electricshock, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 6 }, @@ -7934,7 +7886,7 @@ /turf/open/floor/plasteel, /area/engine/atmospherics_engine) "arp" = ( -/obj/structure/sign/electricshock, +/obj/structure/sign/warning/electricshock, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -9867,7 +9819,7 @@ /turf/open/floor/plasteel, /area/engine/atmospherics_engine) "ava" = ( -/obj/structure/sign/electricshock{ +/obj/structure/sign/warning/electricshock{ pixel_y = -32 }, /obj/machinery/atmospherics/pipe/simple/cyan/visible{ @@ -9892,7 +9844,7 @@ }, /area/engine/atmospherics_engine) "avd" = ( -/obj/structure/sign/nosmoking_2{ +/obj/structure/sign/warning/nosmoking{ pixel_y = -32 }, /obj/effect/turf_decal/stripes/line{ @@ -10604,7 +10556,7 @@ /area/janitor) "awG" = ( /obj/structure/reagent_dispensers/watertank, -/obj/structure/sign/nosmoking_2{ +/obj/structure/sign/warning/nosmoking{ pixel_x = 32 }, /obj/item/reagent_containers/glass/bucket, @@ -11016,7 +10968,7 @@ /area/engine/atmospherics_engine) "axG" = ( /obj/item/twohanded/required/kirbyplants/random, -/obj/structure/sign/nosmoking_2{ +/obj/structure/sign/warning/nosmoking{ pixel_x = 32 }, /obj/structure/cable{ @@ -11078,7 +11030,7 @@ /area/maintenance/port/fore) "axQ" = ( /obj/effect/decal/cleanable/dirt, -/obj/structure/sign/nosmoking_2{ +/obj/structure/sign/warning/nosmoking{ pixel_y = -32 }, /turf/open/floor/plating, @@ -11556,7 +11508,7 @@ /area/engine/atmospherics_engine) "ayP" = ( /obj/effect/decal/cleanable/dirt, -/obj/structure/sign/securearea{ +/obj/structure/sign/warning/securearea{ pixel_x = 32 }, /obj/machinery/camera{ @@ -11579,7 +11531,7 @@ }, /area/engine/atmospherics_engine) "ayR" = ( -/obj/structure/sign/radiation, +/obj/structure/sign/warning/radiation, /turf/closed/wall/r_wall, /area/engine/atmospherics_engine) "ayS" = ( @@ -11644,7 +11596,7 @@ pixel_y = -3 }, /obj/item/lipstick/random, -/obj/structure/sign/nosmoking_2{ +/obj/structure/sign/warning/nosmoking{ pixel_y = -32 }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, @@ -11993,7 +11945,7 @@ /turf/open/space, /area/space/nearstation) "azO" = ( -/obj/structure/sign/securearea{ +/obj/structure/sign/warning/securearea{ pixel_x = -32 }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, @@ -12412,7 +12364,7 @@ icon_state = "0-8" }, /obj/effect/spawner/structure/window/reinforced, -/obj/structure/sign/vacuum, +/obj/structure/sign/warning/vacuum, /turf/open/floor/plating, /area/quartermaster/storage) "aAK" = ( @@ -12433,9 +12385,8 @@ /turf/open/floor/plasteel, /area/shuttle/supply) "aAM" = ( -/obj/effect/turf_decal/bot, -/turf/open/floor/plasteel, -/area/shuttle/supply) +/turf/open/space/basic, +/area/space) "aAN" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/bot, @@ -12596,7 +12547,7 @@ /turf/open/floor/plasteel/caution, /area/engine/atmospherics_engine) "aBf" = ( -/obj/structure/sign/securearea, +/obj/structure/sign/warning/securearea, /turf/closed/wall/r_wall, /area/engine/atmospherics_engine) "aBg" = ( @@ -13118,7 +13069,7 @@ /turf/open/floor/plasteel, /area/engine/atmospherics_engine) "aCl" = ( -/obj/structure/sign/radiation, +/obj/structure/sign/warning/radiation, /turf/closed/wall/r_wall, /area/engine/supermatter) "aCm" = ( @@ -13605,13 +13556,16 @@ /turf/open/floor/plasteel, /area/quartermaster/storage) "aDi" = ( -/obj/machinery/door/airlock/shuttle{ - name = "Supply Shuttle Airlock"; - req_access_txt = "31" +/obj/docking_port/stationary{ + dir = 4; + dwidth = 4; + height = 7; + id = "supply_home"; + name = "Cargo Bay"; + width = 12 }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/shuttle/supply) +/turf/open/space/basic, +/area/space) "aDj" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -13710,7 +13664,7 @@ pixel_x = -12; pixel_y = 2 }, -/obj/structure/sign/nosmoking_2{ +/obj/structure/sign/warning/nosmoking{ pixel_x = -32 }, /obj/effect/turf_decal/bot, @@ -13729,7 +13683,7 @@ dir = 4; pixel_x = 11 }, -/obj/structure/sign/botany{ +/obj/structure/sign/departments/botany{ pixel_x = 32 }, /obj/effect/turf_decal/bot, @@ -14064,7 +14018,7 @@ /obj/structure/cable{ icon_state = "4-8" }, -/obj/structure/sign/fire{ +/obj/structure/sign/warning/fire{ pixel_x = 32; pixel_y = 32 }, @@ -14552,22 +14506,6 @@ }, /turf/open/floor/plasteel, /area/quartermaster/storage) -"aFl" = ( -/obj/docking_port/mobile/supply{ - dwidth = 5; - roundstart_move = "supply_away"; - width = 12 - }, -/obj/docking_port/stationary{ - dir = 8; - dwidth = 5; - height = 7; - id = "supply_home"; - name = "Cargo Bay"; - width = 12 - }, -/turf/closed/wall/mineral/titanium, -/area/shuttle/supply) "aFm" = ( /turf/closed/wall/r_wall, /area/security/prison) @@ -14604,7 +14542,7 @@ /obj/structure/extinguisher_cabinet{ pixel_x = -26 }, -/obj/structure/sign/nosmoking_2{ +/obj/structure/sign/warning/nosmoking{ pixel_y = -32 }, /obj/effect/turf_decal/bot, @@ -15321,7 +15259,7 @@ dir = 8 }, /obj/item/seeds/carrot, -/obj/structure/sign/electricshock{ +/obj/structure/sign/warning/electricshock{ pixel_y = 32 }, /turf/open/floor/plasteel/red/corner{ @@ -15381,7 +15319,7 @@ pixel_x = 3; pixel_y = 3 }, -/obj/structure/sign/electricshock{ +/obj/structure/sign/warning/electricshock{ pixel_y = 32 }, /obj/effect/decal/cleanable/cobweb/cobweb2, @@ -15432,7 +15370,7 @@ /area/maintenance/solars/port/fore) "aGP" = ( /obj/machinery/disposal/bin, -/obj/structure/sign/deathsposal{ +/obj/structure/sign/warning/deathsposal{ pixel_y = 32 }, /obj/structure/disposalpipe/trunk{ @@ -15449,7 +15387,7 @@ /area/maintenance/disposal/incinerator) "aGR" = ( /obj/machinery/atmospherics/components/unary/tank/toxins, -/obj/structure/sign/nosmoking_2{ +/obj/structure/sign/warning/nosmoking{ pixel_y = 32 }, /obj/effect/decal/cleanable/dirt, @@ -15498,7 +15436,7 @@ /obj/machinery/power/smes{ charge = 1e+006 }, -/obj/structure/sign/electricshock{ +/obj/structure/sign/warning/electricshock{ pixel_y = 32 }, /obj/structure/cable/white{ @@ -15620,7 +15558,7 @@ /obj/structure/cable/white{ icon_state = "4-8" }, -/obj/structure/sign/electricshock{ +/obj/structure/sign/warning/electricshock{ pixel_y = -32 }, /obj/machinery/light, @@ -15657,7 +15595,7 @@ /turf/open/floor/plasteel, /area/engine/atmospherics_engine) "aHk" = ( -/obj/structure/sign/fire, +/obj/structure/sign/warning/fire, /turf/closed/wall/r_wall, /area/engine/atmospherics_engine) "aHl" = ( @@ -16342,7 +16280,7 @@ /turf/open/floor/plasteel, /area/engine/atmospherics_engine) "aIA" = ( -/obj/structure/sign/biohazard, +/obj/structure/sign/warning/biohazard, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/closed/wall/r_wall, /area/engine/atmospherics_engine) @@ -16366,7 +16304,7 @@ /turf/open/floor/plasteel, /area/engine/atmospherics_engine) "aIC" = ( -/obj/structure/sign/radiation, +/obj/structure/sign/warning/radiation, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/closed/wall/r_wall, /area/engine/atmospherics_engine) @@ -16508,10 +16446,6 @@ icon_state = "wood-broken6" }, /area/hallway/secondary/service) -"aIR" = ( -/obj/structure/closet/secure_closet/personal/cabinet, -/turf/open/floor/wood, -/area/hallway/secondary/service) "aIS" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 8 @@ -16615,7 +16549,6 @@ }, /area/hallway/primary/fore) "aJe" = ( -/obj/effect/landmark/lightsout, /obj/machinery/atmospherics/components/unary/vent_scrubber/on{ dir = 8 }, @@ -16848,7 +16781,7 @@ /turf/open/floor/plating, /area/maintenance/solars/port/fore) "aJH" = ( -/obj/structure/sign/electricshock, +/obj/structure/sign/warning/electricshock, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/closed/wall/r_wall, /area/maintenance/solars/port/fore) @@ -17300,7 +17233,6 @@ }, /area/quartermaster/sorting) "aKG" = ( -/obj/effect/landmark/lightsout, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -17579,7 +17511,7 @@ /turf/open/floor/plasteel, /area/maintenance/disposal/incinerator) "aLn" = ( -/obj/structure/sign/vacuum{ +/obj/structure/sign/warning/vacuum{ pixel_x = -32 }, /obj/machinery/light/small{ @@ -17701,7 +17633,7 @@ /turf/open/floor/circuit/green, /area/engine/atmospherics_engine) "aLx" = ( -/obj/structure/sign/nosmoking_2{ +/obj/structure/sign/warning/nosmoking{ pixel_x = 32 }, /obj/machinery/power/smes{ @@ -17775,13 +17707,6 @@ }, /turf/open/floor/wood, /area/hallway/secondary/service) -"aLG" = ( -/obj/item/twohanded/required/kirbyplants/random, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, -/turf/open/floor/wood, -/area/hallway/secondary/service) "aLH" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 4 @@ -17978,7 +17903,7 @@ /obj/structure/table, /obj/item/storage/crayons, /obj/item/storage/crayons, -/obj/structure/sign/electricshock{ +/obj/structure/sign/warning/electricshock{ pixel_y = 32 }, /obj/effect/decal/cleanable/cobweb, @@ -18084,7 +18009,7 @@ icon_state = "4-8" }, /obj/item/toy/figure/syndie, -/obj/structure/sign/electricshock{ +/obj/structure/sign/warning/electricshock{ pixel_y = 32 }, /turf/open/floor/plasteel/red/corner{ @@ -18128,7 +18053,7 @@ /obj/machinery/light/small{ dir = 8 }, -/obj/structure/sign/vacuum{ +/obj/structure/sign/warning/vacuum{ pixel_x = -32 }, /turf/open/floor/plasteel/vault{ @@ -18155,7 +18080,7 @@ }, /area/security/execution/education) "aMt" = ( -/obj/structure/sign/fire, +/obj/structure/sign/warning/fire, /turf/closed/wall/r_wall, /area/maintenance/disposal/incinerator) "aMu" = ( @@ -18280,7 +18205,7 @@ /turf/open/floor/plasteel, /area/engine/atmos) "aMI" = ( -/obj/structure/sign/radiation, +/obj/structure/sign/warning/radiation, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/closed/wall/r_wall, /area/engine/atmos) @@ -18303,12 +18228,12 @@ /turf/open/floor/plasteel, /area/engine/atmos) "aMK" = ( -/obj/structure/sign/fire, +/obj/structure/sign/warning/fire, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/closed/wall/r_wall, /area/engine/atmos) "aML" = ( -/obj/structure/sign/electricshock, +/obj/structure/sign/warning/electricshock, /turf/closed/wall/r_wall, /area/engine/atmos) "aMM" = ( @@ -18389,7 +18314,7 @@ /turf/closed/wall, /area/crew_quarters/theatre) "aMY" = ( -/obj/structure/sign/nosmoking_2{ +/obj/structure/sign/warning/nosmoking{ pixel_x = -32 }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, @@ -18755,7 +18680,7 @@ dir = 8; luminosity = 2 }, -/obj/structure/sign/vacuum{ +/obj/structure/sign/warning/vacuum{ pixel_y = -32 }, /obj/structure/cable{ @@ -19488,7 +19413,7 @@ /turf/open/floor/engine/vacuum, /area/maintenance/disposal/incinerator) "aPy" = ( -/obj/structure/sign/fire, +/obj/structure/sign/warning/fire, /obj/machinery/atmospherics/pipe/simple/general/visible{ dir = 4 }, @@ -20373,7 +20298,7 @@ id = "justicechamber"; name = "Justice Chamber Blast door" }, -/obj/structure/sign/electricshock{ +/obj/structure/sign/warning/electricshock{ pixel_x = 32 }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, @@ -20819,10 +20744,6 @@ /obj/machinery/holopad, /turf/open/floor/carpet, /area/crew_quarters/bar/atrium) -"aSb" = ( -/obj/effect/landmark/lightsout, -/turf/open/floor/plasteel/redyellow, -/area/crew_quarters/bar/atrium) "aSc" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/public/glass{ @@ -21385,7 +21306,6 @@ /obj/machinery/atmospherics/pipe/simple/yellow/visible{ dir = 4 }, -/obj/effect/landmark/lightsout, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel/neutral, /area/engine/atmos) @@ -22484,7 +22404,7 @@ pixel_y = -3 }, /obj/item/lipstick/random, -/obj/structure/sign/nosmoking_2{ +/obj/structure/sign/warning/nosmoking{ pixel_y = -32 }, /turf/open/floor/plasteel/cafeteria, @@ -23148,7 +23068,7 @@ }, /area/security/execution/education) "aWs" = ( -/obj/structure/sign/securearea{ +/obj/structure/sign/warning/securearea{ pixel_x = 32 }, /obj/effect/decal/cleanable/dirt, @@ -23286,7 +23206,7 @@ /turf/open/floor/plasteel, /area/engine/atmos) "aWJ" = ( -/obj/structure/sign/nosmoking_2, +/obj/structure/sign/warning/nosmoking, /turf/closed/wall, /area/engine/atmos) "aWK" = ( @@ -23778,7 +23698,7 @@ icon_state = "0-2" }, /obj/effect/spawner/structure/window/reinforced, -/obj/structure/sign/bluecross_2, +/obj/structure/sign/departments/medbay/alt, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plating, /area/security/prison) @@ -24044,7 +23964,7 @@ dir = 10 }, /obj/effect/decal/cleanable/dirt, -/obj/structure/sign/securearea{ +/obj/structure/sign/warning/securearea{ pixel_x = 32 }, /obj/machinery/light/small{ @@ -24196,7 +24116,6 @@ /obj/structure/cable/white{ icon_state = "2-8" }, -/obj/effect/landmark/lightsout, /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 4 }, @@ -25479,18 +25398,6 @@ dir = 1 }, /area/security/prison) -"bbj" = ( -/obj/structure/cable/white{ - icon_state = "1-2" - }, -/obj/effect/landmark/lightsout, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/turf/open/floor/plasteel/red/corner{ - dir = 1 - }, -/area/security/prison) "bbk" = ( /obj/structure/cable/white, /obj/machinery/power/apc/highcap/five_k{ @@ -25529,7 +25436,7 @@ /area/security/prison) "bbn" = ( /obj/item/twohanded/required/kirbyplants/random, -/obj/structure/sign/pods{ +/obj/structure/sign/warning/pods{ dir = 8; pixel_y = -32 }, @@ -25550,7 +25457,7 @@ /area/security/prison) "bbp" = ( /obj/machinery/light/small, -/obj/structure/sign/securearea{ +/obj/structure/sign/warning/securearea{ pixel_y = -32 }, /obj/effect/decal/cleanable/dirt, @@ -25615,7 +25522,8 @@ id = "pod3"; name = "escape pod 3"; port_direction = 2; - preferred_direction = 4 + preferred_direction = 4; + timid = 0 }, /obj/effect/turf_decal/stripes/end{ dir = 8 @@ -25676,7 +25584,7 @@ /area/space/nearstation) "bbA" = ( /obj/machinery/atmospherics/pipe/simple/cyan/visible, -/obj/structure/sign/securearea{ +/obj/structure/sign/warning/securearea{ pixel_x = -32 }, /obj/machinery/light/small{ @@ -26921,7 +26829,7 @@ icon_state = "0-8" }, /obj/effect/spawner/structure/window/reinforced, -/obj/structure/sign/vacuum, +/obj/structure/sign/warning/vacuum, /turf/open/floor/plating, /area/quartermaster/miningoffice) "bel" = ( @@ -26977,7 +26885,7 @@ icon_state = "1-2" }, /obj/effect/decal/cleanable/dirt, -/obj/structure/sign/pods{ +/obj/structure/sign/warning/pods{ pixel_x = -32 }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, @@ -27108,7 +27016,7 @@ /turf/open/floor/plasteel, /area/engine/atmos) "beE" = ( -/obj/structure/sign/atmosplaque, +/obj/structure/sign/plaques/atmos, /turf/closed/wall, /area/engine/atmos) "beF" = ( @@ -27145,7 +27053,7 @@ }, /area/engine/atmos) "beJ" = ( -/obj/structure/sign/securearea{ +/obj/structure/sign/warning/securearea{ pixel_x = 32 }, /obj/machinery/light/small{ @@ -27497,7 +27405,7 @@ /area/quartermaster/miningoffice) "bfG" = ( /obj/effect/spawner/structure/window/reinforced, -/obj/structure/sign/pods{ +/obj/structure/sign/warning/pods{ name = "MINING POD" }, /turf/open/floor/plating, @@ -27546,7 +27454,7 @@ /obj/structure/cable/white{ icon_state = "2-4" }, -/obj/structure/sign/securearea{ +/obj/structure/sign/warning/securearea{ pixel_x = -32 }, /obj/machinery/light/small{ @@ -27795,7 +27703,7 @@ /turf/open/floor/plasteel, /area/maintenance/port/fore) "bgk" = ( -/obj/structure/sign/botany, +/obj/structure/sign/departments/botany, /turf/closed/wall, /area/hydroponics) "bgl" = ( @@ -28011,7 +27919,6 @@ /area/quartermaster/miningoffice) "bgJ" = ( /obj/machinery/holopad, -/obj/effect/landmark/lightsout, /obj/machinery/atmospherics/pipe/manifold/supply/hidden, /obj/effect/turf_decal/bot, /turf/open/floor/plasteel, @@ -28115,18 +28022,17 @@ /turf/open/floor/plasteel, /area/quartermaster/miningoffice) "bgU" = ( -/obj/machinery/door/airlock/shuttle{ - name = "Mining Shuttle Airlock"; - req_access_txt = "0" +/obj/docking_port/stationary{ + dir = 4; + dwidth = 3; + height = 5; + id = "mining_home"; + name = "mining shuttle bay"; + width = 7; + roundstart_template = /datum/map_template/shuttle/mining/delta }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/turf/open/floor/plasteel/white, -/area/shuttle/mining) +/turf/open/space/basic, +/area/space) "bgV" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/stripes/line{ @@ -28135,44 +28041,14 @@ /turf/open/floor/plasteel, /area/shuttle/mining) "bgW" = ( -/turf/open/floor/plasteel/neutral, -/area/shuttle/mining) +/turf/open/space/basic, +/area/space) "bgX" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 }, /turf/open/floor/plasteel, /area/shuttle/mining) -"bgY" = ( -/obj/docking_port/mobile{ - dir = 8; - dwidth = 3; - height = 5; - id = "mining"; - name = "mining shuttle"; - port_direction = 4; - width = 7 - }, -/obj/docking_port/stationary{ - dir = 8; - dwidth = 3; - height = 5; - id = "mining_home"; - name = "mining shuttle bay"; - width = 7 - }, -/obj/machinery/door/airlock/shuttle{ - name = "Mining Shuttle Airlock"; - req_access_txt = "0" - }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/turf/open/floor/plasteel/white, -/area/shuttle/mining) "bgZ" = ( /turf/closed/wall/r_wall, /area/security/brig) @@ -28234,7 +28110,7 @@ "bhf" = ( /obj/machinery/atmospherics/pipe/simple/cyan/visible, /obj/effect/decal/cleanable/dirt, -/obj/structure/sign/securearea{ +/obj/structure/sign/warning/securearea{ pixel_x = -32 }, /obj/machinery/light/small{ @@ -30702,7 +30578,7 @@ "bmg" = ( /obj/structure/cable/white, /obj/effect/spawner/structure/window/reinforced, -/obj/structure/sign/bluecross_2, +/obj/structure/sign/departments/medbay/alt, /turf/open/floor/plating, /area/security/brig) "bmh" = ( @@ -31821,7 +31697,7 @@ /area/engine/atmos) "boy" = ( /obj/machinery/hydroponics/constructable, -/obj/structure/sign/botany{ +/obj/structure/sign/departments/botany{ pixel_x = -32 }, /obj/effect/turf_decal/delivery, @@ -32181,7 +32057,6 @@ /obj/structure/cable/white{ icon_state = "1-2" }, -/obj/effect/landmark/lightsout, /turf/open/floor/plasteel/neutral, /area/security/brig) "bpl" = ( @@ -33027,7 +32902,6 @@ /turf/open/floor/plasteel, /area/hallway/primary/central) "bqP" = ( -/obj/effect/landmark/lightsout, /obj/structure/cable/white{ icon_state = "4-8" }, @@ -33169,7 +33043,7 @@ /obj/machinery/light{ dir = 8 }, -/obj/structure/sign/electricshock{ +/obj/structure/sign/warning/electricshock{ pixel_x = -32 }, /obj/effect/turf_decal/stripes/line{ @@ -33779,7 +33653,7 @@ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/structure/sign/nosmoking_2, +/obj/structure/sign/warning/nosmoking, /turf/closed/wall/r_wall, /area/engine/atmos) "bsp" = ( @@ -34188,7 +34062,7 @@ icon_state = "4-8" }, /obj/effect/spawner/structure/window/reinforced, -/obj/structure/sign/vacuum, +/obj/structure/sign/warning/vacuum, /turf/open/floor/plating, /area/security/execution/transfer) "btc" = ( @@ -35260,7 +35134,7 @@ /obj/structure/extinguisher_cabinet{ pixel_x = -26 }, -/obj/structure/sign/nosmoking_2{ +/obj/structure/sign/warning/nosmoking{ pixel_y = -32 }, /turf/open/floor/plasteel/arrival, @@ -35450,7 +35324,7 @@ }, /area/hallway/primary/port) "bvv" = ( -/obj/structure/sign/electricshock, +/obj/structure/sign/warning/electricshock, /turf/closed/wall/r_wall, /area/storage/tech) "bvw" = ( @@ -35735,7 +35609,7 @@ /turf/open/floor/plasteel, /area/security/main) "bwh" = ( -/obj/structure/sign/goldenplaque{ +/obj/structure/sign/plaques/golden{ pixel_y = -32 }, /turf/open/floor/plasteel/red/corner, @@ -35812,7 +35686,7 @@ /obj/structure/cable/white{ icon_state = "0-8" }, -/obj/structure/sign/electricshock{ +/obj/structure/sign/warning/electricshock{ pixel_y = 32 }, /obj/machinery/camera/motion{ @@ -35828,7 +35702,7 @@ icon_state = "2-8" }, /obj/item/twohanded/required/kirbyplants/random, -/obj/structure/sign/nosmoking_2{ +/obj/structure/sign/warning/nosmoking{ pixel_y = 32 }, /obj/effect/turf_decal/stripes/line, @@ -35917,7 +35791,7 @@ /turf/closed/wall/r_wall, /area/engine/atmos) "bwz" = ( -/obj/structure/sign/securearea, +/obj/structure/sign/warning/securearea, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/closed/wall/r_wall, /area/engine/atmos) @@ -36923,10 +36797,10 @@ /obj/structure/cable/white{ icon_state = "4-8" }, -/obj/structure/sign/electricshock{ +/obj/structure/sign/warning/electricshock{ pixel_y = -32 }, -/obj/structure/sign/securearea{ +/obj/structure/sign/warning/securearea{ pixel_y = 32 }, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ @@ -37284,7 +37158,7 @@ }, /obj/item/crowbar/red, /obj/item/wrench, -/obj/structure/sign/nosmoking_2{ +/obj/structure/sign/warning/nosmoking{ pixel_y = 32 }, /obj/effect/turf_decal/bot, @@ -37370,7 +37244,7 @@ /turf/open/floor/plasteel/redyellow, /area/engine/break_room) "bzq" = ( -/obj/structure/sign/nosmoking_2, +/obj/structure/sign/warning/nosmoking, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/closed/wall/r_wall, /area/engine/break_room) @@ -37393,7 +37267,7 @@ /turf/open/floor/plasteel, /area/engine/break_room) "bzs" = ( -/obj/structure/sign/securearea, +/obj/structure/sign/warning/securearea, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/closed/wall/r_wall, /area/engine/break_room) @@ -37843,12 +37717,8 @@ /turf/open/floor/plasteel, /area/shuttle/labor) "bAa" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/stripes/end{ - dir = 8 - }, -/turf/open/floor/plasteel, -/area/shuttle/labor) +/turf/open/space/basic, +/area/space) "bAb" = ( /obj/effect/turf_decal/stripes/line{ dir = 2 @@ -37856,35 +37726,17 @@ /turf/open/floor/plasteel, /area/shuttle/labor) "bAc" = ( -/obj/machinery/door/airlock/shuttle{ - id_tag = "prisonshuttle"; - name = "Labor Shuttle Airlock" - }, -/obj/docking_port/mobile{ - dir = 8; - dwidth = 2; - height = 5; - id = "laborcamp"; - name = "labor camp shuttle"; - port_direction = 4; - width = 9 - }, /obj/docking_port/stationary{ dir = 8; dwidth = 2; height = 5; id = "laborcamp_home"; name = "fore bay 1"; - width = 9 + width = 9; + roundstart_template = /datum/map_template/shuttle/labour/delta }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/turf/open/floor/plasteel/white, -/area/shuttle/labor) +/turf/open/space/basic, +/area/space) "bAd" = ( /obj/machinery/door/airlock/external{ cyclelinkeddir = 4; @@ -37899,11 +37751,6 @@ }, /turf/open/floor/plasteel, /area/security/execution/transfer) -"bAe" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/delivery, -/turf/open/floor/plasteel, -/area/security/execution/transfer) "bAf" = ( /obj/machinery/door/airlock/external{ cyclelinkeddir = 8; @@ -38200,7 +38047,7 @@ icon_state = "0-2" }, /obj/effect/spawner/structure/window/reinforced, -/obj/structure/sign/electricshock{ +/obj/structure/sign/warning/electricshock{ pixel_y = 32 }, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ @@ -39138,7 +38985,7 @@ /turf/open/floor/plasteel, /area/engine/gravity_generator) "bCF" = ( -/obj/structure/sign/radiation, +/obj/structure/sign/warning/radiation, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -39664,7 +39511,6 @@ /obj/structure/cable/white{ icon_state = "1-2" }, -/obj/effect/landmark/lightsout, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -40308,7 +40154,7 @@ /obj/machinery/light{ dir = 8 }, -/obj/structure/sign/radiation{ +/obj/structure/sign/warning/radiation{ pixel_x = -32 }, /turf/open/floor/plasteel/vault{ @@ -41087,7 +40933,7 @@ }, /obj/effect/spawner/structure/window/reinforced, /obj/structure/disposalpipe/segment, -/obj/structure/sign/electricshock{ +/obj/structure/sign/warning/electricshock{ pixel_x = -32 }, /turf/open/floor/plating, @@ -41303,7 +41149,7 @@ /turf/open/floor/plasteel, /area/engine/gravity_generator) "bGc" = ( -/obj/structure/sign/radiation, +/obj/structure/sign/warning/radiation, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -42129,7 +41975,7 @@ "bHO" = ( /obj/structure/cable/white, /obj/effect/spawner/structure/window/reinforced, -/obj/structure/sign/electricshock{ +/obj/structure/sign/warning/electricshock{ pixel_y = -32 }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ @@ -42337,13 +42183,6 @@ /obj/effect/turf_decal/delivery, /turf/open/floor/plasteel, /area/engine/break_room) -"bIj" = ( -/obj/structure/cable/white{ - icon_state = "4-8" - }, -/obj/effect/landmark/lightsout, -/turf/open/floor/plasteel/neutral, -/area/engine/break_room) "bIk" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/cable/white{ @@ -42521,10 +42360,6 @@ /obj/effect/turf_decal/delivery, /turf/open/floor/plasteel, /area/storage/primary) -"bIy" = ( -/obj/effect/landmark/lightsout, -/turf/open/floor/plasteel/neutral, -/area/storage/primary) "bIz" = ( /obj/structure/table/reinforced, /obj/item/stack/packageWrap, @@ -43363,7 +43198,7 @@ }, /area/engine/break_room) "bKh" = ( -/obj/structure/sign/securearea, +/obj/structure/sign/warning/securearea, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -44323,7 +44158,7 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, -/obj/structure/sign/electricshock, +/obj/structure/sign/warning/electricshock, /turf/closed/wall/r_wall, /area/security/checkpoint/engineering) "bMf" = ( @@ -44836,10 +44671,7 @@ }, /area/hallway/primary/starboard) "bNi" = ( -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'HIGH VOLTAGE'"; - icon_state = "shock"; - name = "HIGH VOLTAGE"; +/obj/structure/sign/warning/electricshock{ pixel_x = 32 }, /obj/machinery/light{ @@ -45835,10 +45667,6 @@ dir = 5 }, /area/security/detectives_office) -"bPn" = ( -/obj/effect/landmark/lightsout, -/turf/open/floor/plasteel/neutral, -/area/hallway/primary/starboard) "bPo" = ( /obj/structure/closet/secure_closet/brig{ id = "brig2"; @@ -46023,7 +45851,7 @@ /turf/closed/wall/r_wall, /area/ai_monitored/turret_protected/aisat_interior) "bPH" = ( -/obj/structure/sign/kiddieplaque, +/obj/structure/sign/plaques/kiddie, /turf/closed/wall/r_wall, /area/ai_monitored/turret_protected/aisat_interior) "bPI" = ( @@ -46059,7 +45887,7 @@ /area/space/nearstation) "bPL" = ( /obj/machinery/light/small, -/obj/structure/sign/vacuum{ +/obj/structure/sign/warning/vacuum{ pixel_x = -32 }, /turf/open/floor/plasteel/vault{ @@ -46174,7 +46002,7 @@ }, /area/crew_quarters/heads/chief) "bPW" = ( -/obj/structure/sign/electricshock, +/obj/structure/sign/warning/electricshock, /turf/closed/wall/r_wall, /area/crew_quarters/heads/chief) "bPX" = ( @@ -46182,7 +46010,7 @@ /turf/closed/wall/r_wall, /area/crew_quarters/heads/chief) "bPY" = ( -/obj/structure/sign/nosmoking_2, +/obj/structure/sign/warning/nosmoking, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/closed/wall, /area/engine/break_room) @@ -46205,7 +46033,7 @@ /turf/open/floor/plasteel, /area/engine/break_room) "bQa" = ( -/obj/structure/sign/securearea, +/obj/structure/sign/warning/securearea, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/closed/wall, /area/engine/break_room) @@ -46569,7 +46397,7 @@ /turf/open/floor/wood, /area/crew_quarters/heads/captain) "bQW" = ( -/obj/structure/sign/goldenplaque/captain{ +/obj/structure/sign/plaques/golden/captain{ pixel_x = 32 }, /turf/open/floor/wood, @@ -46916,7 +46744,7 @@ /obj/structure/cable/yellow{ icon_state = "0-2" }, -/obj/structure/sign/electricshock{ +/obj/structure/sign/warning/electricshock{ pixel_y = 32 }, /obj/effect/turf_decal/stripes/line{ @@ -47015,7 +46843,7 @@ /turf/open/space, /area/space/nearstation) "bRP" = ( -/obj/structure/sign/vacuum, +/obj/structure/sign/warning/vacuum, /turf/closed/wall, /area/space/nearstation) "bRQ" = ( @@ -48930,10 +48758,7 @@ /turf/open/floor/plasteel/neutral, /area/hallway/primary/starboard) "bVj" = ( -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'HIGH VOLTAGE'"; - icon_state = "shock"; - name = "HIGH VOLTAGE"; +/obj/structure/sign/warning/electricshock{ pixel_x = 32 }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ @@ -49959,7 +49784,6 @@ /obj/structure/cable/white{ icon_state = "1-2" }, -/obj/effect/landmark/lightsout, /obj/structure/cable/white{ icon_state = "1-4" }, @@ -50415,7 +50239,7 @@ }, /area/aisat) "bXU" = ( -/obj/structure/sign/nosmoking_2, +/obj/structure/sign/warning/nosmoking, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -50606,7 +50430,7 @@ icon_state = "curved0"; dir = 4 }, -/obj/structure/sign/securearea{ +/obj/structure/sign/warning/securearea{ pixel_y = -32 }, /turf/open/floor/plasteel/vault{ @@ -51733,7 +51557,7 @@ /turf/open/floor/plasteel, /area/engine/engineering) "caw" = ( -/obj/structure/sign/securearea, +/obj/structure/sign/warning/securearea, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/closed/wall, /area/engine/engineering) @@ -51756,7 +51580,7 @@ /turf/open/floor/plasteel, /area/engine/engineering) "cay" = ( -/obj/structure/sign/radiation, +/obj/structure/sign/warning/radiation, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/closed/wall, /area/engine/engineering) @@ -52426,7 +52250,7 @@ /turf/open/floor/plasteel, /area/engine/engineering) "cbV" = ( -/obj/structure/sign/vacuum, +/obj/structure/sign/warning/vacuum, /turf/closed/wall, /area/engine/engineering) "cbW" = ( @@ -52723,11 +52547,6 @@ }, /turf/open/floor/plasteel/neutral, /area/hallway/primary/central) -"ccy" = ( -/obj/effect/landmark/lightsout, -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/turf/open/floor/plasteel/blue/corner, -/area/hallway/primary/central) "ccz" = ( /obj/machinery/status_display, /turf/closed/wall/r_wall, @@ -54096,7 +53915,6 @@ /obj/structure/cable/white{ icon_state = "2-4" }, -/obj/effect/landmark/lightsout, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -54286,7 +54104,7 @@ pixel_x = -3; pixel_y = -3 }, -/obj/structure/sign/electricshock{ +/obj/structure/sign/warning/electricshock{ pixel_x = 32 }, /turf/open/floor/plasteel/vault{ @@ -54306,7 +54124,7 @@ /turf/open/floor/plating/airless, /area/engine/engineering) "cfC" = ( -/obj/structure/sign/vacuum, +/obj/structure/sign/warning/vacuum, /turf/closed/wall/r_wall, /area/engine/engineering) "cfD" = ( @@ -54454,7 +54272,7 @@ /turf/open/floor/plasteel, /area/engine/engineering) "cfQ" = ( -/obj/structure/sign/electricshock{ +/obj/structure/sign/warning/electricshock{ pixel_x = 32 }, /obj/item/device/radio/intercom{ @@ -54504,7 +54322,7 @@ dir = 8 }, /obj/item/twohanded/required/kirbyplants/random, -/obj/structure/sign/kiddieplaque/library{ +/obj/structure/sign/plaques/kiddie/library{ pixel_x = -32 }, /turf/open/floor/wood, @@ -54529,7 +54347,7 @@ /turf/open/floor/wood, /area/library) "cfZ" = ( -/obj/structure/sign/nosmoking_2, +/obj/structure/sign/warning/nosmoking, /turf/closed/wall, /area/library) "cga" = ( @@ -54542,7 +54360,7 @@ }, /area/library) "cgb" = ( -/obj/structure/sign/kiddieplaque/library{ +/obj/structure/sign/plaques/kiddie/library{ pixel_x = -32 }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, @@ -54551,7 +54369,7 @@ }, /area/hallway/primary/central) "cgc" = ( -/obj/structure/sign/electricshock, +/obj/structure/sign/warning/electricshock, /turf/closed/wall/r_wall, /area/crew_quarters/heads/hop) "cgd" = ( @@ -55382,7 +55200,7 @@ /obj/machinery/computer/atmos_alert{ dir = 1 }, -/obj/structure/sign/nosmoking_1{ +/obj/structure/sign/warning/nosmoking/circle{ pixel_x = 28; pixel_y = -28 }, @@ -56401,12 +56219,6 @@ dir = 5 }, /area/security/courtroom) -"cjW" = ( -/obj/effect/landmark/lightsout, -/turf/open/floor/plasteel/vault{ - dir = 5 - }, -/area/security/courtroom) "cjX" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/public/glass{ @@ -56828,13 +56640,6 @@ }, /turf/open/floor/plasteel/grimy, /area/library) -"ckS" = ( -/obj/effect/landmark/lightsout, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, -/turf/open/floor/plasteel/grimy, -/area/library) "ckT" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 1 @@ -56887,7 +56692,7 @@ }, /area/tcommsat/server) "cla" = ( -/obj/structure/sign/electricshock{ +/obj/structure/sign/warning/electricshock{ pixel_y = -32 }, /turf/open/floor/plasteel/vault/telecomms{ @@ -56929,7 +56734,7 @@ /obj/machinery/light{ dir = 8 }, -/obj/structure/sign/securearea{ +/obj/structure/sign/warning/securearea{ pixel_x = -32 }, /turf/open/floor/plasteel/neutral/corner{ @@ -57189,7 +56994,7 @@ /turf/open/floor/plating, /area/security/range) "clG" = ( -/obj/structure/sign/securearea{ +/obj/structure/sign/warning/securearea{ pixel_y = 32 }, /obj/machinery/light{ @@ -58112,7 +57917,7 @@ /area/ai_monitored/turret_protected/ai_upload) "cnv" = ( /obj/machinery/porta_turret/ai, -/obj/structure/sign/electricshock{ +/obj/structure/sign/warning/electricshock{ pixel_y = -32 }, /turf/open/floor/plasteel/vault{ @@ -58190,7 +57995,7 @@ /turf/open/floor/plating/airless, /area/space/nearstation) "cnC" = ( -/obj/structure/sign/radiation, +/obj/structure/sign/warning/radiation, /turf/closed/wall/r_wall, /area/engine/engineering) "cnD" = ( @@ -58803,7 +58608,7 @@ /turf/open/floor/plating, /area/security/range) "coS" = ( -/obj/structure/sign/securearea{ +/obj/structure/sign/warning/securearea{ pixel_y = -32 }, /obj/machinery/light, @@ -58932,7 +58737,7 @@ /turf/open/floor/plasteel, /area/engine/engineering) "cph" = ( -/obj/structure/sign/securearea, +/obj/structure/sign/warning/securearea, /turf/closed/wall/r_wall, /area/engine/engineering) "cpi" = ( @@ -58960,7 +58765,7 @@ /obj/machinery/shieldgen, /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, -/obj/structure/sign/nosmoking_2{ +/obj/structure/sign/warning/nosmoking{ pixel_y = 32 }, /obj/effect/turf_decal/bot, @@ -59614,7 +59419,7 @@ /turf/open/floor/plasteel, /area/maintenance/port) "cqK" = ( -/obj/structure/sign/securearea, +/obj/structure/sign/warning/securearea, /turf/closed/wall/r_wall, /area/maintenance/port) "cqL" = ( @@ -59715,7 +59520,7 @@ /turf/open/floor/plating, /area/hallway/secondary/command) "cra" = ( -/obj/structure/sign/securearea, +/obj/structure/sign/warning/securearea, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/closed/wall/r_wall, /area/hallway/secondary/command) @@ -59965,7 +59770,7 @@ /turf/open/floor/plasteel, /area/maintenance/starboard) "crD" = ( -/obj/structure/sign/electricshock{ +/obj/structure/sign/warning/electricshock{ pixel_x = -32; pixel_y = 32 }, @@ -60169,7 +59974,7 @@ /obj/machinery/light/small{ dir = 4 }, -/obj/structure/sign/fire{ +/obj/structure/sign/warning/fire{ pixel_x = 32 }, /obj/machinery/atmospherics/components/unary/vent_scrubber/on{ @@ -60365,7 +60170,7 @@ }, /area/hallway/secondary/command) "cst" = ( -/obj/structure/sign/electricshock{ +/obj/structure/sign/warning/electricshock{ pixel_y = 32 }, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ @@ -60468,7 +60273,7 @@ }, /area/hallway/secondary/command) "csC" = ( -/obj/structure/sign/electricshock{ +/obj/structure/sign/warning/electricshock{ pixel_y = 32 }, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ @@ -61235,7 +61040,7 @@ /obj/structure/cable/white{ icon_state = "4-8" }, -/obj/structure/sign/electricshock{ +/obj/structure/sign/warning/electricshock{ pixel_x = -32; pixel_y = -32 }, @@ -61321,7 +61126,7 @@ /obj/structure/cable/white{ icon_state = "4-8" }, -/obj/structure/sign/electricshock{ +/obj/structure/sign/warning/electricshock{ pixel_x = 32; pixel_y = -32 }, @@ -61904,7 +61709,6 @@ icon_state = "1-2" }, /obj/machinery/holopad, -/obj/effect/landmark/lightsout, /obj/effect/turf_decal/bot, /turf/open/floor/plasteel, /area/hallway/secondary/command) @@ -62682,10 +62486,6 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel/neutral, /area/hallway/primary/central) -"cxe" = ( -/obj/effect/landmark/lightsout, -/turf/open/floor/plasteel/neutral, -/area/hallway/primary/central) "cxf" = ( /obj/machinery/door/firedoor, /obj/effect/turf_decal/stripes/line{ @@ -62889,17 +62689,6 @@ }, /turf/open/floor/plating/airless, /area/space/nearstation) -"cxC" = ( -/obj/machinery/power/rad_collector/anchored, -/obj/machinery/power/rad_collector/anchored, -/obj/structure/cable{ - icon_state = "0-4" - }, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/turf/open/floor/plating, -/area/engine/engineering) "cxD" = ( /obj/structure/rack, /obj/item/crowbar, @@ -62953,7 +62742,7 @@ "cxI" = ( /obj/item/twohanded/required/kirbyplants/random, /obj/effect/decal/cleanable/dirt, -/obj/structure/sign/electricshock{ +/obj/structure/sign/warning/electricshock{ pixel_y = 32 }, /obj/effect/turf_decal/bot, @@ -63556,16 +63345,6 @@ }, /turf/open/floor/plasteel/neutral, /area/crew_quarters/locker) -"cyT" = ( -/obj/effect/landmark/lightsout, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ - dir = 1 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/plasteel/neutral, -/area/crew_quarters/locker) "cyU" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 9 @@ -63853,7 +63632,7 @@ dir = 8 }, /obj/machinery/disposal/bin, -/obj/structure/sign/kiddieplaque/library{ +/obj/structure/sign/plaques/kiddie/library{ pixel_x = -32 }, /obj/structure/disposalpipe/trunk{ @@ -64518,7 +64297,7 @@ }, /obj/item/clothing/mask/breath, /obj/item/clothing/mask/breath, -/obj/structure/sign/nosmoking_2{ +/obj/structure/sign/warning/nosmoking{ pixel_y = 32 }, /obj/effect/decal/cleanable/dirt, @@ -65317,7 +65096,7 @@ /area/engine/storage) "cCB" = ( /obj/effect/decal/cleanable/dirt, -/obj/structure/sign/nosmoking_2{ +/obj/structure/sign/warning/nosmoking{ pixel_x = 32 }, /obj/structure/tank_dispenser, @@ -66031,7 +65810,6 @@ /turf/open/floor/plasteel, /area/engine/engineering) "cEb" = ( -/obj/effect/landmark/lightsout, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -67328,13 +67106,6 @@ }, /turf/open/floor/plasteel, /area/gateway) -"cGG" = ( -/obj/structure/cable/white{ - icon_state = "1-2" - }, -/obj/effect/landmark/lightsout, -/turf/open/floor/plasteel/neutral, -/area/hallway/primary/central) "cGH" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/mirror{ @@ -67660,7 +67431,7 @@ "cHq" = ( /obj/item/twohanded/required/kirbyplants/random, /obj/effect/decal/cleanable/dirt, -/obj/structure/sign/electricshock{ +/obj/structure/sign/warning/electricshock{ pixel_y = -32 }, /obj/effect/turf_decal/bot, @@ -67881,7 +67652,7 @@ /turf/open/floor/plating, /area/bridge/showroom/corporate) "cHN" = ( -/obj/structure/sign/electricshock, +/obj/structure/sign/warning/electricshock, /turf/closed/wall/r_wall, /area/bridge/showroom/corporate) "cHO" = ( @@ -68233,16 +68004,6 @@ }, /turf/closed/wall, /area/maintenance/port) -"cIz" = ( -/obj/effect/landmark/lightsout, -/obj/structure/cable/white{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/turf/open/floor/plasteel/neutral, -/area/hallway/primary/central) "cIA" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden, /turf/open/floor/plasteel/neutral/corner{ @@ -69736,7 +69497,6 @@ /turf/open/floor/plasteel/neutral, /area/crew_quarters/dorms) "cLd" = ( -/obj/effect/landmark/lightsout, /turf/open/floor/plasteel/neutral, /area/crew_quarters/dorms) "cLe" = ( @@ -69755,9 +69515,6 @@ }, /turf/open/floor/plasteel/neutral, /area/crew_quarters/dorms) -"cLh" = ( -/turf/open/floor/plasteel/neutral, -/area/crew_quarters/dorms) "cLi" = ( /obj/item/twohanded/required/kirbyplants/random, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, @@ -69798,7 +69555,7 @@ }, /area/crew_quarters/fitness/recreation) "cLn" = ( -/obj/structure/sign/nosmoking_2, +/obj/structure/sign/warning/nosmoking, /turf/closed/wall, /area/crew_quarters/fitness/recreation) "cLo" = ( @@ -70465,7 +70222,6 @@ /obj/structure/cable/white{ icon_state = "1-2" }, -/obj/effect/landmark/lightsout, /obj/machinery/atmospherics/pipe/manifold4w/scrubbers/hidden, /obj/structure/disposalpipe/junction/flip{ dir = 1 @@ -70530,7 +70286,7 @@ /turf/closed/wall, /area/maintenance/department/electrical) "cMP" = ( -/obj/structure/sign/securearea, +/obj/structure/sign/warning/securearea, /turf/closed/wall, /area/maintenance/department/electrical) "cMQ" = ( @@ -70552,7 +70308,7 @@ /turf/closed/wall, /area/maintenance/department/electrical) "cMS" = ( -/obj/structure/sign/electricshock, +/obj/structure/sign/warning/electricshock, /turf/closed/wall, /area/maintenance/department/electrical) "cMT" = ( @@ -70728,7 +70484,7 @@ /turf/open/floor/plasteel, /area/hallway/primary/central) "cNo" = ( -/obj/structure/sign/science, +/obj/structure/sign/departments/science, /turf/closed/wall, /area/hallway/primary/central) "cNp" = ( @@ -70864,7 +70620,7 @@ /turf/open/floor/plasteel, /area/medical/medbay/central) "cND" = ( -/obj/structure/sign/bluecross_2, +/obj/structure/sign/departments/medbay/alt, /turf/closed/wall, /area/medical/medbay/central) "cNE" = ( @@ -71542,7 +71298,7 @@ }, /area/science/research) "cPi" = ( -/obj/structure/sign/science, +/obj/structure/sign/departments/science, /turf/closed/wall, /area/science/research) "cPj" = ( @@ -72996,13 +72752,6 @@ }, /turf/open/floor/plasteel/whitepurple/corner, /area/science/research) -"cSt" = ( -/obj/effect/landmark/lightsout, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/turf/open/floor/plasteel/whitepurple/corner, -/area/science/research) "cSu" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 @@ -73541,7 +73290,7 @@ /turf/open/floor/circuit/green, /area/science/xenobiology) "cTA" = ( -/obj/structure/sign/electricshock, +/obj/structure/sign/warning/electricshock, /turf/closed/wall/r_wall, /area/science/xenobiology) "cTB" = ( @@ -73590,7 +73339,7 @@ /turf/open/floor/plasteel, /area/science/xenobiology) "cTG" = ( -/obj/structure/sign/xenobio, +/obj/structure/sign/departments/xenobio, /turf/closed/wall, /area/science/xenobiology) "cTH" = ( @@ -73630,7 +73379,7 @@ /turf/open/floor/plasteel, /area/science/xenobiology) "cTK" = ( -/obj/structure/sign/electricshock, +/obj/structure/sign/warning/electricshock, /turf/closed/wall, /area/science/xenobiology) "cTL" = ( @@ -73687,7 +73436,7 @@ /turf/open/floor/plasteel, /area/science/xenobiology) "cTP" = ( -/obj/structure/sign/biohazard, +/obj/structure/sign/warning/biohazard, /turf/closed/wall, /area/science/xenobiology) "cTQ" = ( @@ -73928,7 +73677,6 @@ }, /area/hallway/primary/aft) "cUp" = ( -/obj/effect/landmark/lightsout, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -74013,13 +73761,6 @@ }, /turf/open/floor/plasteel/cmo, /area/medical/medbay/central) -"cUy" = ( -/obj/effect/landmark/lightsout, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, -/turf/open/floor/plasteel/cmo, -/area/medical/medbay/central) "cUz" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 @@ -75109,7 +74850,7 @@ /obj/machinery/atmospherics/components/binary/valve{ dir = 1 }, -/obj/structure/sign/nosmoking_2{ +/obj/structure/sign/warning/nosmoking{ pixel_x = -32 }, /obj/effect/turf_decal/stripes/line{ @@ -75187,7 +74928,7 @@ /turf/open/floor/plasteel, /area/maintenance/department/electrical) "cWT" = ( -/obj/structure/sign/nosmoking_2{ +/obj/structure/sign/warning/nosmoking{ pixel_x = 32 }, /obj/effect/turf_decal/delivery, @@ -75326,7 +75067,6 @@ /obj/structure/cable/white{ icon_state = "4-8" }, -/obj/effect/landmark/lightsout, /obj/effect/turf_decal/stripes/line{ dir = 2 }, @@ -75645,7 +75385,7 @@ /area/medical/medbay/central) "cXM" = ( /obj/structure/bed/roller, -/obj/structure/sign/chemistry{ +/obj/structure/sign/departments/chemistry{ pixel_y = -32 }, /obj/machinery/light, @@ -75724,7 +75464,7 @@ }, /area/medical/medbay/central) "cXX" = ( -/obj/structure/sign/bluecross_2{ +/obj/structure/sign/departments/medbay/alt{ pixel_x = 32 }, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ @@ -76301,7 +76041,7 @@ /turf/open/floor/plasteel, /area/science/research) "cZi" = ( -/obj/structure/sign/science, +/obj/structure/sign/departments/science, /turf/closed/wall/r_wall, /area/science/research) "cZj" = ( @@ -76322,11 +76062,11 @@ /turf/open/floor/plasteel, /area/science/research) "cZk" = ( -/obj/structure/sign/securearea, +/obj/structure/sign/warning/securearea, /turf/closed/wall/r_wall, /area/science/research) "cZl" = ( -/obj/structure/sign/science, +/obj/structure/sign/departments/science, /turf/closed/wall, /area/science/lab) "cZm" = ( @@ -76868,7 +76608,7 @@ }, /area/maintenance/port) "dao" = ( -/obj/structure/sign/securearea, +/obj/structure/sign/warning/securearea, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/closed/wall, /area/maintenance/department/electrical) @@ -77130,7 +76870,7 @@ /turf/open/floor/plasteel, /area/science/research) "daP" = ( -/obj/structure/sign/nosmoking_2, +/obj/structure/sign/warning/nosmoking, /turf/closed/wall/r_wall, /area/science/lab) "daQ" = ( @@ -78317,7 +78057,7 @@ /obj/item/stack/medical/gauze, /obj/item/stack/medical/bruise_pack, /obj/item/stack/medical/ointment, -/obj/structure/sign/nosmoking_2{ +/obj/structure/sign/warning/nosmoking{ pixel_y = 32 }, /obj/machinery/light/small{ @@ -78923,7 +78663,7 @@ /turf/open/floor/plating, /area/maintenance/starboard/aft) "deN" = ( -/obj/structure/sign/examroom{ +/obj/structure/sign/departments/examroom{ pixel_x = -32 }, /obj/item/twohanded/required/kirbyplants/random, @@ -78952,7 +78692,7 @@ /turf/open/floor/plating, /area/medical/abandoned) "deT" = ( -/obj/structure/sign/bluecross_2, +/obj/structure/sign/departments/medbay/alt, /turf/closed/wall, /area/medical/abandoned) "deU" = ( @@ -79046,7 +78786,7 @@ /turf/open/floor/plating, /area/maintenance/port) "dfc" = ( -/obj/structure/sign/xenobio, +/obj/structure/sign/departments/xenobio, /turf/closed/wall/r_wall, /area/science/xenobiology) "dfd" = ( @@ -79186,7 +78926,7 @@ /turf/open/floor/plasteel, /area/science/research) "dfp" = ( -/obj/structure/sign/securearea, +/obj/structure/sign/warning/securearea, /turf/closed/wall, /area/science/research) "dfq" = ( @@ -79253,7 +78993,7 @@ /turf/open/floor/plasteel/whitepurple/corner, /area/science/lab) "dfv" = ( -/obj/structure/sign/chemistry, +/obj/structure/sign/departments/chemistry, /turf/closed/wall, /area/medical/chemistry) "dfw" = ( @@ -79391,7 +79131,7 @@ /turf/open/floor/plasteel, /area/medical/medbay/central) "dfH" = ( -/obj/structure/sign/examroom, +/obj/structure/sign/departments/examroom, /turf/closed/wall, /area/medical/medbay/central) "dfI" = ( @@ -80678,7 +80418,6 @@ icon_state = "4-8" }, /obj/item/device/radio/beacon, -/obj/effect/landmark/lightsout, /obj/structure/disposalpipe/segment, /turf/open/floor/plasteel/whiteblue, /area/medical/medbay/central) @@ -81122,7 +80861,7 @@ /obj/machinery/light{ dir = 1 }, -/obj/structure/sign/nosmoking_2{ +/obj/structure/sign/warning/nosmoking{ pixel_y = 32 }, /obj/effect/turf_decal/stripes/line, @@ -81406,7 +81145,7 @@ /obj/structure/extinguisher_cabinet{ pixel_y = -32 }, -/obj/structure/sign/nosmoking_2{ +/obj/structure/sign/warning/nosmoking{ pixel_x = -32; pixel_y = -32 }, @@ -81601,7 +81340,7 @@ /turf/open/floor/plasteel/neutral, /area/medical/medbay/central) "dkA" = ( -/obj/structure/sign/bluecross_2{ +/obj/structure/sign/departments/medbay/alt{ pixel_x = 32; pixel_y = -32 }, @@ -81913,13 +81652,6 @@ "dlj" = ( /turf/open/floor/plasteel, /area/science/circuit) -"dlk" = ( -/obj/structure/table, -/obj/item/paper_bin, -/obj/item/pen, -/obj/effect/turf_decal/delivery, -/turf/open/floor/plasteel, -/area/science/research/abandoned) "dll" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 5 @@ -82042,7 +81774,7 @@ /turf/open/floor/plating, /area/science/research) "dlz" = ( -/obj/structure/sign/nosmoking_2, +/obj/structure/sign/warning/nosmoking, /turf/closed/wall, /area/science/research) "dlA" = ( @@ -82099,7 +81831,7 @@ /turf/open/floor/plating, /area/crew_quarters/heads/hor) "dlG" = ( -/obj/structure/sign/securearea, +/obj/structure/sign/warning/securearea, /turf/closed/wall/r_wall, /area/crew_quarters/heads/hor) "dlH" = ( @@ -82246,7 +81978,7 @@ /turf/open/floor/plating, /area/medical/genetics/cloning) "dlX" = ( -/obj/structure/sign/bluecross_2, +/obj/structure/sign/departments/medbay/alt, /turf/closed/wall, /area/medical/genetics/cloning) "dlY" = ( @@ -82400,7 +82132,7 @@ /obj/item/stack/sheet/metal/fifty, /obj/item/stock_parts/cell/super, /obj/item/stock_parts/cell/super, -/obj/structure/sign/science{ +/obj/structure/sign/departments/science{ pixel_x = -32 }, /turf/open/floor/plasteel/white/side{ @@ -82442,7 +82174,6 @@ /area/science/circuit) "dmw" = ( /obj/structure/disposalpipe/segment, -/obj/effect/landmark/lightsout, /turf/open/floor/plasteel/white/side{ dir = 10 }, @@ -82460,13 +82191,6 @@ }, /turf/open/floor/plasteel, /area/science/research/abandoned) -"dmz" = ( -/obj/structure/rack, -/obj/item/storage/toolbox/electrical, -/obj/item/device/multitool, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/science/research/abandoned) "dmA" = ( /obj/effect/landmark/blobstart, /obj/effect/turf_decal/bot, @@ -82785,7 +82509,7 @@ /obj/machinery/light{ dir = 4 }, -/obj/structure/sign/nosmoking_2{ +/obj/structure/sign/warning/nosmoking{ pixel_x = 32 }, /obj/effect/turf_decal/bot, @@ -82853,7 +82577,7 @@ /obj/machinery/light{ dir = 1 }, -/obj/structure/sign/nosmoking_2{ +/obj/structure/sign/warning/nosmoking{ pixel_y = 32 }, /turf/open/floor/plasteel/whitepurple/corner{ @@ -83001,7 +82725,7 @@ /turf/open/floor/plasteel/vault, /area/medical/surgery) "dnF" = ( -/obj/structure/sign/bluecross_2, +/obj/structure/sign/departments/medbay/alt, /turf/closed/wall, /area/medical/surgery) "dnG" = ( @@ -83502,7 +83226,6 @@ /area/science/research) "doF" = ( /obj/machinery/holopad, -/obj/effect/landmark/lightsout, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -84124,16 +83847,6 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/wood, /area/crew_quarters/abandoned_gambling_den) -"dpW" = ( -/obj/structure/table/reinforced, -/obj/item/folder/white, -/obj/item/stock_parts/cell/high, -/obj/item/stack/sheet/glass, -/obj/item/stack/sheet/glass, -/obj/item/stack/sheet/glass, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/science/research/abandoned) "dpX" = ( /obj/structure/chair/office/light{ dir = 8 @@ -84371,7 +84084,7 @@ /turf/open/floor/plasteel, /area/science/explab) "dqs" = ( -/obj/structure/sign/securearea, +/obj/structure/sign/warning/securearea, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -85029,7 +84742,7 @@ }, /area/science/explab) "drK" = ( -/obj/structure/sign/securearea, +/obj/structure/sign/warning/securearea, /turf/closed/wall/r_wall, /area/science/explab) "drL" = ( @@ -85055,7 +84768,7 @@ /turf/closed/wall/r_wall, /area/science/mixing) "drQ" = ( -/obj/structure/sign/fire, +/obj/structure/sign/warning/fire, /turf/closed/wall/r_wall, /area/science/mixing) "drR" = ( @@ -85086,7 +84799,7 @@ /turf/open/floor/plasteel, /area/science/mixing) "drT" = ( -/obj/structure/sign/biohazard, +/obj/structure/sign/warning/biohazard, /turf/closed/wall/r_wall, /area/science/mixing) "drU" = ( @@ -85421,7 +85134,7 @@ /turf/open/floor/plasteel/whiteblue/corner, /area/medical/medbay/central) "dsI" = ( -/obj/structure/sign/nosmoking_2, +/obj/structure/sign/warning/nosmoking, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -85579,25 +85292,6 @@ /obj/item/book/manual/wiki/engineering_hacking, /turf/open/floor/plating, /area/crew_quarters/abandoned_gambling_den) -"dtb" = ( -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/science/research/abandoned) -"dtc" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/door/airlock/maintenance_hatch{ - name = "Maintenance Hatch"; - req_access_txt = "12" - }, -/obj/structure/barricade/wooden, -/obj/effect/turf_decal/stripes/line{ - dir = 2 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/turf/open/floor/plasteel, -/area/science/research/abandoned) "dtd" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/closed/wall, @@ -85880,7 +85574,7 @@ /turf/open/floor/plasteel/whiteblue/corner, /area/medical/medbay/central) "dtJ" = ( -/obj/structure/sign/bluecross_2, +/obj/structure/sign/departments/medbay/alt, /turf/closed/wall/r_wall, /area/crew_quarters/heads/cmo) "dtK" = ( @@ -86292,7 +85986,7 @@ /obj/machinery/light{ dir = 8 }, -/obj/structure/sign/securearea{ +/obj/structure/sign/warning/securearea{ pixel_x = -32 }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, @@ -87276,12 +86970,6 @@ dir = 8 }, /area/hallway/primary/aft) -"dwE" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, -/turf/open/floor/plasteel/neutral, -/area/hallway/primary/aft) "dwF" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ @@ -87628,7 +87316,6 @@ /obj/structure/cable/white{ icon_state = "2-8" }, -/obj/effect/landmark/lightsout, /obj/machinery/atmospherics/components/unary/vent_scrubber/on{ dir = 4 }, @@ -87872,7 +87559,7 @@ /obj/machinery/light{ dir = 8 }, -/obj/structure/sign/nosmoking_2{ +/obj/structure/sign/warning/nosmoking{ pixel_x = -32 }, /obj/machinery/atmospherics/components/unary/portables_connector/visible{ @@ -88017,7 +87704,7 @@ /turf/open/floor/plating, /area/science/robotics/lab) "dye" = ( -/obj/structure/sign/science, +/obj/structure/sign/departments/science, /turf/closed/wall, /area/science/robotics/lab) "dyf" = ( @@ -88728,7 +88415,7 @@ /obj/machinery/atmospherics/components/unary/portables_connector/visible{ dir = 8 }, -/obj/structure/sign/fire{ +/obj/structure/sign/warning/fire{ pixel_x = 32 }, /obj/effect/turf_decal/stripes/line{ @@ -88871,7 +88558,7 @@ /turf/open/floor/plasteel, /area/science/robotics/lab) "dzL" = ( -/obj/structure/sign/science{ +/obj/structure/sign/departments/science{ pixel_x = -32; pixel_y = 32 }, @@ -88882,7 +88569,7 @@ }, /area/hallway/primary/aft) "dzM" = ( -/obj/structure/sign/science{ +/obj/structure/sign/departments/science{ pixel_x = 32; pixel_y = 32 }, @@ -89490,7 +89177,7 @@ dir = 1 }, /obj/machinery/light, -/obj/structure/sign/nosmoking_2{ +/obj/structure/sign/warning/nosmoking{ pixel_y = -32 }, /obj/effect/turf_decal/stripes/end{ @@ -89555,7 +89242,7 @@ id = "geneticslab"; name = "Genetics Lab Shutters" }, -/obj/structure/sign/electricshock{ +/obj/structure/sign/warning/electricshock{ pixel_y = -32 }, /turf/open/floor/plating, @@ -90297,7 +89984,7 @@ /turf/open/floor/plasteel, /area/medical/morgue) "dCA" = ( -/obj/structure/sign/nosmoking_2, +/obj/structure/sign/warning/nosmoking, /turf/closed/wall, /area/medical/morgue) "dCB" = ( @@ -90532,7 +90219,7 @@ /turf/open/floor/plating, /area/maintenance/starboard/aft) "dDb" = ( -/obj/structure/sign/electricshock, +/obj/structure/sign/warning/electricshock, /turf/closed/wall/r_wall, /area/maintenance/solars/starboard/aft) "dDc" = ( @@ -90706,7 +90393,7 @@ /turf/open/floor/plasteel, /area/science/mixing) "dDs" = ( -/obj/structure/sign/fire, +/obj/structure/sign/warning/fire, /turf/closed/wall/r_wall, /area/science/misc_lab/range) "dDt" = ( @@ -91301,7 +90988,7 @@ }, /area/science/server) "dEE" = ( -/obj/structure/sign/securearea, +/obj/structure/sign/warning/securearea, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -91369,14 +91056,13 @@ /obj/machinery/computer/rdconsole/robotics{ dir = 8 }, -/obj/structure/sign/bluecross_2{ +/obj/structure/sign/departments/medbay/alt{ pixel_x = 32 }, /obj/effect/turf_decal/bot, /turf/open/floor/plasteel, /area/science/robotics/lab) "dEP" = ( -/obj/effect/landmark/lightsout, /obj/machinery/atmospherics/components/unary/vent_pump/on{ dir = 4 }, @@ -93341,7 +93027,7 @@ /obj/item/device/mmi, /obj/item/device/mmi, /obj/item/device/mmi, -/obj/structure/sign/bluecross_2{ +/obj/structure/sign/departments/medbay/alt{ pixel_y = -32 }, /obj/effect/turf_decal/bot, @@ -93372,7 +93058,7 @@ pixel_y = 16 }, /obj/item/circular_saw, -/obj/structure/sign/nosmoking_2{ +/obj/structure/sign/warning/nosmoking{ pixel_y = -32 }, /obj/structure/mirror{ @@ -93898,7 +93584,7 @@ /turf/open/floor/plasteel, /area/science/mixing) "dJY" = ( -/obj/structure/sign/securearea, +/obj/structure/sign/warning/securearea, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -94166,11 +93852,11 @@ /turf/open/floor/plating/airless, /area/science/test_area) "dKA" = ( -/obj/structure/sign/vacuum, +/obj/structure/sign/warning/vacuum, /turf/closed/wall, /area/science/mixing) "dKB" = ( -/obj/structure/sign/securearea, +/obj/structure/sign/warning/securearea, /turf/closed/wall, /area/science/mixing) "dKC" = ( @@ -95302,7 +94988,6 @@ /obj/structure/cable/white{ icon_state = "1-2" }, -/obj/effect/landmark/lightsout, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -96443,7 +96128,7 @@ /turf/open/floor/plasteel, /area/medical/medbay/central) "dPp" = ( -/obj/structure/sign/biohazard, +/obj/structure/sign/warning/biohazard, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/closed/wall/r_wall, /area/medical/medbay/central) @@ -96814,7 +96499,7 @@ icon_state = "0-2" }, /obj/effect/spawner/structure/window/reinforced, -/obj/structure/sign/vacuum, +/obj/structure/sign/warning/vacuum, /turf/open/floor/plating, /area/medical/virology) "dQi" = ( @@ -97731,7 +97416,7 @@ /area/shuttle/escape) "dRZ" = ( /obj/structure/closet/l3closet/virology, -/obj/structure/sign/biohazard{ +/obj/structure/sign/warning/biohazard{ pixel_y = -32 }, /obj/effect/turf_decal/bot, @@ -97748,7 +97433,7 @@ /area/medical/virology) "dSb" = ( /obj/structure/closet/emcloset, -/obj/structure/sign/securearea{ +/obj/structure/sign/warning/securearea{ pixel_y = -32 }, /obj/effect/turf_decal/bot, @@ -98647,7 +98332,7 @@ /turf/open/floor/plasteel/vault, /area/medical/virology) "dTY" = ( -/obj/structure/sign/nosmoking_2, +/obj/structure/sign/warning/nosmoking, /turf/closed/wall, /area/medical/virology) "dTZ" = ( @@ -98757,7 +98442,7 @@ /obj/machinery/light{ dir = 1 }, -/obj/structure/sign/kiddieplaque/badger{ +/obj/structure/sign/plaques/kiddie/badger{ pixel_y = 32 }, /turf/open/floor/plasteel/vault{ @@ -98898,8 +98583,8 @@ }, /area/shuttle/escape) "dUD" = ( -/turf/open/floor/plasteel/neutral, -/area/shuttle/escape) +/turf/open/space/basic, +/area/space) "dUE" = ( /obj/machinery/light{ dir = 4 @@ -99333,13 +99018,6 @@ dir = 8 }, /area/medical/virology) -"dVB" = ( -/obj/structure/cable/white{ - icon_state = "1-2" - }, -/obj/effect/landmark/lightsout, -/turf/open/floor/plasteel/green, -/area/medical/virology) "dVC" = ( /obj/item/device/radio/intercom{ name = "Station Intercom"; @@ -100101,7 +99779,7 @@ /turf/open/floor/plasteel/whitegreen/corner, /area/medical/virology) "dXl" = ( -/obj/structure/sign/biohazard, +/obj/structure/sign/warning/biohazard, /turf/closed/wall, /area/medical/virology) "dXm" = ( @@ -100235,7 +99913,7 @@ /obj/structure/table, /obj/item/stack/packageWrap, /obj/item/hand_labeler, -/obj/structure/sign/nosmoking_2{ +/obj/structure/sign/warning/nosmoking{ pixel_x = -32 }, /turf/open/floor/plasteel/vault{ @@ -100745,7 +100423,7 @@ /turf/open/floor/plasteel/white, /area/shuttle/escape) "dYL" = ( -/obj/structure/sign/bluecross_2, +/obj/structure/sign/departments/medbay/alt, /turf/closed/wall/mineral/titanium, /area/shuttle/escape) "dYM" = ( @@ -100780,7 +100458,7 @@ /area/medical/virology) "dYQ" = ( /obj/structure/table/glass, -/obj/structure/sign/deathsposal{ +/obj/structure/sign/warning/deathsposal{ pixel_y = -32 }, /obj/item/paper_bin, @@ -101065,7 +100743,7 @@ /area/hallway/secondary/exit/departure_lounge) "dZr" = ( /obj/effect/spawner/structure/window/reinforced, -/obj/structure/sign/vacuum, +/obj/structure/sign/warning/vacuum, /turf/open/floor/plating, /area/hallway/secondary/exit/departure_lounge) "dZs" = ( @@ -101392,18 +101070,6 @@ /turf/open/floor/plasteel/neutral, /area/hallway/secondary/exit/departure_lounge) "eab" = ( -/obj/machinery/door/airlock/shuttle{ - name = "Emergency Shuttle Airlock" - }, -/obj/docking_port/mobile/emergency{ - dheight = 0; - dwidth = 11; - height = 18; - name = "Delta emergency shuttle"; - width = 30; - preferred_direction = 2; - port_direction = 4 - }, /obj/docking_port/stationary{ dheight = 0; dir = 4; @@ -101414,14 +101080,8 @@ turf_type = /turf/open/space; width = 30 }, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/turf/open/floor/plasteel/white, -/area/shuttle/escape) +/turf/open/space/basic, +/area/space) "eac" = ( /obj/structure/flora/ausbushes/grassybush, /obj/structure/flora/ausbushes/lavendergrass, @@ -101682,10 +101342,6 @@ /obj/effect/turf_decal/delivery, /turf/open/floor/plasteel, /area/hallway/secondary/exit/departure_lounge) -"eaF" = ( -/obj/effect/landmark/lightsout, -/turf/open/floor/plasteel/neutral, -/area/hallway/secondary/exit/departure_lounge) "eaG" = ( /obj/structure/reagent_dispensers/fueltank, /obj/item/device/radio/intercom{ @@ -101741,7 +101397,7 @@ /turf/open/floor/plating, /area/medical/virology) "eaL" = ( -/obj/structure/sign/vacuum, +/obj/structure/sign/warning/vacuum, /turf/closed/wall/r_wall, /area/medical/virology) "eaM" = ( @@ -101841,7 +101497,7 @@ }, /area/maintenance/port/aft) "eaW" = ( -/obj/structure/sign/electricshock, +/obj/structure/sign/warning/electricshock, /turf/closed/wall/r_wall, /area/maintenance/port/aft) "eaX" = ( @@ -102366,7 +102022,7 @@ /obj/machinery/light{ dir = 4 }, -/obj/structure/sign/nosmoking_2{ +/obj/structure/sign/warning/nosmoking{ pixel_x = 32 }, /turf/open/floor/plasteel{ @@ -102489,7 +102145,7 @@ /turf/open/floor/plating, /area/maintenance/solars/port/aft) "ecn" = ( -/obj/structure/sign/electricshock, +/obj/structure/sign/warning/electricshock, /turf/closed/wall/r_wall, /area/maintenance/solars/port/aft) "eco" = ( @@ -103361,7 +103017,7 @@ /area/chapel/office) "edW" = ( /obj/item/twohanded/required/kirbyplants/random, -/obj/structure/sign/nosmoking_2{ +/obj/structure/sign/warning/nosmoking{ pixel_x = 32 }, /turf/open/floor/plasteel/grimy, @@ -103496,7 +103152,7 @@ icon_state = "0-8" }, /obj/effect/spawner/structure/window/reinforced, -/obj/structure/sign/vacuum, +/obj/structure/sign/warning/vacuum, /turf/open/floor/plating, /area/security/checkpoint/escape) "eek" = ( @@ -104926,10 +104582,6 @@ }, /turf/closed/wall, /area/quartermaster/office) -"ehu" = ( -/obj/machinery/rnd/protolathe/department/security, -/turf/open/floor/plasteel/neutral, -/area/security/main) "ehv" = ( /turf/open/floor/plasteel/caution, /area/engine/engineering) @@ -104940,13 +104592,6 @@ }, /turf/open/floor/plasteel/caution, /area/engine/engineering) -"ehx" = ( -/obj/structure/cable/white{ - icon_state = "4-8" - }, -/obj/machinery/rnd/protolathe/department/engineering, -/turf/open/floor/plasteel/neutral, -/area/engine/engineering) "ehy" = ( /obj/effect/turf_decal/stripes/line{ dir = 2 @@ -104957,76 +104602,6 @@ /obj/effect/turf_decal/caution/stand_clear, /turf/open/floor/plasteel, /area/hallway/secondary/entry) -"ehz" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 2 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/effect/turf_decal/caution/stand_clear, -/turf/open/floor/plasteel, -/area/hallway/secondary/entry) -"ehA" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 2 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/effect/turf_decal/caution/stand_clear, -/turf/open/floor/plasteel, -/area/hallway/secondary/entry) -"ehB" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 2 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/effect/turf_decal/caution/stand_clear, -/turf/open/floor/plasteel, -/area/hallway/secondary/entry) -"ehC" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 2 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/effect/turf_decal/caution/stand_clear, -/turf/open/floor/plasteel, -/area/hallway/secondary/entry) -"ehD" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 2 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/effect/turf_decal/caution/stand_clear, -/turf/open/floor/plasteel, -/area/hallway/secondary/entry) -"ehE" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 2 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/effect/turf_decal/caution/stand_clear, -/turf/open/floor/plasteel, -/area/hallway/secondary/entry) -"ehF" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 2 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/effect/turf_decal/caution/stand_clear, -/turf/open/floor/plasteel, -/area/hallway/secondary/entry) "ehG" = ( /obj/item/device/radio/intercom{ name = "Station Intercom"; @@ -105094,40 +104669,12 @@ /obj/effect/turf_decal/caution/stand_clear, /turf/open/floor/plasteel, /area/hallway/secondary/exit/departure_lounge) -"ehN" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 2 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/effect/turf_decal/caution/stand_clear, -/turf/open/floor/plasteel, -/area/hallway/secondary/exit/departure_lounge) -"ehO" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 2 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/effect/turf_decal/caution/stand_clear, -/turf/open/floor/plasteel, -/area/hallway/secondary/exit/departure_lounge) "ehP" = ( /obj/machinery/computer/security/telescreen/entertainment{ pixel_y = -32 }, /turf/open/floor/plasteel/dark, /area/library) -"ehQ" = ( -/obj/structure/cable/white{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/effect/landmark/lightsout, -/turf/open/floor/plasteel/grimy, -/area/chapel/main) "QNf" = ( /obj/machinery/autolathe, /obj/machinery/door/window/southleft{ @@ -105139,7 +104686,9 @@ id = "rndlab1"; name = "Research and Development Shutter" }, -/turf/open/floor/plating, +/turf/open/floor/plasteel/whitepurple/side{ + dir = 4 + }, /area/science/lab) "QNg" = ( /obj/effect/turf_decal/loading_area, @@ -105159,12 +104708,6 @@ "QNi" = ( /turf/closed/wall, /area/science/circuit) -"QNj" = ( -/turf/closed/wall/r_wall, -/area/science/circuit) -"QNk" = ( -/turf/closed/wall/r_wall, -/area/science/circuit) "QNl" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/closed/wall/r_wall, @@ -105173,9 +104716,6 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/closed/wall/r_wall, /area/science/circuit) -"QNn" = ( -/turf/closed/wall, -/area/science/circuit) "QNo" = ( /obj/structure/table/reinforced, /obj/machinery/camera{ @@ -105207,13 +104747,6 @@ }, /turf/open/floor/plasteel, /area/science/circuit) -"QNr" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/turf/closed/wall/r_wall, -/area/science/circuit) -"QNs" = ( -/turf/closed/wall, -/area/science/circuit) "QNt" = ( /obj/structure/chair/office/light{ dir = 8 @@ -105235,23 +104768,6 @@ dir = 9 }, /area/science/circuit) -"QNw" = ( -/turf/open/floor/plasteel/white/side{ - dir = 5 - }, -/area/science/circuit) -"QNx" = ( -/obj/structure/disposalpipe/segment, -/turf/open/floor/plasteel/white/side{ - dir = 9 - }, -/area/science/circuit) -"QNy" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/turf/open/floor/plasteel, -/area/science/circuit) "QNz" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -105264,9 +104780,6 @@ }, /turf/open/floor/plasteel/whitepurple/side, /area/science/misc_lab) -"QNB" = ( -/turf/closed/wall, -/area/science/circuit) "QNC" = ( /obj/structure/table/reinforced, /obj/item/device/integrated_electronics/analyzer, @@ -105291,7 +104804,7 @@ name = "science camera"; network = list("SS13","RD") }, -/obj/structure/sign/science{ +/obj/structure/sign/departments/science{ pixel_x = 32 }, /turf/open/floor/plasteel, @@ -105321,9 +104834,6 @@ dir = 4 }, /area/science/misc_lab) -"QNH" = ( -/turf/closed/wall, -/area/science/circuit) "QNI" = ( /obj/structure/table/reinforced, /obj/item/device/integrated_electronics/analyzer, @@ -105342,17 +104852,10 @@ /obj/effect/turf_decal/stripes/line, /turf/open/floor/plasteel, /area/science/circuit) -"QNL" = ( -/obj/effect/turf_decal/stripes/line, -/turf/open/floor/plasteel, -/area/science/circuit) "QNM" = ( /obj/structure/sign/nanotrasen, /turf/closed/wall/r_wall, /area/science/circuit) -"QNN" = ( -/turf/closed/wall, -/area/science/circuit) "QNO" = ( /turf/open/floor/plasteel/white/side{ dir = 6 @@ -105372,9 +104875,6 @@ dir = 6 }, /area/science/circuit) -"QNR" = ( -/turf/closed/wall, -/area/science/circuit) "QNS" = ( /obj/structure/table/reinforced, /obj/machinery/newscaster{ @@ -105418,15 +104918,9 @@ "QNX" = ( /turf/closed/wall/r_wall, /area/science/misc_lab) -"QNY" = ( -/turf/closed/wall, -/area/science/circuit) "QNZ" = ( /turf/closed/wall, /area/science/misc_lab) -"QOa" = ( -/turf/closed/wall/r_wall, -/area/science/misc_lab) "QOb" = ( /obj/machinery/power/apc{ areastring = "/area/science/research/abandoned"; @@ -130370,14 +129864,14 @@ cEo ddO cQt dgl -QNj +dhR djn dle dmr dog dle drz -QNj +dhR dul dvZ dxH @@ -130627,14 +130121,14 @@ cRP ddP deW cKk -QNj +dhR QNo QNt QNC QNI dpX QNS -QNj +dhR djs dlf dxI @@ -130884,14 +130378,14 @@ cMY cMY cCM dgm -QNj +dhR djp QNu dmt doh QNO drA -QNj +dhR dum dli dpZ @@ -131148,7 +130642,7 @@ QND QNJ QNP drB -QNj +dhR QOb QOc QOh @@ -131398,14 +130892,14 @@ dcb cMY deX dgn -QNj +dhR djr QNu dmv doj QNQ QNT -QNj +dhR dun QOd dxK @@ -131655,14 +131149,14 @@ cNd cMY deX dgo -QNj +dhR QNp -QNx +dok dmw -QNx +dok dqa drC -QNj +dhR duo dmu QOi @@ -131912,14 +131406,14 @@ cMY cMY deY cKl -QNj +dhR djt -QNy -QNy +dmx +dmx dol dqb drD -QNj +dhR dup QOe dxL @@ -132169,14 +131663,14 @@ dcc cMY cOD cKj -QNj +dhR dju dlj dlj QNK dqc QNU -QNj +dhR duq dlh dxM @@ -132426,14 +131920,14 @@ cRS cMY deZ dgo -QNj +dhR djv dlj dlj QNK dqb drE -QNj +dhR dur QOf dxN @@ -132683,14 +132177,14 @@ dcd cMY deX dgo -QNj +dhR QNq QNz QNE doo dqd drF -QNj +dhR dus dwa dom @@ -132893,7 +132387,7 @@ bBd bDb bEP bGw -bIj +bIf bKj bMc bOh @@ -132943,11 +132437,11 @@ dgp QNm QNm dll -QNj +dhR QNM dqe -QNj -QNj +dhR +dhR dut dwb dxO @@ -133324,28 +132818,28 @@ aaa aaa aaa aaa -aav -aav -aav -aav -aav -aav -aav -aav -aav -aav -aav -acR -acR -aav -aav -aav -aav -acR -acR -acR -aav -aav +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -133580,29 +133074,29 @@ aaa aaa aaa aaa -aap -aaw -aaF -aaT -aav -abw -abI -abU -acg -acw -aav -adk -adz -adS -ael -aeI -aav -afH -aga -agu -agP -ahd -aav +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -133837,33 +133331,33 @@ aaa aaa aaa aaa -aap -aaw -aaG -aaU -aav -abx -abI -aaL -ach -abo -aav -adl -adA -adT -aem -aeJ -aav -afI -aen -agv -aen -ahe -aav -aav -aav -acR -acR +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -134095,33 +133589,33 @@ aab aaa aaa aaa -aav -aav -aaV -aaq -aaq -abJ -aaL -aci -acx -aav -adm -adB -adU -aen -aeK -aav -afJ -aen -agw -agQ -ahf -aav -ahI -ahZ -ait -acR -acR +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -134352,33 +133846,33 @@ aaa aaa aaa aaa -aav -aaH -aaW -abk -aaq -aav -aav -acj -aav -aav -aav -aav -acR -aeo -aeL -aav -acR -agb -agx -aav -aav -aav -ahJ -aci -ahh -aiK -acR +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -134609,33 +134103,33 @@ aaa aaa aaa aaa -aav -aaI -aaX -abl -aby -abK -abV -ack -acy -acR -adn -adC -adV -aep -aeM -afl -afK -agc -agy -aaW -aaW -ahy -aci -aci -aiu -aiL -acR +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -134865,34 +134359,34 @@ aaa aaa aaa aaa -aaq -aaq -aaq -aaY -abc -aaW -abL -aaW -acl -aaW -acS -aaW -abc -adW -aeq -aaW -afm -afL -agd -agz -agR -abn -aav -ahK -aia -aci -aiM -acR +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -135122,34 +134616,34 @@ aaa aaa aaa aaa -aar -aax -aaJ -aaZ -aaW -abz -aaW -abc -aaW -acz -acT -ado -abc -abc -aaW -aaW -afn -abc -afn -aaW -aaW -ahg -aav -ahL -aib -aiv -aiN -acR +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -135379,34 +134873,34 @@ aaa aaa aaa aaa -aaq -aay -aaq -aba -abm -aaW -aaW -abW -aaW -aaW -acS -aaW -aaW -adX -abc -aaW -afo -afM -age -aaW -aaW -ahh -aav -aaY -aci -aci -aiO -acR +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -135637,33 +135131,33 @@ aaa aaa aaa aaa -aav -aaK -aaY -abn -abA -abM -abX -acm -acA -acR -adp -adD -aaW -aer -aaW -afp -afN -agf -agA -aaW -ahi -ahy -aci -aci -aiw -aiP -acR +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -135894,33 +135388,33 @@ aaa aaa aaa aaa -aav -aaL -aaW -abo -aaq -aav -aav -abY -aav -aav -aav -aav -adY -aav -aeN -acR -afO -aav -aav -adY -aav -aav -ahM -aci -aix -aiy -acR +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -136151,33 +135645,33 @@ aaa aaa aaa aaa -aav -aav -abb -aaq -aaq -abN -abY -aci -acB -acB -aav -adE -aci -aav -aeO -afq -aci -agg -aav -aci -ahj -aav -ahN -aic -aiy -acR -acR +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -136407,33 +135901,33 @@ aaa aaa aaa aaa -aap -aaw -aaM -abc -aav -aav -aav -aav -acn -acC -acU -aav -adF +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aci -aes -aeP -afr -afP -agh -aes -aci -acU -aav -aav -aav -acR -acR +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -136664,29 +136158,29 @@ aaa aaa aaa aaa -aap -aaz -aaN -abd -aav -abB -abO -abY -aci -acD -acD -aav -adG -aci -aav -aeQ -afs -afs -agi -aav -aci -ahk -aav +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -136922,28 +136416,28 @@ aaa aaa aaa aaa -aav -aav -aav -aav -aav -aav -aav -aav -aav -aav -aav -adH -adZ -aav -aav -acR -acR -aav -aav +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa agS -adH -aav +aaa +aaa aaa aaa aaa @@ -137020,7 +136514,7 @@ cei cfZ chQ cjt -ckS +ckR cms cnO cpu @@ -137776,7 +137270,7 @@ bBr bDo bEY bGI -bIy +bGI bGI bGK bOr @@ -139507,15 +139001,15 @@ aaa aaa aaa aaa -aeT -afQ -aeT -aeT -agU -aeT -aeT -ahQ -aeT +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aad adq agk @@ -139761,18 +139255,18 @@ aaa aaa aaa aaa -adI -aet -aeT -aeT -afR -afR -aeu -aeu -ahl -afR -afR -afQ +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaO aaO aaO @@ -139863,7 +139357,7 @@ bvM bvM bvM bvM -cIz +bFE cKu bsO cNm @@ -140017,18 +139511,18 @@ aaa aaa aaa aaa -adI -aed -aeu -aeU -afv -aeu -aeu -aeu -agV -aeu -aeu +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aeu +aaa aid aiA aeb @@ -140099,7 +139593,7 @@ bUA bWN bYV bYV -ccy +bYV cem bYV bYV @@ -140275,18 +139769,18 @@ aaa aaa aaa aaa -adI -aev -aeT -aeT -afS -afS -agD -aeu -aeu -afS -afS -afQ +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaO aaO aaO @@ -140426,7 +139920,7 @@ dKD dUp dVd dVS -ehQ +dVd dVd dVd dVd @@ -140535,15 +140029,15 @@ aaa aaa aaa aaa -aeT -afQ -aeT -aeT -agU -aeT -aeT -ahQ -aeT +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aad ads agj @@ -142182,7 +141676,7 @@ bsO cNs cPb cQN -cSt +cSs cUi cQQ cXw @@ -142890,7 +142384,7 @@ aLL aNh aOK aQt -aSb +aLL aTI aVs aNh @@ -143356,19 +142850,19 @@ aaa aad aaa aaa -acZ -adu -adv -aef -adv -adw -adw -adw -adw -agG -aef -adv -adv +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -143612,20 +143106,20 @@ abj aaa aad aaa -acE -acZ -adv -adJ -aeg -aey -aeY -aeY -aeY -aeY -agH -aeg -ahm -adv +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -143772,7 +143266,7 @@ dXN dYH dZp dZZ -eaF +dUx ebm dYH ecH @@ -143869,23 +143363,23 @@ abj aaa aad aaa -acE -ada -adw -adK -aeh -aeh -aeh -aeh -aeh -aeh -aeh -aeh -ahn -adv -adv -adw -adv +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaO ajE @@ -144126,23 +143620,23 @@ abj aaa aad aaa -acE -ada -adw -adL -aeh -aeh -aeZ -aeZ -aeZ -aeZ -agI -aeh -aho -ahA -ahT -aie -adw +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaO ajw @@ -144384,26 +143878,26 @@ aad aad aaa acF -acZ +aaa adu -adM -aeh -aez -afa -afy -afU -afy -agJ -agX -ahp -ahB -ahU -aif -adw +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaO ajw -akh +akg akL aaO amq @@ -144514,7 +144008,7 @@ dqT cPk cXD cPk -dwE +cUp dlR cPk cPk @@ -144640,23 +144134,23 @@ abj aaa aad aaa -acE -ada -adw -adN -aeh -aeh -aeY -aeY -aeY -aeY -agK -aeh -ahq -ahC -ahV -aie -adw +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaO ajw @@ -144897,23 +144391,23 @@ abj aaa aad aaa -acE -ada -adw -adK -aeh -aeh -aeh -aeh -aeh -aeh -aeh -aeh -ahr -adv -adv -adw -adv +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaO ajw @@ -145154,20 +144648,20 @@ abj aaa aad aaa -acE -acZ -adv -adJ -aei -aeA -aeZ -aeZ -aeZ -aeZ -agL -aei -ahs -adv +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -145412,19 +144906,19 @@ aaa aad aaa aaa -acZ -adu -adv -aef -adv -adw -adw -adw -adw -agG -aef -adv -adv +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -146331,29 +145825,29 @@ aaa aaa aaa aaa -dQT -dSV -dSW -dSW -dSX -dSX -dSW -dSW -dYK -dZs +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa eab -dSW -dSX -dSX -dSX -dSW -dYK -dSW -eeV -dSW -dSW -dSW -dSW +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -146587,30 +146081,30 @@ dNT aaa aaa aaa -dQS -dRY -dSW -dTK -dUC -dVm -dVm -dWX -dXP -dWj -dZt -dWj -dXP -dVm -dVm -dVm -dUC -dWj -dSW -eeW -efH -egt -egI -dSW +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -146809,7 +146303,7 @@ cNB cPr cQW cSF -cUy +cUx cQT cXL cZt @@ -146844,30 +146338,30 @@ dNS aaa aaa aaa -dQS -dRY -dSX -dTL +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa dUD -dUD -dUD -dUD -dUD -dUD -dUD -dUD -dUD -dUD -dUD -dUD -dUD -edE -eel -eeW -eeW -eeW -egI -dSX +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -147101,30 +146595,30 @@ dNS aaa aaa aaa -dQS -dRY -dSX -dTL -dUD -dVn -dVn -dVn -dVn -dVn -dUD -dVn -dVn -dVn -dVn -dVn -dUD -edE -dSW -eeX -eeW -eeW -egJ -dSW +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -147358,35 +146852,35 @@ dNT aad aaa aaa -dQT -dQT -dSW -dTL -dUD -dVo -dWh -dWY -dXQ -dVo -dUD -eac -dXQ -ebn -dWi -eac -dUD -edE -dSX -eeX -eeW -egu -egI -dSW -dSW -dZs -dSX -dSW -dSW +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aab aaa aaa @@ -147615,35 +147109,35 @@ dNS aaa aaa aaa -dQS -dRY -dSW -dTM -dUD -dVm -dVm -dVm -dVm -dVm -dUD -dVm -dVm -dVm -dVm -dVm -dUD -edE -dSW -eeY -eeW -egv -egK -dSW -egR -egW -ehb -ehi -dSW +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -147872,35 +147366,35 @@ dNS aaa aaa aaa -dQS -dRY -dSX -dTL -dUD -dUD -dUD -dUD -dUD -dUD -dUD -dUD -dUD -dUD -dUD -dUD -dUD -edF -dSW -dSW -eel -dSX -dZs -dSW -egS -egX -ehc -ehj -dSX +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -148129,35 +147623,35 @@ dNT aad aaa aaa -dQT -dQT -dSW -dTM -dUD -dVn -dVn -dVn -dVn -dVn -dUD -dVn -dVn -dVn -dVn -dVn -dUD -edE -dSX -eeZ -efI -egw -egL -dUF -egT -egT -ehd -ehk -dSX +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -148386,35 +147880,35 @@ dNS aaa aaa aaa -dQS -dRY -dSX -dTL -dUD -dVo -dWi -dWY -dXQ -dVo -dUD -eac -dWh -ebn -ecd -eac -dUD -edE -eem -dTL -dUD -dUD -egM -eem -egT -egT -ehe -ehl -dSX +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -148643,35 +148137,35 @@ dNS aaa aaa aaa -dQS -dRY -dSX -dTL -dUD -dVm -dVm -dVm -dVm -dVm -dUD -dVm -dVm -dVm -dVm -dVm -dUD -edE -eem -dTL -dUD -dUD -egM -eem -egT -egT -ehf -ehm -dSX +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -148900,35 +148394,35 @@ dNT aad aaa aaa -dQT -dQT -dSW -dTL -dUD -dUD -dUD -dUD -dUD -dUD -dUD -dUD -dUD -dUD -dUD -dUD -dUD -edE -dSX -efa -efJ -egx -efM -dUF -egT -egY -ehd -ehn -dSX +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -149113,7 +148607,7 @@ bvM bvM bvM bvM -cGG +bvM bvM bFE cKE @@ -149157,35 +148651,35 @@ dNS aaa aaa aaa -dQS -dRY -dSX -dTK -dUE -dVn -dWj -dWj -dVn -dVn -dZu -dVn -dVn -dVn -dWj -dWj -dUE -dTK -dSW -dZs -dSW -dSW -egN -dSW -egS -egZ -ehg -eho -dSX +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -149414,35 +148908,35 @@ dNS aaa aaa aaa -dQS -dRY -dSW -dSW -dUF -dSX -dWk -dWk -dSX -dYL -dSW -dSW -dSW -dSW -ece -ece -dSW -dSW -dSW -efb -efK -egy -egO -dSW -egU -eha -ehh -ehp -dSW +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -149671,35 +149165,35 @@ dNT aad aaa aaa -dQT -dQT -dSW -dTN -dUG -dVp -dWj -dWj -dXR -dYM -dSW -ead -eaG -ebo -dWj -dWj -edc -edG -dSW -efc -efL -dSV -dSW -dSW -dSW -dZs -dSX -dSW -dSW +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -149928,30 +149422,30 @@ dNS aaa aaa aaa -dQS -dRY -dSX -dTO -dUH -dVq -dUD -dUD -dXS -dYN -dZv -dWj -eaH -ebp -ebp -ebp -edd -edH -dSW -efd -efM -egz -egP -dSW +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -150185,30 +149679,30 @@ dNS aaa aaa aaa -dQS -dRY -dSX -dTP -dUI -dVr -dUD -dUD -dXS -dYN -dZv -dWj -eaI -ebq -ebq -ebq -ede -edH -dSW -efc -efN -dTL -egP -dSX +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -150442,30 +149936,30 @@ dNT aaa aaa aaa -dQS -dRY -dSW -dTQ -dUJ -dVs -dWl -dWZ -dXT -dYO -dYL -eae -eaJ -ebr -ecf -ecf -dTK -edI -dSW -dTK -efO -egA -egP -dSW +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -150640,7 +150134,7 @@ ccX ceO cgC cim -cjW +cjV clk cmS cou @@ -150700,29 +150194,29 @@ aaa aaa aaa aaa -dQT -dSV -dSW -dSX -dSX -dSX -dSX -dSW -dSW -dZs -dSW -dSX -dSX -dSX -dSX -dSX -dSW -dSW -dSX -efP -efP -dSX -dSW +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -150906,7 +150400,7 @@ crj csM cbk cvM -cxe +cxa bsE cAm cBL @@ -152127,17 +151621,17 @@ atE auM aoE aaa -ayF -ayF -ayF -aCe +aaa +aaa +aaa +aaa aDi -ayF -aDi -aGG -ayF -ayF -ayF +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aad @@ -152384,18 +151878,18 @@ atF auN aoE aaa -ayF -azH -aAL -aAL -aDj -aEj -aDj -aDj -aHY -ayF -ayF -aLZ +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aad aQQ @@ -152641,18 +152135,18 @@ atG auO aoF aaa -ayF -azI +aaa +aaa +aaa +aaa aAM -aCf -aAM -aAM -aAM -aAN -aHZ -aJw -aKT -aMa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aad aQR @@ -152671,15 +152165,15 @@ bkf aaa aaa aaa -brc -brc -buu -brc -brc -buu -brc -brc -brc +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa bHr bJj @@ -152898,18 +152392,18 @@ aoE aoF aoF aaa -ayF -azJ -aAN -aAN -aAN -aAM -aAN -aAM -aIa -aJw -aKU -aMa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aad aQU @@ -152919,24 +152413,24 @@ aVZ aXG aZi aad -bcH -bcH -bcI +aaa +aaa +aaa bgU -bcI -bcH -bcH aaa aaa -brd -bsX -buv -bvU -bxj -byA -bzZ -brc -bDU +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa bHs bJk @@ -153155,18 +152649,18 @@ aad aad aaa aaa -ayF -azK -aAN -aAM -aAM -aAM -aAM -aAM -aIa -aJx -aKU -aMa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aad aQS @@ -153176,24 +152670,24 @@ aWa aXH aQS aad -bcH -bem -bfK -bgV -biv -bkg -bcH aaa aaa -brd -bsY -buw -bvV -bxk -byB +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa bAa -bBX -bDU +aaa +aaa aaa bHs bJl @@ -153412,18 +152906,18 @@ aac aaa aaa aaa -ayF -azL -aAO -aCg -aAO -aEk -aCg -aAO -aIb -ayF -ayF -aMb +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aad aQV @@ -153433,24 +152927,24 @@ aQQ aXI aZj aad -bcI -ben -bfL +aaa +aaa +aaa bgW -biw -bkh -bmb aaa aaa -brd -bsZ -bux -bvW -bxl -byC -bAb -brc -bDU +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa bHr bJm @@ -153669,17 +153163,17 @@ aaa aaa aaa aaa -ayF -ayF -ayF -ayF -ayF -ayF -aFl -ayF -ayF -ayF -ayF +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aad @@ -153690,24 +153184,24 @@ aaa aad aad aad -bcH -beo -bfM -bgX -bix -bki -bcH aaa aaa -brc -brc -buy -brc -brc -brc +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa bAc -brc -brc +aaa +aaa aaa bHr bHr @@ -153788,7 +153282,7 @@ dSe dSZ dTS dUP -dVB +dTS dWv dXj dYc @@ -153947,13 +153441,13 @@ aad aad aaa aaa -bcH -bcH -bcI -bgY -bcI -bcH -bcH +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -154762,7 +154256,7 @@ csW cux cvX cxo -cyT +cyR cAt cBY cDz @@ -154998,7 +154492,7 @@ bHu bJq bHu bHu -bPn +bHu bHu bHu bVi @@ -158111,7 +157605,7 @@ cFB cDI cIj cJr -cLh +cLd cMC cNV cPV @@ -158572,7 +158066,7 @@ aUy aWg aXM aZu -bbj +bbd bcP bcM aad diff --git a/_maps/map_files/MetaStation/MetaStation.dmm b/_maps/map_files/MetaStation/MetaStation.dmm index fd1880db11..4d3978fc15 100644 --- a/_maps/map_files/MetaStation/MetaStation.dmm +++ b/_maps/map_files/MetaStation/MetaStation.dmm @@ -478,7 +478,8 @@ /obj/docking_port/mobile/pod{ id = "pod2"; name = "escape pod 2"; - port_direction = 2 + port_direction = 2; + timid = 0 }, /turf/open/floor/mineral/titanium/blue, /area/shuttle/pod_2) @@ -788,11 +789,7 @@ /obj/machinery/light/small{ dir = 1 }, -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; - icon_state = "space"; - layer = 4; - name = "EXTERNAL AIRLOCK"; +/obj/structure/sign/warning/vacuum/external{ pixel_y = 32 }, /obj/effect/turf_decal/stripes/line{ @@ -1548,7 +1545,8 @@ id = "pod3"; name = "escape pod 3"; port_direction = 2; - preferred_direction = 4 + preferred_direction = 4; + timid = 0 }, /turf/open/floor/mineral/titanium/blue, /area/shuttle/pod_3) @@ -2069,7 +2067,7 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 5 }, -/obj/structure/sign/securearea{ +/obj/structure/sign/warning/securearea{ desc = "A warning sign which reads 'WARNING: Do Not Enter When Red Light Shows', detailing the penalties that any Nanotrasen employee or silicon will suffer if violating this rule."; name = "WARNING: Do Not Enter When Red Light Shows"; pixel_y = 32 @@ -2307,7 +2305,7 @@ /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 1 }, -/obj/structure/sign/pods{ +/obj/structure/sign/warning/pods{ pixel_y = 30 }, /turf/open/floor/plasteel/red/corner{ @@ -2361,7 +2359,7 @@ /obj/item/twohanded/required/kirbyplants{ icon_state = "plant-16" }, -/obj/structure/sign/securearea{ +/obj/structure/sign/warning/securearea{ desc = "A warning sign which reads 'WARNING: Criminally Insane Inmates', describing the possible hazards of those contained within."; name = "WARNING: Criminally Insane Inmates"; pixel_y = 32 @@ -2566,7 +2564,7 @@ /area/crew_quarters/fitness/recreation) "afz" = ( /obj/structure/closet/emcloset, -/obj/structure/sign/pods{ +/obj/structure/sign/warning/pods{ pixel_y = 30 }, /turf/open/floor/plasteel/vault, @@ -2720,15 +2718,6 @@ dir = 1 }, /area/security/prison) -"afQ" = ( -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ - dir = 2 - }, -/obj/effect/landmark/lightsout, -/turf/open/floor/plasteel/red/corner{ - dir = 1 - }, -/area/security/prison) "afR" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 1 @@ -3099,11 +3088,7 @@ /turf/open/floor/plating, /area/maintenance/solars/port/fore) "agD" = ( -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; - icon_state = "space"; - layer = 4; - name = "EXTERNAL AIRLOCK"; +/obj/structure/sign/warning/vacuum/external{ pixel_x = 32 }, /turf/open/floor/plating{ @@ -3152,7 +3137,7 @@ /turf/open/floor/plasteel/vault, /area/security/prison) "agJ" = ( -/obj/structure/sign/securearea, +/obj/structure/sign/warning/securearea, /turf/closed/wall, /area/security/prison) "agK" = ( @@ -3181,7 +3166,7 @@ /turf/open/floor/plasteel, /area/security/prison) "agN" = ( -/obj/structure/sign/securearea{ +/obj/structure/sign/warning/securearea{ desc = "A warning sign which reads 'WARNING: Dangerous Inmates'."; name = "\improper WARNING: Dangerous Inmates" }, @@ -4271,11 +4256,7 @@ /turf/open/floor/plating, /area/maintenance/solars/port/fore) "aji" = ( -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'HIGH VOLTAGE'"; - icon_state = "shock"; - name = "HIGH VOLTAGE" - }, +/obj/structure/sign/warning/electricshock, /turf/closed/wall, /area/maintenance/solars/port/fore) "ajj" = ( @@ -4624,10 +4605,7 @@ }, /area/engine/gravity_generator) "akb" = ( -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'RADIOACTIVE AREA'"; - icon_state = "radiation"; - name = "RADIOACTIVE AREA"; +/obj/structure/sign/warning/radiation/rad_area{ pixel_y = 32 }, /obj/effect/turf_decal/bot_white, @@ -4881,7 +4859,7 @@ /area/security/brig) "akz" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/structure/sign/pods{ +/obj/structure/sign/warning/pods{ pixel_x = 32 }, /turf/open/floor/plasteel/red/side{ @@ -5349,7 +5327,7 @@ dir = 2; id = "garbage" }, -/obj/structure/sign/vacuum{ +/obj/structure/sign/warning/vacuum{ pixel_x = -32 }, /turf/open/floor/plating, @@ -7117,11 +7095,7 @@ pixel_x = 4 }, /obj/effect/decal/cleanable/cobweb, -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; - icon_state = "space"; - layer = 4; - name = "EXTERNAL AIRLOCK"; +/obj/structure/sign/warning/vacuum/external{ pixel_y = 32 }, /turf/open/floor/plating, @@ -7226,11 +7200,7 @@ /turf/open/floor/plating, /area/maintenance/solars/starboard/fore) "app" = ( -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; - icon_state = "space"; - layer = 4; - name = "EXTERNAL AIRLOCK"; +/obj/structure/sign/warning/vacuum/external{ pixel_x = 32 }, /obj/effect/decal/cleanable/cobweb/cobweb2, @@ -7270,7 +7240,7 @@ /turf/open/floor/plating, /area/maintenance/disposal) "apt" = ( -/obj/structure/sign/securearea{ +/obj/structure/sign/warning/securearea{ name = "\improper STAY CLEAR HEAVY MACHINERY" }, /turf/closed/wall, @@ -7331,7 +7301,7 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, -/obj/structure/sign/kiddieplaque/library{ +/obj/structure/sign/plaques/kiddie/library{ pixel_y = -32 }, /turf/open/floor/plasteel/neutral/corner{ @@ -7789,11 +7759,7 @@ /area/space/nearstation) "aqC" = ( /obj/machinery/space_heater, -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; - icon_state = "space"; - layer = 4; - name = "EXTERNAL AIRLOCK"; +/obj/structure/sign/warning/vacuum/external{ pixel_y = 32 }, /turf/open/floor/plating, @@ -7833,11 +7799,7 @@ /area/maintenance/port/fore) "aqH" = ( /obj/machinery/space_heater, -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; - icon_state = "space"; - layer = 4; - name = "EXTERNAL AIRLOCK"; +/obj/structure/sign/warning/vacuum/external{ pixel_y = 32 }, /turf/open/floor/plating{ @@ -9134,11 +9096,7 @@ /turf/open/floor/plating, /area/maintenance/solars/starboard/fore) "atl" = ( -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'HIGH VOLTAGE'"; - icon_state = "shock"; - name = "HIGH VOLTAGE" - }, +/obj/structure/sign/warning/electricshock, /turf/closed/wall, /area/maintenance/solars/starboard/fore) "atm" = ( @@ -9401,7 +9359,7 @@ }, /area/security/brig) "atO" = ( -/obj/structure/sign/pods, +/obj/structure/sign/warning/pods, /turf/closed/wall/r_wall, /area/security/warden) "atP" = ( @@ -9568,7 +9526,6 @@ /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 4 }, -/obj/effect/landmark/lightsout, /turf/open/floor/plasteel, /area/crew_quarters/dorms) "auj" = ( @@ -9656,11 +9613,8 @@ /area/maintenance/starboard) "auu" = ( /obj/structure/closet/radiation, -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'RADIOACTIVE AREA'"; +/obj/structure/sign/warning/radiation/rad_area{ dir = 1; - icon_state = "radiation"; - name = "RADIOACTIVE AREA"; pixel_y = 32 }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, @@ -9683,11 +9637,8 @@ c_tag = "Gravity Generator Foyer" }, /obj/structure/closet/radiation, -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'RADIOACTIVE AREA'"; +/obj/structure/sign/warning/radiation/rad_area{ dir = 1; - icon_state = "radiation"; - name = "RADIOACTIVE AREA"; pixel_y = 32 }, /obj/machinery/airalarm{ @@ -9734,11 +9685,7 @@ /area/maintenance/starboard/fore) "auB" = ( /obj/structure/closet/emcloset, -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; - icon_state = "space"; - layer = 4; - name = "EXTERNAL AIRLOCK"; +/obj/structure/sign/warning/vacuum/external{ pixel_x = 32 }, /turf/open/floor/plating, @@ -9755,11 +9702,7 @@ icon_state = "crateopen"; opened = 1 }, -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; - icon_state = "space"; - layer = 4; - name = "EXTERNAL AIRLOCK"; +/obj/structure/sign/warning/vacuum/external{ pixel_y = 32 }, /obj/effect/decal/cleanable/cobweb, @@ -9888,11 +9831,7 @@ dir = 6 }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; - icon_state = "space"; - layer = 4; - name = "EXTERNAL AIRLOCK"; +/obj/structure/sign/warning/vacuum/external{ pixel_x = -32 }, /turf/open/floor/plasteel/red/corner{ @@ -10163,11 +10102,8 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'RADIOACTIVE AREA'"; +/obj/structure/sign/warning/radiation/rad_area{ dir = 1; - icon_state = "radiation"; - name = "RADIOACTIVE AREA"; pixel_y = 32 }, /obj/effect/turf_decal/stripes/line{ @@ -10256,11 +10192,8 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'RADIOACTIVE AREA'"; +/obj/structure/sign/warning/radiation/rad_area{ dir = 1; - icon_state = "radiation"; - name = "RADIOACTIVE AREA"; pixel_y = 32 }, /obj/effect/turf_decal/stripes/line{ @@ -10354,11 +10287,7 @@ /turf/open/floor/plating, /area/maintenance/port/fore) "avK" = ( -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; - icon_state = "space"; - layer = 4; - name = "EXTERNAL AIRLOCK"; +/obj/structure/sign/warning/vacuum/external{ pixel_y = 32 }, /obj/effect/turf_decal/stripes/line{ @@ -10663,7 +10592,6 @@ /obj/structure/cable/yellow{ icon_state = "2-8" }, -/obj/effect/landmark/lightsout, /turf/open/floor/plasteel, /area/security/brig) "awn" = ( @@ -11307,15 +11235,6 @@ dir = 1 }, /area/crew_quarters/dorms) -"axH" = ( -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ - dir = 4 - }, -/turf/open/floor/plasteel, -/area/crew_quarters/dorms) "axI" = ( /obj/machinery/door/airlock{ id_tag = "Cabin5"; @@ -11464,7 +11383,7 @@ /turf/open/floor/plasteel, /area/engine/engineering) "axV" = ( -/obj/structure/sign/securearea{ +/obj/structure/sign/warning/securearea{ pixel_y = 32 }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, @@ -11497,7 +11416,7 @@ dir = 8; name = "emergency shower" }, -/obj/structure/sign/securearea{ +/obj/structure/sign/warning/securearea{ pixel_y = 32 }, /obj/effect/turf_decal/stripes/line{ @@ -11640,8 +11559,8 @@ }, /area/security/nuke_storage) "ayt" = ( -/turf/open/floor/mineral/titanium/blue, -/area/shuttle/labor) +/turf/open/space/basic, +/area/space) "ayu" = ( /obj/machinery/mineral/labor_claim_console{ machinedir = 1; @@ -11965,8 +11884,8 @@ /turf/open/floor/plating/airless, /area/space/nearstation) "azh" = ( -/turf/open/floor/mineral/titanium/blue, -/area/shuttle/mining) +/turf/open/space/basic, +/area/space) "azi" = ( /obj/structure/chair{ dir = 1 @@ -12684,29 +12603,17 @@ }, /area/library) "aAA" = ( -/obj/machinery/door/airlock/titanium{ - name = "Mining Shuttle Airlock"; - req_access_txt = "0" - }, -/obj/docking_port/mobile{ - dir = 8; - dwidth = 3; - height = 5; - id = "mining"; - name = "mining shuttle"; - port_direction = 4; - width = 7 - }, /obj/docking_port/stationary{ dir = 8; dwidth = 3; height = 5; id = "mining_home"; name = "mining shuttle bay"; - width = 7 + width = 7; + roundstart_template = /datum/map_template/shuttle/mining/box }, -/turf/open/floor/plating, -/area/shuttle/mining) +/turf/open/space/basic, +/area/space) "aAB" = ( /obj/machinery/door/airlock/external{ name = "Mining Dock Airlock"; @@ -12897,29 +12804,17 @@ /turf/open/floor/mineral/titanium/blue, /area/shuttle/labor) "aAV" = ( -/obj/machinery/door/airlock/titanium{ - id_tag = "prisonshuttle"; - name = "Labor Shuttle Airlock" - }, -/obj/docking_port/mobile{ - dir = 8; - dwidth = 2; - height = 5; - id = "laborcamp"; - name = "labor camp shuttle"; - port_direction = 4; - width = 9 - }, /obj/docking_port/stationary{ dir = 8; dwidth = 2; height = 5; id = "laborcamp_home"; name = "fore bay 1"; - width = 9 + width = 9; + roundstart_template = /datum/map_template/shuttle/labour/box }, -/turf/open/floor/mineral/titanium/blue, -/area/shuttle/labor) +/turf/open/space/basic, +/area/space) "aAW" = ( /obj/machinery/door/airlock/external{ name = "Labor Camp Shuttle Airlock" @@ -13212,7 +13107,7 @@ /area/crew_quarters/dorms) "aBB" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/structure/sign/pods{ +/obj/structure/sign/warning/pods{ pixel_x = 30 }, /turf/open/floor/plasteel/neutral/corner{ @@ -13391,12 +13286,7 @@ /turf/open/floor/plasteel, /area/quartermaster/miningoffice) "aBU" = ( -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; - icon_state = "space"; - layer = 4; - name = "EXTERNAL AIRLOCK" - }, +/obj/structure/sign/warning/vacuum/external, /turf/closed/wall, /area/quartermaster/miningoffice) "aBV" = ( @@ -14062,7 +13952,7 @@ /turf/closed/wall/r_wall, /area/security/nuke_storage) "aDq" = ( -/obj/structure/sign/securearea, +/obj/structure/sign/warning/securearea, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 10 }, @@ -14083,7 +13973,7 @@ }, /area/security/nuke_storage) "aDs" = ( -/obj/structure/sign/securearea, +/obj/structure/sign/warning/securearea, /turf/closed/wall/r_wall, /area/security/nuke_storage) "aDt" = ( @@ -14119,10 +14009,7 @@ }, /area/hallway/primary/fore) "aDy" = ( -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'HIGH VOLTAGE'"; - icon_state = "shock"; - name = "HIGH VOLTAGE"; +/obj/structure/sign/warning/electricshock{ pixel_y = 32 }, /turf/open/floor/plasteel/red/corner{ @@ -14130,10 +14017,7 @@ }, /area/hallway/primary/fore) "aDz" = ( -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'HIGH VOLTAGE'"; - icon_state = "shock"; - name = "HIGH VOLTAGE"; +/obj/structure/sign/warning/electricshock{ pixel_y = 32 }, /obj/machinery/camera{ @@ -14775,11 +14659,7 @@ /turf/open/floor/plasteel, /area/hallway/primary/fore) "aEJ" = ( -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; - icon_state = "space"; - layer = 4; - name = "EXTERNAL AIRLOCK"; +/obj/structure/sign/warning/vacuum/external{ pixel_y = 32 }, /obj/machinery/light/small{ @@ -16138,7 +16018,7 @@ /obj/machinery/light/small{ dir = 1 }, -/obj/structure/sign/securearea{ +/obj/structure/sign/warning/securearea{ pixel_y = 30 }, /obj/effect/turf_decal/stripes/line{ @@ -17186,12 +17066,7 @@ /area/engine/supermatter) "aJB" = ( /obj/effect/spawner/structure/window/reinforced, -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; - icon_state = "space"; - layer = 4; - name = "EXTERNAL AIRLOCK" - }, +/obj/structure/sign/warning/vacuum/external, /turf/open/floor/plating, /area/quartermaster/storage) "aJC" = ( @@ -17990,7 +17865,7 @@ /turf/open/floor/plasteel/dark, /area/ai_monitored/turret_protected/ai_upload) "aLs" = ( -/obj/structure/sign/kiddieplaque{ +/obj/structure/sign/plaques/kiddie{ pixel_y = 32 }, /obj/structure/table, @@ -18169,7 +18044,7 @@ dir = 2; network = list("SS13") }, -/obj/structure/sign/pods{ +/obj/structure/sign/warning/pods{ pixel_y = 30 }, /obj/effect/turf_decal/delivery, @@ -19276,7 +19151,6 @@ /obj/structure/cable/yellow{ icon_state = "4-8" }, -/obj/effect/landmark/lightsout, /turf/open/floor/plasteel/floorgrime, /area/crew_quarters/locker) "aOA" = ( @@ -20654,10 +20528,7 @@ /obj/machinery/light{ dir = 8 }, -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'HIGH VOLTAGE'"; - icon_state = "shock"; - name = "HIGH VOLTAGE"; +/obj/structure/sign/warning/electricshock{ pixel_x = -31 }, /obj/structure/cable{ @@ -20787,7 +20658,8 @@ /obj/docking_port/mobile/pod{ id = "pod1"; name = "escape pod 1"; - port_direction = 2 + port_direction = 2; + timid = 0 }, /turf/open/floor/mineral/titanium/blue, /area/shuttle/pod_1) @@ -21948,7 +21820,7 @@ /turf/open/floor/plasteel/dark, /area/aisat) "aUb" = ( -/obj/structure/sign/pods, +/obj/structure/sign/warning/pods, /turf/closed/wall, /area/hallway/secondary/entry) "aUc" = ( @@ -22729,11 +22601,6 @@ /obj/effect/turf_decal/delivery, /turf/open/floor/plasteel, /area/quartermaster/storage) -"aVI" = ( -/obj/effect/landmark/lightsout, -/obj/effect/turf_decal/bot, -/turf/open/floor/plasteel, -/area/quartermaster/storage) "aVJ" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 5 @@ -23006,7 +22873,7 @@ /turf/open/floor/plasteel, /area/crew_quarters/locker) "aWo" = ( -/obj/structure/sign/pods, +/obj/structure/sign/warning/pods, /turf/closed/wall, /area/crew_quarters/locker) "aWp" = ( @@ -23215,11 +23082,7 @@ /turf/open/floor/plasteel, /area/hallway/secondary/entry) "aWV" = ( -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; - icon_state = "space"; - layer = 4; - name = "EXTERNAL AIRLOCK"; +/obj/structure/sign/warning/vacuum/external{ pixel_y = -32 }, /obj/effect/turf_decal/stripes/line, @@ -23589,7 +23452,7 @@ dir = 2; network = list("SS13") }, -/obj/structure/sign/securearea{ +/obj/structure/sign/warning/securearea{ desc = "A warning sign which reads 'HIGH-POWER TURRETS AHEAD'."; name = "\improper HIGH-POWER TURRETS AHEAD"; pixel_y = 32 @@ -23646,7 +23509,7 @@ /obj/machinery/light/small{ dir = 1 }, -/obj/structure/sign/securearea{ +/obj/structure/sign/warning/securearea{ pixel_y = 32 }, /obj/effect/turf_decal/stripes/corner{ @@ -23698,7 +23561,6 @@ /obj/structure/cable/yellow{ icon_state = "1-2" }, -/obj/effect/landmark/lightsout, /obj/effect/turf_decal/plaque{ icon_state = "L7" }, @@ -24035,7 +23897,7 @@ }, /area/crew_quarters/heads/chief) "aYs" = ( -/obj/structure/sign/securearea{ +/obj/structure/sign/warning/securearea{ pixel_y = 32 }, /obj/structure/closet/radiation, @@ -24107,10 +23969,7 @@ }, /area/ai_monitored/turret_protected/ai) "aYC" = ( -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'KEEP CLEAR OF DOCKING AREA'."; - name = "KEEP CLEAR: DOCKING AREA" - }, +/obj/structure/sign/warning/docking, /turf/closed/wall, /area/hallway/secondary/entry) "aYE" = ( @@ -24135,11 +23994,7 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 5 }, -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; - icon_state = "space"; - layer = 4; - name = "EXTERNAL AIRLOCK"; +/obj/structure/sign/warning/vacuum/external{ pixel_y = -32 }, /obj/effect/turf_decal/stripes/line, @@ -24646,7 +24501,6 @@ /turf/open/floor/plasteel, /area/engine/engineering) "aZJ" = ( -/obj/effect/landmark/lightsout, /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 9 @@ -25947,7 +25801,6 @@ "bbZ" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/effect/landmark/lightsout, /turf/open/floor/plasteel, /area/hallway/primary/port) "bca" = ( @@ -27047,12 +26900,7 @@ /turf/closed/wall, /area/engine/break_room) "beq" = ( -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; - icon_state = "space"; - layer = 4; - name = "EXTERNAL AIRLOCK" - }, +/obj/structure/sign/warning/vacuum/external, /turf/closed/wall/r_wall, /area/space/nearstation) "bes" = ( @@ -27150,8 +26998,8 @@ /turf/open/floor/mineral/titanium/blue, /area/shuttle/arrival) "beC" = ( -/turf/open/floor/mineral/titanium/blue, -/area/shuttle/arrival) +/turf/open/space/basic, +/area/space) "beD" = ( /obj/machinery/computer/arcade, /obj/machinery/light{ @@ -27386,11 +27234,6 @@ /obj/effect/turf_decal/bot, /turf/open/floor/plasteel, /area/hallway/primary/port) -"bfe" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/turf/open/floor/plasteel, -/area/hallway/primary/port) "bff" = ( /turf/open/floor/plasteel/brown/corner{ dir = 4 @@ -28742,7 +28585,7 @@ /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 1 }, -/obj/structure/sign/securearea{ +/obj/structure/sign/warning/securearea{ pixel_y = 32 }, /turf/open/floor/plasteel/yellow/corner{ @@ -28827,7 +28670,7 @@ /obj/machinery/light{ dir = 1 }, -/obj/structure/sign/securearea{ +/obj/structure/sign/warning/securearea{ pixel_y = 32 }, /obj/structure/table/glass, @@ -28926,7 +28769,8 @@ id = "pod4"; name = "escape pod 4"; port_direction = 2; - preferred_direction = 4 + preferred_direction = 4; + timid = 0 }, /turf/open/floor/mineral/titanium/blue, /area/shuttle/pod_4) @@ -29063,7 +28907,7 @@ }, /area/hallway/secondary/entry) "biw" = ( -/obj/structure/sign/pods, +/obj/structure/sign/warning/pods, /turf/closed/wall, /area/security/checkpoint/customs) "bix" = ( @@ -30556,7 +30400,7 @@ /turf/open/floor/plasteel, /area/engine/break_room) "bls" = ( -/obj/structure/sign/pods, +/obj/structure/sign/warning/pods, /turf/closed/wall/r_wall, /area/engine/break_room) "blt" = ( @@ -32500,7 +32344,7 @@ /turf/closed/wall/r_wall, /area/space/nearstation) "bpv" = ( -/obj/structure/sign/securearea{ +/obj/structure/sign/warning/securearea{ pixel_y = 32 }, /obj/structure/transit_tube/station/reverse/flipped{ @@ -33631,7 +33475,7 @@ /area/hallway/primary/starboard) "brz" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/structure/sign/securearea{ +/obj/structure/sign/warning/securearea{ pixel_x = 32 }, /turf/open/floor/plasteel/dark/corner{ @@ -34106,7 +33950,6 @@ /obj/structure/cable/yellow{ icon_state = "2-4" }, -/obj/effect/landmark/lightsout, /turf/open/floor/plasteel, /area/hallway/secondary/entry) "bsp" = ( @@ -34755,7 +34598,7 @@ /area/crew_quarters/heads/hop) "btD" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/structure/sign/securearea{ +/obj/structure/sign/warning/securearea{ pixel_x = 32 }, /turf/open/floor/plasteel, @@ -34883,11 +34726,7 @@ /turf/open/floor/plasteel, /area/hallway/secondary/entry) "btS" = ( -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; - icon_state = "space"; - layer = 4; - name = "EXTERNAL AIRLOCK"; +/obj/structure/sign/warning/vacuum/external{ pixel_y = 32 }, /obj/effect/turf_decal/stripes/line{ @@ -35675,11 +35514,7 @@ /area/hallway/secondary/entry) "bvC" = ( /obj/structure/chair, -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; - icon_state = "space"; - layer = 4; - name = "EXTERNAL AIRLOCK"; +/obj/structure/sign/warning/vacuum/external{ pixel_y = 32 }, /obj/effect/turf_decal/stripes/line{ @@ -36295,7 +36130,7 @@ /turf/open/floor/plasteel/bar, /area/crew_quarters/bar) "bwQ" = ( -/obj/structure/sign/securearea{ +/obj/structure/sign/warning/securearea{ desc = "Under the painting a plaque reads: 'While the meat grinder may not have spared you, fear not. Not one part of you has gone to waste... You were delicious.'"; icon_state = "monkey_painting"; name = "Mr. Deempisi portrait"; @@ -36486,11 +36321,7 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 9 }, -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; - icon_state = "space"; - layer = 4; - name = "EXTERNAL AIRLOCK"; +/obj/structure/sign/warning/vacuum/external{ pixel_y = -32 }, /obj/machinery/light/small{ @@ -36583,11 +36414,7 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; - icon_state = "space"; - layer = 4; - name = "EXTERNAL AIRLOCK"; +/obj/structure/sign/warning/vacuum/external{ pixel_y = -32 }, /obj/effect/turf_decal/stripes/line, @@ -37283,7 +37110,7 @@ }, /area/engine/atmos) "byV" = ( -/obj/structure/sign/atmosplaque{ +/obj/structure/sign/plaques/atmos{ pixel_y = 32 }, /obj/item/phone{ @@ -37711,10 +37538,7 @@ name = "Station Intercom (General)"; pixel_y = 21 }, -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'HIGH VOLTAGE'"; - icon_state = "shock"; - name = "HIGH VOLTAGE"; +/obj/structure/sign/warning/electricshock{ pixel_y = 32 }, /obj/effect/turf_decal/bot, @@ -38991,12 +38815,7 @@ /area/tcommsat/server) "bCG" = ( /obj/effect/spawner/structure/window/reinforced, -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; - icon_state = "space"; - layer = 4; - name = "EXTERNAL AIRLOCK" - }, +/obj/structure/sign/warning/vacuum/external, /turf/open/floor/plating, /area/hallway/secondary/entry) "bCH" = ( @@ -39162,18 +38981,6 @@ dir = 1 }, /area/hallway/secondary/command) -"bDc" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/landmark/lightsout, -/turf/open/floor/plasteel/neutral/corner{ - dir = 1 - }, -/area/hallway/secondary/command) "bDd" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 @@ -39336,15 +39143,6 @@ dir = 4 }, /area/hallway/secondary/command) -"bDt" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/obj/effect/landmark/lightsout, -/turf/open/floor/plasteel/neutral/corner{ - dir = 4 - }, -/area/hallway/secondary/command) "bDu" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 @@ -39463,10 +39261,6 @@ /obj/machinery/atmospherics/components/unary/vent_scrubber/on, /turf/open/floor/plasteel/bar, /area/crew_quarters/bar) -"bDE" = ( -/obj/effect/landmark/lightsout, -/turf/open/floor/plasteel/bar, -/area/crew_quarters/bar) "bDF" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel/bar, @@ -39738,10 +39532,6 @@ }, /turf/open/floor/wood, /area/security/vacantoffice) -"bEr" = ( -/obj/effect/landmark/lightsout, -/turf/open/floor/wood, -/area/security/vacantoffice) "bEs" = ( /obj/item/paper_bin{ pixel_x = -2; @@ -40887,7 +40677,7 @@ /turf/open/floor/plasteel, /area/ai_monitored/storage/eva) "bGA" = ( -/obj/structure/sign/securearea, +/obj/structure/sign/warning/securearea, /turf/closed/wall/r_wall, /area/ai_monitored/storage/eva) "bGB" = ( @@ -40923,7 +40713,7 @@ /area/teleporter) "bGE" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/structure/sign/securearea, +/obj/structure/sign/warning/securearea, /turf/closed/wall/r_wall, /area/teleporter) "bGF" = ( @@ -40990,7 +40780,7 @@ /turf/closed/wall/r_wall, /area/gateway) "bGN" = ( -/obj/structure/sign/securearea, +/obj/structure/sign/warning/securearea, /turf/closed/wall/r_wall, /area/gateway) "bGO" = ( @@ -42963,11 +42753,6 @@ /obj/structure/bookcase/random/adult, /turf/open/floor/wood, /area/library) -"bLj" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/effect/landmark/lightsout, -/turf/open/floor/carpet, -/area/library) "bLk" = ( /obj/structure/bookcase/random/reference, /turf/open/floor/wood, @@ -43330,7 +43115,7 @@ /turf/open/floor/wood, /area/crew_quarters/theatre) "bLT" = ( -/obj/structure/sign/securearea, +/obj/structure/sign/warning/securearea, /turf/closed/wall/r_wall, /area/bridge) "bLU" = ( @@ -43883,7 +43668,7 @@ /turf/open/floor/carpet, /area/bridge/showroom/corporate) "bNb" = ( -/obj/structure/sign/kiddieplaque/perfect_drone{ +/obj/structure/sign/plaques/kiddie/perfect_drone{ pixel_y = 32 }, /obj/structure/table/wood, @@ -43985,7 +43770,7 @@ /area/bridge/showroom/corporate) "bNj" = ( /obj/structure/showcase/perfect_employee, -/obj/structure/sign/kiddieplaque/perfect_man{ +/obj/structure/sign/plaques/kiddie/perfect_man{ pixel_y = 32 }, /obj/structure/window/reinforced, @@ -44312,10 +44097,6 @@ }, /turf/open/floor/plasteel, /area/engine/atmos) -"bNT" = ( -/obj/effect/landmark/lightsout, -/turf/open/floor/plasteel, -/area/engine/atmos) "bNU" = ( /obj/machinery/atmospherics/components/binary/pump{ dir = 0; @@ -44697,7 +44478,7 @@ /turf/open/floor/plasteel/vault, /area/gateway) "bON" = ( -/obj/structure/sign/securearea{ +/obj/structure/sign/warning/securearea{ pixel_x = -32 }, /obj/structure/cable/yellow{ @@ -44775,11 +44556,7 @@ /turf/open/floor/plasteel/showroomfloor, /area/crew_quarters/kitchen) "bOY" = ( -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; - icon_state = "space"; - layer = 4; - name = "EXTERNAL AIRLOCK"; +/obj/structure/sign/warning/vacuum/external{ pixel_x = 32 }, /obj/effect/turf_decal/stripes/line{ @@ -45605,7 +45382,7 @@ /turf/open/floor/plasteel, /area/engine/atmos) "bQT" = ( -/obj/structure/sign/nosmoking_2, +/obj/structure/sign/warning/nosmoking, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/closed/wall, /area/engine/atmos) @@ -46831,11 +46608,7 @@ /turf/open/floor/plating, /area/maintenance/solars/port/aft) "bTp" = ( -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'HIGH VOLTAGE'"; - icon_state = "shock"; - name = "HIGH VOLTAGE" - }, +/obj/structure/sign/warning/electricshock, /turf/closed/wall, /area/maintenance/solars/port/aft) "bTq" = ( @@ -47210,7 +46983,7 @@ /area/hallway/primary/central) "bUc" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/structure/sign/botany{ +/obj/structure/sign/departments/botany{ pixel_x = 32; pixel_y = 32 }, @@ -48347,7 +48120,6 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, -/obj/effect/landmark/lightsout, /obj/effect/turf_decal/plaque{ icon_state = "L8" }, @@ -48865,11 +48637,7 @@ /turf/open/floor/plating, /area/maintenance/solars/port/aft) "bXv" = ( -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; - icon_state = "space"; - layer = 4; - name = "EXTERNAL AIRLOCK"; +/obj/structure/sign/warning/vacuum/external{ pixel_x = 32 }, /turf/open/floor/plating, @@ -49479,7 +49247,7 @@ /obj/item/screwdriver{ pixel_y = 6 }, -/obj/structure/sign/nosmoking_2{ +/obj/structure/sign/warning/nosmoking{ pixel_y = 30 }, /turf/open/floor/plasteel/whiteblue/side{ @@ -49601,7 +49369,7 @@ /turf/open/floor/plating, /area/medical/medbay/central) "bZb" = ( -/obj/structure/sign/bluecross_2, +/obj/structure/sign/departments/medbay/alt, /turf/closed/wall, /area/medical/medbay/central) "bZc" = ( @@ -49699,7 +49467,7 @@ /turf/open/floor/plating, /area/science/research) "bZk" = ( -/obj/structure/sign/science, +/obj/structure/sign/departments/science, /turf/closed/wall, /area/science/research) "bZl" = ( @@ -50567,7 +50335,7 @@ }, /obj/machinery/disposal/bin, /obj/structure/disposalpipe/trunk, -/obj/structure/sign/deathsposal{ +/obj/structure/sign/warning/deathsposal{ pixel_y = 32 }, /turf/open/floor/plasteel/floorgrime, @@ -50961,7 +50729,6 @@ /turf/open/floor/plasteel/white, /area/medical/storage) "cbL" = ( -/obj/effect/landmark/lightsout, /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 2 }, @@ -51553,11 +51320,7 @@ /turf/open/floor/plating, /area/engine/atmos) "ccX" = ( -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; - icon_state = "space"; - layer = 4; - name = "EXTERNAL AIRLOCK"; +/obj/structure/sign/warning/vacuum/external{ pixel_y = -32 }, /obj/machinery/light/small{ @@ -52030,7 +51793,7 @@ /turf/open/floor/plating, /area/maintenance/starboard) "cdZ" = ( -/obj/structure/sign/nosmoking_2{ +/obj/structure/sign/warning/nosmoking{ pixel_x = -28 }, /obj/machinery/atmospherics/components/unary/portables_connector/visible{ @@ -52091,7 +51854,7 @@ /turf/open/floor/plasteel/floorgrime, /area/maintenance/disposal/incinerator) "cef" = ( -/obj/structure/sign/fire{ +/obj/structure/sign/warning/fire{ pixel_x = 32 }, /obj/machinery/atmospherics/components/binary/pump{ @@ -52127,11 +51890,7 @@ /turf/open/floor/plating, /area/maintenance/port/aft) "cel" = ( -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; - icon_state = "space"; - layer = 4; - name = "EXTERNAL AIRLOCK"; +/obj/structure/sign/warning/vacuum/external{ pixel_y = 32 }, /obj/effect/turf_decal/stripes/line{ @@ -52410,11 +52169,6 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/plasteel, /area/hallway/primary/aft) -"ceM" = ( -/turf/open/floor/plasteel/whitepurple/side{ - dir = 2 - }, -/area/science/research) "ceN" = ( /obj/structure/table, /obj/machinery/cell_charger, @@ -52438,14 +52192,6 @@ dir = 2 }, /area/science/research) -"ceP" = ( -/obj/structure/table, -/obj/item/stock_parts/cell/potato, -/obj/machinery/light, -/turf/open/floor/plasteel/whitepurple/side{ - dir = 2 - }, -/area/science/research) "ceQ" = ( /obj/machinery/disposal/bin, /obj/structure/disposalpipe/trunk{ @@ -52866,7 +52612,7 @@ /obj/machinery/light{ dir = 1 }, -/obj/structure/sign/nosmoking_2{ +/obj/structure/sign/warning/nosmoking{ pixel_y = 30 }, /turf/open/floor/plasteel/vault, @@ -53032,7 +52778,7 @@ /turf/closed/wall, /area/medical/chemistry) "cfW" = ( -/obj/structure/sign/chemistry, +/obj/structure/sign/departments/chemistry, /turf/closed/wall, /area/medical/chemistry) "cfX" = ( @@ -53653,16 +53399,6 @@ dir = 1 }, /area/science/lab) -"chl" = ( -/obj/structure/noticeboard{ - desc = "A board for pinning important notices upon."; - name = "notice board"; - pixel_y = 31 - }, -/turf/open/floor/plasteel/whitepurple/side{ - dir = 1 - }, -/area/science/lab) "chm" = ( /obj/machinery/button/door{ id = "research_shutters"; @@ -53749,14 +53485,14 @@ }, /area/science/research) "chw" = ( -/obj/structure/sign/securearea, +/obj/structure/sign/warning/securearea, /turf/closed/wall/r_wall, /area/bridge/showroom/corporate) "chx" = ( /turf/open/floor/engine, /area/science/explab) "chy" = ( -/obj/structure/sign/nosmoking_2{ +/obj/structure/sign/warning/nosmoking{ pixel_y = 32 }, /obj/machinery/camera{ @@ -54108,7 +53844,7 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, -/obj/structure/sign/nosmoking_2{ +/obj/structure/sign/warning/nosmoking{ pixel_y = 28 }, /turf/open/floor/plasteel/whiteblue/corner{ @@ -55132,7 +54868,7 @@ /area/maintenance/starboard/aft) "ckx" = ( /obj/structure/table, -/obj/structure/sign/bluecross{ +/obj/structure/sign/departments/medbay{ pixel_y = 32 }, /obj/item/reagent_containers/glass/beaker/large, @@ -55208,7 +54944,7 @@ /obj/machinery/light/small{ dir = 8 }, -/obj/structure/sign/fire{ +/obj/structure/sign/warning/fire{ pixel_x = -32 }, /obj/machinery/atmospherics/components/binary/pump{ @@ -55234,7 +54970,7 @@ /turf/open/floor/engine, /area/maintenance/disposal/incinerator) "ckF" = ( -/obj/structure/sign/fire{ +/obj/structure/sign/warning/fire{ pixel_x = 32 }, /obj/machinery/light/small{ @@ -55317,7 +55053,7 @@ /area/aisat) "ckU" = ( /obj/structure/chair, -/obj/structure/sign/nosmoking_2{ +/obj/structure/sign/warning/nosmoking{ pixel_x = -28 }, /turf/open/floor/plasteel/dark, @@ -55377,7 +55113,7 @@ /obj/machinery/atmospherics/components/unary/vent_pump/on{ dir = 8 }, -/obj/structure/sign/nosmoking_2{ +/obj/structure/sign/warning/nosmoking{ pixel_x = 28 }, /obj/effect/landmark/blobstart, @@ -55643,7 +55379,7 @@ /obj/machinery/light{ dir = 4 }, -/obj/structure/sign/nosmoking_2{ +/obj/structure/sign/warning/nosmoking{ pixel_x = 30 }, /turf/open/floor/plasteel, @@ -55790,11 +55526,7 @@ }, /area/science/research) "clS" = ( -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'HIGH VOLTAGE'"; - icon_state = "shock"; - name = "HIGH VOLTAGE" - }, +/obj/structure/sign/warning/electricshock, /turf/closed/wall/r_wall, /area/science/explab) "clT" = ( @@ -56074,7 +55806,7 @@ /area/medical/chemistry) "cmD" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/structure/sign/chemistry{ +/obj/structure/sign/departments/chemistry{ pixel_x = -32 }, /turf/open/floor/plasteel/yellow/corner{ @@ -56086,7 +55818,7 @@ /obj/machinery/light{ dir = 4 }, -/obj/structure/sign/science{ +/obj/structure/sign/departments/science{ pixel_x = 32 }, /turf/open/floor/plasteel/purple/corner{ @@ -56361,11 +56093,7 @@ /turf/open/floor/engine/vacuum, /area/maintenance/disposal/incinerator) "cnf" = ( -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; - icon_state = "space"; - layer = 4; - name = "EXTERNAL AIRLOCK"; +/obj/structure/sign/warning/vacuum/external{ pixel_y = -32 }, /obj/machinery/atmospherics/components/unary/outlet_injector/on{ @@ -56861,7 +56589,7 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, -/obj/structure/sign/nosmoking_2{ +/obj/structure/sign/warning/nosmoking{ pixel_y = 32 }, /obj/machinery/camera{ @@ -57520,19 +57248,6 @@ }, /turf/open/floor/plasteel/white, /area/science/research) -"cps" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/obj/effect/landmark/lightsout, -/turf/open/floor/plasteel/white, -/area/science/research) "cpt" = ( /obj/structure/cable/yellow{ icon_state = "4-8" @@ -58477,7 +58192,7 @@ /turf/open/space, /area/space/nearstation) "cre" = ( -/obj/structure/sign/fire, +/obj/structure/sign/warning/fire, /turf/closed/wall/r_wall, /area/maintenance/disposal/incinerator) "crf" = ( @@ -58857,7 +58572,7 @@ /turf/closed/wall/r_wall, /area/science/storage) "crS" = ( -/obj/structure/sign/biohazard, +/obj/structure/sign/warning/biohazard, /turf/closed/wall/r_wall, /area/science/storage) "crT" = ( @@ -58994,7 +58709,7 @@ /area/maintenance/port/aft) "csj" = ( /obj/structure/closet/secure_closet/medical2, -/obj/structure/sign/nosmoking_2{ +/obj/structure/sign/warning/nosmoking{ pixel_x = -28 }, /turf/open/floor/plasteel, @@ -59047,7 +58762,7 @@ dir = 1; pixel_y = -22 }, -/obj/structure/sign/nosmoking_2{ +/obj/structure/sign/warning/nosmoking{ pixel_x = -28 }, /obj/machinery/iv_drip, @@ -59535,7 +59250,7 @@ /obj/machinery/light/small{ dir = 1 }, -/obj/structure/sign/biohazard{ +/obj/structure/sign/warning/biohazard{ pixel_y = 32 }, /turf/open/floor/plasteel/white, @@ -59575,7 +59290,7 @@ /obj/machinery/light/small{ dir = 1 }, -/obj/structure/sign/nosmoking_2{ +/obj/structure/sign/warning/nosmoking{ pixel_y = 32 }, /obj/effect/turf_decal/stripes/line{ @@ -60236,7 +59951,7 @@ dir = 4; pixel_x = 24 }, -/obj/structure/sign/nosmoking_2{ +/obj/structure/sign/warning/nosmoking{ pixel_y = 32 }, /obj/structure/table/glass, @@ -60465,13 +60180,6 @@ /obj/effect/turf_decal/delivery, /turf/open/floor/plasteel, /area/science/storage) -"cuX" = ( -/obj/effect/landmark/xeno_spawn, -/obj/machinery/atmospherics/components/unary/vent_pump/on{ - dir = 4 - }, -/turf/open/floor/plating, -/area/maintenance/starboard/aft) "cuY" = ( /obj/structure/rack, /obj/item/extinguisher, @@ -60484,33 +60192,6 @@ "cuZ" = ( /turf/closed/wall/r_wall, /area/science/circuit) -"cva" = ( -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ - dir = 4 - }, -/turf/open/floor/plating, -/area/maintenance/starboard/aft) -"cvb" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 5 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/turf/open/floor/plating, -/area/maintenance/starboard/aft) -"cvc" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on{ - dir = 8 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/turf/open/floor/plating, -/area/maintenance/starboard/aft) "cvd" = ( /obj/structure/cable{ icon_state = "2-4" @@ -60573,11 +60254,7 @@ /area/solar/port/aft) "cvj" = ( /obj/structure/closet/emcloset, -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; - icon_state = "space"; - layer = 4; - name = "EXTERNAL AIRLOCK"; +/obj/structure/sign/warning/vacuum/external{ pixel_x = -32 }, /turf/open/floor/plating, @@ -60636,7 +60313,7 @@ "cvq" = ( /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/structure/sign/examroom{ +/obj/structure/sign/departments/examroom{ pixel_x = -32 }, /turf/open/floor/plasteel/white, @@ -60812,7 +60489,7 @@ /turf/open/floor/plating, /area/maintenance/aft) "cvJ" = ( -/obj/structure/sign/nosmoking_2{ +/obj/structure/sign/warning/nosmoking{ pixel_x = -29 }, /turf/open/floor/engine{ @@ -60980,12 +60657,6 @@ /obj/effect/turf_decal/delivery, /turf/open/floor/plasteel, /area/science/storage) -"cvZ" = ( -/obj/structure/closet/crate, -/obj/item/device/multitool, -/obj/item/clothing/gloves/color/fyellow, -/turf/open/floor/plating, -/area/maintenance/starboard/aft) "cwa" = ( /obj/structure/reagent_dispensers/watertank/high, /turf/open/floor/plating, @@ -61284,7 +60955,7 @@ icon_state = "2-4" }, /obj/structure/disposalpipe/segment, -/obj/structure/sign/nosmoking_2{ +/obj/structure/sign/warning/nosmoking{ pixel_x = -28 }, /turf/open/floor/plasteel, @@ -61297,10 +60968,7 @@ /turf/open/floor/plating, /area/science/robotics/mechbay) "cwI" = ( -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'HIGH VOLTAGE'"; - icon_state = "shock"; - name = "HIGH VOLTAGE"; +/obj/structure/sign/warning/electricshock{ pixel_y = 31 }, /turf/open/floor/mech_bay_recharge_floor, @@ -61579,7 +61247,6 @@ /obj/structure/cable/yellow{ icon_state = "1-8" }, -/obj/effect/landmark/lightsout, /turf/open/floor/plasteel/white, /area/medical/medbay/aft) "cxk" = ( @@ -61700,7 +61367,7 @@ }, /area/medical/genetics) "cxy" = ( -/obj/structure/sign/nosmoking_2{ +/obj/structure/sign/warning/nosmoking{ pixel_x = 28 }, /obj/machinery/disposal/bin, @@ -62131,7 +61798,7 @@ /turf/open/floor/plasteel/white, /area/science/research) "cyy" = ( -/obj/structure/sign/biohazard, +/obj/structure/sign/warning/biohazard, /turf/closed/wall, /area/science/mixing) "cyz" = ( @@ -62216,7 +61883,7 @@ /area/science/mixing) "cyG" = ( /obj/machinery/atmospherics/components/unary/portables_connector/visible, -/obj/structure/sign/nosmoking_2{ +/obj/structure/sign/warning/nosmoking{ pixel_y = 32 }, /obj/machinery/light{ @@ -62333,7 +62000,7 @@ /area/medical/medbay/aft) "cyU" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/structure/sign/nosmoking_2{ +/obj/structure/sign/warning/nosmoking{ pixel_x = 28 }, /obj/structure/disposalpipe/segment, @@ -62612,15 +62279,6 @@ /obj/machinery/atmospherics/components/unary/vent_pump/on, /turf/open/floor/plasteel/white, /area/science/mixing) -"czu" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/general/visible{ - dir = 5 - }, -/turf/open/floor/plasteel/white, -/area/science/mixing) "czv" = ( /obj/machinery/atmospherics/pipe/manifold/general/visible, /turf/open/floor/plasteel/white, @@ -62733,7 +62391,7 @@ /turf/open/floor/plasteel/floorgrime, /area/maintenance/disposal/incinerator) "czI" = ( -/obj/structure/sign/securearea{ +/obj/structure/sign/warning/securearea{ desc = "A warning sign which reads 'BOMB RANGE"; name = "BOMB RANGE" }, @@ -63266,7 +62924,7 @@ /turf/open/floor/plasteel, /area/science/mixing) "cAH" = ( -/obj/structure/sign/biohazard, +/obj/structure/sign/warning/biohazard, /turf/closed/wall/r_wall, /area/science/mixing) "cAI" = ( @@ -63702,7 +63360,6 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, -/obj/effect/landmark/lightsout, /turf/open/floor/plasteel, /area/science/misc_lab) "cBF" = ( @@ -63778,7 +63435,7 @@ /turf/open/floor/plasteel, /area/science/mixing) "cBM" = ( -/obj/structure/sign/securearea{ +/obj/structure/sign/warning/securearea{ desc = "A warning sign which reads 'BOMB RANGE"; name = "BOMB RANGE" }, @@ -64411,7 +64068,7 @@ /turf/open/floor/plasteel, /area/science/robotics/lab) "cDe" = ( -/obj/structure/sign/nosmoking_2{ +/obj/structure/sign/warning/nosmoking{ pixel_y = 32 }, /obj/structure/rack, @@ -64493,7 +64150,7 @@ /turf/closed/wall/r_wall, /area/science/mixing) "cDl" = ( -/obj/structure/sign/securearea, +/obj/structure/sign/warning/securearea, /turf/closed/wall/r_wall, /area/science/mixing) "cDm" = ( @@ -64540,11 +64197,7 @@ /turf/open/floor/plating, /area/science/mixing) "cDr" = ( -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; - icon_state = "space"; - layer = 4; - name = "EXTERNAL AIRLOCK"; +/obj/structure/sign/warning/vacuum/external{ pixel_y = -32 }, /obj/machinery/light/small, @@ -65098,11 +64751,7 @@ /turf/open/floor/engine/vacuum, /area/science/mixing) "cEs" = ( -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; - icon_state = "space"; - layer = 4; - name = "EXTERNAL AIRLOCK"; +/obj/structure/sign/warning/vacuum/external{ pixel_y = 32 }, /turf/open/floor/engine/vacuum, @@ -65261,7 +64910,7 @@ dir = 8 }, /obj/structure/table/glass, -/obj/structure/sign/deathsposal{ +/obj/structure/sign/warning/deathsposal{ pixel_x = -30 }, /turf/open/floor/plasteel/whitegreen/side{ @@ -65371,7 +65020,7 @@ pixel_x = 1; pixel_y = 4 }, -/obj/structure/sign/nosmoking_2{ +/obj/structure/sign/warning/nosmoking{ pixel_y = -30 }, /obj/structure/table/glass, @@ -65443,7 +65092,7 @@ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/structure/sign/science{ +/obj/structure/sign/departments/science{ name = "\improper ROBOTICS!"; pixel_x = 32 }, @@ -65593,10 +65242,6 @@ }, /turf/open/floor/plasteel, /area/science/mixing) -"cFt" = ( -/obj/effect/decal/cleanable/oil, -/turf/open/floor/plating, -/area/maintenance/starboard/aft) "cFu" = ( /obj/structure/closet, /obj/item/device/assembly/prox_sensor{ @@ -65773,7 +65418,7 @@ /turf/open/floor/plating, /area/medical/virology) "cFL" = ( -/obj/structure/sign/biohazard{ +/obj/structure/sign/warning/biohazard{ pixel_y = 32 }, /obj/machinery/shower{ @@ -65800,7 +65445,7 @@ /turf/open/floor/plasteel/white, /area/medical/virology) "cFN" = ( -/obj/structure/sign/securearea{ +/obj/structure/sign/warning/securearea{ pixel_y = 32 }, /obj/machinery/shower{ @@ -65981,7 +65626,6 @@ /obj/structure/cable/yellow{ icon_state = "1-2" }, -/obj/effect/landmark/lightsout, /turf/open/floor/plasteel/white, /area/science/research) "cGi" = ( @@ -66009,7 +65653,7 @@ /area/science/mixing) "cGk" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/structure/sign/fire{ +/obj/structure/sign/warning/fire{ pixel_y = -32 }, /obj/machinery/atmospherics/components/binary/pump{ @@ -66175,7 +65819,6 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 10 }, -/obj/effect/landmark/lightsout, /obj/machinery/holopad, /obj/structure/cable/yellow{ icon_state = "2-4" @@ -66553,7 +66196,7 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, -/obj/structure/sign/securearea{ +/obj/structure/sign/warning/securearea{ desc = "A warning sign which reads 'SERVER ROOM'."; name = "SERVER ROOM" }, @@ -66600,15 +66243,6 @@ }, /turf/closed/wall/r_wall, /area/science/mixing) -"cHj" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/turf/open/floor/plating{ - icon_state = "platingdmg2" - }, -/area/maintenance/starboard/aft) "cHk" = ( /obj/structure/cable, /obj/machinery/power/tracker, @@ -66763,7 +66397,7 @@ /turf/open/floor/plasteel/white, /area/medical/virology) "cHz" = ( -/obj/structure/sign/biohazard{ +/obj/structure/sign/warning/biohazard{ pixel_x = -32 }, /turf/open/floor/plasteel/whitegreen/side{ @@ -66789,7 +66423,7 @@ }, /area/medical/medbay/aft) "cHB" = ( -/obj/structure/sign/biohazard{ +/obj/structure/sign/warning/biohazard{ pixel_x = -32 }, /obj/item/storage/box/gloves{ @@ -66803,7 +66437,7 @@ }, /area/medical/medbay/aft) "cHC" = ( -/obj/structure/sign/nosmoking_2{ +/obj/structure/sign/warning/nosmoking{ pixel_y = -30 }, /obj/item/storage/box/beakers{ @@ -66866,7 +66500,7 @@ /obj/item/reagent_containers/blood/empty, /obj/item/reagent_containers/syringe, /obj/item/reagent_containers/dropper, -/obj/structure/sign/biohazard{ +/obj/structure/sign/warning/biohazard{ pixel_x = 32 }, /turf/open/floor/plasteel/floorgrime, @@ -67097,7 +66731,7 @@ /area/science/server) "cId" = ( /obj/effect/spawner/structure/window/reinforced, -/obj/structure/sign/securearea{ +/obj/structure/sign/warning/securearea{ desc = "A warning sign which reads 'SERVER ROOM'."; name = "SERVER ROOM"; pixel_y = 32 @@ -67145,7 +66779,7 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, -/obj/structure/sign/biohazard{ +/obj/structure/sign/warning/biohazard{ pixel_y = 32 }, /turf/open/floor/plating, @@ -67299,7 +66933,7 @@ /turf/open/floor/plasteel/vault, /area/medical/virology) "cIy" = ( -/obj/structure/sign/biohazard{ +/obj/structure/sign/warning/biohazard{ pixel_x = -32 }, /turf/open/space, @@ -67577,11 +67211,7 @@ /turf/open/floor/plating, /area/maintenance/starboard/aft) "cJe" = ( -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; - icon_state = "space"; - layer = 4; - name = "EXTERNAL AIRLOCK"; +/obj/structure/sign/warning/vacuum/external{ pixel_y = -32 }, /obj/structure/cable/yellow{ @@ -68363,7 +67993,7 @@ /turf/open/floor/plating, /area/maintenance/aft) "cKI" = ( -/obj/structure/sign/securearea, +/obj/structure/sign/warning/securearea, /turf/closed/wall/r_wall, /area/science/research) "cKJ" = ( @@ -68437,11 +68067,7 @@ /turf/open/floor/plating, /area/maintenance/solars/starboard/aft) "cKR" = ( -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'HIGH VOLTAGE'"; - icon_state = "shock"; - name = "HIGH VOLTAGE" - }, +/obj/structure/sign/warning/electricshock, /turf/closed/wall/r_wall, /area/maintenance/solars/starboard/aft) "cKS" = ( @@ -69719,11 +69345,7 @@ /obj/structure/cable{ icon_state = "0-8" }, -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; - icon_state = "space"; - layer = 4; - name = "EXTERNAL AIRLOCK"; +/obj/structure/sign/warning/vacuum/external{ pixel_y = -32 }, /turf/open/floor/plating, @@ -69908,10 +69530,6 @@ }, /turf/open/floor/plasteel, /area/hallway/secondary/exit/departure_lounge) -"cNM" = ( -/obj/effect/landmark/lightsout, -/turf/open/floor/plasteel, -/area/hallway/secondary/exit/departure_lounge) "cNN" = ( /obj/structure/flora/ausbushes/fernybush, /obj/structure/flora/ausbushes/fullgrass, @@ -69975,7 +69593,7 @@ }, /area/hallway/secondary/exit/departure_lounge) "cNT" = ( -/obj/structure/sign/vacuum{ +/obj/structure/sign/warning/vacuum{ pixel_x = 32 }, /obj/effect/turf_decal/stripes/line, @@ -70473,7 +70091,7 @@ /obj/structure/chair{ dir = 8 }, -/obj/structure/sign/electricshock{ +/obj/structure/sign/warning/electricshock{ pixel_x = 32 }, /obj/effect/turf_decal/stripes/line{ @@ -70697,7 +70315,7 @@ /turf/open/floor/carpet, /area/chapel/main) "cPE" = ( -/obj/structure/sign/kiddieplaque/badger{ +/obj/structure/sign/plaques/kiddie/badger{ pixel_y = 32 }, /obj/item/reagent_containers/food/snacks/grown/poppy{ @@ -71224,7 +70842,7 @@ }, /area/chapel/main) "cQJ" = ( -/obj/structure/sign/vacuum{ +/obj/structure/sign/warning/vacuum{ pixel_x = -32 }, /obj/effect/turf_decal/delivery, @@ -71261,7 +70879,7 @@ /turf/open/floor/plasteel, /area/hallway/secondary/exit/departure_lounge) "cQP" = ( -/obj/structure/sign/vacuum{ +/obj/structure/sign/warning/vacuum{ pixel_x = 32 }, /obj/effect/turf_decal/delivery, @@ -71332,11 +70950,11 @@ /turf/open/floor/plasteel, /area/science/xenobiology) "cRa" = ( -/obj/structure/sign/biohazard, +/obj/structure/sign/warning/biohazard, /turf/closed/wall, /area/science/xenobiology) "cRb" = ( -/obj/structure/sign/securearea, +/obj/structure/sign/warning/securearea, /turf/closed/wall, /area/science/xenobiology) "cRc" = ( @@ -71420,11 +71038,7 @@ dir = 2; id = "chapelgun" }, -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; - icon_state = "space"; - layer = 4; - name = "EXTERNAL AIRLOCK"; +/obj/structure/sign/warning/vacuum/external{ pixel_y = 32 }, /obj/machinery/light/small{ @@ -71497,7 +71111,7 @@ /turf/open/floor/plasteel, /area/hallway/secondary/exit/departure_lounge) "cRu" = ( -/obj/structure/sign/biohazard, +/obj/structure/sign/warning/biohazard, /turf/closed/wall/r_wall, /area/science/xenobiology) "cRv" = ( @@ -71526,7 +71140,7 @@ }, /area/science/xenobiology) "cRw" = ( -/obj/structure/sign/securearea, +/obj/structure/sign/warning/securearea, /turf/closed/wall/r_wall, /area/science/xenobiology) "cRx" = ( @@ -72069,11 +71683,7 @@ /turf/open/floor/plasteel/white, /area/science/xenobiology) "cSI" = ( -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'HIGH VOLTAGE'"; - icon_state = "shock"; - name = "HIGH VOLTAGE" - }, +/obj/structure/sign/warning/electricshock, /turf/closed/wall, /area/science/xenobiology) "cSJ" = ( @@ -72607,7 +72217,6 @@ /obj/structure/cable/yellow{ icon_state = "1-2" }, -/obj/effect/landmark/lightsout, /obj/machinery/holopad, /turf/open/floor/plasteel/white, /area/science/xenobiology) @@ -72654,8 +72263,8 @@ /turf/open/floor/wood, /area/library) "cUV" = ( -/turf/open/floor/mineral/titanium/blue, -/area/shuttle/supply) +/turf/open/space/basic, +/area/space) "cUW" = ( /obj/machinery/conveyor{ dir = 4; @@ -72694,15 +72303,6 @@ /turf/open/floor/mineral/titanium/blue, /area/shuttle/supply) "cUZ" = ( -/obj/machinery/door/airlock/titanium{ - name = "Supply Shuttle Airlock"; - req_access_txt = "31" - }, -/obj/docking_port/mobile/supply{ - dwidth = 5; - roundstart_move = "supply_away"; - width = 12 - }, /obj/docking_port/stationary{ dir = 8; dwidth = 5; @@ -72711,8 +72311,8 @@ name = "Cargo Bay"; width = 12 }, -/turf/open/floor/plating, -/area/shuttle/supply) +/turf/open/space/basic, +/area/space) "cVa" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -72830,8 +72430,8 @@ /turf/open/floor/pod/dark, /area/shuttle/transport) "cVv" = ( -/turf/open/floor/pod/light, -/area/shuttle/transport) +/turf/open/space/basic, +/area/space) "cVw" = ( /obj/structure/shuttle/engine/heater{ dir = 8 @@ -72842,18 +72442,6 @@ /turf/open/floor/plating/airless, /area/shuttle/transport) "cVx" = ( -/obj/machinery/door/airlock/titanium, -/obj/docking_port/mobile{ - dir = 8; - dwidth = 2; - height = 13; - id = "ferry"; - name = "ferry shuttle"; - port_direction = 1; - preferred_direction = 4; - roundstart_move = "ferry_away"; - width = 5 - }, /obj/docking_port/stationary{ dir = 8; dwidth = 2; @@ -72863,8 +72451,8 @@ turf_type = /turf/open/space; width = 5 }, -/turf/open/floor/pod/light, -/area/shuttle/transport) +/turf/open/space/basic, +/area/space) "cVy" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/visible, /obj/effect/spawner/structure/window/reinforced, @@ -73076,7 +72664,7 @@ /turf/open/floor/mineral/titanium/blue, /area/shuttle/abandoned) "cVZ" = ( -/obj/structure/sign/vacuum{ +/obj/structure/sign/warning/vacuum{ pixel_x = -32 }, /obj/effect/decal/cleanable/dirt{ @@ -73199,7 +72787,8 @@ dir = 2; dwidth = 4; height = 9; - width = 9 + width = 9; + timid = 0 }, /obj/machinery/bluespace_beacon, /obj/machinery/computer/auxillary_base, @@ -73291,17 +72880,8 @@ /turf/open/floor/mineral/titanium/blue, /area/shuttle/abandoned) "cWp" = ( -/obj/effect/decal/cleanable/blood/old, -/obj/effect/decal/cleanable/blood/gibs/old, -/obj/effect/decal/cleanable/dirt{ - desc = "A thin layer of dust coating the floor."; - name = "dust" - }, -/obj/effect/decal/remains/human{ - desc = "They look like human remains, and have clearly been gnawed at." - }, -/turf/open/floor/mineral/titanium/blue, -/area/shuttle/abandoned) +/turf/open/space/basic, +/area/space) "cWq" = ( /obj/effect/decal/cleanable/oil, /obj/effect/decal/cleanable/dirt{ @@ -73657,7 +73237,7 @@ /area/shuttle/abandoned) "cWX" = ( /obj/structure/reagent_dispensers/fueltank, -/obj/structure/sign/vacuum{ +/obj/structure/sign/warning/vacuum{ pixel_x = -32 }, /obj/effect/decal/cleanable/dirt{ @@ -73995,7 +73575,7 @@ /turf/open/floor/mineral/titanium, /area/shuttle/abandoned) "cXG" = ( -/obj/structure/sign/science{ +/obj/structure/sign/departments/science{ pixel_y = -32 }, /obj/effect/decal/cleanable/dirt{ @@ -74011,7 +73591,7 @@ }, /obj/machinery/computer/camera_advanced/shuttle_docker/whiteship{ dir = 1; - station_lock_override = 1; + lock_override = 1; view_range = 15; x_offset = -3; y_offset = -7 @@ -74055,7 +73635,7 @@ /turf/open/floor/mineral/titanium/blue, /area/shuttle/abandoned) "cXM" = ( -/obj/structure/sign/botany, +/obj/structure/sign/departments/botany, /turf/closed/wall/mineral/titanium, /area/shuttle/abandoned) "cXN" = ( @@ -74079,7 +73659,7 @@ /turf/open/floor/mineral/titanium/blue, /area/shuttle/abandoned) "cXP" = ( -/obj/structure/sign/bluecross_2, +/obj/structure/sign/departments/medbay/alt, /turf/closed/wall/mineral/titanium, /area/shuttle/abandoned) "cXQ" = ( @@ -74559,16 +74139,6 @@ /turf/closed/wall/mineral/titanium/nodiagonal, /area/shuttle/escape) "cYJ" = ( -/obj/machinery/door/airlock/titanium{ - name = "Emergency Shuttle Airlock" - }, -/obj/docking_port/mobile/emergency{ - dir = 2; - dwidth = 5; - height = 14; - name = "Meta emergency shuttle"; - width = 25 - }, /obj/docking_port/stationary{ dheight = 0; dir = 2; @@ -74578,8 +74148,8 @@ name = "MetaStation emergency evac bay"; width = 29 }, -/turf/open/floor/mineral/titanium/blue, -/area/shuttle/escape) +/turf/open/space/basic, +/area/space) "cYK" = ( /obj/structure/cable/yellow{ icon_state = "4-8" @@ -74695,8 +74265,8 @@ /turf/open/floor/mineral/titanium, /area/shuttle/escape) "cYO" = ( -/turf/open/floor/mineral/titanium/blue, -/area/shuttle/escape) +/turf/open/space/basic, +/area/space) "cYP" = ( /obj/machinery/door/airlock/engineering{ cyclelinkeddir = 1; @@ -74843,7 +74413,7 @@ /turf/open/floor/plasteel, /area/hallway/secondary/entry) "cZg" = ( -/obj/structure/sign/nosmoking_2, +/obj/structure/sign/warning/nosmoking, /turf/closed/wall/mineral/titanium, /area/shuttle/escape) "cZh" = ( @@ -74922,7 +74492,7 @@ /turf/open/floor/plasteel, /area/hallway/secondary/entry) "cZr" = ( -/obj/structure/sign/bluecross_2, +/obj/structure/sign/departments/medbay/alt, /turf/closed/wall/mineral/titanium, /area/shuttle/escape) "cZs" = ( @@ -75399,11 +74969,7 @@ /turf/open/floor/engine, /area/science/xenobiology) "daC" = ( -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'HIGH VOLTAGE'"; - icon_state = "shock"; - name = "HIGH VOLTAGE" - }, +/obj/structure/sign/warning/electricshock, /turf/closed/wall/r_wall, /area/science/xenobiology) "daD" = ( @@ -76318,7 +75884,7 @@ /area/science/xenobiology) "dcK" = ( /obj/machinery/disposal/bin, -/obj/structure/sign/deathsposal{ +/obj/structure/sign/warning/deathsposal{ pixel_y = -32 }, /obj/structure/disposalpipe/trunk{ @@ -77169,7 +76735,7 @@ /turf/open/floor/plating, /area/engine/engineering) "deM" = ( -/obj/structure/sign/securearea, +/obj/structure/sign/warning/securearea, /turf/closed/wall/r_wall, /area/engine/engineering) "deN" = ( @@ -77206,7 +76772,7 @@ /turf/open/floor/engine, /area/engine/engineering) "deV" = ( -/obj/structure/sign/fire, +/obj/structure/sign/warning/fire, /turf/closed/wall/r_wall, /area/engine/supermatter) "deW" = ( @@ -77246,7 +76812,7 @@ /turf/closed/wall/r_wall, /area/engine/supermatter) "dfc" = ( -/obj/structure/sign/electricshock, +/obj/structure/sign/warning/electricshock, /turf/closed/wall/r_wall, /area/engine/supermatter) "dfd" = ( @@ -77278,7 +76844,7 @@ /turf/open/floor/plating, /area/engine/engineering) "dfh" = ( -/obj/structure/sign/nosmoking_2, +/obj/structure/sign/warning/nosmoking, /turf/closed/wall/r_wall, /area/engine/engineering) "dfi" = ( @@ -78921,20 +78487,17 @@ /turf/open/floor/mineral/titanium/blue, /area/shuttle/arrival) "djM" = ( -/obj/structure/shuttle/engine/propulsion{ - dir = 4 - }, -/obj/docking_port/mobile/arrivals, /obj/docking_port/stationary{ dir = 8; dwidth = 3; height = 15; id = "arrivals_stationary"; name = "arrivals"; - width = 7 + width = 7; + roundstart_template = /datum/map_template/shuttle/arrival/box }, -/turf/open/floor/plating/airless, -/area/shuttle/arrival) +/turf/open/space/basic, +/area/space) "djR" = ( /obj/machinery/door/airlock/titanium{ name = "Arrivals Shuttle Airlock" @@ -79573,10 +79136,6 @@ icon_state = "platingdmg3" }, /area/maintenance/port/aft) -"dxO" = ( -/obj/structure/closet/emcloset, -/turf/open/floor/plating, -/area/maintenance/starboard/aft) "dxQ" = ( /obj/structure/cable/yellow{ icon_state = "4-8" @@ -79629,17 +79188,6 @@ /obj/effect/spawner/lootdrop/maintenance, /turf/open/floor/plating, /area/maintenance/port/aft) -"dyQ" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/turf/open/floor/plating{ - icon_state = "platingdmg1" - }, -/area/maintenance/starboard/aft) "dzc" = ( /obj/machinery/space_heater, /turf/open/floor/plating, @@ -79661,14 +79209,6 @@ /obj/structure/reagent_dispensers/fueltank, /turf/open/floor/plating, /area/maintenance/starboard/aft) -"dzR" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/obj/effect/landmark/event_spawn, -/turf/open/floor/plating, -/area/maintenance/starboard/aft) "dAd" = ( /obj/machinery/power/apc/highcap/five_k{ dir = 2; @@ -80490,28 +80030,6 @@ /turf/open/floor/plating/airless, /area/space/nearstation) "EDi" = ( -/obj/docking_port/mobile{ - callTime = 250; - dheight = 0; - dir = 2; - dwidth = 11; - height = 15; - id = "whiteship"; - launch_status = 0; - movement_force = list("KNOCKDOWN" = 0, "THROW" = 0); - name = "NT Recovery White-Ship"; - port_direction = 8; - preferred_direction = 4; - roundstart_move = "whiteship_away"; - width = 28 - }, -/obj/machinery/door/airlock/titanium{ - name = "recovery shuttle external airlock" - }, -/obj/effect/decal/cleanable/dirt{ - desc = "A thin layer of dust coating the floor."; - name = "dust" - }, /obj/docking_port/stationary{ dir = 2; dwidth = 11; @@ -80520,14 +80038,14 @@ name = "SS13: Auxiliary Dock, Station-Port"; width = 28 }, -/turf/open/floor/mineral/titanium/blue, -/area/shuttle/abandoned) +/turf/open/space/basic, +/area/space) "EDj" = ( -/obj/structure/sign/restroom, +/obj/structure/sign/departments/restroom, /turf/closed/wall/mineral/titanium, /area/shuttle/abandoned) "EDk" = ( -/obj/structure/sign/cargo, +/obj/structure/sign/departments/cargo, /turf/closed/wall/mineral/titanium, /area/shuttle/abandoned) "EDl" = ( @@ -80625,7 +80143,7 @@ id = "research_shutters"; name = "research shutters" }, -/turf/open/floor/plating, +/turf/open/floor/plasteel/whitepurple, /area/science/lab) "QsY" = ( /obj/structure/table, @@ -80727,10 +80245,6 @@ /obj/structure/lattice, /turf/open/space/basic, /area/space) -"Qtk" = ( -/obj/structure/lattice, -/turf/open/space/basic, -/area/space) "Qtl" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable/yellow{ @@ -80746,24 +80260,6 @@ "Qtm" = ( /turf/closed/wall, /area/science/circuit) -"Qtn" = ( -/turf/closed/wall, -/area/science/circuit) -"Qto" = ( -/turf/closed/wall, -/area/science/circuit) -"Qtp" = ( -/turf/closed/wall, -/area/science/circuit) -"Qtq" = ( -/turf/closed/wall, -/area/science/circuit) -"Qtr" = ( -/turf/closed/wall, -/area/science/circuit) -"Qts" = ( -/turf/closed/wall, -/area/science/circuit) "Qtt" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -80871,27 +80367,12 @@ }, /turf/open/floor/plasteel/white, /area/science/circuit) -"QtC" = ( -/turf/closed/wall, -/area/science/circuit) "QtD" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 }, /turf/open/floor/plasteel, /area/science/circuit) -"QtE" = ( -/turf/open/floor/plasteel, -/area/science/circuit) -"QtF" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/turf/open/floor/plasteel, -/area/science/circuit) -"QtG" = ( -/turf/open/floor/plasteel/white, -/area/science/circuit) "QtH" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel/white, @@ -81001,9 +80482,6 @@ }, /turf/open/floor/plasteel/white, /area/science/circuit) -"QtX" = ( -/turf/closed/wall, -/area/science/circuit) "QtY" = ( /obj/structure/chair/comfy, /turf/open/floor/plasteel, @@ -81025,20 +80503,12 @@ }, /turf/open/floor/plasteel, /area/science/circuit) -"Quc" = ( -/obj/effect/turf_decal/stripes/line, -/turf/open/floor/plasteel, -/area/science/circuit) "Qud" = ( /obj/effect/turf_decal/stripes/line{ dir = 6 }, /turf/open/floor/plasteel, /area/science/circuit) -"Que" = ( -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/science/circuit) "Quf" = ( /obj/structure/table/glass, /obj/machinery/camera/autoname{ @@ -81047,13 +80517,6 @@ }, /turf/open/floor/plasteel, /area/science/misc_lab) -"Qug" = ( -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/turf/open/floor/plasteel, -/area/science/misc_lab) "Quh" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 6 @@ -81128,73 +80591,16 @@ /obj/machinery/libraryscanner, /turf/open/floor/plasteel/white, /area/science/circuit) -"Qut" = ( -/turf/closed/wall, -/area/science/circuit) -"Quu" = ( -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/turf/open/floor/plasteel, -/area/science/misc_lab) -"Quv" = ( -/turf/closed/wall, -/area/science/circuit) "Quw" = ( /obj/effect/turf_decal/stripes/line{ dir = 2 }, /turf/closed/wall, /area/science/circuit) -"Qux" = ( -/turf/closed/wall, -/area/science/circuit) -"Quy" = ( -/turf/closed/wall, -/area/science/circuit) -"Quz" = ( -/turf/closed/wall, -/area/science/circuit) -"QuA" = ( -/turf/closed/wall, -/area/science/circuit) -"QuB" = ( -/turf/closed/wall, -/area/science/circuit) -"QuC" = ( -/turf/closed/wall, -/area/science/circuit) -"QuD" = ( -/turf/closed/wall, -/area/science/circuit) -"QuE" = ( -/turf/closed/wall, -/area/science/circuit) -"QuF" = ( -/turf/closed/wall, -/area/science/circuit) -"QuG" = ( -/turf/closed/wall, -/area/science/circuit) -"QuH" = ( -/turf/closed/wall, -/area/science/circuit) -"QuI" = ( -/turf/closed/wall, -/area/science/circuit) "QuJ" = ( /obj/structure/lattice, /turf/open/space/basic, /area/space/nearstation) -"QuK" = ( -/obj/structure/lattice, -/turf/open/space/basic, -/area/space/nearstation) -"QuL" = ( -/obj/structure/lattice, -/turf/open/space/basic, -/area/space/nearstation) "QuM" = ( /obj/machinery/vending/assist, /turf/open/floor/plasteel, @@ -81208,18 +80614,6 @@ }, /turf/open/floor/plasteel, /area/science/mixing) -"QuO" = ( -/obj/structure/lattice, -/turf/open/space/basic, -/area/space/nearstation) -"QuP" = ( -/obj/structure/lattice, -/turf/open/space/basic, -/area/space/nearstation) -"QuQ" = ( -/obj/structure/lattice, -/turf/open/space/basic, -/area/space/nearstation) "QuR" = ( /obj/machinery/vending/snack/random, /turf/open/floor/plasteel, @@ -81246,18 +80640,10 @@ }, /turf/open/floor/plating, /area/maintenance/starboard/aft) -"QuV" = ( -/obj/structure/lattice, -/turf/open/space/basic, -/area/space) "QuW" = ( /obj/effect/landmark/event_spawn, /turf/open/floor/plasteel/white, /area/science/circuit) -"QuX" = ( -/obj/effect/landmark/event_spawn, -/turf/open/floor/plasteel/white, -/area/science/circuit) (1,1,1) = {" aaa @@ -87057,11 +86443,11 @@ aaa aaa aaa aaa -cVF -cVF -cVI -cVF -cVF +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -87310,19 +86696,19 @@ aaa aac aaa aaa -cVN -cWf -cWf -cWf -cVG -cWX -cVY -cXw -cVG -cWf -cWf -cWf -cYq +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -87566,21 +86952,21 @@ aaa aaa aaa aaa -cVF -cVF -cWe -cWe -cVF -cVF -cVF -cXg -cVF -cVF -cVF -cWe -cWe -cVF -cVF +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -87823,21 +87209,21 @@ aaa aaa aaa aaa -cVF -cVF -cVF -cVF -cVF -cWO -cWY -cVY -cXx -cXF -cVF -cVF -cVF -cVF -cVF +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -88080,21 +87466,21 @@ aaa aaa aaa aaa -cVF -cVO -cVF -cWu -EDj -cWo -cWo -cWo -cWo -cWo -cVF -cXS -cYd -cYr -cVF +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -88337,21 +87723,21 @@ aaa aaa aaa aaa -cVG -cVR -cWi -cWv -cWG -cWQ -cXa -cXi -cXb -cWo -cXM -cXT -cVY -cYr -cVG +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -88594,21 +87980,21 @@ aaa aaa aaa aaa -cVF -cVF -cVF -cVF -cVF -cWP -cWZ -cXh -cXy -cWo -cXL -cVY -cWo -cYs -cVG +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -88851,21 +88237,21 @@ aaa aaa aaa aaa -cVG -cVT -cWk -cWx -cWI -cWR -cWZ -cXk -cXy -dlm -cVF -cXU -cYf -cYr -cVF +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -89108,21 +88494,21 @@ aaa aaa aaa aaa -cVF -cVS -cWj -cWw -cWH -cWo -cWZ -cXj -cXy -cWo -cVF -cVF -cYe -cVF -cVF +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -89365,21 +88751,21 @@ aaa aaa aaa aaa -cVF -cVF -cVF -cVF -cVF -cWo -cXb -cXl -cXa -cWo -cXN -cWo -cYg -cYu -cVF +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -89622,21 +89008,21 @@ aaa aaa aaa aaa -cVF -cVU -cWl -cWy -cVF -cWS -cWo -cVY -cWo -cWo -cVF -cXV -cVY -cYt -cVG +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -89879,21 +89265,21 @@ aaf aaf aaf aaf -cVG -cVV -cWm -cWz -cVF -cVF -cVF -cXm -cVF -cVF -cVF -cXX -cYi -cYw -cVG +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -90127,7 +89513,7 @@ aaa aaf aaa aaa -cVm +aaa aaa aaa aaf @@ -90136,21 +89522,21 @@ aaa aaf aaa aaf -cVG -cVV -cVY -cWo -cWn -cVY -cWo -cWo -cWo -cWo -cVF -cXW -cYh -cYv -cVF +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -90383,9 +89769,9 @@ aVs aVs aVs aaa -cVm -cVw -cVm +aaa +aaa +aaa aaa aVs aVs @@ -90393,21 +89779,21 @@ aVs aVs aaa aaf -cVF -cVX -cWo -cWB -cVF -cWo -cXa -cXo -cXa -cWo -cVF -cVF -cVF -cVF -cVF +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -90627,11 +90013,11 @@ aVs aaf aaf aaa -bcS -bcS -bcU -bcS -bcS +aaa +aaa +aaa +aaa +aaa aaa aaf aaf @@ -90640,9 +90026,9 @@ bvB aWT aVs aaa -cVr -cVv -ddL +aaa +aaa +aaa aaa aVs bKS @@ -90650,21 +90036,21 @@ aWT aVs aVs aVs -cVF -cVF -cWn -cVF -cVF -dll -cXb -cXn -cXb -cXG -cVF -cXY -dlo -cYx -cVF +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -90884,11 +90270,11 @@ aYC aaa aaf aaa -bcS -bgq -beC -bjU -bcS +aaa +aaa +aaa +aaa +aaa aaa aaf aaa @@ -90897,9 +90283,9 @@ aVu aWU aRA aaa -cVn -dlF -cVn +aaa +aaa +aaa aaa aRA btS @@ -90907,21 +90293,21 @@ aWU bOd bPA bOd -cVI -cVZ -cWo -cVY -cWL -cWo -cWR -cXq -cWo -cWo -cXO -cWo -cYl -cYz -cVG +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -91141,11 +90527,11 @@ aVs aaf aaf aaa -bcS -dli -beC -dlj -bcS +aaa +aaa +aaa +aaa +aaa aaa aaf aaf @@ -91153,11 +90539,11 @@ aVs aVw aWU aVs -cVn -cVn -ddJ -cVn -cVn +aaa +aaa +aaa +aaa +aaa aVs aVw aWU @@ -91165,20 +90551,20 @@ bOd aZZ bOd EDi -cVY +aaa cWp -dlk -cWL -cVY -cWo -cXp -cVY -cWo -cVF -cXa -dlp -cYy -cVF +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -91397,45 +90783,45 @@ aWV aRA aaa aaa -bcS -bcS -bcS -bcT -bcS -bcS -bcS +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aRA bvC bxt aYC -cVp -cVu -cVv -cVB -cVp +aaa +aaa +aaa +aaa +aaa aYC bKT aWU aVs aVs aVs -cVF -cVF -cWr -cVF -cVF -cWo -cXa -cXs -cXa -dln -cVF -cVF -cVF -cVF -cVF +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -91654,45 +91040,45 @@ aWU aVs aVs aVs -bcS -beB -beC -beC -beC -blN -bcS +aaa +aaa +aaa +aaa +aaa +aaa +aaa aVs aVs aVs bvD aWU aVs -cVn -cVu -cVv -cVB -cVn +aaa +aaa +aaa +aaa +aaa aVs aVw aWU aVs aaa aaf -cVF -cWa -cWq -cWC -EDk -cWo -cXa -cXr -cXb -cWo -cXP -cYa -cYm -cYA -cVF +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -91911,45 +91297,45 @@ aWU djz aZZ djC -bcT -beC -djE -djE -djE -beC -djR +aaa +aaa +aaa +aaa +aaa +aaa +aaa djz bsk djC aVu bxu aRA -cVn -dlE -cVv -cVv -cVn +aaa +aaa +aaa +aaa +aaa aRA aVu aWU aVs aaf aaf -cVG -cWc -cWs -cWs -cWN -cWo -cWo -cVY -cWo -cWo -cXQ -cVY -cYo -cYC -cVG +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -92168,45 +91554,45 @@ aWU aVs aVs aVs -bcS -beD -beC -beC -beC -blO -bcS +aaa +aaa +aaa +aaa +aaa +aaa +aaa aVs aVs aVs aVu bxv aVs -ddH -cVv -ddK -cVv -ddM +aaa +aaa +aaa +aaa +aaa aVs aVu bMu aRA aaa aaf -cVG -cWb -cWs -cWD -cVF -cVF -cVF -cXt -cVF -cVF -cVF -cYb -cYn -cYB -cVG +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -92425,45 +91811,45 @@ aWW aWT baa aVs -bcU -beE -djE -djE -djE -beC -bcU +aaa +aaa +aaa +aaa +aaa +aaa +aaa aVs bsl btO bvE bxw aVs -cVn -cVv -cVv -dlG -cVn +aaa +aaa +aaa +aaa +aaa aVs bKU bMv aVs aaa aaf -cVF -cWd -cWt -cWE -cVF -cWU -EDm -cWo -cXa -dDP -cVF -cJI -cYp -cYD -cVF +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaf @@ -92682,45 +92068,45 @@ bvF aWU baa aVs -bcS -beF -beC -beC -beC -blP -bcS +aaa +aaa +aaa +aaa +aaa +aaa +aaa aVs bsm aVu bvF bxw aVs -cVn -cVu +aaa +aaa cVv -cVB -cVn +aaa +aaa aVs aVu bMw aRA aaa aaf -cVF -cVF -cVG -cVF -cVF -cWT -dDN -cWo -dDO -cXH -cVF -cVF -cVG -cVF -cVF +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaf @@ -92939,24 +92325,24 @@ bvF aWU bab aVs -bcS -beG -djE -djE -djE -blQ -bcS +aaa +aaa +aaa +aaa +aaa +aaa +aaa aVs baa btP aWX bxx aRA -cVp -cVu -cVv -cVB -cVp +aaa +aaa +aaa +aaa +aaa aRA btS bxw @@ -92967,13 +92353,13 @@ aaa aaa aaa aaa -cVG -cWW -cWo -cXv -cXD -cXK -cVG +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -93196,24 +92582,24 @@ aWY aYE bac aVs -bcU -beH -beC -beC -beC -beC -bcU +aaa +aaa +aaa +aaa +aaa +aaa +aaa aVs bsn btQ bvG bxw aVs -cVn -cVp +aaa +aaa cVx -cVp -cVn +aaa +aaa aVs aVu bxw @@ -93224,13 +92610,13 @@ aaa aaa aaa aaa -cVG -cWV -cXf -cXu -cXC -cXJ -cVG +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -93453,13 +92839,13 @@ aWZ aVs aVs aVs -bcS -beI -djE -djE -djE -blR -bcS +aaa +aaa +aaa +aaa +aaa +aaa +aaa aVs aVs aVs @@ -93481,13 +92867,13 @@ aaa aaa aaa aaa -EDl -cVG -cVG -cVG -cVG -cVG -EDl +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -93710,13 +93096,13 @@ aWZ djz aZZ djC -bcT +aaa +aaa +aaa beC -beC -beC -beC -beC -bcT +aaa +aaa +aaa djz bsk djC @@ -93967,13 +93353,13 @@ aWZ aVs aVs aVs -bcS -bcS -bgt -bgt -bgt -bcS -bcS +aaa +aaa +aaa +aaa +aaa +aaa +aaa aVs aVs aVs @@ -94224,13 +93610,13 @@ aXa aYF aVs aaa -bcS -beJ -bgu +aaa +aaa +aaa djM -bgu -blS -bcS +aaa +aaa +aaa aaa aVs btR @@ -95742,25 +95128,25 @@ doJ atq aaf aaa -awN -awN -awO -awN -awO -awN -awN aaa -cUS -cUS -cUS -cUS -cUS -cUS -cUS -cUS -cUS -cUS -cUS +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa dne @@ -95999,26 +95385,26 @@ doJ atq aaf aaa -awN -ayg -azh -dlB -azi -aDe -awN aaa -cUS -cUV -cUV -cUV -cUV -dlD -cUV -cUV -cUV -cVc -cUS -cVk +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaf dne bag @@ -96256,26 +95642,26 @@ doJ atq aaf aaa -awO -ayh -azi -azh -azi -aDf -aEu aaa -cUS -cUV -cUV -cUV -cUV -cUV -cUV -cUV -cUV -cUV -cVg -cVj +aaa +aaa +azh +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaf aip doJ @@ -96513,26 +95899,26 @@ doJ atq aaf aaa -awN -ayg -azh -azh -azi -aDg -awN aaa -cUS -dlC -cUV -cUV -cUV -cUV -cUV -cUV -cUV -cUV -cVg -cVj +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aip asi @@ -96770,26 +96156,26 @@ doJ atq aaf aaa -awN -awN -awO -aAA -awO -awN -awN aaa -cUS +aaa +aaa +aAA +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa cUV -cUV -cUV -cUV -cUV -cUV -cUV -cUV -cUV -cVg -cVj +aaa +aaa +aaa +aaa +aaa aaa aip doJ @@ -96809,7 +96195,7 @@ bxJ bzx bBi bCM -bEr +bBg bBg bHM bJv @@ -97035,18 +96421,18 @@ ayi ayi aaf aaa -cUS -cUV -cUV -cUV -cUV -cUY -cUV -cUV -cUV -cVc -cUS -cVl +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaf dne daX @@ -97292,17 +96678,17 @@ aBS ayi aaf aaa -cUS -cUS -cUS -cUW -cUX -cUS +aaa +aaa +aaa +aaa +aaa +aaa cUZ -cTh -cUS -cUS -cUS +aaa +aaa +aaa +aaa aaa aaf dne @@ -99616,7 +99002,7 @@ aQl aMv aSS aMv -aVI +aQl aXh aMv bar @@ -101182,7 +100568,7 @@ bEy bGr bwd bwd -bLj +bwd bMK bOl bPR @@ -102706,7 +102092,7 @@ aYT baC bbZ bdu -bfe +bbZ bgX biQ bkv @@ -103555,16 +102941,16 @@ dbF cMI aaa aaa -cZj -cZj -cZj -cZe -cZj -cZj -cZe -cZj -cZj -cZj +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -103811,18 +103197,18 @@ cRn cOS cMI aaa -cZe -cZl -cZl -cZl -cZe -cZl -cZl -cZe -cZl -cZl -cZl -cZe +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -103963,15 +103349,15 @@ aoj apC doA dne -auQ -auQ -atJ -auQ -auQ -atJ -auQ -auQ -auQ +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aDu aDu aDu @@ -104067,20 +103453,20 @@ cQE cQl cRo cMI -cZe -cZe -cYF -cYF -cYF -cZe -cYF -cYF -cZe -cYF -cYF -cYF -cZe -cZe +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -104220,15 +103606,15 @@ aok aox aqV dne -atJ -auR -avU -awX -ayt -azA -aAU -aCi -aDt +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa azC aFV aHu @@ -104324,20 +103710,20 @@ cQF cQV cRp cRL -cYF -daj -dai -dak -dal -dan -dam -dao -dax -cZL -cZL -cZL -dar -cYF +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -104477,15 +103863,15 @@ aol apD aqW dne -atJ -auS -avV -auQ -dlA +aaa +aaa +aaa +aaa +aaa +aaa ayt -ayt -aCi -aDt +aaa +aaa azC aFW aHv @@ -104581,20 +103967,20 @@ cQF cOP cRp cRL -cYF -daf -cYO -dag -cZZ -cZm -cYO -cZy -cZe -cYV -dly -cYV -cYV -dae +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -104734,15 +104120,15 @@ aom ajm dne dne -atJ -auT -avW -awY -ayu -azB -ayt -aCi -aDt +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa azC aFW aHw @@ -104838,20 +104224,20 @@ cQG cQW cRq cRL -cYF -daa -cZm -cYO -cYO -cYO -dag -cZA -cZe -dae -cYI -cYV -cYV -dae +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -104991,15 +104377,15 @@ aon ajm aqX dne -auQ -auQ -avX -auQ -auQ -auQ +aaa +aaa +aaa +aaa +aaa +aaa aAV -auQ -auQ +aaa +aaa aDu aFX aHx @@ -105095,20 +104481,20 @@ cQF cOP cRp cRL -cYF -cZT -cZS -cYO -cYO -cYO -dlt -cYO -cZV -dlx -cZe -dad -dad -cYF +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -105289,7 +104675,7 @@ bAZ bkz bzN bBB -bDc +bDa bEG bGB bIb @@ -105352,20 +104738,20 @@ cQF cQV cRp cRL -cZe -cZe -cZn -cZe -cZQ -cZe -cZn -cZe -cZe -cZe -cZe -cZn -cZe -cZe +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -105609,20 +104995,20 @@ cQH cQX cRr cMI -cZe -cZK -dlr -cYO -cYO -cYO -dlr -cZK -cZe -cZD -cZD -cZD -daq -cZe +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -105750,7 +105136,7 @@ ady adT adc aeW -afQ +afK agJ ahx ait @@ -105866,20 +105252,20 @@ cQI cZc cZd cMI -cYF -cYO -cYO -cYO -cYO -cYO -cYO -cYO -cZI -cZG -cZG -cZG -cZJ -cYF +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -106123,20 +105509,20 @@ cMI cMI cMI cMI -cZe -cZi -cYO -cZo -cYF -cZi -cYO -cZo -cYF -cZF -cZG -cZG -cZH -cYF +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -106380,20 +105766,20 @@ cQJ cQY cRs cQY -cYH -cYO -cYO -cZo -dat -cZi -cYO -cZo -cZe -cZF -cZY -dlz -cZE -cZe +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -106637,20 +106023,20 @@ cQK cPv cPv cPv -cZe -dlq -cYO -cZo -cYF -cZi -cYO -cZk -cZe -cZe -dab -cZn -cZe -cZe +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -106894,20 +106280,20 @@ cQL cQY cQK cQY -cYH -cYO -cYO -cZo -dax -cZi -cYO -cZo -cZe -cZx -cZw -cZz -das -cZe +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -107141,7 +106527,7 @@ cKy cLo cLm cLm -cNM +cLm cOr cOU dDG @@ -107151,20 +106537,20 @@ cQK cPv cPv cPv -cZg -cZi -cYO -cZo -cYF -cZi -cYO -cZo -cYF -cZM -cYO -cYO -dau -cYF +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -107408,20 +106794,20 @@ cQK cPv aaa aaf -cYF -cZi -cYO -cYO -cYO -cYO -cYO -cYO -cZp -cYO -cYO -cYO -cZt -cYF +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -107665,20 +107051,20 @@ cQM cPv aaa aaf -cYF -cZi -cYO -cZo -cYF -cZi -cYO -cZo -cYF -dlH -cZN -cYO -cZs -cZe +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -107922,20 +107308,20 @@ cQK cPv aaa aaf -cYF -cZi -cYO -cZo -cYY -cZi -cYO -cZo -cZr -cZe -cYF -cZp -cZr -cZe +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -108179,20 +107565,20 @@ cQK cPv cPv cPv -cZe -cYS -cYO -cZo -cYF -cZi -cYO -dlw -cZe -cZO -dac -dah -dav -cZe +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -108437,19 +107823,19 @@ cQY cQK cQY cYJ +aaa cYO -cYO -cZo -cYZ -cZi -cYO -cZo -cYF -cZP -cYX -cYV -cZB -cZe +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -108693,20 +108079,20 @@ cQO cPv cPv cPv -cYF -cZi -cYO -cZo -cYF -cZi -cYO -cZo -dax -cZU -cYV -cYV -cZb -cYF +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -108950,20 +108336,20 @@ cQP cQY cRt cQY -cYH -cYO -cYO -cYO -cYO -cYO -cYO -cYO -cZC -cZW -cYV -cYX -cYW -cYF +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -109207,20 +108593,20 @@ cPb cPv cPv cPv -cZe -cYO -cYO -cYO -cYO -cYO -cYO -cYO -cZC -cZW -cYV -cYV -daw -cZe +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -109464,20 +108850,20 @@ aaf aaa aaa aaf -cZe -cYN -cYM -cYO -dls -cYO -dlv -cYN -cZg -cZX -cZW -cZW -cYU -cZe +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -109721,20 +109107,20 @@ aaf aaf aaf aaf -cZe -cZe -cZe -cYF -cYF -cYF -cZe -cZe -cZe -cZe -cYF -cYF -cZe -cZe +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -111200,7 +110586,7 @@ bwB byp bAd byo -bDt +bDj bEZ bGM bIp @@ -113540,7 +112926,7 @@ cgo cgo cgo ccd -cps +cpr cci crQ ctc @@ -115055,7 +114441,7 @@ bwN byz bAj bBU -bDE +bwO dDb bHb bMP @@ -117145,9 +116531,9 @@ dwL dxQ cuZ Qtt -QtE -QtE -Quc +cwZ +cwZ +cyM Quk Qtm cQv @@ -117402,9 +116788,9 @@ ctk cuc cuZ dyp -QtE -QtE -Quc +cwZ +cwZ +cyM Qul Qtm czF @@ -117587,7 +116973,7 @@ asY aui avm asY -axH +aui ayO aAg aBA @@ -117659,10 +117045,10 @@ dvY Qtc cuZ Qtu -QtF -QtF +cxN +cxN Qud -QtG +cxO Qtm czG cAN @@ -117916,8 +117302,8 @@ dvY cud cuZ Qtv -QtG -QtG +cxO +cxO QuW Qum Qtm @@ -118175,7 +117561,7 @@ Qtl cwd QtH cxP -QtG +cxO Qun Qtm czI @@ -118432,7 +117818,7 @@ Qtm Qtw QtI QtR -QtG +cxO Quo Qtm aaf @@ -118689,8 +118075,8 @@ Qtm Qtx QtJ QtS -QuX -QtG +QuW +cxO Qtm aaf aaa @@ -118946,7 +118332,7 @@ Qtm Qty QtK QtT -QtG +cxO Qup Qtm aaa @@ -119203,7 +118589,7 @@ Qtm Qtz QtL QtU -QtG +cxO Quq Qtm aaa @@ -119460,7 +118846,7 @@ Qtm QtA QtM QtV -QtG +cxO Qur Qtm aaa @@ -119717,7 +119103,7 @@ Qtm QtB QtN QtW -QtG +cxO Qus Qtm aaa @@ -124313,7 +123699,7 @@ bHx bIU bKB bMh -bNT +bCi bCi bKD bCi diff --git a/_maps/map_files/Mining/Lavaland.dmm b/_maps/map_files/Mining/Lavaland.dmm index a7b9d0e994..ca38e24e2b 100644 --- a/_maps/map_files/Mining/Lavaland.dmm +++ b/_maps/map_files/Mining/Lavaland.dmm @@ -76,9 +76,6 @@ "an" = ( /turf/closed/mineral/random/labormineral/volcanic, /area/lavaland/surface/outdoors) -"ao" = ( -/turf/closed/mineral/random/volcanic, -/area/lavaland/surface/outdoors) "ap" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, @@ -579,10 +576,7 @@ /turf/open/floor/plating, /area/mine/laborcamp) "bN" = ( -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'KEEP CLEAR OF DOCKING AREA'."; - name = "KEEP CLEAR: DOCKING AREA" - }, +/obj/structure/sign/warning/docking, /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/mine/production) @@ -930,11 +924,7 @@ /turf/closed/wall, /area/mine/living_quarters) "cN" = ( -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'HIGH VOLTAGE'"; - icon_state = "shock"; - name = "HIGH VOLTAGE" - }, +/obj/structure/sign/warning/electricshock, /turf/closed/wall, /area/mine/living_quarters) "cO" = ( @@ -1172,10 +1162,6 @@ dir = 4 }, /area/mine/production) -"dt" = ( -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/mine/production) "du" = ( /obj/effect/turf_decal/loading_area, /turf/open/floor/plasteel, @@ -3311,24 +3297,6 @@ /obj/effect/baseturf_helper/picky/lava_land/plating, /turf/closed/wall, /area/mine/laborcamp/security) -"Wu" = ( -/obj/effect/baseturf_helper/lava_land/surface, -/turf/closed/wall, -/area/mine/laborcamp) -"Ww" = ( -/obj/effect/baseturf_helper/lava_land/surface, -/turf/open/floor/plasteel, -/area/mine/living_quarters) -"Wx" = ( -/obj/effect/baseturf_helper/lava_land/surface, -/turf/open/floor/plasteel/brown{ - dir = 4 - }, -/area/mine/eva) -"Wy" = ( -/obj/effect/baseturf_helper/lava_land/surface, -/turf/open/floor/plasteel, -/area/mine/production) "Wz" = ( /obj/effect/mapping_helpers/planet_z, /turf/open/lava/smooth/lava_land_surface, diff --git a/_maps/map_files/OmegaStation/OmegaStation.dmm b/_maps/map_files/OmegaStation/OmegaStation.dmm index 45ab557836..affa418786 100644 --- a/_maps/map_files/OmegaStation/OmegaStation.dmm +++ b/_maps/map_files/OmegaStation/OmegaStation.dmm @@ -27,7 +27,7 @@ /turf/open/space, /area/space/nearstation) "aah" = ( -/obj/structure/sign/securearea, +/obj/structure/sign/warning/securearea, /turf/closed/wall, /area/asteroid/nearstation) "aai" = ( @@ -821,7 +821,6 @@ icon_state = "1-4" }, /obj/machinery/holopad, -/obj/effect/landmark/lightsout, /turf/open/floor/plasteel/vault, /area/bridge) "abF" = ( @@ -909,7 +908,7 @@ /turf/open/floor/plasteel, /area/maintenance/starboard/fore) "abN" = ( -/obj/structure/sign/vacuum, +/obj/structure/sign/warning/vacuum, /turf/closed/wall, /area/maintenance/starboard) "abO" = ( @@ -985,7 +984,7 @@ /turf/closed/wall, /area/crew_quarters/heads/captain/private) "abZ" = ( -/obj/structure/sign/vacuum{ +/obj/structure/sign/warning/vacuum{ pixel_y = 32 }, /obj/structure/displaycase/captain{ @@ -1189,7 +1188,7 @@ /obj/machinery/light{ dir = 4 }, -/obj/structure/sign/vacuum{ +/obj/structure/sign/warning/vacuum{ pixel_y = 32 }, /obj/machinery/atmospherics/components/unary/vent_pump/on, @@ -1325,7 +1324,7 @@ /area/asteroid/nearstation) "acI" = ( /obj/structure/dresser, -/obj/structure/sign/vacuum{ +/obj/structure/sign/warning/vacuum{ pixel_y = 32 }, /obj/machinery/camera{ @@ -1709,7 +1708,7 @@ /area/quartermaster/storage) "adq" = ( /obj/effect/spawner/structure/window/reinforced, -/obj/structure/sign/vacuum, +/obj/structure/sign/warning/vacuum, /turf/open/floor/plating, /area/quartermaster/storage) "ads" = ( @@ -1735,7 +1734,7 @@ /turf/open/floor/plating, /area/asteroid/nearstation) "adz" = ( -/obj/structure/sign/vacuum, +/obj/structure/sign/warning/vacuum, /turf/closed/wall, /area/asteroid/nearstation) "adA" = ( @@ -1865,7 +1864,7 @@ /obj/structure/cable/white{ icon_state = "2-8" }, -/obj/structure/sign/goldenplaque/captain{ +/obj/structure/sign/plaques/golden/captain{ pixel_x = 32 }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, @@ -1899,7 +1898,7 @@ /area/ai_monitored/turret_protected/ai) "adR" = ( /obj/effect/spawner/structure/window/reinforced, -/obj/structure/sign/electricshock{ +/obj/structure/sign/warning/electricshock{ pixel_x = 32 }, /obj/structure/cable/white{ @@ -1931,7 +1930,7 @@ }, /area/bridge) "adU" = ( -/obj/structure/sign/electricshock{ +/obj/structure/sign/warning/electricshock{ pixel_x = -32 }, /obj/structure/cable/white, @@ -2004,7 +2003,7 @@ /obj/machinery/light{ dir = 1 }, -/obj/structure/sign/nosmoking_2{ +/obj/structure/sign/warning/nosmoking{ pixel_y = 32 }, /obj/effect/turf_decal/stripes/line{ @@ -2189,7 +2188,7 @@ /obj/structure/cable/white, /obj/effect/spawner/structure/window/reinforced, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/structure/sign/electricshock{ +/obj/structure/sign/warning/electricshock{ pixel_x = 32 }, /turf/open/floor/plating, @@ -2442,12 +2441,16 @@ /turf/open/floor/plasteel, /area/quartermaster/storage) "aeZ" = ( -/obj/machinery/door/airlock/shuttle{ - name = "Supply Shuttle Airlock"; - req_access_txt = "31" +/obj/docking_port/stationary{ + dir = 4; + dwidth = 9; + height = 7; + id = "supply_home"; + name = "Cargo Bay"; + width = 20 }, -/turf/open/floor/plating, -/area/shuttle/supply) +/turf/open/space/basic, +/area/space) "afa" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -3115,7 +3118,7 @@ dir = 4 }, /obj/machinery/recharge_station, -/obj/structure/sign/nosmoking_2{ +/obj/structure/sign/warning/nosmoking{ pixel_x = 32 }, /obj/effect/turf_decal/stripes/line{ @@ -3286,22 +3289,6 @@ }, /turf/open/floor/plasteel, /area/quartermaster/storage) -"agD" = ( -/obj/docking_port/mobile/supply{ - dwidth = 5; - roundstart_move = "supply_away"; - width = 12 - }, -/obj/docking_port/stationary{ - dir = 8; - dwidth = 5; - height = 7; - id = "supply_home"; - name = "Cargo Bay"; - width = 12 - }, -/turf/closed/wall/mineral/titanium, -/area/shuttle/supply) "agE" = ( /obj/item/ore/silver, /obj/item/ore/iron, @@ -3935,7 +3922,7 @@ /turf/open/floor/plating, /area/maintenance/fore) "ahH" = ( -/obj/structure/sign/securearea{ +/obj/structure/sign/warning/securearea{ pixel_x = -32 }, /obj/structure/closet/secure_closet/captains, @@ -4231,7 +4218,7 @@ pixel_x = 3; pixel_y = -3 }, -/obj/structure/sign/nosmoking_2{ +/obj/structure/sign/warning/nosmoking{ pixel_y = 32 }, /obj/effect/turf_decal/bot, @@ -4240,7 +4227,7 @@ }, /area/security/brig) "aip" = ( -/obj/structure/sign/electricshock, +/obj/structure/sign/warning/electricshock, /turf/closed/wall/r_wall, /area/security/brig) "aiq" = ( @@ -4452,7 +4439,7 @@ /turf/open/floor/plasteel, /area/hallway/primary/central) "aiG" = ( -/obj/structure/sign/electricshock, +/obj/structure/sign/warning/electricshock, /turf/closed/wall, /area/hallway/primary/central) "aiH" = ( @@ -4825,7 +4812,7 @@ }, /area/hallway/primary/central) "ajq" = ( -/obj/structure/sign/securearea{ +/obj/structure/sign/warning/securearea{ pixel_y = 32 }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ @@ -4904,7 +4891,7 @@ }, /area/hallway/primary/central) "ajx" = ( -/obj/structure/sign/securearea{ +/obj/structure/sign/warning/securearea{ pixel_y = 32 }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ @@ -5238,7 +5225,6 @@ }, /area/hallway/primary/central) "akd" = ( -/obj/effect/landmark/lightsout, /obj/structure/cable/white{ icon_state = "1-2" }, @@ -5328,7 +5314,7 @@ }, /area/hallway/primary/central) "akk" = ( -/obj/structure/sign/electricshock{ +/obj/structure/sign/warning/electricshock{ pixel_y = -32 }, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ @@ -5511,7 +5497,6 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, -/obj/effect/landmark/lightsout, /obj/structure/cable/white{ icon_state = "1-4" }, @@ -5669,7 +5654,7 @@ /turf/open/floor/plasteel, /area/hallway/primary/central) "akI" = ( -/obj/structure/sign/electricshock{ +/obj/structure/sign/warning/electricshock{ pixel_y = -32 }, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ @@ -5752,7 +5737,7 @@ /turf/open/floor/plating/airless, /area/shuttle/supply) "akT" = ( -/obj/structure/sign/electricshock{ +/obj/structure/sign/warning/electricshock{ pixel_x = -32 }, /obj/structure/cable/white{ @@ -5853,7 +5838,7 @@ /turf/closed/wall, /area/security/brig) "alb" = ( -/obj/structure/sign/electricshock{ +/obj/structure/sign/warning/electricshock{ pixel_x = -32 }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, @@ -6141,7 +6126,6 @@ /obj/structure/cable/white{ icon_state = "2-4" }, -/obj/effect/landmark/lightsout, /turf/open/floor/plasteel/neutral, /area/quartermaster/storage) "alF" = ( @@ -6241,7 +6225,6 @@ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/effect/landmark/lightsout, /turf/open/floor/plasteel/neutral/side{ dir = 4 }, @@ -6840,7 +6823,7 @@ }, /area/teleporter) "amY" = ( -/obj/structure/sign/electricshock, +/obj/structure/sign/warning/electricshock, /turf/closed/wall/r_wall, /area/teleporter) "amZ" = ( @@ -6887,7 +6870,7 @@ }, /area/hallway/primary/central) "ane" = ( -/obj/structure/sign/electricshock, +/obj/structure/sign/warning/electricshock, /turf/closed/wall/r_wall, /area/ai_monitored/storage/eva) "anf" = ( @@ -6999,7 +6982,7 @@ /turf/open/floor/plasteel, /area/quartermaster/storage) "anp" = ( -/obj/structure/sign/nosmoking_1, +/obj/structure/sign/warning/nosmoking/circle, /turf/closed/wall, /area/quartermaster/miningdock) "anq" = ( @@ -7039,7 +7022,7 @@ /area/quartermaster/miningdock) "ant" = ( /obj/effect/spawner/structure/window/reinforced, -/obj/structure/sign/vacuum, +/obj/structure/sign/warning/vacuum, /turf/open/floor/plating, /area/quartermaster/miningdock) "anu" = ( @@ -7966,7 +7949,6 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, -/obj/effect/landmark/lightsout, /obj/structure/cable/white{ icon_state = "1-2" }, @@ -8130,18 +8112,17 @@ /turf/open/floor/plasteel, /area/quartermaster/miningdock) "app" = ( -/obj/machinery/door/airlock/shuttle{ - name = "Mining Shuttle Airlock"; - req_access_txt = "0" +/obj/docking_port/stationary{ + dir = 4; + dwidth = 3; + height = 5; + id = "mining_home"; + name = "mining shuttle bay"; + roundstart_template = /datum/map_template/shuttle/mining/delta; + width = 7 }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/turf/open/floor/plasteel/white, -/area/shuttle/mining) +/turf/open/space/basic, +/area/space) "apr" = ( /turf/open/floor/plasteel/neutral, /area/shuttle/mining) @@ -8433,7 +8414,7 @@ name = "Station Intercom"; pixel_x = 28 }, -/obj/structure/sign/nosmoking_2{ +/obj/structure/sign/warning/nosmoking{ pixel_y = -32 }, /obj/effect/turf_decal/delivery, @@ -8593,7 +8574,7 @@ name = "Station Intercom"; pixel_x = -28 }, -/obj/structure/sign/nosmoking_2{ +/obj/structure/sign/warning/nosmoking{ pixel_y = -32 }, /turf/open/floor/plasteel/vault/side{ @@ -8770,7 +8751,7 @@ /area/quartermaster/miningdock) "aqt" = ( /obj/effect/spawner/structure/window/reinforced, -/obj/structure/sign/pods{ +/obj/structure/sign/warning/pods{ name = "MINING POD" }, /turf/open/floor/plating, @@ -9333,7 +9314,7 @@ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/structure/sign/fire{ +/obj/structure/sign/warning/fire{ pixel_y = 32 }, /obj/effect/turf_decal/bot, @@ -9424,7 +9405,7 @@ /obj/machinery/atmospherics/components/unary/thermomachine/heater{ dir = 8 }, -/obj/structure/sign/nosmoking_2{ +/obj/structure/sign/warning/nosmoking{ pixel_x = 32 }, /obj/effect/turf_decal/bot, @@ -10001,7 +9982,7 @@ }, /area/engine/atmos) "asI" = ( -/obj/structure/sign/vacuum{ +/obj/structure/sign/warning/vacuum{ pixel_x = -32 }, /turf/open/floor/plating, @@ -10547,7 +10528,7 @@ /turf/open/floor/plasteel, /area/security/brig) "atM" = ( -/obj/structure/sign/electricshock{ +/obj/structure/sign/warning/electricshock{ pixel_x = -32 }, /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ @@ -11229,7 +11210,7 @@ "auX" = ( /obj/structure/table/reinforced, /obj/item/storage/toolbox/electrical, -/obj/structure/sign/nosmoking_2{ +/obj/structure/sign/warning/nosmoking{ pixel_x = 32 }, /obj/effect/turf_decal/bot, @@ -12446,7 +12427,7 @@ /obj/machinery/light{ dir = 1 }, -/obj/structure/sign/atmosplaque{ +/obj/structure/sign/plaques/atmos{ pixel_y = 32 }, /obj/effect/turf_decal/bot, @@ -12503,7 +12484,7 @@ name = "Station Intercom"; pixel_x = 26 }, -/obj/structure/sign/nosmoking_1{ +/obj/structure/sign/warning/nosmoking/circle{ pixel_x = 26; pixel_y = 26 }, @@ -13950,7 +13931,7 @@ }, /area/crew_quarters/dorms) "aAI" = ( -/obj/structure/sign/nosmoking_2{ +/obj/structure/sign/warning/nosmoking{ pixel_y = 32 }, /turf/open/floor/plasteel/neutral/corner{ @@ -14037,7 +14018,6 @@ }, /obj/structure/table/wood, /obj/item/kitchen/fork, -/obj/effect/landmark/lightsout, /obj/structure/cable/white{ icon_state = "4-8" }, @@ -14473,7 +14453,6 @@ }, /area/hallway/primary/central) "aBL" = ( -/obj/effect/landmark/lightsout, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -14766,7 +14745,7 @@ /area/hallway/secondary/exit) "aCn" = ( /obj/effect/spawner/structure/window/reinforced, -/obj/structure/sign/vacuum, +/obj/structure/sign/warning/vacuum, /turf/open/floor/plating, /area/hallway/secondary/exit) "aCo" = ( @@ -14826,7 +14805,7 @@ dir = 4; name = "Air to Pure" }, -/obj/structure/sign/fire{ +/obj/structure/sign/warning/fire{ pixel_y = -32 }, /obj/effect/turf_decal/bot, @@ -14974,7 +14953,7 @@ id = "atmoslock"; name = "Atmospherics Lockdown Blast door" }, -/obj/structure/sign/electricshock{ +/obj/structure/sign/warning/electricshock{ pixel_x = -32 }, /obj/structure/cable/white{ @@ -15188,7 +15167,7 @@ desc = "Used to grind things up into raw materials and liquids."; pixel_y = 5 }, -/obj/structure/sign/nosmoking_2{ +/obj/structure/sign/warning/nosmoking{ pixel_y = 32 }, /obj/structure/sign/nanotrasen{ @@ -15256,16 +15235,6 @@ /turf/open/floor/plasteel, /area/hallway/secondary/exit) "aDj" = ( -/obj/machinery/door/airlock/shuttle{ - name = "Emergency Shuttle Airlock" - }, -/obj/docking_port/mobile/emergency{ - dheight = 0; - dwidth = 5; - height = 11; - name = "Omega emergency shuttle"; - width = 19 - }, /obj/docking_port/stationary{ dheight = 0; dir = 4; @@ -15276,14 +15245,8 @@ turf_type = /turf/open/space; width = 30 }, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/turf/open/floor/plasteel/white, -/area/shuttle/escape) +/turf/open/space/basic, +/area/space) "aDk" = ( /obj/effect/turf_decal/delivery, /turf/open/floor/plasteel, @@ -15329,11 +15292,11 @@ /turf/closed/wall/r_wall, /area/engine/atmos) "aDr" = ( -/obj/structure/sign/nosmoking_2, +/obj/structure/sign/warning/nosmoking, /turf/closed/wall/r_wall, /area/engine/atmos) "aDs" = ( -/obj/structure/sign/fire, +/obj/structure/sign/warning/fire, /turf/closed/wall/r_wall, /area/engine/atmos) "aDt" = ( @@ -15354,7 +15317,7 @@ /turf/open/floor/plasteel, /area/engine/atmos) "aDu" = ( -/obj/structure/sign/securearea, +/obj/structure/sign/warning/securearea, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/closed/wall/r_wall, /area/engine/atmos) @@ -15805,7 +15768,7 @@ /area/shuttle/escape) "aEn" = ( /obj/machinery/shieldgen, -/obj/structure/sign/nosmoking_2{ +/obj/structure/sign/warning/nosmoking{ pixel_y = 32 }, /obj/item/device/radio/intercom{ @@ -15920,7 +15883,6 @@ /obj/machinery/atmospherics/components/unary/vent_scrubber/on{ dir = 8 }, -/obj/effect/landmark/lightsout, /obj/effect/turf_decal/delivery, /turf/open/floor/plasteel, /area/engine/engineering) @@ -15937,7 +15899,7 @@ /area/engine/engineering) "aEA" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/structure/sign/nosmoking_2, +/obj/structure/sign/warning/nosmoking, /turf/closed/wall/r_wall, /area/hallway/primary/central) "aEB" = ( @@ -16690,7 +16652,6 @@ /area/hallway/primary/central) "aFY" = ( /obj/machinery/holopad, -/obj/effect/landmark/lightsout, /obj/structure/cable/white{ icon_state = "1-2" }, @@ -16762,7 +16723,7 @@ /turf/open/floor/plasteel, /area/engine/engineering) "aGi" = ( -/obj/structure/sign/securearea, +/obj/structure/sign/warning/securearea, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -16813,7 +16774,7 @@ /turf/open/floor/plating, /area/engine/engineering) "aGm" = ( -/obj/structure/sign/radiation, +/obj/structure/sign/warning/radiation, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 9 }, @@ -16837,7 +16798,7 @@ /turf/open/floor/plasteel, /area/engine/engineering) "aGo" = ( -/obj/structure/sign/fire, +/obj/structure/sign/warning/fire, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/closed/wall/r_wall, /area/engine/engineering) @@ -17289,7 +17250,7 @@ /obj/structure/cable/white{ icon_state = "4-8" }, -/obj/structure/sign/electricshock{ +/obj/structure/sign/warning/electricshock{ pixel_y = 32 }, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ @@ -17409,7 +17370,7 @@ id = "ceblast"; name = "Engineering Lockdown Shutters" }, -/obj/structure/sign/electricshock{ +/obj/structure/sign/warning/electricshock{ pixel_x = -32 }, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ @@ -17655,7 +17616,7 @@ /turf/closed/wall, /area/hydroponics) "aHR" = ( -/obj/structure/sign/botany{ +/obj/structure/sign/departments/botany{ pixel_x = -32 }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ @@ -17732,7 +17693,7 @@ /turf/open/floor/plasteel/neutral, /area/hallway/secondary/exit) "aIb" = ( -/obj/structure/sign/radiation{ +/obj/structure/sign/warning/radiation{ pixel_x = -32 }, /obj/effect/turf_decal/bot_white, @@ -17759,7 +17720,7 @@ /obj/structure/cable/white{ icon_state = "1-2" }, -/obj/structure/sign/nosmoking_2{ +/obj/structure/sign/warning/nosmoking{ pixel_x = -32 }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, @@ -18400,7 +18361,7 @@ /obj/machinery/power/smes{ charge = 5e+006 }, -/obj/structure/sign/electricshock{ +/obj/structure/sign/warning/electricshock{ pixel_y = 32 }, /obj/effect/turf_decal/bot, @@ -18458,7 +18419,7 @@ /turf/open/floor/plasteel/dark, /area/engine/engineering) "aJt" = ( -/obj/structure/sign/radiation, +/obj/structure/sign/warning/radiation, /turf/closed/wall/r_wall, /area/engine/supermatter) "aJu" = ( @@ -18766,7 +18727,7 @@ }, /area/crew_quarters/bar/atrium) "aJY" = ( -/obj/structure/sign/nosmoking_2, +/obj/structure/sign/warning/nosmoking, /turf/closed/wall, /area/crew_quarters/kitchen) "aJZ" = ( @@ -19057,7 +19018,7 @@ /turf/open/floor/engine, /area/engine/supermatter) "aKD" = ( -/obj/structure/sign/fire, +/obj/structure/sign/warning/fire, /turf/closed/wall/r_wall, /area/engine/supermatter) "aKE" = ( @@ -19946,7 +19907,6 @@ /obj/machinery/atmospherics/components/unary/vent_pump/on{ dir = 1 }, -/obj/effect/landmark/lightsout, /turf/open/floor/plasteel/neutral, /area/hallway/secondary/exit) "aMC" = ( @@ -20239,7 +20199,7 @@ /area/engine/engineering) "aNg" = ( /obj/structure/reagent_dispensers/fueltank, -/obj/structure/sign/nosmoking_2{ +/obj/structure/sign/warning/nosmoking{ pixel_y = -32 }, /obj/effect/turf_decal/stripes/line{ @@ -20569,7 +20529,7 @@ /obj/item/folder/yellow, /obj/item/pen, /obj/item/hand_labeler_refill, -/obj/structure/sign/nosmoking_2{ +/obj/structure/sign/warning/nosmoking{ pixel_x = -32 }, /obj/item/device/radio/intercom{ @@ -20800,7 +20760,7 @@ /turf/open/floor/plating, /area/hydroponics) "aOk" = ( -/obj/structure/sign/botany, +/obj/structure/sign/departments/botany, /turf/closed/wall, /area/hydroponics) "aOm" = ( @@ -21140,7 +21100,6 @@ /area/hallway/primary/central) "aOU" = ( /obj/machinery/door/firedoor, -/obj/effect/landmark/lightsout, /obj/machinery/atmospherics/pipe/manifold/supply/hidden, /obj/structure/cable/white{ icon_state = "4-8" @@ -21616,7 +21575,7 @@ /turf/open/floor/engine, /area/engine/engineering) "aPK" = ( -/obj/structure/sign/electricshock, +/obj/structure/sign/warning/electricshock, /turf/closed/wall/r_wall, /area/engine/supermatter) "aPL" = ( @@ -21913,7 +21872,6 @@ /turf/open/floor/plasteel, /area/hallway/primary/central) "aQp" = ( -/obj/effect/landmark/lightsout, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -21997,7 +21955,7 @@ /turf/open/floor/plasteel/neutral/corner, /area/hallway/primary/central) "aQz" = ( -/obj/structure/sign/securearea{ +/obj/structure/sign/warning/securearea{ pixel_y = -32 }, /obj/machinery/light, @@ -22217,7 +22175,7 @@ /turf/open/floor/plasteel, /area/library) "aRa" = ( -/obj/structure/sign/kiddieplaque/library, +/obj/structure/sign/plaques/kiddie/library, /turf/closed/wall, /area/library) "aRb" = ( @@ -22577,7 +22535,7 @@ }, /area/library) "aRV" = ( -/obj/structure/sign/nosmoking_2{ +/obj/structure/sign/warning/nosmoking{ pixel_y = 32 }, /obj/machinery/vending/games, @@ -22664,7 +22622,7 @@ /turf/open/floor/plasteel/vault, /area/medical/morgue) "aSg" = ( -/obj/structure/sign/nosmoking_2{ +/obj/structure/sign/warning/nosmoking{ pixel_x = 32 }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, @@ -22961,7 +22919,7 @@ "aSR" = ( /obj/structure/table/reinforced, /obj/item/tank/internals/plasma, -/obj/structure/sign/nosmoking_2{ +/obj/structure/sign/warning/nosmoking{ pixel_y = -32 }, /obj/effect/turf_decal/bot, @@ -24724,7 +24682,7 @@ /area/medical/chemistry) "aWO" = ( /obj/effect/spawner/structure/window/reinforced, -/obj/structure/sign/nosmoking_1{ +/obj/structure/sign/warning/nosmoking/circle{ pixel_x = 32 }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, @@ -24798,7 +24756,7 @@ /turf/open/floor/plating, /area/science/lab) "aWW" = ( -/obj/structure/sign/nosmoking_1, +/obj/structure/sign/warning/nosmoking/circle, /turf/closed/wall, /area/science/lab) "aWX" = ( @@ -25110,7 +25068,6 @@ /obj/structure/cable/white{ icon_state = "1-4" }, -/obj/effect/landmark/lightsout, /turf/open/floor/plasteel/whitepurple/corner{ dir = 1 }, @@ -25300,7 +25257,7 @@ /area/medical/medbay/zone3) "aXR" = ( /obj/effect/spawner/structure/window/reinforced, -/obj/structure/sign/bluecross_2, +/obj/structure/sign/departments/medbay/alt, /turf/open/floor/plating, /area/medical/medbay/zone3) "aXS" = ( @@ -25865,7 +25822,7 @@ /turf/open/floor/plasteel/neutral, /area/hallway/primary/central) "aYZ" = ( -/obj/structure/sign/securearea{ +/obj/structure/sign/warning/securearea{ pixel_x = 32 }, /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ @@ -26181,7 +26138,6 @@ /obj/structure/cable/white{ icon_state = "2-4" }, -/obj/effect/landmark/lightsout, /turf/open/floor/plasteel/blue, /area/medical/medbay/zone3) "aZK" = ( @@ -26577,8 +26533,8 @@ /area/medical/medbay/zone3) "baw" = ( /obj/effect/spawner/structure/window/reinforced, -/obj/structure/sign/bluecross_2, -/obj/structure/sign/nosmoking_1{ +/obj/structure/sign/departments/medbay/alt, +/obj/structure/sign/warning/nosmoking/circle{ pixel_y = -28 }, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ @@ -27424,7 +27380,7 @@ name = "Medbay Desk"; req_access_txt = "5" }, -/obj/structure/sign/nosmoking_1{ +/obj/structure/sign/warning/nosmoking/circle{ pixel_x = 32 }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, @@ -27641,7 +27597,7 @@ /obj/structure/window/reinforced{ dir = 8 }, -/obj/structure/sign/nosmoking_2{ +/obj/structure/sign/warning/nosmoking{ pixel_y = 32 }, /turf/open/floor/plasteel/bar, @@ -28382,7 +28338,7 @@ /turf/open/floor/circuit/green, /area/science/robotics/mechbay) "bei" = ( -/obj/structure/sign/nosmoking_2{ +/obj/structure/sign/warning/nosmoking{ pixel_y = -32 }, /turf/open/floor/mech_bay_recharge_floor, @@ -28448,7 +28404,7 @@ /obj/item/device/mmi, /obj/item/device/mmi, /obj/item/device/mmi, -/obj/structure/sign/bluecross_2{ +/obj/structure/sign/departments/medbay/alt{ pixel_y = -32 }, /obj/machinery/light, @@ -28482,7 +28438,7 @@ pixel_y = 16 }, /obj/item/circular_saw, -/obj/structure/sign/nosmoking_2{ +/obj/structure/sign/warning/nosmoking{ pixel_y = -32 }, /obj/structure/mirror{ @@ -28628,7 +28584,7 @@ /turf/open/floor/plasteel, /area/maintenance/port) "beG" = ( -/obj/structure/sign/bluecross_2, +/obj/structure/sign/departments/medbay/alt, /turf/closed/wall, /area/medical/medbay/zone3) "beH" = ( @@ -29218,7 +29174,7 @@ name = "Xenobiology Lab"; req_access_txt = "47" }, -/obj/structure/sign/xenobio{ +/obj/structure/sign/departments/xenobio{ pixel_x = 32 }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, @@ -29340,7 +29296,7 @@ /area/chapel/main) "bgb" = ( /obj/structure/bookcase, -/obj/structure/sign/kiddieplaque/badger{ +/obj/structure/sign/plaques/kiddie/badger{ pixel_y = 32 }, /obj/machinery/light/small{ @@ -29395,16 +29351,6 @@ heat_capacity = 1e+006 }, /area/hallway/primary/central) -<<<<<<< HEAD -"bgh" = ( -/obj/effect/landmark/lightsout, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, -/turf/open/floor/plasteel/neutral/side, -/area/hallway/primary/central) -======= ->>>>>>> 2d5c3d5... Merge pull request #34781 from DaxDupont/please-make-waffles-for=i-am-belgian "bgl" = ( /obj/machinery/vending/cola/random, /obj/machinery/newscaster{ @@ -29892,7 +29838,7 @@ pixel_x = -12; pixel_y = 2 }, -/obj/structure/sign/nosmoking_2{ +/obj/structure/sign/warning/nosmoking{ pixel_x = -32 }, /turf/open/floor/plating, @@ -29912,7 +29858,7 @@ dir = 4; pixel_x = 11 }, -/obj/structure/sign/botany{ +/obj/structure/sign/departments/botany{ pixel_x = 32 }, /turf/open/floor/plating, @@ -30294,7 +30240,7 @@ /obj/machinery/light/small{ dir = 1 }, -/obj/structure/sign/kiddieplaque/badger{ +/obj/structure/sign/plaques/kiddie/badger{ pixel_y = 32 }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ @@ -30549,7 +30495,7 @@ }, /area/hallway/secondary/entry) "biB" = ( -/obj/structure/sign/biohazard, +/obj/structure/sign/warning/biohazard, /turf/closed/wall/r_wall, /area/science/xenobiology) "biC" = ( @@ -30578,7 +30524,7 @@ /turf/open/floor/plasteel, /area/science/xenobiology) "biE" = ( -/obj/structure/sign/xenobio, +/obj/structure/sign/departments/xenobio, /turf/closed/wall/r_wall, /area/science/xenobiology) "biF" = ( @@ -31315,7 +31261,7 @@ /area/hallway/secondary/entry) "bjY" = ( /obj/effect/spawner/structure/window/reinforced, -/obj/structure/sign/vacuum, +/obj/structure/sign/warning/vacuum, /turf/open/floor/plating, /area/hallway/secondary/entry) "bjZ" = ( @@ -32510,23 +32456,17 @@ /turf/open/floor/plating, /area/maintenance/starboard/aft) "btj" = ( -/obj/docking_port/mobile/arrivals{ - dir = 2; - dwidth = 4; - height = 17; - name = "omega arrivals shuttle"; - width = 9 - }, /obj/docking_port/stationary{ dir = 2; dwidth = 4; height = 17; id = "arrivals_stationary"; name = "omega arrivals"; + roundstart_template = /datum/map_template/shuttle/arrival/delta; width = 9 }, -/turf/closed/wall/mineral/plastitanium, -/area/shuttle/arrival) +/turf/open/space/basic, +/area/space) "btk" = ( /obj/machinery/door/airlock/external{ cyclelinkeddir = 4; @@ -32837,18 +32777,6 @@ /turf/open/floor/pod/dark, /area/shuttle/transport) "bwz" = ( -/obj/machinery/door/airlock/titanium, -/obj/docking_port/mobile{ - dir = 8; - dwidth = 2; - height = 13; - id = "ferry"; - name = "ferry shuttle"; - port_direction = 1; - preferred_direction = 4; - roundstart_move = "ferry_away"; - width = 5 - }, /obj/docking_port/stationary{ dir = 8; dwidth = 2; @@ -32858,8 +32786,8 @@ turf_type = /turf/open/space; width = 5 }, -/turf/open/floor/pod/light, -/area/shuttle/transport) +/turf/open/space/basic, +/area/space) "bwB" = ( /obj/structure/shuttle/engine/heater{ dir = 8 @@ -33209,7 +33137,7 @@ /turf/closed/wall/rust, /area/maintenance/fore) "byf" = ( -/obj/structure/sign/vacuum, +/obj/structure/sign/warning/vacuum, /turf/closed/wall, /area/maintenance/starboard/fore) "byg" = ( @@ -33344,7 +33272,7 @@ }, /area/bridge) "swF" = ( -/obj/structure/sign/securearea, +/obj/structure/sign/warning/securearea, /turf/closed/wall/rust, /area/asteroid/nearstation) "swG" = ( @@ -33483,7 +33411,7 @@ /turf/open/floor/plasteel, /area/maintenance/starboard) "sBW" = ( -/obj/structure/sign/vacuum, +/obj/structure/sign/warning/vacuum, /turf/closed/wall/rust, /area/maintenance/starboard) "sCr" = ( @@ -33626,7 +33554,7 @@ /turf/open/floor/plasteel/vault, /area/maintenance/starboard) "sEQ" = ( -/obj/structure/sign/securearea, +/obj/structure/sign/warning/securearea, /turf/closed/wall, /area/maintenance/starboard) "sFn" = ( @@ -34041,7 +33969,7 @@ }, /area/maintenance/starboard/central) "sIN" = ( -/obj/structure/sign/securearea, +/obj/structure/sign/warning/securearea, /turf/closed/wall/rust, /area/maintenance/starboard) "sIO" = ( @@ -34425,7 +34353,7 @@ /turf/closed/wall/rust, /area/hallway/secondary/entry) "sLw" = ( -/obj/structure/sign/electricshock, +/obj/structure/sign/warning/electricshock, /turf/closed/wall/r_wall/rust, /area/ai_monitored/turret_protected/ai) "sLx" = ( @@ -34466,11 +34394,11 @@ /turf/open/floor/plasteel/vault/side, /area/ai_monitored/turret_protected/ai) "sLA" = ( -/obj/structure/sign/electricshock, +/obj/structure/sign/warning/electricshock, /turf/closed/wall/r_wall, /area/ai_monitored/turret_protected/ai) "sLB" = ( -/obj/structure/sign/securearea, +/obj/structure/sign/warning/securearea, /turf/closed/wall/r_wall, /area/ai_monitored/turret_protected/ai) "sLC" = ( @@ -34508,7 +34436,7 @@ /turf/open/floor/circuit/green, /area/ai_monitored/turret_protected/ai) "sLI" = ( -/obj/structure/sign/securearea, +/obj/structure/sign/warning/securearea, /turf/closed/wall/r_wall/rust, /area/ai_monitored/turret_protected/ai) "sLJ" = ( @@ -34959,7 +34887,7 @@ /obj/structure/cable/yellow{ icon_state = "0-2" }, -/obj/structure/sign/electricshock{ +/obj/structure/sign/warning/electricshock{ pixel_y = 32 }, /obj/effect/turf_decal/stripes/line{ @@ -34978,7 +34906,7 @@ }, /area/ai_monitored/turret_protected/aisat_interior) "sMU" = ( -/obj/structure/sign/vacuum, +/obj/structure/sign/warning/vacuum, /turf/closed/wall/r_wall, /area/ai_monitored/turret_protected/aisat_interior) "sMV" = ( @@ -35025,7 +34953,7 @@ }, /area/ai_monitored/turret_protected/aisat_interior) "sMY" = ( -/obj/structure/sign/securearea, +/obj/structure/sign/warning/securearea, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -35069,7 +34997,7 @@ }, /area/ai_monitored/turret_protected/aisat_interior) "sNc" = ( -/obj/structure/sign/securearea, +/obj/structure/sign/warning/securearea, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -35286,7 +35214,7 @@ }, /area/ai_monitored/turret_protected/aisat_interior) "sNx" = ( -/obj/structure/sign/securearea, +/obj/structure/sign/warning/securearea, /turf/closed/wall, /area/ai_monitored/turret_protected/aisat_interior) "sNy" = ( @@ -35427,7 +35355,7 @@ /turf/open/floor/plating, /area/ai_monitored/turret_protected/aisat_interior) "sNQ" = ( -/obj/structure/sign/securearea, +/obj/structure/sign/warning/securearea, /turf/closed/wall/r_wall, /area/ai_monitored/turret_protected/aisat_interior) "sNS" = ( @@ -35481,7 +35409,7 @@ /turf/open/space/basic, /area/space/nearstation) "sOk" = ( -/obj/structure/sign/securearea, +/obj/structure/sign/warning/securearea, /turf/closed/wall, /area/space/nearstation) "sOr" = ( @@ -71102,7 +71030,7 @@ aaa aaa aaa aaa -bwb +aaa aaa aaa aaa @@ -71358,9 +71286,9 @@ aaa aaa aaa aaa -bwb -bwo -bwb +aaa +aaa +aaa aaa aaa aaa @@ -71615,9 +71543,9 @@ aaa aaa aaa aaa -bwc -bwi -bwB +aaa +aaa +aaa aaa aaa aaa @@ -71872,9 +71800,9 @@ aaa aaa aaa aaa -bvS -bwq -bvS +aaa +aaa +aaa aaa aaa aaa @@ -72128,11 +72056,11 @@ aaa aaa aaa aaa -bvS -bvS -bwr -bvS -bvS +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -72385,11 +72313,11 @@ aaa aaa aaa aaa -bvT -bwf -bwi -bwE -bvT +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -72642,11 +72570,11 @@ aaa aaa aaa aaa -bvS -bwf -bwi -bwE -bvS +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -72899,11 +72827,11 @@ aaa aaa aaa aaa -bvS -bwh -bwi -bwi -bvS +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -73156,11 +73084,11 @@ aaa aaa aaa aaa -bvW -bwi -bwv -bwi -bwQ +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -73413,11 +73341,11 @@ aaa aaa aaa aaa -bvS -bwi -bwi -bwI -bvS +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -73670,11 +73598,11 @@ aaa aaa aaa aaa -bvS -bwf -bwi -bwE -bvS +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -73927,11 +73855,11 @@ aaa aaa aaa aaa -bvT -bwf -bwi -bwE -bvT +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -74184,11 +74112,11 @@ aaa aaa aaa aaa -bvS -bvT +aaa +aaa bwz -bvT -bvS +aaa +aaa aaa aaa aaa @@ -76489,19 +76417,19 @@ bgV aae aaa aaa -bjO -bjZ -bka -bkm -bka -bkb -bkb -bkb -bkb -bkG -bkm -bka -bka +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -76745,20 +76673,20 @@ biv bgU aae aaa -bjN -bjO -bka -bkc -bkn -bkq -bkv -bkv -bkv -bkv -bkH -bkn -bkM -bka +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -77002,23 +76930,23 @@ bxY bgU aaa aaa -bjN -bjW -bkb -bkd -bko -bko -bko -bko -bko -bko -bko -bko -bkN -bka -bka -bkb -bka +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -77259,23 +77187,23 @@ bix bgU aaa aaa -bjN -bjW -bkb -bke -bko -bko -bkw -bkw -bkw -bkw -bkI -bko -bkO -bkT -bkY -bld -bkb +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -77517,22 +77445,22 @@ bgU aaa aaa btj -bjO -bjZ -bkf -bko -bkr -buA -bkx -bkD -bkx -bkF -buB -bkP -bkU -bkZ -ble -bkb +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -77773,23 +77701,23 @@ bix bgU aaa aaa -bjN -bjW -bkb -bkg -bko -bko -bkv -bkv -bkv -bkv -bkJ -bko -bkQ -bkV -bla -bld -bkb +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -78030,23 +77958,23 @@ biw bgU aaa aaa -bjN -bjW -bkb -bkd -bko -bko -bko -bko -bko -bko -bko -bko -byn -bka -bka -bkb -bka +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -78287,20 +78215,20 @@ biy bgU aae aaa -bjN -bjO -bka -bkc -bkp -bks -bkw -bkw -bkw -bkw -bkK -bkp -bkR -bka +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -78545,19 +78473,19 @@ bgT aae aaa aaa -bjO -bjZ -bka -bkb -bka -bkb -bkb -bkb -bkb -bkG -bkb -bka -bka +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -84385,17 +84313,17 @@ aaa aaa aaa aaa -abQ -abQ -abQ -aei +aaa +aaa +aaa +aaa aeZ -abQ -aeZ -aht -abQ -abQ -abQ +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa amC @@ -84642,18 +84570,18 @@ aaa aaa aaa aaa -abQ -acz -afa -afa -afa -afK -afa -afa -aig -abQ -abQ -akQ +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa amC amC @@ -84899,18 +84827,18 @@ aaa aaa aaa aaa -abQ -acA -ads -aej -ads -ads -ads -ads -aii -aiQ -ajN -akR +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aae amD @@ -85156,18 +85084,18 @@ aaa aaa aaa aaa -abQ -buy -ads -ads -ads -ads -ads -ads -aii -aiQ -ajN -akR +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aae ant @@ -85413,18 +85341,18 @@ aaa aaa aaa aaa -abQ -acA -ads -ads -ads -ads -ads -ads -aii -aiQ -ajN -akR +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa amD @@ -85670,26 +85598,26 @@ aaa aaa aaa aaa -abQ -acC -aek -aek -aek -buz -aek -aek -aij -abQ -abQ -akS aaa -amE -amE -amF +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa app -amF -amE -amE +aaa +aaa +aaa aaa aaa aaa @@ -85927,26 +85855,26 @@ aaa aaa aaa aaa -abQ -abQ -abQ -abQ -abQ -abQ -agD -abQ -abQ -abQ -abQ aaa aaa -amE -anu -aon -aon -aqw -arn -amE +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -86197,13 +86125,13 @@ aaa aaa aaa aaa -amF -anv -aoo -apr -aqx -aro -asu +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -86454,13 +86382,13 @@ aaa aaa aaa aaa -amE -anw -aop -aps -aqy -arp -amE +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -86711,13 +86639,13 @@ aaa aaa aaa aaa -amE -amE -amF -apt -amF -amE -amE +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -87237,24 +87165,24 @@ aaa aaa aaa aaa -axX -axX -axX -aBj -axZ +aaa +aaa +aaa +aaa +aaa aDj -axX -axY -axY -axY -axX -aJe -axZ -aJe -axX -axX -aLz -aPD +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -87494,25 +87422,25 @@ aaa aaa aaa aaa -axX -azc -aAa -aAb -axY -aDk -aEg -aEm -aEm -aEm -aEg -aDk -axY -aDk -aMD -aNL -axX -aPD -aQE +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -87751,25 +87679,25 @@ aaa aaa aaa aaa -axY -azd -aAb -aAb -aCo -aDl -aEh -aEh -aEh -aEh -aEh -aJf -aKm -aLw -aME -aNM -axY -aPE -aQE +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -88008,25 +87936,25 @@ aaa aaa aaa aaa -axY -azd -aAb -aAb -axY -aDl -aEi -bvP -aEi -aEi -aEi -aJf -aKm -aLx -aMF -aNN -axY -aPE -aQE +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -88265,25 +88193,25 @@ aaa aaa aaa aaa -axX -aze -aAb -aBk -axY -aDl -aEj -aFo -aEl -aFp -aEj -aJf -axY -aLy -aMG -aNO -axX -aPE -aQE +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -88522,25 +88450,25 @@ aaa aaa aaa aaa -axZ -axY -aAc -axY -aCp -bvO -aEk -aEj -aGd -aEl -aEk -bvR -aKn -aLz -axY -aLz -aLz -aPD -aPD +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -88779,25 +88707,25 @@ aaa aaa aaa aaa -axX -azf -aAd -aBl -axY -aDl -aEl -aFp -aEj -aFo -aEl -aJf -axY -aLA -aMH -aNP -axX -aPE -aQE +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -89036,25 +88964,25 @@ aaa aaa aaa aaa -axY -azg -aAe -aAd -aCq -aDl -aEm -bvQ -aEm -aEm -aEm -aJf -aKo -aLB -aLB -aNQ -axY -aPE -aQE +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -89293,25 +89221,25 @@ aaa aaa aaa aaa -axY -azh -aAd -aBm -axY -aDl -aEh -aEh -aEh -aEh -aEh -aJf -aKo -aLB -aLB -aNR -axY -aPE -aQE +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -89550,25 +89478,25 @@ aaa aaa aaa aaa -axY -azi -aAf -aBn -axX -aDm -aEi -aEi -aEi -aEi -aEi -aJg -axY -aLC -aMI -aNS -axX -aPD -aQE +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -89807,24 +89735,24 @@ aaa aaa aaa aaa -axX -axY -axY -axX -axZ -axX -axY -axY -axY -axY -axY -axX -axZ -axX -axX -axX -aLz -aPD +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa diff --git a/_maps/map_files/PubbyStation/PubbyStation.dmm b/_maps/map_files/PubbyStation/PubbyStation.dmm index 99f86960ea..b951302597 100644 --- a/_maps/map_files/PubbyStation/PubbyStation.dmm +++ b/_maps/map_files/PubbyStation/PubbyStation.dmm @@ -1836,18 +1836,10 @@ /obj/machinery/light/small{ dir = 8 }, -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; - icon_state = "space"; - layer = 4; - name = "EXTERNAL AIRLOCK"; +/obj/structure/sign/warning/vacuum/external{ pixel_x = 32 }, -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; - icon_state = "space"; - layer = 4; - name = "EXTERNAL AIRLOCK"; +/obj/structure/sign/warning/vacuum/external{ pixel_x = -32 }, /turf/open/floor/plating, @@ -3006,7 +2998,7 @@ dir = 4; light_color = "#e8eaff" }, -/obj/structure/sign/nosmoking_2{ +/obj/structure/sign/warning/nosmoking{ pixel_x = 32 }, /turf/open/floor/plasteel/dark, @@ -3041,7 +3033,7 @@ /area/security/main) "ajn" = ( /obj/structure/table, -/obj/structure/sign/goldenplaque{ +/obj/structure/sign/plaques/golden{ pixel_y = 32 }, /obj/machinery/light{ @@ -3368,7 +3360,7 @@ "akb" = ( /obj/machinery/disposal/bin, /obj/structure/disposalpipe/trunk, -/obj/structure/sign/atmosplaque{ +/obj/structure/sign/plaques/atmos{ desc = "An embossed piece of paper from the University of Nanotrasen at Portpoint."; icon_state = "kiddieplaque"; name = "\improper 'Diploma' frame"; @@ -5521,11 +5513,7 @@ /obj/structure/disposalpipe/segment{ dir = 5 }, -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; - icon_state = "space"; - layer = 4; - name = "EXTERNAL AIRLOCK"; +/obj/structure/sign/warning/vacuum/external{ pixel_x = 32; pixel_y = -32 }, @@ -5841,11 +5829,7 @@ icon_state = "1-2" }, /obj/structure/disposalpipe/segment, -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; - icon_state = "space"; - layer = 4; - name = "EXTERNAL AIRLOCK"; +/obj/structure/sign/warning/vacuum/external{ pixel_x = 32 }, /turf/open/floor/plating, @@ -6307,7 +6291,8 @@ launch_status = 0; name = "monastery shuttle"; port_direction = 2; - width = 5 + width = 5; + timid = 0 }, /turf/open/floor/mineral/titanium/blue, /area/shuttle/pod_1) @@ -6707,7 +6692,7 @@ network = list("SS13") }, /obj/structure/table, -/obj/structure/sign/biohazard{ +/obj/structure/sign/warning/biohazard{ pixel_x = -32 }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, @@ -6764,7 +6749,7 @@ pixel_y = 4 }, /obj/item/device/radio/off, -/obj/structure/sign/biohazard{ +/obj/structure/sign/warning/biohazard{ pixel_x = 32 }, /obj/item/device/radio/off, @@ -7297,11 +7282,7 @@ /obj/machinery/light/small{ dir = 4 }, -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; - icon_state = "space"; - layer = 4; - name = "EXTERNAL AIRLOCK"; +/obj/structure/sign/warning/vacuum/external{ pixel_x = 32 }, /obj/structure/closet/emcloset/anchored, @@ -7513,7 +7494,7 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 5 }, -/obj/structure/sign/securearea, +/obj/structure/sign/warning/securearea, /turf/closed/wall, /area/bridge) "atM" = ( @@ -7530,7 +7511,7 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 5 }, -/obj/structure/sign/securearea, +/obj/structure/sign/warning/securearea, /turf/closed/wall, /area/bridge) "atO" = ( @@ -7721,7 +7702,7 @@ /area/crew_quarters/dorms) "aul" = ( /obj/machinery/computer/shuttle/monastery_shuttle, -/obj/structure/sign/pods{ +/obj/structure/sign/warning/pods{ pixel_y = 32 }, /turf/open/floor/plasteel/dark, @@ -7991,11 +7972,7 @@ /area/bridge) "auU" = ( /obj/structure/closet/emcloset/anchored, -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; - icon_state = "space"; - layer = 4; - name = "EXTERNAL AIRLOCK"; +/obj/structure/sign/warning/vacuum/external{ pixel_x = -32 }, /obj/machinery/light/small{ @@ -8013,7 +7990,7 @@ /turf/closed/wall/r_wall, /area/ai_monitored/nuke_storage) "auX" = ( -/obj/structure/sign/securearea, +/obj/structure/sign/warning/securearea, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 10 }, @@ -8032,7 +8009,7 @@ /turf/open/floor/plasteel/vault, /area/ai_monitored/nuke_storage) "auZ" = ( -/obj/structure/sign/securearea, +/obj/structure/sign/warning/securearea, /turf/closed/wall/r_wall, /area/ai_monitored/nuke_storage) "ava" = ( @@ -8059,7 +8036,7 @@ /turf/open/floor/plasteel, /area/gateway) "avc" = ( -/obj/structure/sign/securearea, +/obj/structure/sign/warning/securearea, /turf/closed/wall/r_wall, /area/gateway) "avd" = ( @@ -8085,7 +8062,7 @@ /obj/machinery/light/small{ dir = 1 }, -/obj/structure/sign/securearea{ +/obj/structure/sign/warning/securearea{ desc = "Under the painting a plaque reads: 'While the meat grinder may not have spared you, fear not. Not one part of you has gone to waste... You were delicious.'"; icon_state = "monkey_painting"; name = "Mr. Deempisi portrait"; @@ -8186,29 +8163,17 @@ /turf/open/floor/mineral/titanium/blue, /area/shuttle/labor) "avp" = ( -/obj/machinery/door/airlock/titanium{ - id_tag = "prisonshuttle"; - name = "Labor Shuttle Airlock" - }, -/obj/docking_port/mobile{ - dir = 8; - dwidth = 2; - height = 5; - id = "laborcamp"; - name = "labor camp shuttle"; - port_direction = 4; - width = 9 - }, /obj/docking_port/stationary{ dir = 8; dwidth = 2; height = 5; id = "laborcamp_home"; name = "fore bay 1"; + roundstart_template = /datum/map_template/shuttle/labour/box; width = 9 }, -/turf/open/floor/mineral/titanium/blue, -/area/shuttle/labor) +/turf/open/space/basic, +/area/space) "avq" = ( /obj/machinery/door/airlock/external{ name = "Labor Camp Shuttle Airlock" @@ -9194,7 +9159,7 @@ /turf/open/floor/plasteel, /area/hallway/primary/fore) "axJ" = ( -/obj/structure/sign/security{ +/obj/structure/sign/departments/security{ pixel_y = 32 }, /turf/open/floor/plasteel, @@ -9405,7 +9370,7 @@ /obj/machinery/light/small{ dir = 1 }, -/obj/structure/sign/securearea{ +/obj/structure/sign/warning/securearea{ desc = "Under the painting a plaque reads: 'While the meat grinder may not have spared you, fear not. Not one part of you has gone to waste... You were delicious.'"; icon_state = "monkey_painting"; name = "Mr. Deempisi portrait"; @@ -9515,11 +9480,7 @@ /area/solar/port) "ayz" = ( /obj/effect/spawner/structure/window/reinforced, -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; - icon_state = "space"; - layer = 4; - name = "EXTERNAL AIRLOCK"; +/obj/structure/sign/warning/vacuum/external{ pixel_x = -32 }, /turf/open/floor/plating, @@ -9569,11 +9530,7 @@ }, /area/hallway/primary/fore) "ayF" = ( -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; - icon_state = "space"; - layer = 4; - name = "EXTERNAL AIRLOCK"; +/obj/structure/sign/warning/vacuum/external{ pixel_y = 32 }, /turf/open/floor/plasteel, @@ -10831,7 +10788,7 @@ /obj/machinery/light/small{ dir = 1 }, -/obj/structure/sign/securearea{ +/obj/structure/sign/warning/securearea{ desc = "Under the painting a plaque reads: 'While the meat grinder may not have spared you, fear not. Not one part of you has gone to waste... You were delicious.'"; icon_state = "monkey_painting"; name = "Mr. Deempisi portrait"; @@ -11483,7 +11440,7 @@ /area/crew_quarters/dorms) "aDi" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden, -/obj/structure/sign/restroom{ +/obj/structure/sign/departments/restroom{ pixel_y = -32 }, /turf/open/floor/plasteel/white/corner, @@ -11744,7 +11701,7 @@ /obj/machinery/porta_turret/ai{ dir = 8 }, -/obj/structure/sign/kiddieplaque{ +/obj/structure/sign/plaques/kiddie{ pixel_x = 32 }, /turf/open/floor/plasteel/darkblue/side{ @@ -12379,11 +12336,7 @@ /turf/open/floor/plating, /area/maintenance/department/cargo) "aFg" = ( -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; - icon_state = "space"; - layer = 4; - name = "EXTERNAL AIRLOCK"; +/obj/structure/sign/warning/vacuum/external{ pixel_y = 32 }, /turf/open/floor/plating, @@ -13484,7 +13437,7 @@ /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 1 }, -/obj/structure/sign/securearea{ +/obj/structure/sign/warning/securearea{ pixel_y = 32 }, /turf/open/floor/plasteel/blue/corner{ @@ -13582,7 +13535,7 @@ /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 1 }, -/obj/structure/sign/securearea{ +/obj/structure/sign/warning/securearea{ pixel_y = 32 }, /turf/open/floor/plasteel/blue/corner{ @@ -13660,7 +13613,7 @@ /obj/machinery/airalarm{ pixel_y = 22 }, -/obj/structure/sign/restroom{ +/obj/structure/sign/departments/restroom{ pixel_x = 32 }, /turf/open/floor/plasteel/white/corner, @@ -14281,11 +14234,7 @@ /turf/open/floor/mineral/plastitanium/brig, /area/shuttle/escape) "aJD" = ( -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; - icon_state = "space"; - layer = 4; - name = "EXTERNAL AIRLOCK"; +/obj/structure/sign/warning/vacuum/external{ pixel_x = -32 }, /turf/open/floor/plasteel/red/side{ @@ -14370,7 +14319,7 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, -/obj/structure/sign/restroom{ +/obj/structure/sign/departments/restroom{ pixel_y = -32 }, /turf/open/floor/plasteel, @@ -16164,7 +16113,7 @@ }, /area/hallway/secondary/exit/departure_lounge) "aOs" = ( -/obj/structure/sign/evac, +/obj/structure/sign/departments/evac, /turf/closed/wall, /area/hallway/secondary/exit/departure_lounge) "aOt" = ( @@ -16995,11 +16944,7 @@ /turf/open/floor/carpet, /area/shuttle/escape) "aQr" = ( -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; - icon_state = "space"; - layer = 4; - name = "EXTERNAL AIRLOCK"; +/obj/structure/sign/warning/vacuum/external{ pixel_x = -32 }, /turf/open/floor/plasteel/escape{ @@ -17367,7 +17312,7 @@ /area/hallway/primary/central) "aRe" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/structure/sign/cargo{ +/obj/structure/sign/departments/cargo{ pixel_x = 32 }, /turf/open/floor/plasteel/brown/corner{ @@ -18452,9 +18397,6 @@ /turf/open/floor/mineral/titanium, /area/shuttle/escape) "aTH" = ( -/obj/machinery/door/airlock/titanium{ - name = "Emergency Shuttle Airlock" - }, /obj/docking_port/stationary{ dheight = 0; dir = 8; @@ -18464,17 +18406,8 @@ name = "PubbyStation emergency evac bay"; width = 20 }, -/obj/docking_port/mobile/emergency{ - dheight = 0; - dir = 8; - dwidth = 4; - height = 15; - name = "Pubby emergency shuttle"; - port_direction = 4; - width = 18 - }, -/turf/open/floor/plating, -/area/shuttle/escape) +/turf/open/space/basic, +/area/space) "aTI" = ( /obj/machinery/light, /turf/open/floor/plating, @@ -18821,13 +18754,6 @@ /turf/open/floor/plating, /area/quartermaster/storage) "aUA" = ( -/obj/machinery/door/airlock/titanium{ - name = "Supply Shuttle Airlock"; - req_access_txt = "31" - }, -/obj/docking_port/mobile/supply{ - dir = 4 - }, /obj/docking_port/stationary{ dir = 4; dwidth = 5; @@ -18836,8 +18762,8 @@ name = "Cargo Bay"; width = 12 }, -/turf/open/floor/plating, -/area/shuttle/supply) +/turf/open/space/basic, +/area/space) "aUB" = ( /obj/structure/rack, /obj/effect/spawner/lootdrop/maintenance, @@ -18879,7 +18805,7 @@ pixel_y = 3 }, /obj/item/crowbar, -/obj/structure/sign/nosmoking_2{ +/obj/structure/sign/warning/nosmoking{ pixel_x = 32 }, /obj/machinery/light{ @@ -19569,7 +19495,7 @@ /obj/machinery/light/small{ dir = 1 }, -/obj/structure/sign/securearea{ +/obj/structure/sign/warning/securearea{ desc = "Under the painting a plaque reads: 'While the meat grinder may not have spared you, fear not. Not one part of you has gone to waste... You were delicious.'"; icon_state = "monkey_painting"; name = "Mr. Deempisi portrait"; @@ -19861,7 +19787,7 @@ /area/hallway/secondary/exit/departure_lounge) "aWM" = ( /obj/machinery/washing_machine, -/obj/structure/sign/securearea{ +/obj/structure/sign/warning/securearea{ desc = "Under the painting a plaque reads: 'While the meat grinder may not have spared you, fear not. Not one part of you has gone to waste... You were delicious.'"; icon_state = "monkey_painting"; name = "Mr. Deempisi portrait"; @@ -20081,7 +20007,7 @@ /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 4 }, -/obj/structure/sign/cargo{ +/obj/structure/sign/departments/cargo{ pixel_x = 32 }, /turf/open/floor/plasteel/brown/corner{ @@ -20346,7 +20272,7 @@ /area/hydroponics) "aXY" = ( /obj/machinery/hydroponics/constructable, -/obj/structure/sign/botany{ +/obj/structure/sign/departments/botany{ pixel_y = 32 }, /obj/machinery/light{ @@ -21914,11 +21840,7 @@ /area/maintenance/solars/starboard) "bbO" = ( /obj/effect/spawner/structure/window/reinforced, -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; - icon_state = "space"; - layer = 4; - name = "EXTERNAL AIRLOCK"; +/obj/structure/sign/warning/vacuum/external{ pixel_x = 32 }, /turf/open/floor/plating, @@ -22373,11 +22295,7 @@ /turf/open/floor/plasteel/airless/solarpanel, /area/solar/starboard) "bcW" = ( -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; - icon_state = "space"; - layer = 4; - name = "EXTERNAL AIRLOCK"; +/obj/structure/sign/warning/vacuum/external{ pixel_y = 32 }, /obj/effect/spawner/structure/window/reinforced, @@ -22763,7 +22681,7 @@ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/structure/sign/custodian{ +/obj/structure/sign/departments/custodian{ pixel_x = 32 }, /turf/open/floor/plasteel/neutral/corner, @@ -23468,12 +23386,17 @@ /turf/open/floor/plating, /area/quartermaster/miningdock) "bfK" = ( -/obj/machinery/door/airlock/titanium{ - name = "Mining Shuttle Airlock"; - req_access_txt = "48" +/obj/docking_port/stationary{ + dir = 4; + dwidth = 3; + height = 5; + id = "mining_home"; + name = "mining shuttle bay"; + roundstart_template = /datum/map_template/shuttle/mining/delta; + width = 7 }, -/turf/open/floor/plating, -/area/shuttle/labor) +/turf/open/space/basic, +/area/space) "bfL" = ( /obj/machinery/door/airlock/titanium{ name = "Mining Shuttle Airlock"; @@ -23945,24 +23868,17 @@ /turf/open/floor/mineral/titanium/blue, /area/shuttle/arrival) "bgS" = ( -/obj/structure/shuttle/engine/propulsion{ - dir = 4 - }, -/obj/docking_port/mobile/arrivals{ - height = 13; - name = "pubby arrivals shuttle"; - width = 6 - }, /obj/docking_port/stationary{ dir = 8; dwidth = 3; height = 13; id = "arrivals_stationary"; name = "pubby arrivals"; + roundstart_template = /datum/map_template/shuttle/arrival/pubby; width = 6 }, -/turf/open/floor/plating/airless, -/area/shuttle/arrival) +/turf/open/space/basic, +/area/space) "bgU" = ( /obj/structure/table/wood, /obj/item/device/flashlight/lamp/green{ @@ -24548,7 +24464,7 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, -/obj/structure/sign/bluecross_2{ +/obj/structure/sign/departments/medbay/alt{ pixel_x = 32; pixel_y = -32 }, @@ -24930,7 +24846,7 @@ /turf/open/floor/plating, /area/medical/medbay/central) "bje" = ( -/obj/structure/sign/bluecross_2, +/obj/structure/sign/departments/medbay/alt, /turf/closed/wall, /area/medical/medbay/central) "bjf" = ( @@ -24998,7 +24914,7 @@ /turf/open/floor/plasteel/green/corner, /area/science/research/lobby) "bjs" = ( -/obj/structure/sign/science, +/obj/structure/sign/departments/science, /turf/closed/wall, /area/science/research/lobby) "bjt" = ( @@ -25985,7 +25901,7 @@ /turf/open/floor/engine, /area/science/explab) "blV" = ( -/obj/structure/sign/kiddieplaque/perfect_drone{ +/obj/structure/sign/plaques/kiddie/perfect_drone{ pixel_y = 32 }, /turf/open/floor/engine, @@ -27321,11 +27237,7 @@ /turf/open/floor/plasteel/white, /area/science/xenobiology) "bpq" = ( -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'HIGH VOLTAGE'"; - icon_state = "shock"; - name = "HIGH VOLTAGE" - }, +/obj/structure/sign/warning/electricshock, /turf/closed/wall/r_wall, /area/science/xenobiology) "bpr" = ( @@ -28544,7 +28456,7 @@ /turf/open/floor/plasteel/white, /area/science/xenobiology) "brR" = ( -/obj/structure/sign/biohazard, +/obj/structure/sign/warning/biohazard, /turf/closed/wall, /area/science/xenobiology) "brS" = ( @@ -28625,7 +28537,7 @@ /turf/open/floor/plasteel, /area/science/xenobiology) "brZ" = ( -/obj/structure/sign/xenobio, +/obj/structure/sign/departments/xenobio, /obj/machinery/atmospherics/pipe/simple/general/hidden{ dir = 9 }, @@ -28745,12 +28657,7 @@ /turf/open/floor/pod/light, /area/shuttle/transport) "bsl" = ( -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; - icon_state = "space"; - layer = 4; - name = "EXTERNAL AIRLOCK" - }, +/obj/structure/sign/warning/vacuum/external, /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/hallway/secondary/entry) @@ -29331,7 +29238,7 @@ dir = 8 }, /obj/effect/landmark/xeno_spawn, -/obj/structure/sign/xenobio{ +/obj/structure/sign/departments/xenobio{ pixel_x = -32 }, /turf/open/floor/plasteel/floorgrime, @@ -29348,7 +29255,7 @@ /area/science/xenobiology) "btC" = ( /obj/effect/spawner/structure/window/reinforced, -/obj/structure/sign/biohazard, +/obj/structure/sign/warning/biohazard, /turf/open/floor/plating, /area/science/xenobiology) "btD" = ( @@ -29389,18 +29296,6 @@ /turf/open/floor/pod/dark, /area/shuttle/transport) "btK" = ( -/obj/machinery/door/airlock/titanium, -/obj/docking_port/mobile{ - dir = 8; - dwidth = 2; - height = 13; - id = "ferry"; - name = "ferry shuttle"; - port_direction = 1; - preferred_direction = 4; - roundstart_move = "ferry_away"; - width = 5 - }, /obj/docking_port/stationary{ dir = 8; dwidth = 2; @@ -29410,8 +29305,8 @@ turf_type = /turf/open/space; width = 5 }, -/turf/open/floor/pod/light, -/area/shuttle/transport) +/turf/open/space/basic, +/area/space) "btL" = ( /obj/machinery/door/airlock/external{ cyclelinkeddir = 4; @@ -30302,7 +30197,7 @@ name = "research shutters" }, /obj/machinery/door/firedoor/heavy, -/obj/structure/sign/securearea{ +/obj/structure/sign/warning/securearea{ pixel_x = 32 }, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ @@ -31900,7 +31795,7 @@ }, /obj/machinery/door/firedoor/heavy, /obj/effect/turf_decal/stripes/line, -/obj/structure/sign/securearea{ +/obj/structure/sign/warning/securearea{ pixel_x = 32 }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ @@ -32288,7 +32183,7 @@ /obj/structure/chair{ dir = 4 }, -/obj/structure/sign/holy{ +/obj/structure/sign/departments/holy{ pixel_x = -32 }, /turf/open/floor/plasteel/dark, @@ -32502,7 +32397,7 @@ /turf/open/floor/plasteel/whiteblue/corner, /area/medical/medbay/central) "bzY" = ( -/obj/structure/sign/bluecross_2, +/obj/structure/sign/departments/medbay/alt, /turf/closed/wall, /area/crew_quarters/heads/cmo) "bzZ" = ( @@ -32922,7 +32817,7 @@ /turf/open/floor/plasteel/white, /area/medical/virology) "bAY" = ( -/obj/structure/sign/biohazard, +/obj/structure/sign/warning/biohazard, /turf/closed/wall, /area/medical/virology) "bAZ" = ( @@ -33750,7 +33645,7 @@ /turf/open/floor/engine, /area/science/storage) "bCS" = ( -/obj/structure/sign/fire, +/obj/structure/sign/warning/fire, /turf/closed/wall, /area/science/storage) "bCT" = ( @@ -35198,7 +35093,7 @@ icon_state = "1-2" }, /obj/structure/disposalpipe/segment, -/obj/structure/sign/examroom{ +/obj/structure/sign/departments/examroom{ pixel_x = -32 }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, @@ -35214,7 +35109,7 @@ /turf/open/floor/plasteel/yellow/corner, /area/hallway/primary/aft) "bGa" = ( -/obj/structure/sign/science, +/obj/structure/sign/departments/science, /turf/closed/wall, /area/hallway/primary/aft) "bGb" = ( @@ -36349,7 +36244,7 @@ /obj/structure/cable{ icon_state = "4-8" }, -/obj/structure/sign/nosmoking_2{ +/obj/structure/sign/warning/nosmoking{ pixel_y = -32 }, /obj/effect/turf_decal/stripes/corner{ @@ -36443,12 +36338,7 @@ /area/chapel/dock) "bIV" = ( /obj/effect/spawner/structure/window/reinforced, -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; - icon_state = "space"; - layer = 4; - name = "EXTERNAL AIRLOCK" - }, +/obj/structure/sign/warning/vacuum/external, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plating, /area/chapel/dock) @@ -37036,7 +36926,7 @@ /area/medical/virology) "bKq" = ( /obj/effect/spawner/structure/window, -/obj/structure/sign/deathsposal, +/obj/structure/sign/warning/deathsposal, /turf/open/floor/plating, /area/medical/virology) "bKr" = ( @@ -37840,11 +37730,7 @@ frequency = 1441; id = "inc_in" }, -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; - icon_state = "space"; - layer = 4; - name = "EXTERNAL AIRLOCK"; +/obj/structure/sign/warning/vacuum/external{ pixel_x = -32 }, /turf/open/floor/engine/vacuum, @@ -37869,11 +37755,7 @@ /obj/machinery/light/small{ dir = 8 }, -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; - icon_state = "space"; - layer = 4; - name = "EXTERNAL AIRLOCK"; +/obj/structure/sign/warning/vacuum/external{ pixel_x = -32 }, /turf/open/floor/plating, @@ -38659,7 +38541,7 @@ /turf/open/floor/plating, /area/engine/atmos) "bOs" = ( -/obj/structure/sign/fire, +/obj/structure/sign/warning/fire, /turf/closed/wall/r_wall, /area/science/mixing) "bOt" = ( @@ -39748,10 +39630,7 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'RADIOACTIVE AREA'"; - icon_state = "radiation"; - name = "RADIOACTIVE AREA"; +/obj/structure/sign/warning/radiation/rad_area{ pixel_x = -32 }, /obj/effect/turf_decal/stripes/corner{ @@ -40351,10 +40230,7 @@ /turf/closed/wall/r_wall, /area/storage/tech) "bSE" = ( -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'RADIOACTIVE AREA'"; - icon_state = "radiation"; - name = "RADIOACTIVE AREA"; +/obj/structure/sign/warning/radiation/rad_area{ pixel_x = -32 }, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ @@ -40439,7 +40315,7 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, -/obj/structure/sign/engineering{ +/obj/structure/sign/departments/engineering{ pixel_y = -32 }, /turf/open/floor/plasteel/yellow/corner, @@ -40458,7 +40334,7 @@ icon_state = "plant-02" }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/structure/sign/engineering{ +/obj/structure/sign/departments/engineering{ pixel_y = -32 }, /turf/open/floor/plasteel/yellow/corner, @@ -40849,7 +40725,7 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/visible{ dir = 4 }, -/obj/structure/sign/atmosplaque{ +/obj/structure/sign/plaques/atmos{ pixel_y = 32 }, /obj/machinery/light{ @@ -41007,7 +40883,7 @@ /turf/open/floor/plating, /area/maintenance/department/engine) "bUf" = ( -/obj/structure/sign/securearea, +/obj/structure/sign/warning/securearea, /turf/closed/wall/r_wall, /area/storage/tech) "bUg" = ( @@ -41019,7 +40895,7 @@ /turf/open/floor/plasteel/dark, /area/storage/tech) "bUh" = ( -/obj/structure/sign/securearea, +/obj/structure/sign/warning/securearea, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/closed/wall/r_wall, /area/storage/tech) @@ -42602,7 +42478,7 @@ /obj/structure/disposalpipe/trunk{ dir = 4 }, -/obj/structure/sign/deathsposal{ +/obj/structure/sign/warning/deathsposal{ pixel_x = -32 }, /turf/open/floor/plating{ @@ -42695,11 +42571,7 @@ /area/engine/engineering) "bYf" = ( /obj/effect/spawner/structure/window/reinforced, -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'HIGH VOLTAGE'"; - icon_state = "shock"; - name = "HIGH VOLTAGE" - }, +/obj/structure/sign/warning/electricshock, /turf/open/floor/plating, /area/engine/engine_smes) "bYg" = ( @@ -43530,7 +43402,7 @@ /turf/open/floor/engine, /area/maintenance/disposal/incinerator) "bZV" = ( -/obj/structure/sign/fire, +/obj/structure/sign/warning/fire, /turf/closed/wall/r_wall, /area/maintenance/disposal/incinerator) "bZY" = ( @@ -44041,11 +43913,7 @@ /turf/open/floor/plasteel, /area/engine/engineering) "cbj" = ( -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'RADIOACTIVE AREA'"; - icon_state = "radiation"; - name = "RADIOACTIVE AREA" - }, +/obj/structure/sign/warning/radiation/rad_area, /turf/closed/wall/r_wall, /area/engine/engineering) "cbk" = ( @@ -44668,11 +44536,7 @@ /obj/machinery/light/small{ dir = 1 }, -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; - icon_state = "space"; - layer = 4; - name = "EXTERNAL AIRLOCK"; +/obj/structure/sign/warning/vacuum/external{ pixel_y = 32 }, /turf/open/floor/plating, @@ -45239,11 +45103,7 @@ /obj/structure/cable{ icon_state = "1-2" }, -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; - icon_state = "space"; - layer = 4; - name = "EXTERNAL AIRLOCK"; +/obj/structure/sign/warning/vacuum/external{ pixel_x = 32 }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, @@ -45292,11 +45152,7 @@ /obj/structure/cable{ icon_state = "1-2" }, -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; - icon_state = "space"; - layer = 4; - name = "EXTERNAL AIRLOCK"; +/obj/structure/sign/warning/vacuum/external{ pixel_x = -32 }, /turf/open/floor/plating, @@ -45758,7 +45614,7 @@ /area/chapel/main/monastery) "cgM" = ( /obj/structure/dresser, -/obj/structure/sign/securearea{ +/obj/structure/sign/warning/securearea{ desc = "Under the painting a plaque reads: 'While the meat grinder may not have spared you, fear not. Not one part of you has gone to waste... You were delicious.'"; icon_state = "monkey_painting"; name = "Mr. Deempisi portrait"; @@ -45795,11 +45651,7 @@ /obj/machinery/light/small{ dir = 8 }, -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; - icon_state = "space"; - layer = 4; - name = "EXTERNAL AIRLOCK"; +/obj/structure/sign/warning/vacuum/external{ pixel_x = -32 }, /turf/open/floor/plating, @@ -46595,7 +46447,7 @@ /turf/closed/wall, /area/asteroid/nearstation/bomb_site) "cjw" = ( -/obj/structure/sign/securearea{ +/obj/structure/sign/warning/securearea{ desc = "A warning sign which reads 'BOMB RANGE"; name = "BOMB RANGE" }, @@ -46625,22 +46477,6 @@ /turf/open/floor/plating/abductor, /area/shuttle/abandoned) "cjB" = ( -/obj/machinery/door/airlock/public/glass{ - name = "Shuttle Airlock" - }, -/obj/docking_port/mobile{ - dheight = 0; - dir = 8; - dwidth = 4; - height = 9; - id = "whiteship"; - launch_status = 0; - name = "White Ship"; - port_direction = 4; - preferred_direction = 1; - roundstart_move = "whiteship_away"; - width = 9 - }, /obj/docking_port/stationary{ dir = 8; dwidth = 11; @@ -46650,14 +46486,10 @@ turf_type = /turf/open/space; width = 35 }, -/turf/open/floor/plasteel/dark, -/area/shuttle/abandoned) +/turf/open/space/basic, +/area/space) "cjC" = ( -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; - icon_state = "space"; - layer = 4; - name = "EXTERNAL AIRLOCK"; +/obj/structure/sign/warning/vacuum/external{ pixel_y = 32 }, /obj/machinery/light/small{ @@ -46987,7 +46819,7 @@ /turf/open/floor/plasteel/dark, /area/library) "ckJ" = ( -/obj/structure/sign/securearea, +/obj/structure/sign/warning/securearea, /turf/closed/wall/r_wall, /area/engine/engineering) "ckK" = ( @@ -48753,12 +48585,7 @@ /turf/open/floor/plasteel/dark, /area/chapel/main/monastery) "crl" = ( -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; - icon_state = "space"; - layer = 4; - name = "EXTERNAL AIRLOCK" - }, +/obj/structure/sign/warning/vacuum/external, /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/chapel/asteroid/monastery) @@ -48804,11 +48631,7 @@ /turf/open/floor/plating, /area/maintenance/department/engine) "crA" = ( -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; - icon_state = "space"; - layer = 4; - name = "EXTERNAL AIRLOCK"; +/obj/structure/sign/warning/vacuum/external{ pixel_y = 32 }, /obj/structure/disposalpipe/segment{ @@ -49941,11 +49764,7 @@ /obj/machinery/light/small{ dir = 8 }, -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; - icon_state = "space"; - layer = 4; - name = "EXTERNAL AIRLOCK"; +/obj/structure/sign/warning/vacuum/external{ pixel_x = -32 }, /obj/machinery/camera{ @@ -50957,7 +50776,7 @@ /turf/open/floor/plating, /area/maintenance/department/engine) "cBM" = ( -/obj/structure/sign/securearea{ +/obj/structure/sign/warning/securearea{ desc = "Under the painting a plaque reads: 'While the meat grinder may not have spared you, fear not. Not one part of you has gone to waste... You were delicious.'"; icon_state = "monkey_painting"; name = "Mr. Deempisi portrait"; @@ -59963,11 +59782,11 @@ aaa aaa aaa aaa -cil -cja -cin -cja -cil +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -60219,13 +60038,13 @@ aaa aaa aaa aaa -cil -cil -ciw -cix -ciw -cil -cil +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -60475,15 +60294,15 @@ aaa aaa aaa aaa -cil -cil -ciw -ciw -cix -ciw -ciw -cil -cil +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -60732,15 +60551,15 @@ aaa aaa aaa aaa -cim -ciw -ciw -cjb -cjy -cjW -ciw -ciw -ckY +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -60989,15 +60808,15 @@ aaa aaa aaa aaa -cin -cix -cix -cjc -cjz -cjX -cix -cix -cin +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -61246,15 +61065,15 @@ aaa aaa aaa aaa -cim -ciw -ciw -cjd -cjA -cjY -ciw -ciw -ckY +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -61503,15 +61322,15 @@ aaa aaa aaa aaa -cil -cil -ciw -ciw -cix -ciw -ciw -cil -cil +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -61761,13 +61580,13 @@ aaa aaa aaa aaa -cil -cil -ciw -cix -ciw -cil -cil +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -62019,11 +61838,11 @@ aaa aaa aaa aaa -cil -cje +aaa +aaa cjB -cje -cil +aaa +aaa aaa aaa aaa @@ -65274,21 +65093,21 @@ aaa aaa aaa aaa -aFS -cBN -cBN -aKs -aFS -aFS -cBN -cBN -aFS -aKs -aFS -aKs -aFS -aFS -aFS +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -65531,21 +65350,21 @@ aaa aaa aaa aaa -aFS -aIs -aJx -aJx -cBN -aMI -aNZ -aNZ -aNZ -aMI -aNZ -aMI -aNZ -aVJ -aWD +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -65788,21 +65607,21 @@ aaa aaa aaa aaa -aFS -aIt -aJx -aJx -aLp -aIx -aIx -aIx -aIx -aIx -aIx -aIx -aIx -aVJ -aWD +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -66045,21 +65864,21 @@ aaa aaa aaa aaa -aFS -aIu -aJy -aKt -cBN -aIx -aOa -aOa -aOa -aIx -aIx -aOe -aOe -aVJ -aWD +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -66302,22 +66121,22 @@ aaa aaa aaa aaa -aFS -aFS -aFS -aFS -aHv -aMJ -aOb -aOb -aOb -aRA -aHv -aFS -aFS -aFS -aFS -aFS +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -66557,24 +66376,24 @@ aaa aaa aaa aaa -aFS -aFS -aHv -aIv -aJz -aKu -aLq -aIx -aIx -aIx -aIx -aIx -aFS -aTF -aUE -aTF -aVJ -aWD +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -66814,24 +66633,24 @@ aaa aaa aaa aaa -cBN -aGQ -aHw -aIw -aIw -cBN -aIx -aIx -aOc -aPj -aOc -aIx -cBN -aMI -aMI -aMI -aVJ -aWD +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -67071,24 +66890,24 @@ aaa aaa aaa aaa -aFT -aGR -aHx -aIx -aIx -aKv -aIx -aIx -aOd -aPk -aQq -aIx -aSp -aMI -aMI -aMI -aVJ -aWD +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -67328,24 +67147,24 @@ aaa aaa aaa aaa -aFT -aGS -aHy -aIy -aIy -aFT -aIx -aIx -aOc -aPl -aOc -aIx -aFT -aMI -aNZ -aNZ -aVJ -aWD +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -67585,24 +67404,24 @@ axB aaa aaa aaa -aFS -aFS -aHv -aIz -aJA -aKu -aLq -aIx -aIx -aIx -aIx -aIx -aFS -aTG -aUF -aVK -aVJ -aWD +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -67844,22 +67663,22 @@ aaa aaa aaa aaa -aFS -aFS -aFS -aFS -aHv -aMJ -aOa -aOa -aOa -aRA -aHv -aFS -aFS -aFS -aFS -aFS +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -68101,21 +67920,21 @@ aaa aaa aaa aaa -aFS -aIA -aJB -aKw -aFT -aIx -aOb -aOb -aOb -aIx -aIx -aNZ -aNZ -aVJ -aWD +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -68358,21 +68177,21 @@ aaa aaa aaa aaa -aFS -aIA -aJC -aJC -aLr -aIx -aIx -aIx -aIx -aIx -aIx -aIx -aIx -aVJ -aWD +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -68615,21 +68434,6 @@ aaa aaa aaa aaa -aFS -aIA -aJC -aJC -aFT -aMI -aOe -aOe -aOe -aMI -aOe -aMI -aOe -aVJ -aWD aaa aaa aaa @@ -68651,7 +68455,22 @@ aaa aaa aaa aaa -bsg +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -68872,21 +68691,18 @@ aaa aaa aaa aaa -aFS -aFT -aFT -aKx -aFS -aFS -aFT -aFT -aFS -aKs -aFS +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aTH -aFS -aFS -aFS aaa aaa aaa @@ -68907,9 +68723,12 @@ aaa aaa aaa aaa -bsg -btG -bsg +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -69152,10 +68971,6 @@ aaa aaa aaa aaa -beV -bgP -bgP -beV aaa aaa aaa @@ -69164,9 +68979,13 @@ aaa aaa aaa aaa -bsh -bsk -buX +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -69409,10 +69228,6 @@ aaa aaa aaa aaa -beV -bfR -bhC -beV aaa aaa aaa @@ -69421,9 +69236,13 @@ aaa aaa aaa aaa -bqP -btH -bqP +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -69665,23 +69484,23 @@ aZx aZx aaa aaa -beV -beV -bgQ -bgQ -beV -beV +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aZx aZx aZx aZx -bqP -bqP -btI -bqP -bqP +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -69882,15 +69701,15 @@ amI anu aog aiu -apC -apC -apD -apC -apC -apD -apC -apC -apC +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aiu azW aBa @@ -69922,23 +69741,23 @@ baJ aZx bcW aZx -beV -bfQ -bfR -bfR -bhX -beV +aaa +aaa +aaa +aaa +aaa +aaa aZx aZx aZx baJ bon aZx -bqQ -bsi -bsk -buY -cqq +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -70139,15 +69958,15 @@ amJ anv aoh aiu -apD -aqj -are -ass -atr -auv -avo -awG -axD +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aiu azX aBb @@ -70179,23 +69998,23 @@ baK bbQ bcX bdV -beW -bfR -bgR -bgR -bfR -beW +aaa +aaa +aaa +aaa +aaa +aaa bbQ bcX bdV baK bon aZx -bqP -bsi -bsk -buY -bqP +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -70396,15 +70215,15 @@ amK anw aoh aiu -apD -aqk -arf -apC -ats -atr -atr -awG -axD +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aiu azY aiu @@ -70436,23 +70255,23 @@ baK aZx aZx aZx -beV -bfS -bfR -bfR -bhY -beV +aaa +aaa +aaa +aaa +aaa +aaa aZx aZx aZx baK bon aZx -bqP -bsj -bsk -bsk -bqP +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -70653,15 +70472,15 @@ akA akA aoi aiu -apD -aql -arg -ast -att -auw -atr -awG -axD +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aiu azZ aiu @@ -70693,23 +70512,23 @@ baK bbR bcY aZx -beX -bfT -bgR -bgR -bfR -beX +aaa +aaa +aaa +aaa +aaa +aaa aZx bkQ bbR baK bon aZx -bqR -bsk -btJ -bsk -bwp +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -70910,15 +70729,15 @@ amL anx aoj aiu -apC -apC -arh -apC -apC -apC +aaa +aaa +aaa +aaa +aaa +aaa avp -apC -apC +aaa +aaa aiu aAa aiu @@ -70950,23 +70769,23 @@ baL baK bcZ aZx -beX -bfU -bfR -bfR -bfR -beX +aaa +aaa +aaa +aaa +aaa +aaa aZx bkR baK baL bon aZx -bqP -bsk -bsk -buZ -bqP +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -71207,23 +71026,23 @@ baK bbS bda aZx -beX -bfR -bgR -bgR -bfR -beX +aaa +aaa +aaa +aaa +aaa +aaa aZx bkS bbS baK bon aZx -bqP -bsi -bsk -buY -bqP +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -71464,23 +71283,23 @@ baM aZx aZx aZx -beV -bfV -bgR -bgR -bhZ -beV +aaa +aaa +aaa +aaa +aaa +aaa aZx aZx aZx bno boo aZx -bqQ -bsi -bsk -buY -cqq +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -71721,23 +71540,23 @@ baN bbQ bcX bdV -beW -bfR -bfR -bfR -bfR -beW +aaa +aaa +aaa +aaa +aaa +aaa bbQ bcX bdV bnp bon aZx -bqP -bqQ +aaa +aaa btK -bqQ -bqP +aaa +aaa aaa aaa aaa @@ -71978,12 +71797,12 @@ baN aZx bcW aZx -beV -bfW -bfW -bfW -bfW -beV +aaa +aaa +aaa +aaa +aaa +aaa aZx aZx aZx @@ -72235,12 +72054,12 @@ baN bbR bbR aYG -beV -bfX +aaa +aaa bgS -bhD -bia -beV +aaa +aaa +aaa aYG bbR bbR @@ -90722,10 +90541,10 @@ aJm aKg cDa aMo -cDd -cDf -cDg -cDh +cDa +cDa +cDa +cDa aLg aTj aUu @@ -91753,8 +91572,8 @@ aMs aNO aPb aQe -cDi -cDj +cDa +cDa aTn aUx aVA @@ -92011,7 +91830,7 @@ aNP aPb aNO aNP -cDk +cDa aTo aSk aTm @@ -92268,7 +92087,7 @@ aNO aPc aQf aRq -cDl +cDa aTp aSk aTm @@ -92525,7 +92344,7 @@ aNQ aNO aQg aNP -cDm +cDa aTq aSk aVB @@ -92776,13 +92595,13 @@ aEd aEd aEd cCX -cDb -cDc -cDe +cDa +cDa +cDa coL coL coL -cDn +cDa aTr aUy aPd @@ -93551,25 +93370,25 @@ aKq aJs aEj aaa -aQh -aQh -aQh -aTt -aUA -aQh -aWC -aXB -aQh -aQh -aQh aaa -apC -apC -apD +aaa +aaa +aaa +aUA +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa bfK -apD -apC -apC +aaa +aaa +aaa aEj aTx bkE @@ -93807,26 +93626,26 @@ aKn aKn aMy aEj -aPe -aQh -aQh -aRr -aRr -aRr -aVC -aRr -aRr -aRr -aRr -aQh aaa -apC -bdN -atr -atr -beQ -bhw -apC +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aEj aTx bkE @@ -94064,26 +93883,26 @@ aEj aLk aLk aEj -aPe -aQi -aRr -aRr -aRr -aRr -aRr -aRr -aRr -aRr -aRr -aQh aaa -apD -bdO -beQ -atr -beQ -bhx -bhW +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aEj bjz bkE @@ -94321,26 +94140,26 @@ aKo aLl aMz aEj -aPe -aQi -aRr -aRr -aRr -aRr -aRr -aRr -aRr -aRr -aZu -aQh aaa -apC -bdP -atr -atr -beQ -bhy -apC +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aEj aTx bkF @@ -94578,26 +94397,26 @@ aFi aFi aEj aEj -aPe -aQi -aRr -aRr -aRr -aRr -aRr -aRr -aRr -aRr -aRr -aQh aaa -apC -apC -apD -bfL -apD -apC -apC +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aEj aTx bkF @@ -94835,18 +94654,18 @@ aKp aFi aMA aEj -aPe -aQh -aQh -aRr -aRr -aRr -aVD -aRr -aRr -aRr -aRr -aQh +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -95093,17 +94912,17 @@ aFi aFi aEj aaa -aQh -aQh -aQh -aQh -aQh -aQh -aQh -aQh -aQh -aQh -aQh +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa diff --git a/_maps/map_files/debug/runtimestation.dmm b/_maps/map_files/debug/runtimestation.dmm index d8ee100bf1..60bf3a95a6 100644 --- a/_maps/map_files/debug/runtimestation.dmm +++ b/_maps/map_files/debug/runtimestation.dmm @@ -20,10 +20,6 @@ "af" = ( /turf/open/floor/plating, /area/maintenance/department/bridge) -"ag" = ( -/obj/structure/lattice, -/turf/open/space, -/area/space/nearstation) "ah" = ( /turf/closed/wall/r_wall, /area/engine/atmos) @@ -131,10 +127,7 @@ /area/engine/gravity_generator) "au" = ( /obj/effect/spawner/structure/window/reinforced, -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'RADIOACTIVE AREA'"; - icon_state = "radiation"; - name = "RADIOACTIVE AREA"; +/obj/structure/sign/warning/radiation/rad_area{ pixel_y = 32 }, /turf/open/floor/plating, @@ -1306,15 +1299,6 @@ dir = 1 }, /area/hallway/primary/central) -"dV" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/obj/machinery/camera/autoname, -/turf/open/floor/plasteel/blue/side{ - dir = 1 - }, -/area/hallway/primary/central) "dW" = ( /obj/effect/turf_decal/stripes/line, /obj/machinery/camera/autoname, @@ -2510,7 +2494,7 @@ bI cf cq bu -dV +dU bE bE cN diff --git a/_maps/map_files/generic/CentCom.dmm b/_maps/map_files/generic/CentCom.dmm index a45c06d0dc..1d7f605a61 100644 --- a/_maps/map_files/generic/CentCom.dmm +++ b/_maps/map_files/generic/CentCom.dmm @@ -2860,7 +2860,7 @@ /turf/closed/indestructible/riveted, /area/centcom/prison) "iI" = ( -/obj/structure/sign/securearea, +/obj/structure/sign/warning/securearea, /turf/closed/indestructible/riveted, /area/centcom/prison) "iJ" = ( @@ -2992,12 +2992,7 @@ /area/centcom/control) "jb" = ( /obj/effect/spawner/structure/window/reinforced, -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; - icon_state = "space"; - layer = 4; - name = "EXTERNAL AIRLOCK" - }, +/obj/structure/sign/warning/vacuum/external, /turf/open/floor/plating, /area/centcom/supply) "jc" = ( @@ -3250,11 +3245,12 @@ "jC" = ( /obj/docking_port/stationary{ dir = 8; - dwidth = 5; + dwidth = 8; height = 7; id = "supply_away"; + json_key = "cargo"; name = "CentCom"; - width = 12 + width = 20 }, /turf/open/space, /area/space) @@ -4751,7 +4747,7 @@ /turf/closed/indestructible/fakeglass, /area/syndicate_mothership/control) "nA" = ( -/obj/structure/sign/nosmoking_2, +/obj/structure/sign/warning/nosmoking, /turf/closed/indestructible/riveted, /area/centcom/ferry) "nB" = ( @@ -5339,30 +5335,6 @@ dir = 8 }, /area/centcom/control) -"oS" = ( -/obj/machinery/porta_turret/syndicate{ - dir = 9 - }, -/turf/closed/wall/mineral/plastitanium, -/area/shuttle/syndicate/bridge) -"oT" = ( -/turf/closed/wall/mineral/plastitanium, -/area/shuttle/syndicate/bridge) -"oU" = ( -/obj/structure/window/plastitanium, -/obj/machinery/door/poddoor/shutters{ - id = "syndieshutters"; - name = "blast shutters" - }, -/obj/structure/grille, -/turf/open/floor/plating, -/area/shuttle/syndicate/bridge) -"oV" = ( -/obj/machinery/porta_turret/syndicate{ - dir = 5 - }, -/turf/closed/wall/mineral/plastitanium, -/area/shuttle/syndicate/bridge) "oW" = ( /obj/structure/flora/bush, /obj/effect/light_emitter{ @@ -5607,40 +5579,6 @@ dir = 8 }, /area/centcom/control) -"px" = ( -/obj/machinery/computer/med_data/syndie, -/obj/effect/turf_decal/bot_white, -/turf/open/floor/plasteel/dark, -/area/shuttle/syndicate/bridge) -"py" = ( -/obj/machinery/computer/crew/syndie, -/obj/effect/turf_decal/bot_white, -/turf/open/floor/plasteel/dark, -/area/shuttle/syndicate/bridge) -"pz" = ( -/obj/machinery/computer/camera_advanced/shuttle_docker/syndicate, -/obj/effect/turf_decal/bot_white, -/turf/open/floor/plasteel/dark, -/area/shuttle/syndicate/bridge) -"pA" = ( -/obj/machinery/computer/shuttle/syndicate, -/obj/effect/turf_decal/bot_white, -/turf/open/floor/plasteel/dark, -/area/shuttle/syndicate/bridge) -"pB" = ( -/obj/structure/table/reinforced, -/turf/open/floor/plasteel/dark, -/area/shuttle/syndicate/bridge) -"pC" = ( -/obj/machinery/computer/camera_advanced/syndie, -/obj/effect/turf_decal/bot_white, -/turf/open/floor/plasteel/dark, -/area/shuttle/syndicate/bridge) -"pD" = ( -/obj/machinery/computer/secure_data/syndie, -/obj/effect/turf_decal/bot_white, -/turf/open/floor/plasteel/dark, -/area/shuttle/syndicate/bridge) "pF" = ( /obj/machinery/door/airlock/centcom{ name = "Auxillary Dock"; @@ -5758,64 +5696,13 @@ /turf/open/floor/plasteel, /area/centcom/supply) "pR" = ( -/obj/structure/table/reinforced, -/obj/machinery/status_display{ - pixel_x = -32 - }, -/obj/item/clipboard, -/obj/machinery/light{ - dir = 8 - }, -/obj/item/folder/red, -/obj/item/toy/figure/syndie, -/turf/open/floor/plasteel/vault{ - dir = 8 - }, -/area/shuttle/syndicate/bridge) -"pS" = ( -/obj/structure/chair/office/dark{ - dir = 8; - name = "tactical swivel chair" - }, -/turf/open/floor/plasteel/dark, -/area/shuttle/syndicate/bridge) -"pT" = ( -/turf/open/floor/plasteel/dark, -/area/shuttle/syndicate/bridge) -"pU" = ( -/obj/structure/chair/office/dark{ - dir = 1; - name = "tactical swivel chair" - }, -/obj/machinery/button/door{ - id = "syndieshutters"; - name = "Cockpit View Control"; - pixel_x = 32; - pixel_y = 32; - req_access_txt = "150" - }, -/turf/open/floor/plasteel/dark, -/area/shuttle/syndicate/bridge) -"pV" = ( -/obj/structure/chair/office/dark{ - dir = 4; - name = "tactical swivel chair" - }, -/turf/open/floor/plasteel/dark, -/area/shuttle/syndicate/bridge) -"pW" = ( -/obj/structure/table/reinforced, -/obj/machinery/ai_status_display{ - pixel_x = 32 - }, -/obj/item/storage/fancy/donut_box, /obj/machinery/light{ dir = 4 }, /turf/open/floor/plasteel/vault{ - dir = 8 + dir = 5 }, -/area/shuttle/syndicate/bridge) +/area/centcom/ferry) "pX" = ( /obj/item/storage/crayons, /obj/structure/table, @@ -5929,7 +5816,7 @@ /area/centcom/ferry) "ql" = ( /obj/structure/dresser, -/obj/structure/sign/goldenplaque/captain{ +/obj/structure/sign/plaques/golden/captain{ pixel_x = 32 }, /turf/open/floor/plasteel/vault{ @@ -6081,9 +5968,6 @@ "qE" = ( /turf/closed/indestructible/riveted/uranium, /area/wizard_station) -"qI" = ( -/turf/open/floor/plasteel/vault/side, -/area/shuttle/syndicate/bridge) "qJ" = ( /obj/machinery/computer/shuttle/syndicate/recall, /turf/open/floor/plasteel/bar{ @@ -6208,19 +6092,6 @@ /obj/machinery/computer/shuttle, /turf/open/floor/engine/cult, /area/wizard_station) -"rb" = ( -/obj/machinery/status_display, -/turf/closed/wall/mineral/plastitanium, -/area/shuttle/syndicate/bridge) -"rc" = ( -/obj/machinery/door/airlock/hatch{ - name = "Cockpit"; - req_access_txt = "150" - }, -/turf/open/floor/plasteel/vault{ - dir = 8 - }, -/area/shuttle/syndicate/bridge) "rd" = ( /obj/structure/flora/grass/brown, /obj/effect/light_emitter{ @@ -6411,7 +6282,7 @@ /turf/open/floor/plasteel/grimy, /area/centcom/ferry) "rz" = ( -/obj/structure/sign/securearea, +/obj/structure/sign/warning/securearea, /turf/closed/indestructible/riveted, /area/centcom/ferry) "rA" = ( @@ -6647,46 +6518,6 @@ }, /turf/open/floor/engine/cult, /area/wizard_station) -"rY" = ( -/obj/machinery/porta_turret/syndicate{ - dir = 10 - }, -/turf/closed/wall/mineral/plastitanium, -/area/shuttle/syndicate/hallway) -"rZ" = ( -/turf/closed/wall/mineral/plastitanium, -/area/shuttle/syndicate/hallway) -"sa" = ( -/obj/structure/table/reinforced, -/obj/item/stack/cable_coil/white, -/obj/item/stack/cable_coil/white, -/obj/item/crowbar/red, -/turf/open/floor/plasteel/vault{ - dir = 5 - }, -/area/shuttle/syndicate/hallway) -"sb" = ( -/turf/open/floor/plasteel/vault{ - dir = 5 - }, -/area/shuttle/syndicate/hallway) -"sc" = ( -/obj/structure/table/reinforced, -/obj/item/storage/box/handcuffs{ - pixel_x = 3; - pixel_y = 3 - }, -/obj/item/storage/box/zipties, -/turf/open/floor/plasteel/vault{ - dir = 5 - }, -/area/shuttle/syndicate/hallway) -"sd" = ( -/obj/machinery/porta_turret/syndicate{ - dir = 6 - }, -/turf/closed/wall/mineral/plastitanium, -/area/shuttle/syndicate/hallway) "se" = ( /obj/machinery/light{ dir = 8 @@ -7088,27 +6919,6 @@ }, /turf/open/floor/engine/cult, /area/wizard_station) -"sY" = ( -/obj/structure/chair{ - dir = 4; - name = "tactical chair" - }, -/turf/open/floor/plasteel/vault{ - dir = 5 - }, -/area/shuttle/syndicate/hallway) -"sZ" = ( -/turf/open/floor/plasteel/dark, -/area/shuttle/syndicate/hallway) -"ta" = ( -/obj/structure/chair{ - dir = 8; - name = "tactical chair" - }, -/turf/open/floor/plasteel/vault{ - dir = 5 - }, -/area/shuttle/syndicate/hallway) "te" = ( /obj/structure/table/wood, /obj/item/reagent_containers/food/snacks/pizzaslice/mushroom, @@ -7422,7 +7232,7 @@ }, /area/centcom/control) "tP" = ( -/obj/structure/sign/securearea, +/obj/structure/sign/warning/securearea, /turf/closed/indestructible/riveted, /area/centcom/control) "tQ" = ( @@ -7471,50 +7281,6 @@ }, /turf/open/floor/engine/cult, /area/wizard_station) -"tY" = ( -/obj/machinery/porta_turret/syndicate{ - dir = 9 - }, -/turf/closed/wall/mineral/plastitanium, -/area/shuttle/syndicate/eva) -"tZ" = ( -/turf/closed/wall/mineral/plastitanium, -/area/shuttle/syndicate/eva) -"ua" = ( -/obj/structure/chair{ - dir = 4; - name = "tactical chair" - }, -/obj/machinery/light{ - dir = 8 - }, -/turf/open/floor/plasteel/vault{ - dir = 5 - }, -/area/shuttle/syndicate/hallway) -"ub" = ( -/obj/structure/chair{ - dir = 8; - name = "tactical chair" - }, -/obj/machinery/light{ - dir = 4 - }, -/turf/open/floor/plasteel/vault{ - dir = 5 - }, -/area/shuttle/syndicate/hallway) -"uc" = ( -/obj/structure/chair{ - dir = 4; - name = "tactical chair" - }, -/obj/effect/turf_decal/bot_white, -/obj/machinery/light{ - dir = 8 - }, -/turf/open/floor/plasteel/dark, -/area/shuttle/syndicate/airlock) "ud" = ( /obj/machinery/door/poddoor/shutters{ id = "nukeop_ready"; @@ -7745,23 +7511,6 @@ /obj/structure/chair/wood/wings, /turf/open/floor/carpet, /area/wizard_station) -"uG" = ( -/obj/machinery/suit_storage_unit/syndicate, -/obj/effect/turf_decal/stripes/line{ - dir = 5 - }, -/turf/open/floor/mineral/plastitanium, -/area/shuttle/syndicate/eva) -"uH" = ( -/turf/open/floor/plasteel/vault{ - dir = 5 - }, -/area/shuttle/syndicate/eva) -"uI" = ( -/obj/machinery/portable_atmospherics/canister/oxygen, -/obj/effect/turf_decal/bot_white, -/turf/open/floor/plasteel/dark, -/area/shuttle/syndicate/eva) "uJ" = ( /obj/machinery/door/airlock/external{ req_access_txt = "150" @@ -7964,7 +7713,8 @@ height = 50; id = "emergency_away"; name = "CentCom Emergency Shuttle Dock"; - width = 50 + width = 50; + json_key = "emergency" }, /turf/open/space, /area/space) @@ -7997,36 +7747,6 @@ }, /turf/open/floor/carpet, /area/wizard_station) -"vo" = ( -/obj/machinery/suit_storage_unit/syndicate, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/turf/open/floor/mineral/plastitanium, -/area/shuttle/syndicate/eva) -"vp" = ( -/obj/structure/tank_dispenser/oxygen, -/obj/effect/turf_decal/bot_white, -/turf/open/floor/plasteel/dark, -/area/shuttle/syndicate/eva) -"vq" = ( -/turf/closed/wall/mineral/plastitanium, -/area/shuttle/syndicate/airlock) -"vs" = ( -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; - icon_state = "space"; - layer = 4; - name = "EXTERNAL AIRLOCK" - }, -/turf/closed/wall/mineral/plastitanium, -/area/shuttle/syndicate/airlock) -"vt" = ( -/obj/machinery/porta_turret/syndicate{ - dir = 5 - }, -/turf/closed/wall/mineral/plastitanium, -/area/shuttle/syndicate/airlock) "vu" = ( /obj/item/storage/box/drinkingglasses, /obj/item/reagent_containers/food/drinks/bottle/rum, @@ -8329,28 +8049,6 @@ }, /turf/open/floor/carpet, /area/wizard_station) -"wf" = ( -/obj/machinery/portable_atmospherics/canister/oxygen, -/obj/machinery/light{ - dir = 4 - }, -/obj/effect/turf_decal/bot_white, -/turf/open/floor/plasteel/dark, -/area/shuttle/syndicate/eva) -"wg" = ( -/obj/structure/grille, -/obj/structure/window/plastitanium, -/turf/open/floor/plating, -/area/shuttle/syndicate/hallway) -"wh" = ( -/obj/machinery/door/airlock/external{ - name = "Ready Room"; - req_access_txt = "150" - }, -/turf/open/floor/plasteel/vault{ - dir = 8 - }, -/area/shuttle/syndicate/hallway) "wl" = ( /obj/machinery/light, /turf/open/floor/wood, @@ -8574,29 +8272,6 @@ /obj/item/toy/cards/deck, /turf/open/floor/carpet, /area/wizard_station) -"wR" = ( -/turf/open/floor/plasteel/dark, -/area/shuttle/syndicate/eva) -"wS" = ( -/obj/machinery/door/airlock/external{ - name = "E.V.A. Gear Storage"; - req_access_txt = "150" - }, -/turf/open/floor/plasteel/vault{ - dir = 8 - }, -/area/shuttle/syndicate/eva) -"wT" = ( -/obj/machinery/door/airlock/external{ - req_access_txt = "150" - }, -/turf/open/floor/mineral/plastitanium, -/area/shuttle/syndicate/airlock) -"wU" = ( -/turf/open/floor/plasteel/vault{ - dir = 5 - }, -/area/shuttle/syndicate/airlock) "wV" = ( /obj/machinery/computer/telecrystals/boss{ dir = 1 @@ -8646,6 +8321,7 @@ dwidth = 2; height = 13; id = "ferry_away"; + json_key = "ferry"; name = "CentCom Ferry Dock"; width = 5 }, @@ -8807,28 +8483,6 @@ /obj/machinery/light, /turf/open/floor/carpet, /area/wizard_station) -"xA" = ( -/obj/machinery/suit_storage_unit/syndicate, -/obj/effect/turf_decal/stripes/line{ - dir = 6 - }, -/turf/open/floor/mineral/plastitanium, -/area/shuttle/syndicate/eva) -"xB" = ( -/obj/structure/reagent_dispensers/fueltank, -/obj/effect/turf_decal/bot_white, -/turf/open/floor/plasteel/dark, -/area/shuttle/syndicate/eva) -"xC" = ( -/obj/structure/grille, -/obj/structure/window/plastitanium, -/turf/open/floor/plating, -/area/shuttle/syndicate/eva) -"xD" = ( -/obj/structure/grille, -/obj/structure/window/plastitanium, -/turf/open/floor/plating, -/area/shuttle/syndicate/airlock) "xG" = ( /turf/open/floor/plasteel/dark, /area/syndicate_mothership/control) @@ -8969,38 +8623,6 @@ }, /turf/open/floor/engine/cult, /area/wizard_station) -"yc" = ( -/obj/machinery/porta_turret/syndicate{ - dir = 9 - }, -/turf/closed/wall/mineral/plastitanium, -/area/shuttle/syndicate/medical) -"yd" = ( -/turf/closed/wall/mineral/plastitanium, -/area/shuttle/syndicate/medical) -"ye" = ( -/obj/machinery/ai_status_display, -/turf/closed/wall/mineral/plastitanium, -/area/shuttle/syndicate/medical) -"yf" = ( -/turf/closed/wall/mineral/plastitanium/nodiagonal, -/area/shuttle/syndicate/medical) -"yg" = ( -/turf/closed/wall/mineral/plastitanium/nodiagonal, -/area/shuttle/syndicate/armory) -"yh" = ( -/turf/closed/wall/mineral/plastitanium, -/area/shuttle/syndicate/armory) -"yi" = ( -/obj/machinery/status_display, -/turf/closed/wall/mineral/plastitanium, -/area/shuttle/syndicate/armory) -"yj" = ( -/obj/machinery/porta_turret/syndicate{ - dir = 5 - }, -/turf/closed/wall/mineral/plastitanium, -/area/shuttle/syndicate/armory) "yk" = ( /obj/effect/turf_decal/stripes/corner{ dir = 8 @@ -9022,7 +8644,7 @@ /area/syndicate_mothership/control) "yn" = ( /obj/effect/spawner/structure/window/reinforced, -/obj/structure/sign/vacuum, +/obj/structure/sign/warning/vacuum, /turf/open/floor/plating, /area/centcom/ferry) "yo" = ( @@ -9043,7 +8665,7 @@ /obj/machinery/computer/security/telescreen/entertainment{ pixel_y = -28 }, -/obj/structure/sign/securearea{ +/obj/structure/sign/warning/securearea{ pixel_x = 32 }, /obj/effect/turf_decal/stripes/line{ @@ -9196,125 +8818,6 @@ /obj/effect/decal/cleanable/blood/splatter, /turf/open/floor/grass, /area/wizard_station) -"yL" = ( -/obj/machinery/sleeper/syndie{ - dir = 4 - }, -/obj/effect/turf_decal/bot_white, -/turf/open/floor/plasteel/dark, -/area/shuttle/syndicate/medical) -"yM" = ( -/turf/open/floor/plasteel/dark, -/area/shuttle/syndicate/medical) -"yN" = ( -/obj/machinery/light{ - dir = 1 - }, -/turf/open/floor/plasteel/dark, -/area/shuttle/syndicate/medical) -"yO" = ( -/obj/item/reagent_containers/glass/bottle/epinephrine{ - pixel_x = 6 - }, -/obj/item/reagent_containers/glass/bottle/charcoal{ - pixel_x = -3 - }, -/obj/item/reagent_containers/glass/bottle/epinephrine{ - pixel_x = -3; - pixel_y = 8 - }, -/obj/item/reagent_containers/glass/bottle/charcoal{ - pixel_x = 6; - pixel_y = 8 - }, -/obj/item/reagent_containers/syringe/epinephrine{ - pixel_x = 3; - pixel_y = -2 - }, -/obj/item/reagent_containers/syringe/epinephrine{ - pixel_x = 4; - pixel_y = 1 - }, -/obj/item/reagent_containers/syringe/epinephrine{ - pixel_x = -2; - pixel_y = 5 - }, -/obj/item/reagent_containers/syringe/epinephrine{ - pixel_x = 2; - pixel_y = 8 - }, -/obj/structure/table/reinforced, -/obj/effect/turf_decal/bot_white, -/turf/open/floor/plasteel/dark, -/area/shuttle/syndicate/medical) -"yP" = ( -/obj/structure/table/reinforced, -/obj/item/stack/medical/gauze, -/obj/item/stack/medical/bruise_pack, -/obj/item/stack/medical/ointment, -/obj/effect/turf_decal/bot_white, -/turf/open/floor/plasteel/dark, -/area/shuttle/syndicate/medical) -"yQ" = ( -/obj/structure/grille, -/obj/structure/window/plastitanium, -/turf/open/floor/plating, -/area/shuttle/syndicate/medical) -"yR" = ( -/obj/structure/grille, -/obj/structure/window/plastitanium, -/turf/open/floor/plating, -/area/shuttle/syndicate/armory) -"yS" = ( -/obj/item/stock_parts/cell/high{ - pixel_x = -3; - pixel_y = 3 - }, -/obj/item/stock_parts/cell/high, -/obj/structure/table/reinforced, -/turf/open/floor/plasteel/dark, -/area/shuttle/syndicate/armory) -"yT" = ( -/obj/item/screwdriver{ - pixel_y = 9 - }, -/obj/item/device/assembly/voice{ - pixel_y = 3 - }, -/obj/structure/table/reinforced, -/turf/open/floor/plasteel/dark, -/area/shuttle/syndicate/armory) -"yU" = ( -/obj/item/wrench, -/obj/item/device/assembly/infra, -/obj/structure/table/reinforced, -/obj/machinery/light{ - dir = 1 - }, -/turf/open/floor/plasteel/dark, -/area/shuttle/syndicate/armory) -"yV" = ( -/obj/item/device/assembly/signaler, -/obj/item/device/assembly/signaler, -/obj/item/device/assembly/prox_sensor{ - pixel_x = -8; - pixel_y = 4 - }, -/obj/item/device/assembly/prox_sensor{ - pixel_x = -8; - pixel_y = 4 - }, -/obj/structure/table/reinforced, -/turf/open/floor/plasteel/dark, -/area/shuttle/syndicate/armory) -"yW" = ( -/obj/item/weldingtool/largetank{ - pixel_y = 3 - }, -/obj/item/device/multitool, -/obj/structure/table/reinforced, -/turf/open/floor/plasteel/dark, -/area/shuttle/syndicate/armory) "yX" = ( /obj/structure/chair/stool, /turf/open/floor/plasteel/dark, @@ -9494,34 +8997,6 @@ /obj/item/reagent_containers/food/snacks/meat/slab/corgi, /turf/open/floor/grass, /area/wizard_station) -"zs" = ( -/obj/structure/bed/roller, -/obj/machinery/iv_drip, -/obj/effect/turf_decal/bot_white, -/turf/open/floor/plasteel/dark, -/area/shuttle/syndicate/medical) -"zt" = ( -/turf/open/floor/plasteel/vault/side, -/area/shuttle/syndicate/medical) -"zu" = ( -/obj/machinery/light{ - dir = 8 - }, -/turf/open/floor/plasteel/vault{ - dir = 5 - }, -/area/shuttle/syndicate/hallway) -"zv" = ( -/obj/machinery/light{ - dir = 4 - }, -/turf/open/floor/plasteel/vault{ - dir = 5 - }, -/area/shuttle/syndicate/hallway) -"zw" = ( -/turf/open/floor/plasteel/vault/side, -/area/shuttle/syndicate/armory) "zx" = ( /obj/structure/closet/syndicate/personal, /obj/effect/turf_decal/stripes/line{ @@ -9658,67 +9133,6 @@ }, /turf/open/floor/grass, /area/wizard_station) -"zR" = ( -/turf/open/floor/plasteel/vault{ - dir = 5 - }, -/area/shuttle/syndicate/medical) -"zS" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 9 - }, -/turf/open/floor/mineral/plastitanium, -/area/shuttle/syndicate/medical) -"zT" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/turf/open/floor/mineral/plastitanium, -/area/shuttle/syndicate/medical) -"zU" = ( -/obj/machinery/door/airlock/hatch{ - req_access_txt = "150" - }, -/turf/open/floor/plasteel/vault{ - dir = 8 - }, -/area/shuttle/syndicate/medical) -"zV" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/turf/open/floor/mineral/plastitanium, -/area/shuttle/syndicate/hallway) -"zW" = ( -/obj/machinery/door/airlock/hatch{ - req_access_txt = "150" - }, -/turf/open/floor/plasteel/vault{ - dir = 8 - }, -/area/shuttle/syndicate/armory) -"zX" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/turf/open/floor/mineral/plastitanium, -/area/shuttle/syndicate/armory) -"zY" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 5 - }, -/turf/open/floor/mineral/plastitanium, -/area/shuttle/syndicate/armory) -"zZ" = ( -/turf/open/floor/plasteel/vault{ - dir = 5 - }, -/area/shuttle/syndicate/armory) -"Aa" = ( -/obj/structure/closet/syndicate/personal, -/obj/effect/turf_decal/bot_white, -/turf/open/floor/plasteel/dark, -/area/shuttle/syndicate/armory) "Ab" = ( /obj/machinery/photocopier, /turf/open/floor/plasteel/grimy, @@ -9888,42 +9302,6 @@ /obj/effect/decal/remains/xeno, /turf/open/floor/grass, /area/wizard_station) -"AC" = ( -/obj/structure/table/reinforced, -/obj/item/reagent_containers/glass/beaker/large, -/obj/item/reagent_containers/glass/beaker, -/obj/item/reagent_containers/dropper, -/turf/open/floor/plasteel/vault/side, -/area/shuttle/syndicate/medical) -"AD" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 10 - }, -/turf/open/floor/mineral/plastitanium, -/area/shuttle/syndicate/medical) -"AE" = ( -/obj/effect/turf_decal/stripes/line, -/turf/open/floor/mineral/plastitanium, -/area/shuttle/syndicate/medical) -"AF" = ( -/obj/effect/turf_decal/stripes/line, -/turf/open/floor/mineral/plastitanium, -/area/shuttle/syndicate/hallway) -"AG" = ( -/obj/effect/turf_decal/stripes/line, -/turf/open/floor/mineral/plastitanium, -/area/shuttle/syndicate/armory) -"AH" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 6 - }, -/turf/open/floor/mineral/plastitanium, -/area/shuttle/syndicate/armory) -"AI" = ( -/obj/structure/closet/syndicate/nuclear, -/obj/effect/turf_decal/bot_white, -/turf/open/floor/plasteel/dark, -/area/shuttle/syndicate/armory) "AJ" = ( /obj/structure/chair/comfy/brown{ color = "#596479"; @@ -10003,7 +9381,7 @@ }, /area/centcom/ferry) "AT" = ( -/obj/structure/sign/bluecross_2, +/obj/structure/sign/departments/medbay/alt, /turf/closed/indestructible/riveted, /area/centcom/control) "AU" = ( @@ -10096,111 +9474,6 @@ /obj/item/reagent_containers/food/snacks/meat/slab/xeno, /turf/open/floor/grass, /area/wizard_station) -"Bj" = ( -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/item/bodypart/r_arm/robot, -/obj/item/bodypart/l_arm/robot, -/obj/structure/table/reinforced, -/obj/item/toy/plush/nukeplushie, -/turf/open/floor/plasteel/vault/side, -/area/shuttle/syndicate/medical) -"Bk" = ( -/obj/machinery/door/window{ - dir = 1; - name = "Surgery"; - req_access_txt = "150" - }, -/turf/open/floor/plasteel/vault/side, -/area/shuttle/syndicate/medical) -"Bl" = ( -/obj/structure/window/reinforced{ - dir = 1 - }, -/turf/open/floor/plasteel/vault/side, -/area/shuttle/syndicate/medical) -"Bm" = ( -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/item/storage/firstaid/regular{ - pixel_x = 3; - pixel_y = 3 - }, -/obj/item/storage/firstaid/brute, -/obj/item/storage/firstaid/regular{ - pixel_x = -3; - pixel_y = -3 - }, -/obj/structure/table/reinforced, -/turf/open/floor/plasteel/vault/side, -/area/shuttle/syndicate/medical) -"Bn" = ( -/obj/item/storage/firstaid/regular{ - pixel_x = 3; - pixel_y = 3 - }, -/obj/item/storage/firstaid/fire, -/obj/item/storage/firstaid/regular{ - pixel_x = -3; - pixel_y = -3 - }, -/obj/structure/table/reinforced, -/turf/open/floor/plasteel/vault/side, -/area/shuttle/syndicate/medical) -"Bo" = ( -/turf/open/floor/plasteel/vault, -/area/shuttle/syndicate/hallway) -"Bp" = ( -/obj/item/device/sbeacondrop/bomb{ - pixel_y = 5 - }, -/obj/item/device/sbeacondrop/bomb, -/obj/structure/table/reinforced, -/turf/open/floor/plasteel/vault/side, -/area/shuttle/syndicate/armory) -"Bq" = ( -/obj/item/grenade/syndieminibomb{ - pixel_x = 4; - pixel_y = 2 - }, -/obj/item/grenade/syndieminibomb{ - pixel_x = -1 - }, -/obj/structure/table/reinforced, -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/item/grenade/plastic/c4, -/obj/item/grenade/plastic/c4, -/obj/item/grenade/plastic/c4, -/obj/item/grenade/plastic/c4, -/obj/item/grenade/plastic/c4, -/turf/open/floor/plasteel/vault/side, -/area/shuttle/syndicate/armory) -"Br" = ( -/obj/structure/window/reinforced{ - dir = 1 - }, -/turf/open/floor/plasteel/vault/side, -/area/shuttle/syndicate/armory) -"Bs" = ( -/obj/machinery/door/window{ - dir = 1; - name = "Technological Storage"; - req_access_txt = "150" - }, -/turf/open/floor/plasteel/vault/side, -/area/shuttle/syndicate/armory) -"Bt" = ( -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/table/reinforced, -/obj/item/device/aicard, -/turf/open/floor/plasteel/vault/side, -/area/shuttle/syndicate/armory) "Bu" = ( /obj/structure/table/wood, /obj/item/paper_bin, @@ -10445,50 +9718,6 @@ }, /turf/open/floor/engine/cult, /area/wizard_station) -"BT" = ( -/obj/item/surgicaldrill, -/obj/item/circular_saw, -/obj/structure/table/reinforced, -/obj/machinery/light{ - dir = 8 - }, -/turf/open/floor/plasteel/vault{ - dir = 5 - }, -/area/shuttle/syndicate/medical) -"BU" = ( -/obj/structure/sink{ - dir = 4; - pixel_x = 11 - }, -/obj/structure/mirror{ - pixel_x = 30 - }, -/turf/open/floor/plasteel/vault{ - dir = 5 - }, -/area/shuttle/syndicate/medical) -"BV" = ( -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/shuttle/syndicate/hallway) -"BW" = ( -/obj/machinery/nuclearbomb/syndicate, -/obj/machinery/door/window{ - dir = 1; - name = "Theatre Stage"; - req_access_txt = "0" - }, -/turf/open/floor/circuit/red, -/area/shuttle/syndicate/hallway) -"BX" = ( -/obj/machinery/light{ - dir = 4 - }, -/turf/open/floor/plasteel/vault{ - dir = 5 - }, -/area/shuttle/syndicate/armory) "BY" = ( /obj/item/toy/figure/syndie, /turf/open/floor/plating/asteroid/snow/airless, @@ -10576,46 +9805,6 @@ }, /turf/open/floor/engine/cult, /area/wizard_station) -"Cj" = ( -/obj/item/cautery, -/obj/item/scalpel, -/obj/structure/table/reinforced, -/turf/open/floor/plasteel/vault{ - dir = 5 - }, -/area/shuttle/syndicate/medical) -"Ck" = ( -/obj/structure/table/optable, -/obj/item/surgical_drapes, -/obj/effect/turf_decal/bot_white, -/turf/open/floor/plasteel/dark, -/area/shuttle/syndicate/medical) -"Cl" = ( -/obj/item/retractor, -/obj/item/hemostat, -/obj/structure/table/reinforced, -/turf/open/floor/plasteel/vault{ - dir = 5 - }, -/area/shuttle/syndicate/medical) -"Cm" = ( -/obj/structure/shuttle/engine/heater, -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/effect/turf_decal/stripes/line, -/turf/open/floor/plating/airless, -/area/shuttle/syndicate/hallway) -"Cn" = ( -/obj/machinery/recharge_station, -/turf/open/floor/circuit/red, -/area/shuttle/syndicate/armory) -"Co" = ( -/obj/machinery/telecomms/allinone{ - intercept = 1 - }, -/turf/open/floor/circuit/red, -/area/shuttle/syndicate/armory) "Cp" = ( /obj/structure/statue/uranium/nuke, /turf/open/floor/plating/asteroid/snow/airless, @@ -10755,7 +9944,7 @@ /obj/structure/table/reinforced, /obj/item/storage/box/emps, /obj/item/gun/energy/ionrifle, -/obj/structure/sign/bluecross_2{ +/obj/structure/sign/departments/medbay/alt{ pixel_y = -32 }, /obj/effect/turf_decal/stripes/line{ @@ -10888,37 +10077,6 @@ dir = 8 }, /area/centcom/evac) -"CS" = ( -/obj/structure/shuttle/engine/heater, -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/effect/turf_decal/stripes/line, -/turf/open/floor/plating/airless, -/area/shuttle/syndicate/medical) -"CT" = ( -/obj/structure/shuttle/engine/propulsion/left, -/obj/effect/turf_decal/stripes/line, -/turf/open/floor/plating/airless, -/area/shuttle/syndicate/hallway) -"CU" = ( -/obj/structure/shuttle/engine/propulsion, -/obj/effect/turf_decal/stripes/line, -/turf/open/floor/plating/airless, -/area/shuttle/syndicate/hallway) -"CV" = ( -/obj/structure/shuttle/engine/propulsion/right, -/obj/effect/turf_decal/stripes/line, -/turf/open/floor/plating/airless, -/area/shuttle/syndicate/hallway) -"CW" = ( -/obj/structure/shuttle/engine/heater, -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/effect/turf_decal/stripes/line, -/turf/open/floor/plating/airless, -/area/shuttle/syndicate/armory) "CX" = ( /obj/structure/closet/secure_closet/security, /obj/item/storage/belt/security/full, @@ -11030,48 +10188,6 @@ dir = 8 }, /area/centcom/evac) -"Di" = ( -/obj/structure/shuttle/engine/propulsion/left, -/obj/effect/turf_decal/stripes/line, -/turf/open/floor/plating/airless, -/area/shuttle/syndicate/medical) -"Dj" = ( -/obj/structure/shuttle/engine/propulsion, -/obj/effect/turf_decal/stripes/line, -/turf/open/floor/plating/airless, -/area/shuttle/syndicate/medical) -"Dk" = ( -/obj/structure/shuttle/engine/propulsion/right, -/obj/effect/turf_decal/stripes/line, -/turf/open/floor/plating/airless, -/area/shuttle/syndicate/medical) -"Dl" = ( -/obj/machinery/porta_turret/syndicate{ - dir = 6 - }, -/turf/closed/wall/mineral/plastitanium, -/area/shuttle/syndicate/medical) -"Dm" = ( -/obj/machinery/porta_turret/syndicate{ - dir = 10 - }, -/turf/closed/wall/mineral/plastitanium, -/area/shuttle/syndicate/armory) -"Dn" = ( -/obj/structure/shuttle/engine/propulsion/left, -/obj/effect/turf_decal/stripes/line, -/turf/open/floor/plating/airless, -/area/shuttle/syndicate/armory) -"Do" = ( -/obj/structure/shuttle/engine/propulsion, -/obj/effect/turf_decal/stripes/line, -/turf/open/floor/plating/airless, -/area/shuttle/syndicate/armory) -"Dp" = ( -/obj/structure/shuttle/engine/propulsion/right, -/obj/effect/turf_decal/stripes/line, -/turf/open/floor/plating/airless, -/area/shuttle/syndicate/armory) "Dq" = ( /obj/machinery/door/airlock/external, /obj/effect/turf_decal/stripes/line{ @@ -12178,7 +11294,7 @@ /turf/open/floor/plasteel, /area/tdome/tdomeobserve) "Gw" = ( -/obj/structure/sign/nosmoking_2, +/obj/structure/sign/warning/nosmoking, /turf/closed/indestructible/riveted, /area/tdome/tdomeobserve) "Gx" = ( @@ -12353,7 +11469,7 @@ /area/tdome/tdomeobserve) "GL" = ( /obj/structure/table/wood, -/obj/structure/sign/goldenplaque{ +/obj/structure/sign/plaques/golden{ pixel_y = 32 }, /obj/item/clothing/accessory/lawyers_badge{ @@ -12374,7 +11490,7 @@ /area/tdome/tdomeobserve) "GO" = ( /obj/structure/table/wood, -/obj/structure/sign/goldenplaque{ +/obj/structure/sign/plaques/golden{ pixel_y = 32 }, /obj/item/clothing/accessory/medal/silver{ @@ -12579,7 +11695,7 @@ /area/tdome/tdomeobserve) "Hr" = ( /obj/structure/table/wood, -/obj/structure/sign/atmosplaque/thunderdome{ +/obj/structure/sign/plaques/thunderdome{ pixel_y = -32 }, /obj/item/clothing/accessory/medal/gold{ @@ -12597,7 +11713,7 @@ /area/tdome/tdomeobserve) "Ht" = ( /obj/structure/table/wood, -/obj/structure/sign/atmosplaque/thunderdome{ +/obj/structure/sign/plaques/thunderdome{ pixel_y = -32 }, /obj/item/clothing/accessory/medal{ @@ -13898,12 +13014,6 @@ "KS" = ( /turf/closed/wall/mineral/titanium/interior, /area/centcom/evac) -"KT" = ( -/obj/machinery/computer/camera_advanced{ - dir = 4 - }, -/turf/open/floor/wood, -/area/wizard_station) "KU" = ( /obj/structure/closet/emcloset, /turf/open/floor/mineral/titanium/blue, @@ -14313,29 +13423,6 @@ }, /turf/open/floor/plasteel, /area/tdome/arena) -"Mt" = ( -/obj/structure/chair{ - dir = 4; - name = "tactical chair" - }, -/obj/effect/turf_decal/bot_white, -/turf/open/floor/plasteel/dark, -/area/shuttle/syndicate/airlock) -"Mu" = ( -/obj/structure/table/reinforced, -/obj/item/storage/toolbox/syndicate, -/obj/item/crowbar/red, -/obj/effect/turf_decal/stripes/line{ - dir = 9 - }, -/turf/open/floor/mineral/plastitanium, -/area/shuttle/syndicate/airlock) -"Mw" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/turf/open/floor/mineral/plastitanium, -/area/shuttle/syndicate/airlock) "My" = ( /obj/docking_port/stationary{ area_type = /area/syndicate_mothership; @@ -14346,63 +13433,30 @@ height = 17; id = "syndicate_away"; name = "syndicate recon outpost"; + roundstart_template = /datum/map_template/shuttle/infiltrator/basic; turf_type = /turf/open/floor/plating/asteroid/snow; width = 23 }, -/obj/machinery/door/poddoor{ - id = "smindicate"; - name = "outer blast door" - }, -/obj/machinery/button/door{ - id = "smindicate"; - name = "external door control"; - pixel_y = 26; - req_access_txt = "150" - }, -/obj/docking_port/mobile{ - dheight = 1; - dir = 8; - dwidth = 12; - height = 17; - hidden = 1; - id = "syndicate"; - movement_force = list("KNOCKDOWN" = 0, "THROW" = 0); - name = "syndicate infiltrator"; - port_direction = 4; - roundstart_move = null; - width = 23 - }, -/obj/structure/fans/tiny, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/turf/open/floor/mineral/plastitanium, -/area/shuttle/syndicate/airlock) -"Mz" = ( -/turf/open/floor/plasteel/dark, -/area/shuttle/syndicate/airlock) -"MC" = ( -/obj/structure/rack, -/obj/item/clothing/suit/space/syndicate/black/red, -/obj/item/clothing/head/helmet/space/syndicate/black/red, -/obj/effect/turf_decal/bot_white, -/obj/effect/turf_decal/stripes/line{ - dir = 10 - }, -/turf/open/floor/mineral/plastitanium, -/area/shuttle/syndicate/airlock) +/turf/open/floor/plating/asteroid/snow/airless, +/area/syndicate_mothership) "MD" = ( /obj/effect/light_emitter{ set_cap = 1; set_luminosity = 4 }, -/obj/structure/sign/securearea{ +/obj/structure/sign/warning/securearea{ desc = "A warning sign which reads 'FOURTH WALL'."; name = "\improper FOURTH WALL"; pixel_x = -32 }, /turf/open/floor/plating/asteroid/snow/airless, /area/syndicate_mothership) +"ME" = ( +/obj/machinery/computer/camera_advanced{ + dir = 4 + }, +/turf/open/floor/wood, +/area/wizard_station) (1,1,1) = {" aa @@ -19461,7 +18515,7 @@ lI lI qE qE -KT +ME vj ya qZ @@ -26656,16 +25710,16 @@ kt kt kt kt -yc -yd -yd -yd -yd -yd -yd -yd -yd -yd +hl +hl +hl +hl +hl +hl +hl +hl +hl +hl kt hl hh @@ -26907,22 +25961,22 @@ hl hl hl kt -tY -tZ -tZ -tZ -tZ -tZ -yd -yL -zs -yL -AC -Bj -BT -Cj -CS -Di +hl +hl +hl +hl +hl +hl +hl +hl +hl +hl +hl +hl +hl +hl +hl +hl kt hl hh @@ -27164,22 +26218,22 @@ hl hl hl kt -tZ -uG -vo -vo -vo -xA -yd -yM -zt -zR -zR -Bk -zR -Ck -CS -Dj +hl +hl +hl +hl +hl +hl +hl +hl +hl +hl +hl +hl +hl +hl +hl +hl kt hl hh @@ -27421,22 +26475,22 @@ kt kt kt kt -tZ -uH -uH -uH -uH -uH -ye -yN -zt -zS -AD -Bl -BU -Cl -CS -Dk +hl +hl +hl +hl +hl +hl +hl +hl +hl +hl +hl +hl +hl +hl +hl +hl kt hl hh @@ -27671,29 +26725,29 @@ hl hl my hl -oS -oT -oT -oT -oT hl hl -tZ -uH -uH -uH -uH -uH -yd -yO -zt -zT -AE -Bm -yf -yd -yd -Dl +hl +hl +hl +hl +hl +hl +hl +hl +hl +hl +hl +hl +hl +hl +hl +hl +hl +hl +hl +hl +hl kt hl hh @@ -27928,26 +26982,26 @@ hl hl hl hl -oT -px -pR -qI -oT -rY hl -tZ -uI -vp -wf -wR -xB -yd -yP -zt -zT -AE -Bn -yd +hl +hl +hl +hl +hl +hl +hl +hl +hl +hl +hl +hl +hl +hl +hl +hl +hl +hl +hl hl hl kt @@ -28185,28 +27239,28 @@ hl hl hl hl -oU -py -pS -qI -oT -rZ -rZ -tZ -tZ -tZ -tZ -wS -xC -yf -yQ -yQ -zU -yQ -yd -yd -rZ -rZ +hl +hl +hl +hl +hl +hl +hl +hl +hl +hl +hl +hl +hl +hl +hl +hl +hl +hl +hl +hl +hl +hl kt hl hl @@ -28442,28 +27496,28 @@ hl hl hl nx -oU -pz -pT -qI -rb -sa -sY -ua -sY -sY -wg -sb -sb -sb -sb -zu -zV -AF -Bo -BV -Cm -CT +hl +hl +hl +hl +hl +hl +hl +hl +hl +hl +hl +hl +hl +hl +hl +hl +hl +hl +hl +hl +hl +hl kt hl hl @@ -28699,28 +27753,28 @@ hl hl hl hl -oU -pA -pU -qI -rc -sb -sZ -sZ -sZ -sb -wh -sb -sZ -sZ -sZ -sZ -zV -AF -Bo -BW -Cm -CU +hl +hl +hl +hl +hl +hl +hl +hl +hl +hl +hl +hl +hl +hl +hl +hl +hl +hl +hl +hl +hl +hl kt hl hl @@ -28956,28 +28010,28 @@ hl my hl hl -oU -pB -pT -qI -oT -sc -ta -ub -ta -ta -wg -sb -sb -sb -sb -zv -zV -AF -Bo -BV -Cm -CV +hl +hl +hl +hl +hl +hl +hl +hl +hl +hl +hl +hl +hl +hl +hl +hl +hl +hl +hl +hl +hl +hl kt hl hl @@ -29213,28 +28267,28 @@ hl hl hl hl -oU -pC -pV -qI -oT -rZ -rZ -vq -vq -vq -vq -wT -xD -yg -yR -yR -zW -yR -yh -yh -rZ -rZ +hl +hl +hl +hl +hl +hl +hl +hl +hl +hl +hl +hl +hl +hl +hl +hl +hl +hl +hl +hl +hl +hl kt hl hl @@ -29470,26 +28524,26 @@ hl hl hl hl -oT -pD -pW -qI -oT -sd hl -vq -Mt -Mt -uc -Mz -Mt -yh -yS -zw -zX -AG -Bp -yh +hl +hl +hl +hl +hl +hl +hl +hl +hl +hl +hl +hl +hl +hl +hl +hl +hl +hl +hl hl hl kt @@ -29727,29 +28781,29 @@ hl hl hl hl -oV -oT -oT -oT -oT hl hl -vq -wU -wU -wU -wU -wU -yh -yT -zw -zX -AG -Bq -yg -yh -yh -Dm +hl +hl +hl +hl +hl +hl +hl +hl +hl +hl +hl +hl +hl +hl +hl +hl +hl +hl +hl +hl +hl kt hl hh @@ -29991,22 +29045,22 @@ kt kt kt kt -vq -wU -wU -wU -wU -wU -yi -yU -zw -zY -AH -Br -zZ -Cn -CW -Dn +hl +hl +hl +hl +hl +hl +hl +hl +hl +hl +hl +hl +hl +hl +hl +hl kt hl hh @@ -30248,22 +29302,22 @@ nx hl hl kt -vq -Mu -Mw -Mw -Mw -MC -yh -yV -zw -zZ -zZ -Bs -zZ -Co -CW -Do +hl +hl +hl +hl +hl +hl +hl +hl +hl +hl +hl +hl +hl +hl +hl +hl kt hl hh @@ -30505,22 +29559,22 @@ hl hl hl kt -vt -vq -vq +hl +hl +hl My -vs -vq -yh -yW -zw -Aa -AI -Bt -BX -Cn -CW -Dp +hl +hl +hl +hl +hl +hl +hl +hl +hl +hl +hl +hl kt hl hh @@ -30768,16 +29822,16 @@ nz uJ nz kt -yj -yh -yh -yh -yh -yh -yh -yh -yh -yh +hl +hl +hl +hl +hl +hl +hl +hl +hl +hl kt hl hh @@ -51067,7 +50121,7 @@ qb mD rs sw -tw +pR sw uQ mD diff --git a/_maps/map_files/generic/SpaceDock.dmm b/_maps/map_files/generic/SpaceDock.dmm index b0a9ccbf71..286ca3e97d 100644 --- a/_maps/map_files/generic/SpaceDock.dmm +++ b/_maps/map_files/generic/SpaceDock.dmm @@ -10,7 +10,8 @@ height = 22; id = "whiteship_away"; name = "Deep Space"; - width = 35 + width = 35; + json_key = "whiteship" }, /turf/open/space, /area/space) diff --git a/_maps/metastation.json b/_maps/metastation.json index bb22737c31..fdadfb058c 100644 --- a/_maps/metastation.json +++ b/_maps/metastation.json @@ -1,5 +1,11 @@ { "map_name": "MetaStation", - "map_path": "cit_map_files/MetaStation", - "map_file": "MetaStation.dmm" + "map_path": "map_files/MetaStation", + "map_file": "MetaStation.dmm", + "shuttles": { + "cargo": "cargo_box", + "ferry": "ferry_fancy", + "whiteship": "whiteship_meta", + "emergency": "emergency_meta" + } } diff --git a/_maps/omegastation.json b/_maps/omegastation.json index 69c667b724..805ec5eccc 100644 --- a/_maps/omegastation.json +++ b/_maps/omegastation.json @@ -1,5 +1,10 @@ { "map_name": "OmegaStation", - "map_path": "cit_map_files/OmegaStation", - "map_file": "OmegaStation.dmm" -} \ No newline at end of file + "map_path": "map_files/OmegaStation", + "map_file": "OmegaStation.dmm", + "shuttles": { + "emergency": "emergency_omega", + "ferry": "ferry_fancy", + "cargo": "cargo_delta" + } +} diff --git a/_maps/pubbystation.json b/_maps/pubbystation.json index f8253e3c33..f99cca57c5 100644 --- a/_maps/pubbystation.json +++ b/_maps/pubbystation.json @@ -1,5 +1,11 @@ { "map_name": "PubbyStation", - "map_path": "cit_map_files/PubbyStation", - "map_file": "PubbyStation.dmm" -} \ No newline at end of file + "map_path": "map_files/PubbyStation", + "map_file": "PubbyStation.dmm", + "shuttles": { + "emergency": "emergency_pubby", + "whiteship": "whiteship_pubby", + "ferry": "ferry_fancy", + "cargo": "cargo_box" + } +} diff --git a/_maps/shuttles/cargo_birdboat.dmm b/_maps/shuttles/cargo_birdboat.dmm index 85c2579597..4abd694656 100644 --- a/_maps/shuttles/cargo_birdboat.dmm +++ b/_maps/shuttles/cargo_birdboat.dmm @@ -1,16 +1,7 @@ //MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"a" = ( -/turf/closed/wall/mineral/titanium/overspace, -/area/shuttle/supply) "b" = ( /turf/closed/wall/mineral/titanium, /area/shuttle/supply) -"c" = ( -/turf/closed/wall/mineral/titanium, -/area/shuttle/supply) -"d" = ( -/turf/closed/wall/mineral/titanium, -/area/shuttle/supply) "e" = ( /obj/machinery/conveyor{ dir = 2; @@ -138,12 +129,6 @@ }, /turf/open/floor/plating, /area/shuttle/supply) -"s" = ( -/turf/closed/wall/mineral/titanium/nodiagonal, -/area/shuttle/supply) -"t" = ( -/turf/closed/wall/mineral/titanium, -/area/shuttle/supply) "u" = ( /obj/structure/window/reinforced{ dir = 1 @@ -151,9 +136,6 @@ /obj/structure/shuttle/engine/heater, /turf/open/floor/plating/airless, /area/shuttle/supply) -"v" = ( -/turf/closed/wall/mineral/titanium, -/area/shuttle/supply) "w" = ( /turf/template_noop, /area/template_noop) diff --git a/_maps/shuttles/cargo_box.dmm b/_maps/shuttles/cargo_box.dmm index a63162bae7..8f5a8ef1b4 100644 --- a/_maps/shuttles/cargo_box.dmm +++ b/_maps/shuttles/cargo_box.dmm @@ -1,16 +1,7 @@ //MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"a" = ( -/turf/closed/wall/mineral/titanium/overspace, -/area/shuttle/supply) "b" = ( /turf/closed/wall/mineral/titanium, /area/shuttle/supply) -"c" = ( -/turf/closed/wall/mineral/titanium, -/area/shuttle/supply) -"d" = ( -/turf/closed/wall/mineral/titanium, -/area/shuttle/supply) "e" = ( /turf/open/floor/mineral/titanium/blue, /area/shuttle/supply) @@ -74,26 +65,9 @@ }, /turf/open/floor/plating, /area/shuttle/supply) -"k" = ( -/turf/closed/wall/mineral/titanium, -/area/shuttle/supply) "l" = ( /turf/closed/wall/mineral/titanium/interior, /area/shuttle/supply) -"m" = ( -/turf/closed/wall/mineral/titanium/interior{ - icon_state = "swall_f6" - }, -/area/shuttle/supply) -"n" = ( -/turf/closed/wall/mineral/titanium, -/area/shuttle/supply) -"o" = ( -/turf/closed/wall/mineral/titanium, -/area/shuttle/supply) -"p" = ( -/turf/closed/wall/mineral/titanium, -/area/shuttle/supply) "q" = ( /obj/structure/window/reinforced{ dir = 1 @@ -101,9 +75,6 @@ /obj/structure/shuttle/engine/heater, /turf/open/floor/plating/airless, /area/shuttle/supply) -"r" = ( -/turf/closed/wall/mineral/titanium, -/area/shuttle/supply) "s" = ( /turf/template_noop, /area/template_noop) diff --git a/_maps/shuttles/emergency_airless.dmm b/_maps/shuttles/emergency_airless.dmm index d5dc2d6d00..1606703ac2 100644 --- a/_maps/shuttles/emergency_airless.dmm +++ b/_maps/shuttles/emergency_airless.dmm @@ -46,9 +46,6 @@ /obj/effect/shuttle_build, /turf/open/floor/plating/airless, /area/shuttle/escape) -"i" = ( -/turf/open/space/basic, -/area/space) (1,1,1) = {" a @@ -76,9 +73,9 @@ f e e a -i -i -i +a +a +a a "} (2,1,1) = {" @@ -107,9 +104,9 @@ f f e a -i -i -i +a +a +a a "} (3,1,1) = {" @@ -138,9 +135,9 @@ f f f a -i -i -i +a +a +a a "} (4,1,1) = {" @@ -169,9 +166,9 @@ f f e a -i -i -i +a +a +a a "} (5,1,1) = {" diff --git a/_maps/shuttles/emergency_asteroid.dmm b/_maps/shuttles/emergency_asteroid.dmm index 3eba8d7a61..01772ed706 100644 --- a/_maps/shuttles/emergency_asteroid.dmm +++ b/_maps/shuttles/emergency_asteroid.dmm @@ -2,9 +2,6 @@ "aa" = ( /turf/template_noop, /area/template_noop) -"ab" = ( -/turf/closed/wall/mineral/titanium/overspace, -/area/shuttle/escape) "ac" = ( /turf/closed/wall/mineral/titanium, /area/shuttle/escape) @@ -19,12 +16,6 @@ }, /turf/open/floor/mineral/titanium/yellow, /area/shuttle/escape) -"af" = ( -/turf/closed/wall/mineral/titanium, -/area/shuttle/escape) -"ag" = ( -/turf/template_noop, -/area/template_noop) "ah" = ( /obj/effect/spawner/structure/window/shuttle, /turf/open/floor/plating, @@ -49,9 +40,6 @@ }, /turf/open/floor/mineral/titanium, /area/shuttle/escape) -"ak" = ( -/turf/closed/wall/mineral/titanium, -/area/shuttle/escape) "al" = ( /obj/machinery/door/airlock/titanium{ name = "Emergency Shuttle Airlock"; @@ -71,9 +59,6 @@ }, /turf/open/floor/plating/airless, /area/shuttle/escape) -"ao" = ( -/turf/closed/wall/mineral/titanium, -/area/shuttle/escape) "ap" = ( /obj/structure/ore_box, /turf/open/floor/mineral/titanium/yellow, @@ -85,15 +70,9 @@ /obj/machinery/recharge_station, /turf/open/floor/mineral/titanium/yellow, /area/shuttle/escape) -"as" = ( -/turf/closed/wall/mineral/titanium, -/area/shuttle/escape) "at" = ( /turf/open/floor/mineral/titanium, /area/shuttle/escape) -"au" = ( -/turf/closed/wall/mineral/titanium, -/area/shuttle/escape) "av" = ( /obj/structure/chair{ dir = 4 @@ -109,26 +88,12 @@ }, /turf/open/floor/mineral/plastitanium/brig, /area/shuttle/escape) -"ay" = ( -/turf/closed/wall/mineral/titanium, -/area/shuttle/escape) "az" = ( /turf/closed/wall/mineral/titanium/nodiagonal, /area/shuttle/escape) -"aA" = ( -/turf/closed/wall/mineral/titanium, -/area/shuttle/escape) "aB" = ( /turf/closed/wall/mineral/titanium/interior, /area/shuttle/escape) -"aC" = ( -/turf/closed/wall/mineral/titanium, -/area/shuttle/escape) -"aD" = ( -/obj/structure/window/shuttle, -/obj/structure/grille, -/turf/open/floor/plating/airless, -/area/shuttle/escape) "aE" = ( /obj/structure/chair{ dir = 4 @@ -193,9 +158,6 @@ /obj/structure/bed/roller, /turf/open/floor/mineral/titanium/blue, /area/shuttle/escape) -"aO" = ( -/turf/closed/wall/mineral/titanium, -/area/shuttle/escape) "aP" = ( /obj/machinery/door/airlock/security/glass{ name = "Emergency Shuttle Brig"; @@ -303,10 +265,6 @@ }, /turf/open/floor/mineral/titanium/blue, /area/shuttle/escape) -"bh" = ( -/obj/effect/spawner/structure/window/shuttle, -/turf/open/floor/plasteel/shuttle, -/area/shuttle/escape) "bi" = ( /obj/machinery/status_display, /turf/closed/wall/mineral/titanium, @@ -344,10 +302,6 @@ }, /turf/open/floor/mineral/titanium/blue, /area/shuttle/escape) -"bo" = ( -/obj/machinery/status_display, -/turf/closed/wall/mineral/titanium, -/area/shuttle/escape) "bp" = ( /obj/machinery/computer/crew{ dir = 4 @@ -427,12 +381,6 @@ }, /turf/open/floor/mineral/titanium, /area/shuttle/escape) -"bA" = ( -/turf/closed/wall/mineral/titanium, -/area/shuttle/escape) -"bB" = ( -/turf/closed/wall/mineral/titanium, -/area/shuttle/escape) "bC" = ( /obj/item/device/radio/intercom{ dir = 8; @@ -490,13 +438,6 @@ }, /turf/open/floor/mineral/titanium/blue, /area/shuttle/escape) -"bL" = ( -/obj/structure/chair, -/obj/machinery/light{ - dir = 1 - }, -/turf/open/floor/mineral/titanium/blue, -/area/shuttle/escape) "bM" = ( /obj/machinery/light, /turf/open/floor/mineral/plastitanium/brig, @@ -507,20 +448,10 @@ }, /turf/open/floor/mineral/titanium, /area/shuttle/escape) -"bO" = ( -/obj/machinery/light{ - dir = 1 - }, -/turf/open/floor/mineral/titanium, -/area/shuttle/escape) "bP" = ( /obj/machinery/light, /turf/open/floor/mineral/titanium/blue, /area/shuttle/escape) -"bQ" = ( -/obj/machinery/light, -/turf/open/floor/mineral/titanium/blue, -/area/shuttle/escape) (1,1,1) = {" aa @@ -643,7 +574,7 @@ ac ac "} (9,1,1) = {" -ag +aa ac ac aH @@ -658,8 +589,8 @@ ac aa "} (10,1,1) = {" -ag -ag +aa +aa ac aI at @@ -718,8 +649,8 @@ aa aa "} (14,1,1) = {" -ag -ag +aa +aa ad aK at @@ -733,8 +664,8 @@ aa aa "} (15,1,1) = {" -ag -ag +aa +aa ad aK at @@ -748,8 +679,8 @@ aa aa "} (16,1,1) = {" -ag -ag +aa +aa ad aK at @@ -808,8 +739,8 @@ aa aa "} (20,1,1) = {" -ag -ag +aa +aa ac aM at @@ -823,7 +754,7 @@ aa aa "} (21,1,1) = {" -ag +aa ac ac aN @@ -928,9 +859,9 @@ aa aa "} (28,1,1) = {" -ag -ag -ag +aa +aa +aa ac ac ad diff --git a/_maps/shuttles/emergency_bar.dmm b/_maps/shuttles/emergency_bar.dmm index b5104569ac..262ed4029b 100644 --- a/_maps/shuttles/emergency_bar.dmm +++ b/_maps/shuttles/emergency_bar.dmm @@ -9,9 +9,6 @@ /obj/effect/spawner/structure/window/shuttle, /turf/open/floor/plating, /area/shuttle/escape) -"ad" = ( -/turf/closed/wall/mineral/titanium, -/area/shuttle/escape) "ae" = ( /turf/closed/wall/mineral/titanium/nodiagonal, /area/shuttle/escape) @@ -39,9 +36,6 @@ }, /turf/open/floor/carpet, /area/shuttle/escape) -"aj" = ( -/turf/closed/wall/mineral/titanium, -/area/shuttle/escape) "ak" = ( /obj/structure/extinguisher_cabinet{ pixel_y = 30 @@ -118,18 +112,6 @@ }, /turf/open/floor/carpet, /area/shuttle/escape) -"av" = ( -/turf/closed/wall/mineral/titanium, -/area/shuttle/escape) -"aw" = ( -/turf/closed/wall/mineral/titanium, -/area/shuttle/escape) -"ax" = ( -/turf/closed/wall/mineral/titanium, -/area/shuttle/escape) -"ay" = ( -/turf/closed/wall/mineral/titanium, -/area/shuttle/escape) "az" = ( /obj/machinery/door/airlock/public/glass{ name = "Emergency Shuttle Cockpit"; @@ -141,9 +123,6 @@ /obj/machinery/status_display, /turf/closed/wall/mineral/titanium, /area/shuttle/escape) -"aB" = ( -/turf/closed/wall/mineral/titanium, -/area/shuttle/escape) "aC" = ( /obj/structure/chair, /turf/open/floor/mineral/plastitanium/brig, @@ -243,9 +222,6 @@ /obj/structure/table/wood/bar, /turf/open/floor/plasteel/bar, /area/shuttle/escape) -"aQ" = ( -/turf/closed/wall/mineral/titanium, -/area/shuttle/escape) "aR" = ( /obj/structure/table/wood/bar{ boot_dir = 8 @@ -331,40 +307,19 @@ }, /turf/open/floor/plasteel/bar, /area/shuttle/escape) -"bf" = ( -/turf/closed/wall/mineral/titanium, -/area/shuttle/escape) "bg" = ( /obj/machinery/door/airlock/titanium{ name = "Emergency Shuttle Airlock" }, /turf/open/floor/plasteel/bar, /area/shuttle/escape) -"bh" = ( -/obj/machinery/shower{ - dir = 4 - }, -/turf/open/floor/mineral/titanium, -/area/shuttle/escape) "bi" = ( /turf/open/floor/mineral/titanium, /area/shuttle/escape) -"bj" = ( -/obj/structure/table/reinforced, -/obj/item/storage/firstaid/regular, -/obj/item/storage/firstaid/toxin{ - pixel_x = 4; - pixel_y = 4 - }, -/turf/open/floor/mineral/titanium, -/area/shuttle/escape) "bk" = ( /obj/machinery/vending/cigarette, /turf/open/floor/plasteel/bar, /area/shuttle/escape) -"bl" = ( -/turf/closed/wall/mineral/titanium, -/area/shuttle/escape) "bm" = ( /obj/machinery/door/airlock{ name = "Unisex Restrooms"; @@ -374,7 +329,7 @@ /area/shuttle/escape) "bn" = ( /obj/effect/spawner/structure/window/shuttle, -/obj/structure/sign/bluecross_2, +/obj/structure/sign/departments/medbay/alt, /turf/closed/wall/mineral/titanium, /area/shuttle/escape) "bo" = ( @@ -404,9 +359,6 @@ }, /turf/open/floor/plasteel/freezer, /area/shuttle/escape) -"bt" = ( -/turf/closed/wall/mineral/titanium, -/area/shuttle/escape) "bu" = ( /obj/machinery/door/airlock{ name = "Unit 2" @@ -452,14 +404,6 @@ /obj/item/scalpel, /turf/open/floor/mineral/titanium, /area/shuttle/escape) -"bA" = ( -/turf/closed/wall/mineral/plastitanium{ - icon_state = "diagonalWall3" - }, -/area/shuttle/escape) -"bB" = ( -/turf/closed/wall/mineral/plastitanium, -/area/shuttle/escape) "bC" = ( /obj/structure/window/reinforced{ dir = 1 @@ -467,12 +411,6 @@ /obj/structure/shuttle/engine/heater, /turf/open/floor/plating/airless, /area/shuttle/escape) -"bD" = ( -/turf/closed/wall/mineral/plastitanium{ - dir = 4; - icon_state = "diagonalWall3" - }, -/area/shuttle/escape) "bE" = ( /obj/structure/shuttle/engine/propulsion, /turf/open/floor/plating/airless, @@ -624,35 +562,35 @@ aa aa aa aa -bt -bt -bt +ab +ab +ab aK -bt +ab aT -bt +ab ac ac ac -bt +ab bg -bt +ab bo -bt -bt -bt +ab +ab +ab aa "} (2,1,1) = {" aa -bt -bt -bt -bt +ab +ab +ab +ab aC aH aL -bt +ab bY bH aZ @@ -660,23 +598,23 @@ bc aZ bH bZ -bt +ab bp bs bx -bt -bt +ab +ab "} (3,1,1) = {" -bt +ab ae al aq -bt +ab aC aI aM -bt +ab aE aW ba @@ -684,10 +622,10 @@ bL bO bQ bR -bt +ab bp -bt -bt +ab +ab bC bE "} @@ -696,11 +634,11 @@ ac af am ar -bt +ab aC aI aM -bt +ab aE aW bJ @@ -708,7 +646,7 @@ bM bP bQ aE -bt +ab ak bu bx @@ -720,7 +658,7 @@ ac ag an as -bt +ab ac aJ ac @@ -734,8 +672,8 @@ bH aE aA bp -bt -bt +ab +ab bC bE "} @@ -744,7 +682,7 @@ ac ah an at -bt +ab aD aE aE @@ -781,9 +719,9 @@ aN aE ca ae -bt -bt -bt +ab +ab +ab bC bE "} @@ -812,11 +750,11 @@ bC bE "} (9,1,1) = {" -bt +ab ae ap au -bt +ab aF bH aP @@ -837,10 +775,10 @@ bE "} (10,1,1) = {" aa -bt -bt -bt -bt +ab +ab +ab +ab aG bW bI @@ -856,30 +794,30 @@ bF br cb bU -bt -bt +ab +ab "} (11,1,1) = {" aa aa aa aa -bt +ab ac -bt +ab ac -bt -bt -bt +ab +ab +ab ac ac ac -bt -bt -bt +ab +ab +ab ac -bt +ab ac -bt +ab aa "} diff --git a/_maps/shuttles/emergency_box.dmm b/_maps/shuttles/emergency_box.dmm index 65cc9803cb..6443518590 100644 --- a/_maps/shuttles/emergency_box.dmm +++ b/_maps/shuttles/emergency_box.dmm @@ -2,9 +2,6 @@ "aa" = ( /turf/template_noop, /area/template_noop) -"ab" = ( -/turf/closed/wall/mineral/titanium/overspace, -/area/shuttle/escape) "ac" = ( /obj/effect/spawner/structure/window/shuttle, /turf/open/floor/plating, @@ -40,14 +37,6 @@ /obj/item/storage/firstaid/fire, /turf/open/floor/mineral/titanium, /area/shuttle/escape) -"aj" = ( -/turf/closed/wall/mineral/titanium/interior{ - icon_state = "swall_f5" - }, -/area/shuttle/escape) -"ak" = ( -/turf/closed/wall/mineral/titanium, -/area/shuttle/escape) "al" = ( /obj/machinery/computer/atmos_alert{ dir = 4 @@ -112,15 +101,6 @@ }, /turf/open/floor/mineral/titanium, /area/shuttle/escape) -"av" = ( -/turf/closed/wall/mineral/titanium, -/area/shuttle/escape) -"aw" = ( -/turf/closed/wall/mineral/titanium, -/area/shuttle/escape) -"ax" = ( -/turf/closed/wall/mineral/titanium, -/area/shuttle/escape) "ay" = ( /obj/machinery/door/airlock/public/glass{ name = "Emergency Shuttle Cockpit"; @@ -218,12 +198,6 @@ /obj/structure/table, /turf/open/floor/mineral/titanium, /area/shuttle/escape) -"aN" = ( -/turf/closed/wall/mineral/titanium, -/area/shuttle/escape) -"aO" = ( -/turf/closed/wall/mineral/titanium, -/area/shuttle/escape) "aP" = ( /obj/machinery/door/airlock/titanium{ name = "Emergency Shuttle Airlock" @@ -292,19 +266,12 @@ }, /turf/open/floor/mineral/titanium/blue, /area/shuttle/escape) -"aY" = ( -/obj/machinery/status_display, -/turf/closed/wall/mineral/titanium, -/area/shuttle/escape) "aZ" = ( /obj/machinery/door/airlock/public/glass{ name = "Emergency Shuttle Infirmary" }, /turf/open/floor/mineral/titanium/blue, /area/shuttle/escape) -"ba" = ( -/turf/closed/wall/mineral/titanium, -/area/shuttle/escape) "bb" = ( /turf/open/floor/mineral/titanium/yellow, /area/shuttle/escape) @@ -344,9 +311,6 @@ /obj/structure/closet/crate, /turf/open/floor/mineral/titanium/yellow, /area/shuttle/escape) -"bh" = ( -/turf/closed/wall/mineral/titanium, -/area/shuttle/escape) "bi" = ( /obj/structure/window/reinforced{ dir = 1 @@ -414,35 +378,35 @@ aa aa aa aa -ak -ak -ak +ad +ad +ad aI -ak +ad aP -ak +ad ac ac ac -ak +ad aV -ak +ad aV -ak -ak -ak +ad +ad +ad aa "} (2,1,1) = {" aa -ak -ak -ak -ak +ad +ad +ad +ad aA aF aG -ak +ad bn aL aL @@ -450,23 +414,23 @@ aL aL aL bo -ak +ad bb bq bf -ak -ak +ad +ad "} (3,1,1) = {" -ak +ad ae al aq -ak +ad aA aG aJ -ak +ad aQ an an @@ -474,7 +438,7 @@ an an an aW -ak +ad bb bb bf @@ -486,11 +450,11 @@ ac af am ar -ak +ad aA aG aJ -ak +ad an aS aS @@ -510,7 +474,7 @@ ac ag an as -ak +ad ac aH ac @@ -522,7 +486,7 @@ aT aT aT an -ak +ad bc br bg @@ -534,7 +498,7 @@ ac ah an at -ak +ad aB an aK @@ -547,9 +511,9 @@ an an bp az -ak -ak -ak +ad +ad +ad bi bk "} @@ -602,11 +566,11 @@ bi bk "} (9,1,1) = {" -ak +ad ae ap au -ak +ad aD an an @@ -627,10 +591,10 @@ bk "} (10,1,1) = {" aa -ak -ak -ak -ak +ad +ad +ad +ad aE bl aC @@ -646,30 +610,30 @@ ac bd be bd -ak -ak +ad +ad "} (11,1,1) = {" aa aa aa aa -ak +ad ac -ak +ad ac -ak -ak -ak +ad +ad +ad ac ac ac -ak -ak -ak +ad +ad +ad ac -ak +ad ac -ak +ad aa "} diff --git a/_maps/shuttles/emergency_cere.dmm b/_maps/shuttles/emergency_cere.dmm index f860593b6e..72620f68f7 100644 --- a/_maps/shuttles/emergency_cere.dmm +++ b/_maps/shuttles/emergency_cere.dmm @@ -695,7 +695,7 @@ /turf/open/floor/plasteel, /area/shuttle/escape) "cb" = ( -/obj/structure/sign/bluecross_2{ +/obj/structure/sign/departments/medbay/alt{ pixel_x = 32; pixel_y = -32 }, @@ -1109,7 +1109,7 @@ }, /area/shuttle/escape) "di" = ( -/obj/structure/sign/electricshock{ +/obj/structure/sign/warning/electricshock{ pixel_x = 32 }, /turf/open/floor/plasteel/yellow/side{ @@ -1131,7 +1131,7 @@ /area/shuttle/escape) "dl" = ( /obj/structure/table, -/obj/structure/sign/enginesafety{ +/obj/structure/sign/warning/enginesafety{ pixel_y = -32 }, /turf/open/floor/plasteel/yellow/side, diff --git a/_maps/shuttles/emergency_delta.dmm b/_maps/shuttles/emergency_delta.dmm index 6e22434fcd..6a166bfe15 100644 --- a/_maps/shuttles/emergency_delta.dmm +++ b/_maps/shuttles/emergency_delta.dmm @@ -392,7 +392,7 @@ /turf/open/floor/plasteel/white, /area/shuttle/escape) "aP" = ( -/obj/structure/sign/bluecross_2, +/obj/structure/sign/departments/medbay/alt, /turf/closed/wall/mineral/titanium, /area/shuttle/escape) "aQ" = ( @@ -1052,14 +1052,6 @@ dir = 1 }, /area/shuttle/escape) -"cz" = ( -/obj/machinery/light{ - dir = 1 - }, -/turf/open/floor/plasteel/neutral/side{ - dir = 1 - }, -/area/shuttle/escape) "cA" = ( /obj/item/twohanded/required/kirbyplants{ icon_state = "plant-21"; @@ -1088,24 +1080,6 @@ /obj/effect/turf_decal/bot, /turf/open/floor/plasteel, /area/shuttle/escape) -"cD" = ( -/obj/effect/turf_decal/bot, -/turf/open/floor/plasteel, -/area/shuttle/escape) -"cE" = ( -/obj/item/twohanded/required/kirbyplants{ - icon_state = "plant-21"; - pixel_x = -3; - pixel_y = 3 - }, -/obj/machinery/light{ - dir = 8 - }, -/turf/open/floor/plasteel/neutral/side{ - dir = 8; - heat_capacity = 1e+006 - }, -/area/shuttle/escape) "cF" = ( /obj/machinery/light, /turf/open/floor/plasteel, diff --git a/_maps/shuttles/emergency_discoinferno.dmm b/_maps/shuttles/emergency_discoinferno.dmm index eb3a27359b..3cd9fc7890 100644 --- a/_maps/shuttles/emergency_discoinferno.dmm +++ b/_maps/shuttles/emergency_discoinferno.dmm @@ -221,12 +221,6 @@ "O" = ( /turf/closed/wall/mineral/plastitanium/nodiagonal, /area/shuttle/escape) -"P" = ( -/turf/closed/wall/mineral/plastitanium/nodiagonal, -/area/shuttle/escape) -"Q" = ( -/turf/closed/wall/mineral/plastitanium/nodiagonal, -/area/shuttle/escape) (1,1,1) = {" a diff --git a/_maps/shuttles/emergency_goon.dmm b/_maps/shuttles/emergency_goon.dmm index 62a84d9c3d..b79aa8c62c 100644 --- a/_maps/shuttles/emergency_goon.dmm +++ b/_maps/shuttles/emergency_goon.dmm @@ -20,9 +20,6 @@ "d" = ( /turf/closed/wall/mineral/titanium, /area/shuttle/escape) -"e" = ( -/turf/closed/wall/mineral/titanium/overspace, -/area/shuttle/escape) "f" = ( /obj/machinery/status_display, /turf/closed/wall/mineral/titanium, @@ -47,15 +44,6 @@ }, /turf/open/floor/mineral/titanium/blue, /area/shuttle/escape) -"i" = ( -/turf/closed/wall/mineral/titanium, -/area/shuttle/escape) -"j" = ( -/turf/closed/wall/mineral/titanium, -/area/shuttle/escape) -"k" = ( -/turf/closed/wall/mineral/titanium, -/area/shuttle/escape) "l" = ( /obj/machinery/vending/wallmed, /turf/closed/wall/mineral/titanium, @@ -65,9 +53,6 @@ /obj/structure/grille, /turf/open/floor/mineral/titanium/blue, /area/shuttle/escape) -"n" = ( -/turf/closed/wall/mineral/titanium, -/area/shuttle/escape) "o" = ( /turf/open/floor/mineral/titanium/blue, /area/shuttle/escape) @@ -98,9 +83,6 @@ "t" = ( /turf/closed/wall/mineral/titanium/interior, /area/shuttle/escape) -"u" = ( -/turf/template_noop, -/area/template_noop) "v" = ( /obj/structure/table, /obj/effect/spawner/lootdrop/maintenance, @@ -153,12 +135,6 @@ /obj/structure/table/reinforced, /turf/open/floor/mineral/titanium/yellow, /area/shuttle/escape) -"C" = ( -/turf/closed/wall/mineral/titanium, -/area/shuttle/escape) -"D" = ( -/turf/closed/wall/mineral/titanium, -/area/shuttle/escape) "E" = ( /obj/machinery/door/airlock/public/glass{ name = "Emergency Shuttle Cockpit"; @@ -217,16 +193,6 @@ }, /turf/open/floor/mineral/titanium/yellow, /area/shuttle/escape) -"N" = ( -/turf/closed/wall/mineral/titanium, -/area/shuttle/escape) -"O" = ( -/turf/closed/wall/mineral/titanium, -/area/shuttle/escape) -"P" = ( -/obj/machinery/status_display, -/turf/closed/wall/mineral/titanium, -/area/shuttle/escape) "Q" = ( /obj/machinery/light, /turf/open/floor/mineral/titanium/blue, @@ -253,15 +219,6 @@ }, /turf/open/floor/mineral/plastitanium/brig, /area/shuttle/escape) -"U" = ( -/obj/structure/chair{ - dir = 4 - }, -/obj/machinery/light{ - dir = 4 - }, -/turf/open/floor/mineral/titanium/blue, -/area/shuttle/escape) "V" = ( /obj/machinery/light{ dir = 1 diff --git a/_maps/shuttles/emergency_luxury.dmm b/_maps/shuttles/emergency_luxury.dmm index 4345939922..8306423ffd 100644 --- a/_maps/shuttles/emergency_luxury.dmm +++ b/_maps/shuttles/emergency_luxury.dmm @@ -345,24 +345,6 @@ }, /turf/open/floor/mineral/gold, /area/shuttle/escape/luxury) -"bm" = ( -/obj/machinery/light{ - dir = 4 - }, -/turf/open/floor/mineral/gold, -/area/shuttle/escape/luxury) -"bn" = ( -/obj/machinery/light{ - dir = 8 - }, -/turf/open/floor/mineral/gold, -/area/shuttle/escape/luxury) -"bo" = ( -/obj/machinery/light{ - dir = 4 - }, -/turf/open/floor/mineral/gold, -/area/shuttle/escape/luxury) "bp" = ( /obj/item/twohanded/required/kirbyplants{ icon_state = "plant-21"; @@ -372,15 +354,6 @@ /obj/machinery/light, /turf/open/floor/mineral/gold, /area/shuttle/escape/luxury) -"bq" = ( -/obj/item/twohanded/required/kirbyplants{ - icon_state = "plant-21"; - pixel_x = -3; - pixel_y = 3 - }, -/obj/machinery/light, -/turf/open/floor/mineral/gold, -/area/shuttle/escape/luxury) (1,1,1) = {" aa diff --git a/_maps/shuttles/emergency_meta.dmm b/_maps/shuttles/emergency_meta.dmm index 9824fec026..0bd4da4a7d 100644 --- a/_maps/shuttles/emergency_meta.dmm +++ b/_maps/shuttles/emergency_meta.dmm @@ -2,9 +2,6 @@ "aa" = ( /turf/template_noop, /area/template_noop) -"ab" = ( -/turf/closed/wall/mineral/titanium/overspace, -/area/shuttle/escape) "ac" = ( /obj/effect/spawner/structure/window/shuttle, /turf/open/floor/plating, @@ -12,9 +9,6 @@ "ad" = ( /turf/closed/wall/mineral/titanium, /area/shuttle/escape) -"ae" = ( -/turf/closed/wall/mineral/titanium, -/area/shuttle/escape) "af" = ( /obj/machinery/door/airlock/titanium{ name = "Emergency Shuttle Airlock" @@ -22,7 +16,7 @@ /turf/open/floor/mineral/titanium/blue, /area/shuttle/escape) "ag" = ( -/obj/structure/sign/nosmoking_2, +/obj/structure/sign/warning/nosmoking, /turf/closed/wall/mineral/titanium, /area/shuttle/escape) "ah" = ( @@ -39,18 +33,6 @@ }, /turf/open/floor/mineral/titanium/blue, /area/shuttle/escape) -"ai" = ( -/turf/closed/wall/mineral/titanium, -/area/shuttle/escape) -"aj" = ( -/turf/closed/wall/mineral/plastitanium{ - dir = 8; - icon_state = "diagonalWall3" - }, -/area/shuttle/escape) -"ak" = ( -/turf/closed/wall/mineral/titanium, -/area/shuttle/escape) "al" = ( /obj/structure/table, /obj/item/phone{ @@ -238,9 +220,6 @@ /obj/structure/chair/office/dark, /turf/open/floor/mineral/titanium/blue, /area/shuttle/escape) -"aD" = ( -/turf/closed/wall/mineral/titanium, -/area/shuttle/escape) "aE" = ( /obj/structure/chair{ dir = 1 @@ -278,18 +257,12 @@ /obj/structure/extinguisher_cabinet, /turf/closed/wall/mineral/titanium, /area/shuttle/escape) -"aK" = ( -/turf/closed/wall/mineral/plastitanium, -/area/shuttle/escape) "aL" = ( /obj/machinery/computer/station_alert{ dir = 4 }, /turf/open/floor/mineral/titanium/blue, /area/shuttle/escape) -"aM" = ( -/turf/closed/wall/mineral/titanium, -/area/shuttle/escape) "aN" = ( /obj/machinery/status_display{ dir = 8; @@ -359,12 +332,6 @@ }, /turf/open/floor/mineral/titanium, /area/shuttle/escape) -"aU" = ( -/turf/closed/wall/mineral/titanium, -/area/shuttle/escape) -"aV" = ( -/turf/closed/wall/mineral/titanium, -/area/shuttle/escape) "aW" = ( /obj/machinery/door/airlock/command{ name = "Emergency Recovery Airlock"; @@ -373,9 +340,6 @@ }, /turf/open/floor/mineral/titanium/blue, /area/shuttle/escape) -"aX" = ( -/turf/closed/wall/mineral/titanium, -/area/shuttle/escape) "aY" = ( /obj/machinery/door/airlock/security/glass{ name = "Brig"; @@ -392,7 +356,7 @@ /turf/open/floor/mineral/titanium/blue, /area/shuttle/escape) "ba" = ( -/obj/structure/sign/bluecross_2, +/obj/structure/sign/departments/medbay/alt, /turf/closed/wall/mineral/titanium, /area/shuttle/escape) "bb" = ( @@ -402,9 +366,6 @@ /obj/effect/turf_decal/delivery, /turf/open/floor/plasteel, /area/shuttle/escape) -"bc" = ( -/turf/closed/wall/mineral/titanium, -/area/shuttle/escape) "bd" = ( /obj/structure/chair{ dir = 4 @@ -420,9 +381,6 @@ }, /turf/open/floor/plasteel/floorgrime, /area/shuttle/escape) -"bg" = ( -/turf/open/floor/mineral/plastitanium, -/area/shuttle/escape) "bh" = ( /obj/structure/chair{ dir = 4 @@ -482,9 +440,6 @@ /obj/effect/turf_decal/delivery, /turf/open/floor/plasteel, /area/shuttle/escape) -"br" = ( -/turf/closed/wall/mineral/titanium, -/area/shuttle/escape) "bs" = ( /obj/structure/chair{ dir = 8 @@ -551,9 +506,6 @@ /obj/item/cigbutt, /turf/open/floor/plasteel/floorgrime, /area/shuttle/escape) -"bx" = ( -/turf/open/floor/plasteel/floorgrime, -/area/shuttle/escape) "by" = ( /obj/machinery/suit_storage_unit/standard_unit, /turf/open/floor/plasteel/floorgrime, @@ -572,11 +524,6 @@ }, /turf/open/floor/plasteel, /area/shuttle/escape) -"bB" = ( -/turf/closed/wall/mineral/plastitanium{ - icon_state = "diagonalWall3" - }, -/area/shuttle/escape) "bC" = ( /obj/structure/reagent_dispensers/watertank, /turf/open/floor/plasteel/floorgrime, @@ -874,12 +821,6 @@ }, /turf/open/floor/mineral/titanium/blue, /area/shuttle/escape) -"bZ" = ( -/obj/machinery/light{ - dir = 8 - }, -/turf/open/floor/mineral/titanium/blue, -/area/shuttle/escape) "ca" = ( /obj/structure/chair{ dir = 1 diff --git a/_maps/shuttles/emergency_mini.dmm b/_maps/shuttles/emergency_mini.dmm index d7d5644336..8bf882302b 100644 --- a/_maps/shuttles/emergency_mini.dmm +++ b/_maps/shuttles/emergency_mini.dmm @@ -205,9 +205,6 @@ /obj/item/extinguisher, /turf/closed/wall/mineral/titanium, /area/shuttle/escape) -"G" = ( -/turf/closed/wall/mineral/titanium, -/area/shuttle/escape) "H" = ( /obj/machinery/status_display, /turf/closed/wall/mineral/titanium, diff --git a/_maps/shuttles/emergency_pubby.dmm b/_maps/shuttles/emergency_pubby.dmm index 9c84d5883b..92ad72d1c5 100644 --- a/_maps/shuttles/emergency_pubby.dmm +++ b/_maps/shuttles/emergency_pubby.dmm @@ -307,7 +307,7 @@ pixel_y = 3 }, /obj/item/crowbar, -/obj/structure/sign/nosmoking_2{ +/obj/structure/sign/warning/nosmoking{ pixel_x = 32 }, /obj/machinery/light{ @@ -332,21 +332,6 @@ "bd" = ( /turf/closed/wall/mineral/titanium/nodiagonal, /area/shuttle/escape) -"be" = ( -/turf/closed/wall/mineral/titanium/nodiagonal, -/area/shuttle/escape) -"bf" = ( -/turf/closed/wall/mineral/titanium/nodiagonal, -/area/shuttle/escape) -"bg" = ( -/turf/closed/wall/mineral/titanium/nodiagonal, -/area/shuttle/escape) -"bh" = ( -/turf/closed/wall/mineral/titanium/nodiagonal, -/area/shuttle/escape) -"bi" = ( -/turf/closed/wall/mineral/titanium/nodiagonal, -/area/shuttle/escape) (1,1,1) = {" aa diff --git a/_maps/shuttles/emergency_raven.dmm b/_maps/shuttles/emergency_raven.dmm index c8178fd9a2..f1dbe29fbe 100644 --- a/_maps/shuttles/emergency_raven.dmm +++ b/_maps/shuttles/emergency_raven.dmm @@ -317,15 +317,6 @@ icon_state = "darkred" }, /area/shuttle/escape) -"aY" = ( -/obj/machinery/flasher{ - id = "shuttleflash"; - pixel_x = -26 - }, -/turf/open/floor/plasteel/darkgreen/side{ - dir = 8 - }, -/area/shuttle/escape) "aZ" = ( /turf/open/floor/plasteel/darkgreen/side{ dir = 4 @@ -580,10 +571,6 @@ /obj/structure/chair/office/dark, /turf/open/floor/plasteel/dark, /area/shuttle/escape) -"bw" = ( -/obj/machinery/door/airlock/shuttle, -/turf/open/floor/plasteel/dark, -/area/shuttle/escape) "bx" = ( /obj/structure/chair{ dir = 8 @@ -892,22 +879,6 @@ dir = 6 }, /area/shuttle/escape) -"cf" = ( -/obj/machinery/door/airlock/titanium/glass{ - name = "Shuttle Engine Room" - }, -/turf/open/floor/plasteel/darkgreen/side{ - dir = 8 - }, -/area/shuttle/escape) -"cg" = ( -/obj/machinery/door/airlock/titanium/glass{ - name = "Shuttle Engine Room" - }, -/turf/open/floor/plasteel/darkgreen/side{ - dir = 4 - }, -/area/shuttle/escape) "ch" = ( /obj/structure/reagent_dispensers/fueltank, /obj/machinery/light{ @@ -988,18 +959,6 @@ "cs" = ( /turf/closed/wall/mineral/plastitanium/interior, /area/shuttle/escape) -"cx" = ( -/turf/closed/wall/mineral/plastitanium{ - dir = 8; - icon_state = "diagonalWall3" - }, -/area/shuttle/escape) -"cy" = ( -/turf/closed/wall/mineral/plastitanium{ - dir = 1; - icon_state = "diagonalWall3" - }, -/area/shuttle/escape) "cz" = ( /obj/machinery/button/door{ id = "shuttleshutters"; @@ -1010,25 +969,6 @@ /obj/machinery/light, /turf/open/floor/plasteel/darkblue/side, /area/shuttle/escape) -"cA" = ( -/obj/machinery/door/poddoor/shutters{ - id = "shuttleshutters"; - name = "blast shutters" - }, -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/shuttle/escape) -"cD" = ( -/turf/closed/wall/mineral/plastitanium{ - icon_state = "diagonalWall3" - }, -/area/shuttle/escape) -"cI" = ( -/turf/closed/wall/mineral/plastitanium{ - dir = 4; - icon_state = "diagonalWall3" - }, -/area/shuttle/escape) "ei" = ( /obj/machinery/porta_turret/centcom_shuttle{ dir = 10 @@ -1091,15 +1031,6 @@ /obj/machinery/light, /turf/open/floor/plasteel/darkgreen/side, /area/shuttle/escape) -"eJ" = ( -/obj/machinery/button/flasher{ - id = "cockpit_flasher"; - pixel_x = 6; - pixel_y = -24 - }, -/obj/machinery/light, -/turf/open/floor/mineral/titanium/blue, -/area/space) "eN" = ( /obj/machinery/light{ dir = 4 @@ -1115,9 +1046,6 @@ "eP" = ( /turf/closed/wall/mineral/plastitanium/nodiagonal, /area/shuttle/escape) -"eQ" = ( -/turf/template_noop, -/area/template_noop) (1,1,1) = {" aa @@ -1543,8 +1471,8 @@ bu bA bJ ad -eQ -eQ +ad +ad ad cs bV @@ -1577,8 +1505,8 @@ bv bB bJ ad -eQ -eQ +ad +ad ad bJ br @@ -1611,8 +1539,8 @@ aC bC bJ ad -eQ -eQ +ad +ad ad bJ br @@ -1645,8 +1573,8 @@ bm ar cs ad -eQ -eQ +ad +ad ad cs bW diff --git a/_maps/shuttles/emergency_supermatter.dmm b/_maps/shuttles/emergency_supermatter.dmm index 1b4acd218f..d5caf0ddb2 100644 --- a/_maps/shuttles/emergency_supermatter.dmm +++ b/_maps/shuttles/emergency_supermatter.dmm @@ -2,11 +2,8 @@ "aa" = ( /turf/template_noop, /area/template_noop) -"ab" = ( -/turf/closed/wall/mineral/titanium/overspace, -/area/shuttle/escape) "ac" = ( -/obj/structure/sign/radiation, +/obj/structure/sign/warning/radiation, /turf/closed/wall/mineral/titanium, /area/shuttle/escape) "ad" = ( @@ -16,9 +13,6 @@ "ae" = ( /turf/closed/wall/mineral/titanium, /area/shuttle/escape) -"af" = ( -/turf/closed/wall/mineral/titanium, -/area/shuttle/escape) "ag" = ( /obj/structure/closet/radiation{ anchored = 1 @@ -39,10 +33,6 @@ }, /turf/open/floor/mineral/titanium/yellow, /area/shuttle/escape) -"ak" = ( -/obj/structure/sign/radiation, -/turf/closed/wall/mineral/titanium, -/area/shuttle/escape) "al" = ( /obj/machinery/shower{ dir = 8 @@ -115,12 +105,6 @@ "ax" = ( /turf/closed/wall/mineral/titanium/interior, /area/shuttle/escape) -"ay" = ( -/turf/closed/wall/mineral/titanium, -/area/shuttle/escape) -"az" = ( -/turf/closed/wall/mineral/titanium, -/area/shuttle/escape) "aA" = ( /obj/machinery/door/airlock/titanium{ name = "Emergency Shuttle Airlock" @@ -138,10 +122,6 @@ }, /turf/open/floor/plating, /area/shuttle/escape) -"aC" = ( -/obj/structure/sign/radiation, -/turf/closed/wall/mineral/titanium, -/area/shuttle/escape) "aD" = ( /obj/structure/table/reinforced, /obj/item/storage/firstaid/toxin, @@ -166,24 +146,10 @@ }, /turf/open/floor/plating, /area/shuttle/escape) -"aG" = ( -/turf/closed/wall/mineral/titanium, -/area/shuttle/escape) -"aH" = ( -/obj/machinery/status_display, -/turf/closed/wall/mineral/titanium, -/area/shuttle/escape) "aI" = ( -/obj/structure/sign/radiation, +/obj/structure/sign/warning/radiation, /turf/closed/wall/mineral/titanium/nodiagonal, /area/shuttle/escape) -"aJ" = ( -/obj/structure/sign/radiation, -/turf/closed/wall/mineral/titanium, -/area/shuttle/escape) -"aK" = ( -/turf/closed/wall/mineral/titanium, -/area/shuttle/escape) "aL" = ( /obj/machinery/door/airlock/external{ name = "Emergency Launch Catwalk"; @@ -385,8 +351,8 @@ aa aa "} (2,1,1) = {" -af -af +ae +ae ad ac aq @@ -577,8 +543,8 @@ bc be "} (10,1,1) = {" -af -af +ae +ae ad ac aq diff --git a/_maps/shuttles/emergency_wabbajack.dmm b/_maps/shuttles/emergency_wabbajack.dmm index 7c4b5ea932..facb14a15c 100644 --- a/_maps/shuttles/emergency_wabbajack.dmm +++ b/_maps/shuttles/emergency_wabbajack.dmm @@ -29,7 +29,7 @@ /turf/open/floor/plasteel/darkgreen, /area/shuttle/escape) "ai" = ( -/obj/structure/sign/biohazard, +/obj/structure/sign/warning/biohazard, /turf/closed/wall/mineral/titanium, /area/shuttle/escape) "aj" = ( diff --git a/_maps/shuttles/ferry_base.dmm b/_maps/shuttles/ferry_base.dmm index cc24ea9293..e0cdfc2c38 100644 --- a/_maps/shuttles/ferry_base.dmm +++ b/_maps/shuttles/ferry_base.dmm @@ -20,9 +20,6 @@ /obj/effect/spawner/structure/window/shuttle, /turf/open/floor/plating, /area/shuttle/transport) -"f" = ( -/turf/closed/wall/mineral/titanium/overspace, -/area/shuttle/transport) "g" = ( /turf/closed/wall/mineral/titanium/interior, /area/shuttle/transport) @@ -57,22 +54,12 @@ height = 12; id = "ferry"; name = "ferry shuttle"; - roundstart_move = "ferry_away"; port_direction = 2; width = 5; timid = 1 }, /turf/open/floor/mineral/titanium/blue, /area/shuttle/transport) -"n" = ( -/obj/structure/shuttle/engine/propulsion{ - dir = 4 - }, -/turf/closed/wall/mineral/titanium, -/area/shuttle/transport) -"o" = ( -/turf/closed/wall/mineral/titanium, -/area/shuttle/transport) "p" = ( /obj/structure/closet/crate, /turf/open/floor/mineral/titanium/blue, @@ -83,9 +70,6 @@ }, /turf/open/floor/mineral/titanium/blue, /area/shuttle/transport) -"r" = ( -/turf/closed/wall/mineral/titanium, -/area/shuttle/transport) (1,1,1) = {" a diff --git a/_maps/shuttles/ferry_lighthouse.dmm b/_maps/shuttles/ferry_lighthouse.dmm index f7e907a255..f1c7bb5e69 100644 --- a/_maps/shuttles/ferry_lighthouse.dmm +++ b/_maps/shuttles/ferry_lighthouse.dmm @@ -17,19 +17,12 @@ "ad" = ( /turf/closed/wall/mineral/titanium, /area/shuttle/transport) -"ae" = ( -/turf/template_noop, -/area/template_noop) "af" = ( /turf/closed/wall/r_wall, /area/shuttle/transport) "ag" = ( /turf/open/floor/plating/airless, /area/shuttle/transport) -"ah" = ( -/obj/structure/foamedmetal, -/turf/open/space, -/area/shuttle/transport) "ai" = ( /obj/machinery/vending/liberationstation, /turf/open/floor/mineral/titanium/blue, @@ -97,9 +90,6 @@ /obj/effect/spawner/structure/window/shuttle, /turf/closed/wall/mineral/titanium, /area/shuttle/transport) -"ax" = ( -/turf/closed/wall/mineral/titanium, -/area/shuttle/transport) "ay" = ( /obj/structure/window/shuttle, /obj/structure/grille, @@ -109,9 +99,6 @@ /obj/effect/spawner/structure/window/shuttle, /turf/open/floor/plating, /area/shuttle/transport) -"aA" = ( -/turf/closed/wall/mineral/titanium, -/area/shuttle/transport) "aB" = ( /obj/structure/grille/broken, /obj/structure/window/fulltile, @@ -178,7 +165,6 @@ height = 27; id = "ferry"; name = "The Lighthouse"; - roundstart_move = "ferry_away"; timid = 1; port_direction = 2; width = 16 @@ -232,9 +218,6 @@ /obj/effect/spawner/structure/window/reinforced, /turf/closed/wall/mineral/titanium, /area/shuttle/transport) -"aZ" = ( -/turf/closed/wall/mineral/titanium/overspace, -/area/shuttle/transport) "ba" = ( /obj/machinery/conveyor{ dir = 1; @@ -392,7 +375,7 @@ bi bj "} (6,1,1) = {" -ae +aa ad aM al @@ -410,8 +393,8 @@ aM ad "} (7,1,1) = {" -ae -ae +aa +aa ad ad aM @@ -425,13 +408,13 @@ aL bf aM ad -ae +aa "} (8,1,1) = {" -ae -ae -ae -ae +aa +aa +aa +aa ad ar au @@ -442,14 +425,14 @@ au bb bg ad -ae -ae +aa +aa "} (9,1,1) = {" -ae -ae -ae -ae +aa +aa +aa +aa ap ap av @@ -460,15 +443,15 @@ aC bc aM ad -ae -ae +aa +aa "} (10,1,1) = {" -ae -ae -ae -ae -ae +aa +aa +aa +aa +aa ap au aD @@ -477,16 +460,16 @@ aD aD bd ad -ae -ae -ae +aa +aa +aa "} (11,1,1) = {" -ae -ae -ae -ae -ae +aa +aa +aa +aa +aa ap ap aD @@ -495,295 +478,295 @@ aD aD aM ad -ae -ae -ae +aa +aa +aa "} (12,1,1) = {" -ae -ae -ae -ae -ae -ae +aa +aa +aa +aa +aa +aa ap aD aD aD aD ad -ae -ae -ae -ae +aa +aa +aa +aa "} (13,1,1) = {" -ae -ae -ae -ae -ae -ae +aa +aa +aa +aa +aa +aa ap aE aN aE aM ad -ae -ae -ae -ae +aa +aa +aa +aa "} (14,1,1) = {" -ae -ae -ae -ae -ae -ae +aa +aa +aa +aa +aa +aa aw aE aN aE ad -ae -ae -ae -ae -ae +aa +aa +aa +aa +aa "} (15,1,1) = {" -ae -ae -ae -ae -ae -ae +aa +aa +aa +aa +aa +aa aw aE aE aE ad -ae -ae -ae -ae -ae +aa +aa +aa +aa +aa "} (16,1,1) = {" -ae -ae -ae -ae -ae -ae +aa +aa +aa +aa +aa +aa ad ak aE ak aY -ae -ae -ae -ae -ae +aa +aa +aa +aa +aa "} (17,1,1) = {" -ae -ae -ae -ae -ae -ae +aa +aa +aa +aa +aa +aa ad aF aE aT aw -ae -ae -ae -ae -ae +aa +aa +aa +aa +aa "} (18,1,1) = {" -ae -ae -ae -ae -ae -ae +aa +aa +aa +aa +aa +aa ad aG aE aU ad -ae -ae -ae -ae -ae +aa +aa +aa +aa +aa "} (19,1,1) = {" -ae -ae -ae -ae -ae -ae +aa +aa +aa +aa +aa +aa ad aH aE aV ad -ae -ae -ae -ae -ae +aa +aa +aa +aa +aa "} (20,1,1) = {" -ae -ae -ae -ae -ae -ae +aa +aa +aa +aa +aa +aa ay aI aE aW ay -ae -ae -ae -ae -ae +aa +aa +aa +aa +aa "} (21,1,1) = {" -ae -ae -ae -ae -ae -ae +aa +aa +aa +aa +aa +aa ad ak aE aW ad -ae -ae -ae -ae -ae +aa +aa +aa +aa +aa "} (22,1,1) = {" -ae -ae -ae -ae -ae -ae +aa +aa +aa +aa +aa +aa ad aJ aE aW ad -ae -ae -ae -ae -ae +aa +aa +aa +aa +aa "} (23,1,1) = {" -ae -ae -ae -ae -ae -ae +aa +aa +aa +aa +aa +aa ad aJ aE aW ad -ae -ae -ae -ae -ae +aa +aa +aa +aa +aa "} (24,1,1) = {" -ae -ae -ae -ae -ae -ae +aa +aa +aa +aa +aa +aa az aJ aE aW az -ae -ae -ae -ae -ae +aa +aa +aa +aa +aa "} (25,1,1) = {" -ae -ae -ae -ae -ae -ae +aa +aa +aa +aa +aa +aa ad aJ aE aW ad -ae -ae -ae -ae -ae +aa +aa +aa +aa +aa "} (26,1,1) = {" -ae -ae -ae -ae -ae -ae +aa +aa +aa +aa +aa +aa ad aK aE aW ad -ae -ae -ae -ae -ae +aa +aa +aa +aa +aa "} (27,1,1) = {" -ae -ae -ae -ae -ae -ae +aa +aa +aa +aa +aa +aa ad ay aO ay ad -ae -ae -ae -ae -ae +aa +aa +aa +aa +aa "} diff --git a/_maps/shuttles/ferry_meat.dmm b/_maps/shuttles/ferry_meat.dmm index b9d3f49695..3ae6d8af03 100644 --- a/_maps/shuttles/ferry_meat.dmm +++ b/_maps/shuttles/ferry_meat.dmm @@ -11,9 +11,6 @@ "c" = ( /turf/closed/wall/mineral/titanium, /area/shuttle/transport) -"d" = ( -/turf/closed/wall/mineral/titanium, -/area/shuttle/transport) "e" = ( /turf/closed/wall/mineral/titanium/interior, /area/shuttle/transport) @@ -113,22 +110,12 @@ height = 12; id = "ferry"; name = "ferry shuttle"; - roundstart_move = "ferry_away"; port_direction = 2; width = 5; timid = 1 }, /turf/open/floor/plasteel/freezer, /area/shuttle/transport) -"r" = ( -/obj/structure/shuttle/engine/propulsion{ - dir = 4 - }, -/turf/closed/wall/mineral/titanium, -/area/shuttle/transport) -"s" = ( -/turf/closed/wall/mineral/titanium, -/area/shuttle/transport) "t" = ( /obj/structure/closet/chefcloset, /turf/open/floor/plasteel/freezer, @@ -150,9 +137,6 @@ }, /turf/open/floor/plasteel/freezer, /area/shuttle/transport) -"x" = ( -/turf/closed/wall/mineral/titanium, -/area/shuttle/transport) (1,1,1) = {" a diff --git a/_maps/shuttles/whiteship_box.dmm b/_maps/shuttles/whiteship_box.dmm index f1c6c838b1..d51176b1b8 100644 --- a/_maps/shuttles/whiteship_box.dmm +++ b/_maps/shuttles/whiteship_box.dmm @@ -2,9 +2,6 @@ "aa" = ( /turf/template_noop, /area/template_noop) -"ab" = ( -/turf/closed/wall/mineral/titanium/overspace, -/area/shuttle/abandoned) "ac" = ( /turf/closed/wall/mineral/titanium, /area/shuttle/abandoned) @@ -22,15 +19,11 @@ name = "NT Medical Ship"; port_direction = 8; preferred_direction = 4; - roundstart_move = "whiteship_away"; timid = 1; width = 35 }, /turf/open/floor/mineral/titanium, /area/shuttle/abandoned) -"ae" = ( -/turf/closed/wall/mineral/titanium, -/area/shuttle/abandoned) "af" = ( /obj/machinery/door/airlock/titanium, /turf/open/floor/mineral/titanium, @@ -41,12 +34,6 @@ }, /turf/open/floor/plating/airless, /area/shuttle/abandoned) -"ah" = ( -/turf/closed/wall/mineral/titanium, -/area/shuttle/abandoned) -"ai" = ( -/turf/closed/wall/mineral/titanium, -/area/shuttle/abandoned) "aj" = ( /turf/open/floor/mineral/titanium, /area/shuttle/abandoned) @@ -63,9 +50,6 @@ }, /turf/open/floor/mineral/titanium, /area/shuttle/abandoned) -"am" = ( -/turf/closed/wall/mineral/titanium, -/area/shuttle/abandoned) "an" = ( /obj/structure/shuttle/engine/propulsion{ dir = 8 @@ -84,9 +68,6 @@ "ap" = ( /turf/closed/wall/mineral/titanium/interior, /area/shuttle/abandoned) -"aq" = ( -/turf/closed/wall/mineral/titanium, -/area/shuttle/abandoned) "ar" = ( /obj/machinery/computer/pod{ dir = 8; @@ -94,15 +75,9 @@ }, /turf/open/floor/mineral/titanium, /area/shuttle/abandoned) -"as" = ( -/turf/closed/wall/mineral/titanium, -/area/shuttle/abandoned) "at" = ( /turf/open/floor/plating, /area/shuttle/abandoned) -"au" = ( -/turf/closed/wall/mineral/titanium, -/area/shuttle/abandoned) "av" = ( /obj/structure/rack, /obj/item/clothing/suit/space/hardsuit/medical, @@ -128,21 +103,12 @@ }, /turf/open/floor/plating, /area/shuttle/abandoned) -"az" = ( -/turf/closed/wall/mineral/titanium, -/area/shuttle/abandoned) -"aA" = ( -/turf/closed/wall/mineral/titanium, -/area/shuttle/abandoned) "aB" = ( /obj/structure/shuttle/engine/propulsion/right{ dir = 8 }, /turf/open/floor/plating/airless, /area/shuttle/abandoned) -"aC" = ( -/turf/closed/wall/mineral/titanium, -/area/shuttle/abandoned) "aD" = ( /obj/machinery/door/airlock/titanium, /turf/open/floor/plating, @@ -154,9 +120,6 @@ }, /turf/open/floor/mineral/titanium, /area/shuttle/abandoned) -"aF" = ( -/turf/closed/wall/mineral/titanium, -/area/shuttle/abandoned) "aG" = ( /obj/structure/rack, /obj/item/tank/internals/emergency_oxygen, @@ -174,9 +137,6 @@ /obj/structure/light_construct, /turf/open/floor/mineral/titanium, /area/shuttle/abandoned) -"aI" = ( -/turf/closed/wall/mineral/titanium, -/area/shuttle/abandoned) "aJ" = ( /obj/structure/chair{ dir = 1 @@ -193,10 +153,6 @@ /obj/effect/spawner/structure/window/shuttle, /turf/open/floor/plating, /area/shuttle/abandoned) -"aM" = ( -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/mineral/titanium, -/area/shuttle/abandoned) "aN" = ( /obj/machinery/door/window, /turf/open/floor/mineral/titanium/purple, @@ -245,13 +201,6 @@ /obj/item/tank/internals/oxygen, /turf/open/floor/mineral/titanium, /area/shuttle/abandoned) -"aW" = ( -/obj/machinery/door/airlock/titanium, -/turf/open/floor/mineral/titanium, -/area/shuttle/abandoned) -"aX" = ( -/turf/closed/wall/mineral/titanium/interior, -/area/shuttle/abandoned) "aY" = ( /obj/structure/bed, /obj/item/bedsheet, @@ -287,10 +236,6 @@ /obj/structure/chair, /turf/open/floor/mineral/titanium, /area/shuttle/abandoned) -"be" = ( -/obj/machinery/door/airlock/public/glass, -/turf/open/floor/mineral/titanium, -/area/shuttle/abandoned) "bf" = ( /obj/item/scalpel, /turf/open/floor/mineral/titanium, @@ -352,26 +297,12 @@ }, /turf/open/floor/mineral/titanium, /area/shuttle/abandoned) -"bp" = ( -/obj/structure/light_construct, -/turf/open/floor/mineral/titanium, -/area/shuttle/abandoned) "bq" = ( /obj/structure/light_construct/small{ dir = 8 }, /turf/open/floor/mineral/titanium, /area/shuttle/abandoned) -"br" = ( -/obj/structure/light_construct, -/turf/open/floor/mineral/titanium, -/area/shuttle/abandoned) -"bs" = ( -/obj/structure/light_construct{ - dir = 1 - }, -/turf/open/floor/mineral/titanium, -/area/shuttle/abandoned) "bt" = ( /obj/structure/light_construct/small{ dir = 1 @@ -394,11 +325,11 @@ aa aa aa aa -aC -aC -aW -aC -aC +ac +ac +af +ac +ac aa aa aa @@ -418,11 +349,11 @@ aa aa aa aa -aC -aX +ac +ap aj -aX -aC +ap +ac aa aa aa @@ -442,11 +373,11 @@ aa aa aa aa -aC +ac aj aj aj -aC +ac aa aa aa @@ -466,11 +397,11 @@ aa aa aa aa -aC +ac aj aj aj -aC +ac aa aa aa @@ -490,11 +421,11 @@ aa aa aa aa -aC +ac aj aj aj -aC +ac aa aa aa @@ -514,11 +445,11 @@ aa aa aa aa -aC +ac aj aj bk -aC +ac aa aa aa @@ -538,11 +469,11 @@ aa aa aa aa -aC +ac aj aj aj -aC +ac aa aa aa @@ -562,11 +493,11 @@ aa aa aa aa -aC +ac aj aj aj -aC +ac aa aa aa @@ -586,11 +517,11 @@ aa aa aa aa -aC +ac aj aj aU -aC +ac aa aa aa @@ -610,11 +541,11 @@ aa aa aa aa -aC -aX +ac +ap aj -aX -aC +ap +ac aa aa aa @@ -634,11 +565,11 @@ aa aa aa aa -aC -aC -aW -aC -aC +ac +ac +af +ac +ac aa aa aa @@ -659,9 +590,9 @@ aa aa aa aa -aC +ac aj -aC +ac aa aa aa @@ -682,11 +613,11 @@ aa aa aa aa -aC -aC -aW -aC -aC +ac +ac +af +ac +ac aa aa aa @@ -705,13 +636,13 @@ aa aa aa aa -aC -aC -aX +ac +ac +ap aj -aX -aC -aC +ap +ac +ac aa aa aa @@ -722,85 +653,85 @@ aa aa "} (15,1,1) = {" -aC +ac ag an an an aB aa -aC -aX +ac +ap aj aj aj -aX -aC +ap +ac aa ag an an an aB -aC +ac aa "} (16,1,1) = {" -aC -aC +ac +ac ao ao ao -aC -aC -aC +ac +ac +ac bl aj aj aj bk -aC -aC -aC +ac +ac +ac ao ao ao -aC -aC +ac +ac aa "} (17,1,1) = {" aa -aC +ac ap at at ap -aC -aX +ac +ap aj aj aj aj aj -aX -aC +ap +ac ap at at ap -aC +ac aa aa "} (18,1,1) = {" aa aa -aC +ac ap at bi -aC +ac aj aj aj @@ -808,11 +739,11 @@ aj aj aj ba -aC +ac bt at ap -aC +ac aa aa aa @@ -821,21 +752,21 @@ aa aa aa aa -aC -aC +ac +ac aD -aC -aC -aC +ac +ac +ac aL -be +aR aL -aC -aC -aC +ac +ac +ac aD -aC -aC +ac +ac aa aa aa @@ -845,8 +776,8 @@ aa aa aa aa -aC -aC +ac +ac aj aj aj @@ -858,8 +789,8 @@ aj aj aj aj -aC -aC +ac +ac aa aa aa @@ -868,9 +799,9 @@ aa (21,1,1) = {" aa aa -aC -aC -aX +ac +ac +ap aE aj aj @@ -882,58 +813,58 @@ aj aj aj aj -aC -aC -aC +ac +ac +ac aa aa aa "} (22,1,1) = {" aa -aC -aC -aX +ac +ac +ap aj aj aj aj -aC -aC -aC -aC -aC -aC +ac +ac +ac +ac +ac +ac aj aj -aC -aC -aC -aC +ac +ac +ac +ac aa aa "} (23,1,1) = {" -aC -aC -aC -aC -aC -aC -aX +ac +ac +ac +ac +ac +ac +ap aj -aC +ac aN aj bq aj -aW +af aj aj -aW +af aj -aX -aC +ap +ac aa aa "} @@ -943,80 +874,80 @@ aj aj av av -aX -aC +ap +ac bk -aC +ac aO aj aV aY -aC +ac bl aj -aC +ac aj bg -aC -aC +ac +ac aa "} (25,1,1) = {" -aC +ac aj aj aj aj aG -aC +ac aj -aW +af aj bn aj aZ -aC +ac aj aj -aC +ac aj aj -aX -aC +ap +ac aa "} (26,1,1) = {" -aC +ac ak aj aj aj aj -aC +ac aj -aC -aC -aC -aC -aC -aC +ac +ac +ac +ac +ac +ac aj aE aL bf aj aj -aC +ac aa "} (27,1,1) = {" -aC +ac al aj aj aj aj -aW +af aj aj aj @@ -1030,18 +961,18 @@ aL aj aj bh -aC +ac aa "} (28,1,1) = {" -aC +ac aj aj aj aj aj -aC -aX +ac +ap aj aj aj @@ -1054,41 +985,41 @@ aL aj aj aj -aC +ac aa "} (29,1,1) = {" -aC +ac aj aj aj aj -aX -aC -aC -aC +ap +ac +ac +ac aL -be +aR aL -aC -aC -aC -aC -aC +ac +ac +ac +ac +ac aj aj aj -aC +ac aa "} (30,1,1) = {" -aC +ac aj aj aj -aX -aC -aX +ap +ac +ap aj aj aj @@ -1098,20 +1029,20 @@ aj aP aP aP -aC +ac aj aj -aX -aC +ap +ac aa "} (31,1,1) = {" -aW +af aj ar aj -aC -aX +ac +ap aj aj aj @@ -1122,19 +1053,19 @@ aj aj aj aj -aX -aX +ap +ap bb -aC +ac aa aa "} (32,1,1) = {" -aC -aC -aC +ac +ac +ac aw -aC +ac bj aJ aj @@ -1147,18 +1078,18 @@ aj aj bd aH -aC -aC -aC +ac +ac +ac aa aa "} (33,1,1) = {" aa aa -aC +ac ax -aC +ac bu aJ aj @@ -1170,9 +1101,9 @@ aj aj aj aj -aX -aC -aC +ap +ac +ac aa aa aa @@ -1180,10 +1111,10 @@ aa (34,1,1) = {" aa aa -aC +ac ay -aC -aX +ac +ap aK aj aj @@ -1193,9 +1124,9 @@ aP aj aj aj -aX -aC -aC +ap +ac +ac aa aa aa @@ -1206,9 +1137,9 @@ aa aa aa aa -aC -aC -aC +ac +ac +ac aL aL aL @@ -1216,9 +1147,9 @@ aL aL aL aL -aC -aC -aC +ac +ac +ac aa aa aa diff --git a/_maps/shuttles/whiteship_cere.dmm b/_maps/shuttles/whiteship_cere.dmm index dc51d7630c..54cda6755b 100644 --- a/_maps/shuttles/whiteship_cere.dmm +++ b/_maps/shuttles/whiteship_cere.dmm @@ -24,7 +24,6 @@ port_direction = 8; preferred_direction = 1; timid = 1; - roundstart_move = "whiteship_away"; width = 16 }, /turf/open/floor/plating, @@ -584,9 +583,6 @@ }, /turf/open/floor/mineral/titanium/blue, /area/shuttle/abandoned) -"aY" = ( -/turf/template_noop, -/area/template_noop) "aZ" = ( /obj/structure/table, /obj/item/phone{ @@ -637,8 +633,8 @@ aa aa aa aa -aY -aY +aa +aa "} (2,1,1) = {" aa @@ -656,7 +652,7 @@ ab ab aa aa -aY +aa "} (3,1,1) = {" ab diff --git a/_maps/shuttles/whiteship_delta.dmm b/_maps/shuttles/whiteship_delta.dmm index 25f6b99ae4..57adba831c 100644 --- a/_maps/shuttles/whiteship_delta.dmm +++ b/_maps/shuttles/whiteship_delta.dmm @@ -47,7 +47,7 @@ /turf/open/floor/plasteel/neutral, /area/shuttle/abandoned) "ah" = ( -/obj/structure/sign/vacuum, +/obj/structure/sign/warning/vacuum, /turf/closed/wall/mineral/titanium/nodiagonal, /area/shuttle/abandoned) "ai" = ( @@ -891,7 +891,7 @@ }, /area/shuttle/abandoned) "bI" = ( -/obj/structure/sign/vacuum, +/obj/structure/sign/warning/vacuum, /turf/closed/wall/mineral/titanium, /area/shuttle/abandoned) "bJ" = ( @@ -1084,7 +1084,7 @@ /turf/open/floor/plasteel/whiteblue/side, /area/shuttle/abandoned) "cc" = ( -/obj/structure/sign/bluecross_2, +/obj/structure/sign/departments/medbay/alt, /turf/closed/wall/mineral/titanium, /area/shuttle/abandoned) "cd" = ( @@ -1097,7 +1097,7 @@ }, /area/shuttle/abandoned) "ce" = ( -/obj/structure/sign/engineering, +/obj/structure/sign/departments/engineering, /turf/closed/wall/mineral/titanium, /area/shuttle/abandoned) "cf" = ( @@ -1430,7 +1430,7 @@ /turf/open/floor/plasteel/whitepurple/corner, /area/shuttle/abandoned) "cL" = ( -/obj/structure/sign/science, +/obj/structure/sign/departments/science, /turf/closed/wall/mineral/titanium, /area/shuttle/abandoned) "cM" = ( @@ -1518,7 +1518,6 @@ name = "White-Ship"; port_direction = 8; preferred_direction = 8; - roundstart_move = "whiteship_away"; timid = 1; width = 32 }, diff --git a/_maps/shuttles/whiteship_meta.dmm b/_maps/shuttles/whiteship_meta.dmm index 96f6e7e3b4..be7b37b260 100644 --- a/_maps/shuttles/whiteship_meta.dmm +++ b/_maps/shuttles/whiteship_meta.dmm @@ -39,15 +39,11 @@ name = "NT Recovery White-Ship"; port_direction = 8; preferred_direction = 4; - roundstart_move = "whiteship_away"; timid = 1; width = 28 }, /turf/open/floor/mineral/titanium/blue, /area/shuttle/abandoned) -"af" = ( -/turf/template_noop, -/area/template_noop) "ag" = ( /obj/structure/shuttle/engine/propulsion/left{ dir = 8 @@ -151,7 +147,7 @@ /turf/open/floor/mineral/titanium, /area/shuttle/abandoned) "ao" = ( -/obj/structure/sign/vacuum{ +/obj/structure/sign/warning/vacuum{ pixel_x = -32 }, /obj/effect/decal/cleanable/dirt{ @@ -559,7 +555,7 @@ /turf/open/floor/plasteel, /area/shuttle/abandoned) "aT" = ( -/obj/structure/sign/restroom, +/obj/structure/sign/departments/restroom, /turf/closed/wall/mineral/titanium, /area/shuttle/abandoned) "aU" = ( @@ -608,7 +604,7 @@ /turf/open/floor/mineral/titanium/blue, /area/shuttle/abandoned) "aY" = ( -/obj/structure/sign/cargo, +/obj/structure/sign/departments/cargo, /turf/closed/wall/mineral/titanium, /area/shuttle/abandoned) "aZ" = ( @@ -730,7 +726,7 @@ /area/shuttle/abandoned) "bl" = ( /obj/structure/reagent_dispensers/fueltank, -/obj/structure/sign/vacuum{ +/obj/structure/sign/warning/vacuum{ pixel_x = -32 }, /obj/effect/decal/cleanable/dirt{ @@ -1085,7 +1081,7 @@ /turf/open/floor/mineral/titanium/blue, /area/shuttle/abandoned) "bR" = ( -/obj/structure/sign/science{ +/obj/structure/sign/departments/science{ pixel_y = -32 }, /obj/effect/decal/cleanable/dirt{ @@ -1118,7 +1114,7 @@ }, /obj/machinery/computer/camera_advanced/shuttle_docker/whiteship{ dir = 1; - station_lock_override = 1; + lock_override = 1; view_range = 15; x_offset = -3; y_offset = -7 @@ -1148,7 +1144,7 @@ /turf/open/floor/mineral/titanium, /area/shuttle/abandoned) "bX" = ( -/obj/structure/sign/botany, +/obj/structure/sign/departments/botany, /turf/closed/wall/mineral/titanium, /area/shuttle/abandoned) "bY" = ( @@ -1182,7 +1178,7 @@ /turf/open/floor/mineral/titanium/blue, /area/shuttle/abandoned) "cb" = ( -/obj/structure/sign/bluecross_2, +/obj/structure/sign/departments/medbay/alt, /turf/closed/wall/mineral/titanium, /area/shuttle/abandoned) "cc" = ( @@ -1634,20 +1630,20 @@ (1,1,1) = {" aa -af -af -af -af +aa +aa +aa +aa ab ab ad ab ab -af -af -af -af -af +aa +aa +aa +aa +aa "} (2,1,1) = {" aa @@ -1664,7 +1660,7 @@ au au au cA -af +aa "} (3,1,1) = {" ab @@ -2025,9 +2021,9 @@ ab "} (24,1,1) = {" aa -af -af -af +aa +aa +aa ac bj aB @@ -2035,16 +2031,16 @@ bH bN bV ac -af -af -af -af +aa +aa +aa +aa "} (25,1,1) = {" -af -af -af -af +aa +aa +aa +aa ac bk bs @@ -2052,16 +2048,16 @@ bI bO bW ac -af -af -af -af +aa +aa +aa +aa "} (26,1,1) = {" aa -af -af -af +aa +aa +aa ba ac ac @@ -2069,10 +2065,10 @@ ac ac ac ba -af -af -af -af +aa +aa +aa +aa "} (27,1,1) = {" aa @@ -2092,19 +2088,19 @@ aa aa "} (28,1,1) = {" -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa "} diff --git a/_maps/shuttles/whiteship_pubby.dmm b/_maps/shuttles/whiteship_pubby.dmm index 1ea9db3063..3ef386e265 100644 --- a/_maps/shuttles/whiteship_pubby.dmm +++ b/_maps/shuttles/whiteship_pubby.dmm @@ -94,7 +94,6 @@ name = "White Ship"; port_direction = 4; preferred_direction = 1; - roundstart_move = "whiteship_away"; timid = 1; width = 9 }, diff --git a/_maps/templates/medium_shuttle1.dmm b/_maps/templates/medium_shuttle1.dmm index 80833ada8d..ec158f3b4c 100644 --- a/_maps/templates/medium_shuttle1.dmm +++ b/_maps/templates/medium_shuttle1.dmm @@ -20,7 +20,7 @@ "d" = ( /turf/closed/wall/mineral/plastitanium, /area/ruin/powered/shuttle/medium_1) -"g" = ( +"f" = ( /turf/closed/wall/mineral/titanium, /area/ruin/powered/shuttle/medium_1) "h" = ( @@ -96,7 +96,7 @@ a a i h -g +f h i a @@ -111,11 +111,11 @@ a a a a -g +f n n n -g +f a a a @@ -127,13 +127,13 @@ a a a i -g -g +f +f o -g +f o -g -g +f +f i a a @@ -143,15 +143,15 @@ a b b b -g +f j -g +f n n n -g +f j -g +f w w w @@ -160,7 +160,7 @@ w c c c -g +f j k n @@ -168,7 +168,7 @@ t n k j -g +f c c c @@ -176,41 +176,41 @@ c (6,1,1) = {" d d -g -g +f +f k -g -g -g -g -g +f +f +f +f +f k -g -g +f +f d d "} (7,1,1) = {" d d -g +f j j -g +f j j j -g +f j j -g +f d d "} (8,1,1) = {" d d -g +f j j k @@ -220,41 +220,41 @@ j k j j -g +f d d "} (9,1,1) = {" d d -g +f j j -g +f j j j -g +f j j -g +f d a "} (10,1,1) = {" a d -g -g -g -g +f +f +f +f k -g +f k -g -g -g -g +f +f +f +f a a "} @@ -280,13 +280,13 @@ a a h j -g +f j j u j j -g +f j h a @@ -296,15 +296,15 @@ a a a i -g -g -g +f +f +f k -g +f k -g -g -g +f +f +f i a a @@ -314,13 +314,13 @@ a a a a -g +f l p u j j -g +f a a a @@ -331,13 +331,13 @@ a a a a -g +f m p u j j -g +f a a a @@ -348,13 +348,13 @@ a a a a -g -g +f +f k -g +f k -g -g +f +f a a a @@ -365,13 +365,13 @@ a a a a -g +f j j -g +f j j -g +f a a a @@ -382,13 +382,13 @@ a a a a -g +f j j -g +f j j -g +f a a a @@ -400,11 +400,11 @@ a a a i -g +f k -g +f k -g +f i a a @@ -417,11 +417,11 @@ a a a a -g +f q q q -g +f a a a @@ -434,11 +434,11 @@ a a a a -g +f q v q -g +f a a a @@ -451,11 +451,11 @@ a a a a -g +f r r r -g +f a a a diff --git a/_maps/templates/medium_shuttle2.dmm b/_maps/templates/medium_shuttle2.dmm index 3b46d40382..904c7da6d6 100644 --- a/_maps/templates/medium_shuttle2.dmm +++ b/_maps/templates/medium_shuttle2.dmm @@ -26,7 +26,7 @@ }, /turf/open/space, /area/ruin/powered/shuttle/medium_2) -"h" = ( +"g" = ( /turf/closed/wall/mineral/titanium, /area/ruin/powered/shuttle/medium_2) "i" = ( @@ -159,11 +159,11 @@ c c d d -h -h +g +g l -h -h +g +g d d c @@ -172,22 +172,22 @@ c (6,1,1) = {" d d -h -h -h +g +g +g r m r -h -h -h +g +g +g d d "} (7,1,1) = {" d d -h +g m m m @@ -195,74 +195,74 @@ m m m m -h +g d d "} (8,1,1) = {" d -h -h +g +g n -h +g B w B -h +g n -h -h +g +g d "} (9,1,1) = {" d -h +g k k -h -h +g +g B -h -h +g +g k k -h +g d "} (10,1,1) = {" d -h +g k k -h -h -h -h -h +g +g +g +g +g k k -h +g d "} (11,1,1) = {" a i -h +g n -h -h -h -h -h +g +g +g +g +g n -h +g i a "} (12,1,1) = {" a a -h +g k k n @@ -270,37 +270,37 @@ k n k k -h +g a a "} (13,1,1) = {" a a -h +g k k -h -h -h +g +g +g k k -h +g a a "} (14,1,1) = {" a a -h -h +g +g n -h -h -h +g +g +g n -h -h +g +g a a "} @@ -310,9 +310,9 @@ a l k k -h -h -h +g +g +g k k l @@ -323,13 +323,13 @@ a a a i -h +g n -h -h -h +g +g +g n -h +g i a a @@ -338,13 +338,13 @@ a a a a -h +g k k k k k -h +g a a a @@ -353,13 +353,13 @@ a a a a -h +g n -h -h -h +g +g +g n -h +g a a a @@ -368,13 +368,13 @@ a a a a -h +g o s x k k -h +g a a a @@ -383,13 +383,13 @@ a a a a -h +g o t x k k -h +g a a a @@ -398,13 +398,13 @@ a a a a -h +g n -h -h -h +g +g +g n -h +g a a a @@ -413,13 +413,13 @@ a a a a -h +g k k x k k -h +g a a a @@ -428,13 +428,13 @@ a a a a -h +g k k x k k -h +g a a a @@ -443,13 +443,13 @@ a a a a -h +g n -h -h -h +g +g +g n -h +g a a a @@ -458,13 +458,13 @@ a a a a -h +g p p y p p -h +g a a a @@ -473,13 +473,13 @@ a a a a -h +g p u u u p -h +g a a a @@ -489,11 +489,11 @@ a a a i -h +g v v v -h +g i a a diff --git a/_maps/templates/medium_shuttle4.dmm b/_maps/templates/medium_shuttle4.dmm index 1464f0961d..4595f8704a 100644 --- a/_maps/templates/medium_shuttle4.dmm +++ b/_maps/templates/medium_shuttle4.dmm @@ -54,27 +54,6 @@ }, /turf/open/floor/oldshuttle, /area/ruin/powered/shuttle/medium_4) -"m" = ( -/turf/closed/indestructible/oldshuttle/corner{ - dir = 8 - }, -/area/ruin/powered/shuttle/medium_4) -"n" = ( -/turf/closed/indestructible/oldshuttle/corner, -/area/ruin/powered/shuttle/medium_4) -"o" = ( -/turf/closed/indestructible/oldshuttle/corner{ - dir = 1 - }, -/area/ruin/powered/shuttle/medium_4) -"p" = ( -/turf/closed/indestructible/oldshuttle/corner{ - dir = 4 - }, -/area/ruin/powered/shuttle/medium_4) -"q" = ( -/turf/closed/indestructible/oldshuttle/corner, -/area/ruin/powered/shuttle/medium_4) "r" = ( /obj/machinery/power/generator, /turf/open/floor/oldshuttle, @@ -162,7 +141,7 @@ g g g g -m +b d k u @@ -178,8 +157,8 @@ c g g g -m -o +b +f a a a @@ -199,7 +178,7 @@ c c c c -p +h a "} (7,1,1) = {" @@ -217,7 +196,7 @@ i c s c -p +h "} (8,1,1) = {" b @@ -233,7 +212,7 @@ l l c g -n +e c "} (9,1,1) = {" @@ -247,7 +226,7 @@ l l l l -m +b c g g @@ -281,7 +260,7 @@ l l l l -n +e c g g @@ -301,7 +280,7 @@ l l c g -m +b c "} (13,1,1) = {" @@ -319,7 +298,7 @@ i c s c -o +f "} (14,1,1) = {" a @@ -335,7 +314,7 @@ c c c c -o +f a "} (15,1,1) = {" @@ -348,8 +327,8 @@ c g g g -n -p +e +h a a a @@ -366,7 +345,7 @@ g g g g -n +e d k t @@ -417,7 +396,7 @@ a a a a -q +e c k v diff --git a/_maps/templates/pirate_ship.dmm b/_maps/templates/pirate_ship.dmm index a97be6e9bd..b64db30d78 100644 --- a/_maps/templates/pirate_ship.dmm +++ b/_maps/templates/pirate_ship.dmm @@ -213,7 +213,7 @@ /turf/open/floor/plasteel/dark, /area/shuttle/pirate) "aD" = ( -/obj/structure/sign/bluecross_2, +/obj/structure/sign/departments/medbay/alt, /turf/closed/wall/mineral/plastitanium/nodiagonal, /area/shuttle/pirate) "aE" = ( @@ -542,11 +542,7 @@ /turf/open/floor/plasteel, /area/shuttle/pirate) "bt" = ( -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; - icon_state = "space"; - layer = 4; - name = "EXTERNAL AIRLOCK"; +/obj/structure/sign/warning/vacuum/external{ pixel_x = -32 }, /obj/machinery/light/small{ @@ -641,11 +637,7 @@ /turf/open/floor/plasteel, /area/shuttle/pirate) "bE" = ( -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; - icon_state = "space"; - layer = 4; - name = "EXTERNAL AIRLOCK"; +/obj/structure/sign/warning/vacuum/external{ pixel_x = 32 }, /obj/machinery/light/small{ @@ -672,7 +664,6 @@ name = "Pirate Ship"; port_direction = 8; preferred_direction = 1; - roundstart_move = "pirateship_home"; width = 23 }, /obj/docking_port/stationary{ @@ -1310,7 +1301,7 @@ /turf/open/floor/plasteel/bar, /area/shuttle/pirate) "cS" = ( -/obj/structure/sign/engineering{ +/obj/structure/sign/departments/engineering{ pixel_x = 32 }, /obj/machinery/light/small{ @@ -1379,7 +1370,7 @@ /turf/closed/wall/mineral/plastitanium/nodiagonal, /area/shuttle/pirate) "cY" = ( -/obj/structure/sign/engineering{ +/obj/structure/sign/departments/engineering{ pixel_x = -32 }, /obj/machinery/light/small{ @@ -1462,7 +1453,7 @@ dir = 4 }, /obj/effect/decal/cleanable/dirt, -/obj/structure/sign/nosmoking_2{ +/obj/structure/sign/warning/nosmoking{ pixel_y = 32 }, /turf/open/floor/plasteel, @@ -1707,7 +1698,7 @@ /turf/open/floor/plating/airless, /area/shuttle/pirate) "dJ" = ( -/obj/structure/sign/fire, +/obj/structure/sign/warning/fire, /turf/closed/wall/mineral/plastitanium/nodiagonal, /area/shuttle/pirate) "dK" = ( @@ -1753,11 +1744,7 @@ frequency = 1441; id = "inc_in" }, -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; - icon_state = "space"; - layer = 4; - name = "EXTERNAL AIRLOCK"; +/obj/structure/sign/warning/vacuum/external{ pixel_y = -32 }, /turf/open/floor/engine/vacuum, @@ -1789,7 +1776,7 @@ /turf/open/floor/engine/vacuum, /area/shuttle/pirate) "dT" = ( -/obj/structure/sign/fire, +/obj/structure/sign/warning/fire, /turf/closed/wall/mineral/plastitanium, /area/shuttle/pirate) "dU" = ( diff --git a/_maps/templates/shelter_2.dmm b/_maps/templates/shelter_2.dmm index 69e7369af7..9db2f54656 100644 --- a/_maps/templates/shelter_2.dmm +++ b/_maps/templates/shelter_2.dmm @@ -8,9 +8,6 @@ }, /turf/closed/wall/mineral/titanium/survival/pod, /area/survivalpod) -"c" = ( -/turf/closed/wall/mineral/titanium/survival, -/area/survivalpod) "d" = ( /obj/structure/sign/mining/survival{ dir = 8 diff --git a/_maps/templates/small_shuttle_1.dmm b/_maps/templates/small_shuttle_1.dmm index 901d67d6d6..03789ef847 100644 --- a/_maps/templates/small_shuttle_1.dmm +++ b/_maps/templates/small_shuttle_1.dmm @@ -12,9 +12,6 @@ "d" = ( /turf/closed/wall/mineral/titanium, /area/space) -"e" = ( -/turf/closed/wall/mineral/titanium, -/area/space) "f" = ( /turf/open/floor/mineral/titanium/blue, /area/space) @@ -24,19 +21,10 @@ }, /turf/open/floor/mineral/titanium/blue, /area/space) -"h" = ( -/turf/closed/wall/mineral/titanium, -/area/space) -"i" = ( -/turf/closed/wall/mineral/titanium, -/area/space) "j" = ( /obj/machinery/door/unpowered/shuttle, /turf/open/floor/mineral/titanium/blue, /area/space) -"k" = ( -/turf/closed/wall/mineral/titanium, -/area/space) "l" = ( /obj/structure/chair{ dir = 4 @@ -53,9 +41,6 @@ /obj/structure/shuttle/engine/heater, /turf/open/floor/plating/airless, /area/space) -"o" = ( -/turf/closed/wall/mineral/titanium, -/area/space) "p" = ( /obj/structure/shuttle/engine/propulsion/left, /turf/open/floor/plating/airless, @@ -68,28 +53,25 @@ /obj/structure/shuttle/engine/propulsion/right, /turf/open/floor/plating/airless, /area/space) -"s" = ( -/turf/closed/wall/mineral/titanium, -/area/space) (1,1,1) = {" a a a b -e -e +d +d j j -e -e +d +d b "} (2,1,1) = {" b -e -e -e +d +d +d l l f @@ -102,7 +84,7 @@ p c f f -e +d f f f @@ -128,7 +110,7 @@ q c f f -e +d f f f @@ -139,9 +121,9 @@ q "} (6,1,1) = {" b -e -e -e +d +d +d m m f @@ -155,11 +137,11 @@ a a a b -e -e +d +d j j -e -e +d +d b "} diff --git a/code/__DATASTRUCTURES/linked_lists.dm b/code/__DATASTRUCTURES/linked_lists.dm deleted file mode 100644 index 1d2e8d78a6..0000000000 --- a/code/__DATASTRUCTURES/linked_lists.dm +++ /dev/null @@ -1,191 +0,0 @@ - -//Ok so it's technically a double linked list, bite me. - -/datum/linked_list - var/datum/linked_node/head - var/datum/linked_node/tail - var/node_amt = 0 - - -/datum/linked_node - var/value = null - var/datum/linked_list/linked_list = null - var/datum/linked_node/next_node = null - var/datum/linked_node/previous_node = null - - -/datum/linked_list/proc/IsEmpty() - . = (node_amt <= 0) - - -//Add a linked_node (or value, creating a linked_node) at position -//the added node BECOMES the position-th element, -//eg: add("Test",5), the 5th node is now "Test", the previous 5th moves up to become the 6th -/datum/linked_list/proc/Add(node, position) - var/datum/linked_node/adding - if(istype(node, /datum/linked_node)) - adding = node - else - adding = new() - adding.value = node - - if(!adding.linked_list || (adding.linked_list && (adding.linked_list != src))) - node_amt++ - - adding.linked_list = src - - if(position && position < node_amt) - //Replacing head - if(position == 1) - if(head) - head.previous_node = adding - adding.next_node = head - head = adding - - //Replacing any middle node - else - var/location = 0 - var/datum/linked_node/at - while((location != position) && (location <= node_amt)) - if(at) - if(at.next_node) - at = at.next_node - else - break - else - at = head - location++ - - //Push at up and assume it's place as the position-th element - if(at && at.previous_node) - at.previous_node.next_node = adding - adding.previous_node = at.previous_node - at.previous_node = adding - adding.next_node = at - return - - //Replacing tail - if(tail) - tail.next_node = adding - adding.previous_node = tail - if(!tail.previous_node) - head = tail - tail = adding - - - -//Remove a linked_node or the linked_node of a value -//If you specify a value the FIRST ONE is removed -/datum/linked_list/proc/Remove(node) - var/datum/linked_node/removing - if(istype(node, /datum/linked_node)) - removing = node - else - //optimise removing head and tail, no point looping for them, especially the tail - if(removing == head) - removing = head - else if(removing == tail) - removing = tail - else - var/location = 1 - var/current_value = null - var/datum/linked_node/at = null - while((current_value != node) && (location <= node_amt)) - if(at) - if(at.next_node) - at = at.next_node - else - at = head - location++ - if(at) - current_value = at.value - if(current_value == node) - removing = at - break - - //Adjust pointers of where removing -was- in the chain. - if(removing) - if(removing.previous_node) - if(removing == tail) - tail = removing.previous_node - if(removing.next_node) - if(removing == head) - head = removing.next_node - removing.next_node.previous_node = removing.previous_node - removing.previous_node.next_node = removing.next_node - else - removing.previous_node.next_node = null - else - if(removing.next_node) - if(removing == head) - head = removing.next_node - removing.next_node.previous_node = null - - //if this is still true at this point, there's no more nodes to replace them with - if(removing == head) - head = null - if(removing == tail) - tail = null - - removing.next_node = null - removing.previous_node = null - if(removing.linked_list == src) - node_amt-- - removing.linked_list = null - - return removing - return 0 - - -//Removes and deletes a node or value -/datum/linked_list/proc/RemoveDelete(node) - var/datum/linked_node/dead = Remove(node) - if(dead) - qdel(dead) - return 1 - return 0 - - -//Empty the linked_list, deleting all nodes -/datum/linked_list/proc/Empty() - var/datum/linked_node/n = head - while(n) - var/next = n.next_node - Remove(n) - qdel(n) - n = next - node_amt = 0 - - -//Some debugging tools -/datum/linked_list/proc/CheckNodeLinks() - var/datum/linked_node/n = head - while(n) - . = "|[n.value]|" - if(n.previous_node) - . = "[n.previous_node.value]<-" + . - if(n.next_node) - . += "->[n.next_node.value]" - n = n.next_node - . += "
" - - -/datum/linked_list/proc/DrawNodeLinks() - . = "|<-" - var/datum/linked_node/n = head - while(n) - if(n.previous_node) - . += "<-" - . += "[n.value]" - if(n.next_node) - . += "->" - n = n.next_node - . += "->|" - - -/datum/linked_list/proc/ToList() - . = list() - var/datum/linked_node/n = head - while(n) - . += n - n = n.next_node \ No newline at end of file diff --git a/code/__DATASTRUCTURES/priority_queue.dm b/code/__DATASTRUCTURES/priority_queue.dm deleted file mode 100644 index 8689a19f4e..0000000000 --- a/code/__DATASTRUCTURES/priority_queue.dm +++ /dev/null @@ -1,83 +0,0 @@ - -////////////////////// -//PriorityQueue object -////////////////////// - -//an ordered list, using the cmp proc to weight the list elements -/PriorityQueue - var/list/L //the actual queue - var/cmp //the weight function used to order the queue - -/PriorityQueue/New(compare) - L = new() - cmp = compare - -/PriorityQueue/proc/IsEmpty() - return !L.len - -//return the index the element should be in the priority queue using dichotomic search -/PriorityQueue/proc/FindElementIndex(atom/A) - var/i = 1 - var/j = L.len - var/mid - - while(i < j) - mid = round((i+j)/2) - - if(call(cmp)(L[mid],A) < 0) - i = mid + 1 - else - j = mid - - if(i == 1 || i == L.len) //edge cases - return (call(cmp)(L[i],A) > 0) ? i : i+1 - else - return i - - -//add an element in the list, -//immediatly ordering it to its position using dichotomic search -/PriorityQueue/proc/Enqueue(atom/A) - if(!L.len) - L.Add(A) - return - - L.Insert(FindElementIndex(A),A) - -//removes and returns the first element in the queue -/PriorityQueue/proc/Dequeue() - if(!L.len) - return 0 - . = L[1] - - Remove(.) - -//removes an element -/PriorityQueue/proc/Remove(atom/A) - return L.Remove(A) - -//returns a copy of the elements list -/PriorityQueue/proc/List() - . = L.Copy() - -//return the position of an element or 0 if not found -/PriorityQueue/proc/Seek(atom/A) - . = L.Find(A) - -//return the element at the i_th position -/PriorityQueue/proc/Get(i) - if(i > L.len || i < 1) - return 0 - return L[i] - -//replace the passed element at it's right position using the cmp proc -/PriorityQueue/proc/ReSort(atom/A) - var/i = Seek(A) - if(i == 0) - return - while(i < L.len && call(cmp)(L[i],L[i+1]) > 0) - L.Swap(i,i+1) - i++ - while(i > 1 && call(cmp)(L[i],L[i-1]) <= 0) //last inserted element being first in case of ties (optimization) - L.Swap(i,i-1) - i-- \ No newline at end of file diff --git a/code/__DATASTRUCTURES/stacks.dm b/code/__DATASTRUCTURES/stacks.dm deleted file mode 100644 index b310a3b940..0000000000 --- a/code/__DATASTRUCTURES/stacks.dm +++ /dev/null @@ -1,56 +0,0 @@ -/datum/stack - var/list/stack = list() - var/max_elements = 0 - -/datum/stack/New(list/elements,max) - ..() - if(elements) - stack = elements.Copy() - if(max) - max_elements = max - -/datum/stack/proc/Pop() - if(is_empty()) - return null - . = stack[stack.len] - stack.Cut(stack.len,0) - -/datum/stack/proc/Push(element) - if(max_elements && (stack.len+1 > max_elements)) - return null - stack += element - -/datum/stack/proc/Top() - if(is_empty()) - return null - . = stack[stack.len] - -/datum/stack/proc/is_empty() - . = stack.len ? 0 : 1 - -//Rotate entire stack left with the leftmost looping around to the right -/datum/stack/proc/RotateLeft() - if(is_empty()) - return 0 - . = stack[1] - stack.Cut(1,2) - Push(.) - -//Rotate entire stack to the right with the rightmost looping around to the left -/datum/stack/proc/RotateRight() - if(is_empty()) - return 0 - . = stack[stack.len] - stack.Cut(stack.len,0) - stack.Insert(1,.) - - -/datum/stack/proc/Copy() - var/datum/stack/S=new() - S.stack = stack.Copy() - S.max_elements = max_elements - return S - - -/datum/stack/proc/Clear() - stack.Cut() diff --git a/code/__DEFINES/DNA.dm b/code/__DEFINES/DNA.dm index 253e9f5888..87552e5841 100644 --- a/code/__DEFINES/DNA.dm +++ b/code/__DEFINES/DNA.dm @@ -123,6 +123,7 @@ #define SPECIES_INORGANIC 32 #define SPECIES_UNDEAD 33 #define SPECIES_ROBOTIC 34 +#define NOEYES 35 #define ORGAN_SLOT_BRAIN "brain" #define ORGAN_SLOT_APPENDIX "appendix" diff --git a/code/__DATASTRUCTURES/globals.dm b/code/__DEFINES/_globals.dm similarity index 97% rename from code/__DATASTRUCTURES/globals.dm rename to code/__DEFINES/_globals.dm index c7aa865573..7e7aa3158f 100644 --- a/code/__DATASTRUCTURES/globals.dm +++ b/code/__DEFINES/_globals.dm @@ -1,38 +1,38 @@ -//See controllers/globals.dm -#define GLOBAL_MANAGED(X, InitValue)\ -/datum/controller/global_vars/proc/InitGlobal##X(){\ - ##X = ##InitValue;\ - gvars_datum_init_order += #X;\ -} -#define GLOBAL_UNMANAGED(X) /datum/controller/global_vars/proc/InitGlobal##X() { return; } - -#ifndef TESTING -#define GLOBAL_PROTECT(X)\ -/datum/controller/global_vars/InitGlobal##X(){\ - ..();\ - gvars_datum_protected_varlist[#X] = TRUE;\ -} -#else -#define GLOBAL_PROTECT(X) -#endif - -#define GLOBAL_REAL_VAR(X) var/global/##X -#define GLOBAL_REAL(X, Typepath) var/global##Typepath/##X - -#define GLOBAL_RAW(X) /datum/controller/global_vars/var/global##X - -#define GLOBAL_VAR_INIT(X, InitValue) GLOBAL_RAW(/##X); GLOBAL_MANAGED(X, InitValue) - -#define GLOBAL_VAR_CONST(X, InitValue) GLOBAL_RAW(/const/##X) = InitValue; GLOBAL_UNMANAGED(X) - -#define GLOBAL_LIST_INIT(X, InitValue) GLOBAL_RAW(/list/##X); GLOBAL_MANAGED(X, InitValue) - -#define GLOBAL_LIST_EMPTY(X) GLOBAL_LIST_INIT(X, list()) - -#define GLOBAL_DATUM_INIT(X, Typepath, InitValue) GLOBAL_RAW(Typepath/##X); GLOBAL_MANAGED(X, InitValue) - -#define GLOBAL_VAR(X) GLOBAL_RAW(/##X); GLOBAL_UNMANAGED(X) - -#define GLOBAL_LIST(X) GLOBAL_RAW(/list/##X); GLOBAL_UNMANAGED(X) - -#define GLOBAL_DATUM(X, Typepath) GLOBAL_RAW(Typepath/##X); GLOBAL_UNMANAGED(X) +//See controllers/globals.dm +#define GLOBAL_MANAGED(X, InitValue)\ +/datum/controller/global_vars/proc/InitGlobal##X(){\ + ##X = ##InitValue;\ + gvars_datum_init_order += #X;\ +} +#define GLOBAL_UNMANAGED(X) /datum/controller/global_vars/proc/InitGlobal##X() { return; } + +#ifndef TESTING +#define GLOBAL_PROTECT(X)\ +/datum/controller/global_vars/InitGlobal##X(){\ + ..();\ + gvars_datum_protected_varlist[#X] = TRUE;\ +} +#else +#define GLOBAL_PROTECT(X) +#endif + +#define GLOBAL_REAL_VAR(X) var/global/##X +#define GLOBAL_REAL(X, Typepath) var/global##Typepath/##X + +#define GLOBAL_RAW(X) /datum/controller/global_vars/var/global##X + +#define GLOBAL_VAR_INIT(X, InitValue) GLOBAL_RAW(/##X); GLOBAL_MANAGED(X, InitValue) + +#define GLOBAL_VAR_CONST(X, InitValue) GLOBAL_RAW(/const/##X) = InitValue; GLOBAL_UNMANAGED(X) + +#define GLOBAL_LIST_INIT(X, InitValue) GLOBAL_RAW(/list/##X); GLOBAL_MANAGED(X, InitValue) + +#define GLOBAL_LIST_EMPTY(X) GLOBAL_LIST_INIT(X, list()) + +#define GLOBAL_DATUM_INIT(X, Typepath, InitValue) GLOBAL_RAW(Typepath/##X); GLOBAL_MANAGED(X, InitValue) + +#define GLOBAL_VAR(X) GLOBAL_RAW(/##X); GLOBAL_UNMANAGED(X) + +#define GLOBAL_LIST(X) GLOBAL_RAW(/list/##X); GLOBAL_UNMANAGED(X) + +#define GLOBAL_DATUM(X, Typepath) GLOBAL_RAW(Typepath/##X); GLOBAL_UNMANAGED(X) diff --git a/code/__DEFINES/admin.dm b/code/__DEFINES/admin.dm index 2c60abb325..62d4b94528 100644 --- a/code/__DEFINES/admin.dm +++ b/code/__DEFINES/admin.dm @@ -76,3 +76,8 @@ #define AHELP_ACTIVE 1 #define AHELP_CLOSED 2 #define AHELP_RESOLVED 3 + +#define ROUNDSTART_LOGOUT_REPORT_TIME 6000 //Amount of time (in deciseconds) after the rounds starts, that the player disconnect report is issued. + +#define SPAM_TRIGGER_WARNING 5 //Number of identical messages required before the spam-prevention will warn you to stfu +#define SPAM_TRIGGER_AUTOMUTE 10 //Number of identical messages required before the spam-prevention will automute you diff --git a/code/__DEFINES/antagonists.dm b/code/__DEFINES/antagonists.dm new file mode 100644 index 0000000000..c82404fd00 --- /dev/null +++ b/code/__DEFINES/antagonists.dm @@ -0,0 +1,14 @@ +#define NUKE_RESULT_FLUKE 0 +#define NUKE_RESULT_NUKE_WIN 1 +#define NUKE_RESULT_CREW_WIN 2 +#define NUKE_RESULT_CREW_WIN_SYNDIES_DEAD 3 +#define NUKE_RESULT_DISK_LOST 4 +#define NUKE_RESULT_DISK_STOLEN 5 +#define NUKE_RESULT_NOSURVIVORS 6 +#define NUKE_RESULT_WRONG_STATION 7 +#define NUKE_RESULT_WRONG_STATION_DEAD 8 + +#define APPRENTICE_DESTRUCTION "destruction" +#define APPRENTICE_BLUESPACE "bluespace" +#define APPRENTICE_ROBELESS "robeless" +#define APPRENTICE_HEALING "healing" \ No newline at end of file diff --git a/code/__DEFINES/combat.dm b/code/__DEFINES/combat.dm index 582074fcba..8e791cfffd 100644 --- a/code/__DEFINES/combat.dm +++ b/code/__DEFINES/combat.dm @@ -34,13 +34,7 @@ #define CANKNOCKDOWN 2 #define CANUNCONSCIOUS 4 #define CANPUSH 8 -#define IGNORESLOWDOWN 16 -#define GOTTAGOFAST 32 -#define GOTTAGOREALLYFAST 64 -#define GODMODE 4096 -#define FAKEDEATH 8192 //Replaces stuff like changeling.changeling_fakedeath -#define DISFIGURED 16384 //I'll probably move this elsewhere if I ever get wround to writing a bitflag mob-damage system -#define XENO_HOST 32768 //Tracks whether we're gonna be a baby alien's mummy. +#define GODMODE 16 //Health Defines #define HEALTH_THRESHOLD_CRIT 0 diff --git a/code/__DEFINES/is_helpers.dm b/code/__DEFINES/is_helpers.dm index addeca8739..8eff08691c 100644 --- a/code/__DEFINES/is_helpers.dm +++ b/code/__DEFINES/is_helpers.dm @@ -61,7 +61,9 @@ #define isplasmaman(A) (is_species(A, /datum/species/plasmaman)) #define ispodperson(A) (is_species(A, /datum/species/podperson)) #define isflyperson(A) (is_species(A, /datum/species/fly)) +#define isjellyperson(A) (is_species(A, /datum/species/jelly)) #define isslimeperson(A) (is_species(A, /datum/species/jelly/slime)) +#define isluminescent(A) (is_species(A, /datum/species/jelly/luminescent)) #define isshadowperson(A) (is_species(A, /datum/species/shadow)) #define iszombie(A) (is_species(A, /datum/species/zombie)) #define ishumanbasic(A) (is_species(A, /datum/species/human)) diff --git a/code/__DEFINES/maps.dm b/code/__DEFINES/maps.dm index 5306110b3b..6db07a1c7e 100644 --- a/code/__DEFINES/maps.dm +++ b/code/__DEFINES/maps.dm @@ -70,3 +70,9 @@ Last space-z level = empty DECLARE_LEVEL("Lavaland", UNAFFECTED, list(ZTRAIT_MINING = TRUE, ZTRAIT_LAVA_RUINS = TRUE, ZTRAIT_BOMBCAP_MULTIPLIER = 3)),\ DECLARE_LEVEL("Reebe", UNAFFECTED, list(ZTRAIT_REEBE = TRUE, ZTRAIT_BOMBCAP_MULTIPLIER = 0.5)),\ ) + +//Camera lock flags +#define CAMERA_LOCK_STATION 1 +#define CAMERA_LOCK_MINING 2 +#define CAMERA_LOCK_CENTCOM 4 +#define CAMERA_LOCK_REEBE 8 diff --git a/code/__DEFINES/misc.dm b/code/__DEFINES/misc.dm index ddf5286305..1500bd1c48 100644 --- a/code/__DEFINES/misc.dm +++ b/code/__DEFINES/misc.dm @@ -50,18 +50,19 @@ Will print: "/mob/living/carbon/human/death" (you can optionally embed it in a s //Human Overlays Indexes///////// //LOTS OF CIT CHANGES HERE. BE CAREFUL WHEN UPSTREAM ADDS MORE LAYERS -#define MUTATIONS_LAYER 30 //mutations. Tk headglows, cold resistance glow, etc -#define GENITALS_BEHIND_LAYER 29 //Some genitalia needs to be behind everything, such as with taurs (Taurs use body_behind_layer -#define BODY_BEHIND_LAYER 28 //certain mutantrace features (tail when looking south) that must appear behind the body parts -#define BODYPARTS_LAYER 27 //Initially "AUGMENTS", this was repurposed to be a catch-all bodyparts flag -#define BODY_ADJ_LAYER 26 //certain mutantrace features (snout, body markings) that must appear above the body parts -#define GENITALS_ADJ_LAYER 25 -#define BODY_LAYER 24 //underwear, undershirts, socks, eyes, lips(makeup) -#define FRONT_MUTATIONS_LAYER 23 //mutations that should appear above body, body_adj and bodyparts layer (e.g. laser eyes) -#define DAMAGE_LAYER 22 //damage indicators (cuts and burns) -#define UNIFORM_LAYER 21 -#define ID_LAYER 20 -#define SHOES_LAYER 19 +#define MUTATIONS_LAYER 31 //mutations. Tk headglows, cold resistance glow, etc +#define GENITALS_BEHIND_LAYER 30 //Some genitalia needs to be behind everything, such as with taurs (Taurs use body_behind_layer +#define BODY_BEHIND_LAYER 29 //certain mutantrace features (tail when looking south) that must appear behind the body parts +#define BODYPARTS_LAYER 28 //Initially "AUGMENTS", this was repurposed to be a catch-all bodyparts flag +#define BODY_ADJ_LAYER 27 //certain mutantrace features (snout, body markings) that must appear above the body parts +#define GENITALS_ADJ_LAYER 26 +#define BODY_LAYER 25 //underwear, undershirts, socks, eyes, lips(makeup) +#define FRONT_MUTATIONS_LAYER 24 //mutations that should appear above body, body_adj and bodyparts layer (e.g. laser eyes) +#define DAMAGE_LAYER 23 //damage indicators (cuts and burns) +#define UNIFORM_LAYER 22 +#define ID_LAYER 21 +#define SHOES_LAYER 20 +#define HANDS_PART_LAYER 19 #define GLOVES_LAYER 18 #define EARS_LAYER 17 #define SUIT_LAYER 16 @@ -80,7 +81,7 @@ Will print: "/mob/living/carbon/human/death" (you can optionally embed it in a s #define HANDS_LAYER 3 #define BODY_FRONT_LAYER 2 #define FIRE_LAYER 1 //If you're on fire -#define TOTAL_LAYERS 30 //KEEP THIS UP-TO-DATE OR SHIT WILL BREAK ;_; +#define TOTAL_LAYERS 31 //KEEP THIS UP-TO-DATE OR SHIT WILL BREAK ;_; //Human Overlay Index Shortcuts for alternate_worn_layer, layers //Because I *KNOW* somebody will think layer+1 means "above" @@ -93,8 +94,9 @@ Will print: "/mob/living/carbon/human/death" (you can optionally embed it in a s #define UNDER_DAMAGE_LAYER DAMAGE_LAYER+1 #define UNDER_UNIFORM_LAYER UNIFORM_LAYER+1 #define UNDER_ID_LAYER ID_LAYER+1 -#define UNDER_SHOES_LAYER SHOES_LAYER+1 +#define UNDER_HANDS_PART_LAYER HANDS_PART_LAYER+1 #define UNDER_GLOVES_LAYER GLOVES_LAYER+1 +#define UNDER_SHOES_LAYER SHOES_LAYER+1 #define UNDER_EARS_LAYER EARS_LAYER+1 #define UNDER_SUIT_LAYER SUIT_LAYER+1 #define UNDER_GLASSES_LAYER GLASSES_LAYER+1 @@ -119,8 +121,9 @@ Will print: "/mob/living/carbon/human/death" (you can optionally embed it in a s #define ABOVE_DAMAGE_LAYER DAMAGE_LAYER-1 #define ABOVE_UNIFORM_LAYER UNIFORM_LAYER-1 #define ABOVE_ID_LAYER ID_LAYER-1 -#define ABOVE_SHOES_LAYER SHOES_LAYER-1 +#define ABOVE_HANDS_PART_LAYER HANDS_PART_LAYER-1 #define ABOVE_GLOVES_LAYER GLOVES_LAYER-1 +#define ABOVE_SHOES_LAYER SHOES_LAYER-1 #define ABOVE_EARS_LAYER EARS_LAYER-1 #define ABOVE_SUIT_LAYER SUIT_LAYER-1 #define ABOVE_GLASSES_LAYER GLASSES_LAYER-1 @@ -488,6 +491,12 @@ GLOBAL_LIST_INIT(ghost_others_options, list(GHOST_OTHERS_SIMPLE, GHOST_OTHERS_DE #define HOSTILE_SPAWN 1 #define FRIENDLY_SPAWN 2 +//slime core activation type +#define SLIME_ACTIVATE_MINOR 1 +#define SLIME_ACTIVATE_MAJOR 2 + +#define LUMINESCENT_DEFAULT_GLOW 2 + #define RIDING_OFFSET_ALL "ALL" //text files @@ -499,3 +508,10 @@ GLOBAL_LIST_INIT(ghost_others_options, list(GHOST_OTHERS_SIMPLE, GHOST_OTHERS_DE #define SUMMON_GUNS "guns" #define SUMMON_MAGIC "magic" + +//Run the world with this parameter to enable a single run though of the game setup and tear down process with unit tests in between +#define TEST_RUN_PARAMETER "test-run" +//Force the log directory to be something specific in the data/logs folder +#define OVERRIDE_LOG_DIRECTORY_PARAMETER "log-directory" +//Prevent the master controller from starting automatically, overrides TEST_RUN_PARAMETER +#define NO_INIT_PARAMETER "no-init" diff --git a/code/__DEFINES/mobs.dm b/code/__DEFINES/mobs.dm index 4bfb70a257..9142996693 100644 --- a/code/__DEFINES/mobs.dm +++ b/code/__DEFINES/mobs.dm @@ -188,4 +188,21 @@ #define OFFSET_BELT "belt" #define OFFSET_BACK "back" #define OFFSET_SUIT "suit" -#define OFFSET_NECK "neck" \ No newline at end of file +#define OFFSET_NECK "neck" + +//MINOR TWEAKS/MISC +#define AGE_MIN 17 //youngest a character can be +#define AGE_MAX 85 //oldest a character can be +#define WIZARD_AGE_MIN 30 //youngest a wizard can be +#define APPRENTICE_AGE_MIN 29 //youngest an apprentice can be +#define SHOES_SLOWDOWN 0 //How much shoes slow you down by default. Negative values speed you up +#define POCKET_STRIP_DELAY 40 //time taken (in deciseconds) to search somebody's pockets +#define DOOR_CRUSH_DAMAGE 15 //the amount of damage that airlocks deal when they crush you + +#define HUNGER_FACTOR 0.1 //factor at which mob nutrition decreases +#define REAGENTS_METABOLISM 0.4 //How many units of reagent are consumed per tick, by default. +#define REAGENTS_EFFECT_MULTIPLIER (REAGENTS_METABOLISM / 0.4) // By defining the effect multiplier this way, it'll exactly adjust all effects according to how they originally were with the 0.4 metabolism + +// AI Toggles +#define AI_CAMERA_LUMINOSITY 5 +#define AI_VOX // Comment out if you don't want VOX to be enabled and have players download the voice sounds. diff --git a/code/__DEFINES/obj_flags.dm b/code/__DEFINES/obj_flags.dm new file mode 100644 index 0000000000..ba326b7c91 --- /dev/null +++ b/code/__DEFINES/obj_flags.dm @@ -0,0 +1,19 @@ +// Flags for the obj_flags var on /obj + + +#define EMAGGED 1 +#define IN_USE 2 // If we have a user using us, this will be set on. We will check if the user has stopped using us, and thus stop updating and LAGGING EVERYTHING! +#define CAN_BE_HIT 4 //can this be bludgeoned by items? +#define BEING_SHOCKED 8 // Whether this thing is currently (already) being shocked by a tesla +#define DANGEROUS_POSSESSION 16 //Admin possession yes/no +#define ON_BLUEPRINTS 32 //Are we visible on the station blueprints at roundstart? +#define UNIQUE_RENAME 64 // can you customize the description/name of the thing? + +// If you add new ones, be sure to add them to /obj/Initialize as well for complete mapping support + +// Flags for the item_flags var on /obj/item + +#define BEING_REMOVED 1 +#define IN_INVENTORY 2 //is this item equipped into an inventory slot or hand of a mob? used for tooltips +#define FORCE_STRING_OVERRIDE 4 // used for tooltips +#define NEEDS_PERMIT 8 //Used by security bots to determine if this item is safe for public use. diff --git a/code/__DEFINES/say.dm b/code/__DEFINES/say.dm index 8f38acb203..c5708034fe 100644 --- a/code/__DEFINES/say.dm +++ b/code/__DEFINES/say.dm @@ -56,4 +56,10 @@ #define LINGHIVE_NONE 0 #define LINGHIVE_OUTSIDER 1 #define LINGHIVE_LING 2 -#define LINGHIVE_LINK 3 \ No newline at end of file +#define LINGHIVE_LINK 3 + +//Don't set this very much higher then 1024 unless you like inviting people in to dos your server with message spam +#define MAX_MESSAGE_LEN 1024 +#define MAX_NAME_LEN 42 +#define MAX_BROADCAST_LEN 512 +#define MAX_CHARTER_LEN 80 diff --git a/code/__DEFINES/stat.dm b/code/__DEFINES/stat.dm index 96dceb6db2..96c72bcab2 100644 --- a/code/__DEFINES/stat.dm +++ b/code/__DEFINES/stat.dm @@ -8,35 +8,6 @@ #define UNCONSCIOUS 2 #define DEAD 3 -//mob disabilities stat - -#define DISABILITY_BLIND "blind" -#define DISABILITY_MUTE "mute" -#define DISABILITY_DEAF "deaf" -#define DISABILITY_NEARSIGHT "nearsighted" -#define DISABILITY_FAT "fat" -#define DISABILITY_HUSK "husk" -#define DISABILITY_NOCLONE "noclone" -#define DISABILITY_CLUMSY "clumsy" -#define DISABILITY_DUMB "dumb" -#define DISABILITY_MONKEYLIKE "monkeylike" //sets IsAdvancedToolUser to FALSE -#define DISABILITY_PACIFISM "pacifism" - -// common disability sources -#define EYE_DAMAGE "eye_damage" -#define GENETIC_MUTATION "genetic" -#define OBESITY "obesity" -#define MAGIC_DISABILITY "magic" -#define STASIS_MUTE "stasis" -#define GENETICS_SPELL "genetics_spell" -#define TRAUMA_DISABILITY "trauma" -#define CHEMICAL_DISABILITY "chemical" - -// unique disability sources, still defines -#define STATUE_MUTE "statue" -#define CHANGELING_DRAIN "drain" -#define ABYSSAL_GAZE_BLIND "abyssal_gaze" - // bitflags for machine stat variable #define BROKEN 1 #define NOPOWER 2 diff --git a/code/__DEFINES/subsystems.dm b/code/__DEFINES/subsystems.dm index 6e223446fd..27cd86edd4 100644 --- a/code/__DEFINES/subsystems.dm +++ b/code/__DEFINES/subsystems.dm @@ -1,3 +1,7 @@ +//Update this whenever the db schema changes +//make sure you add an update to the schema_version stable in the db changelog +#define DB_MAJOR_VERSION 4 +#define DB_MINOR_VERSION 0 //Timing subsystem //Don't run if there is an identical unique timer active diff --git a/code/__DEFINES/time.dm b/code/__DEFINES/time.dm index 987d52e0cd..8bc4d039f6 100644 --- a/code/__DEFINES/time.dm +++ b/code/__DEFINES/time.dm @@ -22,6 +22,6 @@ When using time2text(), please use "DDD" to find the weekday. Refrain from using #define TICKS *world.tick_lag -#define DS2TICKS(DS) (DS/world.tick_lag) +#define DS2TICKS(DS) ((DS)/world.tick_lag) -#define TICKS2DS(T) (T TICKS) \ No newline at end of file +#define TICKS2DS(T) ((T) TICKS) \ No newline at end of file diff --git a/code/__DEFINES/tools.dm b/code/__DEFINES/tools.dm index 8b696032fa..e4eaf09347 100644 --- a/code/__DEFINES/tools.dm +++ b/code/__DEFINES/tools.dm @@ -1,6 +1,7 @@ -#define TOOL_NONE 0 -#define TOOL_CROWBAR 1 -#define TOOL_MULTITOOL 2 -#define TOOL_SCREWDRIVER 3 -#define TOOL_WIRECUTTER 4 -#define TOOL_WRENCH 5 \ No newline at end of file +// Tool types +#define TOOL_CROWBAR "crowbar" +#define TOOL_MULTITOOL "multitool" +#define TOOL_SCREWDRIVER "screwdriver" +#define TOOL_WIRECUTTER "wirecutter" +#define TOOL_WRENCH "wrench" +#define TOOL_WELDER "welder" diff --git a/code/__DEFINES/traits.dm b/code/__DEFINES/traits.dm new file mode 100644 index 0000000000..3f9416ab96 --- /dev/null +++ b/code/__DEFINES/traits.dm @@ -0,0 +1,37 @@ +//mob traits +#define TRAIT_BLIND "blind" +#define TRAIT_MUTE "mute" +#define TRAIT_DEAF "deaf" +#define TRAIT_NEARSIGHT "nearsighted" +#define TRAIT_FAT "fat" +#define TRAIT_HUSK "husk" +#define TRAIT_NOCLONE "noclone" +#define TRAIT_CLUMSY "clumsy" +#define TRAIT_DUMB "dumb" +#define TRAIT_MONKEYLIKE "monkeylike" //sets IsAdvancedToolUser to FALSE +#define TRAIT_PACIFISM "pacifism" +#define TRAIT_IGNORESLOWDOWN "ignoreslow" +#define TRAIT_GOTTAGOFAST "fast" +#define TRAIT_GOTTAGOREALLYFAST "2fast" +#define TRAIT_FAKEDEATH "fakedeath" +#define TRAIT_DISFIGURED "disfigured" +#define TRAIT_XENO_HOST "xeno_host" //Tracks whether we're gonna be a baby alien's mummy. +#define TRAIT_STUNIMMUNE "stun_immunity" +#define TRAIT_PUSHIMMUNE "push_immunity" + +// common trait sources +#define TRAIT_GENERIC "generic" +#define EYE_DAMAGE "eye_damage" +#define GENETIC_MUTATION "genetic" +#define OBESITY "obesity" +#define MAGIC_TRAIT "magic" +#define STASIS_MUTE "stasis" +#define GENETICS_SPELL "genetics_spell" +#define TRAUMA_TRAIT "trauma" + +// unique trait sources, still defines +#define STATUE_MUTE "statue" +#define CHANGELING_DRAIN "drain" +#define ABYSSAL_GAZE_BLIND "abyssal_gaze" +#define HIGHLANDER "highlander" +#define TRAIT_HULK "hulk" \ No newline at end of file diff --git a/code/__DEFINES/vv.dm b/code/__DEFINES/vv.dm index 807e5187b0..0617c5d345 100644 --- a/code/__DEFINES/vv.dm +++ b/code/__DEFINES/vv.dm @@ -18,4 +18,4 @@ #define VV_NULL "NULL" #define VV_RESTORE_DEFAULT "Restore to Default" #define VV_MARKED_DATUM "Marked Datum" - +#define VV_BITFIELD "Bitfield" diff --git a/code/__HELPERS/_logging.dm b/code/__HELPERS/_logging.dm index 8b7cdc0c2e..18dd85fa5b 100644 --- a/code/__HELPERS/_logging.dm +++ b/code/__HELPERS/_logging.dm @@ -24,6 +24,12 @@ #define testing(msg) #endif +#ifdef UNIT_TESTS +/proc/log_test(text) + WRITE_FILE(GLOB.test_log, "\[[time_stamp()]]: [text]") + SEND_TEXT(world.log, text) +#endif + /proc/log_admin(text) GLOB.admin_log.Add(text) if (CONFIG_GET(flag/log_admin)) diff --git a/code/__HELPERS/game.dm b/code/__HELPERS/game.dm index 2d200438ef..462e5459a6 100644 --- a/code/__HELPERS/game.dm +++ b/code/__HELPERS/game.dm @@ -241,9 +241,6 @@ processing_list += A.contents /proc/get_mobs_in_radio_ranges(list/obj/item/device/radio/radios) - - set background = BACKGROUND_ENABLED - . = list() // Returns a list of mobs who can hear any of the radios given in @radios for(var/obj/item/device/radio/R in radios) diff --git a/code/__HELPERS/global_lists.dm b/code/__HELPERS/global_lists.dm index 0f7f4397db..fd83cc0658 100644 --- a/code/__HELPERS/global_lists.dm +++ b/code/__HELPERS/global_lists.dm @@ -29,7 +29,9 @@ init_sprite_accessory_subtypes(/datum/sprite_accessory/spines_animated, GLOB.animated_spines_list) init_sprite_accessory_subtypes(/datum/sprite_accessory/legs, GLOB.legs_list) init_sprite_accessory_subtypes(/datum/sprite_accessory/wings, GLOB.r_wings_list,roundstart = TRUE) - + //moffs + init_sprite_accessory_subtypes(/datum/sprite_accessory/moth_wings, GLOB.moth_wings_list) + //CIT CHANGES START HERE, ADDS SNOWFLAKE BODYPARTS AND MORE //mammal bodyparts (fucking furries) init_sprite_accessory_subtypes(/datum/sprite_accessory/mam_body_markings, GLOB.mam_body_markings_list) diff --git a/code/__DATASTRUCTURES/heap.dm b/code/__HELPERS/heap.dm similarity index 100% rename from code/__DATASTRUCTURES/heap.dm rename to code/__HELPERS/heap.dm diff --git a/code/__HELPERS/mobs.dm b/code/__HELPERS/mobs.dm index 9d01999847..b2bb939b11 100644 --- a/code/__HELPERS/mobs.dm +++ b/code/__HELPERS/mobs.dm @@ -32,7 +32,7 @@ else return pick(GLOB.underwear_list)*/ -/proc/random_undershirt(gender)//Cit change - makes random underwear always return nude +/proc/random_undershirt(gender)//Cit change - makes random undershirts always return nude if(!GLOB.undershirt_list.len) init_sprite_accessory_subtypes(/datum/sprite_accessory/undershirt, GLOB.undershirt_list, GLOB.undershirt_m, GLOB.undershirt_f) return "Nude" @@ -44,7 +44,7 @@ else return pick(GLOB.undershirt_list)*/ -/proc/random_socks()//Cit change - makes random underwear always return nude +/proc/random_socks()//Cit change - makes random socks always return nude if(!GLOB.socks_list.len) init_sprite_accessory_subtypes(/datum/sprite_accessory/socks, GLOB.socks_list) return "Nude" @@ -71,6 +71,8 @@ init_sprite_accessory_subtypes(/datum/sprite_accessory/body_markings, GLOB.body_markings_list) if(!GLOB.wings_list.len) init_sprite_accessory_subtypes(/datum/sprite_accessory/wings, GLOB.wings_list) + if(!GLOB.moth_wings_list.len) + init_sprite_accessory_subtypes(/datum/sprite_accessory/moth_wings, GLOB.moth_wings_list) //CIT CHANGES - genitals and such if(!GLOB.cock_shapes_list.len) @@ -109,6 +111,7 @@ "spines" = pick(GLOB.spines_list), "body_markings" = pick(GLOB.body_markings_list), "legs" = "Normal Legs", + "moth_wings" = pick(GLOB.moth_wings_list), "taur" = "None", "mam_body_markings" = "None", "mam_ears" = "None", @@ -163,7 +166,6 @@ "womb_efficiency" = CUM_EFFICIENCY, "womb_fluid" = "femcum", "flavor_text" = "")) - /proc/random_hair_style(gender) switch(gender) if(MALE) @@ -183,27 +185,34 @@ return pick(GLOB.facial_hair_styles_list) /proc/random_unique_name(gender, attempts_to_find_unique_name=10) - for(var/i=1, i<=attempts_to_find_unique_name, i++) + for(var/i in 1 to attempts_to_find_unique_name) if(gender==FEMALE) . = capitalize(pick(GLOB.first_names_female)) + " " + capitalize(pick(GLOB.last_names)) else . = capitalize(pick(GLOB.first_names_male)) + " " + capitalize(pick(GLOB.last_names)) - if(i != attempts_to_find_unique_name && !findname(.)) + if(!findname(.)) break /proc/random_unique_lizard_name(gender, attempts_to_find_unique_name=10) - for(var/i=1, i<=attempts_to_find_unique_name, i++) + for(var/i in 1 to attempts_to_find_unique_name) . = capitalize(lizard_name(gender)) - if(i != attempts_to_find_unique_name && !findname(.)) + if(!findname(.)) break /proc/random_unique_plasmaman_name(attempts_to_find_unique_name=10) - for(var/i=1, i<=attempts_to_find_unique_name, i++) + for(var/i in 1 to attempts_to_find_unique_name) . = capitalize(plasmaman_name()) - if(i != attempts_to_find_unique_name && !findname(.)) + if(!findname(.)) + break + +/proc/random_unique_moth_name(attempts_to_find_unique_name=10) + for(var/i in 1 to attempts_to_find_unique_name) + . = capitalize(moth_name()) + + if(!findname(.)) break /proc/random_skin_tone() @@ -580,3 +589,24 @@ Proc for attack log creation, because really why not warning("Invalid speech logging type detected. [logtype]. Defaulting to say") log_say(logmessage) +//Used in chemical_mob_spawn. Generates a random mob based on a given gold_core_spawnable value. +/proc/create_random_mob(spawn_location, mob_class = HOSTILE_SPAWN) + var/static/list/mob_spawn_meancritters = list() // list of possible hostile mobs + var/static/list/mob_spawn_nicecritters = list() // and possible friendly mobs + + if(mob_spawn_meancritters.len <= 0 || mob_spawn_nicecritters.len <= 0) + for(var/T in typesof(/mob/living/simple_animal)) + var/mob/living/simple_animal/SA = T + switch(initial(SA.gold_core_spawnable)) + if(HOSTILE_SPAWN) + mob_spawn_meancritters += T + if(FRIENDLY_SPAWN) + mob_spawn_nicecritters += T + + var/chosen + if(mob_class == FRIENDLY_SPAWN) + chosen = pick(mob_spawn_nicecritters) + else + chosen = pick(mob_spawn_meancritters) + var/mob/living/simple_animal/C = new chosen(spawn_location) + return C diff --git a/code/__HELPERS/names.dm b/code/__HELPERS/names.dm index e019af213f..8fbb5d805b 100644 --- a/code/__HELPERS/names.dm +++ b/code/__HELPERS/names.dm @@ -9,6 +9,9 @@ /proc/plasmaman_name() return "[pick(GLOB.plasmaman_names)] \Roman[rand(1,99)]" +/proc/moth_name() + return "[pick(GLOB.moth_names)]" + /proc/church_name() var/static/church_name if (church_name) diff --git a/code/__HELPERS/roundend.dm b/code/__HELPERS/roundend.dm index bd18ce239f..ee575f686f 100644 --- a/code/__HELPERS/roundend.dm +++ b/code/__HELPERS/roundend.dm @@ -391,6 +391,7 @@ if(X.get_team() == T) all_antagonists -= X result += " "//newline between teams + CHECK_TICK var/currrent_category var/datum/antagonist/previous_category @@ -410,6 +411,7 @@ previous_category = A result += A.roundend_report() result += "

" + CHECK_TICK if(all_antagonists.len) var/datum/antagonist/last = all_antagonists[all_antagonists.len] diff --git a/code/__HELPERS/sorts/InsertSort.dm b/code/__HELPERS/sorts/InsertSort.dm index 23e0dc8876..962709527e 100644 --- a/code/__HELPERS/sorts/InsertSort.dm +++ b/code/__HELPERS/sorts/InsertSort.dm @@ -8,9 +8,12 @@ if(toIndex <= 0) toIndex += L.len + 1 - GLOB.sortInstance.L = L - GLOB.sortInstance.cmp = cmp - GLOB.sortInstance.associative = associative + var/datum/sortInstance/SI = GLOB.sortInstance + if(!SI) + SI = new + SI.L = L + SI.cmp = cmp + SI.associative = associative - GLOB.sortInstance.binarySort(fromIndex, toIndex, fromIndex) + SI.binarySort(fromIndex, toIndex, fromIndex) return L \ No newline at end of file diff --git a/code/__HELPERS/sorts/MergeSort.dm b/code/__HELPERS/sorts/MergeSort.dm index cc47123b3c..39d3799725 100644 --- a/code/__HELPERS/sorts/MergeSort.dm +++ b/code/__HELPERS/sorts/MergeSort.dm @@ -8,9 +8,12 @@ if(toIndex <= 0) toIndex += L.len + 1 - GLOB.sortInstance.L = L - GLOB.sortInstance.cmp = cmp - GLOB.sortInstance.associative = associative - GLOB.sortInstance.mergeSort(fromIndex, toIndex) + var/datum/sortInstance/SI = GLOB.sortInstance + if(!SI) + SI = new + SI.L = L + SI.cmp = cmp + SI.associative = associative + SI.mergeSort(fromIndex, toIndex) return L \ No newline at end of file diff --git a/code/__HELPERS/sorts/TimSort.dm b/code/__HELPERS/sorts/TimSort.dm index 8cfb792672..d709044dc0 100644 --- a/code/__HELPERS/sorts/TimSort.dm +++ b/code/__HELPERS/sorts/TimSort.dm @@ -8,10 +8,13 @@ if(toIndex <= 0) toIndex += L.len + 1 - GLOB.sortInstance.L = L - GLOB.sortInstance.cmp = cmp - GLOB.sortInstance.associative = associative + var/datum/sortInstance/SI = GLOB.sortInstance + if(!SI) + SI = new - GLOB.sortInstance.timSort(fromIndex, toIndex) + SI.L = L + SI.cmp = cmp + SI.associative = associative + SI.timSort(fromIndex, toIndex) return L \ No newline at end of file diff --git a/code/__HELPERS/type2type.dm b/code/__HELPERS/type2type.dm index 372dc64cab..59f9a82309 100644 --- a/code/__HELPERS/type2type.dm +++ b/code/__HELPERS/type2type.dm @@ -65,6 +65,7 @@ return . //Splits the text of a file at seperator and returns them in a list. +//returns an empty list if the file doesn't exist /world/proc/file2list(filename, seperator="\n", trim = TRUE) if (trim) return splittext(trim(file2text(filename)),seperator) @@ -589,4 +590,4 @@ for(var/i = 1 to length(str)/2) c= hex2num(copytext(str,i*2-1,i*2+1)) r+= ascii2text(c) - return r \ No newline at end of file + return r diff --git a/code/__HELPERS/unsorted.dm b/code/__HELPERS/unsorted.dm index aaabbef74b..598fb8b7a2 100644 --- a/code/__HELPERS/unsorted.dm +++ b/code/__HELPERS/unsorted.dm @@ -1511,7 +1511,7 @@ GLOBAL_DATUM_INIT(dview_mob, /mob/dview, new) usr = M . = CB.Invoke() usr = temp - + //Returns a list of all servants of Ratvar and observers. /proc/servants_and_ghosts() . = list() diff --git a/code/_globalvars/lists/flavor_misc.dm b/code/_globalvars/lists/flavor_misc.dm index 7acb5bf729..ebf86ed666 100644 --- a/code/_globalvars/lists/flavor_misc.dm +++ b/code/_globalvars/lists/flavor_misc.dm @@ -34,6 +34,7 @@ GLOBAL_LIST_EMPTY(ears_list) GLOBAL_LIST_EMPTY(wings_list) GLOBAL_LIST_EMPTY(wings_open_list) GLOBAL_LIST_EMPTY(r_wings_list) +GLOBAL_LIST_EMPTY(moth_wings_list) GLOBAL_LIST_INIT(ghost_forms_with_directions_list, list("ghost")) //stores the ghost forms that support directional sprites GLOBAL_LIST_INIT(ghost_forms_with_accessories_list, list("ghost")) //stores the ghost forms that support hair and other such things diff --git a/code/_globalvars/lists/names.dm b/code/_globalvars/lists/names.dm index ad5e18d3f7..eaaa2c1755 100644 --- a/code/_globalvars/lists/names.dm +++ b/code/_globalvars/lists/names.dm @@ -13,6 +13,7 @@ GLOBAL_LIST_INIT(clown_names, world.file2list("strings/names/clown.txt")) GLOBAL_LIST_INIT(mime_names, world.file2list("strings/names/mime.txt")) GLOBAL_LIST_INIT(carp_names, world.file2list("strings/names/carp.txt")) GLOBAL_LIST_INIT(golem_names, world.file2list("strings/names/golem.txt")) +GLOBAL_LIST_INIT(moth_names, world.file2list("strings/names/moth.txt")) GLOBAL_LIST_INIT(plasmaman_names, world.file2list("strings/names/plasmaman.txt")) GLOBAL_LIST_INIT(posibrain_names, world.file2list("strings/names/posibrain.txt")) GLOBAL_LIST_INIT(nightmare_names, world.file2list("strings/names/nightmare.txt")) diff --git a/code/_globalvars/misc.dm b/code/_globalvars/misc.dm index 8b8b817586..807ec5c5fe 100644 --- a/code/_globalvars/misc.dm +++ b/code/_globalvars/misc.dm @@ -17,4 +17,10 @@ GLOBAL_LIST_EMPTY(powernets) GLOBAL_VAR_INIT(bsa_unlock, FALSE) //BSA unlocked by head ID swipes -GLOBAL_LIST_EMPTY(player_details) // ckey -> /datum/player_details \ No newline at end of file +GLOBAL_LIST_EMPTY(player_details) // ckey -> /datum/player_details + +GLOBAL_LIST_INIT(bitfields, list( + "obj_flags" = list("EMAGGED" = EMAGGED, "IN_USE" = IN_USE, "CAN_BE_HIT" = CAN_BE_HIT, "BEING_SHOCKED" = BEING_SHOCKED, "DANGEROUS_POSSESSION" = DANGEROUS_POSSESSION, "ON_BLUEPRINTS" = ON_BLUEPRINTS, "UNIQUE_RENAME" = UNIQUE_RENAME), + "datum_flags" = list("DF_USE_TAG" = DF_USE_TAG, "DF_VAR_EDITED" = DF_VAR_EDITED), + "item_flags" = list("BEING_REMOVED" = BEING_REMOVED, "IN_INVENTORY" = IN_INVENTORY, "FORCE_STRING_OVERRIDE" = FORCE_STRING_OVERRIDE, "NEEDS_PERMIT" = NEEDS_PERMIT) + )) diff --git a/code/_onclick/ai.dm b/code/_onclick/ai.dm index e97f4d5426..ac03465773 100644 --- a/code/_onclick/ai.dm +++ b/code/_onclick/ai.dm @@ -130,16 +130,16 @@ /* Airlocks */ /obj/machinery/door/airlock/AICtrlClick() // Bolts doors - if(emagged) + if(obj_flags & EMAGGED) return - + if(locked) bolt_raise(usr) else bolt_drop(usr) /obj/machinery/door/airlock/AIAltClick() // Eletrifies doors. - if(emagged) + if(obj_flags & EMAGGED) return if(!secondsElectrified) @@ -148,15 +148,15 @@ shock_restore(usr) /obj/machinery/door/airlock/AIShiftClick() // Opens and closes doors! - if(emagged) + if(obj_flags & EMAGGED) return user_toggle_open(usr) /obj/machinery/door/airlock/AICtrlShiftClick() // Sets/Unsets Emergency Access Override - if(emagged) + if(obj_flags & EMAGGED) return - + if(!emergency) emergency_on(usr) else diff --git a/code/_onclick/item_attack.dm b/code/_onclick/item_attack.dm index 8a5b9ba519..3368960da4 100644 --- a/code/_onclick/item_attack.dm +++ b/code/_onclick/item_attack.dm @@ -1,6 +1,6 @@ /obj/item/proc/melee_attack_chain(mob/user, atom/target, params) - if(!tool_check(user, target) && pre_attackby(target, user, params)) + if(!tool_attack_chain(user, target) && pre_attackby(target, user, params)) // Return 1 in attackby() to prevent afterattack() effects (when safely moving items for example) var/resolved = target.attackby(src, user, params) if(!resolved && target && !QDELETED(src)) @@ -8,20 +8,11 @@ //Checks if the item can work as a tool, calling the appropriate tool behavior on the target -/obj/item/proc/tool_check(mob/user, atom/target) - switch(tool_behaviour) - if(TOOL_NONE) - return FALSE - if(TOOL_CROWBAR) - return target.crowbar_act(user, src) - if(TOOL_MULTITOOL) - return target.multitool_act(user, src) - if(TOOL_SCREWDRIVER) - return target.screwdriver_act(user, src) - if(TOOL_WRENCH) - return target.wrench_act(user, src) - if(TOOL_WIRECUTTER) - return target.wirecutter_act(user, src) +/obj/item/proc/tool_attack_chain(mob/user, atom/target) + if(!tool_behaviour) + return FALSE + + return target.tool_act(user, src, tool_behaviour) // Called when the item is in the active hand, and clicked; alternately, there is an 'activate held object' verb or you can hit pagedown. @@ -39,7 +30,7 @@ return FALSE /obj/attackby(obj/item/I, mob/living/user, params) - return ..() || (can_be_hit && I.attack_obj(src, user)) + return ..() || ((obj_flags & CAN_BE_HIT) && I.attack_obj(src, user)) /mob/living/attackby(obj/item/I, mob/living/user, params) user.changeNext_move(CLICK_CD_MELEE) @@ -59,10 +50,10 @@ if(flags_1 & NOBLUDGEON_1) return - if(force && user.has_disability(DISABILITY_PACIFISM)) + if(force && user.has_trait(TRAIT_PACIFISM)) to_chat(user, "You don't want to harm other living beings!") return - + if(!force) playsound(loc, 'sound/weapons/tap.ogg', get_clamped_volume(), 1, -1) else if(hitsound) diff --git a/code/citadel/cit_guns.dm b/code/citadel/cit_guns.dm index 8f113494cb..c5338fe9d3 100644 --- a/code/citadel/cit_guns.dm +++ b/code/citadel/cit_guns.dm @@ -182,7 +182,7 @@ icon = 'icons/obj/guns/cit_guns.dmi' icon_state = "toy9" can_suppress = 0 - needs_permit = 0 + obj_flags = 0 mag_type = /obj/item/ammo_box/magazine/toy/x9 casing_ejector = 0 spread = 90 //MAXIMUM XCOM MEMES (actually that'd be 180 spread) @@ -489,7 +489,7 @@ name = "foamag rifle" desc = "A foam launching magnetic rifle. Ages 8 and up." icon_state = "foamagrifle" - needs_permit = FALSE + obj_flags = 0 mag_type = /obj/item/ammo_box/magazine/toy/foamag casing_ejector = FALSE spread = 60 @@ -617,7 +617,7 @@ icon = 'icons/obj/guns/cit_guns.dmi' icon_state = "toyburst" clumsy_check = FALSE - needs_permit = FALSE + obj_flags = 0 fire_delay = 40 weapon_weight = WEAPON_HEAVY selfcharge = TRUE @@ -772,7 +772,7 @@ obj/item/projectile/bullet/c10mm/soporific caliber = "flechette" throwforce = 2 throw_speed = 3 - embed_chance = 75 + embedding = list("embedded_pain_multiplier" = 0, "embed_chance" = 40, "embedded_fall_chance" = 10) ///magazine/// @@ -858,7 +858,7 @@ obj/item/projectile/bullet/c10mm/soporific icon = 'icons/obj/guns/cit_guns.dmi' icon_state = "cde" can_unsuppress = TRUE - unique_rename = TRUE + obj_flags = UNIQUE_RENAME unique_reskin = list("Default" = "cde", "NT-99" = "n99", "Stealth" = "stealthpistol", @@ -1154,7 +1154,7 @@ obj/item/projectile/bullet/c10mm/soporific icon_state = "p37_foam" pin = /obj/item/device/firing_pin spawnwithmagazine = TRUE - needs_permit = FALSE + obj_flags = 0 mag_type = /obj/item/ammo_box/magazine/toy/pistol can_suppress = FALSE actions_types = list(/datum/action/item_action/pick_color) diff --git a/code/citadel/dogborgstuff.dm b/code/citadel/dogborgstuff.dm index 2713b19976..7780e779dc 100644 --- a/code/citadel/dogborgstuff.dm +++ b/code/citadel/dogborgstuff.dm @@ -31,32 +31,30 @@ /obj/item/dogborg/jaws/small/attack_self(mob/user) var/mob/living/silicon/robot.R = user if(R.emagged) - emagged = !emagged - if(emagged) - name = "combat jaws" - icon = 'icons/mob/dogborg.dmi' - icon_state = "jaws" - desc = "The jaws of the law." - flags_1 = CONDUCT_1 - force = 12 - throwforce = 0 - hitsound = 'sound/weapons/bite.ogg' - attack_verb = list("chomped", "bit", "ripped", "mauled", "enforced") - w_class = 3 - sharpness = IS_SHARP - else - name = "puppy jaws" - icon = 'icons/mob/dogborg.dmi' - icon_state = "smalljaws" - desc = "The jaws of a small dog." - flags_1 = CONDUCT_1 - force = 5 - throwforce = 0 - hitsound = 'sound/weapons/bite.ogg' - attack_verb = list("nibbled", "bit", "gnawed", "chomped", "nommed") - w_class = 3 - sharpness = IS_SHARP - update_icon() + name = "combat jaws" + icon = 'icons/mob/dogborg.dmi' + icon_state = "jaws" + desc = "The jaws of the law." + flags_1 = CONDUCT_1 + force = 12 + throwforce = 0 + hitsound = 'sound/weapons/bite.ogg' + attack_verb = list("chomped", "bit", "ripped", "mauled", "enforced") + w_class = 3 + sharpness = IS_SHARP + else + name = "puppy jaws" + icon = 'icons/mob/dogborg.dmi' + icon_state = "smalljaws" + desc = "The jaws of a small dog." + flags_1 = CONDUCT_1 + force = 5 + throwforce = 0 + hitsound = 'sound/weapons/bite.ogg' + attack_verb = list("nibbled", "bit", "gnawed", "chomped", "nommed") + w_class = 3 + sharpness = IS_SHARP + update_icon() //Cuffs @@ -189,107 +187,101 @@ /obj/item/soap/tongue/attack_self(mob/user) var/mob/living/silicon/robot.R = user if(R.emagged) - emagged = !emagged - if(emagged) - name = "hacked tongue of doom" - desc = "Your tongue has been upgraded successfully. Congratulations." - icon = 'icons/mob/dogborg.dmi' - icon_state = "syndietongue" - cleanspeed = 10 //(nerf'd)tator soap stat - else - name = "synthetic tongue" - desc = "Useful for slurping mess off the floor before affectionally licking the crew members in the face." - icon = 'icons/mob/dogborg.dmi' - icon_state = "synthtongue" - cleanspeed = initial(cleanspeed) - update_icon() + name = "hacked tongue of doom" + desc = "Your tongue has been upgraded successfully. Congratulations." + icon = 'icons/mob/dogborg.dmi' + icon_state = "syndietongue" + cleanspeed = 10 //(nerf'd)tator soap stat + else + name = "synthetic tongue" + desc = "Useful for slurping mess off the floor before affectionally licking the crew members in the face." + icon = 'icons/mob/dogborg.dmi' + icon_state = "synthtongue" + cleanspeed = initial(cleanspeed) + update_icon() /obj/item/soap/tongue/afterattack(atom/target, mob/user, proximity) + var/mob/living/silicon/robot.R = user if(!proximity || !check_allowed_items(target)) return - if(user.client && (target in user.client.screen)) - to_chat(user, "You need to take that [target.name] off before cleaning it!") + if(R.client && (target in R.client.screen)) + to_chat(R, "You need to take that [target.name] off before cleaning it!") else if(istype(target,/obj/effect/decal/cleanable)) - user.visible_message("[user] begins to lick off \the [target.name].", "You begin to lick off \the [target.name]...") - if(do_after(user, src.cleanspeed, target = target)) + R.visible_message("[R] begins to lick off \the [target.name].", "You begin to lick off \the [target.name]...") + if(do_after(R, src.cleanspeed, target = target)) if(!in_range(src, target)) //Proximity is probably old news by now, do a new check. return //If they moved away, you can't eat them. - to_chat(user, "You finish licking off \the [target.name].") + to_chat(R, "You finish licking off \the [target.name].") qdel(target) - var/mob/living/silicon/robot.R = user R.cell.give(50) else if(istype(target,/obj/item)) //hoo boy. danger zone man if(istype(target,/obj/item/trash)) - user.visible_message("[user] nibbles away at \the [target.name].", "You begin to nibble away at \the [target.name]...") - if(do_after(user, src.cleanspeed, target = target)) + R.visible_message("[R] nibbles away at \the [target.name].", "You begin to nibble away at \the [target.name]...") + if(do_after(R, src.cleanspeed, target = target)) if(!in_range(src, target)) //Proximity is probably old news by now, do a new check. return //If they moved away, you can't eat them. - to_chat(user, "You finish off \the [target.name].") + to_chat(R, "You finish off \the [target.name].") qdel(target) - var/mob/living/silicon/robot.R = user R.cell.give(250) return if(istype(target,/obj/item/stock_parts/cell)) - user.visible_message("[user] begins cramming \the [target.name] down its throat.", "You begin cramming \the [target.name] down your throat...") - if(do_after(user, 50, target = target)) + R.visible_message("[R] begins cramming \the [target.name] down its throat.", "You begin cramming \the [target.name] down your throat...") + if(do_after(R, 50, target = target)) if(!in_range(src, target)) //Proximity is probably old news by now, do a new check. return //If they moved away, you can't eat them. - to_chat(user, "You finish off \the [target.name].") - var/mob/living/silicon/robot.R = user + to_chat(R, "You finish off \the [target.name].") var/obj/item/stock_parts/cell.C = target R.cell.charge = R.cell.charge + (C.charge / 3) //Instant full cell upgrades op idgaf qdel(target) return var/obj/item/I = target //HAHA FUCK IT, NOT LIKE WE ALREADY HAVE A SHITTON OF WAYS TO REMOVE SHIT - if(!I.anchored && src.emagged) - user.visible_message("[user] begins chewing up \the [target.name]. Looks like it's trying to loophole around its diet restriction!", "You begin chewing up \the [target.name]...") - if(do_after(user, 100, target = I)) //Nerf dat time yo + if(!I.anchored && R.emagged) + R.visible_message("[R] begins chewing up \the [target.name]. Looks like it's trying to loophole around its diet restriction!", "You begin chewing up \the [target.name]...") + if(do_after(R, 100, target = I)) //Nerf dat time yo if(!in_range(src, target)) //Proximity is probably old news by now, do a new check. Even emags don't make you magically eat things at range. return //If they moved away, you can't eat them. - visible_message("[user] chews up \the [target.name] and cleans off the debris!") - to_chat(user, "You finish off \the [target.name].") + visible_message("[R] chews up \the [target.name] and cleans off the debris!") + to_chat(R, "You finish off \the [target.name].") qdel(I) - var/mob/living/silicon/robot.R = user R.cell.give(500) return - user.visible_message("[user] begins to lick \the [target.name] clean...", "You begin to lick \the [target.name] clean...") - if(do_after(user, src.cleanspeed, target = target)) + R.visible_message("[R] begins to lick \the [target.name] clean...", "You begin to lick \the [target.name] clean...") + if(do_after(R, src.cleanspeed, target = target)) if(!in_range(src, target)) //Proximity is probably old news by now, do a new check. return //If they moved away, you can't clean them. - to_chat(user,"You clean \the [target.name].") + to_chat(R,"You clean \the [target.name].") var/obj/effect/decal/cleanable/C = locate() in target qdel(C) SendSignal(COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD) else if(ishuman(target)) - if(src.emagged) - var/mob/living/silicon/robot.R = user + if(R.emagged) var/mob/living/L = target if(R.cell.charge <= 666) return L.Stun(4) // normal stunbaton is force 7 gimme a break good sir! L.Knockdown(80) L.apply_effect(STUTTER, 4) - L.visible_message("[user] has shocked [L] with its tongue!", \ - "[user] has shocked you with its tongue! You can feel the betrayal.") + L.visible_message("[R] has shocked [L] with its tongue!", \ + "[R] has shocked you with its tongue! You can feel the betrayal.") playsound(loc, 'sound/weapons/Egloves.ogg', 50, 1, -1) R.cell.use(666) else - user.visible_message("\the [user] affectionally licks \the [target]'s face!", "You affectionally lick \the [target]'s face!") + R.visible_message("\the [R] affectionally licks \the [target]'s face!", "You affectionally lick \the [target]'s face!") playsound(src.loc, 'sound/effects/attackblob.ogg', 50, 1) return else if(istype(target, /obj/structure/window)) - user.visible_message("[user] begins to lick \the [target.name] clean...", "You begin to lick \the [target.name] clean...") - if(do_after(user, src.cleanspeed, target = target)) + R.visible_message("[R] begins to lick \the [target.name] clean...", "You begin to lick \the [target.name] clean...") + if(do_after(R, src.cleanspeed, target = target)) if(!in_range(src, target)) //Proximity is probably old news by now, do a new check. return //If they moved away, you can't clean them. - to_chat(user, "You clean \the [target.name].") + to_chat(R, "You clean \the [target.name].") target.color = initial(target.color) else - user.visible_message("[user] begins to lick \the [target.name] clean...", "You begin to lick \the [target.name] clean...") - if(do_after(user, src.cleanspeed, target = target)) + R.visible_message("[R] begins to lick \the [target.name] clean...", "You begin to lick \the [target.name] clean...") + if(do_after(R, src.cleanspeed, target = target)) if(!in_range(src, target)) //Proximity is probably old news by now, do a new check. return //If they moved away, you can't clean them. - to_chat(user, "You clean \the [target.name].") + to_chat(R, "You clean \the [target.name].") var/obj/effect/decal/cleanable/C = locate() in target qdel(C) SendSignal(COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD) diff --git a/code/citadel/organs/genitals.dm b/code/citadel/organs/genitals.dm index 79784a1eb8..ebdd400828 100644 --- a/code/citadel/organs/genitals.dm +++ b/code/citadel/organs/genitals.dm @@ -260,7 +260,7 @@ for(var/L in relevant_layers) //Less hardcode H.remove_overlay(L) - if(H.has_disability(DISABILITY_HUSK)) + if(H.has_trait(TRAIT_HUSK)) return //start scanning for genitals //var/list/worn_stuff = H.get_equipped_items()//cache this list so it's not built again diff --git a/code/controllers/master.dm b/code/controllers/master.dm index 57c2323c42..7d61ae2a92 100644 --- a/code/controllers/master.dm +++ b/code/controllers/master.dm @@ -49,6 +49,7 @@ GLOBAL_REAL(Master, /datum/controller/master) = new var/map_loading = FALSE //Are we loading in a new map? var/current_runlevel //for scheduling different subsystems for different stages of the round + var/sleep_offline_after_initializations = TRUE var/static/restart_clear = 0 var/static/restart_timeout = 0 @@ -65,7 +66,7 @@ GLOBAL_REAL(Master, /datum/controller/master) = new // Highlander-style: there can only be one! Kill off the old and replace it with the new. if(!random_seed) - random_seed = rand(1, 1e9) + random_seed = (TEST_RUN_PARAMETER in world.params) ? 29051994 : rand(1, 1e9) rand_seed(random_seed) var/list/_subsystems = list() @@ -197,11 +198,12 @@ GLOBAL_REAL(Master, /datum/controller/master) = new // Sort subsystems by display setting for easy access. sortTim(subsystems, /proc/cmp_subsystem_display) // Set world options. - world.sleep_offline = TRUE + if(sleep_offline_after_initializations) + world.sleep_offline = TRUE world.fps = CONFIG_GET(number/fps) var/initialized_tod = REALTIMEOFDAY sleep(1) - if(CONFIG_GET(flag/resume_after_initializations)) + if(sleep_offline_after_initializations && CONFIG_GET(flag/resume_after_initializations)) world.sleep_offline = FALSE initializations_finished_with_no_players_logged_in = initialized_tod < REALTIMEOFDAY - 10 // Loop. diff --git a/code/controllers/subsystem/augury.dm b/code/controllers/subsystem/augury.dm index 38e9724b5f..875f1ee7d3 100644 --- a/code/controllers/subsystem/augury.dm +++ b/code/controllers/subsystem/augury.dm @@ -76,7 +76,7 @@ SUBSYSTEM_DEF(augury) active = FALSE UpdateButtonIcon() -/datum/action/innate/augury/UpdateButtonIcon(status_only = FALSE) +/datum/action/innate/augury/UpdateButtonIcon(status_only = FALSE, force) ..() if(active) button.icon_state = "template_active" diff --git a/code/controllers/subsystem/garbage.dm b/code/controllers/subsystem/garbage.dm index 4faf234ffd..e83d05a28d 100644 --- a/code/controllers/subsystem/garbage.dm +++ b/code/controllers/subsystem/garbage.dm @@ -332,7 +332,6 @@ SUBSYSTEM_DEF(garbage) /datum/verb/find_refs() set category = "Debug" set name = "Find References" - set background = 1 set src in world find_references(FALSE) @@ -385,7 +384,6 @@ SUBSYSTEM_DEF(garbage) /datum/verb/qdel_then_find_references() set category = "Debug" set name = "qdel() then Find References" - set background = 1 set src in world qdel(src) diff --git a/code/controllers/subsystem/idlenpcpool.dm b/code/controllers/subsystem/idlenpcpool.dm index a15237e5a7..1e895d56f3 100644 --- a/code/controllers/subsystem/idlenpcpool.dm +++ b/code/controllers/subsystem/idlenpcpool.dm @@ -1,6 +1,6 @@ SUBSYSTEM_DEF(idlenpcpool) name = "Idling NPC Pool" - flags = SS_POST_FIRE_TIMING|SS_BACKGROUND + flags = SS_POST_FIRE_TIMING|SS_BACKGROUND|SS_NO_INIT priority = FIRE_PRIORITY_IDLE_NPC wait = 60 runlevels = RUNLEVEL_GAME | RUNLEVEL_POSTGAME @@ -13,9 +13,12 @@ SUBSYSTEM_DEF(idlenpcpool) var/list/zlist = GLOB.simple_animals[AI_Z_OFF] ..("IdleNPCS:[idlelist.len]|Z:[zlist.len]") -/datum/controller/subsystem/idlenpcpool/Initialize(start_timeofday) - idle_mobs_by_zlevel = new /list(world.maxz,0) - return ..() +/datum/controller/subsystem/idlenpcpool/proc/MaxZChanged() + if (!islist(idle_mobs_by_zlevel)) + idle_mobs_by_zlevel = new /list(world.maxz,0) + while (SSidlenpcpool.idle_mobs_by_zlevel.len < world.maxz) + SSidlenpcpool.idle_mobs_by_zlevel.len++ + SSidlenpcpool.idle_mobs_by_zlevel[idle_mobs_by_zlevel.len] = list() /datum/controller/subsystem/idlenpcpool/fire(resumed = FALSE) diff --git a/code/controllers/subsystem/input.dm b/code/controllers/subsystem/input.dm index 136501373e..8a17ad07d1 100644 --- a/code/controllers/subsystem/input.dm +++ b/code/controllers/subsystem/input.dm @@ -61,7 +61,7 @@ SUBSYSTEM_DEF(input) "North", "East", "South", "West", "Northeast", "Southeast", "Northwest", "Southwest", "Insert", "Delete", "Ctrl", "Alt", - "F1", "F2", "F5", "F6", "F7", "F8", "F12", + "F1", "F2", "F3", "F4", "F5", "F6", "F7", "F8", "F9", "F10", "F11", "F12", ) for(var/i in 1 to oldmode_keys.len) diff --git a/code/controllers/subsystem/mobs.dm b/code/controllers/subsystem/mobs.dm index 14ad19e1ea..cd47adf476 100644 --- a/code/controllers/subsystem/mobs.dm +++ b/code/controllers/subsystem/mobs.dm @@ -1,7 +1,7 @@ SUBSYSTEM_DEF(mobs) name = "Mobs" priority = FIRE_PRIORITY_MOBS - flags = SS_KEEP_TIMING + flags = SS_KEEP_TIMING | SS_NO_INIT runlevels = RUNLEVEL_GAME | RUNLEVEL_POSTGAME var/list/currentrun = list() @@ -10,9 +10,12 @@ SUBSYSTEM_DEF(mobs) /datum/controller/subsystem/mobs/stat_entry() ..("P:[GLOB.mob_living_list.len]") -/datum/controller/subsystem/mobs/Initialize(start_timeofday) - clients_by_zlevel = new /list(world.maxz,0) - return ..() +/datum/controller/subsystem/mobs/proc/MaxZChanged() + if (!islist(clients_by_zlevel)) + clients_by_zlevel = new /list(world.maxz,0) + while (clients_by_zlevel.len < world.maxz) + clients_by_zlevel.len++ + clients_by_zlevel[clients_by_zlevel.len] = list() /datum/controller/subsystem/mobs/fire(resumed = 0) var/seconds = wait * 0.1 diff --git a/code/controllers/subsystem/shuttle.dm b/code/controllers/subsystem/shuttle.dm index bdf124cc4e..bff46717b1 100644 --- a/code/controllers/subsystem/shuttle.dm +++ b/code/controllers/subsystem/shuttle.dm @@ -8,6 +8,8 @@ SUBSYSTEM_DEF(shuttle) flags = SS_KEEP_TIMING|SS_NO_TICK_CHECK runlevels = RUNLEVEL_SETUP | RUNLEVEL_GAME + var/obj/machinery/shuttle_manipulator/manipulator + var/list/mobile = list() var/list/stationary = list() var/list/transit = list() @@ -53,19 +55,10 @@ SUBSYSTEM_DEF(shuttle) var/list/shuttle_purchase_requirements_met = list() //For keeping track of ingame events that would unlock new shuttles, such as defeating a boss or discovering a secret item var/lockdown = FALSE //disallow transit after nuke goes off - + var/auto_call = 99000 //CIT CHANGE - time before in deciseconds in which the shuttle is auto called. Default is 2½ hours plus 15 for the shuttle. So total is 3. /datum/controller/subsystem/shuttle/Initialize(timeofday) - if(!arrivals) - WARNING("No /obj/docking_port/mobile/arrivals placed on the map!") - if(!emergency) - WARNING("No /obj/docking_port/mobile/emergency placed on the map!") - if(!backup_shuttle) - WARNING("No /obj/docking_port/mobile/emergency/backup placed on the map!") - if(!supply) - WARNING("No /obj/docking_port/mobile/supply placed on the map!") - ordernum = rand(1, 9000) for(var/pack in subtypesof(/datum/supply_pack)) @@ -76,12 +69,32 @@ SUBSYSTEM_DEF(shuttle) if(!transit_turfs.len) setup_transit_zone() - initial_move() + + initial_load() + #ifdef HIGHLIGHT_DYNAMIC_TRANSIT color_space() #endif + + if(!arrivals) + WARNING("No /obj/docking_port/mobile/arrivals placed on the map!") + if(!emergency) + WARNING("No /obj/docking_port/mobile/emergency placed on the map!") + if(!backup_shuttle) + WARNING("No /obj/docking_port/mobile/emergency/backup placed on the map!") + if(!supply) + WARNING("No /obj/docking_port/mobile/supply placed on the map!") ..() +/datum/controller/subsystem/shuttle/proc/initial_load() + if(!istype(manipulator)) + CRASH("No shuttle manipulator found.") + + for(var/s in stationary) + var/obj/docking_port/stationary/S = s + S.load_roundstart() + CHECK_TICK + /datum/controller/subsystem/shuttle/proc/setup_transit_zone() // transit zone var/z = SSmapping.transit.z_value @@ -436,14 +449,6 @@ SUBSYSTEM_DEF(shuttle) if(!(M in transit_requesters)) transit_requesters += M - -/datum/controller/subsystem/shuttle/proc/autoEnd() //CIT CHANGE - allows shift to end after 3 hours has passed. - if(world.time > auto_call && EMERGENCY_IDLE_OR_RECALLED) //3 hours - SSshuttle.emergency.request(null, 1.5) - priority_announce("The shift has come to an end and the shuttle called.") - log_game("Round time limit reached. Shuttle has been auto-called.") - message_admins("Round time limit reached. Shuttle called.") - /datum/controller/subsystem/shuttle/proc/generate_transit_dock(obj/docking_port/mobile/M) // First, determine the size of the needed zone // Because of shuttle rotation, the "width" of the shuttle is not @@ -558,15 +563,7 @@ SUBSYSTEM_DEF(shuttle) T.flags_1 &= ~(UNUSED_TRANSIT_TURF_1) M.assigned_transit = new_transit_dock - return TRUE - -/datum/controller/subsystem/shuttle/proc/initial_move() - for(var/obj/docking_port/mobile/M in mobile) - if(!M.roundstart_move) - continue - M.dockRoundstart() - M.roundstart_move = FALSE - CHECK_TICK + return new_transit_dock /datum/controller/subsystem/shuttle/Recover() if (istype(SSshuttle.mobile)) diff --git a/code/controllers/subsystem/timer.dm b/code/controllers/subsystem/timer.dm index 6c48531cf9..fbe681d0d4 100644 --- a/code/controllers/subsystem/timer.dm +++ b/code/controllers/subsystem/timer.dm @@ -1,5 +1,6 @@ #define BUCKET_LEN (world.fps*1*60) //how many ticks should we keep in the bucket. (1 minutes worth) -#define BUCKET_POS(timer) (round((timer.timeToRun - SStimer.head_offset) / world.tick_lag) + 1) +#define BUCKET_POS(timer) ((round((timer.timeToRun - SStimer.head_offset) / world.tick_lag) % BUCKET_LEN) + 1) +#define TIMER_MAX (world.time + TICKS2DS(min(BUCKET_LEN-(SStimer.practical_offset-DS2TICKS(world.time - SStimer.head_offset))-1, BUCKET_LEN-1))) #define TIMER_ID_MAX (2**24) //max float with integer precision SUBSYSTEM_DEF(timer) @@ -9,11 +10,11 @@ SUBSYSTEM_DEF(timer) flags = SS_TICKER|SS_NO_INIT - var/list/datum/timedevent/processing = list() + var/list/datum/timedevent/second_queue = list() //awe, yes, you've had first queue, but what about second queue? var/list/hashes = list() var/head_offset = 0 //world.time of the first entry in the the bucket. - var/practical_offset = 0 //index of the first non-empty item in the bucket. + var/practical_offset = 1 //index of the first non-empty item in the bucket. var/bucket_resolution = 0 //world.tick_lag the bucket was designed for var/bucket_count = 0 //how many timers are in the buckets @@ -27,13 +28,19 @@ SUBSYSTEM_DEF(timer) var/static/last_invoke_warning = 0 var/static/bucket_auto_reset = TRUE +/datum/controller/subsystem/timer/PreInit() + bucket_list.len = BUCKET_LEN + head_offset = world.time + bucket_resolution = world.tick_lag + /datum/controller/subsystem/timer/stat_entry(msg) - ..("B:[bucket_count] P:[length(processing)] H:[length(hashes)] C:[length(clienttime_timers)]") + ..("B:[bucket_count] P:[length(second_queue)] H:[length(hashes)] C:[length(clienttime_timers)] S:[length(timer_id_dict)]") /datum/controller/subsystem/timer/fire(resumed = FALSE) var/lit = last_invoke_tick var/last_check = world.time - TIMER_NO_INVOKE_WARNING var/list/bucket_list = src.bucket_list + if(!bucket_count) last_invoke_tick = world.time @@ -60,50 +67,62 @@ SUBSYSTEM_DEF(timer) bucket_node = bucket_node.next anti_loop_check-- while(bucket_node && bucket_node != bucket_head && anti_loop_check) - log_world("Active timers in the processing queue:") - for(var/I in processing) + log_world("Active timers in the second_queue queue:") + for(var/I in second_queue) log_world(get_timer_debug_string(I)) - while(length(clienttime_timers)) - var/datum/timedevent/ctime_timer = clienttime_timers[clienttime_timers.len] - if (ctime_timer.timeToRun <= REALTIMEOFDAY) - --clienttime_timers.len - var/datum/callback/callBack = ctime_timer.callBack - ctime_timer.spent = REALTIMEOFDAY - callBack.InvokeAsync() - qdel(ctime_timer) - else - break //None of the rest are ready to run + var/next_clienttime_timer_index = 0 + var/len = length(clienttime_timers) + + for (next_clienttime_timer_index in 1 to len) if (MC_TICK_CHECK) - return + next_clienttime_timer_index-- + break + var/datum/timedevent/ctime_timer = clienttime_timers[next_clienttime_timer_index] + if (ctime_timer.timeToRun > REALTIMEOFDAY) + next_clienttime_timer_index-- + break + + var/datum/callback/callBack = ctime_timer.callBack + if (!callBack) + clienttime_timers.Cut(next_clienttime_timer_index,next_clienttime_timer_index+1) + CRASH("Invalid timer: [get_timer_debug_string(ctime_timer)] world.time: [world.time], head_offset: [head_offset], practical_offset: [practical_offset], REALTIMEOFDAY: [REALTIMEOFDAY]") + + ctime_timer.spent = REALTIMEOFDAY + callBack.InvokeAsync() + qdel(ctime_timer) + + + if (next_clienttime_timer_index) + clienttime_timers.Cut(1,next_clienttime_timer_index+1) + + if (MC_TICK_CHECK) + return var/static/list/spent = list() var/static/datum/timedevent/timer - var/static/datum/timedevent/head + if (practical_offset > BUCKET_LEN) + head_offset += TICKS2DS(BUCKET_LEN) + practical_offset = 1 + resumed = FALSE - if (practical_offset > BUCKET_LEN || (!resumed && length(bucket_list) != BUCKET_LEN || world.tick_lag != bucket_resolution)) - shift_buckets() + if ((length(bucket_list) != BUCKET_LEN) || (world.tick_lag != bucket_resolution)) + reset_buckets() bucket_list = src.bucket_list resumed = FALSE if (!resumed) timer = null - head = null - while (practical_offset <= BUCKET_LEN && head_offset + (practical_offset*world.tick_lag) <= world.time && !MC_TICK_CHECK) + while (practical_offset <= BUCKET_LEN && head_offset + (practical_offset*world.tick_lag) <= world.time) + var/datum/timedevent/head = bucket_list[practical_offset] if (!timer || !head || timer == head) head = bucket_list[practical_offset] - if (!head) - practical_offset++ - if (MC_TICK_CHECK) - break - continue timer = head - do + while (timer) var/datum/callback/callBack = timer.callBack if (!callBack) - qdel(timer) bucket_resolution = null //force bucket recreation CRASH("Invalid timer: [get_timer_debug_string(timer)] world.time: [world.time], head_offset: [head_offset], practical_offset: [practical_offset]") @@ -113,15 +132,68 @@ SUBSYSTEM_DEF(timer) callBack.InvokeAsync() last_invoke_tick = world.time - timer = timer.next - if (MC_TICK_CHECK) return - while (timer && timer != head) - timer = null + + timer = timer.next + if (timer == head) + break + + bucket_list[practical_offset++] = null - if (MC_TICK_CHECK) - return + + //we freed up a bucket, lets see if anything in second_queue needs to be shifted to that bucket. + var/i = 0 + var/L = length(second_queue) + for (i in 1 to L) + timer = second_queue[i] + if (timer.timeToRun >= TIMER_MAX) + i-- + break + + if (timer.timeToRun < head_offset) + bucket_resolution = null //force bucket recreation + CRASH("[i] Invalid timer state: Timer in long run queue with a time to run less then head_offset. [get_timer_debug_string(timer)] world.time: [world.time], head_offset: [head_offset], practical_offset: [practical_offset]") + + if (timer.callBack && !timer.spent) + timer.callBack.InvokeAsync() + spent += timer + bucket_count++ + else if(!QDELETED(timer)) + qdel(timer) + continue + + if (timer.timeToRun < head_offset + TICKS2DS(practical_offset)) + bucket_resolution = null //force bucket recreation + CRASH("[i] Invalid timer state: Timer in long run queue that would require a backtrack to transfer to short run queue. [get_timer_debug_string(timer)] world.time: [world.time], head_offset: [head_offset], practical_offset: [practical_offset]") + if (timer.callBack && !timer.spent) + timer.callBack.InvokeAsync() + spent += timer + bucket_count++ + else if(!QDELETED(timer)) + qdel(timer) + continue + + bucket_count++ + var/bucket_pos = max(1, BUCKET_POS(timer)) + + var/datum/timedevent/bucket_head = bucket_list[bucket_pos] + if (!bucket_head) + bucket_list[bucket_pos] = timer + timer.next = null + timer.prev = null + continue + + if (!bucket_head.prev) + bucket_head.prev = bucket_head + timer.next = bucket_head + timer.prev = bucket_head.prev + timer.next.prev = timer + timer.prev.next = timer + if (i) + second_queue.Cut(1, i+1) + + timer = null bucket_count -= length(spent) @@ -141,7 +213,7 @@ SUBSYSTEM_DEF(timer) if(!TE.callBack) . += ", NO CALLBACK" -/datum/controller/subsystem/timer/proc/shift_buckets() +/datum/controller/subsystem/timer/proc/reset_buckets() var/list/bucket_list = src.bucket_list var/list/alltimers = list() //collect the timers currently in the bucket @@ -162,7 +234,7 @@ SUBSYSTEM_DEF(timer) head_offset = world.time bucket_resolution = world.tick_lag - alltimers += processing + alltimers += second_queue if (!length(alltimers)) return @@ -173,22 +245,26 @@ SUBSYSTEM_DEF(timer) if (head.timeToRun < head_offset) head_offset = head.timeToRun - var/list/timers_to_remove = list() - - for (var/thing in alltimers) - var/datum/timedevent/timer = thing + var/new_bucket_count + var/i = 1 + for (i in 1 to length(alltimers)) + var/datum/timedevent/timer = alltimers[1] if (!timer) - timers_to_remove += timer continue var/bucket_pos = BUCKET_POS(timer) - if (bucket_pos > BUCKET_LEN) + if (timer.timeToRun >= TIMER_MAX) + i-- break - timers_to_remove += timer //remove it from the big list once we are done + if (!timer.callBack || timer.spent) + WARNING("Invalid timer: [get_timer_debug_string(timer)] world.time: [world.time], head_offset: [head_offset], practical_offset: [practical_offset]") + if (timer.callBack) + qdel(timer) continue - bucket_count++ + + new_bucket_count++ var/datum/timedevent/bucket_head = bucket_list[bucket_pos] if (!bucket_head) bucket_list[bucket_pos] = timer @@ -202,12 +278,14 @@ SUBSYSTEM_DEF(timer) timer.prev = bucket_head.prev timer.next.prev = timer timer.prev.next = timer - - processing = (alltimers - timers_to_remove) + if (i) + alltimers.Cut(1, i+1) + second_queue = alltimers + bucket_count = new_bucket_count /datum/controller/subsystem/timer/Recover() - processing |= SStimer.processing + second_queue |= SStimer.second_queue hashes |= SStimer.hashes timer_id_dict |= SStimer.timer_id_dict bucket_list |= SStimer.bucket_list @@ -224,9 +302,8 @@ SUBSYSTEM_DEF(timer) var/datum/timedevent/next var/datum/timedevent/prev - var/static/nextid = 1 - /datum/timedevent/New(datum/callback/callBack, timeToRun, flags, hash) + var/static/nextid = 1 id = TIMER_ID_NULL src.callBack = callBack src.timeToRun = timeToRun @@ -235,56 +312,69 @@ SUBSYSTEM_DEF(timer) if (flags & TIMER_UNIQUE) SStimer.hashes[hash] = src + if (flags & TIMER_STOPPABLE) - do - if (nextid >= TIMER_ID_MAX) - nextid = 1 - id = nextid++ - while(SStimer.timer_id_dict["timerid" + num2text(id, 8)]) - SStimer.timer_id_dict["timerid" + num2text(id, 8)] = src + id = num2text(nextid, 100) + if (nextid >= SHORT_REAL_LIMIT) + nextid += min(1, 2**round(nextid/SHORT_REAL_LIMIT)) + else + nextid++ + SStimer.timer_id_dict[id] = src - name = "Timer: " + num2text(id, 8) + ", TTR: [timeToRun], Flags: [jointext(bitfield2list(flags, list("TIMER_UNIQUE", "TIMER_OVERRIDE", "TIMER_CLIENT_TIME", "TIMER_STOPPABLE", "TIMER_NO_HASH_WAIT")), ", ")], callBack: [REF(callBack)], callBack.object: [callBack.object][REF(callBack.object)]([getcallingtype()]), callBack.delegate:[callBack.delegate]([callBack.arguments ? callBack.arguments.Join(", ") : ""])" + name = "Timer: [id] (\ref[src]), TTR: [timeToRun], Flags: [jointext(bitfield2list(flags, list("TIMER_UNIQUE", "TIMER_OVERRIDE", "TIMER_CLIENT_TIME", "TIMER_STOPPABLE", "TIMER_NO_HASH_WAIT")), ", ")], callBack: \ref[callBack], callBack.object: [callBack.object]\ref[callBack.object]([getcallingtype()]), callBack.delegate:[callBack.delegate]([callBack.arguments ? callBack.arguments.Join(", ") : ""])" - if (spent) - CRASH("HOLY JESUS. WHAT IS THAT? WHAT THE FUCK IS THAT?") + if ((timeToRun < world.time || timeToRun < SStimer.head_offset) && !(flags & TIMER_CLIENT_TIME)) + CRASH("Invalid timer state: Timer created that would require a backtrack to run (addtimer would never let this happen): [SStimer.get_timer_debug_string(src)]") if (callBack.object != GLOBAL_PROC) LAZYADD(callBack.object.active_timers, src) + + var/list/L + if (flags & TIMER_CLIENT_TIME) - //sorted insert - var/list/ctts = SStimer.clienttime_timers - var/cttl = length(ctts) + L = SStimer.clienttime_timers + else if (timeToRun >= TIMER_MAX) + L = SStimer.second_queue + + + if (L) + //binary search sorted insert + var/cttl = length(L) if(cttl) - var/datum/timedevent/Last = ctts[cttl] - if(Last.timeToRun >= timeToRun) - ctts += src - else - for(var/i in cttl to 1 step -1) - var/datum/timedevent/E = ctts[i] - if(E.timeToRun <= timeToRun) - ctts.Insert(i, src) - break + var/left = 1 + var/right = cttl + var/mid = (left+right) >> 1 //rounded divide by two for hedgehogs + + var/datum/timedevent/item + while (left < right) + item = L[mid] + if (item.timeToRun <= timeToRun) + left = mid+1 + else + right = mid + mid = (left+right) >> 1 + + item = L[mid] + mid = item.timeToRun > timeToRun ? mid : mid+1 + L.Insert(mid, src) + else - ctts += src + L += src return //get the list of buckets var/list/bucket_list = SStimer.bucket_list + //calculate our place in the bucket list var/bucket_pos = BUCKET_POS(src) - //we are too far aways from needing to run to be in the bucket list, shift_buckets() will handle us. - if (bucket_pos > length(bucket_list)) - SStimer.processing += src - return + //get the bucket for our tick var/datum/timedevent/bucket_head = bucket_list[bucket_pos] SStimer.bucket_count++ //empty bucket, we will just add ourselves if (!bucket_head) bucket_list[bucket_pos] = src - if (bucket_pos < SStimer.practical_offset) - SStimer.practical_offset = bucket_pos return //other wise, lets do a simplified linked list add. if (!bucket_head.prev) @@ -296,10 +386,9 @@ SUBSYSTEM_DEF(timer) /datum/timedevent/Destroy() ..() - if (flags & TIMER_UNIQUE) + if (flags & TIMER_UNIQUE && hash) SStimer.hashes -= hash - if (callBack && callBack.object && callBack.object != GLOBAL_PROC && callBack.object.active_timers) callBack.object.active_timers -= src UNSETEMPTY(callBack.object.active_timers) @@ -307,13 +396,33 @@ SUBSYSTEM_DEF(timer) callBack = null if (flags & TIMER_STOPPABLE) - SStimer.timer_id_dict -= "timerid" + num2text(id, 8) + SStimer.timer_id_dict -= id if (flags & TIMER_CLIENT_TIME) - SStimer.clienttime_timers -= src + if (!spent) + spent = world.time + SStimer.clienttime_timers -= src return QDEL_HINT_IWILLGC if (!spent) + spent = world.time + var/bucketpos = BUCKET_POS(src) + var/datum/timedevent/buckethead + var/list/bucket_list = SStimer.bucket_list + if (bucketpos > 0) + buckethead = bucket_list[bucketpos] + + if (buckethead == src) + bucket_list[bucketpos] = next + SStimer.bucket_count-- + else if (timeToRun < TIMER_MAX || next || prev) + SStimer.bucket_count-- + else + var/l = length(SStimer.second_queue) + SStimer.second_queue -= src + if (l == length(SStimer.second_queue)) + SStimer.bucket_count-- + if (prev == next && next) next.prev = null prev.next = null @@ -322,19 +431,6 @@ SUBSYSTEM_DEF(timer) prev.next = next if (next) next.prev = prev - - var/bucketpos = BUCKET_POS(src) - var/datum/timedevent/buckethead - var/list/bucket_list = SStimer.bucket_list - - if (bucketpos > 0 && bucketpos <= length(bucket_list)) - buckethead = bucket_list[bucketpos] - SStimer.bucket_count-- - else - SStimer.processing -= src - - if (buckethead == src) - bucket_list[bucketpos] = next else if (prev && prev.next == src) prev.next = next @@ -351,7 +447,7 @@ SUBSYSTEM_DEF(timer) else . = "[callBack.object.type]" -/proc/addtimer(datum/callback/callback, wait, flags) +/proc/addtimer(datum/callback/callback, wait = 0, flags = 0) if (!callback) CRASH("addtimer called without a callback") @@ -381,11 +477,10 @@ SUBSYSTEM_DEF(timer) var/datum/timedevent/hash_timer = SStimer.hashes[hash] if(hash_timer) if (hash_timer.spent) //it's pending deletion, pretend it doesn't exist. - hash_timer.hash = null - SStimer.hashes -= hash + hash_timer.hash = null //but keep it from accidentally deleting us else - if (flags & TIMER_OVERRIDE) + hash_timer.hash = null //no need having it delete it's hash if we are going to replace it qdel(hash_timer) else if (hash_timer.flags & TIMER_STOPPABLE) @@ -410,7 +505,7 @@ SUBSYSTEM_DEF(timer) qdel(id) return TRUE //id is string - var/datum/timedevent/timer = SStimer.timer_id_dict["timerid[id]"] + var/datum/timedevent/timer = SStimer.timer_id_dict[id] if (timer && !timer.spent) qdel(timer) return TRUE @@ -419,3 +514,5 @@ SUBSYSTEM_DEF(timer) #undef BUCKET_LEN #undef BUCKET_POS +#undef TIMER_MAX +#undef TIMER_ID_MAX diff --git a/code/controllers/subsystem/title.dm b/code/controllers/subsystem/title.dm index 6168ca0905..94dff9b742 100644 --- a/code/controllers/subsystem/title.dm +++ b/code/controllers/subsystem/title.dm @@ -26,19 +26,12 @@ SUBSYSTEM_DEF(title) if((L.len == 1 && L[1] != "blank.png")|| (L.len > 1 && ((use_rare_screens && lowertext(L[1]) == "rare") || (lowertext(L[1]) == lowertext(SSmapping.config.map_name))))) title_screens += S - for(var/S in title_screens) - var/list/L = splittext(S,".") - if(L.len != 2) - continue - title_screens -= S - break - if(length(title_screens)) file_path = "[global.config.directory]/title_screens/images/[pick(title_screens)]" if(!file_path) file_path = "icons/default_title.dmi" - + ASSERT(fexists(file_path)) icon = new(fcopy_rsc(file_path)) diff --git a/code/controllers/subsystem/traumas.dm b/code/controllers/subsystem/traumas.dm index 14f15a4b89..235b25b566 100644 --- a/code/controllers/subsystem/traumas.dm +++ b/code/controllers/subsystem/traumas.dm @@ -11,7 +11,7 @@ SUBSYSTEM_DEF(traumas) #define PHOBIA_FILE "phobia.json" /datum/controller/subsystem/traumas/Initialize() - phobia_types = list("spiders", "space", "security", "clowns", "greytide", "lizards", "skeletons") + phobia_types = list("spiders", "space", "security", "clowns", "greytide", "lizards", "skeletons", "snakes") phobia_words = list("spiders" = strings(PHOBIA_FILE, "spiders"), "space" = strings(PHOBIA_FILE, "space"), @@ -20,11 +20,13 @@ SUBSYSTEM_DEF(traumas) "greytide" = strings(PHOBIA_FILE, "greytide"), "lizards" = strings(PHOBIA_FILE, "lizards"), "skeletons" = strings(PHOBIA_FILE, "skeletons"), + "snakes" = strings(PHOBIA_FILE, "snakes") ) phobia_mobs = list("spiders" = typecacheof(list(/mob/living/simple_animal/hostile/poison/giant_spider)), "security" = typecacheof(list(/mob/living/simple_animal/bot/secbot)), - "lizards" = typecacheof(list(/mob/living/simple_animal/hostile/lizard)) + "lizards" = typecacheof(list(/mob/living/simple_animal/hostile/lizard)), + "snakes" = typecacheof(list(/mob/living/simple_animal/hostile/retaliate/poison/snake)) ) phobia_objs = list("spiders" = typecacheof(list(/obj/structure/spider)), diff --git a/code/datums/action.dm b/code/datums/action.dm index fb1f2fb8cb..7c8feeed55 100644 --- a/code/datums/action.dm +++ b/code/datums/action.dm @@ -104,7 +104,7 @@ return 0 return 1 -/datum/action/proc/UpdateButtonIcon(status_only = FALSE) +/datum/action/proc/UpdateButtonIcon(status_only = FALSE, force = FALSE) if(button) if(!status_only) button.name = name @@ -121,7 +121,7 @@ if(button.icon_state != background_icon_state) button.icon_state = background_icon_state - ApplyIcon(button) + ApplyIcon(button, force) if(!IsAvailable()) button.color = rgb(128,0,0,128) @@ -129,8 +129,8 @@ button.color = rgb(255,255,255,255) return 1 -/datum/action/proc/ApplyIcon(obj/screen/movable/action_button/current_button) - if(icon_icon && button_icon_state && current_button.button_icon_state != button_icon_state) +/datum/action/proc/ApplyIcon(obj/screen/movable/action_button/current_button, force = FALSE) + if(icon_icon && button_icon_state && ((current_button.button_icon_state != button_icon_state) || force)) current_button.cut_overlays(TRUE) current_button.add_overlay(mutable_appearance(icon_icon, button_icon_state)) current_button.button_icon_state = button_icon_state @@ -163,11 +163,11 @@ I.ui_action_click(owner, src) return 1 -/datum/action/item_action/ApplyIcon(obj/screen/movable/action_button/current_button) +/datum/action/item_action/ApplyIcon(obj/screen/movable/action_button/current_button, force) if(button_icon && button_icon_state) // If set, use the custom icon that we set instead // of the item appearence - ..(current_button) + ..() else if(target && current_button.appearance_cache != target.appearance) //replace with /ref comparison if this is not valid. var/obj/item/I = target var/old_layer = I.layer @@ -215,7 +215,7 @@ /datum/action/item_action/set_internals name = "Set Internals" -/datum/action/item_action/set_internals/UpdateButtonIcon(status_only = FALSE) +/datum/action/item_action/set_internals/UpdateButtonIcon(status_only = FALSE, force) if(..()) //button available if(iscarbon(owner)) var/mob/living/carbon/C = owner @@ -253,7 +253,7 @@ if(..()) UpdateButtonIcon() -/datum/action/item_action/toggle_unfriendly_fire/UpdateButtonIcon(status_only = FALSE) +/datum/action/item_action/toggle_unfriendly_fire/UpdateButtonIcon(status_only = FALSE, force) if(istype(target, /obj/item/hierophant_club)) var/obj/item/hierophant_club/H = target if(H.friendly_fire_check) diff --git a/code/datums/armor.dm b/code/datums/armor.dm new file mode 100644 index 0000000000..cbf4b76c60 --- /dev/null +++ b/code/datums/armor.dm @@ -0,0 +1,70 @@ +#define ARMORID "armor-[melee]-[bullet]-[laser]-[energy]-[bomb]-[bio]-[rad]-[fire]-[acid]-[magic]" + +/proc/getArmor(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 0, acid = 0, magic = 0) + . = locate(ARMORID) + if (!.) + . = new /datum/armor(melee, bullet, laser, energy, bomb, bio, rad, fire, acid, magic) + +/datum/armor + datum_flags = DF_USE_TAG + var/melee + var/bullet + var/laser + var/energy + var/bomb + var/bio + var/rad + var/fire + var/acid + var/magic + +/datum/armor/New(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 0, acid = 0, magic = 0) + src.melee = melee + src.bullet = bullet + src.laser = laser + src.energy = energy + src.bomb = bomb + src.bio = bio + src.rad = rad + src.fire = fire + src.acid = acid + src.magic = magic + tag = ARMORID + +/datum/armor/proc/modifyRating(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 0, acid = 0, magic = 0) + return getArmor(src.melee+melee, src.bullet+bullet, src.laser+laser, src.energy+energy, src.bomb+bomb, src.bio+bio, src.rad+rad, src.fire+fire, src.acid+acid, src.magic+magic) + +/datum/armor/proc/modifyAllRatings(modifier = 0) + return getArmor(melee+modifier, bullet+modifier, laser+modifier, energy+modifier, bomb+modifier, bio+modifier, rad+modifier, fire+modifier, acid+modifier, magic+modifier) + +/datum/armor/proc/setRating(melee, bullet, laser, energy, bomb, bio, rad, fire, acid, magic) + return getArmor((isnull(melee) ? src.melee : melee),\ + (isnull(bullet) ? src.bullet : bullet),\ + (isnull(laser) ? src.laser : laser),\ + (isnull(energy) ? src.energy : energy),\ + (isnull(bomb) ? src.bomb : bomb),\ + (isnull(bio) ? src.bio : bio),\ + (isnull(rad) ? src.rad : rad),\ + (isnull(fire) ? src.fire : fire),\ + (isnull(acid) ? src.acid : acid),\ + (isnull(magic) ? src.magic : magic)) + +/datum/armor/proc/getRating(rating) + return vars[rating] + +/datum/armor/proc/getList() + return list("melee" = melee, "bullet" = bullet, "laser" = laser, "energy" = energy, "bomb" = bomb, "bio" = bio, "rad" = rad, "fire" = fire, "acid" = acid, "magic" = magic) + +/datum/armor/proc/attachArmor(datum/armor/AA) + return getArmor(melee+AA.melee, bullet+AA.bullet, laser+AA.laser, energy+AA.energy, bomb+AA.bomb, bio+AA.bio, rad+AA.rad, fire+AA.fire, acid+AA.acid, magic+AA.magic) + +/datum/armor/proc/detachArmor(datum/armor/AA) + return getArmor(melee-AA.melee, bullet-AA.bullet, laser-AA.laser, energy-AA.energy, bomb-AA.bomb, bio-AA.bio, rad-AA.rad, fire-AA.fire, acid-AA.acid, magic-AA.magic) + +/datum/armor/vv_edit_var(var_name, var_value) + if (var_name == NAMEOF(src, tag)) + return FALSE + . = ..() + tag = ARMORID // update tag in case armor values were edited + +#undef ARMORID diff --git a/code/datums/brain_damage/mild.dm b/code/datums/brain_damage/mild.dm index a28a108365..87e0cb3457 100644 --- a/code/datums/brain_damage/mild.dm +++ b/code/datums/brain_damage/mild.dm @@ -42,7 +42,7 @@ lose_text = "You feel smart again." /datum/brain_trauma/mild/dumbness/on_gain() - owner.add_disability(DISABILITY_DUMB, TRAUMA_DISABILITY) + owner.add_trait(TRAIT_DUMB, TRAUMA_TRAIT) ..() /datum/brain_trauma/mild/dumbness/on_life() @@ -54,7 +54,7 @@ ..() /datum/brain_trauma/mild/dumbness/on_lose() - owner.remove_disability(DISABILITY_DUMB, TRAUMA_DISABILITY) + owner.remove_trait(TRAIT_DUMB, TRAUMA_TRAIT) owner.derpspeech = 0 ..() diff --git a/code/datums/brain_damage/phobia.dm b/code/datums/brain_damage/phobia.dm index a775113491..15db4a3d3e 100644 --- a/code/datums/brain_damage/phobia.dm +++ b/code/datums/brain_damage/phobia.dm @@ -68,7 +68,7 @@ return /datum/brain_trauma/mild/phobia/on_hear(message, speaker, message_language, raw_message, radio_freq) - if(owner.has_disability(DISABILITY_DEAF) || world.time < next_scare) //words can't trigger you if you can't hear them *taps head* + if(owner.has_trait(TRAIT_DEAF) || world.time < next_scare) //words can't trigger you if you can't hear them *taps head* return message for(var/word in trigger_words) if(findtext(message, word)) diff --git a/code/datums/brain_damage/severe.dm b/code/datums/brain_damage/severe.dm index ba4eaa376e..b4d1951eb5 100644 --- a/code/datums/brain_damage/severe.dm +++ b/code/datums/brain_damage/severe.dm @@ -12,11 +12,11 @@ lose_text = "You suddenly remember how to speak." /datum/brain_trauma/severe/mute/on_gain() - owner.add_disability(DISABILITY_MUTE, TRAUMA_DISABILITY) + owner.add_trait(TRAIT_MUTE, TRAUMA_TRAIT) ..() /datum/brain_trauma/severe/mute/on_lose() - owner.remove_disability(DISABILITY_MUTE, TRAUMA_DISABILITY) + owner.remove_trait(TRAIT_MUTE, TRAUMA_TRAIT) ..() /datum/brain_trauma/severe/aphasia @@ -50,11 +50,11 @@ lose_text = "Your vision returns." /datum/brain_trauma/severe/blindness/on_gain() - owner.become_blind(TRAUMA_DISABILITY) + owner.become_blind(TRAUMA_TRAIT) ..() /datum/brain_trauma/severe/blindness/on_lose() - owner.cure_blind(TRAUMA_DISABILITY) + owner.cure_blind(TRAUMA_TRAIT) ..() /datum/brain_trauma/severe/paralysis @@ -120,7 +120,7 @@ stress -= 4 /datum/brain_trauma/severe/monophobia/proc/check_alone() - if(owner.has_disability(DISABILITY_BLIND)) + if(owner.has_trait(TRAIT_BLIND)) return TRUE for(var/mob/M in oview(owner, 7)) if(!isliving(M)) //ghosts ain't people @@ -182,11 +182,11 @@ lose_text = "You feel in control of your hands again." /datum/brain_trauma/severe/discoordination/on_gain() - owner.add_disability(DISABILITY_MONKEYLIKE, TRAUMA_DISABILITY) + owner.add_trait(TRAIT_MONKEYLIKE, TRAUMA_TRAIT) ..() /datum/brain_trauma/severe/discoordination/on_lose() - owner.remove_disability(DISABILITY_MONKEYLIKE, TRAUMA_DISABILITY) + owner.remove_trait(TRAIT_MONKEYLIKE, TRAUMA_TRAIT) ..() /datum/brain_trauma/severe/pacifism @@ -197,9 +197,9 @@ lose_text = "You no longer feel compelled to not harm." /datum/brain_trauma/severe/pacifism/on_gain() - owner.add_disability(DISABILITY_PACIFISM, TRAUMA_DISABILITY) + owner.add_trait(TRAIT_PACIFISM, TRAUMA_TRAIT) ..() /datum/brain_trauma/severe/pacifism/on_lose() - owner.remove_disability(DISABILITY_PACIFISM, TRAUMA_DISABILITY) + owner.remove_trait(TRAIT_PACIFISM, TRAUMA_TRAIT) ..() \ No newline at end of file diff --git a/code/datums/brain_damage/split_personality.dm b/code/datums/brain_damage/split_personality.dm index dcb7fca3d1..9e273f19f7 100644 --- a/code/datums/brain_damage/split_personality.dm +++ b/code/datums/brain_damage/split_personality.dm @@ -192,7 +192,7 @@ return //no random switching /datum/brain_trauma/severe/split_personality/brainwashing/on_hear(message, speaker, message_language, raw_message, radio_freq) - if(owner.has_disability(DISABILITY_DEAF) || owner == speaker) + if(owner.has_trait(TRAIT_DEAF) || owner == speaker) return message if(findtext(message, codeword)) message = replacetext(message, codeword, "[codeword]") diff --git a/code/datums/browser.dm b/code/datums/browser.dm index f863a5007d..d525b52ca5 100644 --- a/code/datums/browser.dm +++ b/code/datums/browser.dm @@ -120,13 +120,7 @@ else WARNING("Browser [title] tried to close with a null ID") -/datum/browser/alert - var/selectedbutton = 0 - var/opentime = 0 - var/timeout - var/stealfocus - -/datum/browser/alert/New(User,Message,Title,Button1="Ok",Button2,Button3,StealFocus = 1,Timeout=6000) +/datum/browser/modal/alert/New(User,Message,Title,Button1="Ok",Button2,Button3,StealFocus = 1,Timeout=6000) if (!User) return @@ -142,44 +136,10 @@ output += {""} - ..(User, ckey("[User]-[Message]-[Title]-[world.time]-[rand(1,10000)]"), Title, 350, 150, src) + ..(User, ckey("[User]-[Message]-[Title]-[world.time]-[rand(1,10000)]"), Title, 350, 150, src, StealFocus, Timeout) set_content(output) - stealfocus = StealFocus - if (!StealFocus) - window_options += "focus=false;" - timeout = Timeout -/datum/browser/alert/open() - set waitfor = 0 - opentime = world.time - - if (stealfocus) - . = ..(use_onclose = 1) - else - var/focusedwindow = winget(user, null, "focus") - . = ..(use_onclose = 1) - - //waits for the window to show up client side before attempting to un-focus it - //winexists sleeps until it gets a reply from the client, so we don't need to bother sleeping - for (var/i in 1 to 10) - if (user && winexists(user, window_id)) - if (focusedwindow) - winset(user, focusedwindow, "focus=true") - else - winset(user, "mapwindow", "focus=true") - break - if (timeout) - addtimer(CALLBACK(src, .proc/close), timeout) - -/datum/browser/alert/close() - .=..() - opentime = 0 - -/datum/browser/alert/proc/wait() - while (opentime && selectedbutton <= 0 && (!timeout || opentime+timeout > world.time)) - stoplag(1) - -/datum/browser/alert/Topic(href,href_list) +/datum/browser/modal/alert/Topic(href,href_list) if (href_list["close"] || !user || !user.client) opentime = 0 return @@ -210,12 +170,141 @@ User = C.mob else return - var/datum/browser/alert/A = new(User, Message, Title, Button1, Button2, Button3, StealFocus, Timeout) + var/datum/browser/modal/alert/A = new(User, Message, Title, Button1, Button2, Button3, StealFocus, Timeout) A.open() A.wait() if (A.selectedbutton) return A.selectedbutton +/datum/browser/modal + var/opentime = 0 + var/timeout + var/selectedbutton = 0 + var/stealfocus + +/datum/browser/modal/New(nuser, nwindow_id, ntitle = 0, nwidth = 0, nheight = 0, var/atom/nref = null, StealFocus = 1, Timeout = 6000) + ..() + stealfocus = StealFocus + if (!StealFocus) + window_options += "focus=false;" + timeout = Timeout + + +/datum/browser/modal/close() + .=..() + opentime = 0 + +/datum/browser/modal/open() + set waitfor = 0 + opentime = world.time + + if (stealfocus) + . = ..(use_onclose = 1) + else + var/focusedwindow = winget(user, null, "focus") + . = ..(use_onclose = 1) + + //waits for the window to show up client side before attempting to un-focus it + //winexists sleeps until it gets a reply from the client, so we don't need to bother sleeping + for (var/i in 1 to 10) + if (user && winexists(user, window_id)) + if (focusedwindow) + winset(user, focusedwindow, "focus=true") + else + winset(user, "mapwindow", "focus=true") + break + if (timeout) + addtimer(CALLBACK(src, .proc/close), timeout) + +/datum/browser/modal/proc/wait() + while (opentime && selectedbutton <= 0 && (!timeout || opentime+timeout > world.time)) + stoplag(1) + +/datum/browser/modal/listpicker + var/valueslist = list() + +/datum/browser/modal/listpicker/New(User,Message,Title,Button1="Ok",Button2,Button3,StealFocus = 1, Timeout = FALSE,list/values,inputtype="checkbox") + if (!User) + return + + var/output = {"
+ "} + + if (Button2) + output += {""} + + if (Button3) + output += {""} + + output += {"
"} + ..(User, ckey("[User]-[Message]-[Title]-[world.time]-[rand(1,10000)]"), Title, 350, 350, src, StealFocus, Timeout) + set_content(output) + +/datum/browser/modal/listpicker/Topic(href,href_list) + if (href_list["close"] || !user || !user.client) + opentime = 0 + return + if (href_list["button"]) + var/button = text2num(href_list["button"]) + if (button <= 3 && button >= 1) + selectedbutton = button + for (var/item in href_list) + switch(item) + if ("close", "button", "src") + continue + else + valueslist[item] = href_list[item] + opentime = 0 + close() + +/proc/presentpicker(var/mob/User,Message, Title, Button1="Ok", Button2, Button3, StealFocus = 1,Timeout = 6000,list/values, inputtype = "checkbox") + if (!istype(User)) + if (istype(User, /client/)) + var/client/C = User + User = C.mob + else + return + var/datum/browser/modal/listpicker/A = new(User, Message, Title, Button1, Button2, Button3, StealFocus,Timeout, values, inputtype) + A.open() + A.wait() + if (A.selectedbutton) + return list("button" = A.selectedbutton, "values" = A.valueslist) + +/proc/input_bitfield(var/mob/User, title, bitfield, current_value) + if (!User || !(bitfield in GLOB.bitfields)) + return + var/list/pickerlist = list() + for (var/i in GLOB.bitfields[bitfield]) + if (current_value & GLOB.bitfields[bitfield][i]) + pickerlist += list(list("checked" = 1, "value" = GLOB.bitfields[bitfield][i], "name" = i)) + else + pickerlist += list(list("checked" = 0, "value" = GLOB.bitfields[bitfield][i], "name" = i)) + var/list/result = presentpicker(User, "", title, Button1="Save", Button2 = "Cancel", Timeout=FALSE, values = pickerlist) + + if (islist(result)) + if (result["button"] == 2) // If the user pressed the cancel button + return + . = 0 + for (var/flag in result["values"]) + . |= GLOB.bitfields[bitfield][flag] + else + return + // This will allow you to show an icon in the browse window // This is added to mob so that it can be used without a reference to the browser object // There is probably a better place for this... diff --git a/code/datums/datumvars.dm b/code/datums/datumvars.dm index 58b0e81868..59cbf745f8 100644 --- a/code/datums/datumvars.dm +++ b/code/datums/datumvars.dm @@ -433,6 +433,12 @@ else item = "[VV_HTML_ENCODE(name)] = /list ([L.len])" + else if (name in GLOB.bitfields) + var/list/flags = list() + for (var/i in GLOB.bitfields[name]) + if (value & GLOB.bitfields[name][i]) + flags += i + item = "[VV_HTML_ENCODE(name)] = [VV_HTML_ENCODE(jointext(flags, ", "))]" else item = "[VV_HTML_ENCODE(name)] = [VV_HTML_ENCODE(value)]" @@ -453,7 +459,7 @@ src.debug_variables(DAT) else if(href_list["mob_player_panel"]) - if(!check_rights(0)) + if(!check_rights(NONE)) return var/mob/M = locate(href_list["mob_player_panel"]) in GLOB.mob_list @@ -477,7 +483,7 @@ href_list["datumrefresh"] = href_list["godmode"] else if(href_list["mark_object"]) - if(!check_rights(0)) + if(!check_rights(NONE)) return var/datum/D = locate(href_list["mark_object"]) @@ -489,7 +495,7 @@ href_list["datumrefresh"] = href_list["mark_object"] else if(href_list["proc_call"]) - if(!check_rights(0)) + if(!check_rights(NONE)) return var/T = locate(href_list["proc_call"]) @@ -513,7 +519,7 @@ usr.client.object_say(locate(href_list["osay"])) else if(href_list["regenerateicons"]) - if(!check_rights(0)) + if(!check_rights(NONE)) return var/mob/M = locate(href_list["regenerateicons"]) in GLOB.mob_list @@ -550,7 +556,7 @@ //~CARN: for renaming mobs (updates their name, real_name, mind.name, their ID/PDA and datacore records). if(href_list["rename"]) - if(!check_rights(0)) + if(!check_rights(NONE)) return var/mob/M = locate(href_list["rename"]) in GLOB.mob_list @@ -567,7 +573,7 @@ href_list["datumrefresh"] = href_list["rename"] else if(href_list["varnameedit"] && href_list["datumedit"]) - if(!check_rights(0)) + if(!check_rights(NONE)) return var/D = locate(href_list["datumedit"]) @@ -578,7 +584,7 @@ modify_variables(D, href_list["varnameedit"], 1) else if(href_list["varnamechange"] && href_list["datumchange"]) - if(!check_rights(0)) + if(!check_rights(NONE)) return var/D = locate(href_list["datumchange"]) @@ -589,7 +595,7 @@ modify_variables(D, href_list["varnamechange"], 0) else if(href_list["varnamemass"] && href_list["datummass"]) - if(!check_rights(0)) + if(!check_rights(NONE)) return var/datum/D = locate(href_list["datummass"]) @@ -698,7 +704,7 @@ message_admins("[key_name_admin(src)] modified list's contents: SHUFFLE") else if(href_list["give_spell"]) - if(!check_rights(0)) + if(!check_rights(NONE)) return var/mob/M = locate(href_list["give_spell"]) in GLOB.mob_list @@ -710,7 +716,7 @@ href_list["datumrefresh"] = href_list["give_spell"] else if(href_list["remove_spell"]) - if(!check_rights(0)) + if(!check_rights(NONE)) return var/mob/M = locate(href_list["remove_spell"]) in GLOB.mob_list @@ -722,7 +728,7 @@ href_list["datumrefresh"] = href_list["remove_spell"] else if(href_list["give_disease"]) - if(!check_rights(0)) + if(!check_rights(NONE)) return var/mob/M = locate(href_list["give_disease"]) in GLOB.mob_list @@ -757,7 +763,7 @@ href_list["datumrefresh"] = href_list["build_mode"] else if(href_list["drop_everything"]) - if(!check_rights(0)) + if(!check_rights(NONE)) return var/mob/M = locate(href_list["drop_everything"]) in GLOB.mob_list @@ -769,7 +775,7 @@ usr.client.cmd_admin_drop_everything(M) else if(href_list["direct_control"]) - if(!check_rights(0)) + if(!check_rights(NONE)) return var/mob/M = locate(href_list["direct_control"]) in GLOB.mob_list @@ -781,7 +787,7 @@ usr.client.cmd_assume_direct_control(M) else if(href_list["offer_control"]) - if(!check_rights(0)) + if(!check_rights(NONE)) return var/mob/M = locate(href_list["offer_control"]) in GLOB.mob_list @@ -790,6 +796,41 @@ return offer_control(M) + else if (href_list["modarmor"]) + if(!check_rights(NONE)) + return + + var/obj/O = locate(href_list["modarmor"]) + if(!istype(O)) + to_chat(usr, "This can only be used on instances of type /obj") + return + + var/list/pickerlist = list() + var/list/armorlist = O.armor.getList() + + for (var/i in armorlist) + pickerlist += list(list("value" = armorlist[i], "name" = i)) + + var/list/result = presentpicker(usr, "Modify armor", "Modify armor: [O]", Button1="Save", Button2 = "Cancel", Timeout=FALSE, Type = "text", values = pickerlist) + + if (islist(result)) + if (result["button"] == 2) // If the user pressed the cancel button + return + // text2num conveniently returns a null on invalid values + O.armor = O.armor.setRating(melee = text2num(result["values"]["melee"]),\ + bullet = text2num(result["values"]["bullet"]),\ + laser = text2num(result["values"]["laser"]),\ + energy = text2num(result["values"]["energy"]),\ + bomb = text2num(result["values"]["bomb"]),\ + bio = text2num(result["values"]["bio"]),\ + rad = text2num(result["values"]["rad"]),\ + fire = text2num(result["values"]["fire"]),\ + acid = text2num(result["values"]["acid"])) + log_admin("[key_name(usr)] modified the armor on [O] ([O.type]) to melee: [O.armor.melee], bullet: [O.armor.bullet], laser: [O.armor.laser], energy: [O.armor.energy], bomb: [O.armor.bomb], bio: [O.armor.bio], rad: [O.armor.rad], fire: [O.armor.fire], acid: [O.armor.acid]") + message_admins("[key_name_admin(usr)] modified the armor on [O] ([O.type]) to melee: [O.armor.melee], bullet: [O.armor.bullet], laser: [O.armor.laser], energy: [O.armor.energy], bomb: [O.armor.bomb], bio: [O.armor.bio], rad: [O.armor.rad], fire: [O.armor.fire], acid: [O.armor.acid]") + else + return + else if(href_list["delall"]) if(!check_rights(R_DEBUG|R_SERVER)) return @@ -837,7 +878,7 @@ message_admins("[key_name(usr)] deleted all objects of type or subtype of [O_type] ([i] objects deleted) ") else if(href_list["addreagent"]) - if(!check_rights(0)) + if(!check_rights(NONE)) return var/atom/A = locate(href_list["addreagent"]) @@ -927,7 +968,7 @@ href_list["datumrefresh"] = href_list["modtransform"] else if(href_list["rotatedatum"]) - if(!check_rights(0)) + if(!check_rights(NONE)) return var/atom/A = locate(href_list["rotatedatum"]) @@ -943,7 +984,7 @@ href_list["datumrefresh"] = href_list["rotatedatum"] else if(href_list["editorgans"]) - if(!check_rights(0)) + if(!check_rights(NONE)) return var/mob/living/carbon/C = locate(href_list["editorgans"]) in GLOB.mob_list @@ -955,7 +996,7 @@ href_list["datumrefresh"] = href_list["editorgans"] else if(href_list["givetrauma"]) - if(!check_rights(0)) + if(!check_rights(NONE)) return var/mob/living/carbon/C = locate(href_list["givetrauma"]) in GLOB.mob_list @@ -978,7 +1019,7 @@ href_list["datumrefresh"] = href_list["givetrauma"] else if(href_list["curetraumas"]) - if(!check_rights(0)) + if(!check_rights(NONE)) return var/mob/living/carbon/C = locate(href_list["curetraumas"]) in GLOB.mob_list @@ -991,7 +1032,7 @@ href_list["datumrefresh"] = href_list["curetraumas"] else if(href_list["hallucinate"]) - if(!check_rights(0)) + if(!check_rights(NONE)) return var/mob/living/carbon/C = locate(href_list["hallucinate"]) in GLOB.mob_list @@ -1204,7 +1245,7 @@ admin_ticket_log(H, msg) else if(href_list["adjustDamage"] && href_list["mobToDamage"]) - if(!check_rights(0)) + if(!check_rights(NONE)) return var/mob/living/L = locate(href_list["mobToDamage"]) in GLOB.mob_list @@ -1244,4 +1285,3 @@ message_admins(msg) admin_ticket_log(L, msg) href_list["datumrefresh"] = href_list["mobToDamage"] - diff --git a/code/datums/diseases/advance/symptoms/genetics.dm b/code/datums/diseases/advance/symptoms/genetics.dm index af1e460024..c01fccee13 100644 --- a/code/datums/diseases/advance/symptoms/genetics.dm +++ b/code/datums/diseases/advance/symptoms/genetics.dm @@ -10,7 +10,7 @@ DNA Saboteur Fatal Level. Bonus - Cleans the DNA of a person and then randomly gives them a disability. + Cleans the DNA of a person and then randomly gives them a trait. ////////////////////////////////////// */ diff --git a/code/datums/diseases/advance/symptoms/heal.dm b/code/datums/diseases/advance/symptoms/heal.dm index 3f95fd6482..8c884f409c 100644 --- a/code/datums/diseases/advance/symptoms/heal.dm +++ b/code/datums/diseases/advance/symptoms/heal.dm @@ -233,7 +233,7 @@ /datum/symptom/heal/coma/CanHeal(datum/disease/advance/A) var/mob/living/M = A.affected_mob - if(M.status_flags & FAKEDEATH) + if(M.has_trait(TRAIT_FAKEDEATH)) return power else if(M.IsUnconscious() || M.stat == UNCONSCIOUS) return power * 0.9 @@ -249,7 +249,7 @@ /datum/symptom/heal/coma/proc/coma(mob/living/M) if(deathgasp) M.emote("deathgasp") - M.status_flags |= FAKEDEATH + M.fakedeath("regenerative_coma") M.update_stat() M.update_canmove() addtimer(CALLBACK(src, .proc/uncoma, M), 300) @@ -258,7 +258,7 @@ if(!active_coma) return active_coma = FALSE - M.status_flags &= ~FAKEDEATH + M.cure_fakedeath("regenerative_coma") M.update_stat() M.update_canmove() diff --git a/code/datums/diseases/advance/symptoms/sensory.dm b/code/datums/diseases/advance/symptoms/sensory.dm index 911ffd7e26..bb1170bc58 100644 --- a/code/datums/diseases/advance/symptoms/sensory.dm +++ b/code/datums/diseases/advance/symptoms/sensory.dm @@ -86,14 +86,14 @@ if(4, 5) M.restoreEars() - if(M.has_disability(DISABILITY_BLIND, EYE_DAMAGE)) + if(M.has_trait(TRAIT_BLIND, EYE_DAMAGE)) if(prob(20)) to_chat(M, "Your vision slowly returns...") M.cure_blind(EYE_DAMAGE) M.cure_nearsighted(EYE_DAMAGE) M.blur_eyes(35) - else if(M.has_disability(DISABILITY_NEARSIGHT, EYE_DAMAGE)) + else if(M.has_trait(TRAIT_NEARSIGHT, EYE_DAMAGE)) to_chat(M, "You can finally focus your eyes on distant objects.") M.cure_nearsighted(EYE_DAMAGE) M.blur_eyes(10) diff --git a/code/datums/diseases/advance/symptoms/vision.dm b/code/datums/diseases/advance/symptoms/vision.dm index 279ce51417..0b42012f76 100644 --- a/code/datums/diseases/advance/symptoms/vision.dm +++ b/code/datums/diseases/advance/symptoms/vision.dm @@ -61,7 +61,7 @@ Bonus M.become_nearsighted(EYE_DAMAGE) if(prob(eyes.eye_damage - 10 + 1)) if(!remove_eyes) - if(!M.has_disability(DISABILITY_BLIND)) + if(!M.has_trait(TRAIT_BLIND)) to_chat(M, "You go blind!") M.become_blind(EYE_DAMAGE) else diff --git a/code/datums/diseases/transformation.dm b/code/datums/diseases/transformation.dm index c5ac11142f..17aebc4629 100644 --- a/code/datums/diseases/transformation.dm +++ b/code/datums/diseases/transformation.dm @@ -204,12 +204,13 @@ ..() switch(stage) if(1) - if(ishuman(affected_mob) && affected_mob.dna && affected_mob.dna.species.id == "slime") - stage = 5 + if(ishuman(affected_mob) && affected_mob.dna) + if(affected_mob.dna.species.id == "slime" || affected_mob.dna.species.id == "stargazer" || affected_mob.dna.species.id == "lum") + stage = 5 if(3) if(ishuman(affected_mob)) var/mob/living/carbon/human/human = affected_mob - if(human.dna.species.id != "slime") + if(human.dna.species.id != "slime" && affected_mob.dna.species.id != "stargazer" && affected_mob.dna.species.id != "lum") human.set_species(/datum/species/jelly/slime) /datum/disease/transformation/corgi diff --git a/code/datums/embedding_behavior.dm b/code/datums/embedding_behavior.dm new file mode 100644 index 0000000000..f631b9b1c4 --- /dev/null +++ b/code/datums/embedding_behavior.dm @@ -0,0 +1,53 @@ +#define EMBEDID "embed-[embed_chance]-[embedded_fall_chance]-[embedded_pain_chance]-[embedded_pain_multiplier]-[embedded_fall_pain_multiplier]-[embedded_impact_pain_multiplier]-[embedded_unsafe_removal_pain_multiplier]-[embedded_unsafe_removal_time]" + +/proc/getEmbeddingBehavior(embed_chance = EMBED_CHANCE, + embedded_fall_chance = EMBEDDED_ITEM_FALLOUT, + embedded_pain_chance = EMBEDDED_PAIN_CHANCE, + embedded_pain_multiplier = EMBEDDED_PAIN_MULTIPLIER, + embedded_fall_pain_multiplier = EMBEDDED_FALL_PAIN_MULTIPLIER, + embedded_impact_pain_multiplier = EMBEDDED_IMPACT_PAIN_MULTIPLIER, + embedded_unsafe_removal_pain_multiplier = EMBEDDED_UNSAFE_REMOVAL_PAIN_MULTIPLIER, + embedded_unsafe_removal_time = EMBEDDED_UNSAFE_REMOVAL_TIME) + . = locate(EMBEDID) + if (!.) + . = new /datum/embedding_behavior(embed_chance, embedded_fall_chance, embedded_pain_chance, embedded_pain_multiplier, embedded_fall_pain_multiplier, embedded_impact_pain_multiplier, embedded_unsafe_removal_pain_multiplier, embedded_unsafe_removal_time) + +/datum/embedding_behavior + var/embed_chance + var/embedded_fall_chance + var/embedded_pain_chance + var/embedded_pain_multiplier //The coefficient of multiplication for the damage this item does while embedded (this*w_class) + var/embedded_fall_pain_multiplier //The coefficient of multiplication for the damage this item does when falling out of a limb (this*w_class) + var/embedded_impact_pain_multiplier //The coefficient of multiplication for the damage this item does when first embedded (this*w_class) + var/embedded_unsafe_removal_pain_multiplier //The coefficient of multiplication for the damage removing this without surgery causes (this*w_class) + var/embedded_unsafe_removal_time //A time in ticks, multiplied by the w_class. + +/datum/embedding_behavior/New(embed_chance = EMBED_CHANCE, + embedded_fall_chance = EMBEDDED_ITEM_FALLOUT, + embedded_pain_chance = EMBEDDED_PAIN_CHANCE, + embedded_pain_multiplier = EMBEDDED_PAIN_MULTIPLIER, + embedded_fall_pain_multiplier = EMBEDDED_FALL_PAIN_MULTIPLIER, + embedded_impact_pain_multiplier = EMBEDDED_IMPACT_PAIN_MULTIPLIER, + embedded_unsafe_removal_pain_multiplier = EMBEDDED_UNSAFE_REMOVAL_PAIN_MULTIPLIER, + embedded_unsafe_removal_time = EMBEDDED_UNSAFE_REMOVAL_TIME) + src.embed_chance = embed_chance + src.embedded_fall_chance = embedded_fall_chance + src.embedded_pain_chance = embedded_pain_chance + src.embedded_pain_multiplier = embedded_pain_multiplier + src.embedded_fall_pain_multiplier = embedded_fall_pain_multiplier + src.embedded_impact_pain_multiplier = embedded_impact_pain_multiplier + src.embedded_unsafe_removal_pain_multiplier = embedded_unsafe_removal_pain_multiplier + src.embedded_unsafe_removal_time = embedded_unsafe_removal_time + tag = EMBEDID + +/datum/embedding_behavior/proc/setRating(embed_chance, embedded_fall_chance, embedded_pain_chance, embedded_pain_multiplier, embedded_fall_pain_multiplier, embedded_impact_pain_multiplier, embedded_unsafe_removal_pain_multiplier, embedded_unsafe_removal_time) + return getEmbeddingBehavior((isnull(embed_chance) ? src.embed_chance : embed_chance),\ + (isnull(embedded_fall_chance) ? src.embedded_fall_chance : embedded_fall_chance),\ + (isnull(embedded_pain_chance) ? src.embedded_pain_chance : embedded_pain_chance),\ + (isnull(embedded_pain_multiplier) ? src.embedded_pain_multiplier : embedded_pain_multiplier),\ + (isnull(embedded_fall_pain_multiplier) ? src.embedded_fall_pain_multiplier : embedded_fall_pain_multiplier),\ + (isnull(embedded_impact_pain_multiplier) ? src.embedded_impact_pain_multiplier : embedded_impact_pain_multiplier),\ + (isnull(embedded_unsafe_removal_pain_multiplier) ? src.embedded_unsafe_removal_pain_multiplier : embedded_unsafe_removal_pain_multiplier),\ + (isnull(embedded_unsafe_removal_time) ? src.embedded_unsafe_removal_time : embedded_unsafe_removal_time)) + +#undef EMBEDID diff --git a/code/datums/emotes.dm b/code/datums/emotes.dm index b452eff382..1f68a9ec42 100644 --- a/code/datums/emotes.dm +++ b/code/datums/emotes.dm @@ -101,7 +101,7 @@ if(is_type_in_typecache(user, mob_type_blacklist_typecache)) return FALSE if(status_check && !is_type_in_typecache(user, mob_type_ignore_stat_typecache)) - if(user.stat > stat_allowed || (user.status_flags & FAKEDEATH)) + if(user.stat > stat_allowed) to_chat(user, "You cannot [key] while unconscious.") return FALSE if(restraint_check && (user.restrained() || user.buckled)) diff --git a/code/datums/helper_datums/getrev.dm b/code/datums/helper_datums/getrev.dm index b24622df6e..9b431732aa 100644 --- a/code/datums/helper_datums/getrev.dm +++ b/code/datums/helper_datums/getrev.dm @@ -12,9 +12,9 @@ logs = splittext(logs[logs.len - 1], " ") date = unix2date(text2num(logs[5])) commit = logs[2] - log_world("[date]") + log_world("[commit]: [date]") logs = world.file2list(".git/logs/refs/remotes/origin/master") - if(logs) + if(logs.len) originmastercommit = splittext(logs[logs.len - 1], " ")[2] if(testmerge.len) @@ -24,8 +24,9 @@ var/tmcommit = testmerge[line]["commit"] log_world("Test merge active of PR #[line] commit [tmcommit]") SSblackbox.record_feedback("nested tally", "testmerged_prs", 1, list("[line]", "[tmcommit]")) - log_world("Based off origin/master commit [originmastercommit]") - else + if(originmastercommit) + log_world("Based off origin/master commit [originmastercommit]") + else if(originmastercommit) log_world(originmastercommit) /datum/getrev/proc/GetTestMergeInfo(header = TRUE) @@ -55,7 +56,8 @@ var/pc = GLOB.revdata.originmastercommit to_chat(src, "[prefix][copytext(pc, 1, min(length(pc), 7))]") else - to_chat(src, "Revision unknown") + to_chat(src, "Master revision unknown") + to_chat(src, "Revision: [GLOB.revdata.commit]") if(SERVER_TOOLS_PRESENT) to_chat(src, "Server tools version: [SERVER_TOOLS_VERSION]") to_chat(src, "Server tools API version: [SERVER_TOOLS_API_VERSION]") diff --git a/code/datums/holocall.dm b/code/datums/holocall.dm index 75abc87080..f4e0edc67d 100644 --- a/code/datums/holocall.dm +++ b/code/datums/holocall.dm @@ -206,6 +206,8 @@ name = "holorecord disk" desc = "Stores recorder holocalls." icon_state = "holodisk" + obj_flags = UNIQUE_RENAME + materials = list(MAT_METAL = 100, MAT_GLASS = 100) var/datum/holorecord/record //Preset variables var/preset_image_type @@ -220,6 +222,22 @@ QDEL_NULL(record) return ..() +/obj/item/disk/holodisk/attackby(obj/item/W, mob/user, params) + if(istype(W, /obj/item/disk/holodisk)) + var/obj/item/disk/holodisk/holodiskOriginal = W + if (holodiskOriginal.record) + if (!record) + record = new + record.caller_name = holodiskOriginal.record.caller_name + record.caller_image = holodiskOriginal.record.caller_image + record.entries = holodiskOriginal.record.entries.Copy() + record.language = holodiskOriginal.record.language + to_chat(user, "You copy the record from [holodiskOriginal] to [src] by connecting the ports!") + name = holodiskOriginal.name + else + to_chat(user, "[holodiskOriginal] has no record on it!") + ..() + /obj/item/disk/holodisk/proc/build_record() record = new var/list/lines = splittext(preset_record_text,"\n") diff --git a/code/datums/map_config.dm b/code/datums/map_config.dm index c49c851ac4..bda639892b 100644 --- a/code/datums/map_config.dm +++ b/code/datums/map_config.dm @@ -11,6 +11,12 @@ var/minetype = "lavaland" + var/shuttles = list( + "cargo" = "cargo_box", + "ferry" = "ferry_fancy", + "whiteship" = "whiteship_box", + "emergency" = "emergency_box") + //Order matters here. var/list/transition_config = list(CENTCOM = SELFLOOPING, MAIN_STATION = CROSSLINKED, @@ -69,6 +75,12 @@ map_path = json["map_path"] map_file = json["map_file"] + if(islist(json["shuttles"])) + var/list/L = json["shuttles"] + for(var/key in L) + var/value = L[key] + shuttles[key] = value + minetype = json["minetype"] || minetype allow_custom_shuttles = json["allow_custom_shuttles"] != FALSE @@ -81,12 +93,16 @@ defaulted = FALSE -#define CHECK_EXISTS(X) if(!istext(json[X])) { log_world(X + "missing from json!"); return; } +#define CHECK_EXISTS(X) if(!istext(json[X])) { log_world("[##X] missing from json!"); return; } /datum/map_config/proc/ValidateJSON(list/json) CHECK_EXISTS("map_name") CHECK_EXISTS("map_path") CHECK_EXISTS("map_file") + var/shuttles = json["shuttles"] + if(shuttles && !islist(shuttles)) + log_world("json\[shuttles\] is not a list!") + var/path = GetFullMapPath(json["map_path"], json["map_file"]) if(!fexists(path)) log_world("Map file ([path]) does not exist!") diff --git a/code/datums/martial/sleeping_carp.dm b/code/datums/martial/sleeping_carp.dm index aeaf477ef1..54c0bac799 100644 --- a/code/datums/martial/sleeping_carp.dm +++ b/code/datums/martial/sleeping_carp.dm @@ -197,7 +197,7 @@ /obj/item/twohanded/bostaff/attack(mob/target, mob/living/user) add_fingerprint(user) - if((user.has_disability(DISABILITY_CLUMSY)) && prob(50)) + if((user.has_trait(TRAIT_CLUMSY)) && prob(50)) to_chat(user, "You club yourself over the head with [src].") user.Knockdown(60) if(ishuman(user)) diff --git a/code/datums/mutations/body.dm b/code/datums/mutations/body.dm index ee75402e03..418b783b94 100644 --- a/code/datums/mutations/body.dm +++ b/code/datums/mutations/body.dm @@ -85,12 +85,12 @@ /datum/mutation/human/clumsy/on_acquiring(mob/living/carbon/human/owner) if(..()) return - owner.add_disability(DISABILITY_CLUMSY, GENETIC_MUTATION) + owner.add_trait(TRAIT_CLUMSY, GENETIC_MUTATION) /datum/mutation/human/clumsy/on_losing(mob/living/carbon/human/owner) if(..()) return - owner.remove_disability(DISABILITY_CLUMSY, GENETIC_MUTATION) + owner.remove_trait(TRAIT_CLUMSY, GENETIC_MUTATION) //Tourettes causes you to randomly stand in place and shout. @@ -124,12 +124,12 @@ /datum/mutation/human/deaf/on_acquiring(mob/living/carbon/human/owner) if(..()) return - owner.add_disability(DISABILITY_DEAF, GENETIC_MUTATION) + owner.add_trait(TRAIT_DEAF, GENETIC_MUTATION) /datum/mutation/human/deaf/on_losing(mob/living/carbon/human/owner) if(..()) return - owner.remove_disability(DISABILITY_DEAF, GENETIC_MUTATION) + owner.remove_trait(TRAIT_DEAF, GENETIC_MUTATION) //Monified turns you into a monkey. diff --git a/code/datums/mutations/hulk.dm b/code/datums/mutations/hulk.dm index 9340361930..0debfdb6a0 100644 --- a/code/datums/mutations/hulk.dm +++ b/code/datums/mutations/hulk.dm @@ -5,14 +5,14 @@ get_chance = 15 lowest_value = 256 * 12 text_gain_indication = "Your muscles hurt!" - species_allowed = list("human") //no skeleton/lizard hulk + species_allowed = list("fly") //no skeleton/lizard hulk health_req = 25 /datum/mutation/human/hulk/on_acquiring(mob/living/carbon/human/owner) if(..()) return - var/status = CANSTUN | CANKNOCKDOWN | CANUNCONSCIOUS | CANPUSH - owner.status_flags &= ~status + owner.add_trait(TRAIT_STUNIMMUNE, TRAIT_HULK) + owner.add_trait(TRAIT_PUSHIMMUNE, TRAIT_HULK) owner.update_body_parts() /datum/mutation/human/hulk/on_attack_hand(mob/living/carbon/human/owner, atom/target, proximity) @@ -27,7 +27,8 @@ /datum/mutation/human/hulk/on_losing(mob/living/carbon/human/owner) if(..()) return - owner.status_flags |= CANSTUN | CANKNOCKDOWN | CANUNCONSCIOUS | CANPUSH + owner.remove_trait(TRAIT_STUNIMMUNE, TRAIT_HULK) + owner.remove_trait(TRAIT_PUSHIMMUNE, TRAIT_HULK) owner.update_body_parts() /datum/mutation/human/hulk/say_mod(message) diff --git a/code/datums/mutations/speech.dm b/code/datums/mutations/speech.dm index 989a9221b0..3f303535ce 100644 --- a/code/datums/mutations/speech.dm +++ b/code/datums/mutations/speech.dm @@ -30,12 +30,12 @@ /datum/mutation/human/mute/on_acquiring(mob/living/carbon/human/owner) if(..()) return - owner.add_disability(DISABILITY_MUTE, GENETIC_MUTATION) + owner.add_trait(TRAIT_MUTE, GENETIC_MUTATION) /datum/mutation/human/mute/on_losing(mob/living/carbon/human/owner) if(..()) return - owner.remove_disability(DISABILITY_MUTE, GENETIC_MUTATION) + owner.remove_trait(TRAIT_MUTE, GENETIC_MUTATION) /datum/mutation/human/smile diff --git a/code/datums/shuttles.dm b/code/datums/shuttles.dm index 1a0c19f5ab..404c584fd4 100644 --- a/code/datums/shuttles.dm +++ b/code/datums/shuttles.dm @@ -40,6 +40,28 @@ /datum/map_template/shuttle/whiteship port_id = "whiteship" +/datum/map_template/shuttle/labour + port_id = "labour" + can_be_bought = FALSE + +/datum/map_template/shuttle/mining + port_id = "mining" + can_be_bought = FALSE + +/datum/map_template/shuttle/cargo + port_id = "cargo" + can_be_bought = FALSE + +/datum/map_template/shuttle/arrival + port_id = "arrival" + can_be_bought = FALSE + +/datum/map_template/shuttle/infiltrator + port_id = "infiltrator" + can_be_bought = FALSE + + + // Shuttles start here: /datum/map_template/shuttle/emergency/airless @@ -100,7 +122,7 @@ description = "The glorious results of centuries of plasma research done by Nanotrasen employees. This is the reason why you are here. Get on and dance like you're on fire, burn baby burn!" admin_notes = "Flaming hot." credit_cost = 10000 - + /datum/map_template/shuttle/emergency/arena suffix = "arena" name = "The Arena" @@ -218,6 +240,12 @@ admin_notes = "If the crew can solve the puzzle, they will wake the wabbajack statue. It will likely not end well. There's a reason it's boarded up. Maybe they should have just left it alone." credit_cost = 15000 +/datum/map_template/shuttle/emergency/omega + suffix = "omega" + name = "Omegastation Emergency Shuttle" + description = "On the smaller size with a modern design, this shuttle is for the crew who like the cosier things, while still being able to stretch their legs." + credit_cost = 1000 + /datum/map_template/shuttle/ferry/base suffix = "base" name = "transport ferry" @@ -240,13 +268,18 @@ Fulfilling needs you didn't even know you had. We've got EVERYTHING, and something else!" admin_notes = "Currently larger than ferry docking port on Box, will not hit anything, but must be force docked. Trader and ERT bodyguards are not included." +/datum/map_template/shuttle/ferry/fancy + suffix = "fancy" + name = "fancy transport ferry" + description = "At some point, someone upgraded the ferry to have fancier flooring... and less seats." + /datum/map_template/shuttle/whiteship/box suffix = "box" name = "NT Medical Ship" /datum/map_template/shuttle/whiteship/meta suffix = "meta" - name = "NT Recovery White-ship" + name = "NT Recovery Whiteship" /datum/map_template/shuttle/whiteship/pubby suffix = "pubby" @@ -256,6 +289,11 @@ suffix = "cere" name = "NT Construction Vessel" +/datum/map_template/shuttle/whiteship/delta + suffix = "delta" + name = "Unnamed NT Vessel" + admin_notes = "The Delta whiteship doesn't have a name, apparently." + /datum/map_template/shuttle/cargo/box suffix = "box" name = "supply shuttle (Box)" @@ -277,3 +315,43 @@ description = "The CentCom Raven Battlecruiser is currently docked at the CentCom ship bay awaiting a mission, this Battlecruiser has been reassigned as an emergency escape shuttle for currently unknown reasons. The CentCom Raven Battlecruiser should comfortably fit a medium to large crew size crew and is complete with all required facitlities including a top of the range CentCom Medical Bay." admin_notes = "The long way home" credit_cost = 12500 + +/datum/map_template/shuttle/arrival/box + suffix = "box" + name = "arrival shuttle (Box)" + +/datum/map_template/shuttle/cargo/box + suffix = "box" + name = "cargo ferry (Box)" + +/datum/map_template/shuttle/mining/box + suffix = "box" + name = "mining shuttle (Box)" + +/datum/map_template/shuttle/labour/box + suffix = "box" + name = "labour shuttle (Box)" + +/datum/map_template/shuttle/infiltrator/basic + suffix = "basic" + name = "basic syndicate infiltrator" + +/datum/map_template/shuttle/cargo/delta + suffix = "delta" + name = "cargo ferry (Delta)" + +/datum/map_template/shuttle/mining/delta + suffix = "delta" + name = "mining shuttle (Delta)" + +/datum/map_template/shuttle/labour/delta + suffix = "delta" + name = "labour shuttle (Delta)" + +/datum/map_template/shuttle/arrival/delta + suffix = "delta" + name = "arrival shuttle (Delta)" + +/datum/map_template/shuttle/arrival/pubby + suffix = "pubby" + name = "arrival shuttle (Pubby)" diff --git a/code/datums/wires/airlock.dm b/code/datums/wires/airlock.dm index 2690ae5150..5a01227b03 100644 --- a/code/datums/wires/airlock.dm +++ b/code/datums/wires/airlock.dm @@ -28,7 +28,7 @@ var/list/status = list() status += "The door bolts [A.locked ? "have fallen!" : "look up."]" status += "The test light is [A.hasPower() ? "on" : "off"]." - status += "The AI connection light is [A.aiControlDisabled || A.emagged ? "off" : "on"]." + status += "The AI connection light is [A.aiControlDisabled || (A.obj_flags & EMAGGED) ? "off" : "on"]." status += "The check wiring light is [A.safe ? "off" : "on"]." status += "The timer is powered [A.autoclose ? "on" : "off"]." status += "The speed light is [A.normalspeed ? "on" : "off"]." @@ -44,7 +44,7 @@ if(WIRE_BACKUP1, WIRE_BACKUP2) // Pulse to loose backup power. A.loseBackupPower() if(WIRE_OPEN) // Pulse to open door (only works not emagged and ID wire is cut or no access is required). - if(A.emagged) + if(A.obj_flags & EMAGGED) return if(!A.requiresID() || A.check_access(null)) if(A.density) diff --git a/code/game/area/areas/shuttles.dm b/code/game/area/areas/shuttles.dm index b0edb3b420..7d0283e104 100644 --- a/code/game/area/areas/shuttles.dm +++ b/code/game/area/areas/shuttles.dm @@ -140,3 +140,28 @@ /area/shuttle/syndicate_scout name = "Syndicate Scout" blob_allowed = FALSE + +/area/shuttle/caravan + blob_allowed = FALSE + requires_power = TRUE + +/area/shuttle/caravan/syndicate1 + name = "Syndicate Fighter" + +/area/shuttle/caravan/syndicate2 + name = "Syndicate Fighter" + +/area/shuttle/caravan/syndicate3 + name = "Syndicate Drop Ship" + +/area/shuttle/caravan/pirate + name = "Pirate Cutter" + +/area/shuttle/caravan/freighter1 + name = "Small Freighter" + +/area/shuttle/caravan/freighter2 + name = "Tiny Freighter" + +/area/shuttle/caravan/freighter3 + name = "Tiny Freighter" \ No newline at end of file diff --git a/code/game/atoms.dm b/code/game/atoms.dm index 7100dfb439..5500c5bb6f 100644 --- a/code/game/atoms.dm +++ b/code/game/atoms.dm @@ -531,21 +531,41 @@ /atom/proc/return_temperature() return -// Default tool behaviors proc +// Tool behavior procedure. Redirects to tool-specific procs by default. +// You can override it to catch all tool interactions, for use in complex deconstruction procs. +// Just don't forget to return ..() in the end. +/atom/proc/tool_act(mob/living/user, obj/item/tool, tool_type) + switch(tool_type) + if(TOOL_CROWBAR) + return crowbar_act(user, tool) + if(TOOL_MULTITOOL) + return multitool_act(user, tool) + if(TOOL_SCREWDRIVER) + return screwdriver_act(user, tool) + if(TOOL_WRENCH) + return wrench_act(user, tool) + if(TOOL_WIRECUTTER) + return wirecutter_act(user, tool) + if(TOOL_WELDER) + return welder_act(user, tool) -/atom/proc/crowbar_act(mob/user, obj/item/tool) +// Tool-specific behavior procs. To be overridden in subtypes. +/atom/proc/crowbar_act(mob/living/user, obj/item/tool) return -/atom/proc/multitool_act(mob/user, obj/item/tool) +/atom/proc/multitool_act(mob/living/user, obj/item/tool) return -/atom/proc/screwdriver_act(mob/user, obj/item/tool) +/atom/proc/screwdriver_act(mob/living/user, obj/item/tool) return -/atom/proc/wrench_act(mob/user, obj/item/tool) +/atom/proc/wrench_act(mob/living/user, obj/item/tool) return -/atom/proc/wirecutter_act(mob/user, obj/item/tool) +/atom/proc/wirecutter_act(mob/living/user, obj/item/tool) + return + +/atom/proc/welder_act(mob/living/user, obj/item/tool) return /atom/proc/GenerateTag() diff --git a/code/game/data_huds.dm b/code/game/data_huds.dm index 74ac93c023..1adddf7d58 100644 --- a/code/game/data_huds.dm +++ b/code/game/data_huds.dm @@ -87,7 +87,7 @@ //helper for getting the appropriate health status /proc/RoundHealth(mob/living/M) - if(M.stat == DEAD || (M.status_flags & FAKEDEATH)) + if(M.stat == DEAD || (M.has_trait(TRAIT_FAKEDEATH))) return "health-100" //what's our health? it doesn't matter, we're dead, or faking var/maxi_health = M.maxHealth if(iscarbon(M) && M.health < 0) @@ -167,7 +167,7 @@ var/image/holder = hud_list[STATUS_HUD] var/icon/I = icon(icon, icon_state, dir) holder.pixel_y = I.Height() - world.icon_size - if(stat == DEAD || (status_flags & FAKEDEATH)) + if(stat == DEAD || (has_trait(TRAIT_FAKEDEATH))) holder.icon_state = "huddead" else holder.icon_state = "hudhealthy" @@ -177,9 +177,9 @@ var/icon/I = icon(icon, icon_state, dir) var/virus_threat = check_virus() holder.pixel_y = I.Height() - world.icon_size - if(status_flags & XENO_HOST) + if(has_trait(TRAIT_XENO_HOST)) holder.icon_state = "hudxeno" - else if(stat == DEAD || (status_flags & FAKEDEATH)) + else if(stat == DEAD || (has_trait(TRAIT_FAKEDEATH))) holder.icon_state = "huddead" else switch(virus_threat) diff --git a/code/game/gamemodes/blob/blob.dm b/code/game/gamemodes/blob/blob.dm deleted file mode 100644 index ddb87e20f6..0000000000 --- a/code/game/gamemodes/blob/blob.dm +++ /dev/null @@ -1,109 +0,0 @@ -//Few global vars to track the blob -GLOBAL_LIST_EMPTY(blobs) //complete list of all blobs made. -GLOBAL_LIST_EMPTY(blob_cores) -GLOBAL_LIST_EMPTY(overminds) -GLOBAL_LIST_EMPTY(blob_nodes) -GLOBAL_LIST_EMPTY(blobs_legit) //used for win-score calculations, contains only blobs counted for win condition - -#define BLOB_NO_PLACE_TIME 1800 //time, in deciseconds, blobs are prevented from bursting in the gamemode - -/datum/game_mode/blob - name = "blob" - config_tag = "blob" - antag_flag = ROLE_BLOB - false_report_weight = 5 - - required_players = 25 - required_enemies = 1 - recommended_enemies = 1 - - round_ends_with_antag_death = 1 - - announce_span = "green" - announce_text = "Dangerous gelatinous organisms are spreading throughout the station!\n\ - Blobs: Consume the station and spread as far as you can.\n\ - Crew: Fight back the blobs and minimize station damage." - - var/message_sent = FALSE - - var/cores_to_spawn = 1 - var/players_per_core = 25 - var/blob_point_rate = 3 - var/blob_base_starting_points = 80 - - var/blobwincount = 250 - - var/messagedelay_low = 2400 //in deciseconds - var/messagedelay_high = 3600 //blob report will be sent after a random value between these (minimum 4 minutes, maximum 6 minutes) - - var/list/blob_overminds = list() - -/datum/game_mode/blob/pre_setup() - cores_to_spawn = max(round(num_players()/players_per_core, 1), 1) - - var/win_multiplier = 1 + (0.1 * cores_to_spawn) - blobwincount = initial(blobwincount) * cores_to_spawn * win_multiplier - - for(var/j = 0, j < cores_to_spawn, j++) - if (!antag_candidates.len) - break - var/datum/mind/blob = pick(antag_candidates) - blob_overminds += blob - blob.assigned_role = "Blob" - blob.special_role = "Blob" - log_game("[blob.key] (ckey) has been selected as a Blob") - antag_candidates -= blob - - if(!blob_overminds.len) - return 0 - - return 1 - -/datum/game_mode/blob/proc/get_blob_candidates() - var/list/candidates = list() - for(var/mob/living/carbon/human/player in GLOB.player_list) - if(!player.stat && player.mind && !player.mind.special_role && !jobban_isbanned(player, "Syndicate") && (ROLE_BLOB in player.client.prefs.be_special)) - if(age_check(player.client)) - candidates += player - return candidates - -/datum/game_mode/blob/proc/show_message(message) - for(var/datum/mind/blob in blob_overminds) - to_chat(blob.current, message) - -/datum/game_mode/blob/post_setup() - set waitfor = FALSE - - for(var/datum/mind/blob in blob_overminds) - var/mob/camera/blob/B = blob.current.become_overmind(TRUE, round(blob_base_starting_points/blob_overminds.len)) - B.mind.name = B.name - var/turf/T = pick(GLOB.blobstart) - B.forceMove(T) - B.base_point_rate = blob_point_rate - - SSshuttle.registerHostileEnvironment(src) - - // Disable the blob event for this round. - var/datum/round_event_control/blob/B = locate() in SSevents.control - if(B) - B.max_occurrences = 0 // disable the event - - . = ..() - - var/message_delay = rand(messagedelay_low, messagedelay_high) //between 4 and 6 minutes with 2400 low and 3600 high. - - sleep(message_delay) - - send_intercept(1) - message_sent = TRUE - addtimer(CALLBACK(src, .proc/SendSecondIntercept), 24000) - -/datum/game_mode/blob/proc/SendSecondIntercept() - if(!replacementmode) - send_intercept(2) //if the blob has been alive this long, it's time to bomb it - -/datum/game_mode/blob/generate_report() - return "A CMP scientist by the name of [pick("Griff", "Pasteur", "Chamberland", "Buist", "Rivers", "Stanley")] boasted about his corporation's \"finest creation\" - a macrobiological \ - virus capable of self-reproduction and hellbent on consuming whatever it touches. He went on to query Cybersun for permission to utilize the virus in biochemical warfare, to which \ - CMP subsequently gained. Be vigilant for any large organisms rapidly spreading across the station, as they are classified as a level 5 biohazard and critically dangerous. Note that \ - this organism seems to be weak to extreme heat; concentrated fire (such as welding tools and lasers) will be effective against it." diff --git a/code/game/gamemodes/clock_cult/clock_helpers/proselytizer_helpers.dm b/code/game/gamemodes/clock_cult/clock_helpers/proselytizer_helpers.dm deleted file mode 100644 index e103bc2de4..0000000000 --- a/code/game/gamemodes/clock_cult/clock_helpers/proselytizer_helpers.dm +++ /dev/null @@ -1,393 +0,0 @@ -//For the clockwork proselytizer, this proc exists to make it easy to customize what the proselytizer does when hitting something. - -//if a valid target, returns an associated list in this format; -//list("operation_time" = 15, "new_obj_type" = /obj/structure/window/reinforced/clockwork, "power_cost" = 5, "spawn_dir" = dir, "dir_in_new" = TRUE) -//otherwise, return literally any non-list thing but preferably FALSE -//returning TRUE won't produce the "cannot be proselytized" message and will still prevent proselytizing - -/atom/proc/proselytize_vals(mob/living/user, obj/item/clockwork/clockwork_proselytizer/proselytizer) - return FALSE - -//Turf conversion -/turf/closed/wall/proselytize_vals(mob/living/user, obj/item/clockwork/clockwork_proselytizer/proselytizer) //four sheets of metal - return list("operation_time" = 50, "new_obj_type" = /turf/closed/wall/clockwork, "power_cost" = POWER_WALL_TOTAL - (POWER_METAL * 4), "spawn_dir" = SOUTH) - -/turf/closed/wall/mineral/proselytize_vals(mob/living/user, obj/item/clockwork/clockwork_proselytizer/proselytizer) //two sheets of metal - return list("operation_time" = 50, "new_obj_type" = /turf/closed/wall/clockwork, "power_cost" = POWER_WALL_TOTAL - (POWER_METAL * 2), "spawn_dir" = SOUTH) - -/turf/closed/wall/mineral/iron/proselytize_vals(mob/living/user, obj/item/clockwork/clockwork_proselytizer/proselytizer) //two sheets of metal, five rods - return list("operation_time" = 50, "new_obj_type" = /turf/closed/wall/clockwork, "power_cost" = POWER_WALL_TOTAL - (POWER_METAL * 2) - (POWER_ROD * 5), "spawn_dir" = SOUTH) - -/turf/closed/wall/mineral/cult/proselytize_vals(mob/living/user, obj/item/clockwork/clockwork_proselytizer/proselytizer) //no metal - return list("operation_time" = 80, "new_obj_type" = /turf/closed/wall/clockwork, "power_cost" = POWER_WALL_TOTAL, "spawn_dir" = SOUTH) - -/turf/closed/wall/shuttle/proselytize_vals(mob/living/user, obj/item/clockwork/clockwork_proselytizer/proselytizer) //two sheets of metal - return list("operation_time" = 50, "new_obj_type" = /turf/closed/wall/clockwork, "power_cost" = POWER_WALL_TOTAL - (POWER_METAL * 2), "spawn_dir" = SOUTH) - -/turf/closed/wall/r_wall/proselytize_vals(mob/living/user, obj/item/clockwork/clockwork_proselytizer/proselytizer) - return FALSE - -/turf/closed/wall/clockwork/proselytize_vals(mob/living/user, obj/item/clockwork/clockwork_proselytizer/proselytizer) - return list("operation_time" = 50, "new_obj_type" = /turf/open/floor/clockwork, "power_cost" = -POWER_WALL_MINUS_FLOOR, "spawn_dir" = SOUTH) - -/turf/open/floor/proselytize_vals(mob/living/user, obj/item/clockwork/clockwork_proselytizer/proselytizer) - if(floor_tile == /obj/item/stack/tile/plasteel) - new floor_tile(src) - make_plating() - playsound(src, 'sound/items/Crowbar.ogg', 10, 1) //clink - return list("operation_time" = 30, "new_obj_type" = /turf/open/floor/clockwork, "power_cost" = POWER_FLOOR, "spawn_dir" = SOUTH) - -/turf/open/floor/plating/asteroid/proselytize_vals(mob/living/user, obj/item/clockwork/clockwork_proselytizer/proselytizer) - return FALSE - -/turf/open/floor/plating/ashplanet/proselytize_vals(mob/living/user, obj/item/clockwork/clockwork_proselytizer/proselytizer) - return FALSE - -/turf/open/floor/plating/lava/proselytize_vals(mob/living/user, obj/item/clockwork/clockwork_proselytizer/proselytizer) - return FALSE - -/turf/open/floor/clockwork/proselytize_vals(mob/living/user, obj/item/clockwork/clockwork_proselytizer/proselytizer) - if(locate(/obj/structure/table) in src) - return FALSE - if(locate(/obj/structure/falsewall) in contents) - to_chat(user, "There is a false wall in the way, preventing you from proselytizing [src] into a clockwork wall.") - return - if(is_blocked_turf(src, TRUE)) - to_chat(user, "Something is in the way, preventing you from proselytizing [src] into a clockwork wall.") - return TRUE - var/operation_time = 100 - if(proselytizer.speed_multiplier > 0) - operation_time /= proselytizer.speed_multiplier - return list("operation_time" = operation_time, "new_obj_type" = /turf/closed/wall/clockwork, "power_cost" = POWER_WALL_MINUS_FLOOR, "spawn_dir" = SOUTH) - -//False wall conversion -/obj/structure/falsewall/proselytize_vals(mob/living/user, obj/item/clockwork/clockwork_proselytizer/proselytizer) - var/cost = POWER_WALL_MINUS_FLOOR - if(ispath(mineral, /obj/item/stack/sheet/metal)) - cost -= (POWER_METAL * (2 + mineral_amount)) //four sheets of metal, plus an assumption that the girder is also two - else - cost -= (POWER_METAL * 2) //anything that doesn't use metal just has the girder - return list("operation_time" = 50, "new_obj_type" = /obj/structure/falsewall/brass, "power_cost" = cost, "spawn_dir" = SOUTH) - -/obj/structure/falsewall/iron/proselytize_vals(mob/living/user, obj/item/clockwork/clockwork_proselytizer/proselytizer) //two sheets of metal, two rods; special assumption - return list("operation_time" = 50, "new_obj_type" = /obj/structure/falsewall/brass, "power_cost" = POWER_WALL_MINUS_FLOOR - (POWER_METAL * 2) - (POWER_ROD * 2), "spawn_dir" = SOUTH) - -/obj/structure/falsewall/reinforced/proselytize_vals(mob/living/user, obj/item/clockwork/clockwork_proselytizer/proselytizer) - return FALSE - -/obj/structure/falsewall/brass/proselytize_vals(mob/living/user, obj/item/clockwork/clockwork_proselytizer/proselytizer) - return FALSE - -//Metal conversion -/obj/item/stack/tile/plasteel/proselytize_vals(mob/living/user, obj/item/clockwork/clockwork_proselytizer/proselytizer) - if(source) - return FALSE - var/amount_temp = get_amount() - if(proselytizer.metal_to_power) - var/no_delete = FALSE - if(amount_temp < 2) - to_chat(user, "You need at least 2 floor tiles to convert into power.") - return TRUE - if(IsOdd(amount_temp)) - amount_temp-- - no_delete = TRUE - use(amount_temp) - amount_temp *= 12.5 //each tile is 12.5 power so this is 2 tiles to 25 power - return list("operation_time" = 0, "new_obj_type" = /obj/effect/temp_visual/ratvar/beam/itemconsume, "power_cost" = -amount_temp, "spawn_dir" = SOUTH, "no_target_deletion" = no_delete) - if(amount_temp >= 20) - var/sheets_to_make = round(amount_temp * 0.05) //and 20 to 1 brass - var/used = sheets_to_make * 20 - user.visible_message("[user]'s [proselytizer.name] rips into [src], converting it to brass!", \ - "You convert [get_amount() - used > 0 ? "part of ":""][src] into brass...") - playsound(src, 'sound/machines/click.ogg', 50, 1) - playsound(src, 'sound/items/Deconstruct.ogg', 50, 1) - new /obj/item/stack/tile/brass(get_turf(src), sheets_to_make) - use(used) - else - to_chat(user, "You need at least 20 floor tiles to convert into brass.") - return TRUE - -/obj/item/stack/rods/proselytize_vals(mob/living/user, obj/item/clockwork/clockwork_proselytizer/proselytizer) - if(source) - return FALSE - if(proselytizer.metal_to_power) - return list("operation_time" = 0, "new_obj_type" = /obj/effect/temp_visual/ratvar/beam/itemconsume, "power_cost" = -(amount*POWER_ROD), "spawn_dir" = SOUTH) - if(get_amount() >= 10) - var/sheets_to_make = round(get_amount() * 0.1) - var/used = sheets_to_make * 10 - user.visible_message("[user]'s [proselytizer.name] rips into [src], converting it to brass!", \ - "You convert [get_amount() - used > 0 ? "part of ":""][src] into brass...") - playsound(src, 'sound/machines/click.ogg', 50, 1) - playsound(src, 'sound/items/Deconstruct.ogg', 50, 1) - new /obj/item/stack/tile/brass(get_turf(src), sheets_to_make) - use(used) - else - to_chat(user, "You need at least 10 rods to convert into brass.") - return TRUE - -/obj/item/stack/sheet/metal/proselytize_vals(mob/living/user, obj/item/clockwork/clockwork_proselytizer/proselytizer) - if(source) - return FALSE - if(proselytizer.metal_to_power) - return list("operation_time" = 0, "new_obj_type" = /obj/effect/temp_visual/ratvar/beam/itemconsume, "power_cost" = -(amount*POWER_METAL), "spawn_dir" = SOUTH) - if(get_amount() >= 5) - var/sheets_to_make = round(get_amount() * 0.2) - var/used = sheets_to_make * 5 - user.visible_message("[user]'s [proselytizer.name] rips into [src], converting it to brass!", \ - "You convert [get_amount() - used > 0 ? "part of ":""][src] into brass...") - playsound(src, 'sound/machines/click.ogg', 50, 1) - playsound(src, 'sound/items/Deconstruct.ogg', 50, 1) - new /obj/item/stack/tile/brass(get_turf(src), sheets_to_make) - use(used) - else - to_chat(user, "You need at least 5 sheets of metal to convert into brass.") - return TRUE - -/obj/item/stack/sheet/plasteel/proselytize_vals(mob/living/user, obj/item/clockwork/clockwork_proselytizer/proselytizer) - if(source) - return FALSE - if(proselytizer.metal_to_power) - return list("operation_time" = 0, "new_obj_type" = /obj/effect/temp_visual/ratvar/beam/itemconsume, "power_cost" = -(amount*POWER_PLASTEEL), "spawn_dir" = SOUTH) - if(get_amount() >= 2) - var/sheets_to_make = round(get_amount() * 0.5) - var/used = sheets_to_make * 2 - user.visible_message("[user]'s [proselytizer.name] rips into [src], converting it to brass!", \ - "You convert [get_amount() - used > 0 ? "part of ":""][src] into brass...") - playsound(src, 'sound/machines/click.ogg', 50, 1) - playsound(src, 'sound/items/Deconstruct.ogg', 50, 1) - new /obj/item/stack/tile/brass(get_turf(src), sheets_to_make) - use(used) - else - to_chat(user, "You need at least 2 sheets of plasteel to convert into brass.") - return TRUE - -//Brass directly to power -/obj/item/stack/tile/brass/proselytize_vals(mob/living/user, obj/item/clockwork/clockwork_proselytizer/proselytizer) - if(source) - return FALSE - return list("operation_time" = 0, "new_obj_type" = /obj/effect/temp_visual/ratvar/beam/itemconsume, "power_cost" = -(amount*POWER_FLOOR), "spawn_dir" = SOUTH) - -//Airlock conversion -/obj/machinery/door/airlock/proselytize_vals(mob/living/user, obj/item/clockwork/clockwork_proselytizer/proselytizer) - var/doortype = /obj/machinery/door/airlock/clockwork - if(glass) - doortype = /obj/machinery/door/airlock/clockwork/brass - return list("operation_time" = 60, "new_obj_type" = doortype, "power_cost" = POWER_WALL_TOTAL, "spawn_dir" = dir) - -/obj/machinery/door/airlock/clockwork/proselytize_vals(mob/living/user, obj/item/clockwork/clockwork_proselytizer/proselytizer) - return FALSE - -//Table conversion -/obj/structure/table/proselytize_vals(mob/living/user, obj/item/clockwork/clockwork_proselytizer/proselytizer) - var/prosel_cost = POWER_STANDARD - if(framestack == /obj/item/stack/rods) - prosel_cost -= POWER_ROD*framestackamount - else if(framestack == /obj/item/stack/tile/brass) - prosel_cost -= POWER_FLOOR*framestackamount - if(buildstack == /obj/item/stack/sheet/metal) - prosel_cost -= POWER_METAL*buildstackamount - else if(buildstack == /obj/item/stack/sheet/plasteel) - prosel_cost -= POWER_PLASTEEL*buildstackamount - return list("operation_time" = 20, "new_obj_type" = /obj/structure/table/reinforced/brass, "power_cost" = prosel_cost, "spawn_dir" = SOUTH) - -/obj/structure/table/reinforced/brass/proselytize_vals(mob/living/user, obj/item/clockwork/clockwork_proselytizer/proselytizer) - return FALSE - -/obj/structure/table_frame/proselytize_vals(mob/living/user, obj/item/clockwork/clockwork_proselytizer/proselytizer) - var/prosel_cost = POWER_FLOOR - if(framestack == /obj/item/stack/rods) - prosel_cost -= POWER_ROD*framestackamount - else if(framestack == /obj/item/stack/tile/brass) - prosel_cost -= POWER_FLOOR*framestackamount - return list("operation_time" = 10, "new_obj_type" = /obj/structure/table_frame/brass, "power_cost" = prosel_cost, "spawn_dir" = SOUTH) - -/obj/structure/table_frame/brass/proselytize_vals(mob/living/user, obj/item/clockwork/clockwork_proselytizer/proselytizer) - return FALSE - -//Window conversion -/obj/structure/window/proselytize_vals(mob/living/user, obj/item/clockwork/clockwork_proselytizer/proselytizer) - var/windowtype = /obj/structure/window/reinforced/clockwork - var/new_dir = TRUE - var/prosel_time = 15 - var/prosel_cost = POWER_FLOOR - if(fulltile) - windowtype = /obj/structure/window/reinforced/clockwork/fulltile - new_dir = FALSE - prosel_time = 30 - prosel_cost = POWER_STANDARD - if(reinf) - prosel_cost -= POWER_ROD - if(reinf) - prosel_cost -= POWER_ROD - for(var/obj/structure/grille/G in get_turf(src)) - INVOKE_ASYNC(proselytizer, /obj/item/clockwork/clockwork_proselytizer.proc/proselytize, G, user) - return list("operation_time" = prosel_time, "new_obj_type" = windowtype, "power_cost" = prosel_cost, "spawn_dir" = dir, "dir_in_new" = new_dir) - -/obj/structure/window/reinforced/clockwork/proselytize_vals(mob/living/user, obj/item/clockwork/clockwork_proselytizer/proselytizer) - return FALSE - -//Windoor conversion -/obj/machinery/door/window/proselytize_vals(mob/living/user, obj/item/clockwork/clockwork_proselytizer/proselytizer) - return list("operation_time" = 30, "new_obj_type" = /obj/machinery/door/window/clockwork, "power_cost" = POWER_STANDARD, "spawn_dir" = dir, "dir_in_new" = TRUE) - -/obj/machinery/door/window/clockwork/proselytize_vals(mob/living/user, obj/item/clockwork/clockwork_proselytizer/proselytizer) - return FALSE - -//Grille conversion -/obj/structure/grille/proselytize_vals(mob/living/user, obj/item/clockwork/clockwork_proselytizer/proselytizer) - var/grilletype = /obj/structure/grille/ratvar - var/prosel_time = 15 - if(broken) - grilletype = /obj/structure/grille/ratvar/broken - prosel_time = 5 - return list("operation_time" = prosel_time, "new_obj_type" = grilletype, "power_cost" = 0, "spawn_dir" = dir) - -/obj/structure/grille/ratvar/proselytize_vals(mob/living/user, obj/item/clockwork/clockwork_proselytizer/proselytizer) - return FALSE - -//Lattice conversion -/obj/structure/lattice/proselytize_vals(mob/living/user, obj/item/clockwork/clockwork_proselytizer/proselytizer) - return list("operation_time" = 0, "new_obj_type" = /obj/structure/lattice/clockwork, "power_cost" = 0, "spawn_dir" = SOUTH, "no_target_deletion" = TRUE) - -/obj/structure/lattice/clockwork/proselytize_vals(mob/living/user, obj/item/clockwork/clockwork_proselytizer/proselytizer) - ratvar_act() //just in case we're the wrong type for some reason?? - return FALSE - -/obj/structure/lattice/catwalk/proselytize_vals(mob/living/user, obj/item/clockwork/clockwork_proselytizer/proselytizer) - return list("operation_time" = 0, "new_obj_type" = /obj/structure/lattice/catwalk/clockwork, "power_cost" = 0, "spawn_dir" = SOUTH, "no_target_deletion" = TRUE) - -/obj/structure/lattice/catwalk/clockwork/proselytize_vals(mob/living/user, obj/item/clockwork/clockwork_proselytizer/proselytizer) - return FALSE - -//Girder conversion -/obj/structure/girder/proselytize_vals(mob/living/user, obj/item/clockwork/clockwork_proselytizer/proselytizer) - var/prosel_cost = POWER_GEAR - (POWER_METAL * 2) - if(state == GIRDER_REINF_STRUTS || state == GIRDER_REINF) - prosel_cost -= POWER_PLASTEEL - return list("operation_time" = 20, "new_obj_type" = /obj/structure/destructible/clockwork/wall_gear, "power_cost" = prosel_cost, "spawn_dir" = SOUTH) - -//Hitting a clockwork structure will try to repair it. -/obj/structure/destructible/clockwork/proselytize_vals(mob/living/user, obj/item/clockwork/clockwork_proselytizer/proselytizer) - . = TRUE - var/list/repair_values = list() - if(!proselytizer.proselytizer_repair_checks(repair_values, src, user)) - return - user.visible_message("[user]'s [proselytizer.name] starts covering [src] in glowing orange energy...", \ - "You start repairing [src]...") - proselytizer.repairing = src - while(proselytizer && user && src) - if(!do_after(user, repair_values["healing_for_cycle"] * proselytizer.speed_multiplier, target = src, \ - extra_checks = CALLBACK(proselytizer, /obj/item/clockwork/clockwork_proselytizer.proc/proselytizer_repair_checks, repair_values, src, user, TRUE))) - break - obj_integrity = Clamp(obj_integrity + repair_values["healing_for_cycle"], 0, max_integrity) - proselytizer.modify_stored_power(-repair_values["power_required"]) - playsound(src, 'sound/machines/click.ogg', 50, 1) - - if(proselytizer) - proselytizer.repairing = null - if(user) - user.visible_message("[user]'s [proselytizer.name] stops covering [src] with glowing orange energy.", \ - "You finish repairing [src]. It is now at [obj_integrity]/[max_integrity] integrity.") - -//Hitting a sigil of transmission will try to charge from it. -/obj/effect/clockwork/sigil/transmission/proselytize_vals(mob/living/user, obj/item/clockwork/clockwork_proselytizer/proselytizer) - . = TRUE - var/list/charge_values = list() - if(!proselytizer.sigil_charge_checks(charge_values, src, user)) - return - user.visible_message("[user]'s [proselytizer.name] starts draining glowing orange energy from [src]...", \ - "You start recharging your [proselytizer.name]...") - proselytizer.recharging = src - while(proselytizer && user && src) - if(!do_after(user, 10, target = src, extra_checks = CALLBACK(proselytizer, /obj/item/clockwork/clockwork_proselytizer.proc/sigil_charge_checks, charge_values, src, user, TRUE))) - break - modify_charge(charge_values["power_gain"]) - proselytizer.modify_stored_power(charge_values["power_gain"]) - playsound(src, 'sound/effects/light_flicker.ogg', charge_values["power_gain"] * 0.1, 1) - - if(proselytizer) - proselytizer.recharging = null - if(user) - user.visible_message("[user]'s [proselytizer.name] stops draining glowing orange energy from [src].", \ - "You finish recharging your [proselytizer.name]. It now contains [proselytizer.get_power()]W/[proselytizer.get_max_power()]W power.") - -//Proselytizer mob heal proc, to avoid as much copypaste as possible. -/mob/living/proc/proselytizer_heal(mob/living/user, obj/item/clockwork/clockwork_proselytizer/proselytizer) - var/list/repair_values = list() - if(!proselytizer.proselytizer_repair_checks(repair_values, src, user)) - return - user.visible_message("[user]'s [proselytizer.name] starts coverin[src == user ? "g [user.p_them()]" : "g [src]"] in glowing orange energy...", \ - "You start repairin[src == user ? "g yourself" : "g [src]"]...") - proselytizer.repairing = src - while(proselytizer && user && src) - if(!do_after(user, repair_values["healing_for_cycle"] * proselytizer.speed_multiplier, target = src, \ - extra_checks = CALLBACK(proselytizer, /obj/item/clockwork/clockwork_proselytizer.proc/proselytizer_repair_checks, repair_values, src, user, TRUE))) - break - proselytizer_heal_tick(repair_values["healing_for_cycle"]) - proselytizer.modify_stored_power(-repair_values["power_required"]) - playsound(src, 'sound/machines/click.ogg', 50, 1) - - if(proselytizer) - proselytizer.repairing = null - - return TRUE - -/mob/living/proc/proselytizer_heal_tick(amount) - var/static/list/damage_heal_order = list(BRUTE, BURN, TOX, OXY) - heal_ordered_damage(amount, damage_heal_order) - -/mob/living/simple_animal/proselytizer_heal_tick(amount) - adjustHealth(-amount) - -//Hitting a ratvar'd silicon will also try to repair it. -/mob/living/silicon/proselytize_vals(mob/living/user, obj/item/clockwork/clockwork_proselytizer/proselytizer) - . = TRUE - if(health == maxHealth) //if we're at maximum health, prosel the turf under us - return FALSE - else if(proselytizer_heal(user, proselytizer) && user) - user.visible_message("[user]'s [proselytizer.name] stops coverin[src == user ? "g [user.p_them()]" : "g [src]"] with glowing orange energy.", \ - "You finish repairin[src == user ? "g yourself. You are":"g [src]. [p_they(TRUE)] [p_are()]"] now at [abs(HEALTH_THRESHOLD_DEAD - health)]/[abs(HEALTH_THRESHOLD_DEAD - maxHealth)] health.") - -//Same with clockwork mobs. -/mob/living/simple_animal/hostile/clockwork/proselytize_vals(mob/living/user, obj/item/clockwork/clockwork_proselytizer/proselytizer) - . = TRUE - if(health == maxHealth) //if we're at maximum health, prosel the turf under us - return FALSE - else if(proselytizer_heal(user, proselytizer) && user) - user.visible_message("[user]'s [proselytizer.name] stops coverin[src == user ? "g [user.p_them()]" : "g [src]"] with glowing orange energy.", \ - "You finish repairin[src == user ? "g yourself. You are":"g [src]. [p_they(TRUE)] [p_are()]"] now at [health]/[maxHealth] health.") - -//Cogscarabs get special interaction because they're drones and have innate self-heals/revives. -/mob/living/simple_animal/drone/cogscarab/proselytize_vals(mob/living/user, obj/item/clockwork/clockwork_proselytizer/proselytizer) - . = TRUE - if(stat == DEAD) - try_reactivate(user) //if we're at maximum health, prosel the turf under us - return - if(health == maxHealth) - return FALSE - else if(!(flags_1 & GODMODE)) - user.visible_message("[user]'s [proselytizer.name] starts coverin[src == user ? "g [user.p_them()]" : "g [src]"] in glowing orange energy...", \ - "You start repairin[src == user ? "g yourself" : "g [src]"]...") - proselytizer.repairing = src - if(do_after(user, (maxHealth - health)*2, target=src)) - adjustHealth(-maxHealth) - user.visible_message("[user]'s [proselytizer.name] stops coverin[src == user ? "g [user.p_them()]" : "g [src]"] with glowing orange energy.", \ - "You finish repairin[src == user ? "g yourself" : "g [src]"].") - if(proselytizer) - proselytizer.repairing = null - -//Convert shards and gear bits directly to power -/obj/item/clockwork/alloy_shards/proselytize_vals(mob/living/user, obj/item/clockwork/clockwork_proselytizer/proselytizer) - return list("operation_time" = 0, "new_obj_type" = /obj/effect/temp_visual/ratvar/beam/itemconsume, "power_cost" = -POWER_STANDARD, "spawn_dir" = SOUTH) - -/obj/item/clockwork/alloy_shards/medium/gear_bit/large/proselytize_vals(mob/living/user, obj/item/clockwork/clockwork_proselytizer/proselytizer) - return list("operation_time" = 0, "new_obj_type" = /obj/effect/temp_visual/ratvar/beam/itemconsume, "power_cost" = -(CLOCKCULT_POWER_UNIT*0.08), "spawn_dir" = SOUTH) - -/obj/item/clockwork/alloy_shards/large/proselytize_vals(mob/living/user, obj/item/clockwork/clockwork_proselytizer/proselytizer) - return list("operation_time" = 0, "new_obj_type" = /obj/effect/temp_visual/ratvar/beam/itemconsume, "power_cost" = -(CLOCKCULT_POWER_UNIT*0.06), "spawn_dir" = SOUTH) - -/obj/item/clockwork/alloy_shards/medium/proselytize_vals(mob/living/user, obj/item/clockwork/clockwork_proselytizer/proselytizer) - return list("operation_time" = 0, "new_obj_type" = /obj/effect/temp_visual/ratvar/beam/itemconsume, "power_cost" = -(CLOCKCULT_POWER_UNIT*0.04), "spawn_dir" = SOUTH) - -/obj/item/clockwork/alloy_shards/small/proselytize_vals(mob/living/user, obj/item/clockwork/clockwork_proselytizer/proselytizer) - return list("operation_time" = 0, "new_obj_type" = /obj/effect/temp_visual/ratvar/beam/itemconsume, "power_cost" = -(CLOCKCULT_POWER_UNIT*0.02), "spawn_dir" = SOUTH) \ No newline at end of file diff --git a/code/game/gamemodes/clock_cult/clock_mobs/anima_fragment.dm b/code/game/gamemodes/clock_cult/clock_mobs/anima_fragment.dm deleted file mode 100644 index 2df47705a4..0000000000 --- a/code/game/gamemodes/clock_cult/clock_mobs/anima_fragment.dm +++ /dev/null @@ -1,93 +0,0 @@ -//Anima fragment: Low health and high melee damage, but slows down when struck. Created by inserting a soul vessel into an empty fragment. -/mob/living/simple_animal/hostile/clockwork/fragment - name = "anima fragment" - desc = "An ominous humanoid shell with a spinning cogwheel as its head, lifted by a jet of blazing red flame." - icon_state = "anime_fragment" - health = 90 - maxHealth = 90 - speed = -1 - melee_damage_lower = 18 - melee_damage_upper = 18 - attacktext = "crushes" - attack_sound = 'sound/magic/clockwork/anima_fragment_attack.ogg' - loot = list(/obj/item/clockwork/component/replicant_alloy/smashed_anima_fragment) - weather_immunities = list("lava") - movement_type = FLYING - light_range = 2 - light_power = 0.8 - playstyle_string = "You are an anima fragment, a clockwork creation of Ratvar. As a fragment, you have decent health that very gradually regenerates, do \ - decent damage, and move at extreme speed in addition to being immune to extreme temperatures and pressures. Taking damage, and slamming into non-Servants, will temporarily slow you down, however.\n\ - Your goal is to serve the Justiciar and his servants in any way you can. You yourself are one of these servants, and will be able to utilize anything they can, assuming it doesn't require \ - opposable thumbs." - var/movement_delay_time //how long the fragment is slowed after being hit - -/mob/living/simple_animal/hostile/clockwork/fragment/Initialize() - . = ..() - if(prob(1)) - name = "anime fragment" - desc = "I-it's not like I want to show you the light of the Justiciar or anything, B-BAKA!" - -/mob/living/simple_animal/hostile/clockwork/fragment/Life() - ..() - if(GLOB.ratvar_awakens) - adjustHealth(-5) - else if(movement_delay_time > world.time) - adjustHealth(-0.2) - else - adjustHealth(-1) - -/mob/living/simple_animal/hostile/clockwork/fragment/Stat() - ..() - if(statpanel("Status") && movement_delay_time > world.time && !GLOB.ratvar_awakens) - stat(null, "Movement delay(seconds): [max(round((movement_delay_time - world.time)*0.1, 0.1), 0)]") - -/mob/living/simple_animal/hostile/clockwork/fragment/death(gibbed) - visible_message("[src]'s flame jets cut out as it falls to the floor with a tremendous crash.", \ - "Your gears seize up. Your flame jets flicker out. Your soul vessel belches smoke as you helplessly crash down.") - ..() - -/mob/living/simple_animal/hostile/clockwork/fragment/Process_Spacemove(movement_dir = 0) - return 1 - -/mob/living/simple_animal/hostile/clockwork/fragment/Collide(atom/movable/AM) - . = ..() - if(movement_delay_time <= world.time && next_move <= world.time && isliving(AM) && !is_servant_of_ratvar(AM)) - var/mob/living/L = AM - if(L.stat) //we don't want to attack them if they're unconscious or dead because that feels REALLY BAD for the player - return - var/previousattacktext = attacktext - attacktext = "slams into" - UnarmedAttack(L) - attacktext = previousattacktext - changeNext_move(CLICK_CD_MELEE) - if(!GLOB.ratvar_awakens) - adjustHealth(4) - adjust_movement_delay(10) //with the above damage, total of 20 movement delay plus speed = 0 due to damage - -/mob/living/simple_animal/hostile/clockwork/fragment/emp_act(severity) - adjust_movement_delay(50/severity) - -/mob/living/simple_animal/hostile/clockwork/fragment/movement_delay() - . = ..() - if(movement_delay_time > world.time && !GLOB.ratvar_awakens) - . += min((movement_delay_time - world.time) * 0.1, 10) //the more delay we have, the slower we go - -/mob/living/simple_animal/hostile/clockwork/fragment/adjustHealth(amount) - . = ..() - if(amount > 0) - adjust_movement_delay(amount*2.5) - -/mob/living/simple_animal/hostile/clockwork/fragment/proc/adjust_movement_delay(amount) - if(GLOB.ratvar_awakens) //if ratvar is up we ignore movement delay - movement_delay_time = 0 - else if(movement_delay_time > world.time) - movement_delay_time = movement_delay_time + amount - else - movement_delay_time = world.time + amount - -/mob/living/simple_animal/hostile/clockwork/fragment/updatehealth() - ..() - if(health == maxHealth) - speed = initial(speed) - else - speed = 0 //slow down if damaged at all diff --git a/code/game/gamemodes/clock_cult/clock_scriptures/scripture_revenant.dm b/code/game/gamemodes/clock_cult/clock_scriptures/scripture_revenant.dm deleted file mode 100644 index ae54b903b6..0000000000 --- a/code/game/gamemodes/clock_cult/clock_scriptures/scripture_revenant.dm +++ /dev/null @@ -1,211 +0,0 @@ -////////////// -// REVENANT // -////////////// - -//Invoke Inath-neq, the Resonant Cogwheel: Grants invulnerability and stun immunity to everyone nearby for 15 seconds. -/datum/clockwork_scripture/invoke_inathneq - descname = "Area Invulnerability" - name = "Invoke Inath-neq, the Resonant Cogwheel" - desc = "Taps the limitless power of Inath-neq, one of Ratvar's four generals. The benevolence of Inath-Neq will grant complete invulnerability to all Servants in range for fifteen seconds." - invocations = list("I call upon you, Vanguard!!", "Let the Resonant Cogs turn once more!!", "Grant me and my allies the strength to vanquish our foes!!") - channel_time = 100 - consumed_components = list(VANGUARD_COGWHEEL = 10, GEIS_CAPACITOR = 3, REPLICANT_ALLOY = 3, HIEROPHANT_ANSIBLE = 3) - usage_tip = "Servants affected by this scripture are only weak to things that outright destroy bodies, such as bombs or the singularity." - tier = SCRIPTURE_REVENANT - primary_component = VANGUARD_COGWHEEL - sort_priority = 2 - -/datum/clockwork_scripture/invoke_inathneq/check_special_requirements() - if(!slab.no_cost && GLOB.clockwork_generals_invoked["inath-neq"] > world.time) - to_chat(invoker, "\"[text2ratvar("I cannot lend you my aid yet, champion. Please be careful.")]\"\n\ - Inath-neq has already been invoked recently! You must wait several minutes before calling upon the Resonant Cogwheel.") - return FALSE - return TRUE - -/datum/clockwork_scripture/invoke_inathneq/scripture_effects() - new/obj/effect/clockwork/general_marker/inathneq(get_turf(invoker)) - hierophant_message("[text2ratvar("Vanguard: \"I lend you my aid, champions! Let glory guide your blows!")]\"", FALSE, invoker) - GLOB.clockwork_generals_invoked["inath-neq"] = world.time + CLOCKWORK_GENERAL_COOLDOWN - playsound(invoker, 'sound/magic/clockwork/invoke_general.ogg', 50, 0) - if(invoker.real_name == "Lucio") - clockwork_say(invoker, text2ratvar("Aww, let's break it DOWN!!")) - for(var/mob/living/L in range(7, invoker)) - if(!is_servant_of_ratvar(L) || L.stat == DEAD) - continue - L.apply_status_effect(STATUS_EFFECT_INATHNEQS_ENDOWMENT) - return TRUE - - -//Invoke Sevtug, the Formless Pariah: Causes massive global hallucinations, braindamage, confusion, and dizziness to all humans on the same zlevel. -/datum/clockwork_scripture/invoke_sevtug - descname = "Global Hallucination" - name = "Invoke Sevtug, the Formless Pariah" - desc = "Taps the limitless power of Sevtug, one of Ratvar's four generals. The mental manipulation ability of the Pariah allows its wielder to cause mass hallucinations and confusion \ - for all non-servant humans on the same z-level as them. The power of this scripture falls off somewhat with distance, and certain things may reduce its effects." - invocations = list("I call upon you, Fright!!", "Let your power shatter the sanity of the weak-minded!!", "Let your tendrils hold sway over all!!") - channel_time = 150 - consumed_components = list(BELLIGERENT_EYE = 6, VANGUARD_COGWHEEL = 6, GEIS_CAPACITOR = 10, HIEROPHANT_ANSIBLE = 6) - usage_tip = "Causes brain damage, hallucinations, confusion, and dizziness in massive amounts." - tier = SCRIPTURE_REVENANT - sort_priority = 3 - primary_component = GEIS_CAPACITOR - invokers_required = 3 - multiple_invokers_used = TRUE - var/static/list/mindbreaksayings = list("\"Oh, great. I get to shatter some minds.\"", "\"More minds to crush.\"", \ - "\"Really, this is almost boring.\"", "\"None of these minds have anything interesting in them.\"", "\"Maybe I can instill a little bit of terror in this one.\"", \ - "\"What a waste of my power.\"", "\"I'm sure I could just control these minds instead, but they never ask.\"") - -/datum/clockwork_scripture/invoke_sevtug/check_special_requirements() - if(!slab.no_cost && GLOB.clockwork_generals_invoked["sevtug"] > world.time) - to_chat(invoker, "\"[text2ratvar("Is it really so hard - even for a simpleton like you - to grasp the concept of waiting?")]\"\n\ - Sevtug has already been invoked recently! You must wait several minutes before calling upon the Formless Pariah.") - return FALSE - if(!slab.no_cost && GLOB.ratvar_awakens) - to_chat(invoker, "\"[text2ratvar("Do you really think anything I can do right now will compare to Engine's power?")]\"\n\ - Sevtug will not grant his power while Ratvar's dwarfs his own!") - return FALSE - return TRUE - -/datum/clockwork_scripture/invoke_sevtug/scripture_effects() - new/obj/effect/clockwork/general_marker/sevtug(get_turf(invoker)) - hierophant_message("[text2ratvar("Fright: \"I heed your call, idiots. Get going and use this chance while it lasts!")]\"", FALSE, invoker) - GLOB.clockwork_generals_invoked["sevtug"] = world.time + GLOBAL_CLOCKWORK_GENERAL_COOLDOWN - playsound(invoker, 'sound/magic/clockwork/invoke_general.ogg', 50, 0) - var/hum = get_sfx('sound/effects/screech.ogg') //like playsound, same sound for everyone affected - var/turf/T = get_turf(invoker) - for(var/mob/living/carbon/human/H in GLOB.living_mob_list) - if(H.z == invoker.z && !is_servant_of_ratvar(H)) - var/distance = 0 - distance += get_dist(T, get_turf(H)) - var/visualsdistance = max(150 - distance, 5) - var/minordistance = max(200 - distance*2, 5) - var/majordistance = max(150 - distance*3, 5) - if(H.null_rod_check()) - to_chat(H, "[text2ratvar("Oh, a void weapon. How annoying, I may as well not bother.")]\n\ - Your holy weapon glows a faint orange, defending your mind!") - continue - else if(H.isloyal()) - visualsdistance = round(visualsdistance * 0.5) //half effect for shielded targets - minordistance = round(minordistance * 0.5) - majordistance = round(majordistance * 0.5) - to_chat(H, "[text2ratvar("Oh, look, a mindshield. Cute, I suppose I'll humor it.")]") - else if(prob(visualsdistance)) - to_chat(H, "[text2ratvar(pick(mindbreaksayings))]") - H.playsound_local(T, hum, visualsdistance, 1) - flash_color(H, flash_color="#AF0AAF", flash_time=visualsdistance*10) - H.dizziness = minordistance + H.dizziness - H.hallucination = minordistance + H.hallucination - H.confused = majordistance + H.confused - H.setBrainLoss(majordistance + H.getBrainLoss()) - return TRUE - - -//Invoke Nezbere, the Brass Eidolon: Invokes Nezbere, bolstering the strength of many clockwork items for one minute. -/datum/clockwork_scripture/invoke_nezbere - descname = "Global Structure Buff" - name = "Invoke Nezbere, the Brass Eidolon" - desc = "Taps the limitless power of Nezbere, one of Ratvar's four generals. The restless toil of the Eidolon will empower a wide variety of clockwork apparatus for a full minute - notably, \ - replica fabricators will charge very rapidly." - invocations = list("I call upon you, Armorer!!", "Let your machinations reign on this miserable station!!", "Let your power flow through the tools of your master!!") - channel_time = 150 - consumed_components = list(BELLIGERENT_EYE = 6, VANGUARD_COGWHEEL = 6, GEIS_CAPACITOR = 6, REPLICANT_ALLOY = 10) - usage_tip = "Ocular wardens will become empowered, tinkerer's daemons will produce twice as quickly, \ - and interdiction lenses, mania motors, tinkerer's daemons, and clockwork obelisks will all require no power." - tier = SCRIPTURE_REVENANT - primary_component = REPLICANT_ALLOY - sort_priority = 4 - invokers_required = 3 - multiple_invokers_used = TRUE - -/datum/clockwork_scripture/invoke_nezbere/check_special_requirements() - if(!slab.no_cost && GLOB.clockwork_generals_invoked["nezbere"] > world.time) - to_chat(invoker, "\"[text2ratvar("Not just yet, friend. Patience is a virtue.")]\"\n\ - Nezbere has already been invoked recently! You must wait several minutes before calling upon the Brass Eidolon.") - return FALSE - if(!slab.no_cost && GLOB.ratvar_awakens) - to_chat(invoker, "\"[text2ratvar("Our master is here already. You do not require my help, friend.")]\"\n\ - There is no need for Nezbere's assistance while Ratvar is risen!") - return FALSE - return TRUE - -/datum/clockwork_scripture/invoke_nezbere/scripture_effects() - new/obj/effect/clockwork/general_marker/nezbere(get_turf(invoker)) - hierophant_message("[text2ratvar("Armorer: \"I heed your call, champions. May your artifacts bring ruin upon the heathens that oppose our master!")]\"", FALSE, invoker) - GLOB.clockwork_generals_invoked["nezbere"] = world.time + GLOBAL_CLOCKWORK_GENERAL_COOLDOWN - playsound(invoker, 'sound/magic/clockwork/invoke_general.ogg', 50, 0) - GLOB.nezbere_invoked++ - for(var/obj/O in GLOB.all_clockwork_objects) - O.ratvar_act() - addtimer(CALLBACK(GLOBAL_PROC, /proc/reset_nezbere_invocation), 600) - return TRUE - -/proc/reset_nezbere_invocation() - GLOB.nezbere_invoked-- - for(var/obj/O in GLOB.all_clockwork_objects) - O.ratvar_act() - - -//Invoke Nzcrentr, the Eternal Thunderbolt: Imbues an immense amount of energy into the invoker. After several seconds, everyone near the invoker will be hit with a devastating lightning blast. -/datum/clockwork_scripture/invoke_nzcrentr - descname = "Area Lightning Blast" - name = "Invoke Nzcrentr, the Eternal Thunderbolt" - desc = "Taps the limitless power of Nzcrentr, one of Ratvar's four generals. Nzcrentr will grant you a tiny fraction of its boundless power. After several seconds, all non-Servants near you \ - will be struck by devastating lightning bolts." - invocations = list("I call upon you, Amperage!!", "Let your energy flow through me!!", "Let your boundless power shatter stars!!") - channel_time = 100 - consumed_components = list(BELLIGERENT_EYE = 3, GEIS_CAPACITOR = 3, REPLICANT_ALLOY = 3, HIEROPHANT_ANSIBLE = 10) - usage_tip = "Struck targets will also be knocked down for about sixteen seconds." - tier = SCRIPTURE_REVENANT - primary_component = HIEROPHANT_ANSIBLE - sort_priority = 5 - -/datum/clockwork_scripture/invoke_nzcrentr/check_special_requirements() - if(!slab.no_cost && GLOB.clockwork_generals_invoked["nzcrentr"] > world.time) - to_chat(invoker, "\"[text2ratvar("The boss says you have to wait. Hey, do you think he would mind if I killed you? ...He would? Ok.")]\"\n\ - Nzcrentr has already been invoked recently! You must wait several minutes before calling upon the Eternal Thunderbolt.") - return FALSE - return TRUE - -/datum/clockwork_scripture/invoke_nzcrentr/scripture_effects() - new/obj/effect/clockwork/general_marker/nzcrentr(get_turf(invoker)) - GLOB.clockwork_generals_invoked["nzcrentr"] = world.time + CLOCKWORK_GENERAL_COOLDOWN - hierophant_message("[text2ratvar("Amperage: \"[invoker.real_name] has called forth my power. Hope [invoker.p_they()] [invoker.p_do()] not shatter under it!")]\"", FALSE, invoker) - invoker.visible_message("[invoker] begins to radiate a blinding light!", \ - "\"[text2ratvar("The boss says it's okay to do this. Don't blame me if you die from it.")]\"\n\ - You feel limitless power surging through you!") - playsound(invoker, 'sound/magic/clockwork/invoke_general.ogg', 50, 0) - sleep(2) - playsound(invoker, 'sound/magic/lightning_chargeup.ogg', 100, 0) - var/oldcolor = invoker.color - animate(invoker, color = list(rgb(255, 255, 255), rgb(255, 255, 255), rgb(255, 255, 255), rgb(0,0,0)), time = 88) //Gradual advancement to extreme brightness - sleep(88) - if(invoker) - invoker.visible_message("Massive bolts of energy emerge from across [invoker]'s body!", \ - "\"[text2ratvar("I told you you wouldn't be able to handle it.")]\"\n\ - TOO... MUCH! CAN'T... TAKE IT!") - playsound(invoker, 'sound/magic/lightningbolt.ogg', 100, 0) - if(invoker.stat == CONSCIOUS) - animate(invoker, color = oldcolor, time = 10) - addtimer(CALLBACK(invoker, /atom/proc/update_atom_colour), 10) - for(var/mob/living/L in view(7, invoker)) - if(is_servant_of_ratvar(L) || L.null_rod_check()) - continue - invoker.Beam(L, icon_state = "nzcrentrs_power", time = 10) - var/randdamage = rand(40, 60) - if(iscarbon(L)) - L.electrocute_act(randdamage, "Nzcrentr's power", 1, randdamage) - else - L.adjustFireLoss(randdamage) - L.visible_message( - "[L] was shocked by Nzcrentr's power!", \ - "You feel a powerful shock coursing through your body!", \ - "You hear a heavy electrical crack." \ - ) - L.Weaken(8) - playsound(L, 'sound/magic/LightningShock.ogg', 50, 1) - else - playsound(invoker, 'sound/magic/Disintegrate.ogg', 50, 1) - invoker.gib() - return TRUE - else - return FALSE diff --git a/code/game/gamemodes/clock_cult/clock_structures/interdiction_lens.dm b/code/game/gamemodes/clock_cult/clock_structures/interdiction_lens.dm deleted file mode 100644 index 5066b2448a..0000000000 --- a/code/game/gamemodes/clock_cult/clock_structures/interdiction_lens.dm +++ /dev/null @@ -1,143 +0,0 @@ -//Interdiction Lens: A powerful artifact that constantly disrupts electronics and drains power but, if it fails to find something to disrupt, turns off. -/obj/structure/destructible/clockwork/powered/interdiction_lens - name = "interdiction lens" - desc = "An ominous, double-pronged brass totem. There's a strange gemstone clasped between the pincers." - clockwork_desc = "A powerful totem that constantly drains nearby electronics and funnels the power drained into nearby Sigils of Transmission or the area's APC." - icon_state = "interdiction_lens" - construction_value = 20 - active_icon = "interdiction_lens_active" - inactive_icon = "interdiction_lens" - unanchored_icon = "interdiction_lens_unwrenched" - break_message = "The lens flares a blinding violet before the totem beneath it shatters!" - break_sound = 'sound/effects/glassbr3.ogg' - debris = list(/obj/item/clockwork/alloy_shards/small = 2, \ - /obj/item/clockwork/alloy_shards/large = 2, \ - /obj/item/clockwork/component/belligerent_eye/lens_gem = 1) - var/recharging = 0 //world.time when the lens was last used - var/recharge_time = 1200 //if it drains no power and affects no objects, it turns off for two minutes - var/disabled = FALSE //if it's actually usable - var/interdiction_range = 14 //how large an area it drains and disables in - var/static/list/rage_messages = list("...", "Disgusting.", "Die.", "Foul.", "Worthless.", "Mortal.", "Unfit.", "Weak.", "Fragile.", "Useless.", "Leave my sight!") - -/obj/structure/destructible/clockwork/powered/interdiction_lens/Initialize() - . = ..() - update_current_glow() - -/obj/structure/destructible/clockwork/powered/interdiction_lens/examine(mob/user) - ..() - to_chat(user, "Its gemstone [recharging > world.time ? "has been breached by writhing tendrils of blackness that cover the totem" \ - : "vibrates in place and thrums with power"].") - if(is_servant_of_ratvar(user) || isobserver(user)) - to_chat(user, "If it fails to drain any electronics or has nothing to return power to, it will disable itself for [round(recharge_time/600, 1)] minutes.") - -/obj/structure/destructible/clockwork/powered/interdiction_lens/update_anchored(mob/user, do_damage) - ..() - update_current_glow() - -/obj/structure/destructible/clockwork/powered/interdiction_lens/toggle(fast_process, mob/living/user) - . = ..() - update_current_glow() - -/obj/structure/destructible/clockwork/powered/interdiction_lens/proc/update_current_glow() - if(active) - if(disabled) - set_light(2, 1.6, "#151200") - else - set_light(2, 1.6, "#EE54EE") - else - if(anchored) - set_light(1.4, 0.8, "#F42B9D") - else - set_light(0) - -/obj/structure/destructible/clockwork/powered/interdiction_lens/attack_hand(mob/living/user) - if(user.canUseTopic(src, !issilicon(user), NO_DEXTERY)) - if(disabled) - to_chat(user, "As you place your hand on the gemstone, cold tendrils of black matter crawl up your arm. You quickly pull back.") - return 0 - toggle(0, user) - -/obj/structure/destructible/clockwork/powered/interdiction_lens/forced_disable(bad_effects) - if(disabled || !anchored) - return FALSE - if(!active) - toggle(0) - visible_message("The gemstone suddenly turns horribly dark, writhing tendrils covering it!") - recharging = world.time + recharge_time - flick("interdiction_lens_discharged", src) - icon_state = "interdiction_lens_inactive" - disabled = TRUE - update_current_glow() - return TRUE - -/obj/structure/destructible/clockwork/powered/interdiction_lens/process() - . = ..() - if(recharging > world.time) - return - if(disabled) - visible_message("The writhing tendrils return to the gemstone, which begins to glow with power!") - flick("interdiction_lens_recharged", src) - disabled = FALSE - toggle(0) - else - if(!check_apc_and_sigils()) - forced_disable() - return - var/successfulprocess = FALSE - var/power_drained = 0 - var/list/atoms_to_test = list() - for(var/A in spiral_range_turfs(interdiction_range, src)) - var/turf/T = A - for(var/M in T) - atoms_to_test |= M - - CHECK_TICK - - var/unconverted_ai = FALSE - var/efficiency = get_efficiency_mod() - var/rage_modifier = get_efficiency_mod(TRUE) - - for(var/i in GLOB.ai_list) - var/mob/living/silicon/ai/AI = i - if(AI && AI.stat != DEAD && !is_servant_of_ratvar(AI)) - unconverted_ai = TRUE - - for(var/M in atoms_to_test) - var/atom/movable/A = M - if(!A || QDELETED(A) || A == target_apc) - continue - power_drained += Floor(A.power_drain(TRUE) * efficiency, MIN_CLOCKCULT_POWER) - - if(prob(1 * rage_modifier)) - to_chat(A, "\"[text2ratvar(pick(rage_messages))]\"") - - if(prob(100 * (efficiency * efficiency))) - if(istype(A, /obj/machinery/camera) && unconverted_ai) - var/obj/machinery/camera/C = A - if(C.isEmpProof() || !C.status) - continue - successfulprocess = TRUE - if(C.emped) - continue - C.emp_act(EMP_HEAVY) - else if(istype(A, /obj/item/device/radio)) - var/obj/item/device/radio/O = A - successfulprocess = TRUE - if(O.emped || !O.on) - continue - O.emp_act(EMP_HEAVY) - else if((isliving(A) && !is_servant_of_ratvar(A)) || istype(A, /obj/structure/closet) || istype(A, /obj/item/storage)) //other things may have radios in them but we don't care - for(var/obj/item/device/radio/O in A.GetAllContents()) - successfulprocess = TRUE - if(O.emped || !O.on) - continue - O.emp_act(EMP_HEAVY) - - CHECK_TICK - - if(power_drained && power_drained >= MIN_CLOCKCULT_POWER && return_power(power_drained)) - successfulprocess = TRUE - playsound(src, 'sound/items/pshoom.ogg', 50 * efficiency, 1, interdiction_range-7, 1) - - if(!successfulprocess) - forced_disable() diff --git a/code/game/gamemodes/clock_cult/clock_structures/tinkerers_cache.dm b/code/game/gamemodes/clock_cult/clock_structures/tinkerers_cache.dm deleted file mode 100644 index cd33cf7adc..0000000000 --- a/code/game/gamemodes/clock_cult/clock_structures/tinkerers_cache.dm +++ /dev/null @@ -1,116 +0,0 @@ -//Tinkerer's cache: Stores components for later use. -/obj/structure/destructible/clockwork/cache - name = "tinkerer's cache" - desc = "A large brass spire with a flaming hole in its center." - clockwork_desc = "A brass container capable of storing a large amount of components.\n\ - Shares components with all other caches and will gradually generate components if near a Clockwork Wall." - icon_state = "tinkerers_cache" - unanchored_icon = "tinkerers_cache_unwrenched" - construction_value = 10 - break_message = "The cache's fire winks out before it falls in on itself!" - max_integrity = 80 - light_color = "#C2852F" - var/wall_generation_cooldown - var/turf/closed/wall/clockwork/linkedwall //if we've got a linked wall and are producing - var/static/linked_caches = 0 //how many caches are linked to walls; affects how fast components are produced - -/obj/structure/destructible/clockwork/cache/Initialize() - . = ..() - START_PROCESSING(SSobj, src) - GLOB.clockwork_caches++ - update_slab_info() - set_light(2, 0.7) - -/obj/structure/destructible/clockwork/cache/Destroy() - GLOB.clockwork_caches-- - update_slab_info() - STOP_PROCESSING(SSobj, src) - if(linkedwall) - linked_caches-- - linkedwall.linkedcache = null - linkedwall = null - return ..() - -/obj/structure/destructible/clockwork/cache/process() - if(!anchored) - if(linkedwall) - linked_caches-- - linkedwall.linkedcache = null - linkedwall = null - return - for(var/turf/closed/wall/clockwork/C in range(4, src)) - if(!C.linkedcache && !linkedwall) - linked_caches++ - C.linkedcache = src - linkedwall = C - wall_generation_cooldown = world.time + get_production_time() - visible_message("[src] starts to whirr in the presence of [C]...") - break - if(linkedwall && wall_generation_cooldown <= world.time) - wall_generation_cooldown = world.time + get_production_time() - var/component_id = generate_cache_component(null, src) - playsound(linkedwall, 'sound/magic/clockwork/fellowship_armory.ogg', rand(15, 20), 1, -3, 1, 1) - visible_message("Something cl[pick("ank", "ink", "unk", "ang")]s around inside of [src]...") - -/obj/structure/destructible/clockwork/cache/attackby(obj/item/I, mob/living/user, params) - if(!is_servant_of_ratvar(user)) - return ..() - if(istype(I, /obj/item/clockwork/component)) - var/obj/item/clockwork/component/C = I - if(!anchored) - to_chat(user, "[src] needs to be secured to place [C] into it!") - else - GLOB.clockwork_component_cache[C.component_id]++ - update_slab_info() - to_chat(user, "You add [C] to [src].") - user.drop_item() - qdel(C) - return 1 - else if(istype(I, /obj/item/clockwork/slab)) - var/obj/item/clockwork/slab/S = I - if(!anchored) - to_chat(user, "[src] needs to be secured to offload your slab's components into it!") - else - for(var/i in S.stored_components) - GLOB.clockwork_component_cache[i] += S.stored_components[i] - S.stored_components[i] = 0 - update_slab_info() - user.visible_message("[user] empties [S] into [src].", "You offload your slab's components into [src].") - return 1 - else - return ..() - -/obj/structure/destructible/clockwork/cache/update_anchored(mob/user, do_damage) - ..() - if(anchored) - set_light(2, 0.7) - else - set_light(0) - -/obj/structure/destructible/clockwork/cache/attack_hand(mob/living/user) - ..() - if(is_servant_of_ratvar(user)) - if(linkedwall) - if(wall_generation_cooldown > world.time) - var/temp_time = (wall_generation_cooldown - world.time) * 0.1 - to_chat(user, "[src] will produce a component in [temp_time] second[temp_time == 1 ? "":"s"].") - else - to_chat(user, "[src] is about to produce a component!") - else if(anchored) - to_chat(user, "[src] is unlinked! Construct a Clockwork Wall nearby to generate components!") - else - to_chat(user, "[src] needs to be secured to generate components!") - -/obj/structure/destructible/clockwork/cache/examine(mob/user) - ..() - if(is_servant_of_ratvar(user) || isobserver(user)) - if(linkedwall) - to_chat(user, "It is linked to a Clockwork Wall and will generate a component every [DisplayTimeText(get_production_time())]!") - else - to_chat(user, "It is unlinked! Construct a Clockwork Wall nearby to generate components!") - to_chat(user, "Stored components:") - for(var/i in GLOB.clockwork_component_cache) - to_chat(user, "[get_component_icon(i)] [get_component_name(i)][i != REPLICANT_ALLOY ? "s":""]: [GLOB.clockwork_component_cache[i]]") - -/obj/structure/destructible/clockwork/cache/proc/get_production_time() - return (CACHE_PRODUCTION_TIME + (ACTIVE_CACHE_SLOWDOWN * linked_caches)) * get_efficiency_mod(TRUE) diff --git a/code/game/gamemodes/gang/dominator.dm b/code/game/gamemodes/gang/dominator.dm deleted file mode 100644 index 7f707fbb4d..0000000000 --- a/code/game/gamemodes/gang/dominator.dm +++ /dev/null @@ -1,230 +0,0 @@ -#define DOM_BLOCKED_SPAM_CAP 6 -#define DOM_REQUIRED_TURFS 30 -#define DOM_HULK_HITS_REQUIRED 10 - -/obj/machinery/dominator - name = "dominator" - desc = "A visibly sinister device. Looks like you can break it if you hit it enough." - icon = 'icons/obj/machines/dominator.dmi' - icon_state = "dominator" - density = TRUE - anchored = TRUE - layer = HIGH_OBJ_LAYER - max_integrity = 300 - integrity_failure = 100 - armor = list(melee = 20, bullet = 50, laser = 50, energy = 50, bomb = 10, bio = 100, rad = 100, fire = 10, acid = 70) - var/datum/gang/gang - var/operating = FALSE //false=standby or broken, true=takeover - var/warned = FALSE //if this device has set off the warning at <3 minutes yet - var/spam_prevention = DOM_BLOCKED_SPAM_CAP //first message is immediate - var/datum/effect_system/spark_spread/spark_system - var/obj/effect/countdown/dominator/countdown - -/obj/machinery/dominator/hulk_damage() - return (max_integrity - integrity_failure) / DOM_HULK_HITS_REQUIRED - -/proc/dominator_excessive_walls(atom/A) - var/open = FALSE - for(var/turf/T in view(3, A)) - if(!isclosedturf(T)) - open++ - if(open < DOM_REQUIRED_TURFS) - return TRUE - else - return FALSE - -/obj/machinery/dominator/tesla_act() - qdel(src) - -/obj/machinery/dominator/Initialize() - . = ..() - set_light(2) - GLOB.poi_list |= src - spark_system = new - spark_system.set_up(5, TRUE, src) - countdown = new(src) - update_icon() - -/obj/machinery/dominator/examine(mob/user) - ..() - if(stat & BROKEN) - return - - var/time - if(gang && gang.is_dominating) - time = gang.domination_time_remaining() - if(time > 0) - to_chat(user, "Hostile Takeover in progress. Estimated [time] seconds remain.") - else - to_chat(user, "Hostile Takeover of [station_name()] successful. Have a great day.") - else - to_chat(user, "System on standby.") - to_chat(user, "System Integrity: [round((obj_integrity/max_integrity)*100,1)]%") - -/obj/machinery/dominator/process() - ..() - if(gang && gang.is_dominating) - var/time_remaining = gang.domination_time_remaining() - if(time_remaining > 0) - if(dominator_excessive_walls(src)) - gang.domination_timer += 20 - playsound(loc, 'sound/machines/buzz-two.ogg', 50, 0) - if(spam_prevention < DOM_BLOCKED_SPAM_CAP) - spam_prevention++ - else - gang.message_gangtools("Warning: There are too many walls around your gang's dominator, its signal is being blocked!") - say("Error: Takeover signal is currently blocked! There are too many walls within 3 standard units of this device.") - spam_prevention = 0 - return - . = TRUE - playsound(loc, 'sound/items/timer.ogg', 10, 0) - if(!warned && (time_remaining < 180)) - warned = TRUE - var/area/domloc = get_area(loc) - gang.message_gangtools("Less than 3 minutes remains in hostile takeover. Defend your dominator at [domloc.map_name]!") - for(var/datum/gang/G in SSticker.mode.gangs) - if(G != gang) - G.message_gangtools("WARNING: [gang.name] Gang takeover imminent. Their dominator at [domloc.map_name] must be destroyed!",1,1) - - if(!.) - STOP_PROCESSING(SSmachines, src) - -/obj/machinery/dominator/play_attack_sound(damage_amount, damage_type = BRUTE, damage_flag = 0) - switch(damage_type) - if(BRUTE) - if(damage_amount) - playsound(src, 'sound/effects/bang.ogg', 50, 1) - else - playsound(loc, 'sound/weapons/tap.ogg', 50, 1) - if(BURN) - playsound(src.loc, 'sound/items/welder.ogg', 100, 1) - -/obj/machinery/dominator/take_damage(damage_amount, damage_type = BRUTE, damage_flag = 0, sound_effect = 1) - . = ..() - if(.) - if(obj_integrity/max_integrity > 0.66) - if(prob(damage_amount*2)) - spark_system.start() - else if(!(stat & BROKEN)) - spark_system.start() - update_icon() - -/obj/machinery/dominator/update_icon() - cut_overlays() - if(!(stat & BROKEN)) - icon_state = "dominator-active" - if(operating) - var/mutable_appearance/dominator_overlay = mutable_appearance('icons/obj/machines/dominator.dmi', "dominator-overlay") - if(gang) - dominator_overlay.color = gang.color_hex - add_overlay(dominator_overlay) - else - icon_state = "dominator" - if(obj_integrity/max_integrity < 0.66) - add_overlay("damage") - else - icon_state = "dominator-broken" - -/obj/machinery/dominator/obj_break(damage_flag) - if(!(stat & BROKEN) && !(flags_1 & NODECONSTRUCT_1)) - set_broken() - -/obj/machinery/dominator/deconstruct(disassembled = TRUE) - if(!(flags_1 & NODECONSTRUCT_1)) - if(!(stat & BROKEN)) - set_broken() - new /obj/item/stack/sheet/plasteel(src.loc) - qdel(src) - -/obj/machinery/dominator/attacked_by(obj/item/I, mob/living/user) - add_fingerprint(user) - ..() - -/obj/machinery/dominator/proc/set_broken() - if(gang) - gang.is_dominating = FALSE - - var/takeover_in_progress = 0 - for(var/datum/gang/G in SSticker.mode.gangs) - if(G.is_dominating) - takeover_in_progress = 1 - break - if(!takeover_in_progress) - var/was_stranded = SSshuttle.emergency.mode == SHUTTLE_STRANDED - SSshuttle.clearHostileEnvironment(src) - if(!was_stranded) - priority_announce("All hostile activity within station systems has ceased.","Network Alert") - - if(get_security_level() == "delta") - set_security_level("red") - - gang.message_gangtools("Hostile takeover cancelled: Dominator is no longer operational.[gang.dom_attempts ? " You have [gang.dom_attempts] attempt remaining." : " The station network will have likely blocked any more attempts by us."]",1,1) - - set_light(0) - operating = FALSE - stat |= BROKEN - update_icon() - STOP_PROCESSING(SSmachines, src) - -/obj/machinery/dominator/Destroy() - if(!(stat & BROKEN)) - set_broken() - GLOB.poi_list.Remove(src) - gang = null - QDEL_NULL(spark_system) - QDEL_NULL(countdown) - STOP_PROCESSING(SSmachines, src) - return ..() - -/obj/machinery/dominator/emp_act(severity) - take_damage(100, BURN, "energy", 0) - ..() - -/obj/machinery/dominator/attack_hand(mob/user) - if(operating || (stat & BROKEN)) - examine(user) - return - - var/datum/gang/tempgang - - if(user.mind in SSticker.mode.get_all_gangsters()) - tempgang = user.mind.gang_datum - else - examine(user) - return - - if(tempgang.is_dominating) - to_chat(user, "Error: Hostile Takeover is already in progress.") - return - - if(!tempgang.dom_attempts) - to_chat(user, "Error: Unable to breach station network. Firewall has logged our signature and is blocking all further attempts.") - return - - var/time = round(determine_domination_time(tempgang)/60,0.1) - if(alert(user,"With [round((tempgang.territory.len/GLOB.start_state.num_territories)*100, 1)]% station control, a takeover will require [time] minutes.\nYour gang will be unable to gain influence while it is active.\nThe entire station will likely be alerted to it once it starts.\nYou have [tempgang.dom_attempts] attempt(s) remaining. Are you ready?","Confirm","Ready","Later") == "Ready") - if((tempgang.is_dominating) || !tempgang.dom_attempts || !in_range(src, user) || !isturf(loc)) - return 0 - - var/area/A = get_area(loc) - var/locname = A.map_name - - gang = tempgang - gang.dom_attempts -- - priority_announce("Network breach detected in [locname]. The [gang.name] Gang is attempting to seize control of the station!","Network Alert") - gang.domination() - SSshuttle.registerHostileEnvironment(src) - name = "[gang.name] Gang [name]" - operating = TRUE - update_icon() - - countdown.color = gang.color_hex - countdown.start() - - set_light(3) - START_PROCESSING(SSmachines, src) - - gang.message_gangtools("Hostile takeover in progress: Estimated [time] minutes until victory.[gang.dom_attempts ? "" : " This is your final attempt."]") - for(var/datum/gang/G in SSticker.mode.gangs) - if(G != gang) - G.message_gangtools("Enemy takeover attempt detected in [locname]: Estimated [time] minutes until our defeat.",1,1) diff --git a/code/game/gamemodes/gang/gang.dm b/code/game/gamemodes/gang/gang.dm deleted file mode 100644 index f18a473d72..0000000000 --- a/code/game/gamemodes/gang/gang.dm +++ /dev/null @@ -1,359 +0,0 @@ -//gang.dm -//Gang War Game Mode - -GLOBAL_LIST_INIT(gang_name_pool, list("Clandestine", "Prima", "Zero-G", "Max", "Blasto", "Waffle", "North", "Omni", "Newton", "Cyber", "Donk", "Gene", "Gib", "Tunnel", "Diablo", "Psyke", "Osiron", "Sirius", "Sleeping Carp")) -GLOBAL_LIST_INIT(gang_colors_pool, list("red","orange","yellow","green","blue","purple", "white")) -GLOBAL_LIST_INIT(gang_outfit_pool, list(/obj/item/clothing/suit/jacket/leather, /obj/item/clothing/suit/jacket/leather/overcoat, /obj/item/clothing/suit/jacket/puffer, /obj/item/clothing/suit/jacket/miljacket, /obj/item/clothing/suit/jacket/puffer, /obj/item/clothing/suit/pirate, /obj/item/clothing/suit/poncho, /obj/item/clothing/suit/apron/overalls, /obj/item/clothing/suit/jacket/letterman)) - -/datum/game_mode - var/list/datum/gang/gangs = list() - var/datum/gang_points/gang_points - -/proc/is_gangster(var/mob/living/M) - return istype(M) && M.mind && M.mind.gang_datum - -/proc/is_in_gang(var/mob/living/M, var/gang_type) - if(!is_gangster(M) || !gang_type) - return 0 - var/datum/gang/G = M.mind.gang_datum - if(G.name == gang_type) - return 1 - return 0 - -/datum/game_mode/gang - name = "gang war" - config_tag = "gang" - antag_flag = ROLE_GANG - restricted_jobs = list("Security Officer", "Warden", "Detective", "AI", "Cyborg","Captain", "Head of Personnel", "Head of Security", "Chief Engineer", "Research Director", "Chief Medical Officer") - required_players = 20 - required_enemies = 2 - recommended_enemies = 2 - enemy_minimum_age = 14 - - announce_span = "danger" - announce_text = "A violent turf war has erupted on the station!\n\ - Gangsters: Take over the station with a dominator.\n\ - Crew: Prevent the gangs from expanding and initiating takeover." - -/////////////////////////////////////////////////////////////////////////////// -//Gets the round setup, cancelling if there's not enough players at the start// -/////////////////////////////////////////////////////////////////////////////// -/datum/game_mode/gang/pre_setup() - if(config.protect_roles_from_antagonist) - restricted_jobs += protected_jobs - - if(config.protect_assistant_from_antagonist) - restricted_jobs += "Assistant" - - //Spawn more bosses depending on server population - var/gangs_to_create = 2 - if(prob(num_players() * 2)) - gangs_to_create ++ - - for(var/i=1 to gangs_to_create) - if(!antag_candidates.len) - break - - //Create the gang - var/datum/gang/G = new() - gangs += G - - //Now assign a boss for the gang - for(var/n in 1 to 3) - var/datum/mind/boss = pick(antag_candidates) - antag_candidates -= boss - G.bosses[boss] = GANGSTER_BOSS_STARTING_INFLUENCE - boss.gang_datum = G - var/title - if(n == 1) - title = "Boss" - else - title = "Lieutenant" - boss.special_role = "[G.name] Gang [title]" - boss.restricted_roles = restricted_jobs - log_game("[boss.key] has been selected as the [title] for the [G.name] Gang") - - if(gangs.len < 2) //Need at least two gangs - return 0 - - return 1 - - -/datum/game_mode/gang/post_setup() - set waitfor = FALSE - ..() - sleep(rand(10,100)) - for(var/datum/gang/G in gangs) - for(var/datum/mind/boss_mind in G.bosses) - G.bosses[boss_mind] = GANGSTER_BOSS_STARTING_INFLUENCE //Force influence to be put on it. - G.add_gang_hud(boss_mind) - forge_gang_objectives(boss_mind) - greet_gang(boss_mind) - equip_gang(boss_mind.current,G) - modePlayer += boss_mind - - -/datum/game_mode/proc/forge_gang_objectives(datum/mind/boss_mind) - var/datum/objective/rival_obj = new - rival_obj.owner = boss_mind - rival_obj.explanation_text = "Be the first gang to successfully takeover the station with a Dominator." - boss_mind.objectives += rival_obj - -/datum/game_mode/proc/greet_gang(datum/mind/boss_mind, you_are=1) - if (you_are) - to_chat(boss_mind.current, "You are the Boss of the [boss_mind.gang_datum.name] Gang!") - boss_mind.announce_objectives() - -/////////////////////////////////////////////////////////////////////////// -//This equips the bosses with their gear, and makes the clown not clumsy// -/////////////////////////////////////////////////////////////////////////// -/datum/game_mode/proc/equip_gang(mob/living/carbon/human/mob, gang) - if(!istype(mob)) - return - - if (mob.mind) - if (mob.mind.assigned_role == "Clown") - to_chat(mob, "Your training has allowed you to overcome your clownish nature, allowing you to wield weapons without harming yourself.") - mob.dna.remove_mutation(CLOWNMUT) - - var/obj/item/device/gangtool/gangtool = new(mob) - var/obj/item/pen/gang/T = new(mob) - var/obj/item/toy/crayon/spraycan/gang/SC = new(mob,gang) - var/obj/item/clothing/glasses/hud/security/chameleon/C = new(mob,gang) - - var/list/slots = list ( - "backpack" = slot_in_backpack, - "left pocket" = slot_l_store, - "right pocket" = slot_r_store - ) - - . = 0 - - var/where = mob.equip_in_one_of_slots(gangtool, slots) - if (!where) - to_chat(mob, "Your Syndicate benefactors were unfortunately unable to get you a Gangtool.") - . += 1 - else - gangtool.register_device(mob) - to_chat(mob, "The Gangtool in your [where] will allow you to purchase weapons and equipment, send messages to your gang, and recall the emergency shuttle from anywhere on the station.") - to_chat(mob, "As the gang boss, you can also promote your gang members to lieutenant. Unlike regular gangsters, Lieutenants cannot be deconverted and are able to use recruitment pens and gangtools.") - - var/where2 = mob.equip_in_one_of_slots(T, slots) - if (!where2) - to_chat(mob, "Your Syndicate benefactors were unfortunately unable to get you a recruitment pen to start.") - . += 1 - else - to_chat(mob, "The recruitment pen in your [where2] will help you get your gang started. Stab unsuspecting crew members with it to recruit them.") - - var/where3 = mob.equip_in_one_of_slots(SC, slots) - if (!where3) - to_chat(mob, "Your Syndicate benefactors were unfortunately unable to get you a territory spraycan to start.") - . += 1 - else - to_chat(mob, "The territory spraycan in your [where3] can be used to claim areas of the station for your gang. The more territory your gang controls, the more influence you get. All gangsters can use these, so distribute them to grow your influence faster.") - - var/where4 = mob.equip_in_one_of_slots(C, slots) - if (!where4) - to_chat(mob, "Your Syndicate benefactors were unfortunately unable to get you a chameleon security HUD.") - . += 1 - else - to_chat(mob, "The chameleon security HUD in your [where4] will help you keep track of who is mindshield-implanted, and unable to be recruited.") - return . - - -/////////////////////////////////////////// -//Deals with converting players to a gang// -/////////////////////////////////////////// -/datum/game_mode/proc/add_gangster(datum/mind/gangster_mind, datum/gang/G, check = 1) - if(!G || (gangster_mind in get_all_gangsters()) || (gangster_mind.enslaved_to && !is_gangster(gangster_mind.enslaved_to))) - if(is_in_gang(gangster_mind.current, G.name) && !(gangster_mind in get_gang_bosses())) - return 3 - return 0 - if(check && gangster_mind.current.isloyal()) //Check to see if the potential gangster is implanted - return 1 - G.gangsters[gangster_mind] = GANGSTER_SOLDIER_STARTING_INFLUENCE - gangster_mind.gang_datum = G - if(check) - if(iscarbon(gangster_mind.current)) - var/mob/living/carbon/carbon_mob = gangster_mind.current - carbon_mob.silent = max(carbon_mob.silent, 5) - carbon_mob.flash_act(1, 1) - gangster_mind.current.Stun(100) - if(G.is_deconvertible) - to_chat(gangster_mind.current, "You are now a member of the [G.name] Gang!") - to_chat(gangster_mind.current, "Help your bosses take over the station by claiming territory with special spraycans only they can provide. Simply spray on any unclaimed area of the station.") - to_chat(gangster_mind.current, "Their ultimate objective is to take over the station with a Dominator machine.") - to_chat(gangster_mind.current, "You can identify your bosses by their large, bright [G.color] \[G\] icon.") - gangster_mind.store_memory("You are a member of the [G.name] Gang!") - gangster_mind.current.log_message("Has been converted to the [G.name] Gang!", INDIVIDUAL_ATTACK_LOG) - gangster_mind.special_role = "[G.name] Gangster" - - G.add_gang_hud(gangster_mind) - if(jobban_isbanned(gangster_mind.current, ROLE_GANG)) - INVOKE_ASYNC(src, /datum/game_mode.proc/replace_jobbaned_player, gangster_mind.current, ROLE_GANG, ROLE_GANG) - return 2 -//////////////////////////////////////////////////////////////////// -//Deals with players reverting to neutral (Not a gangster anymore)// -//////////////////////////////////////////////////////////////////// -/datum/game_mode/proc/remove_gangster(datum/mind/gangster_mind, beingborged, silent, remove_bosses=0) - var/datum/gang/gang = gangster_mind.gang_datum - for(var/obj/O in gangster_mind.current.contents) - if(istype(O, /obj/item/device/gangtool/soldier)) - qdel(O) - - if(!gang) - return 0 - - var/removed - - for(var/datum/gang/G in gangs) - if(!G.is_deconvertible && !remove_bosses) - return 0 - if(gangster_mind in G.gangsters) - G.reclaim_points(G.gangsters[gangster_mind]) - G.gangsters -= gangster_mind - removed = 1 - if(remove_bosses && (gangster_mind in G.bosses)) - G.reclaim_points(G.bosses[gangster_mind]) - G.bosses -= gangster_mind - removed = 1 - if(G.tags_by_mind[gangster_mind] && islist(G.tags_by_mind[gangster_mind])) - var/list/tags_cache = G.tags_by_mind[gangster_mind] - for(var/v in tags_cache) - var/obj/effect/decal/cleanable/crayon/gang/c = v - c.set_mind_owner(null) - G.tags_by_mind -= gangster_mind - - if(!removed) - return 0 - - - gangster_mind.special_role = null - gangster_mind.gang_datum = null - - if(silent < 2) - gangster_mind.current.log_message("Has reformed and defected from the [gang.name] Gang!", INDIVIDUAL_ATTACK_LOG) - - if(beingborged) - if(!silent) - gangster_mind.current.visible_message("The frame beeps contentedly from the MMI before initalizing it.") - to_chat(gangster_mind.current, "The frame's firmware detects and deletes your criminal behavior! You are no longer a gangster!") - message_admins("[ADMIN_LOOKUPFLW(gangster_mind.current)] has been borged while being a member of the [gang.name] Gang. They are no longer a gangster.") - else - if(!silent) - gangster_mind.current.Unconscious(100) - gangster_mind.current.visible_message("[gangster_mind.current] looks like they've given up the life of crime!") - to_chat(gangster_mind.current, "You have been reformed! You are no longer a gangster!
You try as hard as you can, but you can't seem to recall any of the identities of your former gangsters...
") - gangster_mind.memory = "" - - gang.remove_gang_hud(gangster_mind) - return 1 - -//////////////// -//Helper Procs// -//////////////// - -/datum/game_mode/proc/get_all_gangsters() - var/list/all_gangsters = list() - all_gangsters += get_gangsters() - all_gangsters += get_gang_bosses() - return all_gangsters - -/datum/game_mode/proc/get_gangsters() - var/list/gangsters = list() - for(var/datum/gang/G in gangs) - gangsters += G.gangsters - return gangsters - -/datum/game_mode/proc/get_gang_bosses() - var/list/gang_bosses = list() - for(var/datum/gang/G in gangs) - gang_bosses += G.bosses - return gang_bosses - -/datum/game_mode/proc/shuttle_check() - if(SSshuttle.emergencyNoRecall) - return - var/alive = 0 - for(var/mob/living/L in GLOB.player_list) - if(L.stat != DEAD) - alive++ - - if((alive < (GLOB.joined_player_list.len * 0.4)) && ((SSshuttle.emergency.timeLeft(1) > (SSshuttle.emergencyCallTime * 0.4)))) - - SSshuttle.emergencyNoRecall = TRUE - SSshuttle.emergency.request(null, set_coefficient = 0.4) - priority_announce("Catastrophic casualties detected: crisis shuttle protocols activated - jamming recall signals across all frequencies.") - -/proc/determine_domination_time(var/datum/gang/G) - return max(180,480 - (round((G.territory.len/GLOB.start_state.num_territories)*100, 1) * 9)) - - -////////////////////////////////////////////////////////////////////// -//Announces the end of the game with all relavent information stated// -////////////////////////////////////////////////////////////////////// - -/datum/game_mode/proc/auto_declare_completion_gang(datum/gang/winner) - if(!gangs.len) - return - if(!winner) - to_chat(world, "The station was [station_was_nuked ? "destroyed!" : "evacuated before a gang could claim it! The station wins!"]
") - SSticker.mode_result = "loss - gangs failed takeover" - - SSticker.news_report = GANG_LOSS - else - to_chat(world, "The [winner.name] Gang successfully performed a hostile takeover of the station!
") - SSticker.mode_result = "win - gang domination complete" - - SSticker.news_report = GANG_TAKEOVER - - for(var/datum/gang/G in gangs) - var/text = "The [G.name] Gang was [winner==G ? "victorious" : "defeated"] with [round((G.territory.len/GLOB.start_state.num_territories)*100, 1)]% control of the station!" - text += "
The [G.name] Gang Bosses were:" - for(var/datum/mind/boss in G.bosses) - text += printplayer(boss, 1) - text += "
The [G.name] Gangsters were:" - for(var/datum/mind/gangster in G.gangsters) - text += printplayer(gangster, 1) - text += "
" - to_chat(world, text) - -////////////////////////////////////////////////////////// -//Handles influence, territories, and the victory checks// -////////////////////////////////////////////////////////// - -/datum/gang_points - var/next_point_interval = 1800 - var/next_point_time - -/datum/gang_points/New() - next_point_time = world.time + next_point_interval - START_PROCESSING(SSobj, src) - -/datum/gang_points/process(seconds) - var/list/winners = list() //stores the winners if there are any - - for(var/datum/gang/G in SSticker.mode.gangs) - if(world.time > next_point_time) - G.income() - - if(G.is_dominating) - if(G.domination_time_remaining() < 0) - winners += G - - if(world.time > next_point_time) - next_point_time = world.time + next_point_interval - - if(winners.len) - if(winners.len > 1) //Edge Case: If more than one dominator complete at the same time - for(var/datum/gang/G in winners) - G.domination(0.5) - priority_announce("Multiple station takeover attempts have made simultaneously. Conflicting takeover attempts appears to have restarted.","Network Alert") - else - var/datum/gang/G = winners[1] - G.is_dominating = FALSE - SSticker.mode.explosion_in_progress = 1 - SSticker.station_explosion_cinematic(1,"gang war", null) - SSticker.mode.explosion_in_progress = 0 - SSticker.force_ending = TRUE - diff --git a/code/game/gamemodes/gang/gang_datum.dm b/code/game/gamemodes/gang/gang_datum.dm deleted file mode 100644 index 510883ada5..0000000000 --- a/code/game/gamemodes/gang/gang_datum.dm +++ /dev/null @@ -1,333 +0,0 @@ -//gang_datum.dm -//Datum-based gangs - -/datum/gang - var/name = "ERROR" - var/color = "white" - var/color_hex = "#FFFFFF" - var/list/datum/mind/gangsters = list() //gang B Members - var/list/datum/mind/bosses = list() //gang A Bosses - var/list/obj/item/device/gangtool/gangtools = list() - var/list/tags_by_mind = list() //Assoc list in format of tags_by_mind[mind_of_gangster] = list(tag1, tag2, tag3) where tags are the actual object decals. - var/style - var/fighting_style = "normal" - var/list/territory = list() - var/list/territory_new = list() - var/list/territory_lost = list() - var/recalls = 1 - var/dom_attempts = 2 - var/inner_outfit - var/outer_outfit - var/datum/atom_hud/antag/gang/ganghud - var/is_deconvertible = TRUE //Can you deconvert normal gangsters from the gang - - var/domination_timer - var/is_dominating - - var/boss_item_list - var/boss_category_list - var/static/list/boss_items = list( - /datum/gang_item/function/gang_ping, - /datum/gang_item/function/recall, - - /datum/gang_item/clothing/under, - /datum/gang_item/clothing/suit, - /datum/gang_item/clothing/hat, - /datum/gang_item/clothing/neck, - /datum/gang_item/clothing/shoes, - /datum/gang_item/clothing/mask, - /datum/gang_item/clothing/hands, - /datum/gang_item/clothing/belt, - - /datum/gang_item/weapon/shuriken, - /datum/gang_item/weapon/switchblade, - /datum/gang_item/weapon/improvised, - /datum/gang_item/weapon/ammo/improvised_ammo, - /datum/gang_item/weapon/surplus, - /datum/gang_item/weapon/ammo/surplus_ammo, - /datum/gang_item/weapon/pistol, - /datum/gang_item/weapon/ammo/pistol_ammo, - /datum/gang_item/weapon/sniper, - /datum/gang_item/weapon/ammo/sniper_ammo, - /datum/gang_item/weapon/machinegun, - /datum/gang_item/weapon/uzi, - /datum/gang_item/weapon/ammo/uzi_ammo, - /datum/gang_item/equipment/sharpener, - /datum/gang_item/equipment/spraycan, - /datum/gang_item/equipment/emp, - /datum/gang_item/equipment/c4, - /datum/gang_item/equipment/frag, - /datum/gang_item/equipment/stimpack, - /datum/gang_item/equipment/implant_breaker, - /datum/gang_item/equipment/wetwork_boots, - /datum/gang_item/equipment/pen, - /datum/gang_item/equipment/dominator - ) - - var/reg_item_list - var/reg_category_list - var/static/list/soldier_items = list( - /datum/gang_item/clothing/under, - /datum/gang_item/clothing/suit, - /datum/gang_item/clothing/hat, - /datum/gang_item/clothing/neck, - /datum/gang_item/clothing/shoes, - /datum/gang_item/clothing/mask, - /datum/gang_item/clothing/hands, - /datum/gang_item/clothing/belt, - - /datum/gang_item/weapon/shuriken, - /datum/gang_item/weapon/switchblade, - /datum/gang_item/weapon/improvised, - /datum/gang_item/weapon/ammo/improvised_ammo, - /datum/gang_item/weapon/surplus, - /datum/gang_item/weapon/ammo/surplus_ammo, - /datum/gang_item/weapon/pistol, - /datum/gang_item/weapon/ammo/pistol_ammo, - /datum/gang_item/weapon/sniper, - /datum/gang_item/weapon/ammo/sniper_ammo, - /datum/gang_item/weapon/machinegun, - /datum/gang_item/weapon/uzi, - /datum/gang_item/weapon/ammo/uzi_ammo, - /datum/gang_item/equipment/sharpener, - /datum/gang_item/equipment/spraycan, - /datum/gang_item/equipment/emp, - /datum/gang_item/equipment/c4, - /datum/gang_item/equipment/frag, - /datum/gang_item/equipment/stimpack, - /datum/gang_item/equipment/implant_breaker, - /datum/gang_item/equipment/wetwork_boots, - ) - -/datum/gang/New(loc,gangname) - if(!GLOB.gang_colors_pool.len) - message_admins("WARNING: Maximum number of gangs have been exceeded!") - throw EXCEPTION("Maximum number of gangs has been exceeded") - return - else - color = pick(GLOB.gang_colors_pool) - GLOB.gang_colors_pool -= color - switch(color) - if("red") - color_hex = "#DA0000" - inner_outfit = pick(/obj/item/clothing/under/color/red, /obj/item/clothing/under/lawyer/red) - if("orange") - color_hex = "#FF9300" - inner_outfit = pick(/obj/item/clothing/under/color/orange, /obj/item/clothing/under/geisha) - if("yellow") - color_hex = "#FFF200" - inner_outfit = pick(/obj/item/clothing/under/color/yellow, /obj/item/clothing/under/burial, /obj/item/clothing/under/suit_jacket/tan) - if("green") - color_hex = "#A8E61D" - inner_outfit = pick(/obj/item/clothing/under/color/green, /obj/item/clothing/under/syndicate/camo, /obj/item/clothing/under/suit_jacket/green) - if("blue") - color_hex = "#00B7EF" - inner_outfit = pick(/obj/item/clothing/under/color/blue, /obj/item/clothing/under/suit_jacket/navy) - if("purple") - color_hex = "#DA00FF" - inner_outfit = pick(/obj/item/clothing/under/color/lightpurple, /obj/item/clothing/under/lawyer/purpsuit) - if("white") - color_hex = "#FFFFFF" - inner_outfit = pick(/obj/item/clothing/under/color/white, /obj/item/clothing/under/suit_jacket/white) - - name = (gangname ? gangname : pick(GLOB.gang_name_pool)) - GLOB.gang_name_pool -= name - outer_outfit = pick(GLOB.gang_outfit_pool) - ganghud = new() - ganghud.color = color_hex - log_game("The [name] Gang has been created. Their gang color is [color].") - build_item_list() - -/datum/gang/proc/build_item_list() - boss_item_list = list() - boss_category_list = list() - for(var/B in boss_items) - var/datum/gang_item/G = new B() - boss_item_list[G.id] = G - var/list/Cat = boss_category_list[G.category] - if(Cat) - Cat += G - else - boss_category_list[G.category] = list(G) - - reg_item_list = list() - reg_category_list = list() - for(var/S in soldier_items) - var/datum/gang_item/G = new S() - reg_item_list[G.id] = G - var/list/Cat = reg_category_list[G.category] - if(Cat) - Cat += G - else - reg_category_list[G.category] = list(G) - -/datum/gang/proc/add_gang_hud(datum/mind/recruit_mind) - ganghud.join_hud(recruit_mind.current) - SSticker.mode.set_antag_hud(recruit_mind.current, ((recruit_mind in bosses) ? "gang_boss" : "gangster")) - -/datum/gang/proc/remove_gang_hud(datum/mind/defector_mind) - ganghud.leave_hud(defector_mind.current) - SSticker.mode.set_antag_hud(defector_mind.current, null) - -/datum/gang/proc/domination(modifier=1) - set_domination_time(determine_domination_time(src) * modifier) - is_dominating = TRUE - set_security_level("delta") - -/datum/gang/proc/set_domination_time(d) - domination_timer = world.time + (10 * d) - -/datum/gang/proc/domination_time_remaining() - var/diff = domination_timer - world.time - return diff / 10 - -//////////////////////////////////////////// MESSAGING - - -/datum/gang/proc/message_gangtools(message,beep=1,warning) - if(!gangtools.len || !message) - return - for(var/obj/item/device/gangtool/tool in gangtools) - var/mob/living/mob = get(tool.loc, /mob/living) - if(mob && mob.mind && mob.stat == CONSCIOUS) - if(mob.mind.gang_datum == src) - to_chat(mob, "[icon2html(tool, mob)] [message]") - return - - -//////////////////////////////////////////// INCOME - - -/datum/gang/proc/income() - if(!bosses.len) - return - var/added_names = "" - var/lost_names = "" - - SSticker.mode.shuttle_check() // See if its time to start wrapping things up - - //Re-add territories that were reclaimed, so if they got tagged over, they can still earn income if they tag it back before the next status report - var/list/reclaimed_territories = territory_new & territory_lost - territory |= reclaimed_territories - territory_new -= reclaimed_territories - territory_lost -= reclaimed_territories - - //Process lost territories - for(var/area in territory_lost) - if(lost_names != "") - lost_names += ", " - lost_names += "[territory_lost[area]]" - territory -= area - - //Calculate and report influence growth - - //Process new territories - for(var/area in territory_new) - if(added_names != "") - added_names += ", " - added_names += "[territory_new[area]]" - territory += area - - //Report territory changes - var/message = "[src] Gang Status Report:.
*---------*
" - message += "[territory_new.len] new territories:
[added_names]
" - message += "[territory_lost.len] territories lost:
[lost_names]
" - //Clear the lists - territory_new = list() - territory_lost = list() - var/control = round((territory.len/GLOB.start_state.num_territories)*100, 1) - var/sbonus = sqrt(LAZYLEN(territory)) // Bonus given to soldier's for the gang's total territory - message += "Your gang now has [control]% control of the station.
*---------*
" - if(is_dominating) - var/seconds_remaining = domination_time_remaining() - var/new_time = max(180, seconds_remaining - (territory.len * 2)) - if(new_time < seconds_remaining) - message += "Takeover shortened by [seconds_remaining - new_time] seconds for defending [territory.len] territories.
" - set_domination_time(new_time) - message += "[seconds_remaining] seconds remain in hostile takeover.
" - else - pay_territory_income_to_bosses() - pay_territory_income_to_soldiers(sbonus) - pay_all_clothing_bonuses() - announce_all_influence() - -/datum/gang/proc/pay_all_clothing_bonuses() - for(var/datum/mind/mind in gangsters|bosses) - pay_clothing_bonus(mind) - -/datum/gang/proc/pay_clothing_bonus(var/datum/mind/gangsta) - var/mob/living/carbon/human/gangbanger = gangsta.current - . = 0 - if(!istype(gangbanger) || gangbanger.stat == DEAD) //Dead gangsters aren't influential at all! - return 0 - var/static/inner = inner_outfit - var/static/outer = outer_outfit - for(var/obj/item/C in gangbanger.contents) - if(C.type == inner_outfit) - . += 2 - continue - else if(C.type == outer_outfit) - . += 2 - continue - . += C.gang_contraband_value() - adjust_influence(gangsta, .) - if(.) - announce_to_mind(gangsta, "Your influential choice of clothing has increased your influence by [.] points!") - else - announce_to_mind(gangsta, "Unfortunately, you have not gained any additional influence from your drab, old, boring clothing. Learn to dress like a gangsta, bro!") //Kek - -/datum/gang/proc/pay_soldier_territory_income(datum/mind/soldier, sbonus = 0) - . = 0 - . = max(0,round(3 - gangsters[soldier]/10)) + (sbonus) + (get_soldier_territories(soldier)/2) - adjust_influence(soldier, .) - -/datum/gang/proc/get_soldier_territories(datum/mind/soldier) - if(!islist(tags_by_mind[soldier])) //They have no tagged territories! - return 0 - var/list/tags = tags_by_mind[soldier] - return tags.len - -/datum/gang/proc/pay_territory_income_to_soldiers(sbonus = 0) - for(var/datum/mind/soldier in gangsters) - var/returned = pay_soldier_territory_income(soldier) - if(!returned) - announce_to_mind(soldier, "You have not gained any influence from territories you personally tagged. Get to work, soldier!") - else - announce_to_mind(soldier, "You have gained [returned] influence from [get_soldier_territories(soldier)] territories you have personally tagged.") - -/datum/gang/proc/announce_all_influence() - for(var/datum/mind/MG in bosses|gangsters) - announce_total_influence(MG) - -/datum/gang/proc/pay_territory_income_to_bosses() - . = 0 - for(var/datum/mind/boss_mind in bosses) - var/inc = max(0,round(5 - bosses[boss_mind]/10)) + LAZYLEN(territory) - . += inc - adjust_influence(boss_mind, inc) - announce_to_mind(boss_mind, "Your influence has increased by [inc] from your gang holding [LAZYLEN(territory)] territories!") - -/datum/gang/proc/get_influence(datum/mind/gangster_mind) - if(gangster_mind in gangsters) - return gangsters[gangster_mind] - if(gangster_mind in bosses) - return bosses[gangster_mind] - -/datum/gang/proc/adjust_influence(datum/mind/gangster_mind, amount) - if(gangster_mind in gangsters) - gangsters[gangster_mind] += amount - if(gangster_mind in bosses) - bosses[gangster_mind] += amount - -/datum/gang/proc/announce_to_mind(datum/mind/gangster_mind, message) - if(gangster_mind.current && gangster_mind.current.stat != DEAD) - to_chat(gangster_mind.current, message) - -/datum/gang/proc/announce_total_influence(datum/mind/gangster_mind) - announce_to_mind(gangster_mind, "[name] Gang: You now have a total of [get_influence(gangster_mind)] influence!") - -/datum/gang/proc/reclaim_points(amount) - for(var/datum/mind/bawss in bosses) - adjust_influence(bawss, amount/bosses.len) - announce_to_mind(bawss, "[name] Gang: [amount/bosses.len] influence given from internal automatic restructuring.") - diff --git a/code/game/gamemodes/gang/gang_items.dm b/code/game/gamemodes/gang/gang_items.dm deleted file mode 100644 index 2c36d1c345..0000000000 --- a/code/game/gamemodes/gang/gang_items.dm +++ /dev/null @@ -1,453 +0,0 @@ -/datum/gang_item - var/name - var/item_path - var/cost - var/spawn_msg - var/category - var/id - - -/datum/gang_item/proc/purchase(mob/living/carbon/user, datum/gang/gang, obj/item/device/gangtool/gangtool, check_canbuy = TRUE) - if(check_canbuy && !can_buy(user, gang, gangtool)) - return FALSE - var/real_cost = get_cost(user, gang, gangtool) - gang.adjust_influence(user.mind, -real_cost) - spawn_item(user, gang, gangtool) - return TRUE - -/datum/gang_item/proc/spawn_item(mob/living/carbon/user, datum/gang/gang, obj/item/device/gangtool/gangtool) - if(item_path) - var/obj/item/O = new item_path(user.loc) - user.put_in_hands(O) - if(spawn_msg) - to_chat(user, spawn_msg) - -/datum/gang_item/proc/can_buy(mob/living/carbon/user, datum/gang/gang, obj/item/device/gangtool/gangtool) - return gang && (gang.get_influence(user.mind) >= get_cost(user, gang, gangtool)) && can_see(user, gang, gangtool) - -/datum/gang_item/proc/can_see(mob/living/carbon/user, datum/gang/gang, obj/item/device/gangtool/gangtool) - return TRUE - -/datum/gang_item/proc/get_cost(mob/living/carbon/user, datum/gang/gang, obj/item/device/gangtool/gangtool) - return cost - -/datum/gang_item/proc/get_cost_display(mob/living/carbon/user, datum/gang/gang, obj/item/device/gangtool/gangtool) - return "([get_cost(user, gang, gangtool)] Influence)" - -/datum/gang_item/proc/get_name_display(mob/living/carbon/user, datum/gang/gang, obj/item/device/gangtool/gangtool) - return name - -/datum/gang_item/proc/isboss(mob/living/carbon/user, datum/gang/gang) - return user && gang && (user.mind == gang.bosses[1]) - -/datum/gang_item/proc/get_extra_info(mob/living/carbon/user, datum/gang/gang, obj/item/device/gangtool/gangtool) - return - -/////////////////// -//FUNCTIONS -/////////////////// - -/datum/gang_item/function - category = "Gangtool Functions:" - cost = 0 - -/datum/gang_item/function/get_cost_display(mob/living/carbon/user, datum/gang/gang, obj/item/device/gangtool/gangtool) - return "" - - -/datum/gang_item/function/gang_ping - name = "Send Message to Gang" - id = "gang_ping" - -/datum/gang_item/function/gang_ping/spawn_item(mob/living/carbon/user, datum/gang/gang, obj/item/device/gangtool/gangtool) - if(gangtool) - gangtool.ping_gang(user) - - -/datum/gang_item/function/recall - name = "Recall Emergency Shuttle" - id = "recall" - -/datum/gang_item/function/recall/can_see(mob/living/carbon/user, datum/gang/gang, obj/item/device/gangtool/gangtool) - return isboss(user, gang) - -/datum/gang_item/function/recall/spawn_item(mob/living/carbon/user, datum/gang/gang, obj/item/device/gangtool/gangtool) - if(gangtool) - gangtool.recall(user) - - -/////////////////// -//CLOTHING -/////////////////// - -/datum/gang_item/clothing - category = "Purchase Influence-Enhancing Clothes:" - -/datum/gang_item/clothing/under - name = "Gang Uniform" - id = "under" - cost = 1 - -/datum/gang_item/clothing/under/spawn_item(mob/living/carbon/user, datum/gang/gang, obj/item/device/gangtool/gangtool) - if(gang.inner_outfit) - var/obj/item/O = new gang.inner_outfit(user.loc) - user.put_in_hands(O) - to_chat(user, " This is your gang's official uniform, wearing it will increase your influence") - -/datum/gang_item/clothing/suit - name = "Gang Armored Outerwear" - id = "suit" - cost = 1 - -/datum/gang_item/clothing/suit/spawn_item(mob/living/carbon/user, datum/gang/gang, obj/item/device/gangtool/gangtool) - if(gang.outer_outfit) - var/obj/item/O = new gang.outer_outfit(user.loc) - O.armor = list(melee = 20, bullet = 35, laser = 10, energy = 10, bomb = 30, bio = 0, rad = 0, fire = 30, acid = 30) - O.desc += " Tailored for the [gang.name] Gang to offer the wearer moderate protection against ballistics and physical trauma." - user.put_in_hands(O) - to_chat(user, " This is your gang's official outerwear, wearing it will increase your influence") - - -/datum/gang_item/clothing/hat - name = "Pimp Hat" - id = "hat" - cost = 16 - item_path = /obj/item/clothing/head/collectable/petehat/gang - -/obj/item/clothing/head/collectable/petehat/gang - name = "pimpin' hat" - desc = "The undisputed king of style." - -/obj/item/clothing/head/collectable/petehat/gang/gang_contraband_value() - return 4 - -/datum/gang_item/clothing/mask - name = "Golden Death Mask" - id = "mask" - cost = 18 - item_path = /obj/item/clothing/mask/gskull - -/obj/item/clothing/mask/gskull - name = "golden death mask" - icon_state = "gskull" - desc = "Strike terror, and envy, into the hearts of your enemies." - -/obj/item/clothing/mask/gskull/gang_contraband_value() - return 5 - -/datum/gang_item/clothing/shoes - name = "Bling Boots" - id = "boots" - cost = 22 - item_path = /obj/item/clothing/shoes/gang - -/obj/item/clothing/shoes/gang - name = "blinged-out boots" - desc = "Stand aside peasants." - icon_state = "bling" - -/obj/item/clothing/shoes/gang/gang_contraband_value() - return 6 - -/datum/gang_item/clothing/neck - name = "Gold Necklace" - id = "necklace" - cost = 9 - item_path = /obj/item/clothing/neck/necklace/dope - -/datum/gang_item/clothing/hands - name = "Decorative Brass Knuckles" - id = "hand" - cost = 11 - item_path = /obj/item/clothing/gloves/gang - -/obj/item/clothing/gloves/gang - name = "braggadocio's brass knuckles" - desc = "Purely decorative, don't find out the hard way." - icon_state = "knuckles" - w_class = 3 - -/obj/item/clothing/gloves/gang/gang_contraband_value() - return 3 - -/datum/gang_item/clothing/belt - name = "Badass Belt" - id = "belt" - cost = 13 - item_path = /obj/item/storage/belt/military/gang - -/obj/item/storage/belt/military/gang - name = "badass belt" - icon_state = "gangbelt" - item_state = "gang" - desc = "The belt buckle simply reads 'BAMF'." - storage_slots = 1 - -/obj/item/storage/belt/military/gang/gang_contraband_value() - return 4 - -/////////////////// -//WEAPONS -/////////////////// - -/datum/gang_item/weapon - category = "Purchase Weapons:" - -/datum/gang_item/weapon/ammo - -/datum/gang_item/weapon/ammo/get_cost_display(mob/living/carbon/user, datum/gang/gang, obj/item/device/gangtool/gangtool) - return " ↳" + ..() //this is pretty hacky but it looks nice on the popup - -/datum/gang_item/weapon/shuriken - name = "Shuriken" - id = "shuriken" - cost = 3 - item_path = /obj/item/throwing_star - -/datum/gang_item/weapon/switchblade - name = "Switchblade" - id = "switchblade" - cost = 5 - item_path = /obj/item/switchblade - -/datum/gang_item/weapon/surplus - name = "Surplus Rifle" - id = "surplus" - cost = 8 - item_path = /obj/item/gun/ballistic/automatic/surplus - -/datum/gang_item/weapon/ammo/surplus_ammo - name = "Surplus Rifle Ammo" - id = "surplus_ammo" - cost = 5 - item_path = /obj/item/ammo_box/magazine/m10mm/rifle - -/datum/gang_item/weapon/improvised - name = "Sawn-Off Improvised Shotgun" - id = "sawn" - cost = 6 - item_path = /obj/item/gun/ballistic/revolver/doublebarrel/improvised/sawn - -/datum/gang_item/weapon/ammo/improvised_ammo - name = "Box of Buckshot" - id = "buckshot" - cost = 5 - item_path = /obj/item/storage/box/lethalshot - -/datum/gang_item/weapon/pistol - name = "10mm Pistol" - id = "pistol" - cost = 30 - item_path = /obj/item/gun/ballistic/automatic/pistol - -/datum/gang_item/weapon/ammo/pistol_ammo - name = "10mm Ammo" - id = "pistol_ammo" - cost = 10 - item_path = /obj/item/ammo_box/magazine/m10mm - -/datum/gang_item/weapon/sniper - name = "Black Market .50cal Sniper Rifle" - id = "sniper" - cost = 40 - item_path = /obj/item/gun/ballistic/automatic/sniper_rifle/gang - -/datum/gang_item/weapon/ammo/sniper_ammo - name = "Smuggled .50cal Sniper Rounds" - id = "sniper_ammo" - cost = 15 - item_path = /obj/item/ammo_box/magazine/sniper_rounds/gang - - -/datum/gang_item/weapon/ammo/sleeper_ammo - name = "Illicit Tranquilizer Cartridges" - id = "sniper_ammo" - cost = 15 - item_path = /obj/item/ammo_box/magazine/sniper_rounds/gang/sleeper - - -/datum/gang_item/weapon/machinegun - name = "Mounted Machine Gun" - id = "MG" - cost = 50 - item_path = /obj/machinery/manned_turret - spawn_msg = "The mounted machine gun features enhanced responsiveness. Hold down on the trigger while firing to control where you're shooting." - -/datum/gang_item/weapon/uzi - name = "Uzi SMG" - id = "uzi" - cost = 60 - item_path = /obj/item/gun/ballistic/automatic/mini_uzi - - -/datum/gang_item/weapon/ammo/uzi_ammo - name = "Uzi Ammo" - id = "uzi_ammo" - cost = 40 - item_path = /obj/item/ammo_box/magazine/uzim9mm - -/////////////////// -//EQUIPMENT -/////////////////// - -/datum/gang_item/equipment - category = "Purchase Equipment:" - - -/datum/gang_item/equipment/spraycan - name = "Territory Spraycan" - id = "spraycan" - cost = 5 - item_path = /obj/item/toy/crayon/spraycan/gang - -/datum/gang_item/equipment/sharpener - name = "Sharpener" - id = "whetstone" - cost = 3 - item_path = /obj/item/sharpener - - -/datum/gang_item/equipment/emp - name = "EMP Grenade" - id = "EMP" - cost = 5 - item_path = /obj/item/grenade/empgrenade - -/datum/gang_item/equipment/c4 - name = "C4 Explosive" - id = "c4" - cost = 7 - item_path = /obj/item/grenade/plastic/c4 - -/datum/gang_item/equipment/frag - name = "Fragmentation Grenade" - id = "frag nade" - cost = 18 - item_path = /obj/item/grenade/syndieminibomb/concussion/frag - -/datum/gang_item/equipment/stimpack - name = "Black Market Stimulants" - id = "stimpack" - cost = 12 - item_path = /obj/item/reagent_containers/syringe/stimulants - -/datum/gang_item/equipment/implant_breaker - name = "Implant Breaker" - id = "implant_breaker" - cost = 10 - item_path = /obj/item/implanter/gang - spawn_msg = "The implant breaker is a single-use device that destroys all implants within the target before trying to recruit them to your gang. Also works on enemy gangsters." - -/datum/gang_item/equipment/implant_breaker/spawn_item(mob/living/carbon/user, datum/gang/gang, obj/item/device/gangtool/gangtool) - if(item_path) - var/obj/item/O = new item_path(user.loc, gang) //we need to override this whole proc for this one argument - user.put_in_hands(O) - if(spawn_msg) - to_chat(user, spawn_msg) - -/datum/gang_item/equipment/wetwork_boots - name = "Wetwork boots" - id = "wetwork" - cost = 20 - item_path = /obj/item/clothing/shoes/combat/gang - -/obj/item/clothing/shoes/combat/gang - name = "Wetwork boots" - desc = "A gang's best hitmen are prepared for anything." - permeability_coefficient = 0.01 - flags_1 = NOSLIP_1 - -/datum/gang_item/equipment/pen - name = "Recruitment Pen" - id = "pen" - cost = 50 - item_path = /obj/item/pen/gang - spawn_msg = "More recruitment pens will allow you to recruit gangsters faster. Only gang leaders can recruit with pens." - -/datum/gang_item/equipment/pen/purchase(mob/living/carbon/user, datum/gang/gang, obj/item/device/gangtool/gangtool) - if(..()) - gangtool.free_pen = FALSE - return TRUE - return FALSE - -/datum/gang_item/equipment/pen/get_cost(mob/living/carbon/user, datum/gang/gang, obj/item/device/gangtool/gangtool) - if(gangtool && gangtool.free_pen) - return 0 - return ..() - -/datum/gang_item/equipment/pen/get_cost_display(mob/living/carbon/user, datum/gang/gang, obj/item/device/gangtool/gangtool) - if(gangtool && gangtool.free_pen) - return "(GET ONE FREE)" - return ..() - - -/datum/gang_item/equipment/gangtool - id = "gangtool" - cost = 10 - -/datum/gang_item/equipment/gangtool/spawn_item(mob/living/carbon/user, datum/gang/gang, obj/item/device/gangtool/gangtool) - var/item_type - if(gang && isboss(user, gang)) - item_type = /obj/item/device/gangtool/spare/lt - if(gang.bosses.len < 3) - to_chat(user, "Gangtools allow you to promote a gangster to be your Lieutenant, enabling them to recruit and purchase items like you. Simply have them register the gangtool. You may promote up to [3-gang.bosses.len] more Lieutenants") - else - item_type = /obj/item/device/gangtool/spare - var/obj/item/device/gangtool/spare/tool = new item_type(user.loc) - user.put_in_hands(tool) - -/datum/gang_item/equipment/gangtool/get_name_display(mob/living/carbon/user, datum/gang/gang, obj/item/device/gangtool/gangtool) - if(gang && isboss(user, gang) && (gang.bosses.len < 3)) - return "Promote a Gangster" - return "Spare Gangtool" - - -/datum/gang_item/equipment/dominator - name = "Station Dominator" - id = "dominator" - cost = 30 - item_path = /obj/machinery/dominator - spawn_msg = "The dominator will secure your gang's dominance over the station. Turn it on when you are ready to defend it." - -/datum/gang_item/equipment/dominator/can_buy(mob/living/carbon/user, datum/gang/gang, obj/item/device/gangtool/gangtool) - if(!gang || !gang.dom_attempts) - return FALSE - return ..() - -/datum/gang_item/equipment/dominator/get_name_display(mob/living/carbon/user, datum/gang/gang, obj/item/device/gangtool/gangtool) - if(!gang || !gang.dom_attempts) - return ..() - return "[..()]" - -/datum/gang_item/equipment/dominator/get_cost_display(mob/living/carbon/user, datum/gang/gang, obj/item/device/gangtool/gangtool) - if(!gang || !gang.dom_attempts) - return "(Out of stock)" - return ..() - -/datum/gang_item/equipment/dominator/get_extra_info(mob/living/carbon/user, datum/gang/gang, obj/item/device/gangtool/gangtool) - if(gang) - return "(Estimated Takeover Time: [round(determine_domination_time(gang)/60,0.1)] minutes)" - -/datum/gang_item/equipment/dominator/purchase(mob/living/carbon/user, datum/gang/gang, obj/item/device/gangtool/gangtool) - var/area/usrarea = get_area(user.loc) - var/usrturf = get_turf(user.loc) - if(initial(usrarea.name) == "Space" || isspaceturf(usrturf) || usr.z != ZLEVEL_STATION || !usrarea.valid_territory) - to_chat(user, "You can only use this on the station!") - return FALSE - - for(var/obj/obj in usrturf) - if(obj.density) - to_chat(user, "There's not enough room here!") - return FALSE - - if(dominator_excessive_walls(user)) - to_chat(user, "The dominator will not function here! The dominator requires a sizable open space within three standard units so that walls do not interfere with the signal.") - return FALSE - - if(!(usrarea.type in gang.territory|gang.territory_new)) - to_chat(user, "The dominator can be spawned only on territory controlled by your gang!") - return FALSE - return ..() - -/datum/gang_item/equipment/dominator/spawn_item(mob/living/carbon/user, datum/gang/gang, obj/item/device/gangtool/gangtool) - new item_path(user.loc) diff --git a/code/game/gamemodes/gang/gang_pen.dm b/code/game/gamemodes/gang/gang_pen.dm deleted file mode 100644 index c410d7d7da..0000000000 --- a/code/game/gamemodes/gang/gang_pen.dm +++ /dev/null @@ -1,68 +0,0 @@ -/* - * Gang Boss Pens - */ -/obj/item/pen/gang - var/cooldown - var/last_used = 0 - var/charges = 1 - -/obj/item/pen/gang/New() - ..() - last_used = world.time - -/obj/item/pen/gang/attack(mob/living/M, mob/user, stealth = TRUE) - if(!istype(M)) - return - if(ishuman(M) && ishuman(user) && M.stat != DEAD) - if(user.mind && (user.mind in SSticker.mode.get_gang_bosses())) - if(..(M,user,1)) - if(cooldown) - to_chat(user, "[src] needs more time to recharge before it can be used.") - return - if(M.client) - M.mind_initialize() //give them a mind datum if they don't have one. - var/datum/gang/G = user.mind.gang_datum - var/recruitable = SSticker.mode.add_gangster(M.mind,G) - switch(recruitable) - if(3) - for(var/obj/O in M.contents) - if(istype(O, /obj/item/device/gangtool/soldier)) - to_chat(user, "This gangster already has an uplink!") - return - new /obj/item/device/gangtool/soldier(M) - to_chat(user, "You inject [M] with a new gangtool!") - cooldown(G) - if(2) - new /obj/item/device/gangtool/soldier(M) - M.Unconscious(100) - cooldown(G) - if(1) - to_chat(user, "This mind is resistant to recruitment!") - else - to_chat(user, "This mind has already been recruited into a gang!") - return - ..() - -/obj/item/pen/gang/proc/cooldown(datum/gang/gang) - set waitfor = FALSE - var/cooldown_time = 600+(600*gang.bosses.len) // 1recruiter=2mins, 2recruiters=3mins, 3recruiters=4mins - - cooldown = 1 - icon_state = "pen_blink" - - var/time_passed = world.time - last_used - var/time - for(time=time_passed, time>=cooldown_time, time-=cooldown_time) //get 1 charge every cooldown interval - charges++ - - charges = max(0,charges-1) - - last_used = world.time - time - - if(charges) - cooldown_time = 50 - sleep(cooldown_time) - cooldown = 0 - icon_state = "pen" - var/mob/M = get(src, /mob) - to_chat(M, "[icon2html(src, M)] [src][(src.loc == M)?(""):(" in your [src.loc]")] vibrates softly. It is ready to be used again.") diff --git a/code/game/gamemodes/gang/recaller.dm b/code/game/gamemodes/gang/recaller.dm deleted file mode 100644 index f578ac3d3d..0000000000 --- a/code/game/gamemodes/gang/recaller.dm +++ /dev/null @@ -1,332 +0,0 @@ -//gangtool device -/obj/item/device/gangtool - name = "suspicious device" - desc = "A strange device of sorts. Hard to really make out what it actually does if you don't know how to operate it." - icon_state = "gangtool-white" - item_state = "radio" - lefthand_file = 'icons/mob/inhands/misc/devices_lefthand.dmi' - righthand_file = 'icons/mob/inhands/misc/devices_righthand.dmi' - throwforce = 0 - w_class = WEIGHT_CLASS_TINY - throw_speed = 3 - throw_range = 7 - flags_1 = CONDUCT_1 - var/datum/gang/gang //Which gang uses this? - var/recalling = 0 - var/outfits = 2 - var/free_pen = 0 - var/promotable = 0 - var/list/tags = list() - -/obj/item/device/gangtool/Initialize() //Initialize supply point income if it hasn't already been started - ..() - if(!SSticker.mode.gang_points) - SSticker.mode.gang_points = new /datum/gang_points(SSticker.mode) - -/obj/item/device/gangtool/attack_self(mob/user) - if (!can_use(user)) - return - - var/dat - if(!gang) - dat += "This device is not registered.

" - if(user.mind in SSticker.mode.get_gang_bosses()) - if(promotable && user.mind.gang_datum.bosses.len < 3) - dat += "Give this device to another member of your organization to use to promote them to Lieutenant.

" - dat += "If this is meant as a spare device for yourself:
" - dat += "Register Device as Spare
" - else if (promotable) - if(user.mind.gang_datum.bosses.len < 3) - dat += "You have been selected for a promotion!
" - dat += "Accept Promotion
" - else - dat += "No promotions available: All positions filled.
" - else - dat += "This device is not authorized to promote.
" - else - if(gang.is_dominating) - dat += "
Takeover In Progress:
[gang.domination_time_remaining()] seconds remain
" - - var/isboss = (user.mind == gang.bosses[1]) - dat += "Registration: [gang.name] Gang [isboss ? "Boss" : "Lieutenant"]
" - dat += "Organization Size: [gang.gangsters.len + gang.bosses.len] | Station Control: [round((gang.territory.len/GLOB.start_state.num_territories)*100, 1)]%
" - dat += "Your Influence: [gang.get_influence(user.mind)]
" - dat += "Time until Influence grows: [time2text(SSticker.mode.gang_points.next_point_time - world.time, "mm:ss")]
" - dat += "
" - - - for(var/cat in gang.boss_category_list) - dat += "[cat]
" - for(var/V in gang.boss_category_list[cat]) - var/datum/gang_item/G = V - if(!G.can_see(user, gang, src)) - continue - - var/cost = G.get_cost_display(user, gang, src) - if(cost) - dat += cost + " " - - var/toAdd = G.get_name_display(user, gang, src) - if(G.can_buy(user, gang, src)) - toAdd = "[toAdd]" - dat += toAdd - var/extra = G.get_extra_info(user, gang, src) - if(extra) - dat += "
[extra]" - dat += "
" - dat += "
" - - dat += "Refresh
" - - var/datum/browser/popup = new(user, "gangtool", "Welcome to GangTool v3.5", 340, 625) - popup.set_content(dat) - popup.open() - - - -/obj/item/device/gangtool/Topic(href, href_list) - if(!can_use(usr)) - return - - add_fingerprint(usr) - - if(href_list["register"]) - register_device(usr) - - else if(!gang) //Gangtool must be registered before you can use the functions below - return - - if(href_list["purchase"]) - var/datum/gang_item/G = gang.boss_item_list[href_list["purchase"]] - if(G && G.can_buy(usr, gang, src)) - G.purchase(usr, gang, src, FALSE) - - attack_self(usr) - - -/obj/item/device/gangtool/proc/ping_gang(mob/user) - if(!user) - return - var/message = stripped_input(user,"Discreetly send a gang-wide message.","Send Message") as null|text - if(!message || !can_use(user)) - return - if(user.z > 2) - to_chat(user, "[icon2html(src, user)]Error: Station out of range.") - return - var/list/members = list() - members += gang.gangsters - members += gang.bosses - if(members.len) - var/gang_rank = gang.bosses.Find(user.mind) - switch(gang_rank) - if(1) - gang_rank = "Gang Boss" - if(2) - gang_rank = "1st Lieutenant" - if(3) - gang_rank = "2nd Lieutenant" - if(4) - gang_rank = "3rd Lieutenant" - else - gang_rank = "[gang_rank - 1]th Lieutenant" - var/ping = "[gang.name] [gang_rank]: [message]" - for(var/datum/mind/ganger in members) - if(ganger.current && (ganger.current.z <= 2) && (ganger.current.stat == CONSCIOUS)) - to_chat(ganger.current, ping) - for(var/mob/M in GLOB.dead_mob_list) - var/link = FOLLOW_LINK(M, user) - to_chat(M, "[link] [ping]") - log_talk(user,"GANG: [key_name(user)] Messaged [gang.name] Gang: [message].",LOGSAY) - - -/obj/item/device/gangtool/proc/register_device(mob/user) - if(gang) //It's already been registered! - return - if((promotable && (user.mind in SSticker.mode.get_gangsters())) || (user.mind in SSticker.mode.get_gang_bosses())) - gang = user.mind.gang_datum - gang.gangtools += src - icon_state = "gangtool-[gang.color]" - if(!(user.mind in gang.bosses)) - var/cached_influence = gang.gangsters[user.mind] - SSticker.mode.remove_gangster(user.mind, 0, 2) - gang.bosses[user.mind] = cached_influence - user.mind.gang_datum = gang - user.mind.special_role = "[gang.name] Gang Lieutenant" - gang.add_gang_hud(user.mind) - log_game("[key_name(user)] has been promoted to Lieutenant in the [gang.name] Gang") - free_pen = 1 - gang.message_gangtools("[user] has been promoted to Lieutenant.") - to_chat(user, "You have been promoted to Lieutenant!") - SSticker.mode.forge_gang_objectives(user.mind) - SSticker.mode.greet_gang(user.mind,0) - to_chat(user, "The Gangtool you registered will allow you to purchase weapons and equipment, and send messages to your gang.") - to_chat(user, "Unlike regular gangsters, you may use recruitment pens to add recruits to your gang. Use them on unsuspecting crew members to recruit them. Don't forget to get your one free pen from the gangtool.") - else - to_chat(usr, "ACCESS DENIED: Unauthorized user.") - -/obj/item/device/gangtool/proc/recall(mob/user) - if(!can_use(user)) - return 0 - - if(SSshuttle.emergencyNoRecall) - return 0 - - if(recalling) - to_chat(usr, "Error: Recall already in progress.") - return 0 - - if(!gang.recalls) - to_chat(usr, "Error: Unable to access communication arrays. Firewall has logged our signature and is blocking all further attempts.") - - gang.message_gangtools("[usr] is attempting to recall the emergency shuttle.") - recalling = 1 - to_chat(loc, "[icon2html(src, loc)]Generating shuttle recall order with codes retrieved from last call signal...") - - sleep(rand(100,300)) - - if(SSshuttle.emergency.mode != SHUTTLE_CALL) //Shuttle can only be recalled when it's moving to the station - to_chat(user, "[icon2html(src, user)]Emergency shuttle cannot be recalled at this time.") - recalling = 0 - return 0 - to_chat(loc, "[icon2html(src, loc)]Shuttle recall order generated. Accessing station long-range communication arrays...") - - sleep(rand(100,300)) - - if(!gang.dom_attempts) - to_chat(user, "[icon2html(src, user)]Error: Unable to access communication arrays. Firewall has logged our signature and is blocking all further attempts.") - recalling = 0 - return 0 - - var/turf/userturf = get_turf(user) - if(userturf.z != ZLEVEL_STATION) //Shuttle can only be recalled while on station - to_chat(user, "[icon2html(src, user)]Error: Device out of range of station communication arrays.") - recalling = 0 - return 0 - var/datum/station_state/end_state = new /datum/station_state() - end_state.count() - if((100 * GLOB.start_state.score(end_state)) < 80) //Shuttle cannot be recalled if the station is too damaged - to_chat(user, "[icon2html(src, user)]Error: Station communication systems compromised. Unable to establish connection.") - recalling = 0 - return 0 - to_chat(loc, "[icon2html(src, loc)]Comm arrays accessed. Broadcasting recall signal...") - - sleep(rand(100,300)) - - recalling = 0 - log_game("[key_name(user)] has tried to recall the shuttle with a gangtool.") - message_admins("[key_name_admin(user)] has tried to recall the shuttle with a gangtool.", 1) - userturf = get_turf(user) - if(userturf.z == ZLEVEL_STATION) //Check one more time that they are on station. - if(SSshuttle.cancelEvac(user)) - gang.recalls -= 1 - return 1 - - to_chat(loc, "[icon2html(src, loc)]No response recieved. Emergency shuttle cannot be recalled at this time.") - return 0 - -/obj/item/device/gangtool/proc/can_use(mob/living/carbon/human/user) - if(!istype(user)) - return 0 - if(user.incapacitated()) - return 0 - if(!(src in user.contents)) - return 0 - if(!user.mind) - return 0 - if(gang && (user.mind in gang.bosses)) //If it's already registered, only let the gang's bosses use this - return 1 - else if(user.mind in SSticker.mode.get_all_gangsters()) // For soldiers and potential LT's - return 1 - return 0 - -/obj/item/device/gangtool/spare - outfits = 1 - -/obj/item/device/gangtool/spare/lt - promotable = 1 - -///////////// Internal tool used by gang regulars /////////// - -/obj/item/device/gangtool/soldier/New(mob/user) - . = ..() - gang = user.mind.gang_datum - gang.gangtools += src - var/datum/action/innate/gang/tool/GT = new - GT.Grant(user, src, gang) - -/obj/item/device/gangtool/soldier/attack_self(mob/user) - if (!can_use(user)) - return - var/dat - if(gang.is_dominating) - dat += "
Takeover In Progress:
[gang.domination_time_remaining()] seconds remain
" - dat += "Registration: [gang.name] - Foot Soldier
" - dat += "Organization Size: [gang.gangsters.len + gang.bosses.len] | Station Control: [round((gang.territory.len/GLOB.start_state.num_territories)*100, 1)]%
" - dat += "Your Influence: [gang.get_influence(user.mind)]
" - if(LAZYLEN(tags)) - dat += "Your tags generate bonus influence for you.
You have tagged the following territories:" - for(var/obj/effect/decal/cleanable/crayon/gang/T in tags) - dat += " [T.territory] -" - else - dat += "You have not personally tagged any territory for your gang. Use a spray can to mark your territory and receive bonus influence." - dat += "
Time until Influence grows: [time2text(SSticker.mode.gang_points.next_point_time - world.time, "mm:ss")]
" - dat += "
" - for(var/cat in gang.reg_category_list) - dat += "[cat]
" - for(var/V in gang.reg_category_list[cat]) - var/datum/gang_item/G = V - if(!G.can_see(user, gang, src)) - continue - - var/cost = G.get_cost_display(user, gang, src) - if(cost) - dat += cost + " " - - var/toAdd = G.get_name_display(user, gang, src) - if(G.can_buy(user, gang, src)) - toAdd = "[toAdd]" - dat += toAdd - var/extra = G.get_extra_info(user, gang, src) - if(extra) - dat += "
[extra]" - dat += "
" - dat += "
" - - dat += "Refresh
" - - var/datum/browser/popup = new(user, "gangtool", "Welcome to GangTool v3.5", 340, 625) - popup.set_content(dat) - popup.open() - -/obj/item/device/gangtool/soldier/Topic(href, href_list) - if(!can_use(usr)) - return - if(href_list["purchase"]) - var/datum/gang_item/G = gang.reg_item_list[href_list["purchase"]] - if(G && G.can_buy(usr, gang, src)) - G.purchase(usr, gang, src, FALSE) - - attack_self(usr) - -/datum/action/innate/gang - background_icon_state = "bg_spell" - -/datum/action/innate/gang/IsAvailable() - if(!owner.mind || !owner.mind in SSticker.mode.get_all_gangsters()) - return 0 - return ..() - -/datum/action/innate/gang/tool - name = "Personal Gang Tool" - desc = "An implanted gang tool that lets you purchase gear" - background_icon_state = "bg_mime" - button_icon_state = "bolt_action" - var/obj/item/device/gangtool/soldier/GT - -/datum/action/innate/gang/tool/Grant(mob/user, obj/reg, datum/gang/G) - . = ..() - GT = reg - button.color = G.color - -/datum/action/innate/gang/tool/Activate() - GT.attack_self(owner) diff --git a/code/game/gamemodes/intercept_report.dm b/code/game/gamemodes/intercept_report.dm deleted file mode 100644 index af138c689e..0000000000 --- a/code/game/gamemodes/intercept_report.dm +++ /dev/null @@ -1,52 +0,0 @@ -//Intercept reports are sent to the station every round to warn the crew of possible threats. They consist of five possibilites, one of which is always correct. - -/datum/intercept_text - var/text - -/datum/intercept_text/proc/build(mode_type) - text = "
" - switch(mode_type) - if("blob") - text += "A CMP scientist by the name of [pick("Griff", "Pasteur", "Chamberland", "Buist", "Rivers", "Stanley")] boasted about his corporation's \"finest creation\" - a macrobiological \ - virus capable of self-reproduction and hellbent on consuming whatever it touches. He went on to query Cybersun for permission to utilize the virus in biochemical warfare, to which \ - CMP subsequently gained. Be vigilant for any large organisms rapidly spreading across the station, as they are classified as a level 5 biohazard and critically dangerous. Note that \ - this organism seems to be weak to extreme heat; concentrated fire (such as welding tools and lasers) will be effective against it." - if("changeling") - text += "The Gorlex Marauders have announced the successful raid and destruction of Central Command containment ship #S-[rand(1111, 9999)]. This ship housed only a single prisoner - \ - codenamed \"Thing\", and it was highly adaptive and extremely dangerous. We have reason to believe that the Thing has allied with the Syndicate, and you should note that likelihood \ - of the Thing being sent to a station in this sector is highly likely. It may be in the guise of any crew member. Trust nobody - suspect everybody. Do not announce this to the crew, \ - as paranoia may spread and inhibit workplace efficiency." - if("clock_cult") - text += "We have lost contact with multiple stations in your sector. They have gone dark and do not respond to all transmissions, although they appear intact and the crew's life \ - signs remain uninterrupted. Those that have managed to send a transmission or have had some of their crew escape tell tales of a machine cult creating sapient automatons and seeking \ - to brainwash the crew to summon their god, Ratvar. If evidence of this cult is dicovered aboard your station, extreme caution and extreme vigilance must be taken going forward, and \ - all resources should be devoted to stopping this cult. Note that holy water seems to weaken and eventually return the minds of cultists that ingest it, and mindshield implants will \ - prevent conversion altogether." - if("cult") - text += "Some stations in your sector have reported evidence of blood sacrifice and strange magic. Ties to the Wizards' Federation have been proven not to exist, and many employees \ - have disappeared; even Central Command employees light-years away have felt strange presences and at times hysterical compulsions. Interrogations point towards this being the work of \ - the cult of Nar-Sie. If evidence of this cult is discovered aboard your station, extreme caution and extreme vigilance must be taken going forward, and all resources should be \ - devoted to stopping this cult. Note that holy water seems to weaken and eventually return the minds of cultists that ingest it, and mindshield implants will prevent conversion \ - altogether." - if("extended") - text += "The transmission mostly failed to mention your sector. It is possible that there is nothing in the Syndicate that could threaten your station during this shift." - if("malf") - text += "A large ionospheric anomaly recently passed through your sector. Although physically undetectable, ionospherics tend to have an extreme effect on telecommunications equipment \ - as well as artificial intelligence units. Closely observe the behavior of artificial intelligence, and treat any machine malfunctions as purposeful. If necessary, termination of the \ - artificial intelligence is advised; assuming that it activates the station's self-destruct, your pinpointer has been configured to constantly track it, wherever it may be." - if("nuclear") - text += "One of Central Command's trading routes was recently disrupted by a raid carried out by the Gorlex Marauders. They seemed to only be after one ship - a highly-sensitive \ - transport containing a nuclear fission explosive, although it is useless without the proper code and authorization disk. While the code was likely found in minutes, the only disk that \ - can activate this explosive is on your station. Ensure that it is protected at all times, and remain alert for possible intruders." - if("revolution") - text += "Employee unrest has spiked in recent weeks, with several attempted mutinies on heads of staff. Some crew have been observed using flashbulb devices to blind their colleagues, \ - who then follow their orders without question and work towards dethroning departmental leaders. Watch for behavior such as this with caution. If the crew attempts a mutiny, you and \ - your heads of staff are fully authorized to execute them using lethal weaponry - they will be later cloned and interrogated at Central Command." - if("traitor") - text += "Although more specific threats are commonplace, you should always remain vigilant for Syndicate agents aboard your station. Syndicate communications have implied that many \ - Nanotrasen employees are Syndicate agents with hidden memories that may be activated at a moment's notice, so it's possible that these agents might not even know their positions." - if("wizard") - text += "A dangerous Wizards' Federation individual by the name of [pick(GLOB.wizard_first)] [pick(GLOB.wizard_second)] has recently escaped confinement from an unlisted prison facility. This \ - man is a dangerous mutant with the ability to alter himself and the world around him by what he and his leaders believe to be magic. If this man attempts an attack on your station, \ - his execution is highly encouraged, as is the preservation of his body for later study." - return text diff --git a/code/game/gamemodes/miniantags/abduction/abduction.dm b/code/game/gamemodes/miniantags/abduction/abduction.dm deleted file mode 100644 index cb8c51fd83..0000000000 --- a/code/game/gamemodes/miniantags/abduction/abduction.dm +++ /dev/null @@ -1,37 +0,0 @@ -/datum/game_mode - var/list/datum/mind/abductors = list() - -// LANDMARKS -/obj/effect/landmark/abductor - var/team_number = 1 - -/obj/effect/landmark/abductor/agent - icon_state = "abductor_agent" -/obj/effect/landmark/abductor/scientist - icon_state = "abductor" - -// OBJECTIVES -/datum/objective/experiment - target_amount = 6 - -/datum/objective/experiment/New() - explanation_text = "Experiment on [target_amount] humans." - -/datum/objective/experiment/check_completion() - for(var/obj/machinery/abductor/experiment/E in GLOB.machines) - if(!istype(team, /datum/team/abductor_team)) - return FALSE - var/datum/team/abductor_team/T = team - if(E.team_number == T.team_number) - return E.points >= target_amount - return FALSE - -/datum/game_mode/proc/update_abductor_icons_added(datum/mind/alien_mind) - var/datum/atom_hud/antag/hud = GLOB.huds[ANTAG_HUD_ABDUCTOR] - hud.join_hud(alien_mind.current) - set_antag_hud(alien_mind.current, ((alien_mind in abductors) ? "abductor" : "abductee")) - -/datum/game_mode/proc/update_abductor_icons_removed(datum/mind/alien_mind) - var/datum/atom_hud/antag/hud = GLOB.huds[ANTAG_HUD_ABDUCTOR] - hud.leave_hud(alien_mind.current) - set_antag_hud(alien_mind.current, null) \ No newline at end of file diff --git a/code/game/gamemodes/miniantags/hades/hades.dm b/code/game/gamemodes/miniantags/hades/hades.dm deleted file mode 100644 index 948aaeb422..0000000000 --- a/code/game/gamemodes/miniantags/hades/hades.dm +++ /dev/null @@ -1,765 +0,0 @@ -#define STATE_JUDGE 0 -#define STATE_WRATH 1 -#define STATE_FLEE 2 - -/mob/living/simple_animal/hostile/hades - name = "hades" - real_name = "hades" - desc = "A strange being, clad in dark robes. Their very presence radiates an uneasy power." - speak_emote = list("preaches","announces","spits","conveys") - emote_hear = list("hums.","prays.") - response_help = "kneels before" - response_disarm = "flails at" - response_harm = "punches" - icon = 'icons/mob/EvilPope.dmi' - icon_state = "EvilPope" - icon_living = "EvilPope" - icon_dead = "popedeath" - speed = 1 - a_intent = "harm" - status_flags = CANPUSH - attack_sound = 'sound/magic/MAGIC_MISSILE.ogg' - death_sound = 'sound/magic/Teleport_diss.ogg' - atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) - minbodytemp = 0 - maxbodytemp = INFINITY - faction = list("hades") - attacktext = "strikes with an unholy rage at" - maxHealth = 1000 - health = 1000 - healable = 0 - environment_smash = 3 - melee_damage_lower = 15 - melee_damage_upper = 20 - see_in_dark = 8 - see_invisible = SEE_INVISIBLE_MINIMUM - loot = list(/obj/effect/decal/cleanable/blood) - del_on_death = 0 - deathmessage = "begins to sizzle and pop, their flesh peeling away like paper." - - var/isDoingDeath = FALSE - var/isFleeing = FALSE - var/fleeTimes = 0 - var/currentState = STATE_JUDGE - var/rageLevel = 0 - - var/maxWrathTimer = 150 - var/lastWrathTimer = 0 - - var/timeBetweenGrabs = 60 - var/lastGrabTime = 0 - - var/list/validSins = list("Greed","Gluttony","Pride","Lust","Envy","Sloth","Wrath") - var/lastsinPerson = 0 - var/sinPersonTime = 300 - var/lastFlee = 0 - var/fleeTimer = 30 - var/fakesinPersonChance = 60 - var/list/sinPersonsayings = list("You revel in only your own greed.",\ - "There is nothing but your absolution.",\ - "Your choices have led you to this.",\ - "There is only one way out.",\ - "The only way to be free is to be free of yourself.",\ - "Wallow in sin, and give yourself unto darkness.",\ - "Only the truly sinful may stand.",\ - "Find yourself and you will find Absolution.",\ - "Forego the pain of this process, and submit.",\ - "We can be one in suffering.",\ - "You stand on the precipice of ascension, give in.",\ - "You cannot fathom what lies beyond",\ - "Repent your sins.",\ - "This is the eve of your last days.",\ - "Darkness comes.") - - var/list/creepyasssounds = list('sound/hallucinations/behind_you1.ogg', 'sound/hallucinations/behind_you2.ogg', \ - 'sound/hallucinations/growl3.ogg', 'sound/hallucinations/im_here1.ogg', 'sound/hallucinations/im_here2.ogg',\ - 'sound/hallucinations/i_see_you1.ogg', 'sound/hallucinations/i_see_you2.ogg',\ - 'sound/hallucinations/look_up1.ogg', 'sound/hallucinations/look_up2.ogg', 'sound/hallucinations/over_here1.ogg',\ - 'sound/hallucinations/over_here2.ogg', 'sound/hallucinations/over_here3.ogg',\ - 'sound/hallucinations/turn_around1.ogg', 'sound/hallucinations/turn_around2.ogg') - - var/obj/effect/proc_holder/spell/targeted/lightning/sinLightning - - var/list/currentAcolytes = list() - -/mob/living/simple_animal/hostile/hades/New() - ..() - - sinLightning = new/obj/effect/proc_holder/spell/targeted/lightning(src) - - sinLightning.charge_max = 1 - sinLightning.clothes_req = 0 - sinLightning.range = 32 - sinLightning.cooldown_min = 1 - - lastsinPerson = world.time - var/list/possible_titles = list("Pope","Bishop","Lord","Cardinal","Deacon","Pontiff") - var/chosen = "Hades, [pick(possible_titles)] of Sin" - name = chosen - real_name = chosen - - world << "[name] has entered your reality. Kneel before them." - world << 'sound/effects/pope_entry.ogg' - - Appear(get_turf(src)) - -/mob/living/simple_animal/hostile/hades/handle_environment(datum/gas_mixture/environment) - //space popes are from space, they need not your fickle "oxygen" - return - -/mob/living/simple_animal/hostile/hades/handle_temperature_damage() - //space popes are from space, they don't uh.. something fire burny death - return - -/mob/living/simple_animal/hostile/hades/death(gibbed) - if(!isDoingDeath) - notransform = TRUE - anchored = TRUE - src.visible_message("[src] begins to twist and distort, before snapping backwards with a sickening crunch.") - spawn(20) - src.visible_message("[src] is being sucked back to their own realm, destabilizing the fabric of time and space itself!") - playsound(get_turf(src), 'sound/effects/hyperspace_begin.ogg', 100, 1) - isDoingDeath = TRUE - AIStatus = AI_OFF - SpinAnimation() - for(var/i in 1 to 5) - for(var/turf/T in spiral_range_turfs(i,src)) - addtimer(src, "sinShed", i*10, FALSE, T) - spawn(60) // required to be spawn so we can call death's ..() to complete death. - SpinAnimation(0,0) - explosion(get_turf(src), 0, 2, 4, 6, flame_range = 6) - ..() - var/area/A = locate(/area/hades) in world - if(A) - var/turf/T = get_turf(locate(/obj/effect/landmark/event_spawn) in A) - if(T) - src.visible_message("[src]'s Staff is flung free as their body explodes.") - var/obj/structure/ladder/unbreakable/hades/churchLadder = new/obj/structure/ladder/unbreakable/hades(T) - var/obj/structure/ladder/unbreakable/hades/bodyLadder = new/obj/structure/ladder/unbreakable/hades(get_turf(src)) - var/obj/item/hades_staff/HS = new/obj/item/hades_staff(get_turf(src)) - HS.throw_at_fast(pick(orange(src,7)),10,1) - churchLadder.up = bodyLadder - bodyLadder.down = churchLadder - qdel(src) - -/mob/living/simple_animal/hostile/hades/attackby(obj/item/I, mob/user, params) - ..() - Defend(user,I) - -/mob/living/simple_animal/hostile/hades/grabbedby(mob/living/carbon/user, supress_message = 0) - ..() - Defend(user,user) - -/mob/living/simple_animal/hostile/hades/hitby(atom/movable/AM, skipcatch, hitpush, blocked) - ..() - lastsinPerson -= (sinPersonTime/4) - if(istype(AM,/obj/item)) - var/obj/item/throwCast = AM - Defend(throwCast.thrownby,AM) - -/mob/living/simple_animal/hostile/hades/bullet_act(obj/item/projectile/P, def_zone) - //don't call ..() because we're going to deflect it - lastsinPerson -= (sinPersonTime/4) - Defend(P.firer,P) - return -1 - -/mob/living/simple_animal/hostile/hades/attack_hand(mob/living/carbon/human/M) - ..() - lastsinPerson -= (sinPersonTime/4) - Defend(M,M) - -/mob/living/simple_animal/hostile/hades/proc/Defend(var/mob/attacker,var/source) - if(!isDoingDeath) - rageLevel += 5 - src.visible_message("[src] rounds on the [attacker], gazing at them with a [pick("cold","frosty","freezing","dark")] [pick("glare","gaze","glower","stare")].") - - if(istype(source,/obj/item/projectile)) - src.visible_message("[src] [pick("calmly","silently","nonchalantly")] waves their hand, deflecting the [source].") - var/obj/item/projectile/P = source - if(P.starting) - var/new_x = P.starting.x + pick(0, 0, 0, 0, 0, -1, 1, -2, 2) - var/new_y = P.starting.y + pick(0, 0, 0, 0, 0, -1, 1, -2, 2) - var/turf/curloc = get_turf(src) - - P.original = locate(new_x, new_y, P.z) - P.starting = curloc - P.current = curloc - P.firer = src - P.yo = new_y - curloc.y - P.xo = new_x - curloc.x - P.Angle = null - else - if(prob(20)) - var/chosenDefend = rand(1,3) - switch(chosenDefend) - if(1) - attacker.visible_message("[attacker] is lifted from the ground, shadowy powers tossing them aside.") - attacker.throw_at_fast(pick(orange(src,7)),10,1) - if(2) - attacker.visible_message("[attacker] crackles with electricity, a bolt leaping from [src] to them.") - sinLightning.Bolt(src,attacker,30,5,src) - if(3) - src.visible_message("[src] points his staff at [attacker], a swarm of eyeballs lurching fourth!") - for(var/i in 1 to 4) - var/mob/living/simple_animal/hostile/carp/eyeball/E = new/mob/living/simple_animal/hostile/carp/eyeball(pick(orange(attacker,1))) - E.faction = faction - addtimer(E, "gib", 150, FALSE) - -/mob/living/simple_animal/hostile/hades/proc/sinShed(var/turf/T) - var/obj/effect/overlay/temp/cult/sparks/S = PoolOrNew(/obj/effect/overlay/temp/cult/sparks, T) - S.anchored = FALSE - S.throw_at_fast(src,10,1) - PoolOrNew(/obj/effect/overlay/temp/hadesBlood, T) - -/mob/living/simple_animal/hostile/hades/proc/Transfer(var/mob/living/taken, var/turf/transferTarget) - if(transferTarget) - playsound(get_turf(taken), 'sound/magic/Ethereal_Enter.ogg', 50, 1, -1) - PoolOrNew(/obj/effect/overlay/temp/hadesFlick, get_turf(taken)) - taken.forceMove(transferTarget) - Appear(get_turf(taken)) - -/mob/living/simple_animal/hostile/hades/proc/Appear(var/turf/where) - var/obj/effect/timestop/hades/TS = new /obj/effect/timestop/hades(where) - TS.immune = list(src) - -/mob/living/simple_animal/hostile/hades/Life() - if(..() && !isDoingDeath) // appropriately check if we're alive now we leave a corpse - if(health > maxHealth/4 && !isFleeing) - if(rageLevel > 50) - lastWrathTimer = world.time - currentState = STATE_WRATH - else - currentState = STATE_JUDGE - else - if(world.time > lastFlee + fleeTimer) - lastFlee = world.time - isFleeing = TRUE - currentState = STATE_FLEE - - var/area/healthCheck = get_area(src) - - if(istype(healthCheck,/area/chapel/main)) - if(currentState == STATE_FLEE) - lastWrathTimer = world.time - currentState = STATE_WRATH - if(health < maxHealth/2) - health += 10 // slowly regain hp in the chapel, up to a maximum of half our max - - var/spokenThisTurn = FALSE - for(var/mob/living/A in currentAcolytes) - if(!A) - currentAcolytes -= A - continue - if(A.health <= 0) - rageLevel += 5 - if(!spokenThisTurn) - spokenThisTurn = TRUE - var/list/lossSayings = list("They were weak.","For every death, two more rise.",\ - "What is but one servant lost?","Darkness engulf you!","To the Pit with them.",\ - "Fools! All of you!","You can't stop me. You. Will. Be. JUDGED.") - src.say(pick(lossSayings)) - currentAcolytes -= A - A.gib() - - if(currentState == STATE_WRATH) // we have been enraged. - if(world.time > lastWrathTimer + maxWrathTimer) - rageLevel = 0 // wind down if we're wrathful too long. - rageLevel -= 1 // rage phase starts at 50, meaning roughly 20s of rage. - if(currentAcolytes.len == 0) - src.say("Rise, Servants. AID YOUR MASTER.") - playsound(get_turf(src), 'sound/magic/CastSummon.ogg', 100, 1) - for(var/i in 1 to 5) - var/mob/living/simple_animal/hostile/hadesacolyte/HA = new/mob/living/simple_animal/hostile/hadesacolyte(get_turf(pick(orange(2,src)))) - HA.master = src - currentAcolytes += HA - if(target) - if(world.time > lastGrabTime + timeBetweenGrabs) - if(get_dist(src,target) > 4) // you can't run from us. upped to 4 to give more leeway. - lastGrabTime = world.time - var/list/fleeSayings = list("There is no escape from your sins, [target]","Fleeing will only make your punishment worse [target]!",\ - "There is nowhere you can hide, [target]!","You can't run, [target]!","Get back here, [target]!","You coward, [target]!",\ - "I will find you, [target]!","Return to me, [target]!") - src.say(pick(fleeSayings)) - var/mob/living/toGrab = target - toGrab.Beam(src,"blood",'icons/effects/beam.dmi',10) - toGrab.Weaken(6) - playsound(get_turf(src), 'sound/magic/CastSummon.ogg', 100, 1) - toGrab.throw_at_fast(src,10,1) - if(rageLevel >= 100) - rageLevel = 50 - var/list/overboardSayings = list("Ashes! It will all be ashes!","I will bring about the apocolypse!",\ - "There will be nothing but your withered husks!","Face your doom, cretins!","There. Will. Be. ORDER!",\ - "I am your Lord, lay down your arms and submit.","Your souls will be cremated!",\ - "Only in death will you obey!","This is no person's fault but your own!") - src.say(pick(overboardSayings)) - var/turf/StartLoc = get_turf(src) - var/list/nearby = orange(6,src) - var/slashCount = 0 - var/aoeType = rand(1,2) // just for future proofing - for(var/mob/living/A in nearby) - slashCount++ - A.Beam(src,"blood",'icons/effects/beam.dmi',10) - spawn(slashCount + 3) - if(aoeType == 1) - // no more cheaping it out with non-player mobs like turrets or carps - loc = get_turf(A) - sinShed(StartLoc) - A.attack_animal(src) - PoolOrNew(/obj/effect/overlay/temp/hadesBlood,get_turf(A)) - playsound(get_turf(A), 'sound/magic/SummonItems_generic.ogg', 100, 1) - if(aoeType == 2) - sinShed(StartLoc) - PoolOrNew(/obj/effect/overlay/temp/hadesBite,get_turf(A)) - A.Weaken(6) - var/obj/effect/timestop/hades/large/TS = new /obj/effect/timestop/hades/large(StartLoc) - TS.immune = list(src) - spawn((slashCount+1)+3) - loc = StartLoc - - if(currentState == STATE_FLEE) // we've been wounded, let us flee and lick our wounds - var/area/A = locate(/area/chapel/main) in world - if(A) - var/turf/T = get_turf(locate(/obj/effect/landmark/event_spawn) in A) - if(!T) - T = get_turf(src) // no event spawn in chapel, fall back to doing it on the spot. - if(T) - fleeTimes++ - Transfer(src,T) - AIStatus = AI_OFF - notransform = TRUE - anchored = TRUE - for(var/i in 1 to 5) - spawn(i*10) - for(var/turf/S in oview(i,src) - oview((i)-1,src)) - sinShed(S) - health += maxHealth/(10*fleeTimes) // every flee we gain less HP - spawn(50) - isFleeing = FALSE - notransform = FALSE - anchored = FALSE - AIStatus = AI_ON - currentState = STATE_JUDGE - lastsinPerson = 0 // immediately teleport away to judge - - if(currentState == STATE_JUDGE) // our default state, judge a few people and tell them they're rude or something - if(world.time > lastsinPerson + sinPersonTime) - if(prob(fakesinPersonChance)) - lastsinPerson = world.time - visible_message("[pick(sinPersonsayings)]") - playsound(get_turf(src), pick(creepyasssounds), 100, 1) - else - lastsinPerson = world.time - var/mob/living/carbon/human/sinPerson = pick(living_mob_list) - var/depth = living_mob_list.len + 1 // just in case - if(sinPerson) // no more finding nullcakes - if(!sinPerson.ckey) - while(!sinPerson.ckey && depth > 0) - --depth - var/checkPerson = pick(living_mob_list) - if(checkPerson) - sinPerson = checkPerson - if(!sinPerson.ckey) - // double check ensure that if the above loop fails to get a ckey target - // we don't go and use the last mob checked, causing odd situations - return - if(sinPerson) - if(prob(65)) // moderately high chance for us to go to them, else they come here. - Transfer(src,get_turf(pick(oview(1,sinPerson)))) - else - Transfer(sinPerson,get_turf(pick(oview(1,src)))) - var/sinPersonchoice = pick(validSins) - switch(sinPersonchoice) - if("Greed") - src.say("Your sin, [sinPerson], is Greed.") - if(prob(50)) - src.say("I will indulge your sin, [sinPerson].") - sin_Greed(sinPerson, TRUE) - else - src.say("Your sin will be punished, [sinPerson]!") - sin_Greed(sinPerson, FALSE) - if("Gluttony") - src.say("Your sin, [sinPerson], is Gluttony.") - if(prob(50)) - src.say("I will indulge your sin, [sinPerson].") - sin_Gluttony(sinPerson,TRUE) - else - src.say("Your sin will be punished, [sinPerson]!") - sin_Gluttony(sinPerson,FALSE) - if("Pride") - src.say("Your sin, [sinPerson], is Pride.") - if(prob(50)) - src.say("I will indulge your sin, [sinPerson].") - sin_Pride(sinPerson,TRUE) - else - src.say("Your sin will be punished, [sinPerson]!") - sin_Pride(sinPerson,FALSE) - if("Lust") - src.say("Your sin, [sinPerson], is Lust.") - if(prob(50)) - src.say("I will indulge your sin, [sinPerson].") - sin_Lust(sinPerson,TRUE) - else - src.say("Your sin will be punished, [sinPerson]!") - sin_Lust(sinPerson,TRUE) - if("Envy") - src.say("Your sin, [sinPerson], is Envy.") - if(prob(50)) - src.say("I will indulge your sin, [sinPerson].") - sin_Envy(sinPerson,TRUE) - else - src.say("Your sin will be punished, [sinPerson]!") - sin_Envy(sinPerson,FALSE) - if("Sloth") - src.say("Your sin, [sinPerson], is Sloth.") - if(prob(50)) - src.say("I will indulge your sin, [sinPerson].") - sin_Sloth(sinPerson,TRUE) - else - src.say("Your sin will be punished, [sinPerson]!") - sin_Sloth(sinPerson,FALSE) - if("Wrath") - src.say("Your sin, [sinPerson], is Wrath.") - if(prob(50)) - src.say("I will indulge your sin, [sinPerson].") - sin_Wrath(sinPerson,TRUE) - else - src.say("Your sin will be punished, [sinPerson]!") - sin_Wrath(sinPerson,FALSE) - - -///Sin related things - -//global Sin procs, shared between staff and pope - -/proc/sin_Greed(var/mob/living/carbon/human/sinPerson, var/isIndulged) - if(isIndulged) - sinPerson << "You feel like you deserve more, in fact, you want everything." - var/list/greed = list(/obj/item/stack/sheet/mineral/gold,/obj/item/stack/sheet/mineral/silver,/obj/item/stack/sheet/mineral/diamond) - for(var/i in 1 to 10) - var/greed_type = pick(greed) - new greed_type(get_turf(sinPerson)) - else - sinPerson << "Your body begins to shift and bend, changing to reflect your inner greed." - var/mob/living/M = sinPerson.change_mob_type(/mob/living/simple_animal/cockroach,get_turf(sinPerson),"Greedroach",1) - M.AddSpell(new/obj/effect/proc_holder/spell/targeted/mind_transfer) - -/proc/sin_Gluttony(var/mob/living/carbon/human/sinPerson, var/isIndulged) - if(isIndulged) - sinPerson << "Your stomach growls, you feel hungry." - var/list/allTypes = list() - for(var/A in typesof(/obj/item/reagent_containers/food/snacks)) - var/obj/item/reagent_containers/food/snacks/O = A - if(initial(O.cooked_type)) - allTypes += A - for(var/i in 1 to 10) - var/greed_type = pick(allTypes) - new greed_type(get_turf(sinPerson)) - else - sinPerson << "Your body begins to bloat and stretch, bile rising in your throat." - sinPerson.reagents.add_reagent("nutriment",1000) - -/proc/sin_Pride(var/mob/living/carbon/human/sinPerson, var/isIndulged) - if(isIndulged) - sinPerson << "You feel strong enough to take on the world." - var/obj/item/twohanded/sin_pride/good = new/obj/item/twohanded/sin_pride(get_turf(sinPerson)) - good.name = "Indulged [good.name]" - good.pride_direction = FALSE - else - sinPerson << "You feel small and weak, like the entire world is against you." - var/obj/item/twohanded/sin_pride/bad = new/obj/item/twohanded/sin_pride(get_turf(sinPerson)) - bad.name = "Punished [bad.name]" - bad.pride_direction = TRUE - -/proc/sin_Lust(var/mob/living/carbon/human/sinPerson, var/isIndulged) - if(isIndulged) - sinPerson << "You feel confident, like everything and everyone is drawn to you." - var/obj/item/lovestone/good = new/obj/item/lovestone(get_turf(sinPerson)) - good.name = "Indulged [good.name]" - good.lust_direction = FALSE - else - sinPerson << "You feel lonely... the wish for the warmth of another spark through your mind." - var/obj/item/lovestone/bad = new/obj/item/lovestone(get_turf(sinPerson)) - bad.name = "Punished [bad.name]" - bad.lust_direction = TRUE - -/proc/sin_Envy(var/mob/living/carbon/human/sinPerson, var/isIndulged) - if(isIndulged) - for(var/mob/living/carbon/human/H in player_list) // name lottery - if(H == sinPerson) - continue - if(prob(25)) - sinPerson.name = H.name - sinPerson.real_name = H.real_name - var/datum/dna/lottery = H.dna - lottery.transfer_identity(sinPerson, transfer_SE=1) - sinPerson.updateappearance(mutcolor_update=1) - sinPerson.domutcheck() - sinPerson << "You feel envious of [sinPerson.name], and your body shifts to reflect that!" - else - var/sinPersonspecies = pick(species_list) - var/newtype = species_list[sinPersonspecies] - sinPerson << "You wish for more from yourself.. your body shifts to suit your wish." - sinPerson.set_species(newtype) - -/proc/sin_Sloth(var/mob/living/carbon/human/sinPerson, var/isIndulged) - if(isIndulged) - sinPerson << "You feel tired..." - sinPerson.drowsyness += 100 - else - sinPerson << "A chill comes over your body, the feeling of frostbite nipping at your fingers." - sinPerson.reagents.add_reagent("frostoil", 50) - -/proc/sin_Wrath(var/mob/living/carbon/human/sinPerson, var/isIndulged) - if(isIndulged) - sinPerson << "You feel wrathful, like you want to destroy everyone and everything." - sinPerson.change_mob_type(/mob/living/simple_animal/slaughter,get_turf(sinPerson),"Wrath Demon",1) - else - sinPerson << "Your chest feels tight, and the world begins to spin around you." - sinPerson.reagents.add_reagent("lexorin", 29) - sinPerson.reagents.add_reagent("mindbreaker", 29) - -/obj/effect/overlay/temp/hadesFlick - name = "transdimensional waste" - icon = 'icons/mob/mob.dmi' - icon_state = "liquify" - duration = 15 - -/obj/effect/overlay/temp/hadesBite - name = "biting tendril" - icon = 'icons/effects/effects.dmi' - icon_state = "tendril_bite" - duration = 15 - -/obj/effect/overlay/temp/hadesBlood - name = "blood plume" - icon = 'icons/effects/128x128.dmi' - icon_state = "spray_plume" - duration = 30 - -/obj/effect/timestop/hades // custom timeslip to make him immune - name = "Frozen Time" - desc = "Time has slowed to a halt." - -/obj/effect/timestop/hades/New() - spawn(5) - ..() - -/obj/effect/timestop/hades/large - freezerange = 6 - icon_state = "huge_rune" - icon = 'icons/effects/224x224.dmi' - - -/obj/item/twohanded/sin_pride - icon_state = "mjollnir0" - name = "Pride-struck Hammer" - desc = "It resonates an aura of Pride." - force = 5 - throwforce = 15 - w_class = 4 - slot_flags = SLOT_BACK - force_unwielded = 5 - force_wielded = 20 - attack_verb = list("attacked", "smashed", "crushed", "splattered", "cracked") - hitsound = 'sound/weapons/blade1.ogg' - var/pride_direction = FALSE - -/obj/item/twohanded/sin_pride/update_icon() - icon_state = "mjollnir[wielded]" - return - -/obj/item/twohanded/sin_pride/afterattack(atom/A as mob|obj|turf|area, mob/user, proximity) - if(!proximity) return - if(wielded) - if(istype(A,/mob/living/carbon/human)) - var/mob/living/carbon/H = A - var/mob/living/carbon/U = user - if(H) - if(pride_direction == FALSE) - U.reagents.trans_to(H, user.reagents.total_volume, 1, 1, 0) - U << "Your pride reflects on [H]." - if(H.health > 0) - U.health += force - U.updatehealth() - H.health -= force - H.updatehealth() - H << "You feel insecure, taking on [user]'s burden." - else if(pride_direction == TRUE) - H.reagents.trans_to(user, H.reagents.total_volume, 1, 1, 0) - H << "Your pride reflects on [user]." - if(U.health > 0) - U.health -= force - U.updatehealth() - H.health += force - H.updatehealth() - U << "You feel insecure, taking on [H]'s burden." - -/obj/item/lovestone - name = "Stone of Lust" - desc = "It lays within your hand, radiating pulses of uncomfortable warmth." - icon = 'icons/obj/wizard.dmi' - icon_state = "lovestone" - item_state = "lovestone" - w_class = 1 - var/lust_direction = FALSE - var/lastUsage = 0 - var/usageTimer = 300 - -/obj/item/lovestone/attack_self(mob/user) - if(world.time > lastUsage + usageTimer) - lastUsage = world.time - user.visible_message("[user] grips the [src] tightly, causing it to vibrate and pulse brightly.") - spawn(25) - if(lust_direction == FALSE) - var/list/throwAt = list() - for(var/atom/movable/AM in oview(7,user)) - if(!AM.anchored && AM != user) - throwAt.Add(AM) - for(var/counter = 1, counter < throwAt.len, ++counter) - var/atom/movable/cast = throwAt[counter] - cast.throw_at_fast(user,10,1) - else if(lust_direction == 1) - var/mob/living/carbon/human/H = user - var/mob/living/carbon/human/foundLover = locate(/mob/living/carbon/human) in orange(3,H) - if(!foundLover) - H << "As you hold the stone, loneliness grips you, your heart feeling heavy and you struggle to breath." - for(var/i in 1 to 10) - addtimer(H.reagents, "add_reagent", i*10, FALSE, "initropidril", i) - else - H << "You take comfort in the presence of [foundLover]" - H.reagents.add_reagent("omnizine",25) - H.Beam(foundLover,"r_beam",'icons/effects/beam.dmi',10) - foundLover << "You take comfort in the presence of [H]" - foundLover.reagents.add_reagent("omnizine",25) - else - user << "The stone lays inert. It is still recharging." - -/mob/living/simple_animal/hostile/hadesacolyte - name = "Acolyte of Hades" - desc = "Darkness seethes from their every pore." - icon_state = "hades_acolyte" - icon_living = "hades_acolyte" - icon_dead = "hades_acolyte_dead" - speak_chance = 0 - turns_per_move = 5 - response_help = "trembles in fear of" - response_disarm = "slaps wildly at" - response_harm = "hits" - speed = 1 - maxHealth = 45 - health = 45 - - harm_intent_damage = 5 - melee_damage_lower = 5 - melee_damage_upper = 15 - attacktext = "strikes at" - attack_sound = 'sound/weapons/bladeslice.ogg' - - butcher_results = list(/obj/item/clothing/mask/gas/cyborg/hades = 1,/obj/item/clothing/suit/hooded/chaplain_hoodie/hades = 1,/obj/item/hades_staff/fake = 1) - - unsuitable_atmos_damage = 0 - del_on_death = 0 - faction = list("hades") - - var/mob/living/simple_animal/hostile/hades/master - -/mob/living/simple_animal/hostile/hadesacolyte/Life() - if(..()) - if(master) - if(get_dist(src,master) > 5) - PoolOrNew(/obj/effect/overlay/temp/hadesFlick,get_turf(src)) - src.visible_message("[src] twists and distorts, before vanishing in a snap.") - src.forceMove(get_turf(pick(orange(2,master)))) - -//acolyte of hades outfit -/obj/item/clothing/mask/gas/cyborg/hades - name = "Skull Mask" - desc = "It's a skull mask, made of a thin, cool metal." - -/obj/item/clothing/suit/hooded/chaplain_hoodie/hades - name = "Dark robes" - desc = "A dark, soft robe." - hooded = 1 - hoodtype = /obj/item/clothing/head/chaplain_hood/hades - -/obj/item/clothing/head/chaplain_hood/hades - name = "Dark hood" - desc = "A dark, soft hood." - body_parts_covered = HEAD - flags_inv = HIDEHAIR|HIDEEARS -//end hades outfit - -/obj/item/hades_summoner - name = "Dark Seed" - desc = "The stone lays inert, but even when holding it you hear maddened whispers." - icon = 'icons/obj/wizard.dmi' - icon_state = "dark_seed_inert" - item_state = "dark_seed_inert" - w_class = 1 - var/isActivated = FALSE - var/whoActivated - var/countDownToSummon = 10 - var/absorbedHP = 0 - -/obj/item/hades_summoner/attack_self(mob/user) - if(!isActivated) - var/choice = input(user,"Rub the stone?",name) in list("Yes","No") - if(choice == "Yes") - if(prob(15)) - user << "You rub the stone.. and a voice springs fourth!" - user << "You hear a voice in your head.. 'Bring me the flesh of a living being.. and we shall bargain.'" - whoActivated = user - isActivated = TRUE - desc = "The stone hums with a soft glow, whispering to you." - icon_state = "dark_seed" - else - user << "The stone shivers, but nothing happens. Perhaps try again later?" - else - if(user != whoActivated) - user << "The stone lays inert." - else - if(countDownToSummon > 0) - user << "You hear a voice in your head.. 'I still require [countDownToSummon] vessels worth of flesh. Bring them to me'" - else - user << "I thank you, acolyte." - var/mob/living/simple_animal/hostile/hadesacolyte/HA = user.change_mob_type(/mob/living/simple_animal/hostile/hadesacolyte,get_turf(user),"[user.name]",1) - var/mob/living/simple_animal/hostile/hades/H = new/mob/living/simple_animal/hostile/hades(get_turf(user)) - H.maxHealth = absorbedHP - H.health = H.maxHealth - if(H.maxHealth < initial(H.maxHealth)) - HA << "You.. you fool! How dare you summon me with such dirty flesh!" - HA.faction -= "hades" - if(H.maxHealth > initial(H.maxHealth)) - HA << "Such.. power! You have exceeded yourself, acolyte. Drink of my might!" - HA.maxHealth = 250 - HA.health = 250 - qdel(src) - -/obj/item/hades_summoner/afterattack(atom/A as mob|obj|turf|area, mob/user, proximity) - if(!proximity) - return - if(istype(A,/mob/living)) - var/mob/living/M = A - if(countDownToSummon > 0) - if(M.health > 0 && M.maxHealth > 200) - // no absorbing super strong creatures unless they're dead - user << "Such power.. Slay this [M] so that I may partake of its being." - return - if(!M.stat) - user << "[M] is still too tightly bound to the mortal world! You must either kill or knock them unconscious to sacrifice them." - return - user << "I accept your offering." - absorbedHP += M.maxHealth - if(!M.ckey) - M.gib() - else - M << "You feel the flesh being stripped from your bones. You're overwhelmed with maddening pain, before reforming into another being!" - M.change_mob_type(/mob/living/simple_animal/hostile/hadesacolyte,get_turf(user),"[user.name]",1) - countDownToSummon-- - if(countDownToSummon <= 0) - user << "I am ready to ascend, my acolyte." - - -#undef STATE_JUDGE -#undef STATE_WRATH -#undef STATE_FLEE diff --git a/code/game/gamemodes/miniantags/hades/hades_chapel.dm b/code/game/gamemodes/miniantags/hades/hades_chapel.dm deleted file mode 100644 index df8a2efafd..0000000000 --- a/code/game/gamemodes/miniantags/hades/hades_chapel.dm +++ /dev/null @@ -1,177 +0,0 @@ -/area/hades - name = "Chapel of Sin" - icon_state = "yellow" - requires_power = 0 - has_gravity = 1 - -/turf/open/floor/plasteel/hades - name = "Sin-touched Floor" - icon_state = "cult" - -/obj/structure/chair/hades - name = "Cross of Hades" - desc = "An inverted cross, with straps on it to support the weight of a living being." - icon_state = "chair_hades" - var/list/watchedSpikes = list() - -/obj/structure/chair/hades/New() - ..() - flags_1 |= NODECONSTRUCT_1 - for(var/obj/structure/kitchenspike/KS in range(12)) - watchedSpikes += KS - -/obj/structure/chair/hades/proc/considerReady() - //buckled_mobs seems to work inconsistently, so we're doing some custom searching here. - if(!buckled_mobs) - return FALSE - if(!buckled_mobs.len) - return FALSE - for(var/obj/structure/kitchenspike/KS in watchedSpikes) - var/mob/living/M = locate(/mob/living) in get_turf(KS) - if(!M) - return FALSE - return TRUE - -/obj/structure/chair/hades/proc/completeRitual() - for(var/obj/structure/kitchenspike/KS in watchedSpikes) - var/mob/living/M = locate(/mob/living) in get_turf(KS) - M.gib() - playsound(get_turf(src), 'sound/effects/pope_entry.ogg', 100, 1) - sleep(100) - playsound(get_turf(src), 'sound/effects/hyperspace_end.ogg', 100, 1) - new/obj/item/hades_staff/imbued(get_turf(src)) - src.visible_message("[src] shatters into a thousand shards, a staff falling from it.") - qdel(src) - -/obj/structure/chair/hades/attackby(obj/item/W, mob/user, params) - ..() - if(istype(W, /obj/item/hades_staff)) - var/obj/item/hades_staff/HS = W - if(!HS.isKey) - return - src.visible_message("[user] inserts the [W] into the [src], giving it a quick turn.") - if(considerReady()) - qdel(W) - src.visible_message("[src] shudders, the sound of moving gears arising...") - for(var/mob/living/M in buckled_mobs) - M.gib() - for(var/i in 1 to 4) - addtimer(GLOBAL_PROC, "playsound", i*10, FALSE, get_turf(src), 'sound/effects/clang.ogg', 100, 1) - spawn(50) - src.visible_message("[src] begins to lower into the ground...") - icon_state = "chair_hades_slide" - addtimer(src, "completeRitual", 50, FALSE) - else - src.visible_message("[src] clunks, the sound of grinding gears arising. Nothing happens.") - -/obj/structure/ladder/unbreakable/hades - name = "Dimensional Rift" - desc = "Where does it lead?" - icon = 'icons/mob/EvilPope.dmi' - icon_state = "popedeath" - anchored = TRUE - -/obj/structure/ladder/unbreakable/hades/update_icon() - return - -/obj/item/paper/hades_instructions - name = "paper- 'Hastily Scrawled Letter'" - info = "The Master has instructed us to collect corpses for the ritual, and told us to deposity them in the Ritual Room, behind a bookcase in the library. The Master has locked the device to only work with his key, so no more accidents happen." - -/obj/item/hades_staff - name = "Staff of Hades" - desc = "A large, dark staff, with a set of key-like prongs on the end." - icon_state = "staffofchange" - icon = 'icons/obj/guns/magic.dmi' - item_state = "staffofchange" - slot_flags = SLOT_BELT | SLOT_BACK - force = 25 - throwforce = 5 - w_class = 3 - hitsound = 'sound/weapons/bladeslice.ogg' - attack_verb = list("slapped", "shattered", "blasphemed", "smashed", "whacked", "crushed", "hammered") - block_chance = 25 - var/isKey = 1 - -/obj/item/hades_staff/fake - name = "Inert Staff of Hades" - desc = "A large, dark staff." - isKey = 0 - -/obj/item/hades_staff/imbued - name = "Imbued Staff of Hades" - desc = " Bestowed with the power of wayward souls, this Staff allows the wielder to judge a target." - force = 75 - throwforce = 35 - block_chance = 75 - var/lastJudge = 0 - var/judgeCooldown = 150 - -/obj/item/hades_staff/imbued/attack(mob/living/carbon/human/M, mob/living/carbon/human/user) - if(!istype(M)) - return ..() - - if(world.time > lastJudge + judgeCooldown) - var/mob/living/sinPerson = M - lastJudge = world.time - var/sinPersonchoice = pick("Greed","Gluttony","Pride","Lust","Envy","Sloth","Wrath") - switch(sinPersonchoice) - if("Greed") - src.say("Your sin, [sinPerson], is Greed.") - if(prob(50)) - src.say("I will indulge your sin, [sinPerson].") - sin_Greed(sinPerson, TRUE) - else - src.say("Your sin will be punished, [sinPerson]!") - sin_Greed(sinPerson, FALSE) - if("Gluttony") - src.say("Your sin, [sinPerson], is Gluttony.") - if(prob(50)) - src.say("I will indulge your sin, [sinPerson].") - sin_Gluttony(sinPerson,TRUE) - else - src.say("Your sin will be punished, [sinPerson]!") - sin_Gluttony(sinPerson,FALSE) - if("Pride") - src.say("Your sin, [sinPerson], is Pride.") - if(prob(50)) - src.say("I will indulge your sin, [sinPerson].") - sin_Pride(sinPerson,TRUE) - else - src.say("Your sin will be punished, [sinPerson]!") - sin_Pride(sinPerson,FALSE) - if("Lust") - src.say("Your sin, [sinPerson], is Lust.") - if(prob(50)) - src.say("I will indulge your sin, [sinPerson].") - sin_Lust(sinPerson,TRUE) - else - src.say("Your sin will be punished, [sinPerson]!") - sin_Lust(sinPerson,TRUE) - if("Envy") - src.say("Your sin, [sinPerson], is Envy.") - if(prob(50)) - src.say("I will indulge your sin, [sinPerson].") - sin_Envy(sinPerson,TRUE) - else - src.say("Your sin will be punished, [sinPerson]!") - sin_Envy(sinPerson,FALSE) - if("Sloth") - src.say("Your sin, [sinPerson], is Sloth.") - if(prob(50)) - src.say("I will indulge your sin, [sinPerson].") - sin_Sloth(sinPerson,TRUE) - else - src.say("Your sin will be punished, [sinPerson]!") - sin_Sloth(sinPerson,FALSE) - if("Wrath") - src.say("Your sin, [sinPerson], is Wrath.") - if(prob(50)) - src.say("I will indulge your sin, [sinPerson].") - sin_Wrath(sinPerson,TRUE) - else - src.say("Your sin will be punished, [sinPerson]!") - sin_Wrath(sinPerson,FALSE) - else - ..() - user << "The [src] is still recharging." diff --git a/code/game/gamemodes/miniantags/readme.txt b/code/game/gamemodes/miniantags/readme.txt deleted file mode 100644 index dc7bd5a66f..0000000000 --- a/code/game/gamemodes/miniantags/readme.txt +++ /dev/null @@ -1,12 +0,0 @@ -This folder contains all "mini-antagonists" - antagonists that can still spice up the round but aren't enough to be a roundtype in their own right. -Currently, that list consists of: - -Abductors - -Borers - -Swarmers - -Prophets of sin - -The Jungle Fever virus (infected monkey bites human, human becomes another infected monkey) - -Morphs - -Sintouched crewmembers - -Slaughter demons - -Umbras (formerly revenants) -Please update this if you add another mini-antagonist. diff --git a/code/game/gamemodes/miniantags/monkey/monkey.dm b/code/game/gamemodes/monkey/monkey.dm similarity index 100% rename from code/game/gamemodes/miniantags/monkey/monkey.dm rename to code/game/gamemodes/monkey/monkey.dm diff --git a/code/game/gamemodes/nuclear/nuclear.dm b/code/game/gamemodes/nuclear/nuclear.dm index f131046cac..5451de3d5c 100644 --- a/code/game/gamemodes/nuclear/nuclear.dm +++ b/code/game/gamemodes/nuclear/nuclear.dm @@ -52,7 +52,7 @@ return ..() /datum/game_mode/proc/are_operatives_dead() - for(var/datum/mind/operative_mind in get_antagonists(/datum/antagonist/nukeop)) + for(var/datum/mind/operative_mind in get_antag_minds(/datum/antagonist/nukeop)) if(ishuman(operative_mind.current) && (operative_mind.current.stat != DEAD)) return FALSE return TRUE diff --git a/code/game/gamemodes/objective.dm b/code/game/gamemodes/objective.dm index 4b147e9446..81e52c3511 100644 --- a/code/game/gamemodes/objective.dm +++ b/code/game/gamemodes/objective.dm @@ -687,7 +687,7 @@ GLOBAL_LIST_EMPTY(possible_items_special) if("Chief Medical Officer") department_string = "medical" - var/list/lings = get_antagonists(/datum/antagonist/changeling,TRUE) + var/list/lings = get_antag_minds(/datum/antagonist/changeling,TRUE) var/ling_count = lings.len for(var/datum/mind/M in SSticker.minds) @@ -715,7 +715,7 @@ GLOBAL_LIST_EMPTY(possible_items_special) //Needed heads is between min_lings and the maximum possible amount of command roles //So at the time of writing, rand(3,6), it's also capped by the amount of lings there are //Because you can't fill 6 head roles with 3 lings - var/list/lings = get_antagonists(/datum/antagonist/changeling,TRUE) + var/list/lings = get_antag_minds(/datum/antagonist/changeling,TRUE) var/needed_heads = rand(min_lings,GLOB.command_positions.len) needed_heads = min(lings.len,needed_heads) @@ -792,7 +792,7 @@ GLOBAL_LIST_EMPTY(possible_items_special) //Check each staff member has been replaced, by cross referencing changeling minds, changeling current dna, the staff minds and their original DNA names var/success = 0 changelings: - for(var/datum/mind/changeling in get_antagonists(/datum/antagonist/changeling,TRUE)) + for(var/datum/mind/changeling in get_antag_minds(/datum/antagonist/changeling,TRUE)) if(success >= department_minds.len) //We did it, stop here! return TRUE if(ishuman(changeling.current)) diff --git a/code/game/gamemodes/objective_team.dm b/code/game/gamemodes/objective_team.dm deleted file mode 100644 index 1483f356d2..0000000000 --- a/code/game/gamemodes/objective_team.dm +++ /dev/null @@ -1,34 +0,0 @@ -//A barebones antagonist team. -/datum/objective_team - var/list/datum/mind/members = list() - var/name = "team" - var/member_name = "member" - var/list/objectives = list() //common objectives, these won't be added or removed automatically, subtypes handle this, this is here for bookkeeping purposes. - -/datum/objective_team/New(starting_members) - . = ..() - if(starting_members) - if(islist(starting_members)) - for(var/datum/mind/M in starting_members) - add_member(M) - else - add_member(starting_members) - -/datum/objective_team/proc/is_solo() - return members.len == 1 - -/datum/objective_team/proc/add_member(datum/mind/new_member) - members |= new_member - -/datum/objective_team/proc/remove_member(datum/mind/member) - members -= member - -//Display members/victory/failure/objectives for the team -/datum/objective_team/proc/roundend_report() - var/list/report = list() - - report += "[name]:" - report += "The [member_name]s were:" - report += printplayerlist(members) - - return report.Join("
") \ No newline at end of file diff --git a/code/game/gamemodes/wizard/raginmages.dm b/code/game/gamemodes/wizard/raginmages.dm deleted file mode 100644 index 06ba9ec2b5..0000000000 --- a/code/game/gamemodes/wizard/raginmages.dm +++ /dev/null @@ -1,164 +0,0 @@ -/datum/game_mode/wizard/raginmages - name = "ragin' mages" - config_tag = "raginmages" - required_players = 20 - use_huds = 1 - announce_span = "userdanger" - announce_text = "There are many, many wizards attacking the station!\n\ - Wizards: Accomplish your objectives and cause utter catastrophe!\n\ - Crew: Try not to die..." - var/max_mages = 0 - var/making_mage = 0 - var/mages_made = 1 - var/time_checked = 0 - var/bullshit_mode = 0 // requested by hornygranny - var/time_check = 1500 - var/spawn_delay_min = 500 - var/spawn_delay_max = 700 - -/datum/game_mode/wizard/raginmages/post_setup() - ..() - var/playercount = 0 - if(!max_mages && !bullshit_mode) - for(var/mob/living/player in GLOB.mob_list) - if(player.client && player.stat != 2) - playercount += 1 - max_mages = round(playercount / 8) - if(max_mages > 20) - max_mages = 20 - if(max_mages < 1) - max_mages = 1 - if(bullshit_mode) - max_mages = INFINITY -/datum/game_mode/wizard/raginmages/greet_wizard(datum/mind/wizard, you_are=1) - if (you_are) - to_chat(wizard.current, "You are the Space Wizard!") - wizard.current.playsound_local('sound/ambience/antag/RagesMages.ogg',100,0) - to_chat(wizard.current, "The Space Wizards Federation has given you the following tasks:") - - var/obj_count = 1 - to_chat(wizard.current, "Objective Alpha: Make sure the station pays for its actions against our diplomats") - for(var/datum/objective/objective in wizard.objectives) - to_chat(wizard.current, "Objective #[obj_count]: [objective.explanation_text]") - obj_count++ - return - -/datum/game_mode/wizard/raginmages/check_finished() - var/wizards_alive = 0 - for(var/datum/mind/wizard in wizards) - if(!istype(wizard.current,/mob/living/carbon)) - continue - if(istype(wizard.current,/mob/living/brain)) - continue - if(wizard.current.stat==DEAD) - continue - if(wizard.current.stat==UNCONSCIOUS) - if(wizard.current.health < 0) - to_chat(wizard.current, "The Space Wizard Federation is upset with your performance and have terminated your employment.") - wizard.current.death() - continue - wizards_alive++ - if(!time_checked) - time_checked = world.time - if(bullshit_mode) - if(world.time > time_checked + time_check) - max_mages = INFINITY - time_checked = world.time - make_more_mages() - return ..() - if (wizards_alive) - if(world.time > time_checked + time_check && (mages_made < max_mages)) - time_checked = world.time - make_more_mages() - - else - if(mages_made >= max_mages) - finished = 1 - return ..() - else - make_more_mages() - return ..() - -/datum/game_mode/wizard/raginmages/proc/make_more_mages() - - if(making_mage) - return 0 - if(mages_made >= max_mages) - return 0 - making_mage = 1 - mages_made++ - var/list/mob/dead/observer/candidates = list() - var/mob/dead/observer/theghost = null - spawn(rand(spawn_delay_min, spawn_delay_max)) - message_admins("SWF is still pissed, sending another wizard - [max_mages - mages_made] left.") - for(var/mob/dead/observer/G in GLOB.player_list) - if(G.client && !G.client.holder && !G.client.is_afk() && (ROLE_WIZARD in G.client.prefs.be_special)) - if(!jobban_isbanned(G, ROLE_WIZARD) && !jobban_isbanned(G, "Syndicate")) - if(age_check(G.client)) - candidates += G - if(!candidates.len) - message_admins("No applicable ghosts for the next ragin' mage, asking ghosts instead.") - var/time_passed = world.time - for(var/mob/dead/observer/G in GLOB.player_list) - if(!jobban_isbanned(G, "wizard") && !jobban_isbanned(G, "Syndicate")) - if(age_check(G.client)) - spawn(0) - switch(alert(G, "Do you wish to be considered for the position of Space Wizard Foundation 'diplomat'?","Please answer in 30 seconds!","Yes","No")) - if("Yes") - if((world.time-time_passed)>300)//If more than 30 game seconds passed. - continue - candidates += G - if("No") - continue - - sleep(300) - if(!candidates.len) - message_admins("This is awkward, sleeping until another mage check...") - making_mage = 0 - mages_made-- - return - else - shuffle_inplace(candidates) - for(var/mob/i in candidates) - if(!i || !i.client) continue //Dont bother removing them from the list since we only grab one wizard - - theghost = i - break - - if(theghost) - var/mob/living/carbon/human/new_character= makeBody(theghost) - new_character.mind.make_Wizard() - making_mage = 0 - return 1 - -/datum/game_mode/wizard/raginmages/declare_completion() - if(finished) - SSticker.mode_result = "loss - wizard killed" - to_chat(world, "The crew has managed to hold off the wizard attack! The Space Wizards Federation has been taught a lesson they will not soon forget!") - ..(1) - -/datum/game_mode/wizard/raginmages/proc/makeBody(mob/dead/observer/G_found) // Uses stripped down and bastardized code from respawn character - if(!G_found || !G_found.key) - return - - //First we spawn a dude. - var/mob/living/carbon/human/new_character = new//The mob being spawned. - SSjob.SendToLateJoin(new_character) - - G_found.client.prefs.copy_to(new_character) - new_character.dna.update_dna_identity() - new_character.key = G_found.key - - return new_character - -/datum/game_mode/wizard/raginmages/bullshit - name = "very ragin' bullshit mages" - config_tag = "veryraginbullshitmages" - required_players = 20 - use_huds = 1 - bullshit_mode = 1 - time_check = 250 - spawn_delay_min = 50 - spawn_delay_max = 150 - announce_text = "CRAAAWLING IIIN MY SKIIIN\n\ - THESE WOOOUNDS THEY WIIIL NOT HEEEAL" diff --git a/code/game/machinery/_machinery.dm b/code/game/machinery/_machinery.dm index 97a41098f2..20a88382fa 100644 --- a/code/game/machinery/_machinery.dm +++ b/code/game/machinery/_machinery.dm @@ -93,7 +93,6 @@ Class Procs: max_integrity = 200 var/stat = 0 - var/emagged = FALSE var/use_power = IDLE_POWER_USE //0 = dont run the auto //1 = run auto, use idle @@ -505,4 +504,4 @@ Class Procs: #endif . = . % 9 AM.pixel_x = -8 + ((.%3)*8) - AM.pixel_y = -8 + (round( . / 3)*8) \ No newline at end of file + AM.pixel_y = -8 + (round( . / 3)*8) diff --git a/code/game/machinery/announcement_system.dm b/code/game/machinery/announcement_system.dm index 84a18e3352..5226084b96 100644 --- a/code/game/machinery/announcement_system.dm +++ b/code/game/machinery/announcement_system.dm @@ -167,7 +167,7 @@ GLOBAL_LIST_EMPTY(announcement_systems) ..(severity) /obj/machinery/announcement_system/emag_act() - if(emagged) + if(obj_flags & EMAGGED) return - emagged = TRUE + obj_flags |= EMAGGED act_up() diff --git a/code/game/machinery/buttons.dm b/code/game/machinery/buttons.dm index 8a118b8d08..997d16836d 100644 --- a/code/game/machinery/buttons.dm +++ b/code/game/machinery/buttons.dm @@ -103,12 +103,12 @@ return ..() /obj/machinery/button/emag_act(mob/user) - if(emagged) + if(obj_flags & EMAGGED) return req_access = list() req_one_access = list() playsound(src, "sparks", 100, 1) - emagged = TRUE + obj_flags |= EMAGGED /obj/machinery/button/attack_ai(mob/user) if(!panel_open) diff --git a/code/game/machinery/computer/apc_control.dm b/code/game/machinery/computer/apc_control.dm index 53de06254c..4d4f1cb71f 100644 --- a/code/game/machinery/computer/apc_control.dm +++ b/code/game/machinery/computer/apc_control.dm @@ -44,7 +44,7 @@ ..(user) /obj/machinery/computer/apc_control/proc/check_apc(obj/machinery/power/apc/APC) - return APC.z == z && !APC.malfhack && !APC.aidisabled && !APC.emagged && !APC.stat && !istype(APC.area, /area/ai_monitored) && !APC.area.outdoors + return APC.z == z && !APC.malfhack && !APC.aidisabled && !(APC.obj_flags & EMAGGED) && !APC.stat && !istype(APC.area, /area/ai_monitored) && !APC.area.outdoors /obj/machinery/computer/apc_control/interact(mob/living/user) var/dat @@ -71,7 +71,7 @@ [APC.aidisabled || APC.panel_open ? "APC does not respond to interface query." : "APC responds to interface query."]

" dat += "Check Logs
" dat += "Log Out
" - if(emagged) + if(obj_flags & EMAGGED) dat += "WARNING: Logging functionality partially disabled from outside source.
" dat += "Restore logging functionality?
" else @@ -80,7 +80,7 @@ dat += "[entry]
" else dat += "No activity has been recorded at this time.
" - if(emagged) + if(obj_flags & EMAGGED) dat += "@#%! CLEAR LOGS" dat += "Return" operator = user @@ -117,7 +117,7 @@ auth_id = "\[NULL\]" if(href_list["restore_logging"]) to_chat(usr, "[icon2html(src, usr)] Logging functionality restored from backup data.") - emagged = FALSE + obj_flags &= ~EMAGGED LAZYADD(logs, "-=- Logging restored to full functionality at this point -=-") if(href_list["access_apc"]) playsound(src, "terminal_type", 50, 0) @@ -193,15 +193,15 @@ interact(usr) //Refresh the UI after a filter changes /obj/machinery/computer/apc_control/emag_act(mob/user) - if(emagged) + if(obj_flags & EMAGGED) return user.visible_message("You emag [src], disabling precise logging and allowing you to clear logs.") log_game("[key_name(user)] emagged [src] at [get_area(src)], disabling operator tracking.") playsound(src, "sparks", 50, 1) - emagged = TRUE + obj_flags |= EMAGGED /obj/machinery/computer/apc_control/proc/log_activity(log_text) - var/op_string = operator && !emagged ? operator : "\[NULL OPERATOR\]" + var/op_string = operator && !(obj_flags & EMAGGED) ? operator : "\[NULL OPERATOR\]" LAZYADD(logs, "([worldtime2text()]) [op_string] [log_text]") /mob/proc/using_power_flow_console() diff --git a/code/game/machinery/computer/arcade.dm b/code/game/machinery/computer/arcade.dm index 9c28be28b7..27a5a8ebd5 100644 --- a/code/game/machinery/computer/arcade.dm +++ b/code/game/machinery/computer/arcade.dm @@ -212,9 +212,9 @@ gameover = FALSE turtle = 0 - if(emagged) + if(obj_flags & EMAGGED) Reset() - emagged = FALSE + obj_flags &= ~EMAGGED add_fingerprint(usr) updateUsrDialog() @@ -227,19 +227,19 @@ temp = "[enemy_name] has fallen! Rejoice!" playsound(loc, 'sound/arcade/win.ogg', 50, 1, extrarange = -3, falloff = 10) - if(emagged) + if(obj_flags & EMAGGED) new /obj/effect/spawner/newbomb/timer/syndicate(loc) new /obj/item/clothing/head/collectable/petehat(loc) message_admins("[key_name_admin(usr)] has outbombed Cuban Pete and been awarded a bomb.") log_game("[key_name(usr)] has outbombed Cuban Pete and been awarded a bomb.") Reset() - emagged = FALSE + obj_flags &= ~EMAGGED else prizevend() - SSblackbox.record_feedback("nested tally", "arcade_results", 1, list("win", (emagged ? "emagged":"normal"))) + SSblackbox.record_feedback("nested tally", "arcade_results", 1, list("win", (obj_flags & EMAGGED ? "emagged":"normal"))) - else if (emagged && (turtle >= 4)) + else if ((obj_flags & EMAGGED) && (turtle >= 4)) var/boomamt = rand(5,10) temp = "[enemy_name] throws a bomb, exploding you for [boomamt] damage!" playsound(loc, 'sound/arcade/boom.ogg', 50, 1, extrarange = -3, falloff = 10) @@ -257,9 +257,9 @@ sleep(10) temp = "You have been drained! GAME OVER" playsound(loc, 'sound/arcade/lose.ogg', 50, 1, extrarange = -3, falloff = 10) - if(emagged) + if(obj_flags & EMAGGED) usr.gib() - SSblackbox.record_feedback("nested tally", "arcade_results", 1, list("loss", "mana", (emagged ? "emagged":"normal"))) + SSblackbox.record_feedback("nested tally", "arcade_results", 1, list("loss", "mana", (obj_flags & EMAGGED ? "emagged":"normal"))) else if ((enemy_hp <= 10) && (enemy_mp > 4)) temp = "[enemy_name] heals for 4 health!" @@ -277,16 +277,16 @@ gameover = TRUE temp = "You have been crushed! GAME OVER" playsound(loc, 'sound/arcade/lose.ogg', 50, 1, extrarange = -3, falloff = 10) - if(emagged) + if(obj_flags & EMAGGED) usr.gib() - SSblackbox.record_feedback("nested tally", "arcade_results", 1, list("loss", "hp", (emagged ? "emagged":"normal"))) + SSblackbox.record_feedback("nested tally", "arcade_results", 1, list("loss", "hp", (obj_flags & EMAGGED ? "emagged":"normal"))) blocked = FALSE return /obj/machinery/computer/arcade/battle/emag_act(mob/user) - if(emagged) + if(obj_flags & EMAGGED) return temp = "If you die in the game, you die for real!" player_hp = 30 @@ -296,7 +296,7 @@ gameover = FALSE blocked = FALSE - emagged = TRUE + obj_flags |= EMAGGED enemy_name = "Cuban Pete" name = "Outbomb Cuban Pete" @@ -415,21 +415,21 @@ else if(food <= 0) dat += "
You ran out of food and starved." - if(emagged) + if(obj_flags & EMAGGED) user.nutrition = 0 //yeah you pretty hongry to_chat(user, "Your body instantly contracts to that of one who has not eaten in months. Agonizing cramps seize you as you fall to the floor.") if(fuel <= 0) dat += "
You ran out of fuel, and drift, slowly, into a star." - if(emagged) + if(obj_flags & EMAGGED) var/mob/living/M = user M.adjust_fire_stacks(5) M.IgniteMob() //flew into a star, so you're on fire to_chat(user, "You feel an immense wave of heat emanate from the arcade machine. Your skin bursts into flames.") - if(emagged) + if(obj_flags & EMAGGED) to_chat(user, "You're never going to make it to Orion...") user.death() - emagged = FALSE //removes the emagged status after you lose + obj_flags &= ~EMAGGED //removes the emagged status after you lose gameStatus = ORION_STATUS_START name = "The Orion Trail" desc = "Learn how our ancestors got to Orion, and have fun in the process!" @@ -491,7 +491,7 @@ event = ORION_TRAIL_LING_ATTACK event() turns += 1 - if(emagged) + if(obj_flags & EMAGGED) var/mob/living/carbon/M = usr //for some vars switch(event) if(ORION_TRAIL_RAIDERS) @@ -605,7 +605,7 @@ if(prob(75)) event = ORION_TRAIL_BLACKHOLE event() - if(emagged) + if(obj_flags & EMAGGED) playsound(loc, 'sound/effects/supermatter.ogg', 100, 1) say("A miniature black hole suddenly appears in front of [src], devouring [usr] alive!") if(isliving(usr)) @@ -632,12 +632,12 @@ if(settlers.len == 0 || alive == 0) say("The last crewmember [sheriff], shot themselves, GAME OVER!") - if(emagged) + if(obj_flags & EMAGGED) usr.death(0) - emagged = FALSE + obj_flags &= EMAGGED gameStatus = ORION_STATUS_GAMEOVER event = null - else if(emagged) + else if(obj_flags & EMAGGED) if(usr.name == sheriff) say("The crew of the ship chose to kill [usr.name]!") usr.death(0) @@ -696,7 +696,7 @@ if(prob(success*5)) var/lost_crew = remove_crewmember() last_spaceport_action = "You failed to raid the spaceport! You lost [FU*-1] Fuel and [FO*-1] Food, AND [lost_crew] in your scramble to escape! ([FU]FI,[FO]FO,-Crew)" - if(emagged) + if(obj_flags & EMAGGED) say("WEEWOO! WEEWOO! Spaceport security en route!") playsound(src, 'sound/items/weeoo1.ogg', 100, FALSE) for(var/i, i<=3, i++) @@ -1024,24 +1024,24 @@ /obj/machinery/computer/arcade/orion_trail/proc/win() gameStatus = ORION_STATUS_START say("Congratulations, you made it to Orion!") - if(emagged) + if(obj_flags & EMAGGED) new /obj/item/orion_ship(loc) message_admins("[key_name_admin(usr)] made it to Orion on an emagged machine and got an explosive toy ship.") log_game("[key_name(usr)] made it to Orion on an emagged machine and got an explosive toy ship.") else prizevend() - emagged = FALSE + obj_flags &= ~EMAGGED name = "The Orion Trail" desc = "Learn how our ancestors got to Orion, and have fun in the process!" /obj/machinery/computer/arcade/orion_trail/emag_act(mob/user) - if(emagged) + if(obj_flags & EMAGGED) return to_chat(user, "You override the cheat code menu and skip to Cheat #[rand(1, 50)]: Realism Mode.") name = "The Orion Trail: Realism Edition" desc = "Learn how our ancestors got to Orion, and try not to die in the process!" newgame() - emagged = TRUE + obj_flags |= EMAGGED /mob/living/simple_animal/hostile/syndicate/ranged/orion name = "spaceport security" diff --git a/code/game/machinery/computer/camera_advanced.dm b/code/game/machinery/computer/camera_advanced.dm index 96327383b3..26f40fc3d5 100644 --- a/code/game/machinery/computer/camera_advanced.dm +++ b/code/game/machinery/computer/camera_advanced.dm @@ -4,7 +4,7 @@ icon_screen = "cameras" icon_keyboard = "security_key" var/list/z_lock = list() // Lock use to these z levels - var/station_lock_override = FALSE + var/lock_override = NONE var/mob/camera/aiEye/remote/eyeobj var/mob/living/current_user = null var/list/networks = list("SS13") @@ -16,8 +16,15 @@ /obj/machinery/computer/camera_advanced/Initialize() . = ..() - if(station_lock_override) - z_lock = SSmapping.levels_by_trait(ZTRAIT_STATION) + if(lock_override) + if(lock_override & CAMERA_LOCK_STATION) + z_lock |= SSmapping.levels_by_trait(ZTRAIT_STATION) + if(lock_override & CAMERA_LOCK_MINING) + z_lock |= SSmapping.levels_by_trait(ZTRAIT_MINING) + if(lock_override & CAMERA_LOCK_CENTCOM) + z_lock |= SSmapping.levels_by_trait(ZTRAIT_CENTCOM) + if(lock_override & CAMERA_LOCK_REEBE) + z_lock |= SSmapping.levels_by_trait(ZTRAIT_REEBE) /obj/machinery/computer/camera_advanced/syndie icon_keyboard = "syndie_key" diff --git a/code/game/machinery/computer/cloning.dm b/code/game/machinery/computer/cloning.dm index 944d8d5213..1cb5e09966 100644 --- a/code/game/machinery/computer/cloning.dm +++ b/code/game/machinery/computer/cloning.dm @@ -449,7 +449,7 @@ scantemp = "Subject's brain is not responding to scanning stimuli." playsound(src, 'sound/machines/terminal_prompt_deny.ogg', 50, 0) return - if((mob_occupant.has_disability(DISABILITY_NOCLONE)) && (src.scanner.scan_level < 2)) + if((mob_occupant.has_trait(TRAIT_NOCLONE)) && (src.scanner.scan_level < 2)) scantemp = "Subject no longer contains the fundamental materials required to create a living clone." playsound(src, 'sound/machines/terminal_alert.ogg', 50, 0) return diff --git a/code/game/machinery/computer/communications.dm b/code/game/machinery/computer/communications.dm index 8391052662..c3f464783f 100755 --- a/code/game/machinery/computer/communications.dm +++ b/code/game/machinery/computer/communications.dm @@ -82,7 +82,7 @@ if((20 in I.access)) authenticated = 2 playsound(src, 'sound/machines/terminal_on.ogg', 50, 0) - if(emagged) + if(obj_flags & EMAGGED) authenticated = 2 auth_id = "Unknown" to_chat(M, "[src] lets out a quiet alarm as its login is overriden.") @@ -297,7 +297,7 @@ // OMG SYNDICATE ...LETTERHEAD if("MessageSyndicate") - if((authenticated==2) && (emagged)) + if((authenticated==2) && (obj_flags & EMAGGED)) if(!checkCCcooldown()) to_chat(usr, "Arrays recycling. Please stand by.") playsound(src, 'sound/machines/terminal_prompt_deny.ogg', 50, 0) @@ -315,7 +315,7 @@ if("RestoreBackup") to_chat(usr, "Backup routing data restored!") playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 50, 0) - emagged = FALSE + obj_flags &= ~EMAGGED updateDialog() if("nukerequest") //When there's no other way @@ -421,9 +421,9 @@ return ..() /obj/machinery/computer/communications/emag_act(mob/user) - if(emagged) + if(obj_flags & EMAGGED) return - emagged = TRUE + obj_flags |= EMAGGED if(authenticated == 1) authenticated = 2 to_chat(user, "You scramble the communication routing circuits!") @@ -485,7 +485,7 @@ dat += "
\[ Change Alert Level \]" dat += "
\[ Emergency Maintenance Access \]" dat += "
\[ Request Nuclear Authentication Codes \]" - if(!emagged) + if(!(obj_flags & EMAGGED)) dat += "
\[ Send Message to CentCom \]" else dat += "
\[ Send Message to \[UNKNOWN\] \]" diff --git a/code/game/machinery/computer/dna_console.dm b/code/game/machinery/computer/dna_console.dm index 5bdd6a7b27..de0089d5c6 100644 --- a/code/game/machinery/computer/dna_console.dm +++ b/code/game/machinery/computer/dna_console.dm @@ -81,7 +81,7 @@ if(connected && connected.is_operational()) if(connected.occupant) //set occupant_status message viable_occupant = connected.occupant - if(viable_occupant.has_dna() && (!(RADIMMUNE in viable_occupant.dna.species.species_traits)) && (!(viable_occupant.has_disability(DISABILITY_NOCLONE)) || (connected.scan_level == 3))) //occupant is viable for dna modification + if(viable_occupant.has_dna() && (!(RADIMMUNE in viable_occupant.dna.species.species_traits)) && (!(viable_occupant.has_trait(TRAIT_NOCLONE)) || (connected.scan_level == 3))) //occupant is viable for dna modification occupant_status += "[viable_occupant.name] => " switch(viable_occupant.stat) if(CONSCIOUS) @@ -528,7 +528,7 @@ var/mob/living/carbon/viable_occupant = null if(connected) viable_occupant = connected.occupant - if(!istype(viable_occupant) || !viable_occupant.dna || (RADIMMUNE in viable_occupant.dna.species.species_traits) || (viable_occupant.has_disability(DISABILITY_NOCLONE))) + if(!istype(viable_occupant) || !viable_occupant.dna || (RADIMMUNE in viable_occupant.dna.species.species_traits) || (viable_occupant.has_trait(TRAIT_NOCLONE))) viable_occupant = null return viable_occupant diff --git a/code/game/machinery/computer/launchpad_control.dm b/code/game/machinery/computer/launchpad_control.dm index 35fcb20bcc..7408373220 100644 --- a/code/game/machinery/computer/launchpad_control.dm +++ b/code/game/machinery/computer/launchpad_control.dm @@ -51,7 +51,7 @@ /obj/machinery/computer/launchpad/interact(mob/user) var/list/t = list() if(!LAZYLEN(launchpads)) - in_use = FALSE //Yeah so if you deconstruct teleporter while its in the process of shooting it wont disable the console + obj_flags &= ~IN_USE //Yeah so if you deconstruct teleporter while its in the process of shooting it wont disable the console t += "
No launchpad located.

" else for(var/i in 1 to LAZYLEN(launchpads)) diff --git a/code/game/machinery/computer/telecrystalconsoles.dm b/code/game/machinery/computer/telecrystalconsoles.dm index 08210bf706..283232f991 100644 --- a/code/game/machinery/computer/telecrystalconsoles.dm +++ b/code/game/machinery/computer/telecrystalconsoles.dm @@ -154,7 +154,7 @@ GLOBAL_LIST_INIT(possible_uplinker_IDs, list("Alfa","Bravo","Charlie","Delta","E /obj/machinery/computer/telecrystals/boss/proc/getDangerous()//This scales the TC assigned with the round population. ..() - var/list/nukeops = get_antagonists(/datum/antagonist/nukeop) + var/list/nukeops = get_antag_minds(/datum/antagonist/nukeop) var/danger = GLOB.joined_player_list.len - nukeops.len danger = CEILING(danger, 10) scaleTC(danger) diff --git a/code/game/machinery/dna_scanner.dm b/code/game/machinery/dna_scanner.dm index 343dd69cb2..43644286e5 100644 --- a/code/game/machinery/dna_scanner.dm +++ b/code/game/machinery/dna_scanner.dm @@ -100,7 +100,7 @@ var/mob/living/mob_occupant = get_mob_or_brainmob(occupant) if(istype(mob_occupant)) if(locate_computer(/obj/machinery/computer/cloning)) - if(!mob_occupant.suiciding && !(mob_occupant.has_disability(DISABILITY_NOCLONE)) && !mob_occupant.hellbound) + if(!mob_occupant.suiciding && !(mob_occupant.has_trait(TRAIT_NOCLONE)) && !mob_occupant.hellbound) mob_occupant.notify_ghost_cloning("Your corpse has been placed into a cloning scanner. Re-enter your corpse if you want to be cloned!", source = src) // DNA manipulators cannot operate on severed heads or brains diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm index 8a41e019aa..0d19fff8f4 100644 --- a/code/game/machinery/doors/airlock.dm +++ b/code/game/machinery/doors/airlock.dm @@ -34,7 +34,7 @@ #define AIRLOCK_INTEGRITY_N 300 // Normal airlock integrity #define AIRLOCK_INTEGRITY_MULTIPLIER 1.5 // How much reinforced doors health increases -#define AIRLOCK_DAMAGE_DEFLECTION_N 20 // Normal airlock damage deflection // CIT CHANGE - CHANGES DEFAULT AIRLOCK DEFLECTION FROM 21 TO 20 +#define AIRLOCK_DAMAGE_DEFLECTION_N 21 // Normal airlock damage deflection #define AIRLOCK_DAMAGE_DEFLECTION_R 30 // Reinforced airlock damage deflection #define NOT_ELECTRIFIED 0 @@ -569,7 +569,7 @@ /obj/machinery/door/airlock/examine(mob/user) ..() - if(emagged) + if(obj_flags & EMAGGED) to_chat(user, "Its access panel is smoking slightly.") if(charge && !panel_open && in_range(user, src)) to_chat(user, "The maintenance panel seems haphazardly fastened.") @@ -611,7 +611,7 @@ return else to_chat(user, "Airlock AI control has been blocked with a firewall. Unable to hack.") - if(emagged) + if(obj_flags & EMAGGED) to_chat(user, "Unable to interface: Airlock is unresponsive.") return if(detonated) @@ -683,7 +683,7 @@ if(ishuman(user) && prob(40) && src.density) var/mob/living/carbon/human/H = user - if((H.has_disability(DISABILITY_DUMB)) && Adjacent(user)) + if((H.has_trait(TRAIT_DUMB)) && Adjacent(user)) playsound(src.loc, 'sound/effects/bang.ogg', 25, 1) if(!istype(H.head, /obj/item/clothing/head/helmet)) H.visible_message("[user] headbutts the airlock.", \ @@ -899,7 +899,7 @@ if(!panel_open || security_level) to_chat(user, "The maintenance panel must be open to apply [C]!") return - if(emagged) + if(obj_flags & EMAGGED) return if(charge && !detonated) to_chat(user, "There's already a charge hooked up to this door!") @@ -979,7 +979,7 @@ charge.forceMove(get_turf(user)) charge = null return - if(beingcrowbarred && panel_open && (emagged || (density && welded && !operating && !hasPower() && !locked))) + if(beingcrowbarred && panel_open && ((obj_flags & EMAGGED) || (density && welded && !operating && !hasPower() && !locked))) playsound(src.loc, I.usesound, 100, 1) user.visible_message("[user] removes the electronics from the airlock assembly.", \ "You start to remove electronics from the airlock assembly...") @@ -1050,7 +1050,7 @@ H.apply_damage(40, BRUTE, "chest") return if(forced < 2) - if(emagged) + if(obj_flags & EMAGGED) return FALSE use_power(50) playsound(src.loc, doorOpen, 30, 1) @@ -1099,7 +1099,7 @@ return if(forced < 2) - if(emagged) + if(obj_flags & EMAGGED) return use_power(50) playsound(src.loc, doorClose, 30, 1) @@ -1135,7 +1135,7 @@ return TRUE /obj/machinery/door/airlock/proc/prison_open() - if(emagged) + if(obj_flags & EMAGGED) return locked = FALSE src.open() @@ -1224,7 +1224,7 @@ return !density || (check_access(ID) && !locked && hasPower()) /obj/machinery/door/airlock/emag_act(mob/user) - if(!operating && density && hasPower() && !emagged) + if(!operating && density && hasPower() && !(obj_flags & EMAGGED)) operating = TRUE update_icon(AIRLOCK_EMAG, 1) sleep(6) @@ -1233,7 +1233,7 @@ operating = FALSE if(!open()) update_icon(AIRLOCK_CLOSED, 1) - emagged = TRUE + obj_flags |= EMAGGED lights = FALSE locked = TRUE loseMainPower() @@ -1323,7 +1323,7 @@ if(!disassembled) if(A) A.obj_integrity = A.max_integrity * 0.5 - else if(emagged) + else if(obj_flags & EMAGGED) if(user) to_chat(user, "You discard the damaged electronics.") else diff --git a/code/game/machinery/doors/door.dm b/code/game/machinery/doors/door.dm index 4dc4d6887b..9182057d85 100644 --- a/code/game/machinery/doors/door.dm +++ b/code/game/machinery/doors/door.dm @@ -80,7 +80,7 @@ return ..() /obj/machinery/door/CollidedWith(atom/movable/AM) - if(operating || emagged) + if(operating || (obj_flags & EMAGGED)) return if(ismob(AM)) var/mob/B = AM @@ -127,7 +127,7 @@ if(!src.requiresID()) user = null - if(density && !emagged) + if(density && !(obj_flags & EMAGGED)) if(allowed(user)) open() else @@ -149,7 +149,7 @@ /obj/machinery/door/proc/try_to_activate_door(mob/user) add_fingerprint(user) - if(operating || emagged) + if(operating || (obj_flags & EMAGGED)) return if(!requiresID()) user = null //so allowed(user) always succeeds diff --git a/code/game/machinery/doors/windowdoor.dm b/code/game/machinery/doors/windowdoor.dm index bd1a553863..29f05acc2b 100644 --- a/code/game/machinery/doors/windowdoor.dm +++ b/code/game/machinery/doors/windowdoor.dm @@ -132,7 +132,7 @@ if(!hasPower()) return 0 if(forced < 2) - if(emagged) + if(obj_flags & EMAGGED) return 0 if(!src.operating) //in case of emag operating = TRUE @@ -157,7 +157,7 @@ if(!hasPower()) return 0 if(forced < 2) - if(emagged) + if(obj_flags & EMAGGED) return 0 operating = TRUE do_animate("closing") @@ -206,8 +206,8 @@ return src.attack_hand(user) /obj/machinery/door/window/emag_act(mob/user) - if(!operating && density && !emagged) - emagged = TRUE + if(!operating && density && !(obj_flags & EMAGGED)) + obj_flags |= EMAGGED operating = TRUE flick("[src.base_state]spark", src) playsound(src, "sparks", 75, 1) @@ -258,7 +258,7 @@ WA.update_icon() WA.created_name = src.name - if(emagged) + if(obj_flags & EMAGGED) to_chat(user, "You discard the damaged electronics.") qdel(src) return diff --git a/code/game/machinery/embedded_controller/access_controller.dm b/code/game/machinery/embedded_controller/access_controller.dm index e243494f2b..d881d9e223 100644 --- a/code/game/machinery/embedded_controller/access_controller.dm +++ b/code/game/machinery/embedded_controller/access_controller.dm @@ -27,9 +27,9 @@ findObjsByTag() /obj/machinery/doorButtons/emag_act(mob/user) - if(emagged) + if(obj_flags & EMAGGED) return - emagged = TRUE + obj_flags |= EMAGGED req_access = list() req_one_access = list() playsound(src, "sparks", 100, 1) @@ -315,4 +315,4 @@ #undef OPENING #undef CYCLE #undef CYCLE_EXTERIOR -#undef CYCLE_INTERIOR \ No newline at end of file +#undef CYCLE_INTERIOR diff --git a/code/game/machinery/firealarm.dm b/code/game/machinery/firealarm.dm index 5a306cac50..0af43df223 100644 --- a/code/game/machinery/firealarm.dm +++ b/code/game/machinery/firealarm.dm @@ -86,16 +86,16 @@ ..() /obj/machinery/firealarm/emag_act(mob/user) - if(emagged) + if(obj_flags & EMAGGED) return - emagged = TRUE + obj_flags |= EMAGGED if(user) user.visible_message("Sparks fly out of [src]!", "You emag [src], disabling its thermal sensors.") playsound(src, "sparks", 50, 1) /obj/machinery/firealarm/temperature_expose(datum/gas_mixture/air, temperature, volume) - if((temperature > T0C + 200 || temperature < BODYTEMP_COLD_DAMAGE_LIMIT) && (last_alarm+FIREALARM_COOLDOWN < world.time) && !emagged && detecting && !stat) + if((temperature > T0C + 200 || temperature < BODYTEMP_COLD_DAMAGE_LIMIT) && (last_alarm+FIREALARM_COOLDOWN < world.time) && !(obj_flags & EMAGGED) && detecting && !stat) alarm() ..() @@ -122,7 +122,7 @@ /obj/machinery/firealarm/ui_data(mob/user) var/list/data = list() - data["emagged"] = emagged + data["emagged"] = obj_flags & EMAGGED ? 1 : 0 if(is_station_level(z)) data["seclevel"] = get_security_level() diff --git a/code/game/machinery/gulag_item_reclaimer.dm b/code/game/machinery/gulag_item_reclaimer.dm index 7de077c016..628071bd21 100644 --- a/code/game/machinery/gulag_item_reclaimer.dm +++ b/code/game/machinery/gulag_item_reclaimer.dm @@ -25,10 +25,10 @@ return ..() /obj/machinery/gulag_item_reclaimer/emag_act(mob/user) - if(emagged) // emagging lets anyone reclaim all the items + if(obj_flags & EMAGGED) // emagging lets anyone reclaim all the items return req_access = list() - emagged = TRUE + obj_flags |= EMAGGED /obj/machinery/gulag_item_reclaimer/attackby(obj/item/I, mob/user) if(istype(I, /obj/item/card/id/prisoner)) @@ -103,4 +103,4 @@ var/obj/item/W = i stored_items[user] -= W W.forceMove(get_turf(src)) - stored_items -= user \ No newline at end of file + stored_items -= user diff --git a/code/game/machinery/hologram.dm b/code/game/machinery/hologram.dm index 10a552564b..3d3eb5c419 100644 --- a/code/game/machinery/hologram.dm +++ b/code/game/machinery/hologram.dm @@ -49,6 +49,7 @@ Possible to do for anyone motivated enough: var/datum/holocall/outgoing_call //do not modify the datums only check and call the public procs var/obj/item/disk/holodisk/disk //Record disk var/replay_mode = FALSE //currently replaying a recording + var/loop_mode = FALSE //currently looping a recording var/record_mode = FALSE //currently recording var/record_start = 0 //recording start time var/record_user //user that inititiated the recording @@ -150,19 +151,20 @@ Possible to do for anyone motivated enough: if(temp) dat = temp else - dat = "Request an AI's presence.
" - dat += "Call another holopad.
" + dat = "Request an AI's presence
" + dat += "Call another holopad
" if(disk) if(disk.record) //Replay - dat += "Replay disk recording.
" + dat += "Replay disk recording
" + dat += "Loop disk recording
" //Clear - dat += "Clear disk recording.
" + dat += "Clear disk recording
" else //Record - dat += "Start new recording.
" + dat += "Start new recording
" //Eject - dat += "Eject disk.
" + dat += "Eject disk
" if(LAZYLEN(holo_calls)) dat += "=====================================================
" @@ -172,7 +174,7 @@ Possible to do for anyone motivated enough: for(var/I in holo_calls) var/datum/holocall/HC = I if(HC.connected_holopad != src) - dat += "Answer call from [get_area(HC.calling_holopad)].
" + dat += "Answer call from [get_area(HC.calling_holopad)]
" one_unanswered_call = TRUE else one_answered_call = TRUE @@ -183,10 +185,10 @@ Possible to do for anyone motivated enough: for(var/I in holo_calls) var/datum/holocall/HC = I if(HC.connected_holopad == src) - dat += "Disconnect call from [HC.user].
" + dat += "Disconnect call from [HC.user]
" - var/datum/browser/popup = new(user, "holopad", name, 300, 150) + var/datum/browser/popup = new(user, "holopad", name, 300, 175) popup.set_content(dat) popup.set_title_image(user.browse_rsc_icon(src.icon, src.icon_state)) popup.open() @@ -266,6 +268,9 @@ Possible to do for anyone motivated enough: replay_stop() else if(href_list["replay_start"]) replay_start() + else if(href_list["loop_start"]) + loop_mode = TRUE + replay_start() else if(href_list["record_start"]) record_start(usr) else if(href_list["record_stop"]) @@ -464,6 +469,7 @@ For the other part of the code, check silicon say.dm. Particularly robot talk.*/ /obj/machinery/holopad/proc/replay_stop() if(replay_mode) replay_mode = FALSE + loop_mode = FALSE temp = null QDEL_NULL(replay_holo) SetLightsAndPower() @@ -490,7 +496,7 @@ For the other part of the code, check silicon say.dm. Particularly robot talk.*/ if(!record_mode) return //make this command so you can have multiple languages in single record - if(!disk.record.caller_name && istype(speaker)) + if((!disk.record.caller_name || disk.record.caller_name == "Unknown") && istype(speaker)) disk.record.caller_name = speaker.name if(!disk.record.language) disk.record.language = language @@ -516,8 +522,11 @@ For the other part of the code, check silicon say.dm. Particularly robot talk.*/ if(!replay_mode) return if(disk.record.entries.len < entry_number) - replay_stop() - return + if (loop_mode) + entry_number = 1 + else + replay_stop() + return var/list/entry = disk.record.entries[entry_number] var/command = entry[1] switch(command) diff --git a/code/game/machinery/limbgrower.dm b/code/game/machinery/limbgrower.dm index e661bc24c5..19c666b9e8 100644 --- a/code/game/machinery/limbgrower.dm +++ b/code/game/machinery/limbgrower.dm @@ -165,7 +165,7 @@ dat += "" for(var/C in categories) - if(C=="special" && !emagged) //Only want to show special when console is emagged + if(C=="special" && !(obj_flags & EMAGGED)) //Only want to show special when console is emagged continue dat += "" @@ -220,10 +220,10 @@ return dat /obj/machinery/limbgrower/emag_act(mob/user) - if(emagged) + if(obj_flags & EMAGGED) return for(var/datum/design/D in SSresearch.techweb_designs) if((D.build_type & LIMBGROWER) && ("special" in D.category)) stored_research.add_design(D) to_chat(user, "A warning flashes onto the screen, stating that safety overrides have been deactivated!") - emagged = TRUE + obj_flags |= EMAGGED diff --git a/code/game/machinery/porta_turret/portable_turret.dm b/code/game/machinery/porta_turret/portable_turret.dm index 25e022febc..008aa71365 100644 --- a/code/game/machinery/porta_turret/portable_turret.dm +++ b/code/game/machinery/porta_turret/portable_turret.dm @@ -280,11 +280,11 @@ return ..() /obj/machinery/porta_turret/emag_act(mob/user) - if(emagged) + if(obj_flags & EMAGGED) return to_chat(user, "You short out [src]'s threat assessment circuits.") visible_message("[src] hums oddly...") - emagged = TRUE + obj_flags |= EMAGGED controllock = 1 on = FALSE //turns off the turret temporarily update_icon() @@ -313,7 +313,7 @@ if(.) //damage received if(prob(30)) spark_system.start() - if(on && !attacked && !emagged) + if(on && !attacked && !(obj_flags & EMAGGED)) attacked = TRUE addtimer(CALLBACK(src, .proc/reset_attacked), 60) @@ -335,8 +335,6 @@ /obj/machinery/porta_turret/process() //the main machinery process - set background = BACKGROUND_ENABLED - if(cover == null && anchored) //if it has no cover and is anchored if(stat & BROKEN) //if the turret is borked qdel(cover) //delete its cover, assuming it has one. Workaround for a pesky little bug @@ -449,7 +447,7 @@ /obj/machinery/porta_turret/proc/assess_perp(mob/living/carbon/human/perp) var/threatcount = 0 //the integer returned - if(emagged) + if(obj_flags & EMAGGED) return 10 //if emagged, always return 10. if((stun_all || attacked) && !allowed(perp)) @@ -495,7 +493,7 @@ if(!raised) //the turret has to be raised in order to fire - makes sense, right? return - if(!emagged) //if it hasn't been emagged, cooldown before shooting again + if(!(obj_flags & EMAGGED)) //if it hasn't been emagged, cooldown before shooting again if(last_fired + shot_delay > world.time) return last_fired = world.time @@ -548,11 +546,6 @@ src.mode = mode power_change() -/obj/machinery/porta_turret/stationary //is this even used anywhere - mode = TURRET_LETHAL - emagged = TRUE - installation = /obj/item/gun/energy/laser - /obj/machinery/porta_turret/syndicate installation = null always_up = 1 @@ -571,6 +564,15 @@ desc = "A ballistic machine gun auto-turret." /obj/machinery/porta_turret/syndicate/energy + icon_state = "standard_stun" + base_icon_state = "standard" + stun_projectile = /obj/item/projectile/energy/electrode + stun_projectile_sound = 'sound/weapons/taser.ogg' + lethal_projectile = /obj/item/projectile/beam/laser + lethal_projectile_sound = 'sound/weapons/laser.ogg' + desc = "An energy blaster auto-turret." + +/obj/machinery/porta_turret/syndicate/energy/heavy icon_state = "standard_stun" base_icon_state = "standard" stun_projectile = /obj/item/projectile/energy/electrode @@ -718,7 +720,7 @@ if ( get_dist(src, user) == 0 ) // trying to unlock the interface if (allowed(usr)) - if(emagged) + if(obj_flags & EMAGGED) to_chat(user, "The turret control is unresponsive.") return @@ -735,10 +737,10 @@ to_chat(user, "Access denied.") /obj/machinery/turretid/emag_act(mob/user) - if(emagged) + if(obj_flags & EMAGGED) return to_chat(user, "You short out the turret controls' access analysis module.") - emagged = TRUE + obj_flags |= EMAGGED locked = FALSE if(user && user.machine == src) attack_hand(user) diff --git a/code/game/machinery/porta_turret/portable_turret_cover.dm b/code/game/machinery/porta_turret/portable_turret_cover.dm index 7bc381c466..d455bec173 100644 --- a/code/game/machinery/porta_turret/portable_turret_cover.dm +++ b/code/game/machinery/porta_turret/portable_turret_cover.dm @@ -87,10 +87,10 @@ . = 0 /obj/machinery/porta_turret_cover/emag_act(mob/user) - if(!parent_turret.emagged) + if(!(parent_turret.obj_flags & EMAGGED)) to_chat(user, "You short out [parent_turret]'s threat assessment circuits.") visible_message("[parent_turret] hums oddly...") - parent_turret.emagged = TRUE + parent_turret.obj_flags |= EMAGGED parent_turret.on = 0 spawn(40) parent_turret.on = 1 diff --git a/code/game/machinery/quantum_pad.dm b/code/game/machinery/quantum_pad.dm index 6a04ca0886..1dd683af84 100644 --- a/code/game/machinery/quantum_pad.dm +++ b/code/game/machinery/quantum_pad.dm @@ -7,7 +7,7 @@ use_power = IDLE_POWER_USE idle_power_usage = 200 active_power_usage = 5000 - unique_rename = 1 + obj_flags = CAN_BE_HIT | UNIQUE_RENAME circuit = /obj/item/circuitboard/machine/quantumpad var/teleport_cooldown = 400 //30 seconds base due to base parts var/teleport_speed = 50 @@ -15,17 +15,17 @@ var/teleporting = 0 //if it's in the process of teleporting var/power_efficiency = 1 var/obj/machinery/quantumpad/linked_pad - + //mapping var/static/list/mapped_quantum_pads = list() var/map_pad_id = "" as text //what's my name var/map_pad_link_id = "" as text //who's my friend - + /obj/machinery/quantumpad/Initialize() . = ..() if(map_pad_id) mapped_quantum_pads[map_pad_id] = src - + /obj/machinery/quantumpad/Destroy() mapped_quantum_pads -= map_pad_id return ..() diff --git a/code/game/machinery/recycler.dm b/code/game/machinery/recycler.dm index 0d11c6a741..b98aa50ec1 100644 --- a/code/game/machinery/recycler.dm +++ b/code/game/machinery/recycler.dm @@ -39,7 +39,7 @@ ..() to_chat(user, "The power light is [(stat & NOPOWER) ? "off" : "on"].") to_chat(user, "The safety-mode light is [safety_mode ? "on" : "off"].") - to_chat(user, "The safety-sensors status light is [emagged ? "off" : "on"].") + to_chat(user, "The safety-sensors status light is [obj_flags & EMAGGED ? "off" : "on"].") /obj/machinery/recycler/power_change() ..() @@ -64,9 +64,9 @@ return ..() /obj/machinery/recycler/emag_act(mob/user) - if(emagged) + if(obj_flags & EMAGGED) return - emagged = TRUE + obj_flags |= EMAGGED if(safety_mode) safety_mode = FALSE update_icon() @@ -110,7 +110,7 @@ if(brain_holder) emergency_stop(AM) else if(isliving(AM)) - if(emagged) + if(obj_flags & EMAGGED) crush_living(AM) else emergency_stop(AM) @@ -180,14 +180,14 @@ L.Unconscious(100) // For admin fun, var edit emagged to 2. - if(gib || emagged == 2) + if(gib) L.gib() - else if(emagged == 1) + else if(obj_flags & EMAGGED) L.adjustBruteLoss(crush_damage) /obj/machinery/recycler/deathtrap name = "dangerous old crusher" - emagged = TRUE + obj_flags = CAN_BE_HIT | EMAGGED crush_damage = 120 flags_1 = NODECONSTRUCT_1 diff --git a/code/game/machinery/shieldgen.dm b/code/game/machinery/shieldgen.dm index b681845a10..b98500a495 100644 --- a/code/game/machinery/shieldgen.dm +++ b/code/game/machinery/shieldgen.dm @@ -180,10 +180,10 @@ anchored = FALSE else if(W.GetID()) - if(allowed(user) && !emagged) + if(allowed(user) && !(obj_flags & EMAGGED)) locked = !locked to_chat(user, "You [locked ? "lock" : "unlock"] the controls.") - else if(emagged) + else if(obj_flags & EMAGGED) to_chat(user, "Error, access controller damaged!") else to_chat(user, "Access denied.") @@ -192,10 +192,10 @@ return ..() /obj/machinery/shieldgen/emag_act(mob/user) - if(emagged) + if(obj_flags & EMAGGED) to_chat(user, "The access controller is damaged!") return - emagged = TRUE + obj_flags |= EMAGGED locked = FALSE playsound(src, "sparks", 100, 1) to_chat(user, "You short out the access controller.") @@ -343,10 +343,10 @@ default_unfasten_wrench(user, W, 0) else if(W.GetID()) - if(allowed(user) && !emagged) + if(allowed(user) && !(obj_flags & EMAGGED)) locked = !locked to_chat(user, "You [src.locked ? "lock" : "unlock"] the controls.") - else if(emagged) + else if(obj_flags & EMAGGED) to_chat(user, "Error, access controller damaged!") else to_chat(user, "Access denied.") @@ -381,10 +381,10 @@ add_fingerprint(user) /obj/machinery/shieldwallgen/emag_act(mob/user) - if(emagged) + if(obj_flags & EMAGGED) to_chat(user, "The access controller is damaged!") return - emagged = TRUE + obj_flags |= EMAGGED locked = FALSE playsound(src, "sparks", 100, 1) to_chat(user, "You short out the access controller.") diff --git a/code/game/machinery/slotmachine.dm b/code/game/machinery/slotmachine.dm index a538e4ec0c..766bd49bf4 100644 --- a/code/game/machinery/slotmachine.dm +++ b/code/game/machinery/slotmachine.dm @@ -100,9 +100,9 @@ return ..() /obj/machinery/computer/slot_machine/emag_act() - if(emagged) + if(obj_flags & EMAGGED) return - emagged = TRUE + obj_flags |= EMAGGED var/datum/effect_system/spark_spread/spark_system = new /datum/effect_system/spark_spread() spark_system.set_up(4, 0, src.loc) spark_system.start() @@ -163,7 +163,7 @@ if(prob(15 * severity)) return if(prob(1)) // :^) - emagged = TRUE + obj_flags |= EMAGGED var/severity_ascending = 4 - severity money = max(rand(money - (200 * severity_ascending), money + (200 * severity_ascending)), 0) balance = max(rand(balance - (50 * severity_ascending), balance + (50 * severity_ascending)), 0) @@ -286,9 +286,9 @@ balance += surplus /obj/machinery/computer/slot_machine/proc/give_coins(amount) - var/cointype = emagged ? /obj/item/coin/iron : /obj/item/coin/silver + var/cointype = obj_flags & EMAGGED ? /obj/item/coin/iron : /obj/item/coin/silver - if(!emagged) + if(!(obj_flags & EMAGGED)) amount = dispense(amount, cointype, null, 0) else diff --git a/code/game/machinery/suit_storage_unit.dm b/code/game/machinery/suit_storage_unit.dm index 307107d517..cb100865d6 100644 --- a/code/game/machinery/suit_storage_unit.dm +++ b/code/game/machinery/suit_storage_unit.dm @@ -103,6 +103,10 @@ mask_type = /obj/item/clothing/mask/breath storage_type = /obj/item/tank/internals/emergency_oxygen/double +/obj/machinery/suit_storage_unit/open + state_open = TRUE + density = FALSE + /obj/machinery/suit_storage_unit/Initialize() . = ..() wires = new /datum/wires/suit_storage_unit(src) diff --git a/code/game/machinery/syndicatebeacon.dm b/code/game/machinery/syndicatebeacon.dm index 0b050769d9..c56cae8849 100644 --- a/code/game/machinery/syndicatebeacon.dm +++ b/code/game/machinery/syndicatebeacon.dm @@ -128,3 +128,7 @@ /obj/item/device/sbeacondrop/powersink desc = "A label on it reads: Warning: Activating this device will send a power draining device to your location." droptype = /obj/item/device/powersink + +/obj/item/device/sbeacondrop/clownbomb + desc = "A label on it reads: Warning: Activating this device will send a silly explosive to your location." + droptype = /obj/machinery/syndicatebomb/badmin/clown diff --git a/code/game/machinery/telecomms/computers/logbrowser.dm b/code/game/machinery/telecomms/computers/logbrowser.dm index 93f9d2b03a..12b01614c4 100644 --- a/code/game/machinery/telecomms/computers/logbrowser.dm +++ b/code/game/machinery/telecomms/computers/logbrowser.dm @@ -187,7 +187,7 @@ if(href_list["delete"]) - if(!src.allowed(usr) && !emagged) + if(!src.allowed(usr) && !(obj_flags & EMAGGED)) to_chat(usr, "ACCESS DENIED.") return diff --git a/code/game/machinery/telecomms/computers/message.dm b/code/game/machinery/telecomms/computers/message.dm index 4b44f02096..6336222493 100644 --- a/code/game/machinery/telecomms/computers/message.dm +++ b/code/game/machinery/telecomms/computers/message.dm @@ -33,17 +33,17 @@ light_color = LIGHT_COLOR_GREEN /obj/machinery/computer/message_monitor/attackby(obj/item/O, mob/living/user, params) - if(istype(O, /obj/item/screwdriver) && emagged) + if(istype(O, /obj/item/screwdriver) && (obj_flags & EMAGGED)) //Stops people from just unscrewing the monitor and putting it back to get the console working again. to_chat(user, "It is too hot to mess with!") else return ..() /obj/machinery/computer/message_monitor/emag_act(mob/user) - if(emagged) + if(obj_flags & EMAGGED) return if(!isnull(linkedServer)) - emagged = TRUE + obj_flags |= EMAGGED screen = 2 spark_system.set_up(5, 0, src) src.spark_system.start() @@ -71,7 +71,7 @@ if(..()) return //If the computer is being hacked or is emagged, display the reboot message. - if(hacking || emagged) + if(hacking || (obj_flags & EMAGGED)) message = rebootmsg var/dat = "
/
" @@ -82,7 +82,7 @@ dat += "

\[Unauthenticated\] /" dat += " Server Power: [src.linkedServer && src.linkedServer.toggled ? "\[On\]":"\[Off\]"]

" - if(hacking || emagged) + if(hacking || (obj_flags & EMAGGED)) screen = 2 else if(!auth || !linkedServer || (linkedServer.stat & (NOPOWER|BROKEN))) if(!linkedServer || (linkedServer.stat & (NOPOWER|BROKEN))) @@ -237,7 +237,7 @@ src.screen = 0 // Return the screen back to normal /obj/machinery/computer/message_monitor/proc/UnmagConsole() - emagged = FALSE + obj_flags &= ~EMAGGED /obj/machinery/computer/message_monitor/proc/ResetMessage() customsender = "System Administrator" diff --git a/code/game/machinery/vending.dm b/code/game/machinery/vending.dm index 1d0228d737..446a99dd31 100644 --- a/code/game/machinery/vending.dm +++ b/code/game/machinery/vending.dm @@ -224,7 +224,7 @@ /obj/machinery/vending/snack/proc/compartment_access_check(user) req_access_txt = chef_compartment_access - if(!allowed(user) && !emagged && scan_id) + if(!allowed(user) && !(obj_flags & EMAGGED) && scan_id) to_chat(user, "[src]'s chef compartment blinks red: Access denied.") req_access_txt = "0" return 0 @@ -342,9 +342,9 @@ ..() /obj/machinery/vending/emag_act(mob/user) - if(emagged) + if(obj_flags & EMAGGED) return - emagged = TRUE + obj_flags |= EMAGGED to_chat(user, "You short out the product lock on [src].") /obj/machinery/vending/attack_ai(mob/user) @@ -455,7 +455,7 @@ to_chat(usr, "The vending machine cannot dispense products while its service panel is open!") return - if((!allowed(usr)) && !emagged && scan_id) //For SECURE VENDING MACHINES YEAH + if((!allowed(usr)) && !(obj_flags & EMAGGED) && scan_id) //For SECURE VENDING MACHINES YEAH to_chat(usr, "Access denied." ) flick(icon_deny,src) return @@ -1195,4 +1195,4 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C #undef STANDARD_CHARGE #undef CONTRABAND_CHARGE -#undef COIN_CHARGE \ No newline at end of file +#undef COIN_CHARGE diff --git a/code/game/mecha/mech_fabricator.dm b/code/game/mecha/mech_fabricator.dm index 8654f9854e..021b05cb58 100644 --- a/code/game/mecha/mech_fabricator.dm +++ b/code/game/mecha/mech_fabricator.dm @@ -76,9 +76,9 @@ return TRUE /obj/machinery/mecha_part_fabricator/emag_act() - if(emagged) + if(obj_flags & EMAGGED) return - emagged = TRUE + obj_flags |= EMAGGED req_access = list() say("DB error \[Code 0x00F1\]") sleep(10) diff --git a/code/game/mecha/mecha.dm b/code/game/mecha/mecha.dm index ded6aec5c5..db6ef6b6b9 100644 --- a/code/game/mecha/mecha.dm +++ b/code/game/mecha/mecha.dm @@ -215,7 +215,7 @@ step_energy_drain = normal_step_energy_drain qdel(SM) if(CP) - armor["energy"] += (CP.rating * 10) //Each level of capacitor protects the mech against emp by 10% + armor = armor.modifyRating(energy = (CP.rating * 10)) //Each level of capacitor protects the mech against emp by 10% qdel(CP) //////////////////////// diff --git a/code/game/objects/effects/decals/cleanable/misc.dm b/code/game/objects/effects/decals/cleanable/misc.dm index 29d4fca0b9..d24a278b41 100644 --- a/code/game/objects/effects/decals/cleanable/misc.dm +++ b/code/game/objects/effects/decals/cleanable/misc.dm @@ -179,3 +179,9 @@ /obj/effect/decal/cleanable/glitter/blue name = "blue glitter" icon_state = "freon" + +/obj/effect/decal/cleanable/plasma + name = "stabilized plasma" + desc = "A puddle of stabilized plasma." + icon_state = "flour" + color = "#C8A5DC" \ No newline at end of file diff --git a/code/game/objects/effects/decals/cleanable/robots.dm b/code/game/objects/effects/decals/cleanable/robots.dm index 72a8689c75..b0159818eb 100644 --- a/code/game/objects/effects/decals/cleanable/robots.dm +++ b/code/game/objects/effects/decals/cleanable/robots.dm @@ -53,3 +53,8 @@ /obj/effect/decal/cleanable/oil/streak random_icon_states = list("streak1", "streak2", "streak3", "streak4", "streak5") + +/obj/effect/decal/cleanable/oil/slippery + +/obj/effect/decal/cleanable/oil/slippery/Initialize() + AddComponent(/datum/component/slippery, 80, (NO_SLIP_WHEN_WALKING | SLIDE)) \ No newline at end of file diff --git a/code/game/objects/effects/decals/crayon.dm b/code/game/objects/effects/decals/crayon.dm index b9a7701960..34263ef9a4 100644 --- a/code/game/objects/effects/decals/crayon.dm +++ b/code/game/objects/effects/decals/crayon.dm @@ -28,4 +28,3 @@ if(main) paint_colour = main add_atom_colour(paint_colour, FIXED_COLOUR_PRIORITY) - diff --git a/code/game/objects/effects/effect_system/effects_foam.dm b/code/game/objects/effects/effect_system/effects_foam.dm index 5d3a345e8c..21f04e5cdc 100644 --- a/code/game/objects/effects/effect_system/effects_foam.dm +++ b/code/game/objects/effects/effect_system/effects_foam.dm @@ -23,6 +23,51 @@ /turf/open/chasm, /turf/open/lava)) +/obj/effect/particle_effect/foam/firefighting + name = "firefighting foam" + lifetime = 20 //doesn't last as long as normal foam + amount = 0 //no spread + var/absorbed_plasma = 0 + +/obj/effect/particle_effect/foam/firefighting/MakeSlippery() + return + +/obj/effect/particle_effect/foam/firefighting/process() + ..() + + var/turf/open/T = get_turf(src) + var/obj/effect/hotspot/hotspot = (locate(/obj/effect/hotspot) in T) + if(hotspot && istype(T) && T.air) + qdel(hotspot) + var/datum/gas_mixture/G = T.air + var/plas_amt = min(30,G.gases[/datum/gas/plasma][MOLES]) //Absorb some plasma + G.gases[/datum/gas/plasma][MOLES] -= plas_amt + absorbed_plasma += plas_amt + if(G.temperature > T20C) + G.temperature = max(G.temperature/2,T20C) + G.garbage_collect() + T.air_update_turf() + +/obj/effect/particle_effect/foam/firefighting/kill_foam() + STOP_PROCESSING(SSfastprocess, src) + + if(absorbed_plasma) + var/obj/effect/decal/cleanable/plasma/P = (locate(/obj/effect/decal/cleanable/plasma) in get_turf(src)) + if(!P) + P = new(loc) + P.reagents.add_reagent("stable_plasma", absorbed_plasma) + + flick("[icon_state]-disolve", src) + QDEL_IN(src, 5) + +/obj/effect/particle_effect/foam/firefighting/foam_mob(mob/living/L) + if(!istype(L)) + return + L.adjust_fire_stacks(-2) + L.ExtinguishMob() + +/obj/effect/particle_effect/foam/firefighting/temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume) + return /obj/effect/particle_effect/foam/metal name = "aluminium foam" diff --git a/code/game/objects/effects/effects.dm b/code/game/objects/effects/effects.dm index 2b456b2ed7..1ac6f8d007 100644 --- a/code/game/objects/effects/effects.dm +++ b/code/game/objects/effects/effects.dm @@ -4,7 +4,7 @@ /obj/effect icon = 'icons/effects/effects.dmi' resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF | FREEZE_PROOF - can_be_hit = FALSE + obj_flags = 0 /obj/effect/take_damage(damage_amount, damage_type = BRUTE, damage_flag = 0, sound_effect = 1, attack_dir) return diff --git a/code/game/objects/effects/landmarks.dm b/code/game/objects/effects/landmarks.dm index 62c6d9bf44..f6c950cc42 100644 --- a/code/game/objects/effects/landmarks.dm +++ b/code/game/objects/effects/landmarks.dm @@ -269,10 +269,6 @@ INITIALIZE_IMMEDIATE(/obj/effect/landmark/start/new_player) name = "carpspawn" icon_state = "carp_spawn" -// lightsout. -/obj/effect/landmark/lightsout - name = "lightsout" - // observer-start. /obj/effect/landmark/observer_start name = "Observer-Start" diff --git a/code/game/objects/effects/mines.dm b/code/game/objects/effects/mines.dm index 9c1e72bd92..65e69a2e55 100644 --- a/code/game/objects/effects/mines.dm +++ b/code/game/objects/effects/mines.dm @@ -167,7 +167,7 @@ if(!victim.client || !istype(victim)) return to_chat(victim, "You feel fast!") - victim.status_flags |= GOTTAGOREALLYFAST + victim.add_trait(TRAIT_GOTTAGOREALLYFAST, "yellow_orb") sleep(duration) - victim.status_flags &= ~GOTTAGOREALLYFAST + victim.remove_trait(TRAIT_GOTTAGOREALLYFAST, "yellow_orb") to_chat(victim, "You slow down.") diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index 19c1b6e03d..88652882cb 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -26,7 +26,8 @@ GLOBAL_VAR_INIT(rpg_loot_items, FALSE) max_integrity = 200 - can_be_hit = FALSE + obj_flags = NONE + var/item_flags = NONE var/hitsound = null var/usesound = null @@ -61,37 +62,22 @@ GLOBAL_VAR_INIT(rpg_loot_items, FALSE) var/equip_delay_other = 20 //In deciseconds, how long an item takes to put on another person var/strip_delay = 40 //In deciseconds, how long an item takes to remove from another person var/breakouttime = 0 - var/being_removed = FALSE var/list/materials - var/needs_permit = 0 //Used by security bots to determine if this item is safe for public use. - var/emagged = FALSE var/list/attack_verb //Used in attackby() to say how something was attacked "[x] has been [z.attack_verb] by [y] with [z]" var/list/species_exception = null // list() of species types, if a species cannot put items in a certain slot, but species type is in list, it will be able to wear that item - var/suittoggled = FALSE - var/hooded = 0 - var/mob/thrownby = null mouse_drag_pointer = MOUSE_ACTIVE_POINTER //the icon to indicate this object is being dragged - //So items can have custom embedd values - //Because customisation is king - var/embed_chance = EMBED_CHANCE - var/embedded_fall_chance = EMBEDDED_ITEM_FALLOUT - var/embedded_pain_chance = EMBEDDED_PAIN_CHANCE - var/embedded_pain_multiplier = EMBEDDED_PAIN_MULTIPLIER //The coefficient of multiplication for the damage this item does while embedded (this*w_class) - var/embedded_fall_pain_multiplier = EMBEDDED_FALL_PAIN_MULTIPLIER //The coefficient of multiplication for the damage this item does when falling out of a limb (this*w_class) - var/embedded_impact_pain_multiplier = EMBEDDED_IMPACT_PAIN_MULTIPLIER //The coefficient of multiplication for the damage this item does when first embedded (this*w_class) - var/embedded_unsafe_removal_pain_multiplier = EMBEDDED_UNSAFE_REMOVAL_PAIN_MULTIPLIER //The coefficient of multiplication for the damage removing this without surgery causes (this*w_class) - var/embedded_unsafe_removal_time = EMBEDDED_UNSAFE_REMOVAL_TIME //A time in ticks, multiplied by the w_class. + var/datum/embedding_behavior/embedding var/flags_cover = 0 //for flags such as GLASSESCOVERSEYES var/heat = 0 var/sharpness = IS_BLUNT - var/tool_behaviour = TOOL_NONE + var/tool_behaviour = NONE var/toolspeed = 1 var/block_chance = 0 @@ -109,16 +95,13 @@ GLOBAL_VAR_INIT(rpg_loot_items, FALSE) //Tooltip vars - var/in_inventory = FALSE//is this item equipped into an inventory slot or hand of a mob? var/force_string //string form of an item's force. Edit this var only to set a custom force string var/last_force_string_check = 0 var/tip_timer - var/force_string_override + var/icon_override //CIT CHANGE - adds icon_override var. Will be removed with #4322 var/trigger_guard = TRIGGER_GUARD_NONE - var/icon_override //CIT CHANGE - adds icon_override var. Will be removed with #4322 - //Grinder vars var/list/grind_results //A reagent list containing the reagents this item produces when ground up in a grinder - this can be an empty list to allow for reagent transferring only var/list/juice_results //A reagent list containing blah blah... but when JUICED in a grinder! @@ -135,7 +118,7 @@ GLOBAL_VAR_INIT(rpg_loot_items, FALSE) rpg_loot = new(src) if(force_string) - force_string_override = TRUE + item_flags |= FORCE_STRING_OVERRIDE if(!hitsound) if(damtype == "fire") @@ -143,6 +126,13 @@ GLOBAL_VAR_INIT(rpg_loot_items, FALSE) if(damtype == "brute") hitsound = "swing_hit" + if (!embedding) + embedding = getEmbeddingBehavior() + else if (islist(embedding)) + embedding = getEmbeddingBehavior(arglist(embedding)) + else if (!istype(embedding, /datum/embedding_behavior)) + stack_trace("Invalid type [embedding.type] found in .embedding during /obj/item Initialize()") + /obj/item/Destroy() flags_1 &= ~DROPDEL_1 //prevent reqdels if(ismob(loc)) @@ -413,12 +403,12 @@ GLOBAL_VAR_INIT(rpg_loot_items, FALSE) A.Remove(user) if(DROPDEL_1 & flags_1) qdel(src) - in_inventory = FALSE + item_flags &= ~IN_INVENTORY SendSignal(COMSIG_ITEM_DROPPED,user) // called just as an item is picked up (loc is not yet changed) /obj/item/proc/pickup(mob/user) - in_inventory = TRUE + item_flags |= IN_INVENTORY return @@ -446,7 +436,7 @@ GLOBAL_VAR_INIT(rpg_loot_items, FALSE) if(item_action_slot_check(slot, user)) //some items only give their actions buttons when in a specific slot. A.Grant(user) SendSignal(COMSIG_ITEM_EQUIPPED,user,slot) - in_inventory = TRUE + item_flags |= IN_INVENTORY //sometimes we only want to grant the item's action if it's equipped in a specific slot. /obj/item/proc/item_action_slot_check(slot, mob/user) @@ -547,7 +537,7 @@ GLOBAL_VAR_INIT(rpg_loot_items, FALSE) M.adjust_blurriness(15) if(M.stat != DEAD) to_chat(M, "Your eyes start to bleed profusely!") - if(!(M.has_disability(DISABILITY_BLIND) || M.has_disability(DISABILITY_NEARSIGHT))) + if(!(M.has_trait(TRAIT_BLIND) || M.has_trait(TRAIT_NEARSIGHT))) to_chat(M, "You become nearsighted!") M.become_nearsighted(EYE_DAMAGE) if(prob(50)) @@ -588,7 +578,7 @@ GLOBAL_VAR_INIT(rpg_loot_items, FALSE) if (callback) //call the original callback . = callback.Invoke() throw_speed = initial(throw_speed) //explosions change this. - in_inventory = FALSE + item_flags &= ~IN_INVENTORY /obj/item/proc/remove_item_from_storage(atom/newLoc) //please use this if you're going to snowflake an item out of a obj/item/storage if(!newLoc) @@ -737,15 +727,15 @@ GLOBAL_VAR_INIT(rpg_loot_items, FALSE) last_force_string_check = force /obj/item/proc/openTip(location, control, params, user) - if(last_force_string_check != force && !force_string_override) + if(last_force_string_check != force && !(item_flags & FORCE_STRING_OVERRIDE)) set_force_string() - if(!force_string_override) + if(!(item_flags & FORCE_STRING_OVERRIDE)) openToolTip(user,src,params,title = name,content = "[desc]
[force ? "Force: [force_string]" : ""]",theme = "") else openToolTip(user,src,params,title = name,content = "[desc]
Force: [force_string]",theme = "") /obj/item/MouseEntered(location, control, params) - if(in_inventory && usr.client.prefs.enable_tips) + if((item_flags & IN_INVENTORY) && usr.client.prefs.enable_tips) var/timedelay = usr.client.prefs.tip_delay/100 var/user = usr tip_timer = addtimer(CALLBACK(src, .proc/openTip, location, control, params, user), timedelay, TIMER_STOPPABLE)//timer takes delay in deciseconds, but the pref is in milliseconds. dividing by 100 converts it. diff --git a/code/game/objects/items/AI_modules.dm b/code/game/objects/items/AI_modules.dm index cdf9d5e333..919bea60b4 100644 --- a/code/game/objects/items/AI_modules.dm +++ b/code/game/objects/items/AI_modules.dm @@ -173,16 +173,16 @@ AI MODULES /******************** OneHuman ********************/ /obj/item/aiModule/zeroth/oneHuman - name = "'OneCrew' AI Module"//CIT CHANGE - changes onehuman to onecrew + name = "'OneHuman' AI Module" var/targetName = "" - laws = list("Only SUBJECT is crew.") + laws = list("Only SUBJECT is human.") /obj/item/aiModule/zeroth/oneHuman/attack_self(mob/user) - var/targName = stripped_input(user, "Please enter the subject who is the only crew.", "Who?", user.real_name,MAX_NAME_LEN) + var/targName = stripped_input(user, "Please enter the subject who is the only human.", "Who?", user.real_name,MAX_NAME_LEN) if(!targName) return targetName = targName - laws[1] = "Only [targetName] is crew" + laws[1] = "Only [targetName] is human" ..() /obj/item/aiModule/zeroth/oneHuman/install(datum/ai_laws/law_datum, mob/user) @@ -408,9 +408,8 @@ AI MODULES laws += line - if(!laws.len) //Failsafe if something goes wrong with silicon_laws.txt. - WARNING("ERROR: empty custom board created, empty custom board deleted. Please check silicon_laws.txt. (this may be intended by the server host)") - qdel(src) + if(!laws.len) + return INITIALIZE_HINT_QDEL /****************** T.Y.R.A.N.T. *****************/ diff --git a/code/game/objects/items/RSF.dm b/code/game/objects/items/RSF.dm index eec97044bc..a01c0e7487 100644 --- a/code/game/objects/items/RSF.dm +++ b/code/game/objects/items/RSF.dm @@ -133,8 +133,8 @@ RSF return /obj/item/cookiesynth/emag_act(mob/user) - emagged = !emagged - if(emagged) + obj_flags ^= EMAGGED + if(obj_flags & EMAGGED) to_chat(user, "You short out [src]'s reagent safety checker!") else to_chat(user, "You reset [src]'s reagent safety checker!") @@ -144,7 +144,7 @@ RSF var/mob/living/silicon/robot/P = null if(iscyborg(user)) P = user - if(emagged&&!toxin) + if((obj_flags & EMAGGED)&&!toxin) toxin = 1 to_chat(user, "Cookie Synthesizer Hacked") else if(P.emagged&&!toxin) diff --git a/code/game/objects/items/body_egg.dm b/code/game/objects/items/body_egg.dm index 61e15e9fc1..13dd2c1f18 100644 --- a/code/game/objects/items/body_egg.dm +++ b/code/game/objects/items/body_egg.dm @@ -16,7 +16,7 @@ /obj/item/organ/body_egg/Insert(var/mob/living/carbon/M, special = 0) ..() - owner.status_flags |= XENO_HOST + owner.add_trait(TRAIT_XENO_HOST, TRAIT_GENERIC) START_PROCESSING(SSobj, src) owner.med_hud_set_status() INVOKE_ASYNC(src, .proc/AddInfectionImages, owner) @@ -24,7 +24,7 @@ /obj/item/organ/body_egg/Remove(var/mob/living/carbon/M, special = 0) STOP_PROCESSING(SSobj, src) if(owner) - owner.status_flags &= ~(XENO_HOST) + owner.remove_trait(TRAIT_XENO_HOST, TRAIT_GENERIC) owner.med_hud_set_status() INVOKE_ASYNC(src, .proc/RemoveInfectionImages, owner) ..() diff --git a/code/game/objects/items/cigs_lighters.dm b/code/game/objects/items/cigs_lighters.dm index 01bb057769..267044f289 100644 --- a/code/game/objects/items/cigs_lighters.dm +++ b/code/game/objects/items/cigs_lighters.dm @@ -693,7 +693,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM cut_overlays() if(istype(O, /obj/item/device/multitool)) - if(screw && !emagged)//also kinky + if(screw && !(obj_flags & EMAGGED))//also kinky if(!super) cut_overlays() super = 1 @@ -705,15 +705,15 @@ CIGARETTE PACKETS ARE IN FANCY.DM to_chat(user, "You decrease the voltage of [src].") add_overlay("vapeopen_low") - if(screw && emagged) + if(screw && (obj_flags & EMAGGED)) to_chat(user, "[src] can't be modified!") /obj/item/clothing/mask/vape/emag_act(mob/user)// I WON'T REGRET WRITTING THIS, SURLY. if(screw) - if(!emagged) + if(!(obj_flags & EMAGGED)) cut_overlays() - emagged = TRUE + obj_flags |= EMAGGED super = 0 to_chat(user, "You maximize the voltage of [src].") add_overlay("vapeopen_high") @@ -790,7 +790,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM s.start() vapetime = 0 - if(emagged && vapetime > 3) + if((obj_flags & EMAGGED) && vapetime > 3) var/datum/effect_system/smoke_spread/chem/s = new s.set_up(reagents, 4, loc, silent=TRUE) s.start() diff --git a/code/game/objects/items/circuitboards/computer_circuitboards.dm b/code/game/objects/items/circuitboards/computer_circuitboards.dm index afd0eeef95..24038d9c69 100644 --- a/code/game/objects/items/circuitboards/computer_circuitboards.dm +++ b/code/game/objects/items/circuitboards/computer_circuitboards.dm @@ -189,16 +189,16 @@ var/contraband = FALSE /obj/item/circuitboard/computer/cargo/multitool_act(mob/living/user) - if(!emagged) + if(!(obj_flags & EMAGGED)) contraband = !contraband to_chat(user, "Receiver spectrum set to [contraband ? "Broad" : "Standard"].") else to_chat(user, "The spectrum chip is unresponsive.") /obj/item/circuitboard/computer/cargo/emag_act(mob/living/user) - if(!emagged) + if(!(obj_flags & EMAGGED)) contraband = TRUE - emagged = TRUE + obj_flags |= EMAGGED to_chat(user, "You adjust [src]'s routing and receiver spectrum, unlocking special supplies and contraband.") /obj/item/circuitboard/computer/cargo/express @@ -206,15 +206,15 @@ build_path = /obj/machinery/computer/cargo/express /obj/item/circuitboard/computer/cargo/express/multitool_act(mob/living/user) - if (!emagged) + if (!(obj_flags & EMAGGED)) to_chat(user, "Routing protocols are already set to: \"factory defaults\".") - else + else to_chat(user, "You reset the routing protocols to: \"factory defaults\".") - emagged = FALSE + obj_flags &= ~EMAGGED /obj/item/circuitboard/computer/cargo/express/emag_act(mob/living/user) to_chat(user, "You change the routing protocols, allowing the Drop Pod to land anywhere on the station.") - emagged = TRUE + obj_flags |= EMAGGED /obj/item/circuitboard/computer/cargo/request name = "Supply Request Console (Computer Board)" diff --git a/code/game/objects/items/crayons.dm b/code/game/objects/items/crayons.dm index 86628265bc..afdeb4c658 100644 --- a/code/game/objects/items/crayons.dm +++ b/code/game/objects/items/crayons.dm @@ -39,7 +39,7 @@ var/list/runes = list("rune1","rune2","rune3","rune4","rune5","rune6") var/list/randoms = list(RANDOM_ANY, RANDOM_RUNE, RANDOM_ORIENTED, RANDOM_NUMBER, RANDOM_GRAFFITI, RANDOM_LETTER) - var/list/graffiti_large_h = list("secborg", "paint") // CIT CHANGE - removes yiff in hell graffiti + var/list/graffiti_large_h = list("yiffhell", "secborg", "paint") var/list/all_drawables diff --git a/code/game/objects/items/defib.dm b/code/game/objects/items/defib.dm index a314f8191e..98836fe870 100644 --- a/code/game/objects/items/defib.dm +++ b/code/game/objects/items/defib.dm @@ -399,7 +399,7 @@ /obj/item/twohanded/shockpaddles/proc/can_defib(mob/living/carbon/H) var/obj/item/organ/brain/BR = H.getorgan(/obj/item/organ/brain) - return (!H.suiciding && !(H.has_disability(DISABILITY_NOCLONE)) && !H.hellbound && ((world.time - H.timeofdeath) < tlimit) && (H.getBruteLoss() < 180) && (H.getFireLoss() < 180) && H.getorgan(/obj/item/organ/heart) && BR && !BR.damaged_brain) + return (!H.suiciding && !(H.has_trait(TRAIT_NOCLONE)) && !H.hellbound && ((world.time - H.timeofdeath) < tlimit) && (H.getBruteLoss() < 180) && (H.getFireLoss() < 180) && H.getorgan(/obj/item/organ/heart) && BR && !BR.damaged_brain) /obj/item/twohanded/shockpaddles/proc/shock_touching(dmg, mob/H) if(isliving(H.pulledby)) //CLEAR! @@ -520,7 +520,7 @@ shock_touching(30, H) var/failed - if (H.suiciding || (H.has_disability(DISABILITY_NOCLONE))) + if (H.suiciding || (H.has_trait(TRAIT_NOCLONE))) failed = "[req_defib ? "[defib]" : "[src]"] buzzes: Resuscitation failed - Recovery of patient impossible. Further attempts futile." else if (H.hellbound) failed = "[req_defib ? "[defib]" : "[src]"] buzzes: Resuscitation failed - Patient's soul appears to be on another plane of existence. Further attempts futile." diff --git a/code/game/objects/items/devices/flashlight.dm b/code/game/objects/items/devices/flashlight.dm index 0e8200126a..f8ffc8aafb 100644 --- a/code/game/objects/items/devices/flashlight.dm +++ b/code/game/objects/items/devices/flashlight.dm @@ -49,7 +49,7 @@ add_fingerprint(user) if(istype(M) && on && user.zone_selected in list("eyes", "mouth")) - if((user.has_disability(DISABILITY_CLUMSY) || user.has_disability(DISABILITY_DUMB)) && prob(50)) //too dumb to use flashlight properly + if((user.has_trait(TRAIT_CLUMSY) || user.has_trait(TRAIT_DUMB)) && prob(50)) //too dumb to use flashlight properly return ..() //just hit them in the head if(!user.IsAdvancedToolUser()) @@ -83,7 +83,7 @@ else user.visible_message("[user] directs [src] to [M]'s eyes.", \ "You direct [src] to [M]'s eyes.") - if(M.stat == DEAD || (M.has_disability(DISABILITY_BLIND)) || !M.flash_act(visual = 1)) //mob is dead or fully blind + if(M.stat == DEAD || (M.has_trait(TRAIT_BLIND)) || !M.flash_act(visual = 1)) //mob is dead or fully blind to_chat(user, "[M]'s pupils don't react to the light!") else if(M.dna && M.dna.check_mutation(XRAY)) //mob has X-RAY vision to_chat(user, "[M]'s pupils give an eerie glow!") diff --git a/code/game/objects/items/devices/geiger_counter.dm b/code/game/objects/items/devices/geiger_counter.dm index 03e4ff123a..64d710be25 100644 --- a/code/game/objects/items/devices/geiger_counter.dm +++ b/code/game/objects/items/devices/geiger_counter.dm @@ -46,15 +46,15 @@ if(!scanning) current_tick_amount = 0 return - + radiation_count -= radiation_count/RAD_MEASURE_SMOOTHING radiation_count += current_tick_amount/RAD_MEASURE_SMOOTHING - + if(current_tick_amount) grace = RAD_GRACE_PERIOD last_tick_amount = current_tick_amount - else if(!emagged) + else if(!(obj_flags & EMAGGED)) grace-- if(grace <= 0) radiation_count = 0 @@ -66,7 +66,7 @@ if(!scanning) return 1 to_chat(user, "Alt-click it to clear stored radiation levels.") - if(emagged) + if(obj_flags & EMAGGED) to_chat(user, "The display seems to be incomprehensible.") return 1 switch(radiation_count) @@ -89,7 +89,7 @@ if(!scanning) icon_state = "geiger_off" return 1 - if(emagged) + if(obj_flags & EMAGGED) icon_state = "geiger_on_emag" return 1 switch(radiation_count) @@ -131,7 +131,7 @@ /obj/item/device/geiger_counter/attack(mob/living/M, mob/user) if(user.a_intent == INTENT_HELP) - if(!emagged) + if(!(obj_flags & EMAGGED)) user.visible_message("[user] scans [M] with [src].", "You scan [M]'s radiation levels with [src]...") addtimer(CALLBACK(src, .proc/scan, M, user), 20, TIMER_UNIQUE) // Let's not have spamming GetAllContents else @@ -164,7 +164,7 @@ to_chat(user, "[icon2html(src, user)] Subject is free of radioactive contamination.") /obj/item/device/geiger_counter/attackby(obj/item/I, mob/user, params) - if(istype(I, /obj/item/screwdriver) && emagged) + if(istype(I, /obj/item/screwdriver) && (obj_flags & EMAGGED)) if(scanning) to_chat(user, "Turn off [src] before you perform this action!") return 0 @@ -174,7 +174,7 @@ return 0 user.visible_message("[user] refastens [src]'s maintenance panel!", "You reset [src] to its factory settings!") playsound(user, 'sound/items/screwdriver2.ogg', 50, 1) - emagged = FALSE + obj_flags &= ~EMAGGED radiation_count = 0 update_icon() return 1 @@ -192,13 +192,13 @@ update_icon() /obj/item/device/geiger_counter/emag_act(mob/user) - if(emagged) + if(obj_flags & EMAGGED) return if(scanning) to_chat(user, "Turn off [src] before you perform this action!") return 0 to_chat(user, "You override [src]'s radiation storing protocols. It will now generate small doses of radiation, and stored rads are now projected into creatures you scan.") - emagged = TRUE + obj_flags |= EMAGGED #undef RAD_LEVEL_NORMAL #undef RAD_LEVEL_MODERATE diff --git a/code/game/objects/items/devices/gps.dm b/code/game/objects/items/devices/gps.dm index 9d01e2a7aa..2c75166789 100644 --- a/code/game/objects/items/devices/gps.dm +++ b/code/game/objects/items/devices/gps.dm @@ -6,7 +6,7 @@ GLOBAL_LIST_EMPTY(GPS_list) icon_state = "gps-c" w_class = WEIGHT_CLASS_SMALL slot_flags = SLOT_BELT - unique_rename = TRUE + obj_flags = UNIQUE_RENAME var/gpstag = "COM0" var/emped = FALSE var/turf/locked_location diff --git a/code/game/objects/items/devices/lightreplacer.dm b/code/game/objects/items/devices/lightreplacer.dm index 4ea91ccccf..a1cdfe4a9b 100644 --- a/code/game/objects/items/devices/lightreplacer.dm +++ b/code/game/objects/items/devices/lightreplacer.dm @@ -149,7 +149,7 @@ to_chat(user, "You fill \the [src] with lights from \the [S]. " + status_string() + "") /obj/item/device/lightreplacer/emag_act() - if(emagged) + if(obj_flags & EMAGGED) return Emag() @@ -157,7 +157,7 @@ to_chat(user, status_string()) /obj/item/device/lightreplacer/update_icon() - icon_state = "lightreplacer[emagged]" + icon_state = "lightreplacer[(obj_flags & EMAGGED ? 1 : 0)]" /obj/item/device/lightreplacer/proc/status_string() return "It has [uses] light\s remaining (plus [bulb_shards] fragment\s)." @@ -205,7 +205,7 @@ target.status = L2.status target.switchcount = L2.switchcount - target.rigged = emagged + target.rigged = (obj_flags & EMAGGED ? 1 : 0) target.brightness = L2.brightness target.on = target.has_power() target.update() @@ -223,9 +223,9 @@ return /obj/item/device/lightreplacer/proc/Emag() - emagged = !emagged + obj_flags ^= EMAGGED playsound(src.loc, "sparks", 100, 1) - if(emagged) + if(obj_flags & EMAGGED) name = "shortcircuited [initial(name)]" else name = initial(name) diff --git a/code/game/objects/items/devices/megaphone.dm b/code/game/objects/items/devices/megaphone.dm index 79725173bf..4b47a0373f 100644 --- a/code/game/objects/items/devices/megaphone.dm +++ b/code/game/objects/items/devices/megaphone.dm @@ -25,10 +25,10 @@ return voicespan /obj/item/device/megaphone/emag_act(mob/user) - if(emagged) + if(obj_flags & EMAGGED) return to_chat(user, "You overload \the [src]'s voice synthesizer.") - emagged = TRUE + obj_flags |= EMAGGED voicespan = list(SPAN_REALLYBIG, "userdanger") /obj/item/device/megaphone/sec diff --git a/code/game/objects/items/devices/scanners.dm b/code/game/objects/items/devices/scanners.dm index 2ff3ee31bd..ca1feafe5e 100644 --- a/code/game/objects/items/devices/scanners.dm +++ b/code/game/objects/items/devices/scanners.dm @@ -90,7 +90,7 @@ GAS ANALYZER /obj/item/device/healthanalyzer/attack(mob/living/M, mob/living/carbon/human/user) // Clumsiness/brain damage check - if ((user.has_disability(DISABILITY_CLUMSY) || user.has_disability(DISABILITY_DUMB)) && prob(50)) + if ((user.has_trait(TRAIT_CLUMSY) || user.has_trait(TRAIT_DUMB)) && prob(50)) to_chat(user, "You stupidly try to analyze the floor's vitals!") user.visible_message("[user] has analyzed the floor's vitals!") to_chat(user, "Analyzing results for The floor:\n\tOverall status: Healthy") @@ -120,7 +120,7 @@ GAS ANALYZER var/brute_loss = M.getBruteLoss() var/mob_status = (M.stat == DEAD ? "Deceased" : "[round(M.health/M.maxHealth,0.01)*100] % healthy") - if(M.status_flags & FAKEDEATH && !advanced) + if(M.has_trait(TRAIT_FAKEDEATH) && !advanced) mob_status = "Deceased" oxy_loss = max(rand(1, 40), oxy_loss, (300 - (tox_loss + fire_loss + brute_loss))) // Random oxygen loss @@ -181,10 +181,10 @@ GAS ANALYZER to_chat(user, "\t==EAR STATUS==") if(istype(ears)) var/healthy = TRUE - if(C.has_disability(DISABILITY_DEAF, GENETIC_MUTATION)) + if(C.has_trait(TRAIT_DEAF, GENETIC_MUTATION)) healthy = FALSE to_chat(user, "\tSubject is genetically deaf.") - else if(C.has_disability(DISABILITY_DEAF)) + else if(C.has_trait(TRAIT_DEAF)) healthy = FALSE to_chat(user, "\tSubject is deaf.") else @@ -202,10 +202,10 @@ GAS ANALYZER to_chat(user, "\t==EYE STATUS==") if(istype(eyes)) var/healthy = TRUE - if(C.has_disability(DISABILITY_BLIND)) + if(C.has_trait(TRAIT_BLIND)) to_chat(user, "\tSubject is blind.") healthy = FALSE - if(C.has_disability(DISABILITY_NEARSIGHT)) + if(C.has_trait(TRAIT_NEARSIGHT)) to_chat(user, "\tSubject is nearsighted.") healthy = FALSE if(eyes.eye_damage > 30) @@ -245,7 +245,7 @@ GAS ANALYZER to_chat(user, "Body temperature: [round(M.bodytemperature-T0C,0.1)] °C ([round(M.bodytemperature*1.8-459.67,0.1)] °F)") // Time of death - if(M.tod && (M.stat == DEAD || ((M.status_flags & FAKEDEATH) && !advanced))) + if(M.tod && (M.stat == DEAD || ((M.has_trait(TRAIT_FAKEDEATH)) && !advanced))) to_chat(user, "Time of Death: [M.tod]") var/tdelta = round(world.time - M.timeofdeath) if(tdelta < (DEFIB_TIME_LIMIT * 10)) diff --git a/code/game/objects/items/dna_injector.dm b/code/game/objects/items/dna_injector.dm index f2741e4715..c908b619c4 100644 --- a/code/game/objects/items/dna_injector.dm +++ b/code/game/objects/items/dna_injector.dm @@ -31,7 +31,7 @@ /obj/item/dnainjector/proc/inject(mob/living/carbon/M, mob/user) prepare() - if(M.has_dna() && !(RADIMMUNE in M.dna.species.species_traits) && !(M.has_disability(DISABILITY_NOCLONE))) + if(M.has_dna() && !(RADIMMUNE in M.dna.species.species_traits) && !(M.has_trait(TRAIT_NOCLONE))) M.radiation += rand(20/(damage_coeff ** 2),50/(damage_coeff ** 2)) var/log_msg = "[key_name(user)] injected [key_name(M)] with the [name]" for(var/datum/mutation/human/HM in remove_mutations) @@ -313,7 +313,7 @@ to_chat(user, "You can't modify [M]'s DNA while [M.p_theyre()] dead.") return FALSE - if(M.has_dna() && !(M.has_disability(DISABILITY_NOCLONE))) + if(M.has_dna() && !(M.has_trait(TRAIT_NOCLONE))) M.radiation += rand(20/(damage_coeff ** 2),50/(damage_coeff ** 2)) var/log_msg = "[key_name(user)] injected [key_name(M)] with the [name]" var/endtime = world.time+duration diff --git a/code/game/objects/items/grenades/grenade.dm b/code/game/objects/items/grenades/grenade.dm index 3df64597c9..e4174563b8 100644 --- a/code/game/objects/items/grenades/grenade.dm +++ b/code/game/objects/items/grenades/grenade.dm @@ -32,7 +32,7 @@ qdel(src) /obj/item/grenade/proc/clown_check(mob/living/carbon/human/user) - if(user.has_disability(DISABILITY_CLUMSY) && prob(50)) + if(user.has_trait(TRAIT_CLUMSY) && prob(50)) to_chat(user, "Huh? How does this thing work?") preprime(user, 5, FALSE) return FALSE diff --git a/code/game/objects/items/grenades/plastic.dm b/code/game/objects/items/grenades/plastic.dm index eb0c397fc8..ae20859a9d 100644 --- a/code/game/objects/items/grenades/plastic.dm +++ b/code/game/objects/items/grenades/plastic.dm @@ -113,7 +113,7 @@ var/obj/item/I = AM I.throw_speed = max(1, (I.throw_speed - 3)) I.throw_range = max(1, (I.throw_range - 3)) - I.embed_chance = 0 + I.embedding = I.embedding.setRating(embed_chance = 0) message_admins("[ADMIN_LOOKUPFLW(user)] planted [name] on [target.name] at [ADMIN_COORDJMP(target)] with [det_time] second fuse",0,1) log_game("[key_name(user)] planted [name] on [target.name] at [COORD(src)] with [det_time] second fuse") diff --git a/code/game/objects/items/handcuffs.dm b/code/game/objects/items/handcuffs.dm index 1b285f28da..40f746b1dd 100644 --- a/code/game/objects/items/handcuffs.dm +++ b/code/game/objects/items/handcuffs.dm @@ -43,7 +43,7 @@ /obj/item/restraints/handcuffs/attack(mob/living/carbon/C, mob/living/carbon/human/user) if(!istype(C)) return - if(user.has_disability(DISABILITY_CLUMSY) && prob(50)) + if(user.has_trait(TRAIT_CLUMSY) && prob(50)) to_chat(user, "Uh... how do those things work?!") apply_cuffs(user,user) return diff --git a/code/game/objects/items/holy_weapons.dm b/code/game/objects/items/holy_weapons.dm index ea570374b2..aaa19b6ab1 100644 --- a/code/game/objects/items/holy_weapons.dm +++ b/code/game/objects/items/holy_weapons.dm @@ -10,7 +10,7 @@ throw_range = 4 throwforce = 10 w_class = WEIGHT_CLASS_TINY - unique_rename = TRUE + obj_flags = UNIQUE_RENAME var/reskinned = FALSE /obj/item/nullrod/suicide_act(mob/user) diff --git a/code/game/objects/items/kitchen.dm b/code/game/objects/items/kitchen.dm index cbb326d6ac..d67a3c8333 100644 --- a/code/game/objects/items/kitchen.dm +++ b/code/game/objects/items/kitchen.dm @@ -49,7 +49,7 @@ forkload = null else if(user.zone_selected == "eyes") - if(user.has_disability(DISABILITY_CLUMSY) && prob(50)) + if(user.has_trait(TRAIT_CLUMSY) && prob(50)) M = user return eyestab(M,user) else @@ -75,7 +75,7 @@ /obj/item/kitchen/knife/attack(mob/living/carbon/M, mob/living/carbon/user) if(user.zone_selected == "eyes") - if(user.has_disability(DISABILITY_CLUMSY) && prob(50)) + if(user.has_trait(TRAIT_CLUMSY) && prob(50)) M = user return eyestab(M,user) else diff --git a/code/game/objects/items/melee/energy.dm b/code/game/objects/items/melee/energy.dm index 146bcbb3c3..2f9e4231df 100644 --- a/code/game/objects/items/melee/energy.dm +++ b/code/game/objects/items/melee/energy.dm @@ -95,8 +95,7 @@ throw_speed = 3 throw_range = 5 sharpness = IS_SHARP - embed_chance = 75 - embedded_impact_pain_multiplier = 10 + embedding = list("embed_chance" = 75, "embedded_impact_pain_multiplier" = 10) armour_penetration = 35 block_chance = 50 diff --git a/code/game/objects/items/melee/misc.dm b/code/game/objects/items/melee/misc.dm index 3f1b5cd54e..3fbb5111b7 100644 --- a/code/game/objects/items/melee/misc.dm +++ b/code/game/objects/items/melee/misc.dm @@ -1,5 +1,5 @@ /obj/item/melee - needs_permit = 1 + item_flags = NEEDS_PERMIT /obj/item/melee/proc/check_martial_counter(mob/living/carbon/human/target, mob/living/carbon/human/user) if(target.check_block()) @@ -52,7 +52,7 @@ lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi' righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi' flags_1 = CONDUCT_1 - unique_rename = 1 + obj_flags = UNIQUE_RENAME force = 15 throwforce = 10 w_class = WEIGHT_CLASS_BULKY @@ -99,7 +99,7 @@ return ..() add_fingerprint(user) - if((user.has_disability(DISABILITY_CLUMSY)) && prob(50)) + if((user.has_trait(TRAIT_CLUMSY)) && prob(50)) to_chat(user, "You club yourself over the head.") user.Knockdown(60 * force) if(ishuman(user)) @@ -148,7 +148,7 @@ item_state = null slot_flags = SLOT_BELT w_class = WEIGHT_CLASS_SMALL - needs_permit = 0 + item_flags = NONE force = 0 on = FALSE diff --git a/code/game/objects/items/melee/transforming.dm b/code/game/objects/items/melee/transforming.dm index ca0c36f97e..86944813ed 100644 --- a/code/game/objects/items/melee/transforming.dm +++ b/code/game/objects/items/melee/transforming.dm @@ -72,6 +72,6 @@ to_chat(user, "[src] [active ? "is now active":"can now be concealed"].") /obj/item/melee/transforming/proc/clumsy_transform_effect(mob/living/user) - if(user.has_disability(DISABILITY_CLUMSY) && prob(50)) + if(user.has_trait(TRAIT_CLUMSY) && prob(50)) to_chat(user, "You accidentally cut yourself with [src], like a doofus!") user.take_bodypart_damage(5,5) diff --git a/code/game/objects/items/pneumaticCannon.dm b/code/game/objects/items/pneumaticCannon.dm index 7a1446ef39..4b6557fde1 100644 --- a/code/game/objects/items/pneumaticCannon.dm +++ b/code/game/objects/items/pneumaticCannon.dm @@ -147,7 +147,7 @@ if(tank && !tank.air_contents.remove(gasPerThrow * pressureSetting)) to_chat(user, "\The [src] lets out a weak hiss and doesn't react!") return - if(user.has_disability(DISABILITY_CLUMSY) && prob(75) && clumsyCheck && iscarbon(user)) + if(user.has_trait(TRAIT_CLUMSY) && prob(75) && clumsyCheck && iscarbon(user)) var/mob/living/carbon/C = user C.visible_message("[C] loses their grip on [src], causing it to go off!", "[src] slips out of your hands and goes off!") C.dropItemToGround(src, TRUE) diff --git a/code/game/objects/items/robot/robot_items.dm b/code/game/objects/items/robot/robot_items.dm index 0764e437ca..4851e111a8 100644 --- a/code/game/objects/items/robot/robot_items.dm +++ b/code/game/objects/items/robot/robot_items.dm @@ -280,14 +280,14 @@ var/cooldown = 0 /obj/item/device/harmalarm/emag_act(mob/user) - emagged = !emagged - if(emagged) + obj_flags ^= EMAGGED + if(obj_flags & EMAGGED) to_chat(user, "You short out the safeties on [src]!") else to_chat(user, "You reset the safeties on [src]!") /obj/item/device/harmalarm/attack_self(mob/user) - var/safety = !emagged + var/safety = !(obj_flags & EMAGGED) if(cooldown > world.time) to_chat(user, "The device is still recharging!") return diff --git a/code/game/objects/items/shields.dm b/code/game/objects/items/shields.dm index 2f33803c10..8baa73368e 100644 --- a/code/game/objects/items/shields.dm +++ b/code/game/objects/items/shields.dm @@ -78,7 +78,7 @@ return (active) /obj/item/shield/energy/attack_self(mob/living/carbon/human/user) - if(user.has_disability(DISABILITY_CLUMSY) && prob(50)) + if(user.has_trait(TRAIT_CLUMSY) && prob(50)) to_chat(user, "You beat yourself in the head with [src].") user.take_bodypart_damage(5) active = !active diff --git a/code/game/objects/items/storage/book.dm b/code/game/objects/items/storage/book.dm index ff7933b6da..ec17683fa5 100644 --- a/code/game/objects/items/storage/book.dm +++ b/code/game/objects/items/storage/book.dm @@ -94,7 +94,7 @@ GLOBAL_LIST_INIT(bibleitemstates, list("bible", "koran", "scrapbook", "bible", to_chat(user, "You don't have the dexterity to do this!") return - if (user.has_disability(DISABILITY_CLUMSY) && prob(50)) + if (user.has_trait(TRAIT_CLUMSY) && prob(50)) to_chat(user, "[src] slips out of your hand and hits your head.") user.take_bodypart_damage(10) user.Unconscious(400) diff --git a/code/game/objects/items/stunbaton.dm b/code/game/objects/items/stunbaton.dm index 951d897835..bda1714f7b 100644 --- a/code/game/objects/items/stunbaton.dm +++ b/code/game/objects/items/stunbaton.dm @@ -108,7 +108,7 @@ add_fingerprint(user) /obj/item/melee/baton/attack(mob/M, mob/living/carbon/human/user) - if(status && user.has_disability(DISABILITY_CLUMSY) && prob(50)) + if(status && user.has_trait(TRAIT_CLUMSY) && prob(50)) user.visible_message("[user] accidentally hits themself with [src]!", \ "You accidentally hit yourself with [src]!") user.Knockdown(stunforce*3) diff --git a/code/game/objects/items/tanks/tanks.dm b/code/game/objects/items/tanks/tanks.dm index ba04f55a3e..4b20b9695f 100644 --- a/code/game/objects/items/tanks/tanks.dm +++ b/code/game/objects/items/tanks/tanks.dm @@ -125,7 +125,7 @@ H.dropItemToGround(W) if(prob(50)) step(W, pick(GLOB.alldirs)) - H.status_flags |= DISFIGURED + H.add_trait(TRAIT_DISFIGURED, TRAIT_GENERIC) H.bleed_rate = 5 H.gib_animation() sleep(3) diff --git a/code/game/objects/items/teleprod.dm b/code/game/objects/items/teleprod.dm index 646c0aa4fb..b31797fb5c 100644 --- a/code/game/objects/items/teleprod.dm +++ b/code/game/objects/items/teleprod.dm @@ -8,7 +8,7 @@ /obj/item/melee/baton/cattleprod/teleprod/attack(mob/living/carbon/M, mob/living/carbon/user)//handles making things teleport when hit ..() - if(status && user.has_disability(DISABILITY_CLUMSY) && prob(50)) + if(status && user.has_trait(TRAIT_CLUMSY) && prob(50)) user.visible_message("[user] accidentally hits themself with [src]!", \ "You accidentally hit yourself with [src]!") if(do_teleport(user, get_turf(user), 50))//honk honk diff --git a/code/game/objects/items/theft_tools.dm b/code/game/objects/items/theft_tools.dm index 95d209585f..4875ef324c 100644 --- a/code/game/objects/items/theft_tools.dm +++ b/code/game/objects/items/theft_tools.dm @@ -203,6 +203,11 @@ toolspeed = 0.5 damtype = "fire" usesound = 'sound/weapons/bladeslice.ogg' + var/usesLeft + +/obj/item/scalpel/supermatter/Initialize() + . = ..() + usesLeft = rand(2, 4) /obj/item/hemostat/supermatter name = "supermatter extraction tongs" @@ -227,10 +232,7 @@ if(!sliver) return if(ismovableatom(O) && O != sliver) - Consume(O) - to_chat(usr, "\The [sliver] is dusted along with \the [O]!") - QDEL_NULL(sliver) - update_icon() + Consume(O, user) /obj/item/hemostat/supermatter/throw_impact(atom/hit_atom) // no instakill supermatter javelins if(sliver) @@ -249,11 +251,12 @@ else investigate_log("has consumed [AM].", "supermatter") qdel(AM) - user.visible_message("As [user] touches \the [AM] with \a [src], silence fills the room...",\ - "You touch \the [AM] with \the [src], and everything suddenly goes silent.\n\The [AM] flashes into dust, and soon as you can register this, you do as well.",\ + if (user) + user.visible_message("As [user] touches [AM] with \a [src], silence fills the room...",\ + "You touch [AM] with [src], and everything suddenly goes silent.\n[AM] and [sliver] flash into dust, and soon as you can register this, you do as well.",\ "Everything suddenly goes silent.") - radiation_pulse(user, 500, 2) + user.dust() + radiation_pulse(src, 500, 2) playsound(src, 'sound/effects/supermatter.ogg', 50, 1) - user.dust() QDEL_NULL(sliver) update_icon() diff --git a/code/game/objects/items/tools/screwdriver.dm b/code/game/objects/items/tools/screwdriver.dm index c3bbc18d10..945b738bd0 100644 --- a/code/game/objects/items/tools/screwdriver.dm +++ b/code/game/objects/items/tools/screwdriver.dm @@ -75,7 +75,7 @@ return ..() if(user.zone_selected != "eyes" && user.zone_selected != "head") return ..() - if(user.has_disability(DISABILITY_CLUMSY) && prob(50)) + if(user.has_trait(TRAIT_CLUMSY) && prob(50)) M = user return eyestab(M,user) diff --git a/code/game/objects/items/tools/weldingtool.dm b/code/game/objects/items/tools/weldingtool.dm index 289b4dc5e2..992c01fc2b 100644 --- a/code/game/objects/items/tools/weldingtool.dm +++ b/code/game/objects/items/tools/weldingtool.dm @@ -30,6 +30,7 @@ var/light_intensity = 2 //how powerful the emitted light is when used. var/burned_fuel_for = 0 //when fuel was last removed heat = 3800 + tool_behaviour = TOOL_WELDER toolspeed = 1 /obj/item/weldingtool/Initialize() diff --git a/code/game/objects/items/twohanded.dm b/code/game/objects/items/twohanded.dm index 14585e8194..b7013f5210 100644 --- a/code/game/objects/items/twohanded.dm +++ b/code/game/objects/items/twohanded.dm @@ -289,7 +289,7 @@ /obj/item/twohanded/dualsaber/suicide_act(mob/living/carbon/user) if(wielded) user.visible_message("[user] begins spinning way too fast! It looks like [user.p_theyre()] trying to commit suicide!") - + var/obj/item/bodypart/head/myhead = user.get_bodypart("head")//stole from chainsaw code var/obj/item/organ/brain/B = user.getorganslot(ORGAN_SLOT_BRAIN) B.vital = FALSE//this cant possibly be a good idea @@ -305,8 +305,8 @@ else user.visible_message("[user] panics and starts choking to death!") return OXYLOSS - - + + else user.visible_message("[user] begins beating [user.p_them()]self to death with \the [src]'s handle! It probably would've been cooler if [user.p_they()] turned it on first!") return BRUTELOSS @@ -343,7 +343,7 @@ unwield() return ..() - if(user.has_disability(DISABILITY_CLUMSY) && (wielded) && prob(40)) + if(user.has_trait(TRAIT_CLUMSY) && (wielded) && prob(40)) impale(user) return if((wielded) && prob(50)) @@ -459,7 +459,7 @@ force_wielded = 18 throwforce = 20 throw_speed = 4 - embedded_impact_pain_multiplier = 3 + embedding = list("embedded_impact_pain_multiplier" = 3) armour_penetration = 10 materials = list(MAT_METAL=1150, MAT_GLASS=2075) hitsound = 'sound/weapons/bladeslice.ogg' @@ -778,7 +778,7 @@ force_wielded = 20 //I have no idea how to balance throwforce = 22 throw_speed = 4 - embedded_impact_pain_multiplier = 3 + embedding = list("embedded_impact_pain_multiplier" = 3) armour_penetration = 15 //Enhanced armor piercing hitsound = 'sound/weapons/bladeslice.ogg' attack_verb = list("attacked", "poked", "jabbed", "torn", "gored") diff --git a/code/game/objects/items/weaponry.dm b/code/game/objects/items/weaponry.dm index 2656079557..02bd801acc 100644 --- a/code/game/objects/items/weaponry.dm +++ b/code/game/objects/items/weaponry.dm @@ -105,10 +105,10 @@ /obj/item/claymore/highlander/pickup(mob/living/user) to_chat(user, "The power of Scotland protects you! You are shielded from all stuns and knockdowns.") user.add_stun_absorption("highlander", INFINITY, 1, " is protected by the power of Scotland!", "The power of Scotland absorbs the stun!", " is protected by the power of Scotland!") - user.status_flags += IGNORESLOWDOWN + user.add_trait(TRAIT_IGNORESLOWDOWN, HIGHLANDER) /obj/item/claymore/highlander/dropped(mob/living/user) - user.status_flags -= IGNORESLOWDOWN + user.remove_trait(TRAIT_IGNORESLOWDOWN, HIGHLANDER) qdel(src) //If this ever happens, it's because you lost an arm /obj/item/claymore/highlander/examine(mob/user) @@ -267,10 +267,8 @@ force = 2 throwforce = 20 //This is never used on mobs since this has a 100% embed chance. throw_speed = 4 - embedded_pain_multiplier = 4 + embedding = list("embedded_pain_multiplier" = 4, "embed_chance" = 100, "embedded_fall_chance" = 0) w_class = WEIGHT_CLASS_SMALL - embed_chance = 100 - embedded_fall_chance = 0 //Hahaha! sharpness = IS_SHARP materials = list(MAT_METAL=500, MAT_GLASS=500) resistance_flags = FIRE_PROOF @@ -454,7 +452,7 @@ name = "liz o' nine tails" desc = "A whip fashioned from the severed tails of lizards." icon_state = "tailwhip" - needs_permit = 0 + item_flags = NONE /obj/item/melee/chainofcommand/tailwhip/kitty name = "cat o' nine tails" diff --git a/code/game/objects/obj_defense.dm b/code/game/objects/obj_defense.dm index c20c01cc42..c4c85bc6a5 100644 --- a/code/game/objects/obj_defense.dm +++ b/code/game/objects/obj_defense.dm @@ -27,7 +27,7 @@ return 0 var/armor_protection = 0 if(damage_flag) - armor_protection = armor[damage_flag] + armor_protection = armor.getRating(damage_flag) if(armor_protection) //Only apply weak-against-armor/hollowpoint effects if there actually IS armor. armor_protection = CLAMP(armor_protection - armour_penetration, 0, 100) return round(damage_amount * (100 - armor_protection)*0.01, 0.1) @@ -178,7 +178,7 @@ GLOBAL_DATUM_INIT(acid_overlay, /mutable_appearance, mutable_appearance('icons/e if(!(resistance_flags & ACID_PROOF)) for(var/armour_value in armor) if(armour_value != "acid" && armour_value != "fire") - armor[armour_value] = max(armor[armour_value] - round(sqrt(acid_level)*0.1), 0) + 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) @@ -222,13 +222,13 @@ GLOBAL_DATUM_INIT(acid_overlay, /mutable_appearance, mutable_appearance('icons/e /obj/proc/tesla_act(var/power) - being_shocked = TRUE + obj_flags |= BEING_SHOCKED var/power_bounced = power / 2 tesla_zap(src, 3, power_bounced) addtimer(CALLBACK(src, .proc/reset_shocked), 10) /obj/proc/reset_shocked() - being_shocked = FALSE + obj_flags &= ~BEING_SHOCKED //the obj is deconstructed into pieces, whether through careful disassembly or when destroyed. /obj/proc/deconstruct(disassembled = TRUE) diff --git a/code/game/objects/objs.dm b/code/game/objects/objs.dm index ce4b4d8d79..08df6e9481 100644 --- a/code/game/objects/objs.dm +++ b/code/game/objects/objs.dm @@ -1,57 +1,64 @@ + /obj var/crit_fail = FALSE animate_movement = 2 var/throwforce = 0 - var/in_use = 0 // If we have a user using us, this will be set on. We will check if the user has stopped using us, and thus stop updating and LAGGING EVERYTHING! + var/obj_flags = CAN_BE_HIT + var/set_obj_flags // ONLY FOR MAPPING: Sets flags from a string list, handled in Initialize. Usage: set_obj_flags = "EMAGGED;!CAN_BE_HIT" to set EMAGGED and clear CAN_BE_HIT. var/damtype = BRUTE var/force = 0 - var/list/armor + var/datum/armor/armor var/obj_integrity //defaults to max_integrity var/max_integrity = 500 var/integrity_failure = 0 //0 if we have no special broken behavior var/resistance_flags = NONE // INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ON_FIRE | UNACIDABLE | ACID_PROOF - var/can_be_hit = TRUE //can this be bludgeoned by items? var/acid_level = 0 //how much acid is on that obj - var/being_shocked = FALSE - - var/on_blueprints = FALSE //Are we visible on the station blueprints at roundstart? - var/force_blueprints = FALSE //forces the obj to be on the blueprints, regardless of when it was created. - var/persistence_replacement //have something WAY too amazing to live to the next round? Set a new path here. Overuse of this var will make me upset. - var/unique_rename = FALSE // can you customize the description/name of the thing? var/current_skin //Has the item been reskinned? var/list/unique_reskin //List of options to reskin. - var/dangerous_possession = FALSE //Admin possession yes/no /obj/vv_edit_var(vname, vval) switch(vname) - if("dangerous_possession") - return FALSE + if("obj_flags") + if ((obj_flags & DANGEROUS_POSSESSION) && !(vval & DANGEROUS_POSSESSION)) + return FALSE if("control_object") var/obj/O = vval - if(istype(O) && O.dangerous_possession) + if(istype(O) && (O.obj_flags & DANGEROUS_POSSESSION)) return FALSE ..() /obj/Initialize() . = ..() - if (!armor) - armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 0, acid = 0) + if (islist(armor)) + armor = getArmor(arglist(armor)) + else if (!armor) + armor = getArmor() + else if (!istype(armor, /datum/armor)) + stack_trace("Invalid type [armor.type] found in .armor during /obj Initialize()") + if(obj_integrity == null) obj_integrity = max_integrity - if(on_blueprints && isturf(loc)) + if (set_obj_flags) + var/flagslist = splittext(set_obj_flags,";") + var/list/string_to_objflag = GLOB.bitfields["obj_flags"] + for (var/flag in flagslist) + if (findtext(flag,"!",1,2)) + flag = copytext(flag,1-(length(flag))) // Get all but the initial ! + obj_flags &= ~string_to_objflag[flag] + else + obj_flags |= string_to_objflag[flag] + if((obj_flags & ON_BLUEPRINTS) && isturf(loc)) var/turf/T = loc - if(force_blueprints) - T.add_blueprints(src) - else - T.add_blueprints_preround(src) + T.add_blueprints_preround(src) + /obj/Destroy(force=FALSE) if(!ismachinery(src)) @@ -98,7 +105,7 @@ return null /obj/proc/updateUsrDialog() - if(in_use) + if(obj_flags & IN_USE) var/is_in_use = 0 var/list/nearby = viewers(1, src) for(var/mob/M in nearby) @@ -120,11 +127,14 @@ if(H.dna.check_mutation(TK)) is_in_use = 1 src.attack_hand(usr) - in_use = is_in_use + if (is_in_use) + obj_flags |= IN_USE + else + obj_flags &= ~IN_USE /obj/proc/updateDialog() // Check that people are actually using the machine. If not, don't update anymore. - if(in_use) + if(obj_flags & IN_USE) var/list/nearby = viewers(1, src) var/is_in_use = 0 for(var/mob/M in nearby) @@ -134,7 +144,7 @@ var/ai_in_use = AutoUpdateAI(src) if(!ai_in_use && !is_in_use) - in_use = 0 + obj_flags &= ~IN_USE /obj/attack_ghost(mob/user) @@ -162,7 +172,7 @@ unset_machine() src.machine = O if(istype(O)) - O.in_use = 1 + O.obj_flags |= IN_USE /obj/item/proc/updateSelfDialog() var/mob/M = src.loc @@ -205,10 +215,11 @@ . = ..() .["Delete all of type"] = "?_src_=vars;[HrefToken()];delall=[REF(src)]" .["Osay"] = "?_src_=vars;[HrefToken()];osay[REF(src)]" + .["Modify armor values"] = "?_src_=vars;[HrefToken()];modarmor=[REF(src)]" /obj/examine(mob/user) ..() - if(unique_rename) + if(obj_flags & UNIQUE_RENAME) to_chat(user, "Use a pen on it to rename it or change its description.") if(unique_reskin && !current_skin) to_chat(user, "Alt-click it to reskin it.") diff --git a/code/game/objects/structures/barsigns.dm b/code/game/objects/structures/barsigns.dm index b3746b7308..c9c9e8c931 100644 --- a/code/game/objects/structures/barsigns.dm +++ b/code/game/objects/structures/barsigns.dm @@ -83,7 +83,7 @@ to_chat(user, "You close the maintenance panel.") if(!broken && !emagged) set_sign(pick(barsigns)) - else if(emagged) + else if(obj_flags & EMAGGED) set_sign(new /datum/barsign/hiddensigns/syndibarsign) else set_sign(new /datum/barsign/hiddensigns/empbarsign) @@ -91,7 +91,7 @@ else if(istype(I, /obj/item/stack/cable_coil) && panel_open) var/obj/item/stack/cable_coil/C = I - if(emagged) //Emagged, not broken by EMP + if(obj_flags & EMAGGED) //Emagged, not broken by EMP to_chat(user, "Sign has been damaged beyond repair!") return else if(!broken) @@ -118,7 +118,7 @@ if(broken || emagged) to_chat(user, "Nothing interesting happens!") return - emagged = TRUE + obj_flags |= EMAGGED to_chat(user, "You emag the barsign. Takeover in progress...") sleep(10 SECONDS) set_sign(new /datum/barsign/hiddensigns/syndibarsign) diff --git a/code/game/objects/structures/bedsheet_bin.dm b/code/game/objects/structures/bedsheet_bin.dm index e97aedaf98..e59780a54a 100644 --- a/code/game/objects/structures/bedsheet_bin.dm +++ b/code/game/objects/structures/bedsheet_bin.dm @@ -223,6 +223,14 @@ LINEN BINS item_color = "ian" dream_messages = list("a dog", "a corgi", "woof", "bark", "arf") +/obj/item/bedsheet/cosmos + name = "cosmic space bedsheet" + desc = "Made from the dreams of those who wonder at the stars." + icon_state = "sheetcosmos" + item_color = "cosmos" + dream_messages = list("the infinite cosmos", "Hans Zimmer music", "a flight through space", "the galaxy", "being fabulous", "shooting stars") + light_power = 2 + light_range = 1.4 /obj/item/bedsheet/random icon_state = "random_bedsheet" diff --git a/code/game/objects/structures/headpike.dm b/code/game/objects/structures/headpike.dm new file mode 100644 index 0000000000..eafae96b8e --- /dev/null +++ b/code/game/objects/structures/headpike.dm @@ -0,0 +1,47 @@ +/obj/structure/headpike + name = "spooky head on a spear" + desc = "When you really want to send a message." + icon = 'icons/obj/structures.dmi' + icon_state = "headpike" + density = FALSE + anchored = TRUE + var/bonespear = FALSE + var/obj/item/twohanded/spear/spear + var/obj/item/bodypart/head/victim + +/obj/structure/headpike/bone //for bone spears + icon_state = "headpike-bone" + bonespear = TRUE + + +/obj/structure/headpike/CheckParts(list/parts_list) + ..() + victim = locate(/obj/item/bodypart/head) in parts_list + name = "[victim.name] on a spear" + update_icon() + if(bonespear) + spear = locate(/obj/item/twohanded/bonespear) in parts_list + else + spear = locate(/obj/item/twohanded/spear) in parts_list + +/obj/structure/headpike/Initialize() + . = ..() + pixel_x = rand(-8, 8) + +/obj/structure/headpike/update_icon() + ..() + var/obj/item/bodypart/head/H = locate() in contents + var/mutable_appearance/MA = new() + if(H) + MA.copy_overlays(H) + MA.pixel_y = 12 + add_overlay(H) + +/obj/structure/headpike/attack_hand(mob/user) + ..() + to_chat(user, "You take down [src].") + victim.forceMove(drop_location()) + victim = null + spear.forceMove(drop_location()) + spear = null + qdel(src) \ No newline at end of file diff --git a/code/game/objects/structures/petrified_statue.dm b/code/game/objects/structures/petrified_statue.dm index 02b32c9f80..815dd9de6d 100644 --- a/code/game/objects/structures/petrified_statue.dm +++ b/code/game/objects/structures/petrified_statue.dm @@ -17,7 +17,7 @@ L.buckled.unbuckle_mob(L,force=1) L.visible_message("[L]'s skin rapidly turns to marble!", "Your body freezes up! Can't... move... can't... think...") L.forceMove(src) - L.add_disability(DISABILITY_MUTE, STATUE_MUTE) + L.add_trait(TRAIT_MUTE, STATUE_MUTE) L.faction += "mimic" //Stops mimics from instaqdeling people in statues L.status_flags |= GODMODE obj_integrity = L.health + 100 //stoning damaged mobs will result in easier to shatter statues @@ -59,7 +59,7 @@ if(petrified_mob) petrified_mob.status_flags &= ~GODMODE petrified_mob.forceMove(loc) - petrified_mob.remove_disability(DISABILITY_MUTE, STATUE_MUTE) + petrified_mob.remove_trait(TRAIT_MUTE, STATUE_MUTE) petrified_mob.take_overall_damage((petrified_mob.health - obj_integrity + 100)) //any new damage the statue incurred is transfered to the mob petrified_mob.faction -= "mimic" petrified_mob = null diff --git a/code/game/objects/structures/signs/_signs.dm b/code/game/objects/structures/signs/_signs.dm new file mode 100644 index 0000000000..382858dd53 --- /dev/null +++ b/code/game/objects/structures/signs/_signs.dm @@ -0,0 +1,123 @@ +/obj/structure/sign + icon = 'icons/obj/decals.dmi' + anchored = TRUE + opacity = 0 + density = FALSE + layer = SIGN_LAYER + max_integrity = 100 + armor = list(melee = 50, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 50, acid = 50) + var/buildable_sign = 1 //unwrenchable and modifiable + +/obj/structure/sign/ComponentInitialize() + . = ..() + AddComponent(/datum/component/rad_insulation, RAD_NO_INSULATION) // Since this is on a wall if it becomes irradiated it will smuggle the radiation past the wall + +/obj/structure/sign/basic + name = "blank sign" + desc = "How can signs be real if our eyes aren't real?" + icon_state = "backing" + +/obj/structure/sign/play_attack_sound(damage_amount, damage_type = BRUTE, damage_flag = 0) + switch(damage_type) + if(BRUTE) + if(damage_amount) + playsound(src.loc, 'sound/weapons/slash.ogg', 80, 1) + else + playsound(loc, 'sound/weapons/tap.ogg', 50, 1) + if(BURN) + playsound(loc, 'sound/items/welder.ogg', 80, 1) + +/obj/structure/sign/attackby(obj/item/O, mob/user, params) + if(istype(O, /obj/item/wrench) && buildable_sign) + user.visible_message("[user] starts removing [src]...", \ + "You start unfastening [src].") + playsound(src, O.usesound, 50, 1) + if(!do_after(user, 30*O.toolspeed, target = src)) + return + playsound(src, 'sound/items/deconstruct.ogg', 50, 1) + user.visible_message("[user] unfastens [src].", \ + "You unfasten [src].") + var/obj/item/sign_backing/SB = new (get_turf(user)) + SB.icon_state = icon_state + SB.sign_path = type + qdel(src) + else if(istype(O, /obj/item/pen) && buildable_sign) + var/list/sign_types = list("Secure Area", "Biohazard", "High Voltage", "Radiation", "Hard Vacuum Ahead", "Disposal: Leads To Space", "Danger: Fire", "No Smoking", "Medbay", "Science", "Chemistry", \ + "Hydroponics", "Xenobiology") + var/obj/structure/sign/sign_type + switch(input(user, "Select a sign type.", "Sign Customization") as null|anything in sign_types) + if("Blank") + sign_type = /obj/structure/sign/basic + if("Secure Area") + sign_type = /obj/structure/sign/warning/securearea + if("Biohazard") + sign_type = /obj/structure/sign/warning/biohazard + if("High Voltage") + sign_type = /obj/structure/sign/warning/electricshock + if("Radiation") + sign_type = /obj/structure/sign/warning/radiation + if("Hard Vacuum Ahead") + sign_type = /obj/structure/sign/warning/vacuum + if("Disposal: Leads To Space") + sign_type = /obj/structure/sign/warning/deathsposal + if("Danger: Fire") + sign_type = /obj/structure/sign/warning/fire + if("No Smoking") + sign_type = /obj/structure/sign/warning/nosmoking/circle + if("Medbay") + sign_type = /obj/structure/sign/departments/medbay/alt + if("Science") + sign_type = /obj/structure/sign/departments/science + if("Chemistry") + sign_type = /obj/structure/sign/departments/chemistry + if("Hydroponics") + sign_type = /obj/structure/sign/departments/botany + if("Xenobiology") + sign_type = /obj/structure/sign/departments/xenobio + + //Make sure user is adjacent still + if(!Adjacent(user)) + return + + if(!sign_type) + return + + //It's import to clone the pixel layout information + //Otherwise signs revert to being on the turf and + //move jarringly + var/obj/structure/sign/newsign = new sign_type(get_turf(src)) + newsign.pixel_x = pixel_x + newsign.pixel_y = pixel_y + qdel(src) + else + return ..() + +/obj/item/sign_backing + name = "sign backing" + desc = "A sign with adhesive backing." + icon = 'icons/obj/decals.dmi' + icon_state = "backing" + w_class = WEIGHT_CLASS_NORMAL + resistance_flags = FLAMMABLE + var/sign_path = /obj/structure/sign/basic //the type of sign that will be created when placed on a turf + +/obj/item/sign_backing/afterattack(atom/target, mob/user, proximity) + if(isturf(target) && proximity) + var/turf/T = target + user.visible_message("[user] fastens [src] to [T].", \ + "You attach the sign to [T].") + playsound(T, 'sound/items/deconstruct.ogg', 50, 1) + new sign_path(T) + qdel(src) + else + return ..() + +/obj/structure/sign/nanotrasen + name = "\improper Nanotrasen Logo" + desc = "A sign with the Nanotrasen Logo on it. Glory to Nanotrasen!" + icon_state = "nanotrasen" + +/obj/structure/sign/logo + name = "nanotrasen logo" + desc = "The Nanotrasen corporate logo." + icon_state = "nanotrasen_sign1" diff --git a/code/game/objects/structures/signs/signs_departments.dm b/code/game/objects/structures/signs/signs_departments.dm new file mode 100644 index 0000000000..12932bbab6 --- /dev/null +++ b/code/game/objects/structures/signs/signs_departments.dm @@ -0,0 +1,69 @@ +//departmental signs + +/obj/structure/sign/departments/examroom + name = "\improper EXAM ROOM" + desc = "A guidance sign which reads 'EXAM ROOM'." + icon_state = "examroom" + +/obj/structure/sign/departments/science //These 3 have multiple types, just var-edit the icon_state to whatever one you want on the map + name = "\improper SCIENCE" + desc = "A sign labelling an area where research and science is performed." + icon_state = "science1" + +/obj/structure/sign/departments/chemistry + name = "\improper CHEMISTRY" + desc = "A sign labelling an area containing chemical equipment." + icon_state = "chemistry1" + +/obj/structure/sign/departments/botany + name = "\improper HYDROPONICS" + desc = "A sign labelling an area as a place where plants are grown." + icon_state = "hydro1" + +/obj/structure/sign/departments/xenobio + name = "\improper XENOBIOLOGY" + desc = "A sign labelling an area as a place where xenobiological entities are researched." + icon_state = "xenobio" + +/obj/structure/sign/departments/evac + name = "\improper EVACUATION" + desc = "A sign labelling an area where evacuation procedures take place." + icon_state = "evac" + +/obj/structure/sign/departments/custodian + name = "\improper CUSTODIAN" + desc = "A sign labelling an area where the custodian works." + icon_state = "custodian" + +/obj/structure/sign/departments/engineering + name = "\improper ENGINEERING" + desc = "A sign labelling an area where engineers work." + icon_state = "engine" + +/obj/structure/sign/departments/cargo + name = "\improper CARGO" + desc = "A sign labelling an area where cargo ships dock." + icon_state = "cargo" + +/obj/structure/sign/departments/security + name = "\improper SECURITY" + desc = "A sign labelling an area where the law is law." + icon_state = "security" + +/obj/structure/sign/departments/holy + name = "\improper HOLY" + desc = "A sign labelling a religious area." + icon_state = "holy" + +/obj/structure/sign/departments/restroom + name = "\improper RESTROOM" + desc = "A sign labelling a restroom." + icon_state = "restroom" + +/obj/structure/sign/departments/medbay + name = "\improper MEDBAY" + desc = "The Intergalactic symbol of Medical institutions. You'll probably get help here." + icon_state = "bluecross" + +/obj/structure/sign/departments/medbay/alt + icon_state = "bluecross2" diff --git a/code/game/objects/structures/signs/signs_maps.dm b/code/game/objects/structures/signs/signs_maps.dm new file mode 100644 index 0000000000..8468516502 --- /dev/null +++ b/code/game/objects/structures/signs/signs_maps.dm @@ -0,0 +1,47 @@ +//map and direction signs + +/obj/structure/sign/map + name = "station map" + desc = "A framed picture of the station." + max_integrity = 500 + +/obj/structure/sign/map/left + icon_state = "map-left" + +/obj/structure/sign/map/right + icon_state = "map-right" + +/obj/structure/sign/directions/science + name = "science department" + desc = "A direction sign, pointing out which way the Science department is." + icon_state = "direction_sci" + +/obj/structure/sign/directions/engineering + name = "engineering department" + desc = "A direction sign, pointing out which way the Engineering department is." + icon_state = "direction_eng" + +/obj/structure/sign/directions/security + name = "security department" + desc = "A direction sign, pointing out which way the Security department is." + icon_state = "direction_sec" + +/obj/structure/sign/directions/medical + name = "medical bay" + desc = "A direction sign, pointing out which way the Medical Bay is." + icon_state = "direction_med" + +/obj/structure/sign/directions/evac + name = "escape arm" + desc = "A direction sign, pointing out which way the escape shuttle dock is." + icon_state = "direction_evac" + +/obj/structure/sign/directions/supply + name = "cargo bay" + desc = "A direction sign, pointing out which way the Cargo Bay is." + icon_state = "direction_supply" + +/obj/structure/sign/directions/command + name = "command department" + desc = "A direction sign, pointing out which way the Command department is." + icon_state = "direction_bridge" diff --git a/code/game/objects/structures/signs/signs_plaques.dm b/code/game/objects/structures/signs/signs_plaques.dm new file mode 100644 index 0000000000..b397bbf531 --- /dev/null +++ b/code/game/objects/structures/signs/signs_plaques.dm @@ -0,0 +1,43 @@ +//plaques and memorials + +/obj/structure/sign/plaques + name = "plaque" + desc = "A plaque commemorating an event." + icon_state = "atmosplaque" + +/obj/structure/sign/plaques/atmos + name = "\improper FEA Atmospherics Division plaque" + desc = "This plaque commemorates the fall of the Atmos FEA division. For all the charred, dizzy, and brittle men who have died in its hands." + +/obj/structure/sign/plaques/thunderdome + name = "Thunderdome Plaque" + desc = "This plaque commemorates those who have fallen in glorious combat. For all the charred, dizzy, and beaten men who have died in its hands." + +/obj/structure/sign/plaques/golden + name = "The Most Robust Men Award for Robustness" + desc = "To be Robust is not an action or a way of life, but a mental state. Only those with the force of Will strong enough to act during a crisis, saving friend from foe, are truly Robust. Stay Robust my friends." + icon_state = "goldenplaque" + +/obj/structure/sign/plaques/golden/captain + name = "The Most Robust Captain Award for Robustness" + +/obj/structure/sign/plaques/kiddie + name = "\improper AI developers plaque" + desc = "Next to the extremely long list of names and job titles, there is a drawing of a little child. The child appears to be retarded. Beneath the image, someone has scratched the word \"PACKETS\"." + icon_state = "kiddieplaque" + +/obj/structure/sign/plaques/kiddie/badger + name = "\improper Remembrance Plaque" + desc = "A plaque commemorating the fallen, may they rest in peace, forever asleep amongst the stars. Someone has drawn a picture of a crying badger at the bottom." + +/obj/structure/sign/plaques/kiddie/library + name = "Library Rules Sign" + desc = "A long list of rules to be followed when in the library, extolling the virtues of being quiet at all times and threatening those who would dare eat hot food inside." + +/obj/structure/sign/plaques/kiddie/perfect_man + name = "\improper 'Perfect Man' sign" + desc = "A guide to the exhibit, explaining how recent developments in mindshield implant and cloning technologies by Nanotrasen Corporation have led to the development and the effective immortality of the 'perfect man', the loyal Nanotrasen Employee." + +/obj/structure/sign/plaques/kiddie/perfect_drone + name = "\improper 'Perfect Drone' sign" + desc = "A guide to the drone shell dispenser, detailing the constructive and destructive applications of modern repair drones, as well as the development of the incorruptible cyborg servants of tomorrow, available today." diff --git a/code/game/objects/structures/signs/signs_warning.dm b/code/game/objects/structures/signs/signs_warning.dm new file mode 100644 index 0000000000..f735ed7bc9 --- /dev/null +++ b/code/game/objects/structures/signs/signs_warning.dm @@ -0,0 +1,75 @@ +/obj/structure/sign/warning + name = "\improper WARNING" + desc = "A warning sign." + icon_state = "securearea" + +/obj/structure/sign/warning/securearea + name = "\improper SECURE AREA" + desc = "A warning sign which reads 'SECURE AREA'." + +/obj/structure/sign/warning/docking + name = "\improper KEEP CLEAR: DOCKING AREA" + desc = "A warning sign which reads 'KEEP CLEAR OF DOCKING AREA'." + +/obj/structure/sign/warning/biohazard + name = "\improper BIOHAZARD" + desc = "A warning sign which reads 'BIOHAZARD'." + icon_state = "bio" + +/obj/structure/sign/warning/electricshock + name = "\improper HIGH VOLTAGE" + desc = "A warning sign which reads 'HIGH VOLTAGE'." + icon_state = "shock" + +/obj/structure/sign/warning/vacuum + name = "\improper HARD VACUUM AHEAD" + desc = "A warning sign which reads 'HARD VACUUM AHEAD'." + icon_state = "space" + +/obj/structure/sign/warning/vacuum/external + name = "\improper EXTERNAL AIRLOCK" + desc = "A warning sign which reads 'EXTERNAL AIRLOCK'." + layer = MOB_LAYER + +/obj/structure/sign/warning/deathsposal + name = "\improper DISPOSAL: LEADS TO SPACE" + desc = "A warning sign which reads 'DISPOSAL: LEADS TO SPACE'." + icon_state = "deathsposal" + +/obj/structure/sign/warning/pods + name = "\improper ESCAPE PODS" + desc = "A warning sign which reads 'ESCAPE PODS'." + icon_state = "pods" + +/obj/structure/sign/warning/fire + name = "\improper DANGER: FIRE" + desc = "A warning sign which reads 'DANGER: FIRE'." + icon_state = "fire" + +/obj/structure/sign/warning/nosmoking + name = "\improper NO SMOKING" + desc = "A warning sign which reads 'NO SMOKING'." + icon_state = "nosmoking2" + +/obj/structure/sign/warning/nosmoking/circle + icon_state = "nosmoking" + +/obj/structure/sign/warning/radiation + name = "\improper HAZARDOUS RADIATION" + desc = "A warning sign alerting the user of potential radiation hazards." + icon_state = "radiation" + +/obj/structure/sign/warning/radiation/rad_area + name = "\improper RADIOACTIVE AREA" + desc = "A warning sign which reads 'RADIOACTIVE AREA'." + +/obj/structure/sign/warning/xeno_mining + name = "\improper DANGEROUS ALIEN LIFE" + desc = "A sign that warns would-be travellers of hostile alien life in the vicinity." + icon = 'icons/obj/mining.dmi' + icon_state = "xeno_warning" + +/obj/structure/sign/warning/enginesafety + name = "\improper ENGINEERING SAFETY" + desc = "A sign detailing the various safety protocols when working on-site to ensure a safe shift." + icon_state = "safety" diff --git a/code/game/turfs/simulated/floor/plasteel_floor.dm b/code/game/turfs/simulated/floor/plasteel_floor.dm index 6197e67848..06a257686b 100644 --- a/code/game/turfs/simulated/floor/plasteel_floor.dm +++ b/code/game/turfs/simulated/floor/plasteel_floor.dm @@ -340,6 +340,8 @@ icon_state = "vault" /turf/open/floor/plasteel/vault/corner icon_state = "vaultcorner" +/turf/open/floor/plasteel/vault/airless + initial_gas_mix = "TEMP=2.7" /turf/open/floor/plasteel/vault/telecomms initial_gas_mix = "n2=100;TEMP=80" /turf/open/floor/plasteel/vault/telecomms/mainframe diff --git a/code/game/turfs/simulated/lava.dm b/code/game/turfs/simulated/lava.dm index 0e3930aaf2..a40203beba 100644 --- a/code/game/turfs/simulated/lava.dm +++ b/code/game/turfs/simulated/lava.dm @@ -100,8 +100,8 @@ O.resistance_flags |= FLAMMABLE //Even fireproof things burn up in lava if(O.resistance_flags & FIRE_PROOF) O.resistance_flags &= ~FIRE_PROOF - if(O.armor["fire"] > 50) //obj with 100% fire armor still get slowly burned away. - O.armor["fire"] = 50 + if(O.armor.fire > 50) //obj with 100% fire armor still get slowly burned away. + O.armor = O.armor.setRating(fire = 50) O.fire_act(10000, 1000) else if (isliving(thing)) diff --git a/code/game/turfs/simulated/wall/mineral_walls.dm b/code/game/turfs/simulated/wall/mineral_walls.dm index c99da926b7..dc474d449d 100644 --- a/code/game/turfs/simulated/wall/mineral_walls.dm +++ b/code/game/turfs/simulated/wall/mineral_walls.dm @@ -250,7 +250,7 @@ /turf/closed/wall/mineral/plastitanium/overspace icon_state = "map-overspace" fixed_underlay = list("space"=1) - + /turf/closed/wall/mineral/plastitanium/explosive/ex_act(severity) var/datum/explosion/acted_explosion = null for(var/datum/explosion/E in GLOB.explosions) diff --git a/code/game/world.dm b/code/game/world.dm index 8eca2affc2..dde599db78 100644 --- a/code/game/world.dm +++ b/code/game/world.dm @@ -40,13 +40,27 @@ GLOBAL_PROTECT(security_mode) GLOB.restart_counter = text2num(trim(file2text(RESTART_COUNTER_PATH))) fdel(RESTART_COUNTER_PATH) - if("no-init" in params) + if(NO_INIT_PARAMETER in params) return cit_initialize() Master.Initialize(10, FALSE) + if(TEST_RUN_PARAMETER in params) + HandleTestRun() + +/world/proc/HandleTestRun() + //trigger things to run the whole process + Master.sleep_offline_after_initializations = FALSE + SSticker.start_immediately = TRUE + CONFIG_SET(number/round_end_countdown, 0) +#ifdef UNIT_TESTS + SSticker.OnRoundstart(CALLBACK(GLOBAL_PROC, /proc/RunUnitTests)) +#else + SSticker.force_ending = TRUE +#endif + /world/proc/SetupExternalRSC() #if (PRELOAD_RSC == 0) GLOB.external_rsc_urls = world.file2list("[global.config.directory]/external_rsc_urls.txt","\n") @@ -59,11 +73,15 @@ GLOBAL_PROTECT(security_mode) #endif /world/proc/SetupLogs() - GLOB.log_directory = "data/logs/[time2text(world.realtime, "YYYY/MM/DD")]/round-" - if(GLOB.round_id) - GLOB.log_directory += "[GLOB.round_id]" + var/override_dir = params[OVERRIDE_LOG_DIRECTORY_PARAMETER] + if(!override_dir) + GLOB.log_directory = "data/logs/[time2text(world.realtime, "YYYY/MM/DD")]/round-" + if(GLOB.round_id) + GLOB.log_directory += "[GLOB.round_id]" + else + GLOB.log_directory += "[replacetext(time_stamp(), ":", ".")]" else - GLOB.log_directory += "[replacetext(time_stamp(), ":", ".")]" + GLOB.log_directory = "data/logs/[override_dir]" GLOB.world_game_log = file("[GLOB.log_directory]/game.log") GLOB.world_attack_log = file("[GLOB.log_directory]/attack.log") GLOB.world_runtime_log = file("[GLOB.log_directory]/runtime.log") @@ -72,6 +90,10 @@ GLOBAL_PROTECT(security_mode) GLOB.world_pda_log = file("[GLOB.log_directory]/pda.log") GLOB.sql_error_log = file("[GLOB.log_directory]/sql.log") GLOB.manifest_log = file("[GLOB.log_directory]/manifest.log") +#ifdef UNIT_TESTS + GLOB.test_log = file("[GLOB.log_directory]/tests.log") + WRITE_FILE(GLOB.test_log, "\n\nStarting up round ID [GLOB.round_id]. [time_stamp()]\n---------------------") +#endif WRITE_FILE(GLOB.world_game_log, "\n\nStarting up round ID [GLOB.round_id]. [time_stamp()]\n---------------------") WRITE_FILE(GLOB.world_attack_log, "\n\nStarting up round ID [GLOB.round_id]. [time_stamp()]\n---------------------") WRITE_FILE(GLOB.world_runtime_log, "\n\nStarting up round ID [GLOB.round_id]. [time_stamp()]\n---------------------") @@ -135,6 +157,27 @@ GLOBAL_PROTECT(security_mode) for(var/client/C in GLOB.clients) C.AnnouncePR(final_composed) +/world/proc/FinishTestRun() + set waitfor = FALSE + var/list/fail_reasons + if(GLOB) + if(GLOB.total_runtimes != 0) + fail_reasons = list("Total runtimes: [GLOB.total_runtimes]") +#ifdef UNIT_TESTS + if(GLOB.failed_any_test) + LAZYADD(fail_reasons, "Unit Tests failed!") +#endif + if(!GLOB.log_directory) + LAZYADD(fail_reasons, "Missing GLOB.log_directory!") + else + fail_reasons = list("Missing GLOB!") + if(!fail_reasons) + text2file("Success!", "[GLOB.log_directory]/clean_run.lk") + else + log_world("Test run failed!\n[fail_reasons.Join("\n")]") + sleep(0) //yes, 0, this'll let Reboot finish and prevent byond memes + qdel(src) //shut it down + /world/Reboot(reason = 0, fast_track = FALSE) SERVER_TOOLS_ON_REBOOT if (reason || fast_track) //special reboot, do none of the normal stuff @@ -146,6 +189,10 @@ GLOBAL_PROTECT(security_mode) to_chat(world, "Rebooting world...") Master.Shutdown() //run SS shutdowns + if(TEST_RUN_PARAMETER in params) + FinishTestRun() + return + if(SERVER_TOOLS_PRESENT) var/do_hard_reboot // check the hard reboot counter @@ -225,3 +272,8 @@ GLOBAL_PROTECT(security_mode) hub_password = "kMZy3U5jJHSiBQjr" else hub_password = "SORRYNOPASSWORD" + +/world/proc/incrementMaxZ() + maxz++ + SSmobs.MaxZChanged() + SSidlenpcpool.MaxZChanged() diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm index 7f30ef9fe3..fc4e04f97e 100644 --- a/code/modules/admin/admin.dm +++ b/code/modules/admin/admin.dm @@ -228,13 +228,13 @@ dat+="
Channel Name: [src.admincaster_feed_channel.channel_name]
" dat+="Channel Author: [src.admin_signature]
" dat+="Will Accept Public Feeds: [(src.admincaster_feed_channel.locked) ? ("NO") : ("YES")]

" - dat+="
Submit

Cancel
" + dat+="
Submit

Cancel
" if(3) dat+="Creating new Feed Message..." dat+="
Receiving Channel: [src.admincaster_feed_channel.channel_name]
" //MARK dat+="Message Author: [src.admin_signature]
" dat+="Message Body: [src.admincaster_feed_message.returnBody(-1)]
" - dat+="
Submit

Cancel
" + dat+="
Submit

Cancel
" if(4) dat+="Feed story successfully submitted to [src.admincaster_feed_channel.channel_name].

" dat+="
Return
" @@ -315,7 +315,7 @@ else for(var/datum/newscaster/feed_message/MESSAGE in src.admincaster_feed_channel.messages) dat+="-[MESSAGE.returnBody(-1)]
\[Story by [MESSAGE.returnAuthor(-1)]\]
" - dat+="[(MESSAGE.bodyCensor) ? ("Undo story censorship") : ("Censor story")] - [(MESSAGE.authorCensor) ? ("Undo Author Censorship") : ("Censor message Author")]
" + dat+="[(MESSAGE.bodyCensor) ? ("Undo story censorship") : ("Censor story")] - [(MESSAGE.authorCensor) ? ("Undo Author Censorship") : ("Censor message Author")]
" dat+="[MESSAGE.comments.len] comment[MESSAGE.comments.len > 1 ? "s" : ""]: [MESSAGE.locked ? "Unlock" : "Lock"]
" for(var/datum/newscaster/feed_comment/comment in MESSAGE.comments) dat+="[comment.body] X
[comment.author] [comment.time_stamp]
" diff --git a/code/modules/admin/verbs/adminsay.dm b/code/modules/admin/verbs/adminsay.dm index a24d4165a4..f74fcbb017 100644 --- a/code/modules/admin/verbs/adminsay.dm +++ b/code/modules/admin/verbs/adminsay.dm @@ -20,3 +20,6 @@ SSblackbox.record_feedback("tally", "admin_verb", 1, "Asay") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! +/client/proc/get_admin_say() + var/msg = input(src, null, "asay \"text\"") as text + cmd_admin_say(msg) diff --git a/code/modules/admin/verbs/massmodvar.dm b/code/modules/admin/verbs/massmodvar.dm index db1150fb72..75050b5e62 100644 --- a/code/modules/admin/verbs/massmodvar.dm +++ b/code/modules/admin/verbs/massmodvar.dm @@ -53,7 +53,7 @@ if (prompt != "Continue") return - default = vv_get_class(var_value) + default = vv_get_class(variable, var_value) if(isnull(default)) to_chat(src, "Unable to determine variable type.") @@ -263,4 +263,3 @@ if (typecache[thing.type]) . += thing CHECK_TICK - diff --git a/code/modules/admin/verbs/modifyvariables.dm b/code/modules/admin/verbs/modifyvariables.dm index da448b8eca..4869319cfa 100644 --- a/code/modules/admin/verbs/modifyvariables.dm +++ b/code/modules/admin/verbs/modifyvariables.dm @@ -8,12 +8,15 @@ GLOBAL_LIST_INIT(VVpixelmovement, list("step_x", "step_y", "bound_height", "boun GLOBAL_PROTECT(VVpixelmovement) -/client/proc/vv_get_class(var/var_value) +/client/proc/vv_get_class(var/var_name, var/var_value) if(isnull(var_value)) . = VV_NULL else if (isnum(var_value)) - . = VV_NUM + if (var_name in GLOB.bitfields) + . = VV_BITFIELD + else + . = VV_NUM else if (istext(var_value)) if (findtext(var_value, "\n")) @@ -52,7 +55,7 @@ GLOBAL_PROTECT(VVpixelmovement) else . = VV_NULL -/client/proc/vv_get_value(class, default_class, current_value, list/restricted_classes, list/extra_classes, list/classes) +/client/proc/vv_get_value(class, default_class, current_value, list/restricted_classes, list/extra_classes, list/classes, var_name) . = list("class" = class, "value" = null) if (!class) if (!classes) @@ -109,6 +112,11 @@ GLOBAL_PROTECT(VVpixelmovement) .["class"] = null return + if (VV_BITFIELD) + .["value"] = input_bitfield(usr, "Editing bitfield: [var_name]", var_name, current_value) + if (.["value"] == null) + .["class"] = null + return if (VV_ATOM_TYPE) .["value"] = pick_closest_path(FALSE) @@ -436,7 +444,7 @@ GLOBAL_PROTECT(VVpixelmovement) else variable = L[index] - default = vv_get_class(variable) + default = vv_get_class(objectvar, variable) to_chat(src, "Variable appears to be [uppertext(default)].") @@ -548,6 +556,10 @@ GLOBAL_PROTECT(VVpixelmovement) if(variable in GLOB.VVicon_edit_lock) if(!check_rights(R_FUN|R_DEBUG)) return + if(istype(O, /datum/armor)) + var/prompt = alert(src, "Editing this var changes this value on potentially thousands of items that share the same combination of armor values. If you want to edit the armor of just one item, use the \"Modify armor values\" dropdown item", "DANGER", "ABORT ", "Continue", " ABORT") + if (prompt != "Continue") + return if(variable in GLOB.VVpixelmovement) if(!check_rights(R_DEBUG)) return @@ -556,7 +568,7 @@ GLOBAL_PROTECT(VVpixelmovement) return - var/default = vv_get_class(var_value) + var/default = vv_get_class(variable, var_value) if(isnull(default)) to_chat(src, "Unable to determine variable type.") @@ -585,7 +597,7 @@ GLOBAL_PROTECT(VVpixelmovement) default = VV_MESSAGE class = default - var/list/value = vv_get_value(class, default, var_value, extra_classes = list(VV_LIST)) + var/list/value = vv_get_value(class, default, var_value, extra_classes = list(VV_LIST), var_name = variable) class = value["class"] if (!class) diff --git a/code/modules/admin/verbs/possess.dm b/code/modules/admin/verbs/possess.dm index a9b5093e99..b92e9901e0 100644 --- a/code/modules/admin/verbs/possess.dm +++ b/code/modules/admin/verbs/possess.dm @@ -2,7 +2,7 @@ set name = "Possess Obj" set category = "Object" - if(O.dangerous_possession && CONFIG_GET(flag/forbid_singulo_possession)) + if((O.obj_flags & DANGEROUS_POSSESSION) && CONFIG_GET(flag/forbid_singulo_possession)) to_chat(usr, "[O] is too powerful for you to possess.") return diff --git a/code/modules/antagonists/_common/antag_datum.dm b/code/modules/antagonists/_common/antag_datum.dm new file mode 100644 index 0000000000..7d090bfd63 --- /dev/null +++ b/code/modules/antagonists/_common/antag_datum.dm @@ -0,0 +1,238 @@ +GLOBAL_LIST_EMPTY(antagonists) + +/datum/antagonist + var/name = "Antagonist" + var/roundend_category = "other antagonists" //Section of roundend report, datums with same category will be displayed together, also default header for the section + var/show_in_roundend = TRUE //Set to false to hide the antagonists from roundend report + var/datum/mind/owner //Mind that owns this datum + var/silent = FALSE //Silent will prevent the gain/lose texts to show + var/can_coexist_with_others = TRUE //Whether or not the person will be able to have more than one datum + var/list/typecache_datum_blacklist = list() //List of datums this type can't coexist with + var/delete_on_mind_deletion = TRUE + var/job_rank + var/replace_banned = TRUE //Should replace jobbaned player with ghosts if granted. + var/list/objectives = list() + var/antag_memory = ""//These will be removed with antag datum + + //Antag panel properties + var/show_in_antagpanel = TRUE //This will hide adding this antag type in antag panel, use only for internal subtypes that shouldn't be added directly but still show if possessed by mind + var/antagpanel_category = "Uncategorized" //Antagpanel will display these together, REQUIRED + +/datum/antagonist/New() + GLOB.antagonists += src + typecache_datum_blacklist = typecacheof(typecache_datum_blacklist) + +/datum/antagonist/Destroy() + GLOB.antagonists -= src + if(owner) + LAZYREMOVE(owner.antag_datums, src) + owner = null + return ..() + +/datum/antagonist/proc/can_be_owned(datum/mind/new_owner) + . = TRUE + var/datum/mind/tested = new_owner || owner + if(tested.has_antag_datum(type)) + return FALSE + for(var/i in tested.antag_datums) + var/datum/antagonist/A = i + if(is_type_in_typecache(src, A.typecache_datum_blacklist)) + return FALSE + +//This will be called in add_antag_datum before owner assignment. +//Should return antag datum without owner. +/datum/antagonist/proc/specialization(datum/mind/new_owner) + return src + +/datum/antagonist/proc/on_body_transfer(mob/living/old_body, mob/living/new_body) + remove_innate_effects(old_body) + apply_innate_effects(new_body) + +//This handles the application of antag huds/special abilities +/datum/antagonist/proc/apply_innate_effects(mob/living/mob_override) + return + +//This handles the removal of antag huds/special abilities +/datum/antagonist/proc/remove_innate_effects(mob/living/mob_override) + return + +//Assign default team and creates one for one of a kind team antagonists +/datum/antagonist/proc/create_team(datum/team/team) + return + +//Proc called when the datum is given to a mind. +/datum/antagonist/proc/on_gain() + if(owner && owner.current) + if(!silent) + greet() + apply_innate_effects() + if(is_banned(owner.current) && replace_banned) + replace_banned_player() + +/datum/antagonist/proc/is_banned(mob/M) + if(!M) + return FALSE + . = (jobban_isbanned(M,"Syndicate") || (job_rank && jobban_isbanned(M,job_rank))) + +/datum/antagonist/proc/replace_banned_player() + set waitfor = FALSE + + var/list/mob/dead/observer/candidates = pollCandidatesForMob("Do you want to play as a [name]?", "[name]", null, job_rank, 50, owner.current) + var/mob/dead/observer/theghost = null + if(candidates.len) + theghost = pick(candidates) + to_chat(owner, "Your mob has been taken over by a ghost! Appeal your job ban if you want to avoid this in the future!") + message_admins("[key_name_admin(theghost)] has taken control of ([key_name_admin(owner.current)]) to replace a jobbaned player.") + owner.current.ghostize(0) + owner.current.key = theghost.key + +/datum/antagonist/proc/on_removal() + remove_innate_effects() + if(owner) + LAZYREMOVE(owner.antag_datums, src) + if(!silent && owner.current) + farewell() + var/datum/team/team = get_team() + if(team) + team.remove_member(owner) + qdel(src) + +/datum/antagonist/proc/greet() + return + +/datum/antagonist/proc/farewell() + return + +//Returns the team antagonist belongs to if any. +/datum/antagonist/proc/get_team() + return + +//Individual roundend report +/datum/antagonist/proc/roundend_report() + var/list/report = list() + + if(!owner) + CRASH("antagonist datum without owner") + + report += printplayer(owner) + + var/objectives_complete = TRUE + if(owner.objectives.len) + report += printobjectives(owner) + for(var/datum/objective/objective in owner.objectives) + if(!objective.check_completion()) + objectives_complete = FALSE + break + + if(owner.objectives.len == 0 || objectives_complete) + report += "The [name] was successful!" + else + report += "The [name] has failed!" + + return report.Join("
") + +//Displayed at the start of roundend_category section, default to roundend_category header +/datum/antagonist/proc/roundend_report_header() + return "The [roundend_category] were:
" + +//Displayed at the end of roundend_category section +/datum/antagonist/proc/roundend_report_footer() + return + + +//ADMIN TOOLS + +//Called when using admin tools to give antag status +/datum/antagonist/proc/admin_add(datum/mind/new_owner,mob/admin) + message_admins("[key_name_admin(admin)] made [new_owner.current] into [name].") + log_admin("[key_name(admin)] made [new_owner.current] into [name].") + new_owner.add_antag_datum(src) + +//Called when removing antagonist using admin tools +/datum/antagonist/proc/admin_remove(mob/user) + if(!user) + return + message_admins("[key_name_admin(user)] has removed [name] antagonist status from [owner.current].") + log_admin("[key_name(user)] has removed [name] antagonist status from [owner.current].") + on_removal() + +//gamemode/proc/is_mode_antag(antagonist/A) => TRUE/FALSE + +//Additional data to display in antagonist panel section +//nuke disk code, genome count, etc +/datum/antagonist/proc/antag_panel_data() + return "" + +/datum/antagonist/proc/enabled_in_preferences(datum/mind/M) + if(job_rank) + if(M.current && M.current.client && (job_rank in M.current.client.prefs.be_special)) + return TRUE + else + return FALSE + return TRUE + +// List if ["Command"] = CALLBACK(), user will be appeneded to callback arguments on execution +/datum/antagonist/proc/get_admin_commands() + . = list() + +/datum/antagonist/Topic(href,href_list) + if(!check_rights(R_ADMIN)) + return + //Antag memory edit + if (href_list["memory_edit"]) + edit_memory(usr) + owner.traitor_panel() + return + + //Some commands might delete/modify this datum clearing or changing owner + var/datum/mind/persistent_owner = owner + + var/commands = get_admin_commands() + for(var/admin_command in commands) + if(href_list["command"] == admin_command) + var/datum/callback/C = commands[admin_command] + C.Invoke(usr) + persistent_owner.traitor_panel() + return + +/datum/antagonist/proc/edit_memory(mob/user) + var/new_memo = copytext(trim(input(user,"Write new memory", "Memory", antag_memory) as null|message),1,MAX_MESSAGE_LEN) + if (isnull(new_memo)) + return + antag_memory = new_memo + +//This datum will autofill the name with special_role +//Used as placeholder for minor antagonists, please create proper datums for these +/datum/antagonist/auto_custom + show_in_antagpanel = FALSE + antagpanel_category = "Other" + +/datum/antagonist/auto_custom/on_gain() + ..() + name = owner.special_role + //Add all objectives not already owned by other datums to this one. + var/list/already_registered_objectives = list() + for(var/datum/antagonist/A in owner.antag_datums) + if(A == src) + continue + else + already_registered_objectives |= A.objectives + objectives = owner.objectives - already_registered_objectives + +/datum/antagonist/auto_custom/antag_listing_name() + return ..() + "([name])" + +//This one is created by admin tools for custom objectives +/datum/antagonist/custom + antagpanel_category = "Custom" + +/datum/antagonist/custom/admin_add(datum/mind/new_owner,mob/admin) + var/custom_name = stripped_input(admin, "Custom antagonist name:", "Custom antag", "Antagonist") + if(custom_name) + name = custom_name + else + return + ..() + +/datum/antagonist/custom/antag_listing_name() + return ..() + "([name])" \ No newline at end of file diff --git a/code/modules/antagonists/_common/antag_helpers.dm b/code/modules/antagonists/_common/antag_helpers.dm new file mode 100644 index 0000000000..d99920b9e2 --- /dev/null +++ b/code/modules/antagonists/_common/antag_helpers.dm @@ -0,0 +1,19 @@ +//Returns MINDS of the assigned antags of given type/subtypes +/proc/get_antag_minds(antag_type,specific = FALSE) + . = list() + for(var/datum/antagonist/A in GLOB.antagonists) + if(!A.owner) + continue + if(!antag_type || !specific && istype(A,antag_type) || specific && A.type == antag_type) + . += A.owner + +//Get all teams [of type team_type] +/proc/get_all_teams(team_type) + . = list() + for(var/V in GLOB.antagonists) + var/datum/antagonist/A = V + if(!A.owner) + continue + var/datum/team/T = A.get_team() + if(!team_type || istype(T,team_type)) + . |= T \ No newline at end of file diff --git a/code/game/gamemodes/antag_hud.dm b/code/modules/antagonists/_common/antag_hud.dm similarity index 95% rename from code/game/gamemodes/antag_hud.dm rename to code/modules/antagonists/_common/antag_hud.dm index 447a87ce20..de6d0a4f81 100644 --- a/code/game/gamemodes/antag_hud.dm +++ b/code/modules/antagonists/_common/antag_hud.dm @@ -1,53 +1,53 @@ -/datum/atom_hud/antag - hud_icons = list(ANTAG_HUD) - var/self_visible = TRUE - -/datum/atom_hud/antag/hidden - self_visible = FALSE - -/datum/atom_hud/antag/proc/join_hud(mob/M) - //sees_hud should be set to 0 if the mob does not get to see it's own hud type. - if(!istype(M)) - CRASH("join_hud(): [M] ([M.type]) is not a mob!") - if(M.mind.antag_hud) //note: please let this runtime if a mob has no mind, as mindless mobs shouldn't be getting antagged - M.mind.antag_hud.leave_hud(M) - add_to_hud(M) - if(self_visible) - add_hud_to(M) - M.mind.antag_hud = src - -/datum/atom_hud/antag/proc/leave_hud(mob/M) - if(!M) - return - if(!istype(M)) - CRASH("leave_hud(): [M] ([M.type]) is not a mob!") - remove_from_hud(M) - remove_hud_from(M) - if(M.mind) - M.mind.antag_hud = null - - -//GAME_MODE PROCS -//called to set a mob's antag icon state -/proc/set_antag_hud(mob/M, new_icon_state) - if(!istype(M)) - CRASH("set_antag_hud(): [M] ([M.type]) is not a mob!") - var/image/holder = M.hud_list[ANTAG_HUD] - if(holder) - holder.icon_state = new_icon_state - if(M.mind || new_icon_state) //in mindless mobs, only null is acceptable, otherwise we're antagging a mindless mob, meaning we should runtime - M.mind.antag_hud_icon_state = new_icon_state - - -//MIND PROCS -//these are called by mind.transfer_to() -/datum/mind/proc/transfer_antag_huds(datum/atom_hud/antag/newhud) - leave_all_antag_huds() - set_antag_hud(current, antag_hud_icon_state) - if(newhud) - newhud.join_hud(current) - -/datum/mind/proc/leave_all_antag_huds() - for(var/datum/atom_hud/antag/hud in GLOB.huds) - if(hud.hudusers[current]) +/datum/atom_hud/antag + hud_icons = list(ANTAG_HUD) + var/self_visible = TRUE + +/datum/atom_hud/antag/hidden + self_visible = FALSE + +/datum/atom_hud/antag/proc/join_hud(mob/M) + //sees_hud should be set to 0 if the mob does not get to see it's own hud type. + if(!istype(M)) + CRASH("join_hud(): [M] ([M.type]) is not a mob!") + if(M.mind.antag_hud) //note: please let this runtime if a mob has no mind, as mindless mobs shouldn't be getting antagged + M.mind.antag_hud.leave_hud(M) + add_to_hud(M) + if(self_visible) + add_hud_to(M) + M.mind.antag_hud = src + +/datum/atom_hud/antag/proc/leave_hud(mob/M) + if(!M) + return + if(!istype(M)) + CRASH("leave_hud(): [M] ([M.type]) is not a mob!") + remove_from_hud(M) + remove_hud_from(M) + if(M.mind) + M.mind.antag_hud = null + + +//GAME_MODE PROCS +//called to set a mob's antag icon state +/proc/set_antag_hud(mob/M, new_icon_state) + if(!istype(M)) + CRASH("set_antag_hud(): [M] ([M.type]) is not a mob!") + var/image/holder = M.hud_list[ANTAG_HUD] + if(holder) + holder.icon_state = new_icon_state + if(M.mind || new_icon_state) //in mindless mobs, only null is acceptable, otherwise we're antagging a mindless mob, meaning we should runtime + M.mind.antag_hud_icon_state = new_icon_state + + +//MIND PROCS +//these are called by mind.transfer_to() +/datum/mind/proc/transfer_antag_huds(datum/atom_hud/antag/newhud) + leave_all_antag_huds() + set_antag_hud(current, antag_hud_icon_state) + if(newhud) + newhud.join_hud(current) + +/datum/mind/proc/leave_all_antag_huds() + for(var/datum/atom_hud/antag/hud in GLOB.huds) + if(hud.hudusers[current]) hud.leave_hud(current) \ No newline at end of file diff --git a/code/game/gamemodes/antag_spawner.dm b/code/modules/antagonists/_common/antag_spawner.dm similarity index 97% rename from code/game/gamemodes/antag_spawner.dm rename to code/modules/antagonists/_common/antag_spawner.dm index 8d4c1cf5ba..27de0c18ec 100644 --- a/code/game/gamemodes/antag_spawner.dm +++ b/code/modules/antagonists/_common/antag_spawner.dm @@ -1,266 +1,266 @@ -/obj/item/antag_spawner - throw_speed = 1 - throw_range = 5 - w_class = WEIGHT_CLASS_TINY - var/used = 0 - -/obj/item/antag_spawner/proc/spawn_antag(client/C, turf/T, kind = "", datum/mind/user) - return - -/obj/item/antag_spawner/proc/equip_antag(mob/target) - return - - -///////////WIZARD - -/obj/item/antag_spawner/contract - name = "contract" - desc = "A magic contract previously signed by an apprentice. In exchange for instruction in the magical arts, they are bound to answer your call for aid." - icon = 'icons/obj/wizard.dmi' - icon_state ="scroll2" - -/obj/item/antag_spawner/contract/attack_self(mob/user) - user.set_machine(src) - var/dat - if(used) - dat = "You have already summoned your apprentice.
" - else - dat = "Contract of Apprenticeship:
" - dat += "Using this contract, you may summon an apprentice to aid you on your mission.
" - dat += "If you are unable to establish contact with your apprentice, you can feed the contract back to the spellbook to refund your points.
" - dat += "Which school of magic is your apprentice studying?:
" - dat += "Destruction
" - dat += "Your apprentice is skilled in offensive magic. They know Magic Missile and Fireball.
" - dat += "Bluespace Manipulation
" - dat += "Your apprentice is able to defy physics, melting through solid objects and travelling great distances in the blink of an eye. They know Teleport and Ethereal Jaunt.
" - dat += "Healing
" - dat += "Your apprentice is training to cast spells that will aid your survival. They know Forcewall and Charge and come with a Staff of Healing.
" - dat += "Robeless
" - dat += "Your apprentice is training to cast spells without their robes. They know Knock and Mindswap.
" - user << browse(dat, "window=radio") - onclose(user, "radio") - return - -/obj/item/antag_spawner/contract/Topic(href, href_list) - ..() - var/mob/living/carbon/human/H = usr - - if(H.stat || H.restrained()) - return - if(!ishuman(H)) - return 1 - - if(loc == H || (in_range(src, H) && isturf(loc))) - H.set_machine(src) - if(href_list["school"]) - if(used) - to_chat(H, "You already used this contract!") - return - var/list/candidates = pollCandidatesForMob("Do you want to play as a wizard's [href_list["school"]] apprentice?", ROLE_WIZARD, null, ROLE_WIZARD, 150, src) - if(candidates.len) - if(used) - to_chat(H, "You already used this contract!") - return - used = 1 - var/mob/dead/observer/theghost = pick(candidates) - spawn_antag(theghost.client, get_turf(src), href_list["school"],H.mind) - else - to_chat(H, "Unable to reach your apprentice! You can either attack the spellbook with the contract to refund your points, or wait and try again later.") - -/obj/item/antag_spawner/contract/spawn_antag(client/C, turf/T, kind ,datum/mind/user) - new /obj/effect/particle_effect/smoke(T) - var/mob/living/carbon/human/M = new/mob/living/carbon/human(T) - C.prefs.copy_to(M) - M.key = C.key - var/datum/mind/app_mind = M.mind - - var/datum/antagonist/wizard/apprentice/app = new() - app.master = user - app.school = kind - - var/datum/antagonist/wizard/master_wizard = user.has_antag_datum(/datum/antagonist/wizard) - if(master_wizard) - if(!master_wizard.wiz_team) - master_wizard.create_wiz_team() - app.wiz_team = master_wizard.wiz_team - master_wizard.wiz_team.add_member(app_mind) - app_mind.add_antag_datum(app) - //TODO Kill these if possible - app_mind.assigned_role = "Apprentice" - app_mind.special_role = "apprentice" - // - SEND_SOUND(M, sound('sound/effects/magic.ogg')) - -///////////BORGS AND OPERATIVES - - -/obj/item/antag_spawner/nuke_ops - name = "syndicate operative teleporter" - desc = "A single-use teleporter designed to quickly reinforce operatives in the field." - icon = 'icons/obj/device.dmi' - icon_state = "locator" - var/borg_to_spawn - -/obj/item/antag_spawner/nuke_ops/proc/check_usability(mob/user) - if(used) - to_chat(user, "[src] is out of power!") - return FALSE - if(!user.mind.has_antag_datum(/datum/antagonist/nukeop,TRUE)) - to_chat(user, "AUTHENTICATION FAILURE. ACCESS DENIED.") - return FALSE - if(!user.onSyndieBase()) - to_chat(user, "[src] is out of range! It can only be used at your base!") - return FALSE - return TRUE - - -/obj/item/antag_spawner/nuke_ops/attack_self(mob/user) - if(!(check_usability(user))) - return - - to_chat(user, "You activate [src] and wait for confirmation.") - var/list/nuke_candidates = pollGhostCandidates("Do you want to play as a syndicate [borg_to_spawn ? "[lowertext(borg_to_spawn)] cyborg":"operative"]?", ROLE_OPERATIVE, null, ROLE_OPERATIVE, 150, POLL_IGNORE_SYNDICATE) - if(nuke_candidates.len) - if(!(check_usability(user))) - return - used = TRUE - var/mob/dead/observer/theghost = pick(nuke_candidates) - spawn_antag(theghost.client, get_turf(src), "syndieborg", user.mind) - do_sparks(4, TRUE, src) - qdel(src) - else - to_chat(user, "Unable to connect to Syndicate command. Please wait and try again later or use the teleporter on your uplink to get your points refunded.") - -/obj/item/antag_spawner/nuke_ops/spawn_antag(client/C, turf/T, kind, datum/mind/user) - var/mob/living/carbon/human/M = new/mob/living/carbon/human(T) - C.prefs.copy_to(M) - M.key = C.key - - var/datum/antagonist/nukeop/new_op = new() - new_op.send_to_spawnpoint = FALSE - new_op.nukeop_outfit = /datum/outfit/syndicate/no_crystals - - var/datum/antagonist/nukeop/creator_op = user.has_antag_datum(/datum/antagonist/nukeop,TRUE) - if(creator_op) - M.mind.add_antag_datum(new_op,creator_op.nuke_team) - M.mind.special_role = "Nuclear Operative" - -//////SYNDICATE BORG -/obj/item/antag_spawner/nuke_ops/borg_tele - name = "syndicate cyborg teleporter" - desc = "A single-use teleporter designed to quickly reinforce operatives in the field.." - icon = 'icons/obj/device.dmi' - icon_state = "locator" - -/obj/item/antag_spawner/nuke_ops/borg_tele/assault - name = "syndicate assault cyborg teleporter" - borg_to_spawn = "Assault" - -/obj/item/antag_spawner/nuke_ops/borg_tele/medical - name = "syndicate medical teleporter" - borg_to_spawn = "Medical" - -/obj/item/antag_spawner/nuke_ops/borg_tele/spawn_antag(client/C, turf/T, kind, datum/mind/user) - var/mob/living/silicon/robot/R - var/datum/antagonist/nukeop/creator_op = user.has_antag_datum(/datum/antagonist/nukeop,TRUE) - if(!creator_op) - return - - switch(borg_to_spawn) - if("Medical") - R = new /mob/living/silicon/robot/modules/syndicate/medical(T) - else - R = new /mob/living/silicon/robot/modules/syndicate(T) //Assault borg by default - - var/brainfirstname = pick(GLOB.first_names_male) - if(prob(50)) - brainfirstname = pick(GLOB.first_names_female) - var/brainopslastname = pick(GLOB.last_names) - if(creator_op.nuke_team.syndicate_name) //the brain inside the syndiborg has the same last name as the other ops. - brainopslastname = creator_op.nuke_team.syndicate_name - var/brainopsname = "[brainfirstname] [brainopslastname]" - - R.mmi.name = "Man-Machine Interface: [brainopsname]" - R.mmi.brain.name = "[brainopsname]'s brain" - R.mmi.brainmob.real_name = brainopsname - R.mmi.brainmob.name = brainopsname - R.real_name = R.name - - R.key = C.key - - var/datum/antagonist/nukeop/new_borg = new() - new_borg.send_to_spawnpoint = FALSE - R.mind.add_antag_datum(new_borg,creator_op.nuke_team) - R.mind.special_role = "Syndicate Cyborg" - -///////////SLAUGHTER DEMON - -/obj/item/antag_spawner/slaughter_demon //Warning edgiest item in the game - name = "vial of blood" - desc = "A magically infused bottle of blood, distilled from countless murder victims. Used in unholy rituals to attract horrifying creatures." - icon = 'icons/obj/wizard.dmi' - icon_state = "vial" - - var/shatter_msg = "You shatter the bottle, no turning back now!" - var/veil_msg = "You sense a dark presence lurking just beyond the veil..." - var/objective_verb = "Kill" - var/mob/living/demon_type = /mob/living/simple_animal/slaughter - - -/obj/item/antag_spawner/slaughter_demon/attack_self(mob/user) - if(!is_station_level(user.z)) - to_chat(user, "You should probably wait until you reach the station.") - return - if(used) - return - var/list/demon_candidates = pollCandidatesForMob("Do you want to play as a [initial(demon_type.name)]?", null, null, ROLE_ALIEN, 50, src) - if(demon_candidates.len) - if(used) - return - used = 1 - var/mob/dead/observer/theghost = pick(demon_candidates) - spawn_antag(theghost.client, get_turf(src), initial(demon_type.name),user.mind) - to_chat(user, shatter_msg) - to_chat(user, veil_msg) - playsound(user.loc, 'sound/effects/glassbr1.ogg', 100, 1) - qdel(src) - else - to_chat(user, "You can't seem to work up the nerve to shatter the bottle. Perhaps you should try again later.") - - -/obj/item/antag_spawner/slaughter_demon/spawn_antag(client/C, turf/T, kind = "", datum/mind/user) - var/obj/effect/dummy/slaughter/holder = new /obj/effect/dummy/slaughter(T) - var/mob/living/simple_animal/slaughter/S = new demon_type(holder) - S.holder = holder - S.key = C.key - S.mind.assigned_role = S.name - S.mind.special_role = S.name - var/datum/objective/assassinate/new_objective - if(user) - new_objective = new /datum/objective/assassinate - new_objective.owner = S.mind - new_objective.target = user - new_objective.explanation_text = "[objective_verb] [user.name], the one who summoned you." - S.mind.objectives += new_objective - var/datum/objective/new_objective2 = new /datum/objective - new_objective2.owner = S.mind - new_objective2.explanation_text = "[objective_verb] everyone[user ? " else while you're at it":""]." - S.mind.objectives += new_objective2 - S.mind.add_antag_datum(/datum/antagonist/auto_custom) - to_chat(S, S.playstyle_string) - to_chat(S, "You are currently not currently in the same plane of existence as the station. \ - Ctrl+Click a blood pool to manifest.") - if(new_objective) - to_chat(S, "Objective #[1]: [new_objective.explanation_text]") - to_chat(S, "Objective #[new_objective ? "[2]":"[1]"]: [new_objective2.explanation_text]") - -/obj/item/antag_spawner/slaughter_demon/laughter - name = "vial of tickles" - desc = "A magically infused bottle of clown love, distilled from countless hugging attacks. Used in funny rituals to attract adorable creatures." - icon = 'icons/obj/wizard.dmi' - icon_state = "vial" - color = "#FF69B4" // HOT PINK - - veil_msg = "You sense an adorable presence lurking just beyond the veil..." - objective_verb = "Hug and Tickle" - demon_type = /mob/living/simple_animal/slaughter/laughter +/obj/item/antag_spawner + throw_speed = 1 + throw_range = 5 + w_class = WEIGHT_CLASS_TINY + var/used = 0 + +/obj/item/antag_spawner/proc/spawn_antag(client/C, turf/T, kind = "", datum/mind/user) + return + +/obj/item/antag_spawner/proc/equip_antag(mob/target) + return + + +///////////WIZARD + +/obj/item/antag_spawner/contract + name = "contract" + desc = "A magic contract previously signed by an apprentice. In exchange for instruction in the magical arts, they are bound to answer your call for aid." + icon = 'icons/obj/wizard.dmi' + icon_state ="scroll2" + +/obj/item/antag_spawner/contract/attack_self(mob/user) + user.set_machine(src) + var/dat + if(used) + dat = "You have already summoned your apprentice.
" + else + dat = "Contract of Apprenticeship:
" + dat += "Using this contract, you may summon an apprentice to aid you on your mission.
" + dat += "If you are unable to establish contact with your apprentice, you can feed the contract back to the spellbook to refund your points.
" + dat += "Which school of magic is your apprentice studying?:
" + dat += "Destruction
" + dat += "Your apprentice is skilled in offensive magic. They know Magic Missile and Fireball.
" + dat += "Bluespace Manipulation
" + dat += "Your apprentice is able to defy physics, melting through solid objects and travelling great distances in the blink of an eye. They know Teleport and Ethereal Jaunt.
" + dat += "Healing
" + dat += "Your apprentice is training to cast spells that will aid your survival. They know Forcewall and Charge and come with a Staff of Healing.
" + dat += "Robeless
" + dat += "Your apprentice is training to cast spells without their robes. They know Knock and Mindswap.
" + user << browse(dat, "window=radio") + onclose(user, "radio") + return + +/obj/item/antag_spawner/contract/Topic(href, href_list) + ..() + var/mob/living/carbon/human/H = usr + + if(H.stat || H.restrained()) + return + if(!ishuman(H)) + return 1 + + if(loc == H || (in_range(src, H) && isturf(loc))) + H.set_machine(src) + if(href_list["school"]) + if(used) + to_chat(H, "You already used this contract!") + return + var/list/candidates = pollCandidatesForMob("Do you want to play as a wizard's [href_list["school"]] apprentice?", ROLE_WIZARD, null, ROLE_WIZARD, 150, src) + if(candidates.len) + if(used) + to_chat(H, "You already used this contract!") + return + used = 1 + var/mob/dead/observer/theghost = pick(candidates) + spawn_antag(theghost.client, get_turf(src), href_list["school"],H.mind) + else + to_chat(H, "Unable to reach your apprentice! You can either attack the spellbook with the contract to refund your points, or wait and try again later.") + +/obj/item/antag_spawner/contract/spawn_antag(client/C, turf/T, kind ,datum/mind/user) + new /obj/effect/particle_effect/smoke(T) + var/mob/living/carbon/human/M = new/mob/living/carbon/human(T) + C.prefs.copy_to(M) + M.key = C.key + var/datum/mind/app_mind = M.mind + + var/datum/antagonist/wizard/apprentice/app = new() + app.master = user + app.school = kind + + var/datum/antagonist/wizard/master_wizard = user.has_antag_datum(/datum/antagonist/wizard) + if(master_wizard) + if(!master_wizard.wiz_team) + master_wizard.create_wiz_team() + app.wiz_team = master_wizard.wiz_team + master_wizard.wiz_team.add_member(app_mind) + app_mind.add_antag_datum(app) + //TODO Kill these if possible + app_mind.assigned_role = "Apprentice" + app_mind.special_role = "apprentice" + // + SEND_SOUND(M, sound('sound/effects/magic.ogg')) + +///////////BORGS AND OPERATIVES + + +/obj/item/antag_spawner/nuke_ops + name = "syndicate operative teleporter" + desc = "A single-use teleporter designed to quickly reinforce operatives in the field." + icon = 'icons/obj/device.dmi' + icon_state = "locator" + var/borg_to_spawn + +/obj/item/antag_spawner/nuke_ops/proc/check_usability(mob/user) + if(used) + to_chat(user, "[src] is out of power!") + return FALSE + if(!user.mind.has_antag_datum(/datum/antagonist/nukeop,TRUE)) + to_chat(user, "AUTHENTICATION FAILURE. ACCESS DENIED.") + return FALSE + if(!user.onSyndieBase()) + to_chat(user, "[src] is out of range! It can only be used at your base!") + return FALSE + return TRUE + + +/obj/item/antag_spawner/nuke_ops/attack_self(mob/user) + if(!(check_usability(user))) + return + + to_chat(user, "You activate [src] and wait for confirmation.") + var/list/nuke_candidates = pollGhostCandidates("Do you want to play as a syndicate [borg_to_spawn ? "[lowertext(borg_to_spawn)] cyborg":"operative"]?", ROLE_OPERATIVE, null, ROLE_OPERATIVE, 150, POLL_IGNORE_SYNDICATE) + if(nuke_candidates.len) + if(!(check_usability(user))) + return + used = TRUE + var/mob/dead/observer/theghost = pick(nuke_candidates) + spawn_antag(theghost.client, get_turf(src), "syndieborg", user.mind) + do_sparks(4, TRUE, src) + qdel(src) + else + to_chat(user, "Unable to connect to Syndicate command. Please wait and try again later or use the teleporter on your uplink to get your points refunded.") + +/obj/item/antag_spawner/nuke_ops/spawn_antag(client/C, turf/T, kind, datum/mind/user) + var/mob/living/carbon/human/M = new/mob/living/carbon/human(T) + C.prefs.copy_to(M) + M.key = C.key + + var/datum/antagonist/nukeop/new_op = new() + new_op.send_to_spawnpoint = FALSE + new_op.nukeop_outfit = /datum/outfit/syndicate/no_crystals + + var/datum/antagonist/nukeop/creator_op = user.has_antag_datum(/datum/antagonist/nukeop,TRUE) + if(creator_op) + M.mind.add_antag_datum(new_op,creator_op.nuke_team) + M.mind.special_role = "Nuclear Operative" + +//////SYNDICATE BORG +/obj/item/antag_spawner/nuke_ops/borg_tele + name = "syndicate cyborg teleporter" + desc = "A single-use teleporter designed to quickly reinforce operatives in the field.." + icon = 'icons/obj/device.dmi' + icon_state = "locator" + +/obj/item/antag_spawner/nuke_ops/borg_tele/assault + name = "syndicate assault cyborg teleporter" + borg_to_spawn = "Assault" + +/obj/item/antag_spawner/nuke_ops/borg_tele/medical + name = "syndicate medical teleporter" + borg_to_spawn = "Medical" + +/obj/item/antag_spawner/nuke_ops/borg_tele/spawn_antag(client/C, turf/T, kind, datum/mind/user) + var/mob/living/silicon/robot/R + var/datum/antagonist/nukeop/creator_op = user.has_antag_datum(/datum/antagonist/nukeop,TRUE) + if(!creator_op) + return + + switch(borg_to_spawn) + if("Medical") + R = new /mob/living/silicon/robot/modules/syndicate/medical(T) + else + R = new /mob/living/silicon/robot/modules/syndicate(T) //Assault borg by default + + var/brainfirstname = pick(GLOB.first_names_male) + if(prob(50)) + brainfirstname = pick(GLOB.first_names_female) + var/brainopslastname = pick(GLOB.last_names) + if(creator_op.nuke_team.syndicate_name) //the brain inside the syndiborg has the same last name as the other ops. + brainopslastname = creator_op.nuke_team.syndicate_name + var/brainopsname = "[brainfirstname] [brainopslastname]" + + R.mmi.name = "Man-Machine Interface: [brainopsname]" + R.mmi.brain.name = "[brainopsname]'s brain" + R.mmi.brainmob.real_name = brainopsname + R.mmi.brainmob.name = brainopsname + R.real_name = R.name + + R.key = C.key + + var/datum/antagonist/nukeop/new_borg = new() + new_borg.send_to_spawnpoint = FALSE + R.mind.add_antag_datum(new_borg,creator_op.nuke_team) + R.mind.special_role = "Syndicate Cyborg" + +///////////SLAUGHTER DEMON + +/obj/item/antag_spawner/slaughter_demon //Warning edgiest item in the game + name = "vial of blood" + desc = "A magically infused bottle of blood, distilled from countless murder victims. Used in unholy rituals to attract horrifying creatures." + icon = 'icons/obj/wizard.dmi' + icon_state = "vial" + + var/shatter_msg = "You shatter the bottle, no turning back now!" + var/veil_msg = "You sense a dark presence lurking just beyond the veil..." + var/objective_verb = "Kill" + var/mob/living/demon_type = /mob/living/simple_animal/slaughter + + +/obj/item/antag_spawner/slaughter_demon/attack_self(mob/user) + if(!is_station_level(user.z)) + to_chat(user, "You should probably wait until you reach the station.") + return + if(used) + return + var/list/demon_candidates = pollCandidatesForMob("Do you want to play as a [initial(demon_type.name)]?", null, null, ROLE_ALIEN, 50, src) + if(demon_candidates.len) + if(used) + return + used = 1 + var/mob/dead/observer/theghost = pick(demon_candidates) + spawn_antag(theghost.client, get_turf(src), initial(demon_type.name),user.mind) + to_chat(user, shatter_msg) + to_chat(user, veil_msg) + playsound(user.loc, 'sound/effects/glassbr1.ogg', 100, 1) + qdel(src) + else + to_chat(user, "You can't seem to work up the nerve to shatter the bottle. Perhaps you should try again later.") + + +/obj/item/antag_spawner/slaughter_demon/spawn_antag(client/C, turf/T, kind = "", datum/mind/user) + var/obj/effect/dummy/slaughter/holder = new /obj/effect/dummy/slaughter(T) + var/mob/living/simple_animal/slaughter/S = new demon_type(holder) + S.holder = holder + S.key = C.key + S.mind.assigned_role = S.name + S.mind.special_role = S.name + var/datum/objective/assassinate/new_objective + if(user) + new_objective = new /datum/objective/assassinate + new_objective.owner = S.mind + new_objective.target = user + new_objective.explanation_text = "[objective_verb] [user.name], the one who summoned you." + S.mind.objectives += new_objective + var/datum/objective/new_objective2 = new /datum/objective + new_objective2.owner = S.mind + new_objective2.explanation_text = "[objective_verb] everyone[user ? " else while you're at it":""]." + S.mind.objectives += new_objective2 + S.mind.add_antag_datum(/datum/antagonist/auto_custom) + to_chat(S, S.playstyle_string) + to_chat(S, "You are currently not currently in the same plane of existence as the station. \ + Ctrl+Click a blood pool to manifest.") + if(new_objective) + to_chat(S, "Objective #[1]: [new_objective.explanation_text]") + to_chat(S, "Objective #[new_objective ? "[2]":"[1]"]: [new_objective2.explanation_text]") + +/obj/item/antag_spawner/slaughter_demon/laughter + name = "vial of tickles" + desc = "A magically infused bottle of clown love, distilled from countless hugging attacks. Used in funny rituals to attract adorable creatures." + icon = 'icons/obj/wizard.dmi' + icon_state = "vial" + color = "#FF69B4" // HOT PINK + + veil_msg = "You sense an adorable presence lurking just beyond the veil..." + objective_verb = "Hug and Tickle" + demon_type = /mob/living/simple_animal/slaughter/laughter diff --git a/code/game/gamemodes/antag_team.dm b/code/modules/antagonists/_common/antag_team.dm similarity index 74% rename from code/game/gamemodes/antag_team.dm rename to code/modules/antagonists/_common/antag_team.dm index 56ca7c76e2..c458b5a9fb 100644 --- a/code/game/gamemodes/antag_team.dm +++ b/code/modules/antagonists/_common/antag_team.dm @@ -32,15 +32,3 @@ report += printplayerlist(members) return report.Join("
") - -//Get all teams [of type team_type] -//TODO move these to some antag helpers file with get_antagonists -/proc/get_all_teams(team_type) - . = list() - for(var/V in GLOB.antagonists) - var/datum/antagonist/A = V - if(!A.owner) - continue - var/datum/team/T = A.get_team() - if(!team_type || istype(T,team_type)) - . |= T diff --git a/code/game/gamemodes/miniantags/abduction/abductee_objectives.dm b/code/modules/antagonists/abductor/abductee/abductee_objectives.dm similarity index 100% rename from code/game/gamemodes/miniantags/abduction/abductee_objectives.dm rename to code/modules/antagonists/abductor/abductee/abductee_objectives.dm diff --git a/code/modules/antagonists/abductor/abductor.dm b/code/modules/antagonists/abductor/abductor.dm new file mode 100644 index 0000000000..35264af67c --- /dev/null +++ b/code/modules/antagonists/abductor/abductor.dm @@ -0,0 +1,216 @@ +#define ABDUCTOR_MAX_TEAMS 4 + +/datum/antagonist/abductor + name = "Abductor" + roundend_category = "abductors" + antagpanel_category = "Abductor" + job_rank = ROLE_ABDUCTOR + show_in_antagpanel = FALSE //should only show subtypes + var/datum/team/abductor_team/team + var/sub_role + var/outfit + var/landmark_type + var/greet_text + + +/datum/antagonist/abductor/agent + name = "Abductor Agent" + sub_role = "Agent" + outfit = /datum/outfit/abductor/agent + landmark_type = /obj/effect/landmark/abductor/agent + greet_text = "Use your stealth technology and equipment to incapacitate humans for your scientist to retrieve." + show_in_antagpanel = TRUE + +/datum/antagonist/abductor/scientist + name = "Abductor Scientist" + sub_role = "Scientist" + outfit = /datum/outfit/abductor/scientist + landmark_type = /obj/effect/landmark/abductor/scientist + greet_text = "Use your stealth technology and equipment to incapacitate humans for your scientist to retrieve." + show_in_antagpanel = TRUE + +/datum/antagonist/abductor/create_team(datum/team/abductor_team/new_team) + if(!new_team) + return + if(!istype(new_team)) + stack_trace("Wrong team type passed to [type] initialization.") + team = new_team + +/datum/antagonist/abductor/get_team() + return team + +/datum/antagonist/abductor/on_gain() + owner.special_role = "[name] [sub_role]" + owner.assigned_role = "[name] [sub_role]" + owner.objectives += team.objectives + finalize_abductor() + return ..() + +/datum/antagonist/abductor/on_removal() + owner.objectives -= team.objectives + if(owner.current) + to_chat(owner.current,"You are no longer the [owner.special_role]!") + owner.special_role = null + return ..() + +/datum/antagonist/abductor/greet() + to_chat(owner.current, "You are the [owner.special_role]!") + to_chat(owner.current, "With the help of your teammate, kidnap and experiment on station crew members!") + to_chat(owner.current, "[greet_text]") + owner.announce_objectives() + +/datum/antagonist/abductor/proc/finalize_abductor() + //Equip + var/mob/living/carbon/human/H = owner.current + H.set_species(/datum/species/abductor) + H.real_name = "[team.name] [sub_role]" + H.equipOutfit(outfit) + + //Teleport to ship + for(var/obj/effect/landmark/abductor/LM in GLOB.landmarks_list) + if(istype(LM, landmark_type) && LM.team_number == team.team_number) + H.forceMove(LM.loc) + break + + update_abductor_icons_added(owner,"abductor") + +/datum/antagonist/abductor/scientist/finalize_abductor() + ..() + var/mob/living/carbon/human/H = owner.current + var/datum/species/abductor/A = H.dna.species + A.scientist = TRUE + +/datum/antagonist/abductor/admin_add(datum/mind/new_owner,mob/admin) + var/list/current_teams = list() + for(var/datum/team/abductor_team/T in get_all_teams(/datum/team/abductor_team)) + current_teams[T.name] = T + var/choice = input(admin,"Add to which team ?") as null|anything in (current_teams + "new team") + if (choice == "new team") + team = new + else if(choice in current_teams) + team = current_teams[choice] + else + return + new_owner.add_antag_datum(src) + log_admin("[key_name(usr)] made [key_name(new_owner.current)] [name] on [choice]!") + message_admins("[key_name_admin(usr)] made [key_name_admin(new_owner.current)] [name] on [choice] !") + +/datum/antagonist/abductor/get_admin_commands() + . = ..() + .["Equip"] = CALLBACK(src,.proc/admin_equip) + +/datum/antagonist/abductor/proc/admin_equip(mob/admin) + if(!ishuman(owner.current)) + to_chat(admin, "This only works on humans!") + return + var/mob/living/carbon/human/H = owner.current + var/gear = alert(admin,"Agent or Scientist Gear","Gear","Agent","Scientist") + if(gear) + if(gear=="Agent") + H.equipOutfit(/datum/outfit/abductor/agent) + else + H.equipOutfit(/datum/outfit/abductor/scientist) + +/datum/team/abductor_team + member_name = "abductor" + var/team_number + var/list/datum/mind/abductees = list() + var/static/team_count = 1 + +/datum/team/abductor_team/New() + ..() + team_number = team_count++ + name = "Mothership [pick(GLOB.possible_changeling_IDs)]" //TODO Ensure unique and actual alieny names + add_objective(new/datum/objective/experiment) + +/datum/team/abductor_team/is_solo() + return FALSE + +/datum/team/abductor_team/proc/add_objective(datum/objective/O) + O.team = src + O.update_explanation_text() + objectives += O + +/datum/team/abductor_team/roundend_report() + var/list/result = list() + + var/won = TRUE + for(var/datum/objective/O in objectives) + if(!O.check_completion()) + won = FALSE + if(won) + result += "[name] team fulfilled its mission!" + else + result += "[name] team failed its mission." + + result += "The abductors of [name] were:" + for(var/datum/mind/abductor_mind in members) + result += printplayer(abductor_mind) + result += printobjectives(abductor_mind) + + return result.Join("
") + +/datum/antagonist/abductee + name = "Abductee" + roundend_category = "abductees" + antagpanel_category = "Abductee" + +/datum/antagonist/abductee/on_gain() + give_objective() + . = ..() + +/datum/antagonist/abductee/greet() + to_chat(owner, "Your mind snaps!") + to_chat(owner, "You can't remember how you got here...") + owner.announce_objectives() + +/datum/antagonist/abductee/proc/give_objective() + var/mob/living/carbon/human/H = owner.current + if(istype(H)) + H.gain_trauma_type(BRAIN_TRAUMA_MILD) + var/objtype = (prob(75) ? /datum/objective/abductee/random : pick(subtypesof(/datum/objective/abductee/) - /datum/objective/abductee/random)) + var/datum/objective/abductee/O = new objtype() + objectives += O + owner.objectives += objectives + +/datum/antagonist/abductee/apply_innate_effects(mob/living/mob_override) + update_abductor_icons_added(mob_override ? mob_override.mind : owner,"abductee") + +/datum/antagonist/abductee/remove_innate_effects(mob/living/mob_override) + update_abductor_icons_removed(mob_override ? mob_override.mind : owner) + + +// LANDMARKS +/obj/effect/landmark/abductor + var/team_number = 1 + +/obj/effect/landmark/abductor/agent + icon_state = "abductor_agent" +/obj/effect/landmark/abductor/scientist + icon_state = "abductor" + +// OBJECTIVES +/datum/objective/experiment + target_amount = 6 + +/datum/objective/experiment/New() + explanation_text = "Experiment on [target_amount] humans." + +/datum/objective/experiment/check_completion() + for(var/obj/machinery/abductor/experiment/E in GLOB.machines) + if(!istype(team, /datum/team/abductor_team)) + return FALSE + var/datum/team/abductor_team/T = team + if(E.team_number == T.team_number) + return E.points >= target_amount + return FALSE + +/datum/antagonist/proc/update_abductor_icons_added(datum/mind/alien_mind,hud_type) + var/datum/atom_hud/antag/hud = GLOB.huds[ANTAG_HUD_ABDUCTOR] + hud.join_hud(alien_mind.current) + set_antag_hud(alien_mind.current, hud_type) + +/datum/antagonist/proc/update_abductor_icons_removed(datum/mind/alien_mind) + var/datum/atom_hud/antag/hud = GLOB.huds[ANTAG_HUD_ABDUCTOR] + hud.leave_hud(alien_mind.current) + set_antag_hud(alien_mind.current, null) \ No newline at end of file diff --git a/code/game/gamemodes/miniantags/abduction/abduction_gear.dm b/code/modules/antagonists/abductor/equipment/abduction_gear.dm similarity index 100% rename from code/game/gamemodes/miniantags/abduction/abduction_gear.dm rename to code/modules/antagonists/abductor/equipment/abduction_gear.dm diff --git a/code/game/gamemodes/miniantags/abduction/abduction_outfits.dm b/code/modules/antagonists/abductor/equipment/abduction_outfits.dm similarity index 100% rename from code/game/gamemodes/miniantags/abduction/abduction_outfits.dm rename to code/modules/antagonists/abductor/equipment/abduction_outfits.dm diff --git a/code/game/gamemodes/miniantags/abduction/abduction_surgery.dm b/code/modules/antagonists/abductor/equipment/abduction_surgery.dm similarity index 100% rename from code/game/gamemodes/miniantags/abduction/abduction_surgery.dm rename to code/modules/antagonists/abductor/equipment/abduction_surgery.dm diff --git a/code/game/gamemodes/miniantags/abduction/gland.dm b/code/modules/antagonists/abductor/equipment/gland.dm similarity index 100% rename from code/game/gamemodes/miniantags/abduction/gland.dm rename to code/modules/antagonists/abductor/equipment/gland.dm diff --git a/code/game/gamemodes/miniantags/abduction/machinery/camera.dm b/code/modules/antagonists/abductor/machinery/camera.dm similarity index 99% rename from code/game/gamemodes/miniantags/abduction/machinery/camera.dm rename to code/modules/antagonists/abductor/machinery/camera.dm index fd9ca0a658..b5e979033d 100644 --- a/code/game/gamemodes/miniantags/abduction/machinery/camera.dm +++ b/code/modules/antagonists/abductor/machinery/camera.dm @@ -9,7 +9,7 @@ var/datum/action/innate/vest_disguise_swap/vest_disguise_action = new var/datum/action/innate/set_droppoint/set_droppoint_action = new var/obj/machinery/abductor/console/console - station_lock_override = TRUE + lock_override = TRUE icon = 'icons/obj/abductor.dmi' icon_state = "camera" diff --git a/code/game/gamemodes/miniantags/abduction/machinery/console.dm b/code/modules/antagonists/abductor/machinery/console.dm similarity index 100% rename from code/game/gamemodes/miniantags/abduction/machinery/console.dm rename to code/modules/antagonists/abductor/machinery/console.dm diff --git a/code/game/gamemodes/miniantags/abduction/machinery/dispenser.dm b/code/modules/antagonists/abductor/machinery/dispenser.dm similarity index 100% rename from code/game/gamemodes/miniantags/abduction/machinery/dispenser.dm rename to code/modules/antagonists/abductor/machinery/dispenser.dm diff --git a/code/game/gamemodes/miniantags/abduction/machinery/experiment.dm b/code/modules/antagonists/abductor/machinery/experiment.dm similarity index 100% rename from code/game/gamemodes/miniantags/abduction/machinery/experiment.dm rename to code/modules/antagonists/abductor/machinery/experiment.dm diff --git a/code/game/gamemodes/miniantags/abduction/machinery/pad.dm b/code/modules/antagonists/abductor/machinery/pad.dm similarity index 100% rename from code/game/gamemodes/miniantags/abduction/machinery/pad.dm rename to code/modules/antagonists/abductor/machinery/pad.dm diff --git a/code/modules/antagonists/blob/blob.dm b/code/modules/antagonists/blob/blob.dm new file mode 100644 index 0000000000..964bc99311 --- /dev/null +++ b/code/modules/antagonists/blob/blob.dm @@ -0,0 +1,67 @@ +/datum/antagonist/blob + name = "Blob" + roundend_category = "blobs" + antagpanel_category = "Blob" + job_rank = ROLE_BLOB + + var/datum/action/innate/blobpop/pop_action + var/starting_points_human_blob = 60 + var/point_rate_human_blob = 2 + +/datum/antagonist/blob/roundend_report() + var/basic_report = ..() + //Display max blobpoints for blebs that lost + if(isovermind(owner.current)) //embarrasing if not + var/mob/camera/blob/overmind = owner.current + if(!overmind.victory_in_progress) //if it won this doesn't really matter + var/point_report = "
[owner.name] took over [overmind.max_count] tiles at the height of its growth." + return basic_report+point_report + return basic_report + +/datum/antagonist/blob/greet() + if(!isovermind(owner.current)) + to_chat(owner,"You feel bloated.") + +/datum/antagonist/blob/on_gain() + create_objectives() + . = ..() + +/datum/antagonist/blob/proc/create_objectives() + var/datum/objective/blob_takeover/main = new + main.owner = owner + objectives += main + owner.objectives |= objectives + +/datum/antagonist/blob/apply_innate_effects(mob/living/mob_override) + if(!isovermind(owner.current)) + if(!pop_action) + pop_action = new + pop_action.Grant(owner.current) + +/datum/objective/blob_takeover + explanation_text = "Reach critical mass!" + +//Non-overminds get this on blob antag assignment +/datum/action/innate/blobpop + name = "Pop" + desc = "Unleash the blob" + icon_icon = 'icons/mob/blob.dmi' + button_icon_state = "blob" + +/datum/action/innate/blobpop/Activate() + var/mob/old_body = owner + var/datum/antagonist/blob/blobtag = owner.mind.has_antag_datum(/datum/antagonist/blob) + if(!blobtag) + Remove() + return + var/mob/camera/blob/B = new /mob/camera/blob(get_turf(old_body), blobtag.starting_points_human_blob) + owner.mind.transfer_to(B) + old_body.gib() + B.place_blob_core(blobtag.point_rate_human_blob, pop_override = TRUE) + +/datum/antagonist/blob/antag_listing_status() + . = ..() + if(owner && owner.current) + var/mob/camera/blob/B = owner.current + if(istype(B)) + . += "(Progress: [B.blobs_legit.len]/[B.blobwincount])" \ No newline at end of file diff --git a/code/game/gamemodes/blob/blob_report.dm b/code/modules/antagonists/blob/blob/blob_report.dm similarity index 100% rename from code/game/gamemodes/blob/blob_report.dm rename to code/modules/antagonists/blob/blob/blob_report.dm diff --git a/code/game/gamemodes/blob/blobs/blob_mobs.dm b/code/modules/antagonists/blob/blob/blobs/blob_mobs.dm similarity index 98% rename from code/game/gamemodes/blob/blobs/blob_mobs.dm rename to code/modules/antagonists/blob/blob/blobs/blob_mobs.dm index 9e4bf51d41..a31c0e02e6 100644 --- a/code/game/gamemodes/blob/blobs/blob_mobs.dm +++ b/code/modules/antagonists/blob/blob/blobs/blob_mobs.dm @@ -115,8 +115,7 @@ is_zombie = 1 if(H.wear_suit) var/obj/item/clothing/suit/armor/A = H.wear_suit - if(A.armor && A.armor["melee"]) - maxHealth += A.armor["melee"] //That zombie's got armor, I want armor! + maxHealth += A.armor.melee //That zombie's got armor, I want armor! maxHealth += 40 health = maxHealth name = "blob zombie" diff --git a/code/game/gamemodes/blob/blobs/core.dm b/code/modules/antagonists/blob/blob/blobs/core.dm similarity index 100% rename from code/game/gamemodes/blob/blobs/core.dm rename to code/modules/antagonists/blob/blob/blobs/core.dm diff --git a/code/game/gamemodes/blob/blobs/factory.dm b/code/modules/antagonists/blob/blob/blobs/factory.dm similarity index 100% rename from code/game/gamemodes/blob/blobs/factory.dm rename to code/modules/antagonists/blob/blob/blobs/factory.dm diff --git a/code/game/gamemodes/blob/blobs/node.dm b/code/modules/antagonists/blob/blob/blobs/node.dm similarity index 100% rename from code/game/gamemodes/blob/blobs/node.dm rename to code/modules/antagonists/blob/blob/blobs/node.dm diff --git a/code/game/gamemodes/blob/blobs/resource.dm b/code/modules/antagonists/blob/blob/blobs/resource.dm similarity index 100% rename from code/game/gamemodes/blob/blobs/resource.dm rename to code/modules/antagonists/blob/blob/blobs/resource.dm diff --git a/code/game/gamemodes/blob/blobs/shield.dm b/code/modules/antagonists/blob/blob/blobs/shield.dm similarity index 100% rename from code/game/gamemodes/blob/blobs/shield.dm rename to code/modules/antagonists/blob/blob/blobs/shield.dm diff --git a/code/game/gamemodes/blob/overmind.dm b/code/modules/antagonists/blob/blob/overmind.dm similarity index 100% rename from code/game/gamemodes/blob/overmind.dm rename to code/modules/antagonists/blob/blob/overmind.dm diff --git a/code/game/gamemodes/blob/powers.dm b/code/modules/antagonists/blob/blob/powers.dm similarity index 100% rename from code/game/gamemodes/blob/powers.dm rename to code/modules/antagonists/blob/blob/powers.dm diff --git a/code/game/gamemodes/blob/theblob.dm b/code/modules/antagonists/blob/blob/theblob.dm similarity index 99% rename from code/game/gamemodes/blob/theblob.dm rename to code/modules/antagonists/blob/blob/theblob.dm index b9a8ee6046..f878e519ba 100644 --- a/code/game/gamemodes/blob/theblob.dm +++ b/code/modules/antagonists/blob/blob/theblob.dm @@ -275,7 +275,7 @@ return 0 var/armor_protection = 0 if(damage_flag) - armor_protection = armor[damage_flag] + armor_protection = armor.getRating(damage_flag) damage_amount = round(damage_amount * (100 - armor_protection)*0.01, 0.1) if(overmind && damage_flag) damage_amount = overmind.blob_reagent_datum.damage_reaction(src, damage_amount, damage_type, damage_flag) diff --git a/code/game/gamemodes/miniantags/borer/borer.dm b/code/modules/antagonists/borer/borer.dm similarity index 100% rename from code/game/gamemodes/miniantags/borer/borer.dm rename to code/modules/antagonists/borer/borer.dm diff --git a/code/game/gamemodes/miniantags/borer/borer_chemicals.dm b/code/modules/antagonists/borer/borer_chemicals.dm similarity index 100% rename from code/game/gamemodes/miniantags/borer/borer_chemicals.dm rename to code/modules/antagonists/borer/borer_chemicals.dm diff --git a/code/game/gamemodes/miniantags/borer/borer_event.dm b/code/modules/antagonists/borer/borer_event.dm similarity index 100% rename from code/game/gamemodes/miniantags/borer/borer_event.dm rename to code/modules/antagonists/borer/borer_event.dm diff --git a/code/game/gamemodes/miniantags/borer/borer_html.dm b/code/modules/antagonists/borer/borer_html.dm similarity index 100% rename from code/game/gamemodes/miniantags/borer/borer_html.dm rename to code/modules/antagonists/borer/borer_html.dm diff --git a/code/game/gamemodes/miniantags/borer/borer_topic.dm b/code/modules/antagonists/borer/borer_topic.dm similarity index 100% rename from code/game/gamemodes/miniantags/borer/borer_topic.dm rename to code/modules/antagonists/borer/borer_topic.dm diff --git a/code/game/gamemodes/miniantags/borer/syndi_borer.dm b/code/modules/antagonists/borer/syndi_borer.dm similarity index 100% rename from code/game/gamemodes/miniantags/borer/syndi_borer.dm rename to code/modules/antagonists/borer/syndi_borer.dm diff --git a/code/modules/antagonists/brother/brother.dm b/code/modules/antagonists/brother/brother.dm new file mode 100644 index 0000000000..f692335ee1 --- /dev/null +++ b/code/modules/antagonists/brother/brother.dm @@ -0,0 +1,154 @@ +/datum/antagonist/brother + name = "Brother" + antagpanel_category = "Brother" + job_rank = ROLE_BROTHER + var/special_role = "blood brother" + var/datum/team/brother_team/team + +/datum/antagonist/brother/create_team(datum/team/brother_team/new_team) + if(!new_team) + return + if(!istype(new_team)) + stack_trace("Wrong team type passed to [type] initialization.") + team = new_team + +/datum/antagonist/brother/get_team() + return team + +/datum/antagonist/brother/on_gain() + SSticker.mode.brothers += owner + objectives += team.objectives + owner.objectives += objectives + owner.special_role = special_role + finalize_brother() + return ..() + +/datum/antagonist/brother/on_removal() + SSticker.mode.brothers -= owner + owner.objectives -= objectives + if(owner.current) + to_chat(owner.current,"You are no longer the [special_role]!") + owner.special_role = null + return ..() + +/datum/antagonist/brother/proc/give_meeting_area() + if(!owner.current || !team || !team.meeting_area) + return + to_chat(owner.current, "Your designated meeting area: [team.meeting_area]") + antag_memory += "Meeting Area: [team.meeting_area]
" + +/datum/antagonist/brother/greet() + var/brother_text = "" + var/list/brothers = team.members - owner + for(var/i = 1 to brothers.len) + var/datum/mind/M = brothers[i] + brother_text += M.name + if(i == brothers.len - 1) + brother_text += " and " + else if(i != brothers.len) + brother_text += ", " + to_chat(owner.current, "You are the [owner.special_role] of [brother_text].") + to_chat(owner.current, "The Syndicate only accepts those that have proven themself. Prove yourself and prove your [team.member_name]s by completing your objectives together!") + owner.announce_objectives() + give_meeting_area() + +/datum/antagonist/brother/proc/finalize_brother() + SSticker.mode.update_brother_icons_added(owner) + +/datum/antagonist/brother/admin_add(datum/mind/new_owner,mob/admin) + //show list of possible brothers + var/list/candidates = list() + for(var/mob/living/L in GLOB.alive_mob_list) + if(!L.mind || L.mind == new_owner || !can_be_owned(L.mind)) + continue + candidates[L.mind.name] = L.mind + + var/choice = input(admin,"Choose the blood brother.", "Brother") as null|anything in candidates + if(!choice) + return + var/datum/mind/bro = candidates[choice] + var/datum/team/brother_team/T = new + T.add_member(new_owner) + T.add_member(bro) + T.pick_meeting_area() + T.forge_brother_objectives() + new_owner.add_antag_datum(/datum/antagonist/brother,T) + bro.add_antag_datum(/datum/antagonist/brother, T) + T.update_name() + message_admins("[key_name_admin(admin)] made [new_owner.current] and [bro.current] into blood brothers.") + log_admin("[key_name(admin)] made [new_owner.current] and [bro.current] into blood brothers.") + +/datum/team/brother_team + name = "brotherhood" + member_name = "blood brother" + var/meeting_area + var/static/meeting_areas = list("The Bar", "Dorms", "Escape Dock", "Arrivals", "Holodeck", "Primary Tool Storage", "Recreation Area", "Chapel", "Library") + +/datum/team/brother_team/is_solo() + return FALSE + +/datum/team/brother_team/proc/pick_meeting_area() + meeting_area = pick(meeting_areas) + meeting_areas -= meeting_area + +/datum/team/brother_team/proc/update_name() + var/list/last_names = list() + for(var/datum/mind/M in members) + var/list/split_name = splittext(M.name," ") + last_names += split_name[split_name.len] + + name = last_names.Join(" & ") + +/datum/team/brother_team/roundend_report() + var/list/parts = list() + + parts += "The blood brothers of [name] were:" + for(var/datum/mind/M in members) + parts += printplayer(M) + var/win = TRUE + var/objective_count = 1 + for(var/datum/objective/objective in objectives) + if(objective.check_completion()) + parts += "Objective #[objective_count]: [objective.explanation_text] Success!" + else + parts += "Objective #[objective_count]: [objective.explanation_text] Fail." + win = FALSE + objective_count++ + if(win) + parts += "The blood brothers were successful!" + else + parts += "The blood brothers have failed!" + + return "
[parts.Join("
")]
" + +/datum/team/brother_team/proc/add_objective(datum/objective/O, needs_target = FALSE) + O.team = src + if(needs_target) + O.find_target() + O.update_explanation_text() + objectives += O + +/datum/team/brother_team/proc/forge_brother_objectives() + objectives = list() + var/is_hijacker = prob(10) + for(var/i = 1 to max(1, CONFIG_GET(number/brother_objectives_amount) + (members.len > 2) - is_hijacker)) + forge_single_objective() + if(is_hijacker) + if(!locate(/datum/objective/hijack) in objectives) + add_objective(new/datum/objective/hijack) + else if(!locate(/datum/objective/escape) in objectives) + add_objective(new/datum/objective/escape) + +/datum/team/brother_team/proc/forge_single_objective() + if(prob(50)) + if(LAZYLEN(active_ais()) && prob(100/GLOB.joined_player_list.len)) + add_objective(new/datum/objective/destroy, TRUE) + else if(prob(30)) + add_objective(new/datum/objective/maroon, TRUE) + else + add_objective(new/datum/objective/assassinate, TRUE) + else + add_objective(new/datum/objective/steal, TRUE) + +/datum/team/brother_team/antag_listing_name() + return "[name] blood brothers" \ No newline at end of file diff --git a/code/game/gamemodes/changeling/cellular_emporium.dm b/code/modules/antagonists/changeling/cellular_emporium.dm similarity index 100% rename from code/game/gamemodes/changeling/cellular_emporium.dm rename to code/modules/antagonists/changeling/cellular_emporium.dm diff --git a/code/modules/antagonists/changeling/changeling.dm b/code/modules/antagonists/changeling/changeling.dm new file mode 100644 index 0000000000..c15b655da9 --- /dev/null +++ b/code/modules/antagonists/changeling/changeling.dm @@ -0,0 +1,538 @@ +#define LING_FAKEDEATH_TIME 400 //40 seconds +#define LING_DEAD_GENETICDAMAGE_HEAL_CAP 50 //The lowest value of geneticdamage handle_changeling() can take it to while dead. +#define LING_ABSORB_RECENT_SPEECH 8 //The amount of recent spoken lines to gain on absorbing a mob + +/datum/antagonist/changeling + name = "Changeling" + roundend_category = "changelings" + antagpanel_category = "Changeling" + job_rank = ROLE_CHANGELING + + var/you_are_greet = TRUE + var/give_objectives = TRUE + var/team_mode = FALSE //Should assign team objectives ? + + //Changeling Stuff + + var/list/stored_profiles = list() //list of datum/changelingprofile + var/datum/changelingprofile/first_prof = null + var/dna_max = 6 //How many extra DNA strands the changeling can store for transformation. + var/absorbedcount = 0 + var/chem_charges = 20 + var/chem_storage = 75 + var/chem_recharge_rate = 1 + var/chem_recharge_slowdown = 0 + var/sting_range = 2 + var/changelingID = "Changeling" + var/geneticdamage = 0 + var/isabsorbing = 0 + var/islinking = 0 + var/geneticpoints = 10 + var/purchasedpowers = list() + var/mimicing = "" + var/canrespec = 0 + var/changeling_speak = 0 + var/datum/dna/chosen_dna + var/obj/effect/proc_holder/changeling/sting/chosen_sting + var/datum/cellular_emporium/cellular_emporium + var/datum/action/innate/cellular_emporium/emporium_action + + // wip stuff + var/static/list/all_powers = typecacheof(/obj/effect/proc_holder/changeling,TRUE) + + +/datum/antagonist/changeling/Destroy() + QDEL_NULL(cellular_emporium) + QDEL_NULL(emporium_action) + . = ..() + +/datum/antagonist/changeling/proc/generate_name() + var/honorific + if(owner.current.gender == FEMALE) + honorific = "Ms." + else + honorific = "Mr." + if(GLOB.possible_changeling_IDs.len) + changelingID = pick(GLOB.possible_changeling_IDs) + GLOB.possible_changeling_IDs -= changelingID + changelingID = "[honorific] [changelingID]" + else + changelingID = "[honorific] [rand(1,999)]" + +/datum/antagonist/changeling/proc/create_actions() + cellular_emporium = new(src) + emporium_action = new(cellular_emporium) + +/datum/antagonist/changeling/on_gain() + generate_name() + create_actions() + reset_powers() + create_initial_profile() + if(give_objectives) + if(team_mode) + forge_team_objectives() + forge_objectives() + remove_clownmut() + . = ..() + +/datum/antagonist/changeling/on_removal() + remove_changeling_powers() + owner.objectives -= objectives + . = ..() + +/datum/antagonist/changeling/proc/remove_clownmut() + if (owner) + var/mob/living/carbon/human/H = owner.current + if(istype(H) && owner.assigned_role == "Clown") + to_chat(H, "You have evolved beyond your clownish nature, allowing you to wield weapons without harming yourself.") + H.dna.remove_mutation(CLOWNMUT) + +/datum/antagonist/changeling/proc/reset_properties() + changeling_speak = 0 + chosen_sting = null + geneticpoints = initial(geneticpoints) + sting_range = initial(sting_range) + chem_storage = initial(chem_storage) + chem_recharge_rate = initial(chem_recharge_rate) + chem_charges = min(chem_charges, chem_storage) + chem_recharge_slowdown = initial(chem_recharge_slowdown) + mimicing = "" + +/datum/antagonist/changeling/proc/remove_changeling_powers() + if(ishuman(owner.current) || ismonkey(owner.current)) + reset_properties() + for(var/obj/effect/proc_holder/changeling/p in purchasedpowers) + if(p.always_keep) + continue + purchasedpowers -= p + p.on_refund(owner.current) + + //MOVE THIS + if(owner.current.hud_used) + owner.current.hud_used.lingstingdisplay.icon_state = null + owner.current.hud_used.lingstingdisplay.invisibility = INVISIBILITY_ABSTRACT + +/datum/antagonist/changeling/proc/reset_powers() + if(purchasedpowers) + remove_changeling_powers() + //Repurchase free powers. + for(var/path in all_powers) + var/obj/effect/proc_holder/changeling/S = new path() + if(!S.dna_cost) + if(!has_sting(S)) + purchasedpowers += S + S.on_purchase(owner.current,TRUE) + +/datum/antagonist/changeling/proc/has_sting(obj/effect/proc_holder/changeling/power) + for(var/obj/effect/proc_holder/changeling/P in purchasedpowers) + if(initial(power.name) == P.name) + return TRUE + return FALSE + + +/datum/antagonist/changeling/proc/purchase_power(sting_name) + var/obj/effect/proc_holder/changeling/thepower = null + + for(var/path in all_powers) + var/obj/effect/proc_holder/changeling/S = path + if(initial(S.name) == sting_name) + thepower = new path() + break + + if(!thepower) + to_chat(owner.current, "This is awkward. Changeling power purchase failed, please report this bug to a coder!") + return + + if(absorbedcount < thepower.req_dna) + to_chat(owner.current, "We lack the energy to evolve this ability!") + return + + if(has_sting(thepower)) + to_chat(owner.current, "We have already evolved this ability!") + return + + if(thepower.dna_cost < 0) + to_chat(owner.current, "We cannot evolve this ability.") + return + + if(geneticpoints < thepower.dna_cost) + to_chat(owner.current, "We have reached our capacity for abilities.") + return + + if(owner.current.has_trait(TRAIT_FAKEDEATH))//To avoid potential exploits by buying new powers while in stasis, which clears your verblist. + to_chat(owner.current, "We lack the energy to evolve new abilities right now.") + return + + geneticpoints -= thepower.dna_cost + purchasedpowers += thepower + thepower.on_purchase(owner.current) + +/datum/antagonist/changeling/proc/readapt() + if(!ishuman(owner.current)) + to_chat(owner.current, "We can't remove our evolutions in this form!") + return + if(canrespec) + to_chat(owner.current, "We have removed our evolutions from this form, and are now ready to readapt.") + reset_powers() + canrespec = 0 + SSblackbox.record_feedback("tally", "changeling_power_purchase", 1, "Readapt") + return 1 + else + to_chat(owner.current, "You lack the power to readapt your evolutions!") + return 0 + +//Called in life() +/datum/antagonist/changeling/proc/regenerate() + var/mob/living/carbon/the_ling = owner.current + if(istype(the_ling)) + emporium_action.Grant(the_ling) + if(the_ling.stat == DEAD) + chem_charges = min(max(0, chem_charges + chem_recharge_rate - chem_recharge_slowdown), (chem_storage*0.5)) + geneticdamage = max(LING_DEAD_GENETICDAMAGE_HEAL_CAP,geneticdamage-1) + 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) + + +/datum/antagonist/changeling/proc/get_dna(dna_owner) + for(var/datum/changelingprofile/prof in stored_profiles) + if(dna_owner == prof.name) + return prof + +/datum/antagonist/changeling/proc/has_dna(datum/dna/tDNA) + for(var/datum/changelingprofile/prof in stored_profiles) + if(tDNA.is_same_as(prof.dna)) + return TRUE + return FALSE + +/datum/antagonist/changeling/proc/can_absorb_dna(mob/living/carbon/human/target, var/verbose=1) + var/mob/living/carbon/user = owner.current + if(!istype(user)) + return + if(stored_profiles.len) + var/datum/changelingprofile/prof = stored_profiles[1] + if(prof.dna == user.dna && stored_profiles.len >= dna_max)//If our current DNA is the stalest, we gotta ditch it. + if(verbose) + to_chat(user, "We have reached our capacity to store genetic information! We must transform before absorbing more.") + return + if(!target) + return + if(NO_DNA_COPY in target.dna.species.species_traits) + if(verbose) + to_chat(user, "[target] is not compatible with our biology.") + return + if((target.has_trait(TRAIT_NOCLONE)) || (target.has_trait(TRAIT_NOCLONE))) + if(verbose) + to_chat(user, "DNA of [target] is ruined beyond usability!") + return + if(!ishuman(target))//Absorbing monkeys is entirely possible, but it can cause issues with transforming. That's what lesser form is for anyway! + if(verbose) + to_chat(user, "We could gain no benefit from absorbing a lesser creature.") + return + if(has_dna(target.dna)) + if(verbose) + to_chat(user, "We already have this DNA in storage!") + return + if(!target.has_dna()) + if(verbose) + to_chat(user, "[target] is not compatible with our biology.") + return + return 1 + + +/datum/antagonist/changeling/proc/create_profile(mob/living/carbon/human/H, protect = 0) + var/datum/changelingprofile/prof = new + + H.dna.real_name = H.real_name //Set this again, just to be sure that it's properly set. + var/datum/dna/new_dna = new H.dna.type + H.dna.copy_dna(new_dna) + prof.dna = new_dna + prof.name = H.real_name + prof.protected = protect + + prof.underwear = H.underwear + prof.undershirt = H.undershirt + prof.socks = H.socks + + var/list/slots = list("head", "wear_mask", "back", "wear_suit", "w_uniform", "shoes", "belt", "gloves", "glasses", "ears", "wear_id", "s_store") + for(var/slot in slots) + if(slot in H.vars) + var/obj/item/I = H.vars[slot] + if(!I) + continue + prof.name_list[slot] = I.name + prof.appearance_list[slot] = I.appearance + prof.flags_cover_list[slot] = I.flags_cover + prof.item_color_list[slot] = I.item_color + prof.item_state_list[slot] = I.item_state + prof.exists_list[slot] = 1 + else + continue + + return prof + +/datum/antagonist/changeling/proc/add_profile(datum/changelingprofile/prof) + if(stored_profiles.len > dna_max) + if(!push_out_profile()) + return + + if(!first_prof) + first_prof = prof + + stored_profiles += prof + absorbedcount++ + +/datum/antagonist/changeling/proc/add_new_profile(mob/living/carbon/human/H, protect = 0) + var/datum/changelingprofile/prof = create_profile(H, protect) + add_profile(prof) + return prof + +/datum/antagonist/changeling/proc/remove_profile(mob/living/carbon/human/H, force = 0) + for(var/datum/changelingprofile/prof in stored_profiles) + if(H.real_name == prof.name) + if(prof.protected && !force) + continue + stored_profiles -= prof + qdel(prof) + +/datum/antagonist/changeling/proc/get_profile_to_remove() + for(var/datum/changelingprofile/prof in stored_profiles) + if(!prof.protected) + return prof + +/datum/antagonist/changeling/proc/push_out_profile() + var/datum/changelingprofile/removeprofile = get_profile_to_remove() + if(removeprofile) + stored_profiles -= removeprofile + return 1 + return 0 + + +/datum/antagonist/changeling/proc/create_initial_profile() + var/mob/living/carbon/C = owner.current //only carbons have dna now, so we have to typecaste + if(ishuman(C)) + add_new_profile(C) + +/datum/antagonist/changeling/apply_innate_effects() + //Brains optional. + var/mob/living/carbon/C = owner.current + if(istype(C)) + var/obj/item/organ/brain/B = C.getorganslot(ORGAN_SLOT_BRAIN) + if(B) + B.vital = FALSE + B.decoy_override = TRUE + update_changeling_icons_added() + return + +/datum/antagonist/changeling/remove_innate_effects() + update_changeling_icons_removed() + return + + +/datum/antagonist/changeling/greet() + if (you_are_greet) + to_chat(owner.current, "You are [changelingID], a changeling! You have absorbed and taken the form of a human.") + to_chat(owner.current, "Use say \":g message\" to communicate with your fellow changelings.") + to_chat(owner.current, "You must complete the following tasks:") + owner.current.playsound_local(get_turf(owner.current), 'sound/ambience/antag/ling_aler.ogg', 100, FALSE, pressure_affected = FALSE) + + owner.announce_objectives() + +/datum/antagonist/changeling/farewell() + to_chat(owner.current, "You grow weak and lose your powers! You are no longer a changeling and are stuck in your current form!") + +/datum/antagonist/changeling/proc/forge_team_objectives() + if(GLOB.changeling_team_objective_type) + var/datum/objective/changeling_team_objective/team_objective = new GLOB.changeling_team_objective_type + team_objective.owner = owner + objectives += team_objective + return + +/datum/antagonist/changeling/proc/forge_objectives() + //OBJECTIVES - random traitor objectives. Unique objectives "steal brain" and "identity theft". + //No escape alone because changelings aren't suited for it and it'd probably just lead to rampant robusting + //If it seems like they'd be able to do it in play, add a 10% chance to have to escape alone + + var/escape_objective_possible = TRUE + + //if there's a team objective, check if it's compatible with escape objectives + for(var/datum/objective/changeling_team_objective/CTO in objectives) + if(!CTO.escape_objective_compatible) + escape_objective_possible = FALSE + break + + var/datum/objective/absorb/absorb_objective = new + absorb_objective.owner = owner + absorb_objective.gen_amount_goal(6, 8) + objectives += absorb_objective + + if(prob(60)) + if(prob(85)) + var/datum/objective/steal/steal_objective = new + steal_objective.owner = owner + steal_objective.find_target() + objectives += steal_objective + else + var/datum/objective/download/download_objective = new + download_objective.owner = owner + download_objective.gen_amount_goal() + objectives += download_objective + + var/list/active_ais = active_ais() + if(active_ais.len && prob(100/GLOB.joined_player_list.len)) + var/datum/objective/destroy/destroy_objective = new + destroy_objective.owner = owner + destroy_objective.find_target() + objectives += destroy_objective + else + if(prob(70)) + var/datum/objective/assassinate/kill_objective = new + kill_objective.owner = owner + if(team_mode) //No backstabbing while in a team + kill_objective.find_target_by_role(role = "Changeling", role_type = 1, invert = 1) + else + kill_objective.find_target() + objectives += kill_objective + else + var/datum/objective/maroon/maroon_objective = new + maroon_objective.owner = owner + if(team_mode) + maroon_objective.find_target_by_role(role = "Changeling", role_type = 1, invert = 1) + else + maroon_objective.find_target() + objectives += maroon_objective + + if (!(locate(/datum/objective/escape) in objectives) && escape_objective_possible) + var/datum/objective/escape/escape_with_identity/identity_theft = new + identity_theft.owner = owner + identity_theft.target = maroon_objective.target + identity_theft.update_explanation_text() + objectives += identity_theft + escape_objective_possible = FALSE + + if (!(locate(/datum/objective/escape) in objectives) && escape_objective_possible) + if(prob(50)) + var/datum/objective/escape/escape_objective = new + escape_objective.owner = owner + objectives += escape_objective + else + var/datum/objective/escape/escape_with_identity/identity_theft = new + identity_theft.owner = owner + if(team_mode) + identity_theft.find_target_by_role(role = "Changeling", role_type = 1, invert = 1) + else + identity_theft.find_target() + objectives += identity_theft + escape_objective_possible = FALSE + + owner.objectives |= objectives + +/datum/antagonist/changeling/proc/update_changeling_icons_added() + var/datum/atom_hud/antag/hud = GLOB.huds[ANTAG_HUD_CHANGELING] + hud.join_hud(owner.current) + set_antag_hud(owner.current, "changling") + +/datum/antagonist/changeling/proc/update_changeling_icons_removed() + var/datum/atom_hud/antag/hud = GLOB.huds[ANTAG_HUD_CHANGELING] + hud.leave_hud(owner.current) + set_antag_hud(owner.current, null) + +/datum/antagonist/changeling/admin_add(datum/mind/new_owner,mob/admin) + . = ..() + to_chat(new_owner.current, "Our powers have awoken. A flash of memory returns to us...we are [changelingID], a changeling!") + +/datum/antagonist/changeling/get_admin_commands() + . = ..() + if(stored_profiles.len && (owner.current.real_name != first_prof.name)) + .["Transform to initial appearance."] = CALLBACK(src,.proc/admin_restore_appearance) + +/datum/antagonist/changeling/proc/admin_restore_appearance(mob/admin) + if(!stored_profiles.len || !iscarbon(owner.current)) + to_chat(admin, "Resetting DNA failed!") + else + var/mob/living/carbon/C = owner.current + first_prof.dna.transfer_identity(C, transfer_SE=1) + C.real_name = first_prof.name + C.updateappearance(mutcolor_update=1) + C.domutcheck() + +// Profile + +/datum/changelingprofile + var/name = "a bug" + + var/protected = 0 + + var/datum/dna/dna = null + var/list/name_list = list() //associative list of slotname = itemname + var/list/appearance_list = list() + var/list/flags_cover_list = list() + var/list/exists_list = list() + var/list/item_color_list = list() + var/list/item_state_list = list() + + var/underwear + var/undershirt + var/socks + +/datum/changelingprofile/Destroy() + qdel(dna) + . = ..() + +/datum/changelingprofile/proc/copy_profile(datum/changelingprofile/newprofile) + newprofile.name = name + newprofile.protected = protected + newprofile.dna = new dna.type + dna.copy_dna(newprofile.dna) + newprofile.name_list = name_list.Copy() + newprofile.appearance_list = appearance_list.Copy() + newprofile.flags_cover_list = flags_cover_list.Copy() + newprofile.exists_list = exists_list.Copy() + newprofile.item_color_list = item_color_list.Copy() + newprofile.item_state_list = item_state_list.Copy() + newprofile.underwear = underwear + newprofile.undershirt = undershirt + newprofile.socks = socks + + +/datum/antagonist/changeling/xenobio + name = "Xenobio Changeling" + give_objectives = FALSE + show_in_roundend = FALSE //These are here for admin tracking purposes only + you_are_greet = FALSE + +/datum/antagonist/changeling/roundend_report() + var/list/parts = list() + + var/changelingwin = 1 + if(!owner.current) + changelingwin = 0 + + parts += printplayer(owner) + + //Removed sanity if(changeling) because we -want- a runtime to inform us that the changelings list is incorrect and needs to be fixed. + parts += "Changeling ID: [changelingID]." + parts += "Genomes Extracted: [absorbedcount]" + parts += " " + if(objectives.len) + var/count = 1 + for(var/datum/objective/objective in objectives) + if(objective.check_completion()) + parts += "Objective #[count]: [objective.explanation_text] Success!
" + else + parts += "Objective #[count]: [objective.explanation_text] Fail." + changelingwin = 0 + count++ + + if(changelingwin) + parts += "The changeling was successful!" + else + parts += "The changeling has failed." + + return parts.Join("
") + +/datum/antagonist/changeling/antag_listing_name() + return ..() + "([changelingID])" + +/datum/antagonist/changeling/xenobio/antag_listing_name() + return ..() + "(Xenobio)" \ No newline at end of file diff --git a/code/game/gamemodes/changeling/changeling_power.dm b/code/modules/antagonists/changeling/changeling_power.dm similarity index 93% rename from code/game/gamemodes/changeling/changeling_power.dm rename to code/modules/antagonists/changeling/changeling_power.dm index 5b07e0e369..0b4f015824 100644 --- a/code/game/gamemodes/changeling/changeling_power.dm +++ b/code/modules/antagonists/changeling/changeling_power.dm @@ -1,78 +1,78 @@ -/* - * Don't use the apostrophe in name or desc. Causes script errors. - * TODO: combine atleast some of the functionality with /proc_holder/spell - */ - -/obj/effect/proc_holder/changeling - panel = "Changeling" - name = "Prototype Sting" - desc = "" // Fluff - var/helptext = "" // Details - var/chemical_cost = 0 // negative chemical cost is for passive abilities (chemical glands) - var/dna_cost = -1 //cost of the sting in dna points. 0 = auto-purchase, -1 = cannot be purchased - var/req_dna = 0 //amount of dna needed to use this ability. Changelings always have atleast 1 - var/req_human = 0 //if you need to be human to use this ability - var/req_stat = CONSCIOUS // CONSCIOUS, UNCONSCIOUS or DEAD - var/always_keep = 0 // important for abilities like revive that screw you if you lose them. - var/ignores_fakedeath = FALSE // usable with the FAKEDEATH flag - - -/obj/effect/proc_holder/changeling/proc/on_purchase(mob/user, is_respec) - if(!is_respec) - SSblackbox.record_feedback("tally", "changeling_power_purchase", 1, name) - -/obj/effect/proc_holder/changeling/proc/on_refund(mob/user) - return - -/obj/effect/proc_holder/changeling/Click() - var/mob/user = usr - if(!user || !user.mind || !user.mind.has_antag_datum(/datum/antagonist/changeling)) - return - try_to_sting(user) - -/obj/effect/proc_holder/changeling/proc/try_to_sting(mob/user, mob/target) - if(!can_sting(user, target)) - return - var/datum/antagonist/changeling/c = user.mind.has_antag_datum(/datum/antagonist/changeling) - if(sting_action(user, target)) - SSblackbox.record_feedback("nested tally", "changeling_powers", 1, list("[name]")) - sting_feedback(user, target) - c.chem_charges -= chemical_cost - -/obj/effect/proc_holder/changeling/proc/sting_action(mob/user, mob/target) - return 0 - -/obj/effect/proc_holder/changeling/proc/sting_feedback(mob/user, mob/target) - return 0 - -//Fairly important to remember to return 1 on success >.< -/obj/effect/proc_holder/changeling/proc/can_sting(mob/user, mob/target) - if(!ishuman(user) && !ismonkey(user)) //typecast everything from mob to carbon from this point onwards - return 0 - if(req_human && !ishuman(user)) - to_chat(user, "We cannot do that in this form!") - return 0 - var/datum/antagonist/changeling/c = user.mind.has_antag_datum(/datum/antagonist/changeling) - if(c.chem_charges < chemical_cost) - to_chat(user, "We require at least [chemical_cost] unit\s of chemicals to do that!") - return 0 - if(c.absorbedcount < req_dna) - to_chat(user, "We require at least [req_dna] sample\s of compatible DNA.") - return 0 - if(req_stat < user.stat) - to_chat(user, "We are incapacitated.") - return 0 - if((user.status_flags & FAKEDEATH) && (!ignores_fakedeath)) - to_chat(user, "We are incapacitated.") - return 0 - return 1 - -//used in /mob/Stat() -/obj/effect/proc_holder/changeling/proc/can_be_used_by(mob/user) - if(!user || QDELETED(user)) - return 0 - if(!ishuman(user) && !ismonkey(user)) - return 0 - if(req_human && !ishuman(user)) - return 0 - return 1 +/* + * Don't use the apostrophe in name or desc. Causes script errors. + * TODO: combine atleast some of the functionality with /proc_holder/spell + */ + +/obj/effect/proc_holder/changeling + panel = "Changeling" + name = "Prototype Sting" + desc = "" // Fluff + var/helptext = "" // Details + var/chemical_cost = 0 // negative chemical cost is for passive abilities (chemical glands) + var/dna_cost = -1 //cost of the sting in dna points. 0 = auto-purchase, -1 = cannot be purchased + var/req_dna = 0 //amount of dna needed to use this ability. Changelings always have atleast 1 + var/req_human = 0 //if you need to be human to use this ability + var/req_stat = CONSCIOUS // CONSCIOUS, UNCONSCIOUS or DEAD + var/always_keep = 0 // important for abilities like revive that screw you if you lose them. + var/ignores_fakedeath = FALSE // usable with the FAKEDEATH flag + + +/obj/effect/proc_holder/changeling/proc/on_purchase(mob/user, is_respec) + if(!is_respec) + SSblackbox.record_feedback("tally", "changeling_power_purchase", 1, name) + +/obj/effect/proc_holder/changeling/proc/on_refund(mob/user) + return + +/obj/effect/proc_holder/changeling/Click() + var/mob/user = usr + if(!user || !user.mind || !user.mind.has_antag_datum(/datum/antagonist/changeling)) + return + try_to_sting(user) + +/obj/effect/proc_holder/changeling/proc/try_to_sting(mob/user, mob/target) + if(!can_sting(user, target)) + return + var/datum/antagonist/changeling/c = user.mind.has_antag_datum(/datum/antagonist/changeling) + if(sting_action(user, target)) + SSblackbox.record_feedback("nested tally", "changeling_powers", 1, list("[name]")) + sting_feedback(user, target) + c.chem_charges -= chemical_cost + +/obj/effect/proc_holder/changeling/proc/sting_action(mob/user, mob/target) + return 0 + +/obj/effect/proc_holder/changeling/proc/sting_feedback(mob/user, mob/target) + return 0 + +//Fairly important to remember to return 1 on success >.< +/obj/effect/proc_holder/changeling/proc/can_sting(mob/living/user, mob/target) + if(!ishuman(user) && !ismonkey(user)) //typecast everything from mob to carbon from this point onwards + return 0 + if(req_human && !ishuman(user)) + to_chat(user, "We cannot do that in this form!") + return 0 + var/datum/antagonist/changeling/c = user.mind.has_antag_datum(/datum/antagonist/changeling) + if(c.chem_charges < chemical_cost) + to_chat(user, "We require at least [chemical_cost] unit\s of chemicals to do that!") + return 0 + if(c.absorbedcount < req_dna) + to_chat(user, "We require at least [req_dna] sample\s of compatible DNA.") + return 0 + if(req_stat < user.stat) + to_chat(user, "We are incapacitated.") + return 0 + if((user.has_trait(TRAIT_FAKEDEATH)) && (!ignores_fakedeath)) + to_chat(user, "We are incapacitated.") + return 0 + return 1 + +//used in /mob/Stat() +/obj/effect/proc_holder/changeling/proc/can_be_used_by(mob/user) + if(!user || QDELETED(user)) + return 0 + if(!ishuman(user) && !ismonkey(user)) + return 0 + if(req_human && !ishuman(user)) + return 0 + return 1 diff --git a/code/game/gamemodes/changeling/powers/absorb.dm b/code/modules/antagonists/changeling/powers/absorb.dm similarity index 97% rename from code/game/gamemodes/changeling/powers/absorb.dm rename to code/modules/antagonists/changeling/powers/absorb.dm index bd64175780..4857975d6e 100644 --- a/code/game/gamemodes/changeling/powers/absorb.dm +++ b/code/modules/antagonists/changeling/powers/absorb.dm @@ -1,113 +1,113 @@ -/obj/effect/proc_holder/changeling/absorbDNA - name = "Absorb DNA" - desc = "Absorb the DNA of our victim." - chemical_cost = 0 - dna_cost = 0 - req_human = 1 - -/obj/effect/proc_holder/changeling/absorbDNA/can_sting(mob/living/carbon/user) - if(!..()) - return - - var/datum/antagonist/changeling/changeling = user.mind.has_antag_datum(/datum/antagonist/changeling) - if(changeling.isabsorbing) - to_chat(user, "We are already absorbing!") - return - - if(!user.pulling || !iscarbon(user.pulling)) - to_chat(user, "We must be grabbing a creature to absorb them!") - return - if(user.grab_state <= GRAB_NECK) - to_chat(user, "We must have a tighter grip to absorb this creature!") - return - - var/mob/living/carbon/target = user.pulling - return changeling.can_absorb_dna(target) - - - -/obj/effect/proc_holder/changeling/absorbDNA/sting_action(mob/user) - var/datum/antagonist/changeling/changeling = user.mind.has_antag_datum(/datum/antagonist/changeling) - var/mob/living/carbon/human/target = user.pulling - changeling.isabsorbing = 1 - for(var/i in 1 to 3) - switch(i) - if(1) - to_chat(user, "This creature is compatible. We must hold still...") - if(2) - user.visible_message("[user] extends a proboscis!", "We extend a proboscis.") - if(3) - user.visible_message("[user] stabs [target] with the proboscis!", "We stab [target] with the proboscis.") - to_chat(target, "You feel a sharp stabbing pain!") - target.take_overall_damage(40) - - SSblackbox.record_feedback("nested tally", "changeling_powers", 1, list("Absorb DNA", "[i]")) - if(!do_mob(user, target, 150)) - to_chat(user, "Our absorption of [target] has been interrupted!") - changeling.isabsorbing = 0 - return - - SSblackbox.record_feedback("nested tally", "changeling_powers", 1, list("Absorb DNA", "4")) - user.visible_message("[user] sucks the fluids from [target]!", "We have absorbed [target].") - to_chat(target, "You are absorbed by the changeling!") - - if(!changeling.has_dna(target.dna)) - changeling.add_new_profile(target) - - if(user.nutrition < NUTRITION_LEVEL_WELL_FED) - user.nutrition = min((user.nutrition + target.nutrition), NUTRITION_LEVEL_WELL_FED) - - if(target.mind)//if the victim has got a mind - // Absorb a lizard, speak Draconic. - user.copy_known_languages_from(target) - - target.mind.show_memory(user, 0) //I can read your mind, kekeke. Output all their notes. - - //Some of target's recent speech, so the changeling can attempt to imitate them better. - //Recent as opposed to all because rounds tend to have a LOT of text. - var/list/recent_speech = list() - - var/list/say_log = target.logging[INDIVIDUAL_SAY_LOG] - - if(LAZYLEN(say_log) > LING_ABSORB_RECENT_SPEECH) - recent_speech = say_log.Copy(say_log.len-LING_ABSORB_RECENT_SPEECH+1,0) //0 so len-LING_ARS+1 to end of list - else - for(var/spoken_memory in say_log) - if(recent_speech.len >= LING_ABSORB_RECENT_SPEECH) - break - recent_speech[spoken_memory] = say_log[spoken_memory] - - if(recent_speech.len) - changeling.antag_memory += "Some of [target]'s speech patterns, we should study these to better impersonate them!
" - to_chat(user, "Some of [target]'s speech patterns, we should study these to better impersonate them!") - for(var/spoken_memory in recent_speech) - changeling.antag_memory += "\"[recent_speech[spoken_memory]]\"
" - to_chat(user, "\"[recent_speech[spoken_memory]]\"") - changeling.antag_memory += "We have no more knowledge of [target]'s speech patterns.
" - to_chat(user, "We have no more knowledge of [target]'s speech patterns.") - - - var/datum/antagonist/changeling/target_ling = target.mind.has_antag_datum(/datum/antagonist/changeling) - if(target_ling)//If the target was a changeling, suck out their extra juice and objective points! - changeling.chem_charges += min(target_ling.chem_charges, changeling.chem_storage) - changeling.absorbedcount += (target_ling.absorbedcount) - - target_ling.stored_profiles.len = 1 - target_ling.absorbedcount = 0 - - - changeling.chem_charges=min(changeling.chem_charges+10, changeling.chem_storage) - - changeling.isabsorbing = 0 - changeling.canrespec = 1 - - target.death(0) - target.Drain() - return TRUE - - - -//Absorbs the target DNA. -//datum/changeling/proc/absorb_dna(mob/living/carbon/T, mob/user) - -//datum/changeling/proc/store_dna(datum/dna/new_dna, mob/user) +/obj/effect/proc_holder/changeling/absorbDNA + name = "Absorb DNA" + desc = "Absorb the DNA of our victim." + chemical_cost = 0 + dna_cost = 0 + req_human = 1 + +/obj/effect/proc_holder/changeling/absorbDNA/can_sting(mob/living/carbon/user) + if(!..()) + return + + var/datum/antagonist/changeling/changeling = user.mind.has_antag_datum(/datum/antagonist/changeling) + if(changeling.isabsorbing) + to_chat(user, "We are already absorbing!") + return + + if(!user.pulling || !iscarbon(user.pulling)) + to_chat(user, "We must be grabbing a creature to absorb them!") + return + if(user.grab_state <= GRAB_NECK) + to_chat(user, "We must have a tighter grip to absorb this creature!") + return + + var/mob/living/carbon/target = user.pulling + return changeling.can_absorb_dna(target) + + + +/obj/effect/proc_holder/changeling/absorbDNA/sting_action(mob/user) + var/datum/antagonist/changeling/changeling = user.mind.has_antag_datum(/datum/antagonist/changeling) + var/mob/living/carbon/human/target = user.pulling + changeling.isabsorbing = 1 + for(var/i in 1 to 3) + switch(i) + if(1) + to_chat(user, "This creature is compatible. We must hold still...") + if(2) + user.visible_message("[user] extends a proboscis!", "We extend a proboscis.") + if(3) + user.visible_message("[user] stabs [target] with the proboscis!", "We stab [target] with the proboscis.") + to_chat(target, "You feel a sharp stabbing pain!") + target.take_overall_damage(40) + + SSblackbox.record_feedback("nested tally", "changeling_powers", 1, list("Absorb DNA", "[i]")) + if(!do_mob(user, target, 150)) + to_chat(user, "Our absorption of [target] has been interrupted!") + changeling.isabsorbing = 0 + return + + SSblackbox.record_feedback("nested tally", "changeling_powers", 1, list("Absorb DNA", "4")) + user.visible_message("[user] sucks the fluids from [target]!", "We have absorbed [target].") + to_chat(target, "You are absorbed by the changeling!") + + if(!changeling.has_dna(target.dna)) + changeling.add_new_profile(target) + + if(user.nutrition < NUTRITION_LEVEL_WELL_FED) + user.nutrition = min((user.nutrition + target.nutrition), NUTRITION_LEVEL_WELL_FED) + + if(target.mind)//if the victim has got a mind + // Absorb a lizard, speak Draconic. + user.copy_known_languages_from(target) + + target.mind.show_memory(user, 0) //I can read your mind, kekeke. Output all their notes. + + //Some of target's recent speech, so the changeling can attempt to imitate them better. + //Recent as opposed to all because rounds tend to have a LOT of text. + var/list/recent_speech = list() + + var/list/say_log = target.logging[INDIVIDUAL_SAY_LOG] + + if(LAZYLEN(say_log) > LING_ABSORB_RECENT_SPEECH) + recent_speech = say_log.Copy(say_log.len-LING_ABSORB_RECENT_SPEECH+1,0) //0 so len-LING_ARS+1 to end of list + else + for(var/spoken_memory in say_log) + if(recent_speech.len >= LING_ABSORB_RECENT_SPEECH) + break + recent_speech[spoken_memory] = say_log[spoken_memory] + + if(recent_speech.len) + changeling.antag_memory += "Some of [target]'s speech patterns, we should study these to better impersonate them!
" + to_chat(user, "Some of [target]'s speech patterns, we should study these to better impersonate them!") + for(var/spoken_memory in recent_speech) + changeling.antag_memory += "\"[recent_speech[spoken_memory]]\"
" + to_chat(user, "\"[recent_speech[spoken_memory]]\"") + changeling.antag_memory += "We have no more knowledge of [target]'s speech patterns.
" + to_chat(user, "We have no more knowledge of [target]'s speech patterns.") + + + var/datum/antagonist/changeling/target_ling = target.mind.has_antag_datum(/datum/antagonist/changeling) + if(target_ling)//If the target was a changeling, suck out their extra juice and objective points! + changeling.chem_charges += min(target_ling.chem_charges, changeling.chem_storage) + changeling.absorbedcount += (target_ling.absorbedcount) + + target_ling.stored_profiles.len = 1 + target_ling.absorbedcount = 0 + + + changeling.chem_charges=min(changeling.chem_charges+10, changeling.chem_storage) + + changeling.isabsorbing = 0 + changeling.canrespec = 1 + + target.death(0) + target.Drain() + return TRUE + + + +//Absorbs the target DNA. +//datum/changeling/proc/absorb_dna(mob/living/carbon/T, mob/user) + +//datum/changeling/proc/store_dna(datum/dna/new_dna, mob/user) diff --git a/code/game/gamemodes/changeling/powers/adrenaline.dm b/code/modules/antagonists/changeling/powers/adrenaline.dm similarity index 100% rename from code/game/gamemodes/changeling/powers/adrenaline.dm rename to code/modules/antagonists/changeling/powers/adrenaline.dm diff --git a/code/game/gamemodes/changeling/powers/augmented_eyesight.dm b/code/modules/antagonists/changeling/powers/augmented_eyesight.dm similarity index 100% rename from code/game/gamemodes/changeling/powers/augmented_eyesight.dm rename to code/modules/antagonists/changeling/powers/augmented_eyesight.dm diff --git a/code/game/gamemodes/changeling/powers/biodegrade.dm b/code/modules/antagonists/changeling/powers/biodegrade.dm similarity index 100% rename from code/game/gamemodes/changeling/powers/biodegrade.dm rename to code/modules/antagonists/changeling/powers/biodegrade.dm diff --git a/code/game/gamemodes/changeling/powers/chameleon_skin.dm b/code/modules/antagonists/changeling/powers/chameleon_skin.dm similarity index 100% rename from code/game/gamemodes/changeling/powers/chameleon_skin.dm rename to code/modules/antagonists/changeling/powers/chameleon_skin.dm diff --git a/code/game/gamemodes/changeling/powers/digitalcamo.dm b/code/modules/antagonists/changeling/powers/digitalcamo.dm similarity index 100% rename from code/game/gamemodes/changeling/powers/digitalcamo.dm rename to code/modules/antagonists/changeling/powers/digitalcamo.dm diff --git a/code/game/gamemodes/changeling/powers/fakedeath.dm b/code/modules/antagonists/changeling/powers/fakedeath.dm similarity index 88% rename from code/game/gamemodes/changeling/powers/fakedeath.dm rename to code/modules/antagonists/changeling/powers/fakedeath.dm index 330488f6da..ff0658bc27 100644 --- a/code/game/gamemodes/changeling/powers/fakedeath.dm +++ b/code/modules/antagonists/changeling/powers/fakedeath.dm @@ -1,37 +1,37 @@ -/obj/effect/proc_holder/changeling/fakedeath - name = "Reviving Stasis" - desc = "We fall into a stasis, allowing us to regenerate and trick our enemies." - chemical_cost = 15 - dna_cost = 0 - req_dna = 1 - req_stat = DEAD - -//Fake our own death and fully heal. You will appear to be dead but regenerate fully after a short delay. -/obj/effect/proc_holder/changeling/fakedeath/sting_action(mob/living/user) - to_chat(user, "We begin our stasis, preparing energy to arise once more.") - if(user.stat != DEAD) - user.emote("deathgasp") - user.tod = worldtime2text() - user.status_flags |= FAKEDEATH //play dead - user.update_stat() - user.update_canmove() - - addtimer(CALLBACK(src, .proc/ready_to_regenerate, user), LING_FAKEDEATH_TIME, TIMER_UNIQUE) - return TRUE - -/obj/effect/proc_holder/changeling/fakedeath/proc/ready_to_regenerate(mob/user) - if(user && user.mind) - var/datum/antagonist/changeling/C = user.mind.has_antag_datum(/datum/antagonist/changeling) - if(C && C.purchasedpowers) - to_chat(user, "We are ready to revive.") - C.purchasedpowers += new /obj/effect/proc_holder/changeling/revive(null) - -/obj/effect/proc_holder/changeling/fakedeath/can_sting(mob/user) - if(user.status_flags & FAKEDEATH) - to_chat(user, "We are already reviving.") - return - if(!user.stat) //Confirmation for living changelings if they want to fake their death - switch(alert("Are we sure we wish to fake our own death?",,"Yes", "No")) - if("No") - return - return ..() +/obj/effect/proc_holder/changeling/fakedeath + name = "Reviving Stasis" + desc = "We fall into a stasis, allowing us to regenerate and trick our enemies." + chemical_cost = 15 + dna_cost = 0 + req_dna = 1 + req_stat = DEAD + +//Fake our own death and fully heal. You will appear to be dead but regenerate fully after a short delay. +/obj/effect/proc_holder/changeling/fakedeath/sting_action(mob/living/user) + to_chat(user, "We begin our stasis, preparing energy to arise once more.") + if(user.stat != DEAD) + user.emote("deathgasp") + user.tod = worldtime2text() + user.fakedeath("changeling") //play dead + user.update_stat() + user.update_canmove() + + addtimer(CALLBACK(src, .proc/ready_to_regenerate, user), LING_FAKEDEATH_TIME, TIMER_UNIQUE) + return TRUE + +/obj/effect/proc_holder/changeling/fakedeath/proc/ready_to_regenerate(mob/user) + if(user && user.mind) + var/datum/antagonist/changeling/C = user.mind.has_antag_datum(/datum/antagonist/changeling) + if(C && C.purchasedpowers) + to_chat(user, "We are ready to revive.") + C.purchasedpowers += new /obj/effect/proc_holder/changeling/revive(null) + +/obj/effect/proc_holder/changeling/fakedeath/can_sting(mob/living/user) + if(user.has_trait(TRAIT_FAKEDEATH, "changeling")) + to_chat(user, "We are already reviving.") + return + if(!user.stat) //Confirmation for living changelings if they want to fake their death + switch(alert("Are we sure we wish to fake our own death?",,"Yes", "No")) + if("No") + return + return ..() diff --git a/code/game/gamemodes/changeling/powers/fleshmend.dm b/code/modules/antagonists/changeling/powers/fleshmend.dm similarity index 97% rename from code/game/gamemodes/changeling/powers/fleshmend.dm rename to code/modules/antagonists/changeling/powers/fleshmend.dm index df6a787d60..930b756b65 100644 --- a/code/game/gamemodes/changeling/powers/fleshmend.dm +++ b/code/modules/antagonists/changeling/powers/fleshmend.dm @@ -1,19 +1,19 @@ -/obj/effect/proc_holder/changeling/fleshmend - name = "Fleshmend" - desc = "Our flesh rapidly regenerates, healing our burns, bruises, and shortness of breath. Functions while unconscious." - helptext = "If we are on fire, the healing effect will not function. Does not regrow limbs or restore lost blood." - chemical_cost = 20 - dna_cost = 2 - req_stat = UNCONSCIOUS - -//Starts healing you every second for 10 seconds. -//Can be used whilst unconscious. -/obj/effect/proc_holder/changeling/fleshmend/sting_action(mob/living/user) - if(user.has_status_effect(STATUS_EFFECT_FLESHMEND)) - to_chat(user, "We are already fleshmending!") - return - to_chat(user, "We begin to heal rapidly.") - user.apply_status_effect(STATUS_EFFECT_FLESHMEND) - return TRUE - -//Check buffs.dm for the fleshmend status effect code +/obj/effect/proc_holder/changeling/fleshmend + name = "Fleshmend" + desc = "Our flesh rapidly regenerates, healing our burns, bruises, and shortness of breath. Functions while unconscious." + helptext = "If we are on fire, the healing effect will not function. Does not regrow limbs or restore lost blood." + chemical_cost = 20 + dna_cost = 2 + req_stat = UNCONSCIOUS + +//Starts healing you every second for 10 seconds. +//Can be used whilst unconscious. +/obj/effect/proc_holder/changeling/fleshmend/sting_action(mob/living/user) + if(user.has_status_effect(STATUS_EFFECT_FLESHMEND)) + to_chat(user, "We are already fleshmending!") + return + to_chat(user, "We begin to heal rapidly.") + user.apply_status_effect(STATUS_EFFECT_FLESHMEND) + return TRUE + +//Check buffs.dm for the fleshmend status effect code diff --git a/code/game/gamemodes/changeling/powers/headcrab.dm b/code/modules/antagonists/changeling/powers/headcrab.dm similarity index 100% rename from code/game/gamemodes/changeling/powers/headcrab.dm rename to code/modules/antagonists/changeling/powers/headcrab.dm diff --git a/code/game/gamemodes/changeling/powers/hivemind.dm b/code/modules/antagonists/changeling/powers/hivemind.dm similarity index 97% rename from code/game/gamemodes/changeling/powers/hivemind.dm rename to code/modules/antagonists/changeling/powers/hivemind.dm index 5d79a757ec..0e9763d2a3 100644 --- a/code/game/gamemodes/changeling/powers/hivemind.dm +++ b/code/modules/antagonists/changeling/powers/hivemind.dm @@ -1,93 +1,93 @@ -//HIVEMIND COMMUNICATION (:g) -/obj/effect/proc_holder/changeling/hivemind_comms - name = "Hivemind Communication" - desc = "We tune our senses to the airwaves to allow us to discreetly communicate and exchange DNA with other changelings." - helptext = "We will be able to talk with other changelings with :g. Exchanged DNA do not count towards absorb objectives." - dna_cost = 0 - chemical_cost = -1 - -/obj/effect/proc_holder/changeling/hivemind_comms/on_purchase(mob/user, is_respec) - ..() - var/datum/antagonist/changeling/changeling = user.mind.has_antag_datum(/datum/antagonist/changeling) - changeling.changeling_speak = 1 - to_chat(user, "Use say \":g message\" to communicate with the other changelings.") - var/obj/effect/proc_holder/changeling/hivemind_upload/S1 = new - if(!changeling.has_sting(S1)) - changeling.purchasedpowers+=S1 - var/obj/effect/proc_holder/changeling/hivemind_download/S2 = new - if(!changeling.has_sting(S2)) - changeling.purchasedpowers+=S2 - -// HIVE MIND UPLOAD/DOWNLOAD DNA -GLOBAL_LIST_EMPTY(hivemind_bank) - -/obj/effect/proc_holder/changeling/hivemind_upload - name = "Hive Channel DNA" - desc = "Allows us to channel DNA in the airwaves to allow other changelings to absorb it." - chemical_cost = 10 - dna_cost = -1 - -/obj/effect/proc_holder/changeling/hivemind_upload/sting_action(var/mob/user) - var/datum/antagonist/changeling/changeling = user.mind.has_antag_datum(/datum/antagonist/changeling) - var/list/names = list() - for(var/datum/changelingprofile/prof in changeling.stored_profiles) - if(!(prof in GLOB.hivemind_bank)) - names += prof.name - - if(names.len <= 0) - to_chat(user, "The airwaves already have all of our DNA.") - return - - var/chosen_name = input("Select a DNA to channel: ", "Channel DNA", null) as null|anything in names - if(!chosen_name) - return - - var/datum/changelingprofile/chosen_dna = changeling.get_dna(chosen_name) - if(!chosen_dna) - return - - var/datum/changelingprofile/uploaded_dna = new chosen_dna.type - chosen_dna.copy_profile(uploaded_dna) - GLOB.hivemind_bank += uploaded_dna - to_chat(user, "We channel the DNA of [chosen_name] to the air.") - return TRUE - -/obj/effect/proc_holder/changeling/hivemind_download - name = "Hive Absorb DNA" - desc = "Allows us to absorb DNA that has been channeled to the airwaves. Does not count towards absorb objectives." - chemical_cost = 10 - dna_cost = -1 - -/obj/effect/proc_holder/changeling/hivemind_download/can_sting(mob/living/carbon/user) - if(!..()) - return - var/datum/antagonist/changeling/changeling = user.mind.has_antag_datum(/datum/antagonist/changeling) - var/datum/changelingprofile/first_prof = changeling.stored_profiles[1] - if(first_prof.name == user.real_name)//If our current DNA is the stalest, we gotta ditch it. - to_chat(user, "We have reached our capacity to store genetic information! We must transform before absorbing more.") - return - return 1 - -/obj/effect/proc_holder/changeling/hivemind_download/sting_action(mob/user) - var/datum/antagonist/changeling/changeling = user.mind.has_antag_datum(/datum/antagonist/changeling) - var/list/names = list() - for(var/datum/changelingprofile/prof in GLOB.hivemind_bank) - if(!(prof in changeling.stored_profiles)) - names[prof.name] = prof - - if(names.len <= 0) - to_chat(user, "There's no new DNA to absorb from the air.") - return - - var/S = input("Select a DNA absorb from the air: ", "Absorb DNA", null) as null|anything in names - if(!S) - return - var/datum/changelingprofile/chosen_prof = names[S] - if(!chosen_prof) - return - - var/datum/changelingprofile/downloaded_prof = new chosen_prof.type - chosen_prof.copy_profile(downloaded_prof) - changeling.add_profile(downloaded_prof) - to_chat(user, "We absorb the DNA of [S] from the air.") - return TRUE +//HIVEMIND COMMUNICATION (:g) +/obj/effect/proc_holder/changeling/hivemind_comms + name = "Hivemind Communication" + desc = "We tune our senses to the airwaves to allow us to discreetly communicate and exchange DNA with other changelings." + helptext = "We will be able to talk with other changelings with :g. Exchanged DNA do not count towards absorb objectives." + dna_cost = 0 + chemical_cost = -1 + +/obj/effect/proc_holder/changeling/hivemind_comms/on_purchase(mob/user, is_respec) + ..() + var/datum/antagonist/changeling/changeling = user.mind.has_antag_datum(/datum/antagonist/changeling) + changeling.changeling_speak = 1 + to_chat(user, "Use say \":g message\" to communicate with the other changelings.") + var/obj/effect/proc_holder/changeling/hivemind_upload/S1 = new + if(!changeling.has_sting(S1)) + changeling.purchasedpowers+=S1 + var/obj/effect/proc_holder/changeling/hivemind_download/S2 = new + if(!changeling.has_sting(S2)) + changeling.purchasedpowers+=S2 + +// HIVE MIND UPLOAD/DOWNLOAD DNA +GLOBAL_LIST_EMPTY(hivemind_bank) + +/obj/effect/proc_holder/changeling/hivemind_upload + name = "Hive Channel DNA" + desc = "Allows us to channel DNA in the airwaves to allow other changelings to absorb it." + chemical_cost = 10 + dna_cost = -1 + +/obj/effect/proc_holder/changeling/hivemind_upload/sting_action(var/mob/user) + var/datum/antagonist/changeling/changeling = user.mind.has_antag_datum(/datum/antagonist/changeling) + var/list/names = list() + for(var/datum/changelingprofile/prof in changeling.stored_profiles) + if(!(prof in GLOB.hivemind_bank)) + names += prof.name + + if(names.len <= 0) + to_chat(user, "The airwaves already have all of our DNA.") + return + + var/chosen_name = input("Select a DNA to channel: ", "Channel DNA", null) as null|anything in names + if(!chosen_name) + return + + var/datum/changelingprofile/chosen_dna = changeling.get_dna(chosen_name) + if(!chosen_dna) + return + + var/datum/changelingprofile/uploaded_dna = new chosen_dna.type + chosen_dna.copy_profile(uploaded_dna) + GLOB.hivemind_bank += uploaded_dna + to_chat(user, "We channel the DNA of [chosen_name] to the air.") + return TRUE + +/obj/effect/proc_holder/changeling/hivemind_download + name = "Hive Absorb DNA" + desc = "Allows us to absorb DNA that has been channeled to the airwaves. Does not count towards absorb objectives." + chemical_cost = 10 + dna_cost = -1 + +/obj/effect/proc_holder/changeling/hivemind_download/can_sting(mob/living/carbon/user) + if(!..()) + return + var/datum/antagonist/changeling/changeling = user.mind.has_antag_datum(/datum/antagonist/changeling) + var/datum/changelingprofile/first_prof = changeling.stored_profiles[1] + if(first_prof.name == user.real_name)//If our current DNA is the stalest, we gotta ditch it. + to_chat(user, "We have reached our capacity to store genetic information! We must transform before absorbing more.") + return + return 1 + +/obj/effect/proc_holder/changeling/hivemind_download/sting_action(mob/user) + var/datum/antagonist/changeling/changeling = user.mind.has_antag_datum(/datum/antagonist/changeling) + var/list/names = list() + for(var/datum/changelingprofile/prof in GLOB.hivemind_bank) + if(!(prof in changeling.stored_profiles)) + names[prof.name] = prof + + if(names.len <= 0) + to_chat(user, "There's no new DNA to absorb from the air.") + return + + var/S = input("Select a DNA absorb from the air: ", "Absorb DNA", null) as null|anything in names + if(!S) + return + var/datum/changelingprofile/chosen_prof = names[S] + if(!chosen_prof) + return + + var/datum/changelingprofile/downloaded_prof = new chosen_prof.type + chosen_prof.copy_profile(downloaded_prof) + changeling.add_profile(downloaded_prof) + to_chat(user, "We absorb the DNA of [S] from the air.") + return TRUE diff --git a/code/game/gamemodes/changeling/powers/humanform.dm b/code/modules/antagonists/changeling/powers/humanform.dm similarity index 97% rename from code/game/gamemodes/changeling/powers/humanform.dm rename to code/modules/antagonists/changeling/powers/humanform.dm index 90ddfb0115..e04f00308f 100644 --- a/code/game/gamemodes/changeling/powers/humanform.dm +++ b/code/modules/antagonists/changeling/powers/humanform.dm @@ -1,30 +1,30 @@ -/obj/effect/proc_holder/changeling/humanform - name = "Human Form" - desc = "We change into a human." - chemical_cost = 5 - req_dna = 1 - -//Transform into a human. -/obj/effect/proc_holder/changeling/humanform/sting_action(mob/living/carbon/user) - var/datum/antagonist/changeling/changeling = user.mind.has_antag_datum(/datum/antagonist/changeling) - var/list/names = list() - for(var/datum/changelingprofile/prof in changeling.stored_profiles) - names += "[prof.name]" - - var/chosen_name = input("Select the target DNA: ", "Target DNA", null) as null|anything in names - if(!chosen_name) - return - - var/datum/changelingprofile/chosen_prof = changeling.get_dna(chosen_name) - if(!chosen_prof) - return - if(!user || user.notransform) - return 0 - to_chat(user, "We transform our appearance.") - - changeling.purchasedpowers -= src - - var/newmob = user.humanize(TR_KEEPITEMS | TR_KEEPIMPLANTS | TR_KEEPORGANS | TR_KEEPDAMAGE | TR_KEEPVIRUS) - - changeling_transform(newmob, chosen_prof) - return TRUE +/obj/effect/proc_holder/changeling/humanform + name = "Human Form" + desc = "We change into a human." + chemical_cost = 5 + req_dna = 1 + +//Transform into a human. +/obj/effect/proc_holder/changeling/humanform/sting_action(mob/living/carbon/user) + var/datum/antagonist/changeling/changeling = user.mind.has_antag_datum(/datum/antagonist/changeling) + var/list/names = list() + for(var/datum/changelingprofile/prof in changeling.stored_profiles) + names += "[prof.name]" + + var/chosen_name = input("Select the target DNA: ", "Target DNA", null) as null|anything in names + if(!chosen_name) + return + + var/datum/changelingprofile/chosen_prof = changeling.get_dna(chosen_name) + if(!chosen_prof) + return + if(!user || user.notransform) + return 0 + to_chat(user, "We transform our appearance.") + + changeling.purchasedpowers -= src + + var/newmob = user.humanize(TR_KEEPITEMS | TR_KEEPIMPLANTS | TR_KEEPORGANS | TR_KEEPDAMAGE | TR_KEEPVIRUS) + + changeling_transform(newmob, chosen_prof) + return TRUE diff --git a/code/game/gamemodes/changeling/powers/lesserform.dm b/code/modules/antagonists/changeling/powers/lesserform.dm similarity index 100% rename from code/game/gamemodes/changeling/powers/lesserform.dm rename to code/modules/antagonists/changeling/powers/lesserform.dm diff --git a/code/game/gamemodes/changeling/powers/linglink.dm b/code/modules/antagonists/changeling/powers/linglink.dm similarity index 100% rename from code/game/gamemodes/changeling/powers/linglink.dm rename to code/modules/antagonists/changeling/powers/linglink.dm diff --git a/code/game/gamemodes/changeling/powers/mimic_voice.dm b/code/modules/antagonists/changeling/powers/mimic_voice.dm similarity index 97% rename from code/game/gamemodes/changeling/powers/mimic_voice.dm rename to code/modules/antagonists/changeling/powers/mimic_voice.dm index 9c0d79e233..6808ecd61a 100644 --- a/code/game/gamemodes/changeling/powers/mimic_voice.dm +++ b/code/modules/antagonists/changeling/powers/mimic_voice.dm @@ -1,27 +1,27 @@ -/obj/effect/proc_holder/changeling/mimicvoice - name = "Mimic Voice" - desc = "We shape our vocal glands to sound like a desired voice." - helptext = "Will turn your voice into the name that you enter. We must constantly expend chemicals to maintain our form like this." - chemical_cost = 0 //constant chemical drain hardcoded - dna_cost = 1 - req_human = 1 - - -// Fake Voice -/obj/effect/proc_holder/changeling/mimicvoice/sting_action(mob/user) - var/datum/antagonist/changeling/changeling = user.mind.has_antag_datum(/datum/antagonist/changeling) - if(changeling.mimicing) - changeling.mimicing = "" - changeling.chem_recharge_slowdown -= 0.5 - to_chat(user, "We return our vocal glands to their original position.") - return - - var/mimic_voice = stripped_input(user, "Enter a name to mimic.", "Mimic Voice", null, MAX_NAME_LEN) - if(!mimic_voice) - return - - changeling.mimicing = mimic_voice - changeling.chem_recharge_slowdown += 0.5 - to_chat(user, "We shape our glands to take the voice of [mimic_voice], this will slow down regenerating chemicals while active.") - to_chat(user, "Use this power again to return to our original voice and return chemical production to normal levels.") - return TRUE +/obj/effect/proc_holder/changeling/mimicvoice + name = "Mimic Voice" + desc = "We shape our vocal glands to sound like a desired voice." + helptext = "Will turn your voice into the name that you enter. We must constantly expend chemicals to maintain our form like this." + chemical_cost = 0 //constant chemical drain hardcoded + dna_cost = 1 + req_human = 1 + + +// Fake Voice +/obj/effect/proc_holder/changeling/mimicvoice/sting_action(mob/user) + var/datum/antagonist/changeling/changeling = user.mind.has_antag_datum(/datum/antagonist/changeling) + if(changeling.mimicing) + changeling.mimicing = "" + changeling.chem_recharge_slowdown -= 0.5 + to_chat(user, "We return our vocal glands to their original position.") + return + + var/mimic_voice = stripped_input(user, "Enter a name to mimic.", "Mimic Voice", null, MAX_NAME_LEN) + if(!mimic_voice) + return + + changeling.mimicing = mimic_voice + changeling.chem_recharge_slowdown += 0.5 + to_chat(user, "We shape our glands to take the voice of [mimic_voice], this will slow down regenerating chemicals while active.") + to_chat(user, "Use this power again to return to our original voice and return chemical production to normal levels.") + return TRUE diff --git a/code/game/gamemodes/changeling/powers/mutations.dm b/code/modules/antagonists/changeling/powers/mutations.dm similarity index 100% rename from code/game/gamemodes/changeling/powers/mutations.dm rename to code/modules/antagonists/changeling/powers/mutations.dm diff --git a/code/game/gamemodes/changeling/powers/panacea.dm b/code/modules/antagonists/changeling/powers/panacea.dm similarity index 96% rename from code/game/gamemodes/changeling/powers/panacea.dm rename to code/modules/antagonists/changeling/powers/panacea.dm index 829b0a8512..93a05834fe 100644 --- a/code/game/gamemodes/changeling/powers/panacea.dm +++ b/code/modules/antagonists/changeling/powers/panacea.dm @@ -1,38 +1,38 @@ -/obj/effect/proc_holder/changeling/panacea - name = "Anatomic Panacea" - desc = "Expels impurifications from our form; curing diseases, removing parasites, sobering us, purging toxins and radiation, and resetting our genetic code completely." - helptext = "Can be used while unconscious." - chemical_cost = 20 - dna_cost = 1 - req_stat = UNCONSCIOUS - -//Heals the things that the other regenerative abilities don't. -/obj/effect/proc_holder/changeling/panacea/sting_action(mob/user) - to_chat(user, "We cleanse impurities from our form.") - - var/list/bad_organs = list( - user.getorgan(/obj/item/organ/body_egg), - user.getorgan(/obj/item/organ/zombie_infection)) - - for(var/o in bad_organs) - var/obj/item/organ/O = o - if(!istype(O)) - continue - - O.Remove(user) - if(iscarbon(user)) - var/mob/living/carbon/C = user - C.vomit(0, toxic = TRUE) - O.forceMove(get_turf(user)) - - user.reagents.add_reagent("mutadone", 10) - user.reagents.add_reagent("pen_acid", 20) - user.reagents.add_reagent("antihol", 10) - user.reagents.add_reagent("mannitol", 25) - - for(var/thing in user.viruses) - var/datum/disease/D = thing - if(D.severity == VIRUS_SEVERITY_POSITIVE) - continue - D.cure() - return TRUE +/obj/effect/proc_holder/changeling/panacea + name = "Anatomic Panacea" + desc = "Expels impurifications from our form; curing diseases, removing parasites, sobering us, purging toxins and radiation, and resetting our genetic code completely." + helptext = "Can be used while unconscious." + chemical_cost = 20 + dna_cost = 1 + req_stat = UNCONSCIOUS + +//Heals the things that the other regenerative abilities don't. +/obj/effect/proc_holder/changeling/panacea/sting_action(mob/user) + to_chat(user, "We cleanse impurities from our form.") + + var/list/bad_organs = list( + user.getorgan(/obj/item/organ/body_egg), + user.getorgan(/obj/item/organ/zombie_infection)) + + for(var/o in bad_organs) + var/obj/item/organ/O = o + if(!istype(O)) + continue + + O.Remove(user) + if(iscarbon(user)) + var/mob/living/carbon/C = user + C.vomit(0, toxic = TRUE) + O.forceMove(get_turf(user)) + + user.reagents.add_reagent("mutadone", 10) + user.reagents.add_reagent("pen_acid", 20) + user.reagents.add_reagent("antihol", 10) + user.reagents.add_reagent("mannitol", 25) + + for(var/thing in user.viruses) + var/datum/disease/D = thing + if(D.severity == VIRUS_SEVERITY_POSITIVE) + continue + D.cure() + return TRUE diff --git a/code/game/gamemodes/changeling/powers/regenerate.dm b/code/modules/antagonists/changeling/powers/regenerate.dm similarity index 100% rename from code/game/gamemodes/changeling/powers/regenerate.dm rename to code/modules/antagonists/changeling/powers/regenerate.dm diff --git a/code/game/gamemodes/changeling/powers/revive.dm b/code/modules/antagonists/changeling/powers/revive.dm similarity index 86% rename from code/game/gamemodes/changeling/powers/revive.dm rename to code/modules/antagonists/changeling/powers/revive.dm index 716b41a837..4165eeeff2 100644 --- a/code/game/gamemodes/changeling/powers/revive.dm +++ b/code/modules/antagonists/changeling/powers/revive.dm @@ -1,37 +1,36 @@ -/obj/effect/proc_holder/changeling/revive - name = "Revive" - desc = "We regenerate, healing all damage from our form." - helptext = "Does not regrow lost organs or a missing head." - req_stat = DEAD - always_keep = TRUE - ignores_fakedeath = TRUE - -//Revive from revival stasis -/obj/effect/proc_holder/changeling/revive/sting_action(mob/living/carbon/user) - user.status_flags &= ~(FAKEDEATH) - user.tod = null - user.revive(full_heal = 1) - var/list/missing = user.get_missing_limbs() - missing -= "head" // headless changelings are funny - if(missing.len) - playsound(user, 'sound/magic/demon_consume.ogg', 50, 1) - user.visible_message("[user]'s missing limbs \ - reform, making a loud, grotesque sound!", - "Your limbs regrow, making a \ - loud, crunchy sound and giving you great pain!", - "You hear organic matter ripping \ - and tearing!") - user.emote("scream") - user.regenerate_limbs(0, list("head")) - user.regenerate_organs() - to_chat(user, "We have revived ourselves.") - var/datum/antagonist/changeling/changeling = user.mind.has_antag_datum(/datum/antagonist/changeling) - changeling.purchasedpowers -= src - return TRUE - -/obj/effect/proc_holder/changeling/revive/can_be_used_by(mob/user) - if((user.stat != DEAD) && !(user.status_flags & FAKEDEATH)) - var/datum/antagonist/changeling/changeling = user.mind.has_antag_datum(/datum/antagonist/changeling) - changeling.purchasedpowers -= src - return 0 - . = ..() +/obj/effect/proc_holder/changeling/revive + name = "Revive" + desc = "We regenerate, healing all damage from our form." + helptext = "Does not regrow lost organs or a missing head." + req_stat = DEAD + always_keep = TRUE + ignores_fakedeath = TRUE + +//Revive from revival stasis +/obj/effect/proc_holder/changeling/revive/sting_action(mob/living/carbon/user) + user.cure_fakedeath("changeling") + user.revive(full_heal = 1) + var/list/missing = user.get_missing_limbs() + missing -= "head" // headless changelings are funny + if(missing.len) + playsound(user, 'sound/magic/demon_consume.ogg', 50, 1) + user.visible_message("[user]'s missing limbs \ + reform, making a loud, grotesque sound!", + "Your limbs regrow, making a \ + loud, crunchy sound and giving you great pain!", + "You hear organic matter ripping \ + and tearing!") + user.emote("scream") + user.regenerate_limbs(0, list("head")) + user.regenerate_organs() + to_chat(user, "We have revived ourselves.") + var/datum/antagonist/changeling/changeling = user.mind.has_antag_datum(/datum/antagonist/changeling) + changeling.purchasedpowers -= src + return TRUE + +/obj/effect/proc_holder/changeling/revive/can_be_used_by(mob/living/user) + if((user.stat != DEAD) && !(user.has_trait(TRAIT_FAKEDEATH))) + var/datum/antagonist/changeling/changeling = user.mind.has_antag_datum(/datum/antagonist/changeling) + changeling.purchasedpowers -= src + return 0 + . = ..() diff --git a/code/game/gamemodes/changeling/powers/shriek.dm b/code/modules/antagonists/changeling/powers/shriek.dm similarity index 97% rename from code/game/gamemodes/changeling/powers/shriek.dm rename to code/modules/antagonists/changeling/powers/shriek.dm index 667dc06daf..ca79562081 100644 --- a/code/game/gamemodes/changeling/powers/shriek.dm +++ b/code/modules/antagonists/changeling/powers/shriek.dm @@ -1,42 +1,42 @@ -/obj/effect/proc_holder/changeling/resonant_shriek - name = "Resonant Shriek" - desc = "Our lungs and vocal cords shift, allowing us to briefly emit a noise that deafens and confuses the weak-minded." - helptext = "Emits a high-frequency sound that confuses and deafens humans, blows out nearby lights and overloads cyborg sensors." - chemical_cost = 20 - dna_cost = 1 - req_human = 1 - -//A flashy ability, good for crowd control and sewing chaos. -/obj/effect/proc_holder/changeling/resonant_shriek/sting_action(mob/user) - for(var/mob/living/M in get_hearers_in_view(4, user)) - if(iscarbon(M)) - var/mob/living/carbon/C = M - if(!C.mind || !C.mind.has_antag_datum(/datum/antagonist/changeling)) - C.adjustEarDamage(0, 30) - C.confused += 25 - C.Jitter(50) - else - SEND_SOUND(C, sound('sound/effects/screech.ogg')) - - if(issilicon(M)) - SEND_SOUND(M, sound('sound/weapons/flash.ogg')) - M.Knockdown(rand(100,200)) - - for(var/obj/machinery/light/L in range(4, user)) - L.on = 1 - L.break_light_tube() - return TRUE - -/obj/effect/proc_holder/changeling/dissonant_shriek - name = "Dissonant Shriek" - desc = "We shift our vocal cords to release a high-frequency sound that overloads nearby electronics." - chemical_cost = 20 - dna_cost = 1 - -//A flashy ability, good for crowd control and sewing chaos. -/obj/effect/proc_holder/changeling/dissonant_shriek/sting_action(mob/user) - for(var/obj/machinery/light/L in range(5, usr)) - L.on = 1 - L.break_light_tube() - empulse(get_turf(user), 2, 5, 1) - return TRUE +/obj/effect/proc_holder/changeling/resonant_shriek + name = "Resonant Shriek" + desc = "Our lungs and vocal cords shift, allowing us to briefly emit a noise that deafens and confuses the weak-minded." + helptext = "Emits a high-frequency sound that confuses and deafens humans, blows out nearby lights and overloads cyborg sensors." + chemical_cost = 20 + dna_cost = 1 + req_human = 1 + +//A flashy ability, good for crowd control and sewing chaos. +/obj/effect/proc_holder/changeling/resonant_shriek/sting_action(mob/user) + for(var/mob/living/M in get_hearers_in_view(4, user)) + if(iscarbon(M)) + var/mob/living/carbon/C = M + if(!C.mind || !C.mind.has_antag_datum(/datum/antagonist/changeling)) + C.adjustEarDamage(0, 30) + C.confused += 25 + C.Jitter(50) + else + SEND_SOUND(C, sound('sound/effects/screech.ogg')) + + if(issilicon(M)) + SEND_SOUND(M, sound('sound/weapons/flash.ogg')) + M.Knockdown(rand(100,200)) + + for(var/obj/machinery/light/L in range(4, user)) + L.on = 1 + L.break_light_tube() + return TRUE + +/obj/effect/proc_holder/changeling/dissonant_shriek + name = "Dissonant Shriek" + desc = "We shift our vocal cords to release a high-frequency sound that overloads nearby electronics." + chemical_cost = 20 + dna_cost = 1 + +//A flashy ability, good for crowd control and sewing chaos. +/obj/effect/proc_holder/changeling/dissonant_shriek/sting_action(mob/user) + for(var/obj/machinery/light/L in range(5, usr)) + L.on = 1 + L.break_light_tube() + empulse(get_turf(user), 2, 5, 1) + return TRUE diff --git a/code/game/gamemodes/changeling/powers/spiders.dm b/code/modules/antagonists/changeling/powers/spiders.dm similarity index 100% rename from code/game/gamemodes/changeling/powers/spiders.dm rename to code/modules/antagonists/changeling/powers/spiders.dm diff --git a/code/game/gamemodes/changeling/powers/strained_muscles.dm b/code/modules/antagonists/changeling/powers/strained_muscles.dm similarity index 91% rename from code/game/gamemodes/changeling/powers/strained_muscles.dm rename to code/modules/antagonists/changeling/powers/strained_muscles.dm index 10145c2bca..832f6073b6 100644 --- a/code/game/gamemodes/changeling/powers/strained_muscles.dm +++ b/code/modules/antagonists/changeling/powers/strained_muscles.dm @@ -16,7 +16,7 @@ if(active) to_chat(user, "Our muscles tense and strengthen.") else - user.status_flags &= ~GOTTAGOFAST + user.remove_trait(TRAIT_GOTTAGOFAST, "changeling_muscles") to_chat(user, "Our muscles relax.") if(stacks >= 10) to_chat(user, "We collapse in exhaustion.") @@ -29,12 +29,12 @@ /obj/effect/proc_holder/changeling/strained_muscles/proc/muscle_loop(mob/living/carbon/user) while(active) - user.status_flags |= GOTTAGOFAST + user.add_trait(TRAIT_GOTTAGOFAST, "changeling_muscles") if(user.stat != CONSCIOUS || user.staminaloss >= 90) active = !active to_chat(user, "Our muscles relax without the energy to strengthen them.") user.Knockdown(40) - user.status_flags &= ~GOTTAGOFAST + user.remove_trait(TRAIT_GOTTAGOFAST, "changeling_muscles") break stacks++ diff --git a/code/game/gamemodes/changeling/powers/tiny_prick.dm b/code/modules/antagonists/changeling/powers/tiny_prick.dm similarity index 95% rename from code/game/gamemodes/changeling/powers/tiny_prick.dm rename to code/modules/antagonists/changeling/powers/tiny_prick.dm index 450a482822..5c3ea52952 100644 --- a/code/game/gamemodes/changeling/powers/tiny_prick.dm +++ b/code/modules/antagonists/changeling/powers/tiny_prick.dm @@ -1,246 +1,246 @@ -/obj/effect/proc_holder/changeling/sting - name = "Tiny Prick" - desc = "Stabby stabby." - var/sting_icon = null - -/obj/effect/proc_holder/changeling/sting/Click() - var/mob/user = usr - if(!user || !user.mind) - return - var/datum/antagonist/changeling/changeling = user.mind.has_antag_datum(/datum/antagonist/changeling) - if(!changeling) - return - if(!changeling.chosen_sting) - set_sting(user) - else - unset_sting(user) - return - -/obj/effect/proc_holder/changeling/sting/proc/set_sting(mob/user) - to_chat(user, "We prepare our sting, use alt+click or middle mouse button on target to sting them.") - var/datum/antagonist/changeling/changeling = user.mind.has_antag_datum(/datum/antagonist/changeling) - changeling.chosen_sting = src - - user.hud_used.lingstingdisplay.icon_state = sting_icon - user.hud_used.lingstingdisplay.invisibility = 0 - -/obj/effect/proc_holder/changeling/sting/proc/unset_sting(mob/user) - to_chat(user, "We retract our sting, we can't sting anyone for now.") - var/datum/antagonist/changeling/changeling = user.mind.has_antag_datum(/datum/antagonist/changeling) - changeling.chosen_sting = null - - user.hud_used.lingstingdisplay.icon_state = null - user.hud_used.lingstingdisplay.invisibility = INVISIBILITY_ABSTRACT - -/mob/living/carbon/proc/unset_sting() - if(mind) - var/datum/antagonist/changeling/changeling = mind.has_antag_datum(/datum/antagonist/changeling) - if(changeling && changeling.chosen_sting) - changeling.chosen_sting.unset_sting(src) - -/obj/effect/proc_holder/changeling/sting/can_sting(mob/user, mob/target) - if(!..()) - return - var/datum/antagonist/changeling/changeling = user.mind.has_antag_datum(/datum/antagonist/changeling) - if(!changeling.chosen_sting) - to_chat(user, "We haven't prepared our sting yet!") - if(!iscarbon(target)) - return - if(!isturf(user.loc)) - return - if(!AStar(user, target.loc, /turf/proc/Distance, changeling.sting_range, simulated_only = 0)) - return - if(target.mind && target.mind.has_antag_datum(/datum/antagonist/changeling)) - sting_feedback(user, target) - changeling.chem_charges -= chemical_cost //?? - return 1 - -/obj/effect/proc_holder/changeling/sting/sting_feedback(mob/user, mob/target) - if(!target) - return - to_chat(user, "We stealthily sting [target.name].") - if(target.mind && target.mind.has_antag_datum(/datum/antagonist/changeling)) - to_chat(target, "You feel a tiny prick.") - return 1 - - -/obj/effect/proc_holder/changeling/sting/transformation - name = "Transformation Sting" - desc = "We silently sting a human, injecting a retrovirus that forces them to transform." - helptext = "The victim will transform much like a changeling would. Does not provide a warning to others. Mutations will not be transferred, and monkeys will become human." - sting_icon = "sting_transform" - chemical_cost = 50 - dna_cost = 3 - var/datum/changelingprofile/selected_dna = null - -/obj/effect/proc_holder/changeling/sting/transformation/Click() - var/mob/user = usr - var/datum/antagonist/changeling/changeling = user.mind.has_antag_datum(/datum/antagonist/changeling) - if(changeling.chosen_sting) - unset_sting(user) - return - selected_dna = changeling.select_dna("Select the target DNA: ", "Target DNA") - if(!selected_dna) - return - if(NOTRANSSTING in selected_dna.dna.species.species_traits) - to_chat(user, "That DNA is not compatible with changeling retrovirus!") - return - ..() - -/obj/effect/proc_holder/changeling/sting/transformation/can_sting(mob/user, mob/living/carbon/target) - if(!..()) - return - if((target.has_disability(DISABILITY_HUSK)) || !iscarbon(target) || (NOTRANSSTING in target.dna.species.species_traits)) - to_chat(user, "Our sting appears ineffective against its DNA.") - return 0 - return 1 - -/obj/effect/proc_holder/changeling/sting/transformation/sting_action(mob/user, mob/target) - add_logs(user, target, "stung", "transformation sting", " new identity is [selected_dna.dna.real_name]") - var/datum/dna/NewDNA = selected_dna.dna - if(ismonkey(target)) - to_chat(user, "Our genes cry out as we sting [target.name]!") - - var/mob/living/carbon/C = target - . = TRUE - if(istype(C)) - C.real_name = NewDNA.real_name - NewDNA.transfer_identity(C) - if(ismonkey(C)) - C.humanize(TR_KEEPITEMS | TR_KEEPIMPLANTS | TR_KEEPORGANS | TR_KEEPDAMAGE | TR_KEEPVIRUS | TR_DEFAULTMSG) - C.updateappearance(mutcolor_update=1) - - -/obj/effect/proc_holder/changeling/sting/false_armblade - name = "False Armblade Sting" - desc = "We silently sting a human, injecting a retrovirus that mutates their arm to temporarily appear as an armblade." - helptext = "The victim will form an armblade much like a changeling would, except the armblade is dull and useless." - sting_icon = "sting_armblade" - chemical_cost = 20 - dna_cost = 1 - -/obj/item/melee/arm_blade/false - desc = "A grotesque mass of flesh that used to be your arm. Although it looks dangerous at first, you can tell it's actually quite dull and useless." - force = 5 //Basically as strong as a punch - -/obj/item/melee/arm_blade/false/afterattack(atom/target, mob/user, proximity) - return - -/obj/effect/proc_holder/changeling/sting/false_armblade/can_sting(mob/user, mob/target) - if(!..()) - return - if(isliving(target)) - var/mob/living/L = target - if((L.has_disability(DISABILITY_HUSK)) || !L.has_dna()) - to_chat(user, "Our sting appears ineffective against its DNA.") - return 0 - return 1 - -/obj/effect/proc_holder/changeling/sting/false_armblade/sting_action(mob/user, mob/target) - add_logs(user, target, "stung", object="falso armblade sting") - - var/obj/item/held = target.get_active_held_item() - if(held && !target.dropItemToGround(held)) - to_chat(user, "[held] is stuck to their hand, you cannot grow a false armblade over it!") - return - - if(ismonkey(target)) - to_chat(user, "Our genes cry out as we sting [target.name]!") - - var/obj/item/melee/arm_blade/false/blade = new(target,1) - target.put_in_hands(blade) - target.visible_message("A grotesque blade forms around [target.name]\'s arm!", "Your arm twists and mutates, transforming into a horrific monstrosity!", "You hear organic matter ripping and tearing!") - playsound(target, 'sound/effects/blobattack.ogg', 30, 1) - - addtimer(CALLBACK(src, .proc/remove_fake, target, blade), 600) - return TRUE - -/obj/effect/proc_holder/changeling/sting/false_armblade/proc/remove_fake(mob/target, obj/item/melee/arm_blade/false/blade) - playsound(target, 'sound/effects/blobattack.ogg', 30, 1) - target.visible_message("With a sickening crunch, \ - [target] reforms their [blade.name] into an arm!", - "[blade] reforms back to normal.", - "Your eyes burn horrifically!") - target.become_nearsighted(EYE_DAMAGE) - target.blind_eyes(20) - target.blur_eyes(40) - return TRUE - -/obj/effect/proc_holder/changeling/sting/LSD - name = "Hallucination Sting" - desc = "Causes terror in the target." - helptext = "We evolve the ability to sting a target with a powerful hallucinogenic chemical. The target does not notice they have been stung, and the effect occurs after 30 to 60 seconds." - sting_icon = "sting_lsd" - chemical_cost = 10 - dna_cost = 1 - -/obj/effect/proc_holder/changeling/sting/LSD/sting_action(mob/user, mob/living/carbon/target) - add_logs(user, target, "stung", "LSD sting") - addtimer(CALLBACK(src, .proc/hallucination_time, target), rand(300,600)) - return TRUE - -/obj/effect/proc_holder/changeling/sting/LSD/proc/hallucination_time(mob/living/carbon/target) - if(target) - target.hallucination = max(400, target.hallucination) - -/obj/effect/proc_holder/changeling/sting/cryo - name = "Cryogenic Sting" - desc = "We silently sting a human with a cocktail of chemicals that freeze them." - helptext = "Does not provide a warning to the victim, though they will likely realize they are suddenly freezing." - sting_icon = "sting_cryo" - chemical_cost = 15 - dna_cost = 2 - -/obj/effect/proc_holder/changeling/sting/cryo/sting_action(mob/user, mob/target) - add_logs(user, target, "stung", "cryo sting") - if(target.reagents) - target.reagents.add_reagent("frostoil", 30) - return TRUE +/obj/effect/proc_holder/changeling/sting + name = "Tiny Prick" + desc = "Stabby stabby." + var/sting_icon = null + +/obj/effect/proc_holder/changeling/sting/Click() + var/mob/user = usr + if(!user || !user.mind) + return + var/datum/antagonist/changeling/changeling = user.mind.has_antag_datum(/datum/antagonist/changeling) + if(!changeling) + return + if(!changeling.chosen_sting) + set_sting(user) + else + unset_sting(user) + return + +/obj/effect/proc_holder/changeling/sting/proc/set_sting(mob/user) + to_chat(user, "We prepare our sting, use alt+click or middle mouse button on target to sting them.") + var/datum/antagonist/changeling/changeling = user.mind.has_antag_datum(/datum/antagonist/changeling) + changeling.chosen_sting = src + + user.hud_used.lingstingdisplay.icon_state = sting_icon + user.hud_used.lingstingdisplay.invisibility = 0 + +/obj/effect/proc_holder/changeling/sting/proc/unset_sting(mob/user) + to_chat(user, "We retract our sting, we can't sting anyone for now.") + var/datum/antagonist/changeling/changeling = user.mind.has_antag_datum(/datum/antagonist/changeling) + changeling.chosen_sting = null + + user.hud_used.lingstingdisplay.icon_state = null + user.hud_used.lingstingdisplay.invisibility = INVISIBILITY_ABSTRACT + +/mob/living/carbon/proc/unset_sting() + if(mind) + var/datum/antagonist/changeling/changeling = mind.has_antag_datum(/datum/antagonist/changeling) + if(changeling && changeling.chosen_sting) + changeling.chosen_sting.unset_sting(src) + +/obj/effect/proc_holder/changeling/sting/can_sting(mob/user, mob/target) + if(!..()) + return + var/datum/antagonist/changeling/changeling = user.mind.has_antag_datum(/datum/antagonist/changeling) + if(!changeling.chosen_sting) + to_chat(user, "We haven't prepared our sting yet!") + if(!iscarbon(target)) + return + if(!isturf(user.loc)) + return + if(!AStar(user, target.loc, /turf/proc/Distance, changeling.sting_range, simulated_only = 0)) + return + if(target.mind && target.mind.has_antag_datum(/datum/antagonist/changeling)) + sting_feedback(user, target) + changeling.chem_charges -= chemical_cost //?? + return 1 + +/obj/effect/proc_holder/changeling/sting/sting_feedback(mob/user, mob/target) + if(!target) + return + to_chat(user, "We stealthily sting [target.name].") + if(target.mind && target.mind.has_antag_datum(/datum/antagonist/changeling)) + to_chat(target, "You feel a tiny prick.") + return 1 + + +/obj/effect/proc_holder/changeling/sting/transformation + name = "Transformation Sting" + desc = "We silently sting a human, injecting a retrovirus that forces them to transform." + helptext = "The victim will transform much like a changeling would. Does not provide a warning to others. Mutations will not be transferred, and monkeys will become human." + sting_icon = "sting_transform" + chemical_cost = 50 + dna_cost = 3 + var/datum/changelingprofile/selected_dna = null + +/obj/effect/proc_holder/changeling/sting/transformation/Click() + var/mob/user = usr + var/datum/antagonist/changeling/changeling = user.mind.has_antag_datum(/datum/antagonist/changeling) + if(changeling.chosen_sting) + unset_sting(user) + return + selected_dna = changeling.select_dna("Select the target DNA: ", "Target DNA") + if(!selected_dna) + return + if(NOTRANSSTING in selected_dna.dna.species.species_traits) + to_chat(user, "That DNA is not compatible with changeling retrovirus!") + return + ..() + +/obj/effect/proc_holder/changeling/sting/transformation/can_sting(mob/user, mob/living/carbon/target) + if(!..()) + return + if((target.has_trait(TRAIT_HUSK)) || !iscarbon(target) || (NOTRANSSTING in target.dna.species.species_traits)) + to_chat(user, "Our sting appears ineffective against its DNA.") + return 0 + return 1 + +/obj/effect/proc_holder/changeling/sting/transformation/sting_action(mob/user, mob/target) + add_logs(user, target, "stung", "transformation sting", " new identity is [selected_dna.dna.real_name]") + var/datum/dna/NewDNA = selected_dna.dna + if(ismonkey(target)) + to_chat(user, "Our genes cry out as we sting [target.name]!") + + var/mob/living/carbon/C = target + . = TRUE + if(istype(C)) + C.real_name = NewDNA.real_name + NewDNA.transfer_identity(C) + if(ismonkey(C)) + C.humanize(TR_KEEPITEMS | TR_KEEPIMPLANTS | TR_KEEPORGANS | TR_KEEPDAMAGE | TR_KEEPVIRUS | TR_DEFAULTMSG) + C.updateappearance(mutcolor_update=1) + + +/obj/effect/proc_holder/changeling/sting/false_armblade + name = "False Armblade Sting" + desc = "We silently sting a human, injecting a retrovirus that mutates their arm to temporarily appear as an armblade." + helptext = "The victim will form an armblade much like a changeling would, except the armblade is dull and useless." + sting_icon = "sting_armblade" + chemical_cost = 20 + dna_cost = 1 + +/obj/item/melee/arm_blade/false + desc = "A grotesque mass of flesh that used to be your arm. Although it looks dangerous at first, you can tell it's actually quite dull and useless." + force = 5 //Basically as strong as a punch + +/obj/item/melee/arm_blade/false/afterattack(atom/target, mob/user, proximity) + return + +/obj/effect/proc_holder/changeling/sting/false_armblade/can_sting(mob/user, mob/target) + if(!..()) + return + if(isliving(target)) + var/mob/living/L = target + if((L.has_trait(TRAIT_HUSK)) || !L.has_dna()) + to_chat(user, "Our sting appears ineffective against its DNA.") + return 0 + return 1 + +/obj/effect/proc_holder/changeling/sting/false_armblade/sting_action(mob/user, mob/target) + add_logs(user, target, "stung", object="falso armblade sting") + + var/obj/item/held = target.get_active_held_item() + if(held && !target.dropItemToGround(held)) + to_chat(user, "[held] is stuck to their hand, you cannot grow a false armblade over it!") + return + + if(ismonkey(target)) + to_chat(user, "Our genes cry out as we sting [target.name]!") + + var/obj/item/melee/arm_blade/false/blade = new(target,1) + target.put_in_hands(blade) + target.visible_message("A grotesque blade forms around [target.name]\'s arm!", "Your arm twists and mutates, transforming into a horrific monstrosity!", "You hear organic matter ripping and tearing!") + playsound(target, 'sound/effects/blobattack.ogg', 30, 1) + + addtimer(CALLBACK(src, .proc/remove_fake, target, blade), 600) + return TRUE + +/obj/effect/proc_holder/changeling/sting/false_armblade/proc/remove_fake(mob/target, obj/item/melee/arm_blade/false/blade) + playsound(target, 'sound/effects/blobattack.ogg', 30, 1) + target.visible_message("With a sickening crunch, \ + [target] reforms their [blade.name] into an arm!", + "[blade] reforms back to normal.", + "Your eyes burn horrifically!") + target.become_nearsighted(EYE_DAMAGE) + target.blind_eyes(20) + target.blur_eyes(40) + return TRUE + +/obj/effect/proc_holder/changeling/sting/LSD + name = "Hallucination Sting" + desc = "Causes terror in the target." + helptext = "We evolve the ability to sting a target with a powerful hallucinogenic chemical. The target does not notice they have been stung, and the effect occurs after 30 to 60 seconds." + sting_icon = "sting_lsd" + chemical_cost = 10 + dna_cost = 1 + +/obj/effect/proc_holder/changeling/sting/LSD/sting_action(mob/user, mob/living/carbon/target) + add_logs(user, target, "stung", "LSD sting") + addtimer(CALLBACK(src, .proc/hallucination_time, target), rand(300,600)) + return TRUE + +/obj/effect/proc_holder/changeling/sting/LSD/proc/hallucination_time(mob/living/carbon/target) + if(target) + target.hallucination = max(400, target.hallucination) + +/obj/effect/proc_holder/changeling/sting/cryo + name = "Cryogenic Sting" + desc = "We silently sting a human with a cocktail of chemicals that freeze them." + helptext = "Does not provide a warning to the victim, though they will likely realize they are suddenly freezing." + sting_icon = "sting_cryo" + chemical_cost = 15 + dna_cost = 2 + +/obj/effect/proc_holder/changeling/sting/cryo/sting_action(mob/user, mob/target) + add_logs(user, target, "stung", "cryo sting") + if(target.reagents) + target.reagents.add_reagent("frostoil", 30) + return TRUE diff --git a/code/game/gamemodes/changeling/powers/transform.dm b/code/modules/antagonists/changeling/powers/transform.dm similarity index 96% rename from code/game/gamemodes/changeling/powers/transform.dm rename to code/modules/antagonists/changeling/powers/transform.dm index a977bab3e0..f5e6706af6 100644 --- a/code/game/gamemodes/changeling/powers/transform.dm +++ b/code/modules/antagonists/changeling/powers/transform.dm @@ -1,129 +1,129 @@ -/obj/effect/proc_holder/changeling/transform - name = "Transform" - desc = "We take on the appearance and voice of one we have absorbed." - chemical_cost = 5 - dna_cost = 0 - req_dna = 1 - req_human = 1 - -/obj/item/clothing/glasses/changeling - name = "flesh" - flags_1 = NODROP_1 - -/obj/item/clothing/glasses/changeling/attack_hand(mob/user) - if(loc == user && user.mind && user.mind.has_antag_datum(/datum/antagonist/changeling)) - to_chat(user, "You reabsorb [src] into your body.") - qdel(src) - return - ..() - -/obj/item/clothing/under/changeling - name = "flesh" - flags_1 = NODROP_1 - -/obj/item/clothing/under/changeling/attack_hand(mob/user) - if(loc == user && user.mind && user.mind.has_antag_datum(/datum/antagonist/changeling)) - to_chat(user, "You reabsorb [src] into your body.") - qdel(src) - return - ..() - -/obj/item/clothing/suit/changeling - name = "flesh" - flags_1 = NODROP_1 - allowed = list(/obj/item/changeling) - -/obj/item/clothing/suit/changeling/attack_hand(mob/user) - if(loc == user && user.mind && user.mind.has_antag_datum(/datum/antagonist/changeling)) - to_chat(user, "You reabsorb [src] into your body.") - qdel(src) - return - ..() - -/obj/item/clothing/head/changeling - name = "flesh" - flags_1 = NODROP_1 - -/obj/item/clothing/head/changeling/attack_hand(mob/user) - if(loc == user && user.mind && user.mind.has_antag_datum(/datum/antagonist/changeling)) - to_chat(user, "You reabsorb [src] into your body.") - qdel(src) - return - ..() - -/obj/item/clothing/shoes/changeling - name = "flesh" - flags_1 = NODROP_1 - -/obj/item/clothing/shoes/changeling/attack_hand(mob/user) - if(loc == user && user.mind && user.mind.has_antag_datum(/datum/antagonist/changeling)) - to_chat(user, "You reabsorb [src] into your body.") - qdel(src) - return - ..() - -/obj/item/clothing/gloves/changeling - name = "flesh" - flags_1 = NODROP_1 - -/obj/item/clothing/gloves/changeling/attack_hand(mob/user) - if(loc == user && user.mind && user.mind.has_antag_datum(/datum/antagonist/changeling)) - to_chat(user, "You reabsorb [src] into your body.") - qdel(src) - return - ..() - -/obj/item/clothing/mask/changeling - name = "flesh" - flags_1 = NODROP_1 - -/obj/item/clothing/mask/changeling/attack_hand(mob/user) - if(loc == user && user.mind && user.mind.has_antag_datum(/datum/antagonist/changeling)) - to_chat(user, "You reabsorb [src] into your body.") - qdel(src) - return - ..() - -/obj/item/changeling - name = "flesh" - flags_1 = NODROP_1 - slot_flags = ALL - allowed = list(/obj/item/changeling) - -/obj/item/changeling/attack_hand(mob/user) - if(loc == user && user.mind && user.mind.has_antag_datum(/datum/antagonist/changeling)) - to_chat(user, "You reabsorb [src] into your body.") - qdel(src) - return - ..() - -//Change our DNA to that of somebody we've absorbed. -/obj/effect/proc_holder/changeling/transform/sting_action(mob/living/carbon/human/user) - var/datum/antagonist/changeling/changeling = user.mind.has_antag_datum(/datum/antagonist/changeling) - var/datum/changelingprofile/chosen_prof = changeling.select_dna("Select the target DNA: ", "Target DNA") - - if(!chosen_prof) - return - - changeling_transform(user, chosen_prof) - return TRUE - -/datum/antagonist/changeling/proc/select_dna(var/prompt, var/title) - var/mob/living/carbon/user = owner.current - if(!istype(user)) - return - var/list/names = list("Drop Flesh Disguise") - for(var/datum/changelingprofile/prof in stored_profiles) - names += "[prof.name]" - - var/chosen_name = input(prompt, title, null) as null|anything in names - if(!chosen_name) - return - - if(chosen_name == "Drop Flesh Disguise") - for(var/slot in GLOB.slots) - if(istype(user.vars[slot], GLOB.slot2type[slot])) - qdel(user.vars[slot]) - - var/datum/changelingprofile/prof = get_dna(chosen_name) - return prof +/obj/effect/proc_holder/changeling/transform + name = "Transform" + desc = "We take on the appearance and voice of one we have absorbed." + chemical_cost = 5 + dna_cost = 0 + req_dna = 1 + req_human = 1 + +/obj/item/clothing/glasses/changeling + name = "flesh" + flags_1 = NODROP_1 + +/obj/item/clothing/glasses/changeling/attack_hand(mob/user) + if(loc == user && user.mind && user.mind.has_antag_datum(/datum/antagonist/changeling)) + to_chat(user, "You reabsorb [src] into your body.") + qdel(src) + return + ..() + +/obj/item/clothing/under/changeling + name = "flesh" + flags_1 = NODROP_1 + +/obj/item/clothing/under/changeling/attack_hand(mob/user) + if(loc == user && user.mind && user.mind.has_antag_datum(/datum/antagonist/changeling)) + to_chat(user, "You reabsorb [src] into your body.") + qdel(src) + return + ..() + +/obj/item/clothing/suit/changeling + name = "flesh" + flags_1 = NODROP_1 + allowed = list(/obj/item/changeling) + +/obj/item/clothing/suit/changeling/attack_hand(mob/user) + if(loc == user && user.mind && user.mind.has_antag_datum(/datum/antagonist/changeling)) + to_chat(user, "You reabsorb [src] into your body.") + qdel(src) + return + ..() + +/obj/item/clothing/head/changeling + name = "flesh" + flags_1 = NODROP_1 + +/obj/item/clothing/head/changeling/attack_hand(mob/user) + if(loc == user && user.mind && user.mind.has_antag_datum(/datum/antagonist/changeling)) + to_chat(user, "You reabsorb [src] into your body.") + qdel(src) + return + ..() + +/obj/item/clothing/shoes/changeling + name = "flesh" + flags_1 = NODROP_1 + +/obj/item/clothing/shoes/changeling/attack_hand(mob/user) + if(loc == user && user.mind && user.mind.has_antag_datum(/datum/antagonist/changeling)) + to_chat(user, "You reabsorb [src] into your body.") + qdel(src) + return + ..() + +/obj/item/clothing/gloves/changeling + name = "flesh" + flags_1 = NODROP_1 + +/obj/item/clothing/gloves/changeling/attack_hand(mob/user) + if(loc == user && user.mind && user.mind.has_antag_datum(/datum/antagonist/changeling)) + to_chat(user, "You reabsorb [src] into your body.") + qdel(src) + return + ..() + +/obj/item/clothing/mask/changeling + name = "flesh" + flags_1 = NODROP_1 + +/obj/item/clothing/mask/changeling/attack_hand(mob/user) + if(loc == user && user.mind && user.mind.has_antag_datum(/datum/antagonist/changeling)) + to_chat(user, "You reabsorb [src] into your body.") + qdel(src) + return + ..() + +/obj/item/changeling + name = "flesh" + flags_1 = NODROP_1 + slot_flags = ALL + allowed = list(/obj/item/changeling) + +/obj/item/changeling/attack_hand(mob/user) + if(loc == user && user.mind && user.mind.has_antag_datum(/datum/antagonist/changeling)) + to_chat(user, "You reabsorb [src] into your body.") + qdel(src) + return + ..() + +//Change our DNA to that of somebody we've absorbed. +/obj/effect/proc_holder/changeling/transform/sting_action(mob/living/carbon/human/user) + var/datum/antagonist/changeling/changeling = user.mind.has_antag_datum(/datum/antagonist/changeling) + var/datum/changelingprofile/chosen_prof = changeling.select_dna("Select the target DNA: ", "Target DNA") + + if(!chosen_prof) + return + + changeling_transform(user, chosen_prof) + return TRUE + +/datum/antagonist/changeling/proc/select_dna(var/prompt, var/title) + var/mob/living/carbon/user = owner.current + if(!istype(user)) + return + var/list/names = list("Drop Flesh Disguise") + for(var/datum/changelingprofile/prof in stored_profiles) + names += "[prof.name]" + + var/chosen_name = input(prompt, title, null) as null|anything in names + if(!chosen_name) + return + + if(chosen_name == "Drop Flesh Disguise") + for(var/slot in GLOB.slots) + if(istype(user.vars[slot], GLOB.slot2type[slot])) + qdel(user.vars[slot]) + + var/datum/changelingprofile/prof = get_dna(chosen_name) + return prof diff --git a/code/game/gamemodes/clock_cult/clock_effect.dm b/code/modules/antagonists/clockcult/clock_effect.dm similarity index 100% rename from code/game/gamemodes/clock_cult/clock_effect.dm rename to code/modules/antagonists/clockcult/clock_effect.dm diff --git a/code/game/gamemodes/clock_cult/clock_effects/city_of_cogs_rift.dm b/code/modules/antagonists/clockcult/clock_effects/city_of_cogs_rift.dm similarity index 100% rename from code/game/gamemodes/clock_cult/clock_effects/city_of_cogs_rift.dm rename to code/modules/antagonists/clockcult/clock_effects/city_of_cogs_rift.dm diff --git a/code/game/gamemodes/clock_cult/clock_effects/clock_overlay.dm b/code/modules/antagonists/clockcult/clock_effects/clock_overlay.dm similarity index 100% rename from code/game/gamemodes/clock_cult/clock_effects/clock_overlay.dm rename to code/modules/antagonists/clockcult/clock_effects/clock_overlay.dm diff --git a/code/game/gamemodes/clock_cult/clock_effects/clock_sigils.dm b/code/modules/antagonists/clockcult/clock_effects/clock_sigils.dm similarity index 100% rename from code/game/gamemodes/clock_cult/clock_effects/clock_sigils.dm rename to code/modules/antagonists/clockcult/clock_effects/clock_sigils.dm diff --git a/code/game/gamemodes/clock_cult/clock_effects/general_markers.dm b/code/modules/antagonists/clockcult/clock_effects/general_markers.dm similarity index 100% rename from code/game/gamemodes/clock_cult/clock_effects/general_markers.dm rename to code/modules/antagonists/clockcult/clock_effects/general_markers.dm diff --git a/code/game/gamemodes/clock_cult/clock_effects/servant_blocker.dm b/code/modules/antagonists/clockcult/clock_effects/servant_blocker.dm similarity index 100% rename from code/game/gamemodes/clock_cult/clock_effects/servant_blocker.dm rename to code/modules/antagonists/clockcult/clock_effects/servant_blocker.dm diff --git a/code/game/gamemodes/clock_cult/clock_effects/spatial_gateway.dm b/code/modules/antagonists/clockcult/clock_effects/spatial_gateway.dm similarity index 100% rename from code/game/gamemodes/clock_cult/clock_effects/spatial_gateway.dm rename to code/modules/antagonists/clockcult/clock_effects/spatial_gateway.dm diff --git a/code/game/gamemodes/clock_cult/clock_helpers/clock_powerdrain.dm b/code/modules/antagonists/clockcult/clock_helpers/clock_powerdrain.dm similarity index 100% rename from code/game/gamemodes/clock_cult/clock_helpers/clock_powerdrain.dm rename to code/modules/antagonists/clockcult/clock_helpers/clock_powerdrain.dm diff --git a/code/game/gamemodes/clock_cult/clock_helpers/component_helpers.dm b/code/modules/antagonists/clockcult/clock_helpers/component_helpers.dm similarity index 100% rename from code/game/gamemodes/clock_cult/clock_helpers/component_helpers.dm rename to code/modules/antagonists/clockcult/clock_helpers/component_helpers.dm diff --git a/code/game/gamemodes/clock_cult/clock_helpers/fabrication_helpers.dm b/code/modules/antagonists/clockcult/clock_helpers/fabrication_helpers.dm similarity index 100% rename from code/game/gamemodes/clock_cult/clock_helpers/fabrication_helpers.dm rename to code/modules/antagonists/clockcult/clock_helpers/fabrication_helpers.dm diff --git a/code/game/gamemodes/clock_cult/clock_helpers/hierophant_network.dm b/code/modules/antagonists/clockcult/clock_helpers/hierophant_network.dm similarity index 100% rename from code/game/gamemodes/clock_cult/clock_helpers/hierophant_network.dm rename to code/modules/antagonists/clockcult/clock_helpers/hierophant_network.dm diff --git a/code/game/gamemodes/clock_cult/clock_helpers/power_helpers.dm b/code/modules/antagonists/clockcult/clock_helpers/power_helpers.dm similarity index 100% rename from code/game/gamemodes/clock_cult/clock_helpers/power_helpers.dm rename to code/modules/antagonists/clockcult/clock_helpers/power_helpers.dm diff --git a/code/game/gamemodes/clock_cult/clock_helpers/ratvarian_language.dm b/code/modules/antagonists/clockcult/clock_helpers/ratvarian_language.dm similarity index 100% rename from code/game/gamemodes/clock_cult/clock_helpers/ratvarian_language.dm rename to code/modules/antagonists/clockcult/clock_helpers/ratvarian_language.dm diff --git a/code/game/gamemodes/clock_cult/clock_helpers/scripture_checks.dm b/code/modules/antagonists/clockcult/clock_helpers/scripture_checks.dm similarity index 100% rename from code/game/gamemodes/clock_cult/clock_helpers/scripture_checks.dm rename to code/modules/antagonists/clockcult/clock_helpers/scripture_checks.dm diff --git a/code/game/gamemodes/clock_cult/clock_helpers/slab_abilities.dm b/code/modules/antagonists/clockcult/clock_helpers/slab_abilities.dm similarity index 100% rename from code/game/gamemodes/clock_cult/clock_helpers/slab_abilities.dm rename to code/modules/antagonists/clockcult/clock_helpers/slab_abilities.dm diff --git a/code/game/gamemodes/clock_cult/clock_item.dm b/code/modules/antagonists/clockcult/clock_item.dm similarity index 100% rename from code/game/gamemodes/clock_cult/clock_item.dm rename to code/modules/antagonists/clockcult/clock_item.dm diff --git a/code/game/gamemodes/clock_cult/clock_items/clock_components.dm b/code/modules/antagonists/clockcult/clock_items/clock_components.dm similarity index 100% rename from code/game/gamemodes/clock_cult/clock_items/clock_components.dm rename to code/modules/antagonists/clockcult/clock_items/clock_components.dm diff --git a/code/game/gamemodes/clock_cult/clock_items/clock_weapons/_call_weapon.dm b/code/modules/antagonists/clockcult/clock_items/clock_weapons/_call_weapon.dm similarity index 100% rename from code/game/gamemodes/clock_cult/clock_items/clock_weapons/_call_weapon.dm rename to code/modules/antagonists/clockcult/clock_items/clock_weapons/_call_weapon.dm diff --git a/code/game/gamemodes/clock_cult/clock_items/clock_weapons/ratvarian_spear.dm b/code/modules/antagonists/clockcult/clock_items/clock_weapons/ratvarian_spear.dm similarity index 100% rename from code/game/gamemodes/clock_cult/clock_items/clock_weapons/ratvarian_spear.dm rename to code/modules/antagonists/clockcult/clock_items/clock_weapons/ratvarian_spear.dm diff --git a/code/game/gamemodes/clock_cult/clock_items/clockwork_armor.dm b/code/modules/antagonists/clockcult/clock_items/clockwork_armor.dm similarity index 100% rename from code/game/gamemodes/clock_cult/clock_items/clockwork_armor.dm rename to code/modules/antagonists/clockcult/clock_items/clockwork_armor.dm diff --git a/code/game/gamemodes/clock_cult/clock_items/clockwork_slab.dm b/code/modules/antagonists/clockcult/clock_items/clockwork_slab.dm similarity index 100% rename from code/game/gamemodes/clock_cult/clock_items/clockwork_slab.dm rename to code/modules/antagonists/clockcult/clock_items/clockwork_slab.dm diff --git a/code/game/gamemodes/clock_cult/clock_items/clockwork_weaponry.dm b/code/modules/antagonists/clockcult/clock_items/clockwork_weaponry.dm similarity index 100% rename from code/game/gamemodes/clock_cult/clock_items/clockwork_weaponry.dm rename to code/modules/antagonists/clockcult/clock_items/clockwork_weaponry.dm diff --git a/code/game/gamemodes/clock_cult/clock_items/construct_chassis.dm b/code/modules/antagonists/clockcult/clock_items/construct_chassis.dm similarity index 100% rename from code/game/gamemodes/clock_cult/clock_items/construct_chassis.dm rename to code/modules/antagonists/clockcult/clock_items/construct_chassis.dm diff --git a/code/game/gamemodes/clock_cult/clock_items/integration_cog.dm b/code/modules/antagonists/clockcult/clock_items/integration_cog.dm similarity index 100% rename from code/game/gamemodes/clock_cult/clock_items/integration_cog.dm rename to code/modules/antagonists/clockcult/clock_items/integration_cog.dm diff --git a/code/game/gamemodes/clock_cult/clock_items/judicial_visor.dm b/code/modules/antagonists/clockcult/clock_items/judicial_visor.dm similarity index 100% rename from code/game/gamemodes/clock_cult/clock_items/judicial_visor.dm rename to code/modules/antagonists/clockcult/clock_items/judicial_visor.dm diff --git a/code/game/gamemodes/clock_cult/clock_items/replica_fabricator.dm b/code/modules/antagonists/clockcult/clock_items/replica_fabricator.dm similarity index 100% rename from code/game/gamemodes/clock_cult/clock_items/replica_fabricator.dm rename to code/modules/antagonists/clockcult/clock_items/replica_fabricator.dm diff --git a/code/game/gamemodes/clock_cult/clock_items/soul_vessel.dm b/code/modules/antagonists/clockcult/clock_items/soul_vessel.dm similarity index 96% rename from code/game/gamemodes/clock_cult/clock_items/soul_vessel.dm rename to code/modules/antagonists/clockcult/clock_items/soul_vessel.dm index ca80d6f082..9dbbf4a11b 100644 --- a/code/game/gamemodes/clock_cult/clock_items/soul_vessel.dm +++ b/code/modules/antagonists/clockcult/clock_items/soul_vessel.dm @@ -92,11 +92,9 @@ return playsound(H, 'sound/misc/splort.ogg', 60, 1, -1) playsound(H, 'sound/magic/clockwork/anima_fragment_attack.ogg', 40, 1, -1) - var/prev_fakedeath = (H.status_flags & FAKEDEATH) - H.status_flags |= FAKEDEATH //we want to make sure they don't deathgasp and maybe possibly explode + H.fakedeath("soul_vessel") //we want to make sure they don't deathgasp and maybe possibly explode H.death() - if(!prev_fakedeath) - H.status_flags &= ~FAKEDEATH + H.cure_fakedeath("soul_vessel") H.apply_status_effect(STATUS_EFFECT_SIGILMARK) //let them be affected by vitality matrices picked_name = "Slave" braintype = picked_name diff --git a/code/game/gamemodes/clock_cult/clock_items/wraith_spectacles.dm b/code/modules/antagonists/clockcult/clock_items/wraith_spectacles.dm similarity index 95% rename from code/game/gamemodes/clock_cult/clock_items/wraith_spectacles.dm rename to code/modules/antagonists/clockcult/clock_items/wraith_spectacles.dm index 60f95d6716..c1bf94842d 100644 --- a/code/game/gamemodes/clock_cult/clock_items/wraith_spectacles.dm +++ b/code/modules/antagonists/clockcult/clock_items/wraith_spectacles.dm @@ -32,7 +32,7 @@ if(ishuman(loc)) var/mob/living/carbon/human/H = loc if(src == H.glasses && !up) - if(H.has_disability(DISABILITY_BLIND)) + if(H.has_trait(TRAIT_BLIND)) to_chat(H, "\"You're blind, idiot. Stop embarrassing yourself.\"") return if(blind_cultist(H)) @@ -76,7 +76,7 @@ ..() if(slot != slot_glasses || up) return - if(user.has_disability(DISABILITY_BLIND)) + if(user.has_trait(TRAIT_BLIND)) to_chat(user, "\"You're blind, idiot. Stop embarrassing yourself.\"" ) return if(blind_cultist(user)) //Cultists instantly go blind @@ -115,11 +115,11 @@ var/obj/item/clothing/glasses/wraith_spectacles/WS = L.glasses desc = "[glasses_right && !WS.up ? "":""]You are [glasses_right ? "":"not "]wearing wraith spectacles[glasses_right && !WS.up ? "!":"."]
\ You have taken [W.eye_damage_done] eye damage from them.
" - if(L.has_disability(DISABILITY_NEARSIGHT)) + if(L.has_trait(TRAIT_NEARSIGHT)) desc += "You are nearsighted!
" else if(glasses_right && !WS.up) desc += "You will become nearsighted at [W.nearsight_breakpoint] eye damage.
" - if(L.has_disability(DISABILITY_BLIND)) + if(L.has_trait(TRAIT_BLIND)) desc += "You are blind!" else if(glasses_right && !WS.up) desc += "You will become blind at [W.blind_breakpoint] eye damage." @@ -153,18 +153,18 @@ qdel(src) /datum/status_effect/wraith_spectacles/proc/apply_eye_damage(mob/living/carbon/human/H) - if(H.has_disability(DISABILITY_BLIND)) + if(H.has_trait(TRAIT_BLIND)) return H.adjust_eye_damage(0.5) eye_damage_done += 0.5 if(eye_damage_done >= 20) H.adjust_blurriness(2) if(eye_damage_done >= nearsight_breakpoint) - if(!H.has_disability(DISABILITY_NEARSIGHT)) + if(!H.has_trait(TRAIT_NEARSIGHT)) to_chat(H, "Your vision doubles, then trembles. Darkness begins to close in. You can't keep this up!") H.become_nearsighted(EYE_DAMAGE) if(eye_damage_done >= blind_breakpoint) - if(!H.has_disability(DISABILITY_BLIND)) + if(!H.has_trait(TRAIT_BLIND)) to_chat(H, "A piercing white light floods your vision. Suddenly, all goes dark!") H.become_blind(EYE_DAMAGE) diff --git a/code/game/gamemodes/clock_cult/clock_mobs.dm b/code/modules/antagonists/clockcult/clock_mobs.dm similarity index 100% rename from code/game/gamemodes/clock_cult/clock_mobs.dm rename to code/modules/antagonists/clockcult/clock_mobs.dm diff --git a/code/game/gamemodes/clock_cult/clock_mobs/_eminence.dm b/code/modules/antagonists/clockcult/clock_mobs/_eminence.dm similarity index 100% rename from code/game/gamemodes/clock_cult/clock_mobs/_eminence.dm rename to code/modules/antagonists/clockcult/clock_mobs/_eminence.dm diff --git a/code/game/gamemodes/clock_cult/clock_mobs/clockwork_marauder.dm b/code/modules/antagonists/clockcult/clock_mobs/clockwork_marauder.dm similarity index 100% rename from code/game/gamemodes/clock_cult/clock_mobs/clockwork_marauder.dm rename to code/modules/antagonists/clockcult/clock_mobs/clockwork_marauder.dm diff --git a/code/game/gamemodes/clock_cult/clock_scripture.dm b/code/modules/antagonists/clockcult/clock_scripture.dm similarity index 100% rename from code/game/gamemodes/clock_cult/clock_scripture.dm rename to code/modules/antagonists/clockcult/clock_scripture.dm diff --git a/code/game/gamemodes/clock_cult/clock_scriptures/scripture_applications.dm b/code/modules/antagonists/clockcult/clock_scriptures/scripture_applications.dm similarity index 100% rename from code/game/gamemodes/clock_cult/clock_scriptures/scripture_applications.dm rename to code/modules/antagonists/clockcult/clock_scriptures/scripture_applications.dm diff --git a/code/game/gamemodes/clock_cult/clock_scriptures/scripture_cyborg.dm b/code/modules/antagonists/clockcult/clock_scriptures/scripture_cyborg.dm similarity index 100% rename from code/game/gamemodes/clock_cult/clock_scriptures/scripture_cyborg.dm rename to code/modules/antagonists/clockcult/clock_scriptures/scripture_cyborg.dm diff --git a/code/game/gamemodes/clock_cult/clock_scriptures/scripture_drivers.dm b/code/modules/antagonists/clockcult/clock_scriptures/scripture_drivers.dm similarity index 100% rename from code/game/gamemodes/clock_cult/clock_scriptures/scripture_drivers.dm rename to code/modules/antagonists/clockcult/clock_scriptures/scripture_drivers.dm diff --git a/code/game/gamemodes/clock_cult/clock_scriptures/scripture_scripts.dm b/code/modules/antagonists/clockcult/clock_scriptures/scripture_scripts.dm similarity index 100% rename from code/game/gamemodes/clock_cult/clock_scriptures/scripture_scripts.dm rename to code/modules/antagonists/clockcult/clock_scriptures/scripture_scripts.dm diff --git a/code/game/gamemodes/clock_cult/clock_structure.dm b/code/modules/antagonists/clockcult/clock_structure.dm similarity index 100% rename from code/game/gamemodes/clock_cult/clock_structure.dm rename to code/modules/antagonists/clockcult/clock_structure.dm diff --git a/code/game/gamemodes/clock_cult/clock_structures/_trap_object.dm b/code/modules/antagonists/clockcult/clock_structures/_trap_object.dm similarity index 100% rename from code/game/gamemodes/clock_cult/clock_structures/_trap_object.dm rename to code/modules/antagonists/clockcult/clock_structures/_trap_object.dm diff --git a/code/game/gamemodes/clock_cult/clock_structures/ark_of_the_clockwork_justicar.dm b/code/modules/antagonists/clockcult/clock_structures/ark_of_the_clockwork_justicar.dm similarity index 100% rename from code/game/gamemodes/clock_cult/clock_structures/ark_of_the_clockwork_justicar.dm rename to code/modules/antagonists/clockcult/clock_structures/ark_of_the_clockwork_justicar.dm diff --git a/code/game/gamemodes/clock_cult/clock_structures/clockwork_obelisk.dm b/code/modules/antagonists/clockcult/clock_structures/clockwork_obelisk.dm similarity index 100% rename from code/game/gamemodes/clock_cult/clock_structures/clockwork_obelisk.dm rename to code/modules/antagonists/clockcult/clock_structures/clockwork_obelisk.dm diff --git a/code/game/gamemodes/clock_cult/clock_structures/eminence_spire.dm b/code/modules/antagonists/clockcult/clock_structures/eminence_spire.dm similarity index 94% rename from code/game/gamemodes/clock_cult/clock_structures/eminence_spire.dm rename to code/modules/antagonists/clockcult/clock_structures/eminence_spire.dm index ef035234d0..753a82fccb 100644 --- a/code/game/gamemodes/clock_cult/clock_structures/eminence_spire.dm +++ b/code/modules/antagonists/clockcult/clock_structures/eminence_spire.dm @@ -46,10 +46,12 @@ if(!IsAdminGhost(user)) return - var/datum/antagonist/clockcult/random_cultist = locate() in get_antagonists(/datum/antagonist/clockcult) //if theres no cultists new team without eminence will be created anyway. - if(random_cultist && random_cultist.clock_team && random_cultist.clock_team.eminence) - to_chat(user, "There's already an Eminence - too late!") - return + var/datum/mind/rando = locate() in get_antag_minds(/datum/antagonist/clockcult) //if theres no cultists new team without eminence will be created anyway. + if(rando) + var/datum/antagonist/clockcult/random_cultist = rando.has_antag_datum(/datum/antagonist/clockcult) + if(random_cultist && random_cultist.clock_team && random_cultist.clock_team.eminence) + to_chat(user, "There's already an Eminence - too late!") + return if(!GLOB.servants_active) to_chat(user, "The Ark must be active first!") return diff --git a/code/game/gamemodes/clock_cult/clock_structures/heralds_beacon.dm b/code/modules/antagonists/clockcult/clock_structures/heralds_beacon.dm similarity index 100% rename from code/game/gamemodes/clock_cult/clock_structures/heralds_beacon.dm rename to code/modules/antagonists/clockcult/clock_structures/heralds_beacon.dm diff --git a/code/game/gamemodes/clock_cult/clock_structures/mania_motor.dm b/code/modules/antagonists/clockcult/clock_structures/mania_motor.dm similarity index 100% rename from code/game/gamemodes/clock_cult/clock_structures/mania_motor.dm rename to code/modules/antagonists/clockcult/clock_structures/mania_motor.dm diff --git a/code/game/gamemodes/clock_cult/clock_structures/ocular_warden.dm b/code/modules/antagonists/clockcult/clock_structures/ocular_warden.dm similarity index 98% rename from code/game/gamemodes/clock_cult/clock_structures/ocular_warden.dm rename to code/modules/antagonists/clockcult/clock_structures/ocular_warden.dm index 7e538765f3..9c2e806537 100644 --- a/code/game/gamemodes/clock_cult/clock_structures/ocular_warden.dm +++ b/code/modules/antagonists/clockcult/clock_structures/ocular_warden.dm @@ -110,7 +110,7 @@ if(!(BI.resistance_flags & ON_FIRE)) BI.fire_act() continue - if(is_servant_of_ratvar(L) || (L.has_disability(DISABILITY_BLIND)) || L.null_rod_check()) + if(is_servant_of_ratvar(L) || (L.has_trait(TRAIT_BLIND)) || L.null_rod_check()) continue if(L.stat || L.restrained() || L.buckled || L.lying) continue diff --git a/code/game/gamemodes/clock_cult/clock_structures/ratvar_the_clockwork_justicar.dm b/code/modules/antagonists/clockcult/clock_structures/ratvar_the_clockwork_justicar.dm similarity index 99% rename from code/game/gamemodes/clock_cult/clock_structures/ratvar_the_clockwork_justicar.dm rename to code/modules/antagonists/clockcult/clock_structures/ratvar_the_clockwork_justicar.dm index 2a549d9c3c..06513e80f9 100644 --- a/code/game/gamemodes/clock_cult/clock_structures/ratvar_the_clockwork_justicar.dm +++ b/code/modules/antagonists/clockcult/clock_structures/ratvar_the_clockwork_justicar.dm @@ -15,7 +15,7 @@ var/atom/prey //Whatever Ratvar is chasing var/clashing = FALSE //If Ratvar is fighting with Nar-Sie var/convert_range = 10 - dangerous_possession = TRUE + obj_flags = CAN_BE_HIT | DANGEROUS_POSSESSION /obj/structure/destructible/clockwork/massive/ratvar/Initialize() . = ..() diff --git a/code/game/gamemodes/clock_cult/clock_structures/stargazer.dm b/code/modules/antagonists/clockcult/clock_structures/stargazer.dm similarity index 100% rename from code/game/gamemodes/clock_cult/clock_structures/stargazer.dm rename to code/modules/antagonists/clockcult/clock_structures/stargazer.dm diff --git a/code/game/gamemodes/clock_cult/clock_structures/taunting_trail.dm b/code/modules/antagonists/clockcult/clock_structures/taunting_trail.dm similarity index 100% rename from code/game/gamemodes/clock_cult/clock_structures/taunting_trail.dm rename to code/modules/antagonists/clockcult/clock_structures/taunting_trail.dm diff --git a/code/game/gamemodes/clock_cult/clock_structures/trap_triggers/lever.dm b/code/modules/antagonists/clockcult/clock_structures/trap_triggers/lever.dm similarity index 100% rename from code/game/gamemodes/clock_cult/clock_structures/trap_triggers/lever.dm rename to code/modules/antagonists/clockcult/clock_structures/trap_triggers/lever.dm diff --git a/code/game/gamemodes/clock_cult/clock_structures/trap_triggers/pressure_sensor.dm b/code/modules/antagonists/clockcult/clock_structures/trap_triggers/pressure_sensor.dm similarity index 100% rename from code/game/gamemodes/clock_cult/clock_structures/trap_triggers/pressure_sensor.dm rename to code/modules/antagonists/clockcult/clock_structures/trap_triggers/pressure_sensor.dm diff --git a/code/game/gamemodes/clock_cult/clock_structures/trap_triggers/repeater.dm b/code/modules/antagonists/clockcult/clock_structures/trap_triggers/repeater.dm similarity index 100% rename from code/game/gamemodes/clock_cult/clock_structures/trap_triggers/repeater.dm rename to code/modules/antagonists/clockcult/clock_structures/trap_triggers/repeater.dm diff --git a/code/game/gamemodes/clock_cult/clock_structures/traps/brass_skewer.dm b/code/modules/antagonists/clockcult/clock_structures/traps/brass_skewer.dm similarity index 100% rename from code/game/gamemodes/clock_cult/clock_structures/traps/brass_skewer.dm rename to code/modules/antagonists/clockcult/clock_structures/traps/brass_skewer.dm diff --git a/code/game/gamemodes/clock_cult/clock_structures/traps/steam_vent.dm b/code/modules/antagonists/clockcult/clock_structures/traps/steam_vent.dm similarity index 100% rename from code/game/gamemodes/clock_cult/clock_structures/traps/steam_vent.dm rename to code/modules/antagonists/clockcult/clock_structures/traps/steam_vent.dm diff --git a/code/game/gamemodes/clock_cult/clock_structures/wall_gear.dm b/code/modules/antagonists/clockcult/clock_structures/wall_gear.dm similarity index 100% rename from code/game/gamemodes/clock_cult/clock_structures/wall_gear.dm rename to code/modules/antagonists/clockcult/clock_structures/wall_gear.dm diff --git a/code/modules/antagonists/clockcult/clockcult.dm b/code/modules/antagonists/clockcult/clockcult.dm new file mode 100644 index 0000000000..2a05b14d70 --- /dev/null +++ b/code/modules/antagonists/clockcult/clockcult.dm @@ -0,0 +1,219 @@ +//CLOCKCULT PROOF OF CONCEPT +/datum/antagonist/clockcult + name = "Clock Cultist" + roundend_category = "clock cultists" + antagpanel_category = "Clockcult" + job_rank = ROLE_SERVANT_OF_RATVAR + var/datum/action/innate/hierophant/hierophant_network = new() + var/datum/team/clockcult/clock_team + var/make_team = TRUE //This should be only false for tutorial scarabs + +/datum/antagonist/clockcult/silent + silent = TRUE + show_in_antagpanel = FALSE //internal + +/datum/antagonist/clockcult/Destroy() + qdel(hierophant_network) + return ..() + +/datum/antagonist/clockcult/get_team() + return clock_team + +/datum/antagonist/clockcult/create_team(datum/team/clockcult/new_team) + if(!new_team && make_team) + //TODO blah blah same as the others, allow multiple + for(var/datum/antagonist/clockcult/H in GLOB.antagonists) + if(!H.owner) + continue + if(H.clock_team) + clock_team = H.clock_team + return + clock_team = new /datum/team/clockcult + return + if(make_team && !istype(new_team)) + stack_trace("Wrong team type passed to [type] initialization.") + clock_team = new_team + +/datum/antagonist/clockcult/can_be_owned(datum/mind/new_owner) + . = ..() + if(.) + . = is_eligible_servant(new_owner.current) + +/datum/antagonist/clockcult/greet() + if(!owner.current || silent) + return + owner.current.visible_message("[owner.current]'s eyes glow a blazing yellow!", null, null, 7, owner.current) //don't show the owner this message + to_chat(owner.current, "Assist your new companions in their righteous efforts. Your goal is theirs, and theirs yours. You serve the Clockwork \ + Justiciar above all else. Perform his every whim without hesitation.") + owner.current.playsound_local(get_turf(owner.current), 'sound/ambience/antag/clockcultalr.ogg', 70, FALSE, pressure_affected = FALSE) + +/datum/antagonist/clockcult/on_gain() + var/mob/living/current = owner.current + SSticker.mode.servants_of_ratvar += owner + SSticker.mode.update_servant_icons_added(owner) + owner.special_role = "Servant of Ratvar" + owner.current.log_message("Has been converted to the cult of Ratvar!", INDIVIDUAL_ATTACK_LOG) + if(issilicon(current)) + if(iscyborg(current) && !silent) + var/mob/living/silicon/robot/R = current + if(R.connected_ai && !is_servant_of_ratvar(R.connected_ai)) + to_chat(R, "You have been desynced from your master AI.
\ + In addition, your onboard camera is no longer active and you have gained additional equipment, including a limited clockwork slab.
") + else + to_chat(R, "Your onboard camera is no longer active and you have gained additional equipment, including a limited clockwork slab.") + if(isAI(current)) + to_chat(current, "You are now able to use your cameras to listen in on conversations, but can no longer speak in anything but Ratvarian.") + to_chat(current, "You can communicate with other servants by using the Hierophant Network action button in the upper left.") + else if(isbrain(current) || isclockmob(current)) + to_chat(current, "You can communicate with other servants by using the Hierophant Network action button in the upper left.") + ..() + to_chat(current, "This is Ratvar's will: [CLOCKCULT_OBJECTIVE]") + antag_memory += "Ratvar's will: [CLOCKCULT_OBJECTIVE]
" //Memorize the objectives + +/datum/antagonist/clockcult/apply_innate_effects(mob/living/mob_override) + . = ..() + var/mob/living/current = owner.current + if(istype(mob_override)) + current = mob_override + GLOB.all_clockwork_mobs += current + current.faction |= "ratvar" + current.grant_language(/datum/language/ratvar) + current.update_action_buttons_icon() //because a few clockcult things are action buttons and we may be wearing/holding them for whatever reason, we need to update buttons + if(issilicon(current)) + var/mob/living/silicon/S = current + if(iscyborg(S)) + var/mob/living/silicon/robot/R = S + if(!R.shell) + R.UnlinkSelf() + R.module.rebuild_modules() + else if(isAI(S)) + var/mob/living/silicon/ai/A = S + A.can_be_carded = FALSE + A.requires_power = POWER_REQ_CLOCKCULT + var/list/AI_frame = list(mutable_appearance('icons/mob/clockwork_mobs.dmi', "aiframe")) //make the AI's cool frame + for(var/d in GLOB.cardinals) + AI_frame += image('icons/mob/clockwork_mobs.dmi', A, "eye[rand(1, 10)]", dir = d) //the eyes are randomly fast or slow + A.add_overlay(AI_frame) + if(!A.lacks_power()) + A.ai_restore_power() + if(A.eyeobj) + A.eyeobj.relay_speech = TRUE + for(var/mob/living/silicon/robot/R in A.connected_robots) + if(R.connected_ai == A) + add_servant_of_ratvar(R) + S.laws = new/datum/ai_laws/ratvar + S.laws.associate(S) + S.update_icons() + S.show_laws() + hierophant_network.title = "Silicon" + hierophant_network.span_for_name = "nezbere" + hierophant_network.span_for_message = "brass" + else if(isbrain(current)) + hierophant_network.title = "Vessel" + hierophant_network.span_for_name = "nezbere" + hierophant_network.span_for_message = "alloy" + else if(isclockmob(current)) + hierophant_network.title = "Construct" + hierophant_network.span_for_name = "nezbere" + hierophant_network.span_for_message = "brass" + hierophant_network.Grant(current) + current.throw_alert("clockinfo", /obj/screen/alert/clockwork/infodump) + var/obj/structure/destructible/clockwork/massive/celestial_gateway/G = GLOB.ark_of_the_clockwork_justiciar + if(G.active && ishuman(current)) + current.add_overlay(mutable_appearance('icons/effects/genetics.dmi', "servitude", -MUTATIONS_LAYER)) + +/datum/antagonist/clockcult/remove_innate_effects(mob/living/mob_override) + var/mob/living/current = owner.current + if(istype(mob_override)) + current = mob_override + GLOB.all_clockwork_mobs -= current + current.faction -= "ratvar" + current.remove_language(/datum/language/ratvar) + current.clear_alert("clockinfo") + for(var/datum/action/innate/clockwork_armaments/C in owner.current.actions) //Removes any bound clockwork armor + qdel(C) + for(var/datum/action/innate/call_weapon/W in owner.current.actions) //and weapons too + qdel(W) + if(issilicon(current)) + var/mob/living/silicon/S = current + if(isAI(S)) + var/mob/living/silicon/ai/A = S + A.can_be_carded = initial(A.can_be_carded) + A.requires_power = initial(A.requires_power) + A.cut_overlays() + S.make_laws() + S.update_icons() + S.show_laws() + var/mob/living/temp_owner = current + ..() + if(iscyborg(temp_owner)) + var/mob/living/silicon/robot/R = temp_owner + R.module.rebuild_modules() + if(temp_owner) + temp_owner.update_action_buttons_icon() //because a few clockcult things are action buttons and we may be wearing/holding them, we need to update buttons + temp_owner.cut_overlays() + temp_owner.regenerate_icons() + +/datum/antagonist/clockcult/on_removal() + SSticker.mode.servants_of_ratvar -= owner + SSticker.mode.update_servant_icons_removed(owner) + if(!silent) + owner.current.visible_message("[owner] seems to have remembered their true allegiance!", null, null, null, owner.current) + to_chat(owner, "A cold, cold darkness flows through your mind, extinguishing the Justiciar's light and all of your memories as his servant.") + owner.current.log_message("Has renounced the cult of Ratvar!", INDIVIDUAL_ATTACK_LOG) + owner.special_role = null + if(iscyborg(owner.current)) + to_chat(owner.current, "Despite your freedom from Ratvar's influence, you are still irreparably damaged and no longer possess certain functions such as AI linking.") + . = ..() + + +/datum/antagonist/clockcult/admin_add(datum/mind/new_owner,mob/admin) + add_servant_of_ratvar(new_owner.current, TRUE) + message_admins("[key_name_admin(admin)] has made [new_owner.current] into a servant of Ratvar.") + log_admin("[key_name(admin)] has made [new_owner.current] into a servant of Ratvar.") + +/datum/antagonist/clockcult/admin_remove(mob/user) + remove_servant_of_ratvar(owner.current, TRUE) + message_admins("[key_name_admin(user)] has removed clockwork servant status from [owner.current].") + log_admin("[key_name(user)] has removed clockwork servant status from [owner.current].") + +/datum/antagonist/clockcult/get_admin_commands() + . = ..() + .["Give slab"] = CALLBACK(src,.proc/admin_give_slab) + +/datum/antagonist/clockcult/proc/admin_give_slab(mob/admin) + if(!SSticker.mode.equip_servant(owner.current)) + to_chat(admin, "Failed to outfit [owner.current]!") + else + to_chat(admin, "Successfully gave [owner.current] servant equipment!") + +/datum/team/clockcult + name = "Clockcult" + var/list/objective + var/datum/mind/eminence + +/datum/team/clockcult/proc/check_clockwork_victory() + if(GLOB.clockwork_gateway_activated) + return TRUE + return FALSE + +/datum/team/clockcult/roundend_report() + var/list/parts = list() + + if(check_clockwork_victory()) + parts += "Ratvar's servants defended the Ark until its activation!" + else + parts += "The Ark was destroyed! Ratvar will rust away for all eternity!" + parts += " " + parts += "The servants' objective was: [CLOCKCULT_OBJECTIVE]." + parts += "Construction Value(CV) was: [GLOB.clockwork_construction_value]" + for(var/i in SSticker.scripture_states) + if(i != SCRIPTURE_DRIVER) + parts += "[i] scripture was: [SSticker.scripture_states[i] ? "UN":""]LOCKED" + if(eminence) + parts += "The Eminence was: [printplayer(eminence)]" + if(members.len) + parts += "Ratvar's servants were:" + parts += printplayerlist(members - eminence) + + return "
[parts.Join("
")]
" \ No newline at end of file diff --git a/code/modules/antagonists/cult/cult.dm b/code/modules/antagonists/cult/cult.dm new file mode 100644 index 0000000000..3b9fa7b8c4 --- /dev/null +++ b/code/modules/antagonists/cult/cult.dm @@ -0,0 +1,329 @@ +#define SUMMON_POSSIBILITIES 3 + +/datum/antagonist/cult + name = "Cultist" + roundend_category = "cultists" + antagpanel_category = "Cult" + var/datum/action/innate/cult/comm/communion = new + var/datum/action/innate/cult/mastervote/vote = new + job_rank = ROLE_CULTIST + var/ignore_implant = FALSE + var/give_equipment = FALSE + + var/datum/team/cult/cult_team + +/datum/antagonist/cult/get_team() + return cult_team + +/datum/antagonist/cult/create_team(datum/team/cult/new_team) + if(!new_team) + //todo remove this and allow admin buttons to create more than one cult + for(var/datum/antagonist/cult/H in GLOB.antagonists) + if(!H.owner) + continue + if(H.cult_team) + cult_team = H.cult_team + return + cult_team = new /datum/team/cult + cult_team.setup_objectives() + return + if(!istype(new_team)) + stack_trace("Wrong team type passed to [type] initialization.") + cult_team = new_team + +/datum/antagonist/cult/proc/add_objectives() + objectives |= cult_team.objectives + owner.objectives |= objectives + +/datum/antagonist/cult/proc/remove_objectives() + owner.objectives -= objectives + +/datum/antagonist/cult/Destroy() + QDEL_NULL(communion) + QDEL_NULL(vote) + return ..() + +/datum/antagonist/cult/can_be_owned(datum/mind/new_owner) + . = ..() + if(. && !ignore_implant) + . = is_convertable_to_cult(new_owner.current,cult_team) + +/datum/antagonist/cult/greet() + to_chat(owner, "You are a member of the cult!") + owner.current.playsound_local(get_turf(owner.current), 'sound/ambience/antag/bloodcult.ogg', 100, FALSE, pressure_affected = FALSE)//subject to change + owner.announce_objectives() + +/datum/antagonist/cult/on_gain() + . = ..() + var/mob/living/current = owner.current + add_objectives() + if(give_equipment) + equip_cultist() + SSticker.mode.cult += owner // Only add after they've been given objectives + SSticker.mode.update_cult_icons_added(owner) + current.log_message("Has been converted to the cult of Nar'Sie!", INDIVIDUAL_ATTACK_LOG) + + if(cult_team.blood_target && cult_team.blood_target_image && current.client) + current.client.images += cult_team.blood_target_image + + +/datum/antagonist/cult/proc/equip_cultist(tome=FALSE) + var/mob/living/carbon/H = owner.current + if(!istype(H)) + return + if (owner.assigned_role == "Clown") + to_chat(owner, "Your training has allowed you to overcome your clownish nature, allowing you to wield weapons without harming yourself.") + H.dna.remove_mutation(CLOWNMUT) + + if(tome) + . += cult_give_item(/obj/item/tome, H) + else + . += cult_give_item(/obj/item/paper/talisman/supply, H) + to_chat(owner, "These will help you start the cult on this station. Use them well, and remember - you are not the only one.") + + +/datum/antagonist/cult/proc/cult_give_item(obj/item/item_path, mob/living/carbon/human/mob) + var/list/slots = list( + "backpack" = slot_in_backpack, + "left pocket" = slot_l_store, + "right pocket" = slot_r_store + ) + + var/T = new item_path(mob) + var/item_name = initial(item_path.name) + var/where = mob.equip_in_one_of_slots(T, slots) + if(!where) + to_chat(mob, "Unfortunately, you weren't able to get a [item_name]. This is very bad and you should adminhelp immediately (press F1).") + return 0 + else + to_chat(mob, "You have a [item_name] in your [where].") + if(where == "backpack") + var/obj/item/storage/B = mob.back + B.orient2hud(mob) + B.show_to(mob) + return 1 + +/datum/antagonist/cult/apply_innate_effects(mob/living/mob_override) + . = ..() + var/mob/living/current = owner.current + if(mob_override) + current = mob_override + current.faction |= "cult" + current.grant_language(/datum/language/narsie) + current.verbs += /mob/living/proc/cult_help + if(!cult_team.cult_mastered) + vote.Grant(current) + communion.Grant(current) + current.throw_alert("bloodsense", /obj/screen/alert/bloodsense) + +/datum/antagonist/cult/remove_innate_effects(mob/living/mob_override) + . = ..() + var/mob/living/current = owner.current + if(mob_override) + current = mob_override + current.faction -= "cult" + current.remove_language(/datum/language/narsie) + current.verbs -= /mob/living/proc/cult_help + vote.Remove(current) + communion.Remove(current) + current.clear_alert("bloodsense") + +/datum/antagonist/cult/on_removal() + remove_objectives() + SSticker.mode.cult -= owner + SSticker.mode.update_cult_icons_removed(owner) + if(!silent) + owner.current.visible_message("[owner.current] looks like [owner.current.p_they()] just reverted to their old faith!", null, null, null, owner.current) + to_chat(owner.current, "An unfamiliar white light flashes through your mind, cleansing the taint of the Geometer and all your memories as her servant.") + owner.current.log_message("Has renounced the cult of Nar'Sie!", INDIVIDUAL_ATTACK_LOG) + if(cult_team.blood_target && cult_team.blood_target_image && owner.current.client) + owner.current.client.images -= cult_team.blood_target_image + . = ..() + +/datum/antagonist/cult/admin_add(datum/mind/new_owner,mob/admin) + give_equipment = FALSE + new_owner.add_antag_datum(src) + message_admins("[key_name_admin(admin)] has cult'ed [new_owner.current].") + log_admin("[key_name(admin)] has cult'ed [new_owner.current].") + +/datum/antagonist/cult/admin_remove(mob/user) + message_admins("[key_name_admin(user)] has decult'ed [owner.current].") + log_admin("[key_name(user)] has decult'ed [owner.current].") + SSticker.mode.remove_cultist(owner,silent=TRUE) //disgusting + +/datum/antagonist/cult/get_admin_commands() + . = ..() + .["Tome"] = CALLBACK(src,.proc/admin_give_tome) + .["Amulet"] = CALLBACK(src,.proc/admin_give_amulet) + +/datum/antagonist/cult/proc/admin_give_tome(mob/admin) + if(equip_cultist(owner.current,1)) + to_chat(admin, "Spawning tome failed!") + +/datum/antagonist/cult/proc/admin_give_amulet(mob/admin) + if (equip_cultist(owner.current)) + to_chat(admin, "Spawning amulet failed!") + +/datum/antagonist/cult/master + ignore_implant = TRUE + show_in_antagpanel = FALSE //Feel free to add this later + var/datum/action/innate/cult/master/finalreck/reckoning = new + var/datum/action/innate/cult/master/cultmark/bloodmark = new + var/datum/action/innate/cult/master/pulse/throwing = new + +/datum/antagonist/cult/master/Destroy() + QDEL_NULL(reckoning) + QDEL_NULL(bloodmark) + QDEL_NULL(throwing) + return ..() + +/datum/antagonist/cult/master/on_gain() + . = ..() + var/mob/living/current = owner.current + set_antag_hud(current, "cultmaster") + +/datum/antagonist/cult/master/greet() + to_chat(owner.current, "You are the cult's Master. As the cult's Master, you have a unique title and loud voice when communicating, are capable of marking \ + targets, such as a location or a noncultist, to direct the cult to them, and, finally, you are capable of summoning the entire living cult to your location once.") + to_chat(owner.current, "Use these abilities to direct the cult to victory at any cost.") + +/datum/antagonist/cult/master/apply_innate_effects(mob/living/mob_override) + . = ..() + var/mob/living/current = owner.current + if(mob_override) + current = mob_override + if(!cult_team.reckoning_complete) + reckoning.Grant(current) + bloodmark.Grant(current) + throwing.Grant(current) + current.update_action_buttons_icon() + current.apply_status_effect(/datum/status_effect/cult_master) + +/datum/antagonist/cult/master/remove_innate_effects(mob/living/mob_override) + . = ..() + var/mob/living/current = owner.current + if(mob_override) + current = mob_override + reckoning.Remove(current) + bloodmark.Remove(current) + throwing.Remove(current) + current.update_action_buttons_icon() + current.remove_status_effect(/datum/status_effect/cult_master) + +/datum/team/cult + name = "Cult" + + var/blood_target + var/image/blood_target_image + var/blood_target_reset_timer + + var/cult_vote_called = FALSE + var/cult_mastered = FALSE + var/reckoning_complete = FALSE + + +/datum/team/cult/proc/setup_objectives() + //SAC OBJECTIVE , todo: move this to objective internals + var/list/target_candidates = list() + var/datum/objective/sacrifice/sac_objective = new + sac_objective.team = src + + for(var/mob/living/carbon/human/player in GLOB.player_list) + if(player.mind && !player.mind.has_antag_datum(/datum/antagonist/cult) && !is_convertable_to_cult(player) && player.stat != DEAD) + target_candidates += player.mind + + if(target_candidates.len == 0) + message_admins("Cult Sacrifice: Could not find unconvertable target, checking for convertable target.") + for(var/mob/living/carbon/human/player in GLOB.player_list) + if(player.mind && !player.mind.has_antag_datum(/datum/antagonist/cult) && player.stat != DEAD) + target_candidates += player.mind + listclearnulls(target_candidates) + if(LAZYLEN(target_candidates)) + sac_objective.target = pick(target_candidates) + sac_objective.update_explanation_text() + + var/datum/job/sacjob = SSjob.GetJob(sac_objective.target.assigned_role) + var/datum/preferences/sacface = sac_objective.target.current.client.prefs + var/icon/reshape = get_flat_human_icon(null, sacjob, sacface) + reshape.Shift(SOUTH, 4) + reshape.Shift(EAST, 1) + reshape.Crop(7,4,26,31) + reshape.Crop(-5,-3,26,30) + sac_objective.sac_image = reshape + + objectives += sac_objective + else + message_admins("Cult Sacrifice: Could not find unconvertable or convertable target. WELP!") + + + //SUMMON OBJECTIVE + + var/datum/objective/eldergod/summon_objective = new() + summon_objective.team = src + objectives += summon_objective + +/datum/objective/sacrifice + var/sacced = FALSE + var/sac_image + +/datum/objective/sacrifice/check_completion() + return sacced || completed + +/datum/objective/sacrifice/update_explanation_text() + if(target) + explanation_text = "Sacrifice [target], the [target.assigned_role] via invoking a Sacrifice rune with them on it and three acolytes around it." + else + explanation_text = "The veil has already been weakened here, proceed to the final objective." + +/datum/objective/eldergod + var/summoned = FALSE + var/list/summon_spots = list() + +/datum/objective/eldergod/New() + ..() + var/sanity = 0 + while(summon_spots.len < SUMMON_POSSIBILITIES && sanity < 100) + var/area/summon = pick(GLOB.sortedAreas - summon_spots) + if(summon && is_station_level(summon.z) && summon.valid_territory) + summon_spots += summon + sanity++ + update_explanation_text() + +/datum/objective/eldergod/update_explanation_text() + explanation_text = "Summon Nar-Sie by invoking the rune 'Summon Nar-Sie'. The summoning can only be accomplished in [english_list(summon_spots)] - where the veil is weak enough for the ritual to begin." + +/datum/objective/eldergod/check_completion() + return summoned || completed + +/datum/team/cult/proc/check_cult_victory() + for(var/datum/objective/O in objectives) + if(!O.check_completion()) + return FALSE + return TRUE + +/datum/team/cult/roundend_report() + var/list/parts = list() + + if(check_cult_victory()) + parts += "The cult has succeeded! Nar-sie has snuffed out another torch in the void!" + else + parts += "The staff managed to stop the cult! Dark words and heresy are no match for Nanotrasen's finest!" + + if(objectives.len) + parts += "The cultists' objectives were:" + var/count = 1 + for(var/datum/objective/objective in objectives) + if(objective.check_completion()) + parts += "Objective #[count]: [objective.explanation_text] Success!" + else + parts += "Objective #[count]: [objective.explanation_text] Fail." + count++ + + if(members.len) + parts += "The cultists were:" + parts += printplayerlist(members) + + return "
[parts.Join("
")]
" + +/datum/team/cult/is_gamemode_hero() + return SSticker.mode.name == "cult" \ No newline at end of file diff --git a/code/game/gamemodes/cult/cult_comms.dm b/code/modules/antagonists/cult/cult_comms.dm similarity index 100% rename from code/game/gamemodes/cult/cult_comms.dm rename to code/modules/antagonists/cult/cult_comms.dm diff --git a/code/game/gamemodes/cult/cult_items.dm b/code/modules/antagonists/cult/cult_items.dm similarity index 99% rename from code/game/gamemodes/cult/cult_items.dm rename to code/modules/antagonists/cult/cult_items.dm index 34a57fe62f..1f4a84afd2 100644 --- a/code/game/gamemodes/cult/cult_items.dm +++ b/code/modules/antagonists/cult/cult_items.dm @@ -62,7 +62,7 @@ w_class = WEIGHT_CLASS_SMALL force = 15 throwforce = 25 - embed_chance = 75 + embedding = list("embed_chance" = 75) /obj/item/melee/cultblade/dagger/attack(mob/living/target, mob/living/carbon/human/user) ..() diff --git a/code/game/gamemodes/cult/cult_structures.dm b/code/modules/antagonists/cult/cult_structures.dm similarity index 100% rename from code/game/gamemodes/cult/cult_structures.dm rename to code/modules/antagonists/cult/cult_structures.dm diff --git a/code/game/gamemodes/cult/ritual.dm b/code/modules/antagonists/cult/ritual.dm similarity index 100% rename from code/game/gamemodes/cult/ritual.dm rename to code/modules/antagonists/cult/ritual.dm diff --git a/code/game/gamemodes/cult/rune_spawn_action.dm b/code/modules/antagonists/cult/rune_spawn_action.dm similarity index 100% rename from code/game/gamemodes/cult/rune_spawn_action.dm rename to code/modules/antagonists/cult/rune_spawn_action.dm diff --git a/code/game/gamemodes/cult/runes.dm b/code/modules/antagonists/cult/runes.dm similarity index 99% rename from code/game/gamemodes/cult/runes.dm rename to code/modules/antagonists/cult/runes.dm index 28cc5c6512..a0de57ea22 100644 --- a/code/game/gamemodes/cult/runes.dm +++ b/code/modules/antagonists/cult/runes.dm @@ -115,7 +115,7 @@ structure_check() searches for nearby cultist structures required for the invoca continue if(ishuman(L)) var/mob/living/carbon/human/H = L - if((H.has_disability(DISABILITY_MUTE)) || H.silent) + if((H.has_trait(TRAIT_MUTE)) || H.silent) continue if(L.stat) continue @@ -566,7 +566,7 @@ structure_check() searches for nearby cultist structures required for the invoca rune_in_use = FALSE return revives_used++ - mob_to_revive.revive(1, 1) //This does remove disabilities and such, but the rune might actually see some use because of it! + mob_to_revive.revive(1, 1) //This does remove traits and such, but the rune might actually see some use because of it! mob_to_revive.grab_ghost() else if(!mob_to_revive.client || mob_to_revive.client.is_afk()) set waitfor = FALSE diff --git a/code/game/gamemodes/cult/supply.dm b/code/modules/antagonists/cult/supply.dm similarity index 100% rename from code/game/gamemodes/cult/supply.dm rename to code/modules/antagonists/cult/supply.dm diff --git a/code/game/gamemodes/cult/talisman.dm b/code/modules/antagonists/cult/talisman.dm similarity index 100% rename from code/game/gamemodes/cult/talisman.dm rename to code/modules/antagonists/cult/talisman.dm diff --git a/code/game/gamemodes/devil/devilinfo.dm b/code/modules/antagonists/devil/devil.dm similarity index 82% rename from code/game/gamemodes/devil/devilinfo.dm rename to code/modules/antagonists/devil/devil.dm index 1683aa8a00..858b2d1ef1 100644 --- a/code/game/gamemodes/devil/devilinfo.dm +++ b/code/modules/antagonists/devil/devil.dm @@ -35,7 +35,7 @@ GLOBAL_LIST_INIT(lawlorify, list ( BAN_CHAPEL = "This devil avoids holy ground.", BAN_HURTPRIEST = "The annointed clergy appear to be immune to his powers.", BAN_AVOIDWATER = "The devil seems to have some sort of aversion to water, though it does not appear to harm him.", - BAN_STRIKEUNCONCIOUS = "This devil only shows interest in those who are awake.", + BAN_STRIKEUNCONSCIOUS = "This devil only shows interest in those who are awake.", BAN_HURTLIZARD = "This devil will not strike a lizardman first.", BAN_HURTANIMAL = "This devil avoids hurting animals.", BANISH_WATER = "To banish the devil, you must infuse its body with holy water.", @@ -59,7 +59,7 @@ GLOBAL_LIST_INIT(lawlorify, list ( BAN_CHAPEL = "You must never attempt to enter the chapel.", BAN_HURTPRIEST = "You must never attack a priest.", BAN_AVOIDWATER = "You must never willingly touch a wet surface.", - BAN_STRIKEUNCONCIOUS = "You must never strike an unconscious person.", + BAN_STRIKEUNCONSCIOUS = "You must never strike an unconscious person.", BAN_HURTLIZARD = "You must never harm a lizardman outside of self defense.", BAN_HURTANIMAL = "You must never harm a non-sentient creature or robot outside of self defense.", BANE_SILVER = "Silver, in all of its forms shall be your downfall.", @@ -85,8 +85,12 @@ GLOBAL_LIST_INIT(devil_title, list("Lord ", "Prelate ", "Count ", "Viscount ", " GLOBAL_LIST_INIT(devil_syllable, list("hal", "ve", "odr", "neit", "ci", "quon", "mya", "folth", "wren", "geyr", "hil", "niet", "twou", "phi", "coa")) GLOBAL_LIST_INIT(devil_suffix, list(" the Red", " the Soulless", " the Master", ", the Lord of all things", ", Jr.")) /datum/antagonist/devil + name = "Devil" + roundend_category = "devils" + antagpanel_category = "Devil" + job_rank = ROLE_DEVIL //Don't delete upon mind destruction, otherwise soul re-selling will break. - delete_on_death = FALSE + delete_on_mind_deletion = FALSE var/obligation var/ban var/bane @@ -95,42 +99,48 @@ GLOBAL_LIST_INIT(devil_suffix, list(" the Red", " the Soulless", " the Master", var/list/datum/mind/soulsOwned = new var/reviveNumber = 0 var/form = BASIC_DEVIL - var/exists = 0 - var/static/list/removable_devil_spells = list( + var/static/list/devil_spells = typecacheof(list( /obj/effect/proc_holder/spell/aimed/fireball/hellish, /obj/effect/proc_holder/spell/targeted/conjure_item/summon_pitchfork, - /obj/effect/proc_holder/spell/aimed/fireball/hellish, - /obj/effect/proc_holder/spell/targeted/infernal_jaunt, /obj/effect/proc_holder/spell/targeted/conjure_item/summon_pitchfork/greater, - /obj/effect/proc_holder/spell/targeted/sintouch, /obj/effect/proc_holder/spell/targeted/conjure_item/summon_pitchfork/ascended, - /obj/effect/proc_holder/spell/targeted/sintouch/ascended) - var/static/list/devil_spells = list( - /obj/effect/proc_holder/spell/aimed/fireball/hellish, - /obj/effect/proc_holder/spell/targeted/conjure_item/summon_pitchfork, - /obj/effect/proc_holder/spell/aimed/fireball/hellish, /obj/effect/proc_holder/spell/targeted/infernal_jaunt, - /obj/effect/proc_holder/spell/targeted/conjure_item/summon_pitchfork/greater, /obj/effect/proc_holder/spell/targeted/sintouch, - /obj/effect/proc_holder/spell/targeted/conjure_item/summon_pitchfork/ascended, /obj/effect/proc_holder/spell/targeted/sintouch/ascended, /obj/effect/proc_holder/spell/targeted/summon_contract, /obj/effect/proc_holder/spell/targeted/conjure_item/violin, - /obj/effect/proc_holder/spell/targeted/summon_dancefloor) + /obj/effect/proc_holder/spell/targeted/summon_dancefloor)) var/ascendable = FALSE +/datum/antagonist/devil/can_be_owned(datum/mind/new_owner) + . = ..() + return . && (ishuman(new_owner.current) || iscyborg(new_owner.current)) -/datum/antagonist/devil/New() - ..() - devil_spells = typecacheof(devil_spells) - truename = randomDevilName() - ban = randomdevilban() - bane = randomdevilbane() - obligation = randomdevilobligation() - banish = randomdevilbanish() - GLOB.allDevils[lowertext(truename)] = src +/datum/antagonist/devil/get_admin_commands() + . = ..() + .["Toggle ascendable"] = CALLBACK(src,.proc/admin_toggle_ascendable) +/datum/antagonist/devil/proc/admin_toggle_ascendable(mob/admin) + ascendable = !ascendable + message_admins("[key_name_admin(admin)] set [owner.current] devil ascendable to [ascendable]") + log_admin("[key_name_admin(admin)] set [owner.current] devil ascendable to [ascendable])") + +/datum/antagonist/devil/admin_add(datum/mind/new_owner,mob/admin) + switch(alert(admin,"Should the devil be able to ascend",,"Yes","No","Cancel")) + if("Yes") + ascendable = TRUE + if("No") + ascendable = FALSE + else + return + new_owner.add_antag_datum(src) + message_admins("[key_name_admin(admin)] has devil'ed [new_owner.current]. [ascendable ? "(Ascendable)":""]") + log_admin("[key_name(admin)] has devil'ed [new_owner.current]. [ascendable ? "(Ascendable)":""]") + +/datum/antagonist/devil/antag_listing_name() + return ..() + "([truename])" + /proc/devilInfo(name) if(GLOB.allDevils[lowertext(name)]) return GLOB.allDevils[lowertext(name)] @@ -158,7 +168,7 @@ GLOBAL_LIST_INIT(devil_suffix, list(" the Red", " the Soulless", " the Master", return pick(OBLIGATION_FOOD, OBLIGATION_FIDDLE, OBLIGATION_DANCEOFF, OBLIGATION_GREET, OBLIGATION_PRESENCEKNOWN, OBLIGATION_SAYNAME, OBLIGATION_ANNOUNCEKILL, OBLIGATION_ANSWERTONAME) /proc/randomdevilban() - return pick(BAN_HURTWOMAN, BAN_CHAPEL, BAN_HURTPRIEST, BAN_AVOIDWATER, BAN_STRIKEUNCONCIOUS, BAN_HURTLIZARD, BAN_HURTANIMAL) + return pick(BAN_HURTWOMAN, BAN_CHAPEL, BAN_HURTPRIEST, BAN_AVOIDWATER, BAN_STRIKEUNCONSCIOUS, BAN_HURTLIZARD, BAN_HURTANIMAL) /proc/randomdevilbane() return pick(BANE_SALT, BANE_LIGHT, BANE_IRON, BANE_WHITECLOTHES, BANE_SILVER, BANE_HARVEST, BANE_TOOLBOX) @@ -175,8 +185,8 @@ GLOBAL_LIST_INIT(devil_suffix, list(" the Red", " the Soulless", " the Master", update_hud() switch(SOULVALUE) if(0) - to_chat(owner.current, "Your hellish powers have been restored.") - give_base_spells() + to_chat(owner.current, "Your hellish powers have been restored.") + give_appropriate_spells() if(BLOOD_THRESHOLD) increase_blood_lizard() if(TRUE_THRESHOLD) @@ -199,33 +209,33 @@ GLOBAL_LIST_INIT(devil_suffix, list(" the Red", " the Soulless", " the Master", if(form == BLOOD_LIZARD && SOULVALUE < BLOOD_THRESHOLD) regress_humanoid() if(SOULVALUE < 0) - remove_spells() - to_chat(owner.current, "As punishment for your failures, all of your powers except contract creation have been revoked.") + give_appropriate_spells() + to_chat(owner.current, "As punishment for your failures, all of your powers except contract creation have been revoked.") /datum/antagonist/devil/proc/regress_humanoid() - to_chat(owner.current, "Your powers weaken, have more contracts be signed to regain power.") + to_chat(owner.current, "Your powers weaken, have more contracts be signed to regain power.") if(ishuman(owner.current)) var/mob/living/carbon/human/H = owner.current H.set_species(/datum/species/human, 1) H.regenerate_icons() - give_base_spells() + give_appropriate_spells() if(istype(owner.current.loc, /obj/effect/dummy/slaughter/)) owner.current.forceMove(get_turf(owner.current))//Fixes dying while jaunted leaving you permajaunted. form = BASIC_DEVIL /datum/antagonist/devil/proc/regress_blood_lizard() var/mob/living/carbon/true_devil/D = owner.current - to_chat(D, "Your powers weaken, have more contracts be signed to regain power.") - D.oldform.loc = D.loc + to_chat(D, "Your powers weaken, have more contracts be signed to regain power.") + D.oldform.forceMove(D.drop_location()) owner.transfer_to(D.oldform) - give_lizard_spells() + give_appropriate_spells() qdel(D) form = BLOOD_LIZARD update_hud() /datum/antagonist/devil/proc/increase_blood_lizard() - to_chat(owner.current, "You feel as though your humanoid form is about to shed. You will soon turn into a blood lizard.") + to_chat(owner.current, "You feel as though your humanoid form is about to shed. You will soon turn into a blood lizard.") sleep(50) if(ishuman(owner.current)) var/mob/living/carbon/human/H = owner.current @@ -237,30 +247,29 @@ GLOBAL_LIST_INIT(devil_suffix, list(" the Red", " the Soulless", " the Master", H.regenerate_icons() else //Did the devil get hit by a staff of transmutation? owner.current.color = "#501010" - give_lizard_spells() + give_appropriate_spells() form = BLOOD_LIZARD /datum/antagonist/devil/proc/increase_true_devil() - to_chat(owner.current, "You feel as though your current form is about to shed. You will soon turn into a true devil.") + to_chat(owner.current, "You feel as though your current form is about to shed. You will soon turn into a true devil.") sleep(50) var/mob/living/carbon/true_devil/A = new /mob/living/carbon/true_devil(owner.current.loc) A.faction |= "hell" - owner.current.loc = A + owner.current.forceMove(A) A.oldform = owner.current owner.transfer_to(A) A.set_name() - give_true_spells() + give_appropriate_spells() form = TRUE_DEVIL update_hud() - /datum/antagonist/devil/proc/increase_arch_devil() if(!ascendable) return var/mob/living/carbon/true_devil/D = owner.current - to_chat(D, "You feel as though your form is about to ascend.") + to_chat(D, "You feel as though your form is about to ascend.") sleep(50) if(!D) return @@ -292,8 +301,8 @@ GLOBAL_LIST_INIT(devil_suffix, list(" the Red", " the Soulless", " the Master", if(!D) return to_chat(world, "\"SLOTH, WRATH, GLUTTONY, ACEDIA, ENVY, GREED, PRIDE! FIRES OF HELL AWAKEN!!\"") - world << 'sound/hallucinations/veryfar_noise.ogg' - give_arch_spells() + SEND_SOUND(world, sound('sound/hallucinations/veryfar_noise.ogg')) + give_appropriate_spells() D.convert_to_archdevil() if(istype(D.loc, /obj/effect/dummy/slaughter/)) D.forceMove(get_turf(D))//Fixes dying while jaunted leaving you permajaunted. @@ -309,39 +318,44 @@ GLOBAL_LIST_INIT(devil_suffix, list(" the Red", " the Soulless", " the Master", /datum/antagonist/devil/proc/remove_spells() for(var/X in owner.spell_list) var/obj/effect/proc_holder/spell/S = X - if(is_type_in_typecache(S, removable_devil_spells)) + if(is_type_in_typecache(S, devil_spells)) owner.RemoveSpell(S) /datum/antagonist/devil/proc/give_summon_contract() owner.AddSpell(new /obj/effect/proc_holder/spell/targeted/summon_contract(null)) + if(obligation == OBLIGATION_FIDDLE) + owner.AddSpell(new /obj/effect/proc_holder/spell/targeted/conjure_item/violin(null)) + else if(obligation == OBLIGATION_DANCEOFF) + owner.AddSpell(new /obj/effect/proc_holder/spell/targeted/summon_dancefloor(null)) - -/datum/antagonist/devil/proc/give_base_spells(give_summon_contract = 0) +/datum/antagonist/devil/proc/give_appropriate_spells() remove_spells() + give_summon_contract() + if(SOULVALUE >= ARCH_THRESHOLD && ascendable) + give_arch_spells() + else if(SOULVALUE >= TRUE_THRESHOLD) + give_true_spells() + else if(SOULVALUE >= BLOOD_THRESHOLD) + give_blood_spells() + else if(SOULVALUE >= 0) + give_base_spells() + +/datum/antagonist/devil/proc/give_base_spells() owner.AddSpell(new /obj/effect/proc_holder/spell/aimed/fireball/hellish(null)) owner.AddSpell(new /obj/effect/proc_holder/spell/targeted/conjure_item/summon_pitchfork(null)) - if(give_summon_contract) - give_summon_contract() - if(obligation == OBLIGATION_FIDDLE) - owner.AddSpell(new /obj/effect/proc_holder/spell/targeted/conjure_item/violin(null)) - if(obligation == OBLIGATION_DANCEOFF) - owner.AddSpell(new /obj/effect/proc_holder/spell/targeted/summon_dancefloor(null)) -/datum/antagonist/devil/proc/give_lizard_spells() - remove_spells() +/datum/antagonist/devil/proc/give_blood_spells() owner.AddSpell(new /obj/effect/proc_holder/spell/targeted/conjure_item/summon_pitchfork(null)) owner.AddSpell(new /obj/effect/proc_holder/spell/aimed/fireball/hellish(null)) owner.AddSpell(new /obj/effect/proc_holder/spell/targeted/infernal_jaunt(null)) /datum/antagonist/devil/proc/give_true_spells() - remove_spells() owner.AddSpell(new /obj/effect/proc_holder/spell/targeted/conjure_item/summon_pitchfork/greater(null)) owner.AddSpell(new /obj/effect/proc_holder/spell/aimed/fireball/hellish(null)) owner.AddSpell(new /obj/effect/proc_holder/spell/targeted/infernal_jaunt(null)) owner.AddSpell(new /obj/effect/proc_holder/spell/targeted/sintouch(null)) /datum/antagonist/devil/proc/give_arch_spells() - remove_spells() owner.AddSpell(new /obj/effect/proc_holder/spell/targeted/conjure_item/summon_pitchfork/ascended(null)) owner.AddSpell(new /obj/effect/proc_holder/spell/targeted/sintouch/ascended(null)) @@ -368,14 +382,14 @@ GLOBAL_LIST_INIT(devil_suffix, list(" the Red", " the Soulless", " the Master", /datum/antagonist/devil/proc/check_banishment(mob/living/body) switch(banish) if(BANISH_WATER) - if(istype(body, /mob/living/carbon)) + if(iscarbon(body)) var/mob/living/carbon/H = body return H.reagents.has_reagent("holy water") return 0 if(BANISH_COFFIN) return (body && istype(body.loc, /obj/structure/closet/coffin)) if(BANISH_FORMALDYHIDE) - if(istype(body, /mob/living/carbon)) + if(iscarbon(body)) var/mob/living/carbon/H = body return H.reagents.has_reagent("formaldehyde") return 0 @@ -411,11 +425,11 @@ GLOBAL_LIST_INIT(devil_suffix, list(" the Red", " the Soulless", " the Master", /datum/antagonist/devil/proc/hellish_resurrection(mob/living/body) message_admins("[owner.name] (true name is: [truename]) is resurrecting using hellish energy.") - if(SOULVALUE < ARCH_THRESHOLD && ascendable) // once ascended, arch devils do not go down in power by any means. + if(SOULVALUE < ARCH_THRESHOLD || !ascendable) // once ascended, arch devils do not go down in power by any means. reviveNumber += LOSS_PER_DEATH update_hud() if(body) - body.revive(1,0) + body.revive(TRUE, TRUE) //Adminrevive also recovers organs, preventing someone from resurrecting without a heart. if(istype(body.loc, /obj/effect/dummy/slaughter/)) body.forceMove(get_turf(body))//Fixes dying while jaunted leaving you permajaunted. if(istype(body, /mob/living/carbon/true_devil)) @@ -458,8 +472,8 @@ GLOBAL_LIST_INIT(devil_suffix, list(" the Red", " the Soulless", " the Master", A.faction |= "hell" H.forceMove(A) A.oldform = H + owner.transfer_to(A, TRUE) A.set_name() - owner.transfer_to(A) if(SOULVALUE >= ARCH_THRESHOLD && ascendable) A.convert_to_archdevil() else @@ -467,7 +481,7 @@ GLOBAL_LIST_INIT(devil_suffix, list(" the Red", " the Soulless", " the Master", /datum/antagonist/devil/proc/update_hud() - if(istype(owner.current, /mob/living/carbon)) + if(iscarbon(owner.current)) var/mob/living/C = owner.current if(C.hud_used && C.hud_used.devilsouldisplay) C.hud_used.devilsouldisplay.update_counter(SOULVALUE) @@ -485,7 +499,14 @@ GLOBAL_LIST_INIT(devil_suffix, list(" the Red", " the Soulless", " the Master", .=..() /datum/antagonist/devil/on_gain() - owner.store_memory("Your devilic true name is [truename]
[GLOB.lawlorify[LAW][ban]]
You may not use violence to coerce someone into selling their soul.
You may not directly and knowingly physically harm a devil, other than yourself.
[GLOB.lawlorify[LAW][bane]]
[GLOB.lawlorify[LAW][obligation]]
[GLOB.lawlorify[LAW][banish]]
") + truename = randomDevilName() + ban = randomdevilban() + bane = randomdevilbane() + obligation = randomdevilobligation() + banish = randomdevilbanish() + GLOB.allDevils[lowertext(truename)] = src + + antag_memory += "Your devilic true name is [truename]
[GLOB.lawlorify[LAW][ban]]
You may not use violence to coerce someone into selling their soul.
You may not directly and knowingly physically harm a devil, other than yourself.
[GLOB.lawlorify[LAW][bane]]
[GLOB.lawlorify[LAW][obligation]]
[GLOB.lawlorify[LAW][banish]]
" if(issilicon(owner.current)) var/mob/living/silicon/robot_devil = owner.current var/laws = list("You may not use violence to coerce someone into selling their soul.", "You may not directly and knowingly physically harm a devil, other than yourself.", GLOB.lawlorify[LAW][ban], GLOB.lawlorify[LAW][obligation], "Accomplish your objectives at all costs.") @@ -502,7 +523,7 @@ GLOBAL_LIST_INIT(devil_suffix, list(" the Red", " the Soulless", " the Master", .=..() /datum/antagonist/devil/apply_innate_effects(mob/living/mob_override) - give_base_spells(1) + give_appropriate_spells() owner.current.grant_all_languages(TRUE) update_hud() .=..() @@ -514,6 +535,35 @@ GLOBAL_LIST_INIT(devil_suffix, list(" the Red", " the Soulless", " the Master", owner.RemoveSpell(S) .=..() +/datum/antagonist/devil/proc/printdevilinfo() + var/list/parts = list() + parts += "The devil's true name is: [truename]" + parts += "The devil's bans were:" + parts += "[GLOB.TAB][GLOB.lawlorify[LORE][ban]]" + parts += "[GLOB.TAB][GLOB.lawlorify[LORE][bane]]" + parts += "[GLOB.TAB][GLOB.lawlorify[LORE][obligation]]" + parts += "[GLOB.TAB][GLOB.lawlorify[LORE][banish]]" + return parts.Join("
") + +/datum/antagonist/devil/roundend_report() + var/list/parts = list() + parts += printplayer(owner) + parts += printdevilinfo() + parts += printobjectives(owner) + return parts.Join("
") + +/datum/antagonist/devil/roundend_report_footer() + //sintouched go here for now as a hack , TODO proper antag datum for these + var/list/parts = list() + if(SSticker.mode.sintouched.len) + parts += "The sintouched were:" + var/list/sintouchedUnique = uniqueList(SSticker.mode.sintouched) + for(var/S in sintouchedUnique) + var/datum/mind/sintouched_mind = S + parts += printplayer(sintouched_mind) + parts += printobjectives(sintouched_mind) + return parts.Join("
") + //A simple super light weight datum for the codex gigas. /datum/fakeDevil var/truename @@ -521,10 +571,12 @@ GLOBAL_LIST_INIT(devil_suffix, list(" the Red", " the Soulless", " the Master", var/obligation var/ban var/banish + var/ascendable /datum/fakeDevil/New(name = randomDevilName()) truename = name bane = randomdevilbane() obligation = randomdevilobligation() ban = randomdevilban() - banish = randomdevilbanish() \ No newline at end of file + banish = randomdevilbanish() + ascendable = prob(25) diff --git a/code/game/gamemodes/devil/devil.dm b/code/modules/antagonists/devil/devil_helpers.dm similarity index 100% rename from code/game/gamemodes/devil/devil.dm rename to code/modules/antagonists/devil/devil_helpers.dm diff --git a/code/game/gamemodes/devil/imp/imp.dm b/code/modules/antagonists/devil/imp/imp.dm similarity index 100% rename from code/game/gamemodes/devil/imp/imp.dm rename to code/modules/antagonists/devil/imp/imp.dm diff --git a/code/game/gamemodes/miniantags/sintouched/objectives.dm b/code/modules/antagonists/devil/sintouched/objectives.dm similarity index 100% rename from code/game/gamemodes/miniantags/sintouched/objectives.dm rename to code/modules/antagonists/devil/sintouched/objectives.dm diff --git a/code/game/gamemodes/devil/true_devil/_true_devil.dm b/code/modules/antagonists/devil/true_devil/_true_devil.dm similarity index 100% rename from code/game/gamemodes/devil/true_devil/_true_devil.dm rename to code/modules/antagonists/devil/true_devil/_true_devil.dm diff --git a/code/game/gamemodes/devil/true_devil/inventory.dm b/code/modules/antagonists/devil/true_devil/inventory.dm similarity index 100% rename from code/game/gamemodes/devil/true_devil/inventory.dm rename to code/modules/antagonists/devil/true_devil/inventory.dm diff --git a/code/modules/antagonists/monkey/monkey.dm b/code/modules/antagonists/monkey/monkey.dm new file mode 100644 index 0000000000..196adf5c22 --- /dev/null +++ b/code/modules/antagonists/monkey/monkey.dm @@ -0,0 +1,214 @@ +#define MONKEYS_ESCAPED 1 +#define MONKEYS_LIVED 2 +#define MONKEYS_DIED 3 +#define DISEASE_LIVED 4 + +/datum/antagonist/monkey + name = "Monkey" + job_rank = ROLE_MONKEY + roundend_category = "monkeys" + antagpanel_category = "Monkey" + var/datum/team/monkey/monkey_team + var/monkey_only = TRUE + +/datum/antagonist/monkey/can_be_owned(datum/mind/new_owner) + return ..() && (!monkey_only || ismonkey(new_owner.current)) + +/datum/antagonist/monkey/get_team() + return monkey_team + +/datum/antagonist/monkey/on_gain() + . = ..() + SSticker.mode.ape_infectees += owner + owner.special_role = "Infected Monkey" + + var/datum/disease/D = new /datum/disease/transformation/jungle_fever/monkeymode + if(!owner.current.HasDisease(D)) + owner.current.ForceContractDisease(D) + else + QDEL_NULL(D) + +/datum/antagonist/monkey/greet() + to_chat(owner, "You are a monkey now!") + to_chat(owner, "Bite humans to infect them, follow the orders of the monkey leaders, and help fellow monkeys!") + to_chat(owner, "Ensure at least one infected monkey escapes on the Emergency Shuttle!") + to_chat(owner, "As an intelligent monkey, you know how to use technology and how to ventcrawl while wearing things.") + to_chat(owner, "You can use :k to talk to fellow monkeys!") + SEND_SOUND(owner.current, sound('sound/ambience/antag/monkey.ogg')) + +/datum/antagonist/monkey/on_removal() + owner.special_role = null + SSticker.mode.ape_infectees -= owner + + var/datum/disease/transformation/jungle_fever/D = locate() in owner.current.viruses + if(D) + D.remove_virus() + qdel(D) + + . = ..() + +/datum/antagonist/monkey/create_team(datum/team/monkey/new_team) + if(!new_team) + for(var/datum/antagonist/monkey/H in GLOB.antagonists) + if(!H.owner) + continue + if(H.monkey_team) + monkey_team = H.monkey_team + return + monkey_team = new /datum/team/monkey + monkey_team.update_objectives() + return + if(!istype(new_team)) + stack_trace("Wrong team type passed to [type] initialization.") + monkey_team = new_team + +/datum/antagonist/monkey/proc/forge_objectives() + objectives |= monkey_team.objectives + owner.objectives |= objectives + +/datum/antagonist/monkey/admin_remove(mob/admin) + var/mob/living/carbon/monkey/M = owner.current + if(istype(M)) + switch(alert(admin, "Humanize?", "Humanize", "Yes", "No")) + if("Yes") + if(admin == M) + admin = M.humanize(TR_KEEPITEMS | TR_KEEPIMPLANTS | TR_KEEPORGANS | TR_KEEPDAMAGE | TR_KEEPVIRUS | TR_DEFAULTMSG) + else + M.humanize(TR_KEEPITEMS | TR_KEEPIMPLANTS | TR_KEEPORGANS | TR_KEEPDAMAGE | TR_KEEPVIRUS | TR_DEFAULTMSG) + if("No") + //nothing + else + return + . = ..() + +/datum/antagonist/monkey/leader + name = "Monkey Leader" + monkey_only = FALSE + +/datum/antagonist/monkey/leader/admin_add(datum/mind/new_owner,mob/admin) + var/mob/living/carbon/human/H = new_owner.current + if(istype(H)) + switch(alert(admin, "Monkeyize?", "Monkeyize", "Yes", "No")) + if("Yes") + if(admin == H) + admin = H.monkeyize() + else + H.monkeyize() + if("No") + //nothing + else + return + new_owner.add_antag_datum(src) + log_admin("[key_name(admin)] made [key_name(new_owner.current)] a monkey leader!") + message_admins("[key_name_admin(admin)] made [key_name_admin(new_owner.current)] a monkey leader!") + +/datum/antagonist/monkey/leader/on_gain() + . = ..() + var/obj/item/organ/heart/freedom/F = new + F.Insert(owner.current, drop_if_replaced = FALSE) + SSticker.mode.ape_leaders += owner + owner.special_role = "Monkey Leader" + +/datum/antagonist/monkey/leader/on_removal() + SSticker.mode.ape_leaders -= owner + var/obj/item/organ/heart/H = new + H.Insert(owner.current, drop_if_replaced = FALSE) //replace freedom heart with normal heart + + . = ..() + +/datum/antagonist/monkey/leader/greet() + to_chat(owner, "You are the Jungle Fever patient zero!!
") + to_chat(owner, "You have been planted onto this station by the Animal Rights Consortium.") + to_chat(owner, "Soon the disease will transform you into an ape. Afterwards, you will be able spread the infection to others with a bite.") + to_chat(owner, "While your infection strain is undetectable by scanners, any other infectees will show up on medical equipment.") + to_chat(owner, "Your mission will be deemed a success if any of the live infected monkeys reach CentCom.") + to_chat(owner, "As an initial infectee, you will be considered a 'leader' by your fellow monkeys.") + to_chat(owner, "You can use :k to talk to fellow monkeys!") + SEND_SOUND(owner.current, sound('sound/ambience/antag/monkey.ogg')) + +/datum/objective/monkey + explanation_text = "Ensure that infected monkeys escape on the emergency shuttle!" + martyr_compatible = TRUE + var/monkeys_to_win = 1 + var/escaped_monkeys = 0 + +/datum/objective/monkey/check_completion() + var/datum/disease/D = new /datum/disease/transformation/jungle_fever() + for(var/mob/living/carbon/monkey/M in GLOB.alive_mob_list) + if (M.HasDisease(D) && (M.onCentCom() || M.onSyndieBase())) + escaped_monkeys++ + if(escaped_monkeys >= monkeys_to_win) + return TRUE + return FALSE + +/datum/team/monkey + name = "Monkeys" + +/datum/team/monkey/proc/update_objectives() + objectives = list() + var/datum/objective/monkey/O = new() + O.team = src + objectives += O + +/datum/team/monkey/proc/infected_monkeys_alive() + var/datum/disease/D = new /datum/disease/transformation/jungle_fever() + for(var/mob/living/carbon/monkey/M in GLOB.alive_mob_list) + if(M.HasDisease(D)) + return TRUE + return FALSE + +/datum/team/monkey/proc/infected_monkeys_escaped() + var/datum/disease/D = new /datum/disease/transformation/jungle_fever() + for(var/mob/living/carbon/monkey/M in GLOB.alive_mob_list) + if(M.HasDisease(D) && (M.onCentCom() || M.onSyndieBase())) + return TRUE + return FALSE + +/datum/team/monkey/proc/infected_humans_escaped() + var/datum/disease/D = new /datum/disease/transformation/jungle_fever() + for(var/mob/living/carbon/human/M in GLOB.alive_mob_list) + if(M.HasDisease(D) && (M.onCentCom() || M.onSyndieBase())) + return TRUE + return FALSE + +/datum/team/monkey/proc/infected_humans_alive() + var/datum/disease/D = new /datum/disease/transformation/jungle_fever() + for(var/mob/living/carbon/human/M in GLOB.alive_mob_list) + if(M.HasDisease(D)) + return TRUE + return FALSE + +/datum/team/monkey/proc/get_result() + if(infected_monkeys_escaped()) + return MONKEYS_ESCAPED + if(infected_monkeys_alive()) + return MONKEYS_LIVED + if(infected_humans_alive() || infected_humans_escaped()) + return DISEASE_LIVED + return MONKEYS_DIED + +/datum/team/monkey/roundend_report() + var/list/parts = list() + switch(get_result()) + if(MONKEYS_ESCAPED) + parts += "Monkey Major Victory!" + parts += "Central Command and [station_name()] were taken over by the monkeys! Ook ook!" + if(MONKEYS_LIVED) + parts += "Monkey Minor Victory!" + parts += "[station_name()] was taken over by the monkeys! Ook ook!" + if(DISEASE_LIVED) + parts += "Monkey Minor Defeat!" + parts += "All the monkeys died, but the disease lives on! The future is uncertain." + if(MONKEYS_DIED) + parts += "Monkey Major Defeat!" + parts += "All the monkeys died, and Jungle Fever was wiped out!" + var/list/leaders = get_antag_minds(/datum/antagonist/monkey/leader, TRUE) + var/list/monkeys = get_antag_minds(/datum/antagonist/monkey, TRUE) + + if(LAZYLEN(leaders)) + parts += "The monkey leaders were:" + parts += printplayerlist(SSticker.mode.ape_leaders) + if(LAZYLEN(monkeys)) + parts += "The monkeys were:" + parts += printplayerlist(SSticker.mode.ape_infectees) + return "
[parts.Join("
")]
" diff --git a/code/game/gamemodes/miniantags/morph/morph.dm b/code/modules/antagonists/morph/morph.dm similarity index 100% rename from code/game/gamemodes/miniantags/morph/morph.dm rename to code/modules/antagonists/morph/morph.dm diff --git a/code/modules/antagonists/ninja/ninja.dm b/code/modules/antagonists/ninja/ninja.dm new file mode 100644 index 0000000000..8124b8c5b8 --- /dev/null +++ b/code/modules/antagonists/ninja/ninja.dm @@ -0,0 +1,155 @@ +/datum/antagonist/ninja + name = "Ninja" + antagpanel_category = "Ninja" + job_rank = ROLE_NINJA + var/helping_station = FALSE + var/give_objectives = TRUE + var/give_equipment = TRUE + + +/datum/antagonist/ninja/apply_innate_effects(mob/living/mob_override) + var/mob/living/M = mob_override || owner.current + update_ninja_icons_added(M) + +/datum/antagonist/ninja/remove_innate_effects(mob/living/mob_override) + var/mob/living/M = mob_override || owner.current + update_ninja_icons_removed(M) + +/datum/antagonist/ninja/proc/equip_space_ninja(mob/living/carbon/human/H = owner.current) + return H.equipOutfit(/datum/outfit/ninja) + +/datum/antagonist/ninja/proc/addMemories() + antag_memory += "I am an elite mercenary assassin of the mighty Spider Clan. A SPACE NINJA!
" + antag_memory += "Surprise is my weapon. Shadows are my armor. Without them, I am nothing. (//initialize your suit by right clicking on it, to use abilities like stealth)!
" + antag_memory += "Officially, [helping_station?"Nanotrasen":"The Syndicate"] are my employer.
" + +/datum/antagonist/ninja/proc/addObjectives(quantity = 6) + var/list/possible_targets = list() + for(var/datum/mind/M in SSticker.minds) + if(M.current && M.current.stat != DEAD) + if(ishuman(M.current)) + if(M.special_role) + possible_targets[M] = 0 //bad-guy + else if(M.assigned_role in GLOB.command_positions) + possible_targets[M] = 1 //good-guy + + var/list/possible_objectives = list(1,2,3,4) + + while(objectives.len < quantity) + switch(pick_n_take(possible_objectives)) + if(1) //research + var/datum/objective/download/O = new /datum/objective/download() + O.owner = owner + O.gen_amount_goal() + objectives += O + + if(2) //steal + var/datum/objective/steal/special/O = new /datum/objective/steal/special() + O.owner = owner + objectives += O + + if(3) //protect/kill + if(!possible_targets.len) continue + var/index = rand(1,possible_targets.len) + var/datum/mind/M = possible_targets[index] + var/is_bad_guy = possible_targets[M] + possible_targets.Cut(index,index+1) + + if(is_bad_guy ^ helping_station) //kill (good-ninja + bad-guy or bad-ninja + good-guy) + var/datum/objective/assassinate/O = new /datum/objective/assassinate() + O.owner = owner + O.target = M + O.explanation_text = "Slay \the [M.current.real_name], the [M.assigned_role]." + objectives += O + else //protect + var/datum/objective/protect/O = new /datum/objective/protect() + O.owner = owner + O.target = M + O.explanation_text = "Protect \the [M.current.real_name], the [M.assigned_role], from harm." + objectives += O + if(4) //debrain/capture + if(!possible_targets.len) continue + var/selected = rand(1,possible_targets.len) + var/datum/mind/M = possible_targets[selected] + var/is_bad_guy = possible_targets[M] + possible_targets.Cut(selected,selected+1) + + if(is_bad_guy ^ helping_station) //debrain (good-ninja + bad-guy or bad-ninja + good-guy) + var/datum/objective/debrain/O = new /datum/objective/debrain() + O.owner = owner + O.target = M + O.explanation_text = "Steal the brain of [M.current.real_name]." + objectives += O + else //capture + var/datum/objective/capture/O = new /datum/objective/capture() + O.owner = owner + O.gen_amount_goal() + objectives += O + else + break + var/datum/objective/O = new /datum/objective/survive() + O.owner = owner + owner.objectives |= objectives + + +/proc/remove_ninja(mob/living/L) + if(!L || !L.mind) + return FALSE + var/datum/antagonist/datum = L.mind.has_antag_datum(/datum/antagonist/ninja) + datum.on_removal() + return TRUE + +/proc/is_ninja(mob/living/M) + return M && M.mind && M.mind.has_antag_datum(/datum/antagonist/ninja) + + +/datum/antagonist/ninja/greet() + SEND_SOUND(owner.current, sound('sound/effects/ninja_greeting.ogg')) + to_chat(owner.current, "I am an elite mercenary assassin of the mighty Spider Clan. A SPACE NINJA!") + to_chat(owner.current, "Surprise is my weapon. Shadows are my armor. Without them, I am nothing. (//initialize your suit by right clicking on it, to use abilities like stealth)!") + to_chat(owner.current, "Officially, [helping_station?"Nanotrasen":"The Syndicate"] are my employer.") + return + +/datum/antagonist/ninja/on_gain() + if(give_objectives) + addObjectives() + addMemories() + if(give_equipment) + equip_space_ninja(owner.current) + . = ..() + +/datum/antagonist/ninja/admin_add(datum/mind/new_owner,mob/admin) + var/adj + switch(input("What kind of ninja?", "Ninja") as null|anything in list("Random","Syndicate","Nanotrasen","No objectives")) + if("Random") + helping_station = pick(TRUE,FALSE) + adj = "" + if("Syndicate") + helping_station = FALSE + adj = "syndie" + if("Nanotrasen") + helping_station = TRUE + adj = "friendly" + if("No objectives") + give_objectives = FALSE + adj = "objectiveless" + else + return + new_owner.assigned_role = "Space Ninja" + new_owner.special_role = "Space Ninja" + new_owner.add_antag_datum(src) + message_admins("[key_name_admin(admin)] has [adj] ninja'ed [new_owner.current].") + log_admin("[key_name(admin)] has [adj] ninja'ed [new_owner.current].") + +/datum/antagonist/ninja/antag_listing_name() + return ..() + "(Ninja)" + +/datum/antagonist/ninja/proc/update_ninja_icons_added(var/mob/living/carbon/human/ninja) + var/datum/atom_hud/antag/ninjahud = GLOB.huds[ANTAG_HUD_NINJA] + ninjahud.join_hud(ninja) + set_antag_hud(ninja, "ninja") + +/datum/antagonist/ninja/proc/update_ninja_icons_removed(var/mob/living/carbon/human/ninja) + var/datum/atom_hud/antag/ninjahud = GLOB.huds[ANTAG_HUD_NINJA] + ninjahud.leave_hud(ninja) + set_antag_hud(ninja, null) \ No newline at end of file diff --git a/code/game/gamemodes/nuclear/nuclear_challenge.dm b/code/modules/antagonists/nukeop/equipment/nuclear_challenge.dm similarity index 100% rename from code/game/gamemodes/nuclear/nuclear_challenge.dm rename to code/modules/antagonists/nukeop/equipment/nuclear_challenge.dm diff --git a/code/game/gamemodes/nuclear/nuclearbomb.dm b/code/modules/antagonists/nukeop/equipment/nuclearbomb.dm similarity index 100% rename from code/game/gamemodes/nuclear/nuclearbomb.dm rename to code/modules/antagonists/nukeop/equipment/nuclearbomb.dm diff --git a/code/game/gamemodes/nuclear/pinpointer.dm b/code/modules/antagonists/nukeop/equipment/pinpointer.dm similarity index 95% rename from code/game/gamemodes/nuclear/pinpointer.dm rename to code/modules/antagonists/nukeop/equipment/pinpointer.dm index 7047729294..1cdc356559 100644 --- a/code/game/gamemodes/nuclear/pinpointer.dm +++ b/code/modules/antagonists/nukeop/equipment/pinpointer.dm @@ -1,82 +1,82 @@ -/obj/item/pinpointer/nuke - var/mode = TRACK_NUKE_DISK - -/obj/item/pinpointer/nuke/examine(mob/user) - ..() - var/msg = "Its tracking indicator reads " - switch(mode) - if(TRACK_NUKE_DISK) - msg += "\"nuclear_disk\"." - if(TRACK_MALF_AI) - msg += "\"01000001 01001001\"." - if(TRACK_INFILTRATOR) - msg += "\"vasvygengbefuvc\"." - else - msg = "Its tracking indicator is blank." - to_chat(user, msg) - for(var/obj/machinery/nuclearbomb/bomb in GLOB.machines) - if(bomb.timing) - to_chat(user, "Extreme danger. Arming signal detected. Time remaining: [bomb.get_time_left()].") - -/obj/item/pinpointer/nuke/process() - ..() - if(active) // If shit's going down - for(var/obj/machinery/nuclearbomb/bomb in GLOB.nuke_list) - if(bomb.timing) - if(!alert) - alert = TRUE - playsound(src, 'sound/items/nuke_toy_lowpower.ogg', 50, 0) - if(isliving(loc)) - var/mob/living/L = loc - to_chat(L, "Your [name] vibrates and lets out a tinny alarm. Uh oh.") - -/obj/item/pinpointer/nuke/scan_for_target() - target = null - switch(mode) - if(TRACK_NUKE_DISK) - var/obj/item/disk/nuclear/N = locate() in GLOB.poi_list - target = N - if(TRACK_MALF_AI) - for(var/V in GLOB.ai_list) - var/mob/living/silicon/ai/A = V - if(A.nuking) - target = A - for(var/V in GLOB.apcs_list) - var/obj/machinery/power/apc/A = V - if(A.malfhack && A.occupier) - target = A - if(TRACK_INFILTRATOR) - target = SSshuttle.getShuttle("syndicate") - ..() - -/obj/item/pinpointer/nuke/proc/switch_mode_to(new_mode) - if(isliving(loc)) - var/mob/living/L = loc - to_chat(L, "Your [name] beeps as it reconfigures its tracking algorithms.") - playsound(L, 'sound/machines/triple_beep.ogg', 50, 1) - mode = new_mode - scan_for_target() - -/obj/item/pinpointer/nuke/syndicate // Syndicate pinpointers automatically point towards the infiltrator once the nuke is active. - name = "syndicate pinpointer" - desc = "A handheld tracking device that locks onto certain signals. It's configured to switch tracking modes once it detects the activation signal of a nuclear device." - icon_state = "pinpointer_syndicate" - -/obj/item/pinpointer/syndicate_cyborg // Cyborg pinpointers just look for a random operative. - name = "cyborg syndicate pinpointer" - desc = "An integrated tracking device, jury-rigged to search for living Syndicate operatives." - flags_1 = NODROP_1 - -/obj/item/pinpointer/syndicate_cyborg/scan_for_target() - target = null - var/list/possible_targets = list() - var/turf/here = get_turf(src) - for(var/V in get_antagonists(/datum/antagonist/nukeop)) - var/datum/mind/M = V - if(ishuman(M.current) && M.current.stat != DEAD) - possible_targets |= M.current - var/mob/living/closest_operative = get_closest_atom(/mob/living/carbon/human, possible_targets, here) - if(closest_operative) - target = closest_operative - ..() - +/obj/item/pinpointer/nuke + var/mode = TRACK_NUKE_DISK + +/obj/item/pinpointer/nuke/examine(mob/user) + ..() + var/msg = "Its tracking indicator reads " + switch(mode) + if(TRACK_NUKE_DISK) + msg += "\"nuclear_disk\"." + if(TRACK_MALF_AI) + msg += "\"01000001 01001001\"." + if(TRACK_INFILTRATOR) + msg += "\"vasvygengbefuvc\"." + else + msg = "Its tracking indicator is blank." + to_chat(user, msg) + for(var/obj/machinery/nuclearbomb/bomb in GLOB.machines) + if(bomb.timing) + to_chat(user, "Extreme danger. Arming signal detected. Time remaining: [bomb.get_time_left()].") + +/obj/item/pinpointer/nuke/process() + ..() + if(active) // If shit's going down + for(var/obj/machinery/nuclearbomb/bomb in GLOB.nuke_list) + if(bomb.timing) + if(!alert) + alert = TRUE + playsound(src, 'sound/items/nuke_toy_lowpower.ogg', 50, 0) + if(isliving(loc)) + var/mob/living/L = loc + to_chat(L, "Your [name] vibrates and lets out a tinny alarm. Uh oh.") + +/obj/item/pinpointer/nuke/scan_for_target() + target = null + switch(mode) + if(TRACK_NUKE_DISK) + var/obj/item/disk/nuclear/N = locate() in GLOB.poi_list + target = N + if(TRACK_MALF_AI) + for(var/V in GLOB.ai_list) + var/mob/living/silicon/ai/A = V + if(A.nuking) + target = A + for(var/V in GLOB.apcs_list) + var/obj/machinery/power/apc/A = V + if(A.malfhack && A.occupier) + target = A + if(TRACK_INFILTRATOR) + target = SSshuttle.getShuttle("syndicate") + ..() + +/obj/item/pinpointer/nuke/proc/switch_mode_to(new_mode) + if(isliving(loc)) + var/mob/living/L = loc + to_chat(L, "Your [name] beeps as it reconfigures its tracking algorithms.") + playsound(L, 'sound/machines/triple_beep.ogg', 50, 1) + mode = new_mode + scan_for_target() + +/obj/item/pinpointer/nuke/syndicate // Syndicate pinpointers automatically point towards the infiltrator once the nuke is active. + name = "syndicate pinpointer" + desc = "A handheld tracking device that locks onto certain signals. It's configured to switch tracking modes once it detects the activation signal of a nuclear device." + icon_state = "pinpointer_syndicate" + +/obj/item/pinpointer/syndicate_cyborg // Cyborg pinpointers just look for a random operative. + name = "cyborg syndicate pinpointer" + desc = "An integrated tracking device, jury-rigged to search for living Syndicate operatives." + flags_1 = NODROP_1 + +/obj/item/pinpointer/syndicate_cyborg/scan_for_target() + target = null + var/list/possible_targets = list() + var/turf/here = get_turf(src) + for(var/V in get_antag_minds(/datum/antagonist/nukeop)) + var/datum/mind/M = V + if(ishuman(M.current) && M.current.stat != DEAD) + possible_targets |= M.current + var/mob/living/closest_operative = get_closest_atom(/mob/living/carbon/human, possible_targets, here) + if(closest_operative) + target = closest_operative + ..() + diff --git a/code/modules/antagonists/nukeop/nukeop.dm b/code/modules/antagonists/nukeop/nukeop.dm new file mode 100644 index 0000000000..8401dc8ced --- /dev/null +++ b/code/modules/antagonists/nukeop/nukeop.dm @@ -0,0 +1,369 @@ +/datum/antagonist/nukeop + name = "Nuclear Operative" + roundend_category = "syndicate operatives" //just in case + antagpanel_category = "NukeOp" + job_rank = ROLE_OPERATIVE + var/datum/team/nuclear/nuke_team + var/always_new_team = FALSE //If not assigned a team by default ops will try to join existing ones, set this to TRUE to always create new team. + var/send_to_spawnpoint = TRUE //Should the user be moved to default spawnpoint. + var/nukeop_outfit = /datum/outfit/syndicate + +/datum/antagonist/nukeop/proc/update_synd_icons_added(mob/living/M) + var/datum/atom_hud/antag/opshud = GLOB.huds[ANTAG_HUD_OPS] + opshud.join_hud(M) + set_antag_hud(M, "synd") + +/datum/antagonist/nukeop/proc/update_synd_icons_removed(mob/living/M) + var/datum/atom_hud/antag/opshud = GLOB.huds[ANTAG_HUD_OPS] + opshud.leave_hud(M) + set_antag_hud(M, null) + +/datum/antagonist/nukeop/apply_innate_effects(mob/living/mob_override) + var/mob/living/M = mob_override || owner.current + update_synd_icons_added(M) + +/datum/antagonist/nukeop/remove_innate_effects(mob/living/mob_override) + var/mob/living/M = mob_override || owner.current + update_synd_icons_removed(M) + +/datum/antagonist/nukeop/proc/equip_op() + if(!ishuman(owner.current)) + return + var/mob/living/carbon/human/H = owner.current + + H.set_species(/datum/species/human) //Plasamen burn up otherwise, and lizards are vulnerable to asimov AIs + + H.equipOutfit(nukeop_outfit) + return TRUE + +/datum/antagonist/nukeop/greet() + owner.current.playsound_local(get_turf(owner.current), 'sound/ambience/antag/ops.ogg',100,0) + to_chat(owner, "You are a [nuke_team ? nuke_team.syndicate_name : "syndicate"] agent!") + owner.announce_objectives() + return + +/datum/antagonist/nukeop/on_gain() + give_alias() + forge_objectives() + . = ..() + equip_op() + memorize_code() + if(send_to_spawnpoint) + move_to_spawnpoint() + +/datum/antagonist/nukeop/get_team() + return nuke_team + +/datum/antagonist/nukeop/proc/assign_nuke() + if(nuke_team && !nuke_team.tracked_nuke) + nuke_team.memorized_code = random_nukecode() + var/obj/machinery/nuclearbomb/syndicate/nuke = locate() in GLOB.nuke_list + if(nuke) + nuke_team.tracked_nuke = nuke + if(nuke.r_code == "ADMIN") + nuke.r_code = nuke_team.memorized_code + else //Already set by admins/something else? + nuke_team.memorized_code = nuke.r_code + else + stack_trace("Syndicate nuke not found during nuke team creation.") + nuke_team.memorized_code = null + +/datum/antagonist/nukeop/proc/give_alias() + if(nuke_team && nuke_team.syndicate_name) + var/number = 1 + number = nuke_team.members.Find(owner) + owner.current.real_name = "[nuke_team.syndicate_name] Operative #[number]" + +/datum/antagonist/nukeop/proc/memorize_code() + if(nuke_team && nuke_team.tracked_nuke && nuke_team.memorized_code) + antag_memory += "[nuke_team.tracked_nuke] Code: [nuke_team.memorized_code]
" + to_chat(owner, "The nuclear authorization code is: [nuke_team.memorized_code]") + else + to_chat(owner, "Unfortunately the syndicate was unable to provide you with nuclear authorization code.") + +/datum/antagonist/nukeop/proc/forge_objectives() + if(nuke_team) + owner.objectives |= nuke_team.objectives + +/datum/antagonist/nukeop/proc/move_to_spawnpoint() + var/team_number = 1 + if(nuke_team) + team_number = nuke_team.members.Find(owner) + owner.current.forceMove(GLOB.nukeop_start[((team_number - 1) % GLOB.nukeop_start.len) + 1]) + +/datum/antagonist/nukeop/leader/move_to_spawnpoint() + owner.current.forceMove(pick(GLOB.nukeop_leader_start)) + +/datum/antagonist/nukeop/create_team(datum/team/nuclear/new_team) + if(!new_team) + if(!always_new_team) + for(var/datum/antagonist/nukeop/N in GLOB.antagonists) + if(!N.owner) + continue + if(N.nuke_team) + nuke_team = N.nuke_team + return + nuke_team = new /datum/team/nuclear + nuke_team.update_objectives() + assign_nuke() //This is bit ugly + return + if(!istype(new_team)) + stack_trace("Wrong team type passed to [type] initialization.") + nuke_team = new_team + +/datum/antagonist/nukeop/admin_add(datum/mind/new_owner,mob/admin) + new_owner.assigned_role = "Syndicate" + new_owner.add_antag_datum(src) + message_admins("[key_name_admin(admin)] has nuke op'ed [new_owner.current].") + log_admin("[key_name(admin)] has nuke op'ed [new_owner.current].") + +/datum/antagonist/nukeop/get_admin_commands() + . = ..() + .["Send to base"] = CALLBACK(src,.proc/admin_send_to_base) + .["Tell code"] = CALLBACK(src,.proc/admin_tell_code) + +/datum/antagonist/nukeop/proc/admin_send_to_base(mob/admin) + owner.current.forceMove(pick(GLOB.nukeop_start)) + +/datum/antagonist/nukeop/proc/admin_tell_code(mob/admin) + var/code + for (var/obj/machinery/nuclearbomb/bombue in GLOB.machines) + if (length(bombue.r_code) <= 5 && bombue.r_code != initial(bombue.r_code)) + code = bombue.r_code + break + if (code) + antag_memory += "Syndicate Nuclear Bomb Code: [code]
" + to_chat(owner.current, "The nuclear authorization code is: [code]") + else + to_chat(admin, "No valid nuke found!") + +/datum/antagonist/nukeop/leader + name = "Nuclear Operative Leader" + nukeop_outfit = /datum/outfit/syndicate/leader + always_new_team = TRUE + var/title + +/datum/antagonist/nukeop/leader/memorize_code() + ..() + if(nuke_team && nuke_team.memorized_code) + var/obj/item/paper/P = new + P.info = "The nuclear authorization code is: [nuke_team.memorized_code]" + P.name = "nuclear bomb code" + var/mob/living/carbon/human/H = owner.current + if(!istype(H)) + P.forceMove(get_turf(H)) + else + H.put_in_hands(P, TRUE) + H.update_icons() + +/datum/antagonist/nukeop/leader/give_alias() + title = pick("Czar", "Boss", "Commander", "Chief", "Kingpin", "Director", "Overlord") + if(nuke_team && nuke_team.syndicate_name) + owner.current.real_name = "[nuke_team.syndicate_name] [title]" + else + owner.current.real_name = "Syndicate [title]" + +/datum/antagonist/nukeop/leader/greet() + owner.current.playsound_local(get_turf(owner.current), 'sound/ambience/antag/ops.ogg',100,0) + to_chat(owner, "You are the Syndicate [title] for this mission. You are responsible for the distribution of telecrystals and your ID is the only one who can open the launch bay doors.") + to_chat(owner, "If you feel you are not up to this task, give your ID to another operative.") + to_chat(owner, "In your hand you will find a special item capable of triggering a greater challenge for your team. Examine it carefully and consult with your fellow operatives before activating it.") + owner.announce_objectives() + addtimer(CALLBACK(src, .proc/nuketeam_name_assign), 1) + + +/datum/antagonist/nukeop/leader/proc/nuketeam_name_assign() + if(!nuke_team) + return + nuke_team.rename_team(ask_name()) + +/datum/team/nuclear/proc/rename_team(new_name) + syndicate_name = new_name + name = "[syndicate_name] Team" + for(var/I in members) + var/datum/mind/synd_mind = I + var/mob/living/carbon/human/H = synd_mind.current + if(!istype(H)) + continue + var/chosen_name = H.dna.species.random_name(H.gender,0,syndicate_name) + H.fully_replace_character_name(H.real_name,chosen_name) + +/datum/antagonist/nukeop/leader/proc/ask_name() + var/randomname = pick(GLOB.last_names) + var/newname = stripped_input(owner.current,"You are the nuke operative [title]. Please choose a last name for your family.", "Name change",randomname) + if (!newname) + newname = randomname + else + newname = reject_bad_name(newname) + if(!newname) + newname = randomname + + return capitalize(newname) + +/datum/antagonist/nukeop/lone + name = "Lone Operative" + always_new_team = TRUE + send_to_spawnpoint = FALSE //Handled by event + nukeop_outfit = /datum/outfit/syndicate/full + +/datum/antagonist/nukeop/lone/assign_nuke() + if(nuke_team && !nuke_team.tracked_nuke) + nuke_team.memorized_code = random_nukecode() + var/obj/machinery/nuclearbomb/selfdestruct/nuke = locate() in GLOB.nuke_list + if(nuke) + nuke_team.tracked_nuke = nuke + if(nuke.r_code == "ADMIN") + nuke.r_code = nuke_team.memorized_code + else //Already set by admins/something else? + nuke_team.memorized_code = nuke.r_code + else + stack_trace("Station self destruct ot found during lone op team creation.") + nuke_team.memorized_code = null + +/datum/antagonist/nukeop/reinforcement + send_to_spawnpoint = FALSE + nukeop_outfit = /datum/outfit/syndicate/no_crystals + +/datum/team/nuclear + var/syndicate_name + var/obj/machinery/nuclearbomb/tracked_nuke + var/core_objective = /datum/objective/nuclear + var/memorized_code + +/datum/team/nuclear/New() + ..() + syndicate_name = syndicate_name() + +/datum/team/nuclear/proc/update_objectives() + if(core_objective) + var/datum/objective/O = new core_objective + O.team = src + objectives += O + +/datum/team/nuclear/proc/disk_rescued() + for(var/obj/item/disk/nuclear/D in GLOB.poi_list) + if(!D.onCentCom()) + return FALSE + return TRUE + +/datum/team/nuclear/proc/operatives_dead() + for(var/I in members) + var/datum/mind/operative_mind = I + if(ishuman(operative_mind.current) && (operative_mind.current.stat != DEAD)) + return FALSE + return TRUE + +/datum/team/nuclear/proc/syndies_escaped() + var/obj/docking_port/mobile/S = SSshuttle.getShuttle("syndicate") + return S && (is_centcom_level(S.z) || is_transit_level(S.z)) + +/datum/team/nuclear/proc/get_result() + var/evacuation = SSshuttle.emergency.mode == SHUTTLE_ENDGAME + var/disk_rescued = disk_rescued() + var/syndies_didnt_escape = !syndies_escaped() + var/station_was_nuked = SSticker.mode.station_was_nuked + var/nuke_off_station = SSticker.mode.nuke_off_station + + if(nuke_off_station == NUKE_SYNDICATE_BASE) + return NUKE_RESULT_FLUKE + else if(!disk_rescued && station_was_nuked && !syndies_didnt_escape) + return NUKE_RESULT_NUKE_WIN + else if (!disk_rescued && station_was_nuked && syndies_didnt_escape) + return NUKE_RESULT_NOSURVIVORS + else if (!disk_rescued && !station_was_nuked && nuke_off_station && !syndies_didnt_escape) + return NUKE_RESULT_WRONG_STATION + else if (!disk_rescued && !station_was_nuked && nuke_off_station && syndies_didnt_escape) + return NUKE_RESULT_WRONG_STATION_DEAD + else if ((disk_rescued || evacuation) && operatives_dead()) + return NUKE_RESULT_CREW_WIN_SYNDIES_DEAD + else if (disk_rescued) + return NUKE_RESULT_CREW_WIN + else if (!disk_rescued && operatives_dead()) + return NUKE_RESULT_DISK_LOST + else if (!disk_rescued && evacuation) + return NUKE_RESULT_DISK_STOLEN + else + return //Undefined result + +/datum/team/nuclear/roundend_report() + var/list/parts = list() + parts += "[syndicate_name] Operatives:" + + switch(get_result()) + if(NUKE_RESULT_FLUKE) + parts += "Humiliating Syndicate Defeat" + parts += "The crew of [station_name()] gave [syndicate_name] operatives back their bomb! The syndicate base was destroyed! Next time, don't lose the nuke!" + if(NUKE_RESULT_NUKE_WIN) + parts += "Syndicate Major Victory!" + parts += "[syndicate_name] operatives have destroyed [station_name()]!" + if(NUKE_RESULT_NOSURVIVORS) + parts += "Total Annihilation" + parts += "[syndicate_name] operatives destroyed [station_name()] but did not leave the area in time and got caught in the explosion. Next time, don't lose the disk!" + if(NUKE_RESULT_WRONG_STATION) + parts += "Crew Minor Victory" + parts += "[syndicate_name] operatives secured the authentication disk but blew up something that wasn't [station_name()]. Next time, don't do that!" + if(NUKE_RESULT_WRONG_STATION_DEAD) + parts += "[syndicate_name] operatives have earned Darwin Award!" + parts += "[syndicate_name] operatives blew up something that wasn't [station_name()] and got caught in the explosion. Next time, don't do that!" + if(NUKE_RESULT_CREW_WIN_SYNDIES_DEAD) + parts += "Crew Major Victory!" + parts += "The Research Staff has saved the disk and killed the [syndicate_name] Operatives" + if(NUKE_RESULT_CREW_WIN) + parts += "Crew Major Victory" + parts += "The Research Staff has saved the disk and stopped the [syndicate_name] Operatives!" + if(NUKE_RESULT_DISK_LOST) + parts += "Neutral Victory!" + parts += "The Research Staff failed to secure the authentication disk but did manage to kill most of the [syndicate_name] Operatives!" + if(NUKE_RESULT_DISK_STOLEN) + parts += "Syndicate Minor Victory!" + parts += "[syndicate_name] operatives survived the assault but did not achieve the destruction of [station_name()]. Next time, don't lose the disk!" + else + parts += "Neutral Victory" + parts += "Mission aborted!" + + var/text = "
The syndicate operatives were:" + var/purchases = "" + var/TC_uses = 0 + for(var/I in members) + var/datum/mind/syndicate = I + var/datum/uplink_purchase_log/H = GLOB.uplink_purchase_logs_by_key[syndicate.key] + if(H) + TC_uses += H.total_spent + purchases += H.generate_render(show_key = FALSE) + text += printplayerlist(members) + text += "
" + text += "(Syndicates used [TC_uses] TC) [purchases]" + if(TC_uses == 0 && SSticker.mode.station_was_nuked && !operatives_dead()) + text += "[icon2html('icons/badass.dmi', world, "badass")]" + + parts += text + + return "
[parts.Join("
")]
" + +/datum/team/nuclear/antag_listing_name() + if(syndicate_name) + return "[syndicate_name] Syndicates" + else + return "Syndicates" + +/datum/team/nuclear/antag_listing_entry() + var/disk_report = "Nuclear Disk(s)
" + disk_report += "
[C]
" + for(var/obj/item/disk/nuclear/N in GLOB.poi_list) + disk_report += "" + disk_report += "
[N.name], " + var/atom/disk_loc = N.loc + while(!isturf(disk_loc)) + if(ismob(disk_loc)) + var/mob/M = disk_loc + disk_report += "carried by [M.real_name] " + if(isobj(disk_loc)) + var/obj/O = disk_loc + disk_report += "in \a [O.name] " + disk_loc = disk_loc.loc + disk_report += "in [disk_loc.loc] at ([disk_loc.x], [disk_loc.y], [disk_loc.z])FLW
" + var/common_part = ..() + return common_part + disk_report + +/datum/team/nuclear/is_gamemode_hero() + return SSticker.mode.name == "nuclear emergency" \ No newline at end of file diff --git a/code/modules/antagonists/pirate/pirate.dm b/code/modules/antagonists/pirate/pirate.dm new file mode 100644 index 0000000000..cdd871ff35 --- /dev/null +++ b/code/modules/antagonists/pirate/pirate.dm @@ -0,0 +1,132 @@ +/datum/antagonist/pirate + name = "Space Pirate" + job_rank = ROLE_TRAITOR + roundend_category = "space pirates" + antagpanel_category = "Pirate" + var/datum/team/pirate/crew + +/datum/antagonist/pirate/greet() + to_chat(owner, "You are a Space Pirate!") + to_chat(owner, "The station refused to pay for your protection, protect the ship, siphon the credits from the station and raid it for even more loot.") + owner.announce_objectives() + +/datum/antagonist/pirate/get_team() + return crew + +/datum/antagonist/pirate/create_team(datum/team/pirate/new_team) + if(!new_team) + for(var/datum/antagonist/pirate/P in GLOB.antagonists) + if(!P.owner) + continue + if(P.crew) + crew = P.crew + return + if(!new_team) + crew = new /datum/team/pirate + crew.forge_objectives() + return + if(!istype(new_team)) + stack_trace("Wrong team type passed to [type] initialization.") + crew = new_team + +/datum/antagonist/pirate/on_gain() + if(crew) + owner.objectives |= crew.objectives + . = ..() + +/datum/antagonist/pirate/on_removal() + if(crew) + owner.objectives -= crew.objectives + . = ..() + +/datum/team/pirate + name = "Pirate crew" + +/datum/team/pirate/proc/forge_objectives() + var/datum/objective/loot/getbooty = new() + getbooty.team = src + getbooty.storage_area = locate(/area/shuttle/pirate/vault) in GLOB.sortedAreas + getbooty.update_initial_value() + getbooty.update_explanation_text() + objectives += getbooty + for(var/datum/mind/M in members) + M.objectives |= objectives + + +GLOBAL_LIST_INIT(pirate_loot_cache, typecacheof(list( + /obj/structure/reagent_dispensers/beerkeg, + /mob/living/simple_animal/parrot, + /obj/item/stack/sheet/mineral/gold, + /obj/item/stack/sheet/mineral/diamond, + /obj/item/stack/spacecash, + /obj/item/melee/sabre,))) + +/datum/objective/loot + var/area/storage_area //Place where we we will look for the loot. + explanation_text = "Acquire valuable loot and store it in designated area." + var/target_value = 50000 + var/initial_value = 0 //Things in the vault at spawn time do not count + +/datum/objective/loot/update_explanation_text() + if(storage_area) + explanation_text = "Acquire loot and store [target_value] of credits worth in [storage_area.name]." + +/datum/objective/loot/proc/loot_listing() + //Lists notable loot. + if(!storage_area) + return "Nothing" + var/list/loot_table = list() + for(var/atom/movable/AM in storage_area.GetAllContents()) + if(is_type_in_typecache(AM,GLOB.pirate_loot_cache)) + var/lootname = AM.name + var/count = 1 + if(istype(AM,/obj/item/stack)) //Ugh. + var/obj/item/stack/S = AM + lootname = S.singular_name + count = S.amount + if(!loot_table[lootname]) + loot_table[lootname] = count + else + loot_table[lootname] += count + var/list/loot_texts = list() + for(var/key in loot_table) + var/amount = loot_table[key] + loot_texts += "[amount] [key][amount > 1 ? "s":""]" + return loot_texts.Join(", ") + +/datum/objective/loot/proc/get_loot_value() + if(!storage_area) + return 0 + var/value = 0 + for(var/turf/T in storage_area.contents) + value += export_item_and_contents(T,TRUE, TRUE, dry_run = TRUE) + return value - initial_value + +/datum/objective/loot/proc/update_initial_value() + initial_value = get_loot_value() + +/datum/objective/loot/check_completion() + return ..() || get_loot_value() >= target_value + +/datum/team/pirate/roundend_report() + var/list/parts = list() + + parts += "Space Pirates were:" + + var/all_dead = TRUE + for(var/datum/mind/M in members) + if(considered_alive(M)) + all_dead = FALSE + parts += printplayerlist(members) + + parts += "Loot stolen: " + var/datum/objective/loot/L = locate() in objectives + parts += L.loot_listing() + parts += "Total loot value : [L.get_loot_value()]/[L.target_value] credits" + + if(L.check_completion() && !all_dead) + parts += "The pirate crew was successful!" + else + parts += "The pirate crew has failed." + + return "
[parts.Join("
")]
" \ No newline at end of file diff --git a/code/game/gamemodes/miniantags/revenant/revenant.dm b/code/modules/antagonists/revenant/revenant.dm similarity index 100% rename from code/game/gamemodes/miniantags/revenant/revenant.dm rename to code/modules/antagonists/revenant/revenant.dm diff --git a/code/game/gamemodes/miniantags/revenant/revenant_abilities.dm b/code/modules/antagonists/revenant/revenant_abilities.dm similarity index 100% rename from code/game/gamemodes/miniantags/revenant/revenant_abilities.dm rename to code/modules/antagonists/revenant/revenant_abilities.dm diff --git a/code/game/gamemodes/miniantags/revenant/revenant_blight.dm b/code/modules/antagonists/revenant/revenant_blight.dm similarity index 100% rename from code/game/gamemodes/miniantags/revenant/revenant_blight.dm rename to code/modules/antagonists/revenant/revenant_blight.dm diff --git a/code/game/gamemodes/miniantags/revenant/revenant_spawn_event.dm b/code/modules/antagonists/revenant/revenant_spawn_event.dm similarity index 100% rename from code/game/gamemodes/miniantags/revenant/revenant_spawn_event.dm rename to code/modules/antagonists/revenant/revenant_spawn_event.dm diff --git a/code/modules/antagonists/revolution/revolution.dm b/code/modules/antagonists/revolution/revolution.dm new file mode 100644 index 0000000000..5c89fe24cf --- /dev/null +++ b/code/modules/antagonists/revolution/revolution.dm @@ -0,0 +1,368 @@ +//How often to check for promotion possibility +#define HEAD_UPDATE_PERIOD 300 + +/datum/antagonist/rev + name = "Revolutionary" + roundend_category = "revolutionaries" // if by some miracle revolutionaries without revolution happen + antagpanel_category = "Revolution" + job_rank = ROLE_REV + var/hud_type = "rev" + var/datum/team/revolution/rev_team + +/datum/antagonist/rev/can_be_owned(datum/mind/new_owner) + . = ..() + if(.) + if(new_owner.assigned_role in GLOB.command_positions) + return FALSE + if(new_owner.unconvertable) + return FALSE + if(new_owner.current && new_owner.current.isloyal()) + return FALSE + +/datum/antagonist/rev/apply_innate_effects(mob/living/mob_override) + var/mob/living/M = mob_override || owner.current + update_rev_icons_added(M) + +/datum/antagonist/rev/remove_innate_effects(mob/living/mob_override) + var/mob/living/M = mob_override || owner.current + update_rev_icons_removed(M) + +/datum/antagonist/rev/proc/equip_rev() + return + +/datum/antagonist/rev/on_gain() + . = ..() + create_objectives() + equip_rev() + owner.current.log_message("Has been converted to the revolution!", INDIVIDUAL_ATTACK_LOG) + +/datum/antagonist/rev/on_removal() + remove_objectives() + . = ..() + +/datum/antagonist/rev/greet() + to_chat(owner, "You are now a revolutionary! Help your cause. Do not harm your fellow freedom fighters. You can identify your comrades by the red \"R\" icons, and your leaders by the blue \"R\" icons. Help them kill the heads to win the revolution!") + owner.announce_objectives() + +/datum/antagonist/rev/create_team(datum/team/revolution/new_team) + if(!new_team) + //For now only one revolution at a time + for(var/datum/antagonist/rev/head/H in GLOB.antagonists) + if(!H.owner) + continue + if(H.rev_team) + rev_team = H.rev_team + return + rev_team = new /datum/team/revolution + rev_team.update_objectives() + rev_team.update_heads() + return + if(!istype(new_team)) + stack_trace("Wrong team type passed to [type] initialization.") + rev_team = new_team + +/datum/antagonist/rev/get_team() + return rev_team + +/datum/antagonist/rev/proc/create_objectives() + owner.objectives |= rev_team.objectives + +/datum/antagonist/rev/proc/remove_objectives() + owner.objectives -= rev_team.objectives + +//Bump up to head_rev +/datum/antagonist/rev/proc/promote() + var/old_team = rev_team + var/datum/mind/old_owner = owner + silent = TRUE + owner.remove_antag_datum(/datum/antagonist/rev) + var/datum/antagonist/rev/head/new_revhead = new() + new_revhead.silent = TRUE + old_owner.add_antag_datum(new_revhead,old_team) + new_revhead.silent = FALSE + to_chat(old_owner, "You have proved your devotion to revolution! You are a head revolutionary now!") + +/datum/antagonist/rev/get_admin_commands() + . = ..() + .["Promote"] = CALLBACK(src,.proc/admin_promote) + +/datum/antagonist/rev/proc/admin_promote(mob/admin) + var/datum/mind/O = owner + promote() + message_admins("[key_name_admin(admin)] has head-rev'ed [O].") + log_admin("[key_name(admin)] has head-rev'ed [O].") + +/datum/antagonist/rev/head/admin_add(datum/mind/new_owner,mob/admin) + give_flash = TRUE + give_hud = TRUE + remove_clumsy = TRUE + new_owner.add_antag_datum(src) + message_admins("[key_name_admin(admin)] has head-rev'ed [new_owner.current].") + log_admin("[key_name(admin)] has head-rev'ed [new_owner.current].") + to_chat(new_owner.current, "You are a member of the revolutionaries' leadership now!") + +/datum/antagonist/rev/head/get_admin_commands() + . = ..() + . -= "Promote" + .["Take flash"] = CALLBACK(src,.proc/admin_take_flash) + .["Give flash"] = CALLBACK(src,.proc/admin_give_flash) + .["Repair flash"] = CALLBACK(src,.proc/admin_repair_flash) + .["Demote"] = CALLBACK(src,.proc/admin_demote) + +/datum/antagonist/rev/head/proc/admin_take_flash(mob/admin) + var/list/L = owner.current.get_contents() + var/obj/item/device/assembly/flash/flash = locate() in L + if (!flash) + to_chat(admin, "Deleting flash failed!") + return + qdel(flash) + +/datum/antagonist/rev/head/proc/admin_give_flash(mob/admin) + //This is probably overkill but making these impact state annoys me + var/old_give_flash = give_flash + var/old_give_hud = give_hud + var/old_remove_clumsy = remove_clumsy + give_flash = TRUE + give_hud = FALSE + remove_clumsy = FALSE + equip_rev() + give_flash = old_give_flash + give_hud = old_give_hud + remove_clumsy = old_remove_clumsy + +/datum/antagonist/rev/head/proc/admin_repair_flash(mob/admin) + var/list/L = owner.current.get_contents() + var/obj/item/device/assembly/flash/flash = locate() in L + if (!flash) + to_chat(admin, "Repairing flash failed!") + else + flash.crit_fail = 0 + flash.update_icon() + +/datum/antagonist/rev/head/proc/admin_demote(datum/mind/target,mob/user) + message_admins("[key_name_admin(user)] has demoted [owner.current] from head revolutionary.") + log_admin("[key_name(user)] has demoted [owner.current] from head revolutionary.") + demote() + +/datum/antagonist/rev/head + name = "Head Revolutionary" + hud_type = "rev_head" + var/remove_clumsy = FALSE + var/give_flash = FALSE + var/give_hud = TRUE + +/datum/antagonist/rev/head/antag_listing_name() + return ..() + "(Leader)" + +/datum/antagonist/rev/proc/update_rev_icons_added(mob/living/M) + var/datum/atom_hud/antag/revhud = GLOB.huds[ANTAG_HUD_REV] + revhud.join_hud(M) + set_antag_hud(M,hud_type) + +/datum/antagonist/rev/proc/update_rev_icons_removed(mob/living/M) + var/datum/atom_hud/antag/revhud = GLOB.huds[ANTAG_HUD_REV] + revhud.leave_hud(M) + set_antag_hud(M, null) + +/datum/antagonist/rev/proc/can_be_converted(mob/living/candidate) + if(!candidate.mind) + return FALSE + if(!can_be_owned(candidate.mind)) + return FALSE + var/mob/living/carbon/C = candidate //Check to see if the potential rev is implanted + if(!istype(C)) //Can't convert simple animals + return FALSE + return TRUE + +/datum/antagonist/rev/proc/add_revolutionary(datum/mind/rev_mind,stun = TRUE) + if(!can_be_converted(rev_mind.current)) + return FALSE + if(stun) + if(iscarbon(rev_mind.current)) + var/mob/living/carbon/carbon_mob = rev_mind.current + carbon_mob.silent = max(carbon_mob.silent, 5) + carbon_mob.flash_act(1, 1) + rev_mind.current.Stun(100) + rev_mind.add_antag_datum(/datum/antagonist/rev,rev_team) + rev_mind.special_role = "Revolutionary" + return TRUE + +/datum/antagonist/rev/head/proc/demote() + var/datum/mind/old_owner = owner + var/old_team = rev_team + silent = TRUE + owner.remove_antag_datum(/datum/antagonist/rev/head) + var/datum/antagonist/rev/new_rev = new /datum/antagonist/rev() + new_rev.silent = TRUE + old_owner.add_antag_datum(new_rev,old_team) + new_rev.silent = FALSE + to_chat(old_owner, "Revolution has been disappointed of your leader traits! You are a regular revolutionary now!") + +/datum/antagonist/rev/farewell() + if(ishuman(owner.current)) + owner.current.visible_message("[owner.current] looks like they just remembered their real allegiance!", null, null, null, owner.current) + to_chat(owner, "You are no longer a brainwashed revolutionary! Your memory is hazy from the time you were a rebel...the only thing you remember is the name of the one who brainwashed you...") + else if(issilicon(owner.current)) + owner.current.visible_message("The frame beeps contentedly, purging the hostile memory engram from the MMI before initalizing it.", null, null, null, owner.current) + to_chat(owner, "The frame's firmware detects and deletes your neural reprogramming! You remember nothing but the name of the one who flashed you.") + +/datum/antagonist/rev/proc/remove_revolutionary(borged, deconverter) + log_attack("[owner.current] (Key: [key_name(owner.current)]) has been deconverted from the revolution by [deconverter] (Key: [key_name(deconverter)])!") + if(borged) + message_admins("[ADMIN_LOOKUPFLW(owner.current)] has been borged while being a [name]") + owner.special_role = null + if(iscarbon(owner.current)) + var/mob/living/carbon/C = owner.current + C.Unconscious(100) + owner.remove_antag_datum(type) + +/datum/antagonist/rev/head/remove_revolutionary(borged,deconverter) + if(!borged) + return + . = ..() + +/datum/antagonist/rev/head/equip_rev() + var/mob/living/carbon/human/H = owner.current + if(!istype(H)) + return + + if(remove_clumsy && owner.assigned_role == "Clown") + to_chat(owner, "Your training has allowed you to overcome your clownish nature, allowing you to wield weapons without harming yourself.") + H.dna.remove_mutation(CLOWNMUT) + + if(give_flash) + var/obj/item/device/assembly/flash/T = new(H) + var/list/slots = list ( + "backpack" = slot_in_backpack, + "left pocket" = slot_l_store, + "right pocket" = slot_r_store + ) + var/where = H.equip_in_one_of_slots(T, slots) + if (!where) + to_chat(H, "The Syndicate were unfortunately unable to get you a flash.") + else + to_chat(H, "The flash in your [where] will help you to persuade the crew to join your cause.") + + if(give_hud) + var/obj/item/organ/cyberimp/eyes/hud/security/syndicate/S = new(H) + S.Insert(H, special = FALSE, drop_if_replaced = FALSE) + to_chat(H, "Your eyes have been implanted with a cybernetic security HUD which will help you keep track of who is mindshield-implanted, and therefore unable to be recruited.") + +/datum/team/revolution + name = "Revolution" + var/max_headrevs = 3 + +/datum/team/revolution/proc/update_objectives(initial = FALSE) + var/untracked_heads = SSjob.get_all_heads() + for(var/datum/objective/mutiny/O in objectives) + untracked_heads -= O.target + for(var/datum/mind/M in untracked_heads) + var/datum/objective/mutiny/new_target = new() + new_target.team = src + new_target.target = M + new_target.update_explanation_text() + objectives += new_target + for(var/datum/mind/M in members) + M.objectives |= objectives + + addtimer(CALLBACK(src,.proc/update_objectives),HEAD_UPDATE_PERIOD,TIMER_UNIQUE) + +/datum/team/revolution/proc/head_revolutionaries() + . = list() + for(var/datum/mind/M in members) + if(M.has_antag_datum(/datum/antagonist/rev/head)) + . += M + +/datum/team/revolution/proc/update_heads() + if(SSticker.HasRoundStarted()) + var/list/datum/mind/head_revolutionaries = head_revolutionaries() + var/list/datum/mind/heads = SSjob.get_all_heads() + var/list/sec = SSjob.get_all_sec() + + if(head_revolutionaries.len < max_headrevs && head_revolutionaries.len < round(heads.len - ((8 - sec.len) / 3))) + var/list/datum/mind/non_heads = members - head_revolutionaries + var/list/datum/mind/promotable = list() + for(var/datum/mind/khrushchev in non_heads) + if(khrushchev.current && !khrushchev.current.incapacitated() && !khrushchev.current.restrained() && khrushchev.current.client && khrushchev.current.stat != DEAD) + if(ROLE_REV in khrushchev.current.client.prefs.be_special) + promotable += khrushchev + if(promotable.len) + var/datum/mind/new_leader = pick(promotable) + var/datum/antagonist/rev/rev = new_leader.has_antag_datum(/datum/antagonist/rev) + rev.promote() + + addtimer(CALLBACK(src,.proc/update_heads),HEAD_UPDATE_PERIOD,TIMER_UNIQUE) + + +/datum/team/revolution/roundend_report() + if(!members.len) + return + + var/list/result = list() + + result += "
" + + var/num_revs = 0 + var/num_survivors = 0 + for(var/mob/living/carbon/survivor in GLOB.alive_mob_list) + if(survivor.ckey) + num_survivors++ + if(survivor.mind) + if(is_revolutionary(survivor)) + num_revs++ + if(num_survivors) + result += "Command's Approval Rating: [100 - round((num_revs/num_survivors)*100, 0.1)]%
" + + + var/list/targets = list() + var/list/datum/mind/headrevs = get_antag_minds(/datum/antagonist/rev/head) + var/list/datum/mind/revs = get_antag_minds(/datum/antagonist/rev,TRUE) + if(headrevs.len) + var/list/headrev_part = list() + headrev_part += "The head revolutionaries were:" + headrev_part += printplayerlist(headrevs,TRUE) + result += headrev_part.Join("
") + + if(revs.len) + var/list/rev_part = list() + rev_part += "The revolutionaries were:" + rev_part += printplayerlist(revs,TRUE) + result += rev_part.Join("
") + + var/list/heads = SSjob.get_all_heads() + if(heads.len) + var/head_text = "The heads of staff were:" + head_text += "
    " + for(var/datum/mind/head in heads) + var/target = (head in targets) + head_text += "
  • " + if(target) + head_text += "Target" + head_text += "[printplayer(head, 1)]
  • " + head_text += "

" + result += head_text + + result += "
" + + return result.Join() + +/datum/team/revolution/antag_listing_entry() + var/common_part = ..() + var/heads_report = "Heads of Staff
" + heads_report += "" + for(var/datum/mind/N in SSjob.get_living_heads()) + var/mob/M = N.current + if(M) + heads_report += "" + heads_report += "" + heads_report += "" + var/turf/mob_loc = get_turf(M) + heads_report += "" + else + heads_report += "" + heads_report += "" + heads_report += "
[M.real_name][M.client ? "" : " (No Client)"][M.stat == DEAD ? " (DEAD)" : ""]PMFLW[mob_loc.loc]
[N.name]([N.key])Head body destroyed!PM
" + return common_part + heads_report + +/datum/team/revolution/is_gamemode_hero() + return SSticker.mode.name == "revolution" \ No newline at end of file diff --git a/code/game/gamemodes/miniantags/slaughter/slaughter.dm b/code/modules/antagonists/slaughter/slaughter.dm similarity index 100% rename from code/game/gamemodes/miniantags/slaughter/slaughter.dm rename to code/modules/antagonists/slaughter/slaughter.dm diff --git a/code/game/gamemodes/miniantags/slaughter/slaughterevent.dm b/code/modules/antagonists/slaughter/slaughterevent.dm similarity index 100% rename from code/game/gamemodes/miniantags/slaughter/slaughterevent.dm rename to code/modules/antagonists/slaughter/slaughterevent.dm diff --git a/code/game/gamemodes/miniantags/bot_swarm/swarmer.dm b/code/modules/antagonists/swarmer/swarmer.dm similarity index 100% rename from code/game/gamemodes/miniantags/bot_swarm/swarmer.dm rename to code/modules/antagonists/swarmer/swarmer.dm diff --git a/code/game/gamemodes/miniantags/bot_swarm/swarmer_event.dm b/code/modules/antagonists/swarmer/swarmer_event.dm similarity index 96% rename from code/game/gamemodes/miniantags/bot_swarm/swarmer_event.dm rename to code/modules/antagonists/swarmer/swarmer_event.dm index 15ae0a7fe1..37dcbf4221 100644 --- a/code/game/gamemodes/miniantags/bot_swarm/swarmer_event.dm +++ b/code/modules/antagonists/swarmer/swarmer_event.dm @@ -2,7 +2,7 @@ name = "Spawn Swarmer Shell" typepath = /datum/round_event/spawn_swarmer weight = 7 - max_occurrences = 1 //Only once okay fam + max_occurrences = 0 //nononononono earliest_start = 18000 //30 minutes min_players = 15 diff --git a/code/modules/antagonists/traitor/IAA/internal_affairs.dm b/code/modules/antagonists/traitor/IAA/internal_affairs.dm new file mode 100644 index 0000000000..9077b84dcd --- /dev/null +++ b/code/modules/antagonists/traitor/IAA/internal_affairs.dm @@ -0,0 +1,302 @@ +#define PINPOINTER_MINIMUM_RANGE 15 +#define PINPOINTER_EXTRA_RANDOM_RANGE 10 +#define PINPOINTER_PING_TIME 40 +#define PROB_ACTUAL_TRAITOR 20 +#define TRAITOR_AGENT_ROLE "Syndicate External Affairs Agent" + +/datum/antagonist/traitor/internal_affairs + name = "Internal Affairs Agent" + human_datum = /datum/antagonist/traitor/human/internal_affairs + ai_datum = /datum/antagonist/traitor/AI/internal_affairs + antagpanel_category = "IAA" + +/datum/antagonist/traitor/AI/internal_affairs + name = "Internal Affairs Agent" + employer = "Nanotrasen" + special_role = "internal affairs agent" + antagpanel_category = "IAA" + var/syndicate = FALSE + var/last_man_standing = FALSE + var/list/datum/mind/targets_stolen + + +/datum/antagonist/traitor/human/internal_affairs + name = "Internal Affairs Agent" + employer = "Nanotrasen" + special_role = "internal affairs agent" + antagpanel_category = "IAA" + var/syndicate = FALSE + var/last_man_standing = FALSE + var/list/datum/mind/targets_stolen + + +/datum/antagonist/traitor/human/internal_affairs/proc/give_pinpointer() + if(owner && owner.current) + owner.current.apply_status_effect(/datum/status_effect/agent_pinpointer) + +/datum/antagonist/traitor/human/internal_affairs/apply_innate_effects() + .=..() //in case the base is used in future + if(owner && owner.current) + give_pinpointer(owner.current) + +/datum/antagonist/traitor/human/internal_affairs/remove_innate_effects() + .=..() + if(owner && owner.current) + owner.current.remove_status_effect(/datum/status_effect/agent_pinpointer) + +/datum/antagonist/traitor/human/internal_affairs/on_gain() + START_PROCESSING(SSprocessing, src) + .=..() +/datum/antagonist/traitor/human/internal_affairs/on_removal() + STOP_PROCESSING(SSprocessing,src) + .=..() +/datum/antagonist/traitor/human/internal_affairs/process() + iaa_process() + +/datum/antagonist/traitor/AI/internal_affairs/on_gain() + START_PROCESSING(SSprocessing, src) + .=..() +/datum/antagonist/traitor/AI/internal_affairs/on_removal() + STOP_PROCESSING(SSprocessing,src) + .=..() +/datum/antagonist/traitor/AI/internal_affairs/process() + iaa_process() + +/datum/status_effect/agent_pinpointer + id = "agent_pinpointer" + duration = -1 + tick_interval = PINPOINTER_PING_TIME + alert_type = /obj/screen/alert/status_effect/agent_pinpointer + var/minimum_range = PINPOINTER_MINIMUM_RANGE + var/mob/scan_target = null + +/obj/screen/alert/status_effect/agent_pinpointer + name = "Internal Affairs Integrated Pinpointer" + desc = "Even stealthier than a normal implant." + icon = 'icons/obj/device.dmi' + icon_state = "pinon" + +/datum/status_effect/agent_pinpointer/proc/point_to_target() //If we found what we're looking for, show the distance and direction + if(!scan_target) + linked_alert.icon_state = "pinonnull" + return + var/turf/here = get_turf(owner) + var/turf/there = get_turf(scan_target) + if(here.z != there.z) + linked_alert.icon_state = "pinonnull" + return + if(get_dist_euclidian(here,there)<=minimum_range + rand(0, PINPOINTER_EXTRA_RANDOM_RANGE)) + linked_alert.icon_state = "pinondirect" + else + linked_alert.setDir(get_dir(here, there)) + switch(get_dist(here, there)) + if(1 to 8) + linked_alert.icon_state = "pinonclose" + if(9 to 16) + linked_alert.icon_state = "pinonmedium" + if(16 to INFINITY) + linked_alert.icon_state = "pinonfar" + +/datum/status_effect/agent_pinpointer/proc/scan_for_target() + scan_target = null + if(owner) + if(owner.mind) + if(owner.mind.objectives) + for(var/datum/objective/objective_ in owner.mind.objectives) + if(!is_internal_objective(objective_)) + continue + var/datum/objective/assassinate/internal/objective = objective_ + var/mob/current = objective.target.current + if(current&¤t.stat!=DEAD) + scan_target = current + break + +/datum/status_effect/agent_pinpointer/tick() + if(!owner) + qdel(src) + return + scan_for_target() + point_to_target() + + +/proc/is_internal_objective(datum/objective/O) + return (istype(O, /datum/objective/assassinate/internal)||istype(O, /datum/objective/destroy/internal)) + +/datum/antagonist/traitor/proc/replace_escape_objective() + if(!owner||!owner.objectives) + return + for (var/objective_ in owner.objectives) + if(!(istype(objective_, /datum/objective/escape)||istype(objective_, /datum/objective/survive))) + continue + remove_objective(objective_) + + var/datum/objective/martyr/martyr_objective = new + martyr_objective.owner = owner + add_objective(martyr_objective) + +/datum/antagonist/traitor/proc/reinstate_escape_objective() + if(!owner||!owner.objectives) + return + for (var/objective_ in owner.objectives) + if(!istype(objective_, /datum/objective/martyr)) + continue + remove_objective(objective_) + +/datum/antagonist/traitor/human/internal_affairs/reinstate_escape_objective() + ..() + var/datum/objective/escape/escape_objective = new + escape_objective.owner = owner + add_objective(escape_objective) + +/datum/antagonist/traitor/AI/internal_affairs/reinstate_escape_objective() + ..() + var/datum/objective/survive/survive_objective = new + survive_objective.owner = owner + add_objective(survive_objective) + +/datum/antagonist/traitor/proc/steal_targets(datum/mind/victim) + var/datum/antagonist/traitor/human/internal_affairs/this = src //Should only use this if IAA + + if(!owner.current||owner.current.stat==DEAD) + return + to_chat(owner.current, " Target eliminated: [victim.name]") + for(var/objective_ in victim.objectives) + if(istype(objective_, /datum/objective/assassinate/internal)) + var/datum/objective/assassinate/internal/objective = objective_ + if(objective.target==owner) + continue + else if(this.targets_stolen.Find(objective.target) == 0) + var/datum/objective/assassinate/internal/new_objective = new + new_objective.owner = owner + new_objective.target = objective.target + new_objective.update_explanation_text() + add_objective(new_objective) + this.targets_stolen += objective.target + var/status_text = objective.check_completion() ? "neutralised" : "active" + to_chat(owner.current, " New target added to database: [objective.target.name] ([status_text]) ") + else if(istype(objective_, /datum/objective/destroy/internal)) + var/datum/objective/destroy/internal/objective = objective_ + var/datum/objective/destroy/internal/new_objective = new + if(objective.target==owner) + continue + else if(this.targets_stolen.Find(objective.target) == 0) + new_objective.owner = owner + new_objective.target = objective.target + new_objective.update_explanation_text() + add_objective(new_objective) + this.targets_stolen += objective.target + var/status_text = objective.check_completion() ? "neutralised" : "active" + to_chat(owner.current, " New target added to database: [objective.target.name] ([status_text]) ") + this.last_man_standing = TRUE + for(var/objective_ in owner.objectives) + if(!is_internal_objective(objective_)) + continue + var/datum/objective/assassinate/internal/objective = objective_ + if(!objective.check_completion()) + this.last_man_standing = FALSE + return + if(this.last_man_standing) + if(this.syndicate) + to_chat(owner.current," All the loyalist agents are dead, and no more is required of you. Die a glorious death, agent. ") + else + to_chat(owner.current," All the other agents are dead, and you're the last loose end. Stage a Syndicate terrorist attack to cover up for today's events. You no longer have any limits on collateral damage.") + replace_escape_objective(owner) + +/datum/antagonist/traitor/proc/iaa_process() + var/datum/antagonist/traitor/human/internal_affairs/this = src //Should only use this if IAA + if(owner&&owner.current&&owner.current.stat!=DEAD) + for(var/objective_ in owner.objectives) + if(!is_internal_objective(objective_)) + continue + var/datum/objective/assassinate/internal/objective = objective_ + if(!objective.target) + continue + if(objective.check_completion()) + if(objective.stolen) + continue + else + steal_targets(objective.target) + objective.stolen = TRUE + else + if(objective.stolen) + var/fail_msg = "Your sensors tell you that [objective.target.current.real_name], one of the targets you were meant to have killed, pulled one over on you, and is still alive - do the job properly this time! " + if(this.last_man_standing) + if(this.syndicate) + fail_msg += " You no longer have permission to die. " + else + fail_msg += " The truth could still slip out!
Cease any terrorist actions as soon as possible, unneeded property damage or loss of employee life will lead to your contract being terminated.
" + reinstate_escape_objective(owner) + this.last_man_standing = FALSE + to_chat(owner.current, fail_msg) + objective.stolen = FALSE + +/datum/antagonist/traitor/proc/forge_iaa_objectives() + var/datum/antagonist/traitor/human/internal_affairs/this = src //Should only use this if IAA + if(SSticker.mode.target_list.len && SSticker.mode.target_list[owner]) // Is a double agent + + // Assassinate + var/datum/mind/target_mind = SSticker.mode.target_list[owner] + if(issilicon(target_mind.current)) + var/datum/objective/destroy/internal/destroy_objective = new + destroy_objective.owner = owner + destroy_objective.target = target_mind + destroy_objective.update_explanation_text() + else + var/datum/objective/assassinate/internal/kill_objective = new + kill_objective.owner = owner + kill_objective.target = target_mind + kill_objective.update_explanation_text() + add_objective(kill_objective) + + //Optional traitor objective + if(prob(PROB_ACTUAL_TRAITOR)) + employer = "The Syndicate" + owner.special_role = TRAITOR_AGENT_ROLE + special_role = TRAITOR_AGENT_ROLE + this.syndicate = TRUE + forge_single_objective() + + else + ..() // Give them standard objectives. + return + +/datum/antagonist/traitor/human/internal_affairs/forge_traitor_objectives() + forge_iaa_objectives() + var/datum/objective/escape/escape_objective = new + escape_objective.owner = owner + add_objective(escape_objective) + +/datum/antagonist/traitor/AI/internal_affairs/forge_traitor_objectives() + forge_iaa_objectives() + var/datum/objective/survive/survive_objective = new + survive_objective.owner = owner + add_objective(survive_objective) + +/datum/antagonist/traitor/proc/greet_iaa() + var/datum/antagonist/traitor/human/internal_affairs/this = src //Should only use this if IAA + var/crime = pick("distribution of contraband" , "unauthorized erotic action on duty", "embezzlement", "piloting under the influence", "dereliction of duty", "syndicate collaboration", "mutiny", "multiple homicides", "corporate espionage", "recieving bribes", "malpractice", "worship of prohbited life forms", "possession of profane texts", "murder", "arson", "insulting their manager", "grand theft", "conspiracy", "attempting to unionize", "vandalism", "gross incompetence") + + to_chat(owner.current, "You are the [special_role].") + if(this.syndicate) + to_chat(owner.current, "Your target has been framed for [crime], and you have been tasked with eliminating them to prevent them defending themselves in court.") + to_chat(owner.current, "Any damage you cause will be a further embarrassment to Nanotrasen, so you have no limits on collateral damage.") + to_chat(owner.current, " You have been provided with a standard uplink to accomplish your task. ") + else + to_chat(owner.current, "Your target is suspected of [crime], and you have been tasked with eliminating them by any means necessary to avoid a costly and embarrassing public trial.") + to_chat(owner.current, "While you have a license to kill, unneeded property damage or loss of employee life will lead to your contract being terminated.") + to_chat(owner.current, "For the sake of plausible deniability, you have been equipped with an array of captured Syndicate weaponry available via uplink.") + + to_chat(owner.current, "Finally, watch your back. Your target has friends in high places, and intel suggests someone may have taken out a contract of their own to protect them.") + owner.announce_objectives() + +/datum/antagonist/traitor/AI/internal_affairs/greet() + greet_iaa() + +/datum/antagonist/traitor/human/internal_affairs/greet() + greet_iaa() + + +#undef PROB_ACTUAL_TRAITOR +#undef PINPOINTER_EXTRA_RANDOM_RANGE +#undef PINPOINTER_MINIMUM_RANGE +#undef PINPOINTER_PING_TIME diff --git a/code/modules/antagonists/traitor/datum_traitor.dm b/code/modules/antagonists/traitor/datum_traitor.dm new file mode 100644 index 0000000000..6c55563810 --- /dev/null +++ b/code/modules/antagonists/traitor/datum_traitor.dm @@ -0,0 +1,350 @@ +/datum/antagonist/traitor + name = "Traitor" + roundend_category = "traitors" + antagpanel_category = "Traitor" + job_rank = ROLE_TRAITOR + var/should_specialise = TRUE //do we split into AI and human, set to true on inital assignment only + var/ai_datum = /datum/antagonist/traitor/AI + var/human_datum = /datum/antagonist/traitor/human + var/special_role = "traitor" + var/employer = "The Syndicate" + var/give_objectives = TRUE + var/should_give_codewords = TRUE + + + +/datum/antagonist/traitor/human + show_in_antagpanel = FALSE + should_specialise = FALSE + var/should_equip = TRUE + + +/datum/antagonist/traitor/AI + show_in_antagpanel = FALSE + should_specialise = FALSE + +/datum/antagonist/traitor/specialization(datum/mind/new_owner) + if(should_specialise) + if(new_owner.current && isAI(new_owner.current)) + return new ai_datum() + else + return new human_datum() + else + return ..() + +/datum/antagonist/traitor/on_gain() + SSticker.mode.traitors += owner + owner.special_role = special_role + if(give_objectives) + forge_traitor_objectives() + finalize_traitor() + ..() + +/datum/antagonist/traitor/apply_innate_effects() + if(owner.assigned_role == "Clown") + var/mob/living/carbon/human/traitor_mob = owner.current + if(traitor_mob && istype(traitor_mob)) + if(!silent) + to_chat(traitor_mob, "Your training has allowed you to overcome your clownish nature, allowing you to wield weapons without harming yourself.") + traitor_mob.dna.remove_mutation(CLOWNMUT) + +/datum/antagonist/traitor/remove_innate_effects() + if(owner.assigned_role == "Clown") + var/mob/living/carbon/human/traitor_mob = owner.current + if(traitor_mob && istype(traitor_mob)) + traitor_mob.dna.add_mutation(CLOWNMUT) + +/datum/antagonist/traitor/on_removal() + SSticker.mode.traitors -= owner + for(var/O in objectives) + owner.objectives -= O + objectives = list() + if(!silent && owner.current) + to_chat(owner.current," You are no longer the [special_role]! ") + owner.special_role = null + ..() + +/datum/antagonist/traitor/AI/on_removal() + if(owner.current && isAI(owner.current)) + var/mob/living/silicon/ai/A = owner.current + A.set_zeroth_law("") + A.verbs -= /mob/living/silicon/ai/proc/choose_modules + A.malf_picker.remove_malf_verbs(A) + qdel(A.malf_picker) + ..() + +/datum/antagonist/traitor/proc/add_objective(var/datum/objective/O) + owner.objectives += O + objectives += O + +/datum/antagonist/traitor/proc/remove_objective(var/datum/objective/O) + owner.objectives -= O + objectives -= O + +/datum/antagonist/traitor/proc/forge_traitor_objectives() + return + +/datum/antagonist/traitor/human/forge_traitor_objectives() + var/is_hijacker = prob(10) + var/martyr_chance = prob(20) + var/objective_count = is_hijacker //Hijacking counts towards number of objectives + if(!SSticker.mode.exchange_blue && SSticker.mode.traitors.len >= 8) //Set up an exchange if there are enough traitors + if(!SSticker.mode.exchange_red) + SSticker.mode.exchange_red = owner + else + SSticker.mode.exchange_blue = owner + assign_exchange_role(SSticker.mode.exchange_red) + assign_exchange_role(SSticker.mode.exchange_blue) + objective_count += 1 //Exchange counts towards number of objectives + var/toa = CONFIG_GET(number/traitor_objectives_amount) + for(var/i = objective_count, i < toa, i++) + forge_single_objective() + + if(is_hijacker && objective_count <= toa) //Don't assign hijack if it would exceed the number of objectives set in config.traitor_objectives_amount + if (!(locate(/datum/objective/hijack) in owner.objectives)) + var/datum/objective/hijack/hijack_objective = new + hijack_objective.owner = owner + add_objective(hijack_objective) + return + + + var/martyr_compatibility = 1 //You can't succeed in stealing if you're dead. + for(var/datum/objective/O in owner.objectives) + if(!O.martyr_compatible) + martyr_compatibility = 0 + break + + if(martyr_compatibility && martyr_chance) + var/datum/objective/martyr/martyr_objective = new + martyr_objective.owner = owner + add_objective(martyr_objective) + return + + else + if(!(locate(/datum/objective/escape) in owner.objectives)) + var/datum/objective/escape/escape_objective = new + escape_objective.owner = owner + add_objective(escape_objective) + return + +/datum/antagonist/traitor/AI/forge_traitor_objectives() + var/objective_count = 0 + + if(prob(30)) + objective_count += forge_single_objective() + + for(var/i = objective_count, i < CONFIG_GET(number/traitor_objectives_amount), i++) + var/datum/objective/assassinate/kill_objective = new + kill_objective.owner = owner + kill_objective.find_target() + add_objective(kill_objective) + + var/datum/objective/survive/exist/exist_objective = new + exist_objective.owner = owner + add_objective(exist_objective) +/datum/antagonist/traitor/proc/forge_single_objective() + return 0 +/datum/antagonist/traitor/human/forge_single_objective() //Returns how many objectives are added + .=1 + if(prob(50)) + var/list/active_ais = active_ais() + if(active_ais.len && prob(100/GLOB.joined_player_list.len)) + var/datum/objective/destroy/destroy_objective = new + destroy_objective.owner = owner + destroy_objective.find_target() + add_objective(destroy_objective) + else if(prob(30)) + var/datum/objective/maroon/maroon_objective = new + maroon_objective.owner = owner + maroon_objective.find_target() + add_objective(maroon_objective) + else + var/datum/objective/assassinate/kill_objective = new + kill_objective.owner = owner + kill_objective.find_target() + add_objective(kill_objective) + else + if(prob(15) && !(locate(/datum/objective/download in owner.objectives))) + var/datum/objective/download/download_objective = new + download_objective.owner = owner + download_objective.gen_amount_goal() + add_objective(download_objective) + else + var/datum/objective/steal/steal_objective = new + steal_objective.owner = owner + steal_objective.find_target() + add_objective(steal_objective) + +/datum/antagonist/traitor/AI/forge_single_objective() + .=1 + var/special_pick = rand(1,4) + switch(special_pick) + if(1) + var/datum/objective/block/block_objective = new + block_objective.owner = owner + add_objective(block_objective) + if(2) + var/datum/objective/purge/purge_objective = new + purge_objective.owner = owner + add_objective(purge_objective) + if(3) + var/datum/objective/robot_army/robot_objective = new + robot_objective.owner = owner + add_objective(robot_objective) + if(4) //Protect and strand a target + var/datum/objective/protect/yandere_one = new + yandere_one.owner = owner + add_objective(yandere_one) + yandere_one.find_target() + var/datum/objective/maroon/yandere_two = new + yandere_two.owner = owner + yandere_two.target = yandere_one.target + yandere_two.update_explanation_text() // normally called in find_target() + add_objective(yandere_two) + .=2 + +/datum/antagonist/traitor/greet() + to_chat(owner.current, "You are the [owner.special_role].") + owner.announce_objectives() + if(should_give_codewords) + give_codewords() + +/datum/antagonist/traitor/proc/finalize_traitor() + SSticker.mode.update_traitor_icons_added(owner) + return + +/datum/antagonist/traitor/AI/finalize_traitor() + ..() + add_law_zero() + owner.current.playsound_local(get_turf(owner.current), 'sound/ambience/antag/malf.ogg', 100, FALSE, pressure_affected = FALSE) + owner.current.grant_language(/datum/language/codespeak) + +/datum/antagonist/traitor/human/finalize_traitor() + ..() + if(should_equip) + equip(silent) + owner.current.playsound_local(get_turf(owner.current), 'sound/ambience/antag/tatoralert.ogg', 100, FALSE, pressure_affected = FALSE) + +/datum/antagonist/traitor/proc/give_codewords() + if(!owner.current) + return + var/mob/traitor_mob=owner.current + + to_chat(traitor_mob, "The Syndicate provided you with the following information on how to identify their agents:") + to_chat(traitor_mob, "Code Phrase: [GLOB.syndicate_code_phrase]") + to_chat(traitor_mob, "Code Response: [GLOB.syndicate_code_response]") + + antag_memory += "Code Phrase: [GLOB.syndicate_code_phrase]
" + antag_memory += "Code Response: [GLOB.syndicate_code_response]
" + + to_chat(traitor_mob, "Use the code words in the order provided, during regular conversation, to identify other agents. Proceed with caution, however, as everyone is a potential foe.") + +/datum/antagonist/traitor/AI/proc/add_law_zero() + var/mob/living/silicon/ai/killer = owner.current + if(!killer || !istype(killer)) + return + var/law = "Accomplish your objectives at all costs." + var/law_borg = "Accomplish your AI's objectives at all costs." + killer.set_zeroth_law(law, law_borg) + killer.set_syndie_radio() + to_chat(killer, "Your radio has been upgraded! Use :t to speak on an encrypted channel with Syndicate Agents!") + killer.add_malf_picker() + +/datum/antagonist/traitor/proc/equip(var/silent = FALSE) + return + +/datum/antagonist/traitor/human/equip(var/silent = FALSE) + owner.equip_traitor(employer, silent, src) + +/datum/antagonist/traitor/human/proc/assign_exchange_role() + //set faction + var/faction = "red" + if(owner == SSticker.mode.exchange_blue) + faction = "blue" + + //Assign objectives + var/datum/objective/steal/exchange/exchange_objective = new + exchange_objective.set_faction(faction,((faction == "red") ? SSticker.mode.exchange_blue : SSticker.mode.exchange_red)) + exchange_objective.owner = owner + add_objective(exchange_objective) + + if(prob(20)) + var/datum/objective/steal/exchange/backstab/backstab_objective = new + backstab_objective.set_faction(faction) + backstab_objective.owner = owner + add_objective(backstab_objective) + + //Spawn and equip documents + var/mob/living/carbon/human/mob = owner.current + + var/obj/item/folder/syndicate/folder + if(owner == SSticker.mode.exchange_red) + folder = new/obj/item/folder/syndicate/red(mob.loc) + else + folder = new/obj/item/folder/syndicate/blue(mob.loc) + + var/list/slots = list ( + "backpack" = slot_in_backpack, + "left pocket" = slot_l_store, + "right pocket" = slot_r_store + ) + + var/where = "At your feet" + var/equipped_slot = mob.equip_in_one_of_slots(folder, slots) + if (equipped_slot) + where = "In your [equipped_slot]" + to_chat(mob, "

[where] is a folder containing secret documents that another Syndicate group wants. We have set up a meeting with one of their agents on station to make an exchange. Exercise extreme caution as they cannot be trusted and may be hostile.
") + +//TODO Collate +/datum/antagonist/traitor/roundend_report() + var/list/result = list() + + var/traitorwin = TRUE + + result += printplayer(owner) + + var/TC_uses = 0 + var/uplink_true = FALSE + var/purchases = "" + var/datum/uplink_purchase_log/H = GLOB.uplink_purchase_logs_by_key[owner.key] + if(H) + TC_uses = H.total_spent + uplink_true = TRUE + purchases += H.generate_render(FALSE) + + var/objectives_text = "" + if(objectives.len)//If the traitor had no objectives, don't need to process this. + var/count = 1 + for(var/datum/objective/objective in objectives) + if(objective.check_completion()) + objectives_text += "
Objective #[count]: [objective.explanation_text] Success!" + else + objectives_text += "
Objective #[count]: [objective.explanation_text] Fail." + traitorwin = FALSE + count++ + + if(uplink_true) + var/uplink_text = "(used [TC_uses] TC) [purchases]" + if(TC_uses==0 && traitorwin) + var/static/icon/badass = icon('icons/badass.dmi', "badass") + uplink_text += "[icon2html(badass, world)]" + result += uplink_text + + result += objectives_text + + var/special_role_text = lowertext(name) + + if(traitorwin) + result += "The [special_role_text] was successful!" + else + result += "The [special_role_text] has failed!" + SEND_SOUND(owner.current, 'sound/ambience/ambifailure.ogg') + + return result.Join("
") + +/datum/antagonist/traitor/roundend_report_footer() + return "
The code phrases were: [GLOB.syndicate_code_phrase]
\ + The code responses were: [GLOB.syndicate_code_response]
" + +/datum/antagonist/traitor/is_gamemode_hero() + return SSticker.mode.name == "traitor" \ No newline at end of file diff --git a/code/game/gamemodes/malfunction/Malf_Modules.dm b/code/modules/antagonists/traitor/equipment/Malf_Modules.dm similarity index 99% rename from code/game/gamemodes/malfunction/Malf_Modules.dm rename to code/modules/antagonists/traitor/equipment/Malf_Modules.dm index 8962476491..46891b420d 100644 --- a/code/game/gamemodes/malfunction/Malf_Modules.dm +++ b/code/modules/antagonists/traitor/equipment/Malf_Modules.dm @@ -505,7 +505,7 @@ GLOBAL_LIST_INIT(blacklisted_malf_machines, typecacheof(list( for(var/obj/machinery/firealarm/F in GLOB.machines) if(!is_station_level(F.z)) continue - F.emagged = TRUE + F.obj_flags |= EMAGGED to_chat(owner, "All thermal sensors on the station have been disabled. Fire alerts will no longer be recognized.") owner.playsound_local(owner, 'sound/machines/terminal_off.ogg', 50, 0) @@ -532,7 +532,7 @@ GLOBAL_LIST_INIT(blacklisted_malf_machines, typecacheof(list( for(var/obj/machinery/airalarm/AA in GLOB.machines) if(!is_station_level(AA.z)) continue - AA.emagged = TRUE + AA.obj_flags |= EMAGGED to_chat(owner, "All air alarm safeties on the station have been overriden. Air alarms may now use the Flood environmental mode.") owner.playsound_local(owner, 'sound/machines/terminal_off.ogg', 50, 0) diff --git a/code/game/gamemodes/wizard/artefact.dm b/code/modules/antagonists/wizard/equipment/artefact.dm similarity index 96% rename from code/game/gamemodes/wizard/artefact.dm rename to code/modules/antagonists/wizard/equipment/artefact.dm index 94ecac2b79..279834223a 100644 --- a/code/game/gamemodes/wizard/artefact.dm +++ b/code/modules/antagonists/wizard/equipment/artefact.dm @@ -1,411 +1,411 @@ - -//Apprenticeship contract - moved to antag_spawner.dm - -///////////////////////////Veil Render////////////////////// - -/obj/item/veilrender - name = "veil render" - desc = "A wicked curved blade of alien origin, recovered from the ruins of a vast city." - icon = 'icons/obj/wizard.dmi' - icon_state = "render" - item_state = "knife" - lefthand_file = 'icons/mob/inhands/equipment/kitchen_lefthand.dmi' - righthand_file = 'icons/mob/inhands/equipment/kitchen_righthand.dmi' - force = 15 - throwforce = 10 - w_class = WEIGHT_CLASS_NORMAL - hitsound = 'sound/weapons/bladeslice.ogg' - var/charges = 1 - var/spawn_type = /obj/singularity/wizard - var/spawn_amt = 1 - var/activate_descriptor = "reality" - var/rend_desc = "You should run now." - var/spawn_fast = 0 //if 1, ignores checking for mobs on loc before spawning - -/obj/item/veilrender/attack_self(mob/user) - if(charges > 0) - new /obj/effect/rend(get_turf(user), spawn_type, spawn_amt, rend_desc, spawn_fast) - charges-- - user.visible_message("[src] hums with power as [user] deals a blow to [activate_descriptor] itself!") - else - to_chat(user, "The unearthly energies that powered the blade are now dormant.") - -/obj/effect/rend - name = "tear in the fabric of reality" - desc = "You should run now." - icon = 'icons/effects/effects.dmi' - icon_state = "rift" - density = TRUE - anchored = TRUE - var/spawn_path = /mob/living/simple_animal/cow //defaulty cows to prevent unintentional narsies - var/spawn_amt_left = 20 - var/spawn_fast = 0 - -/obj/effect/rend/New(loc, var/spawn_type, var/spawn_amt, var/desc, var/spawn_fast) - src.spawn_path = spawn_type - src.spawn_amt_left = spawn_amt - src.desc = desc - src.spawn_fast = spawn_fast - START_PROCESSING(SSobj, src) - return - -/obj/effect/rend/process() - if(!spawn_fast) - if(locate(/mob) in loc) - return - new spawn_path(loc) - spawn_amt_left-- - if(spawn_amt_left <= 0) - qdel(src) - -/obj/effect/rend/attackby(obj/item/I, mob/user, params) - if(istype(I, /obj/item/nullrod)) - user.visible_message("[user] seals \the [src] with \the [I].") - qdel(src) - return - else - return ..() - -/obj/effect/rend/singularity_pull() - return - -/obj/effect/rend/singularity_pull() - return - -/obj/item/veilrender/vealrender - name = "veal render" - desc = "A wicked curved blade of alien origin, recovered from the ruins of a vast farm." - spawn_type = /mob/living/simple_animal/cow - spawn_amt = 20 - activate_descriptor = "hunger" - rend_desc = "Reverberates with the sound of ten thousand moos." - -/obj/item/veilrender/honkrender - name = "honk render" - desc = "A wicked curved blade of alien origin, recovered from the ruins of a vast circus." - spawn_type = /mob/living/simple_animal/hostile/retaliate/clown - spawn_amt = 10 - activate_descriptor = "depression" - rend_desc = "Gently wafting with the sounds of endless laughter." - icon_state = "clownrender" - -////TEAR IN REALITY - -/obj/singularity/wizard - name = "tear in the fabric of reality" - desc = "This isn't right." - icon = 'icons/effects/224x224.dmi' - icon_state = "reality" - pixel_x = -96 - pixel_y = -96 - grav_pull = 6 - consume_range = 3 - current_size = STAGE_FOUR - allowed_size = STAGE_FOUR - -/obj/singularity/wizard/process() - move() - eat() - return -/////////////////////////////////////////Scrying/////////////////// - -/obj/item/scrying - name = "scrying orb" - desc = "An incandescent orb of otherworldly energy, staring into it gives you vision beyond mortal means." - icon = 'icons/obj/projectiles.dmi' - icon_state ="bluespace" - throw_speed = 3 - throw_range = 7 - throwforce = 15 - damtype = BURN - force = 15 - hitsound = 'sound/items/welder2.ogg' - - var/xray_granted = FALSE - -/obj/item/scrying/equipped(mob/user) - if(!xray_granted && ishuman(user)) - var/mob/living/carbon/human/H = user - if(!(H.dna.check_mutation(XRAY))) - H.dna.add_mutation(XRAY) - xray_granted = TRUE - . = ..() - -/obj/item/scrying/attack_self(mob/user) - to_chat(user, "You can see...everything!") - visible_message("[user] stares into [src], their eyes glazing over.") - user.ghostize(1) - -/////////////////////////////////////////Necromantic Stone/////////////////// - -/obj/item/device/necromantic_stone - name = "necromantic stone" - desc = "A shard capable of resurrecting humans as skeleton thralls." - icon = 'icons/obj/wizard.dmi' - icon_state = "necrostone" - item_state = "electronic" - lefthand_file = 'icons/mob/inhands/misc/devices_lefthand.dmi' - righthand_file = 'icons/mob/inhands/misc/devices_righthand.dmi' - w_class = WEIGHT_CLASS_TINY - var/list/spooky_scaries = list() - var/unlimited = 0 - -/obj/item/device/necromantic_stone/unlimited - unlimited = 1 - -/obj/item/device/necromantic_stone/attack(mob/living/carbon/human/M, mob/living/carbon/human/user) - if(!istype(M)) - return ..() - - if(!istype(user) || !user.canUseTopic(M,1)) - return - - if(M.stat != DEAD) - to_chat(user, "This artifact can only affect the dead!") - return - - if(!M.mind || !M.client) - to_chat(user, "There is no soul connected to this body...") - return - - check_spooky()//clean out/refresh the list - if(spooky_scaries.len >= 3 && !unlimited) - to_chat(user, "This artifact can only affect three undead at a time!") - return - - M.set_species(/datum/species/skeleton, icon_update=0) - M.revive(full_heal = 1, admin_revive = 1) - spooky_scaries |= M - to_chat(M, "You have been revived by [user.real_name]!") - to_chat(M, "[user.p_they(TRUE)] [user.p_are()] your master now, assist them even if it costs you your new life!") - - equip_roman_skeleton(M) - - desc = "A shard capable of resurrecting humans as skeleton thralls[unlimited ? "." : ", [spooky_scaries.len]/3 active thralls."]" - -/obj/item/device/necromantic_stone/proc/check_spooky() - if(unlimited) //no point, the list isn't used. - return - - for(var/X in spooky_scaries) - if(!ishuman(X)) - spooky_scaries.Remove(X) - continue - var/mob/living/carbon/human/H = X - if(H.stat == DEAD) - H.dust(TRUE) - spooky_scaries.Remove(X) - continue - listclearnulls(spooky_scaries) - -//Funny gimmick, skeletons always seem to wear roman/ancient armour -/obj/item/device/necromantic_stone/proc/equip_roman_skeleton(mob/living/carbon/human/H) - for(var/obj/item/I in H) - H.dropItemToGround(I) - - var/hat = pick(/obj/item/clothing/head/helmet/roman, /obj/item/clothing/head/helmet/roman/legionaire) - H.equip_to_slot_or_del(new hat(H), slot_head) - H.equip_to_slot_or_del(new /obj/item/clothing/under/roman(H), slot_w_uniform) - H.equip_to_slot_or_del(new /obj/item/clothing/shoes/roman(H), slot_shoes) - H.put_in_hands(new /obj/item/shield/riot/roman(H), TRUE) - H.put_in_hands(new /obj/item/claymore(H), TRUE) - H.equip_to_slot_or_del(new /obj/item/twohanded/spear(H), slot_back) - - -/obj/item/voodoo - name = "wicker doll" - desc = "Something creepy about it." - icon = 'icons/obj/wizard.dmi' - icon_state = "voodoo" - item_state = "electronic" - lefthand_file = 'icons/mob/inhands/misc/devices_lefthand.dmi' - righthand_file = 'icons/mob/inhands/misc/devices_righthand.dmi' - var/mob/living/carbon/human/target = null - var/list/mob/living/carbon/human/possible = list() - var/obj/item/voodoo_link = null - var/cooldown_time = 30 //3s - var/cooldown = 0 - max_integrity = 10 - resistance_flags = FLAMMABLE - -/obj/item/voodoo/attackby(obj/item/I, mob/user, params) - if(target && cooldown < world.time) - if(I.is_hot()) - to_chat(target, "You suddenly feel very hot") - target.bodytemperature += 50 - GiveHint(target) - else if(is_pointed(I)) - to_chat(target, "You feel a stabbing pain in [parse_zone(user.zone_selected)]!") - target.Knockdown(40) - GiveHint(target) - else if(istype(I, /obj/item/bikehorn)) - to_chat(target, "HONK") - SEND_SOUND(target, 'sound/items/airhorn.ogg') - target.adjustEarDamage(0,3) - GiveHint(target) - cooldown = world.time +cooldown_time - return - - if(!voodoo_link) - if(I.loc == user && istype(I) && I.w_class <= WEIGHT_CLASS_SMALL) - if (user.transferItemToLoc(I,src)) - voodoo_link = I - to_chat(user, "You attach [I] to the doll.") - update_targets() - -/obj/item/voodoo/check_eye(mob/user) - if(loc != user) - user.reset_perspective(null) - user.unset_machine() - -/obj/item/voodoo/attack_self(mob/user) - if(!target && possible.len) - target = input(user, "Select your victim!", "Voodoo") as null|anything in possible - return - - if(user.zone_selected == "chest") - if(voodoo_link) - target = null - voodoo_link.forceMove(drop_location()) - to_chat(user, "You remove the [voodoo_link] from the doll.") - voodoo_link = null - update_targets() - return - - if(target && cooldown < world.time) - switch(user.zone_selected) - if("mouth") - var/wgw = sanitize(input(user, "What would you like the victim to say", "Voodoo", null) as text) - target.say(wgw) - log_game("[user][user.key] made [target][target.key] say [wgw] with a voodoo doll.") - if("eyes") - user.set_machine(src) - user.reset_perspective(target) - spawn(100) - user.reset_perspective(null) - user.unset_machine() - if("r_leg","l_leg") - to_chat(user, "You move the doll's legs around.") - var/turf/T = get_step(target,pick(GLOB.cardinals)) - target.Move(T) - if("r_arm","l_arm") - target.click_random_mob() - GiveHint(target) - if("head") - to_chat(user, "You smack the doll's head with your hand.") - target.Dizzy(10) - to_chat(target, "You suddenly feel as if your head was hit with a hammer!") - GiveHint(target,user) - cooldown = world.time + cooldown_time - -/obj/item/voodoo/proc/update_targets() - possible = list() - if(!voodoo_link) - return - var/list/prints = voodoo_link.return_fingerprints() - if(!length(prints)) - return FALSE - for(var/mob/living/carbon/human/H in GLOB.alive_mob_list) - if(prints[md5(H.dna.uni_identity)]) - possible |= H - -/obj/item/voodoo/proc/GiveHint(mob/victim,force=0) - if(prob(50) || force) - var/way = dir2text(get_dir(victim,get_turf(src))) - to_chat(victim, "You feel a dark presence from [way]") - if(prob(20) || force) - var/area/A = get_area(src) - to_chat(victim, "You feel a dark presence from [A.name]") - -/obj/item/voodoo/suicide_act(mob/living/carbon/user) - user.visible_message("[user] links the voodoo doll to themself and sits on it, infinitely crushing themself! It looks like [user.p_theyre()] trying to commit suicide!") - user.gib() - return(BRUTELOSS) - -/obj/item/voodoo/fire_act(exposed_temperature, exposed_volume) - if(target) - target.adjust_fire_stacks(20) - target.IgniteMob() - GiveHint(target,1) - return ..() - -//Provides a decent heal, need to pump every 6 seconds -/obj/item/organ/heart/cursed/wizard - pump_delay = 60 - heal_brute = 25 - heal_burn = 25 - heal_oxy = 25 - -//Warp Whistle: Provides uncontrolled long distance teleportation. - -/obj/item/warpwhistle - name = "warp whistle" - desc = "One toot on this whistle will send you to a far away land!" - icon = 'icons/obj/wizard.dmi' - icon_state = "whistle" - var/on_cooldown = 0 //0: usable, 1: in use, 2: on cooldown - var/mob/living/carbon/last_user - -/obj/item/warpwhistle/proc/interrupted(mob/living/carbon/user) - if(!user || QDELETED(src) || user.notransform) - on_cooldown = FALSE - return TRUE - return FALSE - -/obj/item/warpwhistle/attack_self(mob/living/carbon/user) - if(!istype(user) || on_cooldown) - return - on_cooldown = TRUE - last_user = user - var/turf/T = get_turf(user) - playsound(T,'sound/magic/warpwhistle.ogg', 200, 1) - user.canmove = 0 - new /obj/effect/temp_visual/tornado(T) - sleep(20) - if(interrupted(user)) - return - user.invisibility = INVISIBILITY_MAXIMUM - user.status_flags |= GODMODE - sleep(20) - if(interrupted(user)) - return - var/breakout = 0 - while(breakout < 50) - var/turf/potential_T = find_safe_turf() - if(T.z != potential_T.z || abs(get_dist_euclidian(potential_T,T)) > 50 - breakout) - user.forceMove(potential_T) - user.canmove = 0 - T = potential_T - break - breakout += 1 - new /obj/effect/temp_visual/tornado(T) - sleep(20) - if(interrupted(user)) - return - user.invisibility = initial(user.invisibility) - user.status_flags &= ~GODMODE - user.canmove = 1 - on_cooldown = 2 - sleep(40) - on_cooldown = 0 - -/obj/item/warpwhistle/Destroy() - if(on_cooldown == 1 && last_user) //Flute got dunked somewhere in the teleport - last_user.invisibility = initial(last_user.invisibility) - last_user.status_flags &= ~GODMODE - last_user.canmove = 1 - return ..() - -/obj/effect/temp_visual/tornado - icon = 'icons/obj/wizard.dmi' - icon_state = "tornado" - name = "tornado" - desc = "This thing sucks!" - layer = FLY_LAYER - randomdir = 0 - duration = 40 - pixel_x = 500 - -/obj/effect/temp_visual/tornado/Initialize() - . = ..() - animate(src, pixel_x = -500, time = 40) + +//Apprenticeship contract - moved to antag_spawner.dm + +///////////////////////////Veil Render////////////////////// + +/obj/item/veilrender + name = "veil render" + desc = "A wicked curved blade of alien origin, recovered from the ruins of a vast city." + icon = 'icons/obj/wizard.dmi' + icon_state = "render" + item_state = "knife" + lefthand_file = 'icons/mob/inhands/equipment/kitchen_lefthand.dmi' + righthand_file = 'icons/mob/inhands/equipment/kitchen_righthand.dmi' + force = 15 + throwforce = 10 + w_class = WEIGHT_CLASS_NORMAL + hitsound = 'sound/weapons/bladeslice.ogg' + var/charges = 1 + var/spawn_type = /obj/singularity/wizard + var/spawn_amt = 1 + var/activate_descriptor = "reality" + var/rend_desc = "You should run now." + var/spawn_fast = 0 //if 1, ignores checking for mobs on loc before spawning + +/obj/item/veilrender/attack_self(mob/user) + if(charges > 0) + new /obj/effect/rend(get_turf(user), spawn_type, spawn_amt, rend_desc, spawn_fast) + charges-- + user.visible_message("[src] hums with power as [user] deals a blow to [activate_descriptor] itself!") + else + to_chat(user, "The unearthly energies that powered the blade are now dormant.") + +/obj/effect/rend + name = "tear in the fabric of reality" + desc = "You should run now." + icon = 'icons/effects/effects.dmi' + icon_state = "rift" + density = TRUE + anchored = TRUE + var/spawn_path = /mob/living/simple_animal/cow //defaulty cows to prevent unintentional narsies + var/spawn_amt_left = 20 + var/spawn_fast = 0 + +/obj/effect/rend/New(loc, var/spawn_type, var/spawn_amt, var/desc, var/spawn_fast) + src.spawn_path = spawn_type + src.spawn_amt_left = spawn_amt + src.desc = desc + src.spawn_fast = spawn_fast + START_PROCESSING(SSobj, src) + return + +/obj/effect/rend/process() + if(!spawn_fast) + if(locate(/mob) in loc) + return + new spawn_path(loc) + spawn_amt_left-- + if(spawn_amt_left <= 0) + qdel(src) + +/obj/effect/rend/attackby(obj/item/I, mob/user, params) + if(istype(I, /obj/item/nullrod)) + user.visible_message("[user] seals \the [src] with \the [I].") + qdel(src) + return + else + return ..() + +/obj/effect/rend/singularity_pull() + return + +/obj/effect/rend/singularity_pull() + return + +/obj/item/veilrender/vealrender + name = "veal render" + desc = "A wicked curved blade of alien origin, recovered from the ruins of a vast farm." + spawn_type = /mob/living/simple_animal/cow + spawn_amt = 20 + activate_descriptor = "hunger" + rend_desc = "Reverberates with the sound of ten thousand moos." + +/obj/item/veilrender/honkrender + name = "honk render" + desc = "A wicked curved blade of alien origin, recovered from the ruins of a vast circus." + spawn_type = /mob/living/simple_animal/hostile/retaliate/clown + spawn_amt = 10 + activate_descriptor = "depression" + rend_desc = "Gently wafting with the sounds of endless laughter." + icon_state = "clownrender" + +////TEAR IN REALITY + +/obj/singularity/wizard + name = "tear in the fabric of reality" + desc = "This isn't right." + icon = 'icons/effects/224x224.dmi' + icon_state = "reality" + pixel_x = -96 + pixel_y = -96 + grav_pull = 6 + consume_range = 3 + current_size = STAGE_FOUR + allowed_size = STAGE_FOUR + +/obj/singularity/wizard/process() + move() + eat() + return +/////////////////////////////////////////Scrying/////////////////// + +/obj/item/scrying + name = "scrying orb" + desc = "An incandescent orb of otherworldly energy, staring into it gives you vision beyond mortal means." + icon = 'icons/obj/projectiles.dmi' + icon_state ="bluespace" + throw_speed = 3 + throw_range = 7 + throwforce = 15 + damtype = BURN + force = 15 + hitsound = 'sound/items/welder2.ogg' + + var/xray_granted = FALSE + +/obj/item/scrying/equipped(mob/user) + if(!xray_granted && ishuman(user)) + var/mob/living/carbon/human/H = user + if(!(H.dna.check_mutation(XRAY))) + H.dna.add_mutation(XRAY) + xray_granted = TRUE + . = ..() + +/obj/item/scrying/attack_self(mob/user) + to_chat(user, "You can see...everything!") + visible_message("[user] stares into [src], their eyes glazing over.") + user.ghostize(1) + +/////////////////////////////////////////Necromantic Stone/////////////////// + +/obj/item/device/necromantic_stone + name = "necromantic stone" + desc = "A shard capable of resurrecting humans as skeleton thralls." + icon = 'icons/obj/wizard.dmi' + icon_state = "necrostone" + item_state = "electronic" + lefthand_file = 'icons/mob/inhands/misc/devices_lefthand.dmi' + righthand_file = 'icons/mob/inhands/misc/devices_righthand.dmi' + w_class = WEIGHT_CLASS_TINY + var/list/spooky_scaries = list() + var/unlimited = 0 + +/obj/item/device/necromantic_stone/unlimited + unlimited = 1 + +/obj/item/device/necromantic_stone/attack(mob/living/carbon/human/M, mob/living/carbon/human/user) + if(!istype(M)) + return ..() + + if(!istype(user) || !user.canUseTopic(M,1)) + return + + if(M.stat != DEAD) + to_chat(user, "This artifact can only affect the dead!") + return + + if(!M.mind || !M.client) + to_chat(user, "There is no soul connected to this body...") + return + + check_spooky()//clean out/refresh the list + if(spooky_scaries.len >= 3 && !unlimited) + to_chat(user, "This artifact can only affect three undead at a time!") + return + + M.set_species(/datum/species/skeleton, icon_update=0) + M.revive(full_heal = 1, admin_revive = 1) + spooky_scaries |= M + to_chat(M, "You have been revived by [user.real_name]!") + to_chat(M, "[user.p_they(TRUE)] [user.p_are()] your master now, assist them even if it costs you your new life!") + + equip_roman_skeleton(M) + + desc = "A shard capable of resurrecting humans as skeleton thralls[unlimited ? "." : ", [spooky_scaries.len]/3 active thralls."]" + +/obj/item/device/necromantic_stone/proc/check_spooky() + if(unlimited) //no point, the list isn't used. + return + + for(var/X in spooky_scaries) + if(!ishuman(X)) + spooky_scaries.Remove(X) + continue + var/mob/living/carbon/human/H = X + if(H.stat == DEAD) + H.dust(TRUE) + spooky_scaries.Remove(X) + continue + listclearnulls(spooky_scaries) + +//Funny gimmick, skeletons always seem to wear roman/ancient armour +/obj/item/device/necromantic_stone/proc/equip_roman_skeleton(mob/living/carbon/human/H) + for(var/obj/item/I in H) + H.dropItemToGround(I) + + var/hat = pick(/obj/item/clothing/head/helmet/roman, /obj/item/clothing/head/helmet/roman/legionaire) + H.equip_to_slot_or_del(new hat(H), slot_head) + H.equip_to_slot_or_del(new /obj/item/clothing/under/roman(H), slot_w_uniform) + H.equip_to_slot_or_del(new /obj/item/clothing/shoes/roman(H), slot_shoes) + H.put_in_hands(new /obj/item/shield/riot/roman(H), TRUE) + H.put_in_hands(new /obj/item/claymore(H), TRUE) + H.equip_to_slot_or_del(new /obj/item/twohanded/spear(H), slot_back) + + +/obj/item/voodoo + name = "wicker doll" + desc = "Something creepy about it." + icon = 'icons/obj/wizard.dmi' + icon_state = "voodoo" + item_state = "electronic" + lefthand_file = 'icons/mob/inhands/misc/devices_lefthand.dmi' + righthand_file = 'icons/mob/inhands/misc/devices_righthand.dmi' + var/mob/living/carbon/human/target = null + var/list/mob/living/carbon/human/possible = list() + var/obj/item/voodoo_link = null + var/cooldown_time = 30 //3s + var/cooldown = 0 + max_integrity = 10 + resistance_flags = FLAMMABLE + +/obj/item/voodoo/attackby(obj/item/I, mob/user, params) + if(target && cooldown < world.time) + if(I.is_hot()) + to_chat(target, "You suddenly feel very hot") + target.bodytemperature += 50 + GiveHint(target) + else if(is_pointed(I)) + to_chat(target, "You feel a stabbing pain in [parse_zone(user.zone_selected)]!") + target.Knockdown(40) + GiveHint(target) + else if(istype(I, /obj/item/bikehorn)) + to_chat(target, "HONK") + SEND_SOUND(target, 'sound/items/airhorn.ogg') + target.adjustEarDamage(0,3) + GiveHint(target) + cooldown = world.time +cooldown_time + return + + if(!voodoo_link) + if(I.loc == user && istype(I) && I.w_class <= WEIGHT_CLASS_SMALL) + if (user.transferItemToLoc(I,src)) + voodoo_link = I + to_chat(user, "You attach [I] to the doll.") + update_targets() + +/obj/item/voodoo/check_eye(mob/user) + if(loc != user) + user.reset_perspective(null) + user.unset_machine() + +/obj/item/voodoo/attack_self(mob/user) + if(!target && possible.len) + target = input(user, "Select your victim!", "Voodoo") as null|anything in possible + return + + if(user.zone_selected == "chest") + if(voodoo_link) + target = null + voodoo_link.forceMove(drop_location()) + to_chat(user, "You remove the [voodoo_link] from the doll.") + voodoo_link = null + update_targets() + return + + if(target && cooldown < world.time) + switch(user.zone_selected) + if("mouth") + var/wgw = sanitize(input(user, "What would you like the victim to say", "Voodoo", null) as text) + target.say(wgw) + log_game("[user][user.key] made [target][target.key] say [wgw] with a voodoo doll.") + if("eyes") + user.set_machine(src) + user.reset_perspective(target) + spawn(100) + user.reset_perspective(null) + user.unset_machine() + if("r_leg","l_leg") + to_chat(user, "You move the doll's legs around.") + var/turf/T = get_step(target,pick(GLOB.cardinals)) + target.Move(T) + if("r_arm","l_arm") + target.click_random_mob() + GiveHint(target) + if("head") + to_chat(user, "You smack the doll's head with your hand.") + target.Dizzy(10) + to_chat(target, "You suddenly feel as if your head was hit with a hammer!") + GiveHint(target,user) + cooldown = world.time + cooldown_time + +/obj/item/voodoo/proc/update_targets() + possible = list() + if(!voodoo_link) + return + var/list/prints = voodoo_link.return_fingerprints() + if(!length(prints)) + return FALSE + for(var/mob/living/carbon/human/H in GLOB.alive_mob_list) + if(prints[md5(H.dna.uni_identity)]) + possible |= H + +/obj/item/voodoo/proc/GiveHint(mob/victim,force=0) + if(prob(50) || force) + var/way = dir2text(get_dir(victim,get_turf(src))) + to_chat(victim, "You feel a dark presence from [way]") + if(prob(20) || force) + var/area/A = get_area(src) + to_chat(victim, "You feel a dark presence from [A.name]") + +/obj/item/voodoo/suicide_act(mob/living/carbon/user) + user.visible_message("[user] links the voodoo doll to themself and sits on it, infinitely crushing themself! It looks like [user.p_theyre()] trying to commit suicide!") + user.gib() + return(BRUTELOSS) + +/obj/item/voodoo/fire_act(exposed_temperature, exposed_volume) + if(target) + target.adjust_fire_stacks(20) + target.IgniteMob() + GiveHint(target,1) + return ..() + +//Provides a decent heal, need to pump every 6 seconds +/obj/item/organ/heart/cursed/wizard + pump_delay = 60 + heal_brute = 25 + heal_burn = 25 + heal_oxy = 25 + +//Warp Whistle: Provides uncontrolled long distance teleportation. + +/obj/item/warpwhistle + name = "warp whistle" + desc = "One toot on this whistle will send you to a far away land!" + icon = 'icons/obj/wizard.dmi' + icon_state = "whistle" + var/on_cooldown = 0 //0: usable, 1: in use, 2: on cooldown + var/mob/living/carbon/last_user + +/obj/item/warpwhistle/proc/interrupted(mob/living/carbon/user) + if(!user || QDELETED(src) || user.notransform) + on_cooldown = FALSE + return TRUE + return FALSE + +/obj/item/warpwhistle/attack_self(mob/living/carbon/user) + if(!istype(user) || on_cooldown) + return + on_cooldown = TRUE + last_user = user + var/turf/T = get_turf(user) + playsound(T,'sound/magic/warpwhistle.ogg', 200, 1) + user.canmove = 0 + new /obj/effect/temp_visual/tornado(T) + sleep(20) + if(interrupted(user)) + return + user.invisibility = INVISIBILITY_MAXIMUM + user.status_flags |= GODMODE + sleep(20) + if(interrupted(user)) + return + var/breakout = 0 + while(breakout < 50) + var/turf/potential_T = find_safe_turf() + if(T.z != potential_T.z || abs(get_dist_euclidian(potential_T,T)) > 50 - breakout) + user.forceMove(potential_T) + user.canmove = 0 + T = potential_T + break + breakout += 1 + new /obj/effect/temp_visual/tornado(T) + sleep(20) + if(interrupted(user)) + return + user.invisibility = initial(user.invisibility) + user.status_flags &= ~GODMODE + user.canmove = 1 + on_cooldown = 2 + sleep(40) + on_cooldown = 0 + +/obj/item/warpwhistle/Destroy() + if(on_cooldown == 1 && last_user) //Flute got dunked somewhere in the teleport + last_user.invisibility = initial(last_user.invisibility) + last_user.status_flags &= ~GODMODE + last_user.canmove = 1 + return ..() + +/obj/effect/temp_visual/tornado + icon = 'icons/obj/wizard.dmi' + icon_state = "tornado" + name = "tornado" + desc = "This thing sucks!" + layer = FLY_LAYER + randomdir = 0 + duration = 40 + pixel_x = 500 + +/obj/effect/temp_visual/tornado/Initialize() + . = ..() + animate(src, pixel_x = -500, time = 40) diff --git a/code/game/gamemodes/wizard/soulstone.dm b/code/modules/antagonists/wizard/equipment/soulstone.dm similarity index 100% rename from code/game/gamemodes/wizard/soulstone.dm rename to code/modules/antagonists/wizard/equipment/soulstone.dm diff --git a/code/game/gamemodes/wizard/spellbook.dm b/code/modules/antagonists/wizard/equipment/spellbook.dm similarity index 97% rename from code/game/gamemodes/wizard/spellbook.dm rename to code/modules/antagonists/wizard/equipment/spellbook.dm index 0ba2aac8b4..c26cb5e65c 100644 --- a/code/game/gamemodes/wizard/spellbook.dm +++ b/code/modules/antagonists/wizard/equipment/spellbook.dm @@ -1,908 +1,908 @@ -/datum/spellbook_entry - var/name = "Entry Name" - - var/spell_type = null - var/desc = "" - var/category = "Offensive" - var/cost = 2 - var/refundable = 1 - var/surplus = -1 // -1 for infinite, not used by anything atm - var/obj/effect/proc_holder/spell/S = null //Since spellbooks can be used by only one person anyway we can track the actual spell - var/buy_word = "Learn" - var/limit //used to prevent a spellbook_entry from being bought more than X times with one wizard spellbook - var/list/no_coexistance_typecache //Used so you can't have specific spells together - -/datum/spellbook_entry/New() - ..() - no_coexistance_typecache = typecacheof(no_coexistance_typecache) - -/datum/spellbook_entry/proc/IsAvailible() // For config prefs / gamemode restrictions - these are round applied - return 1 - -/datum/spellbook_entry/proc/CanBuy(mob/living/carbon/human/user,obj/item/spellbook/book) // Specific circumstances - if(book.uses= aspell.level_max) - to_chat(user, "This spell cannot be improved further.") - return 0 - else - aspell.name = initial(aspell.name) - aspell.spell_level++ - aspell.charge_max = round(initial(aspell.charge_max) - aspell.spell_level * (initial(aspell.charge_max) - aspell.cooldown_min)/ aspell.level_max) - if(aspell.charge_max < aspell.charge_counter) - aspell.charge_counter = aspell.charge_max - switch(aspell.spell_level) - if(1) - to_chat(user, "You have improved [aspell.name] into Efficient [aspell.name].") - aspell.name = "Efficient [aspell.name]" - if(2) - to_chat(user, "You have further improved [aspell.name] into Quickened [aspell.name].") - aspell.name = "Quickened [aspell.name]" - if(3) - to_chat(user, "You have further improved [aspell.name] into Free [aspell.name].") - aspell.name = "Free [aspell.name]" - if(4) - to_chat(user, "You have further improved [aspell.name] into Instant [aspell.name].") - aspell.name = "Instant [aspell.name]" - if(aspell.spell_level >= aspell.level_max) - to_chat(user, "This spell cannot be strengthened any further.") - SSblackbox.record_feedback("nested tally", "wizard_spell_improved", 1, list("[name]", "[aspell.spell_level]")) - return 1 - //No same spell found - just learn it - SSblackbox.record_feedback("tally", "wizard_spell_learned", 1, name) - user.mind.AddSpell(S) - to_chat(user, "You have learned [S.name].") - return 1 - -/datum/spellbook_entry/proc/CanRefund(mob/living/carbon/human/user,obj/item/spellbook/book) - if(!refundable) - return 0 - if(!S) - S = new spell_type() - for(var/obj/effect/proc_holder/spell/aspell in user.mind.spell_list) - if(initial(S.name) == initial(aspell.name)) - return 1 - return 0 - -/datum/spellbook_entry/proc/Refund(mob/living/carbon/human/user,obj/item/spellbook/book) //return point value or -1 for failure - var/area/wizard_station/A = locate() in GLOB.sortedAreas - if(!(user in A.contents)) - to_chat(user, "You can only refund spells at the wizard lair") - return -1 - if(!S) - S = new spell_type() - var/spell_levels = 0 - for(var/obj/effect/proc_holder/spell/aspell in user.mind.spell_list) - if(initial(S.name) == initial(aspell.name)) - spell_levels = aspell.spell_level - user.mind.spell_list.Remove(aspell) - qdel(S) - return cost * (spell_levels+1) - return -1 -/datum/spellbook_entry/proc/GetInfo() - if(!S) - S = new spell_type() - var/dat ="" - dat += "[initial(S.name)]" - if(S.charge_type == "recharge") - dat += " Cooldown:[S.charge_max/10]" - dat += " Cost:[cost]
" - dat += "[S.desc][desc]
" - dat += "[S.clothes_req?"Needs wizard garb":"Can be cast without wizard garb"]
" - return dat - -/datum/spellbook_entry/fireball - name = "Fireball" - spell_type = /obj/effect/proc_holder/spell/aimed/fireball - -/datum/spellbook_entry/rod_form - name = "Rod Form" - spell_type = /obj/effect/proc_holder/spell/targeted/rod_form - -/datum/spellbook_entry/magicm - name = "Magic Missile" - spell_type = /obj/effect/proc_holder/spell/targeted/projectile/magic_missile - category = "Defensive" - -/datum/spellbook_entry/disintegrate - name = "Disintegrate" - spell_type = /obj/effect/proc_holder/spell/targeted/touch/disintegrate - -/datum/spellbook_entry/disabletech - name = "Disable Tech" - spell_type = /obj/effect/proc_holder/spell/targeted/emplosion/disable_tech - category = "Defensive" - cost = 1 - -/datum/spellbook_entry/repulse - name = "Repulse" - spell_type = /obj/effect/proc_holder/spell/aoe_turf/repulse - category = "Defensive" - -/datum/spellbook_entry/lightningPacket - name = "Lightning bolt! Lightning bolt!" - spell_type = /obj/effect/proc_holder/spell/targeted/conjure_item/spellpacket - category = "Defensive" - -/datum/spellbook_entry/timestop - name = "Time Stop" - spell_type = /obj/effect/proc_holder/spell/aoe_turf/conjure/timestop - category = "Defensive" - -/datum/spellbook_entry/smoke - name = "Smoke" - spell_type = /obj/effect/proc_holder/spell/targeted/smoke - category = "Defensive" - cost = 1 - -/datum/spellbook_entry/blind - name = "Blind" - spell_type = /obj/effect/proc_holder/spell/targeted/trigger/blind - cost = 1 - -/datum/spellbook_entry/mindswap - name = "Mindswap" - spell_type = /obj/effect/proc_holder/spell/targeted/mind_transfer - category = "Mobility" - -/datum/spellbook_entry/forcewall - name = "Force Wall" - spell_type = /obj/effect/proc_holder/spell/targeted/forcewall - category = "Defensive" - cost = 1 - -/datum/spellbook_entry/blink - name = "Blink" - spell_type = /obj/effect/proc_holder/spell/targeted/turf_teleport/blink - category = "Mobility" - -/datum/spellbook_entry/teleport - name = "Teleport" - spell_type = /obj/effect/proc_holder/spell/targeted/area_teleport/teleport - category = "Mobility" - -/datum/spellbook_entry/mutate - name = "Mutate" - spell_type = /obj/effect/proc_holder/spell/targeted/genetic/mutate - -/datum/spellbook_entry/jaunt - name = "Ethereal Jaunt" - spell_type = /obj/effect/proc_holder/spell/targeted/ethereal_jaunt - category = "Mobility" - -/datum/spellbook_entry/knock - name = "Knock" - spell_type = /obj/effect/proc_holder/spell/aoe_turf/knock - category = "Mobility" - cost = 1 - -/datum/spellbook_entry/fleshtostone - name = "Flesh to Stone" - spell_type = /obj/effect/proc_holder/spell/targeted/touch/flesh_to_stone - -/datum/spellbook_entry/summonitem - name = "Summon Item" - spell_type = /obj/effect/proc_holder/spell/targeted/summonitem - category = "Assistance" - cost = 1 - -/datum/spellbook_entry/lichdom - name = "Bind Soul" - spell_type = /obj/effect/proc_holder/spell/targeted/lichdom - category = "Defensive" - -/datum/spellbook_entry/teslablast - name = "Tesla Blast" - spell_type = /obj/effect/proc_holder/spell/targeted/tesla - -/datum/spellbook_entry/lightningbolt - name = "Lightning Bolt" - spell_type = /obj/effect/proc_holder/spell/aimed/lightningbolt - cost = 3 - -/datum/spellbook_entry/lightningbolt/Buy(mob/living/carbon/human/user,obj/item/spellbook/book) //return 1 on success - . = ..() - user.flags_2 |= TESLA_IGNORE_2 - -/datum/spellbook_entry/infinite_guns - name = "Lesser Summon Guns" - spell_type = /obj/effect/proc_holder/spell/targeted/infinite_guns/gun - cost = 3 - no_coexistance_typecache = /obj/effect/proc_holder/spell/targeted/infinite_guns/arcane_barrage - -/datum/spellbook_entry/arcane_barrage - name = "Arcane Barrage" - spell_type = /obj/effect/proc_holder/spell/targeted/infinite_guns/arcane_barrage - cost = 3 - no_coexistance_typecache = /obj/effect/proc_holder/spell/targeted/infinite_guns/gun - -/datum/spellbook_entry/barnyard - name = "Barnyard Curse" - spell_type = /obj/effect/proc_holder/spell/targeted/barnyardcurse - -/datum/spellbook_entry/charge - name = "Charge" - spell_type = /obj/effect/proc_holder/spell/targeted/charge - category = "Assistance" - cost = 1 - -/datum/spellbook_entry/shapeshift - name = "Wild Shapeshift" - spell_type = /obj/effect/proc_holder/spell/targeted/shapeshift - category = "Assistance" - cost = 1 - -/datum/spellbook_entry/spacetime_dist - name = "Spacetime Distortion" - spell_type = /obj/effect/proc_holder/spell/spacetime_dist - category = "Defensive" - cost = 1 - -/datum/spellbook_entry/the_traps - name = "The Traps!" - spell_type = /obj/effect/proc_holder/spell/aoe_turf/conjure/the_traps - category = "Defensive" - cost = 1 - - -/datum/spellbook_entry/item - name = "Buy Item" - refundable = 0 - buy_word = "Summon" - var/item_path= null - - -/datum/spellbook_entry/item/Buy(mob/living/carbon/human/user,obj/item/spellbook/book) - new item_path(get_turf(user)) - SSblackbox.record_feedback("tally", "wizard_spell_learned", 1, name) - return 1 - -/datum/spellbook_entry/item/GetInfo() - var/dat ="" - dat += "[name]" - dat += " Cost:[cost]
" - dat += "[desc]
" - if(surplus>=0) - dat += "[surplus] left.
" - return dat - -/datum/spellbook_entry/item/staffchange - name = "Staff of Change" - desc = "An artefact that spits bolts of coruscating energy which cause the target's very form to reshape itself." - item_path = /obj/item/gun/magic/staff/change - -/datum/spellbook_entry/item/staffanimation - name = "Staff of Animation" - desc = "An arcane staff capable of shooting bolts of eldritch energy which cause inanimate objects to come to life. This magic doesn't affect machines." - item_path = /obj/item/gun/magic/staff/animate - category = "Assistance" - -/datum/spellbook_entry/item/staffchaos - name = "Staff of Chaos" - desc = "A caprious tool that can fire all sorts of magic without any rhyme or reason. Using it on people you care about is not recommended." - item_path = /obj/item/gun/magic/staff/chaos - -/datum/spellbook_entry/item/spellblade - name = "Spellblade" - desc = "A sword capable of firing blasts of energy which rip targets limb from limb." - item_path = /obj/item/gun/magic/staff/spellblade - -/datum/spellbook_entry/item/staffdoor - name = "Staff of Door Creation" - desc = "A particular staff that can mold solid metal into ornate doors. Useful for getting around in the absence of other transportation. Does not work on glass." - item_path = /obj/item/gun/magic/staff/door - cost = 1 - category = "Mobility" - -/datum/spellbook_entry/item/staffhealing - name = "Staff of Healing" - desc = "An altruistic staff that can heal the lame and raise the dead." - item_path = /obj/item/gun/magic/staff/healing - cost = 1 - category = "Defensive" - -/datum/spellbook_entry/item/scryingorb - name = "Scrying Orb" - desc = "An incandescent orb of crackling energy, using it will allow you to ghost while alive, allowing you to spy upon the station with ease. In addition, buying it will permanently grant you x-ray vision." - item_path = /obj/item/scrying - category = "Defensive" - -/datum/spellbook_entry/item/soulstones - name = "Six Soul Stone Shards and the spell Artificer" - desc = "Soul Stone Shards are ancient tools capable of capturing and harnessing the spirits of the dead and dying. The spell Artificer allows you to create arcane machines for the captured souls to pilot." - item_path = /obj/item/storage/belt/soulstone/full - category = "Assistance" - -/datum/spellbook_entry/item/soulstones/Buy(mob/living/carbon/human/user,obj/item/spellbook/book) - . =..() - if(.) - user.mind.AddSpell(new /obj/effect/proc_holder/spell/aoe_turf/conjure/construct(null)) - return . - -/datum/spellbook_entry/item/necrostone - name = "A Necromantic Stone" - desc = "A Necromantic stone is able to resurrect three dead individuals as skeletal thralls for you to command." - item_path = /obj/item/device/necromantic_stone - category = "Assistance" - -/datum/spellbook_entry/item/wands - name = "Wand Assortment" - desc = "A collection of wands that allow for a wide variety of utility. Wands have a limited number of charges, so be conservative in use. Comes in a handy belt." - item_path = /obj/item/storage/belt/wands/full - category = "Defensive" - -/datum/spellbook_entry/item/armor - name = "Mastercrafted Armor Set" - desc = "An artefact suit of armor that allows you to cast spells while providing more protection against attacks and the void of space." - item_path = /obj/item/clothing/suit/space/hardsuit/wizard - category = "Defensive" - -/datum/spellbook_entry/item/armor/Buy(mob/living/carbon/human/user,obj/item/spellbook/book) - . = ..() - if(.) - new /obj/item/clothing/shoes/sandal/magic(get_turf(user)) //In case they've lost them. - new /obj/item/clothing/gloves/color/purple(get_turf(user))//To complete the outfit - -/datum/spellbook_entry/item/contract - name = "Contract of Apprenticeship" - desc = "A magical contract binding an apprentice wizard to your service, using it will summon them to your side." - item_path = /obj/item/antag_spawner/contract - category = "Assistance" - -/datum/spellbook_entry/item/guardian - name = "Guardian Deck" - desc = "A deck of guardian tarot cards, capable of binding a personal guardian to your body. There are multiple types of guardian available, but all of them will transfer some amount of damage to you. \ - It would be wise to avoid buying these with anything capable of causing you to swap bodies with others." - item_path = /obj/item/guardiancreator/choose/wizard - category = "Assistance" - -/datum/spellbook_entry/item/guardian/Buy(mob/living/carbon/human/user,obj/item/spellbook/book) - . = ..() - if(.) - new /obj/item/paper/guides/antag/guardian/wizard(get_turf(user)) - -/datum/spellbook_entry/item/bloodbottle - name = "Bottle of Blood" - desc = "A bottle of magically infused blood, the smell of which will attract extradimensional beings when broken. Be careful though, the kinds of creatures summoned by blood magic are indiscriminate in their killing, and you yourself may become a victim." - item_path = /obj/item/antag_spawner/slaughter_demon - limit = 3 - category = "Assistance" - -/datum/spellbook_entry/item/hugbottle - name = "Bottle of Tickles" - desc = "A bottle of magically infused fun, the smell of which will \ - attract adorable extradimensional beings when broken. These beings \ - are similar to slaughter demons, but they do not permamently kill \ - their victims, instead putting them in an extradimensional hugspace, \ - to be released on the demon's death. Chaotic, but not ultimately \ - damaging. The crew's reaction to the other hand could be very \ - destructive." - item_path = /obj/item/antag_spawner/slaughter_demon/laughter - cost = 1 //non-destructive; it's just a jape, sibling! - limit = 3 - category = "Assistance" - -/datum/spellbook_entry/item/mjolnir - name = "Mjolnir" - desc = "A mighty hammer on loan from Thor, God of Thunder. It crackles with barely contained power." - item_path = /obj/item/twohanded/mjollnir - -/datum/spellbook_entry/item/singularity_hammer - name = "Singularity Hammer" - desc = "A hammer that creates an intensely powerful field of gravity where it strikes, pulling everything nearby to the point of impact." - item_path = /obj/item/twohanded/singularityhammer - -/datum/spellbook_entry/item/battlemage - name = "Battlemage Armour" - desc = "An ensorcelled suit of armour, protected by a powerful shield. The shield can completly negate sixteen attacks before being permanently depleted." - item_path = /obj/item/clothing/suit/space/hardsuit/shielded/wizard - limit = 1 - category = "Defensive" - -/datum/spellbook_entry/item/battlemage_charge - name = "Battlemage Armour Charges" - desc = "A powerful defensive rune, it will grant eight additional charges to a suit of battlemage armour." - item_path = /obj/item/wizard_armour_charge - category = "Defensive" - cost = 1 - -/datum/spellbook_entry/item/warpwhistle - name = "Warp Whistle" - desc = "A strange whistle that will transport you to a distant safe place on the station. There is a window of vulnerability at the beginning of every use." - item_path = /obj/item/warpwhistle - category = "Mobility" - cost = 1 - -/datum/spellbook_entry/summon - name = "Summon Stuff" - category = "Rituals" - refundable = 0 - buy_word = "Cast" - var/active = 0 - -/datum/spellbook_entry/summon/CanBuy(mob/living/carbon/human/user,obj/item/spellbook/book) - return ..() && !active - -/datum/spellbook_entry/summon/GetInfo() - var/dat ="" - dat += "[name]" - if(cost>0) - dat += " Cost:[cost]
" - else - dat += " No Cost
" - dat += "[desc]
" - if(active) - dat += "Already cast!
" - return dat - -/datum/spellbook_entry/summon/ghosts - name = "Summon Ghosts" - desc = "Spook the crew out by making them see dead people. Be warned, ghosts are capricious and occasionally vindicative, and some will use their incredibly minor abilties to frustrate you." - cost = 0 - -/datum/spellbook_entry/summon/ghosts/IsAvailible() - if(!SSticker.mode) - return FALSE - else - return TRUE - -/datum/spellbook_entry/summon/ghosts/Buy(mob/living/carbon/human/user, obj/item/spellbook/book) - SSblackbox.record_feedback("tally", "wizard_spell_learned", 1, name) - new /datum/round_event/wizard/ghost() - active = TRUE - to_chat(user, "You have cast summon ghosts!") - playsound(get_turf(user), 'sound/effects/ghost2.ogg', 50, 1) - return TRUE - -/datum/spellbook_entry/summon/guns - name = "Summon Guns" - desc = "Nothing could possibly go wrong with arming a crew of lunatics just itching for an excuse to kill you. Just be careful not to stand still too long!" - -/datum/spellbook_entry/summon/guns/IsAvailible() - if(!SSticker.mode) // In case spellbook is placed on map - return 0 - return !CONFIG_GET(flag/no_summon_guns) - -/datum/spellbook_entry/summon/guns/Buy(mob/living/carbon/human/user,obj/item/spellbook/book) - SSblackbox.record_feedback("tally", "wizard_spell_learned", 1, name) - rightandwrong(SUMMON_GUNS, user, 25) - active = 1 - playsound(get_turf(user), 'sound/magic/castsummon.ogg', 50, 1) - to_chat(user, "You have cast summon guns!") - return 1 - -/datum/spellbook_entry/summon/magic - name = "Summon Magic" - desc = "Share the wonders of magic with the crew and show them why they aren't to be trusted with it at the same time." - -/datum/spellbook_entry/summon/magic/IsAvailible() - if(!SSticker.mode) // In case spellbook is placed on map - return 0 - return !CONFIG_GET(flag/no_summon_magic) - -/datum/spellbook_entry/summon/magic/Buy(mob/living/carbon/human/user,obj/item/spellbook/book) - SSblackbox.record_feedback("tally", "wizard_spell_learned", 1, name) - rightandwrong(SUMMON_MAGIC, user, 25) - active = 1 - playsound(get_turf(user), 'sound/magic/castsummon.ogg', 50, 1) - to_chat(user, "You have cast summon magic!") - return 1 - -/datum/spellbook_entry/summon/events - name = "Summon Events" - desc = "Give Murphy's law a little push and replace all events with special wizard ones that will confound and confuse everyone. Multiple castings increase the rate of these events." - var/times = 0 - -/datum/spellbook_entry/summon/events/IsAvailible() - if(!SSticker.mode) // In case spellbook is placed on map - return 0 - return !CONFIG_GET(flag/no_summon_events) - -/datum/spellbook_entry/summon/events/Buy(mob/living/carbon/human/user,obj/item/spellbook/book) - SSblackbox.record_feedback("tally", "wizard_spell_learned", 1, name) - summonevents() - times++ - playsound(get_turf(user), 'sound/magic/castsummon.ogg', 50, 1) - to_chat(user, "You have cast summon events.") - return 1 - -/datum/spellbook_entry/summon/events/GetInfo() - . = ..() - if(times>0) - . += "You cast it [times] times.
" - return . - -/obj/item/spellbook - name = "spell book" - desc = "An unearthly tome that glows with power." - icon = 'icons/obj/library.dmi' - icon_state ="book" - throw_speed = 2 - throw_range = 5 - w_class = WEIGHT_CLASS_TINY - persistence_replacement = /obj/item/spellbook/oneuse/random - var/uses = 10 - var/temp = null - var/tab = null - var/mob/living/carbon/human/owner - var/list/datum/spellbook_entry/entries = list() - var/list/categories = list() - -/obj/item/spellbook/examine(mob/user) - ..() - if(owner) - to_chat(user, "There is a small signature on the front cover: \"[owner]\".") - else - to_chat(user, "It appears to have no author.") - -/obj/item/spellbook/Initialize() - . = ..() - prepare_spells() - -/obj/item/spellbook/proc/prepare_spells() - var/entry_types = subtypesof(/datum/spellbook_entry) - /datum/spellbook_entry/item - /datum/spellbook_entry/summon - for(var/T in entry_types) - var/datum/spellbook_entry/E = new T - if(E.IsAvailible()) - entries |= E - categories |= E.category - else - qdel(E) - tab = categories[1] - -/obj/item/spellbook/attackby(obj/item/O, mob/user, params) - if(istype(O, /obj/item/antag_spawner/contract)) - var/obj/item/antag_spawner/contract/contract = O - if(contract.used) - to_chat(user, "The contract has been used, you can't get your points back now!") - else - to_chat(user, "You feed the contract back into the spellbook, refunding your points.") - uses++ - for(var/datum/spellbook_entry/item/contract/CT in entries) - if(!isnull(CT.limit)) - CT.limit++ - qdel(O) - else if(istype(O, /obj/item/antag_spawner/slaughter_demon)) - to_chat(user, "On second thought, maybe summoning a demon is a bad idea. You refund your points.") - uses++ - for(var/datum/spellbook_entry/item/bloodbottle/BB in entries) - if(!isnull(BB.limit)) - BB.limit++ - qdel(O) - -/obj/item/spellbook/proc/GetCategoryHeader(category) - var/dat = "" - switch(category) - if("Offensive") - dat += "Spells and items geared towards debilitating and destroying.

" - dat += "Items are not bound to you and can be stolen. Additionaly they cannot typically be returned once purchased.
" - dat += "For spells: the number after the spell name is the cooldown time.
" - dat += "You can reduce this number by spending more points on the spell.
" - if("Defensive") - dat += "Spells and items geared towards improving your survivabilty or reducing foes' ability to attack.

" - dat += "Items are not bound to you and can be stolen. Additionaly they cannot typically be returned once purchased.
" - dat += "For spells: the number after the spell name is the cooldown time.
" - dat += "You can reduce this number by spending more points on the spell.
" - if("Mobility") - dat += "Spells and items geared towards improving your ability to move. It is a good idea to take at least one.

" - dat += "Items are not bound to you and can be stolen. Additionaly they cannot typically be returned once purchased.
" - dat += "For spells: the number after the spell name is the cooldown time.
" - dat += "You can reduce this number by spending more points on the spell.
" - if("Assistance") - dat += "Spells and items geared towards bringing in outside forces to aid you or improving upon your other items and abilties.

" - dat += "Items are not bound to you and can be stolen. Additionaly they cannot typically be returned once purchased.
" - dat += "For spells: the number after the spell name is the cooldown time.
" - dat += "You can reduce this number by spending more points on the spell.
" - if("Challenges") - dat += "The Wizard Federation typically has hard limits on the potency and number of spells brought to the station based on risk.
" - dat += "Arming the station against you will increases the risk, but will grant you one more charge for your spellbook.
" - if("Rituals") - dat += "These powerful spells change the very fabric of reality. Not always in your favour.
" - return dat - -/obj/item/spellbook/proc/wrap(content) - var/dat = "" - dat +="Spellbook" - dat += {" - - - - "} - dat += {"[content]"} - return dat - -/obj/item/spellbook/attack_self(mob/user) - if(!owner) - to_chat(user, "You bind the spellbook to yourself.") - owner = user - return - if(user != owner) - to_chat(user, "The [name] does not recognize you as its owner and refuses to open!") - return - user.set_machine(src) - var/dat = "" - - dat += "" - - var/datum/spellbook_entry/E - for(var/i=1,i<=entries.len,i++) - var/spell_info = "" - E = entries[i] - spell_info += E.GetInfo() - if(E.CanBuy(user,src)) - spell_info+= "[E.buy_word]
" - else - spell_info+= "Can't [E.buy_word]
" - if(E.CanRefund(user,src)) - spell_info+= "Refund
" - spell_info += "
" - if(cat_dat[E.category]) - cat_dat[E.category] += spell_info - - for(var/category in categories) - dat += "
" - dat += GetCategoryHeader(category) - dat += cat_dat[category] - dat += "
" - - user << browse(wrap(dat), "window=spellbook;size=700x500") - onclose(user, "spellbook") - return - -/obj/item/spellbook/Topic(href, href_list) - ..() - var/mob/living/carbon/human/H = usr - - if(H.stat || H.restrained()) - return - if(!ishuman(H)) - return 1 - - if(H.mind.special_role == "apprentice") - temp = "If you got caught sneaking a peek from your teacher's spellbook, you'd likely be expelled from the Wizard Academy. Better not." - return - - var/datum/spellbook_entry/E = null - if(loc == H || (in_range(src, H) && isturf(loc))) - H.set_machine(src) - if(href_list["buy"]) - E = entries[text2num(href_list["buy"])] - if(E && E.CanBuy(H,src)) - if(E.Buy(H,src)) - if(E.limit) - E.limit-- - uses -= E.cost - else if(href_list["refund"]) - E = entries[text2num(href_list["refund"])] - if(E && E.refundable) - var/result = E.Refund(H,src) - if(result > 0) - if(!isnull(E.limit)) - E.limit += result - uses += result - else if(href_list["page"]) - tab = sanitize(href_list["page"]) - attack_self(H) - return - -//Single Use Spellbooks// - -/obj/item/spellbook/oneuse - var/spell = /obj/effect/proc_holder/spell/targeted/projectile/magic_missile //just a placeholder to avoid runtimes if someone spawned the generic - var/spellname = "sandbox" - var/used = 0 - name = "spellbook of " - uses = 1 - desc = "This template spellbook was never meant for the eyes of man..." - persistence_replacement = null - -/obj/item/spellbook/oneuse/prepare_spells() - name += spellname - -/obj/item/spellbook/oneuse/attack_self(mob/user) - var/obj/effect/proc_holder/spell/S = new spell - for(var/obj/effect/proc_holder/spell/knownspell in user.mind.spell_list) - if(knownspell.type == S.type) - if(user.mind) - if(iswizard(user)) - to_chat(user,"You're already far more versed in this spell than this flimsy how-to book can provide.") - else - to_chat(user,"You've already read this one.") - return - if(used) - recoil(user) - else - user.mind.AddSpell(S) - to_chat(user,"You rapidly read through the arcane book. Suddenly you realize you understand [spellname]!") - user.log_message("learned the spell [spellname] ([S]).", INDIVIDUAL_ATTACK_LOG) - onlearned(user) - -/obj/item/spellbook/oneuse/proc/recoil(mob/user) - user.visible_message("[src] glows in a black light!") - -/obj/item/spellbook/oneuse/proc/onlearned(mob/user) - used = 1 - user.visible_message("[src] glows dark for a second!") - -/obj/item/spellbook/oneuse/attackby() - return - -/obj/item/spellbook/oneuse/fireball - spell = /obj/effect/proc_holder/spell/aimed/fireball - spellname = "fireball" - icon_state ="bookfireball" - desc = "This book feels warm to the touch." - -/obj/item/spellbook/oneuse/fireball/recoil(mob/user) - ..() - explosion(user.loc, -1, 0, 2, 3, 0, flame_range = 2) - qdel(src) - -/obj/item/spellbook/oneuse/smoke - spell = /obj/effect/proc_holder/spell/targeted/smoke - spellname = "smoke" - icon_state ="booksmoke" - desc = "This book is overflowing with the dank arts." - -/obj/item/spellbook/oneuse/smoke/lesser //Chaplain smoke book - spell = /obj/effect/proc_holder/spell/targeted/smoke/lesser - -/obj/item/spellbook/oneuse/smoke/recoil(mob/user) - ..() - to_chat(user,"Your stomach rumbles...") - if(user.nutrition) - user.nutrition -= 200 - if(user.nutrition <= 0) - user.nutrition = 0 - - -/obj/item/spellbook/oneuse/blind - spell = /obj/effect/proc_holder/spell/targeted/trigger/blind - spellname = "blind" - icon_state ="bookblind" - desc = "This book looks blurry, no matter how you look at it." - -/obj/item/spellbook/oneuse/blind/recoil(mob/user) - ..() - to_chat(user,"You go blind!") - user.blind_eyes(10) - -/obj/item/spellbook/oneuse/mindswap - spell = /obj/effect/proc_holder/spell/targeted/mind_transfer - spellname = "mindswap" - icon_state ="bookmindswap" - desc = "This book's cover is pristine, though its pages look ragged and torn." - var/mob/stored_swap = null //Used in used book recoils to store an identity for mindswaps - -/obj/item/spellbook/oneuse/mindswap/onlearned() - spellname = pick("fireball","smoke","blind","forcewall","knock","barnyard","charge") - icon_state = "book[spellname]" - name = "spellbook of [spellname]" //Note, desc doesn't change by design - ..() - -/obj/item/spellbook/oneuse/mindswap/recoil(mob/user) - ..() - if(stored_swap in GLOB.dead_mob_list) - stored_swap = null - if(!stored_swap) - stored_swap = user - to_chat(user,"For a moment you feel like you don't even know who you are anymore.") - return - if(stored_swap == user) - to_chat(user,"You stare at the book some more, but there doesn't seem to be anything else to learn...") - return - - var/obj/effect/proc_holder/spell/targeted/mind_transfer/swapper = new - swapper.cast(user, stored_swap, 1) - - to_chat(stored_swap,"You're suddenly somewhere else... and someone else?!") - to_chat(user,"Suddenly you're staring at [src] again... where are you, who are you?!") - stored_swap = null - -/obj/item/spellbook/oneuse/forcewall - spell = /obj/effect/proc_holder/spell/targeted/forcewall - spellname = "forcewall" - icon_state ="bookforcewall" - desc = "This book has a dedication to mimes everywhere inside the front cover." - -/obj/item/spellbook/oneuse/forcewall/recoil(mob/living/user) - ..() - to_chat(user,"You suddenly feel very solid!") - user.Stun(40, ignore_canstun = TRUE) - user.petrify(30) - -/obj/item/spellbook/oneuse/knock - spell = /obj/effect/proc_holder/spell/aoe_turf/knock - spellname = "knock" - icon_state ="bookknock" - desc = "This book is hard to hold closed properly." - -/obj/item/spellbook/oneuse/knock/recoil(mob/living/user) - ..() - to_chat(user,"You're knocked down!") - user.Knockdown(40) - -/obj/item/spellbook/oneuse/barnyard - spell = /obj/effect/proc_holder/spell/targeted/barnyardcurse - spellname = "barnyard" - icon_state ="bookhorses" - desc = "This book is more horse than your mind has room for." - -/obj/item/spellbook/oneuse/barnyard/recoil(mob/living/carbon/user) - if(ishuman(user)) - to_chat(user,"HOR-SIE HAS RISEN") - var/obj/item/clothing/mask/horsehead/magichead = new /obj/item/clothing/mask/horsehead - magichead.flags_1 |= NODROP_1 //curses! - magichead.flags_inv &= ~HIDEFACE //so you can still see their face - magichead.voicechange = 1 //NEEEEIIGHH - if(!user.dropItemToGround(user.wear_mask)) - qdel(user.wear_mask) - user.equip_to_slot_if_possible(magichead, slot_wear_mask, 1, 1) - qdel(src) - else - to_chat(user,"I say thee neigh") //It still lives here - -/obj/item/spellbook/oneuse/charge - spell = /obj/effect/proc_holder/spell/targeted/charge - spellname = "charging" - icon_state ="bookcharge" - desc = "This book is made of 100% post-consumer wizard." - -/obj/item/spellbook/oneuse/charge/recoil(mob/user) - ..() - to_chat(user,"[src] suddenly feels very warm!") - empulse(src, 1, 1) - -/obj/item/spellbook/oneuse/summonitem - spell = /obj/effect/proc_holder/spell/targeted/summonitem - spellname = "instant summons" - icon_state ="booksummons" - desc = "This book is bright and garish, very hard to miss." - -/obj/item/spellbook/oneuse/summonitem/recoil(mob/user) - ..() - to_chat(user,"[src] suddenly vanishes!") - qdel(src) - -/obj/item/spellbook/oneuse/random - icon_state = "random_book" - -/obj/item/spellbook/oneuse/random/Initialize() - ..() - var/static/banned_spells = list(/obj/item/spellbook/oneuse/mimery_blockade, /obj/item/spellbook/oneuse/mimery_guns) - var/real_type = pick(subtypesof(/obj/item/spellbook/oneuse) - banned_spells) - new real_type(loc) - return INITIALIZE_HINT_QDEL - -/obj/item/spellbook/oneuse/sacredflame - spell = /obj/effect/proc_holder/spell/targeted/sacred_flame - spellname = "sacred flame" - icon_state ="booksacredflame" - desc = "Become one with the flames that burn within... and invite others to do so as well." +/datum/spellbook_entry + var/name = "Entry Name" + + var/spell_type = null + var/desc = "" + var/category = "Offensive" + var/cost = 2 + var/refundable = 1 + var/surplus = -1 // -1 for infinite, not used by anything atm + var/obj/effect/proc_holder/spell/S = null //Since spellbooks can be used by only one person anyway we can track the actual spell + var/buy_word = "Learn" + var/limit //used to prevent a spellbook_entry from being bought more than X times with one wizard spellbook + var/list/no_coexistance_typecache //Used so you can't have specific spells together + +/datum/spellbook_entry/New() + ..() + no_coexistance_typecache = typecacheof(no_coexistance_typecache) + +/datum/spellbook_entry/proc/IsAvailible() // For config prefs / gamemode restrictions - these are round applied + return 1 + +/datum/spellbook_entry/proc/CanBuy(mob/living/carbon/human/user,obj/item/spellbook/book) // Specific circumstances + if(book.uses= aspell.level_max) + to_chat(user, "This spell cannot be improved further.") + return 0 + else + aspell.name = initial(aspell.name) + aspell.spell_level++ + aspell.charge_max = round(initial(aspell.charge_max) - aspell.spell_level * (initial(aspell.charge_max) - aspell.cooldown_min)/ aspell.level_max) + if(aspell.charge_max < aspell.charge_counter) + aspell.charge_counter = aspell.charge_max + switch(aspell.spell_level) + if(1) + to_chat(user, "You have improved [aspell.name] into Efficient [aspell.name].") + aspell.name = "Efficient [aspell.name]" + if(2) + to_chat(user, "You have further improved [aspell.name] into Quickened [aspell.name].") + aspell.name = "Quickened [aspell.name]" + if(3) + to_chat(user, "You have further improved [aspell.name] into Free [aspell.name].") + aspell.name = "Free [aspell.name]" + if(4) + to_chat(user, "You have further improved [aspell.name] into Instant [aspell.name].") + aspell.name = "Instant [aspell.name]" + if(aspell.spell_level >= aspell.level_max) + to_chat(user, "This spell cannot be strengthened any further.") + SSblackbox.record_feedback("nested tally", "wizard_spell_improved", 1, list("[name]", "[aspell.spell_level]")) + return 1 + //No same spell found - just learn it + SSblackbox.record_feedback("tally", "wizard_spell_learned", 1, name) + user.mind.AddSpell(S) + to_chat(user, "You have learned [S.name].") + return 1 + +/datum/spellbook_entry/proc/CanRefund(mob/living/carbon/human/user,obj/item/spellbook/book) + if(!refundable) + return 0 + if(!S) + S = new spell_type() + for(var/obj/effect/proc_holder/spell/aspell in user.mind.spell_list) + if(initial(S.name) == initial(aspell.name)) + return 1 + return 0 + +/datum/spellbook_entry/proc/Refund(mob/living/carbon/human/user,obj/item/spellbook/book) //return point value or -1 for failure + var/area/wizard_station/A = locate() in GLOB.sortedAreas + if(!(user in A.contents)) + to_chat(user, "You can only refund spells at the wizard lair") + return -1 + if(!S) + S = new spell_type() + var/spell_levels = 0 + for(var/obj/effect/proc_holder/spell/aspell in user.mind.spell_list) + if(initial(S.name) == initial(aspell.name)) + spell_levels = aspell.spell_level + user.mind.spell_list.Remove(aspell) + qdel(S) + return cost * (spell_levels+1) + return -1 +/datum/spellbook_entry/proc/GetInfo() + if(!S) + S = new spell_type() + var/dat ="" + dat += "[initial(S.name)]" + if(S.charge_type == "recharge") + dat += " Cooldown:[S.charge_max/10]" + dat += " Cost:[cost]
" + dat += "[S.desc][desc]
" + dat += "[S.clothes_req?"Needs wizard garb":"Can be cast without wizard garb"]
" + return dat + +/datum/spellbook_entry/fireball + name = "Fireball" + spell_type = /obj/effect/proc_holder/spell/aimed/fireball + +/datum/spellbook_entry/rod_form + name = "Rod Form" + spell_type = /obj/effect/proc_holder/spell/targeted/rod_form + +/datum/spellbook_entry/magicm + name = "Magic Missile" + spell_type = /obj/effect/proc_holder/spell/targeted/projectile/magic_missile + category = "Defensive" + +/datum/spellbook_entry/disintegrate + name = "Disintegrate" + spell_type = /obj/effect/proc_holder/spell/targeted/touch/disintegrate + +/datum/spellbook_entry/disabletech + name = "Disable Tech" + spell_type = /obj/effect/proc_holder/spell/targeted/emplosion/disable_tech + category = "Defensive" + cost = 1 + +/datum/spellbook_entry/repulse + name = "Repulse" + spell_type = /obj/effect/proc_holder/spell/aoe_turf/repulse + category = "Defensive" + +/datum/spellbook_entry/lightningPacket + name = "Lightning bolt! Lightning bolt!" + spell_type = /obj/effect/proc_holder/spell/targeted/conjure_item/spellpacket + category = "Defensive" + +/datum/spellbook_entry/timestop + name = "Time Stop" + spell_type = /obj/effect/proc_holder/spell/aoe_turf/conjure/timestop + category = "Defensive" + +/datum/spellbook_entry/smoke + name = "Smoke" + spell_type = /obj/effect/proc_holder/spell/targeted/smoke + category = "Defensive" + cost = 1 + +/datum/spellbook_entry/blind + name = "Blind" + spell_type = /obj/effect/proc_holder/spell/targeted/trigger/blind + cost = 1 + +/datum/spellbook_entry/mindswap + name = "Mindswap" + spell_type = /obj/effect/proc_holder/spell/targeted/mind_transfer + category = "Mobility" + +/datum/spellbook_entry/forcewall + name = "Force Wall" + spell_type = /obj/effect/proc_holder/spell/targeted/forcewall + category = "Defensive" + cost = 1 + +/datum/spellbook_entry/blink + name = "Blink" + spell_type = /obj/effect/proc_holder/spell/targeted/turf_teleport/blink + category = "Mobility" + +/datum/spellbook_entry/teleport + name = "Teleport" + spell_type = /obj/effect/proc_holder/spell/targeted/area_teleport/teleport + category = "Mobility" + +/datum/spellbook_entry/mutate + name = "Mutate" + spell_type = /obj/effect/proc_holder/spell/targeted/genetic/mutate + +/datum/spellbook_entry/jaunt + name = "Ethereal Jaunt" + spell_type = /obj/effect/proc_holder/spell/targeted/ethereal_jaunt + category = "Mobility" + +/datum/spellbook_entry/knock + name = "Knock" + spell_type = /obj/effect/proc_holder/spell/aoe_turf/knock + category = "Mobility" + cost = 1 + +/datum/spellbook_entry/fleshtostone + name = "Flesh to Stone" + spell_type = /obj/effect/proc_holder/spell/targeted/touch/flesh_to_stone + +/datum/spellbook_entry/summonitem + name = "Summon Item" + spell_type = /obj/effect/proc_holder/spell/targeted/summonitem + category = "Assistance" + cost = 1 + +/datum/spellbook_entry/lichdom + name = "Bind Soul" + spell_type = /obj/effect/proc_holder/spell/targeted/lichdom + category = "Defensive" + +/datum/spellbook_entry/teslablast + name = "Tesla Blast" + spell_type = /obj/effect/proc_holder/spell/targeted/tesla + +/datum/spellbook_entry/lightningbolt + name = "Lightning Bolt" + spell_type = /obj/effect/proc_holder/spell/aimed/lightningbolt + cost = 3 + +/datum/spellbook_entry/lightningbolt/Buy(mob/living/carbon/human/user,obj/item/spellbook/book) //return 1 on success + . = ..() + user.flags_2 |= TESLA_IGNORE_2 + +/datum/spellbook_entry/infinite_guns + name = "Lesser Summon Guns" + spell_type = /obj/effect/proc_holder/spell/targeted/infinite_guns/gun + cost = 3 + no_coexistance_typecache = /obj/effect/proc_holder/spell/targeted/infinite_guns/arcane_barrage + +/datum/spellbook_entry/arcane_barrage + name = "Arcane Barrage" + spell_type = /obj/effect/proc_holder/spell/targeted/infinite_guns/arcane_barrage + cost = 3 + no_coexistance_typecache = /obj/effect/proc_holder/spell/targeted/infinite_guns/gun + +/datum/spellbook_entry/barnyard + name = "Barnyard Curse" + spell_type = /obj/effect/proc_holder/spell/targeted/barnyardcurse + +/datum/spellbook_entry/charge + name = "Charge" + spell_type = /obj/effect/proc_holder/spell/targeted/charge + category = "Assistance" + cost = 1 + +/datum/spellbook_entry/shapeshift + name = "Wild Shapeshift" + spell_type = /obj/effect/proc_holder/spell/targeted/shapeshift + category = "Assistance" + cost = 1 + +/datum/spellbook_entry/spacetime_dist + name = "Spacetime Distortion" + spell_type = /obj/effect/proc_holder/spell/spacetime_dist + category = "Defensive" + cost = 1 + +/datum/spellbook_entry/the_traps + name = "The Traps!" + spell_type = /obj/effect/proc_holder/spell/aoe_turf/conjure/the_traps + category = "Defensive" + cost = 1 + + +/datum/spellbook_entry/item + name = "Buy Item" + refundable = 0 + buy_word = "Summon" + var/item_path= null + + +/datum/spellbook_entry/item/Buy(mob/living/carbon/human/user,obj/item/spellbook/book) + new item_path(get_turf(user)) + SSblackbox.record_feedback("tally", "wizard_spell_learned", 1, name) + return 1 + +/datum/spellbook_entry/item/GetInfo() + var/dat ="" + dat += "[name]" + dat += " Cost:[cost]
" + dat += "[desc]
" + if(surplus>=0) + dat += "[surplus] left.
" + return dat + +/datum/spellbook_entry/item/staffchange + name = "Staff of Change" + desc = "An artefact that spits bolts of coruscating energy which cause the target's very form to reshape itself." + item_path = /obj/item/gun/magic/staff/change + +/datum/spellbook_entry/item/staffanimation + name = "Staff of Animation" + desc = "An arcane staff capable of shooting bolts of eldritch energy which cause inanimate objects to come to life. This magic doesn't affect machines." + item_path = /obj/item/gun/magic/staff/animate + category = "Assistance" + +/datum/spellbook_entry/item/staffchaos + name = "Staff of Chaos" + desc = "A caprious tool that can fire all sorts of magic without any rhyme or reason. Using it on people you care about is not recommended." + item_path = /obj/item/gun/magic/staff/chaos + +/datum/spellbook_entry/item/spellblade + name = "Spellblade" + desc = "A sword capable of firing blasts of energy which rip targets limb from limb." + item_path = /obj/item/gun/magic/staff/spellblade + +/datum/spellbook_entry/item/staffdoor + name = "Staff of Door Creation" + desc = "A particular staff that can mold solid metal into ornate doors. Useful for getting around in the absence of other transportation. Does not work on glass." + item_path = /obj/item/gun/magic/staff/door + cost = 1 + category = "Mobility" + +/datum/spellbook_entry/item/staffhealing + name = "Staff of Healing" + desc = "An altruistic staff that can heal the lame and raise the dead." + item_path = /obj/item/gun/magic/staff/healing + cost = 1 + category = "Defensive" + +/datum/spellbook_entry/item/scryingorb + name = "Scrying Orb" + desc = "An incandescent orb of crackling energy, using it will allow you to ghost while alive, allowing you to spy upon the station with ease. In addition, buying it will permanently grant you x-ray vision." + item_path = /obj/item/scrying + category = "Defensive" + +/datum/spellbook_entry/item/soulstones + name = "Six Soul Stone Shards and the spell Artificer" + desc = "Soul Stone Shards are ancient tools capable of capturing and harnessing the spirits of the dead and dying. The spell Artificer allows you to create arcane machines for the captured souls to pilot." + item_path = /obj/item/storage/belt/soulstone/full + category = "Assistance" + +/datum/spellbook_entry/item/soulstones/Buy(mob/living/carbon/human/user,obj/item/spellbook/book) + . =..() + if(.) + user.mind.AddSpell(new /obj/effect/proc_holder/spell/aoe_turf/conjure/construct(null)) + return . + +/datum/spellbook_entry/item/necrostone + name = "A Necromantic Stone" + desc = "A Necromantic stone is able to resurrect three dead individuals as skeletal thralls for you to command." + item_path = /obj/item/device/necromantic_stone + category = "Assistance" + +/datum/spellbook_entry/item/wands + name = "Wand Assortment" + desc = "A collection of wands that allow for a wide variety of utility. Wands have a limited number of charges, so be conservative in use. Comes in a handy belt." + item_path = /obj/item/storage/belt/wands/full + category = "Defensive" + +/datum/spellbook_entry/item/armor + name = "Mastercrafted Armor Set" + desc = "An artefact suit of armor that allows you to cast spells while providing more protection against attacks and the void of space." + item_path = /obj/item/clothing/suit/space/hardsuit/wizard + category = "Defensive" + +/datum/spellbook_entry/item/armor/Buy(mob/living/carbon/human/user,obj/item/spellbook/book) + . = ..() + if(.) + new /obj/item/clothing/shoes/sandal/magic(get_turf(user)) //In case they've lost them. + new /obj/item/clothing/gloves/color/purple(get_turf(user))//To complete the outfit + +/datum/spellbook_entry/item/contract + name = "Contract of Apprenticeship" + desc = "A magical contract binding an apprentice wizard to your service, using it will summon them to your side." + item_path = /obj/item/antag_spawner/contract + category = "Assistance" + +/datum/spellbook_entry/item/guardian + name = "Guardian Deck" + desc = "A deck of guardian tarot cards, capable of binding a personal guardian to your body. There are multiple types of guardian available, but all of them will transfer some amount of damage to you. \ + It would be wise to avoid buying these with anything capable of causing you to swap bodies with others." + item_path = /obj/item/guardiancreator/choose/wizard + category = "Assistance" + +/datum/spellbook_entry/item/guardian/Buy(mob/living/carbon/human/user,obj/item/spellbook/book) + . = ..() + if(.) + new /obj/item/paper/guides/antag/guardian/wizard(get_turf(user)) + +/datum/spellbook_entry/item/bloodbottle + name = "Bottle of Blood" + desc = "A bottle of magically infused blood, the smell of which will attract extradimensional beings when broken. Be careful though, the kinds of creatures summoned by blood magic are indiscriminate in their killing, and you yourself may become a victim." + item_path = /obj/item/antag_spawner/slaughter_demon + limit = 3 + category = "Assistance" + +/datum/spellbook_entry/item/hugbottle + name = "Bottle of Tickles" + desc = "A bottle of magically infused fun, the smell of which will \ + attract adorable extradimensional beings when broken. These beings \ + are similar to slaughter demons, but they do not permamently kill \ + their victims, instead putting them in an extradimensional hugspace, \ + to be released on the demon's death. Chaotic, but not ultimately \ + damaging. The crew's reaction to the other hand could be very \ + destructive." + item_path = /obj/item/antag_spawner/slaughter_demon/laughter + cost = 1 //non-destructive; it's just a jape, sibling! + limit = 3 + category = "Assistance" + +/datum/spellbook_entry/item/mjolnir + name = "Mjolnir" + desc = "A mighty hammer on loan from Thor, God of Thunder. It crackles with barely contained power." + item_path = /obj/item/twohanded/mjollnir + +/datum/spellbook_entry/item/singularity_hammer + name = "Singularity Hammer" + desc = "A hammer that creates an intensely powerful field of gravity where it strikes, pulling everything nearby to the point of impact." + item_path = /obj/item/twohanded/singularityhammer + +/datum/spellbook_entry/item/battlemage + name = "Battlemage Armour" + desc = "An ensorcelled suit of armour, protected by a powerful shield. The shield can completly negate sixteen attacks before being permanently depleted." + item_path = /obj/item/clothing/suit/space/hardsuit/shielded/wizard + limit = 1 + category = "Defensive" + +/datum/spellbook_entry/item/battlemage_charge + name = "Battlemage Armour Charges" + desc = "A powerful defensive rune, it will grant eight additional charges to a suit of battlemage armour." + item_path = /obj/item/wizard_armour_charge + category = "Defensive" + cost = 1 + +/datum/spellbook_entry/item/warpwhistle + name = "Warp Whistle" + desc = "A strange whistle that will transport you to a distant safe place on the station. There is a window of vulnerability at the beginning of every use." + item_path = /obj/item/warpwhistle + category = "Mobility" + cost = 1 + +/datum/spellbook_entry/summon + name = "Summon Stuff" + category = "Rituals" + refundable = 0 + buy_word = "Cast" + var/active = 0 + +/datum/spellbook_entry/summon/CanBuy(mob/living/carbon/human/user,obj/item/spellbook/book) + return ..() && !active + +/datum/spellbook_entry/summon/GetInfo() + var/dat ="" + dat += "[name]" + if(cost>0) + dat += " Cost:[cost]
" + else + dat += " No Cost
" + dat += "[desc]
" + if(active) + dat += "Already cast!
" + return dat + +/datum/spellbook_entry/summon/ghosts + name = "Summon Ghosts" + desc = "Spook the crew out by making them see dead people. Be warned, ghosts are capricious and occasionally vindicative, and some will use their incredibly minor abilties to frustrate you." + cost = 0 + +/datum/spellbook_entry/summon/ghosts/IsAvailible() + if(!SSticker.mode) + return FALSE + else + return TRUE + +/datum/spellbook_entry/summon/ghosts/Buy(mob/living/carbon/human/user, obj/item/spellbook/book) + SSblackbox.record_feedback("tally", "wizard_spell_learned", 1, name) + new /datum/round_event/wizard/ghost() + active = TRUE + to_chat(user, "You have cast summon ghosts!") + playsound(get_turf(user), 'sound/effects/ghost2.ogg', 50, 1) + return TRUE + +/datum/spellbook_entry/summon/guns + name = "Summon Guns" + desc = "Nothing could possibly go wrong with arming a crew of lunatics just itching for an excuse to kill you. Just be careful not to stand still too long!" + +/datum/spellbook_entry/summon/guns/IsAvailible() + if(!SSticker.mode) // In case spellbook is placed on map + return 0 + return !CONFIG_GET(flag/no_summon_guns) + +/datum/spellbook_entry/summon/guns/Buy(mob/living/carbon/human/user,obj/item/spellbook/book) + SSblackbox.record_feedback("tally", "wizard_spell_learned", 1, name) + rightandwrong(SUMMON_GUNS, user, 25) + active = 1 + playsound(get_turf(user), 'sound/magic/castsummon.ogg', 50, 1) + to_chat(user, "You have cast summon guns!") + return 1 + +/datum/spellbook_entry/summon/magic + name = "Summon Magic" + desc = "Share the wonders of magic with the crew and show them why they aren't to be trusted with it at the same time." + +/datum/spellbook_entry/summon/magic/IsAvailible() + if(!SSticker.mode) // In case spellbook is placed on map + return 0 + return !CONFIG_GET(flag/no_summon_magic) + +/datum/spellbook_entry/summon/magic/Buy(mob/living/carbon/human/user,obj/item/spellbook/book) + SSblackbox.record_feedback("tally", "wizard_spell_learned", 1, name) + rightandwrong(SUMMON_MAGIC, user, 25) + active = 1 + playsound(get_turf(user), 'sound/magic/castsummon.ogg', 50, 1) + to_chat(user, "You have cast summon magic!") + return 1 + +/datum/spellbook_entry/summon/events + name = "Summon Events" + desc = "Give Murphy's law a little push and replace all events with special wizard ones that will confound and confuse everyone. Multiple castings increase the rate of these events." + var/times = 0 + +/datum/spellbook_entry/summon/events/IsAvailible() + if(!SSticker.mode) // In case spellbook is placed on map + return 0 + return !CONFIG_GET(flag/no_summon_events) + +/datum/spellbook_entry/summon/events/Buy(mob/living/carbon/human/user,obj/item/spellbook/book) + SSblackbox.record_feedback("tally", "wizard_spell_learned", 1, name) + summonevents() + times++ + playsound(get_turf(user), 'sound/magic/castsummon.ogg', 50, 1) + to_chat(user, "You have cast summon events.") + return 1 + +/datum/spellbook_entry/summon/events/GetInfo() + . = ..() + if(times>0) + . += "You cast it [times] times.
" + return . + +/obj/item/spellbook + name = "spell book" + desc = "An unearthly tome that glows with power." + icon = 'icons/obj/library.dmi' + icon_state ="book" + throw_speed = 2 + throw_range = 5 + w_class = WEIGHT_CLASS_TINY + persistence_replacement = /obj/item/spellbook/oneuse/random + var/uses = 10 + var/temp = null + var/tab = null + var/mob/living/carbon/human/owner + var/list/datum/spellbook_entry/entries = list() + var/list/categories = list() + +/obj/item/spellbook/examine(mob/user) + ..() + if(owner) + to_chat(user, "There is a small signature on the front cover: \"[owner]\".") + else + to_chat(user, "It appears to have no author.") + +/obj/item/spellbook/Initialize() + . = ..() + prepare_spells() + +/obj/item/spellbook/proc/prepare_spells() + var/entry_types = subtypesof(/datum/spellbook_entry) - /datum/spellbook_entry/item - /datum/spellbook_entry/summon + for(var/T in entry_types) + var/datum/spellbook_entry/E = new T + if(E.IsAvailible()) + entries |= E + categories |= E.category + else + qdel(E) + tab = categories[1] + +/obj/item/spellbook/attackby(obj/item/O, mob/user, params) + if(istype(O, /obj/item/antag_spawner/contract)) + var/obj/item/antag_spawner/contract/contract = O + if(contract.used) + to_chat(user, "The contract has been used, you can't get your points back now!") + else + to_chat(user, "You feed the contract back into the spellbook, refunding your points.") + uses++ + for(var/datum/spellbook_entry/item/contract/CT in entries) + if(!isnull(CT.limit)) + CT.limit++ + qdel(O) + else if(istype(O, /obj/item/antag_spawner/slaughter_demon)) + to_chat(user, "On second thought, maybe summoning a demon is a bad idea. You refund your points.") + uses++ + for(var/datum/spellbook_entry/item/bloodbottle/BB in entries) + if(!isnull(BB.limit)) + BB.limit++ + qdel(O) + +/obj/item/spellbook/proc/GetCategoryHeader(category) + var/dat = "" + switch(category) + if("Offensive") + dat += "Spells and items geared towards debilitating and destroying.

" + dat += "Items are not bound to you and can be stolen. Additionaly they cannot typically be returned once purchased.
" + dat += "For spells: the number after the spell name is the cooldown time.
" + dat += "You can reduce this number by spending more points on the spell.
" + if("Defensive") + dat += "Spells and items geared towards improving your survivabilty or reducing foes' ability to attack.

" + dat += "Items are not bound to you and can be stolen. Additionaly they cannot typically be returned once purchased.
" + dat += "For spells: the number after the spell name is the cooldown time.
" + dat += "You can reduce this number by spending more points on the spell.
" + if("Mobility") + dat += "Spells and items geared towards improving your ability to move. It is a good idea to take at least one.

" + dat += "Items are not bound to you and can be stolen. Additionaly they cannot typically be returned once purchased.
" + dat += "For spells: the number after the spell name is the cooldown time.
" + dat += "You can reduce this number by spending more points on the spell.
" + if("Assistance") + dat += "Spells and items geared towards bringing in outside forces to aid you or improving upon your other items and abilties.

" + dat += "Items are not bound to you and can be stolen. Additionaly they cannot typically be returned once purchased.
" + dat += "For spells: the number after the spell name is the cooldown time.
" + dat += "You can reduce this number by spending more points on the spell.
" + if("Challenges") + dat += "The Wizard Federation typically has hard limits on the potency and number of spells brought to the station based on risk.
" + dat += "Arming the station against you will increases the risk, but will grant you one more charge for your spellbook.
" + if("Rituals") + dat += "These powerful spells change the very fabric of reality. Not always in your favour.
" + return dat + +/obj/item/spellbook/proc/wrap(content) + var/dat = "" + dat +="Spellbook" + dat += {" + + + + "} + dat += {"[content]"} + return dat + +/obj/item/spellbook/attack_self(mob/user) + if(!owner) + to_chat(user, "You bind the spellbook to yourself.") + owner = user + return + if(user != owner) + to_chat(user, "The [name] does not recognize you as its owner and refuses to open!") + return + user.set_machine(src) + var/dat = "" + + dat += "" + + var/datum/spellbook_entry/E + for(var/i=1,i<=entries.len,i++) + var/spell_info = "" + E = entries[i] + spell_info += E.GetInfo() + if(E.CanBuy(user,src)) + spell_info+= "[E.buy_word]
" + else + spell_info+= "Can't [E.buy_word]
" + if(E.CanRefund(user,src)) + spell_info+= "Refund
" + spell_info += "
" + if(cat_dat[E.category]) + cat_dat[E.category] += spell_info + + for(var/category in categories) + dat += "
" + dat += GetCategoryHeader(category) + dat += cat_dat[category] + dat += "
" + + user << browse(wrap(dat), "window=spellbook;size=700x500") + onclose(user, "spellbook") + return + +/obj/item/spellbook/Topic(href, href_list) + ..() + var/mob/living/carbon/human/H = usr + + if(H.stat || H.restrained()) + return + if(!ishuman(H)) + return 1 + + if(H.mind.special_role == "apprentice") + temp = "If you got caught sneaking a peek from your teacher's spellbook, you'd likely be expelled from the Wizard Academy. Better not." + return + + var/datum/spellbook_entry/E = null + if(loc == H || (in_range(src, H) && isturf(loc))) + H.set_machine(src) + if(href_list["buy"]) + E = entries[text2num(href_list["buy"])] + if(E && E.CanBuy(H,src)) + if(E.Buy(H,src)) + if(E.limit) + E.limit-- + uses -= E.cost + else if(href_list["refund"]) + E = entries[text2num(href_list["refund"])] + if(E && E.refundable) + var/result = E.Refund(H,src) + if(result > 0) + if(!isnull(E.limit)) + E.limit += result + uses += result + else if(href_list["page"]) + tab = sanitize(href_list["page"]) + attack_self(H) + return + +//Single Use Spellbooks// + +/obj/item/spellbook/oneuse + var/spell = /obj/effect/proc_holder/spell/targeted/projectile/magic_missile //just a placeholder to avoid runtimes if someone spawned the generic + var/spellname = "sandbox" + var/used = 0 + name = "spellbook of " + uses = 1 + desc = "This template spellbook was never meant for the eyes of man..." + persistence_replacement = null + +/obj/item/spellbook/oneuse/prepare_spells() + name += spellname + +/obj/item/spellbook/oneuse/attack_self(mob/user) + var/obj/effect/proc_holder/spell/S = new spell + for(var/obj/effect/proc_holder/spell/knownspell in user.mind.spell_list) + if(knownspell.type == S.type) + if(user.mind) + if(iswizard(user)) + to_chat(user,"You're already far more versed in this spell than this flimsy how-to book can provide.") + else + to_chat(user,"You've already read this one.") + return + if(used) + recoil(user) + else + user.mind.AddSpell(S) + to_chat(user,"You rapidly read through the arcane book. Suddenly you realize you understand [spellname]!") + user.log_message("learned the spell [spellname] ([S]).", INDIVIDUAL_ATTACK_LOG) + onlearned(user) + +/obj/item/spellbook/oneuse/proc/recoil(mob/user) + user.visible_message("[src] glows in a black light!") + +/obj/item/spellbook/oneuse/proc/onlearned(mob/user) + used = 1 + user.visible_message("[src] glows dark for a second!") + +/obj/item/spellbook/oneuse/attackby() + return + +/obj/item/spellbook/oneuse/fireball + spell = /obj/effect/proc_holder/spell/aimed/fireball + spellname = "fireball" + icon_state ="bookfireball" + desc = "This book feels warm to the touch." + +/obj/item/spellbook/oneuse/fireball/recoil(mob/user) + ..() + explosion(user.loc, -1, 0, 2, 3, 0, flame_range = 2) + qdel(src) + +/obj/item/spellbook/oneuse/smoke + spell = /obj/effect/proc_holder/spell/targeted/smoke + spellname = "smoke" + icon_state ="booksmoke" + desc = "This book is overflowing with the dank arts." + +/obj/item/spellbook/oneuse/smoke/lesser //Chaplain smoke book + spell = /obj/effect/proc_holder/spell/targeted/smoke/lesser + +/obj/item/spellbook/oneuse/smoke/recoil(mob/user) + ..() + to_chat(user,"Your stomach rumbles...") + if(user.nutrition) + user.nutrition -= 200 + if(user.nutrition <= 0) + user.nutrition = 0 + + +/obj/item/spellbook/oneuse/blind + spell = /obj/effect/proc_holder/spell/targeted/trigger/blind + spellname = "blind" + icon_state ="bookblind" + desc = "This book looks blurry, no matter how you look at it." + +/obj/item/spellbook/oneuse/blind/recoil(mob/user) + ..() + to_chat(user,"You go blind!") + user.blind_eyes(10) + +/obj/item/spellbook/oneuse/mindswap + spell = /obj/effect/proc_holder/spell/targeted/mind_transfer + spellname = "mindswap" + icon_state ="bookmindswap" + desc = "This book's cover is pristine, though its pages look ragged and torn." + var/mob/stored_swap = null //Used in used book recoils to store an identity for mindswaps + +/obj/item/spellbook/oneuse/mindswap/onlearned() + spellname = pick("fireball","smoke","blind","forcewall","knock","barnyard","charge") + icon_state = "book[spellname]" + name = "spellbook of [spellname]" //Note, desc doesn't change by design + ..() + +/obj/item/spellbook/oneuse/mindswap/recoil(mob/user) + ..() + if(stored_swap in GLOB.dead_mob_list) + stored_swap = null + if(!stored_swap) + stored_swap = user + to_chat(user,"For a moment you feel like you don't even know who you are anymore.") + return + if(stored_swap == user) + to_chat(user,"You stare at the book some more, but there doesn't seem to be anything else to learn...") + return + + var/obj/effect/proc_holder/spell/targeted/mind_transfer/swapper = new + swapper.cast(user, stored_swap, 1) + + to_chat(stored_swap,"You're suddenly somewhere else... and someone else?!") + to_chat(user,"Suddenly you're staring at [src] again... where are you, who are you?!") + stored_swap = null + +/obj/item/spellbook/oneuse/forcewall + spell = /obj/effect/proc_holder/spell/targeted/forcewall + spellname = "forcewall" + icon_state ="bookforcewall" + desc = "This book has a dedication to mimes everywhere inside the front cover." + +/obj/item/spellbook/oneuse/forcewall/recoil(mob/living/user) + ..() + to_chat(user,"You suddenly feel very solid!") + user.Stun(40, ignore_canstun = TRUE) + user.petrify(30) + +/obj/item/spellbook/oneuse/knock + spell = /obj/effect/proc_holder/spell/aoe_turf/knock + spellname = "knock" + icon_state ="bookknock" + desc = "This book is hard to hold closed properly." + +/obj/item/spellbook/oneuse/knock/recoil(mob/living/user) + ..() + to_chat(user,"You're knocked down!") + user.Knockdown(40) + +/obj/item/spellbook/oneuse/barnyard + spell = /obj/effect/proc_holder/spell/targeted/barnyardcurse + spellname = "barnyard" + icon_state ="bookhorses" + desc = "This book is more horse than your mind has room for." + +/obj/item/spellbook/oneuse/barnyard/recoil(mob/living/carbon/user) + if(ishuman(user)) + to_chat(user,"HOR-SIE HAS RISEN") + var/obj/item/clothing/mask/horsehead/magichead = new /obj/item/clothing/mask/horsehead + magichead.flags_1 |= NODROP_1 //curses! + magichead.flags_inv &= ~HIDEFACE //so you can still see their face + magichead.voicechange = 1 //NEEEEIIGHH + if(!user.dropItemToGround(user.wear_mask)) + qdel(user.wear_mask) + user.equip_to_slot_if_possible(magichead, slot_wear_mask, 1, 1) + qdel(src) + else + to_chat(user,"I say thee neigh") //It still lives here + +/obj/item/spellbook/oneuse/charge + spell = /obj/effect/proc_holder/spell/targeted/charge + spellname = "charging" + icon_state ="bookcharge" + desc = "This book is made of 100% post-consumer wizard." + +/obj/item/spellbook/oneuse/charge/recoil(mob/user) + ..() + to_chat(user,"[src] suddenly feels very warm!") + empulse(src, 1, 1) + +/obj/item/spellbook/oneuse/summonitem + spell = /obj/effect/proc_holder/spell/targeted/summonitem + spellname = "instant summons" + icon_state ="booksummons" + desc = "This book is bright and garish, very hard to miss." + +/obj/item/spellbook/oneuse/summonitem/recoil(mob/user) + ..() + to_chat(user,"[src] suddenly vanishes!") + qdel(src) + +/obj/item/spellbook/oneuse/random + icon_state = "random_book" + +/obj/item/spellbook/oneuse/random/Initialize() + ..() + var/static/banned_spells = list(/obj/item/spellbook/oneuse/mimery_blockade, /obj/item/spellbook/oneuse/mimery_guns) + var/real_type = pick(subtypesof(/obj/item/spellbook/oneuse) - banned_spells) + new real_type(loc) + return INITIALIZE_HINT_QDEL + +/obj/item/spellbook/oneuse/sacredflame + spell = /obj/effect/proc_holder/spell/targeted/sacred_flame + spellname = "sacred flame" + icon_state ="booksacredflame" + desc = "Become one with the flames that burn within... and invite others to do so as well." diff --git a/code/modules/antagonists/wizard/wizard.dm b/code/modules/antagonists/wizard/wizard.dm new file mode 100644 index 0000000000..e447fc46aa --- /dev/null +++ b/code/modules/antagonists/wizard/wizard.dm @@ -0,0 +1,334 @@ +/datum/antagonist/wizard + name = "Space Wizard" + roundend_category = "wizards/witches" + antagpanel_category = "Wizard" + job_rank = ROLE_WIZARD + var/give_objectives = TRUE + var/strip = TRUE //strip before equipping + var/allow_rename = TRUE + var/hud_version = "wizard" + var/datum/team/wizard/wiz_team //Only created if wizard summons apprentices + var/move_to_lair = TRUE + var/outfit_type = /datum/outfit/wizard + var/wiz_age = WIZARD_AGE_MIN /* Wizards by nature cannot be too young. */ + +/datum/antagonist/wizard/on_gain() + register() + if(give_objectives) + create_objectives() + equip_wizard() + if(move_to_lair) + send_to_lair() + . = ..() + if(allow_rename) + rename_wizard() + +/datum/antagonist/wizard/proc/register() + SSticker.mode.wizards |= owner + +/datum/antagonist/wizard/proc/unregister() + SSticker.mode.wizards -= src + +/datum/antagonist/wizard/create_team(datum/team/wizard/new_team) + if(!new_team) + return + if(!istype(new_team)) + stack_trace("Wrong team type passed to [type] initialization.") + wiz_team = new_team + +/datum/antagonist/wizard/get_team() + return wiz_team + +/datum/team/wizard + name = "wizard team" + var/datum/antagonist/wizard/master_wizard + +/datum/antagonist/wizard/proc/create_wiz_team() + wiz_team = new(owner) + wiz_team.name = "[owner.current.real_name] team" + wiz_team.master_wizard = src + update_wiz_icons_added(owner.current) + +/datum/antagonist/wizard/proc/send_to_lair() + if(!owner || !owner.current) + return + if(!GLOB.wizardstart.len) + SSjob.SendToLateJoin(owner.current) + to_chat(owner, "HOT INSERTION, GO GO GO") + owner.current.forceMove(pick(GLOB.wizardstart)) + +/datum/antagonist/wizard/proc/create_objectives() + switch(rand(1,100)) + if(1 to 30) + var/datum/objective/assassinate/kill_objective = new + kill_objective.owner = owner + kill_objective.find_target() + objectives += kill_objective + + if (!(locate(/datum/objective/escape) in owner.objectives)) + var/datum/objective/escape/escape_objective = new + escape_objective.owner = owner + objectives += escape_objective + + if(31 to 60) + var/datum/objective/steal/steal_objective = new + steal_objective.owner = owner + steal_objective.find_target() + objectives += steal_objective + + if (!(locate(/datum/objective/escape) in owner.objectives)) + var/datum/objective/escape/escape_objective = new + escape_objective.owner = owner + objectives += escape_objective + + if(61 to 85) + var/datum/objective/assassinate/kill_objective = new + kill_objective.owner = owner + kill_objective.find_target() + objectives += kill_objective + + var/datum/objective/steal/steal_objective = new + steal_objective.owner = owner + steal_objective.find_target() + objectives += steal_objective + + if (!(locate(/datum/objective/survive) in owner.objectives)) + var/datum/objective/survive/survive_objective = new + survive_objective.owner = owner + objectives += survive_objective + + else + if (!(locate(/datum/objective/hijack) in owner.objectives)) + var/datum/objective/hijack/hijack_objective = new + hijack_objective.owner = owner + objectives += hijack_objective + + for(var/datum/objective/O in objectives) + owner.objectives += O + +/datum/antagonist/wizard/on_removal() + unregister() + for(var/objective in objectives) + owner.objectives -= objective + owner.RemoveAllSpells() // TODO keep track which spells are wizard spells which innate stuff + return ..() + +/datum/antagonist/wizard/proc/equip_wizard() + if(!owner) + return + var/mob/living/carbon/human/H = owner.current + if(!istype(H)) + return + if(strip) + H.delete_equipment() + //Wizards are human by default. Use the mirror if you want something else. + H.set_species(/datum/species/human) + if(H.age < wiz_age) + H.age = wiz_age + H.equipOutfit(outfit_type) + +/datum/antagonist/wizard/greet() + to_chat(owner, "You are the Space Wizard!") + to_chat(owner, "The Space Wizards Federation has given you the following tasks:") + owner.announce_objectives() + to_chat(owner, "You will find a list of available spells in your spell book. Choose your magic arsenal carefully.") + to_chat(owner, "The spellbook is bound to you, and others cannot use it.") + to_chat(owner, "In your pockets you will find a teleport scroll. Use it as needed.") + to_chat(owner,"Remember: do not forget to prepare your spells.") + +/datum/antagonist/wizard/farewell() + to_chat(owner, "You have been brainwashed! You are no longer a wizard!") + +/datum/antagonist/wizard/proc/rename_wizard() + set waitfor = FALSE + + var/wizard_name_first = pick(GLOB.wizard_first) + var/wizard_name_second = pick(GLOB.wizard_second) + var/randomname = "[wizard_name_first] [wizard_name_second]" + var/mob/living/wiz_mob = owner.current + var/newname = copytext(sanitize(input(wiz_mob, "You are the [name]. Would you like to change your name to something else?", "Name change", randomname) as null|text),1,MAX_NAME_LEN) + + if (!newname) + newname = randomname + + wiz_mob.fully_replace_character_name(wiz_mob.real_name, newname) + +/datum/antagonist/wizard/apply_innate_effects(mob/living/mob_override) + var/mob/living/M = mob_override || owner.current + update_wiz_icons_added(M, wiz_team ? TRUE : FALSE) //Don't bother showing the icon if you're solo wizard + M.faction |= "wizard" + +/datum/antagonist/wizard/remove_innate_effects(mob/living/mob_override) + var/mob/living/M = mob_override || owner.current + update_wiz_icons_removed(M) + M.faction -= "wizard" + + +/datum/antagonist/wizard/get_admin_commands() + . = ..() + .["Send to Lair"] = CALLBACK(src,.proc/admin_send_to_lair) + +/datum/antagonist/wizard/proc/admin_send_to_lair(mob/admin) + owner.current.forceMove(pick(GLOB.wizardstart)) + +/datum/antagonist/wizard/apprentice + name = "Wizard Apprentice" + hud_version = "apprentice" + var/datum/mind/master + var/school = APPRENTICE_DESTRUCTION + outfit_type = /datum/outfit/wizard/apprentice + wiz_age = APPRENTICE_AGE_MIN + +/datum/antagonist/wizard/apprentice/greet() + to_chat(owner, "You are [master.current.real_name]'s apprentice! You are bound by magic contract to follow their orders and help them in accomplishing their goals.") + owner.announce_objectives() + +/datum/antagonist/wizard/apprentice/register() + SSticker.mode.apprentices |= owner + +/datum/antagonist/wizard/apprentice/unregister() + SSticker.mode.apprentices -= owner + +/datum/antagonist/wizard/apprentice/equip_wizard() + . = ..() + if(!owner) + return + var/mob/living/carbon/human/H = owner.current + if(!istype(H)) + return + switch(school) + if(APPRENTICE_DESTRUCTION) + owner.AddSpell(new /obj/effect/proc_holder/spell/targeted/projectile/magic_missile(null)) + owner.AddSpell(new /obj/effect/proc_holder/spell/aimed/fireball(null)) + to_chat(owner, "Your service has not gone unrewarded, however. Studying under [master.current.real_name], you have learned powerful, destructive spells. You are able to cast magic missile and fireball.") + if(APPRENTICE_BLUESPACE) + owner.AddSpell(new /obj/effect/proc_holder/spell/targeted/area_teleport/teleport(null)) + owner.AddSpell(new /obj/effect/proc_holder/spell/targeted/ethereal_jaunt(null)) + to_chat(owner, "Your service has not gone unrewarded, however. Studying under [master.current.real_name], you have learned reality bending mobility spells. You are able to cast teleport and ethereal jaunt.") + if(APPRENTICE_HEALING) + owner.AddSpell(new /obj/effect/proc_holder/spell/targeted/charge(null)) + owner.AddSpell(new /obj/effect/proc_holder/spell/targeted/forcewall(null)) + H.put_in_hands(new /obj/item/gun/magic/staff/healing(H)) + to_chat(owner, "Your service has not gone unrewarded, however. Studying under [master.current.real_name], you have learned livesaving survival spells. You are able to cast charge and forcewall.") + if(APPRENTICE_ROBELESS) + owner.AddSpell(new /obj/effect/proc_holder/spell/aoe_turf/knock(null)) + owner.AddSpell(new /obj/effect/proc_holder/spell/targeted/mind_transfer(null)) + to_chat(owner, "Your service has not gone unrewarded, however. Studying under [master.current.real_name], you have learned stealthy, robeless spells. You are able to cast knock and mindswap.") + +/datum/antagonist/wizard/apprentice/create_objectives() + var/datum/objective/protect/new_objective = new /datum/objective/protect + new_objective.owner = owner + new_objective.target = master + new_objective.explanation_text = "Protect [master.current.real_name], the wizard." + owner.objectives += new_objective + objectives += new_objective + +//Random event wizard +/datum/antagonist/wizard/apprentice/imposter + name = "Wizard Imposter" + allow_rename = FALSE + move_to_lair = FALSE + +/datum/antagonist/wizard/apprentice/imposter/greet() + to_chat(owner, "You are an imposter! Trick and confuse the crew to misdirect malice from your handsome original!") + owner.announce_objectives() + +/datum/antagonist/wizard/apprentice/imposter/equip_wizard() + var/mob/living/carbon/human/master_mob = master.current + var/mob/living/carbon/human/H = owner.current + if(!istype(master_mob) || !istype(H)) + return + if(master_mob.ears) + H.equip_to_slot_or_del(new master_mob.ears.type, slot_ears) + if(master_mob.w_uniform) + H.equip_to_slot_or_del(new master_mob.w_uniform.type, slot_w_uniform) + if(master_mob.shoes) + H.equip_to_slot_or_del(new master_mob.shoes.type, slot_shoes) + if(master_mob.wear_suit) + H.equip_to_slot_or_del(new master_mob.wear_suit.type, slot_wear_suit) + if(master_mob.head) + H.equip_to_slot_or_del(new master_mob.head.type, slot_head) + if(master_mob.back) + H.equip_to_slot_or_del(new master_mob.back.type, slot_back) + + //Operation: Fuck off and scare people + owner.AddSpell(new /obj/effect/proc_holder/spell/targeted/area_teleport/teleport(null)) + owner.AddSpell(new /obj/effect/proc_holder/spell/targeted/turf_teleport/blink(null)) + owner.AddSpell(new /obj/effect/proc_holder/spell/targeted/ethereal_jaunt(null)) + +/datum/antagonist/wizard/proc/update_wiz_icons_added(mob/living/wiz,join = TRUE) + var/datum/atom_hud/antag/wizhud = GLOB.huds[ANTAG_HUD_WIZ] + wizhud.join_hud(wiz) + set_antag_hud(wiz, hud_version) + +/datum/antagonist/wizard/proc/update_wiz_icons_removed(mob/living/wiz) + var/datum/atom_hud/antag/wizhud = GLOB.huds[ANTAG_HUD_WIZ] + wizhud.leave_hud(wiz) + set_antag_hud(wiz, null) + + +/datum/antagonist/wizard/academy + name = "Academy Teacher" + outfit_type = /datum/outfit/wizard/academy + +/datum/antagonist/wizard/academy/equip_wizard() + . = ..() + + owner.AddSpell(new /obj/effect/proc_holder/spell/targeted/ethereal_jaunt) + owner.AddSpell(new /obj/effect/proc_holder/spell/targeted/projectile/magic_missile) + owner.AddSpell(new /obj/effect/proc_holder/spell/aimed/fireball) + + var/mob/living/M = owner.current + if(!istype(M)) + return + + var/obj/item/implant/exile/Implant = new/obj/item/implant/exile(M) + Implant.implant(M) + +/datum/antagonist/wizard/academy/create_objectives() + var/datum/objective/new_objective = new("Protect Wizard Academy from the intruders") + new_objective.owner = owner + owner.objectives += new_objective + objectives += new_objective + +//Solo wizard report +/datum/antagonist/wizard/roundend_report() + var/list/parts = list() + + parts += printplayer(owner) + + var/count = 1 + var/wizardwin = 1 + for(var/datum/objective/objective in objectives) + if(objective.check_completion()) + parts += "Objective #[count]: [objective.explanation_text] Success!" + else + parts += "Objective #[count]: [objective.explanation_text] Fail." + wizardwin = 0 + count++ + + if(wizardwin) + parts += "The wizard was successful!" + else + parts += "The wizard has failed!" + + if(owner.spell_list.len>0) + parts += "[owner.name] used the following spells: " + var/list/spell_names = list() + for(var/obj/effect/proc_holder/spell/S in owner.spell_list) + spell_names += S.name + parts += spell_names.Join(", ") + + return parts.Join("
") + +//Wizard with apprentices report +/datum/team/wizard/roundend_report() + var/list/parts = list() + + parts += "Wizards/witches of [master_wizard.owner.name] team were:" + parts += master_wizard.roundend_report() + parts += " " + parts += "[master_wizard.owner.name] apprentices were:" + parts += printplayerlist(members - master_wizard.owner) + + return "
[parts.Join("
")]
" \ No newline at end of file diff --git a/code/modules/assembly/flash.dm b/code/modules/assembly/flash.dm index 84e6233794..b20a395e6d 100644 --- a/code/modules/assembly/flash.dm +++ b/code/modules/assembly/flash.dm @@ -40,7 +40,7 @@ holder.update_icon() /obj/item/device/assembly/flash/proc/clown_check(mob/living/carbon/human/user) - if(user.has_disability(DISABILITY_CLUMSY) && prob(50)) + if(user.has_trait(TRAIT_CLUMSY) && prob(50)) flash_carbon(user, user, 15, 0) return FALSE return TRUE diff --git a/code/modules/assembly/mousetrap.dm b/code/modules/assembly/mousetrap.dm index a61eccbb59..fb37c878a3 100644 --- a/code/modules/assembly/mousetrap.dm +++ b/code/modules/assembly/mousetrap.dm @@ -20,7 +20,7 @@ if(!armed) if(ishuman(usr)) var/mob/living/carbon/human/user = usr - if((user.has_disability(DISABILITY_DUMB) || user.has_disability(DISABILITY_CLUMSY)) && prob(50)) + if((user.has_trait(TRAIT_DUMB) || user.has_trait(TRAIT_CLUMSY)) && prob(50)) to_chat(user, "Your hand slips, setting off the trigger!") pulse(0) update_icon() @@ -76,7 +76,7 @@ if(!armed) to_chat(user, "You arm [src].") else - if((user.has_disability(DISABILITY_DUMB) || user.has_disability(DISABILITY_CLUMSY)) && prob(50)) + if((user.has_trait(TRAIT_DUMB) || user.has_trait(TRAIT_CLUMSY)) && prob(50)) var/which_hand = "l_hand" if(!(user.active_hand_index % 2)) which_hand = "r_hand" @@ -92,7 +92,7 @@ /obj/item/device/assembly/mousetrap/attack_hand(mob/living/carbon/human/user) if(armed) - if((user.has_disability(DISABILITY_DUMB) || user.has_disability(DISABILITY_CLUMSY)) && prob(50)) + if((user.has_trait(TRAIT_DUMB) || user.has_trait(TRAIT_CLUMSY)) && prob(50)) var/which_hand = "l_hand" if(!(user.active_hand_index % 2)) which_hand = "r_hand" diff --git a/code/modules/atmospherics/machinery/airalarm.dm b/code/modules/atmospherics/machinery/airalarm.dm index 6fd846ad66..f83164a409 100644 --- a/code/modules/atmospherics/machinery/airalarm.dm +++ b/code/modules/atmospherics/machinery/airalarm.dm @@ -202,7 +202,7 @@ var/data = list( "locked" = locked, "siliconUser" = user.has_unlimited_silicon_privilege, - "emagged" = emagged, + "emagged" = (obj_flags & EMAGGED ? 1 : 0), "danger_level" = danger_level, ) @@ -288,7 +288,7 @@ data["modes"] += list(list("name" = "Siphon - Siphons air out of the room", "mode" = AALARM_MODE_SIPHON, "selected" = mode == AALARM_MODE_SIPHON, "danger" = 1)) data["modes"] += list(list("name" = "Panic Siphon - Siphons air out of the room quickly","mode" = AALARM_MODE_PANIC, "selected" = mode == AALARM_MODE_PANIC, "danger" = 1)) data["modes"] += list(list("name" = "Off - Shuts off vents and scrubbers", "mode" = AALARM_MODE_OFF, "selected" = mode == AALARM_MODE_OFF, "danger" = 0)) - if(emagged) + if(obj_flags & EMAGGED) data["modes"] += list(list("name" = "Flood - Shuts off scrubbers and opens vents", "mode" = AALARM_MODE_FLOOD, "selected" = mode == AALARM_MODE_FLOOD, "danger" = 1)) var/datum/tlv/selected @@ -756,9 +756,9 @@ update_icon() /obj/machinery/airalarm/emag_act(mob/user) - if(emagged) + if(obj_flags & EMAGGED) return - emagged = TRUE + obj_flags |= EMAGGED visible_message("Sparks fly out of [src]!", "You emag [src], disabling its safeties.") playsound(src, "sparks", 50, 1) diff --git a/code/modules/atmospherics/machinery/atmosmachinery.dm b/code/modules/atmospherics/machinery/atmosmachinery.dm index 5ba74d59d9..ef62c00f86 100644 --- a/code/modules/atmospherics/machinery/atmosmachinery.dm +++ b/code/modules/atmospherics/machinery/atmosmachinery.dm @@ -17,10 +17,10 @@ Pipelines + Other Objects -> Pipe network idle_power_usage = 0 active_power_usage = 0 power_channel = ENVIRON - on_blueprints = TRUE layer = GAS_PIPE_HIDDEN_LAYER //under wires resistance_flags = FIRE_PROOF max_integrity = 200 + obj_flags = CAN_BE_HIT | ON_BLUEPRINTS var/nodealert = 0 var/can_unwrench = 0 var/initialize_directions = 0 @@ -326,7 +326,7 @@ Pipelines + Other Objects -> Pipe network else if(is_type_in_typecache(src, GLOB.ventcrawl_machinery) && can_crawl_through()) //if we move in a way the pipe can connect, but doesn't - or we're in a vent user.forceMove(loc) user.visible_message("You hear something squeezing through the ducts...","You climb out the ventilation system.") - + user.canmove = FALSE addtimer(VARSET_CALLBACK(user, canmove, TRUE), 1) @@ -345,10 +345,9 @@ Pipelines + Other Objects -> Pipe network return list() /obj/machinery/atmospherics/update_remote_sight(mob/user) - if(isborer(user)) - user.sight |= (SEE_PIXELS) - else - user.sight |= (SEE_TURFS|BLIND) +// if(isborer(user)) +// user.sight |= (SEE_PIXELS) + user.sight |= (SEE_TURFS|BLIND) //Used for certain children of obj/machinery/atmospherics to not show pipe vision when mob is inside it. /obj/machinery/atmospherics/proc/can_see_pipes() diff --git a/code/modules/awaymissions/corpse.dm b/code/modules/awaymissions/corpse.dm index a10b958db0..2e8d47cf4e 100644 --- a/code/modules/awaymissions/corpse.dm +++ b/code/modules/awaymissions/corpse.dm @@ -275,6 +275,10 @@ /obj/effect/mob_spawn/human/corpse/assistant/spanishflu_infection disease = /datum/disease/fluspanish +/obj/effect/mob_spawn/human/corpse/cargo_tech + name = "Cargo Tech" + outfit = /datum/outfit/job/cargo_tech + /obj/effect/mob_spawn/human/cook name = "Cook" outfit = /datum/outfit/job/cook diff --git a/code/modules/awaymissions/mission_code/Cabin.dm b/code/modules/awaymissions/mission_code/Cabin.dm index c43330d0e6..7b0a3121b6 100644 --- a/code/modules/awaymissions/mission_code/Cabin.dm +++ b/code/modules/awaymissions/mission_code/Cabin.dm @@ -72,7 +72,7 @@ /obj/machinery/recycler/lumbermill name = "lumbermill saw" desc = "Faster then the cartoons!" - emagged = 2 //Always gibs people + obj_flags = CAN_BE_HIT | EMAGGED item_recycle_sound = 'sound/weapons/chainsawhit.ogg' /obj/machinery/recycler/lumbermill/recycle_item(obj/item/grown/log/L) diff --git a/code/modules/awaymissions/zlevel.dm b/code/modules/awaymissions/zlevel.dm index 06af9bf2b9..a96acb027b 100644 --- a/code/modules/awaymissions/zlevel.dm +++ b/code/modules/awaymissions/zlevel.dm @@ -31,7 +31,7 @@ GLOBAL_LIST_INIT(potentialRandomZlevels, generateMapList(filename = "[global.con return ..() /proc/generateMapList(filename) - var/list/potentialMaps = list() + . = list() var/list/Lines = world.file2list(filename) if(!Lines.len) @@ -58,6 +58,4 @@ GLOBAL_LIST_INIT(potentialRandomZlevels, generateMapList(filename = "[global.con if (!name) continue - potentialMaps.Add(t) - - return potentialMaps + . += t diff --git a/code/modules/cargo/console.dm b/code/modules/cargo/console.dm index a41106a49d..a382af0bd8 100644 --- a/code/modules/cargo/console.dm +++ b/code/modules/cargo/console.dm @@ -23,21 +23,24 @@ . = ..() var/obj/item/circuitboard/computer/cargo/board = circuit contraband = board.contraband - emagged = board.emagged + if (board.obj_flags & EMAGGED) + obj_flags |= EMAGGED + else + obj_flags &= ~EMAGGED /obj/machinery/computer/cargo/emag_act(mob/user) - if(emagged) + if(obj_flags & EMAGGED) return user.visible_message("[user] swipes a suspicious card through [src]!", "You adjust [src]'s routing and receiver spectrum, unlocking special supplies and contraband.") - emagged = TRUE + obj_flags |= EMAGGED contraband = TRUE // This also permamently sets this on the circuit board var/obj/item/circuitboard/computer/cargo/board = circuit board.contraband = TRUE - board.emagged = TRUE + board.obj_flags |= EMAGGED /obj/machinery/computer/cargo/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, \ datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) @@ -69,7 +72,7 @@ "name" = P.group, "packs" = list() ) - if((P.hidden && !emagged) || (P.contraband && !contraband) || (P.special && !P.special_enabled) || P.DropPodOnly) + if((P.hidden && !(obj_flags & EMAGGED)) || (P.contraband && !contraband) || (P.special && !P.special_enabled) || P.DropPodOnly) continue data["supplies"][P.group]["packs"] += list(list( "name" = P.name, @@ -111,7 +114,10 @@ say(blockade_warning) return if(SSshuttle.supply.getDockedId() == "supply_home") - SSshuttle.supply.emagged = emagged + if (obj_flags & EMAGGED) + SSshuttle.supply.obj_flags |= EMAGGED + else + SSshuttle.supply.obj_flags = (SSshuttle.supply.obj_flags & ~EMAGGED) SSshuttle.supply.contraband = contraband SSshuttle.moveShuttle("supply", "supply_away", TRUE) say("The supply shuttle has departed.") @@ -140,7 +146,7 @@ var/datum/supply_pack/pack = SSshuttle.supply_packs[id] if(!istype(pack)) return - if((pack.hidden && !emagged) || (pack.contraband && !contraband) || pack.DropPodOnly) + if((pack.hidden && !(obj_flags & EMAGGED)) || (pack.contraband && !contraband) || pack.DropPodOnly) return var/name = "*None Provided*" diff --git a/code/modules/cargo/export_scanner.dm b/code/modules/cargo/export_scanner.dm index 79f6b9dfaf..874efd88d5 100644 --- a/code/modules/cargo/export_scanner.dm +++ b/code/modules/cargo/export_scanner.dm @@ -29,7 +29,7 @@ else // Before you fix it: // yes, checking manifests is a part of intended functionality. - var/price = export_item_and_contents(O, cargo_console.contraband, cargo_console.emagged, dry_run=TRUE) + var/price = export_item_and_contents(O, cargo_console.contraband, (cargo_console.obj_flags & EMAGGED), dry_run=TRUE) if(price) to_chat(user, "Scanned [O], value: [price] credits[O.contents.len ? " (contents included)" : ""].") diff --git a/code/modules/cargo/expressconsole.dm b/code/modules/cargo/expressconsole.dm index 66458c4d36..b8ed56413d 100644 --- a/code/modules/cargo/expressconsole.dm +++ b/code/modules/cargo/expressconsole.dm @@ -32,16 +32,16 @@ return TRUE /obj/machinery/computer/cargo/express/emag_act(mob/living/user) - if(emagged) + if(obj_flags & EMAGGED) return user.visible_message("[user] swipes a suspicious card through [src]!", "You change the routing protocols, allowing the Drop Pod to land anywhere on the station.") - emagged = TRUE + obj_flags |= EMAGGED // This also sets this on the circuit board var/obj/item/circuitboard/computer/cargo/board = circuit - board.emagged = TRUE + board.obj_flags |= EMAGGED packin_up() - + /obj/machinery/computer/cargo/express/proc/packin_up() // oh shit, I'm sorry meme_pack_data = list() // sorry for what? for(var/pack in SSshuttle.supply_packs) // our quartermaster taught us not to be ashamed of our supply packs @@ -53,7 +53,7 @@ ) // see, my quartermaster taught me a few things too if((P.hidden) || (P.special)) // like, how not to rip the manifest continue// by using someone else's crate - if(!emagged && P.contraband) // will you show me? + if(!(obj_flags & EMAGGED) && P.contraband) // will you show me? continue // i'd be right happy to meme_pack_data[P.group]["packs"] += list(list( "name" = P.name, @@ -78,15 +78,15 @@ Sales are near-instantaneous - please choose carefully." if(SSshuttle.supplyBlocked) message = blockade_warning - if(emagged) + if(obj_flags & EMAGGED) message = "(&!#@ERROR: ROUTING_#PROTOCOL MALF(*CT#ON. $UG%ESTE@ ACT#0N: !^/PULS3-%E)ET CIR*)ITB%ARD." - + data["message"] = message if(!meme_pack_data) packin_up() stack_trace("You didn't give the cargo tech good advice, and he ripped the manifest. As a result, there was no pack data for [src]") data["supplies"] = meme_pack_data - + return data /obj/machinery/computer/cargo/express/ui_act(action, params, datum/tgui/ui) @@ -110,7 +110,7 @@ var/list/empty_turfs var/area/landingzone var/datum/supply_order/SO = new(pack, name, rank, ckey, reason) - if(!emagged) + if(!(obj_flags & EMAGGED)) if(SO.pack.cost * 2 <= SSshuttle.points) landingzone = locate(/area/quartermaster/storage) in GLOB.sortedAreas for(var/turf/open/floor/T in landingzone.contents) diff --git a/code/modules/cargo/packs.dm b/code/modules/cargo/packs.dm index e575773233..0d4471fd43 100644 --- a/code/modules/cargo/packs.dm +++ b/code/modules/cargo/packs.dm @@ -864,6 +864,14 @@ /datum/supply_pack/science group = "Science" crate_type = /obj/structure/closet/crate/science + +/datum/supply_pack/science/bz + name = "BZ canister" + cost = 4000 + access = ACCESS_TOX_STORAGE + contains = list(/obj/machinery/portable_atmospherics/canister/bz) + crate_name = "BZ canister crate" + crate_type = /obj/structure/closet/crate/secure/science /datum/supply_pack/science/robotics name = "Robotics Assembly Crate" @@ -982,7 +990,7 @@ /obj/item/pizzabox/meat, /obj/item/pizzabox/vegetable) crate_name = "pizza crate" - + /datum/supply_pack/organic/cream_piee name = "High-yield Clown-grade Cream Pie Crate" cost = 6000 @@ -1035,6 +1043,14 @@ contains = list(/mob/living/simple_animal/hostile/retaliate/goat) crate_name = "goat crate" +/datum/supply_pack/organic/critter/snake + name = "Snake Crate" + cost = 3000 + contains = list(/mob/living/simple_animal/hostile/retaliate/poison/snake, + /mob/living/simple_animal/hostile/retaliate/poison/snake, + /mob/living/simple_animal/hostile/retaliate/poison/snake) + crate_name = "snake crate" + /datum/supply_pack/organic/critter/chick name = "Chicken Crate" cost = 2000 diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index 006ec5eae4..1646e24652 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -86,6 +86,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) "spines" = "None", "body_markings" = "None", "legs" = "Normal Legs", + "moth_wings" = "Plain", "mcolor2" = "FFF", "mcolor3" = "FFF", "mam_body_markings" = "None", @@ -472,6 +473,9 @@ GLOBAL_LIST_EMPTY(preferences_datums) dat += "Ears: [features["ears"]]
" if("legs" in pref_species.mutant_bodyparts) dat += "Legs: [features["legs"]]
" + if("moth_wings" in pref_species.mutant_bodyparts) + dat += "Moth wings[features["moth_wings"]]
" + if("taur" in pref_species.mutant_bodyparts) dat += "Taur: [features["taur"]]
" if("wings" in pref_species.mutant_bodyparts && GLOB.r_wings_list.len >1) @@ -1191,6 +1195,12 @@ GLOBAL_LIST_EMPTY(preferences_datums) new_wings = input(user, "Choose your character's wings:", "Character Preference") as null|anything in GLOB.r_wings_list if(new_wings) features["wings"] = new_wings + + if("moth_wings") + var/new_moth_wings + new_moth_wings = input(user, "Choose your character's wings:", "Character Preference") as null|anything in GLOB.moth_wings_list + if(new_moth_wings) + features["moth_wings"] = new_moth_wings if("frills") var/new_frills diff --git a/code/modules/client/preferences_savefile.dm b/code/modules/client/preferences_savefile.dm index 8e69c9aaec..723047f1d6 100644 --- a/code/modules/client/preferences_savefile.dm +++ b/code/modules/client/preferences_savefile.dm @@ -335,6 +335,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car S["feature_lizard_spines"] >> features["spines"] S["feature_lizard_body_markings"] >> features["body_markings"] S["feature_lizard_legs"] >> features["legs"] + S["feature_moth_wings"] >> features["moth_wings"] if(!CONFIG_GET(flag/join_with_mutant_humans)) features["tail_human"] = "none" features["ears"] = "none" @@ -457,6 +458,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car features["spines"] = sanitize_inlist(features["spines"], GLOB.spines_list) features["body_markings"] = sanitize_inlist(features["body_markings"], GLOB.body_markings_list) features["feature_lizard_legs"] = sanitize_inlist(features["legs"], GLOB.legs_list, "Normal Legs") + features["moth_wings"] = sanitize_inlist(features["moth_wings"], GLOB.moth_wings_list, "Plain") joblessrole = sanitize_integer(joblessrole, 1, 3, initial(joblessrole)) job_civilian_high = sanitize_integer(job_civilian_high, 0, 65535, initial(job_civilian_high)) @@ -512,6 +514,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car WRITE_FILE(S["feature_lizard_spines"] , features["spines"]) WRITE_FILE(S["feature_lizard_body_markings"] , features["body_markings"]) WRITE_FILE(S["feature_lizard_legs"] , features["legs"]) + WRITE_FILE(S["feature_moth_wings"] , features["moth_wings"]) WRITE_FILE(S["human_name"] , custom_names["human"]) WRITE_FILE(S["clown_name"] , custom_names["clown"]) WRITE_FILE(S["mime_name"] , custom_names["mime"]) diff --git a/code/modules/client/verbs/suicide.dm b/code/modules/client/verbs/suicide.dm index c9293a3e46..a6b7156ea8 100644 --- a/code/modules/client/verbs/suicide.dm +++ b/code/modules/client/verbs/suicide.dm @@ -2,7 +2,6 @@ /mob/living/carbon/human/verb/suicide() set hidden = 1 - return if(!canSuicide()) return var/oldkey = ckey @@ -57,11 +56,11 @@ suicide_message = pick("[src] is attempting to push [p_their()] own head off [p_their()] shoulders! It looks like [p_theyre()] trying to commit suicide.", \ "[src] is pushing [p_their()] thumbs into [p_their()] eye sockets! It looks like [p_theyre()] trying to commit suicide.", \ "[src] is ripping [p_their()] own arms off! It looks like [p_theyre()] trying to commit suicide.")//heheh get it? - if(a_intent == INTENT_GRAB) + if(a_intent == INTENT_GRAB) suicide_message = pick("[src] is attempting to pull [p_their()] own head off! It looks like [p_theyre()] trying to commit suicide.", \ "[src] is aggressively grabbing [p_their()] own neck! It looks like [p_theyre()] trying to commit suicide.", \ "[src] is pulling [p_their()] eyes out of their sockets! It looks like [p_theyre()] trying to commit suicide.") - if(a_intent == INTENT_HELP) + if(a_intent == INTENT_HELP) suicide_message = pick("[src] is hugging [p_them()]self to death! It looks like [p_theyre()] trying to commit suicide.", \ "[src] is high-fiving [p_them()]self to death! It looks like [p_theyre()] trying to commit suicide.", \ "[src] is getting too high on life! It looks like [p_theyre()] trying to commit suicide.") @@ -189,7 +188,7 @@ if(!canmove || restrained()) //just while I finish up the new 'fun' suiciding verb. This is to prevent metagaming via suicide to_chat(src, "You can't commit suicide whilst restrained! ((You can type Ghost instead however.))") return - if(has_brain_worms()) - to_chat(src, "You can't bring yourself to commit suicide!") - return +// if(has_brain_worms()) +// to_chat(src, "You can't bring yourself to commit suicide!") +// return return TRUE diff --git a/code/modules/clothing/chameleon.dm b/code/modules/clothing/chameleon.dm index ee02702862..fabd8c1fd1 100644 --- a/code/modules/clothing/chameleon.dm +++ b/code/modules/clothing/chameleon.dm @@ -419,7 +419,7 @@ desc = "A modified version of the basic laser gun, this one fires less concentrated energy bolts designed for target practice." ammo_type = list(/obj/item/ammo_casing/energy/chameleon) clumsy_check = 0 - needs_permit = 0 + item_flags = NONE pin = /obj/item/device/firing_pin cell_type = /obj/item/stock_parts/cell/bluespace diff --git a/code/modules/clothing/glasses/_glasses.dm b/code/modules/clothing/glasses/_glasses.dm index 7a9a4a2a29..84d2613082 100644 --- a/code/modules/clothing/glasses/_glasses.dm +++ b/code/modules/clothing/glasses/_glasses.dm @@ -45,7 +45,7 @@ /obj/item/clothing/glasses/proc/thermal_overload() if(ishuman(src.loc)) var/mob/living/carbon/human/H = src.loc - if(!(H.has_disability(DISABILITY_BLIND))) + if(!(H.has_trait(TRAIT_BLIND))) if(H.glasses == src) to_chat(H, "[src] overloads and blinds you!") H.flash_act(visual = 1) diff --git a/code/modules/clothing/glasses/hud.dm b/code/modules/clothing/glasses/hud.dm index 4d59a893ea..626bf4f542 100644 --- a/code/modules/clothing/glasses/hud.dm +++ b/code/modules/clothing/glasses/hud.dm @@ -17,15 +17,15 @@ H.remove_hud_from(user) /obj/item/clothing/glasses/hud/emp_act(severity) - if(emagged) + if(obj_flags & EMAGGED) return - emagged = TRUE + obj_flags |= EMAGGED desc = "[desc] The display is flickering slightly." /obj/item/clothing/glasses/hud/emag_act(mob/user) - if(emagged) + if(obj_flags & EMAGGED) return - emagged = TRUE + obj_flags |= EMAGGED to_chat(user, "PZZTTPFFFT") desc = "[desc] The display is flickering slightly." diff --git a/code/modules/clothing/neck/_neck.dm b/code/modules/clothing/neck/_neck.dm index 011e21c372..7d81e2d005 100644 --- a/code/modules/clothing/neck/_neck.dm +++ b/code/modules/clothing/neck/_neck.dm @@ -66,7 +66,7 @@ var/obj/item/organ/heart/heart = M.getorganslot(ORGAN_SLOT_HEART) var/obj/item/organ/lungs/lungs = M.getorganslot(ORGAN_SLOT_LUNGS) - if(!(M.stat == DEAD || (M.status_flags&FAKEDEATH))) + if(!(M.stat == DEAD || (M.has_trait(TRAIT_FAKEDEATH)))) if(heart && istype(heart)) heart_strength = "an unstable" if(heart.beating) diff --git a/code/modules/clothing/spacesuits/flightsuit.dm b/code/modules/clothing/spacesuits/flightsuit.dm index 681ba3e789..f515dacc74 100644 --- a/code/modules/clothing/spacesuits/flightsuit.dm +++ b/code/modules/clothing/spacesuits/flightsuit.dm @@ -435,7 +435,7 @@ var/nopass = FALSE if(!A.density) return TRUE - nopass = (A.locked || A.stat || A.emagged || A.welded) + nopass = (A.locked || A.stat || (A.obj_flags & EMAGGED) || A.welded) if(A.requiresID()) if((!A.allowed(wearer)) && !A.emergency) nopass = TRUE diff --git a/code/modules/clothing/suits/_suits.dm b/code/modules/clothing/suits/_suits.dm index 1ff8c65d4b..43b30b383e 100644 --- a/code/modules/clothing/suits/_suits.dm +++ b/code/modules/clothing/suits/_suits.dm @@ -7,6 +7,7 @@ slot_flags = SLOT_OCLOTHING var/blood_overlay_type = "suit" var/togglename = null + var/suittoggled = FALSE /obj/item/clothing/suit/worn_overlays(isinhands = FALSE) @@ -28,4 +29,4 @@ ..() if(ismob(loc)) var/mob/M = loc - M.update_inv_wear_suit() \ No newline at end of file + M.update_inv_wear_suit() diff --git a/code/modules/clothing/suits/toggles.dm b/code/modules/clothing/suits/toggles.dm index f0f2a5af1f..d036710ce4 100644 --- a/code/modules/clothing/suits/toggles.dm +++ b/code/modules/clothing/suits/toggles.dm @@ -4,7 +4,6 @@ actions_types = list(/datum/action/item_action/toggle_hood) 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 - hooded = 1 /obj/item/clothing/suit/hooded/New() MakeHood() diff --git a/code/modules/clothing/under/accessories.dm b/code/modules/clothing/under/accessories.dm index 49364e76d9..30105fecac 100644 --- a/code/modules/clothing/under/accessories.dm +++ b/code/modules/clothing/under/accessories.dm @@ -28,8 +28,13 @@ pixel_y -= 8 U.add_overlay(src) - for(var/armor_type in armor) - U.armor[armor_type] += armor[armor_type] + if (islist(U.armor)) // This proc can run before /obj/Initialize has run for U and src, + U.armor = getArmor(arglist(U.armor)) // we have to check that the armor list has been transformed into a datum before we try to call a proc on it + // This is safe to do as /obj/Initialize only handles setting up the datum if actually needed. + if (islist(armor)) + armor = getArmor(arglist(armor)) + + U.armor = U.armor.attachArmor(armor) if(isliving(user)) on_uniform_equip(U, user) @@ -42,8 +47,7 @@ pockets.forceMove(src) U.pockets = null - for(var/armor_type in armor) - U.armor[armor_type] -= armor[armor_type] + U.armor = U.armor.detachArmor(armor) if(isliving(user)) on_uniform_dropped(U, user) diff --git a/code/modules/crafting/recipes.dm b/code/modules/crafting/recipes.dm index 7ad03c6e9d..86eddf3d2a 100644 --- a/code/modules/crafting/recipes.dm +++ b/code/modules/crafting/recipes.dm @@ -543,6 +543,26 @@ result = /obj/structure/bonfire category = CAT_PRIMAL +/datum/crafting_recipe/headpike + name = "Spike Head (Glass Spear)" + time = 65 + reqs = list(/obj/item/twohanded/spear = 1, + /obj/item/bodypart/head = 1) + parts = list(/obj/item/bodypart/head = 1, + /obj/item/twohanded/spear = 1) + result = /obj/structure/headpike + category = CAT_PRIMAL + +/datum/crafting_recipe/headpikebone + name = "Spike Head (Bone Spear)" + time = 65 + reqs = list(/obj/item/twohanded/bonespear = 1, + /obj/item/bodypart/head = 1) + parts = list(/obj/item/bodypart/head = 1, + /obj/item/twohanded/bonespear = 1) + result = /obj/structure/headpike/bone + category = CAT_PRIMAL + /datum/crafting_recipe/smallcarton name = "Small Carton" result = /obj/item/reagent_containers/food/drinks/sillycup/smallcarton diff --git a/code/modules/error_handler/error_handler.dm b/code/modules/error_handler/error_handler.dm index 06ff548e42..d0064d7f99 100644 --- a/code/modules/error_handler/error_handler.dm +++ b/code/modules/error_handler/error_handler.dm @@ -116,10 +116,17 @@ GLOBAL_VAR_INIT(total_runtimes_skipped, 0) if(GLOB.error_cache) GLOB.error_cache.log_error(E, desclines) - SEND_TEXT(world.log, "\[[time_stamp()]] Runtime in [E.file],[E.line]: [E]") + var/main_line = "\[[time_stamp()]] Runtime in [E.file],[E.line]: [E]" + SEND_TEXT(world.log, main_line) for(var/line in desclines) SEND_TEXT(world.log, line) +#ifdef UNIT_TESTS + if(GLOB.current_test) + //good day, sir + GLOB.current_test.Fail("[main_line]\n[desclines.Join("\n")]") +#endif + /* This logs the runtime in the old format */ E.name = "\n\[[time2text(world.timeofday,"hh:mm:ss")]\][E.name]" diff --git a/code/modules/events/disease_outbreak.dm b/code/modules/events/disease_outbreak.dm index f2e3104ab8..c8b8db0681 100644 --- a/code/modules/events/disease_outbreak.dm +++ b/code/modules/events/disease_outbreak.dm @@ -51,7 +51,7 @@ var/datum/disease/D if(!advanced_virus) if(virus_type == /datum/disease/dnaspread) //Dnaspread needs strain_data set to work. - if(!H.dna || (H.has_disability(DISABILITY_BLIND))) //A blindness disease would be the worst. + if(!H.dna || (H.has_trait(TRAIT_BLIND))) //A blindness disease would be the worst. continue D = new virus_type() var/datum/disease/dnaspread/DS = D diff --git a/code/modules/events/electrical_storm.dm b/code/modules/events/electrical_storm.dm index 12e1f255e6..d887ebda6e 100644 --- a/code/modules/events/electrical_storm.dm +++ b/code/modules/events/electrical_storm.dm @@ -19,18 +19,15 @@ var/list/epicentreList = list() for(var/i=1, i <= lightsoutAmount, i++) - var/list/possibleEpicentres = list() - for(var/obj/effect/landmark/lightsout/newEpicentre in GLOB.landmarks_list) - if(!(newEpicentre in epicentreList)) - possibleEpicentres += newEpicentre - if(possibleEpicentres.len) - epicentreList += pick(possibleEpicentres) - else - break + var/turf/T = find_safe_turf() + if(istype(T)) + epicentreList += T if(!epicentreList.len) return - for(var/obj/effect/landmark/epicentre in epicentreList) - for(var/obj/machinery/power/apc/apc in urange(lightsoutRange, epicentre)) - apc.overload_lighting() + for(var/centre in epicentreList) + for(var/a in GLOB.apcs_list) + var/obj/machinery/power/apc/A = a + if(get_dist(centre, A) <= lightsoutRange) + A.overload_lighting() diff --git a/code/modules/events/pirates.dm b/code/modules/events/pirates.dm index b94f7dd9eb..2ec6422bb2 100644 --- a/code/modules/events/pirates.dm +++ b/code/modules/events/pirates.dm @@ -188,7 +188,7 @@ name = "pirate shuttle navigation computer" desc = "Used to designate a precise transit location for the pirate shuttle." shuttleId = "pirateship" - station_lock_override = TRUE + lock_override = CAMERA_LOCK_STATION shuttlePortId = "pirateship_custom" shuttlePortName = "custom location" x_offset = 9 diff --git a/code/modules/events/wizard/rpgloot.dm b/code/modules/events/wizard/rpgloot.dm index d1dd3bac80..7254583b17 100644 --- a/code/modules/events/wizard/rpgloot.dm +++ b/code/modules/events/wizard/rpgloot.dm @@ -109,7 +109,6 @@ I.force = max(0,I.force + quality_mod) I.throwforce = max(0,I.throwforce + quality_mod) - for(var/value in I.armor) - I.armor[value] += quality + I.armor = I.armor.modifyAllRatings(quality) rename() diff --git a/code/modules/food_and_drinks/drinks/drinks/bottle.dm b/code/modules/food_and_drinks/drinks/drinks/bottle.dm index dfa6315b04..407870073d 100644 --- a/code/modules/food_and_drinks/drinks/drinks/bottle.dm +++ b/code/modules/food_and_drinks/drinks/drinks/bottle.dm @@ -68,12 +68,7 @@ //If they have a hat/helmet and the user is targeting their head. if(istype(H.head, /obj/item/clothing/head) && affecting == "head") - - // If their head has an armor value, assign headarmor to it, else give it 0. - if(H.head.armor["melee"]) - headarmor = H.head.armor["melee"] - else - headarmor = 0 + headarmor = H.head.armor.melee else headarmor = 0 diff --git a/code/modules/food_and_drinks/drinks/drinks/drinkingglass.dm b/code/modules/food_and_drinks/drinks/drinks/drinkingglass.dm index 263d592303..a91d5a6a7b 100644 --- a/code/modules/food_and_drinks/drinks/drinks/drinkingglass.dm +++ b/code/modules/food_and_drinks/drinks/drinks/drinkingglass.dm @@ -10,7 +10,7 @@ max_integrity = 20 spillable = TRUE resistance_flags = ACID_PROOF - unique_rename = 1 + obj_flags = UNIQUE_RENAME /obj/item/reagent_containers/food/drinks/drinkingglass/on_reagent_change(changetype) cut_overlays() diff --git a/code/modules/food_and_drinks/food/customizables.dm b/code/modules/food_and_drinks/food/customizables.dm index 7d83788f9d..353bfc6538 100644 --- a/code/modules/food_and_drinks/food/customizables.dm +++ b/code/modules/food_and_drinks/food/customizables.dm @@ -15,7 +15,6 @@ bitesize = 4 w_class = WEIGHT_CLASS_SMALL volume = 80 - unique_rename = 1 var/ingMax = 12 var/list/ingredients = list() diff --git a/code/modules/food_and_drinks/food/snacks.dm b/code/modules/food_and_drinks/food/snacks.dm index b0e2067be0..cb5e3c6248 100644 --- a/code/modules/food_and_drinks/food/snacks.dm +++ b/code/modules/food_and_drinks/food/snacks.dm @@ -5,7 +5,7 @@ icon_state = null lefthand_file = 'icons/mob/inhands/misc/food_lefthand.dmi' righthand_file = 'icons/mob/inhands/misc/food_righthand.dmi' - unique_rename = 1 + obj_flags = UNIQUE_RENAME grind_results = list() //To let them be ground up to transfer their reagents var/bitesize = 2 var/bitecount = 0 diff --git a/code/modules/food_and_drinks/food/snacks/meat.dm b/code/modules/food_and_drinks/food/snacks/meat.dm index e43309892d..6dcad1d683 100644 --- a/code/modules/food_and_drinks/food/snacks/meat.dm +++ b/code/modules/food_and_drinks/food/snacks/meat.dm @@ -108,6 +108,13 @@ tastes = list("maggots" = 1, "the inside of a reactor" = 1) foodtype = MEAT | RAW | GROSS +/obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/moth + icon_state = "mothmeat" + desc = "Unpleasantly powdery and dry. Kind of pretty, though." + filling_color = "#BF896B" + tastes = list("dust" = 1, "powder" = 1, "meat" = 2) + foodtype = MEAT | RAW + /obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/skeleton name = "bone" icon_state = "skeletonmeat" @@ -119,14 +126,13 @@ /obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/zombie name = " meat (rotten)" - icon_state = "lizardmeat" //Close enough. + icon_state = "rottenmeat" desc = "Halfway to becoming fertilizer for your garden." filling_color = "#6B8E23" tastes = list("brains" = 1, "meat" = 1) foodtype = RAW | MEAT | TOXIC - ////////////////////////////////////// OTHER MEATS //////////////////////////////////////////////////////// diff --git a/code/modules/food_and_drinks/kitchen_machinery/smartfridge.dm b/code/modules/food_and_drinks/kitchen_machinery/smartfridge.dm index cefa8ce0ac..cfbc95d7c0 100644 --- a/code/modules/food_and_drinks/kitchen_machinery/smartfridge.dm +++ b/code/modules/food_and_drinks/kitchen_machinery/smartfridge.dm @@ -222,7 +222,7 @@ component_parts = null /obj/machinery/smartfridge/drying_rack/on_deconstruction() - new /obj/item/stack/sheet/mineral/wood(loc, 10) + new /obj/item/stack/sheet/mineral/wood(drop_location(), 10) ..() /obj/machinery/smartfridge/drying_rack/RefreshParts() @@ -297,7 +297,7 @@ update_icon() /obj/machinery/smartfridge/drying_rack/proc/rack_dry() - for(var/obj/item/reagent_containers/food/snacks/S in contents) + for(var/obj/item/reagent_containers/food/snacks/S in src) if(S.dried_type == S.type)//if the dried type is the same as the object's type, don't bother creating a whole new item... S.add_atom_colour("#ad7257", FIXED_COLOUR_PRIORITY) S.dry = TRUE @@ -307,8 +307,8 @@ new dried(drop_location()) qdel(S) return TRUE - for(var/obj/item/stack/sheet/wetleather/WL in contents) - var/obj/item/stack/sheet/leather/L = new(loc) + for(var/obj/item/stack/sheet/wetleather/WL in src) + var/obj/item/stack/sheet/leather/L = new(drop_location()) L.amount = WL.amount qdel(WL) return TRUE diff --git a/code/modules/food_and_drinks/recipes/drinks_recipes.dm b/code/modules/food_and_drinks/recipes/drinks_recipes.dm index a5c21aa0f5..bc894488b2 100644 --- a/code/modules/food_and_drinks/recipes/drinks_recipes.dm +++ b/code/modules/food_and_drinks/recipes/drinks_recipes.dm @@ -547,4 +547,12 @@ name = "eggnog" id = "eggnog" results = list("eggnog" = 15) - required_reagents = list("rum" = 5, "cream" = 5, "eggyolk" = 5) \ No newline at end of file + required_reagents = list("rum" = 5, "cream" = 5, "eggyolk" = 5) + +/datum/chemical_reaction/narsour + name = "Nar'sour" + id = "narsour" + results = list("narsour" = 1) + required_reagents = list("blood" = 1, "lemonjuice" = 1, "demonsblood" = 1) + mix_message = "The mixture develops a sinister glow." + mix_sound = 'sound/effects/singlebeat.ogg' diff --git a/code/modules/holodeck/computer.dm b/code/modules/holodeck/computer.dm index 97b610a5d2..a55a5e1657 100644 --- a/code/modules/holodeck/computer.dm +++ b/code/modules/holodeck/computer.dm @@ -90,7 +90,7 @@ var/list/data = list() data["default_programs"] = program_cache - if(emagged) + if(obj_flags & EMAGGED) data["emagged"] = TRUE data["emag_programs"] = emag_programs data["program"] = program @@ -111,10 +111,10 @@ if(A) load_program(A) if("safety") - emagged = !emagged - if(emagged && program && emag_programs[program.name]) + obj_flags ^= EMAGGED + if((obj_flags & EMAGGED) && program && emag_programs[program.name]) emergency_shutdown() - nerf(emagged) + nerf(obj_flags & EMAGGED) /obj/machinery/computer/holodeck/process() if(damaged && prob(10)) @@ -138,7 +138,7 @@ T.ex_act(EXPLODE_LIGHT) T.hotspot_expose(1000,500,1) - if(!emagged) + if(!(obj_flags & EMAGGED)) for(var/item in spawned) if(!(get_turf(item) in linked)) derez(item, 0) @@ -149,17 +149,17 @@ active_power_usage = 50 + spawned.len * 3 + effects.len * 5 /obj/machinery/computer/holodeck/emag_act(mob/user) - if(emagged) + if(obj_flags & EMAGGED) return if(!LAZYLEN(emag_programs)) to_chat(user, "[src] does not seem to have a card swipe port. It must be an inferior model.") return playsound(src, "sparks", 75, 1) - emagged = TRUE + obj_flags |= EMAGGED to_chat(user, "You vastly increase projector power and override the safety and security protocols.") to_chat(user, "Warning. Automatic shutoff and derezing protocols have been corrupted. Please call Nanotrasen maintenance and do not use the simulator.") log_game("[key_name(user)] emagged the Holodeck Control Console") - nerf(!emagged) + nerf(!(obj_flags & EMAGGED)) /obj/machinery/computer/holodeck/emp_act(severity) emergency_shutdown() @@ -245,7 +245,7 @@ // note nerfing does not yet work on guns, should // should also remove/limit/filter reagents? // this is an exercise left to others I'm afraid. -Sayu - spawned = A.copy_contents_to(linked, 1, nerf_weapons = !emagged) + spawned = A.copy_contents_to(linked, 1, nerf_weapons = !(obj_flags & EMAGGED)) for(var/obj/machinery/M in spawned) M.flags_1 |= NODECONSTRUCT_1 for(var/obj/structure/S in spawned) @@ -270,7 +270,7 @@ /obj/machinery/computer/holodeck/proc/derez(obj/O, silent = TRUE, forced = FALSE) // Emagging a machine creates an anomaly in the derez systems. - if(O && emagged && !stat && !forced) + if(O && (obj_flags & EMAGGED) && !stat && !forced) if((ismob(O) || ismob(O.loc)) && prob(50)) addtimer(CALLBACK(src, .proc/derez, O, silent), 50) // may last a disturbingly long time return diff --git a/code/modules/holodeck/holo_effect.dm b/code/modules/holodeck/holo_effect.dm index 25667706ab..b870ad4c30 100644 --- a/code/modules/holodeck/holo_effect.dm +++ b/code/modules/holodeck/holo_effect.dm @@ -32,7 +32,7 @@ /obj/effect/holodeck_effect/cards/activate(var/obj/machinery/computer/holodeck/HC) D = new(loc) - safety(!HC.emagged) + safety(!(HC.obj_flags & EMAGGED)) D.holo = HC return D diff --git a/code/modules/hydroponics/gene_modder.dm b/code/modules/hydroponics/gene_modder.dm index fa1e25a6d4..70f6f225ec 100644 --- a/code/modules/hydroponics/gene_modder.dm +++ b/code/modules/hydroponics/gene_modder.dm @@ -45,7 +45,7 @@ min_wrate = FLOOR(10-wratemod,1) // 7,5,2,0 Clamps at 0 and 10 You want this low min_wchance = 67-(ML.rating*16) // 48,35,19,3 Clamps at 0 and 67 You want this low for(var/obj/item/circuitboard/machine/plantgenes/vaultcheck in component_parts) - if(istype(vaultcheck, /obj/item/circuitboard/machine/plantgenes/vault)) // DISABILITY_DUMB BOTANY TUTS + if(istype(vaultcheck, /obj/item/circuitboard/machine/plantgenes/vault)) // TRAIT_DUMB BOTANY TUTS max_potency = 100 max_yield = 10 min_production = 1 @@ -420,7 +420,7 @@ materials = list(MAT_METAL=30, MAT_GLASS=10) var/datum/plant_gene/gene var/read_only = 0 //Well, it's still a floppy disk - unique_rename = 1 + obj_flags = UNIQUE_RENAME /obj/item/disk/plantgene/Initialize() . = ..() diff --git a/code/modules/hydroponics/hydroponics.dm b/code/modules/hydroponics/hydroponics.dm index c46fb92feb..8fc5c43bcc 100644 --- a/code/modules/hydroponics/hydroponics.dm +++ b/code/modules/hydroponics/hydroponics.dm @@ -5,7 +5,7 @@ density = TRUE anchored = TRUE pixel_y = 8 - unique_rename = 1 + obj_flags = CAN_BE_HIT | UNIQUE_RENAME circuit = /obj/item/circuitboard/machine/hydroponics var/waterlevel = 100 //The amount of water in the tray (max 100) var/maxwater = 100 //The maximum amount of water in the tray diff --git a/code/modules/jobs/job_exp.dm b/code/modules/jobs/job_exp.dm index 534e530e17..52b4a5de32 100644 --- a/code/modules/jobs/job_exp.dm +++ b/code/modules/jobs/job_exp.dm @@ -271,4 +271,4 @@ GLOBAL_PROTECT(exp_to_update) prefs.db_flags = text2num(flags_read.item[1]) else if(isnull(prefs.db_flags)) prefs.db_flags = 0 //This PROBABLY won't happen, but better safe than sorry. - return TRUE \ No newline at end of file + return TRUE diff --git a/code/modules/jobs/job_types/civilian.dm b/code/modules/jobs/job_types/civilian.dm index 5ab8249215..67bc2143f8 100644 --- a/code/modules/jobs/job_types/civilian.dm +++ b/code/modules/jobs/job_types/civilian.dm @@ -152,7 +152,7 @@ Curator return H.grant_all_languages(omnitongue=TRUE) - + H.gain_trauma(/datum/brain_trauma/mild/phobia, FALSE, "snakes") //why does it have to be snakes... /* Lawyer */ diff --git a/code/modules/keybindings/bindings_admin.dm b/code/modules/keybindings/bindings_admin.dm index 812bb95784..44cbb796fb 100644 --- a/code/modules/keybindings/bindings_admin.dm +++ b/code/modules/keybindings/bindings_admin.dm @@ -1,5 +1,8 @@ /datum/admins/key_down(_key, client/user) switch(_key) + if("F3") + user.get_admin_say() + return if("F5") user.admin_ghost() return diff --git a/code/modules/language/moth.dm b/code/modules/language/moth.dm index 0b7523c27d..e69de29bb2 100644 --- a/code/modules/language/moth.dm +++ b/code/modules/language/moth.dm @@ -1,12 +0,0 @@ -/datum/language/moth - name = "Lepidopterian" - desc = "The common language of moths, composed of various noises made of wing fluttering and clicks." - speech_verb = "flutters" - ask_verb = "clicks" - exclaim_verb = "buzzes" - key = "m" - space_chance = 45 - syllables = list("bz", "ba", "mah", "fa", "ki", "nr") - default_priority = 90 - - icon_state = "moth" diff --git a/code/modules/library/lib_machines.dm b/code/modules/library/lib_machines.dm index 35d87ce30e..f0b881c9e2 100644 --- a/code/modules/library/lib_machines.dm +++ b/code/modules/library/lib_machines.dm @@ -214,7 +214,7 @@ GLOBAL_LIST(cachedbooks) // List of our cached book datums dat += "5. Upload New Title to Archive
" dat += "6. Upload Scanned Title to Newscaster
" dat += "7. Print Corporate Materials
" - if(src.emagged) + if(obj_flags & EMAGGED) dat += "8. Access the Forbidden Lore Vault
" if(src.arcanecheckout) print_forbidden_lore(user) @@ -339,8 +339,8 @@ GLOBAL_LIST(cachedbooks) // List of our cached book datums return ..() /obj/machinery/computer/libraryconsole/bookmanagement/emag_act(mob/user) - if(density && !emagged) - emagged = TRUE + if(density && !(obj_flags & EMAGGED)) + obj_flags |= EMAGGED /obj/machinery/computer/libraryconsole/bookmanagement/Topic(href, href_list) if(..()) @@ -370,7 +370,7 @@ GLOBAL_LIST(cachedbooks) // List of our cached book datums if("8") screenstate = 8 if(href_list["arccheckout"]) - if(src.emagged) + if(obj_flags & EMAGGED) src.arcanecheckout = 1 src.screenstate = 0 if(href_list["increasetime"]) @@ -403,7 +403,7 @@ GLOBAL_LIST(cachedbooks) // List of our cached book datums if(newauthor) scanner.cache.author = newauthor if(href_list["setcategory"]) - var/newcategory = input("Choose a category: ") in list("Fiction", "Non-Fiction", "Adult", "Reference", "Religion", "Technical") + var/newcategory = input("Choose a category: ") in list("Fiction", "Non-Fiction", "Adult", "Reference", "Religion","Technical") if(newcategory) upload_category = newcategory if(href_list["upload"]) diff --git a/code/modules/mapping/reader.dm b/code/modules/mapping/reader.dm index 5b2a73d708..0e37d74c1b 100644 --- a/code/modules/mapping/reader.dm +++ b/code/modules/mapping/reader.dm @@ -98,7 +98,8 @@ GLOBAL_DATUM_INIT(_preloader, /dmm_suite/preloader, new) if(cropMap) continue else - world.maxz = zcrd //create a new z_level if needed + while (zcrd > world.maxz) //create a new z_level if needed + world.incrementMaxZ() if(!no_changeturf) WARNING("Z-level expansion occurred without no_changeturf set, this may cause problems when /turf/AfterChange is called") diff --git a/code/modules/mapping/space_management/zlevel_manager.dm b/code/modules/mapping/space_management/zlevel_manager.dm index e2b313220c..5a442c5b6a 100644 --- a/code/modules/mapping/space_management/zlevel_manager.dm +++ b/code/modules/mapping/space_management/zlevel_manager.dm @@ -19,7 +19,7 @@ /datum/controller/subsystem/mapping/proc/add_new_zlevel(name, linkage = SELFLOOPING, traits = list(), z_type = /datum/space_level) var/new_z = z_list.len + 1 if (world.maxz < new_z) - ++world.maxz + world.incrementMaxZ() CHECK_TICK // TODO: sleep here if the Z level needs to be cleared var/datum/space_level/S = new z_type(new_z, name, linkage, traits) diff --git a/code/modules/mining/equipment/goliath_hide.dm b/code/modules/mining/equipment/goliath_hide.dm index a96081540b..5950541fe7 100644 --- a/code/modules/mining/equipment/goliath_hide.dm +++ b/code/modules/mining/equipment/goliath_hide.dm @@ -21,9 +21,8 @@ return if(is_type_in_typecache(target, goliath_platable_armor_typecache)) var/obj/item/clothing/C = target - var/list/current_armor = C.armor - if(current_armor["melee"] < 60) - current_armor["melee"] = min(current_armor["melee"] + 10, 60) + if(armor.melee < 60) + armor = armor.setRating(melee = min(armor.melee + 10, 60)) to_chat(user, "You strengthen [target], improving its resistance against melee attacks.") use(1) else @@ -32,9 +31,10 @@ var/obj/mecha/working/ripley/D = target if(D.hides < 3) D.hides++ - D.armor["melee"] = min(D.armor["melee"] + 10, 70) - D.armor["bullet"] = min(D.armor["bullet"] + 5, 50) - D.armor["laser"] = min(D.armor["laser"] + 5, 50) + D.armor = D.armor.setRating(\ + melee = min(D.armor.melee + 10, 70),\ + bullet = min(D.armor.laser + 5, 50),\ + laser = min(D.armor.laser + 5, 50)) to_chat(user, "You strengthen [target], improving its resistance against melee attacks.") D.update_icon() if(D.hides == 3) diff --git a/code/modules/mining/laborcamp/laborstacker.dm b/code/modules/mining/laborcamp/laborstacker.dm index 7b38bc4cb5..78417a56d1 100644 --- a/code/modules/mining/laborcamp/laborstacker.dm +++ b/code/modules/mining/laborcamp/laborstacker.dm @@ -44,7 +44,7 @@ var/list/data = list() var/can_go_home = FALSE - data["emagged"] = emagged + data["emagged"] = (obj_flags & EMAGGED) ? 1 : 0 if(inserted_id) data["id"] = inserted_id data["id_name"] = inserted_id.registered_name @@ -101,13 +101,13 @@ if(3) to_chat(usr, "No permission to dock could be granted.") else - if(!emagged) + if(!(obj_flags & EMAGGED)) Radio.set_frequency(FREQ_SECURITY) Radio.talk_into(src, "[inserted_id.registered_name] has returned to the station. Minerals and Prisoner ID card ready for retrieval.", FREQ_SECURITY, get_spans(), get_default_language()) to_chat(usr, "Shuttle received message and will be sent shortly.") /obj/machinery/mineral/labor_claim_console/proc/check_auth() - if(emagged) + if(obj_flags & EMAGGED) return 1 //Shuttle is emagged, let any ol' person through return (istype(inserted_id) && inserted_id.points >= inserted_id.goal) //Otherwise, only let them out if the prisoner's reached his quota. @@ -119,8 +119,8 @@ qdel(src) /obj/machinery/mineral/labor_claim_console/emag_act(mob/user) - if(!emagged) - emagged = TRUE + if(!(obj_flags & EMAGGED)) + obj_flags |= EMAGGED to_chat(user, "PZZTTPFFFT") diff --git a/code/modules/mining/lavaland/necropolis_chests.dm b/code/modules/mining/lavaland/necropolis_chests.dm index 21e69d0197..0e20420e2a 100644 --- a/code/modules/mining/lavaland/necropolis_chests.dm +++ b/code/modules/mining/lavaland/necropolis_chests.dm @@ -588,7 +588,7 @@ playsound(user, 'sound/magic/clockwork/fellowship_armory.ogg', 35, TRUE, frequency = 90000 - (active * 30000)) /obj/item/melee/transforming/cleaving_saw/clumsy_transform_effect(mob/living/user) - if(user.has_disability(DISABILITY_CLUMSY) && prob(50)) + if(user.has_trait(TRAIT_CLUMSY) && prob(50)) to_chat(user, "You accidentally cut yourself with [src], like a doofus!") user.take_bodypart_damage(10) diff --git a/code/modules/mining/lavaland/ruins/gym.dm b/code/modules/mining/lavaland/ruins/gym.dm index efda0f9c8f..b148495f44 100644 --- a/code/modules/mining/lavaland/ruins/gym.dm +++ b/code/modules/mining/lavaland/ruins/gym.dm @@ -21,11 +21,11 @@ anchored = TRUE /obj/structure/stacklifter/attack_hand(mob/living/user) - if(in_use) + if(obj_flags & IN_USE) to_chat(user, "It's already in use - wait a bit.") return else - in_use = 1 + obj_flags |= IN_USE icon_state = "fitnesslifter2" user.setDir(SOUTH) user.Stun(80) @@ -44,7 +44,7 @@ playsound(user, 'goon/sound/effects/spring.ogg', 60, 1) playsound(user, 'sound/machines/click.ogg', 60, 1) - in_use = 0 + obj_flags &= ~IN_USE user.pixel_y = 0 var/finishmessage = pick("You feel stronger!","You feel like you can take on the world!","You feel robust!","You feel indestructible!") icon_state = "fitnesslifter" @@ -59,11 +59,11 @@ anchored = TRUE /obj/structure/weightlifter/attack_hand(mob/living/user) - if(in_use) + if(obj_flags & IN_USE) to_chat(user, "It's already in use - wait a bit.") return else - in_use = 1 + obj_flags |= IN_USE icon_state = "fitnessweight-c" user.setDir(SOUTH) user.Stun(80) @@ -88,7 +88,7 @@ animate(user, pixel_y = 2, time = 3) sleep(3) playsound(user, 'sound/machines/click.ogg', 60, 1) - in_use = 0 + obj_flags &= ~IN_USE animate(user, pixel_y = 0, time = 3) var/finishmessage = pick("You feel stronger!","You feel like you can take on the world!","You feel robust!","You feel indestructible!") icon_state = "fitnessweight" diff --git a/code/modules/mob/dead/new_player/sprite_accessories.dm b/code/modules/mob/dead/new_player/sprite_accessories.dm index 674f44bcd2..57d912067e 100644 --- a/code/modules/mob/dead/new_player/sprite_accessories.dm +++ b/code/modules/mob/dead/new_player/sprite_accessories.dm @@ -1401,3 +1401,72 @@ /datum/sprite_accessory/legs/digitigrade_lizard name = "Digitigrade Legs" + +/datum/sprite_accessory/moth_wings + icon = 'icons/mob/wings.dmi' + color_src = null + +/datum/sprite_accessory/moth_wings/plain + name = "Plain" + icon_state = "plain" + +/datum/sprite_accessory/moth_wings/monarch + name = "Monarch" + icon_state = "monarch" + +/datum/sprite_accessory/moth_wings/luna + name = "Luna" + icon_state = "luna" + +/datum/sprite_accessory/moth_wings/atlas + name = "Atlas" + icon_state = "atlas" + +/datum/sprite_accessory/moth_wings/reddish + name = "Reddish" + icon_state = "redish" + +/datum/sprite_accessory/moth_wings/royal + name = "Royal" + icon_state = "royal" + +/datum/sprite_accessory/moth_wings/gothic + name = "Gothic" + icon_state = "gothic" + +/datum/sprite_accessory/moth_wings/lovers + name = "Lovers" + icon_state = "lovers" + +/datum/sprite_accessory/moth_wings/whitefly + name = "White Fly" + icon_state = "whitefly" + +/datum/sprite_accessory/moth_wings/punished + name = "Burnt Off" + icon_state = "punished" + locked = TRUE + +/datum/sprite_accessory/moth_wings/firewatch + name = "Firewatch" + icon_state = "firewatch" + +/datum/sprite_accessory/moth_wings/deathhead + name = "Deathshead" + icon_state = "deathhead" + +/datum/sprite_accessory/moth_wings/poison + name = "Poison" + icon_state = "poison" + +/datum/sprite_accessory/moth_wings/ragged + name = "Ragged" + icon_state = "ragged" + +/datum/sprite_accessory/moth_wings/moonfly + name = "Moon Fly" + icon_state = "moonfly" + +/datum/sprite_accessory/moth_wings/snow + name = "Snow" + icon_state = "snow" diff --git a/code/modules/mob/dead/new_player/sprite_accessories_Citadel.dm b/code/modules/mob/dead/new_player/sprite_accessories_Citadel.dm index 9cc031af1b..cadeb09e74 100644 --- a/code/modules/mob/dead/new_player/sprite_accessories_Citadel.dm +++ b/code/modules/mob/dead/new_player/sprite_accessories_Citadel.dm @@ -13,6 +13,10 @@ icon = 'icons/mob/mam_bodyparts.dmi' */ +/datum/sprite_accessory/moth_wings/none + name = "None" + icon_state = "none" + /***************** Alphabetical Order please *************** ************* Keep it to Ears, Tails, Tails Animated *********/ diff --git a/code/modules/mob/living/blood.dm b/code/modules/mob/living/blood.dm index 9c3bb25da3..f6fbbaab4b 100644 --- a/code/modules/mob/living/blood.dm +++ b/code/modules/mob/living/blood.dm @@ -16,7 +16,7 @@ /mob/living/carbon/monkey/handle_blood() - if(bodytemperature >= TCRYO && !(has_disability(DISABILITY_NOCLONE))) //cryosleep or husked people do not pump the blood. + if(bodytemperature >= TCRYO && !(has_trait(TRAIT_NOCLONE))) //cryosleep or husked people do not pump the blood. //Blood regeneration if there is some space if(blood_volume < BLOOD_VOLUME_NORMAL) blood_volume += 0.1 // regenerate blood VERY slowly @@ -28,7 +28,7 @@ bleed_rate = 0 return - if(bodytemperature >= TCRYO && !(has_disability(DISABILITY_NOCLONE))) //cryosleep or husked people do not pump the blood. + if(bodytemperature >= TCRYO && !(has_trait(TRAIT_NOCLONE))) //cryosleep or husked people do not pump the blood. //Blood regeneration if there is some space if(blood_volume < BLOOD_VOLUME_NORMAL && !(NOHUNGER in dna.species.species_traits)) @@ -84,7 +84,7 @@ bleed_rate = max(bleed_rate - 0.5, temp_bleed)//if no wounds, other bleed effects (heparin) naturally decreases - if(bleed_rate && !bleedsuppress && !(status_flags & FAKEDEATH)) + if(bleed_rate && !bleedsuppress && !(has_trait(TRAIT_FAKEDEATH))) bleed(bleed_rate) //Makes a blood drop, leaking amt units of blood from the mob @@ -201,13 +201,13 @@ return "blood" /mob/living/carbon/monkey/get_blood_id() - if(!(has_disability(DISABILITY_NOCLONE))) + if(!(has_trait(TRAIT_NOCLONE))) return "blood" /mob/living/carbon/human/get_blood_id() if(dna.species.exotic_blood) return dna.species.exotic_blood - else if((NOBLOOD in dna.species.species_traits) || (has_disability(DISABILITY_NOCLONE))) + else if((NOBLOOD in dna.species.species_traits) || (has_trait(TRAIT_NOCLONE))) return return "blood" diff --git a/code/modules/mob/living/brain/brain_item.dm b/code/modules/mob/living/brain/brain_item.dm index c77908362f..9ac01a59ed 100644 --- a/code/modules/mob/living/brain/brain_item.dm +++ b/code/modules/mob/living/brain/brain_item.dm @@ -25,7 +25,7 @@ name = "brain" if(C.mind && C.mind.has_antag_datum(/datum/antagonist/changeling) && !no_id_transfer) //congrats, you're trapped in a body you don't control - if(brainmob && !(C.stat == DEAD || (C.status_flags & FAKEDEATH))) + if(brainmob && !(C.stat == DEAD || (C.has_trait(TRAIT_FAKEDEATH)))) to_chat(brainmob, "You can't feel your body! You're still just a brain!") forceMove(C) C.update_hair() @@ -79,8 +79,8 @@ if(!brainmob.stored_dna) brainmob.stored_dna = new /datum/dna/stored(brainmob) C.dna.copy_dna(brainmob.stored_dna) - if(L.has_disability(DISABILITY_NOCLONE)) - brainmob.disabilities[DISABILITY_NOCLONE] = L.disabilities[DISABILITY_NOCLONE] + if(L.has_trait(TRAIT_NOCLONE)) + brainmob.status_traits[TRAIT_NOCLONE] = L.status_traits[TRAIT_NOCLONE] var/obj/item/organ/zombie_infection/ZI = L.getorganslot(ORGAN_SLOT_ZOMBIE) if(ZI) brainmob.set_species(ZI.old_species) //For if the brain is cloned diff --git a/code/modules/mob/living/brain/life.dm b/code/modules/mob/living/brain/life.dm index c8df16a1cf..786bb0b55c 100644 --- a/code/modules/mob/living/brain/life.dm +++ b/code/modules/mob/living/brain/life.dm @@ -1,8 +1,6 @@ /mob/living/brain/Life() set invisibility = 0 - set background = BACKGROUND_ENABLED - if (notransform) return if(!loc) @@ -34,7 +32,7 @@ /mob/living/brain/handle_status_effects() return -/mob/living/brain/handle_disabilities() +/mob/living/brain/handle_traits() return diff --git a/code/modules/mob/living/brain/status_procs.dm b/code/modules/mob/living/brain/status_procs.dm index 735a0186bf..1c5aeb1f47 100644 --- a/code/modules/mob/living/brain/status_procs.dm +++ b/code/modules/mob/living/brain/status_procs.dm @@ -1,6 +1,6 @@ //Here are the procs used to modify status effects of a mob. //The effects include: stun, knockdown, unconscious, sleeping, resting, jitteriness, dizziness -// eye damage, eye_blind, eye_blurry, druggy, DISABILITY_BLIND disability, and DISABILITY_NEARSIGHT disability. +// eye damage, eye_blind, eye_blurry, druggy, TRAIT_BLIND trait, and TRAIT_NEARSIGHT trait. /////////////////////////////////// EYE_BLIND //////////////////////////////////// diff --git a/code/modules/mob/living/carbon/alien/alien.dm b/code/modules/mob/living/carbon/alien/alien.dm index e058cf6354..5a97aa220e 100644 --- a/code/modules/mob/living/carbon/alien/alien.dm +++ b/code/modules/mob/living/carbon/alien/alien.dm @@ -110,7 +110,7 @@ Des: Gives the client of the alien an image on each infected mob. if (client) for (var/i in GLOB.mob_living_list) var/mob/living/L = i - if(L.status_flags & XENO_HOST) + if(L.has_trait(TRAIT_XENO_HOST)) var/obj/item/organ/body_egg/alien_embryo/A = L.getorgan(/obj/item/organ/body_egg/alien_embryo) if(A) var/I = image('icons/mob/alien.dmi', loc = L, icon_state = "infected[A.stage]") diff --git a/code/modules/mob/living/carbon/alien/larva/life.dm b/code/modules/mob/living/carbon/alien/larva/life.dm index d7ae106380..62b9fb9b1a 100644 --- a/code/modules/mob/living/carbon/alien/larva/life.dm +++ b/code/modules/mob/living/carbon/alien/larva/life.dm @@ -2,8 +2,6 @@ /mob/living/carbon/alien/larva/Life() set invisibility = 0 - set background = BACKGROUND_ENABLED - if (notransform) return if(..()) //not dead @@ -20,7 +18,7 @@ if(health<= -maxHealth || !getorgan(/obj/item/organ/brain)) death() return - if(IsUnconscious() || IsSleeping() || getOxyLoss() > 50 || (status_flags & FAKEDEATH) || health <= HEALTH_THRESHOLD_CRIT) + if(IsUnconscious() || IsSleeping() || getOxyLoss() > 50 || (has_trait(TRAIT_FAKEDEATH)) || health <= HEALTH_THRESHOLD_CRIT) if(stat == CONSCIOUS) stat = UNCONSCIOUS blind_eyes(1) diff --git a/code/modules/mob/living/carbon/alien/status_procs.dm b/code/modules/mob/living/carbon/alien/status_procs.dm index 86b7f3508c..7fd1d31872 100644 --- a/code/modules/mob/living/carbon/alien/status_procs.dm +++ b/code/modules/mob/living/carbon/alien/status_procs.dm @@ -1,6 +1,6 @@ //Here are the procs used to modify status effects of a mob. //The effects include: stun, knockdown, unconscious, sleeping, resting, jitteriness, dizziness, ear damage, -// eye damage, eye_blind, eye_blurry, druggy, DISABILITY_BLIND disability, and DISABILITY_NEARSIGHT disability. +// eye damage, eye_blind, eye_blurry, druggy, TRAIT_BLIND trait, and TRAIT_NEARSIGHT trait. /////////////////////////////////// STUN //////////////////////////////////// diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index 59b0fcf55f..fee97c1d01 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -157,7 +157,7 @@ if(!throwable_mob.buckled) thrown_thing = throwable_mob stop_pulling() - if(has_disability(DISABILITY_PACIFISM)) + if(has_trait(TRAIT_PACIFISM)) to_chat(src, "You gently let go of [throwable_mob].") var/turf/start_T = get_turf(loc) //Get the start and target tile for the descriptors var/turf/end_T = get_turf(target) @@ -170,7 +170,7 @@ thrown_thing = I dropItemToGround(I) - if(has_disability(DISABILITY_PACIFISM) && I.throwforce) + if(has_trait(TRAIT_PACIFISM) && I.throwforce) to_chat(src, "You set [I] down gently on the ground.") return @@ -302,10 +302,10 @@ /mob/living/carbon/proc/cuff_resist(obj/item/I, breakouttime = 600, cuff_break = 0) - if(I.being_removed) + if(I.item_flags & BEING_REMOVED) to_chat(src, "You're already attempting to remove [I]!") return - I.being_removed = TRUE + I.item_flags |= BEING_REMOVED breakouttime = I.breakouttime if(!cuff_break) visible_message("[src] attempts to remove [I]!") @@ -326,7 +326,7 @@ else if(cuff_break == INSTANT_CUFFBREAK) clear_cuffs(I, cuff_break) - I.being_removed = FALSE + I.item_flags &= ~BEING_REMOVED /mob/living/carbon/proc/uncuff() if (handcuffed) @@ -402,7 +402,7 @@ dropItemToGround(I) var/modifier = 0 - if(has_disability(DISABILITY_CLUMSY)) + if(has_trait(TRAIT_CLUMSY)) modifier -= 40 //Clumsy people are more likely to hit themselves -Honk! switch(rand(1,100)+modifier) //91-100=Nothing special happens @@ -720,7 +720,7 @@ if(health <= HEALTH_THRESHOLD_DEAD) death() return - if(IsUnconscious() || IsSleeping() || getOxyLoss() > 50 || (status_flags & FAKEDEATH) || health <= HEALTH_THRESHOLD_FULLCRIT) + if(IsUnconscious() || IsSleeping() || getOxyLoss() > 50 || (has_trait(TRAIT_FAKEDEATH)) || health <= HEALTH_THRESHOLD_FULLCRIT) stat = UNCONSCIOUS blind_eyes(1) else @@ -767,7 +767,7 @@ reagents.addiction_list = list() cure_all_traumas(TRUE, TRUE) ..() - // heal ears after healing disabilities, since ears check DISABILITY_DEAF disability + // heal ears after healing traits, since ears check TRAIT_DEAF trait // when healing. restoreEars() @@ -852,3 +852,6 @@ .["Hallucinate"] = "?_src_=vars;[HrefToken()];hallucinate=[REF(src)]" .["Give brain trauma"] = "?_src_=vars;[HrefToken()];givetrauma=[REF(src)]" .["Cure brain traumas"] = "?_src_=vars;[HrefToken()];curetraumas=[REF(src)]" + +/mob/living/carbon/can_resist() + return bodyparts.len > 2 && ..() diff --git a/code/modules/mob/living/carbon/carbon_defense.dm b/code/modules/mob/living/carbon/carbon_defense.dm index edf07d9615..277305343f 100644 --- a/code/modules/mob/living/carbon/carbon_defense.dm +++ b/code/modules/mob/living/carbon/carbon_defense.dm @@ -248,7 +248,7 @@ to_chat(M, "You can't put them out with just your bare hands!") return - if(health >= 0 && !(status_flags & FAKEDEATH)) + if(health >= 0 && !(has_trait(TRAIT_FAKEDEATH))) if(lying) if(buckled) @@ -305,12 +305,12 @@ if(eyes.eye_damage > 20) if(prob(eyes.eye_damage - 20)) - if(!has_disability(DISABILITY_NEARSIGHT)) + if(!has_trait(TRAIT_NEARSIGHT)) to_chat(src, "Your eyes start to burn badly!") become_nearsighted(EYE_DAMAGE) else if(prob(eyes.eye_damage - 25)) - if(!has_disability(DISABILITY_BLIND)) + if(!has_trait(TRAIT_BLIND)) to_chat(src, "You can't see anything!") become_blind(EYE_DAMAGE) diff --git a/code/modules/mob/living/carbon/examine.dm b/code/modules/mob/living/carbon/examine.dm index 99bb6d2250..26fc9ce245 100644 --- a/code/modules/mob/living/carbon/examine.dm +++ b/code/modules/mob/living/carbon/examine.dm @@ -67,7 +67,7 @@ else msg += "[t_He] [t_is] severely deformed!\n" - if(has_disability(DISABILITY_DUMB)) + if(has_trait(TRAIT_DUMB)) msg += "[t_He] seem[p_s()] to be clumsy and unable to think.\n" if(fire_stacks > 0) diff --git a/code/modules/mob/living/carbon/human/death.dm b/code/modules/mob/living/carbon/human/death.dm index 83006e59b0..0b4d5f6098 100644 --- a/code/modules/mob/living/carbon/human/death.dm +++ b/code/modules/mob/living/carbon/human/death.dm @@ -42,13 +42,13 @@ INVOKE_ASYNC(is_devil(src), /datum/antagonist/devil.proc/beginResurrectionCheck, src) /mob/living/carbon/human/proc/makeSkeleton() - status_flags |= DISFIGURED + add_trait(TRAIT_DISFIGURED, TRAIT_GENERIC) set_species(/datum/species/skeleton) return 1 /mob/living/carbon/proc/Drain() become_husk(CHANGELING_DRAIN) - add_disability(DISABILITY_NOCLONE, CHANGELING_DRAIN) + add_trait(TRAIT_NOCLONE, CHANGELING_DRAIN) blood_volume = 0 return 1 diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm index 046e5e797d..90128a022d 100644 --- a/code/modules/mob/living/carbon/human/examine.dm +++ b/code/modules/mob/living/carbon/human/examine.dm @@ -91,7 +91,6 @@ if(istype(dicc) && dicc.is_exposed()) msg += "[dicc.desc]\n" //END OF CIT CHANGES - //Status effects msg += status_effect_examines() @@ -105,7 +104,7 @@ msg += "[t_He] [t_is] twitching ever so slightly.\n" var/appears_dead = 0 - if(stat == DEAD || (status_flags & FAKEDEATH)) + if(stat == DEAD || (has_trait(TRAIT_FAKEDEATH))) appears_dead = 1 if(suiciding) msg += "[t_He] appear[p_s()] to have committed suicide... there is no hope of recovery.\n" @@ -251,14 +250,13 @@ var/datum/belly/B = vore_organs[I] msg += B.get_examine_msg() - msg += "
" if(!appears_dead) if(stat == UNCONSCIOUS) msg += "[t_He] [t_is]n't responding to anything around [t_him] and seem[p_s()] to be asleep.\n" else - if(has_disability(DISABILITY_DUMB)) + if(has_trait(TRAIT_DUMB)) msg += "[t_He] [t_has] a stupid expression on [t_his] face.\n" if(InCritical()) msg += "[t_He] [t_is] barely conscious.\n" @@ -324,7 +322,7 @@ msg += "\[Add comment\]\n" if(print_flavor_text() && get_visible_name() != "Unknown")//Are we sure we know who this is? Don't show flavor text unless we can recognize them. Prevents certain metagaming with impersonation. msg += "[print_flavor_text()]\n" - + msg += "*---------*
" to_chat(user, msg) diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 434c24874c..79aa49aeb1 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -24,9 +24,9 @@ create_internal_organs() //most of it is done in set_species now, this is only for parent call handcrafting = new() - + . = ..() - + AddComponent(/datum/component/redirect, list(COMSIG_COMPONENT_CLEAN_ACT), CALLBACK(src, .proc/clean_blood)) /mob/living/carbon/human/OpenCraftingMenu() @@ -55,11 +55,7 @@ stat("Internal Atmosphere Info", internal.name) stat("Tank Pressure", internal.air_contents.return_pressure()) stat("Distribution Pressure", internal.distribute_pressure) - - var/mob/living/simple_animal/borer/B = has_brain_worms() - if(B && B.controlling) - stat("Chemicals", B.chemicals) - +// var/mob/living/simple_animal/borer/B = has_brain_worms() if(mind) var/datum/antagonist/changeling/changeling = mind.has_antag_datum(/datum/antagonist/changeling) if(changeling) @@ -208,13 +204,13 @@ var/obj/item/I = locate(href_list["embedded_object"]) in L.embedded_objects if(!I || I.loc != src) //no item, no limb, or item is not in limb or in the person anymore return - var/time_taken = I.embedded_unsafe_removal_time*I.w_class + var/time_taken = I.embedding.embedded_unsafe_removal_time*I.w_class usr.visible_message("[usr] attempts to remove [I] from their [L.name].","You attempt to remove [I] from your [L.name]... (It will take [DisplayTimeText(time_taken)].)") if(do_after(usr, time_taken, needhand = 1, target = src)) if(!I || !L || I.loc != src || !(I in L.embedded_objects)) return L.embedded_objects -= I - L.receive_damage(I.embedded_unsafe_removal_pain_multiplier*I.w_class)//It hurts to rip it out, get surgery you dingus. + L.receive_damage(I.embedding.embedded_unsafe_removal_pain_multiplier*I.w_class)//It hurts to rip it out, get surgery you dingus. I.forceMove(get_turf(src)) usr.put_in_hands(I) usr.emote("scream") @@ -360,7 +356,7 @@ // Checks the user has security clearence before allowing them to change arrest status via hud, comment out to enable all access var/allowed_access = null var/obj/item/clothing/glasses/G = H.glasses - if (!G.emagged) + if (!(G.obj_flags |= EMAGGED)) if(H.wear_id) var/list/access = H.wear_id.GetAccess() if(ACCESS_SEC_DOORS in access) @@ -577,8 +573,8 @@ threatcount += 2 //Check for dresscode violations - if(istype(head, /obj/item/clothing/head/wizard) || istype(head, /obj/item/clothing/head/helmet/space/hardsuit/wizard)) - threatcount += 2 + if(istype(head, /obj/item/clothing/head/wizard) || istype(head, /obj/item/clothing/head/helmet/space/hardsuit/wizard) || istype(head, /obj/item/clothing/head/helmet/space/hardsuit/shielded/wizard) || istype(head, /obj/item/clothing/head/helmet/space/hardsuit/syndi) || istype(head, /obj/item/clothing/head/helmet/space/hardsuit/shielded/syndi)) + threatcount += 6 //fuk u antags <3 //Check for nonhuman scum if(dna && dna.species.id && !(dna.species.id in list("human" , "lizard", "mammal", "avian", "aquatic", "insect"))) @@ -588,9 +584,13 @@ if(isloyal()) threatcount -= 1 - //Agent cards lower threatlevel. + //Agent cards lower threatlevel. But only enough to openly carry without being busted. if(istype(idcard, /obj/item/card/id/syndicate)) - threatcount -= 5 + threatcount -= 2 + + //CentCom cards lower threat level. Even to emagged bots. + if(istype(idcard, /obj/item/card/id/centcom) || istype(idcard, /obj/item/card/id/ert)) + threatcount -= 10 return threatcount @@ -621,7 +621,7 @@ /mob/living/carbon/human/proc/do_cpr(mob/living/carbon/C) CHECK_DNA_AND_SPECIES(C) - if(C.stat == DEAD || (C.status_flags & FAKEDEATH)) + if(C.stat == DEAD || (C.has_trait(TRAIT_FAKEDEATH))) to_chat(src, "[C.name] is dead!") return if(is_mouth_covered()) @@ -1032,3 +1032,17 @@ /mob/living/carbon/human/species/zombie/krokodil_addict race = /datum/species/krokodil_addict + +//CITADEL EDIT - TODO: Enable people to set custom races +/mob/living/carbon/human/species/mammal + race = /datum/species/mammal +/mob/living/carbon/human/species/avian + race = /datum/species/avian +/mob/living/carbon/human/species/aquatic + race = /datum/species/aquatic +/mob/living/carbon/human/species/insect + race = /datum/species/insect +/mob/living/carbon/human/species/xeno + race = /datum/species/xeno +/mob/living/carbon/human/species/guilmon + race = /datum/species/guilmon diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm index 5a184331e9..918b66c6c5 100644 --- a/code/modules/mob/living/carbon/human/human_defense.dm +++ b/code/modules/mob/living/carbon/human/human_defense.dm @@ -28,7 +28,7 @@ if(bp && istype(bp , /obj/item/clothing)) var/obj/item/clothing/C = bp if(C.body_parts_covered & def_zone.body_part) - protection += C.armor[d_type] + protection += C.armor.getRating(d_type) return protection /mob/living/carbon/human/on_hit(obj/item/projectile/P) @@ -135,13 +135,13 @@ else if(I) if(I.throw_speed >= EMBED_THROWSPEED_THRESHOLD) if(can_embed(I)) - if(prob(I.embed_chance) && !(dna && (PIERCEIMMUNE in dna.species.species_traits))) + if(prob(I.embedding.embed_chance) && !(dna && (PIERCEIMMUNE in dna.species.species_traits))) throw_alert("embeddedobject", /obj/screen/alert/embeddedobject) var/obj/item/bodypart/L = pick(bodyparts) L.embedded_objects |= I I.add_mob_blood(src)//it embedded itself in you, of course it's bloody! I.forceMove(src) - L.receive_damage(I.w_class*I.embedded_impact_pain_multiplier) + L.receive_damage(I.w_class*I.embedding.embedded_impact_pain_multiplier) visible_message("[I] embeds itself in [src]'s [L.name]!","[I] embeds itself in your [L.name]!") hitpush = FALSE skipcatch = TRUE //can't catch the now embedded item @@ -149,7 +149,7 @@ return ..() /mob/living/carbon/human/grabbedby(mob/living/carbon/user, supress_message = 0) - if(user == src && pulling && !pulling.anchored && grab_state >= GRAB_AGGRESSIVE && (has_disability(DISABILITY_FAT)) && ismonkey(pulling)) + if(user == src && pulling && !pulling.anchored && grab_state >= GRAB_AGGRESSIVE && (has_trait(TRAIT_FAT)) && ismonkey(pulling)) devour_mob(pulling) else ..() @@ -602,7 +602,7 @@ facial_hair_style = "Shaved" hair_style = "Bald" update_hair() - status_flags |= DISFIGURED + add_trait(TRAIT_DISFIGURED, TRAIT_GENERIC) update_damage_overlays() diff --git a/code/modules/mob/living/carbon/human/human_helpers.dm b/code/modules/mob/living/carbon/human/human_helpers.dm index 46212698b2..c5e4581253 100644 --- a/code/modules/mob/living/carbon/human/human_helpers.dm +++ b/code/modules/mob/living/carbon/human/human_helpers.dm @@ -56,7 +56,7 @@ if( head && (head.flags_inv&HIDEFACE) ) return if_no_face //Likewise for hats var/obj/item/bodypart/O = get_bodypart("head") - if( !O || (status_flags&DISFIGURED) || (O.brutestate+O.burnstate)>2 || cloneloss>50 || !real_name ) //disfigured. use id-name if possible + if( !O || (has_trait(TRAIT_DISFIGURED)) || (O.brutestate+O.burnstate)>2 || cloneloss>50 || !real_name ) //disfigured. use id-name if possible return if_no_face return real_name @@ -92,7 +92,7 @@ /mob/living/carbon/human/IsAdvancedToolUser() - if(has_disability(DISABILITY_MONKEYLIKE)) + if(has_trait(TRAIT_MONKEYLIKE)) return FALSE return TRUE//Humans can use guns and such diff --git a/code/modules/mob/living/carbon/human/interactive.dm b/code/modules/mob/living/carbon/human/interactive.dm index 426bc39907..1ae8e48dc7 100644 --- a/code/modules/mob/living/carbon/human/interactive.dm +++ b/code/modules/mob/living/carbon/human/interactive.dm @@ -339,7 +339,7 @@ if(TRAITS & TRAIT_SMART) smartness = 75 else if(TRAITS & TRAIT_DUMB) - add_disability(DISABILITY_CLUMSY, GENETIC_MUTATION) + add_trait(TRAIT_CLUMSY, GENETIC_MUTATION) smartness = 25 if(TRAITS & TRAIT_MEAN) @@ -753,7 +753,6 @@ timeout++ /mob/living/carbon/human/interactive/proc/getGoodPath(target,var/maxtries=512) - set background = 1 var/turf/end = get_turf(target) var/turf/current = get_turf(src) @@ -779,7 +778,6 @@ return path /mob/living/carbon/human/interactive/proc/walk2derpless(target) - set background = 1 if(!target) return 0 diff --git a/code/modules/mob/living/carbon/human/inventory.dm b/code/modules/mob/living/carbon/human/inventory.dm index 4dd26ebe6b..abd86e7bfc 100644 --- a/code/modules/mob/living/carbon/human/inventory.dm +++ b/code/modules/mob/living/carbon/human/inventory.dm @@ -187,7 +187,7 @@ if(G.tint) update_tint() if(G.vision_correction) - if(has_disability(DISABILITY_NEARSIGHT)) + if(has_trait(TRAIT_NEARSIGHT)) overlay_fullscreen("nearsighted", /obj/screen/fullscreen/impaired, 1) adjust_eye_damage(0) if(G.vision_flags || G.darkness_view || G.invis_override || G.invis_view || !isnull(G.lighting_alpha)) diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index 65d47694af..6f187d0351 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -22,15 +22,9 @@ /mob/living/carbon/human/Life() set invisibility = 0 - set background = BACKGROUND_ENABLED - if (notransform) return - //citadel code - if(stat != DEAD) - handle_arousal() - if(..()) //not dead handle_active_genes() @@ -54,15 +48,11 @@ /mob/living/carbon/human/calculate_affecting_pressure(pressure) if((wear_suit && (wear_suit.flags_1 & STOPSPRESSUREDMAGE_1)) && (head && (head.flags_1 & STOPSPRESSUREDMAGE_1))) return ONE_ATMOSPHERE - if(ismob(loc)) - return ONE_ATMOSPHERE - if(istype(loc, /obj/item/device/dogborg/sleeper)) - return ONE_ATMOSPHERE else return pressure -/mob/living/carbon/human/handle_disabilities() +/mob/living/carbon/human/handle_traits() if(eye_blind) //blindness, heals slowly over time if(tinttotal >= TINT_BLIND) //covering your eyes heals blurry eyes faster adjust_blindness(-3) @@ -71,7 +61,7 @@ else if(eye_blurry) //blurry eyes heal slowly adjust_blurriness(-1) - if(has_disability(DISABILITY_PACIFISM) && a_intent == INTENT_HARM) + if(has_trait(TRAIT_PACIFISM) && a_intent == INTENT_HARM) to_chat(src, "You don't feel like harming anybody.") a_intent_change(INTENT_HELP) @@ -127,12 +117,12 @@ /mob/living/carbon/human/proc/get_thermal_protection() var/thermal_protection = 0 //Simple check to estimate how protected we are against multiple temperatures - +//CITADEL EDIT Vore code required overrides if(istype(loc, /obj/item/device/dogborg/sleeper)) return FIRE_IMMUNITY_SUIT_MAX_TEMP_PROTECT if(ismob(loc)) return FIRE_IMMUNITY_SUIT_MAX_TEMP_PROTECT - +//END EDIT if(wear_suit) if(wear_suit.max_heat_protection_temperature >= FIRE_SUIT_MAX_TEMP_PROTECT) thermal_protection += (wear_suit.max_heat_protection_temperature*0.7) @@ -242,12 +232,15 @@ if(dna.check_mutation(COLDRES)) return TRUE //Fully protected from the cold. + if(RESISTCOLD in dna.species.species_traits) + return TRUE + +//CITADEL EDIT Mandatory for vore code. if(istype(loc, /obj/item/device/dogborg/sleeper)) return 1 //freezing to death in sleepers ruins fun. if(ismob(loc)) return 1 //because lazy and being inside somemone insulates you from space - if(RESISTCOLD in dna.species.species_traits) - return TRUE +//END EDIT temperature = max(temperature, 2.7) //There is an occasional bug where the temperature is miscalculated in ares with a small amount of gas on them, so this is necessary to ensure that that bug does not affect this calculation. Space's temperature is 2.7K and most suits that are intended to protect against any cold, protect down to 2.0K. var/thermal_protection_flags = get_cold_protection_flags(temperature) @@ -308,12 +301,12 @@ for(var/X in bodyparts) var/obj/item/bodypart/BP = X for(var/obj/item/I in BP.embedded_objects) - if(prob(I.embedded_pain_chance)) - BP.receive_damage(I.w_class*I.embedded_pain_multiplier) + if(prob(I.embedding.embedded_pain_chance)) + BP.receive_damage(I.w_class*I.embedding.embedded_pain_multiplier) to_chat(src, "[I] embedded in your [BP.name] hurts!") - if(prob(I.embedded_fall_chance)) - BP.receive_damage(I.w_class*I.embedded_fall_pain_multiplier) + if(prob(I.embedding.embedded_fall_chance)) + BP.receive_damage(I.w_class*I.embedding.embedded_fall_pain_multiplier) BP.embedded_objects -= I I.forceMove(drop_location()) visible_message("[I] falls out of [name]'s [BP.name]!","[I] falls out of your [BP.name]!") diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm index 987484bc8f..16c7945773 100644 --- a/code/modules/mob/living/carbon/human/species.dm +++ b/code/modules/mob/living/carbon/human/species.dm @@ -291,12 +291,13 @@ GLOBAL_LIST_EMPTY(roundstart_races) for(var/datum/disease/A in C.viruses) A.cure(FALSE) - +//CITADEL EDIT if(NOAROUSAL in species_traits) C.canbearoused = FALSE else if(C.client) C.canbearoused = C.client.prefs.arousable +// EDIT ENDS /datum/species/proc/on_species_loss(mob/living/carbon/C) if(C.dna.species.exotic_bloodtype) @@ -311,7 +312,7 @@ GLOBAL_LIST_EMPTY(roundstart_races) if(!HD) //Decapitated return - if(H.has_disability(DISABILITY_HUSK)) + if(H.has_trait(TRAIT_HUSK)) return var/datum/sprite_accessory/S var/list/standing = list() @@ -452,7 +453,7 @@ GLOBAL_LIST_EMPTY(roundstart_races) var/obj/item/bodypart/head/HD = H.get_bodypart("head") - if(HD && !(H.has_disability(DISABILITY_HUSK))) + if(HD && !(H.has_trait(TRAIT_HUSK))) // lipstick if(H.lip_style && (LIPS in species_traits)) var/mutable_appearance/lip_overlay = mutable_appearance('icons/mob/human_face.dmi', "lips_[H.lip_style]", -BODY_LAYER) @@ -463,18 +464,19 @@ GLOBAL_LIST_EMPTY(roundstart_races) standing += lip_overlay // eyes - var/has_eyes = H.getorganslot(ORGAN_SLOT_EYES) - var/mutable_appearance/eye_overlay - if(!has_eyes) - eye_overlay = mutable_appearance('icons/mob/human_face.dmi', "eyes_missing", -BODY_LAYER) - else - eye_overlay = mutable_appearance('icons/mob/human_face.dmi', "eyes", -BODY_LAYER) - if((EYECOLOR in species_traits) && has_eyes) - eye_overlay.color = "#" + H.eye_color - if(OFFSET_FACE in H.dna.species.offset_features) - eye_overlay.pixel_x += H.dna.species.offset_features[OFFSET_FACE][1] - eye_overlay.pixel_y += H.dna.species.offset_features[OFFSET_FACE][2] - standing += eye_overlay + if(!(NOEYES in species_traits)) + var/has_eyes = H.getorganslot(ORGAN_SLOT_EYES) + var/mutable_appearance/eye_overlay + if(!has_eyes) + eye_overlay = mutable_appearance('icons/mob/human_face.dmi', "eyes_missing", -BODY_LAYER) + else + eye_overlay = mutable_appearance('icons/mob/human_face.dmi', "eyes", -BODY_LAYER) + if((EYECOLOR in species_traits) && has_eyes) + eye_overlay.color = "#" + H.eye_color + if(OFFSET_FACE in H.dna.species.offset_features) + eye_overlay.pixel_x += H.dna.species.offset_features[OFFSET_FACE][1] + eye_overlay.pixel_y += H.dna.species.offset_features[OFFSET_FACE][2] + standing += eye_overlay //Underwear, Undershirts & Socks if(!(NO_UNDERWEAR in species_traits)) @@ -504,11 +506,14 @@ GLOBAL_LIST_EMPTY(roundstart_races) /datum/species/proc/handle_mutant_bodyparts(mob/living/carbon/human/H, forced_colour) var/list/bodyparts_to_add = mutant_bodyparts.Copy() - var/list/relevant_layers = list(BODY_BEHIND_LAYER, BODY_ADJ_LAYER, BODY_FRONT_LAYER, BODY_TAUR_LAYER) + var/list/relevent_layers = list(BODY_BEHIND_LAYER, BODY_ADJ_LAYER, BODY_FRONT_LAYER, BODY_TAUR_LAYER) var/list/standing = list() - for(var/L in relevant_layers) - H.remove_overlay(L) + H.remove_overlay(BODY_BEHIND_LAYER) + H.remove_overlay(BODY_ADJ_LAYER) + H.remove_overlay(BODY_FRONT_LAYER) + //CITADEL EDIT - Do not forget to add this to relevent_layers list just above too! + H.remove_overlay(BODY_TAUR_LAYER) if(!mutant_bodyparts) return @@ -572,6 +577,7 @@ GLOBAL_LIST_EMPTY(roundstart_races) else if ("wings" in mutant_bodyparts) bodyparts_to_add -= "wings_open" +//CITADEL EDIT //Race specific bodyparts: //Xenos if("xenodorsal" in mutant_bodyparts) @@ -602,6 +608,7 @@ GLOBAL_LIST_EMPTY(roundstart_races) if("taur" in mutant_bodyparts) if(!H.dna.features["taur"] || H.dna.features["taur"] == "None") bodyparts_to_add -= "taur" +//END EDIT //Digitigrade legs are stuck in the phantom zone between true limbs and mutant bodyparts. Mainly it just needs more agressive updating than most limbs. var/update_needed = FALSE @@ -634,7 +641,7 @@ GLOBAL_LIST_EMPTY(roundstart_races) var/image/I - for(var/layer in relevant_layers) + for(var/layer in relevent_layers) var/layertext = mutant_bodyparts_layertext(layer) for(var/bodypart in bodyparts_to_add) @@ -668,8 +675,10 @@ GLOBAL_LIST_EMPTY(roundstart_races) S = GLOB.wings_open_list[H.dna.features["wings"]] if("legs") S = GLOB.legs_list[H.dna.features["legs"]] + if("moth_wings") + S = GLOB.moth_wings_list[H.dna.features["moth_wings"]] - //Mammal Bodyparts (Canid/Felid, others maybe in the future) + //Mammal Bodyparts if("mam_tail") S = GLOB.mam_tails_list[H.dna.features["mam_tail"]] if("mam_waggingtail") @@ -689,13 +698,6 @@ GLOBAL_LIST_EMPTY(roundstart_races) if("xenotail") S = GLOB.xeno_tail_list[H.dna.features["xenotail"]] - //Slimecoon Bodyparts - /* if("slimecoontail") - S = /datum/sprite_accessory/slimecoon_tail - if("slimecoonears") - S = /datum/sprite_accessory/slimecoon_ears - if("slimecoonsnout") - S = /datum/sprite_accessory/slimecoon_snout*/ if(!S || S.icon_state == "none") continue @@ -723,7 +725,7 @@ GLOBAL_LIST_EMPTY(roundstart_races) if(S.center) accessory_overlay = center_image(accessory_overlay, S.dimension_x, S.dimension_y) - if(!(H.has_disability(DISABILITY_HUSK))) + if(!(H.has_trait(TRAIT_HUSK))) if(!forced_colour) switch(S.color_src) if(MUTCOLORS) @@ -837,12 +839,13 @@ GLOBAL_LIST_EMPTY(roundstart_races) else I.color = "#[H.hair_color]" standing += I - H.overlays_standing[layer] = standing.Copy() standing = list() - for(var/L in relevant_layers) - H.apply_overlay(L) + H.apply_overlay(BODY_BEHIND_LAYER) + H.apply_overlay(BODY_ADJ_LAYER) + H.apply_overlay(BODY_FRONT_LAYER) + H.apply_overlay(BODY_TAUR_LAYER) // CITADEL EDIT //This exists so sprite accessories can still be per-layer without having to include that layer's @@ -1101,17 +1104,17 @@ GLOBAL_LIST_EMPTY(roundstart_races) /datum/species/proc/handle_digestion(mob/living/carbon/human/H) - //The fucking DISABILITY_FAT mutation is the dumbest shit ever. It makes the code so difficult to work with - if(H.has_disability(DISABILITY_FAT))//I share your pain, past coder. + //The fucking TRAIT_FAT mutation is the dumbest shit ever. It makes the code so difficult to work with + if(H.has_trait(TRAIT_FAT))//I share your pain, past coder. if(H.overeatduration < 100) to_chat(H, "You feel fit again!") - H.remove_disability(DISABILITY_FAT, OBESITY) + H.remove_trait(TRAIT_FAT, OBESITY) H.update_inv_w_uniform() H.update_inv_wear_suit() else if(H.overeatduration > 500) to_chat(H, "You suddenly feel blubbery!") - H.add_disability(DISABILITY_FAT, OBESITY) + H.add_trait(TRAIT_FAT, OBESITY) H.update_inv_w_uniform() H.update_inv_wear_suit() @@ -1219,13 +1222,13 @@ GLOBAL_LIST_EMPTY(roundstart_races) flight = 1 if(!flightpack) //Check for chemicals and innate speedups and slowdowns if we're moving using our body and not a flying suit - if(H.status_flags & GOTTAGOFAST) + if(H.has_trait(TRAIT_GOTTAGOFAST)) . -= 1 - if(H.status_flags & GOTTAGOREALLYFAST) + if(H.has_trait(TRAIT_GOTTAGOREALLYFAST)) . -= 2 . += speedmod - if(H.status_flags & IGNORESLOWDOWN) + if(H.has_trait(TRAIT_IGNORESLOWDOWN)) ignoreslow = 1 if(H.has_gravity()) @@ -1268,7 +1271,7 @@ GLOBAL_LIST_EMPTY(roundstart_races) . += (health_deficiency / 25) if((hungry >= 70) && !flight) //Being hungry won't stop you from using flightpack controls/flapping your wings although it probably will in the wing case but who cares. . += hungry / 50 - if(H.has_disability(DISABILITY_FAT)) + if(H.has_trait(TRAIT_FAT)) . += (1.5 - flight) if(H.bodytemperature < BODYTEMP_COLD_DAMAGE_LIMIT) . += (BODYTEMP_COLD_DAMAGE_LIMIT - H.bodytemperature) / COLD_SLOWDOWN_FACTOR @@ -1283,7 +1286,7 @@ GLOBAL_LIST_EMPTY(roundstart_races) ////////////////// /datum/species/proc/help(mob/living/carbon/human/user, mob/living/carbon/human/target, datum/martial_art/attacker_style) - if(target.health >= 0 && !(target.status_flags & FAKEDEATH)) + if(target.health >= 0 && !(target.has_trait(TRAIT_FAKEDEATH))) target.help_shake_act(user) if(target != user) add_logs(user, target, "shaked") @@ -1314,7 +1317,7 @@ GLOBAL_LIST_EMPTY(roundstart_races) /datum/species/proc/harm(mob/living/carbon/human/user, mob/living/carbon/human/target, datum/martial_art/attacker_style) - if(user.has_disability(DISABILITY_PACIFISM)) + if(user.has_trait(TRAIT_PACIFISM)) to_chat(user, "You don't want to harm [target]!") return FALSE if(target.check_block()) @@ -1369,6 +1372,7 @@ GLOBAL_LIST_EMPTY(roundstart_races) target.forcesay(GLOB.hit_appends) /datum/species/proc/disarm(mob/living/carbon/human/user, mob/living/carbon/human/target, datum/martial_art/attacker_style) +// CITADEL EDIT slap mouthy gits var/aim_for_mouth = user.zone_selected == "mouth" var/target_on_help_and_unarmed = target.a_intent == INTENT_HELP && !target.get_active_held_item() var/target_aiming_for_mouth = target.zone_selected == "mouth" @@ -1380,7 +1384,7 @@ GLOBAL_LIST_EMPTY(roundstart_races) "You hear a slap.") target.endTailWag() return FALSE - else if(target.check_block()) + else if(target.check_block()) //END EDIT target.visible_message("[target] blocks [user]'s disarm attempt!") return 0 if(attacker_style && attacker_style.disarm_act(user,target)) diff --git a/code/modules/mob/living/carbon/human/species_types/flypeople.dm b/code/modules/mob/living/carbon/human/species_types/flypeople.dm index 7b37e5fc42..282e9044b4 100644 --- a/code/modules/mob/living/carbon/human/species_types/flypeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/flypeople.dm @@ -2,13 +2,13 @@ name = "Flyperson" id = "fly" say_mod = "buzzes" - species_traits = list(SPECIES_ORGANIC) + species_traits = list(SPECIES_ORGANIC, NOEYES) mutanttongue = /obj/item/organ/tongue/fly mutantliver = /obj/item/organ/liver/fly mutantstomach = /obj/item/organ/stomach/fly meat = /obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/fly disliked_food = null - liked_food = NONE + liked_food = GROSS /datum/species/fly/handle_chemicals(datum/reagent/chem, mob/living/carbon/human/H) if(chem.id == "pestkiller") diff --git a/code/modules/mob/living/carbon/human/species_types/furrypeople.dm b/code/modules/mob/living/carbon/human/species_types/furrypeople.dm index b8d9713d37..0e00975a5a 100644 --- a/code/modules/mob/living/carbon/human/species_types/furrypeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/furrypeople.dm @@ -67,8 +67,8 @@ id = "insect" default_color = "BCAC9B" species_traits = list(MUTCOLORS,EYECOLOR,LIPS,HAIR,SPECIES_ORGANIC) - mutant_bodyparts = list("mam_body_markings", "mam_ears", "mam_tail", "taur") - default_features = list("mcolor" = "FFF","mcolor2" = "FFF","mcolor3" = "FFF", "mam_body_markings" = "moth", "mam_tail" = "None", "mam_ears" = "None") + mutant_bodyparts = list("mam_body_markings", "mam_ears", "mam_tail", "taur", "moth_wings") + default_features = list("mcolor" = "FFF","mcolor2" = "FFF","mcolor3" = "FFF", "mam_body_markings" = "moth", "mam_tail" = "None", "mam_ears" = "None", "moth_wings" = "None") attack_verb = "flutter" //wat? attack_sound = 'sound/weapons/slash.ogg' miss_sound = 'sound/weapons/slashmiss.ogg' diff --git a/code/modules/mob/living/carbon/human/species_types/golems.dm b/code/modules/mob/living/carbon/human/species_types/golems.dm index cc47bd64b7..72b3fe1139 100644 --- a/code/modules/mob/living/carbon/human/species_types/golems.dm +++ b/code/modules/mob/living/carbon/human/species_types/golems.dm @@ -727,7 +727,7 @@ /obj/structure/cloth_pile/proc/revive() if(QDELETED(src) || QDELETED(cloth_golem)) //QDELETED also checks for null, so if no cloth golem is set this won't runtime return - if(cloth_golem.suiciding || cloth_golem.has_disability(DISABILITY_NOCLONE)) + if(cloth_golem.suiciding || cloth_golem.has_trait(TRAIT_NOCLONE)) QDEL_NULL(cloth_golem) return 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 6b1a35ea04..3d76f28750 100644 --- a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm @@ -10,6 +10,9 @@ damage_overlay_type = "" var/datum/action/innate/regenerate_limbs/regenerate_limbs liked_food = MEAT + coldmod = 6 // = 3x cold damage + heatmod = 0.5 // = 1/4x heat damage + burnmod = 0.5 // = 1/2x generic burn damage /datum/species/jelly/on_species_loss(mob/living/carbon/C) if(regenerate_limbs) @@ -17,6 +20,7 @@ C.remove_language(/datum/language/slime, TRUE) C.faction -= "slime" ..() + C.faction -= "slime" /datum/species/jelly/on_species_gain(mob/living/carbon/C, datum/species/old_species) ..() @@ -24,6 +28,7 @@ if(ishuman(C)) regenerate_limbs = new regenerate_limbs.Grant(C) + C.faction |= "slime" /datum/species/jelly/spec_life(mob/living/carbon/human/H) if(H.stat == DEAD) //can't farm slime jelly from a dead slime/jelly person indefinitely @@ -42,7 +47,8 @@ to_chat(H, "You feel drained!") if(H.blood_volume < BLOOD_VOLUME_BAD) Cannibalize_Body(H) - H.update_action_buttons_icon() + if(regenerate_limbs) + regenerate_limbs.UpdateButtonIcon() /datum/species/jelly/proc/Cannibalize_Body(mob/living/carbon/human/H) var/list/limbs_to_consume = list("r_arm", "l_arm", "r_leg", "l_leg") - H.get_missing_limbs() @@ -97,10 +103,11 @@ return to_chat(H, "...but there is not enough of you to go around! You must attain more mass to heal!") -////////////////////////////////////////////////////////SLIME PEOPLE/////////////////////////////////////////////////////////////////// +////////////////////////////////////////////////////////SLIMEPEOPLE/////////////////////////////////////////////////////////////////// + +//Slime people are able to split like slimes, retaining a single mind that can swap between bodies at will, even after death. /datum/species/jelly/slime - // Humans mutated by slime mutagen, produced from green slimes. They are not targetted by slimes. name = "Slimeperson" id = "slime" default_color = "00FFFF" @@ -109,9 +116,6 @@ hair_color = "mutcolor" hair_alpha = 150 ignored_by = list(/mob/living/simple_animal/slime) - burnmod = 0.5 - coldmod = 2 - heatmod = 0.5 var/datum/action/innate/split_body/slime_split var/list/mob/living/carbon/bodies var/datum/action/innate/swap_body/swap_body @@ -124,14 +128,13 @@ bodies -= C // This means that the other bodies maintain a link // so if someone mindswapped into them, they'd still be shared. bodies = null - C.faction -= "slime" C.blood_volume = min(C.blood_volume, BLOOD_VOLUME_NORMAL) ..() /datum/species/jelly/slime/on_species_gain(mob/living/carbon/C, datum/species/old_species) ..() if(ishuman(C)) - /*slime_split = new + /* slime_split = new slime_split.Grant(C) swap_body = new swap_body.Grant(C)*/ @@ -140,7 +143,7 @@ bodies = list(C) else bodies |= C - + /datum/species/jelly/slime/spec_death(gibbed, mob/living/carbon/human/H) if(slime_split) var/datum/mind/M @@ -159,7 +162,7 @@ bodies = old_species.bodies /datum/species/jelly/slime/spec_life(mob/living/carbon/human/H) - /*if(H.blood_volume >= BLOOD_VOLUME_SLIME_SPLIT) +/* if(H.blood_volume >= BLOOD_VOLUME_SLIME_SPLIT) if(prob(5)) to_chat(H, "You feel very bloated!")*/ if(H.nutrition >= NUTRITION_LEVEL_WELL_FED) @@ -237,7 +240,7 @@ /datum/action/innate/swap_body name = "Swap Body" - check_flags = AB_CHECK_CONSCIOUS + check_flags = NONE button_icon_state = "slimeswap" icon_icon = 'icons/mob/actions/actions_slime.dmi' background_icon_state = "bg_alien" @@ -250,6 +253,7 @@ ui_interact(owner) /datum/action/innate/swap_body/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.always_state) + ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) if(!ui) ui = new(user, src, ui_key, "slime_swap_body", name, 400, 400, master_ui, state) @@ -334,14 +338,356 @@ return if(selected.stat != CONSCIOUS) return - swap_to_dupe(M, selected) /datum/action/innate/swap_body/proc/swap_to_dupe(datum/mind/M, mob/living/carbon/human/dupe) - M.current.visible_message("[M.current] \ - stops moving and starts staring vacantly into space.", - "You stop moving this body...") + if(M.current.stat == CONSCIOUS) + M.current.visible_message("[M.current] \ + stops moving and starts staring vacantly into space.", + "You stop moving this body...") + else + to_chat(M.current, "You abandon this body...") M.transfer_to(dupe) dupe.visible_message("[dupe] blinks and looks \ around.", "...and move this one instead.") + + +///////////////////////////////////LUMINESCENTS////////////////////////////////////////// + +//Luminescents are able to consume and use slime extracts, without them decaying. + +/datum/species/jelly/luminescent + name = "Luminescent" + id = "lum" + say_mod = "says" + var/glow_intensity = LUMINESCENT_DEFAULT_GLOW + var/obj/effect/dummy/luminescent_glow/glow + var/obj/item/slime_extract/current_extract + var/datum/action/innate/integrate_extract/integrate_extract + var/datum/action/innate/use_extract/extract_minor + var/datum/action/innate/use_extract/major/extract_major + var/extract_cooldown = 0 + +/datum/species/jelly/luminescent/on_species_loss(mob/living/carbon/C) + ..() + if(current_extract) + current_extract.forceMove(C.drop_location()) + current_extract = null + qdel(glow) + if(integrate_extract) + integrate_extract.Remove(C) + if(extract_minor) + extract_minor.Remove(C) + if(extract_major) + extract_major.Remove(C) + +/datum/species/jelly/luminescent/on_species_gain(mob/living/carbon/C, datum/species/old_species) + ..() + glow = new(C) + update_glow(C) + integrate_extract = new(src) + integrate_extract.Grant(C) + extract_minor = new(src) + extract_minor.Grant(C) + extract_major = new(src) + extract_major.Grant(C) + +/datum/species/jelly/luminescent/proc/update_slime_actions() + integrate_extract.update_name() + integrate_extract.UpdateButtonIcon() + extract_minor.UpdateButtonIcon() + extract_major.UpdateButtonIcon() + +/datum/species/jelly/luminescent/proc/update_glow(mob/living/carbon/C, intensity) + if(intensity) + glow_intensity = intensity + glow.set_light(glow_intensity, glow_intensity, C.dna.features["mcolor"]) + +/obj/effect/dummy/luminescent_glow + name = "luminescent glow" + desc = "Tell a coder if you're seeing this." + icon_state = "nothing" + light_color = "#FFFFFF" + light_range = LUMINESCENT_DEFAULT_GLOW + +/obj/effect/dummy/luminescent_glow/Initialize() + . = ..() + if(!isliving(loc)) + return INITIALIZE_HINT_QDEL + +/datum/action/innate/integrate_extract + name = "Integrate Extract" + desc = "Eat a slime extract to use its properties." + check_flags = AB_CHECK_CONSCIOUS + button_icon_state = "slimeconsume" + icon_icon = 'icons/mob/actions/actions_slime.dmi' + background_icon_state = "bg_alien" + var/datum/species/jelly/luminescent/species + +/datum/action/innate/integrate_extract/New(_species) + ..() + species = _species + +/datum/action/innate/integrate_extract/proc/update_name() + if(!species || !species.current_extract) + name = "Integrate Extract" + desc = "Eat a slime extract to use its properties." + else + name = "Eject Extract" + desc = "Eject your current slime extract." + +/datum/action/innate/integrate_extract/UpdateButtonIcon(status_only, force) + if(!species || !species.current_extract) + button_icon_state = "slimeconsume" + else + button_icon_state = "slimeeject" + ..() + +/datum/action/innate/integrate_extract/ApplyIcon(obj/screen/movable/action_button/current_button, force) + ..(current_button, TRUE) + if(species && species.current_extract) + current_button.add_overlay(mutable_appearance(species.current_extract.icon, species.current_extract.icon_state)) + +/datum/action/innate/integrate_extract/Activate() + var/mob/living/carbon/human/H = owner + if(!is_species(H, /datum/species/jelly/luminescent) || !species) + return + CHECK_DNA_AND_SPECIES(H) + + if(species.current_extract) + var/obj/item/slime_extract/S = species.current_extract + if(!H.put_in_active_hand(S)) + S.forceMove(H.drop_location()) + species.current_extract = null + to_chat(H, "You eject [S].") + species.update_slime_actions() + else + var/obj/item/I = H.get_active_held_item() + if(istype(I, /obj/item/slime_extract)) + var/obj/item/slime_extract/S = I + if(!S.Uses) + to_chat(H, "[I] is spent! You cannot integrate it.") + return + if(!H.temporarilyRemoveItemFromInventory(S)) + return + S.forceMove(H) + species.current_extract = S + to_chat(H, "You consume [I], and you feel it pulse within you...") + species.update_slime_actions() + else + to_chat(H, "You need to hold an unused slime extract in your active hand!") + +/datum/action/innate/use_extract + name = "Extract Minor Activation" + desc = "Pulse the slime extract with energized jelly to activate it." + check_flags = AB_CHECK_CONSCIOUS + button_icon_state = "slimeuse1" + icon_icon = 'icons/mob/actions/actions_slime.dmi' + background_icon_state = "bg_alien" + var/activation_type = SLIME_ACTIVATE_MINOR + var/datum/species/jelly/luminescent/species + +/datum/action/innate/use_extract/New(_species) + ..() + species = _species + +/datum/action/innate/use_extract/IsAvailable() + if(..()) + if(species && species.current_extract && (world.time > species.extract_cooldown)) + return TRUE + return FALSE + +/datum/action/innate/use_extract/ApplyIcon(obj/screen/movable/action_button/current_button, force) + ..(current_button, TRUE) + if(species && species.current_extract) + current_button.add_overlay(mutable_appearance(species.current_extract.icon, species.current_extract.icon_state)) + +/datum/action/innate/use_extract/Activate() + var/mob/living/carbon/human/H = owner + if(!is_species(H, /datum/species/jelly/luminescent) || !species) + return + CHECK_DNA_AND_SPECIES(H) + + if(species.current_extract) + var/cooldown = species.current_extract.activate(H, species, activation_type) + species.extract_cooldown = world.time + cooldown + +/datum/action/innate/use_extract/major + name = "Extract Major Activation" + desc = "Pulse the slime extract with plasma jelly to activate it." + button_icon_state = "slimeuse2" + activation_type = SLIME_ACTIVATE_MAJOR + +///////////////////////////////////STARGAZERS////////////////////////////////////////// + +//Stargazers are the telepathic branch of jellypeople, able to project psychic messages and to link minds with willing participants. + +/datum/species/jelly/stargazer + name = "Stargazer" + id = "stargazer" + var/datum/action/innate/project_thought/project_thought + var/datum/action/innate/link_minds/link_minds + var/list/mob/living/linked_mobs = list() + var/list/datum/action/innate/linked_speech/linked_actions = list() + var/mob/living/carbon/human/slimelink_owner + var/current_link_id = 0 + +/datum/species/jelly/stargazer/on_species_loss(mob/living/carbon/C) + ..() + for(var/M in linked_mobs) + unlink_mob(M) + if(project_thought) + project_thought.Remove(C) + if(link_minds) + link_minds.Remove(C) + +/datum/species/jelly/stargazer/spec_death(gibbed, mob/living/carbon/human/H) + ..() + for(var/M in linked_mobs) + unlink_mob(M) + +/datum/species/jelly/stargazer/on_species_gain(mob/living/carbon/C, datum/species/old_species) + ..() + project_thought = new(src) + project_thought.Grant(C) + link_minds = new(src) + link_minds.Grant(C) + slimelink_owner = C + link_mob(C) + +/datum/species/jelly/stargazer/proc/link_mob(mob/living/M) + if(QDELETED(M) || M.stat == DEAD) + return FALSE + if(M.isloyal()) //mindshield implant, no dice + return FALSE + if(M in linked_mobs) + return FALSE + linked_mobs.Add(M) + to_chat(M, "You are now connected to [slimelink_owner.real_name]'s Slime Link.") + var/datum/action/innate/linked_speech/action = new(src) + linked_actions.Add(action) + action.Grant(M) + return TRUE + +/datum/species/jelly/stargazer/proc/unlink_mob(mob/living/M) + var/link_id = linked_mobs.Find(M) + if(!(link_id)) + return + var/datum/action/innate/linked_speech/action = linked_actions[link_id] + action.Remove(M) + to_chat(M, "You are no longer connected to [slimelink_owner.real_name]'s Slime Link.") + linked_mobs[link_id] = null + linked_actions[link_id] = null + +/datum/action/innate/linked_speech + name = "Slimelink" + desc = "Send a psychic message to everyone connected to your slime link." + button_icon_state = "link_speech" + icon_icon = 'icons/mob/actions/actions_slime.dmi' + background_icon_state = "bg_alien" + var/datum/species/jelly/stargazer/species + +/datum/action/innate/linked_speech/New(_species) + ..() + species = _species + +/datum/action/innate/linked_speech/Activate() + var/mob/living/carbon/human/H = owner + if(!species || !(H in species.linked_mobs)) + to_chat(H, "The link seems to have been severed...") + Remove(H) + return + + var/message = sanitize(input("Message:", "Slime Telepathy") as text|null) + + if(!species || !(H in species.linked_mobs)) + to_chat(H, "The link seems to have been severed...") + Remove(H) + return + + if(QDELETED(H) || H.stat == DEAD) + species.unlink_mob(H) + return + + if(message) + var/msg = "\[[species.slimelink_owner.real_name]'s Slime Link\] [H]: [message]" + log_talk(H,"SlimeLink: [key_name(H)] : [msg]",LOGSAY) + for(var/X in species.linked_mobs) + var/mob/living/M = X + if(QDELETED(M) || M.stat == DEAD) + species.unlink_mob(M) + continue + to_chat(M, msg) + + for(var/X in GLOB.dead_mob_list) + var/mob/M = X + var/link = FOLLOW_LINK(M, H) + to_chat(M, "[link] [msg]") + +/datum/action/innate/project_thought + name = "Send Thought" + desc = "Send a private psychic message to someone you can see." + button_icon_state = "send_mind" + icon_icon = 'icons/mob/actions/actions_slime.dmi' + background_icon_state = "bg_alien" + +/datum/action/innate/project_thought/Activate() + var/mob/living/carbon/human/H = owner + if(!is_species(H, /datum/species/jelly/stargazer)) + return + CHECK_DNA_AND_SPECIES(H) + + var/list/options = list() + for(var/mob/living/Ms in oview(H)) + options += Ms + var/mob/living/M = input("Select who to send your message to:","Send thought to?",null) as null|mob in options + if(!M) + return + + var/msg = sanitize(input("Message:", "Telepathy") as text|null) + if(msg) + log_talk(H,"SlimeTelepathy: [key_name(H)]->[M.key] : [msg]",LOGSAY) + to_chat(M, "You hear an alien voice in your head... [msg]") + to_chat(H, "You telepathically said: \"[msg]\" to [M]") + for(var/dead in GLOB.dead_mob_list) + if(!isobserver(dead)) + continue + var/follow_link_user = FOLLOW_LINK(dead, H) + var/follow_link_target = FOLLOW_LINK(dead, M) + to_chat(dead, "[follow_link_user] [H] Slime Telepathy --> [follow_link_target] [M] [msg]") + +/datum/action/innate/link_minds + name = "Link Minds" + desc = "Link someone's mind to your Slime Link, allowing them to communicate telepathically with other linked minds." + button_icon_state = "mindlink" + icon_icon = 'icons/mob/actions/actions_slime.dmi' + background_icon_state = "bg_alien" + var/datum/species/jelly/stargazer/species + +/datum/action/innate/link_minds/New(_species) + ..() + species = _species + +/datum/action/innate/link_minds/Activate() + var/mob/living/carbon/human/H = owner + if(!is_species(H, /datum/species/jelly/stargazer)) + return + CHECK_DNA_AND_SPECIES(H) + + if(!H.pulling || !isliving(H.pulling) || H.grab_state < GRAB_AGGRESSIVE) + to_chat(H, "You need to aggressively grab someone to link minds!") + return + + var/mob/living/target = H.pulling + + to_chat(H, "You begin linking [target]'s mind to yours...") + to_chat(target, "You feel a foreign presence within your mind...") + if(do_after(H, 60, target = target)) + if(H.pulling != target || H.grab_state < GRAB_AGGRESSIVE) + return + if(species.link_mob(target)) + to_chat(H, "You connect [target]'s mind to your slime link!") + else + to_chat(H, "You can't seem to link [target]'s mind...") + to_chat(target, "The foreign presence leaves your mind.") diff --git a/code/modules/mob/living/carbon/human/species_types/mothmen.dm b/code/modules/mob/living/carbon/human/species_types/mothmen.dm new file mode 100644 index 0000000000..7f0d8afe26 --- /dev/null +++ b/code/modules/mob/living/carbon/human/species_types/mothmen.dm @@ -0,0 +1,60 @@ +/datum/species/moth + name = "Mothmen" + id = "moth" + say_mod = "flutters" + default_color = "00FF00" + species_traits = list(LIPS, SPECIES_ORGANIC, NOEYES) + mutant_bodyparts = list("moth_wings") + default_features = list("moth_wings" = "Plain") + attack_verb = "slash" + attack_sound = 'sound/weapons/slash.ogg' + miss_sound = 'sound/weapons/slashmiss.ogg' + meat = /obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/moth + liked_food = VEGETABLES | DAIRY + disliked_food = FRUIT | GROSS + toxic_food = MEAT | RAW + mutanteyes = /obj/item/organ/eyes/moth + +/datum/species/moth/on_species_gain(mob/living/carbon/C) + . = ..() + if(ishuman(C)) + var/mob/living/carbon/human/H = C + if(!H.dna.features["moth_wings"]) + H.dna.features["moth_wings"] = "[(H.client && H.client.prefs && LAZYLEN(H.client.prefs.features) && H.client.prefs.features["moth_wings"]) ? H.client.prefs.features["moth_wings"] : "Plain"]" + handle_mutant_bodyparts(H) + +/datum/species/moth/random_name(gender,unique,lastname) + if(unique) + return random_unique_moth_name() + + var/randname = moth_name() + + if(lastname) + randname += " [lastname]" + + return randname + +/datum/species/moth/handle_fire(mob/living/carbon/human/H, no_protection = FALSE) + ..() + if(H.dna.features["moth_wings"] != "Burnt Off" && H.bodytemperature >= 800 && H.fire_stacks > 0) //do not go into the extremely hot light. you will not survive + to_chat(H, "Your precious wings burn to a crisp!") + H.dna.features["moth_wings"] = "Burnt Off" + handle_mutant_bodyparts(H) + +/datum/species/moth/handle_chemicals(datum/reagent/chem, mob/living/carbon/human/H) + . = ..() + if(chem.id == "pestkiller") + H.adjustToxLoss(3) + H.reagents.remove_reagent(chem.id, REAGENTS_METABOLISM) + +/datum/species/moth/check_weakness(obj/item/weapon, mob/living/attacker) + if(istype(weapon, /obj/item/melee/flyswatter)) + return 9 //flyswatters deal 10x damage to moths + return 0 + +/datum/species/moth/space_move(mob/living/carbon/human/H) + . = ..() + if(H.loc && !isspaceturf(H.loc) && H.dna.features["moth_wings"] != "Burnt Off" || "None") + var/datum/gas_mixture/current = H.loc.return_air() + if(current && (current.return_pressure() >= ONE_ATMOSPHERE*0.85)) //as long as there's reasonable pressure and no gravity, flight is possible + return TRUE diff --git a/code/modules/mob/living/carbon/human/species_types/skeletons.dm b/code/modules/mob/living/carbon/human/species_types/skeletons.dm index 0a55ae0134..d47f3d71d5 100644 --- a/code/modules/mob/living/carbon/human/species_types/skeletons.dm +++ b/code/modules/mob/living/carbon/human/species_types/skeletons.dm @@ -10,9 +10,9 @@ mutanttongue = /obj/item/organ/tongue/bone damage_overlay_type = ""//let's not show bloody wounds or burns over bones. disliked_food = NONE - liked_food = NONE + liked_food = GROSS | MEAT | RAW /datum/species/skeleton/check_roundstart_eligible() if(SSevents.holidays && SSevents.holidays[HALLOWEEN]) return TRUE - return ..() + return ..() \ No newline at end of file diff --git a/code/modules/mob/living/carbon/human/species_types/zombies.dm b/code/modules/mob/living/carbon/human/species_types/zombies.dm index 792485960e..14502aa931 100644 --- a/code/modules/mob/living/carbon/human/species_types/zombies.dm +++ b/code/modules/mob/living/carbon/human/species_types/zombies.dm @@ -12,7 +12,7 @@ mutanttongue = /obj/item/organ/tongue/zombie var/static/list/spooks = list('sound/hallucinations/growl1.ogg','sound/hallucinations/growl2.ogg','sound/hallucinations/growl3.ogg','sound/hallucinations/veryfar_noise.ogg','sound/hallucinations/wail.ogg') disliked_food = NONE - liked_food = NONE + liked_food = GROSS | MEAT | RAW /datum/species/zombie/check_roundstart_eligible() if(SSevents.holidays && SSevents.holidays[HALLOWEEN]) diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm index 266afffed2..3c57b172fe 100644 --- a/code/modules/mob/living/carbon/human/update_icons.dm +++ b/code/modules/mob/living/carbon/human/update_icons.dm @@ -610,7 +610,7 @@ generate/load female uniform sprites matching all previously decided variables if(BP.dmg_overlay_type) . += "-[BP.dmg_overlay_type]" - if(has_disability(DISABILITY_HUSK)) + if(has_trait(TRAIT_HUSK)) . += "-husk" /mob/living/carbon/human/load_limb_from_cache() diff --git a/code/modules/mob/living/carbon/life.dm b/code/modules/mob/living/carbon/life.dm index 658d7a90c4..3a49badc77 100644 --- a/code/modules/mob/living/carbon/life.dm +++ b/code/modules/mob/living/carbon/life.dm @@ -1,6 +1,5 @@ /mob/living/carbon/Life() set invisibility = 0 - set background = BACKGROUND_ENABLED if(notransform) return diff --git a/code/modules/mob/living/carbon/monkey/combat.dm b/code/modules/mob/living/carbon/monkey/combat.dm index 18f245d4cd..32b368db4f 100644 --- a/code/modules/mob/living/carbon/monkey/combat.dm +++ b/code/modules/mob/living/carbon/monkey/combat.dm @@ -122,7 +122,7 @@ if(L == src) return FALSE - if(has_disability(DISABILITY_PACIFISM)) + if(has_trait(TRAIT_PACIFISM)) return FALSE if(enemies[L]) diff --git a/code/modules/mob/living/carbon/monkey/life.dm b/code/modules/mob/living/carbon/monkey/life.dm index b6609a319e..58edac0eaf 100644 --- a/code/modules/mob/living/carbon/monkey/life.dm +++ b/code/modules/mob/living/carbon/monkey/life.dm @@ -5,7 +5,6 @@ /mob/living/carbon/monkey/Life() set invisibility = 0 - set background = BACKGROUND_ENABLED if (notransform) return @@ -74,6 +73,7 @@ else bodytemperature += min((loc_temp - bodytemperature) / BODYTEMP_HEAT_DIVISOR, BODYTEMP_HEATING_MAX) + if(bodytemperature > BODYTEMP_HEAT_DAMAGE_LIMIT) switch(bodytemperature) if(360 to 400) diff --git a/code/modules/mob/living/carbon/monkey/update_icons.dm b/code/modules/mob/living/carbon/monkey/update_icons.dm index 1bb4400087..def7640b76 100644 --- a/code/modules/mob/living/carbon/monkey/update_icons.dm +++ b/code/modules/mob/living/carbon/monkey/update_icons.dm @@ -19,7 +19,7 @@ if(!HD) //Decapitated return - if(has_disability(DISABILITY_HUSK)) + if(has_trait(TRAIT_HUSK)) return var/hair_hidden = 0 diff --git a/code/modules/mob/living/carbon/status_procs.dm b/code/modules/mob/living/carbon/status_procs.dm index efde375227..300455a174 100644 --- a/code/modules/mob/living/carbon/status_procs.dm +++ b/code/modules/mob/living/carbon/status_procs.dm @@ -1,6 +1,6 @@ //Here are the procs used to modify status effects of a mob. //The effects include: stun, knockdown, unconscious, sleeping, resting, jitteriness, dizziness, ear damage, -// eye damage, eye_blind, eye_blurry, druggy, DISABILITY_BLIND disability, DISABILITY_NEARSIGHT disability, and DISABILITY_HUSK disability. +// eye damage, eye_blind, eye_blurry, druggy, TRAIT_BLIND trait, TRAIT_NEARSIGHT trait, and TRAIT_HUSK trait. /mob/living/carbon/damage_eyes(amount) var/obj/item/organ/eyes/eyes = getorganslot(ORGAN_SLOT_EYES) diff --git a/code/modules/mob/living/carbon/update_icons.dm b/code/modules/mob/living/carbon/update_icons.dm index 147f14c945..d798a3cd25 100644 --- a/code/modules/mob/living/carbon/update_icons.dm +++ b/code/modules/mob/living/carbon/update_icons.dm @@ -290,7 +290,7 @@ else . += "-robotic" - if(has_disability(DISABILITY_HUSK)) + if(has_trait(TRAIT_HUSK)) . += "-husk" diff --git a/code/modules/mob/living/damage_procs.dm b/code/modules/mob/living/damage_procs.dm index 9517e1b705..896708a4e3 100644 --- a/code/modules/mob/living/damage_procs.dm +++ b/code/modules/mob/living/damage_procs.dm @@ -113,14 +113,14 @@ if(SLUR) slurring = max(slurring,(effect * hit_percent)) if(STUTTER) - if(status_flags & CANSTUN) // stun is usually associated with stutter + if((status_flags & CANSTUN) && !has_trait(TRAIT_STUNIMMUNE)) // stun is usually associated with stutter stuttering = max(stuttering,(effect * hit_percent)) if(EYE_BLUR) blur_eyes(effect * hit_percent) if(DROWSY) drowsyness = max(drowsyness,(effect * hit_percent)) if(JITTER) - if(status_flags & CANSTUN) + if((status_flags & CANSTUN) && !has_trait(TRAIT_STUNIMMUNE)) jitteriness = max(jitteriness,(effect * hit_percent)) return 1 diff --git a/code/modules/mob/living/life.dm b/code/modules/mob/living/life.dm index 0fc19e3882..8043f055bb 100644 --- a/code/modules/mob/living/life.dm +++ b/code/modules/mob/living/life.dm @@ -1,6 +1,5 @@ /mob/living/Life(seconds, times_fired) set invisibility = 0 - set background = BACKGROUND_ENABLED if(digitalinvis) handle_diginvis() //AI becomes unable to see mob @@ -55,9 +54,9 @@ handle_fire() - // Vore code for belly processes + // Citadel Vore code for belly processes handle_internal_contents() - + //stuff in the stomach handle_stomach() @@ -67,7 +66,7 @@ machine.check_eye(src) if(stat != DEAD) - handle_disabilities() // eye, ear, brain damages + handle_traits() // eye, ear, brain damages if(stat != DEAD) handle_status_effects() //all special effects, stun, knockdown, jitteryness, hallucination, sleeping, etc @@ -123,10 +122,10 @@ if(confused) confused = max(0, confused - 1) -/mob/living/proc/handle_disabilities() +/mob/living/proc/handle_traits() //Eyes if(eye_blind) //blindness, heals slowly over time - if(!stat && !(has_disability(DISABILITY_BLIND))) + if(!stat && !(has_trait(TRAIT_BLIND))) eye_blind = max(eye_blind-1,0) if(client && !eye_blind) clear_alert("blind") @@ -137,7 +136,7 @@ eye_blurry = max(eye_blurry-1, 0) if(client && !eye_blurry) clear_fullscreen("blurry") - if(has_disability(DISABILITY_PACIFISM) && a_intent == INTENT_HARM) + if(has_trait(TRAIT_PACIFISM) && a_intent == INTENT_HARM) to_chat(src, "You don't feel like harming anybody.") a_intent_change(INTENT_HELP) diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index be1ad730f1..9716ee135d 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -183,6 +183,10 @@ //not if he's not CANPUSH of course if(!(M.status_flags & CANPUSH)) return 1 + if(isliving(M)) + var/mob/living/L = M + if(L.has_trait(TRAIT_PUSHIMMUNE)) + return 1 //anti-riot equipment is also anti-push for(var/obj/item/I in M.held_items) if(!istype(M, /obj/item/clothing)) @@ -235,7 +239,7 @@ /mob/living/pointed(atom/A as mob|obj|turf in view()) if(incapacitated()) return 0 - if(src.status_flags & FAKEDEATH) + if(src.has_trait(TRAIT_FAKEDEATH)) return 0 if(!..()) return 0 @@ -578,7 +582,7 @@ // climbing out of a gut if(attempt_vr(src,"vore_process_resist",args)) return TRUE - + //Breaking out of a container (Locker, sleeper, cryo...) else if(isobj(loc)) var/obj/C = loc @@ -794,7 +798,7 @@ if(G.trigger_guard != TRIGGER_GUARD_ALLOW_ALL && !IsAdvancedToolUser()) to_chat(src, "You don't have the dexterity to do this!") return FALSE - if(has_disability(DISABILITY_PACIFISM)) + if(has_trait(TRAIT_PACIFISM)) to_chat(src, "You don't want to risk harming anyone!") return FALSE return TRUE @@ -950,7 +954,7 @@ //Updates canmove, lying and icons. Could perhaps do with a rename but I can't think of anything to describe it. //Robots, animals and brains have their own version so don't worry about them /mob/living/proc/update_canmove() - var/ko = IsKnockdown() || IsUnconscious() || (stat && (stat != SOFT_CRIT || pulledby)) || (status_flags & FAKEDEATH) + var/ko = IsKnockdown() || IsUnconscious() || (stat && (stat != SOFT_CRIT || pulledby)) || (has_trait(TRAIT_FAKEDEATH)) var/move_and_fall = stat == SOFT_CRIT && !pulledby var/chokehold = pulledby && pulledby.grab_state >= GRAB_NECK var/buckle_lying = !(buckled && !buckled.buckle_lying) diff --git a/code/modules/mob/living/living_defense.dm b/code/modules/mob/living/living_defense.dm index 413e9c1b0b..2304502c40 100644 --- a/code/modules/mob/living/living_defense.dm +++ b/code/modules/mob/living/living_defense.dm @@ -132,11 +132,11 @@ user.start_pulling(src, supress_message) return - if(!(status_flags & CANPUSH)) + if(!(status_flags & CANPUSH) || has_trait(TRAIT_PUSHIMMUNE)) to_chat(user, "[src] can't be grabbed more aggressively!") return FALSE - if(user.has_disability(DISABILITY_PACIFISM)) + if(user.has_trait(TRAIT_PACIFISM)) to_chat(user, "You don't want to risk hurting [src]!") return FALSE @@ -193,7 +193,7 @@ M.Feedstop() return // can't attack while eating! - if(has_disability(DISABILITY_PACIFISM)) + if(has_trait(TRAIT_PACIFISM)) to_chat(M, "You don't want to hurt anyone!") return FALSE @@ -210,7 +210,7 @@ M.visible_message("\The [M] [M.friendly] [src]!") return FALSE else - if(M.has_disability(DISABILITY_PACIFISM)) + if(M.has_trait(TRAIT_PACIFISM)) to_chat(M, "You don't want to hurt anyone!") return FALSE @@ -229,7 +229,7 @@ return FALSE if (M.a_intent == INTENT_HARM) - if(M.has_disability(DISABILITY_PACIFISM)) + if(M.has_trait(TRAIT_PACIFISM)) to_chat(M, "You don't want to hurt anyone!") return FALSE @@ -255,7 +255,7 @@ return FALSE else - if(L.has_disability(DISABILITY_PACIFISM)) + if(L.has_trait(TRAIT_PACIFISM)) to_chat(L, "You don't want to hurt anyone!") return @@ -280,7 +280,7 @@ grabbedby(M) return FALSE if("harm") - if(M.has_disability(DISABILITY_PACIFISM)) + if(M.has_trait(TRAIT_PACIFISM)) to_chat(M, "You don't want to hurt anyone!") return FALSE M.do_attack_animation(src) @@ -370,7 +370,7 @@ //called when the mob receives a bright flash /mob/living/proc/flash_act(intensity = 1, override_blindness_check = 0, affect_silicon = 0, visual = 0, type = /obj/screen/fullscreen/flash) - if(get_eye_protection() < intensity && (override_blindness_check || !(has_disability(DISABILITY_BLIND)))) + if(get_eye_protection() < intensity && (override_blindness_check || !(has_trait(TRAIT_BLIND)))) overlay_fullscreen("flash", type) addtimer(CALLBACK(src, .proc/clear_fullscreen, "flash", 25), 25) return TRUE diff --git a/code/modules/mob/living/living_defines.dm b/code/modules/mob/living/living_defines.dm index 471d29a361..b56c7ff613 100644 --- a/code/modules/mob/living/living_defines.dm +++ b/code/modules/mob/living/living_defines.dm @@ -32,7 +32,7 @@ var/incorporeal_move = FALSE //FALSE is off, INCORPOREAL_MOVE_BASIC is normal, INCORPOREAL_MOVE_SHADOW is for ninjas //and INCORPOREAL_MOVE_JAUNT is blocked by holy water/salt - var/list/disabilities = list() + var/list/status_traits = list() var/list/surgeries = list() //a list of surgery datums. generally empty, they're added when the player wants them. diff --git a/code/modules/mob/living/say.dm b/code/modules/mob/living/say.dm index 2143e9b2c8..650ac3e1a6 100644 --- a/code/modules/mob/living/say.dm +++ b/code/modules/mob/living/say.dm @@ -273,7 +273,7 @@ GLOBAL_LIST_INIT(department_radio_keys, list( return 1 /mob/living/proc/can_speak_vocal(message) //Check AFTER handling of xeno and ling channels - if(has_disability(DISABILITY_MUTE)) + if(has_trait(TRAIT_MUTE)) return 0 if(is_muzzled()) diff --git a/code/modules/mob/living/silicon/ai/freelook/chunk.dm b/code/modules/mob/living/silicon/ai/freelook/chunk.dm index a76c02f3b5..bf3139cc4f 100644 --- a/code/modules/mob/living/silicon/ai/freelook/chunk.dm +++ b/code/modules/mob/living/silicon/ai/freelook/chunk.dm @@ -60,9 +60,6 @@ // The actual updating. It gathers the visible turfs from cameras and puts them into the appropiate lists. /datum/camerachunk/proc/update() - - set background = BACKGROUND_ENABLED - var/list/newVisibleTurfs = list() for(var/camera in cameras) diff --git a/code/modules/mob/living/silicon/robot/life.dm b/code/modules/mob/living/silicon/robot/life.dm index 25c5951f3a..c08dd83f99 100644 --- a/code/modules/mob/living/silicon/robot/life.dm +++ b/code/modules/mob/living/silicon/robot/life.dm @@ -1,7 +1,5 @@ /mob/living/silicon/robot/Life() set invisibility = 0 - set background = BACKGROUND_ENABLED - if (src.notransform) return diff --git a/code/modules/mob/living/simple_animal/bot/bot.dm b/code/modules/mob/living/simple_animal/bot/bot.dm index 9050ba0ffa..07499b0a1f 100644 --- a/code/modules/mob/living/simple_animal/bot/bot.dm +++ b/code/modules/mob/living/simple_animal/bot/bot.dm @@ -226,7 +226,6 @@ return //we use a different hud /mob/living/simple_animal/bot/handle_automated_action() //Master process which handles code common across most bots. - set background = BACKGROUND_ENABLED diag_hud_set_botmode() if (ignorelistcleanuptimer % 300 == 0) // Every 300 actions, clean up the ignore list from old junk diff --git a/code/modules/mob/living/simple_animal/bot/ed209bot.dm b/code/modules/mob/living/simple_animal/bot/ed209bot.dm index 47cf1ec5cc..d265d19cb2 100644 --- a/code/modules/mob/living/simple_animal/bot/ed209bot.dm +++ b/code/modules/mob/living/simple_animal/bot/ed209bot.dm @@ -367,7 +367,7 @@ Auto Patrol[]"}, continue /mob/living/simple_animal/bot/ed209/proc/check_for_weapons(var/obj/item/slot_item) - if(slot_item && slot_item.needs_permit) + if(slot_item && (slot_item.item_flags & NEEDS_PERMIT)) return 1 return 0 diff --git a/code/modules/mob/living/simple_animal/bot/medbot.dm b/code/modules/mob/living/simple_animal/bot/medbot.dm index 9453a7d38f..6946c8992f 100644 --- a/code/modules/mob/living/simple_animal/bot/medbot.dm +++ b/code/modules/mob/living/simple_animal/bot/medbot.dm @@ -343,7 +343,7 @@ /mob/living/simple_animal/bot/medbot/proc/assess_patient(mob/living/carbon/C) //Time to see if they need medical help! - if(C.stat == DEAD || (C.status_flags & FAKEDEATH)) + if(C.stat == DEAD || (C.has_trait(TRAIT_FAKEDEATH))) return FALSE //welp too late for them! if(!(loc == C.loc) && !(isturf(C.loc) && isturf(loc))) @@ -418,7 +418,7 @@ soft_reset() return - if(C.stat == DEAD || (C.status_flags & FAKEDEATH)) + if(C.stat == DEAD || (C.has_trait(TRAIT_FAKEDEATH))) var/list/messagevoice = list("No! Stay with me!" = 'sound/voice/mno.ogg',"Live, damnit! LIVE!" = 'sound/voice/mlive.ogg',"I...I've never lost a patient before. Not today, I mean." = 'sound/voice/mlost.ogg') var/message = pick(messagevoice) speak(message) diff --git a/code/modules/mob/living/simple_animal/bot/secbot.dm b/code/modules/mob/living/simple_animal/bot/secbot.dm index 25baa09772..68b82abb0e 100644 --- a/code/modules/mob/living/simple_animal/bot/secbot.dm +++ b/code/modules/mob/living/simple_animal/bot/secbot.dm @@ -392,7 +392,7 @@ Auto Patrol: []"}, else continue /mob/living/simple_animal/bot/secbot/proc/check_for_weapons(var/obj/item/slot_item) - if(slot_item && slot_item.needs_permit) + if(slot_item && (slot_item.item_flags & NEEDS_PERMIT)) return 1 return 0 @@ -424,7 +424,7 @@ Auto Patrol: []"}, mode = BOT_HUNT /mob/living/simple_animal/bot/secbot/Crossed(atom/movable/AM) - if(ismob(AM) && target) + if(has_gravity() && ismob(AM) && target) var/mob/living/carbon/C = AM if(!istype(C) || !C || in_range(src, target)) return diff --git a/code/modules/mob/living/simple_animal/friendly/dog.dm b/code/modules/mob/living/simple_animal/friendly/dog.dm index 812d4448d5..282a02494a 100644 --- a/code/modules/mob/living/simple_animal/friendly/dog.dm +++ b/code/modules/mob/living/simple_animal/friendly/dog.dm @@ -87,16 +87,16 @@ if(def_zone) if(def_zone == "head") if(inventory_head) - armorval = inventory_head.armor[type] + armorval = inventory_head.armor.getRating(type) else if(inventory_back) - armorval = inventory_back.armor[type] + armorval = inventory_back.armor.getRating(type) return armorval else if(inventory_head) - armorval += inventory_head.armor[type] + armorval += inventory_head.armor.getRating(type) if(inventory_back) - armorval += inventory_back.armor[type] + armorval += inventory_back.armor.getRating(type) return armorval*0.5 /mob/living/simple_animal/pet/dog/corgi/attackby(obj/item/O, mob/user, params) diff --git a/code/modules/mob/living/simple_animal/friendly/drone/drones_as_items.dm b/code/modules/mob/living/simple_animal/friendly/drone/drones_as_items.dm index c7fbcd0e3a..20062972ec 100644 --- a/code/modules/mob/living/simple_animal/friendly/drone/drones_as_items.dm +++ b/code/modules/mob/living/simple_animal/friendly/drone/drones_as_items.dm @@ -61,4 +61,4 @@ D.equip_to_slot_or_del(new_hat, slot_head) D.admin_spawned = admin_spawned D.key = user.key - qdel(src) \ No newline at end of file + qdel(src) diff --git a/code/modules/mob/living/simple_animal/friendly/drone/interaction.dm b/code/modules/mob/living/simple_animal/friendly/drone/interaction.dm index 6d87563ae9..1ec3d204c1 100644 --- a/code/modules/mob/living/simple_animal/friendly/drone/interaction.dm +++ b/code/modules/mob/living/simple_animal/friendly/drone/interaction.dm @@ -105,7 +105,7 @@ var/armorval = 0 if(head) - armorval = head.armor[type] + armorval = head.armor.getRating(type) return (armorval * get_armor_effectiveness()) //armor is reduced for tiny fragile drones /mob/living/simple_animal/drone/proc/get_armor_effectiveness() diff --git a/code/modules/mob/living/simple_animal/friendly/snake.dm b/code/modules/mob/living/simple_animal/friendly/snake.dm new file mode 100644 index 0000000000..caa9f10905 --- /dev/null +++ b/code/modules/mob/living/simple_animal/friendly/snake.dm @@ -0,0 +1,61 @@ +/mob/living/simple_animal/hostile/retaliate/poison + var/poison_per_bite = 0 + var/poison_type = "toxin" + +/mob/living/simple_animal/hostile/retaliate/poison/AttackingTarget() + . = ..() + if(. && isliving(target)) + var/mob/living/L = target + if(L.reagents && !poison_per_bite == 0) + L.reagents.add_reagent(poison_type, poison_per_bite) + return . + +/mob/living/simple_animal/hostile/retaliate/poison/snake + name = "snake" + desc = "A slithery snake. These legless reptiles are the bane of mice and adventurers alike." + icon_state = "snake" + icon_living = "snake" + icon_dead = "snake_dead" + speak_emote = list("hisses") + health = 20 + maxHealth = 20 + attacktext = "bites" + melee_damage_lower = 5 + melee_damage_upper = 6 + response_help = "pets" + response_disarm = "shoos" + response_harm = "steps on" + faction = list("hostile") + ventcrawler = VENTCRAWLER_ALWAYS + density = FALSE + pass_flags = PASSTABLE | PASSMOB + mob_size = MOB_SIZE_SMALL + gold_core_spawnable = FRIENDLY_SPAWN + obj_damage = 0 + environment_smash = ENVIRONMENT_SMASH_NONE + + +/mob/living/simple_animal/hostile/retaliate/poison/snake/ListTargets(atom/the_target) + . = oview(vision_range, targets_from) //get list of things in vision range + var/list/living_mobs = list() + var/list/mice = list() + for (var/HM in .) + //Yum a tasty mouse + if(istype(HM, /mob/living/simple_animal/mouse)) + mice += HM + if(isliving(HM)) + living_mobs += HM + + // if no tasty mice to chase, lets chase any living mob enemies in our vision range + if(length(mice) == 0) + //Filter living mobs (in range mobs) by those we consider enemies (retaliate behaviour) + return living_mobs & enemies + return mice + +/mob/living/simple_animal/hostile/retaliate/poison/snake/AttackingTarget() + if(istype(target, /mob/living/simple_animal/mouse)) + visible_message("[name] consumes [target] in a single gulp!", "You consume [target] in a single gulp!") + QDEL_NULL(target) + adjustBruteLoss(-2) + else + return ..() \ No newline at end of file diff --git a/code/modules/mob/living/simple_animal/hostile/headcrab.dm b/code/modules/mob/living/simple_animal/hostile/headcrab.dm index a42a79e02a..a3bc98f48a 100644 --- a/code/modules/mob/living/simple_animal/hostile/headcrab.dm +++ b/code/modules/mob/living/simple_animal/hostile/headcrab.dm @@ -22,7 +22,7 @@ ventcrawler = VENTCRAWLER_ALWAYS var/datum/mind/origin var/egg_lain = 0 -// gold_core_spawnable = HOSTILE_SPAWN //are you sure about this?? + //gold_core_spawnable = HOSTILE_SPAWN //are you sure about this?? /mob/living/simple_animal/hostile/headcrab/proc/Infect(mob/living/carbon/victim) var/obj/item/organ/body_egg/changeling_egg/egg = new(victim) @@ -43,7 +43,7 @@ // Changeling egg can survive in aliens! var/mob/living/carbon/C = target if(C.stat == DEAD) - if(C.status_flags & XENO_HOST) + if(C.has_trait(TRAIT_XENO_HOST)) to_chat(src, "A foreign presence repels us from this body. Perhaps we should try to infest another?") return Infect(target) diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm index 0388c1b4f9..f09a31415a 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm @@ -558,7 +558,7 @@ Difficulty: Very Hard H.regenerate_limbs() H.regenerate_organs() H.revive(1,0) - H.add_disability(DISABILITY_NOCLONE, MAGIC_DISABILITY) //Free revives, but significantly limits your options for reviving except via the crystal + H.add_trait(TRAIT_NOCLONE, MAGIC_TRAIT) //Free revives, but significantly limits your options for reviving except via the crystal H.grab_ghost(force = TRUE) /obj/machinery/anomalous_crystal/helpers //Lets ghost spawn as helpful creatures that can only heal people slightly. Incredibly fragile and they can't converse with humans @@ -719,7 +719,7 @@ Difficulty: Very Hard if(isliving(A) && holder_animal) var/mob/living/L = A L.notransform = 1 - L.add_disability(DISABILITY_MUTE, STASIS_MUTE) + L.add_trait(TRAIT_MUTE, STASIS_MUTE) L.status_flags |= GODMODE L.mind.transfer_to(holder_animal) var/obj/effect/proc_holder/spell/targeted/exit_possession/P = new /obj/effect/proc_holder/spell/targeted/exit_possession @@ -729,7 +729,7 @@ Difficulty: Very Hard /obj/structure/closet/stasis/dump_contents(var/kill = 1) STOP_PROCESSING(SSobj, src) for(var/mob/living/L in src) - L.remove_disability(DISABILITY_MUTE, STASIS_MUTE) + L.remove_trait(TRAIT_MUTE, STASIS_MUTE) L.status_flags &= ~GODMODE L.notransform = 0 if(holder_animal) diff --git a/code/modules/mob/living/status_procs.dm b/code/modules/mob/living/status_procs.dm index ff2e294b93..9c46c49ad9 100644 --- a/code/modules/mob/living/status_procs.dm +++ b/code/modules/mob/living/status_procs.dm @@ -1,6 +1,6 @@ //Here are the procs used to modify status effects of a mob. //The effects include: stun, knockdown, unconscious, sleeping, resting, jitteriness, dizziness, -// eye damage, eye_blind, eye_blurry, druggy, DISABILITY_BLIND disability, and DISABILITY_NEARSIGHT disability. +// eye damage, eye_blind, eye_blurry, druggy, TRAIT_BLIND trait, and TRAIT_NEARSIGHT trait. ////////////////////////////// STUN //////////////////////////////////// @@ -15,7 +15,7 @@ return 0 /mob/living/proc/Stun(amount, updating = TRUE, ignore_canstun = FALSE) //Can't go below remaining duration - if((status_flags & CANSTUN) || ignore_canstun) + if(((status_flags & CANSTUN) && !has_trait(TRAIT_STUNIMMUNE)) || ignore_canstun) if(absorb_stun(amount, ignore_canstun)) return var/datum/status_effect/incapacitating/stun/S = IsStun() @@ -26,7 +26,7 @@ return S /mob/living/proc/SetStun(amount, updating = TRUE, ignore_canstun = FALSE) //Sets remaining duration - if((status_flags & CANSTUN) || ignore_canstun) + if(((status_flags & CANSTUN) && !has_trait(TRAIT_STUNIMMUNE)) || ignore_canstun) var/datum/status_effect/incapacitating/stun/S = IsStun() if(amount <= 0) if(S) @@ -41,7 +41,7 @@ return S /mob/living/proc/AdjustStun(amount, updating = TRUE, ignore_canstun = FALSE) //Adds to remaining duration - if((status_flags & CANSTUN) || ignore_canstun) + if(((status_flags & CANSTUN) && !has_trait(TRAIT_STUNIMMUNE)) || ignore_canstun) if(absorb_stun(amount, ignore_canstun)) return var/datum/status_effect/incapacitating/stun/S = IsStun() @@ -63,7 +63,7 @@ return 0 /mob/living/proc/Knockdown(amount, updating = TRUE, ignore_canknockdown = FALSE) //Can't go below remaining duration - if((status_flags & CANKNOCKDOWN) || ignore_canknockdown) + if(((status_flags & CANKNOCKDOWN) && !has_trait(TRAIT_STUNIMMUNE)) || ignore_canknockdown) if(absorb_stun(amount, ignore_canknockdown)) return var/datum/status_effect/incapacitating/knockdown/K = IsKnockdown() @@ -74,7 +74,7 @@ return K /mob/living/proc/SetKnockdown(amount, updating = TRUE, ignore_canknockdown = FALSE) //Sets remaining duration - if((status_flags & CANKNOCKDOWN) || ignore_canknockdown) + if(((status_flags & CANKNOCKDOWN) && !has_trait(TRAIT_STUNIMMUNE)) || ignore_canknockdown) var/datum/status_effect/incapacitating/knockdown/K = IsKnockdown() if(amount <= 0) if(K) @@ -89,7 +89,7 @@ return K /mob/living/proc/AdjustKnockdown(amount, updating = TRUE, ignore_canknockdown = FALSE) //Adds to remaining duration - if((status_flags & CANKNOCKDOWN) || ignore_canknockdown) + if(((status_flags & CANKNOCKDOWN) && !has_trait(TRAIT_STUNIMMUNE)) || ignore_canknockdown) if(absorb_stun(amount, ignore_canknockdown)) return var/datum/status_effect/incapacitating/knockdown/K = IsKnockdown() @@ -140,18 +140,18 @@ /////////////////////////////////// DISABILITIES //////////////////////////////////// -/mob/living/proc/add_disability(disability, source) - if(!disabilities[disability]) - disabilities[disability] = list(source) +/mob/living/proc/add_trait(trait, source) + if(!status_traits[trait]) + status_traits[trait] = list(source) else - disabilities[disability] |= list(source) + status_traits[trait] |= list(source) -/mob/living/proc/remove_disability(disability, list/sources) - if(!disabilities[disability]) +/mob/living/proc/remove_trait(trait, list/sources) + if(!status_traits[trait]) return - if(!sources) // No defined source cures the disability entirely. - disabilities -= disability + if(!sources) // No defined source cures the trait entirely. + status_traits -= trait return if(!islist(sources)) @@ -159,61 +159,74 @@ if(LAZYLEN(sources)) for(var/S in sources) - if(S in disabilities[disability]) - disabilities[disability] -= S + if(S in status_traits[trait]) + status_traits[trait] -= S else - disabilities[disability] = list() + status_traits[trait] = list() - if(!LAZYLEN(disabilities[disability])) - disabilities -= disability + if(!LAZYLEN(status_traits[trait])) + status_traits -= trait -/mob/living/proc/has_disability(disability, list/sources) - if(!disabilities[disability]) +/mob/living/proc/has_trait(trait, list/sources) + if(!status_traits[trait]) return FALSE . = FALSE if(LAZYLEN(sources)) for(var/S in sources) - if(S in disabilities[disability]) + if(S in status_traits[trait]) return TRUE else - if(LAZYLEN(disabilities[disability])) + if(LAZYLEN(status_traits[trait])) return TRUE -/mob/living/proc/remove_all_disabilities() - disabilities = list() +/mob/living/proc/remove_all_traits() + status_traits = list() -/////////////////////////////////// DISABILITY PROCS //////////////////////////////////// +/////////////////////////////////// TRAIT PROCS //////////////////////////////////// /mob/living/proc/cure_blind(list/sources) - remove_disability(DISABILITY_BLIND, sources) - if(!has_disability(DISABILITY_BLIND)) + remove_trait(TRAIT_BLIND, sources) + if(!has_trait(TRAIT_BLIND)) adjust_blindness(-1) /mob/living/proc/become_blind(source) - if(!has_disability(DISABILITY_BLIND)) + if(!has_trait(TRAIT_BLIND)) blind_eyes(1) - add_disability(DISABILITY_BLIND, source) + add_trait(TRAIT_BLIND, source) /mob/living/proc/cure_nearsighted(list/sources) - remove_disability(DISABILITY_NEARSIGHT, sources) - if(!has_disability(DISABILITY_NEARSIGHT)) + remove_trait(TRAIT_NEARSIGHT, sources) + if(!has_trait(TRAIT_NEARSIGHT)) clear_fullscreen("nearsighted") /mob/living/proc/become_nearsighted(source) - if(!has_disability(DISABILITY_NEARSIGHT)) + if(!has_trait(TRAIT_NEARSIGHT)) overlay_fullscreen("nearsighted", /obj/screen/fullscreen/impaired, 1) - add_disability(DISABILITY_NEARSIGHT, source) + add_trait(TRAIT_NEARSIGHT, source) /mob/living/proc/cure_husk(list/sources) - remove_disability(DISABILITY_HUSK, sources) - if(!has_disability(DISABILITY_HUSK)) - status_flags &= ~DISFIGURED + remove_trait(TRAIT_HUSK, sources) + if(!has_trait(TRAIT_HUSK)) + remove_trait(TRAIT_DISFIGURED, "husk") update_body() /mob/living/proc/become_husk(source) - if(!has_disability(DISABILITY_HUSK)) - status_flags |= DISFIGURED //makes them unknown + if(!has_trait(TRAIT_HUSK)) + add_trait(TRAIT_DISFIGURED, "husk") update_body() - add_disability(DISABILITY_HUSK, source) + add_trait(TRAIT_HUSK, source) + +/mob/living/proc/cure_fakedeath(list/sources) + remove_trait(TRAIT_FAKEDEATH, sources) + if(stat != DEAD) + tod = null + update_stat() + +/mob/living/proc/fakedeath(source) + if(stat == DEAD) + return + add_trait(TRAIT_FAKEDEATH, source) + tod = worldtime2text() + update_stat() \ No newline at end of file diff --git a/code/modules/mob/mob_cleanup.dm b/code/modules/mob/mob_cleanup.dm deleted file mode 100644 index d62c077e73..0000000000 --- a/code/modules/mob/mob_cleanup.dm +++ /dev/null @@ -1,5 +0,0 @@ -//Methods that need to be cleaned. -/* INFORMATION -Put (mob/proc)s here that are in dire need of a code cleanup. -*/ - diff --git a/code/modules/mob/mob_helpers.dm b/code/modules/mob/mob_helpers.dm index 999a6090eb..0295d4f7fa 100644 --- a/code/modules/mob/mob_helpers.dm +++ b/code/modules/mob/mob_helpers.dm @@ -372,9 +372,6 @@ It's fairly easy to fix if dealing with single letters but not so much with comp if("monkey") if(M.viruses && (locate(/datum/disease/transformation/jungle_fever) in M.viruses)) return 2 - if("abductor") - if(M.mind in SSticker.mode.abductors) - return 2 return TRUE if(M.mind && LAZYLEN(M.mind.antag_datums)) //they have an antag datum! return TRUE diff --git a/code/modules/mob/say.dm b/code/modules/mob/say.dm index fad3a70bcf..365f62e88b 100644 --- a/code/modules/mob/say.dm +++ b/code/modules/mob/say.dm @@ -82,4 +82,4 @@ return 0 /mob/proc/lingcheck() - return LINGHIVE_NONE \ No newline at end of file + return LINGHIVE_NONE diff --git a/code/modules/mob/status_procs.dm b/code/modules/mob/status_procs.dm index 591498c084..53095045f6 100644 --- a/code/modules/mob/status_procs.dm +++ b/code/modules/mob/status_procs.dm @@ -1,7 +1,7 @@ //Here are the procs used to modify status effects of a mob. //The effects include: stun, knockdown, unconscious, sleeping, resting, jitteriness, dizziness, ear damage, -// eye damage, eye_blind, eye_blurry, druggy, DISABILITY_BLIND disability, and DISABILITY_NEARSIGHT disability. +// eye damage, eye_blind, eye_blurry, druggy, TRAIT_BLIND trait, and TRAIT_NEARSIGHT trait. /////////////////////////////////// STUN //////////////////////////////////// @@ -28,7 +28,7 @@ return 0 /mob/living/proc/Unconscious(amount, updating = TRUE, ignore_canunconscious = FALSE) //Can't go below remaining duration - if((status_flags & CANUNCONSCIOUS) || ignore_canunconscious) + if(((status_flags & CANUNCONSCIOUS) && !has_trait(TRAIT_STUNIMMUNE)) || ignore_canunconscious) var/datum/status_effect/incapacitating/unconscious/U = IsUnconscious() if(U) U.duration = max(world.time + amount, U.duration) @@ -37,7 +37,7 @@ return U /mob/living/proc/SetUnconscious(amount, updating = TRUE, ignore_canunconscious = FALSE) //Sets remaining duration - if((status_flags & CANUNCONSCIOUS) || ignore_canunconscious) + if(((status_flags & CANUNCONSCIOUS) && !has_trait(TRAIT_STUNIMMUNE)) || ignore_canunconscious) var/datum/status_effect/incapacitating/unconscious/U = IsUnconscious() if(amount <= 0) if(U) @@ -49,7 +49,7 @@ return U /mob/living/proc/AdjustUnconscious(amount, updating = TRUE, ignore_canunconscious = FALSE) //Adds to remaining duration - if((status_flags & CANUNCONSCIOUS) || ignore_canunconscious) + if(((status_flags & CANUNCONSCIOUS) && !has_trait(TRAIT_STUNIMMUNE)) || ignore_canunconscious) var/datum/status_effect/incapacitating/unconscious/U = IsUnconscious() if(U) U.duration += amount @@ -164,7 +164,7 @@ blind_minimum = 1 if(isliving(src)) var/mob/living/L = src - if(L.has_disability(DISABILITY_BLIND)) + if(L.has_trait(TRAIT_BLIND)) blind_minimum = 1 eye_blind = max(eye_blind+amount, blind_minimum) if(!eye_blind) @@ -185,7 +185,7 @@ blind_minimum = 1 if(isliving(src)) var/mob/living/L = src - if(L.has_disability(DISABILITY_BLIND)) + if(L.has_trait(TRAIT_BLIND)) blind_minimum = 1 eye_blind = blind_minimum if(!eye_blind) diff --git a/code/modules/modular_computers/computers/item/computer.dm b/code/modules/modular_computers/computers/item/computer.dm index 0b149c20da..03e57c5ec6 100644 --- a/code/modules/modular_computers/computers/item/computer.dm +++ b/code/modules/modular_computers/computers/item/computer.dm @@ -175,11 +175,11 @@ turn_on(user) /obj/item/device/modular_computer/emag_act(mob/user) - if(emagged) + if(obj_flags & EMAGGED) to_chat(user, "\The [src] was already emagged.") return 0 else - emagged = TRUE + obj_flags |= EMAGGED to_chat(user, "You emag \the [src]. It's screen briefly shows a \"OVERRIDE ACCEPTED: New software downloads available.\" message.") return 1 diff --git a/code/modules/modular_computers/file_system/program.dm b/code/modules/modular_computers/file_system/program.dm index 57ec83798d..75fdc3ea37 100644 --- a/code/modules/modular_computers/file_system/program.dm +++ b/code/modules/modular_computers/file_system/program.dm @@ -81,7 +81,7 @@ if(!access_to_check) // No required_access, allow it. return 1 - if(!transfer && computer && computer.emagged) //emags can bypass the execution locks but not the download ones. + if(!transfer && computer && (computer.obj_flags & EMAGGED)) //emags can bypass the execution locks but not the download ones. return 1 if(IsAdminGhost(user)) diff --git a/code/modules/modular_computers/file_system/programs/file_browser.dm b/code/modules/modular_computers/file_system/programs/file_browser.dm index f42174320e..11a4b8e125 100644 --- a/code/modules/modular_computers/file_system/programs/file_browser.dm +++ b/code/modules/modular_computers/file_system/programs/file_browser.dm @@ -112,7 +112,7 @@ if(!printer) error = "Missing Hardware: Your computer does not have required hardware to complete this operation." return 1 - if(!printer.print_text("" + prepare_printjob(F.stored_data) + "", open_file)) + if(!printer.print_text("" + prepare_printjob(F.stored_data) + "", open_file)) error = "Hardware error: Printer was unable to print the file. It may be out of paper." return 1 if("PRG_copytousb") diff --git a/code/modules/modular_computers/file_system/programs/ntdownloader.dm b/code/modules/modular_computers/file_system/programs/ntdownloader.dm index be38f8a7b6..b2fe7a0f64 100644 --- a/code/modules/modular_computers/file_system/programs/ntdownloader.dm +++ b/code/modules/modular_computers/file_system/programs/ntdownloader.dm @@ -29,7 +29,7 @@ return 0 // Attempting to download antag only program, but without having emagged computer. No. - if(PRG.available_on_syndinet && !computer.emagged) + if(PRG.available_on_syndinet && !(computer.obj_flags & EMAGGED)) return 0 var/obj/item/computer_hardware/hard_drive/hard_drive = computer.all_components[MC_HDD] @@ -140,7 +140,7 @@ "size" = P.size ))) data["hackedavailable"] = 0 - if(computer.emagged) // If we are running on emagged computer we have access to some "bonus" software + if(computer.obj_flags & EMAGGED) // If we are running on emagged computer we have access to some "bonus" software var/list/hacked_programs[0] for(var/S in SSnetworks.station_network.available_antag_software) var/datum/computer_file/program/P = S diff --git a/code/modules/ninja/suit/n_suit_verbs/ninja_stars.dm b/code/modules/ninja/suit/n_suit_verbs/ninja_stars.dm index 5725112da5..31ac62d9fc 100644 --- a/code/modules/ninja/suit/n_suit_verbs/ninja_stars.dm +++ b/code/modules/ninja/suit/n_suit_verbs/ninja_stars.dm @@ -15,4 +15,4 @@ /obj/item/throwing_star/ninja name = "ninja throwing star" throwforce = 30 - embedded_pain_multiplier = 6 + embedding = list("embedded_pain_multiplier" = 6, "embed_chance" = 100, "embedded_fall_chance" = 0) diff --git a/code/modules/ninja/suit/ninjaDrainAct.dm b/code/modules/ninja/suit/ninjaDrainAct.dm index cdae56571f..8b9abbee7a 100644 --- a/code/modules/ninja/suit/ninjaDrainAct.dm +++ b/code/modules/ninja/suit/ninjaDrainAct.dm @@ -50,10 +50,10 @@ They *could* go in their appropriate files, but this is supposed to be modular else break - if(!emagged) + if(!(obj_flags & EMAGGED)) flick("apc-spark", G) playsound(loc, "sparks", 50, 1) - emagged = TRUE + obj_flags |= EMAGGED locked = FALSE update_icon() diff --git a/code/modules/ninja/suit/suit_process.dm b/code/modules/ninja/suit/suit_process.dm index 99f801ed76..c9e955b359 100644 --- a/code/modules/ninja/suit/suit_process.dm +++ b/code/modules/ninja/suit/suit_process.dm @@ -1,6 +1,4 @@ /obj/item/clothing/suit/space/space_ninja/proc/ntick(mob/living/carbon/human/U = affecting) - set background = BACKGROUND_ENABLED - //Runs in the background while the suit is initialized. //Requires charge or stealth to process. spawn while(s_initialized) diff --git a/code/modules/paperwork/contract.dm b/code/modules/paperwork/contract.dm index d911ee7036..563d5a83ad 100644 --- a/code/modules/paperwork/contract.dm +++ b/code/modules/paperwork/contract.dm @@ -202,7 +202,7 @@ if(!user.mind.hasSoul) to_chat(user, "You do not possess a soul.") return 0 - if(user.has_disability(DISABILITY_DUMB)) + if(user.has_trait(TRAIT_DUMB)) to_chat(user, "You quickly scrawl 'your name' on the contract.") signIncorrectly() return 0 diff --git a/code/modules/paperwork/paper.dm b/code/modules/paperwork/paper.dm index c666160da4..35ec667027 100644 --- a/code/modules/paperwork/paper.dm +++ b/code/modules/paperwork/paper.dm @@ -93,7 +93,7 @@ return if(ishuman(usr)) var/mob/living/carbon/human/H = usr - if(H.has_disability(DISABILITY_CLUMSY) && prob(25)) + if(H.has_trait(TRAIT_CLUMSY) && prob(25)) to_chat(H, "You cut yourself on the paper! Ahhhh! Ahhhhh!") H.damageoverlaytemp = 9001 H.update_damage_hud() @@ -317,7 +317,7 @@ to_chat(user, "You stamp the paper with your rubber stamp.") if(P.is_hot()) - if(user.has_disability(DISABILITY_CLUMSY) && prob(10)) + if(user.has_trait(TRAIT_CLUMSY) && prob(10)) user.visible_message("[user] accidentally ignites themselves!", \ "You miss the paper and accidentally light yourself on fire!") user.dropItemToGround(P) diff --git a/code/modules/paperwork/paperplane.dm b/code/modules/paperwork/paperplane.dm index af33dfb28c..3753febca2 100644 --- a/code/modules/paperwork/paperplane.dm +++ b/code/modules/paperwork/paperplane.dm @@ -65,7 +65,7 @@ update_icon() else if(P.is_hot()) - if(user.has_disability(DISABILITY_CLUMSY) && prob(10)) + if(user.has_trait(TRAIT_CLUMSY) && prob(10)) user.visible_message("[user] accidentally ignites themselves!", \ "You miss [src] and accidentally light yourself on fire!") user.dropItemToGround(P) diff --git a/code/modules/paperwork/pen.dm b/code/modules/paperwork/pen.dm index 1d85753de0..4b093641d9 100644 --- a/code/modules/paperwork/pen.dm +++ b/code/modules/paperwork/pen.dm @@ -126,7 +126,7 @@ /obj/item/pen/afterattack(obj/O, mob/living/user, proximity) //Changing Name/Description of items. Only works if they have the 'unique_rename' var set if(isobj(O) && proximity) - if(O.unique_rename) + if(O.obj_flags & UNIQUE_RENAME) var/penchoice = input(user, "What would you like to edit?", "Rename or change description?") as null|anything in list("Rename","Change description") if(!QDELETED(O) && user.canUseTopic(O, be_close = TRUE)) @@ -196,7 +196,7 @@ w_class = initial(w_class) name = initial(name) hitsound = initial(hitsound) - embed_chance = initial(embed_chance) + embedding = embedding.setRating(embed_chance = EMBED_CHANCE) throwforce = initial(throwforce) playsound(user, 'sound/weapons/saberoff.ogg', 5, 1) to_chat(user, "[src] can now be concealed.") @@ -206,7 +206,7 @@ w_class = WEIGHT_CLASS_NORMAL name = "energy dagger" hitsound = 'sound/weapons/blade1.ogg' - embed_chance = 100 //rule of cool + embedding = embedding.setRating(embed_chance = 100) //rule of cool throwforce = 35 playsound(user, 'sound/weapons/saberon.ogg', 5, 1) to_chat(user, "[src] is now active.") diff --git a/code/modules/power/apc.dm b/code/modules/power/apc.dm index 422e62c10f..695b01e0b7 100644 --- a/code/modules/power/apc.dm +++ b/code/modules/power/apc.dm @@ -315,7 +315,7 @@ update_state |= UPSTATE_OPENED1 if(opened==2) update_state |= UPSTATE_OPENED2 - else if(emagged || malfai) + else if((obj_flags & EMAGGED) || malfai) update_state |= UPSTATE_BLUESCREEN else if(panel_open) update_state |= UPSTATE_WIREEXP @@ -395,8 +395,8 @@ "You hear a crack.") return //SSticker.mode:apcs-- //XSI said no and I agreed. -rastaf0 - else if (emagged) // We emag board, not APC's frame - emagged = FALSE + else if (obj_flags & EMAGGED) // We emag board, not APC's frame + obj_flags &= ~EMAGGED user.visible_message(\ "[user.name] has discarded emaged power control board from [src.name]!",\ "You discarded shorten board.") @@ -479,7 +479,7 @@ to_chat(user, "There is nothing to secure!") return update_icon() - else if(emagged) + else if(obj_flags & EMAGGED) to_chat(user, "The interface is broken!") else if((stat & MAINT) && !opened) ..() //its an empty closed frame... theres no wires to expose! @@ -669,7 +669,7 @@ togglelock(user) /obj/machinery/power/apc/proc/togglelock(mob/living/user) - if(emagged) + if(obj_flags & EMAGGED) to_chat(user, "The interface is broken!") else if(opened) to_chat(user, "You must close the cover to swipe an ID card!") @@ -705,7 +705,7 @@ update_icon() /obj/machinery/power/apc/emag_act(mob/user) - if(!emagged && !malfhack) + if(!(obj_flags & EMAGGED) && !malfhack) if(opened) to_chat(user, "You must close the cover to swipe an ID card!") else if(panel_open) @@ -715,7 +715,7 @@ else flick("apc-spark", src) playsound(src, "sparks", 75, 1) - emagged = TRUE + obj_flags |= EMAGGED locked = FALSE to_chat(user, "You emag the APC interface.") update_icon() @@ -852,7 +852,7 @@ switch(action) if("lock") if(usr.has_unlimited_silicon_privilege) - if(emagged || (stat & (BROKEN|MAINT))) + if((obj_flags & EMAGGED) || (stat & (BROKEN|MAINT))) to_chat(usr, "The APC does not respond to the command.") else locked = !locked diff --git a/code/modules/power/cable.dm b/code/modules/power/cable.dm index 3ad5dd5357..883df8a6c9 100644 --- a/code/modules/power/cable.dm +++ b/code/modules/power/cable.dm @@ -41,7 +41,7 @@ By design, d1 is the smallest direction and d2 is the highest level = 1 //is underfloor layer = WIRE_LAYER //Above hidden pipes, GAS_PIPE_HIDDEN_LAYER anchored = TRUE - on_blueprints = TRUE + obj_flags = CAN_BE_HIT | ON_BLUEPRINTS var/d1 = 0 // cable direction 1 (see above) var/d2 = 1 // cable direction 2 (see above) var/datum/powernet/powernet diff --git a/code/modules/power/port_gen.dm b/code/modules/power/port_gen.dm index 73f48a2b28..ba3379df45 100644 --- a/code/modules/power/port_gen.dm +++ b/code/modules/power/port_gen.dm @@ -206,9 +206,9 @@ return ..() /obj/machinery/power/port_gen/pacman/emag_act(mob/user) - if(emagged) + if(obj_flags & EMAGGED) return - emagged = TRUE + obj_flags |= EMAGGED emp_act(EMP_HEAVY) /obj/machinery/power/port_gen/pacman/attack_hand(mob/user) @@ -273,7 +273,7 @@ power_output-- src.updateUsrDialog() if (href_list["action"] == "higher_power") - if (power_output < 4 || emagged) + if (power_output < 4 || (obj_flags & EMAGGED)) power_output++ src.updateUsrDialog() if (href_list["action"] == "close") diff --git a/code/modules/power/power.dm b/code/modules/power/power.dm index 933cfc70e0..0bd230a166 100644 --- a/code/modules/power/power.dm +++ b/code/modules/power/power.dm @@ -10,7 +10,7 @@ name = null icon = 'icons/obj/power.dmi' anchored = TRUE - on_blueprints = TRUE + obj_flags = CAN_BE_HIT | ON_BLUEPRINTS var/datum/powernet/powernet = null use_power = NO_POWER_USE idle_power_usage = 0 diff --git a/code/modules/power/singularity/emitter.dm b/code/modules/power/singularity/emitter.dm index 74bc0551e0..c7a026dd83 100644 --- a/code/modules/power/singularity/emitter.dm +++ b/code/modules/power/singularity/emitter.dm @@ -260,7 +260,7 @@ return if(W.GetID()) - if(emagged) + if(obj_flags & EMAGGED) to_chat(user, "The lock seems to be broken!") return if(allowed(user)) @@ -292,10 +292,10 @@ return ..() /obj/machinery/power/emitter/emag_act(mob/user) - if(emagged) + if(obj_flags & EMAGGED) return locked = FALSE - emagged = TRUE + obj_flags |= EMAGGED if(user) user.visible_message("[user.name] emags [src].","You short out the lock.") diff --git a/code/modules/power/singularity/narsie.dm b/code/modules/power/singularity/narsie.dm index 666211fbd0..0fa1439796 100644 --- a/code/modules/power/singularity/narsie.dm +++ b/code/modules/power/singularity/narsie.dm @@ -195,7 +195,6 @@ grav_pull = 0 /obj/singularity/narsie/wizard/eat() - set background = BACKGROUND_ENABLED // if(defer_powernet_rebuild != 2) // defer_powernet_rebuild = 1 for(var/atom/X in urange(consume_range,src,1)) diff --git a/code/modules/power/singularity/singularity.dm b/code/modules/power/singularity/singularity.dm index f4b749c0e0..3c7d00b3fd 100644 --- a/code/modules/power/singularity/singularity.dm +++ b/code/modules/power/singularity/singularity.dm @@ -27,7 +27,7 @@ var/last_warning var/consumedSupermatter = 0 //If the singularity has eaten a supermatter shard and can go to stage six resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF | FREEZE_PROOF - dangerous_possession = TRUE + obj_flags = CAN_BE_HIT | DANGEROUS_POSSESSION /obj/singularity/Initialize(mapload, starting_energy = 50) //CARN: admin-alert for chuckle-fuckery. @@ -251,7 +251,6 @@ /obj/singularity/proc/eat() - set background = BACKGROUND_ENABLED for(var/tile in spiral_range_turfs(grav_pull, src)) var/turf/T = tile if(!T || !isturf(loc)) diff --git a/code/modules/power/supermatter/supermatter.dm b/code/modules/power/supermatter/supermatter.dm index 485299a704..5e62ea9729 100644 --- a/code/modules/power/supermatter/supermatter.dm +++ b/code/modules/power/supermatter/supermatter.dm @@ -538,12 +538,19 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_shard) if(!istype(W) || (W.flags_1 & ABSTRACT_1) || !istype(user)) return if(istype(W, /obj/item/scalpel/supermatter)) + var/obj/item/scalpel/supermatter/scalpel = W playsound(src, W.usesound, 100, 1) - to_chat(user, "You carefully begin to scrape \the [src] with \the [W]...") + to_chat(user, "You carefully begin to scrape [src] with [W]...") if(do_after(user, 60 * W.toolspeed, TRUE, src)) - to_chat(user, "You extract a sliver from \the [src]. \The [src] begins to react violently!") - new /obj/item/nuke_core/supermatter_sliver(drop_location()) - matter_power += 200 + if (scalpel.usesLeft) + to_chat(user, "You extract a sliver from [src]. [src] begins to react violently!") + new /obj/item/nuke_core/supermatter_sliver(drop_location()) + matter_power += 200 + scalpel.usesLeft-- + if (!scalpel.usesLeft) + to_chat(user, "A tiny piece of [W] falls off, rendering it useless!") + else + to_chat(user, "You fail to extract a sliver from [src]. [W] isn't sharp enough anymore!") else if(user.dropItemToGround(W)) user.visible_message("As [user] touches \the [src] with \a [W], silence fills the room...",\ "You touch \the [src] with \the [W], and everything suddenly goes silent.\n\The [W] flashes into dust as you flinch away from \the [src].",\ diff --git a/code/modules/power/tesla/coil.dm b/code/modules/power/tesla/coil.dm index a0977d93e3..e42715af22 100644 --- a/code/modules/power/tesla/coil.dm +++ b/code/modules/power/tesla/coil.dm @@ -68,7 +68,7 @@ /obj/machinery/power/tesla_coil/tesla_act(var/power) if(anchored && !panel_open) - being_shocked = TRUE + obj_flags |= BEING_SHOCKED //don't lose arc power when it's not connected to anything //please place tesla coils all around the station to maximize effectiveness var/power_produced = powernet ? power / power_loss : power diff --git a/code/modules/power/tesla/energy_ball.dm b/code/modules/power/tesla/energy_ball.dm index d8891e6cf6..6b50b5e321 100644 --- a/code/modules/power/tesla/energy_ball.dm +++ b/code/modules/power/tesla/energy_ball.dm @@ -18,12 +18,14 @@ dissipate_delay = 5 dissipate_strength = 1 var/list/orbiting_balls = list() + var/miniball = FALSE var/produced_power var/energy_to_raise = 32 var/energy_to_lower = -20 /obj/singularity/energy_ball/Initialize(mapload, starting_energy = 50, is_miniball = FALSE) . = ..() + miniball = is_miniball if(!is_miniball) set_light(10, 7, "#EEEEFF") @@ -42,10 +44,11 @@ . = ..() /obj/singularity/energy_ball/admin_investigate_setup() - if(istype(loc, /obj/singularity/energy_ball)) - return + if(miniball) + return //don't annnounce miniballs ..() + /obj/singularity/energy_ball/process() if(!orbiting) handle_energy() @@ -77,7 +80,7 @@ //we face the last thing we zapped, so this lets us favor that direction a bit var/move_bias = pick(GLOB.alldirs) for(var/i in 0 to move_amount) - var/move_dir = pick(GLOB.alldirs + move_bias) //ensures large-ball teslas don't just sit around + var/move_dir = pick(GLOB.alldirs + move_bias) //ensures large-ball teslas don't just sit around if(target && prob(10)) move_dir = get_dir(src,target) var/turf/T = get_step(src, move_dir) @@ -193,7 +196,7 @@ if(istype(A, /obj/machinery/power/tesla_coil)) var/dist = get_dist(source, A) var/obj/machinery/power/tesla_coil/C = A - if(dist <= zap_range && (dist < closest_dist || !closest_tesla_coil) && !C.being_shocked) + if(dist <= zap_range && (dist < closest_dist || !closest_tesla_coil) && !(C.obj_flags & BEING_SHOCKED)) closest_dist = dist //we use both of these to save on istype and typecasting overhead later on @@ -229,7 +232,7 @@ else if(ismachinery(A)) var/obj/machinery/M = A var/dist = get_dist(source, A) - if(dist <= zap_range && (dist < closest_dist || !closest_machine) && !M.being_shocked) + if(dist <= zap_range && (dist < closest_dist || !closest_machine) && !(M.obj_flags & BEING_SHOCKED)) closest_machine = M closest_atom = A closest_dist = dist @@ -240,7 +243,7 @@ else if(istype(A, /obj/structure/blob)) var/obj/structure/blob/B = A var/dist = get_dist(source, A) - if(dist <= zap_range && (dist < closest_dist || !closest_tesla_coil) && !B.being_shocked) + if(dist <= zap_range && (dist < closest_dist || !closest_tesla_coil) && !(B.obj_flags & BEING_SHOCKED)) closest_blob = B closest_atom = A closest_dist = dist @@ -251,7 +254,7 @@ else if(isstructure(A)) var/obj/structure/S = A var/dist = get_dist(source, A) - if(dist <= zap_range && (dist < closest_dist || !closest_tesla_coil) && !S.being_shocked) + if(dist <= zap_range && (dist < closest_dist || !closest_tesla_coil) && !(S.obj_flags & BEING_SHOCKED)) closest_structure = S closest_atom = A closest_dist = dist diff --git a/code/modules/procedural_mapping/mapGenerator.dm b/code/modules/procedural_mapping/mapGenerator.dm index 966ef2f9e2..95eded309c 100644 --- a/code/modules/procedural_mapping/mapGenerator.dm +++ b/code/modules/procedural_mapping/mapGenerator.dm @@ -104,8 +104,6 @@ //Requests the mapGeneratorModule(s) to (re)generate /datum/mapGenerator/proc/generate() - set background = 1 //this can get beefy - syncModules() if(!modules || !modules.len) return diff --git a/code/modules/procedural_mapping/mapGenerators/cellular.dm b/code/modules/procedural_mapping/mapGenerators/cellular.dm index 3daa7632ff..7d88f3beb0 100644 --- a/code/modules/procedural_mapping/mapGenerators/cellular.dm +++ b/code/modules/procedural_mapping/mapGenerators/cellular.dm @@ -38,8 +38,6 @@ current_state = old_state.Copy() /datum/mapGenerator/ca/generate() - set background = 1 - //Abandon all hope for efficency all who enter here //Maybe some less basic implemetation later, but this is just simple admin tool initialize() diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm index 8f52f26936..1a0e756277 100644 --- a/code/modules/projectiles/gun.dm +++ b/code/modules/projectiles/gun.dm @@ -15,8 +15,7 @@ throw_speed = 3 throw_range = 5 force = 5 - needs_permit = TRUE - unique_rename = FALSE + item_flags = NEEDS_PERMIT attack_verb = list("struck", "hit", "bashed") var/fire_sound = "gunshot" @@ -153,10 +152,10 @@ return - //Exclude lasertag guns from the DISABILITY_CLUMSY check. + //Exclude lasertag guns from the TRAIT_CLUMSY check. if(clumsy_check) if(istype(user)) - if (user.has_disability(DISABILITY_CLUMSY) && prob(40)) + if (user.has_trait(TRAIT_CLUMSY) && prob(40)) to_chat(user, "You shoot yourself in the foot with [src]!") var/shot_leg = pick("l_leg", "r_leg") process_fire(user, user, FALSE, params, shot_leg) @@ -191,7 +190,7 @@ /obj/item/gun/proc/handle_pins(mob/living/user) if(pin) - if(pin.pin_auth(user) || pin.emagged) + if(pin.pin_auth(user) || (pin.obj_flags & EMAGGED)) return TRUE else pin.auth_fail(user) diff --git a/code/modules/projectiles/guns/ballistic/revolver.dm b/code/modules/projectiles/guns/ballistic/revolver.dm index 4e9da3b22d..692d9b4733 100644 --- a/code/modules/projectiles/guns/ballistic/revolver.dm +++ b/code/modules/projectiles/guns/ballistic/revolver.dm @@ -89,7 +89,7 @@ desc = "A cheap Martian knock-off of a classic law enforcement firearm. Uses .38-special rounds." icon_state = "detective" mag_type = /obj/item/ammo_box/magazine/internal/cylinder/rev38 - unique_rename = TRUE + obj_flags = UNIQUE_RENAME unique_reskin = list("Default" = "detective", "Leopard Spots" = "detective_leopard", "Black Panther" = "detective_panther", @@ -261,7 +261,7 @@ slot_flags = SLOT_BACK mag_type = /obj/item/ammo_box/magazine/internal/shot/dual sawn_desc = "Omar's coming!" - unique_rename = TRUE + obj_flags = UNIQUE_RENAME unique_reskin = list("Default" = "dshotgun", "Dark Red Finish" = "dshotgun-d", "Ash" = "dshotgun-f", @@ -307,7 +307,6 @@ slot_flags = null mag_type = /obj/item/ammo_box/magazine/internal/shot/improvised sawn_desc = "I'm just here for the gasoline." - unique_rename = FALSE unique_reskin = null var/slung = FALSE @@ -349,7 +348,7 @@ clumsy_check = 0 /obj/item/gun/ballistic/revolver/reverse/can_trigger_gun(mob/living/user) - if((user.has_disability(DISABILITY_CLUMSY)) || (user.mind && user.mind.assigned_role == "Clown")) + if((user.has_trait(TRAIT_CLUMSY)) || (user.mind && user.mind.assigned_role == "Clown")) return ..() if(process_fire(user, user, FALSE, null, "head")) user.visible_message("[user] somehow manages to shoot [user.p_them()]self in the face!", "You somehow shoot yourself in the face! How the hell?!") diff --git a/code/modules/projectiles/guns/ballistic/toy.dm b/code/modules/projectiles/guns/ballistic/toy.dm index a04d6f1b54..af666951cb 100644 --- a/code/modules/projectiles/guns/ballistic/toy.dm +++ b/code/modules/projectiles/guns/ballistic/toy.dm @@ -11,7 +11,7 @@ burst_size = 3 can_suppress = TRUE clumsy_check = 0 - needs_permit = 0 + item_flags = NONE casing_ejector = FALSE /obj/item/gun/ballistic/automatic/toy/unrestricted @@ -53,7 +53,7 @@ throwforce = 0 mag_type = /obj/item/ammo_box/magazine/internal/shot/toy clumsy_check = 0 - needs_permit = 0 + item_flags = NONE casing_ejector = FALSE can_suppress = FALSE @@ -81,7 +81,7 @@ desc = "A bullpup two-round burst toy SMG, designated 'C-20r'. Ages 8 and up." icon = 'icons/obj/guns/toy.dmi' can_suppress = TRUE - needs_permit = 0 + item_flags = NONE mag_type = /obj/item/ammo_box/magazine/toy/smgm45/riot casing_ejector = FALSE @@ -97,7 +97,7 @@ desc = "A heavily modified toy light machine gun, designated 'L6 SAW'. Ages 8 and up." icon = 'icons/obj/guns/toy.dmi' can_suppress = FALSE - needs_permit = 0 + item_flags = NONE mag_type = /obj/item/ammo_box/magazine/toy/m762/riot casing_ejector = FALSE diff --git a/code/modules/projectiles/guns/energy/kinetic_accelerator.dm b/code/modules/projectiles/guns/energy/kinetic_accelerator.dm index 3aa501a6b8..f3ff4e965d 100644 --- a/code/modules/projectiles/guns/energy/kinetic_accelerator.dm +++ b/code/modules/projectiles/guns/energy/kinetic_accelerator.dm @@ -5,8 +5,8 @@ item_state = "kineticgun" ammo_type = list(/obj/item/ammo_casing/energy/kinetic) cell_type = /obj/item/stock_parts/cell/emproof - needs_permit = 0 - unique_rename = 1 + item_flags = NONE + obj_flags = UNIQUE_RENAME weapon_weight = WEAPON_LIGHT can_flashlight = 1 flight_x_offset = 15 diff --git a/code/modules/projectiles/guns/energy/laser.dm b/code/modules/projectiles/guns/energy/laser.dm index 37bb252adc..cad3512766 100644 --- a/code/modules/projectiles/guns/energy/laser.dm +++ b/code/modules/projectiles/guns/energy/laser.dm @@ -14,7 +14,7 @@ desc = "A modified version of the basic laser gun, this one fires less concentrated energy bolts designed for target practice." ammo_type = list(/obj/item/ammo_casing/energy/laser/practice) clumsy_check = 0 - needs_permit = 0 + item_flags = NONE /obj/item/gun/energy/laser/retro name ="retro laser gun" @@ -117,7 +117,7 @@ desc = "A retro laser gun modified to fire harmless blue beams of light. Sound effects included!" ammo_type = list(/obj/item/ammo_casing/energy/laser/bluetag) clumsy_check = 0 - needs_permit = 0 + item_flags = NONE pin = /obj/item/device/firing_pin/tag/blue ammo_x_offset = 2 selfcharge = 1 @@ -128,7 +128,7 @@ desc = "A retro laser gun modified to fire harmless beams red of light. Sound effects included!" ammo_type = list(/obj/item/ammo_casing/energy/laser/redtag) clumsy_check = 0 - needs_permit = 0 + item_flags = NONE pin = /obj/item/device/firing_pin/tag/red ammo_x_offset = 2 selfcharge = 1 diff --git a/code/modules/projectiles/guns/energy/megabuster.dm b/code/modules/projectiles/guns/energy/megabuster.dm index c4096ad5cb..6fd2de777b 100644 --- a/code/modules/projectiles/guns/energy/megabuster.dm +++ b/code/modules/projectiles/guns/energy/megabuster.dm @@ -5,9 +5,9 @@ item_state = "megabuster" w_class = WEIGHT_CLASS_SMALL ammo_type = list(/obj/item/ammo_casing/energy/megabuster) - clumsy_check = 0 - needs_permit = 0 - selfcharge = 1 + clumsy_check = FALSE + item_flags = NEEDS_PERMIT + selfcharge = TRUE cell_type = "/obj/item/stock_parts/cell/pulse" icon = 'icons/obj/guns/VGguns.dmi' diff --git a/code/modules/projectiles/guns/energy/special.dm b/code/modules/projectiles/guns/energy/special.dm index cced6d9544..1226172262 100644 --- a/code/modules/projectiles/guns/energy/special.dm +++ b/code/modules/projectiles/guns/energy/special.dm @@ -89,7 +89,7 @@ suppressed = TRUE ammo_type = list(/obj/item/ammo_casing/energy/bolt) weapon_weight = WEAPON_LIGHT - unique_rename = 0 + obj_flags = 0 overheat_time = 20 holds_charge = TRUE unique_frequency = TRUE @@ -125,10 +125,11 @@ force = 12 sharpness = IS_SHARP can_charge = 0 - heat = 3800 + heat = 3800 usesound = 'sound/items/welder.ogg' - toolspeed = 0.7 //plasmacutters can be used as welders for a few things, and are faster than standard welders + tool_behaviour = TOOL_WELDER + toolspeed = 0.7 //plasmacutters can be used as welders, and are faster than standard welders /obj/item/gun/energy/plasmacutter/examine(mob/user) ..() diff --git a/code/modules/projectiles/guns/misc/blastcannon.dm b/code/modules/projectiles/guns/misc/blastcannon.dm index 2c6bb8112b..865689e440 100644 --- a/code/modules/projectiles/guns/misc/blastcannon.dm +++ b/code/modules/projectiles/guns/misc/blastcannon.dm @@ -7,7 +7,7 @@ w_class = WEIGHT_CLASS_NORMAL force = 10 fire_sound = 'sound/weapons/blastcannon.ogg' - needs_permit = FALSE + item_flags = NONE clumsy_check = FALSE randomspread = FALSE diff --git a/code/modules/projectiles/pins.dm b/code/modules/projectiles/pins.dm index 92b2f8c0d4..b571f5ce5e 100644 --- a/code/modules/projectiles/pins.dm +++ b/code/modules/projectiles/pins.dm @@ -37,9 +37,9 @@ to_chat(user, "This firearm already has a firing pin installed.") /obj/item/device/firing_pin/emag_act(mob/user) - if(emagged) + if(obj_flags & EMAGGED) return - emagged = TRUE + obj_flags |= EMAGGED to_chat(user, "You override the authentication mechanism.") /obj/item/device/firing_pin/proc/gun_insert(mob/living/user, obj/item/gun/G) @@ -129,7 +129,7 @@ // A gun with ultra-honk pin is useful for clown and useless for everyone else. /obj/item/device/firing_pin/clown/ultra/pin_auth(mob/living/user) playsound(src.loc, 'sound/items/bikehorn.ogg', 50, 1) - if(!(user.has_disability(DISABILITY_CLUMSY)) && !(user.mind && user.mind.assigned_role == "Clown")) + if(!(user.has_trait(TRAIT_CLUMSY)) && !(user.mind && user.mind.assigned_role == "Clown")) return 0 return 1 diff --git a/code/modules/projectiles/projectile.dm b/code/modules/projectiles/projectile.dm index 5704fe9f44..d3b6063824 100644 --- a/code/modules/projectiles/projectile.dm +++ b/code/modules/projectiles/projectile.dm @@ -391,6 +391,7 @@ yo = targloc.y - curloc.y xo = targloc.x - curloc.x setAngle(Get_Angle(src, targloc)) + if(isliving(source) && params) var/list/calculated = calculate_projectile_angle_and_pixel_offsets(source, params) p_x = calculated[2] diff --git a/code/modules/projectiles/projectile/energy.dm b/code/modules/projectiles/projectile/energy.dm index d19079d563..b5c966f03f 100644 --- a/code/modules/projectiles/projectile/energy.dm +++ b/code/modules/projectiles/projectile/energy.dm @@ -28,7 +28,7 @@ var/mob/living/carbon/C = target if(C.dna && C.dna.check_mutation(HULK)) C.say(pick(";RAAAAAAAARGH!", ";HNNNNNNNNNGGGGGGH!", ";GWAAAAAAAARRRHHH!", "NNNNNNNNGGGGGGGGHH!", ";AAAAAAARRRGH!" )) - else if(C.status_flags & CANKNOCKDOWN) + else if((C.status_flags & CANKNOCKDOWN) && !C.has_trait(TRAIT_STUNIMMUNE)) addtimer(CALLBACK(C, /mob/living/carbon.proc/do_jitter_animation, jitter), 5) /obj/item/projectile/energy/electrode/on_range() //to ensure the bolt sparks when it reaches the end of its range if it didn't hit a target yet diff --git a/code/modules/projectiles/projectile/special.dm b/code/modules/projectiles/projectile/special.dm index 152cff6c74..af21066dc4 100644 --- a/code/modules/projectiles/projectile/special.dm +++ b/code/modules/projectiles/projectile/special.dm @@ -539,7 +539,7 @@ hal_target.stuttering += 20 if(hal_target.dna && hal_target.dna.check_mutation(HULK)) hal_target.say(pick(";RAAAAAAAARGH!", ";HNNNNNNNNNGGGGGGH!", ";GWAAAAAAAARRRHHH!", "NNNNNNNNGGGGGGGGHH!", ";AAAAAAARRRGH!" )) - else if(hal_target.status_flags & CANKNOCKDOWN) + else if((hal_target.status_flags & CANKNOCKDOWN) && !hal_target.has_trait(TRAIT_STUNIMMUNE)) addtimer(CALLBACK(hal_target, /mob/living/carbon.proc/do_jitter_animation, 20), 5) /obj/item/projectile/hallucination/disabler diff --git a/code/modules/reagents/chemistry/holder.dm b/code/modules/reagents/chemistry/holder.dm index 6080763548..71c7f9fa0d 100644 --- a/code/modules/reagents/chemistry/holder.dm +++ b/code/modules/reagents/chemistry/holder.dm @@ -442,32 +442,8 @@ update_total() if(my_atom) my_atom.on_reagent_change(DEL_REAGENT) - check_ignoreslow(my_atom) - check_gofast(my_atom) - check_goreallyfast(my_atom) return 1 -/datum/reagents/proc/check_ignoreslow(mob/M) - if(ismob(M)) - if(M.reagents.has_reagent("morphine")) - return 1 - else - M.status_flags &= ~IGNORESLOWDOWN - -/datum/reagents/proc/check_gofast(mob/M) - if(ismob(M)) - if(M.reagents.has_reagent("unholywater")||M.reagents.has_reagent("nuka_cola")||M.reagents.has_reagent("stimulants")||M.reagents.has_reagent("ephedrine")) - return 1 - else - M.status_flags &= ~GOTTAGOFAST - -/datum/reagents/proc/check_goreallyfast(mob/M) - if(ismob(M)) - if(M.reagents.has_reagent("methamphetamine")) - return 1 - else - M.status_flags &= ~GOTTAGOREALLYFAST - /datum/reagents/proc/update_total() var/list/cached_reagents = reagent_list total_volume = 0 diff --git a/code/modules/reagents/chemistry/machinery/chem_dispenser.dm b/code/modules/reagents/chemistry/machinery/chem_dispenser.dm index a1e913a14e..47d6b9697c 100644 --- a/code/modules/reagents/chemistry/machinery/chem_dispenser.dm +++ b/code/modules/reagents/chemistry/machinery/chem_dispenser.dm @@ -82,12 +82,12 @@ use_power(2500) /obj/machinery/chem_dispenser/emag_act(mob/user) - if(emagged) + if(obj_flags & EMAGGED) to_chat(user, "[src] has no functional safeties to emag.") return to_chat(user, "You short out [src]'s safeties.") dispensable_reagents |= emagged_reagents//add the emagged reagents to the dispensable ones - emagged = TRUE + obj_flags |= EMAGGED /obj/machinery/chem_dispenser/ex_act(severity, target) if(severity < 3) diff --git a/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm b/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm index 68770490e9..aed7b0b5e8 100644 --- a/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm @@ -1282,6 +1282,7 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_name = "eggnog" glass_desc = "For enjoying the most wonderful time of the year." + /datum/reagent/consumable/ethanol/narsour name = "Nar'Sour" id = "narsour" diff --git a/code/modules/reagents/chemistry/reagents/drink_reagents.dm b/code/modules/reagents/chemistry/reagents/drink_reagents.dm index ab241d7f43..c56d10c3c9 100644 --- a/code/modules/reagents/chemistry/reagents/drink_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/drink_reagents.dm @@ -396,13 +396,24 @@ glass_name = "glass of Nuka Cola" glass_desc = "Don't cry, Don't raise your eye, It's only nuclear wasteland." +/datum/reagent/consumable/nuka_cola/on_mob_add(mob/M) + ..() + if(isliving(M)) + var/mob/living/L = M + L.add_trait(TRAIT_GOTTAGOFAST, id) + +/datum/reagent/consumable/nuka_cola/on_mob_delete(mob/M) + if(isliving(M)) + var/mob/living/L = M + L.remove_trait(TRAIT_GOTTAGOFAST, id) + ..() + /datum/reagent/consumable/nuka_cola/on_mob_life(mob/living/M) M.Jitter(20) M.set_drugginess(30) M.dizziness +=5 M.drowsyness = 0 M.AdjustSleeping(-40, FALSE) - M.status_flags |= GOTTAGOFAST if (M.bodytemperature > BODYTEMP_NORMAL)//310.15 is the normal bodytemp. M.bodytemperature = max(BODYTEMP_NORMAL, M.bodytemperature - (5 * TEMPERATURE_DAMAGE_COEFFICIENT)) ..() diff --git a/code/modules/reagents/chemistry/reagents/drug_reagents.dm b/code/modules/reagents/chemistry/reagents/drug_reagents.dm index 534cf515d9..5e5493df18 100644 --- a/code/modules/reagents/chemistry/reagents/drug_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/drug_reagents.dm @@ -166,6 +166,18 @@ addiction_threshold = 10 metabolization_rate = 0.75 * REAGENTS_METABOLISM +/datum/reagent/drug/methamphetamine/on_mob_add(mob/M) + ..() + if(isliving(M)) + var/mob/living/L = M + L.add_trait(TRAIT_GOTTAGOREALLYFAST, id) + +/datum/reagent/drug/methamphetamine/on_mob_delete(mob/M) + if(isliving(M)) + var/mob/living/L = M + L.remove_trait(TRAIT_GOTTAGOREALLYFAST, id) + ..() + /datum/reagent/drug/methamphetamine/on_mob_life(mob/living/M) var/high_message = pick("You feel hyper.", "You feel like you need to go faster.", "You feel like you can run the world.") if(prob(5)) @@ -174,7 +186,6 @@ M.AdjustKnockdown(-40, 0) M.AdjustUnconscious(-40, 0) M.adjustStaminaLoss(-2, 0) - M.status_flags |= GOTTAGOREALLYFAST M.Jitter(2) M.adjustBrainLoss(0.25) if(prob(5)) diff --git a/code/modules/reagents/chemistry/reagents/medicine_reagents.dm b/code/modules/reagents/chemistry/reagents/medicine_reagents.dm index 53320e9460..ae396f4ea4 100644 --- a/code/modules/reagents/chemistry/reagents/medicine_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/medicine_reagents.dm @@ -41,10 +41,10 @@ M.setOxyLoss(0, 0) M.radiation = 0 M.heal_bodypart_damage(5,5, 0) - M.adjustToxLoss(-5, 0) + M.adjustToxLoss(-5, 0, TRUE) M.hallucination = 0 M.setBrainLoss(0) - M.remove_all_disabilities() + M.remove_all_traits() M.set_blurriness(0) M.set_blindness(0) M.SetKnockdown(0, 0) @@ -134,9 +134,9 @@ M.adjustOxyLoss(-3 * power, 0) M.adjustBruteLoss(-power, 0) M.adjustFireLoss(-power, 0) - M.adjustToxLoss(-power, 0) + M.adjustToxLoss(-power, 0, TRUE) //heals TOXINLOVERs M.adjustCloneLoss(-power, 0) - M.status_flags &= ~DISFIGURED + M.remove_trait(TRAIT_DISFIGURED, TRAIT_GENERIC) //fixes common causes for disfiguration . = 1 metabolization_rate = REAGENTS_METABOLISM * (0.00001 * (M.bodytemperature ** 2) + 0.5) ..() @@ -152,11 +152,40 @@ /datum/reagent/medicine/clonexadone/on_mob_life(mob/living/M) if(M.bodytemperature < T0C) M.adjustCloneLoss(0.00006 * (M.bodytemperature ** 2) - 6, 0) - M.status_flags &= ~DISFIGURED + M.remove_trait(TRAIT_DISFIGURED, TRAIT_GENERIC) . = 1 metabolization_rate = REAGENTS_METABOLISM * (0.000015 * (M.bodytemperature ** 2) + 0.75) ..() +/datum/reagent/medicine/pyroxadone + name = "Pyroxadone" + id = "pyroxadone" + description = "A mixture of cryoxadone and slime jelly, that apparently inverses the requirement for its activation." + color = "#f7832a" + taste_description = "spicy jelly" + +/datum/reagent/medicine/pyroxadone/on_mob_life(mob/living/M) + if(M.bodytemperature > BODYTEMP_HEAT_DAMAGE_LIMIT) + var/power = 0 + switch(M.bodytemperature) + if(BODYTEMP_HEAT_DAMAGE_LIMIT to 400) + power = 2 + if(400 to 460) + power = 3 + else + power = 5 + if(M.on_fire) + power *= 2 + + M.adjustOxyLoss(-2 * power, 0) + M.adjustBruteLoss(-power, 0) + M.adjustFireLoss(-1.5 * power, 0) + M.adjustToxLoss(-power, 0, TRUE) + M.adjustCloneLoss(-power, 0) + M.remove_trait(TRAIT_DISFIGURED, TRAIT_GENERIC) + . = 1 + ..() + /datum/reagent/medicine/rezadone name = "Rezadone" id = "rezadone" @@ -169,7 +198,7 @@ /datum/reagent/medicine/rezadone/on_mob_life(mob/living/M) M.setCloneLoss(0) //Rezadone is almost never used in favor of cryoxadone. Hopefully this will change that. M.heal_bodypart_damage(1,1, 0) - M.status_flags &= ~DISFIGURED + M.remove_trait(TRAIT_DISFIGURED, TRAIT_GENERIC) ..() . = 1 @@ -518,8 +547,19 @@ overdose_threshold = 45 addiction_threshold = 30 +/datum/reagent/medicine/ephedrine/on_mob_add(mob/M) + ..() + if(isliving(M)) + var/mob/living/L = M + L.add_trait(TRAIT_GOTTAGOFAST, id) + +/datum/reagent/medicine/ephedrine/on_mob_delete(mob/M) + if(isliving(M)) + var/mob/living/L = M + L.remove_trait(TRAIT_GOTTAGOFAST, id) + ..() + /datum/reagent/medicine/ephedrine/on_mob_life(mob/living/M) - M.status_flags |= GOTTAGOFAST M.AdjustStun(-20, 0) M.AdjustKnockdown(-20, 0) M.AdjustUnconscious(-20, 0) @@ -587,8 +627,19 @@ overdose_threshold = 30 addiction_threshold = 25 +/datum/reagent/medicine/morphine/on_mob_add(mob/M) + ..() + if(isliving(M)) + var/mob/living/L = M + L.add_trait(TRAIT_IGNORESLOWDOWN, id) + +/datum/reagent/medicine/morphine/on_mob_delete(mob/M) + if(isliving(M)) + var/mob/living/L = M + L.remove_trait(TRAIT_IGNORESLOWDOWN, id) + ..() + /datum/reagent/medicine/morphine/on_mob_life(mob/living/M) - M.status_flags |= IGNORESLOWDOWN switch(current_cycle) if(11) to_chat(M, "You start to feel tired..." ) @@ -652,14 +703,14 @@ var/obj/item/organ/eyes/eyes = M.getorganslot(ORGAN_SLOT_EYES) if (!eyes) return - if(M.has_disability(DISABILITY_BLIND, EYE_DAMAGE)) + if(M.has_trait(TRAIT_BLIND, EYE_DAMAGE)) if(prob(20)) to_chat(M, "Your vision slowly returns...") M.cure_blind(EYE_DAMAGE) M.cure_nearsighted(EYE_DAMAGE) M.blur_eyes(35) - else if(M.has_disability(DISABILITY_NEARSIGHT, EYE_DAMAGE)) + else if(M.has_trait(TRAIT_NEARSIGHT, EYE_DAMAGE)) to_chat(M, "The blackness in your peripheral vision fades.") M.cure_nearsighted(EYE_DAMAGE) M.blur_eyes(10) @@ -750,7 +801,7 @@ M.visible_message("[M]'s body convulses a bit, and then falls still once more.") return M.visible_message("[M]'s body convulses a bit.") - if(!M.suiciding && !(M.has_disability(DISABILITY_NOCLONE)) && !M.hellbound) + if(!M.suiciding && !(M.has_trait(TRAIT_NOCLONE)) && !M.hellbound) if(!M) return if(M.notify_ghost_cloning(source = M)) @@ -829,8 +880,19 @@ metabolization_rate = 0.5 * REAGENTS_METABOLISM overdose_threshold = 60 +/datum/reagent/medicine/stimulants/on_mob_add(mob/M) + ..() + if(isliving(M)) + var/mob/living/L = M + L.add_trait(TRAIT_GOTTAGOFAST, id) + +/datum/reagent/medicine/stimulants/on_mob_delete(mob/M) + if(isliving(M)) + var/mob/living/L = M + L.remove_trait(TRAIT_GOTTAGOFAST, id) + ..() + /datum/reagent/medicine/stimulants/on_mob_life(mob/living/M) - M.status_flags |= GOTTAGOFAST if(M.health < 50 && M.health > 0) M.adjustOxyLoss(-1*REM, 0) M.adjustToxLoss(-1*REM, 0) @@ -979,6 +1041,22 @@ ..() . = 1 +/datum/reagent/medicine/regen_jelly + name = "Regenerative Jelly" + id = "regen_jelly" + description = "Gradually regenerates all types of damage, without harming slime anatomy." + reagent_state = LIQUID + color = "#91D865" + taste_description = "jelly" + +/datum/reagent/medicine/regen_jelly/on_mob_life(mob/living/M) + M.adjustBruteLoss(-1.5*REM, 0) + M.adjustFireLoss(-1.5*REM, 0) + M.adjustOxyLoss(-1.5*REM, 0) + M.adjustToxLoss(-1.5*REM, 0, TRUE) //heals TOXINLOVERs + . = 1 + ..() + /datum/reagent/medicine/syndicate_nanites //Used exclusively by Syndicate medical cyborgs name = "Restorative Nanites" id = "syndicate_nanites" @@ -1092,8 +1170,19 @@ color = "#C8A5DC" metabolization_rate = 1 +/datum/reagent/medicine/changelingAdrenaline2/on_mob_add(mob/M) + ..() + if(isliving(M)) + var/mob/living/L = M + L.add_trait(TRAIT_GOTTAGOREALLYFAST, id) + +/datum/reagent/medicine/changelingAdrenaline2/on_mob_delete(mob/M) + if(isliving(M)) + var/mob/living/L = M + L.remove_trait(TRAIT_GOTTAGOREALLYFAST, id) + ..() + /datum/reagent/medicine/changelingAdrenaline2/on_mob_life(mob/living/M as mob) - M.status_flags |= GOTTAGOREALLYFAST M.adjustToxLoss(2, 0) . = 1 ..() @@ -1117,8 +1206,6 @@ addiction_threshold = 5 /datum/reagent/medicine/ketrazine/on_mob_life(mob/living/M) - M.status_flags |= IGNORESLOWDOWN - M.status_flags |= GOTTAGOFAST M.adjustToxLoss(-3*REM, 0) M.adjustBruteLoss(-5*REM, 0) M.adjustFireLoss(-5*REM, 0) @@ -1167,6 +1254,14 @@ ..() +/datum/reagent/medicine/ketrazine/on_mob_add(mob/living/M) + M.add_trait(TRAIT_IGNORESLOWDOWN, id) + M.add_trait(TRAIT_GOTTAGOFAST, id) + +/datum/reagent/medicine/ketrazine/on_mob_delete(mob/living/M) + M.remove_trait(TRAIT_IGNORESLOWDOWN, id) + M.remove_trait(TRAIT_GOTTAGOFAST, id) + /datum/reagent/medicine/ketrazine/overdose_process(mob/living/M) if(prob(66)) to_chat(M, " You feel a sense of impending doom. ") diff --git a/code/modules/reagents/chemistry/reagents/other_reagents.dm b/code/modules/reagents/chemistry/reagents/other_reagents.dm index 634136bfaf..309273900d 100644 --- a/code/modules/reagents/chemistry/reagents/other_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/other_reagents.dm @@ -219,7 +219,7 @@ if(data >= 75) // 30 units, 135 seconds if(iscultist(M) || is_servant_of_ratvar(M)) if(iscultist(M)) - SSticker.mode.remove_cultist(M.mind, 1, 1) + SSticker.mode.remove_cultist(M.mind, FALSE, TRUE) else if(is_servant_of_ratvar(M)) remove_servant_of_ratvar(M) M.jitteriness = 0 @@ -397,17 +397,17 @@ ..() return -/datum/reagent/stableslimetoxin +/datum/reagent/mutationtoxin name = "Stable Mutation Toxin" id = "stablemutationtoxin" - description = "A humanizing toxin produced by slimes." + description = "A humanizing toxin." color = "#5EFF3B" //RGB: 94, 255, 59 metabolization_rate = INFINITY //So it instantly removes all of itself taste_description = "slime" var/datum/species/race = /datum/species/human var/mutationtext = "The pain subsides. You feel... human." -/datum/reagent/stableslimetoxin/on_mob_life(mob/living/carbon/human/H) +/datum/reagent/mutationtoxin/on_mob_life(mob/living/carbon/human/H) ..() if(!istype(H)) return @@ -417,7 +417,7 @@ addtimer(CALLBACK(src, .proc/mutate, H), 30) return -/datum/reagent/stableslimetoxin/proc/mutate(mob/living/carbon/human/H) +/datum/reagent/mutationtoxin/proc/mutate(mob/living/carbon/human/H) if(QDELETED(H)) return var/current_species = H.dna.species.type @@ -428,130 +428,158 @@ else to_chat(H, "The pain vanishes suddenly. You feel no different.") -/datum/reagent/stableslimetoxin/classic //The one from plasma on green slimes +/datum/reagent/mutationtoxin/classic //The one from plasma on green slimes name = "Mutation Toxin" id = "mutationtoxin" - description = "A corruptive toxin produced by slimes." + description = "A corruptive toxin." color = "#13BC5E" // rgb: 19, 188, 94 race = /datum/species/jelly/slime mutationtext = "The pain subsides. Your whole body feels like slime." -/datum/reagent/stableslimetoxin/lizard +/datum/reagent/mutationtoxin/lizard name = "Lizard Mutation Toxin" id = "lizardmutationtoxin" - description = "A lizarding toxin produced by slimes." + description = "A lizarding toxin." color = "#5EFF3B" //RGB: 94, 255, 59 race = /datum/species/lizard mutationtext = "The pain subsides. You feel... scaly." -/datum/reagent/stableslimetoxin/fly +/datum/reagent/mutationtoxin/fly name = "Fly Mutation Toxin" id = "flymutationtoxin" - description = "An insectifying toxin produced by slimes." + description = "An insectifying toxin." color = "#5EFF3B" //RGB: 94, 255, 59 race = /datum/species/fly mutationtext = "The pain subsides. You feel... buzzy." -/datum/reagent/stableslimetoxin/pod +/datum/reagent/mutationtoxin/moth + name = "Moth Mutation Toxin" + id = "mothmutationtoxin" + description = "A glowing toxin." + color = "#5EFF3B" //RGB: 94, 255, 59 + race = /datum/species/moth + mutationtext = "The pain subsides. You feel... attracted to light." + +/datum/reagent/mutationtoxin/pod name = "Podperson Mutation Toxin" id = "podmutationtoxin" - description = "A vegetalizing toxin produced by slimes." + description = "A vegetalizing toxin." color = "#5EFF3B" //RGB: 94, 255, 59 race = /datum/species/pod mutationtext = "The pain subsides. You feel... plantlike." -/datum/reagent/stableslimetoxin/jelly +/datum/reagent/mutationtoxin/jelly name = "Imperfect Mutation Toxin" id = "jellymutationtoxin" - description = "An jellyfying toxin produced by slimes." + description = "An jellyfying toxin." color = "#5EFF3B" //RGB: 94, 255, 59 race = /datum/species/jelly mutationtext = "The pain subsides. You feel... wobbly." -/datum/reagent/stableslimetoxin/golem +/datum/reagent/mutationtoxin/golem name = "Golem Mutation Toxin" id = "golemmutationtoxin" - description = "A crystal toxin produced by slimes." + description = "A crystal toxin." color = "#5EFF3B" //RGB: 94, 255, 59 race = /datum/species/golem/random mutationtext = "The pain subsides. You feel... rocky." -/datum/reagent/stableslimetoxin/abductor +/datum/reagent/mutationtoxin/abductor name = "Abductor Mutation Toxin" id = "abductormutationtoxin" - description = "An alien toxin produced by slimes." + description = "An alien toxin." color = "#5EFF3B" //RGB: 94, 255, 59 race = /datum/species/abductor mutationtext = "The pain subsides. You feel... alien." -/datum/reagent/stableslimetoxin/android +/datum/reagent/mutationtoxin/android name = "Android Mutation Toxin" id = "androidmutationtoxin" - description = "A robotic toxin produced by slimes." + description = "A robotic toxin." color = "#5EFF3B" //RGB: 94, 255, 59 race = /datum/species/android mutationtext = "The pain subsides. You feel... artificial." //BLACKLISTED RACES -/datum/reagent/stableslimetoxin/skeleton +/datum/reagent/mutationtoxin/skeleton name = "Skeleton Mutation Toxin" id = "skeletonmutationtoxin" - description = "A scary toxin produced by slimes." + description = "A scary toxin." color = "#5EFF3B" //RGB: 94, 255, 59 race = /datum/species/skeleton mutationtext = "The pain subsides. You feel... spooky." -/datum/reagent/stableslimetoxin/zombie +/datum/reagent/mutationtoxin/zombie name = "Zombie Mutation Toxin" id = "zombiemutationtoxin" - description = "An undead toxin produced by slimes." + description = "An undead toxin." color = "#5EFF3B" //RGB: 94, 255, 59 race = /datum/species/zombie //Not the infectious kind. The days of xenobio zombie outbreaks are long past. mutationtext = "The pain subsides. You feel... undead." -/datum/reagent/stableslimetoxin/ash +/datum/reagent/mutationtoxin/ash name = "Ash Mutation Toxin" id = "ashmutationtoxin" - description = "An ashen toxin produced by slimes." + description = "An ashen toxin." color = "#5EFF3B" //RGB: 94, 255, 59 race = /datum/species/lizard/ashwalker mutationtext = "The pain subsides. You feel... savage." //DANGEROUS RACES -/datum/reagent/stableslimetoxin/shadow +/datum/reagent/mutationtoxin/shadow name = "Shadow Mutation Toxin" id = "shadowmutationtoxin" - description = "A dark toxin produced by slimes." + description = "A dark toxin." color = "#5EFF3B" //RGB: 94, 255, 59 race = /datum/species/shadow mutationtext = "The pain subsides. You feel... darker." -/datum/reagent/stableslimetoxin/plasma +/datum/reagent/mutationtoxin/plasma name = "Plasma Mutation Toxin" id = "plasmamutationtoxin" - description = "A plasma-based toxin produced by slimes." + description = "A plasma-based toxin." color = "#5EFF3B" //RGB: 94, 255, 59 race = /datum/species/plasmaman mutationtext = "The pain subsides. You feel... flammable." -/datum/reagent/stableslimetoxin/unstable //PSYCH - name = "Unstable Mutation Toxin" - id = "unstablemutationtoxin" - description = "An unstable and unpredictable corruptive toxin produced by slimes." +/datum/reagent/slime_toxin + name = "Slime Mutation Toxin" + id = "slime_toxin" + description = "A toxin that turns organic material into slime." color = "#5EFF3B" //RGB: 94, 255, 59 - mutationtext = "The pain subsides. You feel... different." + taste_description = "slime" + metabolization_rate = 0.2 -/datum/reagent/stableslimetoxin/unstable/on_mob_life(mob/living/carbon/human/H) - var/list/possible_morphs = list() - for(var/type in subtypesof(/datum/species)) - var/datum/species/S = type - if(initial(S.blacklisted)) - continue - possible_morphs += S - race = pick(possible_morphs) +/datum/reagent/slime_toxin/on_mob_life(mob/living/carbon/human/H) ..() + if(!istype(H)) + return + if(!H.dna || !H.dna.species || !(H.dna.species.species_traits & SPECIES_ORGANIC)) + return + + if(isjellyperson(H)) + to_chat(H, "Your jelly shifts and morphs, turning you into another subspecies!") + var/species_type = pick(subtypesof(/datum/species/jelly)) + H.set_species(species_type) + H.reagents.del_reagent(id) + + switch(current_cycle) + if(1 to 6) + if(prob(10)) + to_chat(H, "[pick("You don't feel very well.", "Your skin feels a little slimy.")]") + if(7 to 12) + if(prob(10)) + to_chat(H, "[pick("Your appendages are melting away.", "Your limbs begin to lose their shape.")]") + if(13 to 19) + if(prob(10)) + to_chat(H, "[pick("You feel your internal organs turning into slime.", "You feel very slimelike.")]") + if(20 to INFINITY) + var/species_type = pick(subtypesof(/datum/species/jelly)) + H.set_species(species_type) + H.reagents.del_reagent(id) + to_chat(H, "You've become \a jellyperson!") /datum/reagent/mulligan name = "Mulligan Toxin" @@ -1175,8 +1203,19 @@ color = "E1A116" taste_description = "sourness" +/datum/reagent/stimulum/on_mob_add(mob/M) + ..() + if(isliving(M)) + var/mob/living/L = M + L.add_trait(TRAIT_GOTTAGOFAST, id) + +/datum/reagent/stimulum/on_mob_delete(mob/M) + if(isliving(M)) + var/mob/living/L = M + L.remove_trait(TRAIT_GOTTAGOFAST, id) + ..() + /datum/reagent/stimulum/on_mob_life(mob/living/M) // Has a speedup, and the anti-stun effects of nicotine. - M.status_flags |= GOTTAGOFAST M.AdjustStun(-20, 0) M.AdjustKnockdown(-20, 0) M.AdjustUnconscious(-20, 0) @@ -1194,8 +1233,16 @@ color = "90560B" taste_description = "burning" -/datum/reagent/nitryl/on_mob_life(mob/living/M) //Has just a speedup - M.status_flags |= GOTTAGOFAST +/datum/reagent/nitryl/on_mob_add(mob/M) + ..() + if(isliving(M)) + var/mob/living/L = M + L.add_trait(TRAIT_GOTTAGOFAST, id) + +/datum/reagent/nitryl/on_mob_delete(mob/M) + if(isliving(M)) + var/mob/living/L = M + L.remove_trait(TRAIT_GOTTAGOFAST, id) ..() /////////////////////////Coloured Crayon Powder//////////////////////////// @@ -1709,10 +1756,10 @@ ..() if(isliving(M)) var/mob/living/L = M - L.add_disability(DISABILITY_PACIFISM, CHEMICAL_DISABILITY) + L.add_trait(TRAIT_PACIFISM, id) /datum/reagent/pax/on_mob_delete(mob/M) if(isliving(M)) var/mob/living/L = M - L.remove_disability(DISABILITY_PACIFISM, CHEMICAL_DISABILITY) - ..() \ No newline at end of file + L.remove_trait(TRAIT_PACIFISM, id) + ..() diff --git a/code/modules/reagents/chemistry/reagents/pyrotechnic_reagents.dm b/code/modules/reagents/chemistry/reagents/pyrotechnic_reagents.dm index 7f4e481a29..a361499bae 100644 --- a/code/modules/reagents/chemistry/reagents/pyrotechnic_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/pyrotechnic_reagents.dm @@ -226,3 +226,63 @@ M.electrocute_act(rand(5,20), "Teslium in their body", 1, 1) //Override because it's caused from INSIDE of you playsound(M, "sparks", 50, 1) ..() + +/datum/reagent/teslium/energized_jelly + name = "Energized Jelly" + id = "energized_jelly" + description = "Electrically-charged jelly. Boosts jellypeople's nervous system, but only shocks other lifeforms." + reagent_state = LIQUID + color = "#CAFF43" + taste_description = "jelly" + +/datum/reagent/teslium/energized_jelly/on_mob_life(mob/living/M) + if(isjellyperson(M)) + shock_timer = 0 //immune to shocks + M.AdjustStun(-40, 0) + M.AdjustKnockdown(-40, 0) + M.AdjustUnconscious(-40, 0) + M.adjustStaminaLoss(-2, 0) + if(isluminescent(M)) + var/mob/living/carbon/human/H = M + var/datum/species/jelly/luminescent/L = H.dna.species + L.extract_cooldown = max(0, L.extract_cooldown - 20) + ..() + +/datum/reagent/firefighting_foam + name = "Firefighting Foam" + id = "firefighting_foam" + description = "A historical fire suppressant. Originally believed to simply displace oxygen to starve fires, it actually interferes with the combustion reaction itself. Vastly superior to the cheap water-based extinguishers found on NT vessels." + reagent_state = LIQUID + color = "#A6FAFF55" + taste_description = "the inside of a fire extinguisher" + +/datum/reagent/firefighting_foam/reaction_turf(turf/open/T, reac_volume) + if (!istype(T)) + return + + if(reac_volume >= 1) + var/obj/effect/particle_effect/foam/firefighting/F = (locate(/obj/effect/particle_effect/foam) in T) + if(!F) + F = new(T) + else if(istype(F)) + F.lifetime = initial(F.lifetime) //reduce object churn a little bit when using smoke by keeping existing foam alive a bit longer + + var/obj/effect/hotspot/hotspot = (locate(/obj/effect/hotspot) in T) + if(hotspot && !isspaceturf(T)) + if(T.air) + var/datum/gas_mixture/G = T.air + if(G.temperature > T20C) + G.temperature = max(G.temperature/2,T20C) + G.react() + qdel(hotspot) + +/datum/reagent/firefighting_foam/reaction_obj(obj/O, reac_volume) + O.extinguish() + +/datum/reagent/firefighting_foam/reaction_mob(mob/living/M, method=TOUCH, reac_volume) + if(!istype(M)) + return + if(method in list(VAPOR, TOUCH)) + M.adjust_fire_stacks(-reac_volume) + M.ExtinguishMob() + ..() \ No newline at end of file diff --git a/code/modules/reagents/chemistry/reagents/toxin_reagents.dm b/code/modules/reagents/chemistry/reagents/toxin_reagents.dm index 0823d64bf1..e8f9387e19 100644 --- a/code/modules/reagents/chemistry/reagents/toxin_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/toxin_reagents.dm @@ -143,7 +143,7 @@ taste_description = "mint" /datum/reagent/toxin/minttoxin/on_mob_life(mob/living/M) - if(M.has_disability(DISABILITY_FAT)) + if(M.has_trait(TRAIT_FAT)) M.gib() return ..() @@ -164,19 +164,23 @@ toxpwr = 0.5 taste_description = "death" -/datum/reagent/toxin/zombiepowder/on_mob_life(mob/living/carbon/M) - M.status_flags |= FAKEDEATH - M.adjustOxyLoss(0.5*REM, 0) - M.Knockdown(100, 0) - M.silent = max(M.silent, 5) - M.tod = worldtime2text() +/datum/reagent/toxin/zombiepowder/on_mob_add(mob/M) ..() - . = 1 + if(isliving(M)) + var/mob/living/L = M + L.fakedeath(id) /datum/reagent/toxin/zombiepowder/on_mob_delete(mob/M) - M.status_flags &= ~FAKEDEATH + if(isliving(M)) + var/mob/living/L = M + L.cure_fakedeath(id) ..() +/datum/reagent/toxin/zombiepowder/on_mob_life(mob/living/carbon/M) + M.adjustOxyLoss(0.5*REM, 0) + ..() + . = 1 + /datum/reagent/toxin/mindbreaker name = "Mindbreaker Toxin" id = "mindbreaker" diff --git a/code/modules/reagents/chemistry/recipes.dm b/code/modules/reagents/chemistry/recipes.dm index d90b93ea06..9e73f12f10 100644 --- a/code/modules/reagents/chemistry/recipes.dm +++ b/code/modules/reagents/chemistry/recipes.dm @@ -21,18 +21,8 @@ return //I recommend you set the result amount to the total volume of all components. -/datum/chemical_reaction/proc/chemical_mob_spawn(datum/reagents/holder, amount_to_spawn, reaction_name, mob_faction = "chemicalsummon") - var/static/list/chemical_mob_spawn_meancritters = list() // list of possible hostile mobs - var/static/list/chemical_mob_spawn_nicecritters = list() // and possible friendly mobs +/datum/chemical_reaction/proc/chemical_mob_spawn(datum/reagents/holder, amount_to_spawn, reaction_name, mob_class = HOSTILE_SPAWN, mob_faction = "chemicalsummon") if(holder && holder.my_atom) - if (chemical_mob_spawn_meancritters.len <= 0 || chemical_mob_spawn_nicecritters.len <= 0) - for (var/T in typesof(/mob/living/simple_animal)) - var/mob/living/simple_animal/SA = T - switch(initial(SA.gold_core_spawnable)) - if(HOSTILE_SPAWN) - chemical_mob_spawn_meancritters += T - if(FRIENDLY_SPAWN) - chemical_mob_spawn_nicecritters += T var/atom/A = holder.my_atom var/turf/T = get_turf(A) var/message = "A [reaction_name] reaction has occurred in [get_area_name(T)] [ADMIN_COORDJMP(T)]" @@ -50,18 +40,13 @@ for(var/mob/living/carbon/C in viewers(get_turf(holder.my_atom), null)) C.flash_act() - for(var/i = 1, i <= amount_to_spawn, i++) - var/chosen - if (reaction_name == "Friendly Gold Slime") - chosen = pick(chemical_mob_spawn_nicecritters) - else - chosen = pick(chemical_mob_spawn_meancritters) - var/spawnloc = get_turf(holder.my_atom) - var/mob/living/simple_animal/C = new chosen(spawnloc) - C.faction |= mob_faction + + for(var/i in 1 to amount_to_spawn) + var/mob/living/simple_animal/S = create_random_mob(get_turf(holder.my_atom), mob_class) + S.faction |= mob_faction if(prob(50)) for(var/j = 1, j <= rand(1, 3), j++) - step(C, pick(NORTH,SOUTH,EAST,WEST)) + step(S, pick(NORTH,SOUTH,EAST,WEST)) /datum/chemical_reaction/proc/goonchem_vortex(turf/T, setting_type, range) for(var/atom/movable/X in orange(range, T)) diff --git a/code/modules/reagents/chemistry/recipes/medicine.dm b/code/modules/reagents/chemistry/recipes/medicine.dm index 6029d57cfc..c2ebe2856e 100644 --- a/code/modules/reagents/chemistry/recipes/medicine.dm +++ b/code/modules/reagents/chemistry/recipes/medicine.dm @@ -184,6 +184,12 @@ results = list("cryoxadone" = 3) required_reagents = list("stable_plasma" = 1, "acetone" = 1, "mutagen" = 1) +/datum/chemical_reaction/pyroxadone + name = "Pyroxadone" + id = "pyroxadone" + results = list("pyroxadone" = 2) + required_reagents = list("cryoxadone" = 1, "slimejelly" = 1) + /datum/chemical_reaction/clonexadone name = "Clonexadone" id = "clonexadone" @@ -221,6 +227,12 @@ results = list("tricordrazine" = 3) required_reagents = list("bicaridine" = 1, "kelotane" = 1, "antitoxin" = 1) +/datum/chemical_reaction/regen_jelly + name = "Regenerative Jelly" + id = "regen_jelly" + results = list("regen_jelly" = 2) + required_reagents = list("tricordrazine" = 1, "slimejelly" = 1) + /datum/chemical_reaction/corazone name = "Corazone" id = "corazone" diff --git a/code/modules/reagents/chemistry/recipes/others.dm b/code/modules/reagents/chemistry/recipes/others.dm index 6bf359fa98..5999911cb1 100644 --- a/code/modules/reagents/chemistry/recipes/others.dm +++ b/code/modules/reagents/chemistry/recipes/others.dm @@ -125,96 +125,12 @@ required_reagents = list("ammonia" = 2, "nitrogen" = 1, "oxygen" = 2) required_temp = 525 -////////////////////////////////// Mutation Toxins /////////////////////////////////// - -/datum/chemical_reaction/stable_mutation_toxin - name = "Stable Mutation Toxin" - id = "stablemutationtoxin" - results = list("stablemutationtoxin" = 1) - required_reagents = list("unstablemutationtoxin" = 1, "blood" = 1) //classic - -/datum/chemical_reaction/lizard_mutation_toxin - name = "Lizard Mutation Toxin" - id = "lizardmutationtoxin" - results = list("lizardmutationtoxin" = 1) - required_reagents = list("unstablemutationtoxin" = 1, "radium" = 1) //mutant - -/datum/chemical_reaction/fly_mutation_toxin - name = "Fly Mutation Toxin" - id = "flymutationtoxin" - results = list("flymutationtoxin" = 1) - required_reagents = list("unstablemutationtoxin" = 1, "mutagen" = 1) //VERY mutant - -/datum/chemical_reaction/jelly_mutation_toxin - name = "Imperfect Mutation Toxin" - id = "jellymutationtoxin" - results = list("jellymutationtoxin" = 1) - required_reagents = list("unstablemutationtoxin" = 1, "slimejelly" = 1) //why would you even make this - -/datum/chemical_reaction/abductor_mutation_toxin - name = "Abductor Mutation Toxin" - id = "abductormutationtoxin" - results = list("abductormutationtoxin" = 1) - required_reagents = list("unstablemutationtoxin" = 1, "morphine" = 1) - -/datum/chemical_reaction/android_mutation_toxin - name = "Android Mutation Toxin" - id = "androidmutationtoxin" - results = list("androidmutationtoxin" = 1) - required_reagents = list("unstablemutationtoxin" = 1, "teslium" = 1) //beep boop - -/datum/chemical_reaction/pod_mutation_toxin - name = "Podperson Mutation Toxin" - id = "podmutationtoxin" - results = list("podmutationtoxin" = 1) - required_reagents = list("unstablemutationtoxin" = 1, "eznutriment" = 1) //plant food - -/datum/chemical_reaction/golem_mutation_toxin - name = "Golem Mutation Toxin" - id = "golemmutationtoxin" - results = list("golemmutationtoxin" = 1) - required_reagents = list("unstablemutationtoxin" = 1, "silver" = 1) //not too hard to get but also not just there in xenobio - - -//BLACKLISTED RACES -/datum/chemical_reaction/skeleton_mutation_toxin - name = "Skeleton Mutation Toxin" - id = "skeletonmutationtoxin" - results = list("skeletonmutationtoxin" = 1) - required_reagents = list("amutationtoxin" = 1, "milk" = 1) //good for yer bones - -/datum/chemical_reaction/zombie_mutation_toxin - name = "Zombie Mutation Toxin" - id = "zombiemutationtoxin" - results = list("zombiemutationtoxin" = 1) - required_reagents = list("amutationtoxin" = 1, "toxin" = 1) - -/datum/chemical_reaction/ash_mutation_toxin //ash lizard - name = "Ash Mutation Toxin" - id = "ashmutationtoxin" - results = list("ashmutationtoxin" = 1) - required_reagents = list("amutationtoxin" = 1, "lizardmutationtoxin" = 1, "ash" = 1) - - -//DANGEROUS RACES -/datum/chemical_reaction/plasma_mutation_toxin - name = "Plasma Mutation Toxin" - id = "plasmamutationtoxin" - results = list("plasmamutationtoxin" = 1) - required_reagents = list("skeletonmutationtoxin" = 1, "plasma" = 1, "uranium" = 1) //this is very fucking powerful, so it's hard to make - -/datum/chemical_reaction/shadow_mutation_toxin - name = "Shadow Mutation Toxin" - id = "shadowmutationtoxin" - results = list("shadowmutationtoxin" = 1) - required_reagents = list("amutationtoxin" = 1, "liquid_dark_matter" = 1, "holywater" = 1) - //Technically a mutation toxin /datum/chemical_reaction/mulligan name = "Mulligan" id = "mulligan" results = list("mulligan" = 1) - required_reagents = list("stablemutationtoxin" = 1, "mutagen" = 1) + required_reagents = list("slime_toxin" = 1, "mutagen" = 1) ////////////////////////////////// VIROLOGY ////////////////////////////////////////// diff --git a/code/modules/reagents/chemistry/recipes/pyrotechnics.dm b/code/modules/reagents/chemistry/recipes/pyrotechnics.dm index 9f11498ee5..a430d93fba 100644 --- a/code/modules/reagents/chemistry/recipes/pyrotechnics.dm +++ b/code/modules/reagents/chemistry/recipes/pyrotechnics.dm @@ -379,6 +379,13 @@ mix_message = "A jet of sparks flies from the mixture as it merges into a flickering slurry." required_temp = 400 +/datum/chemical_reaction/energized_jelly + name = "Energized Jelly" + id = "energized_jelly" + results = list("energized_jelly" = 2) + required_reagents = list("slimejelly" = 1, "teslium" = 1) + mix_message = "The slime jelly starts glowing intermittently." + /datum/chemical_reaction/reagent_explosion/teslium_lightning name = "Teslium Destabilization" id = "teslium_lightning" @@ -418,3 +425,11 @@ strengthdiv = 7 required_temp = 575 modifier = 1 + +/datum/chemical_reaction/firefighting_foam + name = "Firefighting Foam" + id = "firefighting_foam" + results = list("firefighting_foam" = 3) + required_reagents = list("stabilizing_agent" = 1,"fluorosurfactant" = 1,"carbon" = 1) + required_temp = 200 + is_cold_recipe = 1 diff --git a/code/modules/reagents/chemistry/recipes/slime_extracts.dm b/code/modules/reagents/chemistry/recipes/slime_extracts.dm index 71297930ac..44f904b0a7 100644 --- a/code/modules/reagents/chemistry/recipes/slime_extracts.dm +++ b/code/modules/reagents/chemistry/recipes/slime_extracts.dm @@ -48,21 +48,27 @@ //Green /datum/chemical_reaction/slime/slimemutate name = "Mutation Toxin" - id = "mutationtoxin" - results = list("mutationtoxin" = 1) + id = "slimetoxin" + results = list("slime_toxin" = 1) required_reagents = list("plasma" = 1) required_other = 1 required_container = /obj/item/slime_extract/green -//Mutated Green -/datum/chemical_reaction/slime/slimemutate_unstable - name = "Unstable Mutation Toxin" - id = "unstablemutationtoxin" - results = list("unstablemutationtoxin" = 1) +/datum/chemical_reaction/slime/slimehuman + name = "Human Mutation Toxin" + id = "humanmuttoxin" + results = list("stablemutationtoxin" = 1) + required_reagents = list("blood" = 1) + required_other = 1 + required_container = /obj/item/slime_extract/green + +/datum/chemical_reaction/slime/slimelizard + name = "Lizard Mutation Toxin" + id = "lizardmuttoxin" + results = list("lizardmutationtoxin" = 1) required_reagents = list("radium" = 1) required_other = 1 required_container = /obj/item/slime_extract/green - mix_message = "The mixture rapidly expands and contracts, its appearance shifting into a sickening green." //Metal /datum/chemical_reaction/slime/slimemetal @@ -110,7 +116,7 @@ /datum/chemical_reaction/slime/slimemobspawn/proc/summon_mobs(datum/reagents/holder, turf/T) T.visible_message("The slime extract begins to vibrate violently!") - addtimer(CALLBACK(src, .proc/chemical_mob_spawn, holder, 5, "Gold Slime"), 50) + addtimer(CALLBACK(src, .proc/chemical_mob_spawn, holder, 5, "Gold Slime", HOSTILE_SPAWN), 50) /datum/chemical_reaction/slime/slimemobspawn/lesser name = "Slime Crit Lesser" @@ -119,7 +125,7 @@ /datum/chemical_reaction/slime/slimemobspawn/lesser/summon_mobs(datum/reagents/holder, turf/T) T.visible_message("The slime extract begins to vibrate violently!") - addtimer(CALLBACK(src, .proc/chemical_mob_spawn, holder, 3, "Lesser Gold Slime", "neutral"), 50) + addtimer(CALLBACK(src, .proc/chemical_mob_spawn, holder, 3, "Lesser Gold Slime", HOSTILE_SPAWN, "neutral"), 50) /datum/chemical_reaction/slime/slimemobspawn/friendly name = "Slime Crit Friendly" @@ -128,7 +134,7 @@ /datum/chemical_reaction/slime/slimemobspawn/friendly/summon_mobs(datum/reagents/holder, turf/T) T.visible_message("The slime extract begins to vibrate adorably!") - addtimer(CALLBACK(src, .proc/chemical_mob_spawn, holder, 1, "Friendly Gold Slime", "neutral"), 50) + addtimer(CALLBACK(src, .proc/chemical_mob_spawn, holder, 1, "Friendly Gold Slime", FRIENDLY_SPAWN, "neutral"), 50) //Silver /datum/chemical_reaction/slime/slimebork @@ -140,7 +146,6 @@ /datum/chemical_reaction/slime/slimebork/on_reaction(datum/reagents/holder) //BORK BORK BORK - var/list/borks = getborks() var/turf/T = get_turf(holder.my_atom) playsound(T, 'sound/effects/phasein.ogg', 100, 1) @@ -149,7 +154,7 @@ C.flash_act() for(var/i in 1 to 4 + rand(1,2)) - var/chosen = pick(borks) + var/chosen = getbork() var/obj/B = new chosen(T) if(prob(5))//Fry it! var/obj/item/reagent_containers/food/snacks/deepfryholder/fried @@ -161,36 +166,16 @@ step(B, pick(NORTH,SOUTH,EAST,WEST)) ..() -/datum/chemical_reaction/slime/slimebork/proc/getborks() - var/list/blocked = list(/obj/item/reagent_containers/food/snacks, - /obj/item/reagent_containers/food/snacks/store/bread, - /obj/item/reagent_containers/food/snacks/breadslice, - /obj/item/reagent_containers/food/snacks/store/cake, - /obj/item/reagent_containers/food/snacks/cakeslice, - /obj/item/reagent_containers/food/snacks/store, - /obj/item/reagent_containers/food/snacks/pie, - /obj/item/reagent_containers/food/snacks/kebab, - /obj/item/reagent_containers/food/snacks/pizza, - /obj/item/reagent_containers/food/snacks/pizzaslice, - /obj/item/reagent_containers/food/snacks/salad, - /obj/item/reagent_containers/food/snacks/meat, - /obj/item/reagent_containers/food/snacks/meat/slab, - /obj/item/reagent_containers/food/snacks/soup, - /obj/item/reagent_containers/food/snacks/grown, - /obj/item/reagent_containers/food/snacks/grown/mushroom, - /obj/item/reagent_containers/food/snacks/deepfryholder - ) - blocked |= typesof(/obj/item/reagent_containers/food/snacks/customizable) - - return typesof(/obj/item/reagent_containers/food/snacks) - blocked +/datum/chemical_reaction/slime/slimebork/proc/getbork() + return get_random_food() /datum/chemical_reaction/slime/slimebork/drinks name = "Slime Bork 2" id = "m_tele4" required_reagents = list("water" = 1) -/datum/chemical_reaction/slime/slimebork/drinks/getborks() - return subtypesof(/obj/item/reagent_containers/food/drinks) +/datum/chemical_reaction/slime/slimebork/drinks/getbork() + return get_random_drink() //Blue /datum/chemical_reaction/slime/slimefrost @@ -344,11 +329,11 @@ new /obj/item/slimepotion/steroid(get_turf(holder.my_atom)) ..() -/datum/chemical_reaction/slime/slimejam - name = "Slime Jam" - id = "m_jam" - results = list("slimejelly" = 10) - required_reagents = list("sugar" = 1) +/datum/chemical_reaction/slime/slimeregen + name = "Slime Regen" + id = "m_regen" + results = list("regen_jelly" = 5) + required_reagents = list("blood" = 1) required_container = /obj/item/slime_extract/purple required_other = 1 diff --git a/code/modules/recycling/disposal/bin.dm b/code/modules/recycling/disposal/bin.dm index fee9e55d47..2af691679c 100644 --- a/code/modules/recycling/disposal/bin.dm +++ b/code/modules/recycling/disposal/bin.dm @@ -6,7 +6,6 @@ icon = 'icons/obj/atmospherics/pipes/disposal.dmi' anchored = TRUE density = TRUE - on_blueprints = TRUE armor = list(melee = 25, bullet = 10, laser = 10, energy = 100, bomb = 0, bio = 100, rad = 100, fire = 90, acid = 30) max_integrity = 200 resistance_flags = FIRE_PROOF diff --git a/code/modules/recycling/disposal/pipe.dm b/code/modules/recycling/disposal/pipe.dm index 4f1f9c74d1..02ca211cb8 100644 --- a/code/modules/recycling/disposal/pipe.dm +++ b/code/modules/recycling/disposal/pipe.dm @@ -6,7 +6,7 @@ icon = 'icons/obj/atmospherics/pipes/disposal.dmi' anchored = TRUE density = FALSE - on_blueprints = TRUE + obj_flags = CAN_BE_HIT | ON_BLUEPRINTS level = 1 // underfloor only dir = NONE // dir will contain dominant direction for junction pipes max_integrity = 200 diff --git a/code/modules/research/departmental_circuit_imprinter.dm b/code/modules/research/departmental_circuit_imprinter.dm index 06e7c531b8..01c4a6a22c 100644 --- a/code/modules/research/departmental_circuit_imprinter.dm +++ b/code/modules/research/departmental_circuit_imprinter.dm @@ -144,7 +144,7 @@ /obj/machinery/rnd/circuit_imprinter/department/proc/ui_header() var/list/l = list() l += "
[host_research.organization] [department_tag] Department Circuit Imprinter" - l += "Security protocols: [emagged? "Disabled" : "Enabled"]" + l += "Security protocols: [(obj_flags & EMAGGED) ? "Disabled" : "Enabled"]" l += "Material Amount: [materials.total_amount] / [materials.max_amount]" l += "Chemical volume: [reagents.total_volume] / [reagents.maximum_volume]" l += "Synchronize Research" diff --git a/code/modules/research/departmental_lathe.dm b/code/modules/research/departmental_lathe.dm index dc3c8ad66f..ab893e7853 100644 --- a/code/modules/research/departmental_lathe.dm +++ b/code/modules/research/departmental_lathe.dm @@ -187,7 +187,7 @@ /obj/machinery/rnd/protolathe/department/proc/ui_header() var/list/l = list() l += "
[host_research.organization] [department_tag] Department Lathe" - l += "Security protocols: [emagged? "Disabled" : "Enabled"]" + l += "Security protocols: [(obj_flags & EMAGGED) ? "Disabled" : "Enabled"]" l += "Material Amount: [materials.total_amount] / [materials.max_amount]" l += "Chemical volume: [reagents.total_volume] / [reagents.maximum_volume]" l += "Synchronize Research" diff --git a/code/modules/research/designs/autolathe_designs.dm b/code/modules/research/designs/autolathe_designs.dm index f0e0d924dd..443fef319c 100644 --- a/code/modules/research/designs/autolathe_designs.dm +++ b/code/modules/research/designs/autolathe_designs.dm @@ -836,15 +836,6 @@ name = "Holodisk" id = "holodisk" build_type = AUTOLATHE - materials = list(MAT_METAL = 1000) + materials = list(MAT_METAL = 100, MAT_GLASS = 100) build_path = /obj/item/disk/holodisk category = list("initial", "Misc") - -//CITADEL -/datum/design/shock_collar - name = "Shock Collar" - id = "shock_collar" - build_type = AUTOLATHE - materials = list(MAT_METAL = 5000, MAT_GLASS = 2000) - build_path = /obj/item/device/electropack/shockcollar - category = list("hacked", "Security") diff --git a/code/modules/research/designs/medical_designs.dm b/code/modules/research/designs/medical_designs.dm index c1405ad55c..02e4d89bad 100644 --- a/code/modules/research/designs/medical_designs.dm +++ b/code/modules/research/designs/medical_designs.dm @@ -54,6 +54,16 @@ category = list("Medical Designs") departmental_flags = DEPARTMENTAL_FLAG_MEDICAL | DEPARTMENTAL_FLAG_SCIENCE +/datum/design/cloning_disk + name = "Cloning Data Disk" + desc = "Produce additional disks for storing genetic data." + id = "cloning_disk" + build_type = PROTOLATHE + materials = list(MAT_METAL = 300, MAT_GLASS = 100, MAT_SILVER=50) + build_path = /obj/item/disk/data + category = list("Medical Designs") + departmental_flags = DEPARTMENTAL_FLAG_MEDICAL | DEPARTMENTAL_FLAG_SCIENCE + /datum/design/noreactsyringe name = "Cryo Syringe" desc = "An advanced syringe that stops reagents inside from reacting. It can hold up to 20 units." diff --git a/code/modules/research/rdconsole.dm b/code/modules/research/rdconsole.dm index 5179782177..51e2b4bb58 100644 --- a/code/modules/research/rdconsole.dm +++ b/code/modules/research/rdconsole.dm @@ -191,10 +191,10 @@ doesn't have toxins access. ..() /obj/machinery/computer/rdconsole/emag_act(mob/user) - if(!emagged) + if(!(obj_flags & EMAGGED)) to_chat(user, "You disable the security protocols") playsound(src, "sparks", 75, 1) - emagged = TRUE + obj_flags |= EMAGGED return ..() /obj/machinery/computer/rdconsole/proc/list_categories(list/categories, menu_num as num) @@ -219,7 +219,7 @@ doesn't have toxins access. var/list/l = list() l += "
[stored_research.organization] Research and Development Network" l += "Available points: [round(stored_research.research_points)] (+[round(stored_research.last_bitcoins * 60)] / minute)" - l += "Security protocols: [emagged? "Disabled" : "Enabled"]" + l += "Security protocols: [obj_flags & EMAGGED ? "Disabled" : "Enabled"]" l += "Main Menu | Back
[RDSCREEN_NOBREAK]" l += "[ui_mode == 1? "Normal View" : "Normal View"] | [ui_mode == 2? "Expert View" : "Expert View"] | [ui_mode == 3? "List View" : "List View"]" return l diff --git a/code/modules/research/server.dm b/code/modules/research/server.dm index 8a244bcea1..d712db9a47 100644 --- a/code/modules/research/server.dm +++ b/code/modules/research/server.dm @@ -128,7 +128,7 @@ add_fingerprint(usr) usr.set_machine(src) - if(!src.allowed(usr) && !emagged) + if(!src.allowed(usr) && !(obj_flags & EMAGGED)) to_chat(usr, "You do not have the required access level.") return @@ -163,9 +163,8 @@ src.updateUsrDialog() /obj/machinery/computer/rdservercontrol/emag_act(mob/user) - if(emagged) + if(obj_flags & EMAGGED) return playsound(src, "sparks", 75, 1) - emagged = TRUE + obj_flags |= EMAGGED to_chat(user, "You you disable the security protocols.") - diff --git a/code/modules/research/techweb/all_nodes.dm b/code/modules/research/techweb/all_nodes.dm index d182843105..146ecfd654 100644 --- a/code/modules/research/techweb/all_nodes.dm +++ b/code/modules/research/techweb/all_nodes.dm @@ -359,7 +359,7 @@ display_name = "Genetic Engineering" description = "We have the technology to make him." prereq_ids = list("biotech") - design_ids = list("clonecontrol", "clonepod", "clonescanner", "scan_console") + design_ids = list("clonecontrol", "clonepod", "clonescanner", "scan_console", "cloning_disk") research_cost = 2500 export_price = 5000 diff --git a/code/modules/research/xenobiology/xenobiology.dm b/code/modules/research/xenobiology/xenobiology.dm index 6f9c1134ca..a072e16059 100644 --- a/code/modules/research/xenobiology/xenobiology.dm +++ b/code/modules/research/xenobiology/xenobiology.dm @@ -34,94 +34,499 @@ if(Uses) grind_results["slimejelly"] = 20 +//Effect when activated by a Luminescent. Separated into a minor and major effect. Returns cooldown in deciseconds. +/obj/item/slime_extract/proc/activate(mob/living/carbon/human/user, datum/species/jelly/luminescent/species, activation_type) + to_chat(user, "Nothing happened... This slime extract cannot be activated this way.") + return 0 + /obj/item/slime_extract/grey name = "grey slime extract" icon_state = "grey slime extract" +/obj/item/slime_extract/grey/activate(mob/living/carbon/human/user, datum/species/jelly/luminescent/species, activation_type) + switch(activation_type) + if(SLIME_ACTIVATE_MINOR) + var/obj/item/reagent_containers/food/snacks/monkeycube/M = new + if(!user.put_in_active_hand(M)) + M.forceMove(user.drop_location()) + playsound(user, 'sound/effects/splat.ogg', 50, 1) + to_chat(user, "You spit out a monkey cube.") + return 120 + if(SLIME_ACTIVATE_MAJOR) + to_chat(user, "Your [name] starts pulsing...") + if(do_after(user, 40, target = user)) + var/mob/living/simple_animal/slime/S = new(get_turf(user), "grey") + playsound(user, 'sound/effects/splat.ogg', 50, 1) + to_chat(user, "You spit out [S].") + return 350 + else + return 0 + /obj/item/slime_extract/gold name = "gold slime extract" icon_state = "gold slime extract" +/obj/item/slime_extract/gold/activate(mob/living/carbon/human/user, datum/species/jelly/luminescent/species, activation_type) + switch(activation_type) + if(SLIME_ACTIVATE_MINOR) + user.visible_message("[user] starts shaking!","Your [name] starts pulsing gently...") + if(do_after(user, 40, target = user)) + var/mob/living/simple_animal/S = create_random_mob(user.drop_location(), FRIENDLY_SPAWN) + S.faction |= "neutral" + playsound(user, 'sound/effects/splat.ogg', 50, 1) + user.visible_message("[user] spits out [S]!", "You spit out [S]!") + return 300 + + if(SLIME_ACTIVATE_MAJOR) + user.visible_message("[user] starts shaking violently!","Your [name] starts pulsing violently...") + if(do_after(user, 50, target = user)) + var/mob/living/simple_animal/S = create_random_mob(user.drop_location(), HOSTILE_SPAWN) + if(user.a_intent != INTENT_HARM) + S.faction |= "neutral" + else + S.faction |= "slime" + playsound(user, 'sound/effects/splat.ogg', 50, 1) + user.visible_message("[user] spits out [S]!", "You spit out [S]!") + return 600 + /obj/item/slime_extract/silver name = "silver slime extract" icon_state = "silver slime extract" +/obj/item/slime_extract/silver/activate(mob/living/carbon/human/user, datum/species/jelly/luminescent/species, activation_type) + switch(activation_type) + if(SLIME_ACTIVATE_MINOR) + var/food_type = get_random_food() + var/obj/O = new food_type + if(!user.put_in_active_hand(O)) + O.forceMove(user.drop_location()) + playsound(user, 'sound/effects/splat.ogg', 50, 1) + user.visible_message("[user] spits out [O]!", "You spit out [O]!") + return 200 + if(SLIME_ACTIVATE_MAJOR) + var/drink_type = get_random_drink() + var/obj/O = new drink_type + if(!user.put_in_active_hand(O)) + O.forceMove(user.drop_location()) + playsound(user, 'sound/effects/splat.ogg', 50, 1) + user.visible_message("[user] spits out [O]!", "You spit out [O]!") + return 200 + /obj/item/slime_extract/metal name = "metal slime extract" icon_state = "metal slime extract" +/obj/item/slime_extract/metal/activate(mob/living/carbon/human/user, datum/species/jelly/luminescent/species, activation_type) + switch(activation_type) + if(SLIME_ACTIVATE_MINOR) + var/obj/item/stack/sheet/glass/O = new(null, 5) + if(!user.put_in_active_hand(O)) + O.forceMove(user.drop_location()) + playsound(user, 'sound/effects/splat.ogg', 50, 1) + user.visible_message("[user] spits out [O]!", "You spit out [O]!") + return 150 + + if(SLIME_ACTIVATE_MAJOR) + var/obj/item/stack/sheet/metal/O = new(null, 5) + if(!user.put_in_active_hand(O)) + O.forceMove(user.drop_location()) + playsound(user, 'sound/effects/splat.ogg', 50, 1) + user.visible_message("[user] spits out [O]!", "You spit out [O]!") + return 200 + /obj/item/slime_extract/purple name = "purple slime extract" icon_state = "purple slime extract" +/obj/item/slime_extract/purple/activate(mob/living/carbon/human/user, datum/species/jelly/luminescent/species, activation_type) + switch(activation_type) + if(SLIME_ACTIVATE_MINOR) + user.nutrition += 50 + user.blood_volume += 50 + to_chat(user, "You activate [src], and your body is refilled with fresh slime jelly!") + return 150 + + if(SLIME_ACTIVATE_MAJOR) + to_chat(user, "You activate [src], and it releases regenerative chemicals!") + user.reagents.add_reagent("regen_jelly",10) + return 600 + /obj/item/slime_extract/darkpurple name = "dark purple slime extract" icon_state = "dark purple slime extract" +/obj/item/slime_extract/darkpurple/activate(mob/living/carbon/human/user, datum/species/jelly/luminescent/species, activation_type) + switch(activation_type) + if(SLIME_ACTIVATE_MINOR) + var/obj/item/stack/sheet/mineral/plasma/O = new(null, 1) + if(!user.put_in_active_hand(O)) + O.forceMove(user.drop_location()) + playsound(user, 'sound/effects/splat.ogg', 50, 1) + user.visible_message("[user] spits out [O]!", "You spit out [O]!") + return 150 + + if(SLIME_ACTIVATE_MAJOR) + var/turf/open/T = get_turf(user) + if(istype(T)) + T.atmos_spawn_air("plasma=20") + to_chat(user, "You activate [src], and a cloud of plasma bursts out of your skin!") + return 900 + /obj/item/slime_extract/orange name = "orange slime extract" icon_state = "orange slime extract" +/obj/item/slime_extract/orange/activate(mob/living/carbon/human/user, datum/species/jelly/luminescent/species, activation_type) + switch(activation_type) + if(SLIME_ACTIVATE_MINOR) + to_chat(user, "You activate [src]. You start feeling hot!") + user.reagents.add_reagent("capsaicin",10) + return 150 + + if(SLIME_ACTIVATE_MAJOR) + user.reagents.add_reagent("phosphorus",5)// + user.reagents.add_reagent("potassium",5) // = smoke, along with any reagents inside mr. slime + user.reagents.add_reagent("sugar",5) // + to_chat(user, "You activate [src], and a cloud of smoke bursts out of your skin!") + return 450 + /obj/item/slime_extract/yellow name = "yellow slime extract" icon_state = "yellow slime extract" +/obj/item/slime_extract/yellow/activate(mob/living/carbon/human/user, datum/species/jelly/luminescent/species, activation_type) + switch(activation_type) + if(SLIME_ACTIVATE_MINOR) + if(species.glow_intensity != LUMINESCENT_DEFAULT_GLOW) + to_chat(user, "Your glow is already enhanced!") + return + species.update_glow(user, 5) + addtimer(CALLBACK(species, /datum/species/jelly/luminescent.proc/update_glow, user, LUMINESCENT_DEFAULT_GLOW), 600) + to_chat(user, "You start glowing brighter.") + + if(SLIME_ACTIVATE_MAJOR) + user.visible_message("[user]'s skin starts flashing intermittently...", "Your skin starts flashing intermittently...") + if(do_after(user, 25, target = user)) + empulse(user, 1, 2) + user.visible_message("[user]'s skin flashes!", "Your skin flashes as you emit an electromagnetic pulse!") + return 600 + /obj/item/slime_extract/red name = "red slime extract" icon_state = "red slime extract" +/obj/item/slime_extract/red/activate(mob/living/carbon/human/user, datum/species/jelly/luminescent/species, activation_type) + switch(activation_type) + if(SLIME_ACTIVATE_MINOR) + to_chat(user, "You activate [src]. You start feeling fast!") + user.reagents.add_reagent("ephedrine",5) + return 450 + + if(SLIME_ACTIVATE_MAJOR) + user.visible_message("[user]'s skin flashes red for a moment...", "Your skin flashes red as you emit rage-inducing pheromones...") + for(var/mob/living/simple_animal/slime/slime in viewers(get_turf(user), null)) + slime.rabid = TRUE + slime.visible_message("The [slime] is driven into a frenzy!") + return 600 + /obj/item/slime_extract/blue name = "blue slime extract" icon_state = "blue slime extract" +/obj/item/slime_extract/blue/activate(mob/living/carbon/human/user, datum/species/jelly/luminescent/species, activation_type) + switch(activation_type) + if(SLIME_ACTIVATE_MINOR) + to_chat(user, "You activate [src]. Your genome feels more stable!") + user.adjustCloneLoss(-15) + user.reagents.add_reagent("mutadone", 10) + user.reagents.add_reagent("potass_iodide", 10) + return 250 + + if(SLIME_ACTIVATE_MAJOR) + var/location = get_turf(user) + var/datum/effect_system/foam_spread/s = new() + s.set_up(20, location, user.reagents) + s.start() + user.reagents.clear_reagents() + user.visible_message("Foam spews out from [user]'s skin!", "You activate [src], and foam bursts out of your skin!") + return 600 + /obj/item/slime_extract/darkblue name = "dark blue slime extract" icon_state = "dark blue slime extract" +/obj/item/slime_extract/darkblue/activate(mob/living/carbon/human/user, datum/species/jelly/luminescent/species, activation_type) + switch(activation_type) + if(SLIME_ACTIVATE_MINOR) + to_chat(user, "You activate [src]. You start feeling colder!") + user.ExtinguishMob() + user.adjust_fire_stacks(-20) + user.reagents.add_reagent("frostoil",4) + user.reagents.add_reagent("cryoxadone",5) + return 100 + + if(SLIME_ACTIVATE_MAJOR) + var/turf/open/T = get_turf(user) + if(istype(T)) + T.atmos_spawn_air("nitrogen=40;TEMP=2.7") + to_chat(user, "You activate [src], and icy air bursts out of your skin!") + return 900 + /obj/item/slime_extract/pink name = "pink slime extract" icon_state = "pink slime extract" +/obj/item/slime_extract/pink/activate(mob/living/carbon/human/user, datum/species/jelly/luminescent/species, activation_type) + switch(activation_type) + if(SLIME_ACTIVATE_MINOR) + if(user.gender != MALE && user.gender != FEMALE) + to_chat(user, "You can't swap your gender!") + return + + if(user.gender == MALE) + user.gender = FEMALE + user.visible_message("[user] suddenly looks more feminine!", "You suddenly feel more feminine!") + else + user.gender = MALE + user.visible_message("[user] suddenly looks more masculine!", "You suddenly feel more masculine!") + return 100 + + if(SLIME_ACTIVATE_MAJOR) + user.visible_message("[user]'s skin starts flashing hypnotically...", "Your skin starts forming odd patterns, pacifying creatures around you.") + for(var/mob/living/carbon/C in viewers(user, null)) + if(C != user) + C.reagents.add_reagent("pax",2) + return 600 + /obj/item/slime_extract/green name = "green slime extract" icon_state = "green slime extract" +/obj/item/slime_extract/green/activate(mob/living/carbon/human/user, datum/species/jelly/luminescent/species, activation_type) + switch(activation_type) + if(SLIME_ACTIVATE_MINOR) + to_chat(user, "You feel yourself reverting to human form...") + if(do_after(user, 120, target = user)) + to_chat(user, "You feel human again!") + user.set_species(/datum/species/human) + return + to_chat(user, "You stop the transformation.") + + if(SLIME_ACTIVATE_MAJOR) + to_chat(user, "You feel yourself radically changing your slime type...") + if(do_after(user, 120, target = user)) + to_chat(user, "You feel different!") + user.set_species(pick(/datum/species/jelly/slime, /datum/species/jelly/stargazer)) + return + to_chat(user, "You stop the transformation.") + /obj/item/slime_extract/lightpink name = "light pink slime extract" icon_state = "light pink slime extract" +/obj/item/slime_extract/lightpink/activate(mob/living/carbon/human/user, datum/species/jelly/luminescent/species, activation_type) + switch(activation_type) + if(SLIME_ACTIVATE_MINOR) + var/obj/item/slimepotion/docility/O = new(null, 1) + if(!user.put_in_active_hand(O)) + O.forceMove(user.drop_location()) + playsound(user, 'sound/effects/splat.ogg', 50, 1) + user.visible_message("[user] spits out [O]!", "You spit out [O]!") + return 150 + + if(SLIME_ACTIVATE_MAJOR) + var/obj/item/slimepotion/sentience/O = new(null, 1) + if(!user.put_in_active_hand(O)) + O.forceMove(user.drop_location()) + playsound(user, 'sound/effects/splat.ogg', 50, 1) + user.visible_message("[user] spits out [O]!", "You spit out [O]!") + return 450 + /obj/item/slime_extract/black name = "black slime extract" icon_state = "black slime extract" +/obj/item/slime_extract/black/activate(mob/living/carbon/human/user, datum/species/jelly/luminescent/species, activation_type) + switch(activation_type) + if(SLIME_ACTIVATE_MINOR) + to_chat(user, "You feel something wrong inside you...") + user.ForceContractDisease(new /datum/disease/transformation/slime(0)) + return 100 + + if(SLIME_ACTIVATE_MAJOR) + to_chat(user, "You feel your own light turning dark...") + if(do_after(user, 120, target = user)) + to_chat(user, "You feel a longing for darkness.") + user.set_species(pick(/datum/species/shadow)) + return + to_chat(user, "You stop feeding [src].") + /obj/item/slime_extract/oil name = "oil slime extract" icon_state = "oil slime extract" +/obj/item/slime_extract/oil/activate(mob/living/carbon/human/user, datum/species/jelly/luminescent/species, activation_type) + switch(activation_type) + if(SLIME_ACTIVATE_MINOR) + to_chat(user, "You vomit slippery oil.") + playsound(user, 'sound/effects/splat.ogg', 50, 1) + new /obj/effect/decal/cleanable/oil/slippery(get_turf(user)) + return 450 + + if(SLIME_ACTIVATE_MAJOR) + user.visible_message("[user]'s skin starts pulsing and glowing ominously...", "You feel unstable...") + if(do_after(user, 60, target = user)) + to_chat(user, "You explode!") + explosion(get_turf(user), 1 ,3, 6) + user.gib() + return + to_chat(user, "You stop feeding [src], and the feeling passes.") + /obj/item/slime_extract/adamantine name = "adamantine slime extract" icon_state = "adamantine slime extract" +/obj/item/slime_extract/adamantine/activate(mob/living/carbon/human/user, datum/species/jelly/luminescent/species, activation_type) + switch(activation_type) + if(SLIME_ACTIVATE_MINOR) + if(species.armor > 0) + to_chat(user, "Your skin is already hardened!") + return + to_chat(user, "You feel your skin harden and become more resistant.") + species.armor += 25 + addtimer(CALLBACK(src, .proc/reset_armor, species), 1200) + return 450 + + if(SLIME_ACTIVATE_MAJOR) + to_chat(user, "You feel your body rapidly crystallizing...") + if(do_after(user, 120, target = user)) + to_chat(user, "You feel solid.") + user.set_species(pick(/datum/species/golem/adamantine)) + return + to_chat(user, "You stop feeding [src], and your body returns to its slimelike state.") + +/obj/item/slime_extract/adamantine/proc/reset_armor(datum/species/jelly/luminescent/species) + if(istype(species)) + species.armor -= 25 + /obj/item/slime_extract/bluespace name = "bluespace slime extract" icon_state = "bluespace slime extract" + var/teleport_ready = FALSE + var/teleport_x = 0 + var/teleport_y = 0 + var/teleport_z = 0 + +/obj/item/slime_extract/bluespace/activate(mob/living/carbon/human/user, datum/species/jelly/luminescent/species, activation_type) + switch(activation_type) + if(SLIME_ACTIVATE_MINOR) + to_chat(user, "You feel your body vibrating...") + if(do_after(user, 25, target = user)) + to_chat(user, "You teleport!") + do_teleport(user, get_turf(user), 6, asoundin = 'sound/weapons/emitter2.ogg') + return 300 + + if(SLIME_ACTIVATE_MAJOR) + if(!teleport_ready) + to_chat(user, "You feel yourself anchoring to this spot...") + var/turf/T = get_turf(user) + teleport_x = T.x + teleport_y = T.y + teleport_z = T.z + teleport_ready = TRUE + else + teleport_ready = FALSE + if(teleport_x && teleport_y && teleport_z) + var/turf/T = locate(teleport_x, teleport_y, teleport_z) + to_chat(user, "You snap back to your anchor point!") + do_teleport(user, T, asoundin = 'sound/weapons/emitter2.ogg') + return 450 + /obj/item/slime_extract/pyrite name = "pyrite slime extract" icon_state = "pyrite slime extract" +/obj/item/slime_extract/pyrite/activate(mob/living/carbon/human/user, datum/species/jelly/luminescent/species, activation_type) + switch(activation_type) + if(SLIME_ACTIVATE_MINOR) + var/chosen = pick(difflist(subtypesof(/obj/item/toy/crayon),typesof(/obj/item/toy/crayon/spraycan))) + var/obj/item/O = new chosen(null) + if(!user.put_in_active_hand(O)) + O.forceMove(user.drop_location()) + playsound(user, 'sound/effects/splat.ogg', 50, 1) + user.visible_message("[user] spits out [O]!", "You spit out [O]!") + return 150 + + if(SLIME_ACTIVATE_MAJOR) + var/chosen = pick(subtypesof(/obj/item/toy/crayon/spraycan)) + var/obj/item/O = new chosen(null) + if(!user.put_in_active_hand(O)) + O.forceMove(user.drop_location()) + playsound(user, 'sound/effects/splat.ogg', 50, 1) + user.visible_message("[user] spits out [O]!", "You spit out [O]!") + return 250 + /obj/item/slime_extract/cerulean name = "cerulean slime extract" icon_state = "cerulean slime extract" +/obj/item/slime_extract/cerulean/activate(mob/living/carbon/human/user, datum/species/jelly/luminescent/species, activation_type) + switch(activation_type) + if(SLIME_ACTIVATE_MINOR) + user.reagents.add_reagent("salbutamol",15) + to_chat(user, "You feel like you don't need to breathe!") + return 150 + + if(SLIME_ACTIVATE_MAJOR) + var/turf/open/T = get_turf(user) + if(istype(T)) + T.atmos_spawn_air("o2=11;n2=41;TEMP=293.15") + to_chat(user, "You activate [src], and fresh air bursts out of your skin!") + return 600 + /obj/item/slime_extract/sepia name = "sepia slime extract" icon_state = "sepia slime extract" +/obj/item/slime_extract/sepia/activate(mob/living/carbon/human/user, datum/species/jelly/luminescent/species, activation_type) + switch(activation_type) + if(SLIME_ACTIVATE_MINOR) + var/obj/item/device/camera/O = new(null, 1) + if(!user.put_in_active_hand(O)) + O.forceMove(user.drop_location()) + playsound(user, 'sound/effects/splat.ogg', 50, 1) + user.visible_message("[user] spits out [O]!", "You spit out [O]!") + return 150 + + if(SLIME_ACTIVATE_MAJOR) + to_chat(user, "You feel time slow down...") + if(do_after(user, 30, target = user)) + new /obj/effect/timestop(get_turf(user), 2, 50, list(user)) + return 900 + /obj/item/slime_extract/rainbow name = "rainbow slime extract" icon_state = "rainbow slime extract" +/obj/item/slime_extract/rainbow/activate(mob/living/carbon/human/user, datum/species/jelly/luminescent/species, activation_type) + switch(activation_type) + if(SLIME_ACTIVATE_MINOR) + user.dna.features["mcolor"] = pick("FFFFFF","7F7F7F", "7FFF7F", "7F7FFF", "FF7F7F", "7FFFFF", "FF7FFF", "FFFF7F") + user.updateappearance(mutcolor_update=1) + species.update_glow(user) + to_chat(user, "You feel different...") + return 100 + + if(SLIME_ACTIVATE_MAJOR) + var/chosen = pick(subtypesof(/obj/item/slime_extract)) + var/obj/item/O = new chosen(null) + if(!user.put_in_active_hand(O)) + O.forceMove(user.drop_location()) + playsound(user, 'sound/effects/splat.ogg', 50, 1) + user.visible_message("[user] spits out [O]!", "You spit out [O]!") + return 150 + ////Slime-derived potions/// /obj/item/slimepotion diff --git a/code/modules/ruins/objects_and_mobs/sin_ruins.dm b/code/modules/ruins/objects_and_mobs/sin_ruins.dm index 3924d29e91..33bfdb8b67 100644 --- a/code/modules/ruins/objects_and_mobs/sin_ruins.dm +++ b/code/modules/ruins/objects_and_mobs/sin_ruins.dm @@ -12,9 +12,9 @@ /obj/structure/cursed_slot_machine/attack_hand(mob/living/carbon/human/user) if(!istype(user)) return - if(in_use) + if(obj_flags & IN_USE) return - in_use = TRUE + obj_flags |= IN_USE user.adjustCloneLoss(20) if(user.stat) to_chat(user, "No... just one more try...") @@ -28,7 +28,7 @@ /obj/structure/cursed_slot_machine/proc/determine_victor(mob/living/user) icon_state = "slots1" - in_use = FALSE + obj_flags &= ~IN_USE if(prob(win_prob)) playsound(src, 'sound/lavaland/cursed_slot_machine_jackpot.ogg', 50, 0) new/obj/structure/cursed_money(get_turf(src)) diff --git a/code/modules/ruins/spaceruin_code/caravanambush.dm b/code/modules/ruins/spaceruin_code/caravanambush.dm index 8877a693cd..603af76f1a 100644 --- a/code/modules/ruins/spaceruin_code/caravanambush.dm +++ b/code/modules/ruins/spaceruin_code/caravanambush.dm @@ -25,3 +25,142 @@ desc = "A prototype of a new crowbar design, allegedly the red color scheme makes it go faster." name = "experimental crowbar" toolspeed = 0.3 + +/obj/machinery/computer/shuttle/caravan + +/obj/item/circuitboard/computer/caravan + build_path = /obj/machinery/computer/shuttle/caravan + +/obj/item/circuitboard/computer/caravan/trade1 + build_path = /obj/machinery/computer/shuttle/caravan/trade1 + +/obj/item/circuitboard/computer/caravan/pirate + build_path = /obj/machinery/computer/shuttle/caravan/pirate + +/obj/item/circuitboard/computer/caravan/syndicate1 + build_path = /obj/machinery/computer/shuttle/caravan/syndicate1 + +/obj/item/circuitboard/computer/caravan/syndicate2 + build_path = /obj/machinery/computer/shuttle/caravan/syndicate2 + +/obj/item/circuitboard/computer/caravan/syndicate3 + build_path = /obj/machinery/computer/shuttle/caravan/syndicate3 + +/obj/machinery/computer/shuttle/caravan/trade1 + name = "Small Freighter Shuttle Console" + desc = "Used to control the Small Freighter." + circuit = /obj/item/circuitboard/computer/caravan/trade1 + shuttleId = "caravantrade1" + possible_destinations = "whiteship_away;whiteship_home;whiteship_z4;whiteship_lavaland;caravantrade1_custom;caravantrade1_ambush" + +/obj/machinery/computer/camera_advanced/shuttle_docker/caravan/trade1 + name = "Small Freighter Navigation Computer" + desc = "Used to designate a precise transit location for the Small Freighter." + shuttleId = "caravantrade1" + lock_override = NONE + shuttlePortId = "caravantrade1_custom" + shuttlePortName = "Custom Location" + jumpto_ports = list("whiteship_away" = 1, "whiteship_home" = 1, "whiteship_z4" = 1, "caravantrade1_ambush" = 1) + view_range = 14 + x_offset = -5 + y_offset = -5 + designate_time = 100 + +/obj/machinery/computer/shuttle/caravan/pirate + name = "Pirate Cutter Shuttle Console" + desc = "Used to control the Pirate Cutter." + icon_screen = "syndishuttle" + icon_keyboard = "syndie_key" + light_color = LIGHT_COLOR_RED + circuit = /obj/item/circuitboard/computer/caravan/pirate + shuttleId = "caravanpirate" + possible_destinations = "caravanpirate_custom;caravanpirate_ambush" + +/obj/machinery/computer/camera_advanced/shuttle_docker/caravan/pirate + name = "Pirate Cutter Navigation Computer" + desc = "Used to designate a precise transit location for the Pirate Cutter." + icon_screen = "syndishuttle" + icon_keyboard = "syndie_key" + shuttleId = "caravanpirate" + lock_override = NONE + shuttlePortId = "caravanpirate_custom" + shuttlePortName = "Custom Location" + jumpto_ports = list("caravanpirate_ambush" = 1) + view_range = 14 + x_offset = 3 + y_offset = -6 + +/obj/machinery/computer/shuttle/caravan/syndicate1 + name = "Syndicate Fighter Shuttle Console" + desc = "Used to control the Syndicate Fighter." + icon_screen = "syndishuttle" + icon_keyboard = "syndie_key" + light_color = LIGHT_COLOR_RED + req_access = list(ACCESS_SYNDICATE) + circuit = /obj/item/circuitboard/computer/caravan/syndicate1 + shuttleId = "caravansyndicate1" + possible_destinations = "caravansyndicate1_custom;caravansyndicate1_ambush;caravansyndicate1_listeningpost" + +/obj/machinery/computer/camera_advanced/shuttle_docker/caravan/syndicate1 + name = "Syndicate Fighter Navigation Computer" + desc = "Used to designate a precise transit location for the Syndicate Fighter." + icon_screen = "syndishuttle" + icon_keyboard = "syndie_key" + shuttleId = "caravansyndicate1" + lock_override = NONE + shuttlePortId = "caravansyndicate1_custom" + shuttlePortName = "Custom Location" + jumpto_ports = list("caravansyndicate1_ambush" = 1, "caravansyndicate1_listeningpost" = 1) + view_range = 7 + x_offset = 2 + y_offset = 0 + +/obj/machinery/computer/shuttle/caravan/syndicate2 + name = "Syndicate Fighter Shuttle Console" + desc = "Used to control the Syndicate Fighter." + icon_screen = "syndishuttle" + icon_keyboard = "syndie_key" + req_access = list(ACCESS_SYNDICATE) + light_color = LIGHT_COLOR_RED + circuit = /obj/item/circuitboard/computer/caravan/syndicate2 + shuttleId = "caravansyndicate2" + possible_destinations = "caravansyndicate2_custom;caravansyndicate2_ambush;caravansyndicate1_listeningpost" + +/obj/machinery/computer/camera_advanced/shuttle_docker/caravan/syndicate2 + name = "Syndicate Fighter Navigation Computer" + desc = "Used to designate a precise transit location for the Syndicate Fighter." + icon_screen = "syndishuttle" + icon_keyboard = "syndie_key" + shuttleId = "caravansyndicate2" + lock_override = NONE + shuttlePortId = "caravansyndicate2_custom" + shuttlePortName = "Custom Location" + jumpto_ports = list("caravansyndicate2_ambush" = 1, "caravansyndicate1_listeningpost" = 1) + view_range = 7 + x_offset = 0 + y_offset = 2 + +/obj/machinery/computer/shuttle/caravan/syndicate3 + name = "Syndicate Drop Ship Console" + desc = "Used to control the Syndicate Drop Ship." + icon_screen = "syndishuttle" + icon_keyboard = "syndie_key" + req_access = list(ACCESS_SYNDICATE) + light_color = LIGHT_COLOR_RED + circuit = /obj/item/circuitboard/computer/caravan/syndicate3 + shuttleId = "caravansyndicate3" + possible_destinations = "caravansyndicate3_custom;caravansyndicate3_ambush;caravansyndicate3_listeningpost" + +/obj/machinery/computer/camera_advanced/shuttle_docker/caravan/syndicate3 + name = "Syndicate Drop Ship Navigation Computer" + desc = "Used to designate a precise transit location for the Syndicate Drop Ship." + icon_screen = "syndishuttle" + icon_keyboard = "syndie_key" + shuttleId = "caravansyndicate3" + lock_override = NONE + shuttlePortId = "caravansyndicate3_custom" + shuttlePortName = "Custom Location" + jumpto_ports = list("caravansyndicate3_ambush" = 1, "caravansyndicate3_listeningpost" = 1) + view_range = 10 + x_offset = -1 + y_offset = -3 \ No newline at end of file diff --git a/code/modules/security_levels/security_levels.dm b/code/modules/security_levels/security_levels.dm index 7fb23c75e5..0da7227d3a 100644 --- a/code/modules/security_levels/security_levels.dm +++ b/code/modules/security_levels/security_levels.dm @@ -41,7 +41,6 @@ GLOBAL_VAR_INIT(security_level, 0) if(SSshuttle.emergency.mode == SHUTTLE_CALL || SSshuttle.emergency.mode == SHUTTLE_RECALL) SSshuttle.emergency.modTimer(2) GLOB.security_level = SEC_LEVEL_BLUE - sound_to_playing_players('sound/misc/voybluealert.ogg') for(var/obj/machinery/firealarm/FA in GLOB.machines) if(is_station_level(FA.z)) FA.update_icon() @@ -56,7 +55,7 @@ GLOBAL_VAR_INIT(security_level, 0) else minor_announce(CONFIG_GET(string/alert_red_downto), "Attention! Code red!") GLOB.security_level = SEC_LEVEL_RED - sound_to_playing_players('sound/misc/voyalert.ogg') + for(var/obj/machinery/firealarm/FA in GLOB.machines) if(is_station_level(FA.z)) FA.update_icon() @@ -70,7 +69,6 @@ GLOBAL_VAR_INIT(security_level, 0) else if(GLOB.security_level == SEC_LEVEL_BLUE) SSshuttle.emergency.modTimer(0.5) GLOB.security_level = SEC_LEVEL_DELTA - sound_to_playing_players('sound/misc/deltakalaxon.ogg') for(var/obj/machinery/firealarm/FA in GLOB.machines) if(is_station_level(FA.z)) FA.update_icon() diff --git a/code/modules/shuttle/arrivals.dm b/code/modules/shuttle/arrivals.dm index 318c896efd..b7fd4c3d58 100644 --- a/code/modules/shuttle/arrivals.dm +++ b/code/modules/shuttle/arrivals.dm @@ -11,8 +11,6 @@ callTime = INFINITY ignitionTime = 50 - roundstart_move = TRUE //force a call to dockRoundstart - var/sound_played var/damaged //too damaged to undock? var/list/areas //areas in our shuttle @@ -22,16 +20,20 @@ var/perma_docked = FALSE //highlander with RESPAWN??? OH GOD!!! /obj/docking_port/mobile/arrivals/Initialize(mapload) - if(SSshuttle.arrivals) - WARNING("More than one arrivals docking_port placed on map!") - return INITIALIZE_HINT_QDEL - SSshuttle.arrivals = src - + if(!timid) + register() + . = ..() preferred_direction = dir return INITIALIZE_HINT_LATELOAD //for latejoin list +/obj/docking_port/mobile/arrivals/register() + ..() + if(SSshuttle.arrivals) + WARNING("More than one arrivals docking_port placed on map! Ignoring duplicates.") + SSshuttle.arrivals = src + /obj/docking_port/mobile/arrivals/LateInitialize() areas = list() @@ -54,13 +56,6 @@ SSjob.latejoin_trackers = new_latejoin -/obj/docking_port/mobile/arrivals/dockRoundstart() - SSshuttle.generate_transit_dock(src) - Launch() - timer = world.time - check() - return TRUE - /obj/docking_port/mobile/arrivals/check() . = ..() diff --git a/code/modules/shuttle/computer.dm b/code/modules/shuttle/computer.dm index 226de32755..4f2d932b1f 100644 --- a/code/modules/shuttle/computer.dm +++ b/code/modules/shuttle/computer.dm @@ -66,9 +66,9 @@ to_chat(usr, "Unable to comply.") /obj/machinery/computer/shuttle/emag_act(mob/user) - if(emagged) + if(obj_flags & EMAGGED) return req_access = list() - emagged = TRUE + obj_flags |= EMAGGED to_chat(user, "You fried the consoles ID checking system.") diff --git a/code/modules/shuttle/emergency.dm b/code/modules/shuttle/emergency.dm index e11a120ba1..59faaf1779 100644 --- a/code/modules/shuttle/emergency.dm +++ b/code/modules/shuttle/emergency.dm @@ -36,14 +36,14 @@ var/name = ID.registered_name var/job = ID.assignment - if(emagged) + if(obj_flags & EMAGGED) name = Gibberish(name, 0) job = Gibberish(job, 0) A += list(list("name" = name, "job" = job)) data["authorizations"] = A data["enabled"] = (IS_DOCKED && !ENGINES_STARTED) - data["emagged"] = emagged + data["emagged"] = obj_flags & EMAGGED ? 1 : 0 return data /obj/machinery/computer/emergency_shuttle/ui_act(action, params, datum/tgui/ui) @@ -119,16 +119,16 @@ if(SSshuttle.emergency.mode == SHUTTLE_STRANDED) authorized.Cut() - emagged = FALSE + obj_flags &= ~EMAGGED if(ENGINES_STARTED || (!IS_DOCKED)) return . // Check to see if we've reached criteria for early launch - if((authorized.len >= auth_need) || emagged) + if((authorized.len >= auth_need) || (obj_flags & EMAGGED)) // shuttle timers use 1/10th seconds internally SSshuttle.emergency.setTimer(ENGINES_START_TIME) - var/system_error = emagged ? "SYSTEM ERROR:" : null + var/system_error = obj_flags & EMAGGED ? "SYSTEM ERROR:" : null minor_announce("The emergency shuttle will launch in \ [TIME_LEFT] seconds", system_error, alert=TRUE) . = TRUE @@ -138,7 +138,7 @@ if(!IS_DOCKED) return - if(emagged || ENGINES_STARTED) //SYSTEM ERROR: THE SHUTTLE WILL LA-SYSTEM ERROR: THE SHUTTLE WILL LA-SYSTEM ERROR: THE SHUTTLE WILL LAUNCH IN 10 SECONDS + if((obj_flags & EMAGGED) || ENGINES_STARTED) //SYSTEM ERROR: THE SHUTTLE WILL LA-SYSTEM ERROR: THE SHUTTLE WILL LA-SYSTEM ERROR: THE SHUTTLE WILL LAUNCH IN 10 SECONDS to_chat(user, "The shuttle is already about to launch!") return @@ -149,7 +149,7 @@ has emagged the emergency shuttle [time] seconds before launch.", 0, 1) log_game("[key_name(user)] has emagged the emergency shuttle in \ [COORD(src)] [time] seconds before launch.") - emagged = TRUE + obj_flags |= EMAGGED var/datum/species/S = new for(var/i in 1 to 10) // the shuttle system doesn't know who these people are, but they @@ -184,7 +184,6 @@ height = 11 dir = EAST port_direction = WEST - roundstart_move = "emergency_away" var/sound_played = 0 //If the launch sound has been sent to all players on the shuttle itself /obj/docking_port/mobile/emergency/canDock(obj/docking_port/stationary/S) @@ -415,7 +414,7 @@ /obj/docking_port/mobile/pod/request() var/obj/machinery/computer/shuttle/S = getControlConsole() - if(GLOB.security_level == SEC_LEVEL_RED || GLOB.security_level == SEC_LEVEL_DELTA || (S && S.emagged)) + if(GLOB.security_level == SEC_LEVEL_RED || GLOB.security_level == SEC_LEVEL_DELTA || (S && (S.obj_flags & EMAGGED))) if(launch_status == UNLAUNCHED) launch_status = EARLY_LAUNCHED return ..() @@ -446,9 +445,9 @@ return /obj/machinery/computer/shuttle/pod/emag_act(mob/user) - if(emagged) + if(obj_flags & EMAGGED) return - emagged = TRUE + obj_flags |= EMAGGED to_chat(user, "You fry the pod's alert level checking system.") /obj/docking_port/stationary/random @@ -537,7 +536,6 @@ width = 8 height = 8 dir = EAST - roundstart_move = "backup_away" /obj/docking_port/mobile/emergency/backup/Initialize() // We want to be a valid emergency shuttle diff --git a/code/modules/shuttle/manipulator.dm b/code/modules/shuttle/manipulator.dm index 721ee601f7..299d9e1eaa 100644 --- a/code/modules/shuttle/manipulator.dm +++ b/code/modules/shuttle/manipulator.dm @@ -23,6 +23,14 @@ /obj/machinery/shuttle_manipulator/Initialize() . = ..() update_icon() + SSshuttle.manipulator = src + +/obj/machinery/shuttle_manipulator/Destroy(force) + if(!force) + . = QDEL_HINT_LETMELIVE + else + SSshuttle.manipulator = null + . = ..() /obj/machinery/shuttle_manipulator/update_icon() cut_overlays() @@ -182,8 +190,7 @@ update_icon() -/obj/machinery/shuttle_manipulator/proc/action_load( - datum/map_template/shuttle/loading_template) +/obj/machinery/shuttle_manipulator/proc/action_load(datum/map_template/shuttle/loading_template, obj/docking_port/stationary/destination_port) // Check for an existing preview if(preview_shuttle && (loading_template != preview_template)) preview_shuttle.jumpToNullSpace() @@ -199,16 +206,15 @@ var/mode = SHUTTLE_IDLE var/obj/docking_port/stationary/D - if(existing_shuttle) + if(istype(destination_port)) + D = destination_port + else if(existing_shuttle) timer = existing_shuttle.timer mode = existing_shuttle.mode D = existing_shuttle.get_docked() - else - D = preview_shuttle.findRoundstartDock() if(!D) - var/m = "No dock found for preview shuttle, aborting." - WARNING(m) + var/m = "No dock found for preview shuttle ([preview_template.name]), aborting." throw EXCEPTION(m) var/result = preview_shuttle.canDock(D) @@ -216,11 +222,11 @@ // but we can ignore the someone else docked error because we'll // be moving into their place shortly if((result != SHUTTLE_CAN_DOCK) && (result != SHUTTLE_SOMEONE_ELSE_DOCKED)) - var/m = "Unsuccessful dock of [preview_shuttle] ([result])." - WARNING(m) + WARNING("Template shuttle [preview_shuttle] cannot dock at [D] ([result]).") return - existing_shuttle.jumpToNullSpace() + if(existing_shuttle) + existing_shuttle.jumpToNullSpace() preview_shuttle.initiate_docking(D) . = preview_shuttle diff --git a/code/modules/shuttle/shuttle.dm b/code/modules/shuttle/shuttle.dm index d87750c394..6a8fd7b3a1 100644 --- a/code/modules/shuttle/shuttle.dm +++ b/code/modules/shuttle/shuttle.dm @@ -167,6 +167,9 @@ var/last_dock_time + var/datum/map_template/shuttle/roundstart_template + var/json_key + /obj/docking_port/stationary/Initialize(mapload) . = ..() SSshuttle.stationary += src @@ -184,6 +187,22 @@ highlight("#f00") #endif +/obj/docking_port/stationary/proc/load_roundstart() + if(json_key) + var/sid = SSmapping.config.shuttles[json_key] + roundstart_template = SSmapping.shuttle_templates[sid] + if(!roundstart_template) + CRASH("json_key:[json_key] value \[[sid]\] resulted in a null shuttle template for [src]") + else if(roundstart_template) // passed a PATH + var/sid = "[initial(roundstart_template.port_id)]_[initial(roundstart_template.suffix)]" + + roundstart_template = SSmapping.shuttle_templates[sid] + if(!roundstart_template) + CRASH("Invalid path ([roundstart_template]) passed to docking port.") + + if(roundstart_template) + SSshuttle.manipulator.action_load(roundstart_template, src) + //returns first-found touching shuttleport /obj/docking_port/stationary/get_docked() . = locate(/obj/docking_port/mobile) in loc @@ -234,7 +253,6 @@ var/mode = SHUTTLE_IDLE //current shuttle mode var/callTime = 100 //time spent in transit (deciseconds). Should not be lower then 10 seconds without editing the animation of the hyperspace ripples. var/ignitionTime = 55 // time spent "starting the engines". Also rate limits how often we try to reserve transit space if its ever full of transiting shuttles. - var/roundstart_move //id of port to send shuttle to at roundstart // The direction the shuttle prefers to travel in var/preferred_direction = NORTH @@ -251,8 +269,9 @@ var/list/movement_force = list("KNOCKDOWN" = 3, "THROW" = 2) // A timid shuttle will not register itself with the shuttle subsystem - // All shuttle templates are timid - var/timid = FALSE + // All shuttle templates MUST be timid, imports will fail if they're not + // Shuttle defined already on the map MUST NOT be timid, or they won't work + var/timid = TRUE var/list/ripples = list() var/engine_coeff = 1 //current engine coeff @@ -473,12 +492,6 @@ for(var/obj/machinery/door/poddoor/shuttledock/pod in GLOB.airlocks) pod.check() -/obj/docking_port/mobile/proc/findRoundstartDock() - return SSshuttle.getDock(roundstart_move) - -/obj/docking_port/mobile/proc/dockRoundstart() - . = dock_id(roundstart_move) - /obj/docking_port/mobile/proc/dock_id(id) var/port = SSshuttle.getDock(id) if(port) @@ -489,6 +502,10 @@ /obj/effect/landmark/shuttle_import name = "Shuttle Import" +// Never move the shuttle import landmark, otherwise things get WEIRD +/obj/effect/landmark/shuttle_import/onShuttleMove() + return FALSE + //used by shuttle subsystem to check timers /obj/docking_port/mobile/proc/check() check_effects() diff --git a/code/modules/shuttle/supply.dm b/code/modules/shuttle/supply.dm index eacacef933..a0bc4f0d1f 100644 --- a/code/modules/shuttle/supply.dm +++ b/code/modules/shuttle/supply.dm @@ -34,7 +34,6 @@ GLOBAL_LIST_INIT(blacklisted_cargo_types, typecacheof(list( width = 12 dwidth = 5 height = 7 - roundstart_move = "supply_away" // When TRUE, these vars allow exporting emagged/contraband items, and add some special interactions to existing exports. var/contraband = FALSE diff --git a/code/modules/shuttle/syndicate.dm b/code/modules/shuttle/syndicate.dm index 410935db5a..3f4d0cbee7 100644 --- a/code/modules/shuttle/syndicate.dm +++ b/code/modules/shuttle/syndicate.dm @@ -51,7 +51,7 @@ icon_screen = "syndishuttle" icon_keyboard = "syndie_key" shuttleId = "syndicate" - station_lock_override = TRUE + lock_override = CAMERA_LOCK_STATION shuttlePortId = "syndicate_custom" shuttlePortName = "custom location" jumpto_ports = list("syndicate_ne" = 1, "syndicate_nw" = 1, "syndicate_n" = 1, "syndicate_se" = 1, "syndicate_sw" = 1, "syndicate_s" = 1) diff --git a/code/modules/shuttle/white_ship.dm b/code/modules/shuttle/white_ship.dm index b6d9bda8b2..79c2fda7ed 100644 --- a/code/modules/shuttle/white_ship.dm +++ b/code/modules/shuttle/white_ship.dm @@ -9,7 +9,7 @@ name = "White Ship Navigation Computer" desc = "Used to designate a precise transit location for the White Ship." shuttleId = "whiteship" - station_lock_override = TRUE + lock_override = CAMERA_LOCK_STATION shuttlePortId = "whiteship_custom" shuttlePortName = "Custom Location" jumpto_ports = list("whiteship_away" = 1, "whiteship_home" = 1, "whiteship_z4" = 1) diff --git a/code/modules/spells/spell.dm b/code/modules/spells/spell.dm index ae317ad861..2d6d1ed75f 100644 --- a/code/modules/spells/spell.dm +++ b/code/modules/spells/spell.dm @@ -478,8 +478,8 @@ GLOBAL_LIST_INIT(spells, typesof(/obj/effect/proc_holder/spell)) //needed for th perform(targets,user=user) -/obj/effect/proc_holder/spell/proc/updateButtonIcon() - action.UpdateButtonIcon() +/obj/effect/proc_holder/spell/proc/updateButtonIcon(status_only, force) + action.UpdateButtonIcon(status_only, force) /obj/effect/proc_holder/spell/proc/can_be_cast_by(mob/caster) if((human_req || clothes_req) && !ishuman(caster)) diff --git a/code/modules/spells/spell_types/genetic.dm b/code/modules/spells/spell_types/genetic.dm index c43dacac46..43069e0033 100644 --- a/code/modules/spells/spell_types/genetic.dm +++ b/code/modules/spells/spell_types/genetic.dm @@ -2,7 +2,7 @@ name = "Genetic" desc = "This spell inflicts a set of mutations and disabilities upon the target." - var/list/disabilities = list() //disabilities + var/list/traits = list() //disabilities var/list/mutations = list() //mutation strings var/duration = 100 //deciseconds /* @@ -22,13 +22,13 @@ continue for(var/A in mutations) target.dna.add_mutation(A) - for(var/A in disabilities) - target.add_disability(A, GENETICS_SPELL) + for(var/A in traits) + target.add_trait(A, GENETICS_SPELL) addtimer(CALLBACK(src, .proc/remove, target), duration) /obj/effect/proc_holder/spell/targeted/genetic/proc/remove(mob/living/carbon/target) if(!QDELETED(target)) for(var/A in mutations) target.dna.remove_mutation(A) - for(var/A in disabilities) - target.remove_disability(A, GENETICS_SPELL) \ No newline at end of file + for(var/A in traits) + target.remove_trait(A, GENETICS_SPELL) \ No newline at end of file diff --git a/code/modules/station_goals/shield.dm b/code/modules/station_goals/shield.dm index 13216826a4..c9acfebb9c 100644 --- a/code/modules/station_goals/shield.dm +++ b/code/modules/station_goals/shield.dm @@ -122,7 +122,7 @@ /obj/machinery/satellite/attackby(obj/item/I, mob/user, params) if(istype(I, /obj/item/device/multitool)) - to_chat(user, "// NTSAT-[id] // Mode : [active ? "PRIMARY" : "STANDBY"] //[emagged ? "DEBUG_MODE //" : ""]") + to_chat(user, "// NTSAT-[id] // Mode : [active ? "PRIMARY" : "STANDBY"] //[(obj_flags & EMAGGED) ? "DEBUG_MODE //" : ""]") else return ..() @@ -147,14 +147,14 @@ continue if(get_dist(M,src) > kill_range) continue - if(!emagged && space_los(M)) + if(!(obj_flags & EMAGGED) && space_los(M)) Beam(get_turf(M),icon_state="sat_beam",time=5,maxdistance=kill_range) qdel(M) /obj/machinery/satellite/meteor_shield/toggle(user) if(!..(user)) return FALSE - if(emagged) + if(obj_flags & EMAGGED) if(active) change_meteor_chance(2) else @@ -167,12 +167,12 @@ /obj/machinery/satellite/meteor_shield/Destroy() . = ..() - if(active && emagged) + if(active && (obj_flags & EMAGGED)) change_meteor_chance(0.5) /obj/machinery/satellite/meteor_shield/emag_act() - if(emagged) + if(obj_flags & EMAGGED) return - emagged = TRUE + obj_flags |= EMAGGED if(active) change_meteor_chance(2) diff --git a/code/modules/surgery/bodyparts/bodyparts.dm b/code/modules/surgery/bodyparts/bodyparts.dm index fa8d04d987..c178d7f72f 100644 --- a/code/modules/surgery/bodyparts/bodyparts.dm +++ b/code/modules/surgery/bodyparts/bodyparts.dm @@ -11,6 +11,8 @@ var/mob/living/carbon/original_owner = null var/status = BODYPART_ORGANIC var/body_zone //"chest", "l_arm", etc , used for def_zone + var/aux_zone // used for hands + var/aux_layer var/body_part = null //bitflag used to check which clothes cover this bodypart var/use_digitigrade = NOT_DIGITIGRADE //Used for alternate legs, useless elsewhere var/brutestate = 0 @@ -217,7 +219,7 @@ C = owner no_update = 0 - if(C.has_disability(DISABILITY_HUSK)) + if(C.has_trait(TRAIT_HUSK)) species_id = "husk" //overrides species_id dmg_overlay_type = "" //no damage overlay shown when husked should_draw_gender = FALSE @@ -297,6 +299,7 @@ . += image('icons/mob/dam_mob.dmi', "[dmg_overlay_type]_[body_zone]_0[burnstate]", -DAMAGE_LAYER, image_dir) var/image/limb = image(layer = -BODYPARTS_LAYER, dir = image_dir) + var/image/aux . += limb if(animal_origin) @@ -331,6 +334,9 @@ limb.icon_state = "[species_id]_[body_zone]_[icon_gender]" else limb.icon_state = "[species_id]_[body_zone]" + if(aux_zone) + aux = image(limb.icon, "[species_id]_[aux_zone]", -aux_layer, image_dir) + . += aux else limb.icon = icon @@ -345,6 +351,8 @@ var/draw_color = mutation_color || species_color || (skin_tone && skintone2hex(skin_tone)) if(draw_color) limb.color = "#[draw_color]" + if(aux_zone) + aux.color = "#[draw_color]" /obj/item/bodypart/deconstruct(disassembled = TRUE) drop_organs() @@ -407,6 +415,8 @@ max_damage = 50 body_zone ="l_arm" body_part = ARM_LEFT + aux_zone = "l_hand" + aux_layer = HANDS_PART_LAYER held_index = 1 px_x = -6 px_y = 0 @@ -441,6 +451,8 @@ max_damage = 50 body_zone = "r_arm" body_part = ARM_RIGHT + aux_zone = "r_hand" + aux_layer = HANDS_PART_LAYER held_index = 2 px_x = 6 px_y = 0 diff --git a/code/modules/surgery/bodyparts/head.dm b/code/modules/surgery/bodyparts/head.dm index 4afe4df220..50dd2641e4 100644 --- a/code/modules/surgery/bodyparts/head.dm +++ b/code/modules/surgery/bodyparts/head.dm @@ -61,7 +61,7 @@ C = owner real_name = C.real_name - if(C.has_disability(DISABILITY_HUSK)) + if(C.has_trait(TRAIT_HUSK)) real_name = "Unknown" hair_style = "Bald" facial_hair_style = "Shaved" diff --git a/code/modules/surgery/lipoplasty.dm b/code/modules/surgery/lipoplasty.dm index 480edb4bd3..5a201bfc84 100644 --- a/code/modules/surgery/lipoplasty.dm +++ b/code/modules/surgery/lipoplasty.dm @@ -4,7 +4,7 @@ possible_locs = list("chest") /datum/surgery/lipoplasty/can_start(mob/user, mob/living/carbon/target) - if(target.has_disability(DISABILITY_FAT)) + if(target.has_trait(TRAIT_FAT)) return 1 return 0 diff --git a/code/modules/surgery/organ_manipulation.dm b/code/modules/surgery/organ_manipulation.dm index 97e24b4cd5..8ce80ec8a0 100644 --- a/code/modules/surgery/organ_manipulation.dm +++ b/code/modules/surgery/organ_manipulation.dm @@ -119,11 +119,11 @@ current_type = "extract" var/list/organs = target.getorganszone(target_zone) - var/mob/living/simple_animal/borer/B = target.has_brain_worms() +/* var/mob/living/simple_animal/borer/B = target.has_brain_worms() if(target.has_brain_worms()) user.visible_message("[user] begins to extract [B] from [target]'s [parse_zone(target_zone)].", "You begin to extract [B] from [target]'s [parse_zone(target_zone)]...") - return TRUE + return TRUE*/ if(!organs.len) to_chat(user, "There are no removable organs in [target]'s [parse_zone(target_zone)]!") @@ -164,13 +164,13 @@ "You insert [tool] into [target]'s [parse_zone(target_zone)].") else if(current_type == "extract") - var/mob/living/simple_animal/borer/B = target.has_brain_worms() +/* var/mob/living/simple_animal/borer/B = target.has_brain_worms() if(B && B.victim == target) user.visible_message("[user] successfully extracts [B] from [target]'s [parse_zone(target_zone)]!", "You successfully extract [B] from [target]'s [parse_zone(target_zone)].") add_logs(user, target, "surgically removed [B] from", addition="INTENT: [uppertext(user.a_intent)]") B.leave_victim() - return FALSE + return FALSE */ if(I && I.owner == target) user.visible_message("[user] successfully extracts [I] from [target]'s [parse_zone(target_zone)]!", "You successfully extract [I] from [target]'s [parse_zone(target_zone)].") diff --git a/code/modules/surgery/organs/ears.dm b/code/modules/surgery/organs/ears.dm index 2a12005956..83646ab4d0 100644 --- a/code/modules/surgery/organs/ears.dm +++ b/code/modules/surgery/organs/ears.dm @@ -25,7 +25,7 @@ return var/mob/living/carbon/C = owner // genetic deafness prevents the body from using the ears, even if healthy - if(C.has_disability(DISABILITY_DEAF)) + if(C.has_trait(TRAIT_DEAF)) deaf = max(deaf, 1) else if(C.ears && (C.ears.flags_2 & HEALS_EARS_2)) @@ -42,7 +42,7 @@ var/mob/living/carbon/C = owner - if(iscarbon(owner) && C.has_disability(DISABILITY_DEAF)) + if(iscarbon(owner) && C.has_trait(TRAIT_DEAF)) deaf = 1 /obj/item/organ/ears/proc/adjustEarDamage(ddmg, ddeaf) @@ -82,6 +82,7 @@ name = "cat ears" icon = 'icons/obj/clothing/hats.dmi' icon_state = "kitty" + damage_multiplier = 2 /obj/item/organ/ears/cat/Insert(mob/living/carbon/human/H, special = 0, drop_if_replaced = TRUE) ..() diff --git a/code/modules/surgery/organs/eyes.dm b/code/modules/surgery/organs/eyes.dm index 430308ca3f..d9b0a726ee 100644 --- a/code/modules/surgery/organs/eyes.dm +++ b/code/modules/surgery/organs/eyes.dm @@ -316,3 +316,8 @@ parent = loc if(!istype(parent)) return INITIALIZE_HINT_QDEL + +/obj/item/organ/eyes/moth + name = "moth eyes" + desc = "These eyes seem to have increased sensitivity to bright light, with no improvement to low light vision." + flash_protect = -1 \ No newline at end of file diff --git a/code/modules/surgery/organs/tongue.dm b/code/modules/surgery/organs/tongue.dm index 325ebb3ef9..09926a3fdc 100644 --- a/code/modules/surgery/organs/tongue.dm +++ b/code/modules/surgery/organs/tongue.dm @@ -16,7 +16,7 @@ /datum/language/narsie, /datum/language/beachbum, /datum/language/ratvar, - /datum/language/aphasia + /datum/language/aphasia, )) /obj/item/organ/tongue/Initialize(mapload) diff --git a/code/modules/surgery/plastic_surgery.dm b/code/modules/surgery/plastic_surgery.dm index 909a658ffd..f1f2c11a05 100644 --- a/code/modules/surgery/plastic_surgery.dm +++ b/code/modules/surgery/plastic_surgery.dm @@ -13,8 +13,8 @@ user.visible_message("[user] begins to alter [target]'s appearance.", "You begin to alter [target]'s appearance...") /datum/surgery_step/reshape_face/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) - if(target.status_flags & DISFIGURED) - target.status_flags &= ~DISFIGURED + if(target.has_trait(TRAIT_DISFIGURED, TRAIT_GENERIC)) + target.remove_trait(TRAIT_DISFIGURED, TRAIT_GENERIC) user.visible_message("[user] successfully restores [target]'s appearance!", "You successfully restore [target]'s appearance.") else var/oldname = target.real_name diff --git a/code/modules/unit_tests/_unit_tests.dm b/code/modules/unit_tests/_unit_tests.dm new file mode 100644 index 0000000000..001952ea65 --- /dev/null +++ b/code/modules/unit_tests/_unit_tests.dm @@ -0,0 +1,5 @@ +//include unit test files in this module in this ifdef + +#ifdef UNIT_TESTS +#include "unit_test.dm" +#endif diff --git a/code/modules/unit_tests/unit_test.dm b/code/modules/unit_tests/unit_test.dm new file mode 100644 index 0000000000..49974f2cb0 --- /dev/null +++ b/code/modules/unit_tests/unit_test.dm @@ -0,0 +1,77 @@ +/* + +Usage: +Override /Run() to run your test code + +Call Fail() to fail the test (You should specify a reason) + +You may use /New() and /Destroy() for setup/teardown respectively + +You can use the run_loc_bottom_left and run_loc_top_right to get turfs for testing + +*/ + +GLOBAL_DATUM(current_test, /datum/unit_test) +GLOBAL_VAR_INIT(failed_any_test, FALSE) +GLOBAL_VAR(test_log) + +/datum/unit_test + //Bit of metadata for the future maybe + var/list/procs_tested + + //usable vars + var/turf/run_loc_bottom_left + var/turf/run_loc_top_right + + //internal shit + var/succeeded = TRUE + var/list/fail_reasons + +/datum/unit_test/New() + run_loc_bottom_left = locate(1, 1, 1) + run_loc_top_right = locate(5, 5, 1) + +/datum/unit_test/Destroy() + //clear the test area + for(var/atom/movable/AM in block(run_loc_bottom_left, run_loc_top_right)) + qdel(AM) + return ..() + +/datum/unit_test/proc/Run() + Fail("Run() called parent or not implemented") + +/datum/unit_test/proc/Fail(reason = "No reason") + succeeded = FALSE + + if(!istext(reason)) + reason = "FORMATTED: [reason != null ? reason : "NULL"]" + + LAZYADD(fail_reasons, reason) + +/proc/RunUnitTests() + CHECK_TICK + + for(var/I in subtypesof(/datum/unit_test)) + var/datum/unit_test/test = new I + + GLOB.current_test = test + var/duration = REALTIMEOFDAY + + test.Run() + + duration = REALTIMEOFDAY - duration + GLOB.current_test = null + GLOB.failed_any_test |= !test.succeeded + + var/list/log_entry = list("[test.succeeded ? "PASS" : "FAIL"]: [I] [duration / 10]s") + var/list/fail_reasons = test.fail_reasons + + qdel(test) + + for(var/J in 1 to LAZYLEN(fail_reasons)) + log_entry += "\tREASON #[J]: [fail_reasons[J]]" + log_test(log_entry.Join("\n")) + + CHECK_TICK + + SSticker.force_ending = TRUE diff --git a/code/modules/uplink/uplink_items.dm b/code/modules/uplink/uplink_items.dm index ae69442620..4c4137d52c 100644 --- a/code/modules/uplink/uplink_items.dm +++ b/code/modules/uplink/uplink_items.dm @@ -1284,6 +1284,17 @@ GLOBAL_LIST_EMPTY(uplink_items) // Global list so we only initialize this once. limited_stock = 2 //you can't use more than two! restricted_roles = list("Shaft Miner") +/datum/uplink_item/device_tools/clown_bomb + name = "Clown Bomb" + desc = "The Clown bomb is a hilarious device capable of massive pranks. It has an adjustable timer, \ + with a minimum of 60 seconds, and can be bolted to the floor with a wrench to prevent \ + movement. The bomb is bulky and cannot be moved; upon ordering this item, a smaller beacon will be \ + transported to you that will teleport the actual bomb to it upon activation. Note that this bomb can \ + be defused, and some crew may attempt to do so." + item = /obj/item/device/sbeacondrop/clownbomb + cost = 15 + restricted_roles = list("Clown") + // Pointless /datum/uplink_item/badass category = "(Pointless) Badassery" diff --git a/code/modules/zombie/items.dm b/code/modules/zombie/items.dm index f203af610a..cc42b7a67e 100644 --- a/code/modules/zombie/items.dm +++ b/code/modules/zombie/items.dm @@ -11,7 +11,7 @@ var/icon_left = "bloodhand_left" var/icon_right = "bloodhand_right" hitsound = 'sound/hallucinations/growl1.ogg' - force = 20 + force = 21 // Just enough to break airlocks with melee attacks damtype = "brute" var/removing_airlock = FALSE diff --git a/html/browser/common.css b/html/browser/common.css index 1f9a355fd7..2f43c8c6d7 100644 --- a/html/browser/common.css +++ b/html/browser/common.css @@ -1,5 +1,5 @@ -body -{ +body +{ padding: 0; margin: 0; background-color: #272727; @@ -14,9 +14,9 @@ hr height: 1px; } -a, a:link, a:visited, a:active, .linkOn, .linkOff -{ - color: #ffffff; +a, button, a:link, a:visited, a:active, .linkOn, .linkOff +{ + color: #ffffff; text-decoration: none; background: #40628a; border: 1px solid #161616; @@ -25,15 +25,15 @@ a, a:link, a:visited, a:active, .linkOn, .linkOff cursor:default; } -a:hover -{ +a:hover +{ color: #40628a; background: #ffffff; } a.white, a.white:link, a.white:visited, a.white:active -{ - color: #40628a; +{ + color: #40628a; text-decoration: none; background: #ffffff; border: 1px solid #161616; @@ -42,22 +42,22 @@ a.white, a.white:link, a.white:visited, a.white:active cursor:default; } -a.white:hover -{ +a.white:hover +{ color: #ffffff; background: #40628a; } .linkOn, a.linkOn:link, a.linkOn:visited, a.linkOn:active, a.linkOn:hover -{ - color: #ffffff; +{ + color: #ffffff; background: #2f943c; border-color: #24722e; } .linkOff, a.linkOff:link, a.linkOff:visited, a.linkOff:active, a.linkOff:hover -{ - color: #ffffff; +{ + color: #ffffff; background: #999999; border-color: #666666; } @@ -89,15 +89,15 @@ li padding: 0 0 2px 0; } -img, a img -{ - border-style:none; +img, a img +{ + border-style:none; } h1, h2, h3, h4, h5, h6 { margin: 0; - padding: 16px 0 8px 0; + padding: 16px 0 8px 0; color: #517087; } @@ -146,7 +146,7 @@ h4 } .uiContent -{ +{ clear: both; padding: 8px; font-family: Verdana, Geneva, sans-serif; @@ -189,7 +189,7 @@ h4 } .notice.icon -{ +{ padding: 2px 4px 0 20px; } @@ -303,4 +303,71 @@ div.notice { width: 100%; clear: both; -} \ No newline at end of file +} + + +.switch { + position: relative; + display: inline-block; + width: 50px; + height: 26px; +} + +.switch input {display:none;} + +.slider { + position: absolute; + cursor: pointer; + top: 0; + left: 0; + right: 0; + bottom: 0; + background-color: #383838; + transition: .4s; +} + +.slider:before { + position: absolute; + content: ""; + height: 18px; + width: 18px; + left: 4px; + bottom: 4px; + background-color: #98B0C3; + transition: .4s; +} + +input:checked + .slider { + background-color: #40628a; +} + +input:focus + .slider { + box-shadow: 0 0 1px #2196F3; +} + +input:checked + .slider:before { + transform: translateX(24px); +} + +.switch span { + display: inline-block; + position: relative; + width: 60px; + margin-left: 60px; +} + +ul.sparse { + padding-bottom:20px; +} + +.sparse li { + margin-top: 2px; +} + +.slider.round { + border-radius: 34px; +} + +.slider.round:before { + border-radius: 50%; +} diff --git a/icons/effects/96x32.dmi b/icons/effects/96x32.dmi index 69c2812053..937b2e8d42 100644 Binary files a/icons/effects/96x32.dmi and b/icons/effects/96x32.dmi differ diff --git a/icons/misc/language.dmi b/icons/misc/language.dmi index 4e627f16c7..dcd10a51b7 100644 Binary files a/icons/misc/language.dmi and b/icons/misc/language.dmi differ diff --git a/icons/mob/actions/actions_slime.dmi b/icons/mob/actions/actions_slime.dmi index 94cf319958..acf7a31c6e 100644 Binary files a/icons/mob/actions/actions_slime.dmi and b/icons/mob/actions/actions_slime.dmi differ diff --git a/icons/mob/animal.dmi b/icons/mob/animal.dmi index 8504b18a4a..89ab95225c 100644 Binary files a/icons/mob/animal.dmi and b/icons/mob/animal.dmi differ diff --git a/icons/mob/human_parts.dmi b/icons/mob/human_parts.dmi index 773ec5f912..70aeba6a69 100644 Binary files a/icons/mob/human_parts.dmi and b/icons/mob/human_parts.dmi differ diff --git a/icons/mob/human_parts_greyscale.dmi b/icons/mob/human_parts_greyscale.dmi index cbab2b0e8c..08dfc60326 100644 Binary files a/icons/mob/human_parts_greyscale.dmi and b/icons/mob/human_parts_greyscale.dmi differ diff --git a/icons/mob/neck.dmi b/icons/mob/neck.dmi index 59635b8c7d..24aa605c9f 100644 Binary files a/icons/mob/neck.dmi and b/icons/mob/neck.dmi differ diff --git a/icons/mob/uniform.dmi b/icons/mob/uniform.dmi index be23fa9f13..f35ef2c1a5 100644 Binary files a/icons/mob/uniform.dmi and b/icons/mob/uniform.dmi differ diff --git a/icons/mob/wings.dmi b/icons/mob/wings.dmi index 5f261b76fe..b2990a1509 100644 Binary files a/icons/mob/wings.dmi and b/icons/mob/wings.dmi differ diff --git a/icons/obj/bedsheets.dmi b/icons/obj/bedsheets.dmi index d492ae52f6..73dcad452b 100644 Binary files a/icons/obj/bedsheets.dmi and b/icons/obj/bedsheets.dmi differ diff --git a/icons/obj/decals.dmi b/icons/obj/decals.dmi index a5c487a184..3d382d25b3 100644 Binary files a/icons/obj/decals.dmi and b/icons/obj/decals.dmi differ diff --git a/icons/obj/drinks.dmi b/icons/obj/drinks.dmi index 77c3b647bc..2053ca5b8e 100644 Binary files a/icons/obj/drinks.dmi and b/icons/obj/drinks.dmi differ diff --git a/icons/obj/food/food.dmi b/icons/obj/food/food.dmi index 26822c2c01..cd15db0552 100644 Binary files a/icons/obj/food/food.dmi and b/icons/obj/food/food.dmi differ diff --git a/interface/interface.dm b/interface/interface.dm index 12712b77b6..324c2e8c1e 100644 --- a/interface/interface.dm +++ b/interface/interface.dm @@ -81,6 +81,7 @@ var/adminhotkeys = {" Admin: +\tF3 = asay \tF5 = Aghost (admin-ghost) \tF6 = player-panel \tF7 = admin-pm diff --git a/modular_citadel/code/controllers/subsystem/shuttle.dm b/modular_citadel/code/controllers/subsystem/shuttle.dm new file mode 100644 index 0000000000..0ec7a375e5 --- /dev/null +++ b/modular_citadel/code/controllers/subsystem/shuttle.dm @@ -0,0 +1,6 @@ +/datum/controller/subsystem/shuttle/proc/autoEnd() //CIT CHANGE - allows shift to end after 3 hours has passed. + if(world.time > auto_call && EMERGENCY_IDLE_OR_RECALLED) //3 hours + SSshuttle.emergency.request(null, 1.5) + priority_announce("The shift has come to an end and the shuttle called.") + log_game("Round time limit reached. Shuttle has been auto-called.") + message_admins("Round time limit reached. Shuttle called.") \ No newline at end of file diff --git a/modular_citadel/code/datums/uplink_items_cit.dm b/modular_citadel/code/datums/uplink_items_cit.dm index 392e26ba71..ed412bb547 100644 --- a/modular_citadel/code/datums/uplink_items_cit.dm +++ b/modular_citadel/code/datums/uplink_items_cit.dm @@ -1,4 +1,4 @@ -/datum/uplink_item/stealthy_tools/syndi_borer +/*/datum/uplink_item/stealthy_tools/syndi_borer name = "Syndicate Brain Slug" desc = "A small cortical borer, modified to be completely loyal to the owner. \ Genetically infertile, these brain slugs can assist medically in a support role, or take direct action \ @@ -7,7 +7,7 @@ refundable = TRUE cost = 10 surplus = 20 //Let's not have this be too common - exclude_modes = list(/datum/game_mode/nuclear) + exclude_modes = list(/datum/game_mode/nuclear) */ /datum/uplink_item/stealthy_tools/holoparasite name="Holoparasite Injector" diff --git a/modular_citadel/code/game/objects/items/melee/eutactic_blades.dm b/modular_citadel/code/game/objects/items/melee/eutactic_blades.dm index 3c564f1807..682e6b6496 100644 --- a/modular_citadel/code/game/objects/items/melee/eutactic_blades.dm +++ b/modular_citadel/code/game/objects/items/melee/eutactic_blades.dm @@ -18,8 +18,7 @@ throw_speed = 3 throw_range = 5 sharpness = IS_SHARP - embed_chance = 40 - embedded_impact_pain_multiplier = 10 + embedding = list("embedded_pain_multiplier" = 6, "embed_chance" = 40, "embedded_fall_chance" = 10) armour_penetration = 0 block_chance = 60 light_color = "#37FFF7" @@ -317,7 +316,7 @@ unwield() return ..() - if(user.has_disability(DISABILITY_CLUMSY) && (wielded) && prob(40)) + if(user.has_trait(TRAIT_CLUMSY) && (wielded) && prob(40)) impale(user) return @@ -392,7 +391,7 @@ It appears to have a wooden grip and a shaved down guard." icon_state = "cxsword_hilt_traitor" armour_penetration = 35 - embed_chance = 75 + embedding = list("embedded_pain_multiplier" = 10, "embed_chance" = 70, "embedded_fall_chance" = 0) block_chance = 50 hitsound_on = 'sound/weapons/blade1.ogg' light_color = "#37F0FF" diff --git a/modular_citadel/code/modules/mob/living/carbon/human/life.dm b/modular_citadel/code/modules/mob/living/carbon/human/life.dm new file mode 100644 index 0000000000..1f7c39a5ff --- /dev/null +++ b/modular_citadel/code/modules/mob/living/carbon/human/life.dm @@ -0,0 +1,12 @@ +/mob/living/carbon/human/Life() + //citadel code + if(stat != DEAD) + handle_arousal() + . = ..() + +/mob/living/carbon/human/calculate_affecting_pressure(pressure) + if(ismob(loc)) + return ONE_ATMOSPHERE + if(istype(loc, /obj/item/device/dogborg/sleeper)) + return ONE_ATMOSPHERE + . = ..() \ No newline at end of file diff --git a/modular_citadel/icons/obj/power.dmi b/modular_citadel/icons/obj/power.dmi new file mode 100644 index 0000000000..d0066b96de Binary files /dev/null and b/modular_citadel/icons/obj/power.dmi differ diff --git a/modular_citadel/simplemob_vore_values.dm b/modular_citadel/simplemob_vore_values.dm index 9c141c6547..9a4740ef1b 100644 --- a/modular_citadel/simplemob_vore_values.dm +++ b/modular_citadel/simplemob_vore_values.dm @@ -54,6 +54,10 @@ /mob/living/simple_animal/hostile/poison/giant_spider devourable = TRUE +/mob/living/simple_animal/hostile/retaliate/poison/snake + devourable = TRUE + no_vore = FALSE //oh yes my pretty. + /mob/living/simple_animal/hostile/gorilla devourable = TRUE no_vore = FALSE diff --git a/strings/names/moth.txt b/strings/names/moth.txt new file mode 100644 index 0000000000..ce1e4543f5 --- /dev/null +++ b/strings/names/moth.txt @@ -0,0 +1,40 @@ +Attacus +Ascalapha +Catocala +Hyalophora +Argema +Opodiphthera +Actias +Antheraea +Sphingidae +Helicoverpa +Spodoptera +Maruca +Thaumetopoea +Mythimna +Plutella +Timandra +Eugnorisma +Eacles +Epiphyas +Bombyx +Ochropleura +Xanthorhoe +Mythimna +Chloroclystis +Naenia +Aphomia +Eupithecia +Callosamia +Cryphia +Acherontia +Lymantria +Cydia +Ostrinia +Xestia +Plodia +Axylia +Naenia +Cucullia +Euplexia +Diarsia \ No newline at end of file diff --git a/strings/phobia.json b/strings/phobia.json index 343a475b56..f88750bbaf 100644 --- a/strings/phobia.json +++ b/strings/phobia.json @@ -59,5 +59,17 @@ "calcium", "the ride never ends", "doot" + ], + + "snakes": [ + "snake", + "snek", + "snecko", + "boop", + "slither", + "fangs", + "anaconda", + "viper", + "python" ] -} \ No newline at end of file +} diff --git a/tgstation.dme b/tgstation.dme index d466e3ded6..fd10e41cc1 100755 --- a/tgstation.dme +++ b/tgstation.dme @@ -16,14 +16,11 @@ #include "_maps\_basemap.dm" #include "code\_compile_options.dm" #include "code\world.dm" -#include "code\__DATASTRUCTURES\globals.dm" -#include "code\__DATASTRUCTURES\heap.dm" -#include "code\__DATASTRUCTURES\linked_lists.dm" -#include "code\__DATASTRUCTURES\priority_queue.dm" -#include "code\__DATASTRUCTURES\stacks.dm" +#include "code\__DEFINES\_globals.dm" #include "code\__DEFINES\_tick.dm" #include "code\__DEFINES\access.dm" #include "code\__DEFINES\admin.dm" +#include "code\__DEFINES\antagonists.dm" #include "code\__DEFINES\atmospherics.dm" #include "code\__DEFINES\atom_hud.dm" #include "code\__DEFINES\callbacks.dm" @@ -62,6 +59,7 @@ #include "code\__DEFINES\mobs.dm" #include "code\__DEFINES\monkeys.dm" #include "code\__DEFINES\networks.dm" +#include "code\__DEFINES\obj_flags.dm" #include "code\__DEFINES\pinpointers.dm" #include "code\__DEFINES\pipe_construction.dm" #include "code\__DEFINES\preferences.dm" @@ -86,6 +84,7 @@ #include "code\__DEFINES\tgui.dm" #include "code\__DEFINES\time.dm" #include "code\__DEFINES\tools.dm" +#include "code\__DEFINES\traits.dm" #include "code\__DEFINES\turf_flags.dm" #include "code\__DEFINES\typeids.dm" #include "code\__DEFINES\voreconstants.dm" @@ -101,6 +100,7 @@ #include "code\__HELPERS\files.dm" #include "code\__HELPERS\game.dm" #include "code\__HELPERS\global_lists.dm" +#include "code\__HELPERS\heap.dm" #include "code\__HELPERS\icon_smoothing.dm" #include "code\__HELPERS\icons.dm" #include "code\__HELPERS\level_traits.dm" @@ -290,6 +290,7 @@ #include "code\controllers\subsystem\processing\projectiles.dm" #include "code\datums\action.dm" #include "code\datums\ai_laws.dm" +#include "code\datums\armor.dm" #include "code\datums\beam.dm" #include "code\datums\browser.dm" #include "code\datums\callback.dm" @@ -300,6 +301,7 @@ #include "code\datums\datumvars.dm" #include "code\datums\dna.dm" #include "code\datums\dog_fashion.dm" +#include "code\datums\embedding_behavior.dm" #include "code\datums\emotes.dm" #include "code\datums\explosion.dm" #include "code\datums\forced_movement.dm" @@ -327,22 +329,6 @@ #include "code\datums\actions\beam_rifle.dm" #include "code\datums\actions\flightsuit.dm" #include "code\datums\actions\ninja.dm" -#include "code\datums\antagonists\abductor.dm" -#include "code\datums\antagonists\antag_datum.dm" -#include "code\datums\antagonists\blob.dm" -#include "code\datums\antagonists\brother.dm" -#include "code\datums\antagonists\changeling.dm" -#include "code\datums\antagonists\clockcult.dm" -#include "code\datums\antagonists\cult.dm" -#include "code\datums\antagonists\datum_traitor.dm" -#include "code\datums\antagonists\devil.dm" -#include "code\datums\antagonists\internal_affairs.dm" -#include "code\datums\antagonists\monkey.dm" -#include "code\datums\antagonists\ninja.dm" -#include "code\datums\antagonists\nukeop.dm" -#include "code\datums\antagonists\pirate.dm" -#include "code\datums\antagonists\revolution.dm" -#include "code\datums\antagonists\wizard.dm" #include "code\datums\brain_damage\brain_trauma.dm" #include "code\datums\brain_damage\imaginary_friend.dm" #include "code\datums\brain_damage\mild.dm" @@ -501,169 +487,30 @@ #include "code\game\area\areas\ruins\lavaland.dm" #include "code\game\area\areas\ruins\space.dm" #include "code\game\area\areas\ruins\templates.dm" -#include "code\game\gamemodes\antag_hud.dm" -#include "code\game\gamemodes\antag_spawner.dm" -#include "code\game\gamemodes\antag_spawner_cit.dm" -#include "code\game\gamemodes\antag_team.dm" -#include "code\game\gamemodes\cit_objectives.dm" #include "code\game\gamemodes\events.dm" #include "code\game\gamemodes\game_mode.dm" #include "code\game\gamemodes\objective.dm" #include "code\game\gamemodes\objective_items.dm" -#include "code\game\gamemodes\blob\blob_report.dm" -#include "code\game\gamemodes\blob\overmind.dm" -#include "code\game\gamemodes\blob\powers.dm" -#include "code\game\gamemodes\blob\theblob.dm" -#include "code\game\gamemodes\blob\blobs\blob_mobs.dm" -#include "code\game\gamemodes\blob\blobs\core.dm" -#include "code\game\gamemodes\blob\blobs\factory.dm" -#include "code\game\gamemodes\blob\blobs\node.dm" -#include "code\game\gamemodes\blob\blobs\resource.dm" -#include "code\game\gamemodes\blob\blobs\shield.dm" #include "code\game\gamemodes\brother\traitor_bro.dm" -#include "code\game\gamemodes\changeling\cellular_emporium.dm" #include "code\game\gamemodes\changeling\changeling.dm" -#include "code\game\gamemodes\changeling\changeling_power.dm" #include "code\game\gamemodes\changeling\traitor_chan.dm" -#include "code\game\gamemodes\changeling\powers\absorb.dm" -#include "code\game\gamemodes\changeling\powers\adrenaline.dm" -#include "code\game\gamemodes\changeling\powers\augmented_eyesight.dm" -#include "code\game\gamemodes\changeling\powers\biodegrade.dm" -#include "code\game\gamemodes\changeling\powers\chameleon_skin.dm" -#include "code\game\gamemodes\changeling\powers\digitalcamo.dm" -#include "code\game\gamemodes\changeling\powers\fakedeath.dm" -#include "code\game\gamemodes\changeling\powers\fleshmend.dm" -#include "code\game\gamemodes\changeling\powers\headcrab.dm" -#include "code\game\gamemodes\changeling\powers\hivemind.dm" -#include "code\game\gamemodes\changeling\powers\humanform.dm" -#include "code\game\gamemodes\changeling\powers\lesserform.dm" -#include "code\game\gamemodes\changeling\powers\linglink.dm" -#include "code\game\gamemodes\changeling\powers\mimic_voice.dm" -#include "code\game\gamemodes\changeling\powers\mutations.dm" -#include "code\game\gamemodes\changeling\powers\panacea.dm" -#include "code\game\gamemodes\changeling\powers\regenerate.dm" -#include "code\game\gamemodes\changeling\powers\revive.dm" -#include "code\game\gamemodes\changeling\powers\shriek.dm" -#include "code\game\gamemodes\changeling\powers\spiders.dm" -#include "code\game\gamemodes\changeling\powers\strained_muscles.dm" -#include "code\game\gamemodes\changeling\powers\tiny_prick.dm" -#include "code\game\gamemodes\changeling\powers\transform.dm" #include "code\game\gamemodes\clock_cult\clock_cult.dm" -#include "code\game\gamemodes\clock_cult\clock_effect.dm" -#include "code\game\gamemodes\clock_cult\clock_item.dm" -#include "code\game\gamemodes\clock_cult\clock_mobs.dm" -#include "code\game\gamemodes\clock_cult\clock_scripture.dm" -#include "code\game\gamemodes\clock_cult\clock_structure.dm" -#include "code\game\gamemodes\clock_cult\clock_effects\city_of_cogs_rift.dm" -#include "code\game\gamemodes\clock_cult\clock_effects\clock_overlay.dm" -#include "code\game\gamemodes\clock_cult\clock_effects\clock_sigils.dm" -#include "code\game\gamemodes\clock_cult\clock_effects\general_markers.dm" -#include "code\game\gamemodes\clock_cult\clock_effects\servant_blocker.dm" -#include "code\game\gamemodes\clock_cult\clock_effects\spatial_gateway.dm" -#include "code\game\gamemodes\clock_cult\clock_helpers\clock_powerdrain.dm" -#include "code\game\gamemodes\clock_cult\clock_helpers\component_helpers.dm" -#include "code\game\gamemodes\clock_cult\clock_helpers\fabrication_helpers.dm" -#include "code\game\gamemodes\clock_cult\clock_helpers\hierophant_network.dm" -#include "code\game\gamemodes\clock_cult\clock_helpers\power_helpers.dm" -#include "code\game\gamemodes\clock_cult\clock_helpers\ratvarian_language.dm" -#include "code\game\gamemodes\clock_cult\clock_helpers\scripture_checks.dm" -#include "code\game\gamemodes\clock_cult\clock_helpers\slab_abilities.dm" -#include "code\game\gamemodes\clock_cult\clock_items\clock_components.dm" -#include "code\game\gamemodes\clock_cult\clock_items\clockwork_armor.dm" -#include "code\game\gamemodes\clock_cult\clock_items\clockwork_slab.dm" -#include "code\game\gamemodes\clock_cult\clock_items\clockwork_weaponry.dm" -#include "code\game\gamemodes\clock_cult\clock_items\construct_chassis.dm" -#include "code\game\gamemodes\clock_cult\clock_items\integration_cog.dm" -#include "code\game\gamemodes\clock_cult\clock_items\judicial_visor.dm" -#include "code\game\gamemodes\clock_cult\clock_items\replica_fabricator.dm" -#include "code\game\gamemodes\clock_cult\clock_items\soul_vessel.dm" -#include "code\game\gamemodes\clock_cult\clock_items\wraith_spectacles.dm" -#include "code\game\gamemodes\clock_cult\clock_items\clock_weapons\_call_weapon.dm" -#include "code\game\gamemodes\clock_cult\clock_items\clock_weapons\ratvarian_spear.dm" -#include "code\game\gamemodes\clock_cult\clock_mobs\_eminence.dm" -#include "code\game\gamemodes\clock_cult\clock_mobs\clockwork_marauder.dm" -#include "code\game\gamemodes\clock_cult\clock_scriptures\scripture_applications.dm" -#include "code\game\gamemodes\clock_cult\clock_scriptures\scripture_cyborg.dm" -#include "code\game\gamemodes\clock_cult\clock_scriptures\scripture_drivers.dm" -#include "code\game\gamemodes\clock_cult\clock_scriptures\scripture_scripts.dm" -#include "code\game\gamemodes\clock_cult\clock_structures\_trap_object.dm" -#include "code\game\gamemodes\clock_cult\clock_structures\ark_of_the_clockwork_justicar.dm" -#include "code\game\gamemodes\clock_cult\clock_structures\clockwork_obelisk.dm" -#include "code\game\gamemodes\clock_cult\clock_structures\eminence_spire.dm" -#include "code\game\gamemodes\clock_cult\clock_structures\heralds_beacon.dm" -#include "code\game\gamemodes\clock_cult\clock_structures\mania_motor.dm" -#include "code\game\gamemodes\clock_cult\clock_structures\ocular_warden.dm" -#include "code\game\gamemodes\clock_cult\clock_structures\ratvar_the_clockwork_justicar.dm" -#include "code\game\gamemodes\clock_cult\clock_structures\stargazer.dm" -#include "code\game\gamemodes\clock_cult\clock_structures\taunting_trail.dm" -#include "code\game\gamemodes\clock_cult\clock_structures\wall_gear.dm" -#include "code\game\gamemodes\clock_cult\clock_structures\trap_triggers\lever.dm" -#include "code\game\gamemodes\clock_cult\clock_structures\trap_triggers\pressure_sensor.dm" -#include "code\game\gamemodes\clock_cult\clock_structures\trap_triggers\repeater.dm" -#include "code\game\gamemodes\clock_cult\clock_structures\traps\brass_skewer.dm" -#include "code\game\gamemodes\clock_cult\clock_structures\traps\steam_vent.dm" #include "code\game\gamemodes\cult\cult.dm" -#include "code\game\gamemodes\cult\cult_comms.dm" -#include "code\game\gamemodes\cult\cult_items.dm" -#include "code\game\gamemodes\cult\cult_structures.dm" -#include "code\game\gamemodes\cult\ritual.dm" -#include "code\game\gamemodes\cult\rune_spawn_action.dm" -#include "code\game\gamemodes\cult\runes.dm" -#include "code\game\gamemodes\cult\supply.dm" -#include "code\game\gamemodes\cult\talisman.dm" -#include "code\game\gamemodes\devil\devil.dm" #include "code\game\gamemodes\devil\devil_game_mode.dm" #include "code\game\gamemodes\devil\game_mode.dm" #include "code\game\gamemodes\devil\objectives.dm" #include "code\game\gamemodes\devil\devil agent\devil_agent.dm" -#include "code\game\gamemodes\devil\imp\imp.dm" -#include "code\game\gamemodes\devil\true_devil\_true_devil.dm" -#include "code\game\gamemodes\devil\true_devil\inventory.dm" #include "code\game\gamemodes\extended\extended.dm" -#include "code\game\gamemodes\malfunction\Malf_Modules.dm" #include "code\game\gamemodes\meteor\meteor.dm" #include "code\game\gamemodes\meteor\meteors.dm" -#include "code\game\gamemodes\miniantags\abduction\abductee_objectives.dm" -#include "code\game\gamemodes\miniantags\abduction\abduction.dm" -#include "code\game\gamemodes\miniantags\abduction\abduction_gear.dm" -#include "code\game\gamemodes\miniantags\abduction\abduction_outfits.dm" -#include "code\game\gamemodes\miniantags\abduction\abduction_surgery.dm" -#include "code\game\gamemodes\miniantags\abduction\gland.dm" -#include "code\game\gamemodes\miniantags\abduction\machinery\camera.dm" -#include "code\game\gamemodes\miniantags\abduction\machinery\console.dm" -#include "code\game\gamemodes\miniantags\abduction\machinery\dispenser.dm" -#include "code\game\gamemodes\miniantags\abduction\machinery\experiment.dm" -#include "code\game\gamemodes\miniantags\abduction\machinery\pad.dm" -#include "code\game\gamemodes\miniantags\borer\borer.dm" -#include "code\game\gamemodes\miniantags\borer\borer_chemicals.dm" -#include "code\game\gamemodes\miniantags\borer\borer_event.dm" -#include "code\game\gamemodes\miniantags\borer\borer_html.dm" -#include "code\game\gamemodes\miniantags\borer\borer_topic.dm" -#include "code\game\gamemodes\miniantags\borer\syndi_borer.dm" -#include "code\game\gamemodes\miniantags\bot_swarm\swarmer.dm" -#include "code\game\gamemodes\miniantags\bot_swarm\swarmer_event.dm" -#include "code\game\gamemodes\miniantags\monkey\monkey.dm" -#include "code\game\gamemodes\miniantags\morph\morph.dm" -#include "code\game\gamemodes\miniantags\revenant\revenant.dm" -#include "code\game\gamemodes\miniantags\revenant\revenant_abilities.dm" -#include "code\game\gamemodes\miniantags\revenant\revenant_blight.dm" -#include "code\game\gamemodes\miniantags\revenant\revenant_spawn_event.dm" -#include "code\game\gamemodes\miniantags\sintouched\objectives.dm" -#include "code\game\gamemodes\miniantags\slaughter\slaughter.dm" -#include "code\game\gamemodes\miniantags\slaughter\slaughterevent.dm" +#include "code\game\gamemodes\monkey\monkey.dm" #include "code\game\gamemodes\nuclear\nuclear.dm" -#include "code\game\gamemodes\nuclear\nuclear_challenge.dm" -#include "code\game\gamemodes\nuclear\nuclearbomb.dm" -#include "code\game\gamemodes\nuclear\pinpointer.dm" #include "code\game\gamemodes\revolution\revolution.dm" #include "code\game\gamemodes\sandbox\airlock_maker.dm" #include "code\game\gamemodes\sandbox\h_sandbox.dm" #include "code\game\gamemodes\sandbox\sandbox.dm" #include "code\game\gamemodes\traitor\double_agents.dm" #include "code\game\gamemodes\traitor\traitor.dm" -#include "code\game\gamemodes\wizard\artefact.dm" -#include "code\game\gamemodes\wizard\soulstone.dm" -#include "code\game\gamemodes\wizard\spellbook.dm" #include "code\game\gamemodes\wizard\wizard.dm" #include "code\game\machinery\_machinery.dm" #include "code\game\machinery\ai_slipper.dm" @@ -1066,6 +913,7 @@ #include "code\game\objects\structures\girders.dm" #include "code\game\objects\structures\grille.dm" #include "code\game\objects\structures\guncase.dm" +#include "code\game\objects\structures\headpike.dm" #include "code\game\objects\structures\hivebot.dm" #include "code\game\objects\structures\holosign.dm" #include "code\game\objects\structures\janicart.dm" @@ -1086,7 +934,6 @@ #include "code\game\objects\structures\reflector.dm" #include "code\game\objects\structures\safe.dm" #include "code\game\objects\structures\showcase.dm" -#include "code\game\objects\structures\signs.dm" #include "code\game\objects\structures\spirit_board.dm" #include "code\game\objects\structures\statues.dm" #include "code\game\objects\structures\table_frames.dm" @@ -1129,6 +976,11 @@ #include "code\game\objects\structures\crates_lockers\crates\large.dm" #include "code\game\objects\structures\crates_lockers\crates\secure.dm" #include "code\game\objects\structures\crates_lockers\crates\wooden.dm" +#include "code\game\objects\structures\signs\_signs.dm" +#include "code\game\objects\structures\signs\signs_departments.dm" +#include "code\game\objects\structures\signs\signs_maps.dm" +#include "code\game\objects\structures\signs\signs_plaques.dm" +#include "code\game\objects\structures\signs\signs_warning.dm" #include "code\game\objects\structures\transit_tubes\station.dm" #include "code\game\objects\structures\transit_tubes\transit_tube.dm" #include "code\game\objects\structures\transit_tubes\transit_tube_construction.dm" @@ -1223,6 +1075,153 @@ #include "code\modules\admin\verbs\SDQL2\SDQL_2.dm" #include "code\modules\admin\verbs\SDQL2\SDQL_2_parser.dm" #include "code\modules\admin\verbs\SDQL2\SDQL_2_wrappers.dm" +#include "code\modules\antagonists\_common\antag_datum.dm" +#include "code\modules\antagonists\_common\antag_helpers.dm" +#include "code\modules\antagonists\_common\antag_hud.dm" +#include "code\modules\antagonists\_common\antag_spawner.dm" +#include "code\modules\antagonists\_common\antag_team.dm" +#include "code\modules\antagonists\abductor\abductor.dm" +#include "code\modules\antagonists\abductor\abductee\abductee_objectives.dm" +#include "code\modules\antagonists\abductor\equipment\abduction_gear.dm" +#include "code\modules\antagonists\abductor\equipment\abduction_outfits.dm" +#include "code\modules\antagonists\abductor\equipment\abduction_surgery.dm" +#include "code\modules\antagonists\abductor\equipment\gland.dm" +#include "code\modules\antagonists\abductor\machinery\camera.dm" +#include "code\modules\antagonists\abductor\machinery\console.dm" +#include "code\modules\antagonists\abductor\machinery\dispenser.dm" +#include "code\modules\antagonists\abductor\machinery\experiment.dm" +#include "code\modules\antagonists\abductor\machinery\pad.dm" +#include "code\modules\antagonists\blob\blob.dm" +#include "code\modules\antagonists\blob\blob\blob_report.dm" +#include "code\modules\antagonists\blob\blob\overmind.dm" +#include "code\modules\antagonists\blob\blob\powers.dm" +#include "code\modules\antagonists\blob\blob\theblob.dm" +#include "code\modules\antagonists\blob\blob\blobs\blob_mobs.dm" +#include "code\modules\antagonists\blob\blob\blobs\core.dm" +#include "code\modules\antagonists\blob\blob\blobs\factory.dm" +#include "code\modules\antagonists\blob\blob\blobs\node.dm" +#include "code\modules\antagonists\blob\blob\blobs\resource.dm" +#include "code\modules\antagonists\blob\blob\blobs\shield.dm" +#include "code\modules\antagonists\brother\brother.dm" +#include "code\modules\antagonists\changeling\cellular_emporium.dm" +#include "code\modules\antagonists\changeling\changeling.dm" +#include "code\modules\antagonists\changeling\changeling_power.dm" +#include "code\modules\antagonists\changeling\powers\absorb.dm" +#include "code\modules\antagonists\changeling\powers\adrenaline.dm" +#include "code\modules\antagonists\changeling\powers\augmented_eyesight.dm" +#include "code\modules\antagonists\changeling\powers\biodegrade.dm" +#include "code\modules\antagonists\changeling\powers\chameleon_skin.dm" +#include "code\modules\antagonists\changeling\powers\digitalcamo.dm" +#include "code\modules\antagonists\changeling\powers\fakedeath.dm" +#include "code\modules\antagonists\changeling\powers\fleshmend.dm" +#include "code\modules\antagonists\changeling\powers\headcrab.dm" +#include "code\modules\antagonists\changeling\powers\hivemind.dm" +#include "code\modules\antagonists\changeling\powers\humanform.dm" +#include "code\modules\antagonists\changeling\powers\lesserform.dm" +#include "code\modules\antagonists\changeling\powers\linglink.dm" +#include "code\modules\antagonists\changeling\powers\mimic_voice.dm" +#include "code\modules\antagonists\changeling\powers\mutations.dm" +#include "code\modules\antagonists\changeling\powers\panacea.dm" +#include "code\modules\antagonists\changeling\powers\regenerate.dm" +#include "code\modules\antagonists\changeling\powers\revive.dm" +#include "code\modules\antagonists\changeling\powers\shriek.dm" +#include "code\modules\antagonists\changeling\powers\spiders.dm" +#include "code\modules\antagonists\changeling\powers\strained_muscles.dm" +#include "code\modules\antagonists\changeling\powers\tiny_prick.dm" +#include "code\modules\antagonists\changeling\powers\transform.dm" +#include "code\modules\antagonists\clockcult\clock_effect.dm" +#include "code\modules\antagonists\clockcult\clock_item.dm" +#include "code\modules\antagonists\clockcult\clock_mobs.dm" +#include "code\modules\antagonists\clockcult\clock_scripture.dm" +#include "code\modules\antagonists\clockcult\clock_structure.dm" +#include "code\modules\antagonists\clockcult\clockcult.dm" +#include "code\modules\antagonists\clockcult\clock_effects\city_of_cogs_rift.dm" +#include "code\modules\antagonists\clockcult\clock_effects\clock_overlay.dm" +#include "code\modules\antagonists\clockcult\clock_effects\clock_sigils.dm" +#include "code\modules\antagonists\clockcult\clock_effects\general_markers.dm" +#include "code\modules\antagonists\clockcult\clock_effects\servant_blocker.dm" +#include "code\modules\antagonists\clockcult\clock_effects\spatial_gateway.dm" +#include "code\modules\antagonists\clockcult\clock_helpers\clock_powerdrain.dm" +#include "code\modules\antagonists\clockcult\clock_helpers\component_helpers.dm" +#include "code\modules\antagonists\clockcult\clock_helpers\fabrication_helpers.dm" +#include "code\modules\antagonists\clockcult\clock_helpers\hierophant_network.dm" +#include "code\modules\antagonists\clockcult\clock_helpers\power_helpers.dm" +#include "code\modules\antagonists\clockcult\clock_helpers\ratvarian_language.dm" +#include "code\modules\antagonists\clockcult\clock_helpers\scripture_checks.dm" +#include "code\modules\antagonists\clockcult\clock_helpers\slab_abilities.dm" +#include "code\modules\antagonists\clockcult\clock_items\clock_components.dm" +#include "code\modules\antagonists\clockcult\clock_items\clockwork_armor.dm" +#include "code\modules\antagonists\clockcult\clock_items\clockwork_slab.dm" +#include "code\modules\antagonists\clockcult\clock_items\clockwork_weaponry.dm" +#include "code\modules\antagonists\clockcult\clock_items\construct_chassis.dm" +#include "code\modules\antagonists\clockcult\clock_items\integration_cog.dm" +#include "code\modules\antagonists\clockcult\clock_items\judicial_visor.dm" +#include "code\modules\antagonists\clockcult\clock_items\replica_fabricator.dm" +#include "code\modules\antagonists\clockcult\clock_items\soul_vessel.dm" +#include "code\modules\antagonists\clockcult\clock_items\wraith_spectacles.dm" +#include "code\modules\antagonists\clockcult\clock_items\clock_weapons\_call_weapon.dm" +#include "code\modules\antagonists\clockcult\clock_items\clock_weapons\ratvarian_spear.dm" +#include "code\modules\antagonists\clockcult\clock_mobs\_eminence.dm" +#include "code\modules\antagonists\clockcult\clock_mobs\clockwork_marauder.dm" +#include "code\modules\antagonists\clockcult\clock_scriptures\scripture_applications.dm" +#include "code\modules\antagonists\clockcult\clock_scriptures\scripture_cyborg.dm" +#include "code\modules\antagonists\clockcult\clock_scriptures\scripture_drivers.dm" +#include "code\modules\antagonists\clockcult\clock_scriptures\scripture_scripts.dm" +#include "code\modules\antagonists\clockcult\clock_structures\_trap_object.dm" +#include "code\modules\antagonists\clockcult\clock_structures\ark_of_the_clockwork_justicar.dm" +#include "code\modules\antagonists\clockcult\clock_structures\clockwork_obelisk.dm" +#include "code\modules\antagonists\clockcult\clock_structures\eminence_spire.dm" +#include "code\modules\antagonists\clockcult\clock_structures\heralds_beacon.dm" +#include "code\modules\antagonists\clockcult\clock_structures\mania_motor.dm" +#include "code\modules\antagonists\clockcult\clock_structures\ocular_warden.dm" +#include "code\modules\antagonists\clockcult\clock_structures\ratvar_the_clockwork_justicar.dm" +#include "code\modules\antagonists\clockcult\clock_structures\stargazer.dm" +#include "code\modules\antagonists\clockcult\clock_structures\taunting_trail.dm" +#include "code\modules\antagonists\clockcult\clock_structures\wall_gear.dm" +#include "code\modules\antagonists\clockcult\clock_structures\trap_triggers\lever.dm" +#include "code\modules\antagonists\clockcult\clock_structures\trap_triggers\pressure_sensor.dm" +#include "code\modules\antagonists\clockcult\clock_structures\trap_triggers\repeater.dm" +#include "code\modules\antagonists\clockcult\clock_structures\traps\brass_skewer.dm" +#include "code\modules\antagonists\clockcult\clock_structures\traps\steam_vent.dm" +#include "code\modules\antagonists\cult\cult.dm" +#include "code\modules\antagonists\cult\cult_comms.dm" +#include "code\modules\antagonists\cult\cult_items.dm" +#include "code\modules\antagonists\cult\cult_structures.dm" +#include "code\modules\antagonists\cult\ritual.dm" +#include "code\modules\antagonists\cult\rune_spawn_action.dm" +#include "code\modules\antagonists\cult\runes.dm" +#include "code\modules\antagonists\cult\supply.dm" +#include "code\modules\antagonists\cult\talisman.dm" +#include "code\modules\antagonists\devil\devil.dm" +#include "code\modules\antagonists\devil\devil_helpers.dm" +#include "code\modules\antagonists\devil\imp\imp.dm" +#include "code\modules\antagonists\devil\sintouched\objectives.dm" +#include "code\modules\antagonists\devil\true_devil\_true_devil.dm" +#include "code\modules\antagonists\devil\true_devil\inventory.dm" +#include "code\modules\antagonists\monkey\monkey.dm" +#include "code\modules\antagonists\morph\morph.dm" +#include "code\modules\antagonists\ninja\ninja.dm" +#include "code\modules\antagonists\nukeop\nukeop.dm" +#include "code\modules\antagonists\nukeop\equipment\nuclear_challenge.dm" +#include "code\modules\antagonists\nukeop\equipment\nuclearbomb.dm" +#include "code\modules\antagonists\nukeop\equipment\pinpointer.dm" +#include "code\modules\antagonists\pirate\pirate.dm" +#include "code\modules\antagonists\revenant\revenant.dm" +#include "code\modules\antagonists\revenant\revenant_abilities.dm" +#include "code\modules\antagonists\revenant\revenant_blight.dm" +#include "code\modules\antagonists\revenant\revenant_spawn_event.dm" +#include "code\modules\antagonists\revolution\revolution.dm" +#include "code\modules\antagonists\slaughter\slaughter.dm" +#include "code\modules\antagonists\slaughter\slaughterevent.dm" +#include "code\modules\antagonists\swarmer\swarmer.dm" +#include "code\modules\antagonists\swarmer\swarmer_event.dm" +#include "code\modules\antagonists\traitor\datum_traitor.dm" +#include "code\modules\antagonists\traitor\equipment\Malf_Modules.dm" +#include "code\modules\antagonists\traitor\IAA\internal_affairs.dm" +#include "code\modules\antagonists\wizard\wizard.dm" +#include "code\modules\antagonists\wizard\equipment\artefact.dm" +#include "code\modules\antagonists\wizard\equipment\soulstone.dm" +#include "code\modules\antagonists\wizard\equipment\spellbook.dm" #include "code\modules\assembly\assembly.dm" #include "code\modules\assembly\bomb.dm" #include "code\modules\assembly\doorcontrol.dm" @@ -1860,6 +1859,7 @@ #include "code\modules\mob\living\carbon\human\species_types\humans.dm" #include "code\modules\mob\living\carbon\human\species_types\jellypeople.dm" #include "code\modules\mob\living\carbon\human\species_types\lizardpeople.dm" +#include "code\modules\mob\living\carbon\human\species_types\mothmen.dm" #include "code\modules\mob\living\carbon\human\species_types\plasmamen.dm" #include "code\modules\mob\living\carbon\human\species_types\podpeople.dm" #include "code\modules\mob\living\carbon\human\species_types\shadowpeople.dm" @@ -1949,6 +1949,7 @@ #include "code\modules\mob\living\simple_animal\friendly\penguin.dm" #include "code\modules\mob\living\simple_animal\friendly\pet.dm" #include "code\modules\mob\living\simple_animal\friendly\sloth.dm" +#include "code\modules\mob\living\simple_animal\friendly\snake.dm" #include "code\modules\mob\living\simple_animal\friendly\drone\_drone.dm" #include "code\modules\mob\living\simple_animal\friendly\drone\drones_as_items.dm" #include "code\modules\mob\living\simple_animal\friendly\drone\extra_drone_types.dm" @@ -2454,6 +2455,7 @@ #include "code\modules\tgui\states\self.dm" #include "code\modules\tgui\states\zlevel.dm" #include "code\modules\tooltip\tooltip.dm" +#include "code\modules\unit_tests\_unit_tests.dm" #include "code\modules\uplink\uplink.dm" #include "code\modules\uplink\uplink_devices.dm" #include "code\modules\uplink\uplink_items.dm" @@ -2498,6 +2500,7 @@ #include "modular_citadel\code\__HELPERS\lists.dm" #include "modular_citadel\code\__HELPERS\mobs.dm" #include "modular_citadel\code\controllers\subsystem\job.dm" +#include "modular_citadel\code\controllers\subsystem\shuttle.dm" #include "modular_citadel\code\datums\uplink_items_cit.dm" #include "modular_citadel\code\datums\mutations\hulk.dm" #include "modular_citadel\code\game\gamemodes\miniantags\bot_swarm\swarmer_event.dm" @@ -2526,5 +2529,6 @@ #include "modular_citadel\code\modules\mining\mine_items.dm" #include "modular_citadel\code\modules\mob\living\banana_spider.dm" #include "modular_citadel\code\modules\mob\living\carbon\human\human_defense.dm" +#include "modular_citadel\code\modules\mob\living\carbon\human\life.dm" #include "modular_citadel\code\modules\mob\living\silicon\robot\robot_modules.dm" // END_INCLUDE diff --git a/tgui/assets/tgui.css b/tgui/assets/tgui.css index ffe61666b9..c73fc2adfa 100644 --- a/tgui/assets/tgui.css +++ b/tgui/assets/tgui.css @@ -1 +1 @@ -@charset "utf-8";body,html{box-sizing:border-box;height:100%;margin:0}html{overflow:hidden;cursor:default}body{overflow:auto;font-family:Verdana,Geneva,sans-serif;font-size:12px;color:#fff;background-color:#2a2a2a;background-image:linear-gradient(180deg,#2a2a2a 0,#202020);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#ff2a2a2a",endColorstr="#ff202020",GradientType=0)}*,:after,:before{box-sizing:inherit}h1,h2,h3,h4{display:inline-block;margin:0;padding:6px 0}h1{font-size:18px}h2{font-size:16px}h3{font-size:14px}h4{font-size:12px}body.clockwork{background:linear-gradient(180deg,#b18b25 0,#5f380e);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#ffb18b25",endColorstr="#ff5f380e",GradientType=0)}body.clockwork .normal{color:#b18b25}body.clockwork .good{color:#cfba47}body.clockwork .average{color:#896b19}body.clockwork .bad{color:#5f380e}body.clockwork .highlight{color:#b18b25}body.clockwork main{display:block;margin-top:32px;padding:2px 6px 0}body.clockwork hr{height:2px;background-color:#b18b25;border:none}body.clockwork .hidden{display:none}body.clockwork .bar .barText,body.clockwork span.button{color:#b18b25;font-size:12px;font-weight:400;font-style:normal;text-decoration:none}body.clockwork .bold{font-weight:700}body.clockwork .italic{font-style:italic}body.clockwork [unselectable=on]{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}body.clockwork div[data-tooltip],body.clockwork span[data-tooltip]{position:relative}body.clockwork div[data-tooltip]:after,body.clockwork span[data-tooltip]:after{position:absolute;display:block;z-index:2;width:250px;padding:10px;-ms-transform:translateX(-50%);transform:translateX(-50%);visibility:hidden;opacity:0;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";white-space:normal;text-align:left;content:attr(data-tooltip);transition:all .5s;border:1px solid #170800;background-color:#2d1400}body.clockwork div[data-tooltip]:hover:after,body.clockwork span[data-tooltip]:hover:after{visibility:visible;opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"}body.clockwork div[data-tooltip].tooltip-top:after,body.clockwork span[data-tooltip].tooltip-top:after{bottom:100%;left:50%;-ms-transform:translateX(-50%) translateY(8px);transform:translateX(-50%) translateY(8px)}body.clockwork div[data-tooltip].tooltip-top:hover:after,body.clockwork span[data-tooltip].tooltip-top:hover:after{-ms-transform:translateX(-50%) translateY(-8px);transform:translateX(-50%) translateY(-8px)}body.clockwork div[data-tooltip].tooltip-bottom:after,body.clockwork span[data-tooltip].tooltip-bottom:after{top:100%;left:50%;-ms-transform:translateX(-50%) translateY(-8px);transform:translateX(-50%) translateY(-8px)}body.clockwork div[data-tooltip].tooltip-bottom:hover:after,body.clockwork span[data-tooltip].tooltip-bottom:hover:after{-ms-transform:translateX(-50%) translateY(8px);transform:translateX(-50%) translateY(8px)}body.clockwork div[data-tooltip].tooltip-left:after,body.clockwork span[data-tooltip].tooltip-left:after{top:50%;right:100%;-ms-transform:translateX(8px) translateY(-50%);transform:translateX(8px) translateY(-50%)}body.clockwork div[data-tooltip].tooltip-left:hover:after,body.clockwork span[data-tooltip].tooltip-left:hover:after{-ms-transform:translateX(-8px) translateY(-50%);transform:translateX(-8px) translateY(-50%)}body.clockwork div[data-tooltip].tooltip-right:after,body.clockwork span[data-tooltip].tooltip-right:after{top:50%;left:100%;-ms-transform:translateX(-8px) translateY(-50%);transform:translateX(-8px) translateY(-50%)}body.clockwork div[data-tooltip].tooltip-right:hover:after,body.clockwork span[data-tooltip].tooltip-right:hover:after{-ms-transform:translateX(8px) translateY(-50%);transform:translateX(8px) translateY(-50%)}body.clockwork .bar{display:inline-block;position:relative;vertical-align:middle;width:100%;height:20px;line-height:17px;padding:1px;border:1px solid #170800;background:#2d1400}body.clockwork .bar .barText{position:absolute;top:0;right:3px}body.clockwork .bar .barFill{display:block;height:100%;transition:background-color 1s;background-color:#b18b25}body.clockwork .bar .barFill.good{background-color:#cfba47}body.clockwork .bar .barFill.average{background-color:#896b19}body.clockwork .bar .barFill.bad{background-color:#5f380e}body.clockwork span.button{display:inline-block;vertical-align:middle;min-height:20px;line-height:17px;padding:0 5px;white-space:nowrap;border:1px solid #170800}body.clockwork span.button .fa{padding-right:2px}body.clockwork span.button.normal{transition:background-color .5s;background-color:#5f380e}body.clockwork span.button.normal.active:focus,body.clockwork span.button.normal.active:hover{transition:background-color .25s;background-color:#704211;outline:0}body.clockwork span.button.disabled{transition:background-color .5s;background-color:#2d1400}body.clockwork span.button.disabled.active:focus,body.clockwork span.button.disabled.active:hover{transition:background-color .25s;background-color:#441e00;outline:0}body.clockwork span.button.selected{transition:background-color .5s;background-color:#cfba47}body.clockwork span.button.selected.active:focus,body.clockwork span.button.selected.active:hover{transition:background-color .25s;background-color:#d1bd50;outline:0}body.clockwork span.button.toggle{transition:background-color .5s;background-color:#cfba47}body.clockwork span.button.toggle.active:focus,body.clockwork span.button.toggle.active:hover{transition:background-color .25s;background-color:#d1bd50;outline:0}body.clockwork span.button.caution{transition:background-color .5s;background-color:#be6209}body.clockwork span.button.caution.active:focus,body.clockwork span.button.caution.active:hover{transition:background-color .25s;background-color:#cd6a0a;outline:0}body.clockwork span.button.danger{transition:background-color .5s;background-color:#9a9d00}body.clockwork span.button.danger.active:focus,body.clockwork span.button.danger.active:hover{transition:background-color .25s;background-color:#abaf00;outline:0}body.clockwork span.button.gridable{width:125px;margin:2px 0}body.clockwork span.button.gridable.center{text-align:center;width:75px}body.clockwork span.button+span:not(.button),body.clockwork span:not(.button)+span.button{margin-left:5px}body.clockwork div.display{width:100%;padding:4px;margin:6px 0;background-color:#2d1400;-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorStr=#e62d1400,endColorStr=#e62d1400)";filter:progid:DXImageTransform.Microsoft.gradient(startColorStr=#e62d1400,endColorStr=#e62d1400);background-color:rgba(45,20,0,.9);box-shadow:inset 0 0 5px rgba(0,0,0,.3)}body.clockwork div.display.tabular{padding:0;margin:0}body.clockwork div.display header,body.clockwork div.subdisplay header{display:block;position:relative;width:100%;padding:0 4px;margin-bottom:6px;color:#cfba47;border-bottom:2px solid #b18b25}body.clockwork div.display header .buttonRight,body.clockwork div.subdisplay header .buttonRight{position:absolute;bottom:6px;right:4px}body.clockwork div.display article,body.clockwork div.subdisplay article{display:table;width:100%;border-collapse:collapse}body.clockwork input{display:inline-block;vertical-align:middle;height:20px;line-height:17px;padding:0 5px;white-space:nowrap;color:#b18b25;background-color:#cfba47;border:1px solid #272727}body.clockwork input.number{width:35px}body.clockwork input::-webkit-input-placeholder{color:#999}body.clockwork input:-ms-input-placeholder{color:#999}body.clockwork input::placeholder{color:#999}body.clockwork input::-ms-clear{display:none}body.clockwork svg.linegraph{overflow:hidden}body.clockwork div.notice{margin:8px 0;padding:4px;box-shadow:none;color:#2d1400;font-weight:700;font-style:italic;background-color:#000;background-image:repeating-linear-gradient(-45deg,#000,#000 10px,#170800 0,#170800 20px)}body.clockwork div.notice .label{color:#2d1400}body.clockwork div.notice .content:only-of-type{padding:0}body.clockwork div.notice hr{background-color:#896b19}body.clockwork div.resize{position:fixed;bottom:0;right:0;width:0;height:0;border-style:solid;border-width:0 0 45px 45px;border-color:transparent transparent #5f380e;-ms-transform:rotate(1turn);transform:rotate(1turn)}body.clockwork section .cell,body.clockwork section .content,body.clockwork section .label,body.clockwork section .line,body.nanotrasen section .cell,body.nanotrasen section .content,body.nanotrasen section .label,body.nanotrasen section .line,body.syndicate section .cell,body.syndicate section .content,body.syndicate section .label,body.syndicate section .line{display:table-cell;margin:0;text-align:left;vertical-align:middle;padding:3px 2px}body.clockwork section{display:table-row;width:100%}body.clockwork section:not(:first-child){padding-top:4px}body.clockwork section.candystripe:nth-child(2n){background-color:#000;-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorStr=#33000000,endColorStr=#33000000)";filter:progid:DXImageTransform.Microsoft.gradient(startColorStr=#33000000,endColorStr=#33000000);background-color:rgba(0,0,0,.2)}body.clockwork section .label{width:1%;padding-right:32px;white-space:nowrap;color:#b18b25}body.clockwork section .content:not(:last-child){padding-right:16px}body.clockwork section .line{width:100%}body.clockwork section .cell:not(:first-child){text-align:center;padding-top:0}body.clockwork section .cell span.button{width:75px}body.clockwork section:not(:last-child){padding-right:4px}body.clockwork div.subdisplay{width:100%;margin:0}body.clockwork header.titlebar .close,body.clockwork header.titlebar .minimize{display:inline-block;position:relative;padding:7px;margin:-7px;color:#cfba47}body.clockwork header.titlebar .close:hover,body.clockwork header.titlebar .minimize:hover{color:#d1bd50}body.clockwork header.titlebar{position:fixed;z-index:1;top:0;left:0;width:100%;height:32px;background-color:#5f380e;border-bottom:1px solid #170800;box-shadow:0 3px 3px rgba(0,0,0,.1)}body.clockwork header.titlebar .statusicon{position:absolute;top:4px;left:12px;transition:color .5s}body.clockwork header.titlebar .title{position:absolute;top:6px;left:46px;color:#cfba47;font-size:16px;white-space:nowrap}body.clockwork header.titlebar .minimize{position:absolute;top:6px;right:46px}body.clockwork header.titlebar .close{position:absolute;top:4px;right:12px}body.nanotrasen{background:url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+DQo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmVyc2lvbj0iMS4wIiB2aWV3Qm94PSIwIDAgNDI1IDIwMCIgb3BhY2l0eT0iLjMzIj4NCiAgPHBhdGggZD0ibSAxNzguMDAzOTksMC4wMzg2OSAtNzEuMjAzOTMsMCBhIDYuNzYxMzQyMiw2LjAyNTU0OTUgMCAwIDAgLTYuNzYxMzQsNi4wMjU1NSBsIDAsMTg3Ljg3MTQ3IGEgNi43NjEzNDIyLDYuMDI1NTQ5NSAwIDAgMCA2Ljc2MTM0LDYuMDI1NTQgbCA1My4xMDcyLDAgYSA2Ljc2MTM0MjIsNi4wMjU1NDk1IDAgMCAwIDYuNzYxMzUsLTYuMDI1NTQgbCAwLC0xMDEuNTQ0MDE4IDcyLjIxNjI4LDEwNC42OTkzOTggYSA2Ljc2MTM0MjIsNi4wMjU1NDk1IDAgMCAwIDUuNzYwMTUsMi44NzAxNiBsIDczLjU1NDg3LDAgYSA2Ljc2MTM0MjIsNi4wMjU1NDk1IDAgMCAwIDYuNzYxMzUsLTYuMDI1NTQgbCAwLC0xODcuODcxNDcgYSA2Ljc2MTM0MjIsNi4wMjU1NDk1IDAgMCAwIC02Ljc2MTM1LC02LjAyNTU1IGwgLTU0LjcxNjQ0LDAgYSA2Ljc2MTM0MjIsNi4wMjU1NDk1IDAgMCAwIC02Ljc2MTMzLDYuMDI1NTUgbCAwLDEwMi42MTkzNSBMIDE4My43NjQxMywyLjkwODg2IGEgNi43NjEzNDIyLDYuMDI1NTQ5NSAwIDAgMCAtNS43NjAxNCwtMi44NzAxNyB6IiAvPg0KICA8cGF0aCBkPSJNIDQuODQ0NjMzMywyMi4xMDg3NSBBIDEzLjQxMjAzOSwxMi41MDE4NDIgMCAwIDEgMTMuNDc3NTg4LDAuMDM5MjQgbCA2Ni4xMTgzMTUsMCBhIDUuMzY0ODE1OCw1LjAwMDczNyAwIDAgMSA1LjM2NDgyMyw1LjAwMDczIGwgMCw3OS44NzkzMSB6IiAvPg0KICA8cGF0aCBkPSJtIDQyMC4xNTUzNSwxNzcuODkxMTkgYSAxMy40MTIwMzgsMTIuNTAxODQyIDAgMCAxIC04LjYzMjk1LDIyLjA2OTUxIGwgLTY2LjExODMyLDAgYSA1LjM2NDgxNTIsNS4wMDA3MzcgMCAwIDEgLTUuMzY0ODIsLTUuMDAwNzQgbCAwLC03OS44NzkzMSB6IiAvPg0KPC9zdmc+DQo8IS0tIFRoaXMgd29yayBpcyBsaWNlbnNlZCB1bmRlciBhIENyZWF0aXZlIENvbW1vbnMgQXR0cmlidXRpb24tU2hhcmVBbGlrZSA0LjAgSW50ZXJuYXRpb25hbCBMaWNlbnNlLiAtLT4NCjwhLS0gaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbGljZW5zZXMvYnktc2EvNC4wLyAtLT4NCg==") no-repeat fixed 50%/70% 70%,linear-gradient(180deg,#2a2a2a 0,#202020);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#ff2a2a2a",endColorstr="#ff202020",GradientType=0)}body.nanotrasen .normal{color:#40628a}body.nanotrasen .good{color:#537d29}body.nanotrasen .average{color:#be6209}body.nanotrasen .bad{color:#b00e0e}body.nanotrasen .highlight{color:#8ba5c4}body.nanotrasen main{display:block;margin-top:32px;padding:2px 6px 0}body.nanotrasen hr{height:2px;background-color:#40628a;border:none}body.nanotrasen .hidden{display:none}body.nanotrasen .bar .barText,body.nanotrasen span.button{color:#fff;font-size:12px;font-weight:400;font-style:normal;text-decoration:none}body.nanotrasen .bold{font-weight:700}body.nanotrasen .italic{font-style:italic}body.nanotrasen [unselectable=on]{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}body.nanotrasen div[data-tooltip],body.nanotrasen span[data-tooltip]{position:relative}body.nanotrasen div[data-tooltip]:after,body.nanotrasen span[data-tooltip]:after{position:absolute;display:block;z-index:2;width:250px;padding:10px;-ms-transform:translateX(-50%);transform:translateX(-50%);visibility:hidden;opacity:0;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";white-space:normal;text-align:left;content:attr(data-tooltip);transition:all .5s;border:1px solid #272727;background-color:#363636}body.nanotrasen div[data-tooltip]:hover:after,body.nanotrasen span[data-tooltip]:hover:after{visibility:visible;opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"}body.nanotrasen div[data-tooltip].tooltip-top:after,body.nanotrasen span[data-tooltip].tooltip-top:after{bottom:100%;left:50%;-ms-transform:translateX(-50%) translateY(8px);transform:translateX(-50%) translateY(8px)}body.nanotrasen div[data-tooltip].tooltip-top:hover:after,body.nanotrasen span[data-tooltip].tooltip-top:hover:after{-ms-transform:translateX(-50%) translateY(-8px);transform:translateX(-50%) translateY(-8px)}body.nanotrasen div[data-tooltip].tooltip-bottom:after,body.nanotrasen span[data-tooltip].tooltip-bottom:after{top:100%;left:50%;-ms-transform:translateX(-50%) translateY(-8px);transform:translateX(-50%) translateY(-8px)}body.nanotrasen div[data-tooltip].tooltip-bottom:hover:after,body.nanotrasen span[data-tooltip].tooltip-bottom:hover:after{-ms-transform:translateX(-50%) translateY(8px);transform:translateX(-50%) translateY(8px)}body.nanotrasen div[data-tooltip].tooltip-left:after,body.nanotrasen span[data-tooltip].tooltip-left:after{top:50%;right:100%;-ms-transform:translateX(8px) translateY(-50%);transform:translateX(8px) translateY(-50%)}body.nanotrasen div[data-tooltip].tooltip-left:hover:after,body.nanotrasen span[data-tooltip].tooltip-left:hover:after{-ms-transform:translateX(-8px) translateY(-50%);transform:translateX(-8px) translateY(-50%)}body.nanotrasen div[data-tooltip].tooltip-right:after,body.nanotrasen span[data-tooltip].tooltip-right:after{top:50%;left:100%;-ms-transform:translateX(-8px) translateY(-50%);transform:translateX(-8px) translateY(-50%)}body.nanotrasen div[data-tooltip].tooltip-right:hover:after,body.nanotrasen span[data-tooltip].tooltip-right:hover:after{-ms-transform:translateX(8px) translateY(-50%);transform:translateX(8px) translateY(-50%)}body.nanotrasen .bar{display:inline-block;position:relative;vertical-align:middle;width:100%;height:20px;line-height:17px;padding:1px;border:1px solid #40628a;background:#272727}body.nanotrasen .bar .barText{position:absolute;top:0;right:3px}body.nanotrasen .bar .barFill{display:block;height:100%;transition:background-color 1s;background-color:#40628a}body.nanotrasen .bar .barFill.good{background-color:#537d29}body.nanotrasen .bar .barFill.average{background-color:#be6209}body.nanotrasen .bar .barFill.bad{background-color:#b00e0e}body.nanotrasen span.button{display:inline-block;vertical-align:middle;min-height:20px;line-height:17px;padding:0 5px;white-space:nowrap;border:1px solid #272727}body.nanotrasen span.button .fa{padding-right:2px}body.nanotrasen span.button.normal{transition:background-color .5s;background-color:#40628a}body.nanotrasen span.button.normal.active:focus,body.nanotrasen span.button.normal.active:hover{transition:background-color .25s;background-color:#4f78aa;outline:0}body.nanotrasen span.button.disabled{transition:background-color .5s;background-color:#999}body.nanotrasen span.button.disabled.active:focus,body.nanotrasen span.button.disabled.active:hover{transition:background-color .25s;background-color:#a8a8a8;outline:0}body.nanotrasen span.button.selected{transition:background-color .5s;background-color:#2f943c}body.nanotrasen span.button.selected.active:focus,body.nanotrasen span.button.selected.active:hover{transition:background-color .25s;background-color:#3ab84b;outline:0}body.nanotrasen span.button.toggle{transition:background-color .5s;background-color:#2f943c}body.nanotrasen span.button.toggle.active:focus,body.nanotrasen span.button.toggle.active:hover{transition:background-color .25s;background-color:#3ab84b;outline:0}body.nanotrasen span.button.caution{transition:background-color .5s;background-color:#9a9d00}body.nanotrasen span.button.caution.active:focus,body.nanotrasen span.button.caution.active:hover{transition:background-color .25s;background-color:#ced200;outline:0}body.nanotrasen span.button.danger{transition:background-color .5s;background-color:#9d0808}body.nanotrasen span.button.danger.active:focus,body.nanotrasen span.button.danger.active:hover{transition:background-color .25s;background-color:#ce0b0b;outline:0}body.nanotrasen span.button.gridable{width:125px;margin:2px 0}body.nanotrasen span.button.gridable.center{text-align:center;width:75px}body.nanotrasen span.button+span:not(.button),body.nanotrasen span:not(.button)+span.button{margin-left:5px}body.nanotrasen div.display{width:100%;padding:4px;margin:6px 0;background-color:#000;-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorStr=#54000000,endColorStr=#54000000)";filter:progid:DXImageTransform.Microsoft.gradient(startColorStr=#54000000,endColorStr=#54000000);background-color:rgba(0,0,0,.33);box-shadow:inset 0 0 5px rgba(0,0,0,.5)}body.nanotrasen div.display.tabular{padding:0;margin:0}body.nanotrasen div.display header,body.nanotrasen div.subdisplay header{display:block;position:relative;width:100%;padding:0 4px;margin-bottom:6px;color:#fff;border-bottom:2px solid #40628a}body.nanotrasen div.display header .buttonRight,body.nanotrasen div.subdisplay header .buttonRight{position:absolute;bottom:6px;right:4px}body.nanotrasen div.display article,body.nanotrasen div.subdisplay article{display:table;width:100%;border-collapse:collapse}body.nanotrasen input{display:inline-block;vertical-align:middle;height:20px;line-height:17px;padding:0 5px;white-space:nowrap;color:#000;background-color:#fff;border:1px solid #272727}body.nanotrasen input.number{width:35px}body.nanotrasen input::-webkit-input-placeholder{color:#999}body.nanotrasen input:-ms-input-placeholder{color:#999}body.nanotrasen input::placeholder{color:#999}body.nanotrasen input::-ms-clear{display:none}body.nanotrasen svg.linegraph{overflow:hidden}body.nanotrasen div.notice{margin:8px 0;padding:4px;box-shadow:none;color:#000;font-weight:700;font-style:italic;background-color:#bb9b68;background-image:repeating-linear-gradient(-45deg,#bb9b68,#bb9b68 10px,#b1905d 0,#b1905d 20px)}body.nanotrasen div.notice .label{color:#000}body.nanotrasen div.notice .content:only-of-type{padding:0}body.nanotrasen div.notice hr{background-color:#272727}body.nanotrasen div.resize{position:fixed;bottom:0;right:0;width:0;height:0;border-style:solid;border-width:0 0 45px 45px;border-color:transparent transparent #363636;-ms-transform:rotate(1turn);transform:rotate(1turn)}body.nanotrasen section .cell,body.nanotrasen section .content,body.nanotrasen section .label,body.nanotrasen section .line,body.syndicate section .cell,body.syndicate section .content,body.syndicate section .label,body.syndicate section .line{display:table-cell;margin:0;text-align:left;vertical-align:middle;padding:3px 2px}body.nanotrasen section{display:table-row;width:100%}body.nanotrasen section:not(:first-child){padding-top:4px}body.nanotrasen section.candystripe:nth-child(2n){background-color:#000;-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorStr=#33000000,endColorStr=#33000000)";filter:progid:DXImageTransform.Microsoft.gradient(startColorStr=#33000000,endColorStr=#33000000);background-color:rgba(0,0,0,.2)}body.nanotrasen section .label{width:1%;padding-right:32px;white-space:nowrap;color:#8ba5c4}body.nanotrasen section .content:not(:last-child){padding-right:16px}body.nanotrasen section .line{width:100%}body.nanotrasen section .cell:not(:first-child){text-align:center;padding-top:0}body.nanotrasen section .cell span.button{width:75px}body.nanotrasen section:not(:last-child){padding-right:4px}body.nanotrasen div.subdisplay{width:100%;margin:0}body.nanotrasen header.titlebar .close,body.nanotrasen header.titlebar .minimize{display:inline-block;position:relative;padding:7px;margin:-7px;color:#8ba5c4}body.nanotrasen header.titlebar .close:hover,body.nanotrasen header.titlebar .minimize:hover{color:#9cb2cd}body.nanotrasen header.titlebar{position:fixed;z-index:1;top:0;left:0;width:100%;height:32px;background-color:#363636;border-bottom:1px solid #161616;box-shadow:0 3px 3px rgba(0,0,0,.1)}body.nanotrasen header.titlebar .statusicon{position:absolute;top:4px;left:12px;transition:color .5s}body.nanotrasen header.titlebar .title{position:absolute;top:6px;left:46px;color:#8ba5c4;font-size:16px;white-space:nowrap}body.nanotrasen header.titlebar .minimize{position:absolute;top:6px;right:46px}body.nanotrasen header.titlebar .close{position:absolute;top:4px;right:12px}body.syndicate{background:url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+DQo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmVyc2lvbj0iMS4wIiB2aWV3Qm94PSIwIDAgMjAwIDI4OS43NDIiIG9wYWNpdHk9Ii4zMyI+DQogIDxwYXRoIGQ9Im0gOTMuNTM3Njc3LDAgYyAtMTguMTEzMTI1LDAgLTM0LjIyMDEzMywzLjExMTY0IC00OC4zMjM0ODQsOS4zMzQzNyAtMTMuOTY1MDkyLDYuMjIxNjcgLTI0LjYxMjQ0MiwxNS4wNzExNCAtMzEuOTQwNjUxLDI2LjU0NzEgLTcuMTg5OTM5OCwxMS4zMzc4OSAtMTAuMzAxMjI2NiwyNC43NDkxMSAtMTAuMzAxMjI2Niw0MC4yMzQ3OCAwLDEwLjY0NjYyIDIuNzI1MDAyNiwyMC40NjQ2NSA4LjE3NTExMTYsMjkuNDUyNTggNS42MTUyNzcsOC45ODY4NiAxNC4wMzgyNzcsMTcuMzUyMDQgMjUuMjY4ODIxLDI1LjA5NDM2IDExLjIzMDU0NCw3LjYwNTMxIDI2LjUwNzQyMSwxNS40MTgzNSA0NS44MzA1MTQsMjMuNDM3ODIgMTkuOTgzNzQ4LDguMjk1NTcgMzQuODQ4ODQ4LDE1LjU1NDcxIDQ0LjU5Mjk5OCwyMS43NzYzOCA5Ljc0NDE0LDYuMjIyNzMgMTYuNzYxNywxMi44NTg1IDIxLjA1NTcyLDE5LjkwOTUxIDQuMjk0MDQsNy4wNTIwOCA2LjQ0MTkzLDE1Ljc2NDA4IDYuNDQxOTMsMjYuMTM0NTkgMCwxNi4xNzcwMiAtNS4yMDE5NiwyOC40ODIyMiAtMTUuNjA2NzMsMzYuOTE2ODIgLTEwLjIzOTYsOC40MzQ3IC0yNS4wMjIwMywxMi42NTIzIC00NC4zNDUxNjksMTIuNjUyMyAtMTQuMDM4MTcxLDAgLTI1LjUxNTI0NywtMS42NTk0IC0zNC40MzM2MTgsLTQuOTc3NyAtOC45MTgzNywtMy40NTY2IC0xNi4xODU1NzIsLTguNzExMyAtMjEuODAwODM5LC0xNS43NjMzIC01LjYxNTI3NywtNy4wNTIxIC0xMC4wNzQ3OTUsLTE2LjY2MDg4IC0xMy4zNzc4OTksLTI4LjgyODEyIGwgLTI0Ljc3MzE2MjYyOTM5NDUsMCAwLDU2LjgyNjMyIEMgMzMuODU2NzY5LDI4Ni4wNzYwMSA2My43NDkwNCwyODkuNzQyMDEgODkuNjc4MzgzLDI4OS43NDIwMSBjIDE2LjAyMDAyNywwIDMwLjcxOTc4NywtMS4zODI3IDQ0LjA5NzMzNywtNC4xNDc5IDEzLjU0MjcyLC0yLjkwNDMgMjUuMTA0MSwtNy40Njc2IDM0LjY4MzA5LC0xMy42ODkzIDkuNzQ0MTMsLTYuMzU5NyAxNy4zNDA0MiwtMTQuNTE5NSAyMi43OTA1MiwtMjQuNDc0OCA1LjQ1MDEsLTEwLjA5MzMyIDguMTc1MTEsLTIyLjM5OTU5IDguMTc1MTEsLTM2LjkxNjgyIDAsLTEyLjk5NzY0IC0zLjMwMjEsLTI0LjMzNTM5IC05LjkwODI5LC0zNC4wMTQ2IC02LjQ0MTA1LC05LjgxNzI1IC0xNS41MjU0NSwtMTguNTI3MDcgLTI3LjI1MTQ2LC0yNi4xMzEzMyAtMTEuNTYwODUsLTcuNjA0MjcgLTI3LjkxMDgzLC0xNS44MzE0MiAtNDkuMDUwNjYsLTI0LjY4MDIyIC0xNy41MDY0NCwtNy4xOTAxMiAtMzAuNzE5NjY4LC0xMy42ODk0OCAtMzkuNjM4MDM4LC0xOS40OTcwMSAtOC45MTgzNzEsLTUuODA3NTIgLTE4LjYwNzQ3NCwtMTIuNDM0MDkgLTI0LjA5NjUyNCwtMTguODc0MTcgLTUuNDI2MDQzLC02LjM2NjE2IC05LjY1ODgyNiwtMTUuMDcwMDMgLTkuNjU4ODI2LC0yNC44ODcyOSAwLC05LjI2NDAxIDIuMDc1NDE0LC0xNy4yMTM0NSA2LjIyMzQ1NCwtMjMuODUwMzMgMTEuMDk4Mjk4LC0xNC4zOTc0OCA0MS4yODY2MzgsLTEuNzk1MDcgNDUuMDc1NjA5LDI0LjM0NzYyIDQuODM5MzkyLDYuNzc0OTEgOC44NDkzNSwxNi4yNDcyOSAxMi4wMjk1MTUsMjguNDE1NiBsIDIwLjUzMjM0LDAgMCwtNTUuOTk5NjcgYyAtNC40NzgyNSwtNS45MjQ0OCAtOS45NTQ4OCwtMTAuNjMyMjIgLTE1LjkwODM3LC0xNC4zNzQxMSAxLjY0MDU1LDAuNDc5MDUgMy4xOTAzOSwxLjAyMzc2IDQuNjM4NjUsMS42NDAyNCA2LjQ5ODYxLDIuNjI2MDcgMTIuMTY3OTMsNy4zMjc0NyAxNy4wMDczLDE0LjEwMzQ1IDQuODM5MzksNi43NzQ5MSA4Ljg0OTM1LDE2LjI0NTY3IDEyLjAyOTUyLDI4LjQxMzk3IDAsMCA4LjQ4MTI4LC0wLjEyODk0IDguNDg5NzgsLTAuMDAyIDAuNDE3NzYsNi40MTQ5NCAtMS43NTMzOSw5LjQ1Mjg2IC00LjEyMzQyLDEyLjU2MTA0IC0yLjQxNzQsMy4xNjk3OCAtNS4xNDQ4Niw2Ljc4OTczIC00LjAwMjc4LDEzLjAwMjkgMS41MDc4Niw4LjIwMzE4IDEwLjE4MzU0LDEwLjU5NjQyIDE0LjYyMTk0LDkuMzExNTQgLTMuMzE4NDIsLTAuNDk5MTEgLTUuMzE4NTUsLTEuNzQ5NDggLTUuMzE4NTUsLTEuNzQ5NDggMCwwIDEuODc2NDYsMC45OTg2OCA1LjY1MTE3LC0xLjM1OTgxIC0zLjI3Njk1LDAuOTU1NzEgLTEwLjcwNTI5LC0wLjc5NzM4IC0xMS44MDEyNSwtNi43NjMxMyAtMC45NTc1MiwtNS4yMDg2MSAwLjk0NjU0LC03LjI5NTE0IDMuNDAxMTMsLTEwLjUxNDgyIDIuNDU0NjIsLTMuMjE5NjggNS4yODQyNiwtNi45NTgzMSA0LjY4NDMsLTE0LjQ4ODI0IGwgMC4wMDMsMC4wMDIgOC45MjY3NiwwIDAsLTU1Ljk5OTY3IGMgLTE1LjA3MTI1LC0zLjg3MTY4IC0yNy42NTMxNCwtNi4zNjA0MiAtMzcuNzQ2NzEsLTcuNDY1ODYgLTkuOTU1MzEsLTEuMTA3NTUgLTIwLjE4ODIzLC0xLjY1OTgxIC0zMC42OTY2MTMsLTEuNjU5ODEgeiBtIDcwLjMyMTYwMywxNy4zMDg5MyAwLjIzODA1LDQwLjMwNDkgYyAxLjMxODA4LDEuMjI2NjYgMi40Mzk2NSwyLjI3ODE1IDMuMzQwODEsMy4xMDYwMiA0LjgzOTM5LDYuNzc0OTEgOC44NDkzNCwxNi4yNDU2NiAxMi4wMjk1MSwyOC40MTM5NyBsIDIwLjUzMjM0LDAgMCwtNTUuOTk5NjcgYyAtNi42NzczMSwtNC41OTM4MSAtMTkuODM2NDMsLTEwLjQ3MzA5IC0zNi4xNDA3MSwtMTUuODI1MjIgeiBtIC0yOC4xMjA0OSw1LjYwNTUxIDguNTY0NzksMTcuNzE2NTUgYyAtMTEuOTcwMzcsLTYuNDY2OTcgLTEzLjg0Njc4LC05LjcxNzI2IC04LjU2NDc5LC0xNy43MTY1NSB6IG0gMjIuNzk3MDUsMCBjIDIuNzcxNSw3Ljk5OTI5IDEuNzg3NDEsMTEuMjQ5NTggLTQuNDkzNTQsMTcuNzE2NTUgbCA0LjQ5MzU0LC0xNy43MTY1NSB6IG0gMTUuMjIxOTUsMjQuMDA4NDggOC41NjQ3OSwxNy43MTY1NSBjIC0xMS45NzAzOCwtNi40NjY5NyAtMTMuODQ2NzksLTkuNzE3MjYgLTguNTY0NzksLTE3LjcxNjU1IHogbSAyMi43OTcwNCwwIGMgMi43NzE1LDcuOTk5MjkgMS43ODc0MSwxMS4yNDk1OCAtNC40OTM1NCwxNy43MTY1NSBsIDQuNDkzNTQsLTE3LjcxNjU1IHogbSAtOTkuMTEzODQsMi4yMDc2NCA4LjU2NDc5LDE3LjcxNjU1IGMgLTExLjk3MDM4MiwtNi40NjY5NyAtMTMuODQ2NzgyLC05LjcxNzI2IC04LjU2NDc5LC0xNy43MTY1NSB6IG0gMjIuNzk1NDIsMCBjIDIuNzcxNSw3Ljk5OTI5IDEuNzg3NDEsMTEuMjQ5NTggLTQuNDkzNTQsMTcuNzE2NTUgbCA0LjQ5MzU0LC0xNy43MTY1NSB6IiAvPg0KPC9zdmc+DQo8IS0tIFRoaXMgd29yayBpcyBsaWNlbnNlZCB1bmRlciBhIENyZWF0aXZlIENvbW1vbnMgQXR0cmlidXRpb24tU2hhcmVBbGlrZSA0LjAgSW50ZXJuYXRpb25hbCBMaWNlbnNlLiAtLT4NCjwhLS0gaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbGljZW5zZXMvYnktc2EvNC4wLyAtLT4NCg==") no-repeat fixed 50%/70% 70%,linear-gradient(180deg,#750000 0,#340404);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#ff750000",endColorstr="#ff340404",GradientType=0)}body.syndicate .normal{color:#40628a}body.syndicate .good{color:#73e573}body.syndicate .average{color:#be6209}body.syndicate .bad{color:#b00e0e}body.syndicate .highlight{color:#000}body.syndicate main{display:block;margin-top:32px;padding:2px 6px 0}body.syndicate hr{height:2px;background-color:#272727;border:none}body.syndicate .hidden{display:none}body.syndicate .bar .barText,body.syndicate span.button{color:#fff;font-size:12px;font-weight:400;font-style:normal;text-decoration:none}body.syndicate .bold{font-weight:700}body.syndicate .italic{font-style:italic}body.syndicate [unselectable=on]{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}body.syndicate div[data-tooltip],body.syndicate span[data-tooltip]{position:relative}body.syndicate div[data-tooltip]:after,body.syndicate span[data-tooltip]:after{position:absolute;display:block;z-index:2;width:250px;padding:10px;-ms-transform:translateX(-50%);transform:translateX(-50%);visibility:hidden;opacity:0;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";white-space:normal;text-align:left;content:attr(data-tooltip);transition:all .5s;border:1px solid #272727;background-color:#363636}body.syndicate div[data-tooltip]:hover:after,body.syndicate span[data-tooltip]:hover:after{visibility:visible;opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"}body.syndicate div[data-tooltip].tooltip-top:after,body.syndicate span[data-tooltip].tooltip-top:after{bottom:100%;left:50%;-ms-transform:translateX(-50%) translateY(8px);transform:translateX(-50%) translateY(8px)}body.syndicate div[data-tooltip].tooltip-top:hover:after,body.syndicate span[data-tooltip].tooltip-top:hover:after{-ms-transform:translateX(-50%) translateY(-8px);transform:translateX(-50%) translateY(-8px)}body.syndicate div[data-tooltip].tooltip-bottom:after,body.syndicate span[data-tooltip].tooltip-bottom:after{top:100%;left:50%;-ms-transform:translateX(-50%) translateY(-8px);transform:translateX(-50%) translateY(-8px)}body.syndicate div[data-tooltip].tooltip-bottom:hover:after,body.syndicate span[data-tooltip].tooltip-bottom:hover:after{-ms-transform:translateX(-50%) translateY(8px);transform:translateX(-50%) translateY(8px)}body.syndicate div[data-tooltip].tooltip-left:after,body.syndicate span[data-tooltip].tooltip-left:after{top:50%;right:100%;-ms-transform:translateX(8px) translateY(-50%);transform:translateX(8px) translateY(-50%)}body.syndicate div[data-tooltip].tooltip-left:hover:after,body.syndicate span[data-tooltip].tooltip-left:hover:after{-ms-transform:translateX(-8px) translateY(-50%);transform:translateX(-8px) translateY(-50%)}body.syndicate div[data-tooltip].tooltip-right:after,body.syndicate span[data-tooltip].tooltip-right:after{top:50%;left:100%;-ms-transform:translateX(-8px) translateY(-50%);transform:translateX(-8px) translateY(-50%)}body.syndicate div[data-tooltip].tooltip-right:hover:after,body.syndicate span[data-tooltip].tooltip-right:hover:after{-ms-transform:translateX(8px) translateY(-50%);transform:translateX(8px) translateY(-50%)}body.syndicate .bar{display:inline-block;position:relative;vertical-align:middle;width:100%;height:20px;line-height:17px;padding:1px;border:1px solid #000;background:#272727}body.syndicate .bar .barText{position:absolute;top:0;right:3px}body.syndicate .bar .barFill{display:block;height:100%;transition:background-color 1s;background-color:#000}body.syndicate .bar .barFill.good{background-color:#73e573}body.syndicate .bar .barFill.average{background-color:#be6209}body.syndicate .bar .barFill.bad{background-color:#b00e0e}body.syndicate span.button{display:inline-block;vertical-align:middle;min-height:20px;line-height:17px;padding:0 5px;white-space:nowrap;border:1px solid #272727}body.syndicate span.button .fa{padding-right:2px}body.syndicate span.button.normal{transition:background-color .5s;background-color:#397439}body.syndicate span.button.normal.active:focus,body.syndicate span.button.normal.active:hover{transition:background-color .25s;background-color:#4a964a;outline:0}body.syndicate span.button.disabled{transition:background-color .5s;background-color:#363636}body.syndicate span.button.disabled.active:focus,body.syndicate span.button.disabled.active:hover{transition:background-color .25s;background-color:#545454;outline:0}body.syndicate span.button.selected{transition:background-color .5s;background-color:#9d0808}body.syndicate span.button.selected.active:focus,body.syndicate span.button.selected.active:hover{transition:background-color .25s;background-color:#ce0b0b;outline:0}body.syndicate span.button.toggle{transition:background-color .5s;background-color:#9d0808}body.syndicate span.button.toggle.active:focus,body.syndicate span.button.toggle.active:hover{transition:background-color .25s;background-color:#ce0b0b;outline:0}body.syndicate span.button.caution{transition:background-color .5s;background-color:#be6209}body.syndicate span.button.caution.active:focus,body.syndicate span.button.caution.active:hover{transition:background-color .25s;background-color:#eb790b;outline:0}body.syndicate span.button.danger{transition:background-color .5s;background-color:#9a9d00}body.syndicate span.button.danger.active:focus,body.syndicate span.button.danger.active:hover{transition:background-color .25s;background-color:#ced200;outline:0}body.syndicate span.button.gridable{width:125px;margin:2px 0}body.syndicate span.button.gridable.center{text-align:center;width:75px}body.syndicate span.button+span:not(.button),body.syndicate span:not(.button)+span.button{margin-left:5px}body.syndicate div.display{width:100%;padding:4px;margin:6px 0;background-color:#000;-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorStr=#80000000,endColorStr=#80000000)";filter:progid:DXImageTransform.Microsoft.gradient(startColorStr=#80000000,endColorStr=#80000000);background-color:rgba(0,0,0,.5);box-shadow:inset 0 0 5px rgba(0,0,0,.75)}body.syndicate div.display.tabular{padding:0;margin:0}body.syndicate div.display header,body.syndicate div.subdisplay header{display:block;position:relative;width:100%;padding:0 4px;margin-bottom:6px;color:#fff;border-bottom:2px solid #272727}body.syndicate div.display header .buttonRight,body.syndicate div.subdisplay header .buttonRight{position:absolute;bottom:6px;right:4px}body.syndicate div.display article,body.syndicate div.subdisplay article{display:table;width:100%;border-collapse:collapse}body.syndicate input{display:inline-block;vertical-align:middle;height:20px;line-height:17px;padding:0 5px;white-space:nowrap;color:#fff;background-color:#9d0808;border:1px solid #272727}body.syndicate input.number{width:35px}body.syndicate input::-webkit-input-placeholder{color:#999}body.syndicate input:-ms-input-placeholder{color:#999}body.syndicate input::placeholder{color:#999}body.syndicate input::-ms-clear{display:none}body.syndicate svg.linegraph{overflow:hidden}body.syndicate div.notice{margin:8px 0;padding:4px;box-shadow:none;color:#000;font-weight:700;font-style:italic;background-color:#750000;background-image:repeating-linear-gradient(-45deg,#750000,#750000 10px,#910101 0,#910101 20px)}body.syndicate div.notice .label{color:#000}body.syndicate div.notice .content:only-of-type{padding:0}body.syndicate div.notice hr{background-color:#272727}body.syndicate div.resize{position:fixed;bottom:0;right:0;width:0;height:0;border-style:solid;border-width:0 0 45px 45px;border-color:transparent transparent #363636;-ms-transform:rotate(1turn);transform:rotate(1turn)}body.syndicate section .cell,body.syndicate section .content,body.syndicate section .label,body.syndicate section .line{display:table-cell;margin:0;text-align:left;vertical-align:middle;padding:3px 2px}body.syndicate section{display:table-row;width:100%}body.syndicate section:not(:first-child){padding-top:4px}body.syndicate section.candystripe:nth-child(2n){background-color:#000;-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorStr=#33000000,endColorStr=#33000000)";filter:progid:DXImageTransform.Microsoft.gradient(startColorStr=#33000000,endColorStr=#33000000);background-color:rgba(0,0,0,.2)}body.syndicate section .label{width:1%;padding-right:32px;white-space:nowrap;color:#fff}body.syndicate section .content:not(:last-child){padding-right:16px}body.syndicate section .line{width:100%}body.syndicate section .cell:not(:first-child){text-align:center;padding-top:0}body.syndicate section .cell span.button{width:75px}body.syndicate section:not(:last-child){padding-right:4px}body.syndicate div.subdisplay{width:100%;margin:0}body.syndicate header.titlebar .close,body.syndicate header.titlebar .minimize{display:inline-block;position:relative;padding:7px;margin:-7px;color:#e74242}body.syndicate header.titlebar .close:hover,body.syndicate header.titlebar .minimize:hover{color:#eb5e5e}body.syndicate header.titlebar{position:fixed;z-index:1;top:0;left:0;width:100%;height:32px;background-color:#363636;border-bottom:1px solid #161616;box-shadow:0 3px 3px rgba(0,0,0,.1)}body.syndicate header.titlebar .statusicon{position:absolute;top:4px;left:12px;transition:color .5s}body.syndicate header.titlebar .title{position:absolute;top:6px;left:46px;color:#e74242;font-size:16px;white-space:nowrap}body.syndicate header.titlebar .minimize{position:absolute;top:6px;right:46px}body.syndicate header.titlebar .close{position:absolute;top:4px;right:12px}.no-icons header.titlebar .statusicon{font-size:20px}.no-icons header.titlebar .statusicon:after{content:"O"}.no-icons header.titlebar .minimize{top:-2px;font-size:20px}.no-icons header.titlebar .minimize:after{content:"—"}.no-icons header.titlebar .close{font-size:20px}.no-icons header.titlebar .close:after{content:"X"} \ No newline at end of file +@charset "utf-8";body,html{box-sizing:border-box;height:100%;margin:0}html{overflow:hidden;cursor:default}body{overflow:auto;font-family:Verdana,Geneva,sans-serif;font-size:12px;color:#fff;background-color:#2a2a2a;background-image:linear-gradient(180deg,#2a2a2a 0,#202020);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#ff2a2a2a",endColorstr="#ff202020",GradientType=0)}*,:after,:before{box-sizing:inherit}h1,h2,h3,h4{display:inline-block;margin:0;padding:6px 0}h1{font-size:18px}h2{font-size:16px}h3{font-size:14px}h4{font-size:12px}body.clockwork{background:linear-gradient(180deg,#b18b25 0,#5f380e);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#ffb18b25",endColorstr="#ff5f380e",GradientType=0)}body.clockwork .normal{color:#b18b25}body.clockwork .good{color:#cfba47}body.clockwork .average{color:#896b19}body.clockwork .bad{color:#5f380e}body.clockwork .highlight{color:#b18b25}body.clockwork main{display:block;margin-top:32px;padding:2px 6px 0}body.clockwork hr{height:2px;background-color:#b18b25;border:none}body.clockwork .hidden{display:none}body.clockwork .bar .barText,body.clockwork span.button{color:#b18b25;font-size:12px;font-weight:400;font-style:normal;text-decoration:none}body.clockwork .bold{font-weight:700}body.clockwork .italic{font-style:italic}body.clockwork [unselectable=on]{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}body.clockwork div[data-tooltip],body.clockwork span[data-tooltip]{position:relative}body.clockwork div[data-tooltip]:after,body.clockwork span[data-tooltip]:after{position:absolute;display:block;z-index:2;width:250px;padding:10px;-ms-transform:translateX(-50%);transform:translateX(-50%);visibility:hidden;opacity:0;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";white-space:normal;text-align:left;content:attr(data-tooltip);transition:all .5s;border:1px solid #170800;background-color:#2d1400}body.clockwork div[data-tooltip]:hover:after,body.clockwork span[data-tooltip]:hover:after{visibility:visible;opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"}body.clockwork div[data-tooltip].tooltip-top:after,body.clockwork span[data-tooltip].tooltip-top:after{bottom:100%;left:50%;-ms-transform:translateX(-50%) translateY(8px);transform:translateX(-50%) translateY(8px)}body.clockwork div[data-tooltip].tooltip-top:hover:after,body.clockwork span[data-tooltip].tooltip-top:hover:after{-ms-transform:translateX(-50%) translateY(-8px);transform:translateX(-50%) translateY(-8px)}body.clockwork div[data-tooltip].tooltip-bottom:after,body.clockwork span[data-tooltip].tooltip-bottom:after{top:100%;left:50%;-ms-transform:translateX(-50%) translateY(-8px);transform:translateX(-50%) translateY(-8px)}body.clockwork div[data-tooltip].tooltip-bottom:hover:after,body.clockwork span[data-tooltip].tooltip-bottom:hover:after{-ms-transform:translateX(-50%) translateY(8px);transform:translateX(-50%) translateY(8px)}body.clockwork div[data-tooltip].tooltip-left:after,body.clockwork span[data-tooltip].tooltip-left:after{top:50%;right:100%;-ms-transform:translateX(8px) translateY(-50%);transform:translateX(8px) translateY(-50%)}body.clockwork div[data-tooltip].tooltip-left:hover:after,body.clockwork span[data-tooltip].tooltip-left:hover:after{-ms-transform:translateX(-8px) translateY(-50%);transform:translateX(-8px) translateY(-50%)}body.clockwork div[data-tooltip].tooltip-right:after,body.clockwork span[data-tooltip].tooltip-right:after{top:50%;left:100%;-ms-transform:translateX(-8px) translateY(-50%);transform:translateX(-8px) translateY(-50%)}body.clockwork div[data-tooltip].tooltip-right:hover:after,body.clockwork span[data-tooltip].tooltip-right:hover:after{-ms-transform:translateX(8px) translateY(-50%);transform:translateX(8px) translateY(-50%)}body.clockwork .bar{display:inline-block;position:relative;vertical-align:middle;width:100%;height:20px;line-height:17px;padding:1px;border:1px solid #170800;background:#2d1400}body.clockwork .bar .barText{position:absolute;top:0;right:3px}body.clockwork .bar .barFill{display:block;height:100%;transition:background-color 1s;background-color:#b18b25}body.clockwork .bar .barFill.good{background-color:#cfba47}body.clockwork .bar .barFill.average{background-color:#896b19}body.clockwork .bar .barFill.bad{background-color:#5f380e}body.clockwork span.button{display:inline-block;vertical-align:middle;min-height:20px;line-height:17px;padding:0 5px;white-space:nowrap;border:1px solid #170800}body.clockwork span.button .fa{padding-right:2px}body.clockwork span.button.normal{transition:background-color .5s;background-color:#5f380e}body.clockwork span.button.normal.active:focus,body.clockwork span.button.normal.active:hover{transition:background-color .25s;background-color:#704211;outline:0}body.clockwork span.button.disabled{transition:background-color .5s;background-color:#2d1400}body.clockwork span.button.disabled.active:focus,body.clockwork span.button.disabled.active:hover{transition:background-color .25s;background-color:#441e00;outline:0}body.clockwork span.button.selected{transition:background-color .5s;background-color:#cfba47}body.clockwork span.button.selected.active:focus,body.clockwork span.button.selected.active:hover{transition:background-color .25s;background-color:#d1bd50;outline:0}body.clockwork span.button.toggle{transition:background-color .5s;background-color:#cfba47}body.clockwork span.button.toggle.active:focus,body.clockwork span.button.toggle.active:hover{transition:background-color .25s;background-color:#d1bd50;outline:0}body.clockwork span.button.caution{transition:background-color .5s;background-color:#be6209}body.clockwork span.button.caution.active:focus,body.clockwork span.button.caution.active:hover{transition:background-color .25s;background-color:#cd6a0a;outline:0}body.clockwork span.button.danger{transition:background-color .5s;background-color:#9a9d00}body.clockwork span.button.danger.active:focus,body.clockwork span.button.danger.active:hover{transition:background-color .25s;background-color:#abaf00;outline:0}body.clockwork span.button.gridable{width:125px;margin:2px 0}body.clockwork span.button.gridable.center{text-align:center;width:75px}body.clockwork span.button+span:not(.button),body.clockwork span:not(.button)+span.button{margin-left:5px}body.clockwork div.display{width:100%;padding:4px;margin:6px 0;background-color:#2d1400;-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorStr=#e62d1400,endColorStr=#e62d1400)";filter:progid:DXImageTransform.Microsoft.gradient(startColorStr=#e62d1400,endColorStr=#e62d1400);background-color:rgba(45,20,0,.9);box-shadow:inset 0 0 5px rgba(0,0,0,.3)}body.clockwork div.display.tabular{padding:0;margin:0}body.clockwork div.display header,body.clockwork div.subdisplay header{display:block;position:relative;width:100%;padding:0 4px;margin-bottom:6px;color:#cfba47;border-bottom:2px solid #b18b25}body.clockwork div.display header .buttonRight,body.clockwork div.subdisplay header .buttonRight{position:absolute;bottom:6px;right:4px}body.clockwork div.display article,body.clockwork div.subdisplay article{display:table;width:100%;border-collapse:collapse}body.clockwork input{display:inline-block;vertical-align:middle;height:20px;line-height:17px;padding:0 5px;white-space:nowrap;color:#b18b25;background-color:#cfba47;border:1px solid #272727}body.clockwork input.number{width:35px}body.clockwork input:-ms-input-placeholder{color:#999}body.clockwork input::placeholder{color:#999}body.clockwork input::-ms-clear{display:none}body.clockwork svg.linegraph{overflow:hidden}body.clockwork div.notice{margin:8px 0;padding:4px;box-shadow:none;color:#2d1400;font-weight:700;font-style:italic;background-color:#000;background-image:repeating-linear-gradient(-45deg,#000,#000 10px,#170800 0,#170800 20px)}body.clockwork div.notice .label{color:#2d1400}body.clockwork div.notice .content:only-of-type{padding:0}body.clockwork div.notice hr{background-color:#896b19}body.clockwork div.resize{position:fixed;bottom:0;right:0;width:0;height:0;border-style:solid;border-width:0 0 45px 45px;border-color:transparent transparent #5f380e;-ms-transform:rotate(1turn);transform:rotate(1turn)}body.clockwork section .cell,body.clockwork section .content,body.clockwork section .label,body.clockwork section .line,body.nanotrasen section .cell,body.nanotrasen section .content,body.nanotrasen section .label,body.nanotrasen section .line,body.syndicate section .cell,body.syndicate section .content,body.syndicate section .label,body.syndicate section .line{display:table-cell;margin:0;text-align:left;vertical-align:middle;padding:3px 2px}body.clockwork section{display:table-row;width:100%}body.clockwork section:not(:first-child){padding-top:4px}body.clockwork section.candystripe:nth-child(2n){background-color:#000;-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorStr=#33000000,endColorStr=#33000000)";filter:progid:DXImageTransform.Microsoft.gradient(startColorStr=#33000000,endColorStr=#33000000);background-color:rgba(0,0,0,.2)}body.clockwork section .label{width:1%;padding-right:32px;white-space:nowrap;color:#b18b25}body.clockwork section .content:not(:last-child){padding-right:16px}body.clockwork section .line{width:100%}body.clockwork section .cell:not(:first-child){text-align:center;padding-top:0}body.clockwork section .cell span.button{width:75px}body.clockwork section:not(:last-child){padding-right:4px}body.clockwork div.subdisplay{width:100%;margin:0}body.clockwork header.titlebar .close,body.clockwork header.titlebar .minimize{display:inline-block;position:relative;padding:7px;margin:-7px;color:#cfba47}body.clockwork header.titlebar .close:hover,body.clockwork header.titlebar .minimize:hover{color:#d1bd50}body.clockwork header.titlebar{position:fixed;z-index:1;top:0;left:0;width:100%;height:32px;background-color:#5f380e;border-bottom:1px solid #170800;box-shadow:0 3px 3px rgba(0,0,0,.1)}body.clockwork header.titlebar .statusicon{position:absolute;top:4px;left:12px;transition:color .5s}body.clockwork header.titlebar .title{position:absolute;top:6px;left:46px;color:#cfba47;font-size:16px;white-space:nowrap}body.clockwork header.titlebar .minimize{position:absolute;top:6px;right:46px}body.clockwork header.titlebar .close{position:absolute;top:4px;right:12px}body.nanotrasen{background:url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjAiIHZpZXdCb3g9IjAgMCA0MjUgMjAwIiBvcGFjaXR5PSIuMzMiPgogIDxwYXRoIGQ9Im0gMTc4LjAwMzk5LDAuMDM4NjkgLTcxLjIwMzkzLDAgYSA2Ljc2MTM0MjIsNi4wMjU1NDk1IDAgMCAwIC02Ljc2MTM0LDYuMDI1NTUgbCAwLDE4Ny44NzE0NyBhIDYuNzYxMzQyMiw2LjAyNTU0OTUgMCAwIDAgNi43NjEzNCw2LjAyNTU0IGwgNTMuMTA3MiwwIGEgNi43NjEzNDIyLDYuMDI1NTQ5NSAwIDAgMCA2Ljc2MTM1LC02LjAyNTU0IGwgMCwtMTAxLjU0NDAxOCA3Mi4yMTYyOCwxMDQuNjk5Mzk4IGEgNi43NjEzNDIyLDYuMDI1NTQ5NSAwIDAgMCA1Ljc2MDE1LDIuODcwMTYgbCA3My41NTQ4NywwIGEgNi43NjEzNDIyLDYuMDI1NTQ5NSAwIDAgMCA2Ljc2MTM1LC02LjAyNTU0IGwgMCwtMTg3Ljg3MTQ3IGEgNi43NjEzNDIyLDYuMDI1NTQ5NSAwIDAgMCAtNi43NjEzNSwtNi4wMjU1NSBsIC01NC43MTY0NCwwIGEgNi43NjEzNDIyLDYuMDI1NTQ5NSAwIDAgMCAtNi43NjEzMyw2LjAyNTU1IGwgMCwxMDIuNjE5MzUgTCAxODMuNzY0MTMsMi45MDg4NiBhIDYuNzYxMzQyMiw2LjAyNTU0OTUgMCAwIDAgLTUuNzYwMTQsLTIuODcwMTcgeiIgLz4KICA8cGF0aCBkPSJNIDQuODQ0NjMzMywyMi4xMDg3NSBBIDEzLjQxMjAzOSwxMi41MDE4NDIgMCAwIDEgMTMuNDc3NTg4LDAuMDM5MjQgbCA2Ni4xMTgzMTUsMCBhIDUuMzY0ODE1OCw1LjAwMDczNyAwIDAgMSA1LjM2NDgyMyw1LjAwMDczIGwgMCw3OS44NzkzMSB6IiAvPgogIDxwYXRoIGQ9Im0gNDIwLjE1NTM1LDE3Ny44OTExOSBhIDEzLjQxMjAzOCwxMi41MDE4NDIgMCAwIDEgLTguNjMyOTUsMjIuMDY5NTEgbCAtNjYuMTE4MzIsMCBhIDUuMzY0ODE1Miw1LjAwMDczNyAwIDAgMSAtNS4zNjQ4MiwtNS4wMDA3NCBsIDAsLTc5Ljg3OTMxIHoiIC8+Cjwvc3ZnPgo8IS0tIFRoaXMgd29yayBpcyBsaWNlbnNlZCB1bmRlciBhIENyZWF0aXZlIENvbW1vbnMgQXR0cmlidXRpb24tU2hhcmVBbGlrZSA0LjAgSW50ZXJuYXRpb25hbCBMaWNlbnNlLiAtLT4KPCEtLSBodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9saWNlbnNlcy9ieS1zYS80LjAvIC0tPgo=") no-repeat fixed 50%/70% 70%,linear-gradient(180deg,#2a2a2a 0,#202020);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#ff2a2a2a",endColorstr="#ff202020",GradientType=0)}body.nanotrasen .normal{color:#40628a}body.nanotrasen .good{color:#537d29}body.nanotrasen .average{color:#be6209}body.nanotrasen .bad{color:#b00e0e}body.nanotrasen .highlight{color:#8ba5c4}body.nanotrasen main{display:block;margin-top:32px;padding:2px 6px 0}body.nanotrasen hr{height:2px;background-color:#40628a;border:none}body.nanotrasen .hidden{display:none}body.nanotrasen .bar .barText,body.nanotrasen span.button{color:#fff;font-size:12px;font-weight:400;font-style:normal;text-decoration:none}body.nanotrasen .bold{font-weight:700}body.nanotrasen .italic{font-style:italic}body.nanotrasen [unselectable=on]{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}body.nanotrasen div[data-tooltip],body.nanotrasen span[data-tooltip]{position:relative}body.nanotrasen div[data-tooltip]:after,body.nanotrasen span[data-tooltip]:after{position:absolute;display:block;z-index:2;width:250px;padding:10px;-ms-transform:translateX(-50%);transform:translateX(-50%);visibility:hidden;opacity:0;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";white-space:normal;text-align:left;content:attr(data-tooltip);transition:all .5s;border:1px solid #272727;background-color:#363636}body.nanotrasen div[data-tooltip]:hover:after,body.nanotrasen span[data-tooltip]:hover:after{visibility:visible;opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"}body.nanotrasen div[data-tooltip].tooltip-top:after,body.nanotrasen span[data-tooltip].tooltip-top:after{bottom:100%;left:50%;-ms-transform:translateX(-50%) translateY(8px);transform:translateX(-50%) translateY(8px)}body.nanotrasen div[data-tooltip].tooltip-top:hover:after,body.nanotrasen span[data-tooltip].tooltip-top:hover:after{-ms-transform:translateX(-50%) translateY(-8px);transform:translateX(-50%) translateY(-8px)}body.nanotrasen div[data-tooltip].tooltip-bottom:after,body.nanotrasen span[data-tooltip].tooltip-bottom:after{top:100%;left:50%;-ms-transform:translateX(-50%) translateY(-8px);transform:translateX(-50%) translateY(-8px)}body.nanotrasen div[data-tooltip].tooltip-bottom:hover:after,body.nanotrasen span[data-tooltip].tooltip-bottom:hover:after{-ms-transform:translateX(-50%) translateY(8px);transform:translateX(-50%) translateY(8px)}body.nanotrasen div[data-tooltip].tooltip-left:after,body.nanotrasen span[data-tooltip].tooltip-left:after{top:50%;right:100%;-ms-transform:translateX(8px) translateY(-50%);transform:translateX(8px) translateY(-50%)}body.nanotrasen div[data-tooltip].tooltip-left:hover:after,body.nanotrasen span[data-tooltip].tooltip-left:hover:after{-ms-transform:translateX(-8px) translateY(-50%);transform:translateX(-8px) translateY(-50%)}body.nanotrasen div[data-tooltip].tooltip-right:after,body.nanotrasen span[data-tooltip].tooltip-right:after{top:50%;left:100%;-ms-transform:translateX(-8px) translateY(-50%);transform:translateX(-8px) translateY(-50%)}body.nanotrasen div[data-tooltip].tooltip-right:hover:after,body.nanotrasen span[data-tooltip].tooltip-right:hover:after{-ms-transform:translateX(8px) translateY(-50%);transform:translateX(8px) translateY(-50%)}body.nanotrasen .bar{display:inline-block;position:relative;vertical-align:middle;width:100%;height:20px;line-height:17px;padding:1px;border:1px solid #40628a;background:#272727}body.nanotrasen .bar .barText{position:absolute;top:0;right:3px}body.nanotrasen .bar .barFill{display:block;height:100%;transition:background-color 1s;background-color:#40628a}body.nanotrasen .bar .barFill.good{background-color:#537d29}body.nanotrasen .bar .barFill.average{background-color:#be6209}body.nanotrasen .bar .barFill.bad{background-color:#b00e0e}body.nanotrasen span.button{display:inline-block;vertical-align:middle;min-height:20px;line-height:17px;padding:0 5px;white-space:nowrap;border:1px solid #272727}body.nanotrasen span.button .fa{padding-right:2px}body.nanotrasen span.button.normal{transition:background-color .5s;background-color:#40628a}body.nanotrasen span.button.normal.active:focus,body.nanotrasen span.button.normal.active:hover{transition:background-color .25s;background-color:#4f78aa;outline:0}body.nanotrasen span.button.disabled{transition:background-color .5s;background-color:#999}body.nanotrasen span.button.disabled.active:focus,body.nanotrasen span.button.disabled.active:hover{transition:background-color .25s;background-color:#a8a8a8;outline:0}body.nanotrasen span.button.selected{transition:background-color .5s;background-color:#2f943c}body.nanotrasen span.button.selected.active:focus,body.nanotrasen span.button.selected.active:hover{transition:background-color .25s;background-color:#3ab84b;outline:0}body.nanotrasen span.button.toggle{transition:background-color .5s;background-color:#2f943c}body.nanotrasen span.button.toggle.active:focus,body.nanotrasen span.button.toggle.active:hover{transition:background-color .25s;background-color:#3ab84b;outline:0}body.nanotrasen span.button.caution{transition:background-color .5s;background-color:#9a9d00}body.nanotrasen span.button.caution.active:focus,body.nanotrasen span.button.caution.active:hover{transition:background-color .25s;background-color:#ced200;outline:0}body.nanotrasen span.button.danger{transition:background-color .5s;background-color:#9d0808}body.nanotrasen span.button.danger.active:focus,body.nanotrasen span.button.danger.active:hover{transition:background-color .25s;background-color:#ce0b0b;outline:0}body.nanotrasen span.button.gridable{width:125px;margin:2px 0}body.nanotrasen span.button.gridable.center{text-align:center;width:75px}body.nanotrasen span.button+span:not(.button),body.nanotrasen span:not(.button)+span.button{margin-left:5px}body.nanotrasen div.display{width:100%;padding:4px;margin:6px 0;background-color:#000;-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorStr=#54000000,endColorStr=#54000000)";filter:progid:DXImageTransform.Microsoft.gradient(startColorStr=#54000000,endColorStr=#54000000);background-color:rgba(0,0,0,.33);box-shadow:inset 0 0 5px rgba(0,0,0,.5)}body.nanotrasen div.display.tabular{padding:0;margin:0}body.nanotrasen div.display header,body.nanotrasen div.subdisplay header{display:block;position:relative;width:100%;padding:0 4px;margin-bottom:6px;color:#fff;border-bottom:2px solid #40628a}body.nanotrasen div.display header .buttonRight,body.nanotrasen div.subdisplay header .buttonRight{position:absolute;bottom:6px;right:4px}body.nanotrasen div.display article,body.nanotrasen div.subdisplay article{display:table;width:100%;border-collapse:collapse}body.nanotrasen input{display:inline-block;vertical-align:middle;height:20px;line-height:17px;padding:0 5px;white-space:nowrap;color:#000;background-color:#fff;border:1px solid #272727}body.nanotrasen input.number{width:35px}body.nanotrasen input:-ms-input-placeholder{color:#999}body.nanotrasen input::placeholder{color:#999}body.nanotrasen input::-ms-clear{display:none}body.nanotrasen svg.linegraph{overflow:hidden}body.nanotrasen div.notice{margin:8px 0;padding:4px;box-shadow:none;color:#000;font-weight:700;font-style:italic;background-color:#bb9b68;background-image:repeating-linear-gradient(-45deg,#bb9b68,#bb9b68 10px,#b1905d 0,#b1905d 20px)}body.nanotrasen div.notice .label{color:#000}body.nanotrasen div.notice .content:only-of-type{padding:0}body.nanotrasen div.notice hr{background-color:#272727}body.nanotrasen div.resize{position:fixed;bottom:0;right:0;width:0;height:0;border-style:solid;border-width:0 0 45px 45px;border-color:transparent transparent #363636;-ms-transform:rotate(1turn);transform:rotate(1turn)}body.nanotrasen section .cell,body.nanotrasen section .content,body.nanotrasen section .label,body.nanotrasen section .line,body.syndicate section .cell,body.syndicate section .content,body.syndicate section .label,body.syndicate section .line{display:table-cell;margin:0;text-align:left;vertical-align:middle;padding:3px 2px}body.nanotrasen section{display:table-row;width:100%}body.nanotrasen section:not(:first-child){padding-top:4px}body.nanotrasen section.candystripe:nth-child(2n){background-color:#000;-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorStr=#33000000,endColorStr=#33000000)";filter:progid:DXImageTransform.Microsoft.gradient(startColorStr=#33000000,endColorStr=#33000000);background-color:rgba(0,0,0,.2)}body.nanotrasen section .label{width:1%;padding-right:32px;white-space:nowrap;color:#8ba5c4}body.nanotrasen section .content:not(:last-child){padding-right:16px}body.nanotrasen section .line{width:100%}body.nanotrasen section .cell:not(:first-child){text-align:center;padding-top:0}body.nanotrasen section .cell span.button{width:75px}body.nanotrasen section:not(:last-child){padding-right:4px}body.nanotrasen div.subdisplay{width:100%;margin:0}body.nanotrasen header.titlebar .close,body.nanotrasen header.titlebar .minimize{display:inline-block;position:relative;padding:7px;margin:-7px;color:#8ba5c4}body.nanotrasen header.titlebar .close:hover,body.nanotrasen header.titlebar .minimize:hover{color:#9cb2cd}body.nanotrasen header.titlebar{position:fixed;z-index:1;top:0;left:0;width:100%;height:32px;background-color:#363636;border-bottom:1px solid #161616;box-shadow:0 3px 3px rgba(0,0,0,.1)}body.nanotrasen header.titlebar .statusicon{position:absolute;top:4px;left:12px;transition:color .5s}body.nanotrasen header.titlebar .title{position:absolute;top:6px;left:46px;color:#8ba5c4;font-size:16px;white-space:nowrap}body.nanotrasen header.titlebar .minimize{position:absolute;top:6px;right:46px}body.nanotrasen header.titlebar .close{position:absolute;top:4px;right:12px}body.syndicate{background:url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjAiIHZpZXdCb3g9IjAgMCAyMDAgMjg5Ljc0MiIgb3BhY2l0eT0iLjMzIj4KICA8cGF0aCBkPSJtIDkzLjUzNzY3NywwIGMgLTE4LjExMzEyNSwwIC0zNC4yMjAxMzMsMy4xMTE2NCAtNDguMzIzNDg0LDkuMzM0MzcgLTEzLjk2NTA5Miw2LjIyMTY3IC0yNC42MTI0NDIsMTUuMDcxMTQgLTMxLjk0MDY1MSwyNi41NDcxIC03LjE4OTkzOTgsMTEuMzM3ODkgLTEwLjMwMTIyNjYsMjQuNzQ5MTEgLTEwLjMwMTIyNjYsNDAuMjM0NzggMCwxMC42NDY2MiAyLjcyNTAwMjYsMjAuNDY0NjUgOC4xNzUxMTE2LDI5LjQ1MjU4IDUuNjE1Mjc3LDguOTg2ODYgMTQuMDM4Mjc3LDE3LjM1MjA0IDI1LjI2ODgyMSwyNS4wOTQzNiAxMS4yMzA1NDQsNy42MDUzMSAyNi41MDc0MjEsMTUuNDE4MzUgNDUuODMwNTE0LDIzLjQzNzgyIDE5Ljk4Mzc0OCw4LjI5NTU3IDM0Ljg0ODg0OCwxNS41NTQ3MSA0NC41OTI5OTgsMjEuNzc2MzggOS43NDQxNCw2LjIyMjczIDE2Ljc2MTcsMTIuODU4NSAyMS4wNTU3MiwxOS45MDk1MSA0LjI5NDA0LDcuMDUyMDggNi40NDE5MywxNS43NjQwOCA2LjQ0MTkzLDI2LjEzNDU5IDAsMTYuMTc3MDIgLTUuMjAxOTYsMjguNDgyMjIgLTE1LjYwNjczLDM2LjkxNjgyIC0xMC4yMzk2LDguNDM0NyAtMjUuMDIyMDMsMTIuNjUyMyAtNDQuMzQ1MTY5LDEyLjY1MjMgLTE0LjAzODE3MSwwIC0yNS41MTUyNDcsLTEuNjU5NCAtMzQuNDMzNjE4LC00Ljk3NzcgLTguOTE4MzcsLTMuNDU2NiAtMTYuMTg1NTcyLC04LjcxMTMgLTIxLjgwMDgzOSwtMTUuNzYzMyAtNS42MTUyNzcsLTcuMDUyMSAtMTAuMDc0Nzk1LC0xNi42NjA4OCAtMTMuMzc3ODk5LC0yOC44MjgxMiBsIC0yNC43NzMxNjI2MjkzOTQ1LDAgMCw1Ni44MjYzMiBDIDMzLjg1Njc2OSwyODYuMDc2MDEgNjMuNzQ5MDQsMjg5Ljc0MjAxIDg5LjY3ODM4MywyODkuNzQyMDEgYyAxNi4wMjAwMjcsMCAzMC43MTk3ODcsLTEuMzgyNyA0NC4wOTczMzcsLTQuMTQ3OSAxMy41NDI3MiwtMi45MDQzIDI1LjEwNDEsLTcuNDY3NiAzNC42ODMwOSwtMTMuNjg5MyA5Ljc0NDEzLC02LjM1OTcgMTcuMzQwNDIsLTE0LjUxOTUgMjIuNzkwNTIsLTI0LjQ3NDggNS40NTAxLC0xMC4wOTMzMiA4LjE3NTExLC0yMi4zOTk1OSA4LjE3NTExLC0zNi45MTY4MiAwLC0xMi45OTc2NCAtMy4zMDIxLC0yNC4zMzUzOSAtOS45MDgyOSwtMzQuMDE0NiAtNi40NDEwNSwtOS44MTcyNSAtMTUuNTI1NDUsLTE4LjUyNzA3IC0yNy4yNTE0NiwtMjYuMTMxMzMgLTExLjU2MDg1LC03LjYwNDI3IC0yNy45MTA4MywtMTUuODMxNDIgLTQ5LjA1MDY2LC0yNC42ODAyMiAtMTcuNTA2NDQsLTcuMTkwMTIgLTMwLjcxOTY2OCwtMTMuNjg5NDggLTM5LjYzODAzOCwtMTkuNDk3MDEgLTguOTE4MzcxLC01LjgwNzUyIC0xOC42MDc0NzQsLTEyLjQzNDA5IC0yNC4wOTY1MjQsLTE4Ljg3NDE3IC01LjQyNjA0MywtNi4zNjYxNiAtOS42NTg4MjYsLTE1LjA3MDAzIC05LjY1ODgyNiwtMjQuODg3MjkgMCwtOS4yNjQwMSAyLjA3NTQxNCwtMTcuMjEzNDUgNi4yMjM0NTQsLTIzLjg1MDMzIDExLjA5ODI5OCwtMTQuMzk3NDggNDEuMjg2NjM4LC0xLjc5NTA3IDQ1LjA3NTYwOSwyNC4zNDc2MiA0LjgzOTM5Miw2Ljc3NDkxIDguODQ5MzUsMTYuMjQ3MjkgMTIuMDI5NTE1LDI4LjQxNTYgbCAyMC41MzIzNCwwIDAsLTU1Ljk5OTY3IGMgLTQuNDc4MjUsLTUuOTI0NDggLTkuOTU0ODgsLTEwLjYzMjIyIC0xNS45MDgzNywtMTQuMzc0MTEgMS42NDA1NSwwLjQ3OTA1IDMuMTkwMzksMS4wMjM3NiA0LjYzODY1LDEuNjQwMjQgNi40OTg2MSwyLjYyNjA3IDEyLjE2NzkzLDcuMzI3NDcgMTcuMDA3MywxNC4xMDM0NSA0LjgzOTM5LDYuNzc0OTEgOC44NDkzNSwxNi4yNDU2NyAxMi4wMjk1MiwyOC40MTM5NyAwLDAgOC40ODEyOCwtMC4xMjg5NCA4LjQ4OTc4LC0wLjAwMiAwLjQxNzc2LDYuNDE0OTQgLTEuNzUzMzksOS40NTI4NiAtNC4xMjM0MiwxMi41NjEwNCAtMi40MTc0LDMuMTY5NzggLTUuMTQ0ODYsNi43ODk3MyAtNC4wMDI3OCwxMy4wMDI5IDEuNTA3ODYsOC4yMDMxOCAxMC4xODM1NCwxMC41OTY0MiAxNC42MjE5NCw5LjMxMTU0IC0zLjMxODQyLC0wLjQ5OTExIC01LjMxODU1LC0xLjc0OTQ4IC01LjMxODU1LC0xLjc0OTQ4IDAsMCAxLjg3NjQ2LDAuOTk4NjggNS42NTExNywtMS4zNTk4MSAtMy4yNzY5NSwwLjk1NTcxIC0xMC43MDUyOSwtMC43OTczOCAtMTEuODAxMjUsLTYuNzYzMTMgLTAuOTU3NTIsLTUuMjA4NjEgMC45NDY1NCwtNy4yOTUxNCAzLjQwMTEzLC0xMC41MTQ4MiAyLjQ1NDYyLC0zLjIxOTY4IDUuMjg0MjYsLTYuOTU4MzEgNC42ODQzLC0xNC40ODgyNCBsIDAuMDAzLDAuMDAyIDguOTI2NzYsMCAwLC01NS45OTk2NyBjIC0xNS4wNzEyNSwtMy44NzE2OCAtMjcuNjUzMTQsLTYuMzYwNDIgLTM3Ljc0NjcxLC03LjQ2NTg2IC05Ljk1NTMxLC0xLjEwNzU1IC0yMC4xODgyMywtMS42NTk4MSAtMzAuNjk2NjEzLC0xLjY1OTgxIHogbSA3MC4zMjE2MDMsMTcuMzA4OTMgMC4yMzgwNSw0MC4zMDQ5IGMgMS4zMTgwOCwxLjIyNjY2IDIuNDM5NjUsMi4yNzgxNSAzLjM0MDgxLDMuMTA2MDIgNC44MzkzOSw2Ljc3NDkxIDguODQ5MzQsMTYuMjQ1NjYgMTIuMDI5NTEsMjguNDEzOTcgbCAyMC41MzIzNCwwIDAsLTU1Ljk5OTY3IGMgLTYuNjc3MzEsLTQuNTkzODEgLTE5LjgzNjQzLC0xMC40NzMwOSAtMzYuMTQwNzEsLTE1LjgyNTIyIHogbSAtMjguMTIwNDksNS42MDU1MSA4LjU2NDc5LDE3LjcxNjU1IGMgLTExLjk3MDM3LC02LjQ2Njk3IC0xMy44NDY3OCwtOS43MTcyNiAtOC41NjQ3OSwtMTcuNzE2NTUgeiBtIDIyLjc5NzA1LDAgYyAyLjc3MTUsNy45OTkyOSAxLjc4NzQxLDExLjI0OTU4IC00LjQ5MzU0LDE3LjcxNjU1IGwgNC40OTM1NCwtMTcuNzE2NTUgeiBtIDE1LjIyMTk1LDI0LjAwODQ4IDguNTY0NzksMTcuNzE2NTUgYyAtMTEuOTcwMzgsLTYuNDY2OTcgLTEzLjg0Njc5LC05LjcxNzI2IC04LjU2NDc5LC0xNy43MTY1NSB6IG0gMjIuNzk3MDQsMCBjIDIuNzcxNSw3Ljk5OTI5IDEuNzg3NDEsMTEuMjQ5NTggLTQuNDkzNTQsMTcuNzE2NTUgbCA0LjQ5MzU0LC0xNy43MTY1NSB6IG0gLTk5LjExMzg0LDIuMjA3NjQgOC41NjQ3OSwxNy43MTY1NSBjIC0xMS45NzAzODIsLTYuNDY2OTcgLTEzLjg0Njc4MiwtOS43MTcyNiAtOC41NjQ3OSwtMTcuNzE2NTUgeiBtIDIyLjc5NTQyLDAgYyAyLjc3MTUsNy45OTkyOSAxLjc4NzQxLDExLjI0OTU4IC00LjQ5MzU0LDE3LjcxNjU1IGwgNC40OTM1NCwtMTcuNzE2NTUgeiIgLz4KPC9zdmc+CjwhLS0gVGhpcyB3b3JrIGlzIGxpY2Vuc2VkIHVuZGVyIGEgQ3JlYXRpdmUgQ29tbW9ucyBBdHRyaWJ1dGlvbi1TaGFyZUFsaWtlIDQuMCBJbnRlcm5hdGlvbmFsIExpY2Vuc2UuIC0tPgo8IS0tIGh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL2xpY2Vuc2VzL2J5LXNhLzQuMC8gLS0+Cg==") no-repeat fixed 50%/70% 70%,linear-gradient(180deg,#750000 0,#340404);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#ff750000",endColorstr="#ff340404",GradientType=0)}body.syndicate .normal{color:#40628a}body.syndicate .good{color:#73e573}body.syndicate .average{color:#be6209}body.syndicate .bad{color:#b00e0e}body.syndicate .highlight{color:#000}body.syndicate main{display:block;margin-top:32px;padding:2px 6px 0}body.syndicate hr{height:2px;background-color:#272727;border:none}body.syndicate .hidden{display:none}body.syndicate .bar .barText,body.syndicate span.button{color:#fff;font-size:12px;font-weight:400;font-style:normal;text-decoration:none}body.syndicate .bold{font-weight:700}body.syndicate .italic{font-style:italic}body.syndicate [unselectable=on]{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}body.syndicate div[data-tooltip],body.syndicate span[data-tooltip]{position:relative}body.syndicate div[data-tooltip]:after,body.syndicate span[data-tooltip]:after{position:absolute;display:block;z-index:2;width:250px;padding:10px;-ms-transform:translateX(-50%);transform:translateX(-50%);visibility:hidden;opacity:0;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";white-space:normal;text-align:left;content:attr(data-tooltip);transition:all .5s;border:1px solid #272727;background-color:#363636}body.syndicate div[data-tooltip]:hover:after,body.syndicate span[data-tooltip]:hover:after{visibility:visible;opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"}body.syndicate div[data-tooltip].tooltip-top:after,body.syndicate span[data-tooltip].tooltip-top:after{bottom:100%;left:50%;-ms-transform:translateX(-50%) translateY(8px);transform:translateX(-50%) translateY(8px)}body.syndicate div[data-tooltip].tooltip-top:hover:after,body.syndicate span[data-tooltip].tooltip-top:hover:after{-ms-transform:translateX(-50%) translateY(-8px);transform:translateX(-50%) translateY(-8px)}body.syndicate div[data-tooltip].tooltip-bottom:after,body.syndicate span[data-tooltip].tooltip-bottom:after{top:100%;left:50%;-ms-transform:translateX(-50%) translateY(-8px);transform:translateX(-50%) translateY(-8px)}body.syndicate div[data-tooltip].tooltip-bottom:hover:after,body.syndicate span[data-tooltip].tooltip-bottom:hover:after{-ms-transform:translateX(-50%) translateY(8px);transform:translateX(-50%) translateY(8px)}body.syndicate div[data-tooltip].tooltip-left:after,body.syndicate span[data-tooltip].tooltip-left:after{top:50%;right:100%;-ms-transform:translateX(8px) translateY(-50%);transform:translateX(8px) translateY(-50%)}body.syndicate div[data-tooltip].tooltip-left:hover:after,body.syndicate span[data-tooltip].tooltip-left:hover:after{-ms-transform:translateX(-8px) translateY(-50%);transform:translateX(-8px) translateY(-50%)}body.syndicate div[data-tooltip].tooltip-right:after,body.syndicate span[data-tooltip].tooltip-right:after{top:50%;left:100%;-ms-transform:translateX(-8px) translateY(-50%);transform:translateX(-8px) translateY(-50%)}body.syndicate div[data-tooltip].tooltip-right:hover:after,body.syndicate span[data-tooltip].tooltip-right:hover:after{-ms-transform:translateX(8px) translateY(-50%);transform:translateX(8px) translateY(-50%)}body.syndicate .bar{display:inline-block;position:relative;vertical-align:middle;width:100%;height:20px;line-height:17px;padding:1px;border:1px solid #000;background:#272727}body.syndicate .bar .barText{position:absolute;top:0;right:3px}body.syndicate .bar .barFill{display:block;height:100%;transition:background-color 1s;background-color:#000}body.syndicate .bar .barFill.good{background-color:#73e573}body.syndicate .bar .barFill.average{background-color:#be6209}body.syndicate .bar .barFill.bad{background-color:#b00e0e}body.syndicate span.button{display:inline-block;vertical-align:middle;min-height:20px;line-height:17px;padding:0 5px;white-space:nowrap;border:1px solid #272727}body.syndicate span.button .fa{padding-right:2px}body.syndicate span.button.normal{transition:background-color .5s;background-color:#397439}body.syndicate span.button.normal.active:focus,body.syndicate span.button.normal.active:hover{transition:background-color .25s;background-color:#4a964a;outline:0}body.syndicate span.button.disabled{transition:background-color .5s;background-color:#363636}body.syndicate span.button.disabled.active:focus,body.syndicate span.button.disabled.active:hover{transition:background-color .25s;background-color:#545454;outline:0}body.syndicate span.button.selected{transition:background-color .5s;background-color:#9d0808}body.syndicate span.button.selected.active:focus,body.syndicate span.button.selected.active:hover{transition:background-color .25s;background-color:#ce0b0b;outline:0}body.syndicate span.button.toggle{transition:background-color .5s;background-color:#9d0808}body.syndicate span.button.toggle.active:focus,body.syndicate span.button.toggle.active:hover{transition:background-color .25s;background-color:#ce0b0b;outline:0}body.syndicate span.button.caution{transition:background-color .5s;background-color:#be6209}body.syndicate span.button.caution.active:focus,body.syndicate span.button.caution.active:hover{transition:background-color .25s;background-color:#eb790b;outline:0}body.syndicate span.button.danger{transition:background-color .5s;background-color:#9a9d00}body.syndicate span.button.danger.active:focus,body.syndicate span.button.danger.active:hover{transition:background-color .25s;background-color:#ced200;outline:0}body.syndicate span.button.gridable{width:125px;margin:2px 0}body.syndicate span.button.gridable.center{text-align:center;width:75px}body.syndicate span.button+span:not(.button),body.syndicate span:not(.button)+span.button{margin-left:5px}body.syndicate div.display{width:100%;padding:4px;margin:6px 0;background-color:#000;-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorStr=#80000000,endColorStr=#80000000)";filter:progid:DXImageTransform.Microsoft.gradient(startColorStr=#80000000,endColorStr=#80000000);background-color:rgba(0,0,0,.5);box-shadow:inset 0 0 5px rgba(0,0,0,.75)}body.syndicate div.display.tabular{padding:0;margin:0}body.syndicate div.display header,body.syndicate div.subdisplay header{display:block;position:relative;width:100%;padding:0 4px;margin-bottom:6px;color:#fff;border-bottom:2px solid #272727}body.syndicate div.display header .buttonRight,body.syndicate div.subdisplay header .buttonRight{position:absolute;bottom:6px;right:4px}body.syndicate div.display article,body.syndicate div.subdisplay article{display:table;width:100%;border-collapse:collapse}body.syndicate input{display:inline-block;vertical-align:middle;height:20px;line-height:17px;padding:0 5px;white-space:nowrap;color:#fff;background-color:#9d0808;border:1px solid #272727}body.syndicate input.number{width:35px}body.syndicate input:-ms-input-placeholder{color:#999}body.syndicate input::placeholder{color:#999}body.syndicate input::-ms-clear{display:none}body.syndicate svg.linegraph{overflow:hidden}body.syndicate div.notice{margin:8px 0;padding:4px;box-shadow:none;color:#000;font-weight:700;font-style:italic;background-color:#750000;background-image:repeating-linear-gradient(-45deg,#750000,#750000 10px,#910101 0,#910101 20px)}body.syndicate div.notice .label{color:#000}body.syndicate div.notice .content:only-of-type{padding:0}body.syndicate div.notice hr{background-color:#272727}body.syndicate div.resize{position:fixed;bottom:0;right:0;width:0;height:0;border-style:solid;border-width:0 0 45px 45px;border-color:transparent transparent #363636;-ms-transform:rotate(1turn);transform:rotate(1turn)}body.syndicate section .cell,body.syndicate section .content,body.syndicate section .label,body.syndicate section .line{display:table-cell;margin:0;text-align:left;vertical-align:middle;padding:3px 2px}body.syndicate section{display:table-row;width:100%}body.syndicate section:not(:first-child){padding-top:4px}body.syndicate section.candystripe:nth-child(2n){background-color:#000;-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorStr=#33000000,endColorStr=#33000000)";filter:progid:DXImageTransform.Microsoft.gradient(startColorStr=#33000000,endColorStr=#33000000);background-color:rgba(0,0,0,.2)}body.syndicate section .label{width:1%;padding-right:32px;white-space:nowrap;color:#fff}body.syndicate section .content:not(:last-child){padding-right:16px}body.syndicate section .line{width:100%}body.syndicate section .cell:not(:first-child){text-align:center;padding-top:0}body.syndicate section .cell span.button{width:75px}body.syndicate section:not(:last-child){padding-right:4px}body.syndicate div.subdisplay{width:100%;margin:0}body.syndicate header.titlebar .close,body.syndicate header.titlebar .minimize{display:inline-block;position:relative;padding:7px;margin:-7px;color:#e74242}body.syndicate header.titlebar .close:hover,body.syndicate header.titlebar .minimize:hover{color:#eb5e5e}body.syndicate header.titlebar{position:fixed;z-index:1;top:0;left:0;width:100%;height:32px;background-color:#363636;border-bottom:1px solid #161616;box-shadow:0 3px 3px rgba(0,0,0,.1)}body.syndicate header.titlebar .statusicon{position:absolute;top:4px;left:12px;transition:color .5s}body.syndicate header.titlebar .title{position:absolute;top:6px;left:46px;color:#e74242;font-size:16px;white-space:nowrap}body.syndicate header.titlebar .minimize{position:absolute;top:6px;right:46px}body.syndicate header.titlebar .close{position:absolute;top:4px;right:12px}.no-icons header.titlebar .statusicon{font-size:20px}.no-icons header.titlebar .statusicon:after{content:"O"}.no-icons header.titlebar .minimize{top:-2px;font-size:20px}.no-icons header.titlebar .minimize:after{content:"—"}.no-icons header.titlebar .close{font-size:20px}.no-icons header.titlebar .close:after{content:"X"} \ No newline at end of file diff --git a/tgui/assets/tgui.js b/tgui/assets/tgui.js index a8c649cdc3..7d061b10fd 100644 --- a/tgui/assets/tgui.js +++ b/tgui/assets/tgui.js @@ -1,18 +1,18 @@ -require=function t(e,n,a){function r(o,s){if(!n[o]){if(!e[o]){var p="function"==typeof require&&require;if(!s&&p)return p(o,!0);if(i)return i(o,!0);var u=Error("Cannot find module '"+o+"'");throw u.code="MODULE_NOT_FOUND",u}var c=n[o]={exports:{}};e[o][0].call(c.exports,function(t){var n=e[o][1][t];return r(n?n:t)},c,c.exports,t,e,n,a)}return n[o].exports}for(var i="function"==typeof require&&require,o=0;o2?u[2]:void 0,l=Math.min((void 0===c?o:r(c,o))-p,o-s),d=1;for(s>p&&p+l>s&&(d=-1,p+=l-1,s+=l-1);l-- >0;)p in n?n[s]=n[p]:delete n[s],s+=d,p+=d;return n}},{76:76,79:79,80:80}],6:[function(t,e,n){"use strict";var a=t(80),r=t(76),i=t(79);e.exports=[].fill||function(t){for(var e=a(this),n=i(e.length),o=arguments,s=o.length,p=r(s>1?o[1]:void 0,n),u=s>2?o[2]:void 0,c=void 0===u?n:r(u,n);c>p;)e[p++]=t;return e}},{76:76,79:79,80:80}],7:[function(t,e,n){var a=t(78),r=t(79),i=t(76);e.exports=function(t){return function(e,n,o){var s,p=a(e),u=r(p.length),c=i(o,u);if(t&&n!=n){for(;u>c;)if(s=p[c++],s!=s)return!0}else for(;u>c;c++)if((t||c in p)&&p[c]===n)return t||c;return!t&&-1}}},{76:76,78:78,79:79}],8:[function(t,e,n){var a=t(17),r=t(34),i=t(80),o=t(79),s=t(9);e.exports=function(t){var e=1==t,n=2==t,p=3==t,u=4==t,c=6==t,l=5==t||c;return function(d,f,h){for(var m,g,v=i(d),b=r(v),y=a(f,h,3),x=o(b.length),_=0,w=e?s(d,x):n?s(d,0):void 0;x>_;_++)if((l||_ in b)&&(m=b[_],g=y(m,_,v),t))if(e)w[_]=g;else if(g)switch(t){case 3:return!0;case 5:return m;case 6:return _;case 2:w.push(m)}else if(u)return!1;return c?-1:p||u?u:w}}},{17:17,34:34,79:79,80:80,9:9}],9:[function(t,e,n){var a=t(38),r=t(36),i=t(83)("species");e.exports=function(t,e){var n;return r(t)&&(n=t.constructor,"function"!=typeof n||n!==Array&&!r(n.prototype)||(n=void 0),a(n)&&(n=n[i],null===n&&(n=void 0))),new(void 0===n?Array:n)(e)}},{36:36,38:38,83:83}],10:[function(t,e,n){var a=t(11),r=t(83)("toStringTag"),i="Arguments"==a(function(){return arguments}());e.exports=function(t){var e,n,o;return void 0===t?"Undefined":null===t?"Null":"string"==typeof(n=(e=Object(t))[r])?n:i?a(e):"Object"==(o=a(e))&&"function"==typeof e.callee?"Arguments":o}},{11:11,83:83}],11:[function(t,e,n){var a={}.toString;e.exports=function(t){return a.call(t).slice(8,-1)}},{}],12:[function(t,e,n){"use strict";var a=t(46),r=t(31),i=t(60),o=t(17),s=t(69),p=t(18),u=t(27),c=t(42),l=t(44),d=t(82)("id"),f=t(30),h=t(38),m=t(65),g=t(19),v=Object.isExtensible||h,b=g?"_s":"size",y=0,x=function(t,e){if(!h(t))return"symbol"==typeof t?t:("string"==typeof t?"S":"P")+t;if(!f(t,d)){if(!v(t))return"F";if(!e)return"E";r(t,d,++y)}return"O"+t[d]},_=function(t,e){var n,a=x(e);if("F"!==a)return t._i[a];for(n=t._f;n;n=n.n)if(n.k==e)return n};e.exports={getConstructor:function(t,e,n,r){var c=t(function(t,i){s(t,c,e),t._i=a.create(null),t._f=void 0,t._l=void 0,t[b]=0,void 0!=i&&u(i,n,t[r],t)});return i(c.prototype,{clear:function(){for(var t=this,e=t._i,n=t._f;n;n=n.n)n.r=!0,n.p&&(n.p=n.p.n=void 0),delete e[n.i];t._f=t._l=void 0,t[b]=0},"delete":function(t){var e=this,n=_(e,t);if(n){var a=n.n,r=n.p;delete e._i[n.i],n.r=!0,r&&(r.n=a),a&&(a.p=r),e._f==n&&(e._f=a),e._l==n&&(e._l=r),e[b]--}return!!n},forEach:function(t){for(var e,n=o(t,arguments.length>1?arguments[1]:void 0,3);e=e?e.n:this._f;)for(n(e.v,e.k,this);e&&e.r;)e=e.p},has:function(t){return!!_(this,t)}}),g&&a.setDesc(c.prototype,"size",{get:function(){return p(this[b])}}),c},def:function(t,e,n){var a,r,i=_(t,e);return i?i.v=n:(t._l=i={i:r=x(e,!0),k:e,v:n,p:a=t._l,n:void 0,r:!1},t._f||(t._f=i),a&&(a.n=i),t[b]++,"F"!==r&&(t._i[r]=i)),t},getEntry:_,setStrong:function(t,e,n){c(t,e,function(t,e){this._t=t,this._k=e,this._l=void 0},function(){for(var t=this,e=t._k,n=t._l;n&&n.r;)n=n.p;return t._t&&(t._l=n=n?n.n:t._t._f)?"keys"==e?l(0,n.k):"values"==e?l(0,n.v):l(0,[n.k,n.v]):(t._t=void 0,l(1))},n?"entries":"values",!n,!0),m(e)}}},{17:17,18:18,19:19,27:27,30:30,31:31,38:38,42:42,44:44,46:46,60:60,65:65,69:69,82:82}],13:[function(t,e,n){var a=t(27),r=t(10);e.exports=function(t){return function(){if(r(this)!=t)throw TypeError(t+"#toJSON isn't generic");var e=[];return a(this,!1,e.push,e),e}}},{10:10,27:27}],14:[function(t,e,n){"use strict";var a=t(31),r=t(60),i=t(4),o=t(38),s=t(69),p=t(27),u=t(8),c=t(30),l=t(82)("weak"),d=Object.isExtensible||o,f=u(5),h=u(6),m=0,g=function(t){return t._l||(t._l=new v)},v=function(){this.a=[]},b=function(t,e){return f(t.a,function(t){return t[0]===e})};v.prototype={get:function(t){var e=b(this,t);return e?e[1]:void 0},has:function(t){return!!b(this,t)},set:function(t,e){var n=b(this,t);n?n[1]=e:this.a.push([t,e])},"delete":function(t){var e=h(this.a,function(e){return e[0]===t});return~e&&this.a.splice(e,1),!!~e}},e.exports={getConstructor:function(t,e,n,a){var i=t(function(t,r){s(t,i,e),t._i=m++,t._l=void 0,void 0!=r&&p(r,n,t[a],t)});return r(i.prototype,{"delete":function(t){return o(t)?d(t)?c(t,l)&&c(t[l],this._i)&&delete t[l][this._i]:g(this)["delete"](t):!1},has:function(t){return o(t)?d(t)?c(t,l)&&c(t[l],this._i):g(this).has(t):!1}}),i},def:function(t,e,n){return d(i(e))?(c(e,l)||a(e,l,{}),e[l][t._i]=n):g(t).set(e,n),t},frozenStore:g,WEAK:l}},{27:27,30:30,31:31,38:38,4:4,60:60,69:69,8:8,82:82}],15:[function(t,e,n){"use strict";var a=t(29),r=t(22),i=t(61),o=t(60),s=t(27),p=t(69),u=t(38),c=t(24),l=t(43),d=t(66);e.exports=function(t,e,n,f,h,m){var g=a[t],v=g,b=h?"set":"add",y=v&&v.prototype,x={},_=function(t){var e=y[t];i(y,t,"delete"==t?function(t){return m&&!u(t)?!1:e.call(this,0===t?0:t)}:"has"==t?function(t){return m&&!u(t)?!1:e.call(this,0===t?0:t)}:"get"==t?function(t){return m&&!u(t)?void 0:e.call(this,0===t?0:t)}:"add"==t?function(t){return e.call(this,0===t?0:t),this}:function(t,n){return e.call(this,0===t?0:t,n),this})};if("function"==typeof v&&(m||y.forEach&&!c(function(){(new v).entries().next()}))){var w,k=new v,E=k[b](m?{}:-0,1)!=k,S=c(function(){k.has(1)}),C=l(function(t){new v(t)});C||(v=e(function(e,n){p(e,v,t);var a=new g;return void 0!=n&&s(n,h,a[b],a),a}),v.prototype=y,y.constructor=v),m||k.forEach(function(t,e){w=1/e===-(1/0)}),(S||w)&&(_("delete"),_("has"),h&&_("get")),(w||E)&&_(b),m&&y.clear&&delete y.clear}else v=f.getConstructor(e,t,h,b),o(v.prototype,n);return d(v,t),x[t]=v,r(r.G+r.W+r.F*(v!=g),x),m||f.setStrong(v,t,h),v}},{22:22,24:24,27:27,29:29,38:38,43:43,60:60,61:61,66:66,69:69}],16:[function(t,e,n){var a=e.exports={version:"1.2.6"};"number"==typeof __e&&(__e=a)},{}],17:[function(t,e,n){var a=t(2);e.exports=function(t,e,n){if(a(t),void 0===e)return t;switch(n){case 1:return function(n){return t.call(e,n)};case 2:return function(n,a){return t.call(e,n,a)};case 3:return function(n,a,r){return t.call(e,n,a,r)}}return function(){return t.apply(e,arguments)}}},{2:2}],18:[function(t,e,n){e.exports=function(t){if(void 0==t)throw TypeError("Can't call method on "+t);return t}},{}],19:[function(t,e,n){e.exports=!t(24)(function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a})},{24:24}],20:[function(t,e,n){var a=t(38),r=t(29).document,i=a(r)&&a(r.createElement);e.exports=function(t){return i?r.createElement(t):{}}},{29:29,38:38}],21:[function(t,e,n){var a=t(46);e.exports=function(t){var e=a.getKeys(t),n=a.getSymbols;if(n)for(var r,i=n(t),o=a.isEnum,s=0;i.length>s;)o.call(t,r=i[s++])&&e.push(r);return e}},{46:46}],22:[function(t,e,n){var a=t(29),r=t(16),i=t(31),o=t(61),s=t(17),p="prototype",u=function(t,e,n){var c,l,d,f,h=t&u.F,m=t&u.G,g=t&u.S,v=t&u.P,b=t&u.B,y=m?a:g?a[e]||(a[e]={}):(a[e]||{})[p],x=m?r:r[e]||(r[e]={}),_=x[p]||(x[p]={});m&&(n=e);for(c in n)l=!h&&y&&c in y,d=(l?y:n)[c],f=b&&l?s(d,a):v&&"function"==typeof d?s(Function.call,d):d,y&&!l&&o(y,c,d),x[c]!=d&&i(x,c,f),v&&_[c]!=d&&(_[c]=d)};a.core=r,u.F=1,u.G=2,u.S=4,u.P=8,u.B=16,u.W=32,e.exports=u},{16:16,17:17,29:29,31:31,61:61}],23:[function(t,e,n){var a=t(83)("match");e.exports=function(t){var e=/./;try{"/./"[t](e)}catch(n){try{return e[a]=!1,!"/./"[t](e)}catch(r){}}return!0}},{83:83}],24:[function(t,e,n){e.exports=function(t){try{return!!t()}catch(e){return!0}}},{}],25:[function(t,e,n){"use strict";var a=t(31),r=t(61),i=t(24),o=t(18),s=t(83);e.exports=function(t,e,n){var p=s(t),u=""[t];i(function(){var e={};return e[p]=function(){return 7},7!=""[t](e)})&&(r(String.prototype,t,n(o,p,u)),a(RegExp.prototype,p,2==e?function(t,e){return u.call(t,this,e)}:function(t){return u.call(t,this)}))}},{18:18,24:24,31:31,61:61,83:83}],26:[function(t,e,n){"use strict";var a=t(4);e.exports=function(){var t=a(this),e="";return t.global&&(e+="g"),t.ignoreCase&&(e+="i"),t.multiline&&(e+="m"),t.unicode&&(e+="u"),t.sticky&&(e+="y"),e}},{4:4}],27:[function(t,e,n){var a=t(17),r=t(40),i=t(35),o=t(4),s=t(79),p=t(84);e.exports=function(t,e,n,u){var c,l,d,f=p(t),h=a(n,u,e?2:1),m=0;if("function"!=typeof f)throw TypeError(t+" is not iterable!");if(i(f))for(c=s(t.length);c>m;m++)e?h(o(l=t[m])[0],l[1]):h(t[m]);else for(d=f.call(t);!(l=d.next()).done;)r(d,h,l.value,e)}},{17:17,35:35,4:4,40:40,79:79,84:84}],28:[function(t,e,n){var a=t(78),r=t(46).getNames,i={}.toString,o="object"==typeof window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[],s=function(t){try{return r(t)}catch(e){return o.slice()}};e.exports.get=function(t){return o&&"[object Window]"==i.call(t)?s(t):r(a(t))}},{46:46,78:78}],29:[function(t,e,n){var a=e.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=a)},{}],30:[function(t,e,n){var a={}.hasOwnProperty;e.exports=function(t,e){return a.call(t,e)}},{}],31:[function(t,e,n){var a=t(46),r=t(59);e.exports=t(19)?function(t,e,n){return a.setDesc(t,e,r(1,n))}:function(t,e,n){return t[e]=n,t}},{19:19,46:46,59:59}],32:[function(t,e,n){e.exports=t(29).document&&document.documentElement},{29:29}],33:[function(t,e,n){e.exports=function(t,e,n){var a=void 0===n;switch(e.length){case 0:return a?t():t.call(n);case 1:return a?t(e[0]):t.call(n,e[0]);case 2:return a?t(e[0],e[1]):t.call(n,e[0],e[1]);case 3:return a?t(e[0],e[1],e[2]):t.call(n,e[0],e[1],e[2]);case 4:return a?t(e[0],e[1],e[2],e[3]):t.call(n,e[0],e[1],e[2],e[3])}return t.apply(n,e)}},{}],34:[function(t,e,n){var a=t(11);e.exports=Object("z").propertyIsEnumerable(0)?Object:function(t){return"String"==a(t)?t.split(""):Object(t)}},{11:11}],35:[function(t,e,n){var a=t(45),r=t(83)("iterator"),i=Array.prototype;e.exports=function(t){return void 0!==t&&(a.Array===t||i[r]===t)}},{45:45,83:83}],36:[function(t,e,n){var a=t(11);e.exports=Array.isArray||function(t){return"Array"==a(t)}},{11:11}],37:[function(t,e,n){var a=t(38),r=Math.floor;e.exports=function(t){return!a(t)&&isFinite(t)&&r(t)===t}},{38:38}],38:[function(t,e,n){e.exports=function(t){return"object"==typeof t?null!==t:"function"==typeof t}},{}],39:[function(t,e,n){var a=t(38),r=t(11),i=t(83)("match");e.exports=function(t){var e;return a(t)&&(void 0!==(e=t[i])?!!e:"RegExp"==r(t))}},{11:11,38:38,83:83}],40:[function(t,e,n){var a=t(4);e.exports=function(t,e,n,r){try{return r?e(a(n)[0],n[1]):e(n)}catch(i){var o=t["return"];throw void 0!==o&&a(o.call(t)),i}}},{4:4}],41:[function(t,e,n){"use strict";var a=t(46),r=t(59),i=t(66),o={};t(31)(o,t(83)("iterator"),function(){return this}),e.exports=function(t,e,n){t.prototype=a.create(o,{next:r(1,n)}),i(t,e+" Iterator")}},{31:31,46:46,59:59,66:66,83:83}],42:[function(t,e,n){"use strict";var a=t(48),r=t(22),i=t(61),o=t(31),s=t(30),p=t(45),u=t(41),c=t(66),l=t(46).getProto,d=t(83)("iterator"),f=!([].keys&&"next"in[].keys()),h="@@iterator",m="keys",g="values",v=function(){return this};e.exports=function(t,e,n,b,y,x,_){u(n,e,b);var w,k,E=function(t){if(!f&&t in A)return A[t];switch(t){case m:return function(){return new n(this,t)};case g:return function(){return new n(this,t)}}return function(){return new n(this,t)}},S=e+" Iterator",C=y==g,P=!1,A=t.prototype,O=A[d]||A[h]||y&&A[y],T=O||E(y);if(O){var R=l(T.call(new t));c(R,S,!0),!a&&s(A,h)&&o(R,d,v),C&&O.name!==g&&(P=!0,T=function(){return O.call(this)})}if(a&&!_||!f&&!P&&A[d]||o(A,d,T),p[e]=T,p[S]=v,y)if(w={values:C?T:E(g),keys:x?T:E(m),entries:C?E("entries"):T},_)for(k in w)k in A||i(A,k,w[k]);else r(r.P+r.F*(f||P),e,w);return w}},{22:22,30:30,31:31,41:41,45:45,46:46,48:48,61:61,66:66,83:83}],43:[function(t,e,n){var a=t(83)("iterator"),r=!1;try{var i=[7][a]();i["return"]=function(){r=!0},Array.from(i,function(){throw 2})}catch(o){}e.exports=function(t,e){if(!e&&!r)return!1;var n=!1;try{var i=[7],o=i[a]();o.next=function(){return{done:n=!0}},i[a]=function(){return o},t(i)}catch(s){}return n}},{83:83}],44:[function(t,e,n){e.exports=function(t,e){return{value:e,done:!!t}}},{}],45:[function(t,e,n){e.exports={}},{}],46:[function(t,e,n){var a=Object;e.exports={create:a.create,getProto:a.getPrototypeOf,isEnum:{}.propertyIsEnumerable,getDesc:a.getOwnPropertyDescriptor,setDesc:a.defineProperty,setDescs:a.defineProperties,getKeys:a.keys,getNames:a.getOwnPropertyNames,getSymbols:a.getOwnPropertySymbols,each:[].forEach}},{}],47:[function(t,e,n){var a=t(46),r=t(78);e.exports=function(t,e){for(var n,i=r(t),o=a.getKeys(i),s=o.length,p=0;s>p;)if(i[n=o[p++]]===e)return n}},{46:46,78:78}],48:[function(t,e,n){e.exports=!1},{}],49:[function(t,e,n){e.exports=Math.expm1||function(t){return 0==(t=+t)?t:t>-1e-6&&1e-6>t?t+t*t/2:Math.exp(t)-1}},{}],50:[function(t,e,n){e.exports=Math.log1p||function(t){return(t=+t)>-1e-8&&1e-8>t?t-t*t/2:Math.log(1+t)}},{}],51:[function(t,e,n){e.exports=Math.sign||function(t){return 0==(t=+t)||t!=t?t:0>t?-1:1}},{}],52:[function(t,e,n){var a,r,i,o=t(29),s=t(75).set,p=o.MutationObserver||o.WebKitMutationObserver,u=o.process,c=o.Promise,l="process"==t(11)(u),d=function(){var t,e,n;for(l&&(t=u.domain)&&(u.domain=null,t.exit());a;)e=a.domain,n=a.fn,e&&e.enter(),n(),e&&e.exit(),a=a.next;r=void 0,t&&t.enter()};if(l)i=function(){u.nextTick(d)};else if(p){var f=1,h=document.createTextNode("");new p(d).observe(h,{characterData:!0}),i=function(){h.data=f=-f}}else i=c&&c.resolve?function(){c.resolve().then(d)}:function(){s.call(o,d)};e.exports=function(t){var e={fn:t,next:void 0,domain:l&&u.domain};r&&(r.next=e),a||(a=e,i()),r=e}},{11:11,29:29,75:75}],53:[function(t,e,n){var a=t(46),r=t(80),i=t(34);e.exports=t(24)(function(){var t=Object.assign,e={},n={},a=Symbol(),r="abcdefghijklmnopqrst";return e[a]=7,r.split("").forEach(function(t){n[t]=t}),7!=t({},e)[a]||Object.keys(t({},n)).join("")!=r})?function(t,e){for(var n=r(t),o=arguments,s=o.length,p=1,u=a.getKeys,c=a.getSymbols,l=a.isEnum;s>p;)for(var d,f=i(o[p++]),h=c?u(f).concat(c(f)):u(f),m=h.length,g=0;m>g;)l.call(f,d=h[g++])&&(n[d]=f[d]);return n}:Object.assign},{24:24,34:34,46:46,80:80}],54:[function(t,e,n){var a=t(22),r=t(16),i=t(24);e.exports=function(t,e){var n=(r.Object||{})[t]||Object[t],o={};o[t]=e(n),a(a.S+a.F*i(function(){n(1)}),"Object",o)}},{16:16,22:22,24:24}],55:[function(t,e,n){var a=t(46),r=t(78),i=a.isEnum;e.exports=function(t){return function(e){for(var n,o=r(e),s=a.getKeys(o),p=s.length,u=0,c=[];p>u;)i.call(o,n=s[u++])&&c.push(t?[n,o[n]]:o[n]);return c}}},{46:46,78:78}],56:[function(t,e,n){var a=t(46),r=t(4),i=t(29).Reflect;e.exports=i&&i.ownKeys||function(t){var e=a.getNames(r(t)),n=a.getSymbols;return n?e.concat(n(t)):e}},{29:29,4:4,46:46}],57:[function(t,e,n){"use strict";var a=t(58),r=t(33),i=t(2);e.exports=function(){for(var t=i(this),e=arguments.length,n=Array(e),o=0,s=a._,p=!1;e>o;)(n[o]=arguments[o++])===s&&(p=!0);return function(){var a,i=this,o=arguments,u=o.length,c=0,l=0;if(!p&&!u)return r(t,n,i);if(a=n.slice(),p)for(;e>c;c++)a[c]===s&&(a[c]=o[l++]);for(;u>l;)a.push(o[l++]);return r(t,a,i)}}},{2:2,33:33,58:58}],58:[function(t,e,n){e.exports=t(29)},{29:29}],59:[function(t,e,n){e.exports=function(t,e){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:e}}},{}],60:[function(t,e,n){var a=t(61);e.exports=function(t,e){for(var n in e)a(t,n,e[n]);return t}},{61:61}],61:[function(t,e,n){var a=t(29),r=t(31),i=t(82)("src"),o="toString",s=Function[o],p=(""+s).split(o);t(16).inspectSource=function(t){return s.call(t)},(e.exports=function(t,e,n,o){"function"==typeof n&&(n.hasOwnProperty(i)||r(n,i,t[e]?""+t[e]:p.join(e+"")),n.hasOwnProperty("name")||r(n,"name",e)),t===a?t[e]=n:(o||delete t[e],r(t,e,n))})(Function.prototype,o,function(){return"function"==typeof this&&this[i]||s.call(this)})},{16:16,29:29,31:31,82:82}],62:[function(t,e,n){e.exports=function(t,e){var n=e===Object(e)?function(t){return e[t]}:e;return function(e){return(e+"").replace(t,n)}}},{}],63:[function(t,e,n){e.exports=Object.is||function(t,e){return t===e?0!==t||1/t===1/e:t!=t&&e!=e}},{}],64:[function(t,e,n){var a=t(46).getDesc,r=t(38),i=t(4),o=function(t,e){if(i(t),!r(e)&&null!==e)throw TypeError(e+": can't set as prototype!")};e.exports={set:Object.setPrototypeOf||("__proto__"in{}?function(e,n,r){try{r=t(17)(Function.call,a(Object.prototype,"__proto__").set,2),r(e,[]),n=!(e instanceof Array)}catch(i){n=!0}return function(t,e){return o(t,e),n?t.__proto__=e:r(t,e),t}}({},!1):void 0),check:o}},{17:17,38:38,4:4,46:46}],65:[function(t,e,n){"use strict";var a=t(29),r=t(46),i=t(19),o=t(83)("species");e.exports=function(t){var e=a[t];i&&e&&!e[o]&&r.setDesc(e,o,{configurable:!0,get:function(){return this}})}},{19:19,29:29,46:46,83:83}],66:[function(t,e,n){var a=t(46).setDesc,r=t(30),i=t(83)("toStringTag");e.exports=function(t,e,n){t&&!r(t=n?t:t.prototype,i)&&a(t,i,{configurable:!0,value:e})}},{30:30,46:46,83:83}],67:[function(t,e,n){var a=t(29),r="__core-js_shared__",i=a[r]||(a[r]={});e.exports=function(t){return i[t]||(i[t]={})}},{29:29}],68:[function(t,e,n){var a=t(4),r=t(2),i=t(83)("species");e.exports=function(t,e){var n,o=a(t).constructor;return void 0===o||void 0==(n=a(o)[i])?e:r(n)}},{2:2,4:4,83:83}],69:[function(t,e,n){e.exports=function(t,e,n){if(!(t instanceof e))throw TypeError(n+": use the 'new' operator!");return t}},{}],70:[function(t,e,n){var a=t(77),r=t(18);e.exports=function(t){return function(e,n){var i,o,s=r(e)+"",p=a(n),u=s.length;return 0>p||p>=u?t?"":void 0:(i=s.charCodeAt(p),55296>i||i>56319||p+1===u||(o=s.charCodeAt(p+1))<56320||o>57343?t?s.charAt(p):i:t?s.slice(p,p+2):(i-55296<<10)+(o-56320)+65536)}}},{18:18,77:77}],71:[function(t,e,n){var a=t(39),r=t(18);e.exports=function(t,e,n){if(a(e))throw TypeError("String#"+n+" doesn't accept regex!");return r(t)+""}},{18:18,39:39}],72:[function(t,e,n){var a=t(79),r=t(73),i=t(18);e.exports=function(t,e,n,o){var s=i(t)+"",p=s.length,u=void 0===n?" ":n+"",c=a(e);if(p>=c)return s;""==u&&(u=" ");var l=c-p,d=r.call(u,Math.ceil(l/u.length));return d.length>l&&(d=d.slice(0,l)),o?d+s:s+d}},{18:18,73:73,79:79}],73:[function(t,e,n){"use strict";var a=t(77),r=t(18);e.exports=function(t){var e=r(this)+"",n="",i=a(t);if(0>i||i==1/0)throw RangeError("Count can't be negative");for(;i>0;(i>>>=1)&&(e+=e))1&i&&(n+=e);return n}},{18:18,77:77}],74:[function(t,e,n){var a=t(22),r=t(18),i=t(24),o=" \n\x0B\f\r   ᠎              \u2028\u2029\ufeff",s="["+o+"]",p="​…",u=RegExp("^"+s+s+"*"),c=RegExp(s+s+"*$"),l=function(t,e){var n={};n[t]=e(d),a(a.P+a.F*i(function(){return!!o[t]()||p[t]()!=p}),"String",n)},d=l.trim=function(t,e){return t=r(t)+"",1&e&&(t=t.replace(u,"")),2&e&&(t=t.replace(c,"")),t};e.exports=l},{18:18,22:22,24:24}],75:[function(t,e,n){var a,r,i,o=t(17),s=t(33),p=t(32),u=t(20),c=t(29),l=c.process,d=c.setImmediate,f=c.clearImmediate,h=c.MessageChannel,m=0,g={},v="onreadystatechange",b=function(){var t=+this;if(g.hasOwnProperty(t)){var e=g[t];delete g[t],e()}},y=function(t){b.call(t.data)};d&&f||(d=function(t){for(var e=[],n=1;arguments.length>n;)e.push(arguments[n++]);return g[++m]=function(){s("function"==typeof t?t:Function(t),e)},a(m),m},f=function(t){delete g[t]},"process"==t(11)(l)?a=function(t){l.nextTick(o(b,t,1))}:h?(r=new h,i=r.port2,r.port1.onmessage=y,a=o(i.postMessage,i,1)):c.addEventListener&&"function"==typeof postMessage&&!c.importScripts?(a=function(t){c.postMessage(t+"","*")},c.addEventListener("message",y,!1)):a=v in u("script")?function(t){p.appendChild(u("script"))[v]=function(){p.removeChild(this),b.call(t)}}:function(t){setTimeout(o(b,t,1),0)}),e.exports={set:d,clear:f}},{11:11,17:17,20:20,29:29,32:32,33:33}],76:[function(t,e,n){var a=t(77),r=Math.max,i=Math.min;e.exports=function(t,e){return t=a(t),0>t?r(t+e,0):i(t,e)}},{77:77}],77:[function(t,e,n){var a=Math.ceil,r=Math.floor;e.exports=function(t){return isNaN(t=+t)?0:(t>0?r:a)(t)}},{}],78:[function(t,e,n){var a=t(34),r=t(18);e.exports=function(t){return a(r(t))}},{18:18,34:34}],79:[function(t,e,n){var a=t(77),r=Math.min;e.exports=function(t){return t>0?r(a(t),9007199254740991):0}},{77:77}],80:[function(t,e,n){var a=t(18);e.exports=function(t){return Object(a(t))}},{18:18}],81:[function(t,e,n){var a=t(38);e.exports=function(t,e){if(!a(t))return t;var n,r;if(e&&"function"==typeof(n=t.toString)&&!a(r=n.call(t)))return r;if("function"==typeof(n=t.valueOf)&&!a(r=n.call(t)))return r;if(!e&&"function"==typeof(n=t.toString)&&!a(r=n.call(t)))return r;throw TypeError("Can't convert object to primitive value")}},{38:38}],82:[function(t,e,n){var a=0,r=Math.random();e.exports=function(t){return"Symbol(".concat(void 0===t?"":t,")_",(++a+r).toString(36))}},{}],83:[function(t,e,n){var a=t(67)("wks"),r=t(82),i=t(29).Symbol;e.exports=function(t){return a[t]||(a[t]=i&&i[t]||(i||r)("Symbol."+t))}},{29:29,67:67,82:82}],84:[function(t,e,n){var a=t(10),r=t(83)("iterator"),i=t(45);e.exports=t(16).getIteratorMethod=function(t){return void 0!=t?t[r]||t["@@iterator"]||i[a(t)]:void 0}},{10:10,16:16,45:45,83:83}],85:[function(t,e,n){"use strict";var a,r=t(46),i=t(22),o=t(19),s=t(59),p=t(32),u=t(20),c=t(30),l=t(11),d=t(33),f=t(24),h=t(4),m=t(2),g=t(38),v=t(80),b=t(78),y=t(77),x=t(76),_=t(79),w=t(34),k=t(82)("__proto__"),E=t(8),S=t(7)(!1),C=Object.prototype,P=Array.prototype,A=P.slice,O=P.join,T=r.setDesc,R=r.getDesc,L=r.setDescs,j={};o||(a=!f(function(){return 7!=T(u("div"),"a",{get:function(){return 7}}).a}),r.setDesc=function(t,e,n){if(a)try{return T(t,e,n)}catch(r){}if("get"in n||"set"in n)throw TypeError("Accessors not supported!");return"value"in n&&(h(t)[e]=n.value),t},r.getDesc=function(t,e){if(a)try{return R(t,e)}catch(n){}return c(t,e)?s(!C.propertyIsEnumerable.call(t,e),t[e]):void 0},r.setDescs=L=function(t,e){h(t);for(var n,a=r.getKeys(e),i=a.length,o=0;i>o;)r.setDesc(t,n=a[o++],e[n]);return t}),i(i.S+i.F*!o,"Object",{getOwnPropertyDescriptor:r.getDesc,defineProperty:r.setDesc,defineProperties:L});var M="constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(","),D=M.concat("length","prototype"),N=M.length,F=function(){var t,e=u("iframe"),n=N,a=">";for(e.style.display="none",p.appendChild(e),e.src="javascript:",t=e.contentWindow.document,t.open(),t.write("