Merge branch 'master' of https://github.com/Citadel-Station-13/Citadel-Station-13 into Ghommie-cit667
This commit is contained in:
@@ -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 }}
|
||||
@@ -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,
|
||||
|
||||
@@ -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
|
||||
},
|
||||
|
||||
+81
-145
@@ -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
|
||||
|
||||
@@ -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" = (
|
||||
|
||||
@@ -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{
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
#define FORCE_MAP "_maps/cogstation.json"
|
||||
@@ -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"
|
||||
}
|
||||
}
|
||||
@@ -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,
|
||||
@@ -11677,7 +11677,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 +13056,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 +13944,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{
|
||||
@@ -21467,7 +21467,7 @@
|
||||
/turf/open/floor/plating,
|
||||
/area/maintenance/port)
|
||||
"aZt" = (
|
||||
/obj/structure/toilet{
|
||||
/obj/structure/toilet/secret/low_loot{
|
||||
dir = 4
|
||||
},
|
||||
/obj/structure/mirror{
|
||||
@@ -55549,18 +55549,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 +55621,7 @@
|
||||
},
|
||||
/area/crew_quarters/theatre)
|
||||
"iTU" = (
|
||||
/obj/structure/piano{
|
||||
/obj/structure/musician/piano{
|
||||
icon_state = "piano"
|
||||
},
|
||||
/turf/open/floor/wood,
|
||||
@@ -56816,7 +56804,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 +57112,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
|
||||
@@ -57504,7 +57483,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,
|
||||
@@ -60202,17 +60181,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 +60503,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 +60606,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 +69027,7 @@ aaa
|
||||
aaa
|
||||
aoV
|
||||
aaa
|
||||
iDS
|
||||
aaa
|
||||
aaa
|
||||
aaa
|
||||
aoV
|
||||
@@ -69323,11 +69282,11 @@ aaa
|
||||
aaa
|
||||
aaa
|
||||
aaa
|
||||
asE
|
||||
asE
|
||||
nGI
|
||||
asE
|
||||
asE
|
||||
aaa
|
||||
aaa
|
||||
aaa
|
||||
aaa
|
||||
aaa
|
||||
aoV
|
||||
aaa
|
||||
aaa
|
||||
@@ -69581,9 +69540,9 @@ aaa
|
||||
aaa
|
||||
aaa
|
||||
aaf
|
||||
awW
|
||||
auP
|
||||
awW
|
||||
aaa
|
||||
aaa
|
||||
aaa
|
||||
aaf
|
||||
kls
|
||||
aaa
|
||||
@@ -69839,8 +69798,8 @@ aaa
|
||||
aaa
|
||||
arB
|
||||
arB
|
||||
xQG
|
||||
asE
|
||||
arB
|
||||
arB
|
||||
aAC
|
||||
aaf
|
||||
aaa
|
||||
@@ -70095,7 +70054,7 @@ aaa
|
||||
aaa
|
||||
aaa
|
||||
arB
|
||||
xfS
|
||||
awZ
|
||||
ayk
|
||||
awW
|
||||
aAD
|
||||
@@ -73439,7 +73398,7 @@ ayl
|
||||
aIK
|
||||
ayl
|
||||
beM
|
||||
asE
|
||||
arB
|
||||
aaa
|
||||
aaa
|
||||
aaa
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -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
|
||||
@@ -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
|
||||
|
||||
@@ -56558,7 +56558,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 +56908,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 +56941,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 +59908,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{
|
||||
@@ -62988,7 +62988,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{
|
||||
|
||||
@@ -1031,7 +1031,6 @@
|
||||
"acK" = (
|
||||
/obj/structure/sign/warning/vacuum/external{
|
||||
pixel_x = 30;
|
||||
pixel_y = 0
|
||||
},
|
||||
/turf/open/floor/plating,
|
||||
/area/science/mixing)
|
||||
@@ -1069,7 +1068,6 @@
|
||||
desc = "In Space, no one can hear you scream, especially if the microphone has been disabled.";
|
||||
name = "Prison Intercom";
|
||||
pixel_x = 32;
|
||||
pixel_y = 0;
|
||||
prison_radio = 1
|
||||
},
|
||||
/turf/open/floor/plasteel/dark,
|
||||
@@ -1638,7 +1636,6 @@
|
||||
"aeh" = (
|
||||
/obj/structure/table,
|
||||
/obj/machinery/microwave{
|
||||
pixel_x = 0;
|
||||
pixel_y = 6
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
@@ -1999,7 +1996,6 @@
|
||||
},
|
||||
/obj/machinery/status_display/ai{
|
||||
pixel_x = -32;
|
||||
pixel_y = 0
|
||||
},
|
||||
/turf/open/floor/plasteel/white,
|
||||
/area/science/mixing)
|
||||
@@ -3037,7 +3033,7 @@
|
||||
/turf/open/floor/plasteel,
|
||||
/area/security/prison)
|
||||
"agR" = (
|
||||
/obj/structure/toilet{
|
||||
/obj/structure/toilet/secret/prison{
|
||||
dir = 8
|
||||
},
|
||||
/turf/open/floor/plasteel/freezer,
|
||||
@@ -3143,7 +3139,6 @@
|
||||
/obj/item/assembly/flash/handheld,
|
||||
/obj/item/reagent_containers/spray/pepper,
|
||||
/obj/item/radio/intercom{
|
||||
pixel_x = 0;
|
||||
pixel_y = 28
|
||||
},
|
||||
/obj/machinery/light/small{
|
||||
@@ -3438,7 +3433,6 @@
|
||||
/obj/item/radio/intercom{
|
||||
dir = 1;
|
||||
name = "Station Intercom";
|
||||
pixel_x = 0;
|
||||
pixel_y = -28
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
@@ -3489,7 +3483,6 @@
|
||||
/obj/item/radio/intercom{
|
||||
desc = "In Space, no one can hear you scream, especially if the microphone has been disabled.";
|
||||
name = "Prison Intercom";
|
||||
pixel_x = 0;
|
||||
pixel_y = -32;
|
||||
prison_radio = 1
|
||||
},
|
||||
@@ -4496,7 +4489,6 @@
|
||||
department = "Robotics";
|
||||
departmentType = 2;
|
||||
name = "Robotics RC";
|
||||
pixel_x = 0;
|
||||
pixel_y = 31;
|
||||
receive_ore_updates = 1
|
||||
},
|
||||
@@ -4507,7 +4499,6 @@
|
||||
/obj/machinery/mecha_part_fabricator,
|
||||
/obj/item/radio/intercom{
|
||||
dir = 2;
|
||||
pixel_x = 0;
|
||||
pixel_y = 28
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
@@ -4757,7 +4748,6 @@
|
||||
icon_state = "sink_alt";
|
||||
name = "old sink";
|
||||
pixel_x = 15;
|
||||
pixel_y = 0
|
||||
},
|
||||
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3,
|
||||
/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1,
|
||||
@@ -5340,7 +5330,6 @@
|
||||
/obj/item/radio/intercom{
|
||||
dir = 1;
|
||||
name = "Station Intercom";
|
||||
pixel_x = 0;
|
||||
pixel_y = -28
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
@@ -6021,7 +6010,6 @@
|
||||
/obj/item/radio/intercom{
|
||||
dir = 2;
|
||||
pixel_x = -29;
|
||||
pixel_y = 0
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
/area/science/xenobiology)
|
||||
@@ -6487,7 +6475,6 @@
|
||||
},
|
||||
/obj/item/grenade/barrier{
|
||||
pixel_x = 6;
|
||||
pixel_y = 0
|
||||
},
|
||||
/obj/effect/turf_decal/tile/red{
|
||||
dir = 1
|
||||
@@ -7569,7 +7556,6 @@
|
||||
idDoor = "xeno_airlock_exterior";
|
||||
idSelf = "xeno_airlock_control";
|
||||
name = "Access Button";
|
||||
pixel_x = 0;
|
||||
pixel_y = 25
|
||||
},
|
||||
/obj/machinery/door/firedoor,
|
||||
@@ -8301,7 +8287,6 @@
|
||||
dir = 4;
|
||||
name = "Xenobiology APC";
|
||||
pixel_x = 24;
|
||||
pixel_y = 0
|
||||
},
|
||||
/obj/effect/turf_decal/trimline/purple/filled/line{
|
||||
icon_state = "trimline_fill";
|
||||
@@ -9280,7 +9265,6 @@
|
||||
/obj/item/radio/intercom{
|
||||
dir = 1;
|
||||
name = "Station Intercom";
|
||||
pixel_x = 0;
|
||||
pixel_y = -28
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
@@ -9496,7 +9480,6 @@
|
||||
/obj/item/radio/intercom{
|
||||
dir = 1;
|
||||
name = "Station Intercom";
|
||||
pixel_x = 0;
|
||||
pixel_y = -28
|
||||
},
|
||||
/turf/open/floor/plasteel/dark,
|
||||
@@ -11043,7 +11026,6 @@
|
||||
"aut" = (
|
||||
/obj/item/radio/intercom{
|
||||
name = "Station Intercom";
|
||||
pixel_x = 0;
|
||||
pixel_y = 26
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
@@ -11345,7 +11327,6 @@
|
||||
/obj/item/radio/intercom{
|
||||
dir = 1;
|
||||
name = "Station Intercom";
|
||||
pixel_x = 0;
|
||||
pixel_y = -28
|
||||
},
|
||||
/turf/open/floor/plasteel/white,
|
||||
@@ -11563,7 +11544,6 @@
|
||||
dir = 4;
|
||||
name = "Research Firing Range APC";
|
||||
pixel_x = 28;
|
||||
pixel_y = 0
|
||||
},
|
||||
/obj/item/target,
|
||||
/obj/item/target,
|
||||
@@ -11815,7 +11795,6 @@
|
||||
},
|
||||
/obj/machinery/status_display/ai{
|
||||
pixel_x = 32;
|
||||
pixel_y = 0
|
||||
},
|
||||
/obj/effect/turf_decal/trimline/neutral/filled/line{
|
||||
icon_state = "trimline_fill";
|
||||
@@ -12295,7 +12274,6 @@
|
||||
/obj/item/radio/intercom{
|
||||
dir = 1;
|
||||
name = "Station Intercom";
|
||||
pixel_x = 0;
|
||||
pixel_y = -28
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
@@ -12779,7 +12757,6 @@
|
||||
/obj/item/reagent_containers/syringe,
|
||||
/obj/machinery/newscaster{
|
||||
pixel_x = -32;
|
||||
pixel_y = 0
|
||||
},
|
||||
/turf/open/floor/plasteel/freezer,
|
||||
/area/security/prison)
|
||||
@@ -12905,7 +12882,6 @@
|
||||
/obj/item/radio/intercom{
|
||||
dir = 1;
|
||||
name = "Station Intercom";
|
||||
pixel_x = 0;
|
||||
pixel_y = -28
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
@@ -12954,7 +12930,6 @@
|
||||
/obj/machinery/requests_console{
|
||||
department = "Security";
|
||||
name = "Security RC";
|
||||
pixel_x = 0;
|
||||
pixel_y = -32
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
@@ -13201,7 +13176,6 @@
|
||||
/obj/structure/bed,
|
||||
/obj/machinery/flasher{
|
||||
id = "insaneflash";
|
||||
pixel_x = 0;
|
||||
pixel_y = -26
|
||||
},
|
||||
/turf/open/floor/plasteel/freezer,
|
||||
@@ -13696,7 +13670,6 @@
|
||||
areastring = "/area/crew_quarters/heads/hos";
|
||||
dir = 1;
|
||||
name = "Head of Security's Office APC";
|
||||
pixel_x = 0;
|
||||
pixel_y = 25
|
||||
},
|
||||
/obj/structure/cable{
|
||||
@@ -13712,7 +13685,6 @@
|
||||
},
|
||||
/obj/machinery/recharger,
|
||||
/obj/structure/reagent_dispensers/peppertank{
|
||||
pixel_x = 0;
|
||||
pixel_y = 30
|
||||
},
|
||||
/turf/open/floor/plasteel/dark,
|
||||
@@ -13779,10 +13751,8 @@
|
||||
id = "hosspace";
|
||||
name = "Space Shutters Control";
|
||||
pixel_x = 25;
|
||||
pixel_y = 0
|
||||
},
|
||||
/obj/machinery/status_display/evac{
|
||||
pixel_x = 0;
|
||||
pixel_y = 32
|
||||
},
|
||||
/turf/open/floor/plasteel/dark,
|
||||
@@ -15659,7 +15629,6 @@
|
||||
/obj/item/radio/intercom{
|
||||
dir = 1;
|
||||
name = "Station Intercom";
|
||||
pixel_x = 0;
|
||||
pixel_y = -28
|
||||
},
|
||||
/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer3{
|
||||
@@ -15732,7 +15701,6 @@
|
||||
/area/crew_quarters/heads/hor)
|
||||
"aBO" = (
|
||||
/obj/item/storage/secure/safe{
|
||||
pixel_x = 0;
|
||||
pixel_y = -32
|
||||
},
|
||||
/obj/structure/table,
|
||||
@@ -16468,7 +16436,6 @@
|
||||
/obj/machinery/iv_drip,
|
||||
/obj/structure/sign/poster/official/cleanliness{
|
||||
pixel_x = 32;
|
||||
pixel_y = 0
|
||||
},
|
||||
/turf/open/floor/plasteel/white,
|
||||
/area/security/brig)
|
||||
@@ -16626,7 +16593,6 @@
|
||||
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3,
|
||||
/obj/machinery/status_display/evac{
|
||||
pixel_x = 32;
|
||||
pixel_y = 0
|
||||
},
|
||||
/obj/effect/turf_decal/trimline/purple/filled/line{
|
||||
icon_state = "trimline_fill";
|
||||
@@ -16891,7 +16857,6 @@
|
||||
},
|
||||
/obj/machinery/status_display/evac{
|
||||
pixel_x = 32;
|
||||
pixel_y = 0
|
||||
},
|
||||
/obj/effect/turf_decal/trimline/neutral/filled/line{
|
||||
icon_state = "trimline_fill";
|
||||
@@ -18008,7 +17973,6 @@
|
||||
/obj/item/radio/intercom{
|
||||
dir = 1;
|
||||
name = "Station Intercom";
|
||||
pixel_x = 0;
|
||||
pixel_y = -28
|
||||
},
|
||||
/turf/open/floor/plasteel/white,
|
||||
@@ -18144,7 +18108,6 @@
|
||||
},
|
||||
/obj/machinery/status_display/evac{
|
||||
pixel_x = 32;
|
||||
pixel_y = 0
|
||||
},
|
||||
/turf/open/floor/plasteel/grimy,
|
||||
/area/hallway/primary/fore)
|
||||
@@ -20094,7 +20057,6 @@
|
||||
/obj/machinery/requests_console{
|
||||
department = "Law office";
|
||||
pixel_x = 31;
|
||||
pixel_y = 0
|
||||
},
|
||||
/turf/open/floor/plasteel/grimy,
|
||||
/area/lawoffice)
|
||||
@@ -21261,7 +21223,6 @@
|
||||
/obj/item/radio/intercom{
|
||||
dir = 1;
|
||||
name = "Station Intercom";
|
||||
pixel_x = 0;
|
||||
pixel_y = -28
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
@@ -22103,7 +22064,6 @@
|
||||
/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1,
|
||||
/obj/machinery/light_switch{
|
||||
pixel_x = -28;
|
||||
pixel_y = 0
|
||||
},
|
||||
/turf/open/floor/plasteel/grimy,
|
||||
/area/lawoffice)
|
||||
@@ -22577,7 +22537,6 @@
|
||||
/obj/structure/filingcabinet/chestdrawer,
|
||||
/obj/structure/sign/poster/official/enlist{
|
||||
pixel_x = 32;
|
||||
pixel_y = 0
|
||||
},
|
||||
/obj/effect/turf_decal/tile/red,
|
||||
/obj/effect/turf_decal/tile/neutral{
|
||||
@@ -22701,7 +22660,6 @@
|
||||
/obj/item/radio/intercom{
|
||||
dir = 1;
|
||||
name = "Station Intercom";
|
||||
pixel_x = 0;
|
||||
pixel_y = -28
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
@@ -22727,7 +22685,6 @@
|
||||
dir = 8;
|
||||
name = "Quartermaster's Office APC";
|
||||
pixel_x = -25;
|
||||
pixel_y = 0
|
||||
},
|
||||
/obj/effect/turf_decal/trimline/yellow/filled/line{
|
||||
icon_state = "trimline_fill";
|
||||
@@ -23303,7 +23260,6 @@
|
||||
/obj/item/radio/intercom{
|
||||
dir = 1;
|
||||
name = "Station Intercom";
|
||||
pixel_x = 0;
|
||||
pixel_y = -28
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
@@ -24483,7 +24439,6 @@
|
||||
},
|
||||
/obj/structure/sign/nanotrasen{
|
||||
pixel_x = 32;
|
||||
pixel_y = 0
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
/area/security/brig)
|
||||
@@ -24728,10 +24683,8 @@
|
||||
/obj/machinery/computer/med_data/laptop,
|
||||
/obj/machinery/computer/security/telescreen/entertainment{
|
||||
pixel_x = -32;
|
||||
pixel_y = 0
|
||||
},
|
||||
/obj/structure/extinguisher_cabinet{
|
||||
pixel_x = 0;
|
||||
pixel_y = 29
|
||||
},
|
||||
/obj/machinery/light/small{
|
||||
@@ -25329,7 +25282,6 @@
|
||||
/obj/structure/dresser,
|
||||
/obj/item/radio/intercom{
|
||||
dir = 2;
|
||||
pixel_x = 0;
|
||||
pixel_y = 28
|
||||
},
|
||||
/turf/open/floor/carpet/blue,
|
||||
@@ -26523,7 +26475,6 @@
|
||||
dir = 8;
|
||||
name = "Captain's Office APC";
|
||||
pixel_x = -25;
|
||||
pixel_y = 0
|
||||
},
|
||||
/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{
|
||||
dir = 4
|
||||
@@ -26870,7 +26821,6 @@
|
||||
/obj/item/radio/intercom{
|
||||
dir = 1;
|
||||
name = "Station Intercom";
|
||||
pixel_x = 0;
|
||||
pixel_y = -28
|
||||
},
|
||||
/obj/machinery/computer/bounty{
|
||||
@@ -27825,7 +27775,6 @@
|
||||
/obj/machinery/power/apc/highcap/five_k{
|
||||
dir = 1;
|
||||
name = "Hydroponics APC";
|
||||
pixel_x = 0;
|
||||
pixel_y = 23
|
||||
},
|
||||
/obj/effect/turf_decal/trimline/green/filled/line{
|
||||
@@ -28516,7 +28465,6 @@
|
||||
/obj/item/radio/intercom{
|
||||
dir = 1;
|
||||
name = "Station Intercom";
|
||||
pixel_x = 0;
|
||||
pixel_y = -28
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
@@ -29172,7 +29120,6 @@
|
||||
frequency = 1423;
|
||||
listening = 0;
|
||||
name = "Interrogation Intercom";
|
||||
pixel_x = 0;
|
||||
pixel_y = -24
|
||||
},
|
||||
/obj/effect/turf_decal/tile/neutral{
|
||||
@@ -29313,7 +29260,6 @@
|
||||
},
|
||||
/obj/machinery/newscaster{
|
||||
pixel_x = 32;
|
||||
pixel_y = 0
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
/area/crew_quarters/bar)
|
||||
@@ -30392,7 +30338,7 @@
|
||||
/turf/open/floor/plasteel,
|
||||
/area/crew_quarters/bar/atrium)
|
||||
"bbF" = (
|
||||
/obj/structure/piano,
|
||||
/obj/structure/musician/piano,
|
||||
/obj/structure/window/reinforced{
|
||||
dir = 8
|
||||
},
|
||||
@@ -31413,7 +31359,6 @@
|
||||
"bdK" = (
|
||||
/obj/machinery/requests_console{
|
||||
department = "EVA";
|
||||
pixel_x = 0;
|
||||
pixel_y = 32
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
@@ -31919,7 +31864,6 @@
|
||||
dir = 8;
|
||||
name = "Council Chambers APC";
|
||||
pixel_x = -25;
|
||||
pixel_y = 0
|
||||
},
|
||||
/turf/open/floor/carpet,
|
||||
/area/bridge/meeting_room)
|
||||
@@ -32295,7 +32239,6 @@
|
||||
dir = 8;
|
||||
name = "Cargo Security APC";
|
||||
pixel_x = -25;
|
||||
pixel_y = 0
|
||||
},
|
||||
/obj/machinery/camera{
|
||||
c_tag = "Security Post - Cargo";
|
||||
@@ -33401,7 +33344,6 @@
|
||||
/area/crew_quarters/cafeteria)
|
||||
"bhD" = (
|
||||
/obj/machinery/newscaster{
|
||||
pixel_x = 0;
|
||||
pixel_y = 30
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
@@ -36459,7 +36401,6 @@
|
||||
dir = 8;
|
||||
name = "Gateway APC";
|
||||
pixel_x = -25;
|
||||
pixel_y = 0
|
||||
},
|
||||
/obj/effect/turf_decal/stripes/end{
|
||||
dir = 8
|
||||
@@ -37499,7 +37440,6 @@
|
||||
dir = 1
|
||||
},
|
||||
/obj/item/radio/intercom{
|
||||
pixel_x = 0;
|
||||
pixel_y = -29
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
@@ -38166,7 +38106,6 @@
|
||||
departmentType = 0;
|
||||
name = "Genetics Requests Console";
|
||||
pixel_x = -32;
|
||||
pixel_y = 0
|
||||
},
|
||||
/obj/effect/turf_decal/trimline/blue/filled/line{
|
||||
icon_state = "trimline_fill";
|
||||
@@ -39378,7 +39317,6 @@
|
||||
},
|
||||
/obj/structure/chair,
|
||||
/obj/item/radio/intercom{
|
||||
pixel_x = 0;
|
||||
pixel_y = 26
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
@@ -40778,7 +40716,6 @@
|
||||
departmentType = 2;
|
||||
name = "Science Requests Console";
|
||||
pixel_x = -32;
|
||||
pixel_y = 0;
|
||||
receive_ore_updates = 1
|
||||
},
|
||||
/obj/machinery/camera/autoname{
|
||||
@@ -41468,7 +41405,6 @@
|
||||
/obj/structure/table/wood,
|
||||
/obj/machinery/newscaster{
|
||||
pixel_x = 32;
|
||||
pixel_y = 0
|
||||
},
|
||||
/obj/item/folder,
|
||||
/obj/item/folder,
|
||||
@@ -43797,7 +43733,6 @@
|
||||
dir = 8;
|
||||
name = "Cloning Lab APC";
|
||||
pixel_x = -25;
|
||||
pixel_y = 0
|
||||
},
|
||||
/obj/effect/turf_decal/trimline/blue/filled/line{
|
||||
icon_state = "trimline_fill";
|
||||
@@ -44652,7 +44587,6 @@
|
||||
dir = 4
|
||||
},
|
||||
/obj/machinery/computer/security/telescreen/entertainment{
|
||||
pixel_x = 0;
|
||||
pixel_y = 30
|
||||
},
|
||||
/turf/open/floor/plasteel/cult{
|
||||
@@ -44943,7 +44877,6 @@
|
||||
id = "cmoshutter";
|
||||
name = "CMO Office Shutters";
|
||||
pixel_x = -25;
|
||||
pixel_y = 0;
|
||||
req_access_txt = "40"
|
||||
},
|
||||
/turf/open/floor/plasteel/white,
|
||||
@@ -47007,7 +46940,6 @@
|
||||
department = "Security";
|
||||
departmentType = 5;
|
||||
pixel_x = -30;
|
||||
pixel_y = 0
|
||||
},
|
||||
/obj/effect/turf_decal/trimline/red/filled/line{
|
||||
icon_state = "trimline_fill";
|
||||
@@ -47084,7 +47016,6 @@
|
||||
/obj/machinery/power/apc/highcap/five_k{
|
||||
dir = 1;
|
||||
name = "Central Hall APC";
|
||||
pixel_x = 0;
|
||||
pixel_y = 25
|
||||
},
|
||||
/obj/structure/cable{
|
||||
@@ -47914,7 +47845,6 @@
|
||||
icon_state = "sink_alt";
|
||||
name = "old sink";
|
||||
pixel_x = 15;
|
||||
pixel_y = 0
|
||||
},
|
||||
/turf/open/floor/wood,
|
||||
/area/maintenance/bar)
|
||||
@@ -50049,7 +49979,6 @@
|
||||
/obj/machinery/light/small,
|
||||
/obj/machinery/vending/wallmed{
|
||||
pixel_x = -28;
|
||||
pixel_y = 0
|
||||
},
|
||||
/obj/effect/turf_decal/trimline/blue/filled/line{
|
||||
icon_state = "trimline_fill";
|
||||
@@ -50759,7 +50688,6 @@
|
||||
areastring = "/area/ai_monitored/turret_protected/aisat_interior";
|
||||
dir = 1;
|
||||
name = "MiniSat Antechamber APC";
|
||||
pixel_x = 0;
|
||||
pixel_y = 29
|
||||
},
|
||||
/obj/effect/turf_decal/tile/blue{
|
||||
@@ -52934,7 +52862,6 @@
|
||||
dir = 2;
|
||||
name = "MiniSat Foyer APC";
|
||||
pixel_x = -29;
|
||||
pixel_y = 0
|
||||
},
|
||||
/obj/effect/turf_decal/tile/blue{
|
||||
dir = 8
|
||||
@@ -53002,7 +52929,6 @@
|
||||
dir = 8;
|
||||
name = "MiniSat Exterior APC";
|
||||
pixel_x = -24;
|
||||
pixel_y = 0
|
||||
},
|
||||
/obj/effect/turf_decal/trimline/blue/filled/line{
|
||||
icon_state = "trimline_fill";
|
||||
@@ -53664,7 +53590,6 @@
|
||||
/obj/machinery/requests_console{
|
||||
department = "Tool Storage";
|
||||
departmentType = 0;
|
||||
pixel_x = 0;
|
||||
pixel_y = 30
|
||||
},
|
||||
/obj/item/folder/yellow,
|
||||
@@ -53825,7 +53750,6 @@
|
||||
},
|
||||
/obj/effect/turf_decal/tile/neutral,
|
||||
/obj/machinery/newscaster{
|
||||
pixel_x = 0;
|
||||
pixel_y = 32
|
||||
},
|
||||
/obj/effect/turf_decal/loading_area{
|
||||
@@ -55174,7 +55098,6 @@
|
||||
dir = 8;
|
||||
name = "Tool Storage APC";
|
||||
pixel_x = -25;
|
||||
pixel_y = 0
|
||||
},
|
||||
/obj/effect/turf_decal/tile/brown{
|
||||
dir = 1
|
||||
@@ -55622,7 +55545,6 @@
|
||||
dir = 4;
|
||||
name = "Fore Maintenance APC";
|
||||
pixel_x = 24;
|
||||
pixel_y = 0
|
||||
},
|
||||
/turf/open/floor/plating,
|
||||
/area/maintenance/fore)
|
||||
@@ -55929,7 +55851,6 @@
|
||||
},
|
||||
/obj/structure/sign/directions/evac{
|
||||
dir = 4;
|
||||
pixel_x = 0;
|
||||
pixel_y = 24
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
@@ -56057,7 +55978,6 @@
|
||||
/obj/machinery/announcement_system,
|
||||
/obj/machinery/status_display/ai{
|
||||
pixel_x = 31;
|
||||
pixel_y = 0
|
||||
},
|
||||
/turf/open/floor/carpet,
|
||||
/area/tcommsat/computer)
|
||||
@@ -57109,7 +57029,6 @@
|
||||
/obj/item/radio/intercom{
|
||||
dir = 1;
|
||||
name = "Station Intercom";
|
||||
pixel_x = 0;
|
||||
pixel_y = -28
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
@@ -57391,7 +57310,6 @@
|
||||
},
|
||||
/obj/machinery/status_display/evac{
|
||||
pixel_x = 31;
|
||||
pixel_y = 0
|
||||
},
|
||||
/turf/open/floor/carpet,
|
||||
/area/tcommsat/computer)
|
||||
@@ -57545,7 +57463,6 @@
|
||||
/obj/item/radio/intercom{
|
||||
dir = 1;
|
||||
name = "Station Intercom";
|
||||
pixel_x = 0;
|
||||
pixel_y = -28
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
@@ -57577,7 +57494,6 @@
|
||||
id = "atmos";
|
||||
name = "Atmospherics Lockdown";
|
||||
pixel_x = -38;
|
||||
pixel_y = 0;
|
||||
req_access_txt = "24"
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
@@ -57847,7 +57763,6 @@
|
||||
freerange = 1;
|
||||
name = "Station Intercom (Telecomms)";
|
||||
pixel_x = 30;
|
||||
pixel_y = 0
|
||||
},
|
||||
/turf/open/floor/carpet,
|
||||
/area/tcommsat/computer)
|
||||
@@ -58657,7 +58572,6 @@
|
||||
dir = 4;
|
||||
name = "Chief Engineer's APC";
|
||||
pixel_x = 26;
|
||||
pixel_y = 0
|
||||
},
|
||||
/obj/structure/cable{
|
||||
icon_state = "0-2";
|
||||
@@ -58782,7 +58696,6 @@
|
||||
dir = 8;
|
||||
name = "Locker Room APC";
|
||||
pixel_x = -28;
|
||||
pixel_y = 0
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
/area/crew_quarters/locker)
|
||||
@@ -59393,7 +59306,6 @@
|
||||
dir = 4;
|
||||
name = "Dormitories APC";
|
||||
pixel_x = 24;
|
||||
pixel_y = 0
|
||||
},
|
||||
/obj/structure/cable{
|
||||
icon_state = "0-8"
|
||||
@@ -60076,7 +59988,7 @@
|
||||
/turf/open/floor/plasteel,
|
||||
/area/crew_quarters/fitness/recreation)
|
||||
"ccw" = (
|
||||
/obj/structure/toilet{
|
||||
/obj/structure/toilet/secret/low_loot{
|
||||
dir = 4
|
||||
},
|
||||
/obj/machinery/light/small{
|
||||
@@ -60333,7 +60245,6 @@
|
||||
dir = 4;
|
||||
name = "Chief Medical Officer's Quarters APC";
|
||||
pixel_x = 24;
|
||||
pixel_y = 0
|
||||
},
|
||||
/obj/structure/cable{
|
||||
icon_state = "0-8"
|
||||
@@ -60612,7 +60523,7 @@
|
||||
/turf/open/floor/plating,
|
||||
/area/maintenance/fore)
|
||||
"cdE" = (
|
||||
/obj/structure/toilet{
|
||||
/obj/structure/toilet/secret/low_loot{
|
||||
dir = 4
|
||||
},
|
||||
/obj/effect/landmark/blobstart,
|
||||
@@ -60646,7 +60557,7 @@
|
||||
/turf/open/floor/plasteel/freezer,
|
||||
/area/crew_quarters/toilet)
|
||||
"cdH" = (
|
||||
/obj/structure/toilet{
|
||||
/obj/structure/toilet/secret/low_loot{
|
||||
dir = 8
|
||||
},
|
||||
/obj/machinery/light/small{
|
||||
@@ -60658,7 +60569,6 @@
|
||||
name = "Lock Control";
|
||||
normaldoorcontrol = 1;
|
||||
pixel_x = 25;
|
||||
pixel_y = 0;
|
||||
specialfunctions = 4
|
||||
},
|
||||
/obj/machinery/newscaster{
|
||||
@@ -61078,7 +60988,6 @@
|
||||
/area/maintenance/department/crew_quarters/dorms)
|
||||
"ceK" = (
|
||||
/obj/structure/sign/warning/radiation/rad_area{
|
||||
pixel_x = 0;
|
||||
pixel_y = -32
|
||||
},
|
||||
/turf/open/floor/plating,
|
||||
@@ -61126,7 +61035,6 @@
|
||||
/obj/structure/bed,
|
||||
/obj/machinery/status_display/ai{
|
||||
pixel_x = -32;
|
||||
pixel_y = 0
|
||||
},
|
||||
/turf/open/floor/carpet/blue,
|
||||
/area/crew_quarters/heads/cmo/private)
|
||||
@@ -61599,7 +61507,6 @@
|
||||
areastring = "/area/chapel/main";
|
||||
dir = 1;
|
||||
name = "Chapel APC";
|
||||
pixel_x = 0;
|
||||
pixel_y = 24
|
||||
},
|
||||
/obj/structure/cable{
|
||||
@@ -62561,7 +62468,6 @@
|
||||
"cig" = (
|
||||
/obj/structure/sign/warning/radiation/rad_area{
|
||||
pixel_x = -32;
|
||||
pixel_y = 0
|
||||
},
|
||||
/obj/effect/turf_decal/trimline/yellow/filled/line{
|
||||
icon_state = "trimline_fill";
|
||||
@@ -62922,7 +62828,7 @@
|
||||
},
|
||||
/area/maintenance/aft)
|
||||
"ciL" = (
|
||||
/obj/structure/piano,
|
||||
/obj/structure/musician/piano,
|
||||
/obj/effect/turf_decal/tile/neutral{
|
||||
dir = 1
|
||||
},
|
||||
@@ -63311,7 +63217,6 @@
|
||||
/area/maintenance/aft)
|
||||
"cjC" = (
|
||||
/obj/structure/mirror{
|
||||
pixel_x = 0;
|
||||
pixel_y = -28
|
||||
},
|
||||
/obj/item/lipstick/black,
|
||||
@@ -63650,7 +63555,6 @@
|
||||
/obj/machinery/vending/coffee,
|
||||
/obj/machinery/newscaster{
|
||||
pixel_x = 30;
|
||||
pixel_y = 0
|
||||
},
|
||||
/turf/open/floor/plasteel/dark,
|
||||
/area/crew_quarters/fitness/recreation)
|
||||
@@ -63947,7 +63851,6 @@
|
||||
},
|
||||
/obj/machinery/newscaster{
|
||||
pixel_x = -32;
|
||||
pixel_y = 0
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
/area/crew_quarters/fitness/recreation)
|
||||
@@ -64090,7 +63993,6 @@
|
||||
dir = 1;
|
||||
name = "SMES room APC";
|
||||
pixel_x = -26;
|
||||
pixel_y = 0
|
||||
},
|
||||
/obj/structure/cable{
|
||||
icon_state = "0-2";
|
||||
@@ -64416,7 +64318,6 @@
|
||||
broadcasting = 1;
|
||||
frequency = 1481;
|
||||
name = "Confessional Intercom";
|
||||
pixel_x = 0;
|
||||
pixel_y = -30
|
||||
},
|
||||
/obj/machinery/light/small{
|
||||
@@ -64437,7 +64338,6 @@
|
||||
broadcasting = 1;
|
||||
frequency = 1481;
|
||||
name = "Confessional Intercom";
|
||||
pixel_x = 0;
|
||||
pixel_y = 30
|
||||
},
|
||||
/obj/machinery/light/small{
|
||||
@@ -64949,7 +64849,6 @@
|
||||
dir = 1;
|
||||
name = "Atmospherics APC";
|
||||
pixel_x = -27;
|
||||
pixel_y = 0
|
||||
},
|
||||
/obj/effect/turf_decal/trimline/neutral/filled/line{
|
||||
icon_state = "trimline_fill";
|
||||
@@ -68610,7 +68509,6 @@
|
||||
areastring = "/area/hydroponics/garden";
|
||||
dir = 2;
|
||||
name = "Garden APC";
|
||||
pixel_x = 0;
|
||||
pixel_y = -26
|
||||
},
|
||||
/obj/structure/cable{
|
||||
@@ -69318,7 +69216,6 @@
|
||||
/obj/item/radio/intercom{
|
||||
dir = 1;
|
||||
name = "Station Intercom";
|
||||
pixel_x = 0;
|
||||
pixel_y = -28
|
||||
},
|
||||
/obj/machinery/camera/autoname{
|
||||
@@ -69369,7 +69266,6 @@
|
||||
dir = 4;
|
||||
name = "Auxillary Base Construction APC";
|
||||
pixel_x = 24;
|
||||
pixel_y = 0
|
||||
},
|
||||
/obj/structure/cable{
|
||||
icon_state = "0-2"
|
||||
@@ -70371,7 +70267,6 @@
|
||||
},
|
||||
/obj/item/radio/intercom{
|
||||
pixel_x = -26;
|
||||
pixel_y = 0
|
||||
},
|
||||
/obj/item/stack/cable_coil/white{
|
||||
pixel_x = 3;
|
||||
@@ -72121,7 +72016,6 @@
|
||||
},
|
||||
/obj/item/radio/intercom{
|
||||
pixel_x = 26;
|
||||
pixel_y = 0
|
||||
},
|
||||
/turf/open/floor/plasteel/dark/corner,
|
||||
/area/engine/atmos)
|
||||
@@ -72265,7 +72159,6 @@
|
||||
dir = 4;
|
||||
name = "Starboard Hallway APC";
|
||||
pixel_x = 24;
|
||||
pixel_y = 0
|
||||
},
|
||||
/obj/structure/cable{
|
||||
icon_state = "0-8"
|
||||
@@ -72718,7 +72611,6 @@
|
||||
name = "Auxillary Base Monitor";
|
||||
network = list("auxbase");
|
||||
pixel_x = 25;
|
||||
pixel_y = 0
|
||||
},
|
||||
/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1,
|
||||
/obj/structure/cable{
|
||||
@@ -73580,7 +73472,6 @@
|
||||
/obj/machinery/disposal/bin,
|
||||
/obj/structure/disposalpipe/trunk,
|
||||
/obj/item/radio/intercom{
|
||||
pixel_x = 0;
|
||||
pixel_y = 23
|
||||
},
|
||||
/turf/open/floor/plasteel/dark,
|
||||
@@ -74023,7 +73914,6 @@
|
||||
light_color = "#cee5d2"
|
||||
},
|
||||
/obj/machinery/status_display/evac{
|
||||
pixel_x = 0;
|
||||
pixel_y = 32
|
||||
},
|
||||
/turf/open/floor/plasteel/white,
|
||||
@@ -74593,7 +74483,6 @@
|
||||
/obj/machinery/atmospherics/pipe/simple/scrubbers/visible,
|
||||
/obj/structure/fireaxecabinet{
|
||||
pixel_x = -31;
|
||||
pixel_y = 0
|
||||
},
|
||||
/obj/effect/turf_decal/trimline/neutral/filled/line{
|
||||
icon_state = "trimline_fill";
|
||||
@@ -75451,7 +75340,6 @@
|
||||
id = "aux_base_shutters";
|
||||
name = "Public Shutters Control";
|
||||
pixel_x = 24;
|
||||
pixel_y = 0;
|
||||
req_one_access_txt = "32;47;48"
|
||||
},
|
||||
/obj/machinery/camera{
|
||||
@@ -76509,7 +76397,6 @@
|
||||
/obj/machinery/flasher{
|
||||
id = "brigflashdoor";
|
||||
pixel_x = -26;
|
||||
pixel_y = 0
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
/area/security/brig)
|
||||
@@ -77128,7 +77015,6 @@
|
||||
/obj/effect/turf_decal/tile/red,
|
||||
/obj/item/storage/secure/safe/HoS{
|
||||
pixel_x = 36;
|
||||
pixel_y = 0
|
||||
},
|
||||
/obj/machinery/status_display/ai{
|
||||
pixel_y = -32
|
||||
@@ -78620,7 +78506,6 @@
|
||||
/obj/item/radio/intercom{
|
||||
dir = 1;
|
||||
name = "Station Intercom";
|
||||
pixel_x = 0;
|
||||
pixel_y = -28
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
@@ -78654,7 +78539,6 @@
|
||||
freerange = 1;
|
||||
name = "Station Intercom (Telecomms)";
|
||||
pixel_x = 30;
|
||||
pixel_y = 0
|
||||
},
|
||||
/turf/open/floor/plasteel/white,
|
||||
/area/science/xenobiology)
|
||||
@@ -78665,7 +78549,6 @@
|
||||
/obj/item/radio/intercom{
|
||||
dir = 1;
|
||||
name = "Station Intercom";
|
||||
pixel_x = 0;
|
||||
pixel_y = -28
|
||||
},
|
||||
/turf/open/floor/plasteel/dark,
|
||||
@@ -79513,7 +79396,6 @@
|
||||
id = "ewradiation";
|
||||
name = "Shutters Control";
|
||||
pixel_x = 33;
|
||||
pixel_y = 0;
|
||||
req_access_txt = "11"
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
@@ -81824,7 +81706,6 @@
|
||||
/obj/structure/bed/dogbed/ian,
|
||||
/obj/item/radio/intercom{
|
||||
dir = 2;
|
||||
pixel_x = 0;
|
||||
pixel_y = 28
|
||||
},
|
||||
/turf/open/floor/wood,
|
||||
@@ -83804,7 +83685,6 @@
|
||||
dir = 1
|
||||
},
|
||||
/obj/structure/sign/warning/securearea{
|
||||
pixel_x = 0;
|
||||
pixel_y = 32
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
@@ -83822,7 +83702,6 @@
|
||||
areastring = "/area/engine/storage";
|
||||
dir = 2;
|
||||
name = "Engineering Storage APC";
|
||||
pixel_x = 0;
|
||||
pixel_y = -26
|
||||
},
|
||||
/obj/structure/cable,
|
||||
@@ -84043,7 +83922,7 @@
|
||||
/turf/open/floor/plating,
|
||||
/area/maintenance/port/fore)
|
||||
"cXf" = (
|
||||
/obj/structure/toilet{
|
||||
/obj/structure/toilet/secret/low_loot{
|
||||
dir = 8
|
||||
},
|
||||
/obj/machinery/light/small{
|
||||
@@ -84209,7 +84088,6 @@
|
||||
dir = 4;
|
||||
name = "Electrical Maintenance APC";
|
||||
pixel_x = 24;
|
||||
pixel_y = 0
|
||||
},
|
||||
/obj/structure/cable{
|
||||
icon_state = "0-8"
|
||||
@@ -84391,7 +84269,6 @@
|
||||
"cXO" = (
|
||||
/obj/machinery/status_display/ai{
|
||||
pixel_x = -32;
|
||||
pixel_y = 0
|
||||
},
|
||||
/obj/machinery/power/apc/highcap/ten_k{
|
||||
areastring = "/area/crew_quarters/heads/chief/private";
|
||||
@@ -84483,7 +84360,6 @@
|
||||
/obj/machinery/camera/autoname,
|
||||
/obj/item/radio/intercom{
|
||||
name = "Station Intercom";
|
||||
pixel_x = 0;
|
||||
pixel_y = 26
|
||||
},
|
||||
/turf/open/floor/plasteel/cafeteria,
|
||||
@@ -84507,7 +84383,6 @@
|
||||
},
|
||||
/obj/item/radio/intercom{
|
||||
name = "Station Intercom";
|
||||
pixel_x = 0;
|
||||
pixel_y = 26
|
||||
},
|
||||
/turf/open/floor/plasteel/cafeteria,
|
||||
|
||||
@@ -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{
|
||||
|
||||
@@ -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,
|
||||
@@ -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" = (
|
||||
|
||||
@@ -14420,7 +14420,7 @@
|
||||
/obj/machinery/light{
|
||||
dir = 8
|
||||
},
|
||||
/obj/structure/piano,
|
||||
/obj/structure/musician/piano,
|
||||
/turf/open/indestructible/hotelwood,
|
||||
/area/centcom/holding)
|
||||
"Hk" = (
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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
|
||||
"}
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -179,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_CAST_CHECK "mob_spell_cast_check" //called from base of /obj/effect/proc_holder/spell/cast_check(): (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)
|
||||
@@ -190,6 +192,8 @@
|
||||
#define COMSIG_MOB_CLIENT_LOGIN "comsig_mob_client_login" //sent when a mob/login() finishes: (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)
|
||||
|
||||
@@ -238,6 +242,9 @@
|
||||
#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)
|
||||
// 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(): ()
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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 30
|
||||
|
||||
#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
|
||||
@@ -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>"}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -50,17 +50,19 @@
|
||||
#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_ATOMS 30
|
||||
@@ -100,6 +102,7 @@
|
||||
#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
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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))
|
||||
|
||||
@@ -580,3 +580,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
|
||||
|
||||
@@ -25,6 +25,12 @@
|
||||
/proc/radiation_pulse(atom/source, intensity, range_modifier, log=FALSE, can_contaminate=TRUE)
|
||||
if(!SSradiation.can_fire)
|
||||
return
|
||||
var/area/A = get_area(source)
|
||||
var/atom/nested_loc = source.loc
|
||||
while(nested_loc != A)
|
||||
if(nested_loc.rad_flags & RAD_PROTECT_CONTENTS)
|
||||
return
|
||||
nested_loc = nested_loc.loc
|
||||
for(var/dir in GLOB.cardinals)
|
||||
new /datum/radiation_wave(source, dir, intensity, range_modifier, can_contaminate)
|
||||
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -125,7 +125,7 @@
|
||||
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)
|
||||
|
||||
@@ -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,7 @@ SUBSYSTEM_DEF(persistence)
|
||||
if(!json)
|
||||
return
|
||||
saved_storytellers = json["data"]
|
||||
average_dynamic_threat = saved_storytellers[4]
|
||||
saved_storytellers.len = 3
|
||||
|
||||
/datum/controller/subsystem/persistence/proc/LoadRecentMaps()
|
||||
@@ -434,9 +436,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"
|
||||
|
||||
@@ -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
|
||||
@@ -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
-11
@@ -302,16 +302,6 @@
|
||||
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."
|
||||
@@ -659,7 +649,7 @@
|
||||
return FALSE
|
||||
var/obj/effect/proc_holder/spell/S = target
|
||||
if(owner)
|
||||
return S.can_cast(owner)
|
||||
return S.can_cast(owner, FALSE, TRUE)
|
||||
return FALSE
|
||||
|
||||
/datum/action/spell_action/alien
|
||||
|
||||
@@ -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
|
||||
|
||||
+212
-57
@@ -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"
|
||||
@@ -27,6 +27,8 @@ GLOBAL_LIST_EMPTY(uplinks)
|
||||
var/datum/ui_state/checkstate
|
||||
var/compact_mode = FALSE
|
||||
var/debug = FALSE
|
||||
var/saved_player_population = 0
|
||||
var/list/filters = list()
|
||||
|
||||
/datum/component/uplink/Initialize(_owner, _lockable = TRUE, _enabled = FALSE, datum/game_mode/_gamemode, starting_tc = 20, datum/ui_state/_checkstate, datum/traitor_class/traitor_class)
|
||||
if(!isitem(parent))
|
||||
@@ -47,7 +49,6 @@ GLOBAL_LIST_EMPTY(uplinks)
|
||||
RegisterSignal(parent, COMSIG_PEN_ROTATED, .proc/pen_rotation)
|
||||
|
||||
GLOB.uplinks += src
|
||||
var/list/filters = list()
|
||||
if(istype(traitor_class))
|
||||
filters = traitor_class.uplink_filters
|
||||
starting_tc = traitor_class.TC
|
||||
@@ -68,6 +69,7 @@ GLOBAL_LIST_EMPTY(uplinks)
|
||||
if(!lockable)
|
||||
active = TRUE
|
||||
locked = FALSE
|
||||
saved_player_population = GLOB.joined_player_list.len
|
||||
|
||||
/datum/component/uplink/InheritComponent(datum/component/uplink/U)
|
||||
lockable |= U.lockable
|
||||
@@ -117,7 +119,18 @@ GLOBAL_LIST_EMPTY(uplinks)
|
||||
return
|
||||
active = TRUE
|
||||
if(user)
|
||||
//update the saved population
|
||||
var/previous_player_population = saved_player_population
|
||||
saved_player_population = GLOB.joined_player_list.len
|
||||
//if population has changed, update uplink items
|
||||
if(saved_player_population != previous_player_population)
|
||||
//make sure discounts are not rerolled
|
||||
var/old_discounts = uplink_items["Discounted Gear"]
|
||||
uplink_items = get_uplink_items(gamemode, FALSE, allow_restricted, filters)
|
||||
if(old_discounts)
|
||||
uplink_items["Discounted Gear"] = old_discounts
|
||||
ui_interact(user)
|
||||
|
||||
// an unlocked uplink blocks also opening the PDA or headset menu
|
||||
return COMPONENT_NO_INTERACT
|
||||
|
||||
@@ -190,7 +203,9 @@ GLOBAL_LIST_EMPTY(uplinks)
|
||||
|
||||
if(item in buyable_items)
|
||||
var/datum/uplink_item/I = buyable_items[item]
|
||||
MakePurchase(usr, I)
|
||||
//check to make sure people cannot buy items when the player pop is below the requirement
|
||||
if(GLOB.joined_player_list.len >= I.player_minimum)
|
||||
MakePurchase(usr, I)
|
||||
. = TRUE
|
||||
if("lock")
|
||||
active = FALSE
|
||||
|
||||
@@ -19,4 +19,4 @@
|
||||
UnregisterSignal(equipper, signals)
|
||||
|
||||
/datum/component/wearertargeting/proc/on_drop(datum/source, mob/user)
|
||||
UnregisterSignal(user, signals)
|
||||
UnregisterSignal(user, signals)
|
||||
|
||||
@@ -109,6 +109,8 @@
|
||||
UnregisterSignal(target, signal_procs[target])
|
||||
//END: ECS SHIT
|
||||
|
||||
SSsounds.free_datum_channels(src)
|
||||
|
||||
return QDEL_HINT_QUEUE
|
||||
|
||||
#ifdef DATUMVAR_DEBUGGING_MODE
|
||||
|
||||
+23
-1379
File diff suppressed because it is too large
Load Diff
@@ -1,66 +1,48 @@
|
||||
GLOBAL_LIST_EMPTY(ghost_eligible_mobs)
|
||||
|
||||
GLOBAL_LIST_EMPTY(client_ghost_timeouts)
|
||||
|
||||
/datum/element/ghost_role_eligibility
|
||||
element_flags = ELEMENT_DETACH | ELEMENT_BESPOKE
|
||||
id_arg_index = 3
|
||||
var/list/timeouts = list()
|
||||
var/list/mob/eligible_mobs = list()
|
||||
id_arg_index = 2
|
||||
var/penalizing = FALSE
|
||||
var/free_ghost = FALSE
|
||||
|
||||
/datum/element/ghost_role_eligibility/Attach(datum/target,penalize = FALSE,free_ghosting = FALSE, penalize_on_ghost = FALSE)
|
||||
/datum/element/ghost_role_eligibility/Attach(datum/target,free_ghosting = FALSE, penalize_on_ghost = FALSE)
|
||||
. = ..()
|
||||
if(!ismob(target))
|
||||
return ELEMENT_INCOMPATIBLE
|
||||
penalizing = penalize_on_ghost
|
||||
free_ghost = free_ghosting
|
||||
var/mob/M = target
|
||||
if(!(M in eligible_mobs))
|
||||
eligible_mobs += M
|
||||
if(penalize) //penalizing them from making a ghost role / midround antag comeback right away.
|
||||
var/penalty = CONFIG_GET(number/suicide_reenter_round_timer) MINUTES
|
||||
var/roundstart_quit_limit = CONFIG_GET(number/roundstart_suicide_time_limit) MINUTES
|
||||
if(world.time < roundstart_quit_limit) //add up the time difference to their antag rolling penalty if they quit before half a (ingame) hour even passed.
|
||||
penalty += roundstart_quit_limit - world.time
|
||||
if(penalty)
|
||||
penalty += world.realtime
|
||||
if(SSautotransfer.can_fire && SSautotransfer.maxvotes)
|
||||
var/maximumRoundEnd = SSautotransfer.starttime + SSautotransfer.voteinterval * SSautotransfer.maxvotes
|
||||
if(penalty - SSshuttle.realtimeofstart > maximumRoundEnd + SSshuttle.emergencyCallTime + SSshuttle.emergencyDockTime + SSshuttle.emergencyEscapeTime)
|
||||
penalty = CANT_REENTER_ROUND
|
||||
if(!(M.ckey in timeouts))
|
||||
timeouts += M.ckey
|
||||
timeouts[M.ckey] = 0
|
||||
else if(timeouts[M.ckey] == CANT_REENTER_ROUND)
|
||||
return
|
||||
timeouts[M.ckey] = max(timeouts[M.ckey],penalty)
|
||||
RegisterSignal(M,COMSIG_MOB_GHOSTIZE,.proc/get_ghost_flags)
|
||||
if(!(M in GLOB.ghost_eligible_mobs))
|
||||
GLOB.ghost_eligible_mobs += M
|
||||
RegisterSignal(M, COMSIG_MOB_GHOSTIZE, .proc/get_ghost_flags)
|
||||
|
||||
/datum/element/ghost_role_eligibility/Detach(mob/M)
|
||||
. = ..()
|
||||
if(M in eligible_mobs)
|
||||
eligible_mobs -= M
|
||||
if(M in GLOB.ghost_eligible_mobs)
|
||||
GLOB.ghost_eligible_mobs -= M
|
||||
UnregisterSignal(M, COMSIG_MOB_GHOSTIZE)
|
||||
|
||||
/datum/element/ghost_role_eligibility/proc/get_all_ghost_role_eligible(silent = FALSE)
|
||||
/proc/get_all_ghost_role_eligible(silent = FALSE)
|
||||
var/list/candidates = list()
|
||||
for(var/m in eligible_mobs)
|
||||
for(var/m in GLOB.ghost_eligible_mobs)
|
||||
var/mob/M = m
|
||||
if(M.can_reenter_round(TRUE))
|
||||
candidates += M
|
||||
return candidates
|
||||
|
||||
/mob/proc/can_reenter_round(silent = FALSE)
|
||||
var/datum/element/ghost_role_eligibility/eli = SSdcs.GetElement(list(/datum/element/ghost_role_eligibility))
|
||||
return eli.can_reenter_round(src,silent)
|
||||
|
||||
/datum/element/ghost_role_eligibility/proc/can_reenter_round(var/mob/M,silent = FALSE)
|
||||
if(!(M in eligible_mobs))
|
||||
if(!(src in GLOB.ghost_eligible_mobs))
|
||||
return FALSE
|
||||
if(!(M.ckey in timeouts))
|
||||
if(!(ckey in GLOB.client_ghost_timeouts))
|
||||
return TRUE
|
||||
var/timeout = timeouts[M.ckey]
|
||||
var/timeout = GLOB.client_ghost_timeouts[ckey]
|
||||
if(timeout != CANT_REENTER_ROUND && timeout <= world.realtime)
|
||||
return TRUE
|
||||
if(!silent && M.client)
|
||||
to_chat(M, "<span class='warning'>You are unable to reenter the round[timeout != CANT_REENTER_ROUND ? " yet. Your ghost role blacklist will expire in [DisplayTimeText(timeout - world.realtime)]" : ""].</span>")
|
||||
if(!silent && client)
|
||||
to_chat(src, "<span class='warning'>You are unable to reenter the round[timeout != CANT_REENTER_ROUND ? " yet. Your ghost role blacklist will expire in [DisplayTimeText(timeout - world.realtime)]" : ""].</span>")
|
||||
return FALSE
|
||||
|
||||
/datum/element/ghost_role_eligibility/proc/get_ghost_flags()
|
||||
|
||||
@@ -76,6 +76,7 @@
|
||||
lefthand_file = 'icons/mob/animals_held_lh.dmi'
|
||||
icon_state = ""
|
||||
w_class = WEIGHT_CLASS_BULKY
|
||||
dynamic_hair_suffix = ""
|
||||
var/mob/living/held_mob
|
||||
|
||||
/obj/item/clothing/head/mob_holder/Initialize(mapload, mob/living/target, worn_state, alt_worn, right_hand, left_hand, slots = NONE)
|
||||
@@ -162,6 +163,11 @@
|
||||
L.visible_message("<span class='warning'>[held_mob] escapes from [L]!</span>", "<span class='warning'>[held_mob] escapes your grip!</span>")
|
||||
release()
|
||||
|
||||
/obj/item/clothing/head/mob_holder/mob_can_equip(mob/living/M, mob/living/equipper, slot, disable_warning = FALSE, bypass_equip_delay_self = FALSE)
|
||||
if(!ishuman(M)) //monkeys holding monkeys holding monkeys...
|
||||
return FALSE
|
||||
return ..()
|
||||
|
||||
/obj/item/clothing/head/mob_holder/assume_air(datum/gas_mixture/env)
|
||||
var/atom/location = loc
|
||||
if(!loc)
|
||||
|
||||
@@ -0,0 +1,54 @@
|
||||
/datum/element/spellcasting //allows to cast certain spells or skip requirements.
|
||||
element_flags = ELEMENT_BESPOKE|ELEMENT_DETACH
|
||||
id_arg_index = 2
|
||||
var/cast_flags
|
||||
var/cast_slots
|
||||
var/list/users_by_item = list()
|
||||
var/list/stacked_spellcasting_by_user = list()
|
||||
|
||||
/datum/element/spellcasting/Attach(datum/target, _flags, _slots)
|
||||
. = ..()
|
||||
if(isitem(target))
|
||||
RegisterSignal(target, COMSIG_ITEM_EQUIPPED, .proc/on_equip)
|
||||
RegisterSignal(target, COMSIG_ITEM_DROPPED, .proc/on_drop)
|
||||
else if(ismob(target))
|
||||
RegisterSignal(target, COMSIG_MOB_SPELL_CAST_CHECK, .proc/on_cast)
|
||||
stacked_spellcasting_by_user[target]++
|
||||
else
|
||||
return ELEMENT_INCOMPATIBLE
|
||||
cast_flags = _flags
|
||||
cast_slots = _slots
|
||||
|
||||
/datum/element/spellcasting/Detach(datum/target)
|
||||
. = ..()
|
||||
UnregisterSignal(target, list(COMSIG_ITEM_EQUIPPED, COMSIG_ITEM_DROPPED, COMSIG_MOB_SPELL_CAST_CHECK))
|
||||
if(users_by_item[target])
|
||||
var/mob/user = users_by_item[target]
|
||||
stacked_spellcasting_by_user[user]--
|
||||
if(!stacked_spellcasting_by_user[user])
|
||||
stacked_spellcasting_by_user -= user
|
||||
UnregisterSignal(user, COMSIG_MOB_SPELL_CAST_CHECK)
|
||||
else if(ismob(target))
|
||||
stacked_spellcasting_by_user[target]--
|
||||
if(!stacked_spellcasting_by_user[target])
|
||||
stacked_spellcasting_by_user -= target
|
||||
|
||||
/datum/element/spellcasting/proc/on_equip(datum/source, mob/equipper, slot)
|
||||
if(!(slot in cast_slots))
|
||||
return
|
||||
users_by_item[source] = equipper
|
||||
if(!stacked_spellcasting_by_user[equipper])
|
||||
RegisterSignal(equipper, COMSIG_MOB_SPELL_CAST_CHECK, .proc/on_cast)
|
||||
stacked_spellcasting_by_user[equipper]++
|
||||
|
||||
/datum/element/spellcasting/proc/on_drop(datum/source, mob/user)
|
||||
if(!users_by_item[source])
|
||||
return
|
||||
users_by_item -= source
|
||||
stacked_spellcasting_by_user[user]--
|
||||
if(!stacked_spellcasting_by_user[user])
|
||||
stacked_spellcasting_by_user -= user
|
||||
UnregisterSignal(user, COMSIG_MOB_SPELL_CAST_CHECK)
|
||||
|
||||
/datum/element/spellcasting/proc/on_cast(mob/caster, obj/effect/proc_holder/spell)
|
||||
return cast_flags
|
||||
@@ -73,7 +73,7 @@
|
||||
var/list/atoms_cache = output_atoms
|
||||
var/sound/S = sound(soundfile)
|
||||
if(direct)
|
||||
S.channel = open_sound_channel()
|
||||
S.channel = SSsounds.random_available_channel()
|
||||
S.volume = volume
|
||||
for(var/i in 1 to atoms_cache.len)
|
||||
var/atom/thing = atoms_cache[i]
|
||||
|
||||
@@ -35,6 +35,17 @@
|
||||
current_target = new_target
|
||||
streak = ""
|
||||
|
||||
/datum/martial_art/proc/damage_roll(mob/living/carbon/human/A, mob/living/carbon/human/D)
|
||||
//Here we roll for our damage to be added into the damage var in the various attack procs. This is changed depending on whether we are in combat mode, lying down, or if our target is in combat mode.
|
||||
var/damage = rand(A.dna.species.punchdamagelow, A.dna.species.punchdamagehigh)
|
||||
if(!(D.combat_flags & COMBAT_FLAG_COMBAT_ACTIVE))
|
||||
damage *= 1.5
|
||||
if(!CHECK_MOBILITY(A, MOBILITY_STAND))
|
||||
damage *= 0.5
|
||||
if(!(A.combat_flags & COMBAT_FLAG_COMBAT_ACTIVE))
|
||||
damage *= 0.25
|
||||
return damage
|
||||
|
||||
/datum/martial_art/proc/teach(mob/living/carbon/human/H, make_temporary = FALSE)
|
||||
if(!istype(H) || !H.mind)
|
||||
return FALSE
|
||||
@@ -50,6 +61,7 @@
|
||||
if(help_verb)
|
||||
H.verbs += help_verb
|
||||
H.mind.martial_art = src
|
||||
ADD_TRAIT(H, TRAIT_PUGILIST, MARTIAL_ARTIST_TRAIT)
|
||||
return TRUE
|
||||
|
||||
/datum/martial_art/proc/store(datum/martial_art/M,mob/living/carbon/human/H)
|
||||
@@ -68,7 +80,8 @@
|
||||
else
|
||||
var/datum/martial_art/X = H.mind.default_martial_art
|
||||
X.teach(H)
|
||||
|
||||
REMOVE_TRAIT(H, TRAIT_PUGILIST, MARTIAL_ARTIST_TRAIT)
|
||||
|
||||
/datum/martial_art/proc/on_remove(mob/living/carbon/human/H)
|
||||
if(help_verb)
|
||||
H.verbs -= help_verb
|
||||
|
||||
@@ -16,16 +16,13 @@
|
||||
A.do_attack_animation(D, ATTACK_EFFECT_PUNCH)
|
||||
|
||||
var/atk_verb = pick("left hook","right hook","straight punch")
|
||||
|
||||
var/damage = rand(10, 13)
|
||||
var/extra_damage = rand(A.dna.species.punchdamagelow, A.dna.species.punchdamagehigh)
|
||||
var/extra_damage = damage_roll(A,D)
|
||||
if(extra_damage == A.dna.species.punchdamagelow)
|
||||
playsound(D.loc, A.dna.species.miss_sound, 25, 1, -1)
|
||||
D.visible_message("<span class='warning'>[A] has attempted to [atk_verb] [D]!</span>", \
|
||||
"<span class='userdanger'>[A] has attempted to [atk_verb] [D]!</span>", null, COMBAT_MESSAGE_RANGE)
|
||||
log_combat(A, D, "attempted to hit", atk_verb)
|
||||
return TRUE
|
||||
damage += extra_damage
|
||||
|
||||
var/obj/item/bodypart/affecting = D.get_bodypart(ran_zone(A.zone_selected))
|
||||
var/armor_block = D.run_armor_check(affecting, "melee")
|
||||
@@ -35,7 +32,7 @@
|
||||
D.visible_message("<span class='danger'>[A] has [atk_verb]ed [D]!</span>", \
|
||||
"<span class='userdanger'>[A] has [atk_verb]ed [D]!</span>", null, COMBAT_MESSAGE_RANGE)
|
||||
|
||||
D.apply_damage(damage, STAMINA, affecting, armor_block)
|
||||
D.apply_damage(rand(10,13) + extra_damage, STAMINA, affecting, armor_block)
|
||||
log_combat(A, D, "punched (boxing) ")
|
||||
if(D.getStaminaLoss() > 100 && istype(D.mind?.martial_art, /datum/martial_art/boxing))
|
||||
var/knockout_prob = (D.getStaminaLoss() + rand(-15,15))*0.75
|
||||
|
||||
+25
-17
@@ -42,11 +42,12 @@
|
||||
/datum/martial_art/cqc/proc/Slam(mob/living/carbon/human/A, mob/living/carbon/human/D)
|
||||
if(!can_use(A))
|
||||
return FALSE
|
||||
var/damage = (damage_roll(A,D) + 5)
|
||||
if(CHECK_MOBILITY(D, MOBILITY_STAND))
|
||||
D.visible_message("<span class='warning'>[A] slams [D] into the ground!</span>", \
|
||||
"<span class='userdanger'>[A] slams you into the ground!</span>")
|
||||
playsound(get_turf(A), 'sound/weapons/slam.ogg', 50, 1, -1)
|
||||
D.apply_damage(10, BRUTE)
|
||||
D.apply_damage(damage, BRUTE)
|
||||
D.DefaultCombatKnockdown(120)
|
||||
log_combat(A, D, "slammed (CQC)")
|
||||
return TRUE
|
||||
@@ -54,29 +55,33 @@
|
||||
/datum/martial_art/cqc/proc/Kick(mob/living/carbon/human/A, mob/living/carbon/human/D)
|
||||
if(!can_use(A))
|
||||
return FALSE
|
||||
if(CHECK_MOBILITY(D, MOBILITY_STAND))
|
||||
D.visible_message("<span class='warning'>[A] kicks [D] back!</span>", \
|
||||
"<span class='userdanger'>[A] kicks you back!</span>")
|
||||
playsound(get_turf(A), 'sound/weapons/cqchit1.ogg', 50, 1, -1)
|
||||
var/atom/throw_target = get_edge_target_turf(D, A.dir)
|
||||
D.throw_at(throw_target, 1, 14, A)
|
||||
D.apply_damage(10, BRUTE)
|
||||
log_combat(A, D, "kicked (CQC)")
|
||||
var/damage = damage_roll(A,D)
|
||||
if(!CHECK_MOBILITY(D, MOBILITY_STAND) && CHECK_MOBILITY(D, MOBILITY_USE))
|
||||
log_combat(A, D, "knocked out (Head kick)(CQC)")
|
||||
D.visible_message("<span class='warning'>[A] kicks [D]'s head, knocking [D.p_them()] out!</span>", \
|
||||
"<span class='userdanger'>[A] kicks your head, knocking you out!</span>")
|
||||
playsound(get_turf(A), 'sound/weapons/genhit1.ogg', 50, 1, -1)
|
||||
D.SetSleeping(300)
|
||||
D.adjustOrganLoss(ORGAN_SLOT_BRAIN, 15, 150)
|
||||
D.apply_damage(damage + 5, BRUTE)
|
||||
var/atom/throw_target = get_edge_target_turf(D, A.dir)
|
||||
D.throw_at(throw_target, 1, 14, A)
|
||||
D.adjustOrganLoss(ORGAN_SLOT_BRAIN, damage + 10, 150)
|
||||
else
|
||||
D.visible_message("<span class='warning'>[A] kicks [D]!</span>", \
|
||||
"<span class='userdanger'>[A] kicks you!</span>")
|
||||
playsound(get_turf(A), 'sound/weapons/cqchit1.ogg', 50, 1, -1)
|
||||
D.Dizzy(damage)
|
||||
D.apply_damage(damage + 15, BRUTE)
|
||||
log_combat(A, D, "kicked (CQC)")
|
||||
return TRUE
|
||||
|
||||
/datum/martial_art/cqc/proc/Pressure(mob/living/carbon/human/A, mob/living/carbon/human/D)
|
||||
if(!can_use(A))
|
||||
return FALSE
|
||||
var/damage = (damage_roll(A,D) + 55)
|
||||
log_combat(A, D, "pressured (CQC)")
|
||||
D.visible_message("<span class='warning'>[A] punches [D]'s neck!</span>")
|
||||
D.adjustStaminaLoss(60)
|
||||
D.apply_damage(damage, STAMINA)
|
||||
playsound(get_turf(A), 'sound/weapons/cqchit1.ogg', 50, 1, -1)
|
||||
return TRUE
|
||||
|
||||
@@ -85,11 +90,12 @@
|
||||
return
|
||||
if(!can_use(A))
|
||||
return FALSE
|
||||
var/damage = (damage_roll(A,D) + 15)
|
||||
if(!D.stat)
|
||||
log_combat(A, D, "restrained (CQC)")
|
||||
D.visible_message("<span class='warning'>[A] locks [D] into a restraining position!</span>", \
|
||||
"<span class='userdanger'>[A] locks you into a restraining position!</span>")
|
||||
D.adjustStaminaLoss(20)
|
||||
D.apply_damage(damage, STAMINA)
|
||||
D.Stun(100)
|
||||
restraining = TRUE
|
||||
addtimer(VARSET_CALLBACK(src, restraining, FALSE), 50, TIMER_UNIQUE)
|
||||
@@ -98,6 +104,7 @@
|
||||
/datum/martial_art/cqc/proc/Consecutive(mob/living/carbon/human/A, mob/living/carbon/human/D)
|
||||
if(!can_use(A))
|
||||
return FALSE
|
||||
var/damage = damage_roll(A,D)
|
||||
if(!D.stat)
|
||||
log_combat(A, D, "consecutive CQC'd (CQC)")
|
||||
D.visible_message("<span class='warning'>[A] strikes [D]'s abdomen, neck and back consecutively</span>", \
|
||||
@@ -106,8 +113,8 @@
|
||||
var/obj/item/I = D.get_active_held_item()
|
||||
if(I && D.temporarilyRemoveItemFromInventory(I))
|
||||
A.put_in_hands(I)
|
||||
D.adjustStaminaLoss(50)
|
||||
D.apply_damage(25, BRUTE)
|
||||
D.apply_damage(damage + 45, STAMINA)
|
||||
D.apply_damage(damage + 20, BRUTE)
|
||||
return TRUE
|
||||
|
||||
/datum/martial_art/cqc/grab_act(mob/living/carbon/human/A, mob/living/carbon/human/D)
|
||||
@@ -135,7 +142,7 @@
|
||||
log_combat(A, D, "attacked (CQC)")
|
||||
A.do_attack_animation(D)
|
||||
var/picked_hit_type = pick("CQC'd", "Big Bossed")
|
||||
var/bonus_damage = 13
|
||||
var/bonus_damage = (damage_roll(A,D) + 7)
|
||||
if(!CHECK_MOBILITY(D, MOBILITY_STAND))
|
||||
bonus_damage += 5
|
||||
picked_hit_type = "stomps on"
|
||||
@@ -151,7 +158,7 @@
|
||||
D.visible_message("<span class='warning'>[A] leg sweeps [D]!", \
|
||||
"<span class='userdanger'>[A] leg sweeps you!</span>")
|
||||
playsound(get_turf(A), 'sound/effects/hit_kick.ogg', 50, 1, -1)
|
||||
D.apply_damage(10, BRUTE)
|
||||
D.apply_damage(bonus_damage, BRUTE)
|
||||
D.DefaultCombatKnockdown(60)
|
||||
log_combat(A, D, "sweeped (CQC)")
|
||||
return TRUE
|
||||
@@ -161,6 +168,7 @@
|
||||
return FALSE
|
||||
add_to_streak("D",D)
|
||||
var/obj/item/I = null
|
||||
var/damage = (damage_roll(A,D)*0.5)
|
||||
if(check_streak(A,D))
|
||||
return TRUE
|
||||
if(prob(65))
|
||||
@@ -172,7 +180,7 @@
|
||||
if(I && D.temporarilyRemoveItemFromInventory(I))
|
||||
A.put_in_hands(I)
|
||||
D.Jitter(2)
|
||||
D.apply_damage(5, BRUTE)
|
||||
D.apply_damage(damage, BRUTE)
|
||||
else
|
||||
D.visible_message("<span class='danger'>[A] attempted to disarm [D]!</span>", \
|
||||
"<span class='userdanger'>[A] attempted to disarm [D]!</span>")
|
||||
|
||||
@@ -84,64 +84,71 @@
|
||||
if("neck_chop")
|
||||
streak = ""
|
||||
neck_chop(A,D)
|
||||
return 1
|
||||
return TRUE
|
||||
if("leg_sweep")
|
||||
streak = ""
|
||||
leg_sweep(A,D)
|
||||
return 1
|
||||
return TRUE
|
||||
if("quick_choke")//is actually lung punch
|
||||
streak = ""
|
||||
quick_choke(A,D)
|
||||
return 1
|
||||
return 0
|
||||
return TRUE
|
||||
return FALSE
|
||||
|
||||
/datum/martial_art/krav_maga/proc/leg_sweep(mob/living/carbon/human/A, mob/living/carbon/human/D)
|
||||
var/obj/item/bodypart/affecting = D.get_bodypart(BODY_ZONE_CHEST)
|
||||
var/armor_block = D.run_armor_check(affecting, "melee")
|
||||
var/damage = damage_roll(A,D)
|
||||
if(!CHECK_MOBILITY(D, MOBILITY_STAND))
|
||||
return 0
|
||||
return FALSE
|
||||
D.visible_message("<span class='warning'>[A] leg sweeps [D]!</span>", \
|
||||
"<span class='userdanger'>[A] leg sweeps you!</span>")
|
||||
playsound(get_turf(A), 'sound/effects/hit_kick.ogg', 50, 1, -1)
|
||||
D.apply_damage(5, BRUTE)
|
||||
D.DefaultCombatKnockdown(40, override_hardstun = 0.01, override_stamdmg = 25)
|
||||
D.apply_damage(damage + 25, STAMINA, affecting, armor_block)
|
||||
D.DefaultCombatKnockdown(80, override_hardstun = 1, override_stamdmg = 0)
|
||||
log_combat(A, D, "leg sweeped")
|
||||
return 1
|
||||
return TRUE
|
||||
|
||||
/datum/martial_art/krav_maga/proc/quick_choke(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D)//is actually lung punch
|
||||
var/damage = damage_roll(A,D)
|
||||
D.visible_message("<span class='warning'>[A] pounds [D] on the chest!</span>", \
|
||||
"<span class='userdanger'>[A] slams your chest! You can't breathe!</span>")
|
||||
playsound(get_turf(A), 'sound/effects/hit_punch.ogg', 50, 1, -1)
|
||||
if(D.losebreath <= 10)
|
||||
D.losebreath = CLAMP(D.losebreath + 5, 0, 10)
|
||||
D.adjustOxyLoss(10)
|
||||
D.adjustOxyLoss(damage + 5)
|
||||
log_combat(A, D, "quickchoked")
|
||||
return 1
|
||||
return TRUE
|
||||
|
||||
/datum/martial_art/krav_maga/proc/neck_chop(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D)
|
||||
var/damage = (damage_roll(A,D)*0.5)
|
||||
D.visible_message("<span class='warning'>[A] karate chops [D]'s neck!</span>", \
|
||||
"<span class='userdanger'>[A] karate chops your neck, rendering you unable to speak!</span>")
|
||||
playsound(get_turf(A), 'sound/effects/hit_punch.ogg', 50, 1, -1)
|
||||
D.apply_damage(5, BRUTE)
|
||||
D.apply_damage(damage, BRUTE)
|
||||
if(D.silent <= 10)
|
||||
D.silent = CLAMP(D.silent + 10, 0, 10)
|
||||
log_combat(A, D, "neck chopped")
|
||||
return 1
|
||||
return TRUE
|
||||
|
||||
/datum/martial_art/krav_maga/grab_act(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D)
|
||||
if(check_streak(A,D))
|
||||
return 1
|
||||
return TRUE
|
||||
log_combat(A, D, "grabbed (Krav Maga)")
|
||||
..()
|
||||
|
||||
/datum/martial_art/krav_maga/harm_act(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D)
|
||||
var/obj/item/bodypart/affecting = D.get_bodypart(ran_zone(A.zone_selected))
|
||||
var/armor_block = D.run_armor_check(affecting, "melee")
|
||||
if(check_streak(A,D))
|
||||
return 1
|
||||
return TRUE
|
||||
log_combat(A, D, "punched")
|
||||
var/picked_hit_type = pick("punches", "kicks")
|
||||
var/bonus_damage = 10
|
||||
var/bonus_damage = damage_roll(A,D)
|
||||
if(CHECK_MOBILITY(D, MOBILITY_STAND))
|
||||
bonus_damage += 5
|
||||
bonus_damage += 10
|
||||
picked_hit_type = "stomps on"
|
||||
D.apply_damage(bonus_damage, BRUTE)
|
||||
D.apply_damage(bonus_damage, BRUTE, affecting, armor_block)
|
||||
if(picked_hit_type == "kicks" || picked_hit_type == "stomps on")
|
||||
A.do_attack_animation(D, ATTACK_EFFECT_KICK)
|
||||
playsound(get_turf(D), 'sound/effects/hit_kick.ogg', 50, 1, -1)
|
||||
@@ -151,24 +158,34 @@
|
||||
D.visible_message("<span class='danger'>[A] [picked_hit_type] [D]!</span>", \
|
||||
"<span class='userdanger'>[A] [picked_hit_type] you!</span>")
|
||||
log_combat(A, D, "[picked_hit_type] with [name]")
|
||||
return 1
|
||||
return TRUE
|
||||
|
||||
/datum/martial_art/krav_maga/disarm_act(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D)
|
||||
var/obj/item/I = null
|
||||
if(prob(60))
|
||||
I = D.get_active_held_item()
|
||||
if(I)
|
||||
if(D.temporarilyRemoveItemFromInventory(I))
|
||||
A.put_in_hands(I)
|
||||
D.visible_message("<span class='danger'>[A] has disarmed [D]!</span>", \
|
||||
"<span class='userdanger'>[A] has disarmed [D]!</span>")
|
||||
playsound(D, 'sound/weapons/thudswoosh.ogg', 50, 1, -1)
|
||||
/datum/martial_art/krav_maga/disarm_act(mob/living/carbon/human/A, mob/living/carbon/human/D)
|
||||
if(check_streak(A,D))
|
||||
return TRUE
|
||||
var/obj/item/bodypart/affecting = D.get_bodypart(ran_zone(A.zone_selected))
|
||||
var/armor_block = D.run_armor_check(affecting, "melee")
|
||||
var/damage = damage_roll(A,D)
|
||||
if(D.mobility_flags & MOBILITY_STAND)
|
||||
D.visible_message("<span class='danger'>[A] reprimands [D]!</span>", \
|
||||
"<span class='userdanger'>You're slapped by [A]!</span>", "<span class='hear'>You hear a sickening sound of flesh hitting flesh!</span>", COMBAT_MESSAGE_RANGE, A)
|
||||
to_chat(A, "<span class='danger'>You jab [D]!</span>")
|
||||
A.do_attack_animation(D, ATTACK_EFFECT_PUNCH)
|
||||
playsound(D, 'sound/effects/hit_punch.ogg', 50, TRUE, -1)
|
||||
D.apply_damage(damage + 5, STAMINA, affecting, armor_block)
|
||||
log_combat(A, D, "punched nonlethally")
|
||||
else
|
||||
D.visible_message("<span class='danger'>[A] attempted to disarm [D]!</span>", \
|
||||
"<span class='userdanger'>[A] attempted to disarm [D]!</span>")
|
||||
playsound(D, 'sound/weapons/punchmiss.ogg', 25, 1, -1)
|
||||
log_combat(A, D, "disarmed (Krav Maga)", "[I ? " removing \the [I]" : ""]")
|
||||
return 1
|
||||
D.visible_message("<span class='danger'>[A] reprimands [D]!</span>", \
|
||||
"<span class='userdanger'>You're manhandled by [A]!</span>", "<span class='hear'>You hear a sickening sound of flesh hitting flesh!</span>", COMBAT_MESSAGE_RANGE, A)
|
||||
to_chat(A, "<span class='danger'>You stomp [D]!</span>")
|
||||
A.do_attack_animation(D, ATTACK_EFFECT_KICK)
|
||||
playsound(D, 'sound/effects/hit_punch.ogg', 50, TRUE, -1)
|
||||
D.apply_damage(damage + 10, STAMINA, affecting, armor_block)
|
||||
log_combat(A, D, "stomped nonlethally")
|
||||
if(prob(D.getStaminaLoss()))
|
||||
D.visible_message("<span class='warning'>[D] sputters and recoils in pain!</span>", "<span class='userdanger'>You recoil in pain as you are jabbed in a nerve!</span>")
|
||||
D.drop_all_held_items()
|
||||
return TRUE
|
||||
|
||||
//Krav Maga Gloves
|
||||
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
|
||||
/datum/martial_art/mushpunch/harm_act(mob/living/carbon/human/A, mob/living/carbon/human/D)
|
||||
var/atk_verb
|
||||
var/damage = (damage_roll(A,D)*3)
|
||||
to_chat(A, "<span class='spider'>You begin to wind up an attack...</span>")
|
||||
if(!do_after(A, 25, target = D))
|
||||
to_chat(A, "<span class='spider'><b>Your attack was interrupted!</b></span>")
|
||||
@@ -12,7 +13,7 @@
|
||||
atk_verb = pick("punches", "smashes", "ruptures", "cracks")
|
||||
D.visible_message("<span class='danger'>[A] [atk_verb] [D] with inhuman strength, sending [D.p_them()] flying backwards!</span>", \
|
||||
"<span class='userdanger'>[A] [atk_verb] you with inhuman strength, sending you flying backwards!</span>")
|
||||
D.apply_damage(rand(15,30), BRUTE)
|
||||
D.apply_damage(damage, BRUTE) //KAPOW
|
||||
playsound(D, 'sound/effects/meteorimpact.ogg', 25, 1, -1)
|
||||
var/throwtarget = get_edge_target_turf(A, get_dir(A, get_step_away(D, A)))
|
||||
D.throw_at(throwtarget, 4, 2, A)//So stuff gets tossed around at the same time.
|
||||
|
||||
@@ -44,11 +44,13 @@
|
||||
return
|
||||
|
||||
/datum/martial_art/plasma_fist/proc/Throwback(mob/living/carbon/human/A, mob/living/carbon/human/D)
|
||||
var/damage = (damage_roll(A,D)*3)
|
||||
D.visible_message("<span class='danger'>[A] has hit [D] with Plasma Punch!</span>", \
|
||||
"<span class='userdanger'>[A] has hit [D] with Plasma Punch!</span>")
|
||||
playsound(D.loc, 'sound/weapons/punch1.ogg', 50, 1, -1)
|
||||
var/atom/throw_target = get_edge_target_turf(D, get_dir(D, get_step_away(D, A)))
|
||||
D.throw_at(throw_target, 200, 4,A)
|
||||
D.apply_damage(damage, BRUTE)
|
||||
A.say("HYAH!", forced="plasma fist")
|
||||
log_combat(A, D, "threw back (Plasma Fist)")
|
||||
return
|
||||
|
||||
@@ -14,6 +14,7 @@
|
||||
|
||||
/datum/martial_art/psychotic_brawling/proc/psycho_attack(mob/living/carbon/human/A, mob/living/carbon/human/D)
|
||||
var/atk_verb
|
||||
var/damage = damage_roll(A,D)
|
||||
switch(rand(1,8))
|
||||
if(1)
|
||||
D.help_shake_act(A)
|
||||
@@ -44,10 +45,10 @@
|
||||
D.visible_message("<span class='danger'>[A] [atk_verb] [D]!</span>", \
|
||||
"<span class='userdanger'>[A] [atk_verb] you!</span>")
|
||||
playsound(get_turf(D), 'sound/weapons/punch1.ogg', 40, 1, -1)
|
||||
D.apply_damage(rand(5,10), BRUTE, BODY_ZONE_HEAD)
|
||||
A.apply_damage(rand(5,10), BRUTE, BODY_ZONE_HEAD)
|
||||
D.apply_damage(damage*1.5, BRUTE, BODY_ZONE_HEAD)
|
||||
A.apply_damage(damage, BRUTE, BODY_ZONE_HEAD)
|
||||
if(!istype(D.head,/obj/item/clothing/head/helmet/) && !istype(D.head,/obj/item/clothing/head/hardhat))
|
||||
D.adjustOrganLoss(ORGAN_SLOT_BRAIN, 5)
|
||||
D.adjustOrganLoss(ORGAN_SLOT_BRAIN, damage)
|
||||
A.Stun(rand(10,45))
|
||||
D.DefaultCombatKnockdown(rand(5,30))//CIT CHANGE - makes stuns from martial arts always use Knockdown instead of Stun for the sake of consistency
|
||||
if(5,6)
|
||||
@@ -55,7 +56,7 @@
|
||||
atk_verb = pick("punches", "kicks", "hits", "slams into")
|
||||
D.visible_message("<span class='danger'>[A] [atk_verb] [D] with inhuman strength, sending [D.p_them()] flying backwards!</span>", \
|
||||
"<span class='userdanger'>[A] [atk_verb] you with inhuman strength, sending you flying backwards!</span>")
|
||||
D.apply_damage(rand(15,30), BRUTE)
|
||||
D.apply_damage(damage*2, BRUTE)
|
||||
playsound(get_turf(D), 'sound/effects/meteorimpact.ogg', 25, 1, -1)
|
||||
var/throwtarget = get_edge_target_turf(A, get_dir(A, get_step_away(D, A)))
|
||||
D.throw_at(throwtarget, 4, 2, A)//So stuff gets tossed around at the same time.
|
||||
|
||||
@@ -78,6 +78,7 @@
|
||||
return TRUE
|
||||
|
||||
/datum/martial_art/the_rising_bass/proc/sideKick(mob/living/carbon/human/A, mob/living/carbon/human/D)
|
||||
var/damage = (damage_roll(A,D)*0.5)
|
||||
if(CHECK_MOBILITY(D, MOBILITY_STAND))
|
||||
var/dir = A.dir & (NORTH | SOUTH) ? pick(EAST, WEST) : pick(NORTH, SOUTH)
|
||||
var/oppdir = dir == NORTH ? SOUTH : dir == SOUTH ? NORTH : dir == EAST ? WEST : EAST
|
||||
@@ -87,7 +88,7 @@
|
||||
D.visible_message("<span class='warning'>[A] kicks [D] in the side, sliding them over!</span>", \
|
||||
"<span class='userdanger'>[A] kicks you in the side, forcing you to step away!</span>")
|
||||
playsound(get_turf(A), 'sound/weapons/thudswoosh.ogg', 50, 1, -1)
|
||||
D.apply_damage(5, BRUTE, BODY_ZONE_CHEST)
|
||||
D.apply_damage(damage, BRUTE, BODY_ZONE_CHEST)
|
||||
D.DefaultCombatKnockdown(60)
|
||||
var/L = !checkfordensity(H,D) ? (!checkfordensity(K,D) ? D.loc : K) : H
|
||||
D.forceMove(L)
|
||||
@@ -96,6 +97,7 @@
|
||||
return TRUE
|
||||
|
||||
/datum/martial_art/the_rising_bass/proc/shoulderFlip(mob/living/carbon/human/A, mob/living/carbon/human/D)
|
||||
var/damage = (damage_roll(A,D) + 25)
|
||||
if(CHECK_MOBILITY(D, MOBILITY_STAND))
|
||||
var/turf/H = get_step(A, get_dir(D,A))
|
||||
var/L = checkfordensity(H,D) ? H : A.loc
|
||||
@@ -104,8 +106,8 @@
|
||||
"<span class='userdanger'>[A] flips you over their shoulder, slamming you into the ground!</span>")
|
||||
playsound(get_turf(A), 'sound/weapons/thudswoosh.ogg', 50, 1, -1)
|
||||
D.emote("scream")
|
||||
D.apply_damage(10, BRUTE, BODY_ZONE_CHEST)
|
||||
D.apply_damage(30, BRUTE, BODY_ZONE_HEAD)
|
||||
D.apply_damage(damage, BRUTE, BODY_ZONE_CHEST)
|
||||
D.apply_damage(damage, BRUTE, BODY_ZONE_HEAD)
|
||||
D.Sleeping(60)
|
||||
D.DefaultCombatKnockdown(300)
|
||||
D.forceMove(L)
|
||||
@@ -114,6 +116,7 @@
|
||||
return FALSE
|
||||
|
||||
/datum/martial_art/the_rising_bass/proc/repulsePunch(mob/living/carbon/human/A, mob/living/carbon/human/D)
|
||||
var/damage = damage_roll(A,D)
|
||||
if(CHECK_MOBILITY(D, MOBILITY_STAND) && repulsecool < world.time)
|
||||
A.do_attack_animation(D, ATTACK_EFFECT_PUNCH)
|
||||
D.visible_message("<span class='warning'>[A] smashes [D] in the chest, throwing them away!</span>", \
|
||||
@@ -121,7 +124,7 @@
|
||||
playsound(get_turf(A), 'sound/weapons/punch1.ogg', 50, 1, -1)
|
||||
var/atom/F = get_edge_target_turf(D, get_dir(A, get_step_away(D, A)))
|
||||
D.throw_at(F, 10, 1)
|
||||
D.apply_damage(10, BRUTE, BODY_ZONE_CHEST)
|
||||
D.apply_damage(damage, BRUTE, BODY_ZONE_CHEST)
|
||||
D.DefaultCombatKnockdown(90)
|
||||
log_combat(A, D, "repulse punched (Rising Bass)")
|
||||
repulsecool = world.time + 3 SECONDS
|
||||
@@ -129,12 +132,13 @@
|
||||
return FALSE
|
||||
|
||||
/datum/martial_art/the_rising_bass/proc/footSmash(mob/living/carbon/human/A, mob/living/carbon/human/D)
|
||||
var/damage = (damage_roll(A,D)*0.5)
|
||||
if(CHECK_MOBILITY(D, MOBILITY_STAND))
|
||||
A.do_attack_animation(D, ATTACK_EFFECT_KICK)
|
||||
D.visible_message("<span class='warning'>[A] smashes their foot down on [D]'s foot!</span>", \
|
||||
"<span class='userdanger'>[A] smashes your foot!</span>")
|
||||
playsound(get_turf(A), 'sound/weapons/punch1.ogg', 50, 1, -1)
|
||||
D.apply_damage(5, BRUTE, pick(BODY_ZONE_L_LEG, BODY_ZONE_R_LEG))
|
||||
D.apply_damage(damage, BRUTE, pick(BODY_ZONE_L_LEG, BODY_ZONE_R_LEG))
|
||||
D.dropItemToGround(D.get_active_held_item())
|
||||
log_combat(A, D, "foot smashed (Rising Bass)")
|
||||
return TRUE
|
||||
@@ -181,7 +185,7 @@
|
||||
. = ..()
|
||||
if(A.incapacitated(FALSE, TRUE)) //NO STUN
|
||||
return BULLET_ACT_HIT
|
||||
if(!(A.mobility_flags & MOBILITY_USE)) //NO UNABLE TO USE
|
||||
if(CHECK_ALL_MOBILITY(A, MOBILITY_USE|MOBILITY_STAND)) //NO UNABLE TO USE, NO DODGING ON THE FLOOR
|
||||
return BULLET_ACT_HIT
|
||||
if(A.dna && A.dna.check_mutation(HULK)) //NO HULK
|
||||
return BULLET_ACT_HIT
|
||||
|
||||
@@ -31,45 +31,48 @@
|
||||
var/atk_verb = pick("precisely kick", "brutally chop", "cleanly hit", "viciously slam")
|
||||
///this is the critical hit damage added to the attack if it rolls, it starts at 0 because it'll be changed when rolled
|
||||
var/crit_damage = 0
|
||||
var/damage = damage_roll(A,D)
|
||||
D.visible_message("<span class='danger'>[A] [atk_verb]s [D]!</span>", \
|
||||
"<span class='userdanger'>[A] [atk_verb]s you!</span>", null, null, A)
|
||||
to_chat(A, "<span class='danger'>You [atk_verb] [D]!</span>")
|
||||
if(prob(10))
|
||||
crit_damage += 20
|
||||
crit_damage += (damage*2 + 15)
|
||||
playsound(get_turf(D), 'sound/weapons/bite.ogg', 50, TRUE, -1)
|
||||
D.visible_message("<span class='warning'>[D] sputters blood as the blow strikes them with inhuman force!</span>", "<span class='userdanger'>You are struck with incredible precision by [A]!</span>")
|
||||
D.visible_message("<span class='warning'>[D] staggers as the blow strikes them with inhuman force!</span>", "<span class='userdanger'>You are struck with incredible precision by [A]!</span>")
|
||||
log_combat(A, D, "critcal strong punched (Sleeping Carp)")//log it here because a critical can swing for 40 force and it's important for the sake of how hard they hit
|
||||
else
|
||||
playsound(get_turf(D), 'sound/weapons/punch1.ogg', 25, TRUE, -1)
|
||||
log_combat(A, D, "strong punched (Sleeping Carp)")//so as to not double up on logging
|
||||
D.apply_damage(20 + crit_damage, BRUTE, affecting)
|
||||
D.apply_damage((damage + 15) + crit_damage, BRUTE, affecting)
|
||||
return
|
||||
|
||||
///Crashing Wave Kick: Harm Disarm combo, throws people seven tiles backwards
|
||||
/datum/martial_art/the_sleeping_carp/proc/launchKick(mob/living/carbon/human/A, mob/living/carbon/human/D)
|
||||
var/damage = (damage_roll(A,D) + 15)
|
||||
A.do_attack_animation(D, ATTACK_EFFECT_KICK)
|
||||
D.visible_message("<span class='warning'>[A] kicks [D] square in the chest, sending them flying!</span>", \
|
||||
"<span class='userdanger'>You are kicked square in the chest by [A], sending you flying!</span>", "<span class='hear'>You hear a sickening sound of flesh hitting flesh!</span>", COMBAT_MESSAGE_RANGE, A)
|
||||
playsound(get_turf(A), 'sound/effects/hit_kick.ogg', 50, TRUE, -1)
|
||||
var/atom/throw_target = get_edge_target_turf(D, A.dir)
|
||||
D.throw_at(throw_target, 7, 14, A)
|
||||
D.apply_damage(15, BRUTE, BODY_ZONE_CHEST)
|
||||
D.apply_damage(damage, BRUTE, BODY_ZONE_CHEST)
|
||||
log_combat(A, D, "launchkicked (Sleeping Carp)")
|
||||
return
|
||||
|
||||
///Keelhaul: Harm Grab combo, knocks people down, deals stamina damage while they're on the floor
|
||||
/datum/martial_art/the_sleeping_carp/proc/dropKick(mob/living/carbon/human/A, mob/living/carbon/human/D)
|
||||
var/damage = damage_roll(A,D)
|
||||
A.do_attack_animation(D, ATTACK_EFFECT_KICK)
|
||||
playsound(get_turf(A), 'sound/effects/hit_kick.ogg', 50, TRUE, -1)
|
||||
if((D.mobility_flags & MOBILITY_STAND))
|
||||
D.apply_damage(10, BRUTE, BODY_ZONE_HEAD)
|
||||
D.DefaultCombatKnockdown(50)
|
||||
D.adjustStaminaLoss(40) //A cit specific change form the tg port to really punish anyone who tries to stand up
|
||||
D.apply_damage(damage, BRUTE, BODY_ZONE_HEAD)
|
||||
D.DefaultCombatKnockdown(50, override_hardstun = 0.01, override_stamdmg = 0)
|
||||
D.apply_damage(damage + 35, STAMINA, BODY_ZONE_HEAD) //A cit specific change form the tg port to really punish anyone who tries to stand up
|
||||
D.visible_message("<span class='warning'>[A] kicks [D] in the head, sending them face first into the floor!</span>", \
|
||||
"<span class='userdanger'>You are kicked in the head by [A], sending you crashing to the floor!</span>", "<span class='hear'>You hear a sickening sound of flesh hitting flesh!</span>", COMBAT_MESSAGE_RANGE, A)
|
||||
if(!(D.mobility_flags & MOBILITY_STAND))
|
||||
D.apply_damage(5, BRUTE, BODY_ZONE_HEAD)
|
||||
D.adjustStaminaLoss(40)
|
||||
else
|
||||
D.apply_damage(damage*0.5, BRUTE, BODY_ZONE_HEAD)
|
||||
D.apply_damage(damage + 35, STAMINA, BODY_ZONE_HEAD)
|
||||
D.drop_all_held_items()
|
||||
D.visible_message("<span class='warning'>[A] kicks [D] in the head!</span>", \
|
||||
"<span class='userdanger'>You are kicked in the head by [A]!</span>", "<span class='hear'>You hear a sickening sound of flesh hitting flesh!</span>", COMBAT_MESSAGE_RANGE, A)
|
||||
@@ -85,6 +88,7 @@
|
||||
|
||||
/datum/martial_art/the_sleeping_carp/harm_act(mob/living/carbon/human/A, mob/living/carbon/human/D)
|
||||
add_to_streak("H",D)
|
||||
var/damage = (damage_roll(A,D) + 5)
|
||||
if(check_streak(A,D))
|
||||
return TRUE
|
||||
var/obj/item/bodypart/affecting = D.get_bodypart(ran_zone(A.zone_selected))
|
||||
@@ -93,7 +97,7 @@
|
||||
D.visible_message("<span class='danger'>[A] [atk_verb]s [D]!</span>", \
|
||||
"<span class='userdanger'>[A] [atk_verb]s you!</span>", null, null, A)
|
||||
to_chat(A, "<span class='danger'>You [atk_verb] [D]!</span>")
|
||||
D.apply_damage(rand(10,15), BRUTE, affecting)
|
||||
D.apply_damage(damage, BRUTE, affecting)
|
||||
playsound(get_turf(D), 'sound/weapons/punch1.ogg', 25, TRUE, -1)
|
||||
log_combat(A, D, "punched (Sleeping Carp)")
|
||||
return TRUE
|
||||
@@ -110,7 +114,7 @@
|
||||
. = ..()
|
||||
if(A.incapacitated(FALSE, TRUE)) //NO STUN
|
||||
return BULLET_ACT_HIT
|
||||
if(!(A.mobility_flags & MOBILITY_USE)) //NO UNABLE TO USE
|
||||
if(CHECK_ALL_MOBILITY(A, MOBILITY_USE|MOBILITY_STAND)) //NO UNABLE TO USE, NO DEFLECTION ON THE FLOOR
|
||||
return BULLET_ACT_HIT
|
||||
if(A.dna && A.dna.check_mutation(HULK)) //NO HULK
|
||||
return BULLET_ACT_HIT
|
||||
@@ -121,6 +125,7 @@
|
||||
playsound(get_turf(A), pick('sound/weapons/bulletflyby.ogg', 'sound/weapons/bulletflyby2.ogg', 'sound/weapons/bulletflyby3.ogg'), 75, TRUE)
|
||||
P.firer = A
|
||||
P.setAngle(rand(0, 360))//SHING
|
||||
A.adjustStaminaLossBuffered (3) //Citadel change to stop infinite bullet sponging as you run away, but it is buffered!
|
||||
return BULLET_ACT_FORCE_PIERCE
|
||||
return BULLET_ACT_HIT
|
||||
|
||||
@@ -133,7 +138,6 @@
|
||||
ADD_TRAIT(H, TRAIT_NODISMEMBER, SLEEPING_CARP_TRAIT)
|
||||
H.physiology.brute_mod *= 0.4 //brute is really not gonna cut it
|
||||
H.physiology.burn_mod *= 0.7 //burn is distinctly more useful against them than brute but they're still resistant
|
||||
H.physiology.stamina_mod *= 0.5 //stun batons prove to be one of the few ways to fight them. They have stun resistance already, so I think doubling down too hard on this resistance is a bit much.
|
||||
H.physiology.stun_mod *= 0.3 //for those rare stuns
|
||||
H.physiology.pressure_mod *= 0.3 //go hang out with carp
|
||||
H.physiology.cold_mod *= 0.3 //cold mods are different to burn mods, they do stack however
|
||||
@@ -148,7 +152,6 @@
|
||||
REMOVE_TRAIT(H, TRAIT_NODISMEMBER, SLEEPING_CARP_TRAIT)
|
||||
H.physiology.brute_mod = initial(H.physiology.brute_mod)
|
||||
H.physiology.burn_mod = initial(H.physiology.burn_mod)
|
||||
H.physiology.stamina_mod = initial(H.physiology.stamina_mod)
|
||||
H.physiology.stun_mod = initial(H.physiology.stun_mod)
|
||||
H.physiology.pressure_mod = initial(H.physiology.pressure_mod) //no more carpies
|
||||
H.physiology.cold_mod = initial(H.physiology.cold_mod)
|
||||
@@ -237,7 +240,7 @@
|
||||
else
|
||||
return ..()
|
||||
|
||||
/obj/item/twohanded/bostaff/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK)
|
||||
if(wielded)
|
||||
return ..()
|
||||
return FALSE
|
||||
/obj/item/twohanded/bostaff/run_block(mob/living/owner, atom/object, damage, attack_text, attack_type, armour_penetration, mob/attacker, def_zone, final_block_chance, list/block_return)
|
||||
if(!wielded)
|
||||
return BLOCK_NONE
|
||||
return ..()
|
||||
|
||||
@@ -19,29 +19,29 @@
|
||||
|
||||
/datum/martial_art/wrestling/proc/check_streak(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D)
|
||||
if(!can_use(A, D))
|
||||
return 0
|
||||
return FALSE
|
||||
switch(streak)
|
||||
if("drop")
|
||||
streak = ""
|
||||
drop(A,D)
|
||||
return 1
|
||||
return TRUE
|
||||
if("strike")
|
||||
streak = ""
|
||||
strike(A,D)
|
||||
return 1
|
||||
return TRUE
|
||||
if("kick")
|
||||
streak = ""
|
||||
kick(A,D)
|
||||
return 1
|
||||
return TRUE
|
||||
if("throw")
|
||||
streak = ""
|
||||
throw_wrassle(A,D)
|
||||
return 1
|
||||
return TRUE
|
||||
if("slam")
|
||||
streak = ""
|
||||
slam(A,D)
|
||||
return 1
|
||||
return 0
|
||||
return TRUE
|
||||
return FALSE
|
||||
|
||||
/datum/action/slam
|
||||
name = "Slam (Cinch) - Slam a grappled opponent into the floor."
|
||||
@@ -138,7 +138,7 @@
|
||||
|
||||
/datum/martial_art/wrestling/harm_act(mob/living/carbon/human/A, mob/living/carbon/human/D)
|
||||
if(check_streak(A,D))
|
||||
return 1
|
||||
return TRUE
|
||||
log_combat(A, D, "punched with wrestling")
|
||||
..()
|
||||
|
||||
@@ -173,11 +173,11 @@
|
||||
|
||||
if (get_dist(A, D) > 1)
|
||||
to_chat(A, "[D] is too far away!")
|
||||
return 0
|
||||
return FALSE
|
||||
|
||||
if (!isturf(A.loc) || !isturf(D.loc))
|
||||
to_chat(A, "You can't throw [D] from here!")
|
||||
return 0
|
||||
return FALSE
|
||||
|
||||
A.setDir(turn(A.dir, 90))
|
||||
var/turf/T = get_step(A, A.dir)
|
||||
@@ -186,7 +186,7 @@
|
||||
D.forceMove(T)
|
||||
D.setDir(get_dir(D, A))
|
||||
else
|
||||
return 0
|
||||
return FALSE
|
||||
|
||||
sleep(delay)
|
||||
|
||||
@@ -195,11 +195,11 @@
|
||||
|
||||
if (get_dist(A, D) > 1)
|
||||
to_chat(A, "[D] is too far away!")
|
||||
return 0
|
||||
return FALSE
|
||||
|
||||
if (!isturf(A.loc) || !isturf(D.loc))
|
||||
to_chat(A, "You can't throw [D] from here!")
|
||||
return 0
|
||||
return FALSE
|
||||
|
||||
D.forceMove(A.loc) // Maybe this will help with the wallthrowing bug.
|
||||
|
||||
@@ -211,7 +211,7 @@
|
||||
D.emote("scream")
|
||||
D.throw_at(T, 10, 4, A, TRUE, TRUE, callback = CALLBACK(D, /mob/living/carbon/human.proc/DefaultCombatKnockdown, 20))
|
||||
log_combat(A, D, "has thrown with wrestling")
|
||||
return 0
|
||||
return FALSE
|
||||
|
||||
/datum/martial_art/wrestling/proc/FlipAnimation(mob/living/carbon/human/D)
|
||||
set waitfor = FALSE
|
||||
@@ -227,6 +227,7 @@
|
||||
if(!A.pulling || A.pulling != D)
|
||||
to_chat(A, "You need to have [D] in a cinch!")
|
||||
return
|
||||
var/damage = damage_roll(A,D)
|
||||
D.forceMove(A.loc)
|
||||
A.setDir(get_dir(A, D))
|
||||
D.setDir(get_dir(D, A))
|
||||
@@ -258,7 +259,7 @@
|
||||
A.pixel_y = 0
|
||||
D.pixel_x = 0
|
||||
D.pixel_y = 0
|
||||
return 0
|
||||
return FALSE
|
||||
|
||||
if (!isturf(A.loc) || !isturf(D.loc))
|
||||
to_chat(A, "You can't slam [D] here!")
|
||||
@@ -266,7 +267,7 @@
|
||||
A.pixel_y = 0
|
||||
D.pixel_x = 0
|
||||
D.pixel_y = 0
|
||||
return 0
|
||||
return FALSE
|
||||
else
|
||||
if (A)
|
||||
A.pixel_x = 0
|
||||
@@ -274,7 +275,7 @@
|
||||
if (D)
|
||||
D.pixel_x = 0
|
||||
D.pixel_y = 0
|
||||
return 0
|
||||
return FALSE
|
||||
|
||||
sleep(1)
|
||||
|
||||
@@ -286,11 +287,11 @@
|
||||
|
||||
if (get_dist(A, D) > 1)
|
||||
to_chat(A, "[D] is too far away!")
|
||||
return 0
|
||||
return FALSE
|
||||
|
||||
if (!isturf(A.loc) || !isturf(D.loc))
|
||||
to_chat(A, "You can't slam [D] here!")
|
||||
return 0
|
||||
return FALSE
|
||||
|
||||
D.forceMove(A.loc)
|
||||
|
||||
@@ -309,11 +310,11 @@
|
||||
|
||||
switch(rand(1,3))
|
||||
if (2)
|
||||
D.adjustBruteLoss(rand(20,30))
|
||||
D.apply_damage(damage + 25, BRUTE)
|
||||
if (3)
|
||||
D.ex_act(EXPLODE_LIGHT)
|
||||
else
|
||||
D.adjustBruteLoss(rand(10,20))
|
||||
D.apply_damage(damage + 15, BRUTE)
|
||||
else
|
||||
D.ex_act(EXPLODE_LIGHT)
|
||||
|
||||
@@ -327,7 +328,7 @@
|
||||
|
||||
|
||||
log_combat(A, D, "body-slammed")
|
||||
return 0
|
||||
return FALSE
|
||||
|
||||
/datum/martial_art/wrestling/proc/CheckStrikeTurf(mob/living/carbon/human/A, turf/T)
|
||||
if (A && (T && isturf(T) && get_dist(A, T) <= 1))
|
||||
@@ -337,6 +338,7 @@
|
||||
if(!D)
|
||||
return
|
||||
var/turf/T = get_turf(A)
|
||||
var/damage = damage_roll(A,D)
|
||||
if (T && isturf(T) && D && isturf(D.loc))
|
||||
for (var/i = 0, i < 4, i++)
|
||||
A.setDir(turn(A.dir, 90))
|
||||
@@ -345,7 +347,7 @@
|
||||
addtimer(CALLBACK(src, .proc/CheckStrikeTurf, A, T), 4)
|
||||
|
||||
A.visible_message("<span class = 'danger'><b>[A] headbutts [D]!</b></span>")
|
||||
D.adjustBruteLoss(rand(10,20))
|
||||
D.apply_damage(damage + 15, BRUTE)
|
||||
playsound(A.loc, "swing_hit", 50, 1)
|
||||
D.Unconscious(20)
|
||||
log_combat(A, D, "headbutted")
|
||||
@@ -353,13 +355,14 @@
|
||||
/datum/martial_art/wrestling/proc/kick(mob/living/carbon/human/A, mob/living/carbon/human/D)
|
||||
if(!D)
|
||||
return
|
||||
var/damage = damage_roll(A,D)
|
||||
A.emote("scream")
|
||||
A.emote("flip")
|
||||
A.setDir(turn(A.dir, 90))
|
||||
|
||||
A.visible_message("<span class = 'danger'><B>[A] roundhouse-kicks [D]!</B></span>")
|
||||
playsound(A.loc, "swing_hit", 50, 1)
|
||||
D.adjustBruteLoss(rand(10,20))
|
||||
D.apply_damage(damage + 15, STAMINA)
|
||||
|
||||
var/turf/T = get_edge_target_turf(A, get_dir(A, get_step_away(D, A)))
|
||||
if (T && isturf(T))
|
||||
@@ -373,7 +376,8 @@
|
||||
var/obj/surface = null
|
||||
var/turf/ST = null
|
||||
var/falling = 0
|
||||
|
||||
var/damage = damage_roll(A,D)
|
||||
|
||||
for (var/obj/O in oview(1, A))
|
||||
if (O.density == 1)
|
||||
if (O == A)
|
||||
@@ -401,15 +405,15 @@
|
||||
A.pixel_y = 0
|
||||
if (falling == 1)
|
||||
A.visible_message("<span class = 'danger'><B>...and dives head-first into the ground, ouch!</b></span>")
|
||||
A.adjustBruteLoss(rand(10,20))
|
||||
A.apply_damage(damage + 15, BRUTE)
|
||||
A.DefaultCombatKnockdown(60)
|
||||
to_chat(A, "[D] is too far away!")
|
||||
return 0
|
||||
return FALSE
|
||||
|
||||
if (!isturf(A.loc) || !isturf(D.loc))
|
||||
A.pixel_y = 0
|
||||
to_chat(A, "You can't drop onto [D] from here!")
|
||||
return 0
|
||||
return FALSE
|
||||
|
||||
if(A)
|
||||
animate(A, transform = matrix(90, MATRIX_ROTATE), time = 1, loop = 0)
|
||||
@@ -427,9 +431,9 @@
|
||||
if (prob(33) || D.stat)
|
||||
D.ex_act(EXPLODE_LIGHT)
|
||||
else
|
||||
D.adjustBruteLoss(rand(20,30))
|
||||
D.apply_damage(damage + 25, BRUTE)
|
||||
else
|
||||
D.adjustBruteLoss(rand(20,30))
|
||||
D.apply_damage(damage + 25, BRUTE)
|
||||
|
||||
D.DefaultCombatKnockdown(40)
|
||||
|
||||
@@ -442,14 +446,16 @@
|
||||
return
|
||||
|
||||
/datum/martial_art/wrestling/disarm_act(mob/living/carbon/human/A, mob/living/carbon/human/D)
|
||||
damage_roll(A,D)
|
||||
if(check_streak(A,D))
|
||||
return 1
|
||||
return TRUE
|
||||
log_combat(A, D, "wrestling-disarmed")
|
||||
..()
|
||||
|
||||
/datum/martial_art/wrestling/grab_act(mob/living/carbon/human/A, mob/living/carbon/human/D)
|
||||
damage_roll(A,D)
|
||||
if(check_streak(A,D))
|
||||
return 1
|
||||
return TRUE
|
||||
if(!can_use(A,D))
|
||||
return ..()
|
||||
if(A.pulling == D || A == D) // don't stun grab yoursel
|
||||
@@ -459,7 +465,7 @@
|
||||
"<span class='userdanger'>[A] gets [D] in a cinch!</span>")
|
||||
D.Stun(rand(60,100))
|
||||
log_combat(A, D, "cinched")
|
||||
return 1
|
||||
return TRUE
|
||||
|
||||
/obj/item/storage/belt/champion/wrestling
|
||||
name = "Wrestling Belt"
|
||||
@@ -492,7 +498,7 @@
|
||||
//Make sure that moves can only be used on people wearing the holodeck belt
|
||||
/datum/martial_art/wrestling/holodeck/can_use(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D)
|
||||
if(!(istype(D.mind?.martial_art, /datum/martial_art/wrestling/holodeck)))
|
||||
return 0
|
||||
return FALSE
|
||||
else
|
||||
return ..()
|
||||
|
||||
|
||||
@@ -31,6 +31,7 @@
|
||||
//MUT_EXTRA - A mutation that is in the mutations tab, and can be given and taken away through though the DNA console. Has a 0 before it's name in the mutation section of the dna console
|
||||
//MUT_OTHER Cannot be interacted with by players through normal means. I.E. wizards mutate
|
||||
|
||||
var/list/conflicts //any mutations that might conflict. put mutation typepath defines in here. make sure to enter it both ways (so that A conflicts with B, and B with A)
|
||||
var/can_chromosome = CHROMOSOME_NONE //can we take chromosomes? 0: CHROMOSOME_NEVER never, 1:CHROMOSOME_NONE yeah, 2: CHROMOSOME_USED no, already have one
|
||||
var/chromosome_name //purely cosmetic
|
||||
var/modified = FALSE //ugly but we really don't want chromosomes and on_acquiring to overlap and apply double the powers
|
||||
@@ -60,6 +61,14 @@
|
||||
return TRUE
|
||||
if(limb_req && !H.get_bodypart(limb_req))
|
||||
return TRUE
|
||||
for(var/M in H.dna.mutations)//check for conflicting powers
|
||||
var/datum/mutation/human/mewtayshun = M
|
||||
if(LAZYLEN(mewtayshun.conflicts))
|
||||
for(var/cons in mewtayshun.conflicts)
|
||||
var/datum/mutation/human/conflicter = cons
|
||||
if(conflicter == type)
|
||||
to_chat(H, "<span class='warning'>You feel your genes resisting something.</span>")
|
||||
return TRUE
|
||||
owner = H
|
||||
dna = H.dna
|
||||
dna.mutations += src
|
||||
|
||||
@@ -41,7 +41,7 @@
|
||||
desc = "You can breathe fire at a target."
|
||||
school = "evocation"
|
||||
charge_max = 600
|
||||
clothes_req = FALSE
|
||||
clothes_req = NONE
|
||||
range = 20
|
||||
base_icon_state = "fireball"
|
||||
action_icon_state = "fireball0"
|
||||
@@ -121,7 +121,7 @@
|
||||
name = "Convoke Void" //magic the gathering joke here
|
||||
desc = "A rare genome that attracts odd forces not usually observed. May sometimes pull you in randomly."
|
||||
school = "evocation"
|
||||
clothes_req = FALSE
|
||||
clothes_req = NONE
|
||||
charge_max = 600
|
||||
invocation = "DOOOOOOOOOOOOOOOOOOOOM!!!"
|
||||
invocation_type = "shout"
|
||||
@@ -155,7 +155,7 @@
|
||||
dropmessage = "You let the electricity from your hand dissipate."
|
||||
hand_path = /obj/item/melee/touch_attack/shock
|
||||
charge_max = 400
|
||||
clothes_req = FALSE
|
||||
clothes_req = NONE
|
||||
action_icon_state = "zap"
|
||||
|
||||
/obj/item/melee/touch_attack/shock
|
||||
@@ -211,7 +211,7 @@
|
||||
name = "Remember the Scent"
|
||||
desc = "Get a scent off of the item you're currently holding to track it. With an empty hand, you'll track the scent you've remembered."
|
||||
charge_max = 100
|
||||
clothes_req = FALSE
|
||||
clothes_req = NONE
|
||||
range = -1
|
||||
include_user = TRUE
|
||||
action_icon_state = "nose"
|
||||
@@ -289,8 +289,7 @@
|
||||
/obj/effect/proc_holder/spell/self/self_amputation
|
||||
name = "Drop a limb"
|
||||
desc = "Concentrate to make a random limb pop right off your body."
|
||||
clothes_req = FALSE
|
||||
human_req = FALSE
|
||||
clothes_req = NONE
|
||||
charge_max = 100
|
||||
action_icon_state = "autotomy"
|
||||
|
||||
@@ -327,8 +326,7 @@
|
||||
/obj/effect/proc_holder/spell/self/lay_genetic_web
|
||||
name = "Lay Web"
|
||||
desc = "Drops a web. Only you will be able to traverse your web easily, making it pretty good for keeping you safe."
|
||||
clothes_req = FALSE
|
||||
human_req = FALSE
|
||||
clothes_req = NONE
|
||||
charge_max = 4 SECONDS //the same time to lay a web
|
||||
action_icon = 'icons/mob/actions/actions_genetic.dmi'
|
||||
action_icon_state = "lay_web"
|
||||
@@ -369,8 +367,7 @@
|
||||
/obj/effect/proc_holder/spell/self/tongue_spike
|
||||
name = "Launch spike"
|
||||
desc = "Shoot your tongue out in the direction you're facing, embedding it and dealing damage until they remove it."
|
||||
clothes_req = FALSE
|
||||
human_req = TRUE
|
||||
clothes_req = NONE
|
||||
charge_max = 100
|
||||
action_icon = 'icons/mob/actions/actions_genetic.dmi'
|
||||
action_icon_state = "spike"
|
||||
|
||||
@@ -75,20 +75,21 @@
|
||||
quality = POSITIVE
|
||||
difficulty = 16
|
||||
instability = 5
|
||||
conflicts = list(GIGANTISM)
|
||||
locked = TRUE // Default intert species for now, so locked from regular pool.
|
||||
|
||||
/datum/mutation/human/dwarfism/on_acquiring(mob/living/carbon/human/owner)
|
||||
if(..())
|
||||
return
|
||||
owner.transform = owner.transform.Scale(1, 0.8)
|
||||
owner.pass_flags |= PASSTABLE
|
||||
passtable_on(owner, GENETIC_MUTATION)
|
||||
owner.visible_message("<span class='danger'>[owner] suddenly shrinks!</span>", "<span class='notice'>Everything around you seems to grow..</span>")
|
||||
|
||||
/datum/mutation/human/dwarfism/on_losing(mob/living/carbon/human/owner)
|
||||
if(..())
|
||||
return
|
||||
owner.transform = owner.transform.Scale(1, 1.25)
|
||||
owner.pass_flags &= ~PASSTABLE
|
||||
passtable_off(owner, GENETIC_MUTATION)
|
||||
owner.visible_message("<span class='danger'>[owner] suddenly grows!</span>", "<span class='notice'>Everything around you seems to shrink..</span>")
|
||||
|
||||
|
||||
@@ -333,6 +334,7 @@
|
||||
desc = "The cells within the subject spread out to cover more area, making the subject appear larger."
|
||||
quality = MINOR_NEGATIVE
|
||||
difficulty = 12
|
||||
conflicts = list(DWARFISM)
|
||||
|
||||
/datum/mutation/human/gigantism/on_acquiring(mob/living/carbon/human/owner)
|
||||
if(..())
|
||||
|
||||
@@ -324,6 +324,11 @@ NOTE: there are two lists of areas in the end of this file: centcom and station
|
||||
name = "Service Hallway"
|
||||
icon_state = "hall_service"
|
||||
|
||||
/area/hallway/secondary/civilian
|
||||
name = "Civilian Wing"
|
||||
icon_state = "hallFS"
|
||||
|
||||
|
||||
//Command
|
||||
|
||||
/area/bridge
|
||||
@@ -1046,7 +1051,6 @@ NOTE: there are two lists of areas in the end of this file: centcom and station
|
||||
name = "Monastery Garden"
|
||||
icon_state = "hydro"
|
||||
|
||||
|
||||
//Science
|
||||
|
||||
/area/science
|
||||
@@ -1393,3 +1397,199 @@ NOTE: there are two lists of areas in the end of this file: centcom and station
|
||||
/area/crew_quarters/fitness/pool
|
||||
name = "Pool Area"
|
||||
icon_state = "pool"
|
||||
|
||||
/area/crew_quarters/dorms/blue
|
||||
name = "Blue Dorms"
|
||||
icon_state = "Sleep"
|
||||
nightshift_public_area = NIGHTSHIFT_AREA_NONE
|
||||
|
||||
/area/crew_quarters/dorms/purple
|
||||
name = "Purple Dorms"
|
||||
icon_state = "Sleep"
|
||||
nightshift_public_area = NIGHTSHIFT_AREA_NONE
|
||||
|
||||
/area/crew_quarters/lounge/jazz
|
||||
name = "Jazz Lounge"
|
||||
icon_state = "yellow"
|
||||
ambientsounds = list('sound/ambience/ambidet1.ogg','sound/ambience/ambidet2.ogg')
|
||||
nightshift_public_area = NIGHTSHIFT_AREA_RECREATION
|
||||
|
||||
|
||||
/area/crew_quarters/fitness/recreation
|
||||
name = "Recreation Area"
|
||||
icon_state = "fitness"
|
||||
nightshift_public_area = NIGHTSHIFT_AREA_RECREATION
|
||||
|
||||
/area/crew_quarters/fitness/cogpool
|
||||
name = "Pool"
|
||||
icon_state = "fitness"
|
||||
clockwork_warp_fail = "Pool's closed."
|
||||
nightshift_public_area = NIGHTSHIFT_AREA_RECREATION
|
||||
|
||||
/area/crew_quarters/barbershop
|
||||
name = "Barbershop"
|
||||
icon_state = "blue"
|
||||
nightshift_public_area = NIGHTSHIFT_AREA_RECREATION
|
||||
|
||||
/area/crew_quarters/observatory
|
||||
name = "Observatory"
|
||||
icon_state = "Sleep"
|
||||
|
||||
//Engineering
|
||||
|
||||
/area/engine/teg_hot
|
||||
name = "Hot Loop"
|
||||
icon_state = "red"
|
||||
|
||||
/area/engine/teg_cold
|
||||
name = "Cold Loop"
|
||||
icon_state = "blue"
|
||||
|
||||
/area/engine/workshop
|
||||
name = "Engineering Workshop"
|
||||
icon_state = "engine"
|
||||
|
||||
/area/security/courtroom/jury
|
||||
name = "Jury Room"
|
||||
icon_state = "courtroom"
|
||||
|
||||
/area/quartermaster/miningdock/airless
|
||||
name = "Mining Dock"
|
||||
icon_state = "mining"
|
||||
has_gravity = STANDARD_GRAVITY
|
||||
valid_territory = FALSE
|
||||
outdoors = TRUE
|
||||
ambientsounds = SPACE
|
||||
blob_allowed = FALSE //While part of the station, what good will it do you?
|
||||
|
||||
/area/quartermaster/miningdock/airless/no_grav
|
||||
name = "Mining Dock"
|
||||
icon_state = "mining"
|
||||
dynamic_lighting = DYNAMIC_LIGHTING_IFSTARLIGHT
|
||||
power_light = FALSE
|
||||
power_equip = FALSE
|
||||
power_environ = FALSE
|
||||
valid_territory = FALSE
|
||||
outdoors = TRUE
|
||||
ambientsounds = SPACE
|
||||
blob_allowed = FALSE //While part of the station, what good will it do you?
|
||||
|
||||
/area/janitor/aux
|
||||
name = "Auxiliary Custodial Closet"
|
||||
icon_state = "janitor"
|
||||
flags_1 = NONE
|
||||
|
||||
/area/hydroponics/lobby
|
||||
name = "Hydroponics Lobby"
|
||||
icon_state = "hydro"
|
||||
|
||||
//Storage
|
||||
|
||||
/area/storage/emergency/generic
|
||||
name = "Emergency Storage"
|
||||
icon_state = "emergencystorage"
|
||||
|
||||
//Construction
|
||||
|
||||
/area/construction
|
||||
name = "Construction Area"
|
||||
icon_state = "yellow"
|
||||
ambientsounds = ENGINEERING
|
||||
|
||||
/area/construction/secondary
|
||||
name = "Secondary Construction Area"
|
||||
icon_state = "yellow"
|
||||
|
||||
/area/construction/minisat_exterior
|
||||
name = "Minisat Exterior"
|
||||
icon_state = "yellow"
|
||||
|
||||
/area/construction/mining/aux_base
|
||||
name = "Auxiliary Base Construction"
|
||||
icon_state = "yellow"
|
||||
|
||||
/area/construction/mining/aux_base/closet
|
||||
name = "Auxiliary Closet Construction"
|
||||
icon_state = "yellow"
|
||||
|
||||
/area/construction/supplyshuttle
|
||||
name = "Supply Shuttle"
|
||||
icon_state = "yellow"
|
||||
|
||||
/area/construction/quarters
|
||||
name = "Engineers' Quarters"
|
||||
icon_state = "yellow"
|
||||
|
||||
/area/construction/qmaint
|
||||
name = "Maintenance"
|
||||
icon_state = "yellow"
|
||||
|
||||
/area/construction/hallway
|
||||
name = "Hallway"
|
||||
icon_state = "yellow"
|
||||
|
||||
/area/construction/solars
|
||||
name = "Solar Panels"
|
||||
icon_state = "yellow"
|
||||
|
||||
/area/construction/solarscontrol
|
||||
name = "Solar Panel Control"
|
||||
icon_state = "yellow"
|
||||
|
||||
/area/construction/storage
|
||||
name = "Construction Site Storage"
|
||||
icon_state = "yellow"
|
||||
|
||||
/area/construction/storage/wing
|
||||
name = "Storage Wing"
|
||||
icon_state = "storage_wing"
|
||||
|
||||
//Routers
|
||||
|
||||
/area/router
|
||||
name = "Router"
|
||||
icon_state = "yellow"
|
||||
ambientsounds = ENGINEERING
|
||||
|
||||
/area/router/service
|
||||
name = "Service Router"
|
||||
icon_state = "green"
|
||||
|
||||
/area/router/public
|
||||
name = "Public Router"
|
||||
icon_state = "yellow"
|
||||
|
||||
/area/router/sec
|
||||
name = "Security Router"
|
||||
icon_state = "blue"
|
||||
|
||||
/area/router/medsci
|
||||
name = "MedSci Router"
|
||||
icon_state = "yellow"
|
||||
|
||||
/area/router/eva
|
||||
name = "EVA Router"
|
||||
icon_state = "yellow"
|
||||
|
||||
/area/router/air
|
||||
name = "Airbridge Router"
|
||||
icon_state = "red"
|
||||
|
||||
/area/router/eng
|
||||
name = "Engineering Router"
|
||||
icon_state = "yellow"
|
||||
|
||||
/area/router/aux
|
||||
name = "Routing System"
|
||||
icon_state = "yellow"
|
||||
requires_power = FALSE
|
||||
has_gravity = STANDARD_GRAVITY
|
||||
always_unpowered = TRUE
|
||||
dynamic_lighting = DYNAMIC_LIGHTING_IFSTARLIGHT
|
||||
power_light = FALSE
|
||||
power_equip = FALSE
|
||||
power_environ = FALSE
|
||||
valid_territory = FALSE
|
||||
outdoors = TRUE
|
||||
ambientsounds = SPACE
|
||||
blob_allowed = FALSE //While part of the station, what good will it do you?
|
||||
@@ -63,6 +63,7 @@
|
||||
var/xenobiology_compatible = FALSE //Can the Xenobio management console transverse this area by default?
|
||||
var/list/canSmoothWithAreas //typecache to limit the areas that atoms in this area can smooth with
|
||||
|
||||
|
||||
/// Color on minimaps, if it's null (which is default) it makes one at random.
|
||||
var/minimap_color
|
||||
|
||||
|
||||
+61
-8
@@ -694,14 +694,64 @@
|
||||
|
||||
/atom/vv_get_dropdown()
|
||||
. = ..()
|
||||
. += "---"
|
||||
var/turf/curturf = get_turf(src)
|
||||
if (curturf)
|
||||
.["Jump to"] = "?_src_=holder;[HrefToken()];adminplayerobservecoodjump=1;X=[curturf.x];Y=[curturf.y];Z=[curturf.z]"
|
||||
.["Modify Transform"] = "?_src_=vars;[HrefToken()];modtransform=[REF(src)]"
|
||||
.["Add reagent"] = "?_src_=vars;[HrefToken()];addreagent=[REF(src)]"
|
||||
.["Trigger EM pulse"] = "?_src_=vars;[HrefToken()];emp=[REF(src)]"
|
||||
.["Trigger explosion"] = "?_src_=vars;[HrefToken()];explode=[REF(src)]"
|
||||
VV_DROPDOWN_OPTION("", "---------")
|
||||
if(!ismovableatom(src))
|
||||
var/turf/curturf = get_turf(src)
|
||||
if(curturf)
|
||||
. += "<option value='?_src_=holder;[HrefToken()];adminplayerobservecoodjump=1;X=[curturf.x];Y=[curturf.y];Z=[curturf.z]'>Jump To</option>"
|
||||
VV_DROPDOWN_OPTION(VV_HK_MODIFY_TRANSFORM, "Modify Transform")
|
||||
VV_DROPDOWN_OPTION(VV_HK_ADD_REAGENT, "Add Reagent")
|
||||
VV_DROPDOWN_OPTION(VV_HK_TRIGGER_EMP, "EMP Pulse")
|
||||
VV_DROPDOWN_OPTION(VV_HK_TRIGGER_EXPLOSION, "Explosion")
|
||||
|
||||
/atom/vv_do_topic(list/href_list)
|
||||
. = ..()
|
||||
if(href_list[VV_HK_ADD_REAGENT] && check_rights(R_VAREDIT))
|
||||
if(!reagents)
|
||||
var/amount = input(usr, "Specify the reagent size of [src]", "Set Reagent Size", 50) as num
|
||||
if(amount)
|
||||
create_reagents(amount)
|
||||
|
||||
if(reagents)
|
||||
var/chosen_id = choose_reagent_id(usr)
|
||||
if(chosen_id)
|
||||
var/amount = input(usr, "Choose the amount to add.", "Choose the amount.", reagents.maximum_volume) as num
|
||||
if(amount)
|
||||
reagents.add_reagent(chosen_id, amount)
|
||||
log_admin("[key_name(usr)] has added [amount] units of [chosen_id] to [src]")
|
||||
message_admins("<span class='notice'>[key_name(usr)] has added [amount] units of [chosen_id] to [src]</span>")
|
||||
if(href_list[VV_HK_TRIGGER_EXPLOSION] && check_rights(R_FUN))
|
||||
usr.client.cmd_admin_explosion(src)
|
||||
if(href_list[VV_HK_TRIGGER_EMP] && check_rights(R_FUN))
|
||||
usr.client.cmd_admin_emp(src)
|
||||
if(href_list[VV_HK_MODIFY_TRANSFORM] && check_rights(R_VAREDIT))
|
||||
var/result = input(usr, "Choose the transformation to apply","Transform Mod") as null|anything in list("Scale","Translate","Rotate")
|
||||
var/matrix/M = transform
|
||||
switch(result)
|
||||
if("Scale")
|
||||
var/x = input(usr, "Choose x mod","Transform Mod") as null|num
|
||||
var/y = input(usr, "Choose y mod","Transform Mod") as null|num
|
||||
if(!isnull(x) && !isnull(y))
|
||||
transform = M.Scale(x,y)
|
||||
if("Translate")
|
||||
var/x = input(usr, "Choose x mod","Transform Mod") as null|num
|
||||
var/y = input(usr, "Choose y mod","Transform Mod") as null|num
|
||||
if(!isnull(x) && !isnull(y))
|
||||
transform = M.Translate(x,y)
|
||||
if("Rotate")
|
||||
var/angle = input(usr, "Choose angle to rotate","Transform Mod") as null|num
|
||||
if(!isnull(angle))
|
||||
transform = M.Turn(angle)
|
||||
if(href_list[VV_HK_AUTO_RENAME] && check_rights(R_VAREDIT))
|
||||
var/newname = input(usr, "What do you want to rename this to?", "Automatic Rename") as null|text
|
||||
if(newname)
|
||||
vv_auto_rename(newname)
|
||||
|
||||
/atom/vv_get_header()
|
||||
. = ..()
|
||||
var/refid = REF(src)
|
||||
. += "[VV_HREF_TARGETREF(refid, VV_HK_AUTO_RENAME, "<b id='name'>[src]</b>")]"
|
||||
. += "<br><font size='1'><a href='?_src_=vars;[HrefToken()];rotatedatum=[refid];rotatedir=left'><<</a> <a href='?_src_=vars;[HrefToken()];datumedit=[refid];varnameedit=dir' id='dir'>[dir2text(dir) || dir]</a> <a href='?_src_=vars;[HrefToken()];rotatedatum=[refid];rotatedir=right'>>></a></font>"
|
||||
|
||||
/atom/proc/drop_location()
|
||||
var/atom/L = loc
|
||||
@@ -709,6 +759,9 @@
|
||||
return null
|
||||
return L.AllowDrop() ? L : L.drop_location()
|
||||
|
||||
/atom/proc/vv_auto_rename(newname)
|
||||
name = newname
|
||||
|
||||
/atom/Entered(atom/movable/AM, atom/oldLoc)
|
||||
SEND_SIGNAL(src, COMSIG_ATOM_ENTERED, AM, oldLoc)
|
||||
|
||||
|
||||
@@ -468,9 +468,8 @@
|
||||
|
||||
/atom/movable/vv_get_dropdown()
|
||||
. = ..()
|
||||
. -= "Jump to"
|
||||
.["Follow"] = "?_src_=holder;[HrefToken()];adminplayerobservefollow=[REF(src)]"
|
||||
.["Get"] = "?_src_=holder;[HrefToken()];admingetmovable=[REF(src)]"
|
||||
. += "<option value='?_src_=holder;[HrefToken()];adminplayerobservefollow=[REF(src)]'>Follow</option>"
|
||||
. += "<option value='?_src_=holder;[HrefToken()];admingetmovable=[REF(src)]'>Get</option>"
|
||||
|
||||
/atom/movable/proc/ex_check(ex_id)
|
||||
if(!ex_id)
|
||||
|
||||
@@ -54,12 +54,18 @@ GLOBAL_VAR_INIT(dynamic_storyteller_type, /datum/dynamic_storyteller/classic)
|
||||
// Current storyteller
|
||||
var/datum/dynamic_storyteller/storyteller = null
|
||||
// Threat logging vars
|
||||
/// Starting threat level, for things that increase it but can bring it back down.
|
||||
var/initial_threat_level = 0
|
||||
/// Target threat level right now. Events and antags will try to keep the round at this level.
|
||||
var/threat_level = 0
|
||||
/// The current antag threat. Recalculated every time a ruletype starts or ends.
|
||||
var/threat = 0
|
||||
/// Starting threat level, for things that increase it but can bring it back down.
|
||||
var/initial_threat_level = 0
|
||||
/// Threat average over the course of the round, for endgame logs.
|
||||
var/threat_average = 0
|
||||
/// Number of times threat average has been calculated, for calculating above.
|
||||
var/threat_average_weight = 0
|
||||
/// Last time a threat average sample was taken. Used for weighting the rolling average.
|
||||
var/last_threat_sample_time = 0
|
||||
/// Things that cause a rolling threat adjustment to be displayed at roundend.
|
||||
var/list/threat_tallies = list()
|
||||
/// Running information about the threat. Can store text or datum entries.
|
||||
@@ -511,7 +517,7 @@ GLOBAL_VAR_INIT(dynamic_storyteller_type, /datum/dynamic_storyteller/classic)
|
||||
drafted_rules -= starting_rule
|
||||
|
||||
starting_rule.trim_candidates()
|
||||
starting_rule.scale_up(extra_rulesets_amount, threat)
|
||||
starting_rule.scale_up(extra_rulesets_amount, threat_level)
|
||||
if (starting_rule.pre_execute())
|
||||
log_threat("[starting_rule.ruletype] - <b>[starting_rule.name]</b> [starting_rule.cost + starting_rule.scaled_times * starting_rule.scaling_cost] threat", verbose = TRUE)
|
||||
if(starting_rule.flags & HIGHLANDER_RULESET)
|
||||
@@ -715,6 +721,16 @@ GLOBAL_VAR_INIT(dynamic_storyteller_type, /datum/dynamic_storyteller/classic)
|
||||
continue
|
||||
current_players[CURRENT_DEAD_PLAYERS].Add(M) // Players who actually died (and admins who ghosted, would be nice to avoid counting them somehow)
|
||||
threat = storyteller.calculate_threat() + added_threat
|
||||
if(threat_average_weight)
|
||||
var/cur_sample_weight = world.time - last_threat_sample_time
|
||||
threat_average = ((threat_average * threat_average_weight) + threat) / (threat_average_weight + cur_sample_weight)
|
||||
threat_average_weight += cur_sample_weight
|
||||
last_threat_sample_time = world.time
|
||||
else
|
||||
threat_average = threat
|
||||
threat_average_weight++
|
||||
last_threat_sample_time = world.time
|
||||
|
||||
/// Removes type from the list
|
||||
/datum/game_mode/dynamic/proc/remove_from_list(list/type_list, type)
|
||||
for(var/I in type_list)
|
||||
|
||||
@@ -241,5 +241,5 @@
|
||||
requirements = list(10,10,10,10,10,10,10,10,10,10)
|
||||
high_population_requirement = 10
|
||||
repeatable = TRUE
|
||||
flags = TRAITOR_RULESET
|
||||
flags = TRAITOR_RULESET | MINOR_RULESET
|
||||
property_weights = list("story_potential" = 2, "trust" = -1, "extended" = 2)
|
||||
|
||||
@@ -34,8 +34,7 @@
|
||||
living_players = trim_list(mode.current_players[CURRENT_LIVING_PLAYERS])
|
||||
living_antags = trim_list(mode.current_players[CURRENT_LIVING_ANTAGS])
|
||||
list_observers = trim_list(mode.current_players[CURRENT_OBSERVERS])
|
||||
var/datum/element/ghost_role_eligibility/eligibility = SSdcs.GetElement(list(/datum/element/ghost_role_eligibility))
|
||||
ghost_eligible = trim_list(eligibility.get_all_ghost_role_eligible())
|
||||
ghost_eligible = trim_list(get_all_ghost_role_eligible())
|
||||
|
||||
/datum/dynamic_ruleset/midround/proc/trim_list(list/L = list())
|
||||
var/list/trimmed_list = L.Copy()
|
||||
|
||||
@@ -11,6 +11,7 @@
|
||||
WAROPS_ALWAYS_ALLOWED: Can always do warops, regardless of threat level.
|
||||
USE_PREF_WEIGHTS: Will use peoples' preferences to change the threat centre.
|
||||
FORCE_IF_WON: If this mode won the vote, forces it
|
||||
USE_PREV_ROUND_WEIGHTS: Changes its threat centre based on the average chaos of previous rounds.
|
||||
*/
|
||||
var/flags = 0
|
||||
var/dead_player_weight = 1 // How much dead players matter for threat calculation
|
||||
@@ -53,6 +54,8 @@ Property weights are:
|
||||
var/turf/T = get_turf(H)
|
||||
if(H.stat != DEAD && is_station_level(T.z) && !("Station" in H.faction))
|
||||
threat += H.threat()
|
||||
for(var/obj/item/phylactery/P in GLOB.poi_list)
|
||||
threat += 25 // can't be giving them too much of a break
|
||||
for (var/mob/M in mode.current_players[CURRENT_LIVING_PLAYERS])
|
||||
if (M?.mind?.assigned_role && M.stat != DEAD)
|
||||
var/datum/job/J = SSjob.GetJob(M.mind.assigned_role)
|
||||
@@ -90,6 +93,8 @@ Property weights are:
|
||||
mean += 5
|
||||
if(voters)
|
||||
GLOB.dynamic_curve_centre += (mean/voters)
|
||||
if(flags & USE_PREV_ROUND_WEIGHTS)
|
||||
GLOB.dynamic_curve_centre += (50 - SSpersistence.average_dynamic_threat) / 10
|
||||
GLOB.dynamic_forced_threat_level = forced_threat_level
|
||||
|
||||
/datum/dynamic_storyteller/proc/get_midround_cooldown()
|
||||
@@ -135,17 +140,19 @@ Property weights are:
|
||||
if (GLOB.dynamic_classic_secret && !((rule.flags & TRAITOR_RULESET) || (rule.flags & MINOR_RULESET)))
|
||||
continue
|
||||
rule.trim_candidates()
|
||||
var/cost_difference = abs(rule.cost-(mode.threat_level-mode.threat))
|
||||
/* Basically, the closer the cost is to the current threat-level-away-from-threat, the more likely it is to
|
||||
pick this particular ruleset.
|
||||
Let's use a toy example: there's 60 threat level and 10 threat spent.
|
||||
We want to pick a ruleset that's close to that, so we run the below equation, on two rulesets.
|
||||
Ruleset 1 has 30 cost, ruleset 2 has 5 cost.
|
||||
When we do the math, ruleset 1's threat_weight is 0.538, and ruleset 2's is 0.238, meaning ruleset 1
|
||||
is 2.26 times as likely to be picked, all other things considered.
|
||||
Of course, we don't want it to GUARANTEE the closest, that's no fun, so it's just a weight.
|
||||
*/
|
||||
var/threat_weight = 1-abs(1-LOGISTIC_FUNCTION(2,0.05,cost_difference,0))
|
||||
var/threat_weight = 1
|
||||
if(!(rule.flags & MINOR_RULESET)) // makes the traitor rulesets always possible anyway
|
||||
var/cost_difference = abs(rule.cost-(mode.threat_level-mode.threat))
|
||||
/* Basically, the closer the cost is to the current threat-level-away-from-threat, the more likely it is to
|
||||
pick this particular ruleset.
|
||||
Let's use a toy example: there's 60 threat level and 10 threat spent.
|
||||
We want to pick a ruleset that's close to that, so we run the below equation, on two rulesets.
|
||||
Ruleset 1 has 30 cost, ruleset 2 has 5 cost.
|
||||
When we do the math, ruleset 1's threat_weight is 0.538, and ruleset 2's is 0.238, meaning ruleset 1
|
||||
is 2.26 times as likely to be picked, all other things considered.
|
||||
Of course, we don't want it to GUARANTEE the closest, that's no fun, so it's just a weight.
|
||||
*/
|
||||
threat_weight = 1-abs(1-LOGISTIC_FUNCTION(2,0.05,cost_difference,0))
|
||||
if (rule.ready())
|
||||
var/property_weight = 0
|
||||
for(var/property in property_weights)
|
||||
@@ -168,8 +175,10 @@ Property weights are:
|
||||
|
||||
rule.candidates = list(newPlayer)
|
||||
rule.trim_candidates()
|
||||
var/cost_difference = abs(rule.cost-(mode.threat_level-mode.threat))
|
||||
var/threat_weight = 1-abs(1-(LOGISTIC_FUNCTION(2,0.05,cost_difference,0)))
|
||||
var/threat_weight = 1
|
||||
if(!(rule.flags & MINOR_RULESET))
|
||||
var/cost_difference = abs(rule.cost-(mode.threat_level-mode.threat))
|
||||
threat_weight = 1-abs(1-(LOGISTIC_FUNCTION(2,0.05,cost_difference,0)))
|
||||
if (rule.ready())
|
||||
var/property_weight = 0
|
||||
for(var/property in property_weights)
|
||||
@@ -200,7 +209,7 @@ Property weights are:
|
||||
weight = 1
|
||||
event_frequency_lower = 2 MINUTES
|
||||
event_frequency_upper = 10 MINUTES
|
||||
flags = WAROPS_ALWAYS_ALLOWED | FORCE_IF_WON
|
||||
flags = WAROPS_ALWAYS_ALLOWED
|
||||
min_players = 40
|
||||
var/refund_cooldown = 0
|
||||
|
||||
@@ -224,7 +233,7 @@ Property weights are:
|
||||
curve_width = 1.5
|
||||
weight = 2
|
||||
min_players = 30
|
||||
flags = WAROPS_ALWAYS_ALLOWED
|
||||
flags = WAROPS_ALWAYS_ALLOWED | USE_PREV_ROUND_WEIGHTS
|
||||
property_weights = list("valid" = 3, "trust" = 5)
|
||||
|
||||
/datum/dynamic_storyteller/team/get_injection_chance(dry_run = FALSE)
|
||||
@@ -245,7 +254,10 @@ Property weights are:
|
||||
config_tag = "random"
|
||||
weight = 1
|
||||
desc = "No weighting at all; every ruleset has the same chance of happening. Cooldowns vary wildly. As random as it gets."
|
||||
forced_threat_level = 100
|
||||
|
||||
/datum/dynamic_storyteller/random/on_start()
|
||||
..()
|
||||
GLOB.dynamic_forced_threat_level = rand(0,100)
|
||||
|
||||
/datum/dynamic_storyteller/random/get_midround_cooldown()
|
||||
return rand(GLOB.dynamic_midround_delay_min/2, GLOB.dynamic_midround_delay_max*2)
|
||||
@@ -259,9 +271,6 @@ Property weights are:
|
||||
/datum/dynamic_storyteller/random/get_injection_chance()
|
||||
return 50 // i would do rand(0,100) but it's actually the same thing when you do the math
|
||||
|
||||
/datum/dynamic_storyteller/random/calculate_threat()
|
||||
return 0 // what IS threat
|
||||
|
||||
/datum/dynamic_storyteller/random/roundstart_draft()
|
||||
var/list/drafted_rules = list()
|
||||
for (var/datum/dynamic_ruleset/roundstart/rule in mode.roundstart_rules)
|
||||
@@ -315,18 +324,20 @@ Property weights are:
|
||||
desc = "Antags with options for loadouts and gimmicks. Traitor, wizard, nukies. Has a buildup-climax-falling action threat curve."
|
||||
weight = 2
|
||||
curve_width = 2
|
||||
flags = USE_PREV_ROUND_WEIGHTS
|
||||
property_weights = list("story_potential" = 2)
|
||||
|
||||
|
||||
/datum/dynamic_storyteller/story/do_process()
|
||||
/datum/dynamic_storyteller/story/calculate_threat()
|
||||
var/current_time = (world.time / SSautotransfer.targettime)*180
|
||||
mode.threat_level = round(mode.initial_threat_level*(sin(current_time)+0.5),0.1)
|
||||
mode.threat_level = round(mode.initial_threat_level*(sin(current_time)+0.25),0.1)
|
||||
..()
|
||||
|
||||
/datum/dynamic_storyteller/classic
|
||||
name = "Classic"
|
||||
config_tag = "classic"
|
||||
desc = "No special antagonist weights. Good variety, but not like random. Uses your chaos preference to weight."
|
||||
flags = USE_PREF_WEIGHTS
|
||||
flags = USE_PREF_WEIGHTS | USE_PREV_ROUND_WEIGHTS
|
||||
|
||||
/datum/dynamic_storyteller/suspicion
|
||||
name = "Intrigue"
|
||||
@@ -335,6 +346,7 @@ Property weights are:
|
||||
weight = 2
|
||||
curve_width = 2
|
||||
dead_player_weight = 2
|
||||
flags = USE_PREV_ROUND_WEIGHTS
|
||||
property_weights = list("trust" = -3)
|
||||
|
||||
/datum/dynamic_storyteller/liteextended
|
||||
|
||||
@@ -55,7 +55,7 @@
|
||||
/obj/item/stack/tile/fakespace/loaded = ARCADE_WEIGHT_TRICK,
|
||||
/obj/item/stack/tile/fakepit/loaded = ARCADE_WEIGHT_TRICK,
|
||||
/obj/item/restraints/handcuffs/fake = ARCADE_WEIGHT_TRICK,
|
||||
/obj/item/clothing/gloves/rapid/hug = ARCADE_WEIGHT_TRICK,
|
||||
/obj/item/clothing/gloves/fingerless/pugilist/rapid/hug = ARCADE_WEIGHT_TRICK,
|
||||
|
||||
/obj/item/grenade/chem_grenade/glitter/pink = ARCADE_WEIGHT_TRICK,
|
||||
/obj/item/grenade/chem_grenade/glitter/blue = ARCADE_WEIGHT_TRICK,
|
||||
|
||||
@@ -159,6 +159,8 @@
|
||||
if(CHECK_BITFIELD(obj_flags, EMAGGED) && !exploding_hell)
|
||||
exploding_hell = TRUE
|
||||
explode_EVERYTHING()
|
||||
if(QDELETED(src))
|
||||
return
|
||||
if(mine_sound)
|
||||
switch(rand(1,3)) //Play every time a mine is hit
|
||||
if(1)
|
||||
@@ -367,10 +369,10 @@
|
||||
var/row_limit = rows-1
|
||||
var/column_limit = columns-1
|
||||
var/mine_limit_v2 = mine_limit
|
||||
if(rows > 11)
|
||||
row_limit = 10
|
||||
if(columns > 11)
|
||||
column_limit = 10
|
||||
if(rows > 21)
|
||||
row_limit = 20
|
||||
if(columns > 21)
|
||||
column_limit = 20
|
||||
if(mine_limit > (rows*columns) * 0.25)
|
||||
mine_limit_v2 = 24
|
||||
message_admins("[key_name_admin(user)] failed an emagged Minesweeper arcade and has unleashed an explosion armageddon of size [row_limit],[column_limit] around [ADMIN_LOOKUPFLW(user.loc)]!")
|
||||
@@ -378,15 +380,38 @@
|
||||
explosion(loc, 2, 5, 10, 15) //Thought you could survive by putting as few mines as possible, huh??
|
||||
else
|
||||
explosion(loc, 1, 3, rand(1,5), rand(1,10))
|
||||
for(var/y69=y-row_limit;y69<y+row_limit;y69++) //Create a shitton of explosions in irl turfs if we lose, it will probably kill us
|
||||
for(var/x69=x-column_limit;x69<x+column_limit;x69++)
|
||||
if(prob(mine_limit_v2)) //Probability of explosion happening, according to how many mines were on the board... up to a limit
|
||||
var/explosionloc
|
||||
explosionloc = locate(y69,x69,z)
|
||||
explosion(explosionloc, 0, rand(1,2),rand(1,5),rand(3,10), adminlog = FALSE)
|
||||
var/list/targets = list()
|
||||
var/cur_y = y - round(row_limit * 0.5, 1)
|
||||
var/starting_row = 1
|
||||
if(cur_y < 1)
|
||||
starting_row -= cur_y - 1
|
||||
cur_y = 1
|
||||
var/start_x = x - round(column_limit * 0.5, 1)
|
||||
var/starting_column = 1
|
||||
if(start_x < 1)
|
||||
starting_column -= start_x - 1
|
||||
start_x = 1
|
||||
for(var/row in starting_row to length(table)) //translate the mines locations into actual turf coordinates.
|
||||
if(!locate(cur_y, start_x, z))
|
||||
break
|
||||
var/cur_x = start_x
|
||||
for(var/column in starting_column to length(table[row]))
|
||||
var/coord_value = table[row][column]
|
||||
if(coord_value == 10 || coord_value == 0) //there is a mine in here.
|
||||
var/turf/T = locate(cur_y, cur_x, z)
|
||||
if(!T)
|
||||
break
|
||||
targets += T
|
||||
cur_x++
|
||||
cur_y++
|
||||
var/num_explosions = 0
|
||||
for(var/T in shuffle(targets)) //Create a shitton of explosions in irl turfs if we lose, it will probably kill us
|
||||
addtimer(CALLBACK(GLOBAL_PROC, /proc/explosion, T, 0, rand(1,2),rand(1,5),rand(3,10), FALSE), 15 * ++num_explosions)
|
||||
if(num_explosions == mine_limit_v2)
|
||||
return
|
||||
|
||||
#undef MINESWEEPERIMG
|
||||
#undef MINESWEEPER_GAME_MAIN_MENU
|
||||
#undef MINESWEEPER_GAME_PLAYING
|
||||
#undef MINESWEEPER_GAME_LOST
|
||||
#undef MINESWEEPER_GAME_WON
|
||||
#undef MINESWEEPER_GAME_WON
|
||||
|
||||
@@ -17,6 +17,11 @@ GLOBAL_VAR_INIT(message_delay, 0) // To make sure restarting the recentmessages
|
||||
idle_power_usage = 25
|
||||
circuit = /obj/item/circuitboard/machine/telecomms/broadcaster
|
||||
|
||||
/obj/machinery/telecomms/broadcaster/RefreshParts()
|
||||
idle_power_usage = 25
|
||||
for(var/obj/item/stock_parts/manipulator/P in component_parts)
|
||||
idle_power_usage -= (P.rating * 1.5) //Has 2 manipulators
|
||||
|
||||
/obj/machinery/telecomms/broadcaster/receive_information(datum/signal/subspace/signal, obj/machinery/telecomms/machine_from)
|
||||
// Don't broadcast rejected signals
|
||||
if(!istype(signal))
|
||||
|
||||
@@ -19,6 +19,11 @@
|
||||
circuit = /obj/item/circuitboard/machine/telecomms/bus
|
||||
var/change_frequency = 0
|
||||
|
||||
/obj/machinery/telecomms/bus/RefreshParts()
|
||||
idle_power_usage = 50
|
||||
for(var/obj/item/stock_parts/manipulator/P in component_parts)
|
||||
idle_power_usage -= (P.rating * 2) //Has 2 manipulators
|
||||
|
||||
/obj/machinery/telecomms/bus/receive_information(datum/signal/subspace/signal, obj/machinery/telecomms/machine_from)
|
||||
if(!istype(signal) || !is_freq_listening(signal))
|
||||
return
|
||||
|
||||
@@ -19,6 +19,11 @@
|
||||
netspeed = 40
|
||||
circuit = /obj/item/circuitboard/machine/telecomms/hub
|
||||
|
||||
/obj/machinery/telecomms/hub/RefreshParts()
|
||||
idle_power_usage = 80
|
||||
for(var/obj/item/stock_parts/manipulator/P in component_parts)
|
||||
idle_power_usage -= (P.rating * 5) //Has 2 manipulators
|
||||
|
||||
/obj/machinery/telecomms/hub/receive_information(datum/signal/signal, obj/machinery/telecomms/machine_from)
|
||||
if(!is_freq_listening(signal))
|
||||
return
|
||||
|
||||
@@ -16,6 +16,11 @@
|
||||
circuit = /obj/item/circuitboard/machine/telecomms/processor
|
||||
var/process_mode = 1 // 1 = Uncompress Signals, 0 = Compress Signals
|
||||
|
||||
/obj/machinery/telecomms/processor/RefreshParts()
|
||||
idle_power_usage = 30
|
||||
for(var/obj/item/stock_parts/manipulator/P in component_parts)
|
||||
idle_power_usage -= (P.rating * 1.5) //Has 2 manipulators
|
||||
|
||||
/obj/machinery/telecomms/processor/receive_information(datum/signal/subspace/signal, obj/machinery/telecomms/machine_from)
|
||||
if(!is_freq_listening(signal))
|
||||
return
|
||||
|
||||
@@ -15,6 +15,11 @@
|
||||
idle_power_usage = 30
|
||||
circuit = /obj/item/circuitboard/machine/telecomms/receiver
|
||||
|
||||
/obj/machinery/telecomms/receiver/RefreshParts()
|
||||
idle_power_usage = 30
|
||||
for(var/obj/item/stock_parts/manipulator/P in component_parts)
|
||||
idle_power_usage -= (P.rating * 1.5) //Has 2 manipulators
|
||||
|
||||
/obj/machinery/telecomms/receiver/receive_signal(datum/signal/subspace/signal)
|
||||
if(!on || !istype(signal) || !check_receive_level(signal) || signal.transmission_method != TRANSMISSION_SUBSPACE)
|
||||
return
|
||||
|
||||
@@ -19,6 +19,11 @@
|
||||
var/broadcasting = 1
|
||||
var/receiving = 1
|
||||
|
||||
/obj/machinery/telecomms/relay/RefreshParts()
|
||||
idle_power_usage = 30
|
||||
for(var/obj/item/stock_parts/manipulator/P in component_parts)
|
||||
idle_power_usage -= (P.rating * 1.5) //Has 2 manipulators
|
||||
|
||||
/obj/machinery/telecomms/relay/receive_information(datum/signal/subspace/signal, obj/machinery/telecomms/machine_from)
|
||||
// Add our level and send it back
|
||||
var/turf/T = get_turf(src)
|
||||
|
||||
@@ -19,6 +19,11 @@
|
||||
/obj/machinery/telecomms/server/Initialize()
|
||||
. = ..()
|
||||
|
||||
/obj/machinery/telecomms/server/RefreshParts()
|
||||
idle_power_usage = 15
|
||||
for(var/obj/item/stock_parts/manipulator/P in component_parts)
|
||||
idle_power_usage -= (P.rating) //has 2 manipulators
|
||||
|
||||
/obj/machinery/telecomms/server/receive_information(datum/signal/subspace/vocal/signal, obj/machinery/telecomms/machine_from)
|
||||
// can't log non-vocal signals
|
||||
if(!istype(signal) || !signal.data["message"] || !is_freq_listening(signal))
|
||||
|
||||
@@ -0,0 +1,119 @@
|
||||
// Full credit goes to VG station for these assets. https://github.com/vgstation-coders/vgstation13
|
||||
// All items in this .dm and the associated .dmi were made by VG station and all credit should go to them.
|
||||
|
||||
// -<| IMPORTANT MAPPER NOTE |>-
|
||||
// Change the 'color' variable on any white sprite to simply recolour it!
|
||||
|
||||
/obj/effect/turf_decal/vg_decals
|
||||
icon = 'icons/turf/vgstation_decals.dmi'
|
||||
icon_state = "no"
|
||||
|
||||
// NUMBERS START
|
||||
|
||||
/obj/effect/turf_decal/vg_decals/numbers
|
||||
icon_state = "no"
|
||||
|
||||
/obj/effect/turf_decal/vg_decals/numbers/one
|
||||
icon_state = "1"
|
||||
|
||||
/obj/effect/turf_decal/vg_decals/numbers/two
|
||||
icon_state = "2"
|
||||
|
||||
/obj/effect/turf_decal/vg_decals/numbers/three
|
||||
icon_state = "3"
|
||||
|
||||
/obj/effect/turf_decal/vg_decals/numbers/four
|
||||
icon_state = "4"
|
||||
|
||||
/obj/effect/turf_decal/vg_decals/numbers/five
|
||||
icon_state = "5"
|
||||
|
||||
/obj/effect/turf_decal/vg_decals/numbers/six
|
||||
icon_state = "6"
|
||||
|
||||
/obj/effect/turf_decal/vg_decals/numbers/seven
|
||||
icon_state = "7"
|
||||
|
||||
/obj/effect/turf_decal/vg_decals/numbers/eight
|
||||
icon_state = "8"
|
||||
|
||||
/obj/effect/turf_decal/vg_decals/numbers/nine
|
||||
icon_state = "9"
|
||||
|
||||
/obj/effect/turf_decal/vg_decals/numbers/zero
|
||||
icon_state = "0"
|
||||
|
||||
// NUMBERS END
|
||||
|
||||
// ATMOS START
|
||||
|
||||
/obj/effect/turf_decal/vg_decals/atmos
|
||||
icon_state = "no"
|
||||
|
||||
/obj/effect/turf_decal/vg_decals/atmos/oxygen
|
||||
icon_state = "oxygen"
|
||||
|
||||
/obj/effect/turf_decal/vg_decals/atmos/carbon_dioxide
|
||||
icon_state = "carbon_dioxide"
|
||||
|
||||
/obj/effect/turf_decal/vg_decals/atmos/nitrogen
|
||||
icon_state = "nitrogen"
|
||||
|
||||
/obj/effect/turf_decal/vg_decals/atmos/air
|
||||
icon_state = "air"
|
||||
|
||||
/obj/effect/turf_decal/vg_decals/atmos/nitrous_oxide
|
||||
icon_state = "nitrous_oxide"
|
||||
|
||||
/obj/effect/turf_decal/vg_decals/atmos/plasma
|
||||
icon_state = "plasma"
|
||||
|
||||
/obj/effect/turf_decal/vg_decals/atmos/mix
|
||||
icon_state = "mix"
|
||||
|
||||
// ATMOS END
|
||||
|
||||
// DEPARTMENT START
|
||||
|
||||
/obj/effect/turf_decal/vg_decals/department/hop
|
||||
icon_state = "hop"
|
||||
|
||||
/obj/effect/turf_decal/vg_decals/department/bar
|
||||
icon_state = "bar"
|
||||
|
||||
/obj/effect/turf_decal/vg_decals/department/cargo
|
||||
icon_state = "cargo"
|
||||
|
||||
/obj/effect/turf_decal/vg_decals/department/med
|
||||
icon_state = "med"
|
||||
|
||||
/obj/effect/turf_decal/vg_decals/department/sci
|
||||
icon_state = "sci"
|
||||
|
||||
/obj/effect/turf_decal/vg_decals/department/sec
|
||||
icon_state = "sec"
|
||||
|
||||
/obj/effect/turf_decal/vg_decals/department/mining
|
||||
icon_state = "mine"
|
||||
|
||||
/obj/effect/turf_decal/vg_decals/department/zoo
|
||||
icon_state = "zoo"
|
||||
|
||||
// DEPARTMENT END
|
||||
|
||||
// MISC START
|
||||
|
||||
/obj/effect/turf_decal/vg_decals/no
|
||||
icon = 'icons/turf/vgstation_decals.dmi'
|
||||
icon_state = "no"
|
||||
|
||||
/obj/effect/turf_decal/vg_decals/radiation_huge
|
||||
icon_state = "radiation_huge"
|
||||
|
||||
/obj/effect/turf_decal/vg_decals/radiation
|
||||
icon_state = "radiation"
|
||||
|
||||
/obj/effect/turf_decal/vg_decals/radiation_custom
|
||||
icon_state = "radiation-w"
|
||||
|
||||
// MISC END
|
||||
@@ -45,7 +45,6 @@
|
||||
/obj/effect/spawner/lootdrop/armory_contraband
|
||||
name = "armory contraband gun spawner"
|
||||
lootdoubles = FALSE
|
||||
|
||||
loot = list(
|
||||
/obj/item/gun/ballistic/automatic/pistol = 8,
|
||||
/obj/item/gun/ballistic/shotgun/automatic/combat = 5,
|
||||
@@ -129,7 +128,6 @@
|
||||
loot = typesof(/obj/item/flashlight/glowstick)
|
||||
. = ..()
|
||||
|
||||
|
||||
/obj/effect/spawner/lootdrop/gloves
|
||||
name = "random gloves"
|
||||
desc = "These gloves are supposed to be a random color..."
|
||||
@@ -150,7 +148,6 @@
|
||||
/obj/effect/spawner/lootdrop/crate_spawner
|
||||
name = "lootcrate spawner" //USE PROMO CODE "SELLOUT" FOR 20% OFF!
|
||||
lootdoubles = FALSE
|
||||
|
||||
loot = list(
|
||||
/obj/structure/closet/crate/secure/loot = 20,
|
||||
"" = 80
|
||||
@@ -386,3 +383,141 @@
|
||||
/obj/structure/reagent_dispensers/keg/aphro = 2,
|
||||
/obj/structure/reagent_dispensers/keg/aphro/strong = 2,
|
||||
/obj/structure/reagent_dispensers/keg/gargle = 1)
|
||||
|
||||
/obj/effect/spawner/lootdrop/coin
|
||||
lootcount = 1
|
||||
loot = list(
|
||||
/obj/item/coin/silver = 30,
|
||||
/obj/item/coin/iron = 30,
|
||||
/obj/item/coin/gold = 10,
|
||||
/obj/item/coin/diamond = 10,
|
||||
/obj/item/coin/plasma = 10,
|
||||
/obj/item/coin/uranium = 10,
|
||||
)
|
||||
|
||||
/obj/effect/spawner/lootdrop/cig_packs
|
||||
lootcount = 1
|
||||
loot = list(
|
||||
/obj/item/storage/fancy/cigarettes = 20,
|
||||
/obj/item/storage/fancy/cigarettes/dromedaryco = 10,
|
||||
/obj/item/storage/fancy/cigarettes/cigpack_robust = 5,
|
||||
/obj/item/storage/fancy/cigarettes/cigpack_robustgold = 5,
|
||||
/obj/item/storage/fancy/cigarettes/cigpack_carp = 15,
|
||||
/obj/item/storage/fancy/cigarettes/cigpack_syndicate = 2,
|
||||
/obj/item/storage/fancy/cigarettes/cigpack_midori = 10,
|
||||
/obj/item/storage/fancy/cigarettes/cigpack_shadyjims = 5,
|
||||
/obj/item/storage/fancy/cigarettes/cigpack_xeno = 3,
|
||||
/obj/item/storage/fancy/cigarettes/cigpack_cannabis = 10,
|
||||
/obj/item/storage/fancy/cigarettes/cigpack_mindbreaker = 10,
|
||||
/obj/item/storage/fancy/rollingpapers = 10
|
||||
)
|
||||
|
||||
/obj/effect/spawner/lootdrop/cigars_cases
|
||||
lootcount = 1
|
||||
loot = list(
|
||||
/obj/item/storage/fancy/cigarettes/cigars = 50,
|
||||
/obj/item/storage/fancy/cigarettes/cigars/cohiba = 25,
|
||||
/obj/item/storage/fancy/cigarettes/cigars/havana = 25,
|
||||
)
|
||||
|
||||
/obj/effect/spawner/lootdrop/space_cash
|
||||
lootcount = 1
|
||||
loot = list(
|
||||
/obj/item/stack/spacecash/c1 = 1,
|
||||
/obj/item/stack/spacecash/c10 = 9,
|
||||
/obj/item/stack/spacecash/c20 = 10,
|
||||
/obj/item/stack/spacecash/c50 = 15,
|
||||
/obj/item/stack/spacecash/c100 = 25,
|
||||
/obj/item/stack/spacecash/c200 = 20,
|
||||
/obj/item/stack/spacecash/c500 = 19,
|
||||
/obj/item/stack/spacecash/c1000 = 1,
|
||||
)
|
||||
|
||||
/obj/effect/spawner/lootdrop/druggie_pill
|
||||
lootcount = 1
|
||||
loot = list(
|
||||
/obj/item/reagent_containers/pill/stimulant = 1,
|
||||
/obj/item/reagent_containers/pill/zoom = 9,
|
||||
/obj/item/reagent_containers/pill/happy = 10,
|
||||
/obj/item/reagent_containers/pill/lsd = 15,
|
||||
/obj/item/reagent_containers/pill/aranesp = 25,
|
||||
/obj/item/reagent_containers/pill/psicodine = 20,
|
||||
/obj/item/reagent_containers/pill/mannitol = 19,
|
||||
/obj/item/reagent_containers/pill/happiness = 1,
|
||||
)
|
||||
|
||||
/obj/effect/spawner/lootdrop/low_loot_toilet
|
||||
name = "random low toilet spawner"
|
||||
lootcount = 1
|
||||
//Note this is out of a 100 - Meaning the number you see is also the percent its going to pick that
|
||||
//This is ment for "low" loot that anyone could fine in a toilet, for better gear use high loot toilet
|
||||
loot = list("" = 30,
|
||||
/obj/item/lighter = 2,
|
||||
/obj/item/tape/random = 1,
|
||||
/obj/item/poster/random_contraband = 1,
|
||||
/obj/item/clothing/glasses/sunglasses/blindfold = 4,
|
||||
/obj/item/clothing/glasses/sunglasses = 1,
|
||||
/obj/item/toy/plush/random = 5,
|
||||
/obj/effect/spawner/lootdrop/gloves = 5,
|
||||
/obj/effect/spawner/lootdrop/glowstick = 5,
|
||||
/obj/effect/spawner/lootdrop/coin = 3,
|
||||
/obj/effect/spawner/lootdrop/cig_packs = 10,
|
||||
/obj/effect/spawner/lootdrop/cigars_cases = 2,
|
||||
/obj/effect/spawner/lootdrop/space_cash = 5,
|
||||
/obj/item/reagent_containers/food/snacks/grown/cannabis = 5,
|
||||
/obj/item/storage/pill_bottle/dice = 5,
|
||||
/obj/item/toy/cards/deck = 5,
|
||||
/obj/effect/spawner/lootdrop/druggie_pill = 5
|
||||
)
|
||||
|
||||
/obj/effect/spawner/lootdrop/prison_loot_toilet
|
||||
name = "random prison toilet spawner"
|
||||
lootcount = 1
|
||||
//Note this is out of a 100 - Meaning the number you see is also the percent its going to pick that
|
||||
//This is ment for "prison" loot that is rather rare and ment for "prisoners if they get a crowbar to fine, or sec.
|
||||
loot = list("" = 10,
|
||||
/obj/item/lighter = 5,
|
||||
/obj/item/poster/random_contraband = 5,
|
||||
/obj/item/clothing/glasses/sunglasses = 5,
|
||||
/obj/effect/spawner/lootdrop/coin = 5,
|
||||
/obj/effect/spawner/lootdrop/cig_packs = 10,
|
||||
/obj/effect/spawner/lootdrop/cigars_cases = 5,
|
||||
/obj/item/reagent_containers/food/snacks/grown/cannabis = 5,
|
||||
/obj/item/storage/pill_bottle/dice = 5,
|
||||
/obj/item/toy/cards/deck = 5,
|
||||
/obj/effect/spawner/lootdrop/druggie_pill = 5,
|
||||
/obj/item/kitchen/knife = 5,
|
||||
/obj/item/screwdriver = 5,
|
||||
/obj/item/crowbar/red = 0.5, //Dont you need a crowbar to open this?
|
||||
/obj/item/stack/medical/bruise_pack = 3,
|
||||
/obj/item/reagent_containers/food/drinks/bottle/vodka = 2,
|
||||
/obj/item/radio = 5,
|
||||
/obj/item/flashlight = 4.5,
|
||||
/obj/item/clothing/mask/breath = 2,
|
||||
/obj/item/tank/internals/emergency_oxygen = 3,
|
||||
/obj/item/storage/box/mre/menu4/safe = 3,
|
||||
/obj/item/grenade/smokebomb = 2
|
||||
)
|
||||
|
||||
/obj/effect/spawner/lootdrop/high_loot_toilet
|
||||
name = "random high toilet spawner"
|
||||
lootcount = 1
|
||||
//Note this is out of a 100 - Meaning the number you see is also the percent its going to pick that
|
||||
//The items inside are always going to be something usefull, illegal and likely traitorous.
|
||||
loot = list(
|
||||
/obj/item/clothing/glasses/sunglasses = 5,
|
||||
/obj/effect/spawner/lootdrop/coin = 5,
|
||||
/obj/effect/spawner/lootdrop/space_cash = 5,
|
||||
/obj/effect/spawner/lootdrop/druggie_pill = 5,
|
||||
/obj/item/storage/fancy/cigarettes/cigpack_syndicate = 5,
|
||||
/obj/item/suppressor = 5,
|
||||
/obj/item/toy/cards/deck/syndicate = 5,
|
||||
/obj/item/clothing/under/syndicate = 5,
|
||||
/obj/item/clothing/mask/gas/syndicate = 5,
|
||||
/obj/item/grenade/smokebomb = 10,
|
||||
/obj/item/gun/ballistic/automatic/toy/pistol = 5,
|
||||
/obj/item/firing_pin = 5,
|
||||
/obj/item/grenade/empgrenade = 15,
|
||||
/obj/item/clothing/gloves/combat = 10,
|
||||
/obj/item/clothing/shoes/sneakers/noslip = 10
|
||||
)
|
||||
|
||||
@@ -97,8 +97,6 @@ GLOBAL_VAR_INIT(rpg_loot_items, FALSE)
|
||||
var/tool_behaviour = NONE
|
||||
var/toolspeed = 1
|
||||
|
||||
var/block_chance = 0
|
||||
var/hit_reaction_chance = 0 //If you want to have something unrelated to blocking/armour piercing etc. Maybe not needed, but trying to think ahead/allow more freedom
|
||||
var/reach = 1 //In tiles, how far this weapon can reach; 1 for adjacent, which is default
|
||||
|
||||
//The list of slots by priority. equip_to_appropriate_slot() uses this list. Doesn't matter if a mob type doesn't have a slot.
|
||||
@@ -369,13 +367,6 @@ GLOBAL_VAR_INIT(rpg_loot_items, FALSE)
|
||||
|
||||
// afterattack() and attack() prototypes moved to _onclick/item_attack.dm for consistency
|
||||
|
||||
/obj/item/proc/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK)
|
||||
SEND_SIGNAL(src, COMSIG_ITEM_HIT_REACT, args)
|
||||
if(prob(final_block_chance))
|
||||
owner.visible_message("<span class='danger'>[owner] blocks [attack_text] with [src]!</span>")
|
||||
return 1
|
||||
return 0
|
||||
|
||||
/obj/item/proc/talk_into(mob/M, input, channel, spans, datum/language/language)
|
||||
return ITALICS | REDUCE_RANGE
|
||||
|
||||
@@ -468,9 +459,6 @@ GLOBAL_VAR_INIT(rpg_loot_items, FALSE)
|
||||
/obj/item/proc/ui_action_click(mob/user, actiontype)
|
||||
attack_self(user)
|
||||
|
||||
/obj/item/proc/IsReflect(var/def_zone) //This proc determines if and at what% an object will reflect energy projectiles if it's in l_hand,r_hand or wear_suit
|
||||
return 0
|
||||
|
||||
/obj/item/proc/eyestab(mob/living/carbon/M, mob/living/carbon/user)
|
||||
if(HAS_TRAIT(user, TRAIT_PACIFISM))
|
||||
to_chat(user, "<span class='warning'>You don't want to harm [M]!</span>")
|
||||
|
||||
@@ -706,11 +706,11 @@ CIGARETTE PACKETS ARE IN FANCY.DM
|
||||
name = "\improper E-Cigarette"
|
||||
desc = "A classy and highly sophisticated electronic cigarette, for classy and dignified gentlemen. A warning label reads \"Warning: Do not fill with flammable materials.\""//<<< i'd vape to that.
|
||||
icon = 'icons/obj/clothing/masks.dmi'
|
||||
icon_state = null
|
||||
item_state = null
|
||||
icon_state = "black_vape"
|
||||
item_state = "black_vape"
|
||||
w_class = WEIGHT_CLASS_TINY
|
||||
var/chem_volume = 100
|
||||
var/vapetime = FALSE //this so it won't puff out clouds every tick
|
||||
var/vapetime = FALSE //this so it won't puff out clouds every tick
|
||||
var/screw = FALSE // kinky
|
||||
var/super = FALSE //for the fattest vapes dude.
|
||||
|
||||
@@ -723,11 +723,10 @@ CIGARETTE PACKETS ARE IN FANCY.DM
|
||||
. = ..()
|
||||
create_reagents(chem_volume, NO_REACT, NO_REAGENTS_VALUE) // so it doesn't react until you light it
|
||||
reagents.add_reagent(/datum/reagent/drug/nicotine, 50)
|
||||
if(!icon_state)
|
||||
if(!param_color)
|
||||
param_color = pick("red","blue","black","white","green","purple","yellow","orange")
|
||||
icon_state = "[param_color]_vape"
|
||||
item_state = "[param_color]_vape"
|
||||
if(!param_color)
|
||||
param_color = pick("red","blue","black","white","green","purple","yellow","orange")
|
||||
icon_state = "[param_color]_vape"
|
||||
item_state = "[param_color]_vape"
|
||||
|
||||
/obj/item/clothing/mask/vape/attackby(obj/item/O, mob/user, params)
|
||||
if(O.tool_behaviour == TOOL_SCREWDRIVER)
|
||||
@@ -1067,4 +1066,4 @@ CIGARETTE PACKETS ARE IN FANCY.DM
|
||||
name = "coconut bong"
|
||||
icon_off = "coconut_bong"
|
||||
icon_on = "coconut_bong_lit"
|
||||
desc = "A water bong used for smoking dried plants. This one's made out of a coconut and some bamboo."
|
||||
desc = "A water bong used for smoking dried plants. This one's made out of a coconut and some bamboo."
|
||||
|
||||
@@ -293,10 +293,6 @@
|
||||
name = "Mining Shuttle (Computer Board)"
|
||||
build_path = /obj/machinery/computer/shuttle/mining
|
||||
|
||||
/obj/item/circuitboard/computer/mining_shuttle/common
|
||||
name = "Lavaland Shuttle (Computer Board)"
|
||||
build_path = /obj/machinery/computer/shuttle/mining/common
|
||||
|
||||
/obj/item/circuitboard/computer/white_ship
|
||||
name = "White Ship (Computer Board)"
|
||||
build_path = /obj/machinery/computer/shuttle/white_ship
|
||||
|
||||
@@ -18,7 +18,6 @@
|
||||
var/recharge_locked = FALSE
|
||||
var/obj/item/stock_parts/micro_laser/diode //used for upgrading!
|
||||
|
||||
|
||||
/obj/item/laser_pointer/red
|
||||
pointer_icon_state = "red_laser"
|
||||
/obj/item/laser_pointer/green
|
||||
@@ -28,6 +27,9 @@
|
||||
/obj/item/laser_pointer/purple
|
||||
pointer_icon_state = "purple_laser"
|
||||
|
||||
/obj/item/laser_pointer/blue/handmade
|
||||
diode = null
|
||||
|
||||
/obj/item/laser_pointer/New()
|
||||
..()
|
||||
diode = new(src)
|
||||
|
||||
@@ -310,11 +310,11 @@ SLIME SCANNER
|
||||
//GENERAL HANDLER
|
||||
if(!damage_message)
|
||||
if(O.organ_flags & ORGAN_FAILING)
|
||||
damage_message += " <span class='alert'><b>End Stage [O.name] failure detected.</b></span>"
|
||||
damage_message += " <span class='alert'><b>Chronic [O.name] failure detected.</b></span>"
|
||||
else if(O.damage > O.high_threshold)
|
||||
damage_message += " <span class='alert'>Chronic [O.name] failure detected.</span>"
|
||||
damage_message += " <span class='alert'>Acute [O.name] failure detected.</span>"
|
||||
else if(O.damage > O.low_threshold && advanced)
|
||||
damage_message += " <font color='red'>Acute [O.name] failure detected.</span>"
|
||||
damage_message += " <font color='red'>Minor [O.name] failure detected.</span>"
|
||||
|
||||
if(temp_message || damage_message)
|
||||
msg += "\t<b><span class='info'>[uppertext(O.name)]:</b></span> [damage_message] [temp_message]\n"
|
||||
|
||||
@@ -234,15 +234,16 @@
|
||||
/obj/item/flamethrower/full/tank
|
||||
create_with_tank = TRUE
|
||||
|
||||
/obj/item/flamethrower/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK)
|
||||
var/obj/item/projectile/P = hitby
|
||||
if(damage && attack_type == PROJECTILE_ATTACK && P.damage_type != STAMINA && prob(15))
|
||||
owner.visible_message("<span class='danger'>\The [attack_text] hits the fueltank on [owner]'s [name], rupturing it! What a shot!</span>")
|
||||
var/target_turf = get_turf(owner)
|
||||
igniter.ignite_turf(src,target_turf, release_amount = 100)
|
||||
qdel(ptank)
|
||||
return 1 //It hit the flamethrower, not them
|
||||
|
||||
/obj/item/flamethrower/run_block(mob/living/owner, atom/object, damage, attack_text, attack_type, armour_penetration, mob/attacker, def_zone, final_block_chance, list/block_return)
|
||||
if(attack_type & ATTACK_TYPE_PROJECTILE)
|
||||
var/obj/item/projectile/P = object
|
||||
if(istype(P) && (P.damage_type != STAMINA) && damage && !P.nodamage && prob(15))
|
||||
owner.visible_message("<span class='danger'>\The [attack_text] hits the fueltank on [owner]'s [name], rupturing it! What a shot!</span>")
|
||||
var/target_turf = get_turf(owner)
|
||||
igniter.ignite_turf(src,target_turf, release_amount = 100)
|
||||
qdel(ptank)
|
||||
return BLOCK_SUCCESS | BLOCK_PHYSICAL_EXTERNAL
|
||||
return ..()
|
||||
|
||||
/obj/item/assembly/igniter/proc/flamethrower_process(turf/open/location)
|
||||
location.hotspot_expose(700,2)
|
||||
|
||||
@@ -115,12 +115,14 @@
|
||||
/obj/item/grenade/attack_paw(mob/user)
|
||||
return attack_hand(user)
|
||||
|
||||
/obj/item/grenade/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK)
|
||||
var/obj/item/projectile/P = hitby
|
||||
if(damage && attack_type == PROJECTILE_ATTACK && P.damage_type != STAMINA && prob(15))
|
||||
owner.visible_message("<span class='danger'>[attack_text] hits [owner]'s [src], setting it off! What a shot!</span>")
|
||||
prime()
|
||||
return TRUE //It hit the grenade, not them
|
||||
/obj/item/grenade/run_block(mob/living/owner, atom/object, damage, attack_text, attack_type, armour_penetration, mob/attacker, def_zone, final_block_chance, list/block_return)
|
||||
if(attack_type & ATTACK_TYPE_PROJECTILE)
|
||||
var/obj/item/projectile/P = object
|
||||
if(damage && !P.nodamage && (P.damage_type != STAMINA) && prob(15))
|
||||
owner.visible_message("<span class='danger'>[attack_text] hits [owner]'s [src], setting it off! What a shot!</span>")
|
||||
prime()
|
||||
return BLOCK_SUCCESS | BLOCK_PHYSICAL_EXTERNAL
|
||||
return ..()
|
||||
|
||||
/obj/item/proc/grenade_prime_react(obj/item/grenade/nade)
|
||||
return
|
||||
|
||||
@@ -113,24 +113,24 @@
|
||||
desc = "Looks like some cables tied together. Could be used to tie something up."
|
||||
icon_state = "cuff"
|
||||
item_state = "coil"
|
||||
item_color = "red"
|
||||
color = "#ff0000"
|
||||
color = "red"
|
||||
lefthand_file = 'icons/mob/inhands/equipment/tools_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/equipment/tools_righthand.dmi'
|
||||
custom_materials = list(/datum/material/iron=150, /datum/material/glass=75)
|
||||
breakouttime = 300 //Deciseconds = 30s
|
||||
cuffsound = 'sound/weapons/cablecuff.ogg'
|
||||
|
||||
/obj/item/restraints/handcuffs/cable/Initialize(mapload, param_color)
|
||||
. = ..()
|
||||
|
||||
var/list/cable_colors = GLOB.cable_colors
|
||||
item_color = param_color || item_color || pick(cable_colors)
|
||||
if(cable_colors[item_color])
|
||||
item_color = cable_colors[item_color]
|
||||
color = null
|
||||
add_atom_colour(item_color, FIXED_COLOUR_PRIORITY)
|
||||
cuffsound = 'sound/weapons/cablecuff.ogg'
|
||||
|
||||
/obj/item/restraints/handcuffs/cable/attack_self(mob/user)
|
||||
to_chat(user, "<span class='notice'>You start unwinding the cable restraints back into coil</span>")
|
||||
if(!do_after(user, 25, TRUE, user))
|
||||
return
|
||||
qdel(src)
|
||||
var/obj/item/stack/cable_coil/coil = new(get_turf(user))
|
||||
coil.amount = 15
|
||||
user.put_in_hands(coil)
|
||||
coil.color = color
|
||||
to_chat(user, "<span class='notice'>You unwind the cable restraints back into coil</span>")
|
||||
|
||||
/obj/item/restraints/handcuffs/cable/red
|
||||
item_color = "red"
|
||||
color = "#ff0000"
|
||||
@@ -162,6 +162,13 @@
|
||||
/obj/item/restraints/handcuffs/cable/white
|
||||
item_color = "white"
|
||||
|
||||
/obj/item/restraints/handcuffs/cable/random
|
||||
|
||||
/obj/item/restraints/handcuffs/cable/random/Initialize(mapload)
|
||||
. = ..()
|
||||
var/list/cable_colors = GLOB.cable_colors
|
||||
color = pick(cable_colors)
|
||||
|
||||
/obj/item/restraints/handcuffs/cable/attackby(obj/item/I, mob/user, params)
|
||||
..()
|
||||
if(istype(I, /obj/item/stack/rods))
|
||||
|
||||
@@ -329,9 +329,9 @@
|
||||
hitsound = 'sound/weapons/bladeslice.ogg'
|
||||
attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut")
|
||||
|
||||
/obj/item/nullrod/claymore/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK)
|
||||
if(attack_type == PROJECTILE_ATTACK)
|
||||
final_block_chance = 0 //Don't bring a sword to a gunfight
|
||||
/obj/item/nullrod/claymore/run_block(mob/living/owner, atom/object, damage, attack_text, attack_type, armour_penetration, mob/attacker, def_zone, final_block_chance, list/block_return)
|
||||
if(attack_type & ATTACK_TYPE_PROJECTILE) // Don't bring a sword to a gunfight
|
||||
return NONE
|
||||
return ..()
|
||||
|
||||
/obj/item/nullrod/claymore/darkblade
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user