mirror of
https://github.com/SPLURT-Station/S.P.L.U.R.T-Station-13.git
synced 2026-08-27 14:46:57 +01:00
Merge branch 'master' into pr/870
This commit is contained in:
@@ -55,9 +55,9 @@ jobs:
|
||||
name: Compile Maps
|
||||
runs-on: ubuntu-20.04
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- uses: actions/checkout@v3
|
||||
- name: Restore BYOND cache
|
||||
uses: actions/cache@v2
|
||||
uses: actions/cache@v3
|
||||
with:
|
||||
path: ~/BYOND
|
||||
key: ${{ runner.os }}-byond-${{ secrets.CACHE_PURGE_KEY }}
|
||||
@@ -70,7 +70,7 @@ jobs:
|
||||
run_all_tests:
|
||||
if: "!contains(github.event.head_commit.message, '[ci skip]')"
|
||||
name: Integration Tests
|
||||
runs-on: ubuntu-20.04
|
||||
runs-on: ubuntu-22.04
|
||||
services:
|
||||
mysql:
|
||||
image: mysql:latest
|
||||
@@ -80,14 +80,14 @@ jobs:
|
||||
- 3306
|
||||
options: --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=3
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- uses: actions/checkout@v3
|
||||
- name: Restore BYOND cache
|
||||
uses: actions/cache@v2
|
||||
uses: actions/cache@v3
|
||||
with:
|
||||
path: ~/BYOND
|
||||
key: ${{ runner.os }}-byond-${{ secrets.CACHE_PURGE_KEY }}
|
||||
- name: Restore Yarn cache
|
||||
uses: actions/cache@v2
|
||||
uses: actions/cache@v3
|
||||
with:
|
||||
path: tgui/.yarn/cache
|
||||
key: ${{ runner.os }}-yarn-${{ secrets.CACHE_PURGE_KEY }}-${{ hashFiles('tgui/yarn.lock') }}
|
||||
@@ -104,9 +104,6 @@ jobs:
|
||||
mysql -u root -proot tg_ci_prefixed < SQL/tgstation_schema_prefixed.sql
|
||||
- name: Install rust-g
|
||||
run: |
|
||||
sudo dpkg --add-architecture i386
|
||||
sudo apt update || true
|
||||
sudo apt install -o APT::Immediate-Configure=false libssl1.1:i386
|
||||
bash tools/ci/install_rust_g.sh
|
||||
- name: Install auxmos
|
||||
run: |
|
||||
@@ -124,9 +121,9 @@ jobs:
|
||||
name: Windows Build
|
||||
runs-on: windows-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- uses: actions/checkout@v3
|
||||
- name: Restore Yarn cache
|
||||
uses: actions/cache@v2
|
||||
uses: actions/cache@v3
|
||||
with:
|
||||
path: tgui/.yarn/cache
|
||||
key: ${{ runner.os }}-yarn-${{ secrets.CACHE_PURGE_KEY }}-${{ hashFiles('tgui/yarn.lock') }}
|
||||
@@ -143,7 +140,7 @@ jobs:
|
||||
md deploy
|
||||
bash tools/deploy.sh ./deploy
|
||||
- name: Deploy artifact
|
||||
uses: actions/upload-artifact@v2
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: deploy
|
||||
path: deploy
|
||||
|
||||
@@ -8,9 +8,9 @@ jobs:
|
||||
if: "!contains(github.event.head_commit.message, '[ci skip]')"
|
||||
runs-on: ubuntu-20.04
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- uses: actions/checkout@v3
|
||||
- name: Setup cache
|
||||
uses: actions/cache@v2
|
||||
uses: actions/cache@v3
|
||||
with:
|
||||
path: ~/SpacemanDMM
|
||||
key: ${{ runner.os }}-spacemandmm-${{ secrets.CACHE_PURGE_KEY }}
|
||||
|
||||
@@ -11,7 +11,7 @@ jobs:
|
||||
name: Update the TGS DMAPI
|
||||
steps:
|
||||
- name: Clone
|
||||
uses: actions/checkout@v2
|
||||
uses: actions/checkout@v3
|
||||
|
||||
- name: Branch
|
||||
run: |
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
version: 1
|
||||
# The BYOND version to use (kept in sync with dependencies.sh by the "TGS Test Suite" CI job)
|
||||
# Must be interpreted as a string, keep quoted
|
||||
byond: "514.1556"
|
||||
byond: "514.1589"
|
||||
# Folders to create in "<instance_path>/Configuration/GameStaticFiles/"
|
||||
static_files:
|
||||
# Config directory should be static
|
||||
@@ -18,6 +18,6 @@ linux_scripts:
|
||||
PreCompile.sh: tools/tgs4_scripts/PreCompile.sh
|
||||
# Same as above for Windows hosted servers
|
||||
windows_scripts:
|
||||
PreCompile.bat: tools/tgs_scripts/PreCompile.bat
|
||||
PreCompile.bat: tools/tgs4_scripts/PreCompile.bat
|
||||
# The security level the game should be run at
|
||||
security: Trusted
|
||||
|
||||
@@ -372,6 +372,10 @@
|
||||
/obj/structure/disposaloutlet,
|
||||
/turf/open/floor/plating/airless,
|
||||
/area/space/nearstation)
|
||||
"nZ" = (
|
||||
/obj/machinery/spaceship_navigation_beacon/invion,
|
||||
/turf/closed/wall,
|
||||
/area/ruin/space/djstation)
|
||||
"Co" = (
|
||||
/obj/machinery/door/airlock/external{
|
||||
name = "Ruskie DJ Station"
|
||||
@@ -551,7 +555,7 @@ aw
|
||||
aw
|
||||
aw
|
||||
aw
|
||||
af
|
||||
nZ
|
||||
af
|
||||
af
|
||||
aa
|
||||
|
||||
@@ -4567,6 +4567,10 @@
|
||||
icon_state = "damaged2"
|
||||
},
|
||||
/area/ruin/space/derelict/singularity_engine)
|
||||
"Yy" = (
|
||||
/obj/machinery/spaceship_navigation_beacon/invion,
|
||||
/turf/closed/wall,
|
||||
/area/ruin/space/derelict/hallway/primary)
|
||||
"ZB" = (
|
||||
/obj/structure/lattice,
|
||||
/turf/template_noop,
|
||||
@@ -11294,7 +11298,7 @@ cs
|
||||
fZ
|
||||
fZ
|
||||
fZ
|
||||
fZ
|
||||
Yy
|
||||
fZ
|
||||
hD
|
||||
gL
|
||||
|
||||
@@ -132,6 +132,10 @@
|
||||
},
|
||||
/turf/open/floor/plating/airless,
|
||||
/area/ruin/space/abandoned_tele)
|
||||
"R" = (
|
||||
/obj/machinery/spaceship_navigation_beacon/invion,
|
||||
/turf/closed/wall/r_wall,
|
||||
/area/ruin/space/abandoned_tele)
|
||||
|
||||
(1,1,1) = {"
|
||||
a
|
||||
@@ -306,7 +310,7 @@ a
|
||||
a
|
||||
b
|
||||
b
|
||||
b
|
||||
R
|
||||
b
|
||||
b
|
||||
a
|
||||
|
||||
@@ -839,6 +839,10 @@
|
||||
"bX" = (
|
||||
/turf/open/floor/plating/airless,
|
||||
/area/ruin/space/has_grav/abandonedzoo)
|
||||
"kJ" = (
|
||||
/obj/machinery/spaceship_navigation_beacon/invion,
|
||||
/turf/closed/wall/r_wall,
|
||||
/area/ruin/space/has_grav/abandonedzoo)
|
||||
"lo" = (
|
||||
/obj/machinery/door/airlock/external,
|
||||
/obj/effect/mapping_helpers/airlock/cyclelink_helper{
|
||||
@@ -993,7 +997,7 @@ aa
|
||||
at
|
||||
at
|
||||
aF
|
||||
at
|
||||
kJ
|
||||
aU
|
||||
ay
|
||||
ay
|
||||
|
||||
@@ -279,6 +279,10 @@
|
||||
},
|
||||
/turf/open/floor/wood,
|
||||
/area/ruin/space/has_grav/powered/advancedlab)
|
||||
"W" = (
|
||||
/obj/machinery/spaceship_navigation_beacon/invion,
|
||||
/turf/closed/wall,
|
||||
/area/ruin/space/has_grav/powered/advancedlab)
|
||||
|
||||
(1,1,1) = {"
|
||||
a
|
||||
@@ -448,7 +452,7 @@ f
|
||||
f
|
||||
f
|
||||
f
|
||||
b
|
||||
W
|
||||
b
|
||||
b
|
||||
b
|
||||
|
||||
@@ -158,6 +158,10 @@
|
||||
/obj/item/gun/energy/pumpaction/toy,
|
||||
/turf/open/floor/engine,
|
||||
/area/ruin/powered)
|
||||
"P" = (
|
||||
/obj/machinery/spaceship_navigation_beacon/invion,
|
||||
/turf/closed/wall/mineral/titanium/survival/pod,
|
||||
/area/ruin/powered)
|
||||
|
||||
(1,1,1) = {"
|
||||
a
|
||||
@@ -430,7 +434,7 @@ b
|
||||
c
|
||||
c
|
||||
c
|
||||
d
|
||||
P
|
||||
f
|
||||
l
|
||||
r
|
||||
|
||||
@@ -288,6 +288,10 @@
|
||||
/obj/structure/reagent_dispensers/fueltank,
|
||||
/turf/open/floor/plasteel,
|
||||
/area/ruin/powered)
|
||||
"Y" = (
|
||||
/obj/machinery/spaceship_navigation_beacon/invion,
|
||||
/turf/closed/wall/r_wall/rust,
|
||||
/area/ruin/powered)
|
||||
|
||||
(1,1,1) = {"
|
||||
a
|
||||
@@ -492,7 +496,7 @@ a
|
||||
b
|
||||
c
|
||||
c
|
||||
d
|
||||
Y
|
||||
i
|
||||
p
|
||||
s
|
||||
|
||||
@@ -71,6 +71,11 @@
|
||||
/obj/item/grown/bananapeel,
|
||||
/turf/open/floor/plating/beach/sand,
|
||||
/area/ruin/powered)
|
||||
"J" = (
|
||||
/obj/structure/fans/tiny/invisible,
|
||||
/obj/machinery/spaceship_navigation_beacon/invion,
|
||||
/turf/open/floor/plating/beach/sand,
|
||||
/area/ruin/powered)
|
||||
|
||||
(1,1,1) = {"
|
||||
a
|
||||
@@ -102,7 +107,7 @@ a
|
||||
b
|
||||
b
|
||||
g
|
||||
d
|
||||
J
|
||||
d
|
||||
b
|
||||
b
|
||||
|
||||
@@ -1894,6 +1894,10 @@
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
/area/ruin/space/has_grav/derelictoutpost)
|
||||
"Cx" = (
|
||||
/obj/machinery/spaceship_navigation_beacon/invion,
|
||||
/turf/closed/wall,
|
||||
/area/ruin/space/has_grav/derelictoutpost/cargostorage)
|
||||
"CH" = (
|
||||
/obj/structure/alien/weeds{
|
||||
color = "#4BAE56";
|
||||
@@ -2877,7 +2881,7 @@ nD
|
||||
ab
|
||||
rY
|
||||
cm
|
||||
dL
|
||||
Cx
|
||||
eb
|
||||
dW
|
||||
es
|
||||
|
||||
@@ -334,6 +334,10 @@
|
||||
/obj/item/stack/sheet/metal/fifty,
|
||||
/turf/open/floor/plating/asteroid/airless,
|
||||
/area/ruin/unpowered/no_grav)
|
||||
"uJ" = (
|
||||
/obj/machinery/spaceship_navigation_beacon/invion,
|
||||
/turf/closed/mineral/ash_rock,
|
||||
/area/ruin/unpowered/no_grav)
|
||||
"XA" = (
|
||||
/obj/structure/fluff/bus/passable/seat{
|
||||
icon_state = "backseat"
|
||||
@@ -549,7 +553,7 @@ aa
|
||||
ab
|
||||
ab
|
||||
ab
|
||||
ab
|
||||
uJ
|
||||
ab
|
||||
ab
|
||||
ad
|
||||
|
||||
@@ -1325,6 +1325,10 @@
|
||||
},
|
||||
/turf/open/floor/plating/airless,
|
||||
/area/shuttle/caravan/freighter2)
|
||||
"IG" = (
|
||||
/obj/machinery/spaceship_navigation_beacon/invion,
|
||||
/turf/closed/mineral/random,
|
||||
/area/ruin/unpowered)
|
||||
|
||||
(1,1,1) = {"
|
||||
aa
|
||||
@@ -5236,7 +5240,7 @@ aa
|
||||
bt
|
||||
bt
|
||||
bt
|
||||
bt
|
||||
IG
|
||||
bt
|
||||
aa
|
||||
aa
|
||||
|
||||
@@ -196,6 +196,10 @@
|
||||
/obj/item/paper/fluff/ruins/clericsden/warning,
|
||||
/turf/open/floor/plating/asteroid/airless,
|
||||
/area/ruin/unpowered/no_grav)
|
||||
"W" = (
|
||||
/obj/machinery/spaceship_navigation_beacon/invion,
|
||||
/turf/closed/wall,
|
||||
/area/ruin/unpowered/no_grav)
|
||||
|
||||
(1,1,1) = {"
|
||||
a
|
||||
@@ -423,7 +427,7 @@ a
|
||||
e
|
||||
e
|
||||
d
|
||||
d
|
||||
W
|
||||
e
|
||||
O
|
||||
d
|
||||
|
||||
@@ -339,6 +339,10 @@
|
||||
"V" = (
|
||||
/turf/closed/wall/r_wall/rust,
|
||||
/area/space/nearstation)
|
||||
"Z" = (
|
||||
/obj/machinery/spaceship_navigation_beacon/invion,
|
||||
/turf/closed/wall/r_wall/rust,
|
||||
/area/ruin/space/has_grav/powered/ancient_shuttle)
|
||||
|
||||
(1,1,1) = {"
|
||||
a
|
||||
@@ -432,7 +436,7 @@ a
|
||||
a
|
||||
a
|
||||
d
|
||||
d
|
||||
Z
|
||||
H
|
||||
b
|
||||
b
|
||||
|
||||
@@ -157,6 +157,10 @@
|
||||
/obj/item/shovel,
|
||||
/turf/open/floor/mineral/bananium/airless,
|
||||
/area/ruin/unpowered)
|
||||
"I" = (
|
||||
/obj/machinery/spaceship_navigation_beacon/invion,
|
||||
/turf/closed/mineral/random,
|
||||
/area/ruin/unpowered/no_grav)
|
||||
|
||||
(1,1,1) = {"
|
||||
a
|
||||
@@ -413,7 +417,7 @@ b
|
||||
c
|
||||
b
|
||||
b
|
||||
b
|
||||
I
|
||||
b
|
||||
b
|
||||
b
|
||||
|
||||
@@ -2456,6 +2456,10 @@
|
||||
/obj/structure/lattice,
|
||||
/turf/template_noop,
|
||||
/area/awaymission/BMPship/Midship)
|
||||
"RA" = (
|
||||
/obj/machinery/spaceship_navigation_beacon/invion,
|
||||
/turf/closed/mineral/random,
|
||||
/area/awaymission/BMPship)
|
||||
|
||||
(1,1,1) = {"
|
||||
aa
|
||||
@@ -3661,7 +3665,7 @@ ce
|
||||
ce
|
||||
aq
|
||||
gb
|
||||
gb
|
||||
RA
|
||||
gb
|
||||
gb
|
||||
gb
|
||||
|
||||
@@ -3314,6 +3314,10 @@
|
||||
},
|
||||
/turf/open/floor/plating,
|
||||
/area/ruin/space/has_grav/deepstorage/crusher)
|
||||
"Qz" = (
|
||||
/obj/machinery/spaceship_navigation_beacon/invion,
|
||||
/turf/closed/wall/mineral/iron,
|
||||
/area/ruin/space/has_grav/deepstorage/kitchen)
|
||||
|
||||
(1,1,1) = {"
|
||||
aa
|
||||
@@ -4582,7 +4586,7 @@ aN
|
||||
bb
|
||||
bw
|
||||
bM
|
||||
af
|
||||
Qz
|
||||
cq
|
||||
cM
|
||||
cX
|
||||
|
||||
@@ -87,6 +87,10 @@
|
||||
/obj/item/organ/alien/plasmavessel/small,
|
||||
/turf/open/floor/plating/airless,
|
||||
/area/ruin/unpowered)
|
||||
"O" = (
|
||||
/obj/machinery/spaceship_navigation_beacon/invion,
|
||||
/turf/closed/wall,
|
||||
/area/ruin/unpowered)
|
||||
|
||||
(1,1,1) = {"
|
||||
a
|
||||
@@ -873,7 +877,7 @@ c
|
||||
c
|
||||
f
|
||||
n
|
||||
c
|
||||
O
|
||||
c
|
||||
c
|
||||
q
|
||||
|
||||
@@ -113,6 +113,10 @@
|
||||
/obj/machinery/light/small,
|
||||
/turf/open/floor/plasteel,
|
||||
/area/ruin/space/has_grav/powered/dinner_for_two)
|
||||
"I" = (
|
||||
/obj/machinery/spaceship_navigation_beacon/invion,
|
||||
/turf/closed/wall,
|
||||
/area/ruin/space/has_grav/powered/dinner_for_two)
|
||||
|
||||
(1,1,1) = {"
|
||||
a
|
||||
@@ -329,7 +333,7 @@ a
|
||||
a
|
||||
a
|
||||
a
|
||||
f
|
||||
I
|
||||
j
|
||||
i
|
||||
i
|
||||
|
||||
@@ -17,6 +17,10 @@
|
||||
/obj/structure/lattice,
|
||||
/turf/template_noop,
|
||||
/area/space/nearstation)
|
||||
"A" = (
|
||||
/obj/machinery/spaceship_navigation_beacon/invion,
|
||||
/turf/closed/wall,
|
||||
/area/ruin/unpowered/no_grav)
|
||||
|
||||
(1,1,1) = {"
|
||||
a
|
||||
@@ -930,7 +934,7 @@ b
|
||||
b
|
||||
b
|
||||
c
|
||||
c
|
||||
A
|
||||
c
|
||||
c
|
||||
b
|
||||
|
||||
@@ -89,6 +89,10 @@
|
||||
/obj/structure/girder,
|
||||
/turf/open/floor/plating/airless,
|
||||
/area/ruin/unpowered)
|
||||
"S" = (
|
||||
/obj/machinery/spaceship_navigation_beacon/invion,
|
||||
/turf/closed/mineral,
|
||||
/area/ruin/unpowered)
|
||||
|
||||
(1,1,1) = {"
|
||||
a
|
||||
@@ -517,7 +521,7 @@ b
|
||||
b
|
||||
b
|
||||
b
|
||||
b
|
||||
S
|
||||
b
|
||||
b
|
||||
d
|
||||
|
||||
@@ -72,6 +72,10 @@
|
||||
/obj/machinery/door/airlock/external,
|
||||
/turf/open/floor/plating,
|
||||
/area/ruin/unpowered)
|
||||
"V" = (
|
||||
/obj/machinery/spaceship_navigation_beacon/invion,
|
||||
/turf/closed/wall,
|
||||
/area/ruin/unpowered)
|
||||
|
||||
(1,1,1) = {"
|
||||
a
|
||||
@@ -769,7 +773,7 @@ j
|
||||
f
|
||||
f
|
||||
e
|
||||
e
|
||||
V
|
||||
p
|
||||
l
|
||||
e
|
||||
|
||||
@@ -516,6 +516,10 @@
|
||||
},
|
||||
/turf/template_noop,
|
||||
/area/ruin/unpowered)
|
||||
"BF" = (
|
||||
/obj/machinery/spaceship_navigation_beacon/invion,
|
||||
/turf/closed/wall,
|
||||
/area/ruin/unpowered)
|
||||
|
||||
(1,1,1) = {"
|
||||
aa
|
||||
@@ -803,7 +807,7 @@ ag
|
||||
ag
|
||||
ag
|
||||
ag
|
||||
ai
|
||||
BF
|
||||
ai
|
||||
aS
|
||||
aW
|
||||
|
||||
@@ -57,6 +57,10 @@
|
||||
/obj/structure/lattice,
|
||||
/turf/template_noop,
|
||||
/area/space/nearstation)
|
||||
"V" = (
|
||||
/obj/machinery/spaceship_navigation_beacon/invion,
|
||||
/turf/closed/wall/r_wall,
|
||||
/area/ruin/unpowered)
|
||||
|
||||
(1,1,1) = {"
|
||||
a
|
||||
@@ -215,7 +219,7 @@ a
|
||||
b
|
||||
a
|
||||
c
|
||||
c
|
||||
V
|
||||
d
|
||||
d
|
||||
d
|
||||
|
||||
@@ -364,6 +364,10 @@
|
||||
"W" = (
|
||||
/turf/open/floor/plating,
|
||||
/area/ruin/space/has_grav/gasthelizard)
|
||||
"Y" = (
|
||||
/obj/machinery/spaceship_navigation_beacon/invion,
|
||||
/turf/closed/wall,
|
||||
/area/ruin/space/has_grav/gasthelizard)
|
||||
"Z" = (
|
||||
/obj/machinery/door/airlock/external,
|
||||
/obj/effect/mapping_helpers/airlock/cyclelink_helper{
|
||||
@@ -584,7 +588,7 @@ a
|
||||
a
|
||||
b
|
||||
c
|
||||
c
|
||||
Y
|
||||
c
|
||||
c
|
||||
c
|
||||
|
||||
@@ -82,6 +82,10 @@
|
||||
/obj/effect/mapping_helpers/airlock/cyclelink_helper,
|
||||
/turf/open/floor/plating/asteroid/airless,
|
||||
/area/ruin/space/has_grav)
|
||||
"L" = (
|
||||
/obj/machinery/spaceship_navigation_beacon/invion,
|
||||
/turf/closed/mineral/random,
|
||||
/area/ruin/space/has_grav)
|
||||
"T" = (
|
||||
/obj/machinery/door/airlock/survival_pod/glass{
|
||||
dir = 4
|
||||
@@ -622,7 +626,7 @@ b
|
||||
b
|
||||
b
|
||||
b
|
||||
b
|
||||
L
|
||||
b
|
||||
b
|
||||
b
|
||||
|
||||
@@ -201,6 +201,10 @@
|
||||
initial_gas_mix = "TEMP=2.7"
|
||||
},
|
||||
/area/ruin/unpowered/no_grav)
|
||||
"S" = (
|
||||
/obj/machinery/spaceship_navigation_beacon/invion,
|
||||
/turf/closed/wall/r_wall/rust,
|
||||
/area/ruin/space/has_grav/hilbertresearchfacility)
|
||||
"U" = (
|
||||
/turf/open/floor/plasteel/stairs/medium{
|
||||
initial_gas_mix = "TEMP=2.7"
|
||||
@@ -357,7 +361,7 @@ a
|
||||
a
|
||||
b
|
||||
c
|
||||
c
|
||||
S
|
||||
c
|
||||
c
|
||||
c
|
||||
|
||||
@@ -145,6 +145,10 @@
|
||||
/obj/structure/bed,
|
||||
/turf/open/floor/mineral/titanium/purple,
|
||||
/area/ruin/space/has_grav/powered/authorship)
|
||||
"X" = (
|
||||
/obj/machinery/spaceship_navigation_beacon/invion,
|
||||
/turf/closed/wall/mineral/plastitanium,
|
||||
/area/ruin/space/has_grav/powered/authorship)
|
||||
|
||||
(1,1,1) = {"
|
||||
a
|
||||
@@ -193,7 +197,7 @@ c
|
||||
p
|
||||
t
|
||||
p
|
||||
c
|
||||
X
|
||||
A
|
||||
n
|
||||
c
|
||||
|
||||
@@ -2098,6 +2098,7 @@
|
||||
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
|
||||
dir = 6
|
||||
},
|
||||
/obj/machinery/spaceship_navigation_beacon/invion,
|
||||
/turf/closed/wall,
|
||||
/area/ruin/space/has_grav/listeningstation)
|
||||
"RA" = (
|
||||
|
||||
@@ -59,6 +59,10 @@
|
||||
},
|
||||
/turf/open/floor/mineral/titanium/blue,
|
||||
/area/ruin/space/has_grav/powered/mechtransport)
|
||||
"o" = (
|
||||
/obj/machinery/spaceship_navigation_beacon/invion,
|
||||
/turf/closed/wall/mineral/titanium,
|
||||
/area/ruin/space/has_grav/powered/mechtransport)
|
||||
"p" = (
|
||||
/obj/machinery/door/airlock/hatch{
|
||||
name = "Cockpit";
|
||||
@@ -320,7 +324,7 @@ X
|
||||
b
|
||||
d
|
||||
d
|
||||
d
|
||||
o
|
||||
u
|
||||
A
|
||||
y
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
|
||||
"a" = (
|
||||
/obj/item/storage/backpack/satchel/flat/secret/miracle_ruin,
|
||||
/obj/machinery/spaceship_navigation_beacon/invion,
|
||||
/turf/open/floor/fakespace{
|
||||
initial_gas_mix = "TEMP=2.7"
|
||||
},
|
||||
|
||||
@@ -928,6 +928,10 @@
|
||||
/obj/item/organ/tail/cat,
|
||||
/turf/open/floor/plasteel/freezer,
|
||||
/area/ruin/space/has_grav/powered/cat_man)
|
||||
"qI" = (
|
||||
/obj/machinery/spaceship_navigation_beacon/invion,
|
||||
/turf/closed/wall,
|
||||
/area/ruin/space/has_grav/powered/cat_man)
|
||||
"Bl" = (
|
||||
/obj/machinery/door/airlock/external,
|
||||
/obj/effect/mapping_helpers/airlock/cyclelink_helper{
|
||||
@@ -1690,7 +1694,7 @@ aa
|
||||
aa
|
||||
ab
|
||||
ab
|
||||
ad
|
||||
qI
|
||||
ad
|
||||
ad
|
||||
ad
|
||||
|
||||
@@ -905,6 +905,10 @@
|
||||
/obj/machinery/teleport/hub,
|
||||
/turf/open/floor/plating,
|
||||
/area/tcommsat/chamber)
|
||||
"iO" = (
|
||||
/obj/machinery/spaceship_navigation_beacon/invion,
|
||||
/turf/closed/wall/r_wall,
|
||||
/area/tcommsat/chamber)
|
||||
|
||||
(1,1,1) = {"
|
||||
aa
|
||||
@@ -3061,7 +3065,7 @@ ag
|
||||
ag
|
||||
ag
|
||||
ag
|
||||
ag
|
||||
iO
|
||||
aT
|
||||
bc
|
||||
bs
|
||||
|
||||
@@ -5057,6 +5057,10 @@
|
||||
},
|
||||
/turf/open/floor/plasteel/white,
|
||||
/area/ruin/space/has_grav/ancientstation)
|
||||
"TY" = (
|
||||
/obj/machinery/spaceship_navigation_beacon/invion,
|
||||
/turf/template_noop,
|
||||
/area/template_noop)
|
||||
"Un" = (
|
||||
/obj/structure/cable{
|
||||
icon_state = "4-8"
|
||||
@@ -7907,7 +7911,7 @@ cX
|
||||
bD
|
||||
aa
|
||||
aa
|
||||
aa
|
||||
TY
|
||||
bD
|
||||
fQ
|
||||
gI
|
||||
|
||||
@@ -68,6 +68,10 @@
|
||||
},
|
||||
/turf/open/floor/plasteel/airless,
|
||||
/area/ruin/space/oldteleporter)
|
||||
"o" = (
|
||||
/obj/machinery/spaceship_navigation_beacon/invion,
|
||||
/turf/closed/wall/r_wall,
|
||||
/area/ruin/space/oldteleporter)
|
||||
|
||||
(1,1,1) = {"
|
||||
a
|
||||
@@ -146,7 +150,7 @@ a
|
||||
b
|
||||
b
|
||||
d
|
||||
d
|
||||
o
|
||||
g
|
||||
e
|
||||
l
|
||||
|
||||
@@ -1209,6 +1209,10 @@
|
||||
},
|
||||
/turf/template_noop,
|
||||
/area/template_noop)
|
||||
"Cu" = (
|
||||
/obj/machinery/spaceship_navigation_beacon/invion,
|
||||
/turf/closed/wall,
|
||||
/area/ruin/space/has_grav/onehalf/drone_bay)
|
||||
"Ky" = (
|
||||
/turf/template_noop,
|
||||
/area/space/nearstation)
|
||||
@@ -1774,7 +1778,7 @@ aa
|
||||
aa
|
||||
ar
|
||||
ar
|
||||
ar
|
||||
Cu
|
||||
bs
|
||||
bH
|
||||
ar
|
||||
|
||||
@@ -913,6 +913,10 @@
|
||||
},
|
||||
/turf/open/indestructible/paper,
|
||||
/area/ruin/powered)
|
||||
"Mh" = (
|
||||
/obj/machinery/spaceship_navigation_beacon/invion,
|
||||
/turf/open/indestructible/paper,
|
||||
/area/ruin/powered)
|
||||
"Ns" = (
|
||||
/obj/item/paper/secretrecipe,
|
||||
/turf/open/indestructible/paper,
|
||||
@@ -1561,7 +1565,7 @@ af
|
||||
af
|
||||
af
|
||||
af
|
||||
af
|
||||
Mh
|
||||
af
|
||||
af
|
||||
al
|
||||
|
||||
@@ -95,6 +95,10 @@
|
||||
/obj/structure/shuttle/engine/propulsion/burst,
|
||||
/turf/template_noop,
|
||||
/area/ruin/powered)
|
||||
"M" = (
|
||||
/obj/machinery/spaceship_navigation_beacon/invion,
|
||||
/turf/closed/indestructible/oldshuttle,
|
||||
/area/ruin/powered)
|
||||
|
||||
(1,1,1) = {"
|
||||
a
|
||||
@@ -322,7 +326,7 @@ a
|
||||
a
|
||||
e
|
||||
c
|
||||
c
|
||||
M
|
||||
c
|
||||
c
|
||||
c
|
||||
|
||||
@@ -4193,6 +4193,10 @@
|
||||
},
|
||||
/turf/open/floor/plasteel/dark,
|
||||
/area/ruin/space/has_grav/skelter/sec)
|
||||
"GU" = (
|
||||
/obj/machinery/spaceship_navigation_beacon/invion,
|
||||
/turf/closed/wall/mineral/titanium,
|
||||
/area/ruin/space/has_grav/skelter)
|
||||
"JR" = (
|
||||
/obj/effect/turf_decal/weather,
|
||||
/turf/open/floor/plating/airless{
|
||||
@@ -4492,7 +4496,7 @@ hu
|
||||
hS
|
||||
ip
|
||||
gg
|
||||
ae
|
||||
GU
|
||||
ae
|
||||
ae
|
||||
ah
|
||||
|
||||
@@ -842,6 +842,7 @@
|
||||
/area/ruin/space/diner/interior)
|
||||
"cl" = (
|
||||
/obj/structure/grille/broken,
|
||||
/obj/machinery/spaceship_navigation_beacon/invion,
|
||||
/turf/open/floor/plating,
|
||||
/area/ruin/space/diner/interior)
|
||||
"cm" = (
|
||||
|
||||
@@ -383,6 +383,10 @@
|
||||
},
|
||||
/turf/open/floor/plating/asteroid,
|
||||
/area/ruin/powered)
|
||||
"sU" = (
|
||||
/obj/machinery/spaceship_navigation_beacon/invion,
|
||||
/turf/closed/mineral/random,
|
||||
/area/ruin/powered)
|
||||
"wU" = (
|
||||
/obj/machinery/portable_atmospherics/canister/air,
|
||||
/obj/effect/turf_decal/bot,
|
||||
@@ -1020,7 +1024,7 @@ aZ
|
||||
aZ
|
||||
bb
|
||||
bb
|
||||
bb
|
||||
sU
|
||||
af
|
||||
aq
|
||||
af
|
||||
|
||||
@@ -5017,6 +5017,10 @@
|
||||
/obj/structure/pool/Lboard,
|
||||
/turf/open/pool,
|
||||
/area/ruin/space/has_grav/hotel/pool)
|
||||
"pV" = (
|
||||
/obj/machinery/spaceship_navigation_beacon/invion,
|
||||
/turf/closed/wall,
|
||||
/area/ruin/space/has_grav/hotel/guestroom/room_4)
|
||||
"sN" = (
|
||||
/obj/machinery/door/airlock/external/glass,
|
||||
/obj/structure/cable/yellow{
|
||||
@@ -7313,7 +7317,7 @@ aa
|
||||
ab
|
||||
ac
|
||||
ag
|
||||
ap
|
||||
pV
|
||||
ap
|
||||
ap
|
||||
ap
|
||||
|
||||
@@ -368,6 +368,10 @@
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
/area/ruin/space/has_grav/turretedoutpost)
|
||||
"pa" = (
|
||||
/obj/machinery/spaceship_navigation_beacon/invion,
|
||||
/turf/closed/wall/r_wall,
|
||||
/area/ruin/space/has_grav/turretedoutpost)
|
||||
"tK" = (
|
||||
/obj/effect/turf_decal/tile/red,
|
||||
/obj/effect/turf_decal/tile/red{
|
||||
@@ -597,7 +601,7 @@ ac
|
||||
ac
|
||||
ac
|
||||
ac
|
||||
ad
|
||||
pa
|
||||
ad
|
||||
aI
|
||||
aI
|
||||
|
||||
@@ -208,6 +208,10 @@
|
||||
/obj/machinery/light/small,
|
||||
/turf/open/floor/plasteel/vaporwave,
|
||||
/area/ruin/space/has_grav/powered/aesthetic)
|
||||
"Q" = (
|
||||
/obj/machinery/spaceship_navigation_beacon/invion,
|
||||
/turf/closed/wall,
|
||||
/area/ruin/space/has_grav/powered/aesthetic)
|
||||
"R" = (
|
||||
/obj/machinery/light/small{
|
||||
dir = 1
|
||||
@@ -461,7 +465,7 @@ a
|
||||
a
|
||||
d
|
||||
d
|
||||
f
|
||||
Q
|
||||
f
|
||||
g
|
||||
f
|
||||
|
||||
@@ -12,6 +12,10 @@
|
||||
/obj/structure/signpost/salvation,
|
||||
/turf/open/floor/plating/asteroid/airless,
|
||||
/area/ruin/space/way_home)
|
||||
"S" = (
|
||||
/obj/machinery/spaceship_navigation_beacon/invion,
|
||||
/turf/closed/mineral/random,
|
||||
/area/ruin/space/way_home)
|
||||
|
||||
(1,1,1) = {"
|
||||
a
|
||||
@@ -266,7 +270,7 @@ b
|
||||
b
|
||||
b
|
||||
b
|
||||
b
|
||||
S
|
||||
b
|
||||
b
|
||||
c
|
||||
|
||||
@@ -6,6 +6,10 @@
|
||||
/obj/docking_port/stationary/picked/whiteship,
|
||||
/turf/open/space,
|
||||
/area/space)
|
||||
"Z" = (
|
||||
/obj/machinery/spaceship_navigation_beacon/invion,
|
||||
/turf/open/space/basic,
|
||||
/area/space)
|
||||
|
||||
(1,1,1) = {"
|
||||
a
|
||||
@@ -29,7 +33,7 @@ a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
Z
|
||||
"}
|
||||
(2,1,1) = {"
|
||||
a
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -5404,6 +5404,9 @@
|
||||
},
|
||||
/turf/open/floor/plasteel/dark,
|
||||
/area/slavers)
|
||||
"nh" = (
|
||||
/turf/open/indestructible/hotelwood,
|
||||
/area/ruin/powered)
|
||||
"ni" = (
|
||||
/obj/machinery/newscaster/security_unit,
|
||||
/turf/closed/indestructible/riveted,
|
||||
@@ -8035,6 +8038,14 @@
|
||||
},
|
||||
/turf/open/floor/mineral/titanium/blue,
|
||||
/area/centcom/holding)
|
||||
"sm" = (
|
||||
/obj/structure/sign/poster/contraband/tools,
|
||||
/turf/closed/indestructible{
|
||||
icon = 'icons/turf/walls/wood_wall.dmi';
|
||||
icon_state = "wood";
|
||||
smooth = 1
|
||||
},
|
||||
/area/ruin/powered)
|
||||
"sp" = (
|
||||
/obj/effect/turf_decal/tile/red{
|
||||
dir = 1
|
||||
@@ -10759,6 +10770,13 @@
|
||||
/obj/structure/chair,
|
||||
/turf/open/floor/mineral/titanium,
|
||||
/area/centcom/evac)
|
||||
"yi" = (
|
||||
/turf/closed/indestructible{
|
||||
icon = 'icons/turf/walls/wood_wall.dmi';
|
||||
icon_state = "wood";
|
||||
smooth = 1
|
||||
},
|
||||
/area/ruin/powered)
|
||||
"yj" = (
|
||||
/obj/machinery/door/airlock/centcom{
|
||||
name = "CentCom Security";
|
||||
@@ -12583,6 +12601,10 @@
|
||||
},
|
||||
/turf/open/floor/engine/cult,
|
||||
/area/wizard_station)
|
||||
"Ck" = (
|
||||
/obj/effect/holodeck_effect/mobspawner/bigmommyclaw,
|
||||
/turf/open/floor/holofloor/basalt,
|
||||
/area/holodeck/rec_center/wildlife)
|
||||
"Cl" = (
|
||||
/turf/closed/indestructible/start_area,
|
||||
/area/start)
|
||||
@@ -16521,6 +16543,14 @@
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
/area/tdome/tdomeadmin)
|
||||
"Ki" = (
|
||||
/obj/structure/sign/poster/contraband/kudzu,
|
||||
/turf/closed/indestructible{
|
||||
icon = 'icons/turf/walls/wood_wall.dmi';
|
||||
icon_state = "wood";
|
||||
smooth = 1
|
||||
},
|
||||
/area/ruin/powered)
|
||||
"Kj" = (
|
||||
/obj/machinery/door/airlock/external{
|
||||
name = "Backup Emergency Escape Shuttle"
|
||||
@@ -17522,6 +17552,12 @@
|
||||
"MI" = (
|
||||
/turf/open/floor/plating,
|
||||
/area/syndicate_mothership)
|
||||
"MJ" = (
|
||||
/obj/structure/table/wood,
|
||||
/obj/item/storage/firstaid/fire,
|
||||
/obj/item/storage/firstaid/brute,
|
||||
/turf/open/indestructible/hotelwood,
|
||||
/area/ruin/powered)
|
||||
"ML" = (
|
||||
/obj/structure/table/wood/fancy,
|
||||
/turf/open/indestructible/hotelwood,
|
||||
@@ -17762,6 +17798,14 @@
|
||||
/obj/item/mop,
|
||||
/turf/open/indestructible/hotelwood,
|
||||
/area/centcom/holding)
|
||||
"Nt" = (
|
||||
/obj/structure/sign/poster/contraband/lamarr,
|
||||
/turf/closed/indestructible{
|
||||
icon = 'icons/turf/walls/wood_wall.dmi';
|
||||
icon_state = "wood";
|
||||
smooth = 1
|
||||
},
|
||||
/area/ruin/powered)
|
||||
"Nu" = (
|
||||
/turf/open/floor/wood,
|
||||
/area/syndicate_mothership)
|
||||
@@ -18154,6 +18198,14 @@
|
||||
/obj/structure/table,
|
||||
/turf/open/floor/plasteel/cafeteria,
|
||||
/area/slavers)
|
||||
"OD" = (
|
||||
/obj/structure/sign/poster/contraband/bulldog,
|
||||
/turf/closed/indestructible{
|
||||
icon = 'icons/turf/walls/wood_wall.dmi';
|
||||
icon_state = "wood";
|
||||
smooth = 1
|
||||
},
|
||||
/area/ruin/powered)
|
||||
"OE" = (
|
||||
/obj/effect/turf_decal/tile/brown,
|
||||
/obj/effect/turf_decal/tile/brown{
|
||||
@@ -18346,6 +18398,14 @@
|
||||
/obj/machinery/light,
|
||||
/turf/open/floor/plasteel/dark,
|
||||
/area/centcom/supplypod)
|
||||
"Pt" = (
|
||||
/obj/structure/sign/poster/official/wtf_is_co2,
|
||||
/turf/closed/indestructible{
|
||||
icon = 'icons/turf/walls/wood_wall.dmi';
|
||||
icon_state = "wood";
|
||||
smooth = 1
|
||||
},
|
||||
/area/ruin/powered)
|
||||
"Pv" = (
|
||||
/obj/effect/turf_decal/tile/brown,
|
||||
/obj/effect/turf_decal/tile/brown{
|
||||
@@ -18774,6 +18834,10 @@
|
||||
/obj/item/clothing/head/welding,
|
||||
/turf/open/floor/plasteel/dark,
|
||||
/area/slavers)
|
||||
"QI" = (
|
||||
/obj/effect/holodeck_effect/mobspawner/femclaw,
|
||||
/turf/open/floor/holofloor/basalt,
|
||||
/area/holodeck/rec_center/wildlife)
|
||||
"QK" = (
|
||||
/obj/effect/turf_decal/delivery,
|
||||
/turf/open/floor/plasteel,
|
||||
@@ -19024,6 +19088,10 @@
|
||||
/obj/effect/turf_decal/loading_area,
|
||||
/turf/open/floor/plating,
|
||||
/area/syndicate_mothership)
|
||||
"RC" = (
|
||||
/obj/effect/holodeck_effect/mobspawner/newclaw,
|
||||
/turf/open/floor/holofloor/basalt,
|
||||
/area/holodeck/rec_center/wildlife)
|
||||
"RD" = (
|
||||
/obj/effect/turf_decal/tile/red,
|
||||
/obj/effect/turf_decal/tile/red{
|
||||
@@ -19386,6 +19454,12 @@
|
||||
/obj/item/mop,
|
||||
/turf/open/floor/plasteel/cafeteria,
|
||||
/area/centcom/holding)
|
||||
"SO" = (
|
||||
/obj/machinery/light{
|
||||
dir = 4
|
||||
},
|
||||
/turf/open/indestructible/hotelwood,
|
||||
/area/ruin/powered)
|
||||
"SP" = (
|
||||
/obj/effect/spawner/structure/window/reinforced,
|
||||
/turf/open/space/basic,
|
||||
@@ -19702,6 +19776,14 @@
|
||||
},
|
||||
/turf/open/floor/plasteel/freezer,
|
||||
/area/syndicate_mothership)
|
||||
"TQ" = (
|
||||
/obj/structure/sign/poster/contraband/ambrosia_vulgaris,
|
||||
/turf/closed/indestructible{
|
||||
icon = 'icons/turf/walls/wood_wall.dmi';
|
||||
icon_state = "wood";
|
||||
smooth = 1
|
||||
},
|
||||
/area/ruin/powered)
|
||||
"TR" = (
|
||||
/obj/machinery/computer/arcade/tetris,
|
||||
/turf/open/floor/plasteel,
|
||||
@@ -19742,6 +19824,10 @@
|
||||
/obj/item/reagent_containers/glass/beaker,
|
||||
/turf/open/floor/plasteel/cafeteria,
|
||||
/area/centcom/holding)
|
||||
"TW" = (
|
||||
/obj/effect/mob_spawn/human/ghostcafeVR,
|
||||
/turf/open/indestructible/hotelwood,
|
||||
/area/ruin/powered)
|
||||
"TX" = (
|
||||
/obj/effect/turf_decal/stripes/line{
|
||||
dir = 9
|
||||
@@ -20021,6 +20107,12 @@
|
||||
},
|
||||
/turf/open/floor/wood,
|
||||
/area/centcom/holding)
|
||||
"UK" = (
|
||||
/obj/machinery/light{
|
||||
dir = 8
|
||||
},
|
||||
/turf/open/indestructible/hotelwood,
|
||||
/area/ruin/powered)
|
||||
"UL" = (
|
||||
/obj/effect/turf_decal/tile/brown,
|
||||
/obj/effect/turf_decal/tile/brown{
|
||||
@@ -20229,6 +20321,10 @@
|
||||
},
|
||||
/turf/open/floor/plasteel/dark,
|
||||
/area/slavers)
|
||||
"Vs" = (
|
||||
/obj/machinery/vr_sleeper,
|
||||
/turf/open/indestructible/hotelwood,
|
||||
/area/ruin/powered)
|
||||
"Vt" = (
|
||||
/obj/item/paper/fluff/stations/centcom/disk_memo,
|
||||
/obj/structure/noticeboard{
|
||||
@@ -20270,9 +20366,6 @@
|
||||
},
|
||||
/turf/open/space,
|
||||
/area/space)
|
||||
"Vy" = (
|
||||
/turf/open/chasm/lavaland,
|
||||
/area/holodeck/rec_center/wildlife)
|
||||
"Vz" = (
|
||||
/obj/machinery/vending/wallmed{
|
||||
name = "Emergency NanoMed";
|
||||
@@ -20478,6 +20571,10 @@
|
||||
},
|
||||
/turf/open/floor/plating,
|
||||
/area/syndicate_mothership)
|
||||
"Wk" = (
|
||||
/obj/effect/holodeck_effect/mobspawner/alphaclaw,
|
||||
/turf/open/floor/holofloor/basalt,
|
||||
/area/holodeck/rec_center/wildlife)
|
||||
"Wp" = (
|
||||
/obj/machinery/processor,
|
||||
/obj/machinery/light{
|
||||
@@ -20576,6 +20673,14 @@
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
/area/centcom/supplypod/loading/one)
|
||||
"WL" = (
|
||||
/obj/structure/sign/poster/official/walk,
|
||||
/turf/closed/indestructible{
|
||||
icon = 'icons/turf/walls/wood_wall.dmi';
|
||||
icon_state = "wood";
|
||||
smooth = 1
|
||||
},
|
||||
/area/ruin/powered)
|
||||
"WM" = (
|
||||
/obj/structure/extinguisher_cabinet{
|
||||
pixel_y = 32
|
||||
@@ -20888,6 +20993,13 @@
|
||||
"XN" = (
|
||||
/turf/open/floor/carpet/red,
|
||||
/area/centcom/holding)
|
||||
"XO" = (
|
||||
/obj/structure/flora/ausbushes/fernybush,
|
||||
/obj/structure/flora/ausbushes/ppflowers,
|
||||
/obj/structure/flora/ausbushes/palebush,
|
||||
/obj/structure/window/reinforced/fulltile,
|
||||
/turf/open/indestructible/hotelwood,
|
||||
/area/ruin/powered)
|
||||
"XR" = (
|
||||
/obj/structure/reagent_dispensers/watertank,
|
||||
/obj/effect/turf_decal/delivery,
|
||||
@@ -51042,12 +51154,12 @@ aa
|
||||
aa
|
||||
aa
|
||||
aa
|
||||
aa
|
||||
aa
|
||||
Nd
|
||||
Nd
|
||||
Nd
|
||||
Nd
|
||||
yi
|
||||
Pt
|
||||
yi
|
||||
yi
|
||||
yi
|
||||
sm
|
||||
Nd
|
||||
Zv
|
||||
VA
|
||||
@@ -51299,12 +51411,12 @@ aa
|
||||
aa
|
||||
aa
|
||||
aa
|
||||
aa
|
||||
aa
|
||||
aa
|
||||
aa
|
||||
aa
|
||||
aa
|
||||
yi
|
||||
Vs
|
||||
nh
|
||||
UK
|
||||
nh
|
||||
XO
|
||||
Nd
|
||||
Dn
|
||||
ZW
|
||||
@@ -51556,12 +51668,12 @@ aa
|
||||
aa
|
||||
aa
|
||||
aa
|
||||
aa
|
||||
aa
|
||||
aa
|
||||
aa
|
||||
aa
|
||||
aa
|
||||
yi
|
||||
Vs
|
||||
nh
|
||||
MJ
|
||||
nh
|
||||
Vs
|
||||
Nd
|
||||
TZ
|
||||
yf
|
||||
@@ -51813,12 +51925,12 @@ aa
|
||||
aa
|
||||
aa
|
||||
aa
|
||||
aa
|
||||
aa
|
||||
aa
|
||||
aa
|
||||
aa
|
||||
aa
|
||||
yi
|
||||
Vs
|
||||
nh
|
||||
XO
|
||||
nh
|
||||
Vs
|
||||
Nd
|
||||
Nd
|
||||
Nd
|
||||
@@ -52070,13 +52182,13 @@ aa
|
||||
aa
|
||||
aa
|
||||
aa
|
||||
aa
|
||||
aa
|
||||
aa
|
||||
aa
|
||||
aa
|
||||
aa
|
||||
aa
|
||||
yi
|
||||
Vs
|
||||
nh
|
||||
XO
|
||||
nh
|
||||
Vs
|
||||
Nd
|
||||
aa
|
||||
aa
|
||||
aa
|
||||
@@ -52327,13 +52439,13 @@ aa
|
||||
aa
|
||||
aa
|
||||
aa
|
||||
aa
|
||||
aa
|
||||
aa
|
||||
aa
|
||||
aa
|
||||
aa
|
||||
aa
|
||||
yi
|
||||
Vs
|
||||
nh
|
||||
TW
|
||||
nh
|
||||
Vs
|
||||
Nd
|
||||
aa
|
||||
aa
|
||||
aa
|
||||
@@ -52584,13 +52696,13 @@ aa
|
||||
aa
|
||||
aa
|
||||
aa
|
||||
aa
|
||||
aa
|
||||
aa
|
||||
aa
|
||||
aa
|
||||
aa
|
||||
aa
|
||||
yi
|
||||
Vs
|
||||
nh
|
||||
SO
|
||||
nh
|
||||
XO
|
||||
Nd
|
||||
aa
|
||||
aa
|
||||
aa
|
||||
@@ -52841,13 +52953,13 @@ aa
|
||||
aa
|
||||
aa
|
||||
aa
|
||||
aa
|
||||
aa
|
||||
aa
|
||||
aa
|
||||
aa
|
||||
aa
|
||||
aa
|
||||
yi
|
||||
WL
|
||||
TQ
|
||||
OD
|
||||
Ki
|
||||
Nt
|
||||
Nd
|
||||
aa
|
||||
aa
|
||||
aa
|
||||
@@ -80914,16 +81026,16 @@ aa
|
||||
"}
|
||||
(232,1,1) = {"
|
||||
ac
|
||||
Vy
|
||||
Vy
|
||||
Vy
|
||||
ap
|
||||
ap
|
||||
ap
|
||||
ap
|
||||
Vy
|
||||
Vy
|
||||
Vy
|
||||
ap
|
||||
ap
|
||||
ap
|
||||
ap
|
||||
ap
|
||||
ap
|
||||
bj
|
||||
bt
|
||||
bI
|
||||
@@ -81171,16 +81283,16 @@ aa
|
||||
"}
|
||||
(233,1,1) = {"
|
||||
ac
|
||||
Vy
|
||||
aB
|
||||
ap
|
||||
ap
|
||||
ap
|
||||
ap
|
||||
ap
|
||||
ap
|
||||
aB
|
||||
Vy
|
||||
ap
|
||||
ap
|
||||
ap
|
||||
ap
|
||||
ap
|
||||
ap
|
||||
Ck
|
||||
ap
|
||||
bj
|
||||
Xg
|
||||
TF
|
||||
@@ -81428,16 +81540,16 @@ aa
|
||||
"}
|
||||
(234,1,1) = {"
|
||||
ac
|
||||
Vy
|
||||
ap
|
||||
ap
|
||||
ap
|
||||
aB
|
||||
aB
|
||||
ap
|
||||
ap
|
||||
RC
|
||||
ap
|
||||
ap
|
||||
ap
|
||||
ap
|
||||
Vy
|
||||
bj
|
||||
bu
|
||||
bJ
|
||||
@@ -81685,16 +81797,16 @@ aa
|
||||
"}
|
||||
(235,1,1) = {"
|
||||
ac
|
||||
Vy
|
||||
ap
|
||||
Wk
|
||||
ap
|
||||
ap
|
||||
ap
|
||||
ap
|
||||
ap
|
||||
ap
|
||||
QI
|
||||
ap
|
||||
ap
|
||||
Vy
|
||||
bj
|
||||
bv
|
||||
bK
|
||||
@@ -81942,16 +82054,16 @@ aa
|
||||
"}
|
||||
(236,1,1) = {"
|
||||
ac
|
||||
Vy
|
||||
Vy
|
||||
Vy
|
||||
Vy
|
||||
Vy
|
||||
Vy
|
||||
Vy
|
||||
Vy
|
||||
Vy
|
||||
Vy
|
||||
ap
|
||||
ap
|
||||
ap
|
||||
ap
|
||||
ap
|
||||
ap
|
||||
ap
|
||||
ap
|
||||
ap
|
||||
ap
|
||||
bj
|
||||
RD
|
||||
Va
|
||||
|
||||
@@ -15,6 +15,10 @@
|
||||
},
|
||||
/turf/open/space,
|
||||
/area/space)
|
||||
"Q" = (
|
||||
/obj/machinery/spaceship_navigation_beacon/invion,
|
||||
/turf/open/space/basic,
|
||||
/area/space)
|
||||
|
||||
(1,1,1) = {"
|
||||
a
|
||||
@@ -271,7 +275,7 @@ a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
Q
|
||||
"}
|
||||
(2,1,1) = {"
|
||||
a
|
||||
|
||||
@@ -1,32 +1,11 @@
|
||||
/// Requires absolute stillness from the user
|
||||
#define DO_AFTER_DISALLOW_MOVING_ABSOLUTE_USER (1<<0)
|
||||
/// Requires absolute stillness from the target
|
||||
#define DO_AFTER_DISALLOW_MOVING_ABSOLUTE_TARGET (1<<1)
|
||||
/// Requires that the user is on a turf.
|
||||
#define DO_AFTER_REQUIRES_USER_ON_TURF (1<<2)
|
||||
/// Requires relative stillness to our target via dx and dy coordinate difference but only if both are spacedrifting. Specify DO_AFTER_ALLOW_NONSPACEDRIFT_RELATIVITY to say otherwise.
|
||||
#define DO_AFTER_DISALLOW_MOVING_RELATIVE (1<<3)
|
||||
/// Breaks if active hand item changes. Requires a tool be specified, otherwise defaults to active item
|
||||
#define DO_AFTER_DISALLOW_ACTIVE_ITEM_CHANGE (1<<4)
|
||||
/// Breaks if the user has no free hands. If a tool is specified, allows that as well.
|
||||
#define DO_AFTER_REQUIRE_FREE_HAND_OR_TOOL (1<<5)
|
||||
/// Do not display progressbar.
|
||||
#define DO_AFTER_NO_PROGRESSBAR (1<<6)
|
||||
/// Do not check do_after_coefficient()
|
||||
#define DO_AFTER_NO_COEFFICIENT (1<<7)
|
||||
/// For relative stillness, allow non spacedrift relative movement
|
||||
#define DO_AFTER_ALLOW_NONSPACEDRIFT_RELATIVITY (1<<8)
|
||||
|
||||
/// Ignores checks.
|
||||
#define DO_AFTER_PROCEED "PROCEED"
|
||||
/// Uses all other checks
|
||||
#define DO_AFTER_CONTINUE "CONTINUE"
|
||||
/// Breaks
|
||||
#define DO_AFTER_STOP "STOP"
|
||||
|
||||
/// Stage - initiating a do_after
|
||||
#define DO_AFTER_STARTING 1
|
||||
/// Stage - main loop of a do_after
|
||||
#define DO_AFTER_PROGRESSING 2
|
||||
/// Stage - Last check of a do_after
|
||||
#define DO_AFTER_FINISHING 3
|
||||
// timed_action_flags parameter for `/proc/do_after`
|
||||
/// Can do the action even if target is not added to doafters
|
||||
#define IGNORE_TARGET_IN_DOAFTERS (1<<0)
|
||||
/// Can do the action even if mob moves location
|
||||
#define IGNORE_USER_LOC_CHANGE (1<<1)
|
||||
/// Can do the action even if the target moves location
|
||||
#define IGNORE_TARGET_LOC_CHANGE (1<<2)
|
||||
/// Can do the action even if the item is no longer being held
|
||||
#define IGNORE_HELD_ITEM (1<<3)
|
||||
/// Can do the action even if the mob is incapacitated (ex. handcuffed)
|
||||
#define IGNORE_INCAPACITATED (1<<4)
|
||||
|
||||
+147
-49
@@ -38,8 +38,15 @@
|
||||
#define RUST_G (__rust_g || __detect_rust_g())
|
||||
#endif
|
||||
|
||||
// Handle 515 call() -> call_ext() changes
|
||||
#if DM_VERSION >= 515
|
||||
#define RUSTG_CALL call_ext
|
||||
#else
|
||||
#define RUSTG_CALL call
|
||||
#endif
|
||||
|
||||
/// Gets the version of rust_g
|
||||
/proc/rustg_get_version() return call(RUST_G, "get_version")()
|
||||
/proc/rustg_get_version() return RUSTG_CALL(RUST_G, "get_version")()
|
||||
|
||||
|
||||
/**
|
||||
@@ -51,7 +58,7 @@
|
||||
* * patterns - A non-associative list of strings to search for
|
||||
* * replacements - Default replacements for this automaton, used with rustg_acreplace
|
||||
*/
|
||||
#define rustg_setup_acreplace(key, patterns, replacements) call(RUST_G, "setup_acreplace")(key, json_encode(patterns), json_encode(replacements))
|
||||
#define rustg_setup_acreplace(key, patterns, replacements) RUSTG_CALL(RUST_G, "setup_acreplace")(key, json_encode(patterns), json_encode(replacements))
|
||||
|
||||
/**
|
||||
* Sets up the Aho-Corasick automaton using supplied options.
|
||||
@@ -63,7 +70,7 @@
|
||||
* * patterns - A non-associative list of strings to search for
|
||||
* * replacements - Default replacements for this automaton, used with rustg_acreplace
|
||||
*/
|
||||
#define rustg_setup_acreplace_with_options(key, options, patterns, replacements) call(RUST_G, "setup_acreplace")(key, json_encode(options), json_encode(patterns), json_encode(replacements))
|
||||
#define rustg_setup_acreplace_with_options(key, options, patterns, replacements) RUSTG_CALL(RUST_G, "setup_acreplace")(key, json_encode(options), json_encode(patterns), json_encode(replacements))
|
||||
|
||||
/**
|
||||
* Run the specified replacement engine with the provided haystack text to replace, returning replaced text.
|
||||
@@ -72,7 +79,7 @@
|
||||
* * key - The key for the automaton
|
||||
* * text - Text to run replacements on
|
||||
*/
|
||||
#define rustg_acreplace(key, text) call(RUST_G, "acreplace")(key, text)
|
||||
#define rustg_acreplace(key, text) RUSTG_CALL(RUST_G, "acreplace")(key, text)
|
||||
|
||||
/**
|
||||
* Run the specified replacement engine with the provided haystack text to replace, returning replaced text.
|
||||
@@ -82,7 +89,7 @@
|
||||
* * text - Text to run replacements on
|
||||
* * replacements - Replacements for this call. Must be the same length as the set-up patterns
|
||||
*/
|
||||
#define rustg_acreplace_with_replacements(key, text, replacements) call(RUST_G, "acreplace_with_replacements")(key, text, json_encode(replacements))
|
||||
#define rustg_acreplace_with_replacements(key, text, replacements) RUSTG_CALL(RUST_G, "acreplace_with_replacements")(key, text, json_encode(replacements))
|
||||
|
||||
/**
|
||||
* This proc generates a cellular automata noise grid which can be used in procedural generation methods.
|
||||
@@ -98,7 +105,7 @@
|
||||
* * height: The height of the grid.
|
||||
*/
|
||||
#define rustg_cnoise_generate(percentage, smoothing_iterations, birth_limit, death_limit, width, height) \
|
||||
call(RUST_G, "cnoise_generate")(percentage, smoothing_iterations, birth_limit, death_limit, width, height)
|
||||
RUSTG_CALL(RUST_G, "cnoise_generate")(percentage, smoothing_iterations, birth_limit, death_limit, width, height)
|
||||
|
||||
/**
|
||||
* This proc generates a grid of perlin-like noise
|
||||
@@ -114,32 +121,38 @@
|
||||
* * upper_range: upper bound of values selected for. (exclusive)
|
||||
*/
|
||||
#define rustg_dbp_generate(seed, accuracy, stamp_size, world_size, lower_range, upper_range) \
|
||||
call(RUST_G, "dbp_generate")(seed, accuracy, stamp_size, world_size, lower_range, upper_range)
|
||||
RUSTG_CALL(RUST_G, "dbp_generate")(seed, accuracy, stamp_size, world_size, lower_range, upper_range)
|
||||
|
||||
|
||||
#define rustg_dmi_strip_metadata(fname) call(RUST_G, "dmi_strip_metadata")(fname)
|
||||
#define rustg_dmi_create_png(path, width, height, data) call(RUST_G, "dmi_create_png")(path, width, height, data)
|
||||
#define rustg_dmi_resize_png(path, width, height, resizetype) call(RUST_G, "dmi_resize_png")(path, width, height, resizetype)
|
||||
#define rustg_dmi_strip_metadata(fname) RUSTG_CALL(RUST_G, "dmi_strip_metadata")(fname)
|
||||
#define rustg_dmi_create_png(path, width, height, data) RUSTG_CALL(RUST_G, "dmi_create_png")(path, width, height, data)
|
||||
#define rustg_dmi_resize_png(path, width, height, resizetype) RUSTG_CALL(RUST_G, "dmi_resize_png")(path, width, height, resizetype)
|
||||
/**
|
||||
* input: must be a path, not an /icon; you have to do your own handling if it is one, as icon objects can't be directly passed to rustg.
|
||||
*
|
||||
* output: json_encode'd list. json_decode to get a flat list with icon states in the order they're in inside the .dmi
|
||||
*/
|
||||
#define rustg_dmi_icon_states(fname) RUSTG_CALL(RUST_G, "dmi_icon_states")(fname)
|
||||
|
||||
#define rustg_file_read(fname) call(RUST_G, "file_read")(fname)
|
||||
#define rustg_file_exists(fname) call(RUST_G, "file_exists")(fname)
|
||||
#define rustg_file_write(text, fname) call(RUST_G, "file_write")(text, fname)
|
||||
#define rustg_file_append(text, fname) call(RUST_G, "file_append")(text, fname)
|
||||
#define rustg_file_get_line_count(fname) text2num(call(RUST_G, "file_get_line_count")(fname))
|
||||
#define rustg_file_seek_line(fname, line) call(RUST_G, "file_seek_line")(fname, "[line]")
|
||||
#define rustg_file_read(fname) RUSTG_CALL(RUST_G, "file_read")(fname)
|
||||
#define rustg_file_exists(fname) RUSTG_CALL(RUST_G, "file_exists")(fname)
|
||||
#define rustg_file_write(text, fname) RUSTG_CALL(RUST_G, "file_write")(text, fname)
|
||||
#define rustg_file_append(text, fname) RUSTG_CALL(RUST_G, "file_append")(text, fname)
|
||||
#define rustg_file_get_line_count(fname) text2num(RUSTG_CALL(RUST_G, "file_get_line_count")(fname))
|
||||
#define rustg_file_seek_line(fname, line) RUSTG_CALL(RUST_G, "file_seek_line")(fname, "[line]")
|
||||
|
||||
#ifdef RUSTG_OVERRIDE_BUILTINS
|
||||
#define file2text(fname) rustg_file_read("[fname]")
|
||||
#define text2file(text, fname) rustg_file_append(text, "[fname]")
|
||||
#endif
|
||||
|
||||
#define rustg_git_revparse(rev) call(RUST_G, "rg_git_revparse")(rev)
|
||||
#define rustg_git_commit_date(rev) call(RUST_G, "rg_git_commit_date")(rev)
|
||||
#define rustg_git_revparse(rev) RUSTG_CALL(RUST_G, "rg_git_revparse")(rev)
|
||||
#define rustg_git_commit_date(rev) RUSTG_CALL(RUST_G, "rg_git_commit_date")(rev)
|
||||
|
||||
#define rustg_hash_string(algorithm, text) call(RUST_G, "hash_string")(algorithm, text)
|
||||
#define rustg_hash_file(algorithm, fname) call(RUST_G, "hash_file")(algorithm, fname)
|
||||
#define rustg_hash_generate_totp(seed) call(RUST_G, "generate_totp")(seed)
|
||||
#define rustg_hash_generate_totp_tolerance(seed, tolerance) call(RUST_G, "generate_totp_tolerance")(seed, tolerance)
|
||||
#define rustg_hash_string(algorithm, text) RUSTG_CALL(RUST_G, "hash_string")(algorithm, text)
|
||||
#define rustg_hash_file(algorithm, fname) RUSTG_CALL(RUST_G, "hash_file")(algorithm, fname)
|
||||
#define rustg_hash_generate_totp(seed) RUSTG_CALL(RUST_G, "generate_totp")(seed)
|
||||
#define rustg_hash_generate_totp_tolerance(seed, tolerance) RUSTG_CALL(RUST_G, "generate_totp_tolerance")(seed, tolerance)
|
||||
|
||||
#define RUSTG_HASH_MD5 "md5"
|
||||
#define RUSTG_HASH_SHA1 "sha1"
|
||||
@@ -158,41 +171,117 @@
|
||||
#define RUSTG_HTTP_METHOD_PATCH "patch"
|
||||
#define RUSTG_HTTP_METHOD_HEAD "head"
|
||||
#define RUSTG_HTTP_METHOD_POST "post"
|
||||
#define rustg_http_request_blocking(method, url, body, headers, options) call(RUST_G, "http_request_blocking")(method, url, body, headers, options)
|
||||
#define rustg_http_request_async(method, url, body, headers, options) call(RUST_G, "http_request_async")(method, url, body, headers, options)
|
||||
#define rustg_http_check_request(req_id) call(RUST_G, "http_check_request")(req_id)
|
||||
#define rustg_http_request_blocking(method, url, body, headers, options) RUSTG_CALL(RUST_G, "http_request_blocking")(method, url, body, headers, options)
|
||||
#define rustg_http_request_async(method, url, body, headers, options) RUSTG_CALL(RUST_G, "http_request_async")(method, url, body, headers, options)
|
||||
#define rustg_http_check_request(req_id) RUSTG_CALL(RUST_G, "http_check_request")(req_id)
|
||||
|
||||
#define RUSTG_JOB_NO_RESULTS_YET "NO RESULTS YET"
|
||||
#define RUSTG_JOB_NO_SUCH_JOB "NO SUCH JOB"
|
||||
#define RUSTG_JOB_ERROR "JOB PANICKED"
|
||||
|
||||
#define rustg_json_is_valid(text) (call(RUST_G, "json_is_valid")(text) == "true")
|
||||
#define rustg_json_is_valid(text) (RUSTG_CALL(RUST_G, "json_is_valid")(text) == "true")
|
||||
|
||||
#define rustg_log_write(fname, text, format) call(RUST_G, "log_write")(fname, text, format)
|
||||
/proc/rustg_log_close_all() return call(RUST_G, "log_close_all")()
|
||||
#define rustg_log_write(fname, text, format) RUSTG_CALL(RUST_G, "log_write")(fname, text, format)
|
||||
/proc/rustg_log_close_all() return RUSTG_CALL(RUST_G, "log_close_all")()
|
||||
|
||||
#define rustg_noise_get_at_coordinates(seed, x, y) call(RUST_G, "noise_get_at_coordinates")(seed, x, y)
|
||||
#define rustg_noise_get_at_coordinates(seed, x, y) RUSTG_CALL(RUST_G, "noise_get_at_coordinates")(seed, x, y)
|
||||
|
||||
/**
|
||||
* Register a list of nodes into a rust library. This list of nodes must have been serialized in a json.
|
||||
* Node {// Index of this node in the list of nodes
|
||||
* unique_id: usize,
|
||||
* // Position of the node in byond
|
||||
* x: usize,
|
||||
* y: usize,
|
||||
* z: usize,
|
||||
* // Indexes of nodes connected to this one
|
||||
* connected_nodes_id: Vec<usize>}
|
||||
* It is important that the node with the unique_id 0 is the first in the json, unique_id 1 right after that, etc.
|
||||
* It is also important that all unique ids follow. {0, 1, 2, 4} is not a correct list and the registering will fail
|
||||
* Nodes should not link across z levels.
|
||||
* A node cannot link twice to the same node and shouldn't link itself either
|
||||
*/
|
||||
#define rustg_register_nodes_astar(json) RUSTG_CALL(RUST_G, "register_nodes_astar")(json)
|
||||
|
||||
/**
|
||||
* Add a new node to the static list of nodes. Same rule as registering_nodes applies.
|
||||
* This node unique_id must be equal to the current length of the static list of nodes
|
||||
*/
|
||||
#define rustg_add_node_astar(json) RUSTG_CALL(RUST_G, "add_node_astar")(json)
|
||||
|
||||
/**²
|
||||
* Remove every link to the node with unique_id. Replace that node by null
|
||||
*/
|
||||
#define rustg_remove_node_astart(unique_id) RUSTG_CALL(RUST_G, "remove_node_astar")(unique_id)
|
||||
|
||||
/**
|
||||
* Compute the shortest path between start_node and goal_node using A*. Heuristic used is simple geometric distance
|
||||
*/
|
||||
#define rustg_generate_path_astar(start_node_id, goal_node_id) RUSTG_CALL(RUST_G, "generate_path_astar")(start_node_id, goal_node_id)
|
||||
|
||||
#define RUSTG_REDIS_ERROR_CHANNEL "RUSTG_REDIS_ERROR_CHANNEL"
|
||||
|
||||
#define rustg_redis_connect(addr) call(RUST_G, "redis_connect")(addr)
|
||||
/proc/rustg_redis_disconnect() return call(RUST_G, "redis_disconnect")()
|
||||
#define rustg_redis_subscribe(channel) call(RUST_G, "redis_subscribe")(channel)
|
||||
/proc/rustg_redis_get_messages() return call(RUST_G, "redis_get_messages")()
|
||||
#define rustg_redis_publish(channel, message) call(RUST_G, "redis_publish")(channel, message)
|
||||
#define rustg_redis_connect(addr) RUSTG_CALL(RUST_G, "redis_connect")(addr)
|
||||
/proc/rustg_redis_disconnect() return RUSTG_CALL(RUST_G, "redis_disconnect")()
|
||||
#define rustg_redis_subscribe(channel) RUSTG_CALL(RUST_G, "redis_subscribe")(channel)
|
||||
/proc/rustg_redis_get_messages() return RUSTG_CALL(RUST_G, "redis_get_messages")()
|
||||
#define rustg_redis_publish(channel, message) RUSTG_CALL(RUST_G, "redis_publish")(channel, message)
|
||||
|
||||
#define rustg_sql_connect_pool(options) call(RUST_G, "sql_connect_pool")(options)
|
||||
#define rustg_sql_query_async(handle, query, params) call(RUST_G, "sql_query_async")(handle, query, params)
|
||||
#define rustg_sql_query_blocking(handle, query, params) call(RUST_G, "sql_query_blocking")(handle, query, params)
|
||||
#define rustg_sql_connected(handle) call(RUST_G, "sql_connected")(handle)
|
||||
#define rustg_sql_disconnect_pool(handle) call(RUST_G, "sql_disconnect_pool")(handle)
|
||||
#define rustg_sql_check_query(job_id) call(RUST_G, "sql_check_query")("[job_id]")
|
||||
/**
|
||||
* Connects to a given redis server.
|
||||
*
|
||||
* Arguments:
|
||||
* * addr - The address of the server, for example "redis://127.0.0.1/"
|
||||
*/
|
||||
#define rustg_redis_connect_rq(addr) RUSTG_CALL(RUST_G, "redis_connect_rq")(addr)
|
||||
/**
|
||||
* Disconnects from a previously connected redis server
|
||||
*/
|
||||
/proc/rustg_redis_disconnect_rq() return RUSTG_CALL(RUST_G, "redis_disconnect_rq")()
|
||||
/**
|
||||
* https://redis.io/commands/lpush/
|
||||
*
|
||||
* Arguments
|
||||
* * key (string) - The key to use
|
||||
* * elements (list) - The elements to push, use a list even if there's only one element.
|
||||
*/
|
||||
#define rustg_redis_lpush(key, elements) RUSTG_CALL(RUST_G, "redis_lpush")(key, json_encode(elements))
|
||||
/**
|
||||
* https://redis.io/commands/lrange/
|
||||
*
|
||||
* Arguments
|
||||
* * key (string) - The key to use
|
||||
* * start (string) - The zero-based index to start retrieving at
|
||||
* * stop (string) - The zero-based index to stop retrieving at (inclusive)
|
||||
*/
|
||||
#define rustg_redis_lrange(key, start, stop) RUSTG_CALL(RUST_G, "redis_lrange")(key, start, stop)
|
||||
/**
|
||||
* https://redis.io/commands/lpop/
|
||||
*
|
||||
* Arguments
|
||||
* * key (string) - The key to use
|
||||
* * count (string|null) - The amount to pop off the list, pass null to omit (thus just 1)
|
||||
*
|
||||
* Note: `count` was added in Redis version 6.2.0
|
||||
*/
|
||||
#define rustg_redis_lpop(key, count) RUSTG_CALL(RUST_G, "redis_lpop")(key, count)
|
||||
|
||||
#define rustg_time_microseconds(id) text2num(call(RUST_G, "time_microseconds")(id))
|
||||
#define rustg_time_milliseconds(id) text2num(call(RUST_G, "time_milliseconds")(id))
|
||||
#define rustg_time_reset(id) call(RUST_G, "time_reset")(id)
|
||||
#define rustg_sql_connect_pool(options) RUSTG_CALL(RUST_G, "sql_connect_pool")(options)
|
||||
#define rustg_sql_query_async(handle, query, params) RUSTG_CALL(RUST_G, "sql_query_async")(handle, query, params)
|
||||
#define rustg_sql_query_blocking(handle, query, params) RUSTG_CALL(RUST_G, "sql_query_blocking")(handle, query, params)
|
||||
#define rustg_sql_connected(handle) RUSTG_CALL(RUST_G, "sql_connected")(handle)
|
||||
#define rustg_sql_disconnect_pool(handle) RUSTG_CALL(RUST_G, "sql_disconnect_pool")(handle)
|
||||
#define rustg_sql_check_query(job_id) RUSTG_CALL(RUST_G, "sql_check_query")("[job_id]")
|
||||
|
||||
#define rustg_raw_read_toml_file(path) json_decode(call(RUST_G, "toml_file_to_json")(path) || "null")
|
||||
#define rustg_time_microseconds(id) text2num(RUSTG_CALL(RUST_G, "time_microseconds")(id))
|
||||
#define rustg_time_milliseconds(id) text2num(RUSTG_CALL(RUST_G, "time_milliseconds")(id))
|
||||
#define rustg_time_reset(id) RUSTG_CALL(RUST_G, "time_reset")(id)
|
||||
|
||||
/// Returns the timestamp as a string
|
||||
/proc/rustg_unix_timestamp()
|
||||
return RUSTG_CALL(RUST_G, "unix_timestamp")()
|
||||
|
||||
#define rustg_raw_read_toml_file(path) json_decode(RUSTG_CALL(RUST_G, "toml_file_to_json")(path) || "null")
|
||||
|
||||
/proc/rustg_read_toml_file(path)
|
||||
var/list/output = rustg_raw_read_toml_file(path)
|
||||
@@ -201,11 +290,20 @@
|
||||
else
|
||||
CRASH(output["content"])
|
||||
|
||||
#define rustg_unzip_download_async(url, unzip_directory) call(RUST_G, "unzip_download_async")(url, unzip_directory)
|
||||
#define rustg_unzip_check(job_id) call(RUST_G, "unzip_check")("[job_id]")
|
||||
#define rustg_raw_toml_encode(value) json_decode(RUSTG_CALL(RUST_G, "toml_encode")(json_encode(value)))
|
||||
|
||||
#define rustg_url_encode(text) call(RUST_G, "url_encode")("[text]")
|
||||
#define rustg_url_decode(text) call(RUST_G, "url_decode")(text)
|
||||
/proc/rustg_toml_encode(value)
|
||||
var/list/output = rustg_raw_toml_encode(value)
|
||||
if (output["success"])
|
||||
return output["content"]
|
||||
else
|
||||
CRASH(output["content"])
|
||||
|
||||
#define rustg_unzip_download_async(url, unzip_directory) RUSTG_CALL(RUST_G, "unzip_download_async")(url, unzip_directory)
|
||||
#define rustg_unzip_check(job_id) RUSTG_CALL(RUST_G, "unzip_check")("[job_id]")
|
||||
|
||||
#define rustg_url_encode(text) RUSTG_CALL(RUST_G, "url_encode")("[text]")
|
||||
#define rustg_url_decode(text) RUSTG_CALL(RUST_G, "url_decode")(text)
|
||||
|
||||
#ifdef RUSTG_OVERRIDE_BUILTINS
|
||||
#define url_encode(text) rustg_url_encode(text)
|
||||
@@ -226,6 +324,6 @@
|
||||
* * node_max: maximum amount of nodes in a region
|
||||
*/
|
||||
#define rustg_worley_generate(region_size, threshold, node_per_region_chance, size, node_min, node_max) \
|
||||
call(RUST_G, "worley_generate")(region_size, threshold, node_per_region_chance, size, node_min, node_max)
|
||||
RUSTG_CALL(RUST_G, "worley_generate")(region_size, threshold, node_per_region_chance, size, node_min, node_max)
|
||||
|
||||
|
||||
|
||||
@@ -7,6 +7,9 @@
|
||||
#define SPECIES_UMAMMAL "undead_mammal"
|
||||
#define SPECIES_MAMMAL_SYNTHETIC "mammal_synthetic"
|
||||
#define SPECIES_ARACHNID "arachnid"
|
||||
#define SPECIES_TESHARI "teshari"
|
||||
#define SPECIES_VOX "vox"
|
||||
#define SPECIES_XENOCHIMERA "xenochimera"
|
||||
#define SPECIES_INSECT "insect"
|
||||
#define SPECIES_UINSECT "undead_insect"
|
||||
#define SPECIES_DULLAHAN "dullahan"
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
// tgstation-server DMAPI
|
||||
|
||||
#define TGS_DMAPI_VERSION "6.5.2"
|
||||
#define TGS_DMAPI_VERSION "6.5.3"
|
||||
|
||||
// All functions and datums outside this document are subject to change with any version and should not be relied on.
|
||||
|
||||
@@ -154,7 +154,7 @@
|
||||
#define TGS_TOPIC var/tgs_topic_return = TgsTopic(args[1]); if(tgs_topic_return) return tgs_topic_return
|
||||
|
||||
/**
|
||||
* Call this as late as possible in [world/proc/Reboot].
|
||||
* Call this as late as possible in [world/proc/Reboot] (BEFORE ..()).
|
||||
*/
|
||||
/world/proc/TgsReboot()
|
||||
return
|
||||
|
||||
@@ -7,14 +7,15 @@
|
||||
/proc/auxtools_stack_trace(msg)
|
||||
CRASH(msg)
|
||||
|
||||
GLOBAL_LIST_EMPTY(auxtools_initialized)
|
||||
//glob doesn't exist yet at some gas new calls, imma use it anyways
|
||||
GLOBAL_REAL_VAR(list/__auxtools_initialized) = list()
|
||||
|
||||
#define AUXTOOLS_CHECK(LIB)\
|
||||
if (!GLOB.auxtools_initialized[LIB]) {\
|
||||
if (!__auxtools_initialized[LIB]) {\
|
||||
if (fexists(LIB)) {\
|
||||
var/string = call(LIB,"auxtools_init")();\
|
||||
if(findtext(string, "SUCCESS")) {\
|
||||
GLOB.auxtools_initialized[LIB] = TRUE;\
|
||||
__auxtools_initialized[LIB] = TRUE;\
|
||||
} else {\
|
||||
CRASH(string);\
|
||||
}\
|
||||
@@ -24,7 +25,7 @@ GLOBAL_LIST_EMPTY(auxtools_initialized)
|
||||
}\
|
||||
|
||||
#define AUXTOOLS_SHUTDOWN(LIB)\
|
||||
if (GLOB.auxtools_initialized[LIB] && fexists(LIB)){\
|
||||
if (__auxtools_initialized[LIB] && fexists(LIB)){\
|
||||
call(LIB,"auxtools_shutdown")();\
|
||||
GLOB.auxtools_initialized[LIB] = FALSE;\
|
||||
__auxtools_initialized[LIB] = FALSE;\
|
||||
}\
|
||||
|
||||
+79
-241
@@ -1,168 +1,6 @@
|
||||
/**
|
||||
* Higher overhead "advanced" version of do_after.
|
||||
* @params
|
||||
* - atom/user is the atom doing the action or the "physical" user
|
||||
* - delay is time in deciseconds
|
||||
* - atom/target is the atom the action is being done to, defaults to user
|
||||
* - do_after_flags see __DEFINES/flags/do_after.dm for details.
|
||||
* - datum/callback/extra_checks - Every time this ticks, extra_checks() is invoked with (user, delay, target, time_left, do_after_flags, required_mobility_flags, required_combat_flags, mob_redirect, stage, initially_held_item, tool, passed_in).
|
||||
* Stage can be DO_AFTER_STARTING, DO_AFTER_PROGRESSING, DO_AFTER_FINISHING
|
||||
* If it returns DO_AFTER_STOP, this breaks.
|
||||
* If it returns nothing, all other checks are done.
|
||||
* If it returns DO_AFTER_PROCEED, all other checks are ignored.
|
||||
* passed_in is a list[PROGRESS_MULTIPLIER], for modification.
|
||||
* - required_mobility_flags is checked with CHECK_ALL_MOBILITY. Will immediately fail if the user isn't a mob.
|
||||
* - requried_combat_flags is checked with CHECK_MULTIPLE_BITFIELDS. Will immediately fail if the user isn't a mob.
|
||||
* - mob/living/mob_redirect - advanced option: If this is specified, movement and mobility/combat flag checks will use this instead of user. Progressbars will also go to this.
|
||||
* - obj/item/tool - The tool we're using. See do_after flags for details.
|
||||
*/
|
||||
#define INVOKE_CALLBACK cb_return = extra_checks?.Invoke(user, delay, target, timeleft, do_after_flags, required_mobility_flags, required_combat_flags, mob_redirect, stage, initially_held_item, tool, passed_in)
|
||||
#define CHECK_FLAG_FAILURE ((required_mobility_flags || required_combat_flags) && (!living_user || (required_mobility_flags && !CHECK_ALL_MOBILITY(living_user, required_mobility_flags)) || (required_combat_flags && !CHECK_MULTIPLE_BITFIELDS(living_user.combat_flags, required_combat_flags))))
|
||||
#define TIMELEFT (timeleft)
|
||||
/proc/do_after_advanced(atom/user, delay, atom/target, do_after_flags, datum/callback/extra_checks, required_mobility_flags, required_combat_flags, mob/living/mob_redirect, obj/item/tool)
|
||||
// CHECK AND SET VARIABLES
|
||||
if(!user)
|
||||
return FALSE
|
||||
if(!target)
|
||||
target = user
|
||||
if((user.loc == null) || (target.loc == null))
|
||||
return FALSE
|
||||
var/mob/living/living_user = mob_redirect
|
||||
if(!living_user && isliving(user))
|
||||
living_user = user
|
||||
var/stage = DO_AFTER_STARTING
|
||||
var/startlocuser = user.loc
|
||||
var/startloctarget = target.loc
|
||||
var/turf/userturf = get_turf(user)
|
||||
var/turf/targetturf = get_turf(target)
|
||||
if(!userturf || !targetturf)
|
||||
return FALSE
|
||||
if((do_after_flags & DO_AFTER_REQUIRES_USER_ON_TURF) && !isturf(user.loc))
|
||||
return FALSE
|
||||
if(!(do_after_flags & DO_AFTER_NO_COEFFICIENT) && living_user)
|
||||
delay *= living_user.cached_multiplicative_actions_slowdown
|
||||
var/timeleft = delay
|
||||
var/obj/item/initially_held_item = mob_redirect?.get_active_held_item()
|
||||
var/atom/movable/AM_user = ismovable(user) && user
|
||||
var/drifting = AM_user?.Process_Spacemove(NONE) && AM_user.inertia_dir
|
||||
var/initial_dx = targetturf.x - userturf.x
|
||||
var/initial_dy = targetturf.y - userturf.y
|
||||
var/dx = initial_dx
|
||||
var/dy = initial_dy
|
||||
// DO OUR STARTING CHECKS
|
||||
var/cb_return
|
||||
var/list/passed_in = list(1)
|
||||
INVOKE_CALLBACK
|
||||
if(cb_return == DO_AFTER_STOP)
|
||||
return FALSE
|
||||
else if(cb_return != DO_AFTER_PROCEED)
|
||||
if(CHECK_FLAG_FAILURE)
|
||||
return FALSE
|
||||
// SETUP LOOP
|
||||
var/datum/progressbar/progbar
|
||||
if(living_user)
|
||||
if(!(do_after_flags & DO_AFTER_NO_PROGRESSBAR))
|
||||
progbar = new(living_user, delay, target)
|
||||
// MAIN LOOP
|
||||
. = TRUE
|
||||
if(!delay)
|
||||
return
|
||||
var/obj/item/held
|
||||
var/locchanged
|
||||
var/ctu
|
||||
var/ctt
|
||||
var/tick_time = world.time
|
||||
while(timeleft > 0)
|
||||
stoplag(1)
|
||||
var/timepassed = world.time - tick_time
|
||||
tick_time = world.time
|
||||
progbar?.update(TIMELEFT)
|
||||
if(QDELETED(user) || QDELETED(target) || (user.loc == null) || (target.loc == null))
|
||||
. = FALSE
|
||||
break
|
||||
INVOKE_CALLBACK
|
||||
timeleft -= timepassed * passed_in[1]
|
||||
if(cb_return == DO_AFTER_STOP)
|
||||
. = FALSE
|
||||
break
|
||||
else if(cb_return == DO_AFTER_PROCEED)
|
||||
continue
|
||||
// otherwise, go through our normal checks.
|
||||
if(((do_after_flags & DO_AFTER_DISALLOW_MOVING_ABSOLUTE_USER) && (user.loc != startlocuser)) || ((do_after_flags & DO_AFTER_DISALLOW_MOVING_ABSOLUTE_TARGET) && (target.loc != startloctarget)))
|
||||
. = FALSE
|
||||
break
|
||||
else if(do_after_flags & DO_AFTER_DISALLOW_MOVING_RELATIVE)
|
||||
ctu = get_turf(user)
|
||||
ctt = get_turf(target)
|
||||
locchanged = (userturf != ctu) || (targetturf != ctt)
|
||||
userturf = ctu
|
||||
targetturf = ctt
|
||||
dx = targetturf.x - userturf.x
|
||||
dy = targetturf.y - userturf.y
|
||||
if((dx != initial_dx) || (dy != initial_dy))
|
||||
. = FALSE
|
||||
break
|
||||
if(locchanged && !drifting && !(do_after_flags & DO_AFTER_ALLOW_NONSPACEDRIFT_RELATIVITY))
|
||||
. = FALSE
|
||||
break
|
||||
if(!AM_user.inertia_dir)
|
||||
drifting = FALSE
|
||||
if((do_after_flags & DO_AFTER_REQUIRES_USER_ON_TURF) && !isturf(user.loc))
|
||||
return FALSE
|
||||
if(CHECK_FLAG_FAILURE)
|
||||
. = FALSE
|
||||
break
|
||||
held = living_user?.get_active_held_item()
|
||||
if((do_after_flags & DO_AFTER_DISALLOW_ACTIVE_ITEM_CHANGE) && (held != (tool || initially_held_item)))
|
||||
. = FALSE
|
||||
break
|
||||
if((do_after_flags & DO_AFTER_REQUIRE_FREE_HAND_OR_TOOL) && (!living_user?.is_holding(tool) && !length(living_user?.get_empty_held_indexes())))
|
||||
. = FALSE
|
||||
break
|
||||
|
||||
// CLEANUP
|
||||
progbar.end_progress()
|
||||
// If we failed, just return.
|
||||
if(!.)
|
||||
return FALSE
|
||||
// DO FINISHING CHECKS
|
||||
if(QDELETED(user) || QDELETED(target))
|
||||
return FALSE
|
||||
INVOKE_CALLBACK
|
||||
if(cb_return == DO_AFTER_STOP)
|
||||
return FALSE
|
||||
else if(cb_return == DO_AFTER_PROCEED)
|
||||
return TRUE
|
||||
if(CHECK_FLAG_FAILURE)
|
||||
return FALSE
|
||||
if(((do_after_flags & DO_AFTER_DISALLOW_MOVING_ABSOLUTE_USER) && (user.loc != startlocuser)) || ((do_after_flags & DO_AFTER_DISALLOW_MOVING_ABSOLUTE_TARGET) && (target.loc != startloctarget)))
|
||||
return FALSE
|
||||
else if(do_after_flags & DO_AFTER_DISALLOW_MOVING_RELATIVE)
|
||||
ctu = get_turf(user)
|
||||
ctt = get_turf(target)
|
||||
locchanged = (userturf != ctu) || (targetturf != ctt)
|
||||
userturf = ctu
|
||||
targetturf = ctt
|
||||
dx = targetturf.x - userturf.x
|
||||
dy = targetturf.y - userturf.y
|
||||
if((dx != initial_dx) || (dy != initial_dy))
|
||||
return FALSE
|
||||
if(locchanged && !drifting && !(do_after_flags & DO_AFTER_ALLOW_NONSPACEDRIFT_RELATIVITY))
|
||||
return FALSE
|
||||
if((do_after_flags & DO_AFTER_REQUIRES_USER_ON_TURF) && !isturf(user.loc))
|
||||
return FALSE
|
||||
held = living_user?.get_active_held_item()
|
||||
if((do_after_flags & DO_AFTER_DISALLOW_ACTIVE_ITEM_CHANGE) && (held != (tool || initially_held_item)))
|
||||
return FALSE
|
||||
if((do_after_flags & DO_AFTER_REQUIRE_FREE_HAND_OR_TOOL) && (!living_user?.is_holding(tool) && !length(living_user?.get_empty_held_indexes())))
|
||||
return FALSE
|
||||
|
||||
#undef INVOKE_CALLBACK
|
||||
#undef CHECK_FLAG_FAILURE
|
||||
|
||||
/proc/do_mob(mob/user , mob/target, time = 30, uninterruptible = 0, progress = 1, datum/callback/extra_checks = null, ignorehelditem = FALSE, resume_time = 0 SECONDS)
|
||||
/proc/do_mob(mob/user, mob/target, time = 3 SECONDS, timed_action_flags = NONE, progress = TRUE, datum/callback/extra_checks, resume_time = 0 SECONDS)
|
||||
if(!user || !target)
|
||||
return 0
|
||||
return FALSE
|
||||
var/user_loc = user.loc
|
||||
|
||||
var/drifting = 0
|
||||
@@ -181,31 +19,27 @@
|
||||
|
||||
var/endtime = world.time+time
|
||||
var/starttime = world.time
|
||||
. = 1
|
||||
. = TRUE
|
||||
while (world.time + resume_time < endtime)
|
||||
stoplag(1)
|
||||
if (progress)
|
||||
if(!QDELETED(progbar))
|
||||
progbar.update(world.time - starttime + resume_time)
|
||||
if(QDELETED(user) || QDELETED(target))
|
||||
. = 0
|
||||
break
|
||||
if(uninterruptible)
|
||||
continue
|
||||
if(!(target in user.do_afters))
|
||||
. = FALSE
|
||||
break
|
||||
|
||||
if(!(target in user.do_afters))
|
||||
. = FALSE
|
||||
break
|
||||
|
||||
if(drifting && !user.inertia_dir)
|
||||
drifting = 0
|
||||
drifting = FALSE
|
||||
user_loc = user.loc
|
||||
|
||||
if((!drifting && user.loc != user_loc) || target.loc != target_loc || (!ignorehelditem && user.get_active_held_item() != holding) || user.incapacitated() || user.lying || (extra_checks && !extra_checks.Invoke()))
|
||||
. = 0
|
||||
if(
|
||||
QDELETED(user) || QDELETED(target) \
|
||||
|| (!(timed_action_flags & IGNORE_TARGET_IN_DOAFTERS) && !(target in user.do_afters)) \
|
||||
|| (!(timed_action_flags & IGNORE_USER_LOC_CHANGE) && !drifting && user.loc != user_loc) \
|
||||
|| (!(timed_action_flags & IGNORE_TARGET_LOC_CHANGE) && target.loc != target_loc) \
|
||||
|| (!(timed_action_flags & IGNORE_HELD_ITEM) && user.get_active_held_item() != holding) \
|
||||
|| (!(timed_action_flags & IGNORE_INCAPACITATED) && user.incapacitated()) \
|
||||
|| (extra_checks && !extra_checks.Invoke()) \
|
||||
)
|
||||
. = FALSE
|
||||
break
|
||||
|
||||
if(!QDELETED(progbar))
|
||||
@@ -229,29 +63,25 @@
|
||||
checked_health["health"] = health
|
||||
return ..()
|
||||
|
||||
/proc/do_after(mob/user, var/delay, needhand = 1, atom/target = null, progress = 1, datum/callback/extra_checks = null, required_mobility_flags = (MOBILITY_USE|MOBILITY_MOVE), resume_time = 0 SECONDS)
|
||||
/proc/do_after(mob/user, delay, atom/target, timed_action_flags = NONE, progress = TRUE, datum/callback/extra_checks, resume_time = 0 SECONDS)
|
||||
if(!user)
|
||||
return 0
|
||||
var/atom/Tloc = null
|
||||
return FALSE
|
||||
var/atom/target_loc = null
|
||||
if(target && !isturf(target))
|
||||
Tloc = target.loc
|
||||
target_loc = target.loc
|
||||
|
||||
if(target)
|
||||
LAZYADD(user.do_afters, target)
|
||||
LAZYADD(target.targeted_by, user)
|
||||
|
||||
var/atom/Uloc = user.loc
|
||||
var/atom/user_loc = user.loc
|
||||
|
||||
var/drifting = 0
|
||||
var/drifting = FALSE
|
||||
if(!user.Process_Spacemove(0) && user.inertia_dir)
|
||||
drifting = 1
|
||||
drifting = TRUE
|
||||
|
||||
var/holding = user.get_active_held_item()
|
||||
|
||||
var/holdingnull = 1 //User's hand started out empty, check for an empty hand
|
||||
if(holding)
|
||||
holdingnull = 0 //Users hand started holding something, check to see if it's still holding that
|
||||
|
||||
delay *= user.cached_multiplicative_actions_slowdown
|
||||
|
||||
var/datum/progressbar/progbar
|
||||
@@ -260,8 +90,7 @@
|
||||
|
||||
var/endtime = world.time + delay
|
||||
var/starttime = world.time
|
||||
. = 1
|
||||
var/mob/living/L = isliving(user) && user //evals to last thing eval'd
|
||||
. = TRUE
|
||||
while (world.time + resume_time < endtime)
|
||||
stoplag(1)
|
||||
if (progress)
|
||||
@@ -269,36 +98,32 @@
|
||||
progbar.update(world.time - starttime + resume_time)
|
||||
|
||||
if(drifting && !user.inertia_dir)
|
||||
drifting = 0
|
||||
Uloc = user.loc
|
||||
drifting = FALSE
|
||||
user_loc = user.loc
|
||||
|
||||
if(L && !CHECK_ALL_MOBILITY(L, required_mobility_flags))
|
||||
. = 0
|
||||
break
|
||||
|
||||
if(QDELETED(user) || user.stat || (!drifting && user.loc != Uloc) || (extra_checks && !extra_checks.Invoke()))
|
||||
. = 0
|
||||
break
|
||||
|
||||
if(!QDELETED(Tloc) && (QDELETED(target) || Tloc != target.loc))
|
||||
if((Uloc != Tloc || Tloc != user) && !drifting)
|
||||
. = 0
|
||||
break
|
||||
|
||||
if(target && !(target in user.do_afters))
|
||||
if(
|
||||
QDELETED(user) \
|
||||
|| (!(timed_action_flags & IGNORE_USER_LOC_CHANGE) && !drifting && user.loc != user_loc) \
|
||||
|| (!(timed_action_flags & IGNORE_HELD_ITEM) && user.get_active_held_item() != holding) \
|
||||
|| (!(timed_action_flags & IGNORE_INCAPACITATED) && user.incapacitated()) \
|
||||
|| (extra_checks && !extra_checks.Invoke()) \
|
||||
)
|
||||
. = FALSE
|
||||
break
|
||||
|
||||
if(needhand)
|
||||
//This might seem like an odd check, but you can still need a hand even when it's empty
|
||||
//i.e the hand is used to pull some item/tool out of the construction
|
||||
if(!holdingnull)
|
||||
if(!holding)
|
||||
. = 0
|
||||
break
|
||||
if(user.get_active_held_item() != holding)
|
||||
. = 0
|
||||
break
|
||||
if(
|
||||
!(timed_action_flags & IGNORE_TARGET_LOC_CHANGE) \
|
||||
&& !drifting \
|
||||
&& !QDELETED(target_loc) \
|
||||
&& (QDELETED(target) || target_loc != target.loc) \
|
||||
&& ((user_loc != target_loc || target_loc != user)) \
|
||||
)
|
||||
. = FALSE
|
||||
break
|
||||
|
||||
if(target && !(timed_action_flags & IGNORE_TARGET_IN_DOAFTERS) && !(target in user.do_afters))
|
||||
. = FALSE
|
||||
break
|
||||
|
||||
if(!QDELETED(progbar))
|
||||
progbar.end_progress()
|
||||
@@ -310,16 +135,16 @@
|
||||
LAZYREMOVE(user.do_afters, target)
|
||||
LAZYREMOVE(target.targeted_by, user)
|
||||
|
||||
/proc/do_after_mob(mob/user, var/list/targets, time = 30, uninterruptible = 0, progress = 1, datum/callback/extra_checks)
|
||||
/proc/do_after_mob(mob/user, list/targets, time = 3 SECONDS, timed_action_flags = NONE, progress = TRUE, datum/callback/extra_checks)
|
||||
if(!user || !targets)
|
||||
return 0
|
||||
return FALSE
|
||||
if(!islist(targets))
|
||||
targets = list(targets)
|
||||
var/user_loc = user.loc
|
||||
|
||||
var/drifting = 0
|
||||
var/drifting = FALSE
|
||||
if(!user.Process_Spacemove(0) && user.inertia_dir)
|
||||
drifting = 1
|
||||
drifting = TRUE
|
||||
|
||||
var/list/originalloc = list()
|
||||
for(var/atom/target in targets)
|
||||
@@ -337,26 +162,39 @@
|
||||
var/endtime = world.time + time
|
||||
var/starttime = world.time
|
||||
. = 1
|
||||
mainloop:
|
||||
while(world.time < endtime)
|
||||
stoplag(1)
|
||||
if(progress)
|
||||
if(!QDELETED(progbar))
|
||||
progbar.update(world.time - starttime)
|
||||
if(QDELETED(user) || !targets)
|
||||
. = 0
|
||||
while(world.time < endtime)
|
||||
stoplag(1)
|
||||
|
||||
if(!QDELETED(progbar))
|
||||
progbar.update(world.time - starttime)
|
||||
if(QDELETED(user) || !length(targets))
|
||||
. = FALSE
|
||||
break
|
||||
|
||||
if(drifting && !user.inertia_dir)
|
||||
drifting = FALSE
|
||||
user_loc = user.loc
|
||||
|
||||
if(
|
||||
!((timed_action_flags & IGNORE_USER_LOC_CHANGE) && !drifting && user_loc != user.loc) \
|
||||
|| (!(timed_action_flags & IGNORE_HELD_ITEM) && user.get_active_held_item() != holding) \
|
||||
|| (!(timed_action_flags & IGNORE_INCAPACITATED) && user.incapacitated()) \
|
||||
|| (extra_checks && !extra_checks.Invoke()) \
|
||||
)
|
||||
. = FALSE
|
||||
break
|
||||
|
||||
for(var/t in targets)
|
||||
var/atom/target = t
|
||||
if(
|
||||
(QDELETED(target)) \
|
||||
|| (!(timed_action_flags & IGNORE_TARGET_LOC_CHANGE) && originalloc[target] != target.loc) \
|
||||
)
|
||||
. = FALSE
|
||||
break
|
||||
if(uninterruptible)
|
||||
continue
|
||||
|
||||
if(drifting && !user.inertia_dir)
|
||||
drifting = 0
|
||||
user_loc = user.loc
|
||||
|
||||
for(var/atom/target in targets)
|
||||
if((!drifting && user_loc != user.loc) || QDELETED(target) || originalloc[target] != target.loc || user.get_active_held_item() != holding || user.incapacitated() || user.lying || (extra_checks && !extra_checks.Invoke()))
|
||||
. = 0
|
||||
break mainloop
|
||||
if(!.) // In case the for-loop found a reason to break out of the while.
|
||||
break
|
||||
|
||||
if(!QDELETED(progbar))
|
||||
progbar.end_progress()
|
||||
|
||||
@@ -1340,7 +1340,7 @@ GLOBAL_DATUM_INIT(dview_mob, /mob/dview, new)
|
||||
return temp
|
||||
|
||||
//same as do_mob except for movables and it allows both to drift and doesn't draw progressbar
|
||||
/proc/do_atom(atom/movable/user , atom/movable/target, time = 30, uninterruptible = 0,datum/callback/extra_checks = null)
|
||||
/proc/do_atom(atom/movable/user, atom/movable/target, time = 3 SECONDS, timed_action_flags = NONE, datum/callback/extra_checks)
|
||||
if(!user || !target)
|
||||
return TRUE
|
||||
var/user_loc = user.loc
|
||||
@@ -1359,11 +1359,10 @@ GLOBAL_DATUM_INIT(dview_mob, /mob/dview, new)
|
||||
. = TRUE
|
||||
while (world.time < endtime)
|
||||
stoplag(1)
|
||||
|
||||
if(QDELETED(user) || QDELETED(target))
|
||||
. = 0
|
||||
. = FALSE
|
||||
break
|
||||
if(uninterruptible)
|
||||
continue
|
||||
|
||||
if(drifting && !user.inertia_dir)
|
||||
drifting = FALSE
|
||||
@@ -1373,7 +1372,11 @@ GLOBAL_DATUM_INIT(dview_mob, /mob/dview, new)
|
||||
target_drifting = FALSE
|
||||
target_loc = target.loc
|
||||
|
||||
if((!drifting && user.loc != user_loc) || (!target_drifting && target.loc != target_loc) || (extra_checks && !extra_checks.Invoke()))
|
||||
if(
|
||||
(!(timed_action_flags & IGNORE_USER_LOC_CHANGE) && !drifting && user.loc != user_loc) \
|
||||
|| (!(timed_action_flags& IGNORE_TARGET_LOC_CHANGE) && !target_drifting && target.loc != target_loc) \
|
||||
|| (extra_checks && !extra_checks.Invoke()) \
|
||||
)
|
||||
. = FALSE
|
||||
break
|
||||
|
||||
|
||||
@@ -335,7 +335,7 @@ GLOBAL_LIST_INIT(unlocked_mutant_parts, list("horns", "insect_fluff"))
|
||||
GLOBAL_LIST_INIT(colored_mutant_parts, list("insect_wings" = "wings_color", "deco_wings" = "wings_color", "horns" = "horns_color"))
|
||||
|
||||
//body ids that have greyscale sprites
|
||||
GLOBAL_LIST_INIT(greyscale_limb_types, list("human","moth","lizard","pod","plant","jelly","slime","golem","slimelumi","stargazer","mush","ethereal","snail","c_golem","b_golem","mammal","xeno","ipc","insect","synthliz","avian","aquatic", "shadekin"))
|
||||
GLOBAL_LIST_INIT(greyscale_limb_types, list("human","moth","lizard","pod","plant","jelly","slime","golem","slimelumi","stargazer","mush","ethereal","snail","c_golem","b_golem","mammal","xeno","ipc","insect","synthliz","avian","aquatic", "shadekin", "teshari", "vox"))
|
||||
|
||||
//body ids that have prosthetic sprites
|
||||
GLOBAL_LIST_INIT(prosthetic_limb_types, list("xion","bishop","cybersolutions","grayson","hephaestus","nanotrasen","talon","veymed")) //I don't know if i can module this to splurt
|
||||
@@ -344,7 +344,7 @@ GLOBAL_LIST_INIT(prosthetic_limb_types, list("xion","bishop","cybersolutions","g
|
||||
GLOBAL_LIST_INIT(nongendered_limb_types, list("fly", "zombie" ,"synth", "shadow", "cultgolem", "agent", "plasmaman", "clockgolem", "clothgolem"))
|
||||
|
||||
//list of eye types, corresponding to a respective left and right icon state for the set of eyes
|
||||
GLOBAL_LIST_INIT(eye_types, list("normal", "insect", "moth", "double", "double2", "double3", "spider", "cyclops", "third", "spectre", "shadekin", "noodle", "none"))
|
||||
GLOBAL_LIST_INIT(eye_types, list("normal", "insect", "moth", "double", "double2", "double3", "spider", "cyclops", "third", "spectre", "shadekin", "teshari", "vox", "noodle", "none"))
|
||||
|
||||
//list linking bodypart bitflags to their actual names
|
||||
GLOBAL_LIST_INIT(bodypart_names, list(num2text(HEAD) = "Head", num2text(CHEST) = "Chest", num2text(LEG_LEFT) = "Left Leg", num2text(LEG_RIGHT) = "Right Leg", num2text(ARM_LEFT) = "Left Arm", num2text(ARM_RIGHT) = "Right Arm"))
|
||||
|
||||
@@ -29,11 +29,7 @@ SUBSYSTEM_DEF(air)
|
||||
var/list/hotspots = list()
|
||||
var/list/networks = list()
|
||||
var/list/pipenets_needing_rebuilt = list()
|
||||
var/list/deferred_airs = list()
|
||||
var/cur_deferred_airs = 0
|
||||
var/max_deferred_airs = 0
|
||||
var/list/obj/machinery/atmos_machinery = list()
|
||||
var/list/obj/machinery/atmos_air_machinery = list()
|
||||
var/list/pipe_init_dirs_cache = list()
|
||||
|
||||
//atmos singletons
|
||||
@@ -56,9 +52,7 @@ SUBSYSTEM_DEF(air)
|
||||
// Max number of turfs to look for a space turf, and max number of turfs that will be decompressed.
|
||||
var/equalize_hard_turf_limit = 2000
|
||||
// Whether equalization is enabled. Can be disabled for performance reasons.
|
||||
var/equalize_enabled = TRUE
|
||||
// Whether equalization should be enabled.
|
||||
var/should_do_equalization = TRUE
|
||||
var/equalize_enabled = FALSE
|
||||
// When above 0, won't equalize; performance handling
|
||||
var/eq_cooldown = 0
|
||||
// Whether turf-to-turf heat exchanging should be enabled.
|
||||
@@ -97,7 +91,6 @@ SUBSYSTEM_DEF(air)
|
||||
msg += "LT:[low_pressure_turfs]|"
|
||||
msg += "ET:[num_equalize_processed]|"
|
||||
msg += "GT:[num_group_turfs_processed]|"
|
||||
msg += "DF:[max_deferred_airs]|"
|
||||
msg += "GA:[get_amt_gas_mixes()]|"
|
||||
msg += "MG:[get_max_gas_mixes()]"
|
||||
return ..()
|
||||
@@ -108,8 +101,8 @@ SUBSYSTEM_DEF(air)
|
||||
setup_atmos_machinery()
|
||||
setup_pipenets()
|
||||
gas_reactions = init_gas_reactions()
|
||||
should_do_equalization = CONFIG_GET(flag/atmos_equalize_enabled)
|
||||
auxtools_update_reactions()
|
||||
equalize_enabled = CONFIG_GET(flag/atmos_equalize_enabled)
|
||||
return ..()
|
||||
|
||||
/datum/controller/subsystem/air/proc/extools_update_ssair()
|
||||
@@ -157,6 +150,35 @@ SUBSYSTEM_DEF(air)
|
||||
if(state != SS_RUNNING)
|
||||
return
|
||||
resumed = FALSE
|
||||
currentpart = SSAIR_ACTIVETURFS
|
||||
|
||||
if(currentpart == SSAIR_ACTIVETURFS)
|
||||
timer = TICK_USAGE_REAL
|
||||
process_turfs(resumed)
|
||||
if(state != SS_RUNNING)
|
||||
return
|
||||
resumed = 0
|
||||
currentpart = SSAIR_EXCITEDGROUPS
|
||||
|
||||
if(currentpart == SSAIR_EXCITEDGROUPS)
|
||||
process_excited_groups(resumed)
|
||||
if(state != SS_RUNNING)
|
||||
return
|
||||
resumed = 0
|
||||
currentpart = equalize_enabled ? SSAIR_EQUALIZE : SSAIR_FINALIZE_TURFS
|
||||
|
||||
if(currentpart == SSAIR_EQUALIZE)
|
||||
equalize_turfs(resumed)
|
||||
if(state != SS_RUNNING)
|
||||
return
|
||||
resumed = 0
|
||||
currentpart = SSAIR_FINALIZE_TURFS
|
||||
|
||||
if(currentpart == SSAIR_FINALIZE_TURFS)
|
||||
finish_turf_processing(resumed)
|
||||
if(state != SS_RUNNING)
|
||||
return
|
||||
resumed = FALSE
|
||||
currentpart = SSAIR_PIPENETS
|
||||
|
||||
if(currentpart == SSAIR_PIPENETS || !resumed)
|
||||
@@ -167,7 +189,6 @@ SUBSYSTEM_DEF(air)
|
||||
return
|
||||
resumed = 0
|
||||
currentpart = SSAIR_ATMOSMACHINERY
|
||||
// This is only machinery like filters, mixers that don't interact with air
|
||||
if(currentpart == SSAIR_ATMOSMACHINERY)
|
||||
timer = TICK_USAGE_REAL
|
||||
process_atmos_machinery(resumed)
|
||||
@@ -184,34 +205,6 @@ SUBSYSTEM_DEF(air)
|
||||
if(state != SS_RUNNING)
|
||||
return
|
||||
resumed = 0
|
||||
currentpart = SSAIR_FINALIZE_TURFS
|
||||
// This literally just waits for the turf processing thread to finish, doesn't do anything else.
|
||||
// this is necessary cause the next step after this interacts with the air--we get consistency
|
||||
// issues if we don't wait for it, disappearing gases etc.
|
||||
if(currentpart == SSAIR_FINALIZE_TURFS)
|
||||
finish_turf_processing(resumed)
|
||||
if(state != SS_RUNNING)
|
||||
cur_thread_wait_ticks++
|
||||
return
|
||||
resumed = 0
|
||||
thread_wait_ticks = MC_AVERAGE(thread_wait_ticks, cur_thread_wait_ticks)
|
||||
cur_thread_wait_ticks = 0
|
||||
currentpart = SSAIR_DEFERRED_AIRS
|
||||
if(currentpart == SSAIR_DEFERRED_AIRS)
|
||||
timer = TICK_USAGE_REAL
|
||||
process_deferred_airs(resumed)
|
||||
cost_deferred_airs = MC_AVERAGE(cost_deferred_airs, TICK_DELTA_TO_MS(TICK_USAGE_REAL - timer))
|
||||
if(state != SS_RUNNING)
|
||||
return
|
||||
resumed = 0
|
||||
currentpart = SSAIR_ATMOSMACHINERY_AIR
|
||||
if(currentpart == SSAIR_ATMOSMACHINERY_AIR)
|
||||
timer = TICK_USAGE_REAL
|
||||
process_atmos_air_machinery(resumed)
|
||||
cost_atmos_machinery = MC_AVERAGE(cost_atmos_machinery, TICK_DELTA_TO_MS(TICK_USAGE_REAL - timer))
|
||||
if(state != SS_RUNNING)
|
||||
return
|
||||
resumed = 0
|
||||
currentpart = SSAIR_HOTSPOTS
|
||||
|
||||
if(currentpart == SSAIR_HOTSPOTS)
|
||||
@@ -221,7 +214,7 @@ SUBSYSTEM_DEF(air)
|
||||
if(state != SS_RUNNING)
|
||||
return
|
||||
resumed = 0
|
||||
currentpart = heat_enabled ? SSAIR_TURF_CONDUCTION : SSAIR_ACTIVETURFS
|
||||
currentpart = heat_enabled ? SSAIR_TURF_CONDUCTION : SSAIR_REBUILD_PIPENETS
|
||||
// Heat -- slow and of questionable usefulness. Off by default for this reason. Pretty cool, though.
|
||||
if(currentpart == SSAIR_TURF_CONDUCTION)
|
||||
timer = TICK_USAGE_REAL
|
||||
@@ -231,48 +224,7 @@ SUBSYSTEM_DEF(air)
|
||||
if(state != SS_RUNNING)
|
||||
return
|
||||
resumed = 0
|
||||
currentpart = SSAIR_ACTIVETURFS
|
||||
// This simply starts the turf thread. It runs in the background until the FINALIZE_TURFS step, at which point it's waited for.
|
||||
// This also happens to do all the commented out stuff below, all in a single separate thread. This is mostly so that the
|
||||
// waiting is consistent.
|
||||
if(currentpart == SSAIR_ACTIVETURFS)
|
||||
run_delay_heuristics()
|
||||
timer = TICK_USAGE_REAL
|
||||
process_turfs(resumed)
|
||||
cost_turfs = MC_AVERAGE(cost_turfs, TICK_DELTA_TO_MS(TICK_USAGE_REAL - timer))
|
||||
if(state != SS_RUNNING)
|
||||
return
|
||||
resumed = 0
|
||||
/*
|
||||
// Monstermos and/or Putnamos--making large pressure deltas move faster
|
||||
if(currentpart == SSAIR_EQUALIZE)
|
||||
timer = TICK_USAGE_REAL
|
||||
process_turf_equalize(resumed)
|
||||
cost_equalize = MC_AVERAGE(cost_equalize, TICK_DELTA_TO_MS(TICK_USAGE_REAL - timer))
|
||||
if(state != SS_RUNNING)
|
||||
return
|
||||
resumed = 0
|
||||
currentpart = SSAIR_EXCITEDGROUPS
|
||||
// Making small pressure deltas equalize immediately so they don't process anymore
|
||||
if(currentpart == SSAIR_EXCITEDGROUPS)
|
||||
timer = TICK_USAGE_REAL
|
||||
process_excited_groups(resumed)
|
||||
cost_groups = MC_AVERAGE(cost_groups, TICK_DELTA_TO_MS(TICK_USAGE_REAL - timer))
|
||||
if(state != SS_RUNNING)
|
||||
return
|
||||
resumed = 0
|
||||
currentpart = SSAIR_TURF_POST_PROCESS
|
||||
// Quick multithreaded "should we display/react?" checks followed by finishing those up before the next step
|
||||
if(currentpart == SSAIR_TURF_POST_PROCESS)
|
||||
timer = TICK_USAGE_REAL
|
||||
post_process_turfs(resumed)
|
||||
cost_post_process = MC_AVERAGE(cost_post_process, TICK_DELTA_TO_MS(TICK_USAGE_REAL - timer))
|
||||
if(state != SS_RUNNING)
|
||||
return
|
||||
resumed = 0
|
||||
currentpart = SSAIR_HOTSPOTS
|
||||
*/
|
||||
currentpart = SSAIR_REBUILD_PIPENETS
|
||||
currentpart = SSAIR_REBUILD_PIPENETS
|
||||
|
||||
/datum/controller/subsystem/air/proc/process_pipenets(resumed = 0)
|
||||
if (!resumed)
|
||||
@@ -293,32 +245,6 @@ SUBSYSTEM_DEF(air)
|
||||
if(istype(atmos_machine, /obj/machinery/atmospherics))
|
||||
pipenets_needing_rebuilt += atmos_machine
|
||||
|
||||
/datum/controller/subsystem/air/proc/process_deferred_airs(resumed = 0)
|
||||
cur_deferred_airs = deferred_airs.len
|
||||
max_deferred_airs = max(cur_deferred_airs,max_deferred_airs)
|
||||
while(deferred_airs.len)
|
||||
var/list/cur_op = deferred_airs[deferred_airs.len]
|
||||
deferred_airs.len--
|
||||
var/datum/gas_mixture/air1
|
||||
var/datum/gas_mixture/air2
|
||||
if(isopenturf(cur_op[1]))
|
||||
var/turf/open/T = cur_op[1]
|
||||
air1 = T.return_air()
|
||||
else
|
||||
air1 = cur_op[1]
|
||||
if(isopenturf(cur_op[2]))
|
||||
var/turf/open/T = cur_op[2]
|
||||
air2 = T.return_air()
|
||||
else
|
||||
air2 = cur_op[2]
|
||||
if(istype(cur_op[3], /datum/callback))
|
||||
var/datum/callback/cb = cur_op[3]
|
||||
cb.Invoke(air1, air2)
|
||||
else
|
||||
air1.transfer_ratio_to(air2, cur_op[3])
|
||||
if(MC_TICK_CHECK)
|
||||
return
|
||||
|
||||
/datum/controller/subsystem/air/proc/process_atmos_machinery(resumed = 0)
|
||||
var/seconds = wait * 0.1
|
||||
if (!resumed)
|
||||
@@ -333,22 +259,6 @@ SUBSYSTEM_DEF(air)
|
||||
if(MC_TICK_CHECK)
|
||||
return
|
||||
|
||||
/datum/controller/subsystem/air/proc/process_atmos_air_machinery(resumed = 0)
|
||||
var/seconds = wait * 0.1
|
||||
if (!resumed)
|
||||
src.currentrun = atmos_air_machinery.Copy()
|
||||
//cache for sanic speed (lists are references anyways)
|
||||
var/list/currentrun = src.currentrun
|
||||
while(currentrun.len)
|
||||
var/obj/machinery/M = currentrun[currentrun.len]
|
||||
currentrun.len--
|
||||
if(!M || (M.process_atmos(seconds) == PROCESS_KILL))
|
||||
atmos_air_machinery.Remove(M)
|
||||
if(MC_TICK_CHECK)
|
||||
return
|
||||
|
||||
/datum/controller/subsystem/air/proc/process_turf_heat()
|
||||
|
||||
/datum/controller/subsystem/air/proc/process_hotspots(resumed = 0)
|
||||
if (!resumed)
|
||||
src.currentrun = hotspots.Copy()
|
||||
@@ -376,78 +286,31 @@ SUBSYSTEM_DEF(air)
|
||||
return
|
||||
|
||||
/datum/controller/subsystem/air/proc/process_turf_equalize(resumed = 0)
|
||||
if(process_turf_equalize_auxtools(resumed,TICK_REMAINING_MS))
|
||||
if(process_turf_equalize_auxtools(TICK_REMAINING_MS))
|
||||
pause()
|
||||
/*
|
||||
//cache for sanic speed
|
||||
var/fire_count = times_fired
|
||||
if (!resumed)
|
||||
src.currentrun = active_turfs.Copy()
|
||||
//cache for sanic speed (lists are references anyways)
|
||||
var/list/currentrun = src.currentrun
|
||||
while(currentrun.len)
|
||||
var/turf/open/T = currentrun[currentrun.len]
|
||||
currentrun.len--
|
||||
if (T)
|
||||
T.equalize_pressure_in_zone(fire_count)
|
||||
//equalize_pressure_in_zone(T, fire_count)
|
||||
if (MC_TICK_CHECK)
|
||||
return
|
||||
*/
|
||||
|
||||
/datum/controller/subsystem/air/proc/run_delay_heuristics()
|
||||
if(should_do_equalization)
|
||||
if(!equalize_enabled)
|
||||
cost_equalize = 0
|
||||
if(should_do_equalization)
|
||||
eq_cooldown--
|
||||
if(eq_cooldown <= 0)
|
||||
equalize_enabled = TRUE
|
||||
else
|
||||
equalize_enabled = FALSE
|
||||
var/total_thread_time = cost_turfs + cost_equalize + cost_groups + cost_post_process
|
||||
if(total_thread_time)
|
||||
var/wait_ms = wait * 100
|
||||
var/delay_threshold = 1-(total_thread_time/wait_ms + cur_deferred_airs / 50)
|
||||
share_max_steps = max(1,round(share_max_steps_target * delay_threshold, 1))
|
||||
eq_cooldown += (1-delay_threshold) * (cost_equalize / total_thread_time) * 2
|
||||
if(eq_cooldown > 0.5)
|
||||
equalize_enabled = FALSE
|
||||
excited_group_pressure_goal = max(0,excited_group_pressure_goal_target * delay_threshold)
|
||||
|
||||
|
||||
/datum/controller/subsystem/air/proc/process_turfs(resumed = 0)
|
||||
if(process_turfs_auxtools(resumed,TICK_REMAINING_MS))
|
||||
if(process_turfs_auxtools(TICK_REMAINING_MS))
|
||||
pause()
|
||||
/*
|
||||
//cache for sanic speed
|
||||
var/fire_count = times_fired
|
||||
if (!resumed)
|
||||
src.currentrun = active_turfs.Copy()
|
||||
//cache for sanic speed (lists are references anyways)
|
||||
var/list/currentrun = src.currentrun
|
||||
while(currentrun.len)
|
||||
var/turf/open/T = currentrun[currentrun.len]
|
||||
currentrun.len--
|
||||
if (T)
|
||||
T.process_cell(fire_count)
|
||||
if (MC_TICK_CHECK)
|
||||
return
|
||||
*/
|
||||
|
||||
/datum/controller/subsystem/air/proc/process_excited_groups(resumed = 0)
|
||||
if(process_excited_groups_auxtools(resumed,TICK_REMAINING_MS))
|
||||
if(process_excited_groups_auxtools(TICK_REMAINING_MS))
|
||||
pause()
|
||||
|
||||
/datum/controller/subsystem/air/proc/finish_turf_processing(resumed = 0)
|
||||
if(finish_turf_processing_auxtools(TICK_REMAINING_MS) || thread_running())
|
||||
if(finish_turf_processing_auxtools(TICK_REMAINING_MS))
|
||||
pause()
|
||||
|
||||
/datum/controller/subsystem/air/proc/equalize_turfs(resumed = 0)
|
||||
if(equalize_turfs_auxtools(TICK_REMAINING_MS))
|
||||
pause()
|
||||
|
||||
/datum/controller/subsystem/air/proc/post_process_turfs(resumed = 0)
|
||||
if(post_process_turfs_auxtools(resumed,TICK_REMAINING_MS))
|
||||
if(post_process_turfs_auxtools(TICK_REMAINING_MS))
|
||||
pause()
|
||||
|
||||
/datum/controller/subsystem/air/proc/finish_turf_processing_auxtools()
|
||||
/datum/controller/subsystem/air/proc/equalize_turfs_auxtools()
|
||||
/datum/controller/subsystem/air/proc/process_turfs_auxtools()
|
||||
/datum/controller/subsystem/air/proc/post_process_turfs_auxtools()
|
||||
/datum/controller/subsystem/air/proc/process_turf_equalize_auxtools()
|
||||
@@ -456,6 +319,7 @@ SUBSYSTEM_DEF(air)
|
||||
/datum/controller/subsystem/air/proc/get_max_gas_mixes()
|
||||
/datum/controller/subsystem/air/proc/turf_process_time()
|
||||
/datum/controller/subsystem/air/proc/heat_process_time()
|
||||
/datum/controller/subsystem/air/proc/process_turf_heat()
|
||||
|
||||
/datum/controller/subsystem/air/StartLoadingMap()
|
||||
map_loading = TRUE
|
||||
@@ -478,7 +342,7 @@ SUBSYSTEM_DEF(air)
|
||||
CHECK_TICK
|
||||
|
||||
/datum/controller/subsystem/air/proc/setup_atmos_machinery()
|
||||
for (var/obj/machinery/atmospherics/AM in atmos_machinery + atmos_air_machinery)
|
||||
for (var/obj/machinery/atmospherics/AM in atmos_machinery)
|
||||
AM.atmosinit()
|
||||
CHECK_TICK
|
||||
|
||||
@@ -486,7 +350,7 @@ SUBSYSTEM_DEF(air)
|
||||
// all atmos machinery has to initalize before the first
|
||||
// pipenet can be built.
|
||||
/datum/controller/subsystem/air/proc/setup_pipenets()
|
||||
for (var/obj/machinery/atmospherics/AM in atmos_machinery + atmos_air_machinery)
|
||||
for (var/obj/machinery/atmospherics/AM in atmos_machinery)
|
||||
AM.build_network()
|
||||
CHECK_TICK
|
||||
|
||||
|
||||
@@ -37,7 +37,7 @@
|
||||
to_chat(M, "<span class='notice'>You start dumping out tier/cell rating [lowest_rating] parts from [parent].</span>")
|
||||
var/turf/T = get_turf(A)
|
||||
var/datum/progressbar/progress = new(M, length(things), T)
|
||||
while (do_after(M, 10, TRUE, T, FALSE, CALLBACK(src, .proc/mass_remove_from_storage, T, things, progress, TRUE, M)))
|
||||
while (do_after(M, 1 SECONDS, T, NONE, FALSE, CALLBACK(src, .proc/mass_remove_from_storage, T, things, progress, TRUE, M)))
|
||||
stoplag(1)
|
||||
progress.end_progress()
|
||||
A.do_squish(0.8, 1.2)
|
||||
@@ -81,7 +81,7 @@
|
||||
to_chat(M, "<span class='notice'>You start dumping out tier/cell rating [lowest_rating] parts from [parent].</span>")
|
||||
var/turf/T = get_turf(A)
|
||||
var/datum/progressbar/progress = new(M, length(things), T)
|
||||
while (do_after(M, 10, TRUE, T, FALSE, CALLBACK(src, .proc/mass_remove_from_storage, T, things, progress, TRUE, M)))
|
||||
while (do_after(M, 10, T, NONE, FALSE, CALLBACK(src, .proc/mass_remove_from_storage, T, things, progress, TRUE, M)))
|
||||
stoplag(1)
|
||||
progress.end_progress()
|
||||
A.do_squish(0.8, 1.2)
|
||||
|
||||
@@ -213,7 +213,7 @@
|
||||
return
|
||||
var/datum/progressbar/progress = new(M, len, I.loc)
|
||||
var/list/rejections = list()
|
||||
while(do_after(M, 10, TRUE, parent, FALSE, CALLBACK(src, .proc/handle_mass_pickup, things, I.loc, rejections, progress)))
|
||||
while(do_after(M, 1 SECONDS, parent, NONE, FALSE, CALLBACK(src, .proc/handle_mass_pickup, things, I.loc, rejections, progress)))
|
||||
stoplag(1)
|
||||
progress.end_progress()
|
||||
to_chat(M, "<span class='notice'>You put everything you could [insert_preposition] [parent].</span>")
|
||||
@@ -271,7 +271,7 @@
|
||||
var/turf/T = get_turf(A)
|
||||
var/list/things = contents()
|
||||
var/datum/progressbar/progress = new(M, length(things), T)
|
||||
while (do_after(M, 10, TRUE, T, FALSE, CALLBACK(src, .proc/mass_remove_from_storage, T, things, progress, TRUE, M)))
|
||||
while(do_after(M, 1 SECONDS, T, NONE, FALSE, CALLBACK(src, .proc/mass_remove_from_storage, T, things, progress, TRUE, M)))
|
||||
stoplag(1)
|
||||
progress.end_progress()
|
||||
A.do_squish(0.8, 1.2)
|
||||
@@ -438,7 +438,7 @@
|
||||
if(isrevenant(M))
|
||||
INVOKE_ASYNC(GLOBAL_PROC, .proc/RevenantThrow, over_object, M, source)
|
||||
return
|
||||
if(check_locked(null, M) || !M.CanReach(A) || (!M.CanReach(over_object) && !istype(over_object, /atom/movable/screen)))
|
||||
if(check_locked(null, M) || !M.CanReach(A))
|
||||
return
|
||||
playsound(A, "rustle", 50, TRUE, -5)
|
||||
A.do_jiggle()
|
||||
@@ -674,7 +674,7 @@
|
||||
var/atom/A = parent
|
||||
update_actions()
|
||||
for(var/mob/M in range(1, A))
|
||||
if(M.active_storage == src)
|
||||
if(M.active_storage == src && (M != user))
|
||||
close(M)
|
||||
|
||||
/datum/component/storage/proc/signal_take_obj(datum/source, atom/movable/AM, new_loc, force = FALSE)
|
||||
|
||||
@@ -98,7 +98,7 @@
|
||||
if(len_messages >= 3)
|
||||
msg_blind = "<span class='italic'>[search_texts[3]]</span>"
|
||||
user.visible_message("<span class='notice'>[user] [search_texts[1]] [source].</span>", msg_first_person, msg_blind)
|
||||
if(do_after(user, scavenge_time * speed_multi, TRUE, source, TRUE, CALLBACK(src, .proc/set_progress, source, world.time), resume_time = progress_done * speed_multi))
|
||||
if(do_after(user, scavenge_time * speed_multi, source, NONE, TRUE, CALLBACK(src, .proc/set_progress, source, world.time), resume_time = progress_done * speed_multi))
|
||||
spawn_loot(source, user)
|
||||
players_busy_scavenging -= user
|
||||
|
||||
|
||||
@@ -295,7 +295,7 @@
|
||||
if(istype(gloves))
|
||||
strip_mod = gloves.strip_mod
|
||||
|
||||
if (!do_mob(user, source, (strip_delay || item.strip_delay) / strip_mod, ignorehelditem = TRUE))
|
||||
if (!do_mob(user, source, (strip_delay || item.strip_delay) / strip_mod, timed_action_flags = IGNORE_HELD_ITEM))
|
||||
return FALSE
|
||||
|
||||
return TRUE
|
||||
|
||||
@@ -37,6 +37,8 @@
|
||||
else if(!originmastercommit)
|
||||
msg += "No commit information"
|
||||
|
||||
msg += "Running rust-g version [rustg_get_version()]"
|
||||
|
||||
return msg.Join("\n")
|
||||
|
||||
/datum/getrev/proc/GetTestMergeInfo(header = TRUE)
|
||||
|
||||
@@ -18,7 +18,7 @@ GLOBAL_LIST_INIT_TYPED(screentip_context_icons, /image, prepare_screentip_contex
|
||||
* - allow_image = boolean (not required)
|
||||
*/
|
||||
/proc/build_context(list/context, key, allow_image)
|
||||
if(!(length(context) && length(context[key]) && key))
|
||||
if(!length(context) || !length(context[key]) || !key)
|
||||
return ""
|
||||
var/list/to_add
|
||||
for(var/intent in context[key])
|
||||
|
||||
@@ -32,11 +32,17 @@
|
||||
if(!cached_map)
|
||||
return
|
||||
|
||||
discover_port_offset()
|
||||
//SPLURT EDIT
|
||||
var/offset = discover_offset(/obj/docking_port/mobile)
|
||||
|
||||
port_x_offset = offset[1]
|
||||
port_y_offset = offset[2]
|
||||
//SPLURT EDIT END
|
||||
|
||||
if(!cached_map)
|
||||
cached_map = null
|
||||
|
||||
/* SPLURT EDIT - Refractored in modular
|
||||
/datum/map_template/shuttle/proc/discover_port_offset()
|
||||
var/key
|
||||
var/list/models = cached_map.grid_models
|
||||
@@ -56,6 +62,7 @@
|
||||
return
|
||||
++xcrd
|
||||
--ycrd
|
||||
*/
|
||||
|
||||
/datum/map_template/shuttle/load(turf/T, centered = FALSE, orientation = SOUTH, annihilate = default_annihilate, force_cache = FALSE, rotate_placement_to_orientation = FALSE, register = TRUE)
|
||||
. = ..()
|
||||
|
||||
@@ -977,7 +977,7 @@
|
||||
if(usr != owner)
|
||||
return
|
||||
to_chat(owner, "<span class='notice'>You attempt to remove the durathread strand from around your neck.</span>")
|
||||
if(do_after(owner, 35, null, owner))
|
||||
if(do_after(owner, 3.5 SECONDS, owner))
|
||||
if(isliving(owner))
|
||||
var/mob/living/L = owner
|
||||
to_chat(owner, "<span class='notice'>You successfully remove the durathread strand.</span>")
|
||||
|
||||
@@ -27,7 +27,7 @@
|
||||
|
||||
/datum/status_effect/freon/proc/owner_resist()
|
||||
to_chat(owner, "You start breaking out of the ice cube!")
|
||||
if(do_mob(owner, owner, 40))
|
||||
if(do_mob(owner, owner, 4 SECONDS))
|
||||
if(!QDELETED(src))
|
||||
to_chat(owner, "You break out of the ice cube!")
|
||||
owner.remove_status_effect(/datum/status_effect/freon)
|
||||
|
||||
+1
-1
@@ -924,7 +924,7 @@
|
||||
if(STR == src_object)
|
||||
progress.end_progress()
|
||||
return
|
||||
while (do_after(user, 10, TRUE, src, FALSE, CALLBACK(STR, /datum/component/storage.proc/handle_mass_item_insertion, things, src_object, user, progress)))
|
||||
while(do_after(user, 1 SECONDS, src, NONE, FALSE, CALLBACK(STR, /datum/component/storage.proc/handle_mass_item_insertion, things, src_object, user, progress)))
|
||||
stoplag(1)
|
||||
progress.end_progress()
|
||||
to_chat(user, "<span class='notice'>You dump as much of [src_object.parent]'s contents into [STR.insert_preposition]to [src] as you can.</span>")
|
||||
|
||||
@@ -73,11 +73,11 @@
|
||||
|
||||
/obj/machinery/air_sensor/Initialize(mapload)
|
||||
. = ..()
|
||||
SSair.atmos_air_machinery += src
|
||||
SSair.atmos_machinery += src
|
||||
set_frequency(frequency)
|
||||
|
||||
/obj/machinery/air_sensor/Destroy()
|
||||
SSair.atmos_air_machinery -= src
|
||||
SSair.atmos_machinery -= src
|
||||
SSradio.remove_object(src, frequency)
|
||||
return ..()
|
||||
|
||||
|
||||
@@ -440,9 +440,10 @@ GLOBAL_LIST_EMPTY(cryopod_computers)
|
||||
else
|
||||
if(ishuman(mob_occupant))
|
||||
var/mob/living/carbon/human/H = mob_occupant
|
||||
var/mob/living/carbon/human/H_original_caharcter = H.mind.original_character.resolve()
|
||||
if(H.mind && H.client && H.client.prefs && H == H_original_caharcter)
|
||||
H.SaveTCGCards()
|
||||
if(H.mind && H.client && H.client.prefs)
|
||||
var/mob/living/carbon/human/H_original_character = H.mind.original_character?.resolve()
|
||||
if(H_original_character && H == H_original_character)
|
||||
H.SaveTCGCards()
|
||||
|
||||
var/list/gear = list()
|
||||
if(iscarbon(mob_occupant)) // sorry simp-le-mobs deserve no mercy
|
||||
|
||||
@@ -191,7 +191,7 @@
|
||||
if(is_holding_pressure())
|
||||
// tell the user that this is a bad idea, and have a do_after as well
|
||||
to_chat(user, "<span class='warning'>As you begin crowbarring \the [src] a gush of air blows in your face... maybe you should reconsider?</span>")
|
||||
if(!do_after(user, 15, TRUE, src)) // give them a few seconds to reconsider their decision.
|
||||
if(!do_after(user, 1.5 SECONDS, src)) // give them a few seconds to reconsider their decision.
|
||||
return
|
||||
log_game("[key_name_admin(user)] has opened a firelock with a pressure difference at [AREACOORD(loc)]") // there bibby I made it logged just for you. Enjoy.
|
||||
// since we have high-pressure-ness, close all other firedoors on the tile
|
||||
|
||||
@@ -222,7 +222,7 @@
|
||||
usr.visible_message("<span class='notice'>[usr] switches [on ? "on" : "off"] \the [src].</span>", "<span class='notice'>You switch [on ? "on" : "off"] \the [src].</span>")
|
||||
update_icon()
|
||||
if (on)
|
||||
SSair.atmos_air_machinery += src
|
||||
SSair.atmos_machinery += src
|
||||
. = TRUE
|
||||
if("mode")
|
||||
setMode = params["mode"]
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
. = ..()
|
||||
if(stored)
|
||||
to_chat(user, "<span class='notice'>You start struggling to pry the [stored] from the [src]...</span>")
|
||||
if(!do_after(user, 30 SECONDS, TRUE, src))
|
||||
if(!do_after(user, 30 SECONDS, 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
|
||||
user.put_in_hands(stored)
|
||||
@@ -83,7 +83,6 @@
|
||||
use_power = IDLE_POWER_USE
|
||||
idle_power_usage = 10
|
||||
active_power_usage = 100
|
||||
// SKYRAT EDIT: Adds a circuit for the message server.
|
||||
circuit = /obj/item/circuitboard/machine/telecomms/message_server
|
||||
|
||||
id = "Messaging Server"
|
||||
|
||||
@@ -112,7 +112,7 @@
|
||||
var/new_appearance = show_radial_menu(user, src, possible_appearances, custom_check = CALLBACK(src, .proc/check_menu, user, crayon), radius = 36, require_near = TRUE)
|
||||
if(!new_appearance)
|
||||
return
|
||||
if(!do_after(user, 10, FALSE, src, TRUE))
|
||||
if(!do_after(user, 1 SECONDS, src, timed_action_flags = IGNORE_HELD_ITEM))
|
||||
return FALSE
|
||||
if(!check_menu(user, crayon))
|
||||
return FALSE
|
||||
|
||||
@@ -447,7 +447,7 @@
|
||||
M.visible_message("<span class='danger'>[user] hastily places [src] on [M]'s chest!</span>", \
|
||||
"<span class='userdanger'>[user] hastily places [src] on [M]'s chest!</span>")
|
||||
busy = TRUE
|
||||
if(do_after(user, isnull(defib?.disarm_shock_time)? disarm_shock_time : defib.disarm_shock_time, target = M))
|
||||
if(do_after(user, isnull(defib?.disarm_shock_time)? disarm_shock_time : defib.disarm_shock_time, M))
|
||||
M.visible_message("<span class='danger'>[user] zaps [M] with [src]!</span>", \
|
||||
"<span class='userdanger'>[user] zaps [M] with [src]!</span>")
|
||||
M.DefaultCombatKnockdown(140)
|
||||
@@ -477,7 +477,7 @@
|
||||
"<span class='warning'>You overcharge the paddles and begin to place them onto [H]'s chest...</span>")
|
||||
busy = TRUE
|
||||
update_icon()
|
||||
if(do_after(user, 30, target = H))
|
||||
if(do_after(user, 3 SECONDS, H))
|
||||
user.visible_message("<span class='notice'>[user] places [src] on [H]'s chest.</span>",
|
||||
"<span class='warning'>You place [src] on [H]'s chest and begin to charge them.</span>")
|
||||
var/turf/T = get_turf(defib)
|
||||
@@ -486,7 +486,7 @@
|
||||
T.audible_message("<span class='warning'>\The [defib] lets out an urgent beep and lets out a steadily rising hum...</span>")
|
||||
else
|
||||
user.audible_message("<span class='warning'>[src] let out an urgent beep.</span>")
|
||||
if(do_after(user, 30, target = H)) //Takes longer due to overcharging
|
||||
if(do_after(user, 3 SECONDS, H)) //Takes longer due to overcharging
|
||||
if(!H)
|
||||
busy = FALSE
|
||||
update_icon()
|
||||
@@ -542,7 +542,7 @@
|
||||
primetimer2 = 20
|
||||
deathtimer = DEFIB_TIME_LOSS * 10
|
||||
|
||||
if(do_after(user, primetimer, target = H)) //beginning to place the paddles on patient's chest to allow some time for people to move away to stop the process
|
||||
if(do_after(user, primetimer, H)) //beginning to place the paddles on patient's chest to allow some time for people to move away to stop the process
|
||||
user.visible_message("<span class='notice'>[user] places [src] on [H]'s chest.</span>", "<span class='warning'>You place [src] on [H]'s chest.</span>")
|
||||
playsound(src, 'sound/machines/defib_charge.ogg', 75, 0)
|
||||
// patients rot when they are killed, and die when they are dead
|
||||
@@ -551,7 +551,7 @@
|
||||
var/total_burn = 0
|
||||
var/total_brute = 0
|
||||
var/obj/item/organ/heart = H.getorgan(/obj/item/organ/heart)
|
||||
if(do_after(user, primetimer2, target = H)) //placed on chest and short delay to shock for dramatic effect, revive time is 5sec total
|
||||
if(do_after(user, primetimer2, H)) //placed on chest and short delay to shock for dramatic effect, revive time is 5sec total
|
||||
for(var/obj/item/carried_item in H.contents)
|
||||
if(istype(carried_item, /obj/item/clothing/suit/space))
|
||||
if((!combat && !req_defib) || (req_defib && !defib.combat))
|
||||
|
||||
@@ -100,7 +100,7 @@
|
||||
voracious = FALSE
|
||||
|
||||
user.visible_message("<span class='warning'>[hound.name] is carefully inserting [target.name] into their [src.name].</span>", "<span class='notice'>You start placing [target] into your [src.name]...</span>")
|
||||
if(do_after (user, 100, target = target) && !target.buckled && !target.anchored && !patient)
|
||||
if(do_after(user, 10 SECONDS, target) && !target.buckled && !target.anchored && !patient)
|
||||
if(!in_range(src, target)) //Proximity is probably old news by now, do a new check.
|
||||
return //If they moved away, you can't eat them.
|
||||
|
||||
@@ -147,7 +147,7 @@
|
||||
"<span class='notice'>[voracious ? "You start struggling inside of [src.name]'s tight, flexible confines," : "You start pounding against the metallic walls of [src.name],"] managing to trigger a hidden emergency release... (this will take about [DisplayTimeText(breakout_time)].)</span>", \
|
||||
"<span class='italics'>You hear a [voracious ? "couple of thumps" : "loud banging noise"] coming from within [hound].</span>")
|
||||
escape_pending = TRUE
|
||||
if(do_after(user, breakout_time, target = src))
|
||||
if(do_after(user, breakout_time, src, IGNORE_TARGET_LOC_CHANGE|IGNORE_HELD_ITEM))
|
||||
user.visible_message("<span class='warning'>[user] successfully broke out of [hound.name]!</span>", \
|
||||
"<span class='notice'>You successfully break out of [hound.name]!</span>")
|
||||
go_out(user, hound)
|
||||
@@ -499,7 +499,7 @@
|
||||
voracious = FALSE
|
||||
|
||||
user.visible_message("<span class='warning'>[hound.name] is ingesting [target] into their [src.name].</span>", "<span class='notice'>You start ingesting [target] into your [src.name]...</span>")
|
||||
if(do_after(user, 30, target = target) && !patient && !target.buckled)
|
||||
if(do_after(user, 3 SECONDS, target) && !patient && !target.buckled)
|
||||
|
||||
//if(patient)
|
||||
//to_chat(user,"<span class='warning'>Your [src.name] is already occupied.</span>")
|
||||
|
||||
@@ -62,7 +62,7 @@
|
||||
shaking = TRUE
|
||||
|
||||
start_shaking(user)
|
||||
if(do_after(user, shake_time, needhand=TRUE, target=user, progress=TRUE))
|
||||
if(do_after(user, shake_time))
|
||||
var/answer = get_answer()
|
||||
say(answer)
|
||||
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
|
||||
/obj/item/book/granter/proc/turn_page(mob/user)
|
||||
playsound(user, pick('sound/effects/pageturn1.ogg','sound/effects/pageturn2.ogg','sound/effects/pageturn3.ogg'), 30, 1)
|
||||
if(do_after(user,50, TRUE, user))
|
||||
if(do_after(user, 5 SECONDS, src))
|
||||
if(remarks.len)
|
||||
to_chat(user, "<span class='notice'>[pick(remarks)]</span>")
|
||||
else
|
||||
@@ -53,7 +53,7 @@
|
||||
on_reading_stopped()
|
||||
reading = FALSE
|
||||
return
|
||||
if(do_after(user,50, TRUE, user))
|
||||
if(do_after(user, 5 SECONDS, src))
|
||||
on_reading_finished(user)
|
||||
reading = FALSE
|
||||
return TRUE
|
||||
|
||||
@@ -139,7 +139,7 @@
|
||||
|
||||
/obj/item/restraints/handcuffs/cable/attack_self(mob/user)
|
||||
to_chat(user, "<span class='notice'>You start unwinding the cable restraints back into coil</span>")
|
||||
if(!do_after(user, 25, TRUE, user))
|
||||
if(!do_after(user, 25, user))
|
||||
return
|
||||
qdel(src)
|
||||
var/obj/item/stack/cable_coil/coil = new(get_turf(user))
|
||||
|
||||
@@ -244,7 +244,7 @@
|
||||
if(staffcooldown + staffwait > world.time)
|
||||
return
|
||||
user.visible_message("[user] chants deeply and waves [user.p_their()] staff!")
|
||||
if(do_after(user, 20,1,src))
|
||||
if(do_after(user, 2 SECONDS, src))
|
||||
target.add_atom_colour(conversion_color, WASHABLE_COLOUR_PRIORITY) //wololo
|
||||
staffcooldown = world.time
|
||||
|
||||
|
||||
@@ -309,7 +309,7 @@ GLOBAL_LIST_INIT(wood_recipes, list ( \
|
||||
"<span class='notice'>You begin whittling [src] into a sharp point at one end.</span>", \
|
||||
"<span class='italics'>You hear wood carving.</span>")
|
||||
// 8 Second Timer
|
||||
if(!do_after(user, 80, TRUE, src))
|
||||
if(!do_after(user, 8 SECONDS, src))
|
||||
return
|
||||
// Make Stake
|
||||
var/obj/item/stake/basic/new_item = new(user.loc)
|
||||
|
||||
@@ -164,7 +164,7 @@
|
||||
var/man = C == user ? "your" : "[C]'\s"
|
||||
user.visible_message("<span class='notice'>[user] attempts to remove the durathread strand from around [man] neck.</span>", \
|
||||
"<span class='notice'>You attempt to remove the durathread strand from around [man] neck.</span>")
|
||||
if(do_after(user, 15, null, C))
|
||||
if(do_after(user, 1.5 SECONDS, C))
|
||||
user.visible_message("<span class='notice'>[user] succesfuly removes the durathread strand.</span>",
|
||||
"<span class='notice'>You succesfuly remove the durathread strand.</span>")
|
||||
C.remove_status_effect(STATUS_EFFECT_CHOKINGSTRAND)
|
||||
|
||||
@@ -468,7 +468,7 @@
|
||||
user.visible_message("<span class='warning'>[src] begins to shake violently!</span>", \
|
||||
"<span class='notice'>You lean on the back of [src] and start pushing the door open... (this will take about [DisplayTimeText(breakout_time)].)</span>", \
|
||||
"<span class='hear'>You hear banging from [src].</span>")
|
||||
if(do_after(user,(breakout_time), target = src, required_mobility_flags = MOBILITY_RESIST))
|
||||
if(do_after(user, breakout_time, src, IGNORE_TARGET_LOC_CHANGE|IGNORE_HELD_ITEM))
|
||||
if(!user || user.stat != CONSCIOUS || user.loc != src || opened || (!locked && !welded) )
|
||||
return
|
||||
//we check after a while whether there is a point of resisting anymore and whether the user is capable of resisting
|
||||
|
||||
@@ -48,7 +48,7 @@
|
||||
GM.visible_message("<span class='danger'>[user] starts to give [GM] a swirlie!</span>", "<span class='userdanger'>[user] starts to give you a swirlie...</span>")
|
||||
swirlie = GM
|
||||
var/was_alive = (swirlie.stat != DEAD)
|
||||
if(do_after(user, 3 SECONDS, target = src))
|
||||
if(do_after(user, 3 SECONDS, src))
|
||||
GM.visible_message("<span class='danger'>[user] gives [GM] a swirlie!</span>", "<span class='userdanger'>[user] gives you a swirlie!</span>", "<span class='hear'>You hear a toilet flushing.</span>")
|
||||
if(iscarbon(GM))
|
||||
var/mob/living/carbon/C = GM
|
||||
@@ -535,7 +535,7 @@
|
||||
"<span class='notice'>You start washing your [washing_face ? "face" : "hands"]...</span>")
|
||||
busy = TRUE
|
||||
|
||||
if(!do_after(user, 40, target = src))
|
||||
if(!do_after(user, 4 SECONDS, src))
|
||||
busy = FALSE
|
||||
return
|
||||
|
||||
@@ -617,7 +617,7 @@
|
||||
if(user.a_intent != INTENT_HARM)
|
||||
to_chat(user, "<span class='notice'>You start washing [O]...</span>")
|
||||
busy = TRUE
|
||||
if(!do_after(user, 40, target = src))
|
||||
if(!do_after(user, 4 SECONDS, src))
|
||||
busy = FALSE
|
||||
return 1
|
||||
busy = FALSE
|
||||
|
||||
@@ -55,7 +55,7 @@
|
||||
. = ..()
|
||||
if(dropping == user && isliving(user))
|
||||
var/mob/living/L = user
|
||||
if(L.resting && do_after(L, max(10, L.getStaminaLoss()*0.5), 0, src))
|
||||
if(L.resting && do_after(L, max(10, L.getStaminaLoss()*0.5), src, IGNORE_HELD_ITEM))
|
||||
if(Adjacent(L, src))
|
||||
step(L, get_dir(L, src))
|
||||
playsound(L, "rustle", 25, 1)
|
||||
@@ -223,8 +223,6 @@
|
||||
air.copy_from_turf(src)
|
||||
update_air_ref(planetary_atmos ? 1 : 2)
|
||||
|
||||
update_visuals()
|
||||
|
||||
ImmediateCalculateAdjacentTurfs()
|
||||
|
||||
/turf/open/proc/GetHeatCapacity()
|
||||
|
||||
@@ -144,10 +144,6 @@
|
||||
/turf/open/floor/blob_act(obj/structure/blob/B)
|
||||
return
|
||||
|
||||
/turf/open/floor/update_icon()
|
||||
. = ..()
|
||||
update_visuals()
|
||||
|
||||
/turf/open/floor/attack_paw(mob/user)
|
||||
return attack_hand(user)
|
||||
|
||||
|
||||
@@ -127,10 +127,9 @@
|
||||
var/flags = NONE
|
||||
if(defer_change) // TODO: make the defer change var a var for any changeturf flag
|
||||
flags = CHANGETURF_DEFER_CHANGE
|
||||
var/turf/open/mined = ScrapeAway(null, flags)
|
||||
ScrapeAway(null, flags)
|
||||
addtimer(CALLBACK(src, .proc/AfterChange), 1, TIMER_UNIQUE)
|
||||
playsound(src, 'sound/effects/break_stone.ogg', 50, TRUE) //beautiful destruction
|
||||
mined.update_visuals()
|
||||
|
||||
/turf/closed/mineral/attack_animal(mob/living/simple_animal/user, list/modifiers)
|
||||
if((user.environment_smash & ENVIRONMENT_SMASH_WALLS) || (user.environment_smash & ENVIRONMENT_SMASH_RWALLS))
|
||||
|
||||
@@ -92,7 +92,7 @@
|
||||
if(!istype(I, /obj/item/pickaxe/drill/jackhammer))
|
||||
return FALSE
|
||||
to_chat(user, "<span class='notice'>You begin to smash though [src]...</span>")
|
||||
if(!do_after(user, 70, TRUE, src))
|
||||
if(!do_after(user, 7 SECONDS, src))
|
||||
return FALSE
|
||||
I.play_tool_sound(src)
|
||||
visible_message("<span class='warning'>[user] smashes through [src] with [I]!</span>", "<span class='italics'>You hear the grinding of metal.</span>")
|
||||
|
||||
@@ -388,7 +388,7 @@ GLOBAL_LIST_EMPTY(station_turfs)
|
||||
|
||||
var/list/things = src_object.contents()
|
||||
var/datum/progressbar/progress = new(user, things.len, src)
|
||||
while (do_after(usr, 1 SECONDS, TRUE, src, FALSE, CALLBACK(src_object, /datum/component/storage.proc/mass_remove_from_storage, src, things, progress, TRUE, user)))
|
||||
while (do_after(usr, 1 SECONDS, src, NONE, FALSE, CALLBACK(src_object, /datum/component/storage.proc/mass_remove_from_storage, src, things, progress, TRUE, user)))
|
||||
stoplag(1)
|
||||
progress.end_progress()
|
||||
|
||||
|
||||
@@ -279,6 +279,7 @@ GLOBAL_LIST(topic_status_cache)
|
||||
log_world("World hard rebooted at [TIME_STAMP("hh:mm:ss", FALSE)]")
|
||||
shutdown_logging() // See comment below.
|
||||
TgsEndProcess()
|
||||
return ..()
|
||||
|
||||
log_world("World rebooted at [TIME_STAMP("hh:mm:ss", FALSE)]")
|
||||
shutdown_logging() // Past this point, no logging procs can be used, at risk of data loss.
|
||||
|
||||
@@ -91,7 +91,8 @@ GLOBAL_PROTECT(admin_verbs_admin)
|
||||
/client/proc/revokediscordbypass, //SPLURT
|
||||
/client/proc/addvpnbypass, //SPLURT
|
||||
/client/proc/revokevpnbypass, //SPLURT
|
||||
/datum/admins/proc/open_borgopanel
|
||||
/datum/admins/proc/open_borgopanel,
|
||||
/datum/admins/proc/change_laws //change AI laws
|
||||
)
|
||||
GLOBAL_LIST_INIT(admin_verbs_ban, list(/client/proc/unban_panel, /client/proc/DB_ban_panel, /client/proc/stickybanpanel))
|
||||
GLOBAL_PROTECT(admin_verbs_ban)
|
||||
|
||||
@@ -214,3 +214,25 @@
|
||||
borg.lawsync()
|
||||
|
||||
. = TRUE
|
||||
|
||||
/datum/admins/proc/change_laws()
|
||||
set category = "Admin.Player Interaction"
|
||||
set name = "Change Silicon Laws"
|
||||
set desc = "Change Silicon Laws"
|
||||
|
||||
if(!check_rights(R_ADMIN))
|
||||
return
|
||||
var/chosensilicon = input("Select a Silicon", "Select a Silicon", null, null) as null|anything in GLOB.silicon_mobs
|
||||
if (!istype(chosensilicon, /mob/living/silicon))
|
||||
to_chat(usr, "<span class='warning'>Silicon is required for law changes</span>", confidential=TRUE)
|
||||
return
|
||||
var/chosen = pick_closest_path(null, make_types_fancy(typesof(/obj/item/aiModule)))
|
||||
if (!chosen)
|
||||
return
|
||||
var/new_board = new chosen(src)
|
||||
var/obj/item/aiModule/chosenboard = new_board
|
||||
var/mob/living/silicon/beepboop = chosensilicon
|
||||
chosenboard.install(beepboop.laws, usr)
|
||||
message_admins("[key_name_admin(usr)] added [chosenboard] to [ADMIN_LOOKUPFLW(beepboop)].")
|
||||
log_admin("[key_name(usr)] added [chosenboard] to [key_name(beepboop)].")
|
||||
qdel(new_board)
|
||||
|
||||
@@ -81,7 +81,7 @@
|
||||
// Make Attempt...
|
||||
to_chat(user, "<span class='notice'>You put all your weight into embedding the stake into [target]'s chest...</span>")
|
||||
playsound(user, 'sound/magic/Demon_consume.ogg', 50, 1)
|
||||
if(!do_mob(user, C, staketime, 0, 1, extra_checks=CALLBACK(C, /mob/living/carbon/proc/can_be_staked))) // user / target / time / uninterruptable / show progress bar / extra checks
|
||||
if(!do_mob(user, C, staketime, NONE, extra_checks=CALLBACK(C, /mob/living/carbon/proc/can_be_staked))) // user / target / time / uninterruptable / show progress bar / extra checks
|
||||
return
|
||||
// Drop & Embed Stake
|
||||
user.visible_message("<span class='danger'>[user.name] drives the [src] into [target]'s chest!</span>", \
|
||||
|
||||
@@ -146,7 +146,7 @@
|
||||
to_chat(user, "<span class='notice'>You lean quietly toward [target] and secretly draw out your fangs...</span>")
|
||||
else
|
||||
to_chat(user, "<span class='warning'>You pull [target] close to you and draw out your fangs...</span>")
|
||||
if(!do_mob(user, target, feed_time, 0, 1, extra_checks = CALLBACK(src, .proc/ContinueActive, user, target)))//sleep(10)
|
||||
if(!do_mob(user, target, feed_time, NONE, extra_checks = CALLBACK(src, .proc/ContinueActive, user, target)))//sleep(10)
|
||||
to_chat(user, "<span class='warning'>Your feeding was interrupted.</span>")
|
||||
//DeactivatePower(user,target)
|
||||
return
|
||||
@@ -207,7 +207,7 @@
|
||||
//user.mobility_flags &= ~MOBILITY_MOVE // user.canmove = 0 // Prevents spilling blood accidentally.
|
||||
|
||||
// Abort? A bloody mistake.
|
||||
if(!do_mob(user, target, 20, 0, 0, extra_checks=CALLBACK(src, .proc/ContinueActive, user, target)))
|
||||
if(!do_mob(user, target, 2 SECONDS, NONE, extra_checks=CALLBACK(src, .proc/ContinueActive, user, target)))
|
||||
// May have disabled Feed during do_mob
|
||||
if(!active || !ContinueActive(user, target))
|
||||
break
|
||||
|
||||
@@ -59,7 +59,7 @@
|
||||
target.reagents.add_reagent(/datum/reagent/medicine/salbutamol, 40) // So they don't choke to death while you interrogate them
|
||||
sleep(1800)
|
||||
SSblackbox.record_feedback("nested tally", "changeling_powers", 1, list("[name]", "[i]"))
|
||||
if(!do_mob(user, target, 20))
|
||||
if(!do_mob(user, target, 2 SECONDS))
|
||||
to_chat(user, "<span class='warning'>Our link with [target] has ended!</span>")
|
||||
changeling.islinking = 0
|
||||
target.mind.linglink = 0
|
||||
|
||||
@@ -43,7 +43,7 @@
|
||||
/obj/item/forbidden_book/proc/get_power_from_influence(atom/target, mob/user)
|
||||
var/obj/effect/reality_smash/RS = target
|
||||
to_chat(user, "<span class='danger'>You start drawing power from influence...</span>")
|
||||
if(do_after(user,10 SECONDS,TRUE,RS))
|
||||
if(do_after(user, 10 SECONDS, RS))
|
||||
qdel(RS)
|
||||
charge += 1
|
||||
|
||||
@@ -57,7 +57,7 @@
|
||||
var/A = get_turf(target)
|
||||
to_chat(user, "<span class='danger'>You start drawing a rune...</span>")
|
||||
|
||||
if(do_after(user,30 SECONDS,FALSE, user))
|
||||
if(do_after(user, 30 SECONDS, user))
|
||||
|
||||
new /obj/effect/eldritch/big(A)
|
||||
|
||||
@@ -65,7 +65,7 @@
|
||||
/obj/item/forbidden_book/proc/remove_rune(atom/target,mob/user)
|
||||
|
||||
to_chat(user, "<span class='danger'>You start removing a rune...</span>")
|
||||
if(do_after(user,2 SECONDS,FALSE, user))
|
||||
if(do_after(user, 2 SECONDS, user))
|
||||
qdel(target)
|
||||
|
||||
/obj/item/forbidden_book/ui_interact(mob/user, datum/tgui/ui = null)
|
||||
|
||||
@@ -958,7 +958,7 @@
|
||||
halo = halo || mutable_appearance('icons/effects/effects.dmi', "at_shield2", EFFECTS_LAYER)
|
||||
user.add_overlay(halo)
|
||||
playsound(get_turf(user), Snd, 50, 0)
|
||||
if(do_mob(user,user,50,1))
|
||||
if(do_mob(user, user, 5 SECONDS))
|
||||
user.cut_overlay(halo)
|
||||
user.emote("clap1")
|
||||
user.say("DOM'ENO ISPLETIMAS")
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user