Merge branch 'master' of https://github.com/tgstation/-tg-station into doesrussellsteapotapplytorussellsteapot

Conflicts:
	icons/obj/closet.dmi
This commit is contained in:
Jordie0608
2015-04-28 22:31:11 +10:00
480 changed files with 4295 additions and 3398 deletions
+5
View File
@@ -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)
+74 -47
View File
@@ -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)
+71 -45
View File
@@ -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
+61 -5
View File
@@ -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
+1
View File
@@ -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.
+1 -1
View File
@@ -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)
+2 -2
View File
@@ -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()
+5 -3
View File
@@ -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>")
+6
View File
@@ -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)
+1 -1
View File
@@ -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
View File
@@ -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))
+2 -2
View File
@@ -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)
+6 -6
View File
@@ -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.
+2 -2
View File
@@ -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)
+3 -3
View File
@@ -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>"
+3
View File
@@ -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
View File
@@ -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()
+31 -24
View File
@@ -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)
+113 -30
View File
@@ -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"
+1
View File
@@ -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
-9
View File
@@ -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
+1 -1
View File
@@ -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
+1 -2
View File
@@ -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()
..()
+8 -8
View File
@@ -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)
+15 -15
View File
@@ -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)
+66 -4
View File
@@ -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
+95 -30
View File
@@ -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)
+3 -3
View File
@@ -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
+3 -3
View File
@@ -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)
+18 -9
View File
@@ -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"))
+1 -2
View File
@@ -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()
+1 -1
View File
@@ -60,7 +60,7 @@
else
if(mages_made >= max_mages)
finished = 1
return 1
return ..()
else
make_more_mages()
return ..()
+4 -4
View File
@@ -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
+1 -21
View File
@@ -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()
+1 -1
View File
@@ -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()
+1 -1
View File
@@ -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()
+28 -28
View File
@@ -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)
+1 -1
View File
@@ -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
..()
+2 -2
View File
@@ -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
+3 -3
View File
@@ -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
..()
+2 -2
View File
@@ -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
+8 -8
View File
@@ -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
+5 -5
View File
@@ -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++
+5 -5
View File
@@ -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))
+9 -9
View File
@@ -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
+15 -15
View File
@@ -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
+4 -4
View File
@@ -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)
+4 -4
View File
@@ -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))
+11 -11
View File
@@ -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))
+5 -5
View File
@@ -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()
+2 -2
View File
@@ -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
+17 -10
View File
@@ -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))
+2 -1
View File
@@ -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()
+13 -13
View File
@@ -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))
+1 -1
View File
@@ -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
+1 -1
View File
@@ -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(..())
+5 -5
View File
@@ -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>")
+3 -3
View File
@@ -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."
+1 -1
View File
@@ -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
..()
+1 -1
View File
@@ -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)
+1 -1
View File
@@ -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
..()
+3 -3
View File
@@ -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
+2 -2
View File
@@ -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))
+8 -8
View File
@@ -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()
+13 -13
View File
@@ -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)
+6 -6
View File
@@ -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)
+4 -4
View File
@@ -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.
+2 -2
View File
@@ -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
+8 -8
View File
@@ -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)
+5 -5
View File
@@ -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
+4 -4
View File
@@ -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
+8 -7
View File
@@ -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>"
+5 -5
View File
@@ -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)
+4 -4
View File
@@ -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