Merge branch 'master' into batch-check-injuries
# Conflicts: # code/modules/mob/living/carbon/human/human_defense.dm
This commit is contained in:
@@ -111,6 +111,9 @@ The use of the : operator to override type safety checks is not allowed. You mus
|
||||
### Type paths must begin with a /
|
||||
eg: `/datum/thing`, not `datum/thing`
|
||||
|
||||
### Type paths must be lowercase
|
||||
eg: `/datum/thing/blue`, not `datum/thing/BLUE` or `datum/thing/Blue`
|
||||
|
||||
### Datum type paths must began with "datum"
|
||||
In DM, this is optional, but omitting it makes finding definitions harder.
|
||||
|
||||
@@ -240,6 +243,8 @@ This prevents nesting levels from getting deeper then they need to be.
|
||||
|
||||
* Queries must never specify the database, be it in code, or in text files in the repo.
|
||||
|
||||
* Primary keys are inherently immutable and you must never do anything to change the primary key of a row or entity. This includes preserving auto increment numbers of rows when copying data to a table in a conversion script. No amount of bitching about gaps in ids or out of order ids will save you from this policy.
|
||||
|
||||
### Mapping Standards
|
||||
* TGM Format & Map Merge
|
||||
* All new maps submitted to the repo through a pull request must be in TGM format (unless there is a valid reason present to have it in the default BYOND format.) This is done using the [Map Merge](https://github.com/tgstation/tgstation/wiki/Map-Merger) utility included in the repo to convert the file to TGM format.
|
||||
|
||||
@@ -1,9 +0,0 @@
|
||||
[Round ID]: # (If you discovered this issue from playing tgstation hosted servers:)
|
||||
[Round ID]: # (**INCLUDE THE ROUND ID**)
|
||||
[Round ID]: # (It can be found in the Status panel or retrieved from https://atlantaned.space/statbus/round.php ! The round id let's us look up valuable information and logs for the round the bug happened.)
|
||||
|
||||
[Testmerges]: # (If you believe the issue to be caused by a test merge [OOC tab -> Show Server Revision], report it in the pull request's comment section instead.)
|
||||
|
||||
[Reproduction]: # (Explain your issue in detail, including the steps to reproduce it. Issues without proper reproduction steps or explanation are open to being ignored/closed by maintainers.)
|
||||
|
||||
[For Admins]: # (Oddities induced by var-edits and other admin tools are not necessarily bugs. Verify that your issues occur under regular circumstances before reporting them.)
|
||||
@@ -0,0 +1,20 @@
|
||||
---
|
||||
name: Bug report
|
||||
about: Create a report to help reproduce and fix the issue
|
||||
---
|
||||
<!-- Write **BELOW** The Headers and **ABOVE** The comments else it may not be viewable -->
|
||||
## Round ID:
|
||||
|
||||
<!--- **INCLUDE THE ROUND ID**
|
||||
If you discovered this issue from playing tgstation hosted servers:
|
||||
[Round ID]: # (It can be found in the Status panel or retrieved from https://atlantaned.space/statbus/round.php ! The round id let's us look up valuable information and logs for the round the bug happened.)-->
|
||||
|
||||
## Testmerges:
|
||||
|
||||
<!-- If you're certain the issue is to be caused by a test merge [OOC tab -> Show Server Revision], report it in the pull request's comment section rather than on the tracker(If you're unsure you can refer to the issue number by prefixing said number with #. The issue number can be found beside the title after submitting it to the tracker).If no testmerges are active, feel free to remove this section. -->
|
||||
|
||||
## Reproduction:
|
||||
|
||||
<!-- Explain your issue in detail, including the steps to reproduce it. Issues without proper reproduction steps or explanation are open to being ignored/closed by maintainers.-->
|
||||
|
||||
<!-- **For Admins:** Oddities induced by var-edits and other admin tools are not necessarily bugs. Verify that your issues occur under regular circumstances before reporting them. -->
|
||||
@@ -0,0 +1,7 @@
|
||||
---
|
||||
name: Feature request
|
||||
about: Suggest an idea for this project
|
||||
|
||||
---
|
||||
|
||||
Please be aware that feature discussions most often take place on the Citadel Station Discord and should not be requested here.
|
||||
@@ -1,6 +1,16 @@
|
||||
[Changelogs]: # (Your PR should contain a detailed changelog of notable changes, titled and categorized appropriately. This includes, new features, sprites, sounds, balance changes, admin tools, map edits, removals, big refactors, config changes, hosting changes and important fixes. An example changelog has been provided below for you to edit. If you need additional help, read https://github.com/tgstation/tgstation/wiki/Changelogs)
|
||||
<!-- Write **BELOW** The Headers and **ABOVE** The comments else it may not be viewable. -->
|
||||
<!-- You can view Contributing.MD for a detailed description of the pull request process. -->
|
||||
|
||||
:cl: optional name here
|
||||
## About The Pull Request
|
||||
|
||||
<!-- Describe The Pull Request. Please be sure every change is documented or this can delay review and even discourage maintainers from merging your PR! -->
|
||||
|
||||
## Why It's Good For The Game
|
||||
|
||||
<!-- Please add a short description of why you think these changes would benefit the game. If you can't justify it in words, it might not be worth adding. -->
|
||||
|
||||
## Changelog
|
||||
:cl:
|
||||
add: Added new things
|
||||
add: Added more things
|
||||
del: Removed old things
|
||||
@@ -19,4 +29,5 @@ admin: messed with admin stuff
|
||||
server: something server ops should know
|
||||
/:cl:
|
||||
|
||||
[why]: # (Please add a short description [two lines down] of why you think these changes would benefit the game. If you can't justify it in words, it might not be worth adding.)
|
||||
<!-- Both :cl:'s are required for the changelog to work! You can put your name to the right of the first :cl: if you want to overwrite your GitHub username as author ingame. -->
|
||||
<!-- You can use multiple of the same prefix (they're only used for the icon ingame) and delete the unneeded ones. Despite some of the tags, changelogs should generally represent how a player might be affected by the changes rather than a summary of the PR's contents. -->
|
||||
|
||||
+4
-1
@@ -1,5 +1,6 @@
|
||||
language: generic
|
||||
sudo: false
|
||||
dist: xenial
|
||||
branches:
|
||||
except:
|
||||
- ___TGS3TempBranch
|
||||
@@ -14,6 +15,7 @@ matrix:
|
||||
packages:
|
||||
- python3
|
||||
- python3-pip
|
||||
- python3-setuptools
|
||||
cache:
|
||||
directories:
|
||||
- tgui/node_modules
|
||||
@@ -43,7 +45,8 @@ matrix:
|
||||
- gcc-multilib
|
||||
- g++-7
|
||||
- g++-7-multilib
|
||||
- libmariadbclient-dev:i386
|
||||
- libmariadb-client-lgpl-dev:i386
|
||||
- libmariadbd-dev
|
||||
cache:
|
||||
directories:
|
||||
- $HOME/.cargo
|
||||
|
||||
@@ -209,6 +209,8 @@
|
||||
dir = 8
|
||||
},
|
||||
/obj/item/malf_upgrade,
|
||||
/obj/item/disk/tech_disk/illegal,
|
||||
/obj/structure/safe,
|
||||
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
|
||||
/area/ruin/unpowered/ash_walkers)
|
||||
"aB" = (
|
||||
|
||||
@@ -272,7 +272,13 @@
|
||||
/obj/machinery/light,
|
||||
/turf/open/floor/plasteel/freezer,
|
||||
/area/ruin/powered/seedvault)
|
||||
|
||||
"Z" = (
|
||||
/obj/item/disk/design_disk/plant_disk,
|
||||
/obj/machinery/autolathe/hacked{
|
||||
desc = "This autolathe seems to have its safety light off."
|
||||
},
|
||||
/turf/open/floor/plasteel/freezer,
|
||||
/area/ruin/powered/seedvault)
|
||||
(1,1,1) = {"
|
||||
a
|
||||
a
|
||||
@@ -375,7 +381,7 @@ h
|
||||
h
|
||||
u
|
||||
R
|
||||
u
|
||||
Z
|
||||
Q
|
||||
a
|
||||
a
|
||||
|
||||
@@ -0,0 +1,711 @@
|
||||
//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
|
||||
"a" = (
|
||||
/turf/template_noop,
|
||||
/area/template_noop)
|
||||
"b" = (
|
||||
/turf/open/floor/plating/asteroid,
|
||||
/area/ruin/powered)
|
||||
"c" = (
|
||||
/turf/closed/mineral/random/high_chance,
|
||||
/area/ruin/powered)
|
||||
"d" = (
|
||||
/turf/closed/wall/mineral/titanium/survival/pod,
|
||||
/area/ruin/powered)
|
||||
"e" = (
|
||||
/obj/machinery/computer/arcade,
|
||||
/turf/open/floor/engine,
|
||||
/area/ruin/powered)
|
||||
"f" = (
|
||||
/obj/machinery/light{
|
||||
dir = 1
|
||||
},
|
||||
/obj/machinery/vending/coffee,
|
||||
/turf/open/floor/engine,
|
||||
/area/ruin/powered)
|
||||
"g" = (
|
||||
/obj/item/coin,
|
||||
/obj/item/toy/plush/random,
|
||||
/turf/open/floor/engine,
|
||||
/area/ruin/powered)
|
||||
"h" = (
|
||||
/obj/effect/mob_spawn/human/corpse/assistant,
|
||||
/obj/effect/decal/cleanable/blood,
|
||||
/obj/item/toy/plush/random,
|
||||
/turf/open/floor/engine,
|
||||
/area/ruin/powered)
|
||||
"i" = (
|
||||
/obj/machinery/light{
|
||||
dir = 4
|
||||
},
|
||||
/obj/item/toy/plush/random,
|
||||
/turf/open/floor/engine,
|
||||
/area/ruin/powered)
|
||||
"j" = (
|
||||
/obj/machinery/light{
|
||||
dir = 8
|
||||
},
|
||||
/turf/open/floor/engine,
|
||||
/area/ruin/powered)
|
||||
"k" = (
|
||||
/obj/item/coin/gold,
|
||||
/turf/open/floor/engine,
|
||||
/area/ruin/powered)
|
||||
"l" = (
|
||||
/turf/open/floor/engine,
|
||||
/area/ruin/powered)
|
||||
"m" = (
|
||||
/obj/item/coin/iron,
|
||||
/turf/open/floor/engine,
|
||||
/area/ruin/powered)
|
||||
"n" = (
|
||||
/obj/item/toy/plush/random,
|
||||
/turf/open/floor/engine,
|
||||
/area/ruin/powered)
|
||||
"o" = (
|
||||
/obj/item/kitchen/knife{
|
||||
pixel_x = 5;
|
||||
pixel_y = 11
|
||||
},
|
||||
/obj/item/toy/plush/random,
|
||||
/turf/open/floor/engine,
|
||||
/area/ruin/powered)
|
||||
"p" = (
|
||||
/turf/closed/wall/mineral/titanium/survival/nodiagonal,
|
||||
/area/ruin/powered)
|
||||
"q" = (
|
||||
/turf/open/floor/light/colour_cycle/dancefloor_b,
|
||||
/area/ruin/powered)
|
||||
"r" = (
|
||||
/turf/open/floor/light/colour_cycle/dancefloor_a,
|
||||
/area/ruin/powered)
|
||||
"s" = (
|
||||
/obj/machinery/door/airlock/external/glass,
|
||||
/obj/structure/fans/tiny,
|
||||
/turf/open/floor/engine,
|
||||
/area/ruin/powered)
|
||||
"t" = (
|
||||
/obj/item/trash/chips,
|
||||
/turf/open/floor/engine,
|
||||
/area/ruin/powered)
|
||||
"u" = (
|
||||
/obj/item/trash/cheesie,
|
||||
/turf/open/floor/engine,
|
||||
/area/ruin/powered)
|
||||
"v" = (
|
||||
/obj/item/coin,
|
||||
/turf/open/floor/engine,
|
||||
/area/ruin/powered)
|
||||
"w" = (
|
||||
/obj/item/coin/diamond,
|
||||
/turf/open/floor/engine,
|
||||
/area/ruin/powered)
|
||||
"x" = (
|
||||
/obj/machinery/jukebox/disco/indestructible,
|
||||
/turf/open/floor/light/colour_cycle/dancefloor_b,
|
||||
/area/ruin/powered)
|
||||
"y" = (
|
||||
/obj/machinery/light,
|
||||
/turf/open/floor/engine,
|
||||
/area/ruin/powered)
|
||||
"z" = (
|
||||
/obj/machinery/light{
|
||||
dir = 4
|
||||
},
|
||||
/turf/open/floor/engine,
|
||||
/area/ruin/powered)
|
||||
"A" = (
|
||||
/obj/machinery/door/airlock/external/glass,
|
||||
/turf/open/floor/engine,
|
||||
/area/ruin/powered)
|
||||
"B" = (
|
||||
/obj/machinery/vending/cola/random,
|
||||
/turf/open/floor/engine,
|
||||
/area/ruin/powered)
|
||||
"C" = (
|
||||
/obj/machinery/vending/snack/random,
|
||||
/turf/open/floor/engine,
|
||||
/area/ruin/powered)
|
||||
"D" = (
|
||||
/obj/item/trash/can,
|
||||
/turf/open/floor/engine,
|
||||
/area/ruin/powered)
|
||||
"E" = (
|
||||
/obj/item/trash/sosjerky,
|
||||
/turf/open/floor/engine,
|
||||
/area/ruin/powered)
|
||||
"F" = (
|
||||
/obj/structure/closet/crate/trashcart,
|
||||
/turf/open/floor/plating/asteroid,
|
||||
/area/ruin/powered)
|
||||
"G" = (
|
||||
/obj/structure/chair/sofa/right,
|
||||
/turf/open/floor/engine,
|
||||
/area/ruin/powered)
|
||||
"H" = (
|
||||
/obj/structure/chair/sofa/left,
|
||||
/obj/item/bedsheet/ian,
|
||||
/turf/open/floor/engine,
|
||||
/area/ruin/powered)
|
||||
"I" = (
|
||||
/obj/item/aiModule/toyAI,
|
||||
/turf/open/floor/engine,
|
||||
/area/ruin/powered)
|
||||
"J" = (
|
||||
/obj/item/twohanded/dualsaber/toy,
|
||||
/turf/open/floor/light/colour_cycle/dancefloor_b,
|
||||
/area/ruin/powered)
|
||||
"K" = (
|
||||
/obj/item/gun/energy/pumpaction/toy,
|
||||
/turf/open/floor/engine,
|
||||
/area/ruin/powered)
|
||||
|
||||
(1,1,1) = {"
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
"}
|
||||
(2,1,1) = {"
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
b
|
||||
b
|
||||
b
|
||||
b
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
"}
|
||||
(3,1,1) = {"
|
||||
a
|
||||
a
|
||||
a
|
||||
b
|
||||
b
|
||||
b
|
||||
b
|
||||
b
|
||||
b
|
||||
b
|
||||
b
|
||||
a
|
||||
a
|
||||
a
|
||||
b
|
||||
b
|
||||
b
|
||||
b
|
||||
a
|
||||
a
|
||||
"}
|
||||
(4,1,1) = {"
|
||||
a
|
||||
a
|
||||
a
|
||||
b
|
||||
b
|
||||
b
|
||||
b
|
||||
b
|
||||
b
|
||||
b
|
||||
b
|
||||
a
|
||||
a
|
||||
b
|
||||
b
|
||||
b
|
||||
b
|
||||
b
|
||||
b
|
||||
a
|
||||
"}
|
||||
(5,1,1) = {"
|
||||
a
|
||||
a
|
||||
a
|
||||
b
|
||||
b
|
||||
c
|
||||
c
|
||||
c
|
||||
c
|
||||
b
|
||||
b
|
||||
b
|
||||
b
|
||||
b
|
||||
b
|
||||
c
|
||||
c
|
||||
c
|
||||
b
|
||||
b
|
||||
"}
|
||||
(6,1,1) = {"
|
||||
a
|
||||
a
|
||||
a
|
||||
b
|
||||
c
|
||||
c
|
||||
c
|
||||
c
|
||||
c
|
||||
b
|
||||
b
|
||||
b
|
||||
b
|
||||
c
|
||||
c
|
||||
c
|
||||
c
|
||||
c
|
||||
c
|
||||
b
|
||||
"}
|
||||
(7,1,1) = {"
|
||||
a
|
||||
a
|
||||
a
|
||||
b
|
||||
c
|
||||
c
|
||||
d
|
||||
d
|
||||
d
|
||||
d
|
||||
d
|
||||
d
|
||||
d
|
||||
d
|
||||
d
|
||||
d
|
||||
c
|
||||
c
|
||||
c
|
||||
b
|
||||
"}
|
||||
(8,1,1) = {"
|
||||
a
|
||||
a
|
||||
a
|
||||
b
|
||||
c
|
||||
c
|
||||
d
|
||||
e
|
||||
j
|
||||
l
|
||||
l
|
||||
K
|
||||
j
|
||||
G
|
||||
B
|
||||
d
|
||||
c
|
||||
c
|
||||
b
|
||||
b
|
||||
"}
|
||||
(9,1,1) = {"
|
||||
a
|
||||
a
|
||||
a
|
||||
b
|
||||
c
|
||||
c
|
||||
d
|
||||
e
|
||||
k
|
||||
l
|
||||
v
|
||||
l
|
||||
l
|
||||
H
|
||||
C
|
||||
d
|
||||
c
|
||||
c
|
||||
b
|
||||
a
|
||||
"}
|
||||
(10,1,1) = {"
|
||||
a
|
||||
a
|
||||
b
|
||||
b
|
||||
c
|
||||
c
|
||||
d
|
||||
e
|
||||
l
|
||||
I
|
||||
l
|
||||
l
|
||||
l
|
||||
k
|
||||
B
|
||||
d
|
||||
c
|
||||
c
|
||||
b
|
||||
a
|
||||
"}
|
||||
(11,1,1) = {"
|
||||
a
|
||||
a
|
||||
b
|
||||
c
|
||||
c
|
||||
c
|
||||
d
|
||||
e
|
||||
l
|
||||
l
|
||||
w
|
||||
l
|
||||
y
|
||||
d
|
||||
d
|
||||
p
|
||||
c
|
||||
b
|
||||
b
|
||||
a
|
||||
"}
|
||||
(12,1,1) = {"
|
||||
a
|
||||
a
|
||||
b
|
||||
c
|
||||
c
|
||||
c
|
||||
d
|
||||
e
|
||||
m
|
||||
J
|
||||
r
|
||||
q
|
||||
l
|
||||
A
|
||||
l
|
||||
s
|
||||
b
|
||||
b
|
||||
b
|
||||
a
|
||||
"}
|
||||
(13,1,1) = {"
|
||||
a
|
||||
b
|
||||
b
|
||||
c
|
||||
c
|
||||
c
|
||||
d
|
||||
f
|
||||
l
|
||||
r
|
||||
x
|
||||
r
|
||||
l
|
||||
d
|
||||
d
|
||||
d
|
||||
b
|
||||
b
|
||||
b
|
||||
a
|
||||
"}
|
||||
(14,1,1) = {"
|
||||
a
|
||||
b
|
||||
b
|
||||
c
|
||||
c
|
||||
c
|
||||
d
|
||||
e
|
||||
l
|
||||
q
|
||||
r
|
||||
q
|
||||
D
|
||||
A
|
||||
l
|
||||
s
|
||||
b
|
||||
b
|
||||
b
|
||||
a
|
||||
"}
|
||||
(15,1,1) = {"
|
||||
a
|
||||
b
|
||||
b
|
||||
b
|
||||
c
|
||||
c
|
||||
d
|
||||
e
|
||||
t
|
||||
u
|
||||
l
|
||||
E
|
||||
y
|
||||
d
|
||||
d
|
||||
p
|
||||
b
|
||||
b
|
||||
b
|
||||
a
|
||||
"}
|
||||
(16,1,1) = {"
|
||||
a
|
||||
b
|
||||
b
|
||||
b
|
||||
c
|
||||
c
|
||||
d
|
||||
e
|
||||
g
|
||||
n
|
||||
t
|
||||
k
|
||||
l
|
||||
l
|
||||
B
|
||||
d
|
||||
c
|
||||
b
|
||||
b
|
||||
a
|
||||
"}
|
||||
(17,1,1) = {"
|
||||
a
|
||||
b
|
||||
b
|
||||
c
|
||||
c
|
||||
c
|
||||
d
|
||||
e
|
||||
h
|
||||
o
|
||||
D
|
||||
l
|
||||
D
|
||||
l
|
||||
C
|
||||
d
|
||||
c
|
||||
c
|
||||
b
|
||||
b
|
||||
"}
|
||||
(18,1,1) = {"
|
||||
a
|
||||
a
|
||||
b
|
||||
c
|
||||
c
|
||||
c
|
||||
d
|
||||
e
|
||||
i
|
||||
n
|
||||
E
|
||||
l
|
||||
z
|
||||
m
|
||||
B
|
||||
d
|
||||
c
|
||||
c
|
||||
c
|
||||
b
|
||||
"}
|
||||
(19,1,1) = {"
|
||||
a
|
||||
a
|
||||
b
|
||||
c
|
||||
c
|
||||
c
|
||||
d
|
||||
d
|
||||
d
|
||||
d
|
||||
d
|
||||
d
|
||||
d
|
||||
d
|
||||
d
|
||||
d
|
||||
c
|
||||
c
|
||||
c
|
||||
b
|
||||
"}
|
||||
(20,1,1) = {"
|
||||
a
|
||||
a
|
||||
b
|
||||
b
|
||||
c
|
||||
c
|
||||
c
|
||||
c
|
||||
c
|
||||
c
|
||||
b
|
||||
F
|
||||
b
|
||||
c
|
||||
c
|
||||
c
|
||||
c
|
||||
c
|
||||
c
|
||||
b
|
||||
"}
|
||||
(21,1,1) = {"
|
||||
a
|
||||
a
|
||||
a
|
||||
b
|
||||
c
|
||||
c
|
||||
c
|
||||
c
|
||||
c
|
||||
c
|
||||
b
|
||||
b
|
||||
b
|
||||
c
|
||||
c
|
||||
c
|
||||
c
|
||||
c
|
||||
b
|
||||
b
|
||||
"}
|
||||
(22,1,1) = {"
|
||||
a
|
||||
a
|
||||
a
|
||||
b
|
||||
b
|
||||
c
|
||||
c
|
||||
c
|
||||
c
|
||||
b
|
||||
b
|
||||
b
|
||||
b
|
||||
b
|
||||
b
|
||||
c
|
||||
c
|
||||
b
|
||||
b
|
||||
a
|
||||
"}
|
||||
(23,1,1) = {"
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
b
|
||||
b
|
||||
b
|
||||
b
|
||||
b
|
||||
b
|
||||
a
|
||||
b
|
||||
b
|
||||
b
|
||||
b
|
||||
b
|
||||
b
|
||||
b
|
||||
a
|
||||
a
|
||||
"}
|
||||
(24,1,1) = {"
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
b
|
||||
b
|
||||
b
|
||||
b
|
||||
b
|
||||
a
|
||||
a
|
||||
a
|
||||
"}
|
||||
(25,1,1) = {"
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
b
|
||||
b
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
"}
|
||||
@@ -0,0 +1,731 @@
|
||||
//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
|
||||
"a" = (
|
||||
/turf/template_noop,
|
||||
/area/template_noop)
|
||||
"b" = (
|
||||
/turf/open/floor/plating/asteroid,
|
||||
/area/ruin/powered)
|
||||
"c" = (
|
||||
/turf/closed/mineral/random/high_chance,
|
||||
/area/ruin/powered)
|
||||
"d" = (
|
||||
/turf/closed/wall/r_wall/rust,
|
||||
/area/ruin/powered)
|
||||
"e" = (
|
||||
/obj/machinery/mecha_part_fabricator,
|
||||
/obj/effect/decal/cleanable/dirt,
|
||||
/turf/open/floor/plasteel,
|
||||
/area/ruin/powered)
|
||||
"f" = (
|
||||
/turf/closed/wall/rust,
|
||||
/area/ruin/powered)
|
||||
"g" = (
|
||||
/obj/structure/table,
|
||||
/obj/effect/decal/cleanable/dirt,
|
||||
/obj/item/stack/sheet/glass/fifty,
|
||||
/obj/item/stack/sheet/metal/fifty,
|
||||
/turf/open/floor/plasteel,
|
||||
/area/ruin/powered)
|
||||
"h" = (
|
||||
/obj/machinery/mecha_part_fabricator,
|
||||
/obj/machinery/light{
|
||||
dir = 1
|
||||
},
|
||||
/obj/effect/decal/cleanable/dirt,
|
||||
/turf/open/floor/plasteel,
|
||||
/area/ruin/powered)
|
||||
"i" = (
|
||||
/obj/structure/table,
|
||||
/obj/machinery/light{
|
||||
dir = 1
|
||||
},
|
||||
/obj/effect/decal/cleanable/dirt,
|
||||
/obj/item/stack/sheet/glass/fifty,
|
||||
/obj/item/stack/sheet/metal/fifty,
|
||||
/turf/open/floor/plasteel,
|
||||
/area/ruin/powered)
|
||||
"j" = (
|
||||
/obj/structure/chair/sofa/right,
|
||||
/obj/effect/decal/cleanable/dirt,
|
||||
/turf/open/floor/plasteel,
|
||||
/area/ruin/powered)
|
||||
"k" = (
|
||||
/turf/open/floor/plasteel,
|
||||
/area/ruin/powered)
|
||||
"l" = (
|
||||
/obj/structure/chair/sofa/left,
|
||||
/obj/effect/decal/cleanable/dirt,
|
||||
/turf/open/floor/plasteel,
|
||||
/area/ruin/powered)
|
||||
"m" = (
|
||||
/obj/machinery/computer/rdconsole/production{
|
||||
dir = 4
|
||||
},
|
||||
/obj/effect/decal/cleanable/dirt,
|
||||
/turf/open/floor/plasteel,
|
||||
/area/ruin/powered)
|
||||
"n" = (
|
||||
/obj/effect/decal/cleanable/oil/streak,
|
||||
/obj/effect/decal/cleanable/dirt,
|
||||
/turf/open/floor/plasteel,
|
||||
/area/ruin/powered)
|
||||
"o" = (
|
||||
/obj/effect/decal/cleanable/dirt,
|
||||
/obj/effect/decal/cleanable/dirt,
|
||||
/turf/open/floor/plasteel,
|
||||
/area/ruin/powered)
|
||||
"p" = (
|
||||
/obj/effect/decal/cleanable/dirt,
|
||||
/turf/open/floor/plasteel,
|
||||
/area/ruin/powered)
|
||||
"q" = (
|
||||
/obj/machinery/light{
|
||||
dir = 8
|
||||
},
|
||||
/obj/effect/decal/cleanable/dirt,
|
||||
/obj/machinery/aug_manipulator,
|
||||
/turf/open/floor/plasteel,
|
||||
/area/ruin/powered)
|
||||
"r" = (
|
||||
/obj/structure/table,
|
||||
/obj/effect/decal/cleanable/dirt,
|
||||
/obj/item/organ/cyberimp/chest/reviver,
|
||||
/turf/open/floor/plasteel,
|
||||
/area/ruin/powered)
|
||||
"s" = (
|
||||
/obj/structure/table,
|
||||
/obj/effect/decal/cleanable/dirt,
|
||||
/obj/item/organ/cyberimp/arm/surgery,
|
||||
/turf/open/floor/plasteel,
|
||||
/area/ruin/powered)
|
||||
"t" = (
|
||||
/obj/structure/table,
|
||||
/obj/effect/decal/cleanable/dirt,
|
||||
/obj/item/storage/backpack/duffelbag/med/surgery,
|
||||
/turf/open/floor/plasteel,
|
||||
/area/ruin/powered)
|
||||
"u" = (
|
||||
/obj/machinery/light{
|
||||
dir = 4
|
||||
},
|
||||
/obj/effect/decal/cleanable/dirt,
|
||||
/turf/open/floor/plasteel,
|
||||
/area/ruin/powered)
|
||||
"v" = (
|
||||
/obj/machinery/porta_turret/syndicate/energy{
|
||||
mode = 1
|
||||
},
|
||||
/turf/closed/wall/r_wall/rust,
|
||||
/area/ruin/powered)
|
||||
"w" = (
|
||||
/obj/effect/decal/cleanable/dirt,
|
||||
/obj/machinery/computer/mech_bay_power_console{
|
||||
dir = 4
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
/area/ruin/powered)
|
||||
"x" = (
|
||||
/obj/effect/decal/cleanable/oil,
|
||||
/obj/effect/decal/cleanable/dirt,
|
||||
/turf/open/floor/plasteel,
|
||||
/area/ruin/powered)
|
||||
"y" = (
|
||||
/obj/effect/decal/cleanable/dirt,
|
||||
/obj/effect/decal/cleanable/dirt,
|
||||
/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer1,
|
||||
/turf/open/floor/plasteel,
|
||||
/area/ruin/powered)
|
||||
"z" = (
|
||||
/obj/structure/table,
|
||||
/obj/effect/decal/cleanable/dirt,
|
||||
/obj/item/storage/belt/utility/full,
|
||||
/obj/item/clothing/glasses/welding,
|
||||
/turf/open/floor/plasteel,
|
||||
/area/ruin/powered)
|
||||
"A" = (
|
||||
/obj/structure/table,
|
||||
/obj/effect/decal/cleanable/dirt,
|
||||
/obj/item/mmi/posibrain{
|
||||
pixel_y = 9
|
||||
},
|
||||
/obj/item/mmi,
|
||||
/turf/open/floor/plasteel,
|
||||
/area/ruin/powered)
|
||||
"B" = (
|
||||
/obj/structure/table/optable,
|
||||
/obj/effect/decal/cleanable/dirt,
|
||||
/turf/open/floor/plasteel,
|
||||
/area/ruin/powered)
|
||||
"C" = (
|
||||
/obj/machinery/mech_bay_recharge_port,
|
||||
/obj/effect/decal/cleanable/dirt,
|
||||
/turf/open/floor/plasteel,
|
||||
/area/ruin/powered)
|
||||
"D" = (
|
||||
/obj/effect/decal/cleanable/dirt,
|
||||
/turf/open/floor/mech_bay_recharge_floor,
|
||||
/area/ruin/powered)
|
||||
"E" = (
|
||||
/obj/machinery/computer/operating{
|
||||
dir = 1
|
||||
},
|
||||
/obj/effect/decal/cleanable/dirt,
|
||||
/turf/open/floor/plasteel,
|
||||
/area/ruin/powered)
|
||||
"F" = (
|
||||
/obj/structure/table,
|
||||
/obj/effect/decal/cleanable/dirt,
|
||||
/obj/item/autosurgeon{
|
||||
name = "rusted autosurgeon";
|
||||
desc = "A device that automatically inserts an implant or organ into the user without the hassle of extensive surgery. It has a slot to insert an organ of implant. But this rusted version looks like it could only manage one implant....";
|
||||
uses = 1
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
/area/ruin/powered)
|
||||
"G" = (
|
||||
/obj/machinery/light,
|
||||
/obj/effect/decal/cleanable/dirt,
|
||||
/obj/machinery/airalarm{
|
||||
dir = 1;
|
||||
pixel_y = -22
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
/area/ruin/powered)
|
||||
"H" = (
|
||||
/obj/effect/decal/cleanable/oil,
|
||||
/obj/machinery/light,
|
||||
/obj/effect/decal/cleanable/dirt,
|
||||
/turf/open/floor/plasteel,
|
||||
/area/ruin/powered)
|
||||
"I" = (
|
||||
/obj/machinery/door/airlock/external/glass,
|
||||
/turf/open/floor/plasteel,
|
||||
/area/ruin/powered)
|
||||
"J" = (
|
||||
/obj/machinery/atmospherics/components/unary/outlet_injector/on/layer1{
|
||||
dir = 4
|
||||
},
|
||||
/turf/open/floor/plating/asteroid,
|
||||
/area/ruin/powered)
|
||||
"K" = (
|
||||
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1{
|
||||
dir = 4
|
||||
},
|
||||
/turf/closed/mineral/random/high_chance,
|
||||
/area/ruin/powered)
|
||||
"L" = (
|
||||
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1{
|
||||
dir = 4
|
||||
},
|
||||
/turf/closed/wall/r_wall/rust,
|
||||
/area/ruin/powered)
|
||||
"M" = (
|
||||
/obj/structure/mecha_wreckage/ripley,
|
||||
/obj/effect/decal/cleanable/dirt,
|
||||
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1{
|
||||
dir = 4
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
/area/ruin/powered)
|
||||
"N" = (
|
||||
/obj/effect/decal/cleanable/dirt,
|
||||
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1{
|
||||
dir = 4
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
/area/ruin/powered)
|
||||
"O" = (
|
||||
/obj/machinery/turretid{
|
||||
lethal = 1;
|
||||
pixel_y = -25;
|
||||
req_access = null
|
||||
},
|
||||
/obj/effect/decal/cleanable/dirt,
|
||||
/obj/machinery/atmospherics/pipe/simple/cyan/hidden{
|
||||
dir = 5
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
/area/ruin/powered)
|
||||
"P" = (
|
||||
/obj/effect/decal/cleanable/dirt,
|
||||
/obj/machinery/atmospherics/components/unary/vent_pump/on,
|
||||
/turf/open/floor/plasteel,
|
||||
/area/ruin/powered)
|
||||
"Q" = (
|
||||
/obj/effect/decal/cleanable/dirt,
|
||||
/obj/effect/decal/cleanable/dirt,
|
||||
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1{
|
||||
dir = 1
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
/area/ruin/powered)
|
||||
"R" = (
|
||||
/obj/effect/decal/cleanable/dirt,
|
||||
/obj/machinery/atmospherics/pipe/simple/cyan/hidden,
|
||||
/turf/open/floor/plasteel,
|
||||
/area/ruin/powered)
|
||||
"S" = (
|
||||
/obj/effect/decal/cleanable/dirt,
|
||||
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1{
|
||||
dir = 9
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
/area/ruin/powered)
|
||||
"T" = (
|
||||
/obj/effect/decal/cleanable/dirt,
|
||||
/obj/machinery/atmospherics/components/unary/tank/air{
|
||||
dir = 8
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
/area/ruin/powered)
|
||||
"U" = (
|
||||
/obj/machinery/door/airlock/external/glass,
|
||||
/obj/structure/fans/tiny,
|
||||
/turf/open/floor/plasteel,
|
||||
/area/ruin/powered)
|
||||
"V" = (
|
||||
/obj/effect/decal/cleanable/dirt,
|
||||
/obj/structure/reagent_dispensers/fueltank,
|
||||
/turf/open/floor/plasteel,
|
||||
/area/ruin/powered)
|
||||
|
||||
(1,1,1) = {"
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
"}
|
||||
(2,1,1) = {"
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
b
|
||||
b
|
||||
b
|
||||
b
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
"}
|
||||
(3,1,1) = {"
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
b
|
||||
b
|
||||
c
|
||||
c
|
||||
c
|
||||
c
|
||||
J
|
||||
b
|
||||
b
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
"}
|
||||
(4,1,1) = {"
|
||||
a
|
||||
a
|
||||
a
|
||||
b
|
||||
c
|
||||
c
|
||||
c
|
||||
c
|
||||
c
|
||||
c
|
||||
K
|
||||
c
|
||||
b
|
||||
b
|
||||
b
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
"}
|
||||
(5,1,1) = {"
|
||||
a
|
||||
a
|
||||
b
|
||||
c
|
||||
c
|
||||
d
|
||||
d
|
||||
d
|
||||
d
|
||||
d
|
||||
L
|
||||
d
|
||||
c
|
||||
c
|
||||
b
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
"}
|
||||
(6,1,1) = {"
|
||||
a
|
||||
a
|
||||
b
|
||||
c
|
||||
d
|
||||
d
|
||||
m
|
||||
q
|
||||
w
|
||||
C
|
||||
M
|
||||
d
|
||||
d
|
||||
c
|
||||
b
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
"}
|
||||
(7,1,1) = {"
|
||||
a
|
||||
b
|
||||
b
|
||||
c
|
||||
d
|
||||
e
|
||||
n
|
||||
o
|
||||
x
|
||||
D
|
||||
N
|
||||
f
|
||||
d
|
||||
v
|
||||
b
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
"}
|
||||
(8,1,1) = {"
|
||||
a
|
||||
b
|
||||
c
|
||||
c
|
||||
d
|
||||
g
|
||||
o
|
||||
o
|
||||
y
|
||||
Q
|
||||
S
|
||||
I
|
||||
k
|
||||
U
|
||||
b
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
"}
|
||||
(9,1,1) = {"
|
||||
a
|
||||
b
|
||||
c
|
||||
c
|
||||
d
|
||||
h
|
||||
p
|
||||
r
|
||||
z
|
||||
o
|
||||
G
|
||||
f
|
||||
f
|
||||
d
|
||||
b
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
"}
|
||||
(10,1,1) = {"
|
||||
a
|
||||
b
|
||||
c
|
||||
c
|
||||
d
|
||||
i
|
||||
p
|
||||
s
|
||||
A
|
||||
o
|
||||
H
|
||||
f
|
||||
f
|
||||
d
|
||||
b
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
"}
|
||||
(11,1,1) = {"
|
||||
a
|
||||
b
|
||||
c
|
||||
c
|
||||
d
|
||||
j
|
||||
p
|
||||
t
|
||||
F
|
||||
o
|
||||
p
|
||||
I
|
||||
k
|
||||
U
|
||||
b
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
"}
|
||||
(12,1,1) = {"
|
||||
a
|
||||
b
|
||||
c
|
||||
c
|
||||
d
|
||||
l
|
||||
p
|
||||
p
|
||||
P
|
||||
R
|
||||
O
|
||||
f
|
||||
d
|
||||
v
|
||||
b
|
||||
b
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
"}
|
||||
(13,1,1) = {"
|
||||
a
|
||||
b
|
||||
b
|
||||
c
|
||||
d
|
||||
d
|
||||
V
|
||||
u
|
||||
B
|
||||
E
|
||||
T
|
||||
d
|
||||
d
|
||||
c
|
||||
c
|
||||
b
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
"}
|
||||
(14,1,1) = {"
|
||||
a
|
||||
a
|
||||
b
|
||||
c
|
||||
c
|
||||
d
|
||||
d
|
||||
d
|
||||
d
|
||||
d
|
||||
d
|
||||
d
|
||||
c
|
||||
c
|
||||
c
|
||||
b
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
"}
|
||||
(15,1,1) = {"
|
||||
a
|
||||
a
|
||||
a
|
||||
b
|
||||
c
|
||||
c
|
||||
c
|
||||
c
|
||||
c
|
||||
c
|
||||
c
|
||||
c
|
||||
c
|
||||
c
|
||||
b
|
||||
b
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
"}
|
||||
(16,1,1) = {"
|
||||
a
|
||||
a
|
||||
a
|
||||
b
|
||||
b
|
||||
b
|
||||
b
|
||||
c
|
||||
c
|
||||
c
|
||||
c
|
||||
b
|
||||
b
|
||||
b
|
||||
b
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
"}
|
||||
(17,1,1) = {"
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
b
|
||||
b
|
||||
b
|
||||
b
|
||||
b
|
||||
b
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
"}
|
||||
(18,1,1) = {"
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
"}
|
||||
(19,1,1) = {"
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
"}
|
||||
(20,1,1) = {"
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
"}
|
||||
@@ -0,0 +1,196 @@
|
||||
//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
|
||||
"a" = (
|
||||
/turf/template_noop,
|
||||
/area/template_noop)
|
||||
"b" = (
|
||||
/obj/structure/lattice,
|
||||
/turf/template_noop,
|
||||
/area/template_noop)
|
||||
"c" = (
|
||||
/turf/open/floor/plating/beach/sand,
|
||||
/area/ruin/powered)
|
||||
"d" = (
|
||||
/obj/structure/fans/tiny/invisible,
|
||||
/turf/open/floor/plating/beach/sand,
|
||||
/area/ruin/powered)
|
||||
"e" = (
|
||||
/obj/item/reagent_containers/food/snacks/grown/banana,
|
||||
/obj/item/reagent_containers/food/snacks/grown/banana,
|
||||
/obj/item/reagent_containers/food/snacks/grown/banana,
|
||||
/obj/item/reagent_containers/food/snacks/grown/banana,
|
||||
/obj/item/reagent_containers/food/snacks/grown/banana,
|
||||
/obj/structure/fans/tiny/invisible,
|
||||
/obj/structure/closet/secure_closet/freezer,
|
||||
/turf/open/floor/plating/beach/sand,
|
||||
/area/ruin/powered)
|
||||
"f" = (
|
||||
/obj/structure/chair/sofa/left{
|
||||
dir = 4
|
||||
},
|
||||
/turf/open/floor/plating/beach/sand,
|
||||
/area/ruin/powered)
|
||||
"g" = (
|
||||
/obj/item/flashlight/lamp/bananalamp{
|
||||
brightness_on = 10
|
||||
},
|
||||
/obj/structure/table/wood,
|
||||
/obj/structure/fans/tiny/invisible,
|
||||
/turf/open/floor/plating/beach/sand,
|
||||
/area/ruin/powered)
|
||||
"h" = (
|
||||
/obj/structure/table/wood,
|
||||
/obj/machinery/computer/security/wooden_tv,
|
||||
/turf/open/floor/plating/beach/sand,
|
||||
/area/ruin/powered)
|
||||
"i" = (
|
||||
/obj/structure/chair/sofa/right{
|
||||
dir = 4
|
||||
},
|
||||
/turf/open/floor/plating/beach/sand,
|
||||
/area/ruin/powered)
|
||||
"j" = (
|
||||
/obj/structure/sink/puddle,
|
||||
/turf/open/floor/plating/beach/sand,
|
||||
/area/ruin/powered)
|
||||
"k" = (
|
||||
/obj/structure/chair/sofa{
|
||||
dir = 4
|
||||
},
|
||||
/mob/living/simple_animal/hostile/gorilla{
|
||||
AIStatus = null;
|
||||
desc = "There is no need to be upset.";
|
||||
dir = 4;
|
||||
name = "Familiar Gorilla"
|
||||
},
|
||||
/turf/open/floor/plating/beach/sand,
|
||||
/area/ruin/powered)
|
||||
"l" = (
|
||||
/obj/effect/overlay/palmtree_r,
|
||||
/obj/structure/fans/tiny/invisible,
|
||||
/turf/open/floor/plating/beach/sand,
|
||||
/area/ruin/powered)
|
||||
"m" = (
|
||||
/obj/item/grown/bananapeel,
|
||||
/turf/open/floor/plating/beach/sand,
|
||||
/area/ruin/powered)
|
||||
|
||||
(1,1,1) = {"
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
b
|
||||
a
|
||||
"}
|
||||
(2,1,1) = {"
|
||||
a
|
||||
a
|
||||
b
|
||||
b
|
||||
b
|
||||
b
|
||||
b
|
||||
b
|
||||
a
|
||||
a
|
||||
"}
|
||||
(3,1,1) = {"
|
||||
a
|
||||
a
|
||||
b
|
||||
b
|
||||
g
|
||||
d
|
||||
d
|
||||
b
|
||||
b
|
||||
a
|
||||
"}
|
||||
(4,1,1) = {"
|
||||
a
|
||||
a
|
||||
b
|
||||
d
|
||||
f
|
||||
k
|
||||
i
|
||||
d
|
||||
d
|
||||
b
|
||||
"}
|
||||
(5,1,1) = {"
|
||||
a
|
||||
a
|
||||
b
|
||||
e
|
||||
c
|
||||
c
|
||||
m
|
||||
j
|
||||
d
|
||||
b
|
||||
"}
|
||||
(6,1,1) = {"
|
||||
a
|
||||
a
|
||||
b
|
||||
d
|
||||
c
|
||||
h
|
||||
c
|
||||
l
|
||||
d
|
||||
b
|
||||
"}
|
||||
(7,1,1) = {"
|
||||
a
|
||||
b
|
||||
b
|
||||
b
|
||||
d
|
||||
d
|
||||
d
|
||||
b
|
||||
b
|
||||
a
|
||||
"}
|
||||
(8,1,1) = {"
|
||||
a
|
||||
b
|
||||
a
|
||||
a
|
||||
b
|
||||
b
|
||||
b
|
||||
b
|
||||
b
|
||||
b
|
||||
"}
|
||||
(9,1,1) = {"
|
||||
a
|
||||
b
|
||||
a
|
||||
a
|
||||
a
|
||||
b
|
||||
a
|
||||
a
|
||||
a
|
||||
b
|
||||
"}
|
||||
(10,1,1) = {"
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
b
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
"}
|
||||
@@ -2183,9 +2183,7 @@
|
||||
/obj/effect/turf_decal/tile/purple{
|
||||
dir = 8
|
||||
},
|
||||
/turf/open/floor/plasteel/white{
|
||||
icon_state = "whitepurple"
|
||||
},
|
||||
/turf/open/floor/plasteel/white,
|
||||
/area/ruin/space/has_grav/ancientstation/rnd)
|
||||
"fU" = (
|
||||
/obj/effect/decal/cleanable/dirt,
|
||||
|
||||
@@ -742,6 +742,7 @@
|
||||
/turf/open/indestructible/paper,
|
||||
/area/ruin/powered)
|
||||
"cc" = (
|
||||
/obj/item/book/granter/action/origami,
|
||||
/mob/living/simple_animal/hostile/boss/paper_wizard,
|
||||
/turf/open/indestructible/paper,
|
||||
/area/ruin/powered)
|
||||
@@ -912,6 +913,10 @@
|
||||
},
|
||||
/turf/open/indestructible/paper,
|
||||
/area/ruin/powered)
|
||||
"Ns" = (
|
||||
/obj/item/paper/secretrecipe,
|
||||
/turf/open/indestructible/paper,
|
||||
/area/ruin/powered)
|
||||
|
||||
(1,1,1) = {"
|
||||
aa
|
||||
@@ -2246,7 +2251,7 @@ ap
|
||||
az
|
||||
af
|
||||
al
|
||||
aA
|
||||
Ns
|
||||
bW
|
||||
ca
|
||||
af
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -509,7 +509,9 @@
|
||||
/obj/machinery/button/door{
|
||||
id = "a3";
|
||||
name = "privacy button";
|
||||
pixel_y = -24
|
||||
normaldoorcontrol = 1;
|
||||
pixel_y = -24;
|
||||
specialfunctions = 4
|
||||
},
|
||||
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
|
||||
/turf/open/floor/wood,
|
||||
@@ -557,7 +559,9 @@
|
||||
/obj/machinery/button/door{
|
||||
id = "a4";
|
||||
name = "privacy button";
|
||||
pixel_y = -24
|
||||
normaldoorcontrol = 1;
|
||||
pixel_y = -24;
|
||||
specialfunctions = 4
|
||||
},
|
||||
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
|
||||
/turf/open/floor/wood,
|
||||
@@ -605,7 +609,9 @@
|
||||
/obj/machinery/button/door{
|
||||
id = "a5";
|
||||
name = "privacy button";
|
||||
pixel_y = -24
|
||||
normaldoorcontrol = 1;
|
||||
pixel_y = -24;
|
||||
specialfunctions = 4
|
||||
},
|
||||
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
|
||||
/turf/open/floor/wood,
|
||||
@@ -653,7 +659,9 @@
|
||||
/obj/machinery/button/door{
|
||||
id = "a6";
|
||||
name = "privacy button";
|
||||
pixel_y = -24
|
||||
normaldoorcontrol = 1;
|
||||
pixel_y = -24;
|
||||
specialfunctions = 4
|
||||
},
|
||||
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
|
||||
/turf/open/floor/wood,
|
||||
@@ -1097,7 +1105,9 @@
|
||||
/obj/machinery/button/door{
|
||||
id = "a2";
|
||||
name = "privacy button";
|
||||
pixel_y = 24
|
||||
normaldoorcontrol = 1;
|
||||
pixel_y = 24;
|
||||
specialfunctions = 4
|
||||
},
|
||||
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
|
||||
/turf/open/floor/wood,
|
||||
@@ -1159,7 +1169,9 @@
|
||||
/obj/machinery/button/door{
|
||||
id = "a1";
|
||||
name = "privacy button";
|
||||
pixel_y = 24
|
||||
normaldoorcontrol = 1;
|
||||
pixel_y = 24;
|
||||
specialfunctions = 4
|
||||
},
|
||||
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
|
||||
/turf/open/floor/wood,
|
||||
@@ -1807,7 +1819,9 @@
|
||||
/area/ruin/space/has_grav/hotel/bar)
|
||||
"fE" = (
|
||||
/obj/machinery/vending/boozeomat{
|
||||
req_access_txt = "200"
|
||||
extended_inventory = 1;
|
||||
req_access_txt = "200";
|
||||
scan_id = 0
|
||||
},
|
||||
/obj/effect/turf_decal/tile/bar,
|
||||
/obj/effect/turf_decal/tile/bar{
|
||||
@@ -4496,7 +4510,6 @@
|
||||
/turf/closed/wall,
|
||||
/area/ruin/space/has_grav/hotel/custodial)
|
||||
"me" = (
|
||||
/mob/living/simple_animal/bot/cleanbot,
|
||||
/obj/effect/turf_decal/tile/neutral{
|
||||
dir = 1
|
||||
},
|
||||
@@ -4507,6 +4520,7 @@
|
||||
/obj/effect/turf_decal/tile/neutral{
|
||||
dir = 8
|
||||
},
|
||||
/mob/living/simple_animal/bot/cleanbot,
|
||||
/turf/open/floor/plasteel,
|
||||
/area/ruin/space/has_grav/hotel/custodial)
|
||||
"mf" = (
|
||||
|
||||
@@ -41,6 +41,24 @@
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
/area/crew_quarters/bar)
|
||||
"aad" = (
|
||||
/obj/structure/bed,
|
||||
/obj/machinery/airalarm{
|
||||
pixel_y = 23
|
||||
},
|
||||
/obj/machinery/button/door{
|
||||
id = "Dorm4";
|
||||
name = "Dorm Bolt Control";
|
||||
normaldoorcontrol = 1;
|
||||
pixel_x = 25;
|
||||
specialfunctions = 4
|
||||
},
|
||||
/obj/machinery/atmospherics/components/unary/vent_pump/on{
|
||||
dir = 4
|
||||
},
|
||||
/obj/effect/spawner/lootdrop/bedsheet,
|
||||
/turf/open/floor/carpet,
|
||||
/area/crew_quarters/dorms)
|
||||
"aae" = (
|
||||
/obj/effect/landmark/carpspawn,
|
||||
/turf/open/space,
|
||||
@@ -515,10 +533,13 @@
|
||||
/turf/closed/wall,
|
||||
/area/security/main)
|
||||
"abq" = (
|
||||
/turf/closed/wall,
|
||||
/turf/closed/wall/r_wall,
|
||||
/area/crew_quarters/heads/hos)
|
||||
"abr" = (
|
||||
/obj/effect/spawner/structure/window/reinforced,
|
||||
/obj/machinery/door/poddoor/preopen{
|
||||
id = "hos"
|
||||
},
|
||||
/turf/open/floor/plating,
|
||||
/area/crew_quarters/heads/hos)
|
||||
"abs" = (
|
||||
@@ -574,6 +595,19 @@
|
||||
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
|
||||
/turf/closed/wall/r_wall,
|
||||
/area/security/execution/transfer)
|
||||
"abz" = (
|
||||
/obj/structure/bed,
|
||||
/obj/machinery/button/door{
|
||||
id = "Dorm5";
|
||||
name = "Cabin Bolt Control";
|
||||
normaldoorcontrol = 1;
|
||||
pixel_y = -25;
|
||||
specialfunctions = 4
|
||||
},
|
||||
/obj/machinery/atmospherics/components/unary/vent_scrubber/on,
|
||||
/obj/effect/spawner/lootdrop/bedsheet,
|
||||
/turf/open/floor/wood,
|
||||
/area/crew_quarters/dorms)
|
||||
"abA" = (
|
||||
/obj/machinery/light,
|
||||
/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
|
||||
@@ -846,8 +880,13 @@
|
||||
},
|
||||
/obj/structure/table/wood,
|
||||
/obj/item/reagent_containers/food/drinks/bottle/vodka/badminka,
|
||||
/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass,
|
||||
/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass,
|
||||
/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass{
|
||||
pixel_x = -5;
|
||||
pixel_y = 5
|
||||
},
|
||||
/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass{
|
||||
pixel_x = -5
|
||||
},
|
||||
/turf/open/floor/carpet,
|
||||
/area/crew_quarters/heads/hos)
|
||||
"abX" = (
|
||||
@@ -1449,6 +1488,9 @@
|
||||
"adm" = (
|
||||
/obj/structure/disposalpipe/segment,
|
||||
/obj/effect/spawner/structure/window/reinforced,
|
||||
/obj/machinery/door/poddoor/preopen{
|
||||
id = "hos"
|
||||
},
|
||||
/turf/open/floor/plating,
|
||||
/area/crew_quarters/heads/hos)
|
||||
"adn" = (
|
||||
@@ -1674,6 +1716,11 @@
|
||||
/obj/structure/cable{
|
||||
icon_state = "4-8"
|
||||
},
|
||||
/obj/machinery/button/door{
|
||||
id = "hos";
|
||||
name = "HoS Office Shutters";
|
||||
pixel_y = -25
|
||||
},
|
||||
/turf/open/floor/carpet,
|
||||
/area/crew_quarters/heads/hos)
|
||||
"adN" = (
|
||||
@@ -2053,6 +2100,9 @@
|
||||
"aex" = (
|
||||
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
|
||||
/obj/effect/spawner/structure/window/reinforced,
|
||||
/obj/machinery/door/poddoor/preopen{
|
||||
id = "hos"
|
||||
},
|
||||
/turf/open/floor/plating,
|
||||
/area/crew_quarters/heads/hos)
|
||||
"aey" = (
|
||||
@@ -2099,6 +2149,55 @@
|
||||
},
|
||||
/turf/open/floor/plating,
|
||||
/area/maintenance/fore/secondary)
|
||||
"aeD" = (
|
||||
/obj/structure/bed,
|
||||
/obj/machinery/button/door{
|
||||
id = "Dorm6";
|
||||
name = "Cabin Bolt Control";
|
||||
normaldoorcontrol = 1;
|
||||
pixel_y = -25;
|
||||
specialfunctions = 4
|
||||
},
|
||||
/obj/machinery/atmospherics/components/unary/vent_scrubber/on,
|
||||
/obj/effect/spawner/lootdrop/bedsheet,
|
||||
/turf/open/floor/wood,
|
||||
/area/crew_quarters/dorms)
|
||||
"aeE" = (
|
||||
/obj/structure/bed,
|
||||
/obj/machinery/airalarm{
|
||||
pixel_y = 23
|
||||
},
|
||||
/obj/machinery/button/door{
|
||||
id = "Dorm3";
|
||||
name = "Dorm Bolt Control";
|
||||
normaldoorcontrol = 1;
|
||||
pixel_x = 25;
|
||||
specialfunctions = 4
|
||||
},
|
||||
/obj/machinery/atmospherics/components/unary/vent_pump/on{
|
||||
dir = 4
|
||||
},
|
||||
/obj/effect/spawner/lootdrop/bedsheet,
|
||||
/turf/open/floor/carpet,
|
||||
/area/crew_quarters/dorms)
|
||||
"aeF" = (
|
||||
/obj/structure/bed,
|
||||
/obj/machinery/airalarm{
|
||||
pixel_y = 23
|
||||
},
|
||||
/obj/machinery/button/door{
|
||||
id = "Dorm2";
|
||||
name = "Dorm Bolt Control";
|
||||
normaldoorcontrol = 1;
|
||||
pixel_x = 25;
|
||||
specialfunctions = 4
|
||||
},
|
||||
/obj/machinery/atmospherics/components/unary/vent_pump/on{
|
||||
dir = 4
|
||||
},
|
||||
/obj/effect/spawner/lootdrop/bedsheet,
|
||||
/turf/open/floor/carpet,
|
||||
/area/crew_quarters/dorms)
|
||||
"aeG" = (
|
||||
/obj/structure/cable,
|
||||
/obj/machinery/power/solar{
|
||||
@@ -2475,6 +2574,11 @@
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
/area/security/main)
|
||||
"afn" = (
|
||||
/obj/structure/bed,
|
||||
/obj/item/bedsheet/medical,
|
||||
/turf/open/floor/plasteel/white,
|
||||
/area/medical/virology)
|
||||
"afo" = (
|
||||
/obj/machinery/door/airlock/external{
|
||||
name = "Escape Pod Three"
|
||||
@@ -2495,6 +2599,14 @@
|
||||
},
|
||||
/turf/open/space/basic,
|
||||
/area/space)
|
||||
"afq" = (
|
||||
/obj/structure/bed,
|
||||
/obj/item/tank/internals/anesthetic,
|
||||
/obj/item/clothing/mask/breath,
|
||||
/obj/effect/decal/cleanable/semen,
|
||||
/obj/effect/spawner/lootdrop/bedsheet,
|
||||
/turf/open/floor/plating,
|
||||
/area/maintenance/bar)
|
||||
"aft" = (
|
||||
/obj/machinery/atmospherics/pipe/simple/general/visible{
|
||||
dir = 5
|
||||
@@ -7391,24 +7503,6 @@
|
||||
},
|
||||
/turf/open/floor/plating,
|
||||
/area/maintenance/fore/secondary)
|
||||
"aqn" = (
|
||||
/obj/structure/bed,
|
||||
/obj/item/bedsheet,
|
||||
/obj/machinery/airalarm{
|
||||
pixel_y = 23
|
||||
},
|
||||
/obj/machinery/button/door{
|
||||
id = "Dorm4";
|
||||
name = "Dorm Bolt Control";
|
||||
normaldoorcontrol = 1;
|
||||
pixel_x = 25;
|
||||
specialfunctions = 4
|
||||
},
|
||||
/obj/machinery/atmospherics/components/unary/vent_pump/on{
|
||||
dir = 4
|
||||
},
|
||||
/turf/open/floor/carpet,
|
||||
/area/crew_quarters/dorms)
|
||||
"aqo" = (
|
||||
/obj/structure/chair/stool{
|
||||
pixel_y = 8
|
||||
@@ -8189,19 +8283,6 @@
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
/area/crew_quarters/fitness)
|
||||
"asu" = (
|
||||
/obj/structure/bed,
|
||||
/obj/item/bedsheet/red,
|
||||
/obj/machinery/button/door{
|
||||
id = "Dorm5";
|
||||
name = "Cabin Bolt Control";
|
||||
normaldoorcontrol = 1;
|
||||
pixel_y = -25;
|
||||
specialfunctions = 4
|
||||
},
|
||||
/obj/machinery/atmospherics/components/unary/vent_scrubber/on,
|
||||
/turf/open/floor/wood,
|
||||
/area/crew_quarters/dorms)
|
||||
"asv" = (
|
||||
/obj/structure/table,
|
||||
/obj/effect/spawner/lootdrop/maintenance{
|
||||
@@ -8293,19 +8374,6 @@
|
||||
},
|
||||
/turf/open/floor/plating,
|
||||
/area/maintenance/port/fore)
|
||||
"asL" = (
|
||||
/obj/structure/bed,
|
||||
/obj/item/bedsheet/red,
|
||||
/obj/machinery/button/door{
|
||||
id = "Dorm6";
|
||||
name = "Cabin Bolt Control";
|
||||
normaldoorcontrol = 1;
|
||||
pixel_y = -25;
|
||||
specialfunctions = 4
|
||||
},
|
||||
/obj/machinery/atmospherics/components/unary/vent_scrubber/on,
|
||||
/turf/open/floor/wood,
|
||||
/area/crew_quarters/dorms)
|
||||
"asM" = (
|
||||
/obj/structure/disposalpipe/segment,
|
||||
/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
|
||||
@@ -8912,24 +8980,6 @@
|
||||
},
|
||||
/turf/open/floor/plasteel/dark,
|
||||
/area/crew_quarters/fitness)
|
||||
"auw" = (
|
||||
/obj/structure/bed,
|
||||
/obj/item/bedsheet,
|
||||
/obj/machinery/airalarm{
|
||||
pixel_y = 23
|
||||
},
|
||||
/obj/machinery/button/door{
|
||||
id = "Dorm3";
|
||||
name = "Dorm Bolt Control";
|
||||
normaldoorcontrol = 1;
|
||||
pixel_x = 25;
|
||||
specialfunctions = 4
|
||||
},
|
||||
/obj/machinery/atmospherics/components/unary/vent_pump/on{
|
||||
dir = 4
|
||||
},
|
||||
/turf/open/floor/carpet,
|
||||
/area/crew_quarters/dorms)
|
||||
"aux" = (
|
||||
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
|
||||
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
|
||||
@@ -10796,24 +10846,6 @@
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
/area/ai_monitored/storage/eva)
|
||||
"ayV" = (
|
||||
/obj/structure/bed,
|
||||
/obj/item/bedsheet,
|
||||
/obj/machinery/airalarm{
|
||||
pixel_y = 23
|
||||
},
|
||||
/obj/machinery/button/door{
|
||||
id = "Dorm2";
|
||||
name = "Dorm Bolt Control";
|
||||
normaldoorcontrol = 1;
|
||||
pixel_x = 25;
|
||||
specialfunctions = 4
|
||||
},
|
||||
/obj/machinery/atmospherics/components/unary/vent_pump/on{
|
||||
dir = 4
|
||||
},
|
||||
/turf/open/floor/carpet,
|
||||
/area/crew_quarters/dorms)
|
||||
"ayW" = (
|
||||
/turf/closed/wall,
|
||||
/area/ai_monitored/storage/eva)
|
||||
@@ -11691,7 +11723,7 @@
|
||||
/area/maintenance/port/fore)
|
||||
"aAW" = (
|
||||
/obj/structure/rack,
|
||||
/obj/item/tank/jetpack/carbondioxide,
|
||||
/obj/item/tank/jetpack/carbondioxide/eva,
|
||||
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
|
||||
dir = 4
|
||||
},
|
||||
@@ -11815,7 +11847,7 @@
|
||||
/obj/machinery/light{
|
||||
dir = 8
|
||||
},
|
||||
/obj/item/tank/jetpack/carbondioxide,
|
||||
/obj/item/tank/jetpack/carbondioxide/eva,
|
||||
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
|
||||
dir = 4
|
||||
},
|
||||
@@ -26208,9 +26240,7 @@
|
||||
/turf/open/floor/plasteel,
|
||||
/area/quartermaster/office)
|
||||
"bkx" = (
|
||||
/obj/machinery/status_display/supply{
|
||||
pixel_y = 2
|
||||
},
|
||||
/obj/machinery/status_display/supply,
|
||||
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
|
||||
dir = 4
|
||||
},
|
||||
@@ -27901,8 +27931,8 @@
|
||||
pixel_x = 30
|
||||
},
|
||||
/obj/machinery/light,
|
||||
/mob/living/simple_animal/bot/cleanbot{
|
||||
name = "C.L.E.A.N."
|
||||
/obj/machinery/computer/crew{
|
||||
dir = 1
|
||||
},
|
||||
/turf/open/floor/plasteel/white,
|
||||
/area/medical/medbay/central)
|
||||
@@ -31325,7 +31355,9 @@
|
||||
id = "QMLoad"
|
||||
},
|
||||
/obj/machinery/light,
|
||||
/obj/machinery/status_display/supply,
|
||||
/obj/machinery/status_display/supply{
|
||||
pixel_y = -32
|
||||
},
|
||||
/obj/effect/turf_decal/stripes/line{
|
||||
dir = 1
|
||||
},
|
||||
@@ -31596,7 +31628,7 @@
|
||||
/area/medical/sleeper)
|
||||
"bwC" = (
|
||||
/obj/machinery/computer/med_data{
|
||||
dir = 4
|
||||
dir = 3
|
||||
},
|
||||
/turf/open/floor/plasteel/white,
|
||||
/area/medical/sleeper)
|
||||
@@ -33592,7 +33624,9 @@
|
||||
name = "Station Intercom (General)";
|
||||
pixel_y = -35
|
||||
},
|
||||
/obj/machinery/status_display/supply,
|
||||
/obj/machinery/status_display/supply{
|
||||
pixel_x = -32
|
||||
},
|
||||
/obj/machinery/computer/security/qm{
|
||||
dir = 4
|
||||
},
|
||||
@@ -36664,14 +36698,11 @@
|
||||
/turf/open/floor/plasteel,
|
||||
/area/hallway/primary/aft)
|
||||
"bHT" = (
|
||||
/obj/machinery/door/poddoor/preopen{
|
||||
id = "medpriv1";
|
||||
name = "privacy door"
|
||||
},
|
||||
/obj/effect/spawner/structure/window,
|
||||
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
|
||||
dir = 4
|
||||
},
|
||||
/obj/machinery/door/firedoor,
|
||||
/turf/open/floor/plating,
|
||||
/area/medical/medbay/central)
|
||||
"bHU" = (
|
||||
@@ -37987,22 +38018,23 @@
|
||||
/turf/open/floor/plating,
|
||||
/area/maintenance/aft)
|
||||
"bKM" = (
|
||||
/obj/machinery/vending/wallmed{
|
||||
pixel_y = 28
|
||||
},
|
||||
/obj/machinery/atmospherics/components/unary/vent_pump/on{
|
||||
dir = 4
|
||||
},
|
||||
/obj/machinery/airalarm{
|
||||
pixel_y = 24
|
||||
},
|
||||
/turf/open/floor/plasteel/white,
|
||||
/area/medical/medbay/central)
|
||||
"bKN" = (
|
||||
/obj/machinery/door/airlock/medical{
|
||||
name = "Patient Room 2";
|
||||
name = "Apothecary";
|
||||
req_access_txt = "5"
|
||||
},
|
||||
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
|
||||
dir = 4
|
||||
},
|
||||
/obj/machinery/door/firedoor,
|
||||
/turf/open/floor/plasteel/white,
|
||||
/area/medical/medbay/central)
|
||||
"bKO" = (
|
||||
@@ -38456,24 +38488,17 @@
|
||||
/turf/open/floor/plating,
|
||||
/area/maintenance/aft)
|
||||
"bLU" = (
|
||||
/obj/structure/table,
|
||||
/obj/item/folder/white,
|
||||
/obj/item/clothing/neck/stethoscope,
|
||||
/obj/machinery/light/small{
|
||||
dir = 8
|
||||
},
|
||||
/obj/machinery/chem_dispenser,
|
||||
/turf/open/floor/plasteel/white,
|
||||
/area/medical/medbay/central)
|
||||
"bLV" = (
|
||||
/obj/structure/closet/secure_closet/personal/patient,
|
||||
/obj/machinery/button/door{
|
||||
id = "medpriv1";
|
||||
name = "Privacy Shutters";
|
||||
pixel_y = -25
|
||||
},
|
||||
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
|
||||
dir = 4
|
||||
},
|
||||
/obj/machinery/chem_heater,
|
||||
/turf/open/floor/plasteel/white,
|
||||
/area/medical/medbay/central)
|
||||
"bLW" = (
|
||||
@@ -39352,11 +39377,6 @@
|
||||
/obj/machinery/announcement_system,
|
||||
/turf/open/floor/plasteel,
|
||||
/area/tcommsat/computer)
|
||||
"bOm" = (
|
||||
/obj/item/bedsheet,
|
||||
/obj/structure/bed,
|
||||
/turf/open/floor/plasteel/white,
|
||||
/area/medical/virology)
|
||||
"bOn" = (
|
||||
/obj/machinery/light{
|
||||
dir = 1
|
||||
@@ -42618,11 +42638,6 @@
|
||||
/obj/effect/spawner/structure/window,
|
||||
/turf/open/floor/plating,
|
||||
/area/medical/virology)
|
||||
"bWk" = (
|
||||
/obj/structure/bed,
|
||||
/obj/item/bedsheet,
|
||||
/turf/open/floor/plasteel/white,
|
||||
/area/medical/virology)
|
||||
"bWl" = (
|
||||
/obj/structure/disposalpipe/segment{
|
||||
dir = 4
|
||||
@@ -46031,6 +46046,9 @@
|
||||
},
|
||||
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
|
||||
/obj/effect/turf_decal/delivery,
|
||||
/obj/machinery/shower{
|
||||
dir = 4
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
/area/engine/engineering)
|
||||
"cek" = (
|
||||
@@ -46039,6 +46057,9 @@
|
||||
name = "engineering security door"
|
||||
},
|
||||
/obj/effect/turf_decal/delivery,
|
||||
/obj/machinery/shower{
|
||||
dir = 8
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
/area/engine/engineering)
|
||||
"cel" = (
|
||||
@@ -56650,6 +56671,12 @@
|
||||
/obj/item/stock_parts/cell/high,
|
||||
/turf/open/floor/plasteel/white,
|
||||
/area/science/circuit)
|
||||
"eef" = (
|
||||
/obj/machinery/autolathe{
|
||||
name = "public autolathe"
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
/area/quartermaster/office)
|
||||
"evR" = (
|
||||
/turf/open/floor/plating,
|
||||
/area/maintenance/bar)
|
||||
@@ -56742,6 +56769,16 @@
|
||||
/obj/effect/landmark/event_spawn,
|
||||
/turf/open/floor/plasteel,
|
||||
/area/science/circuit)
|
||||
"fTg" = (
|
||||
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
|
||||
dir = 4
|
||||
},
|
||||
/obj/machinery/firealarm{
|
||||
dir = 2;
|
||||
pixel_y = 24
|
||||
},
|
||||
/turf/open/floor/plasteel/white,
|
||||
/area/medical/medbay/central)
|
||||
"gbq" = (
|
||||
/obj/structure/cable{
|
||||
icon_state = "4-8"
|
||||
@@ -57109,6 +57146,12 @@
|
||||
},
|
||||
/turf/open/floor/plating,
|
||||
/area/construction/mining/aux_base)
|
||||
"lKX" = (
|
||||
/mob/living/simple_animal/bot/cleanbot{
|
||||
name = "C.L.E.A.N."
|
||||
},
|
||||
/turf/open/floor/plasteel/white,
|
||||
/area/medical/medbay/central)
|
||||
"lMg" = (
|
||||
/obj/effect/turf_decal/stripes/line{
|
||||
dir = 9
|
||||
@@ -57340,14 +57383,6 @@
|
||||
},
|
||||
/turf/open/floor/plating,
|
||||
/area/construction)
|
||||
"rMN" = (
|
||||
/obj/structure/bed,
|
||||
/obj/item/bedsheet,
|
||||
/obj/item/tank/internals/anesthetic,
|
||||
/obj/item/clothing/mask/breath,
|
||||
/obj/effect/decal/cleanable/semen,
|
||||
/turf/open/floor/plating,
|
||||
/area/maintenance/bar)
|
||||
"rNc" = (
|
||||
/obj/effect/turf_decal/stripes/line{
|
||||
dir = 6
|
||||
@@ -57499,6 +57534,10 @@
|
||||
/obj/structure/table/wood,
|
||||
/turf/open/floor/wood,
|
||||
/area/maintenance/bar)
|
||||
"tRe" = (
|
||||
/obj/machinery/chem_master,
|
||||
/turf/open/floor/plasteel/white,
|
||||
/area/medical/medbay/central)
|
||||
"tRF" = (
|
||||
/obj/machinery/light/small{
|
||||
dir = 8
|
||||
@@ -79814,7 +79853,7 @@ sAM
|
||||
imH
|
||||
evR
|
||||
evR
|
||||
rMN
|
||||
afq
|
||||
bCq
|
||||
bUs
|
||||
bLv
|
||||
@@ -81576,7 +81615,7 @@ cNG
|
||||
cNJ
|
||||
bLF
|
||||
aZK
|
||||
bbR
|
||||
eef
|
||||
bbR
|
||||
bqt
|
||||
cBq
|
||||
@@ -88451,7 +88490,7 @@ aaa
|
||||
aaf
|
||||
aaf
|
||||
aaa
|
||||
abp
|
||||
adR
|
||||
abP
|
||||
aco
|
||||
acO
|
||||
@@ -88478,13 +88517,13 @@ aoD
|
||||
aod
|
||||
aqe
|
||||
arf
|
||||
aqn
|
||||
aad
|
||||
ath
|
||||
arf
|
||||
auw
|
||||
aeE
|
||||
ath
|
||||
arf
|
||||
ayV
|
||||
aeF
|
||||
ath
|
||||
dgz
|
||||
aCd
|
||||
@@ -88965,7 +89004,7 @@ aaa
|
||||
aaa
|
||||
aaf
|
||||
aaa
|
||||
abp
|
||||
adR
|
||||
abO
|
||||
acq
|
||||
acq
|
||||
@@ -89479,15 +89518,15 @@ aaa
|
||||
aaa
|
||||
aaa
|
||||
aaf
|
||||
abp
|
||||
adR
|
||||
abR
|
||||
abP
|
||||
abP
|
||||
abP
|
||||
abP
|
||||
abp
|
||||
abp
|
||||
abp
|
||||
adR
|
||||
adR
|
||||
adR
|
||||
agA
|
||||
afU
|
||||
ahF
|
||||
@@ -90278,7 +90317,7 @@ cSA
|
||||
aqe
|
||||
arf
|
||||
ari
|
||||
asu
|
||||
abz
|
||||
aun
|
||||
auW
|
||||
avR
|
||||
@@ -91306,7 +91345,7 @@ apr
|
||||
aqj
|
||||
arf
|
||||
ark
|
||||
asL
|
||||
aeD
|
||||
aun
|
||||
avu
|
||||
awt
|
||||
@@ -94171,7 +94210,7 @@ blm
|
||||
bmL
|
||||
boi
|
||||
bpw
|
||||
bhh
|
||||
lKX
|
||||
bsx
|
||||
btX
|
||||
bvj
|
||||
@@ -95728,8 +95767,8 @@ bof
|
||||
bof
|
||||
bof
|
||||
bJE
|
||||
bof
|
||||
bof
|
||||
bJE
|
||||
bJE
|
||||
bNd
|
||||
bIJ
|
||||
bPo
|
||||
@@ -95985,7 +96024,7 @@ bof
|
||||
bGT
|
||||
bIo
|
||||
bof
|
||||
bIo
|
||||
tRe
|
||||
bLU
|
||||
bNd
|
||||
bII
|
||||
@@ -96499,10 +96538,10 @@ bof
|
||||
bGU
|
||||
bqQ
|
||||
bof
|
||||
bCR
|
||||
fTg
|
||||
bLV
|
||||
bNd
|
||||
bOm
|
||||
afn
|
||||
bPp
|
||||
bQF
|
||||
bRN
|
||||
@@ -98308,7 +98347,7 @@ bRQ
|
||||
bOr
|
||||
bSQ
|
||||
bWj
|
||||
bWk
|
||||
afn
|
||||
bXc
|
||||
bYe
|
||||
bNd
|
||||
@@ -98822,7 +98861,7 @@ bRQ
|
||||
bOr
|
||||
bSQ
|
||||
bWj
|
||||
bWk
|
||||
afn
|
||||
bXc
|
||||
bYe
|
||||
bNd
|
||||
|
||||
@@ -124,6 +124,22 @@
|
||||
},
|
||||
/turf/open/floor/plating,
|
||||
/area/crew_quarters/abandoned_gambling_den)
|
||||
"aaq" = (
|
||||
/obj/structure/bed,
|
||||
/obj/machinery/status_display{
|
||||
pixel_y = 32
|
||||
},
|
||||
/obj/item/bedsheet/clown,
|
||||
/turf/open/floor/plasteel/grimy,
|
||||
/area/hallway/secondary/service)
|
||||
"aar" = (
|
||||
/obj/structure/bed,
|
||||
/obj/machinery/status_display{
|
||||
pixel_y = 32
|
||||
},
|
||||
/obj/item/bedsheet/mime,
|
||||
/turf/open/floor/wood,
|
||||
/area/hallway/secondary/service)
|
||||
"aas" = (
|
||||
/obj/docking_port/stationary/random{
|
||||
id = "pod_lavaland1";
|
||||
@@ -143,6 +159,52 @@
|
||||
/obj/effect/landmark/xeno_spawn,
|
||||
/turf/open/space,
|
||||
/area/solar/starboard/fore)
|
||||
"aav" = (
|
||||
/obj/structure/bed,
|
||||
/obj/machinery/light{
|
||||
dir = 1
|
||||
},
|
||||
/obj/machinery/status_display{
|
||||
pixel_y = 32
|
||||
},
|
||||
/obj/effect/spawner/lootdrop/bedsheet,
|
||||
/turf/open/floor/carpet,
|
||||
/area/crew_quarters/dorms)
|
||||
"aaw" = (
|
||||
/obj/structure/bed,
|
||||
/obj/effect/decal/cleanable/dirt{
|
||||
desc = "A thin layer of dust coating the floor.";
|
||||
name = "dust"
|
||||
},
|
||||
/obj/effect/spawner/lootdrop/bedsheet,
|
||||
/turf/open/floor/wood,
|
||||
/area/crew_quarters/dorms)
|
||||
"aax" = (
|
||||
/obj/structure/bed,
|
||||
/obj/effect/spawner/lootdrop/bedsheet,
|
||||
/turf/open/floor/wood,
|
||||
/area/crew_quarters/dorms)
|
||||
"aay" = (
|
||||
/obj/structure/bed,
|
||||
/obj/effect/spawner/lootdrop/bedsheet,
|
||||
/turf/open/floor/plasteel/grimy,
|
||||
/area/crew_quarters/dorms)
|
||||
"aaz" = (
|
||||
/obj/structure/bed,
|
||||
/obj/machinery/light,
|
||||
/obj/machinery/status_display{
|
||||
pixel_y = -32
|
||||
},
|
||||
/obj/effect/spawner/lootdrop/bedsheet,
|
||||
/turf/open/floor/carpet,
|
||||
/area/crew_quarters/dorms)
|
||||
"aaA" = (
|
||||
/obj/structure/bed,
|
||||
/obj/item/tank/internals/anesthetic,
|
||||
/obj/item/clothing/mask/breath,
|
||||
/obj/effect/spawner/lootdrop/bedsheet,
|
||||
/turf/open/floor/plating,
|
||||
/area/crew_quarters/abandoned_gambling_den)
|
||||
"aaE" = (
|
||||
/obj/structure/lattice/catwalk,
|
||||
/turf/open/space,
|
||||
@@ -13706,14 +13768,6 @@
|
||||
},
|
||||
/turf/open/floor/plasteel/grimy,
|
||||
/area/hallway/secondary/service)
|
||||
"aDF" = (
|
||||
/obj/structure/bed,
|
||||
/obj/machinery/status_display{
|
||||
pixel_y = 32
|
||||
},
|
||||
/obj/item/bedsheet/rainbow,
|
||||
/turf/open/floor/plasteel/grimy,
|
||||
/area/hallway/secondary/service)
|
||||
"aDG" = (
|
||||
/turf/open/floor/plasteel/grimy,
|
||||
/area/hallway/secondary/service)
|
||||
@@ -16868,14 +16922,6 @@
|
||||
},
|
||||
/turf/open/floor/wood,
|
||||
/area/hallway/secondary/service)
|
||||
"aIP" = (
|
||||
/obj/structure/bed,
|
||||
/obj/machinery/status_display{
|
||||
pixel_y = 32
|
||||
},
|
||||
/obj/item/bedsheet/orange,
|
||||
/turf/open/floor/wood,
|
||||
/area/hallway/secondary/service)
|
||||
"aIQ" = (
|
||||
/obj/structure/dresser,
|
||||
/turf/open/floor/wood{
|
||||
@@ -35021,12 +35067,13 @@
|
||||
/turf/open/floor/plasteel,
|
||||
/area/hallway/primary/fore)
|
||||
"blM" = (
|
||||
/obj/structure/table,
|
||||
/obj/item/storage/box/lights/mixed,
|
||||
/obj/effect/turf_decal/tile/brown,
|
||||
/obj/effect/turf_decal/tile/brown{
|
||||
dir = 8
|
||||
},
|
||||
/obj/machinery/autolathe{
|
||||
name = "public autolathe"
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
/area/hallway/primary/fore)
|
||||
"blN" = (
|
||||
@@ -35043,6 +35090,7 @@
|
||||
/obj/effect/turf_decal/tile/brown{
|
||||
dir = 8
|
||||
},
|
||||
/obj/item/storage/box/lights/mixed,
|
||||
/turf/open/floor/plasteel,
|
||||
/area/hallway/primary/fore)
|
||||
"blO" = (
|
||||
@@ -78958,17 +79006,6 @@
|
||||
/obj/structure/dresser,
|
||||
/turf/open/floor/carpet,
|
||||
/area/crew_quarters/dorms)
|
||||
"cCi" = (
|
||||
/obj/structure/bed,
|
||||
/obj/machinery/light{
|
||||
dir = 1
|
||||
},
|
||||
/obj/item/bedsheet/red,
|
||||
/obj/machinery/status_display{
|
||||
pixel_y = 32
|
||||
},
|
||||
/turf/open/floor/carpet,
|
||||
/area/crew_quarters/dorms)
|
||||
"cCj" = (
|
||||
/obj/structure/closet/secure_closet/personal/cabinet,
|
||||
/obj/item/clothing/suit/jacket{
|
||||
@@ -79373,12 +79410,12 @@
|
||||
},
|
||||
/obj/structure/window/reinforced,
|
||||
/obj/structure/rack,
|
||||
/obj/item/tank/jetpack/carbondioxide{
|
||||
/obj/item/tank/jetpack/carbondioxide/eva{
|
||||
pixel_x = 4;
|
||||
pixel_y = -1
|
||||
},
|
||||
/obj/item/tank/jetpack/carbondioxide,
|
||||
/obj/item/tank/jetpack/carbondioxide{
|
||||
/obj/item/tank/jetpack/carbondioxide/eva,
|
||||
/obj/item/tank/jetpack/carbondioxide/eva{
|
||||
pixel_x = -4;
|
||||
pixel_y = 1
|
||||
},
|
||||
@@ -80186,11 +80223,11 @@
|
||||
/area/engine/storage)
|
||||
"cEi" = (
|
||||
/obj/structure/table/reinforced,
|
||||
/obj/item/tank/jetpack/carbondioxide{
|
||||
/obj/item/tank/jetpack/carbondioxide/eva{
|
||||
pixel_x = 3;
|
||||
pixel_y = 3
|
||||
},
|
||||
/obj/item/tank/jetpack/carbondioxide,
|
||||
/obj/item/tank/jetpack/carbondioxide/eva,
|
||||
/obj/machinery/power/apc{
|
||||
dir = 4;
|
||||
name = "Engineering Storage APC";
|
||||
@@ -80986,24 +81023,10 @@
|
||||
icon_state = "wood-broken2"
|
||||
},
|
||||
/area/crew_quarters/dorms)
|
||||
"cFx" = (
|
||||
/obj/structure/bed,
|
||||
/obj/item/bedsheet/black,
|
||||
/obj/effect/decal/cleanable/dirt{
|
||||
desc = "A thin layer of dust coating the floor.";
|
||||
name = "dust"
|
||||
},
|
||||
/turf/open/floor/wood,
|
||||
/area/crew_quarters/dorms)
|
||||
"cFy" = (
|
||||
/obj/item/twohanded/required/kirbyplants/random,
|
||||
/turf/open/floor/wood,
|
||||
/area/crew_quarters/dorms)
|
||||
"cFz" = (
|
||||
/obj/structure/bed,
|
||||
/obj/item/bedsheet/blue,
|
||||
/turf/open/floor/wood,
|
||||
/area/crew_quarters/dorms)
|
||||
"cFA" = (
|
||||
/obj/structure/table/wood,
|
||||
/obj/item/flashlight/lamp/green,
|
||||
@@ -87800,11 +87823,6 @@
|
||||
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
|
||||
/turf/open/floor/plating,
|
||||
/area/maintenance/starboard/aft)
|
||||
"cRs" = (
|
||||
/obj/structure/bed,
|
||||
/obj/item/bedsheet/clown,
|
||||
/turf/open/floor/wood,
|
||||
/area/crew_quarters/dorms)
|
||||
"cRt" = (
|
||||
/obj/structure/table/wood,
|
||||
/obj/item/storage/briefcase{
|
||||
@@ -88878,11 +88896,6 @@
|
||||
/obj/structure/chair/office/dark,
|
||||
/turf/open/floor/wood,
|
||||
/area/crew_quarters/dorms)
|
||||
"cTc" = (
|
||||
/obj/structure/bed,
|
||||
/obj/item/bedsheet/mime,
|
||||
/turf/open/floor/plasteel/grimy,
|
||||
/area/crew_quarters/dorms)
|
||||
"cTd" = (
|
||||
/obj/structure/table,
|
||||
/obj/item/storage/fancy/donut_box,
|
||||
@@ -90079,15 +90092,6 @@
|
||||
},
|
||||
/turf/open/floor/wood,
|
||||
/area/crew_quarters/dorms)
|
||||
"cUX" = (
|
||||
/obj/structure/bed,
|
||||
/obj/machinery/light,
|
||||
/obj/item/bedsheet/brown,
|
||||
/obj/machinery/status_display{
|
||||
pixel_y = -32
|
||||
},
|
||||
/turf/open/floor/carpet,
|
||||
/area/crew_quarters/dorms)
|
||||
"cUY" = (
|
||||
/obj/structure/closet/secure_closet/personal/cabinet,
|
||||
/obj/item/clothing/suit/jacket{
|
||||
@@ -101814,6 +101818,7 @@
|
||||
/obj/effect/turf_decal/tile/blue{
|
||||
dir = 1
|
||||
},
|
||||
/obj/effect/landmark/start/medical_doctor,
|
||||
/turf/open/floor/plasteel/white,
|
||||
/area/medical/genetics/cloning)
|
||||
"dpo" = (
|
||||
@@ -126296,6 +126301,20 @@
|
||||
/obj/machinery/atmospherics/pipe/simple/general/visible,
|
||||
/turf/closed/wall/r_wall,
|
||||
/area/science/mixing)
|
||||
"eLw" = (
|
||||
/obj/effect/turf_decal/tile/neutral{
|
||||
dir = 1
|
||||
},
|
||||
/obj/effect/turf_decal/tile/neutral,
|
||||
/obj/effect/turf_decal/tile/neutral{
|
||||
dir = 4
|
||||
},
|
||||
/obj/effect/turf_decal/tile/neutral{
|
||||
dir = 8
|
||||
},
|
||||
/obj/machinery/chem_dispenser,
|
||||
/turf/open/floor/plasteel/dark,
|
||||
/area/medical/medbay/central)
|
||||
"eMD" = (
|
||||
/obj/effect/decal/cleanable/dirt,
|
||||
/obj/structure/cable/white{
|
||||
@@ -126355,6 +126374,22 @@
|
||||
},
|
||||
/turf/open/floor/plasteel/white,
|
||||
/area/science/misc_lab)
|
||||
"fhE" = (
|
||||
/obj/machinery/door/firedoor,
|
||||
/obj/machinery/door/airlock/medical{
|
||||
name = "Apothecary"
|
||||
},
|
||||
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
|
||||
dir = 4
|
||||
},
|
||||
/obj/effect/turf_decal/stripes/line{
|
||||
dir = 8
|
||||
},
|
||||
/obj/effect/turf_decal/stripes/line{
|
||||
dir = 4
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
/area/medical/medbay/central)
|
||||
"fno" = (
|
||||
/obj/effect/turf_decal/stripes/line{
|
||||
dir = 8
|
||||
@@ -126584,6 +126619,13 @@
|
||||
/obj/item/restraints/handcuffs/fake,
|
||||
/turf/open/floor/plating,
|
||||
/area/crew_quarters/abandoned_gambling_den)
|
||||
"hSf" = (
|
||||
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
|
||||
dir = 4
|
||||
},
|
||||
/obj/effect/spawner/structure/window/reinforced,
|
||||
/turf/open/floor/plating,
|
||||
/area/medical/medbay/central)
|
||||
"iaF" = (
|
||||
/obj/effect/turf_decal/bot,
|
||||
/turf/open/floor/plasteel,
|
||||
@@ -126593,6 +126635,18 @@
|
||||
/obj/item/reagent_containers/glass/beaker,
|
||||
/turf/open/floor/plating,
|
||||
/area/crew_quarters/abandoned_gambling_den)
|
||||
"iwL" = (
|
||||
/obj/machinery/status_display{
|
||||
pixel_x = 32
|
||||
},
|
||||
/obj/effect/turf_decal/tile/blue{
|
||||
dir = 4
|
||||
},
|
||||
/obj/effect/turf_decal/tile/blue{
|
||||
dir = 8
|
||||
},
|
||||
/turf/open/floor/plasteel/white,
|
||||
/area/medical/medbay/central)
|
||||
"ixL" = (
|
||||
/obj/structure/sign/warning/vacuum{
|
||||
pixel_x = 32
|
||||
@@ -126743,6 +126797,23 @@
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
/area/medical/morgue)
|
||||
"jOE" = (
|
||||
/obj/machinery/newscaster{
|
||||
pixel_x = 32
|
||||
},
|
||||
/obj/effect/turf_decal/tile/neutral{
|
||||
dir = 1
|
||||
},
|
||||
/obj/effect/turf_decal/tile/neutral,
|
||||
/obj/effect/turf_decal/tile/neutral{
|
||||
dir = 4
|
||||
},
|
||||
/obj/effect/turf_decal/tile/neutral{
|
||||
dir = 8
|
||||
},
|
||||
/obj/machinery/chem_master,
|
||||
/turf/open/floor/plasteel/dark,
|
||||
/area/medical/medbay/central)
|
||||
"jRy" = (
|
||||
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
|
||||
dir = 4
|
||||
@@ -126853,6 +126924,22 @@
|
||||
},
|
||||
/turf/open/floor/engine,
|
||||
/area/science/mixing)
|
||||
"lzF" = (
|
||||
/obj/effect/turf_decal/tile/neutral{
|
||||
dir = 1
|
||||
},
|
||||
/obj/effect/turf_decal/tile/neutral,
|
||||
/obj/effect/turf_decal/tile/neutral{
|
||||
dir = 4
|
||||
},
|
||||
/obj/effect/turf_decal/tile/neutral{
|
||||
dir = 8
|
||||
},
|
||||
/obj/machinery/firealarm{
|
||||
pixel_y = 26
|
||||
},
|
||||
/turf/open/floor/plasteel/dark,
|
||||
/area/medical/medbay/central)
|
||||
"lEl" = (
|
||||
/obj/effect/turf_decal/stripes/line{
|
||||
dir = 1
|
||||
@@ -126909,6 +126996,23 @@
|
||||
},
|
||||
/turf/open/floor/plating,
|
||||
/area/construction/mining/aux_base)
|
||||
"lTx" = (
|
||||
/obj/effect/turf_decal/tile/neutral{
|
||||
dir = 1
|
||||
},
|
||||
/obj/effect/turf_decal/tile/neutral,
|
||||
/obj/effect/turf_decal/tile/neutral{
|
||||
dir = 4
|
||||
},
|
||||
/obj/effect/turf_decal/tile/neutral{
|
||||
dir = 8
|
||||
},
|
||||
/obj/structure/table,
|
||||
/obj/machinery/airalarm{
|
||||
pixel_y = 22
|
||||
},
|
||||
/turf/open/floor/plasteel/dark,
|
||||
/area/medical/medbay/central)
|
||||
"lXF" = (
|
||||
/obj/effect/turf_decal/stripes/line{
|
||||
dir = 4
|
||||
@@ -127110,13 +127214,6 @@
|
||||
dir = 1
|
||||
},
|
||||
/area/science/circuit)
|
||||
"poI" = (
|
||||
/obj/structure/bed,
|
||||
/obj/item/bedsheet,
|
||||
/obj/item/tank/internals/anesthetic,
|
||||
/obj/item/clothing/mask/breath,
|
||||
/turf/open/floor/plating,
|
||||
/area/crew_quarters/abandoned_gambling_den)
|
||||
"psi" = (
|
||||
/obj/effect/decal/cleanable/dirt,
|
||||
/obj/structure/bodycontainer/morgue{
|
||||
@@ -127259,6 +127356,16 @@
|
||||
dir = 10
|
||||
},
|
||||
/area/science/misc_lab)
|
||||
"tRT" = (
|
||||
/obj/effect/turf_decal/tile/blue{
|
||||
dir = 4
|
||||
},
|
||||
/obj/effect/turf_decal/tile/blue{
|
||||
dir = 8
|
||||
},
|
||||
/obj/machinery/chem_heater,
|
||||
/turf/open/floor/plasteel/white,
|
||||
/area/medical/medbay/central)
|
||||
"upk" = (
|
||||
/obj/machinery/door/airlock/public/glass{
|
||||
name = "Holodeck Access"
|
||||
@@ -151573,7 +151680,7 @@ djm
|
||||
fow
|
||||
dod
|
||||
dod
|
||||
poI
|
||||
aaA
|
||||
dfY
|
||||
ajr
|
||||
aad
|
||||
@@ -160727,11 +160834,11 @@ ary
|
||||
aAf
|
||||
aBu
|
||||
aCB
|
||||
aDF
|
||||
aaq
|
||||
aEJ
|
||||
aFV
|
||||
aDI
|
||||
aIP
|
||||
aar
|
||||
aKo
|
||||
aLE
|
||||
aMX
|
||||
@@ -174190,9 +174297,9 @@ dfL
|
||||
dCM
|
||||
dEb
|
||||
cPy
|
||||
dfL
|
||||
dCM
|
||||
dEb
|
||||
cNz
|
||||
fhE
|
||||
hSf
|
||||
cPy
|
||||
dhs
|
||||
dMS
|
||||
@@ -174447,7 +174554,7 @@ dBo
|
||||
cSF
|
||||
dEc
|
||||
cPy
|
||||
dBo
|
||||
lzF
|
||||
cSF
|
||||
dEc
|
||||
cPy
|
||||
@@ -174961,8 +175068,8 @@ dBq
|
||||
dCN
|
||||
dEe
|
||||
cPy
|
||||
dBq
|
||||
dCN
|
||||
lTx
|
||||
cSK
|
||||
dEe
|
||||
cPy
|
||||
cMg
|
||||
@@ -175218,9 +175325,9 @@ dBr
|
||||
dCO
|
||||
dEf
|
||||
cPy
|
||||
dBr
|
||||
eLw
|
||||
dCO
|
||||
dEf
|
||||
tRT
|
||||
cPy
|
||||
dLo
|
||||
dMW
|
||||
@@ -175475,9 +175582,9 @@ dBs
|
||||
dCP
|
||||
dEg
|
||||
cPy
|
||||
dBs
|
||||
jOE
|
||||
dCP
|
||||
dEg
|
||||
iwL
|
||||
cPy
|
||||
dLp
|
||||
dMV
|
||||
@@ -178267,7 +178374,7 @@ cyY
|
||||
cAx
|
||||
cCd
|
||||
cDD
|
||||
cFx
|
||||
aaw
|
||||
cGU
|
||||
cAw
|
||||
cJl
|
||||
@@ -178275,7 +178382,7 @@ cLa
|
||||
cMx
|
||||
cIi
|
||||
cPR
|
||||
cRs
|
||||
aax
|
||||
cDG
|
||||
cUW
|
||||
cAw
|
||||
@@ -179048,7 +179155,7 @@ cNU
|
||||
cDI
|
||||
cFB
|
||||
cDI
|
||||
cUX
|
||||
aaz
|
||||
cAw
|
||||
cYj
|
||||
cZV
|
||||
@@ -179295,7 +179402,7 @@ czc
|
||||
cAw
|
||||
cCg
|
||||
cDG
|
||||
cFz
|
||||
aax
|
||||
cGW
|
||||
cIi
|
||||
cJo
|
||||
@@ -180064,7 +180171,7 @@ bHq
|
||||
cxt
|
||||
coI
|
||||
cAw
|
||||
cCi
|
||||
aav
|
||||
cDI
|
||||
cFB
|
||||
cDI
|
||||
@@ -180332,7 +180439,7 @@ cMB
|
||||
cIi
|
||||
cPW
|
||||
cRv
|
||||
cTc
|
||||
aay
|
||||
cVb
|
||||
cAw
|
||||
cYp
|
||||
|
||||
@@ -2,10 +2,58 @@
|
||||
"aaa" = (
|
||||
/turf/open/space/basic,
|
||||
/area/space)
|
||||
"aab" = (
|
||||
/obj/structure/bed,
|
||||
/obj/machinery/button/door{
|
||||
id = "Cabin3";
|
||||
name = "Cabin Bolt Control";
|
||||
normaldoorcontrol = 1;
|
||||
pixel_x = 25;
|
||||
specialfunctions = 4
|
||||
},
|
||||
/obj/effect/decal/cleanable/cobweb/cobweb2,
|
||||
/obj/machinery/atmospherics/components/unary/vent_pump/on{
|
||||
dir = 4
|
||||
},
|
||||
/obj/effect/spawner/lootdrop/bedsheet,
|
||||
/turf/open/floor/wood,
|
||||
/area/crew_quarters/dorms)
|
||||
"aac" = (
|
||||
/obj/effect/landmark/carpspawn,
|
||||
/turf/open/space,
|
||||
/area/space)
|
||||
"aad" = (
|
||||
/obj/machinery/light/small{
|
||||
dir = 1
|
||||
},
|
||||
/obj/effect/decal/cleanable/cobweb,
|
||||
/obj/machinery/button/door{
|
||||
id = "Cabin4";
|
||||
name = "Cabin Bolt Control";
|
||||
normaldoorcontrol = 1;
|
||||
pixel_x = -25;
|
||||
specialfunctions = 4
|
||||
},
|
||||
/obj/machinery/atmospherics/components/unary/vent_scrubber/on,
|
||||
/obj/structure/bed,
|
||||
/obj/effect/spawner/lootdrop/bedsheet,
|
||||
/turf/open/floor/carpet,
|
||||
/area/crew_quarters/dorms)
|
||||
"aae" = (
|
||||
/obj/structure/bed,
|
||||
/obj/machinery/button/door{
|
||||
id = "Cabin2";
|
||||
name = "Cabin Bolt Control";
|
||||
normaldoorcontrol = 1;
|
||||
pixel_x = 25;
|
||||
specialfunctions = 4
|
||||
},
|
||||
/obj/machinery/atmospherics/components/unary/vent_pump/on{
|
||||
dir = 4
|
||||
},
|
||||
/obj/effect/spawner/lootdrop/bedsheet,
|
||||
/turf/open/floor/carpet,
|
||||
/area/crew_quarters/dorms)
|
||||
"aaf" = (
|
||||
/obj/structure/lattice,
|
||||
/turf/open/space,
|
||||
@@ -252,6 +300,19 @@
|
||||
},
|
||||
/turf/open/floor/plating,
|
||||
/area/security/prison)
|
||||
"aaM" = (
|
||||
/obj/structure/bed,
|
||||
/obj/machinery/button/door{
|
||||
id = "Cabin5";
|
||||
name = "Dorm Bolt Control";
|
||||
normaldoorcontrol = 1;
|
||||
pixel_x = -25;
|
||||
specialfunctions = 4
|
||||
},
|
||||
/obj/machinery/atmospherics/components/unary/vent_scrubber/on,
|
||||
/obj/effect/spawner/lootdrop/bedsheet,
|
||||
/turf/open/floor/wood,
|
||||
/area/crew_quarters/dorms)
|
||||
"aaN" = (
|
||||
/obj/structure/cable{
|
||||
icon_state = "0-2"
|
||||
@@ -294,6 +355,37 @@
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
/area/security/prison)
|
||||
"aaU" = (
|
||||
/obj/structure/bed,
|
||||
/obj/machinery/button/door{
|
||||
id = "Cabin6";
|
||||
name = "Dorm Bolt Control";
|
||||
normaldoorcontrol = 1;
|
||||
pixel_x = -25;
|
||||
specialfunctions = 4
|
||||
},
|
||||
/obj/effect/decal/cleanable/cobweb,
|
||||
/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
|
||||
dir = 8
|
||||
},
|
||||
/obj/effect/spawner/lootdrop/bedsheet,
|
||||
/turf/open/floor/carpet,
|
||||
/area/crew_quarters/dorms)
|
||||
"aaV" = (
|
||||
/obj/machinery/button/door{
|
||||
id = "Cabin7";
|
||||
name = "Door Bolt Control";
|
||||
normaldoorcontrol = 1;
|
||||
pixel_x = -25;
|
||||
specialfunctions = 4
|
||||
},
|
||||
/obj/structure/bed,
|
||||
/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
|
||||
dir = 8
|
||||
},
|
||||
/obj/effect/spawner/lootdrop/bedsheet,
|
||||
/turf/open/floor/wood,
|
||||
/area/crew_quarters/dorms)
|
||||
"aaY" = (
|
||||
/obj/structure/cable{
|
||||
icon_state = "1-2"
|
||||
@@ -10141,22 +10233,6 @@
|
||||
/obj/item/clothing/under/assistantformal,
|
||||
/turf/open/floor/wood,
|
||||
/area/crew_quarters/dorms)
|
||||
"asV" = (
|
||||
/obj/structure/bed,
|
||||
/obj/item/bedsheet,
|
||||
/obj/machinery/button/door{
|
||||
id = "Cabin3";
|
||||
name = "Cabin Bolt Control";
|
||||
normaldoorcontrol = 1;
|
||||
pixel_x = 25;
|
||||
specialfunctions = 4
|
||||
},
|
||||
/obj/effect/decal/cleanable/cobweb/cobweb2,
|
||||
/obj/machinery/atmospherics/components/unary/vent_pump/on{
|
||||
dir = 4
|
||||
},
|
||||
/turf/open/floor/wood,
|
||||
/area/crew_quarters/dorms)
|
||||
"asW" = (
|
||||
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
|
||||
dir = 4
|
||||
@@ -10195,23 +10271,6 @@
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
/area/crew_quarters/dorms)
|
||||
"ata" = (
|
||||
/obj/machinery/light/small{
|
||||
dir = 1
|
||||
},
|
||||
/obj/effect/decal/cleanable/cobweb,
|
||||
/obj/machinery/button/door{
|
||||
id = "Cabin4";
|
||||
name = "Cabin Bolt Control";
|
||||
normaldoorcontrol = 1;
|
||||
pixel_x = -25;
|
||||
specialfunctions = 4
|
||||
},
|
||||
/obj/machinery/atmospherics/components/unary/vent_scrubber/on,
|
||||
/obj/structure/bed,
|
||||
/obj/item/bedsheet,
|
||||
/turf/open/floor/carpet,
|
||||
/area/crew_quarters/dorms)
|
||||
"atb" = (
|
||||
/obj/structure/closet/secure_closet/personal/cabinet,
|
||||
/obj/machinery/airalarm{
|
||||
@@ -11892,21 +11951,6 @@
|
||||
/obj/item/clothing/under/suit_jacket/tan,
|
||||
/turf/open/floor/carpet,
|
||||
/area/crew_quarters/dorms)
|
||||
"awE" = (
|
||||
/obj/structure/bed,
|
||||
/obj/item/bedsheet,
|
||||
/obj/machinery/button/door{
|
||||
id = "Cabin2";
|
||||
name = "Cabin Bolt Control";
|
||||
normaldoorcontrol = 1;
|
||||
pixel_x = 25;
|
||||
specialfunctions = 4
|
||||
},
|
||||
/obj/machinery/atmospherics/components/unary/vent_pump/on{
|
||||
dir = 4
|
||||
},
|
||||
/turf/open/floor/carpet,
|
||||
/area/crew_quarters/dorms)
|
||||
"awF" = (
|
||||
/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
|
||||
dir = 4
|
||||
@@ -11920,19 +11964,6 @@
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
/area/crew_quarters/dorms)
|
||||
"awG" = (
|
||||
/obj/structure/bed,
|
||||
/obj/item/bedsheet,
|
||||
/obj/machinery/button/door{
|
||||
id = "Cabin5";
|
||||
name = "Dorm Bolt Control";
|
||||
normaldoorcontrol = 1;
|
||||
pixel_x = -25;
|
||||
specialfunctions = 4
|
||||
},
|
||||
/obj/machinery/atmospherics/components/unary/vent_scrubber/on,
|
||||
/turf/open/floor/wood,
|
||||
/area/crew_quarters/dorms)
|
||||
"awH" = (
|
||||
/obj/machinery/newscaster{
|
||||
pixel_y = 32
|
||||
@@ -14983,22 +15014,6 @@
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
/area/crew_quarters/dorms)
|
||||
"aCJ" = (
|
||||
/obj/structure/bed,
|
||||
/obj/item/bedsheet,
|
||||
/obj/machinery/button/door{
|
||||
id = "Cabin6";
|
||||
name = "Dorm Bolt Control";
|
||||
normaldoorcontrol = 1;
|
||||
pixel_x = -25;
|
||||
specialfunctions = 4
|
||||
},
|
||||
/obj/effect/decal/cleanable/cobweb,
|
||||
/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
|
||||
dir = 8
|
||||
},
|
||||
/turf/open/floor/carpet,
|
||||
/area/crew_quarters/dorms)
|
||||
"aCK" = (
|
||||
/obj/structure/closet/secure_closet/personal/cabinet,
|
||||
/obj/machinery/airalarm{
|
||||
@@ -17575,21 +17590,6 @@
|
||||
},
|
||||
/turf/open/floor/plasteel/dark,
|
||||
/area/crew_quarters/dorms)
|
||||
"aHS" = (
|
||||
/obj/machinery/button/door{
|
||||
id = "Cabin7";
|
||||
name = "Door Bolt Control";
|
||||
normaldoorcontrol = 1;
|
||||
pixel_x = -25;
|
||||
specialfunctions = 4
|
||||
},
|
||||
/obj/structure/bed,
|
||||
/obj/item/bedsheet,
|
||||
/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
|
||||
dir = 8
|
||||
},
|
||||
/turf/open/floor/wood,
|
||||
/area/crew_quarters/dorms)
|
||||
"aHT" = (
|
||||
/obj/structure/chair/wood/normal{
|
||||
dir = 4
|
||||
@@ -17692,7 +17692,9 @@
|
||||
pixel_x = -28;
|
||||
pixel_y = 23
|
||||
},
|
||||
/obj/machinery/status_display/supply,
|
||||
/obj/machinery/status_display/supply{
|
||||
pixel_y = 32
|
||||
},
|
||||
/obj/machinery/conveyor{
|
||||
dir = 5;
|
||||
id = "QMLoad2"
|
||||
@@ -21617,7 +21619,9 @@
|
||||
/obj/structure/table,
|
||||
/obj/item/clipboard,
|
||||
/obj/item/stamp/qm,
|
||||
/obj/machinery/status_display/supply,
|
||||
/obj/machinery/status_display/supply{
|
||||
pixel_x = 32
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
/area/quartermaster/qm)
|
||||
"aQu" = (
|
||||
@@ -27037,7 +27041,9 @@
|
||||
/area/hallway/primary/port)
|
||||
"baA" = (
|
||||
/obj/machinery/atmospherics/components/unary/vent_scrubber/on,
|
||||
/obj/machinery/status_display/supply,
|
||||
/obj/machinery/status_display/supply{
|
||||
pixel_y = 32
|
||||
},
|
||||
/obj/structure/table,
|
||||
/obj/item/folder/yellow,
|
||||
/obj/effect/turf_decal/tile/brown{
|
||||
@@ -27920,7 +27926,9 @@
|
||||
/area/quartermaster/office)
|
||||
"bbS" = (
|
||||
/obj/machinery/atmospherics/components/unary/vent_scrubber/on,
|
||||
/obj/machinery/status_display/supply,
|
||||
/obj/machinery/status_display/supply{
|
||||
pixel_y = 32
|
||||
},
|
||||
/obj/effect/turf_decal/tile/brown{
|
||||
dir = 1
|
||||
},
|
||||
@@ -31526,6 +31534,10 @@
|
||||
/obj/effect/turf_decal/tile/brown{
|
||||
dir = 8
|
||||
},
|
||||
/obj/structure/closet/crate{
|
||||
icon_state = "crateopen"
|
||||
},
|
||||
/obj/effect/spawner/lootdrop/maintenance,
|
||||
/turf/open/floor/plasteel,
|
||||
/area/hallway/primary/port)
|
||||
"biO" = (
|
||||
@@ -32402,10 +32414,6 @@
|
||||
/turf/open/floor/plasteel,
|
||||
/area/quartermaster/office)
|
||||
"bks" = (
|
||||
/obj/structure/closet/crate{
|
||||
icon_state = "crateopen"
|
||||
},
|
||||
/obj/effect/spawner/lootdrop/maintenance,
|
||||
/obj/effect/turf_decal/tile/brown{
|
||||
dir = 1
|
||||
},
|
||||
@@ -32413,6 +32421,9 @@
|
||||
/obj/effect/turf_decal/tile/brown{
|
||||
dir = 8
|
||||
},
|
||||
/obj/machinery/autolathe{
|
||||
name = "public autolathe"
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
/area/hallway/primary/port)
|
||||
"bkt" = (
|
||||
@@ -47699,12 +47710,12 @@
|
||||
},
|
||||
/obj/structure/window/reinforced,
|
||||
/obj/structure/rack,
|
||||
/obj/item/tank/jetpack/carbondioxide{
|
||||
/obj/item/tank/jetpack/carbondioxide/eva{
|
||||
pixel_x = 4;
|
||||
pixel_y = -1
|
||||
},
|
||||
/obj/item/tank/jetpack/carbondioxide,
|
||||
/obj/item/tank/jetpack/carbondioxide{
|
||||
/obj/item/tank/jetpack/carbondioxide/eva,
|
||||
/obj/item/tank/jetpack/carbondioxide/eva{
|
||||
pixel_x = -4;
|
||||
pixel_y = 1
|
||||
},
|
||||
@@ -64367,6 +64378,7 @@
|
||||
/obj/structure/cable/yellow{
|
||||
icon_state = "1-8"
|
||||
},
|
||||
/obj/effect/landmark/start/medical_doctor,
|
||||
/turf/open/floor/plasteel/white,
|
||||
/area/medical/patients_rooms/room_a)
|
||||
"cum" = (
|
||||
@@ -65463,24 +65475,9 @@
|
||||
/turf/open/floor/plating,
|
||||
/area/maintenance/port/aft)
|
||||
"cwo" = (
|
||||
/obj/structure/table,
|
||||
/obj/item/folder/white{
|
||||
pixel_x = 4;
|
||||
pixel_y = -3
|
||||
},
|
||||
/obj/item/clothing/neck/stethoscope,
|
||||
/obj/machinery/light/small{
|
||||
dir = 8
|
||||
},
|
||||
/obj/machinery/power/apc{
|
||||
dir = 8;
|
||||
name = "Patient Room B APC";
|
||||
areastring = "/area/medical/patients_rooms/room_b";
|
||||
pixel_x = -26
|
||||
},
|
||||
/obj/structure/cable/yellow{
|
||||
icon_state = "0-4"
|
||||
},
|
||||
/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
|
||||
dir = 8
|
||||
},
|
||||
@@ -65493,31 +65490,24 @@
|
||||
/obj/effect/turf_decal/tile/blue{
|
||||
dir = 8
|
||||
},
|
||||
/obj/machinery/chem_dispenser{
|
||||
layer = 2.7
|
||||
},
|
||||
/turf/open/floor/plasteel/white,
|
||||
/area/medical/patients_rooms/room_b)
|
||||
/area/medical/medbay/aft)
|
||||
"cwp" = (
|
||||
/obj/structure/chair/office/light{
|
||||
dir = 8
|
||||
},
|
||||
/obj/structure/cable/yellow{
|
||||
icon_state = "2-8"
|
||||
},
|
||||
/obj/effect/landmark/start/medical_doctor,
|
||||
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
|
||||
dir = 4
|
||||
},
|
||||
/obj/machinery/vending/wallmed{
|
||||
pixel_y = 28
|
||||
/obj/machinery/airalarm{
|
||||
pixel_y = 23
|
||||
},
|
||||
/turf/open/floor/plasteel/white,
|
||||
/area/medical/patients_rooms/room_b)
|
||||
/area/medical/medbay/aft)
|
||||
"cwq" = (
|
||||
/obj/structure/closet/secure_closet/personal/patient,
|
||||
/obj/machinery/button/door{
|
||||
id = "isolb";
|
||||
name = "Privacy Shutters";
|
||||
pixel_y = 25
|
||||
},
|
||||
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
|
||||
dir = 4
|
||||
},
|
||||
@@ -65525,19 +65515,19 @@
|
||||
/obj/effect/turf_decal/tile/blue{
|
||||
dir = 4
|
||||
},
|
||||
/obj/machinery/chem_heater{
|
||||
pixel_x = 4
|
||||
},
|
||||
/turf/open/floor/plasteel/white,
|
||||
/area/medical/patients_rooms/room_b)
|
||||
/area/medical/medbay/aft)
|
||||
"cwr" = (
|
||||
/obj/effect/spawner/structure/window,
|
||||
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
|
||||
dir = 4
|
||||
},
|
||||
/obj/machinery/door/poddoor/preopen{
|
||||
id = "isolb";
|
||||
name = "privacy shutters"
|
||||
},
|
||||
/obj/effect/spawner/structure/window/reinforced,
|
||||
/obj/machinery/door/firedoor,
|
||||
/turf/open/floor/plating,
|
||||
/area/medical/patients_rooms/room_b)
|
||||
/area/medical/medbay/aft)
|
||||
"cws" = (
|
||||
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
|
||||
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
|
||||
@@ -65962,65 +65952,53 @@
|
||||
/turf/open/floor/plating,
|
||||
/area/maintenance/port/aft)
|
||||
"cxe" = (
|
||||
/obj/structure/bed,
|
||||
/obj/item/bedsheet/medical,
|
||||
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
|
||||
dir = 5
|
||||
},
|
||||
/obj/machinery/airalarm{
|
||||
dir = 4;
|
||||
pixel_x = -23
|
||||
},
|
||||
/obj/effect/turf_decal/tile/blue{
|
||||
dir = 1
|
||||
},
|
||||
/obj/effect/turf_decal/tile/blue{
|
||||
dir = 8
|
||||
},
|
||||
/obj/machinery/chem_master,
|
||||
/turf/open/floor/plasteel/white,
|
||||
/area/medical/patients_rooms/room_b)
|
||||
/area/medical/medbay/aft)
|
||||
"cxf" = (
|
||||
/obj/structure/cable/yellow{
|
||||
icon_state = "1-4"
|
||||
},
|
||||
/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
|
||||
dir = 8
|
||||
},
|
||||
/obj/machinery/firealarm{
|
||||
dir = 1;
|
||||
pixel_y = -24
|
||||
},
|
||||
/turf/open/floor/plasteel/white,
|
||||
/area/medical/patients_rooms/room_b)
|
||||
/area/medical/medbay/aft)
|
||||
"cxg" = (
|
||||
/obj/machinery/atmospherics/components/unary/vent_pump/on{
|
||||
dir = 4
|
||||
},
|
||||
/obj/structure/cable/yellow{
|
||||
icon_state = "4-8"
|
||||
},
|
||||
/obj/effect/turf_decal/tile/blue,
|
||||
/obj/effect/turf_decal/tile/blue{
|
||||
dir = 4
|
||||
},
|
||||
/turf/open/floor/plasteel/white,
|
||||
/area/medical/patients_rooms/room_b)
|
||||
/area/medical/medbay/aft)
|
||||
"cxh" = (
|
||||
/obj/machinery/door/airlock/medical{
|
||||
name = "Patient Room B";
|
||||
req_access_txt = "5"
|
||||
},
|
||||
/obj/structure/cable/yellow{
|
||||
icon_state = "4-8"
|
||||
},
|
||||
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
|
||||
dir = 4
|
||||
},
|
||||
/obj/machinery/door/airlock/medical/glass{
|
||||
name = "Apothecary";
|
||||
req_access_txt = "5"
|
||||
},
|
||||
/obj/machinery/door/firedoor,
|
||||
/turf/open/floor/plasteel/white,
|
||||
/area/medical/patients_rooms/room_b)
|
||||
/area/medical/medbay/aft)
|
||||
"cxi" = (
|
||||
/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
|
||||
dir = 4
|
||||
},
|
||||
/obj/structure/cable/yellow{
|
||||
icon_state = "4-8"
|
||||
},
|
||||
/obj/effect/turf_decal/tile/blue{
|
||||
dir = 1
|
||||
},
|
||||
@@ -66033,9 +66011,6 @@
|
||||
/obj/structure/cable/yellow{
|
||||
icon_state = "1-2"
|
||||
},
|
||||
/obj/structure/cable/yellow{
|
||||
icon_state = "1-8"
|
||||
},
|
||||
/turf/open/floor/plasteel/white,
|
||||
/area/medical/medbay/aft)
|
||||
"cxk" = (
|
||||
@@ -105762,8 +105737,8 @@ css
|
||||
dux
|
||||
dux
|
||||
dux
|
||||
dux
|
||||
dux
|
||||
cxU
|
||||
cxU
|
||||
cxU
|
||||
cyO
|
||||
czP
|
||||
@@ -120078,10 +120053,10 @@ agz
|
||||
aoV
|
||||
dhs
|
||||
arB
|
||||
asV
|
||||
aab
|
||||
auf
|
||||
arB
|
||||
awE
|
||||
aae
|
||||
axE
|
||||
arB
|
||||
dhA
|
||||
@@ -121620,19 +121595,19 @@ anK
|
||||
aoZ
|
||||
aqk
|
||||
arB
|
||||
ata
|
||||
aad
|
||||
aul
|
||||
avp
|
||||
awG
|
||||
aaM
|
||||
axJ
|
||||
avp
|
||||
aAj
|
||||
arB
|
||||
aCJ
|
||||
aaU
|
||||
aEe
|
||||
arB
|
||||
boS
|
||||
aHS
|
||||
aaV
|
||||
aJh
|
||||
aKt
|
||||
aLW
|
||||
|
||||
@@ -2833,7 +2833,9 @@
|
||||
/turf/open/floor/plasteel/dark,
|
||||
/area/crew_quarters/heads/hop)
|
||||
"aeP" = (
|
||||
/obj/machinery/status_display/supply,
|
||||
/obj/machinery/status_display/supply{
|
||||
pixel_x = -32
|
||||
},
|
||||
/obj/effect/turf_decal/loading_area,
|
||||
/turf/open/floor/plasteel,
|
||||
/area/quartermaster/storage)
|
||||
|
||||
@@ -2,12 +2,44 @@
|
||||
"aaa" = (
|
||||
/turf/open/space/basic,
|
||||
/area/space)
|
||||
"aab" = (
|
||||
/obj/structure/bed,
|
||||
/obj/machinery/button/door{
|
||||
id = "Dorm3Shutters";
|
||||
name = "Privacy Shutters Control";
|
||||
pixel_y = 26
|
||||
},
|
||||
/obj/effect/spawner/lootdrop/bedsheet,
|
||||
/turf/open/floor/wood,
|
||||
/area/crew_quarters/dorms)
|
||||
"aac" = (
|
||||
/obj/structure/bed,
|
||||
/obj/machinery/button/door{
|
||||
id = "Dorm2Shutters";
|
||||
name = "Privacy Shutters Control";
|
||||
pixel_y = 26;
|
||||
req_access_txt = "0"
|
||||
},
|
||||
/obj/effect/spawner/lootdrop/bedsheet,
|
||||
/turf/open/floor/carpet,
|
||||
/area/crew_quarters/dorms)
|
||||
"aad" = (
|
||||
/obj/effect/spawner/lootdrop/maintenance,
|
||||
/turf/open/floor/plating{
|
||||
icon_state = "platingdmg3"
|
||||
},
|
||||
/area/maintenance/department/science)
|
||||
"aae" = (
|
||||
/obj/structure/bed,
|
||||
/obj/machinery/button/door{
|
||||
id = "Dorm1Shutters";
|
||||
name = "Privacy Shutters Control";
|
||||
pixel_y = 26;
|
||||
req_access_txt = "0"
|
||||
},
|
||||
/obj/effect/spawner/lootdrop/bedsheet,
|
||||
/turf/open/floor/plasteel/grimy,
|
||||
/area/crew_quarters/dorms)
|
||||
"abf" = (
|
||||
/obj/structure/bed,
|
||||
/turf/open/floor/plating,
|
||||
@@ -8605,16 +8637,6 @@
|
||||
},
|
||||
/turf/open/floor/plating,
|
||||
/area/crew_quarters/dorms)
|
||||
"ave" = (
|
||||
/obj/structure/bed,
|
||||
/obj/item/bedsheet/nanotrasen,
|
||||
/obj/machinery/button/door{
|
||||
id = "Dorm3Shutters";
|
||||
name = "Privacy Shutters Control";
|
||||
pixel_y = 26
|
||||
},
|
||||
/turf/open/floor/wood,
|
||||
/area/crew_quarters/dorms)
|
||||
"avf" = (
|
||||
/obj/machinery/light/small{
|
||||
dir = 1
|
||||
@@ -10058,17 +10080,6 @@
|
||||
},
|
||||
/turf/open/floor/plating,
|
||||
/area/crew_quarters/dorms)
|
||||
"ayj" = (
|
||||
/obj/structure/bed,
|
||||
/obj/item/bedsheet/nanotrasen,
|
||||
/obj/machinery/button/door{
|
||||
id = "Dorm2Shutters";
|
||||
name = "Privacy Shutters Control";
|
||||
pixel_y = 26;
|
||||
req_access_txt = "0"
|
||||
},
|
||||
/turf/open/floor/carpet,
|
||||
/area/crew_quarters/dorms)
|
||||
"ayk" = (
|
||||
/obj/machinery/light/small{
|
||||
dir = 1
|
||||
@@ -11516,17 +11527,6 @@
|
||||
},
|
||||
/turf/open/floor/plating,
|
||||
/area/crew_quarters/dorms)
|
||||
"aBM" = (
|
||||
/obj/structure/bed,
|
||||
/obj/item/bedsheet/nanotrasen,
|
||||
/obj/machinery/button/door{
|
||||
id = "Dorm1Shutters";
|
||||
name = "Privacy Shutters Control";
|
||||
pixel_y = 26;
|
||||
req_access_txt = "0"
|
||||
},
|
||||
/turf/open/floor/plasteel/grimy,
|
||||
/area/crew_quarters/dorms)
|
||||
"aBN" = (
|
||||
/obj/machinery/light/small{
|
||||
dir = 1
|
||||
@@ -16464,8 +16464,8 @@
|
||||
/area/storage/eva)
|
||||
"aNt" = (
|
||||
/obj/structure/rack,
|
||||
/obj/item/tank/jetpack/carbondioxide,
|
||||
/obj/item/tank/jetpack/carbondioxide{
|
||||
/obj/item/tank/jetpack/carbondioxide/eva,
|
||||
/obj/item/tank/jetpack/carbondioxide/eva{
|
||||
pixel_x = -4;
|
||||
pixel_y = 1
|
||||
},
|
||||
@@ -17294,7 +17294,7 @@
|
||||
lootcount = 2;
|
||||
name = "2maintenance loot spawner"
|
||||
},
|
||||
/obj/item/clothing/gloves/color/random,
|
||||
/obj/effect/spawner/lootdrop/gloves,
|
||||
/turf/open/floor/plating,
|
||||
/area/maintenance/department/crew_quarters/bar)
|
||||
"aPD" = (
|
||||
@@ -21743,7 +21743,9 @@
|
||||
/turf/open/floor/plasteel,
|
||||
/area/hallway/primary/central)
|
||||
"aZj" = (
|
||||
/obj/machinery/status_display/supply,
|
||||
/obj/machinery/status_display/supply{
|
||||
pixel_x = -32
|
||||
},
|
||||
/obj/machinery/computer/bounty{
|
||||
dir = 4
|
||||
},
|
||||
@@ -35713,13 +35715,13 @@
|
||||
/obj/structure/extinguisher_cabinet{
|
||||
pixel_x = -26
|
||||
},
|
||||
/obj/machinery/rnd/production/protolathe/department/medical,
|
||||
/obj/effect/turf_decal/tile/blue{
|
||||
dir = 1
|
||||
},
|
||||
/obj/effect/turf_decal/tile/blue{
|
||||
dir = 4
|
||||
},
|
||||
/obj/machinery/rnd/production/techfab/department/medical,
|
||||
/turf/open/floor/plasteel/white,
|
||||
/area/medical/medbay/central)
|
||||
"bEw" = (
|
||||
@@ -36058,7 +36060,9 @@
|
||||
/obj/item/folder/white,
|
||||
/obj/item/pen,
|
||||
/obj/item/stamp/rd,
|
||||
/obj/machinery/status_display/ai,
|
||||
/obj/machinery/status_display/ai{
|
||||
pixel_y = -32
|
||||
},
|
||||
/obj/machinery/camera{
|
||||
c_tag = "Research Director's Office";
|
||||
dir = 1;
|
||||
@@ -44325,7 +44329,9 @@
|
||||
dir = 1;
|
||||
pixel_y = -22
|
||||
},
|
||||
/obj/structure/closet/radiation,
|
||||
/obj/machinery/shower{
|
||||
dir = 4
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
/area/engine/break_room)
|
||||
"bWF" = (
|
||||
@@ -44352,7 +44358,10 @@
|
||||
dir = 6
|
||||
},
|
||||
/obj/effect/turf_decal/delivery,
|
||||
/obj/structure/closet/radiation,
|
||||
/obj/machinery/shower{
|
||||
dir = 8;
|
||||
pixel_y = -4
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
/area/engine/break_room)
|
||||
"bWH" = (
|
||||
@@ -44932,6 +44941,7 @@
|
||||
/obj/effect/turf_decal/stripes/line{
|
||||
dir = 1
|
||||
},
|
||||
/obj/structure/closet/radiation,
|
||||
/turf/open/floor/plasteel,
|
||||
/area/engine/engineering)
|
||||
"bYn" = (
|
||||
@@ -44956,6 +44966,7 @@
|
||||
/obj/machinery/light{
|
||||
dir = 4
|
||||
},
|
||||
/obj/structure/closet/radiation,
|
||||
/turf/open/floor/plasteel,
|
||||
/area/engine/engineering)
|
||||
"bYp" = (
|
||||
@@ -53780,7 +53791,7 @@
|
||||
"eSB" = (
|
||||
/obj/machinery/computer/cryopod{
|
||||
dir = 1;
|
||||
pixel_y = -26;
|
||||
pixel_y = -26
|
||||
},
|
||||
/turf/open/floor/plasteel/dark,
|
||||
/area/security/prison)
|
||||
@@ -99261,13 +99272,13 @@ ale
|
||||
asb
|
||||
coe
|
||||
apX
|
||||
ave
|
||||
aab
|
||||
awn
|
||||
apX
|
||||
ayj
|
||||
aac
|
||||
azr
|
||||
apX
|
||||
aBM
|
||||
aae
|
||||
aDb
|
||||
apX
|
||||
oFo
|
||||
|
||||
@@ -2248,6 +2248,11 @@
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
/area/tdome/arena_source)
|
||||
"fR" = (
|
||||
/obj/item/paicard,
|
||||
/obj/structure/table/wood,
|
||||
/turf/open/floor/engine/cult,
|
||||
/area/wizard_station)
|
||||
"fS" = (
|
||||
/obj/effect/turf_decal/tile/red{
|
||||
dir = 8
|
||||
@@ -2935,6 +2940,22 @@
|
||||
/obj/machinery/capture_the_flag/red,
|
||||
/turf/open/floor/circuit/green/anim,
|
||||
/area/ctf)
|
||||
"hH" = (
|
||||
/obj/structure/table/reinforced,
|
||||
/obj/item/flashlight/seclite,
|
||||
/obj/effect/turf_decal/tile/neutral{
|
||||
dir = 1
|
||||
},
|
||||
/obj/effect/turf_decal/tile/neutral,
|
||||
/obj/effect/turf_decal/tile/neutral{
|
||||
dir = 4
|
||||
},
|
||||
/obj/effect/turf_decal/tile/neutral{
|
||||
dir = 8
|
||||
},
|
||||
/obj/item/paicard,
|
||||
/turf/open/floor/plasteel/dark,
|
||||
/area/centcom/ferry)
|
||||
"hI" = (
|
||||
/obj/effect/turf_decal/stripes/line{
|
||||
dir = 10
|
||||
@@ -11370,21 +11391,6 @@
|
||||
/obj/structure/table/reinforced,
|
||||
/turf/open/floor/plasteel/grimy,
|
||||
/area/centcom/ferry)
|
||||
"AL" = (
|
||||
/obj/structure/table/reinforced,
|
||||
/obj/item/flashlight/seclite,
|
||||
/obj/effect/turf_decal/tile/neutral{
|
||||
dir = 1
|
||||
},
|
||||
/obj/effect/turf_decal/tile/neutral,
|
||||
/obj/effect/turf_decal/tile/neutral{
|
||||
dir = 4
|
||||
},
|
||||
/obj/effect/turf_decal/tile/neutral{
|
||||
dir = 8
|
||||
},
|
||||
/turf/open/floor/plasteel/dark,
|
||||
/area/centcom/ferry)
|
||||
"AM" = (
|
||||
/obj/machinery/shuttle_manipulator,
|
||||
/turf/open/floor/circuit/green,
|
||||
@@ -25222,7 +25228,7 @@ lI
|
||||
lI
|
||||
lI
|
||||
Ax
|
||||
qZ
|
||||
EW
|
||||
qZ
|
||||
qZ
|
||||
Ax
|
||||
@@ -25480,7 +25486,7 @@ lI
|
||||
lI
|
||||
Ax
|
||||
ra
|
||||
qZ
|
||||
Bf
|
||||
qZ
|
||||
tX
|
||||
qZ
|
||||
@@ -25736,7 +25742,7 @@ lI
|
||||
lI
|
||||
lI
|
||||
Ax
|
||||
qZ
|
||||
fR
|
||||
qZ
|
||||
qZ
|
||||
Ax
|
||||
@@ -56332,7 +56338,7 @@ yr
|
||||
sw
|
||||
sw
|
||||
Ad
|
||||
AL
|
||||
hH
|
||||
Bx
|
||||
sw
|
||||
Cv
|
||||
|
||||
@@ -239,6 +239,23 @@
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
/area/shuttle/pirate)
|
||||
"as" = (
|
||||
/obj/machinery/atmospherics/components/unary/vent_pump/on,
|
||||
/obj/structure/closet/secure_closet/personal,
|
||||
/obj/effect/decal/cleanable/dirt,
|
||||
/obj/item/bedsheet/pirate,
|
||||
/turf/open/floor/plasteel,
|
||||
/area/shuttle/pirate)
|
||||
"at" = (
|
||||
/obj/structure/closet/secure_closet/personal,
|
||||
/obj/effect/decal/cleanable/dirt,
|
||||
/obj/effect/turf_decal/tile/neutral,
|
||||
/obj/effect/turf_decal/tile/neutral{
|
||||
dir = 8
|
||||
},
|
||||
/obj/item/bedsheet/pirate,
|
||||
/turf/open/floor/plasteel,
|
||||
/area/shuttle/pirate)
|
||||
"au" = (
|
||||
/obj/machinery/door/airlock/hatch{
|
||||
id_tag = "piratebridgebolt";
|
||||
@@ -314,6 +331,13 @@
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
/area/shuttle/pirate)
|
||||
"aA" = (
|
||||
/obj/structure/closet/secure_closet/personal,
|
||||
/obj/effect/decal/cleanable/dirt,
|
||||
/obj/effect/turf_decal/stripes/line,
|
||||
/obj/item/bedsheet/pirate,
|
||||
/turf/open/floor/wood,
|
||||
/area/shuttle/pirate)
|
||||
"aB" = (
|
||||
/obj/machinery/light/small{
|
||||
dir = 4
|
||||
@@ -408,12 +432,6 @@
|
||||
/obj/effect/decal/cleanable/dirt,
|
||||
/turf/open/floor/plating,
|
||||
/area/shuttle/pirate)
|
||||
"aM" = (
|
||||
/obj/structure/closet/secure_closet/personal,
|
||||
/obj/effect/decal/cleanable/dirt,
|
||||
/obj/effect/turf_decal/stripes/line,
|
||||
/turf/open/floor/wood,
|
||||
/area/shuttle/pirate)
|
||||
"aN" = (
|
||||
/obj/machinery/light/small,
|
||||
/obj/machinery/button/door{
|
||||
@@ -1022,12 +1040,6 @@
|
||||
/obj/effect/decal/cleanable/dirt,
|
||||
/turf/open/floor/plating,
|
||||
/area/shuttle/pirate)
|
||||
"mD" = (
|
||||
/obj/machinery/atmospherics/components/unary/vent_pump/on,
|
||||
/obj/structure/closet/secure_closet/personal,
|
||||
/obj/effect/decal/cleanable/dirt,
|
||||
/turf/open/floor/plasteel,
|
||||
/area/shuttle/pirate)
|
||||
"mU" = (
|
||||
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
|
||||
/obj/machinery/door/airlock/engineering{
|
||||
@@ -1172,15 +1184,6 @@
|
||||
},
|
||||
/turf/open/floor/wood,
|
||||
/area/shuttle/pirate)
|
||||
"Ur" = (
|
||||
/obj/structure/closet/secure_closet/personal,
|
||||
/obj/effect/decal/cleanable/dirt,
|
||||
/obj/effect/turf_decal/tile/neutral,
|
||||
/obj/effect/turf_decal/tile/neutral{
|
||||
dir = 8
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
/area/shuttle/pirate)
|
||||
|
||||
(1,1,1) = {"
|
||||
af
|
||||
@@ -1231,7 +1234,7 @@ aq
|
||||
ar
|
||||
aj
|
||||
RY
|
||||
aM
|
||||
aA
|
||||
ep
|
||||
aH
|
||||
af
|
||||
@@ -1406,9 +1409,9 @@ af
|
||||
af
|
||||
af
|
||||
aj
|
||||
mD
|
||||
as
|
||||
bB
|
||||
Ur
|
||||
at
|
||||
aj
|
||||
aj
|
||||
aj
|
||||
|
||||
@@ -1,7 +1,81 @@
|
||||
//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
|
||||
"aa" = (
|
||||
/obj/structure/bed,
|
||||
/obj/machinery/firealarm{
|
||||
dir = 8;
|
||||
pixel_x = -26
|
||||
},
|
||||
/obj/item/bedsheet/pirate,
|
||||
/turf/open/floor/plasteel/dark/side{
|
||||
dir = 6
|
||||
},
|
||||
/area/shuttle/caravan/pirate)
|
||||
"ab" = (
|
||||
/obj/structure/chair/office/dark{
|
||||
dir = 4
|
||||
},
|
||||
/obj/machinery/turretid{
|
||||
icon_state = "control_kill";
|
||||
lethal = 1;
|
||||
locked = 0;
|
||||
pixel_y = -30;
|
||||
req_access = null
|
||||
},
|
||||
/obj/effect/turf_decal/tile/neutral{
|
||||
dir = 1
|
||||
},
|
||||
/obj/effect/turf_decal/tile/neutral,
|
||||
/obj/effect/turf_decal/tile/neutral{
|
||||
dir = 4
|
||||
},
|
||||
/obj/effect/turf_decal/tile/neutral{
|
||||
dir = 8
|
||||
},
|
||||
/mob/living/simple_animal/hostile/pirate/ranged{
|
||||
environment_smash = 0
|
||||
},
|
||||
/turf/open/floor/plasteel/dark,
|
||||
/area/shuttle/caravan/pirate)
|
||||
"ac" = (
|
||||
/obj/structure/bed,
|
||||
/obj/machinery/airalarm/all_access{
|
||||
dir = 4;
|
||||
pixel_x = -24
|
||||
},
|
||||
/obj/effect/turf_decal/tile/red{
|
||||
dir = 8
|
||||
},
|
||||
/obj/item/bedsheet/pirate,
|
||||
/turf/open/floor/plasteel/dark,
|
||||
/area/shuttle/caravan/pirate)
|
||||
"ad" = (
|
||||
/obj/effect/decal/cleanable/dirt,
|
||||
/mob/living/simple_animal/hostile/pirate/ranged{
|
||||
environment_smash = 0
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
/area/shuttle/caravan/pirate)
|
||||
"ae" = (
|
||||
/obj/structure/rack,
|
||||
/obj/item/storage/bag/money/vault,
|
||||
/obj/effect/turf_decal/tile/blue{
|
||||
dir = 4
|
||||
},
|
||||
/mob/living/simple_animal/parrot{
|
||||
faction = list("pirate");
|
||||
name = "Pegwing"
|
||||
},
|
||||
/turf/open/floor/plasteel/dark,
|
||||
/area/shuttle/caravan/pirate)
|
||||
"af" = (
|
||||
/turf/closed/wall/mineral/plastitanium/nodiagonal,
|
||||
/area/shuttle/caravan/pirate)
|
||||
"ag" = (
|
||||
/obj/machinery/light/small,
|
||||
/obj/structure/bed,
|
||||
/obj/item/bedsheet/pirate,
|
||||
/turf/open/floor/plasteel/dark,
|
||||
/area/shuttle/caravan/pirate)
|
||||
"aE" = (
|
||||
/obj/structure/closet{
|
||||
name = "pirate outfits"
|
||||
@@ -89,18 +163,6 @@
|
||||
},
|
||||
/turf/open/floor/plasteel/dark,
|
||||
/area/shuttle/caravan/pirate)
|
||||
"fS" = (
|
||||
/obj/structure/bed,
|
||||
/obj/item/bedsheet/brown,
|
||||
/obj/machinery/airalarm/all_access{
|
||||
dir = 4;
|
||||
pixel_x = -24
|
||||
},
|
||||
/obj/effect/turf_decal/tile/red{
|
||||
dir = 8
|
||||
},
|
||||
/turf/open/floor/plasteel/dark,
|
||||
/area/shuttle/caravan/pirate)
|
||||
"fU" = (
|
||||
/obj/machinery/atmospherics/pipe/manifold/supply/hidden,
|
||||
/obj/effect/turf_decal/tile/red,
|
||||
@@ -223,18 +285,6 @@
|
||||
dir = 1
|
||||
},
|
||||
/area/shuttle/caravan/pirate)
|
||||
"ku" = (
|
||||
/obj/structure/rack,
|
||||
/obj/item/storage/bag/money/vault,
|
||||
/mob/living/simple_animal/parrot{
|
||||
faction = list("pirate");
|
||||
name = "Pegwing"
|
||||
},
|
||||
/obj/effect/turf_decal/tile/blue{
|
||||
dir = 4
|
||||
},
|
||||
/turf/open/floor/plasteel/dark,
|
||||
/area/shuttle/caravan/pirate)
|
||||
"kY" = (
|
||||
/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
|
||||
dir = 8
|
||||
@@ -502,13 +552,6 @@
|
||||
/obj/item/reagent_containers/food/drinks/bottle/rum,
|
||||
/turf/open/floor/plasteel/dark,
|
||||
/area/shuttle/caravan/pirate)
|
||||
"tM" = (
|
||||
/mob/living/simple_animal/hostile/pirate/ranged{
|
||||
environment_smash = 0
|
||||
},
|
||||
/obj/effect/decal/cleanable/dirt,
|
||||
/turf/open/floor/plasteel,
|
||||
/area/shuttle/caravan/pirate)
|
||||
"ul" = (
|
||||
/obj/structure/table,
|
||||
/obj/item/retractor,
|
||||
@@ -535,17 +578,6 @@
|
||||
/obj/effect/decal/cleanable/dirt,
|
||||
/turf/open/floor/plasteel,
|
||||
/area/shuttle/caravan/pirate)
|
||||
"vq" = (
|
||||
/obj/structure/bed,
|
||||
/obj/item/bedsheet/brown,
|
||||
/obj/machinery/firealarm{
|
||||
dir = 8;
|
||||
pixel_x = -26
|
||||
},
|
||||
/turf/open/floor/plasteel/dark/side{
|
||||
dir = 6
|
||||
},
|
||||
/area/shuttle/caravan/pirate)
|
||||
"vW" = (
|
||||
/obj/machinery/light/small{
|
||||
dir = 4
|
||||
@@ -734,32 +766,6 @@
|
||||
},
|
||||
/turf/open/floor/plasteel/dark,
|
||||
/area/shuttle/caravan/pirate)
|
||||
"EB" = (
|
||||
/obj/structure/chair/office/dark{
|
||||
dir = 4
|
||||
},
|
||||
/obj/machinery/turretid{
|
||||
icon_state = "control_kill";
|
||||
lethal = 1;
|
||||
locked = 0;
|
||||
pixel_y = -30;
|
||||
req_access = null
|
||||
},
|
||||
/mob/living/simple_animal/hostile/pirate/ranged{
|
||||
environment_smash = 0
|
||||
},
|
||||
/obj/effect/turf_decal/tile/neutral{
|
||||
dir = 1
|
||||
},
|
||||
/obj/effect/turf_decal/tile/neutral,
|
||||
/obj/effect/turf_decal/tile/neutral{
|
||||
dir = 4
|
||||
},
|
||||
/obj/effect/turf_decal/tile/neutral{
|
||||
dir = 8
|
||||
},
|
||||
/turf/open/floor/plasteel/dark,
|
||||
/area/shuttle/caravan/pirate)
|
||||
"EK" = (
|
||||
/obj/machinery/atmospherics/components/unary/vent_pump/on{
|
||||
dir = 1
|
||||
@@ -1018,12 +1024,6 @@
|
||||
},
|
||||
/turf/open/floor/plasteel/dark,
|
||||
/area/shuttle/caravan/pirate)
|
||||
"Wb" = (
|
||||
/obj/machinery/light/small,
|
||||
/obj/structure/bed,
|
||||
/obj/item/bedsheet/brown,
|
||||
/turf/open/floor/plasteel/dark,
|
||||
/area/shuttle/caravan/pirate)
|
||||
"Xq" = (
|
||||
/obj/structure/table/reinforced,
|
||||
/obj/machinery/recharger,
|
||||
@@ -1181,7 +1181,7 @@ su
|
||||
Ag
|
||||
af
|
||||
jo
|
||||
tM
|
||||
ad
|
||||
sr
|
||||
af
|
||||
af
|
||||
@@ -1253,9 +1253,9 @@ Jv
|
||||
af
|
||||
aE
|
||||
SF
|
||||
vq
|
||||
aa
|
||||
NM
|
||||
fS
|
||||
ac
|
||||
RC
|
||||
oF
|
||||
af
|
||||
@@ -1272,7 +1272,7 @@ hZ
|
||||
wZ
|
||||
de
|
||||
iF
|
||||
Wb
|
||||
ag
|
||||
af
|
||||
Jv
|
||||
Jv
|
||||
@@ -1286,7 +1286,7 @@ xg
|
||||
qC
|
||||
pK
|
||||
Sk
|
||||
ku
|
||||
ae
|
||||
af
|
||||
qo
|
||||
Jv
|
||||
@@ -1374,7 +1374,7 @@ Jv
|
||||
Jv
|
||||
Bi
|
||||
oO
|
||||
EB
|
||||
ab
|
||||
bd
|
||||
Bi
|
||||
Jv
|
||||
|
||||
@@ -35,3 +35,8 @@
|
||||
|
||||
//Overthrow time to update heads obj
|
||||
#define OBJECTIVE_UPDATING_TIME 300
|
||||
|
||||
//Gangshit
|
||||
#define NOT_DOMINATING -1
|
||||
#define MAX_LEADERS_GANG 3
|
||||
#define INITIAL_DOM_ATTEMPTS 3
|
||||
|
||||
@@ -1,8 +1,5 @@
|
||||
//LISTMOS
|
||||
//indices of values in gas lists.
|
||||
#define MOLES 1
|
||||
#define ARCHIVE 2
|
||||
#define GAS_META 3
|
||||
#define META_GAS_SPECIFIC_HEAT 1
|
||||
#define META_GAS_NAME 2
|
||||
#define META_GAS_MOLES_VISIBLE 3
|
||||
@@ -242,20 +239,25 @@
|
||||
|
||||
//HELPERS
|
||||
#define THERMAL_ENERGY(gas) (gas.temperature * gas.heat_capacity())
|
||||
|
||||
#define ADD_GAS(gas_id, out_list)\
|
||||
var/list/tmp_gaslist = GLOB.gaslist_cache[gas_id]; out_list[gas_id] = tmp_gaslist.Copy();
|
||||
|
||||
#define ASSERT_GAS(gas_id, gas_mixture) if (!gas_mixture.gases[gas_id]) { ADD_GAS(gas_id, gas_mixture.gases) };
|
||||
|
||||
#define QUANTIZE(variable) (round(variable,0.0000001))/*I feel the need to document what happens here. Basically this is used to catch most rounding errors, however it's previous value made it so that
|
||||
once gases got hot enough, most procedures wouldnt occur due to the fact that the mole counts would get rounded away. Thus, we lowered it a few orders of magnititude */
|
||||
|
||||
//prefer this to gas_mixture/total_moles in performance critical areas
|
||||
#define TOTAL_MOLES(cached_gases, out_var)\
|
||||
out_var = 0;\
|
||||
for(var/total_moles_id in cached_gases){\
|
||||
out_var += cached_gases[total_moles_id][MOLES];\
|
||||
out_var += cached_gases[total_moles_id];\
|
||||
}
|
||||
|
||||
//Unomos - So for whatever reason, garbage collection actually drastically decreases the cost of atmos later in the round. Turning this into a define yields massively improved performance.
|
||||
#define GAS_GARBAGE_COLLECT(GASGASGAS)\
|
||||
var/list/CACHE_GAS = GASGASGAS;\
|
||||
for(var/id in CACHE_GAS){\
|
||||
if(QUANTIZE(CACHE_GAS[id]) <= 0)\
|
||||
CACHE_GAS -= id;\
|
||||
}
|
||||
|
||||
#define ARCHIVE_TEMPERATURE(gas) gas.temperature_archived = gas.temperature
|
||||
|
||||
GLOBAL_LIST_INIT(pipe_paint_colors, list(
|
||||
"amethyst" = rgb(130,43,255), //supplymain
|
||||
|
||||
@@ -33,8 +33,8 @@
|
||||
#define BALLS_VOLUME_MULT 1
|
||||
|
||||
#define BALLS_SIZE_MIN 1
|
||||
#define BALLS_SIZE_DEF 3
|
||||
#define BALLS_SIZE_MAX 7
|
||||
#define BALLS_SIZE_DEF 2
|
||||
#define BALLS_SIZE_MAX 3
|
||||
|
||||
#define BALLS_SACK_SIZE_MIN 1
|
||||
#define BALLS_SACK_SIZE_DEF 8
|
||||
|
||||
@@ -79,6 +79,8 @@
|
||||
#define ATTACK_EFFECT_SMASH "smash"
|
||||
#define ATTACK_EFFECT_CLAW "claw"
|
||||
#define ATTACK_EFFECT_DISARM "disarm"
|
||||
#define ATTACK_EFFECT_ASS_SLAP "ass_slap"
|
||||
#define ATTACK_EFFECT_FACE_SLAP "face_slap"
|
||||
#define ATTACK_EFFECT_BITE "bite"
|
||||
#define ATTACK_EFFECT_MECHFIRE "mech_fire"
|
||||
#define ATTACK_EFFECT_MECHTOXIN "mech_toxin"
|
||||
|
||||
@@ -130,6 +130,17 @@
|
||||
#define COMSIG_MOB_ITEM_AFTERATTACK "mob_item_afterattack" //from base of obj/item/afterattack(): (atom/target, mob/user, proximity_flag, click_parameters)
|
||||
#define COMSIG_MOB_ATTACK_RANGED "mob_attack_ranged" //from base of mob/RangedAttack(): (atom/A, params)
|
||||
#define COMSIG_MOB_THROW "mob_throw" //from base of /mob/throw_item(): (atom/target)
|
||||
#define COMSIG_MOB_UPDATE_SIGHT "mob_update_sight" //from base of /mob/update_sight(): ()
|
||||
#define COMSIG_MOB_SAY "mob_say" // from /mob/living/say(): (proc args list)
|
||||
#define COMPONENT_UPPERCASE_SPEECH 1
|
||||
// used to access COMSIG_MOB_SAY argslist
|
||||
#define SPEECH_MESSAGE 1
|
||||
// #define SPEECH_BUBBLE_TYPE 2
|
||||
#define SPEECH_SPANS 3
|
||||
/* #define SPEECH_SANITIZE 4
|
||||
#define SPEECH_LANGUAGE 5
|
||||
#define SPEECH_IGNORE_SPAM 6
|
||||
#define SPEECH_FORCED 7 */
|
||||
|
||||
// /mob/living signals
|
||||
#define COMSIG_LIVING_RESIST "living_resist" //from base of mob/living/resist() (/mob/living)
|
||||
@@ -142,8 +153,9 @@
|
||||
#define COMSIG_CARBON_SOUNDBANG "carbon_soundbang" //from base of mob/living/carbon/soundbang_act(): (list(intensity))
|
||||
|
||||
// /obj signals
|
||||
#define COMSIG_OBJ_DECONSTRUCT "obj_deconstruct" //from base of obj/deconstruct(): (disassembled)
|
||||
#define COMSIG_OBJ_SETANCHORED "obj_setanchored" //called in /obj/structure/setAnchored(): (value)
|
||||
#define COMSIG_OBJ_DECONSTRUCT "obj_deconstruct" //from base of obj/deconstruct(): (disassembled)
|
||||
#define COMSIG_OBJ_BREAK "obj_break" //from base of /obj/obj_break(): (damage_flag)
|
||||
#define COMSIG_OBJ_SETANCHORED "obj_setanchored" //called in /obj/structure/setAnchored(): (value)
|
||||
|
||||
// /obj/item signals
|
||||
#define COMSIG_ITEM_ATTACK "item_attack" //from base of obj/item/attack(): (/mob/living/target, /mob/living/user)
|
||||
|
||||
@@ -102,7 +102,8 @@
|
||||
#define CAT_SANDWICH "Sandwiches"
|
||||
#define CAT_SOUP "Soups"
|
||||
#define CAT_SPAGHETTI "Spaghettis"
|
||||
#define CAT_SUSHI "Fish"
|
||||
#define CAT_FISH "Fish"
|
||||
#define CAT_ICE "Frozen"
|
||||
|
||||
#define RCD_FLOORWALL 1
|
||||
#define RCD_AIRLOCK 2
|
||||
|
||||
@@ -8,6 +8,7 @@
|
||||
#define ENABLE_BITFIELD(variable, flag) (variable |= (flag))
|
||||
#define DISABLE_BITFIELD(variable, flag) (variable &= ~(flag))
|
||||
#define CHECK_BITFIELD(variable, flag) (variable & flag)
|
||||
#define TOGGLE_BITFIELD(variable, flag) (variable ^= (flag))
|
||||
|
||||
GLOBAL_LIST_INIT(bitflags, list(1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384, 32768))
|
||||
|
||||
@@ -56,9 +57,6 @@ GLOBAL_LIST_INIT(bitflags, list(1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 204
|
||||
#define FLYING (1<<1)
|
||||
#define VENTCRAWLING (1<<2)
|
||||
|
||||
// Flags for reagents
|
||||
#define REAGENT_NOREACT (1<<0)
|
||||
|
||||
//Fire and Acid stuff, for resistance_flags
|
||||
#define LAVA_PROOF (1<<0)
|
||||
#define FIRE_PROOF (1<<1) //100% immune to fire damage (but not necessarily to lava or heat)
|
||||
|
||||
@@ -16,3 +16,4 @@
|
||||
#define DRINK_GOOD 2
|
||||
#define DRINK_VERYGOOD 3
|
||||
#define DRINK_FANTASTIC 4
|
||||
#define FOOD_AMAZING 5
|
||||
|
||||
+109
-1
@@ -6,6 +6,14 @@
|
||||
#define FOOTSTEP_GRASS "grass"
|
||||
#define FOOTSTEP_WATER "water"
|
||||
#define FOOTSTEP_LAVA "lava"
|
||||
//barefoot sounds
|
||||
#define FOOTSTEP_WOOD_BAREFOOT "woodbarefoot"
|
||||
#define FOOTSTEP_WOOD_CLAW "woodclaw"
|
||||
#define FOOTSTEP_HARD_BAREFOOT "hardbarefoot"
|
||||
#define FOOTSTEP_HARD_CLAW "hardclaw"
|
||||
#define FOOTSTEP_CARPET_BAREFOOT "carpetbarefoot"
|
||||
//misc footstep sounds
|
||||
#define FOOTSTEP_GENERIC_HEAVY "heavy"
|
||||
|
||||
/*
|
||||
|
||||
@@ -63,4 +71,104 @@ GLOBAL_LIST_INIT(footstep, list(
|
||||
'sound/effects/footstep/lava1.ogg',
|
||||
'sound/effects/footstep/lava2.ogg',
|
||||
'sound/effects/footstep/lava3.ogg'), 100, 0),
|
||||
))
|
||||
))
|
||||
|
||||
//bare footsteps lists
|
||||
GLOBAL_LIST_INIT(barefootstep, list(
|
||||
FOOTSTEP_WOOD_BAREFOOT = list(list(
|
||||
'sound/effects/footstep/woodbarefoot1.ogg',
|
||||
'sound/effects/footstep/woodbarefoot2.ogg',
|
||||
'sound/effects/footstep/woodbarefoot3.ogg',
|
||||
'sound/effects/footstep/woodbarefoot4.ogg',
|
||||
'sound/effects/footstep/woodbarefoot5.ogg'), 80, -1),
|
||||
FOOTSTEP_HARD_BAREFOOT = list(list(
|
||||
'sound/effects/footstep/hardbarefoot1.ogg',
|
||||
'sound/effects/footstep/hardbarefoot2.ogg',
|
||||
'sound/effects/footstep/hardbarefoot3.ogg',
|
||||
'sound/effects/footstep/hardbarefoot4.ogg',
|
||||
'sound/effects/footstep/hardbarefoot5.ogg'), 80, -1),
|
||||
FOOTSTEP_CARPET_BAREFOOT = list(list(
|
||||
'sound/effects/footstep/carpetbarefoot1.ogg',
|
||||
'sound/effects/footstep/carpetbarefoot2.ogg',
|
||||
'sound/effects/footstep/carpetbarefoot3.ogg',
|
||||
'sound/effects/footstep/carpetbarefoot4.ogg',
|
||||
'sound/effects/footstep/carpetbarefoot5.ogg'), 75, -2),
|
||||
FOOTSTEP_SAND = list(list(
|
||||
'sound/effects/footstep/asteroid1.ogg',
|
||||
'sound/effects/footstep/asteroid2.ogg',
|
||||
'sound/effects/footstep/asteroid3.ogg',
|
||||
'sound/effects/footstep/asteroid4.ogg',
|
||||
'sound/effects/footstep/asteroid5.ogg'), 75, 0),
|
||||
FOOTSTEP_GRASS = list(list(
|
||||
'sound/effects/footstep/grass1.ogg',
|
||||
'sound/effects/footstep/grass2.ogg',
|
||||
'sound/effects/footstep/grass3.ogg',
|
||||
'sound/effects/footstep/grass4.ogg'), 75, 0),
|
||||
FOOTSTEP_WATER = list(list(
|
||||
'sound/effects/footstep/water1.ogg',
|
||||
'sound/effects/footstep/water2.ogg',
|
||||
'sound/effects/footstep/water3.ogg',
|
||||
'sound/effects/footstep/water4.ogg'), 100, 1),
|
||||
FOOTSTEP_LAVA = list(list(
|
||||
'sound/effects/footstep/lava1.ogg',
|
||||
'sound/effects/footstep/lava2.ogg',
|
||||
'sound/effects/footstep/lava3.ogg'), 100, 0),
|
||||
))
|
||||
|
||||
//claw footsteps lists
|
||||
GLOBAL_LIST_INIT(clawfootstep, list(
|
||||
FOOTSTEP_WOOD_CLAW = list(list(
|
||||
'sound/effects/footstep/woodclaw1.ogg',
|
||||
'sound/effects/footstep/woodclaw2.ogg',
|
||||
'sound/effects/footstep/woodclaw3.ogg',
|
||||
'sound/effects/footstep/woodclaw2.ogg',
|
||||
'sound/effects/footstep/woodclaw1.ogg'), 90, 1),
|
||||
FOOTSTEP_HARD_CLAW = list(list(
|
||||
'sound/effects/footstep/hardclaw1.ogg',
|
||||
'sound/effects/footstep/hardclaw2.ogg',
|
||||
'sound/effects/footstep/hardclaw3.ogg',
|
||||
'sound/effects/footstep/hardclaw4.ogg',
|
||||
'sound/effects/footstep/hardclaw1.ogg'), 90, 1),
|
||||
FOOTSTEP_CARPET_BAREFOOT = list(list(
|
||||
'sound/effects/footstep/carpetbarefoot1.ogg',
|
||||
'sound/effects/footstep/carpetbarefoot2.ogg',
|
||||
'sound/effects/footstep/carpetbarefoot3.ogg',
|
||||
'sound/effects/footstep/carpetbarefoot4.ogg',
|
||||
'sound/effects/footstep/carpetbarefoot5.ogg'), 75, -2),
|
||||
FOOTSTEP_SAND = list(list(
|
||||
'sound/effects/footstep/asteroid1.ogg',
|
||||
'sound/effects/footstep/asteroid2.ogg',
|
||||
'sound/effects/footstep/asteroid3.ogg',
|
||||
'sound/effects/footstep/asteroid4.ogg',
|
||||
'sound/effects/footstep/asteroid5.ogg'), 75, 0),
|
||||
FOOTSTEP_GRASS = list(list(
|
||||
'sound/effects/footstep/grass1.ogg',
|
||||
'sound/effects/footstep/grass2.ogg',
|
||||
'sound/effects/footstep/grass3.ogg',
|
||||
'sound/effects/footstep/grass4.ogg'), 75, 0),
|
||||
FOOTSTEP_WATER = list(list(
|
||||
'sound/effects/footstep/water1.ogg',
|
||||
'sound/effects/footstep/water2.ogg',
|
||||
'sound/effects/footstep/water3.ogg',
|
||||
'sound/effects/footstep/water4.ogg'), 100, 1),
|
||||
FOOTSTEP_LAVA = list(list(
|
||||
'sound/effects/footstep/lava1.ogg',
|
||||
'sound/effects/footstep/lava2.ogg',
|
||||
'sound/effects/footstep/lava3.ogg'), 100, 0),
|
||||
))
|
||||
|
||||
//heavy footsteps list
|
||||
GLOBAL_LIST_INIT(heavyfootstep, list(
|
||||
FOOTSTEP_GENERIC_HEAVY = list(list(
|
||||
'sound/effects/footstep/heavy1.ogg',
|
||||
'sound/effects/footstep/heavy2.ogg'), 100, 2),
|
||||
FOOTSTEP_WATER = list(list(
|
||||
'sound/effects/footstep/water1.ogg',
|
||||
'sound/effects/footstep/water2.ogg',
|
||||
'sound/effects/footstep/water3.ogg',
|
||||
'sound/effects/footstep/water4.ogg'), 100, 2),
|
||||
FOOTSTEP_LAVA = list(list(
|
||||
'sound/effects/footstep/lava1.ogg',
|
||||
'sound/effects/footstep/lava2.ogg',
|
||||
'sound/effects/footstep/lava3.ogg'), 100, 0),
|
||||
))
|
||||
|
||||
@@ -67,7 +67,7 @@
|
||||
|
||||
#define islarva(A) (istype(A, /mob/living/carbon/alien/larva))
|
||||
|
||||
#define isalienadult(A) (istype(A, /mob/living/carbon/alien/humanoid))
|
||||
#define isalienadult(A) (istype(A, /mob/living/carbon/alien/humanoid) || istype(A, /mob/living/simple_animal/hostile/alien))
|
||||
|
||||
#define isalienhunter(A) (istype(A, /mob/living/carbon/alien/humanoid/hunter))
|
||||
|
||||
@@ -123,6 +123,47 @@
|
||||
|
||||
#define isclown(A) (istype(A, /mob/living/simple_animal/hostile/retaliate/clown))
|
||||
|
||||
GLOBAL_LIST_INIT(shoefootmob, typecacheof(list(
|
||||
/mob/living/carbon/human/,
|
||||
/mob/living/simple_animal/cow,
|
||||
/mob/living/simple_animal/hostile/cat_butcherer,
|
||||
/mob/living/simple_animal/hostile/faithless,
|
||||
/mob/living/simple_animal/hostile/nanotrasen,
|
||||
/mob/living/simple_animal/hostile/pirate,
|
||||
/mob/living/simple_animal/hostile/russian,
|
||||
/mob/living/simple_animal/hostile/syndicate,
|
||||
/mob/living/simple_animal/hostile/wizard,
|
||||
/mob/living/simple_animal/hostile/zombie,
|
||||
/mob/living/simple_animal/hostile/retaliate/clown,
|
||||
/mob/living/simple_animal/hostile/retaliate/spaceman,
|
||||
/mob/living/simple_animal/hostile/retaliate/nanotrasenpeace,
|
||||
/mob/living/simple_animal/hostile/retaliate/goat,
|
||||
/mob/living/carbon/true_devil,
|
||||
)))
|
||||
|
||||
GLOBAL_LIST_INIT(clawfootmob, typecacheof(list(
|
||||
/mob/living/carbon/alien/humanoid,
|
||||
/mob/living/simple_animal/hostile/alien,
|
||||
/mob/living/simple_animal/pet/cat,
|
||||
/mob/living/simple_animal/pet/dog,
|
||||
/mob/living/simple_animal/pet/fox,
|
||||
/mob/living/simple_animal/chicken,
|
||||
/mob/living/simple_animal/hostile/bear,
|
||||
/mob/living/simple_animal/hostile/jungle/mega_arachnid
|
||||
)))
|
||||
|
||||
GLOBAL_LIST_INIT(barefootmob, typecacheof(list(
|
||||
/mob/living/carbon/monkey,
|
||||
/mob/living/simple_animal/pet/penguin,
|
||||
/mob/living/simple_animal/hostile/gorilla,
|
||||
/mob/living/simple_animal/hostile/jungle/mook
|
||||
)))
|
||||
|
||||
GLOBAL_LIST_INIT(heavyfootmob, typecacheof(list(
|
||||
/mob/living/simple_animal/hostile/megafauna,
|
||||
/mob/living/simple_animal/hostile/jungle/leaper
|
||||
)))
|
||||
|
||||
//Misc mobs
|
||||
#define isobserver(A) (istype(A, /mob/dead/observer))
|
||||
|
||||
@@ -136,6 +177,15 @@
|
||||
|
||||
#define iseminence(A) (istype(A, /mob/camera/eminence))
|
||||
|
||||
//Footstep helpers
|
||||
#define isshoefoot(A) (is_type_in_typecache(A, GLOB.shoefootmob))
|
||||
|
||||
#define isclawfoot(A) (is_type_in_typecache(A, GLOB.clawfootmob))
|
||||
|
||||
#define isbarefoot(A) (is_type_in_typecache(A, GLOB.barefootmob))
|
||||
|
||||
#define isheavyfoot(A) (is_type_in_typecache(A, GLOB.heavyfootmob))
|
||||
|
||||
//Objects
|
||||
#define isobj(A) istype(A, /obj) //override the byond proc because it returns true on children of /atom/movable that aren't objs
|
||||
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
#define INVESTIGATE_EXONET "exonet"
|
||||
#define INVESTIGATE_NANITES "nanites"
|
||||
#define INVESTIGATE_CIRCUIT "circuit"
|
||||
#define INVESTIGATE_RCD "rcd"
|
||||
|
||||
// Logging types for log_message()
|
||||
#define LOG_ATTACK (1 << 0)
|
||||
|
||||
+20
-3
@@ -114,8 +114,9 @@ Will print: "/mob/living/carbon/human/death" (you can optionally embed it in a s
|
||||
|
||||
#define TRANSITIONEDGE 7 //Distance from edge to move to another z-level
|
||||
|
||||
#define BE_CLOSE 1 //in the case of a silicon, to select if they need to be next to the atom
|
||||
#define NO_DEXTERY 1 //if other mobs (monkeys, aliens, etc) can use this
|
||||
#define BE_CLOSE TRUE //in the case of a silicon, to select if they need to be next to the atom
|
||||
#define NO_DEXTERY TRUE //if other mobs (monkeys, aliens, etc) can use this
|
||||
#define NO_TK TRUE
|
||||
//used by canUseTopic()
|
||||
|
||||
//singularity defines
|
||||
@@ -218,6 +219,9 @@ GLOBAL_LIST_EMPTY(bloody_footprints_cache)
|
||||
//Gets the turf this atom inhabits
|
||||
#define get_turf(A) (get_step(A, 0))
|
||||
|
||||
//Same as above except gets the area instead
|
||||
#define get_area(A) (isarea(A) ? A : get_step(A, 0)?.loc)
|
||||
|
||||
//Ghost orbit types:
|
||||
#define GHOST_ORBIT_CIRCLE "circle"
|
||||
#define GHOST_ORBIT_TRIANGLE "triangle"
|
||||
@@ -262,6 +266,15 @@ GLOBAL_LIST_INIT(ghost_others_options, list(GHOST_OTHERS_SIMPLE, GHOST_OTHERS_DE
|
||||
|
||||
GLOBAL_LIST_INIT(pda_styles, list(MONO, VT, ORBITRON, SHARE))
|
||||
|
||||
//pda icon reskins
|
||||
#define PDA_SKIN_CLASSIC "Classic"
|
||||
#define PDA_SKIN_ALT "Holographic"
|
||||
#define PDA_SKIN_RUGGED "Rugged"
|
||||
#define PDA_SKIN_MODERN "Modern"
|
||||
|
||||
GLOBAL_LIST_INIT(pda_reskins, list(PDA_SKIN_CLASSIC = 'icons/obj/pda.dmi', PDA_SKIN_ALT = 'icons/obj/pda_alt.dmi',
|
||||
PDA_SKIN_RUGGED = 'icons/obj/pda_rugged.dmi', PDA_SKIN_MODERN = 'icons/obj/pda_modern.dmi'))
|
||||
|
||||
//Color Defines
|
||||
#define OOC_COLOR "#002eb8"
|
||||
#define AOOC_COLOR "#b8002e"
|
||||
@@ -369,6 +382,7 @@ GLOBAL_LIST_INIT(pda_styles, list(MONO, VT, ORBITRON, SHARE))
|
||||
#define CLOCK_SILICONS 22
|
||||
#define CLOCK_PROSELYTIZATION 23
|
||||
#define SHUTTLE_HIJACK 24
|
||||
#define GANG_VICTORY 25
|
||||
|
||||
#define FIELD_TURF 1
|
||||
#define FIELD_EDGE 2
|
||||
@@ -476,4 +490,7 @@ GLOBAL_LIST_INIT(pda_styles, list(MONO, VT, ORBITRON, SHARE))
|
||||
#define AREASELECT_CORNERA "corner A"
|
||||
#define AREASELECT_CORNERB "corner B"
|
||||
|
||||
#define PREF_SAVELOAD_COOLDOWN 5
|
||||
#define PREF_SAVELOAD_COOLDOWN 5
|
||||
|
||||
#define VOMIT_TOXIC 1
|
||||
#define VOMIT_PURPLE 2
|
||||
@@ -54,6 +54,10 @@
|
||||
#define BODYPART_ORGANIC 1
|
||||
#define BODYPART_ROBOTIC 2
|
||||
|
||||
#define BODYPART_NOT_DISABLED 0
|
||||
#define BODYPART_DISABLED_DAMAGE 1
|
||||
#define BODYPART_DISABLED_PARALYSIS 2
|
||||
|
||||
#define DEFAULT_BODYPART_ICON_ORGANIC 'icons/mob/human_parts_greyscale.dmi'
|
||||
#define DEFAULT_BODYPART_ICON_ROBOTIC 'icons/mob/augmentation/augments.dmi'
|
||||
|
||||
|
||||
@@ -20,12 +20,12 @@
|
||||
#define FORCE_STRING_OVERRIDE (1<<2) // used for tooltips
|
||||
#define NEEDS_PERMIT (1<<3) //Used by security bots to determine if this item is safe for public use.
|
||||
#define SLOWS_WHILE_IN_HAND (1<<4)
|
||||
#define NO_MAT_REDEMPTION (1<<5) // Stops you from putting things like an RCD or other items into an ORM or protolathe for materials.
|
||||
#define DROPDEL (1<<6) // When dropped, it calls qdel on itself
|
||||
#define NO_MAT_REDEMPTION (1<<5) // Stops you from putting things like an RCD or other items into an ORM or protolathe for materials.
|
||||
#define DROPDEL (1<<6) // When dropped, it calls qdel on itself
|
||||
#define NOBLUDGEON (1<<7) // when an item has this it produces no "X has been hit by Y with Z" message in the default attackby()
|
||||
#define NODROP (1<<8) // This flag makes it so that an item literally cannot be removed at all, or at least that's how it should be. Only deleted.
|
||||
#define ABSTRACT (1<<9) // for all things that are technically items but used for various different stuff
|
||||
#define IMMUTABLE_SLOW (1<<10) //When players should not be able to change the slowdown of the item (Speed potions, ect)
|
||||
#define ABSTRACT (1<<8) // for all things that are technically items but used for various different stuff
|
||||
#define IMMUTABLE_SLOW (1<<9) //When players should not be able to change the slowdown of the item (Speed potions, ect)
|
||||
#define SURGICAL_TOOL (1<<10) //Tool commonly used for surgery: won't attack targets in an active surgical operation on help intent (in case of mistakes)
|
||||
|
||||
// Flags for the clothing_flags var on /obj/item/clothing
|
||||
|
||||
@@ -35,3 +35,5 @@
|
||||
#define MASKINTERNALS (1<<3) // mask allows internals
|
||||
#define NOSLIP (1<<4) //prevents from slipping on wet floors, in space etc
|
||||
#define THICKMATERIAL (1<<5) //prevents syringes, parapens and hypos if the external suit or helmet (if targeting head) has this flag. Example: space suits, biosuit, bombsuits, thick suits that cover your body.
|
||||
#define VOICEBOX_TOGGLABLE (1<<6) // The voicebox in this clothing can be toggled.
|
||||
#define VOICEBOX_DISABLED (1<<7) // The voicebox is currently turned off.
|
||||
@@ -23,6 +23,11 @@
|
||||
#define STIMULUM_ABSOLUTE_DROP 0.00000335
|
||||
#define REACTION_OPPRESSION_THRESHOLD 5
|
||||
#define NOBLIUM_FORMATION_ENERGY 2e9 //1 Mole of Noblium takes the planck energy to condense.
|
||||
//Research point amounts
|
||||
#define NOBLIUM_RESEARCH_AMOUNT 1000
|
||||
#define BZ_RESEARCH_AMOUNT 150
|
||||
#define MIASMA_RESEARCH_AMOUNT 160
|
||||
#define STIMULUM_RESEARCH_AMOUNT 50
|
||||
//Plasma fusion properties
|
||||
#define FUSION_ENERGY_THRESHOLD 3e9 //Amount of energy it takes to start a fusion reaction
|
||||
#define FUSION_TEMPERATURE_THRESHOLD 1000 //Temperature required to start a fusion reaction
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
#define LIQUID 2
|
||||
#define GAS 3
|
||||
|
||||
// container_type defines
|
||||
// reagents_flags defines
|
||||
#define INJECTABLE (1<<0) // Makes it possible to add reagents through droppers and syringes.
|
||||
#define DRAWABLE (1<<1) // Makes it possible to remove reagents through syringes.
|
||||
|
||||
@@ -11,6 +11,7 @@
|
||||
|
||||
#define TRANSPARENT (1<<4) // Used on containers which you want to be able to see the reagents off.
|
||||
#define AMOUNT_VISIBLE (1<<5) // For non-transparent containers that still have the general amount of reagents in them visible.
|
||||
#define NO_REACT (1<<6) // Applied to a reagent holder, the contents will not react with each other.
|
||||
|
||||
// Is an open container for all intents and purposes.
|
||||
#define OPENCONTAINER (REFILLABLE | DRAINABLE | TRANSPARENT)
|
||||
|
||||
@@ -35,6 +35,7 @@
|
||||
#define CLEAN_BOT (1<<3) // Cleanbots
|
||||
#define MED_BOT (1<<4) // Medibots
|
||||
#define HONK_BOT (1<<5) // Honkbots & ED-Honks
|
||||
#define FIRE_BOT (1<<6) // Firebots
|
||||
|
||||
//AI notification defines
|
||||
#define NEW_BORG 1
|
||||
|
||||
@@ -33,7 +33,8 @@
|
||||
#define ROLE_DRONE "drone"
|
||||
#define ROLE_DEATHSQUAD "deathsquad"
|
||||
#define ROLE_LAVALAND "lavaland"
|
||||
#define ROLE_INTERNAL_AFFAIRS "internal affairs agent"
|
||||
#define ROLE_INTERNAL_AFFAIRS "internal affairs agent"
|
||||
#define ROLE_GANG "gangster"
|
||||
|
||||
//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
|
||||
@@ -58,7 +59,8 @@ GLOBAL_LIST_INIT(special_roles, list(
|
||||
ROLE_SERVANT_OF_RATVAR = /datum/game_mode/clockwork_cult,
|
||||
ROLE_OVERTHROW = /datum/game_mode/overthrow,
|
||||
ROLE_INTERNAL_AFFAIRS = /datum/game_mode/traitor/internal_affairs,
|
||||
ROLE_SENTIENCE
|
||||
ROLE_SENTIENCE,
|
||||
ROLE_GANG = /datum/game_mode/gang
|
||||
))
|
||||
|
||||
//Job defines for what happens when you fail to qualify for any job during job selection
|
||||
|
||||
@@ -81,7 +81,7 @@
|
||||
#define INIT_ORDER_STICKY_BAN -10
|
||||
#define INIT_ORDER_LIGHTING -20
|
||||
#define INIT_ORDER_SHUTTLE -21
|
||||
#define INIT_ORDER_SQUEAK -40
|
||||
#define INIT_ORDER_MINOR_MAPPING -40
|
||||
#define INIT_ORDER_PATH -50
|
||||
#define INIT_ORDER_PERSISTENCE -100
|
||||
|
||||
@@ -102,7 +102,6 @@
|
||||
#define FIRE_PRIORITY_SPACEDRIFT 30
|
||||
#define FIRE_PRIORITY_FIELDS 30
|
||||
#define FIRE_PRIOTITY_SMOOTHING 35
|
||||
#define FIRE_PRIORITY_ORBIT 35
|
||||
#define FIRE_PRIORITY_NETWORKS 40
|
||||
#define FIRE_PRIORITY_OBJ 40
|
||||
#define FIRE_PRIORITY_ACID 40
|
||||
|
||||
+105
-1
@@ -1,3 +1,61 @@
|
||||
// trait accessor defines
|
||||
#define ADD_TRAIT(target, trait, source) \
|
||||
do { \
|
||||
var/list/_L; \
|
||||
if (!target.status_traits) { \
|
||||
target.status_traits = list(); \
|
||||
_L = target.status_traits; \
|
||||
_L[trait] = list(source); \
|
||||
} else { \
|
||||
_L = target.status_traits; \
|
||||
if (_L[trait]) { \
|
||||
_L[trait] |= list(source); \
|
||||
} else { \
|
||||
_L[trait] = list(source); \
|
||||
} \
|
||||
} \
|
||||
} while (0)
|
||||
#define REMOVE_TRAIT(target, trait, sources) \
|
||||
do { \
|
||||
var/list/_L = target.status_traits; \
|
||||
var/list/_S; \
|
||||
if (sources && !islist(sources)) { \
|
||||
_S = list(sources); \
|
||||
} else { \
|
||||
_S = sources\
|
||||
}; \
|
||||
if (_L && _L[trait]) { \
|
||||
for (var/_T in _L[trait]) { \
|
||||
if ((!_S && (_T != ROUNDSTART_TRAIT)) || (_T in _S)) { \
|
||||
_L[trait] -= _T \
|
||||
} \
|
||||
};\
|
||||
if (!length(_L[trait])) { \
|
||||
_L -= trait \
|
||||
}; \
|
||||
if (!length(_L)) { \
|
||||
target.status_traits = null \
|
||||
}; \
|
||||
} \
|
||||
} while (0)
|
||||
#define REMOVE_TRAITS_NOT_IN(target, sources) \
|
||||
do { \
|
||||
var/list/_L = target.status_traits; \
|
||||
var/list/_S = sources; \
|
||||
if (_L) { \
|
||||
for (var/_T in _L) { \
|
||||
_L[_T] &= _S;\
|
||||
if (!length(_L[_T])) { \
|
||||
_L -= _T } \
|
||||
};\
|
||||
if (!length(_L)) { \
|
||||
target.status_traits = null\
|
||||
};\
|
||||
}\
|
||||
} while (0)
|
||||
#define HAS_TRAIT(target, trait) (target.status_traits ? (target.status_traits[trait] ? TRUE : FALSE) : FALSE)
|
||||
#define HAS_TRAIT_FROM(target, trait, source) (target.status_traits ? (target.status_traits[trait] ? (source in target.status_traits[trait]) : FALSE) : FALSE)
|
||||
|
||||
//mob traits
|
||||
#define TRAIT_BLIND "blind"
|
||||
#define TRAIT_MUTE "mute"
|
||||
@@ -50,7 +108,20 @@
|
||||
#define TRAIT_NOHARDCRIT "nohardcrit"
|
||||
#define TRAIT_NOSOFTCRIT "nosoftcrit"
|
||||
#define TRAIT_MINDSHIELD "mindshield"
|
||||
#define TRAIT_PARALYSIS_L_ARM "para-l-arm" //These are used for brain-based paralysis, where replacing the limb won't fix it
|
||||
#define TRAIT_PARALYSIS_R_ARM "para-r-arm"
|
||||
#define TRAIT_PARALYSIS_L_LEG "para-l-leg"
|
||||
#define TRAIT_PARALYSIS_R_LEG "para-r-leg"
|
||||
#define TRAIT_UNINTELLIGIBLE_SPEECH "unintelligible-speech"
|
||||
#define TRAIT_LAW_ENFORCEMENT_METABOLISM "law-enforcement-metabolism"
|
||||
#define TRAIT_STRONG_GRABBER "strong_grabber"
|
||||
#define TRAIT_CALCIUM_HEALER "calcium_healer"
|
||||
|
||||
//non-mob traits
|
||||
#define TRAIT_PARALYSIS "paralysis" //Used for limb-based paralysis, where replacing the limb will fix it
|
||||
|
||||
// item traits
|
||||
#define TRAIT_NODROP "nodrop"
|
||||
|
||||
#define TRAIT_ALCOHOL_TOLERANCE "alcohol_tolerance"
|
||||
#define TRAIT_AGEUSIA "ageusia"
|
||||
@@ -71,6 +142,12 @@
|
||||
#define TRAIT_MUSICIAN "musician"
|
||||
#define TRAIT_CROCRIN_IMMUNE "crocin_immune"
|
||||
#define TRAIT_NYMPHO "nymphomania"
|
||||
#define TRAIT_MASO "masochism"
|
||||
#define TRAIT_PARA "paraplegic"
|
||||
#define TRAIT_EMPATH "empath"
|
||||
#define TRAIT_FRIENDLY "friendly"
|
||||
#define TRAIT_ASSBLASTUSA "assblastusa"
|
||||
#define TRAIT_CULT_EYES "cult_eyes"
|
||||
|
||||
// common trait sources
|
||||
#define TRAIT_GENERIC "generic"
|
||||
@@ -81,6 +158,13 @@
|
||||
#define TRAUMA_TRAIT "trauma"
|
||||
#define SPECIES_TRAIT "species"
|
||||
#define ORGAN_TRAIT "organ"
|
||||
#define JOB_TRAIT "job"
|
||||
#define CYBORG_ITEM_TRAIT "cyborg-item"
|
||||
#define ADMIN_TRAIT "admin" // (B)admins only.
|
||||
#define CHANGELING_TRAIT "changeling"
|
||||
#define CULT_TRAIT "cult"
|
||||
#define CURSED_ITEM_TRAIT "cursed-item" // The item is magically cursed
|
||||
#define ABSTRACT_ITEM_TRAIT "abstract-item"
|
||||
#define ROUNDSTART_TRAIT "roundstart" //cannot be removed without admin intervention
|
||||
|
||||
// unique trait sources, still defines
|
||||
@@ -93,4 +177,24 @@
|
||||
#define STASIS_MUTE "stasis"
|
||||
#define GENETICS_SPELL "genetics_spell"
|
||||
#define EYES_COVERED "eyes_covered"
|
||||
#define CULT_EYES "cult_eyes"
|
||||
#define CULT_TRAIT "cult"
|
||||
#define CLOWN_NUKE_TRAIT "clown-nuke"
|
||||
#define STICKY_MOUSTACHE_TRAIT "sticky-moustache"
|
||||
#define CHAINSAW_FRENZY_TRAIT "chainsaw-frenzy"
|
||||
#define CHRONO_GUN_TRAIT "chrono-gun"
|
||||
#define REVERSE_BEAR_TRAP_TRAIT "reverse-bear-trap"
|
||||
#define GLUED_ITEM_TRAIT "glued-item"
|
||||
#define CURSED_MASK_TRAIT "cursed-mask"
|
||||
#define HIS_GRACE_TRAIT "his-grace"
|
||||
#define HAND_REPLACEMENT_TRAIT "magic-hand"
|
||||
#define HOT_POTATO_TRAIT "hot-potato"
|
||||
#define SABRE_SUICIDE_TRAIT "sabre-suicide"
|
||||
#define ABDUCTOR_VEST_TRAIT "abductor-vest"
|
||||
#define CAPTURE_THE_FLAG_TRAIT "capture-the-flag"
|
||||
#define EYE_OF_GOD_TRAIT "eye-of-god"
|
||||
#define SHAMEBRERO_TRAIT "shamebrero"
|
||||
#define CHRONOSUIT_TRAIT "chronosuit"
|
||||
#define FLIGHTSUIT_TRAIT "flightsuit"
|
||||
#define LOCKED_HELMET_TRAIT "locked-helmet"
|
||||
#define NINJA_SUIT_TRAIT "ninja-suit"
|
||||
#define ANTI_DROP_IMPLANT_TRAIT "anti-drop-implant"
|
||||
@@ -58,8 +58,11 @@ GLOBAL_LIST_EMPTY(ipc_antennas_list)
|
||||
//Genitals and Arousal Lists
|
||||
GLOBAL_LIST_EMPTY(cock_shapes_list)//global_lists.dm for the list initializations //Now also _DATASTRUCTURES globals.dm
|
||||
GLOBAL_LIST_EMPTY(cock_shapes_icons) //Associated list for names->icon_states for cockshapes.
|
||||
GLOBAL_LIST_EMPTY(balls_shapes_list)
|
||||
GLOBAL_LIST_EMPTY(balls_shapes_icons)
|
||||
GLOBAL_LIST_EMPTY(breasts_size_list)
|
||||
GLOBAL_LIST_EMPTY(breasts_shapes_list)
|
||||
GLOBAL_LIST_EMPTY(breasts_shapes_icons)
|
||||
GLOBAL_LIST_EMPTY(vagina_shapes_list)
|
||||
GLOBAL_LIST_INIT(cum_into_containers_list, list(/obj/item/reagent_containers/food/snacks/pie)) //Yer fuggin snowflake name list jfc
|
||||
GLOBAL_LIST_INIT(dick_nouns, list("dick","cock","member","shaft"))
|
||||
@@ -123,36 +126,36 @@ GLOBAL_VAR_INIT(miscreants_allowed, FALSE)
|
||||
/mob/living/carbon/proc/has_penis()
|
||||
if(getorganslot("penis"))//slot shared with ovipositor
|
||||
if(istype(getorganslot("penis"), /obj/item/organ/genital/penis))
|
||||
return 1
|
||||
return 0
|
||||
return TRUE
|
||||
return FALSE
|
||||
|
||||
/mob/living/carbon/proc/has_balls()
|
||||
if(getorganslot("balls"))
|
||||
if(istype(getorganslot("balls"), /obj/item/organ/genital/testicles))
|
||||
return 1
|
||||
return 0
|
||||
return TRUE
|
||||
return FALSE
|
||||
|
||||
/mob/living/carbon/proc/has_vagina()
|
||||
if(getorganslot("vagina"))
|
||||
return 1
|
||||
return 0
|
||||
return TRUE
|
||||
return FALSE
|
||||
|
||||
/mob/living/carbon/proc/has_breasts()
|
||||
if(getorganslot("breasts"))
|
||||
return 1
|
||||
return 0
|
||||
return TRUE
|
||||
return FALSE
|
||||
|
||||
/mob/living/carbon/proc/has_ovipositor()
|
||||
if(getorganslot("penis"))//shared slot
|
||||
if(istype(getorganslot("penis"), /obj/item/organ/genital/ovipositor))
|
||||
return 1
|
||||
return 0
|
||||
return TRUE
|
||||
return FALSE
|
||||
|
||||
/mob/living/carbon/human/proc/has_eggsack()
|
||||
if(getorganslot("balls"))
|
||||
if(istype(getorganslot("balls"), /obj/item/organ/genital/eggsack))
|
||||
return 1
|
||||
return 0
|
||||
return TRUE
|
||||
return FALSE
|
||||
|
||||
/mob/living/carbon/human/proc/is_bodypart_exposed(bodypart)
|
||||
|
||||
@@ -161,16 +164,16 @@ GLOBAL_VAR_INIT(miscreants_allowed, FALSE)
|
||||
L = get_equipped_items()
|
||||
for(var/obj/item/I in L)
|
||||
if(I.body_parts_covered & GROIN)
|
||||
return 0
|
||||
return 1
|
||||
return FALSE
|
||||
return TRUE
|
||||
|
||||
/mob/living/carbon/proc/is_chest_exposed(var/list/L)
|
||||
if(!L)
|
||||
L = get_equipped_items()
|
||||
for(var/obj/item/I in L)
|
||||
if(I.body_parts_covered & CHEST)
|
||||
return 0
|
||||
return 1
|
||||
return FALSE
|
||||
return TRUE
|
||||
|
||||
////////////////////////
|
||||
//DANGER | DEBUG PROCS//
|
||||
@@ -191,40 +194,3 @@ GLOBAL_VAR_INIT(miscreants_allowed, FALSE)
|
||||
H.give_vagina()
|
||||
H.give_womb()
|
||||
H.give_breasts()
|
||||
|
||||
/client/proc/test_mammal_overlays()
|
||||
set name = "Mass Give Mammalitus"
|
||||
set category = "Dangerous"
|
||||
set desc = "Turns every human into a mammal with tails, ears, etc. WARNING: NOT FOR LIVE SERVER USAGE!!"
|
||||
|
||||
log_admin("[src] turned everyone into mammals.")
|
||||
message_admins("[src] turned everyone into mammals.")
|
||||
for(var/mob/living/carbon/human/H in GLOB.mob_list)
|
||||
if(!H.dna)
|
||||
continue
|
||||
var/datum/dna/hdna = H.dna
|
||||
H.set_species(/datum/species/mammal)
|
||||
var/subspec = pick("Fox","Wolf","Fennec")
|
||||
switch(subspec)
|
||||
if("Wolf")
|
||||
hdna.features["mam_tail"] = "Wolf"
|
||||
hdna.features["mam_ears"] = "Wolf"
|
||||
hdna.features["mam_snouts"] = "Wolf"
|
||||
hdna.features["mam_body_markings"] = "Wolf"
|
||||
hdna.features["mcolor"] = "555"
|
||||
hdna.features["mcolor2"] = "999"
|
||||
hdna.features["mcolor3"] = "999"
|
||||
if("Fox")
|
||||
hdna.features["mam_tail"] = "Fox"
|
||||
hdna.features["mam_ears"] = "Fox"
|
||||
hdna.features["mam_snouts"] = "Fox, Long"
|
||||
hdna.features["mam_body_markings"] = "Fox"
|
||||
hdna.features["mcolor"] = "f60"
|
||||
hdna.features["mcolor2"] = "fff"
|
||||
hdna.features["mcolor3"] = "fff"
|
||||
if("Fennec")
|
||||
hdna.features["mam_tail"] = "Fennec"
|
||||
hdna.features["mam_ears"] = "Fennec"
|
||||
hdna.features["mam_snouts"] = "Fox, Short"
|
||||
hdna.features["mam_body_markings"] = "Fox"
|
||||
H.regenerate_icons()
|
||||
|
||||
@@ -86,6 +86,8 @@
|
||||
newA.contents += thing
|
||||
thing.change_area(old_area, newA)
|
||||
|
||||
newA.reg_in_areas_in_z()
|
||||
|
||||
var/list/firedoors = oldA.firedoors
|
||||
for(var/door in firedoors)
|
||||
var/obj/machinery/door/firedoor/FD = door
|
||||
|
||||
@@ -8,12 +8,6 @@
|
||||
#define Z_TURFS(ZLEVEL) block(locate(1,1,ZLEVEL), locate(world.maxx, world.maxy, ZLEVEL))
|
||||
#define CULT_POLL_WAIT 2400
|
||||
|
||||
/proc/get_area(atom/A)
|
||||
if(isarea(A))
|
||||
return A
|
||||
var/turf/T = get_turf(A)
|
||||
return T ? T.loc : null
|
||||
|
||||
/proc/get_area_name(atom/X, format_text = FALSE)
|
||||
var/area/A = isarea(X) ? X : get_area(X)
|
||||
if(!A)
|
||||
|
||||
@@ -8,11 +8,11 @@
|
||||
//facial hair
|
||||
init_sprite_accessory_subtypes(/datum/sprite_accessory/facial_hair, GLOB.facial_hair_styles_list, GLOB.facial_hair_styles_male_list, GLOB.facial_hair_styles_female_list)
|
||||
//underwear
|
||||
init_sprite_accessory_subtypes(/datum/sprite_accessory/underwear, GLOB.underwear_list, GLOB.underwear_m, GLOB.underwear_f)
|
||||
init_sprite_accessory_subtypes(/datum/sprite_accessory/underwear/bottom, GLOB.underwear_list, GLOB.underwear_m, GLOB.underwear_f)
|
||||
//undershirt
|
||||
init_sprite_accessory_subtypes(/datum/sprite_accessory/undershirt, GLOB.undershirt_list, GLOB.undershirt_m, GLOB.undershirt_f)
|
||||
init_sprite_accessory_subtypes(/datum/sprite_accessory/underwear/top, GLOB.undershirt_list, GLOB.undershirt_m, GLOB.undershirt_f)
|
||||
//socks
|
||||
init_sprite_accessory_subtypes(/datum/sprite_accessory/socks, GLOB.socks_list)
|
||||
init_sprite_accessory_subtypes(/datum/sprite_accessory/underwear/socks, GLOB.socks_list)
|
||||
//bodypart accessories (blizzard intensifies)
|
||||
init_sprite_accessory_subtypes(/datum/sprite_accessory/body_markings, GLOB.body_markings_list)
|
||||
init_sprite_accessory_subtypes(/datum/sprite_accessory/tails/lizard, GLOB.tails_list_lizard)
|
||||
@@ -46,7 +46,6 @@
|
||||
init_sprite_accessory_subtypes(/datum/sprite_accessory/xeno_dorsal, GLOB.xeno_dorsal_list)
|
||||
//genitals
|
||||
init_sprite_accessory_subtypes(/datum/sprite_accessory/penis, GLOB.cock_shapes_list)
|
||||
|
||||
for(var/K in GLOB.cock_shapes_list)
|
||||
var/datum/sprite_accessory/penis/value = GLOB.cock_shapes_list[K]
|
||||
GLOB.cock_shapes_icons[K] = value.icon_state
|
||||
@@ -54,6 +53,14 @@
|
||||
init_sprite_accessory_subtypes(/datum/sprite_accessory/vagina, GLOB.vagina_shapes_list)
|
||||
init_sprite_accessory_subtypes(/datum/sprite_accessory/breasts, GLOB.breasts_shapes_list)
|
||||
GLOB.breasts_size_list = list("a","b","c","d","e") //We need the list to choose from initialized, but it's no longer a sprite_accessory thing.
|
||||
for(var/K in GLOB.breasts_shapes_list)
|
||||
var/datum/sprite_accessory/breasts/value = GLOB.breasts_shapes_list[K]
|
||||
GLOB.breasts_shapes_icons[K] = value.icon_state
|
||||
|
||||
init_sprite_accessory_subtypes(/datum/sprite_accessory/testicles, GLOB.balls_shapes_list)
|
||||
for(var/K in GLOB.balls_shapes_list)
|
||||
var/datum/sprite_accessory/testicles/value = GLOB.balls_shapes_list[K]
|
||||
GLOB.balls_shapes_icons[K] = value.icon_state
|
||||
//END OF CIT CHANGES
|
||||
|
||||
//Species
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
. = new_angle - old_angle
|
||||
Turn(.) //BYOND handles cases such as -270, 360, 540 etc. DOES NOT HANDLE 180 TURNS WELL, THEY TWEEN AND LOOK LIKE SHIT
|
||||
|
||||
/atom/proc/SpinAnimation(speed = 10, loops = -1, clockwise = 1, segments = 3)
|
||||
/atom/proc/SpinAnimation(speed = 10, loops = -1, clockwise = 1, segments = 3, parallel = TRUE)
|
||||
if(!segments)
|
||||
return
|
||||
var/segment = 360/segments
|
||||
@@ -18,7 +18,11 @@
|
||||
|
||||
speed /= segments
|
||||
|
||||
animate(src, transform = matrices[1], time = speed, loops)
|
||||
if(parallel)
|
||||
animate(src, transform = matrices[1], time = speed, loops , flags = ANIMATION_PARALLEL)
|
||||
else
|
||||
animate(src, transform = matrices[1], time = speed, loops)
|
||||
|
||||
for(var/i in 2 to segments) //2 because 1 is covered above
|
||||
animate(transform = matrices[i], time = speed)
|
||||
//doesn't have an object argument because this is "Stacking" with the animate call above
|
||||
|
||||
+19
-17
@@ -20,35 +20,34 @@
|
||||
else
|
||||
return "000"
|
||||
|
||||
/proc/random_underwear(gender)//Cit change - makes random underwear always return nude
|
||||
#define UNDIE_COLORABLE(U) (U?.has_color)
|
||||
|
||||
/proc/random_underwear(gender)
|
||||
if(!GLOB.underwear_list.len)
|
||||
init_sprite_accessory_subtypes(/datum/sprite_accessory/underwear, GLOB.underwear_list, GLOB.underwear_m, GLOB.underwear_f)
|
||||
return "Nude"
|
||||
/*switch(gender)
|
||||
init_sprite_accessory_subtypes(/datum/sprite_accessory/underwear/bottom, GLOB.underwear_list, GLOB.underwear_m, GLOB.underwear_f)
|
||||
switch(gender)
|
||||
if(MALE)
|
||||
return pick(GLOB.underwear_m)
|
||||
if(FEMALE)
|
||||
return pick(GLOB.underwear_f)
|
||||
else
|
||||
return pick(GLOB.underwear_list)*/
|
||||
return pick(GLOB.underwear_list)
|
||||
|
||||
/proc/random_undershirt(gender)//Cit change - makes random undershirts always return nude
|
||||
/proc/random_undershirt(gender)
|
||||
if(!GLOB.undershirt_list.len)
|
||||
init_sprite_accessory_subtypes(/datum/sprite_accessory/undershirt, GLOB.undershirt_list, GLOB.undershirt_m, GLOB.undershirt_f)
|
||||
return "Nude"
|
||||
/*switch(gender)
|
||||
init_sprite_accessory_subtypes(/datum/sprite_accessory/underwear/top, GLOB.undershirt_list, GLOB.undershirt_m, GLOB.undershirt_f)
|
||||
switch(gender)
|
||||
if(MALE)
|
||||
return pick(GLOB.undershirt_m)
|
||||
if(FEMALE)
|
||||
return pick(GLOB.undershirt_f)
|
||||
else
|
||||
return pick(GLOB.undershirt_list)*/
|
||||
return pick(GLOB.undershirt_list)
|
||||
|
||||
/proc/random_socks()//Cit change - makes random socks always return nude
|
||||
/proc/random_socks()
|
||||
if(!GLOB.socks_list.len)
|
||||
init_sprite_accessory_subtypes(/datum/sprite_accessory/socks, GLOB.socks_list)
|
||||
return "Nude"
|
||||
//return pick(GLOB.socks_list)
|
||||
init_sprite_accessory_subtypes(/datum/sprite_accessory/underwear/socks, GLOB.socks_list)
|
||||
return pick(GLOB.socks_list)
|
||||
|
||||
/proc/random_features()
|
||||
if(!GLOB.tails_list_human.len)
|
||||
@@ -77,6 +76,8 @@
|
||||
//CIT CHANGES - genitals and such
|
||||
if(!GLOB.cock_shapes_list.len)
|
||||
init_sprite_accessory_subtypes(/datum/sprite_accessory/penis, GLOB.cock_shapes_list)
|
||||
if(!GLOB.balls_shapes_list.len)
|
||||
init_sprite_accessory_subtypes(/datum/sprite_accessory/testicles, GLOB.balls_shapes_list)
|
||||
if(!GLOB.vagina_shapes_list.len)
|
||||
init_sprite_accessory_subtypes(/datum/sprite_accessory/vagina, GLOB.vagina_shapes_list)
|
||||
if(!GLOB.breasts_shapes_list.len)
|
||||
@@ -168,6 +169,7 @@
|
||||
"balls_amount" = 2,
|
||||
"balls_sack_size" = BALLS_SACK_SIZE_DEF,
|
||||
"balls_size" = BALLS_SIZE_DEF,
|
||||
"balls_shape" = "Single",
|
||||
"balls_cum_rate" = CUM_RATE,
|
||||
"balls_cum_mult" = CUM_RATE_MULT,
|
||||
"balls_efficiency" = CUM_EFFICIENCY,
|
||||
@@ -185,7 +187,7 @@
|
||||
"has_breasts" = FALSE,
|
||||
"breasts_color" = pick("FFFFFF","7F7F7F", "7FFF7F", "7F7FFF", "FF7F7F", "7FFFFF", "FF7FFF", "FFFF7F"),
|
||||
"breasts_size" = pick(GLOB.breasts_size_list),
|
||||
"breasts_shape" = pick(GLOB.breasts_shapes_list),
|
||||
"breasts_shape" = "Pair",
|
||||
"breasts_fluid" = "milk",
|
||||
"has_vag" = FALSE,
|
||||
"vag_shape" = pick(GLOB.vagina_shapes_list),
|
||||
@@ -294,7 +296,7 @@ GLOBAL_LIST_EMPTY(species_list)
|
||||
else
|
||||
return "unknown"
|
||||
|
||||
/proc/do_mob(mob/user , mob/target, time = 30, uninterruptible = 0, progress = 1, datum/callback/extra_checks = null)
|
||||
/proc/do_mob(mob/user , mob/target, time = 30, uninterruptible = 0, progress = 1, datum/callback/extra_checks = null, ignorehelditem = 0)
|
||||
if(!user || !target)
|
||||
return 0
|
||||
var/user_loc = user.loc
|
||||
@@ -327,7 +329,7 @@ GLOBAL_LIST_EMPTY(species_list)
|
||||
drifting = 0
|
||||
user_loc = user.loc
|
||||
|
||||
if((!drifting && user.loc != user_loc) || target.loc != target_loc || user.get_active_held_item() != holding || user.incapacitated() || user.lying || (extra_checks && !extra_checks.Invoke()))
|
||||
if((!drifting && user.loc != user_loc) || target.loc != target_loc || (!ignorehelditem && user.get_active_held_item() != holding) || user.incapacitated() || user.lying || (extra_checks && !extra_checks.Invoke()))
|
||||
. = 0
|
||||
break
|
||||
if (progress)
|
||||
|
||||
@@ -151,6 +151,10 @@ GLOBAL_VAR(command_name)
|
||||
GLOBAL_VAR(syndicate_code_phrase) //Code phrase for traitors.
|
||||
GLOBAL_VAR(syndicate_code_response) //Code response for traitors.
|
||||
|
||||
//Cached regex search - for checking if codewords are used.
|
||||
GLOBAL_DATUM(syndicate_code_phrase_regex, /regex)
|
||||
GLOBAL_DATUM(syndicate_code_response_regex, /regex)
|
||||
|
||||
/*
|
||||
Should be expanded.
|
||||
How this works:
|
||||
|
||||
@@ -0,0 +1,74 @@
|
||||
/proc/chem_recipes_do_conflict(datum/chemical_reaction/r1, datum/chemical_reaction/r2)
|
||||
//do the non-list tests first, because they are cheaper
|
||||
if(r1.required_container != r2.required_container)
|
||||
return FALSE
|
||||
if(r1.is_cold_recipe == r2.is_cold_recipe)
|
||||
if(r1.required_temp != r2.required_temp)
|
||||
//one reaction requires a more extreme temperature than the other, so there is no conflict
|
||||
return FALSE
|
||||
else
|
||||
var/datum/chemical_reaction/cold_one = r1.is_cold_recipe ? r1 : r2
|
||||
var/datum/chemical_reaction/warm_one = r1.is_cold_recipe ? r2 : r1
|
||||
if(cold_one.required_temp < warm_one.required_temp)
|
||||
//the range of temperatures does not overlap, so there is no conflict
|
||||
return FALSE
|
||||
|
||||
//find the reactions with the shorter and longer required_reagents list
|
||||
var/datum/chemical_reaction/long_req
|
||||
var/datum/chemical_reaction/short_req
|
||||
if(r1.required_reagents.len > r2.required_reagents.len)
|
||||
long_req = r1
|
||||
short_req = r2
|
||||
else if(r1.required_reagents.len < r2.required_reagents.len)
|
||||
long_req = r2
|
||||
short_req = r1
|
||||
else
|
||||
//if they are the same length, sort instead by the length of the catalyst list
|
||||
//this is important if the required_reagents lists are the same
|
||||
if(r1.required_catalysts.len > r2.required_catalysts.len)
|
||||
long_req = r1
|
||||
short_req = r2
|
||||
else
|
||||
long_req = r2
|
||||
short_req = r1
|
||||
|
||||
|
||||
//check if the shorter reaction list is a subset of the longer one
|
||||
var/list/overlap = r1.required_reagents & r2.required_reagents
|
||||
if(overlap.len != short_req.required_reagents.len)
|
||||
//there is at least one reagent in the short list that is not in the long list, so there is no conflict
|
||||
return FALSE
|
||||
|
||||
//check to see if the shorter reaction's catalyst list is also a subset of the longer reaction's catalyst list
|
||||
//if the longer reaction's catalyst list is a subset of the shorter ones, that is fine
|
||||
//if the reaction lists are the same, the short reaction will have the shorter required_catalysts list, so it will register as a conflict
|
||||
var/list/short_minus_long_catalysts = short_req.required_catalysts - long_req.required_catalysts
|
||||
if(short_minus_long_catalysts.len)
|
||||
//there is at least one unique catalyst for the short reaction, so there is no conflict
|
||||
return FALSE
|
||||
|
||||
//if we got this far, the longer reaction will be impossible to create if the shorter one is earlier in GLOB.chemical_reactions_list, and will require the reagents to be added in a particular order otherwise
|
||||
return TRUE
|
||||
|
||||
/proc/get_chemical_reaction(id)
|
||||
if(!GLOB.chemical_reactions_list)
|
||||
return
|
||||
for(var/reagent in GLOB.chemical_reactions_list)
|
||||
for(var/datum/chemical_reaction/R in GLOB.chemical_reactions_list[reagent])
|
||||
if(R.id == id)
|
||||
return R
|
||||
|
||||
/proc/remove_chemical_reaction(datum/chemical_reaction/R)
|
||||
if(!GLOB.chemical_reactions_list || !R)
|
||||
return
|
||||
for(var/rid in R.required_reagents)
|
||||
GLOB.chemical_reactions_list[rid] -= R
|
||||
|
||||
//see build_chemical_reactions_list in holder.dm for explanations
|
||||
/proc/add_chemical_reaction(datum/chemical_reaction/R)
|
||||
if(!GLOB.chemical_reactions_list || !R.id || !R.required_reagents || !R.required_reagents.len)
|
||||
return
|
||||
var/primary_reagent = R.required_reagents[1]
|
||||
if(!GLOB.chemical_reactions_list[primary_reagent])
|
||||
GLOB.chemical_reactions_list[primary_reagent] = list()
|
||||
GLOB.chemical_reactions_list[primary_reagent] += R
|
||||
@@ -94,6 +94,8 @@
|
||||
// Used to get a properly sanitized multiline input, of max_length
|
||||
/proc/stripped_multiline_input(mob/user, message = "", title = "", default = "", max_length=MAX_MESSAGE_LEN, no_trim=FALSE)
|
||||
var/name = input(user, message, title, default) as message|null
|
||||
if(isnull(name)) // Return null if canceled.
|
||||
return null
|
||||
if(no_trim)
|
||||
return copytext(html_encode(name), 1, max_length)
|
||||
else
|
||||
@@ -765,3 +767,27 @@ GLOBAL_LIST_INIT(binary, list("0","1"))
|
||||
return "twelfth"
|
||||
else
|
||||
return "[number]\th"
|
||||
|
||||
/proc/unintelligize(message)
|
||||
var/prefix=copytext(message,1,2)
|
||||
if(prefix == ";")
|
||||
message = copytext(message,2)
|
||||
else if(prefix in list(":","#"))
|
||||
prefix += copytext(message,2,3)
|
||||
message = copytext(message,3)
|
||||
else
|
||||
prefix=""
|
||||
|
||||
var/list/words = splittext(message," ")
|
||||
var/list/rearranged = list()
|
||||
for(var/i=1;i<=words.len;i++)
|
||||
var/cword = pick(words)
|
||||
words.Remove(cword)
|
||||
var/suffix = copytext(cword,length(cword)-1,length(cword))
|
||||
while(length(cword)>0 && suffix in list(".",",",";","!",":","?"))
|
||||
cword = copytext(cword,1 ,length(cword)-1)
|
||||
suffix = copytext(cword,length(cword)-1,length(cword) )
|
||||
if(length(cword))
|
||||
rearranged += cword
|
||||
message = "[prefix][jointext(rearranged," ")]"
|
||||
. = message
|
||||
|
||||
@@ -70,3 +70,6 @@ GLOBAL_VAR_INIT(rollovercheck_last_timeofday, 0)
|
||||
if(hour)
|
||||
hourT = " and [hour] hour[(hour != 1)? "s":""]"
|
||||
return "[day] day[(day != 1)? "s":""][hourT][minuteT][secondT]"
|
||||
|
||||
/proc/daysSince(realtimev)
|
||||
return round((world.realtime - realtimev) / (24 HOURS))
|
||||
|
||||
@@ -1239,19 +1239,21 @@ GLOBAL_REAL_VAR(list/stack_trace_storage)
|
||||
pixel_x = initialpixelx
|
||||
pixel_y = initialpixely
|
||||
|
||||
/atom/proc/do_jiggle(targetangle = 45)
|
||||
/atom/proc/do_jiggle(targetangle = 45, timer = 20)
|
||||
var/matrix/OM = matrix(transform)
|
||||
var/matrix/M = matrix(transform)
|
||||
var/halftime = timer * 0.5
|
||||
M.Turn(pick(-targetangle, targetangle))
|
||||
animate(src, transform = M, time = 10, easing = ELASTIC_EASING)
|
||||
animate(src, transform = OM, time = 10, easing = ELASTIC_EASING)
|
||||
animate(src, transform = M, time = halftime, easing = ELASTIC_EASING)
|
||||
animate(src, transform = OM, time = halftime, easing = ELASTIC_EASING)
|
||||
|
||||
/atom/proc/do_squish(squishx = 1.2, squishy = 0.6)
|
||||
/atom/proc/do_squish(squishx = 1.2, squishy = 0.6, timer = 20)
|
||||
var/matrix/OM = matrix(transform)
|
||||
var/matrix/M = matrix(transform)
|
||||
var/halftime = timer * 0.5
|
||||
M.Scale(squishx, squishy)
|
||||
animate(src, transform = M, time = 10, easing = BOUNCE_EASING)
|
||||
animate(src, transform = OM, time = 10, easing = BOUNCE_EASING)
|
||||
animate(src, transform = M, time = halftime, easing = BOUNCE_EASING)
|
||||
animate(src, transform = OM, time = halftime, easing = BOUNCE_EASING)
|
||||
|
||||
/proc/weightclass2text(var/w_class)
|
||||
switch(w_class)
|
||||
@@ -1483,7 +1485,9 @@ GLOBAL_DATUM_INIT(dview_mob, /mob/dview, new)
|
||||
/obj/item/reagent_containers/food/snacks/grown,
|
||||
/obj/item/reagent_containers/food/snacks/grown/mushroom,
|
||||
/obj/item/reagent_containers/food/snacks/grown/nettle, // base type
|
||||
/obj/item/reagent_containers/food/snacks/deepfryholder
|
||||
/obj/item/reagent_containers/food/snacks/deepfryholder,
|
||||
/obj/item/reagent_containers/food/snacks/grown/shell,
|
||||
/obj/item/reagent_containers/food/snacks/store/bread
|
||||
)
|
||||
blocked |= typesof(/obj/item/reagent_containers/food/snacks/customizable)
|
||||
|
||||
|
||||
@@ -47,7 +47,6 @@ GLOBAL_LIST_INIT(bitfields, list(
|
||||
"NO_MAT_REDEMPTION" = NO_MAT_REDEMPTION,
|
||||
"DROPDEL" = DROPDEL,
|
||||
"NOBLUDGEON" = NOBLUDGEON,
|
||||
"NODROP" = NODROP,
|
||||
"ABSTRACT" = ABSTRACT,
|
||||
),
|
||||
"admin_flags" = list(
|
||||
@@ -115,9 +114,6 @@ GLOBAL_LIST_INIT(bitfields, list(
|
||||
"GOLIATH_RESISTANCE" = GOLIATH_RESISTANCE,
|
||||
"GOLIATH_WEAKNESS" = GOLIATH_WEAKNESS
|
||||
),
|
||||
"reagents_holder_flags" = list(
|
||||
"REAGENT_NOREACT" = REAGENT_NOREACT
|
||||
),
|
||||
"flags_1" = list(
|
||||
"NOJAUNT_1" = NOJAUNT_1,
|
||||
"UNUSED_RESERVATION_TURF_1" = UNUSED_RESERVATION_TURF_1,
|
||||
@@ -143,6 +139,8 @@ GLOBAL_LIST_INIT(bitfields, list(
|
||||
"MASKINTERNALS" = MASKINTERNALS,
|
||||
"NOSLIP" = NOSLIP,
|
||||
"THICKMATERIAL" = THICKMATERIAL,
|
||||
"VOICEBOX_TOGGLABLE" = VOICEBOX_TOGGLABLE,
|
||||
"VOICEBOX_DISABLED" = VOICEBOX_DISABLED,
|
||||
),
|
||||
"tesla_flags" = list(
|
||||
"TESLA_MOB_DAMAGE" = TESLA_MOB_DAMAGE,
|
||||
@@ -158,13 +156,14 @@ GLOBAL_LIST_INIT(bitfields, list(
|
||||
"SMOOTH_BORDER" = SMOOTH_BORDER,
|
||||
"SMOOTH_QUEUED" = SMOOTH_QUEUED,
|
||||
),
|
||||
"container_type" = list(
|
||||
"reagents_holder_flags" = list(
|
||||
"INJECTABLE" = INJECTABLE,
|
||||
"DRAWABLE" = DRAWABLE,
|
||||
"REFILLABLE" = REFILLABLE,
|
||||
"DRAINABLE" = DRAINABLE,
|
||||
"TRANSPARENT" = TRANSPARENT,
|
||||
"AMOUNT_VISIBLE" = AMOUNT_VISIBLE,
|
||||
"NO_REACT" = NO_REACT,
|
||||
),
|
||||
"car_traits" = list(
|
||||
"CAN_KIDNAP" = CAN_KIDNAP,
|
||||
@@ -173,4 +172,9 @@ GLOBAL_LIST_INIT(bitfields, list(
|
||||
"RAD_PROTECT_CONTENTS" = RAD_PROTECT_CONTENTS,
|
||||
"RAD_NO_CONTAMINATE" = RAD_NO_CONTAMINATE,
|
||||
),
|
||||
))
|
||||
"disease_flags" = list(
|
||||
"CURABLE" = CURABLE,
|
||||
"CAN_CARRY" = CAN_CARRY,
|
||||
"CAN_RESIST" = CAN_RESIST
|
||||
),
|
||||
))
|
||||
@@ -7,15 +7,15 @@ GLOBAL_LIST_EMPTY(facial_hair_styles_list) //stores /datum/sprite_accessory/faci
|
||||
GLOBAL_LIST_EMPTY(facial_hair_styles_male_list) //stores only hair names
|
||||
GLOBAL_LIST_EMPTY(facial_hair_styles_female_list) //stores only hair names
|
||||
//Underwear
|
||||
GLOBAL_LIST_EMPTY(underwear_list) //stores /datum/sprite_accessory/underwear indexed by name
|
||||
GLOBAL_LIST_EMPTY(underwear_list) //stores /datum/sprite_accessory/underwear/bottom indexed by name
|
||||
GLOBAL_LIST_EMPTY(underwear_m) //stores only underwear name
|
||||
GLOBAL_LIST_EMPTY(underwear_f) //stores only underwear name
|
||||
//Undershirts
|
||||
GLOBAL_LIST_EMPTY(undershirt_list) //stores /datum/sprite_accessory/undershirt indexed by name
|
||||
GLOBAL_LIST_EMPTY(undershirt_list) //stores /datum/sprite_accessory/underwear/top indexed by name
|
||||
GLOBAL_LIST_EMPTY(undershirt_m) //stores only undershirt name
|
||||
GLOBAL_LIST_EMPTY(undershirt_f) //stores only undershirt name
|
||||
//Socks
|
||||
GLOBAL_LIST_EMPTY(socks_list) //stores /datum/sprite_accessory/socks indexed by name
|
||||
GLOBAL_LIST_EMPTY(socks_list) //stores /datum/sprite_accessory/underwear/socks indexed by name
|
||||
//Lizard Bits (all datum lists indexed by name)
|
||||
GLOBAL_LIST_EMPTY(body_markings_list)
|
||||
GLOBAL_LIST_EMPTY(tails_list_lizard)
|
||||
@@ -40,6 +40,54 @@ GLOBAL_LIST_EMPTY(caps_list)
|
||||
GLOBAL_LIST_INIT(ghost_forms_with_directions_list, list("ghost")) //stores the ghost forms that support directional sprites
|
||||
GLOBAL_LIST_INIT(ghost_forms_with_accessories_list, list("ghost")) //stores the ghost forms that support hair and other such things
|
||||
|
||||
GLOBAL_LIST_INIT(ai_core_display_screens, list(
|
||||
":thinking:",
|
||||
"Alien",
|
||||
"Angel",
|
||||
"Banned",
|
||||
"Bliss",
|
||||
"Blue",
|
||||
"Clown",
|
||||
"Database",
|
||||
"Dorf",
|
||||
"Firewall",
|
||||
"Fuzzy",
|
||||
"Gentoo",
|
||||
"Glitchman",
|
||||
"Gondola",
|
||||
"Goon",
|
||||
"Hades",
|
||||
"Heartline",
|
||||
"Helios",
|
||||
"House",
|
||||
"Inverted",
|
||||
"Matrix",
|
||||
"Monochrome",
|
||||
"Murica",
|
||||
"Nanotrasen",
|
||||
"Not Malf",
|
||||
"President",
|
||||
"Random",
|
||||
"Rainbow",
|
||||
"Red",
|
||||
"Red October",
|
||||
"Static",
|
||||
"Syndicat Meow",
|
||||
"TechDemon",
|
||||
"Text",
|
||||
"Too Deep",
|
||||
"Triumvirate",
|
||||
"Triumvirate-M",
|
||||
"Weird"))
|
||||
|
||||
/proc/resolve_ai_icon(input)
|
||||
if(!input || !(input in GLOB.ai_core_display_screens))
|
||||
return "ai"
|
||||
else
|
||||
if(input == "Random")
|
||||
input = pick(GLOB.ai_core_display_screens - "Random")
|
||||
return "ai-[lowertext(input)]"
|
||||
|
||||
GLOBAL_LIST_INIT(security_depts_prefs, list(SEC_DEPT_RANDOM, SEC_DEPT_NONE, SEC_DEPT_ENGINEERING, SEC_DEPT_MEDICAL, SEC_DEPT_SCIENCE, SEC_DEPT_SUPPLY))
|
||||
|
||||
//Backpacks
|
||||
@@ -117,7 +165,7 @@ GLOBAL_LIST_INIT(TAGGERLOCATIONS, list("Disposals",
|
||||
"CMO Office", "Chemistry", "Research", "RD Office",
|
||||
"Robotics", "HoP Office", "Library", "Chapel", "Theatre",
|
||||
"Bar", "Kitchen", "Hydroponics", "Janitor Closet","Genetics",
|
||||
"Circuitry", "Toxins", "Dormitories", "Virology",
|
||||
"Circuitry", "Toxins", "Dormitories", "Virology",
|
||||
"Xenobiology", "Law Office","Detective's Office"))
|
||||
|
||||
GLOBAL_LIST_INIT(station_prefixes, world.file2list("strings/station_prefixes.txt") + "")
|
||||
|
||||
@@ -43,7 +43,8 @@ GLOBAL_LIST_INIT(maintenance_loot, list(
|
||||
/obj/item/assembly/timer = 3,
|
||||
/obj/item/flashlight = 4,
|
||||
/obj/item/flashlight/pen = 1,
|
||||
/obj/item/flashlight/glowstick/random = 4,
|
||||
/obj/effect/spawner/lootdrop/glowstick = 4,
|
||||
/obj/effect/spawner/lootdrop/mre = 3,
|
||||
/obj/item/multitool = 2,
|
||||
/obj/item/radio/off = 2,
|
||||
/obj/item/t_scanner = 5,
|
||||
@@ -68,7 +69,6 @@ GLOBAL_LIST_INIT(maintenance_loot, list(
|
||||
/obj/item/crowbar = 1,
|
||||
/obj/item/crowbar/red = 1,
|
||||
/obj/item/extinguisher = 11,
|
||||
//obj/item/gun/ballistic/revolver/russian = 1, //disabled until lootdrop is a proper world proc.
|
||||
/obj/item/hand_labeler = 1,
|
||||
/obj/item/paper/crumpled = 1,
|
||||
/obj/item/pen = 1,
|
||||
@@ -101,13 +101,18 @@ GLOBAL_LIST_INIT(maintenance_loot, list(
|
||||
/obj/item/assembly/signaler = 2,
|
||||
/obj/item/assembly/mousetrap = 2,
|
||||
/obj/item/reagent_containers/syringe = 2,
|
||||
/obj/item/clothing/gloves/color/random = 8,
|
||||
/obj/effect/spawner/lootdrop/gloves = 8,
|
||||
/obj/item/clothing/shoes/laceup = 1,
|
||||
/obj/item/storage/secure/briefcase = 3,
|
||||
/obj/item/storage/toolbox/artistic = 2,
|
||||
/obj/item/toy/eightball = 1,
|
||||
/obj/item/reagent_containers/pill/floorpill = 1,
|
||||
/obj/item/reagent_containers/food/snacks/cannedpeaches/maint = 1,
|
||||
/obj/item/storage/daki = 3, //VERY IMPORTANT CIT CHANGE - adds bodypillows to maint
|
||||
/obj/item/storage/pill_bottle/penis_enlargement = 2,
|
||||
/obj/item/clothing/shoes/wheelys = 1,
|
||||
/obj/item/clothing/shoes/kindleKicks = 1,
|
||||
/obj/item/autosurgeon/penis = 1,
|
||||
/obj/item/autosurgeon/testicles = 1,
|
||||
"" = 3
|
||||
))
|
||||
|
||||
@@ -18,3 +18,12 @@ GLOBAL_LIST_EMPTY(powernets)
|
||||
GLOBAL_VAR_INIT(bsa_unlock, FALSE) //BSA unlocked by head ID swipes
|
||||
|
||||
GLOBAL_LIST_EMPTY(player_details) // ckey -> /datum/player_details
|
||||
|
||||
// All religion stuff
|
||||
GLOBAL_VAR(religion)
|
||||
GLOBAL_VAR(deity)
|
||||
GLOBAL_VAR(bible_name)
|
||||
GLOBAL_VAR(bible_icon_state)
|
||||
GLOBAL_VAR(bible_item_state)
|
||||
GLOBAL_VAR(holy_weapon_type)
|
||||
GLOBAL_VAR(holy_armor_type)
|
||||
+3
-1
@@ -23,6 +23,9 @@
|
||||
return
|
||||
next_click = world.time + 1
|
||||
|
||||
if(!can_interact_with(A))
|
||||
return
|
||||
|
||||
if(multicam_on)
|
||||
var/turf/T = get_turf(A)
|
||||
if(T)
|
||||
@@ -60,7 +63,6 @@
|
||||
controlled_mech.click_action(A, src, params) //Override AI normal click behavior.
|
||||
return
|
||||
|
||||
return
|
||||
if(modifiers["shift"])
|
||||
ShiftClickOn(A)
|
||||
return
|
||||
|
||||
@@ -366,11 +366,15 @@
|
||||
SEND_SIGNAL(src, COMSIG_CLICK_ALT, user)
|
||||
var/turf/T = get_turf(src)
|
||||
if(T && user.TurfAdjacent(T))
|
||||
if(user.listed_turf == T)
|
||||
user.listed_turf = null
|
||||
else
|
||||
user.listed_turf = T
|
||||
user.client.statpanel = T.name
|
||||
user.listed_turf = T
|
||||
user.client.statpanel = T.name
|
||||
|
||||
// Use this instead of /mob/proc/AltClickOn(atom/A) where you only want turf content listing without additional atom alt-click interaction
|
||||
/atom/proc/AltClickNoInteract(mob/user, atom/A)
|
||||
var/turf/T = get_turf(A)
|
||||
if(T && user.TurfAdjacent(T))
|
||||
user.listed_turf = T
|
||||
user.client.statpanel = T.name
|
||||
|
||||
/mob/proc/TurfAdjacent(turf/T)
|
||||
return T.Adjacent(src)
|
||||
|
||||
@@ -20,10 +20,23 @@
|
||||
else
|
||||
return TRUE
|
||||
|
||||
/obj/screen/movable/action_button/MouseDrop()
|
||||
if (!can_use(usr))
|
||||
/obj/screen/movable/action_button/MouseDrop(over_object)
|
||||
if(!can_use(usr))
|
||||
return
|
||||
return ..()
|
||||
if((istype(over_object, /obj/screen/movable/action_button) && !istype(over_object, /obj/screen/movable/action_button/hide_toggle)))
|
||||
if(locked)
|
||||
to_chat(usr, "<span class='warning'>Action button \"[name]\" is locked, unlock it first.</span>")
|
||||
return
|
||||
var/obj/screen/movable/action_button/B = over_object
|
||||
var/list/actions = usr.actions
|
||||
actions.Swap(actions.Find(src.linked_action), actions.Find(B.linked_action))
|
||||
moved = FALSE
|
||||
ordered = TRUE
|
||||
B.moved = FALSE
|
||||
B.ordered = TRUE
|
||||
usr.update_action_buttons()
|
||||
else
|
||||
return ..()
|
||||
|
||||
/obj/screen/movable/action_button/Click(location,control,params)
|
||||
if (!can_use(usr))
|
||||
|
||||
+58
-17
@@ -1,4 +1,7 @@
|
||||
#define NEXT_PAGE_ID "__next__"
|
||||
#define DEFAULT_CHECK_DELAY 20
|
||||
|
||||
GLOBAL_LIST_EMPTY(radial_menus)
|
||||
|
||||
/obj/screen/radial
|
||||
icon = 'icons/mob/radial.dmi'
|
||||
@@ -10,14 +13,19 @@
|
||||
icon_state = "radial_slice"
|
||||
var/choice
|
||||
var/next_page = FALSE
|
||||
var/tooltips = FALSE
|
||||
|
||||
/obj/screen/radial/slice/MouseEntered(location, control, params)
|
||||
. = ..()
|
||||
icon_state = "radial_slice_focus"
|
||||
if(tooltips)
|
||||
openToolTip(usr, src, params, title = name)
|
||||
|
||||
/obj/screen/radial/slice/MouseExited(location, control, params)
|
||||
. = ..()
|
||||
icon_state = "radial_slice"
|
||||
if(tooltips)
|
||||
closeToolTip(usr)
|
||||
|
||||
/obj/screen/radial/slice/Click(location, control, params)
|
||||
if(usr.client == parent.current_user)
|
||||
@@ -30,6 +38,14 @@
|
||||
name = "Close Menu"
|
||||
icon_state = "radial_center"
|
||||
|
||||
/obj/screen/radial/center/MouseEntered(location, control, params)
|
||||
. = ..()
|
||||
icon_state = "radial_center_focus"
|
||||
|
||||
/obj/screen/radial/center/MouseExited(location, control, params)
|
||||
. = ..()
|
||||
icon_state = "radial_center"
|
||||
|
||||
/obj/screen/radial/center/Click(location, control, params)
|
||||
if(usr.client == parent.current_user)
|
||||
parent.finished = TRUE
|
||||
@@ -48,6 +64,9 @@
|
||||
var/atom/anchor
|
||||
var/image/menu_holder
|
||||
var/finished = FALSE
|
||||
var/datum/callback/custom_check_callback
|
||||
var/next_check = 0
|
||||
var/check_delay = DEFAULT_CHECK_DELAY
|
||||
|
||||
var/radius = 32
|
||||
var/starting_angle = 0
|
||||
@@ -57,7 +76,7 @@
|
||||
var/max_elements
|
||||
var/pages = 1
|
||||
var/current_page = 1
|
||||
|
||||
|
||||
var/hudfix_method = TRUE //TRUE to change anchor to user, FALSE to shift by py_shift
|
||||
var/py_shift = 0
|
||||
var/entry_animation = TRUE
|
||||
@@ -75,7 +94,7 @@
|
||||
restrict_to_dir(NORTH) //I was going to parse screen loc here but that's more effort than it's worth.
|
||||
|
||||
//Sets defaults
|
||||
//These assume 45 deg min_angle
|
||||
//These assume 45 deg min_angle
|
||||
/datum/radial_menu/proc/restrict_to_dir(dir)
|
||||
switch(dir)
|
||||
if(NORTH)
|
||||
@@ -91,18 +110,19 @@
|
||||
starting_angle = 180
|
||||
ending_angle = 45
|
||||
|
||||
/datum/radial_menu/proc/setup_menu()
|
||||
/datum/radial_menu/proc/setup_menu(use_tooltips)
|
||||
if(ending_angle > starting_angle)
|
||||
zone = ending_angle - starting_angle
|
||||
else
|
||||
zone = 360 - starting_angle + ending_angle
|
||||
|
||||
|
||||
max_elements = round(zone / min_angle)
|
||||
var/paged = max_elements < choices.len
|
||||
if(elements.len < max_elements)
|
||||
var/elements_to_add = max_elements - elements.len
|
||||
for(var/i in 1 to elements_to_add) //Create all elements
|
||||
var/obj/screen/radial/new_element = new /obj/screen/radial/slice
|
||||
var/obj/screen/radial/slice/new_element = new /obj/screen/radial/slice
|
||||
new_element.tooltips = use_tooltips
|
||||
new_element.parent = src
|
||||
elements += new_element
|
||||
|
||||
@@ -163,7 +183,7 @@
|
||||
else
|
||||
E.pixel_y = py
|
||||
E.pixel_x = px
|
||||
|
||||
|
||||
//Visuals
|
||||
E.alpha = 255
|
||||
E.mouse_opacity = MOUSE_OPACITY_ICON
|
||||
@@ -183,7 +203,7 @@
|
||||
E.next_page = FALSE
|
||||
if(choices_icons[choice_id])
|
||||
E.add_overlay(choices_icons[choice_id])
|
||||
|
||||
|
||||
/datum/radial_menu/New()
|
||||
close_button = new
|
||||
close_button.parent = src
|
||||
@@ -200,7 +220,7 @@
|
||||
/datum/radial_menu/proc/get_next_id()
|
||||
return "c_[choices.len]"
|
||||
|
||||
/datum/radial_menu/proc/set_choices(list/new_choices)
|
||||
/datum/radial_menu/proc/set_choices(list/new_choices, use_tooltips)
|
||||
if(choices.len)
|
||||
Reset()
|
||||
for(var/E in new_choices)
|
||||
@@ -211,7 +231,7 @@
|
||||
var/I = extract_image(new_choices[E])
|
||||
if(I)
|
||||
choices_icons[id] = I
|
||||
setup_menu()
|
||||
setup_menu(use_tooltips)
|
||||
|
||||
|
||||
/datum/radial_menu/proc/extract_image(E)
|
||||
@@ -220,7 +240,7 @@
|
||||
MA.layer = ABOVE_HUD_LAYER
|
||||
MA.appearance_flags |= RESET_TRANSFORM
|
||||
return MA
|
||||
|
||||
|
||||
|
||||
/datum/radial_menu/proc/next_page()
|
||||
if(pages > 1)
|
||||
@@ -243,28 +263,49 @@
|
||||
if(current_user)
|
||||
current_user.images -= menu_holder
|
||||
|
||||
/datum/radial_menu/proc/wait()
|
||||
/datum/radial_menu/proc/wait(atom/user, atom/anchor, require_near = FALSE)
|
||||
while (current_user && !finished && !selected_choice)
|
||||
if(require_near && !in_range(anchor, user))
|
||||
return
|
||||
if(custom_check_callback && next_check < world.time)
|
||||
if(!custom_check_callback.Invoke())
|
||||
return
|
||||
else
|
||||
next_check = world.time + check_delay
|
||||
stoplag(1)
|
||||
|
||||
/datum/radial_menu/Destroy()
|
||||
Reset()
|
||||
hide()
|
||||
QDEL_NULL(custom_check_callback)
|
||||
. = ..()
|
||||
|
||||
/*
|
||||
Presents radial menu to user anchored to anchor (or user if the anchor is currently in users screen)
|
||||
Presents radial menu to user anchored to anchor (or user if the anchor is currently in users screen)
|
||||
Choices should be a list where list keys are movables or text used for element names and return value
|
||||
and list values are movables/icons/images used for element icons
|
||||
*/
|
||||
/proc/show_radial_menu(mob/user,atom/anchor,list/choices)
|
||||
/proc/show_radial_menu(mob/user, atom/anchor, list/choices, uniqueid, radius, datum/callback/custom_check, require_near = FALSE, tooltips = FALSE)
|
||||
if(!user || !anchor || !length(choices))
|
||||
return
|
||||
if(!uniqueid)
|
||||
uniqueid = "defmenu_[REF(user)]_[REF(anchor)]"
|
||||
|
||||
if(GLOB.radial_menus[uniqueid])
|
||||
return
|
||||
|
||||
var/datum/radial_menu/menu = new
|
||||
if(!user)
|
||||
user = usr
|
||||
GLOB.radial_menus[uniqueid] = menu
|
||||
if(radius)
|
||||
menu.radius = radius
|
||||
if(istype(custom_check))
|
||||
menu.custom_check_callback = custom_check
|
||||
menu.anchor = anchor
|
||||
menu.check_screen_border(user) //Do what's needed to make it look good near borders or on hud
|
||||
menu.set_choices(choices)
|
||||
menu.set_choices(choices, tooltips)
|
||||
menu.show_to(user)
|
||||
menu.wait()
|
||||
menu.wait(user, anchor, require_near)
|
||||
var/answer = menu.selected_choice
|
||||
qdel(menu)
|
||||
GLOB.radial_menus -= uniqueid
|
||||
return answer
|
||||
@@ -0,0 +1,76 @@
|
||||
/*
|
||||
A derivative of radial menu which persists onscreen until closed and invokes a callback each time an element is clicked
|
||||
*/
|
||||
|
||||
/obj/screen/radial/persistent/center
|
||||
name = "Close Menu"
|
||||
icon_state = "radial_center"
|
||||
|
||||
/obj/screen/radial/persistent/center/Click(location, control, params)
|
||||
if(usr.client == parent.current_user)
|
||||
parent.element_chosen(null,usr)
|
||||
|
||||
/obj/screen/radial/persistent/center/MouseEntered(location, control, params)
|
||||
. = ..()
|
||||
icon_state = "radial_center_focus"
|
||||
|
||||
/obj/screen/radial/persistent/center/MouseExited(location, control, params)
|
||||
. = ..()
|
||||
icon_state = "radial_center"
|
||||
|
||||
|
||||
|
||||
/datum/radial_menu/persistent
|
||||
var/uniqueid
|
||||
var/datum/callback/select_proc_callback
|
||||
|
||||
/datum/radial_menu/persistent/New()
|
||||
close_button = new /obj/screen/radial/persistent/center
|
||||
close_button.parent = src
|
||||
|
||||
|
||||
/datum/radial_menu/persistent/element_chosen(choice_id,mob/user)
|
||||
select_proc_callback.Invoke(choices_values[choice_id])
|
||||
|
||||
|
||||
/datum/radial_menu/persistent/proc/change_choices(list/newchoices, tooltips)
|
||||
if(!newchoices.len)
|
||||
return
|
||||
Reset()
|
||||
set_choices(newchoices,tooltips)
|
||||
|
||||
/datum/radial_menu/persistent/Destroy()
|
||||
QDEL_NULL(select_proc_callback)
|
||||
GLOB.radial_menus -= uniqueid
|
||||
Reset()
|
||||
hide()
|
||||
. = ..()
|
||||
|
||||
/*
|
||||
Creates a persistent radial menu and shows it to the user, anchored to anchor (or user if the anchor is currently in users screen).
|
||||
Choices should be a list where list keys are movables or text used for element names and return value
|
||||
and list values are movables/icons/images used for element icons
|
||||
Select_proc is the proc to be called each time an element on the menu is clicked, and should accept the chosen element as its final argument
|
||||
Clicking the center button will return a choice of null
|
||||
*/
|
||||
/proc/show_radial_menu_persistent(mob/user, atom/anchor, list/choices, datum/callback/select_proc, uniqueid, radius, tooltips = FALSE)
|
||||
if(!user || !anchor || !length(choices) || !select_proc)
|
||||
return
|
||||
if(!uniqueid)
|
||||
uniqueid = "defmenu_[REF(user)]_[REF(anchor)]"
|
||||
|
||||
if(GLOB.radial_menus[uniqueid])
|
||||
return
|
||||
|
||||
var/datum/radial_menu/persistent/menu = new
|
||||
menu.uniqueid = uniqueid
|
||||
GLOB.radial_menus[uniqueid] = menu
|
||||
if(radius)
|
||||
menu.radius = radius
|
||||
menu.select_proc_callback = select_proc
|
||||
menu.anchor = anchor
|
||||
menu.check_screen_border(user) //Do what's needed to make it look good near borders or on hud
|
||||
menu.set_choices(choices, tooltips)
|
||||
menu.show_to(user)
|
||||
return menu
|
||||
|
||||
@@ -64,7 +64,7 @@
|
||||
to_chat(user, "<span class='warning'>You're too exhausted.</span>") // CIT CHANGE - ditto
|
||||
return // CIT CHANGE - ditto
|
||||
|
||||
if(force && user.has_trait(TRAIT_PACIFISM))
|
||||
if(force && damtype != STAMINA && HAS_TRAIT(user, TRAIT_PACIFISM))
|
||||
to_chat(user, "<span class='warning'>You don't want to harm other living beings!</span>")
|
||||
return
|
||||
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
ShiftClickOn(A)
|
||||
return
|
||||
if(modifiers["alt"])
|
||||
AltClickOn(A)
|
||||
AltClickNoInteract(src, A)
|
||||
return
|
||||
if(modifiers["ctrl"])
|
||||
CtrlClickOn(A)
|
||||
|
||||
@@ -50,7 +50,7 @@ SUBSYSTEM_DEF(augury)
|
||||
watchers -= w
|
||||
continue
|
||||
var/mob/dead/observer/O = w
|
||||
if(biggest_doom && (!O.orbiting || O.orbiting.orbiting != biggest_doom))
|
||||
if(biggest_doom && (!O.orbiting || O.orbiting.parent != biggest_doom))
|
||||
O.ManualFollow(biggest_doom)
|
||||
|
||||
/datum/action/innate/augury
|
||||
|
||||
@@ -256,10 +256,13 @@ GLOBAL_LIST_EMPTY(the_station_areas)
|
||||
/datum/controller/subsystem/mapping/proc/generate_station_area_list()
|
||||
var/list/station_areas_blacklist = typecacheof(list(/area/space, /area/mine, /area/ruin, /area/asteroid/nearstation))
|
||||
for(var/area/A in world)
|
||||
var/turf/picked = safepick(get_area_turfs(A.type))
|
||||
if(picked && is_station_level(picked.z))
|
||||
if(!(A.type in GLOB.the_station_areas) && !is_type_in_typecache(A, station_areas_blacklist))
|
||||
GLOB.the_station_areas.Add(A.type)
|
||||
if (is_type_in_typecache(A, station_areas_blacklist))
|
||||
continue
|
||||
if (!A.contents.len || !A.unique)
|
||||
continue
|
||||
var/turf/picked = A.contents[1]
|
||||
if (is_station_level(picked.z))
|
||||
GLOB.the_station_areas += A.type
|
||||
|
||||
if(!GLOB.the_station_areas.len)
|
||||
log_world("ERROR: Station areas list failed to generate!")
|
||||
@@ -495,4 +498,9 @@ GLOBAL_LIST_EMPTY(the_station_areas)
|
||||
clearing |= used_turfs //used turfs is an associative list, BUT, reserve_turfs() can still handle it. If the code above works properly, this won't even be needed as the turfs would be freed already.
|
||||
unused_turfs.Cut()
|
||||
used_turfs.Cut()
|
||||
reserve_turfs(clearing)
|
||||
reserve_turfs(clearing)
|
||||
|
||||
/datum/controller/subsystem/mapping/proc/reg_in_areas_in_z(list/areas)
|
||||
for(var/B in areas)
|
||||
var/area/A = B
|
||||
A.reg_in_areas_in_z()
|
||||
|
||||
+10
-15
@@ -1,22 +1,14 @@
|
||||
// The Squeak
|
||||
// because this is about placement of mice mobs, and nothing to do with
|
||||
// mice - the computer peripheral
|
||||
|
||||
SUBSYSTEM_DEF(squeak)
|
||||
name = "Squeak"
|
||||
init_order = INIT_ORDER_SQUEAK
|
||||
SUBSYSTEM_DEF(minor_mapping)
|
||||
name = "Minor Mapping"
|
||||
init_order = INIT_ORDER_MINOR_MAPPING
|
||||
flags = SS_NO_FIRE
|
||||
|
||||
var/list/exposed_wires = list()
|
||||
|
||||
/datum/controller/subsystem/squeak/Initialize(timeofday)
|
||||
/datum/controller/subsystem/minor_mapping/Initialize(timeofday)
|
||||
trigger_migration(CONFIG_GET(number/mice_roundstart))
|
||||
return ..()
|
||||
|
||||
/datum/controller/subsystem/squeak/proc/trigger_migration(num_mice=10)
|
||||
if(!num_mice)
|
||||
return
|
||||
find_exposed_wires()
|
||||
/datum/controller/subsystem/minor_mapping/proc/trigger_migration(num_mice=10)
|
||||
var/list/exposed_wires = find_exposed_wires()
|
||||
|
||||
var/mob/living/simple_animal/mouse/M
|
||||
var/turf/proposed_turf
|
||||
@@ -31,7 +23,8 @@ SUBSYSTEM_DEF(squeak)
|
||||
num_mice -= 1
|
||||
M = null
|
||||
|
||||
/datum/controller/subsystem/squeak/proc/find_exposed_wires()
|
||||
/proc/find_exposed_wires()
|
||||
var/list/exposed_wires = list()
|
||||
exposed_wires.Cut()
|
||||
var/list/all_turfs
|
||||
for (var/z in SSmapping.levels_by_trait(ZTRAIT_STATION))
|
||||
@@ -41,3 +34,5 @@ SUBSYSTEM_DEF(squeak)
|
||||
continue
|
||||
if(locate(/obj/structure/cable) in T)
|
||||
exposed_wires += T
|
||||
|
||||
return shuffle(exposed_wires)
|
||||
@@ -1,44 +0,0 @@
|
||||
SUBSYSTEM_DEF(orbit)
|
||||
name = "Orbits"
|
||||
priority = FIRE_PRIORITY_ORBIT
|
||||
wait = 2
|
||||
flags = SS_NO_INIT|SS_TICKER
|
||||
|
||||
var/list/currentrun = list()
|
||||
var/list/processing = list()
|
||||
|
||||
/datum/controller/subsystem/orbit/stat_entry()
|
||||
..("P:[processing.len]")
|
||||
|
||||
|
||||
/datum/controller/subsystem/orbit/fire(resumed = 0)
|
||||
if (!resumed)
|
||||
src.currentrun = processing.Copy()
|
||||
|
||||
//cache for sanic speed (lists are references anyways)
|
||||
var/list/currentrun = src.currentrun
|
||||
|
||||
while (currentrun.len)
|
||||
var/datum/orbit/O = currentrun[currentrun.len]
|
||||
currentrun.len--
|
||||
if (!O)
|
||||
processing -= O
|
||||
if (MC_TICK_CHECK)
|
||||
return
|
||||
continue
|
||||
if (!O.orbiter)
|
||||
qdel(O)
|
||||
if (MC_TICK_CHECK)
|
||||
return
|
||||
continue
|
||||
if (O.lastprocess >= world.time) //we already checked recently
|
||||
if (MC_TICK_CHECK)
|
||||
return
|
||||
continue
|
||||
var/targetloc = get_turf(O.orbiting)
|
||||
if (targetloc != O.lastloc || O.orbiter.loc != targetloc)
|
||||
O.Check(targetloc)
|
||||
if (MC_TICK_CHECK)
|
||||
return
|
||||
|
||||
|
||||
@@ -28,6 +28,7 @@ SUBSYSTEM_DEF(persistence)
|
||||
LoadPhotoPersistence()
|
||||
if(CONFIG_GET(flag/use_antag_rep))
|
||||
LoadAntagReputation()
|
||||
LoadRandomizedRecipes()
|
||||
return ..()
|
||||
|
||||
/datum/controller/subsystem/persistence/proc/LoadSatchels()
|
||||
@@ -206,6 +207,7 @@ SUBSYSTEM_DEF(persistence)
|
||||
SavePhotoPersistence() //THIS IS PERSISTENCE, NOT THE LOGGING PORTION.
|
||||
if(CONFIG_GET(flag/use_antag_rep))
|
||||
CollectAntagReputation()
|
||||
SaveRandomizedRecipes()
|
||||
|
||||
/datum/controller/subsystem/persistence/proc/GetPhotoAlbums()
|
||||
var/album_path = file("data/photo_albums.json")
|
||||
@@ -371,3 +373,43 @@ SUBSYSTEM_DEF(persistence)
|
||||
fdel(FILE_ANTAG_REP)
|
||||
text2file(json_encode(antag_rep), FILE_ANTAG_REP)
|
||||
|
||||
/datum/controller/subsystem/persistence/proc/LoadRandomizedRecipes()
|
||||
var/json_file = file("data/RandomizedChemRecipes.json")
|
||||
var/json
|
||||
if(fexists(json_file))
|
||||
json = json_decode(file2text(json_file))
|
||||
|
||||
for(var/randomized_type in subtypesof(/datum/chemical_reaction/randomized))
|
||||
var/datum/chemical_reaction/randomized/R = new randomized_type
|
||||
var/loaded = FALSE
|
||||
if(R.persistent && json)
|
||||
var/list/recipe_data = json[R.id]
|
||||
if(recipe_data && R.LoadOldRecipe(recipe_data) && (daysSince(R.created) <= R.persistence_period))
|
||||
loaded = TRUE
|
||||
if(!loaded) //We do not have information for whatever reason, just generate new one
|
||||
R.GenerateRecipe()
|
||||
|
||||
if(!R.HasConflicts()) //Might want to try again if conflicts happened in the future.
|
||||
add_chemical_reaction(R)
|
||||
|
||||
/datum/controller/subsystem/persistence/proc/SaveRandomizedRecipes()
|
||||
var/json_file = file("data/RandomizedChemRecipes.json")
|
||||
var/list/file_data = list()
|
||||
|
||||
//asert globchems done
|
||||
for(var/randomized_type in subtypesof(/datum/chemical_reaction/randomized))
|
||||
var/datum/chemical_reaction/randomized/R = randomized_type
|
||||
R = get_chemical_reaction(initial(R.id)) //ew, would be nice to add some simple tracking
|
||||
if(R && R.persistent && R.id)
|
||||
var/recipe_data = list()
|
||||
recipe_data["timestamp"] = R.created
|
||||
recipe_data["required_reagents"] = R.required_reagents
|
||||
recipe_data["required_catalysts"] = R.required_catalysts
|
||||
recipe_data["required_temp"] = R.required_temp
|
||||
recipe_data["is_cold_recipe"] = R.is_cold_recipe
|
||||
recipe_data["results"] = R.results
|
||||
recipe_data["required_container"] = "[R.required_container]"
|
||||
file_data["[R.id]"] = recipe_data
|
||||
|
||||
fdel(json_file)
|
||||
WRITE_FILE(json_file, json_encode(file_data))
|
||||
|
||||
@@ -1,11 +0,0 @@
|
||||
SUBSYSTEM_DEF(religion)
|
||||
name = "Religion"
|
||||
flags = SS_NO_FIRE|SS_NO_INIT
|
||||
|
||||
var/religion
|
||||
var/deity
|
||||
var/bible_name
|
||||
var/bible_icon_state
|
||||
var/bible_item_state
|
||||
var/holy_weapon_type
|
||||
var/holy_armor_type
|
||||
@@ -116,7 +116,7 @@ SUBSYSTEM_DEF(throwing)
|
||||
return
|
||||
|
||||
dist_travelled++
|
||||
|
||||
|
||||
if (dist_travelled > MAX_THROWING_DIST)
|
||||
finalize()
|
||||
return
|
||||
@@ -154,7 +154,7 @@ SUBSYSTEM_DEF(throwing)
|
||||
/datum/thrownthing/proc/hitcheck()
|
||||
for (var/thing in get_turf(thrownthing))
|
||||
var/atom/movable/AM = thing
|
||||
if (AM == thrownthing)
|
||||
if (AM == thrownthing || (AM == thrower && !ismob(thrownthing)))
|
||||
continue
|
||||
if (AM.density && !(AM.pass_flags & LETPASSTHROW) && !(AM.flags_1 & ON_BORDER_1))
|
||||
finalize(hit=TRUE, target=AM)
|
||||
|
||||
@@ -126,9 +126,20 @@ SUBSYSTEM_DEF(ticker)
|
||||
|
||||
|
||||
if(!GLOB.syndicate_code_phrase)
|
||||
GLOB.syndicate_code_phrase = generate_code_phrase()
|
||||
GLOB.syndicate_code_phrase = generate_code_phrase(return_list=TRUE)
|
||||
|
||||
var/codewords = jointext(GLOB.syndicate_code_phrase, "|")
|
||||
var/regex/codeword_match = new("([codewords])", "ig")
|
||||
|
||||
GLOB.syndicate_code_phrase_regex = codeword_match
|
||||
|
||||
if(!GLOB.syndicate_code_response)
|
||||
GLOB.syndicate_code_response = generate_code_phrase()
|
||||
GLOB.syndicate_code_response = generate_code_phrase(return_list=TRUE)
|
||||
|
||||
var/codewords = jointext(GLOB.syndicate_code_response, "|")
|
||||
var/regex/codeword_match = new("([codewords])", "ig")
|
||||
|
||||
GLOB.syndicate_code_response_regex = codeword_match
|
||||
|
||||
start_at = world.time + (CONFIG_GET(number/lobby_countdown) * 10)
|
||||
if(CONFIG_GET(flag/randomize_shift_time))
|
||||
@@ -561,6 +572,15 @@ SUBSYSTEM_DEF(ticker)
|
||||
news_message = "The burst of energy released near [station_name()] has been confirmed as merely a test of a new weapon. However, due to an unexpected mechanical error, their communications system has been knocked offline."
|
||||
if(SHUTTLE_HIJACK)
|
||||
news_message = "During routine evacuation procedures, the emergency shuttle of [station_name()] had its navigation protocols corrupted and went off course, but was recovered shortly after."
|
||||
if(GANG_VICTORY)
|
||||
news_message = "Company officials reaffirmed that sudden deployments of special forces are not in any way connected to rumors of [station_name()] being covered in graffiti."
|
||||
|
||||
if(SSblackbox.first_death)
|
||||
var/list/ded = SSblackbox.first_death
|
||||
if(ded.len)
|
||||
news_message += " NT Sanctioned Psykers picked up faint traces of someone near the station, allegedly having had died. Their name was: [ded["name"]], [ded["role"]], at [ded["area"]].[ded["last_words"] ? " Their last words were: \"[ded["last_words"]]\"" : ""]"
|
||||
else
|
||||
news_message += " NT Sanctioned Psykers proudly confirm reports that nobody died this shift!"
|
||||
|
||||
if(news_message)
|
||||
send2otherserver(news_source, news_message,"News_Report")
|
||||
|
||||
@@ -71,7 +71,6 @@ SUBSYSTEM_DEF(timer)
|
||||
for(var/I in second_queue)
|
||||
log_world(get_timer_debug_string(I))
|
||||
|
||||
var/cut_start_index = 1
|
||||
var/next_clienttime_timer_index = 0
|
||||
var/len = length(clienttime_timers)
|
||||
|
||||
@@ -94,14 +93,14 @@ SUBSYSTEM_DEF(timer)
|
||||
|
||||
if(ctime_timer.flags & TIMER_LOOP)
|
||||
ctime_timer.spent = 0
|
||||
clienttime_timers.Insert(ctime_timer, 1)
|
||||
cut_start_index++
|
||||
ctime_timer.timeToRun = REALTIMEOFDAY + ctime_timer.wait
|
||||
BINARY_INSERT(ctime_timer, clienttime_timers, datum/timedevent, timeToRun)
|
||||
else
|
||||
qdel(ctime_timer)
|
||||
|
||||
|
||||
if (next_clienttime_timer_index)
|
||||
clienttime_timers.Cut(cut_start_index,next_clienttime_timer_index+1)
|
||||
clienttime_timers.Cut(1, next_clienttime_timer_index+1)
|
||||
|
||||
if (MC_TICK_CHECK)
|
||||
return
|
||||
|
||||
@@ -72,7 +72,7 @@ SUBSYSTEM_DEF(traumas)
|
||||
"security" = typecacheof(list(/obj/item/clothing/under/rank/security, /obj/item/clothing/under/rank/warden,
|
||||
/obj/item/clothing/under/rank/head_of_security, /obj/item/clothing/under/rank/det,
|
||||
/obj/item/melee/baton, /obj/item/gun/energy/taser, /obj/item/restraints/handcuffs,
|
||||
/obj/machinery/door/airlock/security)),
|
||||
/obj/machinery/door/airlock/security, /obj/effect/hallucination/simple/securitron)),
|
||||
|
||||
"clowns" = typecacheof(list(/obj/item/clothing/under/rank/clown, /obj/item/clothing/shoes/clown_shoes,
|
||||
/obj/item/clothing/mask/gas/clown_hat, /obj/item/instrument/bikehorn,
|
||||
@@ -160,22 +160,22 @@ SUBSYSTEM_DEF(traumas)
|
||||
/obj/item/grown/bananapeel/mimanapeel, /obj/item/cartridge/virus/mime, /obj/item/clothing/shoes/sneakers/mime,
|
||||
/obj/item/bedsheet/mime, /obj/item/reagent_containers/food/snacks/burger/mime, /obj/item/clothing/head/beret, /obj/item/clothing/mask/gas/sexymime,
|
||||
/obj/item/clothing/under/sexymime, /obj/item/toy/figure/mime, /obj/item/toy/crayon/mime, /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/silenced, /obj/mecha/combat/reticence)),
|
||||
|
||||
|
||||
"cats" = typecacheof(list(/obj/item/organ/ears/cat, /obj/item/organ/tail/cat, /obj/item/laser_pointer, /obj/item/toy/cattoy, /obj/item/clothing/head/kitty,
|
||||
/obj/item/clothing/head/collectable/kitty, /obj/item/melee/chainofcommand/tailwhip/kitty, /obj/item/stack/sheet/animalhide/cat)),
|
||||
|
||||
|
||||
"syndicate" = typecacheof(list(/obj/item/stack/tile/mineral/plastitanium, /obj/machinery/computer/shuttle/syndicate, /obj/machinery/computer/shuttle/syndicate/recall, /obj/machinery/computer/shuttle/syndicate/drop_pod, /obj/machinery/computer/camera_advanced/shuttle_docker/syndicate, /obj/machinery/recharge_station,
|
||||
/obj/machinery/porta_turret/syndicate, /obj/structure/closet/syndicate, /obj/machinery/suit_storage_unit/syndicate, /obj/item/clothing/under/syndicate, /obj/item/folder/syndicate, /obj/item/documents/syndicate, /obj/item/clothing/glasses/phantomthief/syndicate, /obj/item/antag_spawner/nuke_ops, /obj/item/storage/box/syndicate,
|
||||
/obj/structure/fluff/empty_sleeper/syndicate, /obj/item/implant/radio/syndicate, /obj/item/clothing/head/helmet/space/syndicate, /obj/machinery/nuclearbomb/syndicate, /obj/item/grenade/syndieminibomb, /obj/item/storage/backpack/duffelbag/syndie, /obj/item/gun/ballistic/automatic/pistol, /obj/item/gun/ballistic/revolver/syndie,
|
||||
/obj/item/gun/ballistic/automatic/shotgun/bulldog, /obj/item/gun/ballistic/automatic/c20r, /obj/item/gun/ballistic/automatic/m90, /obj/item/gun/ballistic/automatic/l6_saw, /obj/item/storage/belt/grenade/full, /obj/item/gun/ballistic/automatic/sniper_rifle/syndicate, /obj/item/gun/energy/kinetic_accelerator/crossbow,
|
||||
/obj/item/melee/transforming/energy/sword/saber, /obj/item/twohanded/dualsaber, /obj/item/melee/powerfist, /obj/item/storage/box/syndie_kit, /obj/item/grenade/spawnergrenade/manhacks, /obj/item/grenade/chem_grenade/bioterrorfoam, /obj/item/reagent_containers/spray/chemsprayer/bioterror, /obj/item/ammo_box/magazine/m10mm,
|
||||
/obj/item/melee/transforming/energy/sword/saber, /obj/item/twohanded/dualsaber, /obj/item/melee/powerfist, /obj/item/storage/box/syndie_kit, /obj/item/grenade/spawnergrenade/manhacks, /obj/item/grenade/chem_grenade/bioterrorfoam, /obj/item/reagent_containers/spray/chemsprayer/bioterror, /obj/item/ammo_box/magazine/m10mm,
|
||||
/obj/item/ammo_box/magazine/pistolm9mm, /obj/item/ammo_box/a357, /obj/item/ammo_box/magazine/m12g, /obj/item/ammo_box/magazine/mm195x129, /obj/item/antag_spawner/nuke_ops, /obj/mecha/combat/gygax/dark, /obj/mecha/combat/marauder/mauler, /obj/item/soap/syndie, /obj/item/gun/syringe/syndicate, /obj/item/cartridge/virus/syndicate,
|
||||
/obj/item/cartridge/virus/frame, /obj/item/chameleon, /obj/item/storage/box/syndie_kit/cutouts, /obj/item/clothing/suit/space/hardsuit/syndi, /obj/item/card/emag, /obj/item/storage/toolbox/syndicate, /obj/item/storage/book/bible/syndicate, /obj/item/encryptionkey/binary, /obj/item/encryptionkey/syndicate, /obj/item/aiModule/syndicate,
|
||||
/obj/item/clothing/shoes/magboots/syndie, /obj/item/powersink, /obj/item/sbeacondrop, /obj/item/sbeacondrop/bomb, /obj/item/syndicatedetonator, /obj/item/shield/energy, /obj/item/assault_pod, /obj/item/slimepotion/slime/sentience/nuclear, /obj/item/stack/telecrystal, /obj/item/jammer, /obj/item/codespeak_manual/unlimited,
|
||||
/obj/item/toy/cards/deck/syndicate, /obj/item/storage/secure/briefcase/syndie, /obj/item/storage/fancy/cigarettes/cigpack_syndicate, /obj/item/toy/syndicateballoon, /obj/item/clothing/gloves/rapid, /obj/item/paper/fluff/ruins/thederelict/syndie_mission, /obj/item/organ/cyberimp/eyes/hud/security/syndicate, /obj/item/clothing/head/HoS/syndicate,
|
||||
/obj/machinery/computer/pod/old/syndicate, /obj/machinery/vending/medical/syndicate_access, /obj/item/mmi/syndie, /obj/item/target/syndicate, /obj/machinery/vending/cigarette/syndicate, /obj/item/robot_module/syndicate, /obj/item/clothing/mask/gas/syndicate, /obj/machinery/power/singularity_beacon/syndicate, /obj/item/clothing/head/syndicatefake,
|
||||
/obj/item/radio/headset/syndicate, /obj/item/gun/ballistic/automatic/pistol/antitank/syndicate, /obj/item/pda/syndicate, /obj/item/clothing/suit/armor/vest/capcarapace/syndicate, /obj/item/gun/ballistic/automatic/flechette, /obj/item/ammo_box/magazine/flechette, /obj/item/clothing/suit/toggle/lawyer/black/syndie, /obj/item/melee/transforming/energy/sword/cx/traitor,
|
||||
/obj/structure/sign/poster/contraband/syndicate_pistol, /obj/structure/sign/poster/contraband/syndicate_recruitment, /obj/item/bedsheet/syndie, /obj/item/borg/upgrade/syndicate, /obj/item/tank/jetpack/oxygen/harness, /obj/item/firing_pin/implant/pindicate, /obj/item/reagent_containers/glass/bottle/traitor, /obj/item/storage/belt/military,
|
||||
/obj/item/clothing/shoes/magboots/syndie, /obj/item/powersink, /obj/item/sbeacondrop, /obj/item/sbeacondrop/bomb, /obj/item/syndicatedetonator, /obj/item/shield/energy, /obj/item/assault_pod, /obj/item/slimepotion/slime/sentience/nuclear, /obj/item/stack/telecrystal, /obj/item/jammer, /obj/item/codespeak_manual/unlimited,
|
||||
/obj/item/toy/cards/deck/syndicate, /obj/item/storage/secure/briefcase/syndie, /obj/item/storage/fancy/cigarettes/cigpack_syndicate, /obj/item/toy/syndicateballoon, /obj/item/clothing/gloves/rapid, /obj/item/paper/fluff/ruins/thederelict/syndie_mission, /obj/item/organ/cyberimp/eyes/hud/security/syndicate, /obj/item/clothing/head/HoS/syndicate,
|
||||
/obj/machinery/computer/pod/old/syndicate, /obj/machinery/vending/medical/syndicate_access, /obj/item/mmi/syndie, /obj/item/target/syndicate, /obj/machinery/vending/cigarette/syndicate, /obj/item/robot_module/syndicate, /obj/item/clothing/mask/gas/syndicate, /obj/machinery/power/singularity_beacon/syndicate, /obj/item/clothing/head/syndicatefake,
|
||||
/obj/item/radio/headset/syndicate, /obj/item/gun/ballistic/automatic/pistol/antitank/syndicate, /obj/item/pda/syndicate, /obj/item/clothing/suit/armor/vest/capcarapace/syndicate, /obj/item/gun/ballistic/automatic/flechette, /obj/item/ammo_box/magazine/flechette, /obj/item/clothing/suit/toggle/lawyer/black/syndie, /obj/item/melee/transforming/energy/sword/cx/traitor,
|
||||
/obj/structure/sign/poster/contraband/syndicate_pistol, /obj/structure/sign/poster/contraband/syndicate_recruitment, /obj/item/bedsheet/syndie, /obj/item/borg/upgrade/syndicate, /obj/item/tank/jetpack/oxygen/harness, /obj/item/firing_pin/implant/pindicate, /obj/item/reagent_containers/glass/bottle/traitor, /obj/item/storage/belt/military,
|
||||
/obj/item/twohanded/shockpaddles/syndicate, /obj/item/clothing/mask/cigarette/syndicate, /obj/item/toy/plush/nukeplushie)),
|
||||
|
||||
"eye" = typecacheof(list(/obj/item/organ/eyes, /obj/item/reagent_containers/syringe))
|
||||
@@ -199,7 +199,7 @@ SUBSYSTEM_DEF(traumas)
|
||||
"anime" = typecacheof(list(/datum/species/human/felinid)),
|
||||
"cats" = typecacheof(list(/datum/species/human/felinid)),
|
||||
"syndicate" = typecacheof(list(/datum/species/corporate, /datum/species/zombie/infectious))
|
||||
)
|
||||
)
|
||||
|
||||
return ..()
|
||||
|
||||
|
||||
@@ -195,11 +195,16 @@
|
||||
/datum/action/item_action/toggle_firemode
|
||||
name = "Toggle Firemode"
|
||||
|
||||
/datum/action/item_action/rcl
|
||||
/datum/action/item_action/rcl_col
|
||||
name = "Change Cable Color"
|
||||
icon_icon = 'icons/mob/actions/actions_items.dmi'
|
||||
button_icon_state = "rcl_rainbow"
|
||||
|
||||
/datum/action/item_action/rcl_gui
|
||||
name = "Toggle Fast Wiring Gui"
|
||||
icon_icon = 'icons/mob/actions/actions_items.dmi'
|
||||
button_icon_state = "rcl_gui"
|
||||
|
||||
/datum/action/item_action/startchainsaw
|
||||
name = "Pull The Starting Cord"
|
||||
|
||||
|
||||
@@ -9,7 +9,8 @@
|
||||
var/obj/item/organ/brain/brain //the poor bastard's brain
|
||||
var/gain_text = "<span class='notice'>You feel traumatized.</span>"
|
||||
var/lose_text = "<span class='notice'>You no longer feel traumatized.</span>"
|
||||
var/can_gain = TRUE //can this be gained through random traumas?
|
||||
var/can_gain = TRUE
|
||||
var/random_gain = TRUE //can this be gained through random traumas?
|
||||
var/resilience = TRAUMA_RESILIENCE_BASIC //how hard is this to cure?
|
||||
|
||||
/datum/brain_trauma/Destroy()
|
||||
@@ -23,7 +24,7 @@
|
||||
//Called on life ticks
|
||||
/datum/brain_trauma/proc/on_life()
|
||||
return
|
||||
|
||||
|
||||
//Called on death
|
||||
/datum/brain_trauma/proc/on_death()
|
||||
return
|
||||
@@ -31,16 +32,18 @@
|
||||
//Called when given to a mob
|
||||
/datum/brain_trauma/proc/on_gain()
|
||||
to_chat(owner, gain_text)
|
||||
RegisterSignal(owner, COMSIG_MOB_SAY, .proc/handle_speech)
|
||||
|
||||
//Called when removed from a mob
|
||||
/datum/brain_trauma/proc/on_lose(silent)
|
||||
if(!silent)
|
||||
to_chat(owner, lose_text)
|
||||
UnregisterSignal(owner, COMSIG_MOB_SAY)
|
||||
|
||||
//Called when hearing a spoken message
|
||||
/datum/brain_trauma/proc/on_hear(message, speaker, message_language, raw_message, radio_freq)
|
||||
return message
|
||||
|
||||
//Called when speaking
|
||||
/datum/brain_trauma/proc/on_say(message)
|
||||
return message
|
||||
/datum/brain_trauma/proc/handle_speech(datum/source, list/speech_args)
|
||||
UnregisterSignal(owner, COMSIG_MOB_SAY)
|
||||
|
||||
@@ -42,7 +42,7 @@
|
||||
lose_text = "<span class='notice'>You feel smart again.</span>"
|
||||
|
||||
/datum/brain_trauma/mild/dumbness/on_gain()
|
||||
owner.add_trait(TRAIT_DUMB, TRAUMA_TRAIT)
|
||||
ADD_TRAIT(owner, TRAIT_DUMB, TRAUMA_TRAIT)
|
||||
SEND_SIGNAL(owner, COMSIG_ADD_MOOD_EVENT, "dumb", /datum/mood_event/oblivious)
|
||||
..()
|
||||
|
||||
@@ -55,7 +55,7 @@
|
||||
..()
|
||||
|
||||
/datum/brain_trauma/mild/dumbness/on_lose()
|
||||
owner.remove_trait(TRAIT_DUMB, TRAUMA_TRAIT)
|
||||
REMOVE_TRAIT(owner, TRAIT_DUMB, TRAUMA_TRAIT)
|
||||
owner.derpspeech = 0
|
||||
SEND_SIGNAL(owner, COMSIG_CLEAR_MOOD_EVENT, "dumb")
|
||||
..()
|
||||
@@ -68,18 +68,12 @@
|
||||
lose_text = ""
|
||||
|
||||
/datum/brain_trauma/mild/speech_impediment/on_gain()
|
||||
owner.dna.add_mutation(UNINTELLIGIBLE)
|
||||
..()
|
||||
|
||||
//no fiddling with genetics to get out of this one
|
||||
/datum/brain_trauma/mild/speech_impediment/on_life()
|
||||
if(!(GLOB.mutations_list[UNINTELLIGIBLE] in owner.dna.mutations))
|
||||
on_gain()
|
||||
..()
|
||||
ADD_TRAIT(owner, TRAIT_UNINTELLIGIBLE_SPEECH, TRAUMA_TRAIT)
|
||||
. = ..()
|
||||
|
||||
/datum/brain_trauma/mild/speech_impediment/on_lose()
|
||||
owner.dna.remove_mutation(UNINTELLIGIBLE)
|
||||
..()
|
||||
REMOVE_TRAIT(owner, TRAIT_UNINTELLIGIBLE_SPEECH, TRAUMA_TRAIT)
|
||||
. = ..()
|
||||
|
||||
/datum/brain_trauma/mild/concussion
|
||||
name = "Concussion"
|
||||
|
||||
@@ -78,14 +78,13 @@
|
||||
break
|
||||
return message
|
||||
|
||||
/datum/brain_trauma/mild/phobia/on_say(message)
|
||||
/datum/brain_trauma/mild/phobia/handle_speech(datum/source, list/speech_args)
|
||||
for(var/word in trigger_words)
|
||||
var/reg = regex("(\\b|\\A)[REGEX_QUOTE(word)]'?s*(\\b|\\Z)", "i")
|
||||
|
||||
if(findtext(message, reg))
|
||||
|
||||
if(findtext(speech_args[SPEECH_MESSAGE], reg))
|
||||
to_chat(owner, "<span class='warning'>You can't bring yourself to say the word \"[word]\"!</span>")
|
||||
return ""
|
||||
return message
|
||||
speech_args[SPEECH_MESSAGE] = ""
|
||||
|
||||
/datum/brain_trauma/mild/phobia/proc/freak_out(atom/reason, trigger_word)
|
||||
next_scare = world.time + 120
|
||||
@@ -119,3 +118,7 @@
|
||||
owner.confused += 10
|
||||
owner.Jitter(10)
|
||||
owner.stuttering += 10
|
||||
|
||||
/datum/brain_trauma/mild/phobia/security
|
||||
phobia_type = "security"
|
||||
random_gain = FALSE
|
||||
|
||||
@@ -13,11 +13,11 @@
|
||||
lose_text = "<span class='notice'>You suddenly remember how to speak.</span>"
|
||||
|
||||
/datum/brain_trauma/severe/mute/on_gain()
|
||||
owner.add_trait(TRAIT_MUTE, TRAUMA_TRAIT)
|
||||
ADD_TRAIT(owner, TRAIT_MUTE, TRAUMA_TRAIT)
|
||||
..()
|
||||
|
||||
/datum/brain_trauma/severe/mute/on_lose()
|
||||
owner.remove_trait(TRAIT_MUTE, TRAUMA_TRAIT)
|
||||
REMOVE_TRAIT(owner, TRAIT_MUTE, TRAUMA_TRAIT)
|
||||
..()
|
||||
|
||||
/datum/brain_trauma/severe/aphasia
|
||||
@@ -60,18 +60,68 @@
|
||||
|
||||
/datum/brain_trauma/severe/paralysis
|
||||
name = "Paralysis"
|
||||
desc = "Patient's brain can no longer control its motor functions."
|
||||
desc = "Patient's brain can no longer control part of its motor functions."
|
||||
scan_desc = "cerebral paralysis"
|
||||
gain_text = "<span class='warning'>You can't feel your body anymore!</span>"
|
||||
lose_text = "<span class='notice'>You can feel your limbs again!</span>"
|
||||
gain_text = ""
|
||||
lose_text = ""
|
||||
var/paralysis_type
|
||||
var/list/paralysis_traits = list()
|
||||
//for descriptions
|
||||
|
||||
/datum/brain_trauma/severe/paralysis/on_life()
|
||||
owner.Knockdown(200, ignore_canknockdown = TRUE)
|
||||
/datum/brain_trauma/severe/paralysis/New(specific_type)
|
||||
if(specific_type)
|
||||
paralysis_type = specific_type
|
||||
if(!paralysis_type)
|
||||
paralysis_type = pick("full","left","right","arms","legs","r_arm","l_arm","r_leg","l_leg")
|
||||
var/subject
|
||||
switch(paralysis_type)
|
||||
if("full")
|
||||
subject = "your body"
|
||||
paralysis_traits = list(TRAIT_PARALYSIS_L_ARM, TRAIT_PARALYSIS_R_ARM, TRAIT_PARALYSIS_L_LEG, TRAIT_PARALYSIS_R_LEG)
|
||||
if("left")
|
||||
subject = "the left side of your body"
|
||||
paralysis_traits = list(TRAIT_PARALYSIS_L_ARM, TRAIT_PARALYSIS_L_LEG)
|
||||
if("right")
|
||||
subject = "the right side of your body"
|
||||
paralysis_traits = list(TRAIT_PARALYSIS_R_ARM, TRAIT_PARALYSIS_R_LEG)
|
||||
if("arms")
|
||||
subject = "your arms"
|
||||
paralysis_traits = list(TRAIT_PARALYSIS_L_ARM, TRAIT_PARALYSIS_R_ARM)
|
||||
if("legs")
|
||||
subject = "your legs"
|
||||
paralysis_traits = list(TRAIT_PARALYSIS_L_LEG, TRAIT_PARALYSIS_R_LEG)
|
||||
if("r_arm")
|
||||
subject = "your right arm"
|
||||
paralysis_traits = list(TRAIT_PARALYSIS_R_ARM)
|
||||
if("l_arm")
|
||||
subject = "your left arm"
|
||||
paralysis_traits = list(TRAIT_PARALYSIS_L_ARM)
|
||||
if("r_leg")
|
||||
subject = "your right leg"
|
||||
paralysis_traits = list(TRAIT_PARALYSIS_R_LEG)
|
||||
if("l_leg")
|
||||
subject = "your left leg"
|
||||
paralysis_traits = list(TRAIT_PARALYSIS_L_LEG)
|
||||
|
||||
gain_text = "<span class='warning'>You can't feel [subject] anymore!</span>"
|
||||
lose_text = "<span class='notice'>You can feel [subject] again!</span>"
|
||||
|
||||
/datum/brain_trauma/severe/paralysis/on_gain()
|
||||
..()
|
||||
for(var/X in paralysis_traits)
|
||||
ADD_TRAIT(owner, X, "trauma_paralysis")
|
||||
owner.update_disabled_bodyparts()
|
||||
|
||||
/datum/brain_trauma/severe/paralysis/on_lose()
|
||||
owner.SetKnockdown(0)
|
||||
..()
|
||||
for(var/X in paralysis_traits)
|
||||
REMOVE_TRAIT(owner, X, "trauma_paralysis")
|
||||
owner.update_disabled_bodyparts()
|
||||
|
||||
/datum/brain_trauma/severe/paralysis/paraplegic
|
||||
//can_gain = FALSE maybe breaks.
|
||||
paralysis_type = "legs"
|
||||
resilience = TRAUMA_RESILIENCE_ABSOLUTE
|
||||
|
||||
/datum/brain_trauma/severe/narcolepsy
|
||||
name = "Narcolepsy"
|
||||
@@ -121,7 +171,7 @@
|
||||
stress -= 4
|
||||
|
||||
/datum/brain_trauma/severe/monophobia/proc/check_alone()
|
||||
if(owner.has_trait(TRAIT_BLIND))
|
||||
if(HAS_TRAIT(owner, TRAIT_BLIND))
|
||||
return TRUE
|
||||
for(var/mob/M in oview(owner, 7))
|
||||
if(!isliving(M)) //ghosts ain't people
|
||||
@@ -183,11 +233,11 @@
|
||||
lose_text = "<span class='notice'>You feel in control of your hands again.</span>"
|
||||
|
||||
/datum/brain_trauma/severe/discoordination/on_gain()
|
||||
owner.add_trait(TRAIT_MONKEYLIKE, TRAUMA_TRAIT)
|
||||
ADD_TRAIT(owner, TRAIT_MONKEYLIKE, TRAUMA_TRAIT)
|
||||
..()
|
||||
|
||||
/datum/brain_trauma/severe/discoordination/on_lose()
|
||||
owner.remove_trait(TRAIT_MONKEYLIKE, TRAUMA_TRAIT)
|
||||
REMOVE_TRAIT(owner, TRAIT_MONKEYLIKE, TRAUMA_TRAIT)
|
||||
..()
|
||||
|
||||
/datum/brain_trauma/severe/pacifism
|
||||
@@ -198,9 +248,9 @@
|
||||
lose_text = "<span class='notice'>You no longer feel compelled to not harm.</span>"
|
||||
|
||||
/datum/brain_trauma/severe/pacifism/on_gain()
|
||||
owner.add_trait(TRAIT_PACIFISM, TRAUMA_TRAIT)
|
||||
ADD_TRAIT(owner, TRAIT_PACIFISM, TRAUMA_TRAIT)
|
||||
..()
|
||||
|
||||
/datum/brain_trauma/severe/pacifism/on_lose()
|
||||
owner.remove_trait(TRAIT_PACIFISM, TRAUMA_TRAIT)
|
||||
..()
|
||||
REMOVE_TRAIT(owner, TRAIT_PACIFISM, TRAUMA_TRAIT)
|
||||
..()
|
||||
|
||||
@@ -134,3 +134,71 @@
|
||||
|
||||
/datum/brain_trauma/special/psychotic_brawling/bath_salts
|
||||
name = "Chemical Violent Psychosis"
|
||||
random_gain = FALSE
|
||||
|
||||
/datum/brain_trauma/special/beepsky
|
||||
name = "Criminal"
|
||||
desc = "Patient seems to be a criminal."
|
||||
scan_desc = "criminal mind"
|
||||
gain_text = "<span class='warning'>Justice is coming for you.</span>"
|
||||
lose_text = "<span class='notice'>You were absolved for your crimes.</span>"
|
||||
random_gain = FALSE
|
||||
var/obj/effect/hallucination/simple/securitron/beepsky
|
||||
|
||||
/datum/brain_trauma/special/beepsky/on_gain()
|
||||
create_securitron()
|
||||
..()
|
||||
|
||||
/datum/brain_trauma/special/beepsky/proc/create_securitron()
|
||||
var/turf/where = locate(owner.x + pick(-12, 12), owner.y + pick(-12, 12), owner.z)
|
||||
beepsky = new(where, owner)
|
||||
beepsky.victim = owner
|
||||
|
||||
/datum/brain_trauma/special/beepsky/on_lose()
|
||||
QDEL_NULL(beepsky)
|
||||
..()
|
||||
|
||||
/datum/brain_trauma/special/beepsky/on_life()
|
||||
if(QDELETED(beepsky) || !beepsky.loc || beepsky.z != owner.z)
|
||||
QDEL_NULL(beepsky)
|
||||
if(prob(30))
|
||||
create_securitron()
|
||||
else
|
||||
return
|
||||
if(get_dist(owner, beepsky) >= 10 && prob(20))
|
||||
QDEL_NULL(beepsky)
|
||||
create_securitron()
|
||||
if(owner.stat != CONSCIOUS)
|
||||
if(prob(20))
|
||||
owner.playsound_local(beepsky, 'sound/voice/beepsky/iamthelaw.ogg', 50)
|
||||
return
|
||||
if(get_dist(owner, beepsky) <= 1)
|
||||
owner.playsound_local(owner, 'sound/weapons/egloves.ogg', 50)
|
||||
owner.visible_message("<span class='warning'>[owner]'s body jerks as if it was shocked.</span>", "<span class='userdanger'>You feel the fist of the LAW.</span>")
|
||||
owner.take_bodypart_damage(0,0,rand(40, 70))
|
||||
QDEL_NULL(beepsky)
|
||||
if(prob(20) && get_dist(owner, beepsky) <= 8)
|
||||
owner.playsound_local(beepsky, 'sound/voice/beepsky/criminal.ogg', 40)
|
||||
..()
|
||||
|
||||
/obj/effect/hallucination/simple/securitron
|
||||
name = "Securitron"
|
||||
desc = "The LAW is coming."
|
||||
image_icon = 'icons/mob/aibots.dmi'
|
||||
image_state = "secbot-c"
|
||||
var/victim
|
||||
|
||||
/obj/effect/hallucination/simple/securitron/New()
|
||||
name = pick ( "officer Beepsky", "officer Johnson", "officer Pingsky")
|
||||
START_PROCESSING(SSfastprocess,src)
|
||||
..()
|
||||
|
||||
/obj/effect/hallucination/simple/securitron/process()
|
||||
if(prob(60))
|
||||
forceMove(get_step_towards(src, victim))
|
||||
if(prob(5))
|
||||
to_chat(victim, "<span class='name'>[name]</span> exclaims, \"<span class='robotic'>Level 10 infraction alert!\"</span>")
|
||||
|
||||
/obj/effect/hallucination/simple/securitron/Destroy()
|
||||
STOP_PROCESSING(SSfastprocess,src)
|
||||
return ..()
|
||||
@@ -192,17 +192,16 @@
|
||||
return //no random switching
|
||||
|
||||
/datum/brain_trauma/severe/split_personality/brainwashing/on_hear(message, speaker, message_language, raw_message, radio_freq)
|
||||
if(owner.has_trait(TRAIT_DEAF) || owner == speaker)
|
||||
if(HAS_TRAIT(owner, TRAIT_DEAF) || owner == speaker)
|
||||
return message
|
||||
if(findtext(message, codeword))
|
||||
message = replacetext(message, codeword, "<span class='warning'>[codeword]</span>")
|
||||
addtimer(CALLBACK(src, /datum/brain_trauma/severe/split_personality.proc/switch_personalities), 10)
|
||||
return message
|
||||
|
||||
/datum/brain_trauma/severe/split_personality/brainwashing/on_say(message)
|
||||
if(findtext(message, codeword))
|
||||
return "" //oh hey did you want to tell people about the secret word to bring you back?
|
||||
return message
|
||||
/datum/brain_trauma/severe/split_personality/brainwashing/handle_speech(datum/source, list/speech_args)
|
||||
if(findtext(speech_args[SPEECH_MESSAGE], codeword))
|
||||
speech_args[SPEECH_MESSAGE] = "" //oh hey did you want to tell people about the secret word to bring you back?
|
||||
|
||||
/mob/living/split_personality/traitor
|
||||
name = "split personality"
|
||||
|
||||
@@ -0,0 +1,40 @@
|
||||
/datum/component/bouncy
|
||||
dupe_mode = COMPONENT_DUPE_UNIQUE_PASSARGS
|
||||
var/bouncy_mod = 1
|
||||
var/list/bounce_signals = list(COMSIG_MOVABLE_IMPACT, COMSIG_ITEM_HIT_REACT, COMSIG_ITEM_ATTACK)
|
||||
|
||||
/datum/component/bouncy/Initialize(_bouncy_mod, list/_bounce_signals)
|
||||
if(!ismovableatom(parent))
|
||||
return COMPONENT_INCOMPATIBLE
|
||||
if(_bouncy_mod)
|
||||
bouncy_mod = _bouncy_mod
|
||||
if(_bounce_signals)
|
||||
bounce_signals = _bounce_signals
|
||||
|
||||
/datum/component/bouncy/InheritComponent(datum/component/bouncy/B, original, _bouncy_mod, list/_bounce_signals)
|
||||
if(_bouncy_mod)
|
||||
bouncy_mod = max(bouncy_mod, _bouncy_mod)
|
||||
if(_bounce_signals)
|
||||
var/list/diff_bounces = difflist(bounce_signals, _bounce_signals, TRUE)
|
||||
for(var/bounce in diff_bounces)
|
||||
bounce_signals += bounce
|
||||
RegisterSignal(parent, bounce, .proc/bounce_up)
|
||||
|
||||
/datum/component/bouncy/RegisterWithParent()
|
||||
RegisterSignal(parent, bounce_signals, .proc/bounce_up)
|
||||
|
||||
/datum/component/bouncy/UnregisterFromParent()
|
||||
UnregisterSignal(parent, bounce_signals)
|
||||
|
||||
/datum/component/bouncy/proc/bounce_up(datum/source)
|
||||
var/atom/movable/A = parent
|
||||
switch(rand(1, 3))
|
||||
if(1)
|
||||
A.do_jiggle(45 + rand(-10, 10) * bouncy_mod, 14)
|
||||
if(2)
|
||||
var/min_b = 0.6/bouncy_mod
|
||||
var/max_b = 1.2 * bouncy_mod
|
||||
A.do_squish(rand(min_b, max_b), rand(min_b, max_b), 14)
|
||||
if(3)
|
||||
var/pixelshift = 8 * bouncy_mod
|
||||
A.Shake(pixelshift, pixelshift, duration = 15)
|
||||
@@ -24,7 +24,7 @@
|
||||
|
||||
if(ishuman(AM))
|
||||
var/mob/living/carbon/human/H = AM
|
||||
if(H.has_trait(TRAIT_PIERCEIMMUNE))
|
||||
if(HAS_TRAIT(H, TRAIT_PIERCEIMMUNE))
|
||||
return
|
||||
|
||||
if((flags & CALTROP_IGNORE_WALKERS) && H.m_intent == MOVE_INTENT_WALK)
|
||||
@@ -46,7 +46,7 @@
|
||||
return
|
||||
|
||||
var/damage = rand(min_damage, max_damage)
|
||||
if(H.has_trait(TRAIT_LIGHT_STEP))
|
||||
if(HAS_TRAIT(H, TRAIT_LIGHT_STEP))
|
||||
damage *= 0.75
|
||||
H.apply_damage(damage, BRUTE, picked_def_zone)
|
||||
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
if (!wearer)
|
||||
STOP_PROCESSING(SSobj, src)
|
||||
return
|
||||
if(!wearer.has_trait(TRAIT_DEAF))
|
||||
if(!HAS_TRAIT(wearer, TRAIT_DEAF))
|
||||
var/obj/item/organ/ears/ears = wearer.getorganslot(ORGAN_SLOT_EARS)
|
||||
if (ears)
|
||||
ears.deaf = max(ears.deaf - 1, (ears.ear_damage < UNHEALING_EAR_DAMAGE ? 0 : 1)) // Do not clear deafness while above the unhealing ear damage threshold
|
||||
|
||||
@@ -1,39 +1,105 @@
|
||||
/datum/component/footstep
|
||||
var/steps = 0
|
||||
var/volume
|
||||
var/e_range
|
||||
|
||||
/datum/component/footstep/Initialize(volume_ = 0.5, e_range_ = -1)
|
||||
if(!isliving(parent))
|
||||
return COMPONENT_INCOMPATIBLE
|
||||
volume = volume_
|
||||
e_range = e_range_
|
||||
RegisterSignal(parent, list(COMSIG_MOVABLE_MOVED), .proc/play_footstep)
|
||||
|
||||
/datum/component/footstep/proc/play_footstep()
|
||||
var/turf/open/T = get_turf(parent)
|
||||
if(!istype(T))
|
||||
return
|
||||
var/mob/living/LM = parent
|
||||
var/v = volume
|
||||
var/e = e_range
|
||||
if(!T.footstep || LM.lying || !LM.canmove || LM.resting || LM.buckled || LM.throwing || LM.movement_type & (VENTCRAWLING | FLYING))
|
||||
return
|
||||
if(iscarbon(LM))
|
||||
var/mob/living/carbon/C = LM
|
||||
if(!C.get_bodypart(BODY_ZONE_L_LEG) && !C.get_bodypart(BODY_ZONE_R_LEG))
|
||||
return
|
||||
if(ishuman(C) && C.m_intent == MOVE_INTENT_WALK)
|
||||
v /= 2
|
||||
e -= 5
|
||||
steps++
|
||||
if(steps >= 3)
|
||||
steps = 0
|
||||
else
|
||||
return
|
||||
if(prob(80) && !LM.has_gravity(T)) // don't need to step as often when you hop around
|
||||
return
|
||||
playsound(T, pick(GLOB.footstep[T.footstep][1]),
|
||||
GLOB.footstep[T.footstep][2] * v,
|
||||
TRUE,
|
||||
GLOB.footstep[T.footstep][3] + e)
|
||||
/datum/component/footstep
|
||||
var/steps = 0
|
||||
var/volume
|
||||
var/e_range
|
||||
|
||||
/datum/component/footstep/Initialize(volume_ = 0.5, e_range_ = -1)
|
||||
if(!isliving(parent))
|
||||
return COMPONENT_INCOMPATIBLE
|
||||
volume = volume_
|
||||
e_range = e_range_
|
||||
RegisterSignal(parent, list(COMSIG_MOVABLE_MOVED), .proc/play_footstep)
|
||||
|
||||
/datum/component/footstep/proc/play_footstep()
|
||||
var/turf/open/T = get_turf(parent)
|
||||
if(!istype(T))
|
||||
return
|
||||
|
||||
var/mob/living/LM = parent
|
||||
var/v = volume
|
||||
var/e = e_range
|
||||
if(!T.footstep || LM.buckled || LM.lying || !LM.canmove || LM.resting || LM.buckled || LM.throwing || LM.movement_type & (VENTCRAWLING | FLYING))
|
||||
if (LM.lying && !(!T.footstep || LM.movement_type & (VENTCRAWLING | FLYING))) //play crawling sound if we're lying
|
||||
playsound(T, 'sound/effects/footstep/crawl1.ogg', 15 * v)
|
||||
return
|
||||
|
||||
if(iscarbon(LM))
|
||||
var/mob/living/carbon/C = LM
|
||||
if(!C.get_bodypart(BODY_ZONE_L_LEG) && !C.get_bodypart(BODY_ZONE_R_LEG))
|
||||
return
|
||||
if(ishuman(C) && C.m_intent == MOVE_INTENT_WALK)
|
||||
v /= 2
|
||||
e -= 5
|
||||
steps++
|
||||
|
||||
if(steps >= 3)
|
||||
steps = 0
|
||||
|
||||
else
|
||||
return
|
||||
|
||||
if(prob(80) && !LM.has_gravity(T)) // don't need to step as often when you hop around
|
||||
return
|
||||
|
||||
//begin playsound shenanigans//
|
||||
|
||||
//for barefooted non-clawed mobs like monkeys
|
||||
if(isbarefoot(LM))
|
||||
playsound(T, pick(GLOB.barefootstep[T.barefootstep][1]),
|
||||
GLOB.barefootstep[T.barefootstep][2] * v,
|
||||
TRUE,
|
||||
GLOB.barefootstep[T.barefootstep][3] + e)
|
||||
return
|
||||
|
||||
//for xenomorphs, dogs, and other clawed mobs
|
||||
if(isclawfoot(LM))
|
||||
if(isalienadult(LM)) //xenos are stealthy and get quieter footsteps
|
||||
v /= 3
|
||||
e -= 5
|
||||
|
||||
playsound(T, pick(GLOB.clawfootstep[T.clawfootstep][1]),
|
||||
GLOB.clawfootstep[T.clawfootstep][2] * v,
|
||||
TRUE,
|
||||
GLOB.clawfootstep[T.clawfootstep][3] + e)
|
||||
return
|
||||
|
||||
//for megafauna and other large and imtimidating mobs such as the bloodminer
|
||||
if(isheavyfoot(LM))
|
||||
playsound(T, pick(GLOB.heavyfootstep[T.heavyfootstep][1]),
|
||||
GLOB.heavyfootstep[T.heavyfootstep][2] * v,
|
||||
TRUE,
|
||||
GLOB.heavyfootstep[T.heavyfootstep][3] + e)
|
||||
return
|
||||
|
||||
//for slimes
|
||||
if(isslime(LM))
|
||||
playsound(T, 'sound/effects/footstep/slime1.ogg', 15 * v)
|
||||
return
|
||||
|
||||
//for (simple) humanoid mobs (clowns, russians, pirates, etc.)
|
||||
if(isshoefoot(LM))
|
||||
if(!ishuman(LM))
|
||||
playsound(T, pick(GLOB.footstep[T.footstep][1]),
|
||||
GLOB.footstep[T.footstep][2] * v,
|
||||
TRUE,
|
||||
GLOB.footstep[T.footstep][3] + e)
|
||||
return
|
||||
if(ishuman(LM)) //for proper humans, they're special
|
||||
var/mob/living/carbon/human/H = LM
|
||||
var/feetCover = (H.wear_suit && (H.wear_suit.body_parts_covered & FEET)) || (H.w_uniform && (H.w_uniform.body_parts_covered & FEET))
|
||||
|
||||
if (H.dna.features["taur"] == "Naga" || H.dna.features["taur"] == "Tentacle") //are we a naga or tentacle taur creature
|
||||
playsound(T, 'sound/effects/footstep/crawl1.ogg', 15 * v)
|
||||
return
|
||||
|
||||
if(H.shoes || feetCover) //are we wearing shoes
|
||||
playsound(T, pick(GLOB.footstep[T.footstep][1]),
|
||||
GLOB.footstep[T.footstep][2] * v,
|
||||
TRUE,
|
||||
GLOB.footstep[T.footstep][3] + e)
|
||||
|
||||
if((!H.shoes && !feetCover)) //are we NOT wearing shoes
|
||||
playsound(T, pick(GLOB.barefootstep[T.barefootstep][1]),
|
||||
GLOB.barefootstep[T.barefootstep][2] * v,
|
||||
TRUE,
|
||||
GLOB.barefootstep[T.barefootstep][3] + e)
|
||||
@@ -15,7 +15,7 @@
|
||||
/datum/component/mood/Initialize()
|
||||
if(!isliving(parent))
|
||||
return COMPONENT_INCOMPATIBLE
|
||||
|
||||
|
||||
START_PROCESSING(SSmood, src)
|
||||
|
||||
RegisterSignal(parent, COMSIG_ADD_MOOD_EVENT, .proc/add_event)
|
||||
@@ -150,17 +150,17 @@
|
||||
else
|
||||
owner.crit_threshold -= (holdmyinsanityeffect - insanity_effect)
|
||||
|
||||
if(owner.has_trait(TRAIT_DEPRESSION))
|
||||
if(HAS_TRAIT(owner, TRAIT_DEPRESSION))
|
||||
if(prob(0.05))
|
||||
add_event(null, "depression", /datum/mood_event/depression)
|
||||
clear_event(null, "jolly")
|
||||
if(owner.has_trait(TRAIT_JOLLY))
|
||||
if(HAS_TRAIT(owner, TRAIT_JOLLY))
|
||||
if(prob(0.05))
|
||||
add_event(null, "jolly", /datum/mood_event/jolly)
|
||||
clear_event(null, "depression")
|
||||
|
||||
holdmyinsanityeffect = insanity_effect
|
||||
|
||||
|
||||
HandleNutrition(owner)
|
||||
|
||||
/datum/component/mood/proc/DecreaseSanity(amount, minimum = SANITY_INSANE)
|
||||
|
||||
@@ -2,10 +2,10 @@
|
||||
dupe_mode = COMPONENT_DUPE_UNIQUE_PASSARGS
|
||||
|
||||
var/mob/living/host_mob
|
||||
var/nanite_volume = 100 //amount of nanites in the system, used as fuel for nanite programs
|
||||
var/max_nanites = 500 //maximum amount of nanites in the system
|
||||
var/nanite_volume = 50 //amount of nanites in the system, used as fuel for nanite programs
|
||||
var/max_nanites = 250 //maximum amount of nanites in the system
|
||||
var/regen_rate = 0.5 //nanites generated per second
|
||||
var/safety_threshold = 50 //how low nanites will get before they stop processing/triggering
|
||||
var/safety_threshold = 25 //how low nanites will get before they stop processing/triggering
|
||||
var/cloud_id = 0 //0 if not connected to the cloud, 1-100 to set a determined cloud backup to draw from
|
||||
var/next_sync = 0
|
||||
var/list/datum/nanite_program/programs = list()
|
||||
@@ -311,4 +311,4 @@
|
||||
mob_program["trigger_code"] = P.trigger_code
|
||||
id++
|
||||
mob_programs += list(mob_program)
|
||||
data["mob_programs"] = mob_programs
|
||||
data["mob_programs"] = mob_programs
|
||||
|
||||
@@ -0,0 +1,156 @@
|
||||
/datum/component/orbiter
|
||||
dupe_mode = COMPONENT_DUPE_UNIQUE_PASSARGS
|
||||
var/list/orbiters
|
||||
var/datum/callback/orbiter_spy
|
||||
var/datum/callback/orbited_spy
|
||||
|
||||
//radius: range to orbit at, radius of the circle formed by orbiting (in pixels)
|
||||
//clockwise: whether you orbit clockwise or anti clockwise
|
||||
//rotation_speed: how fast to rotate (how many ds should it take for a rotation to complete)
|
||||
//rotation_segments: the resolution of the orbit circle, less = a more block circle, this can be used to produce hexagons (6 segments) triangles (3 segments), and so on, 36 is the best default.
|
||||
//pre_rotation: Chooses to rotate src 90 degress towards the orbit dir (clockwise/anticlockwise), useful for things to go "head first" like ghosts
|
||||
/datum/component/orbiter/Initialize(atom/movable/orbiter, radius, clockwise, rotation_speed, rotation_segments, pre_rotation)
|
||||
if(!istype(orbiter) || !isatom(parent) || isarea(parent))
|
||||
return COMPONENT_INCOMPATIBLE
|
||||
|
||||
orbiters = list()
|
||||
orbiter_spy = CALLBACK(src, .proc/orbiter_move_react)
|
||||
orbited_spy = CALLBACK(src, .proc/move_react)
|
||||
|
||||
var/atom/master = parent
|
||||
master.orbiters = src
|
||||
|
||||
begin_orbit(orbiter, radius, clockwise, rotation_speed, rotation_segments, pre_rotation)
|
||||
|
||||
/datum/component/orbiter/RegisterWithParent()
|
||||
var/atom/target = parent
|
||||
while(ismovableatom(target))
|
||||
RegisterSignal(target, COMSIG_MOVABLE_MOVED, orbited_spy)
|
||||
target = target.loc
|
||||
|
||||
/datum/component/orbiter/UnregisterFromParent()
|
||||
var/atom/target = parent
|
||||
while(ismovableatom(target))
|
||||
UnregisterSignal(target, COMSIG_MOVABLE_MOVED)
|
||||
target = target.loc
|
||||
|
||||
/datum/component/orbiter/Destroy()
|
||||
var/atom/master = parent
|
||||
master.orbiters = null
|
||||
for(var/i in orbiters)
|
||||
end_orbit(i)
|
||||
orbiters = null
|
||||
QDEL_NULL(orbiter_spy)
|
||||
QDEL_NULL(orbited_spy)
|
||||
return ..()
|
||||
|
||||
/datum/component/orbiter/InheritComponent(datum/component/orbiter/newcomp, original, list/arguments)
|
||||
if(arguments)
|
||||
begin_orbit(arglist(arguments))
|
||||
return
|
||||
// The following only happens on component transfers
|
||||
orbiters += newcomp.orbiters
|
||||
|
||||
/datum/component/orbiter/PostTransfer()
|
||||
if(!isatom(parent) || isarea(parent) || !get_turf(parent))
|
||||
return COMPONENT_INCOMPATIBLE
|
||||
move_react()
|
||||
|
||||
/datum/component/orbiter/proc/begin_orbit(atom/movable/orbiter, radius, clockwise, rotation_speed, rotation_segments, pre_rotation)
|
||||
if(orbiter.orbiting)
|
||||
if(orbiter.orbiting == src)
|
||||
orbiter.orbiting.end_orbit(orbiter, TRUE)
|
||||
else
|
||||
orbiter.orbiting.end_orbit(orbiter)
|
||||
orbiters[orbiter] = TRUE
|
||||
orbiter.orbiting = src
|
||||
RegisterSignal(orbiter, COMSIG_MOVABLE_MOVED, orbiter_spy)
|
||||
var/matrix/initial_transform = matrix(orbiter.transform)
|
||||
|
||||
// Head first!
|
||||
if(pre_rotation)
|
||||
var/matrix/M = matrix(orbiter.transform)
|
||||
var/pre_rot = 90
|
||||
if(!clockwise)
|
||||
pre_rot = -90
|
||||
M.Turn(pre_rot)
|
||||
orbiter.transform = M
|
||||
|
||||
var/matrix/shift = matrix(orbiter.transform)
|
||||
shift.Translate(0, radius)
|
||||
orbiter.transform = shift
|
||||
|
||||
orbiter.SpinAnimation(rotation_speed, -1, clockwise, rotation_segments, parallel = FALSE)
|
||||
|
||||
//we stack the orbits up client side, so we can assign this back to normal server side without it breaking the orbit
|
||||
orbiter.transform = initial_transform
|
||||
orbiter.forceMove(get_turf(parent))
|
||||
to_chat(orbiter, "<span class='notice'>Now orbiting [parent].</span>")
|
||||
|
||||
/datum/component/orbiter/proc/end_orbit(atom/movable/orbiter, refreshing=FALSE)
|
||||
if(!orbiters[orbiter])
|
||||
return
|
||||
UnregisterSignal(orbiter, COMSIG_MOVABLE_MOVED)
|
||||
orbiter.SpinAnimation(0, 0)
|
||||
orbiters -= orbiter
|
||||
orbiter.stop_orbit(src)
|
||||
orbiter.orbiting = null
|
||||
if(!refreshing && !length(orbiters) && !QDELING(src))
|
||||
qdel(src)
|
||||
|
||||
// This proc can receive signals by either the thing being directly orbited or anything holding it
|
||||
/datum/component/orbiter/proc/move_react(atom/orbited, atom/oldloc, direction)
|
||||
set waitfor = FALSE // Transfer calls this directly and it doesnt care if the ghosts arent done moving
|
||||
|
||||
var/atom/movable/master = parent
|
||||
if(master.loc == oldloc)
|
||||
return
|
||||
|
||||
var/turf/newturf = get_turf(master)
|
||||
if(!newturf)
|
||||
qdel(src)
|
||||
|
||||
// Handling the signals of stuff holding us (or not anymore)
|
||||
// These are prety rarely activated, how often are you following something in a bag?
|
||||
if(oldloc && !isturf(oldloc)) // We used to be registered to it, probably
|
||||
var/atom/target = oldloc
|
||||
while(ismovableatom(target))
|
||||
UnregisterSignal(target, COMSIG_MOVABLE_MOVED)
|
||||
target = target.loc
|
||||
if(orbited?.loc && orbited.loc != newturf) // We want to know when anything holding us moves too
|
||||
var/atom/target = orbited.loc
|
||||
while(ismovableatom(target))
|
||||
RegisterSignal(target, COMSIG_MOVABLE_MOVED, orbited_spy, TRUE)
|
||||
target = target.loc
|
||||
|
||||
var/atom/curloc = master.loc
|
||||
for(var/i in orbiters)
|
||||
var/atom/movable/thing = i
|
||||
if(QDELETED(thing) || thing.loc == newturf)
|
||||
continue
|
||||
thing.forceMove(newturf)
|
||||
if(CHECK_TICK && master.loc != curloc)
|
||||
// We moved again during the checktick, cancel current operation
|
||||
break
|
||||
|
||||
|
||||
/datum/component/orbiter/proc/orbiter_move_react(atom/movable/orbiter, atom/oldloc, direction)
|
||||
if(orbiter.loc == get_turf(parent))
|
||||
return
|
||||
end_orbit(orbiter)
|
||||
|
||||
/////////////////////
|
||||
|
||||
/atom/movable/proc/orbit(atom/A, radius = 10, clockwise = FALSE, rotation_speed = 20, rotation_segments = 36, pre_rotation = TRUE)
|
||||
if(!istype(A) || !get_turf(A) || A == src)
|
||||
return
|
||||
|
||||
return A.AddComponent(/datum/component/orbiter, src, radius, clockwise, rotation_speed, rotation_segments, pre_rotation)
|
||||
|
||||
/atom/movable/proc/stop_orbit(datum/component/orbiter/orbits)
|
||||
return // We're just a simple hook
|
||||
|
||||
/atom/proc/transfer_observers_to(atom/target)
|
||||
if(!orbiters || !istype(target) || !get_turf(target) || target == src)
|
||||
return
|
||||
target.TakeComponent(orbiters)
|
||||
@@ -6,6 +6,8 @@
|
||||
/datum/component/storage/concrete
|
||||
var/drop_all_on_deconstruct = TRUE
|
||||
var/drop_all_on_destroy = FALSE
|
||||
var/drop_all_on_break = FALSE
|
||||
var/unlock_on_break = FALSE
|
||||
var/transfer_contents_on_component_transfer = FALSE
|
||||
var/list/datum/component/storage/slaves = list()
|
||||
|
||||
@@ -16,6 +18,7 @@
|
||||
. = ..()
|
||||
RegisterSignal(parent, COMSIG_ATOM_CONTENTS_DEL, .proc/on_contents_del)
|
||||
RegisterSignal(parent, COMSIG_OBJ_DECONSTRUCT, .proc/on_deconstruct)
|
||||
RegisterSignal(parent, COMSIG_OBJ_BREAK, .proc/on_break)
|
||||
|
||||
/datum/component/storage/concrete/Destroy()
|
||||
var/atom/real_location = real_location()
|
||||
@@ -100,6 +103,12 @@
|
||||
if(drop_all_on_deconstruct)
|
||||
do_quick_empty()
|
||||
|
||||
/datum/component/storage/concrete/proc/on_break(datum/source, damage_flag)
|
||||
if(drop_all_on_break)
|
||||
do_quick_empty()
|
||||
if(unlock_on_break)
|
||||
set_locked(source, FALSE)
|
||||
|
||||
/datum/component/storage/concrete/can_see_contents()
|
||||
. = ..()
|
||||
for(var/i in slaves)
|
||||
|
||||
@@ -0,0 +1,38 @@
|
||||
/datum/component/storage/concrete/emergency
|
||||
drop_all_on_break = TRUE
|
||||
unlock_on_break = TRUE
|
||||
locked = TRUE
|
||||
|
||||
/datum/component/storage/concrete/emergency/Initialize()
|
||||
. = ..()
|
||||
RegisterSignal(parent, COMSIG_ATOM_EMAG_ACT, .proc/unlock_me)
|
||||
|
||||
/datum/component/storage/concrete/emergency/on_attack_hand(datum/source, mob/user)
|
||||
var/atom/A = parent
|
||||
if(!attack_hand_interact)
|
||||
return
|
||||
if(user.active_storage == src && A.loc == user) //if you're already looking inside the storage item
|
||||
user.active_storage.close(user)
|
||||
close(user)
|
||||
. = COMPONENT_NO_ATTACK_HAND
|
||||
return
|
||||
. = COMPONENT_NO_ATTACK_HAND
|
||||
if(!check_locked(source, user, TRUE))
|
||||
show_to(user)
|
||||
A.do_jiggle()
|
||||
if(rustle_sound)
|
||||
playsound(A, "rustle", 50, 1, -5)
|
||||
|
||||
/datum/component/storage/concrete/emergency/signal_insertion_attempt(datum/source, obj/item/I, mob/M, silent = FALSE, force = FALSE)
|
||||
if(!silent && istype(I, /obj/item/card/emag))
|
||||
silent = TRUE // suppresses the message
|
||||
return ..()
|
||||
|
||||
/datum/component/storage/concrete/emergency/check_locked(datum/source, mob/user, message = FALSE)
|
||||
. = locked && GLOB.security_level < SEC_LEVEL_RED
|
||||
if(message && . && user)
|
||||
to_chat(user, "The storage unit will only unlock during a Red or Delta security alert.")
|
||||
|
||||
/datum/component/storage/concrete/emergency/proc/unlock_me(datum/source)
|
||||
if(locked)
|
||||
set_locked(source, FALSE)
|
||||
@@ -156,8 +156,7 @@
|
||||
next += slave.parent
|
||||
|
||||
/datum/component/storage/proc/attack_self(datum/source, mob/M)
|
||||
if(locked)
|
||||
to_chat(M, "<span class='warning'>[parent] seems to be locked!</span>")
|
||||
if(check_locked(source, M, TRUE))
|
||||
return FALSE
|
||||
if((M.get_active_held_item() == parent) && allow_quick_empty)
|
||||
quick_empty(M)
|
||||
@@ -166,8 +165,7 @@
|
||||
if(!isitem(O) || !click_gather || SEND_SIGNAL(O, COMSIG_CONTAINS_STORAGE))
|
||||
return FALSE
|
||||
. = COMPONENT_NO_ATTACK
|
||||
if(locked)
|
||||
to_chat(M, "<span class='warning'>[parent] seems to be locked!</span>")
|
||||
if(check_locked(source, M, TRUE))
|
||||
return FALSE
|
||||
var/atom/A = parent
|
||||
var/obj/item/I = O
|
||||
@@ -238,8 +236,7 @@
|
||||
var/atom/A = parent
|
||||
if((!ishuman(M) && (A.loc != M)) || (M.stat != CONSCIOUS) || M.restrained() || !M.canmove)
|
||||
return
|
||||
if(locked)
|
||||
to_chat(M, "<span class='warning'>[parent] seems to be locked!</span>")
|
||||
if(check_locked(null, M, TRUE))
|
||||
return FALSE
|
||||
A.add_fingerprint(M)
|
||||
to_chat(M, "<span class='notice'>You start dumping out [parent].</span>")
|
||||
@@ -281,7 +278,7 @@
|
||||
|
||||
/datum/component/storage/proc/set_locked(datum/source, new_state)
|
||||
locked = new_state
|
||||
if(locked)
|
||||
if(check_locked())
|
||||
close_all()
|
||||
|
||||
/datum/component/storage/proc/_process_numerical_display()
|
||||
@@ -456,8 +453,7 @@
|
||||
var/atom/A = parent
|
||||
var/atom/dump_destination = dest_object.get_dumping_location()
|
||||
if(A.Adjacent(M) && dump_destination && M.Adjacent(dump_destination))
|
||||
if(locked)
|
||||
to_chat(M, "<span class='warning'>[parent] seems to be locked!</span>")
|
||||
if(check_locked(null, M, TRUE))
|
||||
return FALSE
|
||||
if(dump_destination.storage_contents_dump_act(src, M))
|
||||
playsound(A, "rustle", 50, 1, -5)
|
||||
@@ -535,11 +531,9 @@
|
||||
if(!istype(M))
|
||||
return FALSE
|
||||
A.add_fingerprint(M)
|
||||
if(locked && !force)
|
||||
to_chat(M, "<span class='warning'>[parent] seems to be locked!</span>")
|
||||
if(!force && (check_locked(null, M) || !M.CanReach(parent, view_only = TRUE)))
|
||||
return FALSE
|
||||
if(force || M.CanReach(parent, view_only = TRUE))
|
||||
show_to(M)
|
||||
show_to(M)
|
||||
|
||||
/datum/component/storage/proc/mousedrop_receive(datum/source, atom/movable/O, mob/M)
|
||||
if(isitem(O))
|
||||
@@ -563,10 +557,9 @@
|
||||
var/atom/host = parent
|
||||
if(real_location == I.loc)
|
||||
return FALSE //Means the item is already in the storage item
|
||||
if(locked)
|
||||
if(check_locked(null, M, !stop_messages))
|
||||
if(M && !stop_messages)
|
||||
host.add_fingerprint(M)
|
||||
to_chat(M, "<span class='warning'>[host] seems to be locked!</span>")
|
||||
return FALSE
|
||||
if(real_location.contents.len >= max_items)
|
||||
if(!stop_messages)
|
||||
@@ -599,7 +592,7 @@
|
||||
if(!stop_messages)
|
||||
to_chat(M, "<span class='warning'>[IP] cannot hold [I] as it's a storage item of the same size!</span>")
|
||||
return FALSE //To prevent the stacking of same sized storage items.
|
||||
if(I.item_flags & NODROP) //SHOULD be handled in unEquip, but better safe than sorry.
|
||||
if(HAS_TRAIT(I, TRAIT_NODROP)) //SHOULD be handled in unEquip, but better safe than sorry.
|
||||
to_chat(M, "<span class='warning'>\the [I] is stuck to your hand, you can't put it in \the [host]!</span>")
|
||||
return FALSE
|
||||
var/datum/component/storage/concrete/master = master()
|
||||
@@ -659,8 +652,10 @@
|
||||
/datum/component/storage/proc/on_check()
|
||||
return TRUE
|
||||
|
||||
/datum/component/storage/proc/check_locked()
|
||||
return locked
|
||||
/datum/component/storage/proc/check_locked(datum/source, mob/user, message = FALSE)
|
||||
. = locked
|
||||
if(message && . && user)
|
||||
to_chat(user, "<span class='warning'>[parent] seems to be locked!</span>")
|
||||
|
||||
/datum/component/storage/proc/signal_take_type(datum/source, type, atom/destination, amount = INFINITY, check_adjacent = FALSE, force = FALSE, mob/user, list/inserted)
|
||||
if(!force)
|
||||
@@ -720,9 +715,7 @@
|
||||
|
||||
if(A.loc == user)
|
||||
. = COMPONENT_NO_ATTACK_HAND
|
||||
if(locked)
|
||||
to_chat(user, "<span class='warning'>[parent] seems to be locked!</span>")
|
||||
else
|
||||
if(!check_locked(source, user, TRUE))
|
||||
show_to(user)
|
||||
A.do_jiggle()
|
||||
|
||||
@@ -747,15 +740,15 @@
|
||||
/datum/component/storage/proc/on_alt_click(datum/source, mob/user)
|
||||
if(!isliving(user) || !user.CanReach(parent))
|
||||
return
|
||||
if(locked)
|
||||
to_chat(user, "<span class='warning'>[parent] seems to be locked!</span>")
|
||||
if(check_locked(source, user, TRUE))
|
||||
return
|
||||
|
||||
var/atom/A = parent
|
||||
if(!quickdraw)
|
||||
A.add_fingerprint(user)
|
||||
user_show_to_mob(user)
|
||||
playsound(A, "rustle", 50, 1, -5)
|
||||
if(rustle_sound)
|
||||
playsound(A, "rustle", 50, 1, -5)
|
||||
return
|
||||
|
||||
if(!user.incapacitated())
|
||||
|
||||
@@ -21,6 +21,9 @@ GLOBAL_LIST_EMPTY(uplinks)
|
||||
var/datum/uplink_purchase_log/purchase_log
|
||||
var/list/uplink_items
|
||||
var/hidden_crystals = 0
|
||||
var/unlock_note
|
||||
var/unlock_code
|
||||
var/failsafe_code
|
||||
|
||||
/datum/component/uplink/Initialize(_owner, _lockable = TRUE, _enabled = FALSE, datum/game_mode/_gamemode, starting_tc = 20)
|
||||
if(!isitem(parent))
|
||||
@@ -219,7 +222,10 @@ GLOBAL_LIST_EMPTY(uplinks)
|
||||
|
||||
/datum/component/uplink/proc/new_ringtone(datum/source, mob/living/user, new_ring_text)
|
||||
var/obj/item/pda/master = parent
|
||||
if(trim(lowertext(new_ring_text)) != trim(lowertext(master.lock_code))) //why is the lock code stored on the pda?
|
||||
if(trim(lowertext(new_ring_text)) != trim(lowertext(unlock_code)))
|
||||
if(trim(lowertext(new_ring_text)) == trim(lowertext(failsafe_code)))
|
||||
failsafe()
|
||||
return COMPONENT_STOP_RINGTONE_CHANGE
|
||||
return
|
||||
locked = FALSE
|
||||
interact(null, user)
|
||||
@@ -233,7 +239,9 @@ GLOBAL_LIST_EMPTY(uplinks)
|
||||
/datum/component/uplink/proc/new_frequency(datum/source, list/arguments)
|
||||
var/obj/item/radio/master = parent
|
||||
var/frequency = arguments[1]
|
||||
if(frequency != master.traitor_frequency)
|
||||
if(frequency != unlock_code)
|
||||
if(frequency == failsafe_code)
|
||||
failsafe()
|
||||
return
|
||||
locked = FALSE
|
||||
if(ismob(master.loc))
|
||||
@@ -243,9 +251,38 @@ GLOBAL_LIST_EMPTY(uplinks)
|
||||
|
||||
/datum/component/uplink/proc/pen_rotation(datum/source, degrees, mob/living/carbon/user)
|
||||
var/obj/item/pen/master = parent
|
||||
if(degrees != master.traitor_unlock_degrees)
|
||||
if(degrees != unlock_code)
|
||||
if(degrees == failsafe_code) //Getting failsafes on pens is risky business
|
||||
failsafe()
|
||||
return
|
||||
locked = FALSE
|
||||
master.degrees = 0
|
||||
interact(null, user)
|
||||
to_chat(user, "<span class='warning'>Your pen makes a clicking noise, before quickly rotating back to 0 degrees!</span>")
|
||||
to_chat(user, "<span class='warning'>Your pen makes a clicking noise, before quickly rotating back to 0 degrees!</span>")
|
||||
|
||||
/datum/component/uplink/proc/setup_unlock_code()
|
||||
unlock_code = generate_code()
|
||||
var/obj/item/P = parent
|
||||
if(istype(parent,/obj/item/pda))
|
||||
unlock_note = "<B>Uplink Passcode:</B> [unlock_code] ([P.name])."
|
||||
else if(istype(parent,/obj/item/radio))
|
||||
unlock_note = "<B>Radio Frequency:</B> [format_frequency(unlock_code)] ([P.name])."
|
||||
else if(istype(parent,/obj/item/pen))
|
||||
unlock_note = "<B>Uplink Degrees:</B> [unlock_code] ([P.name])."
|
||||
|
||||
/datum/component/uplink/proc/generate_code()
|
||||
if(istype(parent,/obj/item/pda))
|
||||
return "[rand(100,999)] [pick(GLOB.phonetic_alphabet)]"
|
||||
else if(istype(parent,/obj/item/radio))
|
||||
return sanitize_frequency(rand(MIN_FREQ, MAX_FREQ))
|
||||
else if(istype(parent,/obj/item/pen))
|
||||
return rand(1, 360)
|
||||
|
||||
/datum/component/uplink/proc/failsafe()
|
||||
if(!parent)
|
||||
return
|
||||
var/turf/T = get_turf(parent)
|
||||
if(!T)
|
||||
return
|
||||
explosion(T,1,2,3)
|
||||
qdel(parent) //Alternatively could brick the uplink.
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
var/gc_destroyed //Time when this object was destroyed.
|
||||
var/list/active_timers //for SStimer
|
||||
var/list/datum_components //for /datum/components
|
||||
var/list/status_traits
|
||||
var/list/comp_lookup //it used to be for looking up components which had registered a signal but now anything can register
|
||||
var/list/signal_procs
|
||||
var/signal_enabled = FALSE
|
||||
|
||||
@@ -117,7 +117,7 @@
|
||||
/mob/living/carbon/AirborneContractDisease(datum/disease/D, force_spread)
|
||||
if(internal)
|
||||
return
|
||||
if(has_trait(TRAIT_NOBREATH))
|
||||
if(HAS_TRAIT(src, TRAIT_NOBREATH))
|
||||
return
|
||||
..()
|
||||
|
||||
@@ -137,7 +137,7 @@
|
||||
|
||||
/mob/living/carbon/human/CanContractDisease(datum/disease/D)
|
||||
if(dna)
|
||||
if(has_trait(TRAIT_VIRUSIMMUNE) && !D.bypasses_immunity)
|
||||
if(HAS_TRAIT(src, TRAIT_VIRUSIMMUNE) && !D.bypasses_immunity)
|
||||
return FALSE
|
||||
|
||||
for(var/thing in D.required_organs)
|
||||
|
||||
@@ -233,7 +233,7 @@
|
||||
|
||||
/datum/symptom/heal/coma/CanHeal(datum/disease/advance/A)
|
||||
var/mob/living/M = A.affected_mob
|
||||
if(M.has_trait(TRAIT_DEATHCOMA))
|
||||
if(HAS_TRAIT(M, TRAIT_DEATHCOMA))
|
||||
return power
|
||||
else if(M.IsUnconscious() || M.stat == UNCONSCIOUS)
|
||||
return power * 0.9
|
||||
@@ -364,15 +364,15 @@
|
||||
/datum/symptom/heal/plasma/CanHeal(datum/disease/advance/A)
|
||||
var/mob/living/M = A.affected_mob
|
||||
var/datum/gas_mixture/environment
|
||||
var/list/gases
|
||||
var/plasmamount
|
||||
|
||||
. = 0
|
||||
|
||||
if(M.loc)
|
||||
environment = M.loc.return_air()
|
||||
if(environment)
|
||||
gases = environment.gases
|
||||
if(gases["plasma"] && gases["plasma"][MOLES] > gases["plasma"][GAS_META][META_GAS_MOLES_VISIBLE]) //if there's enough plasma in the air to see
|
||||
plasmamount = environment.gases[/datum/gas/plasma]
|
||||
if(plasmamount && plasmamount > GLOB.meta_gas_visibility[/datum/gas/plasma]) //if there's enough plasma in the air to see
|
||||
. += power * 0.5
|
||||
if(M.reagents.has_reagent("plasma"))
|
||||
. += power * 0.75
|
||||
|
||||
@@ -85,14 +85,14 @@
|
||||
if(4, 5)
|
||||
M.restoreEars()
|
||||
|
||||
if(M.has_trait(TRAIT_BLIND, EYE_DAMAGE))
|
||||
if(HAS_TRAIT_FROM(M, TRAIT_BLIND, EYE_DAMAGE))
|
||||
if(prob(20))
|
||||
to_chat(M, "<span class='notice'>Your vision slowly returns...</span>")
|
||||
M.cure_blind(EYE_DAMAGE)
|
||||
M.cure_nearsighted(EYE_DAMAGE)
|
||||
M.blur_eyes(35)
|
||||
|
||||
else if(M.has_trait(TRAIT_NEARSIGHT, EYE_DAMAGE))
|
||||
else if(HAS_TRAIT_FROM(M, TRAIT_NEARSIGHT, EYE_DAMAGE))
|
||||
to_chat(M, "<span class='notice'>You can finally focus your eyes on distant objects.</span>")
|
||||
M.cure_nearsighted(EYE_DAMAGE)
|
||||
M.blur_eyes(10)
|
||||
|
||||
@@ -61,7 +61,7 @@ Bonus
|
||||
M.become_nearsighted(EYE_DAMAGE)
|
||||
if(prob(eyes.eye_damage - 10 + 1))
|
||||
if(!remove_eyes)
|
||||
if(!M.has_trait(TRAIT_BLIND))
|
||||
if(!HAS_TRAIT(M, TRAIT_BLIND))
|
||||
to_chat(M, "<span class='userdanger'>You go blind!</span>")
|
||||
M.become_blind(EYE_DAMAGE)
|
||||
else
|
||||
|
||||
@@ -26,3 +26,30 @@
|
||||
if(4)
|
||||
if(prob(5))
|
||||
affected_mob.say( pick( list("HONK!", "Honk!", "Honk.", "Honk?", "Honk!!", "Honk?!", "Honk...") ) , forced = "pierrot's throat")
|
||||
|
||||
/datum/disease/pierrot_throat/after_add()
|
||||
RegisterSignal(affected_mob, COMSIG_MOB_SAY, .proc/handle_speech)
|
||||
|
||||
/datum/disease/pierrot_throat/proc/handle_speech(datum/source, list/speech_args)
|
||||
var/message = speech_args[SPEECH_MESSAGE]
|
||||
var/list/split_message = splittext(message, " ") //List each word in the message
|
||||
var/applied = 0
|
||||
for (var/i in 1 to length(split_message))
|
||||
if(prob(3 * stage)) //Stage 1: 3% Stage 2: 6% Stage 3: 9% Stage 4: 12%
|
||||
if(findtext(split_message[i], "*") || findtext(split_message[i], ";") || findtext(split_message[i], ":"))
|
||||
continue
|
||||
split_message[i] = "HONK"
|
||||
if (applied++ > stage)
|
||||
break
|
||||
if (applied)
|
||||
speech_args[SPEECH_SPANS] |= SPAN_CLOWN // a little bonus
|
||||
message = jointext(split_message, " ")
|
||||
speech_args[SPEECH_MESSAGE] = message
|
||||
|
||||
/datum/disease/pierrot_throat/Destroy()
|
||||
UnregisterSignal(affected_mob, COMSIG_MOB_SAY)
|
||||
return ..()
|
||||
|
||||
/datum/disease/pierrot_throat/remove_disease()
|
||||
UnregisterSignal(affected_mob, COMSIG_MOB_SAY)
|
||||
return ..()
|
||||
@@ -185,25 +185,6 @@
|
||||
if(DNA_TAUR_BLOCK)
|
||||
construct_block(GLOB.taur_list.Find(features["taur"]), GLOB.taur_list.len)
|
||||
|
||||
/datum/dna/proc/mutations_say_mods(message)
|
||||
if(message)
|
||||
for(var/datum/mutation/human/M in mutations)
|
||||
message = M.say_mod(message)
|
||||
return message
|
||||
|
||||
/datum/dna/proc/mutations_get_spans()
|
||||
var/list/spans = list()
|
||||
for(var/datum/mutation/human/M in mutations)
|
||||
spans |= M.get_spans()
|
||||
return spans
|
||||
|
||||
/datum/dna/proc/species_get_spans()
|
||||
var/list/spans = list()
|
||||
if(species)
|
||||
spans |= species.get_spans()
|
||||
return spans
|
||||
|
||||
|
||||
/datum/dna/proc/is_same_as(datum/dna/D)
|
||||
if(uni_identity == D.uni_identity && struc_enzymes == D.struc_enzymes && real_name == D.real_name && nameless == D.nameless && custom_species == D.custom_species)
|
||||
if(species.type == D.species.type && features == D.features && blood_type == D.blood_type)
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user