diff --git a/.travis.yml b/.travis.yml
index cf5ae30ab5a..052a53f7ccc 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -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
diff --git a/_maps/map_files/MetaStation/MetaStation.v41A.II.dmm b/_maps/map_files/MetaStation/MetaStation.v41A.II.dmm
index 0aeb1b016c3..888b8d56a83 100644
--- a/_maps/map_files/MetaStation/MetaStation.v41A.II.dmm
+++ b/_maps/map_files/MetaStation/MetaStation.v41A.II.dmm
@@ -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)
diff --git a/_maps/map_files/MetaStation/z2.dmm b/_maps/map_files/MetaStation/z2.dmm
index ed87bda5846..c9e69fb8c99 100644
--- a/_maps/map_files/MetaStation/z2.dmm
+++ b/_maps/map_files/MetaStation/z2.dmm
@@ -744,7 +744,7 @@
"op" = (/turf/unsimulated/wall/fakeglass{color = "#008000"; dir = 1; icon_state = "fakewindows2"},/area/wizard_station)
"oq" = (/obj/structure/bookcase,/turf/unsimulated/floor{tag = "icon-cult"; icon_state = "cult"},/area/wizard_station)
"or" = (/obj/structure/grille{color = "#008000"; density = 0; icon_state = "brokengrille"},/turf/simulated/floor/plating,/area/wizard_station)
-"os" = (/obj/structure/cult/talisman{desc = "A altar dedicated to the Wizard's Federation"},/obj/item/weapon/kitchenknife/ritual,/turf/unsimulated/floor{tag = "icon-cult"; icon_state = "cult"},/area/wizard_station)
+"os" = (/obj/structure/cult/talisman{desc = "A altar dedicated to the Wizard's Federation"},/obj/item/weapon/kitchen/knife/ritual,/turf/unsimulated/floor{tag = "icon-cult"; icon_state = "cult"},/area/wizard_station)
"ot" = (/obj/item/clothing/shoes/sandal/marisa,/obj/item/clothing/suit/wizrobe/marisa,/obj/item/clothing/head/wizard/marisa,/obj/item/weapon/staff/broom,/turf/unsimulated/floor{tag = "icon-cult"; icon_state = "cult"},/area/wizard_station)
"ou" = (/obj/effect/decal/cleanable/blood/splatter,/mob/living/simple_animal/hostile/creature{name = "Experiment 35b"},/turf/unsimulated/floor{tag = "icon-cult"; icon_state = "cult"},/area/wizard_station)
"ov" = (/obj/machinery/door/poddoor/preopen,/obj/effect/decal/cleanable/blood/splatter,/obj/effect/decal/cleanable/blood/gibs/body,/turf/simulated/floor/plating/airless,/area/wizard_station)
@@ -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
diff --git a/_maps/map_files/MetaStation/z3.dmm b/_maps/map_files/MetaStation/z3.dmm
index 8a0d6d29433..0ed21f65a37 100644
--- a/_maps/map_files/MetaStation/z3.dmm
+++ b/_maps/map_files/MetaStation/z3.dmm
@@ -389,7 +389,7 @@
"hy" = (/obj/machinery/smartfridge{use_power = 0},/turf/simulated/shuttle/wall{tag = "icon-swall3"; icon_state = "swall3"; dir = 2},/area/space)
"hz" = (/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/turf/simulated/shuttle/floor,/area/space)
"hA" = (/obj/effect/decal/cleanable/egg_smudge,/obj/effect/decal/cleanable/flour,/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/turf/simulated/shuttle/floor,/area/space)
-"hB" = (/obj/structure/table,/obj/item/weapon/kitchen/rollingpin,/obj/item/weapon/kitchenknife,/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/space)
+"hB" = (/obj/structure/table,/obj/item/weapon/kitchen/rollingpin,/obj/item/weapon/kitchen/knife,/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/space)
"hC" = (/obj/machinery/constructable_frame/machine_frame,/obj/item/weapon/circuitboard/chem_dispenser,/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/space)
"hD" = (/obj/structure/stool/bed/chair/office/light,/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/turf/simulated/shuttle/floor,/area/space)
"hE" = (/obj/machinery/constructable_frame/machine_frame,/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/space)
diff --git a/_maps/map_files/MetaStation/z5.dmm b/_maps/map_files/MetaStation/z5.dmm
index a4f6fd1d8ab..cba5800eedc 100644
--- a/_maps/map_files/MetaStation/z5.dmm
+++ b/_maps/map_files/MetaStation/z5.dmm
@@ -228,7 +228,7 @@
"et" = (/turf/simulated/floor/plasteel/airless{icon_state = "asteroidwarning"; dir = 2},/area/mine/abandoned)
"eu" = (/obj/item/weapon/shard{icon_state = "medium"},/turf/simulated/floor/plasteel/airless{icon_state = "asteroidwarning"; dir = 2},/area/mine/abandoned)
"ev" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating/airless{icon_state = "asteroidplating"},/area/mine/explored)
-"ew" = (/obj/structure/table,/obj/item/trash/plate,/obj/item/weapon/kitchen/utensil/fork,/turf/simulated/floor/plasteel{icon_state = "floorgrime"; temperature = 273.15},/area/mine/laborcamp)
+"ew" = (/obj/structure/table,/obj/item/trash/plate,/obj/item/weapon/kitchen/fork,/turf/simulated/floor/plasteel{icon_state = "floorgrime"; temperature = 273.15},/area/mine/laborcamp)
"ex" = (/obj/effect/decal/cleanable/cobweb2,/obj/structure/stool/bed/chair{dir = 8},/turf/simulated/floor/plasteel{icon_state = "floorgrime"; temperature = 273.15},/area/mine/laborcamp)
"ey" = (/obj/machinery/atmospherics/pipe/simple,/turf/simulated/floor/plasteel{icon_state = "floorgrime"; temperature = 273.15},/area/mine/laborcamp)
"ez" = (/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 32},/turf/simulated/floor/plasteel{icon_state = "floorgrime"; temperature = 273.15},/area/mine/laborcamp)
diff --git a/_maps/map_files/MiniStation/MiniStation.dmm b/_maps/map_files/MiniStation/MiniStation.dmm
index 144eb8c3a48..e0684b3534e 100644
--- a/_maps/map_files/MiniStation/MiniStation.dmm
+++ b/_maps/map_files/MiniStation/MiniStation.dmm
@@ -1029,7 +1029,7 @@
"tO" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/machinery/camera/autoname{dir = 4},/turf/simulated/floor/plasteel,/area/hallway/primary/central)
"tP" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/crew_quarters/bar)
"tQ" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 2; on = 1},/obj/structure/stool/bed/chair{dir = 4},/turf/simulated/floor/plasteel{icon_state = "bar"},/area/crew_quarters/bar)
-"tR" = (/obj/structure/table,/obj/item/weapon/reagent_containers/food/condiment/peppermill{pixel_x = 3},/obj/item/weapon/reagent_containers/food/condiment/saltshaker{pixel_x = -3; pixel_y = 0},/obj/item/weapon/kitchen/utensil/fork,/turf/simulated/floor/plasteel{icon_state = "bar"},/area/crew_quarters/bar)
+"tR" = (/obj/structure/table,/obj/item/weapon/reagent_containers/food/condiment/peppermill{pixel_x = 3},/obj/item/weapon/reagent_containers/food/condiment/saltshaker{pixel_x = -3; pixel_y = 0},/obj/item/weapon/kitchen/fork,/turf/simulated/floor/plasteel{icon_state = "bar"},/area/crew_quarters/bar)
"tS" = (/obj/structure/stool/bed/chair{dir = 8},/turf/simulated/floor/plasteel{icon_state = "bar"},/area/crew_quarters/bar)
"tT" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{icon_state = "bar"},/area/crew_quarters/bar)
"tU" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel{icon_state = "bar"},/area/crew_quarters/bar)
diff --git a/_maps/map_files/MiniStation/z2.dmm b/_maps/map_files/MiniStation/z2.dmm
index 059bd30b2cf..d58f8b4881a 100644
--- a/_maps/map_files/MiniStation/z2.dmm
+++ b/_maps/map_files/MiniStation/z2.dmm
@@ -409,9 +409,9 @@
"md" = (/obj/structure/stool/bed/chair{dir = 1},/obj/effect/landmark{name = "tdomeadmin"},/turf/unsimulated/floor{icon_state = "redyellowfull"; dir = 5},/area/tdome/tdomeadmin)
"me" = (/obj/effect/decal/cleanable/molten_item,/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/wizard_station)
"mf" = (/turf/unsimulated/wall/fakeglass,/area/wizard_station)
-"mg" = (/obj/structure/rack,/obj/item/weapon/kitchenknife/ritual,/turf/unsimulated/floor{dir = 8; icon_state = "chapel"},/area/wizard_station)
+"mg" = (/obj/structure/rack,/obj/item/weapon/kitchen/knife/ritual,/turf/unsimulated/floor{dir = 8; icon_state = "chapel"},/area/wizard_station)
"mh" = (/obj/effect/decal/cleanable/blood,/turf/unsimulated/floor{dir = 8; icon_state = "chapel"},/area/wizard_station)
-"mi" = (/obj/structure/rack,/obj/item/weapon/kitchenknife/ritual,/turf/unsimulated/floor{icon_state = "chapel"},/area/wizard_station)
+"mi" = (/obj/structure/rack,/obj/item/weapon/kitchen/knife/ritual,/turf/unsimulated/floor{icon_state = "chapel"},/area/wizard_station)
"mj" = (/obj/machinery/computer/security/telescreen{pixel_y = -32},/turf/unsimulated/floor{icon_state = "redyellowfull"; dir = 5},/area/tdome/tdomeadmin)
"mk" = (/turf/unsimulated/floor{icon_state = "floor"},/area/tdome/tdomeadmin)
"ml" = (/turf/unsimulated/wall/fakedoor{name = "Thunderdome Admin"},/area/tdome/tdomeadmin)
diff --git a/_maps/map_files/TgStation/tgstation.2.1.3.dmm b/_maps/map_files/TgStation/tgstation.2.1.3.dmm
index fc743dcec33..7f92eb9be0d 100644
--- a/_maps/map_files/TgStation/tgstation.2.1.3.dmm
+++ b/_maps/map_files/TgStation/tgstation.2.1.3.dmm
@@ -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)
@@ -2483,7 +2483,7 @@
"aVM" = (/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/turf/simulated/floor/plasteel,/area/hallway/primary/central)
"aVN" = (/obj/structure/table/reinforced,/obj/item/weapon/lighter/zippo,/turf/simulated/floor/plasteel{icon_state = "bar"},/area/crew_quarters/bar)
"aVO" = (/obj/structure/stool,/obj/effect/landmark/start{name = "Assistant"},/turf/simulated/floor/plasteel{icon_state = "bar"},/area/crew_quarters/bar)
-"aVP" = (/obj/structure/table,/obj/item/weapon/kitchen/utensil/fork,/turf/simulated/floor/plasteel{icon_state = "bar"},/area/crew_quarters/bar)
+"aVP" = (/obj/structure/table,/obj/item/weapon/kitchen/fork,/turf/simulated/floor/plasteel{icon_state = "bar"},/area/crew_quarters/bar)
"aVQ" = (/obj/machinery/atmospherics/pipe/simple/yellow/visible{dir = 4},/turf/simulated/wall/r_wall,/area/atmos)
"aVR" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/simple/cyan/visible{dir = 9},/turf/simulated/floor/plating,/area/atmos)
"aVS" = (/obj/machinery/light{dir = 4},/obj/machinery/atmospherics/pipe/simple/cyan/visible{dir = 6},/turf/simulated/floor/plasteel,/area/atmos)
@@ -6462,7 +6462,7 @@
"cuA" = (/obj/structure/sign/directions/medical{dir = 4; icon_state = "direction_med"; pixel_x = 32; pixel_y = -24; tag = "icon-direction_med (EAST)"},/obj/structure/sign/directions/science{dir = 4; icon_state = "direction_sci"; pixel_x = 32; pixel_y = -32; tag = "icon-direction_sci (EAST)"},/obj/structure/sign/directions/engineering{pixel_x = 32; pixel_y = -40},/turf/simulated/floor/plasteel,/area/hallway/primary/central)
"cuB" = (/obj/structure/disposalpipe/junction{icon_state = "pipe-j2"; dir = 2},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/sign/directions/engineering{pixel_x = -32; pixel_y = -40},/obj/structure/sign/directions/medical{dir = 4; icon_state = "direction_med"; pixel_x = -32; pixel_y = -24; tag = "icon-direction_med (EAST)"},/obj/structure/sign/directions/evac{dir = 4; icon_state = "direction_evac"; pixel_x = -32; pixel_y = -32; tag = "icon-direction_evac (EAST)"},/turf/simulated/floor/plasteel,/area/hallway/primary/central)
"cuD" = (/obj/machinery/light_switch{pixel_y = 28},/obj/machinery/camera{c_tag = "Custodial Closet"},/obj/structure/stool/bed/chair/janicart,/turf/simulated/floor/plasteel,/area/janitor)
-
+
(1,1,1) = {"
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
diff --git a/_maps/map_files/generic/z2.dmm b/_maps/map_files/generic/z2.dmm
index 83e61cd5c85..816c1468663 100644
--- a/_maps/map_files/generic/z2.dmm
+++ b/_maps/map_files/generic/z2.dmm
@@ -654,7 +654,7 @@
"mD" = (/turf/simulated/floor/plasteel,/area/tdome/arena)
"mE" = (/turf/unsimulated/wall/normal{tag = "icon-uranium1"; icon_state = "uranium1"},/area/wizard_station)
"mF" = (/obj/structure/stool/bed/chair/wood/wings,/turf/unsimulated/floor{tag = "icon-cult"; icon_state = "cult"},/area/wizard_station)
-"mG" = (/obj/structure/table/wood,/obj/item/stack/medical/bruise_pack,/obj/item/stack/medical/ointment,/turf/unsimulated/floor{tag = "icon-cult"; icon_state = "cult"},/area/wizard_station)
+"mG" = (/obj/structure/table/wood,/obj/item/stack/medical/bruise_pack,/obj/item/stack/medical/ointment,/obj/item/device/radio/intercom{desc = "Talk through this. Magically."; freerange = 1; frequency = 1213; name = "Wizard Intercom"; pixel_x = -32; subspace_transmission = 1; syndie = 1},/turf/unsimulated/floor{tag = "icon-cult"; icon_state = "cult"},/area/wizard_station)
"mH" = (/obj/structure/table/wood,/obj/item/weapon/retractor,/turf/unsimulated/floor{tag = "icon-cult"; icon_state = "cult"},/area/wizard_station)
"mI" = (/obj/structure/stool/bed/chair/office/dark,/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/centcom/ferry)
"mJ" = (/obj/structure/table/wood,/obj/item/clothing/suit/wizrobe/magusred,/obj/item/clothing/head/wizard/magus,/obj/item/weapon/staff,/turf/unsimulated/floor{tag = "icon-cult"; icon_state = "cult"},/area/wizard_station)
@@ -697,7 +697,7 @@
"nu" = (/turf/unsimulated/wall/fakeglass{color = "#008000"; dir = 1; icon_state = "fakewindows2"},/area/wizard_station)
"nv" = (/obj/structure/bookcase,/turf/unsimulated/floor{tag = "icon-cult"; icon_state = "cult"},/area/wizard_station)
"nw" = (/turf/unsimulated/floor{icon_state = "grass1"; name = "grass"},/area/tdome/tdomeobserve)
-"nx" = (/obj/structure/cult/talisman{desc = "A altar dedicated to the Wizard's Federation"},/obj/item/weapon/kitchenknife/ritual,/turf/unsimulated/floor{tag = "icon-cult"; icon_state = "cult"},/area/wizard_station)
+"nx" = (/obj/structure/cult/talisman{desc = "A altar dedicated to the Wizard's Federation"},/obj/item/weapon/kitchen/knife/ritual,/turf/unsimulated/floor{tag = "icon-cult"; icon_state = "cult"},/area/wizard_station)
"ny" = (/obj/item/clothing/shoes/sandal/marisa,/obj/item/clothing/suit/wizrobe/marisa,/obj/item/clothing/head/wizard/marisa,/obj/item/weapon/staff/broom,/turf/unsimulated/floor{tag = "icon-cult"; icon_state = "cult"},/area/wizard_station)
"nz" = (/obj/effect/decal/cleanable/blood/splatter,/mob/living/simple_animal/hostile/creature{name = "Experiment 35b"},/turf/unsimulated/floor{tag = "icon-cult"; icon_state = "cult"},/area/wizard_station)
"nA" = (/turf/unsimulated/wall/fakeglass{icon_state = "fakewindows"; dir = 9},/area/centcom/evac)
@@ -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,9 +881,35 @@
"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
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababahaiaiaiaiaiajakakakakakajalalalalalajamanananaoap
@@ -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
diff --git a/_maps/map_files/generic/z5.dmm b/_maps/map_files/generic/z5.dmm
index 948b538f570..bfde3be2fef 100644
--- a/_maps/map_files/generic/z5.dmm
+++ b/_maps/map_files/generic/z5.dmm
@@ -228,7 +228,7 @@
"eu" = (/turf/simulated/floor/plasteel/airless{icon_state = "asteroidwarning"; dir = 2},/area/mine/abandoned)
"ev" = (/obj/item/weapon/shard{icon_state = "medium"},/turf/simulated/floor/plasteel/airless{icon_state = "asteroidwarning"; dir = 2},/area/mine/abandoned)
"ew" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating/airless{icon_state = "asteroidplating"},/area/mine/explored)
-"ex" = (/obj/structure/table,/obj/item/trash/plate,/obj/item/weapon/kitchen/utensil/fork,/turf/simulated/floor/plasteel{icon_state = "floorgrime"; temperature = 273.15},/area/mine/laborcamp)
+"ex" = (/obj/structure/table,/obj/item/trash/plate,/obj/item/weapon/kitchen/fork,/turf/simulated/floor/plasteel{icon_state = "floorgrime"; temperature = 273.15},/area/mine/laborcamp)
"ey" = (/obj/effect/decal/cleanable/cobweb2,/obj/structure/stool/bed/chair{dir = 8},/turf/simulated/floor/plasteel{icon_state = "floorgrime"; temperature = 273.15},/area/mine/laborcamp)
"ez" = (/obj/machinery/atmospherics/pipe/simple,/turf/simulated/floor/plasteel{icon_state = "floorgrime"; temperature = 273.15},/area/mine/laborcamp)
"eA" = (/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 32},/turf/simulated/floor/plasteel{icon_state = "floorgrime"; temperature = 273.15},/area/mine/laborcamp)
@@ -708,7 +708,7 @@
"nH" = (/obj/structure/disposaloutlet{dir = 1; eject_range = 1},/obj/structure/disposalpipe/trunk{dir = 1},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 1},/area/mine/production)
"nI" = (/obj/docking_port/stationary{dheight = 9; dir = 2; dwidth = 5; height = 22; id = "syndicate_z5"; name = "south of asteroid"; turf_type = /turf/space; width = 18},/turf/space,/area/space)
"nJ" = (/obj/structure/table,/obj/item/weapon/storage/firstaid/brute{pixel_x = 3; pixel_y = 3},/obj/item/weapon/storage/firstaid/regular,/turf/simulated/floor/plasteel{dir = 4; icon_state = "whiteblue"},/area/mine/living_quarters)
-
+
(1,1,1) = {"
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
diff --git a/code/ATMOSPHERICS/atmospherics.dm b/code/ATMOSPHERICS/atmospherics.dm
index 9569becc9fc..77f195b9c79 100644
--- a/code/ATMOSPHERICS/atmospherics.dm
+++ b/code/ATMOSPHERICS/atmospherics.dm
@@ -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()
..()
@@ -35,7 +45,7 @@ Pipelines + Other Objects -> Pipe network
return
/obj/machinery/atmospherics/proc/safe_input(var/title, var/text, var/default_set)
- var/new_value = input(usr,"Enter new output pressure (0-4500kPa)","Pressure control",default_set) as num
+ var/new_value = input(usr,text,title,default_set) as num
if(usr.canUseTopic(src))
return new_value
return default_set
@@ -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 << "You must remove the plating first."
+ user << "You must remove the plating first!"
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 << "You cannot unwrench this [src], it is too exerted due to internal pressure."
+ user << "You cannot unwrench this [src], it is too exerted due to internal pressure!"
return 1
playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1)
user << "You begin to unfasten \the [src]..."
if (do_after(user, 40) && !gc_destroyed)
user.visible_message( \
"[user] unfastens \the [src].", \
- "You have unfastened \the [src].", \
- "You hear ratchet.")
+ "You unfasten \the [src].", \
+ "You hear ratchet.")
investigate_log("was REMOVED 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()
\ No newline at end of file
+ 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("You hear something squeezing through the ducts...","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("You hear something squeezing through the ducts...","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
diff --git a/code/ATMOSPHERICS/components/binary_devices/passive_gate.dm b/code/ATMOSPHERICS/components/binary_devices/passive_gate.dm
index 0719c32f502..ba6c6e60bfd 100644
--- a/code/ATMOSPHERICS/components/binary_devices/passive_gate.dm
+++ b/code/ATMOSPHERICS/components/binary_devices/passive_gate.dm
@@ -89,14 +89,24 @@ Passive gate is similar to the regular pump except:
return 1
-/obj/machinery/atmospherics/binary/passive_gate/interact(mob/user as mob)
- var/dat = {"Power: [on?"On":"Off"]
- Desirable output pressure:
- [round(target_pressure,0.1)]kPa | Change
- "}
+/obj/machinery/atmospherics/binary/passive_gate/ui_interact(mob/user, ui_key = "main")
+ if(stat & (BROKEN|NOPOWER))
+ return
- user << browse("
- Desirable output pressure:
- [round(target_pressure,0.1)]kPa | Change
- "}
+/obj/machinery/atmospherics/binary/pump/ui_interact(mob/user, ui_key = "main")
+ if(stat & (BROKEN|NOPOWER))
+ return
- user << browse("
- Desirable output flow:
- [round(transfer_rate,1)]l/s | Change
- "}
+/obj/machinery/atmospherics/binary/volume_pump/ui_interact(mob/user, ui_key = "main")
+ if(stat & (BROKEN|NOPOWER))
+ return
- user << browse("
- Filtering: [current_filter_type]
- Set Filter Type:
- Plasma
- Oxygen
- Nitrogen
- Carbon Dioxide
- Nitrous Oxide
- Nothing
-
Desirable output pressure:
- [src.target_pressure]kPa | Change
- "}
-/*
- user << browse("
Clear Screen", src.temp, src)
- //else
- // src.on != src.on
-*/
- user << browse("
- Desirable output pressure:
- [target_pressure]kPa | Change
-
- Node 1 Concentration:
- -
- -
- [node1_concentration]([node1_concentration*100]%)
- +
- +
-
- Node 2 Concentration:
- -
- -
- [node2_concentration]([node2_concentration*100]%)
- +
- +
- "}
- user << browse("
Objectives are empty! Set to kill all rival gang leaders."
-
-
else if (src in ticker.mode.B_bosses)
text += "loyal|none|(A) gangster boss|(B) gangster BOSS"
text += "
Equipment: give"
@@ -306,13 +302,10 @@
var/list/L = current.get_contents()
var/obj/item/device/gangtool/gangtool = locate() in L
if (gangtool)
- text += "
take."
+ text += "|take."
else
text += "."
- if (objectives.len==0)
- text += "
Objectives are empty! Set to kill all rival gang leaders."
-
else if (src in ticker.mode.A_gang)
text += "loyal|none|(A) GANGSTER boss|(B) gangster boss"
else if (src in ticker.mode.B_gang)
@@ -835,6 +828,8 @@
current << "You are a [gang_name("A")] Gang Boss!"
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 << "You are a [gang_name("B")] Gang Boss!"
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 << "You can't break your vow of silence that fast!"
+ still_recharging_msg = "You can't break your vow of silence that fast!"
else
- still_recharging_msg = "You'll have to wait before you can give your vow of silence again."
+ still_recharging_msg = "You'll have to wait before you can give your vow of silence again!"
..()
/obj/effect/proc_holder/spell/targeted/mime/speak/cast(list/targets)
diff --git a/code/datums/spells/mind_transfer.dm b/code/datums/spells/mind_transfer.dm
index 710d98ba015..9a6605ff3ca 100644
--- a/code/datums/spells/mind_transfer.dm
+++ b/code/datums/spells/mind_transfer.dm
@@ -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 << "No mind found!"
return
if(targets.len > 1)
- user << "Too many minds! You're not a hive damnit!"//Whaa...aat?
+ user << "Too many minds! You're not a hive damnit!"//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 << "They are too far away!"
return
if(target.stat == DEAD)
- user << "You don't particularly want to be dead."
+ user << "You don't particularly want to be dead!"
return
if(!target.key || !target.mind)
- user << "They appear to be catatonic. Not even magic can affect their vacant mind."
+ user << "They appear to be catatonic! Not even magic can affect their vacant mind."
return
if(target.mind.special_role in protected_roles)
- user << "Their mind is resisting your spell."
+ user << "Their mind is resisting your spell!"
return
var/mob/living/victim = target//The target of the spell whos body will be transferred to.
diff --git a/code/datums/uplink_item.dm b/code/datums/uplink_item.dm
index 980cca93832..7f6db7d1388 100644
--- a/code/datums/uplink_item.dm
+++ b/code/datums/uplink_item.dm
@@ -411,7 +411,7 @@ var/list/uplink_items = list()
/datum/uplink_item/stealthy_tools/syndigolashes
name = "No-Slip Brown Shoes"
desc = "These allow you to run on wet floors. They do not work on lubricated surfaces."
- item = /obj/item/clothing/shoes/syndigaloshes
+ item = /obj/item/clothing/shoes/sneakers/syndigaloshes
cost = 4
/datum/uplink_item/stealthy_tools/agent_card
diff --git a/code/datums/wires/airlock.dm b/code/datums/wires/airlock.dm
index 6309fa53df2..a25186734b5 100644
--- a/code/datums/wires/airlock.dm
+++ b/code/datums/wires/airlock.dm
@@ -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("You hear a click from the bottom of the door.", 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("You hear a click from the bottom of the door.", null, 1)
A.update_icon()
if(AIRLOCK_WIRE_BACKUP_POWER1 || AIRLOCK_WIRE_BACKUP_POWER2)
diff --git a/code/datums/wires/wires.dm b/code/datums/wires/wires.dm
index 6081eaa8e28..ba6f252724a 100644
--- a/code/datums/wires/wires.dm
+++ b/code/datums/wires/wires.dm
@@ -113,14 +113,14 @@ var/list/wireColours = list("red", "blue", "green", "black", "orange", "brown",
var/colour = href_list["cut"]
CutWireColour(colour)
else
- L << "You need wirecutters!"
+ L << "You need wirecutters!"
else if(href_list["pulse"])
if(istype(I, /obj/item/device/multitool))
var/colour = href_list["pulse"]
PulseColour(colour)
else
- L << "You need a multitool!"
+ L << "You need a multitool!"
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 << "You need a attachable assembly!"
+ L << "You need a attachable assembly!"
diff --git a/code/game/area/Space Station 13 areas.dm b/code/game/area/Space Station 13 areas.dm
index da4a45d31b9..2ab48980639 100644
--- a/code/game/area/Space Station 13 areas.dm
+++ b/code/game/area/Space Station 13 areas.dm
@@ -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"
diff --git a/code/game/dna.dm b/code/game/dna.dm
index 28ff09569ac..4a1bed49239 100644
--- a/code/game/dna.dm
+++ b/code/game/dna.dm
@@ -406,15 +406,15 @@
return
user.changeNext_move(CLICK_CD_BREAKOUT)
user.last_special = world.time + CLICK_CD_BREAKOUT
- user << "You lean on the back of [src] and start pushing the door open. (this will take about [breakout_time] minutes.)"
- user.visible_message("You hear a metallic creaking from [src]!")
+ user << "You lean on the back of [src] and start pushing the door open... (this will take about [breakout_time] minutes.)"
+ user.visible_message("You hear a metallic creaking from [src]!")
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("[user] successfully broke out of [src]!")
+ visible_message("[user] successfully broke out of [src]!")
user << "You successfully break out of [src]!"
open_machine()
diff --git a/code/game/gamemodes/abduction/abduction.dm b/code/game/gamemodes/abduction/abduction.dm
index c51bafd91ac..5322e70f9c2 100644
--- a/code/game/gamemodes/abduction/abduction.dm
+++ b/code/game/gamemodes/abduction/abduction.dm
@@ -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()
diff --git a/code/game/gamemodes/abduction/abduction_gear.dm b/code/game/gamemodes/abduction/abduction_gear.dm
index 689d8555d04..0b8b72cb227 100644
--- a/code/game/gamemodes/abduction/abduction_gear.dm
+++ b/code/game/gamemodes/abduction/abduction_gear.dm
@@ -133,7 +133,7 @@
/obj/item/device/abductor/proc/AbductorCheck(var/user)
if(IsAbductor(user))
return 1
- user << "You can't figure how this works."
+ user << "You can't figure how this works!"
return 0
/obj/item/device/abductor/proc/ScientistCheck(var/user)
@@ -155,7 +155,7 @@
if(!AbductorCheck(user))
return
if(!ScientistCheck(user))
- user << "You're not trained to use this"
+ user << "You're not trained to use this!"
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 << "This specimen is already marked."
+ user << "This specimen is already marked!"
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 << "You need to be next to the specimen to prepare it for transport."
+ user << "You need to be next to the specimen to prepare it for transport!"
return
- user << "You start preparing the specimen for transport "
+ user << "You start preparing the specimen for transport..."
if(do_after(user, 100))
marked = target
- user << "You finish preparing the specimen for transport "
+ user << "You finish preparing the specimen for transport."
/obj/item/device/abductor/silencer
@@ -479,20 +479,58 @@ Congratulations! You are now trained for xenobiology research!"}
user <<"The baton is in restrain mode."
-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"
\ No newline at end of file
diff --git a/code/game/gamemodes/abduction/abduction_machinery.dm b/code/game/gamemodes/abduction/abduction_machinery.dm
deleted file mode 100644
index 05a99e9eb34..00000000000
--- a/code/game/gamemodes/abduction/abduction_machinery.dm
+++ /dev/null
@@ -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 += " Abductsoft 3000
"
-
- if(experiment != null)
- var/points = experiment.points
- dat += "Collected Samples : [points]
"
- else
- dat += "NO EXPERIMENT MACHINE DETECTED
"
-
- if(pad!=null)
- dat += "Activate Teleporter
"
- dat += "Set Teleporter
"
- if(gizmo!=null && gizmo.marked!=null)
- dat += "Retrieve Mark
"
- else
- dat += "Retrieve Mark
"
- else
- dat += "NO TELEPAD DETECTED"
-
- if(vest!=null)
- dat += " Agent Vest Mode
"
- var/mode = vest.mode
- if(mode == VEST_STEALTH)
- dat += "Combat"
- dat += "Stealth"
- else
- dat += "Combat"
- dat += "Stealth"
-
- dat+="
"
- dat += "Select Agent Vest Disguise
"
- else
- dat += "NO AGENT VEST DETECTED"
- 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 += " Experiment
"
- 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 += "
"
- else
- dat += " Experiment "
-
- if(!occupant)
- dat += ""
- dat += " " //Avert your eyes
- dat += "
"
- dat += "Probe
"
- dat += "Dissect
"
- dat += "Analyze
"
- dat += "Machine Unoccupied
"
- else
- dat += "Subject Status :
"
- dat += "[occupant.name] => "
- switch(occupant.stat)
- if(0)
- dat += "Conscious"
- if(1)
- dat += "Unconscious"
- else
- dat += "DEAD"
- dat += "
"
- dat += "[flash]"
- dat += "
"
- dat += "Scan"
- dat += "Close" : "open=1'>Open"]"
- 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 "Specimen already in the database"
- if(H.stat == DEAD)
- say("Specimen deceased - please provide fresh sample.")
- return "Specimen Deceased"
- var/obj/item/gland/GlandTest = locate() in H
- if(!GlandTest)
- say("Experimental dissection not detected!")
- return "No glands detected!"
- if(H.mind != null || H.ckey != null)
- history += H
- say("Processing Specimen...")
- sleep(5)
- switch(text2num(type))
- if(1)
- H << "You feel violated."
- if(2)
- H << "You feel being sliced and put back together."
- if(3)
- H << "You feel under intense scrutiny."
- sleep(5)
- H << "Your mind snaps!"
- 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 << "Your current objectives:"
- for(var/datum/objective/objective in H.mind.objectives)
- H << "Objective #[obj_count]: [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 "Experiment Successfull! [point_reward] new data-points collected."
- else
- playsound(src.loc, 'sound/machines/buzz-sigh.ogg', 50, 1)
- return "Experiment Failed! No replacement organ detected."
- else
- say("Brain Activity Nonexistant - Disposing Sample...")
- open_machine()
- SendBack(H)
- return "Specimen Braindead - Disposed"
- return "ERROR"
-
-
-/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 = {"
- "}
- 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 += "[amount]"
- if(item_count == 3) // Three boxes per line
- dat +=""
- 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))
\ No newline at end of file
diff --git a/code/game/gamemodes/abduction/abduction_surgery.dm b/code/game/gamemodes/abduction/abduction_surgery.dm
index 62308897062..a618e1d2544 100644
--- a/code/game/gamemodes/abduction/abduction_surgery.dm
+++ b/code/game/gamemodes/abduction/abduction_surgery.dm
@@ -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("[user] starts to remove [target]'s organs.")
+ user.visible_message("[user] starts to remove [target]'s organs.", "You start to remove [target]'s organs...")
/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("[user] pulls [IC] out of [target]'s [target_zone]!")
+ user.visible_message("[user] pulls [IC] out of [target]'s [target_zone]!", "You pull [IC] out of [target]'s [target_zone].")
user.put_in_hands(IC)
target.internal_organs -= IC
return 1
else
- user.visible_message("[user] doesn't find anything in [target]'s [target_zone].")
+ user << "You don't find anything in [target]'s [target_zone]!"
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("[user] starts to insert [tool] into [target].")
+ user.visible_message("[user] starts to insert [tool] into [target].", "You start to insert [tool] into [target]...")
/datum/surgery_step/gland_insert/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
- user.visible_message("[user] inserts [tool] into [target].")
+ user.visible_message("[user] inserts [tool] into [target].", "You insert [tool] into [target].")
user.drop_item()
var/obj/item/gland/gland = tool
gland.Inject(target)
diff --git a/code/game/gamemodes/abduction/gland.dm b/code/game/gamemodes/abduction/gland.dm
index 7e075ff255b..17f7416f268 100644
--- a/code/game/gamemodes/abduction/gland.dm
+++ b/code/game/gamemodes/abduction/gland.dm
@@ -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."
\ No newline at end of file
+ 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("[host] skin erupts with blood!",\
+ "Your skin erupts with blood! It hurts!")
+
+ 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("[src] hatches!")
+ M.loc = src.loc
+ qdel(src)
+
+/obj/item/gland/plasma
+ cooldown_low = 1200
+ cooldown_high = 2400
+ uses = 1
+
+/obj/item/gland/plasma/activate()
+ host << "You feel bloated."
+ sleep(150)
+ host << "Your stomach feels about to explode!"
+ sleep(50)
+ host.visible_message("[host] explodes in a cloud of plasma!")
+ var/turf/simulated/T = get_turf(host)
+ if(istype(T))
+ T.atmos_spawn_air(SPAWN_TOXINS|SPAWN_20C,300)
+ host.gib()
+ return
diff --git a/code/game/gamemodes/abduction/machinery/camera.dm b/code/game/gamemodes/abduction/machinery/camera.dm
new file mode 100644
index 00000000000..52773d60e1a
--- /dev/null
+++ b/code/game/gamemodes/abduction/machinery/camera.dm
@@ -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)
diff --git a/code/game/gamemodes/abduction/machinery/console.dm b/code/game/gamemodes/abduction/machinery/console.dm
new file mode 100644
index 00000000000..bfaeefa3e2c
--- /dev/null
+++ b/code/game/gamemodes/abduction/machinery/console.dm
@@ -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 << "You start mashing alien buttons at random!"
+ if(do_after(user,100))
+ TeleporterSend()
+ return
+ user.set_machine(src)
+ var/dat = ""
+ dat += " Abductsoft 3000
"
+
+ if(experiment != null)
+ var/points = experiment.points
+ dat += "Collected Samples : [points]
"
+ else
+ dat += "NO EXPERIMENT MACHINE DETECTED
"
+
+ if(pad!=null)
+ dat += "Emergency Teleporter System."
+ dat += "Consider using primary observation console first."
+ dat += "Activate Teleporter
"
+ dat += "Set Teleporter
"
+ if(gizmo!=null && gizmo.marked!=null)
+ dat += "Retrieve Mark
"
+ else
+ dat += "Retrieve Mark
"
+ else
+ dat += "NO TELEPAD DETECTED"
+
+ if(vest!=null)
+ dat += " Agent Vest Mode
"
+ var/mode = vest.mode
+ if(mode == VEST_STEALTH)
+ dat += "Combat"
+ dat += "Stealth"
+ else
+ dat += "Combat"
+ dat += "Stealth"
+
+ dat+="
"
+ dat += "Select Agent Vest Disguise
"
+ else
+ dat += "NO AGENT VEST DETECTED"
+ 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 << "You link the tool to the console."
+ 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 << "You link the vest to the console."
+ vest = V
+ else
+ ..()
\ No newline at end of file
diff --git a/code/game/gamemodes/abduction/machinery/dispenser.dm b/code/game/gamemodes/abduction/machinery/dispenser.dm
new file mode 100644
index 00000000000..d346e0366a5
--- /dev/null
+++ b/code/game/gamemodes/abduction/machinery/dispenser.dm
@@ -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 = {"
+ "}
+ 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 += "[amount]"
+ if(item_count == 3) // Three boxes per line
+ dat +=""
+ 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))
\ No newline at end of file
diff --git a/code/game/gamemodes/abduction/machinery/experiment.dm b/code/game/gamemodes/abduction/machinery/experiment.dm
new file mode 100644
index 00000000000..371011323df
--- /dev/null
+++ b/code/game/gamemodes/abduction/machinery/experiment.dm
@@ -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 += " Experiment
"
+ 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 += "
"
+ else
+ dat += " Experiment "
+
+ if(!occupant)
+ dat += ""
+ dat += " " //Avert your eyes
+ dat += "
"
+ dat += "Probe
"
+ dat += "Dissect
"
+ dat += "Analyze
"
+ dat += "Machine Unoccupied
"
+ else
+ dat += "Subject Status :
"
+ dat += "[occupant.name] => "
+ switch(occupant.stat)
+ if(0)
+ dat += "Conscious"
+ if(1)
+ dat += "Unconscious"
+ else
+ dat += "DEAD"
+ dat += "
"
+ dat += "[flash]"
+ dat += "
"
+ dat += "Scan"
+ dat += "Close" : "open=1'>Open"]"
+ 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 "Specimen already in the database"
+ if(H.stat == DEAD)
+ say("Specimen deceased - please provide fresh sample.")
+ return "Specimen Deceased"
+ var/obj/item/gland/GlandTest = locate() in H
+ if(!GlandTest)
+ say("Experimental dissection not detected!")
+ return "No glands detected!"
+ if(H.mind != null || H.ckey != null)
+ history += H
+ say("Processing Specimen...")
+ sleep(5)
+ switch(text2num(type))
+ if(1)
+ H << "You feel violated."
+ if(2)
+ H << "You feel being sliced and put back together."
+ if(3)
+ H << "You feel under intense scrutiny."
+ sleep(5)
+ H << "Your mind snaps!"
+ 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 << "Your current objectives:"
+ for(var/datum/objective/objective in H.mind.objectives)
+ H << "Objective #[obj_count]: [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 "Experiment Successfull! [point_reward] new data-points collected."
+ else
+ playsound(src.loc, 'sound/machines/buzz-sigh.ogg', 50, 1)
+ return "Experiment Failed! No replacement organ detected."
+ else
+ say("Brain Activity Nonexistant - Disposing Sample...")
+ open_machine()
+ SendBack(H)
+ return "Specimen Braindead - Disposed"
+ return "ERROR"
+
+
+/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]\""
\ No newline at end of file
diff --git a/code/game/gamemodes/abduction/machinery/pad.dm b/code/game/gamemodes/abduction/machinery/pad.dm
new file mode 100644
index 00000000000..081f746a085
--- /dev/null
+++ b/code/game/gamemodes/abduction/machinery/pad.dm
@@ -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"
diff --git a/code/game/gamemodes/blob/blob.dm b/code/game/gamemodes/blob/blob.dm
index 207805d235b..ded9ed324f2 100644
--- a/code/game/gamemodes/blob/blob.dm
+++ b/code/game/gamemodes/blob/blob.dm
@@ -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
diff --git a/code/game/gamemodes/blob/blob_finish.dm b/code/game/gamemodes/blob/blob_finish.dm
index aec57627778..c0987cabce1 100644
--- a/code/game/gamemodes/blob/blob_finish.dm
+++ b/code/game/gamemodes/blob/blob_finish.dm
@@ -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
diff --git a/code/game/gamemodes/blob/powers.dm b/code/game/gamemodes/blob/powers.dm
index 43c17da6211..e9d0eb6217c 100644
--- a/code/game/gamemodes/blob/powers.dm
+++ b/code/game/gamemodes/blob/powers.dm
@@ -2,7 +2,7 @@
/mob/camera/blob/proc/can_buy(var/cost = 15)
if(blob_points < cost)
- src << "You cannot afford this."
+ src << "You cannot afford this!"
return 0
add_points(-cost)
return 1
diff --git a/code/game/gamemodes/changeling/powers/absorb.dm b/code/game/gamemodes/changeling/powers/absorb.dm
index 081db162a22..913b6dd295d 100644
--- a/code/game/gamemodes/changeling/powers/absorb.dm
+++ b/code/game/gamemodes/changeling/powers/absorb.dm
@@ -17,10 +17,10 @@
var/obj/item/weapon/grab/G = user.get_active_hand()
if(!istype(G))
- user << "We must be grabbing a creature in our active hand to absorb them."
+ user << "We must be grabbing a creature in our active hand to absorb them!"
return
if(G.state <= GRAB_NECK)
- user << "We must have a tighter grip to absorb this creature."
+ user << "We must have a tighter grip to absorb this creature!"
return
var/mob/living/carbon/target = G.affecting
@@ -38,12 +38,10 @@
if(1)
user << "This creature is compatible. We must hold still..."
if(2)
- user << "We extend a proboscis."
- user.visible_message("[user] extends a proboscis!")
+ user.visible_message("[user] extends a proboscis!", "We extend a proboscis.")
if(3)
- user << "We stab [target] with the proboscis."
- user.visible_message("[user] stabs [target] with the proboscis!")
- target << "You feel a sharp stabbing pain!"
+ user.visible_message("[user] stabs [target] with the proboscis!", "We stab [target] with the proboscis.")
+ target << "You feel a sharp stabbing pain!"
target.take_overall_damage(40)
feedback_add_details("changeling_powers","A[stage]")
@@ -52,9 +50,8 @@
changeling.isabsorbing = 0
return
- user << "We have absorbed [target]!"
- user.visible_message("[user] sucks the fluids from [target]!")
- target << "You have been absorbed by the changeling!"
+ user.visible_message("[user] sucks the fluids from [target]!", "We have absorbed [target].")
+ target << "You are absorbed by the changeling!"
if(!changeling.has_dna(target.dna))
changeling.absorb_dna(target, user)
diff --git a/code/game/gamemodes/changeling/powers/mutations.dm b/code/game/gamemodes/changeling/powers/mutations.dm
index eb77d14ef3d..c96fc387697 100644
--- a/code/game/gamemodes/changeling/powers/mutations.dm
+++ b/code/game/gamemodes/changeling/powers/mutations.dm
@@ -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("With a sickening crunch, [user] reforms his [weapon_name_simple] into an arm!", "We assimilate the [weapon_name_simple] back into our body.", "", "We assimilate the [weapon_name_simple] back into our body.", "", "We assimilate the [weapon_name_simple] back into our body.", "", "We assimilate the [weapon_name_simple] back into our body.", "The [user.get_active_hand()] is stuck to your hand, you cannot grow a [weapon_name_simple] over it!"
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("[H] casts off their [suit_name_simple]!", "We cast off our [suit_name_simple][genetic_damage > 0 ? ", temporarily weakening our genomes." : "."]", "You hear the organic matter ripping and tearing!")
+ H.visible_message("[H] casts off their [suit_name_simple]!", "We cast off our [suit_name_simple][genetic_damage > 0 ? ", temporarily weakening our genomes." : "."]", "You hear the organic matter ripping and tearing!")
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("A grotesque blade forms around [loc.name]\'s arm!", "Our arm twists and mutates, transforming it into a deadly blade.", "You hear organic matter ripping and tearing!")
+ loc.visible_message("A grotesque blade forms around [loc.name]\'s arm!", "Our arm twists and mutates, transforming it into a deadly blade.", "You hear organic matter ripping and tearing!")
/obj/item/weapon/melee/arm_blade/dropped(mob/user)
- user.visible_message("With a sickening crunch, [user] reforms his blade into an arm!", "We assimilate the blade back into our body.", "", "We assimilate the blade back into our body.", "The airlock's motors resist our efforts to force it."
+ user << "The airlock's motors resist our efforts to force it!"
return
else if(A.locked)
- user << "The airlock's bolts prevent it from being forced."
+ user << "The airlock's bolts prevent it from being forced!"
return
else
//user.say("Heeeeeeeeeerrre's Johnny!")
- user.visible_message("[user] forces the door to open with \his [src]!", "We force the door to open.", "You hear a metal screeching sound.")
+ user.visible_message("[user] forces the door to open with \his [src]!", "We force the door to open.", "You hear a metal screeching sound.")
A.open(1)
@@ -207,7 +207,7 @@
/obj/item/weapon/melee/shield/New()
..()
if(ismob(loc))
- loc.visible_message("The end of [loc.name]\'s hand inflates rapidly, forming a huge shield-like mass!", "We inflate our hand into a strong shield.", "You hear organic matter ripping and tearing!")
+ loc.visible_message("The end of [loc.name]\'s hand inflates rapidly, forming a huge shield-like mass!", "We inflate our hand into a strong shield.", "You hear organic matter ripping and tearing!")
/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("With a sickening crunch, [H] reforms his shield into an arm!", "We assimilate our shield into our body", "", "We assimilate our shield into our body", "", "We inflate our flesh, creating a spaceproof suit!", "You hear organic matter ripping and tearing!")
+ loc.visible_message("[loc.name]\'s flesh rapidly inflates, forming a bloated mass around their body!", "We inflate our flesh, creating a spaceproof suit!", "You hear organic matter ripping and tearing!")
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("[loc.name]\'s flesh turns black, quickly transforming into a hard, chitinous mass!", "We harden our flesh, creating a suit of armor!", "You hear organic matter ripping and tearing!")
+ loc.visible_message("[loc.name]\'s flesh turns black, quickly transforming into a hard, chitinous mass!", "We harden our flesh, creating a suit of armor!", "You hear organic matter ripping and tearing!")
/obj/item/clothing/suit/armor/changeling/dropped()
qdel(src)
diff --git a/code/game/gamemodes/cult/ritual.dm b/code/game/gamemodes/cult/ritual.dm
index 32ae9b5a7e0..ac159322699 100644
--- a/code/game/gamemodes/cult/ritual.dm
+++ b/code/game/gamemodes/cult/ritual.dm
@@ -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("[usr.name] starts clawing at his arms like a mad man!")
+ usr.visible_message("[usr.name] starts clawing at his arms like a mad man!", "You start clawing at his arms like a mad man!")
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("[usr.name] paints strange symbols with their own blood")
+ usr.visible_message("[usr.name] paints strange symbols with their own blood.", "You paint strange symbols with your own blood.")
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 << "You can't mouth the arcane scratchings without fumbling over them."
+ user << "You can't mouth the arcane scratchings without fumbling over them!"
return
- var/message = "You are unable to speak the words of the rune."
+ var/message = "You are unable to speak the words of the rune!"
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("The markings pulse with a small burst of light, then fall dark.", 3, "You hear a faint fizzle.", 2)
+ visible_message("The markings pulse with a small burst of light, then fall dark.", 3, "You hear a faint fizzle.", 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("[user] slices open a finger and begins to chant and paint symbols on the floor.", 3, "You hear chanting.", 2)
- user << "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."
+ V.show_message("[user] slices open a finger and begins to chant and paint symbols on the floor.", 3, "You hear chanting.", 2)
+ user << "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."
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 << "You copy the translation notes from your tome."
/obj/item/weapon/tome/examine(mob/user)
diff --git a/code/game/gamemodes/cult/runes.dm b/code/game/gamemodes/cult/runes.dm
index babeb58ab51..340aa519ba5 100644
--- a/code/game/gamemodes/cult/runes.dm
+++ b/code/game/gamemodes/cult/runes.dm
@@ -26,8 +26,8 @@ var/list/sacrificed = list()
else
user.whisper("Sas[pick("'","`")]so c'arta forbici!")
user.visible_message("[user] disappears in a flash of red light!", \
- "You feel as your body gets dragged through the dimension of Nar-Sie!", \
- "You hear a sickening crunch and sloshing of viscera.")
+ "You feel as your body gets dragged through the dimension of Nar-Sie!", \
+ "You hear a sickening crunch and sloshing of viscera.")
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 << "You feel pain, as the rune disappears in reality shift caused by too much wear of space-time fabric"
+ user << "You feel pain, as the rune disappears in reality shift caused by too much wear of space-time fabric"
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("Rune disappears with a flash of red light, and in its place now a book lies.", \
"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.", \
- "You hear a pop and smell ozone.")
+ "You hear a pop and smell ozone.")
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("[M] writhes in pain as the markings below him glow a bloody red.", \
- "AAAAAAHHHH!", \
- "You hear an anguished scream.")
+ "AAAAAAHHHH!", \
+ "You hear an anguished scream.")
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("Blood flows from the rune into [usr]!", \
"The blood starts flowing from the rune and into your frail mortal body. You feel... empowered.", \
- "You hear a liquid flowing.")
+ "You hear a liquid flowing.")
var/mob/living/user = usr
if(user.bhunger)
user.bhunger = max(user.bhunger-2*drain,0)
if(drain>=50)
user.visible_message("[user]'s eyes give off eerie red glow!", \
"...but it wasn't nearly enough. You crave, crave for more. The hunger consumes you from within.", \
- "You hear a heartbeat.")
+ "You hear a heartbeat.")
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("[corpse_to_raise]'s eyes glow with a faint red as he stands up, slowly starting to breathe again.", \
"Life... I'm alive again...", \
- "You hear a faint, slightly familiar whisper.")
+ "You hear a faint, slightly familiar whisper.")
body_to_sacrifice.visible_message("[body_to_sacrifice] is torn apart, a black smoke swiftly dissipating from his remains!", \
"You feel as your blood boils, tearing you apart.", \
- "You hear a thousand voices, all crying in pain.")
+ "You hear a thousand voices, all crying in pain.")
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("[usr]'s eyes glow blue as \he freezes in place, absolutely motionless.", \
"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...", \
- "You hear only complete silence for a moment.")
+ "You hear only complete silence for a moment.")
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("A shape forms in the center of the rune. A shape of... a man.", \
"A shape forms in the center of the rune. A shape of... a man.", \
- "You hear liquid flowing.")
+ "You hear liquid flowing.")
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("[D] slowly dissipates into dust and bones.", \
"You feel pain, as bonds formed between your soul and this homunculus break.", \
- "You hear faint rustle.")
+ "You hear faint rustle.")
D.dust()
return
@@ -552,7 +552,7 @@ var/list/sacrificed = list()
runedec+=10
user.visible_message("[user] keels over dead, his blood glowing blue as it escapes his body and dissipates into thin air.", \
"In the last moment of your humble life, you feel an immense pain as fabric of reality mends... with your blood.", \
- "You hear faint rustle.")
+ "You hear faint rustle.")
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("Rune disappears with a flash of red light, and in its place now a body lies.", \
"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.", \
- "You hear a pop and smell ozone.")
+ "You hear a pop and smell ozone.")
qdel(src)
return fizzle(user)
diff --git a/code/game/gamemodes/game_mode.dm b/code/game/gamemodes/game_mode.dm
index 2e3654f7b6a..738c4852782 100644
--- a/code/game/gamemodes/game_mode.dm
+++ b/code/game/gamemodes/game_mode.dm
@@ -16,9 +16,10 @@
var/name = "invalid"
var/config_tag = null
var/votable = 1
- var/probability = 1
+ var/probability = 0
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
diff --git a/code/game/gamemodes/gang/gang.dm b/code/game/gamemodes/gang/gang.dm
index 1432c50efd7..a5481346f30 100644
--- a/code/game/gamemodes/gang/gang.dm
+++ b/code/game/gamemodes/gang/gang.dm
@@ -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.5 //Goal = Total territories x goal_scalar
+
///////////////////////////
//Announces the game type//
///////////////////////////
/datum/game_mode/gang/announce()
world << "The current game mode is - Gang War!"
- world << "A violent turf war has erupted on the station!
Gangsters - Take over the station by claiming more than half of the station!
Crew - The gangs will try to keep you on the station. Successfully evacuate the station to win!"
+ world << "A violent turf war has erupted on the station!
Gangsters - Take over the station by claiming more than [round(100*goal_scalar,1)]% of the station!
Crew - The gangs will try to keep you on the station. Successfully evacuate the station to win!"
///////////////////////////////////////////////////////////////////////////////
@@ -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 50% the station before the [(boss_mind in A_bosses) ? gang_name("B") : gang_name("A")] Gang does."
boss_mind.objectives += rival_obj
@@ -143,7 +138,7 @@
else
gangtool.register_device(mob)
mob << "The Gangtool in your [where] will allow you to use your influence to purchase items and prevent the station from evacuating before you can take over. Use it to recall the emergency shuttle from anywhere on the station."
- mob << "You can also promote your gang members to lieutenant by giving them an unregistered gangtool. Lieutenants cannot be deconverted and are able to use recruitment pens and gangtools."
+ mob << "You can also promote your gang members to lieutenant by giving them an unregistered gangtool. Lieutenants cannot be deconverted and are able to use recruitment pens and gangtools."
. += 1
var/where2 = mob.equip_in_one_of_slots(T, slots)
@@ -157,7 +152,7 @@
if (!where3)
mob << "Your Syndicate benefactors were unfortunately unable to get you a territory spraycan to start."
else
- mob << "The territory spraycan in your [where3] can be used to claim areas of the station for your gang. The more territory your gang controls, the more influence you get."
+ mob << "The territory spraycan in your [where3] can be used to claim areas of the station for your gang. The more territory your gang controls, the more influence you get. Distribute these to your gangsters to grow your influence faster."
. += 1
mob.update_icons()
@@ -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
@@ -199,8 +194,8 @@
carbon_mob.flash_eyes(1, 1)
gangster_mind.current.Stun(5)
gangster_mind.current << "You are now a member of the [gang=="A" ? gang_name("A") : gang_name("B")] Gang!"
- gangster_mind.current << "Help your bosses take over the station by claiming territory with the special spraycans they provide. Simply spray on any unclaimed area of the station."
- gangster_mind.current << "You can identify your bosses by their brown \"G\" icon."
+ gangster_mind.current << "Help your bosses take over the station by claiming territory with special spraycans only they can provide. Simply spray on any unclaimed area of the station."
+ gangster_mind.current << "You can identify your bosses by their red \[G\] icon."
gangster_mind.current.attack_log += "\[[time_stamp()]\] Has been converted to the [gang=="A" ? "[gang_name("A")] Gang (A)" : "[gang_name("B")] Gang (B)"]!"
gangster_mind.special_role = "[gang=="A" ? "[gang_name("A")] Gang (A)" : "[gang_name("B")] Gang (B)"]"
update_gang_icons_added(gangster_mind,gang)
@@ -290,7 +285,7 @@
if(!finished)
world << "The station was [station_was_nuked ? "destroyed!" : "evacuated before either gang could claim it!"]"
else
- world << "The [finished=="A" ? gang_name("A") : gang_name("B")] Gang has taken over the station!"
+ world << "The [finished=="A" ? gang_name("A") : gang_name("B")] Gang has claimed over [round(100*goal_scalar,1)]% of the station and has assumed control!"
..()
return 1
@@ -305,7 +300,7 @@
if(A_bosses.len || A_gang.len)
if(winner)
- world << "
The [gang_name("A")] Gang was [winner=="A" ? "victorious" : "defeated"] with [round((ticker.mode.A_territory.len/start_state.num_territories)*100, 0.1)]% control of the station!"
+ world << "
The [gang_name("A")] Gang was [winner=="A" ? "victorious" : "defeated"] with [round((ticker.mode.A_territory.len/start_state.num_territories)*100, 1)]% control of the station!"
world << "
The [gang_name("A")] Gang Bosses were:"
gang_membership_report(A_bosses)
world << "
The [gang_name("A")] Gangsters were:"
@@ -314,7 +309,7 @@
if(B_bosses.len || B_gang.len)
if(winner)
- world << "
The [gang_name("B")] Gang was [winner=="B" ? "victorious" : "defeated"] with [round((ticker.mode.B_territory.len/start_state.num_territories)*100, 0.1)]% control of the station!"
+ world << "
The [gang_name("B")] Gang was [winner=="B" ? "victorious" : "defeated"] with [round((ticker.mode.B_territory.len/start_state.num_territories)*100, 1)]% control of the station!"
world << "
The [gang_name("B")] Gang Bosses were:"
gang_membership_report(B_bosses)
world << "
The [gang_name("B")] Gangsters were:"
@@ -341,39 +336,110 @@
world << text
-//////////////////////////////////
-//Handles gang points and income//
-//////////////////////////////////
+//////////////////////////////////////////////////////////
+//Handles influence, territories, and the victory checks//
+//////////////////////////////////////////////////////////
/datum/gang_points
var/A = 30
var/B = 30
- var/next_point_time = 0
+ var/next_point_interval = 1800
+ var/next_point_time
/datum/gang_points/proc/start()
- next_point_time = world.time + 3000
- spawn(3000)
+ next_point_time = world.time + next_point_interval
+ spawn(next_point_interval)
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 += ":
"
+ 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 += ":
"
+ 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,"[gang_name("A")] Gang Status Report:")
+ var/A_new = min(100,A + 15 + ticker.mode.A_territory.len)
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 [A_new - A] Influence 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,"[gang_name("B")] Gang Status Report:")
+ var/B_new = min(100,B + 15 + ticker.mode.B_territory.len)
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_new - B] Influence 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 += ":
"
+ 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 += ":
"
+ 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,"[ticker.mode.A_territory_new.len] new territories[A_added_names]",0)
+ ticker.mode.message_gangtools(ticker.mode.B_tools,"[ticker.mode.B_territory_new.len] new territories[B_added_names]",0,)
+ ticker.mode.message_gangtools(ticker.mode.A_tools,"[ticker.mode.A_territory_lost.len] territories lost[A_lost_names]",0,1)
+ ticker.mode.message_gangtools(ticker.mode.B_tools,"[ticker.mode.B_territory_lost.len] territories lost[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 [A_control]% control of the station.",0)
+ ticker.mode.message_gangtools((ticker.mode.A_tools),"The [gang_name("B")] Gang has [B_control]% control of the station.",0,1)
+ ticker.mode.message_gangtools((ticker.mode.B_tools),"Your gang now has [B_control]% control of the station.",0)
+ ticker.mode.message_gangtools((ticker.mode.B_tools),"The [gang_name("A")] Gang has [A_control]% control of the station.",0,1)
+
+ //Victory check
+ ticker.mode.check_win()
+
+ //Restart the counter
start()
@@ -381,13 +447,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 << "\icon[tool] [message]"
- if(beeps)
+ mob << "\icon[tool] [message]"
+ if(beep)
playsound(mob.loc, 'sound/machines/twobeep.ogg', 50, 1)
\ No newline at end of file
diff --git a/code/game/gamemodes/intercept_report.dm b/code/game/gamemodes/intercept_report.dm
index 81ed244f086..e392f101ae7 100644
--- a/code/game/gamemodes/intercept_report.dm
+++ b/code/game/gamemodes/intercept_report.dm
@@ -228,9 +228,9 @@
*/
/datum/intercept_text/proc/build_gang(datum/mind/correct_person)
- src.text += "
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 += "
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 += "
"
/datum/intercept_text/proc/build_wizard(datum/mind/correct_person)
diff --git a/code/game/gamemodes/malfunction/Malf_Modules.dm b/code/game/gamemodes/malfunction/Malf_Modules.dm
index 5e5aa1bf462..b5576eab127 100644
--- a/code/game/gamemodes/malfunction/Malf_Modules.dm
+++ b/code/game/gamemodes/malfunction/Malf_Modules.dm
@@ -227,7 +227,7 @@
for(var/datum/AI_Module/small/overload_machine/overload in current_modules)
if(overload.uses > 0)
overload.uses --
- audible_message("You hear a loud electrical buzzing sound!")
+ audible_message("You hear a loud electrical buzzing sound!")
src << "Overloading machine circuitry..."
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("You hear a loud electrical buzzing sound!")
+ audible_message("You hear a loud electrical buzzing sound!")
src << "Reprogramming machine behaviour..."
spawn(50)
if(M && !M.gc_destroyed)
@@ -426,11 +426,11 @@
if(upgraded)
UC.uses --
C.visible_message("\icon[C] *beep*")
- src << "Camera successully upgraded!"
+ src << "You successully upgrade the camera."
else
- src << "This camera is already upgraded!"
+ src << "This camera is already upgraded!"
else
- src << "Out of uses."
+ src << "Out of uses!"
/datum/module_picker
var/temp = null
diff --git a/code/game/gamemodes/malfunction/malfunction.dm b/code/game/gamemodes/malfunction/malfunction.dm
index 7271875daee..1531ac36613 100644
--- a/code/game/gamemodes/malfunction/malfunction.dm
+++ b/code/game/gamemodes/malfunction/malfunction.dm
@@ -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
diff --git a/code/game/gamemodes/nuclear/pinpointer.dm b/code/game/gamemodes/nuclear/pinpointer.dm
index d61191f9334..74e88d79bad 100644
--- a/code/game/gamemodes/nuclear/pinpointer.dm
+++ b/code/game/gamemodes/nuclear/pinpointer.dm
@@ -122,7 +122,7 @@
location = locate(locationx,locationy,Z.z)
- usr << "You set the pinpointer to locate [locationx],[locationy]"
+ usr << "You set the pinpointer to locate [locationx],[locationy]"
return attack_self()
@@ -140,9 +140,9 @@
return
target=locate(possible_items[targetitem])
if(!target)
- usr << "Failed to locate [targetitem]!"
+ usr << "Failed to locate [targetitem]!"
return
- usr << "You set the pinpointer to locate [targetitem]"
+ usr << "You set the pinpointer to locate [targetitem]."
if("DNA")
var/DNAstring = input("Input DNA string to search for." , "Please Enter String." , "")
if(!DNAstring)
diff --git a/code/game/gamemodes/revolution/revolution.dm b/code/game/gamemodes/revolution/revolution.dm
index 553df633bf8..025c55c3532 100644
--- a/code/game/gamemodes/revolution/revolution.dm
+++ b/code/game/gamemodes/revolution/revolution.dm
@@ -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//
diff --git a/code/game/gamemodes/shadowling/shadowling.dm b/code/game/gamemodes/shadowling/shadowling.dm
index 372ee45ff10..902a17c4a14 100644
--- a/code/game/gamemodes/shadowling/shadowling.dm
+++ b/code/game/gamemodes/shadowling/shadowling.dm
@@ -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"))
diff --git a/code/game/gamemodes/wizard/raginmages.dm b/code/game/gamemodes/wizard/raginmages.dm
index d0d350d86d7..6f19d7cdd0d 100644
--- a/code/game/gamemodes/wizard/raginmages.dm
+++ b/code/game/gamemodes/wizard/raginmages.dm
@@ -60,7 +60,7 @@
else
if(mages_made >= max_mages)
finished = 1
- return 1
+ return ..()
else
make_more_mages()
return ..()
diff --git a/code/game/gamemodes/wizard/rightandwrong.dm b/code/game/gamemodes/wizard/rightandwrong.dm
index b086e9a1d5d..4503908cccc 100644
--- a/code/game/gamemodes/wizard/rightandwrong.dm
+++ b/code/game/gamemodes/wizard/rightandwrong.dm
@@ -1,7 +1,7 @@
//In this file: Summon Magic/Summon Guns/Summon Events
/proc/rightandwrong(var/summon_type, var/mob/user, var/survivor_probability) //0 = Summon Guns, 1 = Summon Magic
- var/list/gunslist = list("taser","egun","laser","revolver","detective","c20r","nuclear","deagle","gyrojet","pulse","suppressed","cannon","doublebarrel","shotgun","combatshotgun","bulldog","mateba","sabr","crossbow","saw","car","boltaction","speargun")
+ var/list/gunslist = list("taser","egun","laser","revolver","detective","c20r","nuclear","deagle","gyrojet","pulse","suppressed","cannon","doublebarrel","shotgun","combatshotgun","bulldog","mateba","sabr","crossbow","saw","car","boltaction","speargun","arg")
var/list/magiclist = list("fireball","smoke","blind","mindswap","forcewall","knock","horsemask","charge", "summonitem", "wandnothing", "wanddeath", "wandresurrection", "wandpolymorph", "wandteleport", "wanddoor", "wandfireball", "staffchange", "staffhealing", "armor", "scrying", "necromantic","staffdoor", "special")
var/list/magicspeciallist = list("staffchange","staffanimation", "wandbelt", "contract", "staffchaos")
@@ -55,6 +55,8 @@
new /obj/item/weapon/gun/projectile/shotgun(get_turf(H))
if("combatshotgun")
new /obj/item/weapon/gun/projectile/shotgun/combat(get_turf(H))
+ if("arg")
+ new /obj/item/weapon/gun/projectile/automatic/ar(get_turf(H))
if("mateba")
new /obj/item/weapon/gun/projectile/revolver/mateba(get_turf(H))
if("boltaction")
@@ -85,6 +87,7 @@
if("car")
var/obj/item/weapon/gun/projectile/automatic/m90/gat = new(get_turf(H))
gat.pin = new /obj/item/device/firing_pin
+
else
switch (randomizemagic)
if("fireball")
diff --git a/code/game/gamemodes/wizard/soulstone.dm b/code/game/gamemodes/wizard/soulstone.dm
index 2df1b4cd4ca..7f8ade33d02 100644
--- a/code/game/gamemodes/wizard/soulstone.dm
+++ b/code/game/gamemodes/wizard/soulstone.dm
@@ -169,6 +169,8 @@
var/mob/living/simple_animal/shade/A = locate() in C
if(A)
var/construct_class = alert(U, "Please choose which type of construct you wish to create.",,"Juggernaut","Wraith","Artificer")
+ if(!T || !T.loc)
+ return
switch(construct_class)
if("Juggernaut")
makeNewConstruct(/mob/living/simple_animal/construct/armored, A, U)
diff --git a/code/game/gamemodes/wizard/spellbook.dm b/code/game/gamemodes/wizard/spellbook.dm
index 138a77305c1..3d30ba9e242 100644
--- a/code/game/gamemodes/wizard/spellbook.dm
+++ b/code/game/gamemodes/wizard/spellbook.dm
@@ -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 << "The contract has been used, you can't get your points back now!"
else
- user << "You feed the contract back into the spellbook, refunding your points."
+ user << "You feed the contract back into the spellbook, refunding your points."
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 << "You bind the spellbook to yourself."
owner = user
return
if(user != owner)
- user << "The [name] does not recognize you as it's owner and refuses to open."
+ user << "The [name] does not recognize you as it's owner and refuses to open!"
return
user.set_machine(src)
var/dat
diff --git a/code/game/gamemodes/wizard/wizard.dm b/code/game/gamemodes/wizard/wizard.dm
index ddce2321c47..1d2d5d5a98f 100644
--- a/code/game/gamemodes/wizard/wizard.dm
+++ b/code/game/gamemodes/wizard/wizard.dm
@@ -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()
diff --git a/code/game/jobs/job/civilian_chaplain.dm b/code/game/jobs/job/civilian_chaplain.dm
index 26225a71971..53d8be8e8ad 100644
--- a/code/game/jobs/job/civilian_chaplain.dm
+++ b/code/game/jobs/job/civilian_chaplain.dm
@@ -18,131 +18,50 @@ Chaplain
access = list(access_morgue, access_chapel_office, access_crematorium)
minimal_access = list(access_morgue, access_chapel_office, access_crematorium)
- //Pretty bible names
- var/global/list/biblenames = list("Bible", "Quran", "Scrapbook", "Burning Bible", "Clown Bible", "Banana Bible", "Creeper Bible", "White Bible", "Holy Light", "The God Delusion", "Tome", "The King in Yellow", "Ithaqua", "Scientology", "Melted Bible", "Necronomicon")
-
- //Bible iconstates
- var/global/list/biblestates = list("bible", "koran", "scrapbook", "burning", "honk1", "honk2", "creeper", "white", "holylight", "atheist", "tome", "kingyellow", "ithaqua", "scientology", "melted", "necronomicon")
-
- //Bible itemstates
- var/global/list/bibleitemstates = list("bible", "koran", "scrapbook", "bible", "bible", "bible", "syringe_kit", "syringe_kit", "syringe_kit", "syringe_kit", "syringe_kit", "kingyellow", "ithaqua", "scientology", "melted", "necronomicon")
-
-/datum/job/chaplain/proc/setupbiblespecifics(var/obj/item/weapon/storage/book/bible/B, var/mob/living/carbon/human/H)
- switch(B.icon_state)
- if("honk1","honk2")
- new /obj/item/weapon/grown/bananapeel(B)
- new /obj/item/weapon/grown/bananapeel(B)
-
- if(B.icon_state == "honk1")
- H.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/clown_hat(H), slot_wear_mask)
-
- if("bible")
- for(var/area/chapel/main/A in world)
- for(var/turf/T in A.contents)
- if(T.icon_state == "carpetsymbol")
- T.dir = 2
- if("koran")
- for(var/area/chapel/main/A in world)
- for(var/turf/T in A.contents)
- if(T.icon_state == "carpetsymbol")
- T.dir = 4
- if("scientology")
- for(var/area/chapel/main/A in world)
- for(var/turf/T in A.contents)
- if(T.icon_state == "carpetsymbol")
- T.dir = 8
- if("athiest")
- for(var/area/chapel/main/A in world)
- for(var/turf/T in A.contents)
- if(T.icon_state == "carpetsymbol")
- T.dir = 10
-
-/datum/job/chaplain/Topic(href, href_list)
- if(href_list["seticon"])
- var/iconi = text2num(href_list["seticon"])
-
- var/biblename = biblenames[iconi]
- var/obj/item/weapon/storage/book/bible/B = locate(href_list["bible"])
-
- B.icon_state = biblestates[iconi]
- B.item_state = bibleitemstates[iconi]
-
- //Set biblespecific chapels
- setupbiblespecifics(B, usr)
-
- usr.put_in_hands(B) // Update inhand icon
-
- if(ticker)
- ticker.Bible_icon_state = B.icon_state
- ticker.Bible_item_state = B.item_state
- ticker.Bible_name = B.name
- feedback_set_details("religion_book","[biblename]")
-
- usr << browse(null, "window=editicon") // Close window
-
/datum/job/chaplain/equip_items(var/mob/living/carbon/human/H)
H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/chaplain(H), slot_w_uniform)
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/sneakers/black(H), slot_shoes)
var/obj/item/weapon/storage/book/bible/B = new /obj/item/weapon/storage/book/bible/booze(H)
- spawn(0)
- var/religion_name = "Christianity"
- var/new_religion = copytext(sanitize(input(H, "You are the Chaplain. Would you like to change your religion? Default is Christianity, in SPACE.", "Name change", religion_name)),1,MAX_NAME_LEN)
+ var/new_religion = "Christianity"
+ if(H.client && H.client.prefs.custom_names["religion"])
+ new_religion = H.client.prefs.custom_names["religion"]
- if (!new_religion)
- new_religion = religion_name
+ switch(lowertext(new_religion))
+ if("christianity")
+ B.name = pick("The Holy Bible","The Dead Sea Scrolls")
+ if("satanism")
+ B.name = "The Unholy Bible"
+ if("cthulu")
+ B.name = "The Necronomicon"
+ if("islam")
+ B.name = "Quran"
+ if("scientology")
+ B.name = pick("The Biography of L. Ron Hubbard","Dianetics")
+ if("chaos")
+ B.name = "The Book of Lorgar"
+ if("imperium")
+ B.name = "Uplifting Primer"
+ if("toolboxia")
+ B.name = "Toolbox Manifesto"
+ if("homosexuality")
+ B.name = "Guys Gone Wild"
+ if("lol", "wtf", "gay", "penis", "ass", "poo", "badmin", "shitmin", "deadmin", "cock", "cocks")
+ B.name = pick("Woodys Got Wood: The Aftermath", "War of the Cocks", "Sweet Bro and Hella Jef: Expanded Edition")
+ H.setBrainLoss(100) // starts off retarded as fuck
+ if("science")
+ B.name = pick("Principle of Relativity", "Quantum Enigma: Physics Encounters Consciousness", "Programming the Universe", "Quantum Physics and Theology", "String Theory for Dummies", "How To: Build Your Own Warp Drive", "The Mysteries of Bluespace", "Playing God: Collector's Edition")
+ else
+ B.name = "The Holy Book of [new_religion]"
+ feedback_set_details("religion_name","[new_religion]")
+ ticker.Bible_name = B.name
- switch(lowertext(new_religion))
- if("christianity")
- B.name = pick("The Holy Bible","The Dead Sea Scrolls")
- if("satanism")
- B.name = "The Unholy Bible"
- if("cthulu")
- B.name = "The Necronomicon"
- if("islam")
- B.name = "Quran"
- if("scientology")
- B.name = pick("The Biography of L. Ron Hubbard","Dianetics")
- if("chaos")
- B.name = "The Book of Lorgar"
- if("imperium")
- B.name = "Uplifting Primer"
- if("toolboxia")
- B.name = "Toolbox Manifesto"
- if("homosexuality")
- B.name = "Guys Gone Wild"
- if("lol", "wtf", "gay", "penis", "ass", "poo", "badmin", "shitmin", "deadmin", "cock", "cocks")
- B.name = pick("Woodys Got Wood: The Aftermath", "War of the Cocks", "Sweet Bro and Hella Jef: Expanded Edition")
- H.setBrainLoss(100) // starts off retarded as fuck
- if("science")
- B.name = pick("Principle of Relativity", "Quantum Enigma: Physics Encounters Consciousness", "Programming the Universe", "Quantum Physics and Theology", "String Theory for Dummies", "How To: Build Your Own Warp Drive", "The Mysteries of Bluespace", "Playing God: Collector's Edition")
- else
- B.name = "The Holy Book of [new_religion]"
- feedback_set_details("religion_name","[new_religion]")
+ var/new_deity = "Space Jesus"
+ if(H.client && H.client.prefs.custom_names["deity"])
+ new_deity = H.client.prefs.custom_names["deity"]
+ B.deity_name = new_deity
- spawn(1)
- var/deity_name = "Space Jesus"
- var/new_deity = copytext(sanitize(input(H, "Would you like to change your deity? Default is Space Jesus.", "Name change", deity_name)),1,MAX_NAME_LEN)
-
- if ((length(new_deity) == 0) || (new_deity == "Space Jesus") )
- new_deity = deity_name
- B.deity_name = new_deity
-
- if(ticker)
- ticker.Bible_deity_name = B.deity_name
- feedback_set_details("religion_deity","[new_deity]")
-
- //Open bible selection
- var/dat = "Pick a bible style
"
-
- var/i
- for(i = 1, i < biblestates.len, i++)
- var/icon/bibleicon = icon('icons/obj/storage.dmi', biblestates[i])
-
- var/nicename = biblenames[i]
- H << browse_rsc(bibleicon, nicename)
- dat += {"
"
-
- H << browse(dat, "window=editicon;can_close=0;can_minimize=0;size=250x650")
\ No newline at end of file
+ if(ticker)
+ ticker.Bible_deity_name = B.deity_name
+ feedback_set_details("religion_deity","[new_deity]")
+ H.equip_to_slot_or_del(B, slot_in_backpack)
\ No newline at end of file
diff --git a/code/game/machinery/PDApainter.dm b/code/game/machinery/PDApainter.dm
index bb9d5db7eee..c563482d147 100644
--- a/code/game/machinery/PDApainter.dm
+++ b/code/game/machinery/PDApainter.dm
@@ -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 << "There is already a PDA inside!"
return
else
var/obj/item/device/pda/P = usr.get_active_hand()
diff --git a/code/game/machinery/ai_slipper.dm b/code/game/machinery/ai_slipper.dm
index 386c11d09c9..82d9841d328 100644
--- a/code/game/machinery/ai_slipper.dm
+++ b/code/game/machinery/ai_slipper.dm
@@ -36,7 +36,7 @@
else // trying to unlock the interface
if (src.allowed(usr))
locked = !locked
- user << "You [ locked ? "lock" : "unlock"] the device."
+ user << "You [ locked ? "lock" : "unlock"] the device."
if (locked)
if (user.machine==src)
user.unset_machine()
diff --git a/code/game/machinery/alarm.dm b/code/game/machinery/alarm.dm
index ce624c2abc7..e14e0792a84 100644
--- a/code/game/machinery/alarm.dm
+++ b/code/game/machinery/alarm.dm
@@ -167,8 +167,7 @@
return 0
/obj/machinery/alarm/attack_hand(mob/user)
- . = ..()
- if (.)
+ if (..())
return
user.set_machine(src)
@@ -188,17 +187,41 @@
if(!shorted)
//user << browse(return_text(),"window=air_alarm")
//onclose(user, "air_alarm")
- var/datum/browser/popup = new(user, "air_alarm", "[alarm_area.name] Air Alarm", 500, 400)
+ /*var/datum/browser/popup = new(user, "air_alarm", "[alarm_area.name] Air Alarm", 500, 400)
popup.set_content(return_text())
popup.set_title_image(user.browse_rsc_icon(src.icon, src.icon_state))
popup.open()
- refresh_all()
+ refresh_all()*/
+ ui_interact(user)
if(panel_open && (!istype(user, /mob/living/silicon/ai)))
wires.Interact(user)
return
+/obj/machinery/alarm/ui_interact(mob/user, ui_key = "main")
+ if(stat & (BROKEN|NOPOWER))
+ return
+
+ var/data = list()
+
+ data["locked"] = locked
+ data["siliconUser"] = user.has_unlimited_silicon_privilege
+ data["screen"] = screen
+ data["dangerous"] = emagged
+
+ populate_status(data)
+ if (!locked || user.has_unlimited_silicon_privilege)
+ populate_controls(data)
+
+ var/datum/nanoui/ui = SSnano.get_open_ui(user, src, ui_key)
+ if (!ui)
+ ui = new /datum/nanoui(user, src, ui_key, "air_alarm.tmpl", "Air Alarm", 350, 500)
+ ui.set_initial_data(data)
+ ui.open()
+ ui.set_auto_update(1)
+ else
+ ui.push_data(data)
/obj/machinery/alarm/proc/shock(mob/user, prb)
if((stat & (NOPOWER))) // unpowered, no shock
@@ -247,326 +270,163 @@
return 1
-/obj/machinery/alarm/proc/return_text()
- var/dat = ""
- dat += " "}
-
- dat += "[nicename]
[return_controls()]"
- return dat
-
-/obj/machinery/alarm/proc/return_status()
- var/turf/location = src.loc
+/obj/machinery/alarm/proc/populate_status(var/list/data)
+ var/turf/location = get_turf(src)
var/datum/gas_mixture/environment = location.return_air()
var/total = environment.oxygen + environment.carbon_dioxide + environment.toxins + environment.nitrogen
- var/output = "Air Status:
"
- if(total == 0)
- output +={"Warning: Cannot obtain air sample for analysis."}
- return output
+ var/list/environment_data = list()
+ data["atmos_alarm"] = alarm_area.atmosalm
+ data["fire_alarm"] = (alarm_area.fire != null && alarm_area.fire)
+ data["danger_level"] = danger_level
+ if(total)
+ var/datum/tlv/cur_tlv
+ var/partial_pressure = R_IDEAL_GAS_EQUATION*environment.temperature/environment.volume
- output += {"
-
-"}
- var/datum/tlv/cur_tlv
- var/GET_PP = R_IDEAL_GAS_EQUATION*environment.temperature/environment.volume
+ cur_tlv = TLV["pressure"]
+ var/pressure = environment.return_pressure()
+ var/pressure_danger = cur_tlv.get_danger_level(pressure)
+ environment_data += list(list("name" = "Pressure", "value" = pressure, "unit" = "kPa", "danger_level" = pressure_danger))
- cur_tlv = TLV["pressure"]
- var/environment_pressure = environment.return_pressure()
- var/pressure_dangerlevel = cur_tlv.get_danger_level(environment_pressure)
+ cur_tlv = TLV["oxygen"]
+ var/oxygen_danger = cur_tlv.get_danger_level(environment.oxygen*partial_pressure)
+ environment_data += list(list("name" = "Oxygen", "value" = environment.oxygen / total * 100, "unit" = "%", "danger_level" = oxygen_danger))
- cur_tlv = TLV["oxygen"]
- var/oxygen_dangerlevel = cur_tlv.get_danger_level(environment.oxygen*GET_PP)
- var/oxygen_percent = round(environment.oxygen / total * 100, 2)
+ cur_tlv = TLV["carbon dioxide"]
+ var/carbon_dioxide_danger = cur_tlv.get_danger_level(environment.carbon_dioxide*partial_pressure)
+ environment_data += list(list("name" = "Carbon dioxide", "value" = environment.carbon_dioxide / total * 100, "unit" = "%", "danger_level" = carbon_dioxide_danger))
- cur_tlv = TLV["carbon dioxide"]
- var/co2_dangerlevel = cur_tlv.get_danger_level(environment.carbon_dioxide*GET_PP)
- var/co2_percent = round(environment.carbon_dioxide / total * 100, 2)
+ cur_tlv = TLV["plasma"]
+ var/plasma_danger = cur_tlv.get_danger_level(environment.toxins*partial_pressure)
+ environment_data += list(list("name" = "Toxins", "value" = environment.toxins / total * 100, "unit" = "%", "danger_level" = plasma_danger))
- cur_tlv = TLV["plasma"]
- var/plasma_dangerlevel = cur_tlv.get_danger_level(environment.toxins*GET_PP)
- var/plasma_percent = round(environment.toxins / total * 100, 2)
+ cur_tlv = TLV["other"]
+ var/other_moles = 0.0
+ for(var/datum/gas/G in environment.trace_gases)
+ other_moles+=G.moles
+ var/other_danger = cur_tlv.get_danger_level(other_moles*partial_pressure)
+ environment_data += list(list("name" = "Other", "value" = other_moles / total * 100, "unit" = "%", "danger_level" = other_danger))
- cur_tlv = TLV["other"]
- var/other_moles = 0.0
- for(var/datum/gas/G in environment.trace_gases)
- other_moles+=G.moles
- var/other_dangerlevel = cur_tlv.get_danger_level(other_moles*GET_PP)
-
- cur_tlv = TLV["temperature"]
- var/temperature_dangerlevel = cur_tlv.get_danger_level(environment.temperature)
-
- output += {"
-Pressure: [environment_pressure]kPa
-Oxygen: [oxygen_percent]%
-Carbon dioxide: [co2_percent]%
-Toxins: [plasma_percent]%
-"}
- if (other_dangerlevel==2)
- output += {"Notice: High Concentration of Unknown Particles Detected
"}
- else if (other_dangerlevel==1)
- output += {"Notice: Low Concentration of Unknown Particles Detected
"}
-
- output += {"
-Temperature: [environment.temperature]K
-"}
-
- var/display_danger_level = max(
- pressure_dangerlevel,
- oxygen_dangerlevel,
- co2_dangerlevel,
- plasma_dangerlevel,
- other_dangerlevel,
- temperature_dangerlevel
- )
-
- //Overall status
- output += {"Local Status: "}
- if(display_danger_level == 2)
- output += {"DANGER: Internals Required"}
- else if(display_danger_level == 1)
- output += {"Caution"}
- else if (alarm_area.atmosalm)
- output += {"Caution: Atmos alert in area"}
- else
- output += {"Optimal"}
-
- return output
-
-/obj/machinery/alarm/proc/return_safety()
- var/output = ""
- if(src.emagged)
- output += "NOTICE: Safety measures nonfunctional. Device may exhibit abnormal behavior.
"
- else
- output += "Safety measures functioning properly.
"
- return output
-
-
-/obj/machinery/alarm/proc/return_controls()
- var/output = ""//"[alarm_zone] Air [name]
"
+ cur_tlv = TLV["temperature"]
+ var/temperature_danger = cur_tlv.get_danger_level(environment.temperature)
+ environment_data += list(list("name" = "Temperature", "value" = environment.temperature, "unit" = "K ([round(environment.temperature - T0C, 0.1)]C)", "danger_level" = temperature_danger))
+ data["environment_data"] = environment_data
+/obj/machinery/alarm/proc/populate_controls(var/list/data)
switch(screen)
- if (AALARM_SCREEN_MAIN)
- if(alarm_area.atmosalm)
- output += {"Reset - Atmospheric Alarm
"}
- else
- output += {"Activate - Atmospheric Alarm
"}
+ if(AALARM_SCREEN_MAIN)
+ data["mode"] = mode
+ if(AALARM_SCREEN_VENT)
+ data["vents"] = list()
+ for(var/id_tag in alarm_area.air_vent_names)
+ var/long_name = alarm_area.air_vent_names[id_tag]
+ var/list/info = alarm_area.air_vent_info[id_tag]
+ if(!info)
+ continue
+ data["vents"] += list(list(
+ "id_tag" = id_tag,
+ "long_name" = sanitize(long_name),
+ "power" = info["power"],
+ "checks" = info["checks"],
+ "excheck" = info["checks"]&1,
+ "incheck" = info["checks"]&2,
+ "direction" = info["direction"],
+ "external" = info["external"]
+ ))
+ if(AALARM_SCREEN_SCRUB)
+ data["scrubbers"] = list()
+ for(var/id_tag in alarm_area.air_scrub_names)
+ var/long_name = alarm_area.air_scrub_names[id_tag]
+ var/list/info = alarm_area.air_scrub_info[id_tag]
+ if(!info)
+ continue
+ data["scrubbers"] += list(list(
+ "id_tag" = id_tag,
+ "long_name" = sanitize(long_name),
+ "power" = info["power"],
+ "scrubbing" = info["scrubbing"],
+ "panic" = info["panic"],
+ "filter_co2" = info["filter_co2"],
+ "filter_toxins" = info["filter_toxins"],
+ "filter_n2o" = info["filter_n2o"]
+ ))
+ if(AALARM_SCREEN_MODE)
+ data["mode"] = mode
+ data["modes"] = list()
+ data["modes"] += list(list("name" = "Filtering - Scrubs out contaminants", "mode" = AALARM_MODE_SCRUBBING, "selected" = mode == AALARM_MODE_SCRUBBING, "danger" = 0))
+ data["modes"] += list(list("name" = "Draught - Siphons out air while replacing", "mode" = AALARM_MODE_VENTING, "selected" = mode == AALARM_MODE_VENTING, "danger" = 0))
+ data["modes"] += list(list("name" = "Cycle - Siphons air before replacing", "mode" = AALARM_MODE_REPLACEMENT, "selected" = mode == AALARM_MODE_REPLACEMENT, "danger" = 1))
+ data["modes"] += list(list("name" = "Panic - Siphons air out of the room", "mode" = AALARM_MODE_PANIC, "selected" = mode == AALARM_MODE_PANIC, "danger" = 1))
+ data["modes"] += list(list("name" = "Off - Shuts off vents and scrubbers", "mode" = AALARM_MODE_OFF, "selected" = mode == AALARM_MODE_OFF, "danger" = 0))
+ if (src.emagged)
+ data["modes"] += list(list("name" = "Flood - Shuts off scrubbers and opens vents", "mode" = AALARM_MODE_FLOOD, "selected" = mode == AALARM_MODE_FLOOD, "danger" = 1))
+ if(AALARM_SCREEN_SENSORS)
+ var/datum/tlv/selected
+ var/list/thresholds = list()
- output += {"
-Scrubbers Control
-Vents Control
-Set Environmentals Mode
-Sensor Settings
-
-"}
- if (mode==AALARM_MODE_PANIC)
- output += "PANIC SYPHON ACTIVE
Turn syphoning off"
- else
- output += "ACTIVATE PANIC SYPHON IN AREA"
- if (AALARM_SCREEN_VENT)
- var/sensor_data = ""
- if(alarm_area.air_vent_names.len)
- for(var/id_tag in alarm_area.air_vent_names)
- var/long_name = alarm_area.air_vent_names[id_tag]
- var/list/data = alarm_area.air_vent_info[id_tag]
- if(!data)
- continue;
- var/state = ""
-
- sensor_data += {"
-[long_name]
-[state]
-Operating:
-[data["power"]?"on":"off"]
-
-Pressure checks:
-external
-internal
-
-External pressure bound:
--
--
--
--
-[data["external"]]
-+
-+
-+
-+
-reset
-
-"}
- if (data["direction"] == "siphon")
- sensor_data += {"
-Direction:
-siphoning
-
-"}
- sensor_data += {"
"}
- else
- sensor_data = "No vents connected.
"
- output = {"<< Main Menu
[sensor_data]"}
- if (AALARM_SCREEN_SCRUB)
- var/sensor_data = ""
- if(alarm_area.air_scrub_names.len)
- for(var/id_tag in alarm_area.air_scrub_names)
- var/long_name = alarm_area.air_scrub_names[id_tag]
- var/list/data = alarm_area.air_scrub_info[id_tag]
- if(!data)
- continue;
- var/state = ""
-
- sensor_data += {"
-[long_name][state]
-Operating:
-[data["power"]?"on":"off"]
-Type:
-[data["scrubbing"]?"scrubbing":"syphoning"]
-"}
-
- if(data["scrubbing"])
- sensor_data += {"
-Filtering:
-Carbon Dioxide
-[data["filter_co2"]?"on":"off"];
-Toxins
-[data["filter_toxins"]?"on":"off"];
-Nitrous Oxide
-[data["filter_n2o"]?"on":"off"]
-
-"}
- sensor_data += {"
-Panic syphon: [data["panic"]?"PANIC SYPHON ACTIVATED":""]
-Dea":"red'>A")]ctivate
-
-"}
- else
- sensor_data = "No scrubbers connected.
"
- output = {"<< Main Menu
[sensor_data]"}
-
- if (AALARM_SCREEN_MODE)
- output += {"
-<< Main Menu
-Air machinery mode for the area:"}
- var/list/modes = list()
- if(src.emagged)
- modes = list(
- AALARM_MODE_SCRUBBING = "Filtering",
- AALARM_MODE_VENTING = "Draught",
- AALARM_MODE_PANIC = "PANIC",
- AALARM_MODE_REPLACEMENT = "REPLACE AIR",
- AALARM_MODE_OFF = "Off",
- AALARM_MODE_FLOOD = "FLOOD", //Below everything else because it shouldn't be there normally
- )
- else
- modes = list(
- AALARM_MODE_SCRUBBING = "Filtering",
- AALARM_MODE_VENTING = "Draught",
- AALARM_MODE_PANIC = "PANIC",
- AALARM_MODE_REPLACEMENT = "REPLACE AIR",
- AALARM_MODE_OFF = "Off",
- )
- for (var/m=1,m<=modes.len,m++)
- if (mode==m)
- output += {"
"
- if (AALARM_SCREEN_SENSORS)
- output += {"
-<< Main Menu
-Alarm thresholds:
-Partial pressure for gases
-
-
-
"}
+ "other" = "Other")
+ for (var/g in gas_names)
+ thresholds += list(list("name" = gas_names[g], "settings" = list()))
+ selected = TLV[g]
+ thresholds[thresholds.len]["settings"] += list(list("env" = g, "val" = "min2", "selected" = selected.min2))
+ thresholds[thresholds.len]["settings"] += list(list("env" = g, "val" = "min1", "selected" = selected.min1))
+ thresholds[thresholds.len]["settings"] += list(list("env" = g, "val" = "max1", "selected" = selected.max1))
+ thresholds[thresholds.len]["settings"] += list(list("env" = g, "val" = "max2", "selected" = selected.max2))
- return output
+ selected = TLV["pressure"]
+ thresholds += list(list("name" = "Pressure", "settings" = list()))
+ thresholds[thresholds.len]["settings"] += list(list("env" = "pressure", "val" = "min2", "selected" = selected.min2))
+ thresholds[thresholds.len]["settings"] += list(list("env" = "pressure", "val" = "min1", "selected" = selected.min1))
+ thresholds[thresholds.len]["settings"] += list(list("env" = "pressure", "val" = "max1", "selected" = selected.max1))
+ thresholds[thresholds.len]["settings"] += list(list("env" = "pressure", "val" = "max2", "selected" = selected.max2))
+
+ selected = TLV["temperature"]
+ thresholds += list(list("name" = "Temperature", "settings" = list()))
+ thresholds[thresholds.len]["settings"] += list(list("env" = "temperature", "val" = "min2", "selected" = selected.min2))
+ thresholds[thresholds.len]["settings"] += list(list("env" = "temperature", "val" = "min1", "selected" = selected.min1))
+ thresholds[thresholds.len]["settings"] += list(list("env" = "temperature", "val" = "max1", "selected" = selected.max1))
+ thresholds[thresholds.len]["settings"] += list(list("env" = "temperature", "val" = "max2", "selected" = selected.max2))
+
+
+ data["thresholds"] = thresholds
/obj/machinery/alarm/Topic(href, href_list)
if(..())
return
usr.set_machine(src)
+ if (locked && !usr.has_unlimited_silicon_privilege)
+ return
+
if ( (get_dist(src, usr) > 1 ))
if (!istype(usr, /mob/living/silicon))
usr.unset_machine()
usr << browse(null, "window=air_alarm")
return
-
+ if(href_list["toggleaccess"])
+ if(usr.has_unlimited_silicon_privilege && !wires.IsIndexCut(AALARM_WIRE_IDSCAN))
+ locked = !locked
if(href_list["command"])
var/device_id = href_list["id_tag"]
switch(href_list["command"])
+ if("set_external_pressure")
+ var/input_pressure = input("What pressure you like the system to mantain?", "Pressure Controls") as num|null
+ if(isnum(input_pressure))
+ send_signal(device_id, list(href_list["command"] = input_pressure))
+ return 1
+
+ if("reset_external_pressure")
+ send_signal(device_id, list(href_list["command"] = ONE_ATMOSPHERE))
+ return 1
if(
"power",
"adjust_external_pressure",
- "set_external_pressure",
- "checks",
"co2_scrub",
"tox_scrub",
"n2o_scrub",
@@ -577,12 +437,18 @@ table tr:first-child th:first-child { border: none;}
spawn(3)
src.updateUsrDialog()
+ if ("excheck")
+ send_signal(device_id, list ("checks" = text2num(href_list["val"])^1))
+
+ if ("incheck")
+ send_signal(device_id, list ("checks" = text2num(href_list["val"])^2))
+
//if("adjust_threshold") //was a good idea but required very wide window
if("set_threshold")
var/env = href_list["env"]
var/varname = href_list["var"]
var/datum/tlv/tlv = TLV[env]
- var/newval = input("Enter [varname] for env", "Alarm triggers", tlv.vars[varname]) as num|null
+ var/newval = input("Enter [varname] for [env]", "Alarm triggers", tlv.vars[varname]) as num|null
if (isnull(newval) || ..() || (locked && !(usr.has_unlimited_silicon_privilege)))
return
@@ -804,7 +670,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 << "You cut the final wires."
var/obj/item/stack/cable_coil/cable = new /obj/item/stack/cable_coil( src.loc )
cable.amount = 5
buildstage = 1
@@ -814,7 +680,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 << "The wires have been [panel_open ? "exposed" : "unexposed"]."
update_icon()
return
@@ -822,19 +688,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 << "It does nothing!"
else
if(src.allowed(usr) && !wires.IsIndexCut(AALARM_WIRE_IDSCAN))
locked = !locked
- user << "You [ locked ? "lock" : "unlock"] the Air Alarm interface."
+ user << "You [ locked ? "lock" : "unlock"] the air alarm interface."
src.updateUsrDialog()
else
- user << "Access denied."
+ user << "Access denied."
return
if(1)
if(istype(W, /obj/item/weapon/crowbar))
- user.visible_message("[user.name] removes the electronics from [src.name].",\
- "You start prying out the circuit.")
+ user.visible_message("[user.name] removes the electronics from [src.name].",\
+ "You start prying out the circuit...")
playsound(src.loc, 'sound/items/Crowbar.ogg', 50, 1)
if (do_after(user, 20))
if (buildstage == 1)
@@ -848,10 +714,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 << "You need five lengths of cable to wire the fire alarm."
+ user << "You need five lengths of cable to wire the fire alarm!"
return
- user.visible_message("[user.name] wires the air alarm.", \
- "You start wiring the air alarm.")
+ user.visible_message("[user.name] wires the air alarm.", \
+ "You start wiring the air alarm...")
if (do_after(user, 20))
if (cable.get_amount() >= 5 && buildstage == 1)
cable.use(5)
@@ -867,7 +733,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 << "You insert the circuit."
buildstage = 1
update_icon()
user.drop_item()
@@ -875,7 +741,7 @@ table tr:first-child th:first-child { border: none;}
return
if(istype(W, /obj/item/weapon/wrench))
- user << "You detach \the [src] from the wall!"
+ user << "You detach \the [src] from the wall."
playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1)
new /obj/item/alarm_frame( user.loc )
qdel(src)
@@ -896,7 +762,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("Sparks fly out of the [src]!", "You emag the [src], disabling its safeties.")
+ user.visible_message("Sparks fly out of the [src]!", "You emag the [src], disabling its safeties.")
playsound(src.loc, 'sound/effects/sparks4.ogg', 50, 1)
return
@@ -945,10 +811,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 << "Air Alarm cannot be placed on this spot."
+ usr << "Air Alarm cannot be placed on this spot!"
return
if (A.requires_power == 0 || A.name == "Space")
- usr << "Air Alarm cannot be placed in this area."
+ usr << "Air Alarm cannot be placed in this area!"
return
if(gotwallitem(loc, ndir))
@@ -1025,7 +891,7 @@ FIRE ALARM
/obj/machinery/firealarm/emag_act(mob/user as mob)
if(!emagged)
src.emagged = 1
- user.visible_message("Sparks fly out of the [src]!", "You emag the [src], disabling its thermal sensors.")
+ user.visible_message("Sparks fly out of the [src]!", "You emag the [src], disabling its thermal sensors.")
playsound(src.loc, 'sound/effects/sparks4.ogg', 50, 1)
return
@@ -1056,7 +922,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 << "The wires have been [panel_open ? "exposed" : "unexposed"]."
update_icon()
return
@@ -1066,9 +932,9 @@ FIRE ALARM
if (istype(W, /obj/item/device/multitool))
src.detecting = !( src.detecting )
if (src.detecting)
- user.visible_message("[user] has reconnected [src]'s detecting unit!", "You have reconnected [src]'s detecting unit.")
+ user.visible_message("[user] has reconnected [src]'s detecting unit!", "You reconnect [src]'s detecting unit.")
else
- user.visible_message("[user] has disconnected [src]'s detecting unit!", "You have disconnected [src]'s detecting unit.")
+ user.visible_message("[user] has disconnected [src]'s detecting unit!", "You disconnect [src]'s detecting unit.")
else if (istype(W, /obj/item/weapon/wirecutters))
buildstage = 1
@@ -1076,7 +942,7 @@ FIRE ALARM
var/obj/item/stack/cable_coil/coil = new /obj/item/stack/cable_coil()
coil.amount = 5
coil.loc = user.loc
- user << "You cut the wires from \the [src]"
+ user << "You cut the wires from \the [src]."
update_icon()
if(1)
if(istype(W, /obj/item/stack/cable_coil))
@@ -1088,32 +954,32 @@ FIRE ALARM
coil.use(5)
buildstage = 2
- user << "You wire \the [src]!"
+ user << "You wire \the [src]."
update_icon()
else if(istype(W, /obj/item/weapon/crowbar))
playsound(src.loc, 'sound/items/Crowbar.ogg', 50, 1)
- user.visible_message("[user.name] removes the electronics from [src.name].", \
- "You start prying out the circuit.")
+ user.visible_message("[user.name] removes the electronics from [src.name].", \
+ "You start prying out the circuit...")
if(do_after(user, 20))
if(buildstage == 1)
if(stat & BROKEN)
- user << "You remove the destroyed circuit!"
+ user << "You remove the destroyed circuit."
else
- user << "You pry out the circuit!"
+ user << "You pry out the circuit."
new /obj/item/weapon/firealarm_electronics(user.loc)
buildstage = 0
update_icon()
if(0)
if(istype(W, /obj/item/weapon/firealarm_electronics))
- user << "You insert the circuit!"
+ user << "You insert the circuit."
qdel(W)
buildstage = 1
update_icon()
else if(istype(W, /obj/item/weapon/wrench))
- user.visible_message("[user] removes the fire alarm assembly from the wall!", \
- "You remove the fire alarm assembly from the wall!")
+ user.visible_message("[user] removes the fire alarm assembly from the wall.", \
+ "You remove the fire alarm assembly from the wall.")
var/obj/item/firealarm_frame/frame = new /obj/item/firealarm_frame()
frame.loc = user.loc
playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1)
diff --git a/code/game/machinery/atmoalter/canister.dm b/code/game/machinery/atmoalter/canister.dm
index 5450c05c626..eea599dd0f0 100644
--- a/code/game/machinery/atmoalter/canister.dm
+++ b/code/game/machinery/atmoalter/canister.dm
@@ -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 << "You pulse-pressurize your jetpack from the tank."
return
..()
@@ -257,32 +257,34 @@ update_flag
return src.attack_hand(user)
/obj/machinery/portable_atmospherics/canister/attack_hand(var/mob/user as mob)
- return src.interact(user)
+ return src.ui_interact(user)
-/obj/machinery/portable_atmospherics/canister/interact(var/mob/user as mob)
+/obj/machinery/portable_atmospherics/canister/ui_interact(mob/user, ui_key = "main")
if (src.destroyed)
return
- user.set_machine(src)
- var/holding_text
- if(holding)
- holding_text = {"
-"}
- var/list/gases = list(
+ var/list/gas_names = list(
"oxygen" = "O2",
"carbon dioxide" = "CO2",
"plasma" = "Toxin",
- "other" = "Other",
- )
- var/list/thresholds = list("min2", "min1", "max1", "max2")
- var/datum/tlv/tlv
- for (var/g in gases)
- output += {"
-min2 min1 max1 max2
-"}
- tlv = TLV["pressure"]
- output += {"
-[gases[g]]
-"}
- tlv = TLV[g]
- for (var/v in thresholds)
- output += {"
-
-[tlv.vars[v]>=0?tlv.vars[v]:"OFF"]
-
-"}
- output += {"
-
-"}
- tlv = TLV["temperature"]
- output += {"
-Pressure
-"}
- for (var/v in thresholds)
- output += {"
-
-[tlv.vars[v]>=0?tlv.vars[v]:"OFF"]
-
-"}
- output += {"
-
-"}
- output += {"Temperature
-"}
- for (var/v in thresholds)
- output += {"
-
-[tlv.vars[v]>=0?tlv.vars[v]:"OFF"]
-
-"}
- output += {"
-
Tank Pressure: [holding.air_contents.return_pressure()] KPa
-Remove Tank
-"}
- var/output_text = {"[name][can_label?" relabel":""]
-Pressure: [air_contents.return_pressure()] KPa
-Port Status: [(connected_port)?("Connected"):("Disconnected")]
-[holding_text]
-
-Release Valve: [valve_open?("Open"):("Closed")]
-Release Pressure: - - - - [release_pressure] + + + +
-
-Close
-"}
+ var/data = list()
+ data["name"] = src.name
+ data["canLabel"] = src.can_label ? 1 : 0
+ data["portConnected"] = src.connected_port ? 1 : 0
+ data["tankPressure"] = round(src.air_contents.return_pressure() ? src.air_contents.return_pressure() : 0)
+ data["releasePressure"] = round(src.release_pressure ? src.release_pressure : 0)
+ data["minReleasePressure"] = round(ONE_ATMOSPHERE/10)
+ data["maxReleasePressure"] = round(10*ONE_ATMOSPHERE)
+ data["valveOpen"] = src.valve_open ? 1 : 0
- user << browse("
", "\[br\]")
diff --git a/code/game/objects/items/devices/camera_bug.dm b/code/game/objects/items/devices/camera_bug.dm
index 6d5c687803b..64c7c3d270f 100644
--- a/code/game/objects/items/devices/camera_bug.dm
+++ b/code/game/objects/items/devices/camera_bug.dm
@@ -249,11 +249,11 @@
var/obj/machinery/camera/C = locate(href_list["view"])
if(istype(C))
if(!C.can_use())
- usr << "Something's wrong with that camera. You can't get a feed."
+ usr << "Something's wrong with that camera! You can't get a feed."
return
var/turf/T = get_turf(loc)
if(!T || C.z != T.z)
- usr << "You can't get a signal."
+ usr << "You can't get a signal!"
return
current = C
spawn(6)
@@ -311,7 +311,7 @@
/obj/item/device/camera_bug/attackby(var/obj/item/W as obj,var/mob/living/user as mob, params)
if(istype(W,/obj/item/weapon/screwdriver) && expansion)
expansion.loc = get_turf(loc)
- user << "You unscrew [expansion]."
+ user << "You unscrew [expansion]."
user.put_in_inactive_hand(expansion)
expansion = null
bugtype = VANILLA_BUG
@@ -352,7 +352,7 @@
user.drop_item()
W.loc = src
expansion = W
- user << "You add [W] to [src]."
+ user << "You add [W] to [src]."
get_cameras() // the tracking code will want to know the new camera list
if(bugtype in list(UNIVERSAL_BUG,NETWORK_BUG,ADMIN_BUG))
skip_bugcheck = 1
diff --git a/code/game/objects/items/devices/flash.dm b/code/game/objects/items/devices/flash.dm
index 333bcb0c658..8901d2dd0ad 100644
--- a/code/game/objects/items/devices/flash.dm
+++ b/code/game/objects/items/devices/flash.dm
@@ -25,7 +25,7 @@
/obj/item/device/flash/proc/burn_out() //Made so you can override it if you want to have an invincible flash from R&D or something.
broken = 1
icon_state = "[initial(icon_state)]burnt"
- visible_message("The [src.name] burns out!")
+ visible_message("The [src.name] burns out!")
/obj/item/device/flash/proc/flash_recharge(var/mob/user)
@@ -66,12 +66,16 @@
M.confused += power
terrible_conversion_proc(M, user)
M.Stun(1)
- user.visible_message("[user] blinds [M] with the flash!")
+ visible_message("[user] blinds [M] with the flash!")
+ user << "You blind [M] with the flash!"
+ M << "[user] blinds you with the flash!"
if(M.weakeyes)
M.Stun(2)
- M.visible_message("[M] gasps and shields their eyes!")
+ M.visible_message("[M] gasps and shields their eyes!", "You gasp and shields your eyes!")
else
- user.visible_message("[user] fails to blind [M] with the flash!")
+ visible_message("[user] fails to blind [M] with the flash!")
+ user << "You fail to blind [M] with the flash!"
+ M << "[user] fails to blind you with the flash!"
else
if(M.flash_eyes())
M.confused += power
@@ -88,16 +92,16 @@
add_logs(user, M, "flashed", object="[src.name]")
flick("e_flash", M.flash)
M.Weaken(rand(5,10))
- user.visible_message("[user] overloads [M]'s sensors with the flash!")
+ user.visible_message("[user] overloads [M]'s sensors with the flash!", "You overload [M]'s sensors with the flash!")
return 1
- user.visible_message("[user] fails to blind [M] with the flash!")
+ user.visible_message("[user] fails to blind [M] with the flash!", "You fail to blind [M] with the flash!")
/obj/item/device/flash/attack_self(mob/living/carbon/user, flag = 0, emp = 0)
if(!try_use_flash(user))
return 0
- user.visible_message("[user]'s flash emits a blinding light!")
+ user.visible_message("[user]'s flash emits a blinding light!", "Your flash emits a blinding light!")
for(var/mob/living/carbon/M in oviewers(3, null))
flash_carbon(M, user, 3, 0)
diff --git a/code/game/objects/items/devices/flashlight.dm b/code/game/objects/items/devices/flashlight.dm
index 14409f8c738..5e8555d13ad 100644
--- a/code/game/objects/items/devices/flashlight.dm
+++ b/code/game/objects/items/devices/flashlight.dm
@@ -38,7 +38,7 @@
/obj/item/device/flashlight/attack_self(mob/user)
if(!isturf(user.loc))
- user << "You cannot turn the light on while in this [user.loc]." //To prevent some lighting anomalities.
+ user << "You cannot turn the light on while in this [user.loc]!" //To prevent some lighting anomalities.
return 0
on = !on
update_brightness(user)
@@ -53,7 +53,7 @@
return ..() //just hit them in the head
if(!user.IsAdvancedToolUser())
- user << "You don't have the dexterity to do this!"
+ user << "You don't have the dexterity to do this!"
return
var/mob/living/carbon/human/H = M //mob has protective eyewear
@@ -64,21 +64,22 @@
if(M == user) //they're using it on themselves
if(!M.eye_blind)
flick("flash", M.flash)
- M.visible_message("[M] directs [src] to \his eyes.", \
+ M.visible_message("[M] directs [src] to \his eyes.", \
"You wave the light in front of your eyes! Trippy!")
else
- M.visible_message("[M] directs [src] to \his eyes.", \
+ M.visible_message("[M] directs [src] to \his eyes.", \
"You wave the light in front of your eyes.")
return
- user.visible_message("[user] directs [src] to [M]'s eyes.", \
- "You direct [src] to [M]'s eyes.")
+ user.visible_message("[user] directs [src] to [M]'s eyes.", \
+ "You direct [src] to [M]'s eyes.")
+ M << "[user] directs [src] to your eyes."
if(istype(M, /mob/living/carbon/human) || istype(M, /mob/living/carbon/monkey)) //robots and aliens are unaffected
if(M.stat == DEAD || M.disabilities & BLIND) //mob is dead or fully blind
- user << "[M] pupils does not react to the light!"
+ user << "[M] pupils don't react to the light!"
else if(M.dna.check_mutation(XRAY)) //mob has X-RAY vision
- user << "[M] pupils give an eerie glow!"
+ user << "[M] pupils give an eerie glow!"
else //they're okay!
if(!M.eye_blind)
flick("flash", M.flash) //flash the affected mob
@@ -111,7 +112,7 @@
/obj/item/device/flashlight/pen/afterattack(atom/target, mob/user, proximity_flag)
if(!proximity_flag)
if(holo_cooldown)
- user << "[src] is not ready yet."
+ user << "[src] is not ready yet!"
return
var/T = get_turf(target)
if(locate(/mob/living) in T)
@@ -237,7 +238,7 @@ obj/item/device/flashlight/lamp/bananalamp
// Usual checks
if(!fuel)
- user << "It's out of fuel."
+ user << "It's out of fuel!"
return
if(on)
return
diff --git a/code/game/objects/items/devices/instruments.dm b/code/game/objects/items/devices/instruments.dm
new file mode 100644
index 00000000000..6ecc1a86125
--- /dev/null
+++ b/code/game/objects/items/devices/instruments.dm
@@ -0,0 +1,57 @@
+//copy pasta of the space piano, don't hurt me -Pete
+/obj/item/device/instrument
+ name = "generic instrument"
+ var/datum/song/handheld/song
+ var/instrumentId = "generic"
+ var/instrumentExt = "ogg"
+
+/obj/item/device/instrument/New()
+ song = new(instrumentId, src)
+ song.instrumentExt = instrumentExt
+
+/obj/item/device/instrument/Destroy()
+ qdel(song)
+ song = null
+ ..()
+
+/obj/item/device/instrument/initialize()
+ song.tempo = song.sanitize_tempo(song.tempo) // tick_lag isn't set when the map is loaded
+ ..()
+
+/obj/item/device/instrument/attack_self(mob/user as mob)
+ if(!user.IsAdvancedToolUser())
+ user << "You don't have the dexterity to do this!"
+ return 1
+ interact(user)
+
+/obj/item/device/instrument/interact(mob/user as mob)
+ if(!user)
+ return
+
+ if(!isliving(user) || user.stat || user.restrained() || user.lying)
+ return
+
+ user.set_machine(src)
+ song.interact(user)
+
+/obj/item/device/instrument/violin
+ name = "space violin"
+ desc = "A wooden musical instrument with four strings and a bow. \"The devil went down to space, he was looking for an assistant to grief.\""
+ icon = 'icons/obj/musician.dmi'
+ icon_state = "violin"
+ item_state = "violin"
+ force = 10
+ hitsound = "swing_hit"
+ instrumentId = "violin"
+
+/obj/item/device/instrument/guitar
+ name = "guitar"
+ desc = "It's made of wood and has bronze strings."
+ icon = 'icons/obj/musician.dmi'
+ icon_state = "guitar"
+ item_state = "guitar"
+ force = 10
+ attack_verb = list("played metal on", "serenaded", "crashed", "smashed")
+ hitsound = "swing_hit"
+ instrumentId = "guitar"
+
diff --git a/code/game/objects/items/devices/laserpointer.dm b/code/game/objects/items/devices/laserpointer.dm
index d773852de9b..c66a93aa4ad 100644
--- a/code/game/objects/items/devices/laserpointer.dm
+++ b/code/game/objects/items/devices/laserpointer.dm
@@ -112,7 +112,7 @@
if(C.weakeyes)
C.Stun(1)
else
- outmsg = "You fail to blind [C] by shining [src] at their eyes."
+ outmsg = "You fail to blind [C] by shining [src] at their eyes!"
//robots and AI
else if(issilicon(target))
@@ -121,11 +121,11 @@
if(prob(effectchance * diode.rating))
flick("e_flash", S.flash)
S.Weaken(rand(5,10))
- S << "Your sensors were overloaded by a laser!"
+ S << "Your sensors were overloaded by a laser!"
outmsg = "You overload [S] by shining [src] at their sensors."
add_logs(user, S, "shone in the sensors", object="laser pointer")
else
- outmsg = "You fail to overload [S] by shining [src] at their sensors."
+ outmsg = "You fail to overload [S] by shining [src] at their sensors!"
//cameras
else if(istype(target, /obj/machinery/camera))
@@ -135,7 +135,7 @@
outmsg = "You hit the lens of [C] with [src], temporarily disabling the camera!"
add_logs(user, C, "EMPed", object="laser pointer")
else
- outmsg = "You missed the lens of [C] with [src]."
+ outmsg = "You miss the lens of [C] with [src]!"
//laser pointer image
icon_state = "pointer_[pointer_icon_state]"
@@ -158,7 +158,7 @@
recharging = 1
SSobj.processing |= src
if(energy <= 0)
- user << "You've overused the battery of [src], now it needs time to recharge!"
+ user << "The [src]'s battery is overused, it needs time to recharge!"
recharge_locked = 1
flick_overlay(I, showto, 10)
diff --git a/code/game/objects/items/devices/lightreplacer.dm b/code/game/objects/items/devices/lightreplacer.dm
index d4f37fa97e5..4580e823eba 100644
--- a/code/game/objects/items/devices/lightreplacer.dm
+++ b/code/game/objects/items/devices/lightreplacer.dm
@@ -82,19 +82,19 @@
user << "You insert a piece of glass into the [src.name]. You have [uses] lights remaining."
return
else
- user << "You need one sheet of glass to replace lights."
+ user << "You need one sheet of glass to replace lights!"
if(istype(W, /obj/item/weapon/light))
var/obj/item/weapon/light/L = W
if(L.status == 0) // LIGHT OKAY
if(uses < max_uses)
AddUses(1)
- user << "You insert the [L.name] into the [src.name]. You have [uses] lights remaining."
+ user << "You insert the [L.name] into the [src.name]. You have [uses] lights remaining."
user.drop_item()
qdel(L)
return
else
- user << "You need a working light."
+ user << "You need a working light!"
return
/obj/item/device/lightreplacer/emag_act()
@@ -170,7 +170,7 @@
U << failmsg
return
else
- U << "There is a working [target.fitting] already inserted."
+ U << "There is a working [target.fitting] already inserted!"
return
/obj/item/device/lightreplacer/proc/Emag()
diff --git a/code/game/objects/items/devices/megaphone.dm b/code/game/objects/items/devices/megaphone.dm
index 29c9fbfbba9..3b307fc00cf 100644
--- a/code/game/objects/items/devices/megaphone.dm
+++ b/code/game/objects/items/devices/megaphone.dm
@@ -32,7 +32,7 @@
message = capitalize(message)
if(!user.can_speak(message))
- user << "You find yourself unable to speak at all."
+ user << "You find yourself unable to speak at all!"
return
if ((src.loc == user && user.stat == 0))
diff --git a/code/game/objects/items/devices/paicard.dm b/code/game/objects/items/devices/paicard.dm
index 9d656406bbf..f827375582a 100644
--- a/code/game/objects/items/devices/paicard.dm
+++ b/code/game/objects/items/devices/paicard.dm
@@ -69,7 +69,7 @@
if(pai.master_dna)
return
if(!istype(usr, /mob/living/carbon))
- usr << "You don't have any DNA, or your DNA is incompatible with this device."
+ usr << "You don't have any DNA, or your DNA is incompatible with this device!"
else
var/mob/living/carbon/M = usr
pai.master = M.real_name
diff --git a/code/game/objects/items/devices/pizza_bomb.dm b/code/game/objects/items/devices/pizza_bomb.dm
index b7256885428..cbf2bb7d193 100644
--- a/code/game/objects/items/devices/pizza_bomb.dm
+++ b/code/game/objects/items/devices/pizza_bomb.dm
@@ -67,7 +67,7 @@
user.visible_message("[user] cuts the [chosen_wire] wire!", "You cut the [chosen_wire] wire!")
sleep(5)
if(chosen_wire == correct_wire)
- src.audible_message("\icon[src] \The [src] suddenly stops beeping and seems lifeless.")
+ src.audible_message("\icon[src] \The [src] suddenly stops beeping and seems lifeless.")
user << "You did it!"
icon_state = "pizzabox_bomb_[correct_wire]"
name = "pizza bomb"
@@ -81,13 +81,13 @@
return
if(istype(I, /obj/item/weapon/wirecutters) && disarmed)
if(!in_range(user, src))
- user << "You can't see the box well enough to cut the wires out."
+ user << "You can't see the box well enough to cut the wires out!"
return
- user.visible_message("[user] starts removing the payload and wires from \the [src].")
+ user.visible_message("[user] starts removing the payload and wires from \the [src].", "You start removing the payload and wires from \the [src]...")
if(do_after(user, 40))
playsound(src, 'sound/items/Wirecutter.ogg', 50, 1, 1)
user.unEquip(src)
- user.visible_message("[user] removes the insides of \the [src]!")
+ user.visible_message("[user] removes the insides of \the [src]!", "You remove the insides of \the [src].")
var/obj/item/stack/cable_coil/C = new /obj/item/stack/cable_coil(src.loc)
C.amount = 3
new /obj/item/weapon/bombcore/miniature(src.loc)
diff --git a/code/game/objects/items/devices/powersink.dm b/code/game/objects/items/devices/powersink.dm
index 746dfaea182..970e7550699 100644
--- a/code/game/objects/items/devices/powersink.dm
+++ b/code/game/objects/items/devices/powersink.dm
@@ -61,21 +61,21 @@
if(isturf(T) && !T.intact)
attached = locate() in T
if(!attached)
- user << "No exposed cable here to attach to."
+ user << "No exposed cable here to attach to!"
else
set_mode(CLAMPED_OFF)
user.visible_message( \
"[user] attaches \the [src] to the cable.", \
- "You attach \the [src] to the cable.",
- "You hear some wires being connected to something.")
+ "You attach \the [src] to the cable.",
+ "You hear some wires being connected to something.")
else
- user << "Device must be placed over an exposed cable to attach to it."
+ user << "Device must be placed over an exposed cable to attach to it!"
else
set_mode(DISCONNECTED)
user.visible_message( \
"[user] detaches \the [src] from the cable.", \
- "You detach \the [src] from the cable.",
- "You hear some wires being disconnected from something.")
+ "You detach \the [src] from the cable.",
+ "You hear some wires being disconnected from something.")
else
..()
@@ -93,8 +93,8 @@
if(CLAMPED_OFF)
user.visible_message( \
"[user] activates \the [src]!", \
- "You activate \the [src]!",
- "You hear a click.")
+ "You activate \the [src].",
+ "You hear a click.")
message_admins("Power sink activated by [key_name(user, user.client)](?) at ([x],[y],[z] - JMP)")
log_game("Power sink activated by [key_name(user)] at ([x],[y],[z])")
set_mode(OPERATING)
@@ -102,8 +102,8 @@
if(OPERATING)
user.visible_message( \
"[user] deactivates \the [src]!", \
- "You deactivate \the [src]!",
- "You hear a click.")
+ "You deactivate \the [src].",
+ "You hear a click.")
set_mode(CLAMPED_OFF)
/obj/item/device/powersink/process()
diff --git a/code/game/objects/items/devices/radio/electropack.dm b/code/game/objects/items/devices/radio/electropack.dm
index 06922665771..3af3ab07841 100644
--- a/code/game/objects/items/devices/radio/electropack.dm
+++ b/code/game/objects/items/devices/radio/electropack.dm
@@ -27,7 +27,7 @@
if(iscarbon(user))
var/mob/living/carbon/C = user
if(src == C.back)
- user << "You need help taking this off!"
+ user << "You need help taking this off!"
return
..()
@@ -38,7 +38,7 @@
A.icon = 'icons/obj/assemblies.dmi'
if(!user.unEquip(W))
- user << "\the [W] is stuck to your hand, you cannot attach it to \the [src]!"
+ user << "\the [W] is stuck to your hand, you cannot attach it to \the [src]!"
return
W.loc = A
W.master = A
diff --git a/code/game/objects/items/devices/radio/headset.dm b/code/game/objects/items/devices/radio/headset.dm
index 86fce610ab3..92ad5697dc7 100644
--- a/code/game/objects/items/devices/radio/headset.dm
+++ b/code/game/objects/items/devices/radio/headset.dm
@@ -242,14 +242,14 @@
keyslot2 = null
recalculateChannels()
- user << "You pop out the encryption keys in the headset!"
+ user << "You pop out the encryption keys in the headset."
else
- user << "This headset doesn't have any unique encryption keys! How useless..."
+ user << "This headset doesn't have any unique encryption keys! How useless..."
if(istype(W, /obj/item/device/encryptionkey/))
if(keyslot && keyslot2)
- user << "The headset can't hold another key!"
+ user << "The headset can't hold another key!"
return
if(!keyslot)
diff --git a/code/game/objects/items/devices/radio/radio.dm b/code/game/objects/items/devices/radio/radio.dm
index c7283a15f29..169baa3a259 100644
--- a/code/game/objects/items/devices/radio/radio.dm
+++ b/code/game/objects/items/devices/radio/radio.dm
@@ -372,7 +372,7 @@
signal.frequency = freqnum // Quick frequency set
Broadcast_Message(M, voicemask,
src, message, voice, jobname, real_name,
- 4, signal.data["compression"], list(position.z, 0), freq, spans,
+ 5, signal.data["compression"], list(position.z, 0), freq, spans,
verb_say, verb_ask, verb_exclaim, verb_yell)
return
@@ -621,14 +621,14 @@
keyslot = null
recalculateChannels()
- user << "You pop out the encryption key in the radio!"
+ user << "You pop out the encryption key in the radio."
else
- user << "This radio doesn't have any encryption keys!"
+ user << "This radio doesn't have any encryption keys!"
if(istype(W, /obj/item/device/encryptionkey/))
if(keyslot)
- user << "The radio can't hold another key!"
+ user << "The radio can't hold another key!"
return
if(!keyslot)
diff --git a/code/game/objects/items/devices/recaller.dm b/code/game/objects/items/devices/recaller.dm
index 226ae801ee0..1fdf9794b96 100644
--- a/code/game/objects/items/devices/recaller.dm
+++ b/code/game/objects/items/devices/recaller.dm
@@ -1,5 +1,4 @@
//gangtool device
-//Allows gang leaders to recall the shuttle
/obj/item/device/gangtool
name = "suspicious device"
desc = "A strange device of sorts. Hard to really make out what it actually does just by looking."
@@ -13,6 +12,7 @@
var/gang //Which gang uses this?
var/boss = 1 //If it has the power to promote gang members
var/recalling = 0
+ var/promotions = 0
/obj/item/device/gangtool/New() //Initialize supply point income if it hasn't already been started
if(!ticker.mode.gang_points)
@@ -28,47 +28,63 @@
var/dat
if(!gang)
dat += "This device is not registered.
"
- dat += "Register Device
"
+ if(user.mind in (ticker.mode.A_bosses | ticker.mode.B_bosses))
+ dat += "Give this device to another member of your organization to use.
"
+ else
+ dat += "Register Device
"
else
var/gang_size = ((gang == "A")? (ticker.mode.A_gang.len + ticker.mode.A_bosses.len) : (ticker.mode.B_gang.len + ticker.mode.B_bosses.len))
var/gang_territory = ((gang == "A")? ticker.mode.A_territory.len : ticker.mode.B_territory.len)
var/points = ((gang == "A") ? ticker.mode.gang_points.A : ticker.mode.gang_points.B)
- dat += "Registered as [boss ? "Administrator." : "User."]
"
- dat += "Organization: [(gang == "A")?("[gang_name("A")] Gang"):("[gang_name("B")] Gang")]
"
+ dat += "Registration: [(gang == "A")? gang_name("A") : gang_name("B")] Gang [boss ? "Administrator" : "Member"]
"
dat += "Organization Size: [gang_size]
"
- dat += "Areas Controlled: [gang_territory] ([round((gang_territory/start_state.num_territories)*100, 0.1)]% of station)
"
+ dat += "Station Control: [round((gang_territory/start_state.num_territories)*100, 1)]%
"
dat += "Recall Emergency Shuttle
"
dat += "
"
dat += "Influence: [points]
"
dat += "Time until Influence grows: [(points >= 100) ? ("--:--") : (time2text(ticker.mode.gang_points.next_point_time - world.time, "mm:ss"))]
"
dat += "Purchase Items:
"
+ dat += "(10 Influence) "
+ if(points >= 10)
+ dat += "Territory Spraycan
"
+ else
+ dat += "Territory Spraycan
"
+
+ dat += "(10 Influence) "
+ if(points >= 10)
+ dat += "Switchblade
"
+ else
+ dat += "Switchblade
"
+
+ dat += "(25 Influence) "
if(points >= 25)
- dat += "(25 Influence) 10mm Pistol
"
+ dat += "10mm Pistol
"
else
- dat += "(25 Influence) 10mm Pistol
"
+ dat += "10mm Pistol
"
+ dat += "(10 Influence) "
if(points >= 10)
- dat += "(10 Influence) 10mm Ammo
"
+ dat += "10mm Ammo
"
else
- dat += "(10 Influence) 10mm Ammo
"
-
- if(points >= 10)
- dat += "(10 Influence) Territory Spraycan
"
- else
- dat += "(10 Influence) Territory Spraycan
"
+ dat += "10mm Ammo
"
+ dat += "(50 Influence) "
if(points >= 50)
- dat += "(50 Influence) Recruitment Pen
"
+ dat += "Recruitment Pen
"
else
- dat += "(50 Influence) Recruitment Pen
"
+ dat += "Recruitment Pen
"
if(boss)
- if(points >= 40)
- dat += "(40 Influence) Unregistered Gangtool
"
+ if(promotions >= 3)
+ dat += "(Out of stock) Promote a Gangster
"
else
- dat += "(40 Influence) Unregistered Gangtool
"
+ dat += "([(promotions*20)+10] Influence, [3-promotions] left) "
+ if(points >= (promotions*20)+10)
+ dat += "Promote a Gangster
"
+ else
+ dat += "Promote a Gangster
"
dat += "
"
dat += "Refresh
"
@@ -87,6 +103,14 @@
var/points = ((gang == "A") ? ticker.mode.gang_points.A : ticker.mode.gang_points.B)
var/item_type
switch(href_list["purchase"])
+ if("spraycan")
+ if(points >= 10)
+ item_type = /obj/item/toy/crayon/spraycan/gang
+ points = 10
+ if("switchblade")
+ if(points >= 10)
+ item_type = /obj/item/weapon/switchblade
+ points = 10
if("pistol")
if(points >= 25)
item_type = /obj/item/weapon/gun/projectile/automatic/pistol
@@ -95,18 +119,15 @@
if(points >= 10)
item_type = /obj/item/ammo_box/magazine/m10mm
points = 10
- if("spraycan")
- if(points >= 10)
- item_type = /obj/item/toy/crayon/spraycan/gang
- points = 10
if("pen")
if(points >= 50)
item_type = /obj/item/weapon/pen/gang
points = 50
if("gangtool")
- if(points >= 40)
+ if((promotions < 3) && (points >= (promotions*20)+10))
item_type = /obj/item/device/gangtool/lt
- points = 40
+ points = (promotions*20)+10
+ promotions++
if(item_type)
if(gang == "A")
@@ -117,6 +138,7 @@
var/mob/living/carbon/human/H = usr
H.put_in_any_hand_if_possible(purchased)
ticker.mode.message_gangtools(((gang=="A")? ticker.mode.A_tools : ticker.mode.B_tools), "A [href_list["purchase"]] was purchased by [usr] for [points] Influence.")
+ log_game("A [href_list["purchase"]] was purchased by [key_name(usr)] for [points] Influence.")
else if(href_list["choice"])
switch(href_list["choice"])
@@ -129,7 +151,7 @@
/obj/item/device/gangtool/proc/register_device(var/mob/user)
var/promoted
- if((user.mind in ticker.mode.A_gang) || (user.mind in ticker.mode.A_bosses))
+ if(user.mind in (ticker.mode.A_gang | ticker.mode.A_bosses))
ticker.mode.A_tools += src
gang = "A"
if(!(user.mind in ticker.mode.A_bosses))
@@ -139,7 +161,7 @@
ticker.mode.update_gang_icons_added(user.mind, "A")
log_game("[key_name(user)] has been promoted to Lieutenant in the [gang_name("A")] Gang (A)")
promoted = 1
- else if((user.mind in ticker.mode.B_gang) || (user.mind in ticker.mode.B_bosses))
+ else if(user.mind in (ticker.mode.B_gang | ticker.mode.B_bosses))
ticker.mode.B_tools += src
gang = "B"
if(!(user.mind in ticker.mode.B_bosses))
@@ -152,8 +174,10 @@
if(promoted)
ticker.mode.message_gangtools(((gang=="A")? ticker.mode.A_tools : ticker.mode.B_tools), "[user] has been promoted to Lieutenant.")
user << "You have been promoted to Lieutenant!"
- user << "The Gangtool you registered will allow you to use your gang's influence to purchase items and prevent the station from evacuating before your gang can take over. Use it to recall the emergency shuttle from anywhere on the station."
- user << "You may also now use recruitment pens to grow your gang membership. Use them on unsuspecting crew members to recruit them."
+ ticker.mode.forge_gang_objectives(user.mind)
+ ticker.mode.greet_gang(user.mind,0)
+ user << "The Gangtool you registered will allow you to use your gang's influence to purchase items and prevent the station from evacuating before your gang can take over. Use it to recall the emergency shuttle from anywhere on the station."
+ user << "You may also now use recruitment pens to grow your gang membership. Use them on unsuspecting crew members to recruit them."
if(!gang)
usr << "ACCESS DENIED: Unauthorized user."
diff --git a/code/game/objects/items/devices/taperecorder.dm b/code/game/objects/items/devices/taperecorder.dm
index 693271398e2..2a8ef3cae0b 100644
--- a/code/game/objects/items/devices/taperecorder.dm
+++ b/code/game/objects/items/devices/taperecorder.dm
@@ -282,9 +282,9 @@
/obj/item/device/tape/attackby(obj/item/I, mob/user, params)
if(ruined && istype(I, /obj/item/weapon/screwdriver))
- user << "You start winding the tape back in."
+ user << "You start winding the tape back in..."
if(do_after(user, 120))
- user << "You wound the tape back in!"
+ user << "You wound the tape back in."
fix()
diff --git a/code/game/objects/items/devices/transfer_valve.dm b/code/game/objects/items/devices/transfer_valve.dm
index 85c5c9ceb4a..8437cf7c12e 100644
--- a/code/game/objects/items/devices/transfer_valve.dm
+++ b/code/game/objects/items/devices/transfer_valve.dm
@@ -16,7 +16,7 @@
/obj/item/device/transfer_valve/attackby(obj/item/item, mob/user, params)
if(istype(item, /obj/item/weapon/tank))
if(tank_one && tank_two)
- user << "There are already two tanks attached, remove one first."
+ user << "There are already two tanks attached, remove one first!"
return
if(!tank_one)
@@ -42,7 +42,7 @@
user << "The device is secured."
return
if(attached_device)
- user << "There is already a device attached to the valve, remove it first."
+ user << "There is already a device attached to the valve, remove it first!"
return
user.remove_from_mob(item)
attached_device = A
diff --git a/code/game/objects/items/devices/uplinks.dm b/code/game/objects/items/devices/uplinks.dm
index d72e28e591e..3807998cbc9 100644
--- a/code/game/objects/items/devices/uplinks.dm
+++ b/code/game/objects/items/devices/uplinks.dm
@@ -180,7 +180,7 @@ var/list/world_uplinks = list()
qdel(S)
user << "Teleporter refunded."
else
- user << "This teleporter is already used."
+ user << "This teleporter is already used!"
// PRESET UPLINKS
// A collection of preset uplinks.
diff --git a/code/game/objects/items/devices/violin.dm b/code/game/objects/items/devices/violin.dm
deleted file mode 100644
index e8481778326..00000000000
--- a/code/game/objects/items/devices/violin.dm
+++ /dev/null
@@ -1,40 +0,0 @@
-//copy pasta of the space piano, don't hurt me -Pete
-
-/obj/item/device/violin
- name = "space violin"
- desc = "A wooden musical instrument with four strings and a bow. \"The devil went down to space, he was looking for an assistant to grief.\""
- icon = 'icons/obj/musician.dmi'
- icon_state = "violin"
- item_state = "violin"
- force = 10
- var/datum/song/handheld/song
- hitsound = "swing_hit"
-
-/obj/item/device/violin/New()
- song = new("violin", src)
- song.instrumentExt = "ogg"
-
-/obj/item/device/violin/Destroy()
- qdel(song)
- song = null
- ..()
-
-/obj/item/device/violin/initialize()
- song.tempo = song.sanitize_tempo(song.tempo) // tick_lag isn't set when the map is loaded
- ..()
-
-/obj/item/device/violin/attack_self(mob/user as mob)
- if(!user.IsAdvancedToolUser())
- user << "You don't have the dexterity to do this!"
- return 1
- interact(user)
-
-/obj/item/device/violin/interact(mob/user as mob)
- if(!user)
- return
-
- if(!isliving(user) || user.stat || user.restrained() || user.lying)
- return
-
- user.set_machine(src)
- song.interact(user)
diff --git a/code/game/objects/items/holotape.dm b/code/game/objects/items/holotape.dm
index c517faaa381..bd10a107cad 100644
--- a/code/game/objects/items/holotape.dm
+++ b/code/game/objects/items/holotape.dm
@@ -113,8 +113,7 @@
P.icon_state = "[P.icon_base]_[dir]"
cur = get_step_towards(cur,end)
- usr << "You finish project the legnth of [icon_base] holotape."
- user.visible_message("[user] finishes projecting the length of [icon_base] holotape.")
+ user.visible_message("[user] finishes projecting the length of [icon_base] holotape.", "You finish projecting the length of [icon_base] holotape.")
charging = 1
spawn(40)
@@ -138,7 +137,7 @@
if(!(W.dir == 5) || !(W.fulltile == 1))
return
- user << "You start projecting the [icon_base] holotape onto [target]."
+ user << "You start projecting the [icon_base] holotape onto [target]..."
if(!do_mob(user, target, 30))
return
@@ -177,8 +176,8 @@
user.changeNext_move(CLICK_CD_MELEE)
user.do_attack_animation(src)
playsound(loc, 'sound/weapons/Egloves.ogg', 80, 1)
- user.visible_message("[user] hits [src].", \
- "You hit [src]." )
+ user.visible_message("[user] hits [src].", \
+ "You hit [src]." )
health -= rand(1,2)
healthcheck()
diff --git a/code/game/objects/items/robot/robot_items.dm b/code/game/objects/items/robot/robot_items.dm
index 4a56ab7b1f8..7e38de5879d 100644
--- a/code/game/objects/items/robot/robot_items.dm
+++ b/code/game/objects/items/robot/robot_items.dm
@@ -21,7 +21,7 @@
for(var/mob/O in viewers(M, null))
if (O.client)
O.show_message("[user] has prodded [M] with an electrically-charged arm!", 1,
- " You hear someone fall", 2)
+ "You hear someone fall.", 2)
add_logs(user, M, "stunned", object="[src.name]", addition="(INTENT: [uppertext(user.a_intent)])")
/obj/item/borg/overdrive
diff --git a/code/game/objects/items/robot/robot_parts.dm b/code/game/objects/items/robot/robot_parts.dm
index 9641f540d89..2ea78ce58f9 100644
--- a/code/game/objects/items/robot/robot_parts.dm
+++ b/code/game/objects/items/robot/robot_parts.dm
@@ -92,13 +92,13 @@
if (M.use(1))
var/obj/item/weapon/ed209_assembly/B = new /obj/item/weapon/ed209_assembly
B.loc = get_turf(src)
- user << "You armed the robot frame."
+ user << "You arm the robot frame."
if (user.get_inactive_hand()==src)
user.unEquip(src)
user.put_in_inactive_hand(B)
qdel(src)
else
- user << "You need one sheet of metal to start building ED-209."
+ user << "You need one sheet of metal to start building ED-209!"
return
if(istype(W, /obj/item/robot_parts/l_leg))
if(src.l_leg) return
@@ -136,9 +136,9 @@
src.chest = W
src.updateicon()
else if(!W:wires)
- user << "You need to attach wires to it first!"
+ user << "You need to attach wires to it first!"
else
- user << "You need to attach a cell to it first!"
+ user << "You need to attach a cell to it first!"
if(istype(W, /obj/item/robot_parts/head))
if(src.head) return
@@ -148,22 +148,22 @@
src.head = W
src.updateicon()
else
- user << "You need to attach a flash to it first!"
+ user << "You need to attach a flash to it first!"
if (istype(W, /obj/item/device/multitool))
if(check_completion())
Interact(user)
else
- user << "The endoskeleton must be assembled before debugging can begin."
+ user << "The endoskeleton must be assembled before debugging can begin!"
if(istype(W, /obj/item/device/mmi))
var/obj/item/device/mmi/M = W
if(check_completion())
if(!istype(loc,/turf))
- user << "You can't put the MMI in, the frame has to be standing on the ground to be perfectly precise."
+ user << "You can't put the MMI in, the frame has to be standing on the ground to be perfectly precise!"
return
if(!M.brainmob)
- user << "Sticking an empty MMI into the frame would sort of defeat the purpose."
+ user << "Sticking an empty MMI into the frame would sort of defeat the purpose!"
return
if(!M.brainmob.key)
var/ghost_can_reenter = 0
@@ -173,19 +173,19 @@
ghost_can_reenter = 1
break
if(!ghost_can_reenter)
- user << "The mmi indicates that their mind is completely unresponsive; there's no point."
+ user << "The MMI indicates that their mind is completely unresponsive; there's no point!"
return
if(M.brainmob.stat == DEAD)
- user << "Sticking a dead brain into the frame would sort of defeat the purpose."
+ user << "Sticking a dead brain into the frame would sort of defeat the purpose!"
return
if((M.brainmob.mind in ticker.mode.head_revolutionaries) || (M.brainmob.mind in ticker.mode.A_bosses) || (M.brainmob.mind in ticker.mode.B_bosses))
- user << "The frame's firmware lets out a shrill sound, and flashes 'Abnormal Memory Engram'. It refuses to accept the MMI."
+ user << "The frame's firmware lets out a shrill sound, and flashes 'Abnormal Memory Engram'. It refuses to accept the MMI!"
return
if(jobban_isbanned(M.brainmob, "Cyborg"))
- user << "This MMI does not seem to fit."
+ user << "This MMI does not seem to fit!"
return
var/mob/living/silicon/robot/O = new /mob/living/silicon/robot(get_turf(loc))
@@ -235,10 +235,10 @@
O << "Error: Servo motors unresponsive."
else
- user << "The MMI must go in after everything else!"
+ user << "The MMI must go in after everything else!"
if(istype(W,/obj/item/weapon/pen))
- user << "You need to use a multitool to name [src]."
+ user << "You need to use a multitool to name [src]!"
return
/obj/item/robot_parts/robot_suit/proc/Interact(mob/user)
@@ -260,7 +260,7 @@
var/mob/living/living_user = usr
var/obj/item/item_in_hand = living_user.get_active_hand()
if(!istype(item_in_hand, /obj/item/device/multitool))
- living_user << "You need a multitool!"
+ living_user << "You need a multitool!"
return
if(href_list["Name"])
@@ -294,23 +294,23 @@
..()
if(istype(W, /obj/item/weapon/stock_parts/cell))
if(src.cell)
- user << "You have already inserted a cell!"
+ user << "You have already inserted a cell!"
return
else
user.drop_item()
W.loc = src
src.cell = W
- user << "You insert the cell!"
+ user << "You insert the cell."
if(istype(W, /obj/item/stack/cable_coil))
if(src.wires)
- user << "You have already inserted wire."
+ user << "You have already inserted wire!"
return
var/obj/item/stack/cable_coil/coil = W
if (coil.use(1))
src.wires = 1.0
user << "You insert the wire."
else
- user << "You need one length of coil to wire it."
+ user << "You need one length of coil to wire it!"
return
/obj/item/robot_parts/head/attackby(obj/item/W as obj, mob/user as mob, params)
@@ -318,10 +318,10 @@
if(istype(W, /obj/item/device/flash/handheld))
var/obj/item/device/flash/handheld/F = W
if(src.flash1 && src.flash2)
- user << "You have already inserted the eyes!"
+ user << "You have already inserted the eyes!"
return
else if(F.broken)
- user << "You can't use a broken flash!"
+ user << "You can't use a broken flash!"
return
else
user.drop_item()
@@ -330,6 +330,6 @@
src.flash2 = F
else
src.flash1 = F
- user << "You insert the flash into the eye socket!"
+ user << "You insert the flash into the eye socket."
return
diff --git a/code/game/objects/items/robot/robot_upgrades.dm b/code/game/objects/items/robot/robot_upgrades.dm
index 01dc031a466..a6898f61098 100644
--- a/code/game/objects/items/robot/robot_upgrades.dm
+++ b/code/game/objects/items/robot/robot_upgrades.dm
@@ -59,14 +59,14 @@
return 1
/obj/item/borg/upgrade/restart
- name = "cyborg emergency restart module"
- desc = "Used to force a restart of a disabled-but-repaired cyborg, bringing it back online."
+ name = "cyborg emergency reboot module"
+ desc = "Used to force a reboot of a disabled-but-repaired cyborg, bringing it back online."
icon_state = "cyborg_upgrade1"
/obj/item/borg/upgrade/restart/action(var/mob/living/silicon/robot/R)
if(R.health < 0)
- usr << "You have to repair the cyborg before using this module!"
+ usr << "You have to repair the cyborg before using this module!"
return 0
if(!R.key)
diff --git a/code/game/objects/items/shooting_range.dm b/code/game/objects/items/shooting_range.dm
index ad9da7a8362..bffb0d948e7 100644
--- a/code/game/objects/items/shooting_range.dm
+++ b/code/game/objects/items/shooting_range.dm
@@ -37,7 +37,7 @@
var/obj/item/weapon/weldingtool/WT = W
if(WT.remove_fuel(0, user))
overlays.Cut()
- usr << "You slice off [src]'s uneven chunks of aluminium and scorch marks."
+ usr << "You slice off [src]'s uneven chunks of aluminium and scorch marks."
return
@@ -59,10 +59,10 @@
if(ishuman(user))
if(!user.get_active_hand())
user.put_in_hands(src)
- user << "You take the target out of the stake."
+ user << "You take the target out of the stake."
else
src.loc = get_turf(user)
- user << "You take the target out of the stake."
+ user << "You take the target out of the stake."
stake.pinned_target = null
return
@@ -95,7 +95,7 @@
hp -= Proj.damage
if(hp <= 0)
- visible_message("[src] breaks into tiny pieces and collapses!")
+ visible_message("[src] breaks into tiny pieces and collapses!")
qdel(src)
// Create a temporary object to represent the damage
diff --git a/code/game/objects/items/stacks/medical.dm b/code/game/objects/items/stacks/medical.dm
index 0e90d30f526..47b6c6d4723 100644
--- a/code/game/objects/items/stacks/medical.dm
+++ b/code/game/objects/items/stacks/medical.dm
@@ -28,17 +28,17 @@
return 1
if(!user.IsAdvancedToolUser())
- user << "You don't have the dexterity to do this!"
+ user << "You don't have the dexterity to do this!"
return 1
if(ishuman(M))
var/mob/living/carbon/human/H = M
if(stop_bleeding)
if(H.bleedsuppress)
- user << "[H]'s bleeding is already bandaged."
+ user << "[H]'s bleeding is already bandaged!"
return
else if(!H.blood_max)
- user << "[H] isn't bleeding."
+ user << "[H] isn't bleeding!"
return
if(isliving(M))
diff --git a/code/game/objects/items/stacks/rods.dm b/code/game/objects/items/stacks/rods.dm
index eb2bd629f67..7a2a2a5146a 100644
--- a/code/game/objects/items/stacks/rods.dm
+++ b/code/game/objects/items/stacks/rods.dm
@@ -38,15 +38,15 @@ var/global/list/datum/stack_recipe/rod_recipes = list ( \
var/obj/item/weapon/weldingtool/WT = W
if(get_amount() < 2)
- user << "You need at least two rods to do this."
+ user << "You need at least two rods to do this!"
return
if(WT.remove_fuel(0,user))
var/obj/item/stack/sheet/metal/new_item = new(usr.loc)
new_item.add_to_stacks(usr)
- user.visible_message("[user.name] shaped [src] into metal with the weldingtool.", \
- "You shaped [src] into metal with the weldingtool.", \
- "You hear welding.")
+ user.visible_message("[user.name] shaped [src] into metal with the welding tool.", \
+ "You shape [src] into metal with the welding tool.", \
+ "You hear welding.")
var/obj/item/stack/rods/R = src
src = null
var/replace = (user.get_inactive_hand()==R)
@@ -58,9 +58,9 @@ var/global/list/datum/stack_recipe/rod_recipes = list ( \
if(istype(W,/obj/item/weapon/reagent_containers/food/snacks))
var/obj/item/weapon/reagent_containers/food/snacks/S = W
if(amount != 1)
- user << "You must use a single rod."
+ user << "You must use a single rod!"
else if(S.w_class > 2)
- user << "The ingredient is too big for [src]."
+ user << "The ingredient is too big for [src]!"
else
var/obj/item/weapon/reagent_containers/food/snacks/customizable/A = new/obj/item/weapon/reagent_containers/food/snacks/customizable/kebab(get_turf(src))
A.initialize_custom_food(src, S, user)
diff --git a/code/game/objects/items/stacks/sheets/glass.dm b/code/game/objects/items/stacks/sheets/glass.dm
index 775be481826..dcea59701ea 100644
--- a/code/game/objects/items/stacks/sheets/glass.dm
+++ b/code/game/objects/items/stacks/sheets/glass.dm
@@ -30,7 +30,7 @@
if(istype(W, /obj/item/stack/cable_coil))
var/obj/item/stack/cable_coil/CC = W
if (get_amount() < 1 || CC.get_amount() < 5)
- user << "You need five lengths of coil and one sheet of glass to make wired glass!"
return
CC.use(5)
use(1)
@@ -51,7 +51,7 @@
if (!G && replace)
user.put_in_hands(RG)
else
- user << "You need one rod and one sheet of glass to make reinforced glass."
+ user << "You need one rod and one sheet of glass to make reinforced glass!"
return
else
return ..()
@@ -60,7 +60,7 @@
if(!user || !src) return 0
if(!istype(user.loc,/turf)) return 0
if(!user.IsAdvancedToolUser())
- user << "You don't have the dexterity to do this!"
+ user << "You don't have the dexterity to do this!"
return 0
if(zero_amount()) return 0
var/title = "Sheet-Glass"
@@ -75,7 +75,7 @@
for (var/obj/structure/window/win in user.loc)
i++
if(i >= 4)
- user << "There are too many windows in this location."
+ user << "There are too many windows in this location."
return 1
directions-=win.dir
if(!(win.ini_dir in cardinal))
@@ -105,10 +105,10 @@
if(!src) return 1
if(src.loc != user) return 1
if(src.get_amount() < 2)
- user << "You need more glass to do that."
+ user << "You need more glass to do that!"
return 1
if(locate(/obj/structure/window) in user.loc)
- user << "There is a window in the way."
+ user << "There is a window in the way!"
return 1
var/obj/structure/window/W
W = new /obj/structure/window/fulltile( user.loc, 0 )
@@ -159,7 +159,7 @@
if(!user || !src) return 0
if(!istype(user.loc,/turf)) return 0
if(!user.IsAdvancedToolUser())
- user << "You don't have the dexterity to do this!"
+ user << "You don't have the dexterity to do this!"
return 0
var/title = "Sheet Reinf. Glass"
title += " ([src.get_amount()] sheet\s left)"
@@ -203,10 +203,10 @@
if(!src) return 1
if(src.loc != user) return 1
if(src.get_amount() < 2)
- user << "You need more glass to do that."
+ user << "You need more glass to do that!"
return 1
if(locate(/obj/structure/window) in user.loc)
- user << "There is a window in the way."
+ user << "There is a window in the way!"
return 1
var/obj/structure/window/W
W = new /obj/structure/window/reinforced/fulltile(user.loc, 1)
@@ -221,16 +221,16 @@
for(var/obj/structure/windoor_assembly/WA in user.loc)
if(WA.dir == user.dir)
- user << "There is already a windoor assembly in that location."
+ user << "There is already a windoor assembly in that location!"
return 1
for(var/obj/machinery/door/window/W in user.loc)
if(W.dir == user.dir)
- user << "There is already a windoor in that location."
+ user << "There is already a windoor in that location!"
return 1
if(src.get_amount() < 5)
- user << "You need more glass to do that."
+ user << "You need more glass to do that!"
return 1
var/obj/structure/windoor_assembly/WD = new(user.loc)
diff --git a/code/game/objects/items/stacks/sheets/leather.dm b/code/game/objects/items/stacks/sheets/leather.dm
index 4c4fa99a3e5..e875c6605d5 100644
--- a/code/game/objects/items/stacks/sheets/leather.dm
+++ b/code/game/objects/items/stacks/sheets/leather.dm
@@ -109,25 +109,21 @@ var/global/list/datum/stack_recipe/xeno_recipes = list ( \
//Step one - dehairing.
/obj/item/stack/sheet/animalhide/attackby(obj/item/weapon/W as obj, mob/user as mob, params)
- if( istype(W, /obj/item/weapon/kitchenknife) || \
- istype(W, /obj/item/weapon/kitchen/utensil/knife) || \
- istype(W, /obj/item/weapon/twohanded/fireaxe) || \
- istype(W, /obj/item/weapon/hatchet) )
-
- //visible message on mobs is defined as visible_message(var/message, var/self_message, var/blind_message)
- usr.visible_message("\the [usr] starts cutting hair off \the [src]", "You start cutting the hair off \the [src]", "You hear the sound of a knife rubbing against flesh")
- if(do_after(user,50))
- usr << "You cut the hair from this [src.singular_name]"
+ if(is_sharp(W))
+ playsound(loc, 'sound/weapons/slice.ogg', 50, 1, -1)
+ user.visible_message("[user] starts cutting hair off \the [src].", "You start cutting the hair off \the [src]...", "You hear the sound of a knife rubbing against flesh.")
+ if(do_after(user,50, target = src))
+ user << "You cut the hair from this [src.singular_name]."
//Try locating an exisitng stack on the tile and add to there if possible
- for(var/obj/item/stack/sheet/hairlesshide/HS in usr.loc)
+ for(var/obj/item/stack/sheet/hairlesshide/HS in user.loc)
if(HS.amount < 50)
HS.amount++
- src.use(1)
+ use(1)
break
//If it gets to here it means it did not find a suitable stack on the tile.
- var/obj/item/stack/sheet/hairlesshide/HS = new(usr.loc)
+ var/obj/item/stack/sheet/hairlesshide/HS = new(user.loc)
HS.amount = 1
- src.use(1)
+ use(1)
else
..()
diff --git a/code/game/objects/items/stacks/sheets/light.dm b/code/game/objects/items/stacks/sheets/light.dm
index 200718edd3e..1992e75ab6c 100644
--- a/code/game/objects/items/stacks/sheets/light.dm
+++ b/code/game/objects/items/stacks/sheets/light.dm
@@ -32,5 +32,5 @@
user << "You make a light tile."
L.add_fingerprint(user)
else
- user << "You need one metal sheet to finish the light tile."
+ user << "You need one metal sheet to finish the light tile!"
return
diff --git a/code/game/objects/items/stacks/stack.dm b/code/game/objects/items/stacks/stack.dm
index b941b9228d7..f758904770d 100644
--- a/code/game/objects/items/stacks/stack.dm
+++ b/code/game/objects/items/stacks/stack.dm
@@ -122,7 +122,7 @@
if(!building_checks(R, multiplier))
return
if (R.time)
- usr << "Building [R.title] ..."
+ usr.visible_message("[usr] starts building [R.title].", "You start building [R.title]...")
if (!do_after(usr, R.time))
return
if(!building_checks(R, multiplier))
@@ -160,15 +160,15 @@
/obj/item/stack/proc/building_checks(datum/stack_recipe/R, multiplier)
if (src.get_amount() < R.req_amount*multiplier)
if (R.req_amount*multiplier>1)
- usr << "You haven't got enough [src] to build \the [R.req_amount*multiplier] [R.title]\s!"
+ usr << "You haven't got enough [src] to build \the [R.req_amount*multiplier] [R.title]\s!"
else
- usr << "You haven't got enough [src] to build \the [R.title]!"
+ usr << "You haven't got enough [src] to build \the [R.title]!"
return 0
if (R.one_per_turf && (locate(R.result_type) in usr.loc))
- usr << "There is another [R.title] here!"
+ usr << "There is another [R.title] here!"
return 0
if (R.on_floor && !istype(usr.loc, /turf/simulated/floor))
- usr << "\The [R.title] must be constructed on the floor!"
+ usr << "\The [R.title] must be constructed on the floor!"
return 0
return 1
@@ -210,7 +210,7 @@
if (item.amount>=item.max_amount)
continue
oldsrc.attackby(item, usr)
- usr << "You add new [item.singular_name] to the stack. It now contains [item.amount] [item.singular_name]\s."
+ usr << "You add new [item.singular_name] to the stack. It now contains [item.amount] [item.singular_name]\s."
if(oldsrc.amount <= 0)
break
oldsrc.update_icon()
diff --git a/code/game/objects/items/stacks/tiles/tile_types.dm b/code/game/objects/items/stacks/tiles/tile_types.dm
index fd477f005ce..6d81c36bb2c 100644
--- a/code/game/objects/items/stacks/tiles/tile_types.dm
+++ b/code/game/objects/items/stacks/tiles/tile_types.dm
@@ -22,18 +22,18 @@
var/obj/item/weapon/weldingtool/WT = W
if(get_amount() < 4)
- user << "You need at least four tiles to do this."
+ user << "You need at least four tiles to do this!"
return
if(is_hot(WT) && !mineralType)
- user << "You can not reform this."
+ user << "You can not reform this!"
return
if(WT.remove_fuel(0,user))
if(mineralType == "plasma")
atmos_spawn_air(SPAWN_HEAT | SPAWN_TOXINS, 5)
- user.visible_message("[user.name] set the plasma tiles on fire!", \
+ user.visible_message("[user.name] sets the plasma tiles on fire!", \
"You set the plasma tiles on fire!")
qdel(src)
return
@@ -41,9 +41,9 @@
if (mineralType == "metal")
var/obj/item/stack/sheet/metal/new_item = new(user.loc)
new_item.add_to_stacks(user)
- user.visible_message("[user.name] shaped [src] into metal with the weldingtool.", \
+ user.visible_message("[user.name] shaped [src] into metal with the weldingtool.", \
"You shaped [src] into metal with the weldingtool.", \
- "You hear welding.")
+ "You hear welding.")
var/obj/item/stack/rods/R = src
src = null
var/replace = (user.get_inactive_hand()==R)
@@ -55,9 +55,9 @@
var/sheet_type = text2path("/obj/item/stack/sheet/mineral/[mineralType]")
var/obj/item/stack/sheet/mineral/new_item = new sheet_type(user.loc)
new_item.add_to_stacks(user)
- user.visible_message("[user.name] shaped [src] into a sheet with the weldingtool.", \
+ user.visible_message("[user.name] shaped [src] into a sheet with the weldingtool.", \
"You shaped [src] into a sheet with the weldingtool.", \
- "You hear welding.")
+ "You hear welding.")
var/obj/item/stack/rods/R = src
src = null
var/replace = (user.get_inactive_hand()==R)
diff --git a/code/game/objects/items/toys.dm b/code/game/objects/items/toys.dm
index 68a4b1935dd..07fe7a7defc 100644
--- a/code/game/objects/items/toys.dm
+++ b/code/game/objects/items/toys.dm
@@ -54,10 +54,10 @@
if(istype(O, /obj/item/weapon/reagent_containers/glass))
if(O.reagents)
if(O.reagents.total_volume < 1)
- user << "The [O] is empty."
+ user << "The [O] is empty."
else if(O.reagents.total_volume >= 1)
if(O.reagents.has_reagent("facid", 1))
- user << "The acid chews through the balloon!"
+ user << "The acid chews through the balloon!"
O.reagents.reaction(user)
qdel(src)
else
@@ -69,7 +69,7 @@
/obj/item/toy/balloon/throw_impact(atom/hit_atom)
if(src.reagents.total_volume >= 1)
- src.visible_message("\The [src] bursts!","You hear a pop and a splash.")
+ src.visible_message("\The [src] bursts!","You hear a pop and a splash.")
src.reagents.reaction(get_turf(hit_atom))
for(var/atom/A in get_turf(hit_atom))
src.reagents.reaction(A)
@@ -135,17 +135,17 @@
if (istype(A, /obj/item/toy/ammo/gun))
if (src.bullets >= 7)
- user << "It's already fully loaded!"
+ user << "It's already fully loaded!"
return 1
if (A.amount_left <= 0)
- user << "There are no more caps!"
+ user << "There are no more caps!"
return 1
if (A.amount_left < (7 - src.bullets))
src.bullets += A.amount_left
- user << text("You reload [] cap\s!", A.amount_left)
+ user << text("You reload [] cap\s.", A.amount_left)
A.amount_left = 0
else
- user << text("You reload [] cap\s!", 7 - src.bullets)
+ user << text("You reload [] cap\s.", 7 - src.bullets)
A.amount_left -= 7 - src.bullets
src.bullets = 7
A.update_icon()
@@ -156,7 +156,7 @@
if (flag)
return
if (!(istype(usr, /mob/living/carbon/human) || ticker) && ticker.mode.name != "monkey")
- usr << "You don't have the dexterity to do this!"
+ usr << "You don't have the dexterity to do this!"
return
src.add_fingerprint(user)
if (src.bullets < 1)
@@ -167,7 +167,7 @@
src.bullets--
user.visible_message("[user] fires [src] at [target]!", \
"You fire [src] at [target]!", \
- " You hear a gunshot.")
+ " You hear a gunshot!")
/obj/item/toy/ammo/gun
name = "capgun ammo"
@@ -227,11 +227,11 @@
..()
if(istype(W, /obj/item/toy/sword))
if(W == src)
- user << "You try to attach the end of the plastic sword to... itself. You're not very smart, are you?"
+ user << "You try to attach the end of the plastic sword to... itself. You're not very smart, are you?"
if(ishuman(user))
user.adjustBrainLoss(10)
else if((W.flags & NODROP) || (flags & NODROP))
- user << "\the [flags & NODROP ? src : W] is stuck to your hand, you can't attach it to \the [flags & NODROP ? W : src]!"
+ user << "\the [flags & NODROP ? src : W] is stuck to your hand, you can't attach it to \the [flags & NODROP ? W : src]!"
else
user << "You attach the ends of the two plastic swords, making a single double-bladed toy! You're fake-cool."
var/obj/item/weapon/twohanded/dualsaber/toy/newSaber = new /obj/item/weapon/twohanded/dualsaber/toy(user.loc)
@@ -320,7 +320,7 @@
attack_verb = list("attacked", "coloured")
var/colour = "#FF0000" //RGB
var/drawtype = "rune"
- var/list/graffiti = list("amyjon","face","matt","revolution","engie","guy","end","dwarf","uboa","body","cyka","arrow")
+ var/list/graffiti = list("amyjon","face","matt","revolution","engie","guy","end","dwarf","uboa","body","cyka","arrow","poseur tag")
var/list/letters = list("a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z")
var/list/oriented = list("arrow","body") // These turn to face the same way as the drawer
var/uses = 30 //0 for unlimited uses
@@ -399,6 +399,11 @@
/obj/item/toy/crayon/afterattack(atom/target, mob/user as mob, proximity)
if(!proximity) return
+ if(!uses)
+ user << "There is no more of [src.name] left!"
+ if(!instant)
+ qdel(src)
+ return
if(istype(target, /obj/effect/decal/cleanable))
target = target.loc
if(is_type_in_list(target,validSurfaces))
@@ -412,23 +417,34 @@
var/area/territory
var/gangID
if(gang)
- //Check area validity. Reject space, player-created areas, and non-station z-levels.
- territory = get_area(target)
- if (territory && (territory.z == ZLEVEL_STATION) && territory.valid_territory)
- //Determine gang affiliation
- if((user.mind in ticker.mode.A_bosses) || (user.mind in ticker.mode.A_gang))
- temp = "[gang_name("A")] gang tag"
- gangID = "A"
- else if((user.mind in ticker.mode.B_bosses) || (user.mind in ticker.mode.B_gang))
- temp = "[gang_name("B")] gang tag"
- gangID = "B"
+ //Determine gang affiliation
+ if(user.mind in (ticker.mode.A_bosses | ticker.mode.A_gang))
+ temp = "[gang_name("A")] gang tag"
+ gangID = "A"
+ else if(user.mind in (ticker.mode.B_bosses | ticker.mode.B_gang))
+ temp = "[gang_name("B")] gang tag"
+ gangID = "B"
- //Check if this area is already tagged by a gang
- if(!(locate(/obj/effect/decal/cleanable/crayon/gang) in target)) //Ignore the check if the tile being sprayed has a gang tag
- if(territory_claimed(territory, user))
+ //Check area validity. Reject space, player-created areas, and non-station z-levels.
+ if (gangID)
+ var/area/user_area = get_area(user.loc)
+ territory = get_area(target)
+ if(territory && (territory.z == ZLEVEL_STATION) && territory.valid_territory)
+ //Check if this area is already tagged by a gang
+ if(!(locate(/obj/effect/decal/cleanable/crayon/gang) in target)) //Ignore the check if the tile being sprayed has a gang tag
+ if(territory_claimed(territory, user))
+ return
+ //Prevent people spraying from outside of the territory (ie. Maint walls)
+ if(istype(user_area) && (user_area.type == territory.type))
+ if(locate(/obj/machinery/power/apc) in (user.loc.contents | target.contents))
+ user << "You cannot tag here."
+ return
+ else
+ user << "You cannot tag [territory] from the outside."
return
- else
- user << "This area is unsuitable for territory tagging."
+ else
+ user << "[territory] is unsuitable for tagging."
+ return
/////////////////////////////////////////
var/graf_rot
@@ -443,7 +459,7 @@
else
graf_rot = 0
- user << "You start [instant ? "spraying" : "drawing"] a [temp] on the [target.name]."
+ user << "You start [instant ? "spraying" : "drawing"] a [temp] on the [target.name]..."
if(instant)
playsound(user.loc, 'sound/effects/spray.ogg', 5, 1, 5)
if((instant>0) || do_after(user, 50))
@@ -457,17 +473,18 @@
for(var/obj/effect/decal/cleanable/crayon/old_marking in target)
qdel(old_marking)
new /obj/effect/decal/cleanable/crayon/gang(target,gangID,temp,graf_rot)
+ user << "You tagged [territory] for your gang!"
else
new /obj/effect/decal/cleanable/crayon(target,colour,drawtype,temp,graf_rot)
- user << "You finish [instant ? "spraying" : "drawing"] [temp]."
+ user << "You finish [instant ? "spraying" : "drawing"] [temp]."
if(instant<0)
playsound(user.loc, 'sound/effects/spray.ogg', 5, 1, 5)
- if(uses)
- uses--
- if(!uses)
- user << "You used up your [src.name]!"
+ uses = max(0,uses-1)
+ if(!uses)
+ user << "There is no more of [src.name] left!"
+ if(!instant)
qdel(src)
return
@@ -475,19 +492,18 @@
if(edible && (M == user))
user << "You take a bite of the [src.name]. Delicious!"
user.nutrition += 5
- if(uses)
- uses -= 5
- if(uses <= 0)
- user << "There is no more of [src.name] left!"
- qdel(src)
+ uses = max(0,uses-5)
+ if(!uses)
+ user << "There is no more of [src.name] left!"
+ qdel(src)
else
..()
/obj/item/toy/crayon/proc/territory_claimed(var/area/territory,mob/user)
var/occupying_gang
- if(territory.type in ticker.mode.A_territory)
+ if(territory.type in (ticker.mode.A_territory | ticker.mode.A_territory_new))
occupying_gang = gang_name("A")
- if(territory.type in ticker.mode.B_territory)
+ if(territory.type in (ticker.mode.B_territory | ticker.mode.B_territory_new))
occupying_gang = gang_name("B")
if(occupying_gang)
user << "[territory] has already been tagged by the [occupying_gang] gang! You must get rid of or spray over the old tag first!"
@@ -511,7 +527,7 @@
s.set_up(3, 1, src)
s.start()
new /obj/effect/decal/cleanable/ash(src.loc)
- src.visible_message(" The [src.name] explodes!"," You hear a snap!")
+ src.visible_message(" The [src.name] explodes!","You hear a snap!")
playsound(src, 'sound/effects/snap.ogg', 50, 1)
qdel(src)
@@ -525,7 +541,7 @@
s.set_up(2, 0, src)
s.start()
new /obj/effect/decal/cleanable/ash(src.loc)
- src.visible_message("The [src.name] explodes!","You hear a snap!")
+ src.visible_message("The [src.name] explodes!","You hear a snap!")
playsound(src, 'sound/effects/snap.ogg', 50, 1)
qdel(src)
@@ -744,7 +760,7 @@ obj/item/toy/cards/deck/attack_hand(mob/user as mob)
var/choice = null
if(cards.len == 0)
src.icon_state = "deck_[deckstyle]_empty"
- user << "There are no more cards to draw."
+ user << "There are no more cards to draw!"
return
var/obj/item/toy/cards/singlecard/H = new/obj/item/toy/cards/singlecard(user.loc)
choice = cards[1]
@@ -755,7 +771,7 @@ obj/item/toy/cards/deck/attack_hand(mob/user as mob)
src.cards -= choice
H.pickup(user)
user.put_in_active_hand(H)
- user.visible_message("[user] draws a card from the deck.", "You draw a card from the deck.")
+ user.visible_message("[user] draws a card from the deck.", "You draw a card from the deck.")
if(cards.len > 26)
src.icon_state = "deck_[deckstyle]_full"
else if(cards.len > 10)
@@ -767,7 +783,7 @@ obj/item/toy/cards/deck/attack_self(mob/user as mob)
if(cooldown < world.time - 50)
cards = shuffle(cards)
playsound(user, 'sound/items/cardshuffle.ogg', 50, 1)
- user.visible_message("[user] shuffles the deck.", "You shuffle the deck.")
+ user.visible_message("[user] shuffles the deck.", "You shuffle the deck.")
cooldown = world.time
obj/item/toy/cards/deck/attackby(obj/item/toy/cards/singlecard/C, mob/living/user, params)
@@ -775,13 +791,13 @@ obj/item/toy/cards/deck/attackby(obj/item/toy/cards/singlecard/C, mob/living/use
if(istype(C))
if(C.parentdeck == src)
if(!user.unEquip(C))
- user << "The card is stuck to your hand, you can't add it to the deck!"
+ user << "The card is stuck to your hand, you can't add it to the deck!"
return
src.cards += C.cardname
- user.visible_message("[user] adds a card to the bottom of the deck.","You add the card to the bottom of the deck.")
+ user.visible_message("[user] adds a card to the bottom of the deck.","You add the card to the bottom of the deck.")
qdel(C)
else
- user << "You can't mix cards from other decks."
+ user << "You can't mix cards from other decks!"
if(cards.len > 26)
src.icon_state = "deck_[deckstyle]_full"
else if(cards.len > 10)
@@ -795,13 +811,13 @@ obj/item/toy/cards/deck/attackby(obj/item/toy/cards/cardhand/C, mob/living/user,
if(istype(C))
if(C.parentdeck == src)
if(!user.unEquip(C))
- user << "The hand of cards is stuck to your hand, you can't add it to the deck!"
+ user << "The hand of cards is stuck to your hand, you can't add it to the deck!"
return
src.cards += C.currenthand
- user.visible_message("[user] puts their hand of cards in the deck.", "You put the hand of cards in the deck.")
+ user.visible_message("[user] puts their hand of cards in the deck.", "You put the hand of cards in the deck.")
qdel(C)
else
- user << "You can't mix cards from other decks."
+ user << "You can't mix cards from other decks!"
if(cards.len > 26)
src.icon_state = "deck_[deckstyle]_full"
else if(cards.len > 10)
@@ -826,7 +842,7 @@ obj/item/toy/cards/deck/attackby(obj/item/toy/cards/cardhand/C, mob/living/user,
M.put_in_r_hand(src)
usr << "You pick up the deck."
else
- usr << "You can't reach it from here."
+ usr << "You can't reach it from here!"
@@ -899,7 +915,7 @@ obj/item/toy/cards/cardhand/attackby(obj/item/toy/cards/singlecard/C, mob/living
if(C.parentdeck == src.parentdeck)
src.currenthand += C.cardname
user.unEquip(C)
- user.visible_message("[user] adds a card to their hand.", "You add the [C.cardname] to your hand.")
+ user.visible_message("[user] adds a card to their hand.", "You add the [C.cardname] to your hand.")
interact(user)
if(currenthand.len > 4)
src.icon_state = "[deckstyle]_hand5"
@@ -909,7 +925,7 @@ obj/item/toy/cards/cardhand/attackby(obj/item/toy/cards/singlecard/C, mob/living
src.icon_state = "[deckstyle]_hand3"
qdel(C)
else
- user << "You can't mix cards from other decks."
+ user << "You can't mix cards from other decks!"
obj/item/toy/cards/cardhand/apply_card_vars(obj/item/toy/cards/newobj,obj/item/toy/cards/sourceobj)
..()
@@ -938,9 +954,9 @@ obj/item/toy/cards/singlecard/examine(mob/user)
if(ishuman(user))
var/mob/living/carbon/human/cardUser = user
if(cardUser.get_item_by_slot(slot_l_hand) == src || cardUser.get_item_by_slot(slot_r_hand) == src)
- cardUser.visible_message("[cardUser] checks \his card.", "The card reads: [src.cardname]")
+ cardUser.visible_message("[cardUser] checks \his card.", "The card reads: [src.cardname]")
else
- cardUser << "You need to have the card in your hand to check it."
+ cardUser << "You need to have the card in your hand to check it!"
obj/item/toy/cards/singlecard/verb/Flip()
@@ -980,14 +996,14 @@ obj/item/toy/cards/singlecard/attackby(obj/item/I, mob/living/user, params)
qdel(C)
qdel(src)
else
- user << "You can't mix cards from other decks."
+ user << "You can't mix cards from other decks!"
if(istype(I, /obj/item/toy/cards/cardhand/))
var/obj/item/toy/cards/cardhand/H = I
if(H.parentdeck == parentdeck)
H.currenthand += cardname
user.unEquip(src)
- user.visible_message("[user] adds a card to \his hand.", "You add the [cardname] to your hand.")
+ user.visible_message("[user] adds a card to \his hand.", "You add the [cardname] to your hand.")
H.interact(user)
if(H.currenthand.len > 4)
H.icon_state = "[deckstyle]_hand5"
@@ -997,7 +1013,7 @@ obj/item/toy/cards/singlecard/attackby(obj/item/I, mob/living/user, params)
H.icon_state = "[deckstyle]_hand3"
qdel(src)
else
- user << "You can't mix cards from other decks."
+ user << "You can't mix cards from other decks!"
obj/item/toy/cards/singlecard/attack_self(mob/user)
@@ -1053,7 +1069,7 @@ obj/item/toy/cards/deck/syndicate
/obj/item/toy/nuke/attack_self(mob/user)
if (cooldown < world.time)
cooldown = world.time + 1800 //3 minutes
- user.visible_message("[user] presses a button on [src]", "You activate [src], it plays a loud noise!", "You hear the click of a button.")
+ user.visible_message("[user] presses a button on [src].", "You activate [src], it plays a loud noise!", "You hear the click of a button.")
spawn(5) //gia said so
icon_state = "nuketoy"
playsound(src, 'sound/machines/Alarm.ogg', 100, 0, surround = 0)
@@ -1071,7 +1087,7 @@ obj/item/toy/cards/deck/syndicate
/obj/item/toy/minimeteor
name = "\improper Mini-Meteor"
- desc = "Relive the excitement of a meteor shower! SweetMeat-eor. Co is not responsible for any injuries, headaches or hearing loss caused by Mini-Meteor™"
+ desc = "Relive the excitement of a meteor shower! SweetMeat-eor. Co is not responsible for any injuries, headaches or hearing loss caused by Mini-Meteor?"
icon = 'icons/obj/toy.dmi'
icon_state = "minimeteor"
w_class = 2.0
@@ -1112,7 +1128,7 @@ obj/item/toy/cards/deck/syndicate
*/
/obj/item/toy/redbutton
name = "big red button"
- desc = "A big, plastic red button. Reads 'From HonkCo Pranks©' on the back."
+ desc = "A big, plastic red button. Reads 'From HonkCo Pranks?' on the back."
icon = 'icons/obj/assemblies.dmi'
icon_state = "bigred"
w_class = 2.0
@@ -1121,7 +1137,7 @@ obj/item/toy/cards/deck/syndicate
/obj/item/toy/redbutton/attack_self(mob/user)
if (cooldown < world.time)
cooldown = (world.time + 300) // Sets cooldown at 30 seconds
- user.visible_message("[user] presses the big red button.", "You press the button, it plays a loud noise!", "The button clicks loudly.")
+ user.visible_message("[user] presses the big red button.", "You press the button, it plays a loud noise!", "The button clicks loudly.")
playsound(src, 'sound/effects/explosionfar.ogg', 50, 0, surround = 0)
for(var/mob/M in range(10, src)) // Checks range
if(!M.stat && !istype(M, /mob/living/silicon/ai)) // Checks to make sure whoever's getting shaken is alive/not the AI
@@ -1129,4 +1145,4 @@ obj/item/toy/cards/deck/syndicate
shake_camera(M, 2, 1) // Shakes player camera 2 squares for 1 second.
else
- user << "Nothing happens."
\ No newline at end of file
+ user << "Nothing happens."
diff --git a/code/game/objects/items/weapons/AI_modules.dm b/code/game/objects/items/weapons/AI_modules.dm
index 57f667ac382..deef2e3e927 100644
--- a/code/game/objects/items/weapons/AI_modules.dm
+++ b/code/game/objects/items/weapons/AI_modules.dm
@@ -59,7 +59,7 @@ AI MODULES
//The proc that actually changes the silicon's laws.
/obj/item/weapon/aiModule/proc/transmitInstructions(var/mob/living/silicon/target, var/mob/sender)
- target << "[sender] has uploaded a change to the laws you must follow using a [name]. From now on, these are your laws: "
+ target << "[sender] has uploaded a change to the laws you must follow using a [name]. From now on, these are your laws: "
/******************** Modules ********************/
diff --git a/code/game/objects/items/weapons/RCD.dm b/code/game/objects/items/weapons/RCD.dm
index e76181e672a..b04cbfa5467 100644
--- a/code/game/objects/items/weapons/RCD.dm
+++ b/code/game/objects/items/weapons/RCD.dm
@@ -110,7 +110,7 @@ RCD
if(istype(W, /obj/item/weapon/rcd_ammo))
var/obj/item/weapon/rcd_ammo/R = W
if((matter + R.ammoamt) > max_matter)
- user << "The RCD cant hold any more matter-units."
+ user << "The RCD can't hold any more matter-units!"
return
user.drop_item()
qdel(W)
@@ -127,19 +127,19 @@ RCD
switch(mode)
if(1)
mode = 2
- user << "Changed mode to 'Airlock'"
+ user << "You change RCD's mode to 'Airlock'."
if(prob(20))
src.spark_system.start()
return
if(2)
mode = 3
- user << "Changed mode to 'Deconstruct'"
+ user << "You change RCD's mode to 'Deconstruct'."
if(prob(20))
src.spark_system.start()
return
if(3)
mode = 1
- user << "Changed mode to 'Floor & Walls'"
+ user << "You change RCD's mode to 'Floor & Walls'."
if(prob(20))
src.spark_system.start()
return
@@ -161,7 +161,7 @@ RCD
if(1)
if(istype(A, /turf/space))
if(useResource(1, user))
- user << "Building Floor..."
+ user << "You start building floor..."
activate()
A:ChangeTurf(/turf/simulated/floor/plating)
return 1
@@ -169,7 +169,7 @@ RCD
if(istype(A, /turf/simulated/floor))
if(checkResource(3, user))
- user << "Building Wall ..."
+ user << "You start building wall..."
playsound(src.loc, 'sound/machines/click.ogg', 50, 1)
if(do_after(user, 20))
if(!useResource(3, user)) return 0
@@ -188,7 +188,7 @@ RCD
break
if(door_check)
- user << "Building Airlock..."
+ user << "You start building airlock..."
playsound(src.loc, 'sound/machines/click.ogg', 50, 1)
if(do_after(user, 50))
if(!useResource(10, user)) return 0
@@ -202,7 +202,7 @@ RCD
return 1
return 0
else
- user << "There is another door here!"
+ user << "There is another door here!"
return 0
return 0
@@ -211,7 +211,7 @@ RCD
if(istype(A, /turf/simulated/wall/r_wall) && !canRwall)
return 0
if(checkResource(5, user))
- user << "Deconstructing Wall..."
+ user << "You start deconstructing wall..."
playsound(src.loc, 'sound/machines/click.ogg', 50, 1)
if(do_after(user, 40))
if(!useResource(5, user)) return 0
@@ -222,7 +222,7 @@ RCD
if(istype(A, /turf/simulated/floor))
if(checkResource(5, user))
- user << "Deconstructing Floor..."
+ user << "You start deconstructing floor..."
playsound(src.loc, 'sound/machines/click.ogg', 50, 1)
if(do_after(user, 50))
if(!useResource(5, user)) return 0
@@ -233,7 +233,7 @@ RCD
if(istype(A, /obj/machinery/door/airlock))
if(checkResource(20, user))
- user << "Deconstructing Airlock..."
+ user << "You start deconstructing airlock..."
playsound(src.loc, 'sound/machines/click.ogg', 50, 1)
if(do_after(user, 50))
if(!useResource(20, user)) return 0
diff --git a/code/game/objects/items/weapons/RPD.dm b/code/game/objects/items/weapons/RPD.dm
index 64185d5d5a0..360e473ab26 100644
--- a/code/game/objects/items/weapons/RPD.dm
+++ b/code/game/objects/items/weapons/RPD.dm
@@ -17,8 +17,12 @@ RPD
#define METER_MODE 1
#define DISPOSALS_MODE 2
+#define CATEGORY_ATMOS 0
+#define CATEGORY_DISPOSALS 1
+
/datum/pipe_info
var/id=-1
+ var/categoryId = CATEGORY_ATMOS
var/dir=SOUTH
var/dirtype=PIPE_BINARY
var/icon = 'icons/obj/pipe-item.dmi'
@@ -59,6 +63,7 @@ var/global/list/disposalpipeID2State=list(
)
/datum/pipe_info/disposal
+ categoryId = CATEGORY_DISPOSALS
icon = 'icons/obj/pipes/disposal.dmi'
icon_state = "meterX"
@@ -152,6 +157,7 @@ var/global/list/RPD_recipes=list(
"purple" = rgb(130,43,255)
)
var/paint_color="grey"
+ var/screen = CATEGORY_ATMOS //Starts on the atmos tab.
/obj/item/weapon/pipe_dispenser/New()
. = ..()
@@ -163,34 +169,57 @@ var/global/list/RPD_recipes=list(
show_menu(user)
/obj/item/weapon/pipe_dispenser/proc/render_dir_img(var/_dir,var/pic,var/title,var/flipped=0)
- var/selected=""
+ var/selected=" class=\"imglink\""
if(_dir == p_dir)
- selected=" class=\"selected\""
- return ""
+ selected=" class=\"imglink selected\""
+ return "
"
/obj/item/weapon/pipe_dispenser/proc/show_menu(mob/user as mob)
if(!user || !src) return 0
var/dat = {"
Type
Utilities:
-
-
"}
+"}
+ if(p_class != EATING_MODE)
+ dat += "
"
+
+ dat += "Category:"
+ if(screen == CATEGORY_ATMOS)
+ dat += "Atmospherics Disposals
"
+
var/icon/preview=null
+ var/datbuild = ""
for(var/category in RPD_recipes)
- dat += "[category]:
"
+ else if(screen == CATEGORY_DISPOSALS)
+ dat += "Atmospherics Disposals
"
+ dat += ""
var/list/cat=RPD_recipes[category]
for(var/label in cat)
var/datum/pipe_info/I = cat[label]
var/found=0
if(I.id == p_type)
- if(p_class==ATMOS_MODE && I.type==/datum/pipe_info)
+ if((p_class == ATMOS_MODE || p_class == METER_MODE) && (I.type == /datum/pipe_info || I.type == /datum/pipe_info/meter))
found=1
- else if(p_class==DISPOSALS_MODE && I.type==/datum/pipe_info/disposal)
+ else if(p_class == DISPOSALS_MODE && I.type==/datum/pipe_info/disposal)
found=1
if(found)
preview=new /icon(I.icon,I.icon_state)
- dat += I.Render(src,label)
+ if(screen == I.categoryId)
+ if(I.id == p_type)
+ datbuild += "[label]"
+ else
+ datbuild += I.Render(src,label)
+
+ if(length(datbuild) > 0)
+ dat += "[category]:
"
+ dat += datbuild
+ datbuild = ""
dat += "
"
var/color_css=""
@@ -217,7 +246,9 @@ var/global/list/RPD_recipes=list(
switch(p_conntype)
if(-1)
if(p_class==PAINT_MODE)
- dirsel = "Direction
[color_picker]"
+ dirsel = "Color
[color_picker]"
+ else
+ dirsel = ""
if(PIPE_BINARY) // Straight, N-S, W-E
if(preview)
@@ -359,47 +390,52 @@ var/global/list/RPD_recipes=list(
| [nicename] |
| [gang_name("A")] Gang: [round((ticker.mode.A_territory.len/start_state.num_territories)*100, 0.1)]% Station Control |
| [gang_name("A")] Gang: [(ticker.mode.gang_points ? "[ticker.mode.gang_points.A] Influence, " : "")][round((ticker.mode.A_territory.len/start_state.num_territories)*100, 1)]% Control |
| [gang_name("B")] Gang: [round((ticker.mode.B_territory.len/start_state.num_territories)*100, 0.1)]% Station Control |
| [gang_name("B")] Gang: [(ticker.mode.gang_points ? "[ticker.mode.gang_points.B] Influence, " : "")][round((ticker.mode.B_territory.len/start_state.num_territories)*100, 1)]% Control | " + dat += " | "
dat += " [underwear] " dat += "Undershirt: [undershirt] " dat += "Socks: [socks] " - dat += "Backpack: [backbaglist[backbag]] " + dat += "Backpack: [backbaglist[backbag]] | "
if(pref_species.use_skintones)
- dat += "" + dat += " | "
dat += "Skin Tone" @@ -304,7 +317,7 @@ datum/preferences dat += "" //user << browse(dat, "window=preferences;size=560x560") - var/datum/browser/popup = new(user, "preferences", "Character Setup ", 640, 680)
+ var/datum/browser/popup = new(user, "preferences", "Character Setup ", 640, 750)
popup.set_content(dat)
popup.open(0)
@@ -752,6 +765,50 @@ datum/preferences
var/new_backbag = input(user, "Choose your character's style of bag:", "Character Preference") as null|anything in backbaglist
if(new_backbag)
backbag = backbaglist.Find(new_backbag)
+
+ if("clown_name")
+ var/new_clown_name = reject_bad_name( input(user, "Choose your character's clown name:", "Character Preference") as text|null )
+ if(new_clown_name)
+ custom_names["clown"] = new_clown_name
+ else
+ user << "Invalid name. Your name should be at least 2 and at most [MAX_NAME_LEN] characters long. It may only contain the characters A-Z, a-z, -, ' and ."
+
+ if("mime_name")
+ var/new_mime_name = reject_bad_name( input(user, "Choose your character's mime name:", "Character Preference") as text|null )
+ if(new_mime_name)
+ custom_names["mime"] = new_mime_name
+ else
+ user << "Invalid name. Your name should be at least 2 and at most [MAX_NAME_LEN] characters long. It may only contain the characters A-Z, a-z, -, ' and ."
+
+ if("ai_name")
+ var/new_ai_name = reject_bad_name( input(user, "Choose your character's AI name:", "Character Preference") as text|null, 1 )
+ if(new_ai_name)
+ custom_names["ai"] = new_ai_name
+ else
+ user << "Invalid name. Your name should be at least 2 and at most [MAX_NAME_LEN] characters long. It may only contain the characters A-Z, a-z, 0-9, -, ' and ."
+
+ if("cyborg_name")
+ var/new_cyborg_name = reject_bad_name( input(user, "Choose your character's cyborg name:", "Character Preference") as text|null, 1 )
+ if(new_cyborg_name)
+ custom_names["cyborg"] = new_cyborg_name
+ else
+ user << "Invalid name. Your name should be at least 2 and at most [MAX_NAME_LEN] characters long. It may only contain the characters A-Z, a-z, 0-9, -, ' and ."
+
+ if("religion_name")
+ var/new_religion_name = reject_bad_name( input(user, "Choose your character's mime name:", "Character Preference") as text|null )
+ if(new_religion_name)
+ custom_names["religion"] = new_religion_name
+ else
+ user << "Invalid name. Your name should be at least 2 and at most [MAX_NAME_LEN] characters long. It may only contain the characters A-Z, a-z, -, ' and ."
+
+ if("deity_name")
+ var/new_deity_name = reject_bad_name( input(user, "Choose your character's mime name:", "Character Preference") as text|null )
+ if(new_deity_name)
+ custom_names["deity"] = new_deity_name
+ else
+ user << "Invalid name. Your name should be at least 2 and at most [MAX_NAME_LEN] characters long. It may only contain the characters A-Z, a-z, -, ' and ."
+
+
else
switch(href_list["preference"])
if("publicity")
diff --git a/code/modules/client/preferences_savefile.dm b/code/modules/client/preferences_savefile.dm
index 604bbd57069..f2da84ddd52 100644
--- a/code/modules/client/preferences_savefile.dm
+++ b/code/modules/client/preferences_savefile.dm
@@ -187,6 +187,12 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
S["socks"] >> socks
S["backbag"] >> backbag
S["mutant_color"] >> mutant_color
+ S["clown_name"] >> custom_names["clown"]
+ S["mime_name"] >> custom_names["mime"]
+ S["ai_name"] >> custom_names["ai"]
+ S["cyborg_name"] >> custom_names["cyborg"]
+ S["religion_name"] >> custom_names["religion"]
+ S["deity_name"] >> custom_names["deity"]
//Jobs
S["userandomjob"] >> userandomjob
@@ -274,6 +280,12 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
S["backbag"] << backbag
S["species"] << pref_species.name
S["mutant_color"] << mutant_color
+ S["clown_name"] << custom_names["clown"]
+ S["mime_name"] << custom_names["mime"]
+ S["ai_name"] << custom_names["ai"]
+ S["cyborg_name"] << custom_names["cyborg"]
+ S["religion_name"] << custom_names["religion"]
+ S["deity_name"] << custom_names["deity"]
//Jobs
S["userandomjob"] << userandomjob
diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm
index b8391bd840a..c64c25d5302 100644
--- a/code/modules/clothing/clothing.dm
+++ b/code/modules/clothing/clothing.dm
@@ -113,12 +113,12 @@ BLIND // can't see anything
permeability_coefficient = initial(permeability_coefficient)
flags |= visor_flags
flags_inv |= visor_flags_inv
- user << "You push \the [src] back into place."
+ user << "You push \the [src] back into place."
src.mask_adjusted = 0
slot_flags = initial(slot_flags)
else
src.icon_state += "_up"
- user << "You push \the [src] out of the way."
+ user << "You push \the [src] out of the way."
gas_transfer_coefficient = null
permeability_coefficient = null
flags &= ~visor_flags
@@ -293,20 +293,20 @@ atom/proc/generate_female_clothing(index,t_color,icon,type)
var/list/modes = list("Off", "Binary vitals", "Exact vitals", "Tracking beacon")
var/switchMode = input("Select a sensor mode:", "Suit Sensor Mode", modes[sensor_mode + 1]) in modes
if(get_dist(usr, src) > 1)
- usr << "You have moved too far away."
+ usr << "You have moved too far away!"
return
sensor_mode = modes.Find(switchMode) - 1
if (src.loc == usr)
switch(sensor_mode)
if(0)
- usr << "You disable your suit's remote sensing equipment."
+ usr << "You disable your suit's remote sensing equipment."
if(1)
- usr << "Your suit will now only report whether you are alive or dead."
+ usr << "Your suit will now only report whether you are alive or dead."
if(2)
- usr << "Your suit will now only report your exact vital lifesigns."
+ usr << "Your suit will now only report your exact vital lifesigns."
if(3)
- usr << "Your suit will now report your exact vital lifesigns as well as your coordinate position."
+ usr << "Your suit will now report your exact vital lifesigns as well as your coordinate position."
if(istype(loc,/mob/living/carbon/human))
var/mob/living/carbon/human/H = loc
@@ -329,19 +329,19 @@ atom/proc/generate_female_clothing(index,t_color,icon,type)
if(!can_use(usr))
return
if(!can_adjust)
- usr << "You cannot wear this suit any differently."
+ usr << "You cannot wear this suit any differently!"
return
if(src.adjusted == 1)
src.fitted = initial(fitted)
src.item_color = initial(item_color)
src.item_color = src.suit_color //colored jumpsuits are shit and break without this
- usr << "You adjust the suit back to normal."
+ usr << "You adjust the suit back to normal."
src.adjusted = 0
else
if(src.fitted != FEMALE_UNIFORM_TOP)
src.fitted = NO_FEMALE_UNIFORM
src.item_color += "_d"
- usr << "You adjust the suit to wear it more casually."
+ usr << "You adjust the suit to wear it more casually."
src.adjusted = 1
usr.update_inv_w_uniform()
..()
@@ -388,7 +388,7 @@ atom/proc/generate_female_clothing(index,t_color,icon,type)
flags |= (visor_flags)
flags_inv |= (visor_flags_inv)
icon_state = initial(icon_state)
- usr << "You pull \the [src] down."
+ usr << "You pull \the [src] down."
flash_protect = initial(flash_protect)
tint = initial(tint)
else
@@ -396,7 +396,7 @@ atom/proc/generate_female_clothing(index,t_color,icon,type)
flags &= ~(visor_flags)
flags_inv &= ~(visor_flags_inv)
icon_state = "[initial(icon_state)]up"
- usr << "You push \the [src] up."
+ usr << "You push \the [src] up."
flash_protect = 0
tint = 0
diff --git a/code/modules/clothing/head/hardhat.dm b/code/modules/clothing/head/hardhat.dm
index e712565dc77..e1d1e53e8b8 100644
--- a/code/modules/clothing/head/hardhat.dm
+++ b/code/modules/clothing/head/hardhat.dm
@@ -12,7 +12,7 @@
attack_self(mob/user)
if(!isturf(user.loc))
- user << "You cannot turn the light on while in this [user.loc]" //To prevent some lighting anomalities.
+ user << "You cannot turn the light on while in this [user.loc]!" //To prevent some lighting anomalities.
return
on = !on
icon_state = "hardhat[on]_[item_color]"
diff --git a/code/modules/clothing/head/helmet.dm b/code/modules/clothing/head/helmet.dm
index 4fbd2b6b832..cc4c13cfa43 100644
--- a/code/modules/clothing/head/helmet.dm
+++ b/code/modules/clothing/head/helmet.dm
@@ -235,14 +235,14 @@ obj/item/clothing/head/helmet/bluetaghelm
helmetCam.c_tag = "Helmet-Mounted Camera (No User)([rand(1,999)])"
helmetCam.network = list("SS13")
update_icon()
- user.visible_message("[user] attaches [A] to [src]","You attach [A] to [src]")
+ user.visible_message("[user] attaches [A] to [src].","You attach [A] to [src].")
return
if(istype(A, /obj/item/weapon/crowbar))
if(!helmetCam)
..()
return
- user.visible_message("[user] removes [helmetCam] from [src]","You remove [helmetCam] from [src]")
+ user.visible_message("[user] removes [helmetCam] from [src].","You remove [helmetCam] from [src].")
helmetCam.assembly.loc = get_turf(src)
helmetCam.assembly = null
qdel(helmetCam)
@@ -263,7 +263,7 @@ obj/item/clothing/head/helmet/bluetaghelm
var/mob/living/carbon/human/user = usr
if(!isturf(user.loc))
- user << "You cannot turn the light on while in this [user.loc]."
+ user << "You cannot turn the light on while in this [user.loc]!"
F.on = !F.on
user << "You toggle the helmetlight [F.on ? "on":"off"]."
diff --git a/code/modules/clothing/head/misc_special.dm b/code/modules/clothing/head/misc_special.dm
index f5a8ac28885..6eee2eaf8a0 100644
--- a/code/modules/clothing/head/misc_special.dm
+++ b/code/modules/clothing/head/misc_special.dm
@@ -100,12 +100,12 @@
src.icon_state = "ushankaup"
src.item_state = "ushankaup"
earflaps = 0
- user << "You raise the ear flaps on the ushanka."
+ user << "You raise the ear flaps on the ushanka."
else
src.icon_state = "ushankadown"
src.item_state = "ushankadown"
earflaps = 1
- user << "You lower the ear flaps on the ushanka."
+ user << "You lower the ear flaps on the ushanka."
/*
* Pumpkin head
diff --git a/code/modules/clothing/head/soft_caps.dm b/code/modules/clothing/head/soft_caps.dm
index 02fc5c460f7..96c5f55cedd 100644
--- a/code/modules/clothing/head/soft_caps.dm
+++ b/code/modules/clothing/head/soft_caps.dm
@@ -27,10 +27,10 @@
src.flipped = !src.flipped
if(src.flipped)
icon_state = "[item_color]soft_flipped"
- user << "You flip the hat backwards."
+ user << "You flip the hat backwards."
else
icon_state = "[item_color]soft"
- user << "You flip the hat back in normal position."
+ user << "You flip the hat back in normal position."
usr.update_inv_head(0) //so our mob-overlays update
/obj/item/clothing/head/soft/examine(mob/user)
diff --git a/code/modules/clothing/masks/miscellaneous.dm b/code/modules/clothing/masks/miscellaneous.dm
index 4ce903e2bf8..dc9c31861c7 100644
--- a/code/modules/clothing/masks/miscellaneous.dm
+++ b/code/modules/clothing/masks/miscellaneous.dm
@@ -12,7 +12,7 @@
if(iscarbon(user))
var/mob/living/carbon/C = user
if(src == C.wear_mask)
- user << "You need help taking this off!"
+ user << "You need help taking this off!"
return
..()
diff --git a/code/modules/clothing/shoes/bananashoes.dm b/code/modules/clothing/shoes/bananashoes.dm
index ee256e42595..f1da928afff 100644
--- a/code/modules/clothing/shoes/bananashoes.dm
+++ b/code/modules/clothing/shoes/bananashoes.dm
@@ -21,7 +21,7 @@
if(bananium < 100)
on = !on
update_icon()
- usr << "You ran out of bananium!"
+ usr << "You ran out of bananium!"
else
..()
@@ -49,9 +49,9 @@
if(bananium > 0)
on = !on
update_icon()
- usr << "You [on ? "activate" : "deactivate"] the prototype shoes."
+ usr << "You [on ? "activate" : "deactivate"] the prototype shoes."
else
- usr << "You need bananium to turn the prototype shoes on."
+ usr << "You need bananium to turn the prototype shoes on!"
/obj/item/clothing/shoes/clown_shoes/banana_shoes/update_icon()
if(on)
diff --git a/code/modules/clothing/shoes/colour.dm b/code/modules/clothing/shoes/colour.dm
index e463f77fb68..1074159da7f 100644
--- a/code/modules/clothing/shoes/colour.dm
+++ b/code/modules/clothing/shoes/colour.dm
@@ -106,6 +106,6 @@
if(ishuman(user))
var/mob/living/carbon/human/C = user
if(C.shoes == src && src.chained == 1)
- user << "You need help taking these off!"
+ user << "You need help taking these off!"
return
..()
diff --git a/code/modules/clothing/shoes/magboots.dm b/code/modules/clothing/shoes/magboots.dm
index d7d2414ff68..8d742f983db 100644
--- a/code/modules/clothing/shoes/magboots.dm
+++ b/code/modules/clothing/shoes/magboots.dm
@@ -28,7 +28,7 @@
src.slowdown = slowdown_active
magpulse = !magpulse
icon_state = "[magboot_state][magpulse]"
- user << "You [magpulse ? "enable" : "disable"] the mag-pulse traction system."
+ user << "You [magpulse ? "enable" : "disable"] the mag-pulse traction system."
user.update_inv_shoes(0) //so our mob-overlays update
user.update_gravity(user.mob_has_gravity())
diff --git a/code/modules/clothing/shoes/miscellaneous.dm b/code/modules/clothing/shoes/miscellaneous.dm
index cd9c96ae388..3675ba81ded 100644
--- a/code/modules/clothing/shoes/miscellaneous.dm
+++ b/code/modules/clothing/shoes/miscellaneous.dm
@@ -1,7 +1,7 @@
/obj/item/clothing/shoes/proc/step_action() //this was made to rewrite clown shoes squeaking
-/obj/item/clothing/shoes/syndigaloshes
- desc = "A pair of brown shoes. They seem to have extra grip."
+/obj/item/clothing/shoes/sneakers/syndigaloshes
+ desc = "A pair of brown shoes."
name = "brown shoes"
icon_state = "brown"
item_state = "brown"
diff --git a/code/modules/clothing/spacesuits/chronosuit.dm b/code/modules/clothing/spacesuits/chronosuit.dm
index c59e0ef4c62..04679faa2c5 100644
--- a/code/modules/clothing/spacesuits/chronosuit.dm
+++ b/code/modules/clothing/spacesuits/chronosuit.dm
@@ -25,6 +25,7 @@
action_button_name = "Toggle Chronosuit"
slowdown = 2
armor = list(melee = 60, bullet = 60, laser = 60, energy = 60, bomb = 30, bio = 90, rad = 90)
+ var/list/chronosafe_items = list(/obj/item/weapon/chrono_eraser, /obj/item/weapon/gun/energy/chrono_gun)
var/obj/item/clothing/head/helmet/space/chronos/helmet = null
var/obj/effect/chronos_cam/camera = null
var/activating = 0
@@ -74,6 +75,13 @@
var/turf/to_turf = from_turf
var/atom/movable/overlay/phaseanim = new(from_turf)
var/obj/holder = new(camera)
+
+ var/list/nonsafe_slots = list(slot_belt, slot_back, slot_l_hand, slot_r_hand)
+ for(var/slot in nonsafe_slots)
+ var/obj/item/slot_item = user.get_item_by_slot(slot)
+ if(slot_item && !(slot_item.type in chronosafe_items) && user.unEquip(slot_item))
+ user << "Your [slot_item.name] got left behind."
+
phaseanim.name = "phasing [user.name]"
phaseanim.icon = 'icons/mob/mob.dmi'
phaseanim.icon_state = "chronostuck"
diff --git a/code/modules/clothing/spacesuits/hardsuit.dm b/code/modules/clothing/spacesuits/hardsuit.dm
index 5e019d89409..f178515a89b 100644
--- a/code/modules/clothing/spacesuits/hardsuit.dm
+++ b/code/modules/clothing/spacesuits/hardsuit.dm
@@ -14,7 +14,7 @@
/obj/item/clothing/head/helmet/space/hardsuit/attack_self(mob/user)
if(!isturf(user.loc))
- user << "You cannot turn the light on while in this [user.loc]" //To prevent some lighting anomalities.
+ user << "You cannot turn the light on while in this [user.loc]!" //To prevent some lighting anomalities.
return
on = !on
icon_state = "hardsuit[on]-[item_color]"
@@ -171,7 +171,7 @@
/obj/item/clothing/head/helmet/space/hardsuit/syndi/attack_self(mob/user) //Toggle Helmet
if(!isturf(user.loc))
- user << "You cannot toggle your helmet while in this [user.loc]" //To prevent some lighting anomalities.
+ user << "You cannot toggle your helmet while in this [user.loc]!" //To prevent some lighting anomalities.
return
on = !on
if(on || force)
diff --git a/code/modules/clothing/suits/jobs.dm b/code/modules/clothing/suits/jobs.dm
index b9ecf892582..512d464f7cb 100644
--- a/code/modules/clothing/suits/jobs.dm
+++ b/code/modules/clothing/suits/jobs.dm
@@ -60,7 +60,7 @@
gas_transfer_coefficient = 0.90
permeability_coefficient = 0.50
body_parts_covered = CHEST|GROIN|ARMS
- allowed = list(/obj/item/weapon/kitchenknife)
+ allowed = list(/obj/item/weapon/kitchen)
togglename = "sleeves"
//Cook
@@ -71,7 +71,7 @@
item_state = "apronchef"
blood_overlay_type = "armor"
body_parts_covered = CHEST|GROIN
- allowed = list(/obj/item/weapon/kitchenknife)
+ allowed = list(/obj/item/weapon/kitchen)
//Detective
/obj/item/clothing/suit/det_suit
diff --git a/code/modules/clothing/suits/toggles.dm b/code/modules/clothing/suits/toggles.dm
index b569f9b5fe6..470b6f6ebd4 100644
--- a/code/modules/clothing/suits/toggles.dm
+++ b/code/modules/clothing/suits/toggles.dm
@@ -38,10 +38,10 @@
if(ishuman(src.loc))
var/mob/living/carbon/human/H = src.loc
if(H.wear_suit != src)
- H << "You must be wearing [src] to put up the hood."
+ H << "You must be wearing [src] to put up the hood!"
return
if(H.head)
- H << "You're already wearing something on your head."
+ H << "You're already wearing something on your head!"
return
else
H.equip_to_slot_if_possible(hood,slot_head,0,0,1)
@@ -66,7 +66,7 @@
if(!can_use(usr))
return 0
- usr << "You toggle [src]'s [togglename]."
+ usr << "You toggle [src]'s [togglename]."
if(src.suittoggled)
src.icon_state = "[initial(icon_state)]"
src.suittoggled = 0
@@ -128,18 +128,18 @@
if(!suittoggled)
if(ishuman(src.loc))
if(H.wear_suit != src)
- H << "You must be wearing [src] to engage the helmet."
+ H << "You must be wearing [src] to engage the helmet!"
return
if(H.head)
- H << "You're already wearing something on your head."
+ H << "You're already wearing something on your head!"
return
else
- H << "You engage the helmet on the hardsuit."
+ H << "You engage the helmet on the hardsuit."
H.equip_to_slot_if_possible(helmet,slot_head,0,0,1)
suittoggled = 1
H.update_inv_wear_suit()
playsound(src.loc, 'sound/mecha/mechmove03.ogg', 50, 1)
else
- H << "You disengage the helmet on the hardsuit."
+ H << "You disengage the helmet on the hardsuit."
playsound(src.loc, 'sound/mecha/mechmove03.ogg', 50, 1)
RemoveHelmet()
diff --git a/code/modules/clothing/under/ties.dm b/code/modules/clothing/under/ties.dm
index 6c4d586d740..1dda5f2ebd2 100644
--- a/code/modules/clothing/under/ties.dm
+++ b/code/modules/clothing/under/ties.dm
@@ -100,10 +100,10 @@
if(user == M)
user << "You attach [src] to [U]."
else
- user.visible_message("[user] pins \the [src] on [M]'s chest.", \
+ user.visible_message("[user] pins \the [src] on [M]'s chest.", \
"You pin \the [src] on [M]'s chest.")
- else user << "Medals can only be pinned on jumpsuits."
+ else user << "Medals can only be pinned on jumpsuits!"
else ..()
/obj/item/clothing/tie/medal/conduct
diff --git a/code/modules/crafting/guncrafting.dm b/code/modules/crafting/guncrafting.dm
index 45d4d340ecd..ae95ef86a03 100644
--- a/code/modules/crafting/guncrafting.dm
+++ b/code/modules/crafting/guncrafting.dm
@@ -20,7 +20,7 @@
/obj/item/weaponcrafting/reciever/attackby(obj/item/W as obj, mob/user as mob, params)
if(istype(W,/obj/item/pipe))
- user << "You attach the shotgun barrel to the receiver. The pins seem loose."
+ user << "You attach the shotgun barrel to the receiver. The pins seem loose."
var/obj/item/weaponcrafting/ishotgunconstruction/I = new /obj/item/weaponcrafting/ishotgunconstruction
user.unEquip(src)
user.put_in_hands(I)
@@ -53,7 +53,7 @@
/obj/item/weaponcrafting/ishotgunconstruction2/attackby(obj/item/W as obj, mob/user as mob, params)
if(istype(W,/obj/item/weaponcrafting/stock))
- user << "You attach the stock to the receiver-barrel assembly."
+ user << "You attach the stock to the receiver-barrel assembly."
var/obj/item/weaponcrafting/ishotgunconstruction3/I = new /obj/item/weaponcrafting/ishotgunconstruction3
user.unEquip(src)
user.put_in_hands(I)
@@ -78,6 +78,6 @@
user << "You tie the wrapping paper around the stock and the barrel to secure it."
qdel(src)
else
- user << "You need at least five feet of wrapping paper to secure the stock."
+ user << "You need at least five feet of wrapping paper to secure the stock!"
return
diff --git a/code/modules/detectivework/evidence.dm b/code/modules/detectivework/evidence.dm
index d8f8b6aad65..b43f7077d9f 100644
--- a/code/modules/detectivework/evidence.dm
+++ b/code/modules/detectivework/evidence.dm
@@ -45,8 +45,8 @@
else
return
- user.visible_message("[user] puts [I] into [src].", "You put [I] inside [src].",\
- "You hear a rustle as someone puts something into a plastic bag.")
+ user.visible_message("[user] puts [I] into [src].", "You put [I] inside [src].",\
+ "You hear a rustle as someone puts something into a plastic bag.")
icon_state = "evidence"
@@ -68,8 +68,8 @@
/obj/item/weapon/evidencebag/attack_self(mob/user as mob)
if(contents.len)
var/obj/item/I = contents[1]
- user.visible_message("[user] takes [I] out of [src].", "You take [I] out of [src].",\
- "You hear someone rustle around in a plastic bag, and remove something.")
+ user.visible_message("[user] takes [I] out of [src].", "You take [I] out of [src].",\
+ "You hear someone rustle around in a plastic bag, and remove something.")
overlays.Cut() //remove the overlays
user.put_in_hands(I)
w_class = 1
diff --git a/code/modules/detectivework/footprints_and_rag.dm b/code/modules/detectivework/footprints_and_rag.dm
index a2d323e81d8..2e09166ae6e 100644
--- a/code/modules/detectivework/footprints_and_rag.dm
+++ b/code/modules/detectivework/footprints_and_rag.dm
@@ -21,7 +21,7 @@
/obj/item/weapon/reagent_containers/glass/rag/attack(atom/target as obj|turf|area, mob/user as mob , flag)
if(ismob(target) && target.reagents && reagents.total_volume)
- user.visible_message("[user] has smothered \the [target] with \the [src]!", "You smother \the [target] with \the [src]!", "You hear some struggling and muffled cries of surprise")
+ user.visible_message("[user] has smothered \the [target] with \the [src]!", "You smother \the [target] with \the [src]!", "You hear some struggling and muffled cries of surprise.")
src.reagents.reaction(target, TOUCH)
src.reagents.clear_reagents()
return
@@ -31,8 +31,8 @@
/obj/item/weapon/reagent_containers/glass/rag/afterattack(atom/A as obj|turf|area, mob/user as mob,proximity)
if(!proximity) return
if(istype(A) && src in user)
- user.visible_message("[user] starts to wipe down [A] with [src]!")
+ user.visible_message("[user] starts to wipe down [A] with [src]!", "You start to wipe down [A] with [src]...You finish wiping off the [A].")
A.clean_blood()
return
diff --git a/code/modules/detectivework/scanner.dm b/code/modules/detectivework/scanner.dm
index affb72d1381..5fbe0263949 100644
--- a/code/modules/detectivework/scanner.dm
+++ b/code/modules/detectivework/scanner.dm
@@ -151,7 +151,7 @@
if(!found_something)
add_log("# No forensic traces found #", 0) // Don't display this to the holder user
if(holder)
- holder << "Unable to locate any fingerprints, materials, fibers, or blood on \the [target_name]!"
+ holder << "Unable to locate any fingerprints, materials, fibers, or blood on \the [target_name]!"
else
if(holder)
holder << "You finish scanning \the [target_name]."
diff --git a/code/modules/events/holiday/xmas.dm b/code/modules/events/holiday/xmas.dm
index 3f40addebdf..03f8ea5051a 100644
--- a/code/modules/events/holiday/xmas.dm
+++ b/code/modules/events/holiday/xmas.dm
@@ -47,7 +47,7 @@
/obj/item/weapon/toy/xmas_cracker/attack(mob/target, mob/user)
if( !cracked && istype(target,/mob/living/carbon/human) && (target.stat == CONSCIOUS) && !target.get_active_hand() )
- target.visible_message("[user] and [target] pop \an [src]! *pop*", "You pull \an [src] with [target]! *pop*", "You hear a *pop*.")
+ target.visible_message("[user] and [target] pop \an [src]! *pop*", "You pull \an [src] with [target]! *pop*", "You hear a pop.")
var/obj/item/weapon/paper/Joke = new /obj/item/weapon/paper(user.loc)
Joke.name = "[pick("awful","terrible","unfunny")] joke"
Joke.info = pick("What did one snowman say to the other?\n\n'Is it me or can you smell carrots?'",
diff --git a/code/modules/events/spacevine.dm b/code/modules/events/spacevine.dm
index e4ec5e8fd5a..b3f8c13c50c 100644
--- a/code/modules/events/spacevine.dm
+++ b/code/modules/events/spacevine.dm
@@ -344,7 +344,8 @@
qdel(src)
/obj/effect/spacevine/attackby(obj/item/weapon/W as obj, mob/user as mob, params)
- if (!W || !user || !W.type) return
+ if (!W || !user || !W.type)
+ return
user.changeNext_move(CLICK_CD_MELEE)
var/override = 0
@@ -356,33 +357,22 @@
..()
return
- switch(W.type)
- if(/obj/item/weapon/circular_saw) qdel(src)
- if(/obj/item/weapon/kitchen/utensil/knife) qdel(src)
- if(/obj/item/weapon/scalpel) qdel(src)
- if(/obj/item/weapon/twohanded/fireaxe) qdel(src)
- if(/obj/item/weapon/hatchet) qdel(src)
- if(/obj/item/weapon/melee/energy) qdel(src)
- if(/obj/item/weapon/scythe)
- for(var/obj/effect/spacevine/B in orange(src,1))
- if(prob(80))
- qdel(B)
+ if(istype(W, /obj/item/weapon/scythe))
+ for(var/obj/effect/spacevine/B in orange(src,1))
+ if(prob(80))
+ qdel(B)
+ qdel(src)
+
+ else if(is_sharp(W))
+ qdel(src)
+
+ else if(istype(W, /obj/item/weapon/weldingtool))
+ var/obj/item/weapon/weldingtool/WT = W
+ if(WT.remove_fuel(0, user))
qdel(src)
-
- //less effective weapons
- if(/obj/item/weapon/wirecutters)
- if(prob(25)) qdel(src)
- if(/obj/item/weapon/shard)
- if(prob(25)) qdel(src)
-
- else //weapons with subtypes
- if(istype(W, /obj/item/weapon/melee/energy/sword)) qdel(src)
- else if(istype(W, /obj/item/weapon/weldingtool))
- var/obj/item/weapon/weldingtool/WT = W
- if(WT.remove_fuel(0, user)) qdel(src)
- else
- user_unbuckle_mob(user,user)
- return
+ else
+ user_unbuckle_mob(user,user)
+ return
//Plant-b-gone damage is handled in its entry in chemistry-reagents.dm
..()
diff --git a/code/modules/flufftext/Hallucination.dm b/code/modules/flufftext/Hallucination.dm
index 1327d56fac9..6ca06a27ee7 100644
--- a/code/modules/flufftext/Hallucination.dm
+++ b/code/modules/flufftext/Hallucination.dm
@@ -345,7 +345,7 @@ var/list/non_fakeattack_weapons = list(/obj/item/weapon/gun/projectile, /obj/ite
/obj/item/weapon/gun/energy/kinetic_accelerator/crossbow, /obj/item/weapon/melee/energy/sword/saber,\
/obj/item/weapon/storage/box/syndicate, /obj/item/weapon/storage/box/emps,\
/obj/item/weapon/cartridge/syndicate, /obj/item/clothing/under/chameleon,\
- /obj/item/clothing/shoes/syndigaloshes, /obj/item/weapon/card/id/syndicate,\
+ /obj/item/clothing/shoes/sneakers/syndigaloshes, /obj/item/weapon/card/id/syndicate,\
/obj/item/clothing/mask/gas/voice, /obj/item/clothing/glasses/thermal,\
/obj/item/device/chameleon, /obj/item/weapon/card/emag,\
/obj/item/weapon/storage/toolbox/syndicate, /obj/item/weapon/aiModule,\
diff --git a/code/modules/food&drinks/drinks/drinks.dm b/code/modules/food&drinks/drinks/drinks.dm
index 6888a4a9a04..6986e52d26a 100644
--- a/code/modules/food&drinks/drinks/drinks.dm
+++ b/code/modules/food&drinks/drinks/drinks.dm
@@ -224,7 +224,7 @@
/obj/item/weapon/reagent_containers/food/drinks/soda_cans/attack(mob/M, mob/user)
if(M == user && !src.reagents.total_volume && user.a_intent == "harm" && user.zone_sel.selecting == "head")
- user.visible_message("[user] crushes the can of [src] on \his forehead!", "You crush the can of [src] on your forehead!")
+ user.visible_message("[user] crushes the can of [src] on \his forehead!", "You crush the can of [src] on your forehead.")
playsound(user.loc,'sound/weapons/pierce.ogg', rand(10,50), 1)
var/obj/item/trash/can/crushed_can = new /obj/item/trash/can(user.loc)
crushed_can.icon_state = icon_state
diff --git a/code/modules/food&drinks/food/condiment.dm b/code/modules/food&drinks/food/condiment.dm
index 5f489ddaa49..bff39b0e262 100644
--- a/code/modules/food&drinks/food/condiment.dm
+++ b/code/modules/food&drinks/food/condiment.dm
@@ -69,11 +69,11 @@
if(istype(target, /obj/structure/reagent_dispensers)) //A dispenser. Transfer FROM it TO us.
if(!target.reagents.total_volume)
- user << "[target] is empty."
+ user << "[target] is empty!"
return
if(reagents.total_volume >= reagents.maximum_volume)
- user << "[src] is full."
+ user << "[src] is full!"
return
var/trans = target.reagents.trans_to(src, target:amount_per_transfer_from_this)
@@ -82,10 +82,10 @@
//Something like a glass or a food item. Player probably wants to transfer TO it.
else if(target.is_open_container() || istype(target, /obj/item/weapon/reagent_containers/food/snacks))
if(!reagents.total_volume)
- user << "[src] is empty."
+ user << "[src] is empty!"
return
if(target.reagents.total_volume >= target.reagents.maximum_volume)
- user << "you can't add anymore to [target]."
+ user << "you can't add anymore to [target]!"
return
var/trans = src.reagents.trans_to(target, amount_per_transfer_from_this)
user << "You transfer [trans] units of the condiment to [target]."
diff --git a/code/modules/food&drinks/food/customizables.dm b/code/modules/food&drinks/food/customizables.dm
index 7cc0ec3c7f0..3f6b7aba90f 100644
--- a/code/modules/food&drinks/food/customizables.dm
+++ b/code/modules/food&drinks/food/customizables.dm
@@ -40,9 +40,9 @@
if(istype(I,/obj/item/weapon/reagent_containers/food/snacks))
var/obj/item/weapon/reagent_containers/food/snacks/S = I
if(I.w_class > 2)
- user << "The ingredient is too big for [src]."
+ user << "The ingredient is too big for [src]!"
else if((ingredients.len >= ingMax) || (reagents.total_volume >= volume))
- user << "You can't add more ingredients to [src]."
+ user << "You can't add more ingredients to [src]!"
else
user.drop_item()
if(S.trash)
@@ -309,9 +309,9 @@
if(istype(I,/obj/item/weapon/reagent_containers/food/snacks))
var/obj/item/weapon/reagent_containers/food/snacks/S = I
if(I.w_class > 2)
- user << "The ingredient is too big for [src]."
+ user << "The ingredient is too big for [src]!"
else if(contents.len >= 20)
- user << "You can't add more ingredients to [src]."
+ user << "You can't add more ingredients to [src]!"
else
if(reagents.has_reagent("water", 10)) //are we starting a soup or a salad?
var/obj/item/weapon/reagent_containers/food/snacks/customizable/A = new/obj/item/weapon/reagent_containers/food/snacks/customizable/soup(get_turf(src))
diff --git a/code/modules/food&drinks/food/snacks.dm b/code/modules/food&drinks/food/snacks.dm
index ebd60167175..f34b33fb441 100644
--- a/code/modules/food&drinks/food/snacks.dm
+++ b/code/modules/food&drinks/food/snacks.dm
@@ -65,7 +65,7 @@
return 0
if(wrapped)
- M << "You can't eat wrapped food!"
+ M << "You can't eat wrapped food!"
return 0
else if(fullness <= 50)
M << "You hungrily [eatverb] some of \the [src] and gobble it down!"
@@ -76,7 +76,7 @@
else if(fullness > 500 && fullness < 600)
M << "You unwillingly [eatverb] a bit of \the [src]."
else if(fullness > (600 * (1 + M.overeatduration / 2000))) // The more you eat - the more you can eat
- M << "You cannot force any more of \the [src] to go down your throat."
+ M << "You cannot force any more of \the [src] to go down your throat!"
return 0
else
if(!isbrain(M)) //If you're feeding it to someone else.
@@ -86,8 +86,8 @@
M.visible_message("[user] attempts to feed [M] [src].", \
"[user] attempts to feed [M] [src].")
else
- M.visible_message("[user] cannot force anymore of [src] down [M]'s throat!", \
- "[user] cannot force anymore of [src] down [M]'s throat!")
+ M.visible_message("[user] cannot force anymore of [src] down [M]'s throat!", \
+ "[user] cannot force anymore of [src] down [M]'s throat!")
return 0
if(!do_mob(user, M))
@@ -97,7 +97,7 @@
"[user] feeds [M] to eat [src].")
else
- user << "[M] doesn't seem to have a mouth!"
+ user << "[M] doesn't seem to have a mouth!"
return
if(reagents) //Handle ingestion of the reagent.
@@ -142,13 +142,13 @@
var/obj/item/weapon/reagent_containers/food/snacks/S = W
if(custom_food_type && ispath(custom_food_type))
if(S.w_class > 2)
- user << "[S] is too big for [src]."
+ user << "[S] is too big for [src]!"
return 0
if(!S.customfoodfilling)
- user << "[src] can't be filled with [S]."
+ user << "[src] can't be filled with [S]!"
return 0
if(contents.len >= 20)
- user << "You can't add more ingredients to [src]."
+ user << "You can't add more ingredients to [src]!"
return 0
var/obj/item/weapon/reagent_containers/food/snacks/customizable/C = new custom_food_type(get_turf(src))
C.initialize_custom_food(src, S, user)
@@ -175,18 +175,18 @@
!(locate(/obj/structure/optable) in src.loc) && \
!(locate(/obj/item/weapon/storage/bag/tray) in src.loc) \
)
- user << "You cannot slice [src] here! You need a table or at least a tray."
+ user << "You cannot slice [src] here! You need a table or at least a tray."
return 1
var/slices_lost = 0
if (accuracy > 1)
user.visible_message( \
- "[user] slices [src].", \
+ "[user] slices [src].", \
"You slice [src]." \
)
else
user.visible_message( \
- "[user] inaccurately slices [src] with [W]!", \
+ "[user] inaccurately slices [src] with [W]!", \
"You inaccurately slice [src] with your [W]!" \
)
slices_lost = rand(1,min(1,round(slices_num/2)))
diff --git a/code/modules/food&drinks/food/snacks/dough.dm b/code/modules/food&drinks/food/snacks/dough.dm
index 7773d08534c..866a3d6fa12 100644
--- a/code/modules/food&drinks/food/snacks/dough.dm
+++ b/code/modules/food&drinks/food/snacks/dough.dm
@@ -20,7 +20,7 @@
user << "You flatten [src]."
qdel(src)
else
- user << "You need to put [src] on a surface to roll it out!"
+ user << "You need to put [src] on a surface to roll it out!"
else
..()
@@ -82,7 +82,7 @@
user << "You flatten [src]."
qdel(src)
else
- user << "You need to put [src] on a surface to roll it out!"
+ user << "You need to put [src] on a surface to roll it out!"
else
..()
diff --git a/code/modules/food&drinks/food/snacks_egg.dm b/code/modules/food&drinks/food/snacks_egg.dm
index 23c80a6bf4b..08e3076e190 100644
--- a/code/modules/food&drinks/food/snacks_egg.dm
+++ b/code/modules/food&drinks/food/snacks_egg.dm
@@ -98,18 +98,20 @@
w_class = 3
/obj/item/weapon/reagent_containers/food/snacks/omelette/attackby(obj/item/weapon/W, mob/user, params)
- if(istype(W,/obj/item/weapon/kitchen/utensil/fork))
- if(W.icon_state == "forkloaded")
- user << "You already have omelette on your fork."
- return
- W.icon_state = "forkloaded"
- user.visible_message( \
- "[user] takes a piece of omelette with their fork!", \
- "You take a piece of omelette with your fork!" \
- )
- reagents.remove_reagent("nutriment", 1)
- if(reagents.total_volume <= 0)
- qdel(src)
+ if(istype(W,/obj/item/weapon/kitchen/fork))
+ var/obj/item/weapon/kitchen/fork/F = W
+ if(F.forkload)
+ user << "You already have omelette on your fork!"
+ else
+ F.icon_state = "forkloaded"
+ user.visible_message("[user] takes a piece of omelette with their fork!", \
+ "You take a piece of omelette with your fork.")
+
+ var/datum/reagent/R = pick(reagents.reagent_list)
+ reagents.remove_reagent(R.id, 1)
+ F.forkload = R
+ if(reagents.total_volume <= 0)
+ qdel(src)
return
..()
diff --git a/code/modules/food&drinks/kitchen machinery/gibber.dm b/code/modules/food&drinks/kitchen machinery/gibber.dm
index 36862c68452..064e0aeb379 100644
--- a/code/modules/food&drinks/kitchen machinery/gibber.dm
+++ b/code/modules/food&drinks/kitchen machinery/gibber.dm
@@ -124,10 +124,10 @@
if(src.operating)
return
if(!src.occupant)
- visible_message("You hear a loud metallic grinding sound.")
+ visible_message("You hear a loud metallic grinding sound.")
return
use_power(1000)
- visible_message("You hear a loud squelchy grinding sound.")
+ visible_message("You hear a loud squelchy grinding sound.")
src.operating = 1
update_icon()
var/sourcename = src.occupant.real_name
diff --git a/code/modules/food&drinks/kitchen machinery/icecream_vat.dm b/code/modules/food&drinks/kitchen machinery/icecream_vat.dm
index 1965f4cdde4..a42158fca57 100644
--- a/code/modules/food&drinks/kitchen machinery/icecream_vat.dm
+++ b/code/modules/food&drinks/kitchen machinery/icecream_vat.dm
@@ -126,7 +126,7 @@
else
src.visible_message("[user] whips up some [flavour] icecream.")
else
- user << "You don't have the ingredients to make this."
+ user << "You don't have the ingredients to make this!"
/obj/machinery/icecream_vat/Topic(href, href_list)
if(..())
diff --git a/code/modules/food&drinks/kitchen machinery/juicer.dm b/code/modules/food&drinks/kitchen machinery/juicer.dm
index 712dc0c970d..4894af742f3 100644
--- a/code/modules/food&drinks/kitchen machinery/juicer.dm
+++ b/code/modules/food&drinks/kitchen machinery/juicer.dm
@@ -44,7 +44,7 @@
return 1
else
if(!user.unEquip(O))
- user << "\the [O] is stuck to your hand, you cannot put it in \the [src]"
+ user << "\the [O] is stuck to your hand, you cannot put it in \the [src]!"
return 0
O.loc = src
beaker = O
@@ -56,7 +56,7 @@
user << "It looks as not containing any juice."
return 1
if(!user.unEquip(O))
- user << "\the [O] is stuck to your hand, you cannot put it in \the [src]"
+ user << "\the [O] is stuck to your hand, you cannot put it in \the [src]!"
return 0
O.loc = src
src.updateUsrDialog()
diff --git a/code/modules/food&drinks/kitchen machinery/microwave.dm b/code/modules/food&drinks/kitchen machinery/microwave.dm
index 48b0cff7ad5..4db5f5ea817 100644
--- a/code/modules/food&drinks/kitchen machinery/microwave.dm
+++ b/code/modules/food&drinks/kitchen machinery/microwave.dm
@@ -59,24 +59,24 @@
if(src.broken > 0)
if(src.broken == 2 && istype(O, /obj/item/weapon/wirecutters)) // If it's broken and they're using a screwdriver
user.visible_message( \
- "[user] starts to fix part of the microwave.", \
- "You start to fix part of the microwave." \
+ "[user] starts to fix part of the microwave.", \
+ "You start to fix part of the microwave..." \
)
if (do_after(user,20))
user.visible_message( \
- "[user] fixes part of the microwave.", \
- "You have fixed part of the microwave." \
+ "[user] fixes part of the microwave.", \
+ "You fix part of the microwave." \
)
src.broken = 1 // Fix it a bit
else if(src.broken == 1 && istype(O, /obj/item/weapon/weldingtool)) // If it's broken and they're doing the wrench
user.visible_message( \
- "[user] starts to fix part of the microwave.", \
- "You start to fix part of the microwave." \
+ "[user] starts to fix part of the microwave.", \
+ "You start to fix part of the microwave..." \
)
if (do_after(user,20))
user.visible_message( \
- "[user] fixes the microwave.", \
- "You have fixed the microwave." \
+ "[user] fixes the microwave.", \
+ "You fix the microwave." \
)
src.icon_state = "mw"
src.broken = 0 // Fix it!
@@ -84,7 +84,7 @@
src.flags = OPENCONTAINER
return 0 //to use some fuel
else
- user << "It's broken!"
+ user << "It's broken!"
return 1
else if(istype(O, /obj/item/weapon/reagent_containers/spray/))
var/obj/item/weapon/reagent_containers/spray/clean_spray = O
@@ -92,8 +92,8 @@
clean_spray.reagents.remove_reagent("cleaner",clean_spray.amount_per_transfer_from_this,1)
playsound(loc, 'sound/effects/spray3.ogg', 50, 1, -6)
user.visible_message( \
- "[user] has cleaned the microwave.", \
- "You have cleaned the microwave." \
+ "[user] has cleaned the microwave.", \
+ "You clean the microwave." \
)
src.dirty = 0 // It's clean!
src.broken = 0 // just to be sure
@@ -102,19 +102,19 @@
src.updateUsrDialog()
return 1 // Disables the after-attack so we don't spray the floor/user.
else
- user << "You need more space cleaner!"
+ user << "You need more space cleaner!"
return 1
else if(istype(O, /obj/item/weapon/soap/)) // If they're trying to clean it then let them
var/obj/item/weapon/soap/P = O
user.visible_message( \
- "[user] starts to clean the microwave.", \
- "You start to clean the microwave." \
+ "[user] starts to clean the microwave.S", \
+ "You start to clean the microwave..." \
)
if (do_after(user, P.cleanspeed))
user.visible_message( \
- "[user] has cleaned the microwave.", \
- "You have cleaned the microwave." \
+ "[user] has cleaned the microwave.", \
+ "You clean the microwave." \
)
src.dirty = 0 // It's clean!
src.broken = 0 // just to be sure
@@ -122,7 +122,7 @@
src.flags = OPENCONTAINER
else if(src.dirty==100) // The microwave is all dirty so can't be used!
- user << "It's dirty!"
+ user << "It's dirty!"
return 1
else if(istype(O, /obj/item/weapon/storage/bag/tray))
@@ -130,7 +130,7 @@
var/loaded = 0
for(var/obj/item/weapon/reagent_containers/food/snacks/S in T.contents)
if (contents.len>=max_n_of_items)
- user << "[src] is full, you cannot put more."
+ user << "[src] is full, you cannot put more!"
return 1
T.remove_from_storage(S, src)
loaded++
@@ -141,16 +141,16 @@
else if(istype(O,/obj/item/weapon/reagent_containers/food/snacks))
if (contents.len>=max_n_of_items)
- user << "[src] is full, you cannot put more."
+ user << "[src] is full, you cannot put more!"
return 1
else
// user.unEquip(O) //This just causes problems so far as I can tell. -Pete
if(!user.drop_item())
- user << "\the [O] is stuck to your hand, you cannot put it in \the [src]"
+ user << "\the [O] is stuck to your hand, you cannot put it in \the [src]!"
return 0
O.loc = src
user.visible_message( \
- "[user] has added \the [O] to \the [src].", \
+ "[user] has added \the [O] to \the [src].", \
"You add \the [O] to \the [src].")
else
@@ -272,7 +272,7 @@
return 0
/obj/machinery/microwave/proc/start()
- visible_message("The microwave turns on.", "You hear a microwave.")
+ visible_message("The microwave turns on.", "You hear a microwave humming.")
operating = 1
icon_state = "mw1"
updateUsrDialog()
@@ -298,7 +298,7 @@
/obj/machinery/microwave/proc/muck_finish()
playsound(src.loc, 'sound/machines/ding.ogg', 50, 1)
- visible_message("The microwave gets covered in muck!")
+ visible_message("The microwave gets covered in muck!")
dirty = 100 // Make it dirty so it can't be used util cleaned
icon_state = "mwbloody" // Make it look dirty too
operating = 0 // Turn it off again aferwards
@@ -313,7 +313,7 @@
s.set_up(2, 1, src)
s.start()
icon_state = "mwb" // Make it look all busted up and shit
- visible_message("The microwave breaks!") //Let them know they're stupid
+ visible_message("The microwave breaks!") //Let them know they're stupid
broken = 2 // Make it broken so it can't be used util fixed
flags = null //So you can't add condiments
operating = 0 // Turn it off again aferwards
diff --git a/code/modules/food&drinks/kitchen machinery/processor.dm b/code/modules/food&drinks/kitchen machinery/processor.dm
index 32753bfb10a..cd87e36e038 100644
--- a/code/modules/food&drinks/kitchen machinery/processor.dm
+++ b/code/modules/food&drinks/kitchen machinery/processor.dm
@@ -84,8 +84,8 @@
if (O.client) //grief-proof
O.loc = loc
O.visible_message("Suddenly [O] jumps out from the processor!", \
- "You jump out from the processor", \
- "You hear chimpering")
+ "You jump out from the processor!", \
+ "You hear chimpering.")
return
var/obj/item/weapon/reagent_containers/glass/bucket/bucket_of_blood = new(loc)
var/datum/reagent/blood/B = new()
@@ -121,10 +121,10 @@
/obj/machinery/processor/attackby(var/obj/item/O as obj, var/mob/user as mob, params)
if(src.processing)
- user << "The processor is in the process of processing."
+ user << "The processor is in the process of processing!"
return 1
if(src.contents.len > 0) //TODO: several items at once? several different items?
- user << "Something is already in the processing chamber."
+ user << "Something is already in the processing chamber!"
return 1
if(default_unfasten_wrench(user, O))
return
@@ -137,7 +137,7 @@
var/datum/food_processor_process/P = select_recipe(what)
if (!P)
- user << "That probably won't blend."
+ user << "That probably won't blend!"
return 1
user.visible_message("[user] put [what] into [src].", \
"You put the [what] into [src].")
@@ -149,10 +149,10 @@
if (src.stat != 0) //NOPOWER etc
return
if(src.processing)
- user << "The processor is in the process of processing."
+ user << "The processor is in the process of processing!"
return 1
if(src.contents.len == 0)
- user << "The processor is empty."
+ user << "The processor is empty!"
return 1
for(var/O in src.contents)
var/datum/food_processor_process/P = select_recipe(O)
@@ -160,15 +160,15 @@
log_admin("DEBUG: [O] in processor havent suitable recipe. How do you put it in?") //-rastaf0
continue
src.processing = 1
- user.visible_message("[user] turns on \a [src].", \
- "You turn on \a [src].", \
- "You hear a food processor")
+ user.visible_message("[user] turns on \a [src].", \
+ "You turn on \a [src].", \
+ "You hear a food processor.")
playsound(src.loc, 'sound/machines/blender.ogg', 50, 1)
use_power(500)
sleep(P.time)
P.process_food(src.loc, O)
src.processing = 0
- src.visible_message("\the [src] finished processing.")
+ src.visible_message("\the [src] finishes processing.")
/obj/machinery/processor/verb/eject()
set category = "Object"
diff --git a/code/modules/food&drinks/kitchen machinery/smartfridge.dm b/code/modules/food&drinks/kitchen machinery/smartfridge.dm
index f9c5bdb002e..35c84a26620 100644
--- a/code/modules/food&drinks/kitchen machinery/smartfridge.dm
+++ b/code/modules/food&drinks/kitchen machinery/smartfridge.dm
@@ -42,12 +42,12 @@
return 0
if(contents.len >= max_n_of_items)
- user << "\The [src] is full."
+ user << "\The [src] is full!"
return 0
if(accept_check(O))
load(O)
- user.visible_message("[user] has added \the [O] to \the [src].", "You add \the [O] to \the [src].")
+ user.visible_message("[user] has added \the [O] to \the [src].", "You add \the [O] to \the [src].")
updateUsrDialog()
return 1
@@ -62,7 +62,7 @@
load(G)
loaded++
else
- user << "\The [src] smartly refuses [O]."
+ user << "\The [src] smartly refuses [O]."
updateUsrDialog()
return 0
@@ -70,15 +70,15 @@
// this code follows storage items and trays only.
if(loaded)
if(contents.len >= max_n_of_items)
- user.visible_message("[user] loads \the [src] with \the [O].", \
+ user.visible_message("[user] loads \the [src] with \the [O].", \
"You fill \the [src] with \the [O].")
else
- user.visible_message("[user] loads \the [src] with \the [O].", \
+ user.visible_message("[user] loads \the [src] with \the [O].", \
"You load \the [src] with \the [O].")
if(O.contents.len > 0)
- user << "Some items are refused."
+ user << "Some items are refused."
else
- user << "There is nothing in [O] to put in [src]."
+ user << "There is nothing in [O] to put in [src]!"
return 0
updateUsrDialog()
@@ -95,7 +95,7 @@
if(istype(O.loc,/mob))
var/mob/M = O.loc
if(!M.unEquip(O))
- usr << "\the [O] is stuck to your hand, you cannot put it in \the [src]"
+ usr << "\the [O] is stuck to your hand, you cannot put it in \the [src]!"
return
else if(istype(O.loc,/obj/item/weapon/storage))
var/obj/item/weapon/storage/S = O.loc
diff --git a/code/modules/food&drinks/recipes/drinks_recipes.dm b/code/modules/food&drinks/recipes/drinks_recipes.dm
index 6af179bf2f1..36b21ba2d4b 100644
--- a/code/modules/food&drinks/recipes/drinks_recipes.dm
+++ b/code/modules/food&drinks/recipes/drinks_recipes.dm
@@ -206,7 +206,8 @@
name = "Hooch"
id = "hooch"
result = "hooch"
- required_reagents = list ("sugar" = 1, "ethanol" = 2, "fuel" = 1)
+ required_reagents = list ("ethanol" = 2, "fuel" = 1)
+ required_catalysts = list("enzyme" = 1)
result_amount = 3
/datum/chemical_reaction/irish_coffee
diff --git a/code/modules/holiday/halloween.dm b/code/modules/holiday/halloween.dm
index 1f74c911de0..5f83a701ac6 100644
--- a/code/modules/holiday/halloween.dm
+++ b/code/modules/holiday/halloween.dm
@@ -279,11 +279,11 @@
/mob/living/simple_animal/hostile/retaliate/clown/insane/attackby(var/obj/item/O as obj, var/mob/user as mob)
if(istype(O,/obj/item/weapon/nullrod))
if(prob(5))
- visible_message("[src] finally found the peace it deserves. You hear honks echoing off into the distance.")
+ visible_message("[src] finally found the peace it deserves. You hear honks echoing off into the distance.")
playsound(loc, 'sound/spookoween/insane_low_laugh.ogg', 300, 1)
qdel(src)
else
- visible_message("[src] seems to be resisting the effect!")
+ visible_message("[src] seems to be resisting the effect!")
else
..()
diff --git a/code/modules/hydroponics/biogenerator.dm b/code/modules/hydroponics/biogenerator.dm
index 3c4002b026b..41d7dedaaa5 100644
--- a/code/modules/hydroponics/biogenerator.dm
+++ b/code/modules/hydroponics/biogenerator.dm
@@ -82,7 +82,7 @@
else if(!istype(O, /obj/item/weapon/reagent_containers/food/snacks/grown))
- user << "You cannot put this in [src.name]"
+ user << "You cannot put this in [src.name]!"
else
var/i = 0
for(var/obj/item/weapon/reagent_containers/food/snacks/grown/G in contents)
diff --git a/code/modules/hydroponics/grown.dm b/code/modules/hydroponics/grown.dm
index 200846f6c52..75e14801e91 100644
--- a/code/modules/hydroponics/grown.dm
+++ b/code/modules/hydroponics/grown.dm
@@ -204,7 +204,7 @@
qdel(src)
return
else
- user << "You need five lengths of cable to make a potato battery."
+ user << "You need five lengths of cable to make a potato battery!"
return
@@ -806,7 +806,7 @@ obj/item/weapon/reagent_containers/food/snacks/grown/shell/eggy/add_juice()
/obj/item/weapon/reagent_containers/food/snacks/grown/tomato/proc/squish(atom/target)
new splat(src.loc)
- src.visible_message("The [src.name] has been squashed.","You hear a smack.")
+ src.visible_message("The [src.name] has been squashed.","You hear a smack.")
for(var/atom/A in get_turf(target))
src.reagents.reaction(A)
@@ -834,7 +834,7 @@ obj/item/weapon/reagent_containers/food/snacks/grown/shell/eggy/add_juice()
/obj/item/weapon/reagent_containers/food/snacks/grown/tomato/killer/attack_self(mob/user as mob)
if(awakening || istype(user.loc,/turf/space))
return
- user << "You begin to awaken the Killer Tomato."
+ user << "You begin to awaken the Killer Tomato..."
awakening = 1
spawn(30)
@@ -898,7 +898,7 @@ obj/item/weapon/reagent_containers/food/snacks/grown/shell/eggy/add_juice()
/obj/item/weapon/reagent_containers/food/snacks/grown/tomato/blue/bluespace/attack_self(var/mob/user)
squish(user)
user.drop_item()
- src.visible_message("[user] squashes the [src.name].","You hear a smack.")
+ src.visible_message("[user] squashes the [src.name].","You hear a smack.")
qdel(src)
/obj/item/weapon/reagent_containers/food/snacks/grown/tomato/blue/bluespace/squish(atom/squishee)
diff --git a/code/modules/hydroponics/growninedible.dm b/code/modules/hydroponics/growninedible.dm
index f3993846124..0de365ecdfc 100644
--- a/code/modules/hydroponics/growninedible.dm
+++ b/code/modules/hydroponics/growninedible.dm
@@ -75,7 +75,7 @@
if(ST != plank && istype(ST, plank_type) && ST.amount < ST.max_amount)
ST.attackby(plank, user) //we try to transfer all old unfinished stacks to the new stack we created.
if(plank.amount > old_plank_amount)
- user << "You add the newly-formed [plank_name] to the stack. It now contains [plank.amount] [plank_name]."
+ user << "You add the newly-formed [plank_name] to the stack. It now contains [plank.amount] [plank_name]."
qdel(src)
if(is_type_in_list(W,accepted))
@@ -89,7 +89,7 @@
qdel(src)
return
else
- usr << " You must dry this first."
+ usr << " You must dry this first!"
/obj/item/weapon/grown/log/steel
seed = /obj/item/seeds/steelmycelium
@@ -152,7 +152,7 @@
if(endurance > 0)
endurance -= rand(1, (endurance / 3) + 1)
else
- usr << "All the petals have fallen off the [name] from violent whacking."
+ usr << "All the petals have fallen off the [name] from violent whacking!"
usr.unEquip(src)
qdel(src)
diff --git a/code/modules/hydroponics/hydroponics.dm b/code/modules/hydroponics/hydroponics.dm
index d3a74ed88be..3ae3ad8741f 100644
--- a/code/modules/hydroponics/hydroponics.dm
+++ b/code/modules/hydroponics/hydroponics.dm
@@ -586,7 +586,7 @@ obj/machinery/hydroponics/attackby(var/obj/item/O as obj, var/mob/user as mob, p
if(istype(reagent_source, /obj/item/weapon/reagent_containers/syringe))
var/obj/item/weapon/reagent_containers/syringe/syr = reagent_source
if(syr.mode != 1)
- user << "You can't get any extract out of this plant." //That. Gives me an idea...
+ user << "You can't get any extract out of this plant." //That. Gives me an idea...
return
if(!reagent_source.reagents.total_volume)
@@ -650,7 +650,7 @@ obj/machinery/hydroponics/attackby(var/obj/item/O as obj, var/mob/user as mob, p
else if(istype(O, /obj/item/seeds/))
if(!planted)
user.unEquip(O)
- user << "You plant [O]."
+ user << "You plant [O]."
dead = 0
myseed = O
planted = 1
@@ -692,11 +692,11 @@ obj/machinery/hydroponics/attackby(var/obj/item/O as obj, var/mob/user as mob, p
else if(istype(O, /obj/item/weapon/minihoe))
if(weedlevel > 0)
- user.visible_message("[user] uproots the weeds.", "You remove the weeds from [src].")
+ user.visible_message("[user] uproots the weeds.", "You remove the weeds from [src].")
weedlevel = 0
update_icon()
else
- user << "This plot is completely devoid of weeds. It doesn't need uprooting."
+ user << "This plot is completely devoid of weeds! It doesn't need uprooting."
else if(istype(O, /obj/item/weapon/storage/bag/plants))
attack_hand(user)
@@ -708,28 +708,28 @@ obj/machinery/hydroponics/attackby(var/obj/item/O as obj, var/mob/user as mob, p
else if(istype(O, /obj/item/weapon/wrench) && unwrenchable)
if(anchored == 2)
- user << "Unscrew the hoses first!"
+ user << "Unscrew the hoses first!"
return
if(!anchored && !isinspace())
- user.visible_message("[user] begins to wrench [src] into place.", \
- "You begin to wrench [src] in place.")
+ user.visible_message("[user] begins to wrench [src] into place.", \
+ "You begin to wrench [src] in place...")
playsound(loc, 'sound/items/Ratchet.ogg', 50, 1)
if (do_after(user, 20))
if(anchored)
return
anchored = 1
- user.visible_message("[user] wrenches [src] into place.", \
+ user.visible_message("[user] wrenches [src] into place.", \
"You wrench [src] in place.")
else if(anchored)
- user.visible_message("[user] begins to unwrench [src].", \
- "You begin to unwrench [src].")
+ user.visible_message("[user] begins to unwrench [src].", \
+ "You begin to unwrench [src]...")
playsound(loc, 'sound/items/Ratchet.ogg', 50, 1)
if (do_after(user, 20))
if(!anchored)
return
anchored = 0
- user.visible_message("[user] unwrenches [src].", \
+ user.visible_message("[user] unwrenches [src].", \
"You unwrench [src].")
else if(istype(O, /obj/item/weapon/screwdriver) && unwrenchable) //THIS NEED TO BE DONE DIFFERENTLY, SOMEONE REFACTOR THE TRAY CODE ALREADY
@@ -737,12 +737,12 @@ obj/machinery/hydroponics/attackby(var/obj/item/O as obj, var/mob/user as mob, p
if(anchored == 2)
playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1)
anchored = 1
- user << "You unscrew \the [src]'s hoses."
+ user << "You unscrew \the [src]'s hoses."
else if(anchored == 1)
playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1)
anchored = 2
- user << "You screw in \the [src]'s hoses."
+ user << "You screw in \the [src]'s hoses."
for(var/obj/machinery/hydroponics/h in range(1,src))
spawn()
@@ -758,7 +758,7 @@ obj/machinery/hydroponics/attackby(var/obj/item/O as obj, var/mob/user as mob, p
else if(dead)
planted = 0
dead = 0
- user << "You remove the dead plant from [src]."
+ user << "You remove the dead plant from [src]."
qdel(myseed)
update_icon()
else
@@ -824,7 +824,7 @@ obj/machinery/hydroponics/attackby(var/obj/item/O as obj, var/mob/user as mob, p
break
else //If the player has ghosted from his corpse before blood was drawn, his ckey is no longer attached to the mob, so we need to match up the cloned player through the mind key
for(var/mob/M in player_list)
- if(ckey(M.mind.key) == ckey(mind.key) && M.ckey && M.client && M.stat == 2 && !M.suiciding)
+ if(mind && M.mind && ckey(M.mind.key) == ckey(mind.key) && M.ckey && M.client && M.stat == 2 && !M.suiciding)
if(istype(M, /mob/dead/observer))
var/mob/dead/observer/O = M
if(!O.can_reenter_corpse)
@@ -870,11 +870,11 @@ obj/machinery/hydroponics/attackby(var/obj/item/O as obj, var/mob/user as mob, p
harvest = 0
lastproduce = age
if(istype(myseed,/obj/item/seeds/replicapod/))
- user << "You harvest from the [myseed.plantname]."
+ user << "You harvest from the [myseed.plantname]."
else if(myseed.getYield() <= 0)
- user << "You fail to harvest anything useful."
+ user << "You fail to harvest anything useful!"
else
- user << "You harvest [myseed.getYield()] items from the [myseed.plantname]."
+ user << "You harvest [myseed.getYield()] items from the [myseed.plantname]."
if(myseed.oneharvest)
qdel(myseed)
planted = 0
@@ -986,5 +986,5 @@ obj/machinery/hydroponics/attackby(var/obj/item/O as obj, var/mob/user as mob, p
/obj/machinery/hydroponics/soil/attackby(var/obj/item/O as obj, var/mob/user as mob, params)
..()
if(istype(O, /obj/item/weapon/shovel))
- user << "You clear up [src]!"
+ user << "You clear up [src]!"
qdel(src)
diff --git a/code/modules/hydroponics/seed_extractor.dm b/code/modules/hydroponics/seed_extractor.dm
index 24c611329c0..d3b7b030ea4 100644
--- a/code/modules/hydroponics/seed_extractor.dm
+++ b/code/modules/hydroponics/seed_extractor.dm
@@ -71,7 +71,7 @@ obj/machinery/seed_extractor/attackby(var/obj/item/O as obj, var/mob/user as mob
return
if(!user.drop_item()) //couldn't drop the item
- user << "\The [O] is stuck to your hand, you cannot put it in the seed extractor!"
+ user << "\The [O] is stuck to your hand, you cannot put it in the seed extractor!"
return
if(O && O.loc)
@@ -86,7 +86,7 @@ obj/machinery/seed_extractor/attackby(var/obj/item/O as obj, var/mob/user as mob
updateUsrDialog()
return
else
- user << "You can't extract any seeds from \the [O.name]."
+ user << "You can't extract any seeds from \the [O.name]!"
datum/seed_pile
var/name = ""
@@ -171,7 +171,7 @@ obj/machinery/seed_extractor/proc/add(var/obj/item/seeds/O as obj)
if(istype(O.loc,/mob))
var/mob/M = O.loc
if(!M.unEquip(O))
- usr << "\the [O] is stuck to your hand, you cannot put it in \the [src]"
+ usr << "\the [O] is stuck to your hand, you cannot put it in \the [src]!"
return
else if(istype(O.loc,/obj/item/weapon/storage))
var/obj/item/weapon/storage/S = O.loc
diff --git a/code/modules/hydroponics/seeds.dm b/code/modules/hydroponics/seeds.dm
index 56c309a95fc..3d63316edaa 100644
--- a/code/modules/hydroponics/seeds.dm
+++ b/code/modules/hydroponics/seeds.dm
@@ -107,12 +107,12 @@
mutant_color = bloodSample.data["mutant_color"]
factions = bloodSample.data["factions"]
W.reagents.clear_reagents()
- user << "You inject the contents of the syringe into the seeds."
+ user << "You inject the contents of the syringe into the seeds."
contains_sample = 1
else
- user << "The seeds reject the sample!"
+ user << "The seeds reject the sample!"
else
- user << "The seeds already contain a genetic sample."
+ user << "The seeds already contain a genetic sample!"
..()
diff --git a/code/modules/library/lib_items.dm b/code/modules/library/lib_items.dm
index 1e5aa530242..b22c6d40087 100644
--- a/code/modules/library/lib_items.dm
+++ b/code/modules/library/lib_items.dm
@@ -81,7 +81,7 @@
name = ("bookcase ([sanitize(newname)])")
else if(istype(I, /obj/item/weapon/crowbar))
if(contents.len)
- user << "You need to remove the books first."
+ user << "You need to remove the books first!"
else
playsound(loc, 'sound/items/Crowbar.ogg', 100, 1)
user << "You pry the shelf out."
@@ -191,7 +191,7 @@
if(is_blind(user))
return
if(unique)
- user << "These pages don't seem to take the ink well. Looks like you can't modify it."
+ user << "These pages don't seem to take the ink well! Looks like you can't modify it."
return
var/choice = input("What would you like to change?") in list("Title", "Contents", "Author", "Cancel")
switch(choice)
@@ -250,8 +250,8 @@
scanner.computer.inventory.Add(src)
user << "[I]'s screen flashes: 'Book stored in buffer. Title added to general inventory.'"
- else if(istype(I, /obj/item/weapon/kitchenknife) || istype(I, /obj/item/weapon/wirecutters))
- user << "You begin to carve out [title]."
+ else if(istype(I, /obj/item/weapon/kitchen/knife) || istype(I, /obj/item/weapon/wirecutters))
+ user << "You begin to carve out [title]..."
if(do_after(user, 30))
user << "You carve out the pages from [title]! You didn't want to read it anyway."
var/obj/item/weapon/storage/book/B = new
diff --git a/code/modules/mining/laborcamp/laborshuttle.dm b/code/modules/mining/laborcamp/laborshuttle.dm
index 5588b29e662..7f0992a502f 100644
--- a/code/modules/mining/laborcamp/laborshuttle.dm
+++ b/code/modules/mining/laborcamp/laborshuttle.dm
@@ -20,10 +20,10 @@
if(href_list["move"])
var/obj/docking_port/mobile/M = SSshuttle.getShuttle("laborcamp")
if(!M)
- usr << "Cannot locate shuttle."
+ usr << "Cannot locate shuttle!"
return 0
var/obj/docking_port/stationary/S = M.get_docked()
if(S && S.name == "laborcamp_away")
- usr << "Shuttle is already at the outpost."
+ usr << "Shuttle is already at the outpost!"
return 0
..()
\ No newline at end of file
diff --git a/code/modules/mining/mine_items.dm b/code/modules/mining/mine_items.dm
index 717d2ea6512..e420be8f389 100644
--- a/code/modules/mining/mine_items.dm
+++ b/code/modules/mining/mine_items.dm
@@ -140,7 +140,7 @@
playsound(src, 'sound/weapons/smg_empty_alarm.ogg',50,1)
warned = 1
if(!R.cell.use(drillcost))
- R << "You don't have enough charge to drill."
+ R << "You don't have enough charge to drill!"
return 0
return 1
diff --git a/code/modules/mining/mine_turfs.dm b/code/modules/mining/mine_turfs.dm
index cdde315c9c5..c8469966af4 100644
--- a/code/modules/mining/mine_turfs.dm
+++ b/code/modules/mining/mine_turfs.dm
@@ -238,7 +238,7 @@
name = "gibtonite deposit"
desc = "An active gibtonite reserve. Run!"
stage = 1
- visible_message("There was gibtonite inside! It's going to explode!")
+ visible_message("There was gibtonite inside! It's going to explode!")
var/turf/bombturf = get_turf(src)
var/area/A = get_area(bombturf)
@@ -406,7 +406,7 @@
/turf/simulated/mineral/attackby(var/obj/item/weapon/pickaxe/P as obj, mob/user as mob, params)
if (!user.IsAdvancedToolUser())
- usr << "You don't have the dexterity to do this!"
+ usr << "You don't have the dexterity to do this!"
return
if (istype(P, /obj/item/weapon/pickaxe))
@@ -421,13 +421,13 @@
if(!RD.use_robot_power(user))
return
else if(!D.bcell.use(D.drillcost))
- user << "Your [D.name] doesn't have enough charge."
+ user << "Your [D.name] doesn't have enough charge!"
return
if(last_act+P.digspeed > world.time)//prevents message spam
return
last_act = world.time
- user << "You start picking."
+ user << "You start picking..."
P.playDigSound()
if(do_after(user,P.digspeed))
@@ -544,15 +544,15 @@
return
if (dug)
- user << "This area has already been dug."
+ user << "This area has already been dug!"
return
- user << "You start digging."
+ user << "You start digging..."
playsound(src, 'sound/effects/shovel_dig.ogg', 50, 1) //FUCK YO RUSTLE I GOT'S THE DIGS SOUND HERE
sleep(20)
if ((user.loc == T && user.get_active_hand() == W))
- user << "You dug a hole."
+ user << "You dig a hole."
gets_dug()
return
@@ -563,15 +563,15 @@
return
if (dug)
- user << "This area has already been dug."
+ user << "This area has already been dug!"
return
- user << "You start digging."
+ user << "You start digging..."
playsound(src, 'sound/effects/shovel_dig.ogg', 50, 1) //FUCK YO RUSTLE I GOT'S THE DIGS SOUND HERE
sleep(P.digspeed)
if ((user.loc == T && user.get_active_hand() == W))
- user << "You dug a hole."
+ user << "You dig a hole."
gets_dug()
return
diff --git a/code/modules/mining/ores_coins.dm b/code/modules/mining/ores_coins.dm
index eeed29889c6..bf394e7ac21 100644
--- a/code/modules/mining/ores_coins.dm
+++ b/code/modules/mining/ores_coins.dm
@@ -68,7 +68,7 @@
if(istype(I, /obj/item/weapon/weldingtool))
var/obj/item/weapon/weldingtool/W = I
if(W.welding)
- user << "You can't hit a high enough temperature to smelt [src] properly."
+ user << "You can't hit a high enough temperature to smelt [src] properly!"
else
..()
@@ -123,7 +123,7 @@
/obj/item/weapon/twohanded/required/gibtonite/attackby(obj/item/I, mob/user, params)
if(!wires && istype(I, /obj/item/device/assembly/igniter))
- user.visible_message("[user] attaches [I] to [src]!")
+ user.visible_message("[user] attaches [I] to [src].", "You attach [I] to [src].")
wires = new(src)
attacher = key_name(user)
qdel(I)
@@ -141,7 +141,7 @@
if(primed)
if(istype(I, /obj/item/device/mining_scanner) || istype(I, /obj/item/device/t_scanner/adv_mining_scanner) || istype(I, /obj/item/device/multitool))
primed = 0
- user.visible_message("The chain reaction was stopped! ...The ore's quality went down.")
+ user.visible_message("The chain reaction was stopped! ...The ore's quality looks diminished.", "You stopped the chain reaction. ...The ore's quality looks diminished.")
icon_state = "Gibtonite ore"
quality = 1
return
@@ -185,7 +185,7 @@
else if(triggered_by == 2)
log_game("A signal has primed a [name] for detonation at [A.name]([bombturf.x],[bombturf.y],[bombturf.z]). Igniter attacher: [attacher].")
else
- user.visible_message("[user] strikes \the [src], causing a chain reaction!")
+ user.visible_message("[user] strikes \the [src], causing a chain reaction!", "You strike \the [src], causing a chain reaction.")
log_game("[key_name(user)] has primed a [name] for detonation at [A.name]([bombturf.x],[bombturf.y],[bombturf.z])")
spawn(det_time)
if(primed)
@@ -280,12 +280,22 @@
sideslist = list("heads")
value = 20
+/obj/item/weapon/coin/antagtoken
+ name = "antag token"
+ icon_state = "coin_valid_valid"
+ cmineral = "valid"
+ desc = "A novelty coin that helps the heart know what hard evidence cannot prove."
+ sideslist = list("valid", "salad")
+ value = 20
+
+/obj/item/weapon/coin/antagtoken/New()
+ return
/obj/item/weapon/coin/attackby(obj/item/weapon/W as obj, mob/user as mob, params)
if(istype(W, /obj/item/stack/cable_coil))
var/obj/item/stack/cable_coil/CC = W
if(string_attached)
- user << "There already is a string attached to this coin."
+ user << "There already is a string attached to this coin!"
return
if (CC.use(1))
@@ -293,7 +303,7 @@
string_attached = 1
user << "You attach a string to the coin."
else
- user << "You need one length of cable to attach a string to the coin."
+ user << "You need one length of cable to attach a string to the coin!"
return
else if(istype(W,/obj/item/weapon/wirecutters))
@@ -317,6 +327,6 @@
icon_state = "coin_[cmineral]_[coinflip]"
playsound(user.loc, 'sound/items/coinflip.ogg', 50, 1)
if(do_after(user, 15))
- user.visible_message("[user] has flipped [src]. It lands on [coinflip].", \
+ user.visible_message("[user] has flipped [src]. It lands on [coinflip].", \
"You flip [src]. It lands on [coinflip].", \
- "You hear the clattering of loose change.")
\ No newline at end of file
+ "You hear the clattering of loose change.")
\ No newline at end of file
diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm
index e569986704f..56bcf7503cb 100644
--- a/code/modules/mob/dead/observer/observer.dm
+++ b/code/modules/mob/dead/observer/observer.dm
@@ -203,7 +203,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
if(following && following == target)
return
following = target
- src << "Now following [target]"
+ src << "Now following [target]."
spawn(0)
var/turf/pos = get_turf(src)
while(loc == pos && target && following == target && client)
@@ -336,7 +336,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
/mob/dead/observer/pointed(atom/A as mob|obj|turf in view())
if(!..())
return 0
- usr.visible_message("[src] points to [A]")
+ usr.visible_message("[src] points to [A].")
return 1
/mob/dead/observer/verb/view_manfiest()
diff --git a/code/modules/mob/living/carbon/alien/humanoid/alien_powers.dm b/code/modules/mob/living/carbon/alien/humanoid/alien_powers.dm
index f5fa526654f..8b27de42f94 100644
--- a/code/modules/mob/living/carbon/alien/humanoid/alien_powers.dm
+++ b/code/modules/mob/living/carbon/alien/humanoid/alien_powers.dm
@@ -129,9 +129,9 @@ Doesn't work on other aliens/AI.*/
M.adjustToxLoss(amount)
user.adjustToxLoss(-amount)
M << "[user] has transfered [amount] plasma to you."
- user << {"You have trasferred [amount] plasma to [M]"}
+ user << {"You trasfer [amount] plasma to [M]"}
else
- user << "You need to be closer."
+ user << "You need to be closer!"
return
/obj/effect/proc_holder/alien/acid
@@ -255,10 +255,9 @@ Doesn't work on other aliens/AI.*/
/obj/effect/proc_holder/alien/regurgitate/fire(var/mob/living/carbon/alien/user)
if(user.stomach_contents.len)
for(var/atom/movable/A in user.stomach_contents)
- if(A in user.stomach_contents)
- user.stomach_contents.Remove(A)
- A.loc = user.loc
- //Paralyse(10)
+ user.stomach_contents.Remove(A)
+ A.loc = user.loc
+ A.update_pipe_vision()
user.visible_message("[user] hurls out the contents of their stomach!")
return
diff --git a/code/modules/mob/living/carbon/alien/larva/powers.dm b/code/modules/mob/living/carbon/alien/larva/powers.dm
index cf2c73a96c6..469e4023946 100644
--- a/code/modules/mob/living/carbon/alien/larva/powers.dm
+++ b/code/modules/mob/living/carbon/alien/larva/powers.dm
@@ -16,7 +16,7 @@
else
user.layer = MOB_LAYER
user.visible_message("[user.] slowly peaks up from the ground...", \
- "You have stopped hiding.")
+ "You stop hiding.")
return 1
diff --git a/code/modules/mob/living/carbon/brain/MMI.dm b/code/modules/mob/living/carbon/brain/MMI.dm
index 49a3bc558d3..0b649aec99d 100644
--- a/code/modules/mob/living/carbon/brain/MMI.dm
+++ b/code/modules/mob/living/carbon/brain/MMI.dm
@@ -22,12 +22,12 @@
if(istype(O,/obj/item/organ/brain)) //Time to stick a brain in it --NEO
var/obj/item/organ/brain/newbrain = O
if(brain)
- user << "There's already a brain in the MMI!"
+ user << "There's already a brain in the MMI!"
return
if(!newbrain.brainmob)
- user << "You aren't sure where this brain came from, but you're pretty sure it's a useless brain."
+ user << "You aren't sure where this brain came from, but you're pretty sure it's a useless brain!"
return
- visible_message("[user] sticks \a [newbrain] into \the [src]")
+ visible_message("[user] sticks \a [newbrain] into \the [src].")
brainmob = newbrain.brainmob
newbrain.brainmob = null
@@ -67,9 +67,9 @@
/obj/item/device/mmi/attack_self(mob/user as mob)
if(!brain)
- user << "You upend the MMI, but there's nothing in it."
+ user << "You upend the MMI, but there's nothing in it!"
else if(locked)
- user << "You upend the MMI, but the brain is clamped into place."
+ user << "You upend the MMI, but the brain is clamped into place!"
else
user << "You upend the MMI, spilling the brain onto the floor."
@@ -123,7 +123,7 @@
set popup_menu = 0
if(brainmob.stat)
- brainmob << "Can't do that while incapacitated or dead."
+ brainmob << "Can't do that while incapacitated or dead!"
radio.listening = radio.listening==1 ? 0 : 1
brainmob << "Radio is [radio.listening==1 ? "now" : "no longer"] receiving broadcast."
diff --git a/code/modules/mob/living/carbon/brain/brain_item.dm b/code/modules/mob/living/carbon/brain/brain_item.dm
index 4bd461376ed..ed151132066 100644
--- a/code/modules/mob/living/carbon/brain/brain_item.dm
+++ b/code/modules/mob/living/carbon/brain/brain_item.dm
@@ -52,7 +52,7 @@
var/mob/living/carbon/human/H = M
if(istype(M, /mob/living/carbon/human) && ((H.head && H.head.flags & HEADCOVERSEYES) || (H.wear_mask && H.wear_mask.flags & MASKCOVERSEYES) || (H.glasses && H.glasses.flags & GLASSESCOVERSEYES)))
- user << "You're going to need to remove their head cover first."
+ user << "You're going to need to remove their head cover first!"
return
//since these people will be dead M != usr
@@ -63,15 +63,15 @@
if(O == (user || M))
continue
if(M == user)
- O << "[user] inserts [src] into \his head!"
+ O << "[user] inserts [src] into \his head!"
else
- O << "[M] has [src] inserted into \his head by [user]."
+ O << "[M] has [src] inserted into \his head by [user]."
if(M != user)
- M << "[user] inserts [src] into your head!"
- user << "You insert [src] into [M]'s head!"
+ M << "[user] inserts [src] into your head."
+ user << "You insert [src] into [M]'s head."
else
- user << "You insert [src] into your head!" //LOL
+ user << "You insert [src] into your head." //LOL
//this might actually be outdated since barring badminnery, a debrain'd body will have any client sucked out to the brain's internal mob. Leaving it anyway to be safe. --NEO
if(M.key)
diff --git a/code/modules/mob/living/carbon/brain/death.dm b/code/modules/mob/living/carbon/brain/death.dm
index 05cc69ba948..5490d786297 100644
--- a/code/modules/mob/living/carbon/brain/death.dm
+++ b/code/modules/mob/living/carbon/brain/death.dm
@@ -1,8 +1,8 @@
/mob/living/carbon/brain/death(gibbed)
if(stat == DEAD) return
if(!gibbed && container && istype(container, /obj/item/device/mmi))//If not gibbed but in a container.
- container.visible_message("[src]'s MMI flatlines!", \
- "You hear something flatline.")
+ container.visible_message("[src]'s MMI flatlines!", \
+ "You hear something flatline.")
if(istype(src,/obj/item/organ/brain/alien))
container.icon_state = "mmi_alien_dead"
else
diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm
index e8ee8511136..bae07c42c8d 100644
--- a/code/modules/mob/living/carbon/carbon.dm
+++ b/code/modules/mob/living/carbon/carbon.dm
@@ -38,9 +38,9 @@
/mob/living/carbon/relaymove(var/mob/user, direction)
if(user in src.stomach_contents)
if(prob(40))
- audible_message("You hear something rumbling inside [src]'s stomach...", \
- "You hear something rumbling.", 4,\
- "Something is rumbling inside your stomach!")
+ audible_message("You hear something rumbling inside [src]'s stomach...", \
+ "You hear something rumbling.", 4,\
+ "Something is rumbling inside your stomach!")
var/obj/item/I = user.get_active_hand()
if(I && I.force)
var/d = rand(round(I.force / 4), I.force)
@@ -84,7 +84,7 @@
src.visible_message(
"[src] was shocked by \the [source]!", \
"You feel a powerful shock coursing through your body!", \
- "You hear a heavy electrical crack." \
+ "You hear a heavy electrical crack." \
)
if(prob(25) && heart_attack)
heart_attack = 0
@@ -170,7 +170,7 @@
eye_stat += rand(2, 4)
else
- src << "Your eyes itch and burn severely!"
+ src << "Your eyes itch and burn severely!"
eye_stat += rand(12, 16)
if(eye_stat > 10)
@@ -406,7 +406,7 @@ var/const/GALOSHES_DONT_HELP = 8
changeNext_move(CLICK_CD_BREAKOUT)
last_special = world.time + CLICK_CD_BREAKOUT
visible_message("[src] attempts to unbuckle themself!", \
- "You attempt to unbuckle yourself. (This will take around one minute and you need to stay still.)")
+ "You attempt to unbuckle yourself... (This will take around one minute and you need to stay still.)")
if(do_after(src, 600, needhand = 0))
if(!buckled)
return
@@ -449,7 +449,7 @@ var/const/GALOSHES_DONT_HELP = 8
var/displaytime = breakouttime / 600
if(!cuff_break)
visible_message("[src] attempts to remove [I]!")
- src << "You attempt to remove [I]. (This will take around [displaytime] minutes and you need to stand still.)"
+ src << "You attempt to remove [I]... (This will take around [displaytime] minutes and you need to stand still.)"
if(do_after(src, breakouttime, 10, 0))
if(I.loc != src || buckled)
return
@@ -474,7 +474,7 @@ var/const/GALOSHES_DONT_HELP = 8
else
breakouttime = 50
visible_message("[src] is trying to break [I]!")
- src << "You attempt to break [I]. (This will take around 5 seconds and you need to stand still.)"
+ src << "You attempt to break [I]... (This will take around 5 seconds and you need to stand still.)"
if(do_after(src, breakouttime, needhand = 0))
if(!I.loc || buckled)
return
diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm
index 676caeff4e7..c1a0e21b364 100644
--- a/code/modules/mob/living/carbon/human/human.dm
+++ b/code/modules/mob/living/carbon/human/human.dm
@@ -282,20 +282,20 @@
if(!I || !L || I.loc != src) //no item, no limb, or item is not in limb (the person atleast) anymore
return
var/time_taken = I.embedded_unsafe_removal_time*I.w_class
- usr.visible_message("[usr] attempts to remove [I] from their [L.getDisplayName()]!","You attempt to remove [I] from your [L.getDisplayName()], it will take [time_taken/10] seconds.")
+ usr.visible_message("[usr] attempts to remove [I] from their [L.getDisplayName()].","You attempt to remove [I] from your [L.getDisplayName()]... (It will take [time_taken/10] seconds.)")
if(do_after(usr, time_taken, needhand = 1))
L.embedded_objects -= I
L.take_damage(I.embedded_unsafe_removal_pain_multiplier*I.w_class)//It hurts to rip it out, get surgery you dingus.
I.loc = get_turf(src)
usr.put_in_hands(I)
usr.emote("scream")
- usr.visible_message("[usr] successfully rips [I] out of their [L.getDisplayName()]!","You successfully remove [I] from your [L.getDisplayName()]!")
+ usr.visible_message("[usr] successfully rips [I] out of their [L.getDisplayName()]!","You successfully remove [I] from your [L.getDisplayName()].")
return
if(href_list["item"])
var/slot = text2num(href_list["item"])
if(slot in check_obscured_slots())
- usr << "You can't reach that. Something is covering it."
+ usr << "You can't reach that! Something is covering it."
return
if(href_list["pockets"])
@@ -309,7 +309,7 @@
var/delay_denominator = 1
if(pocket_item && !(pocket_item.flags&ABSTRACT))
if(pocket_item.flags & NODROP)
- usr << "You try to empty [src]'s [pocket_side] pocket, it seems to be stuck!"
+ usr << "You try to empty [src]'s [pocket_side] pocket, it seems to be stuck!"
usr << "You try to empty [src]'s [pocket_side] pocket."
else if(place_item && place_item.mob_can_equip(src, pocket_id, 1) && !(place_item.flags&ABSTRACT))
usr << "You try to place [place_item] into [src]'s [pocket_side] pocket."
@@ -678,7 +678,7 @@
if(health >= 0)
if(src == M)
visible_message( \
- "[src] examines \himself.", \
+ "[src] examines \himself.", \
"You check yourself for injuries.")
for(var/obj/item/organ/limb/org in organs)
@@ -734,16 +734,16 @@
src << "[C.name] is dead!"
return
if(is_mouth_covered())
- src << "Remove your mask!"
+ src << "Remove your mask first!"
return 0
if(C.is_mouth_covered())
- src << "Remove their mask!"
+ src << "Remove their mask first!"
return 0
if(C.cpr_time < world.time + 30)
add_logs(src, C, "CPRed")
visible_message("[src] is trying to perform CPR on [C.name]!", \
- "You try to perform CPR on [C.name]. Hold still!")
+ "You try to perform CPR on [C.name]... Hold still!")
if(!do_mob(src, C))
src << "You fail to perform CPR on [C]!"
return 0
@@ -753,8 +753,8 @@
var/suff = min(C.getOxyLoss(), 7)
C.adjustOxyLoss(-suff)
C.updatehealth()
- visible_message("[src] performs CPR on [C.name]!")
- C << "You feel a breath of fresh air enter your lungs. It feels good."
+ src.visible_message("[src] performs CPR on [C.name]!", "You perform CPR on [C.name].")
+ C << "You feel a breath of fresh air enter your lungs... It feels good..."
/mob/living/carbon/human/generateStaticOverlay()
diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm
index fd919216a09..980ba2ce475 100644
--- a/code/modules/mob/living/carbon/human/human_defense.dm
+++ b/code/modules/mob/living/carbon/human/human_defense.dm
@@ -146,7 +146,7 @@ emp_act
else
return 0
- var/armor = run_armor_check(affecting, "melee", "Your armor has protected your [hit_area].", "Your armor has softened a hit to your [hit_area].")
+ var/armor = run_armor_check(affecting, "melee", "Your armor has protected your [hit_area].", "Your armor has softened a hit to your [hit_area].")
if(armor >= 100) return 0
var/Iforce = I.force //to avoid runtimes on the forcesay checks at the bottom. Some items might delete themselves if you drop them. (stunning yourself, ninja swords)
@@ -220,7 +220,7 @@ emp_act
for(var/obj/item/organ/limb/L in src.organs)
if(L.status == ORGAN_ROBOTIC)
if(!informed)
- src << "You feel a sharp pain as your robotic limbs overload."
+ src << "You feel a sharp pain as your robotic limbs overload."
informed = 1
switch(severity)
if(1)
@@ -250,7 +250,7 @@ emp_act
update_inv_wear_mask()
update_inv_head()
else
- src << "Your [head_clothes.name] protects your head and face from the acid!"
+ src << "Your [head_clothes.name] protects your head and face from the acid!"
else
. = get_organ("head")
if(.)
@@ -270,7 +270,7 @@ emp_act
update_inv_w_uniform()
update_inv_wear_suit()
else
- src << "Your [chest_clothes.name] protects your body from the acid!"
+ src << "Your [chest_clothes.name] protects your body from the acid!"
else
. = get_organ("chest")
if(.)
@@ -300,7 +300,7 @@ emp_act
update_inv_w_uniform()
update_inv_wear_suit()
else
- src << "Your [arm_clothes.name] protects your arms and hands from the acid!"
+ src << "Your [arm_clothes.name] protects your arms and hands from the acid!"
else
. = get_organ("r_arm")
if(.)
@@ -325,7 +325,7 @@ emp_act
update_inv_w_uniform()
update_inv_wear_suit()
else
- src << "Your [leg_clothes.name] protects your legs and feet from the acid!"
+ src << "Your [leg_clothes.name] protects your legs and feet from the acid!"
else
. = get_organ("r_leg")
if(.)
diff --git a/code/modules/mob/living/carbon/human/inventory.dm b/code/modules/mob/living/carbon/human/inventory.dm
index 2bec9a1583b..c7db2dc90c6 100644
--- a/code/modules/mob/living/carbon/human/inventory.dm
+++ b/code/modules/mob/living/carbon/human/inventory.dm
@@ -46,7 +46,7 @@
return 0
if(!w_uniform)
if(!disable_warning)
- src << "You need a jumpsuit before you can attach this [I.name]."
+ src << "You need a jumpsuit before you can attach this [I.name]!"
return 0
if( !(I.slot_flags & SLOT_BELT) )
return
@@ -80,7 +80,7 @@
return 0
if(!w_uniform)
if(!disable_warning)
- src << "You need a jumpsuit before you can attach this [I.name]."
+ src << "You need a jumpsuit before you can attach this [I.name]!"
return 0
if( !(I.slot_flags & SLOT_ID) )
return 0
@@ -92,7 +92,7 @@
return 0
if(!w_uniform)
if(!disable_warning)
- src << "You need a jumpsuit before you can attach this [I.name]."
+ src << "You need a jumpsuit before you can attach this [I.name]!"
return 0
if(I.slot_flags & SLOT_DENYPOCKET)
return
@@ -105,7 +105,7 @@
return 0
if(!w_uniform)
if(!disable_warning)
- src << "You need a jumpsuit before you can attach this [I.name]."
+ src << "You need a jumpsuit before you can attach this [I.name]!"
return 0
if(I.slot_flags & SLOT_DENYPOCKET)
return 0
@@ -119,15 +119,15 @@
return 0
if(!wear_suit)
if(!disable_warning)
- src << "You need a suit before you can attach this [I.name]."
+ src << "You need a suit before you can attach this [I.name]!"
return 0
if(!wear_suit.allowed)
if(!disable_warning)
- usr << "You somehow have a suit with no defined allowed items for suit storage, stop that." //should be src?
+ usr << "You somehow have a suit with no defined allowed items for suit storage, stop that!" //should be src?
return 0
if(I.w_class > 4)
if(!disable_warning)
- usr << "The [I.name] is too big to attach." //should be src?
+ usr << "The [I.name] is too big to attach!" //should be src?
return 0
if( istype(I, /obj/item/device/pda) || istype(I, /obj/item/weapon/pen) || is_type_in_list(I, wear_suit.allowed) ) //ugly and un-polymorphic.
return 1
@@ -163,7 +163,7 @@
var/obj/item/I = H.get_active_hand()
var/obj/item/weapon/storage/S = H.get_inactive_hand()
if(!I)
- H << "You are not holding anything to equip."
+ H << "You are not holding anything to equip!"
return
if(H.equip_to_appropriate_slot(I))
if(hand)
@@ -183,7 +183,7 @@
if(istype(S, /obj/item/weapon/storage) && S.can_be_inserted(I,1))
S.handle_item_insertion(I)
else
- H << "You are unable to equip that."
+ H << "You are unable to equip that!"
/mob/living/carbon/human/proc/equip_in_one_of_slots(obj/item/I, list/slots, qdel_on_fail = 1)
diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm
index 5be1ee2fb9d..090bc46f055 100644
--- a/code/modules/mob/living/carbon/human/species.dm
+++ b/code/modules/mob/living/carbon/human/species.dm
@@ -310,7 +310,7 @@
return 0
if(!H.w_uniform && !nojumpsuit)
if(!disable_warning)
- H << "You need a jumpsuit before you can attach this [I.name]."
+ H << "You need a jumpsuit before you can attach this [I.name]!"
return 0
if( !(I.slot_flags & SLOT_BELT) )
return
@@ -344,7 +344,7 @@
return 0
if(!H.w_uniform && !nojumpsuit)
if(!disable_warning)
- H << "You need a jumpsuit before you can attach this [I.name]."
+ H << "You need a jumpsuit before you can attach this [I.name]!"
return 0
if( !(I.slot_flags & SLOT_ID) )
return 0
@@ -356,7 +356,7 @@
return 0
if(!H.w_uniform && !nojumpsuit)
if(!disable_warning)
- H << "You need a jumpsuit before you can attach this [I.name]."
+ H << "You need a jumpsuit before you can attach this [I.name]!"
return 0
if(I.slot_flags & SLOT_DENYPOCKET)
return
@@ -369,7 +369,7 @@
return 0
if(!H.w_uniform && !nojumpsuit)
if(!disable_warning)
- H << "You need a jumpsuit before you can attach this [I.name]."
+ H << "You need a jumpsuit before you can attach this [I.name]!"
return 0
if(I.slot_flags & SLOT_DENYPOCKET)
return 0
@@ -383,7 +383,7 @@
return 0
if(!H.wear_suit)
if(!disable_warning)
- H << "You need a suit before you can attach this [I.name]."
+ H << "You need a suit before you can attach this [I.name]!"
return 0
if(!H.wear_suit.allowed)
if(!disable_warning)
@@ -849,7 +849,7 @@
else
return 0
- var/armor = H.run_armor_check(affecting, "melee", "Your armor has protected your [hit_area].", "Your armor has softened a hit to your [hit_area].")
+ var/armor = H.run_armor_check(affecting, "melee", "Your armor has protected your [hit_area].", "Your armor has softened a hit to your [hit_area].")
if(armor >= 100) return 0
var/Iforce = I.force //to avoid runtimes on the forcesay checks at the bottom. Some items might delete themselves if you drop them. (stunning yourself, ninja swords)
diff --git a/code/modules/mob/living/carbon/human/species_types.dm b/code/modules/mob/living/carbon/human/species_types.dm
index 354598e5dfa..6d52c0ea386 100644
--- a/code/modules/mob/living/carbon/human/species_types.dm
+++ b/code/modules/mob/living/carbon/human/species_types.dm
@@ -72,7 +72,7 @@
if(prob(15))
H.irradiate(rand(30,80))
H.Weaken(5)
- H.visible_message("[H] writhes in pain as \his vacuoles boil.", "[H] writhes in pain as \his vacuoles boil.", "You hear the crunching of leaves.")
+ H.visible_message("[H] writhes in pain as \his vacuoles boil.", "You writhe in pain as your vacuoles boil!", "You hear the crunching of leaves.")
if(prob(80))
randmutb(H)
domutcheck(H,null)
@@ -81,7 +81,7 @@
domutcheck(H,null)
else
H.adjustFireLoss(rand(5,15))
- H.show_message("The radiation beam singes you!")
+ H.show_message("The radiation beam singes you!")
if(/obj/item/projectile/energy/florayield)
H.nutrition = min(H.nutrition+30, NUTRITION_LEVEL_FULL)
return
@@ -232,7 +232,7 @@
// Animated beings of stone. They have increased defenses, and do not need to breathe. They're also slow as fuuuck.
name = "Golem"
id = "golem"
- specflags = list(NOBREATH,HEATRES,COLDRES,NOGUNS,NOBLOOD,RADIMMUNE)
+ specflags = list(NOBREATH,HEATRES,COLDRES,NOGUNS,NOBLOOD,RADIMMUNE,VIRUSIMMUNE)
speedmod = 3
armor = 55
punchmod = 5
@@ -281,7 +281,7 @@
say_mod = "rattles"
sexes = 0
meat = /obj/item/weapon/reagent_containers/food/snacks/meat/slab/human/mutant/skeleton
- specflags = list(NOBREATH,HEATRES,COLDRES,NOBLOOD,RADIMMUNE)
+ specflags = list(NOBREATH,HEATRES,COLDRES,NOBLOOD,RADIMMUNE,VIRUSIMMUNE)
/*
ZOMBIES
*/
@@ -325,7 +325,7 @@
say_mod = "gibbers"
sexes = 0
invis_sight = SEE_INVISIBLE_LEVEL_ONE
- specflags = list(NOBLOOD,NOBREATH)
+ specflags = list(NOBLOOD,NOBREATH,VIRUSIMMUNE)
var/scientist = 0 // vars to not pollute spieces list with castes
var/agent = 0
var/team = 1
diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm
index 3cc7827073c..8c64cbf773e 100644
--- a/code/modules/mob/living/living.dm
+++ b/code/modules/mob/living/living.dm
@@ -694,7 +694,7 @@ Sorry Giacom. Please don't be mad :(
// Override if a certain type of mob should be behave differently when stripping items (can't, for example)
/mob/living/stripPanelUnequip(obj/item/what, mob/who, where)
if(what.flags & NODROP)
- src << "You can't remove \the [what.name], it appears to be stuck!"
+ src << "You can't remove \the [what.name], it appears to be stuck!"
return
who.visible_message("[src] tries to remove [who]'s [what.name].", \
"[src] tries to remove [who]'s [what.name].")
@@ -709,7 +709,7 @@ Sorry Giacom. Please don't be mad :(
/mob/living/stripPanelEquip(obj/item/what, mob/who, where)
what = src.get_active_hand()
if(what && (what.flags & NODROP))
- src << "You can't put \the [what.name] on [who], it's stuck to your hand!"
+ src << "You can't put \the [what.name] on [who], it's stuck to your hand!"
return
if(what && what.mob_can_equip(who, where, 1))
visible_message("[src] tries to put [what] on [who].")
diff --git a/code/modules/mob/living/living_defense.dm b/code/modules/mob/living/living_defense.dm
index d5ed917a2bd..6aa9bda4d25 100644
--- a/code/modules/mob/living/living_defense.dm
+++ b/code/modules/mob/living/living_defense.dm
@@ -168,7 +168,7 @@ proc/vol_by_throwforce_and_or_w_class(var/obj/item/I)
var/obj/item/weapon/grab/G = new /obj/item/weapon/grab(user, src)
if(buckled)
- user << "You cannot grab [src], \he is buckled in!"
+ user << "You cannot grab [src], \he is buckled in!"
if(!G) //the grab will delete itself in New if src is anchored
return 0
user.put_in_active_hand(G)
diff --git a/code/modules/mob/living/living_defines.dm b/code/modules/mob/living/living_defines.dm
index c75676e4115..59436c1028b 100644
--- a/code/modules/mob/living/living_defines.dm
+++ b/code/modules/mob/living/living_defines.dm
@@ -42,4 +42,7 @@
var/metabolism_efficiency = 1 //more or less efficiency to metabolize helpful/harmful reagents and regulate body temperature..
var/list/image/staticOverlays = list()
var/has_limbs = 0 //does the mob have distinct limbs?(arms,legs, chest,head)
- var/list/datum/action/actions = list()
\ No newline at end of file
+ var/list/datum/action/actions = list()
+
+ var/list/pipes_shown = list()
+ var/last_played_vent
\ No newline at end of file
diff --git a/code/modules/mob/living/login.dm b/code/modules/mob/living/login.dm
index eb582bbcfa1..0b46914c42b 100644
--- a/code/modules/mob/living/login.dm
+++ b/code/modules/mob/living/login.dm
@@ -10,7 +10,11 @@
if("sandbox")
CanBuild()
+ //Vents
if(ventcrawler)
src << "You can ventcrawl! Use alt+click on vents to quickly travel about the station."
+ //Should update regardless of if we can ventcrawl, since we can end up in pipes in other ways.
+ update_pipe_vision()
+
update_interface()
return .
diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm
index e03f3c5464d..2c7083a8206 100644
--- a/code/modules/mob/living/silicon/ai/ai.dm
+++ b/code/modules/mob/living/silicon/ai/ai.dm
@@ -63,17 +63,7 @@ var/list/ai_list = list()
var/apc_override = 0 //hack for letting the AI use its APC even when visionless
/mob/living/silicon/ai/New(loc, var/datum/ai_laws/L, var/obj/item/device/mmi/B, var/safety = 0)
- var/list/possibleNames = ai_names
-
- var/pickedName = null
- while(!pickedName)
- pickedName = pick(ai_names)
- for (var/mob/living/silicon/ai/A in mob_list)
- if (A.real_name == pickedName && possibleNames.len > 1) //fixing the theoretically possible infinite loop
- possibleNames -= pickedName
- pickedName = null
-
- real_name = pickedName
+ rename_self("ai", 1)
name = real_name
anchored = 1
canmove = 0
diff --git a/code/modules/mob/living/silicon/ai/freelook/chunk.dm b/code/modules/mob/living/silicon/ai/freelook/chunk.dm
index 9ebf44a97f3..48adee0e407 100644
--- a/code/modules/mob/living/silicon/ai/freelook/chunk.dm
+++ b/code/modules/mob/living/silicon/ai/freelook/chunk.dm
@@ -22,17 +22,9 @@
// Add an AI eye to the chunk, then update if changed.
/datum/camerachunk/proc/add(mob/camera/aiEye/eye)
- if(istype(eye,/mob/camera/aiEye/remote))
- var/mob/camera/aiEye/remote/cameye = eye
- if(!cameye.user)
- return
- if(cameye.user.client)
- cameye.user.client.images += obscured
- else:
- if(!eye.ai)
- return
- if(eye.ai.client)
- eye.ai.client.images += obscured
+ var/client/client = eye.GetViewerClient()
+ if(client)
+ client.images += obscured
eye.visibleCameraChunks += src
visible++
seenby += eye
@@ -42,18 +34,9 @@
// Remove an AI eye from the chunk, then update if changed.
/datum/camerachunk/proc/remove(mob/camera/aiEye/eye)
- if(istype(eye,/mob/camera/aiEye/remote))
- var/mob/camera/aiEye/remote/cameye = eye
- if(!cameye.user)
- return
- if(cameye.user.client)
- cameye.user.client.images -= obscured
- else
- if(!eye.ai)
- return
- if(eye.ai.client)
- eye.ai.client.images -= obscured
-
+ var/client/client = eye.GetViewerClient()
+ if(client)
+ client.images -= obscured
eye.visibleCameraChunks -= src
seenby -= eye
if(visible > 0)
@@ -123,15 +106,9 @@
var/mob/camera/aiEye/m = eye
if(!m)
continue
- if(istype(m,/mob/camera/aiEye/remote))
- var/mob/camera/aiEye/remote/cam = eye
- if(cam.user)
- cam.user.client.images -= t.obscured
- else
- if(!m.ai)
- continue
- if(m.ai.client)
- m.ai.client.images -= t.obscured
+ var/client/client = m.GetViewerClient()
+ if(client)
+ client.images -= t.obscured
for(var/turf in visRemoved)
var/turf/t = turf
@@ -145,15 +122,9 @@
if(!m)
seenby -= m
continue
- if(istype(m,/mob/camera/aiEye/remote))
- var/mob/camera/aiEye/remote/cam = eye
- if(cam.user)
- cam.user.client.images += t.obscured
- else
- if(!m.ai)
- continue
- if(m.ai.client)
- m.ai.client.images += t.obscured
+ var/client/client = m.GetViewerClient()
+ if(client)
+ client.images += t.obscured
changed = 0
diff --git a/code/modules/mob/living/silicon/ai/freelook/eye.dm b/code/modules/mob/living/silicon/ai/freelook/eye.dm
index b5e313bb050..d24c734f219 100644
--- a/code/modules/mob/living/silicon/ai/freelook/eye.dm
+++ b/code/modules/mob/living/silicon/ai/freelook/eye.dm
@@ -31,6 +31,11 @@
/mob/camera/aiEye/Move()
return 0
+/mob/camera/aiEye/proc/GetViewerClient()
+ if(ai)
+ return ai.client
+ return null
+
// AI MOVEMENT
@@ -120,3 +125,6 @@
acceleration = !acceleration
usr << "Camera acceleration has been toggled [acceleration ? "on" : "off"]."
+
+
+
diff --git a/code/modules/mob/living/silicon/pai/life.dm b/code/modules/mob/living/silicon/pai/life.dm
index c0017863de6..bc665bd4ec5 100644
--- a/code/modules/mob/living/silicon/pai/life.dm
+++ b/code/modules/mob/living/silicon/pai/life.dm
@@ -4,7 +4,7 @@
if(src.cable)
if(get_dist(src, src.cable) > 1)
var/turf/T = get_turf(src.loc)
- T.visible_message("[src.cable] rapidly retracts back into its spool.", "You hear a click and the sound of wire spooling rapidly.")
+ T.visible_message("[src.cable] rapidly retracts back into its spool.", "You hear a click and the sound of wire spooling rapidly.")
qdel(src.cable)
cable = null
if(silence_time)
diff --git a/code/modules/mob/living/silicon/pai/pai.dm b/code/modules/mob/living/silicon/pai/pai.dm
index c2062b46546..a324cdbbfe7 100644
--- a/code/modules/mob/living/silicon/pai/pai.dm
+++ b/code/modules/mob/living/silicon/pai/pai.dm
@@ -108,7 +108,7 @@
// 33% chance of no additional effect
if(prob(20))
- visible_message("A shower of sparks spray from [src]'s inner workings.", 3, "You hear and smell the ozone hiss of electrical sparks being expelled violently.", 2)
+ visible_message("A shower of sparks spray from [src]'s inner workings.", 3, "You hear and smell the ozone hiss of electrical sparks being expelled violently.", 2)
return src.death(0)
silence_time = world.timeofday + 120 * 10 // Silence for 2 minutes
diff --git a/code/modules/mob/living/silicon/pai/software.dm b/code/modules/mob/living/silicon/pai/software.dm
index c7e6135380f..4144a3a3ef2 100644
--- a/code/modules/mob/living/silicon/pai/software.dm
+++ b/code/modules/mob/living/silicon/pai/software.dm
@@ -264,7 +264,7 @@
var/turf/T = get_turf(src.loc)
src.cable = new /obj/item/weapon/pai_cable(T)
for (var/mob/M in viewers(T))
- M.show_message("A port on [src] opens to reveal [src.cable], which promptly falls to the floor.", 3, "You hear the soft click of something light and hard falling to the ground.", 2)
+ M.show_message("A port on [src] opens to reveal [src.cable], which promptly falls to the floor.", 3, "You hear the soft click of something light and hard falling to the ground.", 2)
//src.updateUsrDialog() We only need to account for the single mob this is intended for, and he will *always* be able to call this window
src.paiInterface() // So we'll just call the update directly rather than doing some default checks
return
diff --git a/code/modules/mob/living/silicon/robot/inventory.dm b/code/modules/mob/living/silicon/robot/inventory.dm
index 4934daa8060..fe91e38e37d 100644
--- a/code/modules/mob/living/silicon/robot/inventory.dm
+++ b/code/modules/mob/living/silicon/robot/inventory.dm
@@ -74,7 +74,7 @@
if(istype(module_state_3,/obj/item/borg/sight))
sight_mode |= module_state_3:sight_mode
else
- src << "You need to disable a module first!"
+ src << "You need to disable a module first!"
/mob/living/silicon/robot/proc/uneq_active()
uneq_module(module_active)
diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm
index 15b7d70d17c..df8ebcfd28d 100644
--- a/code/modules/mob/living/silicon/robot/robot.dm
+++ b/code/modules/mob/living/silicon/robot/robot.dm
@@ -400,19 +400,19 @@
user.changeNext_move(CLICK_CD_MELEE)
var/obj/item/weapon/weldingtool/WT = W
if (src == user)
- user << "You lack the reach to be able to repair yourself."
+ user << "You lack the reach to be able to repair yourself!"
return 1
if (src.health >= src.maxHealth)
- user << "[src] is already in good condition."
+ user << "[src] is already in good condition!"
return 1
if (WT.remove_fuel(0, user))
adjustBruteLoss(-30)
updatehealth()
add_fingerprint(user)
- visible_message("[user] has fixed some of the dents on [src].")
+ visible_message("[user] has fixed some of the dents on [src].")
return 0
else
- user << "The welder must be on for this task."
+ user << "The welder must be on for this task!"
return 1
else if(istype(W, /obj/item/stack/cable_coil) && wiresexposed)
@@ -420,33 +420,33 @@
if (coil.use(1))
adjustFireLoss(-30)
updatehealth()
- visible_message("[user] has fixed some of the burnt wires on [src].")
+ user.visible_message("[user] has fixed some of the burnt wires on [src].", "You fix some of the burnt wires on [src].")
else
- user << "You need one length of cable to repair [src]."
+ user << "You need one length of cable to repair [src]!"
else if (istype(W, /obj/item/weapon/crowbar)) // crowbar means open or close the cover
if(opened)
- user << "You close the cover."
+ user << "You close the cover."
opened = 0
update_icons()
else
if(locked)
- user << "The cover is locked and cannot be opened."
+ user << "The cover is locked and cannot be opened!"
else
- user << "You open the cover."
+ user << "You open the cover."
opened = 1
update_icons()
else if (istype(W, /obj/item/weapon/stock_parts/cell) && opened) // trying to put a cell inside
if(wiresexposed)
- user << "Close the cover first."
+ user << "Close the cover first!"
else if(cell)
- user << "There is a power cell already installed."
+ user << "There is a power cell already installed!"
else
user.drop_item()
W.loc = src
cell = W
- user << "You insert the power cell."
+ user << "You insert the power cell."
// chargecount = 0
update_icons()
@@ -454,7 +454,7 @@
if (wiresexposed)
wires.Interact(user)
else
- user << "You can't reach the wiring."
+ user << "You can't reach the wiring!"
else if(istype(W, /obj/item/weapon/screwdriver) && opened && !cell) // haxing
wiresexposed = !wiresexposed
@@ -465,7 +465,7 @@
if(radio)
radio.attackby(W,user)//Push it to the radio to let it handle everything
else
- user << "Unable to locate a radio."
+ user << "Unable to locate a radio!"
update_icons()
else if(istype(W, /obj/item/weapon/wrench) && opened && !cell) //Deconstruction. The flashes break from the fall, to prevent this from being a ghetto reset module.
@@ -475,20 +475,21 @@
return
else
playsound(src, 'sound/items/Ratchet.ogg', 50, 1)
+ user << "You start to unfasten [src]'s securing bolts..."
if(do_after(user, 50) && !cell)
- user.visible_message("[user] deconstructs [src]!", "You unfasten the securing bolts, and [src] falls to pieces!")
+ user.visible_message("[user] deconstructs [src]!", "You unfasten the securing bolts, and [src] falls to pieces!")
deconstruct()
else if(istype(W, /obj/item/weapon/aiModule))
var/obj/item/weapon/aiModule/MOD = W
if(!opened)
- user << "You need access to the robot's insides to do that."
+ user << "You need access to the robot's insides to do that!"
return
if(wiresexposed)
- user << "You need to close the wire panel to do that."
+ user << "You need to close the wire panel to do that!"
return
if(!cell)
- user << "You need to install a power cell to do that."
+ user << "You need to install a power cell to do that!"
return
if(emagged || (connected_ai && lawupdate)) //Can't be sure which, metagamers
emote("buzz-[user.name]")
@@ -500,17 +501,17 @@
if(radio)//sanityyyyyy
radio.attackby(W,user)//GTFO, you have your own procs
else
- user << "Unable to locate a radio."
+ user << "Unable to locate a radio!"
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(emagged)//still allow them to open the cover
- user << "The interface seems slightly damaged"
+ user << "The interface seems slightly damaged."
if(opened)
- user << "You must close the cover to swipe an ID card."
+ user << "You must close the cover to swipe an ID card!"
else
if(allowed(usr))
locked = !locked
- user << "You [ locked ? "lock" : "unlock"] [src]'s cover."
+ user << "You [ locked ? "lock" : "unlock"] [src]'s cover."
update_icons()
else
user << "Access denied."
@@ -518,27 +519,27 @@
else if(istype(W, /obj/item/borg/upgrade/))
var/obj/item/borg/upgrade/U = W
if(!opened)
- usr << "You must access the borgs internals!"
+ usr << "You must access the borgs internals!"
else if(!src.module && U.require_module)
- usr << "The borg must choose a module before it can be upgraded!"
+ usr << "The borg must choose a module before it can be upgraded!"
else if(U.locked)
- usr << "The upgrade is locked and cannot be used yet!"
+ usr << "The upgrade is locked and cannot be used yet!"
else
if(U.action(src))
- usr << "You apply the upgrade to [src]!"
+ usr << "You apply the upgrade to [src]."
usr.drop_item()
U.loc = src
else
- usr << "Upgrade error!"
+ usr << "Upgrade error."
else if(istype(W, /obj/item/device/toner))
if(toner >= tonermax)
- usr << "The toner level of [src] is at it's highest level possible"
+ usr << "The toner level of [src] is at it's highest level possible!"
else
toner = 40
usr.drop_item()
qdel(W)
- usr << "You fill the toner level of [src] to it's max capacity"
+ usr << "You fill the toner level of [src] to its max capacity."
else
if(W.force && W.damtype != STAMINA) //only sparks if real damage is dealt.
@@ -550,19 +551,19 @@
if(!opened)//Cover is closed
if(locked)
if(prob(90))
- user << "You emag the cover lock."
+ user << "You emag the cover lock."
locked = 0
else
- user << "You fail to emag the cover lock."
+ user << "You fail to emag the cover lock!"
if(prob(25))
- src << "Hack attempt detected."
+ src << "Hack attempt detected."
else
- user << "The cover is already unlocked."
+ user << "The cover is already unlocked!"
return
if(opened)//Cover is open
if(emagged) return//Prevents the X has hit Y with Z message also you cant emag them twice
if(wiresexposed)
- user << "You must close the cover first"
+ user << "You must close the cover first!"
return
else
sleep(6)
@@ -571,7 +572,7 @@
SetLockdown(1) //Borgs were getting into trouble because they would attack the emagger before the new laws were shown
lawupdate = 0
connected_ai = null
- user << "You emag [src]'s interface."
+ user << "You emag [src]'s interface."
message_admins("[key_name_admin(user)] emagged cyborg [key_name_admin(src)]. Laws overridden.")
log_game("[key_name(user)] emagged cyborg [key_name(src)]. Laws overridden.")
clear_supplied_laws()
@@ -599,9 +600,9 @@
SetLockdown(0)
update_icons()
else
- user << "You fail to [ locked ? "unlock" : "lock"] [src]'s interface."
+ user << "You fail to [ locked ? "unlock" : "lock"] [src]'s interface!"
if(prob(25))
- src << "Hack attempt detected."
+ src << "ALERT: Hack attempt detected."
/mob/living/silicon/robot/verb/unlock_own_cover()
set category = "Robot Commands"
@@ -612,7 +613,7 @@
if("Yes")
locked = 0
update_icons()
- usr << "You unlock your cover."
+ usr << "You unlock your cover."
/mob/living/silicon/robot/attack_alien(mob/living/carbon/alien/humanoid/M as mob)
if (M.a_intent =="disarm")
@@ -666,7 +667,7 @@
cell.updateicon()
cell.add_fingerprint(user)
user.put_in_active_hand(cell)
- user << "You remove \the [cell]."
+ user << "You remove \the [cell]."
cell = null
update_icons()
diff --git a/code/modules/mob/living/silicon/robot/robot_modules.dm b/code/modules/mob/living/silicon/robot/robot_modules.dm
index 374bfa98088..0dd8e573b71 100644
--- a/code/modules/mob/living/silicon/robot/robot_modules.dm
+++ b/code/modules/mob/living/silicon/robot/robot_modules.dm
@@ -212,7 +212,8 @@
modules += new /obj/item/weapon/reagent_containers/food/condiment/enzyme(src)
modules += new /obj/item/weapon/pen(src)
modules += new /obj/item/weapon/razor(src)
- modules += new /obj/item/device/violin(src)
+ modules += new /obj/item/device/instrument/violin(src)
+ modules += new /obj/item/device/instrument/guitar(src)
var/obj/item/weapon/rsf/M = new /obj/item/weapon/rsf(src)
M.matter = 30
diff --git a/code/modules/mob/living/silicon/silicon.dm b/code/modules/mob/living/silicon/silicon.dm
index 24bb007c3d2..82a7a0be1e9 100644
--- a/code/modules/mob/living/silicon/silicon.dm
+++ b/code/modules/mob/living/silicon/silicon.dm
@@ -389,7 +389,7 @@
/mob/living/silicon/attack_larva(mob/living/carbon/alien/larva/L)
if(L.a_intent == "help")
- visible_message("[L.name] rubs its head against [src].")
+ visible_message("[L.name] rubs its head against [src].")
return
/mob/living/silicon/attack_hulk(mob/living/carbon/human/user)
@@ -405,15 +405,15 @@
/mob/living/silicon/attack_hand(mob/living/carbon/human/M)
switch(M.a_intent)
if ("help")
- M.visible_message("[M] pets [src]!", \
- "You pet [src]!")
+ M.visible_message("[M] pets [src].", \
+ "You pet [src].")
if("grab")
grabbedby(M)
else
M.do_attack_animation(src)
playsound(src.loc, 'sound/effects/bang.ogg', 10, 1)
- visible_message("[M] punches [src], but doesn't leave a dent.", \
- "[M] punches [src], but doesn't leave a dent.!")
+ visible_message("[M] punches [src], but doesn't leave a dent.", \
+ "[M] punches [src], but doesn't leave a dent.")
return 0
/mob/living/silicon/adjustEarDamage()
diff --git a/code/modules/mob/living/simple_animal/friendly/corgi.dm b/code/modules/mob/living/simple_animal/friendly/corgi.dm
index 2df1cb53100..29fbf497b7d 100644
--- a/code/modules/mob/living/simple_animal/friendly/corgi.dm
+++ b/code/modules/mob/living/simple_animal/friendly/corgi.dm
@@ -109,18 +109,18 @@
//helmet and armor = 100% protection
if( istype(inventory_head,/obj/item/clothing/head/helmet) && istype(inventory_back,/obj/item/clothing/suit/armor) )
if( O.force )
- user << "[src] is wearing too much armor. You can't cause \him any damage."
+ user << "[src] is wearing too much armor! You can't cause \him any damage."
visible_message(" [user] hits [src] with [O], however [src] is too armored.")
else
- user << "[src] is wearing too much armor. You can't reach \his skin."
- visible_message("[user] gently taps [src] with [O].")
+ user << "[src] is wearing too much armor! You can't reach \his skin."
+ visible_message("[user] gently taps [src] with [O].")
if(health>0 && prob(15))
emote("me", 1, "looks at [user] with [pick("an amused","an annoyed","a confused","a resentful", "a happy", "an excited")] expression.")
return
if(istype(O, /obj/item/weapon/newspaper))
if(!stat)
- user.visible_message("[user] baps [name] on the nose with the rolled up [O]")
+ user.visible_message("[user] baps [name] on the nose with the rolled up [O].")
spawn(0)
for(var/i in list(1,2,4,8,4,2,1,2))
dir = i
@@ -128,11 +128,11 @@
if (istype(O, /obj/item/weapon/razor))
if (shaved)
- user << "You can't shave this corgi, it's already been shaved."
+ user << "You can't shave this corgi, it's already been shaved!"
return
- user.visible_message("[user] starts to shave [src] using \the [O].")
+ user.visible_message("[user] starts to shave [src] using \the [O].", "You start to shave [src] using \the [O]...")
if(do_after(user, 50))
- user.visible_message("[user] shaves [src]'s hair using \the [O]. ")
+ user.visible_message("[user] shaves [src]'s hair using \the [O].")
playsound(loc, 'sound/items/Welder2.ogg', 20, 1)
shaved = 1
icon_living = "[initial(icon_living)]_shaved"
@@ -194,13 +194,13 @@
if("back")
if(inventory_back)
- usr << "It's already wearing something."
+ usr << "It's already wearing something!"
return
else
var/obj/item/item_to_add = usr.get_active_hand()
if(!item_to_add)
- usr.visible_message("[usr] pets [src]","You rest your hand on [src]'s back for a moment.")
+ usr.visible_message("[usr] pets [src].","You rest your hand on [src]'s back for a moment.")
return
if(istype(item_to_add,/obj/item/weapon/c4)) // last thing he ever wears, I guess
item_to_add.afterattack(src,usr,1)
@@ -219,9 +219,9 @@
)
if( ! ( item_to_add.type in allowed_types ) )
- usr << "You set [item_to_add] on [src]'s back, but \he shakes it off!"
+ usr << "You set [item_to_add] on [src]'s back, but \he shakes it off!"
if(!usr.drop_item())
- usr << "\The [item_to_add] is stuck to your hand, you cannot put it on [src]'s back!"
+ usr << "\The [item_to_add] is stuck to your hand, you cannot put it on [src]'s back!"
return
item_to_add.loc = loc
if(prob(25))
@@ -250,10 +250,10 @@
return
if(inventory_head)
- if(user) user << "You can't put more than one hat on [src]!"
+ if(user) user << "You can't put more than one hat on [src]!"
return
if(!item_to_add)
- user.visible_message("[user] pets [src]","You rest your hand on [src]'s head for a moment.")
+ user.visible_message("[user] pets [src].","You rest your hand on [src]'s head for a moment.")
return
@@ -392,23 +392,23 @@
if(valid)
if(user && !user.drop_item())
- user << "\The [item_to_add] is stuck to your hand, you cannot put it on [src]'s head!"
+ user << "\The [item_to_add] is stuck to your hand, you cannot put it on [src]'s head!"
return 0
if(health <= 0)
user << "There is merely a dull, lifeless look in [real_name]'s eyes as you put the [item_to_add] on \him."
else if(user)
user.visible_message("[user] puts [item_to_add] on [real_name]'s head. [src] looks at [user] and barks once.",
- "You put [item_to_add] on [real_name]'s head. [src] gives you a peculiar look, then wags \his tail once and barks.",
- "You hear a friendly-sounding bark.")
+ "You put [item_to_add] on [real_name]'s head. [src] gives you a peculiar look, then wags \his tail once and barks.",
+ "You hear a friendly-sounding bark.")
item_to_add.loc = src
src.inventory_head = item_to_add
regenerate_icons()
else
if(user && !user.drop_item())
- user << "\The [item_to_add] is stuck to your hand, you cannot put it on [src]'s head!"
+ user << "\The [item_to_add] is stuck to your hand, you cannot put it on [src]'s head!"
return 0
- user << "You set [item_to_add] on [src]'s head, but \he shakes it off!"
+ user << "You set [item_to_add] on [src]'s head, but \he shakes it off!"
item_to_add.loc = loc
if(prob(25))
step_rand(item_to_add)
@@ -535,7 +535,7 @@
//puppies cannot wear anything.
/mob/living/simple_animal/pet/corgi/puppy/Topic(href, href_list)
if(href_list["remove_inv"] || href_list["add_inv"])
- usr << "You can't fit this on [src]"
+ usr << "You can't fit this on [src]!"
return
..()
diff --git a/code/modules/mob/living/simple_animal/friendly/drone/interaction.dm b/code/modules/mob/living/simple_animal/friendly/drone/interaction.dm
index d5d8cf19f5c..61ffbe0eecf 100644
--- a/code/modules/mob/living/simple_animal/friendly/drone/interaction.dm
+++ b/code/modules/mob/living/simple_animal/friendly/drone/interaction.dm
@@ -30,34 +30,34 @@
"can't tell if their ethernet detour is moving or not", "won't be able to reseed enough"+\
" kernels to function properly","can't start their neurotube console")
- D << "You can't seem to find the [pick(faux_gadgets)]. Without it, [src] [pick(faux_problems)]."
+ D << "You can't seem to find the [pick(faux_gadgets)]! Without it, [src] [pick(faux_problems)]."
return
- D.visible_message("[D] begins to reactivate [src].")
+ D.visible_message("[D] begins to reactivate [src].", "You begin to reactivate [src]...")
if(do_after(user,30,needhand = 1))
health = health_repair_max
stat = CONSCIOUS
icon_state = icon_living
dead_mob_list -= src
living_mob_list += src
- D.visible_message("[D] reactivates [src]!")
+ D.visible_message("[D] reactivates [src]!", "You reactivate [src].")
alert_drones(DRONE_NET_CONNECT)
if(G)
G << "DRONE NETWORK: You were reactivated by [D]!"
else
- D << "You need to remain still to reactivate [src]."
+ D << "You need to remain still to reactivate [src]!"
if("Cannibalize")
if(D.health < D.maxHealth)
- D.visible_message("[D] begins to cannibalize parts from [src].")
+ D.visible_message("[D] begins to cannibalize parts from [src].", "You begin to cannibalize parts from [src]...")
if(do_after(D, 60,5,0))
- D.visible_message("[D] repairs itself using [src]'s remains!")
+ D.visible_message("[D] repairs itself using [src]'s remains!", "You repair yourself using [src]'s remains.")
D.adjustBruteLoss(-src.maxHealth)
new /obj/effect/decal/cleanable/oil/streak(get_turf(src))
qdel(src)
else
- D << "You need to remain still to cannibalize [src]."
+ D << "You need to remain still to cannibalize [src]!"
else
- D << "You're already in perfect condition!"
+ D << "You're already in perfect condition!"
if("Nothing")
return
@@ -69,9 +69,9 @@
..()
return
if(user.get_active_hand())
- user << "Your hands are full."
+ user << "Your hands are full!"
return
- src << "[user] is trying to pick you up!"
+ src << "[user] is trying to pick you up!"
if(buckled)
user << "[src] is buckled to the [buckled.name] and cannot be picked up!"
return
@@ -92,15 +92,15 @@
/mob/living/simple_animal/drone/attackby(obj/item/I, mob/user)
if(istype(I, /obj/item/weapon/screwdriver) && stat != DEAD)
if(health < health_repair_max)
- user << "You start to tighten loose screws on [src]."
+ user << "You start to tighten loose screws on [src]..."
if(do_after(user,80))
var/repair = health_repair_max - health
adjustBruteLoss(-repair)
- visible_message("[user] tightens [src == user ? "their" : "[src]'s"] loose screws!")
+ visible_message("[user] tightens [src == user ? "their" : "[src]'s"] loose screws!", "You tighten [src == user ? "their" : "[src]'s"] loose screws.")
else
- user << "You need to remain still to tighten [src]'s screws."
+ user << "You need to remain still to tighten [src]'s screws!"
else
- user << "[src]'s screws can't get any tighter!"
+ user << "[src]'s screws can't get any tighter!"
else
..()
diff --git a/code/modules/mob/living/simple_animal/friendly/drone/verbs.dm b/code/modules/mob/living/simple_animal/friendly/drone/verbs.dm
index cd5f65f9274..754f75632f2 100644
--- a/code/modules/mob/living/simple_animal/friendly/drone/verbs.dm
+++ b/code/modules/mob/living/simple_animal/friendly/drone/verbs.dm
@@ -22,7 +22,7 @@
light_on = !light_on
- src << "Your light is now [light_on ? "on" : "off"]"
+ src << "Your light is now [light_on ? "on" : "off"]."
/mob/living/simple_animal/drone/verb/drone_ping()
set category = "Drone"
@@ -43,7 +43,7 @@
set category = "Drone"
if(!seeStatic)
- src << "You have no vision filter to change!"
+ src << "You have no vision filter to change!"
return
var/selectedStatic = input("Select a vision filter", "Vision Filter") as null|anything in staticChoices
diff --git a/code/modules/mob/living/simple_animal/friendly/farm_animals.dm b/code/modules/mob/living/simple_animal/friendly/farm_animals.dm
index ed50a96a326..22a7e584ac6 100644
--- a/code/modules/mob/living/simple_animal/friendly/farm_animals.dm
+++ b/code/modules/mob/living/simple_animal/friendly/farm_animals.dm
@@ -74,13 +74,13 @@
/mob/living/simple_animal/hostile/retaliate/goat/attackby(var/obj/item/O as obj, var/mob/user as mob, params)
if(stat == CONSCIOUS && istype(O, /obj/item/weapon/reagent_containers/glass))
- user.visible_message("[user] milks [src] using \the [O].")
+ user.visible_message("[user] milks [src] using \the [O].", "You milk [src] using \the [O].")
var/obj/item/weapon/reagent_containers/glass/G = O
var/transfered = udder.trans_id_to(G, "milk", rand(5,10))
if(G.reagents.total_volume >= G.volume)
- user << "[O] is full."
+ user << "[O] is full!"
if(!transfered)
- user << "The udder is dry. Wait a bit longer..."
+ user << "The udder is dry! Wait a bit longer..."
else
..()
//cow
@@ -115,7 +115,7 @@
/mob/living/simple_animal/cow/attackby(var/obj/item/O as obj, var/mob/user as mob, params)
if(stat == CONSCIOUS && istype(O, /obj/item/weapon/reagent_containers/glass))
- user.visible_message("[user] milks [src] using \the [O].")
+ user.visible_message("[user] milks [src] using \the [O].", "You milk [src] using \the [O].")
var/obj/item/weapon/reagent_containers/glass/G = O
var/transfered = udder.trans_id_to(G, "milk", rand(5,10))
if(G.reagents.total_volume >= G.volume)
@@ -242,14 +242,14 @@ var/global/chicken_count = 0
/mob/living/simple_animal/chicken/attackby(var/obj/item/O as obj, var/mob/user as mob, params)
if(istype(O, food_type)) //feedin' dem chickens
if(!stat && eggsleft < 8)
- var/feedmsg = "[user] feeds [O] to [name]! [pick(feedMessages)]"
+ var/feedmsg = "[user] feeds [O] to [name]! [pick(feedMessages)]"
user.visible_message(feedmsg)
user.drop_item()
qdel(O)
eggsleft += rand(1, 4)
//world << eggsleft
else
- user << "[name] doesn't seem hungry!"
+ user << "[name] doesn't seem hungry!"
else
..()
diff --git a/code/modules/mob/living/simple_animal/friendly/pug.dm b/code/modules/mob/living/simple_animal/friendly/pug.dm
index c25834a4479..1086486142d 100644
--- a/code/modules/mob/living/simple_animal/friendly/pug.dm
+++ b/code/modules/mob/living/simple_animal/friendly/pug.dm
@@ -33,7 +33,7 @@
/mob/living/simple_animal/pet/pug/attackby(var/obj/item/O as obj, var/mob/user as mob, params) //Marker -Agouri
if(istype(O, /obj/item/weapon/newspaper))
if(!stat)
- user.visible_message("[user] baps [name] on the nose with the rolled up [O]")
+ user.visible_message("[user] baps [name] on the nose with the rolled up [O].")
spawn(0)
for(var/i in list(1,2,4,8,4,2,1,2))
dir = i
diff --git a/code/modules/mob/living/simple_animal/hostile/giant_spider.dm b/code/modules/mob/living/simple_animal/hostile/giant_spider.dm
index 8746c3b4070..3eced450fed 100644
--- a/code/modules/mob/living/simple_animal/hostile/giant_spider.dm
+++ b/code/modules/mob/living/simple_animal/hostile/giant_spider.dm
@@ -25,7 +25,6 @@
name = "giant spider"
desc = "Furry and black, it makes you shudder to look at it. This one has deep red eyes."
icon_state = "guard"
- var/butcher_state = 8 // Icon state for dead spider icons
icon_living = "guard"
icon_dead = "guard_dead"
speak_emote = list("chitters")
@@ -95,18 +94,11 @@
stop_automated_movement = 0
walk(src,0)
-// Chops off each leg with a 50/50 chance of harvesting one, until finally calling
-// default harvest action
-/mob/living/simple_animal/hostile/poison/giant_spider/harvest(mob/living/user, sharpness = 1)
- if(butcher_state > 0)
- butcher_state--
- icon_state = icon_dead + "[butcher_state]"
-
- if(prob(50))
- new /obj/item/weapon/reagent_containers/food/snacks/spiderleg(src.loc)
- return
- else
- return ..()
+/mob/living/simple_animal/hostile/poison/giant_spider/harvest(mob/living/user)
+ var/leg_amount = rand(4,8)
+ for(var/i=0, i" + src << "You are a revenant!" + src << "Your formerly mundane spirit has been infused with alien energies and empowered into a revenant." + src << "You are not dead, not alive, but somewhere in between. You are capable of very limited interaction with both worlds." + src << "You are invincible and invisible to everyone but other ghosts. Some abilities may change this." + src << "Your goal is to gather essence from humans. Your essence passively regenerates up to 25E over time. You can use the Harvest abilities to gather more from corpses." + src << "Be sure to read the wiki page at https://tgstation13.org/wiki/Revenant !" + src << " " + if(!src.giveSpells()) + message_admins("Revenant was created but has no mind. Trying again in five seconds.") + spawn(50) + if(!src.giveSpells()) + message_admins("Revenant still has no mind. Deleting...") + qdel(src) + +/mob/living/simple_animal/revenant/proc/giveSpells() + if(src.mind) + src.mind.spell_list += new /obj/effect/proc_holder/spell/targeted/revenant_harvest + src.mind.spell_list += new /obj/effect/proc_holder/spell/targeted/revenant_transmit + src.mind.spell_list += new /obj/effect/proc_holder/spell/aoe_turf/revenant_light + src.mind.spell_list += new /obj/effect/proc_holder/spell/targeted/revenant_life_tap + src.mind.spell_list += new /obj/effect/proc_holder/spell/targeted/revenant_seed_drain + src.mind.spell_list += new /obj/effect/proc_holder/spell/targeted/revenant_mindspike + return 1 + return 0 /mob/living/simple_animal/revenant/death() + if(!src.strikes) + return 0 //Impossible to die with strikes still active ..(1) src.invisibility = 0 visible_message("[src] pulses with an eldritch purple light as its form unwinds into smoke.") diff --git a/code/modules/mob/living/simple_animal/revenant/revenant_abilities.dm b/code/modules/mob/living/simple_animal/revenant/revenant_abilities.dm index ce77282a185..0abb8ac46ee 100644 --- a/code/modules/mob/living/simple_animal/revenant/revenant_abilities.dm +++ b/code/modules/mob/living/simple_animal/revenant/revenant_abilities.dm @@ -50,6 +50,13 @@ if(5 to INFINITY) user << "Such a feast! [target] will yield much essence to you." sleep(30) + if(!in_range(user, target)) + user << "You are not close enough to siphon [target]'s soul. The link has been broken." + draining = 0 + return + if(!target.stat) + user << "They are now powerful enough to fight off your draining." + target << "You feel something tugging across your body before subsiding." user << "You begin siphoning essence from [target]'s soul. You can not move while this is happening." if(target.stat != DEAD) target << "You feel a horribly unpleasant draining sensation as your grip on life weakens..." @@ -58,7 +65,7 @@ user.revealed = 1 user.invisibility = 0 target.visible_message("[target] suddenly rises slightly into the air, their skin turning an ashy gray.") - target.Beam(user,icon_state="drain_life",icon='icons/effects/effects.dmi',time=50) + target.Beam(user,icon_state="drain_life",icon='icons/effects/effects.dmi',time=80) target.death(0) target.visible_message("[target] gently slumps back onto the ground.") user.icon_state = "revenant_idle" @@ -116,7 +123,7 @@ panel = "Revenant Abilities (Locked)" charge_max = 300 clothes_req = 0 - range = 5 + range = -1 var/locked = 1 /obj/effect/proc_holder/spell/aoe_turf/revenant_light/cast(list/targets, var/mob/living/simple_animal/revenant/user = usr) @@ -129,6 +136,7 @@ name = "Overload Light (25E)" panel = "Revenant Abilities" locked = 0 + range = 5 charge_counter = charge_max return if(locked) @@ -199,7 +207,7 @@ panel = "Revenant Abilities (Locked)" charge_max = 1200 clothes_req = 0 - range = 1 //Adjacent + range = -1 include_user = 1 var/locked = 1 var/planted = 0 @@ -215,6 +223,7 @@ name = "Seed of Draining (20E)" locked = 0 panel = "Revenant Abilities" + range = 1 include_user = 0 return if(locked) @@ -249,9 +258,9 @@ name = "Unlock: Mind Spike (5E)" desc = "Drives a spike of dark energy into the target's mind. Cheap but effective and doesn't take long to cool down." panel = "Revenant Abilities (Locked)" - charge_max = 15 + charge_max = 40 clothes_req = 0 - range = 3 + range = -1 include_user = 1 var/locked = 1 @@ -266,6 +275,7 @@ name = "Mind Spike (5E)" locked = 0 panel = "Revenant Abilities" + range = 3 include_user = 0 return if(locked) @@ -289,52 +299,6 @@ user.revealed = 0 user.invisibility = INVISIBILITY_OBSERVER - -//Mind Blast: A big-hitting damage ability. -/obj/effect/proc_holder/spell/targeted/revenant_mindblast - name = "Unlock: Mind Blast (25E)" - desc = "Blasts the target's mind with dark energy, doing a hefty amount of damage." - panel = "Revenant Abilities (Locked)" - charge_max = 250 - clothes_req = 0 - range = 3 - include_user = 1 - var/locked = 1 - -/obj/effect/proc_holder/spell/targeted/revenant_mindblast/cast(list/targets, var/mob/living/simple_animal/revenant/user = usr) - if(user.inhibited) - user << "Something is blocking the use of [src]!" - charge_counter = charge_max - return - if(locked && essence_check(25, 1)) - user << "You have unlocked Mind Blast!" - charge_counter = charge_max - name = "Mind Blast (25E)" - locked = 0 - panel = "Revenant Abilities" - include_user = 0 - return - if(locked) - charge_counter = charge_max - return - if(!essence_check(25)) - charge_counter = charge_max - return - for(var/mob/living/carbon/human/M in targets) - user << "You blast [M]'s mind with energy!" - M << "You feel a sudden explosion of agony in your head!" - M.apply_damage(40, BRUTE, "head") - M.adjustBrainLoss(20) - M.emote("scream") - M.Weaken(4) - //M << 'sound/effects/mind_blast.ogg' - user.revealed = 1 - user.invisibility = 0 - spawn(30) - user.revealed = 0 - user.invisibility = INVISIBILITY_OBSERVER - - //Hypnotize: Makes the target fall asleep, make them vulnerable to draining. /obj/effect/proc_holder/spell/targeted/revenant_hypnotize name = "Unlock: Hypnotize (15E)" @@ -342,7 +306,7 @@ panel = "Revenant Abilities (Locked)" charge_max = 900 clothes_req = 0 - range = 3 + range = -1 include_user = 1 var/locked = 1 @@ -356,6 +320,7 @@ charge_counter = charge_max name = "Hypnotize (15E)" locked = 0 + range = 3 panel = "Revenant Abilities" include_user = 0 return @@ -370,4 +335,12 @@ M << "Tired... so tired..." M.drowsyness += 7 spawn(70) - M.sleeping += 12 + M.sleeping += 30 + + +/* (WIP) +Strangulate: Chokes the target with crushing force. +/obj/effect/proc_holder/spell/targeted/revenant_strangulate + name = "Unlock: Strangulate (30E)" + desc = "Strangles a target with an asphyxiating hand, dealing decent oxygen damage to them." +*/ diff --git a/code/modules/mob/living/simple_animal/revenant/revenant_spawn_event.dm b/code/modules/mob/living/simple_animal/revenant/revenant_spawn_event.dm index a2e7553753c..fd897699a43 100644 --- a/code/modules/mob/living/simple_animal/revenant/revenant_spawn_event.dm +++ b/code/modules/mob/living/simple_animal/revenant/revenant_spawn_event.dm @@ -1,6 +1,7 @@ /datum/round_event_control/revenant name = "Spawn Revenant" typepath = /datum/round_event/revenant + weight = 15 max_occurrences = 3 earliest_start = 0 //Meant to mix things up early-game. @@ -37,21 +38,11 @@ return find_revenant() var/mob/living/simple_animal/revenant/revvie = new /mob/living/simple_animal/revenant/(pick(spawn_locs)) player_mind.transfer_to(revvie) - player_mind.assigned_role = "MODE" + player_mind.assigned_role = "revenant" player_mind.special_role = "Revenant" ticker.mode.traitors |= player_mind - revvie << 'sound/effects/ghost.ogg' message_admins("[key_of_revenant] has been made into a Revenant by an event.") log_game("[key_of_revenant] was spawned as a Revenant by an event.") - player_mind.store_memory("I am a revenant. My spectral form has been empowered. My only goal is to gather essence from the humans of [world.name].") - revvie << " " - revvie << "You are a revenant!" - revvie << "Your formerly mundane spirit has been infused with alien energies and empowered into a revenant." - revvie << "You are not dead, not alive, but somewhere in between. You are capable of very limited interaction with both worlds." - revvie << "You are invincible and invisible to everyone but other ghosts. Some abilities may change this." - revvie << "Your goal is to gather essence from humans. Your essence passively regenerates up to 25E over time. You can use the Harvest abilities to gather more from corpses." - //revvie << "Be sure to read the wiki page at https://tgstation13.org/wiki/Revenant !" //Not added yet. - revvie << " " return 1 diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm index 1864c0d1f84..ce30f4d3a83 100644 --- a/code/modules/mob/living/simple_animal/simple_animal.dm +++ b/code/modules/mob/living/simple_animal/simple_animal.dm @@ -363,7 +363,10 @@ user.changeNext_move(CLICK_CD_MELEE) var/sharpness = is_sharp(O) if(sharpness) - harvest(user, sharpness) + user << "You begin to butcher [src]..." + playsound(loc, 'sound/weapons/slice.ogg', 50, 1, -1) + if(do_mob(user, src, 80/sharpness)) + harvest(user) return ..() @@ -461,13 +464,9 @@ new childtype(loc) // Harvest an animal's delicious byproducts -/mob/living/simple_animal/proc/harvest(mob/living/user, sharpness = 1) - user << "You begin to butcher [src]." - playsound(loc, 'sound/weapons/slice.ogg', 50, 1, -1) - if(do_mob(user, src, 80/sharpness)) - visible_message("[user] butchers [src].") - gib() - return +/mob/living/simple_animal/proc/harvest(mob/living/user) + visible_message("[user] butchers [src].") + gib() /mob/living/simple_animal/stripPanelUnequip(obj/item/what, mob/who, where, child_override) if(!child_override) @@ -490,4 +489,4 @@ canmove = 0 else canmove = 1 - return canmove + return canmove diff --git a/code/modules/mob/living/simple_animal/slime/powers.dm b/code/modules/mob/living/simple_animal/slime/powers.dm index e8b647e5e8d..b6f4ed34b86 100644 --- a/code/modules/mob/living/simple_animal/slime/powers.dm +++ b/code/modules/mob/living/simple_animal/slime/powers.dm @@ -71,7 +71,7 @@ Victim.adjustToxLoss(rand(2,4)) if(prob(15) && Victim.client) - Victim << "[pick("You can feel your body becoming weak!", \ + Victim << "[pick("You can feel your body becoming weak!", \ "You feel like you're about to die!", \ "You feel every part of your body screaming in agony!", \ "A low, rolling pain passes through your body!", \ @@ -89,7 +89,7 @@ src << "[pick("This subject is incompatible", \ "This subject does not have a life energy", "This subject is empty", \ "I am not satisified", "I can not feed from this subject", \ - "I do not feel nourished", "This subject is not food")]..." + "I do not feel nourished", "This subject is not food")]!" if(fed_succesfully) add_nutrition(rand(15,30), lastnut) diff --git a/code/modules/mob/living/simple_animal/slime/slime.dm b/code/modules/mob/living/simple_animal/slime/slime.dm index cde4d29cadc..7dd50a1008d 100644 --- a/code/modules/mob/living/simple_animal/slime/slime.dm +++ b/code/modules/mob/living/simple_animal/slime/slime.dm @@ -284,7 +284,7 @@ ++Friends[user] else Friends[user] = 1 - user << "You feed the slime the plasma. It chirps happily." + user << "You feed the slime the plasma. It chirps happily." var/obj/item/stack/sheet/mineral/plasma/S = W S.use(1) return diff --git a/code/modules/mob/living/ventcrawling.dm b/code/modules/mob/living/ventcrawling.dm new file mode 100644 index 00000000000..78ccc103d0a --- /dev/null +++ b/code/modules/mob/living/ventcrawling.dm @@ -0,0 +1,96 @@ + +var/list/ventcrawl_machinery = list(/obj/machinery/atmospherics/unary/vent_pump, /obj/machinery/atmospherics/unary/vent_scrubber) + +//VENTCRAWLING + +/mob/living/proc/handle_ventcrawl(var/atom/A) + if(!ventcrawler || !Adjacent(A)) + return + if(stat) + src << "You must be conscious to do this!" + return + if(lying) + src << "You can't vent crawl while you're stunned!" + return + + var/obj/machinery/atmospherics/unary/vent_found + + + if(A) + vent_found = A + if(!istype(vent_found) || !vent_found.can_crawl_through()) + vent_found = null + + if(!vent_found) + for(var/obj/machinery/atmospherics/machine in range(1,src)) + if(is_type_in_list(machine, ventcrawl_machinery)) + vent_found = machine + + if(!vent_found.can_crawl_through()) + vent_found = null + + if(vent_found) + break + + + if(vent_found) + if(vent_found.parent && (vent_found.parent.members.len || vent_found.parent.other_atmosmch)) + visible_message("[src] begins climbing into the ventilation system..." ,"You begin climbing into the ventilation system...") + + if(!do_after(src, 25)) + return + + if(!client) + return + + if(iscarbon(src) && contents.len && ventcrawler < 2)//It must have atleast been 1 to get this far + for(var/obj/item/I in contents) + var/failed = 0 + if(istype(I, /obj/item/weapon/implant)) + continue + else + failed++ + + if(failed) + src << "You can't crawl around in the ventilation ducts with items!" + return + + visible_message("[src] scrambles into the ventilation ducts!","You climb into the ventilation ducts.") + loc = vent_found + add_ventcrawl(vent_found) + else + src << "This ventilation duct is not connected to anything!" + + +/mob/living/proc/add_ventcrawl(obj/machinery/atmospherics/unary/starting_machine) + if(!starting_machine) + return + var/list/totalMembers = starting_machine.parent.members + starting_machine.parent.other_atmosmch + for(var/atom/A in totalMembers) + var/image/new_image = image(A, A.loc, dir = A.dir) + pipes_shown += new_image + if(client) + client.images += new_image + + +/mob/living/proc/remove_ventcrawl() + if(client) + for(var/image/current_image in pipes_shown) + client.images -= current_image + client.eye = src + pipes_shown.len = 0 + + + + +//OOP +/atom/proc/update_pipe_vision() + return + +/mob/living/update_pipe_vision() + if(pipes_shown.len) + if(!istype(loc, /obj/machinery/atmospherics)) + remove_ventcrawl() + else + if(istype(loc, /obj/machinery/atmospherics)) + add_ventcrawl(loc) diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index 5fc8a5c44f4..c5d468e9ae9 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -266,7 +266,7 @@ var/next_mob_id = 0 qdel(W) else if(!disable_warning) - src << "You are unable to equip that." //Only print if qdel_on_fail is false + src << "You are unable to equip that!" //Only print if qdel_on_fail is false return 0 equip_to_slot(W, slot, redraw_mob) //This proc should not ever fail. return 1 diff --git a/code/modules/mob/mob_grab.dm b/code/modules/mob/mob_grab.dm index c2a4fa9a1fe..233fcd4f485 100644 --- a/code/modules/mob/mob_grab.dm +++ b/code/modules/mob/mob_grab.dm @@ -115,6 +115,8 @@ affecting.Weaken(5) //Should keep you down unless you get help. affecting.losebreath = min(affecting.losebreath + 2, 3) +/obj/item/weapon/grab/attack_self(mob/user) + s_click(hud) /obj/item/weapon/grab/proc/s_click(obj/screen/S) if(!affecting) diff --git a/code/modules/mob/mob_helpers.dm b/code/modules/mob/mob_helpers.dm index 8af2864c0b1..dd575cd6adf 100644 --- a/code/modules/mob/mob_helpers.dm +++ b/code/modules/mob/mob_helpers.dm @@ -480,10 +480,10 @@ proc/is_special_character(mob/M) // returns 1 for special characters and 2 for h affecting.heal_damage(brute,burn,1) H.update_damage_overlays(0) H.updatehealth() - user.visible_message("[user] has fixed some of the [dam ? "dents on" : "burnt wires in"] [H]'s [affecting.getDisplayName()]!") + user.visible_message("[user] has fixed some of the [dam ? "dents on" : "burnt wires in"] [H]'s [affecting.getDisplayName()].", "You fix some of the [dam ? "dents on" : "burnt wires in"] [H]'s [affecting.getDisplayName()].") return else - user << "[H]'s [affecting.getDisplayName()] is already in good condition" + user << "[H]'s [affecting.getDisplayName()] is already in good condition!" return else return diff --git a/code/modules/mob/mob_movement.dm b/code/modules/mob/mob_movement.dm index 791082d872e..f2e81516823 100644 --- a/code/modules/mob/mob_movement.dm +++ b/code/modules/mob/mob_movement.dm @@ -143,7 +143,7 @@ for(var/mob/M in range(mob, 1)) if(M.pulling == mob) if(!M.incapacitated() && mob.Adjacent(M)) - src << "You're restrained! You can't move!" + src << "You're restrained! You can't move!" move_delay += 10 return 0 else diff --git a/code/modules/mob/transform_procs.dm b/code/modules/mob/transform_procs.dm index c1492e1080f..6554869df2e 100644 --- a/code/modules/mob/transform_procs.dm +++ b/code/modules/mob/transform_procs.dm @@ -78,6 +78,8 @@ if (tr_flags & TR_DEFAULTMSG) O << "You are now a monkey." + O.update_pipe_vision() + for(var/A in loc.vars) if(loc.vars[A] == src) loc.vars[A] = O @@ -191,6 +193,8 @@ if (tr_flags & TR_DEFAULTMSG) O << "You are now a human." + O.update_pipe_vision() + updateappearance(O) . = O @@ -238,6 +242,8 @@ else O.key = key + O.update_pipe_vision() + var/obj/loc_landmark for(var/obj/effect/landmark/start/sloc in landmarks_list) if (sloc.name != "AI") @@ -302,9 +308,6 @@ var/mob/living/silicon/robot/O = new /mob/living/silicon/robot( loc ) - if (config.rename_cyborg) - O.rename_self("cyborg", 1) - // cyborgs produced by Robotize get an automatic power cell O.cell = new(O) O.cell.maxcharge = 7500 @@ -322,6 +325,11 @@ else O.key = key + O.update_pipe_vision() + + if (config.rename_cyborg) + O.rename_self("cyborg", 1) + O.loc = loc O.job = "Cyborg" O.notify_ai(1) @@ -357,6 +365,7 @@ new_xeno.key = key new_xeno << "You are now an alien." + new_xeno.update_pipe_vision() . = new_xeno qdel(src) @@ -389,6 +398,7 @@ new_slime.key = key new_slime << "You are now a slime. Skreee!" + new_slime.update_pipe_vision() . = new_slime qdel(src) @@ -425,6 +435,7 @@ new_corgi.key = key new_corgi << "You are now a Corgi. Yap Yap!" + new_corgi.update_pipe_vision() . = new_corgi qdel(src) @@ -458,6 +469,7 @@ new_mob << "You suddenly feel more... animalistic." + new_mob.update_pipe_vision() . = new_mob qdel(src) @@ -475,6 +487,7 @@ new_mob.key = key new_mob.a_intent = "harm" new_mob << "You feel more... animalistic" + new_mob.update_pipe_vision() . = new_mob qdel(src) diff --git a/code/modules/nano/nanomanager.dm b/code/modules/nano/nanomanager.dm index 07a6a4570dc..09b8a4796be 100644 --- a/code/modules/nano/nanomanager.dm +++ b/code/modules/nano/nanomanager.dm @@ -141,7 +141,8 @@ return 0 // wasn't open processing_uis.Remove(ui) - ui.user.open_uis.Remove(ui) + if(ui.user) // Sanity check in case a user has been deleted (say a blown up borg watching the alarm interface) + ui.user.open_uis.Remove(ui) var/list/uis = open_uis[src_object_key][ui.ui_key] return uis.Remove(ui) diff --git a/code/modules/ninja/suit/n_suit_verbs/energy_net_nets.dm b/code/modules/ninja/suit/n_suit_verbs/energy_net_nets.dm index ed6c7236267..f664c87a8b9 100644 --- a/code/modules/ninja/suit/n_suit_verbs/energy_net_nets.dm +++ b/code/modules/ninja/suit/n_suit_verbs/energy_net_nets.dm @@ -27,7 +27,7 @@ It is possible to destroy the net by the occupant or someone else. var/mob/living/carbon/M = affecting M.anchored = 0 for(var/mob/O in viewers(src, 3)) - O.show_message("[M.name] was recovered from the energy net!", 1, "You hear a grunt.", 2) + O.show_message("[M.name] was recovered from the energy net!", 1, "You hear a grunt.", 2) if(!isnull(master))//As long as they still exist. master << "ERROR: unable to initiate transport protocol. Procedure terminated." qdel(src) @@ -82,7 +82,7 @@ It is possible to destroy the net by the occupant or someone else. qdel(src)//Wait for everything to finish, delete the net. Else it will stop everything once net is deleted, including the spawn(0). for(var/mob/O in viewers(src, 3)) - O.show_message("[M] vanished!", 1, "You hear sparks flying!", 2) + O.show_message("[M] vanishes!", 1, "You hear sparks flying!", 2) if(!isnull(master))//As long as they still exist. master << "SUCCESS: transport procedure of \the [affecting] complete." diff --git a/code/modules/ninja/suit/n_suit_verbs/ninja_net.dm b/code/modules/ninja/suit/n_suit_verbs/ninja_net.dm index 428f417ca44..b31d49c1d82 100644 --- a/code/modules/ninja/suit/n_suit_verbs/ninja_net.dm +++ b/code/modules/ninja/suit/n_suit_verbs/ninja_net.dm @@ -12,7 +12,7 @@ if(!locate(/obj/effect/energy_net) in C.loc)//Check if they are already being affected by an energy net. for(var/turf/T in getline(H.loc, C.loc)) if(T.density)//Don't want them shooting nets through walls. It's kind of cheesy. - H << "You may not use an energy net through solid obstacles!" + H << "You may not use an energy net through solid obstacles!" return spawn(0) H.Beam(C,"n_beam",,15) @@ -25,7 +25,7 @@ spawn(0)//Parallel processing. E.process(C) else - H << "They are already trapped inside an energy net." + H << "They are already trapped inside an energy net!" else - H << "They will bring no honor to your Clan!" + H << "They will bring no honor to your Clan!" return \ No newline at end of file diff --git a/code/modules/paperwork/filingcabinet.dm b/code/modules/paperwork/filingcabinet.dm index 92077b14d4a..351443ec5bb 100644 --- a/code/modules/paperwork/filingcabinet.dm +++ b/code/modules/paperwork/filingcabinet.dm @@ -55,7 +55,7 @@ anchored = !anchored user << "You [anchored ? "wrench" : "unwrench"] [src]." else - user << "You can't put [P] in [src]!" + user << "You can't put [P] in [src]!" /obj/structure/filingcabinet/attack_hand(mob/user) diff --git a/code/modules/paperwork/handlabeler.dm b/code/modules/paperwork/handlabeler.dm index d9a6b9527d4..96c8f83e2b0 100644 --- a/code/modules/paperwork/handlabeler.dm +++ b/code/modules/paperwork/handlabeler.dm @@ -16,22 +16,22 @@ return // don't set a label if(!labels_left) - user << "No labels left." + user << "No labels left!" return if(!label || !length(label)) - user << "No text set." + user << "No text set!" return if(length(A.name) + length(label) > 64) - user << "Label too big." + user << "Label too big!" return if(ishuman(A)) - user << "You can't label humans." + user << "You can't label humans!" return if(issilicon(A)) - user << "You can't label cyborgs." + user << "You can't label cyborgs!" return - user.visible_message("[user] labels [A] as [label].", \ + user.visible_message("[user] labels [A] as [label].", \ "You label [A] as [label].") A.name = "[A.name] ([label])" labels_left-- @@ -45,7 +45,7 @@ //Now let them chose the text. var/str = copytext(reject_bad_text(input(user,"Label text?","Set label","")),1,MAX_NAME_LEN) if(!str || !length(str)) - user << "Invalid text." + user << "Invalid text!" return label = str user << "You set the text to '[str]'." diff --git a/code/modules/paperwork/paper.dm b/code/modules/paperwork/paper.dm index cf006b775cc..564411de900 100644 --- a/code/modules/paperwork/paper.dm +++ b/code/modules/paperwork/paper.dm @@ -336,12 +336,12 @@ /obj/item/weapon/paper/proc/burn(var/showmsg, var/burntime) if(showmsg) - src.visible_message("[src] catches on fire!") + src.visible_message("[src] catches on fire.") burning = 1 icon_state = "paper_onfire" info = "[stars(info)]" sleep(burntime) //7 seconds - src.visible_message("[src] burns away, leaving behind a pile of ashes.") + src.visible_message("[src] burns away, leaving behind a pile of ashes.") new /obj/effect/decal/cleanable/ash(src.loc) qdel(src) diff --git a/code/modules/paperwork/paperbin.dm b/code/modules/paperwork/paperbin.dm index a26c0497223..8493cfb876a 100644 --- a/code/modules/paperwork/paperbin.dm +++ b/code/modules/paperwork/paperbin.dm @@ -57,7 +57,7 @@ user.put_in_hands(P) user << "You take [P] out of \the [src]." else - user << "[src] is empty!" + user << "[src] is empty!" add_fingerprint(user) diff --git a/code/modules/paperwork/pen.dm b/code/modules/paperwork/pen.dm index 7045311cb55..01ea0ee5d35 100644 --- a/code/modules/paperwork/pen.dm +++ b/code/modules/paperwork/pen.dm @@ -113,7 +113,7 @@ cooldown = 1 icon_state = "pen_blink" //The more gang members there are the longer the cooldown will be - var/time = 500 + (100 * modifier) //50 seconds + 10 seconds for every member in the gang + var/time = 450 + (150 * modifier) //45 seconds + 15 seconds for every member in the gang spawn(time) cooldown = 0 icon_state = "pen" diff --git a/code/modules/paperwork/photocopier.dm b/code/modules/paperwork/photocopier.dm index 95220c1e344..92f82705db9 100644 --- a/code/modules/paperwork/photocopier.dm +++ b/code/modules/paperwork/photocopier.dm @@ -230,7 +230,7 @@ flick("bigscanner1", src) updateUsrDialog() else - user << "There is already something in [src]." + user << "There is already something in [src]!" else if(istype(O, /obj/item/weapon/photo)) if(copier_empty()) @@ -241,7 +241,7 @@ flick("bigscanner1", src) updateUsrDialog() else - user << "There is already something in [src]." + user << "There is already something in [src]!" else if(istype(O, /obj/item/device/toner)) if(toner <= 0) @@ -251,14 +251,14 @@ user << "You insert [O] into [src]." updateUsrDialog() else - user << "This cartridge is not yet ready for replacement! Use up the rest of the toner." + user << "This cartridge is not yet ready for replacement! Use up the rest of the toner." else if(istype(O, /obj/item/weapon/wrench)) if(isinspace()) user << "There's nothing to fasten [src] to!" return playsound(loc, 'sound/items/Ratchet.ogg', 50, 1) - user << "You start [anchored ? "unwrenching" : "wrenching"] [src]" + user << "You start [anchored ? "unwrenching" : "wrenching"] [src]..." if(do_after(user, 20)) if(gc_destroyed) return @@ -302,30 +302,30 @@ return src.add_fingerprint(user) if(target == user) - visible_message("[user] starts climbing onto the photocopier!") + user.visible_message("[user] starts climbing onto the photocopier!", "You start climbing onto the photocopier...") else - visible_message("[user] starts putting [target] onto the photocopier!") + user.visible_message("[user] starts putting [target] onto the photocopier!", "You start putting [target] onto the photocopier...") if(do_after(user, 20)) if(!target || target.gc_destroyed || gc_destroyed || !Adjacent(target)) //check if the photocopier/target still exists. return if(target == user) - visible_message("[user] climbs onto the photocopier!") + user.visible_message("[user] climbs onto the photocopier!", "You climb onto the photocopier.") else - visible_message("[user] puts [target] onto the photocopier!") + user.visible_message("[user] puts [target] onto the photocopier!", "You put [target] onto the photocopier.") target.loc = get_turf(src) ass = target if(photocopy) photocopy.loc = src.loc - visible_message("[photocopy] is shoved out of the way by [ass]!") + visible_message("[photocopy] is shoved out of the way by [ass]!") photocopy = null else if(copy) copy.loc = src.loc - visible_message("[copy] is shoved out of the way by [ass]!") + visible_message("[copy] is shoved out of the way by [ass]!") copy = null updateUsrDialog() diff --git a/code/modules/paperwork/photography.dm b/code/modules/paperwork/photography.dm index a759a817464..bfb76afccc0 100644 --- a/code/modules/paperwork/photography.dm +++ b/code/modules/paperwork/photography.dm @@ -53,7 +53,7 @@ if(in_range(user, src)) show(user) else - user << "You need to get closer to get a good look at this photo." + user << "You need to get closer to get a good look at this photo!" /obj/item/weapon/photo/proc/show(mob/user) @@ -427,4 +427,4 @@ obj/item/device/camera/siliconcam/robot_camera/proc/borgprint() p.pixel_y = rand(-10, 10) C.toner -= 20 //Cyborgs are very ineffeicient at printing an image visible_message("[C.name] spits out a photograph from a narrow slot on it's chassis.") - usr << "You print a photograph." + usr << "You print a photograph." diff --git a/code/modules/power/antimatter/control.dm b/code/modules/power/antimatter/control.dm index 57e815508f7..e8270dafd52 100644 --- a/code/modules/power/antimatter/control.dm +++ b/code/modules/power/antimatter/control.dm @@ -143,24 +143,24 @@ if(!anchored) playsound(src.loc, 'sound/items/Ratchet.ogg', 75, 1) user.visible_message("[user.name] secures the [src.name] to the floor.", \ - "You secure the anchor bolts to the floor.", \ - "You hear a ratchet") + "You secure the anchor bolts to the floor.", \ + "You hear a ratchet.") src.anchored = 1 connect_to_network() else if(!linked_shielding.len > 0) playsound(src.loc, 'sound/items/Ratchet.ogg', 75, 1) user.visible_message("[user.name] unsecures the [src.name].", \ - "You remove the anchor bolts.", \ - "You hear a ratchet") + "YYou remove the anchor bolts.", \ + "You hear a ratchet.") src.anchored = 0 disconnect_from_network() else - user << "Once bolted and linked to a shielding unit it the [src.name] is unable to be moved!" + user << "Once bolted and linked to a shielding unit it the [src.name] is unable to be moved!" return if(istype(W, /obj/item/weapon/am_containment)) if(fueljar) - user << "There is already a [fueljar] inside!" + user << "There is already a [fueljar] inside!" return fueljar = W W.loc = src @@ -169,8 +169,8 @@ user.unEquip(W) user.update_icons() user.visible_message("[user.name] loads an [W.name] into the [src.name].", \ - "You load an [W.name].", \ - "You hear a thunk.") + "You load an [W.name].", \ + "You hear a thunk.") return if(W.force >= 20) diff --git a/code/modules/power/apc.dm b/code/modules/power/apc.dm index 042d4731b63..44da3f238a0 100644 --- a/code/modules/power/apc.dm +++ b/code/modules/power/apc.dm @@ -377,22 +377,22 @@ if (istype(W, /obj/item/weapon/crowbar) && opened) if (has_electronics==1) if (terminal) - user << "Disconnect wires first." + user << "Disconnect the wires first!" return playsound(src.loc, 'sound/items/Crowbar.ogg', 50, 1) - user << "You are trying to remove the power control board..." //lpeters - fixed grammar issues + user << "You are trying to remove the power control board..." //lpeters - fixed grammar issues if(do_after(user, 50)) if (has_electronics==1) has_electronics = 0 if ((stat & BROKEN) || malfhack) user.visible_message(\ - "[user.name] has broken the power control board inside [src.name]!",\ - "You broke the charred power control board and remove the remains.", - "You hear a crack!") + "[user.name] has broken the power control board inside [src.name]!",\ + "You break the charred power control board and remove the remains.", + "You hear a crack.") //ticker.mode:apcs-- //XSI said no and I agreed. -rastaf0 else user.visible_message(\ - "[user.name] has removed the power control board from [src.name]!",\ + "[user.name] has removed the power control board from [src.name]!",\ "You remove the power control board.") new /obj/item/weapon/module/power_control(loc) else if (opened!=2) //cover isn't removed @@ -400,49 +400,49 @@ update_icon() else if (istype(W, /obj/item/weapon/crowbar) && !((stat & BROKEN) || malfhack) ) if(coverlocked && !(stat & MAINT)) - user << "The cover is locked and cannot be opened." + user << "The cover is locked and cannot be opened!" return else opened = 1 update_icon() else if (istype(W, /obj/item/weapon/stock_parts/cell) && opened) // trying to put a cell inside if(cell) - user << "There is a power cell already installed." + user << "There is a power cell already installed!" return else if (stat & MAINT) - user << "There is no connector for your power cell." + user << "There is no connector for your power cell!" return user.drop_item() W.loc = src cell = W user.visible_message(\ - "[user.name] has inserted the power cell to [src.name]!",\ + "[user.name] has inserted the power cell to [src.name]!",\ "You insert the power cell.") chargecount = 0 update_icon() else if (istype(W, /obj/item/weapon/screwdriver)) // haxing if(opened) if (cell) - user << "Close the APC first." //Less hints more mystery! + user << "Close the APC first!" //Less hints more mystery! return else if (has_electronics==1 && terminal) has_electronics = 2 stat &= ~MAINT playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) - user << "You screw the circuit electronics into place." + user << "You screw the circuit electronics into place." else if (has_electronics==2) has_electronics = 1 stat |= MAINT playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) - user << "You unfasten the electronics." + user << "You unfasten the electronics." else /* has_electronics==0 */ - user << "There is nothing to secure." + user << "There is nothing to secure!" return update_icon() else if(emagged) - user << "The interface is broken." + user << "The interface is broken!" else wiresexposed = !wiresexposed user << "The wires have been [wiresexposed ? "exposed" : "unexposed"]" @@ -450,30 +450,30 @@ 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(emagged) - user << "The interface is broken." + user << "The interface is broken!" else if(opened) - user << "You must close the cover to swipe an ID card." + user << "You must close the cover to swipe an ID card!" else if(wiresexposed) - user << "You must close the panel" + user << "You must close the panel!" else if(stat & (BROKEN|MAINT)) - user << "Nothing happens." + user << "Nothing happens!" else if(src.allowed(usr) && !isWireCut(APC_WIRE_IDSCAN)) locked = !locked - user << "You [ locked ? "lock" : "unlock"] the APC interface." + user << "You [ locked ? "lock" : "unlock"] the APC interface." update_icon() else user << "Access denied." else if (istype(W, /obj/item/stack/cable_coil) && !terminal && opened && has_electronics!=2) if (src.loc:intact) - user << "You must remove the floor plating in front of the APC first." + user << "You must remove the floor plating in front of the APC first!" return var/obj/item/stack/cable_coil/C = W if(C.get_amount() < 10) - user << "You need ten lengths of cable for APC." + user << "You need ten lengths of cable for APC!" return - user.visible_message("[user.name] adds cables to the APC frame.", \ - "You start adding cables to the APC frame...") + user.visible_message("[user.name] adds cables to the APC frame.", \ + "You start adding cables to the APC frame...") playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1) if(do_after(user, 20)) if (C.amount >= 10 && !terminal && opened && has_electronics != 2) @@ -492,8 +492,8 @@ terminal.dismantle(user) else if (istype(W, /obj/item/weapon/module/power_control) && opened && has_electronics==0 && !((stat & BROKEN) || malfhack)) - user.visible_message("[user.name] inserts the power control board into [src].", \ - "You start to insert the power control board into the frame...") + user.visible_message("[user.name] inserts the power control board into [src].", \ + "You start to insert the power control board into the frame...") playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1) if(do_after(user, 10)) if(has_electronics==0) @@ -501,28 +501,28 @@ user << "You place the power control board inside the frame." qdel(W) else if (istype(W, /obj/item/weapon/module/power_control) && opened && has_electronics==0 && ((stat & BROKEN) || malfhack)) - user << "You cannot put the board inside, the frame is damaged." + user << "You cannot put the board inside, the frame is damaged!" return else if (istype(W, /obj/item/weapon/weldingtool) && opened && has_electronics==0 && !terminal) var/obj/item/weapon/weldingtool/WT = W if (WT.get_fuel() < 3) - user << "You need more welding fuel to complete this task." + user << "You need more welding fuel to complete this task!" return - user.visible_message("[user.name] welds [src].", \ - "You start welding the APC frame...", \ - "You hear welding.") + user.visible_message("[user.name] welds [src].", \ + "You start welding the APC frame...", \ + "You hear welding.") playsound(src.loc, 'sound/items/Welder.ogg', 50, 1) if(do_after(user, 50)) if(!src || !WT.remove_fuel(3, user)) return if (emagged || malfhack || (stat & BROKEN) || opened==2) new /obj/item/stack/sheet/metal(loc) user.visible_message(\ - "[user.name] has cut [src] apart with [W].",\ + "[user.name] has cut [src] apart with [W].",\ "You disassembled the broken APC frame.") else new /obj/item/apc_frame(loc) user.visible_message(\ - "[user.name] has cut [src] from the wall with [W].",\ + "[user.name] has cut [src] from the wall with [W].",\ "You cut the APC frame from the wall.") qdel(src) return @@ -531,18 +531,18 @@ if (opened==2) opened = 1 user.visible_message(\ - "[user.name] has replaced the damaged APC frontal panel with a new one.",\ + "[user.name] has replaced the damaged APC frontal panel with a new one.",\ "You replace the damaged APC frontal panel with a new one.") qdel(W) update_icon() else if (istype(W, /obj/item/apc_frame) && opened && ((stat & BROKEN) || malfhack)) if (has_electronics) - user << "You cannot repair this APC until you remove the electronics still inside." + user << "You cannot repair this APC until you remove the electronics still inside!" return - user.visible_message("[user.name] replaces the damaged APC frame with a new one.",\ - "You begin to replace the damaged APC frame...") + user.visible_message("[user.name] replaces the damaged APC frame with a new one.",\ + "You begin to replace the damaged APC frame...") if(do_after(user, 50)) - user << "You've replaced the damaged APC frame with a new one." + user << "You replace the damaged APC frame with a new one." qdel(W) stat &= ~BROKEN malfai = null @@ -557,9 +557,9 @@ && W.w_class >= 3.0 \ && prob(20) ) opened = 2 - user.visible_message("[user.name] has knocked down the APC cover with the [W.name]!", \ + user.visible_message("[user.name] has knocked down the APC cover with the [W.name].", \ "You knock down the APC cover with your [W.name]!", \ - "You hear bang") + "You hear bang.") update_icon() else if (istype(user, /mob/living/silicon)) @@ -573,11 +573,11 @@ /obj/machinery/power/apc/emag_act(mob/user as mob) if(!emagged && !malfhack) if(opened) - user << "You must close the cover to swipe an ID card." + user << "You must close the cover to swipe an ID card!" else if(wiresexposed) - user << "You must close the panel first" + user << "You must close the panel first!" else if(stat & (BROKEN|MAINT)) - user << "Nothing happens." + user << "Nothing happens!" else flick("apc-spark", src) if (do_after(user,6)) @@ -587,7 +587,7 @@ user << "You emag the APC interface." update_icon() else - user << "You fail to [ locked ? "unlock" : "lock"] the APC interface." + user << "You fail to [ locked ? "unlock" : "lock"] the APC interface!" // attack with hand - remove cell (if cover open) or interact with the APC @@ -604,7 +604,7 @@ cell.updateicon() src.cell = null - user.visible_message("[user.name] removes the power cell from [src.name]!",\ + user.visible_message("[user.name] removes the power cell from [src.name]!",\ "You remove the power cell.") //user << "You remove the power cell." charging = 0 @@ -785,7 +785,7 @@ var/mob/living/carbon/human/H = user if (istype(H)) if(H.getBrainLoss() >= 60) - H.visible_message("[H] stares cluelessly at [src] and drools.") + H.visible_message("[H] stares cluelessly at [src] and drools.") return 0 else if(prob(H.getBrainLoss())) user << "You momentarily forget how to use [src]." @@ -886,10 +886,10 @@ if(!istype(malf)) return if(istype(malf.loc, /obj/machinery/power/apc)) // Already in an APC - malf << "You must evacuate your current apc first." + malf << "You must evacuate your current APC first!" return if(!malf.can_shunt) - malf << "You cannot shunt." + malf << "You cannot shunt!" return if(src.z != 1) return @@ -956,8 +956,8 @@ var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread s.set_up(3, 1, src) s.start() - visible_message("The [src.name] suddenly lets out a blast of smoke and some sparks!", \ - "You hear sizzling electronics.") + visible_message("The [src.name] suddenly lets out a blast of smoke and some sparks!", \ + "You hear sizzling electronics.") /obj/machinery/power/apc/surplus() diff --git a/code/modules/power/cable.dm b/code/modules/power/cable.dm index 10054d21e52..03c2ace4c12 100644 --- a/code/modules/power/cable.dm +++ b/code/modules/power/cable.dm @@ -135,7 +135,7 @@ By design, d1 is the smallest direction and d2 is the highest if(istype(W, /obj/item/weapon/wirecutters)) if (shock(user, 50)) return - visible_message("[user] cuts the cable.") + user.visible_message("[user] cuts the cable.", "You cut the cable.") stored.add_fingerprint(user) investigate_log("was cut by [key_name(usr, usr.client)] in [user.loc.loc]","wires") Deconstruct() @@ -144,7 +144,7 @@ By design, d1 is the smallest direction and d2 is the highest else if(istype(W, /obj/item/stack/cable_coil)) var/obj/item/stack/cable_coil/coil = W if (coil.get_amount() < 1) - user << "Not enough cable" + user << "Not enough cable!" return coil.cable_join(src, user) @@ -537,14 +537,14 @@ obj/structure/cable/proc/avail() if(!istype(usr.loc,/turf)) return if(src.amount <= 14) - usr << "You need at least 15 lengths to make restraints!" + usr << "You need at least 15 lengths to make restraints!" return var/obj/item/weapon/restraints/handcuffs/cable/B = new /obj/item/weapon/restraints/handcuffs/cable(usr.loc) B.icon_state = "cuff_[item_color]" usr << "You wind some cable together to make some restraints." src.use(15) else - usr << "You cannot do that." + usr << "You cannot do that!" ..() // Items usable on a cable coil : @@ -555,7 +555,7 @@ obj/structure/cable/proc/avail() if( istype(W, /obj/item/weapon/wirecutters) && src.amount > 1) src.amount-- new /obj/item/stack/cable_coil(user.loc, 1,item_color) - user << "You cut a piece off the cable coil." + user << "You cut a piece off the cable coil." src.update_icon() return @@ -567,18 +567,18 @@ obj/structure/cable/proc/avail() else if(istype(W, /obj/item/stack/cable_coil)) var/obj/item/stack/cable_coil/C = W if(C.amount >= MAXCOIL) - user << "The coil is too long, you cannot add any more cable to it." + user << "The coil is too long, you cannot add any more cable to it!" return if( (C.amount + src.amount <= MAXCOIL) ) - user << "You join the cable coils together." + user << "You join the cable coils together." C.give(src.amount) // give it cable src.use(src.amount) // make sure this one cleans up right return else var/amt = MAXCOIL - C.amount - user << "You transfer [amt] length\s of cable from one coil to the other." + user << "You transfer [amt] length\s of cable from one coil to the other." C.give(amt) src.use(amt) return @@ -628,15 +628,15 @@ obj/structure/cable/proc/avail() return if(!T.can_have_cabling()) - user << "You can only lay cables on catwalks and plating!" + user << "You can only lay cables on catwalks and plating!" return if(get_amount() < 1) // Out of cable - user << "There is no cable left." + user << "There is no cable left!" return if(get_dist(T,user) > 1) // Too far - user << "You can't lay cable at a place that far away." + user << "You can't lay cable at a place that far away!" return else @@ -649,7 +649,7 @@ obj/structure/cable/proc/avail() for(var/obj/structure/cable/LC in T) if(LC.d2 == dirn && LC.d1 == 0) - user << "There's already a cable at that position." + user << "There's already a cable at that position!" return var/obj/structure/cable/C = get_new_cable(T) @@ -690,7 +690,7 @@ obj/structure/cable/proc/avail() return if(get_dist(C, user) > 1) // make sure it's close enough - user << "You can't lay cable at a place that far away." + user << "You can't lay cable at a place that far away!" return @@ -703,10 +703,10 @@ obj/structure/cable/proc/avail() // one end of the clicked cable is pointing towards us if(C.d1 == dirn || C.d2 == dirn) if(!U.can_have_cabling()) //checking if it's a plating or catwalk - user << "You can only lay cables on catwalks and plating!" + user << "You can only lay cables on catwalks and plating!" return if(U.intact) //can't place a cable if it's a plating with a tile on it - user << "You can't lay cable there unless the floor tiles are removed." + user << "You can't lay cable there unless the floor tiles are removed!" return else // cable is pointing at us, we're standing on an open tile @@ -716,7 +716,7 @@ obj/structure/cable/proc/avail() for(var/obj/structure/cable/LC in U) // check to make sure there's not a cable there already if(LC.d1 == fdirn || LC.d2 == fdirn) - user << "There's already a cable at that position." + user << "There's already a cable at that position!" return var/obj/structure/cable/NC = get_new_cable (U) @@ -760,7 +760,7 @@ obj/structure/cable/proc/avail() if(LC == C) // skip the cable we're interacting with continue if((LC.d1 == nd1 && LC.d2 == nd2) || (LC.d1 == nd2 && LC.d2 == nd1) ) // make sure no cable matches either direction - user << "There's already a cable at that position." + user << "There's already a cable at that position!" return diff --git a/code/modules/power/cell.dm b/code/modules/power/cell.dm index a73e924ee08..9875876172b 100644 --- a/code/modules/power/cell.dm +++ b/code/modules/power/cell.dm @@ -63,7 +63,7 @@ if(istype(W, /obj/item/weapon/reagent_containers/syringe)) var/obj/item/weapon/reagent_containers/syringe/S = W - user << "You inject the solution into the power cell." + user << "You inject the solution into the power cell." if(S.reagents.has_reagent("plasma", 5)) @@ -125,30 +125,7 @@ ex_act(1) /obj/item/weapon/stock_parts/cell/proc/get_electrocute_damage() - switch (charge) -/* if (9000 to INFINITY) - return min(rand(90,150),rand(90,150)) - if (2500 to 9000-1) - return min(rand(70,145),rand(70,145)) - if (1750 to 2500-1) - return min(rand(35,110),rand(35,110)) - if (1500 to 1750-1) - return min(rand(30,100),rand(30,100)) - if (750 to 1500-1) - return min(rand(25,90),rand(25,90)) - if (250 to 750-1) - return min(rand(20,80),rand(20,80)) - if (100 to 250-1) - return min(rand(20,65),rand(20,65))*/ - if (1000000 to INFINITY) - return min(rand(50,160),rand(50,160)) - if (200000 to 1000000-1) - return min(rand(25,80),rand(25,80)) - if (100000 to 200000-1)//Ave powernet - return min(rand(20,60),rand(20,60)) - if (50000 to 100000-1) - return min(rand(15,40),rand(15,40)) - if (1000 to 50000-1) - return min(rand(10,20),rand(10,20)) - else - return 0 + if(charge >= 1000) + return Clamp(round(charge/10000), 10, 90) + rand(-5,5) + else + return 0 \ No newline at end of file diff --git a/code/modules/power/gravitygenerator.dm b/code/modules/power/gravitygenerator.dm index 43b649fb5cd..7196abe57e8 100644 --- a/code/modules/power/gravitygenerator.dm +++ b/code/modules/power/gravitygenerator.dm @@ -187,7 +187,7 @@ var/const/GRAV_NEEDS_WRENCH = 3 playsound(src.loc, 'sound/items/Welder2.ogg', 50, 1) broken_state++ else if(WT.isOn()) - user << "You don't have enough fuel to mend the damaged framework." + user << "You don't have enough fuel to mend the damaged framework!" if(GRAV_NEEDS_PLASTEEL) if(istype(I, /obj/item/stack/sheet/plasteel)) var/obj/item/stack/sheet/plasteel/PS = I @@ -197,7 +197,7 @@ var/const/GRAV_NEEDS_WRENCH = 3 playsound(src.loc, 'sound/machines/click.ogg', 75, 1) broken_state++ else - user << "You need 10 sheets of plasteel." + user << "You need 10 sheets of plasteel!" if(GRAV_NEEDS_WRENCH) if(istype(I, /obj/item/weapon/wrench)) user << "You secure the plating to the framework." diff --git a/code/modules/power/lighting.dm b/code/modules/power/lighting.dm index 89642e29838..00eb9f8c827 100644 --- a/code/modules/power/lighting.dm +++ b/code/modules/power/lighting.dm @@ -36,9 +36,9 @@ return var/turf/loc = get_turf(usr) if (!istype(loc, /turf/simulated/floor)) - usr << "[src.name] cannot be placed on this spot." + usr << "[src.name] cannot be placed on this spot!" return - usr << "Attaching [src] to the wall." + usr << "You begin attaching [src] to the wall..." playsound(src.loc, 'sound/machines/click.ogg', 75, 1) var/constrdir = usr.dir var/constrloc = usr.loc @@ -55,7 +55,7 @@ newlight.fingerprintslast = src.fingerprintslast usr.visible_message("[usr.name] attaches [src] to the wall.", \ - "You attach [src] to the wall.") + "You attach [src] to the wall.") qdel(src) /obj/item/light_fixture_frame/small @@ -99,20 +99,20 @@ if (istype(W, /obj/item/weapon/wrench)) if (src.stage == 1) playsound(src.loc, 'sound/items/Ratchet.ogg', 75, 1) - usr << "You begin deconstructing [src]." + usr << "You begin deconstructing [src]..." if (!do_after(usr, 30)) return new /obj/item/stack/sheet/metal( get_turf(src.loc), sheets_refunded ) user.visible_message("[user.name] deconstructs [src].", \ - "You deconstruct [src].", "You hear a noise.") + "You deconstruct [src].", "You hear a ratchet.") playsound(src.loc, 'sound/items/Deconstruct.ogg', 75, 1) qdel(src) if (src.stage == 2) - usr << "You have to remove the wires first." + usr << "You have to remove the wires first!" return if (src.stage == 3) - usr << "You have to unscrew the case first." + usr << "You have to unscrew the case first!" return if(istype(W, /obj/item/weapon/wirecutters)) @@ -125,7 +125,7 @@ src.icon_state = "bulb-construct-stage1" new /obj/item/stack/cable_coil(get_turf(src.loc), 1, "red") user.visible_message("[user.name] removes the wiring from [src].", \ - "You remove the wiring from [src].", "You hear a noise.") + "You remove the wiring from [src].", "You hear clicking.") playsound(src.loc, 'sound/items/Wirecutter.ogg', 100, 1) return @@ -140,9 +140,9 @@ src.icon_state = "bulb-construct-stage2" src.stage = 2 user.visible_message("[user.name] adds wires to [src].", \ - "You add wires to [src].") + "You add wires to [src].") else - user << "You need one length of cable to wire [src]." + user << "You need one length of cable to wire [src]!" return if(istype(W, /obj/item/weapon/screwdriver)) @@ -154,7 +154,7 @@ src.icon_state = "bulb-empty" src.stage = 3 user.visible_message("[user.name] closes [src]'s casing.", \ - "You close [src]'s casing.", "You hear a noise.") + "You close [src]'s casing.", "You hear screwing.") playsound(src.loc, 'sound/items/Screwdriver.ogg', 75, 1) switch(fixture_type) @@ -341,14 +341,14 @@ // attempt to insert light if(istype(W, /obj/item/weapon/light)) if(status != LIGHT_EMPTY) - user << "There is a [fitting] already inserted." + user << "There is a [fitting] already inserted!" return else src.add_fingerprint(user) var/obj/item/weapon/light/L = W if(istype(L, light_type)) status = L.status - user << "You insert the [L.name]." + user << "You insert the [L.name]." switchcount = L.switchcount rigged = L.rigged brightness = L.brightness @@ -361,7 +361,7 @@ if(on && rigged) explode() else - user << "This type of light requires a [fitting]." + user << "This type of light requires a [fitting]!" return // attempt to break the light @@ -376,7 +376,7 @@ user.visible_message("[user.name] smashed the light!", \ "You hit the light, and it smashes!", \ - "You hear a tinkle of breaking glass") + "You hear a tinkle of breaking glass.") if(on && (W.flags & CONDUCT)) //if(!user.mutations & COLD_RESISTANCE) if (prob(12)) @@ -384,14 +384,14 @@ broken() else - user.visible_message("[user.name] hits the light.") + user.visible_message("[user.name] hits the light!") // attempt to stick weapon into light socket else if(status == LIGHT_EMPTY) if(istype(W, /obj/item/weapon/screwdriver)) //If it's a screwdriver open it. playsound(src.loc, 'sound/items/Screwdriver.ogg', 75, 1) - user.visible_message("[user.name] opens [src]'s casing.", \ - "You open [src]'s casing.", "You hear a noise.") + user.visible_message("[user.name] opens [src]'s casing.", \ + "You open [src]'s casing.", "You hear a noise.") var/obj/machinery/light_construct/newlight = null switch(fitting) if("tube") @@ -409,7 +409,7 @@ qdel(src) return - user << "You stick \the [W] into the light socket!" + user << "You stick \the [W] into the light socket!" if(has_power() && (W.flags & CONDUCT)) var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread s.set_up(3, 1, src) @@ -452,7 +452,7 @@ return else if (status == LIGHT_OK||status == LIGHT_BURNED) user.do_attack_animation(src) - visible_message("[user.name] smashed the light!", "You hear a tinkle of breaking glass") + visible_message("[user.name] smashed the light!", "You hear a tinkle of breaking glass.") broken() return @@ -463,7 +463,7 @@ return else if (status == LIGHT_OK||status == LIGHT_BURNED) M.do_attack_animation(src) - visible_message("[M.name] smashed the light!", "You hear a tinkle of breaking glass") + visible_message("[M.name] smashed the light!", "You hear a tinkle of breaking glass.") broken() return // attack with hand - remove tube/bulb @@ -492,11 +492,11 @@ prot = 1 if(prot > 0) - user << "You remove the light [fitting]" + user << "You remove the light [fitting]." else if(istype(user) && user.dna.check_mutation(TK)) - user << "You telekinetically remove the light [fitting]." + user << "You telekinetically remove the light [fitting]." else - user << "You try to remove the light [fitting], but you burn your hand on it!" + user << "You try to remove the light [fitting], but you burn your hand on it!" var/obj/item/organ/limb/affecting = H.get_organ("[user.hand ? "l" : "r" ]_arm") if(affecting.take_damage( 0, 5 )) // 5 burn damage @@ -504,7 +504,7 @@ H.updatehealth() return // if burned, don't remove the light else - user << "You remove the light [fitting]." + user << "You remove the light [fitting]." // create a light tube/bulb item and put it in the user's hand var/obj/item/weapon/light/L = new light_type() L.status = status @@ -529,7 +529,7 @@ user << "There is no [fitting] in this light." return - user << "You telekinetically remove the light [fitting]." + user << "You telekinetically remove the light [fitting]." // create a light tube/bulb item and put it in the user's hand var/obj/item/weapon/light/L = new light_type() L.status = status @@ -681,7 +681,7 @@ if(istype(I, /obj/item/weapon/reagent_containers/syringe)) var/obj/item/weapon/reagent_containers/syringe/S = I - user << "You inject the solution into \the [src]." + user << "You inject the solution into \the [src]." if(S.reagents.has_reagent("plasma", 5)) @@ -707,7 +707,7 @@ /obj/item/weapon/light/proc/shatter() if(status == LIGHT_OK || status == LIGHT_BURNED) - src.visible_message("[name] shatters.","You hear a small glass object shatter.") + src.visible_message("[name] shatters.","You hear a small glass object shatter.") status = LIGHT_BROKEN force = 5 playsound(src.loc, 'sound/effects/Glasshit.ogg', 75, 1) diff --git a/code/modules/power/power.dm b/code/modules/power/power.dm index 36936dfdc80..da4cfbc7225 100644 --- a/code/modules/power/power.dm +++ b/code/modules/power/power.dm @@ -426,35 +426,10 @@ newavail = 0 /datum/powernet/proc/get_electrocute_damage() - switch(avail)/* - if (1300000 to INFINITY) - return min(rand(70,150),rand(70,150)) - if (750000 to 1300000) - return min(rand(50,115),rand(50,115)) - if (100000 to 750000-1) - return min(rand(35,101),rand(35,101)) - if (75000 to 100000-1) - return min(rand(30,95),rand(30,95)) - if (50000 to 75000-1) - return min(rand(25,80),rand(25,80)) - if (25000 to 50000-1) - return min(rand(20,70),rand(20,70)) - if (10000 to 25000-1) - return min(rand(20,65),rand(20,65)) - if (1000 to 10000-1) - return min(rand(10,20),rand(10,20))*/ - if (1000000 to INFINITY) - return min(rand(50,160),rand(50,160)) - if (200000 to 1000000) - return min(rand(25,80),rand(25,80)) - if (100000 to 200000)//Ave powernet - return min(rand(20,60),rand(20,60)) - if (50000 to 100000) - return min(rand(15,40),rand(15,40)) - if (1000 to 50000) - return min(rand(10,20),rand(10,20)) - else - return 0 + if(avail >= 1000) + return Clamp(round(avail/10000), 10, 90) + rand(-5,5) + else + return 0 //////////////////////////////////////////////// // Misc. diff --git a/code/modules/power/singularity/collector.dm b/code/modules/power/singularity/collector.dm index 79f25526b21..3202414ffb7 100644 --- a/code/modules/power/singularity/collector.dm +++ b/code/modules/power/singularity/collector.dm @@ -42,11 +42,11 @@ var/global/list/rad_collectors = list() if(!src.locked) toggle_power() user.visible_message("[user.name] turns the [src.name] [active? "on":"off"].", \ - "You turn the [src.name] [active? "on":"off"].") + "You turn the [src.name] [active? "on":"off"].") investigate_log("turned [active?"on":"off"] by [user.key]. [P?"Fuel: [round(P.air_contents.toxins/0.29)]%":"It is empty"].","singulo") return else - user << "The controls are locked!" + user << "The controls are locked!" return ..() @@ -59,10 +59,10 @@ var/global/list/rad_collectors = list() atmosanalyzer_scan(P.air_contents, user) else if(istype(W, /obj/item/weapon/tank/internals/plasma)) if(!src.anchored) - user << "The [src] needs to be secured to the floor first." + user << "The [src] needs to be secured to the floor first!" return 1 if(src.P) - user << "There's already a plasma tank loaded." + user << "There's already a plasma tank loaded!" return 1 user.drop_item() src.P = W @@ -74,32 +74,32 @@ var/global/list/rad_collectors = list() return 1 else if(istype(W, /obj/item/weapon/wrench)) if(P) - user << "Remove the plasma tank first." + user << "Remove the plasma tank first!" return 1 if(!anchored && !isinspace()) playsound(src.loc, 'sound/items/Ratchet.ogg', 75, 1) anchored = 1 user.visible_message("[user.name] secures the [src.name].", \ - "You secure the external bolts.", \ - "You hear a ratchet") + "You secure the external bolts.", \ + "You hear a ratchet.") connect_to_network() else if(anchored) playsound(src.loc, 'sound/items/Ratchet.ogg', 75, 1) anchored = 0 user.visible_message("[user.name] unsecures the [src.name].", \ - "You unsecure the external bolts.", \ - "You hear a ratchet") + "You unsecure the external bolts.", \ + "You hear a ratchet.") disconnect_from_network() else if(istype(W, /obj/item/weapon/card/id)||istype(W, /obj/item/device/pda)) if (src.allowed(user)) if(active) src.locked = !src.locked - user << "The controls are now [src.locked ? "locked." : "unlocked."]" + user << "You [src.locked ? "lock" : "unlock"] the controls." else src.locked = 0 //just in case it somehow gets locked - user << "The controls can only be locked when \the [src] is active." + user << "The controls can only be locked when \the [src] is active!" else - user << "Access denied!" + user << "Access denied." return 1 else ..() diff --git a/code/modules/power/singularity/containment_field.dm b/code/modules/power/singularity/containment_field.dm index 14062e210f5..ad420ffc5e6 100644 --- a/code/modules/power/singularity/containment_field.dm +++ b/code/modules/power/singularity/containment_field.dm @@ -94,8 +94,8 @@ user.Weaken(10) user.burn_skin(shock_damage) user.visible_message("[user.name] was shocked by the [src.name]!", \ - "You feel a powerful shock course through your body sending you flying!", \ - "You hear a heavy electrical crack.") + "You feel a powerful shock course through your body, sending you flying!", \ + "You hear a heavy electrical crack.") else if(issilicon(user)) if(prob(20)) @@ -103,7 +103,7 @@ user.take_overall_damage(0, shock_damage) user.visible_message("[user.name] was shocked by the [src.name]!", \ "Energy pulse detected, system damaged!", \ - "You hear an electrical crack.") + "You hear an electrical crack.") user.updatehealth() bump(user) diff --git a/code/modules/power/singularity/emitter.dm b/code/modules/power/singularity/emitter.dm index fe3691f5415..007d10b427b 100644 --- a/code/modules/power/singularity/emitter.dm +++ b/code/modules/power/singularity/emitter.dm @@ -30,7 +30,7 @@ if(usr.stat || !usr.canmove || usr.restrained()) return if (src.anchored) - usr << "It is fastened to the floor!" + usr << "It is fastened to the floor!" return 0 src.dir = turn(src.dir, 90) return 1 @@ -58,26 +58,26 @@ src.add_fingerprint(user) if(state == 2) if(!powernet) - user << "The emitter isn't connected to a wire." + user << "The emitter isn't connected to a wire!" return 1 if(!src.locked) if(src.active==1) src.active = 0 - user << "You turn off \the [src]." + user << "You turn off \the [src]." message_admins("Emitter turned off by [key_name(user, user.client)](?) in ([x],[y],[z] - JMP)",0,1) log_game("Emitter turned off by [user.ckey]([user]) in ([x],[y],[z])") investigate_log("turned off by [user.key]","singulo") else src.active = 1 - user << "You turn on \the [src]." + user << "You turn on \the [src]." src.shot_number = 0 src.fire_delay = 100 investigate_log("turned on by [user.key]","singulo") update_icon() else - user << "The controls are locked!" + user << "The controls are locked!" else - user << "The [src] needs to be firmly secured to the floor first." + user << "The [src] needs to be firmly secured to the floor first!" return 1 @@ -152,25 +152,25 @@ if(istype(W, /obj/item/weapon/wrench)) if(active) - user << "Turn off \the [src] first." + user << "Turn off \the [src] first!" return switch(state) if(0 && !isinspace()) state = 1 playsound(src.loc, 'sound/items/Ratchet.ogg', 75, 1) user.visible_message("[user.name] secures [src.name] to the floor.", \ - "You secure the external reinforcing bolts to the floor.", \ - "You hear a ratchet") + "You secure the external reinforcing bolts to the floor.", \ + "You hear a ratchet") src.anchored = 1 if(1) state = 0 playsound(src.loc, 'sound/items/Ratchet.ogg', 75, 1) user.visible_message("[user.name] unsecures [src.name] reinforcing bolts from the floor.", \ - "You undo the external reinforcing bolts.", \ - "You hear a ratchet") + "You undo the external reinforcing bolts.", \ + "You hear a ratchet.") src.anchored = 0 if(2) - user << "The [src.name] needs to be unwelded from the floor." + user << "The [src.name] needs to be unwelded from the floor!" return if(istype(W, /obj/item/weapon/weldingtool)) @@ -180,42 +180,42 @@ return switch(state) if(0) - user << "The [src.name] needs to be wrenched to the floor." + user << "The [src.name] needs to be wrenched to the floor!" if(1) if (WT.remove_fuel(0,user)) playsound(src.loc, 'sound/items/Welder2.ogg', 50, 1) user.visible_message("[user.name] starts to weld the [src.name] to the floor.", \ - "You start to weld \the [src] to the floor.", \ - "You hear welding") + "You start to weld \the [src] to the floor...", \ + "You hear welding.") if (do_after(user,20)) if(!src || !WT.isOn()) return state = 2 - user << "You weld \the [src] to the floor." + user << "You weld \the [src] to the floor." connect_to_network() if(2) if (WT.remove_fuel(0,user)) playsound(src.loc, 'sound/items/Welder2.ogg', 50, 1) user.visible_message("[user.name] starts to cut the [src.name] free from the floor.", \ - "You start to cut \the [src] free from the floor.", \ - "You hear welding") + "You start to cut \the [src] free from the floor...", \ + "You hear welding.") if (do_after(user,20)) if(!src || !WT.isOn()) return state = 1 - user << "You cut \the [src] free from the floor." + user << "You cut \the [src] free from the floor." disconnect_from_network() return if(istype(W, /obj/item/weapon/card/id) || istype(W, /obj/item/device/pda)) if(emagged) - user << "The lock seems to be broken." + user << "The lock seems to be broken!" return if(src.allowed(user)) if(active) src.locked = !src.locked - user << "The controls are now [src.locked ? "locked." : "unlocked."]" + user << "You [src.locked ? "lock" : "unlock"] the controls." else src.locked = 0 //just in case it somehow gets locked - user << "The controls can only be locked when \the [src] is online." + user << "The controls can only be locked when \the [src] is online!" else user << "Access denied." return @@ -227,4 +227,4 @@ if(!emagged) locked = 0 emagged = 1 - user.visible_message("[user.name] emags the [src.name].","You short out the lock.") + user.visible_message("[user.name] emags the [src.name].","You short out the lock.") diff --git a/code/modules/power/singularity/field_generator.dm b/code/modules/power/singularity/field_generator.dm index 4e05a8f837e..8cb5c1c626f 100644 --- a/code/modules/power/singularity/field_generator.dm +++ b/code/modules/power/singularity/field_generator.dm @@ -79,24 +79,24 @@ field_generator power level display if(state == 2) if(get_dist(src, user) <= 1)//Need to actually touch the thing to turn it on if(src.active >= 1) - user << "You are unable to turn off the [src.name] once it is online." + user << "You are unable to turn off the [src.name] once it is online!" return 1 else - user.visible_message("[user.name] turns on the [src.name]", \ - "You turn on the [src.name].", \ - "You hear heavy droning") + user.visible_message("[user.name] turns on the [src.name].", \ + "You turn on the [src.name].", \ + "You hear heavy droning.") turn_on() investigate_log("activated by [user.key].","singulo") src.add_fingerprint(user) else - user << "The [src] needs to be firmly secured to the floor first." + user << "The [src] needs to be firmly secured to the floor first!" return /obj/machinery/field/generator/attackby(obj/item/W, mob/user, params) if(active) - user << "The [src] needs to be off." + user << "The [src] needs to be off!" return else if(istype(W, /obj/item/weapon/wrench)) switch(state) @@ -104,47 +104,47 @@ field_generator power level display state = 1 playsound(src.loc, 'sound/items/Ratchet.ogg', 75, 1) user.visible_message("[user.name] secures [src.name] to the floor.", \ - "You secure the external reinforcing bolts to the floor.", \ - "You hear ratchet") + "You secure the external reinforcing bolts to the floor.", \ + "You hear ratchet.") src.anchored = 1 if(1) state = 0 playsound(src.loc, 'sound/items/Ratchet.ogg', 75, 1) user.visible_message("[user.name] unsecures [src.name] reinforcing bolts from the floor.", \ - "You undo the external reinforcing bolts.", \ - "You hear ratchet") + "You undo the external reinforcing bolts.", \ + "You hear ratchet.") src.anchored = 0 if(2) - user << "The [src.name] needs to be unwelded from the floor." + user << "The [src.name] needs to be unwelded from the floor!" return else if(istype(W, /obj/item/weapon/weldingtool)) var/obj/item/weapon/weldingtool/WT = W switch(state) if(0) - user << "The [src.name] needs to be wrenched to the floor." + user << "The [src.name] needs to be wrenched to the floor!" return if(1) if (WT.remove_fuel(0,user)) playsound(src.loc, 'sound/items/Welder2.ogg', 50, 1) user.visible_message("[user.name] starts to weld the [src.name] to the floor.", \ - "You start to weld \the [src] to the floor.", \ - "You hear welding") + "You start to weld \the [src] to the floor...", \ + "You hear welding.") if (do_after(user,20)) if(!src || !WT.isOn()) return state = 2 - user << "You weld the field generator to the floor." + user << "You weld the field generator to the floor." else return if(2) if (WT.remove_fuel(0,user)) playsound(src.loc, 'sound/items/Welder2.ogg', 50, 1) user.visible_message("[user.name] starts to cut the [src.name] free from the floor.", \ - "You start to cut \the [src] free from the floor.", \ - "You hear welding") + "You start to cut \the [src] free from the floor...", \ + "You hear welding.") if (do_after(user,20)) if(!src || !WT.isOn()) return state = 1 - user << "You cut \the [src] free from the floor." + user << "You cut \the [src] free from the floor." else return else @@ -211,7 +211,7 @@ field_generator power level display if(draw_power(round(power_draw/2,1))) return 1 else - visible_message("The [src.name] shuts down!", "You hear something shutting down") + visible_message("The [src.name] shuts down!", "You hear something shutting down.") turn_off() investigate_log("ran out of power and deactivated","singulo") src.power = 0 diff --git a/code/modules/power/singularity/generator.dm b/code/modules/power/singularity/generator.dm index f73e3bcfa7d..6d8e6763389 100644 --- a/code/modules/power/singularity/generator.dm +++ b/code/modules/power/singularity/generator.dm @@ -20,14 +20,14 @@ if(!anchored && !isinspace()) user.visible_message("[user.name] secures [src.name] to the floor.", \ - "You secure the [src.name] to the floor.", \ - "You hear a ratchet") + "You secure the [src.name] to the floor.", \ + "You hear a ratchet.") playsound(src.loc, 'sound/items/Ratchet.ogg', 75, 1) anchored = 1 else if(anchored) user.visible_message("[user.name] unsecures [src.name] from the floor.", \ - "You unsecure the [src.name] from the floor.", \ - "You hear a ratchet") + "You unsecure the [src.name] from the floor.", \ + "You hear a ratchet.") playsound(src.loc, 'sound/items/Ratchet.ogg', 75, 1) anchored = 0 return diff --git a/code/modules/power/singularity/particle_accelerator/particle_accelerator.dm b/code/modules/power/singularity/particle_accelerator/particle_accelerator.dm index 77972f145b6..9c21da66e97 100644 --- a/code/modules/power/singularity/particle_accelerator/particle_accelerator.dm +++ b/code/modules/power/singularity/particle_accelerator/particle_accelerator.dm @@ -218,7 +218,7 @@ So, hopefully this is helpful if any more icons are to be added/changed/wonderin "You add some wires.") temp_state++ else - user << "You need one length of cable to wire the [src.name]." + user << "You need one length of cable to wire the [src.name]!" return if(2) if(istype(O, /obj/item/weapon/wirecutters))//TODO:Shock user if its on? diff --git a/code/modules/power/smes.dm b/code/modules/power/smes.dm index f3ace39921c..599cc293ec7 100644 --- a/code/modules/power/smes.dm +++ b/code/modules/power/smes.dm @@ -101,25 +101,25 @@ return if(terminal) //is there already a terminal ? - user << "This SMES already have a power terminal!" + user << "This SMES already have a power terminal!" return if(!panel_open) //is the panel open ? - user << "You must open the maintenance panel first!" + user << "You must open the maintenance panel first!" return var/turf/T = get_turf(user) if (T.intact) //is the floor plating removed ? - user << "You must first remove the floor plating!" + user << "You must first remove the floor plating!" return var/obj/item/stack/cable_coil/C = I if(C.amount < 10) - user << "You need more wires." + user << "You need more wires!" return - user << "You start building the power terminal..." + user << "You start building the power terminal..." playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1) if(do_after(user, 20) && C.amount >= 10) @@ -132,8 +132,8 @@ C.use(10) user.visible_message(\ - "[user.name] has build a power terminal!",\ - "You build the power terminal.") + "[user.name] has built a power terminal.",\ + "You build the power terminal.") //build the terminal and link it to the network make_terminal(T) diff --git a/code/modules/power/solar.dm b/code/modules/power/solar.dm index fa2254fd807..36d4fe99f60 100644 --- a/code/modules/power/solar.dm +++ b/code/modules/power/solar.dm @@ -59,14 +59,14 @@ if(istype(W, /obj/item/weapon/crowbar)) playsound(src.loc, 'sound/machines/click.ogg', 50, 1) - user.visible_message("[user] begins to take the glass off the solar panel.") + user.visible_message("[user] begins to take the glass off the solar panel.", "You begin to take the glass off the solar panel...") if(do_after(user, 50)) var/obj/item/solar_assembly/S = locate() in src if(S) S.loc = src.loc S.give_glass() playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1) - user.visible_message("[user] takes the glass off the solar panel.") + user.visible_message("[user] takes the glass off the solar panel.", "You take the glass off the solar panel.") qdel(src) return else if (W) @@ -226,13 +226,13 @@ if(!anchored && isturf(loc)) if(istype(W, /obj/item/weapon/wrench)) anchored = 1 - user.visible_message("[user] wrenches the solar assembly into place.") + user.visible_message("[user] wrenches the solar assembly into place.", "You wrench the solar assembly into place.") playsound(src.loc, 'sound/items/Ratchet.ogg', 75, 1) return 1 else if(istype(W, /obj/item/weapon/wrench)) anchored = 0 - user.visible_message("[user] unwrenches the solar assembly from it's place.") + user.visible_message("[user] unwrenches the solar assembly from its place.", "You unwrench the solar assembly from its place.") playsound(src.loc, 'sound/items/Ratchet.ogg', 75, 1) return 1 @@ -241,13 +241,13 @@ if(S.use(2)) glass_type = W.type playsound(src.loc, 'sound/machines/click.ogg', 50, 1) - user.visible_message("[user] places the glass on the solar assembly.") + user.visible_message("[user] places the glass on the solar assembly.", "You place the glass on the solar assembly.") if(tracker) new /obj/machinery/power/tracker(get_turf(src), src) else new /obj/machinery/power/solar(get_turf(src), src) else - user << "You need two sheets of glass to put them into a solar panel." + user << "You need two sheets of glass to put them into a solar panel!" return return 1 @@ -256,13 +256,13 @@ tracker = 1 user.drop_item() qdel(W) - user.visible_message("[user] inserts the electronics into the solar assembly.") + user.visible_message("[user] inserts the electronics into the solar assembly.", "You insert the electronics into the solar assembly.") return 1 else if(istype(W, /obj/item/weapon/crowbar)) new /obj/item/weapon/tracker_electronics(src.loc) tracker = 0 - user.visible_message("[user] takes out the electronics from the solar assembly.") + user.visible_message("[user] takes out the electronics from the solar assembly.", "You take out the electronics from the solar assembly.") return 1 ..() diff --git a/code/modules/power/supermatter/supermatter.dm b/code/modules/power/supermatter/supermatter.dm index 6e926c209f9..a04bf8dda44 100644 --- a/code/modules/power/supermatter/supermatter.dm +++ b/code/modules/power/supermatter/supermatter.dm @@ -214,18 +214,18 @@ if(Adjacent(user)) return attack_hand(user) else - user << "You attempt to interface with the control circuits but find they are not connected to your network. Maybe in a future firmware update." + user << "You attempt to interface with the control circuits but find they are not connected to your network. Maybe in a future firmware update." return /obj/machinery/power/supermatter_shard/attack_ai(mob/user as mob) - user << "You attempt to interface with the control circuits but find they are not connected to your network. Maybe in a future firmware update." + user << "You attempt to interface with the control circuits but find they are not connected to your network. Maybe in a future firmware update." /obj/machinery/power/supermatter_shard/attack_hand(mob/living/user as mob) if(!istype(user)) return - user.visible_message("\The [user] reaches out and touches \the [src], inducing a resonance... \his body starts to glow and bursts into flames before flashing into ash.",\ - "You reach out and touch \the [src]. Everything starts burning and all you can hear is ringing. Your last thought is \"That was not a wise decision.\"",\ - "You hear an unearthly noise as a wave of heat washes over you.") + user.visible_message("\The [user] reaches out and touches \the [src], inducing a resonance... \his body starts to glow and bursts into flames before flashing into ash.",\ + "You reach out and touch \the [src]. Everything starts burning and all you can hear is ringing. Your last thought is \"That was not a wise decision.\"",\ + "You hear an unearthly noise as a wave of heat washes over you.") playsound(get_turf(src), 'sound/effects/supermatter.ogg', 50, 1) @@ -242,9 +242,9 @@ return if(user.drop_item(W)) Consume(W) - user.visible_message("As [user] touches \the [src] with \a [W], silence fills the room...",\ - "You touch \the [src] with \the [W], and everything suddenly goes silent.\"\n\The [W] flashes into dust as you flinch away from \the [src].",\ - "Everything suddenly goes silent.") + user.visible_message("As [user] touches \the [src] with \a [W], silence fills the room...",\ + "You touch \the [src] with \the [W], and everything suddenly goes silent.\"\n\The [W] flashes into dust as you flinch away from \the [src].",\ + "Everything suddenly goes silent.") playsound(get_turf(src), 'sound/effects/supermatter.ogg', 50, 1) @@ -253,12 +253,12 @@ /obj/machinery/power/supermatter_shard/Bumped(atom/AM as mob|obj) if(istype(AM, /mob/living)) - AM.visible_message("\The [AM] slams into \the [src] inducing a resonance... \his body starts to glow and catch flame before flashing into ash.",\ - "You slam into \the [src] as your ears are filled with unearthly ringing. Your last thought is \"Oh, fuck.\"",\ - "You hear an unearthly noise as a wave of heat washes over you.") + AM.visible_message("\The [AM] slams into \the [src] inducing a resonance... \his body starts to glow and catch flame before flashing into ash.",\ + "You slam into \the [src] as your ears are filled with unearthly ringing. Your last thought is \"Oh, fuck.\"",\ + "You hear an unearthly noise as a wave of heat washes over you.") else if(isobj(AM) && !istype(AM, /obj/effect)) - AM.visible_message("\The [AM] smacks into \the [src] and rapidly flashes to ash.",\ - "You hear a loud crack as you are washed with a wave of heat.") + AM.visible_message("\The [AM] smacks into \the [src] and rapidly flashes to ash.",\ + "You hear a loud crack as you are washed with a wave of heat.") else return @@ -286,7 +286,7 @@ L.irradiate(rads) investigate_log("has irradiated [L] after consuming [AM].", "supermatter") if(L in view()) - L.show_message("As \the [src] slowly stops resonating, you find your skin covered in new radiation burns.", 1,\ - "The unearthly ringing subsides and you notice you have new radiation burns.", 2) + L.show_message("As \the [src] slowly stops resonating, you find your skin covered in new radiation burns.", 1,\ + "The unearthly ringing subsides and you notice you have new radiation burns.", 2) else - L.show_message("You hear an uneartly ringing and notice your skin is covered in fresh radiation burns.", 2) + L.show_message("You hear an uneartly ringing and notice your skin is covered in fresh radiation burns.", 2) diff --git a/code/modules/power/terminal.dm b/code/modules/power/terminal.dm index 834f7e3f9b3..724de7a1b41 100644 --- a/code/modules/power/terminal.dm +++ b/code/modules/power/terminal.dm @@ -52,12 +52,12 @@ if(istype(loc, /turf/simulated)) var/turf/simulated/T = loc if(T.intact) - user << "You must first expose the power terminal!" + user << "You must first expose the power terminal!" return if(master && master.can_terminal_dismantle()) - user.visible_message("[user.name] dismantles the power terminal from [master].", \ - "You begin to cut the cables...") + user.visible_message("[user.name] dismantles the power terminal from [master].", \ + "You begin to cut the cables...") playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1) if(do_after(user, 50)) diff --git a/code/modules/power/tracker.dm b/code/modules/power/tracker.dm index 9b66f6afb91..2ce74ae88dd 100644 --- a/code/modules/power/tracker.dm +++ b/code/modules/power/tracker.dm @@ -62,14 +62,14 @@ if(istype(W, /obj/item/weapon/crowbar)) playsound(src.loc, 'sound/machines/click.ogg', 50, 1) - user.visible_message("[user] begins to take the glass off the solar tracker.") + user.visible_message("[user] begins to take the glass off the solar tracker.", "You begin to take the glass off the solar tracker...") if(do_after(user, 50)) var/obj/item/solar_assembly/S = locate() in src if(S) S.loc = src.loc S.give_glass() playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1) - user.visible_message("[user] takes the glass off the tracker.") + user.visible_message("[user] takes the glass off the tracker.", "You take the glass off the tracker.") qdel(src) return ..() diff --git a/code/modules/projectiles/ammunition.dm b/code/modules/projectiles/ammunition.dm index 5ff242be8aa..f2055dc64a3 100644 --- a/code/modules/projectiles/ammunition.dm +++ b/code/modules/projectiles/ammunition.dm @@ -51,7 +51,7 @@ box.update_icon() user << "You collect [boolets] shell\s. [box] now contains [box.stored_ammo.len] shell\s." else - user << "You fail to collect anything." + user << "You fail to collect anything!" //Boxes of ammo /obj/item/ammo_box diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm index 57606d89072..4cc38cb4fc2 100644 --- a/code/modules/projectiles/gun.dm +++ b/code/modules/projectiles/gun.dm @@ -91,7 +91,7 @@ if(!message) return if(pointblank) - user.visible_message("[user] fires [src] point blank at [pbtarget]!", "You fire [src] point blank at [pbtarget]!", "You hear a [istype(src, /obj/item/weapon/gun/energy) ? "laser blast" : "gunshot"]!") + user.visible_message("[user] fires [src] point blank at [pbtarget]!", "You fire [src] point blank at [pbtarget]!", "You hear a [istype(src, /obj/item/weapon/gun/energy) ? "laser blast" : "gunshot"]!") else user.visible_message("[user] fires [src]!", "You fire [src]!", "You hear a [istype(src, /obj/item/weapon/gun/energy) ? "laser blast" : "gunshot"]!") @@ -119,7 +119,7 @@ if(istype(user, /mob/living)) var/mob/living/M = user if (M.disabilities & CLUMSY && prob(40)) - user << "You shoot yourself in the foot with \the [src]!" + user << "You shoot yourself in the foot with \the [src]!" process_fire(user,user,0,params) M.drop_item() return @@ -134,7 +134,7 @@ /obj/item/weapon/gun/proc/can_trigger_gun(mob/living/carbon/user) if (!user.IsAdvancedToolUser()) - user << "You don't have the dexterity to do this!" + user << "You don't have the dexterity to do this!" return 0 if(!handle_pins(user)) @@ -143,10 +143,10 @@ if(trigger_guard) if(istype(user) && user.dna) if(user.dna.check_mutation(HULK)) - user << "Your meaty finger is much too large for the trigger guard!" + user << "Your meaty finger is much too large for the trigger guard!" return 0 if(NOGUNS in user.dna.species.specflags) - user << "Your fingers don't fit in the trigger guard!" + user << "Your fingers don't fit in the trigger guard!" return 0 return 1 @@ -159,7 +159,7 @@ pin.auth_fail(user) return 0 else - user << "\The [src]'s trigger is locked. This weapon doesn't have a firing pin installed!" + user << "\The [src]'s trigger is locked. This weapon doesn't have a firing pin installed!" return 0 @@ -232,7 +232,7 @@ if(can_flashlight) if(!F) if(user.l_hand != src && user.r_hand != src) - user << "You'll need [src] in your hands to do that." + user << "You'll need [src] in your hands to do that!" return user.drop_item() user << "You click [S] into place on [src]." @@ -247,7 +247,7 @@ if(istype(A, /obj/item/weapon/screwdriver)) if(F) if(user.l_hand != src && user.r_hand != src) - user << "You'll need [src] in your hands to do that." + user << "You'll need [src] in your hands to do that!" return for(var/obj/item/device/flashlight/seclite/S in src) user << "You unscrew the seclite from [src]." @@ -275,7 +275,7 @@ var/mob/living/carbon/human/user = usr if(!isturf(user.loc)) - user << "You cannot turn the light on while in this [user.loc]." + user << "You cannot turn the light on while in this [user.loc]!" F.on = !F.on user << "You toggle the gunlight [F.on ? "on":"off"]." diff --git a/code/modules/projectiles/guns/energy.dm b/code/modules/projectiles/guns/energy.dm index d342e89b0d4..b728fc3a886 100644 --- a/code/modules/projectiles/guns/energy.dm +++ b/code/modules/projectiles/guns/energy.dm @@ -67,7 +67,7 @@ fire_sound = shot.fire_sound fire_delay = shot.delay if (shot.select_name) - user << "[src] is now set to [shot.select_name]." + user << "[src] is now set to [shot.select_name]." update_icon() return diff --git a/code/modules/projectiles/guns/magic/wand.dm b/code/modules/projectiles/guns/magic/wand.dm index ad7246f8359..20cf03caaa3 100644 --- a/code/modules/projectiles/guns/magic/wand.dm +++ b/code/modules/projectiles/guns/magic/wand.dm @@ -48,7 +48,7 @@ /obj/item/weapon/gun/magic/wand/proc/zap_self(mob/living/user as mob) - user.visible_message("[user] zaps \himself with [src]!") + user.visible_message("[user] zaps \himself with [src].") playsound(user, fire_sound, 50, 1) user.attack_log += "\[[time_stamp()]\] [user]/[user.ckey] zapped \himself with a [src]" diff --git a/code/modules/projectiles/guns/projectile.dm b/code/modules/projectiles/guns/projectile.dm index 1281adc83e5..66184119b45 100644 --- a/code/modules/projectiles/guns/projectile.dm +++ b/code/modules/projectiles/guns/projectile.dm @@ -79,10 +79,10 @@ update_icon() return else - user << "[src] already has a suppressor." + user << "[src] already has a suppressor!" return else - user << "You can't seem to figure out how to fit [S] on [src]." + user << "You can't seem to figure out how to fit [S] on [src]!" return return 0 diff --git a/code/modules/projectiles/guns/projectile/automatic.dm b/code/modules/projectiles/guns/projectile/automatic.dm index 7639fbaca5f..fdec6f437b9 100644 --- a/code/modules/projectiles/guns/projectile/automatic.dm +++ b/code/modules/projectiles/guns/projectile/automatic.dm @@ -136,7 +136,7 @@ /obj/item/weapon/gun/projectile/automatic/l6_saw/afterattack(atom/target as mob|obj|turf, mob/living/user as mob|obj, flag, params) //what I tried to do here is just add a check to see if the cover is open or not and add an icon_state change because I can't figure out how c-20rs do it with overlays if(cover_open) - user << "[src]'s cover is open! Close it before firing!" + user << "[src]'s cover is open! Close it before firing!" else ..() update_icon() @@ -160,7 +160,7 @@ /obj/item/weapon/gun/projectile/automatic/l6_saw/attackby(var/obj/item/A as obj, mob/user as mob, params) if(!cover_open) - user << "[src]'s cover is closed! You can't insert a new mag!" + user << "[src]'s cover is closed! You can't insert a new mag." return ..() @@ -177,23 +177,19 @@ burst_size = 3 fire_delay = 2 pin = /obj/item/device/firing_pin/implant/pindicate - /obj/item/weapon/gun/projectile/automatic/m90/unrestricted pin = /obj/item/device/firing_pin - /obj/item/weapon/gun/projectile/automatic/m90/New() ..() underbarrel = new /obj/item/weapon/gun/projectile/revolver/grenadelauncher(src) update_icon() return - /obj/item/weapon/gun/projectile/automatic/m90/afterattack(var/atom/target, var/mob/living/user, flag, params) if(select == 2) underbarrel.afterattack(target, user, flag, params) else ..() return - /obj/item/weapon/gun/projectile/automatic/m90/attackby(var/obj/item/A, mob/user, params) if(istype(A, /obj/item/ammo_casing)) if(istype(A, underbarrel.magazine.ammo_type)) @@ -201,7 +197,6 @@ underbarrel.attackby(A, user, params) else ..() - /obj/item/weapon/gun/projectile/automatic/m90/update_icon() ..() overlays.Cut() @@ -214,7 +209,6 @@ overlays += "[initial(icon_state)]gren" icon_state = "[initial(icon_state)][magazine ? "" : "-e"]" return - /obj/item/weapon/gun/projectile/automatic/m90/burst_select() var/mob/living/carbon/human/user = usr switch(select) @@ -246,4 +240,17 @@ fire_sound = 'sound/weapons/Gunshot_smg.ogg' can_suppress = 0 burst_size = 4 + fire_delay = 1 + +/obj/item/weapon/gun/projectile/automatic/ar + name = "ARG" + desc = "A robust assault rile used by Nanotrasen fighting forces." + icon_state = "arg" + item_state = "arg" + slot_flags = 0 + origin_tech = "combat=5;materials=1" + mag_type = /obj/item/ammo_box/magazine/m556 + fire_sound = 'sound/weapons/Gunshot_smg.ogg' + can_suppress = 0 + burst_size = 3 fire_delay = 1 \ No newline at end of file diff --git a/code/modules/projectiles/guns/projectile/revolver.dm b/code/modules/projectiles/guns/projectile/revolver.dm index 0073e04b2fe..471b5401196 100644 --- a/code/modules/projectiles/guns/projectile/revolver.dm +++ b/code/modules/projectiles/guns/projectile/revolver.dm @@ -39,7 +39,7 @@ if (num_unloaded) user << "You unload [num_unloaded] shell\s from [src]." else - user << "[src] is empty." + user << "[src] is empty!" /obj/item/weapon/gun/projectile/revolver/can_shoot() return get_ammo(0,0) @@ -77,7 +77,7 @@ if(magazine.caliber != initial(magazine.caliber)) if(prob(70 - (magazine.ammo_count() * 10))) //minimum probability of 10, maximum of 60 playsound(user, fire_sound, 50, 1) - user << "[src] blows up in your face!" + user << "[src] blows up in your face!" user.take_organ_damage(0,20) user.drop_item() qdel(src) @@ -88,31 +88,31 @@ ..() if(istype(A, /obj/item/weapon/screwdriver)) if(magazine.caliber == "38") - user << "You begin to reinforce the barrel of [src]." + user << "You begin to reinforce the barrel of [src]..." if(magazine.ammo_count()) afterattack(user, user) //you know the drill - user.visible_message("[src] goes off!", "[src] goes off in your face!") + user.visible_message("[src] goes off!", "[src] goes off in your face!") return if(do_after(user, 30)) if(magazine.ammo_count()) - user << "You can't modify it!" + user << "You can't modify it!" return magazine.caliber = "357" desc = "The barrel and chamber assembly seems to have been modified." - user << "You reinforce the barrel of [src]! Now it will fire .357 rounds." + user << "You reinforce the barrel of [src]. Now it will fire .357 rounds." else - user << "You begin to revert the modifications to [src]." + user << "You begin to revert the modifications to [src]..." if(magazine.ammo_count()) afterattack(user, user) //and again - user.visible_message("[src] goes off!", "[src] goes off in your face!") + user.visible_message("[src] goes off!", "[src] goes off in your face!") return if(do_after(user, 30)) if(magazine.ammo_count()) - user << "You can't modify it!" + user << "You can't modify it!" return magazine.caliber = "38" desc = initial(desc) - user << "You remove the modifications on [src]! Now it will fire .38 rounds." + user << "You remove the modifications on [src]. Now it will fire .38 rounds." /obj/item/weapon/gun/projectile/revolver/mateba @@ -147,9 +147,9 @@ /obj/item/weapon/gun/projectile/revolver/russian/attackby(var/obj/item/A as obj, mob/user as mob, params) var/num_loaded = ..() if(num_loaded) - user.visible_message("[user] loads a single bullet into the revolver and spins the chamber.", "You load a single bullet into the chamber and spin it.") + user.visible_message("[user] loads a single bullet into the revolver and spins the chamber.", "You load a single bullet into the chamber and spin it.") else - user.visible_message("[user] spins the chamber of the revolver.", "You spin the revolver's chamber.") + user.visible_message("[user] spins the chamber of the revolver.", "You spin the revolver's chamber.") if(get_ammo() > 0) Spin() update_icon() @@ -158,7 +158,7 @@ /obj/item/weapon/gun/projectile/revolver/russian/attack_self(mob/user as mob) if(!spun && can_shoot()) - user.visible_message("[user] spins the chamber of the revolver.", "You spin the revolver's chamber.") + user.visible_message("[user] spins the chamber of the revolver.", "You spin the revolver's chamber.") Spin() else var/num_unloaded = 0 @@ -170,7 +170,7 @@ CB.update_icon() num_unloaded++ if (num_unloaded) - user << "You unload [num_unloaded] shell\s from [src]!" + user << "You unload [num_unloaded] shell\s from [src]." else user << "[src] is empty." @@ -185,13 +185,13 @@ return if(target != user) if(ismob(target)) - user << "A mechanism prevents you from shooting anyone but yourself." + user << "A mechanism prevents you from shooting anyone but yourself!" return if(ishuman(user)) var/mob/living/carbon/human/H = user if(!spun) - user << "You need to spin the revolver's chamber first." + user << "You need to spin the revolver's chamber first!" return spun = 0 @@ -204,9 +204,9 @@ var/limb_name = affecting.getDisplayName() if(affecting.name == "head" || affecting.name == "eyes" || affecting.name == "mouth") user.apply_damage(300, BRUTE, affecting) - user.visible_message("[user.name] fires [src] at \his head!", "You fire [src] at your head!", "You hear a gunshot!") + user.visible_message("[user.name] fires [src] at \his head!", "You fire [src] at your head!", "You hear a gunshot!") else - user.visible_message("[user.name] cowardly fires [src] at \his [limb_name]!", "You cowardly fire [src] at your [limb_name]!", "You hear a gunshot!") + user.visible_message("[user.name] cowardly fires [src] at \his [limb_name]!", "You cowardly fire [src] at your [limb_name]!", "You hear a gunshot!") return user.visible_message("*click*") diff --git a/code/modules/projectiles/guns/projectile/shotgun.dm b/code/modules/projectiles/guns/projectile/shotgun.dm index 0baee44780b..e5d5b462c6d 100644 --- a/code/modules/projectiles/guns/projectile/shotgun.dm +++ b/code/modules/projectiles/guns/projectile/shotgun.dm @@ -175,7 +175,7 @@ if (num_unloaded) user << "You break open \the [src] and unload [num_unloaded] shell\s." else - user << "[src] is empty." + user << "[src] is empty!" // IMPROVISED SHOTGUN // @@ -204,7 +204,7 @@ user << "You tie the lengths of cable to the shotgun, making a sling." update_icon() else - user << "You need at least ten lengths of cable if you want to make a sling." + user << "You need at least ten lengths of cable if you want to make a sling!" return // Sawing guns related procs // @@ -224,13 +224,13 @@ /obj/item/weapon/gun/projectile/proc/sawoff(mob/user as mob) if(sawn_state == SAWN_OFF) - user << "\The [src] is already shortened." + user << "\The [src] is already shortened!" return if(sawn_state == SAWN_SAWING) return - user.visible_message("[user] begins to shorten \the [src].", "You begin to shorten \the [src].") + user.visible_message("[user] begins to shorten \the [src].", "You begin to shorten \the [src]...") //if there's any live ammo inside the gun, makes it go off if(blow_up(user)) @@ -240,7 +240,7 @@ sawn_state = SAWN_SAWING if(do_after(user, 30)) - user.visible_message("[user] shortens \the [src]!", "You shorten \the [src]!") + user.visible_message("[user] shortens \the [src]!", "You shorten \the [src].") name = "sawn-off [src.name]" desc = sawn_desc icon_state = "[icon_state]-sawn" diff --git a/code/modules/projectiles/guns/syringe_gun.dm b/code/modules/projectiles/guns/syringe_gun.dm index 0b08405cdcc..2fb641d6c56 100644 --- a/code/modules/projectiles/guns/syringe_gun.dm +++ b/code/modules/projectiles/guns/syringe_gun.dm @@ -47,7 +47,7 @@ /obj/item/weapon/gun/syringe/attack_self(mob/living/user as mob) if(!syringes.len) - user << "[src] is empty." + user << "[src] is empty!" return 0 var/obj/item/weapon/reagent_containers/syringe/S = syringes[syringes.len] @@ -56,7 +56,7 @@ S.loc = user.loc syringes.Remove(S) - user << "You unload [S] from \the [src]!" + user << "You unload [S] from \the [src]." return 1 @@ -69,7 +69,7 @@ A.loc = src return 1 else - usr << "[src] cannot hold more syringes." + usr << "[src] cannot hold more syringes!" return 0 /obj/item/weapon/gun/syringe/rapidsyringe diff --git a/code/modules/projectiles/projectile.dm b/code/modules/projectiles/projectile.dm index 4a7438fe954..37a75e268dd 100644 --- a/code/modules/projectiles/projectile.dm +++ b/code/modules/projectiles/projectile.dm @@ -62,7 +62,7 @@ organ_hit_text = " in \the [parse_zone(def_zone)]" if(suppressed) playsound(loc, hitsound, 5, 1, -1) - L << "You've been shot by \a [src][organ_hit_text]!" + L << "You're shot by \a [src][organ_hit_text]!" else if(hitsound) var/volume = vol_by_damage() diff --git a/code/modules/reagents/Chemistry-Machinery.dm b/code/modules/reagents/Chemistry-Machinery.dm index e49cb61e992..4fd76334aab 100644 --- a/code/modules/reagents/Chemistry-Machinery.dm +++ b/code/modules/reagents/Chemistry-Machinery.dm @@ -153,13 +153,13 @@ return if(src.beaker) - user << "A beaker is already loaded into the machine." + user << "A beaker is already loaded into the machine!" return src.beaker = B user.drop_item() B.loc = src - user << "You add the beaker to the machine!" + user << "You add the beaker to the machine." SSnano.update_uis(src) // update all UIs attached to src if(!icon_beaker) @@ -286,23 +286,23 @@ if(istype(B, /obj/item/weapon/reagent_containers/glass)) if(src.beaker) - user << "A beaker is already loaded into the machine." + user << "A beaker is already loaded into the machine!" return src.beaker = B user.drop_item() B.loc = src - user << "You add the beaker to the machine!" + user << "You add the beaker to the machine." src.updateUsrDialog() icon_state = "mixer1" else if(!condi && istype(B, /obj/item/weapon/storage/pill_bottle)) if(src.loaded_pill_bottle) - user << "A pill bottle is already loaded into the machine." + user << "A pill bottle is already loaded into the machine!" return src.loaded_pill_bottle = B user.drop_item() B.loc = src - user << "You add the pill bottle into the dispenser slot!" + user << "You add the pill bottle into the dispenser slot." src.updateUsrDialog() return @@ -610,28 +610,28 @@ default_deconstruction_crowbar(B) return 1 else - user << "You can't use the [src.name] while it's panel is opened." + user << "You can't use the [src.name] while it's panel is opened!" return 1 if(istype(B, /obj/item/weapon/reagent_containers/glass)) if(src.beaker) - user << "A beaker is already loaded into the machine." + user << "A beaker is already loaded into the machine!" return src.beaker = B user.drop_item() B.loc = src - user << "You add the beaker to the machine!" + user << "You add the beaker to the machine." src.updateUsrDialog() icon_state = "mixer1" else if(!condi && istype(B, /obj/item/weapon/storage/pill_bottle)) if(src.loaded_pill_bottle) - user << "A pill bottle is already loaded into the machine." + user << "A pill bottle is already loaded into the machine!" return src.loaded_pill_bottle = B user.drop_item() B.loc = src - user << "You add the pill bottle into the dispenser slot!" + user << "You add the pill bottle into the dispenser slot." src.updateUsrDialog() return @@ -915,13 +915,13 @@ obj/machinery/computer/pandemic/proc/replicator_cooldown(var/waittime) if(istype(I, /obj/item/weapon/reagent_containers/glass)) if(stat & (NOPOWER|BROKEN)) return if(src.beaker) - user << "A beaker is already loaded into the machine." + user << "A beaker is already loaded into the machine!" return src.beaker = I user.drop_item() I.loc = src - user << "You add the beaker to the machine!" + user << "You add the beaker to the machine." src.updateUsrDialog() icon_state = "mixer1" @@ -1062,7 +1062,7 @@ obj/machinery/computer/pandemic/proc/replicator_cooldown(var/waittime) if(istype(O, /obj/item/weapon/reagent_containers/food/snacks/grown)) var/obj/item/weapon/reagent_containers/food/snacks/grown/G = O if(!G.dry) - user << "You must dry that first!" + user << "You must dry that first!" return 1 if(holdingitems && holdingitems.len >= limit) @@ -1077,17 +1077,17 @@ obj/machinery/computer/pandemic/proc/replicator_cooldown(var/waittime) B.remove_from_storage(G, src) holdingitems += G if(holdingitems && holdingitems.len >= limit) //Sanity checking so the blender doesn't overfill - user << "You fill the All-In-One grinder to the brim." + user << "You fill the All-In-One grinder to the brim." break if(!O.contents.len) - user << "You empty the plant bag into the All-In-One grinder." + user << "You empty the plant bag into the All-In-One grinder." src.updateUsrDialog() return 0 if (!is_type_in_list(O, blend_items) && !is_type_in_list(O, juice_items)) - user << "Cannot refine into a reagent." + user << "Cannot refine into a reagent!" return 1 user.unEquip(O) @@ -1441,13 +1441,13 @@ obj/machinery/computer/pandemic/proc/replicator_cooldown(var/waittime) if(istype(I, /obj/item/weapon/reagent_containers/glass)) if(beaker) - user << "A beaker is already loaded into the machine." + user << "A beaker is already loaded into the machine!" return if(user.drop_item()) beaker = I I.loc = src - user << "You add the beaker to the machine!" + user << "You add the beaker to the machine." icon_state = "mixer1b" SSnano.update_uis(src) diff --git a/code/modules/reagents/Chemistry-Reagents/Blob-Reagents.dm b/code/modules/reagents/Chemistry-Reagents/Blob-Reagents.dm index 02c41c45711..e6cf3d2eca2 100644 --- a/code/modules/reagents/Chemistry-Reagents/Blob-Reagents.dm +++ b/code/modules/reagents/Chemistry-Reagents/Blob-Reagents.dm @@ -73,20 +73,6 @@ datum/reagent/blob/lung_destroying_toxin/reaction_mob(var/mob/living/M as mob, v M << "The blob strikes you, and your lungs feel heavy and weak!" // Special Reagents -datum/reagent/blob/acid - name = "Acidic Liquid" - id = "blob_acid" - description = "" - color = "#BD80F4" - -datum/reagent/blob/acid/reaction_mob(var/mob/living/M as mob, var/method=TOUCH, var/volume, var/show_message = 1) - if(method == TOUCH) - if(prob(50)) - M.acid_act(5,1,5) - if(show_message) - M << "The blob's tendrils melt through your equipment!" - M.apply_damage(10, BRUTE) - datum/reagent/blob/radioactive_liquid name = "Radioactive Liquid" id = "radioactive_liquid" @@ -187,7 +173,7 @@ datum/reagent/blob/spacedrugs/reaction_mob(var/mob/living/M as mob, var/method=T /proc/reagent_vortex(var/mob/living/M as mob, var/setting_type) var/turf/pull = get_turf(M) - for(var/atom/movable/X in orange(4,pull)) + for(var/atom/movable/X in range(4,pull)) if(istype(X, /atom/movable)) if((X) && !X.anchored) if(setting_type) diff --git a/code/modules/reagents/Chemistry-Reagents/Medicine-Reagents.dm b/code/modules/reagents/Chemistry-Reagents/Medicine-Reagents.dm index 700315b3e36..9c0bbff9395 100644 --- a/code/modules/reagents/Chemistry-Reagents/Medicine-Reagents.dm +++ b/code/modules/reagents/Chemistry-Reagents/Medicine-Reagents.dm @@ -162,7 +162,6 @@ datum/reagent/medicine/silver_sulfadiazine description = "On touch, quickly heals burn damage. Basic anti-burn healing drug. On ingestion, deals minor toxin damage." reagent_state = LIQUID color = "#C8A5DC" - metabolization_rate = 5 * REAGENTS_METABOLISM datum/reagent/medicine/silver_sulfadiazine/reaction_mob(var/mob/living/M as mob, var/method=TOUCH, var/volume, var/show_message = 1) if(iscarbon(M)) @@ -179,7 +178,7 @@ datum/reagent/medicine/silver_sulfadiazine/reaction_mob(var/mob/living/M as mob, return datum/reagent/medicine/silver_sulfadiazine/on_mob_life(var/mob/living/M as mob) - M.adjustFireLoss(-1*REM) + M.adjustFireLoss(-2*REM) ..() return @@ -189,7 +188,6 @@ datum/reagent/medicine/styptic_powder description = "On touch, quickly heals brute damage. Basic anti-brute healing drug. On ingestion, deals minor toxin damage." reagent_state = LIQUID color = "#C8A5DC" - metabolization_rate = 5 * REAGENTS_METABOLISM datum/reagent/medicine/styptic_powder/reaction_mob(var/mob/living/M as mob, var/method=TOUCH, var/volume, var/show_message = 1) if(iscarbon(M)) @@ -251,10 +249,10 @@ datum/reagent/medicine/charcoal metabolization_rate = 0.5 * REAGENTS_METABOLISM datum/reagent/medicine/charcoal/on_mob_life(var/mob/living/M as mob) - M.adjustToxLoss(-1.5*REM) + M.adjustToxLoss(-2*REM) for(var/datum/reagent/R in M.reagents.reagent_list) if(R != src) - M.reagents.remove_reagent(R.id,0.5) + M.reagents.remove_reagent(R.id,1) ..() return diff --git a/code/modules/reagents/Chemistry-Recipes/Slime_extracts.dm b/code/modules/reagents/Chemistry-Recipes/Slime_extracts.dm index 732d6c39b48..cf323dd09e8 100644 --- a/code/modules/reagents/Chemistry-Recipes/Slime_extracts.dm +++ b/code/modules/reagents/Chemistry-Recipes/Slime_extracts.dm @@ -151,7 +151,7 @@ /obj/item/weapon/reagent_containers/food/snacks/meat, /obj/item/weapon/reagent_containers/food/snacks/soup, /obj/item/weapon/reagent_containers/food/snacks/grown, - /obj/item/weapon/reagent_containers/food/snacks/grown/mushroom + /obj/item/weapon/reagent_containers/food/snacks/grown/mushroom, ) blocked |= typesof(/obj/item/weapon/reagent_containers/food/snacks/customizable) @@ -185,8 +185,9 @@ /datum/chemical_reaction/slimebork2/on_reaction(var/datum/reagents/holder) feedback_add_details("slime_cores_used","[replacetext(name," ","_")]") + var/list/blocked = list(/obj/item/weapon/reagent_containers/food/drinks) - var/list/borks = typesof(/obj/item/weapon/reagent_containers/food/drinks) - /obj/item/weapon/reagent_containers/food/drinks + var/list/borks = typesof(/obj/item/weapon/reagent_containers/food/drinks) - blocked // BORK BORK BORK playsound(get_turf(holder.my_atom), 'sound/effects/phasein.ogg', 100, 1) diff --git a/code/modules/reagents/reagent_containers/borghydro.dm b/code/modules/reagents/reagent_containers/borghydro.dm index 7e2e63aba62..f4304ba596a 100644 --- a/code/modules/reagents/reagent_containers/borghydro.dm +++ b/code/modules/reagents/reagent_containers/borghydro.dm @@ -123,7 +123,7 @@ Borg Hypospray empty = 0 if(empty) - usr << "It is currently empty. Allow some time for the internal syntheszier to produce more." + usr << "It is currently empty! Allow some time for the internal syntheszier to produce more." /* Borg Shaker */ @@ -167,7 +167,7 @@ Borg Shaker else if(target.is_open_container() && target.reagents) var/datum/reagents/R = reagent_list[mode] if(!R.total_volume) - user << "[src] is currently out of this ingredient. Please allow some time for the synthesizer to produce more." + user << "[src] is currently out of this ingredient! Please allow some time for the synthesizer to produce more." return if(target.reagents.total_volume >= target.reagents.maximum_volume) @@ -187,7 +187,7 @@ Borg Shaker empty = 0 if(empty) - usr << "It is currently empty. Please allow some time for the synthesizer to produce more." + usr << "It is currently empty! Please allow some time for the synthesizer to produce more." /obj/item/weapon/reagent_containers/borghypo/borgshaker/hacked ..() diff --git a/code/modules/reagents/reagent_containers/dropper.dm b/code/modules/reagents/reagent_containers/dropper.dm index bba70ba32b1..8a8f5f1728b 100644 --- a/code/modules/reagents/reagent_containers/dropper.dm +++ b/code/modules/reagents/reagent_containers/dropper.dm @@ -17,7 +17,7 @@ return if(!target.is_open_container() && !ismob(target) && !istype(target,/obj/item/weapon/reagent_containers/food) && !istype(target, /obj/item/clothing/mask/cigarette)) //You can inject humans and food but you cant remove the shit. - user << "You cannot directly fill [target]." + user << "You cannot directly fill [target]!" return var/trans = 0 @@ -73,7 +73,7 @@ return if(!target.reagents.total_volume) - user << "[target] is empty." + user << "[target] is empty!" return var/trans = target.reagents.trans_to(src, amount_per_transfer_from_this) diff --git a/code/modules/reagents/reagent_containers/glass.dm b/code/modules/reagents/reagent_containers/glass.dm index 366847d9635..8cf1fb79d65 100644 --- a/code/modules/reagents/reagent_containers/glass.dm +++ b/code/modules/reagents/reagent_containers/glass.dm @@ -50,7 +50,7 @@ else if(istype(target, /obj/structure/reagent_dispensers)) //A dispenser. Transfer FROM it TO us. if(target.reagents && !target.reagents.total_volume) - user << "[target] is empty and can't be refilled." + user << "[target] is empty and can't be refilled!" return if(reagents.total_volume >= reagents.maximum_volume) @@ -62,7 +62,7 @@ else if(target.is_open_container() && target.reagents) //Something like a glass. Player probably wants to transfer TO it. if(!reagents.total_volume) - user << "[src] is empty." + user << "[src] is empty!" return if(target.reagents.total_volume >= target.reagents.maximum_volume) @@ -104,7 +104,7 @@ user << "You heat [src] with [I]." reagents.handle_reactions() else - user << "[src] is already hotter than [I]." + user << "[src] is already hotter than [I]!" if(istype(I,/obj/item/weapon/reagent_containers/food/snacks/egg)) //breaking eggs var/obj/item/weapon/reagent_containers/food/snacks/egg/E = I diff --git a/code/modules/reagents/reagent_containers/hypospray.dm b/code/modules/reagents/reagent_containers/hypospray.dm index 2d83c9580b8..b6da840f2cf 100644 --- a/code/modules/reagents/reagent_containers/hypospray.dm +++ b/code/modules/reagents/reagent_containers/hypospray.dm @@ -16,7 +16,7 @@ /obj/item/weapon/reagent_containers/hypospray/attack(mob/living/M, mob/user) if(!reagents.total_volume) - user << "[src] is empty." + user << "[src] is empty!" return if(!istype(M)) return diff --git a/code/modules/reagents/reagent_containers/pill.dm b/code/modules/reagents/reagent_containers/pill.dm index 4aff93675e5..4520bb48afb 100644 --- a/code/modules/reagents/reagent_containers/pill.dm +++ b/code/modules/reagents/reagent_containers/pill.dm @@ -59,11 +59,11 @@ if(!proximity) return if(target.is_open_container() != 0 && target.reagents) if(!target.reagents.total_volume) - user << "[target] is empty. There's nothing to dissolve [src] in." + user << "[target] is empty! There's nothing to dissolve [src] in." return user << "You dissolve [src] in [target]." for(var/mob/O in viewers(2, user)) //viewers is necessary here because of the small radius - O << "[user] slips something into [target]." + O << "[user] slips something into [target]!" reagents.trans_to(target, reagents.total_volume) spawn(5) qdel(src) diff --git a/code/modules/reagents/reagent_containers/spray.dm b/code/modules/reagents/reagent_containers/spray.dm index 43484c7cc4b..edfce7a4595 100644 --- a/code/modules/reagents/reagent_containers/spray.dm +++ b/code/modules/reagents/reagent_containers/spray.dm @@ -40,7 +40,7 @@ return if(reagents.total_volume < amount_per_transfer_from_this) - user << "\The [src] is empty!" + user << "\The [src] is empty!" return spray(A) diff --git a/code/modules/reagents/reagent_containers/syringes.dm b/code/modules/reagents/reagent_containers/syringes.dm index 8c14b5d5b77..9d7988c289e 100644 --- a/code/modules/reagents/reagent_containers/syringes.dm +++ b/code/modules/reagents/reagent_containers/syringes.dm @@ -69,19 +69,19 @@ var/mob/living/carbon/human/H = target if(H.dna) if(NOBLOOD in H.dna.species.specflags && !H.dna.species.exotic_blood) - user << "You are unable to locate any blood." + user << "You are unable to locate any blood!" return if(reagents.has_reagent("blood")) - user << "There is already a blood sample in this syringe." + user << "There is already a blood sample in this syringe!" return if(istype(target, /mob/living/carbon)) //maybe just add a blood reagent to all mobs. Then you can suck them dry...With hundreds of syringes. Jolly good idea. var/amount = src.reagents.maximum_volume - src.reagents.total_volume var/mob/living/carbon/T = target if(!check_dna_integrity(T)) - user << "You are unable to locate any blood." + user << "You are unable to locate any blood!" return if(NOCLONE in T.mutations) //target done been eat, no more blood in him - user << "You are unable to locate any blood." + user << "You are unable to locate any blood!" return if(target != user) target.visible_message("[user] is trying to take a blood sample from [target]!", \ @@ -99,22 +99,22 @@ if(H.dna && H.dna.species.exotic_blood && H.reagents.total_volume) target.reagents.trans_to(src, amount) else - user << "You are unable to locate any blood." + user << "You are unable to locate any blood!" return if (B) src.reagents.reagent_list += B src.reagents.update_total() src.on_reagent_change() src.reagents.handle_reactions() - user.visible_message("[user] takes a blood sample from [target].") + user.visible_message("[user] takes a blood sample from [target].") else //if not mob if(!target.reagents.total_volume) - user << "[target] is empty." + user << "[target] is empty!" return if(!target.is_open_container() && !istype(target,/obj/structure/reagent_dispensers) && !istype(target,/obj/item/slime_extract)) - user << "You cannot directly remove reagents from [target]." + user << "You cannot directly remove reagents from [target]!" return var/trans = target.reagents.trans_to(src, amount_per_transfer_from_this) // transfer from, transfer to - who cares? @@ -132,7 +132,7 @@ return if(!target.is_open_container() && !ismob(target) && !istype(target, /obj/item/weapon/reagent_containers/food) && !istype(target, /obj/item/slime_extract) && !istype(target, /obj/item/clothing/mask/cigarette) && !istype(target, /obj/item/weapon/storage/fancy/cigarettes)) - user << "You cannot directly fill [target]." + user << "You cannot directly fill [target]!" return if(target.reagents.total_volume >= target.reagents.maximum_volume) user << "[target] is full." diff --git a/code/modules/reagents/reagent_dispenser.dm b/code/modules/reagents/reagent_dispenser.dm index 5c2928a6556..ab72b62f722 100644 --- a/code/modules/reagents/reagent_dispenser.dm +++ b/code/modules/reagents/reagent_dispenser.dm @@ -149,11 +149,11 @@ if((!istype(user)) || (user.stat)) return if(cups <= 0) - user << "What? No cups?" + user << "No cups left!" return cups-- user.put_in_hands(new /obj/item/weapon/reagent_containers/food/drinks/sillycup) - user.visible_message("[user] gets a cup from [src].","You get a cup from [src].") + user.visible_message("[user] gets a cup from [src].","You get a cup from [src].") /obj/structure/reagent_dispensers/water_cooler/attackby(var/obj/item/I, var/mob/user, params) if(istype(I, /obj/item/weapon/paper)) diff --git a/code/modules/recycling/conveyor2.dm b/code/modules/recycling/conveyor2.dm index 3d725cafcfd..5e077f56ea3 100644 --- a/code/modules/recycling/conveyor2.dm +++ b/code/modules/recycling/conveyor2.dm @@ -126,7 +126,7 @@ return if(isrobot(user)) return //Carn: fix for borgs dropping their modules on conveyor belts if(!user.drop_item()) - user << "\The [I] is stuck to your hand, you cannot place it on the conveyor!" + user << "\The [I] is stuck to your hand, you cannot place it on the conveyor!" return if(I && I.loc) I.loc = src.loc return diff --git a/code/modules/recycling/disposal-construction.dm b/code/modules/recycling/disposal-construction.dm index 33b1ae0df0f..69ffea18298 100644 --- a/code/modules/recycling/disposal-construction.dm +++ b/code/modules/recycling/disposal-construction.dm @@ -98,7 +98,7 @@ return if(anchored) - usr << "You must unfasten the pipe before rotating it." + usr << "You must unfasten the pipe before rotating it!" return dir = turn(dir, -90) @@ -112,7 +112,7 @@ return if(anchored) - usr << "You must unfasten the pipe before flipping it." + usr << "You must unfasten the pipe before flipping it!" return dir = turn(dir, 180) @@ -170,10 +170,14 @@ nicetype = "pipe" var/turf/T = loc - if(T.intact) - user << "You can only attach the [nicetype] if the floor plating is removed." + if(T.intact && istype(T, /turf/simulated/floor)) + user << "You can only attach the [nicetype] if the floor plating is removed!" return - + + if(!ispipe && istype(T, /turf/simulated/wall)) + user << "You can't build [nicetype]s on walls, only disposal pipes!" + return + var/obj/structure/disposalpipe/CP = locate() in T if(istype(I, /obj/item/weapon/wrench)) @@ -184,15 +188,15 @@ density = 0 else density = 1 - user << "You detach the [nicetype] from the underfloor." + user << "You detach the [nicetype] from the underfloor." else if(!is_pipe()) // Disposal or outlet if(CP) // There's something there if(!istype(CP,/obj/structure/disposalpipe/trunk)) - user << "The [nicetype] requires a trunk underneath it in order to work." + user << "The [nicetype] requires a trunk underneath it in order to work!" return else // Nothing under, fuck. - user << "The [nicetype] requires a trunk underneath it in order to work." + user << "The [nicetype] requires a trunk underneath it in order to work!" return else if(CP) @@ -201,7 +205,7 @@ if(istype(CP, /obj/structure/disposalpipe/broken)) pdir = CP.dir if(pdir & dpdir) - user << "There is already a [nicetype] at that location." + user << "There is already a [nicetype] at that location!" return anchored = 1 if(ispipe) @@ -209,7 +213,7 @@ density = 0 else density = 1 // We don't want disposal bins or outlets to go density 0 - user << "You attach the [nicetype] to the underfloor." + user << "You attach the [nicetype] to the underfloor." playsound(loc, 'sound/items/Ratchet.ogg', 100, 1) update() @@ -218,11 +222,11 @@ var/obj/item/weapon/weldingtool/W = I if(W.remove_fuel(0,user)) playsound(loc, 'sound/items/Welder2.ogg', 100, 1) - user << "Welding the [nicetype] in place." + user << "You start welding the [nicetype] in place..." if(do_after(user, 20)) if(!loc || !W.isOn()) return - user << "The [nicetype] has been welded in place!" + user << "The [nicetype] has been welded in place." update() // TODO: Make this neat if(ispipe) @@ -250,7 +254,7 @@ return else - user << "You need to attach it to the plating first!" + user << "You need to attach it to the plating first!" return /obj/structure/disposalconstruct/proc/is_pipe() diff --git a/code/modules/recycling/disposal.dm b/code/modules/recycling/disposal.dm index c34059ec621..0cbd54f514f 100644 --- a/code/modules/recycling/disposal.dm +++ b/code/modules/recycling/disposal.dm @@ -105,11 +105,11 @@ var/obj/item/weapon/weldingtool/W = I if(W.remove_fuel(0,user)) playsound(src.loc, 'sound/items/Welder2.ogg', 100, 1) - user << "You start slicing the floorweld off \the [src]." + user << "You start slicing the floorweld off \the [src]..." if(do_after(user,20)) if(!src || !W.isOn()) return - user << "You've sliced the floorweld off \the [src]." + user << "You slice the floorweld off \the [src]." Deconstruct() return else @@ -134,7 +134,7 @@ user.drop_item() I.loc = src - user.visible_message("[user.name] places \the [I] into \the [src].", \ + user.visible_message("[user.name] places \the [I] into \the [src].", \ "You place \the [I] into \the [src].") update() @@ -149,23 +149,23 @@ if(!iscarbon(user) && !user.ventcrawler) //only carbon and ventcrawlers can climb into disposal by themselves. return if(target.mob_size > MOB_SIZE_HUMAN) - user << "[target] doesn't fit inside [src]." + user << "[target] doesn't fit inside [src]!" return src.add_fingerprint(user) if(user == target) - user.visible_message("[user] starts climbing into [src].", \ - "[user] starts climbing into [src].") + user.visible_message("[user] starts climbing into [src].", \ + "You start climbing into [src]...") else target.visible_message("[user] starts putting [target] into [src].", \ - "[user] starts putting [target] into [src]!") + "[user] starts putting you into [src]!") if(do_mob(user, target, 20)) if (target.client) target.client.perspective = EYE_PERSPECTIVE target.client.eye = src target.loc = src if(user == target) - user.visible_message("[user] climbs into [src].", \ - "[user] climbs into [src].") + user.visible_message("[user] climbs into [src].", \ + "You climb into [src].") else target.visible_message("[user] has placed [target] in [src].", \ "[user] has placed [target] in [src].") @@ -214,7 +214,7 @@ // human interact with machine /obj/machinery/disposal/attack_hand(mob/user as mob) if(user && user.loc == src) - usr << "You cannot reach the controls from inside." + usr << "You cannot reach the controls from inside!" return /* if(mode==-1) @@ -271,7 +271,7 @@ if(..()) return if(usr.loc == src) - usr << "You cannot reach the controls from inside." + usr << "You cannot reach the controls from inside!" return if(mode==-1 && !href_list["eject"]) // only allow ejecting if mode is -1 @@ -846,12 +846,12 @@ if(W.remove_fuel(0,user)) playsound(src.loc, 'sound/items/Welder2.ogg', 100, 1) - user << "You start slicing the disposal pipe." + user << "You start slicing the disposal pipe..." // check if anything changed over 2 seconds if(do_after(user,30)) if(!src || !W.isOn()) return Deconstruct() - user << "You've sliced the disposal pipe." + user << "You slice the disposal pipe." else return @@ -1146,16 +1146,16 @@ var/obj/item/weapon/weldingtool/W = I if(linked) - user << "You need to deconstruct disposal machinery above this pipe." + user << "You need to deconstruct disposal machinery above this pipe!" return if(W.remove_fuel(0,user)) playsound(src.loc, 'sound/items/Welder2.ogg', 100, 1) - user << "You start slicing the disposal pipe." + user << "You start slicing the disposal pipe..." if(do_after(user,30)) if(!src || !W.isOn()) return Deconstruct() - user << "You've sliced the disposal pipe." + user << "You slice the disposal pipe." else return @@ -1285,10 +1285,10 @@ var/obj/item/weapon/weldingtool/W = I if(W.remove_fuel(0,user)) playsound(src.loc, 'sound/items/Welder2.ogg', 100, 1) - user << "You start slicing the floorweld off \the [src]." + user << "You start slicing the floorweld off \the [src]..." if(do_after(user,20)) if(!src || !W.isOn()) return - user << "You've sliced the floorweld off \the [src]." + user << "You slice the floorweld off \the [src]." stored.loc = loc src.transfer_fingerprints_to(stored) stored.update() diff --git a/code/modules/recycling/sortingmachinery.dm b/code/modules/recycling/sortingmachinery.dm index de964360207..19d4496b315 100644 --- a/code/modules/recycling/sortingmachinery.dm +++ b/code/modules/recycling/sortingmachinery.dm @@ -38,15 +38,15 @@ else if(istype(W, /obj/item/weapon/pen)) var/str = copytext(sanitize(input(user,"Label text?","Set label","")),1,MAX_NAME_LEN) if(!str || !length(str)) - user << "Invalid text." + user << "Invalid text!" return - user.visible_message("[user] labels [src] as [str].") + user.visible_message("[user] labels [src] as [str].") name = "[name] ([str])" else if(istype(W, /obj/item/stack/wrapping_paper) && !giftwrapped) var/obj/item/stack/wrapping_paper/WP = W if(WP.use(3)) - user.visible_message("[user] wraps the package in festive paper!") + user.visible_message("[user] wraps the package in festive paper!") giftwrapped = 1 if(istype(wrapped, /obj/structure/closet/crate)) icon_state = "giftcrate" @@ -55,7 +55,7 @@ if(WP.amount <= 0 && !WP.loc) //if we used our last wrapping paper, drop a cardboard tube new /obj/item/weapon/c_tube( get_turf(user) ) else - user << "You need more paper." + user << "You need more paper!" /obj/item/smallDelivery @@ -92,9 +92,9 @@ else if(istype(W, /obj/item/weapon/pen)) var/str = copytext(sanitize(input(user,"Label text?","Set label","")),1,MAX_NAME_LEN) if(!str || !length(str)) - user << "Invalid text." + user << "Invalid text!" return - user.visible_message("[user] labels [src] as [str].") + user.visible_message("[user] labels [src] as [str].") name = "[name] ([str])" else if(istype(W, /obj/item/stack/wrapping_paper) && !giftwrapped) @@ -102,11 +102,11 @@ if(WP.use(1)) icon_state = "giftcrate[wrapped.w_class]" giftwrapped = 1 - user.visible_message("[user] wraps the package in festive paper!") + user.visible_message("[user] wraps the package in festive paper!") if(WP.amount <= 0 && !WP.loc) //if we used our last wrapping paper, drop a cardboard tube new /obj/item/weapon/c_tube( get_turf(user) ) else - user << "You need more paper." + user << "You need more paper!" @@ -161,7 +161,7 @@ P.wrapped = O O.loc = P else - user << "You need more paper." + user << "You need more paper!" return else if(istype (target, /obj/structure/closet)) var/obj/structure/closet/O = target @@ -173,13 +173,13 @@ O.welded = 1 O.loc = P else - user << "You need more paper." + user << "You need more paper!" return else - user << "The object you are trying to wrap is unsuitable for the sorting machinery." + user << "The object you are trying to wrap is unsuitable for the sorting machinery!" return - user.visible_message("[user] wraps [target].") + user.visible_message("[user] wraps [target].") user.attack_log += text("\[[time_stamp()]\] Has used [name] on [target]") if(amount <= 0 && !src.loc) //if we used our last wrapping paper, drop a cardboard tube @@ -342,11 +342,11 @@ if(W.remove_fuel(0,user)) playsound(loc, 'sound/items/Welder2.ogg', 100, 1) - user << "You start slicing the floorweld off the delivery chute." + user << "You start slicing the floorweld off the delivery chute..." if(do_after(user,20)) if(!src || !W.isOn()) return Deconstruct() - user << "You sliced the floorweld off the delivery chute." + user << "You slice the floorweld off the delivery chute." return else return diff --git a/code/modules/research/circuitprinter.dm b/code/modules/research/circuitprinter.dm index 1e9bcb8c6a0..3663a339382 100644 --- a/code/modules/research/circuitprinter.dm +++ b/code/modules/research/circuitprinter.dm @@ -101,7 +101,7 @@ using metal and glass, it uses glass and reagents (usually sulfuric acis). default_deconstruction_crowbar(O) return else - user << "You can't load the [src.name] while it's opened." + user << "You can't load the [src.name] while it's opened!" return if (disabled) return @@ -116,11 +116,11 @@ using metal and glass, it uses glass and reagents (usually sulfuric acis). if (stat) return if (busy) - user << "The [name] is busy. Please wait for completion of previous operation." + user << "The [name] is busy! Please wait for completion of previous operation." return var/obj/item/stack/sheet/stack = O if ((TotalMaterials() + stack.perunit) > max_material_amount) - user << "The [name] is full. Please remove glass from the protolathe in order to insert more." + user << "The [name] is full! Please remove glass from the protolathe in order to insert more." return var/amount = round(input("How many sheets do you want to add?") as num) diff --git a/code/modules/research/designs/autolathe_designs.dm b/code/modules/research/designs/autolathe_designs.dm index 72e30978b11..1827184ab1e 100644 --- a/code/modules/research/designs/autolathe_designs.dm +++ b/code/modules/research/designs/autolathe_designs.dm @@ -106,6 +106,14 @@ build_path = /obj/item/weapon/stock_parts/console_screen category = list("initial", "Electronics") +/datum/design/apc_board + name = "APC Power Control Module" + id = "power control" + build_type = AUTOLATHE + materials = list("$metal" = 100, "$glass" = 100) + build_path = /obj/item/weapon/module/power_control + category = list("initial", "Electronics") + /datum/design/airlock_board name = "Airlock electronics" id = "airlock_board" @@ -183,7 +191,7 @@ id = "kitchen_knife" build_type = AUTOLATHE materials = list("$metal" = 12000) - build_path = /obj/item/weapon/kitchenknife + build_path = /obj/item/weapon/kitchen/knife category = list("initial","Misc") /datum/design/scalpel diff --git a/code/modules/research/designs/mechfabricator_designs.dm b/code/modules/research/designs/mechfabricator_designs.dm index 26e29741279..8f14875b616 100644 --- a/code/modules/research/designs/mechfabricator_designs.dm +++ b/code/modules/research/designs/mechfabricator_designs.dm @@ -608,7 +608,7 @@ ///////////////////////////////////////// /datum/design/borg_upgrade_reset - name = "Cyborg Upgrade (Reset Module)" + name = "Cyborg Upgrade (Module Reset Board)" id = "borg_upgrade_reset" build_type = MECHFAB build_path = /obj/item/borg/upgrade/reset @@ -617,7 +617,7 @@ category = list("Cyborg Upgrade Modules") /datum/design/borg_upgrade_rename - name = "Cyborg Upgrade (Rename Module)" + name = "Cyborg Upgrade (Rename Board)" id = "borg_upgrade_rename" build_type = MECHFAB build_path = /obj/item/borg/upgrade/rename @@ -626,7 +626,7 @@ category = list("Cyborg Upgrade Modules") /datum/design/borg_upgrade_restart - name = "Cyborg Upgrade (Restart Module)" + name = "Cyborg Upgrade (Emergency Reboot Board)" id = "borg_upgrade_restart" build_type = MECHFAB build_path = /obj/item/borg/upgrade/restart diff --git a/code/modules/research/experimentor.dm b/code/modules/research/experimentor.dm index c9a9f339aa1..be722fe8fb0 100644 --- a/code/modules/research/experimentor.dm +++ b/code/modules/research/experimentor.dm @@ -156,7 +156,7 @@ loaded_item = O user.drop_item() O.loc = src - user << "You add the [O.name] to the machine!" + user << "You add the [O.name] to the machine." flick("h_lathe_load", src) return @@ -254,21 +254,21 @@ var/criticalReaction = locate(exp_on) in critical_items ? TRUE : FALSE //////////////////////////////////////////////////////////////////////////////////////////////// if(exp == SCANTYPE_POKE) - visible_message("[src] prods at [exp_on] with mechanical arms.") + visible_message("[src] prods at [exp_on] with mechanical arms.") if(prob(EFFECT_PROB_LOW) && criticalReaction) - visible_message("[exp_on] is gripped in just the right way, enhancing it's focus.") + visible_message("[exp_on] is gripped in just the right way, enhancing its focus.") badThingCoeff++ if(prob(EFFECT_PROB_VERYLOW-badThingCoeff)) - visible_message("[src] malfunctions and destroys [exp_on], lashing it's arms out at nearby people!.") + visible_message("[src] malfunctions and destroys [exp_on], lashing its arms out at nearby people!") for(var/mob/living/m in oview(1, src)) m.apply_damage(15,"brute",pick("head","chest","groin")) investigate_log("Experimentor dealt minor brute to [m].", "experimentor") ejectItem(TRUE) if(prob(EFFECT_PROB_LOW-badThingCoeff)) - visible_message("[src] malfunctions!.") + visible_message("[src] malfunctions!") exp = SCANTYPE_OBLITERATE if(prob(EFFECT_PROB_MEDIUM-badThingCoeff)) - visible_message("[src] malfunctions, throwing the [exp_on]!.") + visible_message("[src] malfunctions, throwing the [exp_on]!") var/mob/living/target = locate(/mob/living) in oview(7,src) if(target) var/obj/item/throwing = loaded_item @@ -278,21 +278,21 @@ throwing.throw_at(target, 10, 1) //////////////////////////////////////////////////////////////////////////////////////////////// if(exp == SCANTYPE_IRRADIATE) - visible_message("[src] reflects radioactive rays at [exp_on]!") + visible_message("[src] reflects radioactive rays at [exp_on]!") if(prob(EFFECT_PROB_LOW) && criticalReaction) - visible_message("[exp_on] has activated an unknown subroutine!") + visible_message("[exp_on] has activated an unknown subroutine!") cloneMode = TRUE cloneCount = badThingCoeff investigate_log("Experimentor has made a clone of [exp_on]", "experimentor") ejectItem() if(prob(EFFECT_PROB_VERYLOW-badThingCoeff)) - visible_message("[src] malfunctions, melting [exp_on] and leaking radiation!.") + visible_message("[src] malfunctions, melting [exp_on] and leaking radiation!") for(var/mob/living/m in oview(1, src)) m.irradiate(25) investigate_log("Experimentor has irradiated [m]", "experimentor") //One entry per person so we know what was irradiated. ejectItem(TRUE) if(prob(EFFECT_PROB_LOW-badThingCoeff)) - visible_message("[src] malfunctions, spewing toxic waste!.") + visible_message("[src] malfunctions, spewing toxic waste!") for(var/turf/T in oview(1, src)) if(!T.density) if(prob(EFFECT_PROB_VERYHIGH)) @@ -303,7 +303,7 @@ ejectItem(TRUE) var/newPath = pickWeighted(valid_items) loaded_item = new newPath(src) - visible_message("[src] malfunctions, transforming [savedName] into [loaded_item]!.") + visible_message("[src] malfunctions, transforming [savedName] into [loaded_item]!") investigate_log("Experimentor has transformed [savedName] into [loaded_item]", "experimentor") if(istype(loaded_item,/obj/item/weapon/grenade/chem_grenade)) var/obj/item/weapon/grenade/chem_grenade/CG = loaded_item @@ -311,12 +311,12 @@ ejectItem() //////////////////////////////////////////////////////////////////////////////////////////////// if(exp == SCANTYPE_GAS) - visible_message("[src] fills it's chamber with gas, [exp_on] included.") + visible_message("[src] fills its chamber with gas, [exp_on] included.") if(prob(EFFECT_PROB_LOW) && criticalReaction) - visible_message("[exp_on] achieves the perfect mix!") + visible_message("[exp_on] achieves the perfect mix!") new /obj/item/stack/sheet/mineral/plasma(get_turf(pick(oview(1,src)))) if(prob(EFFECT_PROB_VERYLOW-badThingCoeff)) - visible_message("[src] destroys [exp_on], leaking dangerous gas!.") + visible_message("[src] destroys [exp_on], leaking dangerous gas!") chosenchem = pick("carbon","radium","toxin","condensedcapsaicin","mushroomhallucinogen","space_drugs","ethanol","beepskysmash") var/datum/reagents/R = new/datum/reagents(50) R.my_atom = src @@ -343,18 +343,18 @@ warn_admins(usr, "[chosenchem] smoke") investigate_log("Experimentor has released [chosenchem] smoke!", "experimentor") if(prob(EFFECT_PROB_LOW-badThingCoeff)) - visible_message("[src] malfunctions, spewing harmless gas!.") + visible_message("[src] malfunctions, spewing harmless gas.>") throwSmoke(src.loc) if(prob(EFFECT_PROB_MEDIUM-badThingCoeff)) - visible_message("[src] melts [exp_on], ionizing the air around it!.") + visible_message("[src] melts [exp_on], ionizing the air around it!") empulse(src.loc, 4, 6) investigate_log("Experimentor has generated an Electromagnetic Pulse.", "experimentor") ejectItem(TRUE) //////////////////////////////////////////////////////////////////////////////////////////////// if(exp == SCANTYPE_HEAT) - visible_message("[src] raises [exp_on]'s temperature.") + visible_message("[src] raises [exp_on]'s temperature.") if(prob(EFFECT_PROB_LOW) && criticalReaction) - visible_message("[src]'s emergency coolant system gives off a small ding!") + visible_message("[src]'s emergency coolant system gives off a small ding!") playsound(src.loc, 'sound/machines/ding.ogg', 50, 1) var/obj/item/weapon/reagent_containers/food/drinks/coffee/C = new /obj/item/weapon/reagent_containers/food/drinks/coffee(get_turf(pick(oview(1,src)))) chosenchem = pick("plasma","capsaicin","ethanol") @@ -377,12 +377,12 @@ FB.xo = MT.x - start.x FB.fire() if(prob(EFFECT_PROB_LOW-badThingCoeff)) - visible_message("[src] malfunctions, melting [exp_on] and releasing a burst of flame!.") + visible_message("[src] malfunctions, melting [exp_on] and releasing a burst of flame!") explosion(src.loc, -1, 0, 0, 0, 0, flame_range = 2) investigate_log("Experimentor started a fire.", "experimentor") ejectItem(TRUE) if(prob(EFFECT_PROB_MEDIUM-badThingCoeff)) - visible_message("[src] malfunctions, melting [exp_on] and leaking hot air!.") + visible_message("[src] malfunctions, melting [exp_on] and leaking hot air!") var/datum/gas_mixture/env = src.loc.return_air() var/transfer_moles = 0.25 * env.total_moles() var/datum/gas_mixture/removed = env.remove(transfer_moles) @@ -396,7 +396,7 @@ investigate_log("Experimentor has released hot air.", "experimentor") ejectItem(TRUE) if(prob(EFFECT_PROB_MEDIUM-badThingCoeff)) - visible_message("[src] malfunctions, activating it's emergency coolant systems!.") + visible_message("[src] malfunctions, activating its emergency coolant systems!") throwSmoke(src.loc) for(var/mob/living/m in oview(1, src)) m.apply_damage(5,"burn",pick("head","chest","groin")) @@ -404,9 +404,9 @@ ejectItem() //////////////////////////////////////////////////////////////////////////////////////////////// if(exp == SCANTYPE_COLD) - visible_message("[src] lowers [exp_on]'s temperature.") + visible_message("[src] lowers [exp_on]'s temperature.") if(prob(EFFECT_PROB_LOW) && criticalReaction) - visible_message("[src]'s emergency coolant system gives off a small ding!") + visible_message("[src]'s emergency coolant system gives off a small ding!") var/obj/machinery/vending/coffee/C = new /obj/machinery/vending/coffee(get_turf(pick(oview(1,src)))) playsound(src.loc, 'sound/machines/ding.ogg', 50, 1) //Ding! Your death coffee is ready! chosenchem = pick("uranium","frostoil","ephedrine") @@ -416,7 +416,7 @@ C.desc = "It has a large hazard symbol printed on the side in fading ink." investigate_log("Experimentor has made a cup of [chosenchem] coffee.", "experimentor") if(prob(EFFECT_PROB_VERYLOW-badThingCoeff)) - visible_message("[src] malfunctions, shattering [exp_on] and releasing a dangerous cloud of coolant!") + visible_message("[src] malfunctions, shattering [exp_on] and releasing a dangerous cloud of coolant!") var/datum/reagents/R = new/datum/reagents(50) R.my_atom = src R.add_reagent("frostoil" , 50) @@ -428,7 +428,7 @@ qdel(R) ejectItem(TRUE) if(prob(EFFECT_PROB_LOW-badThingCoeff)) - visible_message("[src] malfunctions, shattering [exp_on] and leaking cold air!.") + visible_message("[src] malfunctions, shattering [exp_on] and leaking cold air!") var/datum/gas_mixture/env = src.loc.return_air() var/transfer_moles = 0.25 * env.total_moles() var/datum/gas_mixture/removed = env.remove(transfer_moles) @@ -442,22 +442,22 @@ investigate_log("Experimentor has released cold air.", "experimentor") ejectItem(TRUE) if(prob(EFFECT_PROB_MEDIUM-badThingCoeff)) - visible_message("[src] malfunctions, releasing a flurry of chilly air as [exp_on] pops out!.") + visible_message("[src] malfunctions, releasing a flurry of chilly air as [exp_on] pops out!") var/datum/effect/effect/system/harmless_smoke_spread/smoke = new smoke.set_up(1,0, src.loc, 0) smoke.start() ejectItem() //////////////////////////////////////////////////////////////////////////////////////////////// if(exp == SCANTYPE_OBLITERATE) - visible_message("[exp_on] activates the crushing mechanism, [exp_on] is destroyed!") + visible_message("[exp_on] activates the crushing mechanism, [exp_on] is destroyed!") if(prob(EFFECT_PROB_LOW) && criticalReaction) - visible_message("[src]'s crushing mechanism slowly and smoothly descends, flattening the [exp_on]!") + visible_message("[src]'s crushing mechanism slowly and smoothly descends, flattening the [exp_on]!") new /obj/item/stack/sheet/plasteel(get_turf(pick(oview(1,src)))) if(linked_console.linked_lathe) linked_console.linked_lathe.m_amount += min((linked_console.linked_lathe.max_material_storage - linked_console.linked_lathe.TotalMaterials()), (exp_on.m_amt)) linked_console.linked_lathe.g_amount += min((linked_console.linked_lathe.max_material_storage - linked_console.linked_lathe.TotalMaterials()), (exp_on.g_amt)) if(prob(EFFECT_PROB_VERYLOW-badThingCoeff)) - visible_message("[src]'s crusher goes way too many levels too high, crushing right through space-time!") + visible_message("[src]'s crusher goes way too many levels too high, crushing right through space-time!") playsound(src.loc, 'sound/effects/supermatter.ogg', 50, 1, -3) investigate_log("Experimentor has triggered the 'throw things' reaction.", "experimentor") var/list/throwAt = list() @@ -469,7 +469,7 @@ var/cast = throwAt[counter] cast:throw_at(src,10,1) if(prob(EFFECT_PROB_LOW-badThingCoeff)) - visible_message("[src]'s crusher goes one level too high, crushing right into space-time!.") + visible_message("[src]'s crusher goes one level too high, crushing right into space-time!") playsound(src.loc, 'sound/effects/supermatter.ogg', 50, 1, -3) investigate_log("Experimentor has triggered the 'minor throw things' reaction.", "experimentor") var/list/oViewStuff = oview(7,src) @@ -486,10 +486,10 @@ if(exp == FAIL) var/a = pick("rumbles","shakes","vibrates","shudders") var/b = pick("crushes","spins","viscerates","smashes","insults") - visible_message("[exp_on] [a], and [b], the experiment was a failiure!") + visible_message("[exp_on] [a], and [b], the experiment was a failure.") if(exp == SCANTYPE_DISCOVER) - visible_message("[src] scans the [exp_on], revealing it's true nature!.") + visible_message("[src] scans the [exp_on], revealing its true nature!") playsound(src.loc, 'sound/effects/supermatter.ogg', 50, 3, -1) var/obj/item/weapon/relic/R = loaded_item R.reveal() @@ -500,11 +500,11 @@ if(prob(EFFECT_PROB_VERYLOW-badThingCoeff)) var/globalMalf = rand(1,100) if(globalMalf < 15) - visible_message("[src]'s onboard detection system has malfunctioned!.") + visible_message("[src]'s onboard detection system has malfunctioned!") item_reactions["[exp_on.type]"] = pick(SCANTYPE_POKE,SCANTYPE_IRRADIATE,SCANTYPE_GAS,SCANTYPE_HEAT,SCANTYPE_COLD,SCANTYPE_OBLITERATE) ejectItem() if(globalMalf > 16 && globalMalf < 35) - visible_message("[src] melts [exp_on], ian-izing the air around it!.") + visible_message("[src] melts [exp_on], ian-izing the air around it!") throwSmoke(src.loc) if(trackedIan) throwSmoke(trackedIan.loc) @@ -515,7 +515,7 @@ investigate_log("Experimentor has spawned a new corgi.", "experimentor") ejectItem(TRUE) if(globalMalf > 36 && globalMalf < 50) - visible_message("[src] improves [exp_on], drawing the life essence of those nearby!") + visible_message("[src] improves [exp_on], drawing the life essence of those nearby!") for(var/mob/living/m in view(4,src)) m << "You feel your flesh being torn from you, mists of blood drifting to [src]!" m.apply_damage(50,"brute","chest") @@ -526,7 +526,7 @@ exp_on.origin_tech = list2params(reqs) investigate_log("Experimentor has set the origin tech of [exp_on] to [exp_on.origin_tech]", "experimentor") if(globalMalf > 51 && globalMalf < 75) - visible_message("[src] encounters a run-time error!") + visible_message("[src] encounters a run-time error!") throwSmoke(src.loc) if(trackedRuntime) throwSmoke(trackedRuntime.loc) @@ -537,7 +537,7 @@ investigate_log("Experimentor failed to steal runtime, and instead spawned a new cat.", "experimentor") ejectItem(TRUE) if(globalMalf > 76) - visible_message("[src] begins to smoke and hiss, shaking violently!") + visible_message("[src] begins to smoke and hiss, shaking violently!") use_power(500000) investigate_log("Experimentor has drained power from its APC", "experimentor") @@ -567,7 +567,7 @@ src.updateUsrDialog() else if(recentlyExperimented) - usr << "[src] has been used too recently!" + usr << "[src] has been used too recently!" return var/dotype if(text2num(scantype) == SCANTYPE_DISCOVER) @@ -638,7 +638,7 @@ /obj/item/weapon/relic/attack_self(mob/user as mob) if(revealed) if(cooldown) - user << "[src] does not react." + user << "[src] does not react!" return else if(src.loc == user) cooldown = TRUE @@ -690,7 +690,7 @@ qdel(src) /obj/item/weapon/relic/proc/rapidDupe(var/mob/user) - audible_message("[src] emits a loud pop!") + audible_message("[src] emits a loud pop!") var/list/dupes = list() var/counter var/max = rand(5,10) diff --git a/code/modules/research/protolathe.dm b/code/modules/research/protolathe.dm index 5228fd29bc0..9322e7c9286 100644 --- a/code/modules/research/protolathe.dm +++ b/code/modules/research/protolathe.dm @@ -140,7 +140,7 @@ Note: Must be placed west/left of and R&D console to function. default_deconstruction_crowbar(O) return 1 else - user << "You can't load the [src.name] while it's opened." + user << "You can't load the [src.name] while it's opened!" return 1 if (disabled) return @@ -148,7 +148,7 @@ Note: Must be placed west/left of and R&D console to function. user << " The [src.name] must be linked to an R&D console first!" return 1 if (busy) - user << "The [src.name] is busy. Please wait for completion of previous operation." + user << "The [src.name] is busy! Please wait for completion of previous operation." return 1 if (O.is_open_container()) return @@ -160,7 +160,7 @@ Note: Must be placed west/left of and R&D console to function. if(istype(O,/obj/item/stack/sheet)) var/obj/item/stack/sheet/S = O if (TotalMaterials() + S.perunit > max_material_storage) - user << "The [src.name]'s material bin is full. Please remove material before adding more." + user << "The [src.name]'s material bin is full! Please remove material before adding more." return 1 var/obj/item/stack/sheet/stack = O diff --git a/code/modules/research/rdmachines.dm b/code/modules/research/rdmachines.dm index ee922a055a6..e4ed832817e 100644 --- a/code/modules/research/rdmachines.dm +++ b/code/modules/research/rdmachines.dm @@ -73,10 +73,10 @@ if(href_list["pulse"]) var/temp_wire = href_list["wire"] if (!istype(usr.get_active_hand(), /obj/item/device/multitool)) - usr << "You need a multitool!" + usr << "You need a multitool!" else if(src.wires[temp_wire]) - usr << "You can't pulse a cut wire." + usr << "You can't pulse a cut wire!" else if(src.hack_wire == href_list["wire"]) src.hacked = !src.hacked @@ -91,7 +91,7 @@ spawn(100) src.shocked = !src.shocked if(href_list["cut"]) if (!istype(usr.get_active_hand(), /obj/item/weapon/wirecutters)) - usr << "You need wirecutters!" + usr << "You need wirecutters!" else var/temp_wire = href_list["wire"] wires[temp_wire] = !wires[temp_wire] diff --git a/code/modules/research/xenobiology/xenobiology.dm b/code/modules/research/xenobiology/xenobiology.dm index 12b76321f27..f054bbb6867 100644 --- a/code/modules/research/xenobiology/xenobiology.dm +++ b/code/modules/research/xenobiology/xenobiology.dm @@ -23,7 +23,7 @@ if(Uses == 0) user << " You can't enhance a used extract!" return ..() - user <<"You apply the enhancer. It now has triple the amount of uses." + user <<"You apply the enhancer. It now has triple the amount of uses." Uses = 3 enhanced = 1 qdel(O) @@ -204,8 +204,8 @@ M.languages |= HUMAN M.faction -= "neutral" M << "All at once it makes sense, you know what you are and who you are! Self awareness is yours!" - M << "You are grateful to be self aware and owe [user] a great debt. Serve [user], and assist them in completing their goals at any cost." - user << "[M] is suddenly attentive and aware. It worked!" + M << "You are grateful to be self aware and owe [user] a great debt. Serve [user], and assist them in completing their goals at any cost." + user << "[M] is suddenly attentive and aware. It worked!" qdel(src) else user << "[M] looks interested for a moment, but then looks back down. Maybe you should try again later..." @@ -232,7 +232,7 @@ user <<" The slime already has the maximum amount of extract!" return..() - user <<"You feed the slime the steroid. It now has triple the amount of extract." + user <<"You feed the slime the steroid. It now has triple the amount of extract." M.cores = 3 qdel(src) @@ -350,7 +350,7 @@ ghost = O break if(!ghost) - user << "The rune fizzles uselessly. There is no spirit nearby." + user << "The rune fizzles uselessly! There is no spirit nearby." return var/mob/living/carbon/human/G = new /mob/living/carbon/human if(prob(50)) G.gender = "female" diff --git a/code/modules/security levels/keycard authentication.dm b/code/modules/security levels/keycard authentication.dm index 3d75e5a227a..2a1909a15dd 100644 --- a/code/modules/security levels/keycard authentication.dm +++ b/code/modules/security levels/keycard authentication.dm @@ -25,7 +25,7 @@ return /obj/machinery/keycard_auth/attack_paw(mob/user as mob) - user << "You are too primitive to use this device." + user << "You are too primitive to use this device!" return /obj/machinery/keycard_auth/attackby(obj/item/weapon/W as obj, mob/user as mob, params) @@ -53,10 +53,10 @@ /obj/machinery/keycard_auth/attack_hand(mob/user as mob) if(user.stat || stat & (NOPOWER|BROKEN)) - user << "This device is not powered." + user << "This device is not powered!" return if(busy) - user << "This device is busy." + user << "This device is busy!" return user.set_machine(src) diff --git a/code/modules/surgery/appendectomy.dm b/code/modules/surgery/appendectomy.dm index 7ba9ad03ba0..0ba1db2da7c 100644 --- a/code/modules/surgery/appendectomy.dm +++ b/code/modules/surgery/appendectomy.dm @@ -15,17 +15,17 @@ /datum/surgery_step/extract_appendix/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) A = locate() in target.internal_organs if(A) - user.visible_message("[user] begins to extract [target]'s appendix.") + user.visible_message("[user] begins to extract [target]'s appendix.", "You begin to extract [target]'s appendix...") else - user.visible_message("[user] looks for an appendix in [target].") + user.visible_message("[user] looks for an appendix in [target].", "You look for an appendix in [target]...") /datum/surgery_step/extract_appendix/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) if(A) - user.visible_message("[user] successfully removes [target]'s appendix!") + user.visible_message("[user] successfully removes [target]'s appendix!", "You successfully removes [target]'s appendix.") A.loc = get_turf(target) target.internal_organs -= A for(var/datum/disease/appendicitis in target.viruses) appendicitis.cure() else - user.visible_message("[user] can't find an appendix in [target]!") + user << "You can't find an appendix in [target]!" return 1 \ No newline at end of file diff --git a/code/modules/surgery/brain_removal.dm b/code/modules/surgery/brain_removal.dm index 41c3b4ee68c..0d57fb6f9a2 100644 --- a/code/modules/surgery/brain_removal.dm +++ b/code/modules/surgery/brain_removal.dm @@ -14,13 +14,13 @@ /datum/surgery_step/extract_brain/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) B = target.getorgan(/obj/item/organ/brain) if(B) - user.visible_message("[user] begins to extract [target]'s brain.") + user.visible_message("[user] begins to extract [target]'s brain.", "You begin to extract [target]'s brain...") else - user.visible_message("[user] looks for a brain in [target].") + user.visible_message("[user] looks for a brain in [target].", "You look for a brain in [target]...") /datum/surgery_step/extract_brain/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) if(B) - user.visible_message("[user] successfully removes [target]'s brain!") + user.visible_message("[user] successfully removes [target]'s brain!", "You successfully remove [target]'s brain.") B.loc = get_turf(target) B.transfer_identity(target) target.internal_organs -= B @@ -30,7 +30,7 @@ H.apply_damage(25,"brute","head") add_logs(user, target, "debrained", addition="INTENT: [uppertext(user.a_intent)]") else - user.visible_message("[user] can't find a brain in [target]!") + user << "You can't find a brain in [target]!" return 1 diff --git a/code/modules/surgery/cavity_implant.dm b/code/modules/surgery/cavity_implant.dm index 289dadeec2d..4373e3c2a8b 100644 --- a/code/modules/surgery/cavity_implant.dm +++ b/code/modules/surgery/cavity_implant.dm @@ -19,27 +19,27 @@ IC = I break if(tool) - user.visible_message("[user] begins to insert [tool] into [target]'s [target_zone].") + user.visible_message("[user] begins to insert [tool] into [target]'s [target_zone].", "You begin to insert [tool] into [target]'s [target_zone]...") else - user.visible_message("[user] checks for items in [target]'s [target_zone].") + user.visible_message("[user] checks for items in [target]'s [target_zone].", "You check for items in [target]'s [target_zone]...") /datum/surgery_step/handle_cavity/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) if(tool) if(IC || tool.w_class > 3 || NODROP in tool.flags || tool.GetTypeInAllContents(/obj/item/weapon/disk/nuclear) || istype(tool, /obj/item/weapon/disk/nuclear) || istype(tool, /obj/item/organ)) - user.visible_message("[user] can't seem to fit [tool] in [target]'s [target_zone].") + user << "You can't seem to fit [tool] in [target]'s [target_zone]!" return 0 else - user.visible_message("[user] stuffs [tool] into [target]'s [target_zone]!") + user.visible_message("[user] stuffs [tool] into [target]'s [target_zone]!", "You stuff [tool] into [target]'s [target_zone].") user.drop_item() target.internal_organs += tool tool.loc = target return 1 else if(IC) - user.visible_message("[user] pulls [IC] out of [target]'s [target_zone]!") + user.visible_message("[user] pulls [IC] out of [target]'s [target_zone]!", "You pull [IC] out of [target]'s [target_zone].") user.put_in_hands(IC) target.internal_organs -= IC return 1 else - user.visible_message("[user] doesn't find anything in [target]'s [target_zone].") + user << "You don't find anything in [target]'s [target_zone]." return 0 \ No newline at end of file diff --git a/code/modules/surgery/core_removal.dm b/code/modules/surgery/core_removal.dm index 2f8dff6988f..6a38e160560 100644 --- a/code/modules/surgery/core_removal.dm +++ b/code/modules/surgery/core_removal.dm @@ -11,14 +11,13 @@ time = 16 /datum/surgery_step/extract_core/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) - user.visible_message("[user] begins to extract a core from [target].") + user.visible_message("[user] begins to extract a core from [target].", "You begin to extract a core from [target]...") /datum/surgery_step/extract_core/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) var/mob/living/simple_animal/slime/slime = target if(slime.cores > 0) slime.cores-- - user.visible_message("[user] successfully extracts a core from [target]!") - user << "[slime.cores] core\s remaining." + user.visible_message("[user] successfully extracts a core from [target]!", "You successfully extract a core from [target]. [slime.cores] core\s remaining.") new slime.coretype(slime.loc) @@ -28,5 +27,5 @@ else return 0 else - user.visible_message("There aren't any cores left in [target].") + user << "There aren't any cores left in [target]!" return 1 \ No newline at end of file diff --git a/code/modules/surgery/cybernetic_implants.dm b/code/modules/surgery/cybernetic_implants.dm index 0e4312f7263..3f4dcb5210c 100644 --- a/code/modules/surgery/cybernetic_implants.dm +++ b/code/modules/surgery/cybernetic_implants.dm @@ -2,7 +2,7 @@ #define MAX_CHEST_IMPLANT 3 /datum/surgery_step/cybernetic_implant/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/cybernetic_implant/implant, datum/surgery/surgery) - user.visible_message("[user] begins to implant [target] with [implant].") + user.visible_message("[user] begins to implant [target] with [implant].", "You begin to implant [target] with [implant]...") //[[[[EYES]]]] /datum/surgery/eye_cybernetic_implant/eyes @@ -68,9 +68,9 @@ /datum/surgery_step/cybernetic_implant/proc/insert(mob/user, mob/living/carbon/target, obj/item/cybernetic_implant/implant,target_zone,full) if(full) - user.visible_message("[user] can't seem to implant anything else into the [target]'s [target_zone].") + user << "You can't seem to implant anything else into the [target]'s [target_zone]!" else - user.visible_message("[user] inserts [implant] into the [target]'s [target_zone == "head" ? "brain" : target_zone]!") + user.visible_message("[user] inserts [implant] into the [target]'s [target_zone == "head" ? "brain" : target_zone]!", "You insert [implant] into the [target]'s [target_zone == "head" ? "brain" : target_zone].") implant.owner = target implant.function() user.drop_item() diff --git a/code/modules/surgery/eye_surgery.dm b/code/modules/surgery/eye_surgery.dm index 0fb7f2413cb..71e136efa72 100644 --- a/code/modules/surgery/eye_surgery.dm +++ b/code/modules/surgery/eye_surgery.dm @@ -11,10 +11,10 @@ time = 64 /datum/surgery_step/fix_eyes/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) - user.visible_message("[user] begins to fix [target]'s eyes.") + user.visible_message("[user] begins to fix [target]'s eyes.", "You begin to fix [target]'s eyes...") /datum/surgery_step/fix_eyes/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) - user.visible_message("[user] successfully fixes [target]'s eyes!") + user.visible_message("[user] successfully fixes [target]'s eyes!", "You succeed in fixing [target]'s eyes.") target.disabilities &= ~BLIND target.disabilities &= ~NEARSIGHT target.eye_blurry = 35 //this will fix itself slowly. @@ -23,8 +23,8 @@ /datum/surgery_step/fix_eyes/failure(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) if(target.getorgan(/obj/item/organ/brain)) - user.visible_message("[user] accidentally stabs [target] right in the brain!") + user.visible_message("[user] accidentally stabs [target] right in the brain!", "You accidentally stab [target] right in the brain!") target.adjustBrainLoss(100) else - user.visible_message("[user] accidentally stabs [target] right in the brain! Or would have, if [target] had a brain.") + user.visible_message("[user] accidentally stabs [target] right in the brain! Or would have, if [target] had a brain.", "You accidentally stab [target] right in the brain! Or would have, if [target] had a brain.") return 0 \ No newline at end of file diff --git a/code/modules/surgery/gender_reassignment.dm b/code/modules/surgery/gender_reassignment.dm index 0ef01d56d7c..4cc6be2d953 100644 --- a/code/modules/surgery/gender_reassignment.dm +++ b/code/modules/surgery/gender_reassignment.dm @@ -13,18 +13,18 @@ /datum/surgery_step/reshape_genitals/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) if(target.gender == FEMALE) - user.visible_message("[user] begins to reshape [target]'s genitals to look more masculine.") + user.visible_message("[user] begins to reshape [target]'s genitals to look more masculine.", "You begin to reshape [target]'s genitals to look more masculine...") else - user.visible_message("[user] begins to reshape [target]'s genitals to look more feminine.") + user.visible_message("[user] begins to reshape [target]'s genitals to look more feminine.", "You begin to reshape [target]'s genitals to look more feminine...") /datum/surgery_step/reshape_genitals/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) var/mob/living/carbon/human/H = target //no type check, as that should be handled by the surgery H.gender_ambiguous = 0 if(target.gender == FEMALE) - user.visible_message("[user] has made a man of [target]!") + user.visible_message("[user] has made a man of [target]!", "You made [target] a man.") target.gender = MALE else - user.visible_message("[user] has made a woman of [target]!") + user.visible_message("[user] has made a woman of [target]!", "You made [target] a woman.") target.gender = FEMALE target.regenerate_icons() return 1 @@ -32,7 +32,7 @@ /datum/surgery_step/reshape_genitals/failure(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) var/mob/living/carbon/human/H = target H.gender_ambiguous = 1 - user.visible_message("[user] mutilates [target]'s genitals beyond the point of recognition!") + user.visible_message("[user] accidentally mutilates [target]'s genitals beyond the point of recognition!", "You accidentally mutilate [target]'s genitals beyond the point of recognition!") target.gender = pick(MALE, FEMALE) target.regenerate_icons() return 1 diff --git a/code/modules/surgery/generic_steps.dm b/code/modules/surgery/generic_steps.dm index 7683c9444ff..a4ea6e51ba2 100644 --- a/code/modules/surgery/generic_steps.dm +++ b/code/modules/surgery/generic_steps.dm @@ -1,11 +1,11 @@ //make incision /datum/surgery_step/incise - implements = list(/obj/item/weapon/scalpel = 100, /obj/item/weapon/kitchenknife = 65, /obj/item/weapon/shard = 45) + implements = list(/obj/item/weapon/scalpel = 100, /obj/item/weapon/kitchen/knife = 65, /obj/item/weapon/shard = 45) time = 24 /datum/surgery_step/incise/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) - user.visible_message("[user] begins to make an incision in [target]'s [parse_zone(target_zone)].") + user.visible_message("[user] begins to make an incision in [target]'s [parse_zone(target_zone)].", "You begin to make an incision in [target]'s [parse_zone(target_zone)]...") @@ -15,7 +15,7 @@ time = 48 /datum/surgery_step/clamp_bleeders/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) - user.visible_message("[user] begins to clamp bleeders in [target]'s [parse_zone(target_zone)].") + user.visible_message("[user] begins to clamp bleeders in [target]'s [parse_zone(target_zone)].", "You begin to clamp bleeders in [target]'s [parse_zone(target_zone)]...") //retract skin @@ -24,7 +24,7 @@ time = 32 /datum/surgery_step/retract_skin/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) - user.visible_message("[user] begins to retract the skin in [target]'s [parse_zone(target_zone)].") + user.visible_message("[user] begins to retract the skin in [target]'s [parse_zone(target_zone)].", "You begin to retract the skin in [target]'s [parse_zone(target_zone)]...") @@ -34,7 +34,7 @@ time = 32 /datum/surgery_step/close/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) - user.visible_message("[user] begins to mend the incision in [target]'s [parse_zone(target_zone)].") + user.visible_message("[user] begins to mend the incision in [target]'s [parse_zone(target_zone)].", "You begin to mend the incision in [target]'s [parse_zone(target_zone)]...") /datum/surgery_step/close/tool_check(mob/user, obj/item/tool) @@ -58,11 +58,11 @@ //saw bone /datum/surgery_step/saw - implements = list(/obj/item/weapon/circular_saw = 100, /obj/item/weapon/melee/arm_blade = 75, /obj/item/weapon/hatchet = 35, /obj/item/weapon/kitchenknife/butcher = 25) + implements = list(/obj/item/weapon/circular_saw = 100, /obj/item/weapon/melee/arm_blade = 75, /obj/item/weapon/hatchet = 35, /obj/item/weapon/kitchen/knife/butcher = 25) time = 64 /datum/surgery_step/saw/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) - user.visible_message("[user] begins to saw through the bone in [target]'s [parse_zone(target_zone)].") + user.visible_message("[user] begins to saw through the bone in [target]'s [parse_zone(target_zone)].", "You begin to saw through the bone in [target]'s [parse_zone(target_zone)]...") diff --git a/code/modules/surgery/helpers.dm b/code/modules/surgery/helpers.dm index 360e4607720..a25e97df091 100644 --- a/code/modules/surgery/helpers.dm +++ b/code/modules/surgery/helpers.dm @@ -41,16 +41,16 @@ var/datum/surgery/S = available_surgeries[P] var/datum/surgery/procedure = new S.type if(procedure) - if(get_location_accessible(M, procedure.location)) + if(get_location_accessible(M, procedure.location) || procedure.ignore_clothes) if(procedure.location == "anywhere") // if location == "anywhere" change location to the surgeon's target, otherwise leave location as is. procedure.location = user.zone_sel.selecting M.surgeries += procedure - user.visible_message("[user] drapes [I] over [M]'s [parse_zone(procedure.location)] to prepare for \an [procedure.name].") + user.visible_message("[user] drapes [I] over [M]'s [parse_zone(procedure.location)] to prepare for \an [procedure.name].", "You drape [I] over [M]'s [parse_zone(procedure.location)] to prepare for \an [procedure.name].") add_logs(user, M, "operated", addition="Operation type: [procedure.name]") return 1 else - user << "You need to expose [M]'s [procedure.location] first." + user << "You need to expose [M]'s [procedure.location] first!" return 1 //return 1 so we don't slap the guy in the dick with the drapes. else return 1 //once the input menu comes up, cancelling it shouldn't hit the guy with the drapes either. diff --git a/code/modules/surgery/implant_removal.dm b/code/modules/surgery/implant_removal.dm index 97277220159..8e21fae2ff2 100644 --- a/code/modules/surgery/implant_removal.dm +++ b/code/modules/surgery/implant_removal.dm @@ -19,19 +19,19 @@ I = W break if(I) - user.visible_message("[user] begins to extract [I] from [target]'s [target_zone].") + user.visible_message("[user] begins to extract [I] from [target]'s [target_zone].", "You begin to extract [I] from [target]'s [target_zone]...") else - user.visible_message("[user] looks for an implant in [target]'s [target_zone].") + user.visible_message("[user] looks for an implant in [target]'s [target_zone].", "You look for an implant in [target]'s [target_zone]...") /datum/surgery_step/extract_implant/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) if(I) - user.visible_message("[user] successfully removes [I] from [target]'s [target_zone]!") + user.visible_message("[user] successfully removes [I] from [target]'s [target_zone]!", "You successfully remove [I] from [target]'s [target_zone].") if(istype(I, /obj/item/weapon/implant/loyalty)) - target << "You feel a sense of liberation as Nanotrasen's grip on your mind fades away." + target << "You feel a sense of liberation as Nanotrasen's grip on your mind fades away." qdel(I) if(istype(target, /mob/living/carbon/human)) var/mob/living/carbon/human/H = target H.sec_hud_set_implants() else - user.visible_message("[user] can't find anything in [target]'s [target_zone].") + user << "You can't find anything in [target]'s [target_zone]!" return 1 diff --git a/code/modules/surgery/limb augmentation.dm b/code/modules/surgery/limb augmentation.dm index f9a26f9f49a..b520fb5a4e8 100644 --- a/code/modules/surgery/limb augmentation.dm +++ b/code/modules/surgery/limb augmentation.dm @@ -10,7 +10,7 @@ /datum/surgery_step/replace/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) - user.visible_message("[user] begins to sever the muscles on [target]'s [parse_zone(user.zone_sel.selecting)]!") + user.visible_message("[user] begins to sever the muscles on [target]'s [parse_zone(user.zone_sel.selecting)].", "You begin to sever the muscles on [target]'s [parse_zone(user.zone_sel.selecting)]...") /datum/surgery_step/add_limb @@ -24,9 +24,9 @@ /datum/surgery_step/add_limb/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) L = new_organ if(L) - user.visible_message("[user] begins to augment [target]'s [parse_zone(user.zone_sel.selecting)].") + user.visible_message("[user] begins to augment [target]'s [parse_zone(user.zone_sel.selecting)].", "You begin to augment [target]'s [parse_zone(user.zone_sel.selecting)]...") else - user.visible_message("[user] looks for [target]'s [parse_zone(user.zone_sel.selecting)].") + user.visible_message("[user] looks for [target]'s [parse_zone(user.zone_sel.selecting)].", "You look for [target]'s [parse_zone(user.zone_sel.selecting)]...") @@ -46,7 +46,7 @@ if(L) if(ishuman(target)) var/mob/living/carbon/human/H = target - user.visible_message("[user] successfully augments [target]'s [parse_zone(target_zone)]!") + user.visible_message("[user] successfully augments [target]'s [parse_zone(target_zone)]!", "You successfully augment [target]'s [parse_zone(target_zone)].") L.loc = get_turf(target) H.organs -= L switch(target_zone) @@ -72,5 +72,5 @@ H.update_augments() //Gives them the Cyber limb overlay add_logs(user, target, "augmented", addition="by giving him new [parse_zone(target_zone)] INTENT: [uppertext(user.a_intent)]") else - user.visible_message("[user] [target] has no organic [parse_zone(target_zone)] there!") + user << "[target] has no organic [parse_zone(target_zone)] there!" return 1 diff --git a/code/modules/surgery/lipoplasty.dm b/code/modules/surgery/lipoplasty.dm index 2f3645a5df3..532e90e1e9e 100644 --- a/code/modules/surgery/lipoplasty.dm +++ b/code/modules/surgery/lipoplasty.dm @@ -9,14 +9,14 @@ //cut fat /datum/surgery_step/cut_fat - implements = list(/obj/item/weapon/circular_saw = 100, /obj/item/weapon/hatchet = 35, /obj/item/weapon/kitchenknife/butcher = 25) + implements = list(/obj/item/weapon/circular_saw = 100, /obj/item/weapon/hatchet = 35, /obj/item/weapon/kitchen/knife/butcher = 25) time = 64 /datum/surgery_step/cut_fat/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) - user.visible_message("[user] begins to cut away [target]'s excess fat!") + user.visible_message("[user] begins to cut away [target]'s excess fat.", "You begin to cut away [target]'s excess fat...") /datum/surgery_step/cut_fat/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) - user.visible_message("[user] cuts [target]'s excess fat loose!") + user.visible_message("[user] cuts [target]'s excess fat loose!", "You cut [target]'s excess fat loose.") return 1 //remove fat @@ -25,10 +25,10 @@ time = 32 /datum/surgery_step/remove_fat/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) - user.visible_message("[user] begins to extract [target]'s loose fat!") + user.visible_message("[user] begins to extract [target]'s loose fat!", "You begin to extract [target]'s loose fat...") /datum/surgery_step/remove_fat/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) - user.visible_message("[user] extracts [target]'s fat!") + user.visible_message("[user] extracts [target]'s fat!", "You extract [target]'s fat.") target.overeatduration = 0 //patient is unfatted var/removednutriment = target.nutrition target.nutrition = NUTRITION_LEVEL_WELL_FED diff --git a/code/modules/surgery/plastic_surgery.dm b/code/modules/surgery/plastic_surgery.dm index aa744928a95..52695210d1c 100644 --- a/code/modules/surgery/plastic_surgery.dm +++ b/code/modules/surgery/plastic_surgery.dm @@ -6,19 +6,19 @@ //reshape_face /datum/surgery_step/reshape_face - implements = list(/obj/item/weapon/scalpel = 100, /obj/item/weapon/kitchenknife = 50, /obj/item/weapon/wirecutters = 35) + implements = list(/obj/item/weapon/scalpel = 100, /obj/item/weapon/kitchen/knife = 50, /obj/item/weapon/wirecutters = 35) time = 64 /datum/surgery_step/reshape_face/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) - user.visible_message("[user] begins to alter [target]'s appearance.") + user.visible_message("[user] begins to alter [target]'s appearance.", "You begin to alter [target]'s appearance...") /datum/surgery_step/reshape_face/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) if(target.status_flags & DISFIGURED) target.status_flags &= ~DISFIGURED - user.visible_message("[user] successfully restores [target]'s appearance!") + user.visible_message("[user] successfully restores [target]'s appearance!", "You successfully restore [target]'s appearance.") else var/oldname = target.real_name target.real_name = random_name(target.gender) var/newname = target.real_name //something about how the code handles names required that I use this instead of target.real_name - user.visible_message("[user] alters [oldname]'s appearance completely, they are now [newname]!") + user.visible_message("[user] alters [oldname]'s appearance completely, they are now [newname]!", "You alter [oldname]'s appearance completely, they are now [newname].") return 1 \ No newline at end of file diff --git a/code/modules/surgery/remove_embedded_object.dm b/code/modules/surgery/remove_embedded_object.dm index 749faa22698..33968dd8968 100644 --- a/code/modules/surgery/remove_embedded_object.dm +++ b/code/modules/surgery/remove_embedded_object.dm @@ -18,9 +18,9 @@ /datum/surgery_step/remove_object/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) L = new_organ if(L) - user.visible_message("[user] looks for objects embedded in [target]'s [parse_zone(user.zone_sel.selecting)].") + user.visible_message("[user] looks for objects embedded in [target]'s [parse_zone(user.zone_sel.selecting)].", "You look for objects embedded in [target]'s [parse_zone(user.zone_sel.selecting)]...") else - user.visible_message("[user] looks for [target]'s [parse_zone(user.zone_sel.selecting)].") + user.visible_message("[user] looks for [target]'s [parse_zone(user.zone_sel.selecting)].", "You look for [target]'s [parse_zone(user.zone_sel.selecting)]...") /datum/surgery_step/remove_object/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) @@ -34,11 +34,11 @@ L.embedded_objects -= I if(objects > 0) - user.visible_message("[user] sucessfully removes [objects] objects from [H]'s [L.getDisplayName()]!") + user.visible_message("[user] sucessfully removes [objects] objects from [H]'s [L.getDisplayName()]!", "You sucessfully remove [objects] objects from [H]'s [L.getDisplayName()].") else - user.visible_message("[user] finds no objects embedded in [H]'s [L.getDisplayName()].") + user << "You find no objects embedded in [H]'s [L.getDisplayName()]!" else - user.visible_message("[user] can't find [target]'s [parse_zone(user.zone_sel.selecting)], let alone any objects embedded in it!") + user << "You can't find [target]'s [parse_zone(user.zone_sel.selecting)], let alone any objects embedded in it!" return 1 \ No newline at end of file diff --git a/code/modules/surgery/surgery.dm b/code/modules/surgery/surgery.dm index 88e590ca8dc..fff1661c6bd 100644 --- a/code/modules/surgery/surgery.dm +++ b/code/modules/surgery/surgery.dm @@ -11,6 +11,7 @@ var/has_multi_loc = 0 //Multiple locations - RR var/user_species_restricted = 0 //Surgery only performable BY species var/list/user_species_ids + var/ignore_clothes = 0 //This surgery ignores clothes /datum/surgery/proc/next_step(mob/user, mob/living/carbon/target) if(step_in_progress) return diff --git a/code/modules/surgery/surgery_step.dm b/code/modules/surgery/surgery_step.dm index 19d5eca182c..f139e46f55d 100644 --- a/code/modules/surgery/surgery_step.dm +++ b/code/modules/surgery/surgery_step.dm @@ -29,7 +29,7 @@ initiate(user, target, target_zone, tool, surgery) return 1 else - user << "You need to expose [target]'s [parse_zone(target_zone)] to perform surgery on it!" + user << "You need to expose [target]'s [parse_zone(target_zone)] to perform surgery on it!" return 1 //returns 1 so we don't stab the guy in the dick or wherever. if(isrobot(user) && user.a_intent != "harm") //to save asimov borgs a LOT of heartache return 1 @@ -68,22 +68,22 @@ /datum/surgery_step/proc/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) - user.visible_message("[user] begins to perform surgery on [target].") + user.visible_message("[user] begins to perform surgery on [target].", "You begin to perform surgery on [target]...") /datum/surgery_step/proc/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) - user.visible_message("[user] succeeds!") + user.visible_message("[user] succeeds!", "You succeed.") return 1 /datum/surgery_step/saw/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) if(ishuman(target)) var/mob/living/carbon/human/H = target H.apply_damage(75,"brute","[target_zone]") - user.visible_message("[user] saws [target]'s [parse_zone(target_zone)] open!") + user.visible_message("[user] saws [target]'s [parse_zone(target_zone)] open!", "You saw [target]'s [parse_zone(target_zone)] open.") return 1 /datum/surgery_step/proc/failure(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) - user.visible_message("[user] screws up!") + user.visible_message("[user] screws up!", "You screw up!") return 0 /datum/surgery_step/close/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) diff --git a/code/modules/surgery/xenomorph_removal.dm b/code/modules/surgery/xenomorph_removal.dm index 98b81efcf5e..15f83e82622 100644 --- a/code/modules/surgery/xenomorph_removal.dm +++ b/code/modules/surgery/xenomorph_removal.dm @@ -13,13 +13,13 @@ time = 64 /datum/surgery_step/xenomorph_removal/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) - user.visible_message("[user] begins to search in [target]'s chest for a xenomorph.") + user.visible_message("[user] begins to search in [target]'s chest for a xenomorph embryo.", "You begin to search in [target]'s chest for a xenomorph embryo...") /datum/surgery_step/xenomorph_removal/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) if(remove_xeno(user, target)) - user.visible_message("[user] successfully extracts the xenomorph from [target]!") + user.visible_message("[user] successfully extracts the xenomorph embryo from [target]!", "You successfully extract the xenomorph embryo from [target].") else - user.visible_message("[user] can't find anything in [target]'s chest!") + user.visible_message("[user] can't seem to find anything in [target]'s chest!", "You can't find anything in [target]'s chest!") return 1 /datum/surgery_step/xenomorph_removal/proc/remove_xeno(mob/user, mob/living/carbon/target) @@ -42,8 +42,8 @@ if(A) if(prob(50)) A.AttemptGrow(0) - user.visible_message("[user] accidentally pokes the xenomorph in [target]!") + user.visible_message("[user] accidentally pokes the xenomorph in [target]!", "You accidentally poke the xenomorph in [target]!") else target.adjustOxyLoss(30) - user.visible_message("[user] accidentally pokes [target] in the lungs!") + user.visible_message("[user] accidentally pokes [target] in the lungs!", "You accidentally poke [target] in the lungs!") return 0 \ No newline at end of file diff --git a/code/modules/telesci/bscrystal.dm b/code/modules/telesci/bscrystal.dm index 7c64352ca8f..c006939d876 100644 --- a/code/modules/telesci/bscrystal.dm +++ b/code/modules/telesci/bscrystal.dm @@ -17,7 +17,7 @@ /obj/item/bluespace_crystal/attack_self(var/mob/user) - user.visible_message("[user] crushes [src]!") + user.visible_message("[user] crushes [src]!", "You crush [src]!") PoolOrNew(/obj/effect/effect/sparks, loc) playsound(src.loc, "sparks", 50, 1) blink_mob(user) diff --git a/code/modules/telesci/telesci_computer.dm b/code/modules/telesci/telesci_computer.dm index ea9d253b54f..6d602467fa1 100644 --- a/code/modules/telesci/telesci_computer.dm +++ b/code/modules/telesci/telesci_computer.dm @@ -50,7 +50,7 @@ crystals += new /obj/item/bluespace_crystal/artificial(null) // starting crystals /obj/machinery/computer/telescience/attack_paw(mob/user) - user << "You are too primitive to use this computer." + user << "You are too primitive to use this computer!" return /obj/machinery/computer/telescience/attackby(obj/item/W, mob/user, params) @@ -61,14 +61,14 @@ user.drop_item() crystals += W W.loc = null - user.visible_message("[user] inserts [W] into \the [src]'s crystal slot.") + user.visible_message("[user] inserts [W] into \the [src]'s crystal slot.", "You insert [W] into \the [src]'s crystal slot.") updateDialog() else if(istype(W, /obj/item/device/gps)) if(!inserted_gps) inserted_gps = W user.unEquip(W) W.loc = src - user.visible_message("[user] inserts [W] into \the [src]'s GPS device slot.") + user.visible_message("[user] inserts [W] into \the [src]'s GPS device slot.", "You insert [W] into \the [src]'s GPS device slot.") else if(istype(W, /obj/item/device/multitool)) var/obj/item/device/multitool/M = W if(M.buffer && istype(M.buffer, /obj/machinery/telepad)) diff --git a/config/admins.txt b/config/admins.txt index 7ee8062dcb0..81c120f06e7 100644 --- a/config/admins.txt +++ b/config/admins.txt @@ -8,6 +8,7 @@ # NOTE: syntax was changed to allow hyphenation of ranknames, since spaces are stripped. # ############################################################################################### MrStonedOne = Host +microscopics = Game Master Gun Hog = Game Master razharas = Game Master Niknakflak = Game Master diff --git a/config/game_options.txt b/config/game_options.txt index ae06f1b3675..cc2a9c13d1d 100644 --- a/config/game_options.txt +++ b/config/game_options.txt @@ -100,20 +100,46 @@ PROBABILITY SANDBOX 0 ## Toggles for continuous modes. ## Modes that aren't continuous will end the instant all antagonists are dead. -## Unlisted modes are not currently supported for noncontinous play +CONTINUOUS TRAITOR +CONTINUOUS TRAITORCHAN +CONTINUOUS DOUBLE_AGENTS +#CONTINUOUS NUCLEAR #CONTINUOUS REVOLUTION +#CONTINUOUS SHADOWLING +#CONTINUOUS GANG +CONTINUOUS CULT +CONTINUOUS CHANGELING CONTINUOUS WIZARD CONTINUOUS MALFUNCTION CONTINUOUS BLOB +#CONTINUOUS RAGINMAGES +#CONTINUOUS MONKEY + +##Note: do not toggle continuous off for these modes, as they have no antagonists and would thus end immediately! + +CONTINUOUS METEOR +CONTINUOUS EXTENDED + ## Toggles for allowing midround antagonists (aka mulligan antagonists). ## In modes that are continuous, if all antagonists should die then a new set of antagonists will be created. -## Only the listed modes are currently supported for this system +MIDROUND_ANTAG TRAITOR +MIDROUND_ANTAG TRAITORCHAN +MIDROUND_ANTAG DOUBLE_AGENTS +#MIDROUND_ANTAG NUCLEAR +#MIDROUND_ANTAG REVOLUTION +#MIDROUND_ANTAG SHADOWLING +#MIDROUND_ANTAG GANG +MIDROUND_ANTAG CULT +MIDROUND_ANTAG CHANGELING MIDROUND_ANTAG WIZARD MIDROUND_ANTAG MALFUNCTION MIDROUND_ANTAG BLOB +#MIDROUND_ANTAG RAGINMAGES +#MIDROUND_ANTAG MONKEY + ## The amount of time it takes for the emergency shuttle to be called, from round start. SHUTTLE_REFUEL_DELAY 12000 diff --git a/config/names/mime.txt b/config/names/mime.txt new file mode 100644 index 00000000000..14845a89b40 --- /dev/null +++ b/config/names/mime.txt @@ -0,0 +1,24 @@ +Mr. Beret +Mime +Mr. Mime +Mr. Mute +Silence +Silencio +Quiet +Silent Sorrow +Silent Knight +Silent Night +Untouchable +Unspeakable +Mute +Marcel Mime +Marcel +Pantomime +Omerta +Lemon Mime +Invisible Man +Transparency +Quiet Riot +Silent Majority +Wall Runner +Oui Oui \ No newline at end of file diff --git a/html/changelog.html b/html/changelog.html index 72ba54ac5c3..8ba799e8ebd 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -55,6 +55,98 @@ -->
+ 29 April 2015+AndroidSFV updated:+
AnturK updated:+
GoonOnMoon updated:+
Iamgoofball updated:+
Ikarrus updated:+
JJRcop updated:+
RemieRichards updated:+
phil235 updated:+
25 April 2015+Boggart updated:+
Gun Hog updated:+
Ikarrus updated:+
Xhuis updated:+
phil235 updated:+
22 April 2015Incoming5643 updated:
+ {{if siliconUser}}
+
+
+ Interface Lock:
+
+
+ {{:~link('Engaged', 'locked', {'toggleaccess' : 1}, locked ? 'selected' : null)}}{{:~link('Disengaged', 'unlocked', {'toggleaccess' : 1}, (locked ? null : 'selected'))}}
+
+ {{else}}
+ {{if locked}}
+ Swipe an ID card to unlock this interface.
+ {{else}}
+ Swipe an ID card to lock this interface.
+ {{/if}}
+ {{/if}}
+
+Air Status+{{if environment_data}} + {{for environment_data}} + {{:name}} + {{if danger_level == 2}} + + {{else danger_level == 1}} + + {{else}} + + {{/if}} + {{:~round(value*100)/100}} + {{:unit}}+ {{/for}} + Local Status: {{if danger_level == 2}} + DANGER: Internals Required + {{else danger_level == 1}} + Caution + {{else}} + Optimal + {{/if}} + + Area Status: {{if atmos_alarm}}Atmosphere alert in area{{else fire_alarm}}Fire alarm in area{{else}}No alerts{{/if}} +{{else}} + Warning: Cannot obtain air sample for analysis. +{{/if}} +{{if dangerous}} + NOTICE: Safety measures nonfunctional. Device may exhibit abnormal behavior. +{{/if}} + +{{if (!locked || siliconUser)}} + {{if screen != 1}} + {{:~link('Main Menu', null, { 'screen' : 1})}}
+ {{/if}}
+ {{if screen == 1}}
+
+ {{if atmos_alarm}}
+ {{:~link('Reset - Area Atmospheric Alarm', null, { 'atmos_reset' : 1})}}
+ {{else}}
+ {{:~link('Activate - Area Atmospheric Alarm', null, { 'atmos_alarm' : 1})}}
+ {{/if}}
+
+ +
+ {{:~link('Scrubbers Control', null, { 'screen' : 3})}}
+
+
+ {{:~link('Vents Control', null, { 'screen' : 2})}}
+
+
+ {{:~link('Set Environmental Mode', null, { 'screen' : 4})}}
+
+
+ {{:~link('Sensor Settings', null, { 'screen' : 5})}}
+
+ + {{if mode==3}} + {{:~link('PANIC SIPHON ACTIVE - Turn siphoning off', null, { 'mode' : 1}, null, 'redButton')}} + {{else}} + {{:~link('ACTIVATE PANIC SIPHON IN AREA', null, { 'mode' : 3}, null, 'yellowButton')}} + {{/if}} + {{else screen == 2}} + {{for vents}} + {{:long_name}}
+
+
+
+ Operating:
+
+
+ {{:~link(power ? 'On' : 'Off', null, { 'id_tag' : id_tag, 'command' : 'power', 'val' : power ? 0 : 1}, null, power ? null : 'redButton')}}
+
+
+
+
+ Mode:
+
+
+ {{:direction == "siphon" ? 'Siphoning' : 'Pressurizing'}}
+
+
+
+
+ Pressure Checks:
+
+
+ {{:~link('External', null, { 'id_tag' : id_tag, 'command' : 'excheck', 'val' : checks}, null, excheck ? 'selected' : null)}}
+ {{:~link('Internal', null, { 'id_tag' : id_tag, 'command' : 'incheck', 'val' : checks}, null, incheck ? 'selected' : null)}}
+
+
+
+
+ External Pressure Bound:
+
+
+ {{:~link(~round(external*100)/100, null, { 'id_tag' : id_tag, 'command' : 'set_external_pressure'})}}
+ {{:~link('Reset', null, { 'id_tag' : id_tag, 'command' : 'reset_external_pressure'})}}
+
+ + {{/for}} + {{if !vents.length}} + No vents connected. + {{/if}} + {{else screen == 3}} + {{for scrubbers}} + {{:long_name}}
+
+
+
+ Operating:
+
+
+ {{:~link(power ? 'On' : 'Off', null, { 'id_tag' : id_tag, 'command' : 'power', 'val' : power ? 0 : 1}, null, power ? null : 'redButton')}}
+
+
+
+
+ Mode:
+
+
+ {{:~link(scrubbing ? 'Scrubbing' : 'Siphoning', null, { 'id_tag' : id_tag, 'command' : 'scrubbing', 'val' : scrubbing ? 0 : 1}, null, scrubbing ? null : 'redButton')}}
+
+
+
+
+ Filters:
+
+
+ {{:~link("Carbon Dioxide", null, { 'id_tag' : id_tag, 'command' : "co2_scrub", 'val' : filter_co2 ? 0 : 1}, null, filter_co2 ? 'selected' : null)}}
+ + {{:~link("Plasma", null, { 'id_tag' : id_tag, 'command' : "tox_scrub", 'val' : filter_toxins ? 0 : 1}, null, filter_toxins ? 'selected' : null)}} + {{:~link("Nitrous Oxide", null, { 'id_tag' : id_tag, 'command' : "n2o_scrub", 'val' : filter_n2o ? 0 : 1}, null, filter_n2o ? 'selected' : null)}} + + {{/for}} + {{if !scrubbers.length}} + No scrubbers connected. + {{/if}} + {{else screen == 4}} + Environmental Modes+ {{for modes}} +
+ {{:~link(name, null, { 'mode' : mode }, null, selected ? (danger ? 'redButton' : 'selected') : (danger ? 'bad' : null))}}
+
+ {{/for}}
+ {{else screen == 5}}
+ Alarm Threshold+ Partial pressure for gases. +
|