diff --git a/_maps/map_files/BirdStation/BirdStation.dmm b/_maps/map_files/BirdStation/BirdStation.dmm index 02cee02205b7..e32358f3506b 100644 --- a/_maps/map_files/BirdStation/BirdStation.dmm +++ b/_maps/map_files/BirdStation/BirdStation.dmm @@ -1838,7 +1838,7 @@ /turf/open/floor/plasteel, /area/engine/engineering) "aeI" = ( -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /turf/open/floor/plasteel, /area/ai_monitored/turret_protected/tcomeast{ name = "\improper Telecommunications Chamber" @@ -8385,7 +8385,7 @@ /obj/structure/cable/cyan{ icon_state = "1-8" }, -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /mob/living/simple_animal/bot/ed209{ name = "Officer Pingsky II"; radio_channel = "AI Private" @@ -12329,7 +12329,7 @@ /obj/structure/cable/cyan{ icon_state = "1-2" }, -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /turf/open/floor/plasteel, /area/hallway/primary/fore{ name = "\improper Command Hallway" @@ -14045,7 +14045,7 @@ /turf/open/floor/plasteel, /area/hallway/secondary/exit) "aIR" = ( -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /turf/open/floor/plasteel, /area/engine/engineering) "aIS" = ( @@ -14676,7 +14676,7 @@ /turf/open/floor/wood, /area/maintenance/fsmaint) "aKw" = ( -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /turf/open/floor/plasteel, /area/teleporter{ name = "\improper Teleporter Room" @@ -15285,13 +15285,13 @@ /turf/open/floor/plasteel, /area/bridge) "aLS" = ( -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /turf/open/floor/plasteel, /area/ai_monitored/storage/eva{ name = "E.V.A. Storage" }) "aLT" = ( -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /turf/open/floor/plasteel, /area/storage/primary{ name = "Tool Storage" @@ -15300,7 +15300,7 @@ /obj/effect/landmark{ name = "lightsout" }, -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /turf/open/floor/plasteel/black, /area/bridge) "aLV" = ( @@ -15317,7 +15317,7 @@ /turf/open/floor/engine, /area/toxins/xenobiology) "aLX" = ( -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /mob/living/simple_animal/pet/dog/corgi/Ian, /turf/open/floor/carpet, /area/crew_quarters/heads) @@ -18550,7 +18550,7 @@ name = "\improper South Hallway" }) "aTG" = ( -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /turf/open/floor/plasteel, /area/quartermaster/storage) "aTH" = ( @@ -18573,7 +18573,7 @@ name = "\improper South Hallway" }) "aTL" = ( -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /turf/open/floor/plasteel, /area/crew_quarters/sleep) "aTM" = ( @@ -21087,7 +21087,7 @@ }, /area/shuttle/arrival) "aZP" = ( -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /turf/open/floor/wood, /area/crew_quarters/theatre) "aZQ" = ( @@ -21227,7 +21227,7 @@ id = "kitchen shutter"; name = "kitchen shutter" }, -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /obj/machinery/newscaster{ pixel_y = 32 }, @@ -21320,7 +21320,7 @@ /turf/closed/wall, /area/medical/morgue) "bav" = ( -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /obj/machinery/atmospherics/pipe/simple/cyan/hidden{ icon_state = "intact"; dir = 4 @@ -21389,7 +21389,7 @@ /obj/structure/cable/cyan{ icon_state = "2-4" }, -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /turf/open/floor/plasteel, /area/hallway/secondary/exit) "baA" = ( @@ -21672,7 +21672,7 @@ /turf/open/floor/plasteel, /area/hallway/primary/central) "bbc" = ( -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /turf/open/floor/plasteel, /area/crew_quarters/fitness) "bbd" = ( @@ -22723,7 +22723,7 @@ /obj/structure/cable/cyan{ icon_state = "2-8" }, -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /turf/open/floor/plasteel/white, /area/medical/genetics_cloning) "bdL" = ( @@ -22792,11 +22792,11 @@ /obj/structure/cable/cyan{ icon_state = "1-2" }, -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /turf/open/floor/plasteel, /area/security/brig) "bdS" = ( -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /turf/open/floor/plasteel, /area/medical/robotics) "bdT" = ( @@ -22929,7 +22929,7 @@ /obj/structure/cable/cyan{ icon_state = "1-8" }, -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /turf/open/floor/plasteel/showroomfloor, /area/security/warden) "bed" = ( @@ -22995,11 +22995,11 @@ icon_state = "intact"; dir = 4 }, -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /turf/open/floor/plasteel, /area/toxins/misc_lab) "bem" = ( -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /turf/open/floor/plasteel/white, /area/medical/medbay) "ben" = ( diff --git a/_maps/map_files/DreamStation/dreamstation04.dmm b/_maps/map_files/DreamStation/dreamstation04.dmm index fade044207b0..6c70ee3c693c 100644 --- a/_maps/map_files/DreamStation/dreamstation04.dmm +++ b/_maps/map_files/DreamStation/dreamstation04.dmm @@ -583,7 +583,7 @@ name = "AI Core Door"; req_access_txt = "16" }, -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /turf/open/floor/bluegrid, /area/ai_monitored/turret_protected/ai) "abj" = ( @@ -1547,7 +1547,7 @@ tag = "icon-2-8"; icon_state = "2-8" }, -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /turf/open/floor/plasteel/darkblue/side{ tag = "icon-darkblue (NORTH)"; dir = 1 @@ -2519,7 +2519,7 @@ tag = "icon-1-8"; icon_state = "1-8" }, -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /turf/open/floor/plasteel/black, /area/aisat) "aeP" = ( @@ -4940,7 +4940,7 @@ tag = "icon-2-8"; icon_state = "2-8" }, -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 10 }, @@ -5359,7 +5359,7 @@ /turf/open/floor/plasteel/neutral/side, /area/hallway/secondary/entry) "alz" = ( -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -6609,7 +6609,7 @@ dir = 4; icon_state = "pipe-c" }, -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /turf/open/floor/plasteel/bot, /area/engine/engineering) "aoF" = ( @@ -13409,7 +13409,7 @@ d1 = 1; d2 = 4 }, -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /turf/open/floor/plasteel/black, /area/engine/engine_smes) "aCj" = ( @@ -13579,7 +13579,7 @@ /turf/open/floor/plasteel, /area/atmos) "aCz" = ( -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /obj/machinery/light, /obj/machinery/camera{ c_tag = "Atmospherics"; @@ -17244,7 +17244,7 @@ /turf/open/floor/plasteel/cafeteria, /area/medical/cmo) "aKp" = ( -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, /turf/open/floor/plasteel/cafeteria, /area/medical/cmo) @@ -18497,7 +18497,7 @@ /turf/open/floor/plasteel/white, /area/medical/genetics) "aNg" = ( -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /turf/open/floor/plasteel/whitebot, /area/medical/genetics) "aNh" = ( @@ -19476,7 +19476,7 @@ icon_state = "pipe-j1s"; sortType = 4 }, -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /turf/open/floor/plasteel/bot, /area/engine/engineering) "aOW" = ( @@ -20004,7 +20004,7 @@ /turf/open/floor/plasteel/white, /area/medical/genetics) "aQb" = ( -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -20962,7 +20962,7 @@ /turf/open/floor/plasteel, /area/engine/chiefs_office) "aSj" = ( -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /obj/machinery/light_switch{ pixel_y = 24; tag = "n" @@ -22828,7 +22828,7 @@ /turf/open/floor/plating, /area/maintenance/asmaint) "aVK" = ( -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /obj/machinery/camera{ c_tag = "Medbay Surgery"; dir = 4; @@ -24520,7 +24520,7 @@ }, /area/crew_quarters/courtroom) "aZf" = ( -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel/bot, /area/crew_quarters/courtroom) @@ -24941,7 +24941,7 @@ /turf/open/floor/plasteel, /area/crew_quarters/locker) "aZU" = ( -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /turf/open/floor/plasteel, /area/crew_quarters/locker) "aZV" = ( @@ -25122,7 +25122,7 @@ tag = "icon-2-8"; icon_state = "2-8" }, -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/structure/disposalpipe/segment, /turf/open/floor/plasteel/vault{ @@ -26376,7 +26376,7 @@ tag = "icon-1-2"; icon_state = "1-2" }, -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -26690,7 +26690,7 @@ tag = "icon-1-2"; icon_state = "1-2" }, -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /obj/structure/disposalpipe/segment, /turf/open/floor/plasteel/bot, /area/engine/break_room) @@ -27582,7 +27582,7 @@ /turf/open/floor/wood, /area/lawoffice) "bfp" = ( -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ tag = "icon-manifold-r-f (EAST)"; dir = 4 @@ -30177,7 +30177,7 @@ tag = "icon-1-8"; icon_state = "1-8" }, -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /obj/machinery/navbeacon{ codes_txt = "patrol;next_patrol=Security"; location = "EVA2" @@ -30314,7 +30314,7 @@ tag = "icon-4-8"; icon_state = "4-8" }, -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /turf/open/floor/plasteel/bot, /area/hallway/primary/fore{ name = "Fore Starboard Hallway" @@ -34881,7 +34881,7 @@ d1 = 4; d2 = 8 }, -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /turf/open/floor/plasteel/warning, /area/engine/gravity_generator) "btk" = ( @@ -34956,7 +34956,7 @@ /turf/open/floor/plasteel/black, /area/crew_quarters/heads) "btu" = ( -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /turf/open/floor/plasteel/vault{ dir = 8 }, @@ -38595,7 +38595,7 @@ /turf/open/floor/plasteel, /area/storage/eva) "bAD" = ( -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /turf/open/floor/plasteel/bot, /area/storage/eva) "bAE" = ( @@ -40761,7 +40761,7 @@ }, /area/hallway/secondary/exit) "bEi" = ( -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel/bot, /area/hallway/secondary/exit) @@ -40807,7 +40807,7 @@ /turf/open/floor/plasteel, /area/hallway/secondary/exit) "bEo" = ( -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/carpet, /area/library) @@ -41040,7 +41040,7 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /turf/open/floor/plasteel/bar, /area/crew_quarters/bar) "bEO" = ( @@ -41246,7 +41246,7 @@ }, /area/ai_monitored/turret_protected/ai_upload) "bFi" = ( -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /obj/structure/cable/white{ tag = "icon-4-8"; icon_state = "4-8" @@ -41320,7 +41320,7 @@ tag = "icon-2-4"; icon_state = "2-4" }, -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /turf/open/floor/plasteel/vault{ dir = 8 }, @@ -41595,7 +41595,7 @@ tag = "icon-4-8"; icon_state = "4-8" }, -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /turf/open/floor/plasteel/black, /area/bridge) "bFL" = ( @@ -41819,7 +41819,7 @@ icon_state = "1-2"; pixel_y = 0 }, -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/structure/disposalpipe/segment, /mob/living/simple_animal/bot/secbot/beepsky{ @@ -41925,7 +41925,7 @@ pixel_x = 0; tag = "" }, -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel/vault{ dir = 8 @@ -42271,7 +42271,7 @@ pixel_x = 0; tag = "" }, -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 9 }, @@ -46045,7 +46045,7 @@ icon_state = "1-2"; pixel_y = 0 }, -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /obj/structure/disposalpipe/segment{ dir = 8; icon_state = "pipe-c" @@ -48490,7 +48490,7 @@ tag = "icon-2-4"; icon_state = "2-4" }, -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /turf/open/floor/plasteel/vault{ dir = 8 }, @@ -48574,7 +48574,7 @@ tag = "icon-1-2"; icon_state = "1-2" }, -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /turf/open/floor/wood, /area/crew_quarters/captain) "bSz" = ( @@ -52540,7 +52540,7 @@ /turf/open/floor/plasteel/black, /area/chapel/main) "bZJ" = ( -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /turf/open/floor/plasteel/black, /area/chapel/main) "bZK" = ( @@ -54211,7 +54211,7 @@ /turf/open/floor/plasteel, /area/crew_quarters/sleep) "cdE" = ( -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -55039,7 +55039,7 @@ /turf/open/floor/plasteel/delivery, /area/storage/primary) "cfv" = ( -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /turf/open/floor/plasteel, /area/storage/primary) "cfw" = ( @@ -55248,7 +55248,7 @@ /turf/open/floor/plasteel/white, /area/assembly/robotics) "cfS" = ( -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /turf/open/floor/plasteel/white, /area/assembly/robotics) "cfT" = ( @@ -55344,7 +55344,7 @@ /turf/open/floor/plasteel, /area/quartermaster/office) "cge" = ( -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /turf/open/floor/plasteel/bot, /area/quartermaster/office) "cgf" = ( @@ -56067,7 +56067,7 @@ /turf/open/floor/bluegrid, /area/assembly/chargebay) "chA" = ( -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /obj/structure/cable/pink{ tag = "icon-1-4"; icon_state = "1-4" @@ -56992,7 +56992,7 @@ tag = "icon-1-8"; icon_state = "1-8" }, -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /turf/open/floor/plasteel/vault, /area/security/nuke_storage) "cjr" = ( @@ -57629,7 +57629,7 @@ /turf/open/floor/plasteel/white, /area/toxins/lab) "ckJ" = ( -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -61344,7 +61344,7 @@ /turf/open/floor/plasteel, /area/quartermaster/office) "csd" = ( -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel, /area/quartermaster/office) @@ -66128,7 +66128,7 @@ /turf/open/floor/plasteel/white, /area/toxins/explab) "cBr" = ( -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /turf/open/floor/plasteel/whitebot, /area/toxins/explab) "cBs" = ( @@ -66492,7 +66492,7 @@ }, /area/crew_quarters/fitness) "cCa" = ( -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /turf/open/floor/plasteel/vault{ dir = 5 }, @@ -66807,7 +66807,7 @@ tag = "icon-1-8"; icon_state = "1-8" }, -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /turf/open/floor/plasteel, /area/quartermaster/storage) "cCJ" = ( @@ -68086,7 +68086,7 @@ /turf/open/floor/plasteel/white, /area/toxins/mixing) "cFr" = ( -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /obj/structure/cable/pink{ tag = "icon-1-2"; icon_state = "1-2" @@ -72929,7 +72929,7 @@ tag = "icon-1-4"; icon_state = "1-4" }, -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /turf/open/floor/plasteel/whitebot, /area/toxins/xenobiology) "cOB" = ( diff --git a/_maps/map_files/EfficiencyStation/EfficiencyStation.dmm b/_maps/map_files/EfficiencyStation/EfficiencyStation.dmm index b442015461d5..ab4f89559f55 100644 --- a/_maps/map_files/EfficiencyStation/EfficiencyStation.dmm +++ b/_maps/map_files/EfficiencyStation/EfficiencyStation.dmm @@ -1444,7 +1444,7 @@ /turf/open/floor/plasteel/black, /area/ai_monitored/turret_protected/ai) "ada" = ( -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /obj/machinery/door/window{ name = "Primary AI Core Access"; pixel_y = -2; @@ -2270,7 +2270,7 @@ d2 = 4; icon_state = "1-4" }, -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /obj/structure/cable{ d1 = 2; d2 = 4; @@ -2342,7 +2342,7 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /obj/effect/landmark/start{ name = "Cyborg" }, @@ -2426,7 +2426,7 @@ d2 = 8; icon_state = "1-8" }, -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /turf/open/floor/plasteel/black, /area/ai_monitored/turret_protected/AIsatextFP{ name = "AI Satellite Service" @@ -3660,7 +3660,7 @@ /area/ai_monitored/turret_protected/aisat_interior) "agX" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /turf/open/floor/plating, /area/ai_monitored/turret_protected/aisat_interior) "agY" = ( @@ -4843,7 +4843,7 @@ name = "Medical Maintenance" }) "ajs" = ( -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /obj/effect/landmark{ name = "xeno_spawn"; pixel_x = -1 @@ -5088,7 +5088,7 @@ d2 = 2; icon_state = "1-2" }, -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /turf/open/floor/plasteel/white, /area/toxins/xenobiology) "ajU" = ( @@ -8949,7 +8949,7 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /turf/open/floor/plasteel/floorgrime, /area/toxins/misc_lab) "aqG" = ( @@ -9113,7 +9113,7 @@ /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 1 }, -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /obj/effect/landmark{ name = "blobstart" }, @@ -13015,7 +13015,7 @@ /turf/open/floor/plasteel/white, /area/toxins/xenobiology) "ayA" = ( -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -13394,7 +13394,7 @@ name = "\improper Toxins Lab" }) "azo" = ( -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/effect/landmark/start{ name = "Scientist" @@ -13812,7 +13812,7 @@ name = "Medbay Central" }) "aAa" = ( -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel/cafeteria, /area/medical/medbay{ @@ -13973,7 +13973,7 @@ /turf/open/floor/plasteel/cafeteria, /area/crew_quarters/hor) "aAs" = ( -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -14495,7 +14495,7 @@ /turf/open/floor/plasteel/white, /area/medical/genetics) "aBx" = ( -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 6 }, @@ -14847,7 +14847,7 @@ name = "Research Division" }) "aCe" = ( -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -15652,7 +15652,7 @@ /turf/open/floor/plasteel, /area/atmos) "aDH" = ( -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /turf/open/floor/plasteel, /area/atmos) "aDI" = ( @@ -18355,7 +18355,7 @@ /turf/open/floor/plasteel/white, /area/medical/genetics) "aIO" = ( -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /turf/open/floor/plasteel/white, /area/medical/genetics) "aIP" = ( @@ -18566,7 +18566,7 @@ /turf/open/floor/plasteel/white, /area/toxins/explab) "aJk" = ( -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /turf/open/floor/plasteel/white, /area/toxins/explab) "aJl" = ( @@ -18885,7 +18885,7 @@ /turf/open/floor/plasteel/white, /area/medical/cryo) "aJT" = ( -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /turf/open/floor/plasteel/white, /area/medical/cryo) "aJU" = ( @@ -19483,7 +19483,7 @@ name = "Medbay Central" }) "aLa" = ( -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /turf/open/floor/plasteel/white, /area/medical/medbay{ name = "Medbay Central" @@ -20242,7 +20242,7 @@ }, /area/toxins/lab) "aMN" = ( -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /turf/open/floor/plasteel/warnwhite/corner{ dir = 4 }, @@ -20285,7 +20285,7 @@ /turf/open/floor/plasteel/white, /area/assembly/robotics) "aMS" = ( -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /obj/structure/disposalpipe/segment{ dir = 1; icon_state = "pipe-c" @@ -20354,7 +20354,7 @@ /turf/open/floor/mech_bay_recharge_floor, /area/assembly/chargebay) "aNa" = ( -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 8 }, @@ -21868,7 +21868,7 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /turf/open/floor/plasteel, /area/atmos) "aQb" = ( @@ -22010,7 +22010,7 @@ /turf/open/floor/plasteel/barber, /area/medical/cmo) "aQn" = ( -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /obj/structure/cable{ d1 = 2; d2 = 4; @@ -22168,7 +22168,7 @@ /turf/open/floor/plasteel/white, /area/medical/chemistry) "aQB" = ( -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 @@ -24521,7 +24521,7 @@ name = "Medbay Central" }) "aVH" = ( -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel/white, /area/medical/medbay{ @@ -24610,7 +24610,7 @@ d2 = 2; icon_state = "1-2" }, -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /turf/open/floor/plasteel/warning{ dir = 1 }, @@ -24642,7 +24642,7 @@ d2 = 2; icon_state = "1-2" }, -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /turf/open/floor/plasteel/black, /area/ai_monitored/turret_protected/ai_upload) "aVZ" = ( @@ -25953,7 +25953,7 @@ }, /area/hallway/primary/central) "aYy" = ( -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /obj/structure/cable{ d1 = 4; d2 = 8; @@ -26773,7 +26773,7 @@ name = "\improper Maltese Falcon" }) "aZW" = ( -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /turf/open/floor/plasteel/bar, /area/crew_quarters/bar{ name = "\improper Maltese Falcon" @@ -29543,7 +29543,7 @@ }, /area/library) "bgn" = ( -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /turf/open/floor/carpet, /area/library) "bgo" = ( @@ -29878,7 +29878,7 @@ /turf/open/floor/plasteel, /area/engine/break_room) "bgZ" = ( -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /turf/open/floor/plasteel, /area/engine/break_room) "bha" = ( @@ -33981,7 +33981,7 @@ d2 = 2; icon_state = "1-2" }, -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /turf/open/floor/plasteel/neutral, /area/engine/chiefs_office) "bpV" = ( @@ -35300,7 +35300,7 @@ /turf/open/floor/plasteel, /area/crew_quarters/sleep) "bsG" = ( -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /turf/open/floor/plasteel, /area/crew_quarters/sleep) "bsH" = ( @@ -35514,7 +35514,7 @@ /turf/open/floor/plasteel, /area/quartermaster/storage) "btf" = ( -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /turf/open/floor/plasteel, /area/quartermaster/storage) "btg" = ( @@ -37490,7 +37490,7 @@ /turf/open/floor/plasteel, /area/engine/engineering) "bwZ" = ( -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /turf/open/floor/plasteel, /area/engine/engineering) "bxa" = ( @@ -37646,7 +37646,7 @@ d2 = 4; icon_state = "2-4" }, -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 6 }, @@ -38006,7 +38006,7 @@ /area/crew_quarters/sleep) "byc" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /turf/open/floor/plasteel/neutral/corner{ dir = 1 }, @@ -40940,7 +40940,7 @@ /turf/open/floor/plasteel, /area/quartermaster/qm) "bDO" = ( -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /turf/open/floor/plasteel, /area/quartermaster/qm) "bDP" = ( @@ -41979,7 +41979,7 @@ /turf/open/floor/carpet, /area/crew_quarters/heads) "bFQ" = ( -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /turf/open/floor/carpet, /area/crew_quarters/heads) "bFR" = ( @@ -43286,7 +43286,7 @@ d2 = 2; icon_state = "1-2" }, -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /obj/structure/disposalpipe/segment, /turf/open/floor/plasteel/showroomfloor, /area/security/warden) @@ -44715,7 +44715,7 @@ d2 = 2; icon_state = "1-2" }, -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /turf/open/floor/wood, /area/crew_quarters/captain{ name = "\improper Captain's Quarters" @@ -45962,7 +45962,7 @@ /turf/open/floor/plating, /area/bridge) "bNj" = ( -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /turf/open/floor/plasteel, /area/hallway/primary/aft{ name = "Aft Starboard Primary Hallway" @@ -46999,7 +46999,7 @@ "bPl" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/structure/disposalpipe/segment, -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /turf/open/floor/plasteel, /area/security/main) "bPm" = ( @@ -50009,7 +50009,7 @@ /turf/open/floor/plasteel/black, /area/bridge) "bVB" = ( -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /turf/open/floor/plasteel/black, /area/bridge) "bVC" = ( @@ -51191,7 +51191,7 @@ name = "Arrivals" }) "bXY" = ( -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /turf/open/floor/plasteel, /area/hallway/secondary/entry{ name = "Arrivals" @@ -52952,7 +52952,7 @@ /turf/open/floor/plasteel/freezer, /area/security/prison) "cbz" = ( -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /turf/open/floor/plasteel/floorgrime, /area/security/prison) "cbA" = ( @@ -53773,7 +53773,7 @@ /turf/open/space, /area/space) "cdA" = ( -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /turf/open/floor/plasteel, /area/hallway/secondary/exit{ name = "\improper Departure Lounge" @@ -54709,7 +54709,7 @@ name = "\improper Telecoms Control Room" }) "cfw" = ( -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /obj/structure/cable{ d1 = 1; d2 = 8; @@ -55453,7 +55453,7 @@ }, /area/tcommsat/server) "cht" = ( -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /turf/open/floor/bluegrid{ name = "Mainframe Base"; initial_gas_mix = "n2=100;TEMP=80" @@ -56461,7 +56461,7 @@ name = "Chapel Maintenance" }) "cjz" = ( -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /turf/open/floor/carpet, /area/security/hos) "cjA" = ( diff --git a/_maps/map_files/MetaStation/MetaStation.dmm b/_maps/map_files/MetaStation/MetaStation.dmm index 50a84e80fc7a..138f1dd17f3a 100644 --- a/_maps/map_files/MetaStation/MetaStation.dmm +++ b/_maps/map_files/MetaStation/MetaStation.dmm @@ -1150,7 +1150,7 @@ /turf/open/floor/plasteel/floorgrime, /area/security/prison) "acx" = ( -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /obj/structure/cable/yellow{ d1 = 4; d2 = 8; @@ -3929,7 +3929,7 @@ }, /area/ai_monitored/security/armory) "agY" = ( -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /turf/open/floor/plasteel/vault{ dir = 8 }, @@ -3995,7 +3995,7 @@ /turf/open/floor/carpet, /area/security/hos) "ahf" = ( -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /obj/structure/chair{ dir = 1 }, @@ -5617,7 +5617,7 @@ }) "akc" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /turf/open/floor/plasteel, /area/crew_quarters/fitness{ name = "\improper Recreation Area" @@ -8319,7 +8319,7 @@ /turf/open/floor/plasteel/red, /area/security/main) "aoM" = ( -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /obj/structure/disposalpipe/segment{ dir = 4; icon_state = "pipe-c" @@ -9791,7 +9791,7 @@ /turf/open/floor/plasteel/showroomfloor, /area/security/warden) "arq" = ( -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/structure/cable/yellow{ d1 = 1; @@ -10123,7 +10123,7 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 9 }, -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /turf/open/floor/plasteel/warning{ dir = 2 }, @@ -13850,7 +13850,7 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /turf/open/floor/plasteel/red/corner{ dir = 4 }, @@ -14929,7 +14929,7 @@ }, /area/security/brig) "aAa" = ( -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /turf/open/floor/plasteel/red/side{ dir = 1 }, @@ -15907,7 +15907,7 @@ /turf/open/floor/plasteel/grimy, /area/security/detectives_office) "aBC" = ( -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /turf/open/floor/plasteel/grimy, /area/security/detectives_office) "aBD" = ( @@ -16294,7 +16294,7 @@ }) "aCm" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /turf/open/floor/plasteel, /area/quartermaster/miningdock{ name = "\improper Mining Office" @@ -16736,7 +16736,7 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /turf/open/floor/plasteel, /area/crew_quarters/sleep) "aCX" = ( @@ -21652,7 +21652,7 @@ }, /area/engine/engineering) "aLo" = ( -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel, /area/engine/engineering) @@ -22791,7 +22791,7 @@ }, /area/crew_quarters/courtroom) "aNH" = ( -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /turf/open/floor/plasteel/bot, /area/crew_quarters/courtroom) "aNI" = ( @@ -23387,7 +23387,7 @@ dir = 2; network = list("SS13") }, -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 10 }, @@ -23522,7 +23522,7 @@ /turf/open/floor/plasteel/black, /area/ai_monitored/turret_protected/ai_upload) "aPe" = ( -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /turf/open/floor/plasteel/black, /area/ai_monitored/turret_protected/ai_upload) "aPf" = ( @@ -23648,7 +23648,7 @@ /turf/open/floor/wood, /area/lawoffice) "aPs" = ( -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /turf/open/floor/wood, /area/lawoffice) "aPt" = ( @@ -23861,7 +23861,7 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /turf/open/floor/plasteel, /area/hallway/secondary/construction{ name = "\improper Garden" @@ -24965,7 +24965,7 @@ }, /area/storage/primary) "aRG" = ( -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /turf/open/floor/plasteel, /area/storage/primary) "aRH" = ( @@ -25939,7 +25939,7 @@ /turf/open/floor/plasteel, /area/crew_quarters/locker) "aTr" = ( -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /turf/open/floor/plasteel, /area/crew_quarters/locker) "aTs" = ( @@ -28883,7 +28883,7 @@ /turf/open/floor/plating, /area/quartermaster/storage) "aYC" = ( -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /turf/open/floor/plasteel, /area/quartermaster/storage) "aYD" = ( @@ -29504,7 +29504,7 @@ dir = 1; pixel_y = 1 }, -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /turf/open/floor/plasteel/black, /area/construction/hallway{ name = "\improper MiniSat Exterior" @@ -30185,7 +30185,7 @@ d2 = 4; icon_state = "1-4" }, -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /turf/open/floor/plasteel, /area/hallway/primary/central) "baE" = ( @@ -30688,7 +30688,7 @@ /turf/open/floor/greengrid, /area/ai_monitored/turret_protected/ai) "bbq" = ( -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /obj/machinery/flasher{ id = "AI"; pixel_x = -25; @@ -30758,7 +30758,7 @@ /turf/open/floor/bluegrid, /area/ai_monitored/turret_protected/ai) "bbw" = ( -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /obj/machinery/flasher{ id = "AI"; pixel_x = 25; @@ -31374,7 +31374,7 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /turf/open/floor/plasteel, /area/hallway/primary/central) "bcs" = ( @@ -31718,7 +31718,7 @@ }, /area/engine/chiefs_office) "bcU" = ( -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /turf/open/floor/plasteel/neutral{ dir = 8 }, @@ -32243,7 +32243,7 @@ /turf/open/floor/plasteel, /area/storage/tools) "bdT" = ( -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /turf/open/floor/plasteel, /area/storage/tools) "bdU" = ( @@ -32328,7 +32328,7 @@ }, /area/storage/tech) "bec" = ( -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /turf/open/floor/plasteel/vault{ dir = 8 }, @@ -35342,7 +35342,7 @@ /obj/structure/window/reinforced{ dir = 8 }, -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /turf/open/floor/wood, /area/crew_quarters/captain{ name = "\improper Captain's Quarters" @@ -35809,7 +35809,7 @@ /turf/open/floor/plasteel/black, /area/ai_monitored/turret_protected/ai) "bkb" = ( -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel/black, /area/ai_monitored/turret_protected/ai) @@ -36644,7 +36644,7 @@ dir = 4; initialize_directions = 11 }, -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /turf/open/floor/plasteel, /area/engine/break_room) "blx" = ( @@ -37026,7 +37026,7 @@ }) "bme" = ( /obj/structure/disposalpipe/segment, -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /turf/open/floor/plasteel/brown{ dir = 2 }, @@ -37064,7 +37064,7 @@ /area/hallway/primary/port) "bmh" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /turf/open/floor/plasteel/brown/corner{ dir = 8 }, @@ -39022,7 +39022,7 @@ }, /area/ai_monitored/turret_protected/aisat_interior) "bpx" = ( -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -40229,7 +40229,7 @@ name = "\improper MiniSat Exterior" }) "brD" = ( -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /obj/structure/cable/yellow{ icon_state = "4-8"; d1 = 4; @@ -40306,7 +40306,7 @@ d1 = 4; d2 = 8 }, -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /turf/open/floor/plasteel/black, /area/ai_monitored/turret_protected/tcomfoyer{ name = "\improper MiniSat Foyer" @@ -40560,7 +40560,7 @@ name = "Arrivals" }) "bsa" = ( -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /obj/structure/cable/yellow{ d1 = 1; d2 = 2; @@ -40611,7 +40611,7 @@ d2 = 2; icon_state = "1-2" }, -/obj/machinery/hologram/holopad{ +/obj/machinery/holopad{ pixel_y = -16 }, /turf/open/floor/carpet, @@ -42464,7 +42464,7 @@ /turf/open/floor/carpet, /area/bridge) "buZ" = ( -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /turf/open/floor/carpet, /area/bridge) "bva" = ( @@ -43287,7 +43287,7 @@ d2 = 8; icon_state = "1-8" }, -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /turf/open/floor/carpet, /area/crew_quarters/heads) "bwu" = ( @@ -43411,7 +43411,7 @@ name = "\improper Captain's Quarters" }) "bwJ" = ( -/obj/machinery/hologram/holopad{ +/obj/machinery/holopad{ pixel_x = 9; pixel_y = -9 }, @@ -44420,7 +44420,7 @@ /turf/open/floor/plasteel/black, /area/bridge) "byx" = ( -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /obj/machinery/status_display{ density = 0; layer = 4; @@ -46176,7 +46176,7 @@ name = "\improper Telecoms Control Room" }) "bBu" = ( -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -47616,7 +47616,7 @@ /turf/open/floor/plasteel/bar, /area/crew_quarters/bar) "bDZ" = ( -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /turf/open/floor/plasteel/bar, /area/crew_quarters/bar) "bEa" = ( @@ -48624,7 +48624,7 @@ /turf/open/floor/wood, /area/crew_quarters/bar) "bFP" = ( -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/carpet, /area/crew_quarters/theatre) @@ -48666,7 +48666,7 @@ }, /area/atmos) "bFU" = ( -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel, /area/atmos) @@ -49280,7 +49280,7 @@ name = "\improper Command Hallway" }) "bGX" = ( -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /obj/structure/cable/yellow{ d1 = 4; d2 = 8; @@ -50009,7 +50009,7 @@ }, /area/atmos) "bHS" = ( -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /turf/open/floor/plasteel/caution{ dir = 8 }, @@ -50939,7 +50939,7 @@ }, /area/tcommsat/server) "bJL" = ( -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /obj/structure/cable/yellow{ d1 = 1; d2 = 4; @@ -51111,7 +51111,7 @@ /turf/open/floor/wood, /area/library) "bKb" = ( -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /turf/open/floor/wood, /area/library) "bKc" = ( @@ -53393,7 +53393,7 @@ }) "bOh" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /obj/structure/cable/yellow{ d1 = 1; d2 = 2; @@ -53519,7 +53519,7 @@ /turf/open/floor/plasteel, /area/atmos) "bOv" = ( -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /turf/open/floor/plasteel, /area/atmos) "bOw" = ( @@ -54800,7 +54800,7 @@ name = "E.V.A. Storage" }) "bQB" = ( -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /turf/open/floor/plasteel/warning{ dir = 8 }, @@ -55150,7 +55150,7 @@ }, /area/crew_quarters/kitchen) "bRh" = ( -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /turf/open/floor/plasteel/cafeteria{ dir = 5 }, @@ -55828,7 +55828,7 @@ }) "bSw" = ( /obj/effect/decal/cleanable/dirt, -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /turf/open/floor/carpet, /area/assembly/showroom{ name = "\improper Corporate Showroom" @@ -56374,7 +56374,7 @@ name = "Port Maintenance" }) "bTs" = ( -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /obj/structure/extinguisher_cabinet{ pixel_x = -27; pixel_y = 0 @@ -60453,7 +60453,7 @@ /obj/effect/landmark/start{ name = "Botanist" }, -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /turf/open/floor/plasteel, /area/hydroponics) "cat" = ( @@ -62681,7 +62681,7 @@ name = "Medbay Storage" }) "cdZ" = ( -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /obj/effect/landmark/start{ name = "Medical Doctor" }, @@ -62813,7 +62813,7 @@ /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 2 }, -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /turf/open/floor/plasteel/white, /area/medical/medbay{ name = "Medbay Central" @@ -62903,7 +62903,7 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 5 }, -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /obj/structure/disposalpipe/segment, /turf/open/floor/plasteel/white, /area/medical/research{ @@ -67302,7 +67302,7 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 6 }, -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /turf/open/floor/plasteel/white, /area/medical/sleeper{ name = "Sleepers" @@ -68035,7 +68035,7 @@ /turf/open/floor/plasteel/black, /area/medical/surgery) "cni" = ( -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /turf/open/floor/plasteel/black, /area/medical/surgery) "cnj" = ( @@ -68401,7 +68401,7 @@ /turf/open/floor/plasteel/white, /area/toxins/lab) "cnP" = ( -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /turf/open/floor/plasteel/warnwhite{ dir = 4 }, @@ -68959,7 +68959,7 @@ d2 = 4; icon_state = "2-4" }, -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /obj/structure/disposalpipe/segment, /turf/open/floor/plasteel/white, /area/medical/chemistry) @@ -69228,7 +69228,7 @@ /area/toxins/explab) "cpj" = ( /obj/structure/window/reinforced, -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /turf/open/floor/plasteel/black, /area/construction/hallway{ name = "\improper MiniSat Exterior" @@ -70009,7 +70009,7 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /turf/open/floor/plasteel/white, /area/toxins/explab) "cqC" = ( @@ -71051,7 +71051,7 @@ /obj/effect/landmark/start{ name = "Medical Doctor" }, -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /turf/open/floor/plasteel/white, /area/medical/surgery) "csm" = ( @@ -71995,7 +71995,7 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /turf/open/floor/plasteel/barber{ dir = 8 }, @@ -74706,7 +74706,7 @@ }, /area/crew_quarters/hor) "cyg" = ( -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /turf/open/floor/plasteel/cafeteria{ dir = 5 }, @@ -75051,7 +75051,7 @@ /obj/effect/landmark/start{ name = "Geneticist" }, -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 6 }, @@ -77580,7 +77580,7 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /obj/effect/landmark/start{ name = "Scientist" }, @@ -77757,7 +77757,7 @@ }) "cDg" = ( /obj/item/weapon/cigbutt, -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /turf/open/floor/plasteel/cafeteria{ dir = 5 }, @@ -81029,7 +81029,7 @@ /obj/effect/landmark{ name = "lightsout" }, -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /turf/open/floor/plasteel/white, /area/medical/virology) "cIL" = ( @@ -82522,7 +82522,7 @@ /turf/open/floor/plasteel/white, /area/assembly/robotics) "cKW" = ( -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /turf/open/floor/plasteel/white, /area/assembly/robotics) "cKX" = ( @@ -87322,7 +87322,7 @@ name = "\improper Departure Lounge" }) "cTf" = ( -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /turf/open/floor/plasteel/delivery, /area/hallway/secondary/exit{ name = "\improper Departure Lounge" @@ -87611,7 +87611,7 @@ /turf/open/floor/plasteel/vault, /area/chapel/main) "cTK" = ( -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /turf/open/floor/plasteel/vault, /area/chapel/main) "cTL" = ( @@ -88371,7 +88371,7 @@ /turf/open/floor/plasteel/white, /area/toxins/xenobiology) "cUY" = ( -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /obj/structure/cable/yellow{ d1 = 1; d2 = 2; @@ -90339,7 +90339,7 @@ /obj/effect/landmark{ name = "lightsout" }, -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /turf/open/floor/plasteel/white, /area/toxins/xenobiology) "cYH" = ( @@ -92751,7 +92751,7 @@ pixel_x = 32; pixel_y = 0 }, -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /turf/open/floor/mineral/titanium/blue, /area/shuttle/escape) "dds" = ( diff --git a/_maps/map_files/MiniStation/MiniStation.dmm b/_maps/map_files/MiniStation/MiniStation.dmm index 4ce944db0599..8b4ca7f63ac5 100644 --- a/_maps/map_files/MiniStation/MiniStation.dmm +++ b/_maps/map_files/MiniStation/MiniStation.dmm @@ -13899,7 +13899,7 @@ /turf/open/floor/plasteel, /area/tcommsat/computer) "FQ" = ( -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/effect/landmark/start{ name = "Cyborg" diff --git a/_maps/map_files/TgStation/tgstation.2.1.3.dmm b/_maps/map_files/TgStation/tgstation.2.1.3.dmm index a2f3aebcc6ab..4146891a1c38 100644 --- a/_maps/map_files/TgStation/tgstation.2.1.3.dmm +++ b/_maps/map_files/TgStation/tgstation.2.1.3.dmm @@ -371,7 +371,7 @@ /turf/closed/wall/r_wall, /area/security/transfer) "abh" = ( -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /turf/open/floor/plasteel/floorgrime, /area/security/prison) "abi" = ( @@ -948,7 +948,7 @@ /turf/open/floor/carpet, /area/security/hos) "act" = ( -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /turf/open/floor/carpet, /area/security/hos) "acu" = ( @@ -3031,7 +3031,7 @@ /turf/open/floor/plasteel, /area/security/main) "agC" = ( -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /obj/structure/cable{ d1 = 1; d2 = 2; @@ -3206,7 +3206,7 @@ /turf/open/floor/plasteel/showroomfloor, /area/security/warden) "agV" = ( -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/structure/cable{ d1 = 1; @@ -5353,7 +5353,7 @@ }, /area/crew_quarters/courtroom) "ald" = ( -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /turf/open/floor/plasteel/bot, /area/crew_quarters/courtroom) "ale" = ( @@ -6645,7 +6645,7 @@ /turf/open/floor/plasteel, /area/hallway/primary/fore) "anS" = ( -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /turf/open/floor/plasteel, /area/hallway/primary/fore) "anT" = ( @@ -10280,7 +10280,7 @@ icon_state = "1-2"; pixel_y = 0 }, -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel, /area/crew_quarters/fitness) @@ -10455,7 +10455,7 @@ d2 = 8; icon_state = "4-8" }, -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -10860,7 +10860,7 @@ /turf/closed/wall, /area/maintenance/fpmaint2) "axL" = ( -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel, /area/crew_quarters/sleep) @@ -12458,7 +12458,7 @@ /turf/open/floor/plasteel, /area/ai_monitored/storage/eva) "aBo" = ( -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -17712,7 +17712,7 @@ /turf/open/floor/plating, /area/hallway/secondary/exit) "aNb" = ( -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /turf/open/floor/plasteel, /area/hallway/secondary/entry) "aNc" = ( @@ -20872,7 +20872,7 @@ /turf/open/floor/plasteel, /area/bridge) "aVk" = ( -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /obj/structure/cable{ d1 = 4; d2 = 8; @@ -21040,7 +21040,7 @@ /turf/open/floor/plasteel/bar, /area/crew_quarters/bar) "aVx" = ( -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /turf/open/floor/plasteel/bar, /area/crew_quarters/bar) "aVy" = ( @@ -22179,7 +22179,7 @@ /turf/open/floor/carpet, /area/library) "aXV" = ( -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /turf/open/floor/carpet, /area/library) "aXW" = ( @@ -22732,7 +22732,7 @@ }, /area/hallway/secondary/exit) "aZk" = ( -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel, /area/hallway/secondary/exit) @@ -23866,7 +23866,7 @@ /turf/open/floor/plasteel/black, /area/ai_monitored/turret_protected/ai_upload) "bcf" = ( -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /obj/structure/cable{ d1 = 1; d2 = 2; @@ -24543,7 +24543,7 @@ /turf/open/floor/plasteel/freezer, /area/crew_quarters/locker/locker_toilet) "bdK" = ( -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -25870,7 +25870,7 @@ d2 = 2; icon_state = "1-2" }, -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /turf/open/floor/wood, /area/crew_quarters/captain) "bgX" = ( @@ -27206,7 +27206,7 @@ }, /area/medical/chemistry) "bjS" = ( -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel/white, /area/medical/medbay) @@ -28018,7 +28018,7 @@ /turf/open/floor/plasteel, /area/assembly/chargebay) "blt" = ( -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 8 }, @@ -28193,7 +28193,7 @@ }, /area/toxins/lab) "blL" = ( -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /turf/open/floor/plasteel/white, /area/toxins/lab) "blM" = ( @@ -28206,7 +28206,7 @@ }, /area/assembly/robotics) "blN" = ( -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /turf/open/floor/plasteel/white, /area/assembly/robotics) "blO" = ( @@ -30442,7 +30442,7 @@ /turf/open/floor/plasteel/bot, /area/quartermaster/office) "bqt" = ( -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /turf/open/floor/plasteel, /area/quartermaster/office) "bqu" = ( @@ -30486,7 +30486,7 @@ }, /area/crew_quarters/heads) "bqB" = ( -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /turf/open/floor/carpet, /area/crew_quarters/heads) "bqC" = ( @@ -30532,7 +30532,7 @@ d2 = 8; icon_state = "4-8" }, -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /turf/open/floor/plasteel, /area/engine/gravity_generator) "bqF" = ( @@ -31603,7 +31603,7 @@ /turf/open/floor/plasteel/white, /area/toxins/explab) "bsG" = ( -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 1 }, @@ -32100,7 +32100,7 @@ /turf/open/floor/plasteel, /area/teleporter) "btK" = ( -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /obj/structure/cable{ d1 = 4; d2 = 8; @@ -32358,7 +32358,7 @@ /turf/open/floor/plasteel/white, /area/medical/genetics) "bum" = ( -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /turf/open/floor/plasteel/white, /area/medical/genetics) "bun" = ( @@ -32917,7 +32917,7 @@ /turf/open/floor/plasteel/black, /area/medical/sleeper) "bvm" = ( -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /turf/open/floor/plasteel/white, /area/medical/sleeper) "bvn" = ( @@ -33794,7 +33794,7 @@ /turf/open/floor/plasteel/black, /area/medical/sleeper) "bxc" = ( -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 8 @@ -34423,7 +34423,7 @@ /turf/open/floor/plasteel/cafeteria, /area/crew_quarters/hor) "byr" = ( -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /turf/open/floor/plasteel/white, /area/crew_quarters/hor) "bys" = ( @@ -34501,7 +34501,7 @@ }, /area/quartermaster/qm) "byC" = ( -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /turf/open/floor/plasteel/brown{ dir = 1 }, @@ -35207,7 +35207,7 @@ /turf/open/floor/plasteel, /area/hallway/primary/central) "bAf" = ( -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /turf/open/floor/plasteel, /area/hallway/primary/central) "bAg" = ( @@ -38242,7 +38242,7 @@ /turf/open/floor/plasteel/white, /area/toxins/mixing) "bGA" = ( -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 6 }, @@ -38500,7 +38500,7 @@ /turf/open/floor/plasteel/floorgrime, /area/toxins/storage) "bGZ" = ( -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /turf/open/floor/plasteel/barber, /area/medical/cmo) "bHa" = ( @@ -39488,7 +39488,7 @@ icon_state = "1-2"; pixel_y = 0 }, -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -41346,7 +41346,7 @@ /turf/open/floor/plasteel, /area/hallway/primary/aft) "bMH" = ( -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 8 }, @@ -42339,7 +42339,7 @@ }, /area/atmos) "bOU" = ( -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -44230,7 +44230,7 @@ /turf/open/floor/plasteel, /area/engine/break_room) "bTh" = ( -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel, /area/engine/break_room) @@ -44457,7 +44457,7 @@ /turf/open/floor/plasteel/red/side, /area/security/checkpoint/engineering) "bTI" = ( -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel, /area/tcommsat/computer) @@ -49757,7 +49757,7 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /turf/open/floor/plasteel/white, /area/medical/research{ name = "Research Division" @@ -50045,7 +50045,7 @@ /turf/open/floor/plating, /area/engine/engineering) "cfE" = ( -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /turf/open/floor/plasteel/neutral{ dir = 2 }, @@ -51403,7 +51403,7 @@ }, /area/engine/chiefs_office) "cip" = ( -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /turf/open/floor/plasteel, /area/engine/engineering) "ciq" = ( @@ -54381,7 +54381,7 @@ /turf/open/floor/plasteel, /area/engine/engineering) "coM" = ( -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -56567,7 +56567,7 @@ /turf/open/floor/plasteel/grimy, /area/ai_monitored/turret_protected/aisat_interior) "ctJ" = ( -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/structure/cable{ d1 = 2; @@ -57061,7 +57061,7 @@ name = "AI Satellite Atmospherics" }) "cuC" = ( -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel/black, /area/ai_monitored/turret_protected/AIsatextAS{ @@ -57125,7 +57125,7 @@ d2 = 2; icon_state = "1-2" }, -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 @@ -57161,7 +57161,7 @@ name = "AI Satellite Service" }) "cuJ" = ( -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -57899,7 +57899,7 @@ d2 = 2; icon_state = "1-2" }, -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel/black, /area/ai_monitored/turret_protected/AIsatextFS{ @@ -58229,7 +58229,7 @@ d2 = 8; icon_state = "2-8" }, -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 9; pixel_y = 0 @@ -60175,7 +60175,7 @@ icon_state = "alarm0"; pixel_y = -22 }, -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /turf/open/floor/plasteel/black, /area/ai_monitored/turret_protected/ai) "cBf" = ( diff --git a/_maps/shuttles/emergency_meta.dmm b/_maps/shuttles/emergency_meta.dmm index dce75f11ff49..b9b3e0626848 100644 --- a/_maps/shuttles/emergency_meta.dmm +++ b/_maps/shuttles/emergency_meta.dmm @@ -302,7 +302,7 @@ pixel_x = 32; pixel_y = 0 }, -/obj/machinery/hologram/holopad, +/obj/machinery/holopad, /turf/open/floor/mineral/titanium/blue, /area/shuttle/escape) "aO" = ( diff --git a/code/datums/diseases/transformation.dm b/code/datums/diseases/transformation.dm index f3054dcaeb3c..33c394e5bccd 100644 --- a/code/datums/diseases/transformation.dm +++ b/code/datums/diseases/transformation.dm @@ -45,13 +45,10 @@ if(affected_mob.notransform) return affected_mob.notransform = 1 - for(var/obj/item/W in affected_mob) - if(istype(W, /obj/item/weapon/implant)) - qdel(W) - continue - W.layer = initial(W.layer) - W.loc = affected_mob.loc - W.dropped(affected_mob) + for(var/obj/item/W in affected_mob.get_equipped_items()) + affected_mob.unEquip(W) + for(var/obj/item/I in affected_mob.held_items) + affected_mob.unEquip(I) var/mob/living/new_mob = new new_form(affected_mob.loc) if(istype(new_mob)) new_mob.a_intent = "harm" diff --git a/code/datums/mind.dm b/code/datums/mind.dm index 7d12dd05993d..f5fe92b9316d 100644 --- a/code/datums/mind.dm +++ b/code/datums/mind.dm @@ -297,7 +297,7 @@ text += " Reequip (gives traitor uplink)." if (objectives.len==0) text += "
Objectives are empty! Set to kill all heads." - else if(isloyal(current)) + else if(current.isloyal()) text += "head|LOYAL|employee|headrev|rev" else if (src in ticker.mode.revolutionaries) text += "head|loyal|employee|headrev|REV" @@ -316,7 +316,7 @@ if (ticker.mode.config_tag=="gang") text = uppertext(text) text = "[text]: " - text += "[isloyal(current) ? "LOYAL" : "loyal"]|" + text += "[current.isloyal() ? "LOYAL" : "loyal"]|" if(src in ticker.mode.get_all_gangsters()) text += "none" else @@ -423,7 +423,7 @@ text += "loyal|employee|CULTIST" text += "
Give tome|amulet." - else if(isloyal(current)) + else if(current.isloyal()) text += "LOYAL|employee|cultist" else if(is_convertable_to_cult(current)) text += "loyal|EMPLOYEE|cultist" @@ -445,7 +445,7 @@ if(is_servant_of_ratvar(current)) text += "loyal|employee|SERVANT" text += "
Give slab" - else if(isloyal(current)) + else if(current.isloyal()) text += "LOYAL|employee|servant" else if(is_eligible_servant(current)) text += "loyal|EMPLOYEE|servant" diff --git a/code/game/atoms.dm b/code/game/atoms.dm index 504f72613c11..eb24d708c1f2 100644 --- a/code/game/atoms.dm +++ b/code/game/atoms.dm @@ -201,9 +201,7 @@ return /atom/proc/contents_explosion(severity, target) - for(var/atom/A in contents) - A.ex_act(severity, target) - CHECK_TICK + return /atom/proc/ex_act(severity, target) contents_explosion(severity, target) @@ -441,4 +439,4 @@ var/list/blood_splatter_icons = list() admin_spawned = TRUE /atom/proc/mech_melee_attack(obj/mecha/M) - return + return diff --git a/code/game/data_huds.dm b/code/game/data_huds.dm index abdbfb5206b3..32f6133ee0e2 100644 --- a/code/game/data_huds.dm +++ b/code/game/data_huds.dm @@ -198,23 +198,22 @@ for(var/i in list(IMPTRACK_HUD, IMPLOYAL_HUD, IMPCHEM_HUD)) holder = hud_list[i] holder.icon_state = null - for(var/obj/item/weapon/implant/I in src) - if(I.implanted) - if(istype(I,/obj/item/weapon/implant/tracking)) - holder = hud_list[IMPTRACK_HUD] - var/icon/IC = icon(icon, icon_state, dir) - holder.pixel_y = IC.Height() - world.icon_size - holder.icon_state = "hud_imp_tracking" - else if(istype(I,/obj/item/weapon/implant/mindshield)) - holder = hud_list[IMPLOYAL_HUD] - var/icon/IC = icon(icon, icon_state, dir) - holder.pixel_y = IC.Height() - world.icon_size - holder.icon_state = "hud_imp_loyal" - else if(istype(I,/obj/item/weapon/implant/chem)) - holder = hud_list[IMPCHEM_HUD] - var/icon/IC = icon(icon, icon_state, dir) - holder.pixel_y = IC.Height() - world.icon_size - holder.icon_state = "hud_imp_chem" + for(var/obj/item/weapon/implant/I in implants) + if(istype(I,/obj/item/weapon/implant/tracking)) + holder = hud_list[IMPTRACK_HUD] + var/icon/IC = icon(icon, icon_state, dir) + holder.pixel_y = IC.Height() - world.icon_size + holder.icon_state = "hud_imp_tracking" + else if(istype(I,/obj/item/weapon/implant/mindshield)) + holder = hud_list[IMPLOYAL_HUD] + var/icon/IC = icon(icon, icon_state, dir) + holder.pixel_y = IC.Height() - world.icon_size + holder.icon_state = "hud_imp_loyal" + else if(istype(I,/obj/item/weapon/implant/chem)) + holder = hud_list[IMPCHEM_HUD] + var/icon/IC = icon(icon, icon_state, dir) + holder.pixel_y = IC.Height() - world.icon_size + holder.icon_state = "hud_imp_chem" /mob/living/carbon/human/proc/sec_hud_set_security_status() var/image/holder = hud_list[WANTED_HUD] diff --git a/code/game/gamemodes/clock_cult/clock_cult.dm b/code/game/gamemodes/clock_cult/clock_cult.dm index 69c3db97d8de..0f1e5ef22313 100644 --- a/code/game/gamemodes/clock_cult/clock_cult.dm +++ b/code/game/gamemodes/clock_cult/clock_cult.dm @@ -55,7 +55,7 @@ Credit where due: return 0 else return 0 - if(iscultist(M) || isconstruct(M) || isloyal(M)) + if(iscultist(M) || isconstruct(M) || M.isloyal()) return 0 if(ishuman(M) || isbrain(M) || isguardian(M) || issilicon(M) || isclockmob(M) || istype(M, /mob/living/simple_animal/drone/cogscarab)) return 1 diff --git a/code/game/gamemodes/clock_cult/clock_scripture.dm b/code/game/gamemodes/clock_cult/clock_scripture.dm index ebb60dc031b9..5dfc3f1f30d8 100644 --- a/code/game/gamemodes/clock_cult/clock_scripture.dm +++ b/code/game/gamemodes/clock_cult/clock_scripture.dm @@ -1086,7 +1086,7 @@ Judgement: 10 servants, 100 CV, and any existing AIs are converted or destroyed H << "[text2ratvar("Oh, a void weapon. How annoying, I may as well not bother.")]\n\ Your holy weapon glows a faint orange in an attempt to defend your mind!" messaged = TRUE - if(isloyal(H)) + if(H.isloyal()) visualsdistance = round(visualsdistance * 0.5) //half effect for shielded targets minordistance = round(minordistance * 0.5) majordistance = round(majordistance * 0.5) diff --git a/code/game/gamemodes/clock_cult/clock_structures.dm b/code/game/gamemodes/clock_cult/clock_structures.dm index 790c7063d5a9..c7c352f1ad49 100644 --- a/code/game/gamemodes/clock_cult/clock_structures.dm +++ b/code/game/gamemodes/clock_cult/clock_structures.dm @@ -827,13 +827,13 @@ resist_string = "glows bright orange" /obj/effect/clockwork/sigil/submission/accession/post_channel(mob/living/L) - if(isloyal(L)) + if(L.isloyal()) + var/mob/living/carbon/C = L delete_on_finish = TRUE - L.visible_message("[L] visibly trembles!", \ + C.visible_message("[C] visibly trembles!", \ "[text2ratvar("You will be mine and his. This puny trinket will not stop me.")]") - for(var/obj/item/weapon/implant/mindshield/M in L) - if(M.implanted) - qdel(M) + for(var/obj/item/weapon/implant/mindshield/M in C.implants) + qdel(M) /obj/effect/clockwork/sigil/transmission name = "suspicious sigil" diff --git a/code/game/gamemodes/cult/cult.dm b/code/game/gamemodes/cult/cult.dm index 79183c029e29..c2d35148fa47 100644 --- a/code/game/gamemodes/cult/cult.dm +++ b/code/game/gamemodes/cult/cult.dm @@ -26,7 +26,7 @@ return 0 else return 0 - if(isloyal(M) || issilicon(M) || isbot(M) || isdrone(M) || is_servant_of_ratvar(M)) + if(M.isloyal() || issilicon(M) || isbot(M) || isdrone(M) || is_servant_of_ratvar(M)) return 0 //can't convert machines, shielded, or ratvar's dogs return 1 diff --git a/code/game/gamemodes/gang/gang.dm b/code/game/gamemodes/gang/gang.dm index b9f5eaebc283..c5336b842395 100644 --- a/code/game/gamemodes/gang/gang.dm +++ b/code/game/gamemodes/gang/gang.dm @@ -158,7 +158,7 @@ var/list/gang_colors_pool = list("red","orange","yellow","green","blue","purple" /datum/game_mode/proc/add_gangster(datum/mind/gangster_mind, datum/gang/G, check = 1) if(!G || (gangster_mind in get_all_gangsters()) || (gangster_mind.enslaved_to && !is_gangster(gangster_mind.enslaved_to))) return 0 - if(check && isloyal(gangster_mind.current)) //Check to see if the potential gangster is implanted + if(check && gangster_mind.current.isloyal()) //Check to see if the potential gangster is implanted return 1 G.gangsters += gangster_mind gangster_mind.gang_datum = G diff --git a/code/game/gamemodes/gang/gang_pen.dm b/code/game/gamemodes/gang/gang_pen.dm index fde2f5157b55..65209cc96620 100644 --- a/code/game/gamemodes/gang/gang_pen.dm +++ b/code/game/gamemodes/gang/gang_pen.dm @@ -57,64 +57,3 @@ icon_state = "pen" var/mob/M = get(src, /mob) M << "\icon[src] [src][(src.loc == M)?(""):(" in your [src.loc]")] vibrates softly. It is ready to be used again." - - -////////////// -// IMPLANTS // -////////////// - -/obj/item/weapon/implant/gang - name = "gang implant" - desc = "Makes you a gangster or such." - activated = 0 - origin_tech = "materials=2;biotech=4;programming=4;syndicate=3" - var/datum/gang/gang - -/obj/item/weapon/implant/gang/New(loc,var/setgang) - ..() - gang = setgang - -/obj/item/weapon/implant/gang/get_data() - var/dat = {"Implant Specifications:
- Name: Criminal brainwash implant
- Life: A few seconds after injection.
- Important Notes: Illegal
-
- Implant Details:
- Function: Contains a small pod of nanobots that change the host's brain to be loyal to a certain organization.
- Special Features: This device will also emit a small EMP pulse, destroying any other implants within the host's brain.
- Integrity: Implant's EMP function will destroy itself in the process."} - return dat - -/obj/item/weapon/implant/gang/implant(mob/target) - if(..()) - for(var/obj/item/weapon/implant/I in target) - if(I != src) - qdel(I) - - if(!target.mind || target.stat == DEAD) - return 0 - - var/success - if(target.mind in ticker.mode.get_gangsters()) - if(ticker.mode.remove_gangster(target.mind,0,1)) - success = 1 //Was not a gang boss, convert as usual - else - success = 1 - - if(ishuman(target)) - if(!success) - target.visible_message("[target] seems to resist the implant!", "You feel the influence of your enemies try to invade your mind!") - - qdel(src) - return -1 - -/obj/item/weapon/implanter/gang - name = "implanter (gang)" - -/obj/item/weapon/implanter/gang/New(loc, var/gang) - if(!gang) - qdel(src) - return - imp = new /obj/item/weapon/implant/gang(src,gang) - ..() diff --git a/code/game/gamemodes/miniantags/abduction/abduction_gear.dm b/code/game/gamemodes/miniantags/abduction/abduction_gear.dm index 7b128975915f..73cb67faffbf 100644 --- a/code/game/gamemodes/miniantags/abduction/abduction_gear.dm +++ b/code/game/gamemodes/miniantags/abduction/abduction_gear.dm @@ -243,54 +243,6 @@ if(!istype(I,/obj/item/device/radio/headset)) r.broadcasting = 0 //goddamned headset hacks - -/obj/item/weapon/implant/abductor - name = "recall implant" - desc = "Returns you to the mothership." - icon = 'icons/obj/abductor.dmi' - icon_state = "implant" - activated = 1 - origin_tech = "materials=2;biotech=7;magnets=4;bluespace=4;abductor=5" - var/obj/machinery/abductor/pad/home - var/cooldown = 30 - -/obj/item/weapon/implant/abductor/activate() - if(cooldown == initial(cooldown)) - home.Retrieve(imp_in,1) - cooldown = 0 - START_PROCESSING(SSobj, src) - else - imp_in << "You must wait [30 - cooldown] seconds to use [src] again!" - -/obj/item/weapon/implant/abductor/process() - if(cooldown < initial(cooldown)) - cooldown++ - if(cooldown == initial(cooldown)) - STOP_PROCESSING(SSobj, src) - -/obj/item/weapon/implant/abductor/implant(var/mob/source, var/mob/user) - if(..()) - var/obj/machinery/abductor/console/console - if(ishuman(source)) - var/mob/living/carbon/human/H = source - if(H.dna.species.id == "abductor") - var/datum/species/abductor/S = H.dna.species - console = get_team_console(S.team) - home = console.pad - - if(!home) - console = get_team_console(pick(1, 2, 3, 4)) - home = console.pad - return 1 - -/obj/item/weapon/implant/abductor/proc/get_team_console(var/team) - var/obj/machinery/abductor/console/console - for(var/obj/machinery/abductor/console/c in machines) - if(c.team == team) - console = c - break - return console - /obj/item/device/firing_pin/abductor name = "alien firing pin" icon_state = "firing_pin_ayy" diff --git a/code/game/gamemodes/miniantags/abduction/abduction_surgery.dm b/code/game/gamemodes/miniantags/abduction/abduction_surgery.dm index d095f67df43c..def0cd77e2ff 100644 --- a/code/game/gamemodes/miniantags/abduction/abduction_surgery.dm +++ b/code/game/gamemodes/miniantags/abduction/abduction_surgery.dm @@ -10,7 +10,7 @@ var/mob/living/carbon/human/H = user if(H.dna.species.id == "abductor") return 1 - if((locate(/obj/item/weapon/implant/abductor) in H)) + for(var/obj/item/weapon/implant/abductor/A in H.implants) return 1 return 0 diff --git a/code/game/gamemodes/revolution/revolution.dm b/code/game/gamemodes/revolution/revolution.dm index 901d6f986eb2..ca78c4b2787c 100644 --- a/code/game/gamemodes/revolution/revolution.dm +++ b/code/game/gamemodes/revolution/revolution.dm @@ -238,7 +238,7 @@ if(rev_mind.assigned_role in command_positions) return 0 var/mob/living/carbon/human/H = rev_mind.current//Check to see if the potential rev is implanted - if(isloyal(H)) + if(H.isloyal()) return 0 if((rev_mind in revolutionaries) || (rev_mind in head_revolutionaries)) return 0 diff --git a/code/game/gamemodes/wizard/artefact.dm b/code/game/gamemodes/wizard/artefact.dm index 88611b5eb6b2..2d998b9c1e3b 100644 --- a/code/game/gamemodes/wizard/artefact.dm +++ b/code/game/gamemodes/wizard/artefact.dm @@ -416,10 +416,10 @@ var/global/list/multiverse = list() M.equip_to_slot_or_del(new /obj/item/weapon/kitchen/knife(M), slot_l_store) M.equip_to_slot_or_del(new /obj/item/weapon/scalpel(M), slot_r_store) M.put_in_hands_or_del(sword) - for(var/obj/item/carried_item in M.contents) - if(!istype(carried_item, /obj/item/weapon/implant)) - carried_item.add_mob_blood(M) - + for(var/obj/item/carried_item in M.get_equipped_items()) + carried_item.add_mob_blood(M) + for(var/obj/item/I in M.held_items) + I.add_mob_blood(M) if("pirate") M.equip_to_slot_or_del(new /obj/item/clothing/under/pirate(M), slot_w_uniform) M.equip_to_slot_or_del(new /obj/item/clothing/shoes/sneakers/brown(M), slot_shoes) diff --git a/code/game/machinery/PDApainter.dm b/code/game/machinery/PDApainter.dm index 19e8ce9fb6c8..e1bf3e234335 100644 --- a/code/game/machinery/PDApainter.dm +++ b/code/game/machinery/PDApainter.dm @@ -41,6 +41,25 @@ src.colorlist += D +/obj/machinery/pdapainter/Destroy() + if(storedpda) + qdel(storedpda) + storedpda = null + return ..() + +/obj/machinery/pdapainter/on_deconstruction() + if(storedpda) + storedpda.forceMove(loc) + storedpda = null + +/obj/machinery/pdapainter/contents_explosion(severity, target) + if(storedpda) + storedpda.ex_act(severity, target) + +/obj/machinery/pdapainter/handle_atom_del(atom/A) + if(A == storedpda) + storedpda = null + update_icon() /obj/machinery/pdapainter/attackby(obj/item/O, mob/user, params) if(default_unfasten_wrench(user, O)) diff --git a/code/game/machinery/cloning.dm b/code/game/machinery/cloning.dm index 72b74fe486b5..e82965faa419 100644 --- a/code/game/machinery/cloning.dm +++ b/code/game/machinery/cloning.dm @@ -98,23 +98,6 @@ ..() user << "The write-protect tab is set to [read_only ? "protected" : "unprotected"]." -//Health Tracker Implant - -/obj/item/weapon/implant/health - name = "health implant" - activated = 0 - var/healthstring = "" - -/obj/item/weapon/implant/health/proc/sensehealth() - if (!implanted) - return "ERROR" - else - if(isliving(implanted)) - var/mob/living/L = implanted - healthstring = "Oxygen Deprivation Damage => [round(L.getOxyLoss())]
Fire Damage => [round(L.getFireLoss())]
Toxin Damage => [round(L.getToxLoss())]
Brute Force Damage => [round(L.getBruteLoss())]
" - if (!healthstring) - healthstring = "ERROR" - return healthstring //Clonepod @@ -377,6 +360,13 @@ /obj/machinery/clonepod/ex_act(severity, target) ..() if(!qdeleted(src)) + locked = FALSE + go_out() + +/obj/machinery/clonepod/handle_atom_del(atom/A) + if(A == occupant) + occupant = null + locked = FALSE go_out() /obj/machinery/clonepod/deconstruct(disassembled = TRUE) diff --git a/code/game/machinery/computer/card.dm b/code/game/machinery/computer/card.dm index 65368175f4e8..f78b10de7dad 100644 --- a/code/game/machinery/computer/card.dm +++ b/code/game/machinery/computer/card.dm @@ -67,6 +67,32 @@ var/time_last_changed_position = 0 else return ..() +/obj/machinery/computer/card/Destroy() + if(scan) + qdel(scan) + scan = null + if(modify) + qdel(modify) + modify = null + return ..() + +/obj/machinery/computer/card/handle_atom_del(atom/A) + ..() + if(A == scan) + scan = null + updateUsrDialog() + if(A == modify) + modify = null + updateUsrDialog() + +/obj/machinery/computer/card/on_deconstruction() + if(scan) + scan.forceMove(loc) + scan = null + if(modify) + modify.forceMove(loc) + modify = null + //Check if you can't open a new position for a certain job /obj/machinery/computer/card/proc/job_blacklisted(jobtitle) return (jobtitle in blacklisted) diff --git a/code/game/machinery/computer/cloning.dm b/code/game/machinery/computer/cloning.dm index 0ad5c1ef21ec..21890176ee45 100644 --- a/code/game/machinery/computer/cloning.dm +++ b/code/game/machinery/computer/cloning.dm @@ -384,15 +384,16 @@ R.fields["blood_type"] = subject.dna.blood_type R.fields["features"] = subject.dna.features R.fields["factions"] = subject.faction + //Add an implant if needed - var/obj/item/weapon/implant/health/imp = locate(/obj/item/weapon/implant/health, subject) + var/obj/item/weapon/implant/health/imp + for(var/obj/item/weapon/implant/health/HI in subject.implants) + imp = HI + break if(!imp) imp = new /obj/item/weapon/implant/health(subject) - imp.implanted = subject - R.fields["imp"] = "\ref[imp]" - //Update it if needed - else - R.fields["imp"] = "\ref[imp]" + imp.implant(subject) + R.fields["imp"] = "\ref[imp]" if (!isnull(subject.mind)) //Save that mind so traitors can continue traitoring after cloning. R.fields["mind"] = "\ref[subject.mind]" diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm index a780d26d25d9..1a106abba838 100644 --- a/code/game/machinery/doors/airlock.dm +++ b/code/game/machinery/doors/airlock.dm @@ -169,6 +169,12 @@ var/list/airlock_overlays = list() /obj/machinery/door/airlock/Destroy() qdel(wires) wires = null + if(charge) + qdel(charge) + charge = null + if(electronics) + qdel(electronics) + electronics = null if (cyclelinkedairlock) if (cyclelinkedairlock.cyclelinkedairlock == src) cyclelinkedairlock.cyclelinkedairlock = null @@ -882,7 +888,7 @@ var/list/airlock_overlays = list() user.drop_item() panel_open = 0 update_icon() - C.loc = src + C.forceMove(src) charge = C else return ..() @@ -921,7 +927,7 @@ var/list/airlock_overlays = list() return user.visible_message("[user] removes [charge] from [src].", \ "You gently pry out [charge] from [src] and unhook its wires.") - charge.loc = get_turf(user) + charge.forceMove(get_turf(user)) charge = null return if( beingcrowbarred && (density && welded && !operating && src.panel_open && (!hasPower()) && !src.locked) ) diff --git a/code/game/machinery/hologram.dm b/code/game/machinery/hologram.dm index 6545d93f90b2..9b2f881a4beb 100644 --- a/code/game/machinery/hologram.dm +++ b/code/game/machinery/hologram.dm @@ -31,7 +31,7 @@ Possible to do for anyone motivated enough: var/const/HOLOPAD_MODE = RANGE_BASED -/obj/machinery/hologram/holopad +/obj/machinery/holopad name = "\improper AI holopad" desc = "It's a floor-mounted device for projecting holographic images. It is activated remotely." icon_state = "holopad0" @@ -39,6 +39,10 @@ var/const/HOLOPAD_MODE = RANGE_BASED flags = HEAR languages_spoken = ROBOT | HUMAN languages_understood = ROBOT | HUMAN + anchored = 1 + use_power = 1 + idle_power_usage = 5 + active_power_usage = 100 obj_integrity = 300 max_integrity = 300 armor = list(melee = 50, bullet = 20, laser = 20, energy = 20, bomb = 0, bio = 0, rad = 0, fire = 50, acid = 0) @@ -47,25 +51,29 @@ var/const/HOLOPAD_MODE = RANGE_BASED var/holo_range = 5 // Change to change how far the AI can move away from the holopad before deactivating. var/temp = "" -/obj/machinery/hologram/holopad/New() +/obj/machinery/holopad/New() ..() var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/holopad(null) B.apply_default_parts(src) -/obj/item/weapon/circuitboard/machine/holopad - name = "circuit board (AI Holopad)" - build_path = /obj/machinery/hologram/holopad - origin_tech = "programming=1" - req_components = list(/obj/item/weapon/stock_parts/capacitor = 1) +/obj/machinery/holopad/Destroy() + for (var/mob/living/silicon/ai/master in masters) + clear_holo(master) + return ..() +/obj/machinery/holo_pad/power_change() + if (powered()) + stat &= ~NOPOWER + else + stat |= ~NOPOWER -/obj/machinery/hologram/holopad/RefreshParts() +/obj/machinery/holopad/RefreshParts() var/holograph_range = 4 for(var/obj/item/weapon/stock_parts/capacitor/B in component_parts) holograph_range += 1 * B.rating holo_range = holograph_range -/obj/machinery/hologram/holopad/attackby(obj/item/P, mob/user, params) +/obj/machinery/holopad/attackby(obj/item/P, mob/user, params) if(default_deconstruction_screwdriver(user, "holopad_open", "holopad0", P)) return @@ -82,11 +90,10 @@ var/const/HOLOPAD_MODE = RANGE_BASED return return ..() - -/obj/machinery/hologram/holopad/AltClick(mob/living/carbon/human/user) +/obj/machinery/holopad/AltClick(mob/living/carbon/human/user) interact(user) -/obj/machinery/hologram/holopad/interact(mob/living/carbon/human/user) //Carn: Hologram requests. +/obj/machinery/holopad/interact(mob/living/carbon/human/user) //Carn: Hologram requests. if(!istype(user)) return if(user.stat || stat & (NOPOWER|BROKEN)) @@ -103,7 +110,7 @@ var/const/HOLOPAD_MODE = RANGE_BASED popup.set_title_image(user.browse_rsc_icon(src.icon, src.icon_state)) popup.open() -/obj/machinery/hologram/holopad/Topic(href, href_list) +/obj/machinery/holopad/Topic(href, href_list) if(..()) return if (href_list["AIrequest"]) @@ -126,7 +133,7 @@ var/const/HOLOPAD_MODE = RANGE_BASED updateDialog() add_fingerprint(usr) -/obj/machinery/hologram/holopad/attack_ai(mob/living/silicon/ai/user) +/obj/machinery/holopad/attack_ai(mob/living/silicon/ai/user) if (!istype(user)) return /*There are pretty much only three ways to interact here. @@ -138,55 +145,8 @@ var/const/HOLOPAD_MODE = RANGE_BASED activate_holo(user) else//If there is a hologram, remove it. clear_holo(user) - return -/obj/machinery/hologram/holopad/proc/activate_holo(mob/living/silicon/ai/user) - if(!(stat & NOPOWER) && user.eyeobj.loc == src.loc)//If the projector has power and client eye is on it - if (istype(user.current, /obj/machinery/hologram/holopad)) - user << "ERROR: \black Image feed in progress." - return - create_holo(user)//Create one. - src.visible_message("A holographic image of [user] flicks to life right before your eyes!") - else - user << "ERROR: \black Unable to project hologram." - return - -/*This is the proc for special two-way communication between AI and holopad/people talking near holopad. -For the other part of the code, check silicon say.dm. Particularly robot talk.*/ -/obj/machinery/hologram/holopad/Hear(message, atom/movable/speaker, message_langs, raw_message, radio_freq, list/spans) - if(speaker && masters.len && !radio_freq)//Master is mostly a safety in case lag hits or something. Radio_freq so AIs dont hear holopad stuff through radios. - for(var/mob/living/silicon/ai/master in masters) - if(masters[master] && speaker != master) - master.relay_speech(message, speaker, message_langs, raw_message, radio_freq, spans) - -/obj/machinery/hologram/holopad/proc/create_holo(mob/living/silicon/ai/A, turf/T = loc) - var/obj/effect/overlay/holo_pad_hologram/h = new(T)//Spawn a blank effect at the location. - h.icon = A.holo_icon - h.mouse_opacity = 0//So you can't click on it. - h.layer = FLY_LAYER//Above all the other objects/mobs. Or the vast majority of them. - h.anchored = 1//So space wind cannot drag it. - h.name = "[A.name] (Hologram)"//If someone decides to right click. - h.SetLuminosity(2) //hologram lighting - masters[A] = h - SetLuminosity(2) //pad lighting - icon_state = "holopad1" - A.current = src - use_power += HOLOGRAM_POWER_USAGE - return 1 - -/obj/machinery/hologram/holopad/proc/clear_holo(mob/living/silicon/ai/user) - if(user.current == src) - user.current = null - qdel(masters[user])//Get rid of user's hologram - masters -= user //Discard AI from the list of those who use holopad - use_power = max(HOLOPAD_PASSIVE_POWER_USAGE, use_power - HOLOGRAM_POWER_USAGE)//Reduce power usage - if (!masters.len)//If no users left - SetLuminosity(0) //pad lighting (hologram lighting will be handled automatically since its owner was deleted) - icon_state = "holopad0" - use_power = HOLOPAD_PASSIVE_POWER_USAGE - return 1 - -/obj/machinery/hologram/holopad/process() +/obj/machinery/holopad/process() if(masters.len)//If there is a hologram. for (var/mob/living/silicon/ai/master in masters) if(master && !master.stat && master.client && master.eyeobj)//If there is an AI attached, it's not incapacitated, it has a client, and the client eye is centered on the projector. @@ -205,7 +165,52 @@ For the other part of the code, check silicon say.dm. Particularly robot talk.*/ clear_holo(master)//If not, we want to get rid of the hologram. return 1 -/obj/machinery/hologram/holopad/proc/move_hologram(mob/living/silicon/ai/user) +/obj/machinery/holopad/proc/activate_holo(mob/living/silicon/ai/user) + if(!(stat & NOPOWER) && user.eyeobj.loc == src.loc)//If the projector has power and client eye is on it + if (istype(user.current, /obj/machinery/holopad)) + user << "ERROR: \black Image feed in progress." + return + create_holo(user)//Create one. + src.visible_message("A holographic image of [user] flicks to life right before your eyes!") + else + user << "ERROR: \black Unable to project hologram." + +/*This is the proc for special two-way communication between AI and holopad/people talking near holopad. +For the other part of the code, check silicon say.dm. Particularly robot talk.*/ +/obj/machinery/holopad/Hear(message, atom/movable/speaker, message_langs, raw_message, radio_freq, list/spans) + if(speaker && masters.len && !radio_freq)//Master is mostly a safety in case lag hits or something. Radio_freq so AIs dont hear holopad stuff through radios. + for(var/mob/living/silicon/ai/master in masters) + if(masters[master] && speaker != master) + master.relay_speech(message, speaker, message_langs, raw_message, radio_freq, spans) + +/obj/machinery/holopad/proc/create_holo(mob/living/silicon/ai/A, turf/T = loc) + var/obj/effect/overlay/holo_pad_hologram/h = new(T)//Spawn a blank effect at the location. + h.icon = A.holo_icon + h.mouse_opacity = 0//So you can't click on it. + h.layer = FLY_LAYER//Above all the other objects/mobs. Or the vast majority of them. + h.anchored = 1//So space wind cannot drag it. + h.name = "[A.name] (Hologram)"//If someone decides to right click. + h.SetLuminosity(2) //hologram lighting + masters[A] = h + SetLuminosity(2) //pad lighting + icon_state = "holopad1" + A.current = src + use_power += HOLOGRAM_POWER_USAGE + return 1 + +/obj/machinery/holopad/proc/clear_holo(mob/living/silicon/ai/user) + if(user.current == src) + user.current = null + qdel(masters[user])//Get rid of user's hologram + masters -= user //Discard AI from the list of those who use holopad + use_power = max(HOLOPAD_PASSIVE_POWER_USAGE, use_power - HOLOGRAM_POWER_USAGE)//Reduce power usage + if (!masters.len)//If no users left + SetLuminosity(0) //pad lighting (hologram lighting will be handled automatically since its owner was deleted) + icon_state = "holopad0" + use_power = HOLOPAD_PASSIVE_POWER_USAGE + return 1 + +/obj/machinery/holopad/proc/move_hologram(mob/living/silicon/ai/user) if(masters[user]) step_to(masters[user], user.eyeobj) // So it turns. var/obj/effect/overlay/holo_pad_hologram/H = masters[user] @@ -213,45 +218,14 @@ For the other part of the code, check silicon say.dm. Particularly robot talk.*/ masters[user] = H return 1 - /obj/effect/overlay/holo_pad_hologram/Process_Spacemove(movement_dir = 0) return 1 -/* - * Hologram - */ - -/obj/machinery/hologram - anchored = 1 - use_power = 1 - idle_power_usage = 5 - active_power_usage = 100 - -/obj/machinery/hologram/power_change() - if (powered()) - stat &= ~NOPOWER - else - stat |= ~NOPOWER - -//Destruction procs. -/obj/machinery/hologram/ex_act(severity, target) - switch(severity) - if(1) - qdel(src) - if(2) - if (prob(50)) - qdel(src) - if(3) - if (prob(5)) - qdel(src) - return - -/obj/machinery/hologram/holopad/Destroy() - for (var/mob/living/silicon/ai/master in masters) - clear_holo(master) - return ..() - - +/obj/item/weapon/circuitboard/machine/holopad + name = "circuit board (AI Holopad)" + build_path = /obj/machinery/holopad + origin_tech = "programming=1" + req_components = list(/obj/item/weapon/stock_parts/capacitor = 1) #undef RANGE_BASED #undef AREA_BASED diff --git a/code/game/machinery/machinery.dm b/code/game/machinery/machinery.dm index 0439e7faea8d..d11748d5eafc 100644 --- a/code/game/machinery/machinery.dm +++ b/code/game/machinery/machinery.dm @@ -322,6 +322,16 @@ Class Procs: if(!(flags & NODECONSTRUCT)) stat |= BROKEN +/obj/machinery/contents_explosion(severity, target) + if(occupant) + occupant.ex_act(severity, target) + +/obj/machinery/handle_atom_del(atom/A) + if(A == occupant) + occupant = null + update_icon() + updateUsrDialog() + /obj/machinery/proc/default_deconstruction_screwdriver(mob/user, icon_state_open, icon_state_closed, obj/item/weapon/screwdriver/S) if(istype(S) && !(flags & NODECONSTRUCT)) playsound(loc, S.usesound, 50, 1) diff --git a/code/game/mecha/equipment/mecha_equipment.dm b/code/game/mecha/equipment/mecha_equipment.dm index 1bc6ff16347a..fd138afa2f24 100644 --- a/code/game/mecha/equipment/mecha_equipment.dm +++ b/code/game/mecha/equipment/mecha_equipment.dm @@ -7,6 +7,8 @@ icon_state = "mecha_equip" force = 5 origin_tech = "materials=2;engineering=2" + obj_integrity = 300 + max_integrity = 300 var/equip_cooldown = 0 // cooldown after use var/equip_ready = 1 //whether the equipment is ready for use. (or deactivated/activated for static stuff) var/energy_drain = 0 diff --git a/code/game/mecha/mecha.dm b/code/game/mecha/mecha.dm index e1a4e2f021ed..3171fd9f09aa 100644 --- a/code/game/mecha/mecha.dm +++ b/code/game/mecha/mecha.dm @@ -58,6 +58,7 @@ var/obj/machinery/atmospherics/components/unary/portables_connector/connected_port = null var/obj/item/device/radio/radio = null + var/list/trackers = list() var/max_temperature = 25000 var/internal_damage_threshold = 50 //health percentage below which internal damage is possible @@ -608,10 +609,10 @@ //Allows the Malf to scan a mech's status and loadout, helping it to decide if it is a worthy chariot. if(user.can_dominate_mechs) examine(user) //Get diagnostic information! - var/obj/item/mecha_parts/mecha_tracking/B = locate(/obj/item/mecha_parts/mecha_tracking) in src - if(B) //Beacons give the AI more detailed mech information. + for(var/obj/item/mecha_parts/mecha_tracking/B in trackers) user << "Warning: Tracking Beacon detected. Enter at your own risk. Beacon Data:" user << "[B.get_mecha_info()]" + break //Nothing like a big, red link to make the player feel powerful! user << "ASSUME DIRECT CONTROL?
" diff --git a/code/game/mecha/mecha_control_console.dm b/code/game/mecha/mecha_control_console.dm index a252f25ad086..1eaa4259fb41 100644 --- a/code/game/mecha/mecha_control_console.dm +++ b/code/game/mecha/mecha_control_console.dm @@ -16,7 +16,10 @@ var/dat = "[src.name]" if(screen == 0) dat += "

Tracking beacons data

" - for(var/obj/item/mecha_parts/mecha_tracking/TR in world) + var/list/trackerlist = list() + for(var/obj/mecha/MC in mechas_list) + trackerlist += MC.trackers + for(var/obj/item/mecha_parts/mecha_tracking/TR in trackerlist) var/answer = TR.get_mecha_info() if(answer) dat += {"
[answer]
@@ -86,11 +89,13 @@ /obj/item/mecha_parts/mecha_tracking/emp_act() qdel(src) - return -/obj/item/mecha_parts/mecha_tracking/ex_act() - qdel(src) - return +/obj/item/mecha_parts/mecha_tracking/Destroy() + if(istype(loc, /obj/mecha)) + var/obj/mecha/M = loc + if(src in M.trackers) + M.trackers -= src + return ..() /obj/item/mecha_parts/mecha_tracking/proc/in_mecha() if(istype(src.loc, /obj/mecha)) @@ -104,7 +109,7 @@ qdel(src) /obj/item/mecha_parts/mecha_tracking/proc/get_mecha_log() - if(!src.in_mecha()) + if(!istype(loc, /obj/mecha)) return 0 var/obj/mecha/M = src.loc return M.get_log_html() diff --git a/code/game/mecha/mecha_defense.dm b/code/game/mecha/mecha_defense.dm index 60c79308abf1..55d98e86a88f 100644 --- a/code/game/mecha/mecha_defense.dm +++ b/code/game/mecha/mecha_defense.dm @@ -117,7 +117,24 @@ if(prob(deflect_chance)) severity++ log_append_to_last("Armor saved, changing severity to [severity].") - . = ..(severity, target) + . = ..() + +/obj/mecha/contents_explosion(severity, target) + severity++ + for(var/X in equipment) + var/obj/item/mecha_parts/mecha_equipment/ME = X + ME.ex_act(severity,target) + for(var/Y in trackers) + var/obj/item/mecha_parts/mecha_tracking/MT = Y + MT.ex_act(severity, target) + if(occupant) + occupant.ex_act(severity,target) + +/obj/mecha/handle_atom_del(atom/A) + if(A == occupant) + occupant = null + icon_state = initial(icon_state)+"-open" + setDir(dir_in) /obj/mecha/emp_act(severity) if(get_charge()) @@ -245,6 +262,7 @@ user << "\the [W] is stuck to your hand, you cannot put it in \the [src]!" return W.forceMove(src) + trackers += W user.visible_message("[user] attaches [W] to [src].", "You attach [W] to [src].") return else diff --git a/code/game/mecha/medical/medical.dm b/code/game/mecha/medical/medical.dm index 7bce65fc5fb5..8121507b5bab 100644 --- a/code/game/mecha/medical/medical.dm +++ b/code/game/mecha/medical/medical.dm @@ -1,7 +1,6 @@ /obj/mecha/medical/New() ..() - new /obj/item/mecha_parts/mecha_tracking(src) - return + trackers += new /obj/item/mecha_parts/mecha_tracking(src) /obj/mecha/medical/mechturn(direction) diff --git a/code/game/mecha/working/ripley.dm b/code/game/mecha/working/ripley.dm index 84155a23b7e9..1e96e9f2a432 100644 --- a/code/game/mecha/working/ripley.dm +++ b/code/game/mecha/working/ripley.dm @@ -30,7 +30,7 @@ for(var/i=1, i <= hides, i++) new /obj/item/stack/sheet/animalhide/goliath_hide(loc) //If a goliath-plated ripley gets killed, all the plates drop for(var/atom/movable/A in cargo) - A.loc = loc + A.forceMove(loc) step_rand(A) cargo.Cut() return ..() @@ -112,7 +112,7 @@ //Attach hydraulic clamp var/obj/item/mecha_parts/mecha_equipment/hydraulic_clamp/HC = new /obj/item/mecha_parts/mecha_equipment/hydraulic_clamp HC.attach(src) - for(var/obj/item/mecha_parts/mecha_tracking/B in src.contents)//Deletes the beacon so it can't be found easily + for(var/obj/item/mecha_parts/mecha_tracking/B in trackers)//Deletes the beacon so it can't be found easily qdel(B) var/obj/item/mecha_parts/mecha_equipment/mining_scanner/scanner = new /obj/item/mecha_parts/mecha_equipment/mining_scanner @@ -129,12 +129,19 @@ var/obj/O = locate(href_list["drop_from_cargo"]) if(O && O in src.cargo) src.occupant_message("You unload [O].") - O.loc = loc + O.forceMove(loc) src.cargo -= O src.log_message("Unloaded [O]. Cargo compartment capacity: [cargo_capacity - src.cargo.len]") return +/obj/mecha/working/ripley/contents_explosion(severity, target) + for(var/X in cargo) + var/obj/O = X + if(prob(30/severity)) + cargo -= O + O.forceMove(loc) + . = ..() /obj/mecha/working/ripley/get_stats_part() var/output = ..() diff --git a/code/game/mecha/working/working.dm b/code/game/mecha/working/working.dm index 6516e3f4a46f..e4c001a508a2 100644 --- a/code/game/mecha/working/working.dm +++ b/code/game/mecha/working/working.dm @@ -3,5 +3,4 @@ /obj/mecha/working/New() ..() - new /obj/item/mecha_parts/mecha_tracking(src) - return \ No newline at end of file + trackers += new /obj/item/mecha_parts/mecha_tracking(src) diff --git a/code/game/objects/items/devices/doorCharge.dm b/code/game/objects/items/devices/doorCharge.dm index bedc318e75e1..ca6c6cec4016 100644 --- a/code/game/objects/items/devices/doorCharge.dm +++ b/code/game/objects/items/devices/doorCharge.dm @@ -25,6 +25,13 @@ if(prob(25)) ex_act(1) +/obj/item/device/doorCharge/Destroy() + if(istype(loc, /obj/machinery/door/airlock)) + var/obj/machinery/door/airlock/A = loc + if(A.charge == src) + A.charge = null + return ..() + /obj/item/device/doorCharge/examine(mob/user) ..() if(user.mind in ticker.mode.traitors) //No nuke ops because the device is excluded from nuclear diff --git a/code/game/objects/items/devices/scanners.dm b/code/game/objects/items/devices/scanners.dm index e5bb68ef23c4..e4e2ce466b5d 100644 --- a/code/game/objects/items/devices/scanners.dm +++ b/code/game/objects/items/devices/scanners.dm @@ -202,13 +202,13 @@ MASS SPECTROMETER else user << "Blood level [blood_percent] %, [C.blood_volume] cl, type: [blood_type]" - var/implant_detect + var/cyberimp_detect for(var/obj/item/organ/cyberimp/CI in C.internal_organs) if(CI.status == ORGAN_ROBOTIC) - implant_detect += "[C.name] is modified with a [CI.name].
" - if(implant_detect) + cyberimp_detect += "[C.name] is modified with a [CI.name].
" + if(cyberimp_detect) user << "Detected cybernetic modifications:" - user << "[implant_detect]" + user << "[cyberimp_detect]" /proc/chemscan(mob/living/user, mob/living/M) if(ishuman(M)) diff --git a/code/game/objects/items/weapons/implants/implant.dm b/code/game/objects/items/weapons/implants/implant.dm index f3584d1d094f..fe7dd8d9999e 100644 --- a/code/game/objects/items/weapons/implants/implant.dm +++ b/code/game/objects/items/weapons/implants/implant.dm @@ -6,14 +6,14 @@ actions_types = list(/datum/action/item_action/hands_free/activate) var/activated = 1 //1 for implant types that can be activated, 0 for ones that are "always on" like mindshield implants var/implanted = null - var/mob/living/imp_in = null + var/mob/living/carbon/imp_in = null item_color = "b" var/allow_multiple = 0 var/uses = -1 flags = DROPDEL -/obj/item/weapon/implant/proc/trigger(emote, mob/source) +/obj/item/weapon/implant/proc/trigger(emote, mob/living/carbon/source) return /obj/item/weapon/implant/proc/activate() @@ -27,21 +27,24 @@ //return 1 if the implant injects //return -1 if the implant fails to inject //return 0 if there is no room for implant -/obj/item/weapon/implant/proc/implant(var/mob/source, var/mob/user) - var/obj/item/weapon/implant/imp_e = locate(src.type) in source - if(!allow_multiple && imp_e && imp_e != src) - if(imp_e.uses < initial(imp_e.uses)*2) - if(uses == -1) - imp_e.uses = -1 - else - imp_e.uses = min(imp_e.uses + uses, initial(imp_e.uses)*2) - qdel(src) - return 1 - else - return 0 +/obj/item/weapon/implant/proc/implant(mob/living/carbon/source, mob/user, silent = 0) + for(var/X in source.implants) + if(istype(X, type)) + var/obj/item/weapon/implant/imp_e = X + if(!allow_multiple) + if(imp_e.uses < initial(imp_e.uses)*2) + if(uses == -1) + imp_e.uses = -1 + else + imp_e.uses = min(imp_e.uses + uses, initial(imp_e.uses)*2) + qdel(src) + return 1 + else + return 0 src.loc = source imp_in = source + source.implants += src implanted = 1 if(activated) for(var/X in actions) @@ -56,10 +59,11 @@ return 1 -/obj/item/weapon/implant/proc/removed(var/mob/source) +/obj/item/weapon/implant/proc/removed(mob/living/carbon/source, silent = 0, special = 0) src.loc = null imp_in = null implanted = 0 + source.implants -= src for(var/X in actions) var/datum/action/A = X A.Grant(source) diff --git a/code/game/objects/items/weapons/implants/implant_abductor.dm b/code/game/objects/items/weapons/implants/implant_abductor.dm new file mode 100644 index 000000000000..2084404eacd5 --- /dev/null +++ b/code/game/objects/items/weapons/implants/implant_abductor.dm @@ -0,0 +1,47 @@ + +/obj/item/weapon/implant/abductor + name = "recall implant" + desc = "Returns you to the mothership." + icon = 'icons/obj/abductor.dmi' + icon_state = "implant" + activated = 1 + origin_tech = "materials=2;biotech=7;magnets=4;bluespace=4;abductor=5" + var/obj/machinery/abductor/pad/home + var/cooldown = 30 + +/obj/item/weapon/implant/abductor/activate() + if(cooldown == initial(cooldown)) + home.Retrieve(imp_in,1) + cooldown = 0 + START_PROCESSING(SSobj, src) + else + imp_in << "You must wait [30 - cooldown] seconds to use [src] again!" + +/obj/item/weapon/implant/abductor/process() + if(cooldown < initial(cooldown)) + cooldown++ + if(cooldown == initial(cooldown)) + STOP_PROCESSING(SSobj, src) + +/obj/item/weapon/implant/abductor/implant(var/mob/source, var/mob/user) + if(..()) + var/obj/machinery/abductor/console/console + if(ishuman(source)) + var/mob/living/carbon/human/H = source + if(H.dna.species.id == "abductor") + var/datum/species/abductor/S = H.dna.species + console = get_team_console(S.team) + home = console.pad + + if(!home) + console = get_team_console(pick(1, 2, 3, 4)) + home = console.pad + return 1 + +/obj/item/weapon/implant/abductor/proc/get_team_console(var/team) + var/obj/machinery/abductor/console/console + for(var/obj/machinery/abductor/console/c in machines) + if(c.team == team) + console = c + break + return console diff --git a/code/game/objects/items/weapons/implants/implant_exile.dm b/code/game/objects/items/weapons/implants/implant_exile.dm new file mode 100644 index 000000000000..11cf876ca986 --- /dev/null +++ b/code/game/objects/items/weapons/implants/implant_exile.dm @@ -0,0 +1,30 @@ +//Exile implants will allow you to use the station gate, but not return home. +//This will allow security to exile badguys/for badguys to exile their kill targets + +/obj/item/weapon/implant/exile + name = "exile implant" + desc = "Prevents you from returning from away missions" + origin_tech = "materials=2;biotech=3;magnets=2;bluespace=3" + activated = 0 + +/obj/item/weapon/implant/exile/get_data() + var/dat = {"Implant Specifications:
+ Name: Nanotrasen Employee Exile Implant
+ Implant Details: The onboard gateway system has been modified to reject entry by individuals containing this implant
"} + return dat + + +/obj/item/weapon/implanter/exile + name = "implanter (exile)" + +/obj/item/weapon/implanter/exile/New() + imp = new /obj/item/weapon/implant/exile( src ) + ..() + +/obj/item/weapon/implantcase/exile + name = "implant case - 'Exile'" + desc = "A glass case containing an exile implant." + +/obj/item/weapon/implantcase/exile/New() + imp = new /obj/item/weapon/implant/exile(src) + ..() diff --git a/code/game/objects/items/weapons/implants/implant_explosive.dm b/code/game/objects/items/weapons/implants/implant_explosive.dm index e3562f526c19..a11763f665ac 100644 --- a/code/game/objects/items/weapons/implants/implant_explosive.dm +++ b/code/game/objects/items/weapons/implants/implant_explosive.dm @@ -45,15 +45,16 @@ return timed_explosion() -/obj/item/weapon/implant/explosive/implant(mob/source) - var/obj/item/weapon/implant/explosive/imp_e = locate(src.type) in source - if(imp_e && imp_e != src) - imp_e.heavy += heavy - imp_e.medium += medium - imp_e.weak += weak - imp_e.delay += delay - qdel(src) - return 1 +/obj/item/weapon/implant/explosive/implant(mob/living/carbon/source) + for(var/X in source.implants) + if(istype(X, type)) + var/obj/item/weapon/implant/explosive/imp_e = X + imp_e.heavy += heavy + imp_e.medium += medium + imp_e.weak += weak + imp_e.delay += delay + qdel(src) + return 1 return ..() @@ -85,17 +86,20 @@ heavy = 4 delay = 70 -/obj/item/weapon/implant/explosive/macro/implant(mob/source) - var/obj/item/weapon/implant/explosive/imp_e = locate(src.type) in source - if(imp_e && imp_e != src) - return 0 - imp_e = locate(/obj/item/weapon/implant/explosive) in source - if(imp_e && imp_e != src) - heavy += imp_e.heavy - medium += imp_e.medium - weak += imp_e.weak - delay += imp_e.delay - qdel(imp_e) +/obj/item/weapon/implant/explosive/macro/implant(mob/living/carbon/source) + for(var/X in source.implants) + if(istype(X, type)) + return 0 + + for(var/Y in source.implants) + if(istype(Y, /obj/item/weapon/implant/explosive)) + var/obj/item/weapon/implant/explosive/imp_e = Y + heavy += imp_e.heavy + medium += imp_e.medium + weak += imp_e.weak + delay += imp_e.delay + qdel(imp_e) + break return ..() diff --git a/code/game/objects/items/weapons/implants/implant_gang.dm b/code/game/objects/items/weapons/implants/implant_gang.dm new file mode 100644 index 000000000000..7505952ba9cd --- /dev/null +++ b/code/game/objects/items/weapons/implants/implant_gang.dm @@ -0,0 +1,56 @@ + +/obj/item/weapon/implant/gang + name = "gang implant" + desc = "Makes you a gangster or such." + activated = 0 + origin_tech = "materials=2;biotech=4;programming=4;syndicate=3" + var/datum/gang/gang + +/obj/item/weapon/implant/gang/New(loc,var/setgang) + ..() + gang = setgang + +/obj/item/weapon/implant/gang/get_data() + var/dat = {"Implant Specifications:
+ Name: Criminal brainwash implant
+ Life: A few seconds after injection.
+ Important Notes: Illegal
+
+ Implant Details:
+ Function: Contains a small pod of nanobots that change the host's brain to be loyal to a certain organization.
+ Special Features: This device will also emit a small EMP pulse, destroying any other implants within the host's brain.
+ Integrity: Implant's EMP function will destroy itself in the process."} + return dat + +/obj/item/weapon/implant/gang/implant(mob/living/carbon/target, mob/user, silent = 0) + if(..()) + for(var/obj/item/weapon/implant/I in target.implants) + if(I != src) + qdel(I) + + if(!target.mind || target.stat == DEAD) + return 0 + + var/success + if(target.mind in ticker.mode.get_gangsters()) + if(ticker.mode.remove_gangster(target.mind,0,1)) + success = 1 //Was not a gang boss, convert as usual + else + success = 1 + + if(ishuman(target)) + if(!success) + target.visible_message("[target] seems to resist the implant!", "You feel the influence of your enemies try to invade your mind!") + + qdel(src) + return -1 + +/obj/item/weapon/implanter/gang + name = "implanter (gang)" + +/obj/item/weapon/implanter/gang/New(loc, gang) + if(!gang) + qdel(src) + return + imp = new /obj/item/weapon/implant/gang(src,gang) + ..() diff --git a/code/game/objects/items/weapons/implants/implant_loyality.dm b/code/game/objects/items/weapons/implants/implant_loyality.dm index fe9a59d0df5c..387cbe296c48 100644 --- a/code/game/objects/items/weapons/implants/implant_loyality.dm +++ b/code/game/objects/items/weapons/implants/implant_loyality.dm @@ -17,29 +17,32 @@ return dat -/obj/item/weapon/implant/mindshield/implant(mob/target) +/obj/item/weapon/implant/mindshield/implant(mob/living/carbon/target, mob/user, silent = 0) if(..()) if((target.mind in (ticker.mode.head_revolutionaries | ticker.mode.get_gang_bosses()))) - target.visible_message("[target] seems to resist the implant!", "You feel something interfering with your mental conditioning, but you resist it!") + if(!silent) + target.visible_message("[target] seems to resist the implant!", "You feel something interfering with your mental conditioning, but you resist it!") removed(target, 1) qdel(src) return -1 if(target.mind in ticker.mode.get_gangsters()) ticker.mode.remove_gangster(target.mind) - target.visible_message("[src] was destroyed in the process!", "You feel a sense of peace and security. You are now protected from brainwashing.") + if(!silent) + target.visible_message("[src] was destroyed in the process!", "You feel a sense of peace and security. You are now protected from brainwashing.") removed(target, 1) qdel(src) return -1 if(target.mind in ticker.mode.revolutionaries) ticker.mode.remove_revolutionary(target.mind) - if(target.mind in ticker.mode.cult) - target << "You feel something interfering with your mental conditioning, but you resist it!" - else - target << "You feel a sense of peace and security. You are now protected from brainwashing." + if(!silent) + if(target.mind in ticker.mode.cult) + target << "You feel something interfering with your mental conditioning, but you resist it!" + else + target << "You feel a sense of peace and security. You are now protected from brainwashing." return 1 return 0 -/obj/item/weapon/implant/mindshield/removed(mob/target, var/silent = 0) +/obj/item/weapon/implant/mindshield/removed(mob/target, silent = 0, special = 0) if(..()) if(target.stat != DEAD && !silent) target << "Your mind suddenly feels terribly vulnerable. You are no longer safe from brainwashing." diff --git a/code/game/objects/items/weapons/implants/implant_misc.dm b/code/game/objects/items/weapons/implants/implant_misc.dm index edeb8dda5a70..a3fe9ccf739a 100644 --- a/code/game/objects/items/weapons/implants/implant_misc.dm +++ b/code/game/objects/items/weapons/implants/implant_misc.dm @@ -61,3 +61,22 @@ empulse(imp_in, 3, 5) if(!uses) qdel(src) + + +//Health Tracker Implant + +/obj/item/weapon/implant/health + name = "health implant" + activated = 0 + var/healthstring = "" + +/obj/item/weapon/implant/health/proc/sensehealth() + if (!implanted) + return "ERROR" + else + if(isliving(implanted)) + var/mob/living/L = implanted + healthstring = "Oxygen Deprivation Damage => [round(L.getOxyLoss())]
Fire Damage => [round(L.getFireLoss())]
Toxin Damage => [round(L.getToxLoss())]
Brute Force Damage => [round(L.getBruteLoss())]
" + if (!healthstring) + healthstring = "ERROR" + return healthstring \ No newline at end of file diff --git a/code/game/objects/items/weapons/implants/implant_storage.dm b/code/game/objects/items/weapons/implants/implant_storage.dm index 2a0820825704..686dd7db3524 100644 --- a/code/game/objects/items/weapons/implants/implant_storage.dm +++ b/code/game/objects/items/weapons/implants/implant_storage.dm @@ -21,25 +21,27 @@ /obj/item/weapon/implant/storage/activate() storage.MouseDrop(imp_in) -/obj/item/weapon/implant/storage/removed(source) +/obj/item/weapon/implant/storage/removed(source, silent = 0, special = 0) if(..()) - storage.close_all() - for(var/obj/item/I in storage) - storage.remove_from_storage(I, get_turf(source)) + if(!special) + storage.close_all() + for(var/obj/item/I in storage) + storage.remove_from_storage(I, get_turf(source)) return 1 -/obj/item/weapon/implant/storage/implant(mob/source) - var/obj/item/weapon/implant/storage/imp_e = locate(src.type) in source - if(imp_e) - imp_e.storage.storage_slots += storage.storage_slots - imp_e.storage.max_combined_w_class += storage.max_combined_w_class - imp_e.storage.contents += storage.contents +/obj/item/weapon/implant/storage/implant(mob/living/carbon/source, mob/user, silent = 0) + for(var/X in source.implants) + if(istype(X, type)) + var/obj/item/weapon/implant/storage/imp_e = X + imp_e.storage.storage_slots += storage.storage_slots + imp_e.storage.max_combined_w_class += storage.max_combined_w_class + imp_e.storage.contents += storage.contents - storage.close_all() - storage.show_to(source) + storage.close_all() + storage.show_to(source) - qdel(src) - return 1 + qdel(src) + return 1 return ..() diff --git a/code/game/objects/items/weapons/implants/implantuplink.dm b/code/game/objects/items/weapons/implants/implantuplink.dm index 100589b763da..1ae4915f32fc 100644 --- a/code/game/objects/items/weapons/implants/implantuplink.dm +++ b/code/game/objects/items/weapons/implants/implantuplink.dm @@ -10,12 +10,13 @@ hidden_uplink.telecrystals = 10 ..() -/obj/item/weapon/implant/uplink/implant(mob/user) - var/obj/item/weapon/implant/imp_e = locate(src.type) in user - if(imp_e && imp_e != src) - imp_e.hidden_uplink.telecrystals += hidden_uplink.telecrystals - qdel(src) - return 1 +/obj/item/weapon/implant/uplink/implant(mob/living/carbon/source, mob/user, silent = 0) + for(var/X in source.implants) + if(istype(X, type)) + var/obj/item/weapon/implant/imp_e = X + imp_e.hidden_uplink.telecrystals += hidden_uplink.telecrystals + qdel(src) + return 1 if(..()) hidden_uplink.owner = "[user.key]" diff --git a/code/game/objects/items/weapons/storage/storage.dm b/code/game/objects/items/weapons/storage/storage.dm index 6d1407b857bd..ec345f1ab32f 100644 --- a/code/game/objects/items/weapons/storage/storage.dm +++ b/code/game/objects/items/weapons/storage/storage.dm @@ -516,3 +516,8 @@ if(A in contents) usr = null remove_from_storage(A, loc) + +/obj/item/weapon/storage/contents_explosion(severity, target) + for(var/atom/A in contents) + A.ex_act(severity, target) + CHECK_TICK \ No newline at end of file diff --git a/code/game/objects/structures/crates_lockers/closets.dm b/code/game/objects/structures/crates_lockers/closets.dm index 8d47e895bdb2..45d9f76c6b02 100644 --- a/code/game/objects/structures/crates_lockers/closets.dm +++ b/code/game/objects/structures/crates_lockers/closets.dm @@ -418,3 +418,9 @@ req_access = list() req_access += pick(get_all_accesses()) ..() + + +/obj/structure/closet/contents_explosion(severity, target) + for(var/atom/A in contents) + A.ex_act(severity, target) + CHECK_TICK \ No newline at end of file diff --git a/code/game/objects/structures/displaycase.dm b/code/game/objects/structures/displaycase.dm index 6d974be8c2e5..effec7ca5a29 100644 --- a/code/game/objects/structures/displaycase.dm +++ b/code/game/objects/structures/displaycase.dm @@ -22,6 +22,15 @@ showpiece = new start_showpiece_type (src) update_icon() +/obj/structure/displaycase/Destroy() + if(electronics) + qdel(electronics) + electronics = null + if(showpiece) + qdel(showpiece) + showpiece = null + return ..() + /obj/structure/displaycase/examine(mob/user) ..() if(showpiece) @@ -32,7 +41,7 @@ /obj/structure/displaycase/proc/dump() if (showpiece) - showpiece.loc = src.loc + showpiece.forceMove(loc) showpiece = null /obj/structure/displaycase/play_attack_sound(damage_amount, damage_type = BRUTE, damage_flag = 0) diff --git a/code/game/objects/structures/extinguisher.dm b/code/game/objects/structures/extinguisher.dm index 4ec8001ebd77..51b80b07e36e 100644 --- a/code/game/objects/structures/extinguisher.dm +++ b/code/game/objects/structures/extinguisher.dm @@ -28,6 +28,15 @@ stored_extinguisher = null return ..() +/obj/structure/extinguisher_cabinet/contents_explosion(severity, target) + if(stored_extinguisher) + stored_extinguisher.ex_act(severity, target) + +/obj/structure/extinguisher_cabinet/handle_atom_del(atom/A) + if(A == stored_extinguisher) + stored_extinguisher = null + update_icon() + /obj/structure/extinguisher_cabinet/attackby(obj/item/I, mob/user, params) if(istype(I, /obj/item/weapon/wrench) && !stored_extinguisher) user << "You start unsecuring [name]..." @@ -47,6 +56,7 @@ return contents += I stored_extinguisher = I + update_icon() user << "You place [I] in [src]." else toggle_cabinet(user) diff --git a/code/game/objects/structures/guncase.dm b/code/game/objects/structures/guncase.dm index 8219c7f7a339..4ceb1be8a50b 100644 --- a/code/game/objects/structures/guncase.dm +++ b/code/game/objects/structures/guncase.dm @@ -86,6 +86,14 @@ O.forceMove(get_turf(src)) update_icon() +/obj/structure/guncase/handle_atom_del(atom/A) + update_icon() + +/obj/structure/guncase/contents_explosion(severity, target) + for(var/atom/A in contents) + A.ex_act(severity++, target) + CHECK_TICK + /obj/structure/guncase/shotgun name = "shotgun locker" desc = "A locker that holds shotguns." diff --git a/code/game/objects/structures/plasticflaps.dm b/code/game/objects/structures/plasticflaps.dm index 8aaf18cf5ed0..c9adc35d2aad 100644 --- a/code/game/objects/structures/plasticflaps.dm +++ b/code/game/objects/structures/plasticflaps.dm @@ -45,18 +45,6 @@ return 0 return ..() -/obj/structure/plasticflaps/ex_act(severity) - ..() - switch(severity) - if (1) - qdel(src) - if (2) - if (prob(50)) - qdel(src) - if (3) - if (prob(5)) - qdel(src) - /obj/structure/plasticflaps/mining //A specific type for mining that doesn't allow airflow because of them damn crates name = "airtight plastic flaps" desc = "Heavy duty, airtight, plastic flaps." diff --git a/code/game/objects/structures/safe.dm b/code/game/objects/structures/safe.dm index e249db51d593..52fe2464d6ea 100644 --- a/code/game/objects/structures/safe.dm +++ b/code/game/objects/structures/safe.dm @@ -151,7 +151,7 @@ FLOOR SAFES if(!user.drop_item()) user << "\The [I] is stuck to your hand, you cannot put it in the safe!" return - I.loc = src + I.forceMove(src) user << "You put [I] in [src]." updateUsrDialog() return @@ -164,10 +164,13 @@ FLOOR SAFES return ..() -obj/structure/safe/blob_act(obj/structure/blob/B) +/obj/structure/safe/handle_atom_del(atom/A) + updateUsrDialog() + +/obj/structure/safe/blob_act(obj/structure/blob/B) return -obj/structure/safe/ex_act(severity, target) +/obj/structure/safe/ex_act(severity, target) return diff --git a/code/game/objects/structures/transit_tubes/transit_tube.dm b/code/game/objects/structures/transit_tubes/transit_tube.dm index 5c42bb224459..78cdd062fc42 100644 --- a/code/game/objects/structures/transit_tubes/transit_tube.dm +++ b/code/game/objects/structures/transit_tubes/transit_tube.dm @@ -25,12 +25,15 @@ return !density // When destroyed by explosions, properly handle contents. -obj/structure/transit_tube/ex_act(severity, target) - if(3 - severity >= 0) - var/oldloc = loc - ..(severity + 1) +/obj/structure/transit_tube/ex_act(severity, target) + ..() + if(!qdeleted(src)) for(var/atom/movable/AM in contents) - AM.loc = oldloc + AM.forceMove(loc) + +/obj/structure/transit_tube/contents_explosion(severity, target) + for(var/atom/movable/AM in contents) + AM.ex_act(severity, target) /obj/structure/transit_tube/New(loc) ..(loc) @@ -38,6 +41,11 @@ obj/structure/transit_tube/ex_act(severity, target) if(tube_dirs == null) init_dirs() +/obj/structure/transit_tube/Destroy() + for(var/atom/movable/AM in contents) + AM.forceMove(loc) + return ..() + /obj/structure/transit_tube/attackby(obj/item/W, mob/user, params) if(istype(W, /obj/item/weapon/wrench)) if(copytext(icon_state, 1, 3) != "D-") //decorative diagonals cannot be unwrenched directly 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 520e18ab1ab4..8bbe93ec1c22 100644 --- a/code/game/objects/structures/transit_tubes/transit_tube_pod.dm +++ b/code/game/objects/structures/transit_tubes/transit_tube_pod.dm @@ -21,9 +21,7 @@ follow_tube() /obj/structure/transit_tube_pod/Destroy() - for(var/atom/movable/AM in contents) - AM.loc = loc - + empty() return ..() /obj/structure/transit_tube_pod/attackby(obj/item/I, mob/user, params) @@ -31,9 +29,9 @@ if(!moving) for(var/obj/structure/transit_tube/station/T in loc) return - if(src.contents.len) + if(contents.len) user.visible_message("[user] empties \the [src].", "You empty \the [src].") - src.empty() + empty() return else user << "You free \the [src]." @@ -44,6 +42,16 @@ else return ..() +/obj/structure/transit_tube_pod/ex_act(severity, target) + ..() + if(!qdeleted(src)) + for(var/atom/movable/AM in contents) + AM.forceMove(loc) + +/obj/structure/transit_tube_pod/contents_explosion(severity, target) + for(var/atom/movable/AM in contents) + AM.ex_act(severity, target) + /obj/structure/transit_tube_pod/container_resist() var/mob/living/user = usr if(!moving) @@ -56,7 +64,7 @@ /obj/structure/transit_tube_pod/proc/empty() for(var/atom/movable/M in src.contents) - M.loc = src.loc + M.forceMove(loc) /obj/structure/transit_tube_pod/Process_Spacemove() if(moving) //No drifting while moving in the tubes diff --git a/code/game/turfs/simulated/walls.dm b/code/game/turfs/simulated/walls.dm index 9e8a747be88b..2793f838e2ed 100644 --- a/code/game/turfs/simulated/walls.dm +++ b/code/game/turfs/simulated/walls.dm @@ -44,8 +44,7 @@ if(istype(O,/obj/structure/sign/poster)) var/obj/structure/sign/poster/P = O P.roll_and_drop(src) - else - O.loc = src + ChangeTurf(/turf/open/floor/plating) /turf/closed/wall/proc/break_wall() @@ -75,10 +74,9 @@ if(3) if (prob(hardness)) dismantle_wall(0,1) - else if(!density) ..() - return + /turf/closed/wall/blob_act(obj/structure/blob/B) if(prob(50)) diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm index be82bc02b45a..ac855999943e 100644 --- a/code/game/turfs/turf.dm +++ b/code/game/turfs/turf.dm @@ -368,3 +368,9 @@ if(T.dir != dir) T.setDir(dir) return T + +/turf/contents_explosion(severity, target) + for(var/atom/A in contents) + A.ex_act(severity, target) + CHECK_TICK + diff --git a/code/modules/admin/verbs/debug.dm b/code/modules/admin/verbs/debug.dm index 4ed208924f8f..4e05299cc6f1 100644 --- a/code/modules/admin/verbs/debug.dm +++ b/code/modules/admin/verbs/debug.dm @@ -605,9 +605,7 @@ var/global/list/g_fancy_list_of_types = null return feedback_add_details("admin_verb","SEQ") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - for (var/obj/item/I in M) - if (istype(I, /obj/item/weapon/implant)) - continue + for (var/obj/item/I in M.get_equipped_items()) qdel(I) switch(dresscode) if ("Naked") diff --git a/code/modules/admin/verbs/manipulate_organs.dm b/code/modules/admin/verbs/manipulate_organs.dm index 289d1b6cd7d6..055905a92a0a 100644 --- a/code/modules/admin/verbs/manipulate_organs.dm +++ b/code/modules/admin/verbs/manipulate_organs.dm @@ -30,7 +30,8 @@ var/obj/item/organ/I = X organs["[I.name] ([I.type])"] = I - for(var/obj/item/weapon/implant/I in C) + for(var/X in C.implants) + var/obj/item/weapon/implant/I = X organs["[I.name] ([I.type])"] = I var/obj/item/organ = input("Select organ/implant:", "Organ Manipulation", null) in organs diff --git a/code/modules/admin/verbs/onlyone.dm b/code/modules/admin/verbs/onlyone.dm index fa8998008d68..5312c41b33c1 100644 --- a/code/modules/admin/verbs/onlyone.dm +++ b/code/modules/admin/verbs/onlyone.dm @@ -37,9 +37,9 @@ var/highlander = FALSE mind.announce_objectives() - for(var/obj/item/I in src) - if(istype(I, /obj/item/weapon/implant)) - continue + for(var/obj/item/I in get_equipped_items()) + qdel(I) + for(var/obj/item/I in held_items) qdel(I) equip_to_slot_or_del(new /obj/item/clothing/under/kilt/highlander(src), slot_w_uniform) equip_to_slot_or_del(new /obj/item/device/radio/headset/heads/captain(src), slot_ears) diff --git a/code/modules/assembly/flash.dm b/code/modules/assembly/flash.dm index 4b8d3042fc6b..b1546a645558 100644 --- a/code/modules/assembly/flash.dm +++ b/code/modules/assembly/flash.dm @@ -151,7 +151,7 @@ if(M.stat == CONSCIOUS) M.mind_initialize() //give them a mind datum if they don't have one. var/resisted - if(!isloyal(M)) + if(!M.isloyal()) if(user.mind in ticker.mode.head_revolutionaries) if(ticker.mode.add_revolutionary(M.mind)) M.Stun(3) diff --git a/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm b/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm index 05f272ac7671..c6a059e3f04f 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm @@ -58,6 +58,17 @@ beaker = null return ..() +/obj/machinery/atmospherics/components/unary/cryo_cell/contents_explosion(severity, target) + ..() + if(beaker) + beaker.ex_act(severity, target) + +/obj/machinery/atmospherics/components/unary/cryo_cell/handle_atom_del(atom/A) + ..() + if(A == beaker) + beaker = null + updateUsrDialog() + /obj/machinery/atmospherics/components/unary/cryo_cell/on_deconstruction() if(beaker) beaker.forceMove(loc) diff --git a/code/modules/awaymissions/exile.dm b/code/modules/awaymissions/exile.dm index 4e6a69d591b5..35af4aa91c2a 100644 --- a/code/modules/awaymissions/exile.dm +++ b/code/modules/awaymissions/exile.dm @@ -1,34 +1,3 @@ -//Exile implants will allow you to use the station gate, but not return home. -//This will allow security to exile badguys/for badguys to exile their kill targets - -/obj/item/weapon/implant/exile - name = "exile implant" - desc = "Prevents you from returning from away missions" - origin_tech = "materials=2;biotech=3;magnets=2;bluespace=3" - activated = 0 - -/obj/item/weapon/implant/exile/get_data() - var/dat = {"Implant Specifications:
- Name: Nanotrasen Employee Exile Implant
- Implant Details: The onboard gateway system has been modified to reject entry by individuals containing this implant
"} - return dat - - -/obj/item/weapon/implanter/exile - name = "implanter (exile)" - -/obj/item/weapon/implanter/exile/New() - imp = new /obj/item/weapon/implant/exile( src ) - ..() - -/obj/item/weapon/implantcase/exile - name = "implant case - 'Exile'" - desc = "A glass case containing an exile implant." - -/obj/item/weapon/implantcase/exile/New() - imp = new /obj/item/weapon/implant/exile(src) - ..() - /obj/structure/closet/secure_closet/exile name = "exile implants" diff --git a/code/modules/awaymissions/gateway.dm b/code/modules/awaymissions/gateway.dm index abe092702fa1..adfad411a9d9 100644 --- a/code/modules/awaymissions/gateway.dm +++ b/code/modules/awaymissions/gateway.dm @@ -253,10 +253,10 @@ var/obj/machinery/gateway/centerstation/the_gateway = null if(!stationgate || qdeleted(stationgate)) return if(istype(AM, /mob/living/carbon)) - for(var/obj/item/weapon/implant/exile/E in AM)//Checking that there is an exile implant in the contents - if(E.imp_in == AM)//Checking that it's actually implanted vs just in their pocket - AM << "\black The station gate has detected your exile implant and is blocking your entry." - return + var/mob/living/carbon/C = AM + for(var/obj/item/weapon/implant/exile/E in C.implants)//Checking that there is an exile implant + AM << "\black The station gate has detected your exile implant and is blocking your entry." + return AM.forceMove(get_step(stationgate.loc, SOUTH)) AM.setDir(SOUTH) if (ismob(AM)) diff --git a/code/modules/clothing/outfits/ert.dm b/code/modules/clothing/outfits/ert.dm index 6edb3a395dd3..e3a9f4f7dee8 100644 --- a/code/modules/clothing/outfits/ert.dm +++ b/code/modules/clothing/outfits/ert.dm @@ -11,9 +11,7 @@ return var/obj/item/weapon/implant/mindshield/L = new/obj/item/weapon/implant/mindshield(H) - L.imp_in = H - L.implanted = 1 - H.sec_hud_set_implants() + L.implant(H, null, 1) var/obj/item/device/radio/R = H.ears R.set_frequency(CENTCOM_FREQ) diff --git a/code/modules/clothing/outfits/standard.dm b/code/modules/clothing/outfits/standard.dm index 84b7de07b848..09dac1c292af 100644 --- a/code/modules/clothing/outfits/standard.dm +++ b/code/modules/clothing/outfits/standard.dm @@ -133,9 +133,10 @@ r_hand = /obj/item/weapon/twohanded/fireaxe /datum/outfit/psycho/post_equip(mob/living/carbon/human/H) - for(var/obj/item/carried_item in H.contents) - if(!istype(carried_item, /obj/item/weapon/implant))//If it's not an implant. - carried_item.add_mob_blood(H)//Oh yes, there will be blood... + for(var/obj/item/carried_item in H.get_equipped_items()) + carried_item.add_mob_blood(H)//Oh yes, there will be blood... + for(var/obj/item/I in H.held_items) + I.add_mob_blood(H) H.regenerate_icons() /datum/outfit/assassin @@ -358,9 +359,7 @@ R.freqlock = 1 var/obj/item/weapon/implant/mindshield/L = new/obj/item/weapon/implant/mindshield(H)//Here you go Deuryn - L.imp_in = H - L.implanted = 1 - H.sec_hud_set_implants() + L.implant(H, null, 1) var/obj/item/weapon/card/id/W = H.wear_id diff --git a/code/modules/events/immovable_rod.dm b/code/modules/events/immovable_rod.dm index b49ed5a4c6f1..da6990ae9785 100644 --- a/code/modules/events/immovable_rod.dm +++ b/code/modules/events/immovable_rod.dm @@ -64,7 +64,7 @@ In my current plan for it, 'solid' will be defined as anything with density == 1 qdel(src) return ..() -/obj/effect/immovablerod/ex_act(test) +/obj/effect/immovablerod/ex_act(severity, target) return 0 /obj/effect/immovablerod/Bump(atom/clong) diff --git a/code/modules/events/spacevine.dm b/code/modules/events/spacevine.dm index 93f700d8a523..c002d51ef791 100644 --- a/code/modules/events/spacevine.dm +++ b/code/modules/events/spacevine.dm @@ -98,6 +98,7 @@ return /turf/open/floor/vines/ex_act(severity, target) + ..() if(severity < 3 || target == src) ChangeTurf(src.baseturf) @@ -227,10 +228,10 @@ quality = NEGATIVE /datum/spacevine_mutation/aggressive_spread/on_spread(obj/structure/spacevine/holder, turf/target) - target.ex_act(severity, src) // vine immunity handled at /mob/ex_act + target.ex_act(severity, null, src) // vine immunity handled at /mob/ex_act /datum/spacevine_mutation/aggressive_spread/on_buckle(obj/structure/spacevine/holder, mob/living/buckled) - buckled.ex_act(severity, src) + buckled.ex_act(severity, null, src) /datum/spacevine_mutation/transparency name = "transparent" diff --git a/code/modules/hydroponics/biogenerator.dm b/code/modules/hydroponics/biogenerator.dm index f86df0126e61..822876010890 100644 --- a/code/modules/hydroponics/biogenerator.dm +++ b/code/modules/hydroponics/biogenerator.dm @@ -25,6 +25,24 @@ var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/biogenerator(null) B.apply_default_parts(src) +/obj/machinery/biogenerator/Destroy() + if(beaker) + qdel(beaker) + beaker = null + return ..() + +/obj/machinery/biogenerator/contents_explosion(severity, target) + ..() + if(beaker) + beaker.ex_act(severity, target) + +/obj/machinery/biogenerator/handle_atom_del(atom/A) + ..() + if(A == beaker) + beaker = null + update_icon() + updateUsrDialog() + /obj/item/weapon/circuitboard/machine/biogenerator name = "circuit board (Biogenerator)" build_path = /obj/machinery/biogenerator diff --git a/code/modules/jobs/job_types/captain.dm b/code/modules/jobs/job_types/captain.dm index f210c426630d..d8a276d67dbe 100644 --- a/code/modules/jobs/job_types/captain.dm +++ b/code/modules/jobs/job_types/captain.dm @@ -51,9 +51,7 @@ Captain return var/obj/item/weapon/implant/mindshield/L = new/obj/item/weapon/implant/mindshield(H) - L.imp_in = H - L.implanted = 1 - H.sec_hud_set_implants() + L.implant(H, null, 1) minor_announce("Captain [H.real_name] on deck!") diff --git a/code/modules/jobs/job_types/civilian.dm b/code/modules/jobs/job_types/civilian.dm index ef2eebf4d143..1605f57c4dca 100644 --- a/code/modules/jobs/job_types/civilian.dm +++ b/code/modules/jobs/job_types/civilian.dm @@ -53,8 +53,7 @@ Clown return var/obj/item/weapon/implant/sad_trombone/S = new/obj/item/weapon/implant/sad_trombone(H) - S.imp_in = H - S.implanted = 1 + S.implant(H, null, 1) H.dna.add_mutation(CLOWNMUT) H.rename_self("clown") diff --git a/code/modules/jobs/job_types/security.dm b/code/modules/jobs/job_types/security.dm index 946e31e3a64a..05a892a58a5a 100644 --- a/code/modules/jobs/job_types/security.dm +++ b/code/modules/jobs/job_types/security.dm @@ -60,9 +60,7 @@ Head of Security return var/obj/item/weapon/implant/mindshield/L = new/obj/item/weapon/implant/mindshield(H) - L.imp_in = H - L.implanted = 1 - H.sec_hud_set_implants() + L.implant(H, null, 1) announce_head(H, list("Security")) //tell underlings (security radio) they have a head /* @@ -119,9 +117,7 @@ Warden return var/obj/item/weapon/implant/mindshield/L = new/obj/item/weapon/implant/mindshield(H) - L.imp_in = H - L.implanted = 1 - H.sec_hud_set_implants() + L.implant(H, null, 1) /* Detective @@ -170,9 +166,7 @@ Detective return var/obj/item/weapon/implant/mindshield/L = new/obj/item/weapon/implant/mindshield(H) - L.imp_in = H - L.implanted = 1 - H.sec_hud_set_implants() + L.implant(H, null, 1) /* Security Officer @@ -271,9 +265,7 @@ var/list/sec_departments = list("engineering", "supply", "medical", "science") return var/obj/item/weapon/implant/mindshield/L = new/obj/item/weapon/implant/mindshield(H) - L.imp_in = H - L.implanted = 1 - H.sec_hud_set_implants() + L.implant(H, null, 1) var/obj/item/weapon/card/id/W = H.wear_id W.access |= dep_access diff --git a/code/modules/mining/machine_redemption.dm b/code/modules/mining/machine_redemption.dm index 149669a713ba..c49001fd7d7d 100644 --- a/code/modules/mining/machine_redemption.dm +++ b/code/modules/mining/machine_redemption.dm @@ -255,14 +255,7 @@ var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread s.set_up(5, 1, src) s.start() - if(severity == 1) - if(prob(50)) - empty_content() - qdel(src) - else if(severity == 2) - if(prob(25)) - empty_content() - qdel(src) + ..() //empty the redemption machine by stacks of at most max_amount (50 at this time) size /obj/machinery/mineral/ore_redemption/proc/empty_content() diff --git a/code/modules/mining/satchel_ore_boxdm.dm b/code/modules/mining/satchel_ore_boxdm.dm index 1e00a046de01..bc5016ae24dd 100644 --- a/code/modules/mining/satchel_ore_boxdm.dm +++ b/code/modules/mining/satchel_ore_boxdm.dm @@ -13,7 +13,7 @@ if (istype(W, /obj/item/weapon/ore)) if(!user.drop_item()) return - W.loc = src + W.forceMove(src) else if (istype(W, /obj/item/weapon/storage)) var/obj/item/weapon/storage/S = W for(var/obj/item/weapon/ore/O in S.contents) @@ -25,11 +25,7 @@ var/time = 50 if(do_after(user, time/C.toolspeed, target = src)) user.visible_message("[user] pries \the [src] apart.", "You pry apart \the [src].", "You hear splitting wood.") - // If you change the amount of wood returned, remember - // to change the construction costs - var/obj/item/stack/sheet/mineral/wood/wo = new (loc, 4) - wo.add_fingerprint(user) - deconstruct() + deconstruct(TRUE, user) else return ..() @@ -52,10 +48,9 @@ dat += text("

Empty box") user << browse("[dat]", "window=orebox") -/obj/structure/ore_box/proc/dump_contents() - for (var/obj/item/weapon/ore/O in contents) - contents -= O - O.loc = src.loc +/obj/structure/ore_box/proc/dump_box_contents() + for(var/obj/item/weapon/ore/O in contents) + O.forceMove(loc) /obj/structure/ore_box/Topic(href, href_list) if(..()) @@ -66,16 +61,14 @@ usr.set_machine(src) src.add_fingerprint(usr) if(href_list["removeall"]) - dump_contents() + dump_box_contents() usr << "You empty the box." - src.updateUsrDialog() - return + updateUsrDialog() -/obj/structure/ore_box/ex_act(severity, target) - if(prob(100 / severity) && severity < 3) - qdel(src) //nothing but ores can get inside unless its a bug and ores just return nothing on ex_act, not point in calling it on them - -/obj/structure/ore_box/Destroy() - dump_contents() - return ..() +/obj/structure/ore_box/deconstruct(disassembled = TRUE, mob/user) + var/obj/item/stack/sheet/mineral/wood/WD = new (loc, 4) + if(user) + WD.add_fingerprint(user) + dump_box_contents() + qdel(src) \ No newline at end of file diff --git a/code/modules/mob/living/carbon/alien/alien_defense.dm b/code/modules/mob/living/carbon/alien/alien_defense.dm index 2a84bfafb039..0ac53a3c8a0c 100644 --- a/code/modules/mob/living/carbon/alien/alien_defense.dm +++ b/code/modules/mob/living/carbon/alien/alien_defense.dm @@ -104,7 +104,9 @@ In all, this is a lot like the monkey code. /N add_logs(M, src, "attacked") updatehealth() -/mob/living/carbon/alien/ex_act(severity, target) +/mob/living/carbon/alien/ex_act(severity, target, origin) + if(origin && istype(origin, /datum/spacevine_mutation) && isvineimmune(src)) + return ..() switch (severity) if (1) @@ -125,4 +127,4 @@ In all, this is a lot like the monkey code. /N return 0 /mob/living/carbon/alien/acid_act(acidpwr, acid_volume) - return 0//aliens are immune to acid. + return 0//aliens are immune to acid. diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index 5bc761c0faaa..4aae3881bef9 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -13,6 +13,8 @@ qdel(food) for(var/BP in bodyparts) qdel(BP) + for(var/imp in implants) + qdel(imp) bodyparts = list() remove_from_all_data_huds() if(dna) diff --git a/code/modules/mob/living/carbon/carbon_defense.dm b/code/modules/mob/living/carbon/carbon_defense.dm index 74898463ff98..41bc9fde9dcc 100644 --- a/code/modules/mob/living/carbon/carbon_defense.dm +++ b/code/modules/mob/living/carbon/carbon_defense.dm @@ -43,6 +43,7 @@ mob/living/carbon/bullet_act(obj/item/projectile/P, def_zone) send_item_attack_message(I, user, affecting.name) if(I.force) apply_damage(I.force, I.damtype, affecting) + damage_clothes(I.force, I.damtype, "melee", affecting.body_zone) if(I.damtype == BRUTE && affecting.status == BODYPART_ORGANIC) if(prob(33)) I.add_mob_blood(src) @@ -289,12 +290,16 @@ mob/living/carbon/bullet_act(obj/item/projectile/P, def_zone) /mob/living/carbon/damage_clothes(damage_amount, damage_type = BRUTE, damage_flag = 0, def_zone) + if(damage_type != BRUTE && damage_type != BURN) + return var/bodypart_bit = 0 + if(damage_flag != "bomb") + damage_amount *= 0.5 //0.5 multiplier for balance reason, we don't want clothes to be too easily destroyed if(def_zone) bodypart_bit = body_zone2body_parts_covered(def_zone) for(var/X in get_equipped_items()) var/obj/item/I = X - if(I.body_parts_covered & bodypart_bit) - I.take_damage(0.5*damage_amount, damage_type, damage_flag, 0) - //0.5 multiplier for balance reason, we don't want clothes to be too easily destroyed + if(!bodypart_bit || (I.body_parts_covered & bodypart_bit)) + I.take_damage(damage_amount, damage_type, damage_flag, 0) + diff --git a/code/modules/mob/living/carbon/carbon_defines.dm b/code/modules/mob/living/carbon/carbon_defines.dm index f73ad1053c12..a4070f0e1bc3 100644 --- a/code/modules/mob/living/carbon/carbon_defines.dm +++ b/code/modules/mob/living/carbon/carbon_defines.dm @@ -5,6 +5,8 @@ var/list/internal_organs = list() //List of /obj/item/organ in the mob. They don't go in the contents for some reason I don't want to know. var/list/internal_organs_slot = list() //Same as above, but stores "slot ID" - "organ" pairs for easy access. + var/list/implants = list() + var/silent = 0 //Can't talk. Value goes down every life proc. //NOTE TO FUTURE CODERS: DO NOT INITIALIZE NUMERICAL VARS AS NULL OR I WILL MURDER YOU. var/obj/item/handcuffed = null //Whether or not the mob is handcuffed diff --git a/code/modules/mob/living/carbon/human/emote.dm b/code/modules/mob/living/carbon/human/emote.dm index 92e09344c462..851259bc8b22 100644 --- a/code/modules/mob/living/carbon/human/emote.dm +++ b/code/modules/mob/living/carbon/human/emote.dm @@ -13,9 +13,8 @@ var/muzzled = is_muzzled() //var/m_type = 1 - for (var/obj/item/weapon/implant/I in src) - if (I.implanted) - I.trigger(act, src) + for (var/obj/item/weapon/implant/I in implants) + I.trigger(act, src) var/miming=0 if(mind) diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm index 487da019e746..f9feee493d74 100644 --- a/code/modules/mob/living/carbon/human/examine.dm +++ b/code/modules/mob/living/carbon/human/examine.dm @@ -298,13 +298,13 @@ msg += "\[Front photo\] " msg += "\[Side photo\]
" if(istype(H.glasses, /obj/item/clothing/glasses/hud/health) || istype(CIH,/obj/item/organ/cyberimp/eyes/hud/medical)) - var/implant_detect + var/cyberimp_detect for(var/obj/item/organ/cyberimp/CI in internal_organs) if(CI.status == ORGAN_ROBOTIC) - implant_detect += "[name] is modified with a [CI.name].
" - if(implant_detect) + cyberimp_detect += "[name] is modified with a [CI.name].
" + if(cyberimp_detect) msg += "Detected cybernetic modifications:
" - msg += implant_detect + msg += cyberimp_detect if(R) var/health_r = R.fields["p_stat"] msg += "\[[health_r]\]" diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index d8d22fceb353..a762540f4d77 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -588,7 +588,7 @@ threatcount += 1 //mindshield implants imply trustworthyness - if(isloyal(src)) + if(isloyal()) threatcount -= 1 //Agent cards lower threatlevel. diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm index cf7908ce2ef5..8d98283958a8 100644 --- a/code/modules/mob/living/carbon/human/human_defense.dm +++ b/code/modules/mob/living/carbon/human/human_defense.dm @@ -339,10 +339,11 @@ ..() -/mob/living/carbon/human/ex_act(severity, ex_target) +/mob/living/carbon/human/ex_act(severity, target, origin) - if(istype(ex_target, /datum/spacevine_mutation) && isvineimmune(src)) + if(origin && istype(origin, /datum/spacevine_mutation) && isvineimmune(src)) return + ..() var/b_loss = 0 var/f_loss = 0 var/bomb_armor = getarmor(null, "bomb") @@ -351,8 +352,9 @@ if (1) if(prob(bomb_armor)) b_loss = 500 - var/atom/target = get_edge_target_turf(src, get_dir(src, get_step_away(src, src))) - throw_at(target, 200, 4) + var/atom/throw_target = get_edge_target_turf(src, get_dir(src, get_step_away(src, src))) + throw_at(throw_target, 200, 4) + damage_clothes(400 - bomb_armor, BRUTE, "bomb") else gib() return @@ -363,7 +365,7 @@ if(bomb_armor) b_loss = 30*(2 - round(bomb_armor*0.01, 0.05)) f_loss = b_loss - + damage_clothes(200 - bomb_armor, BRUTE, "bomb") if (!istype(ears, /obj/item/clothing/ears/earmuffs)) adjustEarDamage(30, 120) if (prob(70)) @@ -373,16 +375,13 @@ b_loss = 30 if(bomb_armor) b_loss = 15*(2 - round(bomb_armor*0.01, 0.05)) - + damage_clothes(max(50 - bomb_armor, 0), BRUTE, "bomb") if (!istype(ears, /obj/item/clothing/ears/earmuffs)) adjustEarDamage(15,60) if (prob(50)) Paralyse(8) take_overall_damage(b_loss,f_loss) - if(bomb_armor == 100) //full bomb armor set, we don't call contents_explosion - flash_act() - return //attempt to dismember bodyparts if(severity <= 2 || !bomb_armor) @@ -395,7 +394,7 @@ max_limb_loss-- if(!max_limb_loss) break - ..() + /mob/living/carbon/human/blob_act(obj/structure/blob/B) if(stat == DEAD) diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm index 0a26478c0c0c..ac7334bcf2c4 100644 --- a/code/modules/mob/living/carbon/human/species.dm +++ b/code/modules/mob/living/carbon/human/species.dm @@ -1086,7 +1086,7 @@ var/weakness = H.check_weakness(I, user) apply_damage(I.force * weakness, I.damtype, def_zone, armor_block, H) - H.damage_clothes(I.force, BRUTE, "melee", affecting.body_zone) + H.damage_clothes(I.force, I.damtype, "melee", affecting.body_zone) H.send_item_attack_message(I, user, hit_area) diff --git a/code/modules/mob/living/carbon/inventory.dm b/code/modules/mob/living/carbon/inventory.dm index e399110909f9..b1db784fb462 100644 --- a/code/modules/mob/living/carbon/inventory.dm +++ b/code/modules/mob/living/carbon/inventory.dm @@ -114,3 +114,4 @@ if(I.flags_inv & HIDEMASK || forced) update_inv_wear_mask() update_inv_head() + diff --git a/code/modules/mob/living/carbon/monkey/monkey.dm b/code/modules/mob/living/carbon/monkey/monkey.dm index 33cbce3edb14..186a1d08ca73 100644 --- a/code/modules/mob/living/carbon/monkey/monkey.dm +++ b/code/modules/mob/living/carbon/monkey/monkey.dm @@ -122,7 +122,7 @@ threatcount += 4 //mindshield implants imply trustworthyness - if(isloyal(src)) + if(isloyal()) threatcount -= 1 return threatcount diff --git a/code/modules/mob/living/carbon/monkey/monkey_defense.dm b/code/modules/mob/living/carbon/monkey/monkey_defense.dm index 39b2637cc1c8..b698452162f3 100644 --- a/code/modules/mob/living/carbon/monkey/monkey_defense.dm +++ b/code/modules/mob/living/carbon/monkey/monkey_defense.dm @@ -179,7 +179,9 @@ take_bodypart_damage(acidpwr * min(0.6, acid_volume*0.1)) -/mob/living/carbon/monkey/ex_act(severity, target) +/mob/living/carbon/monkey/ex_act(severity, target, origin) + if(origin && istype(origin, /datum/spacevine_mutation) && isvineimmune(src)) + return ..() switch (severity) @@ -189,12 +191,14 @@ if (2) take_overall_damage(60, 60) + damage_clothes(200, BRUTE, "bomb") adjustEarDamage(30, 120) if(prob(70)) Paralyse(10) if(3) take_overall_damage(30, 0) + damage_clothes(50, BRUTE, "bomb") adjustEarDamage(15,60) if (prob(50)) Paralyse(8) diff --git a/code/modules/mob/living/living_defense.dm b/code/modules/mob/living/living_defense.dm index bf2d47892b73..fa01c2bf1f80 100644 --- a/code/modules/mob/living/living_defense.dm +++ b/code/modules/mob/living/living_defense.dm @@ -268,8 +268,8 @@ M.do_attack_animation(src) return 1 -/mob/living/ex_act(severity, origin) - if(istype(origin, /datum/spacevine_mutation) && isvineimmune(src)) +/mob/living/ex_act(severity, target, origin) + if(origin && istype(origin, /datum/spacevine_mutation) && isvineimmune(src)) return ..() flash_act() diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm index 492b9d022ae5..5302d9d1eefe 100644 --- a/code/modules/mob/living/silicon/ai/ai.dm +++ b/code/modules/mob/living/silicon/ai/ai.dm @@ -376,7 +376,7 @@ var/list/ai_list = list() src << browse(last_paper_seen, "window=show_paper") //Carn: holopad requests if(href_list["jumptoholopad"]) - var/obj/machinery/hologram/holopad/H = locate(href_list["jumptoholopad"]) + var/obj/machinery/holopad/H = locate(href_list["jumptoholopad"]) if(stat == CONSCIOUS) if(H) H.attack_ai(src) //may as well recycle diff --git a/code/modules/mob/living/silicon/ai/ai_defense.dm b/code/modules/mob/living/silicon/ai/ai_defense.dm index 6e08200af66f..28cac80aea3e 100644 --- a/code/modules/mob/living/silicon/ai/ai_defense.dm +++ b/code/modules/mob/living/silicon/ai/ai_defense.dm @@ -31,8 +31,6 @@ ..() /mob/living/silicon/ai/ex_act(severity, target) - ..() - switch(severity) if(1) gib() diff --git a/code/modules/mob/living/silicon/ai/freelook/eye.dm b/code/modules/mob/living/silicon/ai/freelook/eye.dm index e80591bfadbe..e0cadc73dc10 100644 --- a/code/modules/mob/living/silicon/ai/freelook/eye.dm +++ b/code/modules/mob/living/silicon/ai/freelook/eye.dm @@ -25,8 +25,8 @@ if(ai.client) ai.client.eye = src //Holopad - if(istype(ai.current, /obj/machinery/hologram/holopad)) - var/obj/machinery/hologram/holopad/H = ai.current + if(istype(ai.current, /obj/machinery/holopad)) + var/obj/machinery/holopad/H = ai.current H.move_hologram(ai) /mob/camera/aiEye/Move() diff --git a/code/modules/mob/living/silicon/ai/say.dm b/code/modules/mob/living/silicon/ai/say.dm index e9854777e3eb..fcc464994287 100644 --- a/code/modules/mob/living/silicon/ai/say.dm +++ b/code/modules/mob/living/silicon/ai/say.dm @@ -47,7 +47,7 @@ if (!message) return - var/obj/machinery/hologram/holopad/T = current + var/obj/machinery/holopad/T = current if(istype(T) && T.masters[src])//If there is a hologram and its master is the user. send_speech(message, 7, T, "robot", get_spans()) src << "Holopad transmitted, [real_name] \"[message]\""//The AI can "hear" its own message. diff --git a/code/modules/mob/living/silicon/pai/pai_defense.dm b/code/modules/mob/living/silicon/pai/pai_defense.dm index 416ee756b668..63714a753583 100644 --- a/code/modules/mob/living/silicon/pai/pai_defense.dm +++ b/code/modules/mob/living/silicon/pai/pai_defense.dm @@ -33,7 +33,6 @@ src << "You feel an electric surge run through your circuitry and become acutely aware at how lucky you are that you can still feel at all." /mob/living/silicon/pai/ex_act(severity, target) - ..() switch(severity) if(1) diff --git a/code/modules/mob/living/simple_animal/animal_defense.dm b/code/modules/mob/living/simple_animal/animal_defense.dm index 9478bdd60e05..d2a260f2f627 100644 --- a/code/modules/mob/living/simple_animal/animal_defense.dm +++ b/code/modules/mob/living/simple_animal/animal_defense.dm @@ -99,7 +99,9 @@ Proj.on_hit(src) return 0 -/mob/living/simple_animal/ex_act(severity, target) +/mob/living/simple_animal/ex_act(severity, target, origin) + if(origin && istype(origin, /datum/spacevine_mutation) && isvineimmune(src)) + return ..() var/bomb_armor = getarmor(null, "bomb") switch (severity) diff --git a/code/modules/mob/living/ventcrawling.dm b/code/modules/mob/living/ventcrawling.dm index d7daf9e2da3d..a63e9fad1faf 100644 --- a/code/modules/mob/living/ventcrawling.dm +++ b/code/modules/mob/living/ventcrawling.dm @@ -53,17 +53,17 @@ var/list/ventcrawl_machinery = list(/obj/machinery/atmospherics/components/unary if(!client) return - if(iscarbon(src) && contents.len && ventcrawler < 2)//It must have atleast been 1 to get this far - for(var/obj/item/I in contents) - var/failed = 0 - if(istype(I, /obj/item/weapon/implant)) - continue - else - failed++ - - if(failed) - src << "You can't crawl around in the ventilation ducts with items!" - return + if(iscarbon(src) && ventcrawler < 2)//It must have atleast been 1 to get this far + var/failed = 0 + var/list/items_list = get_equipped_items() + if(items_list.len) + failed = 1 + for(var/obj/item/I in held_items) + failed = 1 + break + if(failed) + src << "You can't crawl around in the ventilation ducts with items!" + return visible_message("[src] scrambles into the ventilation ducts!","You climb into the ventilation ducts.") forceMove(vent_found) diff --git a/code/modules/mob/mob_helpers.dm b/code/modules/mob/mob_helpers.dm index 766cc83f1b74..db9fea8663d0 100644 --- a/code/modules/mob/mob_helpers.dm +++ b/code/modules/mob/mob_helpers.dm @@ -1,12 +1,14 @@ // see _DEFINES/is_helpers.dm for mob type checks -/proc/isloyal(A) //Checks to see if the person contains a mindshield implant, then checks that the implant is actually inside of them - for(var/obj/item/weapon/implant/mindshield/L in A) - if(L && L.implanted) - return 1 +/mob/proc/isloyal() //Checks to see if the person contains a mindshield implant, then checks that the implant is actually inside of them return 0 +/mob/living/carbon/isloyal() + for(var/obj/item/weapon/implant/mindshield/L in implants) + return 1 + + /proc/check_zone(zone) if(!zone) return "chest" diff --git a/code/modules/mob/transform_procs.dm b/code/modules/mob/transform_procs.dm index 6f662412c65f..4bc408098b2f 100644 --- a/code/modules/mob/transform_procs.dm +++ b/code/modules/mob/transform_procs.dm @@ -4,14 +4,14 @@ //Handle items on mob //first implants & organs - var/list/implants = list() + var/list/stored_implants = list() var/list/int_organs = list() - - if (tr_flags & TR_KEEPIMPLANTS) - for(var/obj/item/weapon/implant/W in src) - implants += W + for(var/X in implants) + var/obj/item/weapon/implant/IMP = X + stored_implants += IMP + IMP.removed(src, 1, 1) if (tr_flags & TR_KEEPORGANS) for(var/X in internal_organs) @@ -29,10 +29,11 @@ CH.cavity_item = null if(tr_flags & TR_KEEPITEMS) - for(var/obj/item/W in (contents-implants-cavity_object)) + var/Itemlist = get_equipped_items() + Itemlist += held_items + for(var/obj/item/W in Itemlist) unEquip(W) - //Make mob invisible and spawn animation notransform = 1 canmove = 0 @@ -84,9 +85,9 @@ //re-add implants to new mob if (tr_flags & TR_KEEPIMPLANTS) - for(var/obj/item/weapon/implant/I in implants) - I.loc = O - I.implanted = O + for(var/Y in implants) + var/obj/item/weapon/implant/IMP = Y + IMP.implant(O, null, 1) //re-add organs to new mob if(tr_flags & TR_KEEPORGANS) @@ -141,12 +142,14 @@ //Handle items on mob //first implants & organs - var/list/implants = list() + var/list/stored_implants = list() var/list/int_organs = list() if (tr_flags & TR_KEEPIMPLANTS) - for(var/obj/item/weapon/implant/W in src) - implants += W + for(var/X in implants) + var/obj/item/weapon/implant/IMP = X + stored_implants += IMP + IMP.removed(src, 1, 1) if (tr_flags & TR_KEEPORGANS) for(var/X in internal_organs) @@ -165,7 +168,9 @@ //now the rest if (tr_flags & TR_KEEPITEMS) - for(var/obj/item/W in (contents-implants-cavity_object)) + var/Itemlist = get_equipped_items() + Itemlist += held_items + for(var/obj/item/W in Itemlist) unEquip(W) if (client) client.screen -= W @@ -231,10 +236,9 @@ //re-add implants to new mob if (tr_flags & TR_KEEPIMPLANTS) - for(var/obj/item/weapon/implant/I in implants) - I.loc = O - I.implanted = O - O.sec_hud_set_implants() + for(var/Y in implants) + var/obj/item/weapon/implant/IMP = Y + IMP.implant(O, null, 1) if(tr_flags & TR_KEEPORGANS) for(var/X in O.internal_organs) diff --git a/code/modules/power/apc.dm b/code/modules/power/apc.dm index 79475cd0469f..ff2685672521 100644 --- a/code/modules/power/apc.dm +++ b/code/modules/power/apc.dm @@ -155,6 +155,13 @@ disconnect_terminal() . = ..() +/obj/machinery/power/apc/handle_atom_del(atom/A) + if(A == cell) + cell = null + update_icon() + update_icon() + updateUsrDialog() + /obj/machinery/power/apc/proc/make_terminal() // create a terminal object at the same position as original turf loc // wires will attach to this diff --git a/code/modules/projectiles/pins.dm b/code/modules/projectiles/pins.dm index b1a42f2db9c0..1daf68c4d7fc 100644 --- a/code/modules/projectiles/pins.dm +++ b/code/modules/projectiles/pins.dm @@ -95,9 +95,11 @@ var/obj/item/weapon/implant/req_implant = null /obj/item/device/firing_pin/implant/pin_auth(mob/living/user) - for(var/obj/item/weapon/implant/I in user) - if(req_implant && I.imp_in == user && I.type == req_implant) - return 1 + if(iscarbon(user)) + var/mob/living/carbon/C = user + for(var/obj/item/weapon/implant/I in C.implants) + if(req_implant && I.type == req_implant) + return 1 return 0 /obj/item/device/firing_pin/implant/mindshield diff --git a/code/modules/reagents/chemistry/machinery/chem_dispenser.dm b/code/modules/reagents/chemistry/machinery/chem_dispenser.dm index 79072028c9a8..f941ab453bb9 100644 --- a/code/modules/reagents/chemistry/machinery/chem_dispenser.dm +++ b/code/modules/reagents/chemistry/machinery/chem_dispenser.dm @@ -85,9 +85,16 @@ if(severity < 3) ..() -/obj/machinery/chem_dispenser/blob_act(obj/structure/blob/B) - if(prob(50)) - qdel(src) +/obj/machinery/chem_dispenser/contents_explosion(severity, target) + ..() + if(beaker) + beaker.ex_act(severity, target) + +/obj/machinery/chem_dispenser/handle_atom_del(atom/A) + ..() + if(A == beaker) + beaker = null + cut_overlays() /obj/machinery/chem_dispenser/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, \ datum/tgui/master_ui = null, datum/ui_state/state = default_state) @@ -154,7 +161,7 @@ . = TRUE if("eject") if(beaker) - beaker.loc = loc + beaker.forceMove(loc) beaker = null cut_overlays() . = TRUE diff --git a/code/modules/reagents/chemistry/machinery/chem_master.dm b/code/modules/reagents/chemistry/machinery/chem_master.dm index 52dccdedcd86..d6e10a250edb 100644 --- a/code/modules/reagents/chemistry/machinery/chem_master.dm +++ b/code/modules/reagents/chemistry/machinery/chem_master.dm @@ -55,6 +55,23 @@ if(severity < 3) ..() +/obj/machinery/chem_master/contents_explosion(severity, target) + ..() + if(beaker) + beaker.ex_act(severity, target) + if(bottle) + bottle.ex_act(severity, target) + +/obj/machinery/chem_master/handle_atom_del(atom/A) + ..() + if(A == beaker) + beaker = null + reagents.clear_reagents() + icon_state = "mixer0" + else if(A == bottle) + bottle = null + + /obj/machinery/chem_master/blob_act(obj/structure/blob/B) if (prob(50)) qdel(src) diff --git a/code/modules/reagents/chemistry/machinery/reagentgrinder.dm b/code/modules/reagents/chemistry/machinery/reagentgrinder.dm index cc6a21adf5ad..87ab87432fa3 100644 --- a/code/modules/reagents/chemistry/machinery/reagentgrinder.dm +++ b/code/modules/reagents/chemistry/machinery/reagentgrinder.dm @@ -82,14 +82,36 @@ var/list/holdingitems = list() /obj/machinery/reagentgrinder/New() - ..() - beaker = new /obj/item/weapon/reagent_containers/glass/beaker/large(src) - return + ..() + beaker = new /obj/item/weapon/reagent_containers/glass/beaker/large(src) + return + +/obj/machinery/reagentgrinder/Destroy() + if(beaker) + qdel(beaker) + beaker = null + return ..() + +/obj/machinery/reagentgrinder/contents_explosion(severity, target) + if(beaker) + beaker.ex_act(severity, target) + +/obj/machinery/reagentgrinder/handle_atom_del(atom/A) + ..() + if(A == beaker) + beaker = null + update_icon() + updateUsrDialog() + +/obj/machinery/reagentgrinder/deconstruct(disassembled = TRUE) + new /obj/item/stack/sheet/metal (loc, 3) + qdel(src) /obj/machinery/reagentgrinder/update_icon() - icon_state = "juicer"+num2text(!isnull(beaker)) - return - + if(beaker) + icon_state = "juicer1" + else + icon_state = "juicer0" /obj/machinery/reagentgrinder/attackby(obj/item/I, mob/user, params) if(default_unfasten_wrench(user, I)) diff --git a/code/modules/reagents/reagent_containers.dm b/code/modules/reagents/reagent_containers.dm index 3c98b775e44b..ddd0ccd26219 100644 --- a/code/modules/reagents/reagent_containers.dm +++ b/code/modules/reagents/reagent_containers.dm @@ -71,7 +71,8 @@ if(reagents) for(var/datum/reagent/R in reagents.reagent_list) R.on_ex_act() - ..() + if(!qdeleted(src)) + ..() /obj/item/weapon/reagent_containers/fire_act(exposed_temperature, exposed_volume) reagents.chem_temp += 30 diff --git a/code/modules/recycling/disposal-structures.dm b/code/modules/recycling/disposal-structures.dm index 4298503adea3..652fa1f1cd51 100644 --- a/code/modules/recycling/disposal-structures.dm +++ b/code/modules/recycling/disposal-structures.dm @@ -124,7 +124,8 @@ /obj/structure/disposalholder/allow_drop() return 1 - +/obj/structure/disposalholder/ex_act(severity, target) + return // Disposal pipes @@ -278,13 +279,10 @@ // pipe affected by explosion -/obj/structure/disposalpipe/ex_act(severity, target) - - //pass on ex_act to our contents before calling it on ourself +/obj/structure/disposalpipe/contents_explosion(severity, target) var/obj/structure/disposalholder/H = locate() in src if(H) H.contents_explosion(severity, target) - ..() /obj/structure/disposalpipe/run_obj_armor(damage_amount, damage_type, damage_flag = 0, attack_dir) diff --git a/code/modules/recycling/disposal-unit.dm b/code/modules/recycling/disposal-unit.dm index 17809e11f11b..b2afeab5b464 100644 --- a/code/modules/recycling/disposal-unit.dm +++ b/code/modules/recycling/disposal-unit.dm @@ -257,7 +257,7 @@ H.vent_gas(loc) qdel(H) -/obj/machinery/disposal/deconstruct() +/obj/machinery/disposal/deconstruct(disassembled = TRUE) if(!(flags & NODECONSTRUCT)) if(stored) var/turf/T = loc diff --git a/code/modules/recycling/sortingmachinery.dm b/code/modules/recycling/sortingmachinery.dm index 6bdd139484ca..0f99044f1e1d 100644 --- a/code/modules/recycling/sortingmachinery.dm +++ b/code/modules/recycling/sortingmachinery.dm @@ -15,9 +15,13 @@ /obj/structure/bigDelivery/Destroy() var/turf/T = get_turf(src) for(var/atom/movable/AM in contents) - AM.loc = T + AM.forceMove(T) return ..() +/obj/structure/bigDelivery/contents_explosion(severity, target) + for(var/atom/movable/AM in contents) + AM.ex_act() + /obj/structure/bigDelivery/attackby(obj/item/W, mob/user, params) if(istype(W, /obj/item/device/destTagger)) var/obj/item/device/destTagger/O = W @@ -74,6 +78,9 @@ var/giftwrapped = 0 var/sortTag = 0 +/obj/item/smallDelivery/contents_explosion(severity, target) + for(var/atom/movable/AM in contents) + AM.ex_act() /obj/item/smallDelivery/attack_self(mob/user) user.unEquip(src) diff --git a/code/modules/research/destructive_analyzer.dm b/code/modules/research/destructive_analyzer.dm index 958dd671d4dc..a32e0daaf9bd 100644 --- a/code/modules/research/destructive_analyzer.dm +++ b/code/modules/research/destructive_analyzer.dm @@ -61,7 +61,7 @@ Note: Must be placed within 3 tiles of the R&D Console return busy = 1 loaded_item = O - O.loc = src + O.forceMove(src) user << "You add the [O.name] to the [src.name]!" flick("d_analyzer_la", src) spawn(10) diff --git a/code/modules/research/rdconsole.dm b/code/modules/research/rdconsole.dm index 7e06dc89b025..3d922fa3ae77 100644 --- a/code/modules/research/rdconsole.dm +++ b/code/modules/research/rdconsole.dm @@ -277,7 +277,7 @@ won't update every console in existence) but it's more of a hassle to do. Also, usr << "The destructive analyzer is busy at the moment." else if(linked_destroy.loaded_item) - linked_destroy.loaded_item.loc = linked_destroy.loc + linked_destroy.loaded_item.forceMove(linked_destroy.loc) linked_destroy.loaded_item = null linked_destroy.icon_state = "d_analyzer" screen = 1.0 diff --git a/code/modules/surgery/implant_removal.dm b/code/modules/surgery/implant_removal.dm index 92704aa13569..8b7eecbb3609 100644 --- a/code/modules/surgery/implant_removal.dm +++ b/code/modules/surgery/implant_removal.dm @@ -14,7 +14,9 @@ var/obj/item/weapon/implant/I = null /datum/surgery_step/extract_implant/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) - I = locate(/obj/item/weapon/implant) in target + for(var/obj/item/O in target.implants) + I = O + break if(I) user.visible_message("[user] begins to extract [I] from [target]'s [target_zone].", "You begin to extract [I] from [target]'s [target_zone]...") else diff --git a/tgstation.dme b/tgstation.dme index 963ba6566896..4c73fc922503 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -707,10 +707,13 @@ #include "code\game\objects\items\weapons\grenades\spawnergrenade.dm" #include "code\game\objects\items\weapons\grenades\syndieminibomb.dm" #include "code\game\objects\items\weapons\implants\implant.dm" +#include "code\game\objects\items\weapons\implants\implant_abductor.dm" #include "code\game\objects\items\weapons\implants\implant_chem.dm" #include "code\game\objects\items\weapons\implants\implant_clown.dm" +#include "code\game\objects\items\weapons\implants\implant_exile.dm" #include "code\game\objects\items\weapons\implants\implant_explosive.dm" #include "code\game\objects\items\weapons\implants\implant_freedom.dm" +#include "code\game\objects\items\weapons\implants\implant_gang.dm" #include "code\game\objects\items\weapons\implants\implant_krav_maga.dm" #include "code\game\objects\items\weapons\implants\implant_loyality.dm" #include "code\game\objects\items\weapons\implants\implant_misc.dm"