Merge remote-tracking branch 'citadel/master' into combat_rework

This commit is contained in:
kevinz000
2020-05-24 15:03:06 -07:00
1045 changed files with 21989 additions and 11144 deletions
+4
View File
@@ -17,6 +17,7 @@ jobs:
run: |
python -m pip install --upgrade pip
python -m pip install pyyaml
sudo apt-get install dos2unix
- name: "Checkout"
uses: actions/checkout@v1
with:
@@ -24,6 +25,9 @@ jobs:
- name: "Compile"
run: |
python tools/ss13_genchangelog.py html/changelog.html html/changelogs
- name: "Convert Lineendings"
run: |
unix2dos html/changelogs/.all_changelog.yml
- name: Commit
run: |
git config --local user.email "action@github.com"
+23 -22
View File
@@ -1,26 +1,28 @@
## Citadel Station 13
Based and maintained from /tg/station.
[![forthebadge](http://forthebadge.com/images/badges/60-percent-of-the-time-works-every-time.svg)](https://forthebadge.com) [![forthebadge](http://forthebadge.com/images/badges/pretty-risque.svg)](https://forthebadge.com) [![forthebadge](http://forthebadge.com/images/badges/you-didnt-ask-for-this.svg)](http://forthebadge.com)
[![Build Status](https://api.travis-ci.org/Citadel-Station-13/Citadel-Station-13.png)](https://travis-ci.org/Citadel-Station-13/Citadel-Station-13)
[![Percentage of issues still open](http://isitmaintained.com/badge/open/Citadel-Station-13/Citadel-Station-13.svg)](http://isitmaintained.com/project/Citadel-Station-13/Citadel-Station-13 "Percentage of issues still open")
[![Average time to resolve an issue](http://isitmaintained.com/badge/resolution/Citadel-Station-13/Citadel-Station-13.svg)](http://isitmaintained.com/project/Citadel-Station-13/Citadel-Station-13 "Average time to resolve an issue")
[![forinfinityandbyond](https://user-images.githubusercontent.com/5211576/29499758-4efff304-85e6-11e7-8267-62919c3688a9.gif)](https://www.reddit.com/r/SS13/comments/5oplxp/what_is_the_main_problem_with_byond_as_an_engine/dclbu1a)
[![Build Status](https://api.travis-ci.org/Citadel-Station-13/Citadel-Station-13.png)](https://travis-ci.org/Citadel-Station-13/Citadel-Station-13) [![Krihelimeter](http://www.krihelinator.xyz/badge/Citadel-Station-13/Citadel-Station-13)](http://www.krihelinator.xyz)
[![Percentage of issues still open](http://isitmaintained.com/badge/open/Citadel-Station-13/Citadel-Station-13.svg)](http://isitmaintained.com/project/Citadel-Station-13/Citadel-Station-13 "Percentage of issues still open") [![Average time to resolve an issue](http://isitmaintained.com/badge/resolution/Citadel-Station-13/Citadel-Station-13.svg)](http://isitmaintained.com/project/Citadel-Station-13/Citadel-Station-13 "Average time to resolve an issue")
[![forthebadge](http://forthebadge.com/images/badges/60-percent-of-the-time-works-every-time.svg)](https://forthebadge.com) [![forthebadge](http://forthebadge.com/images/badges/pretty-risque.svg)](https://forthebadge.com) [![forthebadge](http://forthebadge.com/images/badges/you-didnt-ask-for-this.svg)](http://forthebadge.com) [![forinfinityandbyond](https://user-images.githubusercontent.com/5211576/29499758-4efff304-85e6-11e7-8267-62919c3688a9.gif)](https://www.reddit.com/r/SS13/comments/5oplxp/what_is_the_main_problem_with_byond_as_an_engine/dclbu1a)
**Upstream Information**
**Website:** https://tgstation13.org
**Code:** https://github.com/tgstation/tgstation
**Wiki** https://tgstation13.org/wiki/Main_Page
**IRC:** irc://irc.rizon.net/coderbus or if you dont have an IRC client, you can click [here](https://kiwiirc.com/client/irc.rizon.net:6667/?&theme=cli#coderbus).
* **Website:** <https://www.tgstation13.org>
* **Code:** <https://github.com/tgstation/tgstation>
* **Wiki:** <https://tgstation13.org/wiki/Main_Page>
* **Codedocs:** <https://codedocs.tgstation13.org>
* **/tg/station Discord:** <https://tgstation13.org/phpBB/viewforum.php?f=60>
* **Coderbus Discord:** <https://discord.gg/Vh8TJp9>
* ~~**IRC:** <irc://irc.rizon.net/coderbus>~~ (dead)
**Citadel Station Information**
**Website:** http://citadel-station.net
**Forums:** http://citadel-station.net/forum
**Ban Appeals:** http://citadel-station.net/forum/forumdisplay.php?fid=8
**Code:** https://github.com/Citadel-Station-13/Citadel-Station-13
**Discord:** [Here](https://discord.gg/E6SQuhz)
* **Website:** <http://citadel-station.net>
* **Code:** <https://github.com/Citadel-Station-13/Citadel-Station-13>
* **Wiki:** <https://citadel-station.net/wiki/index.php?title=Main_Page>
* **Forums:** <http://citadel-station.net/forum>
* **Ban Appeals:** <http://citadel-station.net/forum/forumdisplay.php?fid=8>
* **Discord:** <https://discord.gg/E6SQuhz>
## DOWNLOADING
@@ -162,13 +164,12 @@ All code before [commit 333c566b88108de218d882840e61928a9b759d8f on 2014/31/12 a
See LICENSE and GPLv3.txt for more details.
The TGS3 API is licensed as a subproject under the MIT license.
See the footers of code/\_\_DEFINES/server\_tools.dm, code/modules/server\_tools/st\_commands.dm, and code/modules/server\_tools/st\_inteface.dm for the MIT license.
tgui clientside is licensed as a subproject under the MIT license.
Font Awesome font files, used by tgui, are licensed under the SIL Open Font License v1.1
tgui assets are licensed under a [Creative Commons Attribution-ShareAlike 4.0 International License](http://creativecommons.org/licenses/by-sa/4.0/).
The TGS3 API is licensed as a subproject under the MIT license.
See tgui/LICENSE.md for the MIT license.
See tgui/assets/fonts/SIL-OFL-1.1-LICENSE.md for the SIL Open Font License.
See the footers of code/\_\_DEFINES/server\_tools.dm, code/modules/server\_tools/st\_commands.dm, and code/modules/server\_tools/st\_inteface.dm for the MIT license.
All assets including icons and sound are under a [Creative Commons 3.0 BY-SA license](http://creativecommons.org/licenses/by-sa/3.0/) unless otherwise indicated.
All assets including icons and sound are under a [Creative Commons 3.0 BY-SA license](https://creativecommons.org/licenses/by-sa/3.0/) unless otherwise indicated.
@@ -5,10 +5,6 @@
"ab" = (
/turf/open/floor/plating/snowed/smoothed/icemoon,
/area/icemoon/surface/outdoors)
"ac" = (
/obj/effect/mob_spawn/human/engineer/rig,
/turf/open/floor/plating/snowed/smoothed/icemoon,
/area/icemoon/surface/outdoors)
"ad" = (
/obj/machinery/power/floodlight,
/obj/structure/cable{
@@ -176,10 +172,9 @@
/turf/open/floor/plating/snowed/smoothed/icemoon,
/area/icemoon/surface/outdoors)
"aI" = (
/obj/item/pda/engineering{
note = "To-do: Check on singularity status. Get a pint at eat. Nag the research manager for RCDs."
},
/turf/open/floor/plating/asteroid/snow/icemoon,
/obj/effect/turf_decal/stripes/line,
/obj/item/clothing/suit/space/hardsuit/engine,
/turf/open/floor/plating/snowed/smoothed/icemoon,
/area/icemoon/surface/outdoors)
"aJ" = (
/obj/effect/decal/cleanable/dirt,
@@ -270,12 +265,6 @@
/obj/machinery/atmospherics/pipe/manifold/cyan/visible{
dir = 1
},
/obj/effect/turf_decal/stripes/corner{
dir = 4
},
/obj/effect/turf_decal/stripes/corner{
dir = 1
},
/obj/machinery/light/small{
dir = 1
},
@@ -304,9 +293,6 @@
/obj/machinery/atmospherics/pipe/manifold/green/visible{
dir = 1
},
/obj/effect/turf_decal/stripes/corner{
dir = 1
},
/turf/open/floor/plating/snowed/smoothed/icemoon,
/area/icemoon/surface/outdoors)
"ba" = (
@@ -346,20 +332,10 @@
/obj/effect/decal/cleanable/blood/splatter,
/turf/open/floor/plating/asteroid/snow/icemoon,
/area/icemoon/surface/outdoors)
"be" = (
/obj/item/card/id{
access = list(200,204,11,12,10);
assignment = "Senior Station Engineer";
desc = "A card used to provide ID and determine access across the station. There's blood dripping from the corner. Ew.";
name = "George 'Plastic' Miller's ID Card (Senior Station Engineer)";
registered_name = "George 'Plastic' Miller"
},
/turf/open/floor/plating/asteroid/snow/icemoon,
/area/icemoon/surface/outdoors)
"bf" = (
/obj/effect/gibspawner/generic,
/obj/effect/decal/cleanable/blood,
/obj/effect/decal/cleanable/blood/gibs/core,
/obj/item/clothing/suit/space/hardsuit/engine,
/turf/open/floor/plating/asteroid/snow/icemoon,
/area/icemoon/surface/outdoors)
"bg" = (
@@ -544,10 +520,6 @@
/obj/item/shard/plasma,
/turf/open/floor/plating/snowed/smoothed/icemoon,
/area/icemoon/surface/outdoors)
"bz" = (
/obj/item/clothing/suit/space/hardsuit/engine,
/turf/open/floor/plating/asteroid/snow/icemoon,
/area/icemoon/surface/outdoors)
"bA" = (
/obj/item/flashlight/flare,
/turf/open/floor/plating/asteroid/snow/icemoon,
@@ -964,10 +936,6 @@
/turf/open/floor/plating/snowed/smoothed/icemoon,
/area/icemoon/surface/outdoors)
"cO" = (
/obj/effect/turf_decal/stripes/corner,
/obj/effect/turf_decal/stripes/corner{
dir = 8
},
/obj/machinery/light/small,
/turf/open/floor/plating/snowed/smoothed/icemoon,
/area/icemoon/surface/outdoors)
@@ -982,9 +950,6 @@
/obj/machinery/atmospherics/pipe/simple/dark/visible{
dir = 9
},
/obj/effect/turf_decal/stripes/corner{
dir = 8
},
/turf/open/floor/plating/snowed/smoothed/icemoon,
/area/icemoon/surface/outdoors)
"cR" = (
@@ -1013,13 +978,6 @@
},
/turf/open/floor/plating/icemoon,
/area/icemoon/surface/outdoors)
"cU" = (
/obj/effect/mob_spawn/human/engineer/rig,
/obj/structure/cable{
icon_state = "4-8"
},
/turf/open/floor/plating/icemoon,
/area/icemoon/surface/outdoors)
"cV" = (
/obj/effect/turf_decal/trimline/neutral/filled/line,
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
@@ -1032,12 +990,7 @@
},
/turf/open/floor/plating/snowed/smoothed/icemoon,
/area/icemoon/surface/outdoors)
"cX" = (
/obj/machinery/rnd/production/circuit_imprinter,
/turf/open/floor/plating/snowed/smoothed/icemoon,
/area/icemoon/surface/outdoors)
"cY" = (
/obj/machinery/rnd/production/protolathe/department/engineering,
/obj/machinery/light/small/broken,
/turf/open/floor/plating/snowed/smoothed/icemoon,
/area/icemoon/surface/outdoors)
@@ -1249,6 +1202,10 @@
},
/turf/open/floor/plating/icemoon,
/area/icemoon/surface/outdoors)
"xh" = (
/mob/living/simple_animal/hostile/bear/snow,
/turf/open/floor/plating/snowed/smoothed/icemoon,
/area/icemoon/surface/outdoors)
"CR" = (
/obj/structure/cable{
icon_state = "0-8"
@@ -1310,17 +1267,17 @@ aa
ak
an
ak
ae
ak
an
ab
aa
by
bQ
bQ
aO
ae
ae
ae
ae
ak
ak
ae
aO
aa
@@ -1437,9 +1394,9 @@ aa
aa
aa
aa
aI
aa
be
aa
aa
aa
aa
aa
@@ -1452,7 +1409,7 @@ ak
aa
"}
(9,1,1) = {"
ac
ab
ab
al
ap
@@ -1461,7 +1418,7 @@ aa
aa
aa
bf
bz
aa
aa
aa
af
@@ -1507,7 +1464,7 @@ bA
aa
aa
af
cA
aI
DM
dc
al
@@ -1529,7 +1486,7 @@ aa
ab
ab
cF
cU
gA
al
al
aO
@@ -1595,28 +1552,28 @@ al
al
al
ds
ae
aO
aa
"}
(16,1,1) = {"
ae
ae
ae
ae
aO
aO
ae
ae
ae
aO
ae
aO
bi
ae
aO
ae
ae
aO
ae
aO
ae
ae
ae
ae
ae
aO
aa
"}
(17,1,1) = {"
@@ -1630,7 +1587,7 @@ ae
aL
bb
bD
ae
aO
aa
aa
aa
@@ -1665,9 +1622,9 @@ aa
af
aa
aa
aa
ak
an
aB
dj
ae
aP
bk
@@ -1675,7 +1632,7 @@ aP
ae
aB
aB
aB
dj
aB
aB
aB
@@ -1698,7 +1655,7 @@ cf
cr
cB
cI
cX
ab
aB
aa
aa
@@ -1720,7 +1677,7 @@ aB
cE
ab
cY
aB
dj
aa
aa
"}
@@ -1731,7 +1688,7 @@ af
ab
ab
ab
ab
xh
ab
bj
ab
@@ -1741,7 +1698,7 @@ aP
cH
ab
de
aB
dj
aa
aa
"}
@@ -1857,7 +1814,7 @@ aa
aa
an
an
aB
dj
ae
bj
bH
@@ -1903,7 +1860,7 @@ aa
ae
bq
bH
ae
aO
aa
aa
aa
@@ -1926,9 +1883,9 @@ bq
bJ
ae
ae
aO
ae
ae
ae
aO
aa
aa
aa
@@ -1949,10 +1906,10 @@ bZ
ck
cs
cL
aO
ae
ae
ae
ae
aO
aa
"}
(33,1,1) = {"
@@ -2004,7 +1961,7 @@ aa
ae
ae
ae
ae
aO
aW
bu
bN
@@ -2013,9 +1970,9 @@ cn
cv
cO
ae
ae
ae
ae
aO
aO
aO
aa
"}
(36,1,1) = {"
@@ -2065,8 +2022,8 @@ aa
aa
aa
ae
ae
ae
aO
aO
ae
aZ
bu
@@ -2076,9 +2033,9 @@ cd
cy
cQ
ae
ae
ae
ae
aO
aO
aO
aa
"}
(39,1,1) = {"
@@ -2110,14 +2067,14 @@ aa
aa
aa
ae
aO
aO
ae
ae
ae
aO
ae
ae
ae
ae
ae
aO
aa
aa
aa
@@ -1,6 +1,6 @@
//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
"a" = (
/turf/open/floor/plating/asteroid/snow/icemoon,
/turf/closed/indestructible/riveted/uranium,
/area/icemoon/surface/outdoors)
"b" = (
/turf/closed/mineral/random/snow/no_caves,
@@ -12,7 +12,17 @@
/obj/item/paper/crumpled{
info = "When one falls into this hot spring, they shall forever be turned into..."
},
/turf/open/floor/plating/asteroid/snow/icemoon,
/turf/open/floor/plating/beach/sand,
/area/icemoon/surface/outdoors)
"I" = (
/turf/closed/indestructible/fakeglass,
/area/icemoon/surface/outdoors)
"L" = (
/obj/structure/fluff/beach_umbrella,
/turf/open/floor/plating/beach/sand,
/area/icemoon/surface/outdoors)
"U" = (
/turf/open/floor/plating/beach/sand,
/area/icemoon/surface/outdoors)
(1,1,1) = {"
@@ -34,7 +44,7 @@ b
b
a
a
a
I
a
a
b
@@ -45,11 +55,11 @@ b
b
b
a
a
a
a
a
a
U
U
U
U
U
a
b
b
@@ -57,65 +67,65 @@ b
(4,1,1) = {"
b
a
a
a
U
L
c
c
c
a
a
U
U
a
b
"}
(5,1,1) = {"
b
a
a
U
c
c
c
c
c
a
U
a
b
"}
(6,1,1) = {"
b
a
a
I
U
c
c
c
c
c
a
a
U
I
b
"}
(7,1,1) = {"
b
a
a
U
c
c
c
c
c
a
U
a
b
"}
(8,1,1) = {"
b
a
a
a
U
L
c
c
c
a
a
U
U
a
b
"}
@@ -123,11 +133,11 @@ b
b
b
a
a
a
U
U
d
a
a
U
U
a
b
b
@@ -138,7 +148,7 @@ b
b
a
a
a
I
a
a
b
@@ -20,12 +20,6 @@
},
/turf/open/floor/mineral/diamond,
/area/icemoon/surface/outdoors)
"f" = (
/obj/structure/sign/poster/contraband/lusty_xenomorph,
/obj/structure/falsewall/abductor,
/obj/structure/fans/tiny,
/turf/open/floor/mineral/diamond,
/area/icemoon/surface/outdoors)
(1,1,1) = {"
a
@@ -101,7 +95,7 @@ d
e
d
c
f
b
a
a
"}
@@ -198,6 +198,9 @@
/obj/structure/toilet{
dir = 1
},
/mob/living/simple_animal/hostile/skeleton/eskimo{
name = "Village Hunter"
},
/turf/open/floor/plating,
/area/ruin/powered)
"sY" = (
@@ -216,6 +219,9 @@
/area/icemoon/underground/explored)
"tt" = (
/obj/effect/decal/cleanable/dirt,
/mob/living/simple_animal/hostile/skeleton/eskimo{
name = "Village Hunter"
},
/turf/open/floor/plasteel/freezer,
/area/ruin/powered)
"tF" = (
@@ -415,6 +421,12 @@
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/carpet,
/area/ruin/powered)
"IT" = (
/mob/living/simple_animal/hostile/skeleton/eskimo{
name = "Village Hunter"
},
/turf/open/floor/wood,
/area/ruin/powered)
"Kd" = (
/obj/structure/flora/grass/green,
/turf/open/floor/plating/asteroid/snow/icemoon,
@@ -816,7 +828,7 @@ tF
ac
Vn
AG
aM
IT
yb
Vn
wQ
@@ -476,7 +476,7 @@
},
/obj/item/storage/bag/plants/portaseeder,
/obj/item/seeds/cotton,
/obj/item/seeds/cotton,
/obj/item/seeds/cotton/durathread,
/turf/open/indestructible/boss,
/area/ruin/unpowered/ash_walkers)
"bk" = (
@@ -61,8 +61,7 @@
},
/obj/structure/sign/barsign{
pixel_y = -32;
req_access = null;
req_access_txt = "0"
req_access = null
},
/turf/open/floor/wood,
/area/ruin/unpowered/syndicate_lava_base/bar)
@@ -212,7 +211,6 @@
/obj/effect/decal/cleanable/dirt,
/obj/effect/decal/cleanable/dirt,
/obj/machinery/computer/arcade/orion_trail{
icon_state = "arcade";
dir = 1
},
/turf/open/floor/plasteel/dark,
@@ -270,7 +268,6 @@
dir = 4
},
/obj/machinery/firealarm{
dir = 2;
pixel_y = 24
},
/obj/machinery/light/small{
@@ -1501,7 +1498,6 @@
/area/ruin/unpowered/syndicate_lava_base/virology)
"fk" = (
/obj/machinery/power/apc/syndicate{
dir = 2;
name = "Experimentation Lab APC";
pixel_y = -24
},
@@ -1565,15 +1561,10 @@
/obj/machinery/door/firedoor,
/obj/structure/table/reinforced,
/obj/machinery/door/window/southleft{
base_state = "left";
dir = 2;
icon_state = "left";
name = "Chemistry"
},
/obj/machinery/door/window/southleft{
base_state = "left";
dir = 1;
icon_state = "left";
name = "Chemistry";
req_access_txt = "150"
},
@@ -1968,9 +1959,7 @@
/area/ruin/unpowered/syndicate_lava_base/virology)
"gs" = (
/obj/machinery/atmospherics/pipe/manifold/supply/hidden,
/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer3{
dir = 2
},
/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer3,
/obj/machinery/light/small,
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/plasteel/white,
@@ -2153,9 +2142,7 @@
icon_state = "4-8"
},
/obj/machinery/atmospherics/pipe/manifold/supply/hidden,
/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer3{
dir = 2
},
/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer3,
/obj/structure/cable/yellow{
icon_state = "1-8"
},
@@ -2864,7 +2851,6 @@
/area/ruin/unpowered/syndicate_lava_base/main)
"ib" = (
/obj/effect/mob_spawn/human/lavaland_syndicate{
icon_state = "sleeper_s";
dir = 4
},
/turf/open/floor/plasteel/grimy,
@@ -2904,8 +2890,7 @@
/area/ruin/unpowered/syndicate_lava_base/dormitories)
"ie" = (
/obj/effect/mob_spawn/human/lavaland_syndicate/comms{
dir = 8;
icon_state = "sleeper_s"
dir = 8
},
/turf/open/floor/plasteel/grimy,
/area/ruin/unpowered/syndicate_lava_base/dormitories)
@@ -3029,10 +3014,10 @@
dir = 1
},
/obj/machinery/turretid{
ailock = 1;
control_area = "/area/ruin/unpowered/syndicate_lava_base/main";
dir = 1;
icon_state = "control_kill";
ailock = 1;
lethal = 1;
name = "Base turret controls";
pixel_y = 30;
@@ -3149,7 +3134,6 @@
dir = 1
},
/obj/machinery/firealarm{
dir = 2;
pixel_y = 24
},
/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer3,
@@ -3321,9 +3305,7 @@
"iT" = (
/obj/machinery/light/small,
/obj/machinery/atmospherics/pipe/manifold/supply/hidden,
/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer3{
dir = 2
},
/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer3,
/obj/structure/cable/yellow{
icon_state = "4-8"
},
@@ -3356,7 +3338,6 @@
dir = 4
},
/obj/machinery/power/apc/syndicate{
dir = 2;
name = "Dormitories APC";
pixel_y = -24
},
@@ -3565,7 +3546,6 @@
/area/ruin/unpowered/syndicate_lava_base/main)
"jn" = (
/obj/effect/mob_spawn/human/lavaland_syndicate{
icon_state = "sleeper_s";
dir = 4
},
/obj/machinery/airalarm/syndicate{
@@ -3591,8 +3571,7 @@
/area/ruin/unpowered/syndicate_lava_base/main)
"jq" = (
/obj/effect/mob_spawn/human/lavaland_syndicate{
dir = 8;
icon_state = "sleeper_s"
dir = 8
},
/obj/machinery/airalarm/syndicate{
pixel_y = 24
@@ -3986,9 +3965,7 @@
/area/ruin/unpowered/syndicate_lava_base/main)
"kd" = (
/obj/machinery/atmospherics/pipe/manifold/supply/hidden,
/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer3{
dir = 2
},
/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer3,
/obj/structure/cable/yellow{
icon_state = "1-4"
},
@@ -4059,9 +4036,7 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 9
},
/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer3{
dir = 2
},
/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer3,
/turf/open/floor/plasteel,
/area/ruin/unpowered/syndicate_lava_base/main)
"kj" = (
@@ -4247,8 +4222,10 @@
icon_state = "4-8"
},
/obj/machinery/atmospherics/pipe/simple/supply/visible,
/obj/machinery/atmospherics/pipe/manifold4w/scrubbers/visible/layer3,
/obj/effect/decal/cleanable/dirt,
/obj/machinery/atmospherics/pipe/manifold/scrubbers/visible/layer3{
dir = 4
},
/turf/open/floor/plasteel,
/area/ruin/unpowered/syndicate_lava_base/engineering)
"kA" = (
@@ -4266,11 +4243,9 @@
/obj/structure/cable/yellow{
icon_state = "0-8"
},
/obj/machinery/atmospherics/pipe/simple/scrubbers/visible/layer3{
dir = 9
},
/obj/machinery/atmospherics/components/unary/vent_pump/on,
/obj/effect/decal/cleanable/dirt,
/obj/machinery/atmospherics/pipe/simple/scrubbers/visible/layer3,
/turf/open/floor/plasteel,
/area/ruin/unpowered/syndicate_lava_base/engineering)
"kB" = (
@@ -4285,6 +4260,7 @@
/obj/machinery/computer/atmos_control/tank{
dir = 8;
frequency = 1442;
input_tag = "syndie_lavaland_n2_in";
name = "Nitrogen Supply Control";
output_tag = "syndie_lavaland_n2_out";
sensors = list("syndie_lavaland_n2_sensor" = "Tank")
@@ -4477,12 +4453,19 @@
/obj/machinery/atmospherics/pipe/simple/supply/visible{
dir = 5
},
/obj/machinery/atmospherics/pipe/simple/scrubbers/visible/layer3,
/obj/effect/decal/cleanable/dirt,
/obj/machinery/atmospherics/components/trinary/filter/atmos/flipped/n2{
dir = 1;
piping_layer = 3
},
/turf/open/floor/plasteel,
/area/ruin/unpowered/syndicate_lava_base/engineering)
"kY" = (
/obj/machinery/atmospherics/pipe/manifold4w/supply/visible,
/obj/machinery/atmospherics/pipe/simple/scrubbers/visible/layer3,
/obj/machinery/atmospherics/pipe/simple/scrubbers/visible/layer3{
dir = 8
},
/turf/open/floor/plasteel,
/area/ruin/unpowered/syndicate_lava_base/engineering)
"kZ" = (
@@ -4490,6 +4473,9 @@
dir = 4
},
/obj/effect/decal/cleanable/dirt,
/obj/machinery/atmospherics/pipe/simple/scrubbers/visible/layer3{
dir = 8
},
/turf/open/floor/plasteel,
/area/ruin/unpowered/syndicate_lava_base/engineering)
"la" = (
@@ -4503,6 +4489,9 @@
/obj/effect/turf_decal/tile/red{
dir = 4
},
/obj/machinery/atmospherics/pipe/simple/scrubbers/visible/layer3{
dir = 4
},
/turf/open/floor/plasteel,
/area/ruin/unpowered/syndicate_lava_base/engineering)
"lb" = (
@@ -4511,6 +4500,9 @@
/obj/machinery/atmospherics/pipe/simple/supplymain/visible{
dir = 4
},
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
dir = 10
},
/turf/open/floor/plating,
/area/ruin/unpowered/syndicate_lava_base/engineering)
"lc" = (
@@ -4523,6 +4515,11 @@
/turf/open/floor/plating/airless,
/area/ruin/unpowered/syndicate_lava_base/engineering)
"ld" = (
/obj/machinery/atmospherics/components/unary/outlet_injector/layer3{
dir = 4;
id = "syndie_lavaland_n2_in";
piping_layer = 3
},
/turf/open/floor/plating/airless,
/area/ruin/unpowered/syndicate_lava_base/engineering)
"le" = (
@@ -4676,15 +4673,24 @@
/turf/open/floor/plating,
/area/ruin/unpowered/syndicate_lava_base/engineering)
"lr" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/visible/layer3,
/turf/open/floor/plasteel,
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
dir = 10
},
/turf/closed/wall/mineral/plastitanium/nodiagonal,
/area/ruin/unpowered/syndicate_lava_base/engineering)
"ls" = (
/obj/machinery/atmospherics/pipe/simple/supply/visible,
/obj/machinery/atmospherics/pipe/simple/scrubbers/visible/layer3,
/obj/machinery/atmospherics/pipe/simple/scrubbers/visible/layer3{
dir = 8
},
/turf/open/floor/plasteel,
/area/ruin/unpowered/syndicate_lava_base/engineering)
"lt" = (
/obj/machinery/atmospherics/pipe/simple/supplymain/visible,
/obj/machinery/atmospherics/pipe/simple/scrubbers/visible/layer3{
dir = 4
},
/turf/open/floor/plasteel,
/area/ruin/unpowered/syndicate_lava_base/engineering)
"lu" = (
@@ -4694,6 +4700,9 @@
/obj/machinery/portable_atmospherics/scrubber,
/obj/effect/turf_decal/bot,
/obj/effect/decal/cleanable/dirt,
/obj/machinery/atmospherics/pipe/simple/scrubbers/visible/layer3{
dir = 10
},
/turf/open/floor/plasteel,
/area/ruin/unpowered/syndicate_lava_base/engineering)
"lv" = (
@@ -4848,29 +4857,33 @@
/turf/open/floor/plasteel,
/area/ruin/unpowered/syndicate_lava_base/engineering)
"lM" = (
/obj/structure/cable{
icon_state = "1-2"
/obj/machinery/atmospherics/components/unary/outlet_injector/layer3{
id = "syndie_lavaland_tox_in";
piping_layer = 3
},
/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer3{
dir = 4
},
/turf/open/floor/plasteel,
/turf/open/floor/plating/airless,
/area/ruin/unpowered/syndicate_lava_base/engineering)
"lN" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/visible/layer3{
dir = 9
/obj/machinery/atmospherics/components/trinary/filter/atmos/flipped/o2{
dir = 1;
piping_layer = 3
},
/turf/open/floor/plasteel,
/area/ruin/unpowered/syndicate_lava_base/engineering)
"lO" = (
/obj/machinery/atmospherics/pipe/simple/supply/visible,
/obj/effect/decal/cleanable/dirt,
/obj/machinery/atmospherics/pipe/simple/scrubbers/visible/layer3,
/obj/machinery/atmospherics/pipe/simple/scrubbers/visible/layer3{
dir = 8
},
/turf/open/floor/plasteel,
/area/ruin/unpowered/syndicate_lava_base/engineering)
"lP" = (
/obj/machinery/computer/atmos_control/tank{
dir = 8;
frequency = 1442;
input_tag = "syndie_lavaland_o2_in";
name = "Oxygen Supply Control";
output_tag = "syndie_lavaland_o2_out";
sensors = list("syndie_lavaland_o2_sensor" = "Tank")
@@ -4879,12 +4892,15 @@
/obj/effect/turf_decal/tile/blue{
dir = 4
},
/obj/machinery/atmospherics/pipe/simple/scrubbers/visible/layer3{
dir = 5
},
/turf/open/floor/plasteel,
/area/ruin/unpowered/syndicate_lava_base/engineering)
"lQ" = (
/obj/machinery/air_sensor{
frequency = 1442;
id_tag = "Syndicate_Construction_o2_sensor"
id_tag = "syndie_lavaland_o2_sensor"
},
/turf/open/floor/plating/airless,
/area/ruin/unpowered/syndicate_lava_base/engineering)
@@ -5083,6 +5099,9 @@
dir = 6
},
/obj/effect/decal/cleanable/dirt,
/obj/machinery/atmospherics/pipe/simple/scrubbers/visible/layer3{
dir = 5
},
/turf/open/floor/plasteel,
/area/ruin/unpowered/syndicate_lava_base/engineering)
"mj" = (
@@ -5093,11 +5112,15 @@
},
/obj/machinery/atmospherics/pipe/simple/supply/visible,
/obj/effect/decal/cleanable/dirt,
/obj/machinery/atmospherics/pipe/simple/scrubbers/visible/layer3{
dir = 9
},
/turf/open/floor/plasteel,
/area/ruin/unpowered/syndicate_lava_base/engineering)
"mk" = (
/obj/machinery/atmospherics/pipe/manifold/supplymain/visible,
/obj/effect/decal/cleanable/dirt,
/obj/machinery/atmospherics/pipe/simple/scrubbers/visible/layer3,
/turf/open/floor/plasteel,
/area/ruin/unpowered/syndicate_lava_base/engineering)
"ml" = (
@@ -5170,7 +5193,6 @@
/obj/machinery/light/small,
/obj/structure/cable/yellow,
/obj/machinery/power/apc/syndicate{
dir = 2;
name = "Bar APC";
pixel_y = -24
},
@@ -5297,6 +5319,9 @@
/obj/structure/reagent_dispensers/watertank,
/obj/effect/decal/cleanable/dirt,
/obj/effect/decal/cleanable/dirt,
/obj/machinery/atmospherics/pipe/simple/scrubbers/visible/layer3{
dir = 5
},
/turf/open/floor/plasteel,
/area/ruin/unpowered/syndicate_lava_base/engineering)
"mK" = (
@@ -5304,12 +5329,16 @@
/obj/machinery/computer/atmos_control/tank{
dir = 1;
frequency = 1442;
input_tag = "syndie_lavaland_tox_in";
name = "Toxins Supply Control";
output_tag = "syndie_lavaland_tox_out";
sensors = list("syndie_lavaland_tox_sensor" = "Tank")
},
/obj/effect/decal/cleanable/dirt,
/obj/effect/decal/cleanable/dirt,
/obj/machinery/atmospherics/pipe/simple/scrubbers/visible/layer3{
dir = 4
},
/turf/open/floor/plasteel,
/area/ruin/unpowered/syndicate_lava_base/engineering)
"mM" = (
@@ -5700,9 +5729,7 @@
/area/ruin/unpowered/syndicate_lava_base/arrivals)
"nw" = (
/obj/machinery/atmospherics/pipe/manifold/supply/hidden,
/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer3{
dir = 2
},
/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer3,
/obj/structure/cable/yellow{
icon_state = "1-4"
},
@@ -5998,7 +6025,6 @@
dir = 4
},
/obj/machinery/firealarm{
dir = 2;
pixel_y = 24
},
/obj/structure/cable/yellow{
@@ -6212,7 +6238,6 @@
},
/obj/structure/cable/yellow,
/obj/machinery/power/apc/syndicate{
dir = 2;
name = "Telecommunications APC";
pixel_y = -24
},
@@ -6391,7 +6416,6 @@
"oG" = (
/obj/structure/cable,
/obj/machinery/power/turbine{
dir = 2;
luminosity = 2
},
/turf/open/floor/engine/vacuum,
@@ -6413,6 +6437,21 @@
/obj/structure/sign/departments/chemistry,
/turf/closed/wall/mineral/plastitanium/nodiagonal,
/area/ruin/unpowered/syndicate_lava_base/testlab)
"pC" = (
/obj/structure/grille,
/obj/structure/window/plastitanium,
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
dir = 10
},
/turf/open/floor/plating,
/area/ruin/unpowered/syndicate_lava_base/engineering)
"qc" = (
/obj/machinery/atmospherics/pipe/simple/supplymain/visible,
/obj/machinery/atmospherics/pipe/simple/scrubbers/visible/layer3{
dir = 10
},
/turf/open/floor/plasteel,
/area/ruin/unpowered/syndicate_lava_base/engineering)
"tW" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/turf/closed/wall/mineral/plastitanium/nodiagonal,
@@ -6466,12 +6505,29 @@
/obj/effect/mapping_helpers/airlock/cyclelink_helper,
/turf/open/floor/plating,
/area/ruin/unpowered/syndicate_lava_base/arrivals)
"Gm" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3,
/turf/closed/wall/mineral/plastitanium/nodiagonal,
/area/ruin/unpowered/syndicate_lava_base/engineering)
"Go" = (
/obj/machinery/atmospherics/components/trinary/filter/atmos/flipped/plasma{
dir = 1;
piping_layer = 3
},
/turf/open/floor/plasteel,
/area/ruin/unpowered/syndicate_lava_base/engineering)
"IJ" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
dir = 1
},
/turf/closed/wall/mineral/plastitanium/nodiagonal,
/area/ruin/unpowered/syndicate_lava_base/engineering)
"KA" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
dir = 4
},
/turf/closed/wall/mineral/plastitanium/nodiagonal,
/area/ruin/unpowered/syndicate_lava_base/engineering)
"Lg" = (
/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer3{
dir = 4
@@ -6487,6 +6543,12 @@
/obj/effect/decal/cleanable/dirt,
/turf/closed/wall/mineral/plastitanium/nodiagonal,
/area/ruin/unpowered/syndicate_lava_base/circuits)
"Ng" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
dir = 9
},
/turf/closed/wall/mineral/plastitanium/nodiagonal,
/area/ruin/unpowered/syndicate_lava_base/engineering)
"Pa" = (
/turf/closed/wall/mineral/plastitanium/nodiagonal,
/area/ruin/unpowered/syndicate_lava_base/circuits)
@@ -6520,6 +6582,14 @@
},
/turf/open/floor/engine,
/area/ruin/unpowered/syndicate_lava_base/testlab)
"Tt" = (
/obj/machinery/atmospherics/components/unary/outlet_injector/layer3{
dir = 4;
id = "syndie_lavaland_o2_in";
piping_layer = 3
},
/turf/open/floor/plating/airless,
/area/ruin/unpowered/syndicate_lava_base/engineering)
"TC" = (
/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer3{
dir = 4
@@ -6529,6 +6599,24 @@
},
/turf/open/floor/engine,
/area/ruin/unpowered/syndicate_lava_base/testlab)
"Vw" = (
/obj/structure/grille,
/obj/structure/window/plastitanium,
/obj/machinery/atmospherics/pipe/simple/supplymain/visible{
dir = 4
},
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3,
/turf/open/floor/plating,
/area/ruin/unpowered/syndicate_lava_base/engineering)
"Wq" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
dir = 5
},
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
dir = 10
},
/turf/closed/wall/mineral/plastitanium/nodiagonal,
/area/ruin/unpowered/syndicate_lava_base/engineering)
(1,1,1) = {"
aa
@@ -8363,7 +8451,7 @@ ju
ky
kW
lq
lM
mh
mh
mG
nd
@@ -8412,8 +8500,8 @@ jW
kk
kz
kX
lr
lN
Go
mi
mH
ne
@@ -8513,13 +8601,13 @@ km
kB
kZ
lt
lt
qc
mk
mJ
ng
nF
ld
ju
lM
uB
ab
ab
ab
@@ -8569,7 +8657,7 @@ mK
kD
nG
og
ju
KA
ab
ab
ab
@@ -8612,14 +8700,14 @@ ab
ju
kD
lb
ju
kD
lb
ju
ju
ju
ju
ju
uB
pC
Vw
Wq
Gm
Gm
Gm
Ng
ab
ab
ab
@@ -8662,10 +8750,10 @@ ab
ju
kE
lc
ju
KA
lQ
mm
ju
KA
ab
ab
ab
@@ -8712,10 +8800,10 @@ ab
ju
kF
ld
ju
KA
lR
ld
ju
Tt
KA
ab
ab
ab
@@ -8761,11 +8849,11 @@ ab
ab
ju
ju
lr
Ng
ju
ju
ju
ju
ju
lr
Ng
ab
ab
ab
File diff suppressed because it is too large Load Diff
@@ -168,7 +168,7 @@
/turf/template_noop,
/area/template_noop)
"H" = (
/obj/machinery/vending/boozeomat/all_access,
/obj/machinery/vending/boozeomat,
/turf/open/floor/plasteel/airless/cafeteria,
/area/ruin/space)
"I" = (
@@ -799,7 +799,7 @@
/turf/open/floor/wood,
/area/awaymission/beach)
"cn" = (
/obj/machinery/vending/boozeomat/all_access{
/obj/machinery/vending/boozeomat{
desc = "A technological marvel, supposedly able to mix just the mixture you'd like to drink the moment you ask for one. May not work for bartenders that don't have Nanotrasen bank accounts."
},
/turf/open/floor/wood,
File diff suppressed because it is too large Load Diff
+11 -4
View File
@@ -17073,7 +17073,7 @@
/area/security/brig)
"aLl" = (
/obj/effect/turf_decal/delivery,
/obj/machinery/vending/autodrobe/all_access,
/obj/machinery/vending/autodrobe,
/turf/open/floor/plasteel,
/area/hallway/primary/port/fore)
"aLm" = (
@@ -28450,7 +28450,7 @@
/turf/open/floor/plasteel,
/area/quartermaster/warehouse)
"bjN" = (
/obj/machinery/vending/autodrobe/all_access,
/obj/machinery/vending/autodrobe,
/obj/effect/turf_decal/bot,
/turf/open/floor/plasteel,
/area/quartermaster/office)
@@ -72017,6 +72017,10 @@
},
/turf/open/space/basic,
/area/space/nearstation)
"mBP" = (
/obj/machinery/rnd/bepis,
/turf/open/floor/plasteel/white,
/area/science/circuit)
"mEa" = (
/obj/machinery/atmospherics/pipe/manifold/cyan/visible,
/obj/machinery/meter,
@@ -72362,6 +72366,9 @@
/obj/item/pen,
/turf/open/floor/plasteel,
/area/engine/atmos)
"xxP" = (
/turf/closed/wall,
/area/quartermaster/storage)
"xCy" = (
/obj/machinery/atmospherics/components/binary/pump,
/obj/machinery/atmospherics/pipe/simple/supplymain/hidden{
@@ -93369,7 +93376,7 @@ aTE
bTG
aVF
cGs
aVF
mBP
caw
caA
cHk
@@ -121108,7 +121115,7 @@ bgT
bjr
bkr
ble
bgT
xxP
bnC
boD
bgT
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+30 -38
View File
@@ -29538,6 +29538,14 @@
/obj/machinery/light/small{
dir = 8
},
/obj/machinery/computer/security/telescreen{
desc = "Used for watching the test chamber.";
dir = 4;
layer = 4;
name = "Test Chamber Telescreen";
network = list("toxins");
pixel_x = -32
},
/turf/open/floor/plasteel/dark,
/area/science/mixing)
"aVT" = (
@@ -30469,9 +30477,8 @@
dir = 4
},
/obj/machinery/light{
dir = 4
dir = 1
},
/obj/machinery/computer/nanite_cloud_controller,
/turf/open/floor/plasteel/dark,
/area/science/research)
"aXx" = (
@@ -30583,7 +30590,8 @@
name = "science camera";
network = list("ss13","rd")
},
/obj/machinery/computer/nanite_chamber_control,
/obj/structure/table/reinforced,
/obj/item/storage/bag/money,
/turf/open/floor/plasteel/dark,
/area/science/research)
"aXG" = (
@@ -31251,8 +31259,6 @@
dir = 1
},
/obj/structure/table/reinforced,
/obj/item/nanite_scanner,
/obj/item/nanite_remote,
/turf/open/floor/plasteel/dark,
/area/science/research)
"aYO" = (
@@ -33284,14 +33290,6 @@
/obj/structure/chair{
dir = 4
},
/obj/machinery/computer/security/telescreen{
desc = "Used for watching the test chamber.";
dir = 8;
layer = 4;
name = "Test Chamber Telescreen";
network = list("toxins");
pixel_x = 30
},
/obj/effect/turf_decal/tile/neutral{
dir = 8
},
@@ -33793,14 +33791,6 @@
pixel_x = 24;
pixel_y = -24
},
/obj/machinery/computer/security/telescreen{
desc = "Used for watching the test chamber.";
dir = 8;
layer = 4;
name = "Test Chamber Telescreen";
network = list("toxins");
pixel_x = 30
},
/obj/effect/turf_decal/tile/neutral{
dir = 8
},
@@ -35128,7 +35118,6 @@
dir = 4
},
/obj/effect/landmark/event_spawn,
/obj/machinery/nanite_program_hub,
/turf/open/floor/plasteel/dark,
/area/science/research)
"beE" = (
@@ -54029,7 +54018,7 @@
/obj/effect/turf_decal/tile/neutral{
dir = 8
},
/obj/machinery/vending/autodrobe/all_access,
/obj/machinery/vending/autodrobe,
/obj/effect/turf_decal/delivery,
/turf/open/floor/plasteel/dark,
/area/crew_quarters/locker)
@@ -62906,6 +62895,11 @@
/obj/structure/extinguisher_cabinet{
pixel_x = 24
},
/obj/machinery/button/electrochromatic{
pixel_x = 38;
pixel_y = -5;
id = "!interrogation_room"
},
/turf/open/floor/plasteel,
/area/security/warden)
"bWO" = (
@@ -73512,7 +73506,7 @@
},
/mob/living/simple_animal/bot/cleanbot{
auto_patrol = 1;
name = "\imprper Cleaner Bot"
name = "\improper Cleaner Bot"
},
/turf/open/floor/plasteel/showroomfloor,
/area/security/prison)
@@ -78316,7 +78310,7 @@
/obj/effect/turf_decal/tile/neutral{
dir = 4
},
/obj/machinery/vending/autodrobe/all_access,
/obj/machinery/vending/autodrobe,
/obj/structure/noticeboard{
dir = 4;
pixel_x = -27
@@ -84861,7 +84855,7 @@
/turf/open/floor/engine,
/area/engine/engineering)
"iLn" = (
/obj/machinery/vending/boozeomat/all_access,
/obj/machinery/vending/boozeomat,
/turf/open/floor/wood,
/area/maintenance/port/fore)
"iMb" = (
@@ -85144,7 +85138,7 @@
dir = 8
},
/obj/effect/turf_decal/bot,
/obj/machinery/nanite_chamber,
/obj/machinery/rnd/bepis,
/turf/open/floor/plasteel/dark,
/area/science/research)
"kSc" = (
@@ -85411,14 +85405,6 @@
initial_gas_mix = "o2=14;n2=23;TEMP=300"
},
/area/hallway/secondary/entry)
"sfp" = (
/obj/effect/turf_decal/tile/neutral,
/obj/effect/turf_decal/tile/neutral{
dir = 4
},
/obj/machinery/nanite_programmer,
/turf/open/floor/plasteel/dark,
/area/science/research)
"swG" = (
/obj/item/reagent_containers/food/drinks/drinkingglass{
pixel_x = 4;
@@ -85513,6 +85499,12 @@
"uRM" = (
/turf/open/floor/wood,
/area/security/vacantoffice)
"vjT" = (
/obj/effect/spawner/structure/window/reinforced/tinted/electrochromatic{
electrochromatic_id = "!interrogation_room"
},
/turf/open/floor/plating,
/area/security/warden)
"vle" = (
/obj/structure/festivus,
/turf/open/floor/wood,
@@ -107879,7 +107871,7 @@ agX
agX
agX
aef
acH
vjT
aBH
aef
aef
@@ -123517,7 +123509,7 @@ aZv
aXw
kRh
aXI
sfp
aXI
beD
bbj
aNF
@@ -126371,7 +126363,7 @@ bki
bhQ
bkN
bIG
bki
bhQ
bMB
blH
bhQ
+21 -45
View File
@@ -707,27 +707,11 @@
/turf/open/floor/plasteel,
/area/science/mixing)
"acc" = (
/obj/machinery/computer/security/telescreen/toxins{
layer = 4;
network = list("toxins");
pixel_y = 30
},
/obj/effect/turf_decal/stripes/line{
dir = 9
},
/turf/open/floor/plasteel,
/area/science/mixing)
"acd" = (
/obj/machinery/computer/security/telescreen/toxins{
layer = 4;
network = list("toxins");
pixel_y = 30
},
/obj/effect/turf_decal/stripes/line{
dir = 1
},
/turf/open/floor/plasteel,
/area/science/mixing)
"ace" = (
/obj/effect/turf_decal/stripes/line{
dir = 1
@@ -1183,6 +1167,10 @@
name = "Mass Driver Door";
req_access_txt = "7"
},
/obj/machinery/computer/security/telescreen/toxins{
dir = 1;
pixel_y = -32
},
/turf/open/floor/plasteel,
/area/science/mixing)
"adg" = (
@@ -23482,9 +23470,7 @@
dir = 8
},
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3,
/obj/structure/closet/l3closet/scientist{
pixel_x = -2
},
/obj/structure/closet/l3closet/scientist,
/turf/open/floor/plasteel/white,
/area/science/explab)
"aQI" = (
@@ -38272,12 +38258,10 @@
/turf/open/floor/plasteel/white,
/area/medical/chemistry)
"btD" = (
/obj/machinery/chem_dispenser{
layer = 2.7
},
/obj/effect/turf_decal/trimline/blue/filled/line{
dir = 1
},
/obj/machinery/chem_dispenser/apothecary,
/turf/open/floor/plasteel/white,
/area/medical/chemistry)
"btE" = (
@@ -45021,7 +45005,7 @@
/turf/open/floor/wood,
/area/maintenance/bar)
"bGM" = (
/obj/machinery/vending/boozeomat/all_access,
/obj/machinery/vending/boozeomat,
/turf/open/floor/wood,
/area/maintenance/bar)
"bGN" = (
@@ -47241,7 +47225,6 @@
/area/hydroponics/garden/abandoned)
"bKT" = (
/obj/item/poster/random_contraband,
/turf/open/floor/plating,
/turf/open/floor/plating{
icon_state = "platingdmg2"
},
@@ -58598,7 +58581,7 @@
/turf/open/space,
/area/space/nearstation)
"cgJ" = (
/obj/machinery/vending/autodrobe/all_access,
/obj/machinery/vending/autodrobe,
/turf/open/floor/plating,
/area/maintenance/aft)
"cgK" = (
@@ -62158,7 +62141,6 @@
/obj/structure/cable{
icon_state = "0-4"
},
/turf/open/floor/plating,
/turf/open/floor/plating{
icon_state = "platingdmg2"
},
@@ -63619,7 +63601,6 @@
/obj/structure/disposalpipe/segment{
dir = 4
},
/turf/open/floor/plating,
/turf/open/floor/plating{
icon_state = "platingdmg2"
},
@@ -72658,7 +72639,7 @@
/turf/open/floor/plasteel/grimy,
/area/bridge)
"cIV" = (
/obj/machinery/vending/boozeomat/all_access,
/obj/machinery/vending/boozeomat,
/obj/machinery/status_display/evac{
pixel_y = 32
},
@@ -75970,7 +75951,6 @@
},
/area/maintenance/department/medical)
"cPo" = (
/turf/open/floor/plating,
/turf/open/floor/plating{
icon_state = "platingdmg2"
},
@@ -76073,7 +76053,6 @@
},
/area/maintenance/fore/secondary)
"cPB" = (
/turf/open/floor/plating,
/turf/open/floor/plating{
icon_state = "platingdmg2"
},
@@ -76098,17 +76077,10 @@
},
/area/maintenance/department/crew_quarters/dorms)
"cPE" = (
/turf/open/floor/plating,
/turf/open/floor/plating{
icon_state = "platingdmg2"
},
/area/maintenance/department/crew_quarters/dorms)
"cPF" = (
/turf/open/floor/plating,
/turf/open/floor/plating{
icon_state = "platingdmg2"
},
/area/maintenance/aft)
"cPG" = (
/obj/structure/cable{
icon_state = "4-8"
@@ -81517,6 +81489,10 @@
},
/turf/open/floor/plasteel,
/area/hallway/primary/aft)
"sZf" = (
/obj/machinery/rnd/bepis,
/turf/open/floor/engine,
/area/science/explab)
"tbT" = (
/obj/machinery/power/emitter/anchored{
dir = 1;
@@ -112996,7 +112972,7 @@ aAY
aAY
aAY
abK
acd
ace
acH
ajC
abJ
@@ -113803,7 +113779,7 @@ aFb
aFO
aGD
aHo
aGD
aHp
aDr
aaA
aaA
@@ -114059,7 +114035,7 @@ aEj
aFc
aFO
aGD
aHp
aGD
aGD
aDr
apk
@@ -114572,9 +114548,9 @@ aJP
aKA
aFe
aDr
aGD
aHq
aGD
sZf
aDr
aJI
aKB
@@ -115439,7 +115415,7 @@ cgm
thv
uRw
boU
cPF
cfm
chI
cqg
cWW
@@ -118541,7 +118517,7 @@ aaA
ceG
cqt
bYa
cPF
cfm
ceG
aaA
aaA
@@ -119299,7 +119275,7 @@ cQK
bYa
bYa
cRQ
cPF
cfm
chI
cRv
bYa
@@ -134623,7 +134599,7 @@ aab
aab
aJw
aKk
aKk
aPB
aLY
aMU
aNT
+83 -70
View File
@@ -3807,7 +3807,8 @@
movement_type = 1;
name = "Sergeant Araneus";
real_name = "Sergeant Araneus";
response_help = "pets";
response_help_continuous = "pets";
response_help_simple = "pet";
turns_per_move = 10
},
/turf/open/floor/carpet,
@@ -6660,9 +6661,7 @@
/obj/structure/cable/yellow{
icon_state = "2-8"
},
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 4
},
/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden,
/turf/open/floor/plasteel/showroomfloor,
/area/security/warden)
"amc" = (
@@ -7778,9 +7777,6 @@
"aop" = (
/obj/structure/bed,
/obj/item/bedsheet,
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 9
},
/obj/structure/disposalpipe/segment{
dir = 4
},
@@ -7792,6 +7788,9 @@
/obj/effect/turf_decal/tile/red{
dir = 8
},
/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
dir = 4
},
/turf/open/floor/plasteel/white,
/area/security/brig)
"aoq" = (
@@ -9147,6 +9146,7 @@
/area/maintenance/port/fore)
"aqY" = (
/obj/machinery/computer/security/labor,
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/turf/open/floor/plasteel/dark,
/area/security/brig)
"aqZ" = (
@@ -10144,14 +10144,6 @@
/obj/structure/chair,
/turf/open/floor/plasteel/grimy,
/area/security/main)
"asN" = (
/obj/structure/chair,
/obj/machinery/computer/security/telescreen/interrogation{
dir = 1;
pixel_y = -30
},
/turf/open/floor/plasteel/grimy,
/area/security/main)
"asO" = (
/obj/item/paper_bin{
pixel_x = -3;
@@ -10708,7 +10700,9 @@
/turf/open/floor/plating,
/area/security/main)
"atZ" = (
/obj/effect/spawner/structure/window/reinforced/tinted,
/obj/effect/spawner/structure/window/reinforced/tinted/electrochromatic{
electrochromatic_id = "!interrogation_room"
},
/turf/open/floor/plating,
/area/security/main)
"aua" = (
@@ -11924,9 +11918,6 @@
/turf/open/floor/plating,
/area/maintenance/fore)
"awC" = (
/obj/machinery/atmospherics/components/unary/vent_pump/on{
dir = 1
},
/obj/machinery/light/small{
dir = 1
},
@@ -14823,6 +14814,9 @@
/obj/structure/cable/yellow{
icon_state = "2-8"
},
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 4
},
/turf/open/floor/plasteel/dark,
/area/security/brig)
"aCr" = (
@@ -14830,6 +14824,9 @@
name = "Court Cell";
req_access_txt = "63"
},
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 4
},
/turf/open/floor/plasteel/dark,
/area/security/brig)
"aCs" = (
@@ -45054,7 +45051,7 @@
/turf/open/floor/plating,
/area/maintenance/port)
"bLe" = (
/obj/machinery/vending/autodrobe/all_access,
/obj/machinery/vending/autodrobe,
/turf/open/floor/plating,
/area/maintenance/port)
"bLf" = (
@@ -46092,7 +46089,7 @@
/area/bridge/showroom/corporate)
"bNg" = (
/obj/machinery/light_switch{
pixel_y = 24
pixel_y = 25
},
/obj/machinery/light/small{
dir = 1
@@ -52691,7 +52688,9 @@
/area/maintenance/starboard)
"caX" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/obj/machinery/light_switch,
/obj/machinery/light_switch{
pixel_y = 25
},
/turf/closed/wall,
/area/maintenance/disposal/incinerator)
"caY" = (
@@ -56944,21 +56943,12 @@
},
/area/science/research)
"ciS" = (
/obj/machinery/atmospherics/components/unary/vent_pump/on{
dir = 4
},
/mob/living/simple_animal/pet/dog/pug{
desc = "It's Pugley IV, the research department's lovable pug clone. Hopefully nothing happens to this one - fourth time lucky!";
name = "Pugley IV";
real_name = "Pugley IV"
},
/obj/machinery/rnd/bepis,
/turf/open/floor/engine,
/area/science/explab)
"ciT" = (
/obj/item/beacon,
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 10
},
/obj/machinery/atmospherics/components/unary/vent_pump/on,
/turf/open/floor/engine,
/area/science/explab)
"ciU" = (
@@ -57077,7 +57067,7 @@
/turf/open/floor/plating/airless,
/area/engine/atmos)
"cjp" = (
/obj/machinery/vending/boozeomat/all_access,
/obj/machinery/vending/boozeomat,
/turf/open/floor/wood,
/area/maintenance/port/aft)
"cjq" = (
@@ -59557,6 +59547,11 @@
/obj/structure/chair/office/light{
dir = 4
},
/mob/living/simple_animal/pet/dog/pug{
desc = "It's Pugley IV, the research department's lovable pug clone. Hopefully nothing happens to this one - fourth time lucky!";
name = "Pugley IV";
real_name = "Pugley IV"
},
/turf/open/floor/plasteel/white,
/area/science/explab)
"com" = (
@@ -62405,7 +62400,7 @@
dir = 10
},
/obj/machinery/light_switch{
pixel_y = 24
pixel_y = 25
},
/obj/effect/turf_decal/tile/blue,
/obj/effect/turf_decal/tile/blue{
@@ -63920,7 +63915,7 @@
dir = 8
},
/obj/machinery/light_switch{
pixel_y = 24
pixel_y = 25
},
/obj/effect/turf_decal/tile/blue{
dir = 1
@@ -63928,9 +63923,7 @@
/obj/effect/turf_decal/tile/blue{
dir = 8
},
/obj/machinery/chem_dispenser{
layer = 2.7
},
/obj/machinery/chem_dispenser/apothecary,
/turf/open/floor/plasteel/white,
/area/medical/medbay/aft)
"cwp" = (
@@ -66312,6 +66305,7 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
/obj/structure/sign/warning/biohazard,
/turf/closed/wall,
/area/science/mixing)
"cAM" = (
@@ -66337,14 +66331,6 @@
/obj/structure/chair{
dir = 4
},
/obj/machinery/computer/security/telescreen{
desc = "Used for watching the test chamber.";
dir = 8;
layer = 4;
name = "Test Chamber Telescreen";
network = list("toxins");
pixel_x = 30
},
/obj/effect/turf_decal/stripes/line{
dir = 5
},
@@ -66768,14 +66754,6 @@
pixel_x = 24;
pixel_y = -24
},
/obj/machinery/computer/security/telescreen{
desc = "Used for watching the test chamber.";
dir = 8;
layer = 4;
name = "Test Chamber Telescreen";
network = list("toxins");
pixel_x = 30
},
/obj/effect/turf_decal/stripes/line{
dir = 6
},
@@ -67188,6 +67166,15 @@
req_access_txt = "7"
},
/obj/effect/turf_decal/loading_area,
/obj/machinery/computer/security/telescreen{
desc = "Used for watching the test chamber.";
dir = 4;
layer = 4;
name = "Test Chamber Telescreen";
network = list("toxins");
pixel_x = -32;
pixel_y = 0
},
/turf/open/floor/plasteel,
/area/science/mixing)
"cCH" = (
@@ -74543,7 +74530,7 @@
dir = 8
},
/obj/machinery/light_switch{
pixel_x = -23
pixel_y = 25
},
/obj/effect/turf_decal/stripes/line{
dir = 9
@@ -79861,13 +79848,13 @@
c_tag = "Chapel - Funeral Parlour";
dir = 8
},
/obj/machinery/atmospherics/components/unary/vent_scrubber/on,
/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
dir = 4
},
/turf/open/floor/plasteel/dark,
/area/chapel/main)
"djk" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 5
},
/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden,
/turf/closed/wall,
/area/chapel/main)
"djr" = (
@@ -80610,10 +80597,12 @@
/area/security/brig)
"dBH" = (
/obj/effect/spawner/structure/window/reinforced,
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/obj/structure/cable/yellow{
icon_state = "0-4"
},
/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
dir = 8
},
/turf/open/floor/plating,
/area/security/brig)
"dBI" = (
@@ -81872,6 +81861,14 @@
},
/turf/open/floor/plasteel,
/area/hallway/primary/port)
"kRi" = (
/obj/structure/chair,
/obj/machinery/button/electrochromatic{
id = "!interrogation_room";
pixel_x = -25
},
/turf/open/floor/plasteel/grimy,
/area/security/main)
"kVo" = (
/obj/structure/cable/yellow{
icon_state = "1-2"
@@ -82162,6 +82159,12 @@
/obj/item/storage/fancy/candle_box,
/turf/open/floor/engine/cult,
/area/library)
"oaM" = (
/obj/machinery/computer/security/telescreen/interrogation{
pixel_y = 32
},
/turf/open/floor/plasteel/grimy,
/area/security/main)
"obb" = (
/obj/structure/target_stake,
/obj/effect/turf_decal/stripes/line{
@@ -82215,6 +82218,10 @@
/obj/machinery/status_display/supply,
/turf/closed/wall,
/area/quartermaster/sorting)
"orJ" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/turf/closed/wall,
/area/security/brig)
"oub" = (
/obj/structure/sign/poster/official/random,
/turf/closed/wall,
@@ -82299,6 +82306,12 @@
},
/turf/closed/wall/r_wall,
/area/maintenance/disposal/incinerator)
"pvk" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 4
},
/turf/closed/wall/r_wall,
/area/security/detectives_office)
"pvA" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
@@ -99936,7 +99949,7 @@ aIg
aIg
aKN
dIs
aIg
aUe
dIs
aQg
aIg
@@ -104390,7 +104403,7 @@ cLa
cPF
cQb
djj
djr
cQb
cRq
cPA
aaa
@@ -107370,7 +107383,7 @@ akv
alO
anf
aop
ahx
orJ
aqY
asn
atK
@@ -112777,7 +112790,7 @@ axp
dBF
azO
aBi
ajm
axw
ajm
ajm
ajm
@@ -113291,7 +113304,7 @@ axr
ayF
ayF
ayF
ayF
pvk
ayJ
ayJ
aGt
@@ -115339,7 +115352,7 @@ aiJ
aoK
aqa
arv
asM
kRi
atZ
avk
aww
@@ -115595,8 +115608,8 @@ amr
anD
aoL
ajD
arv
asN
oaM
asM
atZ
avk
awx
@@ -118507,7 +118520,7 @@ krD
czD
cAL
cBG
cyy
czD
czD
czD
cFu
+1 -3
View File
@@ -2367,9 +2367,7 @@
/obj/item/seeds/cotton{
yield = 5
},
/obj/item/seeds/cotton{
yield = 5
},
/obj/item/seeds/cotton/durathread,
/turf/open/indestructible/boss,
/area/ruin/unpowered/ash_walkers)
"Vj" = (
+8 -17
View File
@@ -2150,11 +2150,6 @@
/obj/machinery/status_display/supply,
/turf/closed/wall,
/area/quartermaster/storage)
"adq" = (
/obj/effect/spawner/structure/window/reinforced,
/obj/structure/sign/warning/vacuum,
/turf/open/floor/plating,
/area/quartermaster/storage)
"adr" = (
/obj/structure/cable{
icon_state = "4-8"
@@ -37688,6 +37683,10 @@
/obj/machinery/atmospherics/miner/carbon_dioxide,
/turf/open/floor/engine/co2,
/area/engine/atmos)
"hQH" = (
/obj/structure/sign/warning/vacuum,
/turf/closed/wall,
/area/quartermaster/storage)
"hTn" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/obj/machinery/door/airlock/research/glass{
@@ -38292,14 +38291,6 @@
/obj/structure/flora/ausbushes/ywflowers,
/turf/open/floor/grass,
/area/hallway/secondary/entry)
"lvt" = (
/obj/effect/spawner/structure/window/reinforced,
/obj/structure/sign/warning/vacuum,
/obj/machinery/light{
dir = 4
},
/turf/open/floor/plating,
/area/quartermaster/storage)
"lvw" = (
/obj/machinery/atmospherics/pipe/simple/orange/visible,
/obj/effect/decal/cleanable/dirt,
@@ -91224,7 +91215,7 @@ aac
swM
aeh
agB
ado
adn
agB
ahq
adp
@@ -91478,13 +91469,13 @@ aaa
aaa
aaa
aaa
adq
ado
aeg
aeX
adp
hQH
agC
ahr
lvt
ado
aae
aae
aae
File diff suppressed because it is too large Load Diff
+10 -12
View File
@@ -473,12 +473,6 @@
},
/turf/open/floor/plasteel,
/area/engine/gravity_generator)
"bs" = (
/obj/structure/cable{
icon_state = "1-2"
},
/turf/closed/wall/r_wall,
/area/engine/gravity_generator)
"bt" = (
/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
dir = 8
@@ -654,7 +648,9 @@
pixel_x = -25
},
/obj/structure/closet/firecloset/full,
/obj/structure/cable,
/obj/structure/cable{
icon_state = "0-2"
},
/turf/open/floor/plasteel{
dir = 9
},
@@ -793,7 +789,9 @@
},
/area/hallway/primary/central)
"cl" = (
/obj/structure/cable,
/obj/structure/cable{
icon_state = "1-2"
},
/turf/open/floor/plasteel{
dir = 8
},
@@ -3614,8 +3612,8 @@ ak
aT
ak
ak
bs
bL
ak
bE
bE
bE
cc
@@ -3669,7 +3667,7 @@ aU
bg
bq
ak
bL
bE
bE
bE
cd
@@ -3723,7 +3721,7 @@ bh
bh
br
ak
bL
bE
bE
bE
cc
+2 -11
View File
@@ -2526,7 +2526,6 @@
/obj/machinery/atmospherics/components/unary/vent_pump/on{
dir = 1
},
/turf/open/space/basic,
/turf/open/floor/carpet/blackred,
/area/crew_quarters/bar)
"gR" = (
@@ -2806,7 +2805,6 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
/turf/open/space/basic,
/turf/open/floor/carpet/blackred,
/area/crew_quarters/bar)
"vP" = (
@@ -2832,7 +2830,6 @@
/turf/open/floor/plasteel,
/area/hallway/primary/central)
"wf" = (
/turf/open/space/basic,
/turf/open/floor/carpet/blackred,
/area/crew_quarters/bar)
"wS" = (
@@ -2854,7 +2851,6 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
/turf/open/space/basic,
/turf/open/floor/carpet/blackred,
/area/crew_quarters/bar)
"xh" = (
@@ -2869,7 +2865,6 @@
/obj/structure/cable{
icon_state = "4-8"
},
/turf/open/space/basic,
/turf/open/floor/carpet/blackred,
/area/crew_quarters/bar)
"yt" = (
@@ -3002,7 +2997,7 @@
/turf/open/floor/grass,
/area/hydroponics)
"Ga" = (
/obj/machinery/vending/boozeomat/all_access,
/obj/machinery/vending/boozeomat,
/obj/machinery/airalarm{
dir = 8;
pixel_x = 24
@@ -3041,7 +3036,6 @@
/area/bridge)
"IB" = (
/obj/structure/chair/stool/bar,
/turf/open/space/basic,
/turf/open/floor/carpet/blackred,
/area/crew_quarters/bar)
"JF" = (
@@ -3086,7 +3080,6 @@
/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
dir = 8
},
/turf/open/space/basic,
/turf/open/floor/carpet/blackred,
/area/crew_quarters/bar)
"Ly" = (
@@ -3115,7 +3108,6 @@
icon_state = "1-4"
},
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/turf/open/space/basic,
/turf/open/floor/carpet/blackred,
/area/crew_quarters/bar)
"MS" = (
@@ -3334,7 +3326,6 @@
/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
dir = 4
},
/turf/open/space/basic,
/turf/open/floor/carpet/blackred,
/area/crew_quarters/bar)
@@ -9446,7 +9437,7 @@ fh
fh
eY
eR
fh
et
eR
fc
fh
+3 -3
View File
@@ -13278,7 +13278,7 @@
/turf/open/floor/engine/cult,
/area/wizard_station)
"ED" = (
/obj/machinery/vending/boozeomat/all_access,
/obj/machinery/vending/boozeomat,
/turf/closed/indestructible{
icon = 'icons/turf/walls/wood_wall.dmi';
icon_state = "wood";
@@ -17650,7 +17650,7 @@
/turf/open/floor/wood,
/area/syndicate_mothership)
"Sj" = (
/obj/machinery/vending/autodrobe/all_access{
/obj/machinery/vending/autodrobe{
extended_inventory = 1
},
/obj/machinery/light,
@@ -58771,7 +58771,7 @@ iX
iX
jm
jr
iX
iF
jr
jK
iX
+2 -6
View File
@@ -326,10 +326,6 @@
/mob/living/simple_animal/hostile/gorilla,
/turf/open/floor/plasteel/shuttle,
/area/shuttle/escape)
"bn" = (
/obj/structure/reagent_dispensers/keg/semen,
/turf/open/floor/plating,
/area/shuttle/escape)
"bo" = (
/obj/structure/closet/crate/freezer/surplus_limbs,
/turf/open/floor/plasteel/shuttle,
@@ -539,7 +535,7 @@ aD
fV
Pi
bm
bn
ax
bs
bu
"}
@@ -610,7 +606,7 @@ aX
aD
fV
bi
bn
ax
bl
fV
ab
+1 -1
View File
@@ -422,7 +422,7 @@
/turf/open/floor/carpet/red,
/area/shuttle/escape/luxury)
"bD" = (
/obj/machinery/vending/boozeomat/all_access,
/obj/machinery/vending/boozeomat,
/turf/open/floor/carpet/red,
/area/shuttle/escape/luxury)
"bE" = (
+1 -1
View File
@@ -733,7 +733,7 @@
/turf/open/floor/plasteel,
/area/shuttle/pirate)
"bH" = (
/obj/machinery/vending/boozeomat/all_access,
/obj/machinery/vending/boozeomat,
/obj/effect/turf_decal/tile/bar,
/obj/effect/turf_decal/tile/bar{
dir = 1
+1 -1
View File
@@ -145,7 +145,7 @@
/turf/open/floor/plating,
/area/shuttle/abandoned/crew)
"ap" = (
/obj/machinery/vending/boozeomat/all_access,
/obj/machinery/vending/boozeomat,
/obj/effect/decal/cleanable/dirt{
desc = "A thin layer of dust coating the floor.";
name = "dust"
+10 -7
View File
@@ -25,35 +25,38 @@
//SubSystem flags (Please design any new flags so that the default is off, to make adding flags to subsystems easier)
//subsystem does not initialize.
#define SS_NO_INIT 1
#define SS_NO_INIT (1<<0)
//subsystem does not fire.
// (like can_fire = 0, but keeps it from getting added to the processing subsystems list)
// (Requires a MC restart to change)
#define SS_NO_FIRE 2
#define SS_NO_FIRE (1<<1)
//subsystem only runs on spare cpu (after all non-background subsystems have ran that tick)
// SS_BACKGROUND has its own priority bracket
#define SS_BACKGROUND 4
#define SS_BACKGROUND (1<<2)
//subsystem does not tick check, and should not run unless there is enough time (or its running behind (unless background))
#define SS_NO_TICK_CHECK 8
#define SS_NO_TICK_CHECK (1<<3)
//Treat wait as a tick count, not DS, run every wait ticks.
// (also forces it to run first in the tick, above even SS_NO_TICK_CHECK subsystems)
// (implies all runlevels because of how it works)
// (overrides SS_BACKGROUND)
// This is designed for basically anything that works as a mini-mc (like SStimer)
#define SS_TICKER 16
#define SS_TICKER (1<<4)
//keep the subsystem's timing on point by firing early if it fired late last fire because of lag
// ie: if a 20ds subsystem fires say 5 ds late due to lag or what not, its next fire would be in 15ds, not 20ds.
#define SS_KEEP_TIMING 32
#define SS_KEEP_TIMING (1<<5)
//Calculate its next fire after its fired.
// (IE: if a 5ds wait SS takes 2ds to run, its next fire should be 5ds away, not 3ds like it normally would be)
// This flag overrides SS_KEEP_TIMING
#define SS_POST_FIRE_TIMING 64
#define SS_POST_FIRE_TIMING (1<<6)
/// Show in stat() by default even if SS_NO_FIRE
#define SS_ALWAYS_SHOW_STAT (1<<7)
//SUBSYSTEM STATES
#define SS_IDLE 0 //aint doing shit.
+38 -22
View File
@@ -20,26 +20,41 @@ GLOBAL_LIST_INIT(bitflags, list(1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 204
#define DF_ISPROCESSING (1<<2)
//FLAGS BITMASK
#define HEAR_1 (1<<3) // This flag is what recursive_hear_check() uses to determine wether to add an item to the hearer list or not.
#define CHECK_RICOCHET_1 (1<<4) // Projectiels will check ricochet on things impacted that have this.
#define CONDUCT_1 (1<<5) // conducts electricity (metal etc.)
#define NODECONSTRUCT_1 (1<<7) // For machines and structures that should not break into parts, eg, holodeck stuff
#define OVERLAY_QUEUED_1 (1<<8) // atom queued to SSoverlay
#define ON_BORDER_1 (1<<9) // item has priority to check when entering or leaving
#define PREVENT_CLICK_UNDER_1 (1<<11) //Prevent clicking things below it on the same turf eg. doors/ fulltile windows
///This flag is what recursive_hear_check() uses to determine wether to add an item to the hearer list or not.
#define HEAR_1 (1<<3)
///Projectiels will check ricochet on things impacted that have this.
#define CHECK_RICOCHET_1 (1<<4)
///Conducts electricity (metal etc.).
#define CONDUCT_1 (1<<5)
///For machines and structures that should not break into parts, eg, holodeck stuff.
#define NODECONSTRUCT_1 (1<<7)
///Atom queued to SSoverlay.
#define OVERLAY_QUEUED_1 (1<<8)
///Item has priority to check when entering or leaving.
#define ON_BORDER_1 (1<<9)
///Prevent clicking things below it on the same turf eg. doors/ fulltile windows.
#define PREVENT_CLICK_UNDER_1 (1<<11)
#define HOLOGRAM_1 (1<<12)
#define TESLA_IGNORE_1 (1<<13) // TESLA_IGNORE grants immunity from being targeted by tesla-style electricity
#define INITIALIZED_1 (1<<14) //Whether /atom/Initialize() has already run for the object
#define ADMIN_SPAWNED_1 (1<<15) //was this spawned by an admin? used for stat tracking stuff.
#define PREVENT_CONTENTS_EXPLOSION_1 (1<<16) /// should not get harmed if this gets caught by an explosion?
///Prevents mobs from getting chainshocked by teslas and the supermatter.
#define SHOCKED_1 (1<<13)
///Whether /atom/Initialize() has already run for the object.
#define INITIALIZED_1 (1<<14)
///was this spawned by an admin? used for stat tracking stuff.
#define ADMIN_SPAWNED_1 (1<<15)
/// should not get harmed if this gets caught by an explosion?
#define PREVENT_CONTENTS_EXPLOSION_1 (1<<16)
/// Early returns mob.face_atom()
#define BLOCK_FACE_ATOM_1 (1<<17)
//turf-only flags
#define NOJAUNT_1 (1<<0)
#define UNUSED_RESERVATION_TURF_1 (1<<1)
#define CAN_BE_DIRTY_1 (1<<2) // If a turf can be made dirty at roundstart. This is also used in areas.
#define NO_LAVA_GEN_1 (1<<6) //Blocks lava rivers being generated on the turf
#define NO_RUINS_1 (1<<10) //Blocks ruins spawning on the turf
///If a turf can be made dirty at roundstart. This is also used in areas.
#define CAN_BE_DIRTY_1 (1<<2)
///Blocks lava rivers being generated on the turf.
#define NO_LAVA_GEN_1 (1<<6)
///Blocks ruins spawning on the turf.
#define NO_RUINS_1 (1<<10)
/*
These defines are used specifically with the atom/pass_flags bitmask
@@ -75,14 +90,15 @@ GLOBAL_LIST_INIT(bitflags, list(1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 204
#define GOLIATH_WEAKNESS (1<<9) //CIT CHANGE
//tesla_zap
#define TESLA_MACHINE_EXPLOSIVE (1<<0)
#define TESLA_ALLOW_DUPLICATES (1<<1)
#define TESLA_OBJ_DAMAGE (1<<2)
#define TESLA_MOB_DAMAGE (1<<3)
#define TESLA_MOB_STUN (1<<4)
#define ZAP_MACHINE_EXPLOSIVE (1<<0)
#define ZAP_ALLOW_DUPLICATES (1<<1)
#define ZAP_OBJ_DAMAGE (1<<2)
#define ZAP_MOB_DAMAGE (1<<3)
#define ZAP_MOB_STUN (1<<4)
#define TESLA_DEFAULT_FLAGS ALL
#define TESLA_FUSION_FLAGS TESLA_OBJ_DAMAGE | TESLA_MOB_DAMAGE | TESLA_MOB_STUN
#define ZAP_DEFAULT_FLAGS ALL
#define ZAP_FUSION_FLAGS ZAP_OBJ_DAMAGE | ZAP_MOB_DAMAGE | ZAP_MOB_STUN
#define ZAP_SUPERMATTER_FLAGS NONE
//EMP protection
#define EMP_PROTECT_SELF (1<<0)
-7
View File
@@ -83,10 +83,3 @@
#define SPAM_TRIGGER_WARNING 5 //Number of identical messages required before the spam-prevention will warn you to stfu
#define SPAM_TRIGGER_AUTOMUTE 10 //Number of identical messages required before the spam-prevention will automute you
///Max length of a keypress command before it's considered to be a forged packet/bogus command
#define MAX_KEYPRESS_COMMANDLENGTH 16
///Max amount of keypress messages per second over two seconds before client is autokicked
#define MAX_KEYPRESS_AUTOKICK 100
///Length of max held keys
#define MAX_HELD_KEYS 15
+18
View File
@@ -0,0 +1,18 @@
// Defines for managed input/keybinding system.
/// Max length of a keypress command before it's considered to be a forged packet/bogus command
#define MAX_KEYPRESS_COMMANDLENGTH 16
/// Maximum keys that can be bound to one button
#define MAX_COMMANDS_PER_KEY 5
/// Maximum keys per keybind
#define MAX_KEYS_PER_KEYBIND 3
/// Max amount of keypress messages per second over two seconds before client is autokicked
#define MAX_KEYPRESS_AUTOKICK 100
/// Max keys that can be held down at once by a client
#define MAX_HELD_KEYS 15
/// Macroset name of hotkeys/keybind only/modern mode
#define SKIN_MACROSET_HOTKEYS "hotkeys"
/// Macroset name of classic hotkey mode
#define SKIN_MACROSET_CLASSIC_HOTKEYS "oldhotkeys"
/// Macroset name of classic input mode
#define SKIN_MACROSET_CLASSIC_INPUT "oldinput"
+2
View File
@@ -298,6 +298,8 @@ GLOBAL_LIST_INIT(atmos_adjacent_savings, list(0,0))
#define ARCHIVE_TEMPERATURE(gas) gas.temperature_archived = gas.temperature
#define ARCHIVE(gas) gas.temperature_archived = gas.temperature; gas.gas_archive = gas.gases.Copy();
GLOBAL_LIST_INIT(pipe_paint_colors, list(
"amethyst" = rgb(130,43,255), //supplymain
"blue" = rgb(0,0,255),
+1
View File
@@ -43,6 +43,7 @@
#define COLOR_RED_GRAY "#B4696A"
#define COLOR_PALE_BLUE_GRAY "#98C5DF"
#define COLOR_PALE_GREEN_GRAY "#B7D993"
#define COLOR_PALE_ORANGE "#FFC066"
#define COLOR_PALE_RED_GRAY "#D59998"
#define COLOR_PALE_PURPLE_GRAY "#CBB1CA"
#define COLOR_PURPLE_GRAY "#AE8CA8"
+15 -2
View File
@@ -35,9 +35,9 @@
/// Default combat flags for those affected by ((stamina combat))
#define COMBAT_FLAGS_DEFAULT NONE
/// Default combat flags for everyone else (so literally everyone but humans)
#define COMBAT_FLAGS_STAMSYSTEM_EXEMPT (COMBAT_FLAG_SPRINT_ACTIVE | COMBAT_FLAG_COMBAT_ACTIVE | COMBAT_FLAG_SPRINT_TOGGLED | COMBAT_FLAG_COMBAT_TOGGLED)
#define COMBAT_FLAGS_STAMSYSTEM_EXEMPT (COMBAT_FLAG_SPRINT_ACTIVE | COMBAT_FLAG_COMBAT_ACTIVE | COMBAT_FLAG_SPRINT_TOGGLED | COMBAT_FLAG_COMBAT_TOGGLED | COMBAT_FLAG_SPRINT_FORCED | COMBAT_FLAG_COMBAT_FORCED)
/// Default combat flags for those only affected by sprint (so just silicons)
#define COMBAT_FLAGS_STAMEXEMPT_YESSPRINT (COMBAT_FLAG_COMBAT_ACTIVE | COMBAT_FLAG_COMBAT_TOGGLED)
#define COMBAT_FLAGS_STAMEXEMPT_YESSPRINT (COMBAT_FLAG_COMBAT_ACTIVE | COMBAT_FLAG_COMBAT_TOGGLED | COMBAT_FLAG_COMBAT_FORCED)
/// The user wants combat mode on
#define COMBAT_FLAG_COMBAT_TOGGLED (1<<0)
@@ -57,6 +57,10 @@
#define COMBAT_FLAG_INTENTIONALLY_RESTING (1<<7)
/// Currently stamcritted but not as violently
#define COMBAT_FLAG_SOFT_STAMCRIT (1<<8)
/// Force combat mode on at all times, overrides everything including combat disable traits.
#define COMBAT_FLAG_COMBAT_FORCED (1<<9)
/// Force sprint mode on at all times, overrides everything including sprint disable traits.
#define COMBAT_FLAG_SPRINT_FORCED (1<<10)
// Helpers for getting someone's stamcrit state. Cast to living.
#define NOT_STAMCRIT 0
@@ -248,6 +252,15 @@ GLOBAL_LIST_INIT(shove_disarming_types, typecacheof(list(
#define TOTAL_MASS_MEDIEVAL_WEAPON 3.6 //very, very generic average sword/warpick/etc. weight in pounds.
#define TOTAL_MASS_TOY_SWORD 1.5
//stamina cost defines.
#define STAM_COST_ATTACK_OBJ_MULT 1.2
#define STAM_COST_ATTACK_MOB_MULT 0.8
#define STAM_COST_BATON_MOB_MULT 1
#define STAM_COST_NO_COMBAT_MULT 1.25
#define STAM_COST_W_CLASS_MULT 1.25
#define STAM_COST_THROW_MULT 2
//bullet_act() return values
#define BULLET_ACT_HIT "HIT" //It's a successful hit, whatever that means in the context of the thing it's hitting.
#define BULLET_ACT_BLOCK "BLOCK" //It's a blocked hit, whatever that means in the context of the thing it's hitting.
+10
View File
@@ -1,3 +1,13 @@
/// Check whether or not we can block, without "triggering" a block. Basically run checks without effects like depleting shields.
/// Wrapper for do_run_block(). The arguments on that means the same as for this.
#define mob_check_block(object, damage, attack_text, attack_type, armour_penetration, attacker, def_zone, return_list)\
do_run_block(FALSE, object, damage, attack_text, attack_type, armour_penetration, attacker, check_zone(def_zone), return_list)
/// Runs a block "sequence", effectively checking and then doing effects if necessary.
/// Wrapper for do_run_block(). The arguments on that means the same as for this.
#define mob_run_block(object, damage, attack_text, attack_type, armour_penetration, attacker, def_zone, return_list)\
do_run_block(TRUE, object, damage, attack_text, attack_type, armour_penetration, attacker, check_zone(def_zone), return_list)
// Don't ask why there's block_parry.dm and this. This is for the run_block() system, which is the "parent" system of the directional block and parry systems.
/// Bitflags for check_block() and handle_block(). Meant to be combined. You can be hit and still reflect, for example, if you do not use BLOCK_SUCCESS.
+6 -1
View File
@@ -103,4 +103,9 @@
#define RCD_COMPUTER 16
#define RCD_UPGRADE_FRAMES 1
#define RCD_UPGRADE_SIMPLE_CIRCUITS 2
#define RCD_UPGRADE_SIMPLE_CIRCUITS 2
//Electrochromatic window defines.
#define NOT_ELECTROCHROMATIC 0
#define ELECTROCHROMATIC_OFF 1
#define ELECTROCHROMATIC_DIMMED 2
+26 -6
View File
@@ -89,7 +89,7 @@
#define COMSIG_EXIT_AREA "exit_area" //from base of area/Exited(): (/area)
#define COMSIG_CLICK "atom_click" //from base of atom/Click(): (location, control, params, mob/user)
#define COMSIG_CLICK_SHIFT "shift_click" //from base of atom/ShiftClick(): (/mob)
#define COMSIG_CLICK_SHIFT "shift_click" //from base of atom/ShiftClick(): (/mob), return flags also used by other signals.
#define COMPONENT_ALLOW_EXAMINATE 1
#define COMPONENT_DENY_EXAMINATE 2 //Higher priority compared to the above one
@@ -141,13 +141,17 @@
#define HEARING_SOURCE 8*/
#define COMSIG_MOVABLE_DISPOSING "movable_disposing" //called when the movable is added to a disposal holder object for disposal movement: (obj/structure/disposalholder/holder, obj/machinery/disposal/source)
#define COMSIG_MOVABLE_TELEPORTED "movable_teleported" //from base of do_teleport(): (channel, turf/origin, turf/destination)
// /mind signals
#define COMSIG_PRE_MIND_TRANSFER "pre_mind_transfer" //from base of mind/transfer_to() before it's done: (new_character, old_character)
#define COMPONENT_STOP_MIND_TRANSFER 1 //stops the mind transfer from happening.
#define COMSIG_MIND_TRANSFER "mind_transfer" //from base of mind/transfer_to() when it's done: (new_character, old_character)
// /mob signals
#define COMSIG_MOB_EXAMINATE "mob_examinate" //from base of /mob/verb/examinate(): (atom/A)
#define COMSIG_MOB_CLICKED_SHIFT_ON "mob_shift_click_on" //from base of /atom/ShiftClick(): (atom/A), for return values, see COMSIG_CLICK_SHIFT
#define COMSIG_MOB_FOV_VIEW "mob_visible_atoms" //from base of mob/fov_view(): (list/visible_atoms)
#define COMSIG_MOB_EXAMINATE "mob_examinate" //from base of /mob/verb/examinate(): (atom/A), for return values, see COMSIG_CLICK_SHIFT
#define COMPONENT_EXAMINATE_BLIND 3 //outputs the "something is there but you can't see it" message.
#define COMSIG_MOB_DEATH "mob_death" //from base of mob/death(): (gibbed)
#define COMPONENT_BLOCK_DEATH_BROADCAST 1 //stops the death from being broadcasted in deadchat.
#define COMSIG_MOB_CLICKON "mob_clickon" //from base of mob/clickon(): (atom/A, params)
@@ -181,9 +185,14 @@
#define SPEECH_LANGUAGE 5
// #define SPEECH_IGNORE_SPAM 6
// #define SPEECH_FORCED 7
#define COMSIG_MOB_FOV_VIEWER "mob_is_viewer" //from base of /fov_viewers(): (atom/center, depth, viewers_list)
#define COMSIG_MOB_GET_VISIBLE_MESSAGE "mob_get_visible_message" //from base of atom/visible_message(): (atom/A, msg, range, ignored_mobs)
#define COMPONENT_NO_VISIBLE_MESSAGE 1 //exactly what's said on the tin.
#define COMSIG_MOB_ANTAG_ON_GAIN "mob_antag_on_gain" //from base of /datum/antagonist/on_gain(): (antag_datum)
#define COMSIG_MOB_SPELL_CAN_CAST "mob_spell_can_cast" //called from base of /obj/effect/proc_holder/spell/can_cast(): (spell)
#define COMSIG_MOB_SPELL_CAN_CAST "mob_spell_can_cast" //from base of /obj/effect/proc_holder/spell/can_cast(): (spell)
#define COMSIG_ROBOT_UPDATE_ICONS "robot_update_icons" //from base of robot/update_icons(): ()
// /mob/living signals
#define COMSIG_LIVING_REGENERATE_LIMBS "living_regenerate_limbs" //from base of /mob/living/regenerate_limbs(): (noheal, excluded_limbs)
@@ -191,11 +200,16 @@
#define COMSIG_LIVING_IGNITED "living_ignite" //from base of mob/living/IgniteMob() (/mob/living)
#define COMSIG_LIVING_EXTINGUISHED "living_extinguished" //from base of mob/living/ExtinguishMob() (/mob/living)
#define COMSIG_LIVING_ELECTROCUTE_ACT "living_electrocute_act" //from base of mob/living/electrocute_act(): (shock_damage, source, siemens_coeff, flags)
#define COMSIG_LIVING_SHOCK_PREVENTED "living_shock_prevented" //sent when items with siemen coeff. of 0 block a shock: (power_source, source, siemens_coeff, dist_check)
#define COMSIG_LIVING_MINOR_SHOCK "living_minor_shock" //sent by stuff like stunbatons and tasers: ()
#define COMSIG_LIVING_REVIVE "living_revive" //from base of mob/living/revive() (full_heal, admin_revive)
#define COMSIG_MOB_CLIENT_LOGIN "comsig_mob_client_login" //sent when a mob/login() finishes: (client)
#define COMSIG_MOB_CLIENT_LOGOUT "comsig_mob_client_logout" //sent when a mob/logout() starts: (client)
#define COMSIG_MOB_CLIENT_MOVE "comsig_mob_client_move" //sent when client/Move() finishes with no early returns: (client, direction, n, oldloc)
#define COMSIG_MOB_CLIENT_LOGIN "mob_client_login" //sent when a mob/login() finishes: (client)
#define COMSIG_MOB_CLIENT_LOGOUT "mob_client_logout" //sent when a mob/logout() starts: (client)
#define COMSIG_MOB_CLIENT_MOVE "mob_client_move" //sent when client/Move() finishes with no early returns: (client, direction, n, oldloc)
#define COMSIG_MOB_CLIENT_CHANGE_VIEW "mob_client_change_view" //from base of /client/change_view(): (client, old_view, view)
#define COMSIG_MOB_RESET_PERSPECTIVE "mob_reset_perspective" //from base of /mob/reset_perspective(): (atom/target)
#define COMSIG_LIVING_GUN_PROCESS_FIRE "living_gun_process_fire" //from base of /obj/item/gun/proc/process_fire(): (atom/target, params, zone_override)
// This returns flags as defined for block in __DEFINES/combat.dm!
#define COMSIG_LIVING_RUN_BLOCK "living_do_run_block" //from base of mob/living/do_run_block(): (real_attack, atom/object, damage, attack_text, attack_type, armour_penetration, mob/attacker, def_zone)
@@ -256,6 +270,9 @@
// THE FOLLOWING TWO BLOCKS SHOULD RETURN BLOCK FLAGS AS DEFINED IN __DEFINES/combat.dm!
#define COMSIG_ITEM_CHECK_BLOCK "check_block" //from base of obj/item/check_block(): (mob/living/owner, atom/object, damage, attack_text, attack_type, armour_penetration, mob/attacker, def_zone, final_block_chance, list/block_return)
#define COMSIG_ITEM_RUN_BLOCK "run_block" //from base of obj/item/run_block(): (mob/living/owner, atom/object, damage, attack_text, attack_type, armour_penetration, mob/attacker, def_zone, final_block_chance, list/block_return)
// Item mouse siganls
#define COMSIG_ITEM_MOUSE_EXIT "item_mouse_exit" //from base of obj/item/MouseExited(): (location, control, params)
#define COMSIG_ITEM_MOUSE_ENTER "item_mouse_enter" //from base of obj/item/MouseEntered(): (location, control, params)
#define COMSIG_ITEM_DECONSTRUCTOR_DEEPSCAN "deconstructor_deepscan" //Called by deconstructive analyzers deepscanning an item: (obj/machinery/rnd/destructive_analyzer/analyzer_machine, mob/user, list/information_list)
// Uncovered information
#define COMPONENT_DEEPSCAN_UNCOVERED_INFORMATION 1
@@ -302,6 +319,9 @@
#define COMSIG_SPECIES_GAIN "species_gain" //from datum/species/on_species_gain(): (datum/species/new_species, datum/species/old_species)
#define COMSIG_SPECIES_LOSS "species_loss" //from datum/species/on_species_loss(): (datum/species/lost_species)
// /datum/mutation signals
#define COMSIG_HUMAN_MUTATION_LOSS "human_mutation_loss" //from datum/mutation/human/on_losing(): (datum/mutation/human/lost_mutation)
/*******Component Specific Signals*******/
//Janitor
#define COMSIG_TURF_IS_WET "check_turf_wet" //(): Returns bitflags of wet values.
+35
View File
@@ -0,0 +1,35 @@
#define STARTING_PAYCHECKS 5
#define PAYCHECK_ASSISTANT 25
#define PAYCHECK_MINIMAL 75
#define PAYCHECK_EASY 125
#define PAYCHECK_MEDIUM 175
#define PAYCHECK_HARD 200
#define PAYCHECK_COMMAND 250
#define MAX_GRANT_CIV 2500
#define MAX_GRANT_ENG 3000
#define MAX_GRANT_SCI 5000
#define MAX_GRANT_SECMEDSRV 3000
#define ACCOUNT_CIV "CIV"
#define ACCOUNT_CIV_NAME "Civil Budget"
#define ACCOUNT_ENG "ENG"
#define ACCOUNT_ENG_NAME "Engineering Budget"
#define ACCOUNT_SCI "SCI"
#define ACCOUNT_SCI_NAME "Scientific Budget"
#define ACCOUNT_MED "MED"
#define ACCOUNT_MED_NAME "Medical Budget"
#define ACCOUNT_SRV "SRV"
#define ACCOUNT_SRV_NAME "Service Budget"
#define ACCOUNT_CAR "CAR"
#define ACCOUNT_CAR_NAME "Cargo Budget"
#define ACCOUNT_SEC "SEC"
#define ACCOUNT_SEC_NAME "Defense Budget"
#define NO_FREEBIES "commies go home"
//ID bank account support defines.
#define ID_NO_BANK_ACCOUNT 0
#define ID_FREE_BANK_ACCOUNT 1
#define ID_LOCKED_BANK_ACCOUNT 2
+9
View File
@@ -24,6 +24,15 @@
#define FOOTPRINT_SNAKE "snake"
#define FOOTPRINT_DRAG "drag"
//footstep mob defines
#define FOOTSTEP_MOB_CLAW 1
#define FOOTSTEP_MOB_BAREFOOT 2
#define FOOTSTEP_MOB_HEAVY 3
#define FOOTSTEP_MOB_SHOE 4
#define FOOTSTEP_MOB_HUMAN 5 //Warning: Only works on /mob/living/carbon/human
#define FOOTSTEP_MOB_SLIME 6
#define FOOTSTEP_MOB_CRAWL 7
/*
id = list(
-44
View File
@@ -148,50 +148,6 @@ GLOBAL_LIST_INIT(turfs_without_ground, typecacheof(list(
#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,
/mob/living/simple_animal/hostile/asteroid/ice_whelp,
/mob/living/simple_animal/hostile/asteroid/wolf,
/mob/living/simple_animal/hostile/asteroid/polarbear
)))
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))
+21 -2
View File
@@ -3,5 +3,24 @@
#define LANGUAGE_HIDE_ICON_IF_UNDERSTOOD 4
#define LANGUAGE_HIDE_ICON_IF_NOT_UNDERSTOOD 8
#define LANGUAGE_KNOWN "language_known"
#define LANGUAGE_SHADOWED "language_shadowed"
// LANGUAGE SOURCE DEFINES
#define LANGUAGE_ALL "all" // For use in full removal only.
#define LANGUAGE_ATOM "atom"
#define LANGUAGE_MIND "mind"
#define LANGUAGE_ABSORB "absorb"
#define LANGUAGE_APHASIA "aphasia"
#define LANGUAGE_BLOODSUCKER "bloodsucker"
#define LANGUAGE_CLOCKIE "clockie"
#define LANGUAGE_CULTIST "cultist"
#define LANGUAGE_CURATOR "curator"
#define LANGUAGE_DEVIL "devil"
#define LANGUAGE_GLAND "gland"
#define LANGUAGE_HAT "hat"
#define LANGUAGE_HIGH "high"
#define LANGUAGE_MALF "malf"
#define LANGUAGE_MASTER "master"
#define LANGUAGE_SOFTWARE "software"
#define LANGUAGE_STONER "stoner"
#define LANGUAGE_VASSAL "vassal"
#define LANGUAGE_VOICECHANGE "voicechange"
+41 -18
View File
@@ -11,16 +11,38 @@
#define PLANE_SPACE_PARALLAX_RENDER_TARGET "PLANE_SPACE_PARALLAX"
#define OPENSPACE_LAYER 17 //Openspace layer over all
#define OPENSPACE_PLANE -4 //Openspace plane below all turfs
#define OPENSPACE_BACKDROP_PLANE -3 //Black square just over openspace plane to guaranteed cover all in openspace turf
#define OPENSPACE_PLANE -10 //Openspace plane below all turfs
#define OPENSPACE_BACKDROP_PLANE -9 //Black square just over openspace plane to guaranteed cover all in openspace turf
#define FLOOR_PLANE -2
#define FLOOR_PLANE -8
#define FLOOR_PLANE_RENDER_TARGET "FLOOR_PLANE"
#define GAME_PLANE -1
#define WALL_PLANE -7
#define WALL_PLANE_RENDER_TARGET "WALL_PLANE"
#define ABOVE_WALL_PLANE -6
#define ABOVE_WALL_PLANE_RENDER_TARGET "ABOVE_WALL_PLANE"
#define FIELD_OF_VISION_BLOCKER_PLANE -5
#define FIELD_OF_VISION_BLOCKER_RENDER_TARGET "*FIELD_OF_VISION_BLOCKER_PLANE"
#define FIELD_OF_VISION_PLANE -4
#define FIELD_OF_VISION_RENDER_TARGET "*FIELD_OF_VISION_PLANE"
#define FIELD_OF_VISION_LAYER 17 //used to place the visual (not the mask) shadow cone above any other floor plane stuff.
#define GAME_PLANE -3
#define GAME_PLANE_RENDER_TARGET "GAME_PLANE"
#define FIELD_OF_VISION_VISUAL_PLANE -2 //Yea, FoV does require quite a few planes to work with 513 filters to a decent degree.
#define FIELD_OF_VISION_VISUAL_RENDER_TARGET "FIELD_OF_VISION_VISUAL_PLANE"
#define CHAT_PLANE -1 //We don't want heard messages to be hidden by FoV.
#define CHAT_LAYER 12.1 //Legacy, it doesn't matter that much because we are displayed above the game plane anyway.
#define BLACKNESS_PLANE 0 //To keep from conflicts with SEE_BLACKNESS internals
#define BLACKNESS_PLANE_RENDER_TARGET "BLACKNESS_PLANE"
///Layers most often used by atoms of plane lower than GAME_PLANE
#define SPACE_LAYER 1.8
//#define TURF_LAYER 2 //For easy recordkeeping; this is a byond define
#define MID_TURF_LAYER 2.02
@@ -40,11 +62,12 @@
#define GAS_PIPE_VISIBLE_LAYER 2.47
#define GAS_FILTER_LAYER 2.48
#define GAS_PUMP_LAYER 2.49
#define LOW_OBJ_LAYER 2.5
#define LOW_SIGIL_LAYER 2.52
#define SIGIL_LAYER 2.54
#define HIGH_SIGIL_LAYER 2.56
///Layers most often used by atoms of plane equal or higher than GAME_PLANE
#define BELOW_OPEN_DOOR_LAYER 2.6
#define BLASTDOOR_LAYER 2.65
#define OPEN_DOOR_LAYER 2.7
@@ -80,8 +103,9 @@
#define SPACEVINE_LAYER 4.8
#define SPACEVINE_MOB_LAYER 4.9
//#define FLY_LAYER 5 //For easy recordkeeping; this is a byond define
#define GASFIRE_LAYER 5.05
#define RIPPLE_LAYER 5.1
#define ABOVE_FLY_LAYER 5.1
#define GASFIRE_LAYER 5.2
#define RIPPLE_LAYER 5.3
#define GHOST_LAYER 6
#define LOW_LANDMARK_LAYER 9
@@ -91,8 +115,6 @@
#define MASSIVE_OBJ_LAYER 11
#define POINT_LAYER 12
#define CHAT_LAYER 12.1
#define EMISSIVE_BLOCKER_PLANE 12
#define EMISSIVE_BLOCKER_LAYER 12
#define EMISSIVE_BLOCKER_RENDER_TARGET "*EMISSIVE_BLOCKER_PLANE"
@@ -136,19 +158,20 @@
#define HUD_LAYER 21
#define HUD_RENDER_TARGET "HUD_PLANE"
#define VOLUMETRIC_STORAGE_BOX_PLANE 23
#define VOLUMETRIC_STORAGE_BOX_LAYER 23
#define VOLUMETRIC_STORAGE_BOX_PLANE 22
#define VOLUMETRIC_STORAGE_BOX_LAYER 22
#define VOLUMETRIC_STORAGE_BOX_RENDER_TARGET "VOLUME_STORAGE_BOX_PLANE"
#define VOLUMETRIC_STORAGE_ITEM_PLANE 24
#define VOLUMETRIC_STORAGE_ITEM_LAYER 24
#define VOLUMETRIC_STORAGE_ITEM_PLANE 23
#define VOLUMETRIC_STORAGE_ITEM_LAYER 23
#define VOLUMETRIC_STORAGE_ACTIVE_ITEM_LAYER 25
#define VOLUMETRIC_STORAGE_ACTIVE_ITEM_PLANE 25
#define VOLUMETRIC_STORAGE_ITEM_RENDER_TARGET "VOLUME_STORAGE_ITEM_PLANE"
#define ABOVE_HUD_PLANE 25
#define ABOVE_HUD_LAYER 25
#define ABOVE_HUD_PLANE 30
#define ABOVE_HUD_LAYER 30
#define ABOVE_HUD_RENDER_TARGET "ABOVE_HUD_PLANE"
#define SPLASHSCREEN_LAYER 30
#define SPLASHSCREEN_PLANE 30
#define SPLASHSCREEN_LAYER 90
#define SPLASHSCREEN_PLANE 90
#define SPLASHSCREEN_RENDER_TARGET "SPLASHSCREEN_PLANE"
+1
View File
@@ -18,6 +18,7 @@
#define INVESTIGATE_CIRCUIT "circuit"
#define INVESTIGATE_FERMICHEM "fermichem"
#define INVESTIGATE_RCD "rcd"
#define INVESTIGATE_CRYOGENICS "cryogenics"
// Logging types for log_message()
#define LOG_ATTACK (1 << 0)
+2
View File
@@ -41,6 +41,7 @@ require only minor tweaks.
#define ZTRAIT_ICE_RUINS "Ice Ruins"
#define ZTRAIT_ICE_RUINS_UNDERGROUND "Ice Ruins Underground"
#define ZTRAIT_ISOLATED_RUINS "Isolated Ruins" //Placing ruins on z levels with this trait will use turf reservation instead of usual placement.
#define ZTRAIT_VIRTUAL_REALITY "Virtual Reality"
//boolean - weather types that occur on the level
#define ZTRAIT_SNOWSTORM "Weather_Snowstorm"
@@ -80,6 +81,7 @@ require only minor tweaks.
ZTRAIT_BOMBCAP_MULTIPLIER = 5, \
ZTRAIT_BASETURF = /turf/open/lava/smooth/lava_land_surface)
#define ZTRAITS_REEBE list(ZTRAIT_REEBE = TRUE, ZTRAIT_BOMBCAP_MULTIPLIER = 0.5)
#define ZTRAITS_VR list(ZTRAIT_VIRTUAL_REALITY = TRUE, ZTRAIT_AWAY = TRUE)
#define DL_NAME "name"
#define DL_TRAITS "traits"
+2
View File
@@ -209,3 +209,5 @@
/// Make sure something is a boolean TRUE/FALSE 1/0 value, since things like bitfield & bitflag doesn't always give 1s and 0s.
#define FORCE_BOOLEAN(x) ((x)? TRUE : FALSE)
#define TILES_TO_PIXELS(tiles) (tiles * PIXELS)
+4 -1
View File
@@ -9,6 +9,9 @@
#define TEXT_EAST "[EAST]"
#define TEXT_WEST "[WEST]"
/// world.icon_size
#define PIXELS 32
//These get to go at the top, because they're special
//You can use these defines to get the typepath of the currently running proc/verb (yes procs + verbs are objects)
/* eg:
@@ -463,7 +466,7 @@ GLOBAL_LIST_INIT(pda_reskins, list(PDA_SKIN_CLASSIC = 'icons/obj/pda.dmi', PDA_S
#define PDAIMG(what) {"<span class="pda16x16 [#what]"></span>"}
//Filters
#define AMBIENT_OCCLUSION list("type"="drop_shadow","x"=0,"y"=-2,"size"=4,"color"="#04080FAA")
#define AMBIENT_OCCLUSION(_size, _color) list("type"="drop_shadow","x"=0,"y"=-2,"size"=_size,"color"=_color)
#define EYE_BLUR(size) list("type"="blur", "size"=size)
#define GRAVITY_MOTION_BLUR list("type"="motion_blur","x"=0,"y"=0)
+8
View File
@@ -138,6 +138,7 @@
#define MOOD_LEVEL_SAD4 -25
//Sanity levels for humans
#define SANITY_AMAZING 150
#define SANITY_GREAT 125
#define SANITY_NEUTRAL 100
#define SANITY_DISTURBED 75
@@ -289,8 +290,15 @@
#define HUMAN_FIRE_STACK_ICON_NUM 3
#define TYPING_INDICATOR_TIMEOUT 5 MINUTES
#define GRAB_PIXEL_SHIFT_PASSIVE 6
#define GRAB_PIXEL_SHIFT_AGGRESSIVE 12
#define GRAB_PIXEL_SHIFT_NECK 16
#define SLEEP_CHECK_DEATH(X) sleep(X); if(QDELETED(src) || stat == DEAD) return;
/// Field of vision defines.
#define FOV_90_DEGREES 90
#define FOV_180_DEGREES 180
#define FOV_270_DEGREES 270
+2 -1
View File
@@ -30,8 +30,9 @@
#define CHAT_GHOSTPDA (1<<8)
#define CHAT_GHOSTRADIO (1<<9)
#define CHAT_LOOC (1<<10)
#define CHAT_BANKCARD (1<<11)
#define TOGGLES_DEFAULT_CHAT (CHAT_OOC|CHAT_DEAD|CHAT_GHOSTEARS|CHAT_GHOSTSIGHT|CHAT_PRAYER|CHAT_RADIO|CHAT_PULLR|CHAT_GHOSTWHISPER|CHAT_GHOSTPDA|CHAT_GHOSTRADIO|CHAT_LOOC)
#define TOGGLES_DEFAULT_CHAT (CHAT_OOC|CHAT_DEAD|CHAT_GHOSTEARS|CHAT_GHOSTSIGHT|CHAT_PRAYER|CHAT_RADIO|CHAT_PULLR|CHAT_GHOSTWHISPER|CHAT_GHOSTPDA|CHAT_GHOSTRADIO|CHAT_LOOC|CHAT_BANKCARD)
#define PARALLAX_INSANE -1 //for show offs
#define PARALLAX_HIGH 0 //default.
+1 -1
View File
@@ -26,4 +26,4 @@
#define PROFILE_ITEM_LEN 2
#define PROFILE_ITEM_TIME 1
#define PROFILE_ITEM_COUNT 2
#define PROFILE_ITEM_COUNT 2
+13
View File
@@ -51,6 +51,19 @@
#define ASSEMBLY_FOURTH_STEP 3
#define ASSEMBLY_FIFTH_STEP 4
//Bot Upgrade defines
#define UPGRADE_CLEANER_ADVANCED_MOP (1<<0)
#define UPGRADE_CLEANER_BROOM (1<<1)
#define UPGRADE_MEDICAL_HYPOSPRAY (1<<0)
#define UPGRADE_MEDICAL_CHEM_BOARD (1<<1)
#define UPGRADE_MEDICAL_CRYO_BOARD (1<<2)
#define UPGRADE_MEDICAL_CHEM_MASTER (1<<3)
#define UPGRADE_MEDICAL_SLEEP_BOARD (1<<4)
#define UPGRADE_MEDICAL_PIERERCING (1<<5)
#define UPGRADE_FLOOR_ARTBOX (1<<0)
#define UPGRADE_FLOOR_SYNDIBOX (1<<1)
//Checks to determine borg availability depending on the server's config. These are defines in the interest of reducing copypasta
#define BORG_SEC_AVAILABLE (!CONFIG_GET(flag/disable_secborg) && GLOB.security_level >= CONFIG_GET(number/minimum_secborg_alert))
-1
View File
@@ -1 +0,0 @@
#define RUSTG_OVERRIDE_BUILTINS
+18 -1
View File
@@ -1,10 +1,27 @@
// rust_g.dm - DM API for rust_g extension library
#define RUST_G "rust_g"
#define RUSTG_JOB_NO_RESULTS_YET "NO RESULTS YET"
#define RUSTG_JOB_NO_SUCH_JOB "NO SUCH JOB"
#define RUSTG_JOB_ERROR "JOB PANICKED"
#define rustg_dmi_strip_metadata(fname) call(RUST_G, "dmi_strip_metadata")(fname)
#define rustg_dmi_create_png(fname,width,height,data) call(RUST_G, "dmi_create_png")(fname,width,height,data)
#define rustg_git_revparse(rev) call(RUST_G, "rg_git_revparse")(rev)
#define rustg_git_commit_date(rev) call(RUST_G, "rg_git_commit_date")(rev)
#define rustg_log_write(fname, text) call(RUST_G, "log_write")(fname, text)
#define rustg_log_write(fname, text, format) call(RUST_G, "log_write")(fname, text, format)
/proc/rustg_log_close_all() return call(RUST_G, "log_close_all")()
// RUST-G defines & procs for HTTP component
#define RUSTG_HTTP_METHOD_GET "get"
#define RUSTG_HTTP_METHOD_POST "post"
#define RUSTG_HTTP_METHOD_PUT "put"
#define RUSTG_HTTP_METHOD_DELETE "delete"
#define RUSTG_HTTP_METHOD_PATCH "patch"
#define RUSTG_HTTP_METHOD_HEAD "head"
#define rustg_http_request_blocking(method, url, body, headers) call(RUST_G, "http_request_blocking")(method, url, body, headers)
#define rustg_http_request_async(method, url, body, headers) call(RUST_G, "http_request_async")(method, url, body, headers)
#define rustg_http_check_request(req_id) call(RUST_G, "http_check_request")(req_id)
+103
View File
@@ -0,0 +1,103 @@
/// true/false
#define SKILL_PROGRESSION_BINARY 1
/// numerical
#define SKILL_PROGRESSION_NUMERICAL 2
/// Enum
#define SKILL_PROGRESSION_ENUM 3
/// Levels
#define SKILL_PROGRESSION_LEVEL 4
/// Max value of skill for numerical skills
#define SKILL_NUMERICAL_MAX 100
/// Min value of skill for numerical skills
#define SKILL_NUMERICAL_MIN 0
// Standard values for job starting skills
#define STARTING_SKILL_SURGERY_MEDICAL 35 //out of SKILL_NUMERICAL_MAX
// Standard values for job starting skill affinities
#define STARTING_SKILL_AFFINITY_DEF_JOB 1.2
// Standard values for skill gain (this is multiplied by affinity)
#define DEF_SKILL_GAIN 1
#define SKILL_GAIN_SURGERY_PER_STEP 0.25
//An extra point for each few seconds of delay when using a tool. Before the multiplier.
#define SKILL_GAIN_DELAY_DIVISOR 3 SECONDS
///Items skill_traits and other defines
#define SKILL_USE_TOOL "use_tool"
#define SKILL_TRAINING_TOOL "training_tool"
#define SKILL_ATTACK_MOB "attack_mob"
#define SKILL_TRAIN_ATTACK_MOB "train_attack_mob"
#define SKILL_ATTACK_OBJ "attack_obj"
#define SKILL_TRAIN_ATTACK_OBJ "train_attack_obj"
#define SKILL_STAMINA_COST "stamina_cost" //Influences the stamina cost from weapon usage.
#define SKILL_THROW_STAM_COST "throw_stam_cost"
#define SKILL_COMBAT_MODE "combat_mode" //The user must have combat mode on.
#define SKILL_SANITY "sanity" //Is the skill affected by (in)sanity.
#define SKILL_INTELLIGENCE "intelligence" //Is the skill affected by brain damage?
///competency_threshold defines
#define THRESHOLD_UNTRAINED "untrained"
#define THRESHOLD_COMPETENT "competent"
#define THRESHOLD_EXPERT "expert"
#define THRESHOLD_MASTER "master"
/// Level/Experience skills defines.
#define STD_XP_LVL_UP 100
#define STD_XP_LVL_MULTI 2
#define STD_MAX_LVL 4
#define RPG_MAX_LVL 100
#define DORF_XP_LVL_UP 400
#define DORF_XP_LVL_MULTI 100
#define DORF_MAX_LVL 20 // Dabbling, novice, adequate, [...], legendary +3, legendary +4, legendary +5
//level up methods defines
#define STANDARD_LEVEL_UP "standard_level_up"
#define DWARFY_LEVEL_UP "dwarfy_level_up"
//job skill level defines
#define JOB_SKILL_UNTRAINED 0
#define JOB_SKILL_BASIC 1
#define JOB_SKILL_TRAINED 2
#define JOB_SKILL_EXPERT 3
#define JOB_SKILL_MASTER 4
//other skill level defines, not an exhaustive catalogue, only contains be most relevant ones.
#define DORF_SKILL_COMPETENT 3
#define DORF_SKILL_EXPERT 8
#define DORF_SKILL_MASTER 12
/// Skill modifier defines and flags.
#define MODIFIER_SKILL_VALUE (1<<0)
#define MODIFIER_SKILL_AFFINITY (1<<1)
#define MODIFIER_SKILL_LEVEL (1<<2)
///makes the skill modifier a multiplier, not an addendum.
#define MODIFIER_SKILL_MULT (1<<3)
///Sets the skill to the defined value if lower than that. Highly reccomended you don't use it with MODIFIER_SKILL_MULT.
#define MODIFIER_SKILL_VIRTUE (1<<4)
///Does the opposite of the above. combining both effectively results in the skill being locked to the specified value.
#define MODIFIER_SKILL_HANDICAP (1<<5)
///Makes it untransferred by mind.transfer_to()
#define MODIFIER_SKILL_BODYBOUND (1<<6)
///Adds the difference of the current value and the value stored at the time the modifier was added to the result.
#define MODIFIER_SKILL_ORIGIN_DIFF (1<<7)
///Will this skill use competency thresholds instead of preset values
#define MODIFIER_USE_THRESHOLDS (1<<8)
#define MODIFIER_TARGET_VALUE "value"
#define MODIFIER_TARGET_LEVEL "level"
#define MODIFIER_TARGET_AFFINITY "affinity"
///Ascending priority defines.
#define MODIFIER_SKILL_PRIORITY_LOW 100
#define MODIFIER_SKILL_PRIORITY_DEF 50
#define MODIFIER_SKILL_PRIORITY_MAX 1 //max priority, meant for job/antag modifiers so they don't null out other (de)buffs
+48
View File
@@ -0,0 +1,48 @@
//How experience levels are calculated.
#define XP_LEVEL(std, multi, lvl) (std*((multi**lvl)/(multi-1))-std/(multi-1)) //don't use 1 as multi, you'll get division by zero errors
#define DORF_XP_LEVEL(std, extra, lvl) (std*lvl+extra*(lvl*(lvl/2+0.5)))
//More experience value getter macros
#define GET_STANDARD_LVL(lvl) XP_LEVEL(STD_XP_LVL_UP, STD_XP_LVL_MULTI, lvl)
#define GET_DORF_LVL(lvl) DORF_XP_LEVEL(DORF_XP_LVL_UP, DORF_XP_LVL_MULTI, lvl)
#define IS_SKILL_VALUE_GREATER(path, existing, new_value) GLOB.skill_datums[path].is_value_greater(existing, new_value)
#define SANITIZE_SKILL_VALUE(path, value) GLOB.skill_datums[path].sanitize_value(value)
///Doesn't automatically round the value.
#define SANITIZE_SKILL_LEVEL(path, lvl) clamp(lvl, 0, GLOB.skill_datums[path].max_levels)
/// Simple generic identifier macro.
#define GET_SKILL_MOD_ID(path, id) (id ? "[path]&[id]" : path)
/**
* A simple universal comsig for body bound skill modifiers.
* Technically they are still bound to the mind, but other signal procs will take care of adding and removing the modifier
* from/to new/old minds.
*/
#define ADD_SKILL_MODIFIER_BODY(path, id, body, prototype) \
prototype = GLOB.skill_modifiers[GET_SKILL_MOD_ID(path, id)] || new path(id, TRUE);\
if(body.mind){\
body.mind.add_skill_modifier(prototype.identifier)\
} else {\
prototype.RegisterSignal(body, COMSIG_MOB_ON_NEW_MIND, /datum/skill_modifier.proc/on_mob_new_mind, TRUE)\
}
/// Same as above but to remove the skill modifier.
#define REMOVE_SKILL_MODIFIER_BODY(path, id, body) \
if(GLOB.skill_modifiers[GET_SKILL_MOD_ID(path, id)]){\
if(body.mind){\
body.mind.remove_skill_modifier(GET_SKILL_MOD_ID(path, id))\
} else {\
GLOB.skill_modifiers[GET_SKILL_MOD_ID(path, id)].UnregisterSignal(body, COMSIG_MOB_ON_NEW_MIND)\
}\
}
///Macro used when adding generic singleton skill modifiers.
#define ADD_SINGLETON_SKILL_MODIFIER(mind, path, id) \
if(!GLOB.skill_modifiers[GET_SKILL_MOD_ID(path, id)]){\
new path(id, TRUE)\
};\
mind.add_skill_modifier(GET_SKILL_MOD_ID(path, id))
-28
View File
@@ -1,28 +0,0 @@
/// true/false
#define SKILL_PROGRESSION_BINARY 1
/// numerical
#define SKILL_PROGRESSION_NUMERICAL 2
/// Enum
#define SKILL_PROGRESSION_ENUM 3
/// Max value of skill for numerical skills
#define SKILL_NUMERICAL_MAX 100
/// Min value of skill for numerical skills
#define SKILL_NUMERICAL_MIN 0
// Standard values for job starting skills
#define STARTING_SKILL_SURGERY_MEDICAL 35 //out of SKILL_NUMERICAL_MAX
// Standard values for job starting skill affinities
#define STARTING_SKILL_AFFINITY_SURGERY_MEDICAL 1.2
// Standard values for skill gain (this is multiplied by affinity)
#define SKILL_GAIN_SURGERY_PER_STEP 0.25
// Misc
/// 40% speedup at 100 skill
#define SURGERY_SKILL_SPEEDUP_NUMERICAL_SCALE(number) clamp(number / 250, 1, 2)
@@ -11,7 +11,21 @@
#define STORAGE_LIMIT_MAX_W_CLASS (1<<3)
#define STORAGE_FLAGS_LEGACY_DEFAULT (STORAGE_LIMIT_MAX_ITEMS | STORAGE_LIMIT_COMBINED_W_CLASS | STORAGE_LIMIT_MAX_W_CLASS)
#define STORAGE_FLAGS_VOLUME_DEFAULT (STORAGE_LIMIT_MAX_ITEMS | STORAGE_LIMIT_VOLUME | STORAGE_LIMIT_MAX_W_CLASS)
#define STORAGE_FLAGS_VOLUME_DEFAULT (STORAGE_LIMIT_VOLUME | STORAGE_LIMIT_MAX_W_CLASS)
// UI defines
/// Size of volumetric box icon
#define VOLUMETRIC_STORAGE_BOX_ICON_SIZE 32
/// Size of EACH left/right border icon for volumetric boxes
#define VOLUMETRIC_STORAGE_BOX_BORDER_SIZE 1
/// Minimum pixels an item must have in volumetric scaled storage UI
#define MINIMUM_PIXELS_PER_ITEM 8
/// Maximum number of objects that will be allowed to be displayed using the volumetric display system. Arbitrary number to prevent server lockups.
#define MAXIMUM_VOLUMETRIC_ITEMS 256
/// How much padding to give between items
#define VOLUMETRIC_STORAGE_ITEM_PADDING 4
/// How much padding to give to edges
#define VOLUMETRIC_STORAGE_EDGE_PADDING 1
//ITEM INVENTORY WEIGHT, FOR w_class
/// Usually items smaller then a human hand, ex: Playing Cards, Lighter, Scalpel, Coins/Money
@@ -26,22 +40,3 @@
#define WEIGHT_CLASS_HUGE 5
/// Essentially means it cannot be picked up or placed in an inventory, ex: Mech Parts, Safe - Can not fit in Boh
#define WEIGHT_CLASS_GIGANTIC 6
/// Macro for automatically getting the volume of an item from its w_class.
#define AUTO_SCALE_VOLUME(w_class) (2 ** w_class)
/// Macro for automatically getting the volume of a storage item from its max_w_class and max_combined_w_class.
#define AUTO_SCALE_STORAGE_VOLUME(w_class, max_combined_w_class) (AUTO_SCALE_VOLUME(w_class) * (max_combined_w_class / w_class))
// UI defines
/// Size of volumetric box icon
#define VOLUMETRIC_STORAGE_BOX_ICON_SIZE 32
/// Size of EACH left/right border icon for volumetric boxes
#define VOLUMETRIC_STORAGE_BOX_BORDER_SIZE 1
/// Minimum pixels an item must have in volumetric scaled storage UI
#define MINIMUM_PIXELS_PER_ITEM 6
/// Maximum number of objects that will be allowed to be displayed using the volumetric display system. Arbitrary number to prevent server lockups.
#define MAXIMUM_VOLUMETRIC_ITEMS 256
/// How much padding to give between items
#define VOLUMETRIC_STORAGE_ITEM_PADDING 1
/// How much padding to give to edges
#define VOLUMETRIC_STORAGE_EDGE_PADDING 1
+39
View File
@@ -0,0 +1,39 @@
// PLEASE KEEP ALL VOLUME DEFINES IN THIS FILE, it's going to be hell to keep track of them later.
#define DEFAULT_VOLUME_TINY 2
#define DEFAULT_VOLUME_SMALL 3
#define DEFAULT_VOLUME_NORMAL 4
#define DEFAULT_VOLUME_BULKY 8
#define DEFAULT_VOLUME_HUGE 16
#define DEFAULT_VOLUME_GIGANTIC 32
GLOBAL_LIST_INIT(default_weight_class_to_volume, list(
"[WEIGHT_CLASS_TINY]" = DEFAULT_VOLUME_TINY,
"[WEIGHT_CLASS_SMALL]" = DEFAULT_VOLUME_SMALL,
"[WEIGHT_CLASS_NORMAL]" = DEFAULT_VOLUME_NORMAL,
"[WEIGHT_CLASS_BULKY]" = DEFAULT_VOLUME_BULKY,
"[WEIGHT_CLASS_HUGE]" = DEFAULT_VOLUME_HUGE,
"[WEIGHT_CLASS_GIGANTIC]" = DEFAULT_VOLUME_GIGANTIC
))
/// Macro for automatically getting the volume of an item from its w_class.
#define AUTO_SCALE_VOLUME(w_class) (GLOB.default_weight_class_to_volume["[w_class]"])
/// Macro for automatically getting the volume of a storage item from its max_w_class and max_combined_w_class.
#define AUTO_SCALE_STORAGE_VOLUME(w_class, max_combined_w_class) (AUTO_SCALE_VOLUME(w_class) * (max_combined_w_class / w_class))
// Let's keep all of this in one place. given what we put above anyways..
// volume amount for items
#define ITEM_VOLUME_DISK DEFAULT_VOLUME_TINY
// #define SAMPLE_VOLUME_AMOUNT 2
// max_weight_class for storages
#define MAX_WEIGHT_CLASS_BACKPACK WEIGHT_CLASS_NORMAL
#define MAX_WEIGHT_CLASS_BAG_OF_HOLDING WEIGHT_CLASS_BULKY
// max_volume for storages
#define STORAGE_VOLUME_BACKPACK (DEFAULT_VOLUME_NORMAL * 7)
#define STORAGE_VOLUME_DUFFLEBAG (DEFAULT_VOLUME_NORMAL * 10)
#define STORAGE_VOLUME_BAG_OF_HOLDING (DEFAULT_VOLUME_NORMAL * 20)
+3 -1
View File
@@ -64,7 +64,8 @@
#define INIT_ORDER_TICKER 55
#define INIT_ORDER_INSTRUMENTS 53
#define INIT_ORDER_MAPPING 50
#define INIT_ORDER_NETWORKS 45
#define INIT_ORDER_ECONOMY 45
#define INIT_ORDER_NETWORKS 40
#define INIT_ORDER_HOLODECK 35
#define INIT_ORDER_ATOMS 30
#define INIT_ORDER_LANGUAGE 25
@@ -116,6 +117,7 @@
#define FIRE_PRIORITY_NPC 80
#define FIRE_PRIORITY_MOBS 100
#define FIRE_PRIORITY_TGUI 110
#define FIRE_PRIORITY_PROJECTILES 200
#define FIRE_PRIORITY_TICKER 200
#define FIRE_PRIORITY_ATMOS_ADJACENCY 300
#define FIRE_PRIORITY_CHAT 400
+3 -2
View File
@@ -4,8 +4,9 @@
#define TGS_READ_GLOBAL(Name) GLOB.##Name
#define TGS_WRITE_GLOBAL(Name, Value) GLOB.##Name = ##Value
#define TGS_WORLD_ANNOUNCE(message) to_chat(world, "<span class='boldannounce'>[html_encode(##message)]</span>")
#define TGS_INFO_LOG(message) log_world("TGS: Info: [##message]")
#define TGS_ERROR_LOG(message) log_world("TGS: Error: [##message]")
#define TGS_INFO_LOG(message) log_world("TGS Info: [##message]")
#define TGS_WARNING_LOG(message) log_world("TGS Warn: [##message]")
#define TGS_ERROR_LOG(message) log_world("TGS Error: [##message]")
#define TGS_NOTIFY_ADMINS(event) message_admins(##event)
#define TGS_CLIENT_COUNT GLOB.clients.len
#define TGS_PROTECT_DATUM(Path) GENERAL_PROTECT_DATUM(##Path)
+56 -35
View File
@@ -1,5 +1,7 @@
//tgstation-server DMAPI
#define TGS_DMAPI_VERSION "5.1.1"
//All functions and datums outside this document are subject to change with any version and should not be relied on
//CONFIGURATION
@@ -17,7 +19,6 @@
//Required interfaces (fill in with your codebase equivalent):
//create a global variable named `Name` and set it to `Value`
//These globals must not be modifiable from anywhere outside of the server tools
#define TGS_DEFINE_AND_SET_GLOBAL(Name, Value)
//Read the value in the global variable `Name`
@@ -26,10 +27,10 @@
//Set the value in the global variable `Name` to `Value`
#define TGS_WRITE_GLOBAL(Name, Value)
//Disallow ANYONE from reflecting a given `path`, security measure to prevent in-game priveledge escalation
//Disallow ANYONE from reflecting a given `path`, security measure to prevent in-game use of DD -> TGS capabilities
#define TGS_PROTECT_DATUM(Path)
//display an announcement `message` from the server to all players
//Display an announcement `message` from the server to all players
#define TGS_WORLD_ANNOUNCE(message)
//Notify current in-game administrators of a string `event`
@@ -38,6 +39,9 @@
//Write an info `message` to a server log
#define TGS_INFO_LOG(message)
//Write an warning `message` to a server log
#define TGS_WARNING_LOG(message)
//Write an error `message` to a server log
#define TGS_ERROR_LOG(message)
@@ -48,10 +52,12 @@
//EVENT CODES
#define TGS_EVENT_PORT_SWAP -2 //before a port change is about to happen, extra parameter is new port
#define TGS_EVENT_REBOOT_MODE_CHANGE -1 //before a reboot mode change, extras parameters are the current and new reboot mode enums
#define TGS_EVENT_REBOOT_MODE_CHANGE -1 //Before a reboot mode change, extras parameters are the current and new reboot mode enums
#define TGS_EVENT_PORT_SWAP -2 //Before a port change is about to happen, extra parameters is new port
#define TGS_EVENT_INSTANCE_RENAMED -3 //Before the instance is renamed, extra parameter is the new name
#define TGS_EVENT_WATCHDOG_REATTACH -4 //After the watchdog reattaches to DD, extra parameter is the new /datum/tgs_version of the server
//See the descriptions for these codes here: https://github.com/tgstation/tgstation-server/blob/master/src/Tgstation.Server.Host/Components/EventType.cs
//See the descriptions for the parameters of these codes here: https://github.com/tgstation/tgstation-server/blob/master/src/Tgstation.Server.Host/Components/EventType.cs
#define TGS_EVENT_REPO_RESET_ORIGIN 0
#define TGS_EVENT_REPO_CHECKOUT 1
#define TGS_EVENT_REPO_FETCH 2
@@ -63,9 +69,12 @@
#define TGS_EVENT_COMPILE_START 8
#define TGS_EVENT_COMPILE_CANCELLED 9
#define TGS_EVENT_COMPILE_FAILURE 10
#define TGS_EVENT_COMPILE_COMPLETE 11
#define TGS_EVENT_COMPILE_COMPLETE 11 // Note, this event fires before the new .dmb is loaded into the watchdog. Consider using the TGS_EVENT_DEPLOYMENT_COMPLETE instead
#define TGS_EVENT_INSTANCE_AUTO_UPDATE_START 12
#define TGS_EVENT_REPO_MERGE_CONFLICT 13
#define TGS_EVENT_DEPLOYMENT_COMPLETE 14
#define TGS_EVENT_WATCHDOG_SHUTDOWN 15
#define TGS_EVENT_WATCHDOG_DETACH 16
//OTHER ENUMS
@@ -80,6 +89,7 @@
//REQUIRED HOOKS
//Call this somewhere in /world/New() that is always run
//IMPORTANT: This function may sleep!
//event_handler: optional user defined event handler. The default behaviour is to broadcast the event in english to all connected admin channels
//minimum_required_security_level: The minimum required security level to run the game in which the DMAPI is integrated
/world/proc/TgsNew(datum/tgs_event_handler/event_handler, minimum_required_security_level = TGS_SECURITY_ULTRASAFE)
@@ -109,12 +119,12 @@
//represents a version of tgstation-server
/datum/tgs_version
var/suite //The suite version, can be >=3
var/suite //The suite/major version, can be >=3
//this group of variables can be null to represent a wild card
var/major //The major version
var/minor //The minor version
var/patch //The patch version
var/deprecated_patch //The legacy version
var/raw_parameter //The unparsed parameter
var/deprefixed_parameter //The version only bit of raw_parameter
@@ -123,6 +133,10 @@
/datum/tgs_version/proc/Wildcard()
return
//if the tgs_version equals some other_version
/datum/tgs_version/proc/Equals(datum/tgs_version/other_version)
return
//represents a merge of a GitHub pull request
/datum/tgs_revision_information/test_merge
var/number //pull request number
@@ -179,14 +193,45 @@
return
//Returns TRUE if the world was launched under the server tools and the API matches, FALSE otherwise
//No function below this succeeds if it returns FALSE
//No function below this succeeds if it returns FALSE or if TgsNew() has yet to be called
/world/proc/TgsAvailable()
return
//Forces a hard reboot of BYOND by ending the process
//unlike del(world) clients will try to reconnect
//If the service has not requested a shutdown, the next server will take over
/world/proc/TgsEndProcess()
return
//Send a message to non-admin connected chats
//message: The message to send
//admin_only: If TRUE, message will instead be sent to only admin connected chats
/world/proc/TgsTargetedChatBroadcast(message, admin_only)
return
//Send a private message to a specific user
//message: The message to send
//user: The /datum/tgs_chat_user to send to
/world/proc/TgsChatPrivateMessage(message, datum/tgs_chat_user/user)
return
//The following functions will sleep if a call to TgsNew() is sleeping
//Sends a message to connected game chats
//message: The message to send
//channels: optional channels to limit the broadcast to
/world/proc/TgsChatBroadcast(message, list/channels)
return
//Gets the current /datum/tgs_version of the server tools running the server
/world/proc/TgsVersion()
return
//Gets the current /datum/tgs_version of the DMAPI being used
/world/proc/TgsApiVersion()
return
//Gets the name of the TGS instance running the game
/world/proc/TgsInstanceName()
return
@@ -202,34 +247,10 @@
/world/proc/TgsTestMerges()
return
//Forces a hard reboot of BYOND by ending the process
//unlike del(world) clients will try to reconnect
//If the service has not requested a shutdown, the next server will take over
/world/proc/TgsEndProcess()
return
//Gets a list of connected tgs_chat_channel
/world/proc/TgsChatChannelInfo()
return
//Sends a message to connected game chats
//message: The message to send
//channels: optional channels to limit the broadcast to
/world/proc/TgsChatBroadcast(message, list/channels)
return
//Send a message to non-admin connected chats
//message: The message to send
//admin_only: If TRUE, message will instead be sent to only admin connected chats
/world/proc/TgsTargetedChatBroadcast(message, admin_only)
return
//Send a private message to a specific user
//message: The message to send
//user: The /datum/tgs_chat_user to send to
/world/proc/TgsChatPrivateMessage(message, datum/tgs_chat_user/user)
return
/*
The MIT License
@@ -255,4 +276,4 @@ IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR
ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
*/
+4
View File
@@ -88,6 +88,7 @@
#define TRAIT_SLEEPIMMUNE "sleep_immunity"
#define TRAIT_PUSHIMMUNE "push_immunity"
#define TRAIT_SHOCKIMMUNE "shock_immunity"
#define TRAIT_TESLA_SHOCKIMMUNE "tesla_shock_immunity"
#define TRAIT_STABLEHEART "stable_heart"
#define TRAIT_STABLELIVER "stable_liver"
#define TRAIT_RESISTHEAT "resist_heat"
@@ -134,6 +135,7 @@
#define TRAIT_LAW_ENFORCEMENT_METABOLISM "law-enforcement-metabolism"
#define TRAIT_QUICK_CARRY "quick-carry"
#define TRAIT_QUICKER_CARRY "quicker-carry"
#define TRAIT_QUICK_BUILD "quick-build"
#define TRAIT_STRONG_GRABBER "strong_grabber"
#define TRAIT_CALCIUM_HEALER "calcium_healer"
#define TRAIT_MAGIC_CHOKE "magic_choke"
@@ -146,6 +148,8 @@
#define TRAIT_NORUNNING "norunning" // You walk!
#define TRAIT_NOMARROW "nomarrow" // You don't make blood, with chemicals or nanites.
#define TRAIT_NOPULSE "nopulse" // Your heart doesn't beat.
#define TRAIT_NOGUT "nogutting" //Your chest cant be gutted of organs
#define TRAIT_NODECAP "nodecapping" //Your head cant be cut off in combat
#define TRAIT_EXEMPT_HEALTH_EVENTS "exempt-health-events"
#define TRAIT_NO_MIDROUND_ANTAG "no-midround-antag" //can't be turned into an antag by random events
#define TRAIT_PUGILIST "pugilist" //This guy punches people for a living
+3
View File
@@ -122,3 +122,6 @@
// misc
#define VV_HK_SPACEVINE_PURGE "spacevine_purge"
// paintings
#define VV_HK_REMOVE_PAINTING "remove_painting"
-13
View File
@@ -1,9 +1,6 @@
//THIS FILE CONTAINS CONSTANTS, PROCS, AND OTHER THINGS//
/////////////////////////////////////////////////////////
/mob/proc/setClickCooldown(var/timeout)
next_move = max(world.time + timeout, next_move)
/proc/get_matrix_largest()
var/matrix/mtrx=new()
return mtrx.Scale(2)
@@ -105,16 +102,6 @@ GLOBAL_VAR_INIT(miscreants_allowed, FALSE)
if(!src.holder) return
message_admins("[key_name_admin(usr)] manually reloaded mentors")
//LOOC toggles
/client/verb/listen_looc()
set name = "Show/Hide LOOC"
set category = "Preferences"
set desc = "Toggles seeing LocalOutOfCharacter chat"
prefs.chat_toggles ^= CHAT_LOOC
prefs.save_preferences()
to_chat(src, "You will [(prefs.chat_toggles & CHAT_LOOC) ? "now" : "no longer"] see messages on the LOOC channel.")
SSblackbox.record_feedback("tally", "admin_verb", 1, "TLOOC") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/mob/living/carbon/proc/has_penis()
var/obj/item/organ/genital/G = getorganslot(ORGAN_SLOT_PENIS)
if(G && istype(G, /obj/item/organ/genital/penis))
+13
View File
@@ -37,6 +37,7 @@
* TYPECONT: The typepath of the contents of the list
* COMPARE: The object to compare against, usualy the same as INPUT
* COMPARISON: The variable on the objects to compare
* COMPTYPE: How the current bin item to compare against COMPARE is fetched. By key or value.
*/
#define BINARY_INSERT(INPUT, LIST, TYPECONT, COMPARE, COMPARISON, COMPTYPE) \
do {\
@@ -629,6 +630,8 @@
L["[key]"] = "[value]"
return list2params(L)
#define NUMLIST2TEXTLIST(list) splittext(list2params(list), "&")
//Picks from the list, with some safeties, and returns the "default" arg if it fails
#define DEFAULTPICK(L, default) ((islist(L) && length(L)) ? pick(L) : default)
@@ -668,3 +671,13 @@
for(var/key in input)
ret += key
return ret
/proc/is_type_in_ref_list(path, list/L)
if(!ispath(path))//not a path
return
for(var/i in L)
var/datum/D = i
if(!istype(D))//not an usable reference
continue
if(istype(D, path))
return TRUE
+7 -2
View File
@@ -4,7 +4,9 @@
#define SEND_SOUND(target, sound) DIRECT_OUTPUT(target, sound)
#define SEND_TEXT(target, text) DIRECT_OUTPUT(target, text)
#define WRITE_FILE(file, text) DIRECT_OUTPUT(file, text)
#define WRITE_LOG(log, text) rustg_log_write(log, text)
//This is an external call, "true" and "false" are how rust parses out booleans
#define WRITE_LOG(log, text) rustg_log_write(log, text, "true")
#define WRITE_LOG_NO_FORMAT(log, text) rustg_log_write(log, text, "false")
//print a warning message to world.log
#define WARNING(MSG) warning("[MSG] in [__FILE__] at line [__LINE__] src: [UNLINT(src)] usr: [usr].")
@@ -152,6 +154,9 @@
/proc/log_subsystem(subsystem, text)
WRITE_LOG(GLOB.subsystem_log, "[subsystem]: [text]")
/proc/log_click(object, location, control, params, client/C, event = "clicked")
WRITE_LOG(GLOB.click_log, "CLICK: [C.ckey] - [event] : [object] | [location] | [control] | [params]")
/* Log to both DD and the logfile. */
/proc/log_world(text)
#ifdef USE_CUSTOM_ERROR_HANDLER
@@ -181,7 +186,7 @@
/proc/start_log(log)
WRITE_LOG(log, "Starting up round ID [GLOB.round_id].\n-------------------------")
/* ui logging */
/* ui logging */
/proc/log_tgui(text)
WRITE_LOG(GLOB.tgui_log, text)
+39
View File
@@ -0,0 +1,39 @@
/proc/get_projectile_angle(atom/source, atom/target)
var/sx = source.x * world.icon_size
var/sy = source.y * world.icon_size
var/tx = target.x * world.icon_size
var/ty = target.y * world.icon_size
var/atom/movable/AM
if(ismovable(source))
AM = source
sx += AM.step_x
sy += AM.step_y
if(ismovable(target))
AM = target
tx += AM.step_x
ty += AM.step_y
return SIMPLIFY_DEGREES(arctan(ty - sy, tx - sx))
/proc/Get_Angle(atom/movable/start,atom/movable/end)//For beams.
if(!start || !end)
return 0
var/dy
var/dx
dy=(32*end.y+end.pixel_y)-(32*start.y+start.pixel_y)
dx=(32*end.x+end.pixel_x)-(32*start.x+start.pixel_x)
if(!dy)
return (dx>=0)?90:270
.=arctan(dx/dy)
if(dy<0)
.+=180
else if(dx<0)
.+=360
/proc/Get_Pixel_Angle(var/y, var/x)//for getting the angle when animating something's pixel_x and pixel_y
if(!y)
return (x>=0)?90:270
.=arctan(x/y)
if(y<0)
.+=180
else if(x<0)
.+=360
+22
View File
@@ -249,6 +249,15 @@
SEND_SIGNAL(A, COMSIG_ATOM_HEARER_IN_VIEW, processing, .)
processing += A.contents
//viewers() but with a signal, for blacklisting.
/proc/fov_viewers(depth = world.view, atom/center)
if(!center)
return
. = viewers(depth, center)
for(var/k in .)
var/mob/M = k
SEND_SIGNAL(M, COMSIG_MOB_FOV_VIEWER, center, depth, .)
/proc/get_mobs_in_radio_ranges(list/obj/item/radio/radios)
. = list()
// Returns a list of mobs who can hear any of the radios given in @radios
@@ -506,6 +515,19 @@
return
winset(C, "mainwindow", "flash=5")
//Recursively checks if an item is inside a given type, even through layers of storage. Returns the atom if it finds it.
/proc/recursive_loc_check(atom/movable/target, type)
var/atom/A = target
if(istype(A, type))
return A
while(!istype(A.loc, type))
if(!A.loc)
return
A = A.loc
return A.loc
/proc/AnnounceArrival(var/mob/living/carbon/human/character, var/rank)
if(!SSticker.IsRoundInProgress() || QDELETED(character))
return
+2
View File
@@ -75,6 +75,8 @@
var/datum/emote/E = new path()
E.emote_list[E.key] = E
init_keybindings()
//Uplink Items
for(var/path in subtypesof(/datum/uplink_item))
var/datum/uplink_item/I = path
+6
View File
@@ -18,6 +18,12 @@
return text
return default
/proc/sanitize_islist(value, default)
if(islist(value) && length(value))
return value
if(default)
return default
/proc/sanitize_inlist(value, list/List, default)
if(value in List)
return value
+42
View File
@@ -629,3 +629,45 @@
return null
r += ascii2text(c)
return r
/proc/slot_to_string(slot)
switch(slot)
if(SLOT_BACK)
return "Backpack"
if(SLOT_WEAR_MASK)
return "Mask"
if(SLOT_HANDS)
return "Hands"
if(SLOT_BELT)
return "Belt"
if(SLOT_EARS)
return "Ears"
if(SLOT_GLASSES)
return "Glasses"
if(SLOT_GLOVES)
return "Gloves"
if(SLOT_NECK)
return "Neck"
if(SLOT_HEAD)
return "Head"
if(SLOT_SHOES)
return "Shoes"
if(SLOT_WEAR_SUIT)
return "Suit"
if(SLOT_W_UNIFORM)
return "Uniform"
if(SLOT_IN_BACKPACK)
return "In backpack"
/proc/tg_ui_icon_to_cit_ui(ui_style)
switch(ui_style)
if('icons/mob/screen_plasmafire.dmi')
return 'modular_citadel/icons/ui/screen_plasmafire.dmi'
if('icons/mob/screen_slimecore.dmi')
return 'modular_citadel/icons/ui/screen_slimecore.dmi'
if('icons/mob/screen_operative.dmi')
return 'modular_citadel/icons/ui/screen_operative.dmi'
if('icons/mob/screen_clockwork.dmi')
return 'modular_citadel/icons/ui/screen_clockwork.dmi'
else
return 'modular_citadel/icons/ui/screen_midnight.dmi'
+37 -27
View File
@@ -1,5 +1,3 @@
/*
* A large number of misc global procs.
*/
@@ -17,30 +15,6 @@
var/textb = copytext(HTMLstring, 6, 8)
return rgb(255 - hex2num(textr), 255 - hex2num(textg), 255 - hex2num(textb))
/proc/Get_Angle(atom/movable/start,atom/movable/end)//For beams.
if(!start || !end)
return 0
var/dy
var/dx
dy=(32*end.y+end.pixel_y)-(32*start.y+start.pixel_y)
dx=(32*end.x+end.pixel_x)-(32*start.x+start.pixel_x)
if(!dy)
return (dx>=0)?90:270
.=arctan(dx/dy)
if(dy<0)
.+=180
else if(dx<0)
.+=360
/proc/Get_Pixel_Angle(var/y, var/x)//for getting the angle when animating something's pixel_x and pixel_y
if(!y)
return (x>=0)?90:270
.=arctan(x/y)
if(y<0)
.+=180
else if(x<0)
.+=360
//Returns location. Returns null if no location was found.
/proc/get_teleport_loc(turf/location,mob/target,distance = 1, density = FALSE, errorx = 0, errory = 0, eoffsetx = 0, eoffsety = 0)
/*
@@ -391,6 +365,16 @@ Turf and target are separate in case you want to teleport some distance from a t
break
return loc
//Returns a list of all locations the target is within.
/proc/get_nested_locs(atom/movable/M, include_turf = FALSE)
. = list()
var/atom/A = M.loc
while(A && !isturf(A))
. += A
A = A.loc
if(A && include_turf) //At this point, only the turf is left.
. += A
// returns the turf located at the map edge in the specified direction relative to A
// used for mass driver
/proc/get_edge_target_turf(atom/A, direction)
@@ -1048,6 +1032,27 @@ B --><-- A
/proc/get_random_station_turf()
return safepick(get_area_turfs(pick(GLOB.the_station_areas)))
/proc/get_safe_random_station_turf() //excludes dense turfs (like walls) and areas that have valid_territory set to FALSE
for (var/i in 1 to 5)
var/list/L = get_area_turfs(pick(GLOB.the_station_areas))
var/turf/target
while (L.len && !target)
var/I = rand(1, L.len)
var/turf/T = L[I]
var/area/X = get_area(T)
if(!T.density && X.valid_territory)
var/clear = TRUE
for(var/obj/O in T)
if(O.density)
clear = FALSE
break
if(clear)
target = T
if (!target)
L.Cut(I,I+1)
if (target)
return target
/proc/get_closest_atom(type, list, source)
var/closest_atom
var/closest_distance
@@ -1571,8 +1576,13 @@ GLOBAL_DATUM_INIT(dview_mob, /mob/dview, new)
//empty string - use TgsTargetBroadcast with admin_only = FALSE
//other string - use TgsChatBroadcast with the tag that matches config_setting, only works with TGS4, if using TGS3 the above method is used
/proc/send2chat(message, config_setting)
if(config_setting == null || !world.TgsAvailable())
if(config_setting == null)
return
UNTIL(GLOB.tgs_initialized)
if(!world.TgsAvailable())
return
var/datum/tgs_version/version = world.TgsVersion()
if(config_setting == "" || version.suite == 3)
world.TgsTargetedChatBroadcast(message, FALSE)
+9 -7
View File
@@ -134,9 +134,11 @@ GLOBAL_LIST_INIT(bitfields, list(
"NO_RUINS_1" = NO_RUINS_1,
"PREVENT_CLICK_UNDER_1" = PREVENT_CLICK_UNDER_1,
"HOLOGRAM_1" = HOLOGRAM_1,
"TESLA_IGNORE_1" = TESLA_IGNORE_1,
"SHOCKED_1" = SHOCKED_1,
"INITIALIZED_1" = INITIALIZED_1,
"ADMIN_SPAWNED_1" = ADMIN_SPAWNED_1,
"BLOCK_FACE_ATOM_1" = BLOCK_FACE_ATOM_1,
"PREVENT_CONTENTS_EXPLOSION_1" = PREVENT_CONTENTS_EXPLOSION_1
),
"clothing_flags" = list(
"LAVAPROTECT" = LAVAPROTECT,
@@ -150,12 +152,12 @@ GLOBAL_LIST_INIT(bitfields, list(
"IGNORE_HAT_TOSS" = IGNORE_HAT_TOSS,
"SCAN_REAGENTS" = SCAN_REAGENTS
),
"tesla_flags" = list(
"TESLA_MOB_DAMAGE" = TESLA_MOB_DAMAGE,
"TESLA_OBJ_DAMAGE" = TESLA_OBJ_DAMAGE,
"TESLA_MOB_STUN" = TESLA_MOB_STUN,
"TESLA_ALLOW_DUPLICATES" = TESLA_ALLOW_DUPLICATES,
"TESLA_MACHINE_EXPLOSIVE" = TESLA_MACHINE_EXPLOSIVE,
"zap_flags" = list(
"ZAP_MOB_DAMAGE" = ZAP_MOB_DAMAGE,
"ZAP_OBJ_DAMAGE" = ZAP_OBJ_DAMAGE,
"ZAP_MOB_STUN" = ZAP_MOB_STUN,
"ZAP_ALLOW_DUPLICATES" = ZAP_ALLOW_DUPLICATES,
"ZAP_MACHINE_EXPLOSIVE" = ZAP_MACHINE_EXPLOSIVE,
),
"smooth" = list(
"SMOOTH_TRUE" = SMOOTH_TRUE,
+21
View File
@@ -0,0 +1,21 @@
GLOBAL_LIST_EMPTY(classic_keybinding_list_by_key)
GLOBAL_LIST_EMPTY(hotkey_keybinding_list_by_key)
GLOBAL_LIST_EMPTY(keybindings_by_name)
// This is a mapping from JS keys to Byond - ref: https://keycode.info/
GLOBAL_LIST_INIT(_kbMap, list(
"UP" = "North",
"RIGHT" = "East",
"DOWN" = "South",
"LEFT" = "West",
"INSERT" = "Insert",
"HOME" = "Northwest",
"PAGEUP" = "Northeast",
"DEL" = "Delete",
"END" = "Southwest",
"PAGEDOWN" = "Southeast",
"SPACEBAR" = "Space",
"ALT" = "Alt",
"SHIFT" = "Shift",
"CONTROL" = "Ctrl"
))
+2
View File
@@ -221,3 +221,5 @@ GLOBAL_LIST_INIT(numbers_as_words, world.file2list("strings/numbers_as_words.txt
GLOBAL_LIST_INIT(station_numerals, greek_letters + phonetic_alphabet + numbers_as_words + generate_number_strings())
GLOBAL_LIST_INIT(admiral_messages, list("Do you know how expensive these stations are?","Stop wasting my time.","I was sleeping, thanks a lot.","Stand and fight you cowards!","You knew the risks coming in.","Stop being paranoid.","Whatever's broken just build a new one.","No.", "<i>null</i>","<i>Error: No comment given.</i>", "It's a good day to die!"))
GLOBAL_LIST_INIT(redacted_strings, list("\[REDACTED\]", "\[CLASSIFIED\]", "\[ARCHIVED\]", "\[EXPLETIVE DELETED\]", "\[EXPUNGED\]", "\[INFORMATION ABOVE YOUR SECURITY CLEARANCE\]", "\[MOVE ALONG CITIZEN\]", "\[NOTHING TO SEE HERE\]", "\[ACCESS DENIED\]"))
+31
View File
@@ -0,0 +1,31 @@
/// Creates and sorts all the keybinding datums
/proc/init_keybindings()
for(var/KB in subtypesof(/datum/keybinding))
var/datum/keybinding/keybinding = KB
if(!initial(keybinding.hotkey_keys))
continue
add_keybinding(new keybinding)
// init_emote_keybinds() - Disabled - I don't particularly want this.
/// Adds an instanced keybinding to the global tracker
/proc/add_keybinding(datum/keybinding/instance)
GLOB.keybindings_by_name[instance.name] = instance
// Classic
if(LAZYLEN(instance.classic_keys))
for(var/bound_key in instance.classic_keys)
LAZYADD(GLOB.classic_keybinding_list_by_key[bound_key], list(instance.name))
// Hotkey
if(LAZYLEN(instance.hotkey_keys))
for(var/bound_key in instance.hotkey_keys)
LAZYADD(GLOB.hotkey_keybinding_list_by_key[bound_key], list(instance.name))
/proc/init_emote_keybinds()
for(var/i in subtypesof(/datum/emote))
var/datum/emote/faketype = i
if(!initial(faketype.key))
continue
var/datum/keybinding/emote/emote_kb = new
emote_kb.link_to_emote(faketype)
add_keybinding(emote_kb)
+2
View File
@@ -36,6 +36,8 @@ GLOBAL_VAR(reagent_log)
GLOBAL_PROTECT(reagent_log)
GLOBAL_VAR(world_crafting_log)
GLOBAL_PROTECT(world_crafting_log)
GLOBAL_VAR(click_log)
GLOBAL_PROTECT(click_log)
GLOBAL_LIST_EMPTY(bombers)
GLOBAL_PROTECT(bombers)
+1
View File
@@ -29,6 +29,7 @@ GLOBAL_LIST_INIT(traits_by_type, list(
"TRAIT_SLEEPIMMUNE" = TRAIT_SLEEPIMMUNE,
"TRAIT_PUSHIMMUNE" = TRAIT_PUSHIMMUNE,
"TRAIT_SHOCKIMMUNE" = TRAIT_SHOCKIMMUNE,
"TRAIT_TESLA_SHOCKIMMUNE" = TRAIT_TESLA_SHOCKIMMUNE,
"TRAIT_STABLEHEART" = TRAIT_STABLEHEART,
"TRAIT_STABLELIVER" = TRAIT_STABLELIVER,
"TRAIT_RESISTHEAT" = TRAIT_RESISTHEAT,
+18 -15
View File
@@ -80,7 +80,7 @@
if(SEND_SIGNAL(src, COMSIG_MOB_CLICKON, A, params) & COMSIG_MOB_CANCEL_CLICKON)
return
var/list/modifiers = params2list(params)
if(modifiers["shift"] && modifiers["middle"])
ShiftMiddleClickOn(A)
@@ -327,10 +327,9 @@
return
/atom/proc/ShiftClick(mob/user)
var/flags = SEND_SIGNAL(src, COMSIG_CLICK_SHIFT, user)
var/flags = SEND_SIGNAL(src, COMSIG_CLICK_SHIFT, user) | SEND_SIGNAL(user, COMSIG_MOB_CLICKED_SHIFT_ON, src)
if(!(flags & COMPONENT_DENY_EXAMINATE) && user.client && (user.client.eye == user || user.client.eye == user.loc || flags & COMPONENT_ALLOW_EXAMINATE))
user.examinate(src)
return
/*
Ctrl click
@@ -427,32 +426,36 @@
LE.fire()
// Simple helper to face what you clicked on, in case it should be needed in more than one place
/mob/proc/face_atom(atom/A)
if( buckled || stat != CONSCIOUS || !A || !x || !y || !A.x || !A.y )
/mob/proc/face_atom(atom/A, ismousemovement = FALSE)
if( buckled || stat != CONSCIOUS || !loc || !A || !A.x || !A.y )
return
var/dx = A.x - x
var/dy = A.y - y
var/atom/L = loc
if(L.flags_1 & BLOCK_FACE_ATOM_1)
return
var/turf/T = get_turf(src)
var/dx = A.x - T.x
var/dy = A.y - T.y
if(!dx && !dy) // Wall items are graphically shifted but on the floor
if(A.pixel_y > 16)
setDir(NORTH)
setDir(NORTH, ismousemovement)
else if(A.pixel_y < -16)
setDir(SOUTH)
setDir(SOUTH, ismousemovement)
else if(A.pixel_x > 16)
setDir(EAST)
setDir(EAST, ismousemovement)
else if(A.pixel_x < -16)
setDir(WEST)
setDir(WEST, ismousemovement)
return
if(abs(dx) < abs(dy))
if(dy > 0)
setDir(NORTH)
setDir(NORTH, ismousemovement)
else
setDir(SOUTH)
setDir(SOUTH, ismousemovement)
else
if(dx > 0)
setDir(EAST)
setDir(EAST, ismousemovement)
else
setDir(WEST)
setDir(WEST, ismousemovement)
//debug
/obj/screen/proc/scale_to(x1,y1)
+3 -3
View File
@@ -241,13 +241,13 @@
using.hud = src
hotkeybuttons += using
//CIT CHANGES - rest and combat mode buttons
using = new /obj/screen/restbutton()
using.icon = tg_ui_icon_to_cit_ui(ui_style)
using = new /obj/screen/rest()
using.icon = ui_style
using.screen_loc = ui_pull_resist
using.hud = src
static_inventory += using
//CIT CHANGES - combat mode buttons
using = new /obj/screen/combattoggle()
using.icon = tg_ui_icon_to_cit_ui(ui_style)
using.screen_loc = ui_combat_toggle
+77 -4
View File
@@ -24,6 +24,10 @@
blend_mode = BLEND_MULTIPLY
alpha = 255
/obj/screen/plane_master/openspace/Initialize()
. = ..()
filters += filter(type="alpha", render_source=FIELD_OF_VISION_RENDER_TARGET, flags=MASK_INVERSE)
/obj/screen/plane_master/openspace/backdrop(mob/mymob)
filters = list()
filters += filter(type = "drop_shadow", color = "#04080FAA", size = -10)
@@ -46,6 +50,32 @@
appearance_flags = PLANE_MASTER
blend_mode = BLEND_OVERLAY
/obj/screen/plane_master/wall
name = "wall plane master"
plane = WALL_PLANE
appearance_flags = PLANE_MASTER
/obj/screen/plane_master/wall/backdrop(mob/mymob)
if(mymob?.client?.prefs.ambientocclusion)
add_filter("ambient_occlusion", 0, AMBIENT_OCCLUSION(4, "#04080FAA"))
else
remove_filter("ambient_occlusion")
/obj/screen/plane_master/above_wall
name = "above wall plane master"
plane = ABOVE_WALL_PLANE
appearance_flags = PLANE_MASTER
/obj/screen/plane_master/above_wall/Initialize()
. = ..()
add_filter("vision_cone", 100, list(type="alpha", render_source=FIELD_OF_VISION_RENDER_TARGET, flags=MASK_INVERSE))
/obj/screen/plane_master/above_wall/backdrop(mob/mymob)
if(mymob?.client?.prefs.ambientocclusion)
add_filter("ambient_occlusion", 0, AMBIENT_OCCLUSION(3, "#04080F64"))
else
remove_filter("ambient_occlusion")
///Contains most things in the game world
/obj/screen/plane_master/game_world
name = "game world plane master"
@@ -53,12 +83,50 @@
appearance_flags = PLANE_MASTER //should use client color
blend_mode = BLEND_OVERLAY
/obj/screen/plane_master/game_world/Initialize()
. = ..()
add_filter("vision_cone", 100, list(type="alpha", render_source=FIELD_OF_VISION_RENDER_TARGET, flags=MASK_INVERSE))
/obj/screen/plane_master/game_world/backdrop(mob/mymob)
if(istype(mymob) && mymob.client && mymob.client.prefs && mymob.client.prefs.ambientocclusion)
add_filter("ambient_occlusion", 0, AMBIENT_OCCLUSION)
if(mymob?.client?.prefs.ambientocclusion)
add_filter("ambient_occlusion", 0, AMBIENT_OCCLUSION(4, "#04080FAA"))
else
remove_filter("ambient_occlusion")
update_filters()
//Reserved to chat messages, so they are still displayed above the field of vision masking.
/obj/screen/plane_master/chat_messages
name = "chat messages plane master"
plane = CHAT_PLANE
appearance_flags = PLANE_MASTER
mouse_opacity = MOUSE_OPACITY_TRANSPARENT
///Contains all shadow cone masks, whose image overrides are displayed only to their respective owners.
/obj/screen/plane_master/field_of_vision
name = "field of vision mask plane master"
plane = FIELD_OF_VISION_PLANE
render_target = FIELD_OF_VISION_RENDER_TARGET
mouse_opacity = MOUSE_OPACITY_TRANSPARENT
/obj/screen/plane_master/field_of_vision/Initialize()
. = ..()
filters += filter(type="alpha", render_source=FIELD_OF_VISION_BLOCKER_RENDER_TARGET, flags=MASK_INVERSE)
///Used to display the owner and its adjacent surroundings through the FoV plane mask.
/obj/screen/plane_master/field_of_vision_blocker
name = "field of vision blocker plane master"
plane = FIELD_OF_VISION_BLOCKER_PLANE
render_target = FIELD_OF_VISION_BLOCKER_RENDER_TARGET
mouse_opacity = MOUSE_OPACITY_TRANSPARENT
///Stores the visible portion of the FoV shadow cone.
/obj/screen/plane_master/field_of_vision_visual
name = "field of vision visual plane master"
plane = FIELD_OF_VISION_VISUAL_PLANE
mouse_opacity = MOUSE_OPACITY_TRANSPARENT
/obj/screen/plane_master/field_of_vision_visual/Initialize()
. = ..()
filters += filter(type="alpha", render_source=FIELD_OF_VISION_BLOCKER_RENDER_TARGET, flags=MASK_INVERSE)
///Contains all lighting objects
/obj/screen/plane_master/lighting
@@ -87,11 +155,12 @@
/obj/screen/plane_master/emissive/Initialize()
. = ..()
filters += filter(type="alpha", render_source=EMISSIVE_BLOCKER_RENDER_TARGET, flags=MASK_INVERSE)
filters += filter(type="alpha", render_source=FIELD_OF_VISION_RENDER_TARGET, flags=MASK_INVERSE)
/**
* Things placed on this always mask the lighting plane. Doesn't render directly.
*
* Always masks the light plane, isn't blocked by anything. Use for on mob glows,
* Always masks the light plane, isn't blocked by anything (except Field of Vision). Use for on mob glows,
* magic stuff, etc.
*/
@@ -101,6 +170,10 @@
mouse_opacity = MOUSE_OPACITY_TRANSPARENT
render_target = EMISSIVE_UNBLOCKABLE_RENDER_TARGET
/obj/screen/plane_master/emissive_unblockable/Initialize()
. = ..()
filters += filter(type="alpha", render_source=FIELD_OF_VISION_RENDER_TARGET, flags=MASK_INVERSE)
/**
* Things placed on this layer mask the emissive layer. Doesn't render directly
*
+11 -1
View File
@@ -238,6 +238,7 @@ GLOBAL_LIST_EMPTY(radial_menus)
var/mutable_appearance/MA = new /mutable_appearance(E)
if(MA)
MA.layer = ABOVE_HUD_LAYER
MA.plane = ABOVE_HUD_PLANE
MA.appearance_flags |= RESET_TRANSFORM
return MA
@@ -255,6 +256,7 @@ GLOBAL_LIST_EMPTY(radial_menus)
current_user = M.client
//Blank
menu_holder = image(icon='icons/effects/effects.dmi',loc=anchor,icon_state="nothing",layer = ABOVE_HUD_LAYER)
menu_holder.plane = ABOVE_HUD_PLANE
menu_holder.appearance_flags |= KEEP_APART
menu_holder.vis_contents += elements + close_button
current_user.images += menu_holder
@@ -285,13 +287,16 @@ GLOBAL_LIST_EMPTY(radial_menus)
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, uniqueid, radius, datum/callback/custom_check, require_near = FALSE, tooltips = FALSE)
/proc/show_radial_menu(mob/user, atom/anchor, list/choices, uniqueid, radius, datum/callback/custom_check, require_near = FALSE, tooltips = FALSE, no_repeat_close = FALSE)
if(!user || !anchor || !length(choices))
return
if(!uniqueid)
uniqueid = "defmenu_[REF(user)]_[REF(anchor)]"
if(GLOB.radial_menus[uniqueid])
if(!no_repeat_close)
var/datum/radial_menu/menu = GLOB.radial_menus[uniqueid]
menu.finished = TRUE
return
var/datum/radial_menu/menu = new
@@ -308,4 +313,9 @@ GLOBAL_LIST_EMPTY(radial_menus)
var/answer = menu.selected_choice
qdel(menu)
GLOB.radial_menus -= uniqueid
if(require_near && !in_range(anchor, user))
return
if(istype(custom_check))
if(!custom_check.Invoke())
return
return answer
+58 -9
View File
@@ -54,13 +54,18 @@
/obj/screen/storage/volumetric_box
icon_state = "stored_continue"
layer = VOLUMETRIC_STORAGE_BOX_LAYER
plane = VOLUMETRIC_STORAGE_BOX_PLANE
var/obj/item/our_item
/obj/screen/storage/volumetric_box/Initialize(mapload, new_master, our_item)
/obj/screen/storage/volumetric_box/Initialize(mapload, new_master, obj/item/our_item)
src.our_item = our_item
RegisterSignal(our_item, COMSIG_ITEM_MOUSE_ENTER, .proc/on_item_mouse_enter)
RegisterSignal(our_item, COMSIG_ITEM_MOUSE_EXIT, .proc/on_item_mouse_exit)
return ..()
/obj/screen/storage/volumetric_box/Destroy()
makeItemInactive()
our_item = null
return ..()
@@ -70,10 +75,34 @@
/obj/screen/storage/volumetric_box/MouseDrop(atom/over, src_location, over_location, src_control, over_control, params)
return our_item.MouseDrop(over, src_location, over_location, src_control, over_control, params)
/obj/screen/storage/volumetric_box/MouseExited(location, control, params)
makeItemInactive()
/obj/screen/storage/volumetric_box/MouseEntered(location, control, params)
makeItemActive()
/obj/screen/storage/volumetric_box/proc/on_item_mouse_enter()
makeItemActive()
/obj/screen/storage/volumetric_box/proc/on_item_mouse_exit()
makeItemInactive()
/obj/screen/storage/volumetric_box/proc/makeItemInactive()
if(!our_item)
return
our_item.layer = VOLUMETRIC_STORAGE_ITEM_LAYER
our_item.plane = VOLUMETRIC_STORAGE_ITEM_PLANE
/obj/screen/storage/volumetric_box/proc/makeItemActive()
if(!our_item)
return
our_item.layer = VOLUMETRIC_STORAGE_ACTIVE_ITEM_LAYER //make sure we display infront of the others!
our_item.plane = VOLUMETRIC_STORAGE_ACTIVE_ITEM_PLANE
/obj/screen/storage/volumetric_box/center
icon_state = "stored_continue"
var/obj/screen/storage/stored_left/left
var/obj/screen/storage/stored_right/right
var/obj/screen/storage/volumetric_edge/stored_left/left
var/obj/screen/storage/volumetric_edge/stored_right/right
var/pixel_size
/obj/screen/storage/volumetric_box/center/Initialize(mapload, new_master, our_item)
@@ -87,7 +116,7 @@
return ..()
/obj/screen/storage/volumetric_box/center/proc/on_screen_objects()
return list(src, left, right)
return list(src)
/**
* Sets the size of this box screen object and regenerates its left/right borders. This includes the actual border's size!
@@ -96,18 +125,38 @@
if(pixel_size == pixels)
return
pixel_size = pixels
cut_overlays()
cut_overlays(TRUE)
//our icon size is 32 pixels.
transform = matrix((pixels - (VOLUMETRIC_STORAGE_BOX_BORDER_SIZE * 2)) / VOLUMETRIC_STORAGE_BOX_ICON_SIZE, 0, 0, 0, 1, 0)
left.pixel_x = -((pixels - VOLUMETRIC_STORAGE_BOX_ICON_SIZE) * 0.5) - VOLUMETRIC_STORAGE_BOX_BORDER_SIZE
right.pixel_x = ((pixels - VOLUMETRIC_STORAGE_BOX_ICON_SIZE) * 0.5) + VOLUMETRIC_STORAGE_BOX_BORDER_SIZE
add_overlay(left)
add_overlay(right)
add_overlay(left, TRUE)
add_overlay(right, TRUE)
/obj/screen/storage/stored_left
/obj/screen/storage/volumetric_edge
layer = VOLUMETRIC_STORAGE_BOX_LAYER
plane = VOLUMETRIC_STORAGE_BOX_PLANE
/obj/screen/storage/volumetric_edge/Initialize(mapload, master, our_item)
src.master = master
return ..()
/obj/screen/storage/volumetric_edge/Click(location, control, params)
return master.Click(location, control, params)
/obj/screen/storage/volumetric_edge/MouseDrop(atom/over, src_location, over_location, src_control, over_control, params)
return master.MouseDrop(over, src_location, over_location, src_control, over_control, params)
/obj/screen/storage/volumetric_edge/MouseExited(location, control, params)
return master.MouseExited(location, control, params)
/obj/screen/storage/volumetric_edge/MouseEntered(location, control, params)
return master.MouseEntered(location, control, params)
/obj/screen/storage/volumetric_edge/stored_left
icon_state = "stored_start"
appearance_flags = APPEARANCE_UI | KEEP_APART | RESET_TRANSFORM // Yes I know RESET_TRANSFORM is in APPEARANCE_UI but we're hard-asserting this incase someone changes it.
/obj/screen/storage/stored_right
/obj/screen/storage/volumetric_edge/stored_right
icon_state = "stored_end"
appearance_flags = APPEARANCE_UI | KEEP_APART | RESET_TRANSFORM
+56 -20
View File
@@ -91,7 +91,7 @@
log_combat(user, M, "attacked", src.name, "(INTENT: [uppertext(user.a_intent)]) (DAMTYPE: [uppertext(damtype)])")
add_fingerprint(user)
user.adjustStaminaLossBuffered(getweight()*0.8)//CIT CHANGE - makes attacking things cause stamina loss
user.adjustStaminaLossBuffered(getweight(user, STAM_COST_ATTACK_MOB_MULT))//CIT CHANGE - makes attacking things cause stamina loss
//the equivalent of the standard version of attack() but for object targets.
/obj/item/proc/attack_obj(obj/O, mob/living/user)
@@ -102,7 +102,7 @@
if(IS_STAMCRIT(user)) // CIT CHANGE - makes it impossible to attack in stamina softcrit
to_chat(user, "<span class='warning'>You're too exhausted.</span>") // CIT CHANGE - ditto
return // CIT CHANGE - ditto
user.adjustStaminaLossBuffered(getweight()*1.2)//CIT CHANGE - makes attacking things cause stamina loss
user.adjustStaminaLossBuffered(getweight(user, STAM_COST_ATTACK_OBJ_MULT))//CIT CHANGE - makes attacking things cause stamina loss
user.changeNext_move(CLICK_CD_MELEE)
user.do_attack_animation(O)
O.attacked_by(src, user)
@@ -111,28 +111,34 @@
return
/obj/attacked_by(obj/item/I, mob/living/user)
if(I.force)
var/totitemdamage = I.force
var/bad_trait
if(!(user.combat_flags & COMBAT_FLAG_COMBAT_ACTIVE) && iscarbon(user))
totitemdamage *= 0.5
bad_trait = SKILL_COMBAT_MODE //blacklist combat skills.
if(I.used_skills && user.mind)
if(totitemdamage)
totitemdamage = user.mind.item_action_skills_mod(I, totitemdamage, I.skill_difficulty, SKILL_ATTACK_OBJ, bad_trait)
for(var/skill in I.used_skills)
if(!(I.used_skills[skill] & SKILL_TRAIN_ATTACK_OBJ))
continue
user.mind.auto_gain_experience(skill, I.skill_gain)
if(totitemdamage)
visible_message("<span class='danger'>[user] has hit [src] with [I]!</span>", null, null, COMBAT_MESSAGE_RANGE)
//only witnesses close by and the victim see a hit message.
log_combat(user, src, "attacked", I)
take_damage(I.force, I.damtype, "melee", 1)
take_damage(totitemdamage, I.damtype, "melee", 1)
/mob/living/attacked_by(obj/item/I, mob/living/user)
//CIT CHANGES START HERE - combatmode and resting checks
var/totitemdamage = I.force
if(!(user.combat_flags & COMBAT_FLAG_COMBAT_ACTIVE))
totitemdamage *= 0.5
if(!CHECK_MOBILITY(user, MOBILITY_STAND))
totitemdamage *= 0.5
//CIT CHANGES END HERE
var/list/block_return = list()
if((user != src) && run_block(I, totitemdamage, "the [I.name]", ATTACK_TYPE_MELEE, I.armour_penetration, user, return_list = block_return) & BLOCK_SUCCESS)
var/totitemdamage = pre_attacked_by(I, user)
if((user != src) && mob_run_block(I, totitemdamage, "the [I.name]", ATTACK_TYPE_MELEE, I.armour_penetration, user, null, block_return) & BLOCK_SUCCESS)
return FALSE
totitemdamage = block_calculate_resultant_damage(totitemdamage, block_return)
send_item_attack_message(I, user)
I.do_stagger_action(src, user)
I.do_stagger_action(src, user, totitemdamage)
if(I.force)
apply_damage(totitemdamage, I.damtype) //CIT CHANGE - replaces I.force with totitemdamage
apply_damage(totitemdamage, I.damtype)
if(I.damtype == BRUTE)
if(prob(33))
I.add_mob_blood(src)
@@ -148,6 +154,28 @@
else
return ..()
/mob/living/proc/pre_attacked_by(obj/item/I, mob/living/user)
. = I.force
var/bad_trait
if(!(user.combat_flags & COMBAT_FLAG_COMBAT_ACTIVE) && iscarbon(user))
. *= 0.5
bad_trait = SKILL_COMBAT_MODE //blacklist combat skills.
if(!CHECK_MOBILITY(user, MOBILITY_STAND))
. *= 0.5
if(!user.mind || !I.used_skills)
return
if(.)
. = user.mind.item_action_skills_mod(I, ., I.skill_difficulty, SKILL_ATTACK_MOB, bad_trait)
for(var/skill in I.used_skills)
if(!(I.used_skills[skill] & SKILL_TRAIN_ATTACK_MOB))
continue
user.mind.auto_gain_experience(skill, I.skill_gain)
/mob/living/carbon/pre_attacked_by(obj/item/I, mob/living/user)
. = ..()
if(!(combat_flags & COMBAT_FLAG_COMBAT_ACTIVE))
. *= 1.5
// Proximity_flag is 1 if this afterattack was called on something adjacent, in your square, or on your person.
// Click parameters is the params string from byond Click() code, see that documentation.
/obj/item/proc/afterattack(atom/target, mob/user, proximity_flag, click_parameters)
@@ -181,22 +209,30 @@
return 1
/// How much stamina this takes to swing this is not for realism purposes hecc off.
/obj/item/proc/getweight()
return total_mass || w_class * 1.25
/obj/item/proc/getweight(mob/living/user, multiplier = 1, trait = SKILL_STAMINA_COST)
. = (total_mass || w_class * STAM_COST_W_CLASS_MULT) * multiplier
if(!user)
return
var/bad_trait
if(iscarbon(user) && !(user.combat_flags & COMBAT_FLAG_COMBAT_ACTIVE))
. *= STAM_COST_NO_COMBAT_MULT
bad_trait = SKILL_COMBAT_MODE
if(used_skills && user.mind)
. = user.mind.item_action_skills_mod(src, ., skill_difficulty, trait, bad_trait, FALSE)
/// How long this staggers for. 0 and negatives supported.
/obj/item/proc/melee_stagger_duration()
/obj/item/proc/melee_stagger_duration(force_override)
if(!isnull(stagger_force))
return stagger_force
/// totally not an untested, arbitrary equation.
return clamp((1.5 + (w_class/7.5)) * (force / 2), 0, 10 SECONDS)
return clamp((1.5 + (w_class/7.5)) * ((force_override || force) / 2), 0, 10 SECONDS)
/obj/item/proc/do_stagger_action(mob/living/target, mob/living/user)
/obj/item/proc/do_stagger_action(mob/living/target, mob/living/user, force_override)
if(!CHECK_BITFIELD(target.status_flags, CANSTAGGER))
return FALSE
if(target.combat_flags & COMBAT_FLAG_SPRINT_ACTIVE)
target.do_staggered_animation()
var/duration = melee_stagger_duration()
var/duration = melee_stagger_duration(force_override)
if(!duration) //0
return FALSE
else if(duration > 0)
+9 -3
View File
@@ -3,9 +3,7 @@
name = "Initializing..."
var/target
INITIALIZE_IMMEDIATE(/obj/effect/statclick)
/obj/effect/statclick/Initialize(mapload, text, target) //Don't port this to Initialize it's too critical
/obj/effect/statclick/New(loc, text, target) //Don't port this to Initialize it's too critical
. = ..()
name = text
src.target = target
@@ -33,6 +31,14 @@ INITIALIZE_IMMEDIATE(/obj/effect/statclick)
usr.client.debug_variables(target)
message_admins("Admin [key_name_admin(usr)] is debugging the [target] [class].")
/obj/effect/statclick/misc_subsystems/Click()
if(!usr.client.holder)
return
var/subsystem = input(usr, "Debug which subsystem?", "Debug nonprocessing subsystem") as null|anything in (Master.subsystems - Master.statworthy_subsystems)
if(!subsystem)
return
usr.client.debug_variables(subsystem)
message_admins("Admin [key_name_admin(usr)] is debugging the [subsystem] subsystem.")
// Debug verbs.
/client/proc/restart_controller(controller in list("Master", "Failsafe"))
@@ -35,6 +35,13 @@
/datum/config_entry/keyed_list/midround_antag/ValidateListEntry(key_name, key_value)
return key_name in config.modes
/datum/config_entry/keyed_list/force_antag_count
key_mode = KEY_MODE_TEXT
value_mode = VALUE_MODE_FLAG
/datum/config_entry/keyed_list/force_antag_count/ValidateListEntry(key_name, key_value)
return key_name in config.modes
/datum/config_entry/keyed_list/policy
key_mode = KEY_MODE_TEXT
value_mode = VALUE_MODE_TEXT
@@ -74,6 +81,8 @@
/datum/config_entry/flag/disable_peaceborg
/datum/config_entry/flag/economy //money money money money money money money money money money money money
/datum/config_entry/number/minimum_secborg_alert //Minimum alert level for secborgs to be chosen.
config_entry_value = 3
@@ -498,3 +507,13 @@
//Allows players to set a hexadecimal color of their choice as skin tone, on top of the standard ones.
/datum/config_entry/flag/allow_custom_skintones
///Initial loadout points
/datum/config_entry/number/initial_gear_points
config_entry_value = 10
/**
* Enables the FoV component, which hides objects and mobs behind the parent from their sight, unless they turn around, duh.
* Camera mobs, AIs, ghosts and some other are of course exempt from this. This also doesn't influence simplemob AI, for the best.
*/
/datum/config_entry/flag/use_field_of_vision
+15 -1
View File
@@ -28,6 +28,8 @@ GLOBAL_REAL(Master, /datum/controller/master) = new
// List of subsystems to process().
var/list/subsystems
/// List of subsystems to include in the MC stat panel.
var/list/statworthy_subsystems
// Vars for keeping track of tick drift.
var/init_timeofday
@@ -65,6 +67,9 @@ GLOBAL_REAL(Master, /datum/controller/master) = new
//used by CHECK_TICK as well so that the procs subsystems call can obey that SS's tick limits
var/static/current_ticklimit = TICK_LIMIT_RUNNING
/// Statclick for misc subsystems
var/obj/effect/statclick/misc_subsystems/misc_statclick
/datum/controller/master/New()
if(!config)
config = new
@@ -87,6 +92,11 @@ GLOBAL_REAL(Master, /datum/controller/master) = new
_subsystems += new I
Master = src
// We want to see all subsystems during init.
statworthy_subsystems = subsystems.Copy()
misc_statclick = new(null, "Debug")
if(!GLOB)
new /datum/controller/global_vars
@@ -257,10 +267,14 @@ GLOBAL_REAL(Master, /datum/controller/master) = new
var/list/tickersubsystems = list()
var/list/runlevel_sorted_subsystems = list(list()) //ensure we always have at least one runlevel
var/timer = world.time
statworthy_subsystems = list()
for (var/thing in subsystems)
var/datum/controller/subsystem/SS = thing
if (SS.flags & SS_NO_FIRE)
if(SS.flags & SS_ALWAYS_SHOW_STAT)
statworthy_subsystems += SS
continue
statworthy_subsystems += SS
SS.queued_time = 0
SS.queue_next = null
SS.queue_prev = null
@@ -603,7 +617,7 @@ GLOBAL_REAL(Master, /datum/controller/master) = new
stat("Byond:", "(FPS:[world.fps]) (TickCount:[world.time/world.tick_lag]) (TickDrift:[round(Master.tickdrift,1)]([round((Master.tickdrift/(world.time/world.tick_lag))*100,0.1)]%)) (Internal Tick Usage: [round(MAPTICK_LAST_INTERNAL_TICK_USAGE,0.1)]%)")
stat("Master Controller:", statclick.update("(TickRate:[Master.processing]) (Iteration:[Master.iteration]) (TickLimit: [round(Master.current_ticklimit, 0.1)])"))
stat("Misc Subsystems", misc_statclick)
/datum/controller/master/StartLoadingMap()
//disallow more than one map to load at once, multithreading it will just cause race conditions
+139
View File
@@ -0,0 +1,139 @@
SUBSYSTEM_DEF(economy)
name = "Economy"
wait = 5 MINUTES
init_order = INIT_ORDER_ECONOMY
runlevels = RUNLEVEL_GAME
var/roundstart_paychecks = 5
var/budget_pool = 35000
var/list/department_accounts = list(ACCOUNT_CIV = ACCOUNT_CIV_NAME,
ACCOUNT_ENG = ACCOUNT_ENG_NAME,
ACCOUNT_SCI = ACCOUNT_SCI_NAME,
ACCOUNT_MED = ACCOUNT_MED_NAME,
ACCOUNT_SRV = ACCOUNT_SRV_NAME,
ACCOUNT_CAR = ACCOUNT_CAR_NAME,
ACCOUNT_SEC = ACCOUNT_SEC_NAME)
var/list/generated_accounts = list()
var/full_ancap = FALSE // Enables extra money charges for things that normally would be free, such as sleepers/cryo/cloning.
//Take care when enabling, as players will NOT respond well if the economy is set up for low cash flows.
var/alive_humans_bounty = 100
var/crew_safety_bounty = 1500
var/monster_bounty = 150
var/mood_bounty = 100
var/techweb_bounty = 250
var/slime_bounty = list("grey" = 10,
// tier 1
"orange" = 100,
"metal" = 100,
"blue" = 100,
"purple" = 100,
// tier 2
"dark purple" = 500,
"dark blue" = 500,
"green" = 500,
"silver" = 500,
"gold" = 500,
"yellow" = 500,
"red" = 500,
"pink" = 500,
// tier 3
"cerulean" = 750,
"sepia" = 750,
"bluespace" = 750,
"pyrite" = 750,
"light pink" = 750,
"oil" = 750,
"adamantine" = 750,
// tier 4
"rainbow" = 1000)
var/list/bank_accounts = list() //List of normal accounts (not department accounts)
var/list/dep_cards = list()
/datum/controller/subsystem/economy/Initialize(timeofday)
var/budget_to_hand_out = round(budget_pool / department_accounts.len)
for(var/A in department_accounts)
new /datum/bank_account/department(A, budget_to_hand_out)
return ..()
/datum/controller/subsystem/economy/fire(resumed = 0)
eng_payout() // Payout based on nothing. What will replace it? Surplus power, powered APC's, air alarms? Who knows.
sci_payout() // Payout based on slimes.
secmedsrv_payout() // Payout based on crew safety, health, and mood.
civ_payout() // Payout based on ??? Profit
car_payout() // Cargo's natural gain in the cash moneys.
for(var/A in bank_accounts)
var/datum/bank_account/B = A
B.payday(1)
/datum/controller/subsystem/economy/proc/get_dep_account(dep_id)
for(var/datum/bank_account/department/D in generated_accounts)
if(D.department_id == dep_id)
return D
/datum/controller/subsystem/economy/proc/eng_payout()
var/engineering_cash = 3000
var/datum/bank_account/D = get_dep_account(ACCOUNT_ENG)
if(D)
D.adjust_money(engineering_cash)
/datum/controller/subsystem/economy/proc/car_payout()
var/cargo_cash = 500
var/datum/bank_account/D = get_dep_account(ACCOUNT_CAR)
if(D)
D.adjust_money(cargo_cash)
/datum/controller/subsystem/economy/proc/secmedsrv_payout()
var/crew
var/alive_crew
var/dead_monsters
var/cash_to_grant
for(var/mob/m in GLOB.mob_list)
if(isnewplayer(m))
continue
if(m.mind)
if(isbrain(m) || iscameramob(m))
continue
if(ishuman(m))
var/mob/living/carbon/human/H = m
crew++
if(H.stat != DEAD)
alive_crew++
var/datum/component/mood/mood = H.GetComponent(/datum/component/mood)
var/medical_cash = (H.health / H.maxHealth) * alive_humans_bounty
if(mood)
var/datum/bank_account/D = get_dep_account(ACCOUNT_SRV)
if(D)
var/mood_dosh = (mood.mood_level / 9) * mood_bounty
D.adjust_money(mood_dosh)
medical_cash *= (mood.sanity / 100)
var/datum/bank_account/D = get_dep_account(ACCOUNT_MED)
if(D)
D.adjust_money(medical_cash)
if(ishostile(m))
var/mob/living/simple_animal/hostile/H = m
if(H.stat == DEAD && (H.z in SSmapping.levels_by_trait(ZTRAIT_STATION)))
dead_monsters++
CHECK_TICK
var/living_ratio = alive_crew / crew
cash_to_grant = (crew_safety_bounty * living_ratio) + (monster_bounty * dead_monsters)
var/datum/bank_account/D = get_dep_account(ACCOUNT_SEC)
if(D)
D.adjust_money(min(cash_to_grant, MAX_GRANT_SECMEDSRV))
/datum/controller/subsystem/economy/proc/sci_payout()
var/science_bounty = 0
for(var/mob/living/simple_animal/slime/S in GLOB.mob_list)
if(S.stat == DEAD)
continue
science_bounty += slime_bounty[S.colour]
var/datum/bank_account/D = get_dep_account(ACCOUNT_SCI)
if(D)
D.adjust_money(min(science_bounty, MAX_GRANT_SCI))
/datum/controller/subsystem/economy/proc/civ_payout()
var/civ_cash = (rand(1,5) * 500)
var/datum/bank_account/D = get_dep_account(ACCOUNT_CIV)
if(D)
D.adjust_money(min(civ_cash, MAX_GRANT_CIV))
+15
View File
@@ -451,3 +451,18 @@ SUBSYSTEM_DEF(garbage)
#endif
#endif
#ifdef TESTING
/proc/writeDatumCount()
var/list/datums = list()
for(var/datum/D in world)
datums[D.type] += 1
for(var/datum/D)
datums[D.type] += 1
datums = sortTim(datums, /proc/cmp_numeric_dsc, associative = TRUE)
if(fexists("data/DATUMCOUNT.txt"))
fdel("data/DATUMCOUNT.txt")
var/outfile = file("data/DATUMCOUNT.txt")
for(var/path in datums)
outfile << "[datums[path]]\t\t\t\t\t[path]"
#endif
+71 -84
View File
@@ -6,13 +6,20 @@ SUBSYSTEM_DEF(input)
priority = FIRE_PRIORITY_INPUT
runlevels = RUNLEVELS_DEFAULT | RUNLEVEL_LOBBY
var/list/macro_sets
var/list/movement_keys
/// Classic mode input focused macro set. Manually set because we can't define ANY or ANY+UP for classic.
var/static/list/macroset_classic_input
/// Classic mode map focused macro set. Manually set because it needs to be clientside and go to macroset_classic_input.
var/static/list/macroset_classic_hotkey
/// New hotkey mode macro set. All input goes into map, game keeps incessently setting your focus to map, we can use ANY all we want here; we don't care about the input bar, the user has to force the input bar every time they want to type.
var/static/list/macroset_hotkey
/// Macro set for hotkeys
var/list/hotkey_mode_macros
/// Macro set for classic.
var/list/input_mode_macros
/datum/controller/subsystem/input/Initialize()
setup_default_macro_sets()
setup_default_movement_keys()
setup_macrosets()
initialized = TRUE
@@ -20,90 +27,69 @@ SUBSYSTEM_DEF(input)
return ..()
// This is for when macro sets are eventualy datumized
/datum/controller/subsystem/input/proc/setup_default_macro_sets()
var/list/static/default_macro_sets
if(default_macro_sets)
macro_sets = default_macro_sets
return
default_macro_sets = list(
"default" = list(
"Tab" = "\".winset \\\"input.focus=true?map.focus=true input.background-color=[COLOR_INPUT_DISABLED]:input.focus=true input.background-color=[COLOR_INPUT_ENABLED]\\\"\"",
"O" = "ooc",
"Ctrl+O" = "looc",
"T" = "say",
"Ctrl+T" = "whisper",
"M" = "me",
"Ctrl+M" = "subtle",
"Back" = "\".winset \\\"input.text=\\\"\\\"\\\"\"", // This makes it so backspace can remove default inputs
"Any" = "\"KeyDown \[\[*\]\]\"",
"Any+UP" = "\"KeyUp \[\[*\]\]\"",
),
"old_default" = list(
"Tab" = "\".winset \\\"mainwindow.macro=old_hotkeys map.focus=true input.background-color=[COLOR_INPUT_DISABLED]\\\"\"",
"Ctrl+T" = "say",
"Ctrl+O" = "ooc",
),
"old_hotkeys" = list(
"Tab" = "\".winset \\\"mainwindow.macro=old_default input.focus=true input.background-color=[COLOR_INPUT_ENABLED]\\\"\"",
"O" = "ooc",
"L" = "looc",
"T" = "say",
"M" = "me",
"Back" = "\".winset \\\"input.text=\\\"\\\"\\\"\"", // This makes it so backspace can remove default inputs
"Any" = "\"KeyDown \[\[*\]\]\"",
"Any+UP" = "\"KeyUp \[\[*\]\]\"",
),
)
// Because i'm lazy and don't want to type all these out twice
var/list/old_default = default_macro_sets["old_default"]
var/list/static/oldmode_keys = list(
/// Sets up the key list for classic mode for when badmins screw up vv's.
/datum/controller/subsystem/input/proc/setup_macrosets()
// First, let's do the snowflake keyset!
macroset_classic_input = list()
var/list/classic_mode_keys = list(
"North", "East", "South", "West",
"Northeast", "Southeast", "Northwest", "Southwest",
"Insert", "Delete", "Ctrl", "Alt",
"Insert", "Delete", "Ctrl", "Alt", "Shift",
"F1", "F2", "F3", "F4", "F5", "F6", "F7", "F8", "F9", "F10", "F11", "F12",
)
for(var/key in classic_mode_keys)
macroset_classic_input[key] = "\"KeyDown [key]\""
macroset_classic_input["[key]+UP"] = "\"KeyUp [key]\""
// LET'S PLAY THE BIND EVERY KEY GAME!
// oh except for Backspace and Enter; if you want to use those you shouldn't have used oldmode!
var/list/classic_ctrl_override_keys = list(
"\[", "\]", "\\\\", ";", "'", ",", ".", "/", "-", "=", "`"
)
// i'm lazy let's play the list iteration game of numbers
for(var/i in 0 to 9)
classic_ctrl_override_keys += "[i]"
// let's play the ascii game of A to Z (UPPERCASE)
for(var/i in 65 to 90)
classic_ctrl_override_keys += ascii2text(i)
// let's play the game of clientside bind overrides!
classic_ctrl_override_keys -= list("T", "O", "M", "L")
macroset_classic_input["Ctrl+T"] = "say"
macroset_classic_input["Ctrl+O"] = "ooc"
macroset_classic_input["Ctrl+L"] = "looc"
// let's play the list iteration game x2
for(var/key in classic_ctrl_override_keys)
// make sure to double double quote to ensure things are treated as a key combo instead of addition/semicolon logic.
macroset_classic_input["\"Ctrl+[key]\""] = "\"KeyDown [istext(classic_ctrl_override_keys[key])? classic_ctrl_override_keys[key] : key]\""
macroset_classic_input["\"Ctrl+[key]+UP\""] = "\"KeyUp [istext(classic_ctrl_override_keys[key])? classic_ctrl_override_keys[key] : key]\""
// Misc
macroset_classic_input["Tab"] = "\".winset \\\"mainwindow.macro=[SKIN_MACROSET_CLASSIC_HOTKEYS] map.focus=true input.background-color=[COLOR_INPUT_DISABLED]\\\"\""
macroset_classic_input["Escape"] = "\".winset \\\"input.text=\\\"\\\"\\\"\""
for(var/i in 1 to oldmode_keys.len)
var/key = oldmode_keys[i]
old_default[key] = "\"KeyDown [key]\""
old_default["[key]+UP"] = "\"KeyUp [key]\""
// FINALLY, WE CAN DO SOMETHING MORE NORMAL FOR THE SNOWFLAKE-BUT-LESS KEYSET.
macroset_classic_hotkey = list(
"Any" = "\"KeyDown \[\[*\]\]\"",
"Any+UP" = "\"KeyUp \[\[*\]\]\"",
"Tab" = "\".winset \\\"mainwindow.macro=[SKIN_MACROSET_CLASSIC_INPUT] input.focus=true input.background-color=[COLOR_INPUT_ENABLED]\\\"\"",
"Escape" = "\".winset \\\"input.text=\\\"\\\"\\\"\"",
"Back" = "\".winset \\\"input.text=\\\"\\\"\\\"\"",
"O" = "ooc",
"T" = "say",
"L" = "looc",
"M" = "me"
)
var/list/static/oldmode_ctrl_override_keys = list(
"W" = "W", "A" = "A", "S" = "S", "D" = "D", // movement
"1" = "1", "2" = "2", "3" = "3", "4" = "4", // intent
"B" = "B", // resist
"E" = "E", // quick equip
"F" = "F", // intent left
"G" = "G", // intent right
"H" = "H", // stop pulling
"Q" = "Q", // drop
"R" = "R", // throw
"X" = "X", // switch hands
"Y" = "Y", // activate item
"Z" = "Z", // activate item
)
for(var/i in 1 to oldmode_ctrl_override_keys.len)
var/key = oldmode_ctrl_override_keys[i]
var/override = oldmode_ctrl_override_keys[key]
old_default["Ctrl+[key]"] = "\"KeyDown [override]\""
old_default["Ctrl+[key]+UP"] = "\"KeyUp [override]\""
macro_sets = default_macro_sets
// For initially setting up or resetting to default the movement keys
/datum/controller/subsystem/input/proc/setup_default_movement_keys()
var/static/list/default_movement_keys = list(
"W" = NORTH, "A" = WEST, "S" = SOUTH, "D" = EAST, // WASD
"North" = NORTH, "West" = WEST, "South" = SOUTH, "East" = EAST, // Arrow keys & Numpad
)
movement_keys = default_movement_keys.Copy()
// And finally, the modern set.
macroset_hotkey = list(
"Any" = "\"KeyDown \[\[*\]\]\"",
"Any+UP" = "\"KeyUp \[\[*\]\]\"",
"Tab" = "\".winset \\\"input.focus=true?map.focus=true input.background-color=[COLOR_INPUT_DISABLED]:input.focus=true input.background-color=[COLOR_INPUT_ENABLED]\\\"\"",
"Escape" = "\".winset \\\"input.text=\\\"\\\"\\\"\"",
"Back" = "\".winset \\\"input.text=\\\"\\\"\\\"\"",
"O" = "ooc",
"T" = "say",
"L" = "looc",
"M" = "me"
)
// Badmins just wanna have fun ♪
/datum/controller/subsystem/input/proc/refresh_client_macro_sets()
@@ -111,9 +97,10 @@ SUBSYSTEM_DEF(input)
for(var/i in 1 to clients.len)
var/client/user = clients[i]
user.set_macros()
user.update_movement_keys()
/datum/controller/subsystem/input/fire()
var/list/clients = GLOB.clients // Let's sing the list cache song
for(var/i in 1 to length(clients))
for(var/i in 1 to clients.len)
var/client/C = clients[i]
C.keyLoop()
+4
View File
@@ -479,6 +479,10 @@ SUBSYSTEM_DEF(job)
to_chat(M, "<b>[job.custom_spawn_text]</b>")
if(CONFIG_GET(number/minimal_access_threshold))
to_chat(M, "<span class='notice'><B>As this station was initially staffed with a [CONFIG_GET(flag/jobs_have_minimal_access) ? "full crew, only your job's necessities" : "skeleton crew, additional access may"] have been added to your ID card.</B></span>")
if(ishuman(H))
var/mob/living/carbon/human/wageslave = H
to_chat(M, "<b><span class = 'big'>Your account ID is [wageslave.account_id].</span></b>")
H.add_memory("Your account ID is [wageslave.account_id].")
if(job && H)
if(job.dresscodecompliant)// CIT CHANGE - dress code compliance
equip_loadout(N, H) // CIT CHANGE - allows players to spawn with loadout items
-4
View File
@@ -1,4 +0,0 @@
PROCESSING_SUBSYSTEM_DEF(mood)
name = "Mood"
flags = SS_NO_INIT | SS_BACKGROUND
priority = 20
+19
View File
@@ -24,6 +24,8 @@ SUBSYSTEM_DEF(persistence)
var/list/saved_votes = list()
var/list/obj/structure/sign/picture_frame/photo_frames
var/list/obj/item/storage/photo_album/photo_albums
var/list/obj/structure/sign/painting/painting_frames = list()
var/list/paintings = list()
/datum/controller/subsystem/persistence/Initialize()
LoadSatchels()
@@ -265,6 +267,7 @@ SUBSYSTEM_DEF(persistence)
CollectAntagReputation()
SaveRandomizedRecipes()
SavePanicBunker()
SavePaintings()
/datum/controller/subsystem/persistence/proc/LoadPanicBunker()
var/bunker_path = file("data/bunker_passthrough.json")
@@ -528,3 +531,19 @@ SUBSYSTEM_DEF(persistence)
file_data["data"] = saved_votes[ckey]
fdel(json_file)
WRITE_FILE(json_file, json_encode(file_data))
/datum/controller/subsystem/persistence/proc/LoadPaintings()
var/json_file = file("data/paintings.json")
if(fexists(json_file))
paintings = json_decode(file2text(json_file))
for(var/obj/structure/sign/painting/P in painting_frames)
P.load_persistent()
/datum/controller/subsystem/persistence/proc/SavePaintings()
for(var/obj/structure/sign/painting/P in painting_frames)
P.save_persistent()
var/json_file = file("data/paintings.json")
fdel(json_file)
WRITE_FILE(json_file, json_encode(paintings))
@@ -1,21 +1,22 @@
PROCESSING_SUBSYSTEM_DEF(projectiles)
name = "Projectiles"
priority = FIRE_PRIORITY_PROJECTILES
wait = 1
stat_tag = "PP"
flags = SS_NO_INIT|SS_TICKER
var/global_pixel_speed = 2
var/global_iterations_per_move = 16
var/global_pixel_increment_amount = 4
var/global_projectile_speed_multiplier = 1
/datum/controller/subsystem/processing/projectiles/proc/set_pixel_speed(new_speed)
global_pixel_speed = new_speed
global_pixel_increment_amount = new_speed
for(var/i in processing)
var/obj/item/projectile/P = i
if(istype(P)) //there's non projectiles on this too.
P.set_pixel_speed(new_speed)
P.set_pixel_increment_amount(new_speed)
/datum/controller/subsystem/processing/projectiles/vv_edit_var(var_name, var_value)
switch(var_name)
if(NAMEOF(src, global_pixel_speed))
if(NAMEOF(src, global_pixel_increment_amount))
set_pixel_speed(var_value)
return TRUE
else
+3
View File
@@ -24,6 +24,7 @@ SUBSYSTEM_DEF(research)
var/list/techweb_categories = list() //category name = list(node.id = TRUE)
var/list/techweb_boost_items = list() //associative double-layer path = list(id = list(point_type = point_discount))
var/list/techweb_nodes_hidden = list() //Node ids that should be hidden by default.
var/list/techweb_nodes_experimental = list() //Node ids that are exclusive to the BEPIS.
var/list/techweb_point_items = list( //path = list(point type = value)
/obj/item/assembly/signaler/anomaly = list(TECHWEB_POINT_TYPE_GENERIC = 10000),
@@ -508,6 +509,8 @@ SUBSYSTEM_DEF(research)
D.unlocked_by += node.id
if(node.hidden)
techweb_nodes_hidden[node.id] = TRUE
if(node.experimental)
techweb_nodes_experimental[node.id] = TRUE
CHECK_TICK
generate_techweb_unlock_linking()
-6
View File
@@ -35,10 +35,8 @@ SUBSYSTEM_DEF(shuttle)
//supply shuttle stuff
var/obj/docking_port/mobile/supply/supply
var/ordernum = 1 //order number given to next order
var/points = 5000 //number of trade-points we have
var/centcom_message = "" //Remarks from CentCom on how well you checked the last order.
var/list/discoveredPlants = list() //Typepaths for unusual plants we've already sent CentCom, associated with their potencies
var/passive_supply_points_per_minute = 125
var/list/supply_packs = list()
var/list/shoppinglist = list()
@@ -113,9 +111,6 @@ SUBSYSTEM_DEF(shuttle)
qdel(T, force=TRUE)
CheckAutoEvac()
if(!(times_fired % CEILING(600/wait, 1)))
points += passive_supply_points_per_minute
var/esETA = emergency?.getModeStr()
emergency_shuttle_stat_text = "[esETA? "[esETA] [emergency.getTimerStr()]" : ""]"
@@ -559,7 +554,6 @@ SUBSYSTEM_DEF(shuttle)
centcom_message = SSshuttle.centcom_message
ordernum = SSshuttle.ordernum
points = SSshuttle.points
emergencyNoEscape = SSshuttle.emergencyNoEscape
emergencyCallAmount = SSshuttle.emergencyCallAmount
shuttle_purchased = SSshuttle.shuttle_purchased
+3
View File
@@ -186,6 +186,8 @@
/datum/action/item_action/New(Target)
..()
if(button_icon_state)
use_target_appearance = FALSE
var/obj/item/I = target
LAZYINITLIST(I.actions)
I.actions += src
@@ -345,6 +347,7 @@
/datum/action/item_action/clock/quickbind
name = "Quickbind"
desc = "If you're seeing this, file a bug report."
use_target_appearance = FALSE
var/scripture_index = 0 //the index of the scripture we're associated with
/datum/action/item_action/toggle_helmet_flashlight
+1 -1
View File
@@ -8,11 +8,11 @@
icon_icon = 'icons/mob/actions/actions_spells.dmi'
/datum/action/item_action/ninjaboost
check_flags = NONE
name = "Adrenaline Boost"
desc = "Inject a secret chemical that will counteract all movement-impairing effect."
button_icon_state = "repulse"
icon_icon = 'icons/mob/actions/actions_spells.dmi'
required_mobility_flags = NONE
/datum/action/item_action/ninjapulse
name = "EM Burst (25E)"
+1 -1
View File
@@ -63,7 +63,7 @@
if(prob(2))
switch(rand(1,2))
if(1)
to_chat(owner, "<i>...[lowertext(hypnotic_phrase)]...</i>")
to_chat(owner, "<span class='hypnophrase'><i>...[lowertext(hypnotic_phrase)]...</i></span>")
if(2)
new /datum/hallucination/chat(owner, TRUE, FALSE, "<span class='hypnophrase'>[hypnotic_phrase]</span>")

Some files were not shown because too many files have changed in this diff Show More