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.
This commit is contained in:
phil235
2016-10-15 23:01:37 +02:00
committed by oranges
parent ca26b0ff5c
commit f6db08af2e
109 changed files with 1064 additions and 845 deletions

View File

@@ -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" = (

View File

@@ -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" = (

View File

@@ -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" = (

View File

@@ -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" = (

View File

@@ -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"

View File

@@ -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" = (

View File

@@ -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" = (

View File

@@ -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"

View File

@@ -297,7 +297,7 @@
text += " <a href='?src=\ref[src];revolution=reequip'>Reequip</a> (gives traitor uplink)."
if (objectives.len==0)
text += "<br>Objectives are empty! <a href='?src=\ref[src];revolution=autoobjectives'>Set to kill all heads</a>."
else if(isloyal(current))
else if(current.isloyal())
text += "head|<b>LOYAL</b>|employee|<a href='?src=\ref[src];revolution=headrev'>headrev</a>|rev"
else if (src in ticker.mode.revolutionaries)
text += "head|loyal|<a href='?src=\ref[src];revolution=clear'>employee</a>|<a href='?src=\ref[src];revolution=headrev'>headrev</a>|<b>REV</b>"
@@ -316,7 +316,7 @@
if (ticker.mode.config_tag=="gang")
text = uppertext(text)
text = "<i><b>[text]</b></i>: "
text += "[isloyal(current) ? "<B>LOYAL</B>" : "loyal"]|"
text += "[current.isloyal() ? "<B>LOYAL</B>" : "loyal"]|"
if(src in ticker.mode.get_all_gangsters())
text += "<a href='?src=\ref[src];gang=clear'>none</a>"
else
@@ -423,7 +423,7 @@
text += "loyal|<a href='?src=\ref[src];cult=clear'>employee</a>|<b>CULTIST</b>"
text += "<br>Give <a href='?src=\ref[src];cult=tome'>tome</a>|<a href='?src=\ref[src];cult=amulet'>amulet</a>."
else if(isloyal(current))
else if(current.isloyal())
text += "<b>LOYAL</b>|employee|<a href='?src=\ref[src];cult=cultist'>cultist</a>"
else if(is_convertable_to_cult(current))
text += "loyal|<b>EMPLOYEE</b>|<a href='?src=\ref[src];cult=cultist'>cultist</a>"
@@ -445,7 +445,7 @@
if(is_servant_of_ratvar(current))
text += "loyal|<a href='?src=\ref[src];clockcult=clear'>employee</a>|<b>SERVANT</b>"
text += "<br><a href='?src=\ref[src];clockcult=slab'>Give slab</a>"
else if(isloyal(current))
else if(current.isloyal())
text += "<b>LOYAL</b>|employee|<a href='?src=\ref[src];clockcult=servant'>servant</a>"
else if(is_eligible_servant(current))
text += "loyal|<b>EMPLOYEE</b>|<a href='?src=\ref[src];clockcult=servant'>servant</a>"

View File

@@ -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)

View File

@@ -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]

View File

@@ -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

View File

@@ -1086,7 +1086,7 @@ Judgement: 10 servants, 100 CV, and any existing AIs are converted or destroyed
H << "<span class='sevtug'>[text2ratvar("Oh, a void weapon. How annoying, I may as well not bother.")]</span>\n\
<span class='warning'>Your holy weapon glows a faint orange in an attempt to defend your mind!</span>"
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)

View File

@@ -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("<span class='warning'>[L] visibly trembles!</span>", \
C.visible_message("<span class='warning'>[C] visibly trembles!</span>", \
"<span class='sevtug'>[text2ratvar("You will be mine and his. This puny trinket will not stop me.")]</span>")
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"

View File

@@ -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

View File

@@ -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

View File

@@ -57,64 +57,3 @@
icon_state = "pen"
var/mob/M = get(src, /mob)
M << "<span class='notice'>\icon[src] [src][(src.loc == M)?(""):(" in your [src.loc]")] vibrates softly. It is ready to be used again.</span>"
//////////////
// 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 = {"<b>Implant Specifications:</b><BR>
<b>Name:</b> Criminal brainwash implant<BR>
<b>Life:</b> A few seconds after injection.<BR>
<b>Important Notes:</b> Illegal<BR>
<HR>
<b>Implant Details:</b><BR>
<b>Function:</b> Contains a small pod of nanobots that change the host's brain to be loyal to a certain organization.<BR>
<b>Special Features:</b> This device will also emit a small EMP pulse, destroying any other implants within the host's brain.<BR>
<b>Integrity:</b> 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("<span class='warning'>[target] seems to resist the implant!</span>", "<span class='warning'>You feel the influence of your enemies try to invade your mind!</span>")
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)
..()

View File

@@ -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 << "<span class='warning'>You must wait [30 - cooldown] seconds to use [src] again!</span>"
/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"

View File

@@ -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

View File

@@ -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

View File

@@ -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)

View File

@@ -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))

View File

@@ -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 = "<small>Oxygen Deprivation Damage => [round(L.getOxyLoss())]<br />Fire Damage => [round(L.getFireLoss())]<br />Toxin Damage => [round(L.getToxLoss())]<br />Brute Force Damage => [round(L.getBruteLoss())]</small>"
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)

View File

@@ -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)

View File

@@ -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]"

View File

@@ -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("<span class='notice'>[user] removes [charge] from [src].</span>", \
"<span class='notice'>You gently pry out [charge] from [src] and unhook its wires.</span>")
charge.loc = get_turf(user)
charge.forceMove(get_turf(user))
charge = null
return
if( beingcrowbarred && (density && welded && !operating && src.panel_open && (!hasPower()) && !src.locked) )

View File

@@ -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 << "<span class='danger'>ERROR:</span> \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 << "<span class='danger'>ERROR:</span> \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 << "<span class='danger'>ERROR:</span> \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 << "<span class='danger'>ERROR:</span> \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

View File

@@ -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)

View File

@@ -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

View File

@@ -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 << "<span class='danger'>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 << "<a href='?src=\ref[user];ai_take_control=\ref[src]'><span class='userdanger'>ASSUME DIRECT CONTROL?</span></a><br>"

View File

@@ -16,7 +16,10 @@
var/dat = "<html><head><title>[src.name]</title><style>h3 {margin: 0px; padding: 0px;}</style></head><body>"
if(screen == 0)
dat += "<h3>Tracking beacons data</h3>"
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 += {"<hr>[answer]<br/>
@@ -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()

View File

@@ -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 << "<span class='warning'>\the [W] is stuck to your hand, you cannot put it in \the [src]!</span>"
return
W.forceMove(src)
trackers += W
user.visible_message("[user] attaches [W] to [src].", "<span class='notice'>You attach [W] to [src].</span>")
return
else

View File

@@ -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)

View File

@@ -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("<span class='notice'>You unload [O].</span>")
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 = ..()

View File

@@ -3,5 +3,4 @@
/obj/mecha/working/New()
..()
new /obj/item/mecha_parts/mecha_tracking(src)
return
trackers += new /obj/item/mecha_parts/mecha_tracking(src)

View File

@@ -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

View File

@@ -202,13 +202,13 @@ MASS SPECTROMETER
else
user << "<span class='info'>Blood level [blood_percent] %, [C.blood_volume] cl, type: [blood_type]</span>"
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].<br>"
if(implant_detect)
cyberimp_detect += "[C.name] is modified with a [CI.name].<br>"
if(cyberimp_detect)
user << "<span class='notice'>Detected cybernetic modifications:</span>"
user << "<span class='notice'>[implant_detect]</span>"
user << "<span class='notice'>[cyberimp_detect]</span>"
/proc/chemscan(mob/living/user, mob/living/M)
if(ishuman(M))

View File

@@ -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)

View File

@@ -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 << "<span class='warning'>You must wait [30 - cooldown] seconds to use [src] again!</span>"
/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

View File

@@ -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 = {"<b>Implant Specifications:</b><BR>
<b>Name:</b> Nanotrasen Employee Exile Implant<BR>
<b>Implant Details:</b> The onboard gateway system has been modified to reject entry by individuals containing this implant<BR>"}
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)
..()

View File

@@ -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 ..()

View File

@@ -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 = {"<b>Implant Specifications:</b><BR>
<b>Name:</b> Criminal brainwash implant<BR>
<b>Life:</b> A few seconds after injection.<BR>
<b>Important Notes:</b> Illegal<BR>
<HR>
<b>Implant Details:</b><BR>
<b>Function:</b> Contains a small pod of nanobots that change the host's brain to be loyal to a certain organization.<BR>
<b>Special Features:</b> This device will also emit a small EMP pulse, destroying any other implants within the host's brain.<BR>
<b>Integrity:</b> 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("<span class='warning'>[target] seems to resist the implant!</span>", "<span class='warning'>You feel the influence of your enemies try to invade your mind!</span>")
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)
..()

View File

@@ -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("<span class='warning'>[target] seems to resist the implant!</span>", "<span class='warning'>You feel something interfering with your mental conditioning, but you resist it!</span>")
if(!silent)
target.visible_message("<span class='warning'>[target] seems to resist the implant!</span>", "<span class='warning'>You feel something interfering with your mental conditioning, but you resist it!</span>")
removed(target, 1)
qdel(src)
return -1
if(target.mind in ticker.mode.get_gangsters())
ticker.mode.remove_gangster(target.mind)
target.visible_message("<span class='warning'>[src] was destroyed in the process!</span>", "<span class='notice'>You feel a sense of peace and security. You are now protected from brainwashing.</span>")
if(!silent)
target.visible_message("<span class='warning'>[src] was destroyed in the process!</span>", "<span class='notice'>You feel a sense of peace and security. You are now protected from brainwashing.</span>")
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 << "<span class='warning'>You feel something interfering with your mental conditioning, but you resist it!</span>"
else
target << "<span class='notice'>You feel a sense of peace and security. You are now protected from brainwashing.</span>"
if(!silent)
if(target.mind in ticker.mode.cult)
target << "<span class='warning'>You feel something interfering with your mental conditioning, but you resist it!</span>"
else
target << "<span class='notice'>You feel a sense of peace and security. You are now protected from brainwashing.</span>"
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 << "<span class='boldnotice'>Your mind suddenly feels terribly vulnerable. You are no longer safe from brainwashing.</span>"

View File

@@ -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 = "<small>Oxygen Deprivation Damage => [round(L.getOxyLoss())]<br />Fire Damage => [round(L.getFireLoss())]<br />Toxin Damage => [round(L.getToxLoss())]<br />Brute Force Damage => [round(L.getBruteLoss())]</small>"
if (!healthstring)
healthstring = "ERROR"
return healthstring

View File

@@ -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 ..()

View File

@@ -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]"

View File

@@ -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

View File

@@ -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

View File

@@ -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)

View File

@@ -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 << "<span class='notice'>You start unsecuring [name]...</span>"
@@ -47,6 +56,7 @@
return
contents += I
stored_extinguisher = I
update_icon()
user << "<span class='notice'>You place [I] in [src].</span>"
else
toggle_cabinet(user)

View File

@@ -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."

View File

@@ -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."

View File

@@ -151,7 +151,7 @@ FLOOR SAFES
if(!user.drop_item())
user << "<span class='warning'>\The [I] is stuck to your hand, you cannot put it in the safe!</span>"
return
I.loc = src
I.forceMove(src)
user << "<span class='notice'>You put [I] in [src].</span>"
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

View File

@@ -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

View File

@@ -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].", "<span class='notice'>You empty \the [src].</span>")
src.empty()
empty()
return
else
user << "<span class='notice'>You free \the [src].</span>"
@@ -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

View File

@@ -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))

View File

@@ -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

View File

@@ -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")

View File

@@ -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

View File

@@ -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)

View File

@@ -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)

View File

@@ -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)

View File

@@ -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 = {"<b>Implant Specifications:</b><BR>
<b>Name:</b> Nanotrasen Employee Exile Implant<BR>
<b>Implant Details:</b> The onboard gateway system has been modified to reject entry by individuals containing this implant<BR>"}
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"

View File

@@ -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))

View File

@@ -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)

View File

@@ -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

View File

@@ -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)

View File

@@ -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"

View File

@@ -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

View File

@@ -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!")

View File

@@ -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")

View File

@@ -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

View File

@@ -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()

View File

@@ -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.", "<span class='notice'>You pry apart \the [src].</span>", "<span class='italics'>You hear splitting wood.</span>")
// 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("<br><br><A href='?src=\ref[src];removeall=1'>Empty box</A>")
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 << "<span class='notice'>You empty the box.</span>"
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)

View File

@@ -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)

View File

@@ -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)

View File

@@ -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)

View File

@@ -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

View File

@@ -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)

View File

@@ -298,13 +298,13 @@
msg += "<a href='?src=\ref[src];hud=1;photo_front=1'>\[Front photo\]</a> "
msg += "<a href='?src=\ref[src];hud=1;photo_side=1'>\[Side photo\]</a><br>"
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].<br>"
if(implant_detect)
cyberimp_detect += "[name] is modified with a [CI.name].<br>"
if(cyberimp_detect)
msg += "Detected cybernetic modifications:<br>"
msg += implant_detect
msg += cyberimp_detect
if(R)
var/health_r = R.fields["p_stat"]
msg += "<a href='?src=\ref[src];hud=m;p_stat=1'>\[[health_r]\]</a>"

View File

@@ -588,7 +588,7 @@
threatcount += 1
//mindshield implants imply trustworthyness
if(isloyal(src))
if(isloyal())
threatcount -= 1
//Agent cards lower threatlevel.

View File

@@ -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)

View File

@@ -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)

View File

@@ -114,3 +114,4 @@
if(I.flags_inv & HIDEMASK || forced)
update_inv_wear_mask()
update_inv_head()

View File

@@ -122,7 +122,7 @@
threatcount += 4
//mindshield implants imply trustworthyness
if(isloyal(src))
if(isloyal())
threatcount -= 1
return threatcount

View File

@@ -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)

View File

@@ -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()

View File

@@ -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

View File

@@ -31,8 +31,6 @@
..()
/mob/living/silicon/ai/ex_act(severity, target)
..()
switch(severity)
if(1)
gib()

View File

@@ -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()

View File

@@ -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 << "<i><span class='game say'>Holopad transmitted, <span class='name'>[real_name]</span> <span class='message robot'>\"[message]\"</span></span></i>"//The AI can "hear" its own message.

View File

@@ -33,7 +33,6 @@
src << "<span class='notice'>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.</span>"
/mob/living/silicon/pai/ex_act(severity, target)
..()
switch(severity)
if(1)

View File

@@ -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)

View File

@@ -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 << "<span class='warning'>You can't crawl around in the ventilation ducts with items!</span>"
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 << "<span class='warning'>You can't crawl around in the ventilation ducts with items!</span>"
return
visible_message("<span class='notice'>[src] scrambles into the ventilation ducts!</span>","<span class='notice'>You climb into the ventilation ducts.</span>")
forceMove(vent_found)

View File

@@ -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"

View File

@@ -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)

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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)

Some files were not shown because too many files have changed in this diff Show More