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"