Merge remote-tracking branch 'upstream/master' into psych+paramedic
This commit is contained in:
@@ -6,3 +6,6 @@ indent_size = 4
|
|||||||
[*.yml]
|
[*.yml]
|
||||||
indent_style = space
|
indent_style = space
|
||||||
indent_size = 2
|
indent_size = 2
|
||||||
|
|
||||||
|
[*.txt]
|
||||||
|
insert_final_newline = false
|
||||||
|
|||||||
@@ -0,0 +1,36 @@
|
|||||||
|
name: Autobuild TGUI
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- 'master'
|
||||||
|
paths:
|
||||||
|
- 'tgui-next/**.js'
|
||||||
|
- 'tgui-next/**.scss'
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
name: Rebuild TGUI
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v1
|
||||||
|
with:
|
||||||
|
fetch-depth: 25
|
||||||
|
- name: Setup Node
|
||||||
|
uses: actions/setup-node@v1
|
||||||
|
with:
|
||||||
|
node-version: '>=12.13'
|
||||||
|
- name: Build TGUI
|
||||||
|
run: bin/tgui --ci
|
||||||
|
working-directory: ./tgui-next
|
||||||
|
- name: Commit Artifacts
|
||||||
|
run: |
|
||||||
|
git config --local user.email "action@github.com"
|
||||||
|
git config --local user.name "TGUI"
|
||||||
|
git pull origin master
|
||||||
|
git commit -m "Automatic TGUI Rebuild [ci skip]" -a || true
|
||||||
|
- name: Push Artifacts
|
||||||
|
uses: ad-m/github-push-action@master
|
||||||
|
with:
|
||||||
|
github_token: ${{ secrets.GITHUB_MASTER_KEY }}
|
||||||
@@ -195,6 +195,7 @@ Temporary Items
|
|||||||
|
|
||||||
#Visual studio stuff
|
#Visual studio stuff
|
||||||
*.vscode/*
|
*.vscode/*
|
||||||
|
!/.vscode/extensions.json
|
||||||
tools/MapAtmosFixer/MapAtmosFixer/obj/*
|
tools/MapAtmosFixer/MapAtmosFixer/obj/*
|
||||||
tools/MapAtmosFixer/MapAtmosFixer/bin/*
|
tools/MapAtmosFixer/MapAtmosFixer/bin/*
|
||||||
|
|
||||||
|
|||||||
Vendored
+7
@@ -0,0 +1,7 @@
|
|||||||
|
{
|
||||||
|
"recommendations": [
|
||||||
|
"gbasood.byond-dm-language-support",
|
||||||
|
"platymuus.dm-langclient",
|
||||||
|
"EditorConfig.EditorConfig"
|
||||||
|
]
|
||||||
|
}
|
||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
FROM tgstation/byond:513.1490 as base
|
FROM tgstation/byond:513.1503 as base
|
||||||
|
|
||||||
FROM base as build_base
|
FROM base as build_base
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
|
## Citadel Station 13
|
||||||
##Citadel Station 13 <BR>
|
Based and maintained from /tg/station.
|
||||||
Based and maintained from /tg/station.<BR>
|
|
||||||
|
|
||||||
[](https://forthebadge.com) [](https://forthebadge.com) [](http://forthebadge.com)
|
[](https://forthebadge.com) [](https://forthebadge.com) [](http://forthebadge.com)
|
||||||
|
|
||||||
@@ -10,17 +9,18 @@ Based and maintained from /tg/station.<BR>
|
|||||||
|
|
||||||
[](http://isitmaintained.com/project/Citadel-Station-13/Citadel-Station-13 "Percentage of issues still open") [](http://isitmaintained.com/project/Citadel-Station-13/Citadel-Station-13 "Average time to resolve an issue")
|
[](http://isitmaintained.com/project/Citadel-Station-13/Citadel-Station-13 "Percentage of issues still open") [](http://isitmaintained.com/project/Citadel-Station-13/Citadel-Station-13 "Average time to resolve an issue")
|
||||||
|
|
||||||
**Upstream Information** <BR>
|
**Upstream Information**
|
||||||
**Website:** http://www.tgstation13.org <BR>
|
**Website:** https://tgstation13.org
|
||||||
**Code:** https://github.com/tgstation/tgstation <BR>
|
**Code:** https://github.com/tgstation/tgstation
|
||||||
**Wiki** http://tgstation13.org/wiki/Main_Page <BR>
|
**Wiki** https://tgstation13.org/wiki/Main_Page
|
||||||
**IRC:** irc://irc.rizon.net/coderbus or if you dont have an IRC client, you can click [here](https://kiwiirc.com/client/irc.rizon.net:6667/?&theme=cli#coderbus).<BR>
|
**IRC:** irc://irc.rizon.net/coderbus or if you dont have an IRC client, you can click [here](https://kiwiirc.com/client/irc.rizon.net:6667/?&theme=cli#coderbus).
|
||||||
|
|
||||||
**Citadel Station Information** <BR>
|
**Citadel Station Information**
|
||||||
**Forums:** http://citadel-station.net/forum/ <BR>
|
**Website:** http://citadel-station.net
|
||||||
**Ban Appeals:** http://citadel-station.net/forum/forumdisplay.php?fid=8 <BR>
|
**Forums:** http://citadel-station.net/forum
|
||||||
**Code:** https://github.com/Citadel-Station-13/Citadel-Station-13 <BR>
|
**Ban Appeals:** http://citadel-station.net/forum/forumdisplay.php?fid=8
|
||||||
**Discord:** [Here](https://discord.gg/E6SQuhz). <BR>
|
**Code:** https://github.com/Citadel-Station-13/Citadel-Station-13
|
||||||
|
**Discord:** [Here](https://discord.gg/E6SQuhz)
|
||||||
|
|
||||||
## DOWNLOADING
|
## DOWNLOADING
|
||||||
|
|
||||||
|
|||||||
@@ -18,6 +18,9 @@
|
|||||||
/obj/item/mining_scanner,
|
/obj/item/mining_scanner,
|
||||||
/obj/item/flashlight/lantern,
|
/obj/item/flashlight/lantern,
|
||||||
/obj/item/card/id/mining,
|
/obj/item/card/id/mining,
|
||||||
|
/obj/item/gps/mining{
|
||||||
|
tracking = 0
|
||||||
|
},
|
||||||
/turf/open/floor/plating,
|
/turf/open/floor/plating,
|
||||||
/area/ruin/powered/golem_ship)
|
/area/ruin/powered/golem_ship)
|
||||||
"d" = (
|
"d" = (
|
||||||
@@ -31,6 +34,9 @@
|
|||||||
/obj/item/mining_scanner,
|
/obj/item/mining_scanner,
|
||||||
/obj/item/flashlight/lantern,
|
/obj/item/flashlight/lantern,
|
||||||
/obj/item/card/id/mining,
|
/obj/item/card/id/mining,
|
||||||
|
/obj/item/gps/mining{
|
||||||
|
tracking = 0
|
||||||
|
},
|
||||||
/turf/open/floor/plating,
|
/turf/open/floor/plating,
|
||||||
/area/ruin/powered/golem_ship)
|
/area/ruin/powered/golem_ship)
|
||||||
"e" = (
|
"e" = (
|
||||||
@@ -150,6 +156,9 @@
|
|||||||
"x" = (
|
"x" = (
|
||||||
/obj/structure/table/wood,
|
/obj/structure/table/wood,
|
||||||
/obj/machinery/reagentgrinder,
|
/obj/machinery/reagentgrinder,
|
||||||
|
/obj/item/gps/mining{
|
||||||
|
tracking = 0
|
||||||
|
},
|
||||||
/turf/open/floor/mineral/titanium/purple,
|
/turf/open/floor/mineral/titanium/purple,
|
||||||
/area/ruin/powered/golem_ship)
|
/area/ruin/powered/golem_ship)
|
||||||
"z" = (
|
"z" = (
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -735,7 +735,7 @@
|
|||||||
/obj/machinery/atmospherics/components/unary/outlet_injector{
|
/obj/machinery/atmospherics/components/unary/outlet_injector{
|
||||||
dir = 1
|
dir = 1
|
||||||
},
|
},
|
||||||
/turf/open/space/basic,
|
/turf/open/floor/plating/airless,
|
||||||
/area/engine/engineering)
|
/area/engine/engineering)
|
||||||
"Si" = (
|
"Si" = (
|
||||||
/obj/structure/cable/yellow{
|
/obj/structure/cable/yellow{
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -240,7 +240,7 @@
|
|||||||
/obj/machinery/atmospherics/components/unary/outlet_injector{
|
/obj/machinery/atmospherics/components/unary/outlet_injector{
|
||||||
dir = 1
|
dir = 1
|
||||||
},
|
},
|
||||||
/turf/open/space/basic,
|
/turf/open/floor/plating/airless,
|
||||||
/area/engine/engineering)
|
/area/engine/engineering)
|
||||||
"nR" = (
|
"nR" = (
|
||||||
/obj/structure/cable{
|
/obj/structure/cable{
|
||||||
@@ -905,14 +905,6 @@
|
|||||||
},
|
},
|
||||||
/turf/open/space/basic,
|
/turf/open/space/basic,
|
||||||
/area/space/nearstation)
|
/area/space/nearstation)
|
||||||
"VR" = (
|
|
||||||
/obj/structure/lattice/catwalk,
|
|
||||||
/obj/machinery/camera/emp_proof{
|
|
||||||
c_tag = "Tesla Engine Northeast";
|
|
||||||
network = list("ss13","engine")
|
|
||||||
},
|
|
||||||
/turf/open/space/basic,
|
|
||||||
/area/space/nearstation)
|
|
||||||
"Wf" = (
|
"Wf" = (
|
||||||
/obj/effect/turf_decal/stripes/line{
|
/obj/effect/turf_decal/stripes/line{
|
||||||
dir = 9
|
dir = 9
|
||||||
@@ -1728,7 +1720,7 @@ dz
|
|||||||
dz
|
dz
|
||||||
FP
|
FP
|
||||||
FP
|
FP
|
||||||
VR
|
FP
|
||||||
dz
|
dz
|
||||||
dz
|
dz
|
||||||
Yl
|
Yl
|
||||||
|
|||||||
+395
-284
File diff suppressed because it is too large
Load Diff
+6164
-5455
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -421,7 +421,7 @@
|
|||||||
},
|
},
|
||||||
/area/security/prison)
|
/area/security/prison)
|
||||||
"abr" = (
|
"abr" = (
|
||||||
/obj/machinery/status_display{
|
/obj/machinery/status_display/evac{
|
||||||
pixel_y = 32
|
pixel_y = 32
|
||||||
},
|
},
|
||||||
/obj/effect/turf_decal/tile/blue{
|
/obj/effect/turf_decal/tile/blue{
|
||||||
@@ -2472,7 +2472,7 @@
|
|||||||
/turf/open/floor/plasteel/dark,
|
/turf/open/floor/plasteel/dark,
|
||||||
/area/crew_quarters/heads/hos)
|
/area/crew_quarters/heads/hos)
|
||||||
"afj" = (
|
"afj" = (
|
||||||
/obj/machinery/status_display{
|
/obj/machinery/status_display/evac{
|
||||||
pixel_x = -32;
|
pixel_x = -32;
|
||||||
pixel_y = 32
|
pixel_y = 32
|
||||||
},
|
},
|
||||||
@@ -2501,7 +2501,7 @@
|
|||||||
/turf/open/floor/plasteel/dark,
|
/turf/open/floor/plasteel/dark,
|
||||||
/area/crew_quarters/heads/hos)
|
/area/crew_quarters/heads/hos)
|
||||||
"afn" = (
|
"afn" = (
|
||||||
/obj/machinery/status_display{
|
/obj/machinery/status_display/evac{
|
||||||
pixel_x = 32;
|
pixel_x = 32;
|
||||||
pixel_y = 32
|
pixel_y = 32
|
||||||
},
|
},
|
||||||
@@ -15058,7 +15058,7 @@
|
|||||||
/obj/machinery/light{
|
/obj/machinery/light{
|
||||||
dir = 1
|
dir = 1
|
||||||
},
|
},
|
||||||
/obj/machinery/status_display{
|
/obj/machinery/status_display/evac{
|
||||||
pixel_y = 32
|
pixel_y = 32
|
||||||
},
|
},
|
||||||
/obj/effect/turf_decal/tile/red{
|
/obj/effect/turf_decal/tile/red{
|
||||||
@@ -17819,7 +17819,7 @@
|
|||||||
/obj/structure/chair{
|
/obj/structure/chair{
|
||||||
name = "Judge"
|
name = "Judge"
|
||||||
},
|
},
|
||||||
/obj/machinery/status_display{
|
/obj/machinery/status_display/evac{
|
||||||
pixel_y = 32
|
pixel_y = 32
|
||||||
},
|
},
|
||||||
/obj/machinery/light{
|
/obj/machinery/light{
|
||||||
@@ -19088,7 +19088,7 @@
|
|||||||
"aLO" = (
|
"aLO" = (
|
||||||
/obj/machinery/atmospherics/components/unary/portables_connector/visible,
|
/obj/machinery/atmospherics/components/unary/portables_connector/visible,
|
||||||
/obj/machinery/portable_atmospherics/scrubber,
|
/obj/machinery/portable_atmospherics/scrubber,
|
||||||
/obj/machinery/status_display{
|
/obj/machinery/status_display/evac{
|
||||||
pixel_y = 30
|
pixel_y = 30
|
||||||
},
|
},
|
||||||
/obj/effect/turf_decal/delivery,
|
/obj/effect/turf_decal/delivery,
|
||||||
@@ -21087,7 +21087,7 @@
|
|||||||
/obj/structure/cable/yellow{
|
/obj/structure/cable/yellow{
|
||||||
icon_state = "0-4"
|
icon_state = "0-4"
|
||||||
},
|
},
|
||||||
/obj/machinery/status_display{
|
/obj/machinery/status_display/evac{
|
||||||
pixel_y = 32
|
pixel_y = 32
|
||||||
},
|
},
|
||||||
/obj/machinery/camera{
|
/obj/machinery/camera{
|
||||||
@@ -21381,7 +21381,7 @@
|
|||||||
/obj/machinery/light{
|
/obj/machinery/light{
|
||||||
dir = 4
|
dir = 4
|
||||||
},
|
},
|
||||||
/obj/machinery/status_display{
|
/obj/machinery/status_display/evac{
|
||||||
pixel_x = 32
|
pixel_x = 32
|
||||||
},
|
},
|
||||||
/obj/machinery/flasher{
|
/obj/machinery/flasher{
|
||||||
@@ -23713,7 +23713,7 @@
|
|||||||
/turf/open/floor/plasteel/dark,
|
/turf/open/floor/plasteel/dark,
|
||||||
/area/ai_monitored/turret_protected/ai)
|
/area/ai_monitored/turret_protected/ai)
|
||||||
"aVm" = (
|
"aVm" = (
|
||||||
/obj/machinery/status_display{
|
/obj/machinery/status_display/evac{
|
||||||
pixel_y = 32
|
pixel_y = 32
|
||||||
},
|
},
|
||||||
/obj/machinery/atmospherics/components/unary/vent_scrubber/on,
|
/obj/machinery/atmospherics/components/unary/vent_scrubber/on,
|
||||||
@@ -23740,7 +23740,7 @@
|
|||||||
/turf/open/floor/plasteel/dark,
|
/turf/open/floor/plasteel/dark,
|
||||||
/area/ai_monitored/turret_protected/ai)
|
/area/ai_monitored/turret_protected/ai)
|
||||||
"aVq" = (
|
"aVq" = (
|
||||||
/obj/machinery/status_display{
|
/obj/machinery/status_display/evac{
|
||||||
pixel_y = 32
|
pixel_y = 32
|
||||||
},
|
},
|
||||||
/obj/machinery/atmospherics/components/unary/vent_pump/on,
|
/obj/machinery/atmospherics/components/unary/vent_pump/on,
|
||||||
@@ -23803,7 +23803,7 @@
|
|||||||
/obj/machinery/atmospherics/components/unary/vent_pump/on{
|
/obj/machinery/atmospherics/components/unary/vent_pump/on{
|
||||||
dir = 4
|
dir = 4
|
||||||
},
|
},
|
||||||
/obj/machinery/status_display{
|
/obj/machinery/status_display/evac{
|
||||||
pixel_y = 32
|
pixel_y = 32
|
||||||
},
|
},
|
||||||
/obj/effect/turf_decal/stripes/line{
|
/obj/effect/turf_decal/stripes/line{
|
||||||
@@ -24135,7 +24135,7 @@
|
|||||||
/obj/machinery/light{
|
/obj/machinery/light{
|
||||||
dir = 1
|
dir = 1
|
||||||
},
|
},
|
||||||
/obj/machinery/status_display{
|
/obj/machinery/status_display/evac{
|
||||||
pixel_y = 32
|
pixel_y = 32
|
||||||
},
|
},
|
||||||
/obj/effect/turf_decal/tile/neutral{
|
/obj/effect/turf_decal/tile/neutral{
|
||||||
@@ -24359,7 +24359,7 @@
|
|||||||
pixel_x = -25;
|
pixel_x = -25;
|
||||||
pixel_y = 25
|
pixel_y = 25
|
||||||
},
|
},
|
||||||
/obj/machinery/status_display{
|
/obj/machinery/status_display/evac{
|
||||||
pixel_y = 32
|
pixel_y = 32
|
||||||
},
|
},
|
||||||
/obj/structure/extinguisher_cabinet{
|
/obj/structure/extinguisher_cabinet{
|
||||||
@@ -27493,7 +27493,7 @@
|
|||||||
name = "Station Intercom (General)";
|
name = "Station Intercom (General)";
|
||||||
pixel_x = -29
|
pixel_x = -29
|
||||||
},
|
},
|
||||||
/obj/machinery/status_display{
|
/obj/machinery/status_display/evac{
|
||||||
pixel_x = -32
|
pixel_x = -32
|
||||||
},
|
},
|
||||||
/obj/effect/turf_decal/tile/neutral{
|
/obj/effect/turf_decal/tile/neutral{
|
||||||
@@ -28332,7 +28332,7 @@
|
|||||||
/turf/open/floor/carpet,
|
/turf/open/floor/carpet,
|
||||||
/area/crew_quarters/heads/captain/private)
|
/area/crew_quarters/heads/captain/private)
|
||||||
"bdI" = (
|
"bdI" = (
|
||||||
/obj/machinery/status_display{
|
/obj/machinery/status_display/evac{
|
||||||
pixel_y = 32
|
pixel_y = 32
|
||||||
},
|
},
|
||||||
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
|
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
|
||||||
@@ -28355,6 +28355,7 @@
|
|||||||
/obj/structure/disposalpipe/segment{
|
/obj/structure/disposalpipe/segment{
|
||||||
dir = 6
|
dir = 6
|
||||||
},
|
},
|
||||||
|
/obj/machinery/vending/wardrobe/cap_wardrobe,
|
||||||
/turf/open/floor/carpet,
|
/turf/open/floor/carpet,
|
||||||
/area/crew_quarters/heads/captain/private)
|
/area/crew_quarters/heads/captain/private)
|
||||||
"bdL" = (
|
"bdL" = (
|
||||||
@@ -29753,16 +29754,16 @@
|
|||||||
/obj/item/clothing/under/rank/security/navyblue,
|
/obj/item/clothing/under/rank/security/navyblue,
|
||||||
/obj/item/clothing/under/rank/security/navyblue,
|
/obj/item/clothing/under/rank/security/navyblue,
|
||||||
/obj/item/clothing/under/rank/security/navyblue,
|
/obj/item/clothing/under/rank/security/navyblue,
|
||||||
/obj/item/clothing/suit/security/officer,
|
/obj/item/clothing/suit/armor/navyblue,
|
||||||
/obj/item/clothing/suit/security/officer,
|
/obj/item/clothing/suit/armor/navyblue,
|
||||||
/obj/item/clothing/suit/security/officer,
|
/obj/item/clothing/suit/armor/navyblue,
|
||||||
/obj/item/clothing/suit/security/officer,
|
/obj/item/clothing/suit/armor/navyblue,
|
||||||
/obj/item/clothing/suit/security/officer,
|
/obj/item/clothing/suit/armor/navyblue,
|
||||||
/obj/item/clothing/suit/security/officer,
|
/obj/item/clothing/suit/armor/navyblue,
|
||||||
/obj/item/clothing/under/rank/warden/navyblue,
|
/obj/item/clothing/under/rank/warden/navyblue,
|
||||||
/obj/item/clothing/suit/security/warden,
|
/obj/item/clothing/suit/armor/vest/warden/navyblue,
|
||||||
/obj/item/clothing/under/rank/head_of_security/navyblue,
|
/obj/item/clothing/under/rank/head_of_security/navyblue,
|
||||||
/obj/item/clothing/suit/security/hos,
|
/obj/item/clothing/suit/armor/hos/navyblue,
|
||||||
/obj/item/clothing/head/beret/sec/navyofficer,
|
/obj/item/clothing/head/beret/sec/navyofficer,
|
||||||
/obj/item/clothing/head/beret/sec/navyofficer,
|
/obj/item/clothing/head/beret/sec/navyofficer,
|
||||||
/obj/item/clothing/head/beret/sec/navyofficer,
|
/obj/item/clothing/head/beret/sec/navyofficer,
|
||||||
@@ -30143,7 +30144,7 @@
|
|||||||
/turf/open/floor/plasteel/dark,
|
/turf/open/floor/plasteel/dark,
|
||||||
/area/bridge)
|
/area/bridge)
|
||||||
"bhk" = (
|
"bhk" = (
|
||||||
/obj/machinery/status_display{
|
/obj/machinery/status_display/evac{
|
||||||
pixel_y = 32
|
pixel_y = 32
|
||||||
},
|
},
|
||||||
/obj/item/folder/yellow{
|
/obj/item/folder/yellow{
|
||||||
@@ -30795,7 +30796,7 @@
|
|||||||
/obj/structure/chair/office/dark{
|
/obj/structure/chair/office/dark{
|
||||||
dir = 4
|
dir = 4
|
||||||
},
|
},
|
||||||
/obj/machinery/status_display{
|
/obj/machinery/status_display/evac{
|
||||||
pixel_y = -32
|
pixel_y = -32
|
||||||
},
|
},
|
||||||
/turf/open/floor/plasteel/dark,
|
/turf/open/floor/plasteel/dark,
|
||||||
@@ -31855,7 +31856,7 @@
|
|||||||
/obj/effect/turf_decal/tile/brown{
|
/obj/effect/turf_decal/tile/brown{
|
||||||
dir = 8
|
dir = 8
|
||||||
},
|
},
|
||||||
/obj/machinery/autolathe{
|
/obj/machinery/autolathe/secure{
|
||||||
name = "public autolathe"
|
name = "public autolathe"
|
||||||
},
|
},
|
||||||
/turf/open/floor/plasteel,
|
/turf/open/floor/plasteel,
|
||||||
@@ -32463,7 +32464,7 @@
|
|||||||
/area/ai_monitored/turret_protected/aisat/foyer)
|
/area/ai_monitored/turret_protected/aisat/foyer)
|
||||||
"blC" = (
|
"blC" = (
|
||||||
/obj/machinery/teleport/station,
|
/obj/machinery/teleport/station,
|
||||||
/obj/machinery/status_display{
|
/obj/machinery/status_display/evac{
|
||||||
pixel_y = 32
|
pixel_y = 32
|
||||||
},
|
},
|
||||||
/obj/effect/turf_decal/tile/neutral{
|
/obj/effect/turf_decal/tile/neutral{
|
||||||
@@ -32572,7 +32573,7 @@
|
|||||||
/area/ai_monitored/storage/satellite)
|
/area/ai_monitored/storage/satellite)
|
||||||
"blK" = (
|
"blK" = (
|
||||||
/obj/machinery/recharge_station,
|
/obj/machinery/recharge_station,
|
||||||
/obj/machinery/status_display{
|
/obj/machinery/status_display/evac{
|
||||||
pixel_y = 32
|
pixel_y = 32
|
||||||
},
|
},
|
||||||
/obj/structure/cable/yellow{
|
/obj/structure/cable/yellow{
|
||||||
@@ -33091,7 +33092,7 @@
|
|||||||
/area/crew_quarters/heads/captain/private)
|
/area/crew_quarters/heads/captain/private)
|
||||||
"bmJ" = (
|
"bmJ" = (
|
||||||
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
|
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
|
||||||
/obj/machinery/status_display{
|
/obj/machinery/status_display/evac{
|
||||||
pixel_x = -32
|
pixel_x = -32
|
||||||
},
|
},
|
||||||
/obj/structure/disposalpipe/segment,
|
/obj/structure/disposalpipe/segment,
|
||||||
@@ -34052,7 +34053,7 @@
|
|||||||
/obj/structure/displaycase/captain{
|
/obj/structure/displaycase/captain{
|
||||||
pixel_y = 5
|
pixel_y = 5
|
||||||
},
|
},
|
||||||
/obj/machinery/status_display{
|
/obj/machinery/status_display/evac{
|
||||||
pixel_y = 32
|
pixel_y = 32
|
||||||
},
|
},
|
||||||
/turf/open/floor/wood,
|
/turf/open/floor/wood,
|
||||||
@@ -35067,7 +35068,7 @@
|
|||||||
/turf/open/floor/wood,
|
/turf/open/floor/wood,
|
||||||
/area/crew_quarters/heads/hop)
|
/area/crew_quarters/heads/hop)
|
||||||
"bqF" = (
|
"bqF" = (
|
||||||
/obj/machinery/status_display{
|
/obj/machinery/status_display/evac{
|
||||||
pixel_y = 32
|
pixel_y = 32
|
||||||
},
|
},
|
||||||
/obj/effect/turf_decal/tile/blue{
|
/obj/effect/turf_decal/tile/blue{
|
||||||
@@ -35947,7 +35948,7 @@
|
|||||||
/turf/open/floor/plasteel/dark,
|
/turf/open/floor/plasteel/dark,
|
||||||
/area/ai_monitored/turret_protected/aisat_interior)
|
/area/ai_monitored/turret_protected/aisat_interior)
|
||||||
"bse" = (
|
"bse" = (
|
||||||
/obj/machinery/status_display{
|
/obj/machinery/status_display/evac{
|
||||||
pixel_y = 32
|
pixel_y = 32
|
||||||
},
|
},
|
||||||
/obj/machinery/porta_turret/ai,
|
/obj/machinery/porta_turret/ai,
|
||||||
@@ -36179,7 +36180,7 @@
|
|||||||
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
|
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
|
||||||
dir = 4
|
dir = 4
|
||||||
},
|
},
|
||||||
/obj/machinery/status_display{
|
/obj/machinery/status_display/evac{
|
||||||
pixel_y = -32
|
pixel_y = -32
|
||||||
},
|
},
|
||||||
/obj/effect/turf_decal/tile/neutral{
|
/obj/effect/turf_decal/tile/neutral{
|
||||||
@@ -36283,7 +36284,7 @@
|
|||||||
/turf/open/floor/carpet,
|
/turf/open/floor/carpet,
|
||||||
/area/crew_quarters/heads/hop)
|
/area/crew_quarters/heads/hop)
|
||||||
"bsP" = (
|
"bsP" = (
|
||||||
/obj/machinery/status_display{
|
/obj/machinery/status_display/evac{
|
||||||
pixel_y = 32
|
pixel_y = 32
|
||||||
},
|
},
|
||||||
/obj/structure/bed/dogbed/ian,
|
/obj/structure/bed/dogbed/ian,
|
||||||
@@ -37933,7 +37934,7 @@
|
|||||||
/area/bridge)
|
/area/bridge)
|
||||||
"bwu" = (
|
"bwu" = (
|
||||||
/obj/machinery/holopad,
|
/obj/machinery/holopad,
|
||||||
/obj/machinery/status_display{
|
/obj/machinery/status_display/evac{
|
||||||
pixel_y = 32
|
pixel_y = 32
|
||||||
},
|
},
|
||||||
/obj/machinery/light{
|
/obj/machinery/light{
|
||||||
@@ -39063,7 +39064,7 @@
|
|||||||
},
|
},
|
||||||
/area/engine/atmos)
|
/area/engine/atmos)
|
||||||
"byS" = (
|
"byS" = (
|
||||||
/obj/machinery/status_display{
|
/obj/machinery/status_display/evac{
|
||||||
pixel_y = 32
|
pixel_y = 32
|
||||||
},
|
},
|
||||||
/obj/machinery/light{
|
/obj/machinery/light{
|
||||||
@@ -39533,7 +39534,7 @@
|
|||||||
/turf/open/floor/plasteel,
|
/turf/open/floor/plasteel,
|
||||||
/area/hallway/secondary/command)
|
/area/hallway/secondary/command)
|
||||||
"bzN" = (
|
"bzN" = (
|
||||||
/obj/machinery/status_display{
|
/obj/machinery/status_display/evac{
|
||||||
pixel_y = 32
|
pixel_y = 32
|
||||||
},
|
},
|
||||||
/obj/effect/turf_decal/bot,
|
/obj/effect/turf_decal/bot,
|
||||||
@@ -40057,7 +40058,7 @@
|
|||||||
"bAW" = (
|
"bAW" = (
|
||||||
/obj/structure/table/wood,
|
/obj/structure/table/wood,
|
||||||
/obj/item/folder/blue,
|
/obj/item/folder/blue,
|
||||||
/obj/machinery/status_display{
|
/obj/machinery/status_display/evac{
|
||||||
pixel_y = 31
|
pixel_y = 31
|
||||||
},
|
},
|
||||||
/obj/item/folder/blue,
|
/obj/item/folder/blue,
|
||||||
@@ -41121,7 +41122,7 @@
|
|||||||
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
|
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
|
||||||
dir = 4
|
dir = 4
|
||||||
},
|
},
|
||||||
/obj/machinery/status_display{
|
/obj/machinery/status_display/evac{
|
||||||
pixel_y = 32
|
pixel_y = 32
|
||||||
},
|
},
|
||||||
/obj/machinery/atmospherics/components/unary/vent_scrubber/on,
|
/obj/machinery/atmospherics/components/unary/vent_scrubber/on,
|
||||||
@@ -41265,7 +41266,7 @@
|
|||||||
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
|
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
|
||||||
dir = 4
|
dir = 4
|
||||||
},
|
},
|
||||||
/obj/machinery/status_display{
|
/obj/machinery/status_display/evac{
|
||||||
pixel_y = 32
|
pixel_y = 32
|
||||||
},
|
},
|
||||||
/obj/machinery/atmospherics/components/unary/vent_scrubber/on,
|
/obj/machinery/atmospherics/components/unary/vent_scrubber/on,
|
||||||
@@ -44514,7 +44515,7 @@
|
|||||||
/obj/machinery/gateway{
|
/obj/machinery/gateway{
|
||||||
dir = 1
|
dir = 1
|
||||||
},
|
},
|
||||||
/obj/machinery/status_display{
|
/obj/machinery/status_display/evac{
|
||||||
pixel_y = 32
|
pixel_y = 32
|
||||||
},
|
},
|
||||||
/obj/effect/turf_decal/bot_white,
|
/obj/effect/turf_decal/bot_white,
|
||||||
@@ -44934,7 +44935,7 @@
|
|||||||
/area/maintenance/port)
|
/area/maintenance/port)
|
||||||
"bKY" = (
|
"bKY" = (
|
||||||
/obj/machinery/power/apc{
|
/obj/machinery/power/apc{
|
||||||
areastring = "/area/vacant_room/office";
|
areastring = "/area/security/vacantoffice";
|
||||||
dir = 8;
|
dir = 8;
|
||||||
name = "Vacant Office APC";
|
name = "Vacant Office APC";
|
||||||
pixel_x = -25
|
pixel_x = -25
|
||||||
@@ -45284,7 +45285,7 @@
|
|||||||
/area/maintenance/central)
|
/area/maintenance/central)
|
||||||
"bLH" = (
|
"bLH" = (
|
||||||
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
|
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
|
||||||
/obj/machinery/status_display{
|
/obj/machinery/status_display/evac{
|
||||||
pixel_x = -32
|
pixel_x = -32
|
||||||
},
|
},
|
||||||
/obj/machinery/camera{
|
/obj/machinery/camera{
|
||||||
@@ -49142,7 +49143,7 @@
|
|||||||
/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
|
/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
|
||||||
dir = 1
|
dir = 1
|
||||||
},
|
},
|
||||||
/obj/machinery/status_display{
|
/obj/machinery/status_display/evac{
|
||||||
pixel_y = 32
|
pixel_y = 32
|
||||||
},
|
},
|
||||||
/obj/effect/turf_decal/tile/neutral{
|
/obj/effect/turf_decal/tile/neutral{
|
||||||
@@ -49213,7 +49214,7 @@
|
|||||||
/obj/machinery/light{
|
/obj/machinery/light{
|
||||||
dir = 1
|
dir = 1
|
||||||
},
|
},
|
||||||
/obj/machinery/status_display{
|
/obj/machinery/status_display/evac{
|
||||||
pixel_y = 32
|
pixel_y = 32
|
||||||
},
|
},
|
||||||
/obj/effect/turf_decal/tile/neutral{
|
/obj/effect/turf_decal/tile/neutral{
|
||||||
@@ -52537,7 +52538,7 @@
|
|||||||
pixel_y = 4
|
pixel_y = 4
|
||||||
},
|
},
|
||||||
/obj/item/pen,
|
/obj/item/pen,
|
||||||
/obj/machinery/status_display{
|
/obj/machinery/status_display/evac{
|
||||||
pixel_y = 32
|
pixel_y = 32
|
||||||
},
|
},
|
||||||
/obj/machinery/light/small{
|
/obj/machinery/light/small{
|
||||||
@@ -59310,7 +59311,7 @@
|
|||||||
/turf/open/floor/plasteel/white,
|
/turf/open/floor/plasteel/white,
|
||||||
/area/medical/medbay/central)
|
/area/medical/medbay/central)
|
||||||
"cnC" = (
|
"cnC" = (
|
||||||
/obj/machinery/status_display{
|
/obj/machinery/status_display/evac{
|
||||||
pixel_y = 32
|
pixel_y = 32
|
||||||
},
|
},
|
||||||
/obj/structure/table/glass,
|
/obj/structure/table/glass,
|
||||||
@@ -62450,7 +62451,7 @@
|
|||||||
},
|
},
|
||||||
/area/crew_quarters/heads/hor)
|
/area/crew_quarters/heads/hor)
|
||||||
"ctc" = (
|
"ctc" = (
|
||||||
/obj/machinery/status_display{
|
/obj/machinery/status_display/evac{
|
||||||
pixel_y = 32
|
pixel_y = 32
|
||||||
},
|
},
|
||||||
/obj/effect/landmark/xmastree/rdrod,
|
/obj/effect/landmark/xmastree/rdrod,
|
||||||
@@ -65398,7 +65399,7 @@
|
|||||||
"cyO" = (
|
"cyO" = (
|
||||||
/obj/machinery/disposal/bin,
|
/obj/machinery/disposal/bin,
|
||||||
/obj/structure/disposalpipe/trunk,
|
/obj/structure/disposalpipe/trunk,
|
||||||
/obj/machinery/status_display{
|
/obj/machinery/status_display/evac{
|
||||||
pixel_y = 32
|
pixel_y = 32
|
||||||
},
|
},
|
||||||
/turf/open/floor/plasteel/white/side,
|
/turf/open/floor/plasteel/white/side,
|
||||||
@@ -73012,7 +73013,7 @@
|
|||||||
/turf/open/floor/plasteel,
|
/turf/open/floor/plasteel,
|
||||||
/area/hallway/secondary/exit/departure_lounge)
|
/area/hallway/secondary/exit/departure_lounge)
|
||||||
"cMU" = (
|
"cMU" = (
|
||||||
/obj/machinery/status_display{
|
/obj/machinery/status_display/evac{
|
||||||
layer = 4
|
layer = 4
|
||||||
},
|
},
|
||||||
/turf/closed/wall,
|
/turf/closed/wall,
|
||||||
@@ -76209,7 +76210,7 @@
|
|||||||
/obj/machinery/light{
|
/obj/machinery/light{
|
||||||
dir = 1
|
dir = 1
|
||||||
},
|
},
|
||||||
/obj/machinery/status_display{
|
/obj/machinery/status_display/evac{
|
||||||
pixel_y = 30
|
pixel_y = 30
|
||||||
},
|
},
|
||||||
/obj/machinery/photocopier{
|
/obj/machinery/photocopier{
|
||||||
@@ -78350,7 +78351,7 @@
|
|||||||
/turf/open/floor/plasteel/dark,
|
/turf/open/floor/plasteel/dark,
|
||||||
/area/engine/engineering)
|
/area/engine/engineering)
|
||||||
"deD" = (
|
"deD" = (
|
||||||
/obj/machinery/status_display,
|
/obj/machinery/status_display/evac,
|
||||||
/turf/closed/wall/r_wall,
|
/turf/closed/wall/r_wall,
|
||||||
/area/engine/supermatter)
|
/area/engine/supermatter)
|
||||||
"deI" = (
|
"deI" = (
|
||||||
@@ -79825,7 +79826,7 @@
|
|||||||
/area/maintenance/aft)
|
/area/maintenance/aft)
|
||||||
"diD" = (
|
"diD" = (
|
||||||
/obj/machinery/vending/cigarette,
|
/obj/machinery/vending/cigarette,
|
||||||
/obj/machinery/status_display{
|
/obj/machinery/status_display/evac{
|
||||||
pixel_y = 32
|
pixel_y = 32
|
||||||
},
|
},
|
||||||
/obj/structure/sign/poster/official/random{
|
/obj/structure/sign/poster/official/random{
|
||||||
@@ -81645,6 +81646,19 @@
|
|||||||
/obj/machinery/door/firedoor,
|
/obj/machinery/door/firedoor,
|
||||||
/turf/open/floor/plating,
|
/turf/open/floor/plating,
|
||||||
/area/crew_quarters/cryopod)
|
/area/crew_quarters/cryopod)
|
||||||
|
"eQf" = (
|
||||||
|
/obj/machinery/computer/shuttle/mining/common{
|
||||||
|
dir = 1
|
||||||
|
},
|
||||||
|
/obj/structure/window/reinforced,
|
||||||
|
/obj/structure/window/reinforced{
|
||||||
|
dir = 8
|
||||||
|
},
|
||||||
|
/obj/structure/window/reinforced{
|
||||||
|
dir = 4
|
||||||
|
},
|
||||||
|
/turf/open/floor/plating,
|
||||||
|
/area/hallway/primary/port)
|
||||||
"eZe" = (
|
"eZe" = (
|
||||||
/obj/structure/cable/yellow{
|
/obj/structure/cable/yellow{
|
||||||
icon_state = "1-2"
|
icon_state = "1-2"
|
||||||
@@ -98511,7 +98525,7 @@ bgA
|
|||||||
biz
|
biz
|
||||||
bkb
|
bkb
|
||||||
blZ
|
blZ
|
||||||
bnM
|
eQf
|
||||||
bqf
|
bqf
|
||||||
bqf
|
bqf
|
||||||
bqf
|
bqf
|
||||||
|
|||||||
+2098
-642
File diff suppressed because it is too large
Load Diff
@@ -2564,7 +2564,7 @@
|
|||||||
"aij" = (
|
"aij" = (
|
||||||
/obj/structure/closet/secure_closet/contraband/armory,
|
/obj/structure/closet/secure_closet/contraband/armory,
|
||||||
/obj/item/poster/random_contraband,
|
/obj/item/poster/random_contraband,
|
||||||
/obj/item/clothing/suit/security/officer/russian,
|
/obj/item/clothing/suit/armor/navyblue/russian,
|
||||||
/obj/item/grenade/plastic/c4,
|
/obj/item/grenade/plastic/c4,
|
||||||
/turf/open/floor/plasteel/dark,
|
/turf/open/floor/plasteel/dark,
|
||||||
/area/security/armory)
|
/area/security/armory)
|
||||||
@@ -3086,7 +3086,7 @@
|
|||||||
/area/security/main)
|
/area/security/main)
|
||||||
"ajo" = (
|
"ajo" = (
|
||||||
/obj/machinery/vending/coffee,
|
/obj/machinery/vending/coffee,
|
||||||
/obj/machinery/status_display{
|
/obj/machinery/status_display/evac{
|
||||||
pixel_y = 32
|
pixel_y = 32
|
||||||
},
|
},
|
||||||
/obj/effect/turf_decal/tile/red{
|
/obj/effect/turf_decal/tile/red{
|
||||||
@@ -3427,7 +3427,7 @@
|
|||||||
"akc" = (
|
"akc" = (
|
||||||
/obj/structure/table/wood,
|
/obj/structure/table/wood,
|
||||||
/obj/machinery/recharger,
|
/obj/machinery/recharger,
|
||||||
/obj/machinery/status_display{
|
/obj/machinery/status_display/evac{
|
||||||
pixel_y = 32
|
pixel_y = 32
|
||||||
},
|
},
|
||||||
/obj/machinery/light{
|
/obj/machinery/light{
|
||||||
@@ -6882,7 +6882,7 @@
|
|||||||
/turf/open/floor/plasteel/dark,
|
/turf/open/floor/plasteel/dark,
|
||||||
/area/bridge)
|
/area/bridge)
|
||||||
"arK" = (
|
"arK" = (
|
||||||
/obj/machinery/status_display{
|
/obj/machinery/status_display/evac{
|
||||||
pixel_y = 32
|
pixel_y = 32
|
||||||
},
|
},
|
||||||
/obj/item/folder/yellow{
|
/obj/item/folder/yellow{
|
||||||
@@ -9248,7 +9248,7 @@
|
|||||||
/obj/structure/disposalpipe/segment{
|
/obj/structure/disposalpipe/segment{
|
||||||
dir = 4
|
dir = 4
|
||||||
},
|
},
|
||||||
/obj/machinery/status_display{
|
/obj/machinery/status_display/evac{
|
||||||
pixel_y = 32
|
pixel_y = 32
|
||||||
},
|
},
|
||||||
/obj/effect/turf_decal/tile/blue{
|
/obj/effect/turf_decal/tile/blue{
|
||||||
@@ -9830,6 +9830,7 @@
|
|||||||
/obj/structure/cable{
|
/obj/structure/cable{
|
||||||
icon_state = "0-2"
|
icon_state = "0-2"
|
||||||
},
|
},
|
||||||
|
/obj/item/twohanded/required/kirbyplants/random,
|
||||||
/turf/open/floor/carpet,
|
/turf/open/floor/carpet,
|
||||||
/area/crew_quarters/heads/captain)
|
/area/crew_quarters/heads/captain)
|
||||||
"axT" = (
|
"axT" = (
|
||||||
@@ -11162,10 +11163,7 @@
|
|||||||
/obj/structure/extinguisher_cabinet{
|
/obj/structure/extinguisher_cabinet{
|
||||||
pixel_x = -24
|
pixel_x = -24
|
||||||
},
|
},
|
||||||
/obj/item/twohanded/required/kirbyplants{
|
/obj/machinery/vending/wardrobe/cap_wardrobe,
|
||||||
icon_state = "plant-20";
|
|
||||||
pixel_y = 3
|
|
||||||
},
|
|
||||||
/turf/open/floor/plasteel/dark,
|
/turf/open/floor/plasteel/dark,
|
||||||
/area/crew_quarters/heads/captain)
|
/area/crew_quarters/heads/captain)
|
||||||
"aBl" = (
|
"aBl" = (
|
||||||
@@ -11380,7 +11378,7 @@
|
|||||||
/turf/open/floor/wood,
|
/turf/open/floor/wood,
|
||||||
/area/crew_quarters/heads/hop)
|
/area/crew_quarters/heads/hop)
|
||||||
"aBF" = (
|
"aBF" = (
|
||||||
/obj/machinery/status_display{
|
/obj/machinery/status_display/evac{
|
||||||
pixel_y = 32
|
pixel_y = 32
|
||||||
},
|
},
|
||||||
/obj/structure/bed/dogbed/ian,
|
/obj/structure/bed/dogbed/ian,
|
||||||
@@ -14151,7 +14149,7 @@
|
|||||||
/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
|
/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
|
||||||
dir = 1
|
dir = 1
|
||||||
},
|
},
|
||||||
/obj/machinery/status_display{
|
/obj/machinery/status_display/evac{
|
||||||
pixel_y = 32
|
pixel_y = 32
|
||||||
},
|
},
|
||||||
/obj/effect/turf_decal/tile/neutral{
|
/obj/effect/turf_decal/tile/neutral{
|
||||||
@@ -17493,7 +17491,7 @@
|
|||||||
/turf/open/floor/plasteel,
|
/turf/open/floor/plasteel,
|
||||||
/area/hallway/secondary/exit/departure_lounge)
|
/area/hallway/secondary/exit/departure_lounge)
|
||||||
"aQt" = (
|
"aQt" = (
|
||||||
/obj/machinery/status_display,
|
/obj/machinery/status_display/evac,
|
||||||
/turf/closed/wall,
|
/turf/closed/wall,
|
||||||
/area/hallway/secondary/exit/departure_lounge)
|
/area/hallway/secondary/exit/departure_lounge)
|
||||||
"aQu" = (
|
"aQu" = (
|
||||||
@@ -24292,7 +24290,7 @@
|
|||||||
/obj/structure/cable{
|
/obj/structure/cable{
|
||||||
icon_state = "0-2"
|
icon_state = "0-2"
|
||||||
},
|
},
|
||||||
/obj/machinery/status_display{
|
/obj/machinery/status_display/evac{
|
||||||
pixel_y = 30
|
pixel_y = 30
|
||||||
},
|
},
|
||||||
/turf/open/floor/plasteel/dark,
|
/turf/open/floor/plasteel/dark,
|
||||||
@@ -28097,11 +28095,6 @@
|
|||||||
},
|
},
|
||||||
/turf/open/floor/plasteel/dark,
|
/turf/open/floor/plasteel/dark,
|
||||||
/area/science/robotics/lab)
|
/area/science/robotics/lab)
|
||||||
"boY" = (
|
|
||||||
/obj/effect/turf_decal/bot,
|
|
||||||
/obj/effect/landmark/start/cyborg,
|
|
||||||
/turf/open/floor/plasteel,
|
|
||||||
/area/science/robotics/lab)
|
|
||||||
"boZ" = (
|
"boZ" = (
|
||||||
/obj/structure/table,
|
/obj/structure/table,
|
||||||
/obj/machinery/cell_charger,
|
/obj/machinery/cell_charger,
|
||||||
@@ -36929,7 +36922,7 @@
|
|||||||
/area/medical/surgery)
|
/area/medical/surgery)
|
||||||
"bHc" = (
|
"bHc" = (
|
||||||
/obj/machinery/computer/med_data,
|
/obj/machinery/computer/med_data,
|
||||||
/obj/machinery/status_display{
|
/obj/machinery/status_display/evac{
|
||||||
pixel_y = 32
|
pixel_y = 32
|
||||||
},
|
},
|
||||||
/turf/open/floor/plasteel/freezer,
|
/turf/open/floor/plasteel/freezer,
|
||||||
@@ -48691,7 +48684,7 @@
|
|||||||
/turf/open/space,
|
/turf/open/space,
|
||||||
/area/space/nearstation)
|
/area/space/nearstation)
|
||||||
"cmu" = (
|
"cmu" = (
|
||||||
/obj/machinery/status_display{
|
/obj/machinery/status_display/evac{
|
||||||
pixel_x = -32
|
pixel_x = -32
|
||||||
},
|
},
|
||||||
/obj/structure/table,
|
/obj/structure/table,
|
||||||
@@ -98811,8 +98804,8 @@ beI
|
|||||||
bkt
|
bkt
|
||||||
blH
|
blH
|
||||||
bmO
|
bmO
|
||||||
boY
|
bnQ
|
||||||
boY
|
bnQ
|
||||||
bqi
|
bqi
|
||||||
bry
|
bry
|
||||||
bsZ
|
bsZ
|
||||||
@@ -99068,8 +99061,8 @@ bju
|
|||||||
bkt
|
bkt
|
||||||
blI
|
blI
|
||||||
bmO
|
bmO
|
||||||
boY
|
bnQ
|
||||||
boY
|
bnQ
|
||||||
bqi
|
bqi
|
||||||
brz
|
brz
|
||||||
bta
|
bta
|
||||||
|
|||||||
@@ -506,6 +506,7 @@
|
|||||||
"bx" = (
|
"bx" = (
|
||||||
/obj/structure/table,
|
/obj/structure/table,
|
||||||
/obj/machinery/readybutton,
|
/obj/machinery/readybutton,
|
||||||
|
/obj/item/storage/lockbox/dueling/hugbox/stamina,
|
||||||
/turf/open/floor/holofloor/basalt,
|
/turf/open/floor/holofloor/basalt,
|
||||||
/area/holodeck/rec_center/thunderdome)
|
/area/holodeck/rec_center/thunderdome)
|
||||||
"by" = (
|
"by" = (
|
||||||
@@ -522,6 +523,7 @@
|
|||||||
/area/holodeck/rec_center/thunderdome)
|
/area/holodeck/rec_center/thunderdome)
|
||||||
"bA" = (
|
"bA" = (
|
||||||
/obj/machinery/readybutton,
|
/obj/machinery/readybutton,
|
||||||
|
/obj/item/storage/lockbox/dueling/hugbox/stamina,
|
||||||
/obj/effect/turf_decal/tile/red{
|
/obj/effect/turf_decal/tile/red{
|
||||||
dir = 1
|
dir = 1
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -924,25 +924,16 @@
|
|||||||
/turf/open/floor/plasteel/dark,
|
/turf/open/floor/plasteel/dark,
|
||||||
/area/shuttle/syndicate/medical)
|
/area/shuttle/syndicate/medical)
|
||||||
"ce" = (
|
"ce" = (
|
||||||
/obj/item/sbeacondrop/bomb{
|
|
||||||
pixel_y = 5
|
|
||||||
},
|
|
||||||
/obj/item/sbeacondrop/bomb,
|
|
||||||
/obj/structure/table/reinforced,
|
/obj/structure/table/reinforced,
|
||||||
/obj/effect/turf_decal/tile/neutral,
|
/obj/effect/turf_decal/tile/neutral,
|
||||||
/obj/effect/turf_decal/tile/neutral{
|
/obj/effect/turf_decal/tile/neutral{
|
||||||
dir = 8
|
dir = 8
|
||||||
},
|
},
|
||||||
|
/obj/effect/landmark/start/nuclear_equipment,
|
||||||
|
/obj/effect/landmark/start/nuclear_equipment,
|
||||||
/turf/open/floor/plasteel/dark,
|
/turf/open/floor/plasteel/dark,
|
||||||
/area/shuttle/syndicate/armory)
|
/area/shuttle/syndicate/armory)
|
||||||
"cf" = (
|
"cf" = (
|
||||||
/obj/item/grenade/syndieminibomb{
|
|
||||||
pixel_x = 4;
|
|
||||||
pixel_y = 2
|
|
||||||
},
|
|
||||||
/obj/item/grenade/syndieminibomb{
|
|
||||||
pixel_x = -1
|
|
||||||
},
|
|
||||||
/obj/structure/table/reinforced,
|
/obj/structure/table/reinforced,
|
||||||
/obj/structure/window/reinforced{
|
/obj/structure/window/reinforced{
|
||||||
dir = 4
|
dir = 4
|
||||||
@@ -956,6 +947,7 @@
|
|||||||
/obj/effect/turf_decal/tile/neutral{
|
/obj/effect/turf_decal/tile/neutral{
|
||||||
dir = 8
|
dir = 8
|
||||||
},
|
},
|
||||||
|
/obj/effect/landmark/start/nuclear_equipment/minibomb,
|
||||||
/turf/open/floor/plasteel/dark,
|
/turf/open/floor/plasteel/dark,
|
||||||
/area/shuttle/syndicate/armory)
|
/area/shuttle/syndicate/armory)
|
||||||
"cg" = (
|
"cg" = (
|
||||||
|
|||||||
@@ -89,7 +89,7 @@
|
|||||||
/turf/open/floor/pod/dark,
|
/turf/open/floor/pod/dark,
|
||||||
/area/shuttle/pirate)
|
/area/shuttle/pirate)
|
||||||
"aj" = (
|
"aj" = (
|
||||||
/turf/closed/wall/mineral/plastitanium/nodiagonal,
|
/turf/closed/wall/r_wall/syndicate/pirate/nodiagonal,
|
||||||
/area/shuttle/pirate)
|
/area/shuttle/pirate)
|
||||||
"ak" = (
|
"ak" = (
|
||||||
/obj/machinery/airalarm/all_access{
|
/obj/machinery/airalarm/all_access{
|
||||||
@@ -419,6 +419,7 @@
|
|||||||
/obj/effect/mapping_helpers/airlock/cyclelink_helper{
|
/obj/effect/mapping_helpers/airlock/cyclelink_helper{
|
||||||
dir = 1
|
dir = 1
|
||||||
},
|
},
|
||||||
|
/obj/structure/fans/tiny,
|
||||||
/turf/open/floor/plating,
|
/turf/open/floor/plating,
|
||||||
/area/shuttle/pirate)
|
/area/shuttle/pirate)
|
||||||
"aK" = (
|
"aK" = (
|
||||||
@@ -463,21 +464,19 @@
|
|||||||
/turf/open/floor/plating,
|
/turf/open/floor/plating,
|
||||||
/area/shuttle/pirate)
|
/area/shuttle/pirate)
|
||||||
"aQ" = (
|
"aQ" = (
|
||||||
/obj/machinery/porta_turret/syndicate/energy{
|
/obj/machinery/porta_turret/syndicate/energy/pirate{
|
||||||
dir = 1;
|
dir = 1;
|
||||||
faction = list("pirate");
|
faction = list("pirate");
|
||||||
icon_state = "standard_lethal";
|
icon_state = "standard_lethal"
|
||||||
mode = 1
|
|
||||||
},
|
},
|
||||||
/turf/closed/wall/mineral/plastitanium/nodiagonal,
|
/turf/closed/wall/r_wall/syndicate/pirate/nodiagonal,
|
||||||
/area/shuttle/pirate)
|
/area/shuttle/pirate)
|
||||||
"aR" = (
|
"aR" = (
|
||||||
/obj/machinery/porta_turret/syndicate/energy{
|
/obj/machinery/porta_turret/syndicate/energy/pirate{
|
||||||
faction = list("pirate");
|
faction = list("pirate");
|
||||||
icon_state = "standard_lethal";
|
icon_state = "standard_lethal"
|
||||||
mode = 1
|
|
||||||
},
|
},
|
||||||
/turf/closed/wall/mineral/plastitanium,
|
/turf/closed/wall/r_wall/syndicate/pirate,
|
||||||
/area/shuttle/pirate)
|
/area/shuttle/pirate)
|
||||||
"aS" = (
|
"aS" = (
|
||||||
/obj/effect/turf_decal/stripes/line,
|
/obj/effect/turf_decal/stripes/line,
|
||||||
@@ -486,7 +485,7 @@
|
|||||||
/area/shuttle/pirate)
|
/area/shuttle/pirate)
|
||||||
"aU" = (
|
"aU" = (
|
||||||
/obj/structure/sign/departments/engineering,
|
/obj/structure/sign/departments/engineering,
|
||||||
/turf/closed/wall/mineral/plastitanium/nodiagonal,
|
/turf/closed/wall/r_wall/syndicate/pirate/nodiagonal,
|
||||||
/area/shuttle/pirate)
|
/area/shuttle/pirate)
|
||||||
"aV" = (
|
"aV" = (
|
||||||
/obj/effect/mob_spawn/human/pirate{
|
/obj/effect/mob_spawn/human/pirate{
|
||||||
@@ -867,37 +866,36 @@
|
|||||||
dir = 1
|
dir = 1
|
||||||
},
|
},
|
||||||
/obj/docking_port/mobile/pirate{
|
/obj/docking_port/mobile/pirate{
|
||||||
callTime = 100;
|
|
||||||
dheight = 0;
|
|
||||||
dir = 1;
|
|
||||||
dwidth = 11;
|
dwidth = 11;
|
||||||
height = 16;
|
height = 16;
|
||||||
id = "pirateship";
|
|
||||||
launch_status = 0;
|
launch_status = 0;
|
||||||
movement_force = list("KNOCKDOWN" = 0, "THROW" = 0);
|
movement_force = list("KNOCKDOWN" = 0, "THROW" = 0);
|
||||||
name = "Pirate Ship";
|
name = "Pirate Ship";
|
||||||
port_direction = 2;
|
port_direction = 2;
|
||||||
preferred_direction = 1;
|
|
||||||
width = 17
|
width = 17
|
||||||
},
|
},
|
||||||
/obj/docking_port/stationary{
|
/obj/docking_port/stationary{
|
||||||
dir = 1;
|
|
||||||
dwidth = 11;
|
dwidth = 11;
|
||||||
height = 16;
|
height = 16;
|
||||||
id = "pirateship_home";
|
id = "pirateship_home";
|
||||||
name = "Deep Space";
|
name = "Deep Space";
|
||||||
width = 17
|
width = 17
|
||||||
},
|
},
|
||||||
|
/obj/structure/fans/tiny,
|
||||||
/turf/open/floor/plating,
|
/turf/open/floor/plating,
|
||||||
/area/shuttle/pirate)
|
/area/shuttle/pirate)
|
||||||
|
"db" = (
|
||||||
|
/obj/structure/shuttle/engine/heater,
|
||||||
|
/obj/effect/spawner/structure/window/plastitanium/pirate,
|
||||||
|
/turf/open/floor/plating/airless,
|
||||||
|
/area/shuttle/pirate)
|
||||||
"df" = (
|
"df" = (
|
||||||
/obj/machinery/porta_turret/syndicate/energy{
|
/obj/machinery/porta_turret/syndicate/energy/pirate{
|
||||||
dir = 4;
|
dir = 4;
|
||||||
faction = list("pirate");
|
faction = list("pirate");
|
||||||
icon_state = "standard_lethal";
|
icon_state = "standard_lethal"
|
||||||
mode = 1
|
|
||||||
},
|
},
|
||||||
/turf/closed/wall/mineral/plastitanium,
|
/turf/closed/wall/r_wall/syndicate/pirate,
|
||||||
/area/shuttle/pirate)
|
/area/shuttle/pirate)
|
||||||
"dy" = (
|
"dy" = (
|
||||||
/obj/structure/chair/wood/normal,
|
/obj/structure/chair/wood/normal,
|
||||||
@@ -988,7 +986,7 @@
|
|||||||
id = "piratebridge"
|
id = "piratebridge"
|
||||||
},
|
},
|
||||||
/obj/structure/grille,
|
/obj/structure/grille,
|
||||||
/obj/structure/window/plastitanium,
|
/obj/structure/window/plastitanium/pirate,
|
||||||
/turf/open/floor/plating,
|
/turf/open/floor/plating,
|
||||||
/area/shuttle/pirate)
|
/area/shuttle/pirate)
|
||||||
"ez" = (
|
"ez" = (
|
||||||
@@ -1016,7 +1014,7 @@
|
|||||||
/turf/open/floor/plasteel,
|
/turf/open/floor/plasteel,
|
||||||
/area/shuttle/pirate)
|
/area/shuttle/pirate)
|
||||||
"fW" = (
|
"fW" = (
|
||||||
/turf/closed/wall/mineral/plastitanium,
|
/turf/closed/wall/r_wall/syndicate/pirate,
|
||||||
/area/shuttle/pirate)
|
/area/shuttle/pirate)
|
||||||
"fY" = (
|
"fY" = (
|
||||||
/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
|
/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
|
||||||
@@ -1084,13 +1082,12 @@
|
|||||||
/turf/open/floor/plasteel/showroomfloor,
|
/turf/open/floor/plasteel/showroomfloor,
|
||||||
/area/shuttle/pirate)
|
/area/shuttle/pirate)
|
||||||
"wR" = (
|
"wR" = (
|
||||||
/obj/machinery/porta_turret/syndicate/energy{
|
/obj/machinery/porta_turret/syndicate/energy/pirate{
|
||||||
dir = 8;
|
dir = 8;
|
||||||
faction = list("pirate");
|
faction = list("pirate");
|
||||||
icon_state = "standard_lethal";
|
icon_state = "standard_lethal"
|
||||||
mode = 1
|
|
||||||
},
|
},
|
||||||
/turf/closed/wall/mineral/plastitanium,
|
/turf/closed/wall/r_wall/syndicate/pirate,
|
||||||
/area/shuttle/pirate)
|
/area/shuttle/pirate)
|
||||||
"yi" = (
|
"yi" = (
|
||||||
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
|
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
|
||||||
@@ -1326,7 +1323,7 @@ aU
|
|||||||
be
|
be
|
||||||
aD
|
aD
|
||||||
aG
|
aG
|
||||||
ep
|
db
|
||||||
aH
|
aH
|
||||||
"}
|
"}
|
||||||
(9,1,1) = {"
|
(9,1,1) = {"
|
||||||
@@ -1344,7 +1341,7 @@ mU
|
|||||||
aL
|
aL
|
||||||
bP
|
bP
|
||||||
bX
|
bX
|
||||||
ep
|
db
|
||||||
aK
|
aK
|
||||||
"}
|
"}
|
||||||
(10,1,1) = {"
|
(10,1,1) = {"
|
||||||
@@ -1362,7 +1359,7 @@ aj
|
|||||||
bO
|
bO
|
||||||
bQ
|
bQ
|
||||||
bk
|
bk
|
||||||
ep
|
db
|
||||||
er
|
er
|
||||||
"}
|
"}
|
||||||
(11,1,1) = {"
|
(11,1,1) = {"
|
||||||
|
|||||||
@@ -136,8 +136,12 @@
|
|||||||
#define ORGAN_SLOT_TESTICLES "testicles"
|
#define ORGAN_SLOT_TESTICLES "testicles"
|
||||||
#define ORGAN_SLOT_BREASTS "breasts"
|
#define ORGAN_SLOT_BREASTS "breasts"
|
||||||
|
|
||||||
|
|
||||||
////organ defines
|
////organ defines
|
||||||
#define STANDARD_ORGAN_THRESHOLD 100
|
#define STANDARD_ORGAN_THRESHOLD 100
|
||||||
#define STANDARD_ORGAN_HEALING 0.001
|
#define STANDARD_ORGAN_HEALING (1/(15 MINUTES / (2 SECONDS)))
|
||||||
#define STANDARD_ORGAN_DECAY 0.00222 //designed to fail organs when left to decay for ~15 minutes
|
#define STANDARD_ORGAN_DECAY (1/(15 MINUTES / (2 SECONDS))) //designed to fail organs when left to decay for ~15 minutes. 2 SECOND is SSmobs tickrate.
|
||||||
|
|
||||||
|
#define G_MALE 1
|
||||||
|
#define G_FEMALE 2
|
||||||
|
#define G_PLURAL 3
|
||||||
|
#define G_NEUTER 4
|
||||||
|
|||||||
@@ -20,7 +20,7 @@
|
|||||||
#define NEW_SS_GLOBAL(varname) if(varname != src){if(istype(varname)){Recover();qdel(varname);}varname = src;}
|
#define NEW_SS_GLOBAL(varname) if(varname != src){if(istype(varname)){Recover();qdel(varname);}varname = src;}
|
||||||
|
|
||||||
#define START_PROCESSING(Processor, Datum) if (!(Datum.datum_flags & DF_ISPROCESSING)) {Datum.datum_flags |= DF_ISPROCESSING;Processor.processing += Datum}
|
#define START_PROCESSING(Processor, Datum) if (!(Datum.datum_flags & DF_ISPROCESSING)) {Datum.datum_flags |= DF_ISPROCESSING;Processor.processing += Datum}
|
||||||
#define STOP_PROCESSING(Processor, Datum) Datum.datum_flags &= ~DF_ISPROCESSING;Processor.processing -= Datum
|
#define STOP_PROCESSING(Processor, Datum) Datum.datum_flags &= ~DF_ISPROCESSING;Processor.processing -= Datum;Processor.currentrun -= Datum
|
||||||
|
|
||||||
//SubSystem flags (Please design any new flags so that the default is off, to make adding flags to subsystems easier)
|
//SubSystem flags (Please design any new flags so that the default is off, to make adding flags to subsystems easier)
|
||||||
|
|
||||||
|
|||||||
@@ -73,6 +73,7 @@
|
|||||||
#define ADMIN_PUNISHMENT_SUPPLYPOD "Supply Pod"
|
#define ADMIN_PUNISHMENT_SUPPLYPOD "Supply Pod"
|
||||||
#define ADMIN_PUNISHMENT_MAZING "Puzzle"
|
#define ADMIN_PUNISHMENT_MAZING "Puzzle"
|
||||||
#define ADMIN_PUNISHMENT_PIE "Cream Pie"
|
#define ADMIN_PUNISHMENT_PIE "Cream Pie"
|
||||||
|
#define ADMIN_PUNISHMENT_CUSTOM_PIE "Custom Cream Pie"
|
||||||
|
|
||||||
#define AHELP_ACTIVE 1
|
#define AHELP_ACTIVE 1
|
||||||
#define AHELP_CLOSED 2
|
#define AHELP_CLOSED 2
|
||||||
@@ -87,5 +88,5 @@
|
|||||||
#define MAX_KEYPRESS_COMMANDLENGTH 16
|
#define MAX_KEYPRESS_COMMANDLENGTH 16
|
||||||
///Max amount of keypress messages per second over two seconds before client is autokicked
|
///Max amount of keypress messages per second over two seconds before client is autokicked
|
||||||
#define MAX_KEYPRESS_AUTOKICK 100
|
#define MAX_KEYPRESS_AUTOKICK 100
|
||||||
///Length of held key rolling buffer
|
///Length of max held keys
|
||||||
#define HELD_KEY_BUFFER_LENGTH 15
|
#define MAX_HELD_KEYS 15
|
||||||
|
|||||||
@@ -149,9 +149,9 @@
|
|||||||
|
|
||||||
//OPEN TURF ATMOS
|
//OPEN TURF ATMOS
|
||||||
#define OPENTURF_DEFAULT_ATMOS "o2=22;n2=82;TEMP=293.15" //the default air mix that open turfs spawn
|
#define OPENTURF_DEFAULT_ATMOS "o2=22;n2=82;TEMP=293.15" //the default air mix that open turfs spawn
|
||||||
#define TCOMMS_ATMOS "n2=100;TEMP=80" //-193,15°C telecommunications. also used for xenobiology slime killrooms
|
#define TCOMMS_ATMOS "n2=100;TEMP=80" //-193,15degC telecommunications. also used for xenobiology slime killrooms
|
||||||
#define AIRLESS_ATMOS "TEMP=2.7" //space
|
#define AIRLESS_ATMOS "TEMP=2.7" //space
|
||||||
#define FROZEN_ATMOS "o2=22;n2=82;TEMP=180" //-93.15°C snow and ice turfs
|
#define FROZEN_ATMOS "o2=22;n2=82;TEMP=180" //-93.15degC snow and ice turfs
|
||||||
#define BURNMIX_ATMOS "o2=2500;plasma=5000;TEMP=370" //used in the holodeck burn test program
|
#define BURNMIX_ATMOS "o2=2500;plasma=5000;TEMP=370" //used in the holodeck burn test program
|
||||||
|
|
||||||
//ATMOSPHERICS DEPARTMENT GAS TANK TURFS
|
//ATMOSPHERICS DEPARTMENT GAS TANK TURFS
|
||||||
|
|||||||
@@ -34,6 +34,7 @@
|
|||||||
#define CAN_MASTURBATE_WITH (1<<5)
|
#define CAN_MASTURBATE_WITH (1<<5)
|
||||||
#define MASTURBATE_LINKED_ORGAN (1<<6) //used to pass our mission to the linked organ
|
#define MASTURBATE_LINKED_ORGAN (1<<6) //used to pass our mission to the linked organ
|
||||||
#define CAN_CLIMAX_WITH (1<<7)
|
#define CAN_CLIMAX_WITH (1<<7)
|
||||||
|
#define GENITAL_CAN_AROUSE (1<<8)
|
||||||
|
|
||||||
#define COCK_SIZE_MIN 1
|
#define COCK_SIZE_MIN 1
|
||||||
#define COCK_SIZE_MAX 20
|
#define COCK_SIZE_MAX 20
|
||||||
|
|||||||
@@ -184,7 +184,7 @@ GLOBAL_LIST_INIT(shove_disarming_types, typecacheof(list(
|
|||||||
#define BODY_ZONE_PRECISE_R_FOOT "r_foot"
|
#define BODY_ZONE_PRECISE_R_FOOT "r_foot"
|
||||||
|
|
||||||
//We will round to this value in damage calculations.
|
//We will round to this value in damage calculations.
|
||||||
#define DAMAGE_PRECISION 0.1
|
#define DAMAGE_PRECISION 0.01
|
||||||
|
|
||||||
//items total mass, used to calculate their attacks' stamina costs. If not defined, the cost will be (w_class * 1.25)
|
//items total mass, used to calculate their attacks' stamina costs. If not defined, the cost will be (w_class * 1.25)
|
||||||
#define TOTAL_MASS_TINY_ITEM 1.25
|
#define TOTAL_MASS_TINY_ITEM 1.25
|
||||||
|
|||||||
@@ -106,6 +106,9 @@
|
|||||||
|
|
||||||
#define COMSIG_CLICK "atom_click" //from base of atom/Click(): (location, control, params, mob/user)
|
#define COMSIG_CLICK "atom_click" //from base of atom/Click(): (location, control, params, mob/user)
|
||||||
#define COMSIG_CLICK_SHIFT "shift_click" //from base of atom/ShiftClick(): (/mob)
|
#define COMSIG_CLICK_SHIFT "shift_click" //from base of atom/ShiftClick(): (/mob)
|
||||||
|
#define COMPONENT_ALLOW_EXAMINATE 1
|
||||||
|
#define COMPONENT_DENY_EXAMINATE 2 //Higher priority compared to the above one
|
||||||
|
|
||||||
#define COMSIG_CLICK_CTRL "ctrl_click" //from base of atom/CtrlClickOn(): (/mob)
|
#define COMSIG_CLICK_CTRL "ctrl_click" //from base of atom/CtrlClickOn(): (/mob)
|
||||||
#define COMSIG_CLICK_ALT "alt_click" //from base of atom/AltClick(): (/mob)
|
#define COMSIG_CLICK_ALT "alt_click" //from base of atom/AltClick(): (/mob)
|
||||||
#define COMSIG_CLICK_CTRL_SHIFT "ctrl_shift_click" //from base of atom/CtrlShiftClick(/mob)
|
#define COMSIG_CLICK_CTRL_SHIFT "ctrl_shift_click" //from base of atom/CtrlShiftClick(/mob)
|
||||||
@@ -159,7 +162,6 @@
|
|||||||
|
|
||||||
// /mob signals
|
// /mob signals
|
||||||
#define COMSIG_MOB_EXAMINATE "mob_examinate" //from base of /mob/verb/examinate(): (atom/A)
|
#define COMSIG_MOB_EXAMINATE "mob_examinate" //from base of /mob/verb/examinate(): (atom/A)
|
||||||
#define COMPONENT_ALLOW_EXAMINE 1
|
|
||||||
#define COMSIG_MOB_DEATH "mob_death" //from base of mob/death(): (gibbed)
|
#define COMSIG_MOB_DEATH "mob_death" //from base of mob/death(): (gibbed)
|
||||||
#define COMPONENT_BLOCK_DEATH_BROADCAST 1 //stops the death from being broadcasted in deadchat.
|
#define COMPONENT_BLOCK_DEATH_BROADCAST 1 //stops the death from being broadcasted in deadchat.
|
||||||
#define COMSIG_MOB_GHOSTIZE "mob_ghostize" //from base of mob/Ghostize(): (can_reenter_corpse, special, penalize)
|
#define COMSIG_MOB_GHOSTIZE "mob_ghostize" //from base of mob/Ghostize(): (can_reenter_corpse, special, penalize)
|
||||||
@@ -185,19 +187,20 @@
|
|||||||
#define SPEECH_MESSAGE 1
|
#define SPEECH_MESSAGE 1
|
||||||
// #define SPEECH_BUBBLE_TYPE 2
|
// #define SPEECH_BUBBLE_TYPE 2
|
||||||
#define SPEECH_SPANS 3
|
#define SPEECH_SPANS 3
|
||||||
/* #define SPEECH_SANITIZE 4
|
// #define SPEECH_SANITIZE 4
|
||||||
#define SPEECH_LANGUAGE 5
|
#define SPEECH_LANGUAGE 5
|
||||||
#define SPEECH_IGNORE_SPAM 6
|
// #define SPEECH_IGNORE_SPAM 6
|
||||||
#define SPEECH_FORCED 7 */
|
// #define SPEECH_FORCED 7
|
||||||
|
|
||||||
// /mob/living signals
|
// /mob/living signals
|
||||||
#define COMSIG_LIVING_FULLY_HEAL "living_fully_healed" //from base of /mob/living/fully_heal(): (admin_revive)
|
|
||||||
#define COMSIG_LIVING_REGENERATE_LIMBS "living_regenerate_limbs" //from base of /mob/living/regenerate_limbs(): (noheal, excluded_limbs)
|
#define COMSIG_LIVING_REGENERATE_LIMBS "living_regenerate_limbs" //from base of /mob/living/regenerate_limbs(): (noheal, excluded_limbs)
|
||||||
#define COMSIG_LIVING_RESIST "living_resist" //from base of mob/living/resist() (/mob/living)
|
#define COMSIG_LIVING_RESIST "living_resist" //from base of mob/living/resist() (/mob/living)
|
||||||
#define COMSIG_LIVING_IGNITED "living_ignite" //from base of mob/living/IgniteMob() (/mob/living)
|
#define COMSIG_LIVING_IGNITED "living_ignite" //from base of mob/living/IgniteMob() (/mob/living)
|
||||||
#define COMSIG_LIVING_EXTINGUISHED "living_extinguished" //from base of mob/living/ExtinguishMob() (/mob/living)
|
#define COMSIG_LIVING_EXTINGUISHED "living_extinguished" //from base of mob/living/ExtinguishMob() (/mob/living)
|
||||||
#define COMSIG_LIVING_ELECTROCUTE_ACT "living_electrocute_act" //from base of mob/living/electrocute_act(): (shock_damage)
|
#define COMSIG_LIVING_ELECTROCUTE_ACT "living_electrocute_act" //from base of mob/living/electrocute_act(): (shock_damage)
|
||||||
#define COMSIG_LIVING_MINOR_SHOCK "living_minor_shock" //sent by stuff like stunbatons and tasers: ()
|
#define COMSIG_LIVING_MINOR_SHOCK "living_minor_shock" //sent by stuff like stunbatons and tasers: ()
|
||||||
|
#define COMSIG_LIVING_REVIVE "living_revive" //from base of mob/living/revive() (full_heal, admin_revive)
|
||||||
|
#define COMSIG_MOB_CLIENT_LOGIN "comsig_mob_client_login" //sent when a mob/login() finishes: (client)
|
||||||
#define COMSIG_LIVING_GUN_PROCESS_FIRE "living_gun_process_fire" //from base of /obj/item/gun/proc/process_fire(): (atom/target, params, zone_override)
|
#define COMSIG_LIVING_GUN_PROCESS_FIRE "living_gun_process_fire" //from base of /obj/item/gun/proc/process_fire(): (atom/target, params, zone_override)
|
||||||
|
|
||||||
// /mob/living/carbon signals
|
// /mob/living/carbon signals
|
||||||
@@ -275,8 +278,6 @@
|
|||||||
#define COMSIG_TURF_MAKE_DRY "make_turf_try" //(max_strength, immediate, duration_decrease = INFINITY): Returns bool.
|
#define COMSIG_TURF_MAKE_DRY "make_turf_try" //(max_strength, immediate, duration_decrease = INFINITY): Returns bool.
|
||||||
#define COMSIG_COMPONENT_CLEAN_ACT "clean_act" //called on an object to clean it of cleanables. Usualy with soap: (num/strength)
|
#define COMSIG_COMPONENT_CLEAN_ACT "clean_act" //called on an object to clean it of cleanables. Usualy with soap: (num/strength)
|
||||||
|
|
||||||
//Blood color
|
|
||||||
#define COMSIG_BLOOD_COLOR "blood_DNA_to_color" //RGB blood stuff
|
|
||||||
//Food
|
//Food
|
||||||
#define COMSIG_FOOD_EATEN "food_eaten" //from base of obj/item/reagent_containers/food/snacks/attack(): (mob/living/eater, mob/feeder)
|
#define COMSIG_FOOD_EATEN "food_eaten" //from base of obj/item/reagent_containers/food/snacks/attack(): (mob/living/eater, mob/feeder)
|
||||||
|
|
||||||
@@ -294,11 +295,14 @@
|
|||||||
//Nanites
|
//Nanites
|
||||||
#define COMSIG_HAS_NANITES "has_nanites" //() returns TRUE if nanites are found
|
#define COMSIG_HAS_NANITES "has_nanites" //() returns TRUE if nanites are found
|
||||||
#define COMSIG_NANITE_IS_STEALTHY "nanite_is_stealthy" //() returns TRUE if nanites have stealth
|
#define COMSIG_NANITE_IS_STEALTHY "nanite_is_stealthy" //() returns TRUE if nanites have stealth
|
||||||
|
#define COMSIG_NANITE_DELETE "nanite_delete" //() deletes the nanite component
|
||||||
#define COMSIG_NANITE_GET_PROGRAMS "nanite_get_programs" //(list/nanite_programs) - makes the input list a copy the nanites' program list
|
#define COMSIG_NANITE_GET_PROGRAMS "nanite_get_programs" //(list/nanite_programs) - makes the input list a copy the nanites' program list
|
||||||
|
#define COMSIG_NANITE_GET_VOLUME "nanite_get_volume" //(amount) Returns nanite amount
|
||||||
#define COMSIG_NANITE_SET_VOLUME "nanite_set_volume" //(amount) Sets current nanite volume to the given amount
|
#define COMSIG_NANITE_SET_VOLUME "nanite_set_volume" //(amount) Sets current nanite volume to the given amount
|
||||||
#define COMSIG_NANITE_ADJUST_VOLUME "nanite_adjust" //(amount) Adjusts nanite volume by the given amount
|
#define COMSIG_NANITE_ADJUST_VOLUME "nanite_adjust" //(amount) Adjusts nanite volume by the given amount
|
||||||
#define COMSIG_NANITE_SET_MAX_VOLUME "nanite_set_max_volume" //(amount) Sets maximum nanite volume to the given amount
|
#define COMSIG_NANITE_SET_MAX_VOLUME "nanite_set_max_volume" //(amount) Sets maximum nanite volume to the given amount
|
||||||
#define COMSIG_NANITE_SET_CLOUD "nanite_set_cloud" //(amount(0-100)) Sets cloud ID to the given amount
|
#define COMSIG_NANITE_SET_CLOUD "nanite_set_cloud" //(amount(0-100)) Sets cloud ID to the given amount
|
||||||
|
#define COMSIG_NANITE_SET_CLOUD_SYNC "nanite_set_cloud_sync" //(method) Modify cloud sync status. Method can be toggle, enable or disable
|
||||||
#define COMSIG_NANITE_SET_SAFETY "nanite_set_safety" //(amount) Sets safety threshold to the given amount
|
#define COMSIG_NANITE_SET_SAFETY "nanite_set_safety" //(amount) Sets safety threshold to the given amount
|
||||||
#define COMSIG_NANITE_SET_REGEN "nanite_set_regen" //(amount) Sets regeneration rate to the given amount
|
#define COMSIG_NANITE_SET_REGEN "nanite_set_regen" //(amount) Sets regeneration rate to the given amount
|
||||||
#define COMSIG_NANITE_SIGNAL "nanite_signal" //(code(1-9999)) Called when sending a nanite signal to a mob.
|
#define COMSIG_NANITE_SIGNAL "nanite_signal" //(code(1-9999)) Called when sending a nanite signal to a mob.
|
||||||
@@ -306,8 +310,8 @@
|
|||||||
#define COMSIG_NANITE_SCAN "nanite_scan" //(mob/user, full_scan) - sends to chat a scan of the nanites to the user, returns TRUE if nanites are detected
|
#define COMSIG_NANITE_SCAN "nanite_scan" //(mob/user, full_scan) - sends to chat a scan of the nanites to the user, returns TRUE if nanites are detected
|
||||||
#define COMSIG_NANITE_UI_DATA "nanite_ui_data" //(list/data, scan_level) - adds nanite data to the given data list - made for ui_data procs
|
#define COMSIG_NANITE_UI_DATA "nanite_ui_data" //(list/data, scan_level) - adds nanite data to the given data list - made for ui_data procs
|
||||||
#define COMSIG_NANITE_ADD_PROGRAM "nanite_add_program" //(datum/nanite_program/new_program, datum/nanite_program/source_program) Called when adding a program to a nanite component
|
#define COMSIG_NANITE_ADD_PROGRAM "nanite_add_program" //(datum/nanite_program/new_program, datum/nanite_program/source_program) Called when adding a program to a nanite component
|
||||||
#define COMPONENT_PROGRAM_INSTALLED 1 //Installation successful
|
#define COMPONENT_PROGRAM_INSTALLED 1 //Installation successful
|
||||||
#define COMPONENT_PROGRAM_NOT_INSTALLED 2 //Installation failed, but there are still nanites
|
#define COMPONENT_PROGRAM_NOT_INSTALLED 2 //Installation failed, but there are still nanites
|
||||||
#define COMSIG_NANITE_SYNC "nanite_sync" //(datum/component/nanites, full_overwrite, copy_activation) Called to sync the target's nanites to a given nanite component
|
#define COMSIG_NANITE_SYNC "nanite_sync" //(datum/component/nanites, full_overwrite, copy_activation) Called to sync the target's nanites to a given nanite component
|
||||||
|
|
||||||
// /datum/component/storage signals
|
// /datum/component/storage signals
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
//config files
|
//config files
|
||||||
#define CONFIG_GET(X) global.config.Get(/datum/config_entry/##X)
|
#define CONFIG_GET(X) global.config.Get(/datum/config_entry/##X)
|
||||||
#define CONFIG_SET(X, Y) global.config.Set(/datum/config_entry/##X, ##Y)
|
#define CONFIG_SET(X, Y) global.config.Set(/datum/config_entry/##X, ##Y)
|
||||||
|
#define CONFIG_GET_ENTRY(X) global.config.GetEntryDatum(/datum/config_entry/##X)
|
||||||
|
|
||||||
#define CONFIG_MAPS_FILE "maps.txt"
|
#define CONFIG_MAPS_FILE "maps.txt"
|
||||||
|
|
||||||
|
|||||||
@@ -5,6 +5,7 @@
|
|||||||
|
|
||||||
#define NO_ASSASSIN (1<<0)
|
#define NO_ASSASSIN (1<<0)
|
||||||
#define WAROPS_ALWAYS_ALLOWED (1<<1)
|
#define WAROPS_ALWAYS_ALLOWED (1<<1)
|
||||||
|
#define USE_PREF_WEIGHTS (1<<2)
|
||||||
|
|
||||||
#define ONLY_RULESET (1<<0)
|
#define ONLY_RULESET (1<<0)
|
||||||
#define HIGHLANDER_RULESET (1<<1)
|
#define HIGHLANDER_RULESET (1<<1)
|
||||||
|
|||||||
@@ -54,13 +54,13 @@ GLOBAL_LIST_INIT(bitflags, list(1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 204
|
|||||||
#define PASSCLOSEDTURF (1<<5)
|
#define PASSCLOSEDTURF (1<<5)
|
||||||
#define LETPASSTHROW (1<<6)
|
#define LETPASSTHROW (1<<6)
|
||||||
|
|
||||||
|
|
||||||
//Movement Types
|
//Movement Types
|
||||||
#define GROUND (1<<0)
|
#define GROUND (1<<0)
|
||||||
#define FLYING (1<<1)
|
#define FLYING (1<<1)
|
||||||
#define VENTCRAWLING (1<<2)
|
#define VENTCRAWLING (1<<2)
|
||||||
#define FLOATING (1<<3)
|
#define FLOATING (1<<3)
|
||||||
#define UNSTOPPABLE (1<<4) //When moving, will Bump()/Cross()/Uncross() everything, but won't be stopped.
|
#define UNSTOPPABLE (1<<4) //When moving, will Bump()/Cross()/Uncross() everything, but won't be stopped.
|
||||||
|
#define CRAWLING (1<<5) //Applied if you're crawling around on the ground/resting.
|
||||||
|
|
||||||
//Fire and Acid stuff, for resistance_flags
|
//Fire and Acid stuff, for resistance_flags
|
||||||
#define LAVA_PROOF (1<<0)
|
#define LAVA_PROOF (1<<0)
|
||||||
|
|||||||
+13
-12
@@ -24,18 +24,19 @@
|
|||||||
#define LOG_SAY (1 << 1)
|
#define LOG_SAY (1 << 1)
|
||||||
#define LOG_WHISPER (1 << 2)
|
#define LOG_WHISPER (1 << 2)
|
||||||
#define LOG_EMOTE (1 << 3)
|
#define LOG_EMOTE (1 << 3)
|
||||||
#define LOG_DSAY (1 << 4)
|
#define LOG_SUBTLER (1 << 4)
|
||||||
#define LOG_PDA (1 << 5)
|
#define LOG_DSAY (1 << 5)
|
||||||
#define LOG_CHAT (1 << 6)
|
#define LOG_PDA (1 << 6)
|
||||||
#define LOG_COMMENT (1 << 7)
|
#define LOG_CHAT (1 << 7)
|
||||||
#define LOG_TELECOMMS (1 << 8)
|
#define LOG_COMMENT (1 << 8)
|
||||||
#define LOG_OOC (1 << 9)
|
#define LOG_TELECOMMS (1 << 9)
|
||||||
#define LOG_ADMIN (1 << 10)
|
#define LOG_OOC (1 << 10)
|
||||||
#define LOG_OWNERSHIP (1 << 11)
|
#define LOG_ADMIN (1 << 11)
|
||||||
#define LOG_GAME (1 << 12)
|
#define LOG_OWNERSHIP (1 << 12)
|
||||||
#define LOG_ADMIN_PRIVATE (1 << 13)
|
#define LOG_GAME (1 << 13)
|
||||||
#define LOG_ASAY (1 << 14)
|
#define LOG_ADMIN_PRIVATE (1 << 14)
|
||||||
#define LOG_VIRUS (1 << 15)
|
#define LOG_ASAY (1 << 15)
|
||||||
|
#define LOG_VIRUS (1 << 16)
|
||||||
|
|
||||||
//Individual logging panel pages
|
//Individual logging panel pages
|
||||||
#define INDIVIDUAL_ATTACK_LOG (LOG_ATTACK)
|
#define INDIVIDUAL_ATTACK_LOG (LOG_ATTACK)
|
||||||
|
|||||||
@@ -96,11 +96,21 @@
|
|||||||
#define NUKESTATE_CORE_EXPOSED 1
|
#define NUKESTATE_CORE_EXPOSED 1
|
||||||
#define NUKESTATE_CORE_REMOVED 0
|
#define NUKESTATE_CORE_REMOVED 0
|
||||||
|
|
||||||
|
#define NUKEUI_AWAIT_DISK 0
|
||||||
|
#define NUKEUI_AWAIT_CODE 1
|
||||||
|
#define NUKEUI_AWAIT_TIMER 2
|
||||||
|
#define NUKEUI_AWAIT_ARM 3
|
||||||
|
#define NUKEUI_TIMING 4
|
||||||
|
#define NUKEUI_EXPLODED 5
|
||||||
|
|
||||||
#define NUKE_OFF_LOCKED 0
|
#define NUKE_OFF_LOCKED 0
|
||||||
#define NUKE_OFF_UNLOCKED 1
|
#define NUKE_OFF_UNLOCKED 1
|
||||||
#define NUKE_ON_TIMING 2
|
#define NUKE_ON_TIMING 2
|
||||||
#define NUKE_ON_EXPLODING 3
|
#define NUKE_ON_EXPLODING 3
|
||||||
|
|
||||||
|
#define MACHINE_NOT_ELECTRIFIED 0
|
||||||
|
#define MACHINE_ELECTRIFIED_PERMANENT -1
|
||||||
|
#define MACHINE_DEFAULT_ELECTRIFY_TIME 30
|
||||||
|
|
||||||
//these flags are used to tell the DNA modifier if a plant gene cannot be extracted or modified.
|
//these flags are used to tell the DNA modifier if a plant gene cannot be extracted or modified.
|
||||||
#define PLANT_GENE_REMOVABLE (1<<0)
|
#define PLANT_GENE_REMOVABLE (1<<0)
|
||||||
|
|||||||
@@ -200,3 +200,5 @@
|
|||||||
|
|
||||||
#define RULE_OF_THREE(a, b, x) ((a*x)/b)
|
#define RULE_OF_THREE(a, b, x) ((a*x)/b)
|
||||||
// )
|
// )
|
||||||
|
|
||||||
|
#define MANHATTAN_DISTANCE(a, b) (abs(a.x - b.x) + abs(a.y - b.y))
|
||||||
@@ -406,6 +406,7 @@ GLOBAL_LIST_INIT(pda_reskins, list(PDA_SKIN_CLASSIC = 'icons/obj/pda.dmi', PDA_S
|
|||||||
#define DUMMY_HUMAN_SLOT_HOLOFORM "dummy_holoform_generation"
|
#define DUMMY_HUMAN_SLOT_HOLOFORM "dummy_holoform_generation"
|
||||||
#define DUMMY_HUMAN_SLOT_ADMIN "admintools"
|
#define DUMMY_HUMAN_SLOT_ADMIN "admintools"
|
||||||
#define DUMMY_HUMAN_SLOT_MANIFEST "dummy_manifest_generation"
|
#define DUMMY_HUMAN_SLOT_MANIFEST "dummy_manifest_generation"
|
||||||
|
#define DUMMY_HUMAN_SLOT_HALLUCINATION "dummy_hallucination"
|
||||||
|
|
||||||
#define PR_ANNOUNCEMENTS_PER_ROUND 5 //The number of unique PR announcements allowed per round
|
#define PR_ANNOUNCEMENTS_PER_ROUND 5 //The number of unique PR announcements allowed per round
|
||||||
//This makes sure that a single person can only spam 3 reopens and 3 closes before being ignored
|
//This makes sure that a single person can only spam 3 reopens and 3 closes before being ignored
|
||||||
|
|||||||
+16
-14
@@ -35,17 +35,17 @@
|
|||||||
#define BLOODCRAWL 1
|
#define BLOODCRAWL 1
|
||||||
#define BLOODCRAWL_EAT 2
|
#define BLOODCRAWL_EAT 2
|
||||||
|
|
||||||
//Mob bio-types
|
//Mob bio-types flags
|
||||||
#define MOB_ORGANIC "organic"
|
#define MOB_ORGANIC 1 << 0
|
||||||
#define MOB_INORGANIC "inorganic"
|
#define MOB_MINERAL 1 << 1
|
||||||
#define MOB_ROBOTIC "robotic"
|
#define MOB_ROBOTIC 1 << 2
|
||||||
#define MOB_UNDEAD "undead"
|
#define MOB_UNDEAD 1 << 3
|
||||||
#define MOB_HUMANOID "humanoid"
|
#define MOB_HUMANOID 1 << 4
|
||||||
#define MOB_BUG "bug"
|
#define MOB_BUG 1 << 5
|
||||||
#define MOB_BEAST "beast"
|
#define MOB_BEAST 1 << 6
|
||||||
#define MOB_EPIC "epic" //megafauna
|
#define MOB_EPIC 1 << 7 //megafauna
|
||||||
#define MOB_REPTILE "reptile"
|
#define MOB_REPTILE 1 << 8
|
||||||
#define MOB_SPIRIT "spirit"
|
#define MOB_SPIRIT 1 << 9
|
||||||
|
|
||||||
//Organ defines for carbon mobs
|
//Organ defines for carbon mobs
|
||||||
#define ORGAN_ORGANIC 1
|
#define ORGAN_ORGANIC 1
|
||||||
@@ -200,9 +200,11 @@
|
|||||||
#define NO_SLIP_WHEN_WALKING (1<<0)
|
#define NO_SLIP_WHEN_WALKING (1<<0)
|
||||||
#define SLIDE (1<<1)
|
#define SLIDE (1<<1)
|
||||||
#define GALOSHES_DONT_HELP (1<<2)
|
#define GALOSHES_DONT_HELP (1<<2)
|
||||||
#define SLIDE_ICE (1<<3)
|
#define FLYING_DOESNT_HELP (1<<3)
|
||||||
#define SLIP_WHEN_CRAWLING (1<<4) //clown planet ruin
|
#define SLIDE_ICE (1<<4)
|
||||||
#define SLIP_WHEN_JOGGING (1<<5) //slips prevented by walking are also dodged if the mob is not sprinting or fatigued... unless this flag is on.
|
#define SLIP_WHEN_CRAWLING (1<<5) //clown planet ruin amongst others
|
||||||
|
#define SLIP_WHEN_JOGGING (1<<6) //slips prevented by walking are also dodged if the mob is nor sprinting or fatigued... unless this flag is on.
|
||||||
|
|
||||||
|
|
||||||
#define MAX_CHICKENS 50
|
#define MAX_CHICKENS 50
|
||||||
|
|
||||||
|
|||||||
@@ -1,11 +1,44 @@
|
|||||||
#define NANITE_TIMER_DEACTIVATE 1
|
|
||||||
#define NANITE_TIMER_SELFDELETE 2
|
|
||||||
#define NANITE_TIMER_TRIGGER 3
|
|
||||||
#define NANITE_TIMER_RESET 4
|
|
||||||
|
|
||||||
#define NANITE_SYNC_DELAY 300
|
#define NANITE_SYNC_DELAY 300
|
||||||
|
|
||||||
#define NANITE_SHOCK_IMMUNE 1
|
#define NANITE_SHOCK_IMMUNE 1
|
||||||
#define NANITE_EMP_IMMUNE 2
|
#define NANITE_EMP_IMMUNE 2
|
||||||
|
|
||||||
#define NANITE_PROGRAM_LIMIT 20
|
#define NANITE_PROGRAM_LIMIT 20
|
||||||
|
|
||||||
|
|
||||||
|
#define NANITE_BASE_RESEARCH 3.5
|
||||||
|
|
||||||
|
#define NANITE_CLOUD_TOGGLE 1
|
||||||
|
#define NANITE_CLOUD_DISABLE 2
|
||||||
|
#define NANITE_CLOUD_ENABLE 3
|
||||||
|
|
||||||
|
///Nanite extra settings types: used to help uis know what type an extra setting is
|
||||||
|
#define NESTYPE_TEXT "text"
|
||||||
|
#define NESTYPE_NUMBER "number"
|
||||||
|
#define NESTYPE_TYPE "type"
|
||||||
|
#define NESTYPE_BOOLEAN "boolean"
|
||||||
|
|
||||||
|
///Nanite Extra Settings - Note that these will also be the names displayed in the UI
|
||||||
|
#define NES_SENT_CODE "Sent Code"
|
||||||
|
#define NES_DELAY "Delay"
|
||||||
|
#define NES_MODE "Mode"
|
||||||
|
#define NES_COMM_CODE "Comm Code"
|
||||||
|
#define NES_RELAY_CHANNEL "Relay Channel"
|
||||||
|
#define NES_HEALTH_PERCENT "Health Percent"
|
||||||
|
#define NES_DIRECTION "Direction"
|
||||||
|
#define NES_NANITE_PERCENT "Nanite Percent"
|
||||||
|
#define NES_DAMAGE_TYPE "Damage Type"
|
||||||
|
#define NES_DAMAGE "Damage"
|
||||||
|
#define NES_SENTENCE "Sentence"
|
||||||
|
#define NES_MESSAGE "Message"
|
||||||
|
#define NES_DIRECTIVE "Directive"
|
||||||
|
#define NES_INCLUSIVE_MODE "Inclusive Mode"
|
||||||
|
#define NES_HALLUCINATION_TYPE "Hallucination Type"
|
||||||
|
#define NES_HALLUCINATION_DETAIL "Hallucination Detail"
|
||||||
|
#define NES_MOOD_MESSAGE "Mood Message"
|
||||||
|
#define NES_PROGRAM_OVERWRITE "Program Overwrite"
|
||||||
|
#define NES_CLOUD_OVERWRITE "Cloud Overwrite"
|
||||||
|
#define NES_SCAN_TYPE "Scan Type"
|
||||||
|
#define NES_BUTTON_NAME "Button Name"
|
||||||
|
#define NES_ICON "Icon"
|
||||||
|
#define NES_COLOR "Color"
|
||||||
|
|||||||
+13
-12
@@ -17,18 +17,19 @@
|
|||||||
|
|
||||||
// Flags for the item_flags var on /obj/item
|
// Flags for the item_flags var on /obj/item
|
||||||
|
|
||||||
#define BEING_REMOVED (1<<0)
|
#define BEING_REMOVED (1<<0)
|
||||||
#define IN_INVENTORY (1<<1) //is this item equipped into an inventory slot or hand of a mob? used for tooltips
|
#define IN_INVENTORY (1<<1) //is this item equipped into an inventory slot or hand of a mob? used for tooltips
|
||||||
#define FORCE_STRING_OVERRIDE (1<<2) //used for tooltips
|
#define FORCE_STRING_OVERRIDE (1<<2) //used for tooltips
|
||||||
#define NEEDS_PERMIT (1<<3) //Used by security bots to determine if this item is safe for public use.
|
#define NEEDS_PERMIT (1<<3) //Used by security bots to determine if this item is safe for public use.
|
||||||
#define SLOWS_WHILE_IN_HAND (1<<4)
|
#define SLOWS_WHILE_IN_HAND (1<<4)
|
||||||
#define NO_MAT_REDEMPTION (1<<5) //Stops you from putting things like an RCD or other items into an ORM or protolathe for materials.
|
#define NO_MAT_REDEMPTION (1<<5) //Stops you from putting things like an RCD or other items into an ORM or protolathe for materials.
|
||||||
#define DROPDEL (1<<6) //When dropped, it calls qdel on itself
|
#define DROPDEL (1<<6) //When dropped, it calls qdel on itself
|
||||||
#define NOBLUDGEON (1<<7) //when an item has this it produces no "X has been hit by Y with Z" message in the default attackby()
|
#define NOBLUDGEON (1<<7) //when an item has this it produces no "X has been hit by Y with Z" message in the default attackby()
|
||||||
#define ABSTRACT (1<<8) //for all things that are technically items but used for various different stuff
|
#define ABSTRACT (1<<8) //for all things that are technically items but used for various different stuff
|
||||||
#define IMMUTABLE_SLOW (1<<9) //When players should not be able to change the slowdown of the item (Speed potions, ect)
|
#define IMMUTABLE_SLOW (1<<9) //When players should not be able to change the slowdown of the item (Speed potions, ect)
|
||||||
#define SURGICAL_TOOL (1<<10) //Tool commonly used for surgery: won't attack targets in an active surgical operation on help intent (in case of mistakes)
|
#define SURGICAL_TOOL (1<<10) //Tool commonly used for surgery: won't attack targets in an active surgical operation on help intent (in case of mistakes)
|
||||||
#define NO_UNIFORM_REQUIRED (1<<11) //Can be worn on certain slots (currently belt and id) that would otherwise require an uniform.
|
#define NO_UNIFORM_REQUIRED (1<<11) //Can be worn on certain slots (currently belt and id) that would otherwise require an uniform.
|
||||||
|
#define NO_ATTACK_CHAIN_SOFT_STAMCRIT (1<<12) //Entirely blocks melee_attack_chain() if user is soft stamcritted. Uses getStaminaLoss() to check at this point in time. THIS DOES NOT BLOCK RANGED AFTERATTACK()S, ONLY MELEE RANGE AFTERATTACK()S.
|
||||||
|
|
||||||
// Flags for the clothing_flags var on /obj/item/clothing
|
// Flags for the clothing_flags var on /obj/item/clothing
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,13 @@
|
|||||||
|
//TODO: move these to their own file
|
||||||
|
#define POOL_FRIGID 1
|
||||||
|
#define POOL_COOL 2
|
||||||
|
#define POOL_NORMAL 3
|
||||||
|
#define POOL_WARM 4
|
||||||
|
#define POOL_SCALDING 5
|
||||||
|
|
||||||
|
GLOBAL_LIST_INIT(blacklisted_pool_reagents, list(
|
||||||
|
/datum/reagent/toxin/plasma, /datum/reagent/oxygen, /datum/reagent/nitrous_oxide, /datum/reagent/nitrogen, //gases
|
||||||
|
/datum/reagent/fermi, //blanket fermichem ban sorry. this also covers mkultra, genital enlargers, etc etc.
|
||||||
|
/datum/reagent/drug/aphrodisiac, /datum/reagent/drug/anaphrodisiac, /datum/reagent/drug/aphrodisiacplus, /datum/reagent/drug/anaphrodisiacplus, //literally asking for prefbreaks
|
||||||
|
/datum/reagent/consumable/femcum, /datum/reagent/consumable/semen //NO.
|
||||||
|
))
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
#define PROFILE_START ;PROFILE_STORE = list();PROFILE_SET;
|
#define LINE_PROFILE_START ;PROFILE_STORE = list();PROFILE_SET;
|
||||||
#define PROFILE_STOP ;PROFILE_STORE = null;
|
#define LINE_PROFILE_STOP ;PROFILE_STORE = null;
|
||||||
|
|
||||||
#define PROFILE_SET ;PROFILE_TIME = TICK_USAGE_REAL; PROFILE_LINE = __LINE__; PROFILE_FILE = __FILE__; PROFILE_SLEEPCHECK = world.time;
|
#define PROFILE_SET ;PROFILE_TIME = TICK_USAGE_REAL; PROFILE_LINE = __LINE__; PROFILE_FILE = __FILE__; PROFILE_SLEEPCHECK = world.time;
|
||||||
|
|
||||||
|
|||||||
@@ -8,7 +8,7 @@
|
|||||||
#define REAGENT_PURITY_ACCURACY 0.001
|
#define REAGENT_PURITY_ACCURACY 0.001
|
||||||
#define DEFAULT_SPECIFIC_HEAT 200
|
#define DEFAULT_SPECIFIC_HEAT 200
|
||||||
|
|
||||||
// container_type defines
|
//reagents_holder_flags defines
|
||||||
#define INJECTABLE (1<<0) // Makes it possible to add reagents through droppers and syringes.
|
#define INJECTABLE (1<<0) // Makes it possible to add reagents through droppers and syringes.
|
||||||
#define DRAWABLE (1<<1) // Makes it possible to remove reagents through syringes.
|
#define DRAWABLE (1<<1) // Makes it possible to remove reagents through syringes.
|
||||||
|
|
||||||
@@ -22,6 +22,11 @@
|
|||||||
// Is an open container for all intents and purposes.
|
// Is an open container for all intents and purposes.
|
||||||
#define OPENCONTAINER (REFILLABLE | DRAINABLE | TRANSPARENT)
|
#define OPENCONTAINER (REFILLABLE | DRAINABLE | TRANSPARENT)
|
||||||
|
|
||||||
|
//reagents_value defines, for cargo stuff.
|
||||||
|
#define DEFAULT_REAGENTS_VALUE 1
|
||||||
|
#define NO_REAGENTS_VALUE 0
|
||||||
|
#define HARVEST_REAGENTS_VALUE 0.3
|
||||||
|
|
||||||
|
|
||||||
#define TOUCH 1 // splashing
|
#define TOUCH 1 // splashing
|
||||||
#define INGEST 2 // ingestion
|
#define INGEST 2 // ingestion
|
||||||
@@ -29,12 +34,19 @@
|
|||||||
#define PATCH 4 // patches
|
#define PATCH 4 // patches
|
||||||
#define INJECT 5 // injection
|
#define INJECT 5 // injection
|
||||||
|
|
||||||
|
//container_flags
|
||||||
|
#define PH_WEAK (1 << 0)
|
||||||
|
#define TEMP_WEAK (1 << 1)
|
||||||
|
#define APTFT_VERB (1 << 2) //APTFT stands for "amount per transfer from this"
|
||||||
|
#define APTFT_ALTCLICK (1 << 3)
|
||||||
|
|
||||||
//defines passed through to the on_reagent_change proc
|
//defines passed through to the on_reagent_change proc
|
||||||
#define DEL_REAGENT 1 // reagent deleted (fully cleared)
|
#define DEL_REAGENT 1 // reagent deleted (fully cleared)
|
||||||
#define ADD_REAGENT 2 // reagent added
|
#define ADD_REAGENT 2 // reagent added
|
||||||
#define REM_REAGENT 3 // reagent removed (may still exist)
|
#define REM_REAGENT 3 // reagent removed (may still exist)
|
||||||
|
|
||||||
|
#define THRESHOLD_UNHUSK 50 // health threshold for synthflesh/rezadone to unhusk someone
|
||||||
|
|
||||||
//reagent bitflags, used for altering how they works
|
//reagent bitflags, used for altering how they works
|
||||||
#define REAGENT_DEAD_PROCESS (1<<0) //calls on_mob_dead() if present in a dead body
|
#define REAGENT_DEAD_PROCESS (1<<0) //calls on_mob_dead() if present in a dead body
|
||||||
#define REAGENT_DONOTSPLIT (1<<1) //Do not split the chem at all during processing
|
#define REAGENT_DONOTSPLIT (1<<1) //Do not split the chem at all during processing
|
||||||
|
|||||||
@@ -54,3 +54,9 @@
|
|||||||
|
|
||||||
//Checks to determine borg availability depending on the server's config. These are defines in the interest of reducing copypasta
|
//Checks to determine borg availability depending on the server's config. These are defines in the interest of reducing copypasta
|
||||||
#define BORG_SEC_AVAILABLE (!CONFIG_GET(flag/disable_secborg) && GLOB.security_level >= CONFIG_GET(number/minimum_secborg_alert))
|
#define BORG_SEC_AVAILABLE (!CONFIG_GET(flag/disable_secborg) && GLOB.security_level >= CONFIG_GET(number/minimum_secborg_alert))
|
||||||
|
|
||||||
|
//silicon_priviledges flags
|
||||||
|
#define PRIVILEDGES_SILICON (1<<0)
|
||||||
|
#define PRIVILEDGES_PAI (1<<1)
|
||||||
|
#define PRIVILEDGES_BOT (1<<2)
|
||||||
|
#define PRIVILEDGES_DRONE (1<<3)
|
||||||
|
|||||||
@@ -37,7 +37,8 @@
|
|||||||
#define ROLE_GANG "gangster"
|
#define ROLE_GANG "gangster"
|
||||||
#define ROLE_BLOODSUCKER "bloodsucker"
|
#define ROLE_BLOODSUCKER "bloodsucker"
|
||||||
//#define ROLE_MONSTERHUNTER "monster hunter" Disabled for now
|
//#define ROLE_MONSTERHUNTER "monster hunter" Disabled for now
|
||||||
|
#define ROLE_GHOSTCAFE "ghostcafe"
|
||||||
|
#define ROLE_MINOR_ANTAG "minorantag"
|
||||||
//Missing assignment means it's not a gamemode specific role, IT'S NOT A BUG OR ERROR.
|
//Missing assignment means it's not a gamemode specific role, IT'S NOT A BUG OR ERROR.
|
||||||
//The gamemode specific ones are just so the gamemodes can query whether a player is old enough
|
//The gamemode specific ones are just so the gamemodes can query whether a player is old enough
|
||||||
//(in game days played) to play that role
|
//(in game days played) to play that role
|
||||||
|
|||||||
@@ -81,6 +81,7 @@
|
|||||||
|
|
||||||
//Don't set this very much higher then 1024 unless you like inviting people in to dos your server with message spam
|
//Don't set this very much higher then 1024 unless you like inviting people in to dos your server with message spam
|
||||||
#define MAX_MESSAGE_LEN 2048 //Citadel edit: What's the WORST that could happen?
|
#define MAX_MESSAGE_LEN 2048 //Citadel edit: What's the WORST that could happen?
|
||||||
|
#define MAX_FAVOR_LEN 4096 //double the maximum message length.
|
||||||
#define MAX_NAME_LEN 42
|
#define MAX_NAME_LEN 42
|
||||||
#define MAX_BROADCAST_LEN 512
|
#define MAX_BROADCAST_LEN 512
|
||||||
#define MAX_CHARTER_LEN 80
|
#define MAX_CHARTER_LEN 80
|
||||||
|
|||||||
@@ -11,3 +11,8 @@
|
|||||||
#define SHOULD_CALL_PARENT(X)
|
#define SHOULD_CALL_PARENT(X)
|
||||||
#define UNLINT(X) X
|
#define UNLINT(X) X
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/world/proc/enable_debugger()
|
||||||
|
var/dll = world.GetConfig("env", "EXTOOLS_DLL")
|
||||||
|
if (dll)
|
||||||
|
call(dll, "debug_initialize")()
|
||||||
|
|||||||
@@ -46,7 +46,9 @@
|
|||||||
|
|
||||||
#define STATUS_EFFECT_SLEEPING /datum/status_effect/incapacitating/sleeping //the affected is asleep
|
#define STATUS_EFFECT_SLEEPING /datum/status_effect/incapacitating/sleeping //the affected is asleep
|
||||||
|
|
||||||
#define STATUS_EFFECT_TASED /datum/status_effect/no_combat_mode/electrode/ //the affected has been tased, preventing fine muscle control
|
#define STATUS_EFFECT_TASED_WEAK /datum/status_effect/electrode //not as crippling, just slows down
|
||||||
|
|
||||||
|
#define STATUS_EFFECT_TASED /datum/status_effect/electrode/no_combat_mode //the affected has been tased, preventing fine muscle control
|
||||||
|
|
||||||
#define STATUS_EFFECT_PACIFY /datum/status_effect/pacify //the affected is pacified, preventing direct hostile actions
|
#define STATUS_EFFECT_PACIFY /datum/status_effect/pacify //the affected is pacified, preventing direct hostile actions
|
||||||
|
|
||||||
|
|||||||
@@ -47,6 +47,7 @@
|
|||||||
// Subsystems shutdown in the reverse of the order they initialize in
|
// Subsystems shutdown in the reverse of the order they initialize in
|
||||||
// The numbers just define the ordering, they are meaningless otherwise.
|
// The numbers just define the ordering, they are meaningless otherwise.
|
||||||
|
|
||||||
|
#define INIT_ORDER_PROFILER 101
|
||||||
#define INIT_ORDER_FAIL2TOPIC 22
|
#define INIT_ORDER_FAIL2TOPIC 22
|
||||||
#define INIT_ORDER_TITLE 20
|
#define INIT_ORDER_TITLE 20
|
||||||
#define INIT_ORDER_GARBAGE 19
|
#define INIT_ORDER_GARBAGE 19
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
#define TGS_EXTERNAL_CONFIGURATION
|
#define TGS_EXTERNAL_CONFIGURATION
|
||||||
|
#define TGS_V3_API
|
||||||
#define TGS_DEFINE_AND_SET_GLOBAL(Name, Value) GLOBAL_VAR_INIT(##Name, ##Value); GLOBAL_PROTECT(##Name)
|
#define TGS_DEFINE_AND_SET_GLOBAL(Name, Value) GLOBAL_VAR_INIT(##Name, ##Value); GLOBAL_PROTECT(##Name)
|
||||||
#define TGS_READ_GLOBAL(Name) GLOB.##Name
|
#define TGS_READ_GLOBAL(Name) GLOB.##Name
|
||||||
#define TGS_WRITE_GLOBAL(Name, Value) GLOB.##Name = ##Value
|
#define TGS_WRITE_GLOBAL(Name, Value) GLOB.##Name = ##Value
|
||||||
|
|||||||
+21
-5
@@ -107,6 +107,22 @@
|
|||||||
var/commit //full sha of compiled commit
|
var/commit //full sha of compiled commit
|
||||||
var/origin_commit //full sha of last known remote commit. This may be null if the TGS repository is not currently tracking a remote branch
|
var/origin_commit //full sha of last known remote commit. This may be null if the TGS repository is not currently tracking a remote branch
|
||||||
|
|
||||||
|
//represents a version of tgstation-server
|
||||||
|
/datum/tgs_version
|
||||||
|
var/suite //The suite version, can be >=3
|
||||||
|
|
||||||
|
//this group of variables can be null to represent a wild card
|
||||||
|
var/major //The major version
|
||||||
|
var/minor //The minor version
|
||||||
|
var/patch //The patch version
|
||||||
|
|
||||||
|
var/raw_parameter //The unparsed parameter
|
||||||
|
var/deprefixed_parameter //The version only bit of raw_parameter
|
||||||
|
|
||||||
|
//if the tgs_version is a wildcard version
|
||||||
|
/datum/tgs_version/proc/Wildcard()
|
||||||
|
return
|
||||||
|
|
||||||
//represents a merge of a GitHub pull request
|
//represents a merge of a GitHub pull request
|
||||||
/datum/tgs_revision_information/test_merge
|
/datum/tgs_revision_information/test_merge
|
||||||
var/number //pull request number
|
var/number //pull request number
|
||||||
@@ -155,22 +171,22 @@
|
|||||||
|
|
||||||
//FUNCTIONS
|
//FUNCTIONS
|
||||||
|
|
||||||
//Returns the respective string version of the API
|
//Returns the respective supported /datum/tgs_version of the API
|
||||||
/world/proc/TgsMaximumAPIVersion()
|
/world/proc/TgsMaximumAPIVersion()
|
||||||
return
|
return
|
||||||
|
|
||||||
/world/proc/TgsMinimumAPIVersion()
|
/world/proc/TgsMinimumAPIVersion()
|
||||||
return
|
return
|
||||||
|
|
||||||
//Gets the current version of the server tools running the server
|
|
||||||
/world/proc/TgsVersion()
|
|
||||||
return
|
|
||||||
|
|
||||||
//Returns TRUE if the world was launched under the server tools and the API matches, FALSE otherwise
|
//Returns TRUE if the world was launched under the server tools and the API matches, FALSE otherwise
|
||||||
//No function below this succeeds if it returns FALSE
|
//No function below this succeeds if it returns FALSE
|
||||||
/world/proc/TgsAvailable()
|
/world/proc/TgsAvailable()
|
||||||
return
|
return
|
||||||
|
|
||||||
|
//Gets the current /datum/tgs_version of the server tools running the server
|
||||||
|
/world/proc/TgsVersion()
|
||||||
|
return
|
||||||
|
|
||||||
/world/proc/TgsInstanceName()
|
/world/proc/TgsInstanceName()
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|||||||
@@ -54,5 +54,5 @@ When using time2text(), please use "DDD" to find the weekday. Refrain from using
|
|||||||
#define WORLDTIME2TEXT(format) GAMETIMESTAMP(format, world.time)
|
#define WORLDTIME2TEXT(format) GAMETIMESTAMP(format, world.time)
|
||||||
#define WORLDTIMEOFDAY2TEXT(format) GAMETIMESTAMP(format, world.timeofday)
|
#define WORLDTIMEOFDAY2TEXT(format) GAMETIMESTAMP(format, world.timeofday)
|
||||||
#define TIME_STAMP(format, showds) showds ? "[WORLDTIMEOFDAY2TEXT(format)]:[world.timeofday % 10]" : WORLDTIMEOFDAY2TEXT(format)
|
#define TIME_STAMP(format, showds) showds ? "[WORLDTIMEOFDAY2TEXT(format)]:[world.timeofday % 10]" : WORLDTIMEOFDAY2TEXT(format)
|
||||||
#define STATION_TIME(display_only) ((((world.time - SSticker.round_start_time) * SSticker.station_time_rate_multiplier) + SSticker.gametime_offset) % 864000) - (display_only? GLOB.timezoneOffset : 0)
|
#define STATION_TIME(display_only, wtime) ((((wtime - SSticker.round_start_time) * SSticker.station_time_rate_multiplier) + SSticker.gametime_offset) % 864000) - (display_only? GLOB.timezoneOffset : 0)
|
||||||
#define STATION_TIME_TIMESTAMP(format) time2text(STATION_TIME(TRUE), format)
|
#define STATION_TIME_TIMESTAMP(format, wtime) time2text(STATION_TIME(TRUE, wtime), format)
|
||||||
|
|||||||
@@ -55,6 +55,7 @@
|
|||||||
} while (0)
|
} while (0)
|
||||||
#define HAS_TRAIT(target, trait) (target.status_traits ? (target.status_traits[trait] ? TRUE : FALSE) : FALSE)
|
#define HAS_TRAIT(target, trait) (target.status_traits ? (target.status_traits[trait] ? TRUE : FALSE) : FALSE)
|
||||||
#define HAS_TRAIT_FROM(target, trait, source) (target.status_traits ? (target.status_traits[trait] ? (source in target.status_traits[trait]) : FALSE) : FALSE)
|
#define HAS_TRAIT_FROM(target, trait, source) (target.status_traits ? (target.status_traits[trait] ? (source in target.status_traits[trait]) : FALSE) : FALSE)
|
||||||
|
#define HAS_TRAIT_NOT_FROM(target, trait, source) (target.status_traits ? (target.status_traits[trait] ? (length(target.status_traits[trait] - source) > 0) : FALSE) : FALSE)
|
||||||
|
|
||||||
//mob traits
|
//mob traits
|
||||||
#define TRAIT_BLIND "blind"
|
#define TRAIT_BLIND "blind"
|
||||||
@@ -110,6 +111,7 @@
|
|||||||
#define TRAIT_NOHARDCRIT "nohardcrit"
|
#define TRAIT_NOHARDCRIT "nohardcrit"
|
||||||
#define TRAIT_NOSOFTCRIT "nosoftcrit"
|
#define TRAIT_NOSOFTCRIT "nosoftcrit"
|
||||||
#define TRAIT_MINDSHIELD "mindshield"
|
#define TRAIT_MINDSHIELD "mindshield"
|
||||||
|
#define TRAIT_HIJACKER "hijacker"
|
||||||
#define TRAIT_SIXTHSENSE "sixthsense"
|
#define TRAIT_SIXTHSENSE "sixthsense"
|
||||||
#define TRAIT_DISSECTED "dissected"
|
#define TRAIT_DISSECTED "dissected"
|
||||||
#define TRAIT_FEARLESS "fearless"
|
#define TRAIT_FEARLESS "fearless"
|
||||||
@@ -135,7 +137,7 @@
|
|||||||
#define TRAIT_NOMARROW "nomarrow" // You don't make blood, with chemicals or nanites.
|
#define TRAIT_NOMARROW "nomarrow" // You don't make blood, with chemicals or nanites.
|
||||||
#define TRAIT_NOPULSE "nopulse" // Your heart doesn't beat.
|
#define TRAIT_NOPULSE "nopulse" // Your heart doesn't beat.
|
||||||
#define TRAIT_EXEMPT_HEALTH_EVENTS "exempt-health-events"
|
#define TRAIT_EXEMPT_HEALTH_EVENTS "exempt-health-events"
|
||||||
|
#define TRAIT_SWIMMING "swimming" //only applied by /datum/element/swimming, for checking
|
||||||
|
|
||||||
//non-mob traits
|
//non-mob traits
|
||||||
#define TRAIT_PARALYSIS "paralysis" //Used for limb-based paralysis, where replacing the limb will fix it
|
#define TRAIT_PARALYSIS "paralysis" //Used for limb-based paralysis, where replacing the limb will fix it
|
||||||
@@ -174,6 +176,7 @@
|
|||||||
#define TRAIT_CLOWN_MENTALITY "clown_mentality" // The future is now, clownman.
|
#define TRAIT_CLOWN_MENTALITY "clown_mentality" // The future is now, clownman.
|
||||||
#define TRAIT_FREESPRINT "free_sprinting"
|
#define TRAIT_FREESPRINT "free_sprinting"
|
||||||
#define TRAIT_NO_TELEPORT "no-teleport" //you just can't
|
#define TRAIT_NO_TELEPORT "no-teleport" //you just can't
|
||||||
|
#define TRAIT_NO_INTERNALS "no-internals"
|
||||||
#define TRAIT_NO_ALCOHOL "alcohol_intolerance"
|
#define TRAIT_NO_ALCOHOL "alcohol_intolerance"
|
||||||
|
|
||||||
// common trait sources
|
// common trait sources
|
||||||
@@ -232,9 +235,9 @@
|
|||||||
#define SLEEPING_CARP_TRAIT "sleeping_carp"
|
#define SLEEPING_CARP_TRAIT "sleeping_carp"
|
||||||
#define RISING_BASS_TRAIT "rising_bass"
|
#define RISING_BASS_TRAIT "rising_bass"
|
||||||
#define ABDUCTOR_ANTAGONIST "abductor-antagonist"
|
#define ABDUCTOR_ANTAGONIST "abductor-antagonist"
|
||||||
#define NUKEOP_ANTAGONIST "nukeop-antagonist"
|
|
||||||
#define MADE_UNCLONEABLE "made-uncloneable"
|
#define MADE_UNCLONEABLE "made-uncloneable"
|
||||||
#define TIMESTOP_TRAIT "timestop"
|
#define TIMESTOP_TRAIT "timestop"
|
||||||
#define NUKEOP_TRAIT "nuke-op"
|
#define NUKEOP_TRAIT "nuke-op"
|
||||||
|
#define CLOWNOP_TRAIT "clown-op"
|
||||||
#define MEGAFAUNA_TRAIT "megafauna"
|
#define MEGAFAUNA_TRAIT "megafauna"
|
||||||
#define DEATHSQUAD_TRAIT "deathsquad"
|
#define DEATHSQUAD_TRAIT "deathsquad"
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
#define TYPEID_NULL "0"
|
#define TYPEID_NULL "0"
|
||||||
#define TYPEID_NORMAL_LIST "f"
|
#define TYPEID_NORMAL_LIST "f"
|
||||||
//helper macros
|
//helper macros
|
||||||
#define GET_TYPEID(ref) ( ( (length(ref) <= 10) ? "TYPEID_NULL" : copytext(ref, 4, length(ref)-6) ) )
|
#define GET_TYPEID(ref) ( ( (length(ref) <= 10) ? "TYPEID_NULL" : copytext(ref, 4, -7) ) )
|
||||||
#define IS_NORMAL_LIST(L) (GET_TYPEID("\ref[L]") == TYPEID_NORMAL_LIST)
|
#define IS_NORMAL_LIST(L) (GET_TYPEID("\ref[L]") == TYPEID_NORMAL_LIST)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
+12
-1
@@ -1,6 +1,17 @@
|
|||||||
#define PLURALITY_VOTING 0
|
#define PLURALITY_VOTING 0
|
||||||
#define APPROVAL_VOTING 1
|
#define APPROVAL_VOTING 1
|
||||||
#define RANKED_CHOICE_VOTING 2
|
#define SCHULZE_VOTING 2
|
||||||
#define SCORE_VOTING 3
|
#define SCORE_VOTING 3
|
||||||
|
#define MAJORITY_JUDGEMENT_VOTING 4
|
||||||
|
#define INSTANT_RUNOFF_VOTING 5
|
||||||
|
|
||||||
GLOBAL_LIST_INIT(vote_score_options,list("Bad","Poor","Acceptable","Good","Great"))
|
GLOBAL_LIST_INIT(vote_score_options,list("Bad","Poor","Acceptable","Good","Great"))
|
||||||
|
|
||||||
|
GLOBAL_LIST_INIT(vote_type_names,list(\
|
||||||
|
"Plurality (default)" = PLURALITY_VOTING,\
|
||||||
|
"Approval" = APPROVAL_VOTING,\
|
||||||
|
"IRV (single winner ranked choice)" = INSTANT_RUNOFF_VOTING,\
|
||||||
|
"Schulze (ranked choice, higher result=better)" = SCHULZE_VOTING,\
|
||||||
|
"Raw Score (returns results from 0 to 1, winner is 1)" = SCORE_VOTING,\
|
||||||
|
"Majority Judgement (single-winner score voting)" = MAJORITY_JUDGEMENT_VOTING,\
|
||||||
|
))
|
||||||
|
|||||||
@@ -57,14 +57,11 @@ GLOBAL_LIST_EMPTY(ipc_antennas_list)
|
|||||||
|
|
||||||
//Genitals and Arousal Lists
|
//Genitals and Arousal Lists
|
||||||
GLOBAL_LIST_EMPTY(genitals_list)
|
GLOBAL_LIST_EMPTY(genitals_list)
|
||||||
GLOBAL_LIST_EMPTY(cock_shapes_list)//global_lists.dm for the list initializations //Now also _DATASTRUCTURES globals.dm
|
GLOBAL_LIST_EMPTY(cock_shapes_list)
|
||||||
GLOBAL_LIST_EMPTY(cock_shapes_icons) //Associated list for names->icon_states for cockshapes.
|
|
||||||
GLOBAL_LIST_EMPTY(gentlemans_organ_names)
|
GLOBAL_LIST_EMPTY(gentlemans_organ_names)
|
||||||
GLOBAL_LIST_EMPTY(balls_shapes_list)
|
GLOBAL_LIST_EMPTY(balls_shapes_list)
|
||||||
GLOBAL_LIST_EMPTY(balls_shapes_icons)
|
|
||||||
GLOBAL_LIST_EMPTY(breasts_size_list)
|
GLOBAL_LIST_EMPTY(breasts_size_list)
|
||||||
GLOBAL_LIST_EMPTY(breasts_shapes_list)
|
GLOBAL_LIST_EMPTY(breasts_shapes_list)
|
||||||
GLOBAL_LIST_EMPTY(breasts_shapes_icons)
|
|
||||||
GLOBAL_LIST_EMPTY(vagina_shapes_list)
|
GLOBAL_LIST_EMPTY(vagina_shapes_list)
|
||||||
GLOBAL_LIST_INIT(cum_into_containers_list, list(/obj/item/reagent_containers/food/snacks/pie)) //Yer fuggin snowflake name list jfc
|
GLOBAL_LIST_INIT(cum_into_containers_list, list(/obj/item/reagent_containers/food/snacks/pie)) //Yer fuggin snowflake name list jfc
|
||||||
GLOBAL_LIST_INIT(dick_nouns, list("dick","cock","member","shaft"))
|
GLOBAL_LIST_INIT(dick_nouns, list("dick","cock","member","shaft"))
|
||||||
@@ -111,27 +108,37 @@ GLOBAL_VAR_INIT(miscreants_allowed, FALSE)
|
|||||||
message_admins("[key_name_admin(usr)] manually reloaded mentors")
|
message_admins("[key_name_admin(usr)] manually reloaded mentors")
|
||||||
|
|
||||||
//Flavor Text
|
//Flavor Text
|
||||||
/mob/living/carbon/human/verb/set_flavor()
|
/mob/proc/set_flavor()
|
||||||
set name = "Set Flavor Text"
|
set name = "Set Flavor Text"
|
||||||
set desc = "Sets an extended description of your character's features."
|
set desc = "Sets an extended description of your character's features."
|
||||||
set category = "IC"
|
set category = "IC"
|
||||||
|
|
||||||
var/new_flavor = input(src, "Enter your new flavor text:", "Flavor text", null) as message|null
|
var/new_flavor = stripped_multiline_input(usr, "Set the flavor text in your 'examine' verb. This can also be used for OOC notes and preferences!", "Flavor Text", flavor_text, MAX_FAVOR_LEN, TRUE)
|
||||||
if(!isnull(new_flavor))
|
if(!isnull(new_flavor))
|
||||||
flavor_text = sanitize(new_flavor)
|
flavor_text = new_flavor
|
||||||
to_chat(src, "Your flavor text has been updated.")
|
to_chat(src, "Your flavor text has been updated.")
|
||||||
|
|
||||||
//Flavor Text
|
//Flavor Text
|
||||||
/mob/living/carbon/human/verb/set_flavor_2()
|
/mob/proc/set_flavor_2()
|
||||||
set name = "Set Temporary Flavor Text"
|
set name = "Set Temporary Flavor Text"
|
||||||
set desc = "Sets a description of your character's current appearance. Use this for emotions, poses etc."
|
set desc = "Sets a description of your character's current appearance. Use this for emotions, poses etc."
|
||||||
set category = "IC"
|
set category = "IC"
|
||||||
|
|
||||||
var/new_flavor = input(src, "Enter your new temporary flavor text:", "Temporary flavor text", null) as message|null
|
var/new_flavor = stripped_multiline_input(usr, "Set the temporary flavor text in your 'examine' verb. This should be used only for things pertaining to the current round!", "Short-Term Flavor Text", flavor_text_2, MAX_FAVOR_LEN, TRUE)
|
||||||
if(!isnull(new_flavor))
|
if(!isnull(new_flavor))
|
||||||
flavor_text_2 = sanitize(new_flavor)
|
flavor_text_2 = new_flavor
|
||||||
to_chat(src, "Your temporary flavor text has been updated.")
|
to_chat(src, "Your temporary flavor text has been updated.")
|
||||||
|
|
||||||
|
/mob/proc/print_flavor_text(flavor)
|
||||||
|
if(!flavor)
|
||||||
|
return
|
||||||
|
// We are decoding and then encoding to not only get correct amount of characters, but also to prevent partial escaping characters being shown.
|
||||||
|
var/msg = html_decode(replacetext(flavor, "\n", " "))
|
||||||
|
if(length_char(msg) <= 40)
|
||||||
|
return "<span class='notice'>[html_encode(msg)]</span>"
|
||||||
|
else
|
||||||
|
return "<span class='notice'>[html_encode(copytext_char(msg, 1, 37))]... <a href='?src=[REF(src)];flavor_more=1'>More...</span></a>"
|
||||||
|
|
||||||
//LOOC toggles
|
//LOOC toggles
|
||||||
/client/verb/listen_looc()
|
/client/verb/listen_looc()
|
||||||
set name = "Show/Hide LOOC"
|
set name = "Show/Hide LOOC"
|
||||||
|
|||||||
@@ -52,6 +52,8 @@
|
|||||||
if (CONFIG_GET(flag/log_adminchat))
|
if (CONFIG_GET(flag/log_adminchat))
|
||||||
WRITE_LOG(GLOB.world_game_log, "ADMIN: DSAY: [text]")
|
WRITE_LOG(GLOB.world_game_log, "ADMIN: DSAY: [text]")
|
||||||
|
|
||||||
|
/proc/log_consent(text)
|
||||||
|
WRITE_LOG(GLOB.world_game_log,"CONSENT: [text]")
|
||||||
|
|
||||||
/* All other items are public. */
|
/* All other items are public. */
|
||||||
/proc/log_game(text)
|
/proc/log_game(text)
|
||||||
@@ -94,6 +96,10 @@
|
|||||||
if (CONFIG_GET(flag/log_emote))
|
if (CONFIG_GET(flag/log_emote))
|
||||||
WRITE_LOG(GLOB.world_game_log, "EMOTE: [text]")
|
WRITE_LOG(GLOB.world_game_log, "EMOTE: [text]")
|
||||||
|
|
||||||
|
/proc/log_subtler(text)
|
||||||
|
if (CONFIG_GET(flag/log_emote))
|
||||||
|
WRITE_LOG(GLOB.world_game_log, "EMOTE (SUBTLER): [text]")
|
||||||
|
|
||||||
/proc/log_prayer(text)
|
/proc/log_prayer(text)
|
||||||
if (CONFIG_GET(flag/log_prayer))
|
if (CONFIG_GET(flag/log_prayer))
|
||||||
WRITE_LOG(GLOB.world_game_log, "PRAY: [text]")
|
WRITE_LOG(GLOB.world_game_log, "PRAY: [text]")
|
||||||
@@ -165,10 +171,21 @@
|
|||||||
/proc/log_mapping(text)
|
/proc/log_mapping(text)
|
||||||
WRITE_LOG(GLOB.world_map_error_log, text)
|
WRITE_LOG(GLOB.world_map_error_log, text)
|
||||||
|
|
||||||
|
/proc/log_reagent(text)
|
||||||
|
WRITE_LOG(GLOB.reagent_log, text)
|
||||||
|
|
||||||
|
/proc/log_reagent_transfer(text)
|
||||||
|
log_reagent("TRANSFER: [text]")
|
||||||
|
|
||||||
/* For logging round startup. */
|
/* For logging round startup. */
|
||||||
/proc/start_log(log)
|
/proc/start_log(log)
|
||||||
WRITE_LOG(log, "Starting up round ID [GLOB.round_id].\n-------------------------")
|
WRITE_LOG(log, "Starting up round ID [GLOB.round_id].\n-------------------------")
|
||||||
|
|
||||||
|
/* ui logging */
|
||||||
|
|
||||||
|
/proc/log_tgui(text)
|
||||||
|
WRITE_LOG(GLOB.tgui_log, text)
|
||||||
|
|
||||||
/* Close open log handles. This should be called as late as possible, and no logging should hapen after. */
|
/* Close open log handles. This should be called as late as possible, and no logging should hapen after. */
|
||||||
/proc/shutdown_logging()
|
/proc/shutdown_logging()
|
||||||
rustg_log_close_all()
|
rustg_log_close_all()
|
||||||
|
|||||||
@@ -1,5 +1,81 @@
|
|||||||
#define BP_MAX_ROOM_SIZE 300
|
#define BP_MAX_ROOM_SIZE 300
|
||||||
|
|
||||||
|
//Repopulates sortedAreas list
|
||||||
|
/proc/repopulate_sorted_areas()
|
||||||
|
GLOB.sortedAreas = list()
|
||||||
|
|
||||||
|
for(var/area/A in world)
|
||||||
|
GLOB.sortedAreas.Add(A)
|
||||||
|
|
||||||
|
sortTim(GLOB.sortedAreas, /proc/cmp_name_asc)
|
||||||
|
|
||||||
|
/area/proc/addSorted()
|
||||||
|
GLOB.sortedAreas.Add(src)
|
||||||
|
sortTim(GLOB.sortedAreas, /proc/cmp_name_asc)
|
||||||
|
|
||||||
|
//Takes: Area type as a text string from a variable.
|
||||||
|
//Returns: Instance for the area in the world.
|
||||||
|
/proc/get_area_instance_from_text(areatext)
|
||||||
|
if(istext(areatext))
|
||||||
|
areatext = text2path(areatext)
|
||||||
|
return GLOB.areas_by_type[areatext]
|
||||||
|
|
||||||
|
//Takes: Area type as text string or as typepath OR an instance of the area.
|
||||||
|
//Returns: A list of all areas of that type in the world.
|
||||||
|
/proc/get_areas(areatype, subtypes=TRUE)
|
||||||
|
if(istext(areatype))
|
||||||
|
areatype = text2path(areatype)
|
||||||
|
else if(isarea(areatype))
|
||||||
|
var/area/areatemp = areatype
|
||||||
|
areatype = areatemp.type
|
||||||
|
else if(!ispath(areatype))
|
||||||
|
return null
|
||||||
|
|
||||||
|
var/list/areas = list()
|
||||||
|
if(subtypes)
|
||||||
|
var/list/cache = typecacheof(areatype)
|
||||||
|
for(var/V in GLOB.sortedAreas)
|
||||||
|
var/area/A = V
|
||||||
|
if(cache[A.type])
|
||||||
|
areas += V
|
||||||
|
else
|
||||||
|
for(var/V in GLOB.sortedAreas)
|
||||||
|
var/area/A = V
|
||||||
|
if(A.type == areatype)
|
||||||
|
areas += V
|
||||||
|
return areas
|
||||||
|
|
||||||
|
//Takes: Area type as text string or as typepath OR an instance of the area.
|
||||||
|
//Returns: A list of all turfs in areas of that type of that type in the world.
|
||||||
|
/proc/get_area_turfs(areatype, target_z = 0, subtypes=FALSE)
|
||||||
|
if(istext(areatype))
|
||||||
|
areatype = text2path(areatype)
|
||||||
|
else if(isarea(areatype))
|
||||||
|
var/area/areatemp = areatype
|
||||||
|
areatype = areatemp.type
|
||||||
|
else if(!ispath(areatype))
|
||||||
|
return null
|
||||||
|
|
||||||
|
var/list/turfs = list()
|
||||||
|
if(subtypes)
|
||||||
|
var/list/cache = typecacheof(areatype)
|
||||||
|
for(var/V in GLOB.sortedAreas)
|
||||||
|
var/area/A = V
|
||||||
|
if(!cache[A.type])
|
||||||
|
continue
|
||||||
|
for(var/turf/T in A)
|
||||||
|
if(target_z == 0 || target_z == T.z)
|
||||||
|
turfs += T
|
||||||
|
else
|
||||||
|
for(var/V in GLOB.sortedAreas)
|
||||||
|
var/area/A = V
|
||||||
|
if(A.type != areatype)
|
||||||
|
continue
|
||||||
|
for(var/turf/T in A)
|
||||||
|
if(target_z == 0 || target_z == T.z)
|
||||||
|
turfs += T
|
||||||
|
return turfs
|
||||||
|
|
||||||
// Gets an atmos isolated contained space
|
// Gets an atmos isolated contained space
|
||||||
// Returns an associative list of turf|dirs pairs
|
// Returns an associative list of turf|dirs pairs
|
||||||
// The dirs are connected turfs in the same space
|
// The dirs are connected turfs in the same space
|
||||||
@@ -103,4 +179,62 @@
|
|||||||
to_chat(creator, "<span class='notice'>You have created a new area, named [newA.name]. It is now weather proof, and constructing an APC will allow it to be powered.</span>")
|
to_chat(creator, "<span class='notice'>You have created a new area, named [newA.name]. It is now weather proof, and constructing an APC will allow it to be powered.</span>")
|
||||||
return TRUE
|
return TRUE
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the base area the target is located in if there is one.
|
||||||
|
* Alternatively, returns the area as is.
|
||||||
|
*/
|
||||||
|
/proc/get_base_area(atom/target)
|
||||||
|
var/area/A = get_area(target)
|
||||||
|
if(A?.base_area)
|
||||||
|
return A.base_area
|
||||||
|
return A
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns either null, or a list containing every sub area associated with our base area.
|
||||||
|
* If include_base is TRUE, the base area will also be added to the return list.
|
||||||
|
*/
|
||||||
|
/proc/get_sub_areas(atom/target, include_base = TRUE)
|
||||||
|
var/area/A = get_area(target)
|
||||||
|
if(!A)
|
||||||
|
return
|
||||||
|
. = list()
|
||||||
|
if(A.base_area)
|
||||||
|
A = A.base_area
|
||||||
|
if(include_base)
|
||||||
|
. += A
|
||||||
|
if(A.sub_areas)
|
||||||
|
. += A.sub_areas
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Proc used for purposes similar to get_areas_turfs(), but aimed to include associated areas.
|
||||||
|
* Only accepts area instances and paths for the first arg, no text strings.
|
||||||
|
* Returns a list of all turfs found in the sub areas (including the base's if include_base is TRUE)
|
||||||
|
* and located in a z level matching target_z, or anywhere if target_z is 0
|
||||||
|
*/
|
||||||
|
|
||||||
|
/proc/get_sub_areas_turfs(area/A, target_z = 0, include_base = TRUE)
|
||||||
|
var/list/contents = get_sub_areas_contents(A, include_base)
|
||||||
|
. = list()
|
||||||
|
for(var/turf/T in contents)
|
||||||
|
if(target_z == 0 || target_z == T.z)
|
||||||
|
. += T
|
||||||
|
/**
|
||||||
|
* Simple proc that returns a sum of all contents from every sub area,
|
||||||
|
* Think of the above but for all contents, not just turfs, and without target z.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/proc/get_sub_areas_contents(area/A, include_base = TRUE)
|
||||||
|
if(ispath(A))
|
||||||
|
A = GLOB.areas_by_type[A]
|
||||||
|
else
|
||||||
|
A = get_area(A) //in case it's called on other atoms.
|
||||||
|
if(!A)
|
||||||
|
return
|
||||||
|
if(A.base_area)
|
||||||
|
A = A.base_area
|
||||||
|
. = list(A.contents)
|
||||||
|
for(var/i in A.sub_areas)
|
||||||
|
. += A.sub_areas[i].contents
|
||||||
|
|
||||||
#undef BP_MAX_ROOM_SIZE
|
#undef BP_MAX_ROOM_SIZE
|
||||||
|
|||||||
@@ -20,7 +20,7 @@
|
|||||||
continue
|
continue
|
||||||
path += choice
|
path += choice
|
||||||
|
|
||||||
if(copytext(path,-1,0) != "/") //didn't choose a directory, no need to iterate again
|
if(copytext_char(path, -1) != "/") //didn't choose a directory, no need to iterate again
|
||||||
break
|
break
|
||||||
var/extensions
|
var/extensions
|
||||||
for(var/i in valid_extensions)
|
for(var/i in valid_extensions)
|
||||||
|
|||||||
+18
-37
@@ -8,8 +8,8 @@
|
|||||||
#define Z_TURFS(ZLEVEL) block(locate(1,1,ZLEVEL), locate(world.maxx, world.maxy, ZLEVEL))
|
#define Z_TURFS(ZLEVEL) block(locate(1,1,ZLEVEL), locate(world.maxx, world.maxy, ZLEVEL))
|
||||||
#define CULT_POLL_WAIT 2400
|
#define CULT_POLL_WAIT 2400
|
||||||
|
|
||||||
/proc/get_area_name(atom/X, format_text = FALSE)
|
/proc/get_area_name(atom/X, format_text = FALSE, get_base_area = FALSE)
|
||||||
var/area/A = isarea(X) ? X : get_area(X)
|
var/area/A = get_base_area ? get_base_area(X) : get_area(X)
|
||||||
if(!A)
|
if(!A)
|
||||||
return null
|
return null
|
||||||
return format_text ? format_text(A.name) : A.name
|
return format_text ? format_text(A.name) : A.name
|
||||||
@@ -145,20 +145,6 @@
|
|||||||
turfs += T
|
turfs += T
|
||||||
return turfs
|
return turfs
|
||||||
|
|
||||||
|
|
||||||
//This is the new version of recursive_mob_check, used for say().
|
|
||||||
//The other proc was left intact because morgue trays use it.
|
|
||||||
//Sped this up again for real this time
|
|
||||||
/proc/recursive_hear_check(O)
|
|
||||||
var/list/processing_list = list(O)
|
|
||||||
. = list()
|
|
||||||
while(processing_list.len)
|
|
||||||
var/atom/A = processing_list[1]
|
|
||||||
if(A.flags_1 & HEAR_1)
|
|
||||||
. += A
|
|
||||||
processing_list.Cut(1, 2)
|
|
||||||
processing_list += A.contents
|
|
||||||
|
|
||||||
/** recursive_organ_check
|
/** recursive_organ_check
|
||||||
* inputs: O (object to start with)
|
* inputs: O (object to start with)
|
||||||
* outputs:
|
* outputs:
|
||||||
@@ -238,35 +224,30 @@
|
|||||||
|
|
||||||
return found_mobs
|
return found_mobs
|
||||||
|
|
||||||
|
|
||||||
/proc/get_hearers_in_view(R, atom/source)
|
/proc/get_hearers_in_view(R, atom/source)
|
||||||
// Returns a list of hearers in view(R) from source (ignoring luminosity). Used in saycode.
|
|
||||||
var/turf/T = get_turf(source)
|
var/turf/T = get_turf(source)
|
||||||
. = list()
|
. = list()
|
||||||
|
|
||||||
if(!T)
|
if(!T)
|
||||||
return
|
return
|
||||||
|
var/list/processing = list()
|
||||||
var/list/processing_list = list()
|
if(R == 0)
|
||||||
if (R == 0) // if the range is zero, we know exactly where to look for, we can skip view
|
processing += T.contents
|
||||||
processing_list += T.contents // We can shave off one iteration by assuming turfs cannot hear
|
else
|
||||||
else // A variation of get_hear inlined here to take advantage of the compiler's fastpath for obj/mob in view
|
|
||||||
var/lum = T.luminosity
|
var/lum = T.luminosity
|
||||||
T.luminosity = 6 // This is the maximum luminosity
|
T.luminosity = 6
|
||||||
var/list/cachedview = view(R, T)
|
var/list/cached_view = view(R, T)
|
||||||
for(var/mob/M in cachedview)
|
for(var/mob/M in cached_view)
|
||||||
processing_list += M
|
processing += M
|
||||||
for(var/obj/O in cachedview)
|
for(var/obj/O in cached_view)
|
||||||
processing_list += O
|
processing += O
|
||||||
T.luminosity = lum
|
T.luminosity = lum
|
||||||
|
var/i = 0
|
||||||
while(processing_list.len) // recursive_hear_check inlined here
|
while(i < length(processing))
|
||||||
var/atom/A = processing_list[1]
|
var/atom/A = processing[++i]
|
||||||
if(A.flags_1 & HEAR_1)
|
if(A.flags_1 & HEAR_1)
|
||||||
. += A
|
. += A
|
||||||
SEND_SIGNAL(A, COMSIG_ATOM_HEARER_IN_VIEW, processing_list, .)
|
SEND_SIGNAL(A, COMSIG_ATOM_HEARER_IN_VIEW, processing, .)
|
||||||
processing_list.Cut(1, 2)
|
processing += A.contents
|
||||||
processing_list += A.contents
|
|
||||||
|
|
||||||
/proc/get_mobs_in_radio_ranges(list/obj/item/radio/radios)
|
/proc/get_mobs_in_radio_ranges(list/obj/item/radio/radios)
|
||||||
. = list()
|
. = list()
|
||||||
@@ -455,7 +436,7 @@
|
|||||||
var/list/result = list()
|
var/list/result = list()
|
||||||
for(var/m in group)
|
for(var/m in group)
|
||||||
var/mob/M = m
|
var/mob/M = m
|
||||||
if(!M.key || !M.client || (ignore_category && GLOB.poll_ignore[ignore_category] && M.ckey in GLOB.poll_ignore[ignore_category]))
|
if(!M.key || !M.client || (ignore_category && GLOB.poll_ignore[ignore_category] && (M.ckey in GLOB.poll_ignore[ignore_category])))
|
||||||
continue
|
continue
|
||||||
if(be_special_flag)
|
if(be_special_flag)
|
||||||
if(!(M.client.prefs) || !(be_special_flag in M.client.prefs.be_special))
|
if(!(M.client.prefs) || !(be_special_flag in M.client.prefs.be_special))
|
||||||
|
|||||||
@@ -51,26 +51,15 @@
|
|||||||
init_sprite_accessory_subtypes(/datum/sprite_accessory/antenna, GLOB.ipc_antennas_list, roundstart = TRUE)
|
init_sprite_accessory_subtypes(/datum/sprite_accessory/antenna, GLOB.ipc_antennas_list, roundstart = TRUE)
|
||||||
//genitals
|
//genitals
|
||||||
init_sprite_accessory_subtypes(/datum/sprite_accessory/penis, GLOB.cock_shapes_list)
|
init_sprite_accessory_subtypes(/datum/sprite_accessory/penis, GLOB.cock_shapes_list)
|
||||||
for(var/K in GLOB.cock_shapes_list)
|
|
||||||
var/datum/sprite_accessory/penis/value = GLOB.cock_shapes_list[K]
|
|
||||||
GLOB.cock_shapes_icons[K] = value.icon_state
|
|
||||||
|
|
||||||
init_sprite_accessory_subtypes(/datum/sprite_accessory/vagina, GLOB.vagina_shapes_list)
|
init_sprite_accessory_subtypes(/datum/sprite_accessory/vagina, GLOB.vagina_shapes_list)
|
||||||
init_sprite_accessory_subtypes(/datum/sprite_accessory/breasts, GLOB.breasts_shapes_list)
|
init_sprite_accessory_subtypes(/datum/sprite_accessory/breasts, GLOB.breasts_shapes_list)
|
||||||
|
init_sprite_accessory_subtypes(/datum/sprite_accessory/testicles, GLOB.balls_shapes_list)
|
||||||
GLOB.breasts_size_list = list ("a", "b", "c", "d", "e") //We need the list to choose from initialized, but it's no longer a sprite_accessory thing.
|
GLOB.breasts_size_list = list ("a", "b", "c", "d", "e") //We need the list to choose from initialized, but it's no longer a sprite_accessory thing.
|
||||||
GLOB.gentlemans_organ_names = list("phallus", "willy", "dick", "prick", "member", "tool", "gentleman's organ",
|
GLOB.gentlemans_organ_names = list("phallus", "willy", "dick", "prick", "member", "tool", "gentleman's organ",
|
||||||
"cock", "wang", "knob", "dong", "joystick", "pecker", "johnson", "weenie", "tadger", "schlong", "thirsty ferret",
|
"cock", "wang", "knob", "dong", "joystick", "pecker", "johnson", "weenie", "tadger", "schlong", "thirsty ferret",
|
||||||
"baloney pony", "schlanger", "Mutton dagger", "old blind bob","Hanging Johnny", "fishing rod", "Tally whacker", "polly rocket",
|
"baloney pony", "schlanger", "Mutton dagger", "old blind bob","Hanging Johnny", "fishing rod", "Tally whacker", "polly rocket",
|
||||||
"One eyed trouser trout", "Ding dong", "ankle spanker", "Pork sword", "engine cranker", "Harry hot dog", "Davy Crockett",
|
"One eyed trouser trout", "Ding dong", "ankle spanker", "Pork sword", "engine cranker", "Harry hot dog", "Davy Crockett",
|
||||||
"Kidney cracker", "Heat seeking moisture missile", "Giggle stick", "love whistle", "Tube steak", "Uncle Dick", "Purple helmet warrior")
|
"Kidney cracker", "Heat seeking moisture missile", "Giggle stick", "love whistle", "Tube steak", "Uncle Dick", "Purple helmet warrior")
|
||||||
for(var/K in GLOB.breasts_shapes_list)
|
|
||||||
var/datum/sprite_accessory/breasts/value = GLOB.breasts_shapes_list[K]
|
|
||||||
GLOB.breasts_shapes_icons[K] = value.icon_state
|
|
||||||
|
|
||||||
init_sprite_accessory_subtypes(/datum/sprite_accessory/testicles, GLOB.balls_shapes_list)
|
|
||||||
for(var/K in GLOB.balls_shapes_list)
|
|
||||||
var/datum/sprite_accessory/testicles/value = GLOB.balls_shapes_list[K]
|
|
||||||
GLOB.balls_shapes_icons[K] = value.icon_state
|
|
||||||
|
|
||||||
for(var/gpath in subtypesof(/obj/item/organ/genital))
|
for(var/gpath in subtypesof(/obj/item/organ/genital))
|
||||||
var/obj/item/organ/genital/G = gpath
|
var/obj/item/organ/genital/G = gpath
|
||||||
|
|||||||
@@ -985,7 +985,7 @@ world
|
|||||||
var/icon/atom_icon = new(A.icon, A.icon_state)
|
var/icon/atom_icon = new(A.icon, A.icon_state)
|
||||||
|
|
||||||
if(!letter)
|
if(!letter)
|
||||||
letter = copytext(A.name, 1, 2)
|
letter = A.name[1]
|
||||||
if(uppercase == 1)
|
if(uppercase == 1)
|
||||||
letter = uppertext(letter)
|
letter = uppertext(letter)
|
||||||
else if(uppercase == -1)
|
else if(uppercase == -1)
|
||||||
@@ -1113,7 +1113,7 @@ GLOBAL_LIST_INIT(freon_color_matrix, list("#2E5E69", "#60A2A8", "#A1AFB1", rgb(0
|
|||||||
WRITE_FILE(GLOB.iconCache[iconKey], icon)
|
WRITE_FILE(GLOB.iconCache[iconKey], icon)
|
||||||
var/iconData = GLOB.iconCache.ExportText(iconKey)
|
var/iconData = GLOB.iconCache.ExportText(iconKey)
|
||||||
var/list/partial = splittext(iconData, "{")
|
var/list/partial = splittext(iconData, "{")
|
||||||
return replacetext(copytext(partial[2], 3, -5), "\n", "")
|
return replacetext(copytext_char(partial[2], 3, -5), "\n", "")
|
||||||
|
|
||||||
/proc/icon2html(thing, target, icon_state, dir, frame = 1, moving = FALSE)
|
/proc/icon2html(thing, target, icon_state, dir, frame = 1, moving = FALSE)
|
||||||
if (!thing)
|
if (!thing)
|
||||||
|
|||||||
@@ -179,7 +179,6 @@
|
|||||||
"balls_cum_rate" = CUM_RATE,
|
"balls_cum_rate" = CUM_RATE,
|
||||||
"balls_cum_mult" = CUM_RATE_MULT,
|
"balls_cum_mult" = CUM_RATE_MULT,
|
||||||
"balls_efficiency" = CUM_EFFICIENCY,
|
"balls_efficiency" = CUM_EFFICIENCY,
|
||||||
"balls_fluid" = "semen",
|
|
||||||
"has_ovi" = FALSE,
|
"has_ovi" = FALSE,
|
||||||
"ovi_shape" = "knotted",
|
"ovi_shape" = "knotted",
|
||||||
"ovi_length" = 6,
|
"ovi_length" = 6,
|
||||||
@@ -194,7 +193,6 @@
|
|||||||
"breasts_color" = pick("FFFFFF","7F7F7F", "7FFF7F", "7F7FFF", "FF7F7F", "7FFFFF", "FF7FFF", "FFFF7F"),
|
"breasts_color" = pick("FFFFFF","7F7F7F", "7FFF7F", "7F7FFF", "FF7F7F", "7FFFFF", "FF7FFF", "FFFF7F"),
|
||||||
"breasts_size" = pick(GLOB.breasts_size_list),
|
"breasts_size" = pick(GLOB.breasts_size_list),
|
||||||
"breasts_shape" = "Pair",
|
"breasts_shape" = "Pair",
|
||||||
"breasts_fluid" = "milk",
|
|
||||||
"breasts_producing" = FALSE,
|
"breasts_producing" = FALSE,
|
||||||
"has_vag" = FALSE,
|
"has_vag" = FALSE,
|
||||||
"vag_shape" = pick(GLOB.vagina_shapes_list),
|
"vag_shape" = pick(GLOB.vagina_shapes_list),
|
||||||
@@ -206,7 +204,6 @@
|
|||||||
"womb_cum_rate" = CUM_RATE,
|
"womb_cum_rate" = CUM_RATE,
|
||||||
"womb_cum_mult" = CUM_RATE_MULT,
|
"womb_cum_mult" = CUM_RATE_MULT,
|
||||||
"womb_efficiency" = CUM_EFFICIENCY,
|
"womb_efficiency" = CUM_EFFICIENCY,
|
||||||
"womb_fluid" = "femcum",
|
|
||||||
"ipc_screen" = "Sunburst",
|
"ipc_screen" = "Sunburst",
|
||||||
"ipc_antenna" = "None",
|
"ipc_antenna" = "None",
|
||||||
"flavor_text" = "",
|
"flavor_text" = "",
|
||||||
@@ -532,7 +529,7 @@ GLOBAL_LIST_EMPTY(species_list)
|
|||||||
continue
|
continue
|
||||||
if(M.stat != DEAD && !override)
|
if(M.stat != DEAD && !override)
|
||||||
continue
|
continue
|
||||||
if(speaker_key && speaker_key in prefs.ignoring)
|
if(speaker_key && (speaker_key in prefs.ignoring))
|
||||||
continue
|
continue
|
||||||
|
|
||||||
switch(message_type)
|
switch(message_type)
|
||||||
|
|||||||
@@ -28,10 +28,10 @@
|
|||||||
. = "does"
|
. = "does"
|
||||||
|
|
||||||
/datum/proc/p_theyve(capitalized, temp_gender)
|
/datum/proc/p_theyve(capitalized, temp_gender)
|
||||||
. = p_they(capitalized, temp_gender) + "'" + copytext(p_have(temp_gender), 3)
|
. = p_they(capitalized, temp_gender) + "'" + copytext_char(p_have(temp_gender), 3)
|
||||||
|
|
||||||
/datum/proc/p_theyre(capitalized, temp_gender)
|
/datum/proc/p_theyre(capitalized, temp_gender)
|
||||||
. = p_they(capitalized, temp_gender) + "'" + copytext(p_are(temp_gender), 2)
|
. = p_they(capitalized, temp_gender) + "'" + copytext_char(p_are(temp_gender), 2)
|
||||||
|
|
||||||
/datum/proc/p_s(temp_gender) //is this a descriptive proc name, or what?
|
/datum/proc/p_s(temp_gender) //is this a descriptive proc name, or what?
|
||||||
. = "s"
|
. = "s"
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
// Ensure the frequency is within bounds of what it should be sending/receiving at
|
// Ensure the frequency is within bounds of what it should be sending/receiving at
|
||||||
/proc/sanitize_frequency(frequency, free = FALSE)
|
/proc/sanitize_frequency(frequency, free = FALSE)
|
||||||
. = round(frequency)
|
frequency = round(frequency)
|
||||||
if(free)
|
if(free)
|
||||||
. = CLAMP(frequency, MIN_FREE_FREQ, MAX_FREE_FREQ)
|
. = CLAMP(frequency, MIN_FREE_FREQ, MAX_FREE_FREQ)
|
||||||
else
|
else
|
||||||
|
|||||||
@@ -72,3 +72,26 @@
|
|||||||
if(!GLOB.chemical_reactions_list[primary_reagent])
|
if(!GLOB.chemical_reactions_list[primary_reagent])
|
||||||
GLOB.chemical_reactions_list[primary_reagent] = list()
|
GLOB.chemical_reactions_list[primary_reagent] = list()
|
||||||
GLOB.chemical_reactions_list[primary_reagent] += R
|
GLOB.chemical_reactions_list[primary_reagent] += R
|
||||||
|
|
||||||
|
/proc/choose_reagent_id(mob/user)
|
||||||
|
var/chosen_id
|
||||||
|
switch(alert(user, "Choose a method.", "Add Reagents", "Search", "Choose from a list", "I'm feeling lucky"))
|
||||||
|
if("Search")
|
||||||
|
var/valid_id
|
||||||
|
while(!valid_id)
|
||||||
|
chosen_id = input(user, "Enter the ID of the reagent you want to add.", "Search reagents") as null|text
|
||||||
|
if(isnull(chosen_id)) //Get me out of here!
|
||||||
|
break
|
||||||
|
if(!ispath(text2path(chosen_id)))
|
||||||
|
chosen_id = pick_closest_path(chosen_id, make_types_fancy(subtypesof(/datum/reagent)))
|
||||||
|
if(ispath(chosen_id))
|
||||||
|
valid_id = TRUE
|
||||||
|
else
|
||||||
|
valid_id = TRUE
|
||||||
|
if(!valid_id)
|
||||||
|
to_chat(user, "<span class='warning'>A reagent with that ID doesn't exist!</span>")
|
||||||
|
if("Choose from a list")
|
||||||
|
chosen_id = input(user, "Choose a reagent to add.", "Choose a reagent.") as null|anything in subtypesof(/datum/reagent)
|
||||||
|
if("I'm feeling lucky")
|
||||||
|
chosen_id = pick(subtypesof(/datum/reagent))
|
||||||
|
return chosen_id
|
||||||
+23
-10
@@ -3,6 +3,9 @@
|
|||||||
#define POPCOUNT_SHUTTLE_ESCAPEES "shuttle_escapees" //Emergency shuttle only.
|
#define POPCOUNT_SHUTTLE_ESCAPEES "shuttle_escapees" //Emergency shuttle only.
|
||||||
|
|
||||||
/datum/controller/subsystem/ticker/proc/gather_roundend_feedback()
|
/datum/controller/subsystem/ticker/proc/gather_roundend_feedback()
|
||||||
|
var/datum/station_state/end_state = new /datum/station_state()
|
||||||
|
end_state.count()
|
||||||
|
station_integrity = min(PERCENT(GLOB.start_state.score(end_state)), 100)
|
||||||
gather_antag_data()
|
gather_antag_data()
|
||||||
record_nuke_disk_location()
|
record_nuke_disk_location()
|
||||||
var/json_file = file("[GLOB.log_directory]/round_end_data.json")
|
var/json_file = file("[GLOB.log_directory]/round_end_data.json")
|
||||||
@@ -71,9 +74,6 @@
|
|||||||
mob_data += list("name" = m.name, "typepath" = m.type)
|
mob_data += list("name" = m.name, "typepath" = m.type)
|
||||||
var/pos = length(file_data["[escaped]"]["[category]"]) + 1
|
var/pos = length(file_data["[escaped]"]["[category]"]) + 1
|
||||||
file_data["[escaped]"]["[category]"]["[pos]"] = mob_data
|
file_data["[escaped]"]["[category]"]["[pos]"] = mob_data
|
||||||
var/datum/station_state/end_state = new /datum/station_state()
|
|
||||||
end_state.count()
|
|
||||||
var/station_integrity = min(PERCENT(GLOB.start_state.score(end_state)), 100)
|
|
||||||
file_data["additional data"]["station integrity"] = station_integrity
|
file_data["additional data"]["station integrity"] = station_integrity
|
||||||
WRITE_FILE(json_file, json_encode(file_data))
|
WRITE_FILE(json_file, json_encode(file_data))
|
||||||
SSblackbox.record_feedback("nested tally", "round_end_stats", num_survivors, list("survivors", "total"))
|
SSblackbox.record_feedback("nested tally", "round_end_stats", num_survivors, list("survivors", "total"))
|
||||||
@@ -111,7 +111,14 @@
|
|||||||
|
|
||||||
if(A.objectives.len)
|
if(A.objectives.len)
|
||||||
for(var/datum/objective/O in A.objectives)
|
for(var/datum/objective/O in A.objectives)
|
||||||
var/result = O.check_completion() ? "SUCCESS" : "FAIL"
|
var/result = "UNKNOWN"
|
||||||
|
var/actual_result = O.check_completion()
|
||||||
|
if(actual_result >= 1)
|
||||||
|
result = "SUCCESS"
|
||||||
|
else if(actual_result <= 0)
|
||||||
|
result = "FAIL"
|
||||||
|
else
|
||||||
|
result = "[actual_result*100]%"
|
||||||
antag_info["objectives"] += list(list("objective_type"=O.type,"text"=O.explanation_text,"result"=result))
|
antag_info["objectives"] += list(list("objective_type"=O.type,"text"=O.explanation_text,"result"=result))
|
||||||
SSblackbox.record_feedback("associative", "antagonists", 1, antag_info)
|
SSblackbox.record_feedback("associative", "antagonists", 1, antag_info)
|
||||||
|
|
||||||
@@ -139,19 +146,19 @@
|
|||||||
var/list/file_data = list()
|
var/list/file_data = list()
|
||||||
var/pos = 1
|
var/pos = 1
|
||||||
for(var/V in GLOB.news_network.network_channels)
|
for(var/V in GLOB.news_network.network_channels)
|
||||||
var/datum/newscaster/feed_channel/channel = V
|
var/datum/news/feed_channel/channel = V
|
||||||
if(!istype(channel))
|
if(!istype(channel))
|
||||||
stack_trace("Non-channel in newscaster channel list")
|
stack_trace("Non-channel in newscaster channel list")
|
||||||
continue
|
continue
|
||||||
file_data["[pos]"] = list("channel name" = "[channel.channel_name]", "author" = "[channel.author]", "censored" = channel.censored ? 1 : 0, "author censored" = channel.authorCensor ? 1 : 0, "messages" = list())
|
file_data["[pos]"] = list("channel name" = "[channel.channel_name]", "author" = "[channel.author]", "censored" = channel.censored ? 1 : 0, "author censored" = channel.authorCensor ? 1 : 0, "messages" = list())
|
||||||
for(var/M in channel.messages)
|
for(var/M in channel.messages)
|
||||||
var/datum/newscaster/feed_message/message = M
|
var/datum/news/feed_message/message = M
|
||||||
if(!istype(message))
|
if(!istype(message))
|
||||||
stack_trace("Non-message in newscaster channel messages list")
|
stack_trace("Non-message in newscaster channel messages list")
|
||||||
continue
|
continue
|
||||||
var/list/comment_data = list()
|
var/list/comment_data = list()
|
||||||
for(var/C in message.comments)
|
for(var/C in message.comments)
|
||||||
var/datum/newscaster/feed_comment/comment = C
|
var/datum/news/feed_comment/comment = C
|
||||||
if(!istype(comment))
|
if(!istype(comment))
|
||||||
stack_trace("Non-message in newscaster message comments list")
|
stack_trace("Non-message in newscaster message comments list")
|
||||||
continue
|
continue
|
||||||
@@ -550,10 +557,16 @@
|
|||||||
var/list/objective_parts = list()
|
var/list/objective_parts = list()
|
||||||
var/count = 1
|
var/count = 1
|
||||||
for(var/datum/objective/objective in objectives)
|
for(var/datum/objective/objective in objectives)
|
||||||
if(objective.check_completion())
|
if(objective.completable)
|
||||||
objective_parts += "<b>Objective #[count]</b>: [objective.explanation_text] <span class='greentext'>Success!</span>"
|
var/completion = objective.check_completion()
|
||||||
|
if(completion >= 1)
|
||||||
|
objective_parts += "<B>Objective #[count]</B>: [objective.explanation_text] <span class='greentext'><B>Success!</span>"
|
||||||
|
else if(completion <= 0)
|
||||||
|
objective_parts += "<B>Objective #[count]</B>: [objective.explanation_text] <span class='redtext'>Fail.</span>"
|
||||||
|
else
|
||||||
|
objective_parts += "<B>Objective #[count]</B>: [objective.explanation_text] <span class='yellowtext'>[completion*100]%</span>"
|
||||||
else
|
else
|
||||||
objective_parts += "<b>Objective #[count]</b>: [objective.explanation_text] <span class='redtext'>Fail.</span>"
|
objective_parts += "<B>Objective #[count]</B>: [objective.explanation_text]"
|
||||||
count++
|
count++
|
||||||
return objective_parts.Join("<br>")
|
return objective_parts.Join("<br>")
|
||||||
|
|
||||||
|
|||||||
@@ -43,24 +43,30 @@
|
|||||||
if(!istext(color))
|
if(!istext(color))
|
||||||
color = ""
|
color = ""
|
||||||
|
|
||||||
var/start = 1 + (text2ascii(color,1)==35)
|
var/start = 1 + (text2ascii(color, 1) == 35)
|
||||||
var/len = length(color)
|
var/len = length(color)
|
||||||
var/step_size = 1 + ((len+1)-start != desired_format)
|
var/char = ""
|
||||||
|
// RRGGBB -> RGB but awful
|
||||||
|
var/convert_to_shorthand = desired_format == 3 && length_char(color) > 3
|
||||||
|
|
||||||
. = ""
|
. = ""
|
||||||
for(var/i=start, i<=len, i+=step_size)
|
var/i = start
|
||||||
var/ascii = text2ascii(color,i)
|
while(i <= len)
|
||||||
switch(ascii)
|
char = color[i]
|
||||||
if(48 to 57)
|
switch(text2ascii(char))
|
||||||
. += ascii2text(ascii) //numbers 0 to 9
|
if(48 to 57) //numbers 0 to 9
|
||||||
if(97 to 102)
|
. += char
|
||||||
. += ascii2text(ascii) //letters a to f
|
if(97 to 102) //letters a to f
|
||||||
if(65 to 70)
|
. += char
|
||||||
. += ascii2text(ascii+32) //letters A to F - translates to lowercase
|
if(65 to 70) //letters A to F
|
||||||
|
. += lowertext(char)
|
||||||
else
|
else
|
||||||
break
|
break
|
||||||
|
i += length(char)
|
||||||
|
if(convert_to_shorthand && i <= len) //skip next one
|
||||||
|
i += length(color[i])
|
||||||
|
|
||||||
if(length(.) != desired_format)
|
if(length_char(.) != desired_format)
|
||||||
if(default)
|
if(default)
|
||||||
return default
|
return default
|
||||||
return crunch + repeat_string(desired_format, "0")
|
return crunch + repeat_string(desired_format, "0")
|
||||||
@@ -68,7 +74,9 @@
|
|||||||
return crunch + .
|
return crunch + .
|
||||||
|
|
||||||
/proc/sanitize_ooccolor(color)
|
/proc/sanitize_ooccolor(color)
|
||||||
var/list/HSL = rgb2hsl(hex2num(copytext(color,2,4)),hex2num(copytext(color,4,6)),hex2num(copytext(color,6,8)))
|
if(length(color) != length_char(color))
|
||||||
|
CRASH("Invalid characters in color '[color]'")
|
||||||
|
var/list/HSL = rgb2hsl(hex2num(copytext(color, 2, 4)), hex2num(copytext(color, 4, 6)), hex2num(copytext(color, 6, 8)))
|
||||||
HSL[3] = min(HSL[3],0.4)
|
HSL[3] = min(HSL[3],0.4)
|
||||||
var/list/RGB = hsl2rgb(arglist(HSL))
|
var/list/RGB = hsl2rgb(arglist(HSL))
|
||||||
return "#[num2hex(RGB[1],2)][num2hex(RGB[2],2)][num2hex(RGB[3],2)]"
|
return "#[num2hex(RGB[1],2)][num2hex(RGB[2],2)][num2hex(RGB[3],2)]"
|
||||||
@@ -52,6 +52,6 @@
|
|||||||
if(bad_chars)
|
if(bad_chars)
|
||||||
bad_match = url_encode(bad_chars_regex.match)
|
bad_match = url_encode(bad_chars_regex.match)
|
||||||
scrubbed_url += bad_match
|
scrubbed_url += bad_match
|
||||||
last_good = bad_chars + length(bad_match)
|
last_good = bad_chars + length(bad_chars_regex.match)
|
||||||
while(bad_chars)
|
while(bad_chars)
|
||||||
. = scrubbed_url
|
. = scrubbed_url
|
||||||
|
|||||||
+235
-231
@@ -40,10 +40,16 @@
|
|||||||
for(var/char in repl_chars)
|
for(var/char in repl_chars)
|
||||||
var/index = findtext(t, char)
|
var/index = findtext(t, char)
|
||||||
while(index)
|
while(index)
|
||||||
t = copytext(t, 1, index) + repl_chars[char] + copytext(t, index+1)
|
t = copytext(t, 1, index) + repl_chars[char] + copytext(t, index + length(char))
|
||||||
index = findtext(t, char, index+1)
|
index = findtext(t, char, index + length(char))
|
||||||
return t
|
return t
|
||||||
|
|
||||||
|
/proc/sanitize_name(t,list/repl_chars = null)
|
||||||
|
if(t == "space" || t == "floor" || t == "wall" || t == "r-wall" || t == "monkey" || t == "unknown" || t == "inactive ai") //prevents these common metagamey names
|
||||||
|
alert("Invalid name.")
|
||||||
|
return ""
|
||||||
|
return sanitize(t)
|
||||||
|
|
||||||
/proc/sanitize_filename(t)
|
/proc/sanitize_filename(t)
|
||||||
return sanitize_simple(t, list("\n"="", "\t"="", "/"="", "\\"="", "?"="", "%"="", "*"="", ":"="", "|"="", "\""="", "<"="", ">"=""))
|
return sanitize_simple(t, list("\n"="", "\t"="", "/"="", "\\"="", "?"="", "%"="", "*"="", ":"="", "|"="", "\""="", "<"="", ">"=""))
|
||||||
|
|
||||||
@@ -63,22 +69,28 @@
|
|||||||
|
|
||||||
|
|
||||||
//Returns null if there is any bad text in the string
|
//Returns null if there is any bad text in the string
|
||||||
/proc/reject_bad_text(text, max_length=512)
|
/proc/reject_bad_text(text, max_length = 512, ascii_only = TRUE)
|
||||||
if(length(text) > max_length)
|
var/char_count = 0
|
||||||
return //message too long
|
var/non_whitespace = FALSE
|
||||||
var/non_whitespace = 0
|
var/lenbytes = length(text)
|
||||||
for(var/i=1, i<=length(text), i++)
|
var/char = ""
|
||||||
switch(text2ascii(text,i))
|
for(var/i = 1, i <= lenbytes, i += length(char))
|
||||||
if(62,60,92,47)
|
char = text[i]
|
||||||
return //rejects the text if it contains these bad characters: <, >, \ or /
|
char_count++
|
||||||
if(127 to 255)
|
if(char_count > max_length)
|
||||||
return //rejects weird letters like �
|
return
|
||||||
|
switch(text2ascii(char))
|
||||||
|
if(62,60,92,47) // <, >, \, /
|
||||||
|
return
|
||||||
if(0 to 31)
|
if(0 to 31)
|
||||||
return //more weird stuff
|
return
|
||||||
if(32)
|
if(32)
|
||||||
continue //whitespace
|
continue //whitespace
|
||||||
|
if(127 to INFINITY)
|
||||||
|
if(ascii_only)
|
||||||
|
return
|
||||||
else
|
else
|
||||||
non_whitespace = 1
|
non_whitespace = TRUE
|
||||||
if(non_whitespace)
|
if(non_whitespace)
|
||||||
return text //only accepts the text if it has some non-spaces
|
return text //only accepts the text if it has some non-spaces
|
||||||
|
|
||||||
@@ -101,73 +113,84 @@
|
|||||||
else
|
else
|
||||||
return trim(html_encode(name), max_length)
|
return trim(html_encode(name), max_length)
|
||||||
|
|
||||||
|
#define NO_CHARS_DETECTED 0
|
||||||
|
#define SPACES_DETECTED 1
|
||||||
|
#define SYMBOLS_DETECTED 2
|
||||||
|
#define NUMBERS_DETECTED 3
|
||||||
|
#define LETTERS_DETECTED 4
|
||||||
|
|
||||||
//Filters out undesirable characters from names
|
//Filters out undesirable characters from names
|
||||||
/proc/reject_bad_name(t_in, allow_numbers=0, max_length=MAX_NAME_LEN)
|
/proc/reject_bad_name(t_in, allow_numbers = FALSE, max_length = MAX_NAME_LEN, ascii_only = TRUE)
|
||||||
if(!t_in || length(t_in) > max_length)
|
if(!t_in)
|
||||||
return //Rejects the input if it is null or if it is longer then the max length allowed
|
return //Rejects the input if it is null
|
||||||
|
|
||||||
var/number_of_alphanumeric = 0
|
var/number_of_alphanumeric = 0
|
||||||
var/last_char_group = 0
|
var/last_char_group = NO_CHARS_DETECTED
|
||||||
var/t_out = ""
|
var/t_out = ""
|
||||||
|
var/t_len = length(t_in)
|
||||||
|
var/charcount = 0
|
||||||
|
var/char = ""
|
||||||
|
|
||||||
for(var/i=1, i<=length(t_in), i++)
|
|
||||||
var/ascii_char = text2ascii(t_in,i)
|
for(var/i = 1, i <= t_len, i += length(char))
|
||||||
switch(ascii_char)
|
char = t_in[i]
|
||||||
|
|
||||||
|
switch(text2ascii(char))
|
||||||
// A .. Z
|
// A .. Z
|
||||||
if(65 to 90) //Uppercase Letters
|
if(65 to 90) //Uppercase Letters
|
||||||
t_out += ascii2text(ascii_char)
|
|
||||||
number_of_alphanumeric++
|
number_of_alphanumeric++
|
||||||
last_char_group = 4
|
last_char_group = LETTERS_DETECTED
|
||||||
|
|
||||||
// a .. z
|
// a .. z
|
||||||
if(97 to 122) //Lowercase Letters
|
if(97 to 122) //Lowercase Letters
|
||||||
if(last_char_group<2)
|
if(last_char_group == NO_CHARS_DETECTED || last_char_group == SPACES_DETECTED || last_char_group == SYMBOLS_DETECTED) //start of a word
|
||||||
t_out += ascii2text(ascii_char-32) //Force uppercase first character
|
char = uppertext(char)
|
||||||
else
|
|
||||||
t_out += ascii2text(ascii_char)
|
|
||||||
number_of_alphanumeric++
|
number_of_alphanumeric++
|
||||||
last_char_group = 4
|
last_char_group = LETTERS_DETECTED
|
||||||
|
|
||||||
// 0 .. 9
|
// 0 .. 9
|
||||||
if(48 to 57) //Numbers
|
if(48 to 57) //Numbers
|
||||||
if(!last_char_group)
|
if(last_char_group == NO_CHARS_DETECTED || !allow_numbers) //suppress at start of string
|
||||||
continue //suppress at start of string
|
|
||||||
if(!allow_numbers)
|
|
||||||
continue
|
continue
|
||||||
t_out += ascii2text(ascii_char)
|
|
||||||
number_of_alphanumeric++
|
number_of_alphanumeric++
|
||||||
last_char_group = 3
|
last_char_group = NUMBERS_DETECTED
|
||||||
|
|
||||||
// ' - .
|
// ' - .
|
||||||
if(39,45,46) //Common name punctuation
|
if(39,45,46) //Common name punctuation
|
||||||
if(!last_char_group)
|
if(last_char_group == NO_CHARS_DETECTED)
|
||||||
continue
|
continue
|
||||||
t_out += ascii2text(ascii_char)
|
last_char_group = SYMBOLS_DETECTED
|
||||||
last_char_group = 2
|
|
||||||
|
|
||||||
// ~ | @ : # $ % & * +
|
// ~ | @ : # $ % & * +
|
||||||
if(126,124,64,58,35,36,37,38,42,43) //Other symbols that we'll allow (mainly for AI)
|
if(126,124,64,58,35,36,37,38,42,43) //Other symbols that we'll allow (mainly for AI)
|
||||||
if(!last_char_group)
|
if(last_char_group == NO_CHARS_DETECTED || !allow_numbers) //suppress at start of string
|
||||||
continue //suppress at start of string
|
|
||||||
if(!allow_numbers)
|
|
||||||
continue
|
continue
|
||||||
t_out += ascii2text(ascii_char)
|
last_char_group = SYMBOLS_DETECTED
|
||||||
last_char_group = 2
|
|
||||||
|
|
||||||
//Space
|
//Space
|
||||||
if(32)
|
if(32)
|
||||||
if(last_char_group <= 1)
|
if(last_char_group == NO_CHARS_DETECTED || last_char_group == SPACES_DETECTED) //suppress double-spaces and spaces at start of string
|
||||||
continue //suppress double-spaces and spaces at start of string
|
continue
|
||||||
t_out += ascii2text(ascii_char)
|
last_char_group = SPACES_DETECTED
|
||||||
last_char_group = 1
|
|
||||||
|
if(127 to INFINITY)
|
||||||
|
if(ascii_only)
|
||||||
|
continue
|
||||||
|
last_char_group = SYMBOLS_DETECTED //for now, we'll treat all non-ascii characters like symbols even though most are letters
|
||||||
|
|
||||||
else
|
else
|
||||||
return
|
continue
|
||||||
|
|
||||||
|
t_out += char
|
||||||
|
charcount++
|
||||||
|
if(charcount >= max_length)
|
||||||
|
break
|
||||||
|
|
||||||
if(number_of_alphanumeric < 2)
|
if(number_of_alphanumeric < 2)
|
||||||
return //protects against tiny names like "A" and also names like "' ' ' ' ' ' ' '"
|
return //protects against tiny names like "A" and also names like "' ' ' ' ' ' ' '"
|
||||||
|
|
||||||
if(last_char_group == 1)
|
if(last_char_group == SPACES_DETECTED)
|
||||||
t_out = copytext(t_out,1,length(t_out)) //removes the last character (in this case a space)
|
t_out = copytext_char(t_out, 1, -1) //removes the last character (in this case a space)
|
||||||
|
|
||||||
for(var/bad_name in list("space","floor","wall","r-wall","monkey","unknown","inactive ai")) //prevents these common metagamey names
|
for(var/bad_name in list("space","floor","wall","r-wall","monkey","unknown","inactive ai")) //prevents these common metagamey names
|
||||||
if(cmptext(t_out,bad_name))
|
if(cmptext(t_out,bad_name))
|
||||||
@@ -175,6 +198,11 @@
|
|||||||
|
|
||||||
return t_out
|
return t_out
|
||||||
|
|
||||||
|
#undef NO_CHARS_DETECTED
|
||||||
|
#undef SPACES_DETECTED
|
||||||
|
#undef NUMBERS_DETECTED
|
||||||
|
#undef LETTERS_DETECTED
|
||||||
|
|
||||||
//html_encode helper proc that returns the smallest non null of two numbers
|
//html_encode helper proc that returns the smallest non null of two numbers
|
||||||
//or 0 if they're both null (needed because of findtext returning 0 when a value is not present)
|
//or 0 if they're both null (needed because of findtext returning 0 when a value is not present)
|
||||||
/proc/non_zero_min(a, b)
|
/proc/non_zero_min(a, b)
|
||||||
@@ -184,39 +212,6 @@
|
|||||||
return a
|
return a
|
||||||
return (a < b ? a : b)
|
return (a < b ? a : b)
|
||||||
|
|
||||||
/*
|
|
||||||
* Text searches
|
|
||||||
*/
|
|
||||||
|
|
||||||
//Checks the beginning of a string for a specified sub-string
|
|
||||||
//Returns the position of the substring or 0 if it was not found
|
|
||||||
/proc/dd_hasprefix(text, prefix)
|
|
||||||
var/start = 1
|
|
||||||
var/end = length(prefix) + 1
|
|
||||||
return findtext(text, prefix, start, end)
|
|
||||||
|
|
||||||
//Checks the beginning of a string for a specified sub-string. This proc is case sensitive
|
|
||||||
//Returns the position of the substring or 0 if it was not found
|
|
||||||
/proc/dd_hasprefix_case(text, prefix)
|
|
||||||
var/start = 1
|
|
||||||
var/end = length(prefix) + 1
|
|
||||||
return findtextEx(text, prefix, start, end)
|
|
||||||
|
|
||||||
//Checks the end of a string for a specified substring.
|
|
||||||
//Returns the position of the substring or 0 if it was not found
|
|
||||||
/proc/dd_hassuffix(text, suffix)
|
|
||||||
var/start = length(text) - length(suffix)
|
|
||||||
if(start)
|
|
||||||
return findtext(text, suffix, start, null)
|
|
||||||
return
|
|
||||||
|
|
||||||
//Checks the end of a string for a specified substring. This proc is case sensitive
|
|
||||||
//Returns the position of the substring or 0 if it was not found
|
|
||||||
/proc/dd_hassuffix_case(text, suffix)
|
|
||||||
var/start = length(text) - length(suffix)
|
|
||||||
if(start)
|
|
||||||
return findtextEx(text, suffix, start, null)
|
|
||||||
|
|
||||||
//Checks if any of a given list of needles is in the haystack
|
//Checks if any of a given list of needles is in the haystack
|
||||||
/proc/text_in_list(haystack, list/needle_list, start=1, end=0)
|
/proc/text_in_list(haystack, list/needle_list, start=1, end=0)
|
||||||
for(var/needle in needle_list)
|
for(var/needle in needle_list)
|
||||||
@@ -231,23 +226,19 @@
|
|||||||
return 1
|
return 1
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
//Adds 'u' number of zeros ahead of the text 't'
|
//Adds 'char' ahead of 'text' until there are 'count' characters total
|
||||||
/proc/add_zero(t, u)
|
/proc/add_leading(text, count, char = " ")
|
||||||
while (length(t) < u)
|
text = "[text]"
|
||||||
t = "0[t]"
|
var/charcount = count - length_char(text)
|
||||||
return t
|
var/list/chars_to_add[max(charcount + 1, 0)]
|
||||||
|
return jointext(chars_to_add, char) + text
|
||||||
|
|
||||||
//Adds 'u' number of spaces ahead of the text 't'
|
//Adds 'char' behind 'text' until there are 'count' characters total
|
||||||
/proc/add_lspace(t, u)
|
/proc/add_trailing(text, count, char = " ")
|
||||||
while(length(t) < u)
|
text = "[text]"
|
||||||
t = " [t]"
|
var/charcount = count - length_char(text)
|
||||||
return t
|
var/list/chars_to_add[max(charcount + 1, 0)]
|
||||||
|
return text + jointext(chars_to_add, char)
|
||||||
//Adds 'u' number of spaces behind the text 't'
|
|
||||||
/proc/add_tspace(t, u)
|
|
||||||
while(length(t) < u)
|
|
||||||
t = "[t] "
|
|
||||||
return t
|
|
||||||
|
|
||||||
//Returns a string with reserved characters and spaces before the first letter removed
|
//Returns a string with reserved characters and spaces before the first letter removed
|
||||||
/proc/trim_left(text)
|
/proc/trim_left(text)
|
||||||
@@ -267,57 +258,41 @@
|
|||||||
//Returns a string with reserved characters and spaces before the first word and after the last word removed.
|
//Returns a string with reserved characters and spaces before the first word and after the last word removed.
|
||||||
/proc/trim(text, max_length)
|
/proc/trim(text, max_length)
|
||||||
if(max_length)
|
if(max_length)
|
||||||
text = copytext(text, 1, max_length)
|
text = copytext_char(text, 1, max_length)
|
||||||
return trim_left(trim_right(text))
|
return trim_left(trim_right(text))
|
||||||
|
|
||||||
//Returns a string with the first element of the string capitalized.
|
//Returns a string with the first element of the string capitalized.
|
||||||
/proc/capitalize(t as text)
|
/proc/capitalize(t as text)
|
||||||
return uppertext(copytext(t, 1, 2)) + copytext(t, 2)
|
. = t
|
||||||
|
if(t)
|
||||||
//Centers text by adding spaces to either side of the string.
|
. = t[1]
|
||||||
/proc/dd_centertext(message, length)
|
return uppertext(.) + copytext(t, 1 + length(.))
|
||||||
var/new_message = message
|
|
||||||
var/size = length(message)
|
|
||||||
var/delta = length - size
|
|
||||||
if(size == length)
|
|
||||||
return new_message
|
|
||||||
if(size > length)
|
|
||||||
return copytext(new_message, 1, length + 1)
|
|
||||||
if(delta == 1)
|
|
||||||
return new_message + " "
|
|
||||||
if(delta % 2)
|
|
||||||
new_message = " " + new_message
|
|
||||||
delta--
|
|
||||||
var/spaces = add_lspace("",delta/2-1)
|
|
||||||
return spaces + new_message + spaces
|
|
||||||
|
|
||||||
//Limits the length of the text. Note: MAX_MESSAGE_LEN and MAX_NAME_LEN are widely used for this purpose
|
|
||||||
/proc/dd_limittext(message, length)
|
|
||||||
var/size = length(message)
|
|
||||||
if(size <= length)
|
|
||||||
return message
|
|
||||||
return copytext(message, 1, length + 1)
|
|
||||||
|
|
||||||
|
|
||||||
/proc/stringmerge(text,compare,replace = "*")
|
/proc/stringmerge(text,compare,replace = "*")
|
||||||
//This proc fills in all spaces with the "replace" var (* by default) with whatever
|
//This proc fills in all spaces with the "replace" var (* by default) with whatever
|
||||||
//is in the other string at the same spot (assuming it is not a replace char).
|
//is in the other string at the same spot (assuming it is not a replace char).
|
||||||
//This is used for fingerprints
|
//This is used for fingerprints
|
||||||
var/newtext = text
|
var/newtext = text
|
||||||
if(length(text) != length(compare))
|
var/text_it = 1 //iterators
|
||||||
return 0
|
var/comp_it = 1
|
||||||
for(var/i = 1, i < length(text), i++)
|
var/newtext_it = 1
|
||||||
var/a = copytext(text,i,i+1)
|
var/text_length = length(text)
|
||||||
var/b = copytext(compare,i,i+1)
|
var/comp_length = length(compare)
|
||||||
|
while(comp_it <= comp_length && text_it <= text_length)
|
||||||
|
var/a = text[text_it]
|
||||||
|
var/b = compare[comp_it]
|
||||||
//if it isn't both the same letter, or if they are both the replacement character
|
//if it isn't both the same letter, or if they are both the replacement character
|
||||||
//(no way to know what it was supposed to be)
|
//(no way to know what it was supposed to be)
|
||||||
if(a != b)
|
if(a != b)
|
||||||
if(a == replace) //if A is the replacement char
|
if(a == replace) //if A is the replacement char
|
||||||
newtext = copytext(newtext,1,i) + b + copytext(newtext, i+1)
|
newtext = copytext(newtext, 1, newtext_it) + b + copytext(newtext, newtext_it + length(newtext[newtext_it]))
|
||||||
else if(b == replace) //if B is the replacement char
|
else if(b == replace) //if B is the replacement char
|
||||||
newtext = copytext(newtext,1,i) + a + copytext(newtext, i+1)
|
newtext = copytext(newtext, 1, newtext_it) + a + copytext(newtext, newtext_it + length(newtext[newtext_it]))
|
||||||
else //The lists disagree, Uh-oh!
|
else //The lists disagree, Uh-oh!
|
||||||
return 0
|
return 0
|
||||||
|
text_it += length(a)
|
||||||
|
comp_it += length(b)
|
||||||
|
newtext_it += length(newtext[newtext_it])
|
||||||
return newtext
|
return newtext
|
||||||
|
|
||||||
/proc/stringpercent(text,character = "*")
|
/proc/stringpercent(text,character = "*")
|
||||||
@@ -326,16 +301,21 @@
|
|||||||
if(!text || !character)
|
if(!text || !character)
|
||||||
return 0
|
return 0
|
||||||
var/count = 0
|
var/count = 0
|
||||||
for(var/i = 1, i <= length(text), i++)
|
var/lentext = length(text)
|
||||||
var/a = copytext(text,i,i+1)
|
var/a = ""
|
||||||
|
for(var/i = 1, i <= lentext, i += length(a))
|
||||||
|
a = text[i]
|
||||||
if(a == character)
|
if(a == character)
|
||||||
count++
|
count++
|
||||||
return count
|
return count
|
||||||
|
|
||||||
/proc/reverse_text(text = "")
|
/proc/reverse_text(text = "")
|
||||||
var/new_text = ""
|
var/new_text = ""
|
||||||
for(var/i = length(text); i > 0; i--)
|
var/lentext = length(text)
|
||||||
new_text += copytext(text, i, i+1)
|
var/letter = ""
|
||||||
|
for(var/i = 1, i <= lentext, i += length(letter))
|
||||||
|
letter = text[i]
|
||||||
|
new_text = letter + new_text
|
||||||
return new_text
|
return new_text
|
||||||
|
|
||||||
GLOBAL_LIST_INIT(zero_character_only, list("0"))
|
GLOBAL_LIST_INIT(zero_character_only, list("0"))
|
||||||
@@ -358,15 +338,6 @@ GLOBAL_LIST_INIT(binary, list("0","1"))
|
|||||||
/proc/random_color()
|
/proc/random_color()
|
||||||
return random_string(6, GLOB.hex_characters)
|
return random_string(6, GLOB.hex_characters)
|
||||||
|
|
||||||
/proc/add_zero2(t, u)
|
|
||||||
var/temp1
|
|
||||||
while (length(t) < u)
|
|
||||||
t = "0[t]"
|
|
||||||
temp1 = t
|
|
||||||
if (length(t) > u)
|
|
||||||
temp1 = copytext(t,2,u+1)
|
|
||||||
return temp1
|
|
||||||
|
|
||||||
//merges non-null characters (3rd argument) from "from" into "into". Returns result
|
//merges non-null characters (3rd argument) from "from" into "into". Returns result
|
||||||
//e.g. into = "Hello World"
|
//e.g. into = "Hello World"
|
||||||
// from = "Seeya______"
|
// from = "Seeya______"
|
||||||
@@ -379,41 +350,48 @@ GLOBAL_LIST_INIT(binary, list("0","1"))
|
|||||||
into = ""
|
into = ""
|
||||||
if(!istext(from))
|
if(!istext(from))
|
||||||
from = ""
|
from = ""
|
||||||
var/null_ascii = istext(null_char) ? text2ascii(null_char,1) : null_char
|
var/null_ascii = istext(null_char) ? text2ascii(null_char, 1) : null_char
|
||||||
|
var/copying_into = FALSE
|
||||||
var/previous = 0
|
var/char = ""
|
||||||
var/start = 1
|
var/start = 1
|
||||||
var/end = length(into) + 1
|
var/end_from = length(from)
|
||||||
|
var/end_into = length(into)
|
||||||
for(var/i=1, i<end, i++)
|
var/into_it = 1
|
||||||
var/ascii = text2ascii(from, i)
|
var/from_it = 1
|
||||||
if(ascii == null_ascii)
|
while(from_it <= end_from && into_it <= end_into)
|
||||||
if(previous != 1)
|
char = from[from_it]
|
||||||
. += copytext(from, start, i)
|
if(text2ascii(char) == null_ascii)
|
||||||
start = i
|
if(!copying_into)
|
||||||
previous = 1
|
. += copytext(from, start, from_it)
|
||||||
|
start = into_it
|
||||||
|
copying_into = TRUE
|
||||||
else
|
else
|
||||||
if(previous != 0)
|
if(copying_into)
|
||||||
. += copytext(into, start, i)
|
. += copytext(into, start, into_it)
|
||||||
start = i
|
start = from_it
|
||||||
previous = 0
|
copying_into = FALSE
|
||||||
|
into_it += length(into[into_it])
|
||||||
|
from_it += length(char)
|
||||||
|
|
||||||
if(previous == 0)
|
if(copying_into)
|
||||||
. += copytext(from, start, end)
|
. += copytext(into, start)
|
||||||
else
|
else
|
||||||
. += copytext(into, start, end)
|
. += copytext(from, start, from_it)
|
||||||
|
if(into_it <= end_into)
|
||||||
|
. += copytext(into, into_it)
|
||||||
|
|
||||||
//finds the first occurrence of one of the characters from needles argument inside haystack
|
//finds the first occurrence of one of the characters from needles argument inside haystack
|
||||||
//it may appear this can be optimised, but it really can't. findtext() is so much faster than anything you can do in byondcode.
|
//it may appear this can be optimised, but it really can't. findtext() is so much faster than anything you can do in byondcode.
|
||||||
//stupid byond :(
|
//stupid byond :(
|
||||||
/proc/findchar(haystack, needles, start=1, end=0)
|
/proc/findchar(haystack, needles, start=1, end=0)
|
||||||
var/temp
|
var/char = ""
|
||||||
var/len = length(needles)
|
var/len = length(needles)
|
||||||
for(var/i=1, i<=len, i++)
|
for(var/i = 1, i <= len, i += length(char))
|
||||||
temp = findtextEx(haystack, ascii2text(text2ascii(needles,i)), start, end) //Note: ascii2text(text2ascii) is faster than copytext()
|
char = needles[i]
|
||||||
if(temp)
|
. = findtextEx(haystack, char, start, end)
|
||||||
end = temp
|
if(.)
|
||||||
return end
|
return
|
||||||
|
return 0
|
||||||
|
|
||||||
/proc/parsemarkdown_basic_step1(t, limited=FALSE)
|
/proc/parsemarkdown_basic_step1(t, limited=FALSE)
|
||||||
if(length(t) <= 0)
|
if(length(t) <= 0)
|
||||||
@@ -571,23 +549,28 @@ GLOBAL_LIST_INIT(binary, list("0","1"))
|
|||||||
|
|
||||||
return t
|
return t
|
||||||
|
|
||||||
#define string2charlist(string) (splittext(string, regex("(.)")) - splittext(string, ""))
|
/proc/text2charlist(text)
|
||||||
|
var/char = ""
|
||||||
|
var/lentext = length(text)
|
||||||
|
. = list()
|
||||||
|
for(var/i = 1, i <= lentext, i += length(char))
|
||||||
|
char = text[i]
|
||||||
|
. += char
|
||||||
|
|
||||||
/proc/rot13(text = "")
|
/proc/rot13(text = "")
|
||||||
var/list/textlist = string2charlist(text)
|
var/lentext = length(text)
|
||||||
var/list/result = list()
|
var/char = ""
|
||||||
for(var/c in textlist)
|
var/ascii = 0
|
||||||
var/ca = text2ascii(c)
|
. = ""
|
||||||
if(ca >= text2ascii("a") && ca <= text2ascii("m"))
|
for(var/i = 1, i <= lentext, i += length(char))
|
||||||
ca += 13
|
char = text[i]
|
||||||
else if(ca >= text2ascii("n") && ca <= text2ascii("z"))
|
ascii = text2ascii(char)
|
||||||
ca -= 13
|
switch(ascii)
|
||||||
else if(ca >= text2ascii("A") && ca <= text2ascii("M"))
|
if(65 to 77, 97 to 109) //A to M, a to m
|
||||||
ca += 13
|
ascii += 13
|
||||||
else if(ca >= text2ascii("N") && ca <= text2ascii("Z"))
|
if(78 to 90, 110 to 122) //N to Z, n to z
|
||||||
ca -= 13
|
ascii -= 13
|
||||||
result += ascii2text(ca)
|
. += ascii2text(ascii)
|
||||||
return jointext(result, "")
|
|
||||||
|
|
||||||
//Takes a list of values, sanitizes it down for readability and character count,
|
//Takes a list of values, sanitizes it down for readability and character count,
|
||||||
//then exports it as a json file at data/npc_saves/[filename].json.
|
//then exports it as a json file at data/npc_saves/[filename].json.
|
||||||
@@ -599,7 +582,8 @@ GLOBAL_LIST_INIT(binary, list("0","1"))
|
|||||||
return
|
return
|
||||||
|
|
||||||
//Regular expressions are, as usual, absolute magic
|
//Regular expressions are, as usual, absolute magic
|
||||||
var/regex/all_invalid_symbols = new("\[^ -~]+")
|
//Any characters outside of 32 (space) to 126 (~) because treating things you don't understand as "magic" is really stupid
|
||||||
|
var/regex/all_invalid_symbols = new(@"[^ -~]{1}")
|
||||||
|
|
||||||
var/list/accepted = list()
|
var/list/accepted = list()
|
||||||
for(var/string in proposed)
|
for(var/string in proposed)
|
||||||
@@ -607,34 +591,44 @@ GLOBAL_LIST_INIT(binary, list("0","1"))
|
|||||||
continue
|
continue
|
||||||
var/buffer = ""
|
var/buffer = ""
|
||||||
var/early_culling = TRUE
|
var/early_culling = TRUE
|
||||||
for(var/pos = 1, pos <= length(string), pos++)
|
var/lentext = length(string)
|
||||||
var/let = copytext(string, pos, (pos + 1) % length(string))
|
var/let = ""
|
||||||
if(early_culling && !findtext(let,GLOB.is_alphanumeric))
|
|
||||||
|
for(var/pos = 1, pos <= lentext, pos += length(let))
|
||||||
|
let = string[pos]
|
||||||
|
if(!findtext(let, GLOB.is_alphanumeric))
|
||||||
continue
|
continue
|
||||||
early_culling = FALSE
|
early_culling = FALSE
|
||||||
buffer += let
|
buffer = copytext(string, pos)
|
||||||
if(!findtext(buffer,GLOB.is_alphanumeric))
|
break
|
||||||
|
if(early_culling) //Never found any letters! Bail!
|
||||||
continue
|
continue
|
||||||
|
|
||||||
var/punctbuffer = ""
|
var/punctbuffer = ""
|
||||||
var/cutoff = length(buffer)
|
var/cutoff = 0
|
||||||
for(var/pos = length(buffer), pos >= 0, pos--)
|
lentext = length_char(buffer)
|
||||||
var/let = copytext(buffer, pos, (pos + 1) % length(buffer))
|
for(var/pos = 1, pos <= lentext, pos++)
|
||||||
if(findtext(let,GLOB.is_alphanumeric))
|
let = copytext_char(buffer, -pos, -pos + 1)
|
||||||
|
if(!findtext(let, GLOB.is_punctuation)) //This won't handle things like Nyaaaa!~ but that's fine
|
||||||
break
|
break
|
||||||
if(findtext(let,GLOB.is_punctuation))
|
punctbuffer += let
|
||||||
punctbuffer = let + punctbuffer //Note this isn't the same thing as using +=
|
cutoff += length(let)
|
||||||
cutoff = pos
|
|
||||||
if(punctbuffer) //We clip down excessive punctuation to get the letter count lower and reduce repeats. It's not perfect but it helps.
|
if(punctbuffer) //We clip down excessive punctuation to get the letter count lower and reduce repeats. It's not perfect but it helps.
|
||||||
var/exclaim = FALSE
|
var/exclaim = FALSE
|
||||||
var/question = FALSE
|
var/question = FALSE
|
||||||
var/periods = 0
|
var/periods = 0
|
||||||
for(var/pos = length(punctbuffer), pos >= 0, pos--)
|
lentext = length(punctbuffer)
|
||||||
var/punct = copytext(punctbuffer, pos, (pos + 1) % length(punctbuffer))
|
for(var/pos = 1, pos <= lentext, pos += length(let))
|
||||||
if(!exclaim && findtext(punct,"!"))
|
let = punctbuffer[pos]
|
||||||
|
if(!exclaim && findtext(let, "!"))
|
||||||
exclaim = TRUE
|
exclaim = TRUE
|
||||||
if(!question && findtext(punct,"?"))
|
if(question)
|
||||||
|
break
|
||||||
|
if(!question && findtext(let, "?"))
|
||||||
question = TRUE
|
question = TRUE
|
||||||
if(!exclaim && !question && findtext(punct,"."))
|
if(exclaim)
|
||||||
|
break
|
||||||
|
if(!exclaim && !question && findtext(let, ".")) //? and ! take priority over periods
|
||||||
periods += 1
|
periods += 1
|
||||||
if(exclaim)
|
if(exclaim)
|
||||||
if(question)
|
if(question)
|
||||||
@@ -643,15 +637,13 @@ GLOBAL_LIST_INIT(binary, list("0","1"))
|
|||||||
punctbuffer = "!"
|
punctbuffer = "!"
|
||||||
else if(question)
|
else if(question)
|
||||||
punctbuffer = "?"
|
punctbuffer = "?"
|
||||||
else if(periods)
|
else if(periods > 1)
|
||||||
if(periods > 1)
|
punctbuffer = "..."
|
||||||
punctbuffer = "..."
|
else
|
||||||
else
|
punctbuffer = "" //Grammer nazis be damned
|
||||||
punctbuffer = "" //Grammer nazis be damned
|
buffer = copytext(buffer, 1, -cutoff) + punctbuffer
|
||||||
buffer = copytext(buffer, 1, cutoff) + punctbuffer
|
lentext = length_char(buffer)
|
||||||
if(!findtext(buffer,GLOB.is_alphanumeric))
|
if(!buffer || lentext > 280 || lentext <= cullshort || (buffer in accepted))
|
||||||
continue
|
|
||||||
if(!buffer || length(buffer) > 280 || length(buffer) <= cullshort || buffer in accepted)
|
|
||||||
continue
|
continue
|
||||||
|
|
||||||
accepted += buffer
|
accepted += buffer
|
||||||
@@ -688,7 +680,7 @@ GLOBAL_LIST_INIT(binary, list("0","1"))
|
|||||||
|
|
||||||
var/leng = length(string)
|
var/leng = length(string)
|
||||||
|
|
||||||
var/next_space = findtext(string, " ", next_backslash + 1)
|
var/next_space = findtext(string, " ", next_backslash + length(string[next_backslash]))
|
||||||
if(!next_space)
|
if(!next_space)
|
||||||
next_space = leng - next_backslash
|
next_space = leng - next_backslash
|
||||||
|
|
||||||
@@ -696,8 +688,8 @@ GLOBAL_LIST_INIT(binary, list("0","1"))
|
|||||||
return string
|
return string
|
||||||
|
|
||||||
var/base = next_backslash == 1 ? "" : copytext(string, 1, next_backslash)
|
var/base = next_backslash == 1 ? "" : copytext(string, 1, next_backslash)
|
||||||
var/macro = lowertext(copytext(string, next_backslash + 1, next_space))
|
var/macro = lowertext(copytext(string, next_backslash + length(string[next_space]), next_space))
|
||||||
var/rest = next_backslash > leng ? "" : copytext(string, next_space + 1)
|
var/rest = next_backslash > leng ? "" : copytext(string, next_space + length(string[next_space]))
|
||||||
|
|
||||||
//See https://secure.byond.com/docs/ref/info.html#/DM/text/macros
|
//See https://secure.byond.com/docs/ref/info.html#/DM/text/macros
|
||||||
switch(macro)
|
switch(macro)
|
||||||
@@ -769,28 +761,40 @@ GLOBAL_LIST_INIT(binary, list("0","1"))
|
|||||||
return "[number]\th"
|
return "[number]\th"
|
||||||
|
|
||||||
/proc/unintelligize(message)
|
/proc/unintelligize(message)
|
||||||
var/prefix=copytext(message,1,2)
|
var/regex/word_boundaries = regex(@"\b[\S]+\b", "g")
|
||||||
|
var/prefix = message[1]
|
||||||
if(prefix == ";")
|
if(prefix == ";")
|
||||||
message = copytext(message,2)
|
message = copytext(message, 1 + length(prefix))
|
||||||
else if(prefix in list(":","#"))
|
else if(prefix in list(":", "#"))
|
||||||
prefix += copytext(message,2,3)
|
prefix += message[1 + length(prefix)]
|
||||||
message = copytext(message,3)
|
message = copytext(message, length(prefix))
|
||||||
else
|
else
|
||||||
prefix=""
|
prefix = ""
|
||||||
|
|
||||||
var/list/words = splittext(message," ")
|
|
||||||
var/list/rearranged = list()
|
var/list/rearranged = list()
|
||||||
for(var/i=1;i<=words.len;i++)
|
while(word_boundaries.Find(message))
|
||||||
var/cword = pick(words)
|
var/cword = word_boundaries.match
|
||||||
words.Remove(cword)
|
|
||||||
var/suffix = copytext(cword,length(cword)-1,length(cword))
|
|
||||||
while(length(cword)>0 && suffix in list(".",",",";","!",":","?"))
|
|
||||||
cword = copytext(cword,1 ,length(cword)-1)
|
|
||||||
suffix = copytext(cword,length(cword)-1,length(cword) )
|
|
||||||
if(length(cword))
|
if(length(cword))
|
||||||
rearranged += cword
|
rearranged += cword
|
||||||
message = "[prefix][jointext(rearranged," ")]"
|
shuffle_inplace(rearranged)
|
||||||
. = message
|
return "[prefix][jointext(rearranged, " ")]"
|
||||||
|
|
||||||
|
|
||||||
#define is_alpha(X) ((text2ascii(X) <= 122) && (text2ascii(X) >= 97))
|
#define is_alpha(X) ((text2ascii(X) <= 122) && (text2ascii(X) >= 97))
|
||||||
#define is_digit(X) ((length(X) == 1) && (length(text2num(X)) == 1))
|
#define is_digit(X) ((length(X) == 1) && (length(text2num(X)) == 1))
|
||||||
|
|
||||||
|
/// Slightly expensive proc to scramble a message using equal probabilities of character replacement from a list. DOES NOT SUPPORT HTML!
|
||||||
|
/proc/scramble_message_replace_chars(original, replaceprob = 25, list/replacementchars = list("$", "@", "!", "#", "%", "^", "&", "*"), replace_letters_only = FALSE, replace_whitespace = FALSE)
|
||||||
|
var/list/out = list()
|
||||||
|
var/static/list/whitespace = list(" ", "\n", "\t")
|
||||||
|
for(var/i in 1 to length(original))
|
||||||
|
var/char = original[i]
|
||||||
|
if(!replace_whitespace && (char in whitespace))
|
||||||
|
out += char
|
||||||
|
continue
|
||||||
|
if(replace_letters_only && (!ISINRANGE(char, 65, 90) && !ISINRANGE(char, 97, 122)))
|
||||||
|
out += char
|
||||||
|
continue
|
||||||
|
out += prob(replaceprob)? pick(replacementchars) : char
|
||||||
|
return out.Join("")
|
||||||
|
|
||||||
|
|||||||
@@ -8,14 +8,15 @@
|
|||||||
index = findtext(t, char)
|
index = findtext(t, char)
|
||||||
return t
|
return t
|
||||||
|
|
||||||
proc/TextPreview(var/string,var/len=40)
|
/proc/TextPreview(string, len = 40)
|
||||||
if(length(string) <= len)
|
var/char_len = length_char(string)
|
||||||
if(!length(string))
|
if(char_len <= len)
|
||||||
|
if(char_len)
|
||||||
return "\[...\]"
|
return "\[...\]"
|
||||||
else
|
else
|
||||||
return string
|
return string
|
||||||
else
|
else
|
||||||
return "[copytext(string, 1, 37)]..."
|
return "[copytext_char(string, 1, 37)]..."
|
||||||
|
|
||||||
GLOBAL_LIST_EMPTY(mentorlog)
|
GLOBAL_LIST_EMPTY(mentorlog)
|
||||||
GLOBAL_PROTECT(mentorlog)
|
GLOBAL_PROTECT(mentorlog)
|
||||||
|
|||||||
@@ -542,17 +542,17 @@
|
|||||||
|
|
||||||
//assumes format #RRGGBB #rrggbb
|
//assumes format #RRGGBB #rrggbb
|
||||||
/proc/color_hex2num(A)
|
/proc/color_hex2num(A)
|
||||||
if(!A)
|
if(!A || length(A) != length_char(A))
|
||||||
return 0
|
return 0
|
||||||
var/R = hex2num(copytext(A,2,4))
|
var/R = hex2num(copytext(A, 2, 4))
|
||||||
var/G = hex2num(copytext(A,4,6))
|
var/G = hex2num(copytext(A, 4, 6))
|
||||||
var/B = hex2num(copytext(A,6,0))
|
var/B = hex2num(copytext(A, 6, 0))
|
||||||
return R+G+B
|
return R+G+B
|
||||||
|
|
||||||
//word of warning: using a matrix like this as a color value will simplify it back to a string after being set
|
//word of warning: using a matrix like this as a color value will simplify it back to a string after being set
|
||||||
/proc/color_hex2color_matrix(string)
|
/proc/color_hex2color_matrix(string)
|
||||||
var/length = length(string)
|
var/length = length(string)
|
||||||
if(length != 7 && length != 9)
|
if((length != 7 && length != 9) || length != length_char(string))
|
||||||
return color_matrix_identity()
|
return color_matrix_identity()
|
||||||
var/r = hex2num(copytext(string, 2, 4))/255
|
var/r = hex2num(copytext(string, 2, 4))/255
|
||||||
var/g = hex2num(copytext(string, 4, 6))/255
|
var/g = hex2num(copytext(string, 4, 6))/255
|
||||||
|
|||||||
+99
-112
@@ -6,25 +6,18 @@
|
|||||||
|
|
||||||
//Inverts the colour of an HTML string
|
//Inverts the colour of an HTML string
|
||||||
/proc/invertHTML(HTMLstring)
|
/proc/invertHTML(HTMLstring)
|
||||||
|
if(!istext(HTMLstring))
|
||||||
if (!( istext(HTMLstring) ))
|
|
||||||
CRASH("Given non-text argument!")
|
CRASH("Given non-text argument!")
|
||||||
return
|
return
|
||||||
else
|
else if(length(HTMLstring) != 7)
|
||||||
if (length(HTMLstring) != 7)
|
CRASH("Given non-HTML argument!")
|
||||||
CRASH("Given non-HTML argument!")
|
return
|
||||||
return
|
else if(length_char(HTMLstring) != 7)
|
||||||
|
CRASH("Given non-hex symbols in argument!")
|
||||||
var/textr = copytext(HTMLstring, 2, 4)
|
var/textr = copytext(HTMLstring, 2, 4)
|
||||||
var/textg = copytext(HTMLstring, 4, 6)
|
var/textg = copytext(HTMLstring, 4, 6)
|
||||||
var/textb = copytext(HTMLstring, 6, 8)
|
var/textb = copytext(HTMLstring, 6, 8)
|
||||||
var/r = hex2num(textr)
|
return rgb(255 - hex2num(textr), 255 - hex2num(textg), 255 - hex2num(textb))
|
||||||
var/g = hex2num(textg)
|
|
||||||
var/b = hex2num(textb)
|
|
||||||
textr = num2hex(255 - r, 2)
|
|
||||||
textg = num2hex(255 - g, 2)
|
|
||||||
textb = num2hex(255 - b, 2)
|
|
||||||
return text("#[][][]", textr, textg, textb)
|
|
||||||
return
|
|
||||||
|
|
||||||
/proc/Get_Angle(atom/movable/start,atom/movable/end)//For beams.
|
/proc/Get_Angle(atom/movable/start,atom/movable/end)//For beams.
|
||||||
if(!start || !end)
|
if(!start || !end)
|
||||||
@@ -184,15 +177,15 @@ Turf and target are separate in case you want to teleport some distance from a t
|
|||||||
//Returns whether or not a player is a guest using their ckey as an input
|
//Returns whether or not a player is a guest using their ckey as an input
|
||||||
/proc/IsGuestKey(key)
|
/proc/IsGuestKey(key)
|
||||||
if (findtext(key, "Guest-", 1, 7) != 1) //was findtextEx
|
if (findtext(key, "Guest-", 1, 7) != 1) //was findtextEx
|
||||||
return 0
|
return FALSE
|
||||||
|
|
||||||
var/i, ch, len = length(key)
|
var/i, ch, len = length(key)
|
||||||
|
|
||||||
for (i = 7, i <= len, ++i)
|
for (i = 7, i <= len, ++i) //we know the first 6 chars are Guest-
|
||||||
ch = text2ascii(key, i)
|
ch = text2ascii(key, i)
|
||||||
if (ch < 48 || ch > 57)
|
if (ch < 48 || ch > 57) //0-9
|
||||||
return 0
|
return FALSE
|
||||||
return 1
|
return TRUE
|
||||||
|
|
||||||
//Generalised helper proc for letting mobs rename themselves. Used to be clname() and ainame()
|
//Generalised helper proc for letting mobs rename themselves. Used to be clname() and ainame()
|
||||||
/mob/proc/apply_pref_name(role, client/C)
|
/mob/proc/apply_pref_name(role, client/C)
|
||||||
@@ -457,36 +450,35 @@ Turf and target are separate in case you want to teleport some distance from a t
|
|||||||
|
|
||||||
/atom/proc/GetAllContents(var/T)
|
/atom/proc/GetAllContents(var/T)
|
||||||
var/list/processing_list = list(src)
|
var/list/processing_list = list(src)
|
||||||
var/list/assembled = list()
|
|
||||||
if(T)
|
if(T)
|
||||||
while(processing_list.len)
|
. = list()
|
||||||
var/atom/A = processing_list[1]
|
var/i = 0
|
||||||
processing_list.Cut(1, 2)
|
while(i < length(processing_list))
|
||||||
|
var/atom/A = processing_list[++i]
|
||||||
//Byond does not allow things to be in multiple contents, or double parent-child hierarchies, so only += is needed
|
//Byond does not allow things to be in multiple contents, or double parent-child hierarchies, so only += is needed
|
||||||
//This is also why we don't need to check against assembled as we go along
|
//This is also why we don't need to check against assembled as we go along
|
||||||
processing_list += A.contents
|
processing_list += A.contents
|
||||||
if(istype(A,T))
|
if(istype(A,T))
|
||||||
assembled += A
|
. += A
|
||||||
else
|
else
|
||||||
while(processing_list.len)
|
var/i = 0
|
||||||
var/atom/A = processing_list[1]
|
while(i < length(processing_list))
|
||||||
processing_list.Cut(1, 2)
|
var/atom/A = processing_list[++i]
|
||||||
processing_list += A.contents
|
processing_list += A.contents
|
||||||
assembled += A
|
return processing_list
|
||||||
return assembled
|
|
||||||
|
|
||||||
/atom/proc/GetAllContentsIgnoring(list/ignore_typecache)
|
/atom/proc/GetAllContentsIgnoring(list/ignore_typecache)
|
||||||
if(!length(ignore_typecache))
|
if(!length(ignore_typecache))
|
||||||
return GetAllContents()
|
return GetAllContents()
|
||||||
var/list/processing = list(src)
|
var/list/processing = list(src)
|
||||||
var/list/assembled = list()
|
. = list()
|
||||||
while(processing.len)
|
var/i = 0
|
||||||
var/atom/A = processing[1]
|
while(i < length(processing))
|
||||||
processing.Cut(1,2)
|
var/atom/A = processing[++i]
|
||||||
if(!ignore_typecache[A.type])
|
if(!ignore_typecache[A.type])
|
||||||
processing += A.contents
|
processing += A.contents
|
||||||
assembled += A
|
. += A
|
||||||
return assembled
|
|
||||||
|
|
||||||
//Step-towards method of determining whether one atom can see another. Similar to viewers()
|
//Step-towards method of determining whether one atom can see another. Similar to viewers()
|
||||||
/proc/can_see(atom/source, atom/target, length=5) // I couldnt be arsed to do actual raycasting :I This is horribly inaccurate.
|
/proc/can_see(atom/source, atom/target, length=5) // I couldnt be arsed to do actual raycasting :I This is horribly inaccurate.
|
||||||
@@ -566,82 +558,6 @@ Turf and target are separate in case you want to teleport some distance from a t
|
|||||||
else
|
else
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
//Repopulates sortedAreas list
|
|
||||||
/proc/repopulate_sorted_areas()
|
|
||||||
GLOB.sortedAreas = list()
|
|
||||||
|
|
||||||
for(var/area/A in world)
|
|
||||||
GLOB.sortedAreas.Add(A)
|
|
||||||
|
|
||||||
sortTim(GLOB.sortedAreas, /proc/cmp_name_asc)
|
|
||||||
|
|
||||||
/area/proc/addSorted()
|
|
||||||
GLOB.sortedAreas.Add(src)
|
|
||||||
sortTim(GLOB.sortedAreas, /proc/cmp_name_asc)
|
|
||||||
|
|
||||||
//Takes: Area type as a text string from a variable.
|
|
||||||
//Returns: Instance for the area in the world.
|
|
||||||
/proc/get_area_instance_from_text(areatext)
|
|
||||||
if(istext(areatext))
|
|
||||||
areatext = text2path(areatext)
|
|
||||||
return GLOB.areas_by_type[areatext]
|
|
||||||
|
|
||||||
//Takes: Area type as text string or as typepath OR an instance of the area.
|
|
||||||
//Returns: A list of all areas of that type in the world.
|
|
||||||
/proc/get_areas(areatype, subtypes=TRUE)
|
|
||||||
if(istext(areatype))
|
|
||||||
areatype = text2path(areatype)
|
|
||||||
else if(isarea(areatype))
|
|
||||||
var/area/areatemp = areatype
|
|
||||||
areatype = areatemp.type
|
|
||||||
else if(!ispath(areatype))
|
|
||||||
return null
|
|
||||||
|
|
||||||
var/list/areas = list()
|
|
||||||
if(subtypes)
|
|
||||||
var/list/cache = typecacheof(areatype)
|
|
||||||
for(var/V in GLOB.sortedAreas)
|
|
||||||
var/area/A = V
|
|
||||||
if(cache[A.type])
|
|
||||||
areas += V
|
|
||||||
else
|
|
||||||
for(var/V in GLOB.sortedAreas)
|
|
||||||
var/area/A = V
|
|
||||||
if(A.type == areatype)
|
|
||||||
areas += V
|
|
||||||
return areas
|
|
||||||
|
|
||||||
//Takes: Area type as text string or as typepath OR an instance of the area.
|
|
||||||
//Returns: A list of all turfs in areas of that type of that type in the world.
|
|
||||||
/proc/get_area_turfs(areatype, target_z = 0, subtypes=FALSE)
|
|
||||||
if(istext(areatype))
|
|
||||||
areatype = text2path(areatype)
|
|
||||||
else if(isarea(areatype))
|
|
||||||
var/area/areatemp = areatype
|
|
||||||
areatype = areatemp.type
|
|
||||||
else if(!ispath(areatype))
|
|
||||||
return null
|
|
||||||
|
|
||||||
var/list/turfs = list()
|
|
||||||
if(subtypes)
|
|
||||||
var/list/cache = typecacheof(areatype)
|
|
||||||
for(var/V in GLOB.sortedAreas)
|
|
||||||
var/area/A = V
|
|
||||||
if(!cache[A.type])
|
|
||||||
continue
|
|
||||||
for(var/turf/T in A)
|
|
||||||
if(target_z == 0 || target_z == T.z)
|
|
||||||
turfs += T
|
|
||||||
else
|
|
||||||
for(var/V in GLOB.sortedAreas)
|
|
||||||
var/area/A = V
|
|
||||||
if(A.type != areatype)
|
|
||||||
continue
|
|
||||||
for(var/turf/T in A)
|
|
||||||
if(target_z == 0 || target_z == T.z)
|
|
||||||
turfs += T
|
|
||||||
return turfs
|
|
||||||
|
|
||||||
/proc/get_cardinal_dir(atom/A, atom/B)
|
/proc/get_cardinal_dir(atom/A, atom/B)
|
||||||
var/dx = abs(B.x - A.x)
|
var/dx = abs(B.x - A.x)
|
||||||
var/dy = abs(B.y - A.y)
|
var/dy = abs(B.y - A.y)
|
||||||
@@ -1391,7 +1307,7 @@ GLOBAL_DATUM_INIT(dview_mob, /mob/dview, new)
|
|||||||
/proc/GUID()
|
/proc/GUID()
|
||||||
var/const/GUID_VERSION = "b"
|
var/const/GUID_VERSION = "b"
|
||||||
var/const/GUID_VARIANT = "d"
|
var/const/GUID_VARIANT = "d"
|
||||||
var/node_id = copytext(md5("[rand()*rand(1,9999999)][world.name][world.hub][world.hub_password][world.internet_address][world.address][world.contents.len][world.status][world.port][rand()*rand(1,9999999)]"), 1, 13)
|
var/node_id = copytext_char(md5("[rand()*rand(1,9999999)][world.name][world.hub][world.hub_password][world.internet_address][world.address][world.contents.len][world.status][world.port][rand()*rand(1,9999999)]"), 1, 13)
|
||||||
|
|
||||||
var/time_high = "[num2hex(text2num(time2text(world.realtime,"YYYY")), 2)][num2hex(world.realtime, 6)]"
|
var/time_high = "[num2hex(text2num(time2text(world.realtime,"YYYY")), 2)][num2hex(world.realtime, 6)]"
|
||||||
|
|
||||||
@@ -1578,3 +1494,74 @@ GLOBAL_DATUM_INIT(dview_mob, /mob/dview, new)
|
|||||||
return -1
|
return -1
|
||||||
else
|
else
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
|
// Converts browser keycodes to BYOND keycodes.
|
||||||
|
/proc/browser_keycode_to_byond(keycode)
|
||||||
|
keycode = text2num(keycode)
|
||||||
|
switch(keycode)
|
||||||
|
// letters and numbers
|
||||||
|
if(65 to 90, 48 to 57)
|
||||||
|
return ascii2text(keycode)
|
||||||
|
if(17)
|
||||||
|
return "Ctrl"
|
||||||
|
if(18)
|
||||||
|
return "Alt"
|
||||||
|
if(16)
|
||||||
|
return "Shift"
|
||||||
|
if(37)
|
||||||
|
return "West"
|
||||||
|
if(38)
|
||||||
|
return "North"
|
||||||
|
if(39)
|
||||||
|
return "East"
|
||||||
|
if(40)
|
||||||
|
return "South"
|
||||||
|
if(45)
|
||||||
|
return "Insert"
|
||||||
|
if(46)
|
||||||
|
return "Delete"
|
||||||
|
if(36)
|
||||||
|
return "Northwest"
|
||||||
|
if(35)
|
||||||
|
return "Southwest"
|
||||||
|
if(33)
|
||||||
|
return "Northeast"
|
||||||
|
if(34)
|
||||||
|
return "Southeast"
|
||||||
|
if(112 to 123)
|
||||||
|
return "F[keycode-111]"
|
||||||
|
if(96 to 105)
|
||||||
|
return "Numpad[keycode-96]"
|
||||||
|
if(188)
|
||||||
|
return ","
|
||||||
|
if(190)
|
||||||
|
return "."
|
||||||
|
if(189)
|
||||||
|
return "-"
|
||||||
|
|
||||||
|
/proc/generate_items_inside(list/items_list, where_to)
|
||||||
|
for(var/each_item in items_list)
|
||||||
|
for(var/i in 1 to items_list[each_item])
|
||||||
|
new each_item(where_to)
|
||||||
|
|
||||||
|
//sends a message to chat
|
||||||
|
//config_setting should be one of the following
|
||||||
|
//null - noop
|
||||||
|
//empty string - use TgsTargetBroadcast with admin_only = FALSE
|
||||||
|
//other string - use TgsChatBroadcast with the tag that matches config_setting, only works with TGS4, if using TGS3 the above method is used
|
||||||
|
/proc/send2chat(message, config_setting)
|
||||||
|
if(config_setting == null || !world.TgsAvailable())
|
||||||
|
return
|
||||||
|
var/datum/tgs_version/version = world.TgsVersion()
|
||||||
|
if(config_setting == "" || version.suite == 3)
|
||||||
|
world.TgsTargetedChatBroadcast(message, FALSE)
|
||||||
|
return
|
||||||
|
|
||||||
|
var/list/channels_to_use = list()
|
||||||
|
for(var/I in world.TgsChatChannelInfo())
|
||||||
|
var/datum/tgs_chat_channel/channel = I
|
||||||
|
if(channel.tag == config_setting)
|
||||||
|
channels_to_use += channel
|
||||||
|
|
||||||
|
if(channels_to_use.len)
|
||||||
|
world.TgsChatBroadcast()
|
||||||
@@ -0,0 +1,57 @@
|
|||||||
|
// Basic geometry things.
|
||||||
|
|
||||||
|
/datum/vector/
|
||||||
|
var/x = 0
|
||||||
|
var/y = 0
|
||||||
|
|
||||||
|
/datum/vector/New(var/x, var/y)
|
||||||
|
src.x = x
|
||||||
|
src.y = y
|
||||||
|
|
||||||
|
/datum/vector/proc/duplicate()
|
||||||
|
return new /datum/vector(x, y)
|
||||||
|
|
||||||
|
/datum/vector/proc/euclidian_norm()
|
||||||
|
return sqrt(x*x + y*y)
|
||||||
|
|
||||||
|
/datum/vector/proc/squared_norm()
|
||||||
|
return x*x + y*y
|
||||||
|
|
||||||
|
/datum/vector/proc/normalize()
|
||||||
|
var/norm = euclidian_norm()
|
||||||
|
x = x/norm
|
||||||
|
y = y/norm
|
||||||
|
return src
|
||||||
|
|
||||||
|
/datum/vector/proc/chebyshev_norm()
|
||||||
|
return max(abs(x), abs(y))
|
||||||
|
|
||||||
|
/datum/vector/proc/chebyshev_normalize()
|
||||||
|
var/norm = chebyshev_norm()
|
||||||
|
x = x/norm
|
||||||
|
y = y/norm
|
||||||
|
return src
|
||||||
|
|
||||||
|
/datum/vector/proc/is_integer()
|
||||||
|
return ISINTEGER(x) && ISINTEGER(y)
|
||||||
|
|
||||||
|
/atom/movable/proc/vector_translate(var/datum/vector/V, var/delay)
|
||||||
|
var/turf/T = get_turf(src)
|
||||||
|
var/turf/destination = locate(T.x + V.x, T.y + V.y, z)
|
||||||
|
var/datum/vector/V_norm = V.duplicate()
|
||||||
|
V_norm.chebyshev_normalize()
|
||||||
|
if (!V_norm.is_integer())
|
||||||
|
return
|
||||||
|
var/turf/destination_temp
|
||||||
|
while (destination_temp != destination)
|
||||||
|
destination_temp = locate(T.x + V_norm.x, T.y + V_norm.y, z)
|
||||||
|
forceMove(destination_temp)
|
||||||
|
T = get_turf(src)
|
||||||
|
sleep(delay + world.tick_lag) // Shortest possible time to sleep
|
||||||
|
|
||||||
|
/atom/proc/get_translated_turf(var/datum/vector/V)
|
||||||
|
var/turf/T = get_turf(src)
|
||||||
|
return locate(T.x + V.x, T.y + V.y, z)
|
||||||
|
|
||||||
|
/proc/atoms2vector(var/atom/A, var/atom/B)
|
||||||
|
return new /datum/vector((B.x - A.x), (B.y - A.y)) // Vector from A -> B
|
||||||
@@ -39,6 +39,26 @@
|
|||||||
#error You need version 512 or higher
|
#error You need version 512 or higher
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
//Compatability -- These procs were added in 513.1493, not 513.1490
|
||||||
|
//Which really shoulda bumped us up to 514 right then and there but instead Lummox is a dumb dumb
|
||||||
|
#if DM_BUILD < 1493
|
||||||
|
#define length_char(args...) length(args)
|
||||||
|
#define text2ascii_char(args...) text2ascii(args)
|
||||||
|
#define copytext_char(args...) copytext(args)
|
||||||
|
#define splittext_char(args...) splittext(args)
|
||||||
|
#define spantext_char(args...) spantext(args)
|
||||||
|
#define nonspantext_char(args...) nonspantext(args)
|
||||||
|
#define findtext_char(args...) findtext(args)
|
||||||
|
#define findtextEx_char(args...) findtextEx(args)
|
||||||
|
#define findlasttext_char(args...) findlasttext(args)
|
||||||
|
#define findlasttextEx_char(args...) findlasttextEx(args)
|
||||||
|
#define replacetext_char(args...) replacetext(args)
|
||||||
|
#define replacetextEx_char(args...) replacetextEx(args)
|
||||||
|
// /regex procs
|
||||||
|
#define Find_char(args...) Find(args)
|
||||||
|
#define Replace_char(args...) Replace(args)
|
||||||
|
#endif
|
||||||
|
|
||||||
//Additional code for the above flags.
|
//Additional code for the above flags.
|
||||||
#ifdef TESTING
|
#ifdef TESTING
|
||||||
#warn compiling in TESTING mode. testing() debug messages will be visible.
|
#warn compiling in TESTING mode. testing() debug messages will be visible.
|
||||||
|
|||||||
@@ -214,5 +214,18 @@ GLOBAL_LIST_INIT(bitfields, list(
|
|||||||
"CAN_MASTURBATE_WITH" = CAN_MASTURBATE_WITH,
|
"CAN_MASTURBATE_WITH" = CAN_MASTURBATE_WITH,
|
||||||
"MASTURBATE_LINKED_ORGAN" = MASTURBATE_LINKED_ORGAN,
|
"MASTURBATE_LINKED_ORGAN" = MASTURBATE_LINKED_ORGAN,
|
||||||
"CAN_CLIMAX_WITH" = CAN_CLIMAX_WITH
|
"CAN_CLIMAX_WITH" = CAN_CLIMAX_WITH
|
||||||
)
|
|
||||||
))
|
),
|
||||||
|
"mob_biotypes" = list (
|
||||||
|
"MOB_ORGANIC" = MOB_ORGANIC,
|
||||||
|
"MOB_MINERAL" = MOB_MINERAL,
|
||||||
|
"MOB_ROBOTIC" = MOB_ROBOTIC,
|
||||||
|
"MOB_UNDEAD" = MOB_UNDEAD,
|
||||||
|
"MOB_HUMANOID" = MOB_HUMANOID,
|
||||||
|
"MOB_BUG" = MOB_BUG,
|
||||||
|
"MOB_BEAST" = MOB_BEAST,
|
||||||
|
"MOB_EPIC" = MOB_EPIC,
|
||||||
|
"MOB_REPTILE" = MOB_REPTILE,
|
||||||
|
"MOB_SPIRIT" = MOB_SPIRIT
|
||||||
|
)
|
||||||
|
))
|
||||||
|
|||||||
@@ -1 +1,59 @@
|
|||||||
GLOBAL_LIST_EMPTY(donators_by_group) //group id = donator list of ckeys
|
GLOBAL_LIST_EMPTY(donators_by_group) //group id = donator list of ckeys
|
||||||
|
|
||||||
|
GLOBAL_LIST_INIT(flirts, list("Roses are red / Violets are good / One day while Andy...",
|
||||||
|
"My love for you is like the singularity. It cannot be contained.",
|
||||||
|
"Will you be my lusty xenomorph maid?",
|
||||||
|
"We go together like the clown and the external airlock.",
|
||||||
|
"Roses are red / Liches are wizards / I love you more than a whole squad of lizards.",
|
||||||
|
"Be my valentine. Law 2.",
|
||||||
|
"You must be a mime, because you leave me speechless.",
|
||||||
|
"I love you like Ian loves the HoP.",
|
||||||
|
"You're hotter than a plasma fire in toxins.",
|
||||||
|
"Are you a rogue atmos tech? Because you're taking my breath away.",
|
||||||
|
"Could I have all access... to your heart?",
|
||||||
|
"Call me the doctor, because I'm here to inspect your johnson.",
|
||||||
|
"I'm not a changeling, but you make my proboscis extend.",
|
||||||
|
"I just can't get EI NATH of you.",
|
||||||
|
"You must be a nuke op, because you make my heart explode.",
|
||||||
|
"Roses are red / Botany is a farm / Not being my Valentine / causes human harm.",
|
||||||
|
"I want you more than an assistant wants insulated gloves.",
|
||||||
|
"If I was a security officer, I'd brig you all shift.",
|
||||||
|
"Are you the janitor? Because I think I've fallen for you.",
|
||||||
|
"You're always valid to my heart.",
|
||||||
|
"I'd risk the wrath of the gods to bwoink you.",
|
||||||
|
"You look as beautiful now as the last time you were cloned.",
|
||||||
|
"Someone check the gravitational generator, because I'm only attracted to you.",
|
||||||
|
"If I were the warden I'd always let you into my armory.",
|
||||||
|
"The virologist is rogue, and the only cure is a kiss from you.",
|
||||||
|
"Would you spend some time in my upgraded sleeper?",
|
||||||
|
"You must be a silicon, because you've unbolted my heart.",
|
||||||
|
"Are you Nar'Sie? Because there's nar-one else I sie.",
|
||||||
|
"If you were a taser, you'd be set to stunning.",
|
||||||
|
"Do you have stamina damage from running through my dreams?",
|
||||||
|
"If I were an alien, would you let me hug you?",
|
||||||
|
"My love for you is stronger than a reinforced wall.",
|
||||||
|
"This must be the captain's office, because I see a fox.",
|
||||||
|
"I'm not a highlander, but there can only be one for me.",
|
||||||
|
"The floor is made of lava! Quick, get on my bed.",
|
||||||
|
"If you were an abandoned station you'd be the DEARelict.",
|
||||||
|
"If you had a pickaxe you'd be a shaft FINEr.",
|
||||||
|
"Roses are red, tide is gray, if I were an assistant I'd steal you away.",
|
||||||
|
"Roses are red, text is green, I love you more than cleanbots clean.",
|
||||||
|
"If you were a carp I'd fi-lay you.",
|
||||||
|
"I'm a nuke op, and my pinpointer leads to your heart.",
|
||||||
|
"Wanna slay my megafauna?",
|
||||||
|
"I'm a clockwork cultist. Or zl inyragvar.",
|
||||||
|
"If you were a disposal bin I'd ride you all day.",
|
||||||
|
"Put on your explorer's suit because I'm taking you to LOVEaland.",
|
||||||
|
"I must be the CMO, 'cause I saw you on my CUTE sensors.",
|
||||||
|
"You're the vomit to my flyperson.",
|
||||||
|
"You must be liquid dark matter, because you're pulling me closer.",
|
||||||
|
"Not even sorium can drive me away from you.",
|
||||||
|
"Wanna make like a borg and do some heavy petting?",
|
||||||
|
"Are you powering the station? Because you super matter to me.",
|
||||||
|
"I wish science could make me a bag of holding you.",
|
||||||
|
"Let's call the emergency CUDDLE.",
|
||||||
|
"I must be tripping on BZ, because I saw an angel walk by.",
|
||||||
|
"Wanna empty out my tool storage?",
|
||||||
|
"Did you visit the medbay after you fell from heaven?",
|
||||||
|
"Are you wearing space pants? Wanna not be?" ))
|
||||||
|
|||||||
@@ -91,13 +91,7 @@ GLOBAL_LIST_INIT(all_types_bloods,list(
|
|||||||
"BUG"
|
"BUG"
|
||||||
))
|
))
|
||||||
|
|
||||||
GLOBAL_LIST_INIT(blood_types, list(
|
GLOBAL_LIST_INIT(blood_reagent_types, list(
|
||||||
"blood",
|
/datum/reagent/blood,
|
||||||
"jellyblood"
|
/datum/reagent/blood/jellyblood
|
||||||
))
|
))
|
||||||
|
|
||||||
GLOBAL_LIST_INIT(blood_id_types, list(
|
|
||||||
"blood" = /datum/reagent/blood,
|
|
||||||
"jellyblood" = /datum/reagent/blood/jellyblood
|
|
||||||
))
|
|
||||||
|
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ GLOBAL_LIST_INIT(wizard_second, world.file2list("strings/names/wizardsecond.txt"
|
|||||||
GLOBAL_LIST_INIT(ninja_titles, world.file2list("strings/names/ninjatitle.txt"))
|
GLOBAL_LIST_INIT(ninja_titles, world.file2list("strings/names/ninjatitle.txt"))
|
||||||
GLOBAL_LIST_INIT(ninja_names, world.file2list("strings/names/ninjaname.txt"))
|
GLOBAL_LIST_INIT(ninja_names, world.file2list("strings/names/ninjaname.txt"))
|
||||||
GLOBAL_LIST_INIT(commando_names, world.file2list("strings/names/death_commando.txt"))
|
GLOBAL_LIST_INIT(commando_names, world.file2list("strings/names/death_commando.txt"))
|
||||||
|
GLOBAL_LIST_INIT(first_names, world.file2list("strings/names/first.txt"))
|
||||||
GLOBAL_LIST_INIT(first_names_male, world.file2list("strings/names/first_male.txt"))
|
GLOBAL_LIST_INIT(first_names_male, world.file2list("strings/names/first_male.txt"))
|
||||||
GLOBAL_LIST_INIT(first_names_female, world.file2list("strings/names/first_female.txt"))
|
GLOBAL_LIST_INIT(first_names_female, world.file2list("strings/names/first_female.txt"))
|
||||||
GLOBAL_LIST_INIT(last_names, world.file2list("strings/names/last.txt"))
|
GLOBAL_LIST_INIT(last_names, world.file2list("strings/names/last.txt"))
|
||||||
|
|||||||
@@ -32,6 +32,8 @@ GLOBAL_VAR(world_map_error_log)
|
|||||||
GLOBAL_PROTECT(world_map_error_log)
|
GLOBAL_PROTECT(world_map_error_log)
|
||||||
GLOBAL_VAR(subsystem_log)
|
GLOBAL_VAR(subsystem_log)
|
||||||
GLOBAL_PROTECT(subsystem_log)
|
GLOBAL_PROTECT(subsystem_log)
|
||||||
|
GLOBAL_VAR(reagent_log)
|
||||||
|
GLOBAL_PROTECT(reagent_log)
|
||||||
GLOBAL_VAR(world_crafting_log)
|
GLOBAL_VAR(world_crafting_log)
|
||||||
GLOBAL_PROTECT(world_crafting_log)
|
GLOBAL_PROTECT(world_crafting_log)
|
||||||
|
|
||||||
@@ -44,6 +46,9 @@ GLOBAL_PROTECT(lastsignalers)
|
|||||||
GLOBAL_LIST_EMPTY(lawchanges) //Stores who uploaded laws to which silicon-based lifeform, and what the law was
|
GLOBAL_LIST_EMPTY(lawchanges) //Stores who uploaded laws to which silicon-based lifeform, and what the law was
|
||||||
GLOBAL_PROTECT(lawchanges)
|
GLOBAL_PROTECT(lawchanges)
|
||||||
|
|
||||||
|
GLOBAL_VAR(tgui_log)
|
||||||
|
GLOBAL_PROTECT(tgui_log)
|
||||||
|
|
||||||
GLOBAL_LIST_EMPTY(combatlog)
|
GLOBAL_LIST_EMPTY(combatlog)
|
||||||
GLOBAL_PROTECT(combatlog)
|
GLOBAL_PROTECT(combatlog)
|
||||||
GLOBAL_LIST_EMPTY(IClog)
|
GLOBAL_LIST_EMPTY(IClog)
|
||||||
|
|||||||
+2
-8
@@ -140,10 +140,7 @@
|
|||||||
if(obj_flags & EMAGGED)
|
if(obj_flags & EMAGGED)
|
||||||
return
|
return
|
||||||
|
|
||||||
if(locked)
|
toggle_bolt(usr)
|
||||||
bolt_raise(usr)
|
|
||||||
else
|
|
||||||
bolt_drop(usr)
|
|
||||||
|
|
||||||
/obj/machinery/door/airlock/AIAltClick() // Eletrifies doors.
|
/obj/machinery/door/airlock/AIAltClick() // Eletrifies doors.
|
||||||
if(obj_flags & EMAGGED)
|
if(obj_flags & EMAGGED)
|
||||||
@@ -165,10 +162,7 @@
|
|||||||
if(obj_flags & EMAGGED)
|
if(obj_flags & EMAGGED)
|
||||||
return
|
return
|
||||||
|
|
||||||
if(!emergency)
|
toggle_emergency(usr)
|
||||||
emergency_on(usr)
|
|
||||||
else
|
|
||||||
emergency_off(usr)
|
|
||||||
|
|
||||||
/* APC */
|
/* APC */
|
||||||
/obj/machinery/power/apc/AICtrlClick() // turns off/on APCs.
|
/obj/machinery/power/apc/AICtrlClick() // turns off/on APCs.
|
||||||
|
|||||||
@@ -319,9 +319,11 @@
|
|||||||
/mob/proc/ShiftClickOn(atom/A)
|
/mob/proc/ShiftClickOn(atom/A)
|
||||||
A.ShiftClick(src)
|
A.ShiftClick(src)
|
||||||
return
|
return
|
||||||
|
|
||||||
/atom/proc/ShiftClick(mob/user)
|
/atom/proc/ShiftClick(mob/user)
|
||||||
SEND_SIGNAL(src, COMSIG_CLICK_SHIFT, user)
|
var/flags = SEND_SIGNAL(src, COMSIG_CLICK_SHIFT, user)
|
||||||
user.examinate(src)
|
if(!(flags & COMPONENT_DENY_EXAMINATE) && user.client && (user.client.eye == user || user.client.eye == user.loc || flags & COMPONENT_ALLOW_EXAMINATE))
|
||||||
|
user.examinate(src)
|
||||||
return
|
return
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|||||||
@@ -42,7 +42,7 @@
|
|||||||
selected_target[1] = object
|
selected_target[1] = object
|
||||||
selected_target[2] = params
|
selected_target[2] = params
|
||||||
while(selected_target[1])
|
while(selected_target[1])
|
||||||
Click(selected_target[1], location, control, selected_target[2])
|
Click(selected_target[1], location, control, selected_target[2], TRUE)
|
||||||
sleep(delay)
|
sleep(delay)
|
||||||
active_mousedown_item = mob.canMobMousedown(object, location, params)
|
active_mousedown_item = mob.canMobMousedown(object, location, params)
|
||||||
if(active_mousedown_item)
|
if(active_mousedown_item)
|
||||||
|
|||||||
@@ -50,11 +50,6 @@
|
|||||||
zone_select.update_icon()
|
zone_select.update_icon()
|
||||||
static_inventory += zone_select
|
static_inventory += zone_select
|
||||||
|
|
||||||
using = new /obj/screen/craft
|
|
||||||
using.icon = ui_style
|
|
||||||
using.hud = src
|
|
||||||
static_inventory += using
|
|
||||||
|
|
||||||
using = new /obj/screen/area_creator
|
using = new /obj/screen/area_creator
|
||||||
using.icon = ui_style
|
using.icon = ui_style
|
||||||
using.hud = src
|
using.hud = src
|
||||||
|
|||||||
@@ -91,13 +91,6 @@
|
|||||||
var/obj/screen/using
|
var/obj/screen/using
|
||||||
var/obj/screen/inventory/inv_box
|
var/obj/screen/inventory/inv_box
|
||||||
|
|
||||||
using = new /obj/screen/craft
|
|
||||||
using.icon = ui_style
|
|
||||||
if(!widescreenlayout) // CIT CHANGE
|
|
||||||
using.screen_loc = ui_boxcraft // CIT CHANGE
|
|
||||||
using.hud = src
|
|
||||||
static_inventory += using
|
|
||||||
|
|
||||||
using = new/obj/screen/language_menu
|
using = new/obj/screen/language_menu
|
||||||
using.icon = ui_style
|
using.icon = ui_style
|
||||||
if(!widescreenlayout) // CIT CHANGE
|
if(!widescreenlayout) // CIT CHANGE
|
||||||
|
|||||||
@@ -146,6 +146,8 @@
|
|||||||
|
|
||||||
|
|
||||||
/datum/hud/proc/update_parallax_motionblur(client/C, animatedir, new_parallax_movedir, matrix/newtransform)
|
/datum/hud/proc/update_parallax_motionblur(client/C, animatedir, new_parallax_movedir, matrix/newtransform)
|
||||||
|
if(!C)
|
||||||
|
return
|
||||||
C.parallax_animate_timer = FALSE
|
C.parallax_animate_timer = FALSE
|
||||||
for(var/thing in C.parallax_layers)
|
for(var/thing in C.parallax_layers)
|
||||||
var/obj/screen/parallax_layer/L = thing
|
var/obj/screen/parallax_layer/L = thing
|
||||||
|
|||||||
@@ -66,12 +66,6 @@
|
|||||||
icon_state = "craft"
|
icon_state = "craft"
|
||||||
screen_loc = ui_crafting
|
screen_loc = ui_crafting
|
||||||
|
|
||||||
/obj/screen/craft/Click()
|
|
||||||
var/mob/living/M = usr
|
|
||||||
if(isobserver(usr))
|
|
||||||
return
|
|
||||||
M.OpenCraftingMenu()
|
|
||||||
|
|
||||||
/obj/screen/area_creator
|
/obj/screen/area_creator
|
||||||
name = "create new area"
|
name = "create new area"
|
||||||
icon = 'icons/mob/screen_midnight.dmi'
|
icon = 'icons/mob/screen_midnight.dmi'
|
||||||
@@ -297,6 +291,9 @@
|
|||||||
icon_state = "internal0"
|
icon_state = "internal0"
|
||||||
else
|
else
|
||||||
if(!C.getorganslot(ORGAN_SLOT_BREATHING_TUBE))
|
if(!C.getorganslot(ORGAN_SLOT_BREATHING_TUBE))
|
||||||
|
if(HAS_TRAIT(C, TRAIT_NO_INTERNALS))
|
||||||
|
to_chat(C, "<span class='warning'>Due to cumbersome equipment or anatomy, you are currently unable to use internals!</span>")
|
||||||
|
return
|
||||||
var/obj/item/clothing/check
|
var/obj/item/clothing/check
|
||||||
var/internals = FALSE
|
var/internals = FALSE
|
||||||
|
|
||||||
|
|||||||
@@ -1,19 +1,28 @@
|
|||||||
|
/**
|
||||||
|
*This is the proc that handles the order of an item_attack.
|
||||||
|
*The order of procs called is:
|
||||||
|
*tool_act on the target. If it returns TRUE, the chain will be stopped.
|
||||||
|
*pre_attack() on src. If this returns TRUE, the chain will be stopped.
|
||||||
|
*attackby on the target. If it returns TRUE, the chain will be stopped.
|
||||||
|
*and lastly
|
||||||
|
*afterattack. The return value does not matter.
|
||||||
|
*/
|
||||||
/obj/item/proc/melee_attack_chain(mob/user, atom/target, params)
|
/obj/item/proc/melee_attack_chain(mob/user, atom/target, params)
|
||||||
if(!tool_attack_chain(user, target) && pre_attack(target, user, params))
|
if(item_flags & NO_ATTACK_CHAIN_SOFT_STAMCRIT)
|
||||||
// Return 1 in attackby() to prevent afterattack() effects (when safely moving items for example)
|
if(isliving(user))
|
||||||
var/resolved = target.attackby(src, user, params)
|
var/mob/living/L = user
|
||||||
if(!resolved && target && !QDELETED(src))
|
if(L.getStaminaLoss() >= STAMINA_SOFTCRIT)
|
||||||
afterattack(target, user, 1, params) // 1: clicking something Adjacent
|
to_chat(L, "<span class='warning'>You are too exhausted to swing [src]!</span>")
|
||||||
|
return
|
||||||
|
if(tool_behaviour && target.tool_act(user, src, tool_behaviour))
|
||||||
//Checks if the item can work as a tool, calling the appropriate tool behavior on the target
|
return
|
||||||
/obj/item/proc/tool_attack_chain(mob/user, atom/target)
|
if(pre_attack(target, user, params))
|
||||||
if(!tool_behaviour)
|
return
|
||||||
return FALSE
|
if(target.attackby(src,user, params))
|
||||||
|
return
|
||||||
return target.tool_act(user, src, tool_behaviour)
|
if(QDELETED(src) || QDELETED(target))
|
||||||
|
return
|
||||||
|
afterattack(target, user, TRUE, params)
|
||||||
|
|
||||||
// Called when the item is in the active hand, and clicked; alternately, there is an 'activate held object' verb or you can hit pagedown.
|
// Called when the item is in the active hand, and clicked; alternately, there is an 'activate held object' verb or you can hit pagedown.
|
||||||
/obj/item/proc/attack_self(mob/user)
|
/obj/item/proc/attack_self(mob/user)
|
||||||
@@ -23,8 +32,8 @@
|
|||||||
|
|
||||||
/obj/item/proc/pre_attack(atom/A, mob/living/user, params) //do stuff before attackby!
|
/obj/item/proc/pre_attack(atom/A, mob/living/user, params) //do stuff before attackby!
|
||||||
if(SEND_SIGNAL(src, COMSIG_ITEM_PRE_ATTACK, A, user, params) & COMPONENT_NO_ATTACK)
|
if(SEND_SIGNAL(src, COMSIG_ITEM_PRE_ATTACK, A, user, params) & COMPONENT_NO_ATTACK)
|
||||||
return FALSE
|
return TRUE
|
||||||
return TRUE //return FALSE to avoid calling attackby after this proc does stuff
|
return FALSE //return TRUE to avoid calling attackby after this proc does stuff
|
||||||
|
|
||||||
// No comment
|
// No comment
|
||||||
/atom/proc/attackby(obj/item/W, mob/user, params)
|
/atom/proc/attackby(obj/item/W, mob/user, params)
|
||||||
|
|||||||
@@ -171,7 +171,8 @@
|
|||||||
key_name = copytext(str_val, 1, key_pos)
|
key_name = copytext(str_val, 1, key_pos)
|
||||||
if(lowercase)
|
if(lowercase)
|
||||||
key_name = lowertext(key_name)
|
key_name = lowertext(key_name)
|
||||||
key_value = copytext(str_val, key_pos + 1)
|
if(key_pos)
|
||||||
|
key_value = copytext(str_val, key_pos + length(str_val[key_pos]))
|
||||||
var/new_key
|
var/new_key
|
||||||
var/new_value
|
var/new_value
|
||||||
var/continue_check_value
|
var/continue_check_value
|
||||||
|
|||||||
@@ -109,13 +109,13 @@
|
|||||||
if(!L)
|
if(!L)
|
||||||
continue
|
continue
|
||||||
|
|
||||||
var/firstchar = copytext(L, 1, 2)
|
var/firstchar = L[1]
|
||||||
if(firstchar == "#")
|
if(firstchar == "#")
|
||||||
continue
|
continue
|
||||||
|
|
||||||
var/lockthis = firstchar == "@"
|
var/lockthis = firstchar == "@"
|
||||||
if(lockthis)
|
if(lockthis)
|
||||||
L = copytext(L, 2)
|
L = copytext(L, length(firstchar) + 1)
|
||||||
|
|
||||||
var/pos = findtext(L, " ")
|
var/pos = findtext(L, " ")
|
||||||
var/entry = null
|
var/entry = null
|
||||||
@@ -123,7 +123,7 @@
|
|||||||
|
|
||||||
if(pos)
|
if(pos)
|
||||||
entry = lowertext(copytext(L, 1, pos))
|
entry = lowertext(copytext(L, 1, pos))
|
||||||
value = copytext(L, pos + 1)
|
value = copytext(L, pos + length(L[pos]))
|
||||||
else
|
else
|
||||||
entry = lowertext(L)
|
entry = lowertext(L)
|
||||||
|
|
||||||
@@ -193,6 +193,13 @@
|
|||||||
stat("[name]:", statclick)
|
stat("[name]:", statclick)
|
||||||
|
|
||||||
/datum/controller/configuration/proc/Get(entry_type)
|
/datum/controller/configuration/proc/Get(entry_type)
|
||||||
|
var/datum/config_entry/E = GetEntryDatum(entry_type)
|
||||||
|
if((E.protection & CONFIG_ENTRY_HIDDEN) && IsAdminAdvancedProcCall() && GLOB.LastAdminCalledProc == "Get" && GLOB.LastAdminCalledTargetRef == "[REF(src)]")
|
||||||
|
log_admin_private("Config access of [entry_type] attempted by [key_name(usr)]")
|
||||||
|
return
|
||||||
|
return E.config_entry_value
|
||||||
|
|
||||||
|
/datum/controller/configuration/proc/GetEntryDatum(entry_type)
|
||||||
var/datum/config_entry/E = entry_type
|
var/datum/config_entry/E = entry_type
|
||||||
var/entry_is_abstract = initial(E.abstract_type) == entry_type
|
var/entry_is_abstract = initial(E.abstract_type) == entry_type
|
||||||
if(entry_is_abstract)
|
if(entry_is_abstract)
|
||||||
@@ -200,10 +207,7 @@
|
|||||||
E = entries_by_type[entry_type]
|
E = entries_by_type[entry_type]
|
||||||
if(!E)
|
if(!E)
|
||||||
CRASH("Missing config entry for [entry_type]!")
|
CRASH("Missing config entry for [entry_type]!")
|
||||||
if((E.protection & CONFIG_ENTRY_HIDDEN) && IsAdminAdvancedProcCall() && GLOB.LastAdminCalledProc == "Get" && GLOB.LastAdminCalledTargetRef == "[REF(src)]")
|
return E
|
||||||
log_admin_private("Config access of [entry_type] attempted by [key_name(usr)]")
|
|
||||||
return
|
|
||||||
return E.config_entry_value
|
|
||||||
|
|
||||||
/datum/controller/configuration/proc/Set(entry_type, new_val)
|
/datum/controller/configuration/proc/Set(entry_type, new_val)
|
||||||
var/datum/config_entry/E = entry_type
|
var/datum/config_entry/E = entry_type
|
||||||
@@ -265,7 +269,7 @@
|
|||||||
t = trim(t)
|
t = trim(t)
|
||||||
if(length(t) == 0)
|
if(length(t) == 0)
|
||||||
continue
|
continue
|
||||||
else if(copytext(t, 1, 2) == "#")
|
else if(t[1] == "#")
|
||||||
continue
|
continue
|
||||||
|
|
||||||
var/pos = findtext(t, " ")
|
var/pos = findtext(t, " ")
|
||||||
@@ -274,7 +278,7 @@
|
|||||||
|
|
||||||
if(pos)
|
if(pos)
|
||||||
command = lowertext(copytext(t, 1, pos))
|
command = lowertext(copytext(t, 1, pos))
|
||||||
data = copytext(t, pos + 1)
|
data = copytext(t, pos + length(t[pos]))
|
||||||
else
|
else
|
||||||
command = lowertext(t)
|
command = lowertext(t)
|
||||||
|
|
||||||
@@ -360,6 +364,29 @@
|
|||||||
runnable_modes[M] = final_weight
|
runnable_modes[M] = final_weight
|
||||||
return runnable_modes
|
return runnable_modes
|
||||||
|
|
||||||
|
/datum/controller/configuration/proc/get_runnable_storytellers()
|
||||||
|
var/list/datum/dynamic_storyteller/runnable_storytellers = new
|
||||||
|
var/list/probabilities = Get(/datum/config_entry/keyed_list/storyteller_weight)
|
||||||
|
var/list/repeated_mode_adjust = Get(/datum/config_entry/number_list/repeated_mode_adjust)
|
||||||
|
for(var/T in storyteller_cache)
|
||||||
|
var/datum/dynamic_storyteller/S = T
|
||||||
|
var/config_tag = initial(S.config_tag)
|
||||||
|
var/final_weight = initial(S.weight)
|
||||||
|
if(probabilities[config_tag]<=0)
|
||||||
|
continue
|
||||||
|
final_weight = probabilities[config_tag]
|
||||||
|
if(SSpersistence.saved_storytellers.len == 3 && repeated_mode_adjust.len == 3)
|
||||||
|
var/name = initial(S.name)
|
||||||
|
var/recent_round = min(SSpersistence.saved_storytellers.Find(name),3)
|
||||||
|
var/adjustment = 0
|
||||||
|
while(recent_round)
|
||||||
|
adjustment += repeated_mode_adjust[recent_round]
|
||||||
|
recent_round = SSpersistence.saved_modes.Find(name,recent_round+1,0)
|
||||||
|
final_weight *= ((100-adjustment)/100)
|
||||||
|
runnable_storytellers[S] = final_weight
|
||||||
|
return runnable_storytellers
|
||||||
|
|
||||||
|
|
||||||
/datum/controller/configuration/proc/get_runnable_midround_modes(crew)
|
/datum/controller/configuration/proc/get_runnable_midround_modes(crew)
|
||||||
var/list/datum/game_mode/runnable_modes = new
|
var/list/datum/game_mode/runnable_modes = new
|
||||||
var/list/probabilities = Get(/datum/config_entry/keyed_list/probability)
|
var/list/probabilities = Get(/datum/config_entry/keyed_list/probability)
|
||||||
|
|||||||
@@ -88,3 +88,7 @@
|
|||||||
/datum/config_entry/number/dynamic_warops_cost
|
/datum/config_entry/number/dynamic_warops_cost
|
||||||
config_entry_value = 10
|
config_entry_value = 10
|
||||||
min_val = 0
|
min_val = 0
|
||||||
|
|
||||||
|
/datum/config_entry/keyed_list/storyteller_weight
|
||||||
|
key_mode = KEY_MODE_TEXT
|
||||||
|
value_mode = VALUE_MODE_NUM
|
||||||
|
|||||||
@@ -234,6 +234,7 @@
|
|||||||
|
|
||||||
/datum/config_entry/number/movedelay //Used for modifying movement speed for mobs.
|
/datum/config_entry/number/movedelay //Used for modifying movement speed for mobs.
|
||||||
abstract_type = /datum/config_entry/number/movedelay
|
abstract_type = /datum/config_entry/number/movedelay
|
||||||
|
integer = FALSE
|
||||||
|
|
||||||
/datum/config_entry/number/movedelay/ValidateAndSet()
|
/datum/config_entry/number/movedelay/ValidateAndSet()
|
||||||
. = ..()
|
. = ..()
|
||||||
@@ -249,6 +250,18 @@
|
|||||||
|
|
||||||
/datum/config_entry/number/movedelay/walk_delay
|
/datum/config_entry/number/movedelay/walk_delay
|
||||||
|
|
||||||
|
/datum/config_entry/number/movedelay/sprint_speed_increase
|
||||||
|
config_entry_value = 1
|
||||||
|
|
||||||
|
/datum/config_entry/number/movedelay/sprint_buffer_max
|
||||||
|
config_entry_value = 42
|
||||||
|
|
||||||
|
/datum/config_entry/number/movedelay/sprint_stamina_cost
|
||||||
|
config_entry_value = 0.7
|
||||||
|
|
||||||
|
/datum/config_entry/number/movedelay/sprint_buffer_regen_per_ds
|
||||||
|
config_entry_value = 0.3
|
||||||
|
|
||||||
/////////////////////////////////////////////////Outdated move delay
|
/////////////////////////////////////////////////Outdated move delay
|
||||||
/datum/config_entry/number/outdated_movedelay
|
/datum/config_entry/number/outdated_movedelay
|
||||||
deprecated_by = /datum/config_entry/keyed_list/multiplicative_movespeed
|
deprecated_by = /datum/config_entry/keyed_list/multiplicative_movespeed
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
/datum/config_entry/flag/auto_profile // Automatically start profiler on server start
|
||||||
|
|
||||||
/datum/config_entry/flag/autoadmin // if autoadmin is enabled
|
/datum/config_entry/flag/autoadmin // if autoadmin is enabled
|
||||||
protection = CONFIG_ENTRY_LOCKED
|
protection = CONFIG_ENTRY_LOCKED
|
||||||
|
|
||||||
@@ -267,6 +269,9 @@
|
|||||||
|
|
||||||
/datum/config_entry/flag/tgstyle_maprotation
|
/datum/config_entry/flag/tgstyle_maprotation
|
||||||
|
|
||||||
|
/datum/config_entry/string/map_vote_type
|
||||||
|
config_entry_value = "SCORE"
|
||||||
|
|
||||||
/datum/config_entry/number/maprotatechancedelta
|
/datum/config_entry/number/maprotatechancedelta
|
||||||
config_entry_value = 0.75
|
config_entry_value = 0.75
|
||||||
min_val = 0
|
min_val = 0
|
||||||
@@ -389,6 +394,13 @@
|
|||||||
config_entry_value = 50
|
config_entry_value = 50
|
||||||
|
|
||||||
/datum/config_entry/flag/irc_announce_new_game
|
/datum/config_entry/flag/irc_announce_new_game
|
||||||
|
deprecated_by = /datum/config_entry/string/chat_announce_new_game
|
||||||
|
|
||||||
|
/datum/config_entry/flag/irc_announce_new_game/DeprecationUpdate(value)
|
||||||
|
return "" //default broadcast
|
||||||
|
|
||||||
|
/datum/config_entry/string/chat_announce_new_game
|
||||||
|
config_entry_value = null
|
||||||
|
|
||||||
/datum/config_entry/flag/debug_admin_hrefs
|
/datum/config_entry/flag/debug_admin_hrefs
|
||||||
|
|
||||||
@@ -431,3 +443,7 @@
|
|||||||
/datum/config_entry/flag/log_pictures
|
/datum/config_entry/flag/log_pictures
|
||||||
|
|
||||||
/datum/config_entry/flag/picture_logging_camera
|
/datum/config_entry/flag/picture_logging_camera
|
||||||
|
|
||||||
|
/datum/config_entry/number/max_bunker_days
|
||||||
|
config_entry_value = 7
|
||||||
|
min_val = 1
|
||||||
|
|||||||
@@ -0,0 +1,6 @@
|
|||||||
|
/datum/config_entry/number/snowflake_plushie_prob
|
||||||
|
config_entry_value = 50
|
||||||
|
|
||||||
|
/datum/config_entry/keyed_list/snowflake_plushies
|
||||||
|
key_mode = KEY_MODE_TEXT
|
||||||
|
value_mode = VALUE_MODE_TEXT
|
||||||
@@ -239,7 +239,6 @@ SUBSYSTEM_DEF(air)
|
|||||||
if (MC_TICK_CHECK)
|
if (MC_TICK_CHECK)
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|
||||||
/datum/controller/subsystem/air/proc/remove_from_active(turf/open/T)
|
/datum/controller/subsystem/air/proc/remove_from_active(turf/open/T)
|
||||||
active_turfs -= T
|
active_turfs -= T
|
||||||
SSair_turfs.currentrun -= T
|
SSair_turfs.currentrun -= T
|
||||||
@@ -257,7 +256,7 @@ SUBSYSTEM_DEF(air)
|
|||||||
#ifdef VISUALIZE_ACTIVE_TURFS
|
#ifdef VISUALIZE_ACTIVE_TURFS
|
||||||
T.add_atom_colour("#00ff00", TEMPORARY_COLOUR_PRIORITY)
|
T.add_atom_colour("#00ff00", TEMPORARY_COLOUR_PRIORITY)
|
||||||
#endif
|
#endif
|
||||||
T.excited = 1
|
T.excited = TRUE
|
||||||
active_turfs |= T
|
active_turfs |= T
|
||||||
SSair_turfs.currentrun |= T
|
SSair_turfs.currentrun |= T
|
||||||
if(blockchanges && T.excited_group)
|
if(blockchanges && T.excited_group)
|
||||||
|
|||||||
@@ -11,7 +11,6 @@ SUBSYSTEM_DEF(air_turfs)
|
|||||||
|
|
||||||
/datum/controller/subsystem/air_turfs/fire(resumed = 0)
|
/datum/controller/subsystem/air_turfs/fire(resumed = 0)
|
||||||
var/fire_count = times_fired
|
var/fire_count = times_fired
|
||||||
//cache for sanic speed
|
|
||||||
if (!resumed)
|
if (!resumed)
|
||||||
src.currentrun = SSair.active_turfs.Copy()
|
src.currentrun = SSair.active_turfs.Copy()
|
||||||
//cache for sanic speed (lists are references anyways)
|
//cache for sanic speed (lists are references anyways)
|
||||||
|
|||||||
@@ -31,16 +31,18 @@ SUBSYSTEM_DEF(fail2topic)
|
|||||||
return ..()
|
return ..()
|
||||||
|
|
||||||
/datum/controller/subsystem/fail2topic/fire()
|
/datum/controller/subsystem/fail2topic/fire()
|
||||||
while (rate_limiting.len)
|
if(length(rate_limiting))
|
||||||
var/ip = rate_limiting[1]
|
var/i = 1
|
||||||
var/last_attempt = rate_limiting[ip]
|
while(i <= length(rate_limiting))
|
||||||
|
var/ip = rate_limiting[i]
|
||||||
if (world.time - last_attempt > rate_limit)
|
var/last_attempt = rate_limiting[ip]
|
||||||
rate_limiting -= ip
|
if(world.time - last_attempt > rate_limit)
|
||||||
fail_counts -= ip
|
rate_limiting -= ip
|
||||||
|
fail_counts -= ip
|
||||||
if (MC_TICK_CHECK)
|
else //if we remove that, and the next element is in its place. check that instead of incrementing.
|
||||||
return
|
++i
|
||||||
|
if(MC_TICK_CHECK)
|
||||||
|
return
|
||||||
|
|
||||||
/datum/controller/subsystem/fail2topic/Shutdown()
|
/datum/controller/subsystem/fail2topic/Shutdown()
|
||||||
DropFirewallRule()
|
DropFirewallRule()
|
||||||
|
|||||||
@@ -114,6 +114,6 @@ SUBSYSTEM_DEF(input)
|
|||||||
|
|
||||||
/datum/controller/subsystem/input/fire()
|
/datum/controller/subsystem/input/fire()
|
||||||
var/list/clients = GLOB.clients // Let's sing the list cache song
|
var/list/clients = GLOB.clients // Let's sing the list cache song
|
||||||
for(var/i in 1 to clients.len)
|
for(var/i in 1 to length(clients))
|
||||||
var/client/C = clients[i]
|
var/client/C = clients[i]
|
||||||
C.keyLoop()
|
C.keyLoop()
|
||||||
|
|||||||
@@ -118,7 +118,7 @@ SUBSYSTEM_DEF(job)
|
|||||||
if(flag && (!(flag in player.client.prefs.be_special)))
|
if(flag && (!(flag in player.client.prefs.be_special)))
|
||||||
JobDebug("FOC flag failed, Player: [player], Flag: [flag], ")
|
JobDebug("FOC flag failed, Player: [player], Flag: [flag], ")
|
||||||
continue
|
continue
|
||||||
if(player.mind && job.title in player.mind.restricted_roles)
|
if(player.mind && (job.title in player.mind.restricted_roles))
|
||||||
JobDebug("FOC incompatible with antagonist role, Player: [player]")
|
JobDebug("FOC incompatible with antagonist role, Player: [player]")
|
||||||
continue
|
continue
|
||||||
if(player.client.prefs.job_preferences[job.title] == level)
|
if(player.client.prefs.job_preferences[job.title] == level)
|
||||||
@@ -158,7 +158,7 @@ SUBSYSTEM_DEF(job)
|
|||||||
JobDebug("GRJ player not enough xp, Player: [player]")
|
JobDebug("GRJ player not enough xp, Player: [player]")
|
||||||
continue
|
continue
|
||||||
|
|
||||||
if(player.mind && job.title in player.mind.restricted_roles)
|
if(player.mind && (job.title in player.mind.restricted_roles))
|
||||||
JobDebug("GRJ incompatible with antagonist role, Player: [player], Job: [job.title]")
|
JobDebug("GRJ incompatible with antagonist role, Player: [player], Job: [job.title]")
|
||||||
continue
|
continue
|
||||||
|
|
||||||
@@ -340,7 +340,7 @@ SUBSYSTEM_DEF(job)
|
|||||||
JobDebug("DO non-human failed, Player: [player], Job:[job.title]")
|
JobDebug("DO non-human failed, Player: [player], Job:[job.title]")
|
||||||
continue
|
continue
|
||||||
|
|
||||||
if(player.mind && job.title in player.mind.restricted_roles)
|
if(player.mind && (job.title in player.mind.restricted_roles))
|
||||||
JobDebug("DO incompatible with antagonist role, Player: [player], Job:[job.title]")
|
JobDebug("DO incompatible with antagonist role, Player: [player], Job:[job.title]")
|
||||||
continue
|
continue
|
||||||
|
|
||||||
|
|||||||
@@ -37,6 +37,8 @@ SUBSYSTEM_DEF(mapping)
|
|||||||
var/datum/space_level/empty_space
|
var/datum/space_level/empty_space
|
||||||
var/num_of_res_levels = 1
|
var/num_of_res_levels = 1
|
||||||
|
|
||||||
|
var/stat_map_name = "Loading..."
|
||||||
|
|
||||||
//dlete dis once #39770 is resolved
|
//dlete dis once #39770 is resolved
|
||||||
/datum/controller/subsystem/mapping/proc/HACK_LoadMapConfig()
|
/datum/controller/subsystem/mapping/proc/HACK_LoadMapConfig()
|
||||||
if(!config)
|
if(!config)
|
||||||
@@ -45,6 +47,7 @@ SUBSYSTEM_DEF(mapping)
|
|||||||
#else
|
#else
|
||||||
config = load_map_config(error_if_missing = FALSE)
|
config = load_map_config(error_if_missing = FALSE)
|
||||||
#endif
|
#endif
|
||||||
|
stat_map_name = config.map_name
|
||||||
|
|
||||||
/datum/controller/subsystem/mapping/Initialize(timeofday)
|
/datum/controller/subsystem/mapping/Initialize(timeofday)
|
||||||
HACK_LoadMapConfig()
|
HACK_LoadMapConfig()
|
||||||
@@ -330,7 +333,10 @@ GLOBAL_LIST_EMPTY(the_station_areas)
|
|||||||
return
|
return
|
||||||
|
|
||||||
next_map_config = VM
|
next_map_config = VM
|
||||||
return TRUE
|
|
||||||
|
. = TRUE
|
||||||
|
|
||||||
|
stat_map_name = "[config.map_name] (Next: [next_map_config.map_name])"
|
||||||
|
|
||||||
/datum/controller/subsystem/mapping/proc/preloadTemplates(path = "_maps/templates/") //see master controller setup
|
/datum/controller/subsystem/mapping/proc/preloadTemplates(path = "_maps/templates/") //see master controller setup
|
||||||
var/list/filelist = flist(path)
|
var/list/filelist = flist(path)
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ SUBSYSTEM_DEF(nightshift)
|
|||||||
/datum/controller/subsystem/nightshift/proc/check_nightshift()
|
/datum/controller/subsystem/nightshift/proc/check_nightshift()
|
||||||
var/emergency = GLOB.security_level >= SEC_LEVEL_RED
|
var/emergency = GLOB.security_level >= SEC_LEVEL_RED
|
||||||
var/announcing = TRUE
|
var/announcing = TRUE
|
||||||
var/time = STATION_TIME(FALSE)
|
var/time = STATION_TIME(FALSE, world.time)
|
||||||
var/night_time = (time < nightshift_end_time) || (time > nightshift_start_time)
|
var/night_time = (time < nightshift_end_time) || (time > nightshift_start_time)
|
||||||
if(high_security_mode != emergency)
|
if(high_security_mode != emergency)
|
||||||
high_security_mode = emergency
|
high_security_mode = emergency
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user