diff --git a/_maps/RandomRuins/SpaceRuins/listeningstation.dmm b/_maps/RandomRuins/SpaceRuins/listeningstation.dmm index b23f24b0e9..49646fbd71 100644 --- a/_maps/RandomRuins/SpaceRuins/listeningstation.dmm +++ b/_maps/RandomRuins/SpaceRuins/listeningstation.dmm @@ -151,6 +151,7 @@ id_tag = "syndie_listeningpost_external"; req_access_txt = "150" }, +/obj/structure/fans/tiny, /turf/open/floor/plating, /area/ruin/space/has_grav/listeningstation) "aq" = ( diff --git a/_maps/map_files/KiloStation/KiloStation.dmm b/_maps/map_files/KiloStation/KiloStation.dmm index 1fc5ae5729..bf8c332cf0 100644 --- a/_maps/map_files/KiloStation/KiloStation.dmm +++ b/_maps/map_files/KiloStation/KiloStation.dmm @@ -13176,6 +13176,9 @@ dir = 8 }, /obj/effect/decal/cleanable/blood/old, +/obj/structure/cable{ + icon_state = "4-8" + }, /turf/open/floor/plasteel, /area/security/courtroom) "avX" = ( @@ -43673,10 +43676,6 @@ initial_gas_mix = "o2=14;n2=23;TEMP=300" }, /area/maintenance/central/secondary) -"bsm" = ( -/obj/machinery/status_display/evac, -/turf/open/floor/plasteel, -/area/engine/supermatter) "bsn" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 @@ -62889,9 +62888,9 @@ pixel_x = 24 }, /obj/machinery/button/electrochromatic{ + id = "!interrogation_room"; pixel_x = 38; - pixel_y = -5; - id = "!interrogation_room" + pixel_y = -5 }, /turf/open/floor/plasteel, /area/security/warden) @@ -84679,9 +84678,6 @@ }, /area/security/vacantoffice) "fyr" = ( -/obj/machinery/light{ - dir = 4 - }, /obj/effect/decal/cleanable/cobweb/cobweb2, /turf/closed/mineral/random/labormineral, /area/space/nearstation) @@ -84938,10 +84934,6 @@ /obj/structure/sign/warning/electricshock, /turf/closed/wall/r_wall/rust, /area/ai_monitored/turret_protected/ai_upload) -"jPE" = ( -/obj/structure/cable, -/turf/closed/mineral/random/labormineral, -/area/space/nearstation) "jQY" = ( /obj/structure/table/wood, /obj/item/paper_bin, @@ -119966,7 +119958,7 @@ ckw cmw xON axa -jPE +aeu aeu aeU dQe @@ -121750,7 +121742,7 @@ clM axW cnk coo -ayn +axU aLH aLx aLz @@ -122270,7 +122262,7 @@ aLF aag aag aag -bsm +aLF cuA cuW bYI diff --git a/_maps/map_files/MetaStation/MetaStation.dmm b/_maps/map_files/MetaStation/MetaStation.dmm index d6e413f1de..fbd4c1bf39 100644 --- a/_maps/map_files/MetaStation/MetaStation.dmm +++ b/_maps/map_files/MetaStation/MetaStation.dmm @@ -2292,8 +2292,7 @@ /turf/open/floor/plating, /area/crew_quarters/fitness/recreation) "aeD" = ( -/obj/machinery/door/airlock/external, -/turf/open/floor/plating, +/turf/open/floor/plasteel/grimy, /area/hallway/primary/port) "aeE" = ( /obj/effect/spawner/structure/window/reinforced, @@ -3116,9 +3115,6 @@ }, /turf/open/floor/plasteel, /area/security/prison) -"afQ" = ( -/turf/open/floor/plating, -/area/hallway/primary/port) "afR" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 1 @@ -3188,8 +3184,14 @@ /turf/open/floor/plasteel/dark, /area/ai_monitored/security/armory) "afZ" = ( -/obj/structure/girder, -/turf/open/floor/plating, +/obj/machinery/camera{ + c_tag = "Arrivals - Lounge"; + dir = 4 + }, +/obj/structure/chair/comfy{ + dir = 4 + }, +/turf/open/floor/plasteel/grimy, /area/hallway/primary/port) "aga" = ( /obj/effect/turf_decal/tile/neutral{ @@ -3670,8 +3672,10 @@ /turf/open/floor/plasteel/dark, /area/security/prison) "agQ" = ( -/obj/item/electronics/airlock, -/turf/open/floor/plating, +/obj/machinery/holopad{ + pixel_y = -15 + }, +/turf/open/floor/carpet, /area/hallway/primary/port) "agR" = ( /obj/machinery/airalarm{ @@ -4281,9 +4285,7 @@ }, /area/maintenance/fore) "ahT" = ( -/turf/open/floor/plating{ - icon_state = "panelscorched" - }, +/turf/open/floor/carpet, /area/hallway/primary/port) "ahU" = ( /obj/effect/decal/cleanable/cobweb/cobweb2, @@ -4802,13 +4804,14 @@ /turf/open/floor/plasteel/dark, /area/crew_quarters/fitness/recreation) "aiT" = ( -/obj/effect/decal/cleanable/oil{ - icon_state = "floor5" +/obj/effect/turf_decal/tile/blue{ + dir = 4 }, -/turf/open/floor/plating{ - icon_state = "panelscorched" +/obj/machinery/light{ + dir = 4 }, -/area/hallway/primary/port) +/turf/open/floor/plasteel/white/corner, +/area/hallway/secondary/entry) "aiU" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on, /obj/effect/turf_decal/tile/neutral{ @@ -4830,9 +4833,13 @@ /turf/open/floor/plasteel/dark, /area/crew_quarters/fitness/recreation) "aiW" = ( -/turf/open/floor/plating{ - icon_state = "platingdmg1" +/obj/structure/chair/comfy{ + dir = 8 }, +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/plasteel/grimy, /area/hallway/primary/port) "aiX" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, @@ -4936,12 +4943,11 @@ /turf/open/floor/plating, /area/maintenance/port/fore) "ajk" = ( -/obj/structure/shuttle/engine/propulsion/right{ - dir = 4 - }, -/turf/open/floor/plating{ - icon_state = "platingdmg3" +/obj/structure/table/wood, +/obj/item/flashlight/lamp/green{ + pixel_y = 3 }, +/turf/open/floor/plasteel/grimy, /area/hallway/primary/port) "ajl" = ( /obj/item/soap/deluxe, @@ -5035,8 +5041,10 @@ /turf/open/floor/plasteel/dark, /area/security/warden) "ajs" = ( -/obj/item/stack/sheet/metal/ten, -/turf/open/floor/plating, +/obj/item/kirbyplants{ + icon_state = "plant-08" + }, +/turf/open/floor/plasteel/grimy, /area/hallway/primary/port) "ajt" = ( /obj/structure/closet{ @@ -5059,8 +5067,20 @@ /turf/open/floor/plasteel/dark, /area/security/warden) "aju" = ( -/obj/item/stack/sheet/mineral/wood/twenty, -/turf/open/floor/plating, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/structure/cable/yellow{ + icon_state = "2-8" + }, +/obj/structure/cable/yellow{ + icon_state = "2-4" + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/turf/open/floor/plasteel, /area/hallway/primary/port) "ajv" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on{ @@ -6921,9 +6941,17 @@ /turf/open/floor/plating, /area/maintenance/fore) "amv" = ( -/obj/item/stack/sheet/metal/ten, -/obj/item/wrench, -/turf/open/floor/plating, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral, +/turf/open/floor/plasteel, /area/hallway/primary/port) "amw" = ( /obj/structure/window/reinforced, @@ -6961,10 +6989,6 @@ /obj/structure/window/reinforced, /turf/open/floor/plasteel/dark, /area/crew_quarters/fitness/recreation) -"amB" = ( -/obj/effect/decal/cleanable/blood/old, -/turf/open/floor/plating, -/area/hallway/primary/port) "amC" = ( /obj/structure/chair{ dir = 4 @@ -24081,9 +24105,10 @@ icon_state = "map-right-MS"; pixel_y = 32 }, -/turf/open/floor/plasteel/white/corner{ +/obj/effect/turf_decal/tile/blue{ dir = 4 }, +/turf/open/floor/plasteel, /area/hallway/secondary/entry) "aVE" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ @@ -31733,28 +31758,22 @@ /obj/structure/cable/yellow{ icon_state = "1-2" }, -/turf/open/floor/plasteel/white/corner, +/turf/open/floor/plasteel, /area/hallway/secondary/entry) "bjX" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 +/obj/effect/turf_decal/tile/blue{ + dir = 4 }, -/obj/machinery/door/firedoor, -/turf/open/floor/plasteel, -/area/hallway/primary/port) +/turf/open/floor/plasteel/cafeteria, +/area/hallway/secondary/entry) "bjY" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, -/obj/machinery/light{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, +/obj/machinery/door/firedoor, /turf/open/floor/plasteel, /area/hallway/primary/port) "bjZ" = ( @@ -31814,6 +31833,12 @@ dir = 1 }, /obj/structure/cable, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, /turf/open/floor/plasteel, /area/hallway/primary/port) "bke" = ( @@ -31826,6 +31851,9 @@ /obj/effect/turf_decal/tile/neutral{ dir = 1 }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, /turf/open/floor/plasteel, /area/hallway/primary/port) "bkf" = ( @@ -31845,6 +31873,9 @@ /obj/effect/turf_decal/tile/neutral{ dir = 1 }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, /turf/open/floor/plasteel, /area/hallway/primary/port) "bkg" = ( @@ -32823,39 +32854,23 @@ /obj/machinery/atmospherics/components/unary/vent_pump/on{ dir = 8 }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/corner, /obj/structure/cable/yellow{ icon_state = "1-2" }, /obj/structure/cable/yellow{ icon_state = "2-4" }, -/turf/open/floor/plasteel/white/corner, +/turf/open/floor/plasteel, /area/hallway/secondary/entry) "blU" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/stripes/line, -/obj/machinery/door/firedoor, /obj/structure/cable/yellow{ icon_state = "4-8" }, -/turf/open/floor/plasteel, -/area/hallway/primary/port) -"blV" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 8 +/obj/effect/turf_decal/tile/blue{ + dir = 4 }, -/obj/effect/turf_decal/stripes/line, -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/turf/open/floor/plasteel, -/area/hallway/primary/port) +/turf/open/floor/plasteel/white/corner, +/area/hallway/secondary/entry) "blW" = ( /obj/effect/turf_decal/tile/neutral{ dir = 1 @@ -32864,7 +32879,6 @@ /obj/effect/turf_decal/tile/neutral{ dir = 8 }, -/obj/effect/turf_decal/stripes/line, /obj/structure/cable/yellow{ icon_state = "4-8" }, @@ -32875,7 +32889,6 @@ /obj/effect/turf_decal/tile/neutral{ dir = 8 }, -/obj/effect/turf_decal/stripes/line, /obj/structure/cable/yellow{ icon_state = "4-8" }, @@ -32890,7 +32903,6 @@ /obj/effect/turf_decal/tile/neutral{ dir = 8 }, -/obj/effect/turf_decal/stripes/line, /obj/structure/cable/yellow{ icon_state = "4-8" }, @@ -32904,7 +32916,6 @@ /obj/effect/turf_decal/tile/neutral{ dir = 8 }, -/obj/effect/turf_decal/stripes/line, /obj/structure/cable/yellow{ icon_state = "4-8" }, @@ -32918,7 +32929,6 @@ /obj/effect/turf_decal/tile/neutral{ dir = 8 }, -/obj/effect/turf_decal/stripes/line, /obj/structure/cable/yellow{ icon_state = "4-8" }, @@ -32931,10 +32941,13 @@ /obj/effect/turf_decal/tile/neutral{ dir = 8 }, -/obj/effect/turf_decal/stripes/line, /obj/structure/cable/yellow{ icon_state = "4-8" }, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral, /turf/open/floor/plasteel, /area/hallway/primary/port) "bmc" = ( @@ -32944,8 +32957,8 @@ /obj/structure/cable/yellow{ icon_state = "4-8" }, -/obj/effect/turf_decal/stripes/corner{ - dir = 1 +/obj/effect/turf_decal/tile/neutral{ + dir = 8 }, /turf/open/floor/plasteel, /area/hallway/primary/port) @@ -32956,6 +32969,9 @@ /obj/structure/cable/yellow{ icon_state = "2-8" }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, /turf/open/floor/plasteel, /area/hallway/primary/port) "bme" = ( @@ -33830,30 +33846,9 @@ }, /turf/open/floor/plasteel, /area/hallway/secondary/entry) -"bnL" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/machinery/newscaster{ - pixel_x = 28; - pixel_y = 1 - }, -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/turf/open/floor/plasteel/white/corner, -/area/hallway/secondary/entry) "bnR" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/obj/effect/turf_decal/bot, -/obj/structure/sign/mining, -/turf/open/floor/plasteel, +/obj/structure/chair/comfy, +/turf/open/floor/plasteel/grimy, /area/hallway/primary/port) "bnS" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, @@ -33863,7 +33858,7 @@ /obj/effect/turf_decal/tile/neutral{ dir = 1 }, -/obj/effect/turf_decal/stripes/line{ +/obj/effect/turf_decal/tile/neutral{ dir = 8 }, /turf/open/floor/plasteel, @@ -33878,6 +33873,9 @@ /obj/structure/cable/yellow{ icon_state = "1-2" }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, /turf/open/floor/plasteel, /area/hallway/primary/port) "bnU" = ( @@ -34956,29 +34954,19 @@ "bqc" = ( /obj/machinery/holopad, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/machinery/light{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, /obj/structure/cable/yellow{ icon_state = "1-2" }, -/turf/open/floor/plasteel/white/corner, +/obj/structure/cable/yellow{ + icon_state = "2-4" + }, +/turf/open/floor/plasteel, /area/hallway/secondary/entry) "bqd" = ( -/obj/machinery/door/firedoor, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/stripes/line, /obj/structure/cable/yellow{ icon_state = "4-8" }, +/obj/machinery/door/firedoor, /turf/open/floor/plasteel, /area/hallway/primary/port) "bqj" = ( @@ -34987,7 +34975,7 @@ /obj/effect/turf_decal/tile/neutral{ dir = 1 }, -/obj/effect/turf_decal/stripes/line{ +/obj/effect/turf_decal/tile/neutral{ dir = 8 }, /turf/open/floor/plasteel, @@ -36217,16 +36205,10 @@ /area/hallway/secondary/entry) "bso" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, /obj/structure/cable/yellow{ icon_state = "1-2" }, -/turf/open/floor/plasteel/white/corner, +/turf/open/floor/plasteel, /area/hallway/secondary/entry) "bsu" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ @@ -36236,7 +36218,7 @@ /obj/effect/turf_decal/tile/neutral{ dir = 1 }, -/obj/effect/turf_decal/stripes/line{ +/obj/effect/turf_decal/tile/neutral{ dir = 8 }, /turf/open/floor/plasteel, @@ -36248,6 +36230,7 @@ /obj/structure/cable/yellow{ icon_state = "1-2" }, +/obj/effect/turf_decal/tile/neutral, /turf/open/floor/plasteel, /area/hallway/primary/port) "bsw" = ( @@ -37020,29 +37003,25 @@ /area/hallway/secondary/entry) "btY" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/structure/disposalpipe/segment, /obj/effect/turf_decal/tile/neutral{ dir = 1 }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 +/obj/structure/disposalpipe/segment{ + dir = 9 }, -/obj/machinery/camera{ - c_tag = "Port Primary Hallway - Port"; - dir = 4 +/obj/effect/turf_decal/tile/neutral{ + dir = 8 }, /turf/open/floor/plasteel, /area/hallway/primary/port) "btZ" = ( -/obj/machinery/light{ - dir = 4 - }, /obj/effect/turf_decal/tile/neutral{ dir = 4 }, /obj/structure/cable/yellow{ icon_state = "1-2" }, +/obj/effect/turf_decal/tile/neutral, /turf/open/floor/plasteel, /area/hallway/primary/port) "bua" = ( @@ -37847,26 +37826,23 @@ /turf/open/floor/plasteel, /area/hallway/secondary/entry) "bvK" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel, /area/hallway/secondary/entry) "bvL" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 4 +/obj/structure/cable/yellow{ + icon_state = "2-4" }, /obj/structure/cable/yellow{ icon_state = "1-2" }, -/turf/open/floor/plasteel/white/corner, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel, /area/hallway/secondary/entry) "bvT" = ( /obj/structure/disposalpipe/segment{ @@ -37878,15 +37854,16 @@ /turf/open/floor/plating, /area/maintenance/department/science/xenobiology) "bvV" = ( -/obj/structure/extinguisher_cabinet{ - pixel_x = 27 - }, /obj/effect/turf_decal/tile/neutral{ dir = 4 }, +/obj/structure/cable/yellow{ + icon_state = "1-8" + }, /obj/structure/cable/yellow{ icon_state = "1-2" }, +/obj/effect/turf_decal/tile/neutral, /turf/open/floor/plasteel, /area/hallway/primary/port) "bvW" = ( @@ -38677,28 +38654,36 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, -/turf/open/floor/plasteel, +/obj/structure/cable/yellow{ + icon_state = "2-4" + }, +/turf/open/floor/plasteel/white/corner, /area/hallway/secondary/entry) "bxC" = ( +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 9 }, -/turf/open/floor/plasteel, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel/white/corner, /area/hallway/secondary/entry) "bxD" = ( /obj/effect/turf_decal/tile/blue{ - dir = 4 + dir = 8 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/machinery/light{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 4 +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 5 }, /obj/structure/cable/yellow{ icon_state = "1-2" }, +/obj/structure/cable/yellow{ + icon_state = "2-8" + }, /turf/open/floor/plasteel/white/corner, /area/hallway/secondary/entry) "bxL" = ( @@ -38718,15 +38703,13 @@ /obj/effect/turf_decal/tile/neutral{ dir = 4 }, -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, /obj/structure/cable/yellow{ icon_state = "1-4" }, -/obj/structure/cable/yellow{ - icon_state = "2-4" +/obj/effect/turf_decal/tile/neutral{ + dir = 8 }, +/obj/effect/turf_decal/tile/neutral, /turf/open/floor/plasteel, /area/hallway/primary/port) "bxO" = ( @@ -39242,7 +39225,7 @@ dir = 4 }, /obj/machinery/computer/station_alert, -/obj/machinery/atmospherics/pipe/simple/orange/visible{ +/obj/machinery/atmospherics/pipe/simple/orange/hidden{ dir = 4 }, /turf/open/floor/plasteel/dark/corner{ @@ -39262,7 +39245,7 @@ dir = 4 }, /obj/structure/closet/secure_closet/atmospherics, -/obj/machinery/atmospherics/pipe/simple/orange/visible{ +/obj/machinery/atmospherics/pipe/simple/orange/hidden{ dir = 4 }, /turf/open/floor/plasteel/dark/corner{ @@ -39279,10 +39262,10 @@ dir = 4 }, /obj/structure/closet/secure_closet/atmospherics, -/obj/machinery/atmospherics/pipe/simple/orange/visible{ +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/atmospherics/pipe/simple/orange/hidden{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel/dark/corner{ dir = 1 }, @@ -39295,9 +39278,6 @@ pixel_y = 24 }, /obj/machinery/computer/atmos_control, -/obj/machinery/atmospherics/pipe/simple/orange/visible{ - dir = 4 - }, /turf/open/floor/plasteel/checker, /area/engine/atmos) "byW" = ( @@ -39311,7 +39291,7 @@ dir = 4 }, /obj/machinery/computer/atmos_control, -/obj/machinery/atmospherics/pipe/simple/orange/visible{ +/obj/machinery/atmospherics/pipe/simple/orange/hidden{ dir = 4 }, /turf/open/floor/plasteel/checker, @@ -39330,12 +39310,12 @@ pixel_x = -26 }, /obj/machinery/pipedispenser/disposal/transit_tube, -/obj/machinery/atmospherics/pipe/simple/orange/visible{ - dir = 4 - }, /obj/effect/turf_decal/stripes/line{ dir = 6 }, +/obj/machinery/atmospherics/pipe/simple/orange/hidden{ + dir = 4 + }, /turf/open/floor/plasteel, /area/engine/atmos) "byY" = ( @@ -39343,7 +39323,7 @@ /obj/structure/cable/yellow{ icon_state = "1-2" }, -/obj/machinery/atmospherics/pipe/simple/orange/visible{ +/obj/machinery/atmospherics/pipe/simple/orange/hidden{ dir = 4 }, /turf/open/floor/plasteel, @@ -39356,14 +39336,14 @@ dir = 8 }, /obj/machinery/pipedispenser, -/obj/machinery/atmospherics/pipe/simple/orange/visible{ - dir = 4 - }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/camera{ c_tag = "Atmospherics - Entrance"; dir = 8 }, +/obj/machinery/atmospherics/pipe/simple/orange/hidden{ + dir = 4 + }, /turf/open/floor/plasteel, /area/engine/atmos) "bza" = ( @@ -39609,23 +39589,14 @@ /turf/open/floor/plasteel/dark, /area/aisat) "bzw" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/machinery/door/firedoor, -/obj/machinery/newscaster{ - pixel_x = 28; - pixel_y = 1 +/obj/machinery/door/airlock{ + name = "Port Emergency Storage" }, /obj/structure/cable/yellow{ icon_state = "1-2" }, -/turf/open/floor/plasteel/white/corner, -/area/hallway/secondary/entry) +/turf/open/floor/plating, +/area/maintenance/port) "bzx" = ( /turf/closed/wall, /area/security/vacantoffice) @@ -40285,45 +40256,22 @@ /obj/effect/turf_decal/bot, /turf/open/floor/plasteel, /area/hallway/secondary/entry) -"bBd" = ( -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/obj/structure/cable/yellow{ - icon_state = "2-4" - }, -/turf/open/floor/plasteel, -/area/hallway/secondary/entry) "bBf" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 1 +/obj/structure/table/wood, +/obj/machinery/light_switch{ + pixel_x = -28 }, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/turf/open/floor/plasteel, -/area/hallway/primary/port) +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/item/folder, +/turf/open/floor/wood, +/area/security/vacantoffice) "bBg" = ( /turf/open/floor/wood, /area/security/vacantoffice) "bBh" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/structure/cable/yellow{ - icon_state = "2-8" - }, -/obj/structure/cable/yellow{ - icon_state = "2-4" - }, -/turf/open/floor/plasteel, +/obj/structure/table/wood, +/obj/item/reagent_containers/food/snacks/chips, +/turf/open/floor/plasteel/grimy, /area/hallway/primary/port) "bBi" = ( /obj/structure/table/wood, @@ -41039,33 +40987,29 @@ /obj/structure/cable/yellow{ icon_state = "1-2" }, -/turf/open/floor/plasteel/white/corner, -/area/hallway/secondary/entry) -"bCI" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, /obj/effect/turf_decal/tile/blue{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 5 +/turf/open/floor/plasteel/white/corner, +/area/hallway/secondary/entry) +"bCI" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 6 }, /obj/structure/cable/yellow{ icon_state = "1-2" }, -/turf/open/floor/plasteel/white/corner, -/area/hallway/secondary/entry) +/turf/open/floor/plating, +/area/maintenance/port) "bCJ" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 +/obj/item/storage/toolbox/emergency, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 10 }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 +/turf/open/floor/plating{ + icon_state = "panelscorched" }, -/obj/machinery/door/firedoor, -/turf/open/floor/plasteel, -/area/hallway/primary/port) +/area/maintenance/port) "bCK" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 @@ -41074,66 +41018,35 @@ /turf/open/floor/plating, /area/maintenance/starboard) "bCL" = ( -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ +/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ dir = 1 }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/machinery/firealarm{ - pixel_y = -24 - }, -/turf/open/floor/plasteel, -/area/hallway/primary/port) +/turf/open/floor/wood, +/area/security/vacantoffice) "bCM" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/item/radio/intercom{ - pixel_y = -28 - }, -/turf/open/floor/plasteel, -/area/hallway/primary/port) +/obj/structure/table/wood, +/turf/open/floor/wood, +/area/security/vacantoffice) "bCN" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/effect/turf_decal/stripes/line{ dir = 8 }, /obj/machinery/door/firedoor, -/obj/machinery/power/apc{ - areastring = "/area/hallway/secondary/entry"; - dir = 8; - name = "Arrivals APC"; - pixel_x = -26 - }, -/obj/structure/cable/yellow{ - icon_state = "0-4" - }, /turf/open/floor/plasteel, /area/hallway/secondary/entry) "bCP" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/structure/sign/map/right{ - desc = "A framed picture of the station. Clockwise from security at the top (red), you see engineering (yellow), science (purple), escape (red and white), medbay (green), arrivals (blue and white), and finally cargo (brown)."; - icon_state = "map-right-MS"; - pixel_y = -32 - }, -/turf/open/floor/plasteel, -/area/hallway/primary/port) +/turf/open/floor/plating, +/area/crew_quarters/toilet/auxiliary) "bCQ" = ( /obj/machinery/door/firedoor, -/obj/structure/cable/yellow{ - icon_state = "2-8" +/obj/effect/turf_decal/tile/blue{ + dir = 4 }, -/turf/open/floor/plasteel, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/turf/open/floor/plasteel/white/corner, /area/hallway/secondary/entry) "bCR" = ( /obj/machinery/power/apc/highcap/five_k{ @@ -41143,7 +41056,7 @@ }, /obj/structure/cable/yellow, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 5 + dir = 9 }, /turf/open/floor/plasteel, /area/crew_quarters/toilet/auxiliary) @@ -41152,9 +41065,6 @@ dir = 8; pixel_x = 24 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 10 - }, /turf/open/floor/plasteel, /area/crew_quarters/toilet/auxiliary) "bCV" = ( @@ -41792,44 +41702,43 @@ /turf/open/floor/plasteel/white/corner, /area/hallway/secondary/entry) "bEo" = ( -/obj/machinery/door/airlock{ - name = "Port Emergency Storage" - }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/item/storage/box/lights/mixed, /obj/structure/cable/yellow{ icon_state = "1-2" }, /turf/open/floor/plating, /area/maintenance/port) "bEp" = ( -/obj/machinery/door/firedoor, -/turf/open/floor/plasteel, -/area/hallway/secondary/entry) +/obj/machinery/vending/coffee, +/turf/open/floor/plasteel/dark, +/area/hallway/primary/port) "bEq" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/turf/closed/wall, -/area/security/vacantoffice) -"bEs" = ( -/obj/structure/table/wood, -/obj/item/paper_bin{ - pixel_x = -2; - pixel_y = 6 - }, -/obj/machinery/newscaster{ - pixel_y = 32 +/obj/structure/light_construct{ + dir = 8 }, /turf/open/floor/wood, /area/security/vacantoffice) -"bEt" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 +"bEs" = ( +/obj/effect/turf_decal/tile/blue{ + dir = 4 }, -/obj/effect/turf_decal/stripes/line{ +/obj/machinery/power/apc{ + areastring = "/area/hallway/secondary/entry"; + dir = 4; + name = "Arrivals APC"; + pixel_x = 26 + }, +/obj/structure/cable/yellow{ + icon_state = "0-8" + }, +/turf/open/floor/plasteel/white/corner, +/area/hallway/secondary/entry) +"bEt" = ( +/obj/structure/chair/comfy{ dir = 8 }, -/obj/machinery/door/firedoor, -/turf/open/floor/plasteel, +/turf/open/floor/plasteel/grimy, /area/hallway/primary/port) "bEu" = ( /obj/machinery/door/airlock{ @@ -42693,7 +42602,7 @@ name = "Distribution Loop"; req_access_txt = "24" }, -/obj/machinery/atmospherics/pipe/simple/orange/visible, +/obj/machinery/atmospherics/pipe/simple/orange/hidden, /turf/open/floor/plasteel, /area/engine/atmos) "bFQ" = ( @@ -42811,14 +42720,11 @@ /turf/open/floor/plasteel/grimy, /area/tcommsat/computer) "bGj" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 4 +/obj/machinery/vending/cola/random, +/obj/machinery/newscaster{ + pixel_x = -30 }, -/obj/machinery/door/firedoor, -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/turf/open/floor/plasteel, +/turf/open/floor/plasteel/dark, /area/hallway/primary/port) "bGk" = ( /obj/structure/cable/yellow{ @@ -42842,8 +42748,9 @@ /turf/open/floor/plasteel, /area/crew_quarters/toilet/auxiliary) "bGm" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 6 +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/machinery/shower{ + dir = 8 }, /turf/open/floor/plasteel, /area/crew_quarters/toilet/auxiliary) @@ -43438,18 +43345,20 @@ /turf/open/floor/plasteel/white/corner, /area/hallway/secondary/entry) "bHJ" = ( -/obj/item/tank/internals/oxygen, -/obj/item/tank/internals/oxygen, -/obj/item/clothing/mask/breath, -/obj/item/clothing/mask/breath, -/obj/machinery/light/small{ +/obj/effect/turf_decal/tile/blue{ dir = 4 }, -/turf/open/floor/plating, -/area/maintenance/port) +/obj/machinery/newscaster{ + pixel_x = 28; + pixel_y = 1 + }, +/turf/open/floor/plasteel/white/corner, +/area/hallway/secondary/entry) "bHK" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ - dir = 1 +/obj/structure/table/wood, +/obj/item/book/manual/wiki/security_space_law{ + pixel_x = -3; + pixel_y = 5 }, /turf/open/floor/wood, /area/security/vacantoffice) @@ -43463,9 +43372,11 @@ /turf/open/floor/carpet, /area/security/vacantoffice) "bHM" = ( -/obj/structure/table/wood, -/turf/open/floor/wood, -/area/security/vacantoffice) +/obj/structure/chair/comfy{ + dir = 4 + }, +/turf/open/floor/plasteel/grimy, +/area/hallway/primary/port) "bHN" = ( /obj/machinery/shower{ dir = 4 @@ -44151,9 +44062,10 @@ /turf/open/floor/plasteel/grimy, /area/tcommsat/computer) "bJj" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 1 +/obj/machinery/door/airlock/maintenance{ + req_one_access_txt = "12;27;37" }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/structure/cable/yellow{ icon_state = "1-2" }, @@ -44191,26 +44103,23 @@ /turf/open/floor/plasteel/white/corner, /area/hallway/secondary/entry) "bJp" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/turf/open/floor/plasteel, -/area/hallway/secondary/entry) +/obj/machinery/vending/snack/random, +/turf/open/floor/plasteel/dark, +/area/hallway/primary/port) "bJq" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/item/storage/box/lights/mixed, /obj/structure/cable/yellow{ icon_state = "1-2" }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, /turf/open/floor/plating, /area/maintenance/port) "bJr" = ( -/obj/machinery/atmospherics/components/unary/portables_connector/visible{ - dir = 1 - }, -/obj/machinery/portable_atmospherics/canister/air, -/turf/open/floor/plating, -/area/maintenance/port) +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plasteel, +/area/hallway/secondary/entry) "bJs" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 10 @@ -44224,9 +44133,6 @@ /obj/item/radio/intercom{ pixel_x = -29 }, -/obj/machinery/light/small{ - dir = 8 - }, /turf/open/floor/wood, /area/security/vacantoffice) "bJu" = ( @@ -44250,8 +44156,10 @@ /turf/open/floor/carpet, /area/security/vacantoffice) "bJw" = ( -/obj/structure/chair/office{ - dir = 8 +/obj/structure/table/wood, +/obj/item/paper_bin{ + pixel_x = -2; + pixel_y = 6 }, /turf/open/floor/carpet, /area/security/vacantoffice) @@ -44260,15 +44168,6 @@ dir = 8; pixel_x = 24 }, -/obj/structure/table/wood, -/obj/item/camera_film{ - pixel_x = 6; - pixel_y = 7 - }, -/obj/item/camera_film{ - pixel_x = -3; - pixel_y = 5 - }, /turf/open/floor/wood, /area/security/vacantoffice) "bJy" = ( @@ -44764,19 +44663,19 @@ /turf/open/floor/plasteel, /area/engine/atmos) "bKy" = ( -/obj/machinery/atmospherics/pipe/simple/orange/visible{ +/obj/machinery/atmospherics/pipe/simple/orange/hidden{ dir = 4 }, /turf/closed/wall, /area/engine/atmos) "bKz" = ( -/obj/machinery/atmospherics/pipe/simple/orange/visible{ +/obj/machinery/atmospherics/pipe/simple/orange/hidden{ dir = 10 }, /turf/closed/wall, /area/engine/atmos) "bKA" = ( -/obj/machinery/atmospherics/pipe/simple/orange/visible, +/obj/machinery/atmospherics/pipe/simple/orange/hidden, /turf/closed/wall, /area/engine/atmos) "bKB" = ( @@ -44956,15 +44855,11 @@ /turf/open/floor/plasteel/white/corner, /area/hallway/secondary/entry) "bKX" = ( -/obj/machinery/door/airlock/maintenance{ - req_one_access_txt = "12;27;37" +/obj/structure/chair/comfy{ + dir = 1 }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/turf/open/floor/plating, -/area/maintenance/port) +/turf/open/floor/plasteel/grimy, +/area/hallway/primary/port) "bKY" = ( /obj/machinery/power/apc{ areastring = "/area/security/vacantoffice"; @@ -45503,7 +45398,7 @@ /area/engine/atmos) "bMe" = ( /obj/effect/spawner/structure/window/reinforced, -/obj/machinery/atmospherics/pipe/simple/orange/visible, +/obj/machinery/atmospherics/pipe/simple/orange/hidden, /turf/open/floor/plating, /area/engine/atmos) "bMf" = ( @@ -45730,7 +45625,7 @@ /turf/open/floor/plasteel/white/corner, /area/hallway/secondary/entry) "bMC" = ( -/obj/structure/chair/office, +/obj/structure/chair/office/dark, /turf/open/floor/wood, /area/security/vacantoffice) "bMD" = ( @@ -45993,19 +45888,15 @@ /turf/open/floor/carpet, /area/bridge/showroom/corporate) "bNd" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ +/obj/item/tank/internals/oxygen, +/obj/item/tank/internals/oxygen, +/obj/item/clothing/mask/breath, +/obj/item/clothing/mask/breath, +/obj/machinery/light/small{ dir = 4 }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/machinery/camera{ - c_tag = "Port Primary Hallway - Mining Shuttle"; - dir = 1 - }, -/obj/effect/landmark/event_spawn, -/turf/open/floor/plasteel, -/area/hallway/primary/port) +/turf/open/floor/plating, +/area/maintenance/port) "bNe" = ( /obj/structure/table/wood, /obj/item/phone{ @@ -46049,17 +45940,11 @@ /turf/open/floor/wood, /area/bridge/showroom/corporate) "bNh" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 6 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/turf/open/floor/plasteel, -/area/hallway/primary/port) +/obj/structure/table/wood, +/obj/item/folder/red, +/obj/item/pen/red, +/turf/open/floor/wood, +/area/security/vacantoffice) "bNi" = ( /obj/structure/window/reinforced{ dir = 8 @@ -46322,12 +46207,17 @@ /turf/open/floor/wood, /area/crew_quarters/theatre) "bNK" = ( -/obj/machinery/disposal/bin, -/obj/structure/disposalpipe/trunk{ - dir = 1 +/obj/machinery/airalarm{ + dir = 8; + pixel_x = 24 }, -/turf/open/floor/plasteel, -/area/hallway/primary/port) +/obj/structure/table/wood, +/obj/item/paper_bin{ + pixel_x = -2; + pixel_y = 6 + }, +/turf/open/floor/wood, +/area/security/vacantoffice) "bNL" = ( /obj/structure/table, /obj/item/stock_parts/subspace/transmitter, @@ -47710,9 +47600,6 @@ dir = 8; pixel_x = 24 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 9 - }, /turf/open/floor/plating, /area/crew_quarters/toilet/auxiliary) "bQQ" = ( @@ -65013,10 +64900,8 @@ /obj/machinery/light_switch{ pixel_y = 28 }, -/obj/structure/closet/l3closet/scientist{ - pixel_x = -2 - }, /obj/effect/turf_decal/stripes/line, +/obj/structure/closet/bombcloset, /turf/open/floor/plasteel, /area/science/mixing) "cyA" = ( @@ -65047,7 +64932,6 @@ "cyD" = ( /obj/machinery/atmospherics/components/unary/portables_connector/visible, /obj/effect/turf_decal/stripes/line, -/obj/machinery/portable_atmospherics/canister, /turf/open/floor/plasteel, /area/science/mixing) "cyE" = ( @@ -65059,7 +64943,6 @@ network = list("ss13","rd") }, /obj/machinery/atmospherics/components/unary/portables_connector/visible, -/obj/machinery/portable_atmospherics/canister, /obj/effect/turf_decal/stripes/line, /turf/open/floor/plasteel, /area/science/mixing) @@ -65092,7 +64975,9 @@ dir = 4 }, /obj/machinery/portable_atmospherics/canister, -/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, /turf/open/floor/plasteel, /area/science/mixing) "cyI" = ( @@ -65108,11 +64993,7 @@ /obj/machinery/light_switch{ pixel_y = 28 }, -/obj/machinery/portable_atmospherics/scrubber, -/obj/effect/turf_decal/stripes/line{ - dir = 9 - }, -/turf/open/floor/plasteel, +/turf/open/floor/plasteel/white, /area/science/mixing) "cyK" = ( /turf/closed/wall/r_wall, @@ -65523,10 +65404,14 @@ /turf/open/floor/plasteel/white, /area/science/mixing) "czB" = ( -/obj/machinery/portable_atmospherics/pump, -/obj/effect/turf_decal/stripes/line{ - dir = 8 +/obj/machinery/light{ + dir = 4 }, +/obj/structure/window/reinforced{ + dir = 1; + pixel_y = 2 + }, +/obj/machinery/portable_atmospherics/pump, /turf/open/floor/plasteel, /area/science/mixing) "czC" = ( @@ -66204,12 +66089,15 @@ /turf/open/floor/plasteel/white, /area/science/mixing) "cAG" = ( -/obj/structure/window/reinforced, -/obj/machinery/portable_atmospherics/scrubber, -/obj/item/storage/firstaid/toxin, -/obj/effect/turf_decal/stripes/line{ - dir = 10 +/obj/structure/extinguisher_cabinet{ + pixel_x = 27 }, +/obj/machinery/camera{ + c_tag = "Toxins - Mixing Area"; + dir = 8; + network = list("ss13","rd") + }, +/obj/machinery/portable_atmospherics/scrubber, /turf/open/floor/plasteel, /area/science/mixing) "cAH" = ( @@ -66924,10 +66812,10 @@ /turf/open/floor/plasteel/white, /area/science/research) "cCt" = ( -/obj/structure/closet/bombcloset, /obj/effect/turf_decal/stripes/line{ dir = 1 }, +/obj/machinery/portable_atmospherics/canister, /turf/open/floor/plasteel, /area/science/mixing) "cCu" = ( @@ -68084,19 +67972,14 @@ dir = 1; pixel_y = 2 }, -/obj/machinery/light{ - dir = 4 - }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/effect/turf_decal/stripes/line{ - dir = 5 - }, /turf/open/floor/plasteel, /area/science/mixing) "cEz" = ( -/obj/structure/closet/wardrobe/grey, -/turf/open/floor/plating, -/area/maintenance/starboard/aft) +/obj/machinery/portable_atmospherics/scrubber, +/obj/item/storage/firstaid/toxin, +/turf/open/floor/plasteel, +/area/science/mixing) "cEA" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, @@ -68481,18 +68364,7 @@ /turf/open/floor/plasteel/white, /area/science/mixing) "cFs" = ( -/obj/structure/extinguisher_cabinet{ - pixel_x = 27 - }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/machinery/camera{ - c_tag = "Toxins - Mixing Area"; - dir = 8; - network = list("ss13","rd") - }, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, /turf/open/floor/plasteel, /area/science/mixing) "cFu" = ( @@ -68978,9 +68850,6 @@ dir = 8 }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/effect/turf_decal/stripes/line{ - dir = 6 - }, /obj/machinery/portable_atmospherics/pump, /turf/open/floor/plasteel, /area/science/mixing) @@ -70211,9 +70080,7 @@ /obj/structure/cable/yellow{ icon_state = "1-4" }, -/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plating, /area/maintenance/starboard/aft) "cIm" = ( @@ -79125,13 +78992,10 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, -/obj/machinery/door/firedoor, /obj/structure/sign/poster/official/random{ pixel_y = 32 }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, +/obj/machinery/door/firedoor, /turf/open/floor/plasteel, /area/hallway/primary/port) "dhQ" = ( @@ -79209,14 +79073,11 @@ /turf/open/floor/wood, /area/crew_quarters/theatre) "dhZ" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 4 +/obj/structure/urinal{ + pixel_y = 29 }, -/obj/structure/cable/yellow{ - icon_state = "1-8" - }, -/turf/open/floor/plasteel, -/area/hallway/primary/port) +/turf/open/floor/plating, +/area/crew_quarters/toilet/auxiliary) "dib" = ( /obj/structure/table/wood, /obj/item/lipstick{ @@ -79252,10 +79113,6 @@ /area/hallway/secondary/entry) "did" = ( /obj/structure/table/wood, -/obj/machinery/light_switch{ - pixel_x = -28 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/item/folder, /turf/open/floor/wood, /area/security/vacantoffice) @@ -79271,13 +79128,11 @@ /turf/open/floor/wood, /area/crew_quarters/theatre) "dig" = ( -/obj/machinery/airalarm{ - dir = 8; - pixel_x = 24 +/obj/item/kirbyplants{ + icon_state = "plant-03" }, -/obj/structure/table/wood, -/turf/open/floor/wood, -/area/security/vacantoffice) +/turf/open/floor/plasteel/grimy, +/area/hallway/primary/port) "dih" = ( /obj/machinery/light/small, /obj/structure/sign/poster/official/random{ @@ -79666,15 +79521,15 @@ }, /area/medical/medbay/aft) "diP" = ( -/obj/structure/cable/yellow{ - icon_state = "1-8" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 9 - }, /obj/structure/sign/poster/contraband/random{ pixel_y = -32 }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, /turf/open/floor/plating, /area/maintenance/starboard/aft) "diQ" = ( @@ -79850,20 +79705,10 @@ /turf/open/space/basic, /area/space) "djW" = ( -/obj/machinery/light{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, +/obj/effect/decal/cleanable/cobweb/cobweb2, +/obj/structure/reagent_dispensers/fueltank, /turf/open/floor/plasteel, -/area/hallway/primary/port) +/area/maintenance/port) "djX" = ( /obj/structure/closet/crate/coffin, /obj/machinery/door/window/eastleft{ @@ -80398,9 +80243,7 @@ pixel_y = -24 }, /obj/structure/cable/yellow, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden, /turf/open/floor/plating, /area/maintenance/starboard/aft) "dAh" = ( @@ -81264,6 +81107,12 @@ }, /turf/closed/wall, /area/maintenance/starboard) +"dQg" = ( +/obj/machinery/door/airlock/maintenance{ + req_one_access_txt = "12;27;37" + }, +/turf/open/floor/plating, +/area/maintenance/port) "dYu" = ( /obj/machinery/door/airlock/external{ name = "Auxiliary Airlock" @@ -81274,9 +81123,16 @@ /turf/open/floor/plating, /area/hallway/secondary/entry) "eiS" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/turf/open/floor/plasteel, -/area/crew_quarters/toilet/auxiliary) +/obj/machinery/disposal/bin, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/obj/machinery/camera{ + c_tag = "Port Primary Hallway - True Port"; + dir = 4 + }, +/turf/open/floor/plasteel/dark, +/area/hallway/primary/port) "eoK" = ( /obj/structure/disposalpipe/segment{ dir = 9 @@ -81380,6 +81236,12 @@ }, /turf/open/floor/plasteel/white, /area/science/circuit) +"fDG" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 6 + }, +/turf/open/floor/plasteel, +/area/crew_quarters/toilet/auxiliary) "fFM" = ( /obj/structure/cable/yellow{ icon_state = "4-8" @@ -81456,6 +81318,13 @@ }, /turf/open/floor/plating, /area/maintenance/starboard/aft) +"gGH" = ( +/obj/structure/cable/yellow{ + icon_state = "2-4" + }, +/obj/effect/spawner/lootdrop/maintenance, +/turf/open/floor/plating, +/area/maintenance/starboard/aft) "gGT" = ( /obj/effect/landmark/start/scientist, /obj/structure/chair/office/light{ @@ -81589,12 +81458,25 @@ /turf/open/floor/plasteel, /area/engine/atmos) "iSt" = ( -/obj/machinery/door/airlock/grunge, -/obj/structure/cable/yellow{ - icon_state = "1-2" +/obj/effect/turf_decal/tile/neutral{ + dir = 1 }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/effect/turf_decal/tile/blue{ + dir = 4 + }, +/turf/open/floor/plasteel/white/corner, +/area/hallway/secondary/entry) +"jdf" = ( +/obj/machinery/door/airlock{ + id_tag = "AuxShower"; + name = "Shower" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel, -/area/security/vacantoffice) +/area/crew_quarters/toilet/auxiliary) "jeV" = ( /obj/machinery/conveyor/inverted{ dir = 10; @@ -81662,15 +81544,18 @@ /turf/open/floor/plasteel, /area/engine/atmos) "jBe" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/effect/turf_decal/tile/neutral{ dir = 4 }, /obj/effect/turf_decal/tile/neutral{ dir = 8 }, -/obj/structure/sign/poster/official/random{ - pixel_y = -32 - }, /turf/open/floor/plasteel, /area/hallway/primary/port) "jKK" = ( @@ -81702,15 +81587,23 @@ /obj/effect/turf_decal/tile/neutral{ dir = 1 }, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/machinery/door/firedoor, /obj/structure/cable/yellow{ icon_state = "4-8" }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, /turf/open/floor/plasteel, /area/hallway/primary/port) +"jRo" = ( +/obj/structure/table/wood, +/obj/machinery/newscaster{ + pixel_y = 32 + }, +/obj/item/clipboard, +/obj/item/paper, +/turf/open/floor/wood, +/area/security/vacantoffice) "kfu" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel/white, @@ -81789,15 +81682,18 @@ /turf/open/floor/plasteel/white, /area/science/circuit) "kQP" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/machinery/navbeacon{ + codes_txt = "patrol;next_patrol=6-Port-Central"; + location = "5-Customs" + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" }, /obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/machinery/airalarm{ - dir = 1; - pixel_y = -22 + dir = 4 }, /turf/open/floor/plasteel, /area/hallway/primary/port) @@ -81843,6 +81739,9 @@ /turf/open/floor/plasteel/white, /area/science/circuit) "lws" = ( +/obj/structure/chair/office/dark{ + dir = 8 + }, /turf/open/floor/carpet, /area/security/vacantoffice) "lzk" = ( @@ -81920,31 +81819,34 @@ /turf/open/floor/plasteel/dark, /area/crew_quarters/cryopod) "maP" = ( -/obj/item/storage/toolbox/emergency, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 10 +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 }, -/turf/open/floor/plating{ - icon_state = "panelscorched" +/obj/structure/cable/yellow{ + icon_state = "4-8" }, -/area/maintenance/port) +/turf/open/floor/plasteel, +/area/hallway/primary/port) "mcS" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 9 - }, -/obj/structure/disposalpipe/segment{ - dir = 9 + dir = 4 }, /obj/effect/turf_decal/tile/neutral{ dir = 8 }, -/obj/structure/sign/map/left{ - desc = "A framed picture of the station. Clockwise from security at the top (red), you see engineering (yellow), science (purple), escape (red and white), medbay (green), arrivals (blue and white), and finally cargo (brown)."; - icon_state = "map-left-MS"; - pixel_y = -32 +/obj/effect/turf_decal/tile/blue{ + dir = 4 }, -/turf/open/floor/plasteel, -/area/hallway/primary/port) +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/obj/item/radio/intercom{ + name = "Station Intercom (General)"; + pixel_y = -28 + }, +/turf/open/floor/plasteel/white/corner, +/area/hallway/secondary/entry) "mjJ" = ( /obj/machinery/nuclearbomb/beer{ pixel_x = 2; @@ -81956,6 +81858,12 @@ /obj/structure/lattice, /turf/closed/wall, /area/crew_quarters/cryopod) +"mot" = ( +/obj/structure/chair/office/dark{ + dir = 8 + }, +/turf/open/floor/wood, +/area/security/vacantoffice) "mvj" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 @@ -81997,17 +81905,11 @@ }, /area/maintenance/port/aft) "nhy" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/stripes/corner{ +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, +/obj/effect/landmark/event_spawn, +/obj/machinery/door/firedoor, /turf/open/floor/plasteel, /area/hallway/primary/port) "njd" = ( @@ -82293,9 +82195,22 @@ /turf/open/floor/plasteel/dark, /area/crew_quarters/cryopod) "pHS" = ( -/obj/structure/closet/firecloset, -/turf/open/floor/plating, -/area/maintenance/port) +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/machinery/airalarm{ + dir = 1; + pixel_y = -22 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/turf/open/floor/plasteel, +/area/hallway/primary/port) "pMX" = ( /obj/structure/cable/yellow{ icon_state = "4-8" @@ -82328,6 +82243,15 @@ }, /turf/open/floor/plating, /area/maintenance/aft) +"pVL" = ( +/obj/structure/cable/yellow{ + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plating, +/area/maintenance/starboard/aft) "pZb" = ( /obj/structure/cable/yellow{ icon_state = "2-4" @@ -82340,6 +82264,13 @@ }, /turf/open/floor/plating, /area/maintenance/port) +"qkY" = ( +/obj/machinery/door/airlock/grunge, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/turf/open/floor/plasteel, +/area/security/vacantoffice) "qqg" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 6 @@ -82419,11 +82350,18 @@ /turf/open/floor/plasteel, /area/security/prison) "rbE" = ( -/obj/effect/turf_decal/tile/blue{ +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral{ dir = 8 }, -/turf/open/floor/plasteel/white/corner, -/area/hallway/secondary/entry) +/obj/machinery/firealarm{ + pixel_y = -24 + }, +/obj/effect/turf_decal/tile/neutral, +/turf/open/floor/plasteel, +/area/hallway/primary/port) "roa" = ( /obj/structure/chair/stool, /obj/machinery/light/small{ @@ -82472,19 +82410,16 @@ /turf/closed/wall, /area/quartermaster/miningoffice) "rNX" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, /obj/effect/turf_decal/tile/neutral{ - dir = 1 + dir = 8 }, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/machinery/navbeacon{ - codes_txt = "patrol;next_patrol=6-Port-Central"; - location = "5-Customs" - }, -/obj/structure/cable/yellow{ - icon_state = "4-8" +/obj/structure/sign/poster/official/random{ + pixel_y = -32 }, +/obj/effect/turf_decal/tile/neutral, /turf/open/floor/plasteel, /area/hallway/primary/port) "rQK" = ( @@ -82555,15 +82490,16 @@ /turf/open/floor/plasteel, /area/engine/atmos) "syk" = ( -/obj/machinery/door/airlock{ - id_tag = "AuxShower"; - name = "Shower" +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 +/obj/structure/cable/yellow{ + icon_state = "1-2" }, +/obj/effect/turf_decal/tile/neutral, /turf/open/floor/plasteel, -/area/crew_quarters/toilet/auxiliary) +/area/hallway/primary/port) "sFv" = ( /obj/structure/cable/yellow{ icon_state = "4-8" @@ -82615,6 +82551,10 @@ }, /turf/open/floor/plasteel/dark, /area/crew_quarters/cryopod) +"sZN" = ( +/obj/structure/closet/firecloset, +/turf/open/floor/plating, +/area/maintenance/port) "tap" = ( /obj/machinery/power/apc/auto_name/east, /obj/structure/cable/yellow{ @@ -82623,33 +82563,14 @@ /turf/open/floor/plasteel/dark, /area/crew_quarters/cryopod) "tre" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/effect/turf_decal/stripes/corner{ - dir = 8 - }, -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/structure/cable/yellow{ - icon_state = "2-8" - }, -/obj/structure/cable/yellow{ - icon_state = "2-4" +/obj/effect/turf_decal/stripes/line{ + dir = 1 }, /obj/structure/cable/yellow{ icon_state = "1-2" }, -/obj/structure/cable/yellow{ - icon_state = "1-4" - }, -/obj/structure/cable/yellow{ - icon_state = "1-8" - }, -/turf/open/floor/plasteel/white/corner, -/area/hallway/secondary/entry) +/turf/open/floor/plating, +/area/maintenance/port) "tsx" = ( /obj/structure/cable/yellow{ icon_state = "4-8" @@ -82682,6 +82603,13 @@ }, /turf/open/floor/plasteel/dark, /area/medical/morgue) +"tUa" = ( +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + dir = 1 + }, +/obj/machinery/portable_atmospherics/canister/air, +/turf/open/floor/plating, +/area/maintenance/port) "tVY" = ( /obj/structure/closet/crate, /obj/item/target/alien, @@ -82807,6 +82735,18 @@ }, /turf/open/floor/plasteel, /area/crew_quarters/fitness/recreation) +"vuY" = ( +/obj/structure/table/wood, +/obj/item/camera_film{ + pixel_x = 6; + pixel_y = 7 + }, +/obj/item/camera_film{ + pixel_x = -3; + pixel_y = 5 + }, +/turf/open/floor/wood, +/area/security/vacantoffice) "vxG" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 @@ -82861,10 +82801,21 @@ /turf/open/floor/plating, /area/security/prison) "wlH" = ( -/obj/effect/decal/cleanable/cobweb/cobweb2, -/obj/structure/reagent_dispensers/fueltank, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/item/radio/intercom{ + pixel_y = -28 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, /turf/open/floor/plasteel, -/area/maintenance/port) +/area/hallway/primary/port) "wmt" = ( /obj/effect/decal/cleanable/flour, /turf/open/floor/plating, @@ -82921,7 +82872,10 @@ /turf/open/floor/plasteel/dark, /area/crew_quarters/cryopod) "xfI" = ( -/obj/machinery/vending/cola/random, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/machinery/door/firedoor, /turf/open/floor/plasteel, /area/hallway/primary/port) "xgC" = ( @@ -82936,13 +82890,21 @@ /turf/open/floor/plasteel/white, /area/science/circuit) "xmb" = ( -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, /obj/effect/turf_decal/tile/neutral{ dir = 8 }, -/obj/structure/cable/yellow{ - icon_state = "1-2" +/obj/structure/sign/map/left{ + desc = "A framed picture of the station. Clockwise from security at the top (red), you see engineering (yellow), science (purple), escape (red and white), medbay (green), arrivals (blue and white), and finally cargo (brown)."; + icon_state = "map-left-MS"; + pixel_y = -32 }, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral, /turf/open/floor/plasteel, /area/hallway/primary/port) "xse" = ( @@ -83021,26 +82983,22 @@ /turf/open/floor/plasteel, /area/security/prison) "xLL" = ( -/obj/structure/table/wood, -/obj/item/folder/white{ - pixel_x = 4; - pixel_y = -3 +/obj/effect/turf_decal/tile/neutral{ + dir = 8 }, -/obj/item/book/manual/wiki/security_space_law{ - pixel_x = -3; - pixel_y = 5 +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, +/obj/structure/sign/map/right{ + desc = "A framed picture of the station. Clockwise from security at the top (red), you see engineering (yellow), science (purple), escape (red and white), medbay (green), arrivals (blue and white), and finally cargo (brown)."; + icon_state = "map-right-MS"; + pixel_y = -32 }, -/turf/open/floor/wood, -/area/security/vacantoffice) +/obj/effect/turf_decal/tile/neutral, +/turf/open/floor/plasteel, +/area/hallway/primary/port) "xTV" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 6 - }, -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/turf/open/floor/plating, -/area/maintenance/port) +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/closed/wall, +/area/security/vacantoffice) "xVl" = ( /turf/closed/wall, /area/hallway/secondary/service) @@ -96315,7 +96273,7 @@ bxL bvJ bxB bCQ -bBd +bCH bCH bEn dic @@ -96568,18 +96526,18 @@ bjV bnK bqb bbI -btT +bJr bvK bxC -bEp -bJp -rbE alK alK alK alK alK alK +dQg +alK +alK alK bPF asa @@ -96822,7 +96780,7 @@ bgv biv bjW blT -bnL +bso bqc bso bso @@ -96833,9 +96791,9 @@ tre bCI bEo bJj -xTV +bbL bJq -bKX +bbL bbL bbL bPG @@ -97079,20 +97037,20 @@ bbK biw bjX blU -baE -baE -baE -baE -baE -baE -baE -jPu -bCJ +aiT +bEs +bHJ +aiT +iSt +mcS alK auF -maP -bJr +bCJ +tUa alK +apz +aob +alC aqK aqO alC @@ -97335,21 +97293,21 @@ beL bgw bix bjY -blV +bqd baE -afQ -afQ -afQ -afZ -afQ baE +baE +baE +bqd +nhy +alK djW bNd +sZN alK -wlH -bHJ -pHS -alK +amZ +aob +aob oWR aob bPH @@ -97593,15 +97551,15 @@ bgx biy bjZ blW -baE +ajk afZ -afQ +bHM ajs -afQ -afQ -baE -bBf -kQP +jBe +pHS +bzx +bzx +bzx bzx bzx bzx @@ -97850,13 +97808,13 @@ bgy biz bka blX -baE -afQ -afQ -afQ -afQ -afQ -baE +bnR +ahT +ahT +bKX +jPu +rbE +xTV bBf bCL bEq @@ -98105,19 +98063,19 @@ bda beO bgz biA -bnR +bka blY aeD agQ -afQ -afQ -afQ -afQ -baE +ahT +aeD +kQP rNX -jBe bzx bBg +bBg +bBg +bBg pZb bJu bKZ @@ -98364,16 +98322,16 @@ bgA biz bkb blZ -baE +bnR ahT -afQ -afQ +ahT +bKX aju -afQ -baE -bBh -xmb -iSt +syk +qkY +bGk +bGk +bGk bGk bKZ bHL @@ -98621,18 +98579,18 @@ bpt bcW bkc bma -baE -ahT +bBh +bEt aiW -afQ +dig amv -afQ -baE -bBf +wlH +bzx +bBi bCM -bzx -bzx -bHM +bBg +bBg +bBg bJv drp heE @@ -98879,21 +98837,21 @@ bcW dhP bqd baE -aiT -ajk -afQ -amB -afQ baE -djW -bsx +baE +baE +bqd xfI bzx -bEs +jRo +mot +bBg +bBg +bBg bJw lws bMC -xLL +bOg bzx bRe xDn @@ -99135,18 +99093,18 @@ bgC biB bkd bmb -baE -baE -baE -baE -baE -baE -baE -bBf +bEp +bGj +bJp +eiS +jBe +xmb +bzx +vuY bNh bNK -bzx -dig +bBg +bBg bJx bLa bMD @@ -99396,12 +99354,12 @@ bnS bqj bsu btY -bqj -bsu -bEt -nhy -mcS -bvW +maP +xLL +bzx +bzx +bzx +bzx bzx bzx bzx @@ -99655,7 +99613,7 @@ bsv btZ bvV bxN -bGj +bvW dhZ bCP bvW @@ -99913,9 +99871,9 @@ baE bvW bxO bvW -bvW -bvW -bvW +dhZ +fDG +jdf bGm bHO bvW @@ -100173,7 +100131,7 @@ bzA bBm bCR bvW -syk +bvW bvW bvW bLd @@ -100429,7 +100387,7 @@ bxQ bzB bBn bCS -eiS +bBn bQN dih bvW @@ -117170,16 +117128,16 @@ cvX cwY crR cyJ -czB -cAG +cBs +cBs cBB cCC cDp +czB +cAG +cEz cyK -cyK -cyK -cyK -cPe +dxQ dvY cJY cKM @@ -117433,9 +117391,9 @@ cBC cyK cyK cyK -dvY -dyc -cub +cyK +cyK +cyK diP dvY cJZ @@ -117691,9 +117649,9 @@ cCD uun rSL dvY -cEz -dxQ dyc +gGH +pVL dvY cKa cKO diff --git a/_maps/map_files/Snaxi/Snaxi.dmm b/_maps/map_files/Snaxi/Snaxi.dmm index edd3cfd0fb..43e7915ca4 100644 --- a/_maps/map_files/Snaxi/Snaxi.dmm +++ b/_maps/map_files/Snaxi/Snaxi.dmm @@ -1,4 +1,309 @@ //MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"aaa" = ( +/obj/effect/landmark/event_spawn, +/mob/living/simple_animal/hostile/retaliate/goat{ + name = "Pete" + }, +/turf/open/floor/plasteel/freezer, +/area/crew_quarters/kitchen) +"aab" = ( +/obj/structure/curtain, +/obj/machinery/shower{ + pixel_y = 20 + }, +/turf/open/floor/plasteel/white, +/area/crew_quarters/dorms) +"aac" = ( +/obj/machinery/shower{ + pixel_y = 20 + }, +/obj/structure/curtain, +/turf/open/floor/plasteel/white, +/area/crew_quarters/dorms) +"aad" = ( +/obj/item/radio/intercom{ + name = "Station Intercom (General)"; + pixel_x = 30 + }, +/turf/open/floor/plasteel/freezer, +/area/crew_quarters/dorms) +"aae" = ( +/obj/machinery/button/door{ + id = "Bath1"; + name = "Door Bolt Control"; + normaldoorcontrol = 1; + pixel_x = 24; + pixel_y = -5; + specialfunctions = 4 + }, +/obj/machinery/light/small{ + dir = 8 + }, +/obj/structure/toilet/secret/low_loot{ + pixel_y = 14 + }, +/turf/open/floor/plasteel/freezer, +/area/crew_quarters/dorms) +"aaf" = ( +/obj/machinery/light, +/obj/structure/urinal{ + pixel_y = 32 + }, +/turf/open/floor/plasteel/freezer, +/area/crew_quarters/dorms) +"aag" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/firedoor/border_only{ + name = "south facing firelock" + }, +/mob/living/carbon/monkey/punpun, +/turf/open/floor/plasteel/grimy, +/area/crew_quarters/bar) +"aah" = ( +/obj/structure/table/reinforced, +/obj/item/clothing/glasses/meson{ + pixel_y = 4 + }, +/obj/item/cartridge/atmos, +/obj/item/cartridge/engineering{ + pixel_x = -3; + pixel_y = 2 + }, +/obj/item/cartridge/engineering{ + pixel_x = -3; + pixel_y = 2 + }, +/obj/item/cartridge/engineering{ + pixel_x = -3; + pixel_y = 2 + }, +/obj/item/radio/intercom{ + dir = 4; + name = "Station Intercom (General)"; + pixel_x = 27 + }, +/obj/machinery/keycard_auth{ + pixel_y = -28 + }, +/mob/living/simple_animal/parrot/Poly, +/turf/open/floor/plasteel, +/area/crew_quarters/heads/chief) +"aai" = ( +/obj/effect/turf_decal/bot, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/mob/living/simple_animal/sloth/paperwork, +/turf/open/floor/plasteel, +/area/quartermaster/storage) +"aaj" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/light{ + dir = 4 + }, +/obj/effect/turf_decal/bot, +/obj/machinery/navbeacon{ + codes_txt = "delivery;dir=8"; + dir = 8; + freq = 1400; + location = "QM #1" + }, +/obj/machinery/power/apc{ + areastring = "/area/maintenance/starboard"; + dir = 4; + name = "Starboard Maintenance APC"; + pixel_x = 26 + }, +/mob/living/simple_animal/bot/mulebot{ + beacon_freq = 1400; + home_destination = "QM #1"; + suffix = "#1" + }, +/turf/open/floor/pod/dark, +/area/maintenance/starboard) +"aak" = ( +/obj/effect/turf_decal/bot, +/obj/machinery/navbeacon{ + codes_txt = "delivery;dir=8"; + dir = 8; + freq = 1400; + location = "QM #2" + }, +/obj/machinery/camera{ + c_tag = "Cargo Garage"; + dir = 8 + }, +/mob/living/simple_animal/bot/mulebot{ + home_destination = "QM #2"; + suffix = "#2" + }, +/turf/open/floor/pod/dark, +/area/maintenance/starboard) +"aal" = ( +/obj/structure/chair{ + dir = 8 + }, +/obj/item/radio/intercom{ + pixel_x = 28 + }, +/obj/machinery/light_switch{ + pixel_y = 26 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 4 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/obj/machinery/camera{ + c_tag = "Chief Medical Office"; + dir = 8; + network = list("ss13","medbay"); + pixel_y = -22 + }, +/mob/living/simple_animal/pet/cat/Runtime, +/turf/open/floor/plasteel/white, +/area/crew_quarters/heads/cmo) +"aam" = ( +/obj/structure/chair/comfy/brown{ + color = "#596479"; + dir = 1 + }, +/mob/living/simple_animal/mouse/brown/Tom, +/turf/open/floor/plasteel/dark, +/area/security/prison) +"aan" = ( +/obj/machinery/camera{ + c_tag = "Head of Security's Office"; + dir = 8 + }, +/obj/structure/bed/dogbed{ + desc = "A comfy-looking pet bed. You can even strap your pet in, in case the gravity turns off."; + name = "pet bed" + }, +/obj/item/storage/secure/safe/HoS{ + pixel_x = 35 + }, +/mob/living/simple_animal/hostile/retaliate/bat/secbat{ + desc = "An adorable fruit bat with a cute little hat, may or may not have a reputation for biting out eyeballs, or at least that's what the HoS'd tell you."; + name = "Colonel Chomps" + }, +/turf/open/floor/carpet, +/area/crew_quarters/heads/hos) +"aao" = ( +/obj/structure/closet/emcloset/anchored, +/obj/structure/sign/directions/medical{ + dir = 8; + icon_state = "direction_med"; + pixel_y = 36 + }, +/obj/structure/sign/directions/science{ + dir = 8; + icon_state = "direction_sci"; + pixel_y = 28 + }, +/turf/open/floor/plasteel, +/area/hallway/primary/aft) +"aap" = ( +/obj/machinery/quantumpad{ + map_pad_id = "5"; + map_pad_link_id = "6" + }, +/obj/structure/sign/directions/evac{ + pixel_y = 40 + }, +/obj/structure/sign/directions/security{ + pixel_y = 32 + }, +/obj/structure/sign/directions/command{ + pixel_y = 24 + }, +/turf/open/floor/plasteel, +/area/hallway/primary/aft) +"aaq" = ( +/obj/structure/cable{ + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 6 + }, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/obj/structure/sign/directions/supply{ + pixel_x = 32; + pixel_y = -36 + }, +/obj/structure/sign/directions/engineering{ + dir = 4; + icon_state = "direction_eng"; + pixel_x = 32; + pixel_y = -28 + }, +/turf/open/floor/plasteel, +/area/hallway/primary/aft) +"aar" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/sign/departments/botany, +/turf/open/floor/plating, +/area/hydroponics) +"aas" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/sign/departments/engineering, +/turf/open/floor/plating, +/area/engine/engineering) +"aat" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/cable{ + icon_state = "0-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/power/apc{ + areastring = "/area/hallway/primary/fore"; + dir = 1; + name = "Fore Primary Hallway APC"; + pixel_y = 24 + }, +/obj/structure/sign/directions/engineering{ + dir = 4; + icon_state = "direction_eng"; + pixel_x = 0; + pixel_y = 40 + }, +/turf/open/floor/plasteel, +/area/hallway/primary/fore) +"aau" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/sign/departments/custodian{ + pixel_y = -32 + }, +/turf/open/floor/plasteel, +/area/crew_quarters/fitness) +"aav" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, +/obj/machinery/disposal/bin, +/turf/open/floor/plasteel, +/area/crew_quarters/fitness) "aaw" = ( /obj/structure/cable{ icon_state = "4-8" @@ -11,10 +316,198 @@ }, /turf/open/floor/plasteel/white, /area/science/misc_lab) +"aax" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/sign/departments/cargo, +/turf/open/floor/plating, +/area/quartermaster/storage) +"aay" = ( +/obj/structure/disposalpipe/junction/yjunction{ + dir = 1 + }, +/obj/structure/sign/departments/cargo{ + pixel_x = -32; + pixel_y = 32 + }, +/turf/open/floor/plasteel, +/area/hallway/primary/fore) +"aaz" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment, +/obj/structure/sign/directions/engineering{ + dir = 1; + icon_state = "direction_eng"; + pixel_x = 32; + pixel_y = 32 + }, +/turf/open/floor/plasteel, +/area/hallway/primary/fore) +"aaA" = ( +/obj/effect/turf_decal/tile/red{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/structure/sign/warning/pods{ + pixel_y = 32 + }, +/turf/open/floor/plasteel/white/corner{ + dir = 4 + }, +/area/hallway/primary/port) +"aaB" = ( +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 1 + }, +/obj/effect/turf_decal/tile/yellow{ + dir = 4 + }, +/obj/structure/sign/departments/chemistry{ + pixel_y = 32 + }, +/turf/open/floor/plasteel, +/area/hallway/primary/port) +"aaC" = ( +/obj/structure/sign/directions/medical{ + dir = 8; + icon_state = "direction_med"; + pixel_y = 36 + }, +/obj/structure/sign/directions/science{ + dir = 8; + icon_state = "direction_sci"; + pixel_y = 28 + }, +/turf/open/floor/plasteel, +/area/hallway/primary/port) +"aaD" = ( +/obj/structure/sign/directions/engineering{ + dir = 4; + icon_state = "direction_eng"; + pixel_y = 36 + }, +/obj/structure/sign/directions/supply{ + dir = 4; + icon_state = "direction_supply"; + pixel_x = 0; + pixel_y = 28 + }, +/turf/open/floor/plasteel, +/area/hallway/primary/port) +"aaE" = ( +/obj/structure/sign/directions/evac{ + pixel_x = -32; + pixel_y = -24 + }, +/obj/structure/sign/directions/security{ + pixel_x = -32; + pixel_y = -32 + }, +/obj/structure/sign/directions/command{ + pixel_x = -32; + pixel_y = -40 + }, +/turf/open/floor/plasteel, +/area/hallway/primary/port) +"aaF" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/effect/turf_decal/tile/purple{ + dir = 8 + }, +/obj/structure/sign/departments/science{ + pixel_x = -32; + pixel_y = -32 + }, +/turf/open/floor/plasteel, +/area/hallway/primary/port) +"aaG" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{ + dir = 4 + }, +/obj/structure/sign/directions/medical{ + dir = 8; + icon_state = "direction_med"; + pixel_y = 40 + }, +/obj/structure/sign/directions/science{ + dir = 8; + icon_state = "direction_sci"; + pixel_y = 32 + }, +/obj/structure/sign/directions/security{ + pixel_y = 24 + }, +/turf/open/floor/plating/snowed/smoothed/icemoon, +/area/icemoon/surface/outdoors) "aaH" = ( /obj/machinery/smartfridge/chemistry/preloaded, /turf/closed/wall, /area/medical/chemistry) +"aaI" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{ + dir = 4 + }, +/obj/structure/sign/directions/engineering{ + dir = 4; + icon_state = "direction_eng"; + pixel_y = 40 + }, +/obj/structure/sign/directions/supply{ + dir = 4; + icon_state = "direction_supply"; + pixel_x = 0; + pixel_y = 32 + }, +/obj/structure/sign/directions/evac{ + pixel_y = 24 + }, +/turf/open/floor/plating/snowed/smoothed/icemoon, +/area/icemoon/surface/outdoors) +"aaJ" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/sign/departments/evac, +/turf/open/floor/plating, +/area/hallway/secondary/exit/departure_lounge) +"aaK" = ( +/obj/effect/turf_decal/tile/red{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/machinery/light{ + dir = 1 + }, +/obj/item/radio/intercom{ + pixel_y = 25 + }, +/obj/structure/sign/directions/evac{ + dir = 4; + pixel_x = 0; + pixel_y = 40 + }, +/turf/open/floor/plasteel/white/corner{ + dir = 4 + }, +/area/hallway/secondary/exit/departure_lounge) +"aaL" = ( +/obj/structure/sign/departments/restroom{ + pixel_x = 32; + pixel_y = 32 + }, +/turf/open/floor/plasteel/grimy, +/area/crew_quarters/fitness/recreation) "aaM" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/visible, /obj/machinery/atmospherics/components/binary/valve{ @@ -22,6 +515,24 @@ }, /turf/open/floor/plating/asteroid/snow/icemoon, /area/icemoon/surface/outdoors) +"aaN" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on, +/obj/machinery/quantumpad{ + map_pad_id = "1"; + map_pad_link_id = "2" + }, +/obj/structure/sign/directions/medical{ + dir = 8; + icon_state = "direction_med"; + pixel_y = 36 + }, +/obj/structure/sign/directions/science{ + dir = 8; + icon_state = "direction_sci"; + pixel_y = 28 + }, +/turf/open/floor/plasteel, +/area/quartermaster/miningdock) "aaO" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 9 @@ -36,13 +547,155 @@ }, /turf/open/floor/plasteel, /area/engine/engineering) +"aaQ" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on, +/obj/machinery/computer/shuttle/snow_taxi, +/obj/structure/sign/directions/supply{ + dir = 4; + icon_state = "direction_supply"; + pixel_x = 0; + pixel_y = 36 + }, +/obj/structure/sign/directions/engineering{ + dir = 4; + icon_state = "direction_eng"; + pixel_y = 28 + }, +/turf/open/floor/plasteel, +/area/quartermaster/miningdock) +"aaR" = ( +/obj/effect/turf_decal/tile/red{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/hallway/primary/central) "aaS" = ( /turf/closed/wall/r_wall, /area/medical/surgery) +"aaT" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on, +/obj/effect/turf_decal/tile/red{ + dir = 1 + }, +/obj/effect/turf_decal/tile/red{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/hallway/primary/central) +"aaU" = ( +/obj/structure/sign/departments/restroom{ + pixel_x = 32 + }, +/turf/open/floor/carpet, +/area/crew_quarters/dorms) +"aaV" = ( +/obj/structure/sign/directions/evac{ + dir = 1; + icon_state = "direction_evac"; + pixel_y = 8 + }, +/obj/structure/sign/directions/security{ + dir = 8; + icon_state = "direction_sec"; + pixel_x = 0; + pixel_y = 0 + }, +/obj/structure/sign/directions/command{ + dir = 8; + icon_state = "direction_bridge"; + pixel_y = -8 + }, +/turf/closed/wall/r_wall, +/area/hallway/primary/central) +"aaW" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/sign/departments/security, +/turf/open/floor/plating, +/area/hallway/primary/central) +"aaX" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/tile/red{ + dir = 1 + }, +/obj/effect/turf_decal/tile/red{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/hallway/primary/central) +"aaY" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/hidden, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/tile/red{ + dir = 1 + }, +/obj/effect/turf_decal/tile/red{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/hallway/primary/central) +"aaZ" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/sign/mining{ + pixel_x = 32 + }, +/turf/open/floor/plasteel, +/area/hallway/primary/central) "aba" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/medical/surgery) +"abb" = ( +/obj/effect/turf_decal/tile/red{ + dir = 1 + }, +/turf/open/floor/plasteel, +/area/hallway/primary/central) +"abc" = ( +/obj/structure/sign/directions/command{ + pixel_x = 32; + pixel_y = -40 + }, +/obj/structure/sign/directions/supply{ + dir = 4; + icon_state = "direction_supply"; + pixel_x = 32; + pixel_y = -24 + }, +/obj/structure/sign/directions/science{ + dir = 4; + pixel_x = 32; + pixel_y = -32 + }, +/turf/open/floor/plasteel, +/area/hallway/primary/central) +"abd" = ( +/obj/effect/turf_decal/tile/purple{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/hallway/primary/central) "abe" = ( /obj/structure/table/wood, /obj/machinery/computer/security/wooden_tv, @@ -52,14 +705,308 @@ }, /turf/open/floor/wood, /area/maintenance/bar) +"abf" = ( +/obj/machinery/light{ + dir = 8 + }, +/obj/effect/turf_decal/tile/red{ + dir = 1 + }, +/turf/open/floor/plasteel, +/area/hallway/primary/central) +"abg" = ( +/obj/machinery/light{ + dir = 4 + }, +/obj/effect/turf_decal/tile/purple{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/hallway/primary/central) +"abh" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/machinery/light{ + dir = 4 + }, +/obj/structure/reagent_dispensers/watertank, +/obj/item/radio/intercom{ + pixel_y = -26 + }, +/obj/structure/sign/departments/xenobio{ + pixel_x = 32 + }, +/turf/open/floor/plasteel/white, +/area/science/misc_lab) +"abi" = ( +/obj/machinery/airalarm{ + dir = 8; + pixel_x = 24 + }, +/obj/effect/turf_decal/tile/purple{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/hallway/primary/central) +"abj" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/machinery/light{ + dir = 8 + }, +/obj/structure/sign/departments/holy{ + pixel_x = -32 + }, +/turf/open/floor/plasteel, +/area/hallway/primary/central) "abk" = ( /obj/machinery/light, /turf/open/floor/plasteel/dark, /area/ai_monitored/security/armory) +"abl" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/sign/departments/holy{ + pixel_x = -32; + pixel_y = 32 + }, +/turf/open/floor/plasteel, +/area/hallway/primary/central) +"abm" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/structure/sign/directions/evac{ + dir = 8; + icon_state = "direction_evac"; + pixel_x = 32; + pixel_y = 32 + }, +/turf/open/floor/plasteel, +/area/hallway/primary/central) +"abn" = ( +/obj/structure/sign/poster/official/ian, +/turf/closed/wall, +/area/crew_quarters/heads/hop) +"abo" = ( +/obj/effect/landmark/start/assistant, +/obj/structure/sign/poster/official/build{ + pixel_x = -32; + pixel_y = -32 + }, +/turf/open/floor/plasteel, +/area/storage/primary) +"abp" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/effect/turf_decal/tile/brown, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/filingcabinet, +/turf/open/floor/plasteel, +/area/quartermaster/storage) +"abq" = ( +/obj/structure/toilet{ + contents = newlist(/obj/item/toy/snappop/phoenix); + dir = 4 + }, +/obj/machinery/light/small{ + dir = 1; + light_color = "#ffc1c1" + }, +/turf/open/floor/plasteel/freezer, +/area/hallway/primary/port) +"abr" = ( +/obj/structure/sink/kitchen{ + pixel_y = 28 + }, +/turf/open/floor/plasteel/freezer, +/area/hallway/primary/port) "abs" = ( /obj/structure/table/optable, /turf/open/floor/plasteel/freezer, /area/medical/surgery) +"abt" = ( +/obj/machinery/door/airlock{ + name = "Unisex Restroom" + }, +/turf/open/floor/plasteel/freezer, +/area/hallway/primary/port) +"abu" = ( +/obj/structure/cable{ + icon_state = "2-4" + }, +/obj/machinery/light{ + dir = 1 + }, +/obj/structure/sign/departments/restroom{ + pixel_y = 32 + }, +/turf/open/floor/plasteel, +/area/hallway/primary/port) +"abv" = ( +/obj/effect/turf_decal/tile/green{ + dir = 1 + }, +/obj/effect/turf_decal/tile/green{ + dir = 8 + }, +/obj/machinery/camera{ + c_tag = "Hydroponics North" + }, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/obj/machinery/disposal/bin, +/obj/structure/sign/poster/official/hydro_ad{ + pixel_y = 32 + }, +/turf/open/floor/plasteel/dark, +/area/hydroponics) +"abw" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/effect/turf_decal/tile/bar{ + dir = 1 + }, +/obj/effect/turf_decal/tile/bar, +/obj/structure/disposalpipe/segment, +/obj/structure/sign/poster/official/high_class_martini{ + pixel_x = -32 + }, +/turf/open/floor/plasteel, +/area/hallway/primary/aft) +"abx" = ( +/obj/machinery/light{ + dir = 8 + }, +/obj/structure/table/wood, +/obj/structure/sign/poster/official/soft_cap_pop_art{ + pixel_x = -32 + }, +/turf/open/floor/wood, +/area/crew_quarters/bar) +"aby" = ( +/obj/machinery/light{ + dir = 4 + }, +/obj/machinery/computer/arcade/minesweeper{ + dir = 8 + }, +/obj/structure/sign/poster/official/nanomichi_ad{ + pixel_x = 32 + }, +/turf/open/floor/wood, +/area/crew_quarters/bar) +"abz" = ( +/obj/structure/chair/sofa/right{ + dir = 1 + }, +/obj/structure/sign/poster/official/fruit_bowl{ + pixel_y = -32 + }, +/turf/open/floor/wood, +/area/crew_quarters/bar) +"abA" = ( +/obj/structure/cable{ + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/obj/structure/sign/poster/official/fashion{ + pixel_y = -32 + }, +/turf/open/floor/carpet, +/area/crew_quarters/dorms) +"abB" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/structure/sign/poster/official/report_crimes{ + pixel_x = -32 + }, +/turf/open/floor/plasteel, +/area/hallway/primary/fore) +"abC" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/door/airlock/external{ + req_one_access_txt = "13,8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/effect/mapping_helpers/airlock/cyclelink_helper, +/turf/open/floor/plating, +/area/maintenance/port/fore) +"abD" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/door/airlock/external{ + req_one_access_txt = "13,8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 1 + }, +/turf/open/floor/plating, +/area/maintenance/port/fore) +"abE" = ( +/obj/machinery/atmospherics/components/unary/thermomachine/freezer, +/obj/effect/turf_decal/tile/blue{ + dir = 1 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 4 + }, +/obj/machinery/camera{ + c_tag = "Medbay Cryogenics"; + network = list("ss13","medbay") + }, +/obj/structure/sign/poster/official/help_others{ + pixel_y = 32 + }, +/turf/open/floor/plasteel/white, +/area/medical/medbay/central) +"abF" = ( +/obj/effect/turf_decal/tile/red, +/obj/effect/turf_decal/tile/red{ + dir = 4 + }, +/obj/effect/turf_decal/tile/red{ + dir = 8 + }, +/obj/structure/closet/secure_closet/security/engine, +/obj/item/radio/intercom{ + pixel_y = -26 + }, +/obj/machinery/camera{ + c_tag = "Security Post - Cargo"; + dir = 1 + }, +/obj/structure/sign/poster/official/do_not_question{ + pixel_x = 32 + }, +/turf/open/floor/plasteel, +/area/security/checkpoint/supply) "abG" = ( /obj/effect/turf_decal/stripes/corner{ dir = 4 @@ -67,11 +1014,160 @@ /obj/machinery/atmospherics/components/unary/vent_scrubber/on, /turf/open/floor/plasteel, /area/engine/atmospherics_engine) +"abH" = ( +/obj/structure/table, +/obj/item/storage/firstaid/brute, +/obj/item/storage/firstaid/brute{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/obj/effect/turf_decal/tile/blue, +/obj/structure/sign/poster/official/medical_green_cross{ + pixel_y = -32 + }, +/turf/open/floor/plasteel/white, +/area/medical/medbay/central) +"abI" = ( +/obj/effect/turf_decal/tile/yellow{ + dir = 8 + }, +/obj/effect/turf_decal/tile/yellow, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/sign/poster/official/safety_eye_protection{ + pixel_y = -32 + }, +/turf/open/floor/plasteel/white, +/area/medical/chemistry) +"abJ" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/effect/turf_decal/tile/yellow{ + dir = 4 + }, +/obj/structure/sign/poster/official/walk{ + pixel_y = 32 + }, +/turf/open/floor/plasteel, +/area/hallway/primary/port) +"abK" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/sign/poster/official/build{ + pixel_y = 32 + }, +/turf/open/floor/plasteel, +/area/hallway/primary/port) +"abL" = ( +/obj/structure/table, +/obj/item/mmi, +/obj/item/mmi, +/obj/item/mmi, +/obj/structure/sign/poster/official/state_laws{ + pixel_y = -32 + }, +/turf/open/floor/plasteel/white, +/area/science/robotics/lab) +"abM" = ( +/obj/structure/closet/secure_closet/security/med, +/obj/effect/turf_decal/tile/red, +/obj/effect/turf_decal/tile/red{ + dir = 4 + }, +/obj/effect/turf_decal/tile/red{ + dir = 8 + }, +/obj/machinery/camera{ + c_tag = "Security Post - Medbay"; + dir = 1 + }, +/obj/machinery/light{ + dir = 4 + }, +/obj/structure/sign/poster/official/here_for_your_safety{ + pixel_y = -32 + }, +/turf/open/floor/plasteel, +/area/security/checkpoint/medical) +"abN" = ( +/obj/machinery/light, +/obj/machinery/camera{ + c_tag = "Escape Arm Southwest"; + dir = 1 + }, +/obj/structure/closet/crate/bin, +/obj/structure/sign/directions/security{ + pixel_y = -32 + }, +/turf/open/floor/plasteel, +/area/hallway/secondary/exit/departure_lounge) +"abO" = ( +/obj/machinery/light, +/obj/structure/closet/crate/bin, +/obj/structure/sign/directions/command{ + pixel_y = -32 + }, +/turf/open/floor/plasteel, +/area/hallway/secondary/exit/departure_lounge) +"abP" = ( +/obj/structure/chair{ + dir = 1 + }, +/obj/structure/sign/poster/official/cohiba_robusto_ad{ + pixel_y = -32 + }, +/turf/open/floor/plasteel, +/area/hallway/secondary/exit/departure_lounge) "abQ" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/effect/landmark/event_spawn, /turf/open/floor/wood, /area/crew_quarters/theatre) +"abR" = ( +/obj/structure/chair/stool, +/obj/structure/sign/poster/official/foam_force_ad{ + pixel_x = 32 + }, +/turf/open/floor/plasteel/grimy, +/area/crew_quarters/fitness/recreation) +"abS" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/machinery/door/firedoor/border_only{ + name = "south facing firelock" + }, +/obj/structure/sign/poster/official/no_erp{ + pixel_x = 32 + }, +/turf/open/floor/plasteel, +/area/quartermaster/miningoffice) +"abT" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on, +/obj/structure/disposalpipe/segment, +/obj/structure/sign/directions/evac{ + dir = 8; + icon_state = "direction_evac"; + pixel_x = 32; + pixel_y = 40 + }, +/obj/structure/sign/directions/engineering{ + dir = 4; + icon_state = "direction_eng"; + pixel_x = 32; + pixel_y = 24 + }, +/obj/structure/sign/directions/medical{ + dir = 4; + pixel_x = 32; + pixel_y = 32 + }, +/turf/open/floor/plasteel, +/area/hallway/primary/central) "abU" = ( /obj/structure/cable{ icon_state = "4-8" @@ -81,6 +1177,25 @@ }, /turf/open/floor/plating/snowed/smoothed/icemoon, /area/icemoon/surface/outdoors) +"abV" = ( +/obj/effect/turf_decal/tile/red{ + dir = 1 + }, +/obj/structure/sign/poster/official/obey{ + pixel_x = -32 + }, +/turf/open/floor/plasteel, +/area/hallway/primary/central) +"abW" = ( +/obj/structure/tank_dispenser/oxygen, +/obj/machinery/camera/motion{ + c_tag = "Armory Motion Sensor North" + }, +/obj/structure/sign/poster/official/ion_rifle{ + pixel_y = 32 + }, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/security/armory) "abX" = ( /obj/machinery/airalarm{ pixel_y = 28 @@ -98,6 +1213,15 @@ }, /turf/open/floor/plasteel, /area/quartermaster/storage) +"abY" = ( +/obj/machinery/computer/camera_advanced/xenobio{ + dir = 1 + }, +/obj/structure/sign/poster/official/anniversary_vintage_reprint{ + pixel_y = -32 + }, +/turf/open/floor/plasteel/white, +/area/science/xenobiology) "abZ" = ( /obj/effect/landmark/start/medical_doctor, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ @@ -105,6 +1229,38 @@ }, /turf/open/floor/plasteel/freezer, /area/medical/surgery) +"aca" = ( +/obj/structure/cable{ + icon_state = "0-4" + }, +/obj/machinery/camera{ + c_tag = "Brig Evidence Storage" + }, +/obj/structure/sign/poster/official/space_cops{ + pixel_y = 32 + }, +/turf/open/floor/plasteel/dark, +/area/security/main) +"acb" = ( +/obj/structure/sign/poster/official/science{ + pixel_y = -32 + }, +/turf/open/floor/plasteel/white, +/area/science/mixing) +"acc" = ( +/obj/structure/sign/poster/contraband/lusty_xenomorph{ + pixel_x = -32; + pixel_y = -32 + }, +/turf/open/floor/plating, +/area/maintenance/aft/secondary) +"acd" = ( +/obj/structure/reagent_dispensers/watertank, +/obj/structure/sign/poster/contraband/bountyhunters{ + pixel_x = 32 + }, +/turf/open/floor/plating, +/area/maintenance/central) "ace" = ( /obj/structure/cable{ icon_state = "4-8" @@ -114,6 +1270,19 @@ }, /turf/open/floor/plating/snowed/smoothed/icemoon, /area/icemoon/surface/outdoors) +"acf" = ( +/obj/structure/chair/stool, +/obj/structure/sign/poster/official/bless_this_spess{ + pixel_x = -32 + }, +/turf/open/floor/carpet, +/area/chapel/main) +"acg" = ( +/obj/structure/sign/poster/official/wtf_is_co2{ + pixel_x = 32 + }, +/turf/open/floor/plasteel, +/area/science/storage) "acj" = ( /obj/effect/landmark/blobstart, /turf/open/floor/plating, @@ -772,16 +1941,6 @@ }, /turf/open/floor/plasteel/white, /area/medical/medbay/central) -"aon" = ( -/obj/effect/turf_decal/tile/yellow{ - dir = 8 - }, -/obj/effect/turf_decal/tile/yellow, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/plasteel/white, -/area/medical/chemistry) "aoo" = ( /obj/structure/table/glass, /obj/machinery/reagentgrinder{ @@ -915,9 +2074,6 @@ }, /turf/open/floor/plasteel/dark, /area/tcommsat/computer) -"arG" = ( -/turf/open/floor/plating, -/area/medical/medbay/central) "arH" = ( /obj/structure/cable{ icon_state = "4-8" @@ -2950,24 +4106,6 @@ /obj/effect/turf_decal/stripes/line, /turf/open/floor/plating, /area/engine/engineering) -"aOl" = ( -/obj/structure/closet/secure_closet/security/med, -/obj/effect/turf_decal/tile/red, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/obj/machinery/camera{ - c_tag = "Security Post - Medbay"; - dir = 1 - }, -/obj/machinery/light{ - dir = 4 - }, -/turf/open/floor/plasteel, -/area/security/checkpoint/medical) "aOm" = ( /obj/effect/turf_decal/tile/red, /obj/effect/turf_decal/tile/red{ @@ -3023,7 +4161,7 @@ /area/engine/supermatter) "aOP" = ( /obj/structure/table/wood, -/obj/item/storage/pill_bottle/dice, +/obj/item/storage/box/dice, /turf/open/floor/plasteel/dark, /area/security/prison) "aPw" = ( @@ -4937,13 +6075,6 @@ }, /turf/open/floor/carpet, /area/hallway/primary/central) -"bBB" = ( -/obj/machinery/atmospherics/pipe/manifold/supply/hidden, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/plasteel, -/area/hallway/primary/central) "bBH" = ( /obj/structure/cable{ icon_state = "0-4" @@ -6489,10 +7620,6 @@ /obj/machinery/holopad, /turf/open/floor/carpet, /area/hallway/secondary/exit/departure_lounge) -"bQf" = ( -/obj/structure/closet/emcloset/anchored, -/turf/open/floor/plasteel, -/area/hallway/primary/aft) "bQg" = ( /obj/structure/cable{ icon_state = "1-2" @@ -7161,15 +8288,6 @@ /obj/structure/closet/crate/coffin, /turf/open/floor/wood, /area/chapel/office) -"cbz" = ( -/obj/structure/cable{ - icon_state = "0-4" - }, -/obj/machinery/camera{ - c_tag = "Brig Evidence Storage" - }, -/turf/open/floor/plasteel/dark, -/area/security/main) "cbL" = ( /obj/structure/cable{ icon_state = "4-8" @@ -8466,15 +9584,6 @@ }, /turf/open/floor/plasteel, /area/storage/primary) -"cGQ" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/machinery/light{ - dir = 8 - }, -/turf/open/floor/plasteel, -/area/hallway/primary/central) "cGZ" = ( /obj/machinery/light{ dir = 8 @@ -8829,18 +9938,6 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/visible, /turf/open/floor/plating/snowed/smoothed/icemoon, /area/icemoon/surface/outdoors) -"cSv" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/structure/disposalpipe/trunk{ - dir = 1 - }, -/turf/open/floor/plasteel, -/area/crew_quarters/fitness) "cSC" = ( /obj/effect/landmark/event_spawn, /turf/open/floor/plasteel/white, @@ -9806,14 +10903,6 @@ }, /turf/open/floor/plating/snowed/smoothed/icemoon, /area/icemoon/surface/outdoors) -"dvh" = ( -/obj/structure/table/reinforced, -/mob/living/carbon/monkey/punpun, -/obj/machinery/door/firedoor/border_only{ - name = "south facing firelock" - }, -/turf/open/floor/plasteel/grimy, -/area/crew_quarters/bar) "dvs" = ( /obj/machinery/door/airlock/public/glass{ name = "Snow Airlock" @@ -10028,19 +11117,6 @@ /obj/machinery/rnd/production/techfab/department/cargo, /turf/open/floor/plasteel, /area/quartermaster/storage) -"dDf" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/turf/open/floor/plasteel, -/area/hallway/primary/fore) "dDC" = ( /obj/effect/turf_decal/tile/neutral, /obj/effect/turf_decal/tile/neutral{ @@ -10876,15 +11952,6 @@ }, /turf/open/floor/plasteel, /area/science/robotics/lab) -"eeh" = ( -/obj/machinery/light, -/obj/machinery/camera{ - c_tag = "Escape Arm Southwest"; - dir = 1 - }, -/obj/structure/closet/crate/bin, -/turf/open/floor/plasteel, -/area/hallway/secondary/exit/departure_lounge) "eex" = ( /obj/machinery/atmospherics/pipe/simple/general/visible, /obj/machinery/meter, @@ -11404,13 +12471,6 @@ dir = 8 }, /area/hallway/primary/fore) -"evr" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/machinery/door/firedoor/border_only{ - name = "south facing firelock" - }, -/turf/open/floor/plasteel, -/area/quartermaster/miningoffice) "evI" = ( /obj/machinery/atmospherics/components/trinary/filter/atmos/n2{ dir = 1 @@ -11633,10 +12693,6 @@ }, /turf/open/floor/plating, /area/engine/storage) -"eEa" = ( -/obj/machinery/light, -/turf/open/floor/plasteel/freezer, -/area/crew_quarters/dorms) "eEy" = ( /obj/machinery/doorButtons/access_button{ idDoor = "virology_airlock_interior"; @@ -11671,15 +12727,6 @@ }, /turf/open/floor/plasteel/dark, /area/teleporter) -"eFy" = ( -/obj/machinery/light{ - dir = 4 - }, -/obj/machinery/computer/arcade/minesweeper{ - dir = 8 - }, -/turf/open/floor/wood, -/area/crew_quarters/bar) "eFB" = ( /obj/structure/table/wood, /obj/item/reagent_containers/rag, @@ -12087,19 +13134,6 @@ }, /turf/open/floor/wood, /area/crew_quarters/bar) -"eOK" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/plating, -/area/hallway/primary/central) "eOO" = ( /obj/structure/weightmachine/weightlifter, /turf/open/floor/plasteel, @@ -12380,13 +13414,6 @@ /obj/structure/table, /turf/open/floor/plasteel, /area/hallway/secondary/entry) -"eZn" = ( -/obj/structure/tank_dispenser/oxygen, -/obj/machinery/camera/motion{ - c_tag = "Armory Motion Sensor North" - }, -/turf/open/floor/plasteel/dark, -/area/ai_monitored/security/armory) "eZA" = ( /obj/structure/cable{ icon_state = "0-4" @@ -12857,14 +13884,6 @@ }, /turf/open/floor/engine/co2, /area/engine/atmos) -"fnu" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on, -/obj/machinery/quantumpad{ - map_pad_id = "1"; - map_pad_link_id = "2" - }, -/turf/open/floor/plasteel, -/area/quartermaster/miningdock) "fnx" = ( /obj/machinery/light{ dir = 1 @@ -12948,24 +13967,6 @@ }, /turf/open/floor/plasteel/white, /area/science/robotics/lab) -"fpW" = ( -/obj/effect/turf_decal/bot, -/mob/living/simple_animal/bot/mulebot{ - home_destination = "QM #2"; - suffix = "#2" - }, -/obj/machinery/navbeacon{ - codes_txt = "delivery;dir=8"; - dir = 8; - freq = 1400; - location = "QM #2" - }, -/obj/machinery/camera{ - c_tag = "Cargo Garage"; - dir = 8 - }, -/turf/open/floor/pod/dark, -/area/maintenance/starboard) "fqj" = ( /obj/machinery/field/generator, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, @@ -13098,11 +14099,6 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/closed/wall, /area/storage/eva) -"fuy" = ( -/obj/machinery/light, -/obj/structure/closet/crate/bin, -/turf/open/floor/plasteel, -/area/hallway/secondary/exit/departure_lounge) "fuB" = ( /obj/machinery/camera{ c_tag = "Auxiliary Bridge North"; @@ -13699,13 +14695,6 @@ }, /turf/open/floor/plating, /area/storage/atmos) -"fNd" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/plating, -/area/engine/engineering) "fNh" = ( /obj/structure/cable, /turf/open/floor/plating/snowed/smoothed/icemoon, @@ -15081,18 +16070,6 @@ /obj/machinery/power/port_gen/pacman, /turf/open/floor/plating, /area/engine/storage) -"gEz" = ( -/obj/structure/cable{ - icon_state = "1-4" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 9 - }, -/turf/open/floor/carpet, -/area/crew_quarters/dorms) "gFb" = ( /obj/machinery/vending/wardrobe/law_wardrobe, /obj/item/radio/intercom{ @@ -15277,19 +16254,6 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/plasteel, /area/hallway/primary/port) -"gKB" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, -/obj/machinery/light{ - dir = 4 - }, -/obj/structure/reagent_dispensers/watertank, -/obj/item/radio/intercom{ - pixel_y = -26 - }, -/turf/open/floor/plasteel/white, -/area/science/misc_lab) "gKR" = ( /obj/machinery/mineral/equipment_vendor, /obj/structure/disposalpipe/segment{ @@ -15589,13 +16553,6 @@ }, /turf/open/floor/plating, /area/maintenance/solars/port/aft) -"gRS" = ( -/obj/machinery/light{ - dir = 8 - }, -/obj/structure/table/wood, -/turf/open/floor/wood, -/area/crew_quarters/bar) "gSh" = ( /obj/structure/cable{ icon_state = "1-8" @@ -16190,31 +17147,6 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/port) -"hnB" = ( -/obj/structure/chair{ - dir = 8 - }, -/obj/item/radio/intercom{ - pixel_x = 28 - }, -/obj/machinery/light_switch{ - pixel_y = 26 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/mob/living/simple_animal/pet/cat/Runtime, -/obj/machinery/camera{ - c_tag = "Chief Medical Office"; - dir = 8; - network = list("ss13","medbay"); - pixel_y = -22 - }, -/turf/open/floor/plasteel/white, -/area/crew_quarters/heads/cmo) "hnO" = ( /obj/machinery/atmospherics/components/unary/cryo_cell, /turf/open/floor/plasteel/white, @@ -16876,12 +17808,6 @@ }, /turf/open/floor/plating/snowed/smoothed/icemoon, /area/icemoon/surface/outdoors) -"hGM" = ( -/obj/structure/urinal{ - pixel_y = 32 - }, -/turf/open/floor/plasteel/freezer, -/area/crew_quarters/dorms) "hGU" = ( /obj/structure/closet/secure_closet/personal/cabinet{ pixel_x = -8 @@ -17876,14 +18802,6 @@ /obj/structure/closet/crate/coffin, /turf/open/floor/wood, /area/chapel/office) -"ifQ" = ( -/mob/living/simple_animal/mouse/brown/Tom, -/obj/structure/chair/comfy/brown{ - color = "#596479"; - dir = 1 - }, -/turf/open/floor/plasteel/dark, -/area/security/prison) "ifT" = ( /obj/structure/cable{ icon_state = "0-4" @@ -19714,19 +20632,6 @@ }, /turf/open/floor/plating/snowed/smoothed/icemoon, /area/icemoon/surface/outdoors) -"jiV" = ( -/obj/structure/table, -/obj/item/storage/firstaid/brute, -/obj/item/storage/firstaid/brute{ - pixel_x = 3; - pixel_y = 3 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue, -/turf/open/floor/plasteel/white, -/area/medical/medbay/central) "jiY" = ( /obj/effect/turf_decal/tile/brown{ dir = 1 @@ -20465,10 +21370,6 @@ "jJu" = ( /turf/closed/wall/r_wall, /area/medical/medbay/zone3) -"jKb" = ( -/obj/effect/landmark/start/assistant, -/turf/open/floor/plasteel, -/area/storage/primary) "jKF" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 @@ -22194,19 +23095,6 @@ }, /turf/open/floor/engine, /area/engine/atmospherics_engine) -"kPj" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/plasteel, -/area/hallway/primary/central) "kPn" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel, @@ -24381,24 +25269,6 @@ }, /turf/open/floor/plasteel, /area/engine/engineering) -"mkm" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/structure/cable{ - icon_state = "0-8" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/obj/machinery/power/apc{ - areastring = "/area/hallway/primary/fore"; - dir = 1; - name = "Fore Primary Hallway APC"; - pixel_y = 24 - }, -/turf/open/floor/plasteel, -/area/hallway/primary/fore) "mkr" = ( /obj/structure/cable{ icon_state = "4-8" @@ -24799,13 +25669,6 @@ /obj/machinery/telecomms/processor/preset_four, /turf/open/floor/plasteel/dark/telecomms, /area/tcommsat/server) -"mzB" = ( -/obj/structure/table, -/obj/item/mmi, -/obj/item/mmi, -/obj/item/mmi, -/turf/open/floor/plasteel/white, -/area/science/robotics/lab) "mAk" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 10 @@ -25362,22 +26225,6 @@ }, /turf/open/floor/plasteel/freezer, /area/crew_quarters/dorms) -"mQo" = ( -/obj/effect/turf_decal/tile/green{ - dir = 1 - }, -/obj/effect/turf_decal/tile/green{ - dir = 8 - }, -/obj/machinery/camera{ - c_tag = "Hydroponics North" - }, -/obj/structure/disposalpipe/trunk{ - dir = 8 - }, -/obj/machinery/disposal/bin, -/turf/open/floor/plasteel/dark, -/area/hydroponics) "mQC" = ( /obj/machinery/airalarm{ dir = 1; @@ -26124,12 +26971,6 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plating, /area/medical/genetics) -"nmY" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/turf/open/floor/plasteel, -/area/hallway/primary/central) "nnj" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, @@ -26162,14 +27003,6 @@ }, /turf/open/floor/plasteel, /area/hydroponics) -"noB" = ( -/obj/effect/turf_decal/bot, -/mob/living/simple_animal/sloth/paperwork, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/plasteel, -/area/quartermaster/storage) "noQ" = ( /obj/effect/spawner/structure/window/plasma/reinforced, /turf/open/floor/plating, @@ -26788,34 +27621,6 @@ }, /turf/open/floor/plasteel, /area/engine/atmos) -"nGa" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/obj/machinery/light{ - dir = 4 - }, -/obj/effect/turf_decal/bot, -/mob/living/simple_animal/bot/mulebot{ - beacon_freq = 1400; - home_destination = "QM #1"; - suffix = "#1" - }, -/obj/machinery/navbeacon{ - codes_txt = "delivery;dir=8"; - dir = 8; - freq = 1400; - location = "QM #1" - }, -/obj/machinery/power/apc{ - areastring = "/area/maintenance/starboard"; - dir = 4; - name = "Starboard Maintenance APC"; - pixel_x = 26 - }, -/turf/open/floor/pod/dark, -/area/maintenance/starboard) "nGd" = ( /obj/effect/turf_decal/delivery, /obj/machinery/portable_atmospherics/canister/toxins, @@ -26886,7 +27691,7 @@ "nIM" = ( /obj/structure/table/wood/poker, /obj/item/toy/cards/deck, -/obj/item/storage/pill_bottle/dice{ +/obj/item/storage/box/dice{ pixel_x = 8 }, /obj/structure/sign/poster/contraband/random{ @@ -27753,9 +28558,6 @@ }, /turf/open/floor/plating/asteroid/snow/icemoon, /area/engine/atmospherics_engine) -"oiX" = ( -/turf/closed/wall, -/area/crew_quarters/heads/hop) "oje" = ( /obj/structure/cable{ icon_state = "4-8" @@ -28735,23 +29537,6 @@ /obj/effect/landmark/event_spawn, /turf/open/floor/plasteel/dark, /area/ai_monitored/turret_protected/ai_upload_foyer) -"oLT" = ( -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/machinery/light{ - dir = 1 - }, -/obj/item/radio/intercom{ - pixel_y = 25 - }, -/turf/open/floor/plasteel/white/corner{ - dir = 4 - }, -/area/hallway/secondary/exit/departure_lounge) "oME" = ( /obj/structure/cable{ icon_state = "4-8" @@ -29572,13 +30357,6 @@ }, /turf/open/floor/plating/snowed/smoothed/icemoon, /area/icemoon/surface/outdoors) -"pkh" = ( -/mob/living/simple_animal/hostile/retaliate/goat{ - name = "Pete" - }, -/obj/effect/landmark/event_spawn, -/turf/open/floor/plasteel/freezer, -/area/crew_quarters/kitchen) "pkJ" = ( /turf/open/floor/wood{ icon_state = "wood-broken6" @@ -30303,20 +31081,6 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/plasteel, /area/hallway/primary/central) -"pCj" = ( -/obj/structure/sink{ - dir = 8; - pixel_x = -12; - pixel_y = 2 - }, -/obj/structure/mirror{ - pixel_x = -28 - }, -/obj/structure/urinal{ - pixel_y = 32 - }, -/turf/open/floor/plasteel/freezer, -/area/crew_quarters/dorms) "pCo" = ( /obj/machinery/atmospherics/pipe/simple/orange/visible{ dir = 9 @@ -30909,12 +31673,6 @@ }, /turf/open/floor/plasteel, /area/quartermaster/storage) -"pUz" = ( -/obj/structure/disposalpipe/junction/yjunction{ - dir = 1 - }, -/turf/open/floor/plasteel, -/area/hallway/primary/fore) "pUP" = ( /obj/machinery/door/airlock/public/glass{ name = "Chapel" @@ -31083,15 +31841,6 @@ }, /turf/open/floor/plasteel, /area/engine/engineering) -"qbh" = ( -/obj/structure/cable{ - icon_state = "2-4" - }, -/obj/machinery/light{ - dir = 1 - }, -/turf/open/floor/plasteel, -/area/hallway/primary/port) "qbr" = ( /obj/effect/turf_decal/tile/red{ dir = 4 @@ -31877,13 +32626,6 @@ }, /turf/open/floor/plating/asteroid/snow/icemoon, /area/icemoon/surface/outdoors) -"qAq" = ( -/obj/machinery/quantumpad{ - map_pad_id = "5"; - map_pad_link_id = "6" - }, -/turf/open/floor/plasteel, -/area/hallway/primary/aft) "qAx" = ( /obj/structure/disposalpipe/segment{ dir = 9 @@ -32343,7 +33085,7 @@ /area/bridge) "qMN" = ( /obj/structure/table, -/obj/item/storage/pill_bottle/dice, +/obj/item/storage/box/dice, /turf/open/floor/plasteel/grimy, /area/crew_quarters/fitness/recreation) "qNB" = ( @@ -33777,35 +34519,6 @@ }, /turf/open/floor/plasteel, /area/engine/engineering) -"rFQ" = ( -/obj/structure/table/reinforced, -/mob/living/simple_animal/parrot/Poly, -/obj/item/clothing/glasses/meson{ - pixel_y = 4 - }, -/obj/item/cartridge/atmos, -/obj/item/cartridge/engineering{ - pixel_x = -3; - pixel_y = 2 - }, -/obj/item/cartridge/engineering{ - pixel_x = -3; - pixel_y = 2 - }, -/obj/item/cartridge/engineering{ - pixel_x = -3; - pixel_y = 2 - }, -/obj/item/radio/intercom{ - dir = 4; - name = "Station Intercom (General)"; - pixel_x = 27 - }, -/obj/machinery/keycard_auth{ - pixel_y = -28 - }, -/turf/open/floor/plasteel, -/area/crew_quarters/heads/chief) "rGc" = ( /obj/machinery/atmospherics/pipe/heat_exchanging/simple{ dir = 6 @@ -34298,10 +35011,6 @@ }, /turf/open/floor/plasteel/dark, /area/medical/morgue) -"rYN" = ( -/obj/structure/chair/stool, -/turf/open/floor/carpet, -/area/chapel/main) "rYQ" = ( /obj/machinery/atmospherics/pipe/heat_exchanging/simple{ dir = 10 @@ -34519,16 +35228,6 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/plasteel, /area/crew_quarters/fitness) -"seR" = ( -/obj/machinery/airalarm{ - dir = 8; - pixel_x = 24 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/turf/open/floor/plasteel, -/area/hallway/primary/central) "seZ" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 6 @@ -34785,15 +35484,6 @@ /obj/machinery/computer/card, /turf/open/floor/wood, /area/crew_quarters/heads/captain) -"soN" = ( -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ - dir = 1 - }, -/obj/effect/turf_decal/tile/yellow{ - dir = 4 - }, -/turf/open/floor/plasteel, -/area/hallway/primary/port) "spa" = ( /obj/structure/disposalpipe/segment{ dir = 10 @@ -35302,16 +35992,6 @@ /obj/effect/turf_decal/stripes/corner, /turf/open/floor/engine, /area/engine/engineering) -"sIn" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/door/airlock/external{ - req_one_access_txt = "13,8" - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/turf/open/floor/plating, -/area/maintenance/port/fore) "sIT" = ( /obj/structure/reagent_dispensers/fueltank, /turf/open/floor/pod/dark, @@ -37160,18 +37840,6 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/carpet, /area/hallway/secondary/exit/departure_lounge) -"tJL" = ( -/obj/structure/cable{ - icon_state = "2-4" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 6 - }, -/obj/structure/disposalpipe/segment{ - dir = 6 - }, -/turf/open/floor/plasteel, -/area/hallway/primary/aft) "tKa" = ( /obj/machinery/door/airlock/security/glass{ id_tag = "innerbrig"; @@ -37430,24 +38098,6 @@ }, /turf/open/floor/plasteel, /area/hallway/secondary/exit/departure_lounge) -"tQd" = ( -/obj/effect/turf_decal/tile/red, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/obj/structure/closet/secure_closet/security/engine, -/obj/item/radio/intercom{ - pixel_y = -26 - }, -/obj/machinery/camera{ - c_tag = "Security Post - Cargo"; - dir = 1 - }, -/turf/open/floor/plasteel, -/area/security/checkpoint/supply) "tQv" = ( /obj/effect/turf_decal/tile/purple, /obj/effect/turf_decal/tile/purple{ @@ -37694,11 +38344,6 @@ }, /turf/open/floor/plasteel, /area/science/robotics/mechbay) -"tWx" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on, -/obj/structure/disposalpipe/segment, -/turf/open/floor/plasteel, -/area/hallway/primary/central) "tXn" = ( /obj/structure/cable{ icon_state = "4-8" @@ -38012,23 +38657,6 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/carpet, /area/crew_quarters/dorms) -"ugr" = ( -/obj/machinery/button/door{ - id = "Bath1"; - name = "Door Bolt Control"; - normaldoorcontrol = 1; - pixel_x = 24; - pixel_y = -5; - specialfunctions = 4 - }, -/obj/machinery/shower{ - pixel_y = 20 - }, -/obj/machinery/light/small{ - dir = 8 - }, -/turf/open/floor/plasteel/freezer, -/area/crew_quarters/dorms) "uha" = ( /obj/structure/cable{ icon_state = "4-8" @@ -39813,16 +40441,6 @@ /obj/machinery/meter, /turf/open/floor/engine, /area/engine/engineering) -"vlz" = ( -/obj/structure/urinal{ - pixel_y = 32 - }, -/obj/item/radio/intercom{ - name = "Station Intercom (General)"; - pixel_x = 30 - }, -/turf/open/floor/plasteel/freezer, -/area/crew_quarters/dorms) "vlC" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 1 @@ -42975,24 +43593,6 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/plasteel, /area/hallway/primary/central) -"xdr" = ( -/obj/machinery/camera{ - c_tag = "Head of Security's Office"; - dir = 8 - }, -/obj/structure/bed/dogbed{ - desc = "A comfy-looking pet bed. You can even strap your pet in, in case the gravity turns off."; - name = "pet bed" - }, -/mob/living/simple_animal/hostile/retaliate/bat/secbat{ - desc = "An adorable fruit bat with a cute little hat, may or may not have a reputation for biting out eyeballs, or at least that's what the HoS'd tell you."; - name = "Colonel Chomps" - }, -/obj/item/storage/secure/safe/HoS{ - pixel_x = 35 - }, -/turf/open/floor/carpet, -/area/crew_quarters/heads/hos) "xdD" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/visible{ dir = 4 @@ -43119,9 +43719,6 @@ }, /turf/open/floor/plasteel/white, /area/medical/medbay/central) -"xhH" = ( -/turf/closed/wall/r_wall, -/area/hallway/primary/central) "xhV" = ( /obj/effect/turf_decal/bot_white, /obj/structure/window/reinforced{ @@ -43201,20 +43798,6 @@ /obj/machinery/vending/snack/random, /turf/open/floor/plasteel, /area/crew_quarters/fitness) -"xlg" = ( -/obj/machinery/atmospherics/components/unary/thermomachine/freezer, -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/machinery/camera{ - c_tag = "Medbay Cryogenics"; - network = list("ss13","medbay") - }, -/turf/open/floor/plasteel/white, -/area/medical/medbay/central) "xlm" = ( /obj/machinery/vending/wardrobe/atmos_wardrobe, /turf/open/floor/plasteel, @@ -43318,11 +43901,6 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/plasteel/grimy, /area/crew_quarters/bar) -"xou" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on, -/obj/machinery/computer/shuttle/snow_taxi, -/turf/open/floor/plasteel, -/area/quartermaster/miningdock) "xow" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/door/airlock/security/glass{ @@ -43496,18 +44074,6 @@ /obj/machinery/atmospherics/pipe/simple/supply/visible, /turf/open/floor/plating, /area/maintenance/department/electrical) -"xve" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/effect/turf_decal/tile/bar{ - dir = 1 - }, -/obj/effect/turf_decal/tile/bar, -/obj/structure/disposalpipe/segment, -/turf/open/floor/plasteel, -/area/hallway/primary/aft) "xvj" = ( /obj/structure/cable{ icon_state = "4-8" @@ -43681,10 +44247,6 @@ }, /turf/open/floor/plasteel/white, /area/medical/medbay/central) -"xCr" = ( -/obj/effect/landmark/blobstart, -/turf/open/floor/plating, -/area/medical/medbay/central) "xCC" = ( /obj/effect/turf_decal/tile/red{ dir = 1 @@ -44311,10 +44873,6 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/central) -"xXX" = ( -/obj/structure/reagent_dispensers/watertank, -/turf/open/floor/plating, -/area/maintenance/central) "xYD" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, /turf/open/floor/carpet, @@ -44369,10 +44927,6 @@ }, /turf/open/floor/plating/snowed/smoothed/icemoon, /area/icemoon/surface/outdoors) -"yae" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on, -/turf/open/floor/plasteel, -/area/hallway/primary/central) "ybp" = ( /obj/structure/chair{ dir = 8 @@ -58951,8 +59505,8 @@ ash ash nQr ash -ash -ash +tmO +tmO wje ahC nOK @@ -59208,9 +59762,9 @@ rbW aoR apO ash -arG -ash -qbh +abq +tmO +abu auY hEf eGO @@ -59465,8 +60019,8 @@ rRV aoT pWz ash -xCr -ash +abr +abt lxF rbo ioG @@ -59719,11 +60273,11 @@ tUi ash tVS anm -jiV -ash -ash +abH ash ash +tmO +tmO dXR hOA irg @@ -59983,7 +60537,7 @@ arI syN atr rbo -jwo +aaF azq azq azq @@ -60222,7 +60776,7 @@ ash cxX sXJ sXJ -hnB +aal qhU vCE gIm @@ -61282,7 +61836,7 @@ aPB oqL aLG aNk -aOl +abM aPA avT avT @@ -62536,7 +63090,7 @@ vvH vvH fsA gZX -xlg +abE jUu xGP anm @@ -63319,7 +63873,7 @@ mAx ndm rQN aoX -soN +aaB ojv oTu oTu @@ -64602,7 +65156,7 @@ aoX ali yds yds -aon +abI aoX rJw tkr @@ -64837,10 +65391,10 @@ avT avT xUL rTG -sIn +abC kxU sdH -sIn +abD kxU pyw nYZ @@ -65118,7 +65672,7 @@ yds yds qWL aoX -gsM +abJ tkr iPX rQJ @@ -65643,7 +66197,7 @@ ayA sNK xmo rqW -mzB +abL rQJ szG aHG @@ -66390,7 +66944,7 @@ xUL xUL xUL tmO -fYx +aaA oDm tmO rhX @@ -66660,7 +67214,7 @@ nrJ iAR rik xWq -aAL +abK gxi wEP wJH @@ -67689,7 +68243,7 @@ xWq xWq xWq tmO -wje +aaC wje tmO ydp @@ -68203,7 +68757,7 @@ xUL xUL xUL tmO -wje +aaD iPX tmO tmO @@ -68461,7 +69015,7 @@ xUL xUL usE buO -wje +aaE cpC tmO ydp @@ -71329,7 +71883,7 @@ avT kfv kfv ilb -ifQ +aam rlG wSb wav @@ -72111,7 +72665,7 @@ wDk pmK dbB nxv -eZn +abW xBv nQM lZi @@ -74684,7 +75238,7 @@ oJF piv nre bWR -xdr +aan uKb fKC rVN @@ -75204,7 +75758,7 @@ cBD bQj gCG sdN -xXX +acd ubL diH uPJ @@ -75454,7 +76008,7 @@ bDr alG fmt cBD -cbz +aca jae bNS pST @@ -75719,7 +76273,7 @@ giT bZF xkT bVR -rYN +acf qOb bSd bXO @@ -77234,7 +77788,7 @@ xZg xZg xZg uBa -eeh +abN grV cTD cTD @@ -77244,7 +77798,7 @@ cTD grV lbp knn -eOK +aaW bBz lbp cBD @@ -77464,7 +78018,7 @@ gky ptY cgH ktw -xZL +aaG lzB avT avT @@ -77499,30 +78053,30 @@ vPQ vPQ vPQ bwu +aaR +aaT +aaX +aaY +abb lhQ -yae -kPj -bBB -lhQ -lhQ -vPQ -cGQ -vPQ -vPQ +abV +abf +abb +abb bNn vPQ qQt vPQ bJF bVX -cGQ +abj hhz vPQ vPQ vPQ haj pjn -tNf +abl sAw vPQ mdG @@ -78235,7 +78789,7 @@ cPI kxP vAs ktw -xZL +aaI lzB avT avT @@ -78250,7 +78804,7 @@ wxT bUP fLK rmN -oLT +aaK ljL uBa uBa @@ -78271,19 +78825,19 @@ fXU ffm jBl fmw -tWx +abT pBU reS +abc lhQ -lhQ -ceA -vun -ceA -ceA -ceA -seR -ceA -ceA +abd +abg +abd +abd +abd +abi +abd +abd bmP bQs vun @@ -78295,7 +78849,7 @@ ceA vun lhQ lhQ -ceA +abm bPc ceA bUL @@ -78519,7 +79073,7 @@ piX hJw kop uBa -fuy +abO bwx bwx bwx @@ -79033,7 +79587,7 @@ fWE wbE wbE uBa -rcH +abP bwx iSo bpM @@ -80579,8 +81133,8 @@ tHU bBL guv bpO -bDR -gfF +aaL +abR bDR jOl bBL @@ -80818,13 +81372,13 @@ iaO dnm hHC dnm -unA +aaJ unA unA unA unA dnm -unA +aaJ dnm unA unA @@ -80841,7 +81395,7 @@ bsx bLT bLT bLT -xhH +aaV rle cSG bCQ @@ -81096,7 +81650,7 @@ vAs vAs vAs bLT -fnu +aaN bxR mPM ohK @@ -81116,7 +81670,7 @@ bQC gsK wuB pyI -bXW +acg eqZ wpN vOV @@ -81274,7 +81828,7 @@ dvs mtP naE mtP -mtP +aaU nOY mtP naE @@ -81353,7 +81907,7 @@ vAs vAs vAs bLT -xou +aaQ jkL fcJ cqd @@ -81526,7 +82080,7 @@ ydp avT avT iHM -iHM +pgp pgp pgp pgp @@ -81781,11 +82335,11 @@ xUL ydp ydp ydp -avT bmX avT pgp -pCj +aab +dZV dZV gLk pgp @@ -81871,7 +82425,7 @@ bEi bEi lbp bAs -nmY +aaZ bCL bDW gpp @@ -82040,9 +82594,9 @@ ydp ydp ydp avT -avT pgp -hGM +aac +gLk gLk gLk pgp @@ -82296,10 +82850,10 @@ ydp ydp ydp ydp -ydp avT pgp -vlz +aab +aad gLk fBs pgp @@ -82390,11 +82944,11 @@ aGl bEa pHl aaw -gKB +abh qJV fjU fjU -fjU +acb qJV fuG qJV @@ -82554,7 +83108,7 @@ ydp ydp ydp avT -avT +pgp pgp pgp pgp @@ -82813,7 +83367,7 @@ ydp avT ydp pgp -ugr +aae pBh gLk pgp @@ -83072,7 +83626,7 @@ ydp pgp pgp pgp -eEa +aaf pgp pgp pgp @@ -83345,8 +83899,8 @@ skZ mSt geO cQv -nGa -fpW +aaj +aak oyf dzS dSQ @@ -83593,7 +84147,7 @@ mWy pgp uEG dKn -gEz +abA pax sdq iux @@ -83677,13 +84231,13 @@ dFp wTK tDY oXn -cSg +abY tRe egg cbQ iXG bWf -bVa +acc bVa bWf ftV @@ -84178,7 +84732,7 @@ bvq oCZ lxV dGP -evr +abS lxV hJE cmC @@ -84622,7 +85176,7 @@ iML kFr vuO vaj -rTv +aau mSt dWt fyr @@ -85373,7 +85927,7 @@ xUL xUL xUL kVO -bQf +aao qgm qgm qgm @@ -85390,7 +85944,7 @@ xJB hyK vVN qeL -oiX +abn trU knI oIb @@ -85632,7 +86186,7 @@ xUL qaO gct sGE -tJL +aaq ixf ixf giv @@ -86165,7 +86719,7 @@ iqZ seG tYT qKA -cSv +aav pJS pJS tQG @@ -86415,7 +86969,7 @@ mKv sAh sAh sAh -urI +aar uEz uEz hrS @@ -86658,7 +87212,7 @@ xUL xUL xUL kVO -qAq +aap acq fJc lfy @@ -87179,7 +87733,7 @@ wAx wuQ vnM wAx -mQo +abv mbE qss sYv @@ -87456,7 +88010,7 @@ mhq bNF wIA hTO -noB +aai wIA kti nrg @@ -88462,7 +89016,7 @@ hAw skK vKa gdg -pkh +aaa loM vKa nsv @@ -88483,7 +89037,7 @@ pJS leq qxT wIA -iCO +abp pJS pJS pJS @@ -88987,12 +89541,12 @@ fTy jvb xZp dVr -gRS +abx msK cKk dNB rmV -dDf +abB gaf pMD shN @@ -89245,7 +89799,7 @@ stW iKV hFj oNv -guV +abz cKk meG mcU @@ -90278,7 +90832,7 @@ jHT rkd mcU rNS -vyf +aax vyf hLQ nsf @@ -90295,7 +90849,7 @@ gwY pdD hMM qKP -tQd +abF jIt avT avT @@ -90541,7 +91095,7 @@ vkk qSi vkk vkk -pUz +aay pqj mcU pqj @@ -91034,7 +91588,7 @@ pCU ixf kcn llu -xve +abw gJP eGi mIe @@ -91312,7 +91866,7 @@ uqy yes iqH iqH -iqH +aaz iqH yes iqH @@ -92068,10 +92622,10 @@ gcY xop fbq lFv -dvh +aag gkl eOt -eFy +aby rYc hbb rkd @@ -92331,7 +92885,7 @@ cKk cKk cKk cKk -mkm +aat lpl xcA srk @@ -93875,7 +94429,7 @@ fPd eYu xOj jKF -jKb +abo wdR sda pAC @@ -94900,7 +95454,7 @@ wTe sPt iBL bnU -fNd +aas bDg fKE bnU @@ -96953,7 +97507,7 @@ ulr jJb xfH puE -rFQ +aah iiY piR tty diff --git a/code/__DEFINES/_flags/_flags.dm b/code/__DEFINES/_flags/_flags.dm index 3a31eebb19..0734feaa42 100644 --- a/code/__DEFINES/_flags/_flags.dm +++ b/code/__DEFINES/_flags/_flags.dm @@ -138,14 +138,6 @@ GLOBAL_LIST_INIT(bitflags, list(1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 204 #define MOBILITY_FLAGS_DEFAULT (MOBILITY_MOVE | MOBILITY_STAND | MOBILITY_PICKUP | MOBILITY_USE | MOBILITY_UI | MOBILITY_STORAGE | MOBILITY_PULL | MOBILITY_RESIST) #define MOBILITY_FLAGS_ANY_INTERACTION (MOBILITY_USE | MOBILITY_PICKUP | MOBILITY_UI | MOBILITY_STORAGE) -// melee_attack_chain() attackchain_flags -/// The attack is from a parry counterattack. -#define ATTACKCHAIN_PARRY_COUNTERATTACK (1<<0) - -// UnarmedAttack() flags -/// Attack is from a parry counterattack -#define UNARMED_ATTACK_PARRY (1<<0) - /// If the thing can reflect light (lasers/energy) #define RICOCHET_SHINY (1<<0) /// If the thing can reflect matter (bullets/bomb shrapnel) diff --git a/code/__DEFINES/_flags/return_values.dm b/code/__DEFINES/_flags/return_values.dm new file mode 100644 index 0000000000..28606265b3 --- /dev/null +++ b/code/__DEFINES/_flags/return_values.dm @@ -0,0 +1,22 @@ +/////////// ATTACKCHAIN_FLAGS //////////// +// melee_attack_chain(), attackby(), pre_attack(), afterattack(), and tool_act(), attack() and **anything that is called by ClickOn()** return values. +// These are all passed down through the attack chain and are binary OR'd into each other! +/// Stop the attack chain if still in melee_attack_chain() +#define STOP_ATTACK_PROC_CHAIN (1<<0) +/// This attack should discard last_action instead of flushing (storing) it). You should probably know what you're doing if you use this considering this is how clickdelay is enforced. +#define DISCARD_LAST_ACTION (1<<1) +/// There are a number of "safety nets" intended to default-handle clickdelay. Return this flag to bypass ALL of them. Be sure +/// you know EXACTLY what you are doing! +#define NO_AUTO_CLICKDELAY_HANDLING (1<<2) +/// Only used with UnarmedAttack(). Interrupts unarmed attack from progressing. +#define INTERRUPT_UNARMED_ATTACK (1<<3) +/// Attack should not set next action even if the atom wants it to be an action +#define ATTACK_IGNORE_ACTION (1<<4) +/// Attack should not at all check last_action/attack_hand_speed even if the atom wants to +#define ATTACK_IGNORE_CLICKDELAY (1<<5) +/// This attack is from a parry counterattack +#define ATTACK_IS_PARRY_COUNTERATTACK (1<<6) + +// obj/item/dropped() +/// dropped() relocated this item, return FALSE for doUnEquip. +#define ITEM_RELOCATED_BY_DROPPED "relocated_by_dropped" diff --git a/code/__DEFINES/admin.dm b/code/__DEFINES/admin.dm index 0b2764c4a7..198356f804 100644 --- a/code/__DEFINES/admin.dm +++ b/code/__DEFINES/admin.dm @@ -74,6 +74,7 @@ #define ADMIN_PUNISHMENT_MAZING "Puzzle" #define ADMIN_PUNISHMENT_PIE "Cream Pie" #define ADMIN_PUNISHMENT_CUSTOM_PIE "Custom Cream Pie" +#define ADMIN_PUNISHMENT_SHOES "Knot Shoes" #define ADMIN_PUNISHMENT_CRACK ":B:oneless" #define ADMIN_PUNISHMENT_BLEED ":B:loodless" #define ADMIN_PUNISHMENT_SCARIFY "Scarify" diff --git a/code/__DEFINES/combat.dm b/code/__DEFINES/combat.dm index dff52f4748..a8c2703bc9 100644 --- a/code/__DEFINES/combat.dm +++ b/code/__DEFINES/combat.dm @@ -108,7 +108,6 @@ #define CLICK_CD_RANGE 4 #define CLICK_CD_RAPID 2 #define CLICK_CD_CLICK_ABILITY 6 -#define CLICK_CD_BREAKOUT 100 #define CLICK_CD_HANDCUFFED 10 #define CLICK_CD_RESIST 20 #define CLICK_CD_GRABBING 10 diff --git a/code/__DEFINES/is_helpers.dm b/code/__DEFINES/is_helpers.dm index a9d9bda00c..964c4e911e 100644 --- a/code/__DEFINES/is_helpers.dm +++ b/code/__DEFINES/is_helpers.dm @@ -65,9 +65,8 @@ GLOBAL_LIST_INIT(turfs_without_ground, typecacheof(list( #define isslimeperson(A) (is_species(A, /datum/species/jelly/slime)) #define isluminescent(A) (is_species(A, /datum/species/jelly/luminescent)) #define iszombie(A) (is_species(A, /datum/species/zombie)) -#define ismoth(A) (is_species(A, /datum/species/insect)) #define ishumanbasic(A) (is_species(A, /datum/species/human)) -#define iscatperson(A) (ishumanbasic(A) && istype(A.dna.species, /datum/species/human/felinid) ) +#define iscatperson(A) (ishumanbasic(A) && istype(A.dna.species, /datum/species/human/felinid)) #define isdwarf(A) (is_species(A, /datum/species/dwarf)) #define isdullahan(A) (is_species(A, /datum/species/dullahan)) #define isangel(A) (is_species(A, /datum/species/angel)) @@ -80,8 +79,6 @@ GLOBAL_LIST_INIT(turfs_without_ground, typecacheof(list( #define isipcperson(A) (is_species(A, /datum/species/ipc)) #define issynthliz(A) (is_species(A, /datum/species/synthliz)) #define ismammal(A) (is_species(A, /datum/species/mammal)) -#define isavian(A) (is_species(A, /datum/species/avian)) -#define isaquatic(A) (is_species(A, /datum/species/aquatic)) #define isinsect(A) (is_species(A, /datum/species/insect)) #define isxenoperson(A) (is_species(A, /datum/species/xeno)) #define isstartjelly(A) (is_species(A, /datum/species/jelly/roundstartslime)) diff --git a/code/__DEFINES/misc.dm b/code/__DEFINES/misc.dm index 071dab20b1..120fdcb72d 100644 --- a/code/__DEFINES/misc.dm +++ b/code/__DEFINES/misc.dm @@ -535,4 +535,9 @@ GLOBAL_LIST_INIT(pda_reskins, list(PDA_SKIN_CLASSIC = 'icons/obj/pda.dmi', PDA_S #define LOOT_RESTRICTION_MIND_PILE 3 //limited to the current pile. #define LOOT_RESTRICTION_CKEY_PILE 4 //Idem +//stages of shoe tying-ness +#define SHOES_UNTIED 0 +#define SHOES_TIED 1 +#define SHOES_KNOTTED 2 + #define WANTED_FILE "wanted_message.json" diff --git a/code/__DEFINES/misc/return_values.dm b/code/__DEFINES/misc/return_values.dm deleted file mode 100644 index d55f603de9..0000000000 --- a/code/__DEFINES/misc/return_values.dm +++ /dev/null @@ -1,3 +0,0 @@ -// obj/item/dropped -/// dropped() relocated this item, return FALSE for doUnEquip. -#define ITEM_RELOCATED_BY_DROPPED "relocated_by_dropped" diff --git a/code/__DEFINES/subsystems.dm b/code/__DEFINES/subsystems.dm index a6bd7a1c8e..7a188281d0 100644 --- a/code/__DEFINES/subsystems.dm +++ b/code/__DEFINES/subsystems.dm @@ -107,6 +107,7 @@ #define FIRE_PRIORITY_INSTRUMENTS 30 #define FIRE_PRIORITY_FIELDS 30 #define FIRE_PRIOTITY_SMOOTHING 35 +#define FIRE_PRIORITY_HUDS 40 #define FIRE_PRIORITY_NETWORKS 40 #define FIRE_PRIORITY_OBJ 40 #define FIRE_PRIORITY_ACID 40 diff --git a/code/__HELPERS/do_after.dm b/code/__HELPERS/do_after.dm index 614c3d73c4..30d40f3867 100644 --- a/code/__HELPERS/do_after.dm +++ b/code/__HELPERS/do_after.dm @@ -167,6 +167,7 @@ var/target_loc = target.loc LAZYADD(user.do_afters, target) + LAZYADD(target.targeted_by, user) var/holding = user.get_active_held_item() var/datum/progressbar/progbar @@ -189,6 +190,10 @@ . = FALSE break + if(!(target in user.do_afters)) + . = FALSE + break + if(drifting && !user.inertia_dir) drifting = 0 user_loc = user.loc @@ -198,12 +203,14 @@ break if(progress) qdel(progbar) + if(!QDELETED(target)) LAZYREMOVE(user.do_afters, target) + LAZYREMOVE(target.targeted_by, user) //some additional checks as a callback for for do_afters that want to break on losing health or on the mob taking action /mob/proc/break_do_after_checks(list/checked_health, check_clicks) - if(check_clicks && next_move > world.time) + if(check_clicks && !CheckActionCooldown()) return FALSE return TRUE @@ -224,6 +231,7 @@ if(target) LAZYADD(user.do_afters, target) + LAZYADD(target.targeted_by, user) var/atom/Uloc = user.loc @@ -288,6 +296,10 @@ if(!QDELETED(target)) LAZYREMOVE(user.do_afters, target) + if(!QDELETED(target)) + LAZYREMOVE(user.do_afters, target) + LAZYREMOVE(target.targeted_by, user) + /mob/proc/do_after_coefficent() // This gets added to the delay on a do_after, default 1 . = 1 return @@ -307,6 +319,7 @@ for(var/atom/target in targets) originalloc[target] = target.loc LAZYADD(user.do_afters, target) + LAZYADD(target.targeted_by, user) var/holding = user.get_active_held_item() var/datum/progressbar/progbar @@ -341,3 +354,4 @@ var/atom/target = thing if(!QDELETED(target)) LAZYREMOVE(user.do_afters, target) + LAZYREMOVE(target.targeted_by, user) diff --git a/code/_onclick/ai.dm b/code/_onclick/ai.dm index 7b40c96a6d..18aaf66659 100644 --- a/code/_onclick/ai.dm +++ b/code/_onclick/ai.dm @@ -19,10 +19,6 @@ A.move_camera_by_click() /mob/living/silicon/ai/ClickOn(var/atom/A, params) - if(world.time <= next_click) - return - next_click = world.time + 1 - if(!can_interact_with(A)) return @@ -74,16 +70,16 @@ CtrlClickOn(A) return - if(world.time <= next_move) + if(!CheckActionCooldown(immediate = TRUE)) return if(aicamera.in_camera_mode) aicamera.camera_mode_off() - aicamera.captureimage(pixel_turf, usr) + INVOKE_ASYNC(aicamera, /obj/item/camera.proc/captureimage, pixel_turf, usr) return if(waypoint_mode) - waypoint_mode = 0 - set_waypoint(A) + waypoint_mode = FALSE + INVOKE_ASYNC(src, .proc/set_waypoint, A) return A.attack_ai(src) diff --git a/code/_onclick/click.dm b/code/_onclick/click.dm index 8a63339081..042ab3aaee 100644 --- a/code/_onclick/click.dm +++ b/code/_onclick/click.dm @@ -1,38 +1,3 @@ -/* - Click code cleanup - ~Sayu -*/ - -// 1 decisecond click delay (above and beyond mob/next_move) -//This is mainly modified by click code, to modify click delays elsewhere, use next_move and changeNext_move() -/mob/var/next_click = 0 - -// THESE DO NOT EFFECT THE BASE 1 DECISECOND DELAY OF NEXT_CLICK -/mob/var/next_move_adjust = 0 //Amount to adjust action/click delays by, + or - -/mob/var/next_move_modifier = 1 //Value to multiply action/click delays by - - -//Delays the mob's next click/action by num deciseconds -// eg: 10-3 = 7 deciseconds of delay -// eg: 10*0.5 = 5 deciseconds of delay -// DOES NOT EFFECT THE BASE 1 DECISECOND DELAY OF NEXT_CLICK - -/mob/proc/timeToNextMove() - return max(0, next_move - world.time) - -/mob/proc/changeNext_move(num) - next_move = world.time + ((num+next_move_adjust)*next_move_modifier) - -/mob/living/changeNext_move(num) - last_click_move = next_move - var/mod = next_move_modifier - var/adj = next_move_adjust - for(var/i in status_effects) - var/datum/status_effect/S = i - mod *= S.nextmove_modifier() - adj += S.nextmove_adjust() - next_move = world.time + ((num + adj)*mod) - /* Before anything else, defer these calls to a per-mobtype handler. This allows us to remove istype() spaghetti code, but requires the addition of other handler procs to simplify it. @@ -45,7 +10,7 @@ /atom/Click(location,control,params) if(flags_1 & INITIALIZED_1) SEND_SIGNAL(src, COMSIG_CLICK, location, control, params, usr) - usr.ClickOn(src, params) + usr.CommonClickOn(src, params) /atom/DblClick(location,control,params) if(flags_1 & INITIALIZED_1) @@ -55,6 +20,21 @@ if(flags_1 & INITIALIZED_1) usr.MouseWheelOn(src, delta_x, delta_y, params) +/** + * Common mob click code + */ +/mob/proc/CommonClickOn(atom/A, params) + SHOULD_NOT_SLEEP(TRUE) + if(mob_transforming) + return + if(SEND_SIGNAL(src, COMSIG_MOB_CLICKON, A, params) & COMSIG_MOB_CANCEL_CLICKON) + return + . = ClickOn(A, params) + if(!(. & DISCARD_LAST_ACTION)) + FlushCurrentAction() + else + DiscardCurrentAction() + /* Standard mob ClickOn() Handles exceptions: Buildmode, middle click, modified clicks, mech actions @@ -68,50 +48,34 @@ * item/afterattack(atom,user,adjacent,params) - used both ranged and adjacent * mob/RangedAttack(atom,params) - used only ranged, only used for tk and laser eyes but could be changed */ -/mob/proc/ClickOn( atom/A, params ) - if(world.time <= next_click) - return - next_click = world.time + world.tick_lag - +/mob/proc/ClickOn(atom/A, params) + SHOULD_NOT_SLEEP(TRUE) if(check_click_intercept(params,A)) return - if(mob_transforming) - return - - if(SEND_SIGNAL(src, COMSIG_MOB_CLICKON, A, params) & COMSIG_MOB_CANCEL_CLICKON) - return - var/list/modifiers = params2list(params) if(modifiers["shift"] && modifiers["middle"]) - ShiftMiddleClickOn(A) - return + return ShiftMiddleClickOn(A) if(modifiers["shift"] && modifiers["ctrl"]) - CtrlShiftClickOn(A) - return + return CtrlShiftClickOn(A) if(modifiers["middle"]) - MiddleClickOn(A) - return + return MiddleClickOn(A) if(modifiers["shift"] && (client && client.show_popup_menus || modifiers["right"])) //CIT CHANGE - makes shift-click examine use right click instead of left click in combat mode - ShiftClickOn(A) - return + return ShiftClickOn(A) if(modifiers["alt"]) // alt and alt-gr (rightalt) - AltClickOn(A) - return + return AltClickOn(A) if(modifiers["ctrl"]) - CtrlClickOn(A) - return + return CtrlClickOn(A) if(modifiers["right"]) //CIT CHANGE - allows right clicking to perform actions - RightClickOn(A,params) //CIT CHANGE - ditto - return //CIT CHANGE - ditto + return RightClickOn(A, params) //CIT CHANGE - ditto if(incapacitated(ignore_restraints = 1)) return face_atom(A) - if(next_move > world.time) // in the year 2000... + if(!CheckActionCooldown(immediate = TRUE)) return if(!modifiers["catcher"] && A.IsObscured()) @@ -119,12 +83,12 @@ if(ismecha(loc)) var/obj/mecha/M = loc - return M.click_action(A,src,params) + M.click_action(A,src,params) + return TRUE if(restrained()) - changeNext_move(CLICK_CD_HANDCUFFED) //Doing shit in cuffs shall be vey slow - RestrainedClickOn(A) - return + DelayNextAction(CLICK_CD_HANDCUFFED) + return RestrainedClickOn(A) if(in_throw_mode) throw_item(A) @@ -141,12 +105,12 @@ //User itself, current loc, and user inventory if(A in DirectAccess()) if(W) - W.melee_attack_chain(src, A, params) + return W.melee_attack_chain(src, A, params) else - if(ismob(A)) - changeNext_move(CLICK_CD_MELEE) - UnarmedAttack(A) - return + . = UnarmedAttack(A, TRUE, a_intent) + if(!(. & NO_AUTO_CLICKDELAY_HANDLING) && ismob(A)) + DelayNextAction(CLICK_CD_MELEE) + return //Can't reach anything else in lockers or other weirdness if(!loc.AllowClick()) @@ -155,16 +119,17 @@ //Standard reach turf to turf or reaching inside storage if(CanReach(A,W)) if(W) - W.melee_attack_chain(src, A, params) + return W.melee_attack_chain(src, A, params) else - if(ismob(A)) - changeNext_move(CLICK_CD_MELEE) - UnarmedAttack(A, 1) + . = UnarmedAttack(A, TRUE, a_intent) + if(!(. & NO_AUTO_CLICKDELAY_HANDLING) && ismob(A)) + DelayNextAction(CLICK_CD_MELEE) + return else if(W) - W.ranged_attack_chain(src, A, params) + return W.ranged_attack_chain(src, A, params) else - RangedAttack(A,params) + return RangedAttack(A,params) //Is the atom obscured by a PREVENT_CLICK_UNDER_1 object above it /atom/proc/IsObscured() @@ -270,8 +235,6 @@ in human click code to allow glove touches only at melee range. */ /mob/proc/UnarmedAttack(atom/A, proximity, intent = a_intent, flags = NONE) - if(ismob(A)) - changeNext_move(CLICK_CD_MELEE) /* Ranged unarmed attack: @@ -304,7 +267,6 @@ var/datum/antagonist/changeling/C = mind.has_antag_datum(/datum/antagonist/changeling) if(C && C.chosen_sting) C.chosen_sting.try_to_sting(src,A) - next_click = world.time + 5 return swap_hand() @@ -337,24 +299,24 @@ */ /mob/proc/CtrlClickOn(atom/A) - A.CtrlClick(src) - return + return A.CtrlClick(src) /atom/proc/CtrlClick(mob/user) SEND_SIGNAL(src, COMSIG_CLICK_CTRL, user) var/mob/living/ML = user if(istype(ML)) - ML.pulled(src) + INVOKE_ASYNC(ML, /mob/living.verb/pulled, src) /mob/living/carbon/human/CtrlClick(mob/user) if(ishuman(user) && Adjacent(user) && !user.incapacitated()) - if(world.time < user.next_move) + if(!user.CheckActionCooldown()) return FALSE var/mob/living/carbon/human/H = user H.dna.species.grab(H, src, H.mind.martial_art) - H.changeNext_move(CLICK_CD_MELEE) + H.DelayNextAction(CLICK_CD_MELEE) + return TRUE else - ..() + return ..() /* Alt click Unused except for AI @@ -377,8 +339,8 @@ var/datum/antagonist/changeling/C = mind.has_antag_datum(/datum/antagonist/changeling) if(C && C.chosen_sting) C.chosen_sting.try_to_sting(src,A) - next_click = world.time + 5 - return + DelayNextAction(CLICK_CD_RANGE) + return TRUE ..() /atom/proc/AltClick(mob/user) @@ -413,9 +375,11 @@ return /mob/living/LaserEyes(atom/A, params) - changeNext_move(CLICK_CD_RANGE) + if(!CheckActionCooldown(CLICK_CD_RANGE)) + return + DelayNextAction() - var/obj/item/projectile/beam/LE = new /obj/item/projectile/beam( loc ) + var/obj/item/projectile/beam/LE = new /obj/item/projectile/beam(loc) LE.icon = 'icons/effects/genetics.dmi' LE.icon_state = "eyelasers" playsound(usr.loc, 'sound/weapons/taser2.ogg', 75, 1) @@ -424,6 +388,7 @@ LE.def_zone = get_organ_target() LE.preparePixelProjectile(A, src, params) LE.fire() + return TRUE // Simple helper to face what you clicked on, in case it should be needed in more than one place /mob/proc/face_atom(atom/A, ismousemovement = FALSE) diff --git a/code/_onclick/cyborg.dm b/code/_onclick/cyborg.dm index 82288ee0d1..372fe46046 100644 --- a/code/_onclick/cyborg.dm +++ b/code/_onclick/cyborg.dm @@ -7,10 +7,6 @@ */ /mob/living/silicon/robot/ClickOn(var/atom/A, var/params) - if(world.time <= next_click) - return - next_click = world.time + 1 - if(check_click_intercept(params,A)) return @@ -19,25 +15,19 @@ var/list/modifiers = params2list(params) if(modifiers["shift"] && modifiers["ctrl"]) - CtrlShiftClickOn(A) - return + return CtrlShiftClickOn(A) if(modifiers["shift"] && modifiers["middle"]) - ShiftMiddleClickOn(A) - return + return ShiftMiddleClickOn(A) if(modifiers["middle"]) - MiddleClickOn(A) - return + return MiddleClickOn(A) if(modifiers["shift"]) - ShiftClickOn(A) - return + return ShiftClickOn(A) if(modifiers["alt"]) // alt and alt-gr (rightalt) - AltClickOn(A) - return + return AltClickOn(A) if(modifiers["ctrl"]) - CtrlClickOn(A) - return + return CtrlClickOn(A) - if(next_move >= world.time) + if(!CheckActionCooldown(immediate = TRUE)) return face_atom(A) // change direction to face what you clicked on @@ -50,7 +40,7 @@ */ if(aicamera.in_camera_mode) //Cyborg picture taking aicamera.camera_mode_off() - aicamera.captureimage(A, usr) + INVOKE_ASYNC(aicamera, /obj/item/camera.proc/captureimage, A, usr) return var/obj/item/W = get_active_held_item() @@ -58,13 +48,8 @@ if(!W && A.Adjacent(src) && (isobj(A) || ismob(A))) var/atom/movable/C = A if(C.can_buckle && C.has_buckled_mobs()) - if(C.buckled_mobs.len > 1) - var/unbuckled = input(src, "Who do you wish to unbuckle?","Unbuckle Who?") as null|mob in C.buckled_mobs - if(C.user_unbuckle_mob(unbuckled,src)) - return - else - if(C.user_unbuckle_mob(C.buckled_mobs[1],src)) - return + INVOKE_ASYNC(C, /atom/movable.proc/precise_user_unbuckle_mob, src) + return if(!W && (get_dist(src,A) <= interaction_range)) A.attack_robot(src) @@ -81,7 +66,9 @@ // cyborgs are prohibited from using storage items so we can I think safely remove (A.loc in contents) if(A == loc || (A in loc) || (A in contents)) - W.melee_attack_chain(src, A, params) + . = W.melee_attack_chain(src, A, params) + if(!(. & NO_AUTO_CLICKDELAY_HANDLING) && ismob(A)) + DelayNextAction(CLICK_CD_MELEE) return if(!isturf(loc)) @@ -90,11 +77,12 @@ // cyborgs are prohibited from using storage items so we can I think safely remove (A.loc && isturf(A.loc.loc)) if(isturf(A) || isturf(A.loc)) if(A.Adjacent(src)) // see adjacent.dm - W.melee_attack_chain(src, A, params) + . = W.melee_attack_chain(src, A, params) + if(!(. & NO_AUTO_CLICKDELAY_HANDLING) && ismob(A)) + DelayNextAction(CLICK_CD_MELEE) return else - W.afterattack(A, src, 0, params) - return + return W.afterattack(A, src, 0, params) //Middle click cycles through selected modules. /mob/living/silicon/robot/MiddleClickOn(atom/A) diff --git a/code/_onclick/hud/_defines.dm b/code/_onclick/hud/_defines.dm index 4b963c730d..467c67e0c3 100644 --- a/code/_onclick/hud/_defines.dm +++ b/code/_onclick/hud/_defines.dm @@ -168,6 +168,8 @@ //UI position overrides for 1:1 screen layout. (default is 7:5) #define ui_stamina "EAST-1:28,CENTER:17" // replacing internals button #define ui_overridden_resist "EAST-3:24,SOUTH+1:7" +#define ui_clickdelay "CENTER,SOUTH+1:-31" +#define ui_resistdelay "EAST-3:24,SOUTH+1:4" #define ui_combat_toggle "EAST-4:22,SOUTH:5" #define ui_boxcraft "EAST-4:22,SOUTH+1:6" diff --git a/code/_onclick/hud/action_button.dm b/code/_onclick/hud/action_button.dm index 0ed3a9cf26..8a66374029 100644 --- a/code/_onclick/hud/action_button.dm +++ b/code/_onclick/hud/action_button.dm @@ -56,9 +56,6 @@ if(id && usr.client) //try to (un)remember position usr.client.prefs.action_buttons_screen_locs["[name]_[id]"] = locked ? moved : null return TRUE - if(usr.next_click > world.time) - return - usr.next_click = world.time + 1 linked_action.Trigger() return TRUE diff --git a/code/_onclick/hud/alert.dm b/code/_onclick/hud/alert.dm index 11531a701e..3942d96f29 100644 --- a/code/_onclick/hud/alert.dm +++ b/code/_onclick/hud/alert.dm @@ -22,7 +22,7 @@ if(alerts[category]) thealert = alerts[category] if(thealert.override_alerts) - return 0 + return thealert if(new_master && new_master != thealert.master) WARNING("[src] threw alert [category] with new_master [new_master] while already having that alert with master [thealert.master]") @@ -36,7 +36,7 @@ clear_alert(category) return .() else //no need to update - return 0 + return thealert else thealert = new type() thealert.override_alerts = override @@ -272,7 +272,7 @@ or shoot a gun to move around via Newton's 3rd Law of Motion." var/mob/living/L = usr if(!istype(L) || !L.can_resist()) return - L.changeNext_move(CLICK_CD_RESIST) + L.MarkResistTime() if(CHECK_MOBILITY(L, MOBILITY_MOVE)) return L.resist_fire() //I just want to start a flame in your hearrrrrrtttttt. @@ -600,17 +600,32 @@ so as to remain in compliance with the most up-to-date laws." var/mob/living/L = usr if(!istype(L) || !L.can_resist()) return - L.changeNext_move(CLICK_CD_RESIST) - if(CHECK_MOBILITY(L, MOBILITY_MOVE) && (L.last_special <= world.time)) - return L.resist_restraints() + L.MarkResistTime() + return L.resist_restraints() /obj/screen/alert/restrained/buckled/Click() var/mob/living/L = usr if(!istype(L) || !L.can_resist()) return - L.changeNext_move(CLICK_CD_RESIST) - if(L.last_special <= world.time) - return L.resist_buckle() + L.MarkResistTime() + return L.resist_buckle() + +/obj/screen/alert/shoes/untied + name = "Untied Shoes" + desc = "Your shoes are untied! Click the alert or your shoes to tie them." + icon_state = "shoealert" + +/obj/screen/alert/shoes/knotted + name = "Knotted Shoes" + desc = "Someone tied your shoelaces together! Click the alert or your shoes to undo the knot." + icon_state = "shoealert" + +/obj/screen/alert/shoes/Click() + var/mob/living/carbon/C = usr + if(!istype(C) || !C.can_resist() || C != mob_viewer || !C.shoes) + return + C.changeNext_move(CLICK_CD_RESIST) + C.shoes.handle_tying(C) // PRIVATE = only edit, use, or override these if you're editing the system as a whole diff --git a/code/_onclick/hud/human.dm b/code/_onclick/hud/human.dm index 9380cf98aa..04141becf2 100644 --- a/code/_onclick/hud/human.dm +++ b/code/_onclick/hud/human.dm @@ -140,6 +140,17 @@ sprint_buffer.hud = src static_inventory += sprint_buffer + // clickdelay + clickdelay = new + clickdelay.hud = src + clickdelay.screen_loc = ui_clickdelay + static_inventory += clickdelay + + // resistdelay + resistdelay = new + resistdelay.hud = src + resistdelay.screen_loc = ui_resistdelay + static_inventory += resistdelay using = new /obj/screen/drop() using.icon = ui_style diff --git a/code/_onclick/hud/parallax.dm b/code/_onclick/hud/parallax.dm index 94374c5cb6..9050bcb5f0 100755 --- a/code/_onclick/hud/parallax.dm +++ b/code/_onclick/hud/parallax.dm @@ -219,6 +219,7 @@ L.screen_loc = "CENTER-7:[round(L.offset_x,1)],CENTER-7:[round(L.offset_y,1)]" /atom/movable/proc/update_parallax_contents() + set waitfor = FALSE if(length(client_mobs_in_contents)) for(var/thing in client_mobs_in_contents) var/mob/M = thing diff --git a/code/_onclick/hud/screen_objects.dm b/code/_onclick/hud/screen_objects.dm index 0088dde15a..126cc18907 100644 --- a/code/_onclick/hud/screen_objects.dm +++ b/code/_onclick/hud/screen_objects.dm @@ -47,17 +47,7 @@ name = "swap hand" /obj/screen/swap_hand/Click() - // At this point in client Click() code we have passed the 1/10 sec check and little else - // We don't even know if it's a middle click - if(world.time <= usr.next_move) - return 1 - - if(usr.incapacitated()) - return 1 - - if(ismob(usr)) - var/mob/M = usr - M.swap_hand() + usr.swap_hand() return 1 /obj/screen/craft @@ -101,15 +91,9 @@ plane = HUD_PLANE /obj/screen/inventory/Click(location, control, params) - // At this point in client Click() code we have passed the 1/10 sec check and little else - // We don't even know if it's a middle click - if(world.time <= usr.next_move) - return TRUE - - if(usr.incapacitated()) - return TRUE - if(ismecha(usr.loc)) // stops inventory actions in a mech - return TRUE + if(hud?.mymob && (hud.mymob != usr)) + return + // just redirect clicks if(hud?.mymob && slot_id) var/obj/item/inv_item = hud.mymob.get_item_by_slot(slot_id) @@ -190,17 +174,10 @@ /obj/screen/inventory/hand/Click(location, control, params) - // At this point in client Click() code we have passed the 1/10 sec check and little else - // We don't even know if it's a middle click - var/mob/user = hud?.mymob - if(usr != user) - return TRUE - if(world.time <= user.next_move) - return TRUE - if(user.incapacitated()) - return TRUE - if (ismecha(user.loc)) // stops inventory actions in a mech - return TRUE + if(hud?.mymob && (hud.mymob != usr)) + return + var/mob/user = hud.mymob + // just redirect clicks if(user.active_hand_index == held_index) var/obj/item/I = user.get_active_held_item() diff --git a/code/_onclick/hud/screen_objects/clickdelay.dm b/code/_onclick/hud/screen_objects/clickdelay.dm new file mode 100644 index 0000000000..e0ad039cdf --- /dev/null +++ b/code/_onclick/hud/screen_objects/clickdelay.dm @@ -0,0 +1,58 @@ +/obj/screen/action_bar + +/obj/screen/action_bar/Destroy() + STOP_PROCESSING(SShuds, src) + return ..() + +/obj/screen/action_bar/proc/mark_dirty() + var/mob/living/L = hud?.mymob + if(L?.client && update_to_mob(L)) + START_PROCESSING(SShuds, src) + +/obj/screen/action_bar/process() + var/mob/living/L = hud?.mymob + if(!L?.client || !update_to_mob(L)) + return PROCESS_KILL + +/obj/screen/action_bar/proc/update_to_mob(mob/living/L) + return FALSE + +/datum/hud/var/obj/screen/action_bar/clickdelay/clickdelay + +/obj/screen/action_bar/clickdelay + name = "click delay" + icon = 'icons/effects/progessbar.dmi' + icon_state = "prog_bar_100" + layer = 20 // under hand buttons + +/obj/screen/action_bar/clickdelay/Initialize() + . = ..() + var/matrix/M = new + M.Scale(2, 1) + transform = M + +/obj/screen/action_bar/clickdelay/update_to_mob(mob/living/L) + var/estimated = L.EstimatedNextActionTime() + var/diff = estimated - L.last_action + var/left = estimated - world.time + if(left < 0 || diff < 0) + icon_state = "prog_bar_100" + return FALSE + icon_state = "prog_bar_[round(clamp(((diff - left)/diff) * 100, 0, 100), 5)]" + return TRUE + +/datum/hud/var/obj/screen/action_bar/resistdelay/resistdelay + +/obj/screen/action_bar/resistdelay + name = "resist delay" + icon = 'icons/effects/progessbar.dmi' + icon_state = "prog_bar_100" + +/obj/screen/action_bar/resistdelay/update_to_mob(mob/living/L) + var/diff = L.next_resist - L.last_resist + var/left = L.next_resist - world.time + if(left < 0 || diff < 0) + icon_state = "prog_bar_100" + return FALSE + icon_state = "prog_bar_[round(clamp(((diff - left)/diff) * 100, 0, 100), 5)]" + return TRUE diff --git a/modular_citadel/code/_onclick/hud/sprint.dm b/code/_onclick/hud/screen_objects/sprint.dm similarity index 100% rename from modular_citadel/code/_onclick/hud/sprint.dm rename to code/_onclick/hud/screen_objects/sprint.dm diff --git a/modular_citadel/code/_onclick/hud/stamina.dm b/code/_onclick/hud/screen_objects/stamina.dm similarity index 100% rename from modular_citadel/code/_onclick/hud/stamina.dm rename to code/_onclick/hud/screen_objects/stamina.dm diff --git a/code/_onclick/hud/screen_objects/storage.dm b/code/_onclick/hud/screen_objects/storage.dm index 7e8bfe12ab..ce7bc96c96 100644 --- a/code/_onclick/hud/screen_objects/storage.dm +++ b/code/_onclick/hud/screen_objects/storage.dm @@ -9,12 +9,9 @@ /obj/screen/storage/Click(location, control, params) if(!insertion_click) return ..() - if(world.time <= usr.next_move) - return TRUE - if(usr.incapacitated()) - return TRUE - if (ismecha(usr.loc)) // stops inventory actions in a mech - return TRUE + if(hud?.mymob && (hud.mymob != usr)) + return + // just redirect clicks if(master) var/obj/item/I = usr.get_active_held_item() if(I) diff --git a/modular_citadel/code/_onclick/hud/screen_objects.dm b/code/_onclick/hud/screen_objects/vore.dm similarity index 100% rename from modular_citadel/code/_onclick/hud/screen_objects.dm rename to code/_onclick/hud/screen_objects/vore.dm diff --git a/code/_onclick/item_attack.dm b/code/_onclick/item_attack.dm index bef06a69e9..199e401e39 100644 --- a/code/_onclick/item_attack.dm +++ b/code/_onclick/item_attack.dm @@ -7,21 +7,22 @@ *and lastly *afterattack. The return value does not matter. */ -/obj/item/proc/melee_attack_chain(mob/user, atom/target, params, flags, damage_multiplier = 1) +/obj/item/proc/melee_attack_chain(mob/user, atom/target, params, attackchain_flags, damage_multiplier = 1) if(isliving(user)) var/mob/living/L = user - if(!CHECK_MOBILITY(L, MOBILITY_USE) && !(flags & ATTACKCHAIN_PARRY_COUNTERATTACK)) + if(!CHECK_MOBILITY(L, MOBILITY_USE) && !(attackchain_flags & ATTACK_IS_PARRY_COUNTERATTACK)) to_chat(L, "You are unable to swing [src] right now!") return - if(tool_behaviour && target.tool_act(user, src, tool_behaviour)) + . = attackchain_flags + if(tool_behaviour && ((. = target.tool_act(user, src, tool_behaviour)) & STOP_ATTACK_PROC_CHAIN)) return - if(pre_attack(target, user, params)) + if((. |= pre_attack(target, user, params, ., damage_multiplier)) & STOP_ATTACK_PROC_CHAIN) return - if(target.attackby(src, user, params, flags, damage_multiplier)) + if((. |= target.attackby(src, user, params, ., damage_multiplier)) & STOP_ATTACK_PROC_CHAIN) return if(QDELETED(src) || QDELETED(target)) return - afterattack(target, user, TRUE, params) + . |= afterattack(target, user, TRUE, params) /// Like melee_attack_chain but for ranged. /obj/item/proc/ranged_attack_chain(mob/user, atom/target, params) @@ -30,7 +31,7 @@ if(!CHECK_MOBILITY(L, MOBILITY_USE)) to_chat(L, "You are unable to raise [src] right now!") return - afterattack(target, user, FALSE, params) + return afterattack(target, user, FALSE, params) // Called when the item is in the active hand, and clicked; alternately, there is an 'activate held object' verb or you can hit pagedown. /obj/item/proc/attack_self(mob/user) @@ -38,28 +39,43 @@ return interact(user) -/obj/item/proc/pre_attack(atom/A, mob/living/user, params) //do stuff before attackby! +/obj/item/proc/pre_attack(atom/A, mob/living/user, params, attackchain_flags, damage_multiplier) //do stuff before attackby! if(SEND_SIGNAL(src, COMSIG_ITEM_PRE_ATTACK, A, user, params) & COMPONENT_NO_ATTACK) - return TRUE - return FALSE //return TRUE to avoid calling attackby after this proc does stuff + return STOP_ATTACK_PROC_CHAIN + if(!(attackchain_flags & ATTACK_IGNORE_CLICKDELAY) && !CheckAttackCooldown(user, A)) + return STOP_ATTACK_PROC_CHAIN // No comment /atom/proc/attackby(obj/item/W, mob/user, params) if(SEND_SIGNAL(src, COMSIG_PARENT_ATTACKBY, W, user, params) & COMPONENT_NO_AFTERATTACK) - return TRUE - return FALSE + return STOP_ATTACK_PROC_CHAIN /obj/attackby(obj/item/I, mob/living/user, params) - return ..() || ((obj_flags & CAN_BE_HIT) && I.attack_obj(src, user)) + . = ..() + if(. & STOP_ATTACK_PROC_CHAIN) + return + if(obj_flags & CAN_BE_HIT) + . |= I.attack_obj(src, user) /mob/living/attackby(obj/item/I, mob/living/user, params, attackchain_flags, damage_multiplier) - if(..()) - return TRUE - I.attack_delay_done = FALSE //Should be set TRUE in pre_attacked_by() - . = I.attack(src, user, attackchain_flags, damage_multiplier) - if(!I.attack_delay_done) //Otherwise, pre_attacked_by() should handle it. - user.changeNext_move(I.click_delay) + . = ..() + if(. & STOP_ATTACK_PROC_CHAIN) + return + . |= I.attack(src, user, attackchain_flags, damage_multiplier) + if(!(. & NO_AUTO_CLICKDELAY_HANDLING)) // SAFETY NET - unless the proc tells us we should not handle this, give them the basic melee cooldown! + I.ApplyAttackCooldown(user, src, attackchain_flags) +/** + * Called when someone uses us to attack a mob in melee combat. + * + * This proc respects CheckAttackCooldown() default clickdelay handling. + * + * @params + * * mob/living/M - target + * * mob/living/user - attacker + * * attackchain_Flags - see [code/__DEFINES/_flags/return_values.dm] + * * damage_multiplier - what to multiply the damage by + */ /obj/item/proc/attack(mob/living/M, mob/living/user, attackchain_flags = NONE, damage_multiplier = 1) if(SEND_SIGNAL(src, COMSIG_ITEM_ATTACK, M, user) & COMPONENT_ITEM_NO_ATTACK) return @@ -95,8 +111,7 @@ if(item_flags & NOBLUDGEON) return user.do_attack_animation(O) - if(!O.attacked_by(src, user)) - user.changeNext_move(click_delay) + O.attacked_by(src, user) var/weight = getweight(user, STAM_COST_ATTACK_OBJ_MULT) if(weight) user.adjustStaminaLossBuffered(weight)//CIT CHANGE - makes attacking things cause stamina loss @@ -109,12 +124,9 @@ var/bad_trait var/stamloss = user.getStaminaLoss() - var/next_move_mult = 1 if(stamloss > STAMINA_NEAR_SOFTCRIT) //The more tired you are, the less damage you do. var/penalty = (stamloss - STAMINA_NEAR_SOFTCRIT)/(STAMINA_NEAR_CRIT - STAMINA_NEAR_SOFTCRIT)*STAM_CRIT_ITEM_ATTACK_PENALTY totitemdamage *= 1 - penalty - next_move_mult += penalty*STAM_CRIT_ITEM_ATTACK_DELAY - user.changeNext_move(I.click_delay*next_move_mult) if(SEND_SIGNAL(user, COMSIG_COMBAT_MODE_CHECK, COMBAT_MODE_INACTIVE)) bad_trait = SKILL_COMBAT_MODE //blacklist combat skills. @@ -126,18 +138,18 @@ if(!(SKILL_TRAIN_ATTACK_OBJ in I.used_skills[skill])) continue user.mind.auto_gain_experience(skill, I.skill_gain) - + if(!(attackchain_flags & NO_AUTO_CLICKDELAY_HANDLING)) + I.ApplyAttackCooldown(user, src, attackchain_flags) if(totitemdamage) visible_message("[user] has hit [src] with [I]!", null, null, COMBAT_MESSAGE_RANGE) //only witnesses close by and the victim see a hit message. log_combat(user, src, "attacked", I) take_damage(totitemdamage, I.damtype, "melee", 1) - return TRUE /mob/living/attacked_by(obj/item/I, mob/living/user, attackchain_flags = NONE, damage_multiplier = 1) var/list/block_return = list() var/totitemdamage = pre_attacked_by(I, user) * damage_multiplier - if((user != src) && mob_run_block(I, totitemdamage, "the [I.name]", ((attackchain_flags & ATTACKCHAIN_PARRY_COUNTERATTACK)? ATTACK_TYPE_PARRY_COUNTERATTACK : NONE) | ATTACK_TYPE_MELEE, I.armour_penetration, user, null, block_return) & BLOCK_SUCCESS) + if((user != src) && mob_run_block(I, totitemdamage, "the [I.name]", ((attackchain_flags & ATTACK_IS_PARRY_COUNTERATTACK)? ATTACK_IS_PARRY_COUNTERATTACK : NONE) | ATTACK_TYPE_MELEE, I.armour_penetration, user, null, block_return) & BLOCK_SUCCESS) return FALSE totitemdamage = block_calculate_resultant_damage(totitemdamage, block_return) send_item_attack_message(I, user, null, totitemdamage) @@ -155,8 +167,7 @@ /mob/living/simple_animal/attacked_by(obj/item/I, mob/living/user, attackchain_flags = NONE, damage_multiplier = 1) if(I.force < force_threshold || I.damtype == STAMINA) - playsound(loc, 'sound/weapons/tap.ogg', I.get_clamped_volume(), 1, -1) - user.changeNext_move(I.click_delay) //pre_attacked_by not called + playsound(src, 'sound/weapons/tap.ogg', I.get_clamped_volume(), 1, -1) else return ..() @@ -167,16 +178,12 @@ var/stamloss = user.getStaminaLoss() var/stam_mobility_mult = 1 - var/next_move_mult = 1 if(stamloss > STAMINA_NEAR_SOFTCRIT) //The more tired you are, the less damage you do. var/penalty = (stamloss - STAMINA_NEAR_SOFTCRIT)/(STAMINA_NEAR_CRIT - STAMINA_NEAR_SOFTCRIT)*STAM_CRIT_ITEM_ATTACK_PENALTY stam_mobility_mult -= penalty - next_move_mult += penalty*STAM_CRIT_ITEM_ATTACK_DELAY if(stam_mobility_mult > LYING_DAMAGE_PENALTY && !CHECK_MOBILITY(user, MOBILITY_STAND)) //damage penalty for fighting prone, doesn't stack with the above. stam_mobility_mult = LYING_DAMAGE_PENALTY . *= stam_mobility_mult - user.changeNext_move(I.click_delay*next_move_mult) - I.attack_delay_done = TRUE var/bad_trait if(!(I.item_flags & NO_COMBAT_MODE_FORCE_MODIFIER)) @@ -197,8 +204,18 @@ var/datum/skill/S = GLOB.skill_datums[skill] user.mind.auto_gain_experience(skill, I.skill_gain*S.item_skill_gain_multi) -// Proximity_flag is 1 if this afterattack was called on something adjacent, in your square, or on your person. -// Click parameters is the params string from byond Click() code, see that documentation. +/** + * Called after attacking something if the melee attack chain isn't interrupted before. + * Also called when clicking on something with an item without being in melee range + * + * WARNING: This does not automatically check clickdelay if not in a melee attack! Be sure to account for this! + * + * @params + * * target - The thing we clicked + * * user - mob of person clicking + * * proximity_flag - are we in melee range/doing it in a melee attack + * * click_parameters - mouse control parameters, check BYOND ref. + */ /obj/item/proc/afterattack(atom/target, mob/user, proximity_flag, click_parameters) SEND_SIGNAL(src, COMSIG_ITEM_AFTERATTACK, target, user, proximity_flag, click_parameters) SEND_SIGNAL(user, COMSIG_MOB_ITEM_AFTERATTACK, target, user, proximity_flag, click_parameters) diff --git a/code/_onclick/observer.dm b/code/_onclick/observer.dm index ed7384697c..8a1e745308 100644 --- a/code/_onclick/observer.dm +++ b/code/_onclick/observer.dm @@ -37,7 +37,7 @@ CtrlClickOn(A) return - if(world.time <= next_move) + if(!CheckActionCooldown()) return // You are responsible for checking config.ghost_interaction when you override this function // Not all of them require checking, see below diff --git a/code/_onclick/other_mobs.dm b/code/_onclick/other_mobs.dm index 48b652b6f3..975c6e62d4 100644 --- a/code/_onclick/other_mobs.dm +++ b/code/_onclick/other_mobs.dm @@ -5,7 +5,7 @@ Otherwise pretty standard. */ -/mob/living/carbon/human/UnarmedAttack(atom/A, proximity, intent = a_intent, flags = NONE) +/mob/living/carbon/human/UnarmedAttack(atom/A, proximity, intent = a_intent, attackchain_flags = NONE) if(!has_active_hand()) //can't attack without a hand. to_chat(src, "You look at your arm and sigh.") @@ -16,33 +16,45 @@ to_chat(src, "The damage in your [check_arm.name] is preventing you from using it! Get it fixed, or at least splinted!") return + . = attackchain_flags // Special glove functions: // If the gloves do anything, have them return 1 to stop // normal attack_hand() here. var/obj/item/clothing/gloves/G = gloves // not typecast specifically enough in defines - if(proximity && istype(G) && G.Touch(A,1)) - return - - var/override = 0 + if(proximity && istype(G)) + . |= G.Touch(A, TRUE) + if(. & INTERRUPT_UNARMED_ATTACK) + return for(var/datum/mutation/human/HM in dna.mutations) - override += HM.on_attack_hand(A, proximity, intent, flags) + . |= HM.on_attack_hand(A, proximity, intent, .) - if(override) + if(. & INTERRUPT_UNARMED_ATTACK) return SEND_SIGNAL(src, COMSIG_HUMAN_MELEE_UNARMED_ATTACK, A) - A.attack_hand(src, intent, flags) + return . | A.attack_hand(src, intent, .) -//Return TRUE to cancel other attack hand effects that respect it. -/atom/proc/attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) - . = FALSE +/atom/proc/attack_hand(mob/user, act_intent = user.a_intent, attackchain_flags) + SHOULD_NOT_SLEEP(TRUE) if(!(interaction_flags_atom & INTERACT_ATOM_NO_FINGERPRINT_ATTACK_HAND)) add_fingerprint(user) if(SEND_SIGNAL(src, COMSIG_ATOM_ATTACK_HAND, user) & COMPONENT_NO_ATTACK_HAND) - . = TRUE + return + . = attackchain_flags + if(attack_hand_speed && !(. & ATTACK_IGNORE_CLICKDELAY)) + if(!user.CheckActionCooldown(attack_hand_speed)) + return if(interaction_flags_atom & INTERACT_ATOM_ATTACK_HAND) . = _try_interact(user) + INVOKE_ASYNC(src, .proc/on_attack_hand, user, act_intent, .) + if(!(. & ATTACK_IGNORE_ACTION)) + if(attack_hand_unwieldlyness) + user.DelayNextAction(attack_hand_unwieldlyness, considered_action = attack_hand_is_action) + else if(attack_hand_is_action) + user.DelayNextAction() + +/atom/proc/on_attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) //Return a non FALSE value to cancel whatever called this from propagating, if it respects it. /atom/proc/_try_interact(mob/user) @@ -50,7 +62,6 @@ return interact(user) if(can_interact(user)) return interact(user) - return FALSE /atom/proc/can_interact(mob/user) if(!user.can_interact_with(src)) @@ -80,8 +91,7 @@ else add_fingerprint(user) if(interaction_flags_atom & INTERACT_ATOM_UI_INTERACT) - return ui_interact(user) - return FALSE + ui_interact(user) /* /mob/living/carbon/human/RestrainedClickOn(var/atom/A) ---carbons will handle this @@ -95,13 +105,19 @@ . = ..() if(gloves) var/obj/item/clothing/gloves/G = gloves - if(istype(G) && G.Touch(A,0)) // for magic gloves + . |= G.Touch(A, FALSE) + if(. & INTERRUPT_UNARMED_ATTACK) + return + if(istype(glasses)) + . |= glasses.ranged_attack(src, A, mouseparams) + if(. & INTERRUPT_UNARMED_ATTACK) return - if (istype(glasses) && glasses.ranged_attack(src,A,mouseparams)) - return for(var/datum/mutation/human/HM in dna.mutations) - HM.on_ranged_attack(A, mouseparams) + . |= HM.on_ranged_attack(A, mouseparams) + + if(. & INTERRUPT_UNARMED_ATTACK) + return if(isturf(A) && get_dist(src,A) <= 1) src.Move_Pulled(A) @@ -123,7 +139,9 @@ Monkeys */ /mob/living/carbon/monkey/UnarmedAttack(atom/A, proximity, intent = a_intent, flags = NONE) - A.attack_paw(src, intent, flags) + if(!CheckActionCooldown(CLICK_CD_MELEE)) + return + return !isnull(A.attack_paw(src, intent, flags)) /atom/proc/attack_paw(mob/user) if(SEND_SIGNAL(src, COMSIG_ATOM_ATTACK_PAW, user) & COMPONENT_NO_ATTACK_HAND) @@ -144,6 +162,8 @@ return if(is_muzzled()) return + if(!CheckActionCooldown(CLICK_CD_MELEE)) + return var/mob/living/carbon/ML = A if(istype(ML)) var/dam_zone = pick(BODY_ZONE_CHEST, BODY_ZONE_PRECISE_L_HAND, BODY_ZONE_PRECISE_R_HAND, BODY_ZONE_L_LEG, BODY_ZONE_R_LEG) @@ -163,6 +183,7 @@ ML.ForceContractDisease(D) else ML.visible_message("[src] has attempted to bite [ML]!") + DelayNextAction() /* Aliens @@ -243,7 +264,7 @@ /mob/living/simple_animal/hostile/UnarmedAttack(atom/A, proximity, intent = a_intent, flags = NONE) target = A if(dextrous && !ismob(A)) - ..() + return ..() else AttackingTarget() diff --git a/modular_citadel/code/_onclick/click.dm b/code/_onclick/right_click.dm similarity index 60% rename from modular_citadel/code/_onclick/click.dm rename to code/_onclick/right_click.dm index 004cc2fe80..4b2480eb8c 100644 --- a/modular_citadel/code/_onclick/click.dm +++ b/code/_onclick/right_click.dm @@ -5,7 +5,7 @@ face_atom(A) - if(next_move > world.time) // in the year 2000... + if(!CheckActionCooldown()) return if(!modifiers["catcher"] && A.IsObscured()) @@ -16,9 +16,8 @@ return M.click_action(A,src,params) if(restrained()) - changeNext_move(CLICK_CD_HANDCUFFED) //Doing shit in cuffs shall be vey slow - RestrainedClickOn(A) - return + DelayNextAction(CLICK_CD_HANDCUFFED) + return RestrainedClickOn(A) if(in_throw_mode) throw_item(A)//todo: make it plausible to lightly toss items via right-click @@ -36,13 +35,14 @@ //User itself, current loc, and user inventory if(A in DirectAccess()) if(W) - W.rightclick_melee_attack_chain(src, A, params) + return W.rightclick_melee_attack_chain(src, A, params) else - if(ismob(A)) - changeNext_move(CLICK_CD_MELEE) - if(!AltUnarmedAttack(A)) - UnarmedAttack(A) - return + if(!AltUnarmedAttack(A, TRUE)) + . = UnarmedAttack(A, TRUE, a_intent) + if(!(. & NO_AUTO_CLICKDELAY_HANDLING) && ismob(A)) + DelayNextAction(CLICK_CD_MELEE) + return + return //Can't reach anything else in lockers or other weirdness if(!loc.AllowClick()) @@ -51,23 +51,25 @@ //Standard reach turf to turf or reaching inside storage if(CanReach(A,W)) if(W) - W.rightclick_melee_attack_chain(src, A, params) + return W.rightclick_melee_attack_chain(src, A, params) else - if(ismob(A)) - changeNext_move(CLICK_CD_MELEE) - if(!AltUnarmedAttack(A,1)) - UnarmedAttack(A,1) + if(!AltUnarmedAttack(A, TRUE)) + . = UnarmedAttack(A, TRUE, a_intent) + if(!(. & NO_AUTO_CLICKDELAY_HANDLING) && ismob(A)) + DelayNextAction(CLICK_CD_MELEE) + return + return else if(W) if(!W.altafterattack(A, src, FALSE, params)) - W.afterattack(A, src, FALSE, params) + return W.afterattack(A, src, FALSE, params) else - if(!AltRangedAttack(A,params)) - RangedAttack(A,params) + if(!AltRangedAttack(A, params)) + return RangedAttack(A, params) /mob/proc/AltUnarmedAttack(atom/A, proximity_flag) if(ismob(A)) - changeNext_move(CLICK_CD_MELEE) + DelayNextAction(CLICK_CD_MELEE) return FALSE /mob/proc/AltRangedAttack(atom/A, params) diff --git a/modular_citadel/code/_onclick/item_attack.dm b/code/_onclick/right_item_attack.dm similarity index 82% rename from modular_citadel/code/_onclick/item_attack.dm rename to code/_onclick/right_item_attack.dm index bba3b14e2e..4ac9c96c8e 100644 --- a/modular_citadel/code/_onclick/item_attack.dm +++ b/code/_onclick/right_item_attack.dm @@ -1,10 +1,9 @@ /obj/item/proc/rightclick_melee_attack_chain(mob/user, atom/target, params) if(!alt_pre_attack(target, user, params)) //Hey, does this item have special behavior that should override all normal right-click functionality? if(!target.altattackby(src, user, params)) //Does the target do anything special when we right-click on it? - melee_attack_chain(user, target, params) //Ugh. Lame! I'm filing a legal complaint about the discrimination against the right mouse button! + . = melee_attack_chain(user, target, params) //Ugh. Lame! I'm filing a legal complaint about the discrimination against the right mouse button! else - altafterattack(target, user, TRUE, params) - return + . = altafterattack(target, user, TRUE, params) /obj/item/proc/alt_pre_attack(atom/A, mob/living/user, params) return FALSE //return something other than false if you wanna override attacking completely diff --git a/modular_citadel/code/_onclick/other_mobs.dm b/code/_onclick/right_other_mobs.dm similarity index 93% rename from modular_citadel/code/_onclick/other_mobs.dm rename to code/_onclick/right_other_mobs.dm index ec740f023b..2dc9fddeef 100644 --- a/modular_citadel/code/_onclick/other_mobs.dm +++ b/code/_onclick/right_other_mobs.dm @@ -3,15 +3,14 @@ to_chat(src, "You look at the state of the universe and sigh.") //lets face it, people rarely ever see this message in its intended condition. return TRUE - if(!A.alt_attack_hand(src)) - A.attack_hand(src) - return TRUE - return TRUE + return A.alt_attack_hand(src) /mob/living/carbon/human/AltRangedAttack(atom/A, params) if(isturf(A) || incapacitated()) // pretty annoying to wave your fist at floors and walls. And useless. - return TRUE - changeNext_move(CLICK_CD_RANGE) + return + if(!CheckActionCooldown(CLICK_CD_RANGE)) + return + DelayNextAction() var/list/target_viewers = fov_viewers(11, A) //doesn't check for blindness. if(!(src in target_viewers)) //click catcher issuing calls for out of view objects. return TRUE diff --git a/code/_onclick/telekinesis.dm b/code/_onclick/telekinesis.dm index f95ebf82b5..73d834dd64 100644 --- a/code/_onclick/telekinesis.dm +++ b/code/_onclick/telekinesis.dm @@ -123,7 +123,8 @@ . = ..() if(!target || !user) return - + if(!user.CheckActionCooldown()) + return if(!focus) focus_object(target) return @@ -145,7 +146,7 @@ else apply_focus_overlay() focus.throw_at(target, 10, 1,user) - user.changeNext_move(CLICK_CD_MELEE) + user.DelayNextAction(immediate = FALSE) update_icon() /proc/tkMaxRangeCheck(mob/user, atom/target) diff --git a/code/controllers/subsystem/mapping.dm b/code/controllers/subsystem/mapping.dm index ac2afa7cae..97addfa131 100644 --- a/code/controllers/subsystem/mapping.dm +++ b/code/controllers/subsystem/mapping.dm @@ -469,11 +469,10 @@ GLOBAL_LIST_EMPTY(the_station_areas) else return - possible_options = "Custom" var/away_name var/datum/space_level/away_level - var/answer = input("What kind ? ","Away/VR") as null|anything in possible_options + var/answer = input("What kind ? ","Away/VR") as null|anything in list(possible_options + "Custom") switch(answer) if(null) return diff --git a/code/controllers/subsystem/processing/huds.dm b/code/controllers/subsystem/processing/huds.dm new file mode 100644 index 0000000000..aea23d2400 --- /dev/null +++ b/code/controllers/subsystem/processing/huds.dm @@ -0,0 +1,6 @@ +// Smooth HUD updates, but low priority +PROCESSING_SUBSYSTEM_DEF(huds) + name = "HUD updates" + wait = 0.5 + priority = FIRE_PRIORITY_HUDS + stat_tag = "HUDS" diff --git a/code/datums/brain_damage/special.dm b/code/datums/brain_damage/special.dm index 13cf2add97..7cc5348a0a 100644 --- a/code/datums/brain_damage/special.dm +++ b/code/datums/brain_damage/special.dm @@ -103,8 +103,7 @@ . = ..() QDEL_IN(src, 300) -//ATTACK HAND IGNORING PARENT RETURN VALUE -/obj/effect/hallucination/simple/bluespace_stream/attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) +/obj/effect/hallucination/simple/bluespace_stream/on_attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) if(user != seer || !linked_to) return var/slip_in_message = pick("slides sideways in an odd way, and disappears", "jumps into an unseen dimension",\ diff --git a/code/datums/components/crafting/recipes/recipes_misc.dm b/code/datums/components/crafting/recipes/recipes_misc.dm index 86d1e77661..214c1b1427 100644 --- a/code/datums/components/crafting/recipes/recipes_misc.dm +++ b/code/datums/components/crafting/recipes/recipes_misc.dm @@ -324,6 +324,13 @@ result = /obj/item/toy/sword/cx subcategory = CAT_MISCELLANEOUS category = CAT_MISC + +/datum/crafting_recipe/catgirlplushie + name = "Catgirl Plushie" + reqs = list(/obj/item/toy/plush/hairball = 3) + result = /obj/item/toy/plush/catgirl + subcategory = CAT_MISCELLANEOUS + category = CAT_MISC //////////// //Unsorted// diff --git a/code/datums/components/rotation.dm b/code/datums/components/rotation.dm index f5da669c3a..129faabdb7 100644 --- a/code/datums/components/rotation.dm +++ b/code/datums/components/rotation.dm @@ -98,16 +98,16 @@ /datum/component/simple_rotation/proc/HandRot(datum/source, mob/user, rotation = default_rotation_direction) if(can_be_rotated) - if(!can_be_rotated.Invoke(user, default_rotation_direction)) + if(!can_be_rotated.Invoke(user, rotation)) return else - if(!default_can_be_rotated(user, default_rotation_direction)) + if(!default_can_be_rotated(user, rotation)) return if(can_user_rotate) - if(!can_user_rotate.Invoke(user, default_rotation_direction)) + if(!can_user_rotate.Invoke(user, rotation)) return else - if(!default_can_user_rotate(user, default_rotation_direction)) + if(!default_can_user_rotate(user, rotation)) return BaseRot(user, rotation) return TRUE diff --git a/code/datums/looping_sounds/_looping_sound.dm b/code/datums/looping_sounds/_looping_sound.dm index f110d5e8ed..8bee4f3d1c 100644 --- a/code/datums/looping_sounds/_looping_sound.dm +++ b/code/datums/looping_sounds/_looping_sound.dm @@ -60,6 +60,7 @@ output_atoms -= remove_thing if(init_timerid) deltimer(init_timerid) + init_timerid = null if(!timerid) return on_stop() diff --git a/code/datums/mood_events/generic_negative_events.dm b/code/datums/mood_events/generic_negative_events.dm index a2078a82e4..787d6375a7 100644 --- a/code/datums/mood_events/generic_negative_events.dm +++ b/code/datums/mood_events/generic_negative_events.dm @@ -274,3 +274,13 @@ description = "I've produced better art than that from my ass.\n" mood_change = -2 timeout = 1200 + +/datum/mood_event/tripped + description = "I can't believe I fell for the oldest trick in the book!\n" + mood_change = -6 + timeout = 2 MINUTES + +/datum/mood_event/untied + description = "I hate when my shoes come untied!\n" + mood_change = -3 + timeout = 1 MINUTES diff --git a/code/datums/mood_events/generic_positive_events.dm b/code/datums/mood_events/generic_positive_events.dm index 95177f6869..8f98917ed3 100644 --- a/code/datums/mood_events/generic_positive_events.dm +++ b/code/datums/mood_events/generic_positive_events.dm @@ -196,3 +196,7 @@ description = "That work of art was so great it made me believe in the goodness of humanity. Says a lot in a place like this.\n" mood_change = 4 timeout = 4 MINUTES + +/datum/mood_event/cleared_stomach + description = "Feels nice to get that out of the way!\n" + mood_change = 3 diff --git a/code/datums/mutations/hulk.dm b/code/datums/mutations/hulk.dm index 2df2b20cbc..bc7b9171a8 100644 --- a/code/datums/mutations/hulk.dm +++ b/code/datums/mutations/hulk.dm @@ -21,7 +21,11 @@ /datum/mutation/human/hulk/on_attack_hand(atom/target, proximity, act_intent, unarmed_attack_flags) if(proximity && (act_intent == INTENT_HARM)) //no telekinetic hulk attack - return target.attack_hulk(owner) + if(!owner.CheckActionCooldown(CLICK_CD_MELEE)) + return INTERRUPT_UNARMED_ATTACK | NO_AUTO_CLICKDELAY_HANDLING + owner.DelayNextAction() + target.attack_hulk(owner) + return INTERRUPT_UNARMED_ATTACK | NO_AUTO_CLICKDELAY_HANDLING /datum/mutation/human/hulk/on_life() if(owner.health < 0) diff --git a/code/datums/status_effects/debuffs.dm b/code/datums/status_effects/debuffs.dm index 561329f02a..aa27c6424e 100644 --- a/code/datums/status_effects/debuffs.dm +++ b/code/datums/status_effects/debuffs.dm @@ -144,7 +144,6 @@ id = "tased" alert_type = null var/movespeed_mod = /datum/movespeed_modifier/status_effect/tased - var/nextmove_modifier = 1 var/stamdmg_per_ds = 0 //a 20 duration would do 20 stamdmg, disablers do 24 or something var/last_tick = 0 //fastprocess processing speed is a goddamn sham, don't trust it. @@ -173,13 +172,9 @@ C.adjustStaminaLoss(max(0, stamdmg_per_ds * diff)) //if you really want to try to stamcrit someone with a taser alone, you can, but it'll take time and good timing. last_tick = world.time -/datum/status_effect/electrode/nextmove_modifier() //why is this a proc. its no big deal since this doesnt get called often at all but literally w h y - return nextmove_modifier - /datum/status_effect/electrode/no_combat_mode id = "tased_strong" movespeed_mod = /datum/movespeed_modifier/status_effect/tased/no_combat_mode - nextmove_modifier = 2 blocks_combatmode = TRUE stamdmg_per_ds = 1 diff --git a/code/datums/status_effects/status_effect.dm b/code/datums/status_effects/status_effect.dm index dd5fef61d7..461ae9c65d 100644 --- a/code/datums/status_effects/status_effect.dm +++ b/code/datums/status_effects/status_effect.dm @@ -90,13 +90,12 @@ return duration = world.time + original_duration -//clickdelay/nextmove modifiers! -/datum/status_effect/proc/nextmove_modifier() +/** + * Multiplied to clickdelays + */ +/datum/status_effect/proc/action_cooldown_mod() return 1 -/datum/status_effect/proc/nextmove_adjust() - return 0 - //////////////// // ALERT HOOK // //////////////// diff --git a/code/datums/status_effects/wound_effects.dm b/code/datums/status_effects/wound_effects.dm index 2c0c030425..91440d36de 100644 --- a/code/datums/status_effects/wound_effects.dm +++ b/code/datums/status_effects/wound_effects.dm @@ -151,7 +151,7 @@ return 1 -/datum/status_effect/wound/bone/nextmove_modifier() +/datum/status_effect/wound/bone/action_cooldown_mod() var/mob/living/carbon/C = owner if(C.get_active_hand() == linked_limb) diff --git a/code/datums/traits/negative.dm b/code/datums/traits/negative.dm index 95e02c5a94..87126ae28f 100644 --- a/code/datums/traits/negative.dm +++ b/code/datums/traits/negative.dm @@ -56,7 +56,7 @@ GLOBAL_LIST_EMPTY(family_heirlooms) if("Medical Doctor") heirloom_type = /obj/item/healthanalyzer/advanced if("Paramedic") - heirloom_type = pick(/obj/item/clothing/neck/stethoscope, /obj/item/bodybag) + heirloom_type = /obj/item/lighter if("Station Engineer") heirloom_type = /obj/item/wirecutters/brass if("Atmospheric Technician") diff --git a/code/datums/wounds/cuts.dm b/code/datums/wounds/cuts.dm index 0ab3bbd5f8..59ce286884 100644 --- a/code/datums/wounds/cuts.dm +++ b/code/datums/wounds/cuts.dm @@ -152,6 +152,11 @@ user.visible_message("[user] licks the wounds on [victim]'s [limb.name].", "You lick some of the wounds on [victim]'s [limb.name]", ignored_mobs=victim) to_chat(victim, "[user] licks the wounds on your [limb.name]! minimum_flow) try_handling(user) diff --git a/code/game/atoms.dm b/code/game/atoms.dm index 7623a88065..de9df3a23e 100644 --- a/code/game/atoms.dm +++ b/code/game/atoms.dm @@ -70,6 +70,9 @@ /// A luminescence-shifted value of the last color calculated for chatmessage overlays var/chat_color_darkened + ///Mobs that are currently do_after'ing this atom, to be cleared from on Destroy() + var/list/targeted_by + /atom/New(loc, ...) //atom creation method that preloads variables at creation if(GLOB.use_preloader && (src.type == GLOB._preloader.target_path))//in case the instanciated atom is creating other atoms in New() @@ -144,6 +147,11 @@ LAZYCLEARLIST(overlays) LAZYCLEARLIST(priority_overlays) + for(var/i in targeted_by) + var/mob/M = i + LAZYREMOVE(M.do_afters, src) + targeted_by = null + QDEL_NULL(light) return ..() @@ -219,7 +227,7 @@ /atom/proc/attack_hulk(mob/living/carbon/human/user, does_attack_animation = FALSE) SEND_SIGNAL(src, COMSIG_ATOM_HULK_ATTACK, user) if(does_attack_animation) - user.changeNext_move(CLICK_CD_MELEE) + user.DelayNextAction(CLICK_CD_MELEE) log_combat(user, src, "punched", "hulk powers") user.do_attack_animation(src, ATTACK_EFFECT_SMASH) diff --git a/code/game/gamemodes/clown_ops/clown_ops.dm b/code/game/gamemodes/clown_ops/clown_ops.dm index 11898701fa..108c67ad27 100644 --- a/code/game/gamemodes/clown_ops/clown_ops.dm +++ b/code/game/gamemodes/clown_ops/clown_ops.dm @@ -58,6 +58,7 @@ if(visualsOnly) return H.dna.add_mutation(SMILE) + H.faction |= "clown" /datum/outfit/syndicate/clownop/leader name = "Clown Operative Leader - Basic" diff --git a/code/game/gamemodes/gangs/dominator.dm b/code/game/gamemodes/gangs/dominator.dm index b4028dc0fd..a7e44ef325 100644 --- a/code/game/gamemodes/gangs/dominator.dm +++ b/code/game/gamemodes/gangs/dominator.dm @@ -149,7 +149,7 @@ add_fingerprint(user) return ..() -/obj/machinery/dominator/attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) +/obj/machinery/dominator/on_attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) if(operating || (stat & BROKEN)) examine(user) return diff --git a/code/game/gamemodes/objective_items.dm b/code/game/gamemodes/objective_items.dm index f6b0c8e24b..7b7fdbeaf9 100644 --- a/code/game/gamemodes/objective_items.dm +++ b/code/game/gamemodes/objective_items.dm @@ -94,6 +94,11 @@ targetitem = /obj/item/documents //Any set of secret documents. Doesn't have to be NT's difficulty = 5 +/datum/objective_item/steal/blackbox + name = "the black box from the onboard blackbox recording device. Take care to wear the proper safety equipment when extracting the black box as the telecommunications array is likely to be under inhospitable conditions." + targetitem = /obj/item/blackbox //steal the forbidden ssblackbox + difficulty = 10 + /datum/objective_item/steal/nuke_core name = "the heavily radioactive plutonium core from the onboard self-destruct. Take care to wear the proper safety equipment when extracting the core!" targetitem = /obj/item/nuke_core diff --git a/code/game/gamemodes/sandbox/airlock_maker.dm b/code/game/gamemodes/sandbox/airlock_maker.dm index ddb622ab08..3d8eb7f7fc 100644 --- a/code/game/gamemodes/sandbox/airlock_maker.dm +++ b/code/game/gamemodes/sandbox/airlock_maker.dm @@ -7,7 +7,7 @@ /obj/structure/door_assembly var/datum/airlock_maker/maker = null -/obj/structure/door_assembly/attack_hand() +/obj/structure/door_assembly/on_attack_hand() . = ..() if(.) return diff --git a/code/game/machinery/PDApainter.dm b/code/game/machinery/PDApainter.dm index 634ed2da48..6bac63dff0 100644 --- a/code/game/machinery/PDApainter.dm +++ b/code/game/machinery/PDApainter.dm @@ -107,10 +107,7 @@ stat |= BROKEN update_icon() -/obj/machinery/pdapainter/attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) - . = ..() - if(.) - return +/obj/machinery/pdapainter/on_attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) if(!storedpda) to_chat(user, "[src] is empty.") diff --git a/code/game/machinery/_machinery.dm b/code/game/machinery/_machinery.dm index 6ef13ac36f..3faf6d5727 100644 --- a/code/game/machinery/_machinery.dm +++ b/code/game/machinery/_machinery.dm @@ -313,7 +313,7 @@ Class Procs: if(user.a_intent != INTENT_HARM) return attack_hand(user) else - user.changeNext_move(CLICK_CD_MELEE) + user.DelayNextAction(CLICK_CD_MELEE) user.do_attack_animation(src, ATTACK_EFFECT_PUNCH) user.visible_message("[user.name] smashes against \the [src.name] with its paws.", null, null, COMBAT_MESSAGE_RANGE) take_damage(4, BRUTE, "melee", 1) diff --git a/code/game/machinery/airlock_control.dm b/code/game/machinery/airlock_control.dm index 31fdf675ca..4b5e4088d7 100644 --- a/code/game/machinery/airlock_control.dm +++ b/code/game/machinery/airlock_control.dm @@ -122,10 +122,7 @@ else icon_state = "airlock_sensor_off" -/obj/machinery/airlock_sensor/attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) - . = ..() - if(.) - return +/obj/machinery/airlock_sensor/on_attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) var/datum/signal/signal = new(list( "tag" = master_tag, "command" = "cycle" diff --git a/code/game/machinery/aug_manipulator.dm b/code/game/machinery/aug_manipulator.dm index d13c167a22..28733a6b6c 100644 --- a/code/game/machinery/aug_manipulator.dm +++ b/code/game/machinery/aug_manipulator.dm @@ -100,10 +100,7 @@ stat |= BROKEN update_icon() -/obj/machinery/aug_manipulator/attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) - . = ..() - if(.) - return +/obj/machinery/aug_manipulator/on_attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) add_fingerprint(user) if(storedpart) diff --git a/code/game/machinery/buttons.dm b/code/game/machinery/buttons.dm index 4661e1bd8f..b5031b68a1 100644 --- a/code/game/machinery/buttons.dm +++ b/code/game/machinery/buttons.dm @@ -138,7 +138,7 @@ var/obj/item/assembly/control/A = device A.id = "[idnum][id]" -/obj/machinery/button/attack_hand(mob/user) +/obj/machinery/button/on_attack_hand(mob/user) . = ..() if(.) return diff --git a/code/game/machinery/camera/camera.dm b/code/game/machinery/camera/camera.dm index 5a1547aae0..2795ba45a9 100644 --- a/code/game/machinery/camera/camera.dm +++ b/code/game/machinery/camera/camera.dm @@ -235,7 +235,7 @@ itemname = P.name info = P.notehtml to_chat(U, "You hold \the [itemname] up to the camera...") - U.changeNext_move(CLICK_CD_MELEE) + U.DelayNextAction(CLICK_CD_MELEE) for(var/mob/O in GLOB.player_list) if(isAI(O)) var/mob/living/silicon/ai/AI = O diff --git a/code/game/machinery/cell_charger.dm b/code/game/machinery/cell_charger.dm index 01f73a3c75..effd70e9ab 100644 --- a/code/game/machinery/cell_charger.dm +++ b/code/game/machinery/cell_charger.dm @@ -79,10 +79,7 @@ charging = null update_icon() -/obj/machinery/cell_charger/attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) - . = ..() - if(.) - return +/obj/machinery/cell_charger/on_attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) if(!charging) return diff --git a/code/game/machinery/computer/arcade/misc_arcade.dm b/code/game/machinery/computer/arcade/misc_arcade.dm index 9b7d3d3f6f..24516740f9 100644 --- a/code/game/machinery/computer/arcade/misc_arcade.dm +++ b/code/game/machinery/computer/arcade/misc_arcade.dm @@ -8,7 +8,7 @@ icon_state = "arcade" circuit = /obj/item/circuitboard/computer/arcade/amputation -/obj/machinery/computer/arcade/amputation/attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) +/obj/machinery/computer/arcade/amputation/on_attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) if(!iscarbon(user)) return var/mob/living/carbon/c_user = user diff --git a/code/game/machinery/computer/camera_advanced.dm b/code/game/machinery/computer/camera_advanced.dm index 9f1390c69b..32dbfba989 100644 --- a/code/game/machinery/computer/camera_advanced.dm +++ b/code/game/machinery/computer/camera_advanced.dm @@ -103,10 +103,7 @@ return FALSE return ..() -/obj/machinery/computer/camera_advanced/attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) - . = ..() - if(.) - return +/obj/machinery/computer/camera_advanced/on_attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) if(current_user) to_chat(user, "The console is already in use!") return diff --git a/code/game/machinery/defibrillator_mount.dm b/code/game/machinery/defibrillator_mount.dm index f91fd66fb5..677cbe1208 100644 --- a/code/game/machinery/defibrillator_mount.dm +++ b/code/game/machinery/defibrillator_mount.dm @@ -59,7 +59,7 @@ return defib.get_cell() //defib interaction -/obj/machinery/defibrillator_mount/attack_hand(mob/living/user, act_intent = user.a_intent, unarmed_attack_flags) +/obj/machinery/defibrillator_mount/on_attack_hand(mob/living/user, act_intent = user.a_intent, unarmed_attack_flags) if(!defib) to_chat(user, "There's no defibrillator unit loaded!") return diff --git a/code/game/machinery/dish_drive.dm b/code/game/machinery/dish_drive.dm index 5bf16d4638..3cfd8fdfc4 100644 --- a/code/game/machinery/dish_drive.dm +++ b/code/game/machinery/dish_drive.dm @@ -31,7 +31,7 @@ if(user.Adjacent(src)) . += "Alt-click it to beam its contents to any nearby disposal bins." -/obj/machinery/dish_drive/attack_hand(mob/living/user, act_intent = user.a_intent, unarmed_attack_flags) +/obj/machinery/dish_drive/on_attack_hand(mob/living/user, act_intent = user.a_intent, unarmed_attack_flags) if(!contents.len) to_chat(user, "There's nothing in [src]!") return diff --git a/code/game/machinery/dna_scanner.dm b/code/game/machinery/dna_scanner.dm index 95552d931b..e721e986d2 100644 --- a/code/game/machinery/dna_scanner.dm +++ b/code/game/machinery/dna_scanner.dm @@ -70,8 +70,6 @@ if(!locked) open_machine() return - user.changeNext_move(CLICK_CD_BREAKOUT) - user.last_special = world.time + CLICK_CD_BREAKOUT user.visible_message("You see [user] kicking against the door of [src]!", \ "You lean on the back of [src] and start pushing the door open... (this will take about [DisplayTimeText(breakout_time)].)", \ "You hear a metallic creaking from [src].") diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm index a950cb7e7d..b5e752cc6b 100644 --- a/code/game/machinery/doors/airlock.dm +++ b/code/game/machinery/doors/airlock.dm @@ -763,10 +763,7 @@ /obj/machinery/door/airlock/attack_paw(mob/user) return attack_hand(user) -/obj/machinery/door/airlock/attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) - . = ..() - if(.) - return +/obj/machinery/door/airlock/on_attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) if(!(issilicon(user) || IsAdminGhost(user))) if(src.isElectrified()) if(src.shock(user, 100)) @@ -783,6 +780,8 @@ H.apply_damage(10, BRUTE, BODY_ZONE_HEAD) else visible_message("[user] headbutts the airlock. Good thing [user.p_theyre()] wearing a helmet.") + else + return ..() /obj/machinery/door/airlock/attempt_wire_interaction(mob/user) if(security_level) diff --git a/code/game/machinery/doors/door.dm b/code/game/machinery/doors/door.dm index fd1a8690df..f3886d0036 100644 --- a/code/game/machinery/doors/door.dm +++ b/code/game/machinery/doors/door.dm @@ -140,10 +140,7 @@ do_animate("deny") return -/obj/machinery/door/attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) - . = ..() - if(.) - return +/obj/machinery/door/on_attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) return try_to_activate_door(user) /obj/machinery/door/attack_tk(mob/user) diff --git a/code/game/machinery/doors/firedoor.dm b/code/game/machinery/doors/firedoor.dm index 4855280b86..2d41575e70 100644 --- a/code/game/machinery/doors/firedoor.dm +++ b/code/game/machinery/doors/firedoor.dm @@ -24,6 +24,8 @@ armor = list("melee" = 30, "bullet" = 30, "laser" = 20, "energy" = 20, "bomb" = 10, "bio" = 100, "rad" = 100, "fire" = 95, "acid" = 70) interaction_flags_machine = INTERACT_MACHINE_WIRES_IF_OPEN | INTERACT_MACHINE_ALLOW_SILICON | INTERACT_MACHINE_OPEN_SILICON | INTERACT_MACHINE_REQUIRES_SILICON | INTERACT_MACHINE_OPEN air_tight = TRUE + attack_hand_is_action = TRUE + attack_hand_speed = CLICK_CD_MELEE var/emergency_close_timer = 0 var/nextstate = null var/boltslocked = TRUE @@ -80,7 +82,6 @@ return TRUE return FALSE - /obj/machinery/door/firedoor/power_change() if(powered(power_channel)) stat &= ~NOPOWER @@ -88,11 +89,7 @@ else stat |= NOPOWER -/obj/machinery/door/firedoor/attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) - . = ..() - if(.) - return - +/obj/machinery/door/firedoor/on_attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) if(!welded && !operating && !(stat & NOPOWER) && (!density || allow_hand_open(user))) add_fingerprint(user) if(density) @@ -103,7 +100,6 @@ return TRUE if(operating || !density) return - user.changeNext_move(CLICK_CD_MELEE) user.visible_message("[user] bangs on \the [src].", "You bang on \the [src].") diff --git a/code/game/machinery/firealarm.dm b/code/game/machinery/firealarm.dm index 4c68d0b0b5..000b3dc7b5 100644 --- a/code/game/machinery/firealarm.dm +++ b/code/game/machinery/firealarm.dm @@ -141,7 +141,7 @@ if(user) log_game("[user] reset a fire alarm at [COORD(src)]") -/obj/machinery/firealarm/attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) +/obj/machinery/firealarm/on_attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) if(buildstage != 2) return ..() add_fingerprint(user) diff --git a/code/game/machinery/gulag_teleporter.dm b/code/game/machinery/gulag_teleporter.dm index fb41ac986d..da64699dd4 100644 --- a/code/game/machinery/gulag_teleporter.dm +++ b/code/game/machinery/gulag_teleporter.dm @@ -101,8 +101,6 @@ The console is located at computer/gulag_teleporter.dm if(!locked) open_machine() return - user.changeNext_move(CLICK_CD_BREAKOUT) - user.last_special = world.time + CLICK_CD_BREAKOUT user.visible_message("You see [user] kicking against the door of [src]!", \ "You lean on the back of [src] and start pushing the door open... (this will take about [DisplayTimeText(breakout_time)].)", \ "You hear a metallic creaking from [src].") diff --git a/code/game/machinery/harvester.dm b/code/game/machinery/harvester.dm index 8cb7ca1e8d..191967ac1a 100644 --- a/code/game/machinery/harvester.dm +++ b/code/game/machinery/harvester.dm @@ -50,7 +50,7 @@ harvesting = FALSE warming_up = FALSE -/obj/machinery/harvester/attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) +/obj/machinery/harvester/on_attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) if(state_open) close_machine() else if(!harvesting) diff --git a/code/game/machinery/hologram.dm b/code/game/machinery/hologram.dm index f43114f7cb..25f4248d6d 100644 --- a/code/game/machinery/hologram.dm +++ b/code/game/machinery/hologram.dm @@ -78,7 +78,7 @@ GLOBAL_LIST_EMPTY(network_holopads) new_disk.forceMove(src) disk = new_disk -/obj/machinery/holopad/tutorial/attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) +/obj/machinery/holopad/tutorial/on_attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) if(!istype(user)) return if(user.incapacitated() || !is_operational()) diff --git a/code/game/machinery/hypnochair.dm b/code/game/machinery/hypnochair.dm index 5677a09f12..16b464ced6 100644 --- a/code/game/machinery/hypnochair.dm +++ b/code/game/machinery/hypnochair.dm @@ -178,8 +178,6 @@ icon_state += "_occupied" /obj/machinery/hypnochair/container_resist(mob/living/user) - user.changeNext_move(CLICK_CD_BREAKOUT) - user.last_special = world.time + CLICK_CD_BREAKOUT user.visible_message("You see [user] kicking against the door of [src]!", \ "You lean on the back of [src] and start pushing the door open... (this will take about [DisplayTimeText(600)].)", \ "You hear a metallic creaking from [src].") diff --git a/code/game/machinery/igniter.dm b/code/game/machinery/igniter.dm index 7cf21ed767..ba4d01cfe5 100644 --- a/code/game/machinery/igniter.dm +++ b/code/game/machinery/igniter.dm @@ -26,10 +26,7 @@ on = TRUE icon_state = "igniter1" -/obj/machinery/igniter/attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) - . = ..() - if(.) - return +/obj/machinery/igniter/on_attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) add_fingerprint(user) use_power(50) diff --git a/code/game/machinery/iv_drip.dm b/code/game/machinery/iv_drip.dm index 7bb08fdbc1..bf71786a05 100644 --- a/code/game/machinery/iv_drip.dm +++ b/code/game/machinery/iv_drip.dm @@ -158,10 +158,7 @@ attached.transfer_blood_to(beaker, amount) update_icon() -/obj/machinery/iv_drip/attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) - . = ..() - if(.) - return +/obj/machinery/iv_drip/on_attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) if(attached) visible_message("[attached] is detached from [src]") attached = null diff --git a/code/game/machinery/porta_turret/portable_turret.dm b/code/game/machinery/porta_turret/portable_turret.dm index 1887ee46c0..2a60711a81 100644 --- a/code/game/machinery/porta_turret/portable_turret.dm +++ b/code/game/machinery/porta_turret/portable_turret.dm @@ -17,6 +17,7 @@ active_power_usage = 300 //when active, this turret takes up constant 300 Equipment power req_access = list(ACCESS_SEC_DOORS) power_channel = EQUIP //drains power from the EQUIPMENT channel + speed_process = TRUE var/base_icon_state = "standard" var/scan_range = 7 @@ -53,7 +54,7 @@ var/last_fired = 0 //world.time the turret last fired var/shot_delay = 15 //ticks until next shot (1.5 ?) - + var/shot_stagger = 0 // sleep() shots to stagger attacks var/check_records = 1 //checks if it can use the security records var/criminals = 1 //checks if it can shoot people on arrest @@ -436,6 +437,9 @@ else if(!always_up) popDown() // no valid targets, close the cover +/obj/machinery/porta_turret/proc/randomize_shot_stagger() + shot_stagger = rand(0, min(2 SECONDS, round(shot_delay/3, world.tick_lag))) + /obj/machinery/porta_turret/proc/tryToShootAt(list/atom/movable/targets) while(targets.len > 0) var/atom/movable/M = pick(targets) @@ -443,7 +447,6 @@ if(target(M)) return 1 - /obj/machinery/porta_turret/proc/popUp() //pops the turret up if(!anchored) return @@ -525,11 +528,14 @@ if(target) popUp() //pop the turret up if it's not already up. setDir(get_dir(base, target))//even if you can't shoot, follow the target - shootAt(target) + INVOKE_ASYNC(src, .proc/shootAt, target) return 1 return -/obj/machinery/porta_turret/proc/shootAt(atom/movable/target) +/obj/machinery/porta_turret/proc/shootAt(atom/movable/target, stagger_enabled = FALSE) + if(stagger_enabled) + randomize_shot_stagger() + sleep(shot_stagger) if(!raised) //the turret has to be raised in order to fire - makes sense, right? return diff --git a/code/game/machinery/porta_turret/portable_turret_construct.dm b/code/game/machinery/porta_turret/portable_turret_construct.dm index bf70ee8a9d..7c2000175e 100644 --- a/code/game/machinery/porta_turret/portable_turret_construct.dm +++ b/code/game/machinery/porta_turret/portable_turret_construct.dm @@ -79,6 +79,9 @@ if(PTURRET_INTERNAL_ARMOUR_ON) if(istype(I, /obj/item/gun/energy)) //the gun installation part var/obj/item/gun/energy/E = I + if(!E.can_turret) + to_chat(user, "[src] can't be fit into turrets.") + return if(!user.transferItemToLoc(E, src)) return installed_gun = E @@ -168,10 +171,7 @@ return ..() -/obj/machinery/porta_turret_construct/attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) - . = ..() - if(.) - return +/obj/machinery/porta_turret_construct/on_attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) switch(build_step) if(PTURRET_GUN_EQUIPPED) build_step = PTURRET_INTERNAL_ARMOUR_ON diff --git a/code/game/machinery/porta_turret/portable_turret_cover.dm b/code/game/machinery/porta_turret/portable_turret_cover.dm index 3899f07685..e0746bda78 100644 --- a/code/game/machinery/porta_turret/portable_turret_cover.dm +++ b/code/game/machinery/porta_turret/portable_turret_cover.dm @@ -31,10 +31,7 @@ return parent_turret.attack_ai(user) -/obj/machinery/porta_turret_cover/attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) - . = ..() - if(.) - return +/obj/machinery/porta_turret_cover/on_attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) return parent_turret.attack_hand(user) diff --git a/code/game/machinery/recharger.dm b/code/game/machinery/recharger.dm index 5d0d39e3a4..1d118023c9 100755 --- a/code/game/machinery/recharger.dm +++ b/code/game/machinery/recharger.dm @@ -108,10 +108,7 @@ return ..() -/obj/machinery/recharger/attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) - . = ..() - if(.) - return +/obj/machinery/recharger/on_attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) add_fingerprint(user) if(charging) diff --git a/code/game/machinery/suit_storage_unit.dm b/code/game/machinery/suit_storage_unit.dm index 7de414fd63..75772786fc 100644 --- a/code/game/machinery/suit_storage_unit.dm +++ b/code/game/machinery/suit_storage_unit.dm @@ -301,8 +301,6 @@ open_machine() dump_contents() return - user.changeNext_move(CLICK_CD_BREAKOUT) - user.last_special = world.time + CLICK_CD_BREAKOUT user.visible_message("You see [user] kicking against the doors of [src]!", \ "You start kicking against the doors... (this will take about [DisplayTimeText(breakout_time)].)", \ "You hear a thump from [src].") diff --git a/code/game/machinery/syndicatebeacon.dm b/code/game/machinery/syndicatebeacon.dm index 8b9aa64c58..1b3f942c51 100644 --- a/code/game/machinery/syndicatebeacon.dm +++ b/code/game/machinery/syndicatebeacon.dm @@ -68,10 +68,7 @@ GLOBAL_VAR_INIT(singularity_counter, 0) /obj/machinery/power/singularity_beacon/attack_ai(mob/user) return -/obj/machinery/power/singularity_beacon/attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) - . = ..() - if(.) - return +/obj/machinery/power/singularity_beacon/on_attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) if(anchored) return active ? Deactivate(user) : Activate(user) else diff --git a/code/game/machinery/telecomms/machines/message_server.dm b/code/game/machinery/telecomms/machines/message_server.dm index 7f8872ca74..c6386241ee 100644 --- a/code/game/machinery/telecomms/machines/message_server.dm +++ b/code/game/machinery/telecomms/machines/message_server.dm @@ -5,16 +5,73 @@ require the message server. */ -// A decorational representation of SSblackbox, usually placed alongside the message server. +// A decorational representation of SSblackbox, usually placed alongside the message server. Also contains a traitor theft item. /obj/machinery/blackbox_recorder icon = 'icons/obj/stationobjs.dmi' icon_state = "blackbox" - name = "Blackbox Recorder" + name = "blackbox recorder" density = TRUE use_power = IDLE_POWER_USE idle_power_usage = 10 active_power_usage = 100 armor = list("melee" = 25, "bullet" = 10, "laser" = 10, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 70) + var/obj/item/stored + +/obj/machinery/blackbox_recorder/Initialize() + . = ..() + stored = new /obj/item/blackbox(src) + +/obj/machinery/blackbox_recorder/attack_hand(mob/living/user) + . = ..() + if(stored) + to_chat(user, "You start struggling to pry the [stored] from the [src]...") + if(!do_after(user, 30 SECONDS, TRUE, src)) + to_chat(user, "Your fingers slip as you fail to pry the [stored] from the [src], clicking it right back into the slot!") + return + if(user.put_in_hands(stored)) + stored.forceMove(user.drop_location()) + stored = null + to_chat(user, "You successfully pry the [stored] from the [src], and send its overwhelming weight tumbling onto the ground! The tapes on the [src] stop spinning...") + update_icon() + return + else + to_chat(user, "It seems that the blackbox is missing...") + return + +/obj/machinery/blackbox_recorder/attackby(obj/item/I, mob/living/user, params) + . = ..() + if(istype(I, /obj/item/blackbox)) + if(HAS_TRAIT(I, TRAIT_NODROP) || !user.transferItemToLoc(I, src)) + to_chat(user, "[I] is stuck to your hand!") + return + user.visible_message("[user] clicks the [I] into the [src]!", \ + "You press [I] into [src], and it clicks into place. The tapes on the [src] begin spinning again...") + playsound(src, 'sound/machines/click.ogg', 50, TRUE) + stored = I + update_icon() + return ..() + return ..() + +/obj/machinery/blackbox_recorder/Destroy() + if(stored) + stored.forceMove(loc) + new /obj/effect/decal/cleanable/oil(loc) + return ..() + +/obj/machinery/blackbox_recorder/update_icon() + . = ..() + if(!stored) + icon_state = "blackbox_b" + else + icon_state = "blackbox" + +/obj/item/blackbox + name = "the blackbox" + desc = "A strange relic, capable of recording data on extradimensional vertices. It lives inside the blackbox recorder for safe keeping." + icon = 'icons/obj/stationobjs.dmi' + icon_state = "blackcube" + w_class = WEIGHT_CLASS_BULKY + resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ACID_PROOF // The message server itself. @@ -140,9 +197,9 @@ ..() if(href_list["photo"]) var/mob/M = usr - - M << browse_rsc(picture.picture_image, "pda_photo.png") - + + M << browse_rsc(picture.picture_image, "pda_photo.png") + var/dat = "
" diff --git a/code/game/machinery/washing_machine.dm b/code/game/machinery/washing_machine.dm index 9e277b9d8e..3441ac7eaa 100644 --- a/code/game/machinery/washing_machine.dm +++ b/code/game/machinery/washing_machine.dm @@ -297,10 +297,7 @@ GLOBAL_LIST_INIT(dye_registry, list( else return ..() -/obj/machinery/washing_machine/attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) - . = ..() - if(.) - return +/obj/machinery/washing_machine/on_attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) if(busy) to_chat(user, "[src] is busy.") return diff --git a/code/game/machinery/wishgranter.dm b/code/game/machinery/wishgranter.dm index dcd86c9f24..12fdc2193b 100644 --- a/code/game/machinery/wishgranter.dm +++ b/code/game/machinery/wishgranter.dm @@ -10,7 +10,7 @@ var/charges = 1 var/insisting = 0 -/obj/machinery/wish_granter/attack_hand(mob/living/carbon/user) +/obj/machinery/wish_granter/on_attack_hand(mob/living/carbon/user) if(charges <= 0) to_chat(user, "The Wish Granter lies silent.") return @@ -31,7 +31,7 @@ user.dna.add_mutation(XRAY) user.dna.add_mutation(SPACEMUT) user.dna.add_mutation(TK) - user.next_move_modifier *= 0.5 //half the delay between attacks! + user.action_cooldown_mod *= 0.5 to_chat(user, "Things around you feel slower!") charges-- insisting = FALSE @@ -101,7 +101,7 @@ to_chat(user, "[killreward] materializes into your hands!") else to_chat(user, "[killreward] materializes onto the floor.") - user.next_move_modifier *= 0.8 //20% less delay between attacks! + user.action_cooldown_mod *= 0.8 to_chat(user, "Things around you feel slightly slower!") var/mob/living/simple_animal/hostile/venus_human_trap/killwish = new /mob/living/simple_animal/hostile/venus_human_trap(loc) killwish.maxHealth = 1500 diff --git a/code/game/mecha/mecha.dm b/code/game/mecha/mecha.dm index d2340a15ea..5b691607db 100644 --- a/code/game/mecha/mecha.dm +++ b/code/game/mecha/mecha.dm @@ -24,6 +24,8 @@ infra_luminosity = 15 //byond implementation is bugged. force = 5 flags_1 = HEAR_1|BLOCK_FACE_ATOM_1 + attack_hand_speed = CLICK_CD_MELEE + attack_hand_is_action = TRUE var/can_move = 0 //time of next allowed movement var/mob/living/occupant = null var/step_in = 10 //make a step in step_in/10 sec. diff --git a/code/game/mecha/mecha_defense.dm b/code/game/mecha/mecha_defense.dm index dedbef1906..40336fb01e 100644 --- a/code/game/mecha/mecha_defense.dm +++ b/code/game/mecha/mecha_defense.dm @@ -54,11 +54,7 @@ . *= booster_damage_modifier -/obj/mecha/attack_hand(mob/living/user, act_intent = user.a_intent, unarmed_attack_flags) - . = ..() - if(.) - return - user.changeNext_move(CLICK_CD_MELEE) // Ugh. Ideally we shouldn't be setting cooldowns outside of click code. +/obj/mecha/on_attack_hand(mob/living/user, act_intent = user.a_intent, unarmed_attack_flags) user.do_attack_animation(src, ATTACK_EFFECT_PUNCH) playsound(loc, 'sound/weapons/tap.ogg', 40, 1, -1) user.visible_message("[user] hits [name]. Nothing happens", null, null, COMBAT_MESSAGE_RANGE) @@ -255,7 +251,7 @@ return else if(istype(W, /obj/item/weldingtool) && user.a_intent != INTENT_HARM) - user.changeNext_move(CLICK_CD_MELEE) + user.DelayNextAction(CLICK_CD_MELEE) if(obj_integrity < max_integrity) if(W.use_tool(src, user, 0, volume=50, amount=1)) if (internal_damage & MECHA_INT_TANK_BREACH) diff --git a/code/game/objects/buckling.dm b/code/game/objects/buckling.dm index eabbdfad88..bdb748925c 100644 --- a/code/game/objects/buckling.dm +++ b/code/game/objects/buckling.dm @@ -9,7 +9,7 @@ var/buckle_prevents_pull = FALSE //Interaction -/atom/movable/attack_hand(mob/living/user, act_intent = user.a_intent, unarmed_attack_flags) +/atom/movable/on_attack_hand(mob/living/user, act_intent = user.a_intent, unarmed_attack_flags) . = ..() if(.) return @@ -145,3 +145,13 @@ var/mob/living/L = M.pulledby L.set_pull_offsets(M, L.grab_state) return M + +/atom/movable/proc/precise_user_unbuckle_mob(mob/user) + if(!buckled_mobs) + return + else if(length(buckled_mobs) == 1) + return user_unbuckle_mob(buckled_mobs[1], user) + else + var/unbuckled = input(user, "Who do you wish to unbuckle?","Unbuckle Who?") as null|mob in buckled_mobs + return user_unbuckle_mob(unbuckled, user) + diff --git a/code/game/objects/effects/contraband.dm b/code/game/objects/effects/contraband.dm index e4f1c854d0..8e2f39d0df 100644 --- a/code/game/objects/effects/contraband.dm +++ b/code/game/objects/effects/contraband.dm @@ -101,10 +101,7 @@ to_chat(user, "You carefully remove the poster from the wall.") roll_and_drop(user.loc) -/obj/structure/sign/poster/attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) - . = ..() - if(.) - return +/obj/structure/sign/poster/on_attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) if(ruined) return visible_message("[user] rips [src] in a single, decisive motion!" ) diff --git a/code/game/objects/effects/decals/cleanable/misc.dm b/code/game/objects/effects/decals/cleanable/misc.dm index 01f0b6f957..044c5c6e86 100644 --- a/code/game/objects/effects/decals/cleanable/misc.dm +++ b/code/game/objects/effects/decals/cleanable/misc.dm @@ -137,10 +137,7 @@ random_icon_states = list("vomit_1", "vomit_2", "vomit_3", "vomit_4") beauty = -150 -/obj/effect/decal/cleanable/vomit/attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) - . = ..() - if(.) - return +/obj/effect/decal/cleanable/vomit/on_attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) if(ishuman(user)) var/mob/living/carbon/human/H = user if(isflyperson(H)) diff --git a/code/game/objects/effects/effect_system/effects_foam.dm b/code/game/objects/effects/effect_system/effects_foam.dm index 0cf95ea263..640675bea5 100644 --- a/code/game/objects/effects/effect_system/effects_foam.dm +++ b/code/game/objects/effects/effect_system/effects_foam.dm @@ -268,6 +268,8 @@ gender = PLURAL max_integrity = 20 CanAtmosPass = ATMOS_PASS_DENSITY + attack_hand_speed = CLICK_CD_MELEE + attack_hand_is_action = TRUE /obj/structure/foamedmetal/Initialize() . = ..() @@ -284,11 +286,7 @@ /obj/structure/foamedmetal/play_attack_sound(damage_amount, damage_type = BRUTE, damage_flag = 0) playsound(src.loc, 'sound/weapons/tap.ogg', 100, 1) -/obj/structure/foamedmetal/attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) - . = ..() - if(.) - return - user.changeNext_move(CLICK_CD_MELEE) +/obj/structure/foamedmetal/on_attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) user.do_attack_animation(src, ATTACK_EFFECT_PUNCH) to_chat(user, "You hit [src] but bounce off it!") playsound(src.loc, 'sound/weapons/tap.ogg', 100, 1) diff --git a/code/game/objects/effects/portals.dm b/code/game/objects/effects/portals.dm index e363529c46..0b227be247 100644 --- a/code/game/objects/effects/portals.dm +++ b/code/game/objects/effects/portals.dm @@ -60,10 +60,7 @@ /obj/effect/portal/attack_tk(mob/user) return -/obj/effect/portal/attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) - . = ..() - if(.) - return +/obj/effect/portal/on_attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) if(get_turf(user) == get_turf(src)) teleport(user) if(Adjacent(user)) diff --git a/code/game/objects/effects/spiders.dm b/code/game/objects/effects/spiders.dm index 745b281d2a..4b04606401 100644 --- a/code/game/objects/effects/spiders.dm +++ b/code/game/objects/effects/spiders.dm @@ -120,6 +120,8 @@ var/poison_type = "toxin" var/poison_per_bite = 5 var/list/faction = list("spiders") + attack_hand_speed = CLICK_CD_MELEE + attack_hand_is_action = TRUE /obj/structure/spider/spiderling/Destroy() new/obj/item/reagent_containers/food/snacks/spiderling(get_turf(src)) @@ -153,10 +155,9 @@ else ..() -/obj/structure/spider/spiderling/attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) +/obj/structure/spider/spiderling/on_attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) . = ..() if(user.a_intent != INTENT_HELP) - user.changeNext_move(CLICK_CD_MELEE) user.do_attack_animation(src) user.visible_message("[user] splats [src].", "You splat [src].", "You hear a splat...") playsound(loc, 'sound/effects/snap.ogg', 25) @@ -253,8 +254,6 @@ /obj/structure/spider/cocoon/container_resist(mob/living/user) var/breakout_time = 600 - user.changeNext_move(CLICK_CD_BREAKOUT) - user.last_special = world.time + CLICK_CD_BREAKOUT to_chat(user, "You struggle against the tight bonds... (This will take about [DisplayTimeText(breakout_time)].)") visible_message("You see something struggling and writhing in \the [src]!") if(do_after(user,(breakout_time), target = src)) @@ -262,8 +261,6 @@ return qdel(src) - - /obj/structure/spider/cocoon/Destroy() var/turf/T = get_turf(src) src.visible_message("\The [src] splits open.") diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index a3bbf95413..5870c8a780 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -11,6 +11,10 @@ GLOBAL_VAR_INIT(embedpocalypse, FALSE) // if true, all items will be able to emb name = "item" icon = 'icons/obj/items_and_weapons.dmi' blocks_emissive = EMISSIVE_BLOCK_GENERIC + + attack_hand_speed = 0 + attack_hand_is_action = FALSE + attack_hand_unwieldlyness = 0 ///icon state name for inhand overlays var/item_state = null @@ -58,15 +62,6 @@ GLOBAL_VAR_INIT(embedpocalypse, FALSE) // if true, all items will be able to emb /// How long, in deciseconds, this staggers for, if null it will autocalculate from w_class and force. Unlike total mass this supports 0 and negatives. var/stagger_force - /** - * Set FALSE and then checked at the end of on mob/living/attackby(), set TRUE on living/pre_attacked_by(). - * Should it be FALSE by the end of the item/attack(), that means the item overrode the standard attack behaviour - * and the user still needs the delay applied. We can't be using return values since that'll stop afterattack() from being triggered. - */ - var/attack_delay_done = FALSE - ///next_move click/attack delay of this item. - var/click_delay = CLICK_CD_MELEE - var/slot_flags = 0 //This is used to determine on which slots an item can fit. var/current_equipped_slot pass_flags = PASSTABLE @@ -313,10 +308,7 @@ GLOBAL_VAR_INIT(embedpocalypse, FALSE) // if true, all items will be able to emb add_fingerprint(usr) return ..() -/obj/item/attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) - . = ..() - if(.) - return +/obj/item/on_attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) if(!user) return if(anchored) @@ -473,6 +465,7 @@ GLOBAL_VAR_INIT(embedpocalypse, FALSE) // if true, all items will be able to emb usr.UnarmedAttack(src, TRUE) if(usr.get_active_held_item() == src) melee_attack_chain(usr, over) + usr.FlushCurrentAction() return TRUE //returning TRUE as a "is this overridden?" flag if(!Adjacent(usr) || !over.Adjacent(usr)) return // should stop you from dragging through windows diff --git a/code/game/objects/items/bodybag.dm b/code/game/objects/items/bodybag.dm index dbc66b1899..428efe4abe 100644 --- a/code/game/objects/items/bodybag.dm +++ b/code/game/objects/items/bodybag.dm @@ -71,8 +71,6 @@ if(user.incapacitated()) to_chat(user, "You can't get out while you're restrained like this!") return - user.changeNext_move(CLICK_CD_BREAKOUT) - user.last_special = world.time + CLICK_CD_BREAKOUT to_chat(user, "You claw at the fabric of [src], trying to tear it open...") to_chat(loc, "Someone starts trying to break free of [src]!") if(!do_after(user, 200, target = src)) diff --git a/code/game/objects/items/cardboard_cutouts.dm b/code/game/objects/items/cardboard_cutouts.dm index 3d444b7eca..a8ff7b9004 100644 --- a/code/game/objects/items/cardboard_cutouts.dm +++ b/code/game/objects/items/cardboard_cutouts.dm @@ -6,6 +6,8 @@ icon_state = "cutout_basic" w_class = WEIGHT_CLASS_BULKY resistance_flags = FLAMMABLE + attack_hand_speed = CLICK_CD_MELEE + attack_hand_is_action = TRUE /// Possible restyles for the cutout, add an entry in change_appearance() if you add to here var/static/list/possible_appearances /// If the cutout is pushed over and has to be righted @@ -43,8 +45,7 @@ "Monkey" = image(icon = src.icon, icon_state = "cutout_monky"), )) -//ATTACK HAND IGNORING PARENT RETURN VALUE -/obj/item/cardboard_cutout/attack_hand(mob/living/user, act_intent = user.a_intent, unarmed_attack_flags) +/obj/item/cardboard_cutout/on_attack_hand(mob/living/user, act_intent = user.a_intent, unarmed_attack_flags) if(user.a_intent == INTENT_HELP || pushed_over) return ..() user.visible_message("[user] pushes over [src]!", "You push over [src]!") @@ -81,7 +82,6 @@ else if(I.hitsound) playsound(loc, I.hitsound, get_clamped_volume(), 1, -1) - user.changeNext_move(CLICK_CD_MELEE) user.do_attack_animation(src) if(I.force) diff --git a/code/game/objects/items/cosmetics.dm b/code/game/objects/items/cosmetics.dm index 4dcaed2cf7..592f238cec 100644 --- a/code/game/objects/items/cosmetics.dm +++ b/code/game/objects/items/cosmetics.dm @@ -188,4 +188,4 @@ else ..() else - ..() \ No newline at end of file + ..() diff --git a/code/game/objects/items/courtroom.dm b/code/game/objects/items/courtroom.dm index c0e81ed3d5..13b83c9425 100644 --- a/code/game/objects/items/courtroom.dm +++ b/code/game/objects/items/courtroom.dm @@ -32,6 +32,6 @@ if(istype(I, /obj/item/gavelhammer)) playsound(loc, 'sound/items/gavel.ogg', 100, 1) user.visible_message("[user] strikes [src] with [I].") - user.changeNext_move(CLICK_CD_MELEE) + return TRUE else - return ..() \ No newline at end of file + return ..() diff --git a/code/game/objects/items/crayons.dm b/code/game/objects/items/crayons.dm index 620fbbf100..a366a2ef88 100644 --- a/code/game/objects/items/crayons.dm +++ b/code/game/objects/items/crayons.dm @@ -273,7 +273,9 @@ . = ..() if(!proximity || !check_allowed_items(target)) return + draw_on(target, user, proximity, params) +/obj/item/toy/crayon/proc/draw_on(atom/target, mob/user, proximity, params) var/static/list/punctuation = list("!","?",".",",","/","+","-","=","%","#","&") var/cost = 1 @@ -568,9 +570,9 @@ dye_color = DYE_RAINBOW charges = -1 -/obj/item/toy/crayon/rainbow/afterattack(atom/target, mob/user, proximity, params) +/obj/item/toy/crayon/rainbow/draw_on(atom/target, mob/user, proximity, params) paint_color = rgb(rand(0,255), rand(0,255), rand(0,255)) - . = ..() + return ..() /* * Crayon Box @@ -693,7 +695,7 @@ . += "It is empty." . += "Alt-click [src] to [ is_capped ? "take the cap off" : "put the cap on"]." -/obj/item/toy/crayon/spraycan/afterattack(atom/target, mob/user, proximity, params) +/obj/item/toy/crayon/spraycan/draw_on(atom/target, mob/user, proximity, params) if(!proximity) return @@ -766,7 +768,7 @@ desc = "A metallic container containing shiny synthesised paint." charges = -1 -/obj/item/toy/crayon/spraycan/borg/afterattack(atom/target,mob/user,proximity, params) +/obj/item/toy/crayon/spraycan/borg/draw_on(atom/target,mob/user,proximity, params) var/diff = ..() if(!iscyborg(user)) to_chat(user, "How did you get this?") diff --git a/code/game/objects/items/defib.dm b/code/game/objects/items/defib.dm index e15dc72838..767f8fc395 100644 --- a/code/game/objects/items/defib.dm +++ b/code/game/objects/items/defib.dm @@ -77,8 +77,7 @@ /obj/item/defibrillator/ui_action_click() toggle_paddles() -//ATTACK HAND IGNORING PARENT RETURN VALUE -/obj/item/defibrillator/attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) +/obj/item/defibrillator/on_attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) if(loc == user) if(slot_flags == ITEM_SLOT_BACK) if(user.get_item_by_slot(SLOT_BACK) == src) diff --git a/code/game/objects/items/devices/chameleonproj.dm b/code/game/objects/items/devices/chameleonproj.dm index 57443de973..a45f26062b 100644 --- a/code/game/objects/items/devices/chameleonproj.dm +++ b/code/game/objects/items/devices/chameleonproj.dm @@ -132,8 +132,7 @@ /obj/effect/dummy/chameleon/attackby() master.disrupt() -//ATTACK HAND IGNORING PARENT RETURN VALUE -/obj/effect/dummy/chameleon/attack_hand() +/obj/effect/dummy/chameleon/on_attack_hand() master.disrupt() /obj/effect/dummy/chameleon/attack_animal() diff --git a/code/game/objects/items/devices/dogborg_sleeper.dm b/code/game/objects/items/devices/dogborg_sleeper.dm index 41a12136ef..d8abccb336 100644 --- a/code/game/objects/items/devices/dogborg_sleeper.dm +++ b/code/game/objects/items/devices/dogborg_sleeper.dm @@ -116,8 +116,6 @@ if(!hound) go_out(user) return - user.changeNext_move(CLICK_CD_BREAKOUT) - user.last_special = world.time + CLICK_CD_BREAKOUT if(user.a_intent == INTENT_HELP) return var/voracious = TRUE diff --git a/code/game/objects/items/devices/forcefieldprojector.dm b/code/game/objects/items/devices/forcefieldprojector.dm index 03ca110ec8..9ef9d73705 100644 --- a/code/game/objects/items/devices/forcefieldprojector.dm +++ b/code/game/objects/items/devices/forcefieldprojector.dm @@ -43,7 +43,7 @@ user.visible_message("[user] projects a forcefield!","You project a forcefield.") var/obj/structure/projected_forcefield/F = new(T, src) current_fields += F - user.changeNext_move(CLICK_CD_MELEE) + user.DelayNextAction(CLICK_CD_MELEE) /obj/item/forcefield_projector/attack_self(mob/user) if(LAZYLEN(current_fields)) diff --git a/code/game/objects/items/devices/polycircuit.dm b/code/game/objects/items/devices/polycircuit.dm index a9f7cd46c8..0308f19b5f 100644 --- a/code/game/objects/items/devices/polycircuit.dm +++ b/code/game/objects/items/devices/polycircuit.dm @@ -11,7 +11,7 @@ /obj/item/stack/circuit_stack/attack_self(mob/user)// Prevents the crafting menu, and tells you how to use it. to_chat(user, "You can't use [src] by itself, you'll have to try and remove one of these circuits by hand... carefully.") -/obj/item/stack/circuit_stack/attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) +/obj/item/stack/circuit_stack/on_attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) var/mob/living/carbon/human/H = user if(!user.get_inactive_held_item() == src) return ..() diff --git a/code/game/objects/items/devices/powersink.dm b/code/game/objects/items/devices/powersink.dm index ec59009794..c3127c246f 100644 --- a/code/game/objects/items/devices/powersink.dm +++ b/code/game/objects/items/devices/powersink.dm @@ -97,10 +97,7 @@ GLOBAL_LIST_EMPTY(power_sinks) /obj/item/powersink/attack_ai() return -/obj/item/powersink/attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) - . = ..() - if(.) - return +/obj/item/powersink/on_attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) switch(mode) if(DISCONNECTED) ..() diff --git a/code/game/objects/items/devices/radio/electropack.dm b/code/game/objects/items/devices/radio/electropack.dm index cdb8c09527..0cf7ceb55b 100644 --- a/code/game/objects/items/devices/radio/electropack.dm +++ b/code/game/objects/items/devices/radio/electropack.dm @@ -31,8 +31,7 @@ SSradio.remove_object(src, frequency) . = ..() -//ATTACK HAND IGNORING PARENT RETURN VALUE -/obj/item/electropack/attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) +/obj/item/electropack/on_attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) if(iscarbon(user)) var/mob/living/carbon/C = user if(src == C.back) @@ -162,7 +161,7 @@ materials = list(/datum/material/iron = 5000, /datum/material/glass =2000) category = list("hacked", "Misc") -/obj/item/electropack/shockcollar/attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) +/obj/item/electropack/shockcollar/on_attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) if(loc == user && user.get_item_by_slot(SLOT_NECK)) to_chat(user, "The collar is fastened tight! You'll need help taking this off!") return diff --git a/code/game/objects/items/devices/radio/intercom.dm b/code/game/objects/items/devices/radio/intercom.dm index ec19c0c05e..8657684ff4 100644 --- a/code/game/objects/items/devices/radio/intercom.dm +++ b/code/game/objects/items/devices/radio/intercom.dm @@ -86,10 +86,7 @@ /obj/item/radio/intercom/attack_ai(mob/user) interact(user) -/obj/item/radio/intercom/attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) - . = ..() - if(.) - return +/obj/item/radio/intercom/on_attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) interact(user) /obj/item/radio/intercom/interact(mob/user) diff --git a/code/game/objects/items/devices/reverse_bear_trap.dm b/code/game/objects/items/devices/reverse_bear_trap.dm index 46b9547e9d..f2a0ea5450 100644 --- a/code/game/objects/items/devices/reverse_bear_trap.dm +++ b/code/game/objects/items/devices/reverse_bear_trap.dm @@ -45,7 +45,7 @@ to_chat(loc, "*ding*") addtimer(CALLBACK(src, .proc/snap), 2) -/obj/item/reverse_bear_trap/attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) +/obj/item/reverse_bear_trap/on_attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) if(iscarbon(user)) var/mob/living/carbon/C = user if(C.get_item_by_slot(SLOT_HEAD) == src) diff --git a/code/game/objects/items/devices/taperecorder.dm b/code/game/objects/items/devices/taperecorder.dm index 5765ac71f1..cef06bfde8 100644 --- a/code/game/objects/items/devices/taperecorder.dm +++ b/code/game/objects/items/devices/taperecorder.dm @@ -54,8 +54,7 @@ mytape.ruin() //Fires destroy the tape ..() -//ATTACK HAND IGNORING PARENT RETURN VALUE -/obj/item/taperecorder/attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) +/obj/item/taperecorder/on_attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) if(loc == user) if(mytape) if(!user.is_holding(src)) diff --git a/code/game/objects/items/devices/transfer_valve.dm b/code/game/objects/items/devices/transfer_valve.dm index ccf9dcd253..c791b7e323 100644 --- a/code/game/objects/items/devices/transfer_valve.dm +++ b/code/game/objects/items/devices/transfer_valve.dm @@ -79,7 +79,7 @@ if(attached_device) attached_device.Crossed(AM) -/obj/item/transfer_valve/attack_hand()//Triggers mousetraps +/obj/item/transfer_valve/on_attack_hand()//Triggers mousetraps . = ..() if(.) return diff --git a/code/game/objects/items/eightball.dm b/code/game/objects/items/eightball.dm index 837f57ceb5..dbc4c297ca 100644 --- a/code/game/objects/items/eightball.dm +++ b/code/game/objects/items/eightball.dm @@ -229,4 +229,4 @@ else votes[selected_answer] += 1 voted[user.ckey] = selected_answer - . = TRUE \ No newline at end of file + . = TRUE diff --git a/code/game/objects/items/electrostaff.dm b/code/game/objects/items/electrostaff.dm index 8d1fe4ebd1..9750994c87 100644 --- a/code/game/objects/items/electrostaff.dm +++ b/code/game/objects/items/electrostaff.dm @@ -15,6 +15,7 @@ attack_verb = list("struck", "beaten", "thwacked", "pulped") total_mass = 5 //yeah this is a heavy thing, beating people with it while it's off is not going to do you any favors. (to curb stun-kill rampaging without it being on) block_parry_data = /datum/block_parry_data/electrostaff + attack_speed = CLICK_CD_MELEE var/obj/item/stock_parts/cell/cell = /obj/item/stock_parts/cell/high var/on = FALSE var/can_block_projectiles = FALSE //can't block guns diff --git a/code/game/objects/items/extinguisher.dm b/code/game/objects/items/extinguisher.dm index 2d9d0b61c2..b1f51f608d 100644 --- a/code/game/objects/items/extinguisher.dm +++ b/code/game/objects/items/extinguisher.dm @@ -110,7 +110,7 @@ . += "The safety is [safety ? "on" : "off"]." if(reagents.total_volume) - . += "You can loose its screws to empty it." + . += "Alt-click to empty it." /obj/item/extinguisher/proc/AttemptRefill(atom/target, mob/user) if(istype(target, tanktype) && target.Adjacent(user)) @@ -230,7 +230,7 @@ repetition++ addtimer(CALLBACK(src, /obj/item/extinguisher/proc/move_chair, B, movementdirection, repetition), timer_seconds) -/obj/item/extinguisher/screwdriver_act(mob/user, obj/item/tool) +/obj/item/extinguisher/AltClick(mob/user) if(!user.canUseTopic(src, BE_CLOSE, ismonkey(user))) return EmptyExtinguisher(user) @@ -244,7 +244,7 @@ var/turf/open/theturf = T theturf.MakeSlippery(TURF_WET_WATER, min_wet_time = 10 SECONDS, wet_time_to_add = 5 SECONDS) - user.visible_message("[user] empties out \the [src] onto the floor using the release valve.", "You quietly empty out \the [src] by loosing the release valve's screws.") + user.visible_message("[user] empties out \the [src] onto the floor using the release valve.", "You quietly empty out \the [src] by using its release valve.") //firebot assembly /obj/item/extinguisher/attackby(obj/O, mob/user, params) diff --git a/code/game/objects/items/grenades/flashbang.dm b/code/game/objects/items/grenades/flashbang.dm index bd25169fe4..bf9fab5f04 100644 --- a/code/game/objects/items/grenades/flashbang.dm +++ b/code/game/objects/items/grenades/flashbang.dm @@ -124,9 +124,11 @@ /obj/item/grenade/primer/attack_self(mob/user) . = ..() if(active) + if(!user.CheckActionCooldown()) + return user.playsound_local(user, 'sound/misc/box_deploy.ogg', 50, TRUE) rots++ - user.changeNext_move(CLICK_CD_RAPID) + user.DelayNextAction(CLICK_CD_RAPID) /obj/item/grenade/primer/prime(mob/living/lanced_by) shrapnel_radius = round(rots / rots_per_mag) diff --git a/code/game/objects/items/handcuffs.dm b/code/game/objects/items/handcuffs.dm index e3388b12eb..4c9ea06620 100644 --- a/code/game/objects/items/handcuffs.dm +++ b/code/game/objects/items/handcuffs.dm @@ -320,7 +320,7 @@ do_sparks(1, TRUE, src) qdel(src) -/obj/item/restraints/legcuffs/beartrap/energy/attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) +/obj/item/restraints/legcuffs/beartrap/energy/on_attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) Crossed(user) //honk . = ..() diff --git a/code/game/objects/items/implants/implantchair.dm b/code/game/objects/items/implants/implantchair.dm index 3ea27c84bb..b3c1f79e94 100644 --- a/code/game/objects/items/implants/implantchair.dm +++ b/code/game/objects/items/implants/implantchair.dm @@ -121,8 +121,6 @@ update_icon() /obj/machinery/implantchair/container_resist(mob/living/user) - user.changeNext_move(CLICK_CD_BREAKOUT) - user.last_special = world.time + CLICK_CD_BREAKOUT user.visible_message("You see [user] kicking against the door of [src]!", \ "You lean on the back of [src] and start pushing the door open... (this will take about [DisplayTimeText(breakout_time)].)", \ "You hear a metallic creaking from [src].") @@ -191,4 +189,4 @@ brainwash(C, objective) message_admins("[ADMIN_LOOKUPFLW(user)] brainwashed [key_name_admin(C)] with objective '[objective]'.") log_game("[key_name(user)] brainwashed [key_name(C)] with objective '[objective]'.") - return TRUE \ No newline at end of file + return TRUE diff --git a/code/game/objects/items/melee/energy.dm b/code/game/objects/items/melee/energy.dm index 20960da7c6..e0b08ba8ef 100644 --- a/code/game/objects/items/melee/energy.dm +++ b/code/game/objects/items/melee/energy.dm @@ -147,6 +147,12 @@ return NONE return ..() +/obj/item/melee/transforming/energy/sword/on_active_parry(mob/living/owner, atom/object, damage, attack_text, attack_type, armour_penetration, mob/attacker, def_zone, list/block_return, parry_efficiency, parry_time) + . = ..() + if(parry_efficiency >= 80) // perfect parry + block_return[BLOCK_RETURN_REDIRECT_METHOD] = REDIRECT_METHOD_RETURN_TO_SENDER + . |= BLOCK_SHOULD_REDIRECT + /obj/item/melee/transforming/energy/sword/cyborg sword_color = "red" light_color = "#ff0000" diff --git a/code/game/objects/items/melee/misc.dm b/code/game/objects/items/melee/misc.dm index ee24579e9a..9a7d455df6 100644 --- a/code/game/objects/items/melee/misc.dm +++ b/code/game/objects/items/melee/misc.dm @@ -375,6 +375,7 @@ var/wait_desc = get_wait_description() if(wait_desc) to_chat(user, wait_desc) + return DISCARD_LAST_ACTION /obj/item/melee/classic_baton/telescopic name = "telescopic baton" @@ -626,7 +627,7 @@ to_chat(user, "[target] doesn't seem to want to get on [src]!") update_icon() -/obj/item/melee/roastingstick/attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) +/obj/item/melee/roastingstick/on_attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) ..() if (held_sausage) user.put_in_hands(held_sausage) diff --git a/code/game/objects/items/melee/transforming.dm b/code/game/objects/items/melee/transforming.dm index 386a6e9acc..66752c4c9a 100644 --- a/code/game/objects/items/melee/transforming.dm +++ b/code/game/objects/items/melee/transforming.dm @@ -84,4 +84,4 @@ /obj/item/melee/transforming/proc/clumsy_transform_effect(mob/living/user) if(clumsy_check && HAS_TRAIT(user, TRAIT_CLUMSY) && prob(50)) to_chat(user, "You accidentally cut yourself with [src], like a doofus!") - user.take_bodypart_damage(5,5) \ No newline at end of file + user.take_bodypart_damage(5,5) diff --git a/code/game/objects/items/mop.dm b/code/game/objects/items/mop.dm index 3a06c7d7fe..b420bfc002 100644 --- a/code/game/objects/items/mop.dm +++ b/code/game/objects/items/mop.dm @@ -58,7 +58,7 @@ if(T) user.visible_message("[user] cleans \the [T] with [src].", "You clean \the [T] with [src].") clean(T) - user.changeNext_move(CLICK_CD_MELEE) + user.DelayNextAction(CLICK_CD_MELEE) user.do_attack_animation(T, used_item = src) if(istype(L)) L.adjustStaminaLossBuffered(stamusage) @@ -128,4 +128,4 @@ return ..() /obj/item/mop/advanced/cyborg - insertable = FALSE \ No newline at end of file + insertable = FALSE diff --git a/code/game/objects/items/pet_carrier.dm b/code/game/objects/items/pet_carrier.dm index a60aa02ce1..c6b5a7e224 100644 --- a/code/game/objects/items/pet_carrier.dm +++ b/code/game/objects/items/pet_carrier.dm @@ -24,6 +24,7 @@ var/max_occupant_weight = MOB_SIZE_SMALL //This is calculated from the mob sizes of occupants var/entrance_name = "door" //name of the entrance to the item var/escape_time = 200 //how long it takes for mobs above small sizes to escape (for small sizes, its randomly 1.5 to 2x this) + var/alternate_escape_time = 0 //how long it takes for mobs to escape when the entrance is open var/load_time = 30 //how long it takes for mobs to be loaded into the pet carrier var/has_lock_sprites = TRUE //whether to load the lock overlays or not var/allows_hostiles = FALSE //does the pet carrier allow hostile entities to be held within it? @@ -106,8 +107,9 @@ if(user == target) to_chat(user, "Why would you ever do that?") return - if(ishostile(target) && (!allows_hostiles || istype(target, /mob/living/simple_animal/hostile/carp/cayenne)) || target.move_resist < MOVE_FORCE_VERY_STRONG) //don't allow goliaths into pet carriers, but let cayenne in! + if((ishostile(target) && (!allows_hostiles || !istype(target, /mob/living/simple_animal/hostile/carp/cayenne))) || target.move_resist >= MOVE_FORCE_VERY_STRONG) //don't allow goliaths into pet carriers, but let cayenne in! to_chat(user, "You have a feeling you shouldn't keep this as a pet.") + return load_occupant(user, target) /obj/item/pet_carrier/relaymove(mob/living/user, direction) @@ -128,13 +130,18 @@ /obj/item/pet_carrier/container_resist(mob/living/user) //don't do the whole resist timer thing if it's open! if(open) - loc.visible_message("[user] climbs out of [src]!", \ - "[user] jumps out of [src]!") - remove_occupant(user) - return + if(alternate_escape_time > 0) + loc.visible_message("The [src] begins to shake!") + if(do_after(user, alternate_escape_time, target = user)) + loc.visible_message("[user] jumps out of [src]") + remove_occupant(user) + return + else //instant escape, different message + loc.visible_message("[user] climbs out of [src]!", \ + "[user] jumps out of [src]!") + remove_occupant(user) + return - user.changeNext_move(CLICK_CD_BREAKOUT) - user.last_special = world.time + CLICK_CD_BREAKOUT if(user.mob_size <= MOB_SIZE_SMALL) to_chat(user, "You begin to try escaping the [src] and start fumbling for the lock switch... (This will take some time.)") to_chat(loc, "You see [user] attempting to unlock the [src]!") @@ -147,7 +154,7 @@ update_icon() else loc.visible_message("[src] starts rattling as something pushes against the [entrance_name]!", null, null, null, user) - to_chat(user, "You start pushing out of [src]... (This will take about 20 seconds.)") + to_chat(user, "You start pushing out of [src]... (This will take about [escape_time/10] seconds.)") if(!do_after(user, escape_time, target = user) || open || !locked || !(user in occupants)) return loc.visible_message("[user] shoves out of [src]!", null, null, null, user) @@ -180,21 +187,22 @@ /obj/item/pet_carrier/proc/load_occupant(mob/living/user, mob/living/target) if(pet_carrier_full(src)) to_chat(user, "[src] is already carrying too much!") - return + return FALSE user.visible_message("[user] starts loading [target] into [src].", \ "You start loading [target] into [src]...", null, null, target) to_chat(target, "[user] starts loading you into [user.p_their()] [name]!") if(!do_mob(user, target, load_time)) - return + return FALSE if(target in occupants) - return + return FALSE if(pet_carrier_full(src)) //Run the checks again, just in case to_chat(user, "[src] is already carrying too much!") - return + return FALSE user.visible_message("[user] loads [target] into [src]!", \ "You load [target] into [src].", null, null, target) to_chat(target, "[user] loads you into [user.p_their()] [name]!") add_occupant(target) + return TRUE /obj/item/pet_carrier/proc/add_occupant(mob/living/occupant) if(occupant in occupants || !istype(occupant)) @@ -230,7 +238,8 @@ allows_hostiles = TRUE //can fit hostile creatures, with the move resist restrictions in place, this means they still cannot take things like legions/goliaths/etc regardless has_lock_sprites = FALSE //jar doesn't show the regular lock overlay custom_materials = list(/datum/material/glass = 1000, /datum/material/bluespace = 600) - escape_time = 10 //half the time of a bluespace bodybag + escape_time = 200 //equal to the time of a bluespace bodybag + alternate_escape_time = 100 var/datum/gas_mixture/occupant_gas_supply /obj/item/pet_carrier/bluespace/update_icon_state() @@ -271,10 +280,15 @@ REMOVE_TRAIT(occupant, TRAIT_NOBREATH, "bluespace_container_no_breath") REMOVE_TRAIT(occupant, TRAIT_RESISTHIGHPRESSURE, "bluespace_container_resist_high_pressure") REMOVE_TRAIT(occupant, TRAIT_RESISTLOWPRESSURE, "bluespace_container_resist_low_pressure") + name = initial(name) /obj/item/pet_carrier/bluespace/return_air() if(!occupant_gas_supply) occupant_gas_supply = new return occupant_gas_supply +/obj/item/pet_carrier/bluespace/load_occupant(mob/living/user, mob/living/target) + if(..()) + name = "[initial(name)] ([target])" + #undef pet_carrier_full diff --git a/code/game/objects/items/plushes.dm b/code/game/objects/items/plushes.dm index 00a9ff22f4..44205f4884 100644 --- a/code/game/objects/items/plushes.dm +++ b/code/game/objects/items/plushes.dm @@ -8,6 +8,7 @@ resistance_flags = FLAMMABLE var/list/squeak_override //Weighted list; If you want your plush to have different squeak sounds use this var/stuffed = TRUE //If the plushie has stuffing in it + var/unstuffable = FALSE //for plushies that can't be stuffed var/obj/item/grenade/grenade //You can remove the stuffing from a plushie and add a grenade to it for *nefarious uses* //--love ~<3-- gender = NEUTER @@ -174,6 +175,9 @@ /obj/item/toy/plush/attackby(obj/item/I, mob/living/user, params) if(I.get_sharpness()) if(!grenade) + if(unstuffable) + to_chat(user, "Nothing to do here.") + return if(!stuffed) to_chat(user, "You already murdered it!") return @@ -187,6 +191,13 @@ grenade = null return if(istype(I, /obj/item/grenade)) + if(unstuffable) + to_chat(user, "No... you should destroy it now!") + sleep(10) + if(QDELETED(user) || QDELETED(src)) + return + SEND_SOUND(user, 'sound/weapons/armbomb.ogg') + return if(stuffed) to_chat(user, "You need to remove some stuffing first!") return @@ -743,3 +754,14 @@ GLOBAL_LIST_INIT(valid_plushie_paths, valid_plushie_paths()) attack_verb = list("headbutt", "scritched", "bit") squeak_override = list('modular_citadel/sound/voice/nya.ogg' = 1) can_random_spawn = FALSE + + +/obj/item/toy/plush/hairball + name = "Hairball" + desc = "A bundle of undigested fibers and scales. Yuck." + icon_state = "Hairball" + unstuffable = TRUE + young = TRUE // Your own mouth-baby. + squeak_override = list('sound/misc/splort.ogg'=1) + attack_verb = list("sploshed", "splorted", "slushed") + can_random_spawn = FALSE diff --git a/code/game/objects/items/powerfist.dm b/code/game/objects/items/powerfist.dm index 52f4b3462e..2834b3b758 100644 --- a/code/game/objects/items/powerfist.dm +++ b/code/game/objects/items/powerfist.dm @@ -14,12 +14,11 @@ w_class = WEIGHT_CLASS_NORMAL armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 40) resistance_flags = FIRE_PROOF - click_delay = CLICK_CD_MELEE * 1.5 + attack_speed = CLICK_CD_MELEE * 1.5 var/fisto_setting = 1 var/gasperfist = 3 var/obj/item/tank/internals/tank = null //Tank used for the gauntlet's piston-ram. - /obj/item/melee/powerfist/examine(mob/user) . = ..() if(!in_range(user, src)) diff --git a/code/game/objects/items/robot/robot_upgrades.dm b/code/game/objects/items/robot/robot_upgrades.dm index 9fbedb33cd..c50dc6e316 100644 --- a/code/game/objects/items/robot/robot_upgrades.dm +++ b/code/game/objects/items/robot/robot_upgrades.dm @@ -241,9 +241,9 @@ for(var/obj/item/mop/cyborg/M in R.module.modules) R.module.remove_module(M, TRUE) - var/obj/item/mop/advanced/cyborg/A = new /obj/item/mop/advanced/cyborg(R.module) - R.module.basic_modules += A - R.module.add_module(A, FALSE, TRUE) + var/obj/item/mop/advanced/cyborg/A = new /obj/item/mop/advanced/cyborg(R.module) + R.module.basic_modules += A + R.module.add_module(A, FALSE, TRUE) /obj/item/borg/upgrade/amop/deactivate(mob/living/silicon/robot/R, user = usr) . = ..() diff --git a/code/game/objects/items/shooting_range.dm b/code/game/objects/items/shooting_range.dm index 7fd37053b1..ced0ee3160 100644 --- a/code/game/objects/items/shooting_range.dm +++ b/code/game/objects/items/shooting_range.dm @@ -31,10 +31,7 @@ to_chat(user, "You slice off [src]'s uneven chunks of aluminium and scorch marks.") return TRUE -/obj/item/target/attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) - . = ..() - if(.) - return +/obj/item/target/on_attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) if(pinnedLoc) pinnedLoc.removeTarget(user) diff --git a/code/game/objects/items/signs.dm b/code/game/objects/items/signs.dm index cf7373b700..67bc28b2ea 100644 --- a/code/game/objects/items/signs.dm +++ b/code/game/objects/items/signs.dm @@ -40,4 +40,3 @@ user.visible_message("[user] waves around \the \"[label]\" sign.") else user.visible_message("[user] waves around blank sign.") - user.changeNext_move(CLICK_CD_MELEE) \ No newline at end of file diff --git a/code/game/objects/items/stacks/bscrystal.dm b/code/game/objects/items/stacks/bscrystal.dm index c142db6530..3b4be37cee 100644 --- a/code/game/objects/items/stacks/bscrystal.dm +++ b/code/game/objects/items/stacks/bscrystal.dm @@ -74,8 +74,7 @@ /obj/item/stack/sheet/bluespace_crystal/attack_self(mob/user)// to prevent the construction menu from ever happening to_chat(user, "You cannot crush the polycrystal in-hand, try breaking one off.") -//ATTACK HAND IGNORING PARENT RETURN VALUE -/obj/item/stack/sheet/bluespace_crystal/attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) +/obj/item/stack/sheet/bluespace_crystal/on_attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) if(user.get_inactive_held_item() == src) if(zero_amount()) return diff --git a/code/game/objects/items/stacks/medical.dm b/code/game/objects/items/stacks/medical.dm index b358608ee4..1ceb525b8a 100644 --- a/code/game/objects/items/stacks/medical.dm +++ b/code/game/objects/items/stacks/medical.dm @@ -336,7 +336,7 @@ return . = ..() -/obj/item/stack/medical/mesh/attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) +/obj/item/stack/medical/mesh/on_attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) if(!is_open & user.get_inactive_held_item() == src) to_chat(user, "You need to open [src] first.") return diff --git a/code/game/objects/items/stacks/sheets/sheet_types.dm b/code/game/objects/items/stacks/sheets/sheet_types.dm index 0383c3f1ee..5f6341ea21 100644 --- a/code/game/objects/items/stacks/sheets/sheet_types.dm +++ b/code/game/objects/items/stacks/sheets/sheet_types.dm @@ -184,13 +184,13 @@ GLOBAL_LIST_INIT(plasteel_recipes, list ( \ new /datum/stack_recipe("trash cart", /obj/structure/closet/crate/trashcart, 5, time = 50, one_per_turf = 1, on_floor = 1), \ new /datum/stack_recipe("medical crate", /obj/structure/closet/crate/medical, 5, time = 50, one_per_turf = 1, on_floor = 1), \ new /datum/stack_recipe("freezer crate", /obj/structure/closet/crate/freezer, 8, time = 50, one_per_turf = 1, on_floor = 1), \ - new /datum/stack_recipe("blood bag crate", /obj/structure/closet/crate/freezer/blood, 8, time = 50, one_per_turf = 1, on_floor = 1), \ - new /datum/stack_recipe("surplus limbs crate", /obj/structure/closet/crate/freezer/surplus_limbs, 8, time = 50, one_per_turf = 1, on_floor = 1), \ + new /datum/stack_recipe("blood bag crate", /obj/structure/closet/crate/freezer/blood/fake, 8, time = 50, one_per_turf = 1, on_floor = 1), \ + new /datum/stack_recipe("surplus limbs crate", /obj/structure/closet/crate/freezer/surplus_limbs/fake, 8, time = 50, one_per_turf = 1, on_floor = 1), \ new /datum/stack_recipe("radiation containment crate", /obj/structure/closet/crate/radiation, 8, time = 50, one_per_turf = 1, on_floor = 1), \ new /datum/stack_recipe("hydroponics crate", /obj/structure/closet/crate/hydroponics, 5, time = 50, one_per_turf = 1, on_floor = 1), \ new /datum/stack_recipe("engineering crate", /obj/structure/closet/crate/engineering, 5, time = 50, one_per_turf = 1, on_floor = 1), \ new /datum/stack_recipe("eletrical crate", /obj/structure/closet/crate/engineering/electrical, 5, time = 50, one_per_turf = 1, on_floor = 1), \ - new /datum/stack_recipe("RCD storage crate", /obj/structure/closet/crate/rcd, 5, time = 50, one_per_turf = 1, on_floor = 1), \ + new /datum/stack_recipe("RCD storage crate", /obj/structure/closet/crate/rcd/fake, 5, time = 50, one_per_turf = 1, on_floor = 1), \ new /datum/stack_recipe("science crate", /obj/structure/closet/crate/science, 5, time = 50, one_per_turf = 1, on_floor = 1), \ )), \ new /datum/stack_recipe_list("airlock assemblies", list( \ @@ -247,6 +247,7 @@ GLOBAL_LIST_INIT(wood_recipes, list ( \ new/datum/stack_recipe("painting frame", /obj/item/wallframe/painting, 1, time = 10),\ new/datum/stack_recipe("wooden buckler", /obj/item/shield/riot/buckler, 20, time = 40), \ new/datum/stack_recipe("baseball bat", /obj/item/melee/baseball_bat, 5, time = 15),\ + new/datum/stack_recipe("training bokken", /obj/item/melee/bokken, 10, time = 15),\ null, \ new/datum/stack_recipe("wooden chair", /obj/structure/chair/wood/, 3, time = 10, one_per_turf = TRUE, on_floor = TRUE), \ new/datum/stack_recipe("winged wooden chair", /obj/structure/chair/wood/wings, 3, time = 10, one_per_turf = TRUE, on_floor = TRUE), \ diff --git a/code/game/objects/items/stacks/stack.dm b/code/game/objects/items/stacks/stack.dm index 5c88951654..3e2bb675fa 100644 --- a/code/game/objects/items/stacks/stack.dm +++ b/code/game/objects/items/stacks/stack.dm @@ -233,7 +233,7 @@ return T.PlaceOnTop(R.result_type, flags = CHANGETURF_INHERIT_AIR) else - O = new R.result_type(usr.drop_location()) + O = new R.result_type(get_turf(usr)) if(O) O.setDir(usr.dir) log_craft("[O] crafted by [usr] at [loc_name(O.loc)]") @@ -398,8 +398,7 @@ merge(AM) . = ..() -//ATTACK HAND IGNORING PARENT RETURN VALUE -/obj/item/stack/attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) +/obj/item/stack/on_attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) if(user.get_inactive_held_item() == src) if(zero_amount()) return diff --git a/code/game/objects/items/storage/belt.dm b/code/game/objects/items/storage/belt.dm index 52e8e9193f..83ac727c9e 100755 --- a/code/game/objects/items/storage/belt.dm +++ b/code/game/objects/items/storage/belt.dm @@ -446,10 +446,11 @@ /obj/item/storage/belt/durathread name = "durathread toolbelt" - desc = "A toolbelt made out of durathread, it seems resistant enough to hold even big tools like an RCD, it also has higher capacity." + desc = "A toolbelt made out of durathread, it seems robust enough to hold bigger tools like RCDs or RPDs, with enough pouches to hold more gear than a normal belt." icon_state = "webbing-durathread" item_state = "webbing-durathread" resistance_flags = FIRE_PROOF + rad_flags = RAD_PROTECT_CONTENTS | RAD_NO_CONTAMINATE //If normal belts get this, the upgraded version should too /obj/item/storage/belt/durathread/ComponentInitialize() . = ..() @@ -469,7 +470,7 @@ /obj/item/t_scanner, /obj/item/analyzer, /obj/item/geiger_counter, - /obj/item/extinguisher/mini, + /obj/item/extinguisher, /obj/item/radio, /obj/item/clothing/gloves, /obj/item/holosign_creator, @@ -490,7 +491,8 @@ desc = "A belt for holding grenades." icon_state = "grenadebeltnew" item_state = "security" - + rad_flags = RAD_PROTECT_CONTENTS | RAD_NO_CONTAMINATE + /obj/item/storage/belt/grenade/ComponentInitialize() . = ..() var/datum/component/storage/STR = GetComponent(/datum/component/storage) diff --git a/code/game/objects/items/storage/book.dm b/code/game/objects/items/storage/book.dm index 5d5f0eaa24..7532aacbfa 100644 --- a/code/game/objects/items/storage/book.dm +++ b/code/game/objects/items/storage/book.dm @@ -104,7 +104,7 @@ GLOBAL_LIST_INIT(bibleitemstates, list("bible", "koran", "scrapbook", "bible", SEND_SIGNAL(H, COMSIG_ADD_MOOD_EVENT, "blessing", /datum/mood_event/blessing) return 1 -/obj/item/storage/book/bible/attack(mob/living/M, mob/living/carbon/human/user, heal_mode = TRUE) +/obj/item/storage/book/bible/attack(mob/living/M, mob/living/user, attackchain_flags = NONE, damage_multiplier = 1, heal_mode = TRUE) if (!user.IsAdvancedToolUser()) to_chat(user, "You don't have the dexterity to do this!") @@ -238,11 +238,10 @@ GLOBAL_LIST_INIT(bibleitemstates, list("bible", "koran", "scrapbook", "bible", var/ownername = H.real_name desc += "The name [ownername] is written in blood inside the cover." -/obj/item/storage/book/bible/syndicate/attack(mob/living/M, mob/living/carbon/human/user, heal_mode = TRUE) - if (user.a_intent == INTENT_HELP) - return ..() - else - return ..(M,user,heal_mode = FALSE) +/obj/item/storage/book/bible/syndicate/attack(mob/living/M, mob/living/user, attackchain_flags = NONE, damage_multiplier = 1, heal_mode = TRUE) + if(user.a_intent != INTENT_HELP) + heal_mode = FALSE //args pass over + return ..() // to ..() /obj/item/storage/book/bible/syndicate/add_blood_DNA(list/blood_dna) return FALSE diff --git a/code/game/objects/items/storage/boxes.dm b/code/game/objects/items/storage/boxes.dm index 02ae867240..975621ead1 100644 --- a/code/game/objects/items/storage/boxes.dm +++ b/code/game/objects/items/storage/boxes.dm @@ -726,9 +726,9 @@ obj/item/storage/box/stingbangs return (BRUTELOSS) /obj/item/storage/box/hug/attack_self(mob/user) - ..() - user.changeNext_move(CLICK_CD_MELEE) - playsound(loc, "rustle", 50, 1, -5) + . = ..() + user.DelayNextAction(CLICK_CD_MELEE) + playsound(src, "rustle", 50, 1, -5) user.visible_message("[user] hugs \the [src].","You hug \the [src].") SEND_SIGNAL(user, COMSIG_ADD_MOOD_EVENT,"hugbox", /datum/mood_event/hugbox) @@ -1423,4 +1423,4 @@ obj/item/storage/box/stingbangs /obj/item/storage/box/strange_seeds_5pack/PopulateContents() for(var/i in 1 to 5) - new /obj/item/seeds/random(src) \ No newline at end of file + new /obj/item/seeds/random(src) diff --git a/code/game/objects/items/storage/dakis.dm b/code/game/objects/items/storage/dakis.dm index 1939593c8e..29f12df4c4 100644 --- a/code/game/objects/items/storage/dakis.dm +++ b/code/game/objects/items/storage/dakis.dm @@ -47,6 +47,6 @@ if(INTENT_HARM) user.visible_message("[user] punches the [name]!") playsound(src, 'sound/effects/shieldbash.ogg', 50, 1) - user.changeNext_move(CLICK_CD_MELEE) + user.DelayNextAction(CLICK_CD_MELEE) //////////////////////////// diff --git a/code/game/objects/items/storage/fancy.dm b/code/game/objects/items/storage/fancy.dm index 28f77b7676..cde6f5bd5a 100644 --- a/code/game/objects/items/storage/fancy.dm +++ b/code/game/objects/items/storage/fancy.dm @@ -168,13 +168,19 @@ . += "There's a coupon on the back of the pack! You can tear it off once it's empty." /obj/item/storage/fancy/cigarettes/AltClick(mob/living/carbon/user) + . = ..() if(!istype(user) || !user.canUseTopic(src, BE_CLOSE, ismonkey(user))) return - var/obj/item/clothing/mask/cigarette/W = locate(/obj/item/clothing/mask/cigarette) in contents + var/obj/item/lighter/L = locate() in contents + if(L) + SEND_SIGNAL(src, COMSIG_TRY_STORAGE_TAKE, L, user) + user.put_in_hands(L) + to_chat(user, "You take \a [L] out of the pack.") + return TRUE + var/obj/item/clothing/mask/cigarette/W = locate() in contents if(W && contents.len > 0) SEND_SIGNAL(src, COMSIG_TRY_STORAGE_TAKE, W, user) user.put_in_hands(W) - contents -= W to_chat(user, "You take \a [W] out of the pack.") else to_chat(user, "There are no [icon_type]s left in the pack.") diff --git a/code/game/objects/items/storage/secure.dm b/code/game/objects/items/storage/secure.dm index 6061feb893..4e6a0b3463 100644 --- a/code/game/objects/items/storage/secure.dm +++ b/code/game/objects/items/storage/secure.dm @@ -205,10 +205,7 @@ new /obj/item/paper(src) new /obj/item/pen(src) -/obj/item/storage/secure/safe/attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) - . = ..() - if(.) - return +/obj/item/storage/secure/safe/on_attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) return attack_self(user) /obj/item/storage/secure/safe/HoS diff --git a/code/game/objects/items/stunbaton.dm b/code/game/objects/items/stunbaton.dm index fa0c9ba693..1a84b85a1a 100644 --- a/code/game/objects/items/stunbaton.dm +++ b/code/game/objects/items/stunbaton.dm @@ -14,6 +14,7 @@ w_class = WEIGHT_CLASS_NORMAL attack_verb = list("beaten") armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 50, "bio" = 0, "rad" = 0, "fire" = 80, "acid" = 80) + attack_speed = CLICK_CD_MELEE var/stamforce = 35 var/turned_on = FALSE @@ -144,8 +145,9 @@ return ..() /obj/item/melee/baton/alt_pre_attack(atom/A, mob/living/user, params) + if(!user.CheckActionCooldown(CLICK_CD_MELEE)) + return . = common_baton_melee(A, user, TRUE) //return true (attackchain interrupt) if this also returns true. no harm-disarming. - user.changeNext_move(CLICK_CD_MELEE) //return TRUE to interrupt attack chain. /obj/item/melee/baton/proc/common_baton_melee(mob/M, mob/living/user, disarming = FALSE) @@ -156,6 +158,7 @@ if(IS_STAMCRIT(user)) //CIT CHANGE - makes it impossible to baton in stamina softcrit to_chat(user, "You're too exhausted to use [src] properly.") return TRUE + user.DelayNextAction() if(ishuman(M)) var/mob/living/carbon/human/L = M if(check_martial_counter(L, user)) diff --git a/code/game/objects/items/tanks/watertank.dm b/code/game/objects/items/tanks/watertank.dm index 0a7eefb786..16a91b6358 100644 --- a/code/game/objects/items/tanks/watertank.dm +++ b/code/game/objects/items/tanks/watertank.dm @@ -72,7 +72,7 @@ QDEL_NULL(noz) return ..() -/obj/item/watertank/attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) +/obj/item/watertank/on_attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) if (user.get_item_by_slot(user.getBackSlot()) == src) toggle_mister(user) else diff --git a/code/game/objects/items/toys.dm b/code/game/objects/items/toys.dm index fe2e0df2eb..e69bb1ffa0 100644 --- a/code/game/objects/items/toys.dm +++ b/code/game/objects/items/toys.dm @@ -574,10 +574,7 @@ else . = ..() -/obj/item/toy/prize/attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) - . = ..() - if(.) - return +/obj/item/toy/prize/on_attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) if(loc == user) attack_self(user) @@ -811,9 +808,8 @@ cards += "Ace of Clubs" cards += "Ace of Diamonds" -//ATTACK HAND IGNORING PARENT RETURN VALUE //ATTACK HAND NOT CALLING PARENT -/obj/item/toy/cards/deck/attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) +/obj/item/toy/cards/deck/on_attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) draw_card(user) /obj/item/toy/cards/deck/proc/draw_card(mob/user) diff --git a/code/game/objects/items/weaponry.dm b/code/game/objects/items/weaponry.dm index 56737cd1a9..e21c4aaffa 100644 --- a/code/game/objects/items/weaponry.dm +++ b/code/game/objects/items/weaponry.dm @@ -249,6 +249,121 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301 playsound(src, 'sound/weapons/bladeslice.ogg', 50, 1) return(BRUTELOSS) +/obj/item/melee/bokken // parrying stick + name = "bokken" + desc = "A space-Japanese training sword made of wood and shaped like a katana." + icon_state = "bokken" + item_state = "bokken" + lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi' + righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi' + slot_flags = ITEM_SLOT_BELT | ITEM_SLOT_BACK + w_class = WEIGHT_CLASS_BULKY + force = 9 + throwforce = 10 + damtype = STAMINA + attack_verb = list("whacked", "smacked", "struck") + total_mass = TOTAL_MASS_MEDIEVAL_WEAPON + hitsound = 'sound/weapons/grenadelaunch.ogg' // no good wood thunk sounds + var/harm = FALSE // TRUE = brute, FALSE = stam + var/reinforced = FALSE + var/burnt = FALSE + var/burned_in // text you burned in (with a welder) + var/quick_parry = FALSE // false = default parry, true = really small parry window + item_flags = ITEM_CAN_PARRY + block_parry_data = /datum/block_parry_data/bokken + bare_wound_bonus = 0 + wound_bonus = 0 + +/datum/block_parry_data/bokken // fucked up parry data, emphasizing quicker, shorter parries + parry_stamina_cost = 8 // be wise about when you parry, though, else you won't be able to fight enough to make it count + parry_time_windup = 0 + parry_time_active = 10 // small parry window + parry_time_spindown = 0 + // parry_flags = PARRY_DEFAULT_HANDLE_FEEDBACK // bokken users can no longer strike while parrying + parry_time_perfect = 1.5 + parry_time_perfect_leeway = 1 + parry_imperfect_falloff_percent = 7.5 + parry_efficiency_to_counterattack = 100 + parry_efficiency_considered_successful = 65 // VERY generous + parry_efficiency_perfect = 120 + parry_efficiency_perfect_override = list( + TEXT_ATTACK_TYPE_PROJECTILE = 30, + ) + parry_failed_stagger_duration = 3 SECONDS + parry_data = list(PARRY_COUNTERATTACK_MELEE_ATTACK_CHAIN = 2.5) // 7*2.5 = 17.5, 8*2.5 = 20, 9*2.5 = 22.5, 10*2.5 = 25 + +/datum/block_parry_data/bokken/quick_parry // emphasizing REALLY SHORT PARRIES + parry_stamina_cost = 6 // still more costly than most parries, but less than a full bokken parry + parry_time_active = 5 // REALLY small parry window + parry_time_perfect = 2.5 // however... + parry_time_perfect_leeway = 2.5 // the entire time, the parry is perfect + parry_failed_stagger_duration = 1 SECONDS + parry_failed_clickcd_duration = 1 SECONDS // more forgiving punishments for missed parries + // still, don't fucking miss your parries or you're down stamina and staggered to shit + +/obj/item/melee/bokken/Initialize() + . = ..() + AddElement(/datum/element/sword_point) + +/obj/item/melee/bokken/attack_self(mob/user) + harm = !harm + if(harm) + force -= 2 + damtype = BRUTE + attack_verb = list("bashed", "smashed", "attacked") + bare_wound_bonus = 15 // having your leg smacked by a wooden stick is probably not great for it if it's naked + wound_bonus = 0 + else + force += 2 + damtype = STAMINA + attack_verb = list("whacked", "smacked", "struck") + bare_wound_bonus = 0 + wound_bonus = 0 + to_chat(user, "[src] is now [harm ? "harmful" : "not quite as harmful"].") + +/obj/item/melee/bokken/AltClick(mob/user) + . = ..() + quick_parry = !quick_parry + if(quick_parry) + block_parry_data = /datum/block_parry_data/bokken/quick_parry + else + block_parry_data = /datum/block_parry_data/bokken + to_chat(user, "[src] is now [quick_parry ? "emphasizing shorter parries, forcing you to riposte or be staggered" : "emphasizing longer parries, with a shorter window to riposte but more forgiving parries"].") + +/obj/item/melee/bokken/attackby(obj/item/I, mob/living/user, params) + if(istype(I, /obj/item/pen)) + var/new_name = stripped_input(user, "What do you wish to name [src]?", "New Name", "bokken", 30) + if(new_name) + name = new_name + if(I.tool_behaviour == TOOL_WELDER) + var/new_burn = stripped_input(user, "What do you wish to burn into [src]?", "Burnt Inscription","", 140) + if(new_burn) + burned_in = new_burn + if(!burnt) + icon_state += "_burnt" + item_state += "_burnt" + burnt = TRUE + update_icon() + update_icon_state() + if(istype(I, /obj/item/stack/rods)) + var/obj/item/stack/rods/R = I + if(!reinforced) + if(R.use(1)) + force++ + reinforced = TRUE + to_chat(user, "You slide a metal rod into [src]\'s hilt. It feels a little heftier in your hands.") + else + to_chat(user, "[src] already has a weight slid into the hilt.") + +/obj/item/melee/bokken/examine(mob/user) + . = ..() + if(quick_parry) + . += " [src] is gripped in a way to emphasize quicker parries." + if(reinforced) + . += " There's a metal rod shoved into the base." + if(burnt) + . += " Burned into the \"blade\" is [burned_in]." + /obj/item/wirerod name = "wired rod" desc = "A rod with some wire wrapped around the top. It'd be easy to attach something to the top bit." diff --git a/code/game/objects/obj_defense.dm b/code/game/objects/obj_defense.dm index 1203c5a1df..14017ffb2d 100644 --- a/code/game/objects/obj_defense.dm +++ b/code/game/objects/obj_defense.dm @@ -105,15 +105,19 @@ /obj/proc/attack_generic(mob/user, damage_amount = 0, damage_type = BRUTE, damage_flag = 0, sound_effect = 1, armor_penetration = 0) //used by attack_alien, attack_animal, and attack_slime if(SEND_SIGNAL(src, COMSIG_OBJ_ATTACK_GENERIC, user, damage_amount, damage_type, damage_flag, sound_effect, armor_penetration) & COMPONENT_STOP_GENERIC_ATTACK) return FALSE + if(!user.CheckActionCooldown(CLICK_CD_MELEE)) + return user.do_attack_animation(src) - user.changeNext_move(CLICK_CD_MELEE) - return take_damage(damage_amount, damage_type, damage_flag, sound_effect, get_dir(src, user), armor_penetration) + . = take_damage(damage_amount, damage_type, damage_flag, sound_effect, get_dir(src, user), armor_penetration) + user.DelayNextAction() /obj/attack_alien(mob/living/carbon/alien/humanoid/user) if(attack_generic(user, 60, BRUTE, "melee", 0)) playsound(src.loc, 'sound/weapons/slash.ogg', 100, 1) /obj/attack_animal(mob/living/simple_animal/M) + if(!M.CheckActionCooldown(CLICK_CD_MELEE)) + return if(!M.melee_damage_upper && !M.obj_damage) M.emote("custom", message = "[M.friendly_verb_continuous] [src].") return 0 diff --git a/code/game/objects/structures.dm b/code/game/objects/structures.dm index cce4955210..39f2d276a1 100644 --- a/code/game/objects/structures.dm +++ b/code/game/objects/structures.dm @@ -28,12 +28,10 @@ queue_smooth_neighbors(src) return ..() -/obj/structure/attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) +/obj/structure/on_attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) . = ..() - if(.) - return if(structureclimber && structureclimber != user) - user.changeNext_move(CLICK_CD_MELEE) + user.DelayNextAction(CLICK_CD_MELEE) user.do_attack_animation(src) structureclimber.DefaultCombatKnockdown(40) structureclimber.visible_message("[structureclimber] has been knocked off [src].", "You're knocked off [src]!", "You see [structureclimber] get knocked off [src].") diff --git a/code/game/objects/structures/aliens.dm b/code/game/objects/structures/aliens.dm index a6cd8df746..ce11daec54 100644 --- a/code/game/objects/structures/aliens.dm +++ b/code/game/objects/structures/aliens.dm @@ -249,7 +249,7 @@ /obj/structure/alien/egg/attack_alien(mob/living/carbon/alien/user) return attack_hand(user) -/obj/structure/alien/egg/attack_hand(mob/living/user, act_intent = user.a_intent, unarmed_attack_flags) +/obj/structure/alien/egg/on_attack_hand(mob/living/user, act_intent = user.a_intent, unarmed_attack_flags) . = ..() if(.) return @@ -269,8 +269,7 @@ return else to_chat(user, "It feels slimy.") - user.changeNext_move(CLICK_CD_MELEE) - + user.DelayNextAction(CLICK_CD_MELEE) /obj/structure/alien/egg/proc/Grow() status = GROWN diff --git a/code/game/objects/structures/barsigns.dm b/code/game/objects/structures/barsigns.dm index 7ea678cae4..905888c904 100644 --- a/code/game/objects/structures/barsigns.dm +++ b/code/game/objects/structures/barsigns.dm @@ -52,10 +52,7 @@ /obj/structure/sign/barsign/attack_ai(mob/user) return attack_hand(user) -/obj/structure/sign/barsign/attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) - . = ..() - if(.) - return +/obj/structure/sign/barsign/on_attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) if(!allowed(user)) to_chat(user, "Access denied.") return diff --git a/code/game/objects/structures/bedsheet_bin.dm b/code/game/objects/structures/bedsheet_bin.dm index e45ddf650c..45cac650b8 100644 --- a/code/game/objects/structures/bedsheet_bin.dm +++ b/code/game/objects/structures/bedsheet_bin.dm @@ -311,10 +311,7 @@ LINEN BINS /obj/structure/bedsheetbin/attack_paw(mob/user) return attack_hand(user) -/obj/structure/bedsheetbin/attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) - . = ..() - if(.) - return +/obj/structure/bedsheetbin/on_attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) if(user.incapacitated()) return if(amount >= 1) diff --git a/code/game/objects/structures/crates_lockers/closets.dm b/code/game/objects/structures/crates_lockers/closets.dm index 4b9251d8ec..043232e9e3 100644 --- a/code/game/objects/structures/crates_lockers/closets.dm +++ b/code/game/objects/structures/crates_lockers/closets.dm @@ -37,12 +37,13 @@ var/lock_in_use = FALSE //Someone is doing some stuff with the lock here, better not proceed further var/eigen_teleport = FALSE //If the closet leads to Mr Tumnus. var/obj/structure/closet/eigen_target //Where you go to. - + var/should_populate_contents = TRUE /obj/structure/closet/Initialize(mapload) . = ..() update_icon() - PopulateContents() + if(should_populate_contents) + PopulateContents() if(mapload && !opened) // if closed, any item at the crate's loc is put in the contents addtimer(CALLBACK(src, .proc/take_contents), 0) if(secure) @@ -458,10 +459,7 @@ return container_resist(user) -/obj/structure/closet/attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) - . = ..() - if(.) - return +/obj/structure/closet/on_attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) if(user.lying && get_dist(src, user) > 0) return @@ -506,8 +504,6 @@ if(opened) return if(ismovable(loc)) - user.changeNext_move(CLICK_CD_BREAKOUT) - user.last_special = world.time + CLICK_CD_BREAKOUT var/atom/movable/AM = loc AM.relay_container_resist(user, src) return @@ -516,8 +512,6 @@ return //okay, so the closet is either welded or locked... resist!!! - user.changeNext_move(CLICK_CD_BREAKOUT) - user.last_special = world.time + CLICK_CD_BREAKOUT user.visible_message("[src] begins to shake violently!", \ "You lean on the back of [src] and start pushing the door open... (this will take about [DisplayTimeText(breakout_time)].)", \ "You hear banging from [src].") diff --git a/code/game/objects/structures/crates_lockers/closets/genpop.dm b/code/game/objects/structures/crates_lockers/closets/genpop.dm index 04c2f37b0f..7be12a4819 100644 --- a/code/game/objects/structures/crates_lockers/closets/genpop.dm +++ b/code/game/objects/structures/crates_lockers/closets/genpop.dm @@ -91,7 +91,7 @@ locked = TRUE return ..() -/obj/structure/closet/secure_closet/genpop/attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) +/obj/structure/closet/secure_closet/genpop/on_attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) if(user.lying && get_dist(src, user) > 0) return diff --git a/code/game/objects/structures/crates_lockers/crates.dm b/code/game/objects/structures/crates_lockers/crates.dm index 99bce305f8..ee202f9504 100644 --- a/code/game/objects/structures/crates_lockers/crates.dm +++ b/code/game/objects/structures/crates_lockers/crates.dm @@ -41,10 +41,8 @@ if(manifest) . += "manifest" -/obj/structure/closet/crate/attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) +/obj/structure/closet/crate/on_attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) . = ..() - if(.) - return if(manifest) tear_manifest(user) @@ -144,6 +142,9 @@ desc = "A freezer containing packs of blood." icon_state = "surgery" +/obj/structure/closet/crate/freezer/blood/fake + should_populate_contents = FALSE + /obj/structure/closet/crate/freezer/blood/PopulateContents() . = ..() new /obj/item/reagent_containers/blood(src) @@ -164,6 +165,9 @@ name = "surplus prosthetic limbs" desc = "A crate containing an assortment of cheap prosthetic limbs." +/obj/structure/closet/crate/freezer/surplus_limbs/fake + should_populate_contents = FALSE + /obj/structure/closet/crate/freezer/surplus_limbs/PopulateContents() . = ..() new /obj/item/bodypart/l_arm/robot/surplus(src) @@ -198,6 +202,9 @@ name = "\improper RCD crate" icon_state = "engi_crate" +/obj/structure/closet/crate/rcd/fake + should_populate_contents = FALSE + /obj/structure/closet/crate/rcd/PopulateContents() ..() for(var/i in 1 to 4) diff --git a/code/game/objects/structures/crates_lockers/crates/large.dm b/code/game/objects/structures/crates_lockers/crates/large.dm index d8c2f7f91c..3cee96e435 100644 --- a/code/game/objects/structures/crates_lockers/crates/large.dm +++ b/code/game/objects/structures/crates_lockers/crates/large.dm @@ -8,7 +8,7 @@ delivery_icon = "deliverybox" integrity_failure = 0 //Makes the crate break when integrity reaches 0, instead of opening and becoming an invisible sprite. -/obj/structure/closet/crate/large/attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) +/obj/structure/closet/crate/large/on_attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) add_fingerprint(user) if(manifest) tear_manifest(user) diff --git a/code/game/objects/structures/displaycase.dm b/code/game/objects/structures/displaycase.dm index 4db889b392..f0384ca96a 100644 --- a/code/game/objects/structures/displaycase.dm +++ b/code/game/objects/structures/displaycase.dm @@ -9,6 +9,8 @@ armor = list("melee" = 30, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 10, "bio" = 0, "rad" = 0, "fire" = 70, "acid" = 100) max_integrity = 200 integrity_failure = 0.25 + attack_hand_speed = CLICK_CD_MELEE + attack_hand_is_action = TRUE var/obj/item/showpiece = null var/alert = TRUE var/open = FALSE @@ -157,11 +159,7 @@ /obj/structure/displaycase/attack_paw(mob/user) return attack_hand(user) -/obj/structure/displaycase/attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) - . = ..() - if(.) - return - user.changeNext_move(CLICK_CD_MELEE) +/obj/structure/displaycase/on_attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) if (showpiece && (broken || open)) to_chat(user, "You deactivate the hover field built into the case.") log_combat(user, src, "deactivates the hover field of") diff --git a/code/game/objects/structures/divine.dm b/code/game/objects/structures/divine.dm index 5afe97f669..f64397df09 100644 --- a/code/game/objects/structures/divine.dm +++ b/code/game/objects/structures/divine.dm @@ -7,7 +7,7 @@ density = FALSE can_buckle = 1 -/obj/structure/sacrificealtar/attack_hand(mob/living/user, act_intent = user.a_intent, unarmed_attack_flags) +/obj/structure/sacrificealtar/on_attack_hand(mob/living/user, act_intent = user.a_intent, unarmed_attack_flags) . = ..() if(.) return @@ -30,7 +30,7 @@ var/time_between_uses = 1800 var/last_process = 0 -/obj/structure/healingfountain/attack_hand(mob/living/user, act_intent = user.a_intent, unarmed_attack_flags) +/obj/structure/healingfountain/on_attack_hand(mob/living/user, act_intent = user.a_intent, unarmed_attack_flags) . = ..() if(.) return diff --git a/code/game/objects/structures/dresser.dm b/code/game/objects/structures/dresser.dm index 9279bf1d73..7fdec9b3d9 100644 --- a/code/game/objects/structures/dresser.dm +++ b/code/game/objects/structures/dresser.dm @@ -19,7 +19,7 @@ new /obj/item/stack/sheet/mineral/wood(drop_location(), 10) qdel(src) -/obj/structure/dresser/attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) +/obj/structure/dresser/on_attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) . = ..() if(. || !ishuman(user) || !user.canUseTopic(src, BE_CLOSE, FALSE, NO_TK)) return diff --git a/code/game/objects/structures/extinguisher.dm b/code/game/objects/structures/extinguisher.dm index a279070e69..84926ccfb0 100644 --- a/code/game/objects/structures/extinguisher.dm +++ b/code/game/objects/structures/extinguisher.dm @@ -69,10 +69,7 @@ return ..() -/obj/structure/extinguisher_cabinet/attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) - . = ..() - if(.) - return +/obj/structure/extinguisher_cabinet/on_attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) if(iscyborg(user) || isalien(user)) return if(stored_extinguisher) diff --git a/code/game/objects/structures/false_walls.dm b/code/game/objects/structures/false_walls.dm index eaa6e574cd..b654f4f5c0 100644 --- a/code/game/objects/structures/false_walls.dm +++ b/code/game/objects/structures/false_walls.dm @@ -41,7 +41,7 @@ new /obj/structure/falsewall/brass(loc) qdel(src) -/obj/structure/falsewall/attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) +/obj/structure/falsewall/on_attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) if(opening) return . = ..() @@ -180,7 +180,7 @@ radiate() return ..() -/obj/structure/falsewall/uranium/attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) +/obj/structure/falsewall/uranium/on_attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) radiate() . = ..() diff --git a/code/game/objects/structures/femur_breaker.dm b/code/game/objects/structures/femur_breaker.dm index 1fa21d119e..2ac56ec4fb 100644 --- a/code/game/objects/structures/femur_breaker.dm +++ b/code/game/objects/structures/femur_breaker.dm @@ -32,7 +32,7 @@ if (LAZYLEN(buckled_mobs)) . += "Someone appears to be strapped in. You can help them unbuckle, or activate the femur breaker." -/obj/structure/femur_breaker/attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) +/obj/structure/femur_breaker/on_attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) add_fingerprint(user) // Currently being used diff --git a/code/game/objects/structures/fence.dm b/code/game/objects/structures/fence.dm index 5803fb1306..f90161f587 100644 --- a/code/game/objects/structures/fence.dm +++ b/code/game/objects/structures/fence.dm @@ -120,7 +120,7 @@ open = TRUE density = TRUE -/obj/structure/fence/door/attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) +/obj/structure/fence/door/on_attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) if(can_open(user)) toggle(user) diff --git a/code/game/objects/structures/fireaxe.dm b/code/game/objects/structures/fireaxe.dm index de88372b1e..412730910f 100644 --- a/code/game/objects/structures/fireaxe.dm +++ b/code/game/objects/structures/fireaxe.dm @@ -105,10 +105,7 @@ fireaxe = null qdel(src) -/obj/structure/fireaxecabinet/attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) - . = ..() - if(.) - return +/obj/structure/fireaxecabinet/on_attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) if(open || broken) if(fireaxe) user.put_in_hands(fireaxe) diff --git a/code/game/objects/structures/flora.dm b/code/game/objects/structures/flora.dm index 6d72bb58b2..b587e57c3a 100644 --- a/code/game/objects/structures/flora.dm +++ b/code/game/objects/structures/flora.dm @@ -65,7 +65,7 @@ var/gift_type = /obj/item/a_gift/anything var/list/ckeys_that_took = list() -/obj/structure/flora/tree/pine/xmas/presents/attack_hand(mob/living/user, act_intent = user.a_intent, unarmed_attack_flags) +/obj/structure/flora/tree/pine/xmas/presents/on_attack_hand(mob/living/user, act_intent = user.a_intent, unarmed_attack_flags) . = ..() if(.) return diff --git a/code/game/objects/structures/fluff.dm b/code/game/objects/structures/fluff.dm index 1dcda6eb50..bd7ddb36d5 100644 --- a/code/game/objects/structures/fluff.dm +++ b/code/game/objects/structures/fluff.dm @@ -110,7 +110,7 @@ desc = "Space Jesus is my copilot." icon_state = "driverseat" -/obj/structure/fluff/bus/passable/seat/driver/attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) +/obj/structure/fluff/bus/passable/seat/driver/on_attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) playsound(src, 'sound/items/carhorn.ogg', 50, 1) . = ..() diff --git a/code/game/objects/structures/ghost_role_spawners.dm b/code/game/objects/structures/ghost_role_spawners.dm index 03bcdde57c..4d500837d9 100644 --- a/code/game/objects/structures/ghost_role_spawners.dm +++ b/code/game/objects/structures/ghost_role_spawners.dm @@ -186,10 +186,7 @@ else new_spawn.mind.assigned_role = "Free Golem" -/obj/effect/mob_spawn/human/golem/attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) - . = ..() - if(.) - return +/obj/effect/mob_spawn/human/golem/on_attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) if(isgolem(user) && can_transfer) var/transfer_choice = alert("Transfer your soul to [src]? (Warning, your old body will die!)",,"Yes","No") if(transfer_choice != "Yes" || QDELETED(src) || uses <= 0 || !user.canUseTopic(src, BE_CLOSE, NO_DEXTERY, NO_TK)) diff --git a/code/game/objects/structures/grille.dm b/code/game/objects/structures/grille.dm index efd1b486d0..36e4f825da 100644 --- a/code/game/objects/structures/grille.dm +++ b/code/game/objects/structures/grille.dm @@ -10,6 +10,8 @@ layer = BELOW_OBJ_LAYER armor = list("melee" = 50, "bullet" = 70, "laser" = 70, "energy" = 100, "bomb" = 10, "bio" = 100, "rad" = 100, "fire" = 0, "acid" = 0) max_integrity = 50 + attack_hand_is_action = TRUE + attack_hand_speed = 8 integrity_failure = 0.4 var/rods_type = /obj/item/stack/rods var/rods_amount = 2 @@ -99,11 +101,10 @@ ..(user, 1) return TRUE -/obj/structure/grille/attack_hand(mob/living/user, act_intent = user.a_intent, unarmed_attack_flags) +/obj/structure/grille/on_attack_hand(mob/living/user, act_intent = user.a_intent, unarmed_attack_flags) . = ..() if(.) return - user.changeNext_move(CLICK_CD_MELEE) user.do_attack_animation(src, ATTACK_EFFECT_KICK) user.visible_message("[user] hits [src].", null, null, COMBAT_MESSAGE_RANGE) log_combat(user, src, "hit") @@ -111,8 +112,9 @@ take_damage(rand(5,10), BRUTE, "melee", 1) /obj/structure/grille/attack_alien(mob/living/user) + if(!user.CheckActionCooldown(CLICK_CD_MELEE)) + return user.do_attack_animation(src) - user.changeNext_move(CLICK_CD_MELEE) user.visible_message("[user] mangles [src].", null, null, COMBAT_MESSAGE_RANGE) if(!shock(user, 70)) take_damage(20, BRUTE, "melee", 1) @@ -134,7 +136,7 @@ . = . || (mover.pass_flags & PASSGRILLE) /obj/structure/grille/attackby(obj/item/W, mob/user, params) - user.changeNext_move(CLICK_CD_MELEE) + user.DelayNextAction(CLICK_CD_MELEE) add_fingerprint(user) if(istype(W, /obj/item/wirecutters)) if(!shock(user, 100)) diff --git a/code/game/objects/structures/guillotine.dm b/code/game/objects/structures/guillotine.dm index acec52a583..4773c07657 100644 --- a/code/game/objects/structures/guillotine.dm +++ b/code/game/objects/structures/guillotine.dm @@ -51,7 +51,7 @@ if (LAZYLEN(buckled_mobs)) . += "Someone appears to be strapped in. You can help them out, or you can harm them by activating the guillotine." -/obj/structure/guillotine/attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) +/obj/structure/guillotine/on_attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) add_fingerprint(user) // Currently being used by something diff --git a/code/game/objects/structures/guncase.dm b/code/game/objects/structures/guncase.dm index 1cab600fb1..e7ff9d4abf 100644 --- a/code/game/objects/structures/guncase.dm +++ b/code/game/objects/structures/guncase.dm @@ -53,10 +53,7 @@ else return ..() -/obj/structure/guncase/attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) - . = ..() - if(.) - return +/obj/structure/guncase/on_attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) if(iscyborg(user) || isalien(user)) return if(contents.len && open) diff --git a/code/game/objects/structures/headpike.dm b/code/game/objects/structures/headpike.dm index 7a67387a8e..6aed11701d 100644 --- a/code/game/objects/structures/headpike.dm +++ b/code/game/objects/structures/headpike.dm @@ -37,10 +37,7 @@ MA.pixel_y = 12 . += H -/obj/structure/headpike/attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) - . = ..() - if(.) - return +/obj/structure/headpike/on_attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) to_chat(user, "You take down [src].") if(victim) victim.forceMove(drop_location()) diff --git a/code/game/objects/structures/holosign.dm b/code/game/objects/structures/holosign.dm index 844c2ff8fd..dc5355e9d8 100644 --- a/code/game/objects/structures/holosign.dm +++ b/code/game/objects/structures/holosign.dm @@ -25,12 +25,12 @@ projector = null return ..() -/obj/structure/holosign/attack_hand(mob/living/user, act_intent = user.a_intent, unarmed_attack_flags) +/obj/structure/holosign/on_attack_hand(mob/living/user, act_intent = user.a_intent, unarmed_attack_flags) . = ..() if(.) return user.do_attack_animation(src, ATTACK_EFFECT_PUNCH) - user.changeNext_move(CLICK_CD_MELEE) + user.DelayNextAction(CLICK_CD_MELEE) take_damage(5 , BRUTE, "melee", 1) /obj/structure/holosign/play_attack_sound(damage_amount, damage_type = BRUTE, damage_flag = 0) @@ -162,7 +162,7 @@ return TRUE //nice or benign diseases! return TRUE -/obj/structure/holosign/barrier/medical/attack_hand(mob/living/user, act_intent = user.a_intent, unarmed_attack_flags) +/obj/structure/holosign/barrier/medical/on_attack_hand(mob/living/user, act_intent = user.a_intent, unarmed_attack_flags) if(CanPass(user) && user.a_intent == INTENT_HELP) force_allaccess = !force_allaccess to_chat(user, "You [force_allaccess ? "deactivate" : "activate"] the biometric scanners.") //warning spans because you can make the station sick! @@ -182,7 +182,7 @@ /obj/structure/holosign/barrier/cyborg/hacked/proc/cooldown() shockcd = FALSE -/obj/structure/holosign/barrier/cyborg/hacked/attack_hand(mob/living/user, act_intent = user.a_intent, unarmed_attack_flags) +/obj/structure/holosign/barrier/cyborg/hacked/on_attack_hand(mob/living/user, act_intent = user.a_intent, unarmed_attack_flags) . = ..() if(.) return diff --git a/code/game/objects/structures/janicart.dm b/code/game/objects/structures/janicart.dm index 72487ddc16..10a9f2afd4 100644 --- a/code/game/objects/structures/janicart.dm +++ b/code/game/objects/structures/janicart.dm @@ -91,10 +91,7 @@ else return ..() -/obj/structure/janitorialcart/attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) - . = ..() - if(.) - return +/obj/structure/janitorialcart/on_attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) var/list/items = list() if(mybag) diff --git a/code/game/objects/structures/kitchen_spike.dm b/code/game/objects/structures/kitchen_spike.dm index 5706f79192..a23dd3a21e 100644 --- a/code/game/objects/structures/kitchen_spike.dm +++ b/code/game/objects/structures/kitchen_spike.dm @@ -60,8 +60,7 @@ deconstruct(TRUE) return TRUE -//ATTACK HAND IGNORING PARENT RETURN VALUE -/obj/structure/kitchenspike/attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) +/obj/structure/kitchenspike/on_attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) if(VIABLE_MOB_CHECK(user.pulling) && user.a_intent == INTENT_GRAB && !has_buckled_mobs()) var/mob/living/L = user.pulling if(HAS_TRAIT(user, TRAIT_PACIFISM) && L.stat != DEAD) diff --git a/code/game/objects/structures/ladders.dm b/code/game/objects/structures/ladders.dm index 6037183cc9..e844461952 100644 --- a/code/game/objects/structures/ladders.dm +++ b/code/game/objects/structures/ladders.dm @@ -122,10 +122,7 @@ return FALSE return TRUE -/obj/structure/ladder/attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) - . = ..() - if(.) - return +/obj/structure/ladder/on_attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) use(user) /obj/structure/ladder/attack_paw(mob/user) diff --git a/code/game/objects/structures/life_candle.dm b/code/game/objects/structures/life_candle.dm index 5dc0bcdab5..52986a44d7 100644 --- a/code/game/objects/structures/life_candle.dm +++ b/code/game/objects/structures/life_candle.dm @@ -24,10 +24,7 @@ var/respawn_time = 50 var/respawn_sound = 'sound/magic/staff_animation.ogg' -/obj/structure/life_candle/attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) - . = ..() - if(.) - return +/obj/structure/life_candle/on_attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) if(!user.mind) return if(user.mind in linked_minds) diff --git a/code/game/objects/structures/manned_turret.dm b/code/game/objects/structures/manned_turret.dm index 79489e4ae6..e8fbafa42b 100644 --- a/code/game/objects/structures/manned_turret.dm +++ b/code/game/objects/structures/manned_turret.dm @@ -198,10 +198,6 @@ /obj/item/gun_control/CanItemAutoclick() return TRUE -/obj/item/gun_control/attack_obj(obj/O, mob/living/user) - user.changeNext_move(CLICK_CD_MELEE) - O.attacked_by(src, user) - /obj/item/gun_control/attack(mob/living/M, mob/living/user) M.lastattacker = user.real_name M.lastattackerckey = user.ckey diff --git a/code/game/objects/structures/mineral_doors.dm b/code/game/objects/structures/mineral_doors.dm index cca41b4e11..b2f1de8750 100644 --- a/code/game/objects/structures/mineral_doors.dm +++ b/code/game/objects/structures/mineral_doors.dm @@ -50,10 +50,7 @@ /obj/structure/mineral_door/attack_paw(mob/user) return attack_hand(user) -/obj/structure/mineral_door/attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) - . = ..() - if(.) - return +/obj/structure/mineral_door/on_attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) return TryToSwitchState(user) /obj/structure/mineral_door/CanPass(atom/movable/mover, turf/target) diff --git a/code/game/objects/structures/mirror.dm b/code/game/objects/structures/mirror.dm index b1829054ce..237cfdbf0b 100644 --- a/code/game/objects/structures/mirror.dm +++ b/code/game/objects/structures/mirror.dm @@ -15,10 +15,7 @@ if(icon_state == "mirror_broke" && !broken) obj_break(null, mapload) -/obj/structure/mirror/attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) - . = ..() - if(.) - return +/obj/structure/mirror/on_attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) if(broken || !Adjacent(user)) return @@ -118,10 +115,7 @@ choosable_races += S.id ..() -/obj/structure/mirror/magic/attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) - . = ..() - if(.) - return +/obj/structure/mirror/magic/on_attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) if(!ishuman(user)) return diff --git a/code/game/objects/structures/morgue.dm b/code/game/objects/structures/morgue.dm index 9639ffae51..82ca59161c 100644 --- a/code/game/objects/structures/morgue.dm +++ b/code/game/objects/structures/morgue.dm @@ -22,7 +22,8 @@ GLOBAL_LIST_EMPTY(bodycontainers) //Let them act as spawnpoints for revenants an anchored = TRUE max_integrity = 400 - var/obj/structure/tray/connected = null + var/obj/structure/tray/connected + var/starting_tray var/locked = FALSE dir = SOUTH var/message_cooldown @@ -30,6 +31,9 @@ GLOBAL_LIST_EMPTY(bodycontainers) //Let them act as spawnpoints for revenants an /obj/structure/bodycontainer/Initialize() . = ..() + if(starting_tray) + connected = new starting_tray(src) + connected.connected = src GLOB.bodycontainers += src recursive_organ_check(src) @@ -37,8 +41,7 @@ GLOBAL_LIST_EMPTY(bodycontainers) //Let them act as spawnpoints for revenants an GLOB.bodycontainers -= src open() if(connected) - qdel(connected) - connected = null + QDEL_NULL(connected) return ..() /obj/structure/bodycontainer/on_log(login) @@ -58,10 +61,7 @@ GLOBAL_LIST_EMPTY(bodycontainers) //Let them act as spawnpoints for revenants an /obj/structure/bodycontainer/attack_paw(mob/user) return attack_hand(user) -/obj/structure/bodycontainer/attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) - . = ..() - if(.) - return +/obj/structure/bodycontainer/on_attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) if(locked) to_chat(user, "It's locked.") return @@ -106,8 +106,6 @@ GLOBAL_LIST_EMPTY(bodycontainers) //Let them act as spawnpoints for revenants an if(!locked) open() return - user.changeNext_move(CLICK_CD_BREAKOUT) - user.last_special = world.time + CLICK_CD_BREAKOUT user.visible_message(null, \ "You lean on the back of [src] and start pushing the tray open... (this will take about [DisplayTimeText(breakout_time)].)", \ "You hear a metallic creaking from [src].") @@ -150,15 +148,11 @@ GLOBAL_LIST_EMPTY(bodycontainers) //Let them act as spawnpoints for revenants an desc = "Used to keep bodies in until someone fetches them. Now includes a high-tech alert system." icon_state = "morgue1" dir = EAST + starting_tray = /obj/structure/tray/m_tray var/beeper = TRUE var/beep_cooldown = 50 var/next_beep = 0 -/obj/structure/bodycontainer/morgue/New() - connected = new/obj/structure/tray/m_tray(src) - connected.connected = src - ..() - /obj/structure/bodycontainer/morgue/examine(mob/user) . = ..() . += "The speaker is [beeper ? "enabled" : "disabled"]. Alt-click to toggle it." @@ -208,6 +202,7 @@ GLOBAL_LIST_EMPTY(crematoriums) desc = "A human incinerator. Works well on barbecue nights." icon_state = "crema1" dir = SOUTH + starting_tray = /obj/structure/tray/c_tray var/id = 1 /obj/structure/bodycontainer/crematorium/attack_robot(mob/user) //Borgs can't use crematoriums without help @@ -218,17 +213,9 @@ GLOBAL_LIST_EMPTY(crematoriums) GLOB.crematoriums.Remove(src) return ..() -/obj/structure/bodycontainer/crematorium/New() - connected = new/obj/structure/tray/c_tray(src) - connected.connected = src - - GLOB.crematoriums.Add(src) - ..() - /obj/structure/bodycontainer/crematorium/Initialize() . = ..() - connected = new /obj/structure/tray/c_tray(src) - connected.connected = src + GLOB.crematoriums.Add(src) /obj/structure/bodycontainer/crematorium/connect_to_shuttle(obj/docking_port/mobile/port, obj/docking_port/stationary/dock, idnum, override=FALSE) id = "[idnum][id]" @@ -330,10 +317,7 @@ GLOBAL_LIST_EMPTY(crematoriums) /obj/structure/tray/attack_paw(mob/user) return attack_hand(user) -/obj/structure/tray/attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) - . = ..() - if(.) - return +/obj/structure/tray/on_attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) if (src.connected) connected.close() add_fingerprint(user) diff --git a/code/game/objects/structures/spirit_board.dm b/code/game/objects/structures/spirit_board.dm index 3a415b84a9..1b3093e4e7 100644 --- a/code/game/objects/structures/spirit_board.dm +++ b/code/game/objects/structures/spirit_board.dm @@ -14,10 +14,7 @@ desc = "[initial(desc)] The planchette is sitting at \"[planchette]\"." return ..() -/obj/structure/spirit_board/attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) - . = ..() - if(.) - return +/obj/structure/spirit_board/on_attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) spirit_board_pick_letter(user) diff --git a/code/game/objects/structures/statues.dm b/code/game/objects/structures/statues.dm index 1d7ba1d993..f8b54d04b6 100644 --- a/code/game/objects/structures/statues.dm +++ b/code/game/objects/structures/statues.dm @@ -74,7 +74,7 @@ radiate() ..() -/obj/structure/statue/uranium/attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) +/obj/structure/statue/uranium/on_attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) radiate() . = ..() @@ -240,7 +240,7 @@ honk() return ..() -/obj/structure/statue/bananium/attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) +/obj/structure/statue/bananium/on_attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) honk() . = ..() diff --git a/code/game/objects/structures/tables_racks.dm b/code/game/objects/structures/tables_racks.dm index 1b7eb25bb8..a553e63b0f 100644 --- a/code/game/objects/structures/tables_racks.dm +++ b/code/game/objects/structures/tables_racks.dm @@ -23,6 +23,8 @@ climbable = TRUE obj_flags = CAN_BE_HIT|SHOVABLE_ONTO pass_flags = LETPASSTHROW //You can throw objects over this, despite it's density.") + attack_hand_speed = CLICK_CD_MELEE + attack_hand_is_action = TRUE var/frame = /obj/structure/table_frame var/framestack = /obj/item/stack/rods var/buildstack = /obj/item/stack/sheet/metal @@ -60,7 +62,7 @@ /obj/structure/table/attack_paw(mob/user) return attack_hand(user) -/obj/structure/table/attack_hand(mob/living/user) +/obj/structure/table/on_attack_hand(mob/living/user, act_intent = user.a_intent, unarmed_attack_flags) if(Adjacent(user) && user.pulling) if(isliving(user.pulling)) var/mob/living/pushed_mob = user.pulling @@ -210,8 +212,10 @@ return /obj/structure/table/alt_attack_hand(mob/user) + if(!user.CheckActionCooldown(CLICK_CD_MELEE)) + return + user.DelayNextAction() if(user && Adjacent(user) && !user.incapacitated()) - user.changeNext_move(CLICK_CD_MELEE*0.5) if(istype(user) && user.a_intent == INTENT_HARM) user.visible_message("[user] slams [user.p_their()] palms down on [src].", "You slam your palms down on [src].") playsound(src, 'sound/weapons/sonic_jackhammer.ogg', 50, 1) @@ -654,6 +658,8 @@ anchored = TRUE pass_flags = LETPASSTHROW //You can throw objects over this, despite it's density. max_integrity = 20 + attack_hand_speed = CLICK_CD_MELEE + attack_hand_is_action = TRUE /obj/structure/rack/examine(mob/user) . = ..() @@ -695,13 +701,12 @@ /obj/structure/rack/attack_paw(mob/living/user) attack_hand(user) -/obj/structure/rack/attack_hand(mob/living/user, act_intent = user.a_intent, unarmed_attack_flags) +/obj/structure/rack/on_attack_hand(mob/living/user, act_intent = user.a_intent, unarmed_attack_flags) . = ..() if(.) return if(CHECK_MULTIPLE_BITFIELDS(user.mobility_flags, MOBILITY_STAND|MOBILITY_MOVE) || user.get_num_legs() < 2) return - user.changeNext_move(CLICK_CD_MELEE) user.do_attack_animation(src, ATTACK_EFFECT_KICK) user.visible_message("[user] kicks [src].", null, null, COMBAT_MESSAGE_RANGE) take_damage(rand(4,8), BRUTE, "melee", 1) diff --git a/code/game/objects/structures/target_stake.dm b/code/game/objects/structures/target_stake.dm index a08d5c95c1..c5f3a089f7 100644 --- a/code/game/objects/structures/target_stake.dm +++ b/code/game/objects/structures/target_stake.dm @@ -48,10 +48,7 @@ handle_density() to_chat(user, "You slide the target into the stake.") -/obj/structure/target_stake/attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) - . = ..() - if(.) - return +/obj/structure/target_stake/on_attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) if(pinned_target) removeTarget(user) diff --git a/code/game/objects/structures/transit_tubes/station.dm b/code/game/objects/structures/transit_tubes/station.dm index 7f597857d9..3a5eb135f4 100644 --- a/code/game/objects/structures/transit_tubes/station.dm +++ b/code/game/objects/structures/transit_tubes/station.dm @@ -58,10 +58,7 @@ qdel(R) -/obj/structure/transit_tube/station/attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) - . = ..() - if(.) - return +/obj/structure/transit_tube/station/on_attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) if(!pod_moving) if(user.pulling && user.a_intent == INTENT_GRAB && isliving(user.pulling)) if(open_status == STATION_TUBE_OPEN) diff --git a/code/game/objects/structures/transit_tubes/transit_tube_pod.dm b/code/game/objects/structures/transit_tubes/transit_tube_pod.dm index 36539ae1e4..cf68341b2c 100644 --- a/code/game/objects/structures/transit_tubes/transit_tube_pod.dm +++ b/code/game/objects/structures/transit_tubes/transit_tube_pod.dm @@ -69,8 +69,6 @@ empty_pod() return if(!moving) - user.changeNext_move(CLICK_CD_BREAKOUT) - user.last_special = world.time + CLICK_CD_BREAKOUT to_chat(user, "You start trying to escape from the pod...") if(do_after(user, 600, target = src)) to_chat(user, "You manage to open the pod.") diff --git a/code/game/objects/structures/watercloset.dm b/code/game/objects/structures/watercloset.dm index 3dacd49fc9..c52249686a 100644 --- a/code/game/objects/structures/watercloset.dm +++ b/code/game/objects/structures/watercloset.dm @@ -13,6 +13,8 @@ var/mob/living/swirlie = null //the mob being given a swirlie var/buildstacktype = /obj/item/stack/sheet/metal //they're metal now, shut up var/buildstackamount = 1 + attack_hand_speed = CLICK_CD_MELEE + attack_hand_is_action = TRUE /obj/structure/toilet/Initialize() . = ..() @@ -26,18 +28,16 @@ AM.forceMove(loc) return ..() -/obj/structure/toilet/attack_hand(mob/living/user, act_intent = user.a_intent, unarmed_attack_flags) +/obj/structure/toilet/on_attack_hand(mob/living/user, act_intent = user.a_intent, unarmed_attack_flags) . = ..() if(.) return if(swirlie) - user.changeNext_move(CLICK_CD_MELEE) playsound(src.loc, "swing_hit", 25, 1) swirlie.visible_message("[user] slams the toilet seat onto [swirlie]'s head!", "[user] slams the toilet seat onto your head!", "You hear reverberating porcelain.") swirlie.adjustBruteLoss(5) else if(user.pulling && user.a_intent == INTENT_GRAB && isliving(user.pulling)) - user.changeNext_move(CLICK_CD_MELEE) var/mob/living/GM = user.pulling if(user.grab_state >= GRAB_AGGRESSIVE) if(GM.loc != get_turf(src)) @@ -167,6 +167,8 @@ icon_state = "urinal" density = FALSE anchored = TRUE + attack_hand_speed = CLICK_CD_MELEE + attack_hand_is_action = TRUE var/exposed = 0 // can you currently put an item inside var/obj/item/hiddenitem = null // what's in the urinal @@ -174,17 +176,13 @@ ..() hiddenitem = new /obj/item/reagent_containers/food/urinalcake -/obj/structure/urinal/attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) - . = ..() - if(.) - return +/obj/structure/urinal/on_attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) if(user.pulling && user.a_intent == INTENT_GRAB && isliving(user.pulling)) var/mob/living/GM = user.pulling if(user.grab_state >= GRAB_AGGRESSIVE) if(GM.loc != get_turf(src)) to_chat(user, "[GM.name] needs to be on [src].") return - user.changeNext_move(CLICK_CD_MELEE) user.visible_message("[user] slams [GM] into [src]!", "You slam [GM] into [src]!") GM.adjustBruteLoss(8) else @@ -492,7 +490,7 @@ var/buildstacktype = /obj/item/stack/sheet/metal var/buildstackamount = 1 -/obj/structure/sink/attack_hand(mob/living/user, act_intent = user.a_intent, unarmed_attack_flags) +/obj/structure/sink/on_attack_hand(mob/living/user, act_intent = user.a_intent, unarmed_attack_flags) . = ..() if(.) return @@ -707,8 +705,7 @@ icon_state = "puddle" resistance_flags = UNACIDABLE -//ATTACK HAND IGNORING PARENT RETURN VALUE -/obj/structure/sink/puddle/attack_hand(mob/M) +/obj/structure/sink/puddle/on_attack_hand(mob/M) icon_state = "puddle-splash" . = ..() icon_state = "puddle" @@ -784,10 +781,7 @@ return TRUE -/obj/structure/curtain/attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) - . = ..() - if(.) - return +/obj/structure/curtain/on_attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) playsound(loc, 'sound/effects/curtain.ogg', 50, 1) toggle() diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm index 38655df39e..6aae4955f1 100644 --- a/code/game/objects/structures/window.dm +++ b/code/game/objects/structures/window.dm @@ -40,6 +40,8 @@ GLOBAL_LIST_EMPTY(electrochromatic_window_lookup) rad_flags = RAD_PROTECT_CONTENTS flags_ricochet = RICOCHET_HARD ricochet_chance_mod = 0.4 + attack_hand_speed = CLICK_CD_MELEE + attack_hand_is_action = TRUE /// Electrochromatic status var/electrochromatic_status = NOT_ELECTROCHROMATIC @@ -157,7 +159,7 @@ GLOBAL_LIST_EMPTY(electrochromatic_window_lookup) return 1 /obj/structure/window/attack_tk(mob/user) - user.changeNext_move(CLICK_CD_MELEE) + user.DelayNextAction(CLICK_CD_MELEE) user.visible_message("Something knocks on [src].") add_fingerprint(user) playsound(src, 'sound/effects/Glassknock.ogg', 50, 1) @@ -167,18 +169,15 @@ GLOBAL_LIST_EMPTY(electrochromatic_window_lookup) return 1 . = ..() -/obj/structure/window/attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) - . = ..() - if(.) - return +/obj/structure/window/on_attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) if(!can_be_reached(user)) return - user.changeNext_move(CLICK_CD_MELEE) user.visible_message("[user] knocks on [src].") add_fingerprint(user) playsound(src, 'sound/effects/Glassknock.ogg', 50, 1) /obj/structure/window/attack_paw(mob/user) + user.DelayNextAction() return attack_hand(user) /obj/structure/window/attack_generic(mob/user, damage_amount = 0, damage_type = BRUTE, damage_flag = 0, sound_effect = 1) //used by attack_alien, attack_animal, and attack_slime @@ -836,13 +835,9 @@ GLOBAL_LIST_EMPTY(electrochromatic_window_lookup) for (var/i in 1 to rand(1,4)) . += new /obj/item/paper/natural(location) -/obj/structure/window/paperframe/attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) - . = ..() - if(.) - return +/obj/structure/window/paperframe/on_attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) add_fingerprint(user) if(user.a_intent != INTENT_HARM) - user.changeNext_move(CLICK_CD_MELEE) user.visible_message("[user] knocks on [src].") playsound(src, "pageturn", 50, 1) else diff --git a/code/game/turfs/simulated/floor.dm b/code/game/turfs/simulated/floor.dm index bdca384bd0..758f824727 100644 --- a/code/game/turfs/simulated/floor.dm +++ b/code/game/turfs/simulated/floor.dm @@ -162,7 +162,7 @@ return 0 /turf/open/floor/crowbar_act(mob/living/user, obj/item/I) - return intact ? pry_tile(I, user) : FALSE + return intact ? FORCE_BOOLEAN(pry_tile(I, user)) : FALSE /turf/open/floor/proc/try_replace_tile(obj/item/stack/tile/T, mob/user, params) if(T.turf_type == type) diff --git a/code/game/turfs/simulated/floor/light_floor.dm b/code/game/turfs/simulated/floor/light_floor.dm index 4f7aa9e492..4bca25f96c 100644 --- a/code/game/turfs/simulated/floor/light_floor.dm +++ b/code/game/turfs/simulated/floor/light_floor.dm @@ -52,10 +52,7 @@ set_light(0) return ..() -/turf/open/floor/light/attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) - . = ..() - if(.) - return +/turf/open/floor/light/on_attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) if(!can_modify_colour) return if(!on) diff --git a/code/game/turfs/simulated/floor/mineral_floor.dm b/code/game/turfs/simulated/floor/mineral_floor.dm index 9a227d2594..8e0230a2b0 100644 --- a/code/game/turfs/simulated/floor/mineral_floor.dm +++ b/code/game/turfs/simulated/floor/mineral_floor.dm @@ -149,7 +149,7 @@ if(!.) honk() -/turf/open/floor/mineral/bananium/attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) +/turf/open/floor/mineral/bananium/on_attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) .=..() if(!.) honk() @@ -202,7 +202,7 @@ if(!.) radiate() -/turf/open/floor/mineral/uranium/attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) +/turf/open/floor/mineral/uranium/on_attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) .=..() if(!.) radiate() diff --git a/code/game/turfs/simulated/floor/plating.dm b/code/game/turfs/simulated/floor/plating.dm index f26a4b827a..ac80bddd00 100644 --- a/code/game/turfs/simulated/floor/plating.dm +++ b/code/game/turfs/simulated/floor/plating.dm @@ -124,7 +124,7 @@ ChangeTurf(/turf/open/floor/plating, flags = CHANGETURF_INHERIT_AIR) else playsound(src, 'sound/weapons/tap.ogg', 100, TRUE) //The attack sound is muffled by the foam itself - user.changeNext_move(CLICK_CD_MELEE) + user.DelayNextAction(CLICK_CD_MELEE) user.do_attack_animation(src) if(prob(I.force * 20 - 25)) user.visible_message("[user] smashes through [src]!", \ diff --git a/code/game/turfs/simulated/floor/reinf_floor.dm b/code/game/turfs/simulated/floor/reinf_floor.dm index b050d8fb89..03045674e4 100644 --- a/code/game/turfs/simulated/floor/reinf_floor.dm +++ b/code/game/turfs/simulated/floor/reinf_floor.dm @@ -89,10 +89,7 @@ /turf/open/floor/engine/attack_paw(mob/user) return attack_hand(user) -/turf/open/floor/engine/attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) - . = ..() - if(.) - return +/turf/open/floor/engine/on_attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) user.Move_Pulled(src) //air filled floors; used in atmos pressure chambers diff --git a/code/game/turfs/simulated/wall/mineral_walls.dm b/code/game/turfs/simulated/wall/mineral_walls.dm index c8afe628db..4466511acd 100644 --- a/code/game/turfs/simulated/wall/mineral_walls.dm +++ b/code/game/turfs/simulated/wall/mineral_walls.dm @@ -72,7 +72,7 @@ return return -/turf/closed/wall/mineral/uranium/attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) +/turf/closed/wall/mineral/uranium/on_attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) radiate() . = ..() diff --git a/code/game/turfs/simulated/wall/reinf_walls.dm b/code/game/turfs/simulated/wall/reinf_walls.dm index a1d2c1757c..6b41f41763 100644 --- a/code/game/turfs/simulated/wall/reinf_walls.dm +++ b/code/game/turfs/simulated/wall/reinf_walls.dm @@ -36,7 +36,8 @@ new /obj/item/stack/sheet/metal(src, 2) /turf/closed/wall/r_wall/attack_animal(mob/living/simple_animal/M) - M.changeNext_move(CLICK_CD_MELEE) + if(!M.CheckActionCooldown()) + return M.do_attack_animation(src) if(!M.environment_smash) return @@ -46,6 +47,7 @@ else playsound(src, 'sound/effects/bang.ogg', 50, 1) to_chat(M, "This wall is far too strong for you to destroy.") + M.DelayNextAction() /turf/closed/wall/r_wall/try_destroy(obj/item/I, mob/user, turf/T) if(istype(I, /obj/item/pickaxe/drill/jackhammer)) diff --git a/code/game/turfs/simulated/walls.dm b/code/game/turfs/simulated/walls.dm index df63cf93e6..37248f814c 100644 --- a/code/game/turfs/simulated/walls.dm +++ b/code/game/turfs/simulated/walls.dm @@ -9,6 +9,8 @@ thermal_conductivity = WALL_HEAT_TRANSFER_COEFFICIENT heat_capacity = 312500 //a little over 5 cm thick , 312500 for 1 m by 2.5 m by 0.25 m plasteel wall + attack_hand_speed = 8 + attack_hand_is_action = TRUE baseturfs = /turf/open/floor/plating @@ -113,12 +115,12 @@ return FALSE /turf/closed/wall/attack_paw(mob/living/user) - user.changeNext_move(CLICK_CD_MELEE) return attack_hand(user) - /turf/closed/wall/attack_animal(mob/living/simple_animal/M) - M.changeNext_move(CLICK_CD_MELEE) + if(!M.CheckActionCooldown(CLICK_CD_MELEE)) + return + M.DelayNextAction() M.do_attack_animation(src) if((M.environment_smash & ENVIRONMENT_SMASH_WALLS) || (M.environment_smash & ENVIRONMENT_SMASH_RWALLS)) playsound(src, 'sound/effects/meteorimpact.ogg', 100, 1) @@ -137,17 +139,14 @@ to_chat(user, text("You punch the wall.")) return TRUE -/turf/closed/wall/attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) - . = ..() - if(.) - return - user.changeNext_move(CLICK_CD_MELEE) +/turf/closed/wall/on_attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) to_chat(user, "You push the wall but nothing happens!") playsound(src, 'sound/weapons/genhit.ogg', 25, 1) add_fingerprint(user) /turf/closed/wall/attackby(obj/item/W, mob/user, params) - user.changeNext_move(CLICK_CD_MELEE) + if(!user.CheckActionCooldown(CLICK_CD_MELEE)) + return if (!user.IsAdvancedToolUser()) to_chat(user, "You don't have the dexterity to do this!") return @@ -156,6 +155,7 @@ if(!isturf(user.loc)) return //can't do this stuff whilst inside objects and such + user.DelayNextAction() add_fingerprint(user) var/turf/T = user.loc //get user's location for delay checks diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm index 02c12a9744..55d945535d 100755 --- a/code/game/turfs/turf.dm +++ b/code/game/turfs/turf.dm @@ -122,10 +122,7 @@ requires_activation = FALSE ..() -/turf/attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) - . = ..() - if(.) - return +/turf/on_attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) user.Move_Pulled(src) /turf/proc/multiz_turf_del(turf/T, dir) diff --git a/code/modules/NTNet/relays.dm b/code/modules/NTNet/relays.dm index 2101a72960..c64e2332cc 100644 --- a/code/modules/NTNet/relays.dm +++ b/code/modules/NTNet/relays.dm @@ -118,4 +118,4 @@ D.target = null D.error = "Connection to quantum relay severed" - return ..() \ No newline at end of file + return ..() diff --git a/code/modules/admin/verbs/diagnostics.dm b/code/modules/admin/verbs/diagnostics.dm index b3bea2201c..6f8e9e703f 100644 --- a/code/modules/admin/verbs/diagnostics.dm +++ b/code/modules/admin/verbs/diagnostics.dm @@ -22,37 +22,6 @@ show_air_status_to(target, usr) SSblackbox.record_feedback("tally", "admin_verb", 1, "Show Air Status") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! -/client/proc/fix_next_move() - set category = "Debug" - set name = "Unfreeze Everyone" - var/largest_move_time = 0 - var/largest_click_time = 0 - var/mob/largest_move_mob = null - var/mob/largest_click_mob = null - for(var/mob/M in world) - if(!M.client) - continue - if(M.next_move >= largest_move_time) - largest_move_mob = M - if(M.next_move > world.time) - largest_move_time = M.next_move - world.time - else - largest_move_time = 1 - if(M.next_click >= largest_click_time) - largest_click_mob = M - if(M.next_click > world.time) - largest_click_time = M.next_click - world.time - else - largest_click_time = 0 - log_admin("DEBUG: [key_name(M)] next_move = [M.next_move] lastDblClick = [M.next_click] world.time = [world.time]") - M.next_move = 1 - M.next_click = 0 - message_admins("[ADMIN_LOOKUPFLW(largest_move_mob)] had the largest move delay with [largest_move_time] frames / [DisplayTimeText(largest_move_time)]!") - message_admins("[ADMIN_LOOKUPFLW(largest_click_mob)] had the largest click delay with [largest_click_time] frames / [DisplayTimeText(largest_click_time)]!") - message_admins("world.time = [world.time]") - SSblackbox.record_feedback("tally", "admin_verb", 1, "Unfreeze Everyone") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - return - /client/proc/radio_report() set category = "Debug" set name = "Radio report" diff --git a/code/modules/admin/verbs/randomverbs.dm b/code/modules/admin/verbs/randomverbs.dm index d0dc3c789e..c559135bd1 100644 --- a/code/modules/admin/verbs/randomverbs.dm +++ b/code/modules/admin/verbs/randomverbs.dm @@ -1280,12 +1280,12 @@ GLOBAL_LIST_EMPTY(custom_outfits) //Admin created outfits ADMIN_PUNISHMENT_SUPPLYPOD, ADMIN_PUNISHMENT_MAZING, ADMIN_PUNISHMENT_ROD, + ADMIN_PUNISHMENT_SHOES, ADMIN_PUNISHMENT_PICKLE, ADMIN_PUNISHMENT_FRY, - ADMIN_PUNISHMENT_CRACK, - ADMIN_PUNISHMENT_BLEED, - ADMIN_PUNISHMENT_SCARIFY) - + ADMIN_PUNISHMENT_CRACK, + ADMIN_PUNISHMENT_BLEED, + ADMIN_PUNISHMENT_SCARIFY) var/punishment = input("Choose a punishment", "DIVINE SMITING") as null|anything in punishment_list @@ -1395,6 +1395,17 @@ GLOBAL_LIST_EMPTY(custom_outfits) //Admin created outfits if(ADMIN_PUNISHMENT_FRY) target.fry() + if(ADMIN_PUNISHMENT_SHOES) + if(!iscarbon(target)) + to_chat(usr,"This must be used on a carbon mob.") + return + var/mob/living/carbon/C = target + var/obj/item/clothing/shoes/sick_kicks = C.shoes + if(!sick_kicks?.can_be_tied) + to_chat(usr,"[C] does not have knottable shoes!") + return + sick_kicks.adjust_laces(SHOES_KNOTTED) + punish_log(target, punishment) /client/proc/punish_log(var/whom, var/punishment) diff --git a/code/modules/antagonists/abductor/machinery/console.dm b/code/modules/antagonists/abductor/machinery/console.dm index 9c9715ee43..6a981b36dc 100644 --- a/code/modules/antagonists/abductor/machinery/console.dm +++ b/code/modules/antagonists/abductor/machinery/console.dm @@ -24,10 +24,7 @@ var/obj/machinery/computer/camera_advanced/abductor/camera var/list/datum/icon_snapshot/disguises = list() -/obj/machinery/abductor/console/attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) - . = ..() - if(.) - return +/obj/machinery/abductor/console/on_attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) if(!HAS_TRAIT(user, TRAIT_ABDUCTOR_TRAINING) && !HAS_TRAIT(user.mind, TRAIT_ABDUCTOR_TRAINING)) to_chat(user, "You start mashing alien buttons at random!") if(do_after(user,100, target = src)) diff --git a/code/modules/antagonists/abductor/machinery/dispenser.dm b/code/modules/antagonists/abductor/machinery/dispenser.dm index ef423b6379..90dcf6626f 100644 --- a/code/modules/antagonists/abductor/machinery/dispenser.dm +++ b/code/modules/antagonists/abductor/machinery/dispenser.dm @@ -22,10 +22,7 @@ gland_colors[i] = random_color() amounts[i] = rand(1,5) -/obj/machinery/abductor/gland_dispenser/attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) - . = ..() - if(.) - return +/obj/machinery/abductor/gland_dispenser/on_attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) if(!isabductor(user)) return user.set_machine(src) diff --git a/code/modules/antagonists/abductor/machinery/experiment.dm b/code/modules/antagonists/abductor/machinery/experiment.dm index b94912b635..bc58cf45f0 100644 --- a/code/modules/antagonists/abductor/machinery/experiment.dm +++ b/code/modules/antagonists/abductor/machinery/experiment.dm @@ -21,10 +21,7 @@ return close_machine(target) -/obj/machinery/abductor/experiment/attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) - . = ..() - if(.) - return +/obj/machinery/abductor/experiment/on_attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) experimentUI(user) @@ -47,8 +44,6 @@ to_chat(user, "[src]'s door won't budge!") /obj/machinery/abductor/experiment/container_resist(mob/living/user) - user.changeNext_move(CLICK_CD_BREAKOUT) - user.last_special = world.time + CLICK_CD_BREAKOUT user.visible_message("You see [user] kicking against the door of [src]!", \ "You lean on the back of [src] and start pushing the door open... (this will take about [DisplayTimeText(breakout_time)].)", \ "You hear a metallic creaking from [src].") diff --git a/code/modules/antagonists/blob/blob/theblob.dm b/code/modules/antagonists/blob/blob/theblob.dm index 6a73dc579b..ed85726a4a 100644 --- a/code/modules/antagonists/blob/blob/theblob.dm +++ b/code/modules/antagonists/blob/blob/theblob.dm @@ -225,7 +225,7 @@ /obj/structure/blob/attackby(obj/item/I, mob/user, params) if(istype(I, /obj/item/analyzer)) - user.changeNext_move(CLICK_CD_MELEE) + user.DelayNextAction(CLICK_CD_MELEE) to_chat(user, "The analyzer beeps once, then reports: