From f6db08af2e67c0a8933557f9f69bb9a5eb4fa6f0 Mon Sep 17 00:00:00 2001 From: phil235 Date: Sat, 15 Oct 2016 23:01:37 +0200 Subject: [PATCH] Contents_explosion() tweaks (#20934) * When any object is hit by an explosion, we no longer always call ex_act() on all its contents indiscriminately. The default contents_explosion() does nothing and it's overriden for certain objects only like storage items, machines with occupants, mechs. I've also overriden handle_atom_del() for many objects so that any sudden deletion of an object referenced in an object var of its container properly nullifies such references, avoiding potential runtime and updating the container's icon_state (e.g. admin-delete a mixer's beaker and the mixer's sprite updates immediately). I've tweaked bomb effect on worn clothes, having some armor but not 100% now still protects your clothes somewhat. Fixes some arguments of ex_act in living/ex_act() and other mobs. * derp and map fixes. * dem map fixes, man. * More work on code that use implants, simplified now that we can use the "implants" carbon var. * some fixes * more typos and fixes. --- _maps/map_files/BirdStation/BirdStation.dmm | 44 ++--- .../map_files/DreamStation/dreamstation04.dmm | 102 +++++------ .../EfficiencyStation/EfficiencyStation.dmm | 104 +++++------ _maps/map_files/MetaStation/MetaStation.dmm | 160 ++++++++-------- _maps/map_files/MiniStation/MiniStation.dmm | 2 +- _maps/map_files/TgStation/tgstation.2.1.3.dmm | 102 +++++------ _maps/shuttles/emergency_meta.dmm | 2 +- code/datums/diseases/transformation.dm | 11 +- code/datums/mind.dm | 8 +- code/game/atoms.dm | 6 +- code/game/data_huds.dm | 33 ++-- code/game/gamemodes/clock_cult/clock_cult.dm | 2 +- .../gamemodes/clock_cult/clock_scripture.dm | 2 +- .../gamemodes/clock_cult/clock_structures.dm | 10 +- code/game/gamemodes/cult/cult.dm | 2 +- code/game/gamemodes/gang/gang.dm | 2 +- code/game/gamemodes/gang/gang_pen.dm | 61 ------- .../miniantags/abduction/abduction_gear.dm | 48 ----- .../miniantags/abduction/abduction_surgery.dm | 2 +- code/game/gamemodes/revolution/revolution.dm | 2 +- code/game/gamemodes/wizard/artefact.dm | 8 +- code/game/machinery/PDApainter.dm | 19 ++ code/game/machinery/cloning.dm | 24 +-- code/game/machinery/computer/card.dm | 26 +++ code/game/machinery/computer/cloning.dm | 13 +- code/game/machinery/doors/airlock.dm | 10 +- code/game/machinery/hologram.dm | 172 ++++++++---------- code/game/machinery/machinery.dm | 10 + code/game/mecha/equipment/mecha_equipment.dm | 2 + code/game/mecha/mecha.dm | 5 +- code/game/mecha/mecha_control_console.dm | 17 +- code/game/mecha/mecha_defense.dm | 20 +- code/game/mecha/medical/medical.dm | 3 +- code/game/mecha/working/ripley.dm | 13 +- code/game/mecha/working/working.dm | 3 +- code/game/objects/items/devices/doorCharge.dm | 7 + code/game/objects/items/devices/scanners.dm | 8 +- .../objects/items/weapons/implants/implant.dm | 34 ++-- .../weapons/implants/implant_abductor.dm | 47 +++++ .../items/weapons/implants/implant_exile.dm | 30 +++ .../weapons/implants/implant_explosive.dm | 44 +++-- .../items/weapons/implants/implant_gang.dm | 56 ++++++ .../weapons/implants/implant_loyality.dm | 19 +- .../items/weapons/implants/implant_misc.dm | 19 ++ .../items/weapons/implants/implant_storage.dm | 30 +-- .../items/weapons/implants/implantuplink.dm | 13 +- .../objects/items/weapons/storage/storage.dm | 5 + .../structures/crates_lockers/closets.dm | 6 + code/game/objects/structures/displaycase.dm | 11 +- code/game/objects/structures/extinguisher.dm | 10 + code/game/objects/structures/guncase.dm | 8 + code/game/objects/structures/plasticflaps.dm | 12 -- code/game/objects/structures/safe.dm | 9 +- .../structures/transit_tubes/transit_tube.dm | 18 +- .../transit_tubes/transit_tube_pod.dm | 20 +- code/game/turfs/simulated/walls.dm | 6 +- code/game/turfs/turf.dm | 6 + code/modules/admin/verbs/debug.dm | 4 +- code/modules/admin/verbs/manipulate_organs.dm | 3 +- code/modules/admin/verbs/onlyone.dm | 6 +- code/modules/assembly/flash.dm | 2 +- .../components/unary_devices/cryo.dm | 11 ++ code/modules/awaymissions/exile.dm | 31 ---- code/modules/awaymissions/gateway.dm | 8 +- code/modules/clothing/outfits/ert.dm | 4 +- code/modules/clothing/outfits/standard.dm | 11 +- code/modules/events/immovable_rod.dm | 2 +- code/modules/events/spacevine.dm | 5 +- code/modules/hydroponics/biogenerator.dm | 18 ++ code/modules/jobs/job_types/captain.dm | 4 +- code/modules/jobs/job_types/civilian.dm | 3 +- code/modules/jobs/job_types/security.dm | 16 +- code/modules/mining/machine_redemption.dm | 9 +- code/modules/mining/satchel_ore_boxdm.dm | 33 ++-- .../mob/living/carbon/alien/alien_defense.dm | 6 +- code/modules/mob/living/carbon/carbon.dm | 2 + .../mob/living/carbon/carbon_defense.dm | 11 +- .../mob/living/carbon/carbon_defines.dm | 2 + code/modules/mob/living/carbon/human/emote.dm | 5 +- .../mob/living/carbon/human/examine.dm | 8 +- code/modules/mob/living/carbon/human/human.dm | 2 +- .../mob/living/carbon/human/human_defense.dm | 19 +- .../mob/living/carbon/human/species.dm | 2 +- code/modules/mob/living/carbon/inventory.dm | 1 + .../mob/living/carbon/monkey/monkey.dm | 2 +- .../living/carbon/monkey/monkey_defense.dm | 6 +- code/modules/mob/living/living_defense.dm | 4 +- code/modules/mob/living/silicon/ai/ai.dm | 2 +- .../mob/living/silicon/ai/ai_defense.dm | 2 - .../mob/living/silicon/ai/freelook/eye.dm | 4 +- code/modules/mob/living/silicon/ai/say.dm | 2 +- .../mob/living/silicon/pai/pai_defense.dm | 1 - .../living/simple_animal/animal_defense.dm | 4 +- code/modules/mob/living/ventcrawling.dm | 22 +-- code/modules/mob/mob_helpers.dm | 10 +- code/modules/mob/transform_procs.dm | 40 ++-- code/modules/power/apc.dm | 7 + code/modules/projectiles/pins.dm | 8 +- .../chemistry/machinery/chem_dispenser.dm | 15 +- .../chemistry/machinery/chem_master.dm | 17 ++ .../chemistry/machinery/reagentgrinder.dm | 34 +++- code/modules/reagents/reagent_containers.dm | 3 +- code/modules/recycling/disposal-structures.dm | 8 +- code/modules/recycling/disposal-unit.dm | 2 +- code/modules/recycling/sortingmachinery.dm | 9 +- code/modules/research/destructive_analyzer.dm | 2 +- code/modules/research/rdconsole.dm | 2 +- code/modules/surgery/implant_removal.dm | 4 +- tgstation.dme | 3 + 109 files changed, 1064 insertions(+), 845 deletions(-) create mode 100644 code/game/objects/items/weapons/implants/implant_abductor.dm create mode 100644 code/game/objects/items/weapons/implants/implant_exile.dm create mode 100644 code/game/objects/items/weapons/implants/implant_gang.dm diff --git a/_maps/map_files/BirdStation/BirdStation.dmm b/_maps/map_files/BirdStation/BirdStation.dmm index 02cee02205b..e32358f3506 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 fade044207b..6c70ee3c693 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 b442015461d..ab4f89559f5 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 50a84e80fc7..138f1dd17f3 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 4ce944db059..8b4ca7f63ac 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 a2f3aebcc6a..4146891a1c3 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 dce75f11ff4..b9b3e062684 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 f3054dcaeb3..33c394e5bcc 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 7d12dd05993..f5fe92b9316 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 504f72613c1..eb24d708c1f 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 abdbfb5206b..32f6133ee0e 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 69c3db97d8d..0f1e5ef2231 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 ebb60dc031b..5dfc3f1f30d 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 790c7063d5a..c7c352f1ad4 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 79183c029e2..c2d35148fa4 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 b9f5eaebc28..c5336b84239 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 fde2f5157b5..65209cc9662 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 7b128975915..73cb67faffb 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 d095f67df43..def0cd77e2f 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 901d6f986eb..ca78c4b2787 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 88611b5eb6b..2d998b9c1e3 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 19e8ce9fb6c..e1bf3e23433 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 72b74fe486b..e82965faa41 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 65368175f4e..f78b10de7da 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 0ad5c1ef21e..21890176ee4 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 a780d26d25d..1a106abba83 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 6545d93f90b..9b2f881a4be 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 0439e7faea8..d11748d5eaf 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 1bc6ff16347..fd138afa2f2 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 e1a4e2f021e..3171fd9f09a 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 a252f25ad08..1eaa4259fb4 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 60c79308abf..55d98e86a88 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 7bce65fc5fb..8121507b5ba 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 84155a23b7e..1e96e9f2a43 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 6516e3f4a46..e4c001a508a 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 bedc318e75e..ca6c6cec401 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 e5bb68ef23c..e4e2ce466b5 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 f3584d1d094..fe7dd8d9999 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 00000000000..2084404eacd --- /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 00000000000..11cf876ca98 --- /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 e3562f526c1..a11763f665a 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 00000000000..7505952ba9c --- /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 fe9a59d0df5..387cbe296c4 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 edeb8dda5a7..a3fe9ccf739 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 2a082082570..686dd7db352 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 100589b763d..1ae4915f32f 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 6d1407b857b..ec345f1ab32 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 8d47e895bdb..45d9f76c6b0 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 6d974be8c2e..effec7ca5a2 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 4ec8001ebd7..51b80b07e36 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 8219c7f7a33..4ceb1be8a50 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 8aaf18cf5ed..c9adc35d2aa 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 e249db51d59..52fe2464d6e 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 5c42bb22445..78cdd062fc4 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 520e18ab1ab..8bbe93ec1c2 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 9e8a747be88..2793f838e2e 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 be82bc02b45..ac855999943 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 4ed208924f8..4e05299cc6f 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 289d1b6cd7d..055905a92a0 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 fa8998008d6..5312c41b33c 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 4b8d3042fc6..b1546a64555 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 05f272ac767..c6a059e3f04 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 4e6a69d591b..35af4aa91c2 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 abe092702fa..adfad411a9d 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 6edb3a395dd..e3a9f4f7dee 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 84b7de07b84..09dac1c292a 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 b49ed5a4c6f..da6990ae978 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 93f700d8a52..c002d51ef79 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 f86df0126e6..82287601089 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 f210c426630..d8a276d67db 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 ef2eebf4d14..1605f57c4dc 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 946e31e3a64..05a892a58a5 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 149669a713b..c49001fd7d7 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 1e00a046de0..bc5016ae24d 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 2a84bfafb03..0ac53a3c8a0 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 5bc761c0faa..4aae3881bef 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 74898463ff9..41bc9fde9dc 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 f73ad1053c1..a4070f0e1bc 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 92e09344c46..851259bc8b2 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 487da019e74..f9feee493d7 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 d8d22fceb35..a762540f4d7 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 cf7908ce2ef..8d98283958a 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 0a26478c0c0..ac7334bcf2c 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 e399110909f..b1db784fb46 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 33cbce3edb1..186a1d08ca7 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 39b2637cc1c..b698452162f 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 bf2d47892b7..fa01c2bf1f8 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 492b9d022ae..5302d9d1eef 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 6e08200af66..28cac80aea3 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 e80591bfadb..e0cadc73dc1 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 e9854777e3e..fcc46499428 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 416ee756b66..63714a75358 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 9478bdd60e0..d2a260f2f62 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 d7daf9e2da3..a63e9fad1fa 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 766cc83f1b7..db9fea8663d 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 6f662412c65..4bc408098b2 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 79475cd0469..ff268567252 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 b1a42f2db9c..1daf68c4d7f 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 79072028c9a..f941ab453bb 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 52dccdedcd8..d6e10a250ed 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 cc6a21adf5a..87ab87432fa 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 3c98b775e44..ddd0ccd2621 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 4298503adea..652fa1f1cd5 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 17809e11f11..b2afeab5b46 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 6bdd139484c..0f99044f1e1 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 958dd671d4d..a32e0daaf9b 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 7e06dc89b02..3d922fa3ae7 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 92704aa1356..8b7eecbb360 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 963ba656689..4c73fc92250 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"