Merge remote-tracking branch 'citadel/master'
This commit is contained in:
@@ -0,0 +1,45 @@
|
||||
name: Update TGS DMAPI
|
||||
|
||||
on:
|
||||
schedule:
|
||||
- cron: "0 0 * * *"
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
update-dmapi:
|
||||
runs-on: ubuntu-latest
|
||||
name: Update the TGS DMAPI
|
||||
steps:
|
||||
- name: Clone
|
||||
uses: actions/checkout@v2
|
||||
|
||||
- name: Branch
|
||||
run: |
|
||||
git branch -f tgs-dmapi-update
|
||||
git checkout tgs-dmapi-update
|
||||
git reset --hard master
|
||||
|
||||
- name: Apply DMAPI update
|
||||
uses: tgstation/tgs-dmapi-updater@v2
|
||||
with:
|
||||
header-path: 'code/__DEFINES/tgs.dm'
|
||||
library-path: 'code/modules/tgs'
|
||||
|
||||
- name: Commit and Push
|
||||
run: |
|
||||
git config user.name tgstation-server
|
||||
git config user.email tgstation-server@users.noreply.github.com
|
||||
git add *
|
||||
git commit -m 'Update TGS DMAPI'
|
||||
git push -f -u origin tgs-dmapi-update
|
||||
|
||||
- name: Create Pull Request
|
||||
uses: repo-sync/pull-request@v2
|
||||
with:
|
||||
source_branch: "tgs-dmapi-update"
|
||||
destination_branch: "master"
|
||||
pr_title: "Automatic TGS DMAPI Update"
|
||||
pr_body: "This pull request updates the TGS DMAPI to the latest version. Please note any breaking or unimplemented changes before merging."
|
||||
pr_label: "Tools"
|
||||
pr_allow_empty: false
|
||||
github_token: ${{ secrets.GITHUB_TOKEN }}
|
||||
@@ -17,10 +17,14 @@
|
||||
/turf/open/floor/mineral/titanium,
|
||||
/area/ruin/powered)
|
||||
"ag" = (
|
||||
/obj/structure/shuttle/engine/propulsion/right{
|
||||
dir = 4
|
||||
/obj/effect/turf_decal/bot,
|
||||
/obj/effect/decal/cleanable/dirt,
|
||||
/obj/structure/closet,
|
||||
/obj/effect/spawner/lootdrop/maintenance{
|
||||
lootcount = 8;
|
||||
name = "8maintenance loot spawner"
|
||||
},
|
||||
/turf/closed/wall/mineral/titanium,
|
||||
/turf/open/floor/mineral/titanium,
|
||||
/area/ruin/powered)
|
||||
"ah" = (
|
||||
/obj/structure/table/wood,
|
||||
@@ -70,20 +74,21 @@
|
||||
/turf/open/floor/mineral/titanium,
|
||||
/area/ruin/powered)
|
||||
"ar" = (
|
||||
/obj/machinery/door/airlock/titanium{
|
||||
name = "Escape Pod Airlock"
|
||||
},
|
||||
/turf/open/floor/mineral/titanium,
|
||||
/turf/closed/wall/mineral/wood,
|
||||
/area/ruin/powered)
|
||||
"as" = (
|
||||
/obj/machinery/light,
|
||||
/turf/open/floor/mineral/titanium,
|
||||
/area/ruin/powered)
|
||||
"at" = (
|
||||
/obj/structure/shuttle/engine/propulsion/left{
|
||||
dir = 4
|
||||
/obj/structure/extinguisher_cabinet{
|
||||
pixel_x = 5;
|
||||
pixel_y = -32
|
||||
},
|
||||
/turf/closed/wall/mineral/titanium,
|
||||
/obj/machinery/portable_atmospherics/pump,
|
||||
/obj/effect/turf_decal/bot,
|
||||
/obj/effect/decal/cleanable/dirt,
|
||||
/turf/open/floor/mineral/titanium,
|
||||
/area/ruin/powered)
|
||||
"au" = (
|
||||
/obj/item/seeds/tower,
|
||||
@@ -93,11 +98,15 @@
|
||||
/area/ruin/powered)
|
||||
"av" = (
|
||||
/obj/structure/table/wood,
|
||||
/obj/item/paper/crumpled{
|
||||
info = "</b><br><br>So this is it, I guess.. Always thought I'd go out doing something stupid, but.. not like this.<br>Should anyone find this note, tell Jeremy Clarke he can kiss my ass. Launching the pod unprepared like that..<br>Well. Now that I'm keeling over here, I guess I should write how I came to be the last one standing here.<br>Four of us took this pod.. only three of us woke up though.. fourth pod is locked from the inside, we couldn't figure out how to get it open.<br>Me and the clown set up a farm s'we can survive at least a while.. though, he didn't seem to understand that man cannot live on banana alone.<br>Had a bunch of circuits on him for some reason when he eventually passed, whispered to me something about a chem dispenser.. I.. don't know what he meant by that. I was never good with machinary. Maybe he wanted space lube?<br>The assistant that we gave the space suit to go out and find help never came back.. I'm betting he found salvation and left us behind.. never can trust those grubby greytiders."
|
||||
/obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/skeleton{
|
||||
pixel_x = 6;
|
||||
pixel_y = 9
|
||||
},
|
||||
/obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/skeleton,
|
||||
/obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/skeleton{
|
||||
pixel_x = -5;
|
||||
pixel_y = 6
|
||||
},
|
||||
/obj/item/pen,
|
||||
/obj/item/stock_parts/cell/hyper,
|
||||
/turf/open/floor/plating/asteroid,
|
||||
/area/ruin/powered)
|
||||
"aw" = (
|
||||
@@ -142,6 +151,17 @@
|
||||
"aE" = (
|
||||
/turf/open/floor/plating/asteroid/airless,
|
||||
/area/ruin/powered)
|
||||
"aF" = (
|
||||
/obj/machinery/power/port_gen/pacman{
|
||||
active = 1;
|
||||
anchored = 1;
|
||||
sheets = 10
|
||||
},
|
||||
/obj/effect/turf_decal/bot,
|
||||
/obj/effect/decal/cleanable/dirt,
|
||||
/obj/effect/turf_decal/stripes/line,
|
||||
/turf/open/floor/mineral/titanium,
|
||||
/area/ruin/powered)
|
||||
"aG" = (
|
||||
/obj/structure/sink/puddle,
|
||||
/turf/open/floor/plating/asteroid,
|
||||
@@ -187,9 +207,7 @@
|
||||
/turf/open/floor/plating/asteroid,
|
||||
/area/ruin/powered)
|
||||
"aQ" = (
|
||||
/obj/item/stack/ore/gold,
|
||||
/obj/item/stack/ore/gold,
|
||||
/obj/item/stack/ore/gold,
|
||||
/obj/item/circuitboard/machine/circuit_imprinter,
|
||||
/turf/open/floor/plating/asteroid,
|
||||
/area/ruin/powered)
|
||||
"aR" = (
|
||||
@@ -205,8 +223,12 @@
|
||||
/turf/open/floor/plating/asteroid,
|
||||
/area/ruin/powered)
|
||||
"aU" = (
|
||||
/obj/item/flashlight/lamp,
|
||||
/obj/structure/table/wood,
|
||||
/obj/item/reagent_containers/food/snacks/meat/slab/human{
|
||||
pixel_x = 3;
|
||||
pixel_y = 3
|
||||
},
|
||||
/obj/item/reagent_containers/food/snacks/meat/slab/human,
|
||||
/turf/open/floor/plating/asteroid,
|
||||
/area/ruin/powered)
|
||||
"aV" = (
|
||||
@@ -238,20 +260,24 @@
|
||||
/turf/closed/mineral/random/no_caves/earth_like,
|
||||
/area/ruin/powered)
|
||||
"bc" = (
|
||||
/obj/item/circuitboard/machine/circuit_imprinter,
|
||||
/obj/structure/table/wood,
|
||||
/obj/item/vending_refill/snack,
|
||||
/turf/open/floor/plating/asteroid,
|
||||
/area/ruin/powered)
|
||||
"bd" = (
|
||||
/obj/item/grown/bananapeel,
|
||||
/turf/open/floor/plating/asteroid,
|
||||
/obj/structure/shuttle/engine/propulsion/right{
|
||||
dir = 4
|
||||
},
|
||||
/turf/closed/wall/mineral/titanium,
|
||||
/area/ruin/powered)
|
||||
"be" = (
|
||||
/obj/effect/mob_spawn/human/corpse/cargo_tech,
|
||||
/obj/structure/fans/tiny/invisible,
|
||||
/obj/structure/chair/wood/normal{
|
||||
dir = 1
|
||||
},
|
||||
/turf/open/floor/plating/asteroid,
|
||||
/area/ruin/powered)
|
||||
"bf" = (
|
||||
/obj/item/clothing/glasses/meson,
|
||||
/obj/machinery/door/airlock/wood,
|
||||
/turf/open/floor/plating/asteroid,
|
||||
/area/ruin/powered)
|
||||
"bg" = (
|
||||
@@ -275,50 +301,43 @@
|
||||
/turf/open/floor/plating/asteroid,
|
||||
/area/ruin/powered)
|
||||
"bl" = (
|
||||
/obj/machinery/power/floodlight,
|
||||
/obj/structure/cable{
|
||||
icon_state = "0-2"
|
||||
/obj/machinery/door/airlock/titanium{
|
||||
name = "Escape Pod Airlock"
|
||||
},
|
||||
/turf/open/floor/plating/asteroid,
|
||||
/turf/open/floor/mineral/titanium,
|
||||
/area/ruin/powered)
|
||||
"bm" = (
|
||||
/obj/structure/cable{
|
||||
icon_state = "1-4"
|
||||
},
|
||||
/obj/item/flashlight/lamp,
|
||||
/obj/structure/table/wood,
|
||||
/turf/open/floor/plating/asteroid,
|
||||
/area/ruin/powered)
|
||||
"bn" = (
|
||||
/obj/structure/cable{
|
||||
icon_state = "2-8"
|
||||
/obj/structure/table/wood,
|
||||
/obj/item/paper/crumpled{
|
||||
info = "</b><br><br>So this is it, I guess.. Always thought I'd go out doing something stupid, but.. not like this.<br>Should anyone find this note, tell Jeremy Clarke he can kiss my ass. Launching the pod unprepared like that..<br>Well. Now that I'm keeling over here, I guess I should write how I came to be the last one standing here.<br>Four of us took this pod.. only three of us woke up though.. fourth pod is locked from the inside, we couldn't figure out how to get it open.<br>Me and the clown set up a farm s'we can survive at least a while.. though, he didn't seem to understand that man cannot live on banana alone.<br>Had a bunch of circuits on him for some reason when he eventually passed, whispered to me something about a chem dispenser.. I.. don't know what he meant by that. I was never good with machinary. Maybe he wanted space lube?<br>The assistant that we gave the space suit to go out and find help never came back.. I'm betting he found salvation and left us behind.. never can trust those grubby greytiders."
|
||||
},
|
||||
/obj/item/pen,
|
||||
/obj/item/stock_parts/cell/hyper,
|
||||
/turf/open/floor/plating/asteroid,
|
||||
/area/ruin/powered)
|
||||
"bo" = (
|
||||
/obj/structure/cable{
|
||||
icon_state = "1-2"
|
||||
},
|
||||
/obj/item/grown/bananapeel,
|
||||
/turf/open/floor/plating/asteroid,
|
||||
/area/ruin/powered)
|
||||
"bp" = (
|
||||
/obj/item/stack/ore/iron,
|
||||
/obj/item/stack/ore/iron,
|
||||
/obj/item/stack/ore/iron,
|
||||
/obj/effect/mob_spawn/human/corpse/cargo_tech,
|
||||
/obj/structure/fans/tiny/invisible,
|
||||
/turf/open/floor/plating/asteroid,
|
||||
/area/ruin/powered)
|
||||
"bq" = (
|
||||
/obj/structure/cable,
|
||||
/obj/machinery/power/port_gen/pacman{
|
||||
active = 1;
|
||||
anchored = 1;
|
||||
sheets = 10
|
||||
},
|
||||
/obj/item/clothing/glasses/meson,
|
||||
/turf/open/floor/plating/asteroid,
|
||||
/area/ruin/powered)
|
||||
"br" = (
|
||||
/obj/item/stack/ore/iron,
|
||||
/obj/item/stack/sheet/mineral/plasma,
|
||||
/obj/item/stack/sheet/mineral/plasma,
|
||||
/turf/open/floor/plating/asteroid,
|
||||
/obj/effect/decal/cleanable/oil{
|
||||
icon_state = "floor5"
|
||||
},
|
||||
/turf/open/floor/mineral/titanium,
|
||||
/area/ruin/powered)
|
||||
"bs" = (
|
||||
/obj/item/flashlight/lamp/bananalamp,
|
||||
@@ -328,18 +347,181 @@
|
||||
/obj/item/pickaxe/titanium,
|
||||
/turf/open/floor/plating/asteroid,
|
||||
/area/ruin/powered)
|
||||
"fc" = (
|
||||
/obj/item/stack/ore/iron,
|
||||
/obj/item/stack/sheet/mineral/plasma,
|
||||
/obj/item/stack/sheet/mineral/plasma,
|
||||
/turf/open/floor/plating/asteroid,
|
||||
/area/ruin/powered)
|
||||
"fp" = (
|
||||
/turf/closed/mineral/random/high_chance/earth_like,
|
||||
/area/ruin/powered)
|
||||
"jx" = (
|
||||
/turf/closed/mineral/silver/earth_like,
|
||||
/area/ruin/powered)
|
||||
"ma" = (
|
||||
/obj/item/stack/ore/iron,
|
||||
/obj/item/stack/ore/iron,
|
||||
/obj/item/stack/ore/iron,
|
||||
/turf/open/floor/plating/asteroid,
|
||||
/area/ruin/powered)
|
||||
"mr" = (
|
||||
/obj/structure/chair/comfy/shuttle{
|
||||
dir = 8
|
||||
},
|
||||
/obj/effect/mob_spawn/human/skeleton,
|
||||
/turf/open/floor/mineral/titanium,
|
||||
/area/ruin/powered)
|
||||
"nc" = (
|
||||
/turf/closed/mineral/bscrystal/earth_like,
|
||||
/area/ruin/powered)
|
||||
"nl" = (
|
||||
/obj/structure/closet/emcloset,
|
||||
/obj/effect/turf_decal/bot,
|
||||
/turf/open/floor/mineral/titanium,
|
||||
/area/ruin/powered)
|
||||
"oR" = (
|
||||
/obj/structure/cable{
|
||||
icon_state = "2-8"
|
||||
},
|
||||
/turf/open/floor/plating/asteroid,
|
||||
/area/ruin/powered)
|
||||
"wU" = (
|
||||
/obj/machinery/portable_atmospherics/canister/air,
|
||||
/obj/effect/turf_decal/bot,
|
||||
/obj/effect/decal/cleanable/dirt,
|
||||
/turf/open/floor/mineral/titanium,
|
||||
/area/ruin/powered)
|
||||
"zs" = (
|
||||
/obj/structure/reagent_dispensers/watertank/high,
|
||||
/obj/effect/turf_decal/bot,
|
||||
/obj/effect/turf_decal/stripes/line{
|
||||
dir = 10
|
||||
},
|
||||
/turf/open/floor/mineral/titanium,
|
||||
/area/ruin/powered)
|
||||
"CY" = (
|
||||
/obj/machinery/portable_atmospherics/canister/air,
|
||||
/obj/effect/turf_decal/bot,
|
||||
/turf/open/floor/mineral/titanium,
|
||||
/area/ruin/powered)
|
||||
"DH" = (
|
||||
/obj/structure/chair/comfy/shuttle{
|
||||
dir = 8
|
||||
},
|
||||
/obj/effect/decal/cleanable/vomit/old,
|
||||
/turf/open/floor/mineral/titanium,
|
||||
/area/ruin/powered)
|
||||
"Ft" = (
|
||||
/obj/structure/reagent_dispensers/fueltank/high,
|
||||
/obj/effect/turf_decal/bot,
|
||||
/obj/effect/decal/cleanable/dirt,
|
||||
/obj/effect/turf_decal/stripes/line{
|
||||
dir = 8
|
||||
},
|
||||
/turf/open/floor/mineral/titanium,
|
||||
/area/ruin/powered)
|
||||
"HK" = (
|
||||
/obj/structure/cable{
|
||||
icon_state = "1-4"
|
||||
},
|
||||
/turf/open/floor/plating/asteroid,
|
||||
/area/ruin/powered)
|
||||
"HP" = (
|
||||
/obj/machinery/portable_atmospherics/scrubber,
|
||||
/obj/effect/turf_decal/bot,
|
||||
/turf/open/floor/mineral/titanium,
|
||||
/area/ruin/powered)
|
||||
"Iy" = (
|
||||
/obj/item/clothing/suit/hazardvest{
|
||||
desc = "A high-visibility lifejacket complete with whistle and slot for oxygen tanks.";
|
||||
name = "emergency lifejacket"
|
||||
},
|
||||
/obj/item/clothing/suit/hazardvest{
|
||||
desc = "A high-visibility lifejacket complete with whistle and slot for oxygen tanks.";
|
||||
name = "emergency lifejacket"
|
||||
},
|
||||
/obj/item/clothing/suit/hazardvest{
|
||||
desc = "A high-visibility lifejacket complete with whistle and slot for oxygen tanks.";
|
||||
name = "emergency lifejacket"
|
||||
},
|
||||
/obj/item/clothing/suit/hazardvest{
|
||||
desc = "A high-visibility lifejacket complete with whistle and slot for oxygen tanks.";
|
||||
name = "emergency lifejacket"
|
||||
},
|
||||
/obj/item/clothing/suit/hazardvest{
|
||||
desc = "A high-visibility lifejacket complete with whistle and slot for oxygen tanks.";
|
||||
name = "emergency lifejacket"
|
||||
},
|
||||
/obj/item/tank/internals/emergency_oxygen/double{
|
||||
pixel_x = 3
|
||||
},
|
||||
/obj/item/tank/internals/emergency_oxygen/double{
|
||||
pixel_x = 3
|
||||
},
|
||||
/obj/item/tank/internals/emergency_oxygen/double{
|
||||
pixel_x = 3
|
||||
},
|
||||
/obj/item/tank/internals/emergency_oxygen/double{
|
||||
pixel_x = 3
|
||||
},
|
||||
/obj/item/tank/internals/emergency_oxygen/double{
|
||||
pixel_x = 3
|
||||
},
|
||||
/obj/item/clothing/mask/breath{
|
||||
pixel_x = -3;
|
||||
pixel_y = -3
|
||||
},
|
||||
/obj/item/clothing/mask/breath{
|
||||
pixel_x = -3;
|
||||
pixel_y = -3
|
||||
},
|
||||
/obj/item/clothing/mask/breath{
|
||||
pixel_x = -3;
|
||||
pixel_y = -3
|
||||
},
|
||||
/obj/item/clothing/mask/breath{
|
||||
pixel_x = -3;
|
||||
pixel_y = -3
|
||||
},
|
||||
/obj/item/clothing/mask/breath{
|
||||
pixel_x = -3;
|
||||
pixel_y = -3
|
||||
},
|
||||
/obj/item/clothing/head/hardhat/orange{
|
||||
name = "protective hat";
|
||||
pixel_y = 9
|
||||
},
|
||||
/obj/item/clothing/head/hardhat/orange{
|
||||
name = "protective hat";
|
||||
pixel_y = 9
|
||||
},
|
||||
/obj/item/clothing/head/hardhat/orange{
|
||||
name = "protective hat";
|
||||
pixel_y = 9
|
||||
},
|
||||
/obj/item/clothing/head/hardhat/orange{
|
||||
name = "protective hat";
|
||||
pixel_y = 9
|
||||
},
|
||||
/obj/item/clothing/head/hardhat/orange{
|
||||
name = "protective hat";
|
||||
pixel_y = 9
|
||||
},
|
||||
/obj/structure/closet/crate/internals,
|
||||
/obj/effect/turf_decal/bot,
|
||||
/turf/open/floor/mineral/titanium,
|
||||
/area/ruin/powered)
|
||||
"JZ" = (
|
||||
/turf/closed/mineral/titanium/earth_like,
|
||||
/area/ruin/powered)
|
||||
"Kj" = (
|
||||
/obj/machinery/power/floodlight,
|
||||
/obj/structure/cable{
|
||||
icon_state = "0-2"
|
||||
},
|
||||
/turf/open/floor/plating/asteroid,
|
||||
/area/ruin/powered)
|
||||
"Lt" = (
|
||||
/obj/structure/mirror,
|
||||
/turf/closed/wall/mineral/iron,
|
||||
@@ -347,6 +529,19 @@
|
||||
"PG" = (
|
||||
/turf/closed/mineral/gold/earth_like,
|
||||
/area/ruin/powered)
|
||||
"Qi" = (
|
||||
/obj/structure/cable,
|
||||
/obj/machinery/power/port_gen/pacman{
|
||||
active = 1;
|
||||
anchored = 1;
|
||||
sheets = 10
|
||||
},
|
||||
/turf/open/floor/plating/asteroid,
|
||||
/area/ruin/powered)
|
||||
"Sv" = (
|
||||
/obj/effect/decal/cleanable/dirt,
|
||||
/turf/open/floor/mineral/titanium,
|
||||
/area/ruin/powered)
|
||||
"Ue" = (
|
||||
/turf/closed/mineral/diamond/earth_like,
|
||||
/area/ruin/powered)
|
||||
@@ -358,6 +553,24 @@
|
||||
/obj/item/circuitboard/machine/ore_redemption,
|
||||
/turf/open/floor/plating/asteroid,
|
||||
/area/ruin/powered)
|
||||
"WP" = (
|
||||
/obj/item/stack/ore/gold,
|
||||
/obj/item/stack/ore/gold,
|
||||
/obj/item/stack/ore/gold,
|
||||
/turf/open/floor/plating/asteroid,
|
||||
/area/ruin/powered)
|
||||
"Xh" = (
|
||||
/obj/structure/cable{
|
||||
icon_state = "1-2"
|
||||
},
|
||||
/turf/open/floor/plating/asteroid,
|
||||
/area/ruin/powered)
|
||||
"XQ" = (
|
||||
/obj/structure/shuttle/engine/propulsion/left{
|
||||
dir = 4
|
||||
},
|
||||
/turf/closed/wall/mineral/titanium,
|
||||
/area/ruin/powered)
|
||||
|
||||
(1,1,1) = {"
|
||||
aa
|
||||
@@ -1123,9 +1336,9 @@ bb
|
||||
bb
|
||||
af
|
||||
ak
|
||||
ao
|
||||
ao
|
||||
ao
|
||||
DH
|
||||
an
|
||||
mr
|
||||
ak
|
||||
af
|
||||
am
|
||||
@@ -1175,9 +1388,9 @@ bb
|
||||
aR
|
||||
ae
|
||||
ae
|
||||
an
|
||||
an
|
||||
an
|
||||
af
|
||||
bl
|
||||
af
|
||||
ae
|
||||
ae
|
||||
am
|
||||
@@ -1225,13 +1438,13 @@ ba
|
||||
ba
|
||||
bb
|
||||
aR
|
||||
ae
|
||||
ag
|
||||
ag
|
||||
af
|
||||
ar
|
||||
af
|
||||
at
|
||||
nl
|
||||
an
|
||||
HP
|
||||
at
|
||||
ae
|
||||
am
|
||||
bb
|
||||
fp
|
||||
@@ -1277,13 +1490,13 @@ aL
|
||||
bb
|
||||
bb
|
||||
aT
|
||||
am
|
||||
am
|
||||
am
|
||||
am
|
||||
am
|
||||
am
|
||||
am
|
||||
bl
|
||||
br
|
||||
an
|
||||
an
|
||||
an
|
||||
an
|
||||
bl
|
||||
aR
|
||||
bb
|
||||
bb
|
||||
@@ -1329,13 +1542,13 @@ am
|
||||
ba
|
||||
bb
|
||||
am
|
||||
am
|
||||
am
|
||||
am
|
||||
am
|
||||
am
|
||||
am
|
||||
am
|
||||
af
|
||||
Ft
|
||||
zs
|
||||
Sv
|
||||
CY
|
||||
wU
|
||||
af
|
||||
bg
|
||||
bb
|
||||
fp
|
||||
@@ -1381,13 +1594,13 @@ am
|
||||
ba
|
||||
bb
|
||||
bb
|
||||
am
|
||||
am
|
||||
am
|
||||
am
|
||||
am
|
||||
am
|
||||
am
|
||||
ae
|
||||
Iy
|
||||
aF
|
||||
br
|
||||
CY
|
||||
CY
|
||||
ae
|
||||
bb
|
||||
bb
|
||||
bb
|
||||
@@ -1432,14 +1645,14 @@ am
|
||||
bb
|
||||
bb
|
||||
bb
|
||||
aU
|
||||
am
|
||||
bd
|
||||
am
|
||||
am
|
||||
bd
|
||||
af
|
||||
bl
|
||||
bm
|
||||
am
|
||||
am
|
||||
af
|
||||
XQ
|
||||
XQ
|
||||
bb
|
||||
bb
|
||||
bb
|
||||
@@ -1484,15 +1697,15 @@ am
|
||||
bb
|
||||
bb
|
||||
ba
|
||||
av
|
||||
be
|
||||
am
|
||||
am
|
||||
am
|
||||
bn
|
||||
bo
|
||||
bo
|
||||
bq
|
||||
am
|
||||
am
|
||||
am
|
||||
am
|
||||
am
|
||||
am
|
||||
bb
|
||||
bb
|
||||
bb
|
||||
@@ -1525,10 +1738,10 @@ bb
|
||||
bb
|
||||
bb
|
||||
bb
|
||||
ba
|
||||
am
|
||||
am
|
||||
am
|
||||
ar
|
||||
ar
|
||||
ar
|
||||
ar
|
||||
am
|
||||
am
|
||||
am
|
||||
@@ -1536,15 +1749,15 @@ am
|
||||
bb
|
||||
bb
|
||||
bb
|
||||
bc
|
||||
bf
|
||||
am
|
||||
am
|
||||
am
|
||||
am
|
||||
am
|
||||
am
|
||||
br
|
||||
am
|
||||
am
|
||||
am
|
||||
bb
|
||||
bb
|
||||
bb
|
||||
@@ -1577,10 +1790,10 @@ bb
|
||||
bb
|
||||
bb
|
||||
bb
|
||||
bb
|
||||
bb
|
||||
bb
|
||||
bb
|
||||
ar
|
||||
av
|
||||
am
|
||||
ar
|
||||
am
|
||||
am
|
||||
am
|
||||
@@ -1629,10 +1842,10 @@ bb
|
||||
fp
|
||||
bb
|
||||
bb
|
||||
bb
|
||||
bb
|
||||
bb
|
||||
bb
|
||||
ar
|
||||
aU
|
||||
be
|
||||
bf
|
||||
am
|
||||
am
|
||||
am
|
||||
@@ -1645,8 +1858,8 @@ am
|
||||
am
|
||||
aR
|
||||
am
|
||||
am
|
||||
am
|
||||
Kj
|
||||
HK
|
||||
am
|
||||
bb
|
||||
bb
|
||||
@@ -1681,11 +1894,11 @@ bb
|
||||
bb
|
||||
bb
|
||||
bb
|
||||
bb
|
||||
bb
|
||||
bb
|
||||
bb
|
||||
ba
|
||||
ar
|
||||
bc
|
||||
am
|
||||
ar
|
||||
am
|
||||
am
|
||||
am
|
||||
am
|
||||
@@ -1698,10 +1911,10 @@ am
|
||||
am
|
||||
am
|
||||
am
|
||||
am
|
||||
am
|
||||
am
|
||||
am
|
||||
oR
|
||||
Xh
|
||||
Xh
|
||||
Qi
|
||||
ba
|
||||
ba
|
||||
ba
|
||||
@@ -1733,16 +1946,18 @@ bb
|
||||
bb
|
||||
bb
|
||||
bb
|
||||
bb
|
||||
bb
|
||||
bb
|
||||
bb
|
||||
ar
|
||||
ar
|
||||
ar
|
||||
ar
|
||||
ba
|
||||
ba
|
||||
ba
|
||||
aK
|
||||
ba
|
||||
ba
|
||||
bm
|
||||
bo
|
||||
am
|
||||
am
|
||||
am
|
||||
@@ -1750,9 +1965,7 @@ am
|
||||
am
|
||||
am
|
||||
am
|
||||
bp
|
||||
am
|
||||
am
|
||||
fc
|
||||
aR
|
||||
ba
|
||||
ba
|
||||
@@ -1795,16 +2008,16 @@ fp
|
||||
ba
|
||||
fp
|
||||
ba
|
||||
bn
|
||||
bp
|
||||
am
|
||||
am
|
||||
am
|
||||
am
|
||||
am
|
||||
aP
|
||||
am
|
||||
am
|
||||
am
|
||||
am
|
||||
am
|
||||
am
|
||||
am
|
||||
am
|
||||
am
|
||||
aR
|
||||
ba
|
||||
ba
|
||||
@@ -1848,14 +2061,14 @@ ba
|
||||
ba
|
||||
ba
|
||||
aQ
|
||||
aP
|
||||
bq
|
||||
am
|
||||
am
|
||||
aR
|
||||
am
|
||||
am
|
||||
am
|
||||
am
|
||||
WP
|
||||
aP
|
||||
bb
|
||||
am
|
||||
ba
|
||||
@@ -2009,7 +2222,7 @@ bg
|
||||
am
|
||||
am
|
||||
am
|
||||
am
|
||||
ma
|
||||
am
|
||||
aS
|
||||
bb
|
||||
|
||||
@@ -1453,7 +1453,7 @@
|
||||
/area/ruin/space/has_grav/hotel/guestroom/room_2)
|
||||
"eu" = (
|
||||
/obj/structure/table/wood,
|
||||
/obj/item/storage/box/dice,
|
||||
/obj/item/storage/dice,
|
||||
/turf/open/floor/wood,
|
||||
/area/ruin/space/has_grav/hotel/guestroom/room_2)
|
||||
"ev" = (
|
||||
|
||||
@@ -5371,7 +5371,7 @@
|
||||
/area/awaymission/research/interior/dorm)
|
||||
"kS" = (
|
||||
/obj/structure/table/wood,
|
||||
/obj/item/storage/box/dice,
|
||||
/obj/item/storage/dice,
|
||||
/turf/open/floor/plasteel,
|
||||
/area/awaymission/research/interior/dorm)
|
||||
"kT" = (
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -8535,7 +8535,7 @@
|
||||
/obj/effect/turf_decal/tile/bar{
|
||||
dir = 1
|
||||
},
|
||||
/obj/item/storage/box/dice,
|
||||
/obj/item/storage/dice,
|
||||
/obj/item/toy/cards/deck,
|
||||
/turf/open/floor/plasteel,
|
||||
/area/crew_quarters/bar)
|
||||
@@ -16727,7 +16727,7 @@
|
||||
/area/bridge)
|
||||
"aKw" = (
|
||||
/obj/structure/table,
|
||||
/obj/item/storage/box/dice,
|
||||
/obj/item/storage/dice,
|
||||
/obj/item/toy/cards/deck,
|
||||
/obj/structure/disposalpipe/segment{
|
||||
dir = 4
|
||||
@@ -31929,7 +31929,7 @@
|
||||
/obj/effect/turf_decal/tile/green{
|
||||
dir = 4
|
||||
},
|
||||
/obj/item/storage/box/dice,
|
||||
/obj/item/storage/dice,
|
||||
/obj/item/toy/cards/deck,
|
||||
/turf/open/floor/plasteel/white/corner{
|
||||
dir = 1
|
||||
|
||||
@@ -20277,7 +20277,7 @@
|
||||
/area/security/prison)
|
||||
"aND" = (
|
||||
/obj/structure/table,
|
||||
/obj/item/storage/box/dice,
|
||||
/obj/item/storage/dice,
|
||||
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
|
||||
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
|
||||
dir = 4
|
||||
@@ -20973,7 +20973,7 @@
|
||||
/area/crew_quarters/bar/atrium)
|
||||
"aOJ" = (
|
||||
/obj/structure/table/wood,
|
||||
/obj/item/storage/box/dice,
|
||||
/obj/item/storage/dice,
|
||||
/obj/effect/turf_decal/tile/red{
|
||||
dir = 1
|
||||
},
|
||||
@@ -73299,7 +73299,7 @@
|
||||
/area/library)
|
||||
"ctL" = (
|
||||
/obj/structure/table/wood,
|
||||
/obj/item/storage/box/dice,
|
||||
/obj/item/storage/dice,
|
||||
/obj/machinery/computer/security/telescreen/entertainment{
|
||||
pixel_y = -32
|
||||
},
|
||||
@@ -95302,7 +95302,7 @@
|
||||
/area/medical/medbay/central)
|
||||
"deG" = (
|
||||
/obj/structure/table/wood,
|
||||
/obj/item/storage/box/dice,
|
||||
/obj/item/storage/dice,
|
||||
/obj/structure/sign/poster/official/help_others{
|
||||
pixel_x = -32
|
||||
},
|
||||
@@ -116727,7 +116727,7 @@
|
||||
/area/library/abandoned)
|
||||
"dQx" = (
|
||||
/obj/structure/table/wood,
|
||||
/obj/item/storage/box/dice,
|
||||
/obj/item/storage/dice,
|
||||
/turf/open/floor/carpet,
|
||||
/area/library/abandoned)
|
||||
"dQy" = (
|
||||
@@ -122957,7 +122957,7 @@
|
||||
/area/hallway/secondary/exit/departure_lounge)
|
||||
"ecH" = (
|
||||
/obj/structure/table,
|
||||
/obj/item/storage/box/dice,
|
||||
/obj/item/storage/dice,
|
||||
/obj/effect/turf_decal/delivery,
|
||||
/turf/open/floor/plasteel,
|
||||
/area/hallway/secondary/exit/departure_lounge)
|
||||
|
||||
@@ -928,7 +928,7 @@
|
||||
/area/security/prison)
|
||||
"acb" = (
|
||||
/obj/structure/table,
|
||||
/obj/item/storage/box/dice,
|
||||
/obj/item/storage/dice,
|
||||
/turf/open/floor/plasteel,
|
||||
/area/security/prison)
|
||||
"acc" = (
|
||||
@@ -15807,7 +15807,7 @@
|
||||
/area/crew_quarters/dorms)
|
||||
"aDZ" = (
|
||||
/obj/structure/table,
|
||||
/obj/item/storage/box/dice,
|
||||
/obj/item/storage/dice,
|
||||
/turf/open/floor/plasteel,
|
||||
/area/crew_quarters/dorms)
|
||||
"aEa" = (
|
||||
@@ -21386,7 +21386,7 @@
|
||||
/area/crew_quarters/locker)
|
||||
"aPI" = (
|
||||
/obj/structure/table,
|
||||
/obj/item/storage/box/dice,
|
||||
/obj/item/storage/dice,
|
||||
/turf/open/floor/plasteel,
|
||||
/area/crew_quarters/locker)
|
||||
"aPJ" = (
|
||||
@@ -42546,7 +42546,7 @@
|
||||
dir = 10
|
||||
},
|
||||
/obj/structure/table/wood/poker,
|
||||
/obj/item/storage/box/dice,
|
||||
/obj/item/storage/dice,
|
||||
/turf/open/floor/wood,
|
||||
/area/crew_quarters/bar)
|
||||
"bFt" = (
|
||||
|
||||
@@ -22551,7 +22551,7 @@
|
||||
/area/hallway/primary/starboard)
|
||||
"aJa" = (
|
||||
/obj/structure/table,
|
||||
/obj/item/storage/box/dice,
|
||||
/obj/item/storage/dice,
|
||||
/obj/machinery/firealarm{
|
||||
dir = 4;
|
||||
pixel_x = -24
|
||||
@@ -22871,7 +22871,7 @@
|
||||
/obj/machinery/requests_console{
|
||||
department = "Genetics";
|
||||
name = "Genetics RC";
|
||||
pixel_x = 28
|
||||
pixel_x = 28
|
||||
},
|
||||
/turf/open/floor/plasteel/white,
|
||||
/area/medical/genetics)
|
||||
@@ -28655,7 +28655,7 @@
|
||||
"aTf" = (
|
||||
/obj/structure/table/wood,
|
||||
/obj/item/clipboard,
|
||||
/obj/item/storage/box/dice,
|
||||
/obj/item/storage/dice,
|
||||
/obj/effect/turf_decal/tile/neutral{
|
||||
dir = 1
|
||||
},
|
||||
|
||||
@@ -2180,7 +2180,7 @@
|
||||
/turf/open/floor/plasteel/dark,
|
||||
/area/security/prison)
|
||||
"afp" = (
|
||||
/obj/item/storage/box/dice,
|
||||
/obj/item/storage/dice,
|
||||
/obj/structure/table,
|
||||
/turf/open/floor/plasteel/dark,
|
||||
/area/security/prison)
|
||||
@@ -10645,7 +10645,7 @@
|
||||
/area/crew_quarters/dorms)
|
||||
"ayo" = (
|
||||
/obj/structure/table/wood,
|
||||
/obj/item/storage/box/dice,
|
||||
/obj/item/storage/dice,
|
||||
/turf/open/floor/carpet,
|
||||
/area/crew_quarters/dorms)
|
||||
"ayq" = (
|
||||
|
||||
@@ -4095,7 +4095,7 @@
|
||||
/area/engine/supermatter)
|
||||
"aOP" = (
|
||||
/obj/structure/table/wood,
|
||||
/obj/item/storage/box/dice,
|
||||
/obj/item/storage/dice,
|
||||
/turf/open/floor/plasteel/dark,
|
||||
/area/security/prison)
|
||||
"aPw" = (
|
||||
@@ -27914,7 +27914,7 @@
|
||||
"nIM" = (
|
||||
/obj/structure/table/wood/poker,
|
||||
/obj/item/toy/cards/deck,
|
||||
/obj/item/storage/box/dice{
|
||||
/obj/item/storage/dice{
|
||||
pixel_x = 8
|
||||
},
|
||||
/obj/structure/sign/poster/contraband/random{
|
||||
@@ -33380,7 +33380,7 @@
|
||||
/area/bridge)
|
||||
"qMN" = (
|
||||
/obj/structure/table,
|
||||
/obj/item/storage/box/dice,
|
||||
/obj/item/storage/dice,
|
||||
/turf/open/floor/plasteel/grimy,
|
||||
/area/crew_quarters/fitness/recreation)
|
||||
"qNB" = (
|
||||
|
||||
@@ -8429,7 +8429,7 @@
|
||||
/area/centcom/ferry)
|
||||
"tx" = (
|
||||
/obj/structure/table/wood,
|
||||
/obj/item/storage/box/dice,
|
||||
/obj/item/storage/dice,
|
||||
/turf/open/floor/plasteel/grimy,
|
||||
/area/centcom/ferry)
|
||||
"ty" = (
|
||||
@@ -10217,7 +10217,7 @@
|
||||
/area/wizard_station)
|
||||
"xy" = (
|
||||
/obj/structure/table/wood/fancy,
|
||||
/obj/item/storage/box/dice{
|
||||
/obj/item/storage/dice{
|
||||
icon_state = "magicdicebag"
|
||||
},
|
||||
/turf/open/floor/carpet,
|
||||
|
||||
@@ -307,7 +307,7 @@
|
||||
"D" = (
|
||||
/obj/structure/table/reinforced,
|
||||
/obj/item/folder,
|
||||
/obj/item/storage/box/dice,
|
||||
/obj/item/storage/dice,
|
||||
/obj/effect/turf_decal/delivery,
|
||||
/turf/open/floor/plasteel,
|
||||
/area/shuttle/arrival)
|
||||
|
||||
@@ -237,7 +237,7 @@
|
||||
/area/shuttle/arrival)
|
||||
"C" = (
|
||||
/obj/structure/table/reinforced,
|
||||
/obj/item/storage/box/dice{
|
||||
/obj/item/storage/dice{
|
||||
pixel_x = -2;
|
||||
pixel_y = 8
|
||||
},
|
||||
|
||||
@@ -76,8 +76,14 @@
|
||||
#define LINGHIVE_LINK 3
|
||||
|
||||
//whether the emote is visible or audible.
|
||||
// Requires sight
|
||||
#define EMOTE_VISIBLE 1
|
||||
// Requires hearing
|
||||
#define EMOTE_AUDIBLE 2
|
||||
// Requires sight or hearing
|
||||
#define EMOTE_BOTH 3
|
||||
// Always able to be seen
|
||||
#define EMOTE_OMNI 4
|
||||
|
||||
//Don't set this very much higher then 1024 unless you like inviting people in to dos your server with message spam
|
||||
#define MAX_MESSAGE_LEN 2048 //Citadel edit: What's the WORST that could happen?
|
||||
@@ -89,4 +95,4 @@
|
||||
|
||||
// Audio/Visual Flags. Used to determine what sense are required to notice a message.
|
||||
#define MSG_VISUAL (1<<0)
|
||||
#define MSG_AUDIBLE (1<<1)
|
||||
#define MSG_AUDIBLE (1<<1)
|
||||
|
||||
@@ -34,6 +34,7 @@
|
||||
#define SPECIES_SYNTH "synth"
|
||||
#define SPECIES_SYNTH_MIL "military_synth"
|
||||
#define SPECIES_VAMPIRE "vampire"
|
||||
#define SPECIES_VAMPIRE_WEAK "vampire_roundstart"
|
||||
#define SPECIES_XENOHYBRID "xeno"
|
||||
#define SPECIES_ZOMBIE "zombie"
|
||||
|
||||
|
||||
@@ -208,10 +208,9 @@
|
||||
#define TRAIT_FAST_PUMP "fast_pump"
|
||||
#define TRAIT_NO_PROCESS_FOOD "no-process-food" // You don't get benefits from nutriment, nor nutrition from reagent consumables
|
||||
#define TRAIT_NICE_SHOT "nice_shot" //hnnnnnnnggggg..... you're pretty good...
|
||||
/// Prevents stamina buffer regeneration
|
||||
#define TRAIT_NO_STAMINA_BUFFER_REGENERATION "block_stamina_buffer_regen"
|
||||
/// Prevents stamina regeneration
|
||||
#define TRAIT_NO_STAMINA_REGENERATION "block_stamina_regen"
|
||||
#define TRAIT_NO_STAMINA_BUFFER_REGENERATION "block_stamina_buffer_regen" /// Prevents stamina buffer regeneration
|
||||
#define TRAIT_NO_STAMINA_REGENERATION "block_stamina_regen" /// Prevents stamina regeneration
|
||||
#define TRAIT_ARMOR_BROKEN "armor_broken" //acts as if you are wearing no clothing when taking damage, does not affect non-clothing sources of protection
|
||||
|
||||
// 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)
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
#define PLURALITY_VOTING 0
|
||||
#define APPROVAL_VOTING 1
|
||||
#define SCHULZE_VOTING 2
|
||||
#define SCORE_VOTING 3
|
||||
#define MAJORITY_JUDGEMENT_VOTING 4
|
||||
#define INSTANT_RUNOFF_VOTING 5
|
||||
#define PLURALITY_VOTING "PLURALITY"
|
||||
#define APPROVAL_VOTING "APPROVAL"
|
||||
#define SCHULZE_VOTING "SCHULZE"
|
||||
#define SCORE_VOTING "SCORE"
|
||||
#define MAJORITY_JUDGEMENT_VOTING "MAJORITY_JUDGEMENT"
|
||||
#define INSTANT_RUNOFF_VOTING "IRV"
|
||||
|
||||
#define SHOW_RESULTS (1<<0)
|
||||
#define SHOW_VOTES (1<<1)
|
||||
@@ -26,4 +26,4 @@ GLOBAL_LIST_INIT(display_vote_settings, list(\
|
||||
"Ongoing Votes" = SHOW_VOTES,
|
||||
"Winner" = SHOW_WINNER,
|
||||
"Abstainers" = SHOW_ABSTENTION
|
||||
))
|
||||
))
|
||||
|
||||
@@ -290,7 +290,7 @@
|
||||
/datum/config_entry/flag/tgstyle_maprotation
|
||||
|
||||
/datum/config_entry/string/map_vote_type
|
||||
config_entry_value = "SCORE"
|
||||
config_entry_value = APPROVAL_VOTING
|
||||
|
||||
/datum/config_entry/number/maprotatechancedelta
|
||||
config_entry_value = 0.75
|
||||
|
||||
@@ -50,17 +50,20 @@ PROCESSING_SUBSYSTEM_DEF(circuit)
|
||||
/obj/item/electronic_assembly/simple,
|
||||
/obj/item/electronic_assembly/hook,
|
||||
/obj/item/electronic_assembly/pda,
|
||||
/obj/item/electronic_assembly/dildo,
|
||||
/obj/item/electronic_assembly/small/default,
|
||||
/obj/item/electronic_assembly/small/cylinder,
|
||||
/obj/item/electronic_assembly/small/scanner,
|
||||
/obj/item/electronic_assembly/small/hook,
|
||||
/obj/item/electronic_assembly/small/box,
|
||||
/obj/item/electronic_assembly/small/dildo,
|
||||
/obj/item/electronic_assembly/medium/default,
|
||||
/obj/item/electronic_assembly/medium/box,
|
||||
/obj/item/electronic_assembly/medium/clam,
|
||||
/obj/item/electronic_assembly/medium/medical,
|
||||
/obj/item/electronic_assembly/medium/gun,
|
||||
/obj/item/electronic_assembly/medium/radio,
|
||||
/obj/item/electronic_assembly/medium/dildo,
|
||||
/obj/item/electronic_assembly/large/default,
|
||||
/obj/item/electronic_assembly/large/scope,
|
||||
/obj/item/electronic_assembly/large/terminal,
|
||||
|
||||
@@ -45,22 +45,29 @@ SUBSYSTEM_DEF(statpanels)
|
||||
var/list/vote_arry = list(
|
||||
list("Vote active!", "There is currently a vote running. Question: [SSvote.question]")
|
||||
) //see the MC on how this works.
|
||||
if(!(SSvote.vote_system in list(PLURALITY_VOTING, APPROVAL_VOTING)))
|
||||
if(!(SSvote.vote_system in list(PLURALITY_VOTING, APPROVAL_VOTING, SCHULZE_VOTING, INSTANT_RUNOFF_VOTING)))
|
||||
vote_arry[++vote_arry.len] += list("STATPANEL VOTING DISABLED!", "The current vote system is not supported by statpanel rendering. Please vote manually by opening the vote popup using the action button or chat link.", "disabled")
|
||||
//does not return.
|
||||
else
|
||||
vote_arry[++vote_arry.len] += list("Time Left:", " [round(SSvote.end_time - world.time)] seconds")
|
||||
vote_arry[++vote_arry.len] += list("Time Left:", " [DisplayTimeText(SSvote.end_time - world.time)] seconds")
|
||||
vote_arry[++vote_arry.len] += list("Choices:", "")
|
||||
for(var/choice in SSvote.choice_statclicks)
|
||||
var/choice_id = SSvote.choice_statclicks[choice]
|
||||
var/ivotedforthis = FALSE
|
||||
if(target.ckey)
|
||||
switch(SSvote.vote_system)
|
||||
if(APPROVAL_VOTING)
|
||||
ivotedforthis = SSvote.voted[target.ckey] && (text2num(choice_id) in SSvote.voted[usr.ckey])
|
||||
if(PLURALITY_VOTING)
|
||||
ivotedforthis = (SSvote.voted[target.ckey] == text2num(choice_id))
|
||||
vote_arry[++vote_arry.len] += list(ivotedforthis ? "\[X\]" : "\[ \]", choice, "[REF(SSvote)];vote=[choice_id];statpannel=1")
|
||||
if(PLURALITY_VOTING, APPROVAL_VOTING)
|
||||
var/ivotedforthis = FALSE
|
||||
if(SSvote.vote_system == APPROVAL_VOTING)
|
||||
ivotedforthis = SSvote.voted[target.ckey] && (text2num(choice_id) in SSvote.voted[target.ckey])
|
||||
else
|
||||
ivotedforthis = (SSvote.voted[target.ckey] == text2num(choice_id))
|
||||
vote_arry[++vote_arry.len] += list(ivotedforthis ? "\[X\]" : "\[ \]", choice, "[REF(SSvote)];vote=[choice_id];statpannel=1")
|
||||
if(SCHULZE_VOTING, INSTANT_RUNOFF_VOTING)
|
||||
var/list/vote = SSvote.voted[target.ckey]
|
||||
var/vote_position = " "
|
||||
if(vote)
|
||||
vote_position = vote.Find(text2num(choice_id))
|
||||
vote_arry[++vote_arry.len] += list("\[[vote_position]\]", choice, "[REF(SSvote)];vote=[choice_id];statpannel=1")
|
||||
var/vote_str = url_encode(json_encode(vote_arry))
|
||||
target << output("[vote_str]", "statbrowser:update_voting")
|
||||
else
|
||||
|
||||
@@ -482,18 +482,7 @@ SUBSYSTEM_DEF(ticker)
|
||||
INVOKE_ASYNC(SSmapping, /datum/controller/subsystem/mapping/.proc/maprotate)
|
||||
else
|
||||
var/vote_type = CONFIG_GET(string/map_vote_type)
|
||||
switch(vote_type)
|
||||
if("PLURALITY")
|
||||
SSvote.initiate_vote("map","server", display = SHOW_RESULTS)
|
||||
if("APPROVAL")
|
||||
SSvote.initiate_vote("map","server", display = SHOW_RESULTS, votesystem = APPROVAL_VOTING)
|
||||
if("IRV")
|
||||
SSvote.initiate_vote("map","server", display = SHOW_RESULTS, votesystem = INSTANT_RUNOFF_VOTING)
|
||||
if("SCORE")
|
||||
SSvote.initiate_vote("map","server", display = SHOW_RESULTS, votesystem = MAJORITY_JUDGEMENT_VOTING)
|
||||
else
|
||||
SSvote.initiate_vote("map","server", display = SHOW_RESULTS)
|
||||
// fallback
|
||||
SSvote.initiate_vote("map","server", display = SHOW_RESULTS, votesystem = vote_type)
|
||||
|
||||
/datum/controller/subsystem/ticker/proc/HasRoundStarted()
|
||||
return current_state >= GAME_STATE_PLAYING
|
||||
|
||||
@@ -25,18 +25,15 @@
|
||||
|
||||
/datum/accent/abductor/modify_speech(list/speech_args, datum/source)
|
||||
var/message = speech_args[SPEECH_MESSAGE]
|
||||
var/mob/living/carbon/human/user = source
|
||||
var/mob/living/carbon/user = source
|
||||
var/obj/item/organ/tongue/abductor/A = user.getorgan(/obj/item/organ/tongue/abductor)
|
||||
var/rendered = "<span class='abductor'><b>[user.name]:</b> [message]</span>"
|
||||
user.log_talk(message, LOG_SAY, tag="abductor")
|
||||
for(var/mob/living/carbon/human/H in GLOB.alive_mob_list)
|
||||
var/obj/item/organ/tongue/T = H.getorganslot(ORGAN_SLOT_TONGUE)
|
||||
if(!T || T.type != type)
|
||||
for(var/mob/living/carbon/C in GLOB.alive_mob_list)
|
||||
var/obj/item/organ/tongue/abductor/T = C.getorgan(/obj/item/organ/tongue/abductor)
|
||||
if(!T || T.mothership != A.mothership)
|
||||
continue
|
||||
if(H.dna && H.dna.species.id == "abductor" && user.dna && user.dna.species.id == "abductor")
|
||||
var/datum/antagonist/abductor/A = user.mind.has_antag_datum(/datum/antagonist/abductor)
|
||||
if(!A || !(H.mind in A.team.members))
|
||||
continue
|
||||
to_chat(H, rendered)
|
||||
to_chat(C, rendered)
|
||||
for(var/mob/M in GLOB.dead_mob_list)
|
||||
var/link = FOLLOW_LINK(M, user)
|
||||
to_chat(M, "[link] [rendered]")
|
||||
|
||||
@@ -174,7 +174,7 @@
|
||||
M.ghostize(can_reenter_corpse = TRUE, voluntary = TRUE)
|
||||
|
||||
/datum/action/proc/OnUpdatedIcon()
|
||||
UpdateButtonIcon()
|
||||
addtimer(CALLBACK(src, .proc/UpdateButtonIcon), 1) //Hopefully runs after new icon overlays have been compiled.
|
||||
|
||||
//Presets for item actions
|
||||
/datum/action/item_action
|
||||
|
||||
@@ -248,7 +248,7 @@
|
||||
category = CAT_WEAPONRY
|
||||
subcategory = CAT_WEAPON
|
||||
|
||||
/datum/crafting_recipe/ishotgun // smaller and more versatile gun requires some better materials
|
||||
/datum/crafting_recipe/ishotgun
|
||||
name = "Improvised Shotgun"
|
||||
result = /obj/item/gun/ballistic/revolver/doublebarrel/improvised
|
||||
reqs = list(/obj/item/pipe = 2, // putting a large amount of meaningless timegates by forcing people to turn base resources into upgraded resources kinda sucks
|
||||
@@ -408,7 +408,7 @@
|
||||
/datum/crafting_recipe/rifle_receiver
|
||||
name = "Improvised Rifle Receiver"
|
||||
result = /obj/item/weaponcrafting/improvised_parts/rifle_receiver
|
||||
reqs = list(/obj/item/stack/sheet/metal = 15) // you can carry multiple shotguns
|
||||
reqs = list(/obj/item/stack/sheet/metal = 15)
|
||||
tools = list(TOOL_SCREWDRIVER, TOOL_WELDER)
|
||||
time = 25
|
||||
category = CAT_WEAPONRY
|
||||
@@ -417,10 +417,9 @@
|
||||
/datum/crafting_recipe/shotgun_receiver
|
||||
name = "Improvised Shotgun Receiver"
|
||||
result = /obj/item/weaponcrafting/improvised_parts/shotgun_receiver
|
||||
reqs = list(/obj/item/stack/sheet/metal = 15,
|
||||
/obj/item/stack/sheet/plasteel = 1) // requires access or hacking since shotgun is better
|
||||
reqs = list(/obj/item/stack/sheet/metal = 10) // shotgun does less damage than the rifle and can't 1shot but is more portable
|
||||
tools = list(TOOL_SCREWDRIVER, TOOL_WELDER)
|
||||
time = 25
|
||||
time = 20
|
||||
category = CAT_WEAPONRY
|
||||
subcategory = CAT_PARTS
|
||||
|
||||
@@ -432,6 +431,6 @@
|
||||
reqs = list(/obj/item/stack/sheet/metal = 3,
|
||||
/obj/item/assembly/igniter = 1)
|
||||
tools = list(TOOL_SCREWDRIVER, TOOL_WELDER)
|
||||
time = 25
|
||||
time = 20
|
||||
category = CAT_WEAPONRY
|
||||
subcategory = CAT_PARTS
|
||||
|
||||
@@ -46,6 +46,21 @@
|
||||
if(isnum(use_delay_override))
|
||||
use_delay = use_delay_override
|
||||
|
||||
/datum/component/squeak/UnregisterFromParent()
|
||||
if(!isatom(parent))
|
||||
return
|
||||
UnregisterSignal(parent, list(COMSIG_ATOM_ENTERED, COMSIG_ATOM_BLOB_ACT, COMSIG_ATOM_HULK_ATTACK, COMSIG_PARENT_ATTACKBY))
|
||||
if(ismovable(parent))
|
||||
UnregisterSignal(parent, list(COMSIG_MOVABLE_BUMP, COMSIG_MOVABLE_IMPACT,
|
||||
COMSIG_MOVABLE_CROSSED, COMSIG_ITEM_WEARERCROSSED, COMSIG_MOVABLE_CROSS,
|
||||
COMSIG_CROSS_SQUEAKED, COMSIG_MOVABLE_DISPOSING))
|
||||
if(isitem(parent))
|
||||
UnregisterSignal(parent, list(COMSIG_ITEM_ATTACK, COMSIG_ITEM_ATTACK_OBJ, COMSIG_ITEM_HIT_REACT, COMSIG_ITEM_ATTACK_SELF,
|
||||
COMSIG_ITEM_EQUIPPED, COMSIG_ITEM_DROPPED))
|
||||
if(istype(parent, /obj/item/clothing/shoes))
|
||||
UnregisterSignal(parent, COMSIG_SHOES_STEP_ACTION)
|
||||
return ..()
|
||||
|
||||
/datum/component/squeak/proc/play_squeak()
|
||||
do_play_squeak()
|
||||
|
||||
|
||||
@@ -66,8 +66,12 @@
|
||||
|
||||
if(emote_type == EMOTE_AUDIBLE)
|
||||
user.audible_message(msg)
|
||||
else
|
||||
else if(emote_type == EMOTE_VISIBLE)
|
||||
user.visible_message(msg)
|
||||
else if(emote_type == EMOTE_BOTH)
|
||||
user.visible_message(msg, blind_message = msg)
|
||||
else if(emote_type == EMOTE_OMNI)
|
||||
user.visible_message(msg, omni = TRUE)
|
||||
|
||||
/datum/emote/proc/replace_pronoun(mob/user, message)
|
||||
if(findtext(message, "their"))
|
||||
|
||||
@@ -150,7 +150,6 @@
|
||||
overlays_standing[CM.layer_used] = mut_overlay
|
||||
apply_overlay(CM.layer_used)
|
||||
|
||||
|
||||
/datum/mutation/human/proc/modify() //called when a genome is applied so we can properly update some stats without having to remove and reapply the mutation from someone
|
||||
if(modified || !power || !owner)
|
||||
return
|
||||
|
||||
@@ -197,7 +197,7 @@
|
||||
|
||||
if(gangtool)//Here is where all of the text occurs when a gang boss first spawns in.
|
||||
var/obj/item/device/gangtool/G = new()
|
||||
var/where = H.equip_in_one_of_slots(G, slots)
|
||||
var/where = H.equip_in_one_of_slots(G, slots, critical = TRUE)
|
||||
if (!where)
|
||||
to_chat(H, "Your Syndicate benefactors were unfortunately unable to get you a Gangtool.")
|
||||
else
|
||||
@@ -207,7 +207,7 @@
|
||||
|
||||
if(pen)
|
||||
var/obj/item/pen/gang/T = new()
|
||||
var/where2 = H.equip_in_one_of_slots(T, slots)
|
||||
var/where2 = H.equip_in_one_of_slots(T, slots, critical = TRUE)
|
||||
if (!where2)
|
||||
to_chat(H, "Your Syndicate benefactors were unfortunately unable to get you a recruitment pen to start.")
|
||||
else
|
||||
@@ -215,7 +215,7 @@
|
||||
|
||||
if(spraycan)
|
||||
var/obj/item/toy/crayon/spraycan/gang/SC = new(null,gang)
|
||||
var/where3 = H.equip_in_one_of_slots(SC, slots)
|
||||
var/where3 = H.equip_in_one_of_slots(SC, slots, critical = TRUE)
|
||||
if (!where3)
|
||||
to_chat(H, "Your Syndicate benefactors were unfortunately unable to get you a territory spraycan to start.")
|
||||
else
|
||||
@@ -223,7 +223,7 @@
|
||||
|
||||
if(hud)
|
||||
var/obj/item/clothing/glasses/hud/security/chameleon/C = new(null,gang)
|
||||
var/where4 = H.equip_in_one_of_slots(C, slots)
|
||||
var/where4 = H.equip_in_one_of_slots(C, slots, critical = TRUE)
|
||||
if (!where4)
|
||||
to_chat(H, "Your Syndicate benefactors were unfortunately unable to get you a chameleon security HUD.")
|
||||
else
|
||||
|
||||
@@ -166,7 +166,7 @@ If not set, defaults to check_completion instead. Set it. It's used by cryo.
|
||||
var/list/slots = list("backpack" = SLOT_IN_BACKPACK)
|
||||
for(var/eq_path in special_equipment)
|
||||
var/obj/O = new eq_path
|
||||
H.equip_in_one_of_slots(O, slots)
|
||||
H.equip_in_one_of_slots(O, slots, critical = TRUE)
|
||||
|
||||
/datum/objective/assassinate
|
||||
name = "assasinate"
|
||||
@@ -1152,7 +1152,7 @@ GLOBAL_LIST_EMPTY(cult_contraband)
|
||||
I.forceMove(get_turf(owner))
|
||||
if(ishuman(owner))
|
||||
var/mob/living/carbon/human/H = owner
|
||||
H.equip_in_one_of_slots(I, list("backpack" = SLOT_IN_BACKPACK))
|
||||
H.equip_in_one_of_slots(I, list("backpack" = SLOT_IN_BACKPACK), critical = TRUE)
|
||||
hoarded_item = I
|
||||
|
||||
|
||||
|
||||
@@ -114,7 +114,7 @@ GLOBAL_LIST_EMPTY(announcement_systems)
|
||||
. = ..()
|
||||
if(.)
|
||||
return
|
||||
if(!usr.canUseTopic(src, !issilicon(usr)))
|
||||
if(!usr.canUseTopic(src, !hasSiliconAccessInArea(usr)))
|
||||
return
|
||||
if(stat & BROKEN)
|
||||
visible_message("<span class='warning'>[src] buzzes.</span>", "<span class='hear'>You hear a faint buzz.</span>")
|
||||
@@ -147,7 +147,7 @@ GLOBAL_LIST_EMPTY(announcement_systems)
|
||||
. = attack_ai(user)
|
||||
|
||||
/obj/machinery/announcement_system/attack_ai(mob/user)
|
||||
if(!user.canUseTopic(src, !issilicon(user)))
|
||||
if(!user.canUseTopic(src, !hasSiliconAccessInArea(user)))
|
||||
return
|
||||
if(stat & BROKEN)
|
||||
to_chat(user, "<span class='warning'>[src]'s firmware appears to be malfunctioning!</span>")
|
||||
@@ -167,7 +167,9 @@ GLOBAL_LIST_EMPTY(announcement_systems)
|
||||
act_up()
|
||||
|
||||
/obj/machinery/announcement_system/emag_act()
|
||||
. = ..()
|
||||
if(obj_flags & EMAGGED)
|
||||
return
|
||||
obj_flags |= EMAGGED
|
||||
act_up()
|
||||
return TRUE
|
||||
|
||||
@@ -21,6 +21,9 @@
|
||||
return
|
||||
if(R.scrambledcodes)
|
||||
return
|
||||
if(hasSiliconAccessInArea(user) && !issilicon(user))
|
||||
if(!Adjacent(user))
|
||||
return
|
||||
return TRUE
|
||||
|
||||
/obj/machinery/computer/robotics/ui_interact(mob/user, datum/tgui/ui)
|
||||
@@ -40,6 +43,10 @@
|
||||
else if(IsAdminGhost(user))
|
||||
data["can_hack"] = TRUE
|
||||
|
||||
data["can_convert"] = FALSE
|
||||
if(isAI(user) && is_servant_of_ratvar(user))
|
||||
data["can_convert"] = TRUE
|
||||
|
||||
data["cyborgs"] = list()
|
||||
for(var/mob/living/silicon/robot/R in GLOB.silicon_mobs)
|
||||
if(!can_control(user, R))
|
||||
@@ -54,6 +61,7 @@
|
||||
module = R.module ? "[R.module.name] Module" : "No Module Detected",
|
||||
synchronization = R.connected_ai,
|
||||
emagged = R.emagged,
|
||||
servant = is_servant_of_ratvar(R),
|
||||
ref = REF(R)
|
||||
)
|
||||
data["cyborgs"] += list(cyborg_data)
|
||||
@@ -110,6 +118,13 @@
|
||||
log_game("[key_name(usr)] emagged [key_name(R)] using robotic console!")
|
||||
message_admins("[ADMIN_LOOKUPFLW(usr)] emagged cyborg [key_name_admin(R)] using robotic console!")
|
||||
R.SetEmagged(TRUE)
|
||||
if("convert")
|
||||
if(isAI(usr) && is_servant_of_ratvar(usr))
|
||||
var/mob/living/silicon/robot/R = locate(params["ref"]) in GLOB.silicon_mobs
|
||||
if(istype(R) && !is_servant_of_ratvar(R) && R.connected_ai == usr)
|
||||
log_game("[key_name(usr)] converted [key_name(R)] using robotic console!")
|
||||
message_admins("[ADMIN_LOOKUPFLW(usr)] converted cyborg [key_name_admin(R)] using robotic console!")
|
||||
add_servant_of_ratvar(R)
|
||||
if("killdrone")
|
||||
if(allowed(usr))
|
||||
var/mob/living/simple_animal/drone/D = locate(params["ref"]) in GLOB.mob_list
|
||||
|
||||
@@ -32,6 +32,8 @@
|
||||
. = ..()
|
||||
if(in_range(user, src) || isobserver(user))
|
||||
. += "<span class='notice'>The status display reads: Radiation pulse accuracy increased by factor <b>[precision_coeff**2]</b>.<br>Radiation pulse damage decreased by factor <b>[damage_coeff**2]</b>.</span>"
|
||||
if(scan_level >= 3)
|
||||
. += "<span class='notice'>Scanner has been upgraded to support autoprocessing.</span>"
|
||||
|
||||
/obj/machinery/dna_scannernew/update_icon_state()
|
||||
//no power or maintenance
|
||||
@@ -94,6 +96,13 @@
|
||||
|
||||
..(user)
|
||||
|
||||
// search for ghosts, if the corpse is empty and the scanner is connected to a cloner
|
||||
var/mob/living/mob_occupant = get_mob_or_brainmob(occupant)
|
||||
if(istype(mob_occupant))
|
||||
if(locate_computer(/obj/machinery/computer/cloning))
|
||||
if(!mob_occupant.suiciding && !(HAS_TRAIT(mob_occupant, TRAIT_NOCLONE)) && !mob_occupant.hellbound)
|
||||
mob_occupant.notify_ghost_cloning("Your corpse has been placed into a cloning scanner. Re-enter your corpse if you want to be cloned!", source = src)
|
||||
|
||||
// DNA manipulators cannot operate on severed heads or brains
|
||||
if(iscarbon(occupant))
|
||||
if(linked_console)
|
||||
|
||||
@@ -1457,6 +1457,16 @@
|
||||
ui.open()
|
||||
return TRUE
|
||||
|
||||
/obj/machinery/door/airlock/ui_status(mob/user)
|
||||
. = ..()
|
||||
if (!issilicon(user) && hasSiliconAccessInArea(user))
|
||||
. = UI_INTERACTIVE
|
||||
|
||||
/obj/machinery/door/airlock/can_interact(mob/user)
|
||||
. = ..()
|
||||
if (!issilicon(user) && hasSiliconAccessInArea(user))
|
||||
return TRUE
|
||||
|
||||
/obj/machinery/door/airlock/ui_data()
|
||||
var/list/data = list()
|
||||
|
||||
|
||||
@@ -28,10 +28,10 @@
|
||||
if(!do_after(user, 30 SECONDS, TRUE, src))
|
||||
to_chat(user, "<span class='warning'>Your fingers slip as you fail to pry the [stored] from the [src], clicking it right back into the slot!</span>")
|
||||
return
|
||||
if(user.put_in_hands(stored))
|
||||
stored.forceMove(user.drop_location())
|
||||
user.put_in_hands(stored)
|
||||
to_chat(user, "<span class='warning'>You successfully pry the [stored] from the [src]\
|
||||
[user.is_holding(stored) ? "" : ", and send its overwhelming weight tumbling onto the ground"]! The tapes on the [src] stop spinning...</span>")
|
||||
stored = null
|
||||
to_chat(user, "<span class='warning'>You successfully pry the [stored] from the [src], and send its overwhelming weight tumbling onto the ground! The tapes on the [src] stop spinning...</span>")
|
||||
update_icon()
|
||||
return
|
||||
else
|
||||
@@ -41,7 +41,7 @@
|
||||
/obj/machinery/blackbox_recorder/attackby(obj/item/I, mob/living/user, params)
|
||||
. = ..()
|
||||
if(istype(I, /obj/item/blackbox))
|
||||
if(HAS_TRAIT(I, TRAIT_NODROP) || !user.transferItemToLoc(I, src))
|
||||
if(!user.transferItemToLoc(I, src))
|
||||
to_chat(user, "<span class='warning'>[I] is stuck to your hand!</span>")
|
||||
return
|
||||
user.visible_message("<span class='notice'>[user] clicks the [I] into the [src]!</span>", \
|
||||
|
||||
@@ -464,7 +464,7 @@
|
||||
/obj/effect/spawner/lootdrop/cigars_cases/no_turf = 2,
|
||||
/obj/effect/spawner/lootdrop/space_cash/no_turf = 5,
|
||||
/obj/item/reagent_containers/food/snacks/grown/cannabis = 5,
|
||||
/obj/item/storage/box/dice = 5,
|
||||
/obj/item/storage/dice = 5,
|
||||
/obj/item/toy/cards/deck = 5,
|
||||
/obj/effect/spawner/lootdrop/druggie_pill/no_turf = 5
|
||||
)
|
||||
@@ -483,7 +483,7 @@
|
||||
/obj/effect/spawner/lootdrop/cig_packs/no_turf = 10,
|
||||
/obj/effect/spawner/lootdrop/cigars_cases/no_turf = 5,
|
||||
/obj/item/reagent_containers/food/snacks/grown/cannabis = 5,
|
||||
/obj/item/storage/box/dice = 5,
|
||||
/obj/item/storage/dice = 5,
|
||||
/obj/item/toy/cards/deck = 5,
|
||||
/obj/effect/spawner/lootdrop/druggie_pill/no_turf = 5,
|
||||
/obj/item/kitchen/knife = 5,
|
||||
|
||||
@@ -93,7 +93,7 @@ RSF
|
||||
use_matter(50, user)
|
||||
if(4)
|
||||
to_chat(user, "Dispensing Dice Pack...")
|
||||
new /obj/item/storage/box/dice(T)
|
||||
new /obj/item/storage/dice(T)
|
||||
use_matter(200, user)
|
||||
if(5)
|
||||
to_chat(user, "Dispensing Cigarette...")
|
||||
|
||||
@@ -616,7 +616,7 @@
|
||||
if(defib.healdisk)
|
||||
H.heal_overall_damage(25, 25)
|
||||
var/list/policies = CONFIG_GET(keyed_list/policyconfig)
|
||||
var/timelimit = CONFIG_GET(number/defib_cmd_time_limit)
|
||||
var/timelimit = CONFIG_GET(number/defib_cmd_time_limit) * 10 //the config is in seconds, not deciseconds
|
||||
var/late = timelimit && (tplus > timelimit)
|
||||
var/policy = late? policies[POLICYCONFIG_ON_DEFIB_LATE] : policies[POLICYCONFIG_ON_DEFIB_INTACT]
|
||||
if(policy)
|
||||
|
||||
@@ -1,39 +1,38 @@
|
||||
/obj/item/storage/box/dice
|
||||
/*****************************Dice Bags********************************/
|
||||
|
||||
/obj/item/storage/dice
|
||||
name = "bag of dice"
|
||||
desc = "Contains all the luck you'll ever need."
|
||||
icon = 'icons/obj/dice.dmi'
|
||||
icon_state = "dicebag"
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
var/list/special_die = list(
|
||||
/obj/item/dice/d1,
|
||||
/obj/item/dice/d2,
|
||||
/obj/item/dice/fudge,
|
||||
/obj/item/dice/d6/space,
|
||||
/obj/item/dice/d00,
|
||||
/obj/item/dice/eightbd20,
|
||||
/obj/item/dice/fourdd6,
|
||||
/obj/item/dice/d100
|
||||
)
|
||||
|
||||
/obj/item/storage/box/dice/Initialize()
|
||||
. = ..()
|
||||
var/special_die = pick("1","2","fudge","space","00","8bd20","4dd6","100")
|
||||
if(special_die == "1")
|
||||
new /obj/item/dice/d1(src)
|
||||
if(special_die == "2")
|
||||
new /obj/item/dice/d2(src)
|
||||
/obj/item/storage/dice/PopulateContents()
|
||||
new /obj/item/dice/d4(src)
|
||||
new /obj/item/dice/d6(src)
|
||||
if(special_die == "fudge")
|
||||
new /obj/item/dice/fudge(src)
|
||||
if(special_die == "space")
|
||||
new /obj/item/dice/d6/space(src)
|
||||
new /obj/item/dice/d8(src)
|
||||
new /obj/item/dice/d10(src)
|
||||
if(special_die == "00")
|
||||
new /obj/item/dice/d00(src)
|
||||
new /obj/item/dice/d12(src)
|
||||
new /obj/item/dice/d20(src)
|
||||
if(special_die == "8bd20")
|
||||
new /obj/item/dice/eightbd20(src)
|
||||
if(special_die == "4dd6")
|
||||
new /obj/item/dice/fourdd6(src)
|
||||
if(special_die == "100")
|
||||
new /obj/item/dice/d100(src)
|
||||
var/picked = pick(special_die)
|
||||
new picked(src)
|
||||
|
||||
/obj/item/storage/box/dice/suicide_act(mob/user)
|
||||
/obj/item/storage/dice/suicide_act(mob/user)
|
||||
user.visible_message("<span class='suicide'>[user] is gambling with death! It looks like [user.p_theyre()] trying to commit suicide!</span>")
|
||||
return (OXYLOSS)
|
||||
|
||||
/*****************************Dice********************************/
|
||||
|
||||
/obj/item/dice //depreciated d6, use /obj/item/dice/d6 if you actually want a d6
|
||||
name = "die"
|
||||
desc = "A die with six sides. Basic and serviceable."
|
||||
|
||||
@@ -92,10 +92,17 @@
|
||||
/obj/item/implant/hijack/proc/hijack_remotely(obj/machinery/power/apc/apc)
|
||||
if (apc.hijacker || hijacking)
|
||||
return FALSE //can't remotely hijack an already hijacked APC
|
||||
|
||||
if(apc.being_hijacked)
|
||||
to_chat(imp_in, "<span class='warning'>This APC is already being hijacked!</span>")
|
||||
return FALSE
|
||||
|
||||
apc.being_hijacked = TRUE
|
||||
hijacking = TRUE
|
||||
to_chat(imp_in, "<span class='notice'>Establishing remote connection with APC.</span>")
|
||||
if (!do_after(imp_in, 4 SECONDS,target=apc))
|
||||
to_chat(imp_in, "<span class='warning'>Aborting.</span>")
|
||||
apc.being_hijacked = FALSE
|
||||
hijacking = FALSE
|
||||
return TRUE
|
||||
if (LAZYLEN(imp_in.siliconaccessareas) >= HIJACK_APC_MAX_AMOUNT)
|
||||
@@ -118,6 +125,7 @@
|
||||
toggle_eyes()
|
||||
else
|
||||
to_chat(imp_in, "<span class='warning'>Aborting.</span>")
|
||||
apc.being_hijacked = FALSE
|
||||
hijacking = FALSE
|
||||
imp_in.light_power = 0
|
||||
imp_in.light_range = 0
|
||||
|
||||
@@ -100,7 +100,7 @@
|
||||
|
||||
var/T = new item_path(mob)
|
||||
var/item_name = initial(item_path.name)
|
||||
var/where = mob.equip_in_one_of_slots(T, slots)
|
||||
var/where = mob.equip_in_one_of_slots(T, slots, critical = TRUE)
|
||||
if(!where)
|
||||
to_chat(mob, "<span class='userdanger'>Unfortunately, you weren't able to get a [item_name]. This is very bad and you should adminhelp immediately (press F1).</span>")
|
||||
return 0
|
||||
|
||||
@@ -75,7 +75,7 @@
|
||||
|
||||
var/T = new item_path(H)
|
||||
var/item_name = initial(item_path.name)
|
||||
var/where = H.equip_in_one_of_slots(T, slots)
|
||||
var/where = H.equip_in_one_of_slots(T, slots, critical = TRUE)
|
||||
if(!where)
|
||||
to_chat(H, "<span class='userdanger'>Unfortunately, you weren't able to get a [item_name]. This is very bad and you should adminhelp immediately (press F1).</span>")
|
||||
return FALSE
|
||||
|
||||
@@ -131,14 +131,14 @@
|
||||
"left pocket" = SLOT_L_STORE,
|
||||
"right pocket" = SLOT_R_STORE
|
||||
)
|
||||
var/where = H.equip_in_one_of_slots(O, slots)
|
||||
var/where = H.equip_in_one_of_slots(O, slots, critical = TRUE)
|
||||
if (!where)
|
||||
to_chat(H, "The Syndicate were unfortunately unable to get you the AI module.")
|
||||
else
|
||||
to_chat(H, "Use the AI board in your [where] to take control of the AI, as requested by the Syndicate.")
|
||||
// Give the implant converter
|
||||
var/obj/item/overthrow_converter/I = new(H)
|
||||
where = H.equip_in_one_of_slots(I, slots)
|
||||
where = H.equip_in_one_of_slots(I, slots, critical = TRUE)
|
||||
if (!where)
|
||||
to_chat(H, "The Syndicate were unfortunately unable to get you a converter implant.")
|
||||
else
|
||||
|
||||
@@ -251,7 +251,7 @@
|
||||
"left pocket" = SLOT_L_STORE,
|
||||
"right pocket" = SLOT_R_STORE
|
||||
)
|
||||
var/where = H.equip_in_one_of_slots(T, slots)
|
||||
var/where = H.equip_in_one_of_slots(T, slots, critical = TRUE)
|
||||
if (!where)
|
||||
to_chat(H, "The Syndicate were unfortunately unable to get you a flash.")
|
||||
else
|
||||
|
||||
@@ -212,7 +212,7 @@
|
||||
)
|
||||
|
||||
var/where = "At your feet"
|
||||
var/equipped_slot = mob.equip_in_one_of_slots(folder, slots)
|
||||
var/equipped_slot = mob.equip_in_one_of_slots(folder, slots, critical = TRUE)
|
||||
if (equipped_slot)
|
||||
where = "In your [equipped_slot]"
|
||||
to_chat(mob, "<BR><BR><span class='info'>[where] is a folder containing <b>secret documents</b> that another Syndicate group wants. We have set up a meeting with one of their agents on station to make an exchange. Exercise extreme caution as they cannot be trusted and may be hostile.</span><BR>")
|
||||
|
||||
@@ -237,12 +237,21 @@
|
||||
. += "<span class='notice'>Alt-click to [locked ? "unlock" : "lock"] the interface.</span>"
|
||||
|
||||
/obj/machinery/airalarm/ui_status(mob/user)
|
||||
if(hasSiliconAccessInArea(user) && aidisabled)
|
||||
to_chat(user, "AI control has been disabled.")
|
||||
else if(!shorted)
|
||||
if(hasSiliconAccessInArea(user))
|
||||
if(aidisabled)
|
||||
to_chat(user, "AI control has been disabled")
|
||||
return UI_CLOSE
|
||||
else if(!issilicon(user)) //True sillycones use ..()
|
||||
return UI_INTERACTIVE
|
||||
if(!shorted)
|
||||
return ..()
|
||||
return UI_CLOSE
|
||||
|
||||
/obj/machinery/airalarm/can_interact(mob/user)
|
||||
. = ..()
|
||||
if (!issilicon(user) && hasSiliconAccessInArea(user))
|
||||
return TRUE
|
||||
|
||||
/obj/machinery/airalarm/ui_interact(mob/user, datum/tgui/ui)
|
||||
ui = SStgui.try_update_ui(user, src, ui)
|
||||
if(!ui)
|
||||
|
||||
@@ -74,7 +74,7 @@
|
||||
actions_types = list(/datum/action/item_action/adjust)
|
||||
visor_flags_inv = HIDEFACE
|
||||
dog_fashion = /datum/dog_fashion/head/clown
|
||||
var/static/list/clownmask_designs = list()
|
||||
var/static/list/clownmask_designs
|
||||
|
||||
/obj/item/clothing/mask/gas/clown_hat/Initialize(mapload)
|
||||
.=..()
|
||||
@@ -131,7 +131,7 @@
|
||||
resistance_flags = FLAMMABLE
|
||||
actions_types = list(/datum/action/item_action/adjust)
|
||||
visor_flags_inv = HIDEFACE
|
||||
var/static/list/mimemask_designs = list()
|
||||
var/static/list/mimemask_designs
|
||||
|
||||
/obj/item/clothing/mask/gas/mime/examine(mob/user)
|
||||
. = ..()
|
||||
|
||||
@@ -199,6 +199,15 @@
|
||||
can_adjust = FALSE
|
||||
mutantrace_variation = STYLE_DIGITIGRADE|STYLE_NO_ANTHRO_ICON
|
||||
|
||||
/obj/item/clothing/under/rank/civilian/janitor/maid/polychromic
|
||||
icon_state = "polymaid"
|
||||
item_state = "polymaid"
|
||||
var/list/poly_colors = list("#FFFFFF", "#000000")
|
||||
|
||||
/obj/item/clothing/under/rank/civilian/janitor/maid/polychromic/ComponentInitialize()
|
||||
. = ..()
|
||||
AddElement(/datum/element/polychromic, poly_colors, 2)
|
||||
|
||||
/obj/item/clothing/under/rank/civilian/lawyer
|
||||
desc = "Slick threads."
|
||||
name = "Lawyer suit"
|
||||
|
||||
@@ -44,7 +44,13 @@
|
||||
priority_announce("Localized energetic flux wave detected on long range scanners. Expected location of impact: [impact_area.name].", "Anomaly Alert")
|
||||
|
||||
/datum/round_event/anomaly/start()
|
||||
var/turf/T = pick(get_area_turfs(impact_area))
|
||||
var/list/turf/valid = list()
|
||||
for(var/i in get_area_turfs(impact_area))
|
||||
var/turf/T = i
|
||||
if(T.density)
|
||||
continue
|
||||
valid += T
|
||||
var/turf/T = pick(valid)
|
||||
var/newAnomaly
|
||||
if(T)
|
||||
newAnomaly = new anomaly_path(T)
|
||||
|
||||
@@ -219,7 +219,7 @@
|
||||
suit_type = /obj/item/clothing/suit/space
|
||||
helmet_type = /obj/item/clothing/head/helmet/space
|
||||
mask_type = /obj/item/clothing/mask/breath
|
||||
storage_type = /obj/item/tank/internals/oxygen
|
||||
storage_type = /obj/item/tank/jetpack/void
|
||||
|
||||
|
||||
/obj/machinery/loot_locator
|
||||
@@ -275,6 +275,7 @@
|
||||
|
||||
/obj/machinery/computer/piratepad_control
|
||||
name = "cargo hold control terminal"
|
||||
resistance_flags = INDESTRUCTIBLE
|
||||
ui_x = 600
|
||||
ui_y = 230
|
||||
var/status_report = "Ready for delivery."
|
||||
|
||||
@@ -651,6 +651,11 @@
|
||||
icon_state = "setup_small_pda"
|
||||
desc = "It's a case, for building small electronics with. This one resembles a PDA."
|
||||
|
||||
/obj/item/electronic_assembly/dildo
|
||||
name = "type-g electronic assembly"
|
||||
icon_state = "setup_dildo_medium"
|
||||
desc = "It's a case, for building small electronics with. This one has a phallic design."
|
||||
|
||||
/obj/item/electronic_assembly/small
|
||||
name = "electronic device"
|
||||
icon_state = "setup_device"
|
||||
@@ -682,6 +687,11 @@
|
||||
icon_state = "setup_device_box"
|
||||
desc = "It's a case, for building tiny-sized electronics with. This one has a boxy design."
|
||||
|
||||
/obj/item/electronic_assembly/small/dildo
|
||||
name = "type-f electronic device"
|
||||
icon_state = "setup_dildo_small"
|
||||
desc = "It's a case, for building tiny-sized electronics with. This one has a phallic design."
|
||||
|
||||
/obj/item/electronic_assembly/medium
|
||||
name = "electronic mechanism"
|
||||
icon_state = "setup_medium"
|
||||
@@ -722,6 +732,12 @@
|
||||
icon_state = "setup_medium_radio"
|
||||
desc = "It's a case, for building medium-sized electronics with. This one resembles an old radio."
|
||||
|
||||
/obj/item/electronic_assembly/medium/dildo
|
||||
name = "type-g electronic mechanism"
|
||||
icon_state = "setup_dildo_large"
|
||||
desc = "It's a case, for building medium-sized electronics with. This one has a phallic design."
|
||||
|
||||
|
||||
/obj/item/electronic_assembly/large
|
||||
name = "electronic machine"
|
||||
icon_state = "setup_large"
|
||||
|
||||
@@ -115,10 +115,10 @@
|
||||
source_air = air_contents
|
||||
|
||||
// Move gas from one place to another
|
||||
move_gas(source_air, target_air)
|
||||
move_gas(source_air, target_air, (istype(target, /obj/item/tank) ? target : null))
|
||||
air_update_turf()
|
||||
|
||||
/obj/item/integrated_circuit/atmospherics/pump/proc/move_gas(datum/gas_mixture/source_air, datum/gas_mixture/target_air)
|
||||
/obj/item/integrated_circuit/atmospherics/pump/proc/move_gas(datum/gas_mixture/source_air, datum/gas_mixture/target_air, obj/item/tank/snowflake)
|
||||
|
||||
// No moles = nothing to pump
|
||||
if(source_air.total_moles() <= 0 || target_air.return_pressure() >= PUMP_MAX_PRESSURE)
|
||||
@@ -132,7 +132,10 @@
|
||||
if(pressure_delta > 0.1)
|
||||
var/transfer_moles = (pressure_delta*target_air.return_volume()/(source_air.return_temperature() * R_IDEAL_GAS_EQUATION))*PUMP_EFFICIENCY
|
||||
var/datum/gas_mixture/removed = source_air.remove(transfer_moles)
|
||||
target_air.merge(removed)
|
||||
if(istype(snowflake)) //Snowflake check for tanks specifically, because tank ruptures are handled in a very snowflakey way that expects all tank interactions to be handled via the tank's procs
|
||||
snowflake.assume_air(removed)
|
||||
else
|
||||
target_air.merge(removed)
|
||||
|
||||
|
||||
// - volume pump - // **Works**
|
||||
@@ -165,7 +168,7 @@
|
||||
direction = SOURCE_TO_TARGET
|
||||
target_pressure = min(PUMP_MAX_VOLUME,abs(new_amount))
|
||||
|
||||
/obj/item/integrated_circuit/atmospherics/pump/volume/move_gas(datum/gas_mixture/source_air, datum/gas_mixture/target_air)
|
||||
/obj/item/integrated_circuit/atmospherics/pump/volume/move_gas(datum/gas_mixture/source_air, datum/gas_mixture/target_air, obj/item/tank/snowflake)
|
||||
// No moles = nothing to pump
|
||||
if(source_air.total_moles() <= 0)
|
||||
return
|
||||
@@ -182,7 +185,10 @@
|
||||
|
||||
var/datum/gas_mixture/removed = source_air.remove_ratio(transfer_ratio * PUMP_EFFICIENCY)
|
||||
|
||||
target_air.merge(removed)
|
||||
if(istype(snowflake))
|
||||
snowflake.assume_air(removed)
|
||||
else
|
||||
target_air.merge(removed)
|
||||
|
||||
|
||||
// - gas vent - // **works**
|
||||
@@ -379,9 +385,20 @@ obj/item/integrated_circuit/atmospherics/connector/portableConnectorReturnAir()
|
||||
removed.set_moles(filtered_gas, 0)
|
||||
|
||||
//Check if the pressure is high enough to put stuff in filtered, or else just put it back in the source
|
||||
var/datum/gas_mixture/target = (filtered_air.return_pressure() < target_pressure ? filtered_air : source_air)
|
||||
target.merge(filtered_out)
|
||||
contaminated_air.merge(removed)
|
||||
if(filtered_air.return_pressure() < target_pressure)
|
||||
if(istype(filtered, /obj/item/tank))
|
||||
filtered.assume_air(filtered_out)
|
||||
else
|
||||
filtered_air.merge(filtered_out)
|
||||
else
|
||||
if(istype(source, /obj/item/tank))
|
||||
source.assume_air(filtered_out)
|
||||
else
|
||||
source_air.merge(filtered_out)
|
||||
if(istype(contaminants, /obj/item/tank))
|
||||
contaminants.assume_air(removed)
|
||||
else
|
||||
contaminated_air.merge(removed)
|
||||
|
||||
|
||||
/obj/item/integrated_circuit/atmospherics/pump/filter/Initialize()
|
||||
@@ -449,10 +466,18 @@ obj/item/integrated_circuit/atmospherics/connector/portableConnectorReturnAir()
|
||||
if(transfer_moles <= 0)
|
||||
return
|
||||
|
||||
var/snowflakecheck = istype(gas_output, /obj/item/tank)
|
||||
|
||||
var/datum/gas_mixture/mix = source_1_gases.remove(transfer_moles * gas_percentage)
|
||||
output_gases.merge(mix)
|
||||
if(snowflakecheck)
|
||||
gas_output.assume_air(mix)
|
||||
else
|
||||
output_gases.merge(mix)
|
||||
mix = source_2_gases.remove(transfer_moles * (1-gas_percentage))
|
||||
output_gases.merge(mix)
|
||||
if(snowflakecheck)
|
||||
gas_output.assume_air(mix)
|
||||
else
|
||||
output_gases.merge(mix)
|
||||
|
||||
|
||||
// - integrated tank - // **works**
|
||||
|
||||
@@ -5,17 +5,6 @@
|
||||
/datum/keybinding/human/can_use(client/user)
|
||||
return ishuman(user.mob)
|
||||
|
||||
/datum/keybinding/human/quick_equip
|
||||
hotkey_keys = list("E")
|
||||
name = "quick_equip"
|
||||
full_name = "Quick Equip"
|
||||
description = "Quickly puts an item in the best slot available"
|
||||
|
||||
/datum/keybinding/human/quick_equip/down(client/user)
|
||||
var/mob/living/carbon/human/H = user.mob
|
||||
H.quick_equip()
|
||||
return TRUE
|
||||
|
||||
/datum/keybinding/human/quick_equipbelt
|
||||
hotkey_keys = list("ShiftE")
|
||||
name = "quick_equipbelt"
|
||||
|
||||
@@ -5,6 +5,17 @@
|
||||
/datum/keybinding/living/can_use(client/user)
|
||||
return isliving(user.mob)
|
||||
|
||||
/datum/keybinding/living/quick_equip
|
||||
hotkey_keys = list("E")
|
||||
name = "quick_equip"
|
||||
full_name = "Quick Equip"
|
||||
description = "Quickly puts an item in the best slot available"
|
||||
|
||||
/datum/keybinding/living/quick_equip/down(client/user)
|
||||
var/mob/living/carbon/human/H = user.mob
|
||||
H.quick_equip()
|
||||
return TRUE
|
||||
|
||||
/datum/keybinding/living/resist
|
||||
hotkey_keys = list("B")
|
||||
name = "resist"
|
||||
|
||||
@@ -59,17 +59,3 @@
|
||||
var/mob/living/silicon/robot/R = user.mob
|
||||
R.uneq_active()
|
||||
return TRUE
|
||||
|
||||
/datum/keybinding/robot/drone/can_use(client/user)
|
||||
return isdrone(user.mob)
|
||||
|
||||
/datum/keybinding/robot/drone/quick_equip_drone // QOL: Drone quickequip
|
||||
hotkey_keys = list("E")
|
||||
name = "quick_equip_drone"
|
||||
full_name = "Quick Equip (Drone)"
|
||||
description = "Quickly puts an item in the best slot available"
|
||||
|
||||
/datum/keybinding/robot/drone/quick_equip_drone/down(client/user)
|
||||
var/mob/living/simple_animal/drone/D = user.mob
|
||||
D.quick_equip()
|
||||
return TRUE
|
||||
@@ -202,7 +202,7 @@
|
||||
var/obj/item/reagent_containers/food/snacks/donkpocket/warm/W = new(src)
|
||||
load(W)
|
||||
if(prob(50))
|
||||
var/obj/item/storage/box/dice/D = new(src)
|
||||
var/obj/item/storage/dice/D = new(src)
|
||||
load(D)
|
||||
else
|
||||
var/obj/item/instrument/guitar/G = new(src)
|
||||
|
||||
@@ -109,9 +109,12 @@ GLOBAL_LIST(labor_sheet_values)
|
||||
qdel(src)
|
||||
|
||||
/obj/machinery/mineral/labor_claim_console/emag_act(mob/user)
|
||||
if(!(obj_flags & EMAGGED))
|
||||
obj_flags |= EMAGGED
|
||||
to_chat(user, "<span class='warning'>PZZTTPFFFT</span>")
|
||||
. = ..()
|
||||
if((obj_flags & EMAGGED))
|
||||
return
|
||||
obj_flags |= EMAGGED
|
||||
to_chat(user, "<span class='warning'>PZZTTPFFFT</span>")
|
||||
return TRUE
|
||||
|
||||
/**********************Prisoner Collection Unit**************************/
|
||||
|
||||
|
||||
@@ -760,6 +760,7 @@
|
||||
/obj/item/melee/transforming/cleaving_saw
|
||||
name = "cleaving saw"
|
||||
desc = "This saw, effective at drawing the blood of beasts, transforms into a long cleaver that makes use of centrifugal force."
|
||||
resistance_flags = LAVA_PROOF | FIRE_PROOF | ACID_PROOF
|
||||
force = 12
|
||||
force_on = 20 //force when active
|
||||
throwforce = 20
|
||||
@@ -1177,6 +1178,7 @@
|
||||
/obj/item/gun/ballistic/revolver/doublebarrel/super
|
||||
name = "super combat shotgun"
|
||||
desc = "From the belly of the beast - or rather, demon. Twice as lethal as a less-than-super shotgun, but a tad bulkier."
|
||||
resistance_flags = LAVA_PROOF | FIRE_PROOF | ACID_PROOF
|
||||
icon_state = "heckgun"
|
||||
slot_flags = null
|
||||
mag_type = /obj/item/ammo_box/magazine/internal/shot/dual/heck
|
||||
@@ -1207,6 +1209,7 @@
|
||||
/obj/item/hierophant_club
|
||||
name = "hierophant club"
|
||||
desc = "The strange technology of this large club allows various nigh-magical feats. It used to beat you, but now you can set the beat."
|
||||
resistance_flags = LAVA_PROOF | FIRE_PROOF | ACID_PROOF
|
||||
icon_state = "hierophant_club_ready_beacon"
|
||||
item_state = "hierophant_club_ready_beacon"
|
||||
icon = 'icons/obj/lavaland/artefacts.dmi'
|
||||
|
||||
@@ -651,11 +651,11 @@
|
||||
name = "Fennec"
|
||||
icon_state = "fennec"
|
||||
|
||||
/datum/sprite_accessory/tails/mam_tails/human/fish
|
||||
/datum/sprite_accessory/tails/mam_tails/fish
|
||||
name = "Fish"
|
||||
icon_state = "fish"
|
||||
|
||||
/datum/sprite_accessory/tails_animated/mam_tails_animated/human/fish
|
||||
/datum/sprite_accessory/tails_animated/mam_tails_animated/fish
|
||||
name = "Fish"
|
||||
icon_state = "fish"
|
||||
|
||||
|
||||
@@ -212,6 +212,7 @@
|
||||
// called when something steps onto a human
|
||||
// this could be made more general, but for now just handle mulebot
|
||||
/mob/living/carbon/human/Crossed(atom/movable/AM)
|
||||
..()
|
||||
var/mob/living/simple_animal/bot/mulebot/MB = AM
|
||||
if(istype(MB))
|
||||
MB.RunOver(src)
|
||||
|
||||
@@ -1,4 +1,6 @@
|
||||
/mob/living/carbon/human/getarmor(def_zone, type)
|
||||
if(HAS_TRAIT(src, TRAIT_ARMOR_BROKEN)) //trait that makes it act as if you have no armor at all, you take natural damage from all sources
|
||||
return 0
|
||||
var/armorval = 0
|
||||
var/organnum = 0
|
||||
|
||||
@@ -18,7 +20,6 @@
|
||||
organnum++
|
||||
return (armorval/max(organnum, 1))
|
||||
|
||||
|
||||
/mob/living/carbon/human/proc/checkarmor(obj/item/bodypart/def_zone, d_type)
|
||||
if(!d_type || !def_zone)
|
||||
return 0
|
||||
|
||||
@@ -668,7 +668,7 @@ GLOBAL_LIST_EMPTY(roundstart_race_names)
|
||||
H.remove_overlay(BODY_FRONT_LAYER)
|
||||
H.remove_overlay(HORNS_LAYER)
|
||||
|
||||
if(!mutant_bodyparts)
|
||||
if(!length(mutant_bodyparts))
|
||||
return
|
||||
|
||||
var/tauric = mutant_bodyparts["taur"] && H.dna.features["taur"] && H.dna.features["taur"] != "None"
|
||||
|
||||
@@ -714,18 +714,25 @@
|
||||
return FALSE
|
||||
|
||||
/datum/action/innate/slime_puddle/Activate()
|
||||
var/mob/living/carbon/human/H = owner
|
||||
//if they have anything stuck to their hands, we immediately say 'no' and return
|
||||
for(var/obj/item/I in H.held_items)
|
||||
if(HAS_TRAIT(I, TRAIT_NODROP))
|
||||
to_chat(owner, "There's something stuck to your hand, stopping you from transforming!")
|
||||
return
|
||||
if(isjellyperson(owner) && IsAvailable())
|
||||
transforming = TRUE
|
||||
UpdateButtonIcon()
|
||||
var/mob/living/carbon/human/H = owner
|
||||
var/mutcolor = "#" + H.dna.features["mcolor"]
|
||||
if(!is_puddle)
|
||||
if(CHECK_MOBILITY(H, MOBILITY_USE))
|
||||
is_puddle = TRUE
|
||||
owner.cut_overlays()
|
||||
if(CHECK_MOBILITY(H, MOBILITY_USE)) //if we can use items, we can turn into a puddle
|
||||
is_puddle = TRUE //so we know which transformation to use when its used
|
||||
owner.cut_overlays() //we dont show our normal sprite, we show a puddle sprite
|
||||
var/obj/effect/puddle_effect = new puddle_into_effect(get_turf(owner), owner.dir)
|
||||
puddle_effect.color = mutcolor
|
||||
H.Stun(in_transformation_duration, ignore_canstun = TRUE)
|
||||
H.Stun(in_transformation_duration, ignore_canstun = TRUE) //cant move while transforming
|
||||
|
||||
//series of traits that make up the puddle behaviour
|
||||
ADD_TRAIT(H, TRAIT_PARALYSIS_L_ARM, SLIMEPUDDLE_TRAIT)
|
||||
ADD_TRAIT(H, TRAIT_PARALYSIS_R_ARM, SLIMEPUDDLE_TRAIT)
|
||||
ADD_TRAIT(H, TRAIT_MOBILITY_NOPICKUP, SLIMEPUDDLE_TRAIT)
|
||||
@@ -733,19 +740,30 @@
|
||||
ADD_TRAIT(H, TRAIT_SPRINT_LOCKED, SLIMEPUDDLE_TRAIT)
|
||||
ADD_TRAIT(H, TRAIT_COMBAT_MODE_LOCKED, SLIMEPUDDLE_TRAIT)
|
||||
ADD_TRAIT(H, TRAIT_MOBILITY_NOREST, SLIMEPUDDLE_TRAIT)
|
||||
ADD_TRAIT(H, TRAIT_ARMOR_BROKEN, SLIMEPUDDLE_TRAIT)
|
||||
H.update_disabled_bodyparts(silent = TRUE) //silently update arms to be paralysed
|
||||
|
||||
H.add_movespeed_modifier(/datum/movespeed_modifier/slime_puddle)
|
||||
H.update_disabled_bodyparts(silent = TRUE)
|
||||
|
||||
H.layer -= 1 //go one layer down so people go over you
|
||||
ENABLE_BITFIELD(H.pass_flags, PASSMOB)
|
||||
squeak = H.AddComponent(/datum/component/squeak, custom_sounds = list('sound/effects/blobattack.ogg'))
|
||||
sleep(in_transformation_duration)
|
||||
ENABLE_BITFIELD(H.pass_flags, PASSMOB) //this actually lets people pass over you
|
||||
squeak = H.AddComponent(/datum/component/squeak, custom_sounds = list('sound/effects/blobattack.ogg')) //blorble noise when people step on you
|
||||
|
||||
//if the user is a changeling, retract their sting
|
||||
H.unset_sting()
|
||||
|
||||
sleep(in_transformation_duration) //wait for animation to end
|
||||
|
||||
//set the puddle overlay up
|
||||
var/mutable_appearance/puddle_overlay = mutable_appearance(icon = puddle_icon, icon_state = puddle_state)
|
||||
puddle_overlay.color = mutcolor
|
||||
tracked_overlay = puddle_overlay
|
||||
owner.add_overlay(puddle_overlay)
|
||||
|
||||
transforming = FALSE
|
||||
UpdateButtonIcon()
|
||||
else
|
||||
//like the above, but reverse everything done!
|
||||
owner.cut_overlay(tracked_overlay)
|
||||
var/obj/effect/puddle_effect = new puddle_from_effect(get_turf(owner), owner.dir)
|
||||
puddle_effect.color = mutcolor
|
||||
@@ -758,6 +776,7 @@
|
||||
REMOVE_TRAIT(H, TRAIT_SPRINT_LOCKED, SLIMEPUDDLE_TRAIT)
|
||||
REMOVE_TRAIT(H, TRAIT_COMBAT_MODE_LOCKED, SLIMEPUDDLE_TRAIT)
|
||||
REMOVE_TRAIT(H, TRAIT_MOBILITY_NOREST, SLIMEPUDDLE_TRAIT)
|
||||
REMOVE_TRAIT(H, TRAIT_ARMOR_BROKEN, SLIMEPUDDLE_TRAIT)
|
||||
H.update_disabled_bodyparts(silent = TRUE)
|
||||
H.remove_movespeed_modifier(/datum/movespeed_modifier/slime_puddle)
|
||||
H.layer += 1 //go one layer back above!
|
||||
|
||||
@@ -15,8 +15,13 @@
|
||||
skinned_type = /obj/item/stack/sheet/animalhide/human
|
||||
var/info_text = "You are a <span class='danger'>Vampire</span>. You will slowly but constantly lose blood if outside of a coffin. If inside a coffin, you will slowly heal. You may gain more blood by grabbing a live victim and using your drain ability."
|
||||
species_category = SPECIES_CATEGORY_UNDEAD
|
||||
var/batform_enabled = TRUE
|
||||
|
||||
/datum/species/vampire/check_roundstart_eligible()
|
||||
/datum/species/vampire/roundstart
|
||||
id = SPECIES_VAMPIRE_WEAK
|
||||
batform_enabled = FALSE
|
||||
|
||||
/datum/species/vampire/roundstart/check_roundstart_eligible()
|
||||
if(SSevents.holidays && SSevents.holidays[HALLOWEEN])
|
||||
return TRUE
|
||||
return FALSE
|
||||
@@ -27,8 +32,9 @@
|
||||
if(!C.dna.skin_tone_override)
|
||||
C.skin_tone = "albino"
|
||||
C.update_body(0)
|
||||
var/obj/effect/proc_holder/spell/targeted/shapeshift/bat/B = new
|
||||
C.AddSpell(B)
|
||||
if(batform_enabled)
|
||||
var/obj/effect/proc_holder/spell/targeted/shapeshift/bat/B = new
|
||||
C.AddSpell(B)
|
||||
|
||||
/datum/species/vampire/on_species_loss(mob/living/carbon/C)
|
||||
. = ..()
|
||||
|
||||
@@ -14,10 +14,29 @@
|
||||
return legcuffed
|
||||
return null
|
||||
|
||||
/mob/living/carbon/proc/equip_in_one_of_slots(obj/item/I, list/slots, qdel_on_fail = 1)
|
||||
/mob/living/carbon/proc/equip_in_one_of_slots(obj/item/I, list/slots, qdel_on_fail = 1, critical = FALSE)
|
||||
for(var/slot in slots)
|
||||
if(equip_to_slot_if_possible(I, slots[slot], qdel_on_fail = 0, disable_warning = TRUE))
|
||||
return slot
|
||||
if(critical) //it is CRITICAL they get this item, no matter what
|
||||
//do they have a backpack?
|
||||
var/obj/item/backpack = get_item_by_slot(SLOT_BACK)
|
||||
if(!backpack)
|
||||
//nothing on their back
|
||||
backpack = new /obj/item/storage/backpack(get_turf(src))
|
||||
if(equip_to_slot(backpack, SLOT_BACK)) //worst-case-scenario, something that shouldnt wear a backpack gets one
|
||||
I.forceMove(backpack)
|
||||
return SLOT_BACK
|
||||
else if(istype(backpack) && SEND_SIGNAL(backpack, COMSIG_CONTAINS_STORAGE))
|
||||
//place it in here, regardless of storage capacity
|
||||
I.forceMove(backpack)
|
||||
return SLOT_BACK
|
||||
else
|
||||
//this should NEVER happen, but if it does, report it with the appropriate information
|
||||
var/conclusion = qdel_on_fail ? "deleted" : "not moved, staying at current position [I.x], [I.y], [I.z]"
|
||||
message_admins("User [src] failed to get item of critical importance: [I]. Result: item is [conclusion]")
|
||||
//it's not dropped at their turf as this is generally un-safe for midround antags and we don't know their status
|
||||
|
||||
if(qdel_on_fail)
|
||||
qdel(I)
|
||||
return null
|
||||
|
||||
@@ -443,6 +443,7 @@
|
||||
key = "me"
|
||||
key_third_person = "custom"
|
||||
message = null
|
||||
emote_type = EMOTE_BOTH
|
||||
|
||||
/datum/emote/living/custom/proc/check_invalid(mob/user, input)
|
||||
if(stop_bad_mime.Find(input, 1, 1))
|
||||
@@ -462,24 +463,12 @@
|
||||
else if(!params)
|
||||
var/custom_emote = stripped_multiline_input_or_reflect(user, "Choose an emote to display.", "Custom Emote", null, MAX_MESSAGE_LEN)
|
||||
if(custom_emote && !check_invalid(user, custom_emote))
|
||||
var/type = input("Is this a visible or hearable emote?") as null|anything in list("Visible", "Hearable")
|
||||
switch(type)
|
||||
if("Visible")
|
||||
emote_type = EMOTE_VISIBLE
|
||||
if("Hearable")
|
||||
emote_type = EMOTE_AUDIBLE
|
||||
else
|
||||
alert("Unable to use this emote, must be either hearable or visible.")
|
||||
return
|
||||
message = custom_emote
|
||||
else
|
||||
message = params
|
||||
if(type_override)
|
||||
emote_type = type_override
|
||||
message = user.say_emphasis(message)
|
||||
. = ..()
|
||||
message = null
|
||||
emote_type = EMOTE_VISIBLE
|
||||
|
||||
/datum/emote/living/custom/replace_pronoun(mob/user, message)
|
||||
return message
|
||||
|
||||
@@ -87,7 +87,7 @@ Difficulty: Medium
|
||||
return FALSE
|
||||
return ..()
|
||||
|
||||
/mob/living/simple_animal/hostile/megafauna/dragon/visible_message(message, self_message, blind_message, vision_distance = DEFAULT_MESSAGE_RANGE, list/ignored_mobs, mob/target, target_message)
|
||||
/mob/living/simple_animal/hostile/megafauna/dragon/visible_message(message, self_message, blind_message, vision_distance = DEFAULT_MESSAGE_RANGE, list/ignored_mobs, mob/target, target_message, omni = FALSE)
|
||||
if(swooping & SWOOP_INVULNERABLE) //to suppress attack messages without overriding every single proc that could send a message saying we got hit
|
||||
return
|
||||
return ..()
|
||||
|
||||
@@ -263,6 +263,7 @@ SHITCODE AHEAD. BE ADVISED. Also comment extravaganza
|
||||
/obj/item/staff/storm
|
||||
name = "staff of storms"
|
||||
desc = "An ancient staff retrieved from the remains of Legion. The wind stirs as you move it."
|
||||
resistance_flags = LAVA_PROOF | FIRE_PROOF | ACID_PROOF
|
||||
icon_state = "staffofstorms"
|
||||
item_state = "staffofstorms"
|
||||
icon = 'icons/obj/guns/magic.dmi'
|
||||
|
||||
+22
-12
@@ -127,8 +127,9 @@
|
||||
* * ignored_mobs (optional) doesn't show any message to any given mob in the list.
|
||||
* * target (optional) is the other mob involved with the visible message. For example, the attacker in many combat messages.
|
||||
* * target_message (optional) is what the target mob will see e.g. "[src] does something to you!"
|
||||
* * omni (optional) if TRUE, will show to users no matter what.
|
||||
*/
|
||||
/atom/proc/visible_message(message, self_message, blind_message, vision_distance = DEFAULT_MESSAGE_RANGE, ignored_mobs, mob/target, target_message)
|
||||
/atom/proc/visible_message(message, self_message, blind_message, vision_distance = DEFAULT_MESSAGE_RANGE, ignored_mobs, mob/target, target_message, omni = FALSE)
|
||||
var/turf/T = get_turf(src)
|
||||
if(!T)
|
||||
return
|
||||
@@ -139,20 +140,26 @@
|
||||
|
||||
if(target_message && target && istype(target) && target.client)
|
||||
hearers -= target
|
||||
//This entire if/else chain could be in two lines but isn't for readibilties sake.
|
||||
var/msg = target_message
|
||||
if(target.see_invisible<invisibility) //if src is invisible to us,
|
||||
msg = blind_message
|
||||
//the light object is dark and not invisible to us, darkness does not matter if you're directly next to the target
|
||||
else if(T.lighting_object && T.lighting_object.invisibility <= target.see_invisible && T.is_softly_lit() && !in_range(T,target))
|
||||
msg = blind_message
|
||||
if(msg)
|
||||
target.show_message(msg, MSG_VISUAL,blind_message, MSG_AUDIBLE)
|
||||
if(omni)
|
||||
target.show_message(target_message)
|
||||
else
|
||||
//This entire if/else chain could be in two lines but isn't for readibilties sake.
|
||||
var/msg = target_message
|
||||
if(target.see_invisible<invisibility) //if src is invisible to us,
|
||||
msg = blind_message
|
||||
//the light object is dark and not invisible to us, darkness does not matter if you're directly next to the target
|
||||
else if(T.lighting_object && T.lighting_object.invisibility <= target.see_invisible && T.is_softly_lit() && !in_range(T,target))
|
||||
msg = blind_message
|
||||
if(msg)
|
||||
target.show_message(msg, MSG_VISUAL,blind_message, MSG_AUDIBLE)
|
||||
if(self_message)
|
||||
hearers -= src
|
||||
for(var/mob/M in hearers)
|
||||
if(!M.client)
|
||||
continue
|
||||
if(omni)
|
||||
M.show_message(message)
|
||||
continue
|
||||
//This entire if/else chain could be in two lines but isn't for readibilties sake.
|
||||
var/msg = message
|
||||
//CITADEL EDIT, required for vore code to remove (T != loc && T != src)) as a check
|
||||
@@ -167,10 +174,13 @@
|
||||
M.show_message(msg, MSG_VISUAL,blind_message, MSG_AUDIBLE)
|
||||
|
||||
///Adds the functionality to self_message.
|
||||
mob/visible_message(message, self_message, blind_message, vision_distance = DEFAULT_MESSAGE_RANGE, list/ignored_mobs, mob/target, target_message)
|
||||
/mob/visible_message(message, self_message, blind_message, vision_distance = DEFAULT_MESSAGE_RANGE, list/ignored_mobs, mob/target, target_message, omni = FALSE)
|
||||
. = ..()
|
||||
if(self_message && target != src)
|
||||
show_message(self_message, MSG_VISUAL, blind_message, MSG_AUDIBLE)
|
||||
if(!omni)
|
||||
show_message(self_message, MSG_VISUAL, blind_message, MSG_AUDIBLE)
|
||||
else
|
||||
show_message(self_message)
|
||||
|
||||
/**
|
||||
* Show a message to all mobs in earshot of this atom
|
||||
|
||||
@@ -39,15 +39,6 @@ proc/get_top_level_mob(var/mob/S)
|
||||
else if(!params)
|
||||
var/subtle_emote = stripped_multiline_input_or_reflect(user, "Choose an emote to display.", "Subtle", null, MAX_MESSAGE_LEN)
|
||||
if(subtle_emote && !check_invalid(user, subtle_emote))
|
||||
var/type = input("Is this a visible or hearable emote?") as null|anything in list("Visible", "Hearable")
|
||||
switch(type)
|
||||
if("Visible")
|
||||
emote_type = EMOTE_VISIBLE
|
||||
if("Hearable")
|
||||
emote_type = EMOTE_AUDIBLE
|
||||
else
|
||||
alert("Unable to use this emote, must be either hearable or visible.")
|
||||
return
|
||||
message = subtle_emote
|
||||
else
|
||||
return FALSE
|
||||
@@ -69,11 +60,7 @@ proc/get_top_level_mob(var/mob/S)
|
||||
if(M.stat == DEAD && M.client && (M.client.prefs.chat_toggles & CHAT_GHOSTSIGHT) && !(M in viewers(T, null)))
|
||||
M.show_message(message)
|
||||
|
||||
if(emote_type == EMOTE_AUDIBLE)
|
||||
user.audible_message(message=message,hearing_distance=1)
|
||||
else
|
||||
user.visible_message(message=message,self_message=message,vision_distance=1)
|
||||
|
||||
user.visible_message(message = message, self_message = message, vision_distance = 1, omni = TRUE)
|
||||
|
||||
///////////////// SUBTLE 2: NO GHOST BOOGALOO
|
||||
|
||||
@@ -122,10 +109,7 @@ proc/get_top_level_mob(var/mob/S)
|
||||
user.log_message(message, LOG_SUBTLER)
|
||||
message = "<b>[user]</b> " + "<i>[user.say_emphasis(message)]</i>"
|
||||
|
||||
if(emote_type == EMOTE_AUDIBLE)
|
||||
user.audible_message(message=message,hearing_distance=1, ignored_mobs = GLOB.dead_mob_list)
|
||||
else
|
||||
user.visible_message(message=message,self_message=message,vision_distance=1, ignored_mobs = GLOB.dead_mob_list)
|
||||
user.visible_message(message = message, self_message = message, vision_distance = 1, ignored_mobs = GLOB.dead_mob_list, omni = TRUE)
|
||||
|
||||
///////////////// VERB CODE
|
||||
/mob/living/verb/subtle()
|
||||
|
||||
@@ -20,5 +20,6 @@
|
||||
flags = IGNORE_NOSLOW
|
||||
|
||||
/datum/movespeed_modifier/slime_puddle
|
||||
multiplicative_slowdown = 2
|
||||
multiplicative_slowdown = 4.5
|
||||
flags = IGNORE_NOSLOW
|
||||
variable = TRUE
|
||||
|
||||
@@ -111,6 +111,7 @@
|
||||
var/obj/machinery/computer/apc_control/remote_control = null
|
||||
var/mob/living/carbon/hijacker
|
||||
var/hijackerlast = TRUE
|
||||
var/being_hijacked = FALSE
|
||||
|
||||
/obj/machinery/power/apc/unlocked
|
||||
locked = FALSE
|
||||
@@ -902,7 +903,7 @@
|
||||
if(H && !H.stealthmode && H.toggled)
|
||||
abilitiesavail = TRUE
|
||||
var/list/data = list(
|
||||
"locked" = locked,
|
||||
"locked" = locked && !(integration_cog && is_servant_of_ratvar(user)) && !area.hasSiliconAccessInArea(user, PRIVILEDGES_SILICON|PRIVILEDGES_DRONE),
|
||||
"failTime" = failure_timer,
|
||||
"isOperating" = operating,
|
||||
"externalPower" = main_status,
|
||||
@@ -1119,10 +1120,14 @@
|
||||
/obj/machinery/power/apc/proc/hijack(mob/living/L)
|
||||
if (!istype(L))
|
||||
return
|
||||
if(being_hijacked)
|
||||
to_chat(L, "<span class='warning'>This APC is already being hijacked!</span>")
|
||||
return
|
||||
if (hijacker && hijacker != L)
|
||||
var/obj/item/implant/hijack/H = L.getImplant(/obj/item/implant/hijack)
|
||||
to_chat(L, "<span class='warning'>Someone already has control of this APC. Beginning counter-hijack.</span>")
|
||||
H.hijacking = TRUE
|
||||
being_hijacked = TRUE
|
||||
if (do_after(L,20 SECONDS,target=src))
|
||||
hijacker.toggleSiliconAccessArea(area)
|
||||
if (L.toggleSiliconAccessArea(area))
|
||||
@@ -1130,23 +1135,28 @@
|
||||
update_icon()
|
||||
set_hijacked_lighting()
|
||||
H.hijacking = FALSE
|
||||
being_hijacked = FALSE
|
||||
return
|
||||
else
|
||||
to_chat(L, "<span class='warning'>Aborting.</span>")
|
||||
H.hijacking = FALSE
|
||||
being_hijacked = FALSE
|
||||
return
|
||||
to_chat(L, "<span class='notice'>Beginning hijack of APC.</span>")
|
||||
var/obj/item/implant/hijack/H = L.getImplant(/obj/item/implant/hijack)
|
||||
H.hijacking = TRUE
|
||||
being_hijacked = TRUE
|
||||
if (do_after(L,H.stealthmode ? 12 SECONDS : 5 SECONDS,target=src))
|
||||
if (L.toggleSiliconAccessArea(area))
|
||||
hijacker = L
|
||||
update_icon()
|
||||
set_hijacked_lighting()
|
||||
H.hijacking = FALSE
|
||||
being_hijacked = FALSE
|
||||
else
|
||||
to_chat(L, "<span class='warning'>Aborting.</span>")
|
||||
H.hijacking = FALSE
|
||||
being_hijacked = FALSE
|
||||
return
|
||||
|
||||
/obj/machinery/power/apc/proc/malfhack(mob/living/silicon/ai/malf)
|
||||
|
||||
@@ -329,7 +329,7 @@
|
||||
|
||||
/obj/item/gun/ballistic/revolver/doublebarrel/improvised
|
||||
name = "improvised shotgun"
|
||||
desc = "A shoddy break-action breechloaded shotgun. Its lacklustre construction shows in its lesser effectiveness."
|
||||
desc = "A shoddy break-action breechloaded shotgun. Less ammo-efficient than an actual shotgun, but still packs a punch."
|
||||
icon_state = "ishotgun"
|
||||
item_state = "shotgun"
|
||||
w_class = WEIGHT_CLASS_BULKY
|
||||
@@ -339,7 +339,6 @@
|
||||
mag_type = /obj/item/ammo_box/magazine/internal/shot/improvised
|
||||
sawn_desc = "I'm just here for the gasoline."
|
||||
unique_reskin = null
|
||||
projectile_damage_multiplier = 0.9
|
||||
var/slung = FALSE
|
||||
|
||||
/obj/item/gun/ballistic/revolver/doublebarrel/improvised/attackby(obj/item/A, mob/user, params)
|
||||
|
||||
@@ -970,7 +970,7 @@
|
||||
M.emote("gasp")
|
||||
log_combat(M, M, "revived", src)
|
||||
var/list/policies = CONFIG_GET(keyed_list/policyconfig)
|
||||
var/timelimit = CONFIG_GET(number/defib_cmd_time_limit)
|
||||
var/timelimit = CONFIG_GET(number/defib_cmd_time_limit) * 10 //the config is in seconds, not deciseconds
|
||||
var/late = timelimit && (tplus > timelimit)
|
||||
var/policy = late? policies[POLICYCONFIG_ON_DEFIB_LATE] : policies[POLICYCONFIG_ON_DEFIB_INTACT]
|
||||
if(policy)
|
||||
@@ -1321,7 +1321,7 @@
|
||||
pH = 11
|
||||
value = REAGENT_VALUE_COMMON //not any higher. Ambrosia is a milestone for hydroponics already.
|
||||
|
||||
|
||||
|
||||
//Earthsblood is still a wonderdrug. Just... don't expect to be able to mutate something that makes plants so healthy.
|
||||
/datum/reagent/medicine/earthsblood/on_hydroponics_apply(obj/item/seeds/myseed, datum/reagents/chems, obj/machinery/hydroponics/mytray, mob/user)
|
||||
. = ..()
|
||||
@@ -1335,7 +1335,7 @@
|
||||
myseed.adjust_yield(round(chems.get_reagent_amount(src.type) * 1))
|
||||
myseed.adjust_endurance(round(chems.get_reagent_amount(src.type) * 0.5))
|
||||
myseed.adjust_production(-round(chems.get_reagent_amount(src.type) * 0.5))
|
||||
|
||||
|
||||
/datum/reagent/medicine/earthsblood/on_mob_life(mob/living/carbon/M)
|
||||
M.adjustBruteLoss(-3 * REM, FALSE)
|
||||
M.adjustFireLoss(-3 * REM, FALSE)
|
||||
|
||||
@@ -132,7 +132,7 @@
|
||||
lich.real_name = mind.name
|
||||
mind.transfer_to(lich)
|
||||
mind.grab_ghost(force=TRUE)
|
||||
lich.hardset_dna(null,null,null,lich.real_name,null, new /datum/species/skeleton)
|
||||
lich.hardset_dna(null,null,null,lich.real_name,null, new /datum/species/skeleton/space)
|
||||
to_chat(lich, "<span class='warning'>Your bones clatter and shudder as you are pulled back into this world!</span>")
|
||||
var/turf/body_turf = get_turf(old_body)
|
||||
lich.DefaultCombatKnockdown(200 + 200*resurrections)
|
||||
|
||||
@@ -70,7 +70,7 @@
|
||||
if(O.organ_flags & ORGAN_FAILING)
|
||||
O.applyOrganDamage(-5)
|
||||
var/list/policies = CONFIG_GET(keyed_list/policyconfig)
|
||||
var/timelimit = CONFIG_GET(number/defib_cmd_time_limit)
|
||||
var/timelimit = CONFIG_GET(number/defib_cmd_time_limit) * 10 //the config is in seconds, not deciseconds
|
||||
var/late = timelimit && (tplus > timelimit)
|
||||
var/policy = late? policies[POLICYCONFIG_ON_DEFIB_LATE] : policies[POLICYCONFIG_ON_DEFIB_INTACT]
|
||||
if(policy)
|
||||
|
||||
@@ -181,6 +181,7 @@
|
||||
/obj/item/clothing/under/pants/mustangjeans = 3,
|
||||
/obj/item/clothing/neck/necklace/dope = 5,
|
||||
/obj/item/clothing/suit/jacket/letterman_nanotrasen = 5,
|
||||
/obj/item/clothing/under/misc/corporateuniform = 5,
|
||||
/obj/item/clothing/suit/hooded/wintercoat/polychromic = 5)
|
||||
refill_canister = /obj/item/vending_refill/clothing
|
||||
default_price = PRICE_CHEAP
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
product_ads = "Escape to a fantasy world!;Fuel your gambling addiction!;Ruin your friendships!;Roll for initiative!;Elves and dwarves!;Paranoid computers!;Totally not satanic!;Fun times forever!"
|
||||
icon_state = "games"
|
||||
products = list(/obj/item/toy/cards/deck = 5,
|
||||
/obj/item/storage/box/dice = 10,
|
||||
/obj/item/storage/dice = 10,
|
||||
/obj/item/toy/cards/deck/cas = 3,
|
||||
/obj/item/toy/cards/deck/cas/black = 3,
|
||||
/obj/item/toy/cards/deck/unum = 3)
|
||||
|
||||
+2
-2
@@ -408,7 +408,7 @@ ALLOW_MAP_VOTING 1
|
||||
## APPROVAL (can vote for as many as you want), I
|
||||
## IRV (vote by ranked choice, winner determined by instant runoff algorithm)
|
||||
## SCORE (give individual rankings of each choice, winner determined by majority judgement algorithm)
|
||||
MAP_VOTE_TYPE SCORE
|
||||
MAP_VOTE_TYPE APPROVAL
|
||||
|
||||
## Map rotate chance delta
|
||||
## This is the chance of map rotation factored to the round length.
|
||||
@@ -519,7 +519,7 @@ DEFAULT_VIEW 21x15
|
||||
### NOTE FOR LINUX HOSTS: This requires manual setup of iptables. Beware that improper configuration of this can and will irreversibly fuck up a server, so please don't tinker with it if you don't know what you're doing.
|
||||
## Enabled
|
||||
#FAIL2TOPIC_ENABLED
|
||||
## Minimum wait time in deciseconds between valid requests
|
||||
## Minimum wait time in deciseconds between valid requests
|
||||
FAIL2TOPIC_RATE_LIMIT 10
|
||||
## Number of requests after breaching rate limit that triggers a ban
|
||||
FAIL2TOPIC_MAX_FAILS 5
|
||||
|
||||
@@ -0,0 +1,8 @@
|
||||
author: "timothyteakettle"
|
||||
delete-after: True
|
||||
changes:
|
||||
- tweak: "changeling stings retract upon turning into a slime puddle"
|
||||
- tweak: "you cannot transform into a slime puddle with a no drop item in your hands"
|
||||
- tweak: "slime puddles are now transparent and their colour looks more natural in comparison to the user"
|
||||
- tweak: "slime puddles are now even slower"
|
||||
- tweak: "slime puddles now get no protection from worn clothing"
|
||||
@@ -0,0 +1,4 @@
|
||||
author: "Putnam3145"
|
||||
delete-after: True
|
||||
changes:
|
||||
- rscadd: "Stat panel UI for ranked choice votes"
|
||||
@@ -0,0 +1,4 @@
|
||||
author: "Putnam3145"
|
||||
delete-after: True
|
||||
changes:
|
||||
- code_imp: "Vote system #defines are now strings"
|
||||
@@ -0,0 +1,4 @@
|
||||
author: "timothyteakettle"
|
||||
delete-after: True
|
||||
changes:
|
||||
- tweak: "antag items are now of critical importance and wont fail to be placed on the character"
|
||||
@@ -0,0 +1,5 @@
|
||||
author: "kappa-sama"
|
||||
delete-after: True
|
||||
changes:
|
||||
- tweak: "ishotgun crafting recipe no longer requires plasteel and is slightly more convenient"
|
||||
- balance: "ishotgun does 45 damage now instead of 40.5"
|
||||
@@ -0,0 +1,4 @@
|
||||
author: "Trilbyspaceclone"
|
||||
delete-after: True
|
||||
changes:
|
||||
- rscadd: "the corporate unifoms can now be gotton in the clothing mate vender"
|
||||
@@ -0,0 +1,4 @@
|
||||
author: "timothyteakettle"
|
||||
delete-after: True
|
||||
changes:
|
||||
- rscadd: "polychromic maid outfit"
|
||||
@@ -0,0 +1,4 @@
|
||||
author: "MrJWhit"
|
||||
delete-after: True
|
||||
changes:
|
||||
- rscadd: "Expanded space hermit base"
|
||||
@@ -0,0 +1,4 @@
|
||||
author: "Ghommie"
|
||||
delete-after: True
|
||||
changes:
|
||||
- bugfix: "You can access the mime / clown mask skins radial menu once again."
|
||||
@@ -0,0 +1,4 @@
|
||||
author: "zeroisthebiggay"
|
||||
delete-after: True
|
||||
changes:
|
||||
- balance: "MEGAFAUNA DROPS ARE LAVAPROOF"
|
||||
@@ -0,0 +1,8 @@
|
||||
author: "Ghommie"
|
||||
delete-after: True
|
||||
changes:
|
||||
- bugfix: "Dice bags no longer act like cardboard boxes."
|
||||
- bugfix: "Abductors should be no longer mute."
|
||||
- bugfix: "Item action buttons should now properly show the item current overlays, most times."
|
||||
- bugfix: "The blackbox should now go into your hand slot when pried out, rather than tumbling on the ground everytime."
|
||||
- tweak: "The Quick Equip hotkey is now usable by all living mobs (so long they have hands and equipment slots)"
|
||||
@@ -0,0 +1,4 @@
|
||||
author: "silicons"
|
||||
delete-after: True
|
||||
changes:
|
||||
- rscdel: "anomalies no longer spawn in walls"
|
||||
@@ -0,0 +1,4 @@
|
||||
author: "timothyteakettle"
|
||||
delete-after: True
|
||||
changes:
|
||||
- bugfix: "time for memory loss message to show up when being revived is now correctly 300 seconds, instead of 30"
|
||||
@@ -0,0 +1,4 @@
|
||||
author: "ArchieBeepBoop"
|
||||
delete-after: True
|
||||
changes:
|
||||
- bugfix: "Outlet Injector Mapping Asset Layer Fix"
|
||||
@@ -0,0 +1,4 @@
|
||||
author: "SiliconMain"
|
||||
delete-after: True
|
||||
changes:
|
||||
- tweak: "Engi department has gas masks in loadout"
|
||||
@@ -0,0 +1,4 @@
|
||||
author: "zeroisthebiggay"
|
||||
delete-after: True
|
||||
changes:
|
||||
- bugfix: "jacqueline spawns on boxstation"
|
||||
@@ -0,0 +1,13 @@
|
||||
author: "DeltaFire15"
|
||||
delete-after: True
|
||||
changes:
|
||||
- bugfix: "The 'Your body is in a cloner' notification works again"
|
||||
- bugfix: "Hijack implants should work properly again (or, at least better)"
|
||||
- bugfix: "Liches are now good skeletons again instead of weak ones"
|
||||
- bugfix: "The piratepad control cannot be destroyed again."
|
||||
- bugfix: "Pirates have received new supplies of jetpacks instead of useless oxygen tanks"
|
||||
- bugfix: "Ratvarian AIs are once again able to show their linked borgs Ratvar's light"
|
||||
- bugfix: "Hijackers are once again unable to detonate borgs without being adjacent to the console"
|
||||
- bugfix: "Automated annoucement systems and gulag ore consoles no longer waste emag charges"
|
||||
- bugfix: "Automated announcement systems once again can be remote controlled by non-AIs with silicon access"
|
||||
- bugfix: "APCs being hijacked multiple times at once is no longer possible, preventing some issues"
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 442 KiB After Width: | Height: | Size: 454 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 287 KiB After Width: | Height: | Size: 287 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 128 KiB After Width: | Height: | Size: 130 KiB |
@@ -12,7 +12,7 @@
|
||||
|
||||
/datum/gear/hands/dice
|
||||
name = "Dice bag"
|
||||
path = /obj/item/storage/box/dice
|
||||
path = /obj/item/storage/dice
|
||||
|
||||
/datum/gear/hands/eightball
|
||||
name = "Magic eightball"
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user