mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-08-26 14:39:58 +01:00
Merge branch 'master' of https://github.com/tgstation/-tg-station into doesrussellsteapotapplytorussellsteapot
Conflicts: icons/obj/closet.dmi
This commit is contained in:
@@ -13,6 +13,10 @@ env:
|
||||
before_install:
|
||||
- sudo apt-get update -qq
|
||||
- sudo apt-get install libc6:i386 libgcc1:i386 libstdc++6:i386 -qq
|
||||
- sudo apt-get install python -qq
|
||||
- sudo apt-get install python-pip -qq
|
||||
- sudo pip install PyYaml -q
|
||||
- sudo pip install beautifulsoup4 -q
|
||||
|
||||
install:
|
||||
- curl "http://www.byond.com/download/build/${BYOND_MAJOR}/${BYOND_MAJOR}.${BYOND_MINOR}_byond_linux.zip" -o byond.zip
|
||||
@@ -23,3 +27,4 @@ install:
|
||||
|
||||
script:
|
||||
- bash dm.sh -M${DM_MAPFILE} tgstation.dme
|
||||
- python tools/ss13_genchangelog.py html/changelog.html html/changelogs
|
||||
|
||||
@@ -3620,7 +3620,7 @@
|
||||
"brF" = (/obj/structure/extinguisher_cabinet{pixel_x = -27; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel{dir = 8; icon_state = "cautioncorner"},/area/hallway/primary/starboard)
|
||||
"brG" = (/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel,/area/hallway/primary/starboard)
|
||||
"brH" = (/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{dir = 4; icon_state = "cautioncorner"},/area/hallway/primary/starboard)
|
||||
"brI" = (/obj/item/device/violin,/obj/structure/table/wood,/turf/simulated/floor/wood,/area/crew_quarters/theatre)
|
||||
"brI" = (/obj/item/device/instrument/violin,/obj/structure/table/wood,/turf/simulated/floor/wood,/area/crew_quarters/theatre)
|
||||
"brJ" = (/turf/simulated/floor/plasteel{icon_state = "warning"},/area/engine/break_room)
|
||||
"brK" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 5},/turf/simulated/floor/plasteel{icon_state = "warning"},/area/engine/break_room)
|
||||
"brL" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 10},/turf/simulated/floor/plasteel{tag = "icon-warningcorner (NORTH)"; icon_state = "warningcorner"; dir = 1},/area/engine/break_room)
|
||||
@@ -4401,7 +4401,7 @@
|
||||
"bGG" = (/obj/machinery/atmospherics/pipe/manifold/scrubbers/visible{dir = 8},/turf/simulated/floor/plasteel,/area/atmos)
|
||||
"bGH" = (/obj/structure/sign/directions/engineering{desc = "A direction sign, pointing out which way the bridge is."; dir = 1; icon_state = "direction_bridge"; name = "bridge"; pixel_y = -8; tag = "icon-direction_bridge (NORTH)"},/turf/simulated/wall/r_wall,/area/crew_quarters/captain{name = "\improper Captain's Quarters"})
|
||||
"bGI" = (/obj/machinery/hologram/holopad,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/fancy/carpet,/area/crew_quarters/theatre)
|
||||
"bGJ" = (/obj/structure/table/wood,/obj/item/weapon/lipstick,/obj/item/device/radio/intercom{freerange = 0; frequency = 1459; name = "Station Intercom (General)"; pixel_x = 29},/obj/machinery/camera{c_tag = "Theatre - Stage"; dir = 8; network = list("SS13")},/obj/machinery/light/small{dir = 4},/turf/simulated/floor/wood,/area/crew_quarters/theatre)
|
||||
"bGJ" = (/obj/structure/table/wood,/obj/item/weapon/lipstick{pixel_y = 5},/obj/item/device/radio/intercom{freerange = 0; frequency = 1459; name = "Station Intercom (General)"; pixel_x = 29},/obj/machinery/camera{c_tag = "Theatre - Stage"; dir = 8; network = list("SS13")},/obj/machinery/light/small{dir = 4},/obj/item/device/instrument/guitar,/turf/simulated/floor/wood,/area/crew_quarters/theatre)
|
||||
"bGK" = (/obj/machinery/atmospherics/unary/portables_connector/visible{dir = 4},/obj/machinery/portable_atmospherics/scrubber,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plasteel{dir = 8; icon_state = "escape"},/area/hallway/primary/starboard)
|
||||
"bGL" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 10},/turf/simulated/floor/plasteel,/area/hallway/primary/starboard)
|
||||
"bGM" = (/obj/machinery/atmospherics/pipe/manifold/yellow/visible{tag = "icon-manifold-y (EAST)"; dir = 4},/turf/simulated/floor/plasteel,/area/atmos)
|
||||
|
||||
@@ -882,36 +882,63 @@
|
||||
"qX" = (/turf/unsimulated/floor{icon_state = "delivery"},/area/centcom/holding)
|
||||
"qY" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/unsimulated/floor{name = "plating"},/area/centcom/holding)
|
||||
"qZ" = (/obj/effect/landmark{name = "Holding Facility"},/turf/unsimulated/floor{icon_state = "engine"},/area/centcom/holding)
|
||||
"ra" = (/turf/unsimulated/wall/vault,/area/abductor_ship)
|
||||
"rb" = (/turf/unsimulated/floor/bluegrid,/area/abductor_ship)
|
||||
"rc" = (/obj/effect/landmark/abductor/console,/turf/unsimulated/floor/bluegrid,/area/abductor_ship)
|
||||
"rd" = (/obj/effect/landmark/abductor/console{team = 4},/turf/unsimulated/floor/bluegrid,/area/abductor_ship)
|
||||
"re" = (/obj/structure/table,/obj/item/weapon/circular_saw,/obj/item/weapon/surgicaldrill,/obj/item/weapon/paper/abductor,/obj/item/weapon/scalpel/alien,/turf/unsimulated/floor/bluegrid,/area/abductor_ship)
|
||||
"rf" = (/obj/effect/landmark/abductor/scientist,/turf/unsimulated/floor/bluegrid,/area/abductor_ship)
|
||||
"rg" = (/obj/structure/table,/obj/item/weapon/retractor/alien,/obj/item/weapon/hemostat/alien,/turf/unsimulated/floor/bluegrid,/area/abductor_ship)
|
||||
"rh" = (/obj/effect/landmark/abductor/agent,/turf/unsimulated/floor/bluegrid,/area/abductor_ship)
|
||||
"ri" = (/obj/structure/optable,/turf/unsimulated/floor/bluegrid,/area/abductor_ship)
|
||||
"rj" = (/obj/machinery/abductor/gland_dispenser,/turf/unsimulated/floor/bluegrid,/area/abductor_ship)
|
||||
"rk" = (/obj/effect/landmark/abductor/scientist{team = 4},/turf/unsimulated/floor/bluegrid,/area/abductor_ship)
|
||||
"rl" = (/obj/effect/landmark/abductor/agent{team = 4},/turf/unsimulated/floor/bluegrid,/area/abductor_ship)
|
||||
"rm" = (/obj/structure/table,/obj/item/weapon/cautery,/obj/item/weapon/surgical_drapes,/turf/unsimulated/floor/bluegrid,/area/abductor_ship)
|
||||
"rn" = (/obj/machinery/abductor/experiment{team = 1},/turf/unsimulated/floor/bluegrid,/area/abductor_ship)
|
||||
"ro" = (/obj/effect/landmark/abductor/console{team = 2},/turf/unsimulated/floor/bluegrid,/area/abductor_ship)
|
||||
"rp" = (/obj/effect/landmark/abductor/console{team = 3},/turf/unsimulated/floor/bluegrid,/area/abductor_ship)
|
||||
"rq" = (/obj/effect/landmark/abductor/scientist{team = 2},/turf/unsimulated/floor/bluegrid,/area/abductor_ship)
|
||||
"rr" = (/obj/effect/landmark/abductor/agent{team = 2},/turf/unsimulated/floor/bluegrid,/area/abductor_ship)
|
||||
"rs" = (/obj/effect/landmark/abductor/scientist{team = 3},/turf/unsimulated/floor/bluegrid,/area/abductor_ship)
|
||||
"rt" = (/obj/effect/landmark/abductor/agent{team = 3},/turf/unsimulated/floor/bluegrid,/area/abductor_ship)
|
||||
"ru" = (/obj/machinery/abductor/pad{team = 1},/turf/unsimulated/floor/bluegrid,/area/abductor_ship)
|
||||
"rv" = (/obj/machinery/abductor/experiment{team = 4},/turf/unsimulated/floor/bluegrid,/area/abductor_ship)
|
||||
"rw" = (/obj/machinery/abductor/pad{team = 4},/turf/unsimulated/floor/bluegrid,/area/abductor_ship)
|
||||
"rx" = (/obj/structure/rack,/obj/item/weapon/storage/box/handcuffs,/turf/unsimulated/floor/bluegrid,/area/abductor_ship)
|
||||
"ry" = (/obj/structure/rack,/turf/unsimulated/floor/bluegrid,/area/abductor_ship)
|
||||
"rz" = (/obj/machinery/computer/security{name = "Human Observation Console"; network = list("SS13","Abductor")},/turf/unsimulated/floor/bluegrid,/area/abductor_ship)
|
||||
"rA" = (/obj/machinery/abductor/experiment{team = 2},/turf/unsimulated/floor/bluegrid,/area/abductor_ship)
|
||||
"rB" = (/obj/machinery/abductor/pad{team = 2},/turf/unsimulated/floor/bluegrid,/area/abductor_ship)
|
||||
"rC" = (/obj/machinery/abductor/experiment{team = 3},/turf/unsimulated/floor/bluegrid,/area/abductor_ship)
|
||||
"rD" = (/obj/machinery/abductor/pad{team = 3},/turf/unsimulated/floor/bluegrid,/area/abductor_ship)
|
||||
"ra" = (/turf/unsimulated/wall/abductor{icon_state = "alien21"},/area/abductor_ship)
|
||||
"rb" = (/turf/unsimulated/wall/abductor{icon_state = "alien20"},/area/abductor_ship)
|
||||
"rc" = (/turf/unsimulated/wall/abductor{icon_state = "alien23"},/area/abductor_ship)
|
||||
"rd" = (/turf/unsimulated/wall/abductor{icon_state = "alien22"},/area/abductor_ship)
|
||||
"re" = (/turf/unsimulated/wall/abductor{icon_state = "alien24"},/area/abductor_ship)
|
||||
"rf" = (/turf/unsimulated/wall/abductor{icon_state = "alien16"},/area/abductor_ship)
|
||||
"rg" = (/obj/machinery/abductor/experiment{team = 1},/turf/unsimulated/floor/abductor,/area/abductor_ship)
|
||||
"rh" = (/turf/unsimulated/wall/abductor{icon_state = "alien17"},/area/abductor_ship)
|
||||
"ri" = (/obj/machinery/abductor/pad{team = 1},/turf/unsimulated/floor/abductor,/area/abductor_ship)
|
||||
"rj" = (/obj/effect/landmark/abductor/console,/turf/unsimulated/floor/abductor,/area/abductor_ship)
|
||||
"rk" = (/turf/unsimulated/wall/abductor{icon_state = "alien19"},/area/abductor_ship)
|
||||
"rl" = (/turf/unsimulated/wall/abductor{icon_state = "alien18"},/area/abductor_ship)
|
||||
"rm" = (/obj/machinery/abductor/experiment{team = 4},/turf/unsimulated/floor/abductor,/area/abductor_ship)
|
||||
"rn" = (/obj/machinery/abductor/pad{team = 4},/turf/unsimulated/floor/abductor,/area/abductor_ship)
|
||||
"ro" = (/obj/effect/landmark/abductor/console{team = 4},/turf/unsimulated/floor/abductor,/area/abductor_ship)
|
||||
"rp" = (/turf/unsimulated/wall/abductor{icon_state = "alien14"},/area/abductor_ship)
|
||||
"rq" = (/turf/unsimulated/floor/abductor,/area/abductor_ship)
|
||||
"rr" = (/obj/machinery/computer/camera_advanced/abductor{team = 1},/turf/unsimulated/floor/abductor,/area/abductor_ship)
|
||||
"rs" = (/turf/unsimulated/wall/abductor{icon_state = "alien15"},/area/abductor_ship)
|
||||
"rt" = (/obj/structure/closet/abductor,/turf/unsimulated/floor/abductor,/area/abductor_ship)
|
||||
"ru" = (/obj/machinery/computer/camera_advanced/abductor{team = 4},/turf/unsimulated/floor/abductor,/area/abductor_ship)
|
||||
"rv" = (/turf/unsimulated/wall/abductor{icon_state = "alien12"},/area/abductor_ship)
|
||||
"rw" = (/obj/effect/landmark/abductor/scientist,/turf/unsimulated/floor/abductor,/area/abductor_ship)
|
||||
"rx" = (/obj/item/weapon/retractor/alien,/obj/item/weapon/hemostat/alien,/obj/structure/table/abductor,/turf/unsimulated/floor/abductor,/area/abductor_ship)
|
||||
"ry" = (/obj/effect/landmark/abductor/agent,/turf/unsimulated/floor/abductor,/area/abductor_ship)
|
||||
"rz" = (/obj/structure/optable/abductor,/turf/unsimulated/floor/abductor,/area/abductor_ship)
|
||||
"rA" = (/turf/unsimulated/wall/abductor{icon_state = "alien13"},/area/abductor_ship)
|
||||
"rB" = (/obj/item/weapon/storage/box/handcuffs,/obj/structure/table/abductor,/turf/unsimulated/floor/abductor,/area/abductor_ship)
|
||||
"rC" = (/obj/effect/landmark/abductor/scientist{team = 4},/turf/unsimulated/floor/abductor,/area/abductor_ship)
|
||||
"rD" = (/obj/effect/landmark/abductor/agent{team = 4},/turf/unsimulated/floor/abductor,/area/abductor_ship)
|
||||
"rE" = (/turf/unsimulated/wall/abductor{icon_state = "alien10"},/area/abductor_ship)
|
||||
"rF" = (/obj/item/weapon/surgical_drapes,/obj/item/weapon/paper/abductor,/obj/item/weapon/scalpel/alien,/obj/structure/table/abductor,/obj/item/weapon/cautery/alien,/turf/unsimulated/floor/abductor,/area/abductor_ship)
|
||||
"rG" = (/turf/unsimulated/wall/abductor{icon_state = "alien11"},/area/abductor_ship)
|
||||
"rH" = (/turf/unsimulated/wall/abductor{icon_state = "alien6"},/area/abductor_ship)
|
||||
"rI" = (/obj/machinery/abductor/gland_dispenser,/turf/unsimulated/floor/abductor,/area/abductor_ship)
|
||||
"rJ" = (/turf/unsimulated/wall/abductor{icon_state = "alien7"},/area/abductor_ship)
|
||||
"rK" = (/obj/structure/stool/bed/abductor,/turf/unsimulated/floor/abductor,/area/abductor_ship)
|
||||
"rL" = (/obj/structure/table/abductor,/obj/item/weapon/surgicaldrill/alien,/obj/item/weapon/circular_saw/alien,/turf/unsimulated/floor/abductor,/area/abductor_ship)
|
||||
"rM" = (/turf/unsimulated/wall/abductor{icon_state = "alien9"},/area/abductor_ship)
|
||||
"rN" = (/turf/unsimulated/wall/abductor{icon_state = "alien8"},/area/abductor_ship)
|
||||
"rO" = (/turf/unsimulated/wall/abductor{icon_state = "alien2"},/area/abductor_ship)
|
||||
"rP" = (/turf/unsimulated/wall/abductor,/area/abductor_ship)
|
||||
"rQ" = (/turf/unsimulated/wall/abductor{icon_state = "alien4"},/area/abductor_ship)
|
||||
"rR" = (/turf/unsimulated/wall/abductor{icon_state = "alien3"},/area/abductor_ship)
|
||||
"rS" = (/turf/unsimulated/wall/abductor{icon_state = "alien5"},/area/abductor_ship)
|
||||
"rT" = (/obj/machinery/abductor/experiment{team = 2},/turf/unsimulated/floor/abductor,/area/abductor_ship)
|
||||
"rU" = (/obj/machinery/abductor/pad{team = 2},/turf/unsimulated/floor/abductor,/area/abductor_ship)
|
||||
"rV" = (/obj/effect/landmark/abductor/console{team = 2},/turf/unsimulated/floor/abductor,/area/abductor_ship)
|
||||
"rW" = (/obj/machinery/abductor/experiment{team = 3},/turf/unsimulated/floor/abductor,/area/abductor_ship)
|
||||
"rX" = (/obj/machinery/abductor/pad{team = 3},/turf/unsimulated/floor/abductor,/area/abductor_ship)
|
||||
"rY" = (/obj/effect/landmark/abductor/console{team = 3},/turf/unsimulated/floor/abductor,/area/abductor_ship)
|
||||
"rZ" = (/obj/machinery/computer/camera_advanced/abductor{team = 2},/turf/unsimulated/floor/abductor,/area/abductor_ship)
|
||||
"sa" = (/obj/machinery/computer/camera_advanced/abductor{team = 3},/turf/unsimulated/floor/abductor,/area/abductor_ship)
|
||||
"sb" = (/obj/effect/landmark/abductor/scientist{team = 2},/turf/unsimulated/floor/abductor,/area/abductor_ship)
|
||||
"sc" = (/obj/effect/landmark/abductor/agent{team = 2},/turf/unsimulated/floor/abductor,/area/abductor_ship)
|
||||
"sd" = (/obj/effect/landmark/abductor/scientist{team = 3},/turf/unsimulated/floor/abductor,/area/abductor_ship)
|
||||
"se" = (/obj/effect/landmark/abductor/agent{team = 3},/turf/unsimulated/floor/abductor,/area/abductor_ship)
|
||||
|
||||
(1,1,1) = {"
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababadaeaeaeaeaeafaeaeaeaeaeafaeaeaeaeaeafaeaeaeaeaeag
|
||||
@@ -1127,24 +1154,24 @@ abababababababababababababababababababababababababababababababababababababababab
|
||||
ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
|
||||
ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
|
||||
ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
|
||||
abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababrararararaabababrararararaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
|
||||
abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababrarararararnrcruraraabrararvrdrwrararararaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
|
||||
abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababrarxryrarbrbrbrbreraabrarerbrbrbrbrarxryraababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
|
||||
abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababrarbrbrarjrfrzrhrgraabrargrkrzrlrjrarbrbraababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
|
||||
abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababrarbrbrbrbrbrbrbrmraabrarmrbrbrbrbrbrbrbraababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
|
||||
abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababrarararararbrirbraraabrararbrirbrararararaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
|
||||
abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababrararararaabababrararararaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
|
||||
abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababrbrardrcreabababrbrardrcreababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
|
||||
ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababrfrhrgrjrirlrkabrfrhrmrornrlrkabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
|
||||
ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababrprrrqrqrqrtrsabrprurqrqrqrtrsabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
|
||||
ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababrvrxrwrzryrBrAabrvrxrCrzrDrBrAabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
|
||||
ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababrErFrqrqrqrtrGabrErFrqrqrqrtrGabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
|
||||
ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababrHrJrIrLrKrNrMabrHrJrIrLrKrNrMabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
|
||||
abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababrPrOrRrQrSabababrPrOrRrQrSababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
|
||||
ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
|
||||
abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababrbrardrcreabababrbrardrcreababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
|
||||
ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababrfrhrTrVrUrlrkabrfrhrWrYrXrlrkabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
|
||||
ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababrprZrqrqrqrtrsabrpsarqrqrqrtrsabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
|
||||
ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababrvrxsbrzscrBrAabrvrxsdrzserBrAabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
|
||||
ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababrErFrqrqrqrtrGabrErFrqrqrqrtrGabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
|
||||
ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababrHrJrIrLrKrNrMabrHrJrIrLrKrNrMabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
|
||||
abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababrPrOrRrQrSabababrPrOrRrQrSababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
|
||||
ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
|
||||
ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
|
||||
ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
|
||||
abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababrararararaabababrararararaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
|
||||
ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababrararArorBraraabrararCrprDraraabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
|
||||
ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababrarerbrbrbrbraabrarerbrbrbrbraabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
|
||||
ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababrargrqrzrrrjraabrargrsrzrtrjraabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
|
||||
ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababrarmrbrbrbrbraabrarmrbrbrbrbraabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
|
||||
ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababrararbrirbraraabrararbrirbraraabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
|
||||
abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababrarararbraabababrarararbraababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
|
||||
abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababrarxrbrbraabababrarxrbrbraababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
|
||||
abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababraryrbrbraabababraryrbrbraababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
|
||||
abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababrararararaabababrararararaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
|
||||
ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
|
||||
ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
|
||||
ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
|
||||
|
||||
@@ -1099,7 +1099,7 @@
|
||||
"avg" = (/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{tag = "icon-manifold-r-f (EAST)"; dir = 4},/turf/simulated/floor/plasteel,/area/crew_quarters/sleep)
|
||||
"avh" = (/turf/simulated/floor/plasteel,/area/crew_quarters/sleep)
|
||||
"avi" = (/obj/structure/stool{pixel_y = 8},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/effect/landmark/start{name = "Assistant"},/turf/simulated/floor/plasteel,/area/crew_quarters/sleep)
|
||||
"avj" = (/obj/structure/table/wood,/obj/item/clothing/mask/balaclava,/turf/simulated/floor/plasteel,/area/crew_quarters/sleep)
|
||||
"avj" = (/obj/structure/table/wood,/obj/item/device/instrument/guitar,/turf/simulated/floor/plasteel,/area/crew_quarters/sleep)
|
||||
"avk" = (/obj/machinery/atmospherics/pipe/manifold/supply/hidden{tag = "icon-manifold-b-f (NORTH)"; dir = 1},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel,/area/security/prison)
|
||||
"avl" = (/obj/structure/table/wood,/obj/item/weapon/coin/silver,/turf/simulated/floor/plasteel,/area/crew_quarters/sleep)
|
||||
"avm" = (/obj/structure/stool{pixel_y = 8},/turf/simulated/floor/plasteel,/area/crew_quarters/sleep)
|
||||
@@ -1167,9 +1167,9 @@
|
||||
"aww" = (/obj/machinery/hologram/holopad,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel,/area/crew_quarters/sleep)
|
||||
"awx" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel,/area/crew_quarters/sleep)
|
||||
"awy" = (/obj/structure/stool{pixel_y = 8},/obj/machinery/atmospherics/pipe/manifold/supply/hidden,/turf/simulated/floor/plasteel,/area/crew_quarters/sleep)
|
||||
"awz" = (/obj/structure/table/wood,/obj/item/device/violin,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel,/area/crew_quarters/sleep)
|
||||
"awz" = (/obj/structure/table/wood,/obj/item/device/instrument/violin,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel,/area/crew_quarters/sleep)
|
||||
"awA" = (/obj/structure/table/wood,/obj/item/device/paicard,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel,/area/crew_quarters/sleep)
|
||||
"awB" = (/obj/structure/table/wood,/obj/item/toy/cards/deck,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel,/area/crew_quarters/sleep)
|
||||
"awB" = (/obj/structure/table/wood,/obj/item/toy/cards/deck{pixel_x = 2},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/item/clothing/mask/balaclava{pixel_x = -8; pixel_y = 8},/turf/simulated/floor/plasteel,/area/crew_quarters/sleep)
|
||||
"awC" = (/obj/machinery/camera{c_tag = "Arrivals Bay 1 North"; dir = 1},/turf/simulated/floor/plasteel{icon_state = "warning"},/area/hallway/secondary/entry)
|
||||
"awD" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 9},/turf/simulated/floor/plasteel,/area/crew_quarters/sleep)
|
||||
"awE" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel,/area/crew_quarters/sleep)
|
||||
|
||||
@@ -834,36 +834,36 @@
|
||||
"qb" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/unsimulated/floor{name = "plating"},/area/centcom/holding)
|
||||
"qc" = (/obj/effect/landmark{name = "Holding Facility"},/turf/unsimulated/floor{icon_state = "engine"},/area/centcom/holding)
|
||||
"qd" = (/obj/docking_port/stationary/transit{dheight = 0; dir = 2; dwidth = 11; height = 22; id = "whiteship_transit"; width = 35},/turf/space/transit/horizontal,/area/space)
|
||||
"qe" = (/turf/unsimulated/wall/vault,/area/abductor_ship)
|
||||
"qf" = (/turf/unsimulated/floor/bluegrid,/area/abductor_ship)
|
||||
"qg" = (/obj/effect/landmark/abductor/console,/turf/unsimulated/floor/bluegrid,/area/abductor_ship)
|
||||
"qh" = (/obj/structure/stool/bed/alien,/turf/unsimulated/floor/bluegrid,/area/abductor_ship)
|
||||
"qi" = (/obj/effect/landmark/abductor/scientist,/turf/unsimulated/floor/bluegrid,/area/abductor_ship)
|
||||
"qj" = (/obj/structure/table,/obj/item/weapon/retractor/alien,/obj/item/weapon/hemostat/alien,/turf/unsimulated/floor/bluegrid,/area/abductor_ship)
|
||||
"qk" = (/obj/effect/landmark/abductor/agent,/turf/unsimulated/floor/bluegrid,/area/abductor_ship)
|
||||
"ql" = (/obj/structure/optable,/turf/unsimulated/floor/bluegrid,/area/abductor_ship)
|
||||
"qm" = (/obj/machinery/abductor/gland_dispenser,/turf/unsimulated/floor/bluegrid,/area/abductor_ship)
|
||||
"qn" = (/obj/structure/rack,/obj/item/weapon/circular_saw,/obj/item/weapon/surgicaldrill,/turf/unsimulated/floor/bluegrid,/area/abductor_ship)
|
||||
"qo" = (/obj/machinery/abductor/experiment{team = 1},/turf/unsimulated/floor/bluegrid,/area/abductor_ship)
|
||||
"qp" = (/obj/effect/landmark/abductor/console{team = 2},/turf/unsimulated/floor/bluegrid,/area/abductor_ship)
|
||||
"qq" = (/obj/effect/landmark/abductor/console{team = 3},/turf/unsimulated/floor/bluegrid,/area/abductor_ship)
|
||||
"qr" = (/obj/effect/landmark/abductor/scientist{team = 2},/turf/unsimulated/floor/bluegrid,/area/abductor_ship)
|
||||
"qs" = (/obj/effect/landmark/abductor/agent{team = 2},/turf/unsimulated/floor/bluegrid,/area/abductor_ship)
|
||||
"qt" = (/obj/effect/landmark/abductor/scientist{team = 3},/turf/unsimulated/floor/bluegrid,/area/abductor_ship)
|
||||
"qu" = (/obj/effect/landmark/abductor/agent{team = 3},/turf/unsimulated/floor/bluegrid,/area/abductor_ship)
|
||||
"qv" = (/obj/effect/landmark/abductor/console{team = 4},/turf/unsimulated/floor/bluegrid,/area/abductor_ship)
|
||||
"qw" = (/obj/effect/landmark/abductor/scientist{team = 4},/turf/unsimulated/floor/bluegrid,/area/abductor_ship)
|
||||
"qx" = (/obj/effect/landmark/abductor/agent{team = 4},/turf/unsimulated/floor/bluegrid,/area/abductor_ship)
|
||||
"qy" = (/obj/machinery/abductor/pad{team = 1},/turf/unsimulated/floor/bluegrid,/area/abductor_ship)
|
||||
"qz" = (/obj/machinery/abductor/experiment{team = 4},/turf/unsimulated/floor/bluegrid,/area/abductor_ship)
|
||||
"qA" = (/obj/machinery/abductor/pad{team = 4},/turf/unsimulated/floor/bluegrid,/area/abductor_ship)
|
||||
"qB" = (/obj/structure/rack,/obj/item/weapon/storage/box/handcuffs,/turf/unsimulated/floor/bluegrid,/area/abductor_ship)
|
||||
"qC" = (/obj/structure/closet/acloset,/turf/unsimulated/floor/bluegrid,/area/abductor_ship)
|
||||
"qe" = (/turf/unsimulated/wall/abductor{icon_state = "alien21"},/area/abductor_ship)
|
||||
"qf" = (/turf/unsimulated/wall/abductor{icon_state = "alien20"},/area/abductor_ship)
|
||||
"qg" = (/turf/unsimulated/wall/abductor{icon_state = "alien23"},/area/abductor_ship)
|
||||
"qh" = (/turf/unsimulated/wall/abductor{icon_state = "alien22"},/area/abductor_ship)
|
||||
"qi" = (/turf/unsimulated/wall/abductor{icon_state = "alien24"},/area/abductor_ship)
|
||||
"qj" = (/turf/unsimulated/wall/abductor{icon_state = "alien16"},/area/abductor_ship)
|
||||
"qk" = (/obj/machinery/abductor/experiment{team = 1},/turf/unsimulated/floor/abductor,/area/abductor_ship)
|
||||
"ql" = (/turf/unsimulated/wall/abductor{icon_state = "alien17"},/area/abductor_ship)
|
||||
"qm" = (/obj/machinery/abductor/pad{team = 1},/turf/unsimulated/floor/abductor,/area/abductor_ship)
|
||||
"qn" = (/obj/effect/landmark/abductor/console,/turf/unsimulated/floor/abductor,/area/abductor_ship)
|
||||
"qo" = (/turf/unsimulated/wall/abductor{icon_state = "alien19"},/area/abductor_ship)
|
||||
"qp" = (/turf/unsimulated/wall/abductor{icon_state = "alien18"},/area/abductor_ship)
|
||||
"qq" = (/obj/machinery/abductor/experiment{team = 4},/turf/unsimulated/floor/abductor,/area/abductor_ship)
|
||||
"qr" = (/obj/machinery/abductor/pad{team = 4},/turf/unsimulated/floor/abductor,/area/abductor_ship)
|
||||
"qs" = (/obj/effect/landmark/abductor/console{team = 4},/turf/unsimulated/floor/abductor,/area/abductor_ship)
|
||||
"qt" = (/turf/unsimulated/wall/abductor{icon_state = "alien14"},/area/abductor_ship)
|
||||
"qu" = (/turf/unsimulated/floor/abductor,/area/abductor_ship)
|
||||
"qv" = (/obj/machinery/computer/camera_advanced/abductor{team = 1},/turf/unsimulated/floor/abductor,/area/abductor_ship)
|
||||
"qw" = (/turf/unsimulated/wall/abductor{icon_state = "alien15"},/area/abductor_ship)
|
||||
"qx" = (/obj/structure/closet/abductor,/turf/unsimulated/floor/abductor,/area/abductor_ship)
|
||||
"qy" = (/obj/machinery/computer/camera_advanced/abductor{team = 4},/turf/unsimulated/floor/abductor,/area/abductor_ship)
|
||||
"qz" = (/turf/unsimulated/wall/abductor{icon_state = "alien12"},/area/abductor_ship)
|
||||
"qA" = (/obj/effect/landmark/abductor/scientist,/turf/unsimulated/floor/abductor,/area/abductor_ship)
|
||||
"qB" = (/obj/item/weapon/retractor/alien,/obj/item/weapon/hemostat/alien,/obj/structure/table/abductor,/turf/unsimulated/floor/abductor,/area/abductor_ship)
|
||||
"qC" = (/obj/effect/landmark/abductor/agent,/turf/unsimulated/floor/abductor,/area/abductor_ship)
|
||||
"qD" = (/obj/structure/stool,/turf/unsimulated/floor{icon_state = "neutral"; dir = 8},/area/tdome/tdomeobserve)
|
||||
"qE" = (/obj/machinery/abductor/experiment{team = 2},/turf/unsimulated/floor/bluegrid,/area/abductor_ship)
|
||||
"qF" = (/obj/machinery/abductor/pad{team = 2},/turf/unsimulated/floor/bluegrid,/area/abductor_ship)
|
||||
"qG" = (/obj/machinery/abductor/experiment{team = 3},/turf/unsimulated/floor/bluegrid,/area/abductor_ship)
|
||||
"qH" = (/obj/machinery/abductor/pad{team = 3},/turf/unsimulated/floor/bluegrid,/area/abductor_ship)
|
||||
"qE" = (/obj/structure/optable/abductor,/turf/unsimulated/floor/abductor,/area/abductor_ship)
|
||||
"qF" = (/turf/unsimulated/wall/abductor{icon_state = "alien13"},/area/abductor_ship)
|
||||
"qG" = (/obj/item/weapon/storage/box/handcuffs,/obj/structure/table/abductor,/turf/unsimulated/floor/abductor,/area/abductor_ship)
|
||||
"qH" = (/obj/effect/landmark/abductor/scientist{team = 4},/turf/unsimulated/floor/abductor,/area/abductor_ship)
|
||||
"qI" = (/obj/structure/closet/secure_closet/bar,/turf/unsimulated/floor{dir = 8; icon_state = "red"},/area/tdome/tdomeobserve)
|
||||
"qJ" = (/obj/machinery/door/airlock/centcom{name = "Crate Storage"; req_access_txt = "106"},/turf/unsimulated/floor{icon_state = "delivery"},/area/centcom/suppy)
|
||||
"qK" = (/obj/structure/stool,/turf/unsimulated/floor{icon_state = "neutral"; dir = 4},/area/tdome/tdomeobserve)
|
||||
@@ -881,8 +881,34 @@
|
||||
"qW" = (/obj/structure/closet/secure_closet/freezer/fridge,/turf/unsimulated/floor{icon_state = "green"; dir = 4},/area/tdome/tdomeobserve)
|
||||
"qX" = (/obj/structure/table,/obj/item/weapon/storage/box/drinkingglasses,/turf/unsimulated/floor{dir = 8; icon_state = "red"},/area/tdome/tdomeobserve)
|
||||
"qY" = (/obj/structure/table,/turf/unsimulated/floor{icon_state = "green"; dir = 4},/area/tdome/tdomeobserve)
|
||||
"qZ" = (/obj/machinery/computer/camera_advanced{name = "Human Observation Console"; networks = list("SS13","Abductor")},/turf/unsimulated/floor/bluegrid,/area/abductor_ship)
|
||||
"ra" = (/obj/structure/table,/obj/item/weapon/cautery,/obj/item/weapon/surgical_drapes,/obj/item/weapon/paper/abductor,/obj/item/weapon/scalpel/alien,/turf/unsimulated/floor/bluegrid,/area/abductor_ship)
|
||||
"qZ" = (/obj/effect/landmark/abductor/agent{team = 4},/turf/unsimulated/floor/abductor,/area/abductor_ship)
|
||||
"ra" = (/turf/unsimulated/wall/abductor{icon_state = "alien10"},/area/abductor_ship)
|
||||
"rb" = (/obj/item/weapon/surgical_drapes,/obj/item/weapon/paper/abductor,/obj/item/weapon/scalpel/alien,/obj/structure/table/abductor,/obj/item/weapon/cautery/alien,/turf/unsimulated/floor/abductor,/area/abductor_ship)
|
||||
"rc" = (/turf/unsimulated/wall/abductor{icon_state = "alien11"},/area/abductor_ship)
|
||||
"rd" = (/turf/unsimulated/wall/abductor{icon_state = "alien6"},/area/abductor_ship)
|
||||
"re" = (/obj/machinery/abductor/gland_dispenser,/turf/unsimulated/floor/abductor,/area/abductor_ship)
|
||||
"rf" = (/turf/unsimulated/wall/abductor{icon_state = "alien7"},/area/abductor_ship)
|
||||
"rg" = (/obj/structure/stool/bed/abductor,/turf/unsimulated/floor/abductor,/area/abductor_ship)
|
||||
"rh" = (/obj/structure/table/abductor,/obj/item/weapon/surgicaldrill/alien,/obj/item/weapon/circular_saw/alien,/turf/unsimulated/floor/abductor,/area/abductor_ship)
|
||||
"ri" = (/turf/unsimulated/wall/abductor{icon_state = "alien9"},/area/abductor_ship)
|
||||
"rj" = (/turf/unsimulated/wall/abductor{icon_state = "alien8"},/area/abductor_ship)
|
||||
"rk" = (/turf/unsimulated/wall/abductor{icon_state = "alien2"},/area/abductor_ship)
|
||||
"rl" = (/turf/unsimulated/wall/abductor,/area/abductor_ship)
|
||||
"rm" = (/turf/unsimulated/wall/abductor{icon_state = "alien4"},/area/abductor_ship)
|
||||
"rn" = (/turf/unsimulated/wall/abductor{icon_state = "alien3"},/area/abductor_ship)
|
||||
"ro" = (/turf/unsimulated/wall/abductor{icon_state = "alien5"},/area/abductor_ship)
|
||||
"rp" = (/obj/machinery/abductor/experiment{team = 2},/turf/unsimulated/floor/abductor,/area/abductor_ship)
|
||||
"rq" = (/obj/machinery/abductor/pad{team = 2},/turf/unsimulated/floor/abductor,/area/abductor_ship)
|
||||
"rr" = (/obj/effect/landmark/abductor/console{team = 2},/turf/unsimulated/floor/abductor,/area/abductor_ship)
|
||||
"rs" = (/obj/machinery/abductor/experiment{team = 3},/turf/unsimulated/floor/abductor,/area/abductor_ship)
|
||||
"rt" = (/obj/machinery/abductor/pad{team = 3},/turf/unsimulated/floor/abductor,/area/abductor_ship)
|
||||
"ru" = (/obj/effect/landmark/abductor/console{team = 3},/turf/unsimulated/floor/abductor,/area/abductor_ship)
|
||||
"rv" = (/obj/machinery/computer/camera_advanced/abductor{team = 2},/turf/unsimulated/floor/abductor,/area/abductor_ship)
|
||||
"rw" = (/obj/machinery/computer/camera_advanced/abductor{team = 3},/turf/unsimulated/floor/abductor,/area/abductor_ship)
|
||||
"rx" = (/obj/effect/landmark/abductor/scientist{team = 2},/turf/unsimulated/floor/abductor,/area/abductor_ship)
|
||||
"ry" = (/obj/effect/landmark/abductor/agent{team = 2},/turf/unsimulated/floor/abductor,/area/abductor_ship)
|
||||
"rz" = (/obj/effect/landmark/abductor/scientist{team = 3},/turf/unsimulated/floor/abductor,/area/abductor_ship)
|
||||
"rA" = (/obj/effect/landmark/abductor/agent{team = 3},/turf/unsimulated/floor/abductor,/area/abductor_ship)
|
||||
|
||||
(1,1,1) = {"
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababadaeaeaeaeaeafaeaeaeaeaeafaeaeaeaeaeafaeaeaeaeaeag
|
||||
@@ -1107,21 +1133,21 @@ abababababababababababababababababababababababababababababababababababababababab
|
||||
ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
|
||||
ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
|
||||
ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
|
||||
abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababqeqeqeqeqeabababqeqeqeqeqeababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
|
||||
ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababqeqeqoqgqyqeqeabqeqeqzqvqAqeqeabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
|
||||
ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababqeqZqfqfqfqCqeabqeqZqfqfqfqCqeabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
|
||||
ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababqeqjqiqlqkqBqeabqeqjqwqlqxqBqeabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
|
||||
ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababqeraqfqfqfqCqeabqeraqfqfqfqCqeabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
|
||||
ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababqeqeqmqnqhqeqeabqeqeqmqnqhqeqeabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
|
||||
abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababqeqeqeqeqeabababqeqeqeqeqeababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
|
||||
abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababqfqeqhqgqiabababqfqeqhqgqiababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
|
||||
ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababqjqlqkqnqmqpqoabqjqlqqqsqrqpqoabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
|
||||
ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababqtqvquququqxqwabqtqyquququqxqwabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
|
||||
ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababqzqBqAqEqCqGqFabqzqBqHqEqZqGqFabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
|
||||
ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababrarbquququqxrcabrarbquququqxrcabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
|
||||
ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababrdrfrerhrgrjriabrdrfrerhrgrjriabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
|
||||
abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababrlrkrnrmroabababrlrkrnrmroababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
|
||||
ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
|
||||
abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababqeqeqeqeqeabababqeqeqeqeqeababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
|
||||
ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababqeqeqEqpqFqeqeabqeqeqGqqqHqeqeabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
|
||||
ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababqeqZqfqfqfqCqeabqeqZqfqfqfqCqeabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
|
||||
ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababqeqjqrqlqsqBqeabqeqjqtqlquqBqeabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
|
||||
ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababqeraqfqfqfqCqeabqeraqfqfqfqCqeabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
|
||||
ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababqeqeqmqnqhqeqeabqeqeqmqnqhqeqeabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
|
||||
abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababqeqeqeqeqeabababqeqeqeqeqeababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
|
||||
abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababqfqeqhqgqiabababqfqeqhqgqiababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
|
||||
ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababqjqlrprrrqqpqoabqjqlrsrurtqpqoabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
|
||||
ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababqtrvquququqxqwabqtrwquququqxqwabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
|
||||
ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababqzqBrxqEryqGqFabqzqBrzqErAqGqFabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
|
||||
ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababrarbquququqxrcabrarbquququqxrcabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
|
||||
ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababrdrfrerhrgrjriabrdrfrerhrgrjriabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
|
||||
abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababrlrkrnrmroabababrlrkrnrmroababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
|
||||
ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
|
||||
ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
|
||||
ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
|
||||
|
||||
@@ -21,9 +21,19 @@ Pipelines + Other Objects -> Pipe network
|
||||
var/pipe_color
|
||||
var/obj/item/pipe/stored
|
||||
|
||||
var/welded = 0 //Used on pumps and scrubbers
|
||||
|
||||
var/global/list/iconsetids = list()
|
||||
var/global/list/pipeimages = list()
|
||||
|
||||
|
||||
/obj/machinery/atmospherics/Destroy()
|
||||
for(var/mob/living/L in src)
|
||||
L.remove_ventcrawl()
|
||||
L.forceMove(get_turf(src))
|
||||
..()
|
||||
|
||||
|
||||
/obj/machinery/atmospherics/New()
|
||||
..()
|
||||
|
||||
@@ -78,21 +88,21 @@ Pipelines + Other Objects -> Pipe network
|
||||
if(can_unwrench && istype(W, /obj/item/weapon/wrench))
|
||||
var/turf/T = src.loc
|
||||
if (level==1 && isturf(T) && T.intact)
|
||||
user << "<span class='danger'>You must remove the plating first.</span>"
|
||||
user << "<span class='warning'>You must remove the plating first!</span>"
|
||||
return 1
|
||||
var/datum/gas_mixture/int_air = return_air()
|
||||
var/datum/gas_mixture/env_air = loc.return_air()
|
||||
add_fingerprint(user)
|
||||
if ((int_air.return_pressure()-env_air.return_pressure()) > 2*ONE_ATMOSPHERE)
|
||||
user << "<span class='danger'>You cannot unwrench this [src], it is too exerted due to internal pressure.</span>"
|
||||
user << "<span class='warning'>You cannot unwrench this [src], it is too exerted due to internal pressure!</span>"
|
||||
return 1
|
||||
playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1)
|
||||
user << "<span class='notice'>You begin to unfasten \the [src]...</span>"
|
||||
if (do_after(user, 40) && !gc_destroyed)
|
||||
user.visible_message( \
|
||||
"[user] unfastens \the [src].", \
|
||||
"<span class='notice'>You have unfastened \the [src].</span>", \
|
||||
"You hear ratchet.")
|
||||
"<span class='notice'>You unfasten \the [src].</span>", \
|
||||
"<span class='italics'>You hear ratchet.</span>")
|
||||
investigate_log("was <span class='warning'>REMOVED</span> by [key_name(usr)]", "atmos")
|
||||
Deconstruct()
|
||||
else
|
||||
@@ -150,4 +160,50 @@ Pipelines + Other Objects -> Pipe network
|
||||
|
||||
/obj/machinery/atmospherics/singularity_pull(S, current_size)
|
||||
if(current_size >= STAGE_FIVE)
|
||||
Deconstruct()
|
||||
Deconstruct()
|
||||
|
||||
|
||||
//Find a connecting /obj/machinery/atmospherics in specified direction
|
||||
/obj/machinery/atmospherics/proc/findConnecting(var/direction)
|
||||
for(var/obj/machinery/atmospherics/target in get_step(src, direction))
|
||||
if(target.initialize_directions & get_dir(target,src))
|
||||
return target
|
||||
|
||||
|
||||
#define VENT_SOUND_DELAY 30
|
||||
|
||||
/obj/machinery/atmospherics/relaymove(var/mob/living/user, var/direction)
|
||||
if(!(direction & initialize_directions)) //cant go this way.
|
||||
return
|
||||
|
||||
var/obj/machinery/atmospherics/target_move = findConnecting(direction)
|
||||
if(target_move)
|
||||
if(is_type_in_list(target_move, ventcrawl_machinery) && target_move.can_crawl_through())
|
||||
user.remove_ventcrawl()
|
||||
user.forceMove(target_move.loc) //handle entering and so on.
|
||||
user.visible_message("<span class='notice'>You hear something squeezing through the ducts...</span>","<span class='notice'>You climb out the ventilation system.")
|
||||
else if(target_move.can_crawl_through())
|
||||
user.loc = target_move
|
||||
user.client.eye = target_move //Byond only updates the eye every tick, This smooths out the movement
|
||||
if(world.time - user.last_played_vent > VENT_SOUND_DELAY)
|
||||
user.last_played_vent = world.time
|
||||
playsound(src, 'sound/machines/ventcrawl.ogg', 50, 1, -3)
|
||||
else
|
||||
if((direction & initialize_directions) || is_type_in_list(src, ventcrawl_machinery) && can_crawl_through()) //if we move in a way the pipe can connect, but doesn't - or we're in a vent
|
||||
user.remove_ventcrawl()
|
||||
user.forceMove(src.loc)
|
||||
user.visible_message("<span class='notice'>You hear something squeezing through the ducts...</span>","<span class='notice'>You climb out the ventilation system.")
|
||||
user.canmove = 0
|
||||
spawn(1)
|
||||
user.canmove = 1
|
||||
|
||||
|
||||
/obj/machinery/atmospherics/AltClick(var/mob/living/L)
|
||||
if(is_type_in_list(src, ventcrawl_machinery))
|
||||
L.handle_ventcrawl(src)
|
||||
return
|
||||
..()
|
||||
|
||||
|
||||
/obj/machinery/atmospherics/proc/can_crawl_through()
|
||||
return 1
|
||||
|
||||
@@ -171,6 +171,6 @@ Passive gate is similar to the regular pump except:
|
||||
if (!istype(W, /obj/item/weapon/wrench))
|
||||
return ..()
|
||||
if (on)
|
||||
user << "<span class='danger'>You cannot unwrench this [src], turn it off first.</span>"
|
||||
user << "<span class='warning'>You cannot unwrench this [src], turn it off first!</span>"
|
||||
return 1
|
||||
return ..()
|
||||
|
||||
@@ -176,7 +176,7 @@ Thus, the two variables affect pump operation are set in New():
|
||||
if (!istype(W, /obj/item/weapon/wrench))
|
||||
return ..()
|
||||
if (!(stat & NOPOWER) && on)
|
||||
user << "<span class='danger'>You cannot unwrench this [src], turn it off first.</span>"
|
||||
user << "<span class='warning'>You cannot unwrench this [src], turn it off first!</span>"
|
||||
return 1
|
||||
return ..()
|
||||
|
||||
|
||||
@@ -175,6 +175,6 @@ Thus, the two variables affect pump operation are set in New():
|
||||
if (!istype(W, /obj/item/weapon/wrench))
|
||||
return ..()
|
||||
if (!(stat & NOPOWER) && on)
|
||||
user << "<span class='danger'>You cannot unwrench this [src], turn it off first.</span>"
|
||||
user << "<span class='warning'>You cannot unwrench this [src], turn it off first!</span>"
|
||||
return 1
|
||||
return ..()
|
||||
|
||||
@@ -37,7 +37,7 @@
|
||||
/obj/machinery/atmospherics/unary/portables_connector/attackby(obj/item/weapon/W, mob/user, params)
|
||||
if(istype(W, /obj/item/weapon/wrench))
|
||||
if(connected_device)
|
||||
user << "<span class='danger'>You cannot unwrench this [src], dettach [connected_device] first.</span>"
|
||||
user << "<span class='warning'>You cannot unwrench this [src], dettach [connected_device] first!</span>"
|
||||
return 1
|
||||
return ..()
|
||||
|
||||
|
||||
@@ -23,8 +23,6 @@
|
||||
//2: Do not pass internal_pressure_bound
|
||||
//3: Do not pass either
|
||||
|
||||
var/welded = 0
|
||||
|
||||
var/frequency = 1439
|
||||
var/datum/radio_frequency/radio_connection
|
||||
|
||||
@@ -267,22 +265,22 @@
|
||||
|
||||
/obj/machinery/atmospherics/unary/vent_pump/attackby(obj/item/W, mob/user, params)
|
||||
if (istype(W, /obj/item/weapon/wrench)&& !(stat & NOPOWER) && on)
|
||||
user << "<span class='danger'>You cannot unwrench this [src], turn it off first.</span>"
|
||||
user << "<span class='warning'>You cannot unwrench this [src], turn it off first!</span>"
|
||||
return 1
|
||||
if(istype(W, /obj/item/weapon/weldingtool))
|
||||
var/obj/item/weapon/weldingtool/WT = W
|
||||
if (WT.remove_fuel(0,user))
|
||||
playsound(loc, 'sound/items/Welder.ogg', 40, 1)
|
||||
user << "<span class='notice'>Now welding the vent.</span>"
|
||||
user << "<span class='notice'>You begin welding the vent...</span>"
|
||||
if(do_after(user, 20))
|
||||
if(!src || !WT.isOn()) return
|
||||
playsound(src.loc, 'sound/items/Welder2.ogg', 50, 1)
|
||||
if(!welded)
|
||||
user.visible_message("[user] welds the vent shut.", "You weld the vent shut.", "You hear welding.")
|
||||
user.visible_message("[user] welds the vent shut.", "<span class='notice'>You weld the vent shut.</span>", "<span class='italics'>You hear welding.</span>")
|
||||
welded = 1
|
||||
update_icon()
|
||||
else
|
||||
user.visible_message("[user] unwelds the vent.", "You unweld the vent.", "You hear welding.")
|
||||
user.visible_message("[user] unwelds the vent.", "<span class='notice'>You unweld the vent.</span>", "<span class='italics'>You hear welding.</span>")
|
||||
welded = 0
|
||||
update_icon()
|
||||
return 1
|
||||
@@ -307,68 +305,6 @@
|
||||
initial_loc.air_vent_names -= id_tag
|
||||
..()
|
||||
|
||||
/*
|
||||
Alt-click to ventcrawl
|
||||
*/
|
||||
/obj/machinery/atmospherics/unary/vent_pump/AltClick(var/mob/living/L)
|
||||
if(!L.ventcrawler || !isliving(L) || !Adjacent(L))
|
||||
return
|
||||
if(L.stat)
|
||||
L << "You must be conscious to do this!"
|
||||
return
|
||||
if(L.lying)
|
||||
L << "You can't vent crawl while you're stunned!"
|
||||
return
|
||||
if(welded)
|
||||
L << "That vent is welded shut."
|
||||
return
|
||||
|
||||
var/list/vents = list()
|
||||
for(var/obj/machinery/atmospherics/unary/vent_pump/temp_vent in parent.other_atmosmch)
|
||||
if(temp_vent.welded)
|
||||
continue
|
||||
if(temp_vent in loc)
|
||||
continue
|
||||
var/turf/T = get_turf(temp_vent)
|
||||
|
||||
if(!T || T.z != loc.z)
|
||||
continue
|
||||
|
||||
var/i = 1
|
||||
var/index = "[T.loc.name]\[[i]\]"
|
||||
while(index in vents)
|
||||
i++
|
||||
index = "[T.loc.name]\[[i]\]"
|
||||
vents[index] = temp_vent
|
||||
if(!vents.len)
|
||||
L << "<span class='warning'>There are no available vents to travel to, they could be welded. </span>"
|
||||
return
|
||||
|
||||
var/obj/selection = input(L,"Select a destination.", "Duct System") as null|anything in sortList(vents)
|
||||
if(!selection)
|
||||
return
|
||||
|
||||
if(!Adjacent(L) || L.stat || L.lying || !L.ventcrawler || welded)
|
||||
return
|
||||
if(iscarbon(L) && L.ventcrawler < 2) // lesser ventcrawlers can't bring items
|
||||
for(var/obj/item/carried_item in L.contents)
|
||||
if(!istype(carried_item, /obj/item/weapon/implant))//If it's not an implant
|
||||
L << "<span class='warning'>You can't be carrying items or have items equipped when vent crawling!</span>"
|
||||
return
|
||||
|
||||
var/obj/machinery/atmospherics/unary/vent_pump/target_vent = vents[selection]
|
||||
if(!target_vent)
|
||||
return
|
||||
|
||||
L.visible_message("<span class='notice'>[L] scrambles into the ventilation ducts!</span>", \
|
||||
"<span class='notice'>You scramble into the ventilation ducts.</span>")
|
||||
|
||||
target_vent.audible_message("<span class='notice'>You hear something squeezing through the ventilation ducts.</span>")
|
||||
|
||||
if(target_vent.welded) //the vent can be welded while they scrolled through the list.
|
||||
target_vent = src
|
||||
L << "<span class='warning'>The vent you were heading to appears to be welded.</span>"
|
||||
L.loc = target_vent.loc
|
||||
var/area/new_area = get_area(L.loc)
|
||||
if(new_area)
|
||||
new_area.Entered(L)
|
||||
/obj/machinery/atmospherics/unary/vent_pump/can_crawl_through()
|
||||
return !welded
|
||||
|
||||
@@ -27,6 +27,7 @@
|
||||
var/radio_filter_out
|
||||
var/radio_filter_in
|
||||
|
||||
|
||||
/obj/machinery/atmospherics/unary/vent_scrubber/New()
|
||||
..()
|
||||
initial_loc = get_area(loc)
|
||||
@@ -50,6 +51,10 @@
|
||||
if(showpipe)
|
||||
overlays += getpipeimage('icons/obj/atmospherics/unary_devices.dmi', "scrub_cap", initialize_directions)
|
||||
|
||||
if(welded)
|
||||
icon_state = "scrub_welded"
|
||||
return
|
||||
|
||||
if(!node || !on || stat & (NOPOWER|BROKEN))
|
||||
icon_state = "scrub_off"
|
||||
return
|
||||
@@ -107,7 +112,7 @@
|
||||
if (!node)
|
||||
on = 0
|
||||
//broadcast_status()
|
||||
if(!on)
|
||||
if(!on || welded)
|
||||
return 0
|
||||
|
||||
|
||||
@@ -238,15 +243,38 @@
|
||||
update_icon_nopipes()
|
||||
|
||||
/obj/machinery/atmospherics/unary/vent_scrubber/attackby(var/obj/item/weapon/W as obj, var/mob/user as mob, params)
|
||||
if(istype(W, /obj/item/weapon/weldingtool))
|
||||
var/obj/item/weapon/weldingtool/WT = W
|
||||
if(WT.remove_fuel(0,user))
|
||||
playsound(loc, 'sound/items/Welder.ogg', 40, 1)
|
||||
user << "<span class='notice'>Now welding the scrubber.</span>"
|
||||
if(do_after(user, 20))
|
||||
if(!src || !WT.isOn())
|
||||
return
|
||||
playsound(src.loc, 'sound/items/Welder2.ogg', 50, 1)
|
||||
if(!welded)
|
||||
user.visible_message("[user] welds the scrubber shut.","You weld the scrubber shut.", "You hear welding.")
|
||||
welded = 1
|
||||
update_icon()
|
||||
else
|
||||
user.visible_message("[user] unwelds the scrubber.", "You unweld the scrubber.", "You hear welding.")
|
||||
welded = 0
|
||||
update_icon()
|
||||
return 1
|
||||
if (!istype(W, /obj/item/weapon/wrench))
|
||||
return ..()
|
||||
if (!(stat & NOPOWER) && on)
|
||||
user << "<span class='danger'>You cannot unwrench this [src], turn it off first.</span>"
|
||||
user << "<span class='warning'>You cannot unwrench this [src], turn it off first!</span>"
|
||||
return 1
|
||||
return ..()
|
||||
|
||||
|
||||
/obj/machinery/atmospherics/unary/vent_scrubber/Destroy()
|
||||
if(initial_loc)
|
||||
initial_loc.air_scrub_info -= id_tag
|
||||
initial_loc.air_scrub_names -= id_tag
|
||||
..()
|
||||
|
||||
|
||||
/obj/machinery/atmospherics/unary/vent_scrubber/can_crawl_through()
|
||||
return !welded
|
||||
|
||||
@@ -68,6 +68,7 @@
|
||||
#define NOGUNS 512
|
||||
#define NOBLOOD 1024
|
||||
#define NOFIRE 2048
|
||||
#define VIRUSIMMUNE 4096
|
||||
|
||||
/*
|
||||
These defines are used specifically with the atom/movable/languages bitmask.
|
||||
|
||||
@@ -131,11 +131,11 @@ var/syndicate_name = null
|
||||
syndicate_name = name
|
||||
return name
|
||||
|
||||
var/gang_name_pool = list("Clandestine", "Prima", "Blue", "Zero-G", "Max", "Blasto", "Waffle", "North", "Omni", "Newton", "Cyber", "Donk", "Gene", "Gib", "Tunnel")
|
||||
var/gang_A_name = null
|
||||
var/gang_B_name = null
|
||||
/proc/gang_name(var/gang)
|
||||
if(!gang_A_name || !gang_B_name)
|
||||
var/gang_name_pool = list("Clandestine", "Prima", "Blue", "Zero-G", "Max", "Blasto", "Waffle", "North", "Omni", "Newton", "Cyber", "Donk", "Gene", "Gib", "Tunnel")
|
||||
gang_A_name = pick(gang_name_pool)
|
||||
gang_name_pool -= gang_A_name
|
||||
gang_B_name = pick(gang_name_pool)
|
||||
|
||||
@@ -810,7 +810,7 @@ Turf and target are seperate in case you want to teleport some distance from a t
|
||||
if(needhand)
|
||||
//This might seem like an odd check, but you can still need a hand even when it's empty
|
||||
//i.e the hand is used to insert some item/tool into the construction
|
||||
if(!holdingnull)
|
||||
if(!holdingnull)
|
||||
if(!holding)
|
||||
return 0
|
||||
if(user.get_active_hand() != holding)
|
||||
@@ -1332,7 +1332,7 @@ var/list/WALLITEMS = list(
|
||||
|
||||
/obj/proc/atmosanalyzer_scan(var/datum/gas_mixture/air_contents, mob/user, var/obj/target = src)
|
||||
var/obj/icon = target
|
||||
user.visible_message("<span class='danger'>[user] has used the analyzer on \icon[icon] [target].</span>")
|
||||
user.visible_message("[user] has used the analyzer on \icon[icon] [target].", "<span class='notice'>You use the analyzer on \icon[icon] [target].</span>")
|
||||
var/pressure = air_contents.return_pressure()
|
||||
var/total_moles = air_contents.total_moles()
|
||||
|
||||
|
||||
@@ -11,6 +11,8 @@
|
||||
user.do_attack_animation(src)
|
||||
if(W && !(W.flags&NOBLUDGEON))
|
||||
visible_message("<span class='danger'>[user] has hit [src] with [W].</span>")
|
||||
user << "<span class='danger'>You hit [src] with [W].</span>"
|
||||
src << "<span class='userdanger'>[user] has hit you with [W]!</span>"
|
||||
|
||||
/mob/living/attackby(obj/item/I, mob/user, params)
|
||||
user.changeNext_move(CLICK_CD_MELEE)
|
||||
@@ -42,12 +44,12 @@
|
||||
/mob/living/simple_animal/attacked_by(var/obj/item/I, var/mob/living/user)
|
||||
if(!I.force)
|
||||
user.visible_message("<span class='warning'>[user] gently taps [src] with [I].</span>",\
|
||||
"<span class='warning'>This weapon is ineffective, it does no damage.</span>")
|
||||
"<span class='warning'>This weapon is ineffective, it does no damage!</span>")
|
||||
else if(I.force >= force_threshold && I.damtype != STAMINA)
|
||||
..()
|
||||
else
|
||||
visible_message("<span class='danger'>[I] bounces harmlessly off of [src].</span>",\
|
||||
"<span class='userdanger'>[I] bounces harmlessly off of [src].</span>")
|
||||
visible_message("<span class='warning'>[I] bounces harmlessly off of [src].</span>",\
|
||||
"<span class='warning'>[I] bounces harmlessly off of [src]!</span>")
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -128,3 +128,9 @@
|
||||
if(!CanContractDisease(D))
|
||||
return 0
|
||||
AddDisease(D)
|
||||
|
||||
|
||||
/mob/living/carbon/human/CanContractDisease(var/datum/disease/D)
|
||||
if(dna && VIRUSIMMUNE in dna.species.specflags)
|
||||
return 0
|
||||
return ..()
|
||||
@@ -31,10 +31,10 @@ Bonus
|
||||
var/mob/living/M = A.affected_mob
|
||||
switch(A.stage)
|
||||
if(3, 4)
|
||||
M << "<span class='notice'>[pick("You hear a ringing in your ear.", "Your ears pop.")]</span>"
|
||||
M << "<span class='italics'>[pick("You hear a ringing in your ear.", "Your ears pop.")]</span>"
|
||||
if(5)
|
||||
if(!(M.ear_deaf))
|
||||
M << "<span class='danger'>Your ears pop and begin ringing loudly!</span>"
|
||||
M << "<span class='userdanger'>Your ears pop and begin ringing loudly!</span>"
|
||||
M.setEarDamage(-1,INFINITY) //Shall be enough
|
||||
spawn(200)
|
||||
if(M)
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
switch(stage)
|
||||
if(2) //also changes say, see say.dm
|
||||
if(prob(5))
|
||||
affected_mob << "<span class='notice'>Your feel anxious.</span>"
|
||||
affected_mob << "<span class='notice'>You feel anxious.</span>"
|
||||
if(3)
|
||||
if(prob(10))
|
||||
affected_mob << "<span class='notice'>Your stomach flutters.</span>"
|
||||
|
||||
+3
-11
@@ -295,10 +295,6 @@
|
||||
else
|
||||
text += "."
|
||||
|
||||
if (objectives.len==0)
|
||||
text += "<br>Objectives are empty! <a href='?src=\ref[src];gang=autoobjective'>Set to kill all rival gang leaders</a>."
|
||||
|
||||
|
||||
else if (src in ticker.mode.B_bosses)
|
||||
text += "loyal|<a href='?src=\ref[src];gang=clear'>none</a>|(A) <a href='?src=\ref[src];gang=agang'>gangster</a> <a href='?src=\ref[src];gang=aboss'>boss</a>|<B>(B)</B> <a href='?src=\ref[src];gang=bgang'>gangster</a> <b>BOSS</b>"
|
||||
text += "<br>Equipment: <a href='?src=\ref[src];gang=equip'>give</a>"
|
||||
@@ -306,13 +302,10 @@
|
||||
var/list/L = current.get_contents()
|
||||
var/obj/item/device/gangtool/gangtool = locate() in L
|
||||
if (gangtool)
|
||||
text += "<br><a href='?src=\ref[src];gang=takeequip'>take</a>."
|
||||
text += "|<a href='?src=\ref[src];gang=takeequip'>take</a>."
|
||||
else
|
||||
text += "."
|
||||
|
||||
if (objectives.len==0)
|
||||
text += "<br>Objectives are empty! <a href='?src=\ref[src];gang=autoobjective'>Set to kill all rival gang leaders</a>."
|
||||
|
||||
else if (src in ticker.mode.A_gang)
|
||||
text += "loyal|<a href='?src=\ref[src];gang=clear'>none</a>|<B>(A) GANGSTER</B> <a href='?src=\ref[src];gang=aboss'>boss</a>|(B) <a href='?src=\ref[src];gang=bgang'>gangster</a> <a href='?src=\ref[src];gang=bboss'>boss</a>"
|
||||
else if (src in ticker.mode.B_gang)
|
||||
@@ -835,6 +828,8 @@
|
||||
current << "<FONT size=3 color=red><B>You are a [gang_name("A")] Gang Boss!</B></FONT>"
|
||||
message_admins("[key_name_admin(usr)] has added [current] to the [gang_name("A")] Gang (A) leadership.")
|
||||
log_admin("[key_name(usr)] has added [current] to the [gang_name("A")] Gang (A) leadership.")
|
||||
ticker.mode.forge_gang_objectives(src)
|
||||
ticker.mode.greet_gang(src,0)
|
||||
|
||||
if("bgang")
|
||||
if(src in ticker.mode.B_gang)
|
||||
@@ -854,11 +849,8 @@
|
||||
current << "<FONT size=3 color=red><B>You are a [gang_name("B")] Gang Boss!</B></FONT>"
|
||||
message_admins("[key_name_admin(usr)] has added [current] to the [gang_name("B")] Gang (B) leadership.")
|
||||
log_admin("[key_name(usr)] has added [current] to the [gang_name("B")] Gang (B) leadership.")
|
||||
|
||||
if("autoobjective")
|
||||
ticker.mode.forge_gang_objectives(src)
|
||||
ticker.mode.greet_gang(src,0)
|
||||
usr << "<span class='info>The objectives for gang war have been generated and shown to [key]</span>"
|
||||
|
||||
if("equip")
|
||||
switch(ticker.mode.equip_gang(current))
|
||||
|
||||
@@ -47,9 +47,9 @@
|
||||
return
|
||||
var/mob/living/carbon/human/H = usr
|
||||
if(H.mind.miming)
|
||||
still_recharging_msg = "<span class='notice'>You can't break your vow of silence that fast!</span>"
|
||||
still_recharging_msg = "<span class='warning'>You can't break your vow of silence that fast!</span>"
|
||||
else
|
||||
still_recharging_msg = "<span class='notice'>You'll have to wait before you can give your vow of silence again.</span>"
|
||||
still_recharging_msg = "<span class='warning'>You'll have to wait before you can give your vow of silence again!</span>"
|
||||
..()
|
||||
|
||||
/obj/effect/proc_holder/spell/targeted/mime/speak/cast(list/targets)
|
||||
|
||||
@@ -22,29 +22,29 @@ Also, you never added distance checking after target is selected. I've went ahea
|
||||
*/
|
||||
/obj/effect/proc_holder/spell/targeted/mind_transfer/cast(list/targets,mob/user = usr, distanceoverride)
|
||||
if(!targets.len)
|
||||
user << "No mind found."
|
||||
user << "<span class='warning'>No mind found!</span>"
|
||||
return
|
||||
|
||||
if(targets.len > 1)
|
||||
user << "Too many minds! You're not a hive damnit!"//Whaa...aat?
|
||||
user << "<span class='warning'>Too many minds! You're not a hive damnit!</span>"//Whaa...aat?
|
||||
return
|
||||
|
||||
var/mob/living/target = targets[1]
|
||||
|
||||
if(!(target in oview(range)) && !distanceoverride)//If they are not in overview after selection. Do note that !() is necessary for in to work because ! takes precedence over it.
|
||||
user << "They are too far away!"
|
||||
user << "<span class='warning'>They are too far away!</span>"
|
||||
return
|
||||
|
||||
if(target.stat == DEAD)
|
||||
user << "You don't particularly want to be dead."
|
||||
user << "<span class='warning'>You don't particularly want to be dead!</span>"
|
||||
return
|
||||
|
||||
if(!target.key || !target.mind)
|
||||
user << "They appear to be catatonic. Not even magic can affect their vacant mind."
|
||||
user << "<span class='warning'>They appear to be catatonic! Not even magic can affect their vacant mind.</span>"
|
||||
return
|
||||
|
||||
if(target.mind.special_role in protected_roles)
|
||||
user << "Their mind is resisting your spell."
|
||||
user << "<span class='warning'>Their mind is resisting your spell!</span>"
|
||||
return
|
||||
|
||||
var/mob/living/victim = target//The target of the spell whos body will be transferred to.
|
||||
|
||||
@@ -137,11 +137,11 @@ var/const/AIRLOCK_WIRE_LIGHT = 2048
|
||||
//raises them if they are down (only if power's on)
|
||||
if(!A.locked)
|
||||
A.locked = 1
|
||||
A.audible_message("You hear a click from the bottom of the door.", null, 1)
|
||||
A.audible_message("<span class='italics'>You hear a click from the bottom of the door.</span>", null, 1)
|
||||
else
|
||||
if(A.hasPower()) //only can raise bolts if power's on
|
||||
A.locked = 0
|
||||
A.audible_message("You hear a click from the bottom of the door.", null, 1)
|
||||
A.audible_message("<span class='italics'>You hear a click from the bottom of the door.</span>", null, 1)
|
||||
A.update_icon()
|
||||
|
||||
if(AIRLOCK_WIRE_BACKUP_POWER1 || AIRLOCK_WIRE_BACKUP_POWER2)
|
||||
|
||||
@@ -113,14 +113,14 @@ var/list/wireColours = list("red", "blue", "green", "black", "orange", "brown",
|
||||
var/colour = href_list["cut"]
|
||||
CutWireColour(colour)
|
||||
else
|
||||
L << "<span class='error'>You need wirecutters!</span>"
|
||||
L << "<span class='warning'>You need wirecutters!</span>"
|
||||
|
||||
else if(href_list["pulse"])
|
||||
if(istype(I, /obj/item/device/multitool))
|
||||
var/colour = href_list["pulse"]
|
||||
PulseColour(colour)
|
||||
else
|
||||
L << "<span class='error'>You need a multitool!</span>"
|
||||
L << "<span class='warning'>You need a multitool!</span>"
|
||||
|
||||
else if(href_list["attach"])
|
||||
var/colour = href_list["attach"]
|
||||
@@ -138,7 +138,7 @@ var/list/wireColours = list("red", "blue", "green", "black", "orange", "brown",
|
||||
L.drop_item()
|
||||
Attach(colour, A)
|
||||
else
|
||||
L << "<span class='error'>You need a attachable assembly!</span>"
|
||||
L << "<span class='warning'>You need a attachable assembly!</span>"
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -125,6 +125,7 @@ proc/process_ghost_teleport_locs()
|
||||
luminosity = 1
|
||||
lighting_use_dynamic = 1
|
||||
has_gravity = 1
|
||||
valid_territory = 0
|
||||
|
||||
|
||||
/area/start
|
||||
@@ -658,6 +659,7 @@ proc/process_ghost_teleport_locs()
|
||||
requires_power = 0
|
||||
luminosity = 1
|
||||
lighting_use_dynamic = 0
|
||||
valid_territory = 0
|
||||
|
||||
auxport
|
||||
name = "\improper Fore Port Solar Array"
|
||||
@@ -966,6 +968,7 @@ proc/process_ghost_teleport_locs()
|
||||
icon_state = "toxmisc"
|
||||
|
||||
/area/toxins/test_area
|
||||
valid_territory = 0
|
||||
name = "\improper Toxins Test Area"
|
||||
icon_state = "toxtest"
|
||||
|
||||
|
||||
+3
-3
@@ -403,15 +403,15 @@
|
||||
return
|
||||
user.changeNext_move(CLICK_CD_BREAKOUT)
|
||||
user.last_special = world.time + CLICK_CD_BREAKOUT
|
||||
user << "<span class='notice'>You lean on the back of [src] and start pushing the door open. (this will take about [breakout_time] minutes.)</span>"
|
||||
user.visible_message("<span class='warning'>You hear a metallic creaking from [src]!</span>")
|
||||
user << "<span class='notice'>You lean on the back of [src] and start pushing the door open... (this will take about [breakout_time] minutes.)</span>"
|
||||
user.visible_message("<span class='italics'>You hear a metallic creaking from [src]!</span>")
|
||||
|
||||
if(do_after(user,(breakout_time*60*10))) //minutes * 60seconds * 10deciseconds
|
||||
if(!user || user.stat != CONSCIOUS || user.loc != src || state_open || !locked)
|
||||
return
|
||||
|
||||
locked = 0
|
||||
visible_message("<span class='danger'>[user] successfully broke out of [src]!</span>")
|
||||
visible_message("<span class='warning'>[user] successfully broke out of [src]!</span>")
|
||||
user << "<span class='notice'>You successfully break out of [src]!</span>"
|
||||
|
||||
open_machine()
|
||||
|
||||
@@ -35,7 +35,7 @@
|
||||
|
||||
return 1
|
||||
|
||||
/datum/game_mode/abduction/proc/make_abductor_team(var/team_number)
|
||||
/datum/game_mode/abduction/proc/make_abductor_team(var/team_number,var/preset_agent=null,var/preset_scientist=null)
|
||||
//Team Name
|
||||
team_names[team_number] = "Mothership [pick(possible_changeling_IDs)]" //TODO Ensure unique and actual alieny names
|
||||
//Team Objective
|
||||
@@ -43,26 +43,40 @@
|
||||
team_objective.team = team_number
|
||||
team_objectives[team_number] = team_objective
|
||||
//Team Members
|
||||
if(antag_candidates.len >=2)
|
||||
var/datum/mind/scientist = pick(antag_candidates)
|
||||
|
||||
if(!preset_agent || !preset_scientist)
|
||||
if(antag_candidates.len <=2)
|
||||
return 0
|
||||
|
||||
var/datum/mind/scientist
|
||||
var/datum/mind/agent
|
||||
|
||||
if(!preset_scientist)
|
||||
scientist = pick(antag_candidates)
|
||||
antag_candidates -= scientist
|
||||
var/datum/mind/agent = pick(antag_candidates)
|
||||
else
|
||||
scientist = preset_scientist
|
||||
|
||||
if(!preset_agent)
|
||||
agent = pick(antag_candidates)
|
||||
antag_candidates -= agent
|
||||
else
|
||||
agent = preset_agent
|
||||
|
||||
scientist.assigned_role = "MODE"
|
||||
scientist.special_role = "Abductor"
|
||||
log_game("[scientist.key] (ckey) has been selected as an abductor team [team_number] scientist.")
|
||||
|
||||
agent.assigned_role = "MODE"
|
||||
agent.special_role = "Abductor"
|
||||
log_game("[agent.key] (ckey) has been selected as an abductor team [team_number] agent.")
|
||||
scientist.assigned_role = "MODE"
|
||||
scientist.special_role = "Abductor"
|
||||
log_game("[scientist.key] (ckey) has been selected as an abductor team [team_number] scientist.")
|
||||
|
||||
abductors += agent
|
||||
abductors += scientist
|
||||
scientists[team_number] = scientist
|
||||
agents[team_number] = agent
|
||||
return 1
|
||||
return 0
|
||||
agent.assigned_role = "MODE"
|
||||
agent.special_role = "Abductor"
|
||||
log_game("[agent.key] (ckey) has been selected as an abductor team [team_number] agent.")
|
||||
|
||||
abductors |= agent
|
||||
abductors |= scientist
|
||||
scientists[team_number] = scientist
|
||||
agents[team_number] = agent
|
||||
return 1
|
||||
|
||||
/datum/game_mode/abduction/post_setup()
|
||||
//Spawn Team
|
||||
@@ -218,6 +232,7 @@
|
||||
agent.equip_to_slot_or_del(new /obj/item/weapon/abductor_baton(agent), slot_in_backpack)
|
||||
agent.equip_to_slot_or_del(new /obj/item/weapon/gun/energy/decloner/alien(agent), slot_belt)
|
||||
agent.equip_to_slot_or_del(new /obj/item/device/abductor/silencer(agent), slot_in_backpack)
|
||||
agent.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/abductor(agent), slot_head)
|
||||
|
||||
|
||||
/datum/game_mode/abduction/proc/equip_scientist(var/mob/living/carbon/human/scientist,var/team_number)
|
||||
@@ -236,19 +251,11 @@
|
||||
|
||||
|
||||
/datum/game_mode/abduction/check_finished()
|
||||
var/all_dead = 1
|
||||
for(var/team_number=1,team_number<=teams,team_number++)
|
||||
var/datum/mind/smind = scientists[team_number]
|
||||
if(smind.current)
|
||||
var/mob/living/M = smind.current
|
||||
if(M.stat != DEAD)
|
||||
all_dead = 0
|
||||
var/obj/machinery/abductor/console/con = get_team_console(team_number)
|
||||
var/datum/objective/objective = team_objectives[team_number]
|
||||
if (con.experiment.points > objective.target_amount)
|
||||
return 1
|
||||
if(all_dead)
|
||||
return 1
|
||||
return ..()
|
||||
|
||||
/datum/game_mode/abduction/declare_completion()
|
||||
|
||||
@@ -133,7 +133,7 @@
|
||||
/obj/item/device/abductor/proc/AbductorCheck(var/user)
|
||||
if(IsAbductor(user))
|
||||
return 1
|
||||
user << "<span class='notice'>You can't figure how this works.</span>"
|
||||
user << "<span class='warning'>You can't figure how this works!</span>"
|
||||
return 0
|
||||
|
||||
/obj/item/device/abductor/proc/ScientistCheck(var/user)
|
||||
@@ -155,7 +155,7 @@
|
||||
if(!AbductorCheck(user))
|
||||
return
|
||||
if(!ScientistCheck(user))
|
||||
user << "<span class='notice'>You're not trained to use this</span>"
|
||||
user << "<span class='warning'>You're not trained to use this!</span>"
|
||||
return
|
||||
if(mode == GIZMO_SCAN)
|
||||
mode = GIZMO_MARK
|
||||
@@ -200,7 +200,7 @@
|
||||
|
||||
/obj/item/device/abductor/gizmo/proc/mark(var/atom/target, var/mob/living/user)
|
||||
if(marked == target)
|
||||
user << "<span class='notice'>This specimen is already marked.</span>"
|
||||
user << "<span class='warning'>This specimen is already marked!</span>"
|
||||
return
|
||||
if(istype(target,/mob/living/carbon/human))
|
||||
if(IsAbductor(target))
|
||||
@@ -211,12 +211,12 @@
|
||||
|
||||
/obj/item/device/abductor/gizmo/proc/prepare(var/atom/target, var/mob/living/user)
|
||||
if(get_dist(target,user)>1)
|
||||
user << "<span class='warning'>You need to be next to the specimen to prepare it for transport.</span>"
|
||||
user << "<span class='warning'>You need to be next to the specimen to prepare it for transport!</span>"
|
||||
return
|
||||
user << "<span class='notice'>You start preparing the specimen for transport </span>"
|
||||
user << "<span class='notice'>You start preparing the specimen for transport...</span>"
|
||||
if(do_after(user, 100))
|
||||
marked = target
|
||||
user << "<span class='notice'>You finish preparing the specimen for transport </span>"
|
||||
user << "<span class='notice'>You finish preparing the specimen for transport.</span>"
|
||||
|
||||
|
||||
/obj/item/device/abductor/silencer
|
||||
@@ -479,20 +479,58 @@ Congratulations! You are now trained for xenobiology research!"}
|
||||
user <<"<span class='warning'>The baton is in restrain mode.</span>"
|
||||
|
||||
|
||||
obj/item/weapon/scalpel/alien
|
||||
/obj/item/weapon/scalpel/alien
|
||||
name = "alien scalpel"
|
||||
icon = 'icons/obj/abductor.dmi'
|
||||
|
||||
obj/item/weapon/hemostat/alien
|
||||
/obj/item/weapon/hemostat/alien
|
||||
name = "alien hemostat"
|
||||
icon = 'icons/obj/abductor.dmi'
|
||||
|
||||
obj/item/weapon/retractor/alien
|
||||
/obj/item/weapon/retractor/alien
|
||||
name = "alien retractor"
|
||||
icon = 'icons/obj/abductor.dmi'
|
||||
|
||||
/obj/item/weapon/circular_saw/alien
|
||||
name = "alien saw"
|
||||
icon = 'icons/obj/abductor.dmi'
|
||||
|
||||
/obj/item/weapon/surgicaldrill/alien
|
||||
name = "alien drill"
|
||||
icon = 'icons/obj/abductor.dmi'
|
||||
|
||||
/obj/item/weapon/cautery/alien
|
||||
name = "alien cautery"
|
||||
icon = 'icons/obj/abductor.dmi'
|
||||
|
||||
/obj/item/clothing/head/helmet/abductor
|
||||
name = "Agent Headgear"
|
||||
desc = "Abducting with style. Spiky style."
|
||||
icon_state = "alienhelmet"
|
||||
item_state = "alienhelmet"
|
||||
blockTracking = 1
|
||||
|
||||
// Operating Table / Beds / Lockers
|
||||
|
||||
/obj/structure/optable/abductor
|
||||
icon = 'icons/obj/abductor.dmi'
|
||||
icon_state = "bed"
|
||||
can_buckle = 1
|
||||
buckle_lying = 1
|
||||
|
||||
/obj/structure/stool/bed/abductor
|
||||
name = "resting contraption"
|
||||
desc = "This looks similar to contraptions from earth. Could aliens be stealing our technology?"
|
||||
icon = 'icons/obj/abductor.dmi'
|
||||
icon_state = "bed"
|
||||
|
||||
/obj/structure/table/abductor
|
||||
name = "alien table"
|
||||
desc = "Advanced flat surface technology at work!"
|
||||
icon_state = "alientable"
|
||||
|
||||
/obj/structure/closet/abductor
|
||||
name = "alien locker"
|
||||
desc = "Contains secrets of the universe"
|
||||
icon_state = "abductor"
|
||||
icon_door = "abductor"
|
||||
@@ -1,500 +0,0 @@
|
||||
/obj/machinery/abductor
|
||||
var/team = 0
|
||||
|
||||
/obj/machinery/abductor/console
|
||||
name = "Abductor console"
|
||||
desc = "Ship command center."
|
||||
icon = 'icons/obj/abductor.dmi'
|
||||
icon_state = "console"
|
||||
density = 1
|
||||
anchored = 1.0
|
||||
var/obj/item/device/abductor/gizmo/gizmo
|
||||
var/obj/item/clothing/suit/armor/abductor/vest/vest
|
||||
var/obj/machinery/abductor/experiment/experiment
|
||||
var/obj/machinery/abductor/pad/pad
|
||||
var/list/datum/icon_snapshot/disguises = list()
|
||||
|
||||
/obj/machinery/abductor/console/attack_hand(var/mob/user as mob)
|
||||
if(..())
|
||||
return
|
||||
if(!IsAbductor(user))
|
||||
return
|
||||
user.set_machine(src)
|
||||
var/dat = ""
|
||||
dat += "<H3> Abductsoft 3000 </H3>"
|
||||
|
||||
if(experiment != null)
|
||||
var/points = experiment.points
|
||||
dat += "Collected Samples : [points] <br>"
|
||||
else
|
||||
dat += "<span class='bad'>NO EXPERIMENT MACHINE DETECTED</span> <br>"
|
||||
|
||||
if(pad!=null)
|
||||
dat += "<a href='?src=\ref[src];teleporter_send=1'>Activate Teleporter</A><br>"
|
||||
dat += "<a href='?src=\ref[src];teleporter_set=1'>Set Teleporter</A><br>"
|
||||
if(gizmo!=null && gizmo.marked!=null)
|
||||
dat += "<a href='?src=\ref[src];teleporter_retrieve=1'>Retrieve Mark</A><br>"
|
||||
else
|
||||
dat += "<span class='linkOff'>Retrieve Mark</span><br>"
|
||||
else
|
||||
dat += "<span class='bad'>NO TELEPAD DETECTED</span></br>"
|
||||
|
||||
if(vest!=null)
|
||||
dat += "<h4> Agent Vest Mode </h4><br>"
|
||||
var/mode = vest.mode
|
||||
if(mode == VEST_STEALTH)
|
||||
dat += "<a href='?src=\ref[src];flip_vest=1'>Combat</A>"
|
||||
dat += "<span class='linkOff'>Stealth</span>"
|
||||
else
|
||||
dat += "<span class='linkOff'>Combat</span>"
|
||||
dat += "<a href='?src=\ref[src];flip_vest=1'>Stealth</A>"
|
||||
|
||||
dat+="<br>"
|
||||
dat += "<a href='?src=\ref[src];select_disguise=1'>Select Agent Vest Disguise</a><br>"
|
||||
else
|
||||
dat += "<span class='bad'>NO AGENT VEST DETECTED</span>"
|
||||
var/datum/browser/popup = new(user, "computer", "Abductor Console", 400, 500)
|
||||
popup.set_content(dat)
|
||||
popup.set_title_image(user.browse_rsc_icon(src.icon, src.icon_state))
|
||||
popup.open()
|
||||
return
|
||||
|
||||
/obj/machinery/abductor/console/Topic(href, href_list)
|
||||
if(..())
|
||||
return
|
||||
if((usr.contents.Find(src) || (in_range(src, usr) && istype(src.loc, /turf))) || (istype(usr, /mob/living/silicon)))
|
||||
usr.set_machine(src)
|
||||
if(href_list["teleporter_set"])
|
||||
TeleporterSet()
|
||||
else if(href_list["teleporter_send"])
|
||||
TeleporterSend()
|
||||
else if(href_list["teleporter_retrieve"])
|
||||
TeleporterRetrieve()
|
||||
else if(href_list["flip_vest"])
|
||||
FlipVest()
|
||||
else if(href_list["select_disguise"])
|
||||
SelectDisguise()
|
||||
src.updateUsrDialog()
|
||||
|
||||
/obj/machinery/abductor/console/proc/TeleporterSet()
|
||||
var/A = null
|
||||
A = input("Select area to teleport to", "Teleport", A) in teleportlocs
|
||||
if(pad!=null)
|
||||
pad.teleport_target = teleportlocs[A]
|
||||
return
|
||||
|
||||
/obj/machinery/abductor/console/proc/TeleporterRetrieve()
|
||||
if(gizmo!=null && pad!=null && gizmo.marked)
|
||||
pad.Retrieve(gizmo.marked)
|
||||
return
|
||||
|
||||
/obj/machinery/abductor/console/proc/TeleporterSend()
|
||||
if(pad!=null)
|
||||
pad.Send()
|
||||
return
|
||||
|
||||
/obj/machinery/abductor/console/proc/FlipVest()
|
||||
if(vest!=null)
|
||||
vest.flip_mode()
|
||||
return
|
||||
|
||||
/obj/machinery/abductor/console/proc/SelectDisguise()
|
||||
var/list/entries = list()
|
||||
var/tempname
|
||||
var/datum/icon_snapshot/temp
|
||||
for(var/i = 1; i <= disguises.len; i++)
|
||||
temp = disguises[i]
|
||||
tempname = temp.name
|
||||
entries["[tempname]"] = disguises[i]
|
||||
var/entry_name = input( "Choose Disguise", "Disguise") in entries
|
||||
var/datum/icon_snapshot/chosen = entries[entry_name]
|
||||
if(chosen)
|
||||
vest.SetDisguise(chosen)
|
||||
return
|
||||
|
||||
/obj/machinery/abductor/console/proc/Initialize()
|
||||
|
||||
for(var/obj/machinery/abductor/pad/p in machines)
|
||||
if(p.team == team)
|
||||
pad = p
|
||||
break
|
||||
|
||||
for(var/obj/machinery/abductor/experiment/e in machines)
|
||||
if(e.team == team)
|
||||
experiment = e
|
||||
e.console = src
|
||||
|
||||
/obj/machinery/abductor/console/proc/AddSnapshot(var/mob/living/carbon/human/target)
|
||||
var/datum/icon_snapshot/entry = new
|
||||
entry.name = target.name
|
||||
entry.icon = target.icon
|
||||
entry.icon_state = target.icon_state
|
||||
entry.overlays = target.get_overlays_copy(list(L_HAND_LAYER,R_HAND_LAYER))
|
||||
for(var/i=1,i<=disguises.len,i++)
|
||||
var/datum/icon_snapshot/temp = disguises[i]
|
||||
if(temp.name == entry.name)
|
||||
disguises[i] = entry
|
||||
return
|
||||
disguises.Add(entry)
|
||||
return
|
||||
|
||||
/obj/machinery/abductor/pad
|
||||
name = "Alien Telepad"
|
||||
desc = "Use this to transport to and from human habitat"
|
||||
icon = 'icons/obj/abductor.dmi'
|
||||
icon_state = "alien-pad-idle"
|
||||
anchored = 1
|
||||
var/area/teleport_target
|
||||
|
||||
/obj/machinery/abductor/proc/IsAbductor(var/mob/living/carbon/human/H)
|
||||
if(!H.dna)
|
||||
return 0
|
||||
return H.dna.species.id == "abductor"
|
||||
|
||||
/obj/machinery/abductor/proc/IsAgent(var/mob/living/carbon/human/H)
|
||||
if(H.dna.species.id == "abductor")
|
||||
var/datum/species/abductor/S = H.dna.species
|
||||
return S.agent
|
||||
return 0
|
||||
|
||||
/obj/machinery/abductor/proc/IsScientist(var/mob/living/carbon/human/H)
|
||||
if(H.dna.species.id == "abductor")
|
||||
var/datum/species/abductor/S = H.dna.species
|
||||
return S.scientist
|
||||
return 0
|
||||
|
||||
/obj/machinery/abductor/proc/TeleportToArea(var/mob/living/target,var/area/thearea)
|
||||
var/list/L = list()
|
||||
for(var/turf/T in get_area_turfs(thearea.type))
|
||||
if(!T.density)
|
||||
var/clear = 1
|
||||
for(var/obj/O in T)
|
||||
if(O.density)
|
||||
clear = 0
|
||||
break
|
||||
if(clear)
|
||||
L+=T
|
||||
if(!L.len)
|
||||
return
|
||||
|
||||
if(target && target.buckled)
|
||||
target.buckled.unbuckle_mob()
|
||||
|
||||
var/list/tempL = L
|
||||
var/attempt = null
|
||||
var/success = 0
|
||||
while(tempL.len)
|
||||
attempt = pick(tempL)
|
||||
target.Move(attempt)
|
||||
if(get_turf(target) == attempt)
|
||||
success = 1
|
||||
break
|
||||
else
|
||||
tempL.Remove(attempt)
|
||||
if(!success)
|
||||
target.loc = pick(L)
|
||||
|
||||
/obj/machinery/abductor/pad/proc/Warp(var/mob/living/target)
|
||||
target.Move(src.loc)
|
||||
|
||||
/obj/machinery/abductor/pad/proc/Send()
|
||||
flick("alien-pad", src)
|
||||
for(var/mob/living/target in src.loc)
|
||||
TeleportToArea(target,teleport_target)
|
||||
spawn(0)
|
||||
anim(target.loc,target,'icons/mob/mob.dmi',,"uncloak",,target.dir)
|
||||
|
||||
/obj/machinery/abductor/pad/proc/Retrieve(var/mob/living/carbon/human/target)
|
||||
flick("alien-pad", src)
|
||||
spawn(0)
|
||||
anim(target.loc,target,'icons/mob/mob.dmi',,"uncloak",,target.dir)
|
||||
Warp(target)
|
||||
|
||||
/obj/machinery/abductor/experiment
|
||||
name = "Experimental machinery"
|
||||
desc = "A human-sized coffin sporting wide array of automatic surgery tools"
|
||||
icon = 'icons/obj/abductor.dmi'
|
||||
icon_state = "experiment-open"
|
||||
density = 0
|
||||
anchored = 1
|
||||
state_open = 1
|
||||
var/points = 0
|
||||
var/list/history = new
|
||||
var/flash = " - || - "
|
||||
var/obj/machinery/abductor/console/console
|
||||
|
||||
/obj/machinery/abductor/experiment/MouseDrop_T(mob/target, mob/user)
|
||||
if(user.stat || user.lying || !Adjacent(user) || !target.Adjacent(user) || !ishuman(target))
|
||||
return
|
||||
if(IsAbductor(target))
|
||||
return
|
||||
close_machine(target)
|
||||
|
||||
/obj/machinery/abductor/experiment/allow_drop()
|
||||
return 0
|
||||
|
||||
/obj/machinery/abductor/experiment/attack_hand(mob/user)
|
||||
if(..())
|
||||
return
|
||||
|
||||
experimentUI(user)
|
||||
|
||||
/obj/machinery/abductor/experiment/open_machine()
|
||||
if(!state_open && !panel_open)
|
||||
..()
|
||||
|
||||
/obj/machinery/abductor/experiment/close_machine(mob/target)
|
||||
for(var/mob/living/carbon/C in loc)
|
||||
if(IsAbductor(C))
|
||||
return
|
||||
if(state_open && !panel_open)
|
||||
..(target)
|
||||
|
||||
/obj/machinery/abductor/experiment/proc/dissection_icon(var/mob/living/carbon/human/H)
|
||||
var/icon/photo = null
|
||||
var/g = (H.gender == FEMALE) ? "f" : "m"
|
||||
if(!config.mutant_races || H.dna.species.use_skintones)
|
||||
photo = icon("icon" = 'icons/mob/human.dmi', "icon_state" = "[H.skin_tone]_[g]_s")
|
||||
else
|
||||
photo = icon("icon" = 'icons/mob/human.dmi', "icon_state" = "[H.dna.species.id]_[g]_s")
|
||||
photo.Blend("#[H.dna.mutant_color]", ICON_MULTIPLY)
|
||||
|
||||
var/icon/eyes_s
|
||||
if(EYECOLOR in H.dna.species.specflags)
|
||||
eyes_s = icon("icon" = 'icons/mob/human_face.dmi', "icon_state" = "[H.dna.species.eyes]_s")
|
||||
eyes_s.Blend("#[H.eye_color]", ICON_MULTIPLY)
|
||||
|
||||
var/datum/sprite_accessory/S
|
||||
S = hair_styles_list[H.hair_style]
|
||||
if(S && (HAIR in H.dna.species.specflags))
|
||||
var/icon/hair_s = icon("icon" = S.icon, "icon_state" = "[S.icon_state]_s")
|
||||
hair_s.Blend("#[H.hair_color]", ICON_MULTIPLY)
|
||||
eyes_s.Blend(hair_s, ICON_OVERLAY)
|
||||
|
||||
S = facial_hair_styles_list[H.facial_hair_style]
|
||||
if(S && (FACEHAIR in H.dna.species.specflags))
|
||||
var/icon/facial_s = icon("icon" = S.icon, "icon_state" = "[S.icon_state]_s")
|
||||
facial_s.Blend("#[H.facial_hair_color]", ICON_MULTIPLY)
|
||||
eyes_s.Blend(facial_s, ICON_OVERLAY)
|
||||
|
||||
if(eyes_s)
|
||||
photo.Blend(eyes_s, ICON_OVERLAY)
|
||||
|
||||
var/icon/splat = icon("icon" = 'icons/mob/dam_human.dmi',"icon_state" = "chest30")
|
||||
photo.Blend(splat,ICON_OVERLAY)
|
||||
|
||||
return photo
|
||||
|
||||
/obj/machinery/abductor/experiment/proc/experimentUI(mob/user)
|
||||
var/dat
|
||||
dat += "<h3> Experiment </h3>"
|
||||
if(occupant)
|
||||
var/obj/item/weapon/photo/P = new
|
||||
P.photocreate(null, icon(dissection_icon(occupant), dir = SOUTH))
|
||||
user << browse_rsc(P.img, "dissection_img")
|
||||
dat += "<table><tr><td>"
|
||||
dat += "<img src=dissection_img height=80 width=80>" //Avert your eyes
|
||||
dat += "</td><td>"
|
||||
dat += "<a href='?src=\ref[src];experiment=1'>Probe</a><br>"
|
||||
dat += "<a href='?src=\ref[src];experiment=2'>Dissect</a><br>"
|
||||
dat += "<a href='?src=\ref[src];experiment=3'>Analyze</a><br>"
|
||||
dat += "</td></tr></table>"
|
||||
else
|
||||
dat += "<span class='linkOff'> Experiment </span>"
|
||||
|
||||
if(!occupant)
|
||||
dat += "<h3>Machine Unoccupied</h3>"
|
||||
else
|
||||
dat += "<h3>Subject Status : </h3>"
|
||||
dat += "[occupant.name] => "
|
||||
switch(occupant.stat)
|
||||
if(0)
|
||||
dat += "<span class='good'>Conscious</span>"
|
||||
if(1)
|
||||
dat += "<span class='average'>Unconscious</span>"
|
||||
else
|
||||
dat += "<span class='bad'>DEAD</span>"
|
||||
dat += "<br>"
|
||||
dat += "[flash]"
|
||||
dat += "<br>"
|
||||
dat += "<a href='?src=\ref[src];refresh=1'>Scan</a>"
|
||||
dat += "<a href='?src=\ref[src];[state_open ? "close=1'>Close</a>" : "open=1'>Open</a>"]"
|
||||
var/datum/browser/popup = new(user, "experiment", "Probing Console", 300, 300)
|
||||
popup.set_title_image(user.browse_rsc_icon(icon, icon_state))
|
||||
popup.set_content(dat)
|
||||
popup.open()
|
||||
|
||||
/obj/machinery/abductor/experiment/Topic(href, href_list)
|
||||
if(..() || usr == occupant)
|
||||
return
|
||||
usr.set_machine(src)
|
||||
if(href_list["refresh"])
|
||||
updateUsrDialog()
|
||||
return
|
||||
if(href_list["open"])
|
||||
open_machine()
|
||||
return
|
||||
if(href_list["close"])
|
||||
close_machine()
|
||||
return
|
||||
if(occupant && occupant.stat != DEAD)
|
||||
if(href_list["experiment"])
|
||||
flash = Experiment(occupant,href_list["experiment"])
|
||||
updateUsrDialog()
|
||||
add_fingerprint(usr)
|
||||
|
||||
/obj/machinery/abductor/experiment/proc/Experiment(var/mob/occupant,var/type)
|
||||
var/mob/living/carbon/human/H = occupant
|
||||
var/point_reward = 0
|
||||
if(H in history)
|
||||
return "<span class='bad'>Specimen already in the database</span>"
|
||||
if(H.stat == DEAD)
|
||||
say("Specimen deceased - please provide fresh sample.")
|
||||
return "<span class='bad'>Specimen Deceased</span>"
|
||||
var/obj/item/gland/GlandTest = locate() in H
|
||||
if(!GlandTest)
|
||||
say("Experimental dissection not detected!")
|
||||
return "<span class='bad'>No glands detected!</span>"
|
||||
if(H.mind != null || H.ckey != null)
|
||||
history += H
|
||||
say("Processing Specimen...")
|
||||
sleep(5)
|
||||
switch(text2num(type))
|
||||
if(1)
|
||||
H << "<span class='warning'>You feel violated.</span>"
|
||||
if(2)
|
||||
H << "<span class='warning'>You feel being sliced and put back together.</span>"
|
||||
if(3)
|
||||
H << "<span class='warning'>You feel under intense scrutiny.</span>"
|
||||
sleep(5)
|
||||
H << "<span class='warning'>Your mind snaps!</span>"
|
||||
var/objtype = pick(typesof(/datum/objective/abductee/) - /datum/objective/abductee/)
|
||||
var/datum/objective/abductee/O = new objtype()
|
||||
H.mind.objectives += O
|
||||
var/obj_count = 1
|
||||
H << "<span class='notice'>Your current objectives:</span>"
|
||||
for(var/datum/objective/objective in H.mind.objectives)
|
||||
H << "<B>Objective #[obj_count]</B>: [objective.explanation_text]"
|
||||
obj_count++
|
||||
|
||||
for(var/obj/item/gland/G in H)
|
||||
G.Start()
|
||||
point_reward++
|
||||
if(point_reward > 0)
|
||||
open_machine()
|
||||
SendBack(H)
|
||||
playsound(src.loc, 'sound/machines/ding.ogg', 50, 1)
|
||||
points += point_reward
|
||||
return "<span class='good'>Experiment Successfull! [point_reward] new data-points collected.</span>"
|
||||
else
|
||||
playsound(src.loc, 'sound/machines/buzz-sigh.ogg', 50, 1)
|
||||
return "<span class='bad'>Experiment Failed! No replacement organ detected.</span>"
|
||||
else
|
||||
say("Brain Activity Nonexistant - Disposing Sample...")
|
||||
open_machine()
|
||||
SendBack(H)
|
||||
return "<span class='bad'>Specimen Braindead - Disposed</span>"
|
||||
return "<span class='bad'>ERROR</span>"
|
||||
|
||||
|
||||
/obj/machinery/abductor/experiment/proc/SendBack(var/mob/living/carbon/human/H)
|
||||
H.Sleeping(8)
|
||||
var/area/A
|
||||
if(console && console.pad && console.pad.teleport_target)
|
||||
A = console.pad.teleport_target
|
||||
else
|
||||
A = teleportlocs[pick(teleportlocs)]
|
||||
TeleportToArea(H,A)
|
||||
|
||||
/obj/machinery/abductor/experiment/update_icon()
|
||||
if(state_open)
|
||||
icon_state = "experiment-open"
|
||||
else
|
||||
icon_state = "experiment"
|
||||
|
||||
/obj/machinery/abductor/experiment/say_quote(text)
|
||||
return "beeps, \"[text]\""
|
||||
|
||||
|
||||
/obj/machinery/abductor/gland_dispenser
|
||||
name = "Replacement Organ Storage"
|
||||
desc = "A tank filled with replacement organs"
|
||||
icon = 'icons/obj/abductor.dmi'
|
||||
icon_state = "dispenser"
|
||||
density = 1
|
||||
anchored = 1
|
||||
var/list/gland_types
|
||||
var/list/gland_colors
|
||||
var/list/amounts
|
||||
|
||||
/obj/machinery/abductor/gland_dispenser/proc/random_color()
|
||||
//TODO : replace with presets or spectrum
|
||||
return rgb(rand(0,255),rand(0,255),rand(0,255))
|
||||
|
||||
/obj/machinery/abductor/gland_dispenser/New()
|
||||
gland_types = typesof(/obj/item/gland) - /obj/item/gland
|
||||
gland_types = shuffle(gland_types)
|
||||
gland_colors = new/list(gland_types.len)
|
||||
amounts = new/list(gland_types.len)
|
||||
for(var/i=1,i<=gland_types.len,i++)
|
||||
gland_colors[i] = random_color()
|
||||
amounts[i] = rand(1,5)
|
||||
|
||||
/obj/machinery/abductor/gland_dispenser/attack_hand(var/mob/user as mob)
|
||||
if(..())
|
||||
return
|
||||
if(!IsAbductor(user))
|
||||
return
|
||||
user.set_machine(src)
|
||||
var/box_css = {"
|
||||
<style>
|
||||
a.box.gland {
|
||||
float: left;
|
||||
width: 20px;
|
||||
height: 20px;
|
||||
margin: 5px;
|
||||
border-width: 1px;
|
||||
border-style: solid;
|
||||
border-color: rgba(0,0,0,.2);
|
||||
text-align: center;
|
||||
}
|
||||
</style>"}
|
||||
var/dat = ""
|
||||
var/item_count = 0
|
||||
for(var/i=1,i<=gland_colors.len,i++)
|
||||
item_count++
|
||||
var/g_color = gland_colors[i]
|
||||
var/amount = amounts[i]
|
||||
dat += "<a class='box gland' style='background-color:[g_color]' href='?src=\ref[src];dispense=[i]'>[amount]</a>"
|
||||
if(item_count == 3) // Three boxes per line
|
||||
dat +="</br></br>"
|
||||
item_count = 0
|
||||
var/datum/browser/popup = new(user, "glands", "Gland Dispenser", 200, 200)
|
||||
popup.add_head_content(box_css)
|
||||
popup.set_content(dat)
|
||||
popup.set_title_image(user.browse_rsc_icon(src.icon, src.icon_state))
|
||||
popup.open()
|
||||
return
|
||||
|
||||
/obj/machinery/abductor/gland_dispenser/attackby(obj/item/weapon/W, mob/user, params)
|
||||
if(istype(W, /obj/item/gland))
|
||||
user.drop_item()
|
||||
W.loc = src
|
||||
for(var/i=1,i<=gland_colors.len,i++)
|
||||
if(gland_types[i] == W.type)
|
||||
amounts[i]++
|
||||
|
||||
/obj/machinery/abductor/gland_dispenser/Topic(href, href_list)
|
||||
if(..())
|
||||
return
|
||||
if((usr.contents.Find(src) || (in_range(src, usr) && istype(src.loc, /turf))) || (istype(usr, /mob/living/silicon)))
|
||||
usr.set_machine(src)
|
||||
if(href_list["dispense"])
|
||||
Dispense(text2num(href_list["dispense"]))
|
||||
src.updateUsrDialog()
|
||||
|
||||
/obj/machinery/abductor/gland_dispenser/proc/Dispense(var/count)
|
||||
if(amounts[count]>0)
|
||||
amounts[count]--
|
||||
var/T = gland_types[count]
|
||||
new T(get_turf(src))
|
||||
@@ -5,6 +5,7 @@
|
||||
location = "chest"
|
||||
user_species_restricted = 1
|
||||
user_species_ids = list("abductor")
|
||||
ignore_clothes = 1
|
||||
|
||||
/datum/surgery_step/extract_organ
|
||||
accept_hand = 1
|
||||
@@ -17,16 +18,16 @@
|
||||
if(I.type in organ_types)
|
||||
IC = I
|
||||
break
|
||||
user.visible_message("<span class='notice'>[user] starts to remove [target]'s organs.</span>")
|
||||
user.visible_message("[user] starts to remove [target]'s organs.", "<span class='notice'>You start to remove [target]'s organs...</span>")
|
||||
|
||||
/datum/surgery_step/extract_organ/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
|
||||
if(IC)
|
||||
user.visible_message("<span class='notice'>[user] pulls [IC] out of [target]'s [target_zone]!</span>")
|
||||
user.visible_message("[user] pulls [IC] out of [target]'s [target_zone]!", "<span class='notice'>You pull [IC] out of [target]'s [target_zone].</span>")
|
||||
user.put_in_hands(IC)
|
||||
target.internal_organs -= IC
|
||||
return 1
|
||||
else
|
||||
user.visible_message("<span class='notice'>[user] doesn't find anything in [target]'s [target_zone].</span>")
|
||||
user << "<span class='warning'>You don't find anything in [target]'s [target_zone]!</span>"
|
||||
return 0
|
||||
|
||||
/datum/surgery_step/gland_insert
|
||||
@@ -34,10 +35,10 @@
|
||||
time = 32
|
||||
|
||||
/datum/surgery_step/gland_insert/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
|
||||
user.visible_message("<span class ='notice'>[user] starts to insert [tool] into [target].</span>")
|
||||
user.visible_message("[user] starts to insert [tool] into [target].", "<span class ='notice'>You start to insert [tool] into [target]...</span>")
|
||||
|
||||
/datum/surgery_step/gland_insert/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
|
||||
user.visible_message("<span class ='notice'>[user] inserts [tool] into [target].</span>")
|
||||
user.visible_message("[user] inserts [tool] into [target].", "<span class ='notice'>You insert [tool] into [target].</span>")
|
||||
user.drop_item()
|
||||
var/obj/item/gland/gland = tool
|
||||
gland.Inject(target)
|
||||
|
||||
@@ -3,10 +3,9 @@
|
||||
desc = "Eww"
|
||||
icon = 'icons/obj/abductor.dmi'
|
||||
icon_state = "gland"
|
||||
var/cooldown_low = 30
|
||||
var/cooldown_high = 30
|
||||
var/cooldown_current = 0
|
||||
var/cooldown = 0
|
||||
var/cooldown_low = 300
|
||||
var/cooldown_high = 300
|
||||
var/next_activation = 0
|
||||
var/uses // -1 For inifinite
|
||||
var/active = 0
|
||||
var/mob/living/carbon/human/host
|
||||
@@ -19,6 +18,7 @@
|
||||
|
||||
/obj/item/gland/proc/Start()
|
||||
active = 1
|
||||
next_activation = world.time + rand(cooldown_low,cooldown_high)
|
||||
SSobj.processing |= src
|
||||
|
||||
/obj/item/gland/proc/Inject(var/mob/living/carbon/human/target)
|
||||
@@ -30,16 +30,14 @@
|
||||
if(!active)
|
||||
SSobj.processing.Remove(src)
|
||||
return
|
||||
cooldown++
|
||||
if(cooldown >= cooldown_current)
|
||||
if(next_activation <= world.time)
|
||||
//This gives a chance to transplant the gland active into someone else if you're fast
|
||||
if(!HostCheck())
|
||||
active = 0
|
||||
return
|
||||
activate()
|
||||
uses--
|
||||
cooldown = 0
|
||||
cooldown_current = rand(cooldown_low,cooldown_high)
|
||||
next_activation = world.time + rand(cooldown_low,cooldown_high)
|
||||
if(uses == 0)
|
||||
active = 0
|
||||
|
||||
@@ -47,8 +45,8 @@
|
||||
return
|
||||
|
||||
/obj/item/gland/heals
|
||||
cooldown_low = 20
|
||||
cooldown_high = 40
|
||||
cooldown_low = 200
|
||||
cooldown_high = 400
|
||||
uses = -1
|
||||
icon_state = "health"
|
||||
|
||||
@@ -59,8 +57,8 @@ obj/item/gland/heals/activate()
|
||||
host.adjustFireLoss(-20)
|
||||
|
||||
/obj/item/gland/slime
|
||||
cooldown_low = 60
|
||||
cooldown_high = 120
|
||||
cooldown_low = 600
|
||||
cooldown_high = 1200
|
||||
uses = -1
|
||||
icon_state = "slime"
|
||||
|
||||
@@ -82,8 +80,8 @@ obj/item/gland/slime/activate()
|
||||
Slime.Leader = host
|
||||
|
||||
/obj/item/gland/mindshock
|
||||
cooldown_low = 30
|
||||
cooldown_high = 30
|
||||
cooldown_low = 300
|
||||
cooldown_high = 300
|
||||
uses = -1
|
||||
icon_state = "mindshock"
|
||||
|
||||
@@ -98,9 +96,9 @@ obj/item/gland/slime/activate()
|
||||
H.confused += 20
|
||||
|
||||
/obj/item/gland/pop
|
||||
cooldown_low = 120
|
||||
cooldown_high = 180
|
||||
uses = 5
|
||||
cooldown_low = 900
|
||||
cooldown_high = 1800
|
||||
uses = 6
|
||||
icon_state = "species"
|
||||
|
||||
/obj/item/gland/pop/activate()
|
||||
@@ -111,8 +109,8 @@ obj/item/gland/slime/activate()
|
||||
return
|
||||
|
||||
/obj/item/gland/ventcrawling
|
||||
cooldown_low = 180
|
||||
cooldown_high = 240
|
||||
cooldown_low = 1800
|
||||
cooldown_high = 2400
|
||||
uses = 1
|
||||
icon_state = "vent"
|
||||
|
||||
@@ -124,8 +122,8 @@ obj/item/gland/slime/activate()
|
||||
|
||||
|
||||
/obj/item/gland/viral
|
||||
cooldown_low = 180
|
||||
cooldown_high = 240
|
||||
cooldown_low = 1800
|
||||
cooldown_high = 2400
|
||||
uses = 1
|
||||
icon_state = "viral"
|
||||
|
||||
@@ -140,18 +138,17 @@ obj/item/gland/slime/activate()
|
||||
|
||||
|
||||
/obj/item/gland/emp //TODO : Replace with something more interesting
|
||||
cooldown_low = 90
|
||||
cooldown_high = 160
|
||||
uses = 5
|
||||
cooldown_low = 900
|
||||
cooldown_high = 1600
|
||||
uses = 10
|
||||
icon_state = "emp"
|
||||
|
||||
/obj/item/gland/emp/activate()
|
||||
empulse(get_turf(host), 2, 5, 1)
|
||||
|
||||
|
||||
/obj/item/gland/spiderman
|
||||
cooldown_low = 90
|
||||
cooldown_high = 160
|
||||
cooldown_low = 450
|
||||
cooldown_high = 900
|
||||
uses = 10
|
||||
icon_state = "spider"
|
||||
|
||||
@@ -161,12 +158,98 @@ obj/item/gland/slime/activate()
|
||||
new /obj/effect/spider/spiderling(host.loc)
|
||||
|
||||
/obj/item/gland/egg
|
||||
cooldown_low = 60
|
||||
cooldown_high = 90
|
||||
cooldown_low = 300
|
||||
cooldown_high = 600
|
||||
uses = -1
|
||||
icon_state = "egg"
|
||||
|
||||
/obj/item/gland/egg/activate()
|
||||
var/obj/item/weapon/reagent_containers/food/snacks/egg/egg = new(host.loc)
|
||||
egg.reagents.add_reagent("sacid",20)
|
||||
egg.desc += " It smells bad."
|
||||
egg.desc += " It smells bad."
|
||||
|
||||
/obj/item/gland/bloody
|
||||
cooldown_low = 200
|
||||
cooldown_high = 400
|
||||
uses = -1
|
||||
|
||||
/obj/item/gland/bloody/activate()
|
||||
host.adjustBruteLoss(15)
|
||||
|
||||
host.visible_message("<span class='danger'>[host] skin erupts with blood!</span>",\
|
||||
"<span class='userdanger'>Your skin erupts with blood! It hurts!</span>")
|
||||
|
||||
for(var/turf/T in oview(3,host)) //Make this respect walls and such
|
||||
T.add_blood_floor(host)
|
||||
for(var/mob/living/carbon/human/H in oview(3,host)) //Blood decals for simple animals would be neat. aka Carp with blood on it.
|
||||
if(H.wear_suit)
|
||||
H.wear_suit.add_blood(host)
|
||||
H.update_inv_wear_suit(0)
|
||||
else if(H.w_uniform)
|
||||
H.w_uniform.add_blood(host)
|
||||
H.update_inv_w_uniform(0)
|
||||
|
||||
/obj/item/gland/bodysnatch
|
||||
cooldown_low = 600
|
||||
cooldown_high = 600
|
||||
uses = 1
|
||||
|
||||
/obj/item/gland/bodysnatch/activate()
|
||||
//spawn cocoon with clone greytide snpc inside
|
||||
var/obj/effect/cocoon/abductor/C = new (get_turf(host))
|
||||
C.Copy(host)
|
||||
C.Start()
|
||||
host.gib()
|
||||
return
|
||||
|
||||
/obj/effect/cocoon/abductor
|
||||
name = "Slimy cocoon"
|
||||
desc = "You can see something moving inside"
|
||||
icon = 'icons/effects/effects.dmi'
|
||||
icon_state = "cocoon_large3"
|
||||
color = rgb(10,120,10)
|
||||
density = 1
|
||||
var/hatch_time = 0
|
||||
|
||||
/obj/effect/cocoon/abductor/proc/Copy(var/mob/living/carbon/human/H)
|
||||
var/mob/living/carbon/human/interactive/greytide/clone = new(src)
|
||||
hardset_dna(clone,H.dna.uni_identity,H.dna.struc_enzymes,H.real_name, H.dna.blood_type, H.dna.species.type, H.dna.mutant_color)
|
||||
|
||||
//There's no define for this / get all items ?
|
||||
var/list/slots = list(slot_back,slot_w_uniform,slot_wear_suit,\
|
||||
slot_wear_mask,slot_head,slot_shoes,slot_gloves,slot_ears,\
|
||||
slot_glasses,slot_belt,slot_s_store,slot_l_store,slot_r_store,slot_wear_id)
|
||||
|
||||
for(var/slot in slots)
|
||||
var/obj/item/I = H.get_item_by_slot(slot)
|
||||
if(I)
|
||||
clone.equip_to_slot_if_possible(I,slot)
|
||||
|
||||
/obj/effect/cocoon/abductor/proc/Start()
|
||||
hatch_time = world.time + 600
|
||||
SSobj.processing |= src
|
||||
|
||||
/obj/effect/cocoon/abductor/process()
|
||||
if(world.time > hatch_time)
|
||||
SSobj.processing.Remove(src)
|
||||
for(var/mob/M in contents)
|
||||
src.visible_message("<span class='warning'>[src] hatches!</span>")
|
||||
M.loc = src.loc
|
||||
qdel(src)
|
||||
|
||||
/obj/item/gland/plasma
|
||||
cooldown_low = 1200
|
||||
cooldown_high = 2400
|
||||
uses = 1
|
||||
|
||||
/obj/item/gland/plasma/activate()
|
||||
host << "<span class='warning'>You feel bloated.</span>"
|
||||
sleep(150)
|
||||
host << "<span class='userdanger'>Your stomach feels about to explode!</span>"
|
||||
sleep(50)
|
||||
host.visible_message("<span class='danger'>[host] explodes in a cloud of plasma!</span>")
|
||||
var/turf/simulated/T = get_turf(host)
|
||||
if(istype(T))
|
||||
T.atmos_spawn_air(SPAWN_TOXINS|SPAWN_20C,300)
|
||||
host.gib()
|
||||
return
|
||||
@@ -0,0 +1,142 @@
|
||||
/obj/machinery/computer/camera_advanced/abductor
|
||||
name = "Human Observation Console"
|
||||
var/team = 0
|
||||
networks = list("SS13","Abductor")
|
||||
off_action = new/datum/action/camera_off/abductor //specific datum
|
||||
var/datum/action/teleport_in/tele_in_action = new
|
||||
var/datum/action/teleport_out/tele_out_action = new
|
||||
var/datum/action/teleport_self/tele_self_action = new
|
||||
var/datum/action/vest_mode_swap/vest_mode_action = new
|
||||
var/datum/action/vest_disguise_swap/vest_disguise_action = new
|
||||
var/obj/machinery/abductor/console/console
|
||||
|
||||
icon = 'icons/obj/abductor.dmi'
|
||||
icon_state = "camera"
|
||||
|
||||
/obj/machinery/computer/camera_advanced/abductor/CreateEye()
|
||||
..()
|
||||
eyeobj.visible_icon = 1
|
||||
eyeobj.icon = 'icons/obj/abductor.dmi'
|
||||
eyeobj.icon_state = "camera_target"
|
||||
|
||||
/obj/machinery/computer/camera_advanced/abductor/GrantActions(var/mob/living/carbon/user)
|
||||
off_action.target = user
|
||||
off_action.Grant(user)
|
||||
|
||||
jump_action.target = user
|
||||
jump_action.Grant(user)
|
||||
//TODO : add null checks
|
||||
tele_in_action.target = console.pad
|
||||
tele_in_action.Grant(user)
|
||||
|
||||
tele_out_action.target = console
|
||||
tele_out_action.Grant(user)
|
||||
|
||||
tele_self_action.target = console.pad
|
||||
tele_self_action.Grant(user)
|
||||
|
||||
vest_mode_action.target = console
|
||||
vest_mode_action.Grant(user)
|
||||
|
||||
vest_disguise_action.target = console
|
||||
vest_disguise_action.Grant(user)
|
||||
|
||||
/obj/machinery/computer/camera_advanced/abductor/proc/IsAbductor(var/mob/living/carbon/human/H)
|
||||
return H.dna.species.id == "abductor"
|
||||
|
||||
/obj/machinery/computer/camera_advanced/abductor/proc/IsScientist(var/mob/living/carbon/human/H)
|
||||
var/datum/species/abductor/S = H.dna.species
|
||||
return S.scientist
|
||||
|
||||
/obj/machinery/computer/camera_advanced/abductor/attack_hand(var/mob/user as mob)
|
||||
if(!iscarbon(user) || !IsAbductor(user))
|
||||
return
|
||||
return ..()
|
||||
|
||||
/datum/action/camera_off/abductor/Activate()
|
||||
if(!target || !iscarbon(target))
|
||||
return
|
||||
var/mob/living/carbon/C = target
|
||||
var/mob/camera/aiEye/remote/remote_eye = C.remote_control
|
||||
var/obj/machinery/computer/camera_advanced/abductor/origin = remote_eye.origin
|
||||
C.remote_view = 0
|
||||
origin.current_user = null
|
||||
origin.jump_action.Remove(C)
|
||||
origin.tele_in_action.Remove(C)
|
||||
origin.tele_out_action.Remove(C)
|
||||
origin.tele_self_action.Remove(C)
|
||||
origin.vest_mode_action.Remove(C)
|
||||
origin.vest_disguise_action.Remove(C)
|
||||
if(C.client)
|
||||
C.client.perspective = MOB_PERSPECTIVE
|
||||
C.client.eye = src
|
||||
C.client.images -= remote_eye.user_image
|
||||
C.remote_control = null
|
||||
C.unset_machine()
|
||||
src.Remove(C)
|
||||
|
||||
|
||||
/datum/action/teleport_in
|
||||
name = "Send To"
|
||||
action_type = AB_INNATE
|
||||
button_icon_state = "beam_down"
|
||||
|
||||
/datum/action/teleport_in/Activate()
|
||||
if(!target || !iscarbon(owner))
|
||||
return
|
||||
var/mob/living/carbon/human/C = owner
|
||||
var/mob/camera/aiEye/remote/remote_eye = C.remote_control
|
||||
var/obj/machinery/abductor/pad/P = target
|
||||
|
||||
if(cameranet.checkTurfVis(remote_eye.loc))
|
||||
P.PadToLoc(remote_eye.loc)
|
||||
|
||||
/datum/action/teleport_out
|
||||
name = "Retrieve"
|
||||
action_type = AB_INNATE
|
||||
button_icon_state = "beam_up"
|
||||
|
||||
/datum/action/teleport_out/Activate()
|
||||
if(!target || !iscarbon(owner))
|
||||
return
|
||||
var/obj/machinery/abductor/console/console = target
|
||||
|
||||
console.TeleporterRetrieve()
|
||||
|
||||
/datum/action/teleport_self
|
||||
name = "Send Self"
|
||||
action_type = AB_INNATE
|
||||
button_icon_state = "beam_down"
|
||||
|
||||
/datum/action/teleport_self/Activate()
|
||||
if(!target || !iscarbon(owner))
|
||||
return
|
||||
var/mob/living/carbon/human/C = owner
|
||||
var/mob/camera/aiEye/remote/remote_eye = C.remote_control
|
||||
var/obj/machinery/abductor/pad/P = target
|
||||
|
||||
if(cameranet.checkTurfVis(remote_eye.loc))
|
||||
P.MobToLoc(remote_eye.loc,C)
|
||||
|
||||
/datum/action/vest_mode_swap
|
||||
name = "Switch Vest Mode"
|
||||
action_type = AB_INNATE
|
||||
button_icon_state = "vest_mode"
|
||||
|
||||
/datum/action/vest_mode_swap/Activate()
|
||||
if(!target || !iscarbon(owner))
|
||||
return
|
||||
var/obj/machinery/abductor/console/console = target
|
||||
console.FlipVest()
|
||||
|
||||
|
||||
/datum/action/vest_disguise_swap
|
||||
name = "Switch Vest Disguise"
|
||||
action_type = AB_INNATE
|
||||
button_icon_state = "vest_disguise"
|
||||
|
||||
/datum/action/vest_disguise_swap/Activate()
|
||||
if(!target || !iscarbon(owner))
|
||||
return
|
||||
var/obj/machinery/abductor/console/console = target
|
||||
console.SelectDisguise(remote=1)
|
||||
@@ -0,0 +1,184 @@
|
||||
//Common
|
||||
|
||||
/obj/machinery/abductor
|
||||
var/team = 0
|
||||
|
||||
/obj/machinery/abductor/proc/IsAbductor(var/mob/living/carbon/human/H)
|
||||
if(!H.dna)
|
||||
return 0
|
||||
return H.dna.species.id == "abductor"
|
||||
|
||||
/obj/machinery/abductor/proc/IsAgent(var/mob/living/carbon/human/H)
|
||||
if(H.dna.species.id == "abductor")
|
||||
var/datum/species/abductor/S = H.dna.species
|
||||
return S.agent
|
||||
return 0
|
||||
|
||||
/obj/machinery/abductor/proc/IsScientist(var/mob/living/carbon/human/H)
|
||||
if(H.dna.species.id == "abductor")
|
||||
var/datum/species/abductor/S = H.dna.species
|
||||
return S.scientist
|
||||
return 0
|
||||
|
||||
//Console
|
||||
|
||||
/obj/machinery/abductor/console
|
||||
name = "Abductor console"
|
||||
desc = "Ship command center."
|
||||
icon = 'icons/obj/abductor.dmi'
|
||||
icon_state = "console"
|
||||
density = 1
|
||||
anchored = 1.0
|
||||
var/obj/item/device/abductor/gizmo/gizmo
|
||||
var/obj/item/clothing/suit/armor/abductor/vest/vest
|
||||
var/obj/machinery/abductor/experiment/experiment
|
||||
var/obj/machinery/abductor/pad/pad
|
||||
var/obj/machinery/computer/camera_advanced/abductor/camera
|
||||
var/list/datum/icon_snapshot/disguises = list()
|
||||
|
||||
/obj/machinery/abductor/console/attack_hand(var/mob/user as mob)
|
||||
if(..())
|
||||
return
|
||||
if(!IsAbductor(user))
|
||||
user << "<span class='warning'>You start mashing alien buttons at random!</span>"
|
||||
if(do_after(user,100))
|
||||
TeleporterSend()
|
||||
return
|
||||
user.set_machine(src)
|
||||
var/dat = ""
|
||||
dat += "<H3> Abductsoft 3000 </H3>"
|
||||
|
||||
if(experiment != null)
|
||||
var/points = experiment.points
|
||||
dat += "Collected Samples : [points] <br>"
|
||||
else
|
||||
dat += "<span class='bad'>NO EXPERIMENT MACHINE DETECTED</span> <br>"
|
||||
|
||||
if(pad!=null)
|
||||
dat += "<span class='bad'>Emergency Teleporter System.</span>"
|
||||
dat += "<span class='bad'>Consider using primary observation console first.</span>"
|
||||
dat += "<a href='?src=\ref[src];teleporter_send=1'>Activate Teleporter</A><br>"
|
||||
dat += "<a href='?src=\ref[src];teleporter_set=1'>Set Teleporter</A><br>"
|
||||
if(gizmo!=null && gizmo.marked!=null)
|
||||
dat += "<a href='?src=\ref[src];teleporter_retrieve=1'>Retrieve Mark</A><br>"
|
||||
else
|
||||
dat += "<span class='linkOff'>Retrieve Mark</span><br>"
|
||||
else
|
||||
dat += "<span class='bad'>NO TELEPAD DETECTED</span></br>"
|
||||
|
||||
if(vest!=null)
|
||||
dat += "<h4> Agent Vest Mode </h4><br>"
|
||||
var/mode = vest.mode
|
||||
if(mode == VEST_STEALTH)
|
||||
dat += "<a href='?src=\ref[src];flip_vest=1'>Combat</A>"
|
||||
dat += "<span class='linkOff'>Stealth</span>"
|
||||
else
|
||||
dat += "<span class='linkOff'>Combat</span>"
|
||||
dat += "<a href='?src=\ref[src];flip_vest=1'>Stealth</A>"
|
||||
|
||||
dat+="<br>"
|
||||
dat += "<a href='?src=\ref[src];select_disguise=1'>Select Agent Vest Disguise</a><br>"
|
||||
else
|
||||
dat += "<span class='bad'>NO AGENT VEST DETECTED</span>"
|
||||
var/datum/browser/popup = new(user, "computer", "Abductor Console", 400, 500)
|
||||
popup.set_content(dat)
|
||||
popup.set_title_image(user.browse_rsc_icon(src.icon, src.icon_state))
|
||||
popup.open()
|
||||
return
|
||||
|
||||
/obj/machinery/abductor/console/Topic(href, href_list)
|
||||
if(..())
|
||||
return
|
||||
|
||||
usr.set_machine(src)
|
||||
if(href_list["teleporter_set"])
|
||||
TeleporterSet()
|
||||
else if(href_list["teleporter_send"])
|
||||
TeleporterSend()
|
||||
else if(href_list["teleporter_retrieve"])
|
||||
TeleporterRetrieve()
|
||||
else if(href_list["flip_vest"])
|
||||
FlipVest()
|
||||
else if(href_list["select_disguise"])
|
||||
SelectDisguise()
|
||||
src.updateUsrDialog()
|
||||
|
||||
/obj/machinery/abductor/console/proc/TeleporterSet()
|
||||
var/A = null
|
||||
A = input("Select area to teleport to", "Teleport", A) in teleportlocs
|
||||
if(pad!=null && in_range(usr,src))
|
||||
pad.teleport_target = teleportlocs[A]
|
||||
return
|
||||
|
||||
/obj/machinery/abductor/console/proc/TeleporterRetrieve()
|
||||
if(gizmo!=null && pad!=null && gizmo.marked)
|
||||
pad.Retrieve(gizmo.marked)
|
||||
return
|
||||
|
||||
/obj/machinery/abductor/console/proc/TeleporterSend()
|
||||
if(pad!=null)
|
||||
pad.Send()
|
||||
return
|
||||
|
||||
/obj/machinery/abductor/console/proc/FlipVest()
|
||||
if(vest!=null)
|
||||
vest.flip_mode()
|
||||
return
|
||||
|
||||
/obj/machinery/abductor/console/proc/SelectDisguise(var/remote=0)
|
||||
var/list/entries = list()
|
||||
var/tempname
|
||||
var/datum/icon_snapshot/temp
|
||||
for(var/i = 1; i <= disguises.len; i++)
|
||||
temp = disguises[i]
|
||||
tempname = temp.name
|
||||
entries["[tempname]"] = disguises[i]
|
||||
var/entry_name = input( "Choose Disguise", "Disguise") in entries
|
||||
var/datum/icon_snapshot/chosen = entries[entry_name]
|
||||
if(chosen && (remote || in_range(usr,src)))
|
||||
vest.SetDisguise(chosen)
|
||||
return
|
||||
|
||||
/obj/machinery/abductor/console/proc/Initialize()
|
||||
|
||||
for(var/obj/machinery/abductor/pad/p in machines)
|
||||
if(p.team == team)
|
||||
pad = p
|
||||
break
|
||||
|
||||
for(var/obj/machinery/abductor/experiment/e in machines)
|
||||
if(e.team == team)
|
||||
experiment = e
|
||||
e.console = src
|
||||
|
||||
for(var/obj/machinery/computer/camera_advanced/abductor/c in machines)
|
||||
if(c.team == team)
|
||||
camera = c
|
||||
c.console = src
|
||||
|
||||
/obj/machinery/abductor/console/proc/AddSnapshot(var/mob/living/carbon/human/target)
|
||||
var/datum/icon_snapshot/entry = new
|
||||
entry.name = target.name
|
||||
entry.icon = target.icon
|
||||
entry.icon_state = target.icon_state
|
||||
entry.overlays = target.get_overlays_copy(list(L_HAND_LAYER,R_HAND_LAYER))
|
||||
for(var/i=1,i<=disguises.len,i++)
|
||||
var/datum/icon_snapshot/temp = disguises[i]
|
||||
if(temp.name == entry.name)
|
||||
disguises[i] = entry
|
||||
return
|
||||
disguises.Add(entry)
|
||||
return
|
||||
|
||||
/obj/machinery/abductor/console/attackby(O as obj, user as mob, params)
|
||||
if(istype(O, /obj/item/device/abductor/gizmo))
|
||||
var/obj/item/device/abductor/gizmo/G = O
|
||||
user << "<span class='notice'>You link the tool to the console.</span>"
|
||||
gizmo = G
|
||||
G.console = src
|
||||
else if(istype(O, /obj/item/clothing/suit/armor/abductor/vest))
|
||||
var/obj/item/clothing/suit/armor/abductor/vest/V = O
|
||||
user << "<span class='notice'>You link the vest to the console.</span>"
|
||||
vest = V
|
||||
else
|
||||
..()
|
||||
@@ -0,0 +1,82 @@
|
||||
/obj/machinery/abductor/gland_dispenser
|
||||
name = "Replacement Organ Storage"
|
||||
desc = "A tank filled with replacement organs"
|
||||
icon = 'icons/obj/abductor.dmi'
|
||||
icon_state = "dispenser"
|
||||
density = 1
|
||||
anchored = 1
|
||||
var/list/gland_types
|
||||
var/list/gland_colors
|
||||
var/list/amounts
|
||||
|
||||
/obj/machinery/abductor/gland_dispenser/proc/random_color()
|
||||
//TODO : replace with presets or spectrum
|
||||
return rgb(rand(0,255),rand(0,255),rand(0,255))
|
||||
|
||||
/obj/machinery/abductor/gland_dispenser/New()
|
||||
gland_types = typesof(/obj/item/gland) - /obj/item/gland
|
||||
gland_types = shuffle(gland_types)
|
||||
gland_colors = new/list(gland_types.len)
|
||||
amounts = new/list(gland_types.len)
|
||||
for(var/i=1,i<=gland_types.len,i++)
|
||||
gland_colors[i] = random_color()
|
||||
amounts[i] = rand(1,5)
|
||||
|
||||
/obj/machinery/abductor/gland_dispenser/attack_hand(var/mob/user as mob)
|
||||
if(..())
|
||||
return
|
||||
if(!IsAbductor(user))
|
||||
return
|
||||
user.set_machine(src)
|
||||
var/box_css = {"
|
||||
<style>
|
||||
a.box.gland {
|
||||
float: left;
|
||||
width: 20px;
|
||||
height: 20px;
|
||||
margin: 5px;
|
||||
border-width: 1px;
|
||||
border-style: solid;
|
||||
border-color: rgba(0,0,0,.2);
|
||||
text-align: center;
|
||||
}
|
||||
</style>"}
|
||||
var/dat = ""
|
||||
var/item_count = 0
|
||||
for(var/i=1,i<=gland_colors.len,i++)
|
||||
item_count++
|
||||
var/g_color = gland_colors[i]
|
||||
var/amount = amounts[i]
|
||||
dat += "<a class='box gland' style='background-color:[g_color]' href='?src=\ref[src];dispense=[i]'>[amount]</a>"
|
||||
if(item_count == 3) // Three boxes per line
|
||||
dat +="</br></br>"
|
||||
item_count = 0
|
||||
var/datum/browser/popup = new(user, "glands", "Gland Dispenser", 200, 200)
|
||||
popup.add_head_content(box_css)
|
||||
popup.set_content(dat)
|
||||
popup.set_title_image(user.browse_rsc_icon(src.icon, src.icon_state))
|
||||
popup.open()
|
||||
return
|
||||
|
||||
/obj/machinery/abductor/gland_dispenser/attackby(obj/item/weapon/W, mob/user, params)
|
||||
if(istype(W, /obj/item/gland))
|
||||
user.drop_item()
|
||||
W.loc = src
|
||||
for(var/i=1,i<=gland_colors.len,i++)
|
||||
if(gland_types[i] == W.type)
|
||||
amounts[i]++
|
||||
|
||||
/obj/machinery/abductor/gland_dispenser/Topic(href, href_list)
|
||||
if(..())
|
||||
return
|
||||
usr.set_machine(src)
|
||||
|
||||
if(href_list["dispense"])
|
||||
Dispense(text2num(href_list["dispense"]))
|
||||
src.updateUsrDialog()
|
||||
|
||||
/obj/machinery/abductor/gland_dispenser/proc/Dispense(var/count)
|
||||
if(amounts[count]>0)
|
||||
amounts[count]--
|
||||
var/T = gland_types[count]
|
||||
new T(get_turf(src))
|
||||
@@ -0,0 +1,204 @@
|
||||
/obj/machinery/abductor/experiment
|
||||
name = "Experimental machinery"
|
||||
desc = "A human-sized coffin sporting wide array of automatic surgery tools"
|
||||
icon = 'icons/obj/abductor.dmi'
|
||||
icon_state = "experiment-open"
|
||||
density = 0
|
||||
anchored = 1
|
||||
state_open = 1
|
||||
var/points = 0
|
||||
var/list/history = new
|
||||
var/flash = " - || - "
|
||||
var/obj/machinery/abductor/console/console
|
||||
|
||||
/obj/machinery/abductor/experiment/MouseDrop_T(mob/target, mob/user)
|
||||
if(user.stat || user.lying || !Adjacent(user) || !target.Adjacent(user) || !ishuman(target))
|
||||
return
|
||||
if(IsAbductor(target))
|
||||
return
|
||||
close_machine(target)
|
||||
|
||||
/obj/machinery/abductor/experiment/allow_drop()
|
||||
return 0
|
||||
|
||||
/obj/machinery/abductor/experiment/attack_hand(mob/user)
|
||||
if(..())
|
||||
return
|
||||
|
||||
experimentUI(user)
|
||||
|
||||
/obj/machinery/abductor/experiment/open_machine()
|
||||
if(!state_open && !panel_open)
|
||||
..()
|
||||
|
||||
/obj/machinery/abductor/experiment/close_machine(mob/target)
|
||||
for(var/mob/living/carbon/C in loc)
|
||||
if(IsAbductor(C))
|
||||
return
|
||||
if(state_open && !panel_open)
|
||||
..(target)
|
||||
|
||||
/obj/machinery/abductor/experiment/proc/dissection_icon(var/mob/living/carbon/human/H)
|
||||
var/icon/photo = null
|
||||
var/g = (H.gender == FEMALE) ? "f" : "m"
|
||||
if(!config.mutant_races || H.dna.species.use_skintones)
|
||||
photo = icon("icon" = 'icons/mob/human.dmi', "icon_state" = "[H.skin_tone]_[g]_s")
|
||||
else
|
||||
photo = icon("icon" = 'icons/mob/human.dmi', "icon_state" = "[H.dna.species.id]_[g]_s")
|
||||
photo.Blend("#[H.dna.mutant_color]", ICON_MULTIPLY)
|
||||
|
||||
var/icon/eyes_s
|
||||
if(EYECOLOR in H.dna.species.specflags)
|
||||
eyes_s = icon("icon" = 'icons/mob/human_face.dmi', "icon_state" = "[H.dna.species.eyes]_s")
|
||||
eyes_s.Blend("#[H.eye_color]", ICON_MULTIPLY)
|
||||
|
||||
var/datum/sprite_accessory/S
|
||||
S = hair_styles_list[H.hair_style]
|
||||
if(S && (HAIR in H.dna.species.specflags))
|
||||
var/icon/hair_s = icon("icon" = S.icon, "icon_state" = "[S.icon_state]_s")
|
||||
hair_s.Blend("#[H.hair_color]", ICON_MULTIPLY)
|
||||
eyes_s.Blend(hair_s, ICON_OVERLAY)
|
||||
|
||||
S = facial_hair_styles_list[H.facial_hair_style]
|
||||
if(S && (FACEHAIR in H.dna.species.specflags))
|
||||
var/icon/facial_s = icon("icon" = S.icon, "icon_state" = "[S.icon_state]_s")
|
||||
facial_s.Blend("#[H.facial_hair_color]", ICON_MULTIPLY)
|
||||
eyes_s.Blend(facial_s, ICON_OVERLAY)
|
||||
|
||||
if(eyes_s)
|
||||
photo.Blend(eyes_s, ICON_OVERLAY)
|
||||
|
||||
var/icon/splat = icon("icon" = 'icons/mob/dam_human.dmi',"icon_state" = "chest30")
|
||||
photo.Blend(splat,ICON_OVERLAY)
|
||||
|
||||
return photo
|
||||
|
||||
/obj/machinery/abductor/experiment/proc/experimentUI(mob/user)
|
||||
var/dat
|
||||
dat += "<h3> Experiment </h3>"
|
||||
if(occupant)
|
||||
var/obj/item/weapon/photo/P = new
|
||||
P.photocreate(null, icon(dissection_icon(occupant), dir = SOUTH))
|
||||
user << browse_rsc(P.img, "dissection_img")
|
||||
dat += "<table><tr><td>"
|
||||
dat += "<img src=dissection_img height=80 width=80>" //Avert your eyes
|
||||
dat += "</td><td>"
|
||||
dat += "<a href='?src=\ref[src];experiment=1'>Probe</a><br>"
|
||||
dat += "<a href='?src=\ref[src];experiment=2'>Dissect</a><br>"
|
||||
dat += "<a href='?src=\ref[src];experiment=3'>Analyze</a><br>"
|
||||
dat += "</td></tr></table>"
|
||||
else
|
||||
dat += "<span class='linkOff'> Experiment </span>"
|
||||
|
||||
if(!occupant)
|
||||
dat += "<h3>Machine Unoccupied</h3>"
|
||||
else
|
||||
dat += "<h3>Subject Status : </h3>"
|
||||
dat += "[occupant.name] => "
|
||||
switch(occupant.stat)
|
||||
if(0)
|
||||
dat += "<span class='good'>Conscious</span>"
|
||||
if(1)
|
||||
dat += "<span class='average'>Unconscious</span>"
|
||||
else
|
||||
dat += "<span class='bad'>DEAD</span>"
|
||||
dat += "<br>"
|
||||
dat += "[flash]"
|
||||
dat += "<br>"
|
||||
dat += "<a href='?src=\ref[src];refresh=1'>Scan</a>"
|
||||
dat += "<a href='?src=\ref[src];[state_open ? "close=1'>Close</a>" : "open=1'>Open</a>"]"
|
||||
var/datum/browser/popup = new(user, "experiment", "Probing Console", 300, 300)
|
||||
popup.set_title_image(user.browse_rsc_icon(icon, icon_state))
|
||||
popup.set_content(dat)
|
||||
popup.open()
|
||||
|
||||
/obj/machinery/abductor/experiment/Topic(href, href_list)
|
||||
if(..() || usr == occupant)
|
||||
return
|
||||
usr.set_machine(src)
|
||||
if(href_list["refresh"])
|
||||
updateUsrDialog()
|
||||
return
|
||||
if(href_list["open"])
|
||||
open_machine()
|
||||
return
|
||||
if(href_list["close"])
|
||||
close_machine()
|
||||
return
|
||||
if(occupant && occupant.stat != DEAD)
|
||||
if(href_list["experiment"])
|
||||
flash = Experiment(occupant,href_list["experiment"])
|
||||
updateUsrDialog()
|
||||
add_fingerprint(usr)
|
||||
|
||||
/obj/machinery/abductor/experiment/proc/Experiment(var/mob/occupant,var/type)
|
||||
var/mob/living/carbon/human/H = occupant
|
||||
var/point_reward = 0
|
||||
if(H in history)
|
||||
return "<span class='bad'>Specimen already in the database</span>"
|
||||
if(H.stat == DEAD)
|
||||
say("Specimen deceased - please provide fresh sample.")
|
||||
return "<span class='bad'>Specimen Deceased</span>"
|
||||
var/obj/item/gland/GlandTest = locate() in H
|
||||
if(!GlandTest)
|
||||
say("Experimental dissection not detected!")
|
||||
return "<span class='bad'>No glands detected!</span>"
|
||||
if(H.mind != null || H.ckey != null)
|
||||
history += H
|
||||
say("Processing Specimen...")
|
||||
sleep(5)
|
||||
switch(text2num(type))
|
||||
if(1)
|
||||
H << "<span class='warning'>You feel violated.</span>"
|
||||
if(2)
|
||||
H << "<span class='warning'>You feel being sliced and put back together.</span>"
|
||||
if(3)
|
||||
H << "<span class='warning'>You feel under intense scrutiny.</span>"
|
||||
sleep(5)
|
||||
H << "<span class='warning'>Your mind snaps!</span>"
|
||||
var/objtype = pick(typesof(/datum/objective/abductee/) - /datum/objective/abductee/)
|
||||
var/datum/objective/abductee/O = new objtype()
|
||||
H.mind.objectives += O
|
||||
var/obj_count = 1
|
||||
H << "<span class='notice'>Your current objectives:</span>"
|
||||
for(var/datum/objective/objective in H.mind.objectives)
|
||||
H << "<B>Objective #[obj_count]</B>: [objective.explanation_text]"
|
||||
obj_count++
|
||||
|
||||
for(var/obj/item/gland/G in H)
|
||||
G.Start()
|
||||
point_reward++
|
||||
if(point_reward > 0)
|
||||
open_machine()
|
||||
SendBack(H)
|
||||
playsound(src.loc, 'sound/machines/ding.ogg', 50, 1)
|
||||
points += point_reward
|
||||
return "<span class='good'>Experiment Successfull! [point_reward] new data-points collected.</span>"
|
||||
else
|
||||
playsound(src.loc, 'sound/machines/buzz-sigh.ogg', 50, 1)
|
||||
return "<span class='bad'>Experiment Failed! No replacement organ detected.</span>"
|
||||
else
|
||||
say("Brain Activity Nonexistant - Disposing Sample...")
|
||||
open_machine()
|
||||
SendBack(H)
|
||||
return "<span class='bad'>Specimen Braindead - Disposed</span>"
|
||||
return "<span class='bad'>ERROR</span>"
|
||||
|
||||
|
||||
/obj/machinery/abductor/experiment/proc/SendBack(var/mob/living/carbon/human/H)
|
||||
H.Sleeping(8)
|
||||
var/area/A
|
||||
if(console && console.pad && console.pad.teleport_target)
|
||||
A = console.pad.teleport_target
|
||||
else
|
||||
A = teleportlocs[pick(teleportlocs)]
|
||||
TeleportToArea(H,A)
|
||||
|
||||
/obj/machinery/abductor/experiment/update_icon()
|
||||
if(state_open)
|
||||
icon_state = "experiment-open"
|
||||
else
|
||||
icon_state = "experiment"
|
||||
|
||||
/obj/machinery/abductor/experiment/say_quote(text)
|
||||
return "beeps, \"[text]\""
|
||||
@@ -0,0 +1,86 @@
|
||||
/obj/machinery/abductor/pad
|
||||
name = "Alien Telepad"
|
||||
desc = "Use this to transport to and from human habitat"
|
||||
icon = 'icons/obj/abductor.dmi'
|
||||
icon_state = "alien-pad-idle"
|
||||
anchored = 1
|
||||
var/area/teleport_target
|
||||
|
||||
/obj/machinery/abductor/proc/TeleportToArea(var/mob/living/target,var/area/thearea)
|
||||
var/list/L = list()
|
||||
for(var/turf/T in get_area_turfs(thearea.type))
|
||||
if(!T.density)
|
||||
var/clear = 1
|
||||
for(var/obj/O in T)
|
||||
if(O.density)
|
||||
clear = 0
|
||||
break
|
||||
if(clear)
|
||||
L+=T
|
||||
if(!L.len)
|
||||
return
|
||||
|
||||
if(target && target.buckled)
|
||||
target.buckled.unbuckle_mob()
|
||||
|
||||
var/list/tempL = L
|
||||
var/attempt = null
|
||||
var/success = 0
|
||||
while(tempL.len)
|
||||
attempt = pick(tempL)
|
||||
target.Move(attempt)
|
||||
if(get_turf(target) == attempt)
|
||||
success = 1
|
||||
break
|
||||
else
|
||||
tempL.Remove(attempt)
|
||||
if(!success)
|
||||
target.loc = pick(L)
|
||||
|
||||
/obj/machinery/abductor/pad/proc/Warp(var/mob/living/target)
|
||||
target.Move(src.loc)
|
||||
|
||||
/obj/machinery/abductor/pad/proc/Send()
|
||||
if(teleport_target == null)
|
||||
teleport_target = teleportlocs[pick(teleportlocs)]
|
||||
flick("alien-pad", src)
|
||||
for(var/mob/living/target in src.loc)
|
||||
TeleportToArea(target,teleport_target)
|
||||
spawn(0)
|
||||
anim(target.loc,target,'icons/mob/mob.dmi',,"uncloak",,target.dir)
|
||||
|
||||
/obj/machinery/abductor/pad/proc/Retrieve(var/mob/living/carbon/human/target)
|
||||
flick("alien-pad", src)
|
||||
spawn(0)
|
||||
anim(target.loc,target,'icons/mob/mob.dmi',,"uncloak",,target.dir)
|
||||
Warp(target)
|
||||
|
||||
/obj/machinery/abductor/pad/proc/MobToLoc(var/place,var/mob/living/target)
|
||||
var/obj/effect/teleport_abductor/F = new(place)
|
||||
var/datum/effect/effect/system/spark_spread/S = new
|
||||
S.set_up(10,0,place)
|
||||
S.start()
|
||||
sleep(80)
|
||||
qdel(F)
|
||||
flick("alien-pad", src)
|
||||
target.forceMove(place)
|
||||
anim(target.loc,target,'icons/mob/mob.dmi',,"uncloak",,target.dir)
|
||||
|
||||
/obj/machinery/abductor/pad/proc/PadToLoc(var/place)
|
||||
var/obj/effect/teleport_abductor/F = new(place)
|
||||
var/datum/effect/effect/system/spark_spread/S = new
|
||||
S.set_up(10,0,place)
|
||||
S.start()
|
||||
sleep(80)
|
||||
qdel(F)
|
||||
flick("alien-pad", src)
|
||||
for(var/mob/living/target in src.loc)
|
||||
target.forceMove(place)
|
||||
spawn(0)
|
||||
anim(target.loc,target,'icons/mob/mob.dmi',,"uncloak",,target.dir)
|
||||
|
||||
|
||||
/obj/effect/teleport_abductor
|
||||
name = "Huh"
|
||||
icon = 'icons/obj/abductor.dmi'
|
||||
icon_state = "teleport"
|
||||
@@ -15,6 +15,7 @@ var/list/blob_nodes = list()
|
||||
required_enemies = 1
|
||||
recommended_enemies = 1
|
||||
|
||||
round_ends_with_antag_death = 1
|
||||
restricted_jobs = list("Cyborg", "AI")
|
||||
|
||||
var/declared = 0
|
||||
|
||||
@@ -1,8 +1,4 @@
|
||||
/datum/game_mode/blob/check_finished()
|
||||
if(replacementmode && round_converted == 2)
|
||||
return replacementmode.check_finished()
|
||||
if(round_converted)
|
||||
return ..()
|
||||
if(infected_crew.len > burst)//Some blobs have yet to burst
|
||||
return 0
|
||||
if(blobwincount <= blobs.len)//Blob took over
|
||||
@@ -14,11 +10,6 @@
|
||||
SSshuttle.emergency.mode = SHUTTLE_DOCKED
|
||||
SSshuttle.emergency.timer = world.time
|
||||
priority_announce("Hostile enviroment resolved. You have 3 minutes to board the Emergency Shuttle.", null, 'sound/AI/shuttledock.ogg', "Priority")
|
||||
|
||||
if(config.midround_antag["blob"])
|
||||
round_converted = convert_roundtype()
|
||||
if(!round_converted)
|
||||
return 1
|
||||
return ..()
|
||||
return 1
|
||||
if(station_was_nuked)//Nuke went off
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
/mob/camera/blob/proc/can_buy(var/cost = 15)
|
||||
if(blob_points < cost)
|
||||
src << "<span class='warning'>You cannot afford this.</span>"
|
||||
src << "<span class='warning'>You cannot afford this!</span>"
|
||||
return 0
|
||||
add_points(-cost)
|
||||
return 1
|
||||
|
||||
@@ -88,9 +88,8 @@ var/list/possible_changeling_IDs = list("Alpha","Beta","Gamma","Delta","Epsilon"
|
||||
if(character.client.prefs.be_special & BE_CHANGELING)
|
||||
if(!jobban_isbanned(character.client, "changeling") && !jobban_isbanned(character.client, "Syndicate"))
|
||||
if(age_check(character.client))
|
||||
if(!(character.job in ticker.mode.restricted_jobs))
|
||||
if(!(character.job in restricted_jobs))
|
||||
character.mind.make_Changling()
|
||||
..()
|
||||
|
||||
/datum/game_mode/proc/forge_changeling_objectives(var/datum/mind/changeling)
|
||||
//OBJECTIVES - random traitor objectives. Unique objectives "steal brain" and "identity theft".
|
||||
|
||||
@@ -17,10 +17,10 @@
|
||||
|
||||
var/obj/item/weapon/grab/G = user.get_active_hand()
|
||||
if(!istype(G))
|
||||
user << "<span class='warning'>We must be grabbing a creature in our active hand to absorb them.</span>"
|
||||
user << "<span class='warning'>We must be grabbing a creature in our active hand to absorb them!</span>"
|
||||
return
|
||||
if(G.state <= GRAB_NECK)
|
||||
user << "<span class='warning'>We must have a tighter grip to absorb this creature.</span>"
|
||||
user << "<span class='warning'>We must have a tighter grip to absorb this creature!</span>"
|
||||
return
|
||||
|
||||
var/mob/living/carbon/target = G.affecting
|
||||
@@ -38,12 +38,10 @@
|
||||
if(1)
|
||||
user << "<span class='notice'>This creature is compatible. We must hold still...</span>"
|
||||
if(2)
|
||||
user << "<span class='notice'>We extend a proboscis.</span>"
|
||||
user.visible_message("<span class='warning'>[user] extends a proboscis!</span>")
|
||||
user.visible_message("<span class='warning'>[user] extends a proboscis!</span>", "<span class='notice'>We extend a proboscis.</span>")
|
||||
if(3)
|
||||
user << "<span class='notice'>We stab [target] with the proboscis.</span>"
|
||||
user.visible_message("<span class='danger'>[user] stabs [target] with the proboscis!</span>")
|
||||
target << "<span class='danger'>You feel a sharp stabbing pain!</span>"
|
||||
user.visible_message("<span class='danger'>[user] stabs [target] with the proboscis!</span>", "<span class='notice'>We stab [target] with the proboscis.</span>")
|
||||
target << "<span class='userdanger'>You feel a sharp stabbing pain!</span>"
|
||||
target.take_overall_damage(40)
|
||||
|
||||
feedback_add_details("changeling_powers","A[stage]")
|
||||
@@ -52,9 +50,8 @@
|
||||
changeling.isabsorbing = 0
|
||||
return
|
||||
|
||||
user << "<span class='notice'>We have absorbed [target]!</span>"
|
||||
user.visible_message("<span class='danger'>[user] sucks the fluids from [target]!</span>")
|
||||
target << "<span class='danger'>You have been absorbed by the changeling!</span>"
|
||||
user.visible_message("<span class='danger'>[user] sucks the fluids from [target]!</span>", "<span class='notice'>We have absorbed [target].</span>")
|
||||
target << "<span class='userdanger'>You are absorbed by the changeling!</span>"
|
||||
|
||||
if(!changeling.has_dna(target.dna))
|
||||
changeling.absorb_dna(target, user)
|
||||
|
||||
@@ -23,19 +23,19 @@
|
||||
/obj/effect/proc_holder/changeling/weapon/try_to_sting(var/mob/user, var/mob/target)
|
||||
if(istype(user.l_hand, weapon_type)) //Not the nicest way to do it, but eh
|
||||
qdel(user.l_hand)
|
||||
user.visible_message("<span class='warning'>With a sickening crunch, [user] reforms his [weapon_name_simple] into an arm!</span>", "<span class='notice'>We assimilate the [weapon_name_simple] back into our body.</span>", "<span class='warning>You hear organic matter ripping and tearing!</span>")
|
||||
user.visible_message("<span class='warning'>With a sickening crunch, [user] reforms his [weapon_name_simple] into an arm!</span>", "<span class='notice'>We assimilate the [weapon_name_simple] back into our body.</span>", "<span class='italics>You hear organic matter ripping and tearing!</span>")
|
||||
user.update_inv_l_hand()
|
||||
return
|
||||
if(istype(user.r_hand, weapon_type))
|
||||
qdel(user.r_hand)
|
||||
user.visible_message("<span class='warning'>With a sickening crunch, [user] reforms his [weapon_name_simple] into an arm!</span>", "<span class='notice'>We assimilate the [weapon_name_simple] back into our body.</span>", "<span class='warning>You hear organic matter ripping and tearing!</span>")
|
||||
user.visible_message("<span class='warning'>With a sickening crunch, [user] reforms his [weapon_name_simple] into an arm!</span>", "<span class='notice'>We assimilate the [weapon_name_simple] back into our body.</span>", "<span class='italics>You hear organic matter ripping and tearing!</span>")
|
||||
user.update_inv_r_hand()
|
||||
return
|
||||
..(user, target)
|
||||
|
||||
/obj/effect/proc_holder/changeling/weapon/sting_action(var/mob/user)
|
||||
if(!user.drop_item())
|
||||
user << "The [user.get_active_hand()] is stuck to your hand, you cannot grow a [weapon_name_simple] over it!"
|
||||
user << "<span class='warning'>The [user.get_active_hand()] is stuck to your hand, you cannot grow a [weapon_name_simple] over it!</span>"
|
||||
return
|
||||
var/obj/item/W = new weapon_type(user)
|
||||
user.put_in_hands(W)
|
||||
@@ -64,7 +64,7 @@
|
||||
|
||||
var/mob/living/carbon/human/H = user
|
||||
if(istype(H.wear_suit, suit_type) || istype(H.head, helmet_type))
|
||||
H.visible_message("<span class='warning'>[H] casts off their [suit_name_simple]!</span>", "<span class='warning'>We cast off our [suit_name_simple][genetic_damage > 0 ? ", temporarily weakening our genomes." : "."]</span>", "<span class='warning'>You hear the organic matter ripping and tearing!</span>")
|
||||
H.visible_message("<span class='warning'>[H] casts off their [suit_name_simple]!</span>", "<span class='warning'>We cast off our [suit_name_simple][genetic_damage > 0 ? ", temporarily weakening our genomes." : "."]</span>", "<span class='italics'>You hear the organic matter ripping and tearing!</span>")
|
||||
qdel(H.wear_suit)
|
||||
qdel(H.head)
|
||||
H.update_inv_wear_suit()
|
||||
@@ -133,10 +133,10 @@
|
||||
/obj/item/weapon/melee/arm_blade/New()
|
||||
..()
|
||||
if(ismob(loc))
|
||||
loc.visible_message("<span class='warning'>A grotesque blade forms around [loc.name]\'s arm!</span>", "<span class='warning'>Our arm twists and mutates, transforming it into a deadly blade.</span>", "<span class='warning'>You hear organic matter ripping and tearing!</span>")
|
||||
loc.visible_message("<span class='warning'>A grotesque blade forms around [loc.name]\'s arm!</span>", "<span class='warning'>Our arm twists and mutates, transforming it into a deadly blade.</span>", "<span class='italics'>You hear organic matter ripping and tearing!</span>")
|
||||
|
||||
/obj/item/weapon/melee/arm_blade/dropped(mob/user)
|
||||
user.visible_message("<span class='warning'>With a sickening crunch, [user] reforms his blade into an arm!</span>", "<span class='notice'>We assimilate the blade back into our body.</span>", "<span class='warning>You hear organic matter ripping and tearing!</span>")
|
||||
user.visible_message("<span class='warning'>With a sickening crunch, [user] reforms his blade into an arm!</span>", "<span class='notice'>We assimilate the blade back into our body.</span>", "<span class='italics>You hear organic matter ripping and tearing!</span>")
|
||||
qdel(src)
|
||||
|
||||
/obj/item/weapon/melee/arm_blade/afterattack(atom/target, mob/user, proximity)
|
||||
@@ -157,16 +157,16 @@
|
||||
return
|
||||
|
||||
if(A.hasPower())
|
||||
user << "<span class='notice'>The airlock's motors resist our efforts to force it.</span>"
|
||||
user << "<span class='warning'>The airlock's motors resist our efforts to force it!</span>"
|
||||
return
|
||||
|
||||
else if(A.locked)
|
||||
user << "<span class='notice'>The airlock's bolts prevent it from being forced.</span>"
|
||||
user << "<span class='warning'>The airlock's bolts prevent it from being forced!</span>"
|
||||
return
|
||||
|
||||
else
|
||||
//user.say("Heeeeeeeeeerrre's Johnny!")
|
||||
user.visible_message("<span class='warning'>[user] forces the door to open with \his [src]!</span>", "<span class='warning'>We force the door to open.</span>", "<span class='warning'>You hear a metal screeching sound.</span>")
|
||||
user.visible_message("<span class='warning'>[user] forces the door to open with \his [src]!</span>", "<span class='warning'>We force the door to open.</span>", "<span class='italics'>You hear a metal screeching sound.</span>")
|
||||
A.open(1)
|
||||
|
||||
|
||||
@@ -207,7 +207,7 @@
|
||||
/obj/item/weapon/melee/shield/New()
|
||||
..()
|
||||
if(ismob(loc))
|
||||
loc.visible_message("<span class='warning'>The end of [loc.name]\'s hand inflates rapidly, forming a huge shield-like mass!</span>", "<span class='warning'>We inflate our hand into a strong shield.</span>", "<span class='warning'>You hear organic matter ripping and tearing!</span>")
|
||||
loc.visible_message("<span class='warning'>The end of [loc.name]\'s hand inflates rapidly, forming a huge shield-like mass!</span>", "<span class='warning'>We inflate our hand into a strong shield.</span>", "<span class='italics'>You hear organic matter ripping and tearing!</span>")
|
||||
|
||||
/obj/item/clothing/head/helmet/space/changeling/dropped()
|
||||
qdel(src)
|
||||
@@ -216,7 +216,7 @@
|
||||
if(remaining_uses < 1)
|
||||
if(ishuman(loc))
|
||||
var/mob/living/carbon/human/H = loc
|
||||
H.visible_message("<span class='warning'>With a sickening crunch, [H] reforms his shield into an arm!</span>", "<span class='notice'>We assimilate our shield into our body</span>", "<span class='warning>You hear organic matter ripping and tearing!</span>")
|
||||
H.visible_message("<span class='warning'>With a sickening crunch, [H] reforms his shield into an arm!</span>", "<span class='notice'>We assimilate our shield into our body</span>", "<span class='italics>You hear organic matter ripping and tearing!</span>")
|
||||
H.unEquip(src, 1)
|
||||
qdel(src)
|
||||
return 0
|
||||
@@ -256,7 +256,7 @@
|
||||
/obj/item/clothing/suit/space/changeling/New()
|
||||
..()
|
||||
if(ismob(loc))
|
||||
loc.visible_message("<span class='warning'>[loc.name]\'s flesh rapidly inflates, forming a bloated mass around their body!</span>", "<span class='warning'>We inflate our flesh, creating a spaceproof suit!</span>", "<span class='warning'>You hear organic matter ripping and tearing!</span>")
|
||||
loc.visible_message("<span class='warning'>[loc.name]\'s flesh rapidly inflates, forming a bloated mass around their body!</span>", "<span class='warning'>We inflate our flesh, creating a spaceproof suit!</span>", "<span class='italics'>You hear organic matter ripping and tearing!</span>")
|
||||
SSobj.processing += src
|
||||
|
||||
/obj/item/clothing/suit/space/changeling/dropped()
|
||||
@@ -312,7 +312,7 @@
|
||||
/obj/item/clothing/suit/armor/changeling/New()
|
||||
..()
|
||||
if(ismob(loc))
|
||||
loc.visible_message("<span class='warning'>[loc.name]\'s flesh turns black, quickly transforming into a hard, chitinous mass!</span>", "<span class='warning'>We harden our flesh, creating a suit of armor!</span>", "<span class='warning'>You hear organic matter ripping and tearing!</span>")
|
||||
loc.visible_message("<span class='warning'>[loc.name]\'s flesh turns black, quickly transforming into a hard, chitinous mass!</span>", "<span class='warning'>We harden our flesh, creating a suit of armor!</span>", "<span class='italics'>You hear organic matter ripping and tearing!</span>")
|
||||
|
||||
/obj/item/clothing/suit/armor/changeling/dropped()
|
||||
qdel(src)
|
||||
|
||||
@@ -73,6 +73,6 @@
|
||||
if(character.client.prefs.be_special & BE_CHANGELING)
|
||||
if(!jobban_isbanned(character.client, "changeling") && !jobban_isbanned(character.client, "Syndicate"))
|
||||
if(age_check(character.client))
|
||||
if(!(character.job in ticker.mode.restricted_jobs))
|
||||
if(!(character.job in restricted_jobs))
|
||||
character.mind.make_Changling()
|
||||
..()
|
||||
|
||||
@@ -42,7 +42,7 @@ var/engwords = list("travel", "blood", "join", "hell", "destroy", "technology",
|
||||
return
|
||||
|
||||
if(ishuman(usr) || ismonkey(usr)) //Damage only applies to humans and monkeys, to allow constructs to communicate
|
||||
usr.visible_message("<span class='warning'>[usr.name] starts clawing at his arms like a mad man!")
|
||||
usr.visible_message("<span class='warning'>[usr.name] starts clawing at his arms like a mad man!</span>", "<span class='warning'>You start clawing at his arms like a mad man!</span>")
|
||||
apply_damage(25,BRUTE, "l_arm")
|
||||
apply_damage(25,BRUTE, "r_arm")
|
||||
sleep(50)
|
||||
@@ -55,7 +55,7 @@ var/engwords = list("travel", "blood", "join", "hell", "destroy", "technology",
|
||||
apply_damage(15,BRUTE, "r_arm")
|
||||
if(usr.incapacitated())
|
||||
return
|
||||
usr.visible_message("<span class='warning'>[usr.name] paints strange symbols with their own blood")
|
||||
usr.visible_message("<span class='warning'>[usr.name] paints strange symbols with their own blood.</span>", "<span class='warning'>You paint strange symbols with your own blood.</span>")
|
||||
sleep(20)
|
||||
|
||||
usr.say("O bidai nabora se[pick("'","`")]sma!")
|
||||
@@ -164,9 +164,9 @@ var/engwords = list("travel", "blood", "join", "hell", "destroy", "technology",
|
||||
|
||||
/obj/effect/rune/attack_hand(mob/living/user as mob) // OH GOD this is horrible
|
||||
if(!iscultist(user))
|
||||
user << "<span class='notice'>You can't mouth the arcane scratchings without fumbling over them.</span>"
|
||||
user << "<span class='warning'>You can't mouth the arcane scratchings without fumbling over them!</span>"
|
||||
return
|
||||
var/message = "<span class='notice'>You are unable to speak the words of the rune.</span>"
|
||||
var/message = "<span class='warning'>You are unable to speak the words of the rune!</span>"
|
||||
if(!user.can_speak(message) && (user.mind && !user.mind.miming))
|
||||
user << message
|
||||
return
|
||||
@@ -236,7 +236,7 @@ var/engwords = list("travel", "blood", "join", "hell", "destroy", "technology",
|
||||
cultist.say(gibberish)
|
||||
else
|
||||
cultist.whisper(gibberish)
|
||||
visible_message("<span class='danger'>The markings pulse with a small burst of light, then fall dark.</span>", 3, "<span class='danger'>You hear a faint fizzle.</span>", 2)
|
||||
visible_message("<span class='danger'>The markings pulse with a small burst of light, then fall dark.</span>", 3, "<span class='italics'>You hear a faint fizzle.</span>", 2)
|
||||
return
|
||||
|
||||
/obj/effect/rune/proc/check_icon()
|
||||
@@ -637,8 +637,8 @@ var/engwords = list("travel", "blood", "join", "hell", "destroy", "technology",
|
||||
return
|
||||
|
||||
for (var/mob/V in viewers(src))
|
||||
V.show_message("<span class='danger'>[user] slices open a finger and begins to chant and paint symbols on the floor.</span>", 3, "<span class='danger'>You hear chanting.</span>", 2)
|
||||
user << "<span class='danger'>You slice open one of your fingers and begin drawing a rune on the floor whilst chanting the ritual that binds your life essence with the dark arcane energies flowing through the surrounding world.</span>"
|
||||
V.show_message("<span class='danger'>[user] slices open a finger and begins to chant and paint symbols on the floor.</span>", 3, "<span class='italics'>You hear chanting.</span>", 2)
|
||||
user << "<span class='userdanger'>You slice open one of your fingers and begin drawing a rune on the floor whilst chanting the ritual that binds your life essence with the dark arcane energies flowing through the surrounding world.</span>"
|
||||
user.take_overall_damage((rand(9)+1)/10) // 0.1 to 1.0 damage
|
||||
if(do_after(user, 50))
|
||||
if(usr.get_active_hand() != src)
|
||||
@@ -670,7 +670,7 @@ var/engwords = list("travel", "blood", "join", "hell", "destroy", "technology",
|
||||
// if(M == user)
|
||||
for(var/entry in words)
|
||||
words[entry] = T.words[entry]
|
||||
user << "You copy the translation notes from your tome."
|
||||
user << "<span class='notice'>You copy the translation notes from your tome.</span>"
|
||||
|
||||
|
||||
/obj/item/weapon/tome/examine(mob/user)
|
||||
|
||||
@@ -26,8 +26,8 @@ var/list/sacrificed = list()
|
||||
else
|
||||
user.whisper("Sas[pick("'","`")]so c'arta forbici!")
|
||||
user.visible_message("<span class='danger'>[user] disappears in a flash of red light!</span>", \
|
||||
"<span class='danger'>You feel as your body gets dragged through the dimension of Nar-Sie!</span>", \
|
||||
"<span class='danger'>You hear a sickening crunch and sloshing of viscera.</span>")
|
||||
"<span class='userdanger'>You feel as your body gets dragged through the dimension of Nar-Sie!</span>", \
|
||||
"<span class='italics'>You hear a sickening crunch and sloshing of viscera.</span>")
|
||||
user.loc = allrunesloc[rand(1,index)]
|
||||
return
|
||||
if(istype(src,/obj/effect/rune))
|
||||
@@ -53,7 +53,7 @@ var/list/sacrificed = list()
|
||||
IP = R
|
||||
runecount++
|
||||
if(runecount >= 2)
|
||||
user << "<span class='danger'>You feel pain, as the rune disappears in reality shift caused by too much wear of space-time fabric</span>"
|
||||
user << "<span class='userdanger'>You feel pain, as the rune disappears in reality shift caused by too much wear of space-time fabric</span>"
|
||||
if (istype(user, /mob/living))
|
||||
user.take_overall_damage(5, 0)
|
||||
qdel(src)
|
||||
@@ -85,7 +85,7 @@ var/list/sacrificed = list()
|
||||
usr.whisper("N[pick("'","`")]ath reth sh'yro eth d'raggathnor!")
|
||||
usr.visible_message("<span class='danger'>Rune disappears with a flash of red light, and in its place now a book lies.</span>", \
|
||||
"<span class='danger'>You are blinded by the flash of red light! After you're able to see again, you see that now instead of the rune there's a book.</span>", \
|
||||
"<span class='danger'>You hear a pop and smell ozone.</span>")
|
||||
"<span class='italics'>You hear a pop and smell ozone.</span>")
|
||||
if(istype(src,/obj/effect/rune))
|
||||
new /obj/item/weapon/tome(src.loc)
|
||||
else
|
||||
@@ -110,8 +110,8 @@ var/list/sacrificed = list()
|
||||
C.say("Mah[pick("'","`")]weyh pleggh at e'ntrath!")
|
||||
if(cultsinrange.len >= 3)
|
||||
M.visible_message("<span class='danger'>[M] writhes in pain as the markings below him glow a bloody red.</span>", \
|
||||
"<span class='danger'>AAAAAAHHHH!</span>", \
|
||||
"<span class='danger'>You hear an anguished scream.</span>")
|
||||
"<span class='userdanger'>AAAAAAHHHH!</span>", \
|
||||
"<span class='italics'>You hear an anguished scream.</span>")
|
||||
if(is_convertable_to_cult(M.mind))
|
||||
ticker.mode.add_cultist(M.mind)
|
||||
M.mind.special_role = "Cultist"
|
||||
@@ -221,14 +221,14 @@ var/list/sacrificed = list()
|
||||
usr.say ("Yu[pick("'","`")]gular faras desdae. Havas mithum javara. Umathar uf'kal thenar!")
|
||||
usr.visible_message("<span class='danger'>Blood flows from the rune into [usr]!</span>", \
|
||||
"<span class='danger'>The blood starts flowing from the rune and into your frail mortal body. You feel... empowered.</span>", \
|
||||
"<span class='danger'>You hear a liquid flowing.</span>")
|
||||
"<span class='italics'>You hear a liquid flowing.</span>")
|
||||
var/mob/living/user = usr
|
||||
if(user.bhunger)
|
||||
user.bhunger = max(user.bhunger-2*drain,0)
|
||||
if(drain>=50)
|
||||
user.visible_message("<span class='danger'>[user]'s eyes give off eerie red glow!</span>", \
|
||||
"<span class='danger'>...but it wasn't nearly enough. You crave, crave for more. The hunger consumes you from within.</span>", \
|
||||
"<span class='danger'>You hear a heartbeat.</span>")
|
||||
"<span class='italics'>You hear a heartbeat.</span>")
|
||||
user.bhunger += drain
|
||||
src = user
|
||||
spawn()
|
||||
@@ -341,10 +341,10 @@ var/list/sacrificed = list()
|
||||
usr.say("Pasnar val'keriam usinar. Savrae ines amutan. Yam'toth remium il'tarat!")
|
||||
corpse_to_raise.visible_message("<span class='danger'>[corpse_to_raise]'s eyes glow with a faint red as he stands up, slowly starting to breathe again.</span>", \
|
||||
"<span class='danger'>Life... I'm alive again...</span>", \
|
||||
"<span class='danger'>You hear a faint, slightly familiar whisper.</span>")
|
||||
"<span class='italics'>You hear a faint, slightly familiar whisper.</span>")
|
||||
body_to_sacrifice.visible_message("<span class='danger'>[body_to_sacrifice] is torn apart, a black smoke swiftly dissipating from his remains!</span>", \
|
||||
"<span class='danger'>You feel as your blood boils, tearing you apart.</span>", \
|
||||
"<span class='danger'>You hear a thousand voices, all crying in pain.</span>")
|
||||
"<span class='italics'>You hear a thousand voices, all crying in pain.</span>")
|
||||
body_to_sacrifice.gib()
|
||||
|
||||
// if(ticker.mode.name == "cult")
|
||||
@@ -396,7 +396,7 @@ var/list/sacrificed = list()
|
||||
usr.say("Fwe[pick("'","`")]sh mah erl nyag r'ya!")
|
||||
usr.visible_message("<span class='danger'>[usr]'s eyes glow blue as \he freezes in place, absolutely motionless.</span>", \
|
||||
"<span class='danger'>The shadow that is your spirit separates itself from your body. You are now in the realm beyond. While this is a great sight, being here strains your mind and body. Hurry...</span>", \
|
||||
"<span class='danger'>You hear only complete silence for a moment.</span>")
|
||||
"<span class='italics'>You hear only complete silence for a moment.</span>")
|
||||
usr.ghostize(1)
|
||||
L.ajourn = 1
|
||||
while(L)
|
||||
@@ -431,7 +431,7 @@ var/list/sacrificed = list()
|
||||
var/mob/living/carbon/human/dummy/D = new(this_rune.loc)
|
||||
usr.visible_message("<span class='danger'>A shape forms in the center of the rune. A shape of... a man.</span>", \
|
||||
"<span class='danger'>A shape forms in the center of the rune. A shape of... a man.</span>", \
|
||||
"<span class='danger'>You hear liquid flowing.</span>")
|
||||
"<span class='italics'>You hear liquid flowing.</span>")
|
||||
D.real_name = "[pick(first_names_male)] [pick(last_names)]"
|
||||
D.status_flags = CANSTUN|CANWEAKEN|CANPARALYSE|CANPUSH
|
||||
|
||||
@@ -453,7 +453,7 @@ var/list/sacrificed = list()
|
||||
if(D)
|
||||
D.visible_message("<span class='danger'>[D] slowly dissipates into dust and bones.</span>", \
|
||||
"<span class='danger'>You feel pain, as bonds formed between your soul and this homunculus break.</span>", \
|
||||
"<span class='danger'>You hear faint rustle.</span>")
|
||||
"<span class='italics'>You hear faint rustle.</span>")
|
||||
D.dust()
|
||||
return
|
||||
|
||||
@@ -552,7 +552,7 @@ var/list/sacrificed = list()
|
||||
runedec+=10
|
||||
user.visible_message("<span class='danger'>[user] keels over dead, his blood glowing blue as it escapes his body and dissipates into thin air.</span>", \
|
||||
"<span class='danger'>In the last moment of your humble life, you feel an immense pain as fabric of reality mends... with your blood.</span>", \
|
||||
"<span class='danger'>You hear faint rustle.</span>")
|
||||
"<span class='italics'>You hear faint rustle.</span>")
|
||||
for(,user.stat==2)
|
||||
sleep(600)
|
||||
if (!user)
|
||||
@@ -877,7 +877,7 @@ var/list/sacrificed = list()
|
||||
C.take_overall_damage(25, 0)
|
||||
user.visible_message("<span class='danger'>Rune disappears with a flash of red light, and in its place now a body lies.</span>", \
|
||||
"<span class='danger'>You are blinded by the flash of red light! After you're able to see again, you see that now instead of the rune there's a body.</span>", \
|
||||
"<span class='danger'>You hear a pop and smell ozone.</span>")
|
||||
"<span class='italics'>You hear a pop and smell ozone.</span>")
|
||||
qdel(src)
|
||||
return fizzle(user)
|
||||
|
||||
|
||||
@@ -19,6 +19,7 @@
|
||||
var/probability = 1
|
||||
var/station_was_nuked = 0 //see nuclearbomb.dm and malfunction.dm
|
||||
var/explosion_in_progress = 0 //sit back and relax
|
||||
var/round_ends_with_antag_death = 0 //flags the "one verse the station" antags as such
|
||||
var/list/datum/mind/modePlayer = new
|
||||
var/list/datum/mind/antag_candidates = list() // List of possible starting antags goes here
|
||||
var/list/restricted_jobs = list() // Jobs it doesn't make sense to be. I.E chaplain or AI cultist
|
||||
@@ -29,6 +30,7 @@
|
||||
var/pre_setup_before_jobs = 0
|
||||
var/antag_flag = null //preferences flag such as BE_WIZARD that need to be turned on for players to be antag
|
||||
var/datum/mind/sacrifice_target = null
|
||||
var/mob/living/living_antag_player = null
|
||||
var/list/datum/game_mode/replacementmode = null
|
||||
var/round_converted = 0 //0: round not converted, 1: round going to convert, 2: round converted
|
||||
var/reroll_friendly //During mode conversion only these are in the running
|
||||
@@ -97,16 +99,16 @@
|
||||
///convert_roundtype()
|
||||
///Allows rounds to basically be "rerolled" should the initial premise fall through
|
||||
/datum/game_mode/proc/convert_roundtype()
|
||||
var/living_crew = 0
|
||||
var/list/living_crew = list()
|
||||
|
||||
for(var/mob/Player in mob_list)
|
||||
if(Player.mind && Player.stat != DEAD && !isnewplayer(Player) &&!isbrain(Player))
|
||||
living_crew++
|
||||
if(living_crew / joined_player_list.len <= config.midround_antag_life_check) //If a lot of the player base died, we start fresh
|
||||
living_crew += Player
|
||||
if(living_crew.len / joined_player_list.len <= config.midround_antag_life_check) //If a lot of the player base died, we start fresh
|
||||
message_admins("Convert_roundtype failed due to too many dead people. Limit is [config.midround_antag_life_check * 100]% living crew")
|
||||
return null
|
||||
|
||||
var/list/datum/game_mode/runnable_modes = config.get_runnable_midround_modes(living_crew)
|
||||
var/list/datum/game_mode/runnable_modes = config.get_runnable_midround_modes(living_crew.len)
|
||||
var/list/datum/game_mode/usable_modes = list()
|
||||
for(var/datum/game_mode/G in runnable_modes)
|
||||
if(G.reroll_friendly)
|
||||
@@ -167,12 +169,72 @@
|
||||
|
||||
|
||||
/datum/game_mode/proc/check_finished() //to be called by ticker
|
||||
if(replacementmode && round_converted == 2)
|
||||
return replacementmode.check_finished()
|
||||
if(SSshuttle.emergency.mode >= SHUTTLE_ENDGAME || station_was_nuked)
|
||||
return 1
|
||||
if(!round_converted && (!config.continuous[config_tag] || (config.continuous[config_tag] && config.midround_antag[config_tag]))) //Non-continuous or continous with replacement antags
|
||||
if(living_antag_player && living_antag_player.mind && living_antag_player.stat != DEAD && !isnewplayer(living_antag_player) &&!isbrain(living_antag_player))
|
||||
return 0 //A resource saver: once we find someone who has to die for all antags to be dead, we can just keep checking them, cycling over everyone only when we lose our mark.
|
||||
|
||||
for(var/mob/living/Player in living_mob_list)
|
||||
if(Player.mind && Player.stat != DEAD && !isnewplayer(Player) &&!isbrain(Player))
|
||||
if(Player.mind.special_role) //Someone's still antaging!
|
||||
living_antag_player = Player
|
||||
return 0
|
||||
|
||||
if(!config.continuous[config_tag])
|
||||
return 1
|
||||
|
||||
else
|
||||
round_converted = convert_roundtype()
|
||||
if(!round_converted)
|
||||
if(round_ends_with_antag_death)
|
||||
return 1
|
||||
else
|
||||
config.midround_antag[config_tag] = 0
|
||||
return 0
|
||||
|
||||
return 0
|
||||
|
||||
|
||||
/datum/game_mode/proc/declare_completion()
|
||||
var/clients = 0
|
||||
var/surviving_humans = 0
|
||||
var/surviving_total = 0
|
||||
var/ghosts = 0
|
||||
var/escaped_humans = 0
|
||||
var/escaped_total = 0
|
||||
|
||||
for(var/mob/M in player_list)
|
||||
if(M.client)
|
||||
clients++
|
||||
if(ishuman(M))
|
||||
if(!M.stat)
|
||||
surviving_humans++
|
||||
if(M.z == 2)
|
||||
escaped_humans++
|
||||
if(!M.stat)
|
||||
surviving_total++
|
||||
if(M.z == 2)
|
||||
escaped_total++
|
||||
|
||||
|
||||
if(isobserver(M))
|
||||
ghosts++
|
||||
|
||||
if(clients > 0)
|
||||
feedback_set("round_end_clients",clients)
|
||||
if(ghosts > 0)
|
||||
feedback_set("round_end_ghosts",ghosts)
|
||||
if(surviving_humans > 0)
|
||||
feedback_set("survived_human",surviving_humans)
|
||||
if(surviving_total > 0)
|
||||
feedback_set("survived_total",surviving_total)
|
||||
if(escaped_humans > 0)
|
||||
feedback_set("escaped_human",escaped_humans)
|
||||
if(escaped_total > 0)
|
||||
feedback_set("escaped_total",escaped_total)
|
||||
send2irc("Server", "Round just ended.")
|
||||
return 0
|
||||
|
||||
|
||||
@@ -11,6 +11,10 @@
|
||||
var/datum/gang_points/gang_points
|
||||
var/list/A_territory = list()
|
||||
var/list/B_territory = list()
|
||||
var/list/A_territory_new = list()
|
||||
var/list/A_territory_lost = list()
|
||||
var/list/B_territory_new = list()
|
||||
var/list/B_territory_lost = list()
|
||||
|
||||
/datum/game_mode/gang
|
||||
name = "gang war"
|
||||
@@ -21,15 +25,15 @@
|
||||
required_enemies = 2
|
||||
recommended_enemies = 2
|
||||
enemy_minimum_age = 14
|
||||
|
||||
var/finished = 0
|
||||
var/checkwin_counter = 0
|
||||
var/goal_scalar = 0.6 //Goal = Total territories x goal_scalar
|
||||
|
||||
///////////////////////////
|
||||
//Announces the game type//
|
||||
///////////////////////////
|
||||
/datum/game_mode/gang/announce()
|
||||
world << "<B>The current game mode is - Gang War!</B>"
|
||||
world << "<B>A violent turf war has erupted on the station!<BR>Gangsters - Take over the station by claiming more than half of the station! <BR>Crew - The gangs will try to keep you on the station. Successfully evacuate the station to win!</B>"
|
||||
world << "<B>A violent turf war has erupted on the station!<BR>Gangsters - Take over the station by claiming more than [round(100*goal_scalar,1)]% of the station! <BR>Crew - The gangs will try to keep you on the station. Successfully evacuate the station to win!</B>"
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
@@ -74,15 +78,6 @@
|
||||
modePlayer += B_bosses
|
||||
..()
|
||||
|
||||
|
||||
/datum/game_mode/gang/process()
|
||||
checkwin_counter++
|
||||
if(checkwin_counter >= 5)
|
||||
if(!finished)
|
||||
ticker.mode.check_win()
|
||||
checkwin_counter = 0
|
||||
return 0
|
||||
|
||||
/datum/game_mode/gang/proc/assign_bosses()
|
||||
var/datum/mind/boss = pick(antag_candidates)
|
||||
A_bosses += boss
|
||||
@@ -99,7 +94,7 @@
|
||||
/datum/game_mode/proc/forge_gang_objectives(var/datum/mind/boss_mind)
|
||||
var/datum/objective/rival_obj = new
|
||||
rival_obj.owner = boss_mind
|
||||
rival_obj.explanation_text = "Claim more than half the station before the [(boss_mind in A_bosses) ? gang_name("B") : gang_name("A")] Gang does."
|
||||
rival_obj.explanation_text = "Claim more than 60% the station before the [(boss_mind in A_bosses) ? gang_name("B") : gang_name("A")] Gang does."
|
||||
boss_mind.objectives += rival_obj
|
||||
|
||||
|
||||
@@ -167,9 +162,9 @@
|
||||
//Checks if the either gang have won or not//
|
||||
/////////////////////////////////////////////
|
||||
/datum/game_mode/gang/check_win()
|
||||
if(A_territory.len > (start_state.num_territories / 2))
|
||||
if(A_territory.len > (start_state.num_territories * goal_scalar))
|
||||
finished = "A" //Gang A wins
|
||||
else if(B_territory.len > (start_state.num_territories / 2))
|
||||
else if(B_territory.len > (start_state.num_territories * goal_scalar))
|
||||
finished = "B" //Gang B wins
|
||||
|
||||
///////////////////////////////
|
||||
@@ -186,7 +181,7 @@
|
||||
/datum/game_mode/proc/add_gangster(datum/mind/gangster_mind, var/gang, var/check = 1)
|
||||
if(check && isloyal(gangster_mind.current)) //Check to see if the potential gangster is implanted
|
||||
return 0
|
||||
if((gangster_mind in A_bosses) || (gangster_mind in A_gang) || (gangster_mind in B_bosses) || (gangster_mind in B_gang))
|
||||
if(gangster_mind in (A_bosses | A_gang | B_bosses | B_gang))
|
||||
return 0
|
||||
if(gang == "A")
|
||||
A_gang += gangster_mind
|
||||
@@ -305,7 +300,7 @@
|
||||
|
||||
if(A_bosses.len || A_gang.len)
|
||||
if(winner)
|
||||
world << "<br><b>The [gang_name("A")] Gang was [winner=="A" ? "<font color=green>victorious</font>" : "<font color=red>defeated</font>"] with [round((ticker.mode.A_territory.len/start_state.num_territories)*100, 0.1)]% control of the station!</b>"
|
||||
world << "<br><b>The [gang_name("A")] Gang was [winner=="A" ? "<font color=green>victorious</font>" : "<font color=red>defeated</font>"] with [round((ticker.mode.A_territory.len/start_state.num_territories)*100, 1)]% control of the station!</b>"
|
||||
world << "<br>The [gang_name("A")] Gang Bosses were:"
|
||||
gang_membership_report(A_bosses)
|
||||
world << "<br>The [gang_name("A")] Gangsters were:"
|
||||
@@ -314,7 +309,7 @@
|
||||
|
||||
if(B_bosses.len || B_gang.len)
|
||||
if(winner)
|
||||
world << "<br><b>The [gang_name("B")] Gang was [winner=="B" ? "<font color=green>victorious</font>" : "<font color=red>defeated</font>"] with [round((ticker.mode.B_territory.len/start_state.num_territories)*100, 0.1)]% control of the station!</b></b>"
|
||||
world << "<br><b>The [gang_name("B")] Gang was [winner=="B" ? "<font color=green>victorious</font>" : "<font color=red>defeated</font>"] with [round((ticker.mode.B_territory.len/start_state.num_territories)*100, 1)]% control of the station!</b></b>"
|
||||
world << "<br>The [gang_name("B")] Gang Bosses were:"
|
||||
gang_membership_report(B_bosses)
|
||||
world << "<br>The [gang_name("B")] Gangsters were:"
|
||||
@@ -341,9 +336,9 @@
|
||||
world << text
|
||||
|
||||
|
||||
//////////////////////////////////
|
||||
//Handles gang points and income//
|
||||
//////////////////////////////////
|
||||
//////////////////////////////////////////////////////////
|
||||
//Handles influence, territories, and the victory checks//
|
||||
//////////////////////////////////////////////////////////
|
||||
|
||||
/datum/gang_points
|
||||
var/A = 30
|
||||
@@ -356,24 +351,94 @@
|
||||
income()
|
||||
|
||||
/datum/gang_points/proc/income()
|
||||
var/A_new = min(100,(A + 10 + ticker.mode.A_territory.len))
|
||||
var/A_added_names = ""
|
||||
var/B_added_names = ""
|
||||
var/A_lost_names = ""
|
||||
var/B_lost_names = ""
|
||||
|
||||
//Process lost territories
|
||||
for(var/area in ticker.mode.A_territory_lost)
|
||||
if(A_lost_names == "")
|
||||
A_lost_names += ":<br>"
|
||||
else
|
||||
A_lost_names += ", "
|
||||
A_lost_names += "[ticker.mode.A_territory_lost[area]], "
|
||||
ticker.mode.A_territory -= area
|
||||
|
||||
for(var/area in ticker.mode.B_territory_lost)
|
||||
if(B_lost_names == "")
|
||||
B_lost_names += ":<br>"
|
||||
else
|
||||
B_lost_names += ", "
|
||||
B_lost_names += "[ticker.mode.B_territory_lost[area]], "
|
||||
ticker.mode.B_territory -= area
|
||||
|
||||
//Calculate and report influence growth
|
||||
ticker.mode.message_gangtools(ticker.mode.A_tools,"<b>[gang_name("A")] Gang Status Report:</b>")
|
||||
var/A_new = min(100,A + 15 + min(ticker.mode.A_territory.len, 15) + round(max(ticker.mode.A_territory.len - 15, 0) * 0.5,1))
|
||||
var/A_message = ""
|
||||
if(A_new != A)
|
||||
A_message += "Your gang has gained [A_new - A] Influence from their presence on station."
|
||||
A_message += "Your gang has gained <b>[A_new - A] Influence</b> for holding on to [ticker.mode.A_territory.len] territories."
|
||||
if(A_new == 100)
|
||||
A_message += "Maximum influence reached."
|
||||
A = A_new
|
||||
ticker.mode.message_gangtools(ticker.mode.A_tools,A_message)
|
||||
ticker.mode.message_gangtools(ticker.mode.A_tools,A_message,0)
|
||||
|
||||
var/B_new = min(100,(B + 10 + ticker.mode.B_territory.len))
|
||||
ticker.mode.message_gangtools(ticker.mode.B_tools,"<b>[gang_name("B")] Gang Status Report:</b>")
|
||||
var/B_new = min(100,B + 15 + min(ticker.mode.B_territory.len, 15) + round(max(ticker.mode.B_territory.len - 15, 0) * 0.5,1))
|
||||
var/B_message = ""
|
||||
if(B_new != B)
|
||||
B_message += "Your gang has collected [B_new - B] Influence from their presence on station. "
|
||||
B_message += "Your gang has gained <b>[B_new - B] Influence</b> for holding on to [ticker.mode.B_territory.len] territories."
|
||||
if(B_new == 100)
|
||||
B_message += "Maximum influence reached."
|
||||
B = B_new
|
||||
ticker.mode.message_gangtools(ticker.mode.B_tools,B_message)
|
||||
ticker.mode.message_gangtools(ticker.mode.B_tools,B_message,0)
|
||||
|
||||
|
||||
//Remove territories they already own from the buffer, so if they got tagged over, they can still earn income if they tag it back before the next status report
|
||||
ticker.mode.A_territory_new -= ticker.mode.A_territory
|
||||
ticker.mode.B_territory_new -= ticker.mode.B_territory
|
||||
|
||||
//Process new territories
|
||||
for(var/area in ticker.mode.A_territory_new)
|
||||
if(A_added_names == "")
|
||||
A_added_names += ":<br>"
|
||||
else
|
||||
A_added_names += ", "
|
||||
A_added_names += "[ticker.mode.A_territory_new[area]]"
|
||||
ticker.mode.A_territory += area
|
||||
|
||||
for(var/area in ticker.mode.B_territory_new)
|
||||
if(B_added_names == "")
|
||||
B_added_names += ":<br>"
|
||||
else
|
||||
B_added_names += ", "
|
||||
B_added_names += "[ticker.mode.B_territory_new[area]]"
|
||||
ticker.mode.B_territory += area
|
||||
|
||||
//Report territory changes
|
||||
ticker.mode.message_gangtools(ticker.mode.A_tools,"<b>[ticker.mode.A_territory_new.len] new territories</b>[A_added_names]",0)
|
||||
ticker.mode.message_gangtools(ticker.mode.B_tools,"<b>[ticker.mode.B_territory_new.len] new territories</b>[B_added_names]",0,)
|
||||
ticker.mode.message_gangtools(ticker.mode.A_tools,"<b>[ticker.mode.A_territory_lost.len] territories lost</b>[A_lost_names]",0,1)
|
||||
ticker.mode.message_gangtools(ticker.mode.B_tools,"<b>[ticker.mode.B_territory_lost.len] territories lost</b>[B_lost_names]",0,1)
|
||||
|
||||
//Clear the lists
|
||||
ticker.mode.A_territory_new = list()
|
||||
ticker.mode.B_territory_new = list()
|
||||
ticker.mode.A_territory_lost = list()
|
||||
ticker.mode.B_territory_lost = list()
|
||||
|
||||
var/A_control = round((ticker.mode.A_territory.len/start_state.num_territories)*100, 1)
|
||||
var/B_control = round((ticker.mode.B_territory.len/start_state.num_territories)*100, 1)
|
||||
ticker.mode.message_gangtools((ticker.mode.A_tools),"Your gang now has <b>[A_control]% control</b> of the station.",0)
|
||||
ticker.mode.message_gangtools((ticker.mode.A_tools),"The [gang_name("B")] Gang has <b>[B_control]% control</b> of the station.",0,1)
|
||||
ticker.mode.message_gangtools((ticker.mode.B_tools),"Your gang now has <b>[B_control]% control</b> of the station.",0)
|
||||
ticker.mode.message_gangtools((ticker.mode.B_tools),"The [gang_name("A")] Gang has <b>[A_control]% control</b> of the station.",0,1)
|
||||
|
||||
//Victory check
|
||||
ticker.mode.check_win()
|
||||
|
||||
//Restart the counter
|
||||
start()
|
||||
|
||||
|
||||
@@ -381,13 +446,13 @@
|
||||
//Sends a message to the boss via his gangtool//
|
||||
////////////////////////////////////////////////
|
||||
|
||||
/datum/game_mode/proc/message_gangtools(var/list/gangtools,var/message,var/beeps=1)
|
||||
/datum/game_mode/proc/message_gangtools(var/list/gangtools,var/message,var/beep=1,var/warning)
|
||||
if(!gangtools.len || !message)
|
||||
return
|
||||
for(var/obj/item/device/gangtool/tool in gangtools)
|
||||
var/mob/living/mob = get(tool.loc,/mob/living)
|
||||
if(mob && mob.mind)
|
||||
if(((tool.gang == "A") && ((mob.mind in A_gang) || (mob.mind in A_bosses))) || ((tool.gang == "B") && ((mob.mind in B_gang) || (mob.mind in B_bosses))))
|
||||
mob << "<span class='notice'>\icon[tool] [message]</span>"
|
||||
if(beeps)
|
||||
mob << "<span class='[warning ? "warning" : "notice"]'>\icon[tool] [message]</span>"
|
||||
if(beep)
|
||||
playsound(mob.loc, 'sound/machines/twobeep.ogg', 50, 1)
|
||||
@@ -228,9 +228,9 @@
|
||||
*/
|
||||
|
||||
/datum/intercept_text/proc/build_gang(datum/mind/correct_person)
|
||||
src.text += "<BR><BR>Syndicate forces may be supplying opposing criminal organizations within your sector in an attempt at destabilizing our operations."
|
||||
src.text += "Ensure law and order is maintained on the station and be on the lookout for violent confrontations between station factions."
|
||||
src.text += "Central Command retains an interest in any criminal leaders captured by station security. The execution or exile of these persons are ill-advised."
|
||||
src.text += "<BR><BR>We have recieved reports of a sudden increase of criminal activity in close proximity to our operations within your sector."
|
||||
src.text += "Ensure law and order is maintained on the station and be on the lookout for unusually territorial behavior from the crew."
|
||||
src.text += "In the event of a full-scale takeover attempt, sensitive research items are to be secured and the station evacuated ASAP."
|
||||
src.text += "<BR><HR>"
|
||||
|
||||
/datum/intercept_text/proc/build_wizard(datum/mind/correct_person)
|
||||
|
||||
@@ -227,7 +227,7 @@
|
||||
for(var/datum/AI_Module/small/overload_machine/overload in current_modules)
|
||||
if(overload.uses > 0)
|
||||
overload.uses --
|
||||
audible_message("<span class='notice'>You hear a loud electrical buzzing sound!</span>")
|
||||
audible_message("<span class='italics'>You hear a loud electrical buzzing sound!</span>")
|
||||
src << "<span class='warning'>Overloading machine circuitry...</span>"
|
||||
spawn(50)
|
||||
if(M)
|
||||
@@ -257,7 +257,7 @@
|
||||
for(var/datum/AI_Module/small/override_machine/override in current_modules)
|
||||
if(override.uses > 0)
|
||||
override.uses --
|
||||
audible_message("<span class='notice'>You hear a loud electrical buzzing sound!</span>")
|
||||
audible_message("<span class='italics'>You hear a loud electrical buzzing sound!</span>")
|
||||
src << "<span class='warning'>Reprogramming machine behaviour...</span>"
|
||||
spawn(50)
|
||||
if(M && !M.gc_destroyed)
|
||||
@@ -426,11 +426,11 @@
|
||||
if(upgraded)
|
||||
UC.uses --
|
||||
C.visible_message("<span class='notice'>\icon[C] *beep*</span>")
|
||||
src << "<span class='notice'>Camera successully upgraded!</span>"
|
||||
src << "<span class='notice'>You successully upgrade the camera.</span>"
|
||||
else
|
||||
src << "<span class='notice'>This camera is already upgraded!</span>"
|
||||
src << "<span class='warning'>This camera is already upgraded!</span>"
|
||||
else
|
||||
src << "<span class='notice'>Out of uses.</span>"
|
||||
src << "<span class='warning'>Out of uses!</span>"
|
||||
|
||||
/datum/module_picker
|
||||
var/temp = null
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
recommended_enemies = 1
|
||||
pre_setup_before_jobs = 1
|
||||
enemy_minimum_age = 30 //Same as AI minimum age
|
||||
|
||||
round_ends_with_antag_death = 1
|
||||
|
||||
var/AI_win_timeleft = 5400 //started at 5400, in case I change this for testing round end.
|
||||
var/malf_mode_declared = 0
|
||||
@@ -170,10 +170,6 @@
|
||||
|
||||
|
||||
/datum/game_mode/malfunction/check_finished()
|
||||
if(replacementmode && round_converted == 2)
|
||||
return replacementmode.check_finished()
|
||||
if(round_converted == 1) //No reason to waste resources
|
||||
return ..() //Check for evacuation/nuke
|
||||
if (station_captured && !to_nuke_or_not_to_nuke)
|
||||
return 1
|
||||
if (is_malf_ai_dead() || !check_ai_loc())
|
||||
@@ -186,10 +182,6 @@
|
||||
malf_mode_declared = 0
|
||||
if(get_security_level() == "delta")
|
||||
set_security_level("red")
|
||||
if(config.midround_antag["malfunction"])
|
||||
round_converted = convert_roundtype()
|
||||
if(!round_converted)
|
||||
return 1
|
||||
return ..()
|
||||
else
|
||||
return 1
|
||||
|
||||
@@ -122,7 +122,7 @@
|
||||
|
||||
location = locate(locationx,locationy,Z.z)
|
||||
|
||||
usr << "You set the pinpointer to locate [locationx],[locationy]"
|
||||
usr << "<span class='notice'>You set the pinpointer to locate [locationx],[locationy]</span>"
|
||||
|
||||
|
||||
return attack_self()
|
||||
@@ -140,9 +140,9 @@
|
||||
return
|
||||
target=locate(possible_items[targetitem])
|
||||
if(!target)
|
||||
usr << "Failed to locate [targetitem]!"
|
||||
usr << "<span class='warning'>Failed to locate [targetitem]!</span>"
|
||||
return
|
||||
usr << "You set the pinpointer to locate [targetitem]"
|
||||
usr << "<span class='notice'>You set the pinpointer to locate [targetitem].</span>"
|
||||
if("DNA")
|
||||
var/DNAstring = input("Input DNA string to search for." , "Please Enter String." , "")
|
||||
if(!DNAstring)
|
||||
|
||||
@@ -187,14 +187,19 @@
|
||||
///////////////////////////////
|
||||
/datum/game_mode/revolution/proc/latejoin_headrev()
|
||||
if(revolutionaries) //Head Revs are not in this list
|
||||
var/datum/mind/stalin = pick(revolutionaries)
|
||||
revolutionaries -= stalin
|
||||
head_revolutionaries += stalin
|
||||
log_game("[stalin.key] (ckey) has been promoted to a head rev")
|
||||
equip_revolutionary(stalin.current)
|
||||
forge_revolutionary_objectives(stalin)
|
||||
greet_revolutionary(stalin)
|
||||
++max_headrevs
|
||||
var/list/promotable_revs = list()
|
||||
for(var/datum/mind/khrushchev in revolutionaries)
|
||||
if(khrushchev.current && khrushchev.current.client && khrushchev.current.stat != DEAD)
|
||||
if(khrushchev.current.client.prefs.be_special & BE_REV)
|
||||
promotable_revs += khrushchev
|
||||
if(promotable_revs)
|
||||
var/datum/mind/stalin = pick(promotable_revs)
|
||||
revolutionaries -= stalin
|
||||
head_revolutionaries += stalin
|
||||
log_game("[stalin.key] (ckey) has been promoted to a head rev")
|
||||
equip_revolutionary(stalin.current)
|
||||
forge_revolutionary_objectives(stalin)
|
||||
greet_revolutionary(stalin)
|
||||
|
||||
//////////////////////////////////////
|
||||
//Checks if the revs have won or not//
|
||||
@@ -213,11 +218,15 @@
|
||||
if(config.continuous["revolution"])
|
||||
if(finished != 0)
|
||||
SSshuttle.emergencyNoEscape = 0
|
||||
if(SSshuttle.emergency.mode == SHUTTLE_STRANDED)
|
||||
SSshuttle.emergency.mode = SHUTTLE_DOCKED
|
||||
SSshuttle.emergency.timer = world.time
|
||||
priority_announce("Hostile enviroment resolved. You have 3 minutes to board the Emergency Shuttle.", null, 'sound/AI/shuttledock.ogg', "Priority")
|
||||
return ..()
|
||||
if(finished != 0)
|
||||
return 1
|
||||
else
|
||||
return 0
|
||||
return ..()
|
||||
|
||||
///////////////////////////////////////////////////
|
||||
//Deals with converting players to the revolution//
|
||||
|
||||
@@ -157,28 +157,6 @@ Made by Xhuis
|
||||
new_thrall_mind.spell_list += new /obj/effect/proc_holder/spell/targeted/shadowling_hivemind
|
||||
return 1
|
||||
|
||||
|
||||
|
||||
/*
|
||||
GAME FINISH CHECKS
|
||||
*/
|
||||
|
||||
|
||||
/datum/game_mode/shadowling/check_finished()
|
||||
var/shadows_alive = 0 //and then shadowling was kill
|
||||
for(var/datum/mind/shadow in shadows) //but what if shadowling was not kill?
|
||||
if(!istype(shadow.current,/mob/living/carbon/human) && !istype(shadow.current,/mob/living/simple_animal/ascendant_shadowling))
|
||||
continue
|
||||
if(shadow.current.stat == DEAD)
|
||||
continue
|
||||
shadows_alive++
|
||||
if(shadows_alive)
|
||||
return ..()
|
||||
else
|
||||
shadowling_dead = 1 //but shadowling was kill :(
|
||||
return 1
|
||||
|
||||
|
||||
/datum/game_mode/shadowling/proc/check_shadow_victory()
|
||||
var/success = 0 //Did they win?
|
||||
if(shadow_objectives.Find("enthrall"))
|
||||
|
||||
@@ -81,9 +81,8 @@
|
||||
if(character.client.prefs.be_special & BE_TRAITOR)
|
||||
if(!jobban_isbanned(character.client, "traitor") && !jobban_isbanned(character.client, "Syndicate"))
|
||||
if(age_check(character.client))
|
||||
if(!(character.job in ticker.mode.restricted_jobs))
|
||||
if(!(character.job in restricted_jobs))
|
||||
add_latejoin_traitor(character.mind)
|
||||
..()
|
||||
|
||||
/datum/game_mode/traitor/proc/add_latejoin_traitor(var/datum/mind/character)
|
||||
character.make_Traitor()
|
||||
|
||||
@@ -60,7 +60,7 @@
|
||||
else
|
||||
if(mages_made >= max_mages)
|
||||
finished = 1
|
||||
return 1
|
||||
return ..()
|
||||
else
|
||||
make_more_mages()
|
||||
return ..()
|
||||
|
||||
@@ -18,9 +18,9 @@
|
||||
if(istype(O, /obj/item/weapon/antag_spawner/contract))
|
||||
var/obj/item/weapon/antag_spawner/contract/contract = O
|
||||
if(contract.used)
|
||||
user << "The contract has been used, you can't get your points back now."
|
||||
user << "<span class='warning'>The contract has been used, you can't get your points back now!</span>"
|
||||
else
|
||||
user << "You feed the contract back into the spellbook, refunding your points."
|
||||
user << "<span class='notice'>You feed the contract back into the spellbook, refunding your points.</span>"
|
||||
src.max_uses++
|
||||
src.uses++
|
||||
qdel(O)
|
||||
@@ -30,11 +30,11 @@
|
||||
|
||||
/obj/item/weapon/spellbook/attack_self(mob/user as mob)
|
||||
if(!owner)
|
||||
user << "You bind the spellbook to yourself."
|
||||
user << "<span class='notice'>You bind the spellbook to yourself.</span>"
|
||||
owner = user
|
||||
return
|
||||
if(user != owner)
|
||||
user << "The [name] does not recognize you as it's owner and refuses to open."
|
||||
user << "<span class='warning'>The [name] does not recognize you as it's owner and refuses to open!</span>"
|
||||
return
|
||||
user.set_machine(src)
|
||||
var/dat
|
||||
|
||||
@@ -10,6 +10,7 @@
|
||||
recommended_enemies = 1
|
||||
pre_setup_before_jobs = 1
|
||||
enemy_minimum_age = 14
|
||||
round_ends_with_antag_death = 1
|
||||
var/use_huds = 0
|
||||
var/finished = 0
|
||||
|
||||
@@ -171,37 +172,16 @@
|
||||
|
||||
/datum/game_mode/wizard/check_finished()
|
||||
|
||||
if(replacementmode && round_converted == 2)
|
||||
return replacementmode.check_finished()
|
||||
|
||||
if(round_converted == 1 || !wizards) //No reason to waste resources
|
||||
return ..() //Check for evacuation/nuke
|
||||
|
||||
for(var/datum/mind/wizard in wizards)
|
||||
if(!wizard.current)
|
||||
continue
|
||||
if(wizard.current.stat != DEAD)
|
||||
return ..()
|
||||
|
||||
for(var/datum/mind/traitor in traitors)
|
||||
if(!traitor.current)
|
||||
continue
|
||||
if(traitor.current.stat != DEAD)
|
||||
return ..()
|
||||
|
||||
if(!config.continuous["wizard"])
|
||||
return 1
|
||||
|
||||
if(SSevent.wizardmode) //If summon events was active, turn it off
|
||||
SSevent.toggleWizardmode()
|
||||
SSevent.resetFrequency()
|
||||
|
||||
if(config.midround_antag["wizard"])
|
||||
round_converted = convert_roundtype()
|
||||
if(!round_converted)
|
||||
finished = 1
|
||||
return 1
|
||||
|
||||
return ..()
|
||||
|
||||
/datum/game_mode/wizard/declare_completion()
|
||||
|
||||
@@ -43,7 +43,7 @@
|
||||
/obj/machinery/pdapainter/attackby(var/obj/item/O as obj, var/mob/user as mob, params)
|
||||
if(istype(O, /obj/item/device/pda))
|
||||
if(storedpda)
|
||||
user << "There is already a PDA inside."
|
||||
user << "<span class='warning'>There is already a PDA inside!</span>"
|
||||
return
|
||||
else
|
||||
var/obj/item/device/pda/P = usr.get_active_hand()
|
||||
|
||||
@@ -36,7 +36,7 @@
|
||||
else // trying to unlock the interface
|
||||
if (src.allowed(usr))
|
||||
locked = !locked
|
||||
user << "You [ locked ? "lock" : "unlock"] the device."
|
||||
user << "<span class='notice'>You [ locked ? "lock" : "unlock"] the device.</span>"
|
||||
if (locked)
|
||||
if (user.machine==src)
|
||||
user.unset_machine()
|
||||
|
||||
@@ -804,7 +804,7 @@ table tr:first-child th:first-child { border: none;}
|
||||
if(2)
|
||||
if(istype(W, /obj/item/weapon/wirecutters) && panel_open && (wires.wires_status == 27 || wires.wires_status == 31)) //this checks for all wires to be cut, except the syphon wire which is optional.
|
||||
playsound(src.loc, 'sound/items/Wirecutter.ogg', 50, 1)
|
||||
user << "You cut the final wires."
|
||||
user << "<span class='notice'>You cut the final wires.</span>"
|
||||
var/obj/item/stack/cable_coil/cable = new /obj/item/stack/cable_coil( src.loc )
|
||||
cable.amount = 5
|
||||
buildstage = 1
|
||||
@@ -814,7 +814,7 @@ table tr:first-child th:first-child { border: none;}
|
||||
if(istype(W, /obj/item/weapon/screwdriver)) // Opening that Air Alarm up.
|
||||
playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1)
|
||||
panel_open = !panel_open
|
||||
user << "The wires have been [panel_open ? "exposed" : "unexposed"]"
|
||||
user << "<span class='notice'>The wires have been [panel_open ? "exposed" : "unexposed"].</span>"
|
||||
update_icon()
|
||||
return
|
||||
|
||||
@@ -822,19 +822,19 @@ table tr:first-child th:first-child { border: none;}
|
||||
return src.attack_hand(user)
|
||||
else if (istype(W, /obj/item/weapon/card/id) || istype(W, /obj/item/device/pda))// trying to unlock the interface with an ID card
|
||||
if(stat & (NOPOWER|BROKEN))
|
||||
user << "It does nothing"
|
||||
user << "<span class='warning'>It does nothing!</span>"
|
||||
else
|
||||
if(src.allowed(usr) && !wires.IsIndexCut(AALARM_WIRE_IDSCAN))
|
||||
locked = !locked
|
||||
user << "<span class='notice'>You [ locked ? "lock" : "unlock"] the Air Alarm interface.</span>"
|
||||
user << "<span class='notice'>You [ locked ? "lock" : "unlock"] the air alarm interface.</span>"
|
||||
src.updateUsrDialog()
|
||||
else
|
||||
user << "<span class='warning'>Access denied.</span>"
|
||||
user << "<span class='danger'>Access denied.</span>"
|
||||
return
|
||||
if(1)
|
||||
if(istype(W, /obj/item/weapon/crowbar))
|
||||
user.visible_message("<span class='warning'>[user.name] removes the electronics from [src.name].</span>",\
|
||||
"You start prying out the circuit.")
|
||||
user.visible_message("[user.name] removes the electronics from [src.name].",\
|
||||
"<span class='notice'>You start prying out the circuit...</span>")
|
||||
playsound(src.loc, 'sound/items/Crowbar.ogg', 50, 1)
|
||||
if (do_after(user, 20))
|
||||
if (buildstage == 1)
|
||||
@@ -848,10 +848,10 @@ table tr:first-child th:first-child { border: none;}
|
||||
if(istype(W, /obj/item/stack/cable_coil))
|
||||
var/obj/item/stack/cable_coil/cable = W
|
||||
if(cable.get_amount() < 5)
|
||||
user << "<span class='warning'>You need five lengths of cable to wire the fire alarm.</span>"
|
||||
user << "<span class='warning'>You need five lengths of cable to wire the fire alarm!</span>"
|
||||
return
|
||||
user.visible_message("<span class='warning'>[user.name] wires the air alarm.</span>", \
|
||||
"You start wiring the air alarm.")
|
||||
user.visible_message("[user.name] wires the air alarm.", \
|
||||
"<span class='notice'>You start wiring the air alarm...</span>")
|
||||
if (do_after(user, 20))
|
||||
if (cable.get_amount() >= 5 && buildstage == 1)
|
||||
cable.use(5)
|
||||
@@ -867,7 +867,7 @@ table tr:first-child th:first-child { border: none;}
|
||||
return
|
||||
if(0)
|
||||
if(istype(W, /obj/item/weapon/airalarm_electronics))
|
||||
user << "You insert the circuit!"
|
||||
user << "<span class='notice'>You insert the circuit.</span>"
|
||||
buildstage = 1
|
||||
update_icon()
|
||||
user.drop_item()
|
||||
@@ -875,7 +875,7 @@ table tr:first-child th:first-child { border: none;}
|
||||
return
|
||||
|
||||
if(istype(W, /obj/item/weapon/wrench))
|
||||
user << "<span class='notice'>You detach \the [src] from the wall!</span>"
|
||||
user << "<span class='notice'>You detach \the [src] from the wall.</span>"
|
||||
playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1)
|
||||
new /obj/item/alarm_frame( user.loc )
|
||||
qdel(src)
|
||||
@@ -896,7 +896,7 @@ table tr:first-child th:first-child { border: none;}
|
||||
/obj/machinery/alarm/emag_act(mob/user as mob)
|
||||
if(!emagged)
|
||||
src.emagged = 1
|
||||
user.visible_message("<span class='warning'>Sparks fly out of the [src]!</span>", "<span class='warning'>You emag the [src], disabling its safeties.</span>")
|
||||
user.visible_message("<span class='warning'>Sparks fly out of the [src]!</span>", "<span class='notice'>You emag the [src], disabling its safeties.</span>")
|
||||
playsound(src.loc, 'sound/effects/sparks4.ogg', 50, 1)
|
||||
return
|
||||
|
||||
@@ -945,10 +945,10 @@ Code shamelessly copied from apc_frame
|
||||
var/turf/loc = get_turf(usr)
|
||||
var/area/A = loc.loc
|
||||
if (!istype(loc, /turf/simulated/floor))
|
||||
usr << "<span class='warning'>Air Alarm cannot be placed on this spot.</span>"
|
||||
usr << "<span class='warning'>Air Alarm cannot be placed on this spot!</span>"
|
||||
return
|
||||
if (A.requires_power == 0 || A.name == "Space")
|
||||
usr << "<span class='warning'>Air Alarm cannot be placed in this area.</span>"
|
||||
usr << "<span class='warning'>Air Alarm cannot be placed in this area!</span>"
|
||||
return
|
||||
|
||||
if(gotwallitem(loc, ndir))
|
||||
@@ -1025,7 +1025,7 @@ FIRE ALARM
|
||||
/obj/machinery/firealarm/emag_act(mob/user as mob)
|
||||
if(!emagged)
|
||||
src.emagged = 1
|
||||
user.visible_message("<span class='warning'>Sparks fly out of the [src]!</span>", "<span class='warning'>You emag the [src], disabling its thermal sensors.</span>")
|
||||
user.visible_message("<span class='warning'>Sparks fly out of the [src]!</span>", "<span class='notice'>You emag the [src], disabling its thermal sensors.</span>")
|
||||
playsound(src.loc, 'sound/effects/sparks4.ogg', 50, 1)
|
||||
return
|
||||
|
||||
@@ -1056,7 +1056,7 @@ FIRE ALARM
|
||||
if (istype(W, /obj/item/weapon/screwdriver) && buildstage == 2)
|
||||
playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1)
|
||||
panel_open = !panel_open
|
||||
user << "The wires have been [panel_open ? "exposed" : "unexposed"]"
|
||||
user << "<span class='notice'>The wires have been [panel_open ? "exposed" : "unexposed"].</span>"
|
||||
update_icon()
|
||||
return
|
||||
|
||||
@@ -1066,9 +1066,9 @@ FIRE ALARM
|
||||
if (istype(W, /obj/item/device/multitool))
|
||||
src.detecting = !( src.detecting )
|
||||
if (src.detecting)
|
||||
user.visible_message("<span class='warning'>[user] has reconnected [src]'s detecting unit!</span>", "<span class='warning'>You have reconnected [src]'s detecting unit.</span>")
|
||||
user.visible_message("[user] has reconnected [src]'s detecting unit!", "<span class='notice'>You reconnect [src]'s detecting unit.</span>")
|
||||
else
|
||||
user.visible_message("<span class='warning'>[user] has disconnected [src]'s detecting unit!</span>", "<span class='warning'>You have disconnected [src]'s detecting unit.</span>")
|
||||
user.visible_message("[user] has disconnected [src]'s detecting unit!", "<span class='notice'>You disconnect [src]'s detecting unit.</span>")
|
||||
|
||||
else if (istype(W, /obj/item/weapon/wirecutters))
|
||||
buildstage = 1
|
||||
@@ -1076,7 +1076,7 @@ FIRE ALARM
|
||||
var/obj/item/stack/cable_coil/coil = new /obj/item/stack/cable_coil()
|
||||
coil.amount = 5
|
||||
coil.loc = user.loc
|
||||
user << "<span class='notice'>You cut the wires from \the [src]</span>"
|
||||
user << "<span class='notice'>You cut the wires from \the [src].</span>"
|
||||
update_icon()
|
||||
if(1)
|
||||
if(istype(W, /obj/item/stack/cable_coil))
|
||||
@@ -1088,32 +1088,32 @@ FIRE ALARM
|
||||
coil.use(5)
|
||||
|
||||
buildstage = 2
|
||||
user << "<span class='notice'>You wire \the [src]!</span>"
|
||||
user << "<span class='notice'>You wire \the [src].</span>"
|
||||
update_icon()
|
||||
|
||||
else if(istype(W, /obj/item/weapon/crowbar))
|
||||
playsound(src.loc, 'sound/items/Crowbar.ogg', 50, 1)
|
||||
user.visible_message("<span class='warning'>[user.name] removes the electronics from [src.name].</span>", \
|
||||
"You start prying out the circuit.")
|
||||
user.visible_message("[user.name] removes the electronics from [src.name].", \
|
||||
"<span class='notice'>You start prying out the circuit...</span>")
|
||||
if(do_after(user, 20))
|
||||
if(buildstage == 1)
|
||||
if(stat & BROKEN)
|
||||
user << "<span class='notice'>You remove the destroyed circuit!</span>"
|
||||
user << "<span class='notice'>You remove the destroyed circuit.</span>"
|
||||
else
|
||||
user << "<span class='notice'>You pry out the circuit!</span>"
|
||||
user << "<span class='notice'>You pry out the circuit.</span>"
|
||||
new /obj/item/weapon/firealarm_electronics(user.loc)
|
||||
buildstage = 0
|
||||
update_icon()
|
||||
if(0)
|
||||
if(istype(W, /obj/item/weapon/firealarm_electronics))
|
||||
user << "<span class='notice'>You insert the circuit!</span>"
|
||||
user << "<span class='notice'>You insert the circuit.</span>"
|
||||
qdel(W)
|
||||
buildstage = 1
|
||||
update_icon()
|
||||
|
||||
else if(istype(W, /obj/item/weapon/wrench))
|
||||
user.visible_message("<span class='warning'>[user] removes the fire alarm assembly from the wall!</span>", \
|
||||
"<span class='notice'>You remove the fire alarm assembly from the wall!</span>")
|
||||
user.visible_message("[user] removes the fire alarm assembly from the wall.", \
|
||||
"<span class='notice'>You remove the fire alarm assembly from the wall.</span>")
|
||||
var/obj/item/firealarm_frame/frame = new /obj/item/firealarm_frame()
|
||||
frame.loc = user.loc
|
||||
playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1)
|
||||
|
||||
@@ -245,7 +245,7 @@ update_flag
|
||||
transfer_moles = pressure_delta*thejetpack.volume/(air_contents.temperature * R_IDEAL_GAS_EQUATION)//Actually transfer the gas
|
||||
var/datum/gas_mixture/removed = air_contents.remove(transfer_moles)
|
||||
thejetpack.merge(removed)
|
||||
user << "You pulse-pressurize your jetpack from the tank."
|
||||
user << "<span class='notice'>You pulse-pressurize your jetpack from the tank.</span>"
|
||||
return
|
||||
|
||||
..()
|
||||
|
||||
@@ -92,8 +92,8 @@
|
||||
if (do_after(user, 40))
|
||||
user.visible_message( \
|
||||
"[user] unfastens \the [src].", \
|
||||
"<span class='notice'>You have unfastened \the [src].</span>", \
|
||||
"You hear ratchet.")
|
||||
"<span class='notice'>You unfasten \the [src].</span>", \
|
||||
"<span class='italics'>You hear ratchet.</span>")
|
||||
new /obj/item/pipe_meter(src.loc)
|
||||
qdel(src)
|
||||
return
|
||||
|
||||
@@ -38,7 +38,7 @@
|
||||
name = "[name] (ID [id])"
|
||||
|
||||
attack_hand(var/mob/user as mob)
|
||||
usr << "<span class='notice'>You can't directly interact with this machine. Use the area atmos computer.</span>"
|
||||
usr << "<span class='warning'>You can't directly interact with this machine! Use the area atmos computer.</span>"
|
||||
|
||||
update_icon()
|
||||
src.overlays = 0
|
||||
@@ -51,7 +51,7 @@
|
||||
attackby(var/obj/item/weapon/W as obj, var/mob/user as mob)
|
||||
if(istype(W, /obj/item/weapon/wrench))
|
||||
if(on)
|
||||
user << "<span class='notice'>Turn it off first!</span>"
|
||||
user << "<span class='warning'>Turn it off first!</span>"
|
||||
return
|
||||
|
||||
anchored = !anchored
|
||||
@@ -67,7 +67,7 @@
|
||||
|
||||
attackby(var/obj/item/weapon/W as obj, var/mob/user as mob)
|
||||
if(istype(W, /obj/item/weapon/wrench))
|
||||
user << "<span class='notice'>The bolts are too tight for you to unscrew!</span>"
|
||||
user << "<span class='warning'>The bolts are too tight for you to unscrew!</span>"
|
||||
return
|
||||
|
||||
..()
|
||||
|
||||
@@ -143,14 +143,14 @@
|
||||
stack.use(amount)
|
||||
else
|
||||
if(!user.unEquip(O))
|
||||
user << "<span class='notice'>/the [O] is stuck to your hand, you can't put it in \the [src]!</span>"
|
||||
user << "<span class='warning'>/the [O] is stuck to your hand, you can't put it in \the [src]!</span>"
|
||||
O.loc = src
|
||||
icon_state = "autolathe"
|
||||
busy = 1
|
||||
use_power(max(1000, (m_amt+g_amt)*amount/10))
|
||||
src.m_amount += m_amt * amount
|
||||
src.g_amount += g_amt * amount
|
||||
user << "You insert [amount] sheet[amount>1 ? "s" : ""] to the autolathe."
|
||||
user << "<span class='notice'>You insert [amount] sheet[amount>1 ? "s" : ""] to the autolathe.</span>"
|
||||
if (O && O.loc == src)
|
||||
qdel(O)
|
||||
busy = 0
|
||||
|
||||
@@ -128,7 +128,7 @@
|
||||
if(locked) //First emag application unlocks the bot's interface. Apply a screwdriver to use the emag again.
|
||||
locked = 0
|
||||
emagged = 1
|
||||
user << "<span class='warning'>You bypass [src]'s controls.</span>"
|
||||
user << "<span class='notice'>You bypass [src]'s controls.</span>"
|
||||
if(!locked && open) //Bot panel is unlocked by ID or emag, and the panel is screwed open. Ready for emagging.
|
||||
emagged = 2
|
||||
remote_disabled = 1 //Manually emagging the bot locks out the AI built in panel.
|
||||
@@ -136,15 +136,15 @@
|
||||
bot_reset()
|
||||
turn_on() //The bot automatically turns on when emagged, unless recently hit with EMP.
|
||||
else //Bot is unlocked, but the maint panel has not been opened with a screwdriver yet.
|
||||
user << "<span class='notice'>You need to open maintenance panel first.</span>"
|
||||
user << "<span class='warning'>You need to open maintenance panel first!</span>"
|
||||
|
||||
/obj/machinery/bot/examine(mob/user)
|
||||
..()
|
||||
if (health < maxhealth)
|
||||
if (health > maxhealth/3)
|
||||
user << "<span class='danger'>[src]'s parts look loose.</span>"
|
||||
user << "[src]'s parts look loose."
|
||||
else
|
||||
user << "<span class='danger'>[src]'s parts look very loose.</span>"
|
||||
user << "[src]'s parts look very loose!"
|
||||
else
|
||||
user << "[src] is in pristine condition."
|
||||
|
||||
@@ -248,17 +248,17 @@
|
||||
user.changeNext_move(CLICK_CD_MELEE)
|
||||
if(istype(W, /obj/item/weapon/weldingtool) && user.a_intent != "harm")
|
||||
if(health >= maxhealth)
|
||||
user << "<span class='warning'>[src] does not need a repair.</span>"
|
||||
user << "<span class='warning'>[src] does not need a repair!</span>"
|
||||
return
|
||||
if(!open)
|
||||
user << "<span class='warning'>Unable to repair with the maintenance panel closed.</span>"
|
||||
user << "<span class='warning'>Unable to repair with the maintenance panel closed!</span>"
|
||||
return
|
||||
var/obj/item/weapon/weldingtool/WT = W
|
||||
if(WT.remove_fuel(0, user))
|
||||
health = min(maxhealth, health+10)
|
||||
user.visible_message("<span class='notice'>[user] repairs [src]!</span>","<span class='notice'>You repair [src]!</span>")
|
||||
user.visible_message("[user] repairs [src]!","<span class='notice'>You repair [src].</span>")
|
||||
else
|
||||
user << "<span class='warning'>The welder must be on for this task.</span>"
|
||||
user << "<span class='warning'>The welder must be on for this task!</span>"
|
||||
else
|
||||
if(W.force) //if force is non-zero
|
||||
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
|
||||
|
||||
@@ -267,7 +267,7 @@ Auto Patrol[]"},
|
||||
var/area/location = get_area(src)
|
||||
speak("[arrest_type ? "Detaining" : "Arresting"] level [threatlevel] scumbag <b>[target]</b> in [location].", radio_frequency)
|
||||
target.visible_message("<span class='danger'>[src] has stunned [target]!</span>",\
|
||||
"<span class='userdanger'>[src] has stunned [target]!</span></span>")
|
||||
"<span class='userdanger'>[src] has stunned you!</span>")
|
||||
|
||||
mode = BOT_PREP_ARREST
|
||||
anchored = 1
|
||||
@@ -297,7 +297,7 @@ Auto Patrol[]"},
|
||||
mode = BOT_ARREST
|
||||
playsound(loc, 'sound/weapons/cablecuff.ogg', 30, 1, -2)
|
||||
target.visible_message("<span class='danger'>[src] is trying to put zipties on [target]!</span>",\
|
||||
"<span class='userdanger'>[src] is trying to put zipties on [target]!</span>")
|
||||
"<span class='userdanger'>[src] is trying to put zipties on you!</span>")
|
||||
|
||||
spawn(60)
|
||||
if( !Adjacent(target) || !isturf(target.loc) ) //if he's in a closet or not adjacent, we cancel cuffing.
|
||||
@@ -585,7 +585,7 @@ Auto Patrol[]"},
|
||||
if(WT.remove_fuel(0,user))
|
||||
build_step++
|
||||
name = "shielded frame assembly"
|
||||
user << "<span class='notice'>You welded the vest to [src].</span>"
|
||||
user << "<span class='notice'>You weld the vest to [src].</span>"
|
||||
if(4)
|
||||
switch(lasercolor)
|
||||
if("b")
|
||||
@@ -622,7 +622,7 @@ Auto Patrol[]"},
|
||||
if(istype(W, /obj/item/stack/cable_coil))
|
||||
var/obj/item/stack/cable_coil/coil = W
|
||||
if (coil.get_amount() < 1)
|
||||
user << "<span class='warning'>You need one length of cable to wire the ED-209.</span>"
|
||||
user << "<span class='warning'>You need one length of cable to wire the ED-209!</span>"
|
||||
return
|
||||
user << "<span class='notice'>You start to wire [src]...</span>"
|
||||
if (do_after(user, 40))
|
||||
@@ -659,7 +659,7 @@ Auto Patrol[]"},
|
||||
if(istype(W, /obj/item/weapon/screwdriver))
|
||||
playsound(loc, 'sound/items/Screwdriver.ogg', 100, 1)
|
||||
var/turf/T = get_turf(user)
|
||||
user << "<span class='notice'>Now attaching the gun to the frame...</span>"
|
||||
user << "<span class='notice'>You start attaching the gun to the frame...</span>"
|
||||
sleep(40)
|
||||
if(get_turf(user) == T)
|
||||
build_step++
|
||||
|
||||
@@ -139,7 +139,7 @@
|
||||
nagged = 0
|
||||
updateicon()
|
||||
else
|
||||
user << "<span class='warning'>You need at least one floor tile to put into [src]</span>"
|
||||
user << "<span class='warning'>You need at least one floor tile to put into [src]!</span>"
|
||||
else if(istype(W, /obj/item/weapon/card/id)||istype(W, /obj/item/device/pda))
|
||||
if(allowed(user) && !open && !emagged)
|
||||
locked = !locked
|
||||
@@ -466,7 +466,7 @@ obj/machinery/bot/floorbot/process_scan(var/scan_target)
|
||||
..()
|
||||
return
|
||||
if(contents.len >= 1)
|
||||
user << "<span class='alert'>They won't fit in, as there is already stuff inside.</span>"
|
||||
user << "<span class='warning'>They won't fit in, as there is already stuff inside!</span>"
|
||||
return
|
||||
if(T.use(10))
|
||||
if(user.s_active)
|
||||
@@ -477,7 +477,7 @@ obj/machinery/bot/floorbot/process_scan(var/scan_target)
|
||||
user.unEquip(src, 1)
|
||||
qdel(src)
|
||||
else
|
||||
user << "<span class='alert'>You need 10 floor tiles to start building a floorbot.</span>"
|
||||
user << "<span class='warning'>You need 10 floor tiles to start building a floorbot!</span>"
|
||||
return
|
||||
|
||||
/obj/item/weapon/toolbox_tiles/attackby(var/obj/item/W, mob/user as mob, params)
|
||||
@@ -487,7 +487,7 @@ obj/machinery/bot/floorbot/process_scan(var/scan_target)
|
||||
var/obj/item/weapon/toolbox_tiles_sensor/B = new /obj/item/weapon/toolbox_tiles_sensor()
|
||||
B.created_name = created_name
|
||||
user.put_in_hands(B)
|
||||
user << "<span class='notice'>You add the sensor to the toolbox and tiles!</span>"
|
||||
user << "<span class='notice'>You add the sensor to the toolbox and tiles.</span>"
|
||||
user.unEquip(src, 1)
|
||||
qdel(src)
|
||||
|
||||
@@ -507,7 +507,7 @@ obj/machinery/bot/floorbot/process_scan(var/scan_target)
|
||||
var/turf/T = get_turf(user.loc)
|
||||
var/obj/machinery/bot/floorbot/A = new /obj/machinery/bot/floorbot(T)
|
||||
A.name = created_name
|
||||
user << "<span class='notice'>You add the robot arm to the odd looking toolbox assembly! Boop beep!</span>"
|
||||
user << "<span class='notice'>You add the robot arm to the odd looking toolbox assembly. Boop beep!</span>"
|
||||
user.unEquip(src, 1)
|
||||
qdel(src)
|
||||
else if (istype(W, /obj/item/weapon/pen))
|
||||
|
||||
@@ -234,16 +234,16 @@
|
||||
if(emagged)
|
||||
user << "<span class='warning'>ERROR</span>"
|
||||
if(open)
|
||||
user << "<span class='warning'>Please close the access panel before locking it.</span>"
|
||||
user << "<span class='warning'>Please close the access panel before locking it!</span>"
|
||||
else
|
||||
user << "<span class='warning'>Access denied.</span>"
|
||||
|
||||
else if (istype(W, /obj/item/weapon/reagent_containers/glass))
|
||||
if(locked)
|
||||
user << "<span class='notice'>You cannot insert a beaker because the panel is locked.</span>"
|
||||
user << "<span class='warning'>You cannot insert a beaker because the panel is locked!</span>"
|
||||
return
|
||||
if(!isnull(reagent_glass))
|
||||
user << "<span class='notice'>There is already a beaker loaded.</span>"
|
||||
user << "<span class='warning'>There is already a beaker loaded!</span>"
|
||||
return
|
||||
|
||||
user.drop_item()
|
||||
@@ -264,7 +264,7 @@
|
||||
if(emagged == 2)
|
||||
declare_crit = 0
|
||||
if(user)
|
||||
user << "<span class='warning'>You short out [src]'s reagent synthesis circuits.</span>"
|
||||
user << "<span class='notice'>You short out [src]'s reagent synthesis circuits.</span>"
|
||||
spawn(0)
|
||||
audible_message("<span class='danger'>[src] buzzes oddly!</span>")
|
||||
flick("medibot_spark", src)
|
||||
@@ -482,7 +482,7 @@
|
||||
return
|
||||
else
|
||||
C.visible_message("<span class='danger'>[src] is trying to inject [patient]!</span>", \
|
||||
"<span class='userdanger'>[src] is trying to inject [patient]!</span>")
|
||||
"<span class='userdanger'>[src] is trying to inject you!</span>")
|
||||
|
||||
spawn(30)
|
||||
if ((get_dist(src, patient) <= 1) && (on))
|
||||
@@ -492,8 +492,8 @@
|
||||
reagent_glass.reagents.reaction(patient, INGEST)
|
||||
else
|
||||
patient.reagents.add_reagent(reagent_id,injection_amount)
|
||||
C.visible_message("<span class='danger'>[src] injects [patient] with the syringe!</span>", \
|
||||
"<span class='userdanger'>[src] injects [patient] with the syringe!</span>")
|
||||
C.visible_message("<span class='danger'>[src] injects [patient] with its syringe!</span>", \
|
||||
"<span class='userdanger'>[src] injects you with its syringe!</span>")
|
||||
patient = null
|
||||
|
||||
mode = BOT_IDLE
|
||||
@@ -553,7 +553,7 @@
|
||||
|
||||
//Making a medibot!
|
||||
if(contents.len >= 1)
|
||||
user << "<span class='notice'>You need to empty [src] out first.</span>"
|
||||
user << "<span class='warning'>You need to empty [src] out first!</span>"
|
||||
return
|
||||
|
||||
var/obj/item/weapon/firstaid_arm_assembly/A = new /obj/item/weapon/firstaid_arm_assembly
|
||||
@@ -598,7 +598,7 @@
|
||||
user.drop_item()
|
||||
qdel(W)
|
||||
build_step++
|
||||
user << "<span class='notice'>You complete the Medibot! Beep boop.</span>"
|
||||
user << "<span class='notice'>You complete the Medibot. Beep boop!</span>"
|
||||
var/turf/T = get_turf(src)
|
||||
var/obj/machinery/bot/medbot/S = new /obj/machinery/bot/medbot(T)
|
||||
S.skin = skin
|
||||
|
||||
@@ -98,7 +98,7 @@ obj/machinery/bot/mulebot/bot_reset()
|
||||
updateDialog()
|
||||
else if(istype(I,/obj/item/weapon/screwdriver))
|
||||
if(locked)
|
||||
user << "<span class='notice'>The maintenance hatch cannot be opened or closed while the controls are locked.</span>"
|
||||
user << "<span class='warning'>The maintenance hatch cannot be opened or closed while the controls are locked!</span>"
|
||||
return
|
||||
|
||||
open = !open
|
||||
@@ -115,8 +115,8 @@ obj/machinery/bot/mulebot/bot_reset()
|
||||
if (health < maxhealth)
|
||||
health = min(maxhealth, health+25)
|
||||
user.visible_message(
|
||||
"<span class='notice'>[user] repairs [src]!</span>",
|
||||
"<span class='notice'>You repair [src]!</span>"
|
||||
"[user] repairs [src]!",
|
||||
"<span class='notice'>You repair [src].</span>"
|
||||
)
|
||||
else
|
||||
user << "<span class='notice'> [src] does not need a repair!</span>"
|
||||
@@ -128,7 +128,7 @@ obj/machinery/bot/mulebot/bot_reset()
|
||||
unload(0)
|
||||
user.visible_message("<span class='danger'> [user] knocks [load] off [src] with \the [I]!</span>", "<span class='danger'> You knock [load] off [src] with \the [I]!</span>")
|
||||
else
|
||||
user << "You hit [src] with \the [I] but to no effect."
|
||||
user << "<span class='warning'>You hit [src] with \the [I] but to no effect!</span>"
|
||||
else
|
||||
..()
|
||||
return
|
||||
@@ -266,7 +266,7 @@ obj/machinery/bot/mulebot/bot_reset()
|
||||
turn_off()
|
||||
else if (cell && !open)
|
||||
if (!turn_on())
|
||||
usr << "<span class='danger'>You can't switch on [src].</span>"
|
||||
usr << "<span class='warning'>You can't switch on [src]!</span>"
|
||||
return
|
||||
else
|
||||
return
|
||||
@@ -281,7 +281,7 @@ obj/machinery/bot/mulebot/bot_reset()
|
||||
cell.add_fingerprint(usr)
|
||||
cell = null
|
||||
|
||||
usr.visible_message("<span class='notice'>[usr] removes the power cell from [src].</span>", "<span class='notice'>You remove the power cell from [src].</span>")
|
||||
usr.visible_message("[usr] removes the power cell from [src].", "<span class='notice'>You remove the power cell from [src].</span>")
|
||||
updateDialog()
|
||||
|
||||
if("cellinsert")
|
||||
@@ -293,7 +293,7 @@ obj/machinery/bot/mulebot/bot_reset()
|
||||
C.loc = src
|
||||
C.add_fingerprint(usr)
|
||||
|
||||
usr.visible_message("<span class='notice'>[usr] inserts a power cell into [src].</span>", "<span class='notice'>You insert the power cell into [src].</span>")
|
||||
usr.visible_message("[usr] inserts a power cell into [src].", "<span class='notice'>You insert the power cell into [src].</span>")
|
||||
updateDialog()
|
||||
|
||||
|
||||
@@ -399,7 +399,7 @@ obj/machinery/bot/mulebot/bot_reset()
|
||||
// called to load a crate
|
||||
/obj/machinery/bot/mulebot/proc/load(var/atom/movable/C)
|
||||
if(wires.LoadCheck() && !istype(C,/obj/structure/closet/crate))
|
||||
visible_message("[src] makes a sighing buzz.", "You hear an electronic buzzing sound.")
|
||||
visible_message("[src] makes a sighing buzz.", "<span class='italics'>You hear an electronic buzzing sound.</span>")
|
||||
playsound(loc, 'sound/machines/buzz-sigh.ogg', 50, 0)
|
||||
return // if not emagged, only allow crates to be loaded
|
||||
|
||||
@@ -593,25 +593,25 @@ obj/machinery/bot/mulebot/bot_reset()
|
||||
blockcount++
|
||||
mode = BOT_BLOCKED
|
||||
if(blockcount == 3)
|
||||
visible_message("[src] makes an annoyed buzzing sound.", "You hear an electronic buzzing sound.")
|
||||
visible_message("[src] makes an annoyed buzzing sound.", "<span class='italics'>You hear an electronic buzzing sound.</span>")
|
||||
playsound(loc, 'sound/machines/buzz-two.ogg', 50, 0)
|
||||
|
||||
if(blockcount > 10) // attempt 10 times before recomputing
|
||||
// find new path excluding blocked turf
|
||||
visible_message("[src] makes a sighing buzz.", "You hear an electronic buzzing sound.")
|
||||
visible_message("[src] makes a sighing buzz.", "<span class='italics'>You hear an electronic buzzing sound.</span>")
|
||||
playsound(loc, 'sound/machines/buzz-sigh.ogg', 50, 0)
|
||||
|
||||
spawn(2)
|
||||
calc_path(next)
|
||||
if(path.len > 0)
|
||||
visible_message("[src] makes a delighted ping!", "You hear a ping.")
|
||||
visible_message("[src] makes a delighted ping!", "<span class='italics'>You hear a ping.</span>")
|
||||
playsound(loc, 'sound/machines/ping.ogg', 50, 0)
|
||||
mode = BOT_BLOCKED
|
||||
mode = BOT_WAIT_FOR_NAV
|
||||
return
|
||||
return
|
||||
else
|
||||
visible_message("[src] makes an annoyed buzzing sound.", "You hear an electronic buzzing sound.")
|
||||
visible_message("[src] makes an annoyed buzzing sound.", "<span class='italics'>You hear an electronic buzzing sound.</span>")
|
||||
playsound(loc, 'sound/machines/buzz-two.ogg', 50, 0)
|
||||
//world << "Bad turf."
|
||||
mode = BOT_NAV
|
||||
@@ -631,11 +631,11 @@ obj/machinery/bot/mulebot/bot_reset()
|
||||
if(path.len > 0)
|
||||
blockcount = 0
|
||||
mode = BOT_BLOCKED
|
||||
visible_message("[src] makes a delighted ping!", "You hear a ping.")
|
||||
visible_message("[src] makes a delighted ping!", "<span class='italics'>You hear a ping.</span>")
|
||||
playsound(loc, 'sound/machines/ping.ogg', 50, 0)
|
||||
|
||||
else
|
||||
visible_message("[src] makes a sighing buzz.", "You hear an electronic buzzing sound.")
|
||||
visible_message("[src] makes a sighing buzz.", "<span class='italics'>You hear an electronic buzzing sound.</span>")
|
||||
playsound(loc, 'sound/machines/buzz-sigh.ogg', 50, 0)
|
||||
|
||||
mode = BOT_NO_ROUTE
|
||||
@@ -682,7 +682,7 @@ obj/machinery/bot/mulebot/bot_reset()
|
||||
/obj/machinery/bot/mulebot/proc/at_target()
|
||||
if(!reached_target)
|
||||
radio_frequency = SUPP_FREQ //Supply channel
|
||||
visible_message("[src] makes a chiming sound!", "You hear a chime.")
|
||||
visible_message("[src] makes a chiming sound!", "<span class='italics'>You hear a chime.</span>")
|
||||
playsound(loc, 'sound/machines/chime.ogg', 50, 0)
|
||||
reached_target = 1
|
||||
|
||||
|
||||
@@ -230,7 +230,7 @@ Auto Patrol: []"},
|
||||
var/area/location = get_area(src)
|
||||
speak("[arrest_type ? "Detaining" : "Arresting"] level [threatlevel] scumbag <b>[target]</b> in [location].", radio_frequency)
|
||||
target.visible_message("<span class='danger'>[src] has stunned [target]!</span>",\
|
||||
"<span class='userdanger'>[src] has stunned [target]!</span>")
|
||||
"<span class='userdanger'>[src] has stunned you!</span>")
|
||||
|
||||
mode = BOT_PREP_ARREST
|
||||
anchored = 1
|
||||
@@ -260,7 +260,7 @@ Auto Patrol: []"},
|
||||
mode = BOT_ARREST
|
||||
playsound(loc, 'sound/weapons/cablecuff.ogg', 30, 1, -2)
|
||||
target.visible_message("<span class='danger'>[src] is trying to put zipties on [target]!</span>",\
|
||||
"<span class='userdanger'>[src] is trying to put zipties on [target]!</span>")
|
||||
"<span class='userdanger'>[src] is trying to put zipties on you!</span>")
|
||||
spawn(60)
|
||||
if( !Adjacent(target) || !isturf(target.loc) ) //if he's in a closet or not adjacent, we cancel cuffing.
|
||||
return
|
||||
@@ -395,10 +395,10 @@ Auto Patrol: []"},
|
||||
return
|
||||
|
||||
if(!helmetCam) //I am so sorry for this. I could not think of a less terrible (and lazy) way.
|
||||
user << "[src] needs to have a camera attached first."
|
||||
user << "<span class='warning'>[src] needs to have a camera attached first!</span>"
|
||||
return
|
||||
if(F) //Has a flashlight. Player must remove it, else it will be lost forever.
|
||||
user << "The mounted flashlight is in the way, remove it first."
|
||||
user << "<span class='warning'>The mounted flashlight is in the way, remove it first!</span>"
|
||||
return
|
||||
|
||||
if(S.secured)
|
||||
|
||||
@@ -133,7 +133,7 @@
|
||||
//user << "<span class='notice'>You start to [panel_open ? "close" : "open"] the camera's panel.</span>"
|
||||
//if(toggle_panel(user)) // No delay because no one likes screwdrivers trying to be hip and have a duration cooldown
|
||||
panel_open = !panel_open
|
||||
user.visible_message("<span class='warning'>[user] screws the camera's panel [panel_open ? "open" : "closed"]!</span>",
|
||||
user.visible_message("[user] screws the camera's panel [panel_open ? "open" : "closed"]!",
|
||||
"<span class='notice'>You screw the camera's panel [panel_open ? "open" : "closed"].</span>")
|
||||
playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1)
|
||||
|
||||
@@ -142,7 +142,7 @@
|
||||
|
||||
else if(istype(W, /obj/item/weapon/weldingtool) && wires.CanDeconstruct())
|
||||
if(weld(W, user))
|
||||
user << "You unweld the camera leaving it as just a frame screwed to the wall."
|
||||
user << "<span class='notice'>You unweld the camera leaving it as just a frame screwed to the wall.</span>"
|
||||
if(!assembly)
|
||||
assembly = new()
|
||||
assembly.loc = src.loc
|
||||
@@ -191,7 +191,7 @@
|
||||
P = W
|
||||
itemname = P.name
|
||||
info = P.notehtml
|
||||
U << "You hold \the [itemname] up to the camera ..."
|
||||
U << "<span class='notice'>You hold \the [itemname] up to the camera...</span>"
|
||||
U.changeNext_move(CLICK_CD_MELEE)
|
||||
for(var/mob/O in player_list)
|
||||
if(istype(O, /mob/living/silicon/ai))
|
||||
@@ -321,7 +321,7 @@
|
||||
if(!WT.remove_fuel(0, user))
|
||||
return 0
|
||||
|
||||
user << "<span class='notice'>You start to weld [src].</span>"
|
||||
user << "<span class='notice'>You start to weld [src]...</span>"
|
||||
playsound(src.loc, 'sound/items/Welder.ogg', 50, 1)
|
||||
busy = 1
|
||||
if(do_after(user, 100))
|
||||
|
||||
@@ -30,7 +30,7 @@
|
||||
// State 0
|
||||
if(istype(W, /obj/item/weapon/wrench) && isturf(src.loc))
|
||||
playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1)
|
||||
user << "You wrench the assembly into place."
|
||||
user << "<span class='notice'>You wrench the assembly into place.</span>"
|
||||
anchored = 1
|
||||
state = 1
|
||||
update_icon()
|
||||
@@ -41,14 +41,14 @@
|
||||
// State 1
|
||||
if(istype(W, /obj/item/weapon/weldingtool))
|
||||
if(weld(W, user))
|
||||
user << "You weld the assembly securely into place."
|
||||
user << "<span class='notice'>You weld the assembly securely into place.</span>"
|
||||
anchored = 1
|
||||
state = 2
|
||||
return
|
||||
|
||||
else if(istype(W, /obj/item/weapon/wrench))
|
||||
playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1)
|
||||
user << "You unattach the assembly from its place."
|
||||
user << "<span class='notice'>You unattach the assembly from its place.</span>"
|
||||
anchored = 0
|
||||
update_icon()
|
||||
state = 0
|
||||
@@ -62,14 +62,14 @@
|
||||
user << "<span class='notice'>You add wires to the assembly.</span>"
|
||||
state = 3
|
||||
else
|
||||
user << "<span class='warning'>You need two lengths of cable to wire a camera.</span>"
|
||||
user << "<span class='warning'>You need two lengths of cable to wire a camera!</span>"
|
||||
return
|
||||
return
|
||||
|
||||
else if(istype(W, /obj/item/weapon/weldingtool))
|
||||
|
||||
if(weld(W, user))
|
||||
user << "You unweld the assembly from its place."
|
||||
user << "<span class='notice'>You unweld the assembly from its place.</span>"
|
||||
state = 1
|
||||
anchored = 1
|
||||
return
|
||||
@@ -82,12 +82,12 @@
|
||||
|
||||
var/input = stripped_input(usr, "Which networks would you like to connect this camera to? Seperate networks with a comma. No Spaces!\nFor example: SS13,Security,Secret ", "Set Network", "SS13")
|
||||
if(!input)
|
||||
usr << "No input found please hang up and try your call again."
|
||||
usr << "<span class='warning'>No input found, please hang up and try your call again!</span>"
|
||||
return
|
||||
|
||||
var/list/tempnetwork = text2list(input, ",")
|
||||
if(tempnetwork.len < 1)
|
||||
usr << "No network found please hang up and try your call again."
|
||||
usr << "<span class='warning'>No network found, please hang up and try your call again!</span>"
|
||||
return
|
||||
|
||||
state = 4
|
||||
@@ -115,13 +115,13 @@
|
||||
|
||||
new/obj/item/stack/cable_coil(get_turf(src), 2)
|
||||
playsound(src.loc, 'sound/items/Wirecutter.ogg', 50, 1)
|
||||
user << "You cut the wires from the circuits."
|
||||
user << "<span class='notice'>You cut the wires from the circuits.</span>"
|
||||
state = 2
|
||||
return
|
||||
|
||||
// Upgrades!
|
||||
if(is_type_in_list(W, possible_upgrades) && !is_type_in_list(W, upgrades)) // Is a possible upgrade and isn't in the camera already.
|
||||
user << "You attach \the [W] into the assembly inner circuits."
|
||||
user << "<span class='notice'>You attach \the [W] into the assembly inner circuits.</span>"
|
||||
upgrades += W
|
||||
user.drop_item()
|
||||
W.loc = src
|
||||
@@ -131,7 +131,7 @@
|
||||
else if(istype(W, /obj/item/weapon/crowbar) && upgrades.len)
|
||||
var/obj/U = locate(/obj) in upgrades
|
||||
if(U)
|
||||
user << "You unattach an upgrade from the assembly."
|
||||
user << "<span class='notice'>You unattach an upgrade from the assembly.</span>"
|
||||
playsound(src.loc, 'sound/items/Crowbar.ogg', 50, 1)
|
||||
U.loc = get_turf(src)
|
||||
upgrades -= U
|
||||
@@ -156,7 +156,7 @@
|
||||
if(!WT.remove_fuel(0, user))
|
||||
return 0
|
||||
|
||||
user << "<span class='notice'>You start to weld \the [src]..</span>"
|
||||
user << "<span class='notice'>You start to weld \the [src]...</span>"
|
||||
playsound(src.loc, 'sound/items/Welder.ogg', 50, 1)
|
||||
busy = 1
|
||||
if(do_after(user, 20))
|
||||
|
||||
@@ -38,25 +38,25 @@
|
||||
|
||||
if(istype(W, /obj/item/weapon/stock_parts/cell) && anchored)
|
||||
if(charging)
|
||||
user << "<span class='danger'>There is already a cell in the charger.</span>"
|
||||
user << "<span class='warning'>There is already a cell in the charger!</span>"
|
||||
return
|
||||
else
|
||||
var/area/a = loc.loc // Gets our locations location, like a dream within a dream
|
||||
if(!isarea(a))
|
||||
return
|
||||
if(a.power_equip == 0) // There's no APC in this area, don't try to cheat power!
|
||||
user << "<span class='danger'>The [name] blinks red as you try to insert the cell!</span>"
|
||||
user << "<span class='warning'>The [name] blinks red as you try to insert the cell!</span>"
|
||||
return
|
||||
|
||||
user.drop_item()
|
||||
W.loc = src
|
||||
charging = W
|
||||
user.visible_message("<span class='notice'>[user] inserts a cell into the charger.</span>", "<span class='notice'>You insert a cell into the charger.</span>")
|
||||
user.visible_message("[user] inserts a cell into the charger.", "<span class='notice'>You insert a cell into the charger.</span>")
|
||||
chargelevel = -1
|
||||
updateicon()
|
||||
else if(istype(W, /obj/item/weapon/wrench))
|
||||
if(charging)
|
||||
user << "<span class='danger'>Remove the cell first!</span>"
|
||||
user << "<span class='warning'>Remove the cell first!</span>"
|
||||
return
|
||||
|
||||
anchored = !anchored
|
||||
@@ -76,7 +76,7 @@
|
||||
user.put_in_hands(charging)
|
||||
charging.add_fingerprint(user)
|
||||
|
||||
user.visible_message("<span class='notice'>[user] removes the cell from the charger.</span>", "<span class='notice'>You remove the cell from the charger.</span>")
|
||||
user.visible_message("[user] removes the cell from the charger.", "<span class='notice'>You remove the cell from the charger.</span>")
|
||||
|
||||
removecell()
|
||||
|
||||
|
||||
@@ -83,7 +83,7 @@
|
||||
|
||||
/obj/item/weapon/disk/data/attack_self(mob/user as mob)
|
||||
read_only = !read_only
|
||||
user << "You flip the write-protect tab to [src.read_only ? "protected" : "unprotected"]."
|
||||
user << "<span class='notice'>You flip the write-protect tab to [src.read_only ? "protected" : "unprotected"].</span>"
|
||||
|
||||
/obj/item/weapon/disk/data/examine(mob/user)
|
||||
..()
|
||||
@@ -270,7 +270,7 @@
|
||||
/obj/machinery/clonepod/emag_act(user as mob)
|
||||
if (isnull(src.occupant))
|
||||
return
|
||||
user << "You force an emergency ejection."
|
||||
user << "<span class='notice'>You force an emergency ejection.</span>"
|
||||
src.locked = 0
|
||||
src.go_out()
|
||||
|
||||
|
||||
@@ -308,7 +308,7 @@
|
||||
if (istype(W, /obj/item/weapon/grab) && get_dist(src,user)<2)
|
||||
var/obj/item/weapon/grab/G = W
|
||||
if(G.state < GRAB_AGGRESSIVE)
|
||||
user << "<span class='danger'> You need a better grip to do that!</span>"
|
||||
user << "<span class='warning'> You need a better grip to do that!</span>"
|
||||
return
|
||||
G.affecting.loc = src.loc
|
||||
G.affecting.Weaken(5)
|
||||
@@ -427,7 +427,7 @@
|
||||
if (istype(W, /obj/item/weapon/grab) && get_dist(src,user)<2)
|
||||
var/obj/item/weapon/grab/G = W
|
||||
if(G.state < GRAB_AGGRESSIVE)
|
||||
user << "<span class='danger'>You need a better grip to do that!</span>"
|
||||
user << "<span class='warning'>You need a better grip to do that!</span>"
|
||||
return
|
||||
G.affecting.loc = src.loc
|
||||
G.affecting.Weaken(5)
|
||||
@@ -474,7 +474,7 @@
|
||||
return
|
||||
|
||||
/obj/machinery/readybutton/attack_paw(mob/user as mob)
|
||||
user << "You are too primitive to use this device"
|
||||
user << "<span class='warning'>You are too primitive to use this device!</span>"
|
||||
return
|
||||
|
||||
/obj/machinery/readybutton/New()
|
||||
@@ -486,7 +486,7 @@
|
||||
|
||||
/obj/machinery/readybutton/attack_hand(mob/user as mob)
|
||||
if(user.stat || stat & (NOPOWER|BROKEN))
|
||||
user << "This device is not powered."
|
||||
user << "<span class='warning'>This device is not powered!</span>"
|
||||
return
|
||||
|
||||
currentarea = get_area(src.loc)
|
||||
@@ -494,7 +494,7 @@
|
||||
qdel(src)
|
||||
|
||||
if(eventstarted)
|
||||
usr << "The event has already begun!"
|
||||
usr << "<span class='warning'>The event has already begun!</span>"
|
||||
return
|
||||
|
||||
ready = !ready
|
||||
|
||||
@@ -15,6 +15,7 @@
|
||||
if(0)
|
||||
if(istype(P, /obj/item/weapon/wrench))
|
||||
playsound(loc, 'sound/items/Ratchet.ogg', 50, 1)
|
||||
user << "<span class='notice'>You start wrenching the frame into place...</span>"
|
||||
if(do_after(user, 20))
|
||||
user << "<span class='notice'>You wrench the frame into place.</span>"
|
||||
anchored = 1
|
||||
@@ -22,9 +23,10 @@
|
||||
if(istype(P, /obj/item/weapon/weldingtool))
|
||||
var/obj/item/weapon/weldingtool/WT = P
|
||||
if(!WT.isOn())
|
||||
user << "<span class='warning'>The welder must be on for this task.</span>"
|
||||
user << "<span class='warning'>The welder must be on for this task!</span>"
|
||||
return
|
||||
playsound(loc, 'sound/items/Welder.ogg', 50, 1)
|
||||
user << "<span class='notice'>You start to deconstruct the frame...</span>"
|
||||
if(do_after(user, 20))
|
||||
if(!src || !WT.remove_fuel(0, user)) return
|
||||
user << "<span class='notice'>You deconstruct the frame.</span>"
|
||||
@@ -33,6 +35,7 @@
|
||||
if(1)
|
||||
if(istype(P, /obj/item/weapon/wrench))
|
||||
playsound(loc, 'sound/items/Ratchet.ogg', 50, 1)
|
||||
user << "<span class='notice'>You start to unfasten the frame...</span>"
|
||||
if(do_after(user, 20))
|
||||
user << "<span class='notice'>You unfasten the frame.</span>"
|
||||
anchored = 0
|
||||
@@ -66,6 +69,7 @@
|
||||
var/obj/item/stack/cable_coil/C = P
|
||||
if(C.get_amount() >= 5)
|
||||
playsound(loc, 'sound/items/Deconstruct.ogg', 50, 1)
|
||||
user << "<span class='notice'>You start to add cables to the frame...</span>"
|
||||
if(do_after(user, 20))
|
||||
if (C.get_amount() >= 5 && state == 2)
|
||||
C.use(5)
|
||||
@@ -73,12 +77,12 @@
|
||||
state = 3
|
||||
icon_state = "3"
|
||||
else
|
||||
user << "<span class='warning'>You need five lengths of cable to wire the AI core.</span>"
|
||||
user << "<span class='warning'>You need five lengths of cable to wire the AI core!</span>"
|
||||
return
|
||||
if(3)
|
||||
if(istype(P, /obj/item/weapon/wirecutters))
|
||||
if (brain)
|
||||
user << "<span class='warning'>Get that brain out of there first.</span>"
|
||||
user << "<span class='warning'>Get that brain out of there first!</span>"
|
||||
else
|
||||
playsound(loc, 'sound/items/Wirecutter.ogg', 50, 1)
|
||||
user << "<span class='notice'>You remove the cables.</span>"
|
||||
@@ -91,6 +95,7 @@
|
||||
var/obj/item/stack/sheet/rglass/G = P
|
||||
if(G.get_amount() >= 2)
|
||||
playsound(loc, 'sound/items/Deconstruct.ogg', 50, 1)
|
||||
user << "<span class='notice'>You start to put in the glass panel...</span>"
|
||||
if(do_after(user, 20))
|
||||
if (G.get_amount() >= 2 && state == 3)
|
||||
G.use(2)
|
||||
@@ -98,7 +103,7 @@
|
||||
state = 4
|
||||
icon_state = "4"
|
||||
else
|
||||
user << "<span class='warning'>You need two sheets of reinforced glass to insert them into AI core.</span>"
|
||||
user << "<span class='warning'>You need two sheets of reinforced glass to insert them into AI core!</span>"
|
||||
return
|
||||
|
||||
if(istype(P, /obj/item/weapon/aiModule/core/full)) //Allows any full core boards to be applied to AI cores.
|
||||
@@ -123,22 +128,22 @@
|
||||
if(istype(P, /obj/item/device/mmi))
|
||||
var/obj/item/device/mmi/M = P
|
||||
if(!M.brainmob)
|
||||
user << "<span class='warning'>Sticking an empty MMI into the frame would sort of defeat the purpose.</span>"
|
||||
user << "<span class='warning'>Sticking an empty MMI into the frame would sort of defeat the purpose!</span>"
|
||||
return
|
||||
if(M.brainmob.stat == 2)
|
||||
user << "<span class='warning'>Sticking a dead brain into the frame would sort of defeat the purpose.</span>"
|
||||
user << "<span class='warning'>Sticking a dead brain into the frame would sort of defeat the purpose!</span>"
|
||||
return
|
||||
|
||||
if((config) && (!config.allow_ai))
|
||||
user << "<span class='warning'>This MMI does not seem to fit.</span>"
|
||||
user << "<span class='warning'>This MMI does not seem to fit!</span>"
|
||||
return
|
||||
|
||||
if(jobban_isbanned(M.brainmob, "AI"))
|
||||
user << "<span class='warning'>This MMI does not seem to fit.</span>"
|
||||
user << "<span class='warning'>This MMI does not seem to fit!</span>"
|
||||
return
|
||||
|
||||
if(!M.brainmob.mind)
|
||||
user << "<span class='warning'>This MMI is mindless.</span>"
|
||||
user << "<span class='warning'>This MMI is mindless!</span>"
|
||||
return
|
||||
|
||||
ticker.mode.remove_cultist(M.brainmob.mind, 1)
|
||||
@@ -193,10 +198,12 @@
|
||||
A.transfer_ai("INACTIVE","AICARD",src,user)
|
||||
if(istype(A, /obj/item/weapon/wrench))
|
||||
playsound(loc, 'sound/items/Ratchet.ogg', 50, 1)
|
||||
user.visible_message("[user] [anchored ? "fastens" : "unfastens"] [src].", \
|
||||
"<span class='notice'>You start to [anchored ? "fasten [src] to" : "unfasten [src] from"] the floor...</span>")
|
||||
switch(anchored)
|
||||
if(0)
|
||||
if(do_after(user, 20))
|
||||
user << "<span class='notice'>You wrench the core into place.</span>"
|
||||
user << "<span class='notice'>You fasten the core into place.</span>"
|
||||
anchored = 1
|
||||
if(1)
|
||||
if(do_after(user, 20))
|
||||
|
||||
@@ -31,7 +31,8 @@
|
||||
/obj/item/toy/foamblade = 2,
|
||||
/obj/item/toy/redbutton = 2,
|
||||
/obj/item/toy/owl = 2,
|
||||
/obj/item/toy/griffin = 2
|
||||
/obj/item/toy/griffin = 2,
|
||||
/obj/item/weapon/coin/antagtoken = 2,
|
||||
)
|
||||
|
||||
/obj/machinery/computer/arcade/New()
|
||||
|
||||
@@ -303,31 +303,31 @@
|
||||
if(0)
|
||||
if(istype(P, /obj/item/weapon/wrench))
|
||||
playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1)
|
||||
user << "<span class='notice'>You start wrenching the frame into place.</span>"
|
||||
user << "<span class='notice'>You start wrenching the frame into place...</span>"
|
||||
if(do_after(user, 20))
|
||||
user << "<span class='notice'>You've wrenched the frame into place.</span>"
|
||||
user << "<span class='notice'>You wrench the frame into place.</span>"
|
||||
anchored = 1
|
||||
state = 1
|
||||
if(istype(P, /obj/item/weapon/weldingtool))
|
||||
var/obj/item/weapon/weldingtool/WT = P
|
||||
if(!WT.remove_fuel(0, user))
|
||||
if(!WT.isOn())
|
||||
user << "<span class='warning'>The welding tool must be on to complete this task.</span>"
|
||||
user << "<span class='warning'>The welding tool must be on to complete this task!</span>"
|
||||
return
|
||||
playsound(src.loc, 'sound/items/Welder.ogg', 50, 1)
|
||||
user << "<span class='notice'>You start deconstructing the frame.</span>"
|
||||
user << "<span class='notice'>You start deconstructing the frame...</span>"
|
||||
if(do_after(user, 20))
|
||||
if(!src || !WT.isOn()) return
|
||||
user << "<span class='notice'>You've deconstructed the frame.</span>"
|
||||
user << "<span class='notice'>You deconstruct the frame.</span>"
|
||||
var/obj/item/stack/sheet/metal/M = new (loc, 5)
|
||||
M.add_fingerprint(user)
|
||||
qdel(src)
|
||||
if(1)
|
||||
if(istype(P, /obj/item/weapon/wrench))
|
||||
playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1)
|
||||
user << "<span class='notice'>You start to unfasten the frame.</span>"
|
||||
user << "<span class='notice'>You start to unfasten the frame...</span>"
|
||||
if(do_after(user, 20))
|
||||
user << "<span class='notice'>You've unfastened the frame.</span>"
|
||||
user << "<span class='notice'>You unfasten the frame.</span>"
|
||||
anchored = 0
|
||||
state = 0
|
||||
if(istype(P, /obj/item/weapon/circuitboard) && !circuit)
|
||||
@@ -365,15 +365,15 @@
|
||||
var/obj/item/stack/cable_coil/C = P
|
||||
if(C.get_amount() >= 5)
|
||||
playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1)
|
||||
user << "<span class='notice'>You start adding cables to the frame.</span>"
|
||||
user << "<span class='notice'>You start adding cables to the frame...</span>"
|
||||
if(do_after(user, 20))
|
||||
if(C.get_amount() >= 5 && state == 2)
|
||||
C.use(5)
|
||||
user << "<span class='notice'>You've added cables to the frame.</span>"
|
||||
user << "<span class='notice'>You add cables to the frame.</span>"
|
||||
state = 3
|
||||
icon_state = "3"
|
||||
else
|
||||
user << "<span class='warning'>You need five lengths of cable to wire the frame.</span>"
|
||||
user << "<span class='warning'>You need five lengths of cable to wire the frame!</span>"
|
||||
if(3)
|
||||
if(istype(P, /obj/item/weapon/wirecutters))
|
||||
playsound(src.loc, 'sound/items/Wirecutter.ogg', 50, 1)
|
||||
@@ -387,15 +387,15 @@
|
||||
if(istype(P, /obj/item/stack/sheet/glass))
|
||||
var/obj/item/stack/sheet/glass/G = P
|
||||
if(G.get_amount() < 2)
|
||||
user << "<span class='warning'>You need two glass sheets to continue construction.</span>"
|
||||
user << "<span class='warning'>You need two glass sheets to continue construction!</span>"
|
||||
return
|
||||
else
|
||||
playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1)
|
||||
user << "<span class='notice'>You start to put in the glass panel.</span>"
|
||||
user << "<span class='notice'>You start to put in the glass panel...</span>"
|
||||
if(do_after(user, 20))
|
||||
if(G.get_amount() >= 2 && state == 3)
|
||||
G.use(2)
|
||||
user << "<span class='notice'>You've put in the glass panel.</span>"
|
||||
user << "<span class='notice'>You put in the glass panel.</span>"
|
||||
state = 4
|
||||
src.icon_state = "4"
|
||||
if(4)
|
||||
|
||||
@@ -3,15 +3,22 @@
|
||||
desc = "Used to access the various cameras on the station."
|
||||
icon_state = "cameras"
|
||||
//circuit = /obj/item/weapon/circuitboard/security
|
||||
var/mob/camera/aiEye/remote/eyeobj = new()
|
||||
var/mob/camera/aiEye/remote/eyeobj
|
||||
var/mob/living/carbon/human/current_user = null
|
||||
var/list/networks = list("SS13")
|
||||
var/datum/action/camera_off/off_action = new
|
||||
var/datum/action/camera_jump/jump_action = new
|
||||
|
||||
/obj/machinery/computer/camera_advanced/New()
|
||||
/obj/machinery/computer/camera_advanced/proc/CreateEye()
|
||||
eyeobj = new()
|
||||
eyeobj.origin = src
|
||||
|
||||
/obj/machinery/computer/camera_advanced/proc/GrantActions(var/mob/living/carbon/user)
|
||||
off_action.target = user
|
||||
off_action.Grant(user)
|
||||
jump_action.target = user
|
||||
jump_action.Grant(user)
|
||||
|
||||
/obj/machinery/computer/camera_advanced/check_eye(var/mob/user as mob)
|
||||
if (get_dist(user, src) > 1 || user.eye_blind)
|
||||
off_action.Activate()
|
||||
@@ -24,11 +31,11 @@
|
||||
if(!iscarbon(user))
|
||||
return
|
||||
var/mob/living/carbon/L = user
|
||||
|
||||
if(!current_user)
|
||||
off_action.target = user
|
||||
off_action.Grant(user)
|
||||
jump_action.target = user
|
||||
jump_action.Grant(user)
|
||||
if(!eyeobj)
|
||||
CreateEye()
|
||||
GrantActions(user)
|
||||
current_user = user
|
||||
eyeobj.user = user
|
||||
eyeobj.name = "Camere Eye ([user.name])"
|
||||
@@ -43,6 +50,8 @@
|
||||
eyeobj.setLoc(get_turf(C))
|
||||
break
|
||||
eyeobj.initialized = 1
|
||||
else
|
||||
eyeobj.setLoc(eyeobj.loc)
|
||||
else
|
||||
user << "The console is already in use!"
|
||||
|
||||
@@ -57,6 +66,11 @@
|
||||
var/visible_icon = 0
|
||||
var/image/user_image = null
|
||||
|
||||
/mob/camera/aiEye/remote/GetViewerClient()
|
||||
if(user)
|
||||
return user.client
|
||||
return null
|
||||
|
||||
/mob/camera/aiEye/remote/setLoc(var/T)
|
||||
if(user)
|
||||
if(!isturf(user.loc))
|
||||
|
||||
@@ -354,7 +354,7 @@ var/time_last_changed_position = 0
|
||||
if(region_access)
|
||||
authenticated = 1
|
||||
else if ((!( authenticated ) && (istype(usr, /mob/living/silicon))) && (!modify))
|
||||
usr << "You can't modify an ID without an ID inserted to modify. Once one is in the modify slot on the computer, you can log in."
|
||||
usr << "<span class='warning'>You can't modify an ID without an ID inserted to modify! Once one is in the modify slot on the computer, you can log in.</span>"
|
||||
if ("logout")
|
||||
region_access = null
|
||||
head_subordinates = null
|
||||
|
||||
@@ -79,7 +79,7 @@
|
||||
user.drop_item()
|
||||
W.loc = src
|
||||
src.diskette = W
|
||||
user << "You insert [W]."
|
||||
user << "<span class='notice'>You insert [W].</span>"
|
||||
src.updateUsrDialog()
|
||||
return
|
||||
else
|
||||
|
||||
@@ -103,11 +103,11 @@ var/const/CALL_SHUTTLE_REASON_LENGTH = 12
|
||||
feedback_inc("alert_comms_blue",1)
|
||||
tmp_alertlevel = 0
|
||||
else:
|
||||
usr << "You are not authorized to do this."
|
||||
usr << "<span class='warning'>You are not authorized to do this!</span>"
|
||||
tmp_alertlevel = 0
|
||||
state = STATE_DEFAULT
|
||||
else
|
||||
usr << "You need to swipe your ID."
|
||||
usr << "<span class='warning'>You need to swipe your ID!</span>"
|
||||
|
||||
if("announce")
|
||||
if(src.authenticated==2 && !message_cooldown)
|
||||
@@ -333,7 +333,7 @@ var/const/CALL_SHUTTLE_REASON_LENGTH = 12
|
||||
src.emagged = 1
|
||||
if(authenticated == 1)
|
||||
authenticated = 2
|
||||
user << "You scramble the communication routing circuits!"
|
||||
user << "<span class='notice'>You scramble the communication routing circuits.</span>"
|
||||
|
||||
/obj/machinery/computer/communications/attack_hand(var/mob/user as mob)
|
||||
if(..())
|
||||
|
||||
@@ -97,7 +97,7 @@
|
||||
/obj/machinery/computer/attackby(I as obj, user as mob, params)
|
||||
if(istype(I, /obj/item/weapon/screwdriver) && circuit)
|
||||
playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1)
|
||||
user << "<span class='notice'> You start to disconnect the monitor.</span>"
|
||||
user << "<span class='notice'> You start to disconnect the monitor...</span>"
|
||||
if(do_after(user, 20))
|
||||
var/obj/structure/computerframe/A = new /obj/structure/computerframe( src.loc )
|
||||
A.circuit = circuit
|
||||
@@ -127,12 +127,12 @@
|
||||
if(prob(10))
|
||||
user.visible_message("<span class='danger'>[user.name] smashes the [src.name] with its paws.</span>",\
|
||||
"<span class='danger'>You smash the [src.name] with your paws.</span>",\
|
||||
"<span class='danger'>You hear a smashing sound.</span>")
|
||||
"<span class='italics'>You hear a smashing sound.</span>")
|
||||
set_broken()
|
||||
return
|
||||
user.visible_message("<span class='danger'>[user.name] smashes against the [src.name] with its paws.</span>",\
|
||||
"<span class='danger'>You smash against the [src.name] with your paws.</span>",\
|
||||
"<span class='danger'>You hear a clicking sound.</span>")
|
||||
"<span class='italics'>You hear hear a clicking sound.</span>")
|
||||
|
||||
/obj/machinery/computer/attack_alien(mob/living/user)
|
||||
user.do_attack_animation(src)
|
||||
@@ -140,9 +140,9 @@
|
||||
if(prob(80))
|
||||
user.visible_message("<span class='danger'>[user.name] smashes the [src.name] with its claws.</span>",\
|
||||
"<span class='danger'>You smash the [src.name] with your claws.</span>",\
|
||||
"<span class='danger'>You hear a smashing sound.</span>")
|
||||
"<span class='italics'>You hear a smashing sound.</span>")
|
||||
set_broken()
|
||||
return
|
||||
user.visible_message("<span class='danger'>[user.name] smashes against the [src.name] with its claws.</span>",\
|
||||
"<span class='danger'>You smash against the [src.name] with your claws.</span>",\
|
||||
"<span class='danger'>You hear a clicking sound.</span>")
|
||||
"<span class='italics'>You hear a clicking sound.</span>")
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
if(src.stat & (NOPOWER|BROKEN|MAINT))
|
||||
return
|
||||
if(!current)
|
||||
user << "You haven't selected anything to transmit laws to!"
|
||||
user << "<span class='caution'>You haven't selected anything to transmit laws to!</span>"
|
||||
return
|
||||
if(!can_upload_to(current))
|
||||
user << "<span class='caution'>Upload failed!</span> Check to make sure [current.name] is functioning properly."
|
||||
@@ -43,7 +43,7 @@
|
||||
src.current = select_active_ai(user)
|
||||
|
||||
if (!src.current)
|
||||
user << "No active AIs detected."
|
||||
user << "<span class='caution'>No active AIs detected!</span>"
|
||||
else
|
||||
user << "[src.current.name] selected for law changes."
|
||||
|
||||
@@ -68,7 +68,7 @@
|
||||
src.current = select_active_free_borg(user)
|
||||
|
||||
if(!src.current)
|
||||
user << "No active unslaved cyborgs detected."
|
||||
user << "<span class='caution'>No active unslaved cyborgs detected!</span>"
|
||||
else
|
||||
user << "[src.current.name] selected for law changes."
|
||||
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
usr.drop_item()
|
||||
O.loc = src
|
||||
scan = O
|
||||
user << "You insert [O]."
|
||||
user << "<span class='notice'>You insert [O].</span>"
|
||||
else
|
||||
..()
|
||||
|
||||
|
||||
@@ -132,7 +132,7 @@
|
||||
var/obj/item/weapon/implant/I = locate(href_list["warn"])
|
||||
if((I)&&(I.imp_in))
|
||||
var/mob/living/carbon/R = I.imp_in
|
||||
R << "You hear a voice in your head saying: '[warning]'"
|
||||
R << "<span class='italics'>You hear a voice in your head saying: '[warning]'</span>"
|
||||
log_say("[usr]/[usr.ckey] sent an implant message to [R]/[R.ckey]: '[warning]'")
|
||||
|
||||
src.add_fingerprint(usr)
|
||||
|
||||
@@ -28,7 +28,7 @@
|
||||
usr.drop_item()
|
||||
O.loc = src
|
||||
scan = O
|
||||
user << "You insert [O]."
|
||||
user << "<span class='notice'>You insert [O].</span>"
|
||||
else
|
||||
..()
|
||||
|
||||
|
||||
@@ -55,7 +55,7 @@
|
||||
|
||||
/obj/machinery/constructable_frame/machine_frame/attackby(obj/item/P as obj, mob/user as mob, params)
|
||||
if(P.crit_fail)
|
||||
user << "<span class='danger'>This part is faulty, you cannot add this to the machine!</span>"
|
||||
user << "<span class='warning'>This part is faulty, you cannot add this to the machine!</span>"
|
||||
return
|
||||
switch(state)
|
||||
if(1)
|
||||
@@ -207,7 +207,7 @@
|
||||
if(istype(P, /obj/item/stack/cable_coil))
|
||||
var/obj/item/stack/cable_coil/CP = P
|
||||
if (CP.get_amount() < 1)
|
||||
user << "You need more cable!"
|
||||
user << "<span class='warning'>You need more cable!</span>"
|
||||
return
|
||||
var/obj/item/stack/cable_coil/CC = new /obj/item/stack/cable_coil(src, 1, CP.item_color)
|
||||
if(CP.use(1))
|
||||
@@ -222,7 +222,7 @@
|
||||
update_req_desc()
|
||||
return 1
|
||||
if(!success)
|
||||
user << "<span class='danger'>You cannot add that to the machine!</span>"
|
||||
user << "<span class='warning'>You cannot add that to the machine!</span>"
|
||||
return 0
|
||||
|
||||
|
||||
|
||||
@@ -230,13 +230,13 @@
|
||||
/obj/machinery/atmospherics/unary/cryo_cell/attackby(obj/item/I, mob/user, params)
|
||||
if(istype(I, /obj/item/weapon/reagent_containers/glass))
|
||||
if(beaker)
|
||||
user << "<span class='notice'>A beaker is already loaded into [src].</span>"
|
||||
user << "<span class='warning'>A beaker is already loaded into [src]!</span>"
|
||||
return
|
||||
|
||||
beaker = I
|
||||
user.drop_item()
|
||||
I.loc = src
|
||||
user.visible_message("<span class='notice'>[user] places [I] in [src].</span>", \
|
||||
user.visible_message("[user] places [I] in [src].", \
|
||||
"<span class='notice'>You place [I] in [src].</span>")
|
||||
|
||||
if(!(on || occupant || state_open))
|
||||
|
||||
@@ -67,11 +67,11 @@ for reference:
|
||||
user.changeNext_move(CLICK_CD_MELEE)
|
||||
if (istype(W, /obj/item/stack/sheet/mineral/wood))
|
||||
if (src.health < src.maxhealth)
|
||||
visible_message("<span class='danger'>[user] begins to repair \the [src]!</span>")
|
||||
visible_message("[user] begins to repair \the [src]!", "<span class='notice'>You begin to repair \the [src]...</span>")
|
||||
if(do_after(user,20))
|
||||
src.health = src.maxhealth
|
||||
W:use(1)
|
||||
visible_message("<span class='danger'>[user] repairs \the [src]!</span>")
|
||||
visible_message("[user] repairs \the [src]!", "<span class='notice'>You repair \the [src].</span>")
|
||||
return
|
||||
else
|
||||
return
|
||||
@@ -84,7 +84,7 @@ for reference:
|
||||
src.health -= W.force * 0.75
|
||||
else
|
||||
if (src.health <= 0)
|
||||
visible_message("<span class='danger'>The barricade is smashed apart!</span>")
|
||||
visible_message("<span class='warning'>The barricade is smashed apart!</span>")
|
||||
new /obj/item/stack/sheet/mineral/wood(get_turf(src))
|
||||
new /obj/item/stack/sheet/mineral/wood(get_turf(src))
|
||||
new /obj/item/stack/sheet/mineral/wood(get_turf(src))
|
||||
@@ -94,13 +94,13 @@ for reference:
|
||||
/obj/structure/barricade/wooden/ex_act(severity, target)
|
||||
switch(severity)
|
||||
if(1.0)
|
||||
visible_message("<span class='danger'>The barricade is blown apart!</span>")
|
||||
visible_message("<span class='warning'>The barricade is blown apart!</span>")
|
||||
qdel(src)
|
||||
return
|
||||
if(2.0)
|
||||
src.health -= 25
|
||||
if (src.health <= 0)
|
||||
visible_message("<span class='danger'>The barricade is blown apart!</span>")
|
||||
visible_message("<span class='warning'>The barricade is blown apart!</span>")
|
||||
new /obj/item/stack/sheet/mineral/wood(get_turf(src))
|
||||
new /obj/item/stack/sheet/mineral/wood(get_turf(src))
|
||||
new /obj/item/stack/sheet/mineral/wood(get_turf(src))
|
||||
@@ -110,7 +110,7 @@ for reference:
|
||||
/obj/structure/barricade/wooden/blob_act()
|
||||
src.health -= 25
|
||||
if (src.health <= 0)
|
||||
visible_message("<span class='danger'>The blob eats through the barricade!</span>")
|
||||
visible_message("<span class='warning'>The blob eats through the barricade!</span>")
|
||||
qdel(src)
|
||||
return
|
||||
|
||||
@@ -196,7 +196,7 @@ for reference:
|
||||
if (src.emagged == 0)
|
||||
src.emagged = 1
|
||||
src.req_access = null
|
||||
user << "You break the ID authentication lock on \the [src]."
|
||||
user << "<span class='notice'>You break the ID authentication lock on \the [src].</span>"
|
||||
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
|
||||
s.set_up(2, 1, src)
|
||||
s.start()
|
||||
@@ -204,7 +204,7 @@ for reference:
|
||||
return
|
||||
else if (src.emagged == 1)
|
||||
src.emagged = 2
|
||||
user << "You short out the anchoring mechanism on \the [src]."
|
||||
user << "<span class='notice'>You short out the anchoring mechanism on \the [src].</span>"
|
||||
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
|
||||
s.set_up(2, 1, src)
|
||||
s.start()
|
||||
|
||||
@@ -640,7 +640,7 @@ About the new airlock wires panel:
|
||||
playsound(src.loc, 'sound/effects/bang.ogg', 25, 1)
|
||||
if(!istype(H.head, /obj/item/clothing/head/helmet))
|
||||
H.visible_message("<span class='danger'>[user] headbutts the airlock.</span>", \
|
||||
"<span class='userdanger'>[user] headbutts the airlock!</span>")
|
||||
"<span class='userdanger'>You headbutt the airlock!</span>")
|
||||
var/obj/item/organ/limb/affecting = H.get_organ("head")
|
||||
H.Stun(5)
|
||||
H.Weaken(5)
|
||||
@@ -889,9 +889,9 @@ About the new airlock wires panel:
|
||||
if((istype(C, /obj/item/weapon/weldingtool) && !( src.operating ) && src.density))
|
||||
var/obj/item/weapon/weldingtool/W = C
|
||||
if(W.remove_fuel(0,user))
|
||||
user.visible_message("<span class='warning'>[user] is [welded ? "unwelding":"welding"] the airlock.</span>", \
|
||||
"You begin [welded ? "unwelding":"welding"] the airlock...", \
|
||||
"You hear welding.")
|
||||
user.visible_message("[user] is [welded ? "unwelding":"welding"] the airlock.", \
|
||||
"<span class='notice'>You begin [welded ? "unwelding":"welding"] the airlock...</span>", \
|
||||
"<span class='italics'>You hear welding.</span>")
|
||||
playsound(loc, 'sound/items/Welder.ogg', 40, 1)
|
||||
if(do_after(user,40,5,1))
|
||||
if(density && !operating)//Door must be closed to weld.
|
||||
@@ -899,8 +899,8 @@ About the new airlock wires panel:
|
||||
return
|
||||
playsound(loc, 'sound/items/Welder2.ogg', 50, 1)
|
||||
welded = !welded
|
||||
user.visible_message("<span class='warning'>[user.name] has [welded? "welded shut":"unwelded"] [src].</span>", \
|
||||
"<span class='notice'>You've [welded ? "welded the airlock shut":"unwelded the airlock"].</span>")
|
||||
user.visible_message("[user.name] has [welded? "welded shut":"unwelded"] [src].", \
|
||||
"<span class='notice'>You [welded ? "weld the airlock shut":"unweld the airlock"].</span>")
|
||||
update_icon()
|
||||
return
|
||||
else if(istype(C, /obj/item/weapon/screwdriver))
|
||||
@@ -924,8 +924,8 @@ About the new airlock wires panel:
|
||||
beingcrowbarred = 0
|
||||
if( beingcrowbarred && (density && welded && !operating && src.p_open && (!hasPower()) && !src.locked) )
|
||||
playsound(src.loc, 'sound/items/Crowbar.ogg', 100, 1)
|
||||
user.visible_message("<span class='warning'>[user] removes the electronics from the airlock assembly.</span>", \
|
||||
"You start to remove electronics from the airlock assembly.")
|
||||
user.visible_message("[user] removes the electronics from the airlock assembly.", \
|
||||
"<span class='notice'>You start to remove electronics from the airlock assembly...</span>")
|
||||
if(do_after(user,40))
|
||||
if(src.loc)
|
||||
if(src.doortype)
|
||||
@@ -935,7 +935,7 @@ About the new airlock wires panel:
|
||||
user << "<span class='warning'>You discard the damaged electronics.</span>"
|
||||
qdel(src)
|
||||
return
|
||||
user << "<span class='notice'>You removed the airlock electronics!</span>"
|
||||
user << "<span class='notice'>You remove the airlock electronics.</span>"
|
||||
|
||||
var/obj/item/weapon/airlock_electronics/ae
|
||||
if(!electronics)
|
||||
@@ -953,9 +953,9 @@ About the new airlock wires panel:
|
||||
qdel(src)
|
||||
return
|
||||
else if(hasPower())
|
||||
user << "<span class='warning'> The airlock's motors resist your efforts to force it.</span>"
|
||||
user << "<span class='warning'> The airlock's motors resist your efforts to force it!</span>"
|
||||
else if(locked)
|
||||
user << "<span class='warning'> The airlock's bolts prevent it from being forced.</span>"
|
||||
user << "<span class='warning'> The airlock's bolts prevent it from being forced!</span>"
|
||||
else if( !welded && !operating)
|
||||
if(density)
|
||||
if(beingcrowbarred == 0) //being fireaxe'd
|
||||
@@ -963,7 +963,7 @@ About the new airlock wires panel:
|
||||
if(F:wielded)
|
||||
spawn(0) open(2)
|
||||
else
|
||||
user << "<span class='warning'>You need to be wielding the Fire axe to do that.</span>"
|
||||
user << "<span class='warning'>You need to be wielding the fire axe to do that!</span>"
|
||||
else
|
||||
spawn(0) open(2)
|
||||
else
|
||||
@@ -972,7 +972,7 @@ About the new airlock wires panel:
|
||||
if(F:wielded)
|
||||
spawn(0) close(2)
|
||||
else
|
||||
user << "<span class='warning'>You need to be wielding the Fire axe to do that.</span>"
|
||||
user << "<span class='warning'>You need to be wielding the fire axe to do that!</span>"
|
||||
else
|
||||
spawn(0) close(2)
|
||||
|
||||
|
||||
@@ -213,8 +213,8 @@
|
||||
return
|
||||
user.changeNext_move(CLICK_CD_MELEE)
|
||||
playsound(src.loc, 'sound/effects/Glasshit.ogg', 75, 1)
|
||||
user.visible_message("<span class='danger'>[user] smashes against the [src.name].</span>", \
|
||||
"<span class='userdanger'>[user] smashes against the [src.name].</span>")
|
||||
user.visible_message("<span class='danger'>[user] smashes against the [src.name]!</span>", \
|
||||
"<span class='userdanger'>You smash against the [src.name]!</span>")
|
||||
take_damage(damage)
|
||||
|
||||
/obj/machinery/door/window/attack_alien(mob/living/user as mob)
|
||||
@@ -264,7 +264,7 @@
|
||||
|
||||
if(istype(I, /obj/item/weapon/screwdriver))
|
||||
if(src.density || src.operating)
|
||||
user << "<span class='warning'>You need to open the door to access the maintenance panel.</span>"
|
||||
user << "<span class='warning'>You need to open the door to access the maintenance panel!</span>"
|
||||
return
|
||||
playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1)
|
||||
src.p_open = !( src.p_open )
|
||||
@@ -274,8 +274,8 @@
|
||||
if(istype(I, /obj/item/weapon/crowbar))
|
||||
if(p_open && !src.density && !src.operating)
|
||||
playsound(src.loc, 'sound/items/Crowbar.ogg', 100, 1)
|
||||
user.visible_message("<span class='warning'>[user] removes the electronics from the [src.name].</span>", \
|
||||
"You start to remove electronics from the [src.name].")
|
||||
user.visible_message("[user] removes the electronics from the [src.name].", \
|
||||
"<span class='notice'>You start to remove electronics from the [src.name]...</span>")
|
||||
if(do_after(user,40))
|
||||
if(src.p_open && !src.density && !src.operating && src.loc)
|
||||
var/obj/structure/windoor_assembly/WA = new /obj/structure/windoor_assembly(src.loc)
|
||||
@@ -302,7 +302,7 @@
|
||||
qdel(src)
|
||||
return
|
||||
|
||||
user << "<span class='notice'>You removed the airlock electronics!</span>"
|
||||
user << "<span class='notice'>You remove the airlock electronics.</span>"
|
||||
|
||||
var/obj/item/weapon/airlock_electronics/ae
|
||||
if(!electronics)
|
||||
|
||||
@@ -40,23 +40,23 @@
|
||||
/obj/machinery/flasher/attackby(obj/item/weapon/W, mob/user, params)
|
||||
if (istype(W, /obj/item/weapon/wirecutters))
|
||||
if (bulb)
|
||||
user.visible_message("<span class='warning'>[user] begins to disconnect [src]'s flashbulb.</span>", "<span class='warning'>You begin to disconnect [src]'s flashbulb.</span>")
|
||||
user.visible_message("[user] begins to disconnect [src]'s flashbulb.", "<span class='notice'>You begin to disconnect [src]'s flashbulb...</span>")
|
||||
playsound(src.loc, 'sound/items/Wirecutter.ogg', 100, 1)
|
||||
if(do_after(user, 30) && bulb)
|
||||
user.visible_message("<span class='warning'>[user] has disconnected [src]'s flashbulb!</span>", "<span class='notice'>You disconnect [src]'s flashbulb!</span>")
|
||||
user.visible_message("[user] has disconnected [src]'s flashbulb!", "<span class='notice'>You disconnect [src]'s flashbulb.</span>")
|
||||
bulb.loc = src.loc
|
||||
bulb = null
|
||||
power_change()
|
||||
|
||||
else if (istype(W, /obj/item/device/flash/handheld))
|
||||
if (!bulb)
|
||||
user.visible_message("<span class='notice'>[user] installs [W] into [src].</span>", "<span class='notice'>You install [W] into [src].</span>")
|
||||
user.visible_message("[user] installs [W] into [src].", "<span class='notice'>You install [W] into [src].</span>")
|
||||
user.drop_item()
|
||||
W.loc = src
|
||||
bulb = W
|
||||
power_change()
|
||||
else
|
||||
user << "<span class='notice'>A flashbulb is already installed in [src].</span>"
|
||||
user << "<span class='warning'>A flashbulb is already installed in [src]!</span>"
|
||||
add_fingerprint(user)
|
||||
|
||||
//Let the AI trigger them directly.
|
||||
|
||||
@@ -76,10 +76,10 @@
|
||||
add_fingerprint(user)
|
||||
src.disable = !src.disable
|
||||
if (src.disable)
|
||||
user.visible_message("<span class='danger'>[user] has disabled \the [src]!</span>", "<span class='danger'>You disable the connection to \the [src].</span>")
|
||||
user.visible_message("[user] has disabled \the [src]!", "<span class='notice'>You disable the connection to \the [src].</span>")
|
||||
icon_state = "[base_state]-d"
|
||||
if (!src.disable)
|
||||
user.visible_message("<span class='danger'>[user] has reconnected \the [src]!</span>", "<span class='danger'>You fix the connection to \the [src].</span>")
|
||||
user.visible_message("[user] has reconnected \the [src]!", "<span class='notice'>You fix the connection to \the [src].</span>")
|
||||
if(src.powered())
|
||||
icon_state = "[base_state]"
|
||||
else
|
||||
|
||||
@@ -53,35 +53,35 @@
|
||||
return
|
||||
|
||||
if(attached)
|
||||
visible_message("[attached] is detached from \the [src]")
|
||||
visible_message("<span class='warning'>[attached] is detached from \the [src].</span>")
|
||||
attached = null
|
||||
update_icon()
|
||||
return
|
||||
|
||||
if(!ishuman(target))
|
||||
usr << "<span class='warning'>The drip beeps: Warning, human patients only!</span>"
|
||||
usr << "<span class='danger'>The drip beeps: Warning, human patients only!</span>"
|
||||
return
|
||||
|
||||
if(Adjacent(target) && usr.Adjacent(target))
|
||||
if(beaker)
|
||||
visible_message("[usr] attaches \the [src] to \the [target].")
|
||||
usr.visible_message("<span class='warning'>[usr] attaches \the [src] to \the [target].</span>", "<span class='notice'>You attach \the [src] to \the [target].</span>")
|
||||
attached = target
|
||||
SSmachine.processing.Add(src)
|
||||
update_icon()
|
||||
else
|
||||
usr << "There's nothing attached to the IV drip!"
|
||||
usr << "<span class='warning'>There's nothing attached to the IV drip!</span>"
|
||||
|
||||
|
||||
/obj/machinery/iv_drip/attackby(obj/item/weapon/W as obj, mob/user as mob, params)
|
||||
if (istype(W, /obj/item/weapon/reagent_containers))
|
||||
if(!isnull(beaker))
|
||||
user << "There is already a reagent container loaded!"
|
||||
user << "<span class='warning'>There is already a reagent container loaded!</span>"
|
||||
return
|
||||
|
||||
user.drop_item()
|
||||
W.loc = src
|
||||
beaker = W
|
||||
user << "You attach \the [W] to \the [src]."
|
||||
user << "<span class='notice'>You attach \the [W] to \the [src].</span>"
|
||||
update_icon()
|
||||
return
|
||||
else
|
||||
@@ -163,7 +163,7 @@
|
||||
set src in view(1)
|
||||
|
||||
if(!istype(usr, /mob/living))
|
||||
usr << "<span class='notice'>You can't do that.</span>"
|
||||
usr << "<span class='warning'>You can't do that!</span>"
|
||||
return
|
||||
|
||||
if(usr.stat)
|
||||
@@ -180,7 +180,7 @@
|
||||
set src in view(1)
|
||||
|
||||
if(!istype(usr, /mob/living))
|
||||
usr << "<span class='notice'>You can't do that.</span>"
|
||||
usr << "<span class='warning'>You can't do that!</span>"
|
||||
return
|
||||
|
||||
if(usr.stat)
|
||||
|
||||
@@ -227,7 +227,7 @@ Class Procs:
|
||||
if(be_close && in_range(M, src))
|
||||
return 1
|
||||
else
|
||||
src << "<span class='notice'>You don't have the dexterity to do this!</span>"
|
||||
src << "<span class='warning'>You don't have the dexterity to do this!</span>"
|
||||
return
|
||||
|
||||
/mob/living/carbon/human/canUseTopic(atom/movable/M, be_close = 0)
|
||||
@@ -284,7 +284,7 @@ Class Procs:
|
||||
if(user.lying || user.stat)
|
||||
return 1
|
||||
if(!user.IsAdvancedToolUser())
|
||||
usr << "<span class='danger'>You don't have the dexterity to do this!</span>"
|
||||
usr << "<span class='warning'>You don't have the dexterity to do this!</span>"
|
||||
return 1
|
||||
/*
|
||||
//distance checks are made by atom/proc/DblClick
|
||||
@@ -297,7 +297,7 @@ Class Procs:
|
||||
visible_message("<span class='danger'>[H] stares cluelessly at [src] and drools.</span>")
|
||||
return 1
|
||||
else if(prob(H.getBrainLoss()))
|
||||
user << "<span class='danger'>You momentarily forget how to use [src].</span>"
|
||||
user << "<span class='warning'>You momentarily forget how to use [src]!</span>"
|
||||
return 1
|
||||
|
||||
src.add_fingerprint(user)
|
||||
@@ -361,10 +361,10 @@ Class Procs:
|
||||
|
||||
/obj/machinery/proc/default_unfasten_wrench(mob/user, obj/item/weapon/wrench/W, time = 20)
|
||||
if(istype(W))
|
||||
user << "<span class='notice'>Now [anchored ? "un" : ""]securing [name].</span>"
|
||||
user << "<span class='notice'>You begin [anchored ? "un" : ""]securing [name]...</span>"
|
||||
playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1)
|
||||
if(do_after(user, time))
|
||||
user << "<span class='notice'>You've [anchored ? "un" : ""]secured [name].</span>"
|
||||
user << "<span class='notice'>You [anchored ? "un" : ""]secure [name].</span>"
|
||||
anchored = !anchored
|
||||
playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1)
|
||||
return 1
|
||||
|
||||
@@ -112,7 +112,7 @@
|
||||
if(istype(I, /obj/item/weapon/screwdriver))
|
||||
open = !open
|
||||
|
||||
user.visible_message("[user] [open ? "opens" : "closes"] the beacon's cover.", "You [open ? "open" : "close"] the beacon's cover.")
|
||||
user.visible_message("[user] [open ? "opens" : "closes"] the beacon's cover.", "<span class='notice'>You [open ? "open" : "close"] the beacon's cover.</span>")
|
||||
|
||||
updateicon()
|
||||
|
||||
@@ -120,12 +120,12 @@
|
||||
if(open)
|
||||
if (src.allowed(user))
|
||||
src.locked = !src.locked
|
||||
user << "Controls are now [src.locked ? "locked." : "unlocked."]"
|
||||
user << "<span class='notice'>Controls are now [src.locked ? "locked" : "unlocked"].</span>"
|
||||
else
|
||||
user << "<span class='danger'>Access denied.</span>"
|
||||
updateDialog()
|
||||
else
|
||||
user << "You must open the cover first!"
|
||||
user << "<span class='warning'>You must open the cover first!</span>"
|
||||
return
|
||||
|
||||
/obj/machinery/navbeacon/attack_ai(var/mob/user)
|
||||
@@ -143,7 +143,7 @@
|
||||
return // prevent intraction when T-scanner revealed
|
||||
|
||||
if(!open && !ai) // can't alter controls if not open, unless you're an AI
|
||||
user << "The beacon's control cover is closed."
|
||||
user << "<span class='warning'>The beacon's control cover is closed!</span>"
|
||||
return
|
||||
|
||||
|
||||
|
||||
@@ -103,13 +103,13 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co
|
||||
var/turf/loc = get_turf(usr)
|
||||
var/area/A = loc.loc
|
||||
if (!istype(loc, /turf/simulated/floor))
|
||||
usr << "<span class='alert'>Newscaster cannot be placed on this spot.</span>"
|
||||
usr << "<span class='warning'>Newscaster cannot be placed on this spot!</span>"
|
||||
return
|
||||
if (A.requires_power == 0 || A.name == "Space")
|
||||
usr << "<span class='alert'>Newscaster cannot be placed in this area.</span>"
|
||||
usr << "<span class='warning'>Newscaster cannot be placed in this area!</span>"
|
||||
return
|
||||
for(var/obj/machinery/newscaster/T in loc)
|
||||
usr << "<span class='alert'>There is another newscaster here.</span>"
|
||||
usr << "<span class='warning'>There is another newscaster here!</span>"
|
||||
return
|
||||
var/obj/machinery/newscaster/N = new(loc)
|
||||
N.pixel_y -= (loc.y - on_wall.y) * 32
|
||||
@@ -793,9 +793,10 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co
|
||||
/obj/machinery/newscaster/attackby(obj/item/I as obj, mob/living/user as mob, params)
|
||||
|
||||
if(istype(I, /obj/item/weapon/wrench))
|
||||
user << "<span class='notice'>Now [anchored ? "un" : ""]securing [name]</span>"
|
||||
user << "<span class='notice'>You start [anchored ? "un" : ""]securing [name]...</span>"
|
||||
playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1)
|
||||
if(do_after(user, 60))
|
||||
user << "<span class='notice'>You [anchored ? "un" : ""]secure [name].</span>"
|
||||
new /obj/item/newscaster_frame(loc)
|
||||
playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1)
|
||||
qdel(src)
|
||||
@@ -823,12 +824,12 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co
|
||||
audible_message("<span class='danger'>[user.name] forcefully slams the [src.name] with the [I.name]!</span>", null, 5 )
|
||||
playsound(src.loc, 'sound/effects/Glasshit.ogg', 100, 1)
|
||||
else
|
||||
user << "<FONT COLOR='blue'>This does nothing.</FONT>"
|
||||
user << "<span class='warning'>This does nothing!</span>"
|
||||
src.update_icon()
|
||||
|
||||
|
||||
/obj/machinery/newscaster/attack_paw(mob/user as mob)
|
||||
user << "<font color='blue'>The newscaster controls are far too complicated for your tiny brain!</font>"
|
||||
user << "<span class='warning'>The newscaster controls are far too complicated for your tiny brain!</span>"
|
||||
return
|
||||
|
||||
/obj/machinery/newscaster/proc/AttachPhoto(mob/user as mob)
|
||||
@@ -860,7 +861,7 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co
|
||||
else
|
||||
targetcam = R.aicamera
|
||||
else
|
||||
user << "You cannot interface with silicon photo uploading" //gtfo pAIs
|
||||
user << "<span class='warning'>You cannot interface with silicon photo uploading!</span>" //gtfo pAIs
|
||||
|
||||
if(targetcam.aipictures.len == 0)
|
||||
usr << "<span class='boldannounce'>No images saved</span>"
|
||||
|
||||
@@ -310,7 +310,7 @@ var/global/list/pipeID2State = list(
|
||||
|
||||
for(var/obj/machinery/atmospherics/M in src.loc)
|
||||
if(M.initialize_directions & pipe_dir) // matches at least one direction on either type of pipe
|
||||
user << "<span class='danger'>There is already a pipe at that location.</span>"
|
||||
user << "<span class='warning'>There is already a pipe at that location!</span>"
|
||||
return 1
|
||||
// no conflicts found
|
||||
|
||||
@@ -405,8 +405,8 @@ var/global/list/pipeID2State = list(
|
||||
playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1)
|
||||
user.visible_message( \
|
||||
"[user] fastens \the [src].", \
|
||||
"<span class='notice'>You have fastened \the [src].</span>", \
|
||||
"You hear ratchet.")
|
||||
"<span class='notice'>You fasten \the [src].</span>", \
|
||||
"<span class='italics'>You hear ratchet.</span>")
|
||||
|
||||
qdel(src) // remove the pipe item
|
||||
|
||||
@@ -431,9 +431,9 @@ var/global/list/pipeID2State = list(
|
||||
if (!istype(W, /obj/item/weapon/wrench))
|
||||
return ..()
|
||||
if(!locate(/obj/machinery/atmospherics/pipe, src.loc))
|
||||
user << "<span class='danger'>You need to fasten it to a pipe.</span>"
|
||||
user << "<span class='warning'>You need to fasten it to a pipe!</span>"
|
||||
return 1
|
||||
new/obj/machinery/meter( src.loc )
|
||||
playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1)
|
||||
user << "<span class='notice'>You have fastened the meter to the pipe.</span>"
|
||||
user << "<span class='notice'>You fasten the meter to the pipe.</span>"
|
||||
qdel(src)
|
||||
|
||||
@@ -86,8 +86,8 @@
|
||||
add_fingerprint(user)
|
||||
user.visible_message( \
|
||||
"[user] fastens \the [src].", \
|
||||
"<span class='notice'>You have fastened \the [src]. Now it can dispense pipes.</span>", \
|
||||
"You hear ratchet.")
|
||||
"<span class='notice'>You fasten \the [src]. Now it can dispense pipes.</span>", \
|
||||
"<span class='italics'>You hear ratchet.</span>")
|
||||
anchored = 1
|
||||
stat &= MAINT
|
||||
if (usr.machine==src)
|
||||
@@ -99,8 +99,8 @@
|
||||
add_fingerprint(user)
|
||||
user.visible_message( \
|
||||
"[user] unfastens \the [src].", \
|
||||
"<span class='notice'>You have unfastened \the [src]. Now it can be pulled somewhere else.</span>", \
|
||||
"You hear ratchet.")
|
||||
"<span class='notice'>You unfasten \the [src]. Now it can be pulled somewhere else.</span>", \
|
||||
"<span class='italics'>You hear ratchet.</span>")
|
||||
anchored = 0
|
||||
stat |= ~MAINT
|
||||
power_change()
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user