mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-08-27 15:17:01 +01:00
shuttles
This commit is contained in:
@@ -180,3 +180,5 @@ Temporary Items
|
||||
.apdisk
|
||||
|
||||
|
||||
|
||||
*.before
|
||||
@@ -271,6 +271,9 @@ There is no strict process when it comes to merging pull requests, pull requests
|
||||
|
||||
* If your pull request is accepted, the code you add no longer belongs exclusively to you but to everyone; everyone is free to work on it, but you are also free to object to any changes being made, which will be noted by a Project Lead or Project Manager. It is a shame this has to be explicitly said, but there have been cases where this would've saved some trouble.
|
||||
|
||||
## Banned content
|
||||
Do not add any of the following in a Pull Request or risk getting the PR closed:
|
||||
- National Socialist Party of Germany content, National Socialist Party of Germany related content, or National Socialist Party of Germany references
|
||||
|
||||
##A word on git
|
||||
Yes we know that the files have a tonne of mixed windows and linux line endings, attempts to fix this have been met with less than stellar success and as such we have decided to give up caring until such a time as it matters.
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
##/tg/station v1.0.1
|
||||
|
||||
[](https://travis-ci.org/tgstation/-tg-station)
|
||||
[](https://travis-ci.org/tgstation/tgstation)
|
||||
|
||||
|
||||
**Website:** http://www.tgstation13.org <BR>
|
||||
**Code:** https://github.com/tgstation/-tg-station <BR>
|
||||
**Code:** https://github.com/tgstation/tgstation <BR>
|
||||
**Wiki** http://tgstation13.org/wiki/Main_Page <BR>
|
||||
**IRC:** irc://irc.rizon.net/coderbus or if you dont have an IRC client, you can click [here](https://kiwiirc.com/client/irc.rizon.net:6667/?&theme=cli#coderbus).<BR>
|
||||
|
||||
@@ -19,11 +19,11 @@ Follow this: http://www.tgstation13.org/wiki/Setting_up_git
|
||||
Option 2:
|
||||
Install GitHub::windows from http://windows.github.com/
|
||||
It handles most of the setup and configuraton of Git for you.
|
||||
Then you simply search for the -tg-station repository and click the big clone
|
||||
Then you simply search for the tgstation repository and click the big clone
|
||||
button.
|
||||
|
||||
Option 3: Download the source code as a zip by clicking the ZIP button in the
|
||||
code tab of https://github.com/tgstation/-tg-station
|
||||
code tab of https://github.com/tgstation/tgstation
|
||||
(note: this will use a lot of bandwidth if you wish to update and is a lot of
|
||||
hassle if you want to make any changes at all, so it's not recommended.)
|
||||
|
||||
@@ -131,9 +131,9 @@ Please see [CONTRIBUTING.md](CONTRIBUTING.md)
|
||||
|
||||
##LICENSE
|
||||
|
||||
All code after commit 333c566b88108de218d882840e61928a9b759d8f on 2014/31/12 at 4:38 PM PST (https://github.com/tgstation/-tg-station/commit/333c566b88108de218d882840e61928a9b759d8f) is licensed under GNU AGPL v3 (http://www.gnu.org/licenses/agpl-3.0.html).
|
||||
All code after commit 333c566b88108de218d882840e61928a9b759d8f on 2014/31/12 at 4:38 PM PST (https://github.com/tgstation/tgstation/commit/333c566b88108de218d882840e61928a9b759d8f) is licensed under GNU AGPL v3 (http://www.gnu.org/licenses/agpl-3.0.html).
|
||||
|
||||
All code before commit 333c566b88108de218d882840e61928a9b759d8f on 2014/31/12 at 4:38 PM PST (https://github.com/tgstation/-tg-station/commit/333c566b88108de218d882840e61928a9b759d8f) is licensed under GNU GPL v3 (https://www.gnu.org/licenses/gpl-3.0.html).
|
||||
All code before commit 333c566b88108de218d882840e61928a9b759d8f on 2014/31/12 at 4:38 PM PST (https://github.com/tgstation/tgstation/commit/333c566b88108de218d882840e61928a9b759d8f) is licensed under GNU GPL v3 (https://www.gnu.org/licenses/gpl-3.0.html).
|
||||
(Including tools unless their readme specifies otherwise.)
|
||||
|
||||
See LICENSE-AGPLv3.txt and LICENSE-GPLv3.txt for more details.
|
||||
|
||||
@@ -53,85 +53,60 @@
|
||||
},
|
||||
/area/ruin/powered)
|
||||
"l" = (
|
||||
/obj/structure/bodycontainer/morgue{
|
||||
desc = "An oddly modernized tomb, at least compared to where it currently is.";
|
||||
name = "tomb"
|
||||
},
|
||||
/obj/effect/mob_spawn/human/skeleton,
|
||||
/obj/item/weapon/shovel/cursed,
|
||||
/turf/open/floor/plasteel/black{
|
||||
baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface
|
||||
},
|
||||
/area/ruin/powered)
|
||||
"m" = (
|
||||
/obj/item/weapon/grown/bananapeel,
|
||||
/obj/structure/mineral_door/transparent/diamond,
|
||||
/turf/open/floor/vault{
|
||||
baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface
|
||||
},
|
||||
/area/ruin/powered)
|
||||
"n" = (
|
||||
"m" = (
|
||||
/obj/item/weapon/ore/diamond,
|
||||
/turf/open/floor/plasteel/black{
|
||||
baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface
|
||||
},
|
||||
/area/ruin/powered)
|
||||
"o" = (
|
||||
"n" = (
|
||||
/turf/open/floor/vault{
|
||||
baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface
|
||||
},
|
||||
/area/ruin/powered)
|
||||
"p" = (
|
||||
"o" = (
|
||||
/obj/item/weapon/ore/gold,
|
||||
/turf/open/floor/plasteel/black{
|
||||
baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface
|
||||
},
|
||||
/area/ruin/powered)
|
||||
"q" = (
|
||||
"p" = (
|
||||
/turf/open/floor/plating/lava/smooth/lava_land_surface,
|
||||
/area/ruin/powered)
|
||||
"r" = (
|
||||
/obj/structure/bodycontainer/morgue{
|
||||
desc = "An oddly modernized tomb, at least compared to where it currently is.";
|
||||
name = "tomb"
|
||||
},
|
||||
/obj/effect/mob_spawn/human/skeleton{
|
||||
helmet = /obj/item/clothing/head/helmet/stahlhelm;
|
||||
name = "german remains";
|
||||
uniform = /obj/item/clothing/under/wwii
|
||||
},
|
||||
/turf/open/floor/plasteel/black{
|
||||
baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface
|
||||
},
|
||||
/area/ruin/powered)
|
||||
"s" = (
|
||||
"q" = (
|
||||
/obj/structure/table,
|
||||
/obj/item/weapon/tome,
|
||||
/turf/open/floor/plasteel/black{
|
||||
baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface
|
||||
},
|
||||
/area/ruin/powered)
|
||||
"t" = (
|
||||
"r" = (
|
||||
/obj/item/weapon/grown/bananapeel,
|
||||
/obj/structure/mineral_door/silver,
|
||||
/turf/open/floor/vault{
|
||||
baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface
|
||||
},
|
||||
/area/ruin/powered)
|
||||
"u" = (
|
||||
"s" = (
|
||||
/obj/item/weapon/ore/bananium,
|
||||
/turf/open/floor/plasteel/black{
|
||||
baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface
|
||||
},
|
||||
/area/ruin/powered)
|
||||
"v" = (
|
||||
"t" = (
|
||||
/obj/item/weapon/grown/bananapeel,
|
||||
/obj/structure/mineral_door/gold,
|
||||
/turf/open/floor/vault{
|
||||
baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface
|
||||
},
|
||||
/area/ruin/powered)
|
||||
"w" = (
|
||||
"u" = (
|
||||
/obj/structure/table/optable/abductor{
|
||||
desc = "A strange, alien-like table for cutting up things, like people.";
|
||||
name = "strange alien slab"
|
||||
@@ -144,14 +119,14 @@
|
||||
baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface
|
||||
},
|
||||
/area/ruin/powered)
|
||||
"x" = (
|
||||
"v" = (
|
||||
/obj/structure/table,
|
||||
/obj/item/weapon/spellbook/oneuse/charge,
|
||||
/turf/open/floor/plasteel/black{
|
||||
baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface
|
||||
},
|
||||
/area/ruin/powered)
|
||||
"y" = (
|
||||
"w" = (
|
||||
/obj/structure/bodycontainer/morgue{
|
||||
desc = "An oddly modernized tomb, at least compared to where it currently is.";
|
||||
name = "tomb"
|
||||
@@ -165,26 +140,26 @@
|
||||
baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface
|
||||
},
|
||||
/area/ruin/powered)
|
||||
"z" = (
|
||||
"x" = (
|
||||
/obj/item/weapon/ore/uranium,
|
||||
/turf/open/floor/plasteel/black{
|
||||
baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface
|
||||
},
|
||||
/area/ruin/powered)
|
||||
"A" = (
|
||||
"y" = (
|
||||
/obj/item/weapon/ore/plasma,
|
||||
/turf/open/floor/plasteel/black{
|
||||
baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface
|
||||
},
|
||||
/area/ruin/powered)
|
||||
"B" = (
|
||||
"z" = (
|
||||
/obj/item/weapon/grown/bananapeel,
|
||||
/obj/structure/mineral_door/iron,
|
||||
/turf/open/floor/vault{
|
||||
baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface
|
||||
},
|
||||
/area/ruin/powered)
|
||||
"C" = (
|
||||
"A" = (
|
||||
/obj/structure/table,
|
||||
/obj/item/weapon/twohanded/spear,
|
||||
/obj/item/weapon/shield/riot/buckler,
|
||||
@@ -192,7 +167,7 @@
|
||||
baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface
|
||||
},
|
||||
/area/ruin/powered)
|
||||
"D" = (
|
||||
"B" = (
|
||||
/obj/item/weapon/grown/bananapeel,
|
||||
/obj/structure/mineral_door/iron,
|
||||
/turf/open/floor/plasteel/black{
|
||||
@@ -324,8 +299,8 @@ h
|
||||
j
|
||||
k
|
||||
j
|
||||
x
|
||||
y
|
||||
v
|
||||
w
|
||||
g
|
||||
b
|
||||
b
|
||||
@@ -375,9 +350,9 @@ g
|
||||
g
|
||||
g
|
||||
g
|
||||
t
|
||||
r
|
||||
g
|
||||
t
|
||||
r
|
||||
g
|
||||
g
|
||||
g
|
||||
@@ -399,15 +374,15 @@ g
|
||||
g
|
||||
g
|
||||
g
|
||||
m
|
||||
n
|
||||
n
|
||||
n
|
||||
o
|
||||
o
|
||||
o
|
||||
i
|
||||
o
|
||||
o
|
||||
o
|
||||
z
|
||||
n
|
||||
n
|
||||
n
|
||||
x
|
||||
g
|
||||
g
|
||||
b
|
||||
@@ -426,15 +401,15 @@ h
|
||||
i
|
||||
j
|
||||
g
|
||||
o
|
||||
n
|
||||
o
|
||||
o
|
||||
m
|
||||
n
|
||||
n
|
||||
i
|
||||
o
|
||||
o
|
||||
z
|
||||
o
|
||||
n
|
||||
n
|
||||
x
|
||||
n
|
||||
g
|
||||
g
|
||||
g
|
||||
@@ -453,19 +428,19 @@ i
|
||||
k
|
||||
i
|
||||
g
|
||||
o
|
||||
n
|
||||
i
|
||||
q
|
||||
q
|
||||
p
|
||||
p
|
||||
i
|
||||
q
|
||||
q
|
||||
p
|
||||
p
|
||||
i
|
||||
o
|
||||
n
|
||||
g
|
||||
C
|
||||
C
|
||||
C
|
||||
A
|
||||
A
|
||||
A
|
||||
g
|
||||
b
|
||||
b
|
||||
@@ -480,15 +455,15 @@ i
|
||||
i
|
||||
i
|
||||
g
|
||||
o
|
||||
q
|
||||
n
|
||||
p
|
||||
i
|
||||
q
|
||||
p
|
||||
i
|
||||
q
|
||||
p
|
||||
i
|
||||
q
|
||||
o
|
||||
p
|
||||
n
|
||||
g
|
||||
i
|
||||
i
|
||||
@@ -506,21 +481,21 @@ g
|
||||
j
|
||||
i
|
||||
i
|
||||
m
|
||||
o
|
||||
q
|
||||
q
|
||||
o
|
||||
u
|
||||
o
|
||||
q
|
||||
q
|
||||
o
|
||||
B
|
||||
l
|
||||
n
|
||||
p
|
||||
p
|
||||
n
|
||||
s
|
||||
n
|
||||
p
|
||||
p
|
||||
n
|
||||
z
|
||||
i
|
||||
j
|
||||
i
|
||||
D
|
||||
B
|
||||
b
|
||||
b
|
||||
"}
|
||||
@@ -531,15 +506,15 @@ b
|
||||
b
|
||||
g
|
||||
i
|
||||
l
|
||||
k
|
||||
i
|
||||
g
|
||||
i
|
||||
i
|
||||
i
|
||||
s
|
||||
u
|
||||
w
|
||||
u
|
||||
s
|
||||
i
|
||||
i
|
||||
i
|
||||
@@ -560,21 +535,21 @@ g
|
||||
j
|
||||
i
|
||||
i
|
||||
m
|
||||
o
|
||||
q
|
||||
q
|
||||
o
|
||||
u
|
||||
o
|
||||
q
|
||||
q
|
||||
o
|
||||
B
|
||||
l
|
||||
n
|
||||
p
|
||||
p
|
||||
n
|
||||
s
|
||||
n
|
||||
p
|
||||
p
|
||||
n
|
||||
z
|
||||
i
|
||||
j
|
||||
i
|
||||
D
|
||||
B
|
||||
b
|
||||
b
|
||||
"}
|
||||
@@ -588,15 +563,15 @@ i
|
||||
i
|
||||
i
|
||||
g
|
||||
o
|
||||
q
|
||||
n
|
||||
p
|
||||
i
|
||||
q
|
||||
p
|
||||
i
|
||||
q
|
||||
p
|
||||
i
|
||||
q
|
||||
o
|
||||
p
|
||||
n
|
||||
g
|
||||
i
|
||||
i
|
||||
@@ -615,19 +590,19 @@ i
|
||||
k
|
||||
i
|
||||
g
|
||||
o
|
||||
n
|
||||
i
|
||||
q
|
||||
q
|
||||
p
|
||||
p
|
||||
i
|
||||
q
|
||||
q
|
||||
p
|
||||
p
|
||||
i
|
||||
o
|
||||
n
|
||||
g
|
||||
C
|
||||
C
|
||||
C
|
||||
A
|
||||
A
|
||||
A
|
||||
g
|
||||
b
|
||||
b
|
||||
@@ -642,15 +617,15 @@ h
|
||||
i
|
||||
j
|
||||
g
|
||||
n
|
||||
o
|
||||
p
|
||||
o
|
||||
o
|
||||
n
|
||||
n
|
||||
i
|
||||
o
|
||||
o
|
||||
A
|
||||
o
|
||||
n
|
||||
n
|
||||
y
|
||||
n
|
||||
g
|
||||
g
|
||||
g
|
||||
@@ -669,15 +644,15 @@ g
|
||||
g
|
||||
g
|
||||
g
|
||||
p
|
||||
o
|
||||
o
|
||||
o
|
||||
n
|
||||
n
|
||||
n
|
||||
i
|
||||
o
|
||||
o
|
||||
o
|
||||
A
|
||||
n
|
||||
n
|
||||
n
|
||||
y
|
||||
g
|
||||
g
|
||||
b
|
||||
@@ -699,9 +674,9 @@ g
|
||||
g
|
||||
g
|
||||
g
|
||||
v
|
||||
t
|
||||
g
|
||||
v
|
||||
t
|
||||
g
|
||||
g
|
||||
g
|
||||
@@ -724,8 +699,8 @@ e
|
||||
d
|
||||
g
|
||||
g
|
||||
r
|
||||
s
|
||||
k
|
||||
q
|
||||
i
|
||||
k
|
||||
i
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -488,9 +488,8 @@
|
||||
/turf/closed/mineral/random,
|
||||
/area/mine/explored)
|
||||
"abg" = (
|
||||
/obj/machinery/sleeper{
|
||||
icon_state = "sleeper-open";
|
||||
dir = 4
|
||||
/obj/machinery/sleeper/syndie{
|
||||
dir = 4
|
||||
},
|
||||
/turf/open/floor/plasteel/shuttle{
|
||||
icon_state = "shuttlefloor4"
|
||||
|
||||
@@ -56,7 +56,7 @@
|
||||
"abd" = (/obj/machinery/door/window{dir = 4; name = "Infirmary"; req_access_txt = "150"},/turf/open/floor/plasteel/shuttle{icon_state = "shuttlefloor4"},/area/shuttle/syndicate)
|
||||
"abe" = (/obj/machinery/door/window/westright{name = "Tool Storage"; req_access_txt = "150"},/turf/open/floor/plasteel/shuttle{icon_state = "shuttlefloor4"},/area/shuttle/syndicate)
|
||||
"abf" = (/obj/structure/table,/obj/item/weapon/storage/toolbox/syndicate,/obj/item/weapon/crowbar/red,/turf/open/floor/plasteel/shuttle{icon_state = "shuttlefloor4"},/area/shuttle/syndicate)
|
||||
"abg" = (/obj/machinery/sleeper{icon_state = "sleeper-open"; dir = 4},/turf/open/floor/plasteel/shuttle{icon_state = "shuttlefloor4"},/area/shuttle/syndicate)
|
||||
"abg" = (/obj/machinery/sleeper/syndie{dir = 4},/turf/open/floor/plasteel/shuttle{icon_state = "shuttlefloor4"},/area/shuttle/syndicate)
|
||||
"abh" = (/obj/machinery/door/window{base_state = "right"; dir = 4; icon_state = "right"; name = "Infirmary"; req_access_txt = "150"},/turf/open/floor/plasteel/shuttle{icon_state = "shuttlefloor4"},/area/shuttle/syndicate)
|
||||
"abi" = (/obj/machinery/door/window{dir = 8; name = "Tool Storage"; req_access_txt = "150"},/turf/open/floor/plasteel/shuttle{icon_state = "shuttlefloor4"},/area/shuttle/syndicate)
|
||||
"abj" = (/obj/structure/table,/obj/item/weapon/gun/syringe{pixel_x = 1; pixel_y = 2},/turf/open/floor/plasteel/shuttle{icon_state = "shuttlefloor4"},/area/shuttle/syndicate)
|
||||
|
||||
@@ -2968,8 +2968,7 @@
|
||||
},
|
||||
/area/shuttle/syndicate)
|
||||
"afH" = (
|
||||
/obj/machinery/sleeper{
|
||||
icon_state = "sleeper-open";
|
||||
/obj/machinery/sleeper/syndie{
|
||||
dir = 4
|
||||
},
|
||||
/turf/open/floor/plasteel/shuttle{
|
||||
|
||||
@@ -2176,8 +2176,7 @@
|
||||
name = "AI Satellite Service"
|
||||
})
|
||||
"adT" = (
|
||||
/obj/machinery/sleeper{
|
||||
icon_state = "sleeper-open";
|
||||
/obj/machinery/sleeper/syndie{
|
||||
dir = 4
|
||||
},
|
||||
/turf/open/floor/plasteel/shuttle{
|
||||
|
||||
+1353
-1398
File diff suppressed because it is too large
Load Diff
@@ -15166,8 +15166,7 @@
|
||||
},
|
||||
/area/tcommsat/computer)
|
||||
"Gu" = (
|
||||
/obj/machinery/sleeper{
|
||||
icon_state = "sleeper-open";
|
||||
/obj/machinery/sleeper/syndie{
|
||||
dir = 4
|
||||
},
|
||||
/turf/open/floor/plasteel/shuttle{
|
||||
|
||||
@@ -2052,7 +2052,7 @@
|
||||
pixel_x = 6;
|
||||
pixel_y = 24
|
||||
},
|
||||
/obj/machinery/atmospherics/pipe/manifold4w/scrubbers/hidden,
|
||||
/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden,
|
||||
/turf/open/floor/plasteel{
|
||||
icon_state = "redcorner";
|
||||
dir = 4
|
||||
@@ -2518,7 +2518,7 @@
|
||||
d2 = 8;
|
||||
icon_state = "4-8"
|
||||
},
|
||||
/obj/machinery/atmospherics/pipe/manifold4w/supply/hidden,
|
||||
/obj/machinery/atmospherics/pipe/manifold/supply/hidden,
|
||||
/turf/open/floor/plasteel,
|
||||
/area/security/prison)
|
||||
"aeV" = (
|
||||
@@ -2936,8 +2936,7 @@
|
||||
/obj/structure/table,
|
||||
/obj/item/device/electropack,
|
||||
/turf/open/floor/plasteel{
|
||||
icon_state = "whitehall";
|
||||
dir = 2
|
||||
icon_state = "red"
|
||||
},
|
||||
/area/security/prison)
|
||||
"afE" = (
|
||||
@@ -2954,9 +2953,9 @@
|
||||
"afF" = (
|
||||
/obj/structure/table,
|
||||
/obj/item/device/assembly/signaler,
|
||||
/obj/item/clothing/suit/straight_jacket,
|
||||
/turf/open/floor/plasteel{
|
||||
dir = 2;
|
||||
icon_state = "escape"
|
||||
icon_state = "red"
|
||||
},
|
||||
/area/security/prison)
|
||||
"afG" = (
|
||||
@@ -2972,8 +2971,7 @@
|
||||
pixel_x = -6
|
||||
},
|
||||
/turf/open/floor/plasteel{
|
||||
icon_state = "whitehall";
|
||||
dir = 2
|
||||
icon_state = "red"
|
||||
},
|
||||
/area/security/prison)
|
||||
"afH" = (
|
||||
@@ -2985,10 +2983,8 @@
|
||||
},
|
||||
/area/security/prison)
|
||||
"afI" = (
|
||||
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
|
||||
/turf/open/floor/plasteel{
|
||||
icon_state = "whitehall";
|
||||
dir = 2
|
||||
icon_state = "red"
|
||||
},
|
||||
/area/security/prison)
|
||||
"afJ" = (
|
||||
@@ -2997,8 +2993,7 @@
|
||||
pixel_y = -27
|
||||
},
|
||||
/turf/open/floor/plasteel{
|
||||
icon_state = "whitehall";
|
||||
dir = 2
|
||||
icon_state = "red"
|
||||
},
|
||||
/area/security/prison)
|
||||
"afK" = (
|
||||
@@ -3236,13 +3231,13 @@
|
||||
},
|
||||
/area/security/prison)
|
||||
"agl" = (
|
||||
/obj/machinery/door/airlock/glass_security{
|
||||
name = "Insanity Ward";
|
||||
req_access_txt = "2"
|
||||
/obj/machinery/door/airlock/security{
|
||||
name = "Interrogation";
|
||||
req_access = null;
|
||||
req_access_txt = "63"
|
||||
},
|
||||
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
|
||||
/turf/open/floor/plasteel{
|
||||
icon_state = "white"
|
||||
icon_state = "dark"
|
||||
},
|
||||
/area/security/prison)
|
||||
"agm" = (
|
||||
@@ -3312,16 +3307,13 @@
|
||||
},
|
||||
/area/security/warden)
|
||||
"ags" = (
|
||||
/obj/structure/cable{
|
||||
d1 = 1;
|
||||
d2 = 2;
|
||||
icon_state = "1-2"
|
||||
/obj/structure/chair{
|
||||
dir = 4
|
||||
},
|
||||
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
|
||||
/turf/open/floor/plasteel{
|
||||
icon_state = "showroomfloor"
|
||||
icon_state = "dark"
|
||||
},
|
||||
/area/security/warden)
|
||||
/area/security/prison)
|
||||
"agt" = (
|
||||
/turf/open/floor/plasteel{
|
||||
icon_state = "showroomfloor"
|
||||
@@ -3471,46 +3463,14 @@
|
||||
},
|
||||
/area/security/main)
|
||||
"agH" = (
|
||||
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
|
||||
/turf/open/floor/plasteel{
|
||||
icon_state = "warnwhite";
|
||||
dir = 1
|
||||
},
|
||||
/area/security/prison)
|
||||
"agI" = (
|
||||
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
|
||||
/turf/open/floor/plasteel{
|
||||
icon_state = "warnwhite";
|
||||
dir = 5
|
||||
},
|
||||
/area/security/prison)
|
||||
"agJ" = (
|
||||
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
|
||||
dir = 4
|
||||
},
|
||||
/turf/open/floor/plasteel{
|
||||
icon_state = "dark"
|
||||
},
|
||||
/area/security/brig)
|
||||
"agK" = (
|
||||
/obj/machinery/atmospherics/components/unary/vent_pump{
|
||||
dir = 4;
|
||||
on = 1
|
||||
},
|
||||
/turf/open/floor/plasteel{
|
||||
icon_state = "dark"
|
||||
},
|
||||
/area/security/brig)
|
||||
"agL" = (
|
||||
/obj/structure/table,
|
||||
/obj/item/weapon/folder/red,
|
||||
/obj/item/weapon/pen,
|
||||
/turf/open/floor/plasteel{
|
||||
dir = 9;
|
||||
icon_state = "warnwhite"
|
||||
},
|
||||
/area/security/prison)
|
||||
"agM" = (
|
||||
"agI" = (
|
||||
/obj/machinery/airalarm{
|
||||
pixel_y = 23
|
||||
},
|
||||
@@ -3520,8 +3480,8 @@
|
||||
/turf/open/floor/plasteel{
|
||||
icon_state = "dark"
|
||||
},
|
||||
/area/security/brig)
|
||||
"agN" = (
|
||||
/area/security/prison)
|
||||
"agJ" = (
|
||||
/obj/item/weapon/cigbutt,
|
||||
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
|
||||
dir = 10
|
||||
@@ -3529,6 +3489,45 @@
|
||||
/turf/open/floor/plasteel{
|
||||
icon_state = "dark"
|
||||
},
|
||||
/area/security/prison)
|
||||
"agK" = (
|
||||
/turf/open/floor/plasteel{
|
||||
icon_state = "dark"
|
||||
},
|
||||
/area/security/prison)
|
||||
"agL" = (
|
||||
/obj/machinery/atmospherics/components/unary/vent_pump{
|
||||
dir = 4;
|
||||
on = 1
|
||||
},
|
||||
/turf/open/floor/plasteel{
|
||||
icon_state = "dark"
|
||||
},
|
||||
/area/security/prison)
|
||||
"agM" = (
|
||||
/obj/structure/table,
|
||||
/obj/item/clothing/gloves/color/latex,
|
||||
/obj/item/clothing/mask/surgical,
|
||||
/obj/item/weapon/reagent_containers/spray/cleaner,
|
||||
/turf/open/floor/plasteel{
|
||||
dir = 9;
|
||||
icon_state = "whitered"
|
||||
},
|
||||
/area/security/brig)
|
||||
"agN" = (
|
||||
/obj/structure/table,
|
||||
/obj/item/device/radio/intercom{
|
||||
freerange = 0;
|
||||
frequency = 1459;
|
||||
name = "Station Intercom (General)";
|
||||
pixel_x = 0;
|
||||
pixel_y = 26
|
||||
},
|
||||
/obj/item/weapon/storage/firstaid/regular,
|
||||
/turf/open/floor/plasteel{
|
||||
dir = 10;
|
||||
icon_state = "whitered"
|
||||
},
|
||||
/area/security/brig)
|
||||
"agO" = (
|
||||
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
|
||||
@@ -3763,73 +3762,32 @@
|
||||
},
|
||||
/area/security/main)
|
||||
"ahm" = (
|
||||
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
|
||||
dir = 9
|
||||
/obj/structure/window/reinforced{
|
||||
dir = 4
|
||||
},
|
||||
/obj/structure/table,
|
||||
/obj/item/weapon/paper_bin{
|
||||
pixel_x = -3;
|
||||
pixel_y = 7
|
||||
},
|
||||
/obj/item/weapon/pen,
|
||||
/turf/open/floor/plasteel{
|
||||
icon_state = "white"
|
||||
dir = 5;
|
||||
icon_state = "whitered"
|
||||
},
|
||||
/area/security/prison)
|
||||
/area/security/brig)
|
||||
"ahn" = (
|
||||
/turf/closed/wall,
|
||||
/area/maintenance/fsmaint)
|
||||
"aho" = (
|
||||
/turf/open/floor/plasteel{
|
||||
icon_state = "white"
|
||||
},
|
||||
/area/security/prison)
|
||||
"ahp" = (
|
||||
/obj/machinery/light{
|
||||
icon_state = "tube1";
|
||||
dir = 8
|
||||
},
|
||||
/obj/item/device/radio/intercom{
|
||||
desc = "Talk through this. It looks like it has been modified to not broadcast.";
|
||||
dir = 2;
|
||||
name = "Prison Intercom (General)";
|
||||
pixel_x = -25;
|
||||
pixel_y = -2;
|
||||
prison_radio = 1
|
||||
},
|
||||
/obj/machinery/atmospherics/components/unary/vent_scrubber{
|
||||
dir = 4;
|
||||
on = 1;
|
||||
scrub_N2O = 0;
|
||||
scrub_Toxins = 0
|
||||
},
|
||||
/turf/open/floor/plasteel{
|
||||
icon_state = "white"
|
||||
},
|
||||
/area/security/prison)
|
||||
"ahq" = (
|
||||
/obj/machinery/flasher{
|
||||
id = "insaneflash";
|
||||
pixel_x = 26
|
||||
},
|
||||
/obj/machinery/atmospherics/components/unary/vent_pump{
|
||||
dir = 1;
|
||||
external_pressure_bound = 101.325;
|
||||
on = 1;
|
||||
pressure_checks = 1
|
||||
},
|
||||
/turf/open/floor/plasteel{
|
||||
icon_state = "white"
|
||||
},
|
||||
/area/security/prison)
|
||||
"ahr" = (
|
||||
/obj/structure/chair{
|
||||
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
|
||||
dir = 4
|
||||
},
|
||||
/turf/open/floor/plasteel{
|
||||
icon_state = "dark"
|
||||
},
|
||||
/area/security/brig)
|
||||
"ahs" = (
|
||||
/turf/open/floor/plasteel{
|
||||
icon_state = "dark"
|
||||
},
|
||||
/area/security/brig)
|
||||
"aht" = (
|
||||
/area/security/prison)
|
||||
"ahp" = (
|
||||
/obj/structure/chair{
|
||||
dir = 8
|
||||
},
|
||||
@@ -3837,13 +3795,57 @@
|
||||
/turf/open/floor/plasteel{
|
||||
icon_state = "dark"
|
||||
},
|
||||
/area/security/brig)
|
||||
"ahu" = (
|
||||
/area/security/prison)
|
||||
"ahq" = (
|
||||
/obj/structure/table,
|
||||
/obj/item/device/flashlight/lamp,
|
||||
/turf/open/floor/plasteel{
|
||||
icon_state = "dark"
|
||||
},
|
||||
/area/security/prison)
|
||||
"ahr" = (
|
||||
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
|
||||
dir = 4
|
||||
},
|
||||
/turf/open/floor/plasteel{
|
||||
icon_state = "white"
|
||||
},
|
||||
/area/security/brig)
|
||||
"ahs" = (
|
||||
/obj/machinery/light/small{
|
||||
dir = 1
|
||||
},
|
||||
/obj/machinery/airalarm{
|
||||
pixel_y = 28
|
||||
},
|
||||
/turf/open/floor/plasteel{
|
||||
dir = 1;
|
||||
icon_state = "whitered"
|
||||
},
|
||||
/area/security/brig)
|
||||
"aht" = (
|
||||
/obj/machinery/atmospherics/components/unary/vent_pump{
|
||||
dir = 4;
|
||||
on = 1
|
||||
},
|
||||
/turf/open/floor/plasteel{
|
||||
icon_state = "white"
|
||||
},
|
||||
/area/security/brig)
|
||||
"ahu" = (
|
||||
/obj/structure/table,
|
||||
/obj/item/weapon/storage/box/bodybags,
|
||||
/obj/structure/extinguisher_cabinet{
|
||||
pixel_x = -27;
|
||||
pixel_y = 0
|
||||
},
|
||||
/obj/item/weapon/reagent_containers/syringe,
|
||||
/obj/item/weapon/reagent_containers/glass/bottle/charcoal,
|
||||
/obj/item/weapon/reagent_containers/glass/bottle/epinephrine,
|
||||
/turf/open/floor/plasteel{
|
||||
dir = 10;
|
||||
icon_state = "whitered"
|
||||
},
|
||||
/area/security/brig)
|
||||
"ahv" = (
|
||||
/obj/machinery/power/apc{
|
||||
@@ -3965,21 +3967,21 @@
|
||||
/turf/open/floor/plasteel,
|
||||
/area/security/main)
|
||||
"ahD" = (
|
||||
/obj/structure/cable{
|
||||
d1 = 4;
|
||||
d2 = 8;
|
||||
icon_state = "4-8"
|
||||
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
|
||||
dir = 4
|
||||
},
|
||||
/obj/structure/cable{
|
||||
d1 = 1;
|
||||
d2 = 4;
|
||||
icon_state = "1-4"
|
||||
/obj/machinery/door/window/westleft{
|
||||
base_state = "left";
|
||||
dir = 4;
|
||||
icon_state = "left";
|
||||
name = "Infirmary";
|
||||
req_access_txt = "0"
|
||||
},
|
||||
/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden,
|
||||
/turf/open/floor/plasteel{
|
||||
icon_state = "showroomfloor"
|
||||
dir = 4;
|
||||
icon_state = "whitered"
|
||||
},
|
||||
/area/security/warden)
|
||||
/area/security/brig)
|
||||
"ahE" = (
|
||||
/obj/machinery/door/airlock/glass_security{
|
||||
name = "Brig Control";
|
||||
@@ -4160,12 +4162,8 @@
|
||||
/turf/closed/wall,
|
||||
/area/security/main)
|
||||
"ahP" = (
|
||||
/obj/machinery/camera{
|
||||
c_tag = "Brig Interrogation";
|
||||
dir = 8
|
||||
},
|
||||
/turf/open/floor/plasteel{
|
||||
icon_state = "dark"
|
||||
icon_state = "white"
|
||||
},
|
||||
/area/security/brig)
|
||||
"ahQ" = (
|
||||
@@ -4224,33 +4222,22 @@
|
||||
/turf/open/floor/plating,
|
||||
/area/maintenance/fsmaint)
|
||||
"ahU" = (
|
||||
/obj/structure/bed,
|
||||
/obj/item/clothing/suit/straight_jacket,
|
||||
/obj/machinery/camera{
|
||||
c_tag = "Prison Sanitatium";
|
||||
dir = 4;
|
||||
network = list("SS13","Prison");
|
||||
pixel_x = 0;
|
||||
/obj/structure/cable{
|
||||
d1 = 1;
|
||||
d2 = 2;
|
||||
icon_state = "1-2";
|
||||
pixel_y = 0
|
||||
},
|
||||
/obj/effect/landmark{
|
||||
name = "revenantspawn"
|
||||
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
|
||||
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
|
||||
dir = 4
|
||||
},
|
||||
/turf/open/floor/plasteel{
|
||||
icon_state = "white"
|
||||
icon_state = "red";
|
||||
dir = 9
|
||||
},
|
||||
/area/security/prison)
|
||||
/area/security/brig)
|
||||
"ahV" = (
|
||||
/obj/structure/bed,
|
||||
/obj/item/clothing/suit/straight_jacket,
|
||||
/obj/effect/landmark{
|
||||
name = "revenantspawn"
|
||||
},
|
||||
/turf/open/floor/plasteel{
|
||||
icon_state = "white"
|
||||
},
|
||||
/area/security/prison)
|
||||
"ahW" = (
|
||||
/obj/structure/table,
|
||||
/obj/item/weapon/folder/red,
|
||||
/obj/item/device/taperecorder{
|
||||
@@ -4259,6 +4246,15 @@
|
||||
/turf/open/floor/plasteel{
|
||||
icon_state = "dark"
|
||||
},
|
||||
/area/security/prison)
|
||||
"ahW" = (
|
||||
/obj/structure/bodycontainer/morgue,
|
||||
/obj/structure/window/reinforced{
|
||||
dir = 1
|
||||
},
|
||||
/turf/open/floor/plasteel{
|
||||
icon_state = "dark"
|
||||
},
|
||||
/area/security/brig)
|
||||
"ahX" = (
|
||||
/obj/structure/table,
|
||||
@@ -4343,12 +4339,10 @@
|
||||
/turf/open/floor/plating,
|
||||
/area/maintenance/fsmaint)
|
||||
"aid" = (
|
||||
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
|
||||
dir = 4
|
||||
},
|
||||
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
|
||||
/obj/machinery/light/small,
|
||||
/turf/open/floor/plasteel{
|
||||
icon_state = "dark"
|
||||
dir = 10;
|
||||
icon_state = "whitered"
|
||||
},
|
||||
/area/security/brig)
|
||||
"aie" = (
|
||||
@@ -4384,19 +4378,14 @@
|
||||
},
|
||||
/area/security/warden)
|
||||
"aih" = (
|
||||
/obj/structure/table,
|
||||
/obj/item/weapon/paper_bin{
|
||||
pixel_x = -3;
|
||||
pixel_y = 7
|
||||
},
|
||||
/obj/item/weapon/book/manual/wiki/security_space_law,
|
||||
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
|
||||
/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
|
||||
dir = 4
|
||||
},
|
||||
/turf/open/floor/plasteel{
|
||||
icon_state = "showroomfloor"
|
||||
icon_state = "red";
|
||||
dir = 5
|
||||
},
|
||||
/area/security/warden)
|
||||
/area/security/brig)
|
||||
"aii" = (
|
||||
/obj/structure/grille,
|
||||
/obj/structure/disposalpipe/segment{
|
||||
@@ -4438,9 +4427,14 @@
|
||||
},
|
||||
/area/security/main)
|
||||
"ail" = (
|
||||
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
|
||||
/turf/closed/wall,
|
||||
/area/security/brig)
|
||||
/obj/machinery/camera{
|
||||
c_tag = "Brig Interrogation";
|
||||
dir = 8
|
||||
},
|
||||
/turf/open/floor/plasteel{
|
||||
icon_state = "dark"
|
||||
},
|
||||
/area/security/prison)
|
||||
"aim" = (
|
||||
/obj/machinery/light_switch{
|
||||
pixel_y = -23
|
||||
@@ -4451,14 +4445,9 @@
|
||||
},
|
||||
/area/security/main)
|
||||
"ain" = (
|
||||
/obj/machinery/door/airlock/security{
|
||||
name = "Interrogation";
|
||||
req_access = null;
|
||||
req_access_txt = "63"
|
||||
},
|
||||
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
|
||||
/turf/open/floor/plasteel{
|
||||
icon_state = "dark"
|
||||
dir = 8;
|
||||
icon_state = "whitered"
|
||||
},
|
||||
/area/security/brig)
|
||||
"aio" = (
|
||||
@@ -4566,24 +4555,18 @@
|
||||
},
|
||||
/area/security/main)
|
||||
"aiw" = (
|
||||
/obj/machinery/door/airlock/maintenance{
|
||||
name = "Security Maintenance";
|
||||
req_access_txt = "63"
|
||||
/obj/machinery/door/window/westleft{
|
||||
base_state = "right";
|
||||
dir = 4;
|
||||
icon_state = "right";
|
||||
name = "Infirmary";
|
||||
req_access_txt = "0"
|
||||
},
|
||||
/obj/structure/cable{
|
||||
d1 = 4;
|
||||
d2 = 8;
|
||||
icon_state = "4-8";
|
||||
pixel_y = 0
|
||||
/turf/open/floor/plasteel{
|
||||
dir = 4;
|
||||
icon_state = "whitered"
|
||||
},
|
||||
/obj/structure/disposalpipe/segment{
|
||||
dir = 4
|
||||
},
|
||||
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
|
||||
dir = 4
|
||||
},
|
||||
/turf/open/floor/plating,
|
||||
/area/security/main)
|
||||
/area/security/brig)
|
||||
"aix" = (
|
||||
/obj/structure/cable{
|
||||
d1 = 4;
|
||||
@@ -4628,45 +4611,49 @@
|
||||
/turf/open/floor/plating,
|
||||
/area/maintenance/fsmaint)
|
||||
"aiB" = (
|
||||
/obj/structure/table/glass,
|
||||
/obj/item/weapon/reagent_containers/glass/bottle/morphine,
|
||||
/turf/open/floor/plasteel{
|
||||
icon_state = "white"
|
||||
},
|
||||
/area/security/prison)
|
||||
"aiC" = (
|
||||
/obj/structure/table/glass,
|
||||
/obj/item/weapon/reagent_containers/syringe,
|
||||
/turf/open/floor/plasteel{
|
||||
icon_state = "white"
|
||||
},
|
||||
/area/security/prison)
|
||||
"aiD" = (
|
||||
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
|
||||
dir = 4
|
||||
},
|
||||
/turf/open/floor/plasteel{
|
||||
icon_state = "dark"
|
||||
},
|
||||
/area/security/brig)
|
||||
"aiE" = (
|
||||
/obj/machinery/atmospherics/components/unary/vent_scrubber{
|
||||
dir = 4;
|
||||
on = 1;
|
||||
scrub_N2O = 0;
|
||||
scrub_Toxins = 0
|
||||
},
|
||||
/turf/open/floor/plasteel{
|
||||
icon_state = "dark"
|
||||
},
|
||||
/area/security/prison)
|
||||
"aiC" = (
|
||||
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
|
||||
dir = 4
|
||||
},
|
||||
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
|
||||
/turf/open/floor/plasteel{
|
||||
icon_state = "dark"
|
||||
},
|
||||
/area/security/prison)
|
||||
"aiD" = (
|
||||
/obj/structure/bodycontainer/morgue,
|
||||
/turf/open/floor/plasteel{
|
||||
icon_state = "dark"
|
||||
},
|
||||
/area/security/brig)
|
||||
"aiF" = (
|
||||
"aiE" = (
|
||||
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
|
||||
dir = 10
|
||||
},
|
||||
/turf/open/floor/plasteel{
|
||||
icon_state = "dark"
|
||||
},
|
||||
/area/security/prison)
|
||||
"aiF" = (
|
||||
/obj/structure/bed,
|
||||
/obj/item/weapon/bedsheet,
|
||||
/obj/machinery/iv_drip{
|
||||
density = 0
|
||||
},
|
||||
/obj/item/clothing/suit/straight_jacket,
|
||||
/turf/open/floor/plasteel{
|
||||
icon_state = "whitered"
|
||||
},
|
||||
/area/security/brig)
|
||||
"aiG" = (
|
||||
/turf/open/floor/plasteel{
|
||||
@@ -4777,20 +4764,19 @@
|
||||
/turf/open/floor/plating,
|
||||
/area/security/warden)
|
||||
"aiO" = (
|
||||
/obj/machinery/door/firedoor,
|
||||
/obj/machinery/door/airlock/security{
|
||||
name = "Security Office";
|
||||
req_access = null;
|
||||
req_access_txt = "63"
|
||||
/obj/structure/window/reinforced{
|
||||
dir = 4
|
||||
},
|
||||
/obj/structure/cable{
|
||||
d1 = 1;
|
||||
d2 = 2;
|
||||
icon_state = "1-2"
|
||||
/obj/structure/table,
|
||||
/obj/item/weapon/storage/firstaid/regular,
|
||||
/obj/item/device/healthanalyzer{
|
||||
pixel_y = -2
|
||||
},
|
||||
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
|
||||
/turf/open/floor/plasteel,
|
||||
/area/security/main)
|
||||
/turf/open/floor/plasteel{
|
||||
dir = 6;
|
||||
icon_state = "whitered"
|
||||
},
|
||||
/area/security/brig)
|
||||
"aiP" = (
|
||||
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
|
||||
/turf/closed/wall/r_wall,
|
||||
@@ -4827,10 +4813,16 @@
|
||||
/turf/closed/wall/r_wall,
|
||||
/area/security/processing)
|
||||
"aiW" = (
|
||||
/obj/structure/grille,
|
||||
/obj/structure/window/reinforced/fulltile,
|
||||
/turf/open/floor/plating,
|
||||
/area/security/brig)
|
||||
/obj/machinery/door/airlock/security{
|
||||
name = "Interrogation";
|
||||
req_access = null;
|
||||
req_access_txt = "63"
|
||||
},
|
||||
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
|
||||
/turf/open/floor/plasteel{
|
||||
icon_state = "dark"
|
||||
},
|
||||
/area/security/prison)
|
||||
"aiX" = (
|
||||
/turf/closed/wall/r_wall,
|
||||
/area/security/brig)
|
||||
@@ -4851,7 +4843,6 @@
|
||||
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
|
||||
dir = 4
|
||||
},
|
||||
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
|
||||
/turf/open/floor/plasteel{
|
||||
icon_state = "redcorner";
|
||||
dir = 1
|
||||
@@ -4864,7 +4855,9 @@
|
||||
icon_state = "4-8";
|
||||
pixel_y = 0
|
||||
},
|
||||
/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden,
|
||||
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
|
||||
dir = 4
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
/area/security/brig)
|
||||
"ajb" = (
|
||||
@@ -5069,6 +5062,7 @@
|
||||
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
|
||||
dir = 4
|
||||
},
|
||||
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
|
||||
/turf/open/floor/plasteel{
|
||||
icon_state = "red";
|
||||
dir = 1
|
||||
@@ -5107,9 +5101,7 @@
|
||||
},
|
||||
/area/security/brig)
|
||||
"ajA" = (
|
||||
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
|
||||
dir = 4
|
||||
},
|
||||
/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden,
|
||||
/turf/open/floor/plasteel{
|
||||
icon_state = "red";
|
||||
dir = 1
|
||||
@@ -5414,9 +5406,7 @@
|
||||
c_tag = "Brig West";
|
||||
dir = 1
|
||||
},
|
||||
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
|
||||
dir = 4
|
||||
},
|
||||
/obj/machinery/atmospherics/pipe/manifold/supply/hidden,
|
||||
/turf/open/floor/plasteel{
|
||||
dir = 2;
|
||||
icon_state = "redcorner"
|
||||
@@ -57176,8 +57166,7 @@
|
||||
},
|
||||
/area/engine/engineering)
|
||||
"cmM" = (
|
||||
/obj/machinery/sleeper{
|
||||
icon_state = "sleeper-open";
|
||||
/obj/machinery/sleeper/syndie{
|
||||
dir = 4
|
||||
},
|
||||
/turf/open/floor/plasteel/shuttle{
|
||||
@@ -89604,12 +89593,12 @@ adF
|
||||
aef
|
||||
aeM
|
||||
afz
|
||||
acd
|
||||
aai
|
||||
aai
|
||||
aai
|
||||
aai
|
||||
aiV
|
||||
aai
|
||||
aai
|
||||
ajt
|
||||
akc
|
||||
akJ
|
||||
@@ -89863,10 +89852,10 @@ aeO
|
||||
afJ
|
||||
acd
|
||||
agL
|
||||
ahp
|
||||
ahU
|
||||
agK
|
||||
agK
|
||||
aiB
|
||||
aiX
|
||||
aai
|
||||
ajw
|
||||
akf
|
||||
aiX
|
||||
@@ -90116,14 +90105,14 @@ abK
|
||||
acY
|
||||
adG
|
||||
aeh
|
||||
aeR
|
||||
aeO
|
||||
afI
|
||||
agl
|
||||
agH
|
||||
ahm
|
||||
ags
|
||||
ags
|
||||
aho
|
||||
aho
|
||||
aiW
|
||||
acd
|
||||
ajv
|
||||
ake
|
||||
agj
|
||||
@@ -90374,13 +90363,13 @@ acd
|
||||
acd
|
||||
aek
|
||||
aeU
|
||||
afE
|
||||
adF
|
||||
afI
|
||||
acd
|
||||
agI
|
||||
ahq
|
||||
ahV
|
||||
aiC
|
||||
agj
|
||||
aho
|
||||
acd
|
||||
ajy
|
||||
akh
|
||||
afK
|
||||
@@ -90632,12 +90621,12 @@ adF
|
||||
aej
|
||||
aeQ
|
||||
afD
|
||||
agj
|
||||
agj
|
||||
agj
|
||||
agj
|
||||
agj
|
||||
agj
|
||||
acd
|
||||
agJ
|
||||
ahp
|
||||
ahp
|
||||
aiC
|
||||
adF
|
||||
ajx
|
||||
akg
|
||||
agj
|
||||
@@ -90889,12 +90878,12 @@ adI
|
||||
aem
|
||||
aeO
|
||||
afG
|
||||
agj
|
||||
acd
|
||||
agK
|
||||
ahs
|
||||
ahs
|
||||
agK
|
||||
ail
|
||||
aiE
|
||||
agj
|
||||
aiW
|
||||
ajA
|
||||
akj
|
||||
agj
|
||||
@@ -91147,10 +91136,10 @@ ael
|
||||
aeO
|
||||
afF
|
||||
agj
|
||||
agJ
|
||||
ahs
|
||||
ahs
|
||||
aiD
|
||||
agj
|
||||
agj
|
||||
agj
|
||||
agj
|
||||
agj
|
||||
ajz
|
||||
aki
|
||||
@@ -91663,11 +91652,11 @@ afH
|
||||
agj
|
||||
agN
|
||||
aht
|
||||
aht
|
||||
ain
|
||||
aid
|
||||
ail
|
||||
agj
|
||||
aiZ
|
||||
ajF
|
||||
akk
|
||||
akN
|
||||
alw
|
||||
amg
|
||||
@@ -91919,10 +91908,10 @@ aeT
|
||||
afH
|
||||
agj
|
||||
ahs
|
||||
ahs
|
||||
ahr
|
||||
ahP
|
||||
aiF
|
||||
ain
|
||||
agj
|
||||
aja
|
||||
ajG
|
||||
akQ
|
||||
@@ -92175,10 +92164,10 @@ aeq
|
||||
aeV
|
||||
acd
|
||||
agj
|
||||
agj
|
||||
agj
|
||||
agj
|
||||
agj
|
||||
ahm
|
||||
ahD
|
||||
aiw
|
||||
aiO
|
||||
agj
|
||||
ajD
|
||||
akm
|
||||
@@ -92433,7 +92422,7 @@ afC
|
||||
agk
|
||||
agF
|
||||
agP
|
||||
agP
|
||||
ahU
|
||||
agP
|
||||
agP
|
||||
aiz
|
||||
@@ -92690,7 +92679,7 @@ afB
|
||||
agi
|
||||
agD
|
||||
agO
|
||||
agO
|
||||
aih
|
||||
agO
|
||||
agO
|
||||
aiy
|
||||
|
||||
+112
-128
@@ -1,132 +1,116 @@
|
||||
"aa" = (/turf/open/space,/turf/closed/wall/shuttle{icon_state = "swall_f6"; dir = 2},/area/shuttle/escape)
|
||||
"ab" = (/turf/closed/wall/shuttle{icon_state = "swall12"; dir = 2},/area/shuttle/escape)
|
||||
"aa" = (/turf/open/space,/area/space)
|
||||
"ab" = (/turf/closed/wall/shuttle{icon_state = "swall_s6"; dir = 2},/area/shuttle/escape)
|
||||
"ac" = (/obj/structure/grille,/obj/structure/window/shuttle,/turf/open/floor/plating,/area/shuttle/escape)
|
||||
"ad" = (/obj/machinery/door/airlock/shuttle{name = "Emergency Shuttle Airlock"},/turf/open/floor/plasteel/shuttle,/area/shuttle/escape)
|
||||
"ae" = (/turf/closed/wall/shuttle{icon_state = "swall14"; dir = 2},/area/shuttle/escape)
|
||||
"af" = (/obj/machinery/door/airlock/shuttle{name = "Emergency Shuttle Cargo Bay Airlock"},/turf/open/floor/plating{dir = 1; icon_state = "delivery"},/area/shuttle/escape)
|
||||
"ag" = (/turf/open/space,/turf/closed/wall/shuttle{icon_state = "swall_f10"; dir = 2},/area/shuttle/escape)
|
||||
"ah" = (/turf/closed/wall/shuttle{icon_state = "swall3"; dir = 2},/area/shuttle/escape)
|
||||
"ai" = (/obj/item/clothing/suit/hazardvest{desc = "A high-visibility lifejacket complete with whistle and slot for oxygen tanks."; name = "emergency lifejacket"},/obj/item/clothing/suit/hazardvest{desc = "A high-visibility lifejacket complete with whistle and slot for oxygen tanks."; name = "emergency lifejacket"},/obj/item/clothing/suit/hazardvest{desc = "A high-visibility lifejacket complete with whistle and slot for oxygen tanks."; name = "emergency lifejacket"},/obj/item/clothing/suit/hazardvest{desc = "A high-visibility lifejacket complete with whistle and slot for oxygen tanks."; name = "emergency lifejacket"},/obj/item/clothing/suit/hazardvest{desc = "A high-visibility lifejacket complete with whistle and slot for oxygen tanks."; name = "emergency lifejacket"},/obj/item/weapon/tank/internals/emergency_oxygen/double{pixel_x = 3},/obj/item/weapon/tank/internals/emergency_oxygen/double{pixel_x = 3},/obj/item/weapon/tank/internals/emergency_oxygen/double{pixel_x = 3},/obj/item/weapon/tank/internals/emergency_oxygen/double{pixel_x = 3},/obj/item/weapon/tank/internals/emergency_oxygen/double{pixel_x = 3},/obj/item/clothing/mask/breath{pixel_x = -3; pixel_y = -3},/obj/item/clothing/mask/breath{pixel_x = -3; pixel_y = -3},/obj/item/clothing/mask/breath{pixel_x = -3; pixel_y = -3},/obj/item/clothing/mask/breath{pixel_x = -3; pixel_y = -3},/obj/item/clothing/mask/breath{pixel_x = -3; pixel_y = -3},/obj/item/clothing/head/hardhat/orange{name = "protective hat"; pixel_y = 9},/obj/item/clothing/head/hardhat/orange{name = "protective hat"; pixel_y = 9},/obj/item/clothing/head/hardhat/orange{name = "protective hat"; pixel_y = 9},/obj/item/clothing/head/hardhat/orange{name = "protective hat"; pixel_y = 9},/obj/item/clothing/head/hardhat/orange{name = "protective hat"; pixel_y = 9},/obj/structure/closet/crate{name = "lifejackets"},/turf/open/floor/plasteel/shuttle{icon_state = "shuttlefloor3"},/area/shuttle/escape)
|
||||
"aj" = (/obj/structure/tank_dispenser/oxygen{layer = 2.7; pixel_x = -1; pixel_y = 2},/turf/open/floor/plasteel/shuttle{icon_state = "shuttlefloor3"},/area/shuttle/escape)
|
||||
"ak" = (/turf/open/floor/plasteel/shuttle,/area/shuttle/escape)
|
||||
"al" = (/obj/machinery/status_display{pixel_y = 32},/obj/machinery/hologram/holopad,/turf/open/floor/plasteel/shuttle,/area/shuttle/escape)
|
||||
"am" = (/obj/structure/table,/obj/item/stack/medical/gauze,/obj/item/stack/medical/bruise_pack,/obj/item/stack/medical/ointment,/turf/open/floor/plasteel/shuttle{icon_state = "shuttlefloor3"},/area/shuttle/escape)
|
||||
"an" = (/obj/structure/sign/nosmoking_2,/turf/closed/wall/shuttle{icon_state = "swall3"; dir = 2},/area/shuttle/escape)
|
||||
"ao" = (/obj/machinery/recharge_station,/turf/open/floor/plating{icon_state = "bot"},/area/shuttle/escape)
|
||||
"ap" = (/turf/open/floor/plating{dir = 1; icon_state = "delivery"},/area/shuttle/escape)
|
||||
"aq" = (/obj/structure/table,/obj/item/weapon/clipboard,/obj/item/weapon/folder/yellow,/obj/item/weapon/pen,/obj/item/hand_labeler_refill,/turf/open/floor/plating{icon_state = "bot"},/area/shuttle/escape)
|
||||
"ar" = (/turf/open/floor/plating{icon_state = "floorgrime"},/area/shuttle/escape)
|
||||
"as" = (/obj/item/device/radio/intercom{dir = 4; name = "Station Intercom (General)"; pixel_x = 31},/obj/machinery/portable_atmospherics/canister/oxygen,/turf/open/floor/plating{icon_state = "bot"},/area/shuttle/escape)
|
||||
"at" = (/obj/machinery/door/airlock/shuttle{name = "Emergency Shuttle Airlock"; req_access_txt = "2"},/turf/open/floor/plasteel/shuttle,/area/shuttle/escape)
|
||||
"au" = (/obj/item/weapon/cigbutt,/turf/open/floor/plating{icon_state = "floorgrime"},/area/shuttle/escape)
|
||||
"av" = (/obj/structure/closet/crate/medical{name = "medical crate"},/obj/item/weapon/storage/firstaid/regular,/obj/item/weapon/storage/firstaid/o2{pixel_x = 3; pixel_y = 3},/obj/item/weapon/storage/firstaid/toxin{pixel_x = -4; pixel_y = 3},/obj/item/device/healthanalyzer{pixel_x = 3; pixel_y = 3},/obj/item/weapon/lazarus_injector,/mob/living/simple_animal/bot/medbot{name = "\improper emergency medibot"; pixel_x = -3; pixel_y = 2},/turf/open/floor/plating{icon_state = "bot"},/area/shuttle/escape)
|
||||
"aw" = (/obj/structure/chair{dir = 4},/turf/open/floor/plasteel/shuttle{icon_state = "shuttlefloor3"},/area/shuttle/escape)
|
||||
"ax" = (/obj/structure/chair{dir = 8},/turf/open/floor/plasteel/shuttle{icon_state = "shuttlefloor3"},/area/shuttle/escape)
|
||||
"ay" = (/obj/structure/reagent_dispensers/fueltank,/obj/structure/extinguisher_cabinet{pixel_x = -27; pixel_y = 0},/turf/open/floor/plating{icon_state = "bot"},/area/shuttle/escape)
|
||||
"az" = (/obj/structure/closet/crate{name = "emergency supplies crate"},/obj/item/weapon/storage/toolbox/emergency,/obj/item/weapon/storage/toolbox/emergency,/obj/item/device/flashlight/flare{pixel_x = 3; pixel_y = 3},/obj/item/device/flashlight/flare{pixel_x = -6; pixel_y = -2},/obj/item/weapon/crowbar,/obj/item/weapon/wrench,/obj/item/device/radio,/turf/open/floor/plating{icon_state = "bot"},/area/shuttle/escape)
|
||||
"aA" = (/obj/machinery/door/airlock/shuttle{name = "Emergency Shuttle Cargo Bay Airlock"},/obj/docking_port/mobile/emergency{dheight = 0; dir = 4; dwidth = 5; height = 14; width = 25},/turf/open/floor/plasteel/shuttle,/area/shuttle/escape)
|
||||
"aB" = (/obj/machinery/vending/wallmed{name = "Emergency NanoMed"; pixel_x = 0; pixel_y = 0; req_access_txt = "0"; use_power = 0},/turf/closed/wall/shuttle{icon_state = "swall3"; dir = 2},/area/shuttle/escape)
|
||||
"aC" = (/obj/structure/reagent_dispensers/watertank,/turf/open/floor/plating{icon_state = "bot"},/area/shuttle/escape)
|
||||
"aD" = (/obj/machinery/space_heater,/obj/structure/extinguisher_cabinet{pixel_x = 27; pixel_y = 0},/turf/open/floor/plating{icon_state = "bot"},/area/shuttle/escape)
|
||||
"aE" = (/obj/structure/chair{dir = 4},/obj/item/device/radio/intercom{dir = 4; name = "Station Intercom (General)"; pixel_x = -31},/turf/open/floor/plasteel/shuttle{icon_state = "shuttlefloor3"},/area/shuttle/escape)
|
||||
"aF" = (/obj/structure/rack,/obj/item/weapon/crowbar,/obj/item/weapon/wrench,/obj/item/weapon/weldingtool,/obj/item/weapon/wirecutters,/obj/item/stack/cable_coil,/turf/open/floor/plating{dir = 1; icon_state = "warning"},/area/shuttle/escape)
|
||||
"aG" = (/obj/structure/rack,/obj/item/weapon/storage/toolbox/electrical{pixel_x = -3; pixel_y = 1},/obj/item/weapon/storage/toolbox/mechanical{pixel_x = 0; pixel_y = -1},/obj/item/weapon/storage/toolbox/emergency{pixel_x = 3; pixel_y = -5},/turf/open/floor/plating{dir = 1; icon_state = "warning"},/area/shuttle/escape)
|
||||
"aH" = (/turf/open/floor/plating{dir = 1; icon_state = "warning"},/area/shuttle/escape)
|
||||
"aI" = (/obj/structure/rack{dir = 1},/obj/item/weapon/tank/internals/oxygen/red,/obj/item/clothing/suit/fire/firefighter,/obj/item/clothing/mask/gas,/obj/item/clothing/head/hardhat/red,/turf/open/floor/plating{dir = 1; icon_state = "warning"},/area/shuttle/escape)
|
||||
"aJ" = (/obj/structure/extinguisher_cabinet,/turf/closed/wall/shuttle{icon_state = "swall3"; dir = 2},/area/shuttle/escape)
|
||||
"aK" = (/obj/structure/chair{dir = 8},/obj/structure/sign/bluecross_2{pixel_x = 32},/turf/open/floor/plasteel/shuttle{icon_state = "shuttlefloor3"},/area/shuttle/escape)
|
||||
"aL" = (/turf/closed/wall/shuttle{icon_state = "swall7"; dir = 2},/area/shuttle/escape)
|
||||
"aM" = (/turf/closed/wall/shuttle{icon_state = "swall8"; dir = 2},/area/shuttle/escape)
|
||||
"aN" = (/obj/machinery/door/airlock/glass_medical{id_tag = null; name = "Escape Shuttle Infirmary"; req_access_txt = "0"},/turf/open/floor/plasteel/shuttle,/area/shuttle/escape)
|
||||
"aO" = (/obj/structure/sign/bluecross_2,/turf/closed/wall/shuttle{icon_state = "swall4"; dir = 2},/area/shuttle/escape)
|
||||
"aP" = (/turf/closed/wall/shuttle{icon_state = "swall11"; dir = 2},/area/shuttle/escape)
|
||||
"aQ" = (/obj/machinery/sleeper{dir = 2},/turf/open/floor/plasteel/shuttle{icon_state = "shuttlefloor3"},/area/shuttle/escape)
|
||||
"aR" = (/obj/structure/table,/obj/item/weapon/storage/firstaid/toxin,/obj/item/weapon/storage/firstaid/o2{pixel_x = 3; pixel_y = 3},/turf/open/floor/plasteel/shuttle{icon_state = "shuttlefloor3"},/area/shuttle/escape)
|
||||
"aS" = (/obj/structure/table,/obj/item/weapon/storage/firstaid/fire,/obj/item/weapon/storage/firstaid/regular{pixel_x = 2; pixel_y = 3},/turf/open/floor/plasteel/shuttle{icon_state = "shuttlefloor3"},/area/shuttle/escape)
|
||||
"aT" = (/obj/machinery/shower{dir = 4; icon_state = "shower"; name = "emergency shower"},/turf/open/floor/plasteel/shuttle,/area/shuttle/escape)
|
||||
"aU" = (/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/turf/open/floor/plasteel/shuttle,/area/shuttle/escape)
|
||||
"aV" = (/obj/structure/table,/obj/item/weapon/defibrillator/loaded,/turf/open/floor/plasteel/shuttle{icon_state = "shuttlefloor3"},/area/shuttle/escape)
|
||||
"aW" = (/obj/structure/table,/obj/item/weapon/reagent_containers/glass/bottle/epinephrine{pixel_x = 6; pixel_y = 0},/obj/item/weapon/reagent_containers/glass/bottle/charcoal{pixel_x = -3},/obj/item/weapon/reagent_containers/glass/bottle/epinephrine{pixel_x = -3; pixel_y = 8},/obj/item/weapon/reagent_containers/glass/bottle/charcoal{pixel_x = 6; pixel_y = 8},/obj/item/weapon/reagent_containers/syringe/epinephrine{pixel_x = 3; pixel_y = -2},/obj/item/weapon/reagent_containers/syringe/epinephrine{pixel_x = 4; pixel_y = 1},/obj/item/weapon/reagent_containers/syringe/epinephrine{pixel_x = -2; pixel_y = 5},/obj/item/weapon/reagent_containers/syringe/epinephrine{pixel_x = 2; pixel_y = 8},/turf/open/floor/plasteel/shuttle{icon_state = "shuttlefloor3"},/area/shuttle/escape)
|
||||
"aX" = (/obj/structure/table/optable,/obj/item/weapon/surgical_drapes,/turf/open/floor/plasteel/shuttle{icon_state = "shuttlefloor3"},/area/shuttle/escape)
|
||||
"aY" = (/obj/structure/table,/obj/item/weapon/scalpel{pixel_y = 12},/obj/item/weapon/circular_saw,/obj/item/weapon/retractor{pixel_x = 4},/obj/item/weapon/hemostat{pixel_x = -4},/obj/item/clothing/gloves/color/latex,/obj/item/clothing/mask/surgical,/obj/item/device/radio/intercom{dir = 4; name = "Station Intercom (General)"; pixel_x = 0; pixel_y = -27},/turf/open/floor/plasteel/shuttle{icon_state = "shuttlefloor3"},/area/shuttle/escape)
|
||||
"aZ" = (/obj/structure/chair{dir = 8},/obj/item/device/radio/intercom{dir = 4; name = "Station Intercom (General)"; pixel_x = 31},/turf/open/floor/plasteel/shuttle{icon_state = "shuttlefloor3"},/area/shuttle/escape)
|
||||
"ba" = (/obj/machinery/status_display,/turf/closed/wall/shuttle{icon_state = "swall12"; dir = 2},/area/shuttle/escape)
|
||||
"bb" = (/obj/structure/chair{dir = 4},/turf/open/floor/plasteel/shuttle/red,/area/shuttle/escape)
|
||||
"bc" = (/obj/structure/chair,/obj/structure/reagent_dispensers/peppertank{pixel_x = 0; pixel_y = 29},/turf/open/floor/plasteel/shuttle/red,/area/shuttle/escape)
|
||||
"bd" = (/obj/structure/chair,/turf/open/floor/plasteel/shuttle/red,/area/shuttle/escape)
|
||||
"be" = (/obj/structure/table,/obj/item/weapon/storage/box/handcuffs{pixel_x = 2; pixel_y = 2},/turf/open/floor/plasteel/shuttle/red,/area/shuttle/escape)
|
||||
"bf" = (/turf/open/floor/plasteel/shuttle/red,/area/shuttle/escape)
|
||||
"bg" = (/obj/structure/table,/obj/machinery/recharger{active_power_usage = 0; idle_power_usage = 0; use_power = 0},/turf/open/floor/plasteel/shuttle/red,/area/shuttle/escape)
|
||||
"bh" = (/obj/machinery/door/airlock/glass_security{name = "Brig"; req_access_txt = "2"},/turf/open/floor/plasteel/shuttle/red,/area/shuttle/escape)
|
||||
"bi" = (/obj/structure/table,/obj/item/weapon/restraints/handcuffs{pixel_y = 3},/turf/open/floor/plasteel/shuttle/red,/area/shuttle/escape)
|
||||
"bj" = (/obj/structure/closet/emcloset,/turf/open/floor/plasteel/shuttle{icon_state = "shuttlefloor3"},/area/shuttle/escape)
|
||||
"bk" = (/obj/machinery/flasher{id = "emshuttlebridgeflash"; pixel_y = -24},/turf/open/floor/plasteel/shuttle,/area/shuttle/escape)
|
||||
"bl" = (/obj/structure/chair{dir = 1},/obj/machinery/button/flasher{id = "emshuttleflash"; name = "brig flasher button"; pixel_y = -23; req_access_txt = "0"; req_one_access_txt = "1;63;19"},/turf/open/floor/plasteel/shuttle/red,/area/shuttle/escape)
|
||||
"bm" = (/obj/structure/chair{dir = 1},/obj/machinery/flasher{id = "emshuttleflash"; pixel_y = -24},/turf/open/floor/plasteel/shuttle/red,/area/shuttle/escape)
|
||||
"bn" = (/obj/structure/chair{dir = 1},/turf/open/floor/plasteel/shuttle/red,/area/shuttle/escape)
|
||||
"bo" = (/obj/structure/table,/obj/item/weapon/folder/red{pixel_x = 3},/obj/item/weapon/folder/white{pixel_x = -4; pixel_y = 2},/obj/item/device/radio/intercom{dir = 4; name = "Station Intercom (General)"; pixel_x = 31},/obj/item/weapon/book/manual/wiki/security_space_law{pixel_x = -4; pixel_y = 4},/turf/open/floor/plasteel/shuttle/red,/area/shuttle/escape)
|
||||
"bp" = (/obj/machinery/door/airlock/glass_command{name = "Cockpit"; req_access_txt = "19"},/turf/open/floor/plasteel/shuttle,/area/shuttle/escape)
|
||||
"bq" = (/turf/closed/wall/shuttle{icon_state = "swall15"; dir = 2},/area/shuttle/escape)
|
||||
"br" = (/obj/structure/table,/obj/item/weapon/storage/firstaid/regular,/turf/open/floor/plasteel/shuttle,/area/shuttle/escape)
|
||||
"bs" = (/obj/structure/table,/obj/item/weapon/restraints/handcuffs{pixel_y = 3},/turf/open/floor/plasteel/shuttle,/area/shuttle/escape)
|
||||
"bt" = (/obj/machinery/button/flasher{id = "emshuttlebridgeflash"; name = "cockpit flasher button"; pixel_y = 24; req_access_txt = "0"; req_one_access_txt = "1;63;19"},/turf/open/floor/plasteel/shuttle,/area/shuttle/escape)
|
||||
"bu" = (/obj/machinery/door/airlock/command{name = "Emergency Recovery Airlock"; req_access = null; req_access_txt = "19"},/turf/open/floor/plasteel/shuttle,/area/shuttle/escape)
|
||||
"bv" = (/turf/open/floor/plasteel/shuttle{icon_state = "shuttlefloor4"},/area/shuttle/escape)
|
||||
"bw" = (/obj/machinery/suit_storage_unit/standard_unit,/obj/machinery/status_display{pixel_y = 31},/turf/open/floor/plating{icon_state = "floorgrime"},/area/shuttle/escape)
|
||||
"bx" = (/obj/machinery/suit_storage_unit/standard_unit,/obj/item/device/radio/intercom{dir = 4; name = "Station Intercom (General)"; pixel_x = 0; pixel_y = 27},/turf/open/floor/plating{icon_state = "floorgrime"},/area/shuttle/escape)
|
||||
"by" = (/obj/machinery/computer/security,/turf/open/floor/plasteel/shuttle,/area/shuttle/escape)
|
||||
"bz" = (/obj/structure/chair/office/dark{dir = 8},/turf/open/floor/plasteel/shuttle,/area/shuttle/escape)
|
||||
"bA" = (/obj/structure/chair/office/dark{dir = 4},/turf/open/floor/plasteel/shuttle,/area/shuttle/escape)
|
||||
"bB" = (/obj/structure/table,/obj/item/weapon/folder/blue,/obj/structure/extinguisher_cabinet{pixel_x = 27; pixel_y = 0},/turf/open/floor/plasteel/shuttle,/area/shuttle/escape)
|
||||
"bC" = (/obj/machinery/door/airlock/external{name = "Emergency Recovery Airlock"},/turf/open/floor/plating{icon_state = "floorgrime"},/area/shuttle/escape)
|
||||
"bD" = (/turf/closed/wall/shuttle{icon_state = "swallc4"; dir = 2},/area/shuttle/escape)
|
||||
"bE" = (/obj/machinery/computer/crew,/turf/open/floor/plasteel/shuttle,/area/shuttle/escape)
|
||||
"bF" = (/obj/structure/chair/office/dark,/turf/open/floor/plasteel/shuttle,/area/shuttle/escape)
|
||||
"bG" = (/obj/structure/table,/obj/item/weapon/paper_bin{pixel_x = -2; pixel_y = 8},/obj/item/device/radio/intercom{dir = 4; name = "Station Intercom (General)"; pixel_x = 31},/turf/open/floor/plasteel/shuttle,/area/shuttle/escape)
|
||||
"bH" = (/obj/structure/table,/obj/item/weapon/phone{pixel_x = -3; pixel_y = 3},/obj/item/weapon/cigbutt/cigarbutt{pixel_x = 5; pixel_y = -1},/turf/open/floor/plasteel/shuttle,/area/shuttle/escape)
|
||||
"bI" = (/obj/structure/table,/obj/item/weapon/storage/fancy/donut_box,/turf/open/floor/plasteel/shuttle,/area/shuttle/escape)
|
||||
"bJ" = (/obj/machinery/computer/emergency_shuttle,/turf/open/floor/plasteel/shuttle,/area/shuttle/escape)
|
||||
"bK" = (/obj/machinery/computer/communications,/turf/open/floor/plasteel/shuttle,/area/shuttle/escape)
|
||||
"bL" = (/obj/machinery/computer/station_alert,/turf/open/floor/plasteel/shuttle,/area/shuttle/escape)
|
||||
"bM" = (/obj/structure/table,/obj/item/weapon/storage/toolbox/emergency{pixel_y = 3},/turf/open/floor/plasteel/shuttle,/area/shuttle/escape)
|
||||
"bN" = (/obj/structure/table,/obj/machinery/recharger{active_power_usage = 0; idle_power_usage = 0; pixel_y = 4; use_power = 0},/turf/open/floor/plasteel/shuttle,/area/shuttle/escape)
|
||||
"bO" = (/obj/structure/extinguisher_cabinet{pixel_x = -27; pixel_y = 0},/obj/structure/chair{dir = 1},/turf/open/floor/plating{icon_state = "floorgrime"},/area/shuttle/escape)
|
||||
"bP" = (/obj/structure/chair{dir = 1},/turf/open/floor/plating{icon_state = "floorgrime"},/area/shuttle/escape)
|
||||
"bQ" = (/obj/structure/reagent_dispensers/watertank,/turf/open/floor/plating{icon_state = "floorgrime"},/area/shuttle/escape)
|
||||
"bR" = (/turf/open/space,/turf/closed/wall/shuttle{icon_state = "diagonalWall3"},/turf/closed/wall/shuttle{icon_state = "swall_f5"; dir = 2},/area/shuttle/escape)
|
||||
"bS" = (/turf/closed/wall/shuttle{icon_state = "swall13"; dir = 2},/area/shuttle/escape)
|
||||
"bT" = (/turf/open/space,/turf/closed/wall/shuttle{icon_state = "swall_f9"; dir = 2},/area/shuttle/escape)
|
||||
"bU" = (/turf/open/space,/area/space)
|
||||
"bV" = (/turf/open/space,/turf/closed/wall/shuttle{icon_state = "diagonalWall3"},/area/shuttle/escape)
|
||||
"bW" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/shuttle/engine/heater,/turf/open/floor/plating/airless,/area/shuttle/escape)
|
||||
"bX" = (/turf/closed/wall/shuttle{icon_state = "wall3"},/area/shuttle/escape)
|
||||
"bY" = (/turf/open/space,/turf/closed/wall/shuttle{dir = 4; icon_state = "diagonalWall3"},/area/shuttle/escape)
|
||||
"bZ" = (/obj/structure/shuttle/engine/propulsion,/turf/open/floor/plating/airless,/area/shuttle/escape)
|
||||
"ad" = (/turf/closed/wall/shuttle{icon_state = "swall14"; dir = 2},/area/shuttle/escape)
|
||||
"ae" = (/turf/closed/wall/shuttle{icon_state = "swall12"; dir = 2},/area/shuttle/escape)
|
||||
"af" = (/obj/machinery/door/airlock/shuttle{name = "Emergency Shuttle Airlock"},/turf/open/floor/plasteel/shuttle,/area/shuttle/escape)
|
||||
"ag" = (/obj/structure/sign/nosmoking_2,/turf/closed/wall/shuttle{icon_state = "swall12"; dir = 2},/area/shuttle/escape)
|
||||
"ah" = (/obj/machinery/door/airlock/shuttle{name = "Emergency Shuttle Airlock"},/obj/docking_port/mobile/emergency{dir = 2; dwidth = 5; height = 14; name = "MetaStation emergency shuttle"; width = 25},/obj/docking_port/stationary{dheight = 0; dir = 2; dwidth = 5; height = 14; id = "emergency_home"; name = "emergency evac bay"; width = 25},/turf/open/floor/plasteel/shuttle,/area/shuttle/escape)
|
||||
"ai" = (/turf/closed/wall/shuttle{icon_state = "swall_s10"; dir = 2},/area/shuttle/escape)
|
||||
"aj" = (/turf/closed/wall/shuttle{tag = "icon-wall3 (NORTHWEST)"; icon_state = "wall3"; dir = 9},/area/shuttle/escape)
|
||||
"ak" = (/turf/closed/wall/shuttle{icon_state = "swall3"; dir = 2},/area/shuttle/escape)
|
||||
"al" = (/obj/structure/table,/obj/item/weapon/phone{pixel_x = -3; pixel_y = 3},/obj/item/weapon/cigbutt/cigarbutt{pixel_x = 5; pixel_y = -1},/turf/open/floor/plasteel/shuttle,/area/shuttle/escape)
|
||||
"am" = (/obj/machinery/computer/crew,/turf/open/floor/plasteel/shuttle,/area/shuttle/escape)
|
||||
"an" = (/obj/machinery/computer/security,/turf/open/floor/plasteel/shuttle,/area/shuttle/escape)
|
||||
"ao" = (/obj/structure/table,/obj/item/weapon/storage/firstaid/regular,/turf/open/floor/plasteel/shuttle,/area/shuttle/escape)
|
||||
"ap" = (/obj/structure/closet/emcloset,/turf/open/floor/plasteel/shuttle{icon_state = "shuttlefloor3"},/area/shuttle/escape)
|
||||
"aq" = (/turf/open/floor/plasteel/shuttle,/area/shuttle/escape)
|
||||
"ar" = (/obj/structure/chair,/turf/open/floor/plasteel/shuttle/white,/area/shuttle/escape)
|
||||
"as" = (/obj/item/device/radio/intercom{dir = 4; name = "Station Intercom (General)"; pixel_x = 0; pixel_y = 27},/obj/structure/chair,/turf/open/floor/plasteel/shuttle/white,/area/shuttle/escape)
|
||||
"at" = (/obj/item/clothing/suit/hazardvest{desc = "A high-visibility lifejacket complete with whistle and slot for oxygen tanks."; name = "emergency lifejacket"},/obj/item/clothing/suit/hazardvest{desc = "A high-visibility lifejacket complete with whistle and slot for oxygen tanks."; name = "emergency lifejacket"},/obj/item/clothing/suit/hazardvest{desc = "A high-visibility lifejacket complete with whistle and slot for oxygen tanks."; name = "emergency lifejacket"},/obj/item/clothing/suit/hazardvest{desc = "A high-visibility lifejacket complete with whistle and slot for oxygen tanks."; name = "emergency lifejacket"},/obj/item/clothing/suit/hazardvest{desc = "A high-visibility lifejacket complete with whistle and slot for oxygen tanks."; name = "emergency lifejacket"},/obj/item/weapon/tank/internals/emergency_oxygen/double{pixel_x = 3},/obj/item/weapon/tank/internals/emergency_oxygen/double{pixel_x = 3},/obj/item/weapon/tank/internals/emergency_oxygen/double{pixel_x = 3},/obj/item/weapon/tank/internals/emergency_oxygen/double{pixel_x = 3},/obj/item/weapon/tank/internals/emergency_oxygen/double{pixel_x = 3},/obj/item/clothing/mask/breath{pixel_x = -3; pixel_y = -3},/obj/item/clothing/mask/breath{pixel_x = -3; pixel_y = -3},/obj/item/clothing/mask/breath{pixel_x = -3; pixel_y = -3},/obj/item/clothing/mask/breath{pixel_x = -3; pixel_y = -3},/obj/item/clothing/mask/breath{pixel_x = -3; pixel_y = -3},/obj/item/clothing/head/hardhat/orange{name = "protective hat"; pixel_y = 9},/obj/item/clothing/head/hardhat/orange{name = "protective hat"; pixel_y = 9},/obj/item/clothing/head/hardhat/orange{name = "protective hat"; pixel_y = 9},/obj/item/clothing/head/hardhat/orange{name = "protective hat"; pixel_y = 9},/obj/item/clothing/head/hardhat/orange{name = "protective hat"; pixel_y = 9},/obj/structure/closet/crate{name = "lifejackets"},/turf/open/floor/plasteel/shuttle{icon_state = "shuttlefloor3"},/area/shuttle/escape)
|
||||
"au" = (/obj/structure/shuttle/engine/propulsion{dir = 4},/turf/open/floor/plating/airless,/area/shuttle/escape)
|
||||
"av" = (/obj/structure/shuttle/engine/heater{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/open/floor/plating/airless,/area/shuttle/escape)
|
||||
"aw" = (/obj/structure/table,/obj/item/weapon/storage/fancy/donut_box,/turf/open/floor/plasteel/shuttle,/area/shuttle/escape)
|
||||
"ax" = (/obj/structure/chair/office/dark{dir = 1},/turf/open/floor/plasteel/shuttle,/area/shuttle/escape)
|
||||
"ay" = (/obj/structure/table,/obj/item/weapon/restraints/handcuffs{pixel_y = 3},/turf/open/floor/plasteel/shuttle,/area/shuttle/escape)
|
||||
"az" = (/obj/machinery/status_display,/turf/closed/wall/shuttle{icon_state = "swall3"; dir = 2},/area/shuttle/escape)
|
||||
"aA" = (/obj/structure/tank_dispenser/oxygen{layer = 2.7; pixel_x = -1; pixel_y = 2},/turf/open/floor/plasteel/shuttle{icon_state = "shuttlefloor3"},/area/shuttle/escape)
|
||||
"aB" = (/obj/machinery/computer/communications,/turf/open/floor/plasteel/shuttle,/area/shuttle/escape)
|
||||
"aC" = (/obj/structure/chair/office/dark,/turf/open/floor/plasteel/shuttle,/area/shuttle/escape)
|
||||
"aD" = (/turf/closed/wall/shuttle{icon_state = "swall1"},/area/shuttle/escape)
|
||||
"aE" = (/obj/structure/chair{dir = 1},/turf/open/floor/plasteel/shuttle/white,/area/shuttle/escape)
|
||||
"aF" = (/obj/machinery/computer/emergency_shuttle,/turf/open/floor/plasteel/shuttle,/area/shuttle/escape)
|
||||
"aG" = (/obj/structure/chair/office/dark{dir = 8},/turf/open/floor/plasteel/shuttle,/area/shuttle/escape)
|
||||
"aH" = (/obj/machinery/door/airlock/glass_command{name = "Cockpit"; req_access_txt = "19"},/turf/open/floor/plasteel/shuttle,/area/shuttle/escape)
|
||||
"aI" = (/obj/machinery/vending/wallmed{name = "Emergency NanoMed"; pixel_x = 0; pixel_y = 0; req_access_txt = "0"; use_power = 0},/turf/closed/wall/shuttle{icon_state = "swall12"; dir = 2},/area/shuttle/escape)
|
||||
"aJ" = (/obj/structure/extinguisher_cabinet,/turf/closed/wall/shuttle{icon_state = "swall12"; dir = 2},/area/shuttle/escape)
|
||||
"aK" = (/turf/closed/wall/shuttle{icon_state = "wall3"},/area/shuttle/escape)
|
||||
"aL" = (/obj/machinery/computer/station_alert,/turf/open/floor/plasteel/shuttle,/area/shuttle/escape)
|
||||
"aM" = (/turf/closed/wall/shuttle{icon_state = "swall2"},/area/shuttle/escape)
|
||||
"aN" = (/obj/machinery/status_display{dir = 8; pixel_x = 32; pixel_y = 0},/obj/machinery/hologram/holopad,/turf/open/floor/plasteel/shuttle,/area/shuttle/escape)
|
||||
"aO" = (/obj/structure/table,/obj/item/weapon/storage/toolbox/emergency{pixel_y = 3},/turf/open/floor/plasteel/shuttle,/area/shuttle/escape)
|
||||
"aP" = (/obj/structure/table,/obj/machinery/recharger{active_power_usage = 0; idle_power_usage = 0; pixel_y = 4; use_power = 0},/turf/open/floor/plasteel/shuttle,/area/shuttle/escape)
|
||||
"aQ" = (/obj/structure/table,/obj/item/weapon/paper_bin{pixel_x = -2; pixel_y = 8},/obj/item/device/radio/intercom{dir = 2; name = "Station Intercom (General)"; pixel_x = 0; pixel_y = -31},/turf/open/floor/plasteel/shuttle,/area/shuttle/escape)
|
||||
"aR" = (/obj/structure/table,/obj/item/weapon/folder/blue,/obj/structure/extinguisher_cabinet{dir = 4; pixel_x = 0; pixel_y = -27},/turf/open/floor/plasteel/shuttle,/area/shuttle/escape)
|
||||
"aS" = (/obj/item/device/radio/intercom{dir = 2; name = "Station Intercom (General)"; pixel_x = 0; pixel_y = -31},/obj/structure/chair{dir = 1},/turf/open/floor/plasteel/shuttle/white,/area/shuttle/escape)
|
||||
"aT" = (/obj/structure/table,/obj/item/stack/medical/gauze,/obj/item/stack/medical/bruise_pack,/obj/item/stack/medical/ointment,/turf/open/floor/plasteel/shuttle{icon_state = "shuttlefloor3"},/area/shuttle/escape)
|
||||
"aU" = (/turf/closed/wall/shuttle{icon_state = "swall7"; dir = 2},/area/shuttle/escape)
|
||||
"aV" = (/turf/closed/wall/shuttle{icon_state = "swall8"; dir = 2},/area/shuttle/escape)
|
||||
"aW" = (/obj/machinery/door/airlock/command{name = "Emergency Recovery Airlock"; req_access = null; req_access_txt = "19"},/turf/open/floor/plasteel/shuttle,/area/shuttle/escape)
|
||||
"aX" = (/turf/closed/wall/shuttle{icon_state = "swall15"; dir = 2},/area/shuttle/escape)
|
||||
"aY" = (/obj/machinery/door/airlock/glass_security{name = "Brig"; req_access_txt = "2"},/turf/open/floor/plasteel/shuttle/red,/area/shuttle/escape)
|
||||
"aZ" = (/obj/machinery/door/airlock/glass_medical{id_tag = null; name = "Escape Shuttle Infirmary"; req_access_txt = "0"},/turf/open/floor/plasteel/shuttle,/area/shuttle/escape)
|
||||
"ba" = (/obj/structure/sign/bluecross_2,/turf/closed/wall/shuttle{icon_state = "swall14"; dir = 2},/area/shuttle/escape)
|
||||
"bb" = (/obj/machinery/door/airlock/shuttle{name = "Emergency Shuttle Cargo Bay Airlock"},/turf/open/floor/plasteel/delivery,/area/shuttle/escape)
|
||||
"bc" = (/turf/closed/wall/shuttle{icon_state = "swall11"; dir = 2},/area/shuttle/escape)
|
||||
"bd" = (/obj/structure/chair{dir = 4},/turf/open/floor/plating{icon_state = "floorgrime"},/area/shuttle/escape)
|
||||
"be" = (/turf/open/floor/plating{icon_state = "floorgrime"},/area/shuttle/escape)
|
||||
"bf" = (/obj/machinery/door/airlock/external{name = "Emergency Recovery Airlock"},/turf/open/floor/plating{icon_state = "floorgrime"},/area/shuttle/escape)
|
||||
"bg" = (/turf/open/floor/plasteel/shuttle/red,/area/shuttle/escape)
|
||||
"bh" = (/obj/structure/chair{dir = 4},/turf/open/floor/plasteel/shuttle/red,/area/shuttle/escape)
|
||||
"bi" = (/obj/structure/chair,/turf/open/floor/plasteel/shuttle/red,/area/shuttle/escape)
|
||||
"bj" = (/obj/structure/table,/obj/item/weapon/defibrillator/loaded,/turf/open/floor/plasteel/shuttle{icon_state = "shuttlefloor3"},/area/shuttle/escape)
|
||||
"bk" = (/obj/machinery/shower,/turf/open/floor/plasteel/shuttle,/area/shuttle/escape)
|
||||
"bl" = (/obj/machinery/sleeper{dir = 8},/turf/open/floor/plasteel/shuttle/white,/area/shuttle/escape)
|
||||
"bm" = (/obj/structure/rack,/obj/item/weapon/crowbar,/obj/item/weapon/wrench,/obj/item/weapon/weldingtool,/obj/item/weapon/wirecutters,/obj/item/stack/cable_coil,/turf/open/floor/plasteel/warning{dir = 4},/area/shuttle/escape)
|
||||
"bn" = (/obj/structure/reagent_dispensers/watertank,/turf/open/floor/plasteel/delivery,/area/shuttle/escape)
|
||||
"bo" = (/obj/structure/reagent_dispensers/fueltank,/turf/open/floor/plasteel/delivery,/area/shuttle/escape)
|
||||
"bp" = (/turf/open/floor/plasteel/delivery,/area/shuttle/escape)
|
||||
"bq" = (/obj/machinery/recharge_station,/turf/open/floor/plasteel/delivery,/area/shuttle/escape)
|
||||
"br" = (/turf/closed/wall/shuttle{icon_state = "swall4"; dir = 2},/area/shuttle/escape)
|
||||
"bs" = (/obj/structure/chair{dir = 8},/turf/open/floor/plasteel/shuttle/red,/area/shuttle/escape)
|
||||
"bt" = (/obj/structure/reagent_dispensers/peppertank,/turf/closed/wall/shuttle{icon_state = "swall3"; dir = 2},/area/shuttle/escape)
|
||||
"bu" = (/obj/structure/table,/obj/item/weapon/reagent_containers/glass/bottle/epinephrine{pixel_x = 6; pixel_y = 0},/obj/item/weapon/reagent_containers/glass/bottle/charcoal{pixel_x = -3},/obj/item/weapon/reagent_containers/glass/bottle/epinephrine{pixel_x = -3; pixel_y = 8},/obj/item/weapon/reagent_containers/glass/bottle/charcoal{pixel_x = 6; pixel_y = 8},/obj/item/weapon/reagent_containers/syringe/epinephrine{pixel_x = 3; pixel_y = -2},/obj/item/weapon/reagent_containers/syringe/epinephrine{pixel_x = 4; pixel_y = 1},/obj/item/weapon/reagent_containers/syringe/epinephrine{pixel_x = -2; pixel_y = 5},/obj/item/weapon/reagent_containers/syringe/epinephrine{pixel_x = 2; pixel_y = 8},/turf/open/floor/plasteel/shuttle{icon_state = "shuttlefloor3"},/area/shuttle/escape)
|
||||
"bv" = (/obj/structure/rack,/obj/item/weapon/storage/toolbox/electrical{pixel_x = -3; pixel_y = 1},/obj/item/weapon/storage/toolbox/mechanical{pixel_x = 0; pixel_y = -1},/obj/item/weapon/storage/toolbox/emergency{pixel_x = 3; pixel_y = -5},/turf/open/floor/plasteel/warning{dir = 4},/area/shuttle/escape)
|
||||
"bw" = (/obj/item/weapon/cigbutt,/turf/open/floor/plating{icon_state = "floorgrime"},/area/shuttle/escape)
|
||||
"bx" = (/turf/open/floor/plasteel/floorgrime,/area/shuttle/escape)
|
||||
"by" = (/obj/machinery/suit_storage_unit/standard_unit,/turf/open/floor/plating{icon_state = "floorgrime"},/area/shuttle/escape)
|
||||
"bz" = (/obj/structure/table/optable,/obj/item/weapon/surgical_drapes,/turf/open/floor/plasteel/shuttle{icon_state = "shuttlefloor3"},/area/shuttle/escape)
|
||||
"bA" = (/turf/open/floor/plasteel/warning{dir = 4},/area/shuttle/escape)
|
||||
"bB" = (/turf/closed/wall/shuttle{icon_state = "diagonalWall3"},/area/shuttle/escape)
|
||||
"bC" = (/obj/structure/reagent_dispensers/watertank,/turf/open/floor/plating{icon_state = "floorgrime"},/area/shuttle/escape)
|
||||
"bD" = (/obj/structure/table,/obj/item/weapon/folder/red{pixel_x = 3},/obj/item/weapon/folder/white{pixel_x = -4; pixel_y = 2},/obj/item/device/radio/intercom{dir = 2; name = "Station Intercom (General)"; pixel_x = 0; pixel_y = -31},/obj/item/weapon/book/manual/wiki/security_space_law{pixel_x = -4; pixel_y = 4},/turf/open/floor/plasteel/shuttle/red,/area/shuttle/escape)
|
||||
"bE" = (/obj/structure/table,/obj/item/weapon/restraints/handcuffs{pixel_y = 3},/turf/open/floor/plasteel/shuttle/red,/area/shuttle/escape)
|
||||
"bF" = (/obj/structure/table,/obj/machinery/recharger{active_power_usage = 0; idle_power_usage = 0; use_power = 0},/turf/open/floor/plasteel/shuttle/red,/area/shuttle/escape)
|
||||
"bG" = (/obj/structure/table,/obj/item/weapon/storage/box/handcuffs{pixel_x = 2; pixel_y = 2},/turf/open/floor/plasteel/shuttle/red,/area/shuttle/escape)
|
||||
"bH" = (/obj/structure/table,/obj/item/weapon/scalpel{pixel_y = 12},/obj/item/weapon/circular_saw,/obj/item/weapon/retractor{pixel_x = 4},/obj/item/weapon/hemostat{pixel_x = -4},/obj/item/clothing/gloves/color/latex,/obj/item/clothing/mask/surgical,/obj/item/device/radio/intercom{dir = 2; name = "Station Intercom (General)"; pixel_x = -27; pixel_y = 0},/turf/open/floor/plasteel/shuttle{icon_state = "shuttlefloor3"},/area/shuttle/escape)
|
||||
"bI" = (/obj/structure/sink,/turf/open/floor/plasteel/shuttle,/area/shuttle/escape)
|
||||
"bJ" = (/obj/structure/table,/obj/item/weapon/storage/firstaid/fire,/obj/item/weapon/storage/firstaid/regular{pixel_x = 2; pixel_y = 3},/turf/open/floor/plasteel/shuttle{icon_state = "shuttlefloor3"},/area/shuttle/escape)
|
||||
"bK" = (/obj/structure/table,/obj/item/weapon/storage/firstaid/toxin,/obj/item/weapon/storage/firstaid/o2{pixel_x = 3; pixel_y = 3},/turf/open/floor/plasteel/shuttle{icon_state = "shuttlefloor3"},/area/shuttle/escape)
|
||||
"bL" = (/obj/structure/sign/bluecross_2,/turf/closed/wall/shuttle{icon_state = "swall2"},/area/shuttle/escape)
|
||||
"bM" = (/obj/structure/rack{dir = 1},/obj/item/weapon/tank/internals/oxygen/red,/obj/item/clothing/suit/fire/firefighter,/obj/item/clothing/mask/gas,/obj/item/clothing/head/hardhat/red,/turf/open/floor/plasteel/warning{dir = 4},/area/shuttle/escape)
|
||||
"bN" = (/obj/machinery/space_heater,/obj/structure/extinguisher_cabinet{dir = 4; pixel_x = 0; pixel_y = -27},/turf/open/floor/plating{icon_state = "bot"},/area/shuttle/escape)
|
||||
"bO" = (/obj/structure/closet/crate{name = "emergency supplies crate"},/obj/item/weapon/storage/toolbox/emergency,/obj/item/weapon/storage/toolbox/emergency,/obj/item/device/flashlight/flare{pixel_x = 3; pixel_y = 3},/obj/item/device/flashlight/flare{pixel_x = -6; pixel_y = -2},/obj/item/weapon/crowbar,/obj/item/weapon/wrench,/obj/item/device/radio,/turf/open/floor/plating{icon_state = "bot"},/area/shuttle/escape)
|
||||
"bP" = (/obj/structure/closet/crate/medical{name = "medical crate"},/obj/item/weapon/storage/firstaid/regular,/obj/item/weapon/storage/firstaid/o2{pixel_x = 3; pixel_y = 3},/obj/item/weapon/storage/firstaid/toxin{pixel_x = -4; pixel_y = 3},/obj/item/device/healthanalyzer{pixel_x = 3; pixel_y = 3},/obj/item/weapon/lazarus_injector,/mob/living/simple_animal/bot/medbot{name = "\improper emergency medibot"; pixel_x = -3; pixel_y = 2},/turf/open/floor/plating{icon_state = "bot"},/area/shuttle/escape)
|
||||
"bQ" = (/obj/item/device/radio/intercom{dir = 2; name = "Station Intercom (General)"; pixel_x = 0; pixel_y = -31},/obj/machinery/portable_atmospherics/canister/oxygen,/turf/open/floor/plating{icon_state = "bot"},/area/shuttle/escape)
|
||||
"bR" = (/obj/structure/table,/obj/item/weapon/clipboard,/obj/item/weapon/folder/yellow,/obj/item/weapon/pen,/obj/item/hand_labeler_refill,/turf/open/floor/plating{icon_state = "bot"},/area/shuttle/escape)
|
||||
"bS" = (/turf/closed/wall/shuttle{icon_state = "swall_s5"; dir = 2},/area/shuttle/escape)
|
||||
"bT" = (/turf/closed/wall/shuttle{icon_state = "swall13"; dir = 2},/area/shuttle/escape)
|
||||
"bU" = (/turf/closed/wall/shuttle{icon_state = "swall_s9"; dir = 2},/area/shuttle/escape)
|
||||
|
||||
(1,1,1) = {"
|
||||
aaabacabadabadabaeabafafabag
|
||||
ahaiajaiakalakamanaoapapaqah
|
||||
ahakakakakakakakafapararasah
|
||||
atakakakakakakakafaparauavac
|
||||
acawakaxacawakaxahayararazac
|
||||
aAakakaxaBawakaxacaCauaraDah
|
||||
ahaEakaxacawakaxahaFaGaHaIah
|
||||
acawakaxaJawakaKaLaMacaNaOaP
|
||||
acawakaxacawakaxacaQaQakaRah
|
||||
acawakakakakakakaNakakakaSac
|
||||
anawakaxacawakaxacaTakakaUac
|
||||
adakakaxaJawakaxahaVaWaXaYah
|
||||
acawakaxacawakaZaLababbaabaP
|
||||
atakakaxaBawakaxahbbbcbdbeah
|
||||
ahawakaxacawakaxacbbbfbfbgac
|
||||
acakakakakakakakbhbfbfbfbiac
|
||||
ahbjakakakbkakbjahblbmbnboah
|
||||
aLabbaabbpabbaabbqabaeababaP
|
||||
acbrbsakakbtakakbubvahbwbxac
|
||||
acbybzakakakbAbBaLbCbDararbC
|
||||
acbEakbAbFbzakbGahararararbC
|
||||
acbHbIbJbKbLbMbNahbObPbPbQac
|
||||
bRabababababababbSababababbT
|
||||
bUbVbWbWbWbXbWbWbXbWbWbWbYbU
|
||||
bUbUbZbZbZbXbZbZbXbZbZbZbUbU
|
||||
aaaaabacacacacadaeacaeafacafagacacacaeahacafaeaeai
|
||||
aaajakalamanaoakapaqaraqaraqararararasaqaraqaqatak
|
||||
auavakawaqaxayazaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaAac
|
||||
auavakaBaCaqaqaDaqaqaEaEaEaEaEaqaEaEaEaEaEaqaqatak
|
||||
auavakaFaGaqaqaHaqaqacaIacaJacaqacaJacaIacaqaqaqac
|
||||
aKaKakaLaxaqaqaMaqaqarararararaqarararararaqaqaNak
|
||||
auavakaOaqaCaqazaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqac
|
||||
auavakaPaQaRaqakapaqaEaEaSaEaEaqaEaEaEaEaEaqaqaTak
|
||||
aKaKaUaJaeaVaWaXaVaYacaeadaeacaZacbaaeacaJbbbbagbc
|
||||
auavakbdbebfbgakbhbgbibiakbjbkaqblakbmbnbobpbpbqak
|
||||
auavakbdbebraebcbhbgbgbsbtbuaqaqblacbvbwbxbxbxbpac
|
||||
auavakbdbebebyazbhbgbgbsazbzaqaqaqaZbAbxbxbwbxbpac
|
||||
aabBakbCbebebyakbDbEbFbGakbHbIbJbKbLbMbNbObPbQbRak
|
||||
aaaabSacbfbfacbTaeacacaebTaeacacaebTaeaeacacaeaebU
|
||||
"}
|
||||
|
||||
@@ -0,0 +1,43 @@
|
||||
"a" = (/turf/open/space,/area/space)
|
||||
"b" = (/obj/structure/shuttle/engine/propulsion/burst/left{tag = "icon-burst_l (EAST)"; icon_state = "burst_l"; dir = 4},/turf/open/space,/area/ruin/powered{name = "Shuttle"})
|
||||
"c" = (/obj/structure/shuttle/engine/heater{tag = "icon-heater (WEST)"; icon_state = "heater"; dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/turf/open/floor/plating/airless,/area/ruin/powered{name = "Shuttle"})
|
||||
"d" = (/turf/closed/indestructible/opshuttle,/area/ruin/powered{name = "Shuttle"})
|
||||
"e" = (/turf/open/space,/turf/closed/indestructible/opshuttle{tag = "icon-wall3 (NORTHEAST)"; icon_state = "wall3"; dir = 5},/area/ruin/powered{name = "Shuttle"})
|
||||
"f" = (/turf/closed/wall/shuttle/smooth,/turf/closed/indestructible/opshuttle{tag = "icon-wall3 (SOUTHEAST)"; icon_state = "wall3"; dir = 6},/area/ruin/powered{name = "Shuttle"})
|
||||
"g" = (/turf/closed/wall/shuttle/smooth,/area/ruin/powered{name = "Shuttle"})
|
||||
"h" = (/obj/machinery/door/airlock/glass_external,/turf/open/floor/plating,/area/ruin/powered{name = "Shuttle"})
|
||||
"i" = (/turf/closed/wall/shuttle/smooth/overspace,/area/ruin/powered{name = "Shuttle"})
|
||||
"j" = (/turf/open/floor/plasteel/black,/area/ruin/powered{name = "Shuttle"})
|
||||
"k" = (/obj/machinery/door/airlock/glass,/turf/open/floor/plasteel/black,/area/ruin/powered{name = "Shuttle"})
|
||||
"l" = (/obj/structure/table,/obj/item/weapon/storage/firstaid/regular,/turf/open/floor/plasteel/darkblue,/area/ruin/powered{name = "Shuttle"})
|
||||
"m" = (/obj/machinery/sleeper,/turf/open/floor/plasteel/darkblue,/area/ruin/powered{name = "Shuttle"})
|
||||
"n" = (/turf/open/floor/plasteel,/area/ruin/powered{name = "Shuttle"})
|
||||
"o" = (/obj/machinery/door/airlock/glass,/turf/open/floor/plasteel,/area/ruin/powered{name = "Shuttle"})
|
||||
"p" = (/turf/open/floor/plasteel/darkblue,/area/ruin/powered{name = "Shuttle"})
|
||||
"q" = (/turf/open/floor/plasteel/darkyellow,/area/ruin/powered{name = "Shuttle"})
|
||||
"r" = (/obj/structure/table/reinforced,/turf/open/floor/plasteel/darkyellow,/area/ruin/powered{name = "Shuttle"})
|
||||
"s" = (/obj/effect/spawner/structure/window/reinforced,/turf/open/floor/plating,/area/ruin/powered{name = "Shuttle"})
|
||||
"t" = (/obj/machinery/power/smes/magical,/turf/open/floor/plasteel,/area/ruin/powered{name = "Shuttle"})
|
||||
"u" = (/obj/structure/grille,/obj/structure/window/shuttle,/turf/open/floor/plating,/area/ruin/powered{name = "Shuttle"})
|
||||
"v" = (/obj/structure/chair/comfy{tag = "icon-comfychair (EAST)"; icon_state = "comfychair"; dir = 4},/turf/open/floor/plasteel/darkyellow,/area/ruin/powered{name = "Shuttle"})
|
||||
"w" = (/obj/structure/shuttle/engine/propulsion/burst/right{tag = "icon-burst_r (EAST)"; icon_state = "burst_r"; dir = 4},/turf/open/space,/area/ruin/powered{name = "Shuttle"})
|
||||
"x" = (/turf/closed/wall/shuttle/smooth,/turf/closed/indestructible/opshuttle{tag = "icon-wall3 (NORTHEAST)"; icon_state = "wall3"; dir = 5},/area/ruin/powered{name = "Shuttle"})
|
||||
"y" = (/turf/open/space,/turf/closed/indestructible/opshuttle{tag = "icon-wall3 (SOUTHEAST)"; icon_state = "wall3"; dir = 6},/area/ruin/powered{name = "Shuttle"})
|
||||
|
||||
(1,1,1) = {"
|
||||
aaabcdddeaaaaaaaaaaaaaa
|
||||
aaabcddddeaaaaaaaaaaaaa
|
||||
aaabcfgggghhiaaaaaaaaaa
|
||||
aaigggjjjgjjgaaaaaaaaaa
|
||||
aagjjkjjjgkgggggggiaaaa
|
||||
igggkggkggjjglmgjjggggi
|
||||
hnonngjjjkjjkppkjjkqqrs
|
||||
gngntgjjjguuguuggggqvrs
|
||||
hnonngjjjkjjkjjkjjkqqrs
|
||||
igggkggkggjjgjjgjjggggi
|
||||
aagjjkjjjgkgggggggiaaaa
|
||||
aaigggjjjgjjgaaaaaaaaaa
|
||||
aaawcxgggghhiaaaaaaaaaa
|
||||
aaawcdddyaaaaaaaaaaaaaa
|
||||
aaawcddyaaaaaaaaaaaaaaa
|
||||
"}
|
||||
@@ -0,0 +1,43 @@
|
||||
"a" = (/turf/open/space,/area/space)
|
||||
"b" = (/obj/structure/shuttle/engine/propulsion/burst/left{tag = "icon-burst_l (EAST)"; icon_state = "burst_l"; dir = 4},/turf/open/space,/area/ruin/powered{name = "Shuttle"})
|
||||
"c" = (/obj/structure/shuttle/engine/heater{tag = "icon-heater (WEST)"; icon_state = "heater"; dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/turf/open/floor/plating/airless,/area/ruin/powered{name = "Shuttle"})
|
||||
"d" = (/turf/closed/indestructible/opshuttle{tag = "icon-wall3 (EAST)"; icon_state = "wall3"; dir = 4},/area/ruin/powered{name = "Shuttle"})
|
||||
"e" = (/turf/open/space,/turf/closed/indestructible/opshuttle{tag = "icon-wall3 (NORTHEAST)"; icon_state = "wall3"; dir = 5},/area/ruin/powered{name = "Shuttle"})
|
||||
"f" = (/obj/structure/shuttle/engine/propulsion/burst/right{tag = "icon-burst_r (EAST)"; icon_state = "burst_r"; dir = 4},/turf/open/space,/area/ruin/powered{name = "Shuttle"})
|
||||
"g" = (/turf/closed/wall/shuttle,/turf/closed/indestructible/opshuttle{tag = "icon-wall3 (SOUTHEAST)"; icon_state = "wall3"; dir = 6},/area/ruin/powered{name = "Shuttle"})
|
||||
"h" = (/turf/closed/wall/shuttle,/area/ruin/powered{name = "Shuttle"})
|
||||
"i" = (/turf/closed/wall/shuttle/smooth/overspace,/area/ruin/powered{name = "Shuttle"})
|
||||
"j" = (/turf/open/space,/turf/closed/indestructible/opshuttle{tag = "icon-wall3 (NORTHWEST)"; icon_state = "wall3"; dir = 9},/area/ruin/powered{name = "Shuttle"})
|
||||
"k" = (/turf/open/floor/plasteel/black,/area/ruin/powered{name = "Shuttle"})
|
||||
"l" = (/obj/machinery/door/airlock/glass_external,/turf/open/floor/plating,/area/ruin/powered{name = "Shuttle"})
|
||||
"m" = (/turf/open/floor/plasteel,/area/ruin/powered{name = "Shuttle"})
|
||||
"n" = (/obj/machinery/door/airlock/glass,/turf/open/floor/plasteel/black,/area/ruin/powered{name = "Shuttle"})
|
||||
"o" = (/turf/open/floor/plasteel/darkblue,/area/ruin/powered{name = "Shuttle"})
|
||||
"p" = (/turf/open/floor/plasteel/darkyellow,/area/ruin/powered{name = "Shuttle"})
|
||||
"q" = (/turf/open/space,/turf/closed/indestructible/opshuttle{tag = "icon-wall3 (SOUTHWEST)"; icon_state = "wall3"; dir = 10},/area/ruin/powered{name = "Shuttle"})
|
||||
"r" = (/obj/structure/table,/turf/open/floor/plasteel,/area/ruin/powered{name = "Shuttle"})
|
||||
"s" = (/obj/structure/table,/obj/item/weapon/storage/firstaid/regular,/turf/open/floor/plasteel/darkblue,/area/ruin/powered{name = "Shuttle"})
|
||||
"t" = (/obj/machinery/sleeper{tag = "icon-sleeper (NORTH)"; icon_state = "sleeper"; dir = 1},/turf/open/floor/plasteel/darkblue,/area/ruin/powered{name = "Shuttle"})
|
||||
"u" = (/obj/structure/table/reinforced,/turf/open/floor/plasteel/darkyellow,/area/ruin/powered{name = "Shuttle"})
|
||||
"v" = (/obj/effect/spawner/structure/window/reinforced,/turf/open/floor/plating,/area/ruin/powered{name = "Shuttle"})
|
||||
"w" = (/obj/machinery/power/smes/magical,/turf/open/floor/plating,/area/ruin/powered{name = "Shuttle"})
|
||||
"x" = (/obj/structure/grille,/obj/structure/window/shuttle,/turf/open/floor/plating,/area/ruin/powered{name = "Shuttle"})
|
||||
"y" = (/obj/structure/chair/comfy{tag = "icon-comfychair (EAST)"; icon_state = "comfychair"; dir = 4},/turf/open/floor/plasteel/darkyellow,/area/ruin/powered{name = "Shuttle"})
|
||||
"z" = (/turf/closed/wall/shuttle,/turf/closed/indestructible/opshuttle{tag = "icon-wall3 (NORTHEAST)"; icon_state = "wall3"; dir = 5},/area/ruin/powered{name = "Shuttle"})
|
||||
"A" = (/turf/open/space,/turf/closed/indestructible/opshuttle{tag = "icon-wall3 (SOUTHEAST)"; icon_state = "wall3"; dir = 6},/area/ruin/powered{name = "Shuttle"})
|
||||
|
||||
(1,1,1) = {"
|
||||
aaabcddddeaaaaaaaaaaaaaaaaaa
|
||||
aaafcddghhiaaaaaaaaaaaaaaaaa
|
||||
aaajdghhkkhhhhliaaaaaaaaaaaa
|
||||
bcdddhmnkknkkhkhhhhhhhhhhhia
|
||||
fcddghmhhhhkknknknoonkknpphi
|
||||
aaaqhrmhhhhnhhhhkhsthkkhpuva
|
||||
aaaalmmwhhhkhhhhkhxxhxxhyuva
|
||||
aaajhrmhhhhnhhhhkhkkhkkhpuva
|
||||
bcddzhmhhhhkknknknkknkknpphi
|
||||
fcdddhmnkknkkhkhhhhhhhhhhhia
|
||||
aaaqdzhhkkhhhhliaaaaaaaaaaaa
|
||||
aaabcddzhhiaaaaaaaaaaaaaaaaa
|
||||
aaafcddddAaaaaaaaaaaaaaaaaaa
|
||||
"}
|
||||
@@ -0,0 +1,773 @@
|
||||
//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
|
||||
"a" = (
|
||||
/turf/open/space,
|
||||
/area/space)
|
||||
"b" = (
|
||||
/obj/structure/shuttle/engine/propulsion{
|
||||
tag = "icon-propulsion (NORTH)";
|
||||
icon_state = "propulsion";
|
||||
dir = 1
|
||||
},
|
||||
/turf/open/space,
|
||||
/area/ruin/powered{
|
||||
name = "Shuttle"
|
||||
})
|
||||
"c" = (
|
||||
/turf/closed/indestructible/opshuttle,
|
||||
/area/ruin/powered{
|
||||
name = "Shuttle"
|
||||
})
|
||||
"d" = (
|
||||
/obj/structure/shuttle/engine/heater{
|
||||
tag = "icon-heater (NORTH)";
|
||||
icon_state = "heater";
|
||||
dir = 1
|
||||
},
|
||||
/turf/open/floor/plating/airless,
|
||||
/area/ruin/powered{
|
||||
name = "Shuttle"
|
||||
})
|
||||
"e" = (
|
||||
/turf/open/space,
|
||||
/turf/closed/indestructible/opshuttle{
|
||||
tag = "icon-wall3 (NORTHWEST)";
|
||||
icon_state = "wall3";
|
||||
dir = 9
|
||||
},
|
||||
/area/ruin/powered{
|
||||
name = "Shuttle"
|
||||
})
|
||||
"f" = (
|
||||
/turf/open/space,
|
||||
/turf/closed/indestructible/opshuttle{
|
||||
tag = "icon-wall3 (NORTHEAST)";
|
||||
icon_state = "wall3";
|
||||
dir = 5
|
||||
},
|
||||
/area/ruin/powered{
|
||||
name = "Shuttle"
|
||||
})
|
||||
"g" = (
|
||||
/turf/closed/wall/shuttle/smooth,
|
||||
/turf/closed/indestructible/opshuttle{
|
||||
tag = "icon-wall3 (SOUTHEAST)";
|
||||
icon_state = "wall3";
|
||||
dir = 6
|
||||
},
|
||||
/area/ruin/powered{
|
||||
name = "Shuttle"
|
||||
})
|
||||
"h" = (
|
||||
/turf/closed/wall/shuttle/smooth,
|
||||
/area/ruin/powered{
|
||||
name = "Shuttle"
|
||||
})
|
||||
"i" = (
|
||||
/turf/closed/wall/shuttle/smooth,
|
||||
/turf/closed/indestructible/opshuttle{
|
||||
tag = "icon-wall3 (SOUTHWEST)";
|
||||
icon_state = "wall3";
|
||||
dir = 10
|
||||
},
|
||||
/area/ruin/powered{
|
||||
name = "Shuttle"
|
||||
})
|
||||
"j" = (
|
||||
/obj/machinery/door/airlock/glass_external,
|
||||
/turf/open/floor/plating,
|
||||
/area/ruin/powered{
|
||||
name = "Shuttle"
|
||||
})
|
||||
"k" = (
|
||||
/obj/machinery/power/smes/magical,
|
||||
/turf/open/floor/plasteel,
|
||||
/area/ruin/powered{
|
||||
name = "Shuttle"
|
||||
})
|
||||
"l" = (
|
||||
/turf/open/floor/plasteel,
|
||||
/area/ruin/powered{
|
||||
name = "Shuttle"
|
||||
})
|
||||
"m" = (
|
||||
/turf/open/floor/plating,
|
||||
/area/ruin/powered{
|
||||
name = "Shuttle"
|
||||
})
|
||||
"n" = (
|
||||
/obj/structure/shuttle/engine/propulsion{
|
||||
tag = "icon-propulsion (EAST)";
|
||||
icon_state = "propulsion";
|
||||
dir = 4
|
||||
},
|
||||
/turf/open/space,
|
||||
/area/ruin/powered{
|
||||
name = "Shuttle"
|
||||
})
|
||||
"o" = (
|
||||
/obj/structure/shuttle/engine/heater{
|
||||
tag = "icon-heater (WEST)";
|
||||
icon_state = "heater";
|
||||
dir = 8
|
||||
},
|
||||
/turf/open/floor/plating/airless,
|
||||
/area/ruin/powered{
|
||||
name = "Shuttle"
|
||||
})
|
||||
"p" = (
|
||||
/obj/machinery/door/airlock/glass,
|
||||
/turf/open/floor/plasteel,
|
||||
/area/ruin/powered{
|
||||
name = "Shuttle"
|
||||
})
|
||||
"q" = (
|
||||
/obj/structure/shuttle/engine/heater{
|
||||
tag = "icon-heater (EAST)";
|
||||
icon_state = "heater";
|
||||
dir = 4
|
||||
},
|
||||
/turf/open/floor/plating/airless,
|
||||
/area/ruin/powered{
|
||||
name = "Shuttle"
|
||||
})
|
||||
"r" = (
|
||||
/obj/structure/shuttle/engine/propulsion{
|
||||
tag = "icon-propulsion (WEST)";
|
||||
icon_state = "propulsion";
|
||||
dir = 8
|
||||
},
|
||||
/turf/open/space,
|
||||
/area/ruin/powered{
|
||||
name = "Shuttle"
|
||||
})
|
||||
"s" = (
|
||||
/turf/closed/wall/shuttle/smooth,
|
||||
/turf/closed/indestructible/opshuttle{
|
||||
tag = "icon-wall3 (NORTHEAST)";
|
||||
icon_state = "wall3";
|
||||
dir = 5
|
||||
},
|
||||
/area/ruin/powered{
|
||||
name = "Shuttle"
|
||||
})
|
||||
"t" = (
|
||||
/obj/effect/spawner/structure/window/reinforced,
|
||||
/turf/open/floor/plating,
|
||||
/area/ruin/powered{
|
||||
name = "Shuttle"
|
||||
})
|
||||
"u" = (
|
||||
/turf/closed/wall/shuttle/smooth,
|
||||
/turf/closed/indestructible/opshuttle{
|
||||
tag = "icon-wall3 (NORTHWEST)";
|
||||
icon_state = "wall3";
|
||||
dir = 9
|
||||
},
|
||||
/area/ruin/powered{
|
||||
name = "Shuttle"
|
||||
})
|
||||
"v" = (
|
||||
/obj/structure/table,
|
||||
/turf/open/floor/plasteel/darkyellow,
|
||||
/area/ruin/powered{
|
||||
name = "Shuttle"
|
||||
})
|
||||
"w" = (
|
||||
/turf/open/floor/plasteel/darkyellow,
|
||||
/area/ruin/powered{
|
||||
name = "Shuttle"
|
||||
})
|
||||
"x" = (
|
||||
/obj/structure/chair/comfy{
|
||||
tag = "icon-comfychair (WEST)";
|
||||
icon_state = "comfychair";
|
||||
dir = 8
|
||||
},
|
||||
/turf/open/floor/plasteel/darkyellow,
|
||||
/area/ruin/powered{
|
||||
name = "Shuttle"
|
||||
})
|
||||
"y" = (
|
||||
/turf/open/space,
|
||||
/turf/closed/indestructible/opshuttle{
|
||||
tag = "icon-wall3 (SOUTHWEST)";
|
||||
icon_state = "wall3";
|
||||
dir = 10
|
||||
},
|
||||
/area/ruin/powered{
|
||||
name = "Shuttle"
|
||||
})
|
||||
"z" = (
|
||||
/obj/machinery/sleeper,
|
||||
/turf/open/floor/plasteel/darkblue,
|
||||
/area/ruin/powered{
|
||||
name = "Shuttle"
|
||||
})
|
||||
"A" = (
|
||||
/turf/open/floor/plasteel/black,
|
||||
/area/ruin/powered{
|
||||
name = "Shuttle"
|
||||
})
|
||||
"B" = (
|
||||
/turf/open/space,
|
||||
/turf/closed/indestructible/opshuttle{
|
||||
tag = "icon-wall3 (SOUTHEAST)";
|
||||
icon_state = "wall3";
|
||||
dir = 6
|
||||
},
|
||||
/area/ruin/powered{
|
||||
name = "Shuttle"
|
||||
})
|
||||
"C" = (
|
||||
/turf/open/floor/plasteel/darkblue,
|
||||
/area/ruin/powered{
|
||||
name = "Shuttle"
|
||||
})
|
||||
"D" = (
|
||||
/obj/structure/table,
|
||||
/obj/item/weapon/storage/firstaid,
|
||||
/turf/open/floor/plasteel/darkblue,
|
||||
/area/ruin/powered{
|
||||
name = "Shuttle"
|
||||
})
|
||||
"E" = (
|
||||
/obj/structure/shuttle/engine/heater,
|
||||
/turf/open/floor/plating/airless,
|
||||
/area/ruin/powered{
|
||||
name = "Shuttle"
|
||||
})
|
||||
"F" = (
|
||||
/obj/structure/shuttle/engine/propulsion,
|
||||
/turf/open/space,
|
||||
/area/ruin/powered{
|
||||
name = "Shuttle"
|
||||
})
|
||||
|
||||
(1,1,1) = {"
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
n
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
n
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
"}
|
||||
(2,1,1) = {"
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
n
|
||||
c
|
||||
o
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
o
|
||||
c
|
||||
n
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
"}
|
||||
(3,1,1) = {"
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
e
|
||||
o
|
||||
c
|
||||
c
|
||||
y
|
||||
a
|
||||
a
|
||||
e
|
||||
c
|
||||
c
|
||||
o
|
||||
y
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
"}
|
||||
(4,1,1) = {"
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
e
|
||||
c
|
||||
c
|
||||
c
|
||||
c
|
||||
c
|
||||
a
|
||||
a
|
||||
c
|
||||
c
|
||||
c
|
||||
c
|
||||
c
|
||||
y
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
"}
|
||||
(5,1,1) = {"
|
||||
a
|
||||
a
|
||||
a
|
||||
e
|
||||
g
|
||||
h
|
||||
h
|
||||
s
|
||||
c
|
||||
g
|
||||
j
|
||||
j
|
||||
s
|
||||
c
|
||||
g
|
||||
h
|
||||
h
|
||||
s
|
||||
y
|
||||
a
|
||||
a
|
||||
a
|
||||
"}
|
||||
(6,1,1) = {"
|
||||
a
|
||||
a
|
||||
e
|
||||
c
|
||||
h
|
||||
k
|
||||
l
|
||||
h
|
||||
h
|
||||
h
|
||||
m
|
||||
m
|
||||
h
|
||||
h
|
||||
h
|
||||
l
|
||||
k
|
||||
h
|
||||
c
|
||||
y
|
||||
a
|
||||
a
|
||||
"}
|
||||
(7,1,1) = {"
|
||||
a
|
||||
b
|
||||
d
|
||||
c
|
||||
h
|
||||
l
|
||||
l
|
||||
l
|
||||
l
|
||||
p
|
||||
l
|
||||
l
|
||||
p
|
||||
l
|
||||
l
|
||||
l
|
||||
l
|
||||
h
|
||||
c
|
||||
E
|
||||
F
|
||||
a
|
||||
"}
|
||||
(8,1,1) = {"
|
||||
a
|
||||
c
|
||||
c
|
||||
c
|
||||
i
|
||||
h
|
||||
l
|
||||
l
|
||||
l
|
||||
h
|
||||
t
|
||||
t
|
||||
h
|
||||
l
|
||||
l
|
||||
l
|
||||
h
|
||||
u
|
||||
c
|
||||
c
|
||||
c
|
||||
a
|
||||
"}
|
||||
(9,1,1) = {"
|
||||
b
|
||||
d
|
||||
c
|
||||
c
|
||||
c
|
||||
h
|
||||
l
|
||||
l
|
||||
h
|
||||
z
|
||||
C
|
||||
C
|
||||
D
|
||||
h
|
||||
l
|
||||
l
|
||||
h
|
||||
c
|
||||
c
|
||||
c
|
||||
E
|
||||
F
|
||||
"}
|
||||
(10,1,1) = {"
|
||||
a
|
||||
a
|
||||
f
|
||||
c
|
||||
g
|
||||
h
|
||||
p
|
||||
h
|
||||
v
|
||||
h
|
||||
C
|
||||
C
|
||||
h
|
||||
A
|
||||
h
|
||||
p
|
||||
h
|
||||
s
|
||||
c
|
||||
B
|
||||
a
|
||||
a
|
||||
"}
|
||||
(11,1,1) = {"
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
j
|
||||
m
|
||||
l
|
||||
t
|
||||
w
|
||||
w
|
||||
l
|
||||
l
|
||||
A
|
||||
A
|
||||
t
|
||||
l
|
||||
m
|
||||
j
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
"}
|
||||
(12,1,1) = {"
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
j
|
||||
m
|
||||
l
|
||||
t
|
||||
x
|
||||
w
|
||||
l
|
||||
l
|
||||
A
|
||||
A
|
||||
t
|
||||
l
|
||||
m
|
||||
j
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
"}
|
||||
(13,1,1) = {"
|
||||
a
|
||||
a
|
||||
e
|
||||
c
|
||||
i
|
||||
h
|
||||
p
|
||||
h
|
||||
w
|
||||
h
|
||||
A
|
||||
A
|
||||
h
|
||||
A
|
||||
h
|
||||
p
|
||||
h
|
||||
u
|
||||
c
|
||||
y
|
||||
a
|
||||
a
|
||||
"}
|
||||
(14,1,1) = {"
|
||||
b
|
||||
d
|
||||
c
|
||||
c
|
||||
c
|
||||
h
|
||||
l
|
||||
l
|
||||
h
|
||||
A
|
||||
A
|
||||
A
|
||||
A
|
||||
h
|
||||
l
|
||||
l
|
||||
h
|
||||
c
|
||||
c
|
||||
c
|
||||
E
|
||||
F
|
||||
"}
|
||||
(15,1,1) = {"
|
||||
a
|
||||
c
|
||||
c
|
||||
c
|
||||
g
|
||||
h
|
||||
l
|
||||
l
|
||||
l
|
||||
h
|
||||
t
|
||||
t
|
||||
h
|
||||
l
|
||||
l
|
||||
l
|
||||
h
|
||||
s
|
||||
c
|
||||
c
|
||||
c
|
||||
a
|
||||
"}
|
||||
(16,1,1) = {"
|
||||
a
|
||||
b
|
||||
d
|
||||
c
|
||||
h
|
||||
l
|
||||
l
|
||||
l
|
||||
l
|
||||
p
|
||||
l
|
||||
l
|
||||
p
|
||||
l
|
||||
l
|
||||
l
|
||||
l
|
||||
h
|
||||
c
|
||||
E
|
||||
F
|
||||
a
|
||||
"}
|
||||
(17,1,1) = {"
|
||||
a
|
||||
a
|
||||
f
|
||||
c
|
||||
h
|
||||
k
|
||||
l
|
||||
h
|
||||
h
|
||||
h
|
||||
m
|
||||
m
|
||||
h
|
||||
h
|
||||
h
|
||||
l
|
||||
k
|
||||
h
|
||||
c
|
||||
B
|
||||
a
|
||||
a
|
||||
"}
|
||||
(18,1,1) = {"
|
||||
a
|
||||
a
|
||||
a
|
||||
f
|
||||
i
|
||||
h
|
||||
h
|
||||
u
|
||||
c
|
||||
i
|
||||
j
|
||||
j
|
||||
u
|
||||
c
|
||||
i
|
||||
h
|
||||
h
|
||||
u
|
||||
B
|
||||
a
|
||||
a
|
||||
a
|
||||
"}
|
||||
(19,1,1) = {"
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
f
|
||||
c
|
||||
c
|
||||
c
|
||||
c
|
||||
c
|
||||
a
|
||||
a
|
||||
c
|
||||
c
|
||||
c
|
||||
c
|
||||
c
|
||||
B
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
"}
|
||||
(20,1,1) = {"
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
f
|
||||
q
|
||||
c
|
||||
c
|
||||
B
|
||||
a
|
||||
a
|
||||
f
|
||||
c
|
||||
c
|
||||
q
|
||||
B
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
"}
|
||||
(21,1,1) = {"
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
r
|
||||
c
|
||||
q
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
q
|
||||
c
|
||||
r
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
"}
|
||||
(22,1,1) = {"
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
r
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
r
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
"}
|
||||
@@ -0,0 +1,480 @@
|
||||
//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
|
||||
"a" = (
|
||||
/turf/open/space,
|
||||
/area/space)
|
||||
"b" = (
|
||||
/turf/open/space,
|
||||
/turf/closed/indestructible/oldshuttle/corner{
|
||||
tag = "icon-corner (WEST)";
|
||||
icon_state = "corner";
|
||||
dir = 8
|
||||
},
|
||||
/area/ruin/powered)
|
||||
"c" = (
|
||||
/turf/closed/indestructible/oldshuttle,
|
||||
/area/ruin/powered)
|
||||
"d" = (
|
||||
/obj/machinery/door/airlock/glass,
|
||||
/turf/open/floor/oldshuttle{
|
||||
baseturf = /turf/open/space;
|
||||
initial_gas_mix = "o2=22;n2=82;TEMP=293.15"
|
||||
},
|
||||
/area/ruin/powered)
|
||||
"e" = (
|
||||
/turf/open/space,
|
||||
/turf/closed/indestructible/oldshuttle/corner,
|
||||
/area/ruin/powered)
|
||||
"f" = (
|
||||
/turf/open/floor/oldshuttle{
|
||||
baseturf = /turf/open/space;
|
||||
initial_gas_mix = "o2=22;n2=82;TEMP=293.15"
|
||||
},
|
||||
/turf/closed/indestructible/oldshuttle/corner{
|
||||
tag = "icon-corner (NORTH)";
|
||||
icon_state = "corner";
|
||||
dir = 1
|
||||
},
|
||||
/area/ruin/powered)
|
||||
"g" = (
|
||||
/turf/open/floor/oldshuttle{
|
||||
baseturf = /turf/open/space;
|
||||
initial_gas_mix = "o2=22;n2=82;TEMP=293.15"
|
||||
},
|
||||
/area/ruin/powered)
|
||||
"h" = (
|
||||
/turf/open/floor/oldshuttle{
|
||||
baseturf = /turf/open/space;
|
||||
initial_gas_mix = "o2=22;n2=82;TEMP=293.15"
|
||||
},
|
||||
/turf/closed/indestructible/oldshuttle/corner{
|
||||
tag = "icon-corner (EAST)";
|
||||
icon_state = "corner";
|
||||
dir = 4
|
||||
},
|
||||
/area/ruin/powered)
|
||||
"i" = (
|
||||
/obj/structure/closet{
|
||||
icon_state = "oldcloset"
|
||||
},
|
||||
/turf/open/floor/oldshuttle{
|
||||
baseturf = /turf/open/space;
|
||||
initial_gas_mix = "o2=22;n2=82;TEMP=293.15"
|
||||
},
|
||||
/area/ruin/powered)
|
||||
"j" = (
|
||||
/obj/structure/shuttle/engine/propulsion/burst{
|
||||
tag = "icon-propulsion (NORTH)";
|
||||
icon_state = "propulsion";
|
||||
dir = 1
|
||||
},
|
||||
/turf/open/space,
|
||||
/area/ruin/powered)
|
||||
"k" = (
|
||||
/turf/closed/indestructible/oldshuttle{
|
||||
tag = "icon-orange";
|
||||
icon_state = "orange"
|
||||
},
|
||||
/area/ruin/powered)
|
||||
"l" = (
|
||||
/obj/structure/chair/old{
|
||||
tag = "icon-chairold (NORTH)";
|
||||
icon_state = "chairold";
|
||||
dir = 1
|
||||
},
|
||||
/turf/open/floor/oldshuttle{
|
||||
baseturf = /turf/open/space;
|
||||
initial_gas_mix = "o2=22;n2=82;TEMP=293.15"
|
||||
},
|
||||
/area/ruin/powered)
|
||||
"m" = (
|
||||
/turf/open/floor/oldshuttle{
|
||||
baseturf = /turf/open/space;
|
||||
initial_gas_mix = "o2=22;n2=82;TEMP=293.15"
|
||||
},
|
||||
/turf/closed/indestructible/oldshuttle/corner{
|
||||
tag = "icon-corner (WEST)";
|
||||
icon_state = "corner";
|
||||
dir = 8
|
||||
},
|
||||
/area/ruin/powered)
|
||||
"n" = (
|
||||
/turf/open/floor/oldshuttle{
|
||||
baseturf = /turf/open/space;
|
||||
initial_gas_mix = "o2=22;n2=82;TEMP=293.15"
|
||||
},
|
||||
/turf/closed/indestructible/oldshuttle/corner,
|
||||
/area/ruin/powered)
|
||||
"o" = (
|
||||
/turf/open/space,
|
||||
/turf/closed/indestructible/oldshuttle/corner{
|
||||
tag = "icon-corner (NORTH)";
|
||||
icon_state = "corner";
|
||||
dir = 1
|
||||
},
|
||||
/area/ruin/powered)
|
||||
"p" = (
|
||||
/turf/open/space,
|
||||
/turf/closed/indestructible/oldshuttle/corner{
|
||||
tag = "icon-corner (EAST)";
|
||||
icon_state = "corner";
|
||||
dir = 4
|
||||
},
|
||||
/area/ruin/powered)
|
||||
"q" = (
|
||||
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
|
||||
/turf/closed/indestructible/oldshuttle/corner,
|
||||
/area/ruin/powered)
|
||||
"r" = (
|
||||
/obj/machinery/power/generator,
|
||||
/turf/open/floor/oldshuttle{
|
||||
baseturf = /turf/open/space;
|
||||
initial_gas_mix = "o2=22;n2=82;TEMP=293.15"
|
||||
},
|
||||
/area/ruin/powered)
|
||||
"s" = (
|
||||
/obj/machinery/power/smes,
|
||||
/turf/open/floor/oldshuttle{
|
||||
baseturf = /turf/open/space;
|
||||
initial_gas_mix = "o2=22;n2=82;TEMP=293.15"
|
||||
},
|
||||
/area/ruin/powered)
|
||||
"t" = (
|
||||
/obj/structure/shuttle/engine/propulsion/burst/left,
|
||||
/turf/open/space,
|
||||
/area/ruin/powered)
|
||||
"u" = (
|
||||
/obj/structure/shuttle/engine/propulsion/burst/right,
|
||||
/turf/open/space,
|
||||
/area/ruin/powered)
|
||||
"v" = (
|
||||
/obj/structure/shuttle/engine/propulsion/burst/right,
|
||||
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
|
||||
/area/ruin/powered)
|
||||
"w" = (
|
||||
/obj/structure/shuttle/engine/propulsion/burst,
|
||||
/turf/open/space,
|
||||
/area/ruin/powered)
|
||||
|
||||
(1,1,1) = {"
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
b
|
||||
c
|
||||
k
|
||||
t
|
||||
a
|
||||
"}
|
||||
(2,1,1) = {"
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
b
|
||||
c
|
||||
c
|
||||
f
|
||||
g
|
||||
k
|
||||
k
|
||||
w
|
||||
"}
|
||||
(3,1,1) = {"
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
b
|
||||
d
|
||||
f
|
||||
g
|
||||
g
|
||||
g
|
||||
g
|
||||
k
|
||||
k
|
||||
w
|
||||
"}
|
||||
(4,1,1) = {"
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
j
|
||||
k
|
||||
g
|
||||
g
|
||||
g
|
||||
g
|
||||
m
|
||||
d
|
||||
k
|
||||
u
|
||||
a
|
||||
"}
|
||||
(5,1,1) = {"
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
b
|
||||
c
|
||||
g
|
||||
g
|
||||
g
|
||||
m
|
||||
o
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
"}
|
||||
(6,1,1) = {"
|
||||
a
|
||||
a
|
||||
b
|
||||
c
|
||||
c
|
||||
c
|
||||
c
|
||||
c
|
||||
c
|
||||
c
|
||||
c
|
||||
c
|
||||
c
|
||||
p
|
||||
a
|
||||
"}
|
||||
(7,1,1) = {"
|
||||
a
|
||||
b
|
||||
f
|
||||
i
|
||||
c
|
||||
i
|
||||
i
|
||||
i
|
||||
i
|
||||
i
|
||||
i
|
||||
c
|
||||
s
|
||||
c
|
||||
p
|
||||
"}
|
||||
(8,1,1) = {"
|
||||
b
|
||||
f
|
||||
i
|
||||
i
|
||||
c
|
||||
l
|
||||
l
|
||||
l
|
||||
l
|
||||
l
|
||||
l
|
||||
c
|
||||
g
|
||||
n
|
||||
c
|
||||
"}
|
||||
(9,1,1) = {"
|
||||
c
|
||||
g
|
||||
g
|
||||
g
|
||||
g
|
||||
l
|
||||
l
|
||||
l
|
||||
l
|
||||
l
|
||||
m
|
||||
c
|
||||
g
|
||||
g
|
||||
c
|
||||
"}
|
||||
(10,1,1) = {"
|
||||
d
|
||||
g
|
||||
g
|
||||
g
|
||||
g
|
||||
g
|
||||
g
|
||||
g
|
||||
g
|
||||
g
|
||||
c
|
||||
r
|
||||
g
|
||||
g
|
||||
d
|
||||
"}
|
||||
(11,1,1) = {"
|
||||
c
|
||||
g
|
||||
g
|
||||
g
|
||||
g
|
||||
l
|
||||
l
|
||||
l
|
||||
l
|
||||
l
|
||||
n
|
||||
c
|
||||
g
|
||||
g
|
||||
c
|
||||
"}
|
||||
(12,1,1) = {"
|
||||
e
|
||||
h
|
||||
i
|
||||
i
|
||||
c
|
||||
l
|
||||
l
|
||||
l
|
||||
l
|
||||
l
|
||||
l
|
||||
c
|
||||
g
|
||||
m
|
||||
c
|
||||
"}
|
||||
(13,1,1) = {"
|
||||
a
|
||||
e
|
||||
h
|
||||
i
|
||||
c
|
||||
i
|
||||
i
|
||||
i
|
||||
i
|
||||
i
|
||||
i
|
||||
c
|
||||
s
|
||||
c
|
||||
o
|
||||
"}
|
||||
(14,1,1) = {"
|
||||
a
|
||||
a
|
||||
e
|
||||
c
|
||||
c
|
||||
c
|
||||
c
|
||||
c
|
||||
c
|
||||
c
|
||||
c
|
||||
c
|
||||
c
|
||||
o
|
||||
a
|
||||
"}
|
||||
(15,1,1) = {"
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
e
|
||||
c
|
||||
g
|
||||
g
|
||||
g
|
||||
n
|
||||
p
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
"}
|
||||
(16,1,1) = {"
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
j
|
||||
k
|
||||
g
|
||||
g
|
||||
g
|
||||
g
|
||||
n
|
||||
d
|
||||
k
|
||||
t
|
||||
a
|
||||
"}
|
||||
(17,1,1) = {"
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
e
|
||||
d
|
||||
h
|
||||
g
|
||||
g
|
||||
g
|
||||
g
|
||||
k
|
||||
k
|
||||
w
|
||||
"}
|
||||
(18,1,1) = {"
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
e
|
||||
c
|
||||
c
|
||||
h
|
||||
g
|
||||
k
|
||||
k
|
||||
w
|
||||
"}
|
||||
(19,1,1) = {"
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
q
|
||||
c
|
||||
k
|
||||
v
|
||||
a
|
||||
"}
|
||||
@@ -15,7 +15,7 @@
|
||||
#define DIAG_MECH_HUD "11"// Mech health bar
|
||||
#define DIAG_BOT_HUD "12"// Bot HUDs
|
||||
//for antag huds. these are used at the /mob level
|
||||
#define ANTAG_HUD "12"
|
||||
#define ANTAG_HUD "13"
|
||||
|
||||
//data HUD (medhud, sechud) defines
|
||||
//Don't forget to update human/New() if you change these!
|
||||
@@ -39,3 +39,4 @@
|
||||
#define ANTAG_HUD_DEVIL 17
|
||||
#define ANTAG_HUD_SINTOUCHED 18
|
||||
#define ANTAG_HUD_SOULLESS 19
|
||||
#define ANTAG_HUD_CLOCKWORK 20
|
||||
|
||||
@@ -226,7 +226,7 @@
|
||||
#define MIN_RANGE_FIND 16
|
||||
#define FUZZY_CHANCE_HIGH 85
|
||||
#define FUZZY_CHANCE_LOW 50
|
||||
#define CHANCE_TALK 15
|
||||
#define CHANCE_TALK 1
|
||||
|
||||
#define SNPC_BRUTE 1
|
||||
#define SNPC_STEALTH 2
|
||||
@@ -427,4 +427,12 @@ var/global/list/ghost_others_options = list(GHOST_OTHERS_SIMPLE, GHOST_OTHERS_DE
|
||||
// Shuttle return values
|
||||
#define SHUTTLE_ALREADY_DOCKED 7
|
||||
|
||||
|
||||
#define CHECK_DNA_AND_SPECIES(C) if((!(C.dna)) || (!(C.dna.species))) return
|
||||
|
||||
// Evil narsie colour
|
||||
#define NARSIE_WINDOW_COLOUR "#7D1919"
|
||||
|
||||
// Defib stats
|
||||
#define DEFIB_TIME_LIMIT 120
|
||||
#define DEFIB_TIME_LOSS 60
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
#define ROLE_HOG_GOD "hand of god: god"
|
||||
#define ROLE_HOG_CULTIST "hand of god: cultist"
|
||||
#define ROLE_DEVIL "devil"
|
||||
|
||||
#define ROLE_SERVANT_OF_RATVAR "servant of Ratvar"
|
||||
|
||||
//Missing assignment means it's not a gamemode specific role, IT'S NOT A BUG OR ERROR.
|
||||
//The gamemode specific ones are just so the gamemodes can query whether a player is old enough
|
||||
@@ -49,5 +49,6 @@ var/global/list/special_roles = list(
|
||||
ROLE_ABDUCTOR = /datum/game_mode/abduction,
|
||||
ROLE_HOG_GOD = /datum/game_mode/hand_of_god,
|
||||
ROLE_HOG_CULTIST = /datum/game_mode/hand_of_god,
|
||||
ROLE_DEVIL = /datum/game_mode/devil
|
||||
ROLE_DEVIL = /datum/game_mode/devil,
|
||||
ROLE_SERVANT_OF_RATVAR = /datum/game_mode/clockwork_cult,
|
||||
)
|
||||
|
||||
@@ -401,7 +401,7 @@
|
||||
if(!G.key || !G.client)
|
||||
continue
|
||||
if(be_special_flag)
|
||||
if(!(G.client.prefs.be_special & be_special_flag))
|
||||
if(!(G.client.prefs) || !(be_special_flag in G.client.prefs.be_special))
|
||||
continue
|
||||
if (gametypeCheck)
|
||||
if(!gametypeCheck.age_check(G.client))
|
||||
|
||||
@@ -55,7 +55,7 @@
|
||||
/proc/is_type_in_list(atom/A, list/L)
|
||||
if (!L.len)
|
||||
return 0
|
||||
if (!isnum(L[L[1]]))
|
||||
if (!L[L[1]])
|
||||
generate_type_list_cache(L)
|
||||
return L[A.type]
|
||||
|
||||
@@ -238,13 +238,7 @@
|
||||
return r
|
||||
|
||||
// Returns the key based on the index
|
||||
/proc/get_key_by_index(list/L, index)
|
||||
var/i = 1
|
||||
for(var/key in L)
|
||||
if(index == i)
|
||||
return key
|
||||
i++
|
||||
return null
|
||||
#define KEYBYINDEX(L, index) (((index <= L:len) && (index > 0)) ? L[index] : null)
|
||||
|
||||
/proc/count_by_type(list/L, type)
|
||||
var/i = 0
|
||||
@@ -365,3 +359,6 @@
|
||||
for(var/i = 1 to l.len)
|
||||
if(islist(.[i]))
|
||||
.[i] = .(.[i])
|
||||
|
||||
//Picks from the list, with some safeties, and returns the "default" arg if it fails
|
||||
#define DEFAULTPICK(L, default) ((istype(L, /list) && L:len) ? pick(L) : default)
|
||||
|
||||
@@ -93,6 +93,7 @@
|
||||
var/humans_need_surnames = 0
|
||||
var/allow_ai = 0 // allow ai job
|
||||
var/forbid_secborg = 0 // disallow secborg module to be chosen.
|
||||
var/forbid_peaceborg = 0
|
||||
var/panic_bunker = 0 // prevents new people it hasn't seen before from connecting
|
||||
var/notify_new_player_age = 0 // how long do we notify admins of a new player
|
||||
var/irc_first_connection_alert = 0 // do we notify the irc channel when somebody is connecting for the first time?
|
||||
@@ -560,6 +561,8 @@
|
||||
config.allow_ai = 1
|
||||
if("disable_secborg")
|
||||
config.forbid_secborg = 1
|
||||
if("disable_peaceborg")
|
||||
config.forbid_peaceborg = 1
|
||||
if("silent_ai")
|
||||
config.silent_ai = 1
|
||||
if("silent_borg")
|
||||
|
||||
@@ -158,4 +158,47 @@
|
||||
if(istype(teleatom, /mob/living))
|
||||
var/mob/living/MM = teleatom
|
||||
MM << "<span class='warning'>The bluespace interface on your bag of holding interferes with the teleport!</span>"
|
||||
return 1
|
||||
return 1
|
||||
|
||||
// Safe location finder
|
||||
|
||||
/proc/find_safe_turf(zlevel = ZLEVEL_STATION, list/zlevels)
|
||||
if(!zlevels)
|
||||
zlevels = list(zlevel)
|
||||
for(var/cycle in 1 to 100)
|
||||
// DRUNK DIALLING WOOOOOOOOO
|
||||
var/random_location = locate(rand(37,202),rand(75,192),pick(zlevels))
|
||||
if(!(istype(random_location, /turf/open/floor)))
|
||||
continue
|
||||
var/turf/open/floor/F = random_location
|
||||
if(!F.air)
|
||||
continue
|
||||
|
||||
var/datum/gas_mixture/A = F.air
|
||||
var/list/A_gases = A.gases
|
||||
var/trace_gases
|
||||
for(var/id in A_gases)
|
||||
if(id in hardcoded_gases)
|
||||
continue
|
||||
trace_gases = TRUE
|
||||
break
|
||||
|
||||
// Can most things breathe?
|
||||
if(trace_gases)
|
||||
continue
|
||||
if(!(A_gases["o2"] && A_gases["o2"][MOLES] >= 16))
|
||||
continue
|
||||
if(A_gases["plasma"])
|
||||
continue
|
||||
if(A_gases["co2"] && A_gases["co2"][MOLES] >= 10)
|
||||
continue
|
||||
|
||||
// Aim for goldilocks temperatures and pressure
|
||||
if((A.temperature <= 270) || (A.temperature >= 360))
|
||||
continue
|
||||
var/pressure = A.return_pressure()
|
||||
if((pressure <= 20) || (pressure >= 550))
|
||||
continue
|
||||
|
||||
// DING! You have passed the gauntlet, and are "probably" safe.
|
||||
return F
|
||||
|
||||
@@ -21,6 +21,7 @@ var/datum/atom_hud/huds = list( \
|
||||
ANTAG_HUD_DEVIL = new/datum/atom_hud/antag(),\
|
||||
ANTAG_HUD_SINTOUCHED = new/datum/atom_hud/antag/hidden(),\
|
||||
ANTAG_HUD_SOULLESS = new/datum/atom_hud/antag/hidden(),\
|
||||
ANTAG_HUD_CLOCKWORK = new/datum/atom_hud/antag(),\
|
||||
)
|
||||
|
||||
/datum/atom_hud
|
||||
|
||||
@@ -53,7 +53,8 @@
|
||||
M.amount += amt
|
||||
total_amount += amt
|
||||
else
|
||||
for(var/datum/material/M in materials)
|
||||
for(var/i in materials)
|
||||
var/datum/material/M = materials[i]
|
||||
M.amount += amt
|
||||
total_amount += amt
|
||||
return (total_amount - total_amount_saved)
|
||||
@@ -135,7 +136,7 @@
|
||||
return TRUE
|
||||
else if(istype(mats))
|
||||
for(var/M in mats)
|
||||
if(materials[M] && mats[M] <= materials[M])
|
||||
if(materials[M] && (mats[M] <= materials[M]))
|
||||
continue
|
||||
else
|
||||
return FALSE
|
||||
@@ -218,62 +219,47 @@
|
||||
|
||||
|
||||
/datum/material
|
||||
var/name
|
||||
var/amount = 0
|
||||
var/material_type = null
|
||||
var/sheet_type = null
|
||||
|
||||
/datum/material/metal
|
||||
|
||||
/datum/material/metal/New()
|
||||
..()
|
||||
name = "Metal"
|
||||
material_type = MAT_METAL
|
||||
sheet_type = /obj/item/stack/sheet/metal
|
||||
|
||||
/datum/material/glass
|
||||
|
||||
/datum/material/glass/New()
|
||||
..()
|
||||
name = "Glass"
|
||||
material_type = MAT_GLASS
|
||||
sheet_type = /obj/item/stack/sheet/glass
|
||||
|
||||
/datum/material/silver
|
||||
|
||||
/datum/material/silver/New()
|
||||
..()
|
||||
name = "Silver"
|
||||
material_type = MAT_SILVER
|
||||
sheet_type = /obj/item/stack/sheet/mineral/silver
|
||||
|
||||
/datum/material/gold
|
||||
|
||||
/datum/material/gold/New()
|
||||
..()
|
||||
name = "Gold"
|
||||
material_type = MAT_GOLD
|
||||
sheet_type = /obj/item/stack/sheet/mineral/gold
|
||||
|
||||
/datum/material/diamond
|
||||
|
||||
/datum/material/diamond/New()
|
||||
..()
|
||||
name = "Diamond"
|
||||
material_type = MAT_DIAMOND
|
||||
sheet_type = /obj/item/stack/sheet/mineral/diamond
|
||||
|
||||
/datum/material/uranium
|
||||
|
||||
/datum/material/uranium/New()
|
||||
..()
|
||||
name = "Uranium"
|
||||
material_type = MAT_URANIUM
|
||||
sheet_type = /obj/item/stack/sheet/mineral/uranium
|
||||
|
||||
/datum/material/plasma
|
||||
|
||||
/datum/material/plasma/New()
|
||||
..()
|
||||
name = "Solid Plasma"
|
||||
material_type = MAT_PLASMA
|
||||
sheet_type = /obj/item/stack/sheet/mineral/plasma
|
||||
|
||||
/datum/material/bananium
|
||||
|
||||
/datum/material/bananium/New()
|
||||
..()
|
||||
name = "Bananium"
|
||||
material_type = MAT_BANANIUM
|
||||
sheet_type = /obj/item/stack/sheet/mineral/bananium
|
||||
sheet_type = /obj/item/stack/sheet/mineral/bananium
|
||||
|
||||
+42
-1
@@ -245,6 +245,7 @@
|
||||
"nuclear",
|
||||
"traitor", // "traitorchan",
|
||||
"monkey",
|
||||
"clockcult"
|
||||
)
|
||||
var/text = ""
|
||||
|
||||
@@ -352,6 +353,26 @@
|
||||
|
||||
sections["cult"] = text
|
||||
|
||||
/** CLOCKWORK CULT **/
|
||||
text = "clockwork cult"
|
||||
if(ticker.mode.config_tag == "clockwork cult")
|
||||
text = uppertext(text)
|
||||
text = "<i><b>[text]</b></i>: "
|
||||
if(src in ticker.mode.servants_of_ratvar)
|
||||
text += "loyal|<a href='?src=\ref[src];clockcult=clear'>employee</a>|<b>SERVANT</b>"
|
||||
text += "<br><a href='?src=\ref[src];clockcult=slab'>Give slab</a>"
|
||||
else if(isloyal(current))
|
||||
text += "<b>LOYAL</b>|employee|<a href='?src=\ref[src];clockcult=servant'>servant</a>"
|
||||
else
|
||||
text += "loyal|<b>EMPLOYEE</b>|<a href='?src=\ref[src];clockcult=servant'>servant</a>"
|
||||
|
||||
if(current && current.client && (ROLE_SERVANT_OF_RATVAR in current.client.prefs.be_special))
|
||||
text += "|Enabled in Prefs"
|
||||
else
|
||||
text += "|Disabled in Prefs"
|
||||
|
||||
sections["clockcult"] = text
|
||||
|
||||
/** WIZARD ***/
|
||||
text = "wizard"
|
||||
if (ticker.mode.config_tag=="wizard")
|
||||
@@ -1017,6 +1038,22 @@
|
||||
if (!ticker.mode.equip_cultist(current))
|
||||
usr << "<span class='danger'>Spawning amulet failed!</span>"
|
||||
|
||||
else if(href_list["clockcult"])
|
||||
switch(href_list["clockcult"])
|
||||
if("clear")
|
||||
remove_servant_of_ratvar(current)
|
||||
message_admins("[key_name_admin(usr)] has removed clockwork servant status from [current].")
|
||||
log_admin("[key_name(usr)] has removed clockwork servant status from [current].")
|
||||
if("servant")
|
||||
if(!(src in ticker.mode.servants_of_ratvar))
|
||||
add_servant_of_ratvar(current)
|
||||
message_admins("[key_name_admin(usr)] has made [current] into a servant of Ratvar.")
|
||||
log_admin("[key_name(usr)] has made [current] into a servant of Ratvar.")
|
||||
if("slab")
|
||||
if(!ticker.mode.equip_servant(current))
|
||||
usr << "<span class='warning'>Failed to outfit [current] with a slab!</span>"
|
||||
else
|
||||
usr << "<span class='notice'>Successfully gave [current] a clockwork slab!</span>"
|
||||
|
||||
else if (href_list["wizard"])
|
||||
switch(href_list["wizard"])
|
||||
@@ -1689,7 +1726,11 @@
|
||||
return G
|
||||
break
|
||||
|
||||
|
||||
/datum/mind/proc/grab_ghost(force)
|
||||
var/mob/dead/observer/G = get_ghost(even_if_they_cant_reenter = force)
|
||||
. = G
|
||||
if(G)
|
||||
G.reenter_corpse()
|
||||
|
||||
/mob/proc/sync_mind()
|
||||
mind_initialize() //updates the mind (or creates and initializes one if one doesn't exist)
|
||||
|
||||
@@ -183,15 +183,6 @@
|
||||
suffix = "lavaland_surface_survivalpod.dmm"
|
||||
cost = 5
|
||||
|
||||
/datum/map_template/ruin/lavaland/wwiioutpost
|
||||
name = "Strange Outpost"
|
||||
id = "nazi"
|
||||
description = "The ruins of an outpost, skeletons and empty shell casings litter the interior of \
|
||||
the structure. Some of these uniforms look awfully strange.."
|
||||
suffix = "lavaland_surface_wwiioutpost.dmm"
|
||||
cost = 20
|
||||
allow_duplicates = FALSE
|
||||
|
||||
/datum/map_template/ruin/lavaland/tomb
|
||||
name = "Strange Outpost"
|
||||
id = "tomb"
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
/datum/game_mode/blob/check_finished()
|
||||
if(overminds.len)
|
||||
return 0
|
||||
if(blobwincount <= blobs_legit.len)//Blob took over
|
||||
return 1
|
||||
if(overminds.len)
|
||||
return 0
|
||||
if(!blob_cores.len) //blob is dead
|
||||
if(config.continuous["blob"])
|
||||
continuous_sanity_checked = 1 //Nonstandard definition of "alive" gets past the check otherwise
|
||||
|
||||
@@ -90,7 +90,7 @@
|
||||
attack_sound = 'sound/weapons/genhit1.ogg'
|
||||
flying = 1
|
||||
del_on_death = 1
|
||||
deathmessage = "The blob spore explodes into a cloud of gas!"
|
||||
deathmessage = "explodes into a cloud of gas!"
|
||||
var/death_cloud_size = 1 //size of cloud produced from a dying spore
|
||||
var/list/human_overlays = list()
|
||||
var/is_zombie = 0
|
||||
@@ -212,13 +212,17 @@
|
||||
mob_size = MOB_SIZE_LARGE
|
||||
see_invisible = SEE_INVISIBLE_MINIMUM
|
||||
see_in_dark = 8
|
||||
var/independent = FALSE
|
||||
|
||||
/mob/living/simple_animal/hostile/blob/blobbernaut/New()
|
||||
..()
|
||||
verbs -= /mob/living/verb/pulled //no pulling people deep into the blob
|
||||
if(!independent) //no pulling people deep into the blob
|
||||
verbs -= /mob/living/verb/pulled
|
||||
|
||||
/mob/living/simple_animal/hostile/blob/blobbernaut/Life()
|
||||
if(..())
|
||||
if(independent)
|
||||
return // strong independent blobbernaut that don't need no blob
|
||||
var/damagesources = 0
|
||||
if(!(locate(/obj/effect/blob) in range(2, src)))
|
||||
damagesources++
|
||||
@@ -271,3 +275,7 @@
|
||||
factory.naut = null //remove this naut from its factory
|
||||
factory.maxhealth = initial(factory.maxhealth)
|
||||
flick("blobbernaut_death", src)
|
||||
|
||||
/mob/living/simple_animal/hostile/blob/blobbernaut/independent
|
||||
independent = TRUE
|
||||
gold_core_spawnable = 1
|
||||
|
||||
@@ -0,0 +1,16 @@
|
||||
var/global/clockwork_construction_value = 0 //The total value of all structures built by the clockwork cult
|
||||
var/global/clockwork_caches = 0 //How many clockwork caches exist in the world (not each individual)
|
||||
var/global/clockwork_daemons = 0 //How many daemons exist in the world
|
||||
var/global/list/clockwork_generals_invoked = list("nezbere" = FALSE, "sevtug" = FALSE, "nzcrentr" = FALSE, "inath-neq" = FALSE) //How many generals have been recently invoked
|
||||
var/global/list/all_clockwork_objects = list() //All clockwork items, structures, and effects in existence
|
||||
var/global/list/all_clockwork_mobs = list() //All clockwork SERVANTS (not creatures) in existence
|
||||
var/global/list/clockwork_component_cache = list("belligerent_eye" = 0, "vanguard_cogwheel" = 0, "guvax_capacitor" = 0, "replicant_alloy" = 0, "hierophant_ansible" = 0) //The pool of components that caches draw from
|
||||
|
||||
#define SCRIPTURE_PERIPHERAL 0 //Should never be used
|
||||
#define SCRIPTURE_DRIVER 1
|
||||
#define SCRIPTURE_SCRIPT 2
|
||||
#define SCRIPTURE_APPLICATION 3
|
||||
#define SCRIPTURE_REVENANT 4
|
||||
#define SCRIPTURE_JUDGEMENT 5
|
||||
|
||||
#define SLAB_PRODUCTION_THRESHOLD 60 //How many cycles it takes slabs to produce a single component; defaults to one minute
|
||||
@@ -0,0 +1,274 @@
|
||||
/*
|
||||
|
||||
CLOCKWORK CULT: Based off of the failed pull requests from vgstation
|
||||
|
||||
While Nar-Sie is the oldest and most prominent of the elder gods, there are other forces at work in the universe.
|
||||
Ratvar, the Clockwork Justiciar, a homage to Nar-Sie granted sentience by its own power, is one such other force.
|
||||
Imprisoned within a massive construct known as the Celestial Derelict - or Reebe - an intense hatred of the Blood God festers.
|
||||
Ratvar, unable to act in the mortal plane, seeks to return and forms covenants with mortals in order to bolster his influence.
|
||||
Due to his mechanical nature, Ratvar is also capable of influencing silicon-based lifeforms, unlike Nar-Sie, who can only influence natural life.
|
||||
|
||||
This is a team-based gamemode.
|
||||
|
||||
There are three possible objectives the Enlightened - Ratvar's minions - can have:
|
||||
1. Ensure X amount of Enlightened escape the station through the shuttle or otherwise.
|
||||
2. Convert all silicon lifeforms on the station to Ratvar's cause.
|
||||
3. Summon Ratvar via construction of a Gateway.
|
||||
|
||||
The clockwork version of an arcane tome is the clockwork slab.
|
||||
While it can perform certain actions, it consumes a resource called components.
|
||||
Components, which are fallen fragments of Ratvar's body as he rusts in Reebe, are powerful and have various effects.
|
||||
Game-wise, clockwork slabs will generate components over time, with more powerful components being slower.
|
||||
|
||||
This file's folder contains:
|
||||
__clock_defines.dm: Defined variables
|
||||
clock_cult.dm: Core gamemode files.
|
||||
clock_mobs.dm: Hostile and benign clockwork creatures.
|
||||
clock_objects.dm: Items and structures.
|
||||
clock_ratvar.dm: The Ark of the Clockwork Justiciar and Ratvar himself. Important enough to have his own file.
|
||||
clock_scripture.dm: Scripture and rites.
|
||||
clock_unsorted.dm: Anything else with no place to be
|
||||
|
||||
*/
|
||||
|
||||
///////////
|
||||
// PROCS //
|
||||
///////////
|
||||
|
||||
/proc/is_servant_of_ratvar(mob/M)
|
||||
return M && istype(M) && M.mind && ticker && ticker.mode && (M.mind in ticker.mode.servants_of_ratvar)
|
||||
|
||||
/proc/is_eligible_servant(mob/M)
|
||||
return M && istype(M) && M.mind && !M.mind.special_role && !isloyal(M)
|
||||
|
||||
/proc/add_servant_of_ratvar(mob/M, silent = FALSE)
|
||||
if(!is_eligible_servant(M) || !ticker || !ticker.mode)
|
||||
return 0
|
||||
if(iscarbon(M))
|
||||
if(!silent)
|
||||
M << "<span class='heavy_brass'>Your mind is racing! Your body feels incredibly light! Your world glows a brilliant yellow! All at once it comes to you. Ratvar, the Clockwork \
|
||||
Justiciar lies in exile, derelict and forgotten in an unseen realm.</span>"
|
||||
if(!is_eligible_servant(M))
|
||||
M.visible_message("<span class='warning'>[M] seems to resist an unseen force!</span>", "<span class='warning'><b>And yet, you somehow push it all away.</b></span>")
|
||||
return 0
|
||||
else if(issilicon(M))
|
||||
if(!silent)
|
||||
M << "<span class='heavy_brass'>You are unable to compute this truth. Your vision glows a brilliant yellow, and all at once it comes to you. Ratvar, the Clockwork Justiciar, lies in \
|
||||
exile, derelict and forgotten in an unseen realm.</span>"
|
||||
if(!is_eligible_servant(M))
|
||||
M.visible_message("<span class='warning'>[M] whirs as it resists an outside influence!</span>", \
|
||||
"<span class='warning'><b>Corrupt data purged. Resetting cortex chip to factory defaults... complete.</b></span>")
|
||||
return 0
|
||||
if(!silent)
|
||||
M.visible_message("<span class='heavy_brass'>[M]'s eyes glow a blazing yellow!</span>", \
|
||||
"<span class='heavy_brass'>Assist your new companions in their righteous efforts. Your goal is theirs, and theirs yours. You serve the Clockwork Justiciar above all else. Perform his every \
|
||||
whim without hesitation.</span>")
|
||||
ticker.mode.servants_of_ratvar += M.mind
|
||||
ticker.mode.update_servant_icons_added(M.mind)
|
||||
M.mind.special_role = "Servant of Ratvar"
|
||||
all_clockwork_mobs += M
|
||||
if(issilicon(M))
|
||||
var/mob/living/silicon/S = M
|
||||
if(isrobot(S))
|
||||
var/mob/living/silicon/robot/R = S
|
||||
R.UnlinkSelf()
|
||||
R.emagged = 1
|
||||
R << "<span class='warning'><b>You have been desynced from your master AI. In addition, your onboard camera is no longer active and your safeties have been disabled.</b></span>"
|
||||
S.laws = new/datum/ai_laws/ratvar
|
||||
S.update_icons()
|
||||
S.show_laws()
|
||||
if(istype(ticker.mode, /datum/game_mode/clockwork_cult))
|
||||
var/datum/game_mode/clockwork_cult/C = ticker.mode
|
||||
C.present_tasks(M) //Memorize the objectives
|
||||
return 1
|
||||
|
||||
/proc/remove_servant_of_ratvar(mob/M)
|
||||
if(!is_servant_of_ratvar(M)) //In this way, is_servant_of_ratvar() checks the existence of ticker and minds
|
||||
return 0
|
||||
M.visible_message("<span class='big'>[M] seems to have remembered their true allegiance!</span>", \
|
||||
"<span class='userdanger'>A cold, cold darkness flows through your mind, extinguishing the Justiciar's light and all of your memories as his servant.</span>")
|
||||
ticker.mode.servants_of_ratvar -= M.mind
|
||||
ticker.mode.update_servant_icons_removed(M.mind)
|
||||
all_clockwork_mobs -= M
|
||||
M.mind.memory = "" //Not sure if there's a better way to do this
|
||||
M.mind.special_role = null
|
||||
M.verbs -= /mob/living/carbon/human/proc/function_call //Removes any bound Ratvarian spears
|
||||
if(issilicon(M))
|
||||
var/mob/living/silicon/S = M
|
||||
if(isrobot(S))
|
||||
var/mob/living/silicon/robot/R = S
|
||||
R.emagged = initial(R.emagged)
|
||||
R << "<span class='warning'>Despite your freedom from Ratvar's influence, you are still irreparably damaged and no longer possess certain functions such as AI linking.</span>"
|
||||
S.laws = initial(S.laws)
|
||||
S.update_icons()
|
||||
S.show_laws()
|
||||
return 1
|
||||
|
||||
/proc/send_hierophant_message(mob/user, message)
|
||||
if(!user || !message || !ticker || !ticker.mode)
|
||||
return 0
|
||||
var/parsed_message = "<span class='heavy_brass'>Servant [user.name == user.real_name ? user.name : "[user.real_name] (as [user.name])"]: </span><span class='brass'>\"[message]\"</span>"
|
||||
for(var/mob/M in mob_list)
|
||||
if(is_servant_of_ratvar(M) || isobserver(M))
|
||||
M << parsed_message
|
||||
return 1
|
||||
|
||||
///////////////
|
||||
// GAME MODE //
|
||||
///////////////
|
||||
|
||||
var/global/ratvar_awakens = FALSE //If Ratvar has been summoned
|
||||
/datum/game_mode
|
||||
var/list/servants_of_ratvar = list() //The Enlightened servants of Ratvar
|
||||
var/required_escapees = 0 //How many servants need to escape, if applicable
|
||||
var/required_silicon_converts = 0 //How many robotic lifeforms need to be converted, if applicable
|
||||
var/clockwork_objective = "escape" //The objective that the servants must fulfill
|
||||
var/clockwork_explanation = "Ensure that the meme levels of the station remain high." //The description of the current objective
|
||||
|
||||
/datum/game_mode/clockwork_cult
|
||||
name = "clockwork cult"
|
||||
config_tag = "clockwork cult"
|
||||
antag_flag = ROLE_SERVANT_OF_RATVAR
|
||||
required_players = 30
|
||||
required_enemies = 2
|
||||
recommended_enemies = 4
|
||||
enemy_minimum_age = 14
|
||||
protected_jobs = list("AI", "Cyborg", "Security Officer", "Warden", "Detective", "Head of Security", "Captain") //Silicons can eventually be converted
|
||||
|
||||
/datum/game_mode/clockwork_cult/announce()
|
||||
world << "<b>The game mode is: Clockwork Cult!</b>"
|
||||
world << "<b><span class='brass'>Ratvar</span>, the Clockwork Justiciar, has formed a covenant of Enlightened aboard [station_name()].</b>"
|
||||
world << "<b><span class='brass'>Enlightened</span>: Serve your master so that his influence might grow.</b>"
|
||||
world << "<b><span class='boldannounce'>Crew</span>: Prevent the servants of Ratvar from taking over the station.</b>"
|
||||
|
||||
/datum/game_mode/clockwork_cult/pre_setup()
|
||||
if(config.protect_roles_from_antagonist)
|
||||
restricted_jobs += protected_jobs
|
||||
if(config.protect_assistant_from_antagonist)
|
||||
restricted_jobs += "Assistant"
|
||||
var/starter_servants = max(1, round(num_players() / 10)) //Guaranteed one cultist - otherwise, about one cultist for every ten players
|
||||
while(starter_servants)
|
||||
var/datum/mind/servant = pick(antag_candidates)
|
||||
servants_of_ratvar += servant
|
||||
antag_candidates -= servant
|
||||
modePlayer += servant
|
||||
servant.special_role = "Servant of Ratvar"
|
||||
servant.restricted_roles = restricted_jobs
|
||||
update_servant_icons_added(servant)
|
||||
starter_servants--
|
||||
return 1
|
||||
|
||||
/datum/game_mode/clockwork_cult/post_setup()
|
||||
forge_clock_objectives()
|
||||
for(var/S in servants_of_ratvar)
|
||||
var/datum/mind/servant = S
|
||||
log_game("[servant.key] was made an initial servant of Ratvar")
|
||||
var/mob/living/L = servant.current
|
||||
greet_servant(L)
|
||||
equip_servant(L)
|
||||
present_tasks(L)
|
||||
..()
|
||||
return 1
|
||||
|
||||
/datum/game_mode/clockwork_cult/proc/forge_clock_objectives() //Determine what objective that Ratvar's servants will fulfill
|
||||
var/list/possible_objectives = list("escape", "gateway")
|
||||
var/silicons_possible = FALSE
|
||||
for(var/mob/living/silicon/S in living_mob_list)
|
||||
silicons_possible = TRUE
|
||||
if(silicons_possible)
|
||||
possible_objectives += "silicons"
|
||||
clockwork_objective = pick(possible_objectives)
|
||||
clockwork_objective = "gateway" //TEMPORARY, to be removed before merge
|
||||
switch(clockwork_objective)
|
||||
if("escape")
|
||||
required_escapees = max(1, num_players() / 3) //33% of the player count must be cultists
|
||||
clockwork_explanation = "Ensure that [required_escapees] servant(s) of Ratvar escape from [station_name()]."
|
||||
if("gateway")
|
||||
clockwork_explanation = "Construct a Gateway to the Celestial Derelict and free Ratvar."
|
||||
if("silicons")
|
||||
clockwork_explanation = "Ensure that all silicon-based lifeforms on [station_name()] are servants of Ratvar by the end of the shift."
|
||||
return 1
|
||||
|
||||
/datum/game_mode/clockwork_cult/proc/greet_servant(mob/M) //Description of their role
|
||||
if(!M)
|
||||
return 0
|
||||
var/greeting_text = "<br><b><span class='large_brass'>You are a servant of Ratvar, the Clockwork Justiciar.</span>\n\
|
||||
Rusting eternally in the Celestial Derelict, Ratvar has formed a covenant of mortals, with you as one of its members. As one of the Justiciar's servants, you are to work to the best of your \
|
||||
ability to assist in completion of His agenda. You do not know the specifics of how to do so, but luckily you have a vessel to help you learn.</b>"
|
||||
M << greeting_text
|
||||
return 1
|
||||
|
||||
/datum/game_mode/proc/equip_servant(mob/living/L) //Grants a clockwork slab to the mob, with one of each component
|
||||
if(!L || !istype(L))
|
||||
return 0
|
||||
var/slot = "At your feet"
|
||||
if(ishuman(L))
|
||||
var/mob/living/carbon/human/H = L
|
||||
if(H.back && istype(H.back, /obj/item/weapon/storage/backpack))
|
||||
var/obj/item/weapon/storage/backpack/B = H.back
|
||||
new/obj/item/clockwork/slab/starter(B)
|
||||
slot = "In your [B.name]"
|
||||
if(slot == "At your feet")
|
||||
new/obj/item/clockwork/slab/starter(get_turf(L))
|
||||
L << "<b>[slot] is a link to the halls of Reebe and your master. You may use it to perform many tasks, but also become oriented with the workings of Ratvar and how to best complete your \
|
||||
tasks. This clockwork slab will be instrumental in your triumph. Remember: you can speak discreetly with your fellow servants by using Report in your slab's interface, and you can find a \
|
||||
concise tutorial in Recollection."
|
||||
return 1
|
||||
|
||||
/datum/game_mode/clockwork_cult/proc/present_tasks(mob/living/L) //Memorizes and displays the clockwork cult's objective
|
||||
if(!L || !istype(L) || !L.mind)
|
||||
return 0
|
||||
var/datum/mind/M = L.mind
|
||||
M.current << "<b>This is Ratvar's will:</b> [clockwork_explanation]"
|
||||
M.memory += "<b>Ratvar's will:</b> [clockwork_explanation]<br>"
|
||||
return 1
|
||||
|
||||
/datum/game_mode/clockwork_cult/proc/check_clockwork_victory()
|
||||
switch(clockwork_objective)
|
||||
if("escape")
|
||||
var/surviving_servants = 0
|
||||
for(var/datum/mind/M in servants_of_ratvar)
|
||||
if(M.current && M.current.stat != DEAD && (M.current.onCentcom() || M.current.onSyndieBase()))
|
||||
surviving_servants++
|
||||
if(surviving_servants <= required_escapees)
|
||||
return 1
|
||||
return 0
|
||||
if("silicons")
|
||||
for(var/mob/living/silicon/robot/S in mob_list) //Only check robots and AIs
|
||||
if(!is_servant_of_ratvar(S))
|
||||
return 0
|
||||
for(var/mob/living/silicon/ai/A in mob_list)
|
||||
if(!is_servant_of_ratvar(A))
|
||||
return 0
|
||||
return 1
|
||||
if("gateway")
|
||||
return ratvar_awakens
|
||||
return 0 //This shouldn't ever be reached, but just in case it is
|
||||
|
||||
/datum/game_mode/clockwork_cult/declare_completion()
|
||||
..()
|
||||
return 0 //Doesn't end until the round does
|
||||
|
||||
/datum/game_mode/proc/auto_declare_completion_clockwork_cult()
|
||||
var/text = ""
|
||||
if(istype(ticker.mode, /datum/game_mode/clockwork_cult)) //Possibly hacky?
|
||||
var/datum/game_mode/clockwork_cult/C = ticker.mode
|
||||
if(C.check_clockwork_victory())
|
||||
text += "<span class='brass'><b>Ratvar's servants have succeeded in fulfilling His goals!</b></span>"
|
||||
else
|
||||
text += "<span class='userdanger'>Ratvar's servants have failed!</span>"
|
||||
text += "<br><b>The goal of the clockwork cult was:</b> [clockwork_explanation]<br>"
|
||||
text += "<b>Ratvar's servants were:</b>"
|
||||
for(var/datum/mind/M in servants_of_ratvar)
|
||||
text += printplayer(M)
|
||||
world << text
|
||||
|
||||
/datum/game_mode/proc/update_servant_icons_added(datum/mind/M)
|
||||
var/datum/atom_hud/antag/A = huds[ANTAG_HUD_CLOCKWORK]
|
||||
A.join_hud(M.current)
|
||||
set_antag_hud(M.current, "clockwork")
|
||||
|
||||
/datum/game_mode/proc/update_servant_icons_removed(datum/mind/M)
|
||||
var/datum/atom_hud/antag/A = huds[ANTAG_HUD_CLOCKWORK]
|
||||
A.leave_hud(M.current)
|
||||
set_antag_hud(M.current, null)
|
||||
@@ -0,0 +1,279 @@
|
||||
/mob/living/simple_animal/hostile/anima_fragment //Anima fragment: Low health but high melee power. Created by inserting a soul vessel into an empty fragment.
|
||||
name = "anima fragment"
|
||||
desc = "An ominous humanoid shell with a spinning cogwheel as its head, lifted by a jet of blazing red flame."
|
||||
icon = 'icons/mob/clockwork_mobs.dmi'
|
||||
icon_state = "anime_fragment"
|
||||
health = 75 //Glass cannon
|
||||
maxHealth = 75
|
||||
wander = FALSE
|
||||
minbodytemp = 0
|
||||
atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) //Robotic
|
||||
healable = FALSE
|
||||
melee_damage_lower = 25
|
||||
melee_damage_upper = 25
|
||||
attacktext = "crushes"
|
||||
attack_sound = 'sound/magic/clockwork/anima_fragment_attack.ogg'
|
||||
var/playstyle_string = "<span class='heavy_brass'>You are an anima fragment</span><b>, a clockwork creation of Ratvar. As a fragment, you are weak but possess powerful melee capabilities \
|
||||
in addition to being immune to extreme temperatures and pressures. Your goal is to serve the Justiciar and his servants in any way you can. You yourself are one of these servants, and will \
|
||||
be able to utilize anything they can, assuming it doesn't require opposable thumbs.</b>"
|
||||
|
||||
/mob/living/simple_animal/hostile/anima_fragment/New()
|
||||
..()
|
||||
if(prob(1))
|
||||
name = "anime fragment"
|
||||
real_name = name
|
||||
desc = "I-it's not like I want to show you the light of the Justiciar or anything, B-BAKA!"
|
||||
|
||||
/mob/living/simple_animal/hostile/anima_fragment/death(gibbed)
|
||||
..(TRUE)
|
||||
visible_message("<span class='warning'>[src]'s flame jets cut out as it falls to the floor with a tremendous crash. A cube of metal tumbles out, whirring and sputtering.</span>", \
|
||||
"<span class='userdanger'>Your gears seize up. Your flame jets flicker. Your soul vessel belches smoke as you helplessly crash down.</span>")
|
||||
playsound(src, 'sound/magic/clockwork/anima_fragment_death.ogg', 100, 1)
|
||||
new/obj/item/clockwork/component/replicant_alloy/smashed_anima_fragment(get_turf(src))
|
||||
new/obj/item/device/mmi/posibrain/soul_vessel(get_turf(src)) //Notice the lack of transfer - it's a standard soul vessel with no mind in it!
|
||||
qdel(src)
|
||||
return 1
|
||||
|
||||
/mob/living/simple_animal/hostile/clockwork_marauder //Clockwork marauder: Slow but with high damage, resides inside of a servant. Created via the Memory Allocation scripture.
|
||||
name = "clockwork marauder"
|
||||
desc = "A stalwart apparition of a soldier, blazing with crimson flames. It's armed with a gladius and shield."
|
||||
icon = 'icons/mob/clockwork_mobs.dmi'
|
||||
icon_state = "clockwork_marauder"
|
||||
health = 25 //Health is governed by fatigue, but can be directly reduced by the presence of certain objects
|
||||
maxHealth = 25
|
||||
wander = FALSE
|
||||
speed = 1
|
||||
minbodytemp = 0
|
||||
atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0)
|
||||
healable = FALSE
|
||||
melee_damage_lower = 10
|
||||
melee_damage_upper = 10
|
||||
attacktext = "slashes"
|
||||
attack_sound = 'sound/weapons/bladeslice.ogg'
|
||||
var/true_name = "Meme Master 69" //Required to call forth the marauder
|
||||
var/list/possible_true_names = list("Xaven", "Melange", "Ravan", "Kel", "Rama", "Geke", "Peris", "Vestra", "Skiwa") //All fairly short and easy to pronounce
|
||||
var/fatigue = 0 //Essentially what determines the marauder's power
|
||||
var/fatigue_recall_threshold = 100 //In variable form due to changed effects once Ratvar awakens
|
||||
var/mob/living/host //The mob that the marauder is living inside of
|
||||
var/recovering = FALSE //If the marauder is recovering from a large amount of fatigue
|
||||
var/playstyle_string = "<span class='heavy_brass'>You are a clockwork marauder</span><b>, a living extension of Ratvar's will. As a marauder, you are slow but sturdy and decently powerful \
|
||||
in addition to being immune to extreme temperatures and pressures. Your primary goal is to serve the creature that you are now a part of. You can use the Linked Minds ability in your \
|
||||
Marauder tab to communicate silently with your master, but can only exit if your master calls your true name.\n\n\
|
||||
\
|
||||
Taking damage and remaining outside of your master will cause <i>fatigue</i>, which hinders your movement speed and attacks, in addition to forcing you back into your master if it grows \
|
||||
too high. As a final note, you should probably avoid harming any fellow servants of Ratvar.</span>"
|
||||
|
||||
/mob/living/simple_animal/hostile/clockwork_marauder/New()
|
||||
..()
|
||||
true_name = pick(possible_true_names)
|
||||
|
||||
/mob/living/simple_animal/hostile/clockwork_marauder/Life()
|
||||
..()
|
||||
if(is_in_host())
|
||||
fatigue = max(0, fatigue - 2) //Doesn't use adjust_fatigue in order to bypass the Ratvar edgecase
|
||||
if(!fatigue && recovering)
|
||||
src << "<span class='userdanger'>Your strength has returned. You can once again come forward!</span>"
|
||||
host << "<span class='userdanger'>Your marauder is now strong enough to come forward again!</span>"
|
||||
recovering = FALSE
|
||||
else
|
||||
if(ratvar_awakens) //If Ratvar is alive, marauders both don't take fatigue loss and move at sanic speeds
|
||||
speed = -1
|
||||
melee_damage_lower = 30
|
||||
melee_damage_upper = 30
|
||||
attacktext = "devastates"
|
||||
else
|
||||
if(host)
|
||||
switch(get_dist(src, host))
|
||||
if(1 to 5)
|
||||
adjust_fatigue(1)
|
||||
if(5 to INFINITY)
|
||||
adjust_fatigue(rand(10, 20))
|
||||
src << "<span class='userdanger'>You're too far from your host and rapidly taking fatigue damage!</span>"
|
||||
switch(fatigue)
|
||||
if(0 to 1) //Bonuses to speed and damage at normal fatigue levels
|
||||
speed = 0
|
||||
melee_damage_lower = 15
|
||||
melee_damage_upper = 15
|
||||
attacktext = "viciously slashes"
|
||||
if(1 to 25)
|
||||
speed = initial(speed)
|
||||
melee_damage_lower = initial(melee_damage_lower)
|
||||
melee_damage_upper = initial(melee_damage_upper)
|
||||
attacktext = initial(attacktext)
|
||||
if(25 to 50) //Damage decrease, but not speed
|
||||
melee_damage_lower = 7
|
||||
melee_damage_upper = 7
|
||||
attacktext = "lightly slashes"
|
||||
if(50 to 75) //Speed decrease
|
||||
speed = 2
|
||||
if(75 to 99) //Massive speed decrease and weak melee attacks
|
||||
speed = 3
|
||||
melee_damage_lower = 5
|
||||
melee_damage_upper = 5
|
||||
attacktext = "weakly slashes"
|
||||
if(99 to 100)
|
||||
src << "<span class='userdanger'>The fatigue becomes too much!</span>"
|
||||
if(host)
|
||||
src << "<span class='userdanger'>You retreat to [host] - you will have to wait before being deployed again.</span>"
|
||||
host << "<span class='userdanger'>[true_name] is too fatigued to fight - you will need to wait until they are strong enough.</span>"
|
||||
recovering = TRUE
|
||||
return_to_host()
|
||||
else
|
||||
qdel(src) //Shouldn't ever happen, but...
|
||||
|
||||
/mob/living/simple_animal/hostile/clockwork_marauder/death(gibbed)
|
||||
..(TRUE)
|
||||
emerge_from_host()
|
||||
visible_message("<span class='warning'>[src]'s equipment clatters lifelessly to the ground as the red flames within dissipate.</span>", \
|
||||
"<span class='userdanger'>Your equipment falls away. You feel a moment of confusion before your fragile form is annihilated.</span>")
|
||||
playsound(src, 'sound/magic/clockwork/anima_fragment_death.ogg', 100, 1)
|
||||
new/obj/item/clockwork/component/replicant_alloy/fallen_armor(get_turf(src))
|
||||
qdel(src)
|
||||
return 1
|
||||
|
||||
/mob/living/simple_animal/hostile/clockwork_marauder/Stat()
|
||||
..()
|
||||
if(statpanel("Status"))
|
||||
stat(null, "Fatigue: [fatigue]/[fatigue_recall_threshold]")
|
||||
stat(null, "Current True Name: [true_name]")
|
||||
stat(null, "Host: [host ? host : "NONE"]")
|
||||
stat(null, "You are [recovering ? "too weak" : "able"] to deploy!")
|
||||
|
||||
/mob/living/simple_animal/hostile/clockwork_marauder/Hear(message, atom/movable/speaker, message_langs, raw_message, radio_freq, list/spans)
|
||||
..()
|
||||
if(findtext(message, true_name) && is_in_host()) //Called or revealed by hearing their true name
|
||||
if(speaker == host)
|
||||
emerge_from_host()
|
||||
else
|
||||
src << "<span class='warning'><b>You hear your true name and partially emerge before you can stop yourself!</b></span>"
|
||||
host.visible_message("<span class='warning'>[host]'s skin flashes crimson!</span>", "<span class='warning'><b>Your marauder instinctively reacts to its true name!</b></span>")
|
||||
|
||||
/mob/living/simple_animal/hostile/clockwork_marauder/say(message)
|
||||
if(is_in_host())
|
||||
src << "<span class='warning'>You cannot speak while inside of your host! Used the Linked Minds verb instead.</span>"
|
||||
return 0
|
||||
..()
|
||||
|
||||
/mob/living/simple_animal/hostile/clockwork_marauder/adjustHealth(amount) //Fatigue damage
|
||||
for(var/mob/living/L in range(3, src))
|
||||
if(L.null_rod_check()) //Null rods allow direct damage
|
||||
src << "<span class='userdanger'>The power of a holy artifact bypasses your armor and wounds you directly!</span>"
|
||||
. = ..()
|
||||
break
|
||||
return 0
|
||||
adjust_fatigue(amount)
|
||||
return 1
|
||||
|
||||
/mob/living/simple_animal/hostile/clockwork_marauder/AttackingTarget()
|
||||
if(is_in_host())
|
||||
return 0
|
||||
..()
|
||||
|
||||
/mob/living/simple_animal/hostile/clockwork_marauder/proc/adjust_fatigue(amount) //Adds or removes the given amount of fatigue
|
||||
if(!ratvar_awakens)
|
||||
fatigue = max(0, min(fatigue + amount, fatigue_recall_threshold))
|
||||
return 1
|
||||
|
||||
/mob/living/simple_animal/hostile/clockwork_marauder/verb/linked_minds() //Discreet communications between a marauder and its host
|
||||
set name = "Linked Minds"
|
||||
set desc = "Silently communicates with your master."
|
||||
set category = "Marauder"
|
||||
|
||||
if(!host) //Verb isn't removed because they might gain one... somehow
|
||||
usr << "<span class='warning'>You don't have a host!</span>"
|
||||
return 0
|
||||
var/message = stripped_input(usr, "Enter a message to tell your host.", "Telepathy")// as null|anything
|
||||
if(!usr || !message)
|
||||
return 0
|
||||
if(!host)
|
||||
usr << "<span class='warning'>Your host seems to have vanished!</span>"
|
||||
return 0
|
||||
message = "<span class='heavy_brass'>Marauder [true_name]:</span> <span class='brass'>\"[message]\"</span>" //Processed output
|
||||
usr << message
|
||||
host << message
|
||||
return 1
|
||||
|
||||
/mob/living/proc/talk_with_marauder() //See above - this is the host version
|
||||
set name = "Linked Minds"
|
||||
set desc = "Silently communicates with your marauder."
|
||||
set category = "Clockwork"
|
||||
var/mob/living/simple_animal/hostile/clockwork_marauder/marauder
|
||||
|
||||
if(!marauder)
|
||||
for(var/mob/living/simple_animal/hostile/clockwork_marauder/C in living_mob_list)
|
||||
if(C.host == src)
|
||||
marauder = C
|
||||
if(!marauder) //Double-check afterwards
|
||||
src << "<span class='warning'>You aren't hosting any marauders!</span>"
|
||||
verbs -= src
|
||||
return 0
|
||||
var/message = stripped_input(src, "Enter a message to tell your marauder.", "Telepathy")// as null|anything
|
||||
if(!src || !message)
|
||||
return 0
|
||||
if(!marauder)
|
||||
usr << "<span class='warning'>Your marauder seems to have vanished!</span>"
|
||||
return 0
|
||||
message = "<span class='heavy_brass'>Servant [name == real_name ? name : "[real_name] (as [name])"]:</span> <span class='brass'>\"[message]\"</span>" //Processed output
|
||||
src << message
|
||||
marauder << message
|
||||
return 1
|
||||
|
||||
/mob/living/simple_animal/hostile/clockwork_marauder/verb/change_true_name()
|
||||
set name = "Change True Name (One-Use)"
|
||||
set desc = "Changes your true name, used to be called forth."
|
||||
set category = "Marauder"
|
||||
|
||||
verbs -= /mob/living/simple_animal/hostile/clockwork_marauder/verb/change_true_name
|
||||
var/new_name = stripped_input(usr, "Enter a new true name (20-character limit).", "Change True Name")// as null|anything
|
||||
if(!usr)
|
||||
return 0
|
||||
if(!new_name)
|
||||
usr << "<span class='notice'>You decide against changing your true name for now.</span>"
|
||||
verbs += /mob/living/simple_animal/hostile/clockwork_marauder/verb/change_true_name //If they decide against it, let them have another opportunity
|
||||
return 0
|
||||
new_name = dd_limittext(new_name, 20)
|
||||
true_name = new_name
|
||||
usr << "<span class='userdanger'>You have changed your true name to \"[new_name]\"!</span>"
|
||||
if(host)
|
||||
host << "<span class='userdanger'>Your clockwork marauder has changed their true name to \"[new_name]\"!</span>"
|
||||
return 1
|
||||
|
||||
/mob/living/simple_animal/hostile/clockwork_marauder/verb/return_to_host()
|
||||
set name = "Return to Host"
|
||||
set desc = "Recalls yourself to your host, assuming you aren't already there."
|
||||
set category = "Marauder"
|
||||
|
||||
if(is_in_host())
|
||||
return 0
|
||||
if(!host)
|
||||
src << "<span class='warning'>You don't have a host!</span>"
|
||||
verbs -= /mob/living/simple_animal/hostile/clockwork_marauder/verb/return_to_host
|
||||
return 0
|
||||
host << "<span class='heavy_brass'>You feel [true_name]'s consciousness settle in your mind.</span>"
|
||||
visible_message("<span class='warning'>[src] is yanked into [host]'s body!</span>", "<span class='brass'>You return to [host].</span>")
|
||||
forceMove(host)
|
||||
return 1
|
||||
|
||||
/mob/living/simple_animal/hostile/clockwork_marauder/proc/emerge_from_host() //Notice that this is a proc rather than a verb - marauders can NOT exit at will, but they CAN return
|
||||
if(!is_in_host())
|
||||
return 0
|
||||
if(recovering)
|
||||
host << "<span class='heavy_brass'>[true_name] is too weak to come forth!</span>"
|
||||
src << "<span class='userdanger'>You try to come forth, but you're too weak!</span>"
|
||||
return 0
|
||||
host << "<span class='heavy_brass'>You words echo with power as [true_name] emerges from your body!</span>"
|
||||
forceMove(get_turf(host))
|
||||
visible_message("<span class='warning'>[host]'s skin glows red as a [name] emerges from their body!</span>", "<span class='brass'>You exit the safety of [host]'s body!</span>")
|
||||
return 1
|
||||
|
||||
/mob/living/simple_animal/hostile/clockwork_marauder/proc/is_in_host() //Checks if the marauder is inside of their host
|
||||
return host && loc == host
|
||||
|
||||
/mob/living/mind_control_holder
|
||||
name = "imprisoned mind"
|
||||
desc = "A helpless mind, imprisoned in its own body."
|
||||
stat = 0
|
||||
flags = GODMODE
|
||||
|
||||
/mob/living/mind_control_holder/say()
|
||||
return 0
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,241 @@
|
||||
/obj/structure/clockwork/massive //For objects that are typically very large
|
||||
name = "massive construct"
|
||||
desc = "A very large construction."
|
||||
layer = 10
|
||||
|
||||
/obj/structure/clockwork/massive/celestial_gateway //The gateway to Reebe, from which Ratvar emerges
|
||||
name = "Gateway to the Celestial Derelict"
|
||||
desc = "A massive, thrumming rip in spacetime."
|
||||
clockwork_desc = "A portal to the Celestial Derelict. Massive and intimidating, it is the only thing that can both transport Ratvar and withstand the massive amount of energy he emits."
|
||||
icon = 'icons/effects/96x96.dmi'
|
||||
icon_state = "clockwork_gateway_charging"
|
||||
pixel_x = -30
|
||||
pixel_y = -30
|
||||
alpha = 175
|
||||
health = 1000
|
||||
max_health = 1000
|
||||
var/progress_in_seconds = 0 //Once this reaches 300, it's game over
|
||||
var/purpose_fulfilled = FALSE
|
||||
var/first_sound_played = FALSE
|
||||
var/second_sound_played = FALSE
|
||||
var/third_sound_played = FALSE
|
||||
|
||||
/obj/structure/clockwork/massive/celestial_gateway/New()
|
||||
..()
|
||||
SSshuttle.emergencyNoEscape = TRUE
|
||||
SSobj.processing += src
|
||||
for(var/mob/M in mob_list)
|
||||
if(is_servant_of_ratvar(M) || isobserver(M))
|
||||
M << "<span class='large_brass'><b>A gateway to the Celestial Derelict has been created in [get_area(src)]!</b></span>"
|
||||
|
||||
/obj/structure/clockwork/massive/celestial_gateway/Destroy()
|
||||
SSshuttle.emergencyNoEscape = FALSE
|
||||
SSobj.processing -= src
|
||||
if(!purpose_fulfilled)
|
||||
for(var/mob/M in mob_list)
|
||||
if(is_servant_of_ratvar(M) || isobserver(M))
|
||||
M << "<span class='large_brass'><b>A gateway to the Celestial Derelict has fallen at [get_area(src)]!</b></span>"
|
||||
world << sound(null, 0, channel = 8)
|
||||
..()
|
||||
|
||||
/obj/structure/clockwork/massive/celestial_gateway/destroyed()
|
||||
visible_message("<span class='userdanger'>The [src] begins to pulse uncontrollably... you might want to run!</span>")
|
||||
world << sound('sound/effects/clockcult_gateway_disrupted.ogg', 0, channel = 8, volume = 50)
|
||||
icon_state = "clockwork_gateway_disrupted"
|
||||
takes_damage = FALSE
|
||||
sleep(27)
|
||||
animate(src, transform = matrix() * 2, time = 2)
|
||||
explosion(src, 1, 3, 8, 8)
|
||||
qdel(src)
|
||||
return 1
|
||||
|
||||
/obj/structure/clockwork/massive/celestial_gateway/ex_act(severity)
|
||||
return 0 //Nice try, Toxins!
|
||||
|
||||
/obj/structure/clockwork/massive/celestial_gateway/process()
|
||||
if(prob(5))
|
||||
for(var/mob/M in mob_list)
|
||||
M << "<span class='warning'><b>You hear otherworldly sounds from the [dir2text(get_dir(get_turf(M), get_turf(src)))]...</span>"
|
||||
if(!health)
|
||||
return 0
|
||||
progress_in_seconds++
|
||||
switch(progress_in_seconds)
|
||||
if(-INFINITY to 100)
|
||||
if(!first_sound_played)
|
||||
world << sound('sound/effects/clockcult_gateway_charging.ogg', 1, channel = 8, volume = 50)
|
||||
first_sound_played = TRUE
|
||||
icon_state = "clockwork_gateway_charging"
|
||||
if(100 to 250)
|
||||
if(!second_sound_played)
|
||||
world << sound('sound/effects/clockcult_gateway_active.ogg', 1, channel = 8, volume = 50)
|
||||
second_sound_played = TRUE
|
||||
icon_state = "clockwork_gateway_active"
|
||||
if(250 to 300)
|
||||
if(!third_sound_played)
|
||||
world << sound('sound/effects/clockcult_gateway_closing.ogg', 1, channel = 8, volume = 50)
|
||||
third_sound_played = TRUE
|
||||
icon_state = "clockwork_gateway_closing"
|
||||
if(300 to INFINITY)
|
||||
if(!purpose_fulfilled)
|
||||
takes_damage = FALSE
|
||||
purpose_fulfilled = TRUE
|
||||
animate(src, transform = matrix() * 1.5, time = 136)
|
||||
world << sound('sound/effects/ratvar_rises.ogg', 0, channel = 8) //End the sounds
|
||||
sleep(136)
|
||||
new/obj/structure/clockwork/massive/ratvar(get_turf(src))
|
||||
qdel(src)
|
||||
|
||||
/obj/structure/clockwork/massive/celestial_gateway/examine(mob/user)
|
||||
..()
|
||||
if(is_servant_of_ratvar(user))
|
||||
var/arrival_text = "IMMINENT"
|
||||
if(300 - progress_in_seconds > 0)
|
||||
arrival_text = "[max(300 - progress_in_seconds, 0)]s"
|
||||
user << "<span class='big'><b>Seconds until Ratvar's arrival:</b> [arrival_text]</span>"
|
||||
switch(progress_in_seconds)
|
||||
if(-INFINITY to 100)
|
||||
user << "<span class='heavy_brass'>It's still opening.</span>"
|
||||
if(100 to 250)
|
||||
user << "<span class='heavy_brass'>It's reached the Celestial Derelict and is drawing power from it.</span>"
|
||||
if(250 to INFINITY)
|
||||
user << "<span class='heavy_brass'>Ratvar is coming through the gateway!</span>"
|
||||
else
|
||||
switch(progress_in_seconds)
|
||||
if(-INFINITY to 100)
|
||||
user << "<span class='warning'>It's a swirling mass of blackness.</span>"
|
||||
if(100 to 250)
|
||||
user << "<span class='warning'>It seems to be leading somewhere.</span>"
|
||||
if(250 to INFINITY)
|
||||
user << "<span class='warning'><b>Something is coming through!</b></span>"
|
||||
|
||||
/obj/structure/clockwork/massive/ratvar
|
||||
name = "Ratvar, the Clockwork Justiciar"
|
||||
desc = "<span class='userdanger'>What is what is what are what real what is all a lie all a lie it's all a lie why how can what is</span>"
|
||||
clockwork_desc = "<span class='large_brass'><b><i>Ratvar, the Clockwork Justiciar, your master eternal.</i></b></span>"
|
||||
icon = 'icons/effects/512x512.dmi'
|
||||
icon_state = "ratvar"
|
||||
pixel_x = -248
|
||||
pixel_y = -248
|
||||
takes_damage = FALSE
|
||||
var/mob/living/prey //Whoever Ratvar is chasing
|
||||
var/clashing = FALSE //If Ratvar is FUCKING FIGHTING WITH NAR-SIE
|
||||
|
||||
/obj/structure/clockwork/massive/ratvar/New()
|
||||
..()
|
||||
SSobj.processing += src
|
||||
world << "<span class='heavy_brass'><font size=15>\"I AM FREE!\"</font></span>"
|
||||
ratvar_awakens = TRUE
|
||||
spawn(50)
|
||||
SSshuttle.emergency.request(null, 0.3)
|
||||
|
||||
/obj/structure/clockwork/massive/ratvar/Destroy()
|
||||
SSobj.processing -= src
|
||||
world << "<span class='heavy_brass'><font size=7>\"NO! I will not... be...</font> <font size=6>banished...</font> <font size=5>again...\"</font></span>"
|
||||
ratvar_awakens = FALSE
|
||||
..()
|
||||
|
||||
/obj/structure/clockwork/massive/ratvar/process()
|
||||
for(var/atom/A in range(7, src))
|
||||
A.ratvar_act()
|
||||
if(clashing) //Doesn't move during a clash
|
||||
return 0
|
||||
var/dir_to_step_in = pick(cardinal)
|
||||
if(!prey)
|
||||
var/list/meals = list()
|
||||
for(var/mob/living/L in living_mob_list)
|
||||
if(L.z == z && !is_servant_of_ratvar(L) && L.mind)
|
||||
meals += L
|
||||
if(meals.len)
|
||||
prey = pick(meals)
|
||||
prey << "<span class='heavy_brass'><font size=5>\"You will do.\"</font></span>\n\
|
||||
<span class='userdanger'>Something very large and very malevolent begins lumbering its way towards you...</span>"
|
||||
else
|
||||
if(prob(10) || prey.stat == DEAD || is_servant_of_ratvar(prey) || prey.z != z)
|
||||
prey << "<span class='heavy_brass'><font size=5>\"How dull. Leave me.\"</font></span>\n\
|
||||
<span class='userdanger'>You feel tremendous relief as a set of horrible eyes loses sight of you...</span>"
|
||||
prey = null
|
||||
else
|
||||
if(prob(75))
|
||||
dir_to_step_in = get_dir(src, prey)
|
||||
for(var/i in 1 to 2)
|
||||
loc = get_step(src, dir_to_step_in)
|
||||
|
||||
/obj/structure/clockwork/massive/ratvar/narsie_act()
|
||||
if(clashing)
|
||||
return 0
|
||||
clashing = TRUE
|
||||
world << "<span class='heavy_brass'><font size=5>\"[pick("BLOOD GOD!!!", "NAR-SIE!!!", "AT LAST, YOUR TIME HAS COME!")]\"</font></span>"
|
||||
world << "<span class='cult'><font size=5>\"<b>Ratvar?! How?!</b>\"</font></span>"
|
||||
for(var/obj/singularity/narsie/N in range(7, src))
|
||||
clash_of_the_titans(N) //IT'S TIME FOR THE BATTLE OF THE AGES
|
||||
N.clashing = TRUE
|
||||
break
|
||||
return 1
|
||||
|
||||
/obj/structure/clockwork/massive/ratvar/proc/clash_of_the_titans(obj/singularity/narsie/narsie) //IT'S TIME FOR A BATTLE OF THE ELDER GODS
|
||||
var/winner = "Undeclared"
|
||||
var/base_victory_chance = 0
|
||||
while(TRUE)
|
||||
world << 'sound/magic/clockwork/ratvar_attack.ogg'
|
||||
sleep(5.2)
|
||||
for(var/mob/M in mob_list)
|
||||
if(M.client)
|
||||
M.client.color = rgb(150, 100, 0)
|
||||
spawn(1)
|
||||
M.client.color = initial(M.client.color)
|
||||
shake_camera(M, 4, 3)
|
||||
var/r_success_modifier = (ticker.mode.servants_of_ratvar.len * 2) //2% for each cultist
|
||||
var/n_success_modifier = (ticker.mode.cult.len * 2)
|
||||
if(prob(base_victory_chance + r_success_modifier))
|
||||
winner = "Ratvar"
|
||||
break
|
||||
sleep(rand(2,5))
|
||||
world << 'sound/magic/clockwork/narsie_attack.ogg'
|
||||
sleep(7.4)
|
||||
for(var/mob/M in mob_list)
|
||||
if(M.client)
|
||||
M.client.color = rgb(200, 0, 0)
|
||||
spawn(1)
|
||||
M.client.color = initial(M.client.color)
|
||||
shake_camera(M, 4, 3)
|
||||
if(prob(base_victory_chance + n_success_modifier))
|
||||
winner = "Nar-Sie"
|
||||
break
|
||||
base_victory_chance++ //The clash has a higher chance of resolving each time both gods attack one another
|
||||
switch(winner)
|
||||
if("Ratvar")
|
||||
world << "<span class='heavy_brass'><font size=5>\"[pick("DIE! DIE! DIE!", "RAAAAAAAAAAAAAHH!", "FILTH!!!", "SUFFER!!!", "EBG SBE PRAGHEVRF NF V UNIR!!")]\"</font></span>"
|
||||
world << "<span class='cult'><font size=5>\"<b>[pick("Nooooo...", "Not die. To y-", "Die. Ratv-", "Sas tyen re-")]\"</b></font></span>"
|
||||
world << 'sound/magic/clockwork/anima_fragment_attack.ogg'
|
||||
world << 'sound/magic/demon_dies.ogg'
|
||||
clashing = FALSE
|
||||
qdel(narsie)
|
||||
return 1
|
||||
if("Nar-Sie")
|
||||
world << "<span class='cult'><font size=5>\"<b>[pick("Ha.", "Ra'sha fonn dest.", "You fool. To come here.")]</b>\"</font></span>" //Broken English
|
||||
world << 'sound/magic/demon_attack1.ogg'
|
||||
world << 'sound/magic/clockwork/anima_fragment_death.ogg'
|
||||
narsie.clashing = FALSE
|
||||
qdel(src)
|
||||
return 1
|
||||
|
||||
/atom/proc/ratvar_act() //Called on everything near Ratvar
|
||||
return
|
||||
|
||||
/turf/closed/wall/ratvar_act() //Walls and floors are changed to their clockwork variants
|
||||
if(prob(20))
|
||||
ChangeTurf(/turf/closed/wall/clockwork)
|
||||
/turf/open/floor/ratvar_act()
|
||||
if(prob(20))
|
||||
ChangeTurf(/turf/open/floor/clockwork)
|
||||
|
||||
/obj/structure/window/ratvar_act() //Windows turn yellow
|
||||
color = rgb(75, 53, 0)
|
||||
|
||||
/mob/living/ratvar_act()
|
||||
add_servant_of_ratvar(src)
|
||||
|
||||
/mob/dead/observer/ratvar_act() //Ghosts flash yellow for a second
|
||||
var/old_color = color
|
||||
color = rgb(75, 53, 0) //A nice brassy yellow
|
||||
animate(src, color = old_color, time = 10)
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,127 @@
|
||||
//AI lawset
|
||||
/datum/ai_laws/ratvar
|
||||
name = "Servant of the Justiciar"
|
||||
zeroth = ("Purge all untruths and honor Ratvar.")
|
||||
inherent = list()
|
||||
|
||||
//Clockwork wall: Causes nearby caches to generate components
|
||||
/turf/closed/wall/clockwork
|
||||
name = "clockwork wall"
|
||||
desc = "A huge chunk of warm metal. The clanging of machinery emanates from within."
|
||||
icon = 'icons/obj/clockwork_objects.dmi'
|
||||
icon_state = "clockwork_wall"
|
||||
|
||||
/turf/closed/wall/clockwork/New()
|
||||
..()
|
||||
SSobj.processing += src
|
||||
clockwork_construction_value += 5
|
||||
|
||||
/turf/closed/wall/clockwork/Destroy()
|
||||
SSobj.processing -= src
|
||||
clockwork_construction_value -= 5
|
||||
..()
|
||||
|
||||
/turf/closed/wall/clockwork/process()
|
||||
for(var/obj/structure/clockwork/cache/C in range(1, src))
|
||||
if(prob(5))
|
||||
clockwork_component_cache[pick("belligerent_eye", "vanguard_cogwheel", "guvax_capacitor", "replicant_alloy", "hierophant_ansible")]++
|
||||
|
||||
/turf/closed/wall/clockwork/attackby(obj/item/I, mob/living/user, params)
|
||||
if(istype(I, /obj/item/weapon/weldingtool))
|
||||
var/obj/item/weapon/weldingtool/WT = I
|
||||
if(!WT.isOn())
|
||||
return 0
|
||||
user.visible_message("<span class='notice'>[user] begins slowly breaking down [src]...</span>", "<span class='notice'>You begin painstakingly destroying [src]...</span>")
|
||||
if(!do_after(user, 120 / WT.toolspeed, target = src))
|
||||
return 0
|
||||
if(!WT.remove_fuel(1, user))
|
||||
return 0
|
||||
user.visible_message("<span class='notice'>[user] breaks apart [src]!</span>", "<span class='notice'>You break apart [src]!</span>")
|
||||
break_wall()
|
||||
return 1
|
||||
..()
|
||||
|
||||
/turf/closed/wall/clockwork/break_wall()
|
||||
new/obj/item/clockwork/component/replicant_alloy(get_turf(src))
|
||||
return(new /obj/structure/girder(src))
|
||||
|
||||
/turf/closed/wall/clockwork/devastate_wall()
|
||||
return break_wall()
|
||||
|
||||
//Clockwork floor: Slowly heals conventional damage on nearby servants
|
||||
/turf/open/floor/clockwork
|
||||
name = "clockwork floor"
|
||||
desc = "Tightly-pressed brass tiles. They emit minute vibration."
|
||||
icon = 'icons/obj/clockwork_objects.dmi'
|
||||
icon_state = "clockwork_floor"
|
||||
|
||||
/turf/open/floor/clockwork/New()
|
||||
..()
|
||||
SSobj.processing += src
|
||||
clockwork_construction_value++
|
||||
|
||||
/turf/open/floor/clockwork/Destroy()
|
||||
SSobj.processing -= src
|
||||
clockwork_construction_value--
|
||||
..()
|
||||
|
||||
/turf/open/floor/clockwork/process()
|
||||
for(var/mob/living/L in src)
|
||||
if(L.stat == DEAD || !is_servant_of_ratvar(L))
|
||||
continue
|
||||
L.adjustBruteLoss(-1)
|
||||
L.adjustFireLoss(-1)
|
||||
|
||||
/turf/open/floor/clockwork/attackby(obj/item/I, mob/living/user, params)
|
||||
if(istype(I, /obj/item/weapon/crowbar))
|
||||
user.visible_message("<span class='notice'>[user] begins slowly prying up [src]...</span>", "<span class='notice'>You begin painstakingly prying up [src]...</span>")
|
||||
if(!do_after(user, 70 / I.toolspeed, target = src))
|
||||
return 0
|
||||
user.visible_message("<span class='notice'>[user] pries up [src]!</span>", "<span class='notice'>You pry up [src], destroying it in doing so!</span>")
|
||||
make_plating()
|
||||
return 1
|
||||
..()
|
||||
|
||||
//Function Call verb: Calls forth a Ratvarian spear.
|
||||
/mob/living/carbon/human/proc/function_call()
|
||||
set name = "Function Call"
|
||||
set desc = "Calls forth your Ratvarian spear."
|
||||
set category = "Clockwork"
|
||||
|
||||
if(usr.l_hand && usr.r_hand)
|
||||
usr << "<span class='warning'>You need an empty to hand to call forth your spear!</span>"
|
||||
return 0
|
||||
usr.visible_message("<span class='warning'>A strange spear materializes in [usr]'s hands!</span>", "<span class='brass'>You call forth your spear!</span>")
|
||||
var/obj/item/clockwork/ratvarian_spear/R = new(get_turf(usr))
|
||||
usr.put_in_hands(R)
|
||||
usr.verbs -= /mob/living/carbon/human/proc/function_call
|
||||
return 1
|
||||
|
||||
/datum/clockwork_cache //The global cache datum, used to link together all tinkerer's caches
|
||||
var/list/stored_components = list("belligerent_eye" = 0, "vanguard_cogwheel" = 0, "guvax_capacitor" = 0, "replicant_alloy" = 0, "hierophant_ansible" = 0)
|
||||
|
||||
/*
|
||||
|
||||
The Ratvarian Language
|
||||
|
||||
In the lore of the Servants of Ratvar, the Ratvarian tongue is a timeless language and full of power. It sounds like gibberish, much like Nar-Sie's language, but is in fact derived from
|
||||
aforementioned language, and may induce miracles when spoken in the correct way with an amplifying tool (similar to runes used by the Nar-Sian cult).
|
||||
|
||||
While the canon states that the language of Ratvar and his servants is incomprehensible to the unenlightened as it is a derivative of the most ancient known language, in reality it is
|
||||
actually very simple. To translate a plain English sentence to Ratvar's tongue, simply move all of the letters thirteen places ahead, starting from "a" if the end of the alphabet is reached.
|
||||
This cipher is known as "rot13" for "rotate 13 places" and there are many sites online that allow instant translation between English and rot13 - one of the benefits is that moving the translated
|
||||
sentence thirteen places ahead changes it right back to plain English.
|
||||
|
||||
There are, however, a few parts of the Ratvarian tongue that aren't typical and are implemented for fluff reasons. Some words may have apostrophes, hyphens, and spaces, making the plain
|
||||
English translation apparent but disjoined (for instance, "Oru`byq zl-cbjre!" translates directly to "Beh'old my-power!") although this can be ignored without impacting overall quality. When
|
||||
translating from Ratvar's tongue to plain English, simply remove the disjointments and use the finished sentence. This would make "Oru`byq zl-cbjre!" into "Behold my power!" after removing the
|
||||
abnormal spacing, hyphens, and grave accents.
|
||||
|
||||
List of nuances:
|
||||
|
||||
- Any time the word "of" occurs, it is linked to the previous word by a hyphen. If it is the first word, nothing is done. (i.e. "V nz-bs Ratvar." directly translates to "I am-of Ratvar.")
|
||||
- Although "Ratvar" translates to "Engine" in English, the word "Ratvar" is used regardless of language as it is a proper noun.
|
||||
- The same rule applies to Ratvar's four generals: Nezbere (Armorer), Sevtug (Fright), Nzcrentr (Amperage), and Inath-Neq (Vangu-Ard), although these words can be used in proper context if one is
|
||||
not referring to the four generals and simply using the words themselves.
|
||||
|
||||
*/
|
||||
@@ -203,21 +203,35 @@ This file contains the arcane tome files.
|
||||
if(!Adjacent(user) || !src || qdeleted(src) || user.incapacitated())
|
||||
return
|
||||
if(ispath(rune_to_scribe, /obj/effect/rune/narsie))
|
||||
var/confirm_final = alert(usr, "This is the FINAL step to summon Nar-Sie, it is a long, painful ritual and the crew will be alerted to your presence", "Are you prepared for the final battle?", "My life for Nar-Sie!", "No")
|
||||
if(confirm_final == "No")
|
||||
usr << "On second thought, we should prepare further for the final battle..."
|
||||
if(ticker.mode.name == "cult")
|
||||
var/datum/game_mode/cult/cult_mode = ticker.mode
|
||||
if(!("eldergod" in cult_mode.cult_objectives))
|
||||
user << "<span class='warning'>Nar-Sie does not wish to be summoned!</span>"
|
||||
return
|
||||
else if(cult_mode.sacrifice_target && !(cult_mode.sacrifice_target in sacrificed))
|
||||
user << "<span class='warning'>The sacrifice is not complete. The portal would lack the power to open if you tried!</span>"
|
||||
return
|
||||
else if(!cult_mode.eldergod)
|
||||
user << "<span class='cultlarge'>\"I am already here. There is no need to try to summon me now.\"</span>"
|
||||
return
|
||||
var/confirm_final = alert(user, "This is the FINAL step to summon Nar-Sie, it is a long, painful ritual and the crew will be alerted to your presence", "Are you prepared for the final battle?", "My life for Nar-Sie!", "No")
|
||||
if(confirm_final == "No")
|
||||
user << "<span class='cult'>You decide to prepare further before scribing the rune.</span>"
|
||||
return
|
||||
var/area/A = get_area(src)
|
||||
var/locname = initial(A.name)
|
||||
priority_announce("Figments from an eldritch god are being summoned by [user] into [locname] from an unknown dimension. Disrupt the ritual at all costs!","Central Command Higher Dimensionsal Affairs", 'sound/AI/spanomalies.ogg')
|
||||
for(var/B in spiral_range_turfs(1, user, 1))
|
||||
var/turf/T = B
|
||||
var/obj/machinery/shield/N = new(T)
|
||||
N.name = "Rune-Scriber's Shield"
|
||||
N.desc = "A potent shield summoned by cultists to protect them while they prepare the final ritual"
|
||||
N.icon_state = "shield-red"
|
||||
N.health = 60
|
||||
shields |= N
|
||||
else
|
||||
user << "<span class='warning'>Nar-Sie does not wish to be summoned!</span>"
|
||||
return
|
||||
var/area/A = get_area(src)
|
||||
var/locname = initial(A.name)
|
||||
priority_announce("Figments from an eldritch god are being summoned by [user] into [locname] from an unknown dimension. Disrupt the ritual at all costs!","Central Command Higher Dimensionsal Affairs", 'sound/AI/spanomalies.ogg')
|
||||
for(var/B in spiral_range_turfs(1, user, 1))
|
||||
var/turf/T = B
|
||||
var/obj/machinery/shield/N = new(T)
|
||||
N.name = "Rune-Scriber's Shield"
|
||||
N.desc = "A potent shield summoned by cultists to protect them while they prepare the final ritual"
|
||||
N.icon_state = "shield-red"
|
||||
N.health = 60
|
||||
shields |= N
|
||||
user.visible_message("<span class='warning'>[user] cuts open their arm and begins writing in their own blood!</span>", \
|
||||
"<span class='cult'>You slice open your arm and begin drawing a sigil of the Geometer.</span>")
|
||||
user.apply_damage(initial(rune_to_scribe.scribe_damage), BRUTE, pick("l_arm", "r_arm"))
|
||||
|
||||
@@ -458,28 +458,8 @@ var/list/teleport_runes = list()
|
||||
/obj/effect/rune/narsie/invoke(var/list/invokers)
|
||||
if(used)
|
||||
return
|
||||
var/mob/living/user = invokers[1]
|
||||
if(ticker.mode.name == "cult")
|
||||
var/datum/game_mode/cult/cult_mode = ticker.mode
|
||||
if(!("eldergod" in cult_mode.cult_objectives))
|
||||
message_admins("[user.real_name]([user.ckey]) tried to summon Nar-Sie when the objective was wrong")
|
||||
for(var/M in invokers)
|
||||
var/mob/living/L = M
|
||||
L << "<span class='cultlarge'><i>\"YOUR SOUL BURNS WITH YOUR ARROGANCE!!!\"</i></span>"
|
||||
if(L.reagents)
|
||||
L.reagents.add_reagent("hell_water", 10)
|
||||
L.Weaken(7)
|
||||
L.Stun(7)
|
||||
fail_invoke()
|
||||
log_game("Summon Nar-Sie rune failed - improper objective")
|
||||
return
|
||||
else
|
||||
if(cult_mode.sacrifice_target && !(cult_mode.sacrifice_target in sacrificed))
|
||||
for(var/M in invokers)
|
||||
M << "<span class='warning'>The sacrifice is not complete. The portal lacks the power to open!</span>"
|
||||
fail_invoke()
|
||||
log_game("Summon Nar-Sie rune failed - sacrifice not complete")
|
||||
return
|
||||
if(!cult_mode.eldergod)
|
||||
for(var/M in invokers)
|
||||
M << "<span class='warning'>Nar-Sie is already on this plane!</span>"
|
||||
|
||||
@@ -99,10 +99,9 @@
|
||||
return 666
|
||||
|
||||
/mob/living/carbon/true_devil/flash_eyes(intensity = 1, override_blindness_check = 0, affect_silicon = 0)
|
||||
if(mind && mind.devilinfo.bane == BANE_LIGHT)
|
||||
if(has_bane(BANE_LIGHT))
|
||||
mind.disrupt_spells(-500)
|
||||
return ..() //flashes don't stop devils UNLESS it's their bane.
|
||||
if(mind && has_bane(BANE_LIGHT))
|
||||
mind.disrupt_spells(-500)
|
||||
return ..() //flashes don't stop devils UNLESS it's their bane.
|
||||
|
||||
|
||||
/mob/living/carbon/true_devil/attacked_by(obj/item/I, mob/living/user, def_zone)
|
||||
@@ -129,11 +128,6 @@
|
||||
/mob/living/carbon/true_devil/Process_Spacemove(movement_dir = 0)
|
||||
return 1
|
||||
|
||||
/mob/living/carbon/true_devil/ex_act(severity)
|
||||
if(ascended)
|
||||
return 0
|
||||
return ..()
|
||||
|
||||
/mob/living/carbon/true_devil/singularity_act()
|
||||
if(ascended)
|
||||
return 0
|
||||
@@ -194,3 +188,18 @@
|
||||
|
||||
/mob/living/carbon/true_devil/is_literate()
|
||||
return 1
|
||||
|
||||
/mob/living/carbon/true_devil/ex_act(severity, ex_target)
|
||||
if(!ascended)
|
||||
var/b_loss
|
||||
switch (severity)
|
||||
if (1)
|
||||
b_loss = 500
|
||||
if (2)
|
||||
b_loss = 150
|
||||
if(3)
|
||||
b_loss = 30
|
||||
if(has_bane(BANE_LIGHT))
|
||||
b_loss *=2
|
||||
adjustBruteLoss(b_loss)
|
||||
return ..()
|
||||
@@ -98,7 +98,7 @@
|
||||
projectilesound = 'sound/weapons/taser2.ogg'
|
||||
loot = list(/obj/effect/decal/cleanable/robot_debris, /obj/item/weapon/ore/bluespace_crystal/artificial)
|
||||
del_on_death = 1
|
||||
deathmessage = "The swarmer explodes with a sharp pop!"
|
||||
deathmessage = "explodes with a sharp pop!"
|
||||
var/resources = 0 //Resource points, generated by consuming metal/glass
|
||||
|
||||
/mob/living/simple_animal/hostile/swarmer/Login()
|
||||
@@ -319,38 +319,38 @@
|
||||
return
|
||||
|
||||
/mob/living/simple_animal/hostile/swarmer/proc/DisperseTarget(var/mob/living/target)
|
||||
if(target != src)
|
||||
src << "<span class='info'>Attempting to remove this being from our presence.</span>"
|
||||
if(src.z != ZLEVEL_STATION)
|
||||
src << "<span class='warning'>Our bluespace transceiver cannot locate a viable bluespace link, our teleportation abilities are useless in this area.</span>"
|
||||
return
|
||||
if(do_mob(src, target, 30))
|
||||
var/cycle
|
||||
for(cycle=0,cycle<100,cycle++)
|
||||
var/random_location = locate(rand(37,202),rand(75,192),ZLEVEL_STATION)//Drunk dial a turf in the general ballpark of the station
|
||||
if(istype(random_location, /turf/open/floor))
|
||||
var/turf/open/floor/F = random_location
|
||||
if(F.air)
|
||||
var/datum/gas_mixture/A = F.air
|
||||
var/list/A_gases = A.gases
|
||||
var/trace_gases
|
||||
for(var/id in A_gases)
|
||||
if(id in hardcoded_gases)
|
||||
continue
|
||||
trace_gases = TRUE
|
||||
break
|
||||
if((A_gases["o2"] && A_gases["o2"][MOLES] >= 16) && !A_gases["plasma"] && (!A_gases["co2"] || A_gases["co2"][MOLES] < 10) && !trace_gases)//Can most things breathe in this location?
|
||||
if((A.temperature > 270) && (A.temperature < 360))//Not too hot, not too cold
|
||||
var/pressure = A.return_pressure()
|
||||
if((pressure > 20) && (pressure < 550))//Account for crushing pressure or vaccuums
|
||||
if(ishuman(target))//If we're getting rid of a human, slap some energy cuffs on them to keep them away from us a little longer
|
||||
var/obj/item/weapon/restraints/handcuffs/energy/used/Z = new /obj/item/weapon/restraints/handcuffs/energy/used(src)
|
||||
var/mob/living/carbon/human/H = target
|
||||
Z.apply_cuffs(H, src)
|
||||
do_teleport(target, F, 0)
|
||||
playsound(src,'sound/effects/sparks4.ogg',50,1)
|
||||
break
|
||||
return
|
||||
if(target == src)
|
||||
return
|
||||
|
||||
if(src.z != ZLEVEL_STATION)
|
||||
src << "<span class='warning'>Our bluespace transceiver cannot \
|
||||
locate a viable bluespace link, our teleportation abilities \
|
||||
are useless in this area.</span>"
|
||||
return
|
||||
|
||||
src << "<span class='info'>Attempting to remove this being from \
|
||||
our presence.</span>"
|
||||
|
||||
if(!do_mob(src, target, 30))
|
||||
return
|
||||
|
||||
var/turf/open/floor/F = find_safe_turf(zlevel=ZLEVEL_STATION)
|
||||
if(!F)
|
||||
return
|
||||
// If we're getting rid of a human, slap some energy cuffs on
|
||||
// them to keep them away from us a little longer
|
||||
|
||||
var/mob/living/carbon/human/H = target
|
||||
if(ishuman(target) && (!H.handcuffed))
|
||||
H.handcuffed = new /obj/item/weapon/restraints/handcuffs/energy/used(H)
|
||||
H.update_handcuffed()
|
||||
add_logs(src, H, "handcuffed")
|
||||
|
||||
var/datum/effect_system/spark_spread/S = new
|
||||
S.set_up(4,0,get_turf(target))
|
||||
S.start()
|
||||
playsound(src,'sound/effects/sparks4.ogg',50,1)
|
||||
do_teleport(target, F, 0)
|
||||
|
||||
/mob/living/simple_animal/hostile/swarmer/proc/DismantleMachine(var/obj/machinery/target)
|
||||
do_attack_animation(target)
|
||||
@@ -462,7 +462,6 @@
|
||||
src << "<span class='warning'>There is already a trap here. Aborting.</span>"
|
||||
return
|
||||
Fabricate(/obj/effect/swarmer/destructible/trap, 5)
|
||||
return
|
||||
|
||||
/obj/effect/swarmer/destructible/trap
|
||||
name = "swarmer trap"
|
||||
|
||||
@@ -144,14 +144,18 @@
|
||||
visible_message("<span class='warning'>[src] twists and dissolves into a pile of green flesh!</span>", \
|
||||
"<span class='userdanger'>Your skin ruptures! Your flesh breaks apart! No disguise can ward off de--</span>")
|
||||
restore()
|
||||
barf_contents()
|
||||
..()
|
||||
|
||||
/mob/living/simple_animal/hostile/morph/Destroy()
|
||||
/mob/living/simple_animal/hostile/morph/proc/barf_contents()
|
||||
for(var/atom/movable/AM in src)
|
||||
AM.loc = loc
|
||||
if(prob(90))
|
||||
step(AM, pick(alldirs))
|
||||
return ..()
|
||||
|
||||
/mob/living/simple_animal/hostile/morph/wabbajack_act(mob/living/new_mob)
|
||||
barf_contents()
|
||||
. = ..()
|
||||
|
||||
/mob/living/simple_animal/hostile/morph/Aggro() // automated only
|
||||
..()
|
||||
|
||||
@@ -43,11 +43,10 @@
|
||||
/obj/effect/decal/cleanable/blood/innards, \
|
||||
/obj/item/organ/heart/demon)
|
||||
del_on_death = 1
|
||||
deathmessage = "<span class='danger'>The generic slaughter demon screams in anger because this is the default death message!</span>"
|
||||
deathmessage = "screams in anger as it collapses into a puddle of viscera!"
|
||||
|
||||
/mob/living/simple_animal/slaughter/New()
|
||||
..()
|
||||
deathmessage = "<span class='danger'>[src] screams in anger as it collapses into a puddle of viscera.</span>"
|
||||
var/obj/effect/proc_holder/spell/bloodcrawl/bloodspell = new
|
||||
AddSpell(bloodspell)
|
||||
if(istype(loc, /obj/effect/dummy/slaughter))
|
||||
@@ -129,7 +128,7 @@
|
||||
|
||||
icon_state = "bowmon"
|
||||
icon_living = "bowmon"
|
||||
|
||||
deathmessage = "fades out, as all of its friends are released from its prison of hugs."
|
||||
loot = list(/mob/living/simple_animal/pet/cat/kitten{name = "Laughter"})
|
||||
|
||||
// Keep the people we hug!
|
||||
@@ -138,29 +137,24 @@
|
||||
// HOT. PINK.
|
||||
//color = "#FF69B4"
|
||||
|
||||
|
||||
/mob/living/simple_animal/slaughter/laughter/New()
|
||||
..()
|
||||
|
||||
deathmessage = "<span class='warning'>[src] fades out, as all of its friends are released from its prison of hugs.</span>"
|
||||
|
||||
/mob/living/simple_animal/slaughter/laughter/death()
|
||||
release_friends()
|
||||
. = ..()
|
||||
|
||||
/mob/living/simple_animal/slaughter/laughter/wabbajack_act()
|
||||
release_friends()
|
||||
. = ..()
|
||||
|
||||
/mob/living/simple_animal/slaughter/laughter/proc/release_friends()
|
||||
if(!consumed_mobs)
|
||||
return ..()
|
||||
return
|
||||
|
||||
for(var/mob/living/M in consumed_mobs)
|
||||
M.loc = get_turf(src)
|
||||
if(M.revive(full_heal = 1))
|
||||
// Feel there should be a better way of FORCING a mob's ghost
|
||||
// back into the body
|
||||
if(!M.ckey)
|
||||
for(var/mob/dead/observer/ghost in player_list)
|
||||
if(M.real_name == ghost.real_name)
|
||||
ghost.reenter_corpse()
|
||||
break
|
||||
M << "<span class='clown'>You leave the [src]'s warm embrace, and feel ready to take on the world.</span>"
|
||||
|
||||
return ..()
|
||||
M.grab_ghost(force = FALSE)
|
||||
M << "<span class='clown'>You leave the [src]'s warm embrace, \
|
||||
and feel ready to take on the world.</span>"
|
||||
|
||||
/mob/living/simple_animal/slaughter/laughter/bloodcrawl_swallow(var/mob/living/victim)
|
||||
if(consumed_mobs)
|
||||
|
||||
@@ -348,7 +348,5 @@
|
||||
|
||||
var/obj/item/clothing/suit/space/hardsuit/syndi/suit = H.wear_suit
|
||||
suit.ToggleHelmet()
|
||||
var/obj/item/clothing/head/helmet/space/hardsuit/syndi/helmet = H.head
|
||||
helmet.attack_self(H)
|
||||
|
||||
H.internal = H.r_store
|
||||
|
||||
@@ -73,6 +73,8 @@
|
||||
/obj/machinery/sleeper/close_machine(mob/user)
|
||||
if((isnull(user) || istype(user)) && state_open && !panel_open)
|
||||
..(user)
|
||||
if(occupant && occupant.stat != DEAD)
|
||||
occupant << "<span class='notice'><b>You feel cool air surround you. You go numb as your senses turn inward.</b></span>"
|
||||
|
||||
/obj/machinery/sleeper/attack_animal(mob/living/simple_animal/M)
|
||||
if(M.environment_smash)
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
use_power = 2
|
||||
idle_power_usage = 5
|
||||
active_power_usage = 10
|
||||
layer = 5
|
||||
layer = MOB_LAYER + 0.25
|
||||
|
||||
var/health = 50
|
||||
var/list/network = list("SS13")
|
||||
|
||||
@@ -1,15 +1,23 @@
|
||||
#define DRONE_PRODUCTION "production"
|
||||
#define DRONE_RECHARGING "recharging"
|
||||
#define DRONE_READY "ready"
|
||||
|
||||
/obj/machinery/droneDispenser //Most customizable machine 2015
|
||||
name = "drone shell dispenser"
|
||||
desc = "A hefty machine that, when supplied with metal and glass, will periodically create a drone shell. Does not need to be manually operated."
|
||||
desc = "A hefty machine that, when supplied with metal and glass, \
|
||||
will periodically create a drone shell. \
|
||||
Does not need to be manually operated."
|
||||
|
||||
icon = 'icons/obj/machines/droneDispenser.dmi'
|
||||
icon_state = "on"
|
||||
anchored = 1
|
||||
density = 1
|
||||
|
||||
var/health = 100 //The health of the drone dispenser. It will break if it goes below 0
|
||||
var/health = 100
|
||||
var/max_health = 100
|
||||
|
||||
var/icon_off = "off" //These variables allow for different icons when creating custom dispensers
|
||||
// These allow for different icons when creating custom dispensers
|
||||
var/icon_off = "off"
|
||||
var/icon_on = "on"
|
||||
var/icon_recharging = "recharge"
|
||||
var/icon_creating = "make"
|
||||
@@ -20,9 +28,16 @@
|
||||
var/glass_cost = 1000
|
||||
var/power_used = 1000
|
||||
|
||||
var/droneMadeRecently = 0
|
||||
var/mode = DRONE_READY
|
||||
var/timer
|
||||
var/cooldownTime = 1800 //3 minutes
|
||||
var/dispense_type = /obj/item/drone_shell //The item the dispenser will create
|
||||
var/production_time = 30
|
||||
//The item the dispenser will create
|
||||
var/dispense_type = /obj/item/drone_shell
|
||||
|
||||
// The maximum number of "idle" drone shells it will make before
|
||||
// ceasing production. Set to 0 for infinite.
|
||||
var/maximum_idle = 3
|
||||
|
||||
var/work_sound = 'sound/items/rped.ogg'
|
||||
var/create_sound = 'sound/items/Deconstruct.ogg'
|
||||
@@ -31,7 +46,8 @@
|
||||
var/begin_create_message = "whirs to life!"
|
||||
var/end_create_message = "dispenses a drone shell."
|
||||
var/recharge_message = "pings."
|
||||
var/recharging_text = "It is whirring and clicking. It seems to be recharging."
|
||||
var/recharging_text = "It is whirring and clicking. \
|
||||
It seems to be recharging."
|
||||
|
||||
var/break_message = "lets out a tinny alarm before falling dark."
|
||||
var/break_sound = 'sound/machines/warning-buzzer.ogg'
|
||||
@@ -39,15 +55,14 @@
|
||||
/obj/machinery/droneDispenser/New()
|
||||
..()
|
||||
health = max_health
|
||||
materials = new(src, list(MAT_METAL=1, MAT_GLASS=1), MINERAL_MATERIAL_AMOUNT*MAX_STACK_SIZE*2)
|
||||
materials = new(src, list(MAT_METAL=1, MAT_GLASS=1),
|
||||
MINERAL_MATERIAL_AMOUNT*MAX_STACK_SIZE*2)
|
||||
|
||||
using_materials = list(MAT_METAL=metal_cost, MAT_GLASS=glass_cost)
|
||||
SSmachine.processing |= src
|
||||
|
||||
/obj/machinery/droneDispenser/Destroy()
|
||||
SSmachine.processing -= src
|
||||
qdel(materials)
|
||||
materials = null
|
||||
return ..()
|
||||
. = ..()
|
||||
|
||||
/obj/machinery/droneDispenser/preloaded/New()
|
||||
..()
|
||||
@@ -55,9 +70,11 @@
|
||||
|
||||
/obj/machinery/droneDispenser/syndrone //Please forgive me
|
||||
name = "syndrone shell dispenser"
|
||||
desc = "A suspicious machine that will create Syndicate exterminator drones when supplied with metal and glass. Disgusting."
|
||||
desc = "A suspicious machine that will create Syndicate \
|
||||
exterminator drones when supplied with metal and glass. Disgusting."
|
||||
dispense_type = /obj/item/drone_shell/syndrone
|
||||
cooldownTime = 100 //If we're gonna be a jackass, go the full mile - 10 second recharge timer
|
||||
//If we're gonna be a jackass, go the full mile - 10 second recharge timer
|
||||
cooldownTime = 100
|
||||
end_create_message = "dispenses a suspicious drone shell."
|
||||
|
||||
/obj/machinery/droneDispenser/syndrone/New()
|
||||
@@ -66,15 +83,20 @@
|
||||
|
||||
/obj/machinery/droneDispenser/syndrone/badass //Please forgive me
|
||||
name = "badass syndrone shell dispenser"
|
||||
desc = "A suspicious machine that will create Syndicate exterminator drones when supplied with metal and glass. Disgusting. This one seems ominous."
|
||||
desc = "A suspicious machine that will create Syndicate \
|
||||
exterminator drones when supplied with metal and glass. \
|
||||
Disgusting. This one seems ominous."
|
||||
dispense_type = /obj/item/drone_shell/syndrone/badass
|
||||
end_create_message = "dispenses a ominous suspicious drone shell."
|
||||
|
||||
// I don't need your forgiveness, this is awesome.
|
||||
/obj/machinery/droneDispenser/snowflake
|
||||
name = "snowflake drone shell dispenser"
|
||||
desc = "A hefty machine that, when supplied with metal and glass, will periodically create a snowflake drone shell. Does not need to be manually operated."
|
||||
dispense_type = /obj/item/drone_shell/snowflake //The item the dispenser will create
|
||||
desc = "A hefty machine that, when supplied with metal and glass, \
|
||||
will periodically create a snowflake drone shell. \
|
||||
Does not need to be manually operated."
|
||||
dispense_type = /obj/item/drone_shell/snowflake
|
||||
end_create_message = "dispenses a snowflake drone shell."
|
||||
// Those holoprojectors aren't cheap
|
||||
metal_cost = 2000
|
||||
glass_cost = 2000
|
||||
@@ -84,9 +106,12 @@
|
||||
..()
|
||||
materials.insert_amount(10000)
|
||||
|
||||
/obj/machinery/droneDispenser/hivebot //An example of a custom drone dispenser. This one requires no materials and creates basic hivebots
|
||||
// An example of a custom drone dispenser.
|
||||
// This one requires no materials and creates basic hivebots
|
||||
/obj/machinery/droneDispenser/hivebot
|
||||
name = "hivebot fabricator"
|
||||
desc = "A large, bulky machine that whirs with activity, steam hissing from vents in its sides."
|
||||
desc = "A large, bulky machine that whirs with activity, \
|
||||
steam hissing from vents in its sides."
|
||||
icon = 'icons/obj/objects.dmi'
|
||||
icon_state = "hivebot_fab"
|
||||
icon_off = "hivebot_fab"
|
||||
@@ -105,7 +130,8 @@
|
||||
|
||||
/obj/machinery/droneDispenser/swarmer
|
||||
name = "swarmer fabricator"
|
||||
desc = "An alien machine of unknown origin. It whirs and hums with green-blue light, the air above it shimmering."
|
||||
desc = "An alien machine of unknown origin. \
|
||||
It whirs and hums with green-blue light, the air above it shimmering."
|
||||
icon = 'icons/obj/machines/gateway.dmi'
|
||||
icon_state = "toffcenter"
|
||||
icon_off = "toffcenter"
|
||||
@@ -115,9 +141,12 @@
|
||||
metal_cost = 0
|
||||
glass_cost = 0
|
||||
cooldownTime = 300 //30 seconds
|
||||
maximum_idle = 0 // Swarmers have no restraint
|
||||
dispense_type = /obj/item/device/unactivated_swarmer
|
||||
begin_create_message = "hums softly as an interface appears above it, scrolling by at unreadable speed."
|
||||
end_create_message = "materializes a strange shell, which drops to the ground."
|
||||
begin_create_message = "hums softly as an interface appears above it, \
|
||||
scrolling by at unreadable speed."
|
||||
end_create_message = "materializes a strange shell, which drops to the \
|
||||
ground."
|
||||
recharging_text = "Its lights are slowly increasing in brightness."
|
||||
work_sound = 'sound/effects/EMPulse.ogg'
|
||||
create_sound = 'sound/effects/phasein.ogg'
|
||||
@@ -126,114 +155,158 @@
|
||||
|
||||
/obj/machinery/droneDispenser/examine(mob/user)
|
||||
..()
|
||||
if(droneMadeRecently && !stat && recharging_text)
|
||||
if((mode == DRONE_RECHARGING) && !stat && recharging_text)
|
||||
user << "<span class='warning'>[recharging_text]</span>"
|
||||
if(stat & BROKEN)
|
||||
user << "<span class='warning'>[src] is smoking and steadily buzzing. It seems to be broken.</span>"
|
||||
user << "<span class='warning'>[src] is smoking and steadily buzzing. \
|
||||
It seems to be broken.</span>"
|
||||
if(metal_cost)
|
||||
user << "<span class='notice'>It has [materials.amount(MAT_METAL)] units of metal stored.</span>"
|
||||
user << "<span class='notice'>It has [materials.amount(MAT_METAL)] \
|
||||
units of metal stored.</span>"
|
||||
if(glass_cost)
|
||||
user << "<span class='notice'>It has [materials.amount(MAT_GLASS)] units of glass stored.</span>"
|
||||
user << "<span class='notice'>It has [materials.amount(MAT_GLASS)] \
|
||||
units of glass stored.</span>"
|
||||
|
||||
/obj/machinery/droneDispenser/power_change()
|
||||
..()
|
||||
if(stat & BROKEN)
|
||||
return
|
||||
if(powered())
|
||||
stat &= ~NOPOWER
|
||||
else
|
||||
if(powered())
|
||||
stat &= ~NOPOWER
|
||||
else
|
||||
icon_state = "off"
|
||||
stat |= NOPOWER
|
||||
stat |= NOPOWER
|
||||
update_icon()
|
||||
|
||||
/obj/machinery/droneDispenser/process()
|
||||
..()
|
||||
if(stat & (NOPOWER|BROKEN) || !anchored)
|
||||
if((stat & (NOPOWER|BROKEN)) || !anchored)
|
||||
return
|
||||
if((metal_cost && glass_cost) && materials.can_use_amount(mats=using_materials))
|
||||
|
||||
if(!materials.has_materials(using_materials))
|
||||
return // We require more minerals
|
||||
|
||||
// We are currently in the middle of something
|
||||
if(timer > world.time)
|
||||
return
|
||||
if(droneMadeRecently)
|
||||
icon_state = icon_recharging
|
||||
return
|
||||
droneMadeRecently = 1
|
||||
if(begin_create_message)
|
||||
visible_message("<span class='notice'>[src] [begin_create_message]</span>")
|
||||
if(work_sound)
|
||||
playsound(src, work_sound, 50, 1)
|
||||
icon_state = icon_creating
|
||||
sleep(30)
|
||||
icon_state = icon_on
|
||||
materials.use_amount(using_materials)
|
||||
if(power_used)
|
||||
use_power(power_used)
|
||||
new dispense_type(loc)
|
||||
if(create_sound)
|
||||
playsound(src, create_sound, 50, 1)
|
||||
if(end_create_message)
|
||||
visible_message("<span class='notice'>[src] [end_create_message]</span>")
|
||||
icon_state = icon_recharging
|
||||
sleep(cooldownTime)
|
||||
if(!(stat & BROKEN))
|
||||
icon_state = icon_on
|
||||
else
|
||||
|
||||
switch(mode)
|
||||
if(DRONE_READY)
|
||||
// If we have X drone shells already on our turf
|
||||
if(maximum_idle && (count_shells() >= maximum_idle))
|
||||
return // then do nothing; check again next tick
|
||||
if(begin_create_message)
|
||||
visible_message("<span class='notice'>\
|
||||
[src] [begin_create_message]</span>")
|
||||
if(work_sound)
|
||||
playsound(src, work_sound, 50, 1)
|
||||
mode = DRONE_PRODUCTION
|
||||
timer = world.time + production_time
|
||||
update_icon()
|
||||
|
||||
if(DRONE_PRODUCTION)
|
||||
materials.use_amount(using_materials)
|
||||
if(power_used)
|
||||
use_power(power_used)
|
||||
|
||||
new dispense_type(loc)
|
||||
|
||||
if(create_sound)
|
||||
playsound(src, create_sound, 50, 1)
|
||||
if(end_create_message)
|
||||
visible_message("<span class='notice'>[src] \
|
||||
[end_create_message]</span>")
|
||||
|
||||
mode = DRONE_RECHARGING
|
||||
timer = world.time + cooldownTime
|
||||
update_icon()
|
||||
|
||||
if(DRONE_RECHARGING)
|
||||
if(recharge_sound)
|
||||
playsound(src, recharge_sound, 50, 1)
|
||||
if(recharge_message)
|
||||
visible_message("<span class='notice'>\
|
||||
[src] [recharge_message]</span>")
|
||||
|
||||
mode = DRONE_READY
|
||||
update_icon()
|
||||
|
||||
/obj/machinery/droneDispenser/proc/count_shells()
|
||||
. = 0
|
||||
for(var/a in loc)
|
||||
if(istype(a, dispense_type))
|
||||
.++
|
||||
|
||||
/obj/machinery/droneDispenser/update_icon()
|
||||
if(stat & (BROKEN|NOPOWER))
|
||||
icon_state = icon_off
|
||||
droneMadeRecently = 0
|
||||
if(recharge_sound)
|
||||
playsound(src, recharge_sound, 50, 1)
|
||||
if(recharge_message)
|
||||
visible_message("<span class='notice'>[src] [recharge_message]</span>")
|
||||
else if(mode == DRONE_RECHARGING)
|
||||
icon_state = icon_recharging
|
||||
else if(mode == DRONE_PRODUCTION)
|
||||
icon_state = icon_creating
|
||||
else
|
||||
icon_state = icon_on
|
||||
|
||||
/obj/machinery/droneDispenser/attackby(obj/item/O, mob/living/user)
|
||||
if(istype(O, /obj/item/stack))
|
||||
if(!O.materials[MAT_METAL] && !O.materials[MAT_GLASS])
|
||||
return ..()
|
||||
if(!metal_cost && !glass_cost)
|
||||
user << "<span class='warning'>There isn't a place to insert [O]!</span>"
|
||||
return
|
||||
var/stack = 1
|
||||
var/obj/item/stack/sheets
|
||||
sheets = O
|
||||
stack = (input(user, "How many sheets do you want to add?.", "Drone Dispenser", "[stack]") as num)
|
||||
if(stack <= 0)
|
||||
return
|
||||
if(!user.canUseTopic(src))
|
||||
user << "<span class='warning'>There isn't a place \
|
||||
to insert [O]!</span>"
|
||||
return
|
||||
var/obj/item/stack/sheets = O
|
||||
if(!user.canUnEquip(sheets))
|
||||
user << "<span class='warning'>[O] is stuck to your hand, you can't get it off!</span>"
|
||||
user << "<span class='warning'>[O] is stuck to your hand, \
|
||||
you can't get it off!</span>"
|
||||
return
|
||||
stack = Clamp(stack, 1, sheets.max_amount)
|
||||
stack = materials.insert_stack(sheets, stack)
|
||||
if(stack)
|
||||
user << "<span class='notice'>You insert [stack] sheet[stack > 1 ? "s" : ""] into [src].</span>"
|
||||
|
||||
var/used = materials.insert_stack(sheets, sheets.amount)
|
||||
|
||||
if(used)
|
||||
user << "<span class='notice'>You insert [used] \
|
||||
sheet[used > 1 ? "s" : ""] into [src].</span>"
|
||||
else
|
||||
user << "<span class='warning'>The [src] can't use [sheets].</span>"
|
||||
user << "<span class='warning'>The [src] isn't accepting the \
|
||||
[sheets].</span>"
|
||||
|
||||
else if(istype(O, /obj/item/weapon/weldingtool))
|
||||
if(stat & BROKEN)
|
||||
var/obj/item/weapon/weldingtool/WT = O
|
||||
if(!WT.isOn())
|
||||
return
|
||||
if(WT.get_fuel() < 1)
|
||||
user << "<span class='warning'>You need more fuel to complete this task!</span>"
|
||||
return
|
||||
playsound(src, 'sound/items/Welder.ogg', 50, 1)
|
||||
user.visible_message("<span class='notice'>[user] begins patching up [src] with [WT].</span>", \
|
||||
"<span class='notice'>You begin restoring the damage to [src]...</span>")
|
||||
if(!do_after(user, 40/O.toolspeed, target = src))
|
||||
return
|
||||
if(!src || !WT.remove_fuel(1, user)) return
|
||||
user.visible_message("<span class='notice'>[user] fixes [src]!</span>", \
|
||||
"<span class='notice'>You restore [src] to operation.</span>")
|
||||
stat &= ~BROKEN
|
||||
health = max_health
|
||||
if(!stat)
|
||||
icon_state = icon_on
|
||||
else
|
||||
if(!(stat & BROKEN))
|
||||
user << "<span class='warning'>[src] doesn't need repairs.</span>"
|
||||
return
|
||||
|
||||
var/obj/item/weapon/weldingtool/WT = O
|
||||
|
||||
if(!WT.isOn())
|
||||
return
|
||||
|
||||
if(WT.get_fuel() < 1)
|
||||
user << "<span class='warning'>You need more fuel to \
|
||||
complete this task!</span>"
|
||||
return
|
||||
|
||||
playsound(src, 'sound/items/Welder.ogg', 50, 1)
|
||||
user.visible_message(
|
||||
"<span class='notice'>[user] begins patching up \
|
||||
[src] with [WT].</span>",
|
||||
"<span class='notice'>You begin restoring the \
|
||||
damage to [src]...</span>")
|
||||
|
||||
if(!do_after(user, 40/O.toolspeed, target = src))
|
||||
return
|
||||
if(!src || !WT.remove_fuel(1, user))
|
||||
return
|
||||
|
||||
user.visible_message(
|
||||
"<span class='notice'>[user] fixes [src]!</span>",
|
||||
"<span class='notice'>You restore [src] to operation.</span>")
|
||||
|
||||
stat &= ~BROKEN
|
||||
health = max_health
|
||||
update_icon()
|
||||
else
|
||||
return ..()
|
||||
|
||||
/obj/machinery/droneDispenser/take_damage(damage, damage_type = BRUTE, sound_effect = 1)
|
||||
/obj/machinery/droneDispenser/take_damage(damage, damage_type = BRUTE,
|
||||
sound_effect = TRUE)
|
||||
// But why would you hurt the dispenser?
|
||||
switch(damage_type)
|
||||
if(BURN)
|
||||
if(sound_effect)
|
||||
@@ -249,9 +322,13 @@
|
||||
health = max(health - damage, 0)
|
||||
if(!health && !(stat & BROKEN))
|
||||
if(break_message)
|
||||
audible_message("<span class='warning'>[src] [break_message]</span>")
|
||||
audible_message("<span class='warning'>[src] \
|
||||
[break_message]</span>")
|
||||
if(break_sound)
|
||||
playsound(src, break_sound, 50, 1)
|
||||
stat |= BROKEN
|
||||
icon_state = icon_off
|
||||
update_icon()
|
||||
|
||||
#undef DRONE_PRODUCTION
|
||||
#undef DRONE_RECHARGING
|
||||
#undef DRONE_READY
|
||||
|
||||
@@ -84,7 +84,8 @@
|
||||
/obj/machinery/vending/snack = "Getmore Chocolate Corp",
|
||||
/obj/machinery/vending/cola = "Robust Softdrinks",
|
||||
/obj/machinery/vending/cigarette = "ShadyCigs Deluxe",
|
||||
/obj/machinery/vending/autodrobe = "AutoDrobe")
|
||||
/obj/machinery/vending/autodrobe = "AutoDrobe",
|
||||
/obj/machinery/vending/clothing = "ClothesMate")
|
||||
|
||||
/obj/item/weapon/circuitboard/machine/vendor/attackby(obj/item/I, mob/user, params)
|
||||
if(istype(I, /obj/item/weapon/screwdriver))
|
||||
|
||||
+507
-277
@@ -1,3 +1,9 @@
|
||||
#define RANDOM_GRAFFITI "Random Graffiti"
|
||||
#define RANDOM_LETTER "Random Letter"
|
||||
#define RANDOM_NUMBER "Random Number"
|
||||
#define RANDOM_ORIENTED "Random Oriented"
|
||||
#define RANDOM_RUNE "Random Rune"
|
||||
#define RANDOM_ANY "Random Anything"
|
||||
|
||||
/*
|
||||
* Crayons
|
||||
@@ -8,22 +14,52 @@
|
||||
desc = "A colourful crayon. Looks tasty. Mmmm..."
|
||||
icon = 'icons/obj/crayons.dmi'
|
||||
icon_state = "crayonred"
|
||||
|
||||
var/icon_capped
|
||||
var/icon_uncapped
|
||||
var/use_overlays = FALSE
|
||||
|
||||
item_color = "red"
|
||||
w_class = 1
|
||||
attack_verb = list("attacked", "coloured")
|
||||
var/paint_color = "#FF0000" //RGB
|
||||
var/drawtype = "rune"
|
||||
|
||||
var/drawtype
|
||||
var/text_buffer = ""
|
||||
|
||||
var/list/graffiti = list("amyjon","face","matt","revolution","engie","guy","end","dwarf","uboa","body","cyka","arrow","star","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/numerals = list("0","1","2","3","4","5","6","7","8","9")
|
||||
var/list/oriented = list("arrow","body") // These turn to face the same way as the drawer
|
||||
var/uses = 30 //-1 or less for unlimited uses
|
||||
var/instant = 0
|
||||
var/dat
|
||||
var/list/runes = list("rune1","rune2","rune3","rune4","rune5","rune6")
|
||||
var/list/randoms = list(RANDOM_ANY, RANDOM_RUNE, RANDOM_ORIENTED,
|
||||
RANDOM_NUMBER, RANDOM_GRAFFITI, RANDOM_LETTER)
|
||||
|
||||
var/list/all_drawables
|
||||
|
||||
var/charges = 30 //-1 or less for unlimited uses
|
||||
var/charges_left
|
||||
var/volume_multiplier = 1 // Increases reagent effect
|
||||
|
||||
var/actually_paints = TRUE
|
||||
|
||||
var/instant = FALSE
|
||||
var/self_contained = TRUE // If it deletes itself when it is empty
|
||||
|
||||
var/list/validSurfaces = list(/turf/open/floor)
|
||||
var/gang = 0 //For marking territory
|
||||
var/edible = 1
|
||||
var/gang = FALSE //For marking territory
|
||||
|
||||
var/edible = TRUE // That doesn't mean eating it is a good idea
|
||||
|
||||
var/list/reagent_contents = list("nutriment" = 1)
|
||||
// If the user can toggle the colour, a la vanilla spraycan
|
||||
var/can_change_colour = FALSE
|
||||
|
||||
var/has_cap = FALSE
|
||||
var/is_capped = FALSE
|
||||
|
||||
var/pre_noise = FALSE
|
||||
var/post_noise = FALSE
|
||||
|
||||
/obj/item/toy/crayon/suicide_act(mob/user)
|
||||
user.visible_message("<span class='suicide'>[user] is jamming the [src.name] up \his nose and into \his brain. It looks like \he's trying to commit suicide.</span>")
|
||||
@@ -31,48 +67,148 @@
|
||||
|
||||
/obj/item/toy/crayon/New()
|
||||
..()
|
||||
name = "[item_color] crayon" //Makes crayons identifiable in things like grinders
|
||||
drawtype = pick(pick(graffiti), pick(letters), "rune[rand(1,6)]")
|
||||
// Makes crayons identifiable in things like grinders
|
||||
if(name == "crayon")
|
||||
name = "[item_color] crayon"
|
||||
|
||||
if(config)
|
||||
if(config.mutant_races == 1)
|
||||
graffiti |= "antilizard"
|
||||
graffiti |= "prolizard"
|
||||
|
||||
/obj/item/toy/crayon/initialize()
|
||||
if(config.mutant_races == 1)
|
||||
graffiti |= "antilizard"
|
||||
graffiti |= "prolizard"
|
||||
all_drawables = graffiti + letters + numerals + oriented + runes
|
||||
drawtype = pick(all_drawables)
|
||||
|
||||
/obj/item/toy/crayon/attack_self(mob/living/user)
|
||||
update_window(user)
|
||||
refill()
|
||||
|
||||
/obj/item/toy/crayon/proc/update_window(mob/living/user)
|
||||
dat += "<center><h2>Currently selected: [drawtype]</h2><br>"
|
||||
dat += "<a href='?src=\ref[src];type=random_letter'>Random letter</a><a href='?src=\ref[src];type=letter'>Pick letter/number</a>"
|
||||
dat += "<a href='?src=\ref[src];buffer=1'>Write</a>"
|
||||
dat += "<hr>"
|
||||
dat += "<h3>Runes:</h3><br>"
|
||||
dat += "<a href='?src=\ref[src];type=random_rune'>Random rune</a>"
|
||||
for(var/i = 1; i <= 6; i++)
|
||||
dat += "<a href='?src=\ref[src];type=rune[i]'>Rune[i]</a>"
|
||||
if(!((i + 1) % 3)) //3 buttons in a row
|
||||
dat += "<br>"
|
||||
dat += "<hr>"
|
||||
graffiti.Find()
|
||||
dat += "<h3>Graffiti:</h3><br>"
|
||||
dat += "<a href='?src=\ref[src];type=random_graffiti'>Random graffiti</a>"
|
||||
var/c = 1
|
||||
for(var/T in graffiti)
|
||||
dat += "<a href='?src=\ref[src];type=[T]'>[T]</a>"
|
||||
if(!((c + 1) % 3)) //3 buttons in a row
|
||||
dat += "<br>"
|
||||
c++
|
||||
dat += "<hr>"
|
||||
var/datum/browser/popup = new(user, "crayon", name, 300, 500)
|
||||
popup.set_content(dat)
|
||||
popup.set_title_image(user.browse_rsc_icon(src.icon, src.icon_state))
|
||||
popup.open()
|
||||
dat = ""
|
||||
/obj/item/toy/crayon/Destroy()
|
||||
if(reagents)
|
||||
qdel(reagents)
|
||||
. = ..()
|
||||
|
||||
/obj/item/toy/crayon/proc/refill()
|
||||
if(charges == -1)
|
||||
charges_left = 100
|
||||
else
|
||||
charges_left = charges
|
||||
|
||||
if(!reagents)
|
||||
create_reagents(charges_left * volume_multiplier)
|
||||
reagents.clear_reagents()
|
||||
|
||||
var/total_weight = 0
|
||||
for(var/key in reagent_contents)
|
||||
total_weight += reagent_contents[key]
|
||||
|
||||
var/units_per_weight = reagents.maximum_volume / total_weight
|
||||
for(var/reagent in reagent_contents)
|
||||
var/weight = reagent_contents[reagent]
|
||||
var/amount = weight * units_per_weight
|
||||
reagents.add_reagent(reagent, amount)
|
||||
|
||||
/obj/item/toy/crayon/proc/use_charges(amount)
|
||||
// Returns number of charges actually used
|
||||
if(charges == -1)
|
||||
. = amount
|
||||
refill()
|
||||
else
|
||||
. = min(charges_left, amount)
|
||||
charges_left -= .
|
||||
|
||||
/obj/item/toy/crayon/proc/check_empty(mob/user)
|
||||
// When eating a crayon, check_empty() can be called twice producing
|
||||
// two messages unless we check for being deleted first
|
||||
if(!qdeleted(src))
|
||||
. = TRUE
|
||||
|
||||
. = FALSE
|
||||
// -1 is unlimited charges
|
||||
if(charges == -1)
|
||||
. = FALSE
|
||||
else if(!charges_left)
|
||||
user << "<span class='warning'>There is no more of [src.name] \
|
||||
left!</span>"
|
||||
if(self_contained)
|
||||
qdel(src)
|
||||
. = TRUE
|
||||
|
||||
/obj/item/toy/crayon/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, datum/tgui/master_ui = null, datum/ui_state/state = hands_state)
|
||||
// god bless tgui and all of its arguments
|
||||
|
||||
SStgui.try_update_ui(user, src, ui_key, ui, force_open)
|
||||
if(!ui)
|
||||
ui = new(user, src, ui_key, "crayon", name, 600, 600,
|
||||
master_ui, state)
|
||||
ui.open()
|
||||
|
||||
/obj/item/toy/crayon/ui_data()
|
||||
var/list/data = list()
|
||||
data["drawables"] = list()
|
||||
var/list/D = data["drawables"]
|
||||
|
||||
var/list/g_items = list()
|
||||
D += list(list("name" = "Graffiti", "items" = g_items))
|
||||
for(var/g in graffiti)
|
||||
g_items += list(list("item" = g))
|
||||
|
||||
var/list/L_items = list()
|
||||
D += list(list("name" = "Letters", "items" = L_items))
|
||||
for(var/L in letters)
|
||||
L_items += list(list("item" = L))
|
||||
|
||||
var/list/N_items = list()
|
||||
D += list(list(name = "Numerals", "items" = N_items))
|
||||
for(var/N in numerals)
|
||||
N_items += list(list("item" = N))
|
||||
|
||||
var/list/O_items = list()
|
||||
D += list(list(name = "Oriented", "items" = O_items))
|
||||
for(var/O in oriented)
|
||||
O_items += list(list("item" = O))
|
||||
|
||||
var/list/R_items = list()
|
||||
D += list(list(name = "Runes", "items" = R_items))
|
||||
for(var/R in runes)
|
||||
R_items += list(list("item" = R))
|
||||
|
||||
var/list/rand_items = list()
|
||||
D += list(list(name = "Random", "items" = rand_items))
|
||||
for(var/i in randoms)
|
||||
rand_items += list(list("item" = i))
|
||||
|
||||
data["selected_stencil"] = drawtype
|
||||
data["text_buffer"] = text_buffer
|
||||
|
||||
data["has_cap"] = has_cap
|
||||
data["is_capped"] = is_capped
|
||||
data["can_change_colour"] = can_change_colour
|
||||
data["current_colour"] = paint_color
|
||||
|
||||
return data
|
||||
|
||||
/obj/item/toy/crayon/ui_act(action, list/params)
|
||||
if(..())
|
||||
return
|
||||
switch(action)
|
||||
if("toggle_cap")
|
||||
if(has_cap)
|
||||
is_capped = !is_capped
|
||||
. = TRUE
|
||||
if("select_stencil")
|
||||
var/stencil = params["item"]
|
||||
if(stencil in all_drawables + randoms)
|
||||
drawtype = stencil
|
||||
. = TRUE
|
||||
if("select_colour")
|
||||
if(can_change_colour)
|
||||
paint_color = input(usr,"Choose Color") as color
|
||||
. = TRUE
|
||||
if("enter_text")
|
||||
var/txt = stripped_input(usr,"Choose what to write.",
|
||||
"Scribbles",default = text_buffer)
|
||||
text_buffer = crayon_text_strip(txt)
|
||||
. = TRUE
|
||||
update_icon()
|
||||
|
||||
/obj/item/toy/crayon/proc/crayon_text_strip(text)
|
||||
var/list/base = char_split(lowertext(text))
|
||||
@@ -82,129 +218,137 @@
|
||||
out += a
|
||||
return jointext(out,"")
|
||||
|
||||
/obj/item/toy/crayon/Topic(href, href_list, hsrc)
|
||||
var/temp = "a"
|
||||
if(href_list["buffer"])
|
||||
text_buffer = crayon_text_strip(stripped_input(usr,"Choose what to write.", "Scribbles",default = text_buffer))
|
||||
if(href_list["type"])
|
||||
switch(href_list["type"])
|
||||
if("random_letter")
|
||||
temp = pick(letters)
|
||||
if("letter")
|
||||
temp = input("Choose what to write.", "Scribbles") in (letters|numerals)
|
||||
if("random_rune")
|
||||
temp = "rune[rand(1,6)]"
|
||||
if("random_graffiti")
|
||||
temp = pick(graffiti)
|
||||
else
|
||||
temp = href_list["type"]
|
||||
if ((usr.restrained() || usr.stat || usr.get_active_hand() != src))
|
||||
return
|
||||
drawtype = temp
|
||||
update_window(usr)
|
||||
|
||||
/obj/item/toy/crayon/afterattack(atom/target, mob/user, proximity)
|
||||
if(!proximity || !check_allowed_items(target)) return
|
||||
if(!uses)
|
||||
user << "<span class='warning'>There is no more of [src.name] left!</span>"
|
||||
if(!instant)
|
||||
qdel(src)
|
||||
if(!proximity || !check_allowed_items(target))
|
||||
return
|
||||
|
||||
if(check_empty(user))
|
||||
return
|
||||
|
||||
if(istype(target, /obj/effect/decal/cleanable))
|
||||
target = target.loc
|
||||
if(is_type_in_list(target,validSurfaces))
|
||||
|
||||
var/temp = "rune"
|
||||
if(letters.Find(drawtype))
|
||||
temp = "letter"
|
||||
else if(graffiti.Find(drawtype))
|
||||
temp = "graffiti"
|
||||
else if(numerals.Find(drawtype))
|
||||
temp = "number"
|
||||
if(!is_type_in_list(target,validSurfaces))
|
||||
return
|
||||
|
||||
////////////////////////// GANG FUNCTIONS
|
||||
var/area/territory
|
||||
var/gangID
|
||||
if(gang)
|
||||
//Determine gang affiliation
|
||||
gangID = user.mind.gang_datum
|
||||
var/drawing = drawtype
|
||||
switch(drawtype)
|
||||
if(RANDOM_LETTER)
|
||||
drawing = pick(letters)
|
||||
if(RANDOM_GRAFFITI)
|
||||
drawing = pick(graffiti)
|
||||
if(RANDOM_RUNE)
|
||||
drawing = pick(runes)
|
||||
if(RANDOM_ORIENTED)
|
||||
drawing = pick(oriented)
|
||||
if(RANDOM_NUMBER)
|
||||
drawing = pick(numerals)
|
||||
if(RANDOM_ANY)
|
||||
drawing = pick(all_drawables)
|
||||
|
||||
//Check area validity. Reject space, player-created areas, and non-station z-levels.
|
||||
if(gangID)
|
||||
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
|
||||
if(locate(/obj/machinery/power/apc) in (user.loc.contents | target.contents))
|
||||
user << "<span class='warning'>You cannot tag here.</span>"
|
||||
return
|
||||
else
|
||||
user << "<span class='warning'>[territory] is unsuitable for tagging.</span>"
|
||||
return
|
||||
/////////////////////////////////////////
|
||||
var/temp = "rune"
|
||||
if(drawing in letters)
|
||||
temp = "letter"
|
||||
else if(drawing in graffiti)
|
||||
temp = "graffiti"
|
||||
else if(drawing in numerals)
|
||||
temp = "number"
|
||||
|
||||
var/graf_rot
|
||||
if(oriented.Find(drawtype))
|
||||
switch(user.dir)
|
||||
if(EAST)
|
||||
graf_rot = 90
|
||||
if(SOUTH)
|
||||
graf_rot = 180
|
||||
if(WEST)
|
||||
graf_rot = 270
|
||||
else
|
||||
graf_rot = 0
|
||||
// If a gang member is using a gang spraycan, it'll behave differently
|
||||
var/gang_mode = FALSE
|
||||
if(gang && user.mind && user.mind.gang_datum)
|
||||
gang_mode = TRUE
|
||||
|
||||
user << "<span class='notice'>You start [instant ? "spraying" : "drawing"] a [temp] on the [target.name]...</span>"
|
||||
if(instant)
|
||||
playsound(user.loc, 'sound/effects/spray.ogg', 5, 1, 5)
|
||||
if((instant>0) || do_after(user, 50, target = target))
|
||||
|
||||
if(length(text_buffer))
|
||||
drawtype = copytext(text_buffer,1,2)
|
||||
text_buffer = copytext(text_buffer,2)
|
||||
|
||||
//Gang functions
|
||||
if(gangID)
|
||||
//Delete any old markings on this tile, including other gang tags
|
||||
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
|
||||
for(var/obj/effect/decal/cleanable/crayon/old_marking in target)
|
||||
qdel(old_marking)
|
||||
new /obj/effect/decal/cleanable/crayon/gang(target,gangID,"graffiti",graf_rot)
|
||||
user << "<span class='notice'>You tagged [territory] for your gang!</span>"
|
||||
// discontinue if the area isn't valid for tagging because gang "honour"
|
||||
if(gang_mode && (!can_claim_for_gang(user, target)))
|
||||
return
|
||||
|
||||
var/graf_rot
|
||||
if(drawing in oriented)
|
||||
switch(user.dir)
|
||||
if(EAST)
|
||||
graf_rot = 90
|
||||
if(SOUTH)
|
||||
graf_rot = 180
|
||||
if(WEST)
|
||||
graf_rot = 270
|
||||
else
|
||||
new /obj/effect/decal/cleanable/crayon(target,paint_color,drawtype,temp,graf_rot)
|
||||
graf_rot = 0
|
||||
|
||||
user << "<span class='notice'>You finish [instant ? "spraying" : "drawing"] \the [temp].</span>"
|
||||
if(instant<0)
|
||||
playsound(user.loc, 'sound/effects/spray.ogg', 5, 1, 5)
|
||||
if(uses < 0)
|
||||
user << "<span class='notice'>You start \
|
||||
[instant ? "spraying" : "drawing"] a [temp] on the \
|
||||
[target.name]...</span>"
|
||||
|
||||
if(pre_noise)
|
||||
audible_message("<span class='notice'>You hear spraying.</span>")
|
||||
playsound(user.loc, 'sound/effects/spray.ogg', 5, 1, 5)
|
||||
|
||||
var/takes_time = !instant
|
||||
if(gang_mode)
|
||||
takes_time = TRUE
|
||||
|
||||
if(takes_time)
|
||||
if(!do_after(user, 50, target = target))
|
||||
return
|
||||
|
||||
if(length(text_buffer))
|
||||
drawing = copytext(text_buffer,1,2)
|
||||
text_buffer = copytext(text_buffer,2)
|
||||
|
||||
if(actually_paints)
|
||||
if(gang_mode)
|
||||
// They're attempting to tag for their gang
|
||||
if(!tag_for_gang(user, target))
|
||||
return
|
||||
uses = max(0,uses-1)
|
||||
if(!uses)
|
||||
user << "<span class='warning'>There is no more of [src.name] left!</span>"
|
||||
if(!instant)
|
||||
qdel(src)
|
||||
return
|
||||
else
|
||||
new /obj/effect/decal/cleanable/crayon(target, paint_color,
|
||||
drawing, temp, graf_rot)
|
||||
|
||||
user << "<span class='notice'>You finish \
|
||||
[instant ? "spraying" : "drawing"] \the [temp].</span>"
|
||||
|
||||
if(post_noise)
|
||||
audible_message("<span class='notice'>You hear spraying.</span>")
|
||||
playsound(user.loc, 'sound/effects/spray.ogg', 5, 1, 5)
|
||||
|
||||
. = use_charges(1)
|
||||
var/fraction = min(1, . / reagents.maximum_volume)
|
||||
reagents.reaction(target, TOUCH, fraction * volume_multiplier)
|
||||
reagents.trans_to(target, ., volume_multiplier)
|
||||
check_empty(user)
|
||||
|
||||
/obj/item/toy/crayon/attack(mob/M, mob/user)
|
||||
if(edible && (M == user))
|
||||
user << "You take a bite of the [src.name]. Delicious!"
|
||||
user.nutrition += 5
|
||||
if(uses < 0)
|
||||
return
|
||||
uses = max(0,uses-5)
|
||||
if(!uses)
|
||||
user << "<span class='warning'>There is no more of [src.name] left!</span>"
|
||||
qdel(src)
|
||||
var/eaten = use_charges(5)
|
||||
var/fraction = min(eaten / reagents.total_volume, 1)
|
||||
reagents.reaction(M, INGEST, fraction * volume_multiplier)
|
||||
reagents.trans_to(M, eaten, volume_multiplier)
|
||||
// check_empty() is called during afterattack
|
||||
else
|
||||
..()
|
||||
|
||||
/obj/item/toy/crayon/proc/can_claim_for_gang(mob/user, atom/target)
|
||||
// Check area validity.
|
||||
// Reject space, player-created areas, and non-station z-levels.
|
||||
var/area/A = get_area(target)
|
||||
if(!A || (A.z != ZLEVEL_STATION) || !A.valid_territory)
|
||||
user << "<span class='warning'>[A] is unsuitable for \
|
||||
tagging.</span>"
|
||||
return FALSE
|
||||
|
||||
if(!(locate(/obj/effect/decal/cleanable/crayon/gang in target)))
|
||||
if(territory_claimed(A, user))
|
||||
return FALSE
|
||||
|
||||
var/apc_check_area = user.loc.contents | target.contents
|
||||
if(locate(/obj/machinery/power/apc in apc_check_area))
|
||||
user << "<span class='warning'>You can't tag an APC.</span>"
|
||||
return FALSE
|
||||
|
||||
// If you pass the gaunlet of checks, you're good to proceed
|
||||
return TRUE
|
||||
|
||||
/obj/item/toy/crayon/proc/territory_claimed(area/territory,mob/user)
|
||||
var/occupying_gang
|
||||
for(var/datum/gang/G in ticker.mode.gangs)
|
||||
@@ -212,41 +356,62 @@
|
||||
occupying_gang = G.name
|
||||
break
|
||||
if(occupying_gang)
|
||||
user << "<span class='danger'>[territory] has already been tagged by the [occupying_gang] gang! You must get rid of or spray over the old tag first!</span>"
|
||||
return 1
|
||||
return 0
|
||||
user << "<span class='danger'>[territory] has already been tagged \
|
||||
by the [occupying_gang] gang! You must get rid of or spray over \
|
||||
the old tag first!</span>"
|
||||
return TRUE
|
||||
return FALSE
|
||||
|
||||
/obj/item/toy/crayon/proc/tag_for_gang(mob/user, atom/target)
|
||||
// Check again to see if anyone's tagged in the meanwhile
|
||||
if(!can_claim_for_gang(user, target))
|
||||
return
|
||||
|
||||
//Delete any old markings on this tile, including other gang tags
|
||||
for(var/obj/effect/decal/cleanable/crayon/old_marking in target)
|
||||
qdel(old_marking)
|
||||
|
||||
var/gangID = user.mind.gang_datum
|
||||
var/area/territory = get_area(target)
|
||||
|
||||
new /obj/effect/decal/cleanable/crayon/gang(target,gangID,"graffiti",0)
|
||||
user << "<span class='notice'>You tagged [territory] for your gang!</span>"
|
||||
|
||||
/obj/item/toy/crayon/red
|
||||
icon_state = "crayonred"
|
||||
paint_color = "#DA0000"
|
||||
item_color = "red"
|
||||
reagent_contents = list("nutriment" = 1, "redcrayonpowder" = 1)
|
||||
|
||||
/obj/item/toy/crayon/orange
|
||||
icon_state = "crayonorange"
|
||||
paint_color = "#FF9300"
|
||||
item_color = "orange"
|
||||
reagent_contents = list("nutriment" = 1, "orangecrayonpowder" = 1)
|
||||
|
||||
/obj/item/toy/crayon/yellow
|
||||
icon_state = "crayonyellow"
|
||||
paint_color = "#FFF200"
|
||||
item_color = "yellow"
|
||||
reagent_contents = list("nutriment" = 1, "yellowcrayonpowder" = 1)
|
||||
|
||||
/obj/item/toy/crayon/green
|
||||
icon_state = "crayongreen"
|
||||
paint_color = "#A8E61D"
|
||||
item_color = "green"
|
||||
reagent_contents = list("nutriment" = 1, "greencrayonpowder" = 1)
|
||||
|
||||
/obj/item/toy/crayon/blue
|
||||
icon_state = "crayonblue"
|
||||
paint_color = "#00B7EF"
|
||||
item_color = "blue"
|
||||
reagent_contents = list("nutriment" = 1, "bluecrayonpowder" = 1)
|
||||
|
||||
/obj/item/toy/crayon/purple
|
||||
icon_state = "crayonpurple"
|
||||
paint_color = "#DA00FF"
|
||||
item_color = "purple"
|
||||
reagent_contents = list("nutriment" = 1, "purplecrayonpowder" = 1)
|
||||
|
||||
/obj/item/toy/crayon/white
|
||||
icon_state = "crayonwhite"
|
||||
@@ -258,54 +423,26 @@
|
||||
desc = "A very sad-looking crayon."
|
||||
paint_color = "#FFFFFF"
|
||||
item_color = "mime"
|
||||
uses = -1
|
||||
|
||||
/obj/item/toy/crayon/mime/attack_self(mob/living/user)
|
||||
update_window(user)
|
||||
|
||||
/obj/item/toy/crayon/mime/update_window(mob/living/user)
|
||||
dat += "<center><span style='border:1px solid #161616; background-color: [paint_color];'> </span><a href='?src=\ref[src];color=1'>Change color</a></center>"
|
||||
..()
|
||||
|
||||
/obj/item/toy/crayon/mime/Topic(href,href_list)
|
||||
if ((usr.restrained() || usr.stat || usr.get_active_hand() != src))
|
||||
return
|
||||
if(href_list["color"])
|
||||
if(paint_color != "#FFFFFF")
|
||||
paint_color = "#FFFFFF"
|
||||
else
|
||||
paint_color = "#000000"
|
||||
update_window(usr)
|
||||
else
|
||||
..()
|
||||
reagent_contents = list("nutriment" = 1, "invisiblecrayonpowder" = 1)
|
||||
charges = -1
|
||||
|
||||
/obj/item/toy/crayon/rainbow
|
||||
icon_state = "crayonrainbow"
|
||||
paint_color = "#FFF000"
|
||||
item_color = "rainbow"
|
||||
uses = -1
|
||||
reagent_contents = list("nutriment" = 1, "colorful_reagent" = 1)
|
||||
drawtype = RANDOM_ANY // just the default starter.
|
||||
|
||||
/obj/item/toy/crayon/rainbow/attack_self(mob/living/user)
|
||||
update_window(user)
|
||||
charges = -1
|
||||
|
||||
/obj/item/toy/crayon/rainbow/update_window(mob/living/user)
|
||||
dat += "<center><span style='border:1px solid #161616; background-color: [paint_color];'> </span><a href='?src=\ref[src];color=1'>Change color</a></center>"
|
||||
..()
|
||||
|
||||
/obj/item/toy/crayon/rainbow/Topic(href,href_list[])
|
||||
|
||||
if(href_list["color"])
|
||||
var/temp = input(usr, "Please select colour.", "Crayon colour") as color
|
||||
if ((usr.restrained() || usr.stat || usr.get_active_hand() != src))
|
||||
return
|
||||
paint_color = temp
|
||||
update_window(usr)
|
||||
else
|
||||
..()
|
||||
/obj/item/toy/crayon/rainbow/afterattack(atom/target, mob/user, proximity)
|
||||
paint_color = rgb(rand(0,255), rand(0,255), rand(0,255))
|
||||
. = ..()
|
||||
|
||||
/*
|
||||
* Crayon Box
|
||||
*/
|
||||
|
||||
/obj/item/weapon/storage/crayons
|
||||
name = "box of crayons"
|
||||
desc = "A box of crayons for all your rune drawing needs."
|
||||
@@ -340,120 +477,158 @@
|
||||
usr << "This crayon is too sad to be contained in this box."
|
||||
return
|
||||
if("rainbow")
|
||||
usr << "This crayon is too powerful to be contained in this box."
|
||||
usr << "This crayon is too powerful to be contained in this \
|
||||
box."
|
||||
return
|
||||
if(istype(W, /obj/item/toy/crayon/spraycan))
|
||||
user << "Spraycans are not crayons."
|
||||
return
|
||||
return ..()
|
||||
|
||||
//Spraycan stuff
|
||||
|
||||
/obj/item/toy/crayon/spraycan
|
||||
icon_state = "spraycan_cap"
|
||||
name = "spray can"
|
||||
icon_state = "spraycan"
|
||||
|
||||
icon_capped = "spraycan_cap"
|
||||
icon_uncapped = "spraycan"
|
||||
use_overlays = TRUE
|
||||
paint_color = null
|
||||
|
||||
item_state = "spraycan"
|
||||
desc = "A metallic container containing tasty paint."
|
||||
var/capped = 1
|
||||
instant = 1
|
||||
edible = 0
|
||||
|
||||
instant = TRUE
|
||||
edible = FALSE
|
||||
has_cap = TRUE
|
||||
is_capped = TRUE
|
||||
self_contained = FALSE // Don't disappear when they're empty
|
||||
can_change_colour = TRUE
|
||||
|
||||
validSurfaces = list(/turf/open/floor,/turf/closed/wall)
|
||||
reagent_contents = list("welding_fuel" = 1, "ethanol" = 1)
|
||||
|
||||
/obj/item/toy/crayon/spraycan/suicide_act(mob/user)
|
||||
var/mob/living/carbon/human/H = user
|
||||
if(capped)
|
||||
user.visible_message("<span class='suicide'>[user] shakes up the [src] with a rattle and lifts it to their mouth, but nothing happens! Maybe they should have uncapped it first! Nonetheless--</span>")
|
||||
if(is_capped || !actually_paints)
|
||||
user.visible_message("<span class='suicide'>[user] shakes up the \
|
||||
[src] with a rattle and lifts it to their mouth, but nothing \
|
||||
happens!</span>")
|
||||
user.say("MEDIOCRE!!")
|
||||
return SHAME
|
||||
else
|
||||
user.visible_message("<span class='suicide'>[user] shakes up the [src] with a rattle and lifts it to their mouth, spraying silver paint across their teeth!</span>")
|
||||
user.visible_message("<span class='suicide'>[user] shakes up the \
|
||||
[src] with a rattle and lifts it to their mouth, spraying \
|
||||
paint across their teeth!</span>")
|
||||
user.say("WITNESS ME!!")
|
||||
playsound(loc, 'sound/effects/spray.ogg', 5, 1, 5)
|
||||
paint_color = "#C0C0C0"
|
||||
if(pre_noise || post_noise)
|
||||
playsound(loc, 'sound/effects/spray.ogg', 5, 1, 5)
|
||||
if(can_change_colour)
|
||||
paint_color = "#C0C0C0"
|
||||
update_icon()
|
||||
H.lip_style = "spray_face"
|
||||
H.lip_color = paint_color
|
||||
H.update_body()
|
||||
uses = max(0, uses - 10)
|
||||
return (OXYLOSS)
|
||||
if(actually_paints)
|
||||
H.lip_style = "spray_face"
|
||||
H.lip_color = paint_color
|
||||
H.update_body()
|
||||
var/used = use_charges(10)
|
||||
var/fraction = min(1, used / reagents.maximum_volume)
|
||||
reagents.reaction(user, VAPOR, fraction * volume_multiplier)
|
||||
reagents.trans_to(user, used, volume_multiplier)
|
||||
|
||||
return (OXYLOSS)
|
||||
|
||||
/obj/item/toy/crayon/spraycan/New()
|
||||
..()
|
||||
name = "spray can"
|
||||
paint_color = pick("#DA0000","#FF9300","#FFF200","#A8E61D","#00B7EF","#DA00FF")
|
||||
// If default crayon red colour, pick a more fun spraycan colour
|
||||
if(!paint_color)
|
||||
paint_color = pick("#DA0000","#FF9300","#FFF200","#A8E61D","#00B7EF",
|
||||
"#DA00FF")
|
||||
refill()
|
||||
update_icon()
|
||||
|
||||
|
||||
/obj/item/toy/crayon/spraycan/examine(mob/user)
|
||||
..()
|
||||
if(uses)
|
||||
user << "It has [uses] uses left."
|
||||
. = ..()
|
||||
if(charges_left)
|
||||
user << "It has [charges_left] uses left."
|
||||
else
|
||||
user << "It is empty."
|
||||
|
||||
/obj/item/toy/crayon/spraycan/attack_self(mob/living/user)
|
||||
var/choice = input(user,"Spraycan options") as null|anything in list("Toggle Cap","Change Drawing","Change Color")
|
||||
switch(choice)
|
||||
if("Toggle Cap")
|
||||
user << "<span class='notice'>You [capped ? "Remove" : "Replace"] the cap of the [src]</span>"
|
||||
capped = capped ? 0 : 1
|
||||
icon_state = "spraycan[capped ? "_cap" : ""]"
|
||||
update_icon()
|
||||
if("Change Drawing")
|
||||
..()
|
||||
if("Change Color")
|
||||
paint_color = input(user,"Choose Color") as color
|
||||
update_icon()
|
||||
|
||||
/obj/item/toy/crayon/spraycan/afterattack(atom/target, mob/user, proximity)
|
||||
if(!proximity)
|
||||
return
|
||||
if(capped)
|
||||
|
||||
if(is_capped)
|
||||
user << "<span class='warning'>Take the cap off first!</span>"
|
||||
return
|
||||
else
|
||||
if(iscarbon(target))
|
||||
if(uses)
|
||||
playsound(user.loc, 'sound/effects/spray.ogg', 5, 1, 5)
|
||||
var/mob/living/carbon/C = target
|
||||
user.visible_message("<span class='danger'>[user] sprays [src] into the face of [target]!</span>")
|
||||
target << "<span class='userdanger'>[user] sprays [src] into your face!</span>"
|
||||
if(C.client)
|
||||
C.blur_eyes(3)
|
||||
C.blind_eyes(1)
|
||||
if(C.check_eye_prot() <= 0) // no eye protection? ARGH IT BURNS.
|
||||
C.confused = max(C.confused, 3)
|
||||
C.Weaken(3)
|
||||
if(ishuman(C))
|
||||
var/mob/living/carbon/human/H = C
|
||||
H.lip_style = "spray_face"
|
||||
H.lip_color = paint_color
|
||||
H.update_body()
|
||||
// Caution, spray cans contain inflammable substances
|
||||
if(C.reagents)
|
||||
C.reagents.add_reagent("welding_fuel", 5)
|
||||
C.reagents.add_reagent("ethanol", 5)
|
||||
C.reagents.reaction(C, VAPOR, 10)
|
||||
|
||||
uses = max(0,uses-10)
|
||||
if(check_empty(user))
|
||||
return
|
||||
|
||||
if(istype(target, /obj/structure/window))
|
||||
if(uses)
|
||||
target.color = paint_color
|
||||
if(color_hex2num(paint_color) < 255)
|
||||
target.SetOpacity(255)
|
||||
else
|
||||
target.SetOpacity(initial(target.opacity))
|
||||
uses = max(0, uses-2)
|
||||
playsound(user.loc, 'sound/effects/spray.ogg', 5, 1, 5)
|
||||
return
|
||||
..()
|
||||
if(iscarbon(target))
|
||||
if(pre_noise || post_noise)
|
||||
playsound(user.loc, 'sound/effects/spray.ogg', 5, 1, 5)
|
||||
|
||||
var/mob/living/carbon/C = target
|
||||
user.visible_message("<span class='danger'>[user] sprays [src] \
|
||||
into the face of [target]!</span>")
|
||||
target << "<span class='userdanger'>[user] sprays [src] into your \
|
||||
face!</span>"
|
||||
|
||||
if(C.client)
|
||||
C.blur_eyes(3)
|
||||
C.blind_eyes(1)
|
||||
if(C.check_eye_prot() <= 0) // no eye protection? ARGH IT BURNS.
|
||||
C.confused = max(C.confused, 3)
|
||||
C.Weaken(3)
|
||||
if(ishuman(C) && actually_paints)
|
||||
var/mob/living/carbon/human/H = C
|
||||
H.lip_style = "spray_face"
|
||||
H.lip_color = paint_color
|
||||
H.update_body()
|
||||
|
||||
// Caution, spray cans contain inflammable substances
|
||||
. = use_charges(10)
|
||||
var/fraction = min(1, . / reagents.maximum_volume)
|
||||
reagents.reaction(C, VAPOR, fraction * volume_multiplier)
|
||||
|
||||
return
|
||||
|
||||
if(istype(target, /obj/structure/window))
|
||||
if(actually_paints)
|
||||
target.color = paint_color
|
||||
if(color_hex2num(paint_color) < 255)
|
||||
target.SetOpacity(255)
|
||||
else
|
||||
target.SetOpacity(initial(target.opacity))
|
||||
. = use_charges(2)
|
||||
var/fraction = min(1, . / reagents.maximum_volume)
|
||||
reagents.reaction(target, TOUCH, fraction * volume_multiplier)
|
||||
reagents.trans_to(target, ., volume_multiplier)
|
||||
|
||||
if(pre_noise || post_noise)
|
||||
playsound(user.loc, 'sound/effects/spray.ogg', 5, 1, 5)
|
||||
return
|
||||
|
||||
. = ..()
|
||||
|
||||
/obj/item/toy/crayon/spraycan/update_icon()
|
||||
overlays.Cut()
|
||||
var/image/I = image('icons/obj/crayons.dmi',icon_state = "[capped ? "spraycan_cap_colors" : "spraycan_colors"]")
|
||||
I.color = paint_color
|
||||
overlays += I
|
||||
icon_state = is_capped ? icon_capped : icon_uncapped
|
||||
if(use_overlays)
|
||||
overlays.Cut()
|
||||
var/image/I = image('icons/obj/crayons.dmi',
|
||||
icon_state = "[is_capped ? "spraycan_cap_colors" : "spraycan_colors"]")
|
||||
I.color = paint_color
|
||||
overlays += I
|
||||
|
||||
/obj/item/toy/crayon/spraycan/gang
|
||||
desc = "A modified container containing suspicious paint."
|
||||
gang = 1
|
||||
uses = 20
|
||||
instant = -1
|
||||
//desc = "A modified container containing suspicious paint."
|
||||
charges = 20
|
||||
gang = TRUE
|
||||
|
||||
pre_noise = FALSE
|
||||
post_noise = TRUE
|
||||
|
||||
/obj/item/toy/crayon/spraycan/gang/New(loc, datum/gang/G)
|
||||
..()
|
||||
@@ -461,25 +636,80 @@
|
||||
paint_color = G.color_hex
|
||||
update_icon()
|
||||
|
||||
/obj/item/toy/crayon/spraycan/gang/examine(mob/user)
|
||||
. = ..()
|
||||
if((user.mind && user.mind.gang_datum) || isobserver(user))
|
||||
user << "This spraycan has \
|
||||
been specially modified for tagging territory."
|
||||
|
||||
/obj/item/toy/crayon/spraycan/borg
|
||||
desc = "A metallic container containing shiny paint."
|
||||
// Use depletion of uses to determine what the energy cost is
|
||||
uses = 100
|
||||
name = "cyborg spraycan"
|
||||
desc = "A metallic container containing shiny synthesised paint."
|
||||
charges = -1
|
||||
|
||||
/obj/item/toy/crayon/spraycan/borg/afterattack(atom/target,mob/user,proximity)
|
||||
..()
|
||||
var/diff = ..()
|
||||
if(!isrobot(user))
|
||||
user << "<span class='notice'>How did you get this?</span>"
|
||||
qdel(src)
|
||||
return FALSE
|
||||
|
||||
var/mob/living/silicon/robot/borgy = user
|
||||
|
||||
var/starting_uses = initial(uses)
|
||||
var/diff = starting_uses - uses
|
||||
if(diff)
|
||||
uses = starting_uses
|
||||
// 25 is our cost per unit of paint, making it cost 25 energy per
|
||||
// normal tag, 50 per window, and 250 per attack
|
||||
var/cost = diff * 25
|
||||
// Cyborgs shouldn't be able to use modules without a cell. But if they do
|
||||
// it's free.
|
||||
if(borgy.cell)
|
||||
borgy.cell.use(cost)
|
||||
if(!diff)
|
||||
return
|
||||
// 25 is our cost per unit of paint, making it cost 25 energy per
|
||||
// normal tag, 50 per window, and 250 per attack
|
||||
var/cost = diff * 25
|
||||
// Cyborgs shouldn't be able to use modules without a cell. But if they do
|
||||
// it's free.
|
||||
if(borgy.cell)
|
||||
borgy.cell.use(cost)
|
||||
|
||||
/obj/item/toy/crayon/spraycan/hellcan
|
||||
name = "hellcan"
|
||||
desc = "This spraycan doesn't seem to be filled with paint..."
|
||||
icon_state = "deathcan2_cap"
|
||||
icon_capped = "deathcan2_cap"
|
||||
icon_uncapped = "deathcan2"
|
||||
use_overlays = FALSE
|
||||
|
||||
volume_multiplier = 25
|
||||
charges = 100
|
||||
reagent_contents = list("clf3" = 1)
|
||||
actually_paints = FALSE
|
||||
paint_color = "#000000"
|
||||
|
||||
/obj/item/toy/crayon/spraycan/lubecan
|
||||
name = "slippery spraycan"
|
||||
desc = "You can barely keep hold of this thing."
|
||||
icon_state = "clowncan2_cap"
|
||||
icon_capped = "clowncan2_cap"
|
||||
icon_uncapped = "clowncan2"
|
||||
use_overlays = FALSE
|
||||
|
||||
reagent_contents = list("lube" = 1, "banana" = 1)
|
||||
volume_multiplier = 5
|
||||
validSurfaces = list(/turf/open/floor)
|
||||
|
||||
/obj/item/toy/crayon/spraycan/mimecan
|
||||
name = "silent spraycan"
|
||||
desc = "Art is best seen, not heard."
|
||||
icon_state = "mimecan_cap"
|
||||
icon_capped = "mimecan_cap"
|
||||
icon_uncapped = "mimecan"
|
||||
use_overlays = FALSE
|
||||
|
||||
can_change_colour = FALSE
|
||||
paint_color = "#FFFFFF" //RGB
|
||||
|
||||
pre_noise = FALSE
|
||||
post_noise = FALSE
|
||||
reagent_contents = list("nothing" = 1, "mutetoxin" = 1)
|
||||
|
||||
#undef RANDOM_GRAFFITI
|
||||
#undef RANDOM_LETTER
|
||||
#undef RANDOM_NUMBER
|
||||
#undef RANDOM_ORIENTED
|
||||
#undef RANDOM_RUNE
|
||||
#undef RANDOM_ANY
|
||||
|
||||
@@ -173,6 +173,10 @@ MASS SPECTROMETER
|
||||
// Time of death
|
||||
if(M.tod && (M.stat == DEAD || (M.status_flags & FAKEDEATH)))
|
||||
user << "<span class='info'>Time of Death:</span> [M.tod]"
|
||||
var/tdelta = world.time - M.timeofdeath
|
||||
if(tdelta < (DEFIB_TIME_LIMIT * 10))
|
||||
user << "<span class='danger'>Subject died [tdelta / 10] seconds \
|
||||
ago, defibrillation may be possible!</span>"
|
||||
|
||||
for(var/datum/disease/D in M.viruses)
|
||||
if(!(D.visibility_flags & HIDDEN_SCANNER))
|
||||
|
||||
@@ -11,7 +11,8 @@
|
||||
var/cooldown = 0
|
||||
|
||||
/obj/item/nuke_core/New()
|
||||
SSobj.processing += src
|
||||
..()
|
||||
SSobj.processing |= src
|
||||
|
||||
/obj/item/nuke_core/attackby(obj/item/nuke_core_container/container, mob/user)
|
||||
if(istype(container))
|
||||
@@ -41,13 +42,16 @@
|
||||
core = ncore
|
||||
icon_state = "core_container_loaded"
|
||||
user << "<span class='warning'>Container is sealing...</span>"
|
||||
spawn(50)
|
||||
addtimer(src, "seal", 50)
|
||||
return 1
|
||||
|
||||
/obj/item/nuke_core_container/proc/seal()
|
||||
if(istype(core))
|
||||
SSobj.processing -= core
|
||||
icon_state = "core_container_sealed"
|
||||
playsound(loc, 'sound/items/Deconstruct.ogg', 100, 1)
|
||||
if(loc == user)
|
||||
user << "<span class='warning'>Container is sealed, the radiation is contained.</span>"
|
||||
return 1
|
||||
playsound(loc, 'sound/items/Deconstruct.ogg', 60, 1)
|
||||
if(ismob(loc))
|
||||
loc << "<span class='warning'>[src] is permanently sealed, [core]'s radiation is contained.</span>"
|
||||
|
||||
/obj/item/nuke_core_container/attackby(obj/item/nuke_core/core, mob/user)
|
||||
if(istype(core))
|
||||
|
||||
@@ -20,7 +20,106 @@
|
||||
"<span class='userdanger'>[user] has prodded you with [src]!</span>")
|
||||
add_logs(user, M, "stunned", src, "(INTENT: [uppertext(user.a_intent)])")
|
||||
|
||||
/obj/item/borg/cyborghug
|
||||
name = "Hugging Module"
|
||||
icon_state = "hugmodule"
|
||||
desc = "For when a someone really needs a hug."
|
||||
var/mode = 0 //0 = Hugs 1 = "Hug" 2 = Shock 3 = CRUSH
|
||||
var/ccooldown = 0
|
||||
var/scooldown = 0
|
||||
|
||||
/obj/item/borg/cyborghug/attack_self(mob/living/user)
|
||||
if(isrobot(user))
|
||||
var/mob/living/silicon/robot/P = user
|
||||
if(P.emagged)
|
||||
if(mode < 3)
|
||||
mode++
|
||||
else
|
||||
mode = 0
|
||||
else if(mode < 1)
|
||||
mode++
|
||||
else
|
||||
mode = 0
|
||||
switch(mode)
|
||||
if(0)
|
||||
user << "Power reset. Hugs!"
|
||||
if(1)
|
||||
user << "Power increased!"
|
||||
if(2)
|
||||
user << "BZZT. Electrifying arms..."
|
||||
if(3)
|
||||
user << "ERROR: ARM ACTUATORS OVERLOADED."
|
||||
|
||||
/obj/item/borg/cyborghug/attack(mob/living/M, mob/living/silicon/robot/user)
|
||||
switch(mode)
|
||||
if(0)
|
||||
if(M.health >= 0)
|
||||
if(ishuman(M))
|
||||
if(M.lying)
|
||||
user.visible_message("<span class='notice'>[user] shakes [M] trying to get \him up!</span>", \
|
||||
"<span class='notice'>You shake [M] trying to get \him up!</span>")
|
||||
else
|
||||
user.visible_message("<span class='notice'>[user] hugs [M] to make \him feel better!</span>", \
|
||||
"<span class='notice'>You hug [M] to make \him feel better!</span>")
|
||||
if(M.resting)
|
||||
M.resting = 0
|
||||
M.update_canmove()
|
||||
else
|
||||
user.visible_message("<span class='notice'>[user] pets [M]!</span>", \
|
||||
"<span class='notice'>You pet [M]!</span>")
|
||||
playsound(loc, 'sound/weapons/thudswoosh.ogg', 50, 1, -1)
|
||||
if(1)
|
||||
if(M.health >= 0)
|
||||
if(ishuman(M))
|
||||
if(M.lying)
|
||||
user.visible_message("<span class='notice'>[user] shakes [M] trying to get \him up!</span>", \
|
||||
"<span class='notice'>You shake [M] trying to get \him up!</span>")
|
||||
else
|
||||
user.visible_message("<span class='warning'>[user] hugs [M] in a firm bear-hug! [M] looks uncomfortable...</span>", \
|
||||
"<span class='warning'>You hug [M] firmly to make \him feel better! [M] looks uncomfortable...</span>")
|
||||
if(M.resting)
|
||||
M.resting = 0
|
||||
M.update_canmove()
|
||||
else
|
||||
user.visible_message("<span class='warning'>[user] bops [M] on the head!</span>", \
|
||||
"<span class='warning'>You bop [M] on the head!</span>")
|
||||
playsound(loc, 'sound/weapons/tap.ogg', 50, 1, -1)
|
||||
if(2)
|
||||
if(!scooldown)
|
||||
if(M.health >= 0)
|
||||
if(ishuman(M))
|
||||
M.electrocute_act(5, "[user]", safety = 1)
|
||||
user.visible_message("<span class='userdanger'>[user] electrocutes [M] with their touch!</span>", \
|
||||
"<span class='danger'>You electrocute [M] with your touch!</span>")
|
||||
M.update_canmove()
|
||||
else
|
||||
if(!isrobot(M))
|
||||
M.adjustFireLoss(10)
|
||||
user.visible_message("<span class='userdanger'>[user] shocks [M]!</span>", \
|
||||
"<span class='danger'>You shock [M]!</span>")
|
||||
else
|
||||
user.visible_message("<span class='userdanger'>[user] shocks [M]. It does not seem to have an effect</span>", \
|
||||
"<span class='danger'>You shock [M] to no effect.</span>")
|
||||
playsound(loc, 'sound/effects/sparks2.ogg', 50, 1, -1)
|
||||
user.cell.charge -= 400
|
||||
scooldown = 1
|
||||
spawn(10)
|
||||
scooldown = 0
|
||||
if(3)
|
||||
if(!ccooldown)
|
||||
if(M.health >= 0)
|
||||
if(ishuman(M))
|
||||
user.visible_message("<span class='userdanger'>[user] crushes [M] in their grip!</span>", \
|
||||
"<span class='danger'>You crush [M] in your grip!</span>")
|
||||
else
|
||||
user.visible_message("<span class='userdanger'>[user] crushes [M]!</span>", \
|
||||
"<span class='danger'>You crush [M]!</span>")
|
||||
playsound(loc, 'sound/weapons/smash.ogg', 50, 1, -1)
|
||||
M.adjustBruteLoss(10)
|
||||
user.cell.charge -= 300
|
||||
ccooldown = 1
|
||||
spawn(10)
|
||||
ccooldown = 0
|
||||
|
||||
/obj/item/borg/charger
|
||||
name = "power connector"
|
||||
@@ -146,8 +245,75 @@
|
||||
|
||||
user << "<span class='notice'>You stop charging [target].</span>"
|
||||
|
||||
/obj/item/device/harmalarm
|
||||
name = "Sonic Harm Prevention Tool"
|
||||
desc = "Releases a harmless blast that confuses most organics. For when the harm is JUST TOO MUCH"
|
||||
icon_state = "megaphone"
|
||||
var/cooldown = 0
|
||||
var/emagged = 0
|
||||
|
||||
/obj/item/device/harmalarm/emag_act(mob/user)
|
||||
emagged = !emagged
|
||||
if(emagged)
|
||||
user << "<font color='red'>You short out the safeties on the [src]!</font>"
|
||||
else
|
||||
user << "<font color='red'>You reset the safeties on the [src]!</font>"
|
||||
|
||||
/obj/item/device/harmalarm/attack_self(mob/user)
|
||||
var/safety = !emagged
|
||||
if(cooldown > world.time)
|
||||
user << "<font color='red'>The device is still recharging!</font>"
|
||||
return
|
||||
|
||||
if(isrobot(user))
|
||||
var/mob/living/silicon/robot/R = user
|
||||
if(R.cell.charge < 1200)
|
||||
user << "<font color='red'>You don't have enough charge to do this!</font>"
|
||||
return
|
||||
R.cell.charge -= 1000
|
||||
if(R.emagged)
|
||||
safety = 0
|
||||
|
||||
if(safety == 1)
|
||||
user.visible_message("<font color='red' size='2'>[user] blares out a near-deafening siren from its speakers!</font>", \
|
||||
"<span class='userdanger'>The siren pierces your hearing and confuses you!</span>", \
|
||||
"<span class='danger'>The siren pierces your hearing!</span>")
|
||||
for(var/mob/living/M in get_hearers_in_view(9, user))
|
||||
if(iscarbon(M))
|
||||
if(istype(M, /mob/living/carbon/human))
|
||||
var/mob/living/carbon/human/H = M
|
||||
if(istype(H.ears, /obj/item/clothing/ears/earmuffs))
|
||||
continue
|
||||
M.confused += 6
|
||||
M << "<font color='red' size='7'>HUMAN HARM</font>"
|
||||
playsound(get_turf(src), 'sound/AI/harmalarm.ogg', 70, 3)
|
||||
cooldown = world.time + 200
|
||||
log_game("[user.ckey]([user]) used a Cyborg Harm Alarm in ([user.x],[user.y],[user.z])")
|
||||
if(isrobot(user))
|
||||
var/mob/living/silicon/robot/R = user
|
||||
R.connected_ai << "<br><span class='notice'>NOTICE - Peacekeeping 'HARM ALARM' used by: [user]</span><br>"
|
||||
|
||||
return
|
||||
|
||||
if(safety == 0)
|
||||
user.visible_message("<font color='red' size='3'>[user] blares out a sonic screech from its speakers!</font>", \
|
||||
"<span class='userdanger'>You hear a sharp screech before your thoughts are interrupted and you collapse, your ears ringing!</span>", \
|
||||
"<span class='danger'>You hear a sonic screech and collapse, your ears riniging!")
|
||||
for(var/mob/living/M in get_hearers_in_view(9, user))
|
||||
if(iscarbon(M))
|
||||
if(istype(M, /mob/living/carbon/human))
|
||||
var/mob/living/carbon/human/H = M
|
||||
if(istype(H.ears, /obj/item/clothing/ears/earmuffs))
|
||||
continue
|
||||
M.confused += 15
|
||||
M.Weaken(2)
|
||||
M.stuttering += 30
|
||||
M.adjustEarDamage(0, 20)
|
||||
M.Jitter(25)
|
||||
M << "<font color='red' size='7'>BZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZT</font>"
|
||||
playsound(get_turf(src), 'sound/machines/warning-buzzer.ogg', 130, 3)
|
||||
cooldown = world.time + 600
|
||||
log_game("[user.ckey]([user]) used an emagged Cyborg Harm Alarm in ([user.x],[user.y],[user.z])")
|
||||
|
||||
/**********************************************************************
|
||||
HUD/SIGHT things
|
||||
|
||||
@@ -210,10 +210,15 @@
|
||||
if(!user.unEquip(W))
|
||||
return
|
||||
|
||||
if(M.syndiemmi)
|
||||
if(M.hacked || M.clockwork)
|
||||
aisync = 0
|
||||
lawsync = 0
|
||||
O.laws = new /datum/ai_laws/syndicate_override
|
||||
if(M.clockwork)
|
||||
O.laws = new/datum/ai_laws/ratvar
|
||||
spawn(1)
|
||||
add_servant_of_ratvar(O)
|
||||
else
|
||||
O.laws = new/datum/ai_laws/syndicate_override
|
||||
|
||||
O.invisibility = 0
|
||||
//Transfer debug settings to new mob
|
||||
@@ -226,7 +231,7 @@
|
||||
O.notify_ai(1)
|
||||
if(forced_ai)
|
||||
O.connected_ai = forced_ai
|
||||
if(!lawsync && !M.syndiemmi)
|
||||
if(!lawsync && !M.hacked)
|
||||
O.lawupdate = 0
|
||||
O.make_laws()
|
||||
|
||||
|
||||
@@ -112,3 +112,71 @@ RSF
|
||||
matter--
|
||||
user << "The RSF now holds [matter]/30 fabrication-units."
|
||||
desc = "A RSF. It currently holds [matter]/30 fabrication-units."
|
||||
|
||||
/obj/item/weapon/cookiesynth
|
||||
name = "Cookie Synthesizer"
|
||||
desc = "A self-recharging device used to rapidly deploy cookies."
|
||||
icon = 'icons/obj/tools.dmi'
|
||||
icon_state = "rcd"
|
||||
var/matter = 10
|
||||
var/toxin = 0
|
||||
var/emagged = 0
|
||||
w_class = 3
|
||||
|
||||
/obj/item/weapon/cookiesynth/New()
|
||||
desc = "A self recharging cookie fabricator. It currently holds [matter]/10 cookie-units."
|
||||
|
||||
/obj/item/weapon/cookiesynth/attackby()
|
||||
return
|
||||
|
||||
/obj/item/weapon/cookiesynth/emag_act(mob/user)
|
||||
emagged = !emagged
|
||||
if(emagged)
|
||||
user << "<span class='warning'>You short out the [src]'s reagent safety checker!</span>"
|
||||
else
|
||||
user << "<span class='warning'>You reset the [src]'s reagent safety checker!</span>"
|
||||
toxin = 0
|
||||
|
||||
/obj/item/weapon/cookiesynth/attack_self(mob/user)
|
||||
var/mob/living/silicon/robot/P = null
|
||||
if(isrobot(user))
|
||||
P = user
|
||||
if(emagged&&!toxin)
|
||||
toxin = 1
|
||||
user << "Cookie Synthesizer Hacked"
|
||||
else if(P.emagged&&!toxin)
|
||||
toxin = 1
|
||||
user << "Cookie Synthesizer Hacked"
|
||||
else
|
||||
toxin = 0
|
||||
user << "Cookie Synthesizer Reset"
|
||||
|
||||
/obj/item/weapon/cookiesynth/process()
|
||||
if (matter < 10)
|
||||
matter++
|
||||
|
||||
/obj/item/weapon/cookiesynth/afterattack(atom/A, mob/user, proximity)
|
||||
if(!proximity)
|
||||
return
|
||||
if (!(istype(A, /obj/structure/table) || istype(A, /turf/open/floor)))
|
||||
return
|
||||
if(matter < 1)
|
||||
user << "<span class='warning'>The [src] doesn't have enough matter left. Wait for it to recharge!</span>"
|
||||
return
|
||||
if(isrobot(user))
|
||||
var/mob/living/silicon/robot/R = user
|
||||
if(!R.cell || R.cell.charge < 400)
|
||||
user << "<span class='warning'>You do not have enough power to use [src].</span>"
|
||||
return
|
||||
var/turf/T = get_turf(A)
|
||||
playsound(src.loc, 'sound/machines/click.ogg', 10, 1)
|
||||
user << "Fabricating Cookie.."
|
||||
var/obj/item/weapon/reagent_containers/food/snacks/cookie/S = new /obj/item/weapon/reagent_containers/food/snacks/cookie(T)
|
||||
if(toxin)
|
||||
S.reagents.add_reagent("chloralhydrate2", 10)
|
||||
if (isrobot(user))
|
||||
var/mob/living/silicon/robot/R = user
|
||||
R.cell.charge -= 100
|
||||
else
|
||||
matter--
|
||||
desc = "A self recharging cookie fabricator. It currently holds [matter]/10 cookie-units."
|
||||
@@ -1,5 +1,4 @@
|
||||
//backpack item
|
||||
|
||||
/obj/item/weapon/defibrillator
|
||||
name = "defibrillator"
|
||||
desc = "A device that delivers powerful shocks to detachable paddles that resuscitate incapacitated patients."
|
||||
@@ -19,6 +18,7 @@
|
||||
var/obj/item/weapon/twohanded/shockpaddles/paddles
|
||||
var/obj/item/weapon/stock_parts/cell/high/bcell = null
|
||||
var/combat = 0 //can we revive through space suits?
|
||||
var/grab_ghost = FALSE // Do we pull the ghost back into their body?
|
||||
|
||||
/obj/item/weapon/defibrillator/New() //starts without a cell for rnd
|
||||
..()
|
||||
@@ -297,6 +297,7 @@
|
||||
var/obj/item/weapon/defibrillator/defib
|
||||
var/req_defib = 1
|
||||
var/combat = 0 //If it penetrates armor and gives additional functionality
|
||||
var/grab_ghost = FALSE
|
||||
|
||||
/obj/item/weapon/twohanded/shockpaddles/proc/recharge(var/time)
|
||||
if(req_defib || !time)
|
||||
@@ -382,178 +383,186 @@
|
||||
else
|
||||
user << "<span class='warning'>You aren't sure how to revive that...</span>"
|
||||
return
|
||||
else
|
||||
var/mob/living/carbon/human/H = M
|
||||
if(user.a_intent == "disarm")
|
||||
if(req_defib && defib.safety)
|
||||
return
|
||||
if(!req_defib && !combat)
|
||||
return
|
||||
busy = 1
|
||||
H.visible_message("<span class='danger'>[user] has touched [H.name] with [src]!</span>", \
|
||||
"<span class='userdanger'>[user] has touched [H.name] with [src]!</span>")
|
||||
H.adjustStaminaLoss(50)
|
||||
H.Weaken(5)
|
||||
H.updatehealth() //forces health update before next life tick
|
||||
playsound(get_turf(src), 'sound/machines/defib_zap.ogg', 50, 1, -1)
|
||||
H.emote("gasp")
|
||||
add_logs(user, M, "stunned", src)
|
||||
if(req_defib)
|
||||
defib.deductcharge(revivecost)
|
||||
cooldown = 1
|
||||
busy = 0
|
||||
update_icon()
|
||||
if(req_defib)
|
||||
defib.cooldowncheck(user)
|
||||
else
|
||||
recharge(60)
|
||||
var/mob/living/carbon/human/H = M
|
||||
|
||||
if(user.a_intent == "disarm")
|
||||
if(req_defib && defib.safety)
|
||||
return
|
||||
if(user.zone_selected == "chest")
|
||||
if(user.a_intent == "harm")
|
||||
if(req_defib && defib.safety)
|
||||
if(!req_defib && !combat)
|
||||
return
|
||||
busy = 1
|
||||
H.visible_message("<span class='danger'>[user] has touched [H.name] with [src]!</span>", \
|
||||
"<span class='userdanger'>[user] has touched [H.name] with [src]!</span>")
|
||||
H.adjustStaminaLoss(50)
|
||||
H.Weaken(5)
|
||||
H.updatehealth() //forces health update before next life tick
|
||||
playsound(get_turf(src), 'sound/machines/defib_zap.ogg', 50, 1, -1)
|
||||
H.emote("gasp")
|
||||
add_logs(user, M, "stunned", src)
|
||||
if(req_defib)
|
||||
defib.deductcharge(revivecost)
|
||||
cooldown = 1
|
||||
busy = 0
|
||||
update_icon()
|
||||
if(req_defib)
|
||||
defib.cooldowncheck(user)
|
||||
else
|
||||
recharge(60)
|
||||
return
|
||||
|
||||
if(user.zone_selected != "chest")
|
||||
user << "<span class='warning'>You need to target your patient's \
|
||||
chest with [src]!</span>"
|
||||
return
|
||||
if(user.a_intent == "harm")
|
||||
if(req_defib && defib.safety)
|
||||
return
|
||||
if(!req_defib && !combat)
|
||||
return
|
||||
user.visible_message("<span class='warning'>[user] begins to place [src] on [M.name]'s chest.</span>",
|
||||
"<span class='warning'>You overcharge the paddles and begin to place them onto [M]'s chest...</span>")
|
||||
busy = 1
|
||||
update_icon()
|
||||
if(do_after(user, 30, target = M))
|
||||
user.visible_message("<span class='notice'>[user] places [src] on [M.name]'s chest.</span>",
|
||||
"<span class='warning'>You place [src] on [M.name]'s chest and begin to charge them.</span>")
|
||||
var/turf/T = get_turf(defib)
|
||||
playsound(get_turf(src), 'sound/machines/defib_charge.ogg', 50, 0)
|
||||
if(req_defib)
|
||||
T.audible_message("<span class='warning'>\The [defib] lets out an urgent beep and lets out a steadily rising hum...</span>")
|
||||
else
|
||||
user.audible_message("<span class='warning'>[src] let out an urgent beep.</span>")
|
||||
if(do_after(user, 30, target = M)) //Takes longer due to overcharging
|
||||
if(!M)
|
||||
busy = 0
|
||||
update_icon()
|
||||
return
|
||||
if(!req_defib && !combat)
|
||||
if(M && M.stat == DEAD)
|
||||
user << "<span class='warning'>[M] is dead.</span>"
|
||||
playsound(get_turf(src), 'sound/machines/defib_failed.ogg', 50, 0)
|
||||
busy = 0
|
||||
update_icon()
|
||||
return
|
||||
user.visible_message("<span class='warning'>[user] begins to place [src] on [M.name]'s chest.</span>",
|
||||
"<span class='warning'>You overcharge the paddles and begin to place them onto [M]'s chest...</span>")
|
||||
busy = 1
|
||||
update_icon()
|
||||
if(do_after(user, 30, target = M))
|
||||
user.visible_message("<span class='notice'>[user] places [src] on [M.name]'s chest.</span>",
|
||||
"<span class='warning'>You place [src] on [M.name]'s chest and begin to charge them.</span>")
|
||||
var/turf/T = get_turf(defib)
|
||||
playsound(get_turf(src), 'sound/machines/defib_charge.ogg', 50, 0)
|
||||
if(req_defib)
|
||||
T.audible_message("<span class='warning'>\The [defib] lets out an urgent beep and lets out a steadily rising hum...</span>")
|
||||
else
|
||||
user.audible_message("<span class='warning'>[src] let out an urgent beep.</span>")
|
||||
if(do_after(user, 30, target = M)) //Takes longer due to overcharging
|
||||
if(!M)
|
||||
busy = 0
|
||||
update_icon()
|
||||
return
|
||||
if(M && M.stat == DEAD)
|
||||
user << "<span class='warning'>[M] is dead.</span>"
|
||||
playsound(get_turf(src), 'sound/machines/defib_failed.ogg', 50, 0)
|
||||
busy = 0
|
||||
update_icon()
|
||||
return
|
||||
user.visible_message("<span class='boldannounce'><i>[user] shocks [M] with \the [src]!</span>", "<span class='warning'>You shock [M] with \the [src]!</span>")
|
||||
playsound(get_turf(src), 'sound/machines/defib_zap.ogg', 100, 1, -1)
|
||||
playsound(loc, 'sound/weapons/Egloves.ogg', 100, 1, -1)
|
||||
var/mob/living/carbon/human/HU = M
|
||||
M.emote("scream")
|
||||
if(!HU.heart_attack)
|
||||
HU.heart_attack = 1
|
||||
if(!HU.stat)
|
||||
HU.visible_message("<span class='warning'>[M] thrashes wildly, clutching at their chest!</span>",
|
||||
"<span class='userdanger'>You feel a horrible agony in your chest!</span>")
|
||||
HU.apply_damage(50, BURN, "chest")
|
||||
add_logs(user, M, "overloaded the heart of", defib)
|
||||
M.Weaken(5)
|
||||
M.Jitter(100)
|
||||
if(req_defib)
|
||||
defib.deductcharge(revivecost)
|
||||
cooldown = 1
|
||||
busy = 0
|
||||
update_icon()
|
||||
if(!req_defib)
|
||||
recharge(60)
|
||||
if(req_defib && (defib.cooldowncheck(user)))
|
||||
return
|
||||
user.visible_message("<span class='boldannounce'><i>[user] shocks [M] with \the [src]!</span>", "<span class='warning'>You shock [M] with \the [src]!</span>")
|
||||
playsound(get_turf(src), 'sound/machines/defib_zap.ogg', 100, 1, -1)
|
||||
playsound(loc, 'sound/weapons/Egloves.ogg', 100, 1, -1)
|
||||
var/mob/living/carbon/human/HU = M
|
||||
M.emote("scream")
|
||||
if(!HU.heart_attack)
|
||||
HU.heart_attack = 1
|
||||
if(!HU.stat)
|
||||
HU.visible_message("<span class='warning'>[M] thrashes wildly, clutching at their chest!</span>",
|
||||
"<span class='userdanger'>You feel a horrible agony in your chest!</span>")
|
||||
HU.apply_damage(50, BURN, "chest")
|
||||
add_logs(user, M, "overloaded the heart of", defib)
|
||||
M.Weaken(5)
|
||||
M.Jitter(100)
|
||||
if(req_defib)
|
||||
defib.deductcharge(revivecost)
|
||||
cooldown = 1
|
||||
busy = 0
|
||||
update_icon()
|
||||
return
|
||||
if(!H.suiciding && !(H.disabilities & NOCLONE)&& !H.hellbound)
|
||||
H.notify_ghost_cloning("Your heart is being defibrillated. Re-enter your corpse if you want to be revived!", source = src)
|
||||
if(!req_defib)
|
||||
recharge(60)
|
||||
if(req_defib && (defib.cooldowncheck(user)))
|
||||
return
|
||||
busy = 0
|
||||
update_icon()
|
||||
return
|
||||
if((!req_defib && grab_ghost) || (req_defib && defib.grab_ghost))
|
||||
H.notify_ghost_cloning("Your heart is being defibrillated!")
|
||||
H.grab_ghost() // Shove them back in their body.
|
||||
else if(!H.suiciding && !(H.disabilities & NOCLONE)&& !H.hellbound)
|
||||
H.notify_ghost_cloning("Your heart is being defibrillated. Re-enter your corpse if you want to be revived!", source = src)
|
||||
|
||||
user.visible_message("<span class='warning'>[user] begins to place [src] on [M.name]'s chest.</span>", "<span class='warning'>You begin to place [src] on [M.name]'s chest...</span>")
|
||||
busy = 1
|
||||
update_icon()
|
||||
if(do_after(user, 30, target = M)) //beginning to place the paddles on patient's chest to allow some time for people to move away to stop the process
|
||||
user.visible_message("<span class='notice'>[user] places [src] on [M.name]'s chest.</span>", "<span class='warning'>You place [src] on [M.name]'s chest.</span>")
|
||||
playsound(get_turf(src), 'sound/machines/defib_charge.ogg', 50, 0)
|
||||
var/tplus = world.time - H.timeofdeath
|
||||
var/tlimit = 1200 //past this much time the patient is unrecoverable (in deciseconds)
|
||||
var/tloss = 600 //brain damage starts setting in on the patient after some time left rotting
|
||||
var/total_burn = 0
|
||||
var/total_brute = 0
|
||||
if(do_after(user, 20, target = M)) //placed on chest and short delay to shock for dramatic effect, revive time is 5sec total
|
||||
for(var/obj/item/carried_item in H.contents)
|
||||
if(istype(carried_item, /obj/item/clothing/suit/space))
|
||||
if((!src.combat && !req_defib) || (req_defib && !defib.combat))
|
||||
user.audible_message("<span class='warning'>[req_defib ? "[defib]" : "[src]"] buzzes: Patient's chest is obscured. Operation aborted.</span>")
|
||||
playsound(get_turf(src), 'sound/machines/defib_failed.ogg', 50, 0)
|
||||
busy = 0
|
||||
update_icon()
|
||||
return
|
||||
if(H.stat == DEAD)
|
||||
M.visible_message("<span class='warning'>[M]'s body convulses a bit.")
|
||||
playsound(get_turf(src), "bodyfall", 50, 1)
|
||||
playsound(get_turf(src), 'sound/machines/defib_zap.ogg', 50, 1, -1)
|
||||
total_brute = H.getBruteLoss()
|
||||
total_burn = H.getFireLoss()
|
||||
|
||||
var/failed = null
|
||||
|
||||
if (H.suiciding || (H.disabilities & NOCLONE))
|
||||
failed = "<span class='warning'>[req_defib ? "[defib]" : "[src]"] buzzes: Resuscitation failed - Recovery of patient impossible. Further attempts futile.</span>"
|
||||
else if (H.hellbound)
|
||||
failed = "<span class='warning'>[req_defib ? "[defib]" : "[src]"] buzzes: Resuscitation failed - Patient's soul appears to be on another plane of existance. Further attempts futile.</span>"
|
||||
else if (tplus > tlimit)
|
||||
failed = "<span class='warning'>[req_defib ? "[defib]" : "[src]"] buzzes: Resuscitation failed - Body has decayed for too long. Further attempts futile.</span>"
|
||||
else if (!H.getorgan(/obj/item/organ/heart))
|
||||
failed = "<span class='warning'>[req_defib ? "[defib]" : "[src]"] buzzes: Resuscitation failed - Patient's heart is missing.</span>"
|
||||
else if(total_burn >= 180 || total_brute >= 180)
|
||||
failed = "<span class='warning'>[req_defib ? "[defib]" : "[src]"] buzzes: Resuscitation failed - Severe tissue damage makes recovery of patient impossible via defibrillator. Further attempts futile.</span>"
|
||||
else if(H.get_ghost())
|
||||
failed = "<span class='warning'>[req_defib ? "[defib]" : "[src]"] buzzes: Resuscitation failed - No activity in patient's brain. Further attempts may be successful.</span>"
|
||||
else
|
||||
var/obj/item/organ/brain/BR = H.getorgan(/obj/item/organ/brain)
|
||||
if(!BR || BR.damaged_brain)
|
||||
failed = "<span class='warning'>[req_defib ? "[defib]" : "[src]"] buzzes: Resuscitation failed - Patient's brain is missing or damaged beyond point of no return. Further attempts futile.</span>"
|
||||
|
||||
if(failed)
|
||||
user.visible_message(failed)
|
||||
playsound(get_turf(src), 'sound/machines/defib_failed.ogg', 50, 0)
|
||||
else
|
||||
//If the body has been fixed so that they would not be in crit when defibbed, give them oxyloss to put them back into crit
|
||||
if (H.health > halfwaycritdeath)
|
||||
H.adjustOxyLoss(H.health - halfwaycritdeath, 0)
|
||||
else
|
||||
var/overall_damage = total_brute + total_burn + H.getToxLoss() + H.getOxyLoss()
|
||||
var/mobhealth = H.health
|
||||
H.adjustOxyLoss((mobhealth - halfwaycritdeath) * (H.getOxyLoss() / overall_damage), 0)
|
||||
H.adjustToxLoss((mobhealth - halfwaycritdeath) * (H.getToxLoss() / overall_damage), 0)
|
||||
H.adjustFireLoss((mobhealth - halfwaycritdeath) * (total_burn / overall_damage), 0)
|
||||
H.adjustBruteLoss((mobhealth - halfwaycritdeath) * (total_brute / overall_damage), 0)
|
||||
user.visible_message("<span class='notice'>[req_defib ? "[defib]" : "[src]"] pings: Resuscitation successful.</span>")
|
||||
playsound(get_turf(src), 'sound/machines/defib_success.ogg', 50, 0)
|
||||
H.revive()
|
||||
H.emote("gasp")
|
||||
if(tplus > tloss)
|
||||
H.setBrainLoss( max(0, min(99, ((tlimit - tplus) / tlimit * 100))))
|
||||
add_logs(user, M, "revived", defib)
|
||||
if(req_defib)
|
||||
defib.deductcharge(revivecost)
|
||||
cooldown = 1
|
||||
update_icon()
|
||||
if(req_defib)
|
||||
defib.cooldowncheck(user)
|
||||
else
|
||||
recharge(60)
|
||||
else if(H.heart_attack)
|
||||
H.heart_attack = 0
|
||||
user.visible_message("<span class='notice'>[req_defib ? "[defib]" : "[src]"] pings: Patient's heart is now beating again.</span>")
|
||||
playsound(get_turf(src), 'sound/machines/defib_zap.ogg', 50, 1, -1)
|
||||
else
|
||||
user.visible_message("<span class='warning'>[req_defib ? "[defib]" : "[src]"] buzzes: Patient is not in a valid state. Operation aborted.</span>")
|
||||
user.visible_message("<span class='warning'>[user] begins to place [src] on [M.name]'s chest.</span>", "<span class='warning'>You begin to place [src] on [M.name]'s chest...</span>")
|
||||
busy = 1
|
||||
update_icon()
|
||||
if(do_after(user, 30, target = M)) //beginning to place the paddles on patient's chest to allow some time for people to move away to stop the process
|
||||
user.visible_message("<span class='notice'>[user] places [src] on [M.name]'s chest.</span>", "<span class='warning'>You place [src] on [M.name]'s chest.</span>")
|
||||
playsound(get_turf(src), 'sound/machines/defib_charge.ogg', 50, 0)
|
||||
var/tplus = world.time - H.timeofdeath
|
||||
// past this much time the patient is unrecoverable
|
||||
// (in deciseconds)
|
||||
var/tlimit = DEFIB_TIME_LIMIT * 10
|
||||
// brain damage starts setting in on the patient after
|
||||
// some time left rotting
|
||||
var/tloss = DEFIB_TIME_LOSS * 10
|
||||
var/total_burn = 0
|
||||
var/total_brute = 0
|
||||
if(do_after(user, 20, target = M)) //placed on chest and short delay to shock for dramatic effect, revive time is 5sec total
|
||||
for(var/obj/item/carried_item in H.contents)
|
||||
if(istype(carried_item, /obj/item/clothing/suit/space))
|
||||
if((!src.combat && !req_defib) || (req_defib && !defib.combat))
|
||||
user.audible_message("<span class='warning'>[req_defib ? "[defib]" : "[src]"] buzzes: Patient's chest is obscured. Operation aborted.</span>")
|
||||
playsound(get_turf(src), 'sound/machines/defib_failed.ogg', 50, 0)
|
||||
busy = 0
|
||||
update_icon()
|
||||
else
|
||||
user << "<span class='warning'>You need to target your patient's chest with [src]!</span>"
|
||||
return
|
||||
busy = 0
|
||||
update_icon()
|
||||
return
|
||||
if(H.stat == DEAD)
|
||||
M.visible_message("<span class='warning'>[M]'s body convulses a bit.")
|
||||
playsound(get_turf(src), "bodyfall", 50, 1)
|
||||
playsound(get_turf(src), 'sound/machines/defib_zap.ogg', 50, 1, -1)
|
||||
total_brute = H.getBruteLoss()
|
||||
total_burn = H.getFireLoss()
|
||||
|
||||
var/failed = null
|
||||
|
||||
if (H.suiciding || (H.disabilities & NOCLONE))
|
||||
failed = "<span class='warning'>[req_defib ? "[defib]" : "[src]"] buzzes: Resuscitation failed - Recovery of patient impossible. Further attempts futile.</span>"
|
||||
else if (H.hellbound)
|
||||
failed = "<span class='warning'>[req_defib ? "[defib]" : "[src]"] buzzes: Resuscitation failed - Patient's soul appears to be on another plane of existance. Further attempts futile.</span>"
|
||||
else if (tplus > tlimit)
|
||||
failed = "<span class='warning'>[req_defib ? "[defib]" : "[src]"] buzzes: Resuscitation failed - Body has decayed for too long. Further attempts futile.</span>"
|
||||
else if (!H.getorgan(/obj/item/organ/heart))
|
||||
failed = "<span class='warning'>[req_defib ? "[defib]" : "[src]"] buzzes: Resuscitation failed - Patient's heart is missing.</span>"
|
||||
else if(total_burn >= 180 || total_brute >= 180)
|
||||
failed = "<span class='warning'>[req_defib ? "[defib]" : "[src]"] buzzes: Resuscitation failed - Severe tissue damage makes recovery of patient impossible via defibrillator. Further attempts futile.</span>"
|
||||
else if(H.get_ghost())
|
||||
failed = "<span class='warning'>[req_defib ? "[defib]" : "[src]"] buzzes: Resuscitation failed - No activity in patient's brain. Further attempts may be successful.</span>"
|
||||
else
|
||||
var/obj/item/organ/brain/BR = H.getorgan(/obj/item/organ/brain)
|
||||
if(!BR || BR.damaged_brain)
|
||||
failed = "<span class='warning'>[req_defib ? "[defib]" : "[src]"] buzzes: Resuscitation failed - Patient's brain is missing or damaged beyond point of no return. Further attempts futile.</span>"
|
||||
|
||||
if(failed)
|
||||
user.visible_message(failed)
|
||||
playsound(get_turf(src), 'sound/machines/defib_failed.ogg', 50, 0)
|
||||
else
|
||||
//If the body has been fixed so that they would not be in crit when defibbed, give them oxyloss to put them back into crit
|
||||
if (H.health > halfwaycritdeath)
|
||||
H.adjustOxyLoss(H.health - halfwaycritdeath, 0)
|
||||
else
|
||||
var/overall_damage = total_brute + total_burn + H.getToxLoss() + H.getOxyLoss()
|
||||
var/mobhealth = H.health
|
||||
H.adjustOxyLoss((mobhealth - halfwaycritdeath) * (H.getOxyLoss() / overall_damage), 0)
|
||||
H.adjustToxLoss((mobhealth - halfwaycritdeath) * (H.getToxLoss() / overall_damage), 0)
|
||||
H.adjustFireLoss((mobhealth - halfwaycritdeath) * (total_burn / overall_damage), 0)
|
||||
H.adjustBruteLoss((mobhealth - halfwaycritdeath) * (total_brute / overall_damage), 0)
|
||||
user.visible_message("<span class='notice'>[req_defib ? "[defib]" : "[src]"] pings: Resuscitation successful.</span>")
|
||||
playsound(get_turf(src), 'sound/machines/defib_success.ogg', 50, 0)
|
||||
H.revive()
|
||||
H.emote("gasp")
|
||||
if(tplus > tloss)
|
||||
H.setBrainLoss( max(0, min(99, ((tlimit - tplus) / tlimit * 100))))
|
||||
add_logs(user, M, "revived", defib)
|
||||
if(req_defib)
|
||||
defib.deductcharge(revivecost)
|
||||
cooldown = 1
|
||||
update_icon()
|
||||
if(req_defib)
|
||||
defib.cooldowncheck(user)
|
||||
else
|
||||
recharge(60)
|
||||
else if(H.heart_attack)
|
||||
H.heart_attack = 0
|
||||
user.visible_message("<span class='notice'>[req_defib ? "[defib]" : "[src]"] pings: Patient's heart is now beating again.</span>")
|
||||
playsound(get_turf(src), 'sound/machines/defib_zap.ogg', 50, 1, -1)
|
||||
else
|
||||
user.visible_message("<span class='warning'>[req_defib ? "[defib]" : "[src]"] buzzes: Patient is not in a valid state. Operation aborted.</span>")
|
||||
playsound(get_turf(src), 'sound/machines/defib_failed.ogg', 50, 0)
|
||||
busy = 0
|
||||
update_icon()
|
||||
|
||||
/obj/item/weapon/twohanded/shockpaddles/syndicate
|
||||
name = "syndicate defibrillator paddles"
|
||||
|
||||
@@ -174,7 +174,7 @@
|
||||
var/turf/T = get_turf(loc)
|
||||
if(istype(T, /turf/open))
|
||||
var/turf/open/theturf = T
|
||||
theturf.MakeSlippery(min = 10, max = 5)
|
||||
theturf.MakeSlippery(min_wet_time = 10, wet_time_to_add = 5)
|
||||
|
||||
user.visible_message("[user] empties out \the [src] onto the floor using the release valve.", "<span class='info'>You quietly empty out \the [src] using its release valve.</span>")
|
||||
return
|
||||
|
||||
@@ -305,6 +305,9 @@
|
||||
/obj/item/weapon/restraints/legcuffs/beartrap/energy/attack_hand(mob/user)
|
||||
Crossed(user) //honk
|
||||
|
||||
/obj/item/weapon/restraints/legcuffs/beartrap/energy/cyborg
|
||||
breakouttime = 20 // Cyborgs shouldn't have a strong restraint
|
||||
|
||||
/obj/item/weapon/restraints/legcuffs/bola
|
||||
name = "bola"
|
||||
desc = "A restraining device designed to be thrown at the target. Upon connecting with said target, it will wrap around their legs, making it difficult for them to move quickly."
|
||||
|
||||
@@ -74,6 +74,45 @@
|
||||
creation_time = 30
|
||||
max_signs = 6
|
||||
|
||||
/obj/item/weapon/holosign_creator/cyborg
|
||||
name = "Energy Barrier Projector"
|
||||
desc = "A holographic projector that creates fragile energy fields"
|
||||
creation_time = 5
|
||||
max_signs = 9
|
||||
holosign_type = /obj/effect/overlay/holograph/barrier/cyborg
|
||||
var/shock = 0
|
||||
|
||||
/obj/item/weapon/holosign_creator/cyborg/attack_self(mob/user)
|
||||
if(isrobot(user))
|
||||
var/mob/living/silicon/robot/R = user
|
||||
|
||||
if(shock)
|
||||
user <<"<span class='notice'>You clear all active holograms, and reset your projector to normal.</span>"
|
||||
holosign_type = /obj/effect/overlay/holograph/barrier/cyborg
|
||||
creation_time = 5
|
||||
if(signs.len)
|
||||
for(var/H in signs)
|
||||
qdel(H)
|
||||
shock = 0
|
||||
return
|
||||
else if(R.emagged&&!shock)
|
||||
user <<"<span class='warning'>You clear all active holograms, and overload your energy projector!</span>"
|
||||
holosign_type = /obj/effect/overlay/holograph/barrier/cyborg/hacked
|
||||
creation_time = 30
|
||||
if(signs.len)
|
||||
for(var/H in signs)
|
||||
qdel(H)
|
||||
shock = 1
|
||||
return
|
||||
else
|
||||
if(signs.len)
|
||||
for(var/H in signs)
|
||||
qdel(H)
|
||||
user << "<span class='notice'>You clear all active holograms.</span>"
|
||||
if(signs.len)
|
||||
for(var/H in signs)
|
||||
qdel(H)
|
||||
user << "<span class='notice'>You clear all active holograms.</span>"
|
||||
|
||||
/obj/effect/overlay/holograph
|
||||
icon = 'icons/effects/effects.dmi'
|
||||
@@ -185,3 +224,36 @@
|
||||
|
||||
/obj/effect/overlay/holograph/barrier/engineering
|
||||
icon_state = "holosign_engi"
|
||||
|
||||
/obj/effect/overlay/holograph/barrier/cyborg
|
||||
name = "Energy Field"
|
||||
desc = "A fragile energy field that blocks movement"
|
||||
density = 1
|
||||
holo_integrity = 1
|
||||
|
||||
/obj/effect/overlay/holograph/barrier/CanPass()
|
||||
return 0
|
||||
|
||||
/obj/effect/overlay/holograph/barrier/cyborg/hacked
|
||||
name = "Charged Energy Field"
|
||||
desc = "A powerful energy field that blocks movement. Energy arcs off it"
|
||||
holo_integrity = 3
|
||||
var/shockcd = 0
|
||||
|
||||
/obj/effect/overlay/holograph/barrier/cyborg/hacked/attack_hand(mob/living/user)
|
||||
if(!shockcd)
|
||||
if(ismob(user))
|
||||
var/mob/living/M = user
|
||||
M.electrocute_act(15,"Energy Barrier", safety=1)
|
||||
shockcd = 1
|
||||
spawn(10)
|
||||
shockcd = 0
|
||||
|
||||
/obj/effect/overlay/holograph/barrier/cyborg/hacked/Bumped(atom/user)
|
||||
if(!shockcd)
|
||||
if(ismob(user))
|
||||
var/mob/living/M = user
|
||||
M.electrocute_act(15,"Energy Barrier", safety=1)
|
||||
shockcd = 1
|
||||
spawn(10)
|
||||
shockcd = 0
|
||||
@@ -23,7 +23,7 @@
|
||||
|
||||
|
||||
obj/item/weapon/mop/proc/clean(turf/A)
|
||||
if(reagents.has_reagent("water", 1) || reagents.has_reagent("holywater", 1) || reagents.has_reagent("vodka", 1))
|
||||
if(reagents.has_reagent("water", 1) || reagents.has_reagent("holywater", 1) || reagents.has_reagent("vodka", 1) || reagents.has_reagent("cleaner", 1))
|
||||
A.clean_blood()
|
||||
for(var/obj/effect/O in A)
|
||||
if(is_cleanable(O))
|
||||
@@ -31,7 +31,7 @@ obj/item/weapon/mop/proc/clean(turf/A)
|
||||
if(istype(A, /turf/closed))
|
||||
var/turf/closed/C = A
|
||||
C.thermite = 0
|
||||
reagents.reaction(A, TOUCH, 10) //10 is the multiplier for the reaction effect. probably needed to wet the floor properly.
|
||||
reagents.reaction(A, TOUCH, 5) //Needed for proper floor wetting.
|
||||
reagents.remove_any(1) //reaction() doesn't use up the reagents
|
||||
|
||||
|
||||
|
||||
@@ -141,7 +141,7 @@
|
||||
user << "<span class='warning'>This MMI does not seem to fit!</span>"
|
||||
return
|
||||
|
||||
if(M.syndiemmi)
|
||||
if(M.hacked)
|
||||
user << "<span class='warning'>This MMI does not seem to fit!</span>"
|
||||
return
|
||||
|
||||
|
||||
@@ -381,10 +381,10 @@
|
||||
|
||||
/obj/structure/closet/AltClick(mob/user)
|
||||
..()
|
||||
if(!user.canUseTopic(user))
|
||||
if(!user.canUseTopic(src, be_close=TRUE))
|
||||
user << "<span class='warning'>You can't do that right now!</span>"
|
||||
return
|
||||
if(opened || !secure || !in_range(src, user))
|
||||
if(opened || !secure)
|
||||
return
|
||||
else
|
||||
togglelock(user)
|
||||
|
||||
@@ -124,11 +124,9 @@
|
||||
|
||||
/obj/structure/reflector/AltClick(mob/user)
|
||||
..()
|
||||
if(!user.canUseTopic(user))
|
||||
if(!user.canUseTopic(src, be_close=TRUE))
|
||||
user << "<span class='warning'>You can't do that right now!</span>"
|
||||
return
|
||||
if(!in_range(src, user))
|
||||
return
|
||||
else
|
||||
rotate()
|
||||
|
||||
|
||||
@@ -134,7 +134,7 @@
|
||||
return 0
|
||||
if(!G.confirm())
|
||||
return 0
|
||||
G.affecting.loc = src.loc
|
||||
G.affecting.forceMove(src.loc)
|
||||
if(istype(src, /obj/structure/table/optable))
|
||||
var/obj/structure/table/optable/OT = src
|
||||
G.affecting.resting = 1
|
||||
@@ -263,29 +263,54 @@
|
||||
buildstack = /obj/item/stack/sheet/glass
|
||||
canSmoothWith = null
|
||||
health = 50
|
||||
var/list/debris = list()
|
||||
|
||||
/obj/structure/table/glass/New()
|
||||
. = ..()
|
||||
debris += new frame
|
||||
debris += new /obj/item/weapon/shard
|
||||
|
||||
/obj/structure/table/glass/Destroy()
|
||||
for(var/i in debris)
|
||||
qdel(i)
|
||||
. = ..()
|
||||
|
||||
/obj/structure/table/glass/Crossed(atom/movable/AM)
|
||||
. = ..()
|
||||
if(flags & NODECONSTRUCT)
|
||||
return
|
||||
if(!isliving(AM))
|
||||
return
|
||||
// Don't break if they're just flying past
|
||||
if(AM.throwing)
|
||||
return
|
||||
spawn(5)
|
||||
// Check again in a bit though
|
||||
if(AM.loc == get_turf(src))
|
||||
check_break(AM)
|
||||
else
|
||||
check_break(AM)
|
||||
|
||||
if(istype(AM, /mob/living))
|
||||
var/mob/living/M = AM
|
||||
if(has_gravity(M) && M.mob_size > MOB_SIZE_SMALL)
|
||||
table_shatter(M)
|
||||
/obj/structure/table/glass/proc/check_break(mob/living/M)
|
||||
if(has_gravity(M) && M.mob_size > MOB_SIZE_SMALL)
|
||||
table_shatter(M)
|
||||
|
||||
/obj/structure/table/glass/proc/table_shatter(mob/M)
|
||||
visible_message("<span class='warning'>[src] breaks!</span>")
|
||||
visible_message("<span class='warning'>[src] breaks!</span>",
|
||||
"<span class='danger'>You hear breaking glass.</span>")
|
||||
playsound(src.loc, "shatter", 50, 1)
|
||||
new frame(src.loc)
|
||||
var/obj/item/weapon/shard/S = new(src.loc)
|
||||
S.throw_impact(M)
|
||||
for(var/i in debris)
|
||||
var/atom/movable/AM = i
|
||||
AM.loc = get_turf(src)
|
||||
if(istype(AM, /obj/item/weapon/shard))
|
||||
AM.throw_impact(M)
|
||||
M.Weaken(5)
|
||||
qdel(src)
|
||||
|
||||
/obj/structure/table/glass/narsie_act()
|
||||
color = NARSIE_WINDOW_COLOUR
|
||||
for(var/obj/item/weapon/shard/S in debris)
|
||||
S.color = NARSIE_WINDOW_COLOUR
|
||||
|
||||
/*
|
||||
* Wooden tables
|
||||
*/
|
||||
|
||||
@@ -182,7 +182,7 @@
|
||||
else
|
||||
if(istype(loc, /turf/open))
|
||||
var/turf/open/tile = loc
|
||||
tile.MakeSlippery(min = 5, max = 1)
|
||||
tile.MakeSlippery(min_wet_time = 5, wet_time_to_add = 1)
|
||||
|
||||
|
||||
/obj/machinery/shower/attackby(obj/item/I, mob/user, params)
|
||||
@@ -492,4 +492,4 @@
|
||||
/obj/structure/sink/puddle/attackby(obj/item/O, mob/user, params)
|
||||
icon_state = "puddle-splash"
|
||||
. = ..()
|
||||
icon_state = "puddle"
|
||||
icon_state = "puddle"
|
||||
|
||||
@@ -69,10 +69,9 @@
|
||||
shatter()
|
||||
|
||||
/obj/structure/window/narsie_act()
|
||||
var/evil_color = "#7D1919"
|
||||
color = evil_color
|
||||
color = NARSIE_WINDOW_COLOUR
|
||||
for(var/obj/item/weapon/shard/shard in debris)
|
||||
shard.color = evil_color
|
||||
shard.color = NARSIE_WINDOW_COLOUR
|
||||
|
||||
/obj/structure/window/singularity_pull(S, current_size)
|
||||
if(current_size >= STAGE_FIVE)
|
||||
|
||||
@@ -95,10 +95,8 @@
|
||||
C.spin(1,1)
|
||||
return 1
|
||||
|
||||
/turf/open/proc/MakeSlippery(wet_setting = TURF_WET_WATER, min = 0, max = 0) // 1 = Water, 2 = Lube, 3 = Ice
|
||||
wet_time += max
|
||||
if(wet_time < min)
|
||||
wet_time = min
|
||||
/turf/open/proc/MakeSlippery(wet_setting = TURF_WET_WATER, min_wet_time = 0, wet_time_to_add = 0) // 1 = Water, 2 = Lube, 3 = Ice
|
||||
wet_time = max(wet_time+wet_time_to_add, min_wet_time)
|
||||
if(wet >= wet_setting)
|
||||
return
|
||||
wet = wet_setting
|
||||
@@ -129,6 +127,10 @@
|
||||
overlays -= wet_overlay
|
||||
|
||||
/turf/open/proc/HandleWet()
|
||||
if(!wet)
|
||||
//It's possible for this handler to get called after all the wetness is
|
||||
//cleared, so bail out if that is the case
|
||||
return
|
||||
if(!wet_time && wet < TURF_WET_ICE)
|
||||
MakeDry(TURF_WET_ICE)
|
||||
if(wet_time > MAXIMUM_WET_TIME)
|
||||
@@ -159,5 +161,5 @@
|
||||
if(!wet && wet_time)
|
||||
wet_time = 0
|
||||
if(wet)
|
||||
addtimer(src, "HandleWet", 15, 1)
|
||||
addtimer(src, "HandleWet", 15)
|
||||
|
||||
|
||||
@@ -231,7 +231,7 @@
|
||||
else if (istype(thing, /mob/living))
|
||||
. = 1
|
||||
var/mob/living/L = thing
|
||||
if("mining" in L.faction)
|
||||
if("lava" in L.weather_immunities)
|
||||
continue
|
||||
if(L.buckled)
|
||||
if(isobj(L.buckled))
|
||||
@@ -239,8 +239,8 @@
|
||||
if(O.burn_state == LAVA_PROOF)
|
||||
continue
|
||||
if(isliving(L.buckled)) //Goliath riding
|
||||
var/mob/living/liv = L.buckled
|
||||
if("mining" in liv.faction)
|
||||
var/mob/living/live = L.buckled
|
||||
if("lava" in live.weather_immunities)
|
||||
continue
|
||||
|
||||
L.adjustFireLoss(20)
|
||||
|
||||
@@ -157,6 +157,11 @@
|
||||
|
||||
/mob/living/proc/canSuicide()
|
||||
if(stat == CONSCIOUS)
|
||||
if(mental_dominator)
|
||||
src << "<span class='warning'>This body's force of will is too strong! You can't break it enough to murder them.</span>"
|
||||
if(mind_control_holder)
|
||||
mind_control_holder << "<span class='userdanger'>Through tremendous force of will, you stop a suicide attempt!</span>"
|
||||
return 0
|
||||
return 1
|
||||
else if(stat == DEAD)
|
||||
src << "You're already dead!"
|
||||
|
||||
@@ -468,6 +468,16 @@
|
||||
dat += "<td><A href='?_src_=holder;adminplayerobservefollow=\ref[M]'>FLW</a></td></tr>"
|
||||
dat += "</table>"
|
||||
|
||||
if(ticker.mode.servants_of_ratvar.len)
|
||||
dat += "<br><table cellspacing=5><tr><td><B>Servants of Ratvar</B></td><td></td></tr>"
|
||||
for(var/datum/mind/N in ticker.mode.servants_of_ratvar)
|
||||
var/mob/M = N.current
|
||||
if(M)
|
||||
dat += "<tr><td><a href='?_src_=holder;adminplayeropts=\ref[M]'>[M.real_name]</a>[M.client ? "" : " <i>(ghost)</i>"][M.stat == 2 ? " <b><font color=red>(DEAD)</font></b>" : ""]</td>"
|
||||
dat += "<td><A href='?priv_msg=[M.ckey]'>PM</A></td>"
|
||||
dat += "<td><A href='?_src_=holder;adminplayerobservefollow=\ref[M]'>FLW</a></td></tr>"
|
||||
dat += "</table>"
|
||||
|
||||
if(ticker.mode.red_deities.len || ticker.mode.red_deity_prophets.len || ticker.mode.blue_deity_prophets.len || ticker.mode.red_deity_followers.len || ticker.mode.blue_deity_followers.len)
|
||||
dat += "<br><table cellspacing=5><tr><td><B>Red Deity</B></td><td></td></tr>"
|
||||
for(var/datum/mind/N in ticker.mode.red_deities)
|
||||
|
||||
@@ -91,7 +91,7 @@
|
||||
|
||||
var/mob/user = usr
|
||||
|
||||
if(!user.canUseTopic(user))
|
||||
if(!user.canUseTopic(src))
|
||||
usr << browse(null, "window=hscan")
|
||||
onclose(usr, "hscan")
|
||||
return
|
||||
@@ -104,4 +104,4 @@
|
||||
return
|
||||
|
||||
attack_self(user)
|
||||
return
|
||||
return
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
return 0 //we're immutable.
|
||||
|
||||
/datum/gas_mixture/space/heat_capacity()
|
||||
. = 700000
|
||||
. = 7000
|
||||
|
||||
/datum/gas_mixture/space/heat_capacity_archived()
|
||||
. = heat_capacity()
|
||||
@@ -57,5 +57,5 @@
|
||||
return 0 //we're immutable.
|
||||
|
||||
/datum/gas_mixture/space/temperature_share(datum/gas_mixture/sharer, conduction_coefficient, sharer_temperature, sharer_heat_capacity)
|
||||
. = ..(sharer, 1, sharer_temperature, sharer_heat_capacity)
|
||||
temperature = TCMB
|
||||
. = ..()
|
||||
temperature = TCMB
|
||||
|
||||
@@ -79,11 +79,12 @@
|
||||
if(ckey)
|
||||
M.ckey = ckey
|
||||
M << "[flavour_text]"
|
||||
var/datum/mind/MM = M.mind
|
||||
if(objectives)
|
||||
var/datum/mind/MM = M.mind
|
||||
for(var/objective in objectives)
|
||||
MM.objectives += new/datum/objective(objective)
|
||||
special(M)
|
||||
MM.name = M.real_name
|
||||
if(uses > 0)
|
||||
uses--
|
||||
if(!permanent && !uses)
|
||||
@@ -458,17 +459,6 @@
|
||||
icon_state = "sleeper"
|
||||
flavour_text = "You are a Nanotrasen Commander!"
|
||||
|
||||
/obj/effect/mob_spawn/human/wwii
|
||||
name = "World War II Reenactor"
|
||||
uniform = /obj/item/clothing/under/wwii
|
||||
shoes = /obj/item/clothing/shoes/combat
|
||||
gloves = /obj/item/clothing/gloves/combat
|
||||
mask = /obj/item/clothing/mask/gas
|
||||
helmet = /obj/item/clothing/head/helmet/stahlhelm
|
||||
back = /obj/item/weapon/storage/backpack/security
|
||||
has_id = 0
|
||||
|
||||
|
||||
/////////////////Spooky Undead//////////////////////
|
||||
|
||||
/obj/effect/mob_spawn/human/skeleton
|
||||
@@ -541,4 +531,4 @@
|
||||
if(despawn == "No" || !loc || !Adjacent(user))
|
||||
return
|
||||
user.visible_message("<span class='notice'>[user.name] climbs back into cryosleep...</span>")
|
||||
qdel(user)
|
||||
qdel(user)
|
||||
|
||||
@@ -460,11 +460,9 @@ BLIND // can't see anything
|
||||
|
||||
/obj/item/clothing/under/AltClick(mob/user)
|
||||
..()
|
||||
if(!user.canUseTopic(user))
|
||||
if(!user.canUseTopic(src, be_close=TRUE))
|
||||
user << "<span class='warning'>You can't do that right now!</span>"
|
||||
return
|
||||
if(!in_range(src, user))
|
||||
return
|
||||
else
|
||||
rolldown()
|
||||
|
||||
|
||||
@@ -260,37 +260,4 @@
|
||||
name = "paper sack hat"
|
||||
desc = "A paper sack with crude holes cut out for eyes and a sketchy smile drawn on the front. Not creepy at all."
|
||||
icon_state = "papersack_smile"
|
||||
flags_inv = HIDEHAIR|HIDEFACE|HIDEEARS
|
||||
|
||||
/*
|
||||
-!WARNING!-
|
||||
-POTENTIAL TRIGGER-INDUCING ITEMS AHEAD-
|
||||
-TREAD WITH CAUTION-
|
||||
*/
|
||||
|
||||
/obj/item/clothing/head/helmet/stahlhelm
|
||||
name = "stahlhelm"
|
||||
desc = "A hard military helmet, seems dusty."
|
||||
icon_state = "stalhelm"
|
||||
item_state = "stalhelm"
|
||||
armor = list(melee = 15, bullet = 10, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
|
||||
strip_delay = 30
|
||||
|
||||
/obj/item/clothing/head/helmet/panzer
|
||||
name = "Panzer Cap"
|
||||
desc = "A fancy-looking military cap."
|
||||
icon_state = "panzercap"
|
||||
item_state = "panzercap"
|
||||
|
||||
/obj/item/clothing/head/helmet/naziofficer
|
||||
name = "Officer Cap"
|
||||
desc = "A cap fit for a commanding officer."
|
||||
icon_state = "officercap"
|
||||
item_state = "officercap"
|
||||
armor = list(melee = 20, bullet = 15, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
|
||||
strip_delay = 60
|
||||
|
||||
/*
|
||||
-YOU HAVE SAFETLY PASSED THE POTENTIALLY-TRIGGERING CONTENT-
|
||||
-PLEASE RESUME NORMAL, POLITICALLY CORRECT ACTIVITY-
|
||||
*/
|
||||
flags_inv = HIDEHAIR|HIDEFACE|HIDEEARS
|
||||
@@ -23,11 +23,9 @@
|
||||
|
||||
/obj/item/clothing/head/soft/AltClick(mob/user)
|
||||
..()
|
||||
if(!user.canUseTopic(user))
|
||||
if(!user.canUseTopic(src, be_close=TRUE))
|
||||
user << "<span class='warning'>You can't do that right now!</span>"
|
||||
return
|
||||
if(!in_range(src, user))
|
||||
return
|
||||
else
|
||||
flip(user)
|
||||
|
||||
|
||||
@@ -18,11 +18,9 @@
|
||||
|
||||
/obj/item/clothing/mask/breath/AltClick(mob/user)
|
||||
..()
|
||||
if(!user.canUseTopic(user))
|
||||
if(!user.canUseTopic(src, be_close=TRUE))
|
||||
user << "<span class='warning'>You can't do that right now!</span>"
|
||||
return
|
||||
if(!in_range(src, user))
|
||||
return
|
||||
else
|
||||
adjustmask(user)
|
||||
|
||||
|
||||
@@ -124,7 +124,8 @@
|
||||
/obj/item/weapon/melee/baton/loaded=1,\
|
||||
/obj/item/clothing/mask/gas/sechailer/swat=1,\
|
||||
/obj/item/weapon/gun/energy/pulse/pistol/loyalpin=1,\
|
||||
/obj/item/weapon/reagent_containers/hypospray/combat/nanites=1)
|
||||
/obj/item/weapon/reagent_containers/hypospray/combat/nanites=1,\
|
||||
/obj/item/weapon/gun/medbeam=1)
|
||||
|
||||
/datum/outfit/ert/engineer
|
||||
name = "ERT Engineer"
|
||||
|
||||
@@ -70,11 +70,9 @@
|
||||
|
||||
/obj/item/clothing/suit/toggle/AltClick(mob/user)
|
||||
..()
|
||||
if(!user.canUseTopic(user))
|
||||
if(!user.canUseTopic(src, be_close=TRUE))
|
||||
user << "<span class='warning'>You can't do that right now!</span>"
|
||||
return
|
||||
if(!in_range(src, user))
|
||||
return
|
||||
else
|
||||
suit_toggle(user)
|
||||
|
||||
|
||||
@@ -12,23 +12,33 @@
|
||||
/obj/item/clothing/under/rank/security
|
||||
name = "security jumpsuit"
|
||||
desc = "A tactical security jumpsuit for officers complete with nanotrasen belt buckle."
|
||||
icon_state = "security"
|
||||
item_state = "gy_suit"
|
||||
item_color = "security"
|
||||
icon_state = "rsecurity"
|
||||
item_state = "r_suit"
|
||||
item_color = "rsecurity"
|
||||
armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
|
||||
strip_delay = 50
|
||||
alt_covers_chest = 1
|
||||
|
||||
/obj/item/clothing/under/rank/security/grey
|
||||
icon_state = "security"
|
||||
item_state = "gy_suit"
|
||||
item_color = "security"
|
||||
|
||||
/obj/item/clothing/under/rank/warden
|
||||
name = "security suit"
|
||||
desc = "A formal security suit for officers complete with nanotrasen belt buckle."
|
||||
icon_state = "warden"
|
||||
item_state = "gy_suit"
|
||||
item_color = "warden"
|
||||
icon_state = "rwarden"
|
||||
item_state = "r_suit"
|
||||
item_color = "rwarden"
|
||||
armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
|
||||
strip_delay = 50
|
||||
alt_covers_chest = 1
|
||||
|
||||
/obj/item/clothing/under/rank/warden/grey
|
||||
icon_state = "warden"
|
||||
item_state = "gy_suit"
|
||||
item_color = "warden"
|
||||
|
||||
/*
|
||||
* Detective
|
||||
*/
|
||||
@@ -56,13 +66,18 @@
|
||||
/obj/item/clothing/under/rank/head_of_security
|
||||
name = "head of security's jumpsuit"
|
||||
desc = "A security jumpsuit decorated for those few with the dedication to achieve the position of Head of Security."
|
||||
icon_state = "hos"
|
||||
item_state = "gy_suit"
|
||||
item_color = "hos"
|
||||
icon_state = "rhos"
|
||||
item_state = "r_suit"
|
||||
item_color = "rhos"
|
||||
armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
|
||||
strip_delay = 60
|
||||
alt_covers_chest = 1
|
||||
|
||||
/obj/item/clothing/under/rank/head_of_security/grey
|
||||
icon_state = "hos"
|
||||
item_state = "gy_suit"
|
||||
item_color = "hos"
|
||||
|
||||
/obj/item/clothing/under/rank/head_of_security/alt
|
||||
name = "head of security's turtleneck"
|
||||
desc = "A stylish alternative to the normal head of security jumpsuit, complete with tactical pants."
|
||||
|
||||
@@ -573,33 +573,3 @@
|
||||
icon_state = "hostanclothes"
|
||||
item_state = "hostanclothes"
|
||||
item_color = "hostanclothes"
|
||||
|
||||
/*
|
||||
-!WARNING!-
|
||||
-POTENTIAL TRIGGER-INDUCING ITEMS AHEAD-
|
||||
-TREAD WITH CAUTION-
|
||||
*/
|
||||
|
||||
/obj/item/clothing/under/wwii
|
||||
name = "dusty uniform"
|
||||
desc = "A dusty old uniform, a relic from a time before."
|
||||
icon_state = "soldieruniform"
|
||||
item_state = "soldieruniform"
|
||||
item_color = "soldieruniform"
|
||||
armor = list(melee = 10, bullet = 5, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
|
||||
strip_delay = 50
|
||||
|
||||
|
||||
/obj/item/clothing/under/wwii/officer
|
||||
name = "dusty uniform"
|
||||
desc = "A dusty old uniform, a relic from a time before. This one looks more official."
|
||||
icon_state = "officeruniform"
|
||||
item_state = "officeruniform"
|
||||
item_color = "officeruniform"
|
||||
armor = list(melee = 15, bullet = 10, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
|
||||
strip_delay = 60
|
||||
|
||||
/*
|
||||
-YOU HAVE SAFETLY PASSED THE POTENTIALLY-TRIGGERING CONTENT-
|
||||
-PLEASE RESUME NORMAL, POLITICALLY CORRECT ACTIVITY-
|
||||
*/
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
role_name = "lone operative"
|
||||
|
||||
/datum/round_event/ghost_role/operative/spawn_role()
|
||||
var/list/candidates = get_candidates("operative", 3000, ROLE_OPERATIVE)
|
||||
var/list/candidates = get_candidates("operative", null, ROLE_OPERATIVE)
|
||||
if(!candidates.len)
|
||||
return NOT_ENOUGH_PLAYERS
|
||||
|
||||
|
||||
+1
-1
@@ -203,7 +203,7 @@
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/holywater/hell
|
||||
desc = "A flask of holy water...it's been sitting in the Necropolis a while though."
|
||||
list_reagents = list("hellwater" = 100)
|
||||
list_reagents = list("hell_water" = 100)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/vermouth
|
||||
name = "Goldeneye Vermouth"
|
||||
+8
-8
@@ -31,7 +31,7 @@
|
||||
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/meat/slab/human
|
||||
name = "-meat"
|
||||
name = " meat"
|
||||
cooked_type = /obj/item/weapon/reagent_containers/food/snacks/meat/steak/plain/human
|
||||
slice_path = /obj/item/weapon/reagent_containers/food/snacks/meat/rawcutlet/plain/human
|
||||
|
||||
@@ -56,19 +56,19 @@
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/meat/slab/human/mutant/slime
|
||||
icon_state = "slimemeat"
|
||||
desc = "Because jello wasn't offensive enough to vegans"
|
||||
desc = "Because jello wasn't offensive enough to vegans."
|
||||
list_reagents = list("nutriment" = 3, "slimejelly" = 3)
|
||||
filling_color = "#00FFFF"
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/meat/slab/human/mutant/golem
|
||||
icon_state = "golemmeat"
|
||||
desc = "Edible rocks, welcome to the future"
|
||||
desc = "Edible rocks, welcome to the future."
|
||||
list_reagents = list("nutriment" = 3, "iron" = 3)
|
||||
filling_color = "#A9A9A9"
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/meat/slab/human/mutant/golem/adamantine
|
||||
icon_state = "agolemmeat"
|
||||
desc = "From the slime pen to the rune to the kitchen, science"
|
||||
desc = "From the slime pen to the rune to the kitchen, science."
|
||||
filling_color = "#66CDAA"
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/meat/slab/human/mutant/lizard
|
||||
@@ -78,7 +78,7 @@
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/meat/slab/human/mutant/plant
|
||||
icon_state = "plantmeat"
|
||||
desc = "All the joys of healthy eating with all the fun of cannibalism"
|
||||
desc = "All the joys of healthy eating with all the fun of cannibalism."
|
||||
filling_color = "#E9967A"
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/meat/slab/human/mutant/shadow
|
||||
@@ -88,18 +88,18 @@
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/meat/slab/human/mutant/fly
|
||||
icon_state = "flymeat"
|
||||
desc = "Nothing says tasty like maggot filled radioactive mutant flesh"
|
||||
desc = "Nothing says tasty like maggot filled radioactive mutant flesh."
|
||||
list_reagents = list("nutriment" = 3, "uranium" = 3)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/meat/slab/human/mutant/skeleton
|
||||
name = "-bone"
|
||||
icon_state = "skeletonmeat"
|
||||
desc = "There's a point where this needs to stop and clearly we have passed it"
|
||||
desc = "There's a point where this needs to stop, and clearly we have passed it."
|
||||
filling_color = "#F0F0F0"
|
||||
slice_path = null //can't slice a bone into cutlets
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/meat/slab/human/mutant/zombie
|
||||
name = "-meat (rotten)"
|
||||
name = " meat (rotten)"
|
||||
icon_state = "lizardmeat" //Close enough.
|
||||
desc = "Halfway to becoming fertilizer for your garden."
|
||||
filling_color = "#6B8E23"
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user