Merge branch 'master' into punch-bundle

This commit is contained in:
kiwedespars
2020-04-19 16:50:01 -07:00
committed by GitHub
1014 changed files with 182479 additions and 42577 deletions
+36
View File
@@ -0,0 +1,36 @@
name: Compile changelogs
on:
schedule:
- cron: "0 0 * * *"
jobs:
compile:
name: "Compile changelogs"
runs-on: ubuntu-latest
steps:
- name: "Setup python"
uses: actions/setup-python@v1
with:
python-version: '3.x'
- name: "Install deps"
run: |
python -m pip install --upgrade pip
python -m pip install pyyaml
- name: "Checkout"
uses: actions/checkout@v1
with:
fetch-depth: 25
- name: "Compile"
run: |
python tools/ss13_genchangelog.py html/changelog.html html/changelogs
- name: Commit
run: |
git config --local user.email "action@github.com"
git config --local user.name "Changelogs"
git pull origin master
git commit -m "Automatic changelog compile [ci skip]" -a || true
- name: "Push"
uses: ad-m/github-push-action@master
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
+2
View File
@@ -0,0 +1,2 @@
[langserver]
dreamchecker = true
+9 -9
View File
@@ -66,7 +66,7 @@
/obj/structure/fluff/bus/passable/seat{
icon_state = "backseat"
},
/obj/item/reagent_containers/food/snacks/faggot,
/obj/item/reagent_containers/food/snacks/meatball,
/turf/open/floor/plasteel/airless/dark{
icon_state = "bus"
},
@@ -90,7 +90,7 @@
/obj/structure/fluff/bus/passable/seat{
icon_state = "backseat"
},
/obj/item/reagent_containers/food/snacks/faggot,
/obj/item/reagent_containers/food/snacks/meatball,
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/plasteel/airless/dark{
icon_state = "bus"
@@ -158,9 +158,9 @@
"aA" = (
/obj/structure/fluff/bus/passable,
/obj/structure/closet/crate/freezer,
/obj/item/reagent_containers/food/snacks/faggot,
/obj/item/reagent_containers/food/snacks/faggot,
/obj/item/reagent_containers/food/snacks/faggot,
/obj/item/reagent_containers/food/snacks/meatball,
/obj/item/reagent_containers/food/snacks/meatball,
/obj/item/reagent_containers/food/snacks/meatball,
/turf/open/floor/plasteel/airless/dark{
icon_state = "bus"
},
@@ -182,7 +182,7 @@
/area/ruin/unpowered/no_grav)
"aD" = (
/obj/structure/fluff/bus/passable,
/obj/item/reagent_containers/food/snacks/faggot,
/obj/item/reagent_containers/food/snacks/meatball,
/turf/open/floor/plasteel/airless/dark{
icon_state = "bus"
},
@@ -256,7 +256,7 @@
/turf/open/floor/plating/asteroid/airless,
/area/ruin/unpowered/no_grav)
"aP" = (
/obj/item/reagent_containers/food/snacks/faggot,
/obj/item/reagent_containers/food/snacks/meatball,
/turf/open/floor/plating/asteroid/airless,
/area/ruin/unpowered/no_grav)
"aQ" = (
@@ -282,7 +282,7 @@
icon_state = "backseat"
},
/obj/effect/decal/cleanable/dirt,
/obj/item/reagent_containers/food/snacks/faggot,
/obj/item/reagent_containers/food/snacks/meatball,
/turf/open/floor/plasteel/airless/dark{
icon_state = "bus"
},
@@ -318,7 +318,7 @@
"aZ" = (
/obj/structure/fluff/bus/passable,
/obj/effect/decal/cleanable/dirt,
/obj/item/reagent_containers/food/snacks/faggot,
/obj/item/reagent_containers/food/snacks/meatball,
/turf/open/floor/plasteel/airless/dark{
icon_state = "bus"
},
+165 -168
View File
@@ -145,9 +145,6 @@
"aE" = (
/turf/open/floor/plating/asteroid/airless,
/area/ruin/powered)
"aF" = (
/turf/open/floor/plating/asteroid,
/area/ruin/powered)
"aG" = (
/obj/structure/sink/puddle,
/turf/open/floor/plating/asteroid,
@@ -241,7 +238,7 @@
/turf/closed/mineral/random/low_chance/earth_like,
/area/ruin/powered)
"bb" = (
/turf/closed/mineral/random/earth_like,
/turf/closed/mineral/random/no_caves/earth_like,
/area/ruin/powered)
"bc" = (
/obj/item/circuitboard/machine/circuit_imprinter,
@@ -1137,7 +1134,7 @@ ao
ao
ak
af
aF
am
bb
bb
bb
@@ -1189,7 +1186,7 @@ an
an
ae
ae
aF
am
bb
bb
bb
@@ -1223,8 +1220,8 @@ bb
bb
bb
ba
aF
aF
am
am
ba
ba
ba
@@ -1241,7 +1238,7 @@ ar
af
at
at
aF
am
bb
fp
bb
@@ -1275,10 +1272,10 @@ bb
bb
bb
ad
aF
aF
aF
aF
am
am
am
am
ba
aH
aJ
@@ -1286,13 +1283,13 @@ aL
bb
bb
aT
aF
aF
aF
aF
aF
aF
aF
am
am
am
am
am
am
am
aR
bb
bb
@@ -1328,23 +1325,23 @@ bb
bb
ad
au
aF
am
aB
aF
aF
aF
aF
aF
am
am
am
am
am
ba
bb
aF
aF
aF
aF
aF
aF
aF
aF
am
am
am
am
am
am
am
am
bg
bb
fp
@@ -1384,19 +1381,19 @@ bs
aC
bC
WH
aF
aF
aF
am
am
am
ba
bb
bb
aF
aF
aF
aF
aF
aF
aF
am
am
am
am
am
am
am
bb
bb
bb
@@ -1432,23 +1429,23 @@ bb
bb
ad
ax
aF
am
aD
aF
aF
aF
aF
am
am
am
am
bb
bb
bb
aU
bd
aF
aF
am
am
bl
bm
aF
aF
am
am
bb
bb
bb
@@ -1484,20 +1481,20 @@ bb
bb
ad
ay
aF
aF
aF
am
am
am
aG
aF
aF
am
am
bb
bb
ba
av
be
aF
aF
aF
am
am
am
bn
bo
bo
@@ -1535,24 +1532,24 @@ bb
bb
bb
ba
aF
aF
aF
aF
aF
aF
aF
am
am
am
am
am
am
am
bb
bb
bb
bc
bf
aF
aF
aF
aF
aF
aF
am
am
am
am
am
am
br
bb
bb
@@ -1590,22 +1587,22 @@ bb
bb
bb
bb
aF
aF
aF
aF
aF
am
am
am
am
am
bb
bb
aF
aF
aF
aF
aF
aF
aF
aF
aF
am
am
am
am
am
am
am
am
am
bb
bb
bb
@@ -1642,21 +1639,21 @@ bb
bb
bb
bb
aF
aF
aF
aF
aF
am
am
am
am
am
aN
aF
aF
aF
aF
am
am
am
am
aR
aF
aF
aF
aF
am
am
am
am
bb
bb
fp
@@ -1695,22 +1692,22 @@ bb
bb
bb
ba
aF
aF
aF
am
am
am
ba
ba
aF
aF
aF
aF
aF
aF
aF
aF
aF
aF
aF
am
am
am
am
am
am
am
am
am
am
am
ba
ba
ba
@@ -1752,16 +1749,16 @@ ba
aK
ba
ba
aF
aF
aF
aF
aF
aF
aF
am
am
am
am
am
am
am
bp
aF
aF
am
am
aR
ba
ba
@@ -1805,15 +1802,15 @@ ba
fp
ba
aP
aF
aF
aF
aF
aF
aF
aF
aF
aF
am
am
am
am
am
am
am
am
am
aR
ba
ba
@@ -1858,15 +1855,15 @@ ba
ba
aQ
aP
aF
aF
am
am
aR
aF
aF
aF
aF
am
am
am
am
bb
aF
am
ba
ba
aZ
@@ -1910,12 +1907,12 @@ ba
ba
ba
ba
aF
aF
aF
aF
am
am
am
am
aP
aF
am
bg
bb
bb
@@ -1962,12 +1959,12 @@ bb
bb
ba
ba
aF
aF
aF
aF
aF
aF
am
am
am
am
am
am
aS
bb
fp
@@ -2015,11 +2012,11 @@ bb
bb
ba
bg
aF
aF
aF
aF
aF
am
am
am
am
am
aS
bb
fp
@@ -2066,12 +2063,12 @@ bb
bb
fp
ba
aF
aF
am
am
bj
aF
aF
aF
am
am
am
aS
fp
bb
@@ -2120,9 +2117,9 @@ ba
ba
aS
bi
aF
aF
aF
am
am
am
aS
aS
bb
@@ -2171,10 +2168,10 @@ ba
aZ
ba
aS
aF
aF
aF
aF
am
am
am
am
aS
aS
ba
+1 -1
View File
@@ -2688,7 +2688,7 @@
/obj/structure/window/reinforced{
dir = 1
},
/obj/structure/piano{
/obj/structure/musician/piano{
icon_state = "piano"
},
/turf/open/floor/plasteel/grimy,
+1 -1
View File
@@ -28,7 +28,7 @@
/turf/open/floor/holofloor/beach,
/area/ruin/space/has_grav/powered/aesthetic)
"i" = (
/obj/structure/piano,
/obj/structure/musician/piano,
/obj/structure/window{
dir = 8
},
@@ -154,13 +154,7 @@
/turf/open/floor/plasteel,
/area/mine/living_quarters)
"cX" = (
/obj/structure/statue{
desc = "A lifelike statue of a horrifying monster.";
dir = 8;
icon = 'icons/mob/lavaland/lavaland_monsters.dmi';
icon_state = "goliath";
name = "goliath"
},
/obj/structure/closet/secure_closet/miner,
/turf/open/floor/plasteel,
/area/mine/living_quarters)
"dk" = (
@@ -267,9 +261,13 @@
/turf/open/floor/plasteel,
/area/mine/living_quarters)
"eS" = (
/obj/structure/table,
/obj/item/gps/mining,
/obj/item/gps/mining,
/obj/structure/statue{
desc = "A lifelike statue of a horrifying monster.";
dir = 8;
icon = 'icons/mob/lavaland/lavaland_monsters.dmi';
icon_state = "goliath";
name = "goliath"
},
/turf/open/floor/plasteel,
/area/mine/living_quarters)
"fm" = (
@@ -427,7 +425,6 @@
/obj/effect/turf_decal/tile/brown{
dir = 4
},
/obj/structure/displaycase,
/turf/open/floor/plasteel,
/area/mine/living_quarters)
"hP" = (
@@ -773,7 +770,8 @@
/turf/open/floor/plasteel,
/area/mine/laborcamp/security)
"nH" = (
/obj/structure/displaycase,
/obj/machinery/light,
/obj/structure/closet/wardrobe/miner,
/turf/open/floor/plasteel,
/area/mine/living_quarters)
"nI" = (
@@ -1086,6 +1084,7 @@
/obj/effect/turf_decal/tile/brown{
dir = 1
},
/obj/effect/turf_decal/tile/brown,
/turf/open/floor/plasteel,
/area/mine/living_quarters)
"re" = (
@@ -1181,9 +1180,6 @@
name = "Station Intercom (General)";
pixel_x = 28
},
/obj/effect/turf_decal/tile/purple{
dir = 4
},
/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer3{
dir = 8
},
@@ -1279,12 +1275,8 @@
/turf/open/floor/plasteel,
/area/mine/production)
"uG" = (
/obj/structure/table,
/obj/item/clothing/glasses/meson,
/obj/item/storage/bag/ore,
/obj/item/pickaxe,
/obj/item/mining_scanner,
/obj/item/flashlight,
/obj/structure/ore_box,
/obj/effect/turf_decal/box,
/turf/open/floor/plasteel,
/area/mine/living_quarters)
"uI" = (
@@ -1758,15 +1750,6 @@
"Cd" = (
/turf/closed/wall,
/area/mine/production)
"Cg" = (
/obj/structure/table,
/obj/item/tank/internals/emergency_oxygen{
pixel_x = 5;
pixel_y = 3
},
/obj/item/tank/internals/emergency_oxygen,
/turf/open/floor/plasteel,
/area/mine/living_quarters)
"Cj" = (
/obj/machinery/atmospherics/components/unary/vent_pump/on{
dir = 1
@@ -1870,7 +1853,6 @@
/obj/machinery/light{
dir = 1
},
/obj/structure/chair,
/turf/open/floor/plasteel,
/area/mine/living_quarters)
"Dv" = (
@@ -1880,12 +1862,6 @@
},
/turf/open/floor/plating,
/area/mine/laborcamp/security)
"DN" = (
/obj/machinery/computer/shuttle/mining/common{
dir = 4
},
/turf/open/floor/plasteel,
/area/mine/living_quarters)
"Ed" = (
/obj/effect/spawner/structure/window/reinforced,
/turf/open/floor/plating,
@@ -2028,27 +2004,6 @@
},
/turf/open/floor/plating,
/area/mine/laborcamp)
"Hk" = (
/obj/docking_port/stationary{
area_type = /area/lavaland/surface/outdoors;
dir = 8;
dwidth = 3;
height = 7;
id = "lavaland_common_away";
name = "Mining base public dock";
width = 7
},
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
/area/lavaland/surface/outdoors)
"Hm" = (
/obj/effect/mapping_helpers/airlock/cyclelink_helper{
dir = 8
},
/obj/machinery/door/airlock/external{
name = "Lavaland Shuttle Airlock"
},
/turf/open/floor/plasteel,
/area/mine/living_quarters)
"Ho" = (
/obj/machinery/door/airlock{
name = "Restroom"
@@ -2121,12 +2076,6 @@
},
/turf/open/floor/plasteel/white,
/area/mine/living_quarters)
"If" = (
/obj/structure/chair{
dir = 4
},
/turf/open/floor/plasteel,
/area/mine/living_quarters)
"Ii" = (
/obj/structure/table,
/obj/item/storage/box/donkpockets,
@@ -2757,9 +2706,6 @@
/obj/effect/turf_decal/tile/brown{
dir = 4
},
/obj/structure/table,
/obj/item/gps/mining,
/obj/item/gps/mining,
/turf/open/floor/plasteel,
/area/mine/living_quarters)
"Pq" = (
@@ -2882,7 +2828,6 @@
/obj/machinery/newscaster{
pixel_y = 32
},
/obj/structure/chair,
/turf/open/floor/plasteel,
/area/mine/living_quarters)
"Rv" = (
@@ -3399,15 +3344,6 @@
/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer3,
/turf/open/floor/plasteel,
/area/mine/living_quarters)
"Zw" = (
/obj/effect/mapping_helpers/airlock/cyclelink_helper{
dir = 4
},
/obj/machinery/door/airlock/external{
name = "Lavaland Shuttle Airlock"
},
/turf/open/floor/plasteel,
/area/mine/living_quarters)
"ZF" = (
/obj/machinery/telecomms/relay/preset/mining,
/obj/machinery/light/small{
@@ -4330,10 +4266,10 @@ VT
VT
VT
VT
Lm
Lm
Lm
Lm
VT
VT
VT
VT
VT
VT
VT
@@ -4386,14 +4322,14 @@ VT
VT
VT
VT
Lm
Lm
Lm
Lm
Lm
Lm
Lm
Lm
VT
VT
VT
VT
VT
VT
VT
VT
VT
VT
VT
@@ -4442,15 +4378,15 @@ wz
VT
VT
VT
VT
VT
VT
VT
VT
Lm
Lm
Lm
Lm
Lm
Lm
Lm
Lm
Lm
VT
VT
Lm
VT
VT
@@ -4499,17 +4435,17 @@ wz
wz
VT
VT
VT
VT
Lm
VT
VT
VT
Lm
Lm
Lm
Lm
Lm
Lm
Lm
Lm
Lm
Lm
VT
VT
VT
VT
Lm
VT
VT
@@ -4555,18 +4491,18 @@ Lm
wz
wz
Lm
VT
VT
VT
Lm
Lm
Lm
Lm
Lm
Lm
Lm
Lm
Lm
Lm
Lm
Lm
VT
VT
VT
VT
VT
VT
VT
@@ -4612,6 +4548,8 @@ VT
VT
wz
Lm
VT
VT
Lm
Lm
Lm
@@ -4620,10 +4558,8 @@ Lm
Lm
Lm
Lm
Lm
Lm
Lm
Lm
VT
VT
VT
VT
VT
@@ -4669,6 +4605,7 @@ VT
VT
Lm
Lm
VT
Lm
Lm
Lm
@@ -4678,8 +4615,7 @@ Lm
Lm
Lm
Lm
Lm
Lm
VT
VT
VT
VT
@@ -4725,12 +4661,12 @@ my
VT
VT
VT
VT
VT
Lm
Lm
Lm
Lm
Lm
Lm
VT
VT
Lm
Lm
Lm
@@ -4786,10 +4722,10 @@ wz
Lm
Lm
Lm
VT
Lm
Lm
Lm
Hk
Lm
Lm
Lm
@@ -4843,11 +4779,11 @@ wz
Lm
Lm
Lm
VT
Lm
Lm
Lm
Lm
KV
Zw
KV
Lm
Lm
Lm
@@ -4902,9 +4838,9 @@ Lm
Lm
Lm
Lm
KV
Ag
KV
Lm
Lm
Lm
Lm
Lm
VT
@@ -4959,9 +4895,9 @@ VN
VN
XX
VN
KV
Hm
KV
VN
VN
VN
VT
VT
VT
@@ -5013,12 +4949,12 @@ pu
bn
VN
zy
If
DN
If
FE
Ag
Ag
Ag
Ag
qZ
KV
VN
VT
VT
VT
@@ -5074,8 +5010,8 @@ Ag
Ag
Ag
Ag
Ag
KV
cX
VN
VT
VT
VT
@@ -5132,7 +5068,7 @@ uG
uG
Ag
cX
KV
VN
VT
VT
VT
@@ -5188,8 +5124,8 @@ KO
uG
uG
Ag
Ag
KV
cX
VN
VT
VT
VT
@@ -5245,7 +5181,7 @@ RP
Ag
Ag
Ag
oy
nH
VN
VT
VT
@@ -5300,8 +5236,8 @@ VN
Pp
sx
eS
Cg
nH
Ag
Ag
hH
VN
wz
+1 -1
View File
@@ -713,7 +713,7 @@
/turf/open/floor/wood,
/area/awaymission/cabin)
"cz" = (
/obj/structure/piano,
/obj/structure/musician/piano,
/turf/open/floor/wood,
/area/awaymission/cabin)
"cA" = (
+2 -2
View File
@@ -924,8 +924,8 @@
/area/awaymission/caves/BMP_asteroid/level_two)
"cK" = (
/obj/structure/sign/warning/securearea{
desc = "A warning sign which reads 'HOLY SHIT NIGGA WHAT ARE YOU DOING'.";
name = "\improper HOLY SHIT NIGGA WHAT ARE YOU DOING"
desc = "A warning sign which reads 'HOLY SHIT DUDE WHAT ARE YOU DOING'.";
name = "\improper HOLY SHIT DUDE WHAT ARE YOU DOING"
},
/turf/closed/wall,
/area/awaymission/caves/BMP_asteroid/level_two)
+4 -4
View File
@@ -761,7 +761,7 @@
},
/area/awaymission/moonoutpost19/syndicate)
"bF" = (
/obj/structure/toilet{
/obj/structure/toilet/secret/high_loot{
dir = 1
},
/turf/open/floor/plasteel/freezer{
@@ -4121,7 +4121,7 @@
},
/area/awaymission/moonoutpost19/research)
"hP" = (
/obj/structure/toilet{
/obj/structure/toilet/secret/high_loot{
dir = 4
},
/obj/effect/decal/cleanable/dirt,
@@ -4473,7 +4473,7 @@
},
/area/awaymission/moonoutpost19/research)
"iw" = (
/obj/structure/toilet{
/obj/structure/toilet/secret/high_loot{
dir = 4
},
/obj/machinery/light/small{
@@ -4764,7 +4764,7 @@
},
/area/awaymission/moonoutpost19/arrivals)
"iZ" = (
/obj/structure/toilet{
/obj/structure/toilet/secret/high_loot{
dir = 1
},
/turf/open/floor/plasteel/freezer{
+3 -3
View File
@@ -5939,7 +5939,7 @@
/turf/open/floor/plasteel,
/area/awaymission/snowdin/post/garage)
"mD" = (
/obj/structure/toilet{
/obj/structure/toilet/secret/high_loot{
dir = 1
},
/obj/machinery/light/small,
@@ -8796,7 +8796,7 @@
/turf/open/floor/plasteel/showroomfloor,
/area/awaymission/snowdin/post/cavern2)
"tk" = (
/obj/structure/toilet{
/obj/structure/toilet/secret/high_loot{
dir = 1
},
/turf/open/floor/plasteel/showroomfloor,
@@ -9643,7 +9643,7 @@
/turf/open/floor/plasteel/showroomfloor,
/area/awaymission/snowdin/post/cavern1)
"vE" = (
/obj/structure/toilet{
/obj/structure/toilet/secret/high_loot{
dir = 1
},
/turf/open/floor/plasteel/showroomfloor,
+1
View File
@@ -0,0 +1 @@
#define FORCE_MAP "_maps/cogstation.json"
+11
View File
@@ -0,0 +1,11 @@
{
"map_name": "CogStation",
"map_path": "map_files/CogStation",
"map_file": "CogStation.dmm",
"shuttles": {
"cargo": "cargo_box",
"ferry": "ferry_fancy",
"whiteship": "whiteship_cog",
"emergency": "emergency_cog"
}
}
+59 -122
View File
@@ -1337,7 +1337,7 @@
/turf/open/floor/plasteel,
/area/security/prison)
"adf" = (
/obj/structure/toilet{
/obj/structure/toilet/secret/prison{
dir = 1
},
/turf/open/floor/plasteel/freezer,
@@ -3988,7 +3988,6 @@
/obj/item/clothing/under/suit/waiter,
/obj/item/clothing/under/suit/waiter,
/obj/item/clothing/under/suit/waiter,
/obj/item/clothing/suit/straight_jacket,
/turf/open/floor/plasteel,
/area/crew_quarters/fitness)
"ahD" = (
@@ -7882,11 +7881,7 @@
/turf/open/floor/wood,
/area/lawoffice)
"aqa" = (
/obj/structure/closet/secure_closet/personal{
desc = "Swipe your ID on this locker to claim it. You can drag it around and use it as your own personal storage area. Very useful.";
name = "Personal ID-Locked Locker";
pixel_y = 10
},
/obj/structure/closet/secure_closet/personal,
/turf/open/floor/carpet,
/area/crew_quarters/dorms)
"aqb" = (
@@ -8021,11 +8016,7 @@
/turf/open/floor/carpet,
/area/crew_quarters/dorms)
"aqo" = (
/obj/structure/closet/secure_closet/personal/cabinet{
desc = "Swipe your ID on the closet to claim it. First come first serve, this one is wooden and fancy. Store your stuff here.";
name = "Personal ID-Locked Closet";
pixel_y = 15
},
/obj/structure/closet/secure_closet/personal/cabinet,
/turf/open/floor/wood,
/area/crew_quarters/dorms)
"aqp" = (
@@ -8846,14 +8837,10 @@
/area/security/vacantoffice/b)
"ask" = (
/obj/item/flashlight/lamp/green{
pixel_x = -3;
pixel_y = 22
},
/obj/structure/dresser{
desc = "There's plenty of clothes here to change into! It has a surprising amount of variety, too.";
name = "Dresser";
pixel_y = 7
pixel_x = -2;
pixel_y = 15
},
/obj/structure/dresser,
/turf/open/floor/wood,
/area/crew_quarters/dorms)
"asl" = (
@@ -8864,7 +8851,6 @@
/turf/open/floor/plating,
/area/security/vacantoffice/b)
"asm" = (
/obj/machinery/atmospherics/components/unary/vent_pump/on,
/obj/structure/chair/comfy/brown{
dir = 4
},
@@ -11677,7 +11663,7 @@
/turf/open/floor/plating,
/area/maintenance/starboard/fore)
"aAs" = (
/obj/structure/piano{
/obj/structure/musician/piano{
icon_state = "piano"
},
/turf/open/floor/plating,
@@ -13056,7 +13042,7 @@
/turf/open/floor/plasteel,
/area/crew_quarters/cryopod)
"aDL" = (
/obj/structure/toilet{
/obj/structure/toilet/secret/low_loot{
dir = 4
},
/obj/structure/mirror{
@@ -13944,7 +13930,7 @@
/turf/open/floor/plasteel/dark,
/area/ai_monitored/storage/eva)
"aGk" = (
/obj/structure/toilet{
/obj/structure/toilet/secret/low_loot{
dir = 4
},
/obj/structure/mirror{
@@ -14488,8 +14474,10 @@
/turf/open/floor/plasteel,
/area/gateway)
"aHw" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/obj/effect/landmark/event_spawn,
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 10
},
/turf/open/floor/wood,
/area/crew_quarters/dorms)
"aHx" = (
@@ -15799,7 +15787,7 @@
/area/hydroponics)
"aKJ" = (
/obj/machinery/vending/cola/black,
/obj/structure/sign/poster/contraband/sun_kist{
/obj/structure/sign/poster/contraband/starkist{
pixel_y = 32
},
/turf/open/floor/wood,
@@ -21467,7 +21455,7 @@
/turf/open/floor/plating,
/area/maintenance/port)
"aZt" = (
/obj/structure/toilet{
/obj/structure/toilet/secret/low_loot{
dir = 4
},
/obj/structure/mirror{
@@ -23035,11 +23023,7 @@
/turf/open/floor/carpet,
/area/bridge/meeting_room)
"bdJ" = (
/obj/structure/closet/secure_closet/personal/cabinet{
desc = "Swipe your ID on the closet to claim it. First come first serve, this one is wooden and fancy. Store your stuff here.";
name = "Personal ID-Locked Closet";
pixel_y = 15
},
/obj/structure/closet/secure_closet/personal/cabinet,
/turf/open/floor/plating,
/area/maintenance/port)
"bdK" = (
@@ -26479,7 +26463,9 @@
/turf/open/floor/plating,
/area/maintenance/disposal)
"blU" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 10
},
/turf/open/floor/wood,
/area/crew_quarters/dorms)
"blV" = (
@@ -54427,11 +54413,7 @@
/turf/open/space/basic,
/area/space/nearstation)
"eSe" = (
/obj/structure/closet/secure_closet/personal/cabinet{
desc = "Swipe your ID on the closet to claim it. First come first serve, this one is wooden and fancy. Store your stuff here.";
name = "Personal ID-Locked Closet";
pixel_y = 15
},
/obj/structure/closet/secure_closet/personal/cabinet,
/turf/open/floor/carpet,
/area/crew_quarters/dorms)
"eVC" = (
@@ -54800,6 +54782,12 @@
},
/turf/open/floor/plasteel,
/area/hallway/secondary/entry)
"fPL" = (
/obj/machinery/atmospherics/components/unary/vent_pump/on{
dir = 4
},
/turf/open/floor/wood,
/area/crew_quarters/dorms)
"fTg" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
@@ -55323,7 +55311,9 @@
/turf/open/floor/wood,
/area/crew_quarters/bar)
"hPs" = (
/obj/structure/fireplace,
/obj/structure/fireplace{
pixel_y = -6
},
/obj/machinery/airalarm{
dir = 8;
pixel_x = 23
@@ -55549,18 +55539,6 @@
/obj/structure/grille,
/turf/open/space/basic,
/area/space/nearstation)
"iDS" = (
/obj/docking_port/stationary{
dir = 8;
dwidth = 3;
height = 5;
id = "commonmining_home";
name = "SS13: Common Mining Dock";
roundstart_template = /datum/map_template/shuttle/mining_common/meta;
width = 7
},
/turf/open/space/basic,
/area/space)
"iEJ" = (
/obj/machinery/door/airlock/external{
name = "Escape Pod One"
@@ -55633,7 +55611,7 @@
},
/area/crew_quarters/theatre)
"iTU" = (
/obj/structure/piano{
/obj/structure/musician/piano{
icon_state = "piano"
},
/turf/open/floor/wood,
@@ -56107,18 +56085,13 @@
/turf/open/floor/plasteel,
/area/crew_quarters/dorms)
"kmS" = (
/obj/structure/dresser,
/obj/item/flashlight/lamp/green{
pixel_x = -3;
pixel_y = 22
pixel_x = -2;
pixel_y = 15
},
/obj/machinery/atmospherics/components/unary/vent_pump/on{
dir = 4;
pixel_y = 5
},
/obj/structure/dresser{
desc = "There's plenty of clothes here to change into! It has a surprising amount of variety, too.";
name = "Dresser";
pixel_y = 7
dir = 4
},
/turf/open/floor/carpet,
/area/crew_quarters/dorms)
@@ -56816,7 +56789,7 @@
/turf/open/floor/plating,
/area/security/main)
"myh" = (
/obj/structure/piano,
/obj/structure/musician/piano,
/obj/structure/window/reinforced,
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/turf/open/floor/wood,
@@ -57124,15 +57097,6 @@
},
/turf/open/floor/plating,
/area/maintenance/starboard/aft)
"nGI" = (
/obj/machinery/door/airlock/external{
name = "Common Mining Shuttle Bay"
},
/obj/effect/mapping_helpers/airlock/cyclelink_helper{
dir = 4
},
/turf/open/floor/plating,
/area/hallway/secondary/entry)
"nLu" = (
/obj/effect/turf_decal/tile/blue{
dir = 4
@@ -57350,8 +57314,8 @@
/area/security/prison)
"omY" = (
/obj/item/flashlight/lamp/green{
pixel_x = -3;
pixel_y = 22
pixel_x = -2;
pixel_y = 15
},
/obj/structure/dresser{
desc = "There's plenty of clothes here to change into! It has a surprising amount of variety, too.";
@@ -57463,7 +57427,9 @@
/turf/closed/wall,
/area/crew_quarters/bar)
"oAB" = (
/obj/structure/fireplace,
/obj/structure/fireplace{
pixel_y = -6
},
/turf/open/floor/carpet,
/area/crew_quarters/dorms)
"oDm" = (
@@ -57504,7 +57470,7 @@
/turf/open/floor/wood,
/area/crew_quarters/bar)
"oIW" = (
/obj/structure/toilet{
/obj/structure/toilet/secret/low_loot{
dir = 8
},
/turf/open/floor/mineral/titanium/blue,
@@ -59737,15 +59703,6 @@
},
/turf/open/floor/plating,
/area/maintenance/starboard/fore)
"vDR" = (
/obj/machinery/atmospherics/components/unary/vent_pump/on,
/obj/structure/closet/secure_closet/personal/cabinet{
desc = "Swipe your ID on the closet to claim it. First come first serve, this one is wooden and fancy. Store your stuff here.";
name = "Personal ID-Locked Closet";
pixel_y = 15
},
/turf/open/floor/wood,
/area/crew_quarters/dorms)
"vEi" = (
/obj/structure/cable{
icon_state = "4-8"
@@ -60202,17 +60159,6 @@
/obj/item/coin/gold,
/turf/open/floor/plasteel,
/area/crew_quarters/fitness)
"xfS" = (
/obj/effect/turf_decal/tile/blue{
dir = 4
},
/obj/machinery/computer/shuttle/mining/common{
dir = 4
},
/turf/open/floor/plasteel/white/corner{
dir = 1
},
/area/hallway/secondary/entry)
"xgk" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
@@ -60535,15 +60481,6 @@
/obj/item/instrument/trombone,
/turf/open/floor/wood,
/area/crew_quarters/theatre)
"xQG" = (
/obj/machinery/door/airlock/external{
name = "Common Mining Shuttle Bay"
},
/obj/effect/mapping_helpers/airlock/cyclelink_helper{
dir = 8
},
/turf/open/floor/plating,
/area/hallway/secondary/entry)
"xSW" = (
/obj/effect/turf_decal/tile/red{
dir = 1
@@ -60647,7 +60584,7 @@
/turf/open/floor/plasteel,
/area/crew_quarters/fitness/pool)
"ycd" = (
/obj/structure/toilet{
/obj/structure/toilet/secret/low_loot{
dir = 4
},
/obj/structure/mirror{
@@ -69068,7 +69005,7 @@ aaa
aaa
aoV
aaa
iDS
aaa
aaa
aaa
aoV
@@ -69323,11 +69260,11 @@ aaa
aaa
aaa
aaa
asE
asE
nGI
asE
asE
aaa
aaa
aaa
aaa
aaa
aoV
aaa
aaa
@@ -69581,9 +69518,9 @@ aaa
aaa
aaa
aaf
awW
auP
awW
aaa
aaa
aaa
aaf
kls
aaa
@@ -69839,8 +69776,8 @@ aaa
aaa
arB
arB
xQG
asE
arB
arB
aAC
aaf
aaa
@@ -70095,7 +70032,7 @@ aaa
aaa
aaa
arB
xfS
awZ
ayk
awW
aAD
@@ -73439,7 +73376,7 @@ ayl
aIK
ayl
beM
asE
arB
aaa
aaa
aaa
@@ -92684,7 +92621,7 @@ aqe
arf
aqo
atm
atm
fPL
arf
avv
awu
@@ -92940,7 +92877,7 @@ cSA
aqe
arf
asm
blU
atm
blU
avg
awp
@@ -93712,7 +93649,7 @@ aqi
arf
ask
atm
atm
fPL
arf
awq
axO
@@ -93967,8 +93904,8 @@ ajo
aps
aqk
arf
vDR
blU
aqo
atm
aHw
avn
awv
File diff suppressed because it is too large Load Diff
+29
View File
@@ -0,0 +1,29 @@
#define JOB_MODIFICATION_MAP_NAME "CogStation"
//Medical
/datum/job/scientist/New()
..()
MAP_JOB_CHECK
access += ACCESS_CHEMISTRY
minimal_access += ACCESS_CHEMISTRY
//Science
/datum/job/roboticist/New()
..()
MAP_JOB_CHECK
access += list(ACCESS_MEDICAL, ACCESS_MORGUE)
minimal_access += list(ACCESS_MEDICAL, ACCESS_MORGUE)
//Civilian
/datum/job/clown/New()
..()
MAP_JOB_CHECK
access += ACCESS_MAINT_TUNNELS
minimal_access += ACCESS_MAINT_TUNNELS
/datum/job/mime/New()
..()
MAP_JOB_CHECK
access += ACCESS_MAINT_TUNNELS
minimal_access += ACCESS_MAINT_TUNNELS
+44 -87
View File
@@ -463,10 +463,24 @@
"aaS" = (
/turf/closed/wall/mineral/plastitanium,
/area/construction/mining/aux_base)
"abe" = (
/obj/effect/turf_decal/delivery,
/obj/effect/turf_decal/stripes/end{
dir = 1
"aaT" = (
/obj/effect/turf_decal/stripes/line{
dir = 9
},
/turf/open/floor/plasteel,
/area/hallway/secondary/entry)
"aaU" = (
/obj/effect/turf_decal/stripes/line{
dir = 5
},
/turf/open/floor/plasteel,
/area/hallway/secondary/entry)
"aaV" = (
/obj/machinery/light/small{
dir = 4
},
/obj/effect/turf_decal/stripes/line{
dir = 4
},
/turf/open/floor/plasteel,
/area/hallway/secondary/entry)
@@ -494,15 +508,6 @@
},
/turf/open/floor/plasteel,
/area/hallway/secondary/entry)
"abq" = (
/obj/machinery/light/small{
dir = 4
},
/obj/effect/turf_decal/stripes/line{
dir = 5
},
/turf/open/floor/plasteel,
/area/hallway/secondary/entry)
"abs" = (
/obj/docking_port/stationary{
dwidth = 1;
@@ -12043,7 +12048,7 @@
"aAm" = (
/obj/effect/decal/cleanable/dirt,
/obj/effect/decal/cleanable/vomit/old,
/obj/structure/toilet{
/obj/structure/toilet/secret/low_loot{
dir = 8
},
/obj/machinery/newscaster{
@@ -12054,7 +12059,7 @@
/area/crew_quarters/toilet/auxiliary)
"aAn" = (
/obj/effect/decal/cleanable/dirt,
/obj/structure/toilet{
/obj/structure/toilet/secret/low_loot{
dir = 8
},
/obj/machinery/newscaster{
@@ -12066,7 +12071,7 @@
/area/crew_quarters/toilet/auxiliary)
"aAo" = (
/obj/effect/decal/cleanable/dirt,
/obj/structure/toilet{
/obj/structure/toilet/secret/low_loot{
dir = 8
},
/obj/machinery/newscaster{
@@ -19676,7 +19681,7 @@
/turf/open/floor/plasteel,
/area/quartermaster/storage)
"aNx" = (
/obj/structure/toilet{
/obj/structure/toilet/secret/prison{
dir = 4
},
/obj/machinery/light/small{
@@ -26177,7 +26182,7 @@
/turf/open/floor/plasteel/dark,
/area/crew_quarters/bar/atrium)
"aWX" = (
/obj/structure/piano{
/obj/structure/musician/piano{
icon_state = "piano"
},
/obj/machinery/airalarm{
@@ -59853,6 +59858,7 @@
/area/crew_quarters/heads/captain)
"bXh" = (
/obj/structure/toilet{
contents = newlist(/obj/item/toy/snappop/phoenix);
dir = 4
},
/obj/machinery/light{
@@ -82136,7 +82142,7 @@
"cIa" = (
/obj/effect/decal/cleanable/dirt,
/obj/effect/decal/cleanable/vomit/old,
/obj/structure/toilet{
/obj/structure/toilet/secret/low_loot{
dir = 8
},
/obj/machinery/newscaster{
@@ -82147,7 +82153,7 @@
/area/crew_quarters/toilet/restrooms)
"cIb" = (
/obj/effect/decal/cleanable/dirt,
/obj/structure/toilet{
/obj/structure/toilet/secret/low_loot{
dir = 8
},
/obj/machinery/newscaster{
@@ -82159,7 +82165,7 @@
/area/crew_quarters/toilet/restrooms)
"cIc" = (
/obj/effect/decal/cleanable/dirt,
/obj/structure/toilet{
/obj/structure/toilet/secret/low_loot{
dir = 8
},
/obj/machinery/newscaster{
@@ -89648,7 +89654,7 @@
},
/area/medical/storage)
"cUP" = (
/obj/structure/toilet{
/obj/structure/toilet/secret/low_loot{
dir = 4
},
/obj/effect/decal/cleanable/dirt,
@@ -115308,7 +115314,7 @@
/obj/structure/window/reinforced{
dir = 8
},
/obj/structure/piano,
/obj/structure/musician/piano,
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/plating,
/area/crew_quarters/theatre/abandoned)
@@ -116751,7 +116757,7 @@
/turf/open/floor/plasteel,
/area/maintenance/port/aft)
"dPN" = (
/obj/structure/toilet{
/obj/structure/toilet/secret/low_loot{
dir = 8
},
/obj/effect/decal/cleanable/dirt,
@@ -126823,15 +126829,6 @@
},
/turf/open/floor/plasteel,
/area/science/research/abandoned)
"mvx" = (
/obj/effect/turf_decal/stripes/line{
dir = 4
},
/obj/effect/turf_decal/stripes/line{
dir = 8
},
/turf/open/floor/plasteel,
/area/hallway/secondary/entry)
"mxm" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/turf/open/floor/circuit/green,
@@ -126841,17 +126838,6 @@
/obj/item/assembly/signaler,
/turf/open/floor/plating,
/area/crew_quarters/abandoned_gambling_den)
"mLI" = (
/obj/machinery/door/airlock/external{
name = "External Docking Port"
},
/obj/effect/mapping_helpers/airlock/cyclelink_helper,
/obj/effect/turf_decal/stripes/line,
/obj/effect/turf_decal/stripes/line{
dir = 1
},
/turf/open/floor/plasteel,
/area/hallway/secondary/entry)
"mPj" = (
/obj/effect/turf_decal/stripes/line,
/turf/open/floor/plating,
@@ -126914,28 +126900,10 @@
/obj/effect/turf_decal/tile/neutral,
/turf/open/floor/plasteel,
/area/maintenance/port/fore)
"nQR" = (
/obj/effect/turf_decal/delivery,
/obj/machinery/computer/shuttle/mining/common,
/turf/open/floor/plasteel,
/area/hallway/secondary/entry)
"nSh" = (
/obj/machinery/atmospherics/pipe/simple/general/hidden,
/turf/closed/wall/r_wall,
/area/maintenance/disposal/incinerator)
"nSS" = (
/obj/machinery/door/airlock/external{
name = "External Docking Port"
},
/obj/effect/mapping_helpers/airlock/cyclelink_helper{
dir = 1
},
/obj/effect/turf_decal/stripes/line{
dir = 1
},
/obj/effect/turf_decal/stripes/line,
/turf/open/floor/plasteel,
/area/hallway/secondary/entry)
"oHk" = (
/obj/effect/turf_decal/tile/neutral{
dir = 1
@@ -127597,17 +127565,6 @@
},
/turf/open/floor/plasteel,
/area/crew_quarters/fitness/recreation)
"xdp" = (
/obj/docking_port/stationary{
dwidth = 3;
height = 5;
id = "commonmining_home";
name = "SS13: Common Mining Dock";
roundstart_template = /datum/map_template/shuttle/mining_common/meta;
width = 7
},
/turf/open/space/basic,
/area/space)
"xdZ" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
@@ -159669,7 +159626,7 @@ aaa
aaa
aaa
aaa
rqh
aaa
rqh
aad
aad
@@ -159925,8 +159882,8 @@ aaa
aaa
aaa
aaa
aaO
aaO
aaa
aaa
aaO
aaO
abf
@@ -160181,11 +160138,11 @@ oZp
aaa
aaa
aaa
xdp
mLI
mvx
nSS
abe
aaa
aaa
aaa
aaO
aaT
abp
abC
abC
@@ -160439,11 +160396,11 @@ aaa
aaa
aaa
aaa
aaa
aaa
aaO
aaO
aaO
nQR
abq
aaU
aaV
abD
abD
abZ
@@ -160697,7 +160654,7 @@ aaa
aaa
aaa
aaa
rqh
aaa
aaO
aaO
abf
@@ -160954,7 +160911,7 @@ aaa
aaa
aaa
aaa
rqh
aaa
rqh
aad
aad
+310 -128
View File
@@ -19002,7 +19002,7 @@
"aEK" = (
/obj/structure/sign/poster/contraband/random,
/turf/closed/wall/rust,
/area/hallway/secondary/entry)
/area/security/vacantoffice)
"aEL" = (
/obj/machinery/door/airlock/maintenance{
req_access_txt = "12"
@@ -21544,6 +21544,9 @@
pixel_x = -26
},
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1,
/obj/structure/cable{
icon_state = "1-2"
},
/turf/open/floor/plasteel,
/area/hallway/secondary/exit/departure_lounge)
"aIZ" = (
@@ -56558,7 +56561,7 @@
pixel_x = -12;
pixel_y = 2
},
/obj/structure/toilet{
/obj/structure/toilet/secret/prison{
pixel_y = 16
},
/obj/effect/turf_decal/tile/neutral{
@@ -56908,7 +56911,7 @@
/area/hallway/primary/central)
"bKT" = (
/obj/effect/turf_decal/box,
/obj/structure/toilet{
/obj/structure/toilet/secret/low_loot{
dir = 8
},
/obj/structure/mirror{
@@ -56941,7 +56944,7 @@
/area/crew_quarters/toilet/restrooms)
"bKU" = (
/obj/effect/turf_decal/box,
/obj/structure/toilet{
//obj/structure/toilet/secret/low_loot{
dir = 8
},
/obj/structure/mirror{
@@ -59908,7 +59911,7 @@
pixel_x = -12;
pixel_y = 2
},
/obj/structure/toilet{
/obj/structure/toilet/secret/low_loot{
pixel_y = 16
},
/obj/effect/turf_decal/tile/neutral{
@@ -62405,7 +62408,7 @@
name = "EMERGENCY STORAGE"
},
/turf/closed/wall,
/area/hallway/secondary/entry)
/area/security/vacantoffice)
"bSM" = (
/obj/machinery/door/firedoor,
/obj/machinery/door/airlock/external{
@@ -62669,6 +62672,9 @@
pixel_x = -23
},
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1,
/obj/structure/cable{
icon_state = "1-2"
},
/turf/open/floor/plasteel,
/area/hallway/secondary/exit/departure_lounge)
"bTf" = (
@@ -62869,17 +62875,23 @@
/turf/closed/wall/rust,
/area/hallway/secondary/exit/departure_lounge)
"bTy" = (
/obj/effect/turf_decal/tile/neutral,
/obj/effect/turf_decal/tile/neutral{
dir = 1
},
/obj/effect/turf_decal/tile/neutral{
dir = 4
},
/obj/effect/turf_decal/tile/neutral{
dir = 8
},
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1,
/obj/structure/cable{
icon_state = "1-2"
},
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/obj/effect/decal/cleanable/dirt,
/obj/structure/disposalpipe/segment,
/obj/structure/cable{
icon_state = "2-4"
},
/turf/open/floor/plating,
/area/maintenance/starboard/aft)
/turf/open/floor/plasteel,
/area/hallway/secondary/exit/departure_lounge)
"bTz" = (
/obj/effect/turf_decal/tile/neutral,
/obj/effect/turf_decal/tile/neutral,
@@ -62934,6 +62946,9 @@
/obj/effect/turf_decal/tile/neutral,
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1,
/obj/structure/cable{
icon_state = "1-2"
},
/turf/open/floor/plasteel,
/area/hallway/secondary/entry)
"bTE" = (
@@ -62988,7 +63003,7 @@
pixel_x = -12;
pixel_y = 2
},
/obj/structure/toilet{
/obj/structure/toilet/secret/low_loot{
pixel_y = 16
},
/obj/effect/turf_decal/tile/neutral{
@@ -63096,6 +63111,9 @@
c_tag = "Arrivals Dock";
name = "shuttle camera"
},
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1{
dir = 10
},
/turf/open/floor/plasteel,
/area/hallway/secondary/entry)
"bTO" = (
@@ -63168,17 +63186,17 @@
/turf/open/floor/plasteel/dark,
/area/hallway/secondary/exit/departure_lounge)
"bTS" = (
/obj/docking_port/stationary{
dir = 8;
dwidth = 3;
height = 5;
id = "commonmining_home";
name = "SS13: Common Mining Dock";
roundstart_template = /datum/map_template/shuttle/mining_common/meta;
width = 7
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
/turf/open/floor/plating,
/area/hallway/secondary/entry)
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1{
dir = 8
},
/obj/structure/cable{
icon_state = "4-8"
},
/turf/open/floor/wood,
/area/security/vacantoffice)
"bTT" = (
/obj/machinery/atmospherics/components/unary/vent_pump/on{
dir = 4
@@ -63287,8 +63305,11 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1{
dir = 6
/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer1{
dir = 8
},
/obj/structure/cable{
icon_state = "4-8"
},
/turf/open/floor/plasteel,
/area/hallway/secondary/entry)
@@ -63398,12 +63419,8 @@
/turf/open/floor/plasteel/showroomfloor,
/area/security/warden)
"bUl" = (
/obj/effect/spawner/structure/window/reinforced,
/obj/structure/cable{
icon_state = "0-8"
},
/turf/open/floor/plating,
/area/hallway/secondary/entry)
/turf/closed/wall,
/area/security/vacantoffice)
"bUm" = (
/obj/machinery/door/firedoor,
/obj/machinery/door/airlock/public/glass{
@@ -63464,9 +63481,8 @@
/turf/open/floor/plasteel/dark,
/area/hallway/secondary/exit/departure_lounge)
"bUt" = (
/obj/structure/sign/warning/electricshock,
/turf/closed/wall/rust,
/area/hallway/secondary/entry)
/area/security/vacantoffice)
"bUu" = (
/obj/structure/cable{
icon_state = "1-2"
@@ -64674,11 +64690,21 @@
},
/area/maintenance/starboard/aft)
"bWn" = (
/obj/machinery/door/airlock/external{
name = "Common Mining Dock"
/obj/machinery/door/airlock/maintenance{
name = "Vacant Office"
},
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1{
dir = 8
},
/obj/structure/cable{
icon_state = "4-8"
},
/obj/machinery/door/firedoor,
/turf/open/floor/plasteel,
/area/hallway/secondary/entry)
/area/security/vacantoffice)
"bWo" = (
/obj/effect/turf_decal/tile/neutral,
/obj/effect/turf_decal/tile/neutral{
@@ -64718,6 +64744,15 @@
/area/security/warden)
"bWq" = (
/obj/effect/decal/cleanable/dirt,
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 10
},
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1{
dir = 8
},
/obj/structure/cable{
icon_state = "2-8"
},
/turf/open/floor/plasteel,
/area/hallway/secondary/entry)
"bWr" = (
@@ -64799,17 +64834,8 @@
/turf/open/floor/plasteel,
/area/hallway/primary/starboard)
"bWx" = (
/obj/structure/window/reinforced{
dir = 8
},
/obj/machinery/computer/shuttle/mining/common{
dir = 4
},
/obj/structure/window/reinforced{
dir = 1
},
/turf/open/floor/plasteel/dark,
/area/hallway/secondary/entry)
/turf/closed/wall,
/area/security/vacantoffice)
"bWy" = (
/obj/effect/turf_decal/tile/neutral,
/obj/effect/turf_decal/tile/neutral{
@@ -65052,15 +65078,18 @@
dir = 4;
pixel_x = -23
},
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 6
},
/obj/effect/turf_decal/tile/blue{
dir = 8
},
/obj/effect/turf_decal/tile/red{
dir = 1
},
/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
dir = 8
},
/obj/structure/cable{
icon_state = "1-4"
},
/turf/open/floor/plasteel,
/area/hallway/secondary/entry)
"bWV" = (
@@ -65105,6 +65134,9 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
/obj/structure/cable{
icon_state = "4-8"
},
/turf/open/floor/plasteel,
/area/hallway/secondary/entry)
"bWY" = (
@@ -65133,6 +65165,9 @@
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1{
dir = 9
},
/obj/structure/cable{
icon_state = "1-8"
},
/turf/open/floor/plasteel,
/area/hallway/secondary/entry)
"bXa" = (
@@ -65289,6 +65324,9 @@
},
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1,
/obj/structure/cable{
icon_state = "1-2"
},
/turf/open/floor/plasteel,
/area/hallway/secondary/exit/departure_lounge)
"bXo" = (
@@ -65367,6 +65405,9 @@
dir = 8
},
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1,
/obj/structure/cable{
icon_state = "1-2"
},
/turf/open/floor/plasteel,
/area/hallway/secondary/exit/departure_lounge)
"bXv" = (
@@ -65786,6 +65827,9 @@
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1{
dir = 8
},
/obj/structure/cable{
icon_state = "4-8"
},
/turf/open/floor/plasteel,
/area/hallway/secondary/entry)
"bXY" = (
@@ -66680,6 +66724,9 @@
},
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1,
/obj/structure/cable{
icon_state = "1-2"
},
/turf/open/floor/plasteel,
/area/hallway/secondary/entry)
"bZk" = (
@@ -67429,6 +67476,9 @@
/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer1{
dir = 1
},
/obj/structure/cable{
icon_state = "1-2"
},
/turf/open/floor/plasteel,
/area/hallway/secondary/exit/departure_lounge)
"cal" = (
@@ -67587,7 +67637,7 @@
"cav" = (
/obj/structure/sign/poster/contraband/random,
/turf/closed/wall,
/area/hallway/secondary/entry)
/area/security/vacantoffice)
"caw" = (
/obj/effect/turf_decal/tile/yellow{
dir = 4
@@ -67848,6 +67898,10 @@
/obj/effect/turf_decal/tile/red{
dir = 1
},
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/obj/structure/cable{
icon_state = "1-2"
},
/turf/open/floor/plasteel,
/area/hallway/secondary/entry)
"caP" = (
@@ -67855,6 +67909,9 @@
dir = 4
},
/obj/effect/decal/cleanable/dirt,
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1{
dir = 5
},
/turf/open/floor/plasteel,
/area/hallway/secondary/entry)
"caQ" = (
@@ -70240,9 +70297,6 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/obj/effect/decal/cleanable/dirt,
/obj/structure/disposalpipe/segment,
/obj/structure/cable{
icon_state = "2-4"
},
/turf/open/floor/plating{
icon_state = "platingdmg1"
},
@@ -74728,6 +74782,9 @@
},
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1,
/obj/structure/cable{
icon_state = "1-2"
},
/turf/open/floor/plasteel/dark,
/area/hallway/secondary/entry)
"cmk" = (
@@ -81480,8 +81537,18 @@
/turf/open/floor/plasteel/dark,
/area/maintenance/port)
"cyG" = (
/turf/open/floor/plating,
/area/hallway/secondary/entry)
/obj/structure/cable{
icon_state = "0-2"
},
/obj/machinery/power/apc{
areastring = "/area/security/vacant";
name = "Vacant Office APC";
pixel_y = 24
},
/obj/structure/table/wood,
/obj/item/flashlight/lamp/green,
/turf/open/floor/wood,
/area/security/vacantoffice)
"cyI" = (
/obj/effect/decal/cleanable/dirt,
/obj/structure/sink/kitchen{
@@ -85332,6 +85399,9 @@
"cJp" = (
/obj/effect/turf_decal/tile/red,
/obj/effect/decal/cleanable/dirt,
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1{
dir = 10
},
/turf/open/floor/plasteel,
/area/hallway/secondary/entry)
"cJq" = (
@@ -87185,9 +87255,22 @@
"cZm" = (
/turf/closed/wall/rust,
/area/security/prison)
"dbY" = (
/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer1{
dir = 1
},
/obj/structure/chair/stool,
/turf/open/floor/wood{
icon_state = "wood-broken"
},
/area/security/vacantoffice)
"dis" = (
/turf/closed/wall/r_wall/rust,
/area/bridge)
"dlg" = (
/obj/machinery/light,
/turf/open/floor/wood,
/area/security/vacantoffice)
"dxq" = (
/obj/effect/turf_decal/bot,
/obj/effect/turf_decal/tile/neutral{
@@ -87242,6 +87325,14 @@
icon_state = "panelscorched"
},
/area/maintenance/starboard/fore)
"eaJ" = (
/obj/structure/cable{
icon_state = "1-4"
},
/obj/machinery/airalarm/directional/west,
/obj/item/twohanded/required/kirbyplants/dead,
/turf/open/floor/wood,
/area/security/vacantoffice)
"elZ" = (
/obj/machinery/status_display/evac,
/turf/closed/wall/rust,
@@ -87338,6 +87429,11 @@
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/plating,
/area/maintenance/starboard/aft)
"fkk" = (
/turf/open/floor/wood{
icon_state = "wood-broken6"
},
/area/security/vacantoffice)
"fyr" = (
/obj/machinery/light{
dir = 4
@@ -87362,6 +87458,11 @@
dir = 8
},
/area/hallway/primary/fore)
"gmF" = (
/turf/open/floor/wood{
icon_state = "wood-broken"
},
/area/security/vacantoffice)
"gnA" = (
/obj/machinery/airalarm{
dir = 1;
@@ -87428,9 +87529,20 @@
/obj/structure/sign/departments/evac,
/turf/closed/wall/rust,
/area/hallway/secondary/exit/departure_lounge)
"gKu" = (
/obj/structure/cable{
icon_state = "4-8"
},
/turf/open/floor/wood,
/area/security/vacantoffice)
"gMU" = (
/turf/closed/wall/r_wall/rust,
/area/ai_monitored/turret_protected/ai_upload)
"gPA" = (
/turf/open/floor/wood{
icon_state = "wood-broken3"
},
/area/security/vacantoffice)
"hgW" = (
/obj/effect/decal/cleanable/cobweb/cobweb2,
/obj/structure/chair/stool,
@@ -87452,6 +87564,12 @@
"hAb" = (
/turf/closed/wall/r_wall/rust,
/area/security/courtroom)
"hDh" = (
/obj/effect/decal/cleanable/cobweb/cobweb2,
/obj/structure/closet/cardboard,
/obj/effect/spawner/bundle/costume/maid,
/turf/open/floor/wood,
/area/security/vacantoffice)
"hNk" = (
/turf/closed/wall/r_wall/rust,
/area/security/prison)
@@ -87660,17 +87778,12 @@
/turf/closed/mineral/random/labormineral,
/area/space/nearstation)
"jQY" = (
/obj/structure/cable{
icon_state = "1-2"
/obj/structure/table/wood,
/obj/item/paper_bin,
/turf/open/floor/wood{
icon_state = "wood-broken4"
},
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/obj/effect/decal/cleanable/dirt,
/obj/structure/disposalpipe/segment,
/obj/item/clothing/under/costume/maid,
/turf/open/floor/plating{
icon_state = "panelscorched"
},
/area/maintenance/starboard/aft)
/area/security/vacantoffice)
"jRw" = (
/obj/structure/sign/poster/official/high_class_martini,
/turf/closed/wall/r_wall,
@@ -87753,6 +87866,18 @@
},
/turf/open/floor/wood,
/area/maintenance/port/fore)
"jUX" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 5
},
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1{
dir = 6
},
/obj/structure/cable{
icon_state = "4-8"
},
/turf/open/floor/wood,
/area/security/vacantoffice)
"jUZ" = (
/obj/item/poster/random_contraband,
/obj/item/poster/random_contraband,
@@ -87773,6 +87898,10 @@
"khA" = (
/turf/closed/wall/rust,
/area/construction/mining/aux_base)
"koc" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1,
/turf/open/floor/wood,
/area/security/vacantoffice)
"krJ" = (
/turf/closed/wall/rust,
/area/hallway/secondary/exit/departure_lounge)
@@ -87794,6 +87923,12 @@
/obj/effect/turf_decal/bot,
/turf/open/floor/plating,
/area/maintenance/port/fore)
"kzw" = (
/obj/structure/chair/office/dark{
dir = 8
},
/turf/open/floor/wood,
/area/security/vacantoffice)
"kIJ" = (
/turf/open/floor/wood{
icon_state = "wood-broken7"
@@ -87803,6 +87938,11 @@
/obj/structure/sign/nanotrasen,
/turf/closed/wall,
/area/maintenance/port/fore)
"kXo" = (
/obj/structure/table/wood/poker,
/obj/item/toy/cards/deck,
/turf/open/floor/wood,
/area/security/vacantoffice)
"leX" = (
/obj/structure/chair/stool,
/turf/open/floor/wood{
@@ -87883,6 +88023,17 @@
},
/turf/open/floor/plasteel/dark,
/area/science/research)
"mKp" = (
/obj/structure/cable{
icon_state = "1-2"
},
/obj/machinery/firealarm{
dir = 4;
pixel_x = -24
},
/obj/structure/table/wood,
/turf/open/floor/wood,
/area/security/vacantoffice)
"mLN" = (
/obj/effect/decal/cleanable/dirt,
/turf/closed/mineral/random/labormineral,
@@ -87953,6 +88104,19 @@
},
/turf/open/space/basic,
/area/hallway/secondary/entry)
"oUc" = (
/obj/structure/cable{
icon_state = "1-2"
},
/obj/structure/table/wood,
/obj/item/folder/paperwork,
/turf/open/floor/wood,
/area/security/vacantoffice)
"ppP" = (
/turf/open/floor/wood{
icon_state = "wood-broken7"
},
/area/security/vacantoffice)
"pCe" = (
/obj/effect/decal/cleanable/glass,
/turf/open/floor/plating/asteroid/airless,
@@ -88190,12 +88354,11 @@
/turf/open/floor/plasteel,
/area/hallway/primary/fore)
"uqy" = (
/obj/effect/decal/cleanable/dirt,
/obj/item/clothing/under/rank/civilian/janitor/maid,
/turf/open/floor/plating{
icon_state = "platingdmg1"
/obj/machinery/light{
dir = 1
},
/area/maintenance/starboard/aft)
/turf/open/floor/wood,
/area/security/vacantoffice)
"uxQ" = (
/obj/effect/decal/cleanable/ash,
/turf/closed/mineral/random/labormineral,
@@ -88203,9 +88366,20 @@
"uzR" = (
/turf/closed/wall/rust,
/area/storage/primary)
"uGi" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/turf/open/floor/wood,
/area/security/vacantoffice)
"uRM" = (
/turf/open/floor/wood,
/area/security/vacantoffice)
"uWo" = (
/turf/closed/wall/rust,
/area/security/checkpoint/medical)
"vle" = (
/obj/structure/festivus,
/turf/open/floor/wood,
/area/security/vacantoffice)
"vmu" = (
/obj/structure/table/wood,
/obj/effect/turf_decal/tile/neutral{
@@ -88231,6 +88405,10 @@
/mob/living/simple_animal/pet/bumbles,
/turf/open/floor/plasteel,
/area/hydroponics)
"wiK" = (
/obj/machinery/atmospherics/components/unary/vent_pump/on,
/turf/open/floor/wood,
/area/security/vacantoffice)
"wmX" = (
/turf/closed/wall/rust,
/area/quartermaster/qm)
@@ -88328,6 +88506,10 @@
/obj/effect/turf_decal/tile/neutral,
/turf/open/floor/plasteel/dark,
/area/security/prison)
"ykB" = (
/obj/structure/chair/stool,
/turf/open/floor/wood,
/area/security/vacantoffice)
(1,1,1) = {"
aaa
@@ -125762,7 +125944,7 @@ bOl
bSJ
bSI
ukP
uqy
bGr
bEg
bAT
bOC
@@ -126016,10 +126198,10 @@ bNw
bTP
bUu
bWh
bTy
cax
cxB
ceN
jQY
chZ
cxB
cjE
bXb
@@ -126270,15 +126452,15 @@ bOA
bOH
bSH
bNw
bSr
bWx
aEK
bSd
bUl
bSd
bUl
bSr
bUt
bSd
bWx
bUt
bWx
bWx
bUt
bUt
bXj
ckS
bUu
@@ -126527,15 +126709,15 @@ bNM
tYn
aVM
bNx
bSr
bWx
cyG
cyG
cyG
cyG
cyG
cyG
cyG
bSr
mKp
oUc
eaJ
uRM
uRM
vle
bWx
bXz
ccB
cgb
@@ -126785,14 +126967,14 @@ bZW
bWw
bTq
bSL
cyG
cyG
cyG
cyG
cyG
cyG
cyG
bSr
jQY
kzw
gmF
gKu
uRM
uRM
uRM
bWx
bEg
bEg
bEg
@@ -127041,15 +127223,15 @@ cad
bhY
car
bTr
bSr
cyG
cyG
cyG
cyG
cyG
cyG
cyG
bSr
bWx
uqy
wiK
uGi
jUX
koc
dbY
dlg
bWx
bYf
ceU
cgI
@@ -127299,14 +127481,14 @@ bQQ
bSN
bTs
cav
cyG
cyG
cyG
cyG
cyG
cyG
cyG
bSr
uRM
fkk
ppP
bTS
ykB
kXo
ykB
bWx
bPJ
bUN
hxn
@@ -127555,15 +127737,15 @@ bTk
bXL
bXx
bPe
bSd
cyG
cyG
cyG
bUt
hDh
uRM
uRM
bTS
cyG
cyG
cyG
bSr
uRM
ykB
gPA
bWx
bPJ
bQa
hxn
@@ -127815,12 +127997,12 @@ bTv
krJ
krJ
krJ
bPe
bOc
bWn
bWx
bSr
bWx
bSL
bSr
bWx
bSr
cgx
hxn
@@ -129096,7 +129278,7 @@ bMO
bOR
cak
aIY
cmD
bTy
bTe
bXu
bXn
File diff suppressed because it is too large Load Diff
+160 -126
View File
@@ -1028,7 +1028,7 @@
/obj/machinery/light/small{
dir = 4
},
/obj/structure/toilet{
/obj/structure/toilet/secret/prison{
dir = 4
},
/turf/open/floor/plasteel/freezer,
@@ -2291,6 +2291,10 @@
},
/turf/open/floor/plating,
/area/crew_quarters/fitness/recreation)
"aeD" = (
/obj/machinery/door/airlock/external,
/turf/open/floor/plating,
/area/hallway/primary/port)
"aeE" = (
/obj/effect/spawner/structure/window/reinforced,
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
@@ -3112,6 +3116,9 @@
},
/turf/open/floor/plasteel,
/area/security/prison)
"afQ" = (
/turf/open/floor/plating,
/area/hallway/primary/port)
"afR" = (
/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
dir = 1
@@ -3180,6 +3187,10 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/turf/open/floor/plasteel/dark,
/area/ai_monitored/security/armory)
"afZ" = (
/obj/structure/girder,
/turf/open/floor/plating,
/area/hallway/primary/port)
"aga" = (
/obj/effect/turf_decal/tile/neutral{
dir = 1
@@ -3658,6 +3669,10 @@
},
/turf/open/floor/plasteel/dark,
/area/security/prison)
"agQ" = (
/obj/item/electronics/airlock,
/turf/open/floor/plating,
/area/hallway/primary/port)
"agR" = (
/obj/machinery/airalarm{
dir = 4;
@@ -4264,6 +4279,11 @@
icon_state = "platingdmg1"
},
/area/maintenance/fore)
"ahT" = (
/turf/open/floor/plating{
icon_state = "panelscorched"
},
/area/hallway/primary/port)
"ahU" = (
/obj/effect/decal/cleanable/cobweb/cobweb2,
/obj/structure/table,
@@ -4780,6 +4800,14 @@
},
/turf/open/floor/plasteel/dark,
/area/crew_quarters/fitness/recreation)
"aiT" = (
/obj/effect/decal/cleanable/oil{
icon_state = "floor5"
},
/turf/open/floor/plating{
icon_state = "panelscorched"
},
/area/hallway/primary/port)
"aiU" = (
/obj/machinery/atmospherics/components/unary/vent_pump/on,
/obj/effect/turf_decal/tile/neutral{
@@ -4800,6 +4828,11 @@
},
/turf/open/floor/plasteel/dark,
/area/crew_quarters/fitness/recreation)
"aiW" = (
/turf/open/floor/plating{
icon_state = "platingdmg1"
},
/area/hallway/primary/port)
"aiX" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/turf/open/floor/plasteel,
@@ -4901,6 +4934,14 @@
/obj/item/restraints/handcuffs/cable/pink,
/turf/open/floor/plating,
/area/maintenance/port/fore)
"ajk" = (
/obj/structure/shuttle/engine/propulsion/right{
dir = 4
},
/turf/open/floor/plating{
icon_state = "platingdmg3"
},
/area/hallway/primary/port)
"ajl" = (
/obj/item/soap/deluxe,
/obj/item/storage/secure/safe{
@@ -4992,6 +5033,10 @@
},
/turf/open/floor/plasteel/dark,
/area/security/warden)
"ajs" = (
/obj/item/stack/sheet/metal/ten,
/turf/open/floor/plating,
/area/hallway/primary/port)
"ajt" = (
/obj/structure/closet{
name = "Evidence Closet 5"
@@ -5012,6 +5057,10 @@
},
/turf/open/floor/plasteel/dark,
/area/security/warden)
"aju" = (
/obj/item/stack/sheet/mineral/wood/twenty,
/turf/open/floor/plating,
/area/hallway/primary/port)
"ajv" = (
/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
dir = 4
@@ -6872,6 +6921,11 @@
/obj/effect/turf_decal/stripes/line,
/turf/open/floor/plating,
/area/maintenance/fore)
"amv" = (
/obj/item/stack/sheet/metal/ten,
/obj/item/wrench,
/turf/open/floor/plating,
/area/hallway/primary/port)
"amw" = (
/obj/structure/window/reinforced,
/obj/machinery/door/window/eastright{
@@ -6908,6 +6962,10 @@
/obj/structure/window/reinforced,
/turf/open/floor/plasteel/dark,
/area/crew_quarters/fitness/recreation)
"amB" = (
/obj/effect/decal/cleanable/blood/old,
/turf/open/floor/plating,
/area/hallway/primary/port)
"amC" = (
/obj/structure/chair{
dir = 4
@@ -15438,7 +15496,7 @@
},
/area/maintenance/fore)
"aDP" = (
/obj/structure/toilet{
/obj/structure/toilet/secret/low_loot{
pixel_y = 8
},
/obj/machinery/light/small{
@@ -16832,7 +16890,7 @@
/turf/open/floor/plating,
/area/maintenance/fore)
"aGz" = (
/obj/structure/toilet{
/obj/structure/toilet/secret/low_loot{
pixel_y = 8
},
/obj/machinery/light/small{
@@ -18115,7 +18173,7 @@
/turf/open/floor/plating,
/area/maintenance/fore)
"aJa" = (
/obj/structure/toilet{
/obj/structure/toilet/secret/low_loot{
pixel_y = 8
},
/obj/machinery/light/small{
@@ -18142,7 +18200,7 @@
/turf/open/floor/plasteel/freezer,
/area/crew_quarters/toilet/restrooms)
"aJc" = (
/obj/structure/toilet{
/obj/structure/toilet/secret/low_loot{
dir = 4
},
/obj/machinery/light/small{
@@ -32222,7 +32280,7 @@
/turf/open/floor/plasteel/white,
/area/crew_quarters/heads/captain/private)
"bkL" = (
/obj/structure/toilet{
/obj/structure/toilet/secret/low_loot{
pixel_y = 13
},
/obj/machinery/light,
@@ -33789,16 +33847,6 @@
},
/turf/open/floor/plasteel/white/corner,
/area/hallway/secondary/entry)
"bnM" = (
/obj/effect/spawner/structure/window/reinforced,
/turf/open/floor/plating,
/area/hallway/primary/port)
"bnP" = (
/obj/machinery/door/airlock/external{
name = "Common Mining Dock"
},
/turf/open/floor/plating,
/area/hallway/primary/port)
"bnR" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
@@ -34933,25 +34981,6 @@
},
/turf/open/floor/plasteel,
/area/hallway/primary/port)
"bqf" = (
/turf/open/floor/plating,
/area/hallway/primary/port)
"bqg" = (
/obj/docking_port/stationary{
dir = 2;
dwidth = 3;
height = 5;
id = "commonmining_home";
name = "SS13: Common Mining Dock";
roundstart_template = /datum/map_template/shuttle/mining_common/meta;
width = 7
},
/turf/open/floor/plating,
/area/hallway/primary/port)
"bqi" = (
/obj/structure/sign/warning/docking,
/turf/closed/wall,
/area/hallway/primary/port)
"bqj" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/obj/structure/disposalpipe/segment,
@@ -40332,7 +40361,7 @@
/turf/open/floor/plasteel,
/area/crew_quarters/toilet/auxiliary)
"bBp" = (
/obj/structure/toilet{
/obj/structure/toilet/secret/low_loot{
pixel_y = 8
},
/obj/machinery/light/small{
@@ -41803,7 +41832,7 @@
/turf/open/floor/plasteel,
/area/crew_quarters/toilet/auxiliary)
"bEv" = (
/obj/structure/toilet{
/obj/structure/toilet/secret/low_loot{
pixel_y = 8
},
/obj/machinery/light/small{
@@ -43508,7 +43537,7 @@
/turf/open/floor/plating,
/area/crew_quarters/toilet/auxiliary)
"bHQ" = (
/obj/structure/toilet{
/obj/structure/toilet/secret/low_loot{
pixel_y = 8
},
/obj/machinery/light/small{
@@ -44116,20 +44145,20 @@
/obj/structure/window/reinforced{
dir = 4
},
/obj/machinery/atmospherics/components/binary/pump{
dir = 8;
name = "N2O to Pure"
},
/obj/machinery/atmospherics/pipe/simple/green/visible,
/obj/effect/turf_decal/tile/red{
dir = 4
},
/obj/machinery/atmospherics/pipe/simple/yellow/visible{
dir = 4
},
/turf/open/floor/plasteel/cafeteria,
/area/engine/atmos)
"bIZ" = (
/obj/machinery/atmospherics/pipe/simple/cyan/visible,
/obj/machinery/atmospherics/pipe/simple/yellow/visible{
dir = 4
/obj/machinery/atmospherics/components/binary/pump{
dir = 8;
name = "N2O to Pure"
},
/turf/open/floor/plasteel/dark,
/area/engine/atmos)
@@ -47280,10 +47309,6 @@
/area/engine/atmos)
"bPw" = (
/obj/machinery/atmospherics/pipe/simple/green/visible,
/obj/machinery/atmospherics/components/binary/pump{
dir = 8;
name = "Plasma to Pure"
},
/obj/structure/window/reinforced{
dir = 4
},
@@ -47301,6 +47326,9 @@
/obj/effect/turf_decal/tile/purple{
dir = 8
},
/obj/machinery/atmospherics/pipe/simple/yellow/visible{
dir = 4
},
/turf/open/floor/plasteel,
/area/engine/atmos)
"bPx" = (
@@ -49746,10 +49774,6 @@
/turf/open/floor/plasteel,
/area/engine/atmos)
"bUH" = (
/obj/machinery/atmospherics/components/binary/pump{
dir = 8;
name = "CO2 to Pure"
},
/obj/machinery/atmospherics/pipe/simple/green/visible,
/obj/structure/window/reinforced{
dir = 4
@@ -49768,6 +49792,9 @@
/obj/effect/turf_decal/tile/neutral{
dir = 8
},
/obj/machinery/atmospherics/pipe/simple/yellow/visible{
dir = 4
},
/turf/open/floor/plasteel/dark,
/area/engine/atmos)
"bUI" = (
@@ -53170,13 +53197,10 @@
name = "Inner Pipe Access";
req_access_txt = "24"
},
/obj/machinery/atmospherics/components/binary/pump{
dir = 1;
name = "O2 to Pure"
},
/obj/machinery/atmospherics/pipe/simple/green/visible{
dir = 4
},
/obj/machinery/atmospherics/pipe/simple/yellow/visible,
/turf/open/floor/plasteel/dark,
/area/engine/atmos)
"cbl" = (
@@ -79550,7 +79574,7 @@
/turf/closed/wall,
/area/crew_quarters/bar)
"dhU" = (
/obj/structure/piano,
/obj/structure/musician/piano,
/obj/structure/window/reinforced{
dir = 8
},
@@ -81712,19 +81736,14 @@
/obj/machinery/door/firedoor,
/turf/open/floor/plating,
/area/crew_quarters/cryopod)
"eQf" = (
/obj/machinery/computer/shuttle/mining/common{
dir = 1
"eJq" = (
/obj/machinery/atmospherics/pipe/simple/cyan/visible,
/obj/machinery/atmospherics/components/binary/pump{
dir = 8;
name = "CO2 to Pure"
},
/obj/structure/window/reinforced,
/obj/structure/window/reinforced{
dir = 8
},
/obj/structure/window/reinforced{
dir = 4
},
/turf/open/floor/plating,
/area/hallway/primary/port)
/turf/open/floor/plasteel/dark,
/area/engine/atmos)
"eZe" = (
/obj/structure/cable/yellow{
icon_state = "1-2"
@@ -82112,6 +82131,13 @@
},
/turf/open/floor/plating,
/area/maintenance/starboard/aft)
"kJW" = (
/obj/machinery/atmospherics/components/binary/pump{
dir = 1;
name = "O2 to Pure"
},
/turf/open/floor/plasteel/dark,
/area/engine/atmos)
"kOt" = (
/obj/item/multitool,
/obj/item/screwdriver,
@@ -82335,6 +82361,14 @@
},
/turf/open/floor/plasteel,
/area/hallway/primary/port)
"njd" = (
/obj/machinery/atmospherics/pipe/simple/cyan/visible,
/obj/machinery/atmospherics/components/binary/pump{
dir = 8;
name = "Plasma to Pure"
},
/turf/open/floor/plasteel/dark,
/area/engine/atmos)
"nnK" = (
/obj/item/stack/sheet/glass/fifty,
/obj/item/paper_bin,
@@ -97318,9 +97352,9 @@ bjX
blU
baE
baE
bnM
bnM
bnM
baE
baE
baE
baE
baE
jPu
@@ -97573,13 +97607,13 @@ bgw
bix
bjY
blV
bqi
bqf
bqf
bqf
bqf
bqf
bqi
baE
afQ
afQ
afQ
afZ
afQ
baE
djW
bNd
alK
@@ -97830,13 +97864,13 @@ bgx
biy
bjZ
blW
bnM
bqf
bqf
bqf
bqf
bqf
bnM
baE
afZ
afQ
ajs
afQ
afQ
baE
bBf
kQP
bzx
@@ -98087,13 +98121,13 @@ bgy
biz
bka
blX
bnM
bqf
bqf
bqf
bqf
bqf
bnM
baE
afQ
afQ
afQ
afQ
afQ
baE
bBf
bCL
bEq
@@ -98344,13 +98378,13 @@ bgz
biA
bnR
blY
bnP
bqg
bqf
bqf
bqf
bqf
bnM
aeD
agQ
afQ
afQ
afQ
afQ
baE
rNX
jBe
bzx
@@ -98601,13 +98635,13 @@ bgA
biz
bkb
blZ
eQf
bqf
bqf
bqf
bqf
bqf
bnM
baE
ahT
afQ
afQ
aju
afQ
baE
bBh
xmb
iSt
@@ -98858,13 +98892,13 @@ bpt
bcW
bkc
bma
bnM
bqf
bqf
bqf
bqf
bqf
bnM
baE
ahT
aiW
afQ
amv
afQ
baE
bBf
bCM
bzx
@@ -99115,13 +99149,13 @@ bbK
bcW
dhP
bqd
bqi
bqf
bqf
bqf
bqf
bqf
bqi
baE
aiT
ajk
afQ
amB
afQ
baE
djW
bsx
xfI
@@ -99374,9 +99408,9 @@ bkd
bmb
baE
baE
bnM
baE
bnM
baE
baE
baE
baE
bBf
@@ -126382,7 +126416,7 @@ dDm
bIS
bZK
cbk
ccP
kJW
ceh
cfx
bAR
@@ -127657,11 +127691,11 @@ bIZ
bKG
bMl
dhj
bIZ
njd
bKG
bMl
bKG
bIZ
eJq
bKG
bMl
bYB
@@ -11768,7 +11768,7 @@
/turf/open/floor/plasteel/dark,
/area/crew_quarters/theatre)
"atY" = (
/obj/structure/piano{
/obj/structure/musician/piano{
icon_state = "piano"
},
/obj/machinery/light{
+10 -10
View File
@@ -2285,7 +2285,7 @@
/turf/open/floor/plasteel,
/area/security/prison)
"ahb" = (
/obj/structure/toilet{
/obj/structure/toilet/secret/prison{
dir = 8
},
/turf/open/floor/plasteel/freezer,
@@ -9106,7 +9106,7 @@
/turf/open/floor/plasteel/freezer,
/area/crew_quarters/heads/captain)
"avK" = (
/obj/structure/toilet{
/obj/structure/toilet/secret/low_loot{
dir = 8
},
/turf/open/floor/plasteel/freezer,
@@ -14667,7 +14667,7 @@
/turf/open/floor/plasteel/freezer,
/area/crew_quarters/toilet/restrooms)
"aIl" = (
/obj/structure/toilet{
/obj/structure/toilet/secret/low_loot{
dir = 8
},
/obj/machinery/light/small{
@@ -16490,7 +16490,7 @@
/turf/open/floor/plasteel/cafeteria,
/area/crew_quarters/cafeteria/lunchroom)
"aNc" = (
/obj/structure/toilet{
/obj/structure/toilet/secret/low_loot{
dir = 4
},
/obj/effect/landmark/start/assistant,
@@ -21324,7 +21324,7 @@
"aYm" = (
/obj/structure/closet/crate/wooden/toy,
/obj/item/lipstick/random,
/obj/item/clothing/gloves/color/rainbow/clown,
/obj/item/clothing/gloves/color/rainbow,
/obj/effect/turf_decal/tile/neutral{
dir = 1
},
@@ -43015,7 +43015,7 @@
/area/maintenance/department/engine)
"bUb" = (
/obj/structure/grille/broken,
/obj/structure/piano,
/obj/structure/musician/piano,
/turf/open/floor/plating,
/area/maintenance/department/engine)
"bUc" = (
@@ -47393,7 +47393,7 @@
/turf/open/floor/plasteel/grimy,
/area/chapel/main/monastery)
"cgO" = (
/obj/structure/toilet{
/obj/structure/toilet/secret/low_loot{
pixel_y = 8
},
/obj/machinery/light/small{
@@ -47734,7 +47734,7 @@
/turf/open/floor/plasteel/grimy,
/area/chapel/main/monastery)
"ciq" = (
/obj/structure/toilet{
/obj/structure/toilet/secret/low_loot{
pixel_y = 8
},
/turf/open/floor/plasteel/showroomfloor,
@@ -55939,7 +55939,7 @@
/turf/open/floor/carpet,
/area/chapel/office)
"kgR" = (
/obj/structure/toilet{
/obj/structure/toilet/secret/low_loot{
dir = 4
},
/turf/open/floor/plating,
@@ -58271,7 +58271,7 @@
/turf/open/floor/plating,
/area/chapel/office)
"plA" = (
/obj/structure/piano,
/obj/structure/musician/piano,
/turf/open/floor/plasteel/dark,
/area/maintenance/department/crew_quarters/dorms)
"pmB" = (
+183 -123
View File
@@ -10005,6 +10005,12 @@
/obj/structure/chair/stool,
/turf/open/floor/plasteel,
/area/syndicate_mothership)
"wZ" = (
/obj/structure/bed,
/obj/item/bedsheet/syndie,
/obj/effect/landmark/holding_facility,
/turf/open/indestructible/hotelwood,
/area/centcom/holding)
"xa" = (
/obj/machinery/door/window/northright{
dir = 4;
@@ -12452,6 +12458,13 @@
},
/turf/open/floor/plasteel/dark,
/area/centcom/evac)
"CQ" = (
/obj/effect/landmark/holding_facility,
/mob/living/simple_animal/bot/medbot{
name = "Syndicate Hospitality Drone"
},
/turf/open/indestructible/hotelwood,
/area/centcom/holding)
"CR" = (
/obj/machinery/computer/security{
dir = 8
@@ -14407,7 +14420,7 @@
/obj/machinery/light{
dir = 8
},
/obj/structure/piano,
/obj/structure/musician/piano,
/turf/open/indestructible/hotelwood,
/area/centcom/holding)
"Hk" = (
@@ -17251,10 +17264,21 @@
/obj/structure/window/reinforced/fulltile,
/turf/open/indestructible/hotelwood,
/area/centcom/holding)
"Ql" = (
/obj/machinery/light,
/obj/effect/landmark/holding_facility,
/turf/open/indestructible/hotelwood,
/area/centcom/holding)
"Qm" = (
/obj/singularity/wizard/mapped,
/turf/open/indestructible/binary,
/area/fabric_of_reality)
"Qn" = (
/obj/machinery/vr_sleeper/hugbox{
dir = 8
},
/turf/open/indestructible/hotelwood,
/area/centcom/holding)
"Qo" = (
/turf/open/floor/mineral/plastitanium/red,
/area/centcom/evac)
@@ -17794,7 +17818,7 @@
/area/syndicate_mothership)
"Tn" = (
/obj/structure/table/wood/fancy,
/obj/item/candle/infinite{
/obj/item/candle/infinite/hugbox{
pixel_y = 6
},
/turf/open/indestructible/hotelwood,
@@ -17820,7 +17844,6 @@
dir = 4
},
/obj/structure/window/reinforced/tinted{
icon_state = "twindow";
dir = 1
},
/turf/open/floor/plasteel/white,
@@ -17897,7 +17920,6 @@
dir = 8
},
/obj/structure/window/reinforced/tinted{
icon_state = "twindow";
dir = 1
},
/obj/machinery/washing_machine,
@@ -17939,10 +17961,13 @@
/obj/vehicle/ridden/janicart,
/turf/open/indestructible/hotelwood,
/area/centcom/holding)
"Ud" = (
/obj/effect/landmark/holding_facility,
"Uc" = (
/obj/machinery/vending/sustenance,
/turf/open/indestructible/hotelwood,
/area/centcom/holding)
"Ud" = (
/turf/closed/indestructible/wood,
/area/centcom/holding)
"Ug" = (
/obj/machinery/door/poddoor/shuttledock{
checkdir = 1;
@@ -17962,6 +17987,11 @@
},
/turf/open/indestructible/hotelwood,
/area/centcom/holding)
"Ui" = (
/obj/structure/table,
/obj/item/clothing/mask/luchador/tecnicos,
/turf/open/floor/holofloor/wood,
/area/holodeck/rec_center/wrestlingarena)
"Uj" = (
/obj/machinery/door/airlock/centcom{
name = "Restroom";
@@ -18204,6 +18234,11 @@
/obj/structure/window/reinforced/tinted,
/turf/open/floor/plasteel/freezer,
/area/syndicate_mothership)
"Vk" = (
/obj/structure/table,
/obj/item/storage/belt/champion/wrestling/holodeck,
/turf/open/floor/holofloor/wood,
/area/holodeck/rec_center/wrestlingarena)
"Vt" = (
/obj/item/paper/fluff/stations/centcom/disk_memo,
/obj/structure/noticeboard{
@@ -18368,6 +18403,11 @@
},
/turf/open/indestructible/hotelwood,
/area/centcom/holding)
"Wx" = (
/obj/structure/table,
/obj/item/clothing/mask/luchador,
/turf/open/floor/holofloor/wood,
/area/holodeck/rec_center/wrestlingarena)
"Wz" = (
/obj/structure/table,
/obj/item/storage/backpack/duffelbag/med/surgery,
@@ -18741,6 +18781,11 @@
},
/turf/open/floor/plasteel/cafeteria,
/area/centcom/holding)
"Yv" = (
/obj/structure/table,
/obj/item/clothing/mask/luchador/rudos,
/turf/open/floor/holofloor/wood,
/area/holodeck/rec_center/wrestlingarena)
"Yw" = (
/turf/closed/indestructible/fakedoor{
name = "External Access"
@@ -18750,6 +18795,9 @@
/obj/machinery/door/airlock/titanium,
/turf/open/floor/mineral/titanium,
/area/centcom/evac)
"YC" = (
/turf/open/floor/holofloor/wood,
/area/holodeck/rec_center/wrestlingarena)
"YJ" = (
/obj/item/reagent_containers/food/condiment/enzyme,
/obj/item/reagent_containers/food/drinks/shaker,
@@ -18822,6 +18870,14 @@
},
/turf/open/floor/plasteel,
/area/centcom/supplypod)
"Zl" = (
/obj/structure/table,
/obj/item/clothing/gloves/boxing,
/obj/item/clothing/gloves/boxing/blue,
/obj/item/clothing/gloves/boxing/green,
/obj/item/clothing/gloves/boxing/yellow,
/turf/open/floor/holofloor/wood,
/area/holodeck/rec_center/wrestlingarena)
"Zr" = (
/obj/machinery/light,
/turf/open/floor/plasteel/dark,
@@ -18844,6 +18900,10 @@
/obj/effect/landmark/start/nukeop_leader,
/turf/open/floor/wood,
/area/syndicate_mothership)
"ZB" = (
/obj/effect/landmark/holding_facility,
/turf/open/indestructible/hotelwood,
/area/centcom/holding)
"ZE" = (
/obj/structure/sink{
dir = 4;
@@ -43829,11 +43889,11 @@ aa
aa
aa
aa
aa
aa
aa
aa
aa
Ud
Ud
Ud
Ud
Ud
aa
aa
aa
@@ -44086,11 +44146,11 @@ aa
aa
aa
aa
aa
aa
aa
aa
aa
Ud
Uc
ZB
ZB
Ud
aa
aa
aa
@@ -44343,11 +44403,11 @@ aa
aa
aa
aa
aa
aa
aa
aa
aa
Ud
ZB
CQ
Ql
Ud
aa
aa
aa
@@ -44600,11 +44660,11 @@ aa
aa
aa
aa
aa
aa
aa
aa
aa
Ud
wZ
ZB
Qn
Ud
aa
aa
aa
@@ -44857,11 +44917,11 @@ aa
aa
aa
aa
aa
aa
aa
aa
aa
Ud
Ud
Ud
Ud
Ud
aa
aa
aa
@@ -46174,8 +46234,8 @@ Sd
HH
Nd
WM
Ud
Ud
Sd
Sd
NT
Nj
Po
@@ -46431,8 +46491,8 @@ Sd
XM
NT
Sd
Ud
Ud
Sd
Sd
NT
YU
zT
@@ -46688,8 +46748,8 @@ Sd
Tn
NT
Sd
Ud
Ud
Sd
Sd
NT
YU
zT
@@ -46945,8 +47005,8 @@ Sd
GY
NT
Sd
Ud
Ud
Sd
Sd
NT
YU
zT
@@ -47202,8 +47262,8 @@ Qk
Vu
Nd
Gs
Ud
Ud
Sd
Sd
NT
Mt
PA
@@ -71951,18 +72011,18 @@ aa
aa
aa
aa
aa
aa
aa
aa
aa
aa
aa
aa
aa
aa
aa
aa
ab
ag
ag
ag
ag
ag
ag
ag
ag
ag
ag
ab
aa
aa
aa
@@ -72208,18 +72268,18 @@ aa
aa
aa
aa
aa
aa
aa
aa
aa
aa
aa
aa
aa
aa
aa
aa
bj
YC
YC
YC
YC
YC
YC
YC
YC
YC
YC
fx
aa
aa
aa
@@ -72465,18 +72525,18 @@ aa
aa
aa
aa
aa
aa
aa
aa
aa
aa
aa
aa
aa
aa
aa
aa
bj
Vk
YC
YC
YC
YC
YC
YC
YC
YC
Vk
fx
aa
aa
aa
@@ -72722,18 +72782,18 @@ aa
aa
aa
aa
aa
aa
aa
aa
aa
aa
aa
aa
aa
aa
aa
aa
bj
Vk
YC
YC
YC
YC
YC
YC
YC
YC
Vk
fx
aa
aa
aa
@@ -72979,18 +73039,18 @@ aa
aa
aa
aa
aa
aa
aa
aa
aa
aa
aa
aa
aa
aa
aa
aa
bj
Vk
YC
YC
YC
YC
YC
YC
YC
YC
Vk
fx
aa
aa
aa
@@ -73236,18 +73296,18 @@ aa
aa
aa
aa
aa
aa
aa
aa
aa
aa
aa
aa
aa
aa
aa
aa
bj
YC
YC
Wx
YC
Yv
Ui
YC
Zl
YC
YC
fx
aa
aa
aa
@@ -73494,16 +73554,16 @@ ae
ae
ae
ab
ae
ae
ae
ae
ae
ae
ae
ae
ae
ae
ag
ag
ag
ag
ag
ag
ag
ag
ag
ag
ab
aa
aa
+1 -1
View File
@@ -197,7 +197,7 @@
/turf/open/floor/plasteel,
/area/shuttle/escape)
"aF" = (
/obj/structure/piano{
/obj/structure/musician/piano{
icon_state = "piano"
},
/turf/open/floor/plasteel/grimy,
-124
View File
@@ -1,124 +0,0 @@
//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
"a" = (
/turf/closed/wall/mineral/titanium,
/area/shuttle/mining)
"b" = (
/obj/effect/spawner/structure/window/shuttle,
/turf/open/floor/plating,
/area/shuttle/mining)
"c" = (
/obj/structure/table,
/turf/open/floor/mineral/titanium/blue,
/area/shuttle/mining)
"d" = (
/obj/machinery/computer/shuttle/mining/common,
/turf/open/floor/mineral/titanium/blue,
/area/shuttle/mining)
"e" = (
/turf/open/floor/mineral/titanium,
/area/shuttle/mining)
"f" = (
/obj/structure/chair/comfy/shuttle{
dir = 1
},
/turf/open/floor/mineral/titanium/blue,
/area/shuttle/mining)
"g" = (
/obj/machinery/light{
dir = 8
},
/turf/open/floor/mineral/titanium,
/area/shuttle/mining)
"h" = (
/obj/machinery/door/airlock/titanium{
name = "Lavaland Shuttle Airlock"
},
/obj/docking_port/mobile{
dir = 8;
dwidth = 3;
height = 5;
id = "mining_common";
name = "lavaland shuttle";
port_direction = 4;
width = 7
},
/turf/open/floor/plating,
/area/shuttle/mining)
"i" = (
/obj/structure/closet/crate,
/turf/open/floor/mineral/titanium/blue,
/area/shuttle/mining)
"j" = (
/obj/structure/shuttle/engine/heater,
/obj/structure/window/reinforced{
dir = 1;
layer = 2.9
},
/obj/structure/window/reinforced{
dir = 8
},
/obj/structure/window/reinforced{
dir = 4
},
/turf/open/floor/plating,
/area/shuttle/mining)
"k" = (
/obj/structure/ore_box,
/turf/open/floor/mineral/titanium/blue,
/area/shuttle/mining)
"l" = (
/obj/structure/shuttle/engine/propulsion/burst,
/turf/open/floor/plating/airless,
/area/shuttle/mining)
"Q" = (
/obj/structure/chair/comfy/shuttle{
dir = 1
},
/turf/open/floor/mineral/titanium,
/area/shuttle/mining)
(1,1,1) = {"
a
a
b
a
b
a
a
"}
(2,1,1) = {"
a
c
e
g
f
i
a
"}
(3,1,1) = {"
b
d
Q
e
f
j
l
"}
(4,1,1) = {"
a
c
e
e
f
k
a
"}
(5,1,1) = {"
a
a
b
h
b
a
a
"}
+8 -2
View File
@@ -71,6 +71,11 @@
#define MUT_EXTRA 2
#define MUT_OTHER 3
//species use_skintones defines
#define NO_SKINTONES 0
#define USE_SKINTONES 1
#define USE_SKINTONES_GRAYSCALE_CUSTOM 2 //adds a "_g" suffix to limb overlays icon states if the skin_tone is a custom one.
//DNA - Because fuck you and your magic numbers being all over the codebase.
#define DNA_BLOCK_SIZE 3
@@ -132,8 +137,9 @@
#define NOGENITALS 21 //Cannot create, use, or otherwise have genitals
#define MATRIXED 22 //if icon is color matrix'd
#define SKINTONE 23 //uses skin tones
#define HORNCOLOR 24
#define WINGCOLOR 25
#define CUSTOM_SKINTONE 24 //adds a "_g" suffix to bodypart overlays icon states if a custom skintone is used.
#define HORNCOLOR 25
#define WINGCOLOR 26
//organ slots
#define ORGAN_SLOT_BRAIN "brain"
+2 -1
View File
@@ -25,6 +25,7 @@
#define GENITAL_CAN_AROUSE (1<<8)
#define GENITAL_UNDIES_HIDDEN (1<<9)
#define UPDATE_OWNER_APPEARANCE (1<<10)
#define GENITAL_CAN_TAUR (1<<11)
#define DEF_VAGINA_SHAPE "Human"
@@ -98,7 +99,7 @@
#define NO_ASS_SLAP (1<<10)
#define BIMBOFICATION (1<<11)
#define TOGGLES_CITADEL (EATING_NOISES|DIGESTION_NOISES|BREAST_ENLARGEMENT|PENIS_ENLARGEMENT)
#define TOGGLES_CITADEL 0
//component stuff
#define COMSIG_VORE_TOGGLED "voremode_toggled" // totally not copypasta
+60 -6
View File
@@ -114,12 +114,17 @@
//slowdown when in softcrit
#define SOFTCRIT_ADD_SLOWDOWN 6
//Attack types for checking shields/hit reactions
#define MELEE_ATTACK 1
#define UNARMED_ATTACK 2
#define PROJECTILE_ATTACK 3
#define THROWN_PROJECTILE_ATTACK 4
#define LEAP_ATTACK 5
/// Attack types for check_block()/run_block(). Flags, combinable.
/// Attack was melee, whether or not armed.
#define ATTACK_TYPE_MELEE (1<<0)
/// Attack was with a gun or something that should count as a gun (but not if a gun shouldn't count for a gun, crazy right?)
#define ATTACK_TYPE_PROJECTILE (1<<1)
/// Attack was unarmed.. this usually means hand to hand combat.
#define ATTACK_TYPE_UNARMED (1<<2)
/// Attack was a thrown atom hitting the victim.
#define ATTACK_TYPE_THROWN (1<<3)
/// Attack was a bodyslam/leap/tackle. See: Xenomorph leap tackles.
#define ATTACK_TYPE_TACKLE (1<<4)
//attack visual effects
#define ATTACK_EFFECT_PUNCH "punch"
@@ -252,4 +257,53 @@ GLOBAL_LIST_INIT(shove_disarming_types, typecacheof(list(
#define BULLET_ACT_FORCE_PIERCE "PIERCE" //It pierces through the object regardless of the bullet being piercing by default.
#define BULLET_ACT_TURF "TURF" //It hit us but it should hit something on the same turf too. Usually used for turfs.
/// 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.
/// Attack was not blocked
#define BLOCK_NONE NONE
/// Attack was blocked, do not do damage. THIS FLAG MUST BE THERE FOR DAMAGE/EFFECT PREVENTION!
#define BLOCK_SUCCESS (1<<1)
/// The below are for "metadata" on "how" the attack was blocked.
/// Attack was and should be redirected according to list argument REDIRECT_METHOD (NOTE: the SHOULD here is important, as it says "the thing blocking isn't handling the reflecting for you so do it yourself"!)
#define BLOCK_SHOULD_REDIRECT (1<<2)
/// Attack was redirected (whether by us or by SHOULD_REDIRECT flagging for automatic handling)
#define BLOCK_REDIRECTED (1<<3)
/// Attack was blocked by something like a shield.
#define BLOCK_PHYSICAL_EXTERNAL (1<<4)
/// Attack was blocked by something worn on you.
#define BLOCK_PHYSICAL_INTERNAL (1<<5)
/// Attack outright missed because the target dodged. Should usually be combined with redirection passthrough or something (see martial arts)
#define BLOCK_TARGET_DODGED (1<<7)
/// Meta-flag for run_block/do_run_block : By default, BLOCK_SUCCESS tells do_run_block() to assume the attack is completely blocked and not continue the block chain. If this is present, it will continue to check other items in the chain rather than stopping.
#define BLOCK_CONTINUE_CHAIN (1<<8)
/// For keys in associative list/block_return as we don't want to saturate our (somewhat) limited flags.
#define BLOCK_RETURN_REDIRECT_METHOD "REDIRECT_METHOD"
/// Pass through victim
#define REDIRECT_METHOD_PASSTHROUGH "passthrough"
/// Deflect at randomish angle
#define REDIRECT_METHOD_DEFLECT "deflect"
/// reverse 180 angle, basically (as opposed to "realistic" wall reflections)
#define REDIRECT_METHOD_REFLECT "reflect"
/// "do not taser the bad man with the desword" - actually aims at the firer/attacker rather than just reversing
#define REDIRECT_METHOD_RETURN_TO_SENDER "no_you"
/// These keys are generally only applied to the list if real_attack is FALSE. Used incase we want to make "smarter" mob AI in the future or something.
/// Tells the caller how likely from 0 (none) to 100 (always) we are to reflect energy projectiles
#define BLOCK_RETURN_REFLECT_PROJECTILE_CHANCE "reflect_projectile_chance"
/// Tells the caller how likely we are to block attacks from 0 to 100 in general
#define BLOCK_RETURN_NORMAL_BLOCK_CHANCE "normal_block_chance"
/// Tells the caller about how many hits we can soak on average before our blocking fails.
#define BLOCK_RETURN_BLOCK_CAPACITY "block_capacity"
/// Default if the above isn't set in the list.
#define DEFAULT_REDIRECT_METHOD_PROJECTILE REDIRECT_METHOD_DEFLECT
/// Block priorities
#define BLOCK_PRIORITY_HELD_ITEM 100
#define BLOCK_PRIORITY_CLOTHING 50
#define BLOCK_PRIORITY_WEAR_SUIT 75
#define BLOCK_PRIORITY_UNIFORM 25
#define BLOCK_PRIORITY_DEFAULT BLOCK_PRIORITY_HELD_ITEM
+14
View File
@@ -39,3 +39,17 @@
//Ouch my toes!
#define CALTROP_BYPASS_SHOES 1
#define CALTROP_IGNORE_WALKERS 2
#define SPELL_SKIP_ALL_REQS (1<<0)
#define SPELL_SKIP_CENTCOM (1<<1)
#define SPELL_SKIP_STAT (1<<2)
#define SPELL_SKIP_CLOTHES (1<<3)
#define SPELL_SKIP_ANTIMAGIC (1<<4)
#define SPELL_SKIP_VOCAL (1<<5)
#define SPELL_SKIP_MOBTYPE (1<<6)
#define SPELL_WIZARD_HAT (1<<7)
#define SPELL_WIZARD_ROBE (1<<8)
#define SPELL_CULT_HELMET (1<<9)
#define SPELL_CULT_ARMOR (1<<10)
#define SPELL_WIZARD_GARB (SPELL_WIZARD_HAT|SPELL_WIZARD_ROBE)
#define SPELL_CULT_GARB (SPELL_CULT_HELMET|SPELL_CULT_ARMOR)
+13 -1
View File
@@ -149,7 +149,9 @@
#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_GHOSTIZE "mob_ghostize" //from base of mob/Ghostize(): (can_reenter_corpse, special, penalize)
#define COMPONENT_BLOCK_GHOSTING 1
#define COMPONENT_BLOCK_GHOSTING (1<<0)
#define COMPONENT_DO_NOT_PENALIZE_GHOSTING (1<<1)
#define COMPONENT_FREE_GHOSTING (1<<2)
#define COMSIG_MOB_ALLOWED "mob_allowed" //from base of obj/allowed(mob/M): (/obj) returns bool, if TRUE the mob has id access to the obj
#define COMSIG_MOB_RECEIVE_MAGIC "mob_receive_magic" //from base of mob/anti_magic_check(): (mob/user, magic, holy, tinfoil, chargecost, self, protection_sources)
#define COMPONENT_BLOCK_MAGIC 1
@@ -177,6 +179,8 @@
// #define SPEECH_FORCED 7
#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)
// /mob/living signals
#define COMSIG_LIVING_REGENERATE_LIMBS "living_regenerate_limbs" //from base of /mob/living/regenerate_limbs(): (noheal, excluded_limbs)
#define COMSIG_LIVING_RESIST "living_resist" //from base of mob/living/resist() (/mob/living)
@@ -186,8 +190,11 @@
#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_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)
#define COMSIG_LIVING_COMBAT_ENABLED "combatmode_enabled" //from base of mob/living/enable_combat_mode() (was_forced)
#define COMSIG_LIVING_COMBAT_DISABLED "combatmode_disabled" //from base of mob/living/disable_combat_mode() (was_forced)
@@ -236,9 +243,14 @@
#define COMSIG_ITEM_IMBUE_SOUL "item_imbue_soul" //return a truthy value to prevent ensouling, checked in /obj/effect/proc_holder/spell/targeted/lichdom/cast(): (mob/user)
#define COMSIG_ITEM_HIT_REACT "item_hit_react" //from base of obj/item/hit_reaction(): (list/args)
#define COMSIG_ITEM_WEARERCROSSED "wearer_crossed" //called on item when crossed by something (): (/atom/movable)
#define COMSIG_ITEM_WORN_OVERLAYS "item_worn_overlays" //from base of obj/item/worn_overlays(): (isinhands, icon_file, used_state, style_flags, list/overlays)
// 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)
// /obj/item/clothing signals
#define COMSIG_SHOES_STEP_ACTION "shoes_step_action" //from base of obj/item/clothing/shoes/proc/step_action(): ()
#define COMSIG_SUIT_MADE_HELMET "suit_made_helmet" //from base of obj/item/clothing/suit/MakeHelmet(): (helmet)
// /obj/item/implant signals
#define COMSIG_IMPLANT_ACTIVATED "implant_activated" //from base of /obj/item/implant/proc/activate(): ()
+28
View File
@@ -0,0 +1,28 @@
#define DYE_REGISTRY_UNDER "under"
#define DYE_REGISTRY_JUMPSKIRT "jumpskirt"
#define DYE_REGISTRY_GLOVES "gloves"
#define DYE_REGISTRY_SNEAKERS "sneakers"
#define DYE_REGISTRY_FANNYPACK "fannypack"
#define DYE_REGISTRY_BEDSHEET "bedsheet"
#define DYE_RED "red"
#define DYE_ORANGE "orange"
#define DYE_YELLOW "yellow"
#define DYE_GREEN "green"
#define DYE_BLUE "blue"
#define DYE_PURPLE "purple"
#define DYE_BLACK "black"
#define DYE_WHITE "white"
#define DYE_RAINBOW "rainbow"
#define DYE_MIME "mime"
#define DYE_COSMIC "cosmic"
#define DYE_QM "qm"
#define DYE_LAW "law"
#define DYE_CAPTAIN "captain"
#define DYE_HOP "hop"
#define DYE_HOS "hos"
#define DYE_CE "ce"
#define DYE_RD "rd"
#define DYE_CMO "cmo"
#define DYE_REDCOAT "redcoat"
#define DYE_CLOWN "clown"
+1
View File
@@ -7,6 +7,7 @@
#define WAROPS_ALWAYS_ALLOWED (1<<1)
#define USE_PREF_WEIGHTS (1<<2)
#define FORCE_IF_WON (1<<3)
#define USE_PREV_ROUND_WEIGHTS (1<<4)
#define ONLY_RULESET (1<<0)
#define HIGHLANDER_RULESET (1<<1)
+18
View File
@@ -0,0 +1,18 @@
/// Transparent, let beams pass
#define SHIELD_TRANSPARENT (1<<0)
/// Can shield bash
#define SHIELD_CAN_BASH (1<<1)
/// Shield bash knockdown on wall hit
#define SHIELD_BASH_WALL_KNOCKDOWN (1<<2)
/// Shield bash always knockdown
#define SHIELD_BASH_ALWAYS_KNOCKDOWN (1<<3)
/// Shield bash disarm on wall hit
#define SHIELD_BASH_WALL_DISARM (1<<4)
/// Shield bash always disarm
#define SHIELD_BASH_ALWAYS_DISARM (1<<5)
/// You can shieldbash target someone on the ground for ground slam
#define SHIELD_BASH_GROUND_SLAM (1<<6)
/// Shield bashing someone on the ground will disarm
#define SHIELD_BASH_GROUND_SLAM_DISARM (1<<7)
#define SHIELD_FLAGS_DEFAULT (SHIELD_CAN_BASH | SHIELD_BASH_WALL_KNOCKDOWN | SHIELD_BASH_WALL_DISARM | SHIELD_BASH_GROUND_SLAM)
+1
View File
@@ -18,3 +18,4 @@
#define DRINK_VERYGOOD 3
#define DRINK_FANTASTIC 4
#define FOOD_AMAZING 5
#define RACE_DRINK 6
+29
View File
@@ -0,0 +1,29 @@
#define INSTRUMENT_MIN_OCTAVE 1
#define INSTRUMENT_MAX_OCTAVE 9
#define INSTRUMENT_MIN_KEY 0
#define INSTRUMENT_MAX_KEY 127
/// Max number of playing notes per instrument.
#define CHANNELS_PER_INSTRUMENT 128
/// Distance multiplier that makes us not be impacted by 3d sound as much. This is a multiplier so lower it is the closer we will pretend to be to people.
#define INSTRUMENT_DISTANCE_FALLOFF_BUFF 0.2
/// How many tiles instruments have no falloff for
#define INSTRUMENT_DISTANCE_NO_FALLOFF 3
/// Maximum length a note should ever go for
#define INSTRUMENT_MAX_TOTAL_SUSTAIN (5 SECONDS)
/// These are per decisecond.
#define INSTRUMENT_EXP_FALLOFF_MIN 1.025 //100/(1.025^50) calculated for [INSTRUMENT_MIN_SUSTAIN_DROPOFF] to be 30.
#define INSTRUMENT_EXP_FALLOFF_MAX 10
/// Minimum volume for when the sound is considered dead.
#define INSTRUMENT_MIN_SUSTAIN_DROPOFF 0
#define SUSTAIN_LINEAR 1
#define SUSTAIN_EXPONENTIAL 2
// /datum/instrument instrument_flags
#define INSTRUMENT_LEGACY (1<<0) //Legacy instrument. Implies INSTRUMENT_DO_NOT_AUTOSAMPLE
#define INSTRUMENT_DO_NOT_AUTOSAMPLE (1<<1) //Do not automatically sample
+2 -9
View File
@@ -1,13 +1,5 @@
/*ALL DEFINES RELATED TO INVENTORY OBJECTS, MANAGEMENT, ETC, GO HERE*/
//ITEM INVENTORY WEIGHT, FOR w_class
#define WEIGHT_CLASS_TINY 1 //Usually items smaller then a human hand, ex: Playing Cards, Lighter, Scalpel, Coins/Money
#define WEIGHT_CLASS_SMALL 2 //Pockets can hold small and tiny items, ex: Flashlight, Multitool, Grenades, GPS Device
#define WEIGHT_CLASS_NORMAL 3 //Standard backpacks can carry tiny, small & normal items, ex: Fire extinguisher, Stunbaton, Gas Mask, Metal Sheets
#define WEIGHT_CLASS_BULKY 4 //Items that can be weilded or equipped but not stored in a normal bag, ex: Defibrillator, Backpack, Space Suits
#define WEIGHT_CLASS_HUGE 5 //Usually represents objects that require two hands to operate, ex: Shotgun, Two Handed Melee Weapons - Can not fit in Boh
#define WEIGHT_CLASS_GIGANTIC 6 //Essentially means it cannot be picked up or placed in an inventory, ex: Mech Parts, Safe - Can not fit in Boh
//Inventory depth: limits how many nested storage items you can access directly.
//1: stuff in mob, 2: stuff in backpack, 3: stuff in box in backpack, etc
#define INVENTORY_DEPTH 3
@@ -147,6 +139,7 @@
#define STYLE_PAW_TAURIC (1<<3)
#define STYLE_HOOF_TAURIC (1<<4)
#define STYLE_ALL_TAURIC (STYLE_SNEK_TAURIC|STYLE_PAW_TAURIC|STYLE_HOOF_TAURIC)
#define STYLE_NO_ANTHRO_ICON (1<<5) //When digis fit the default sprite fine and need no copypasted states. This is the case of skirts and winter coats, for example.
//digitigrade legs settings.
#define NOT_DIGITIGRADE 0
@@ -155,7 +148,7 @@
//flags for covering body parts
#define GLASSESCOVERSEYES (1<<0)
#define MASKCOVERSEYES (1<<1) // get rid of some of the other retardation in these flags
#define MASKCOVERSEYES (1<<1) // get rid of some of the other stupidity in these flags
#define HEADCOVERSEYES (1<<2) // feel free to realloc these numbers for other purposes
#define MASKCOVERSMOUTH (1<<3) // on other items, these are just for mask/head
#define HEADCOVERSMOUTH (1<<4)
+7 -1
View File
@@ -67,9 +67,15 @@ GLOBAL_LIST_INIT(turfs_without_ground, typecacheof(list(
#define iscatperson(A) (ishumanbasic(A) && istype(A.dna.species, /datum/species/human/felinid) )
#define isdwarf(A) (is_species(A, /datum/species/dwarf))
#define isdullahan(A) (is_species(A, /datum/species/dullahan))
#define isangel(A) (is_species(A, /datum/species/angel))
#define isvampire(A) (is_species(A, /datum/species/vampire))
#define ismush(A) (is_species(A, /datum/species/mush))
#define isshadow(A) (is_species(A, /datum/species/shadow))
#define isskeleton(A) (is_species(A, /datum/species/skeleton))
// Citadel specific species
#define isipcperson(A) (is_species(A, /datum/species/ipc))
#define issynthliz(A) (is_species(A, /datum/species/synthliz))
#define ismammal(A) (is_species(A, /datum/species/mammal))
#define isavian(A) (is_species(A, /datum/species/avian))
#define isaquatic(A) (is_species(A, /datum/species/aquatic))
@@ -263,4 +269,4 @@ GLOBAL_LIST_INIT(glass_sheet_types, typecacheof(list(
#define isblobmonster(O) (istype(O, /mob/living/simple_animal/hostile/blob))
#define isshuttleturf(T) (length(T.baseturfs) && (/turf/baseturf_skipover/shuttle in T.baseturfs))
#define isshuttleturf(T) (length(T.baseturfs) && (/turf/baseturf_skipover/shuttle in T.baseturfs))
@@ -129,11 +129,20 @@
#define HUD_PLANE 21
#define HUD_LAYER 21
#define HUD_RENDER_TARGET "HUD_PLANE"
#define ABOVE_HUD_PLANE 22
#define ABOVE_HUD_LAYER 22
#define VOLUMETRIC_STORAGE_BOX_PLANE 23
#define VOLUMETRIC_STORAGE_BOX_LAYER 23
#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_RENDER_TARGET "VOLUME_STORAGE_ITEM_PLANE"
#define ABOVE_HUD_PLANE 25
#define ABOVE_HUD_LAYER 25
#define ABOVE_HUD_RENDER_TARGET "ABOVE_HUD_PLANE"
#define SPLASHSCREEN_LAYER 23
#define SPLASHSCREEN_PLANE 23
#define SPLASHSCREEN_LAYER 30
#define SPLASHSCREEN_PLANE 30
#define SPLASHSCREEN_RENDER_TARGET "SPLASHSCREEN_PLANE"
+1 -1
View File
@@ -465,7 +465,7 @@ GLOBAL_LIST_INIT(pda_reskins, list(PDA_SKIN_CLASSIC = 'icons/obj/pda.dmi', PDA_S
#define EGG_LAYING_MESSAGES list("lays an egg.","squats down and croons.","begins making a huge racket.","begins clucking raucously.")
// list of all null rod weapons
#define HOLY_WEAPONS /obj/item/nullrod, /obj/item/twohanded/dualsaber/hypereutactic/chaplain, /obj/item/gun/energy/laser/redtag/hitscan/chaplain, /obj/item/multitool/chaplain, /obj/item/melee/baseball_bat/chaplain
#define HOLY_WEAPONS /obj/item/nullrod, /obj/item/twohanded/dualsaber/hypereutactic/chaplain, /obj/item/gun/energy/laser/redtag/hitscan/chaplain, /obj/item/multitool/chaplain, /obj/item/clothing/gloves/fingerless/pugilist/chaplain, /obj/item/melee/baseball_bat/chaplain
// Used by PDA and cartridge code to reduce repetitiveness of spritesheets
#define PDAIMG(what) {"<span class="pda16x16 [#what]"></span>"}
+4 -1
View File
@@ -59,6 +59,7 @@
#define MOVESPEED_ID_SPECIES "SPECIES_SPEED_MOD"
#define MOVESPEED_ID_SMALL_STRIDE "SMALL_STRIDE"
#define MOVESPEED_ID_PRONE_DRAGGING "PRONE_DRAG"
#define MOVESPEED_ID_HUMAN_CARRYING "HUMAN_CARRY"
#define MOVESPEED_ID_SHRINK_RAY "SHRUNKEN_SPEED_MODIFIER"
@@ -78,4 +79,6 @@
#define MOVESPEED_ID_COLD "COLD"
#define MOVESPEED_ID_HUNGRY "HUNGRY"
#define MOVESPEED_ID_DAMAGE_SLOWDOWN "DAMAGE"
#define MOVESPEED_ID_DAMAGE_SLOWDOWN_FLYING "FLYING"
#define MOVESPEED_ID_DAMAGE_SLOWDOWN_FLYING "FLYING"
#define MOVESPEED_ID_CIRRHOSIS "CIRRHOSIS"
+3 -3
View File
@@ -45,9 +45,9 @@ Ask ninjanomnom if they're around
// WARNING: The deines below could have disastrous consequences if tweaked incorrectly. See: The great SM purge of Oct.6.2017
// contamination_chance = (strength-RAD_MINIMUM_CONTAMINATION) * RAD_CONTAMINATION_CHANCE_COEFFICIENT * min(1/(steps*RAD_DISTANCE_COEFFICIENT), 1))
// contamination_strength = (strength-RAD_MINIMUM_CONTAMINATION) * RAD_CONTAMINATION_STR_COEFFICIENT
#define RAD_MINIMUM_CONTAMINATION 350 // How strong does a radiation wave have to be to contaminate objects
#define RAD_MINIMUM_CONTAMINATION 300 // How strong does a radiation wave have to be to contaminate objects
#define RAD_CONTAMINATION_CHANCE_COEFFICIENT 0.005 // Higher means higher strength scaling contamination chance
#define RAD_CONTAMINATION_STR_COEFFICIENT 0.3 // Higher means higher strength scaling contamination strength
#define RAD_CONTAMINATION_STR_COEFFICIENT 0.99 // Higher means higher strength scaling contamination strength
#define RAD_DISTANCE_COEFFICIENT 1 // Lower means further rad spread
#define RAD_HALF_LIFE 90 // The half-life of contaminated objects
#define RAD_HALF_LIFE 90 // The half-life of contaminated objects
+1
View File
@@ -20,6 +20,7 @@
#define CHANNEL_HIGHEST_AVAILABLE 1008 //CIT CHANGE - COMPENSATES FOR VORESOUND CHANNELS
#define MAX_INSTRUMENT_CHANNELS (128 * 6)
#define SOUND_MINIMUM_PRESSURE 10
#define FALLOFF_SOUNDS 1
+1 -1
View File
@@ -99,7 +99,7 @@
#define STATUS_EFFECT_PENIS_ENLARGEMENT /datum/status_effect/chem/penis_enlarger //More applied slowdown, just like the above.
#define STATUS_EFFECT_NO_COMBAT_MODE /datum/status_effect/no_combat_mode //Wont allow combat mode and will disable it
#define STATUS_EFFECT_MESMERIZE /datum/status_effect/no_combat_mode/mesmerize //Just reskinned no_combat_mode
#define STATUS_EFFECT_MESMERIZE /datum/status_effect/mesmerize //Just reskinned no_combat_mode
#define STATUS_EFFECT_ELECTROSTAFF /datum/status_effect/electrostaff //slows down victim
+47
View File
@@ -0,0 +1,47 @@
// storage_flags variable on /datum/component/storage
// Storage limits. These can be combined (and usually are combined).
/// Check max_items and contents.len when trying to insert
#define STORAGE_LIMIT_MAX_ITEMS (1<<0)
/// Check max_combined_w_class.
#define STORAGE_LIMIT_COMBINED_W_CLASS (1<<1)
/// Use the new volume system. Will automatically force rendering to use the new volume/baystation scaling UI so this is kind of incompatible with stuff like stack storage etc etc.
#define STORAGE_LIMIT_VOLUME (1<<2)
/// Use max_w_class
#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)
//ITEM INVENTORY WEIGHT, FOR w_class
/// Usually items smaller then a human hand, ex: Playing Cards, Lighter, Scalpel, Coins/Money
#define WEIGHT_CLASS_TINY 1
/// Pockets can hold small and tiny items, ex: Flashlight, Multitool, Grenades, GPS Device
#define WEIGHT_CLASS_SMALL 2
/// Standard backpacks can carry tiny, small & normal items, ex: Fire extinguisher, Stunbaton, Gas Mask, Metal Sheets
#define WEIGHT_CLASS_NORMAL 3
/// Items that can be weilded or equipped but not stored in a normal bag, ex: Defibrillator, Backpack, Space Suits
#define WEIGHT_CLASS_BULKY 4
/// Usually represents objects that require two hands to operate, ex: Shotgun, Two Handed Melee Weapons - Can not fit in Boh
#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
+10 -6
View File
@@ -50,19 +50,22 @@
#define INIT_ORDER_PROFILER 100
#define INIT_ORDER_FAIL2TOPIC 99
#define INIT_ORDER_TITLE 98
#define INIT_ORDER_GARBAGE 97
#define INIT_ORDER_DBCORE 95
#define INIT_ORDER_BLACKBOX 94
#define INIT_ORDER_SERVER_MAINT 93
#define INIT_ORDER_INPUT 85
#define INIT_ORDER_GARBAGE 95
#define INIT_ORDER_DBCORE 93
#define INIT_ORDER_BLACKBOX 92
#define INIT_ORDER_SERVER_MAINT 91
#define INIT_ORDER_INPUT 90
#define INIT_ORDER_SOUNDS 85
#define INIT_ORDER_VIS 80
#define INIT_ORDER_RESEARCH 75
#define INIT_ORDER_EVENTS 70
#define INIT_ORDER_JOBS 65
#define INIT_ORDER_QUIRKS 60
#define INIT_ORDER_TICKER 55
#define INIT_ORDER_INSTRUMENTS 53
#define INIT_ORDER_MAPPING 50
#define INIT_ORDER_NETWORKS 45
#define INIT_ORDER_HOLODECK 35
#define INIT_ORDER_ATOMS 30
#define INIT_ORDER_LANGUAGE 25
#define INIT_ORDER_MACHINES 20
@@ -88,18 +91,19 @@
// Subsystem fire priority, from lowest to highest priority
// If the subsystem isn't listed here it's either DEFAULT or PROCESS (if it's a processing subsystem child)
#define FIRE_PRIORITY_VORE 5
#define FIRE_PRIORITY_PING 10
#define FIRE_PRIORITY_IDLE_NPC 10
#define FIRE_PRIORITY_SERVER_MAINT 10
#define FIRE_PRIORITY_RESEARCH 10
#define FIRE_PRIORITY_VIS 10
#define FIRE_PRIORITY_VORE 10
#define FIRE_PRIORITY_GARBAGE 15
#define FIRE_PRIORITY_WET_FLOORS 20
#define FIRE_PRIORITY_AIR 20
#define FIRE_PRIORITY_PROCESS 25
#define FIRE_PRIORITY_THROWING 25
#define FIRE_PRIORITY_SPACEDRIFT 30
#define FIRE_PRIORITY_INSTRUMENTS 30
#define FIRE_PRIORITY_FIELDS 30
#define FIRE_PRIOTITY_SMOOTHING 35
#define FIRE_PRIORITY_NETWORKS 40
+8 -1
View File
@@ -147,6 +147,9 @@
#define TRAIT_NOPULSE "nopulse" // Your heart doesn't beat.
#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
#define TRAIT_KI_VAMPIRE "ki-vampire" //when someone with this trait rolls maximum damage on a punch and stuns the target, they regain some stamina and do clone damage
#define TRAIT_PASSTABLE "passtable"
// mobility flag traits
// IN THE FUTURE, IT WOULD BE NICE TO DO SOMETHING SIMILAR TO https://github.com/tgstation/tgstation/pull/48923/files (ofcourse not nearly the same because I have my.. thoughts on it)
@@ -173,6 +176,9 @@
//non-mob traits
#define TRAIT_PARALYSIS "paralysis" //Used for limb-based paralysis, where replacing the limb will fix it
#define VEHICLE_TRAIT "vehicle" // inherited from riding vehicles
#define INNATE_TRAIT "innate"
// item traits
#define TRAIT_NODROP "nodrop"
@@ -236,8 +242,8 @@
#define GHOSTROLE_TRAIT "ghostrole"
#define APHRO_TRAIT "aphro"
#define BLOODSUCKER_TRAIT "bloodsucker"
#define CLOTHING_TRAIT "clothing" //used for quirky carrygloves
#define SHOES_TRAIT "shoes" //inherited from your sweet kicks
#define GLOVE_TRAIT "glove" //inherited by your cool gloves
// unique trait sources, still defines
#define STATUE_MUTE "statue"
@@ -271,6 +277,7 @@
#define LOCKED_HELMET_TRAIT "locked-helmet"
#define NINJA_SUIT_TRAIT "ninja-suit"
#define ANTI_DROP_IMPLANT_TRAIT "anti-drop-implant"
#define MARTIAL_ARTIST_TRAIT "martial_artist"
#define SLEEPING_CARP_TRAIT "sleeping_carp"
#define RISING_BASS_TRAIT "rising_bass"
#define ABDUCTOR_ANTAGONIST "abductor-antagonist"
+13
View File
@@ -7,6 +7,19 @@
#define DM_ABSORB "Absorb"
#define DM_UNABSORB "Un-absorb"
#define DIGESTABLE (1<<0)
#define SHOW_VORE_PREFS (1<<1)
#define DEVOURABLE (1<<2)
#define FEEDING (1<<3)
#define NO_VORE (1<<4)
#define OPEN_PANEL (1<<5)
#define ABSORBED (1<<6)
#define VORE_INIT (1<<7)
#define VOREPREF_INIT (1<<8)
#define LICKABLE (1<<9)
#define MAX_VORE_FLAG (1<<10)-1 // change this whenever you add a vore flag, must be largest vore flag*2-1
#define isbelly(A) istype(A, /obj/belly)
#define QDEL_NULL_LIST(x) if(x) { for(var/y in x) { qdel(y) } ; x = null }
+102
View File
@@ -19,3 +19,105 @@
#define VV_RESTORE_DEFAULT "Restore to Default"
#define VV_MARKED_DATUM "Marked Datum"
#define VV_BITFIELD "Bitfield"
#define VV_TEXT_LOCATE "Custom Reference Locate"
#define VV_PROCCALL_RETVAL "Return Value of Proccall"
#define VV_MSG_MARKED "<br><font size='1' color='red'><b>Marked Object</b></font>"
#define VV_MSG_EDITED "<br><font size='1' color='red'><b>Var Edited</b></font>"
#define VV_MSG_DELETED "<br><font size='1' color='red'><b>Deleted</b></font>"
#define VV_NORMAL_LIST_NO_EXPAND_THRESHOLD 50
#define VV_SPECIAL_LIST_NO_EXPAND_THRESHOLD 150
//#define IS_VALID_ASSOC_KEY(V) (istext(V) || ispath(V) || isdatum(V) || islist(V))
#define IS_VALID_ASSOC_KEY(V) (!isnum(V)) //hhmmm..
//General helpers
#define VV_HREF_TARGET_INTERNAL(target, href_key) "?_src_=vars;[HrefToken()];[href_key]=TRUE;[VV_HK_TARGET]=[REF(target)]"
#define VV_HREF_TARGETREF_INTERNAL(targetref, href_key) "?_src_=vars;[HrefToken()];[href_key]=TRUE;[VV_HK_TARGET]=[targetref]"
#define VV_HREF_TARGET(target, href_key, text) "<a href='[VV_HREF_TARGET_INTERNAL(target, href_key)]'>[text]</a>"
#define VV_HREF_TARGETREF(targetref, href_key, text) "<a href='[VV_HREF_TARGETREF_INTERNAL(targetref, href_key)]'>[text]</a>"
#define VV_HREF_TARGET_1V(target, href_key, text, varname) "<a href='[VV_HREF_TARGET_INTERNAL(target, href_key)];[VV_HK_VARNAME]=[varname]'>[text]</a>" //for stuff like basic varedits, one variable
#define VV_HREF_TARGETREF_1V(targetref, href_key, text, varname) "<a href='[VV_HREF_TARGETREF_INTERNAL(targetref, href_key)];[VV_HK_VARNAME]=[varname]'>[text]</a>"
#define GET_VV_TARGET locate(href_list[VV_HK_TARGET])
#define GET_VV_VAR_TARGET href_list[VV_HK_VARNAME]
//Helper for getting something to vv_do_topic in general
#define VV_TOPIC_LINK(datum, href_key, text) "<a href='?_src_=vars;[HrefToken()];[href_key]=TRUE;target=[REF(datum)]'>text</a>"
//Helpers for vv_get_dropdown()
#define VV_DROPDOWN_OPTION(href_key, name) . += "<option value='?_src_=vars;[HrefToken()];[href_key]=TRUE;target=[REF(src)]'>[name]</option>"
// VV HREF KEYS
#define VV_HK_TARGET "target"
#define VV_HK_VARNAME "targetvar" //name or index of var for 1 variable targetting hrefs.
// vv_do_list() keys
#define VV_HK_LIST_ADD "listadd"
#define VV_HK_LIST_EDIT "listedit"
#define VV_HK_LIST_CHANGE "listchange"
#define VV_HK_LIST_REMOVE "listremove"
#define VV_HK_LIST_ERASE_NULLS "listnulls"
#define VV_HK_LIST_ERASE_DUPES "listdupes"
#define VV_HK_LIST_SHUFFLE "listshuffle"
#define VV_HK_LIST_SET_LENGTH "listlen"
// vv_do_basic() keys
#define VV_HK_BASIC_EDIT "datumedit"
#define VV_HK_BASIC_CHANGE "datumchange"
#define VV_HK_BASIC_MASSEDIT "massedit"
// /datum
#define VV_HK_DELETE "delete"
#define VV_HK_EXPOSE "expose"
#define VV_HK_CALLPROC "proc_call"
#define VV_HK_MARK "mark"
#define VV_HK_MODIFY_TRAITS "modtraits"
// /atom
#define VV_HK_MODIFY_TRANSFORM "atom_transform"
#define VV_HK_ADD_REAGENT "addreagent"
#define VV_HK_TRIGGER_EMP "empulse"
#define VV_HK_TRIGGER_EXPLOSION "explode"
#define VV_HK_AUTO_RENAME "auto_rename"
// /obj
#define VV_HK_OSAY "osay"
#define VV_HK_MASS_DEL_TYPE "mass_delete_type"
#define VV_HK_ARMOR_MOD "mod_obj_armor"
// /mob
#define VV_HK_GIB "gib"
#define VV_HK_GIVE_SPELL "give_spell"
#define VV_HK_REMOVE_SPELL "remove_spell"
#define VV_HK_GIVE_DISEASE "give_disease"
#define VV_HK_GODMODE "godmode"
#define VV_HK_DROP_ALL "dropall"
#define VV_HK_REGEN_ICONS "regen_icons"
#define VV_HK_PLAYER_PANEL "player_panel"
#define VV_HK_BUILDMODE "buildmode"
#define VV_HK_DIRECT_CONTROL "direct_control"
#define VV_HK_OFFER_GHOSTS "offer_ghosts"
// /mob/living/carbon
#define VV_HK_MAKE_AI "aiify"
#define VV_HK_MODIFY_BODYPART "mod_bodypart"
#define VV_HK_MODIFY_ORGANS "organs_modify"
#define VV_HK_HALLUCINATION "force_hallucinate"
#define VV_HK_MARTIAL_ART "give_martial_art"
#define VV_HK_GIVE_TRAUMA "give_trauma"
#define VV_HK_CURE_TRAUMA "cure_trauma"
// /mob/living/carbon/human
#define VV_HK_COPY_OUTFIT "copy_outfit"
#define VV_HK_MOD_QUIRKS "quirkmod"
#define VV_HK_MAKE_MONKEY "human_monkify"
#define VV_HK_MAKE_CYBORG "human_cyborgify"
#define VV_HK_MAKE_SLIME "human_slimeify"
#define VV_HK_MAKE_ALIEN "human_alienify"
#define VV_HK_SET_SPECIES "setspecies"
#define VV_HK_PURRBATION "purrbation"
// misc
#define VV_HK_SPACEVINE_PURGE "spacevine_purge"
+1 -1
View File
@@ -112,7 +112,7 @@ GLOBAL_VAR_INIT(miscreants_allowed, FALSE)
set desc = "Toggles seeing LocalOutOfCharacter chat"
prefs.chat_toggles ^= CHAT_LOOC
prefs.save_preferences()
src << "You will [(prefs.chat_toggles & CHAT_LOOC) ? "now" : "no longer"] see messages on the LOOC channel."
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()
+21
View File
@@ -550,6 +550,27 @@
for(var/thing in flat_list)
.[thing] = TRUE
/proc/deep_list2params(list/deep_list)
var/list/L = list()
for(var/i in deep_list)
var/key = i
if(isnum(key))
L += "[key]"
continue
if(islist(key))
key = deep_list2params(key)
else if(!istext(key))
key = "[REF(key)]"
L += "[key]"
var/value = deep_list[key]
if(!isnull(value))
if(islist(value))
value = deep_list2params(value)
else if(!(istext(key) || isnum(key)))
value = "[REF(value)]"
L["[key]"] = "[value]"
return list2params(L)
//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)
+4 -1
View File
@@ -116,4 +116,7 @@ GLOBAL_VAR_INIT(cmp_field, "name")
if(a_sign != b_sign)
return a_sign - b_sign
else
return sorttext(b_name, a_name)
return sorttext(b_name, a_name)
/proc/cmp_item_block_priority_asc(obj/item/A, obj/item/B)
return A.block_priority - B.block_priority
+3 -4
View File
@@ -183,7 +183,7 @@
return
// Better recursive loop, technically sort of not actually recursive cause that shit is retarded, enjoy.
// Better recursive loop, technically sort of not actually recursive cause that shit is stupid, enjoy.
//No need for a recursive limit either
/proc/recursive_mob_check(atom/O,client_check=1,sight_check=1,include_radio=1)
@@ -425,8 +425,7 @@
candidates -= M
/proc/pollGhostCandidates(Question, jobbanType, datum/game_mode/gametypeCheck, be_special_flag = 0, poll_time = 300, ignore_category = null, flashwindow = TRUE)
var/datum/element/ghost_role_eligibility/eligibility = SSdcs.GetElement(list(/datum/element/ghost_role_eligibility))
var/list/candidates = eligibility.get_all_ghost_role_eligible()
var/list/candidates = get_all_ghost_role_eligible()
return pollCandidates(Question, jobbanType, gametypeCheck, be_special_flag, poll_time, ignore_category, flashwindow, candidates)
/proc/pollCandidates(Question, jobbanType, datum/game_mode/gametypeCheck, be_special_flag = 0, poll_time = 300, ignore_category = null, flashwindow = TRUE, list/group = null)
@@ -581,4 +580,4 @@
var/area/A = C.area
if(GLOB.typecache_powerfailure_safe_areas[A.type])
continue
C.energy_fail(rand(duration_min,duration_max))
C.energy_fail(rand(duration_min,duration_max))
+36 -15
View File
@@ -184,6 +184,7 @@
"cock_length" = COCK_SIZE_DEF,
"cock_diameter_ratio" = COCK_DIAMETER_RATIO_DEF,
"cock_color" = pick("FFFFFF","7F7F7F", "7FFF7F", "7F7FFF", "FF7F7F", "7FFFFF", "FF7FFF", "FFFF7F"),
"cock_taur" = FALSE,
"has_balls" = FALSE,
"balls_color" = pick("FFFFFF","7F7F7F", "7FFF7F", "7F7FFF", "FF7F7F", "7FFFFF", "FF7FFF", "FFFF7F"),
"balls_size" = BALLS_SIZE_DEF,
@@ -208,7 +209,8 @@
"ipc_antenna" = "None",
"flavor_text" = "",
"meat_type" = "Mammalian",
"body_model" = MALE
"body_model" = MALE,
"body_size" = RESIZE_DEFAULT_SIZE
))
/proc/random_hair_style(gender)
@@ -260,24 +262,30 @@
if(!findname(.))
break
/proc/random_skin_tone()
return pick(GLOB.skin_tones)
#define SKINTONE2HEX(skin_tone) GLOB.skin_tones[skin_tone] || skin_tone
/proc/random_skin_tone()
return pick(GLOB.skin_tones - GLOB.nonstandard_skin_tones)
//ordered by amount of tan. Keep the nonstandard skin tones last.
GLOBAL_LIST_INIT(skin_tones, list(
"albino",
"caucasian1",
"caucasian2",
"caucasian3",
"latino",
"mediterranean",
"asian1",
"asian2",
"arab",
"indian",
"african1",
"african2"
"albino" = "#fff4e6",
"caucasian1" = "#ffe0d1",
"caucasian2" = "#fcccb3",
"caucasian3" = "#e8b59b",
"latino" = "#d9ae96",
"mediterranean" = "#c79b8b",
"asian1" = "#ffdeb3",
"asian2" = "#e3ba84",
"arab" = "#c4915e",
"indian" = "#b87840",
"african1" = "#754523",
"african2" = "#471c18",
"orange" = "#ffc905" //Spray tan overdose.
))
GLOBAL_LIST_INIT(nonstandard_skin_tones, list("orange"))
GLOBAL_LIST_EMPTY(species_list)
/proc/age2agedescription(age)
@@ -579,3 +587,16 @@ GLOBAL_LIST_EMPTY(species_list)
chosen = pick(mob_spawn_meancritters)
var/mob/living/simple_animal/C = new chosen(spawn_location)
return C
/proc/passtable_on(target, source)
var/mob/living/L = target
if(!HAS_TRAIT(L, TRAIT_PASSTABLE) && L.pass_flags & PASSTABLE)
ADD_TRAIT(L, TRAIT_PASSTABLE, INNATE_TRAIT)
ADD_TRAIT(L, TRAIT_PASSTABLE, source)
L.pass_flags |= PASSTABLE
/proc/passtable_off(target, source)
var/mob/living/L = target
REMOVE_TRAIT(L, TRAIT_PASSTABLE, source)
if(!HAS_TRAIT(L, TRAIT_PASSTABLE))
L.pass_flags &= ~PASSTABLE
+18 -8
View File
@@ -25,8 +25,22 @@
/proc/radiation_pulse(atom/source, intensity, range_modifier, log=FALSE, can_contaminate=TRUE)
if(!SSradiation.can_fire)
return
for(var/dir in GLOB.cardinals)
new /datum/radiation_wave(source, dir, intensity, range_modifier, can_contaminate)
var/area/A = get_area(source)
var/atom/nested_loc = source.loc
var/spawn_waves = TRUE
while(nested_loc != A)
if(nested_loc.rad_flags & RAD_PROTECT_CONTENTS)
spawn_waves = FALSE
break
nested_loc = nested_loc.loc
if(spawn_waves)
for(var/dir in GLOB.cardinals)
new /datum/radiation_wave(source, dir, intensity, range_modifier, can_contaminate)
var/static/last_huge_pulse = 0
if(intensity > 3000 && world.time > last_huge_pulse + 200)
last_huge_pulse = world.time
log = TRUE
var/list/things = get_rad_contents(source) //copypasta because I don't want to put special code in waves to handle their origin
for(var/k in 1 to things.len)
@@ -35,11 +49,7 @@
continue
thing.rad_act(intensity)
var/static/last_huge_pulse = 0
if(intensity > 3000 && world.time > last_huge_pulse + 200)
last_huge_pulse = world.time
log = TRUE
if(log)
var/turf/_source_T = isturf(source) ? source : get_turf(source)
log_game("Radiation pulse with intensity: [intensity] and range modifier: [range_modifier] in [loc_name(_source_T)] ")
var/turf/_source_T = get_turf(source)
log_game("Radiation pulse with intensity: [intensity] and range modifier: [range_modifier] in [loc_name(_source_T)][spawn_waves ? "" : " (contained by [nested_loc.name])"]")
return TRUE
+3 -1
View File
@@ -320,8 +320,10 @@
parts += "[FOURSPACES]<i>Nobody died this shift!</i>"
if(istype(SSticker.mode, /datum/game_mode/dynamic))
var/datum/game_mode/dynamic/mode = SSticker.mode
mode.update_playercounts()
parts += "[FOURSPACES]Final threat level: [mode.threat_level]"
parts += "[FOURSPACES]Final threat: [mode.threat]"
parts += "[FOURSPACES]Average threat: [mode.threat_average]"
parts += "[FOURSPACES]Executed rules:"
for(var/datum/dynamic_ruleset/rule in mode.executed_rules)
parts += "[FOURSPACES][FOURSPACES][rule.ruletype] - <b>[rule.name]</b>: -[rule.cost + rule.scaled_times * rule.scaling_cost] threat"
@@ -511,7 +513,7 @@
if(owner && GLOB.common_report && SSticker.current_state == GAME_STATE_FINISHED)
SSticker.show_roundend_report(owner.client, FALSE)
/datum/action/report/IsAvailable()
/datum/action/report/IsAvailable(silent = FALSE)
return 1
/datum/action/report/Topic(href,href_list)
+2 -1
View File
@@ -25,7 +25,8 @@ GLOBAL_VAR_INIT(midnight_rollovers, 0)
GLOBAL_VAR_INIT(rollovercheck_last_timeofday, 0)
/proc/update_midnight_rollover()
if (world.timeofday < GLOB.rollovercheck_last_timeofday) //TIME IS GOING BACKWARDS!
return GLOB.midnight_rollovers++
GLOB.midnight_rollovers++
GLOB.rollovercheck_last_timeofday = world.timeofday
return GLOB.midnight_rollovers
/proc/weekdayofthemonth()
+60
View File
@@ -0,0 +1,60 @@
/proc/make_types_fancy(var/list/types)
if (ispath(types))
types = list(types)
. = list()
for(var/type in types)
var/typename = "[type]"
var/static/list/TYPES_SHORTCUTS = list(
/obj/effect/decal/cleanable = "CLEANABLE",
/obj/item/radio/headset = "HEADSET",
/obj/item/clothing/head/helmet/space = "SPESSHELMET",
/obj/item/book/manual = "MANUAL",
/obj/item/reagent_containers/food/drinks = "DRINK", //longest paths comes first
/obj/item/reagent_containers/food = "FOOD",
/obj/item/reagent_containers = "REAGENT_CONTAINERS",
/obj/machinery/atmospherics = "ATMOS_MECH",
/obj/machinery/portable_atmospherics = "PORT_ATMOS",
/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack = "MECHA_MISSILE_RACK",
/obj/item/mecha_parts/mecha_equipment = "MECHA_EQUIP",
/obj/item/organ = "ORGAN",
/obj/item = "ITEM",
/obj/machinery = "MACHINERY",
/obj/effect = "EFFECT",
/obj = "O",
/datum = "D",
/turf/open = "OPEN",
/turf/closed = "CLOSED",
/turf = "T",
/mob/living/carbon = "CARBON",
/mob/living/simple_animal = "SIMPLE",
/mob/living = "LIVING",
/mob = "M"
)
for (var/tn in TYPES_SHORTCUTS)
if (copytext(typename,1, length("[tn]/")+1)=="[tn]/" /*findtextEx(typename,"[tn]/",1,2)*/ )
typename = TYPES_SHORTCUTS[tn]+copytext(typename,length("[tn]/"))
break
.[typename] = type
/proc/get_fancy_list_of_atom_types()
var/static/list/pre_generated_list
if (!pre_generated_list) //init
pre_generated_list = make_types_fancy(typesof(/atom))
return pre_generated_list
/proc/get_fancy_list_of_datum_types()
var/static/list/pre_generated_list
if (!pre_generated_list) //init
pre_generated_list = make_types_fancy(sortList(typesof(/datum) - typesof(/atom)))
return pre_generated_list
/proc/filter_fancy_list(list/L, filter as text)
var/list/matches = new
for(var/key in L)
var/value = L[key]
if(findtext("[key]", filter) || findtext("[value]", filter))
matches[key] = value
return matches
+13 -2
View File
@@ -8,10 +8,8 @@
/proc/invertHTML(HTMLstring)
if(!istext(HTMLstring))
CRASH("Given non-text argument!")
return
else if(length(HTMLstring) != 7)
CRASH("Given non-HTML argument!")
return
else if(length_char(HTMLstring) != 7)
CRASH("Given non-hex symbols in argument!")
var/textr = copytext(HTMLstring, 2, 4)
@@ -1565,3 +1563,16 @@ GLOBAL_DATUM_INIT(dview_mob, /mob/dview, new)
if(channels_to_use.len)
world.TgsChatBroadcast()
//Checks to see if either the victim has a garlic necklace or garlic in their blood
/proc/blood_sucking_checks(var/mob/living/carbon/target, check_neck, check_blood)
//Bypass this if the target isnt carbon.
if(!iscarbon(target))
return TRUE
if(check_neck)
if(istype(target.get_item_by_slot(SLOT_NECK), /obj/item/clothing/neck/garlic_necklace))
return FALSE
if(check_blood)
if(target.reagents.has_reagent(/datum/reagent/consumable/garlic))
return FALSE
return TRUE
+16
View File
@@ -249,5 +249,21 @@ GLOBAL_LIST_INIT(bitfields, list(
"COMBAT_FLAG_SOFT_STAMCRIT" = COMBAT_FLAG_SOFT_STAMCRIT,
"COMBAT_FLAG_INTENTIONALLY_RESTING" = COMBAT_FLAG_INTENTIONALLY_RESTING,
"COMBAT_FLAG_RESISTING_REST" = COMBAT_FLAG_RESISTING_REST
),
"shield_flags" = list(
"SHIELD_TRANSPARENT" = SHIELD_TRANSPARENT,
"SHIELD_CAN_BASH" = SHIELD_CAN_BASH,
"SHIELD_BASH_WALL_KNOCKDOWN" = SHIELD_BASH_WALL_KNOCKDOWN,
"SHIELD_BASH_ALWAYS_KNOCKDOWN" = SHIELD_BASH_ALWAYS_KNOCKDOWN,
"SHIELD_BASH_WALL_DISARM" = SHIELD_BASH_WALL_DISARM,
"SHIELD_BASH_ALWAYS_DISARM" = SHIELD_BASH_ALWAYS_DISARM,
"SHIELD_BASH_GROUND_SLAM" = SHIELD_BASH_GROUND_SLAM,
"SHIELD_BASH_GROUND_SLAM_DISARM" = SHIELD_BASH_GROUND_SLAM_DISARM
),
"storage_flags" = list(
"STORAGE_LIMIT_MAX_ITEMS" = STORAGE_LIMIT_MAX_ITEMS,
"STORAGE_LIMIT_MAX_W_CLASS" = STORAGE_LIMIT_MAX_W_CLASS,
"STORAGE_LIMIT_COMBINED_W_CLASS" = STORAGE_LIMIT_COMBINED_W_CLASS,
"STORAGE_LIMIT_VOLUME" = STORAGE_LIMIT_VOLUME
)
))
+3 -4
View File
@@ -34,7 +34,7 @@ GLOBAL_LIST_INIT(maintenance_loot, list(
/obj/item/clothing/head/that = 1,
/obj/item/clothing/head/ushanka = 1,
/obj/item/clothing/head/welding = 1,
/obj/item/clothing/mask/gas = 15,
/obj/effect/spawner/lootdrop/breathing_masks = 15,
/obj/item/clothing/suit/hazardvest = 1,
/obj/item/clothing/under/misc/vice_officer = 1,
/obj/item/clothing/suit/hooded/flashsuit = 2,
@@ -86,9 +86,8 @@ GLOBAL_LIST_INIT(maintenance_loot, list(
/obj/item/screwdriver = 3,
/obj/item/tank/internals/emergency_oxygen = 2,
/obj/item/vending_refill/cola = 1,
/obj/item/weldingtool = 3,
/obj/item/wirecutters = 1,
/obj/item/wrench = 4,
/obj/effect/spawner/lootdrop/welder_tools = 3,
/obj/effect/spawner/lootdrop/low_tools = 5,
/obj/item/relic = 3,
/obj/item/weaponcrafting/receiver = 2,
/obj/item/clothing/head/cone = 2,
+1 -1
View File
@@ -14,7 +14,7 @@ GLOBAL_VAR_INIT(fileaccess_timer, 0)
GLOBAL_DATUM_INIT(data_core, /datum/datacore, new)
GLOBAL_VAR_INIT(CELLRATE, 0.002) // conversion ratio between a watt-tick and kilojoule
GLOBAL_VAR_INIT(CELLRATE, 0.002) // conversion ratio between a watt-tick and kilojoule, dimensionless, kilojoules/watt-tick
GLOBAL_VAR_INIT(CHARGELEVEL, 0.001) // Cap for how fast cells charge, as a percentage-per-tick (.001 means cellcharge is capped to 1% per second)
GLOBAL_LIST_EMPTY(powernets)
+1
View File
@@ -49,6 +49,7 @@
message_admins("[ADMIN_LOOKUPFLW(src)] might be running a modified client! (failed can_see on AI click of [A] (Turf Loc: [ADMIN_VERBOSEJMP(pixel_turf)]))")
var/message = "[key_name(src)] might be running a modified client! (failed can_see on AI click of [A] (Turf Loc: [AREACOORD(pixel_turf)]))"
log_admin(message)
to_chat(src, "<span class='warning'>You're experiencing a bug. Reconnect immediately to fix it. Admins have been notified.</span>")
if(REALTIMEOFDAY >= chnotify + 9000)
chnotify = REALTIMEOFDAY
send2irc_adminless_only("NOCHEAT", message)
+1 -1
View File
@@ -334,7 +334,7 @@ or shoot a gun to move around via Newton's 3rd Law of Motion."
return
var/datum/antagonist/cult/antag = mob_viewer.mind.has_antag_datum(/datum/antagonist/cult,TRUE)
if(!antag)
if(!antag?.cult_team)
return
var/datum/objective/sacrifice/sac_objective = locate() in antag.cult_team.objectives
+1 -1
View File
@@ -367,7 +367,7 @@
blood_display.hud = src
infodisplay += blood_display
vamprank_display = new /obj/screen/bloodsucker/rank_counter // Vampire Rank
vamprank_display = new /obj/screen/bloodsucker/rank_counter // Bloodsucker Rank
vamprank_display.hud = src
infodisplay += vamprank_display
-38
View File
@@ -210,20 +210,6 @@
user.swap_hand(held_index)
return TRUE
/obj/screen/close
name = "close"
layer = ABOVE_HUD_LAYER
plane = ABOVE_HUD_PLANE
icon_state = "backpack_close"
/obj/screen/close/Initialize(mapload, new_master)
. = ..()
master = new_master
/obj/screen/close/Click()
var/datum/component/storage/S = master
S.hide_from(usr)
return TRUE
/obj/screen/drop
name = "drop"
@@ -406,30 +392,6 @@
else
icon_state = "act_rest0"
/obj/screen/storage
name = "storage"
icon_state = "block"
screen_loc = "7,7 to 10,8"
layer = HUD_LAYER
plane = HUD_PLANE
/obj/screen/storage/Initialize(mapload, new_master)
. = ..()
master = new_master
/obj/screen/storage/Click(location, control, params)
if(world.time <= usr.next_move)
return TRUE
if(usr.incapacitated())
return TRUE
if (ismecha(usr.loc)) // stops inventory actions in a mech
return TRUE
if(master)
var/obj/item/I = usr.get_active_held_item()
if(I)
master.attackby(null, I, usr, params)
return TRUE
/obj/screen/throw_catch
name = "throw/catch"
icon = 'icons/mob/screen_midnight.dmi'
+113
View File
@@ -0,0 +1,113 @@
/obj/screen/storage
name = "storage"
var/insertion_click = FALSE
/obj/screen/storage/Initialize(mapload, new_master)
. = ..()
master = new_master
/obj/screen/storage/Click(location, control, params)
if(!insertion_click)
return ..()
if(world.time <= usr.next_move)
return TRUE
if(usr.incapacitated())
return TRUE
if (ismecha(usr.loc)) // stops inventory actions in a mech
return TRUE
if(master)
var/obj/item/I = usr.get_active_held_item()
if(I)
master.attackby(null, I, usr, params)
return TRUE
/obj/screen/storage/boxes
name = "storage"
icon_state = "block"
screen_loc = "7,7 to 10,8"
layer = HUD_LAYER
plane = HUD_PLANE
insertion_click = TRUE
/obj/screen/storage/close
name = "close"
layer = ABOVE_HUD_LAYER
plane = ABOVE_HUD_PLANE
icon_state = "backpack_close"
/obj/screen/storage/close/Click()
var/datum/component/storage/S = master
S.close(usr)
return TRUE
/obj/screen/storage/left
icon_state = "storage_start"
insertion_click = TRUE
/obj/screen/storage/right
icon_state = "storage_end"
insertion_click = TRUE
/obj/screen/storage/continuous
icon_state = "storage_continue"
insertion_click = TRUE
/obj/screen/storage/volumetric_box
icon_state = "stored_continue"
var/obj/item/our_item
/obj/screen/storage/volumetric_box/Initialize(mapload, new_master, our_item)
src.our_item = our_item
return ..()
/obj/screen/storage/volumetric_box/Destroy()
our_item = null
return ..()
/obj/screen/storage/volumetric_box/Click(location, control, params)
return our_item.Click(location, control, params)
/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/center
icon_state = "stored_continue"
var/obj/screen/storage/stored_left/left
var/obj/screen/storage/stored_right/right
var/pixel_size
/obj/screen/storage/volumetric_box/center/Initialize(mapload, new_master, our_item)
left = new(null, src, our_item)
right = new(null, src, our_item)
return ..()
/obj/screen/storage/volumetric_box/center/Destroy()
QDEL_NULL(left)
QDEL_NULL(right)
return ..()
/obj/screen/storage/volumetric_box/center/proc/on_screen_objects()
return list(src, left, right)
/**
* Sets the size of this box screen object and regenerates its left/right borders. This includes the actual border's size!
*/
/obj/screen/storage/volumetric_box/center/proc/set_pixel_size(pixels)
if(pixel_size == pixels)
return
pixel_size = pixels
cut_overlays()
//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)
/obj/screen/storage/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
icon_state = "stored_end"
appearance_flags = APPEARANCE_UI | KEEP_APART | RESET_TRANSFORM
+2 -2
View File
@@ -125,13 +125,13 @@
if(!CHECK_MOBILITY(user, MOBILITY_STAND))
totitemdamage *= 0.5
//CIT CHANGES END HERE
if(user != src && check_shields(I, totitemdamage, "the [I.name]", MELEE_ATTACK, I.armour_penetration))
if((user != src) && run_block(I, totitemdamage, "the [I.name]", ATTACK_TYPE_MELEE, I.armour_penetration, user) & BLOCK_SUCCESS)
return FALSE
send_item_attack_message(I, user)
I.do_stagger_action(src, user)
if(I.force)
apply_damage(totitemdamage, I.damtype) //CIT CHANGE - replaces I.force with totitemdamage
if(I.damtype == BRUTE && !HAS_TRAIT(src, TRAIT_NOMARROW))
if(I.damtype == BRUTE)
if(prob(33))
I.add_mob_blood(src)
var/turf/location = get_turf(src)
@@ -368,12 +368,16 @@
var/list/datum/dynamic_storyteller/runnable_storytellers = new
var/list/probabilities = Get(/datum/config_entry/keyed_list/storyteller_weight)
var/list/repeated_mode_adjust = Get(/datum/config_entry/number_list/repeated_mode_adjust)
var/list/min_player_counts = Get(/datum/config_entry/keyed_list/storyteller_min_players)
for(var/T in storyteller_cache)
var/datum/dynamic_storyteller/S = T
var/config_tag = initial(S.config_tag)
var/probability = (config_tag in probabilities) ? probabilities[config_tag] : initial(S.weight)
var/min_players = (config_tag in min_player_counts) ? min_player_counts[config_tag] : initial(S.min_players)
if(probability <= 0)
continue
if(length(GLOB.player_list) < min_players)
continue
if(SSpersistence.saved_storytellers.len == repeated_mode_adjust.len)
var/name = initial(S.name)
var/recent_round = min(SSpersistence.saved_storytellers.Find(name),3)
@@ -92,3 +92,7 @@
/datum/config_entry/keyed_list/storyteller_weight
key_mode = KEY_MODE_TEXT
value_mode = VALUE_MODE_NUM
/datum/config_entry/keyed_list/storyteller_min_players
key_mode = KEY_MODE_TEXT
value_mode = VALUE_MODE_NUM
@@ -449,3 +449,31 @@
key_mode = KEY_MODE_TEXT
value_mode = VALUE_MODE_FLAG
config_entry_value = list(GEN_VISIBLE_NO_CLOTHES, GEN_VISIBLE_NO_UNDIES, GEN_VISIBLE_NEVER) //refer to cit_helpers for all toggles.
//Body size configs, the feature will be disabled if both min and max have the same value.
/datum/config_entry/number/body_size_min
config_entry_value = RESIZE_DEFAULT_SIZE
min_val = 0.1 //to avoid issues with zeros and negative values.
max_val = RESIZE_DEFAULT_SIZE
/datum/config_entry/number/body_size_max
config_entry_value = RESIZE_DEFAULT_SIZE
min_val = RESIZE_DEFAULT_SIZE
//Pun-Pun movement slowdown given to characters with a body size smaller than this value,
//to compensate for their smaller hitbox.
//To disable, just make sure the value is lower than 'body_size_min'
/datum/config_entry/number/threshold_body_size_slowdown
config_entry_value = RESIZE_DEFAULT_SIZE * 0.85
min_val = 0
max_val = RESIZE_DEFAULT_SIZE
//multiplicative slowdown multiplier. See 'dna.update_body_size' for the operation.
//doesn't apply to floating or crawling mobs
/datum/config_entry/number/body_size_slowdown_multiplier
config_entry_value = 0.25
min_val = 0.1 //To encourage folks to disable the slowdown through the above config instead.
//Allows players to set a hexadecimal color of their choice as skin tone, on top of the standard ones.
/datum/config_entry/number/allow_custom_skintones
config_entry_value = 1
-2
View File
@@ -27,13 +27,11 @@
var/hook_path = text2path("/hook/[hook]")
if(!hook_path)
CRASH("Invalid hook '/hook/[hook]' called.")
return 0
var/caller = new hook_path
var/status = 1
for(var/P in typesof("[hook_path]/proc"))
if(!call(caller, P)(arglist(args)))
CRASH("Hook '[P]' failed or runtimed.")
status = 0
return status
+8 -2
View File
@@ -38,11 +38,17 @@ PROCESSING_SUBSYSTEM_DEF(dcs)
if(istext(key))
value = arguments[key]
if(!(istext(key) || isnum(key)))
key = REF(key)
if(islist(key)) // CITADEL EDIT
key = deep_list2params(key)
else
key = REF(key)
key = "[key]" // Key is stringified so numbers dont break things
if(!isnull(value))
if(!(istext(value) || isnum(value)))
value = REF(value)
if(islist(value)) // CITADEL EDIT
value = deep_list2params(value)
else
value = REF(value)
named_arguments["[key]"] = value
else
fullid += "[key]"
+8 -5
View File
@@ -21,9 +21,6 @@ SUBSYSTEM_DEF(fail2topic)
DropFirewallRule() // Clear the old bans if any still remain
if (world.system_type == UNIX && enabled)
enabled = FALSE
subsystem_log("DISABLED - UNIX systems are not supported.")
if(!enabled)
flags |= SS_NO_FIRE
can_fire = FALSE
@@ -90,7 +87,10 @@ SUBSYSTEM_DEF(fail2topic)
fail_counts -= ip
rate_limiting -= ip
. = shell("netsh advfirewall firewall add rule name=\"[rule_name]\" dir=in interface=any action=block remoteip=[ip]")
if (world.system_type == UNIX)
. = shell("iptables -A [rule_name] -s [ip] -j DROP")
else
. = shell("netsh advfirewall firewall add rule name=\"[rule_name]\" dir=in interface=any action=block remoteip=[ip]")
if (.)
subsystem_log("Failed to ban [ip]. Exit code: [.].")
@@ -105,7 +105,10 @@ SUBSYSTEM_DEF(fail2topic)
active_bans = list()
. = shell("netsh advfirewall firewall delete rule name=\"[rule_name]\"")
if (world.system_type == UNIX)
. = shell("iptables -F [rule_name]") //Let's just assume that folks running linux are smart enough to have a dedicated chain configured for this.
else
. = shell("netsh advfirewall firewall delete rule name=\"[rule_name]\"")
if (.)
subsystem_log("Failed to drop firewall rule. Exit code: [.].")
+56
View File
@@ -0,0 +1,56 @@
SUBSYSTEM_DEF(holodeck)
name = "Holodeck"
init_order = INIT_ORDER_HOLODECK
flags = SS_NO_FIRE
var/list/program_cache = list() //list of safe holodeck programs.
var/list/emag_program_cache = list() //like above, but dangerous.
var/list/offline_programs = list() //default when offline.
var/list/target_holodeck_area = list()
var/list/rejected_areas = list()
/datum/controller/subsystem/holodeck/Initialize()
. = ..()
//generates the list of available holodeck programs.
for(var/path in subtypesof(/datum/holodeck_cache))
new path
for(var/path in typesof(/obj/machinery/computer/holodeck)) //The istances will be handled by SSatoms.
var/obj/machinery/computer/holodeck/H = path
offline_programs[path] = pop(get_areas(initial(H.offline_program)), FALSE)
target_holodeck_area[path] = pop(get_areas(initial(H.holodeck_type)), FALSE)
/*
* The sole scope of this datum is to generate lists of holodeck programs caches per holodeck computer type.
*/
/datum/holodeck_cache
var/area/holodeck/master_type //the /area/holodeck typepath we'll be using for typesof loop.
var/skip_types //Areas that won't be added to the global list category.
var/list/compatible_holodeck_comps //list of typepaths of holodeck computers that can access this category.
/datum/holodeck_cache/New()
if(!master_type || !compatible_holodeck_comps)
return
var/list/to_add = typesof(master_type) - skip_types
var/list/programs
var/list/emag_programs
for(var/typekey in to_add)
var/area/holodeck/A = GLOB.areas_by_type[typekey]
if(!A || !A.contents.len)
LAZYOR(SSholodeck.rejected_areas[typekey], compatible_holodeck_comps)
continue
var/list/info_this = list("name" = A.name, "type" = A.type)
if(A.restricted)
LAZYADD(emag_programs, list(info_this))
else
LAZYADD(programs, list(info_this))
for(var/comp in compatible_holodeck_comps)
if(programs)
LAZYADD(SSholodeck.program_cache[comp], programs)
if(emag_programs)
LAZYADD(SSholodeck.emag_program_cache[comp], emag_programs)
/datum/holodeck_cache/standard
master_type = /area/holodeck/rec_center
skip_types = /area/holodeck/rec_center
compatible_holodeck_comps = list(/obj/machinery/computer/holodeck)
+5 -1
View File
@@ -14,6 +14,7 @@ SUBSYSTEM_DEF(persistence)
var/list/saved_modes = list(1,2,3)
var/list/saved_dynamic_rules = list(list(),list(),list())
var/list/saved_storytellers = list("foo","bar","baz")
var/list/average_dynamic_threat = 50
var/list/saved_maps
var/list/saved_trophies = list()
var/list/spawned_objects = list()
@@ -191,6 +192,8 @@ SUBSYSTEM_DEF(persistence)
if(!json)
return
saved_storytellers = json["data"]
if(saved_storytellers.len > 3)
average_dynamic_threat = saved_storytellers[4]
saved_storytellers.len = 3
/datum/controller/subsystem/persistence/proc/LoadRecentMaps()
@@ -434,9 +437,10 @@ SUBSYSTEM_DEF(persistence)
saved_storytellers[3] = saved_storytellers[2]
saved_storytellers[2] = saved_storytellers[1]
saved_storytellers[1] = mode.storyteller.name
average_dynamic_threat = (mode.threat_average + average_dynamic_threat) / 2
var/json_file = file("data/RecentStorytellers.json")
var/list/file_data = list()
file_data["data"] = saved_storytellers
file_data["data"] = saved_storytellers + average_dynamic_threat
fdel(json_file)
WRITE_FILE(json_file, json_encode(file_data))
@@ -1,5 +1,4 @@
PROCESSING_SUBSYSTEM_DEF(chemistry)
wait = 5
flags = SS_KEEP_TIMING
name = "Chemistry"
@@ -0,0 +1,43 @@
PROCESSING_SUBSYSTEM_DEF(instruments)
name = "Instruments"
wait = 0.5
init_order = INIT_ORDER_INSTRUMENTS
flags = SS_KEEP_TIMING
priority = FIRE_PRIORITY_INSTRUMENTS
var/static/list/datum/instrument/instrument_data = list() //id = datum
var/static/list/datum/song/songs = list()
var/static/musician_maxlines = 600
var/static/musician_maxlinechars = 300
var/static/musician_hearcheck_mindelay = 5
var/static/max_instrument_channels = MAX_INSTRUMENT_CHANNELS
var/static/current_instrument_channels = 0
/datum/controller/subsystem/processing/instruments/Initialize()
initialize_instrument_data()
return ..()
/datum/controller/subsystem/processing/instruments/proc/on_song_new(datum/song/S)
songs += S
/datum/controller/subsystem/processing/instruments/proc/on_song_del(datum/song/S)
songs -= S
/datum/controller/subsystem/processing/instruments/proc/initialize_instrument_data()
for(var/path in subtypesof(/datum/instrument))
var/datum/instrument/I = path
if(initial(I.abstract_type) == path)
continue
I = new path
I.Initialize()
instrument_data[I.id || "[I.type]"] = I
CHECK_TICK
/datum/controller/subsystem/processing/instruments/proc/get_instrument(id_or_path)
return instrument_data["[id_or_path]"]
/datum/controller/subsystem/processing/instruments/proc/reserve_instrument_channel(datum/instrument/I)
if(current_instrument_channels > max_instrument_channels)
return
. = SSsounds.reserve_sound_channel(I)
if(!isnull(.))
current_instrument_channels++
@@ -1,3 +1,4 @@
PROCESSING_SUBSYSTEM_DEF(status_effects)
wait = 1
flags = SS_TICKER
name = "Status Effects"
@@ -47,7 +47,6 @@ PROCESSING_SUBSYSTEM_DEF(weather)
break
if (!ispath(weather_datum_type, /datum/weather))
CRASH("run_weather called with invalid weather_datum_type: [weather_datum_type || "null"]")
return
if (isnull(z_levels))
z_levels = SSmapping.levels_by_trait(initial(weather_datum_type.target_trait))
@@ -55,7 +54,6 @@ PROCESSING_SUBSYSTEM_DEF(weather)
z_levels = list(z_levels)
else if (!islist(z_levels))
CRASH("run_weather called with invalid z_levels: [z_levels || "null"]")
return
var/datum/weather/W = new weather_datum_type(z_levels)
W.telegraph()
+91
View File
@@ -0,0 +1,91 @@
#define DATUMLESS "NO_DATUM"
SUBSYSTEM_DEF(sounds)
name = "Sounds"
flags = SS_NO_FIRE
init_order = INIT_ORDER_SOUNDS
var/static/using_channels_max = CHANNEL_HIGHEST_AVAILABLE //BYOND max channels
// Hey uh these two needs to be initialized fast because the whole "things get deleted before init" thing.
/// Assoc list, "[channel]" = either the datum using it or TRUE for an unsafe-reserved (datumless reservation) channel
var/list/using_channels = list()
/// Assoc list datum = list(channel1, channel2, ...) for what channels something reserved.
var/list/using_channels_by_datum = list()
/// List of all available channels with associations set to TRUE for fast lookups/allocation.
var/list/available_channels
/datum/controller/subsystem/sounds/Initialize()
setup_available_channels()
return ..()
/datum/controller/subsystem/sounds/proc/setup_available_channels()
available_channels = list()
for(var/i in 1 to using_channels_max)
available_channels[num2text(i)] = TRUE
/// Removes a channel from using list.
/datum/controller/subsystem/sounds/proc/free_sound_channel(channel)
channel = num2text(channel)
var/using = using_channels[channel]
using_channels -= channel
if(using)
using_channels_by_datum[using] -= channel
if(!length(using_channels_by_datum[using]))
using_channels_by_datum -= using
available_channels[channel] = TRUE
/// Frees all the channels a datum is using.
/datum/controller/subsystem/sounds/proc/free_datum_channels(datum/D)
var/list/L = using_channels_by_datum[D]
if(!L)
return
for(var/channel in L)
using_channels -= channel
available_channels[channel] = TRUE
using_channels_by_datum -= D
/// Frees all datumless channels
/datum/controller/subsystem/sounds/proc/free_datumless_channels()
free_datum_channels(DATUMLESS)
/// NO AUTOMATIC CLEANUP - If you use this, you better manually free it later! Returns an integer for channel.
/datum/controller/subsystem/sounds/proc/reserve_sound_channel_datumless()
var/channel = random_available_channel_text()
if(!channel) //oh no..
return FALSE
available_channels -= channel
using_channels[channel] = DATUMLESS
LAZYINITLIST(using_channels_by_datum[DATUMLESS])
using_channels_by_datum[DATUMLESS] += channel
return text2num(channel)
/// Reserves a channel for a datum. Automatic cleanup only when the datum is deleted. Returns an integer for channel.
/datum/controller/subsystem/sounds/proc/reserve_sound_channel(datum/D)
if(!D) //i don't like typechecks but someone will fuck it up
CRASH("Attempted to reserve sound channel without datum using the managed proc.")
var/channel = random_available_channel_text()
if(!channel)
return FALSE
available_channels -= channel
using_channels[channel] = D
LAZYINITLIST(using_channels_by_datum[D])
using_channels_by_datum[D] += channel
return text2num(channel)
/// Random available channel, returns text.
/datum/controller/subsystem/sounds/proc/random_available_channel_text()
return pick(available_channels)
/// Random available channel, returns number
/datum/controller/subsystem/sounds/proc/random_available_channel()
return text2num(pick(available_channels))
/// If a channel is available
/datum/controller/subsystem/sounds/proc/is_channel_available(channel)
return available_channels[num2text(channel)]
/// How many channels we have left.
/datum/controller/subsystem/sounds/proc/available_channels_left()
return length(available_channels)
#undef DATUMLESS
+1 -1
View File
@@ -172,7 +172,7 @@ SUBSYSTEM_DEF(traumas)
/obj/item/ammo_box/magazine/pistolm9mm, /obj/item/ammo_box/a357, /obj/item/ammo_box/magazine/m12g, /obj/item/ammo_box/magazine/mm195x129, /obj/item/antag_spawner/nuke_ops, /obj/mecha/combat/gygax/dark, /obj/mecha/combat/marauder/mauler, /obj/item/soap/syndie, /obj/item/gun/syringe/syndicate, /obj/item/cartridge/virus/syndicate,
/obj/item/cartridge/virus/frame, /obj/item/chameleon, /obj/item/storage/box/syndie_kit/cutouts, /obj/item/clothing/suit/space/hardsuit/syndi, /obj/item/card/emag, /obj/item/storage/toolbox/syndicate, /obj/item/storage/book/bible/syndicate, /obj/item/encryptionkey/binary, /obj/item/encryptionkey/syndicate, /obj/item/aiModule/syndicate,
/obj/item/clothing/shoes/magboots/syndie, /obj/item/powersink, /obj/item/sbeacondrop, /obj/item/sbeacondrop/bomb, /obj/item/syndicatedetonator, /obj/item/shield/energy, /obj/item/assault_pod, /obj/item/slimepotion/slime/sentience/nuclear, /obj/item/stack/telecrystal, /obj/item/jammer, /obj/item/codespeak_manual/unlimited,
/obj/item/toy/cards/deck/syndicate, /obj/item/storage/secure/briefcase/syndie, /obj/item/storage/fancy/cigarettes/cigpack_syndicate, /obj/item/toy/syndicateballoon, /obj/item/clothing/gloves/rapid, /obj/item/paper/fluff/ruins/thederelict/syndie_mission, /obj/item/organ/cyberimp/eyes/hud/security/syndicate, /obj/item/clothing/head/HoS/syndicate,
/obj/item/toy/cards/deck/syndicate, /obj/item/storage/secure/briefcase/syndie, /obj/item/storage/fancy/cigarettes/cigpack_syndicate, /obj/item/toy/syndicateballoon, /obj/item/clothing/gloves/fingerless/pugilist/rapid, /obj/item/paper/fluff/ruins/thederelict/syndie_mission, /obj/item/organ/cyberimp/eyes/hud/security/syndicate, /obj/item/clothing/head/HoS/syndicate,
/obj/machinery/computer/pod/old/syndicate, /obj/machinery/vending/medical/syndicate_access, /obj/item/mmi/syndie, /obj/item/target/syndicate, /obj/machinery/vending/cigarette/syndicate, /obj/item/robot_module/syndicate, /obj/item/clothing/mask/gas/syndicate, /obj/machinery/power/singularity_beacon/syndicate, /obj/item/clothing/head/syndicatefake,
/obj/item/radio/headset/syndicate, /obj/item/gun/ballistic/automatic/pistol/antitank/syndicate, /obj/item/pda/syndicate, /obj/item/clothing/suit/armor/vest/capcarapace/syndicate, /obj/item/gun/ballistic/automatic/flechette, /obj/item/ammo_box/magazine/flechette, /obj/item/clothing/suit/toggle/lawyer/black/syndie, /obj/item/melee/transforming/energy/sword/cx/traitor,
/obj/structure/sign/poster/contraband/syndicate_pistol, /obj/structure/sign/poster/contraband/syndicate_recruitment, /obj/item/bedsheet/syndie, /obj/item/borg/upgrade/syndicate, /obj/item/tank/jetpack/oxygen/harness, /obj/item/firing_pin/implant/pindicate, /obj/item/reagent_containers/glass/bottle/traitor, /obj/item/storage/belt/military,
+1 -1
View File
@@ -763,7 +763,7 @@ SUBSYSTEM_DEF(vote)
remove_from_client()
Remove(owner)
/datum/action/vote/IsAvailable()
/datum/action/vote/IsAvailable(silent = FALSE)
return 1
/datum/action/vote/proc/remove_from_client()
+51 -62
View File
@@ -6,13 +6,15 @@
/datum/action
var/name = "Generic Action"
var/desc = null
var/obj/target = null
var/atom/target = null
var/check_flags = 0
var/required_mobility_flags = MOBILITY_USE
var/processing = FALSE
var/obj/screen/movable/action_button/button = null
var/buttontooltipstyle = ""
var/transparent_when_unavailable = TRUE
var/use_target_appearance = FALSE
var/list/target_appearance_matrix //if set, will be used to transform the target button appearance as an arglist.
var/button_icon = 'icons/mob/actions/backgrounds.dmi' //This is the file for the BACKGROUND icon
var/background_icon_state = ACTION_BUTTON_DEFAULT_BACKGROUND //And this is the state for the background icon
@@ -88,14 +90,14 @@
/datum/action/proc/Trigger()
if(!IsAvailable())
return FALSE
if(SEND_SIGNAL(src, COMSIG_ACTION_TRIGGER, src) & COMPONENT_ACTION_BLOCK_TRIGGER)
if(SEND_SIGNAL(src, COMSIG_ACTION_TRIGGER, target) & COMPONENT_ACTION_BLOCK_TRIGGER)
return FALSE
return TRUE
/datum/action/proc/Process()
return
/datum/action/proc/IsAvailable()
/datum/action/proc/IsAvailable(silent = FALSE)
if(!owner)
return FALSE
var/mob/living/L = owner
@@ -116,29 +118,42 @@
return TRUE
/datum/action/proc/UpdateButtonIcon(status_only = FALSE, force = FALSE)
if(button)
if(!status_only)
button.name = name
button.desc = desc
if(owner && owner.hud_used && background_icon_state == ACTION_BUTTON_DEFAULT_BACKGROUND)
var/list/settings = owner.hud_used.get_action_buttons_icons()
if(button.icon != settings["bg_icon"])
button.icon = settings["bg_icon"]
if(button.icon_state != settings["bg_state"])
button.icon_state = settings["bg_state"]
else
if(button.icon != button_icon)
button.icon = button_icon
if(button.icon_state != background_icon_state)
button.icon_state = background_icon_state
if(!button)
return
if(!status_only)
button.name = name
button.desc = desc
if(owner && owner.hud_used && background_icon_state == ACTION_BUTTON_DEFAULT_BACKGROUND)
var/list/settings = owner.hud_used.get_action_buttons_icons()
if(button.icon != settings["bg_icon"])
button.icon = settings["bg_icon"]
if(button.icon_state != settings["bg_state"])
button.icon_state = settings["bg_state"]
else
if(button.icon != button_icon)
button.icon = button_icon
if(button.icon_state != background_icon_state)
button.icon_state = background_icon_state
if(!use_target_appearance)
ApplyIcon(button, force)
if(!IsAvailable())
button.color = transparent_when_unavailable ? rgb(128,0,0,128) : rgb(128,0,0)
else
button.color = rgb(255,255,255,255)
return 1
else if(target && button.appearance_cache != target.appearance) //replace with /ref comparison if this is not valid.
var/mutable_appearance/M = new(target)
M.layer = FLOAT_LAYER
M.plane = FLOAT_PLANE
if(target_appearance_matrix)
var/list/L = target_appearance_matrix
M.transform = matrix(L[1], L[2], L[3], L[4], L[5], L[6])
button.cut_overlays()
button.add_overlay(M)
button.appearance_cache = target.appearance
if(!IsAvailable(TRUE))
button.color = transparent_when_unavailable ? rgb(128,0,0,128) : rgb(128,0,0)
else
button.color = rgb(255,255,255,255)
return 1
/datum/action/proc/ApplyIcon(obj/screen/movable/action_button/current_button, force = FALSE)
if(icon_icon && button_icon_state && ((current_button.button_icon_state != button_icon_state) || force))
@@ -165,6 +180,7 @@
/datum/action/item_action
check_flags = AB_CHECK_RESTRAINED|AB_CHECK_STUN|AB_CHECK_LYING|AB_CHECK_CONSCIOUS
button_icon_state = null
use_target_appearance = TRUE
// If you want to override the normal icon being the item
// then change this to an icon state
@@ -188,23 +204,6 @@
I.ui_action_click(owner, src)
return 1
/datum/action/item_action/ApplyIcon(obj/screen/movable/action_button/current_button, force)
if(button_icon && button_icon_state)
// If set, use the custom icon that we set instead
// of the item appearence
..()
else if(target && current_button.appearance_cache != target.appearance) //replace with /ref comparison if this is not valid.
var/obj/item/I = target
var/old_layer = I.layer
var/old_plane = I.plane
I.layer = FLOAT_LAYER //AAAH
I.plane = FLOAT_PLANE //^ what that guy said
current_button.cut_overlays()
current_button.add_overlay(I)
I.layer = old_layer
I.plane = old_plane
current_button.appearance_cache = I.appearance
/datum/action/item_action/toggle_light
name = "Toggle Light"
@@ -302,23 +301,13 @@
name = "Toggle Friendly Fire \[ON\]"
..()
/datum/action/item_action/synthswitch
name = "Change Synthesizer Instrument"
desc = "Change the type of instrument your synthesizer is playing as."
/datum/action/item_action/synthswitch/Trigger()
if(istype(target, /obj/item/instrument/piano_synth))
var/obj/item/instrument/piano_synth/synth = target
return synth.selectInstrument()
return ..()
/datum/action/item_action/vortex_recall
name = "Vortex Recall"
desc = "Recall yourself, and anyone nearby, to an attuned hierophant beacon at any time.<br>If the beacon is still attached, will detach it."
icon_icon = 'icons/mob/actions/actions_items.dmi'
button_icon_state = "vortex_recall"
/datum/action/item_action/vortex_recall/IsAvailable()
/datum/action/item_action/vortex_recall/IsAvailable(silent = FALSE)
if(istype(target, /obj/item/hierophant_club))
var/obj/item/hierophant_club/H = target
if(H.teleporting)
@@ -330,7 +319,7 @@
background_icon_state = "bg_clock"
buttontooltipstyle = "clockcult"
/datum/action/item_action/clock/IsAvailable()
/datum/action/item_action/clock/IsAvailable(silent = FALSE)
if(!is_servant_of_ratvar(owner))
return 0
return ..()
@@ -339,7 +328,7 @@
name = "Create Judicial Marker"
desc = "Allows you to create a stunning Judicial Marker at any location in view. Click again to disable."
/datum/action/item_action/clock/toggle_visor/IsAvailable()
/datum/action/item_action/clock/toggle_visor/IsAvailable(silent = FALSE)
if(!is_servant_of_ratvar(owner))
return 0
if(istype(target, /obj/item/clothing/glasses/judicial_visor))
@@ -418,7 +407,7 @@
/datum/action/item_action/jetpack_stabilization
name = "Toggle Jetpack Stabilization"
/datum/action/item_action/jetpack_stabilization/IsAvailable()
/datum/action/item_action/jetpack_stabilization/IsAvailable(silent = FALSE)
var/obj/item/tank/jetpack/J = target
if(!istype(J) || !J.on)
return 0
@@ -475,7 +464,7 @@
/datum/action/item_action/organ_action
check_flags = AB_CHECK_CONSCIOUS
/datum/action/item_action/organ_action/IsAvailable()
/datum/action/item_action/organ_action/IsAvailable(silent = FALSE)
var/obj/item/organ/I = target
if(!I.owner)
return 0
@@ -644,32 +633,32 @@
return FALSE
if(target)
var/obj/effect/proc_holder/S = target
S.Click()
S.Trigger(usr)
return TRUE
/datum/action/spell_action/IsAvailable()
/datum/action/spell_action/IsAvailable(silent = FALSE)
if(!target)
return FALSE
return TRUE
/datum/action/spell_action/spell
/datum/action/spell_action/spell/IsAvailable()
/datum/action/spell_action/spell/IsAvailable(silent = FALSE)
if(!target)
return FALSE
var/obj/effect/proc_holder/spell/S = target
if(owner)
return S.can_cast(owner)
return S.can_cast(owner, FALSE, silent)
return FALSE
/datum/action/spell_action/alien
/datum/action/spell_action/alien/IsAvailable()
/datum/action/spell_action/alien/IsAvailable(silent = FALSE)
if(!target)
return FALSE
var/obj/effect/proc_holder/alien/ab = target
if(owner)
return ab.cost_check(ab.check_turf,owner,1)
return ab.cost_check(ab.check_turf,owner,silent)
return FALSE
@@ -711,7 +700,7 @@
button.maptext_width = 24
button.maptext_height = 12
/datum/action/cooldown/IsAvailable()
/datum/action/cooldown/IsAvailable(silent = FALSE)
return next_use_time <= world.time
/datum/action/cooldown/proc/StartCooldown()
+1 -1
View File
@@ -39,7 +39,7 @@
//title_image = ntitle_image
/datum/browser/proc/add_stylesheet(name, file)
if (istype(name, /datum/asset/spritesheet))
if(istype(name, /datum/asset/spritesheet))
var/datum/asset/spritesheet/sheet = name
stylesheets["spritesheet_[sheet.name].css"] = "data/spritesheets/[sheet.name]"
else
+6 -3
View File
@@ -188,7 +188,7 @@
/datum/component/personal_crafting/proc/construct_item(mob/user, datum/crafting_recipe/R)
var/list/contents = get_surroundings(user)
var/send_feedback = 1
var/send_feedback = TRUE
if(check_contents(user, R, contents))
if(check_tools(user, R, contents))
if(do_after(user, R.time, target = user))
@@ -205,7 +205,7 @@
if(send_feedback)
SSblackbox.record_feedback("tally", "object_crafted", 1, I.type)
log_craft("[I] crafted by [user] at [loc_name(I.loc)]")
return 0
return FALSE
return "."
return ", missing tool."
return ", missing component."
@@ -408,8 +408,11 @@
switch(action)
if("make")
var/datum/crafting_recipe/TR = locate(params["recipe"]) in GLOB.crafting_recipes
busy = TRUE
ui_interact(usr)
if(busy)
to_chat(usr, "<span class='warning'>You are already making something!</span>")
return
busy = TRUE
var/fail_msg = construct_item(usr, TR)
if(!fail_msg)
to_chat(usr, "<span class='notice'>[TR.name] constructed.</span>")
@@ -14,26 +14,32 @@
name = "Glass working tools"
desc = "A lovely belt of most the tools you will need to shape, mold, and refine glass into more advanced shapes."
icon_state = "glass_tools"
tool_behaviour = TOOL_GLASS_CUT
tool_behaviour = TOOL_GLASS_CUT //Cutting takes 20 ticks
/obj/item/glasswork/blowing_rod
name = "Glass working blow rod"
desc = "A hollow metal stick made for glass blowing."
icon_state = "blowing_rods_unused"
tool_behaviour = TOOL_BLOW
tool_behaviour = TOOL_BLOW //Rods take 5 ticks
/obj/item/glasswork/glass_base
/obj/item/glasswork/glass_base //Welding takes 30 ticks
name = "Glass fodder sheet"
desc = "A sheet of glass set aside for glass working"
icon_state = "glass_base"
var/next_step = null
var/rod = /obj/item/glasswork/blowing_rod
/obj/item/lens
name = "Optical lens"
desc = "Good for selling or crafting, by itself its useless"
icon = 'icons/obj/chemical.dmi'
icon_state = "glass_optics"
/obj/item/tea_plate
name = "Tea Plate"
desc = "A polished plate for a tea cup. How fancy!"
icon = 'icons/obj/glass_ware.dmi'
icon_state = "tea_plate"
/obj/item/tea_cup
name = "Tea Cup"
desc = "A glass cup made for fake tea!"
icon = 'icons/obj/glass_ware.dmi'
icon_state = "tea_plate"
//////////////////////Chem Disk/////////////////////
//Two Steps //
@@ -49,8 +55,9 @@
/obj/item/glasswork/glass_base/dish/attackby(obj/item/I, mob/user, params)
..()
if(I.tool_behaviour == TOOL_GLASS_CUT)
new next_step(user.loc, 1)
qdel(src)
if(do_after(user,20, target = src))
new next_step(user.loc, 1)
qdel(src)
/obj/item/glasswork/glass_base/dish_part1
name = "Half chem dish sheet"
@@ -61,8 +68,9 @@
/obj/item/glasswork/glass_base/dish_part1/attackby(obj/item/I, mob/user, params)
..()
if(I.tool_behaviour == TOOL_GLASS_CUT)
new next_step(user.loc, 1)
qdel(src)
if(do_after(user,20, target = src))
new next_step(user.loc, 1)
qdel(src)
//////////////////////Lens//////////////////////////
//Six Steps //
@@ -78,8 +86,9 @@
/obj/item/glasswork/glass_base/glass_lens/attackby(obj/item/I, mob/user, params)
..()
if(I.tool_behaviour == TOOL_GLASS_CUT)
new next_step(user.loc, 1)
qdel(src)
if(do_after(user,20, target = src))
new next_step(user.loc, 1)
qdel(src)
/obj/item/glasswork/glass_base/glass_lens_part1
name = "Glass fodder sheet"
@@ -90,8 +99,9 @@
/obj/item/glasswork/glass_base/glass_lens_part1/attackby(obj/item/I, mob/user, params)
..()
if(I.tool_behaviour == TOOL_WELDER)
new next_step(user.loc, 1)
qdel(src)
if(do_after(user,30, target = src))
new next_step(user.loc, 1)
qdel(src)
/obj/item/glasswork/glass_base/glass_lens_part2
name = "Glass fodder sheet"
@@ -102,8 +112,9 @@
/obj/item/glasswork/glass_base/glass_lens_part2/attackby(obj/item/I, mob/user, params)
..()
if(I.tool_behaviour == TOOL_WELDER)
new next_step(user.loc, 1)
qdel(src)
if(do_after(user,30, target = src))
new next_step(user.loc, 1)
qdel(src)
/obj/item/glasswork/glass_base/glass_lens_part3
name = "Glass fodder sheet"
@@ -114,9 +125,10 @@
/obj/item/glasswork/glass_base/glass_lens_part3/attackby(obj/item/I, mob/user, params)
..()
if(I.tool_behaviour == TOOL_BLOW)
new next_step(user.loc, 1)
qdel(src)
qdel(I)
if(do_after(user,5, target = src))
new next_step(user.loc, 1)
qdel(src)
qdel(I)
/obj/item/glasswork/glass_base/glass_lens_part4
name = "Glass fodder sheet"
@@ -127,29 +139,31 @@
/obj/item/glasswork/glass_base/glass_lens_part4/attackby(obj/item/I, mob/user, params)
..()
if(I.tool_behaviour == TOOL_GLASS_CUT)
new next_step(user.loc, 1)
new rod(user.loc, 1)
qdel(src)
if(do_after(user,20, target = src))
new next_step(user.loc, 1)
new rod(user.loc, 1)
qdel(src)
/obj/item/glasswork/glass_base/glass_lens_part5
name = "Unpolished glass lens"
desc = "A small unpolished glass lens. Could be polished with some cloth."
icon = 'icons/obj/chemical.dmi'
desc = "A small unpolished glass lens. Could be polished with some silk."
icon = 'icons/obj/glass_ware.dmi'
icon_state = "glass_optics"
next_step = /obj/item/glasswork/glass_base/glass_lens_part6
/obj/item/glasswork/glass_base/glass_lens_part5/attackby(obj/item/I, mob/user, params)
..()
if(istype(I, /obj/item/stack/sheet/cloth))
new next_step(user.loc, 1)
qdel(src)
if(istype(I, /obj/item/stack/sheet/silk))
if(do_after(user,10, target = src))
new next_step(user.loc, 1)
qdel(src)
/obj/item/glasswork/glass_base/glass_lens_part6
name = "Unrefined glass lens"
desc = "A small polished glass lens. Just needs to be refined with some sandstone."
icon = 'icons/obj/chemical.dmi'
icon = 'icons/obj/glass_ware.dmi'
icon_state = "glass_optics"
next_step = /obj/item/lens
next_step = /obj/item/glasswork/glass_base/lens
/obj/item/glasswork/glass_base/glass_lens_part6/attackby(obj/item/I, mob/user, params)
..()
@@ -171,8 +185,9 @@
/obj/item/glasswork/glass_base/spouty/attackby(obj/item/I, mob/user, params)
..()
if(I.tool_behaviour == TOOL_GLASS_CUT)
new next_step(user.loc, 1)
qdel(src)
if(do_after(user,20, target = src))
new next_step(user.loc, 1)
qdel(src)
/obj/item/glasswork/glass_base/spouty_part2
name = "Glass fodder sheet"
@@ -183,8 +198,9 @@
/obj/item/glasswork/glass_base/spouty_part2/attackby(obj/item/I, mob/user, params)
..()
if(I.tool_behaviour == TOOL_WELDER)
new next_step(user.loc, 1)
qdel(src)
if(do_after(user,30, target = src))
new next_step(user.loc, 1)
qdel(src)
/obj/item/glasswork/glass_base/spouty_part3
name = "Glass fodder sheet"
@@ -195,9 +211,10 @@
/obj/item/glasswork/glass_base/spouty_part3/attackby(obj/item/I, mob/user, params)
..()
if(I.tool_behaviour == TOOL_BLOW)
new next_step(user.loc, 1)
qdel(src)
qdel(I)
if(do_after(user,5, target = src))
new next_step(user.loc, 1)
qdel(src)
qdel(I)
/obj/item/glasswork/glass_base/spouty_part4
name = "Glass fodder sheet"
@@ -208,9 +225,10 @@
/obj/item/glasswork/glass_base/spouty_part4/attackby(obj/item/I, mob/user, params)
..()
if(I.tool_behaviour == TOOL_GLASS_CUT)
new next_step(user.loc, 1)
new rod(user.loc, 1)
qdel(src)
if(do_after(user,20, target = src))
new next_step(user.loc, 1)
new rod(user.loc, 1)
qdel(src)
//////////////////////Small Bulb Flask//////////////
//Two Steps //
@@ -226,8 +244,9 @@
/obj/item/glasswork/glass_base/flask_small/attackby(obj/item/I, mob/user, params)
..()
if(I.tool_behaviour == TOOL_WELDER)
new next_step(user.loc, 1)
qdel(src)
if(do_after(user,30, target = src))
new next_step(user.loc, 1)
qdel(src)
/obj/item/glasswork/glass_base/flask_small_part1
name = "Metled glass"
@@ -238,9 +257,10 @@
/obj/item/glasswork/glass_base/flask_small_part1/attackby(obj/item/I, mob/user, params)
..()
if(I.tool_behaviour == TOOL_BLOW)
new next_step(user.loc, 1)
qdel(src)
qdel(I)
if(do_after(user,5, target = src))
new next_step(user.loc, 1)
qdel(src)
qdel(I)
/obj/item/glasswork/glass_base/flask_small_part2
name = "Metled glass"
@@ -251,9 +271,10 @@
/obj/item/glasswork/glass_base/flask_small_part2/attackby(obj/item/I, mob/user, params)
..()
if(I.tool_behaviour == TOOL_GLASS_CUT)
new next_step(user.loc, 1)
new rod(user.loc, 1)
qdel(src)
if(do_after(user,20, target = src))
new next_step(user.loc, 1)
new rod(user.loc, 1)
qdel(src)
//////////////////////Large Bulb Flask//////////////
//Two Steps //
@@ -269,8 +290,9 @@
/obj/item/glasswork/glass_base/flask_large/attackby(obj/item/I, mob/user, params)
..()
if(I.tool_behaviour == TOOL_WELDER)
new next_step(user.loc, 1)
qdel(src)
if(do_after(user,30, target = src))
new next_step(user.loc, 1)
qdel(src)
/obj/item/glasswork/glass_base/flask_large_part1
name = "Metled glass"
@@ -281,9 +303,10 @@
/obj/item/glasswork/glass_base/flask_large_part1/attackby(obj/item/I, mob/user, params)
..()
if(I.tool_behaviour == TOOL_BLOW)
new next_step(user.loc, 1)
qdel(src)
qdel(I)
if(do_after(user,5, target = src))
new next_step(user.loc, 1)
qdel(src)
qdel(I)
/obj/item/glasswork/glass_base/flask_large_part2
name = "Metled glass"
@@ -294,6 +317,138 @@
/obj/item/glasswork/glass_base/flask_large_part2/attackby(obj/item/I, mob/user, params)
..()
if(I.tool_behaviour == TOOL_GLASS_CUT)
new next_step(user.loc, 1)
new rod(user.loc, 1)
qdel(src)
if(do_after(user,20, target = src))
new next_step(user.loc, 1)
new rod(user.loc, 1)
qdel(src)
//////////////////////Tea Plates////////////////////
//Three Steps //
//Sells for 1200 cr, takes 5 glass shets //
//Usefull for selling and chemical things //
////////////////////////////////////////////////////
/obj/item/glasswork/glass_base/tea_plate
name = "Glass fodder sheet"
desc = "A set of glass sheets set aside for glass working, this one is ideal for a tea plate, how fancy! Needs to be heated with some tools."
next_step = /obj/item/glasswork/glass_base/tea_plate1
/obj/item/glasswork/glass_base/tea_plate/attackby(obj/item/I, mob/user, params)
..()
if(I.tool_behaviour == TOOL_WELDER)
if(do_after(user,30, target = src))
new next_step(user.loc, 1)
qdel(src)
/obj/item/glasswork/glass_base/tea_plate1
name = "Metled glass"
desc = "A blob of metled glass, this one is ideal for a tea plate. Needs to be blown with some tools."
icon_state = "glass_base_molding"
next_step = /obj/item/glasswork/glass_base/tea_plate2
/obj/item/glasswork/glass_base/tea_plate1/attackby(obj/item/I, mob/user, params)
..()
if(I.tool_behaviour == TOOL_BLOW)
if(do_after(user,5, target = src))
new next_step(user.loc, 1)
qdel(src)
qdel(I)
/obj/item/glasswork/glass_base/tea_plate2
name = "Metled glass"
desc = "A blob of metled glass on the end of a blowing rod. Needs to be cut off with some tools."
icon_state = "blowing_rods_inuse"
next_step = /obj/item/glasswork/glass_base/tea_plate3
/obj/item/glasswork/glass_base/tea_plate2/attackby(obj/item/I, mob/user, params)
..()
if(I.tool_behaviour == TOOL_GLASS_CUT)
if(do_after(user,20, target = src))
new next_step(user.loc, 1)
new rod(user.loc, 1)
qdel(src)
/obj/item/glasswork/glass_base/tea_plate3
name = "Disk of glass"
desc = "A disk of glass that can be cant be used for much. Needs to be polished with some silk."
icon_state = "glass_base_half"
next_step = /obj/item/tea_plate
/obj/item/glasswork/glass_base/tea_plate3/attackby(obj/item/I, mob/user, params)
..()
if(istype(I, /obj/item/stack/sheet/silk))
if(do_after(user,10, target = src))
new next_step(user.loc, 1)
qdel(src)
//////////////////////Tea Cup///////////////////////
//Four Steps //
//Sells for 1800 cr, takes 6 glass shets //
//Usefull for selling and chemical things //
////////////////////////////////////////////////////
/obj/item/glasswork/glass_base/tea_cup
name = "Glass fodder sheet"
desc = "A set of glass sheets set aside for glass working, this one is ideal for a tea cup, how fancy! Needs to be heated with some tools."
next_step = /obj/item/glasswork/glass_base/tea_cup1
/obj/item/glasswork/glass_base/tea_cup/attackby(obj/item/I, mob/user, params)
..()
if(I.tool_behaviour == TOOL_WELDER)
if(do_after(user,30, target = src))
new next_step(user.loc, 1)
qdel(src)
/obj/item/glasswork/glass_base/tea_cup1
name = "Metled glass"
desc = "A blob of metled glass, this one is ideal for a tea cup. Needs to be blown with some tools."
icon_state = "glass_base_molding"
next_step = /obj/item/glasswork/glass_base/tea_cup2
/obj/item/glasswork/glass_base/tea_cup1/attackby(obj/item/I, mob/user, params)
..()
if(I.tool_behaviour == TOOL_BLOW)
if(do_after(user,5, target = src))
new next_step(user.loc, 1)
qdel(src)
qdel(I)
/obj/item/glasswork/glass_base/tea_cupe2
name = "Metled glass"
desc = "A blob of metled glass on the end of a blowing rod. Needs to be cut off with some tools."
icon_state = "blowing_rods_inuse"
next_step = /obj/item/glasswork/glass_base/tea_cup3
/obj/item/glasswork/glass_base/tea_cup2/attackby(obj/item/I, mob/user, params)
..()
if(I.tool_behaviour == TOOL_GLASS_CUT)
if(do_after(user,20, target = src))
new next_step(user.loc, 1)
new rod(user.loc, 1)
qdel(src)
/obj/item/glasswork/glass_base/tea_cup3
name = "Disk of glass"
desc = "A bowl of glass that can be cant be used for much. Needs to be polished with some silk."
icon_state = "glass_base_half"
next_step = /obj/item/glasswork/glass_base/tea_cup4
/obj/item/glasswork/glass_base/cup3/attackby(obj/item/I, mob/user, params)
..()
if(istype(I, /obj/item/stack/sheet/silk))
if(do_after(user,10, target = src))
new next_step(user.loc, 1)
qdel(src)
/obj/item/glasswork/glass_base/tea_cup4
name = "Disk of glass"
desc = "A bowl of polished glass that can be cant be used for much. Needs some more glass to make a handle."
icon_state = "glass_base_half"
next_step = /obj/item/tea_cup
/obj/item/glasswork/glass_base/cup4/attackby(obj/item/I, mob/user, params)
..()
if(istype(I, /obj/item/stack/sheet/glass))
if(do_after(user,10, target = src))
new next_step(user.loc, 1)
qdel(src)
@@ -0,0 +1,98 @@
//This file is for crafting using a lens!
/obj/item/glasswork/glass_base/lens
name = "Optical lens"
desc = "Good for selling or crafting, by itself its useless"
icon = 'icons/obj/glass_ware.dmi'
icon_state = "glass_optics"
//Laser pointers - 2600
/obj/item/glasswork/glass_base/laserpointer_shell
name = "Laser pointer assembly"
desc = "Good for selling or crafting, by itself its useless. Needs a power capactor."
icon_state = "laser_case"
icon = 'icons/obj/glass_ware.dmi'
next_step = /obj/item/glasswork/glass_base/laserpointer_shell_1
/obj/item/glasswork/glass_base/laserpointer_shell/attackby(obj/item/I, mob/user, params)
..()
if(istype(I, /obj/item/stock_parts/capacitor))
new next_step(user.loc, 1)
qdel(src)
/obj/item/glasswork/glass_base/laserpointer_shell_1
name = "Laser pointer assembly"
desc = "Good for selling or crafting, by itself its useless. Needs a glass lens."
icon_state = "laser_wire"
icon_state = "laser_case"
next_step = /obj/item/glasswork/glass_base/laserpointer_shell_2
/obj/item/glasswork/glass_base/laserpointer_shell_1/attackby(obj/item/I, mob/user, params)
..()
if(istype(I, /obj/item/glasswork/glass_base/lens))
new next_step(user.loc, 1)
qdel(src)
/obj/item/glasswork/glass_base/laserpointer_shell_2
name = "Laser pointer assembly"
desc = "Good for selling or crafting, by itself its useless. Needs to be screwed together."
icon_state = "laser_wire"
icon_state = "laser_case"
next_step = /obj/item/laser_pointer/blue/handmade
/obj/item/glasswork/glass_base/laserpointer_shell_2/attackby(obj/item/I, mob/user, params)
..()
if(I.tool_behaviour == TOOL_SCREWDRIVER)
if(do_after(user,260, target = src))
new next_step(user.loc, 1)
qdel(src)
//NERD SHIT - 5000
/obj/item/glasswork/glass_base/glasses_frame
name = "Glasses Frame"
desc = "Good for crafting a pare of glasses, by itself its useless. Just add a pare of lens."
icon = 'icons/obj/glass_ware.dmi'
icon_state = "frames"
next_step = /obj/item/glasswork/glass_base/glasses_frame_1
/obj/item/glasswork/glass_base/glasses_frame/attackby(obj/item/I, mob/user, params)
..()
if(istype(I, /obj/item/glasswork/glass_base/lens))
if(do_after(user,60, target = src))
new next_step(user.loc, 1)
qdel(src)
/obj/item/glasswork/glass_base/glasses_frame_1
name = "Glasses Frame"
desc = "Good for crafting a pare of glasses, by itself its useless. Just add a the other lens."
icon = 'icons/obj/glass_ware.dmi'
icon_state = "frames_1"
next_step = /obj/item/glasswork/glass_base/glasses_frame_2
/obj/item/glasswork/glass_base/glasses_frame_1/attackby(obj/item/I, mob/user, params)
..()
if(istype(I, /obj/item/glasswork/glass_base/lens))
if(do_after(user,60, target = src))
new next_step(user.loc, 1)
qdel(src)
/obj/item/glasswork/glass_base/glasses_frame_2
name = "Glasses Frame"
desc = "Good for crafting a pare of glasses, by itself its useless. Just adjust the pices into the frame with a screwdriver."
icon = 'icons/obj/glass_ware.dmi'
icon_state = "frames_2"
next_step = /obj/item/glasswork/glasses
/obj/item/glasswork/glass_base/glasses_frame_2/attackby(obj/item/I, mob/user, params)
..()
if(I.tool_behaviour == TOOL_SCREWDRIVER)
if(do_after(user,180, target = src))
new next_step(user.loc, 1)
qdel(src)
/obj/item/glasswork/glasses
name = "Hand Made Glasses"
desc = "Hande made glasses that have not been polished at all making them useless. Selling them could still be worth a bit of credits."
icon = 'icons/obj/glass_ware.dmi'
icon_state = "frames_2"
@@ -33,6 +33,37 @@
/obj/item/organ/ears/cat = 1)
category = CAT_CLOTHING
/datum/crafting_recipe/papermask
name = "Paper Mask"
result = /obj/item/clothing/mask/paper
time = 10
reqs = list(/obj/item/paper = 20)
category = CAT_CLOTHING
/datum/crafting_recipe/armwraps
name = "armwraps"
result = /obj/item/clothing/gloves/fingerless/pugilist
time = 60
tools = list(TOOL_WIRECUTTER)
reqs = list(/obj/item/stack/sheet/cloth = 4,
/obj/item/stack/sheet/silk = 2,
/obj/item/stack/sheet/leather = 2)
category = CAT_CLOTHING
/datum/crafting_recipe/armwrapsplusone
name = "armwraps of mighty fists"
result = /obj/item/clothing/gloves/fingerless/pugilist/magic
time = 300
tools = list(TOOL_WIRECUTTER, /obj/item/book/codex_gigas, /obj/item/clothing/head/wizard, /obj/item/clothing/suit/wizrobe)
reqs = list(/obj/item/stack/sheet/cloth = 2,
/obj/item/stack/sheet/leather = 2,
/obj/item/stack/sheet/durathread = 2,
/datum/reagent/consumable/ethanol/sake = 100,
/datum/reagent/consumable/ethanol/wizz_fizz = 100,
/obj/item/stack/sheet/sinew = 1,
/obj/item/stack/sheet/mineral/gold = 50)
category = CAT_CLOTHING
////////
//Huds//
////////
@@ -287,3 +318,12 @@
/obj/item/bedsheet/cosmos = 1)
time = 60
category = CAT_CLOTHING
/datum/crafting_recipe/garlic_necklace
name = "Garlic Necklace"
result = /obj/item/clothing/neck/garlic_necklace
reqs = list(/obj/item/reagent_containers/food/snacks/grown/garlic = 15,
/obj/item/stack/cable_coil = 10)
time = 100 //Takes awhile to put all the garlics on the coil and knot it.
category = CAT_CLOTHING
@@ -298,7 +298,7 @@
subcategory = CAT_AMMO
/datum/crafting_recipe/ashen_arrow
name = "Fire Hardened Arrow"
name = "Ashen Arrow"
result = /obj/item/ammo_casing/caseless/arrow/ash
tools = list(TOOL_WELDER)
time = 30
+4 -4
View File
@@ -1,8 +1,8 @@
//This component applies a customizable drop_shadow filter to its wearer when they toggle combat mode on or off. This can stack.
/datum/component/wearertargeting/phantomthief
dupe_mode = COMPONENT_DUPE_UNIQUE_PASSARGS
signals = list(COMSIG_LIVING_COMBAT_ENABLED)
dupe_mode = COMPONENT_DUPE_ALLOWED
signals = list(COMSIG_LIVING_COMBAT_ENABLED, COMSIG_LIVING_COMBAT_DISABLED)
proctype = .proc/handlefilterstuff
var/filter_x
var/filter_y
@@ -19,8 +19,8 @@
filter_color = _color
valid_slots = _valid_slots
/datum/component/wearertargeting/phantomthief/proc/handlefilterstuff(datum/source, mob/user, combatmodestate)
if(!combatmodestate)
/datum/component/wearertargeting/phantomthief/proc/handlefilterstuff(mob/living/user, was_forced = FALSE)
if(!(user.combat_flags & COMBAT_FLAG_COMBAT_ACTIVE))
user.remove_filter("phantomthief")
else
user.add_filter("phantomthief", 4, list(type = "drop_shadow", x = filter_x, y = filter_y, size = filter_size, color = filter_color))
+1 -2
View File
@@ -25,7 +25,6 @@
RegisterSignal(parent, COMSIG_ITEM_ATTACK_OBJ, .proc/rad_attack)
else
CRASH("Something that wasn't an atom was given /datum/component/radioactive")
return
if(strength > RAD_MINIMUM_CONTAMINATION)
SSradiation.warn(src)
@@ -84,4 +83,4 @@
#undef RAD_AMOUNT_LOW
#undef RAD_AMOUNT_MEDIUM
#undef RAD_AMOUNT_HIGH
#undef RAD_AMOUNT_EXTREME
#undef RAD_AMOUNT_EXTREME
+20 -12
View File
@@ -66,6 +66,9 @@
var/atom/movable/AM = parent
AM.unbuckle_mob(M)
/datum/component/riding/proc/additional_offset_checks()
return TRUE
/datum/component/riding/proc/handle_vehicle_offsets()
var/atom/movable/AM = parent
var/AM_dir = "[AM.dir]"
@@ -77,16 +80,17 @@
var/list/offsets = get_offsets(passindex)
var/rider_dir = get_rider_dir(passindex)
buckled_mob.setDir(rider_dir)
dir_loop:
for(var/offsetdir in offsets)
if(offsetdir == AM_dir)
var/list/diroffsets = offsets[offsetdir]
buckled_mob.pixel_x = diroffsets[1]
if(diroffsets.len >= 2)
buckled_mob.pixel_y = diroffsets[2]
if(diroffsets.len == 3)
buckled_mob.layer = diroffsets[3]
break dir_loop
for(var/offsetdir in offsets)
if(offsetdir == AM_dir)
var/list/diroffsets = offsets[offsetdir]
buckled_mob.pixel_x = diroffsets[1]
if(diroffsets.len >= 2)
buckled_mob.pixel_y = diroffsets[2]
if(diroffsets.len == 3)
buckled_mob.layer = diroffsets[3]
break
if (!additional_offset_checks())
return
var/list/static/default_vehicle_pixel_offsets = list(TEXT_NORTH = list(0, 0), TEXT_SOUTH = list(0, 0), TEXT_EAST = list(0, 0), TEXT_WEST = list(0, 0))
var/px = default_vehicle_pixel_offsets[AM_dir]
var/py = default_vehicle_pixel_offsets[AM_dir]
@@ -147,7 +151,6 @@
if(user.incapacitated())
Unbuckle(user)
return
if(world.time < last_vehicle_move + ((last_move_diagonal? 2 : 1) * vehicle_move_delay))
return
last_vehicle_move = world.time
@@ -169,8 +172,8 @@
else
last_move_diagonal = FALSE
handle_vehicle_layer()
handle_vehicle_offsets()
handle_vehicle_layer()
else
to_chat(user, "<span class='notice'>You'll need the keys in one of your hands to [drive_verb] [AM].</span>")
@@ -220,6 +223,7 @@
force_dismount(target)
/datum/component/riding/human/handle_vehicle_layer()
. = ..()
var/atom/movable/AM = parent
if(AM.buckled_mobs && AM.buckled_mobs.len)
for(var/mob/M in AM.buckled_mobs) //ensure proper layering of piggyback and carry, sometimes weird offsets get applied
@@ -244,6 +248,10 @@
else
return list(TEXT_NORTH = list(0, 6), TEXT_SOUTH = list(0, 6), TEXT_EAST = list(-6, 4), TEXT_WEST = list( 6, 4))
/datum/component/riding/human/additional_offset_checks()
var/mob/living/carbon/human/H = parent
return !H.buckled
/datum/component/riding/human/force_dismount(mob/living/user)
var/atom/movable/AM = parent
AM.unbuckle_mob(user)
@@ -60,7 +60,7 @@
_contents_limbo = null
if(_user_limbo)
for(var/i in _user_limbo)
show_to(i)
ui_show(i)
_user_limbo = null
/datum/component/storage/concrete/_insert_physical_item(obj/item/I, override = FALSE)
@@ -18,7 +18,7 @@
return
. = COMPONENT_NO_ATTACK_HAND
if(!check_locked(source, user, TRUE))
show_to(user)
ui_show(user)
A.do_jiggle()
if(rustle_sound)
playsound(A, "rustle", 50, 1, -5)
@@ -3,6 +3,7 @@
allow_quick_gather = TRUE
allow_quick_empty = TRUE
click_gather = TRUE
storage_flags = STORAGE_FLAGS_LEGACY_DEFAULT
max_w_class = WEIGHT_CLASS_NORMAL
max_combined_w_class = 100
max_items = 100
@@ -1,6 +1,7 @@
//Stack-only storage.
/datum/component/storage/concrete/stack
display_numerical_stacking = TRUE
storage_flags = STORAGE_FLAGS_LEGACY_DEFAULT
var/max_combined_stack_amount = 300
max_w_class = WEIGHT_CLASS_NORMAL
max_combined_w_class = WEIGHT_CLASS_NORMAL * 14
+74 -149
View File
@@ -21,9 +21,16 @@
var/locked = FALSE //when locked nothing can see inside or use it.
var/max_w_class = WEIGHT_CLASS_SMALL //max size of objects that will fit.
var/max_combined_w_class = 14 //max combined sizes of objects that will fit.
var/max_items = 7 //max number of objects that will fit.
/// Storage flags, including what kinds of limiters we use for how many items we can hold
var/storage_flags = STORAGE_FLAGS_LEGACY_DEFAULT
/// Max w_class we can hold. Applies to [STORAGE_LIMIT_COMBINED_W_CLASS] and [STORAGE_LIMIT_VOLUME]
var/max_w_class = WEIGHT_CLASS_SMALL
/// Max combined w_class. Applies to [STORAGE_LIMIT_COMBINED_W_CLASS]
var/max_combined_w_class = WEIGHT_CLASS_SMALL * 7
/// Max items we can hold. Applies to [STORAGE_LIMIT_MAX_ITEMS]
var/max_items = 7
/// Max volume we can hold. Applies to [STORAGE_LIMIT_VOLUME]. Auto scaled on New() if unset.
var/max_volume
var/emp_shielded = FALSE
@@ -39,8 +46,17 @@
var/display_numerical_stacking = FALSE //stack things of the same type and show as a single object with a number.
var/obj/screen/storage/boxes //storage display object
var/obj/screen/close/closer //close button object
/// "legacy"/default view mode's storage "boxes"
var/obj/screen/storage/boxes/ui_boxes
/// New volumetric storage display mode's left side
var/obj/screen/storage/left/ui_left
/// New volumetric storage display mode's center 'blocks'
var/obj/screen/storage/continuous/ui_continuous
/// The close button, used in all modes. Frames right side in volumetric mode.
var/obj/screen/storage/close/ui_close
/// Associative list of list(item = screen object) for volumetric storage item screen blocks
var/list/ui_item_blocks
var/current_maxscreensize
var/allow_big_nesting = FALSE //allow storage objects of the same or greater size.
@@ -68,9 +84,6 @@
return COMPONENT_INCOMPATIBLE
if(master)
change_master(master)
boxes = new(null, src)
closer = new(null, src)
orient2hud()
RegisterSignal(parent, COMSIG_CONTAINS_STORAGE, .proc/on_check)
RegisterSignal(parent, COMSIG_IS_STORAGE_LOCKED, .proc/check_locked)
@@ -111,8 +124,15 @@
/datum/component/storage/Destroy()
close_all()
QDEL_NULL(boxes)
QDEL_NULL(closer)
QDEL_NULL(ui_boxes)
QDEL_NULL(ui_close)
QDEL_NULL(ui_continuous)
QDEL_NULL(ui_left)
// DO NOT USE QDEL_LIST_ASSOC.
if(ui_item_blocks)
for(var/i in ui_item_blocks)
qdel(ui_item_blocks[i]) //qdel the screen object not the item
ui_item_blocks.Cut()
LAZYCLEARLIST(is_using)
return ..()
@@ -286,7 +306,7 @@
if(!_target)
_target = get_turf(parent)
if(usr)
hide_from(usr)
ui_hide(usr)
var/list/contents = contents()
var/atom/real_location = real_location()
for(var/obj/item/I in contents)
@@ -300,106 +320,8 @@
if(check_locked())
close_all()
/datum/component/storage/proc/_process_numerical_display()
. = list()
for(var/obj/item/I in accessible_items())
if(QDELETED(I))
continue
if(!.[I.type])
.[I.type] = new /datum/numbered_display(I, 1)
else
var/datum/numbered_display/ND = .[I.type]
ND.number++
. = sortTim(., /proc/cmp_numbered_displays_name_asc, associative = TRUE)
//This proc determines the size of the inventory to be displayed. Please touch it only if you know what you're doing.
/datum/component/storage/proc/orient2hud(mob/user, maxcolumns)
var/list/accessible_contents = accessible_items()
var/adjusted_contents = length(accessible_contents)
//Numbered contents display
var/list/datum/numbered_display/numbered_contents
if(display_numerical_stacking)
numbered_contents = _process_numerical_display()
adjusted_contents = numbered_contents.len
var/columns = CLAMP(max_items, 1, maxcolumns ? maxcolumns : screen_max_columns)
var/rows = CLAMP(CEILING(adjusted_contents / columns, 1), 1, screen_max_rows)
standard_orient_objs(rows, columns, numbered_contents)
//This proc draws out the inventory and places the items on it. It uses the standard position.
/datum/component/storage/proc/standard_orient_objs(rows, cols, list/obj/item/numerical_display_contents)
boxes.screen_loc = "[screen_start_x]:[screen_pixel_x],[screen_start_y]:[screen_pixel_y] to [screen_start_x+cols-1]:[screen_pixel_x],[screen_start_y+rows-1]:[screen_pixel_y]"
var/cx = screen_start_x
var/cy = screen_start_y
if(islist(numerical_display_contents))
for(var/type in numerical_display_contents)
var/datum/numbered_display/ND = numerical_display_contents[type]
ND.sample_object.mouse_opacity = MOUSE_OPACITY_OPAQUE
ND.sample_object.screen_loc = "[cx]:[screen_pixel_x],[cy]:[screen_pixel_y]"
ND.sample_object.maptext = "<font color='white'>[(ND.number > 1)? "[ND.number]" : ""]</font>"
ND.sample_object.layer = ABOVE_HUD_LAYER
ND.sample_object.plane = ABOVE_HUD_PLANE
cx++
if(cx - screen_start_x >= cols)
cx = screen_start_x
cy++
if(cy - screen_start_y >= rows)
break
else
for(var/obj/O in accessible_items())
if(QDELETED(O))
continue
O.mouse_opacity = MOUSE_OPACITY_OPAQUE //This is here so storage items that spawn with contents correctly have the "click around item to equip"
O.screen_loc = "[cx]:[screen_pixel_x],[cy]:[screen_pixel_y]"
O.maptext = ""
O.layer = ABOVE_HUD_LAYER
O.plane = ABOVE_HUD_PLANE
cx++
if(cx - screen_start_x >= cols)
cx = screen_start_x
cy++
if(cy - screen_start_y >= rows)
break
closer.screen_loc = "[screen_start_x + cols]:[screen_pixel_x],[screen_start_y]:[screen_pixel_y]"
/datum/component/storage/proc/show_to(mob/M, set_screen_size = TRUE)
if(!M.client)
return FALSE
var/list/cview = getviewsize(M.client.view)
var/maxallowedscreensize = cview[1]-8
if(set_screen_size)
current_maxscreensize = maxallowedscreensize
else if(current_maxscreensize)
maxallowedscreensize = current_maxscreensize
if(M.active_storage != src && (M.stat == CONSCIOUS))
for(var/obj/item/I in accessible_items())
if(I.on_found(M))
return FALSE
if(M.active_storage)
M.active_storage.hide_from(M)
orient2hud(M, (isliving(M) ? maxallowedscreensize : 7))
M.client.screen |= boxes
M.client.screen |= closer
M.client.screen |= accessible_items()
M.active_storage = src
LAZYOR(is_using, M)
return TRUE
/datum/component/storage/proc/hide_from(mob/M)
if(!M.client)
return TRUE
var/atom/real_location = real_location()
M.client.screen -= boxes
M.client.screen -= closer
M.client.screen -= real_location.contents
if(M.active_storage == src)
M.active_storage = null
LAZYREMOVE(is_using, M)
return TRUE
/datum/component/storage/proc/close(mob/M)
hide_from(M)
ui_hide(M)
/datum/component/storage/proc/close_all()
. = FALSE
@@ -418,25 +340,6 @@
var/datum/component/storage/concrete/master = master()
master.emp_act(source, severity)
//This proc draws out the inventory and places the items on it. tx and ty are the upper left tile and mx, my are the bottm right.
//The numbers are calculated from the bottom-left The bottom-left slot being 1,1.
/datum/component/storage/proc/orient_objs(tx, ty, mx, my)
var/atom/real_location = real_location()
var/cx = tx
var/cy = ty
boxes.screen_loc = "[tx]:,[ty] to [mx],[my]"
for(var/obj/O in real_location)
if(QDELETED(O))
continue
O.screen_loc = "[cx],[cy]"
O.layer = ABOVE_HUD_LAYER
O.plane = ABOVE_HUD_PLANE
cx++
if(cx > mx)
cx = tx
cy--
closer.screen_loc = "[mx+1],[my]"
//Resets something that is being removed from storage.
/datum/component/storage/proc/_removal_reset(atom/movable/thing)
if(!istype(thing))
@@ -448,6 +351,9 @@
/datum/component/storage/proc/_remove_and_refresh(datum/source, atom/movable/thing)
_removal_reset(thing)
if(LAZYACCESS(ui_item_blocks, thing))
qdel(ui_item_blocks[thing])
ui_item_blocks -= thing
refresh_mob_views()
//Call this proc to handle the removal of an item from the storage item. The item will be moved to the new_location target, if that is null it's being deleted
@@ -462,7 +368,7 @@
/datum/component/storage/proc/refresh_mob_views()
var/list/seeing = can_see_contents()
for(var/i in seeing)
show_to(i)
ui_show(i)
return TRUE
/datum/component/storage/proc/can_see_contents()
@@ -559,7 +465,7 @@
A.add_fingerprint(M)
if(!force && (check_locked(null, M) || !M.CanReach(parent, view_only = TRUE)))
return FALSE
show_to(M, !ghost)
ui_show(M, !ghost)
/datum/component/storage/proc/mousedrop_receive(datum/source, atom/movable/O, mob/M)
if(isitem(O))
@@ -587,10 +493,6 @@
if(M && !stop_messages)
host.add_fingerprint(M)
return FALSE
if(real_location.contents.len >= max_items)
if(!stop_messages)
to_chat(M, "<span class='warning'>[host] is full, make some space!</span>")
return FALSE //Storage item is full
if(length(can_hold))
if(!is_type_in_typecache(I, can_hold))
if(!stop_messages)
@@ -600,17 +502,34 @@
if(!stop_messages)
to_chat(M, "<span class='warning'>[host] cannot hold [I]!</span>")
return FALSE
if(I.w_class > max_w_class)
if(!stop_messages)
to_chat(M, "<span class='warning'>[I] is too big for [host]!</span>")
return FALSE
var/sum_w_class = I.w_class
for(var/obj/item/_I in real_location)
sum_w_class += _I.w_class //Adds up the combined w_classes which will be in the storage item if the item is added to it.
if(sum_w_class > max_combined_w_class)
if(!stop_messages)
to_chat(M, "<span class='warning'>[I] won't fit in [host], make some space!</span>")
return FALSE
// STORAGE LIMITS
if(storage_flags & STORAGE_LIMIT_MAX_ITEMS)
if(real_location.contents.len >= max_items)
if(!stop_messages)
to_chat(M, "<span class='warning'>[host] has too many things in it, make some space!</span>")
return FALSE //Storage item is full
if(storage_flags & STORAGE_LIMIT_MAX_W_CLASS)
if(I.w_class > max_w_class)
if(!stop_messages)
to_chat(M, "<span class='warning'>[I] is too long for [host]!</span>")
return FALSE
if(storage_flags & STORAGE_LIMIT_COMBINED_W_CLASS)
var/sum_w_class = I.w_class
for(var/obj/item/_I in real_location)
sum_w_class += _I.w_class //Adds up the combined w_classes which will be in the storage item if the item is added to it.
if(sum_w_class > max_combined_w_class)
if(!stop_messages)
to_chat(M, "<span class='warning'>[I] won't fit in [host], make some space!</span>")
return FALSE
if(storage_flags & STORAGE_LIMIT_VOLUME)
var/sum_volume = I.get_w_volume()
for(var/obj/item/_I in real_location)
sum_volume += _I.get_w_volume()
if(sum_volume > get_max_volume())
if(!stop_messages)
to_chat(M, "<span class='warning'>[I] is too spacious to fit in [host], make some space!</span>")
return FALSE
/////////////////
if(isitem(host))
var/obj/item/IP = host
var/datum/component/storage/STR_I = I.GetComponent(/datum/component/storage)
@@ -742,7 +661,7 @@
if(A.loc == user)
. = COMPONENT_NO_ATTACK_HAND
if(!check_locked(source, user, TRUE))
show_to(user)
ui_show(user)
A.do_jiggle()
/datum/component/storage/proc/signal_on_pickup(datum/source, mob/user)
@@ -761,7 +680,7 @@
return do_quick_empty(loctarget)
/datum/component/storage/proc/signal_hide_attempt(datum/source, mob/target)
return hide_from(target)
return ui_hide(target)
/datum/component/storage/proc/on_alt_click(datum/source, mob/user)
if(!isliving(user) || !user.CanReach(parent))
@@ -790,7 +709,7 @@
user.visible_message("<span class='warning'>[user] draws [I] from [parent]!</span>", "<span class='notice'>You draw [I] from [parent].</span>")
return TRUE
/datum/component/storage/proc/action_trigger(datum/signal_source, datum/action/source)
/datum/component/storage/proc/action_trigger(datum/action/source, obj/target)
gather_mode_switch(source.owner)
return COMPONENT_ACTION_BLOCK_TRIGGER
@@ -803,3 +722,9 @@
to_chat(user, "[parent] now picks up all items in a tile at once.")
if(COLLECT_ONE)
to_chat(user, "[parent] now picks up one item at a time.")
/**
* Gets our max volume
*/
/datum/component/storage/proc/get_max_volume()
return max_volume || AUTO_SCALE_STORAGE_VOLUME(max_w_class, max_combined_w_class)
+293
View File
@@ -0,0 +1,293 @@
/**
* Generates a list of numbered_display datums for the numerical display system.
*/
/datum/component/storage/proc/_process_numerical_display()
. = list()
for(var/obj/item/I in accessible_items())
if(QDELETED(I))
continue
if(!.[I.type])
.[I.type] = new /datum/numbered_display(I, 1)
else
var/datum/numbered_display/ND = .[I.type]
ND.number++
. = sortTim(., /proc/cmp_numbered_displays_name_asc, associative = TRUE)
/**
* Orients all objects in legacy mode, and returns the objects to show to the user.
*/
/datum/component/storage/proc/orient2hud_legacy(mob/user, maxcolumns)
. = list()
var/list/accessible_contents = accessible_items()
var/adjusted_contents = length(accessible_contents)
//Numbered contents display
var/list/datum/numbered_display/numbered_contents
if(display_numerical_stacking)
numbered_contents = _process_numerical_display()
adjusted_contents = numbered_contents.len
var/columns = CLAMP(max_items, 1, maxcolumns ? maxcolumns : screen_max_columns)
var/rows = CLAMP(CEILING(adjusted_contents / columns, 1), 1, screen_max_rows)
// First, boxes.
ui_boxes = get_ui_boxes()
ui_boxes.screen_loc = "[screen_start_x]:[screen_pixel_x],[screen_start_y]:[screen_pixel_y] to [screen_start_x+columns-1]:[screen_pixel_x],[screen_start_y+rows-1]:[screen_pixel_y]"
. += ui_boxes
// Then, closer.
ui_close = get_ui_close()
ui_close.screen_loc = "[screen_start_x + columns]:[screen_pixel_x],[screen_start_y]:[screen_pixel_y]"
. += ui_close
// Then orient the actual items.
var/cx = screen_start_x
var/cy = screen_start_y
if(islist(numbered_contents))
for(var/type in numbered_contents)
var/datum/numbered_display/ND = numbered_contents[type]
ND.sample_object.mouse_opacity = MOUSE_OPACITY_OPAQUE
ND.sample_object.screen_loc = "[cx]:[screen_pixel_x],[cy]:[screen_pixel_y]"
ND.sample_object.maptext = "<font color='white'>[(ND.number > 1)? "[ND.number]" : ""]</font>"
ND.sample_object.layer = ABOVE_HUD_LAYER
ND.sample_object.plane = ABOVE_HUD_PLANE
. += ND.sample_object
cx++
if(cx - screen_start_x >= columns)
cx = screen_start_x
cy++
if(cy - screen_start_y >= rows)
break
else
for(var/obj/O in accessible_items())
if(QDELETED(O))
continue
O.mouse_opacity = MOUSE_OPACITY_OPAQUE //This is here so storage items that spawn with contents correctly have the "click around item to equip"
O.screen_loc = "[cx]:[screen_pixel_x],[cy]:[screen_pixel_y]"
O.maptext = ""
O.layer = ABOVE_HUD_LAYER
O.plane = ABOVE_HUD_PLANE
. += O
cx++
if(cx - screen_start_x >= columns)
cx = screen_start_x
cy++
if(cy - screen_start_y >= rows)
break
/**
* Orients all objects in .. volumetric mode. Does not support numerical display!
*/
/datum/component/storage/proc/orient2hud_volumetric(mob/user, maxcolumns)
. = list()
// Generate ui_item_blocks for missing ones and render+orient.
var/list/atom/contents = accessible_items()
// our volume
var/our_volume = get_max_volume()
var/horizontal_pixels = (maxcolumns * world.icon_size) - (VOLUMETRIC_STORAGE_EDGE_PADDING * 2)
var/max_horizontal_pixels = horizontal_pixels * screen_max_rows
// sigh loopmania time
var/used = 0
// define outside for performance
var/volume
var/list/volume_by_item = list()
var/list/percentage_by_item = list()
for(var/obj/item/I in contents)
volume = I.get_w_volume()
used += volume
volume_by_item[I] = volume
percentage_by_item[I] = volume / get_max_volume()
var/padding_pixels = ((length(percentage_by_item) - 1) * VOLUMETRIC_STORAGE_ITEM_PADDING) + VOLUMETRIC_STORAGE_EDGE_PADDING * 2
var/min_pixels = (MINIMUM_PIXELS_PER_ITEM * length(percentage_by_item)) + padding_pixels
// do the check for fallback for when someone has too much gamer gear
if((min_pixels) > (max_horizontal_pixels + 4)) // 4 pixel grace zone
to_chat(user, "<span class='warning'>[parent] was showed to you in legacy mode due to your items overrunning the three row limit! Consider not carrying too much or bugging a maintainer to raise this limit!</span>")
return orient2hud_legacy(user, maxcolumns)
// after this point we are sure we can somehow fit all items into our max number of rows.
// determine rows
var/rows = CLAMP(CEILING(min_pixels / horizontal_pixels, 1), 1, screen_max_rows)
var/overrun = FALSE
if(used > our_volume)
// congratulations we are now in overrun mode. everything will be crammed to minimum storage pixels.
to_chat(user, "<span class='warning'>[parent] rendered in overrun mode due to more items inside than the maximum volume supports.</span>")
overrun = TRUE
// how much we are using
var/using_horizontal_pixels = horizontal_pixels * rows
// item padding
using_horizontal_pixels -= padding_pixels
// define outside for marginal performance boost
var/obj/item/I
// start at this pixel from screen_start_x.
var/current_pixel = VOLUMETRIC_STORAGE_EDGE_PADDING
var/row = 1
LAZYINITLIST(ui_item_blocks)
for(var/i in percentage_by_item)
I = i
var/percent = percentage_by_item[I]
if(!ui_item_blocks[I])
ui_item_blocks[I] = new /obj/screen/storage/volumetric_box/center(null, src, I)
var/obj/screen/storage/volumetric_box/center/B = ui_item_blocks[I]
var/pixels_to_use = overrun? MINIMUM_PIXELS_PER_ITEM : max(using_horizontal_pixels * percent, MINIMUM_PIXELS_PER_ITEM)
var/addrow = FALSE
if(CEILING(pixels_to_use, 1) >= FLOOR(horizontal_pixels - current_pixel - VOLUMETRIC_STORAGE_EDGE_PADDING, 1))
pixels_to_use = horizontal_pixels - current_pixel - VOLUMETRIC_STORAGE_EDGE_PADDING
addrow = TRUE
// now that we have pixels_to_use, place our thing and add it to the returned list.
B.screen_loc = I.screen_loc = "[screen_start_x]:[round(current_pixel + (pixels_to_use * 0.5) + VOLUMETRIC_STORAGE_ITEM_PADDING, 1)],[screen_start_y+row-1]:[screen_pixel_y]"
// add the used pixels to pixel after we place the object
current_pixel += pixels_to_use + VOLUMETRIC_STORAGE_ITEM_PADDING
// set various things
B.set_pixel_size(pixels_to_use)
B.layer = VOLUMETRIC_STORAGE_BOX_LAYER
B.plane = VOLUMETRIC_STORAGE_BOX_PLANE
B.name = I.name
I.mouse_opacity = MOUSE_OPACITY_ICON
I.maptext = ""
I.layer = VOLUMETRIC_STORAGE_ITEM_LAYER
I.plane = VOLUMETRIC_STORAGE_ITEM_PLANE
// finally add our things.
. += B.on_screen_objects()
. += I
// go up a row if needed
if(addrow)
row++
current_pixel = VOLUMETRIC_STORAGE_EDGE_PADDING
// Then, continuous section.
ui_continuous = get_ui_continuous()
ui_continuous.screen_loc = "[screen_start_x]:[screen_pixel_x],[screen_start_y]:[screen_pixel_y] to [screen_start_x+maxcolumns-1]:[screen_pixel_x],[screen_start_y+rows-1]:[screen_pixel_y]"
. += ui_continuous
// Then, left.
ui_left = get_ui_left()
ui_left.screen_loc = "[screen_start_x]:[screen_pixel_x - 2],[screen_start_y]:[screen_pixel_y] to [screen_start_x]:[screen_pixel_x - 2],[screen_start_y+rows-1]:[screen_pixel_y]"
. += ui_left
// Then, closer, which is also our right element.
ui_close = get_ui_close()
ui_close.screen_loc = "[screen_start_x + maxcolumns]:[screen_pixel_x],[screen_start_y]:[screen_pixel_y] to [screen_start_x + maxcolumns]:[screen_pixel_x],[screen_start_y+rows-1]:[screen_pixel_y]"
. += ui_close
/**
* Shows our UI to a mob.
*/
/datum/component/storage/proc/ui_show(mob/M, set_screen_size = TRUE)
if(!M.client)
return FALSE
var/list/cview = getviewsize(M.client.view)
// in tiles
var/maxallowedscreensize = cview[1]-8
if(set_screen_size)
current_maxscreensize = maxallowedscreensize
else if(current_maxscreensize)
maxallowedscreensize = current_maxscreensize
// we got screen size, register signal
RegisterSignal(M, COMSIG_MOB_CLIENT_LOGOUT, .proc/on_logout, override = TRUE)
if(M.active_storage != src)
if(M.active_storage)
M.active_storage.ui_hide(M)
M.active_storage = src
LAZYOR(is_using, M)
if(volumetric_ui())
//new volumetric ui bay-style
M.client.screen |= orient2hud_volumetric(M, maxallowedscreensize)
else
//old ui
M.client.screen |= orient2hud_legacy(M, maxallowedscreensize)
return TRUE
/**
* VV hooked to ensure no lingering screen objects.
*/
/datum/component/storage/vv_edit_var(var_name, var_value)
var/list/old
if(var_name == NAMEOF(src, storage_flags))
old = is_using.Copy()
for(var/i in is_using)
ui_hide(i)
. = ..()
if(old)
for(var/i in old)
ui_show(i)
/**
* Proc triggered by signal to ensure logging out clients don't linger.
*/
/datum/component/storage/proc/on_logout(datum/source, client/C)
ui_hide(source)
/**
* Hides our UI from a mob
*/
/datum/component/storage/proc/ui_hide(mob/M)
if(!M.client)
return TRUE
UnregisterSignal(M, COMSIG_MOB_CLIENT_LOGOUT)
M.client.screen -= list(ui_boxes, ui_close, ui_left, ui_continuous) + get_ui_item_objects_hide()
if(M.active_storage == src)
M.active_storage = null
LAZYREMOVE(is_using, M)
return TRUE
/**
* Returns TRUE if we are using volumetric UI instead of box UI
*/
/datum/component/storage/proc/volumetric_ui()
var/atom/real_location = real_location()
return (storage_flags & STORAGE_LIMIT_VOLUME) && (length(real_location.contents) <= MAXIMUM_VOLUMETRIC_ITEMS) && !display_numerical_stacking
/**
* Gets the ui item objects to ui_hide.
*/
/datum/component/storage/proc/get_ui_item_objects_hide()
if(!volumetric_ui())
var/atom/real_location = real_location()
return real_location.contents
else
. = list()
for(var/i in ui_item_blocks)
// get both the box and the item
. += ui_item_blocks[i]
. += i
/**
* Gets our ui_boxes, making it if it doesn't exist.
*/
/datum/component/storage/proc/get_ui_boxes()
if(!ui_boxes)
ui_boxes = new(null, src)
return ui_boxes
/**
* Gets our ui_left, making it if it doesn't exist.
*/
/datum/component/storage/proc/get_ui_left()
if(!ui_left)
ui_left = new(null, src)
return ui_left
/**
* Gets our ui_close, making it if it doesn't exist.
*/
/datum/component/storage/proc/get_ui_close()
if(!ui_close)
ui_close = new(null, src)
return ui_close
/**
* Gets our ui_continuous, making it if it doesn't exist.
*/
/datum/component/storage/proc/get_ui_continuous()
if(!ui_continuous)
ui_continuous = new(null, src)
return ui_continuous
+1 -1
View File
@@ -18,7 +18,7 @@
UnregisterSignal(parent, list(COMSIG_ITEM_EQUIPPED, COMSIG_ITEM_DROPPED))
unmodify()
/datum/component/fantasy/Destroy()
/datum/component/tactical/Destroy()
unmodify()
return ..()

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