Merge branch 'master' into upstream-merge-33246

This commit is contained in:
LetterJay
2017-12-20 00:27:06 -06:00
committed by GitHub
808 changed files with 14650 additions and 10287 deletions
+66
View File
@@ -0,0 +1,66 @@
# This list auto requests reviews from the specified org members
# when a PR that modifies the file in question is opened
# This list is alphabetized by User -> Filename KEEP IT THAT WAY
# ChangelingRain
/code/__DEFINES/clockcult.dm @ChangelingRain
/code/datums/antagonists/datum_clockcult.dm @ChangelingRain
/code/game/gamemodes/blob/* @ChangelingRain
/code/game/gamemodes/clock_cult/* @ChangelingRain
/code/game/gamemodes/miniantags/revenant* @ChangelingRain
/code/game/objects/effects/temporary_visuals/* @ChangelingRain
/code/modules/reagents/chemistry/reagents/blob_reagents.dm @ChangelingRain
# Cyberboss
/code/__DATASTRUCTURES/globals.dm @Cyberboss
/code/__DEFINES/components.dm @Cyberboss
/code/__DEFINES/server_tools.config.dm @Cyberboss
/code/__DEFINES/server_tools.dm @Cyberboss
/code/controllers/subsystem/atoms.dm @Cyberboss
/code/controllers/subsystem/mapping.dm @Cyberboss
/code/controllers/globals.dm @Cyberboss
/code/datums/helper_datums/getrev.dm @Cyberboss
/code/datums/components/* @Cyberboss
/code/datums/map_config.dm @Cyberboss
/code/datums/forced_movement.dm @Cyberboss
/code/datums/holocall.dm @Cyberboss
/code/modules/admin/verbs/adminhelp.dm @Cyberboss
/code/modules/admin/verbs/adminpm.dm @Cyberboss
/code/modules/server_tools/* @Cyberboss
/code/modules/mapping/* @Cyberboss
# duncathan
/code/__DEFINES/atmospherics.dm @duncathan
/code/controllers/subsystem/air.dm @duncathan
/code/modules/atmospherics/* @duncathan
# Jordie0608
/SQL/* @Jordie0608
/code/controllers/subsystem/dbcore.dm @Jordie0608
/tools/SQLAlertEmail/* @Jordie0608
# MrStonedOne
/code/__DEFINES/MC.dm @MrStonedOne
/code/__DEFINES/tick.dm @MrStonedOne
/code/controllers/admin.dm @MrStonedOne
/code/controllers/master.dm @MrStonedOne
/code/controllers/failsafe.dm @MrStonedOne
/code/controllers/subsystem.dm @MrStonedOne
/code/controllers/subsystem/air.dm @MrStonedOne
/code/controllers/subsystem/timer.dm @MrStonedOne
# ninjanomnom
/code/controllers/subsystem/shuttle.dm @ninjanomnom
/code/modules/shuttle/* @ninjanomnom
# ShizCalev
/_maps/* @ShizCalev
/icons/* @ShizCalev
/sound/* @ShizCalev
+7 -1
View File
@@ -1,3 +1,9 @@
[Directions]: # (INCLUDE THE ROUND ID from the Status panel or retrieve it from https://atlantaned.space/newSS13tools/round.php ! If you believe the issue to be caused by a test merge [OOC tab -> Show Server Revision], report it in the pull request's comment section instead. Explain your issue in detail, including the steps to reproduce it.)
[Directions]: # (If you discovered this issue from playing tgstation hosted servers
INCLUDE THE ROUND ID
from the Status panel or retrieve it from https://atlantaned.space/statbus/round.php ! If you believe the issue to be caused by a test merge [OOC tab -> Show Server Revision], report it in the pull request's comment section instead. Explain your issue in detail, including the steps to reproduce it.)
[For Admins]: # (Oddities induced by var-edits and other admin tools are not necessarily bugs. Verify that your issues occur under regular circumstances before reporting them.)
+1 -3
View File
@@ -1,12 +1,10 @@
<<<<<<< HEAD
##Citadel Station 13 <BR>
Based and maintained from /tg/station.<BR>
=======
[![Build Status](https://travis-ci.org/tgstation/tgstation.png)](https://travis-ci.org/tgstation/tgstation) [![Krihelimeter](https://www.krihelinator.xyz/badge/tgstation/tgstation)](https://www.krihelinator.xyz)
[![Percentage of issues still open](https://isitmaintained.com/badge/open/tgstation/tgstation.svg)](https://isitmaintained.com/project/tgstation/tgstation "Percentage of issues still open") [![Average time to resolve an issue](https://isitmaintained.com/badge/resolution/tgstation/tgstation.svg)](https://isitmaintained.com/project/tgstation/tgstation "Average time to resolve an issue") ![Coverage](https://img.shields.io/badge/coverage---2%25-red.svg)
[![forthebadge](https://forthebadge.com/images/badges/built-with-resentment.svg)](https://forthebadge.com) [![forthebadge](https://forthebadge.com/images/badges/contains-technical-debt.svg)](https://forthebadge.com) [![forinfinityandbyond](https://user-images.githubusercontent.com/5211576/29499758-4efff304-85e6-11e7-8267-62919c3688a9.gif)](https://www.reddit.com/r/SS13/comments/5oplxp/what_is_the_main_problem_with_byond_as_an_engine/dclbu1a)
>>>>>>> c47dde9... Merge pull request #33172 from praisenarsie/patch-12
[![Build Status](https://api.travis-ci.org/Citadel-Station-13/Citadel-Station-13.png)](https://travis-ci.org/Citadel-Station-13/Citadel-Station-13) [![Krihelimeter](http://www.krihelinator.xyz/badge/Citadel-Station-13/Citadel-Station-13)](http://www.krihelinator.xyz)
@@ -990,7 +990,7 @@
desc = "A thick gelatinous surface covers the floor. Someone get the golashes.";
name = "gelatinous floor"
},
/mob/living/simple_animal/hostile/creature{
/mob/living/simple_animal/hostile/netherworld{
desc = "Awh its so sm-OH GOD WHAT THE FUCK.";
health = 25;
maxHealth = 25;
@@ -1010,7 +1010,7 @@
icon_state = "trails_1";
dir = 10
},
/mob/living/simple_animal/hostile/creature{
/mob/living/simple_animal/hostile/netherworld{
desc = "Awh its so sm-OH GOD WHAT THE FUCK.";
health = 25;
maxHealth = 25;
@@ -1378,7 +1378,7 @@
desc = "A thick gelatinous surface covers the floor. Someone get the golashes.";
name = "gelatinous floor"
},
/mob/living/simple_animal/hostile/creature{
/mob/living/simple_animal/hostile/netherworld{
name = "Miss Tiggles"
},
/turf/open/floor/plasteel,
@@ -1888,7 +1888,7 @@
desc = "A thick gelatinous surface covers the floor. Someone get the golashes.";
name = "gelatinous floor"
},
/mob/living/simple_animal/hostile/creature{
/mob/living/simple_animal/hostile/netherworld{
desc = "Awh its so sm-OH GOD WHAT THE FUCK.";
health = 25;
maxHealth = 25;
+3 -3
View File
@@ -1561,7 +1561,7 @@
/turf/open/floor/plasteel/white,
/area/ruin/space/has_grav/ancientstation/rnd)
"eB" = (
/obj/machinery/r_n_d/destructive_analyzer,
/obj/machinery/rnd/destructive_analyzer,
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/plasteel/white,
/area/ruin/space/has_grav/ancientstation/rnd)
@@ -1891,12 +1891,12 @@
/turf/open/floor/plasteel/floorgrime,
/area/ruin/space/has_grav/ancientstation/deltacorridor)
"fu" = (
/obj/machinery/r_n_d/protolathe,
/obj/machinery/rnd/protolathe,
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/plasteel/white,
/area/ruin/space/has_grav/ancientstation/rnd)
"fv" = (
/obj/machinery/r_n_d/circuit_imprinter,
/obj/machinery/rnd/circuit_imprinter,
/obj/effect/decal/cleanable/dirt,
/obj/item/reagent_containers/dropper,
/turf/open/floor/plasteel/white,
+1 -1
View File
@@ -3738,7 +3738,7 @@
/turf/open/floor/vault,
/area/awaymission/academy/academyengine)
"ml" = (
/mob/living/simple_animal/hostile/creature,
/mob/living/simple_animal/hostile/netherworld,
/turf/open/floor/vault,
/area/awaymission/academy/academyengine)
"mm" = (
+1 -1
View File
@@ -4347,7 +4347,7 @@
/turf/open/floor/mineral/plasma,
/area/space/nearstation)
"nc" = (
/mob/living/simple_animal/hostile/creature,
/mob/living/simple_animal/hostile/netherworld,
/turf/open/floor/mineral/plasma,
/area/space/nearstation)
"nd" = (
+4 -7
View File
@@ -3430,7 +3430,7 @@
},
/area/awaymission/undergroundoutpost45/gateway)
"hB" = (
/obj/machinery/r_n_d/destructive_analyzer,
/obj/machinery/rnd/destructive_analyzer,
/obj/effect/turf_decal/stripes/line{
dir = 1
},
@@ -3448,7 +3448,7 @@
},
/area/awaymission/undergroundoutpost45/research)
"hD" = (
/obj/machinery/r_n_d/protolathe,
/obj/machinery/rnd/protolathe,
/obj/effect/turf_decal/stripes/line{
dir = 1
},
@@ -3709,7 +3709,6 @@
"ig" = (
/obj/machinery/computer/rdconsole/core{
dir = 4;
id = 3;
req_access = null
},
/turf/open/floor/plasteel{
@@ -3722,7 +3721,7 @@
},
/area/awaymission/undergroundoutpost45/research)
"ii" = (
/obj/machinery/r_n_d/circuit_imprinter,
/obj/machinery/rnd/circuit_imprinter,
/turf/open/floor/plasteel{
heat_capacity = 1e+006
},
@@ -8602,9 +8601,7 @@
dir = 4;
pixel_x = -22
},
/obj/machinery/r_n_d/server/core{
id_with_download_string = "3";
id_with_upload_string = "3";
/obj/machinery/rnd/server{
req_access = null
},
/turf/open/floor/circuit{
+5 -5
View File
@@ -726,7 +726,7 @@
/turf/open/floor/wood,
/area/awaymission/wildwest/gov)
"cG" = (
/mob/living/simple_animal/hostile/creature,
/mob/living/simple_animal/hostile/netherworld,
/turf/open/floor/plasteel/stage_bleft,
/area/awaymission/wildwest/gov)
"cH" = (
@@ -761,7 +761,7 @@
/turf/open/floor/wood,
/area/awaymission/wildwest/gov)
"cN" = (
/mob/living/simple_animal/hostile/creature,
/mob/living/simple_animal/hostile/netherworld,
/turf/open/floor/wood,
/area/awaymission/wildwest/gov)
"cO" = (
@@ -771,7 +771,7 @@
/turf/open/floor/wood,
/area/awaymission/wildwest/gov)
"cP" = (
/mob/living/simple_animal/hostile/creature,
/mob/living/simple_animal/hostile/netherworld,
/turf/open/floor/carpet,
/area/awaymission/wildwest/gov)
"cQ" = (
@@ -1024,7 +1024,7 @@
/area/awaymission/wildwest/gov)
"dB" = (
/obj/structure/toilet,
/mob/living/simple_animal/hostile/creature,
/mob/living/simple_animal/hostile/netherworld,
/turf/open/floor/plasteel/white,
/area/awaymission/wildwest/gov)
"dC" = (
@@ -1941,7 +1941,7 @@
/turf/open/floor/wood,
/area/awaymission/wildwest/mines)
"gn" = (
/mob/living/simple_animal/hostile/creature,
/mob/living/simple_animal/hostile/netherworld,
/turf/open/floor/grass,
/area/awaymission/wildwest/gov)
"go" = (
+1 -1
View File
@@ -1 +1 @@
#define FORCE_MAP "_maps/boxstation.json"
#define FORCE_MAP "_maps/boxstation.json"
+1 -1
View File
@@ -1 +1 @@
#define FORCE_MAP "_maps/deltastation.json"
#define FORCE_MAP "_maps/deltastation.json"
File diff suppressed because it is too large Load Diff
@@ -36799,7 +36799,7 @@
},
/area/hallway/primary/starboard)
"bze" = (
/obj/machinery/r_n_d/destructive_analyzer,
/obj/machinery/rnd/destructive_analyzer,
/turf/open/floor/plasteel/purple,
/area/toxins/lab)
"bzf" = (
@@ -36807,7 +36807,7 @@
/turf/open/floor/plasteel/purple,
/area/toxins/lab)
"bzg" = (
/obj/machinery/r_n_d/protolathe,
/obj/machinery/rnd/protolathe,
/turf/open/floor/plasteel/purple,
/area/toxins/lab)
"bzh" = (
@@ -37256,7 +37256,7 @@
/turf/open/floor/plasteel/purple,
/area/toxins/lab)
"bAi" = (
/obj/machinery/r_n_d/circuit_imprinter,
/obj/machinery/rnd/circuit_imprinter,
/obj/item/reagent_containers/glass/beaker/sulphuric,
/turf/open/floor/plasteel/purple,
/area/toxins/lab)
@@ -41880,7 +41880,7 @@
/turf/open/floor/plasteel/black,
/area/ai_monitored/turret_protected/aisat)
"bJa" = (
/obj/machinery/r_n_d/server/robotics,
/obj/machinery/rnd/server,
/turf/open/floor/circuit{
name = "Server Base";
initial_gas_mix = "n2=500;TEMP=80"
@@ -43179,7 +43179,7 @@
name = "AI Maintenance"
})
"bLq" = (
/obj/machinery/r_n_d/server/core,
/obj/machinery/rnd/server,
/turf/open/floor/circuit{
name = "Server Base";
initial_gas_mix = "n2=500;TEMP=80"
@@ -47412,7 +47412,7 @@
/turf/open/floor/plasteel,
/area/assembly/robotics)
"bTL" = (
/obj/machinery/r_n_d/circuit_imprinter,
/obj/machinery/rnd/circuit_imprinter,
/turf/open/floor/plasteel,
/area/assembly/robotics)
"bTM" = (
File diff suppressed because it is too large Load Diff
+105 -93
View File
@@ -4648,9 +4648,7 @@
/area/engine/gravity_generator)
"aka" = (
/obj/effect/turf_decal/bot_white/right,
/turf/open/floor/plasteel/vault{
dir = 1
},
/turf/open/floor/plasteel/dark,
/area/engine/gravity_generator)
"akb" = (
/obj/structure/sign/securearea{
@@ -4660,15 +4658,11 @@
pixel_y = 32
},
/obj/effect/turf_decal/bot_white,
/turf/open/floor/plasteel/vault{
dir = 8
},
/turf/open/floor/plasteel/dark,
/area/engine/gravity_generator)
"akc" = (
/obj/effect/turf_decal/bot_white/left,
/turf/open/floor/plasteel/vault{
dir = 4
},
/turf/open/floor/plasteel/dark,
/area/engine/gravity_generator)
"akd" = (
/turf/open/space,
@@ -5348,9 +5342,7 @@
/area/engine/gravity_generator)
"alt" = (
/obj/effect/turf_decal/bot_white,
/turf/open/floor/plasteel/vault{
dir = 8
},
/turf/open/floor/plasteel/dark,
/area/engine/gravity_generator)
"alu" = (
/obj/machinery/light{
@@ -6028,25 +6020,19 @@
dir = 10
},
/obj/effect/turf_decal/bot_white/left,
/turf/open/floor/plasteel/vault{
dir = 4
},
/turf/open/floor/plasteel/dark,
/area/engine/gravity_generator)
"amK" = (
/obj/machinery/gravity_generator/main/station,
/obj/effect/turf_decal/bot_white,
/turf/open/floor/plasteel/vault{
dir = 8
},
/turf/open/floor/plasteel/dark,
/area/engine/gravity_generator)
"amL" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 6
},
/obj/effect/turf_decal/bot_white/right,
/turf/open/floor/plasteel/vault{
dir = 1
},
/turf/open/floor/plasteel/dark,
/area/engine/gravity_generator)
"amM" = (
/obj/machinery/camera{
@@ -7525,6 +7511,9 @@
/obj/structure/reagent_dispensers/peppertank{
pixel_x = -32
},
/obj/machinery/atmospherics/components/unary/vent_pump/on{
dir = 4
},
/turf/open/floor/plasteel/red/side{
dir = 8
},
@@ -7574,6 +7563,7 @@
dir = 8;
network = list("SS13")
},
/obj/machinery/atmospherics/components/unary/vent_scrubber/on,
/turf/open/floor/plasteel/red/side{
dir = 4
},
@@ -8168,7 +8158,7 @@
/area/security/main)
"art" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 10
dir = 9
},
/turf/open/floor/plasteel/red/side{
dir = 4
@@ -8766,9 +8756,6 @@
/turf/open/floor/plasteel/showroomfloor,
/area/security/warden)
"asy" = (
/obj/machinery/atmospherics/components/unary/vent_pump/on{
dir = 4
},
/obj/vehicle/ridden/secway,
/obj/item/key/security,
/turf/open/floor/plasteel/red/side{
@@ -8821,10 +8808,12 @@
/turf/open/floor/plating,
/area/maintenance/starboard/fore)
"asC" = (
/obj/machinery/atmospherics/pipe/manifold/supply/hidden,
/obj/structure/cable/yellow{
icon_state = "2-4"
},
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 5
},
/turf/open/floor/plasteel/red/side,
/area/security/main)
"asD" = (
@@ -8913,9 +8902,7 @@
/turf/open/floor/plasteel/red/side,
/area/security/main)
"asL" = (
/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
dir = 1
},
/obj/machinery/rnd/protolathe/department/security,
/turf/open/floor/plasteel/red/side{
dir = 6
},
@@ -13028,15 +13015,18 @@
/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
dir = 4
},
/obj/structure/cable/yellow{
icon_state = "2-4"
},
/turf/open/floor/plasteel/floorgrime,
/area/security/brig)
"aBh" = (
/obj/structure/cable/yellow{
icon_state = "1-2"
},
/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
dir = 8
},
/obj/structure/cable/yellow{
icon_state = "1-8"
},
/turf/open/floor/plasteel/floorgrime,
/area/security/brig)
"aBi" = (
@@ -13346,7 +13336,11 @@
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 9
},
/obj/effect/turf_decal/stripes/line,
/obj/machinery/rnd/circuit_imprinter,
/obj/effect/turf_decal/delivery,
/obj/effect/turf_decal/stripes/line{
dir = 9
},
/turf/open/floor/plasteel,
/area/engine/engineering)
"aBM" = (
@@ -13354,13 +13348,21 @@
/obj/structure/cable/yellow{
icon_state = "1-8"
},
/obj/effect/turf_decal/stripes/line,
/obj/machinery/rnd/protolathe/department/engineering,
/obj/effect/turf_decal/delivery,
/obj/effect/turf_decal/stripes/line{
dir = 1
},
/turf/open/floor/plasteel,
/area/engine/engineering)
"aBN" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/obj/machinery/computer/rdconsole/production{
dir = 1
},
/obj/effect/turf_decal/delivery,
/obj/effect/turf_decal/stripes/line{
dir = 6
dir = 1
},
/turf/open/floor/plasteel,
/area/engine/engineering)
@@ -13638,9 +13640,6 @@
/area/security/brig)
"aCq" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/obj/structure/cable/yellow{
icon_state = "1-2"
},
/turf/closed/wall,
/area/security/brig)
"aCr" = (
@@ -14223,12 +14222,12 @@
/area/security/brig)
"aDG" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/turf/open/floor/plasteel/dark,
/area/security/brig)
"aDH" = (
/obj/structure/cable/yellow{
icon_state = "1-2"
},
/turf/open/floor/plasteel/dark,
/area/security/brig)
"aDH" = (
/obj/machinery/atmospherics/components/unary/vent_pump/on{
dir = 1
},
@@ -14918,18 +14917,15 @@
/turf/open/floor/plasteel/dark,
/area/security/brig)
"aEX" = (
/obj/structure/cable/yellow{
icon_state = "4-8"
},
/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
dir = 1
},
/obj/structure/cable/yellow{
icon_state = "1-8"
},
/turf/open/floor/plasteel/dark,
/area/security/brig)
"aEY" = (
/obj/structure/cable/yellow{
icon_state = "1-8"
},
/obj/machinery/airalarm{
dir = 8;
pixel_x = 24
@@ -22009,6 +22005,7 @@
/obj/effect/turf_decal/stripes/line{
dir = 4
},
/obj/machinery/rnd/protolathe/department/cargo,
/turf/open/floor/plasteel,
/area/quartermaster/storage)
"aUj" = (
@@ -22434,8 +22431,8 @@
/turf/open/floor/plasteel/vault,
/area/crew_quarters/dorms)
"aUY" = (
/obj/structure/closet/firecloset,
/obj/effect/turf_decal/delivery,
/obj/structure/closet/wardrobe/engineering_yellow,
/turf/open/floor/plasteel,
/area/engine/engineering)
"aUZ" = (
@@ -23919,7 +23916,6 @@
pixel_y = -3
},
/obj/item/circuitboard/machine/destructive_analyzer,
/obj/item/circuitboard/machine/protolathe,
/obj/item/circuitboard/computer/aifixer,
/obj/item/circuitboard/computer/teleporter,
/obj/item/circuitboard/machine/circuit_imprinter,
@@ -42475,7 +42471,7 @@
},
/obj/effect/turf_decal/bot_white/right,
/turf/open/floor/plasteel/vault{
dir = 1
dir = 4
},
/area/gateway)
"bJZ" = (
@@ -42487,7 +42483,7 @@
},
/obj/effect/turf_decal/bot_white,
/turf/open/floor/plasteel/vault{
dir = 8
dir = 4
},
/area/gateway)
"bKa" = (
@@ -43197,12 +43193,14 @@
},
/obj/effect/turf_decal/bot_white,
/turf/open/floor/plasteel/vault{
dir = 8
dir = 4
},
/area/gateway)
"bLE" = (
/obj/machinery/gateway/centerstation,
/turf/open/floor/plasteel/dark,
/turf/open/floor/plasteel/vault{
dir = 4
},
/area/gateway)
"bLF" = (
/obj/machinery/gateway{
@@ -43210,7 +43208,7 @@
},
/obj/effect/turf_decal/bot_white,
/turf/open/floor/plasteel/vault{
dir = 8
dir = 4
},
/area/gateway)
"bLG" = (
@@ -44086,7 +44084,7 @@
},
/obj/effect/turf_decal/bot_white,
/turf/open/floor/plasteel/vault{
dir = 8
dir = 4
},
/area/gateway)
"bNr" = (
@@ -44095,7 +44093,7 @@
},
/obj/effect/turf_decal/bot_white/right,
/turf/open/floor/plasteel/vault{
dir = 1
dir = 4
},
/area/gateway)
"bNs" = (
@@ -44701,20 +44699,26 @@
/turf/open/floor/plating,
/area/gateway)
"bOK" = (
/turf/open/floor/plasteel/vault,
/turf/open/floor/plasteel/vault{
dir = 4
},
/area/gateway)
"bOL" = (
/obj/structure/cable/yellow{
icon_state = "1-2"
},
/obj/effect/landmark/event_spawn,
/turf/open/floor/plasteel/vault,
/turf/open/floor/plasteel/vault{
dir = 4
},
/area/gateway)
"bOM" = (
/obj/machinery/light{
dir = 4
},
/turf/open/floor/plasteel/vault,
/turf/open/floor/plasteel/vault{
dir = 4
},
/area/gateway)
"bON" = (
/obj/structure/sign/securearea{
@@ -46661,7 +46665,7 @@
/area/hydroponics)
"bSW" = (
/obj/machinery/smartfridge,
/turf/closed/wall,
/turf/open/floor/plating,
/area/hydroponics)
"bSX" = (
/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
@@ -49543,6 +49547,17 @@
},
/obj/structure/closet/wardrobe/white/medical,
/obj/item/clothing/suit/hooded/wintercoat/medical,
/obj/item/storage/belt/medical{
pixel_y = 2
},
/obj/item/storage/belt/medical{
pixel_y = 2
},
/obj/item/storage/belt/medical{
pixel_y = 2
},
/obj/item/clothing/neck/stethoscope,
/obj/item/clothing/neck/stethoscope,
/turf/open/floor/plasteel/whiteblue/side{
dir = 1
},
@@ -51778,6 +51793,7 @@
/obj/item/clothing/glasses/hud/health,
/obj/item/clothing/glasses/hud/health,
/obj/item/clothing/glasses/hud/health,
/obj/item/gun/syringe,
/turf/open/floor/plasteel/whiteblue/corner{
dir = 8
},
@@ -51800,19 +51816,7 @@
},
/area/medical/storage)
"cdv" = (
/obj/item/storage/belt/medical{
pixel_y = 2
},
/obj/item/storage/belt/medical{
pixel_y = 2
},
/obj/item/storage/belt/medical{
pixel_y = 2
},
/obj/item/clothing/neck/stethoscope,
/obj/item/clothing/neck/stethoscope,
/obj/item/gun/syringe,
/obj/structure/table/glass,
/obj/machinery/rnd/protolathe/department/medical,
/turf/open/floor/plasteel/whiteblue/side{
dir = 5
},
@@ -54293,7 +54297,7 @@
},
/area/medical/chemistry)
"ciB" = (
/obj/machinery/r_n_d/destructive_analyzer,
/obj/machinery/rnd/destructive_analyzer,
/obj/machinery/airalarm{
dir = 4;
pixel_x = -23
@@ -54310,10 +54314,10 @@
/turf/open/floor/plasteel,
/area/science/lab)
"ciD" = (
/obj/machinery/r_n_d/protolathe,
/obj/effect/turf_decal/stripes/line{
dir = 1
},
/obj/machinery/rnd/protolathe/department/science,
/turf/open/floor/plasteel,
/area/science/lab)
"ciE" = (
@@ -54474,7 +54478,7 @@
/turf/open/floor/engine,
/area/science/explab)
"ciU" = (
/obj/machinery/r_n_d/experimentor,
/obj/machinery/rnd/experimentor,
/turf/open/floor/engine,
/area/science/explab)
"ciV" = (
@@ -54952,11 +54956,9 @@
/turf/open/floor/plasteel,
/area/science/lab)
"cjZ" = (
/obj/machinery/r_n_d/circuit_imprinter{
pixel_y = 4
},
/obj/item/reagent_containers/glass/beaker/sulphuric,
/obj/effect/turf_decal/stripes/line,
/obj/machinery/rnd/circuit_imprinter/department/science,
/turf/open/floor/plasteel,
/area/science/lab)
"cka" = (
@@ -66506,7 +66508,7 @@
/obj/machinery/light{
dir = 8
},
/obj/machinery/r_n_d/circuit_imprinter,
/obj/machinery/rnd/circuit_imprinter,
/obj/effect/turf_decal/bot,
/turf/open/floor/plasteel,
/area/science/robotics/lab)
@@ -67162,7 +67164,7 @@
/turf/open/floor/plating,
/area/science/server)
"cIe" = (
/obj/machinery/r_n_d/server/robotics,
/obj/machinery/rnd/server,
/turf/open/floor/circuit/telecomms/server,
/area/science/server)
"cIf" = (
@@ -68047,7 +68049,7 @@
/turf/open/floor/plating,
/area/science/server)
"cJV" = (
/obj/machinery/r_n_d/server/core,
/obj/machinery/rnd/server,
/turf/open/floor/circuit/telecomms/server,
/area/science/server)
"cJW" = (
@@ -79930,6 +79932,9 @@
name = "Security Desk";
req_access_txt = "63"
},
/obj/structure/cable/yellow{
icon_state = "1-2"
},
/turf/open/floor/plasteel/dark,
/area/security/brig)
"dBI" = (
@@ -80732,12 +80737,19 @@
/obj/effect/spawner/structure/window/plasma/reinforced,
/turf/open/floor/plating,
/area/engine/atmos)
"EDx" = (
/turf/open/space,
/turf/closed/wall/mineral/plastitanium{
dir = 8;
icon_state = "diagonalWall3"
"EDv" = (
/obj/effect/turf_decal/stripes/line{
dir = 8
},
/obj/machinery/rnd/protolathe/department/engineering,
/turf/open/floor/plasteel,
/area/engine/engineering)
"EDw" = (
/obj/machinery/rnd/protolathe/department/service,
/turf/open/floor/plating,
/area/hydroponics)
"EDx" = (
/turf/closed/wall/mineral/plastitanium,
/area/hallway/secondary/entry)
"EDy" = (
/turf/closed/wall/mineral/plastitanium{
@@ -90922,7 +90934,7 @@ aaa
aaa
aaf
aaa
EDy
EDx
aRA
aRA
aRA
@@ -110177,7 +110189,7 @@ akM
alY
cZR
cZR
cZR
EDD
arm
asC
atT
@@ -113353,7 +113365,7 @@ cEu
cHe
cIe
cIY
cJV
cIe
cIg
cPe
dvY
@@ -114857,7 +114869,7 @@ bNA
bOU
bQD
bRS
bST
EDw
bUi
bVu
bWO
@@ -118900,7 +118912,7 @@ aaa
aaa
aaf
aaa
acP
EDB
adl
aQf
adl
@@ -120475,7 +120487,7 @@ axY
aJm
aKy
aMb
aJu
EDE
axY
aPX
aRm
+204 -125
View File
@@ -319,16 +319,15 @@
},
/area/bridge)
"aaJ" = (
/obj/machinery/computer/station_alert,
/obj/structure/cable/white{
icon_state = "1-2"
},
/obj/machinery/computer/rdconsole,
/turf/open/floor/plasteel/darkyellow/side{
dir = 1
},
/area/bridge)
"aaK" = (
/obj/machinery/computer/atmos_alert,
/obj/machinery/requests_console{
announcementConsole = 1;
department = "Bridge";
@@ -336,6 +335,7 @@
name = "Bridge RC";
pixel_y = 32
},
/obj/machinery/modular_computer/console/preset/engineering,
/turf/open/floor/plasteel/darkyellow/side{
dir = 1
},
@@ -4818,9 +4818,7 @@
},
/area/quartermaster/storage)
"aiK" = (
/obj/item/twohanded/required/kirbyplants{
icon_state = "plant-22"
},
/obj/structure/closet/crate/bin,
/turf/open/floor/plasteel/brown{
dir = 1
},
@@ -4920,9 +4918,7 @@
/turf/open/floor/plating,
/area/security/brig)
"aiV" = (
/obj/structure/table/reinforced,
/obj/item/paper_bin,
/obj/item/pen,
/obj/machinery/rnd/protolathe/department/security,
/turf/open/floor/plasteel/red/side{
dir = 8
},
@@ -6493,7 +6489,6 @@
/turf/open/floor/plasteel/neutral,
/area/quartermaster/storage)
"alF" = (
/obj/structure/closet/crate/bin,
/obj/machinery/power/apc{
dir = 4;
name = "Cargo Bay APC";
@@ -6503,6 +6498,7 @@
/obj/structure/cable/white{
icon_state = "0-8"
},
/obj/machinery/rnd/protolathe/department/cargo,
/turf/open/floor/plasteel/brown{
dir = 4
},
@@ -8955,6 +8951,7 @@
"apX" = (
/obj/machinery/atmospherics/pipe/manifold/supply/hidden,
/obj/effect/turf_decal/delivery,
/obj/machinery/rnd/protolathe/department/service,
/turf/open/floor/plasteel,
/area/crew_quarters/bar/atrium)
"apY" = (
@@ -10256,27 +10253,27 @@
/obj/item/twohanded/required/kirbyplants{
icon_state = "plant-21"
},
/turf/open/floor/plasteel/redyellow,
/turf/open/floor/plasteel/bar,
/area/crew_quarters/bar/atrium)
"asf" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/obj/structure/cable/white{
icon_state = "1-2"
},
/turf/open/floor/plasteel/redyellow,
/turf/open/floor/plasteel/bar,
/area/crew_quarters/bar/atrium)
"asg" = (
/turf/open/floor/plasteel/redyellow,
/turf/open/floor/plasteel/bar,
/area/crew_quarters/bar/atrium)
"ash" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/turf/open/floor/plasteel/redyellow,
/turf/open/floor/plasteel/bar,
/area/crew_quarters/bar/atrium)
"asi" = (
/obj/item/twohanded/required/kirbyplants{
icon_state = "plant-22"
},
/turf/open/floor/plasteel/redyellow,
/turf/open/floor/plasteel/bar,
/area/crew_quarters/bar/atrium)
"asj" = (
/obj/machinery/vending/cola,
@@ -11341,16 +11338,16 @@
},
/obj/structure/table/wood,
/obj/item/kitchen/fork,
/turf/open/floor/plasteel/redyellow,
/turf/open/floor/plasteel/bar,
/area/crew_quarters/bar/atrium)
"aud" = (
/obj/structure/chair/stool,
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/turf/open/floor/plasteel/redyellow,
/turf/open/floor/plasteel/bar,
/area/crew_quarters/bar/atrium)
"aue" = (
/obj/structure/chair/stool/bar,
/turf/open/floor/plasteel/redyellow,
/turf/open/floor/plasteel/bar,
/area/crew_quarters/bar/atrium)
"auf" = (
/obj/structure/table/reinforced,
@@ -11858,7 +11855,7 @@
/obj/structure/cable/white{
icon_state = "1-2"
},
/turf/open/floor/plasteel/redyellow,
/turf/open/floor/plasteel/bar,
/area/crew_quarters/bar/atrium)
"avg" = (
/obj/structure/table/wood,
@@ -11866,7 +11863,7 @@
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 4
},
/turf/open/floor/plasteel/redyellow,
/turf/open/floor/plasteel/bar,
/area/crew_quarters/bar/atrium)
"avh" = (
/obj/structure/chair/stool,
@@ -11874,20 +11871,20 @@
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 4
},
/turf/open/floor/plasteel/redyellow,
/turf/open/floor/plasteel/bar,
/area/crew_quarters/bar/atrium)
"avi" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 4
},
/turf/open/floor/plasteel/redyellow,
/turf/open/floor/plasteel/bar,
/area/crew_quarters/bar/atrium)
"avj" = (
/obj/structure/chair/stool/bar,
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 4
},
/turf/open/floor/plasteel/redyellow,
/turf/open/floor/plasteel/bar,
/area/crew_quarters/bar/atrium)
"avk" = (
/obj/structure/table/reinforced,
@@ -12416,32 +12413,32 @@
/obj/structure/cable/white{
icon_state = "1-2"
},
/turf/open/floor/plasteel/redyellow,
/turf/open/floor/plasteel/bar,
/area/crew_quarters/bar/atrium)
"awl" = (
/obj/structure/table/wood,
/obj/item/storage/bag/tray,
/turf/open/floor/plasteel/redyellow,
/turf/open/floor/plasteel/bar,
/area/crew_quarters/bar/atrium)
"awm" = (
/obj/structure/chair/stool,
/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
dir = 8
},
/turf/open/floor/plasteel/redyellow,
/turf/open/floor/plasteel/bar,
/area/crew_quarters/bar/atrium)
"awn" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
/turf/open/floor/plasteel/redyellow,
/turf/open/floor/plasteel/bar,
/area/crew_quarters/bar/atrium)
"awo" = (
/obj/structure/chair/stool/bar,
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
/turf/open/floor/plasteel/redyellow,
/turf/open/floor/plasteel/bar,
/area/crew_quarters/bar/atrium)
"awp" = (
/obj/structure/table/reinforced,
@@ -12768,7 +12765,7 @@
/obj/machinery/atmospherics/components/unary/vent_pump/on{
dir = 4
},
/turf/open/floor/plasteel/redyellow,
/turf/open/floor/plasteel/bar,
/area/crew_quarters/bar/atrium)
"awU" = (
/obj/structure/chair/stool,
@@ -12779,7 +12776,7 @@
/obj/structure/cable/white{
icon_state = "1-2"
},
/turf/open/floor/plasteel/redyellow,
/turf/open/floor/plasteel/bar,
/area/crew_quarters/bar/atrium)
"awV" = (
/obj/structure/table/wood,
@@ -12787,13 +12784,13 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
/turf/open/floor/plasteel/redyellow,
/turf/open/floor/plasteel/bar,
/area/crew_quarters/bar/atrium)
"awW" = (
/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
dir = 4
},
/turf/open/floor/plasteel/redyellow,
/turf/open/floor/plasteel/bar,
/area/crew_quarters/bar/atrium)
"awX" = (
/obj/structure/table/reinforced,
@@ -13233,20 +13230,20 @@
/obj/structure/cable/white{
icon_state = "1-4"
},
/turf/open/floor/plasteel/redyellow,
/turf/open/floor/plasteel/bar,
/area/crew_quarters/bar/atrium)
"axP" = (
/obj/structure/cable/white{
icon_state = "4-8"
},
/turf/open/floor/plasteel/redyellow,
/turf/open/floor/plasteel/bar,
/area/crew_quarters/bar/atrium)
"axQ" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/obj/structure/cable/white{
icon_state = "4-8"
},
/turf/open/floor/plasteel/redyellow,
/turf/open/floor/plasteel/bar,
/area/crew_quarters/bar/atrium)
"axR" = (
/obj/structure/cable/white{
@@ -13567,6 +13564,14 @@
pixel_x = 32
},
/obj/item/bedsheet/blue,
/obj/machinery/button/door{
id = "Dorm3";
name = "Cabin Bolt Control";
normaldoorcontrol = 1;
pixel_y = -25;
req_access_txt = "0";
specialfunctions = 4
},
/turf/open/floor/plasteel/grimy,
/area/crew_quarters/dorms)
"ayB" = (
@@ -13578,6 +13583,14 @@
pixel_x = 32
},
/obj/item/bedsheet/red,
/obj/machinery/button/door{
id = "Dorm4";
name = "Cabin Bolt Control";
normaldoorcontrol = 1;
pixel_y = -25;
req_access_txt = "0";
specialfunctions = 4
},
/turf/open/floor/carpet,
/area/crew_quarters/dorms)
"ayD" = (
@@ -13640,24 +13653,24 @@
/obj/structure/cable/white{
icon_state = "1-2"
},
/turf/open/floor/plasteel/redyellow,
/turf/open/floor/plasteel/bar,
/area/crew_quarters/bar/atrium)
"ayK" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 4
},
/turf/open/floor/plasteel/redyellow,
/turf/open/floor/plasteel/bar,
/area/crew_quarters/bar/atrium)
"ayL" = (
/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
dir = 8
},
/turf/open/floor/plasteel/redyellow,
/turf/open/floor/plasteel/bar,
/area/crew_quarters/bar/atrium)
"ayM" = (
/obj/machinery/holopad,
/turf/open/floor/plasteel/redyellow,
/turf/open/floor/plasteel/bar,
/area/crew_quarters/bar/atrium)
"ayN" = (
/obj/item/storage/fancy/cigarettes/cigars{
@@ -14053,6 +14066,7 @@
"azD" = (
/obj/machinery/door/firedoor,
/obj/machinery/door/airlock{
id_tag = "Dorm3";
name = "Cabin"
},
/obj/effect/turf_decal/stripes/line{
@@ -14122,7 +14136,7 @@
/obj/structure/cable/white{
icon_state = "1-2"
},
/turf/open/floor/plasteel/redyellow,
/turf/open/floor/plasteel/bar,
/area/crew_quarters/bar/atrium)
"azK" = (
/obj/structure/table/wood,
@@ -14130,7 +14144,7 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
/turf/open/floor/plasteel/redyellow,
/turf/open/floor/plasteel/bar,
/area/crew_quarters/bar/atrium)
"azL" = (
/obj/structure/closet/crate/bin,
@@ -14140,7 +14154,7 @@
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 5
},
/turf/open/floor/plasteel/redyellow,
/turf/open/floor/plasteel/bar,
/area/crew_quarters/bar/atrium)
"azM" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
@@ -14618,7 +14632,7 @@
/obj/structure/cable/white{
icon_state = "0-4"
},
/turf/open/floor/plasteel/redyellow,
/turf/open/floor/plasteel/bar,
/area/crew_quarters/bar/atrium)
"aAO" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
@@ -14637,7 +14651,7 @@
/obj/structure/cable/white{
icon_state = "1-4"
},
/turf/open/floor/plasteel/redyellow,
/turf/open/floor/plasteel/bar,
/area/crew_quarters/bar/atrium)
"aAP" = (
/obj/item/reagent_containers/food/condiment/saltshaker{
@@ -14653,7 +14667,7 @@
/obj/structure/cable/white{
icon_state = "4-8"
},
/turf/open/floor/plasteel/redyellow,
/turf/open/floor/plasteel/bar,
/area/crew_quarters/bar/atrium)
"aAQ" = (
/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
@@ -14662,7 +14676,7 @@
/obj/structure/cable/white{
icon_state = "4-8"
},
/turf/open/floor/plasteel/redyellow,
/turf/open/floor/plasteel/bar,
/area/crew_quarters/bar/atrium)
"aAR" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
@@ -14671,7 +14685,7 @@
/obj/structure/cable/white{
icon_state = "4-8"
},
/turf/open/floor/plasteel/redyellow,
/turf/open/floor/plasteel/bar,
/area/crew_quarters/bar/atrium)
"aAS" = (
/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
@@ -14680,7 +14694,7 @@
/obj/structure/cable/white{
icon_state = "4-8"
},
/turf/open/floor/plasteel/redyellow,
/turf/open/floor/plasteel/bar,
/area/crew_quarters/bar/atrium)
"aAT" = (
/obj/machinery/door/airlock/maintenance_hatch{
@@ -15255,12 +15269,12 @@
/obj/machinery/light{
dir = 8
},
/turf/open/floor/plasteel/redyellow,
/turf/open/floor/plasteel/bar,
/area/crew_quarters/bar/atrium)
"aBZ" = (
/obj/structure/table/wood,
/obj/item/reagent_containers/food/snacks/cheesiehonkers,
/turf/open/floor/plasteel/redyellow,
/turf/open/floor/plasteel/bar,
/area/crew_quarters/bar/atrium)
"aCa" = (
/obj/machinery/light{
@@ -15269,7 +15283,7 @@
/obj/item/twohanded/required/kirbyplants{
icon_state = "plant-22"
},
/turf/open/floor/plasteel/redyellow,
/turf/open/floor/plasteel/bar,
/area/crew_quarters/bar/atrium)
"aCb" = (
/obj/machinery/status_display,
@@ -15761,7 +15775,7 @@
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 10
},
/turf/open/floor/plasteel/redyellow,
/turf/open/floor/plasteel/bar,
/area/crew_quarters/bar/atrium)
"aCV" = (
/obj/structure/table/reinforced,
@@ -16086,6 +16100,14 @@
pixel_x = 32
},
/obj/item/bedsheet/brown,
/obj/machinery/button/door{
id = "Dorm1";
name = "Cabin Bolt Control";
normaldoorcontrol = 1;
pixel_y = 25;
req_access_txt = "0";
specialfunctions = 4
},
/turf/open/floor/wood,
/area/crew_quarters/dorms)
"aDI" = (
@@ -16094,6 +16116,14 @@
pixel_x = 32
},
/obj/item/bedsheet/black,
/obj/machinery/button/door{
id = "Dorm2";
name = "Cabin Bolt Control";
normaldoorcontrol = 1;
pixel_y = 25;
req_access_txt = "0";
specialfunctions = 4
},
/turf/open/floor/plasteel/grimy,
/area/crew_quarters/dorms)
"aDJ" = (
@@ -16175,21 +16205,21 @@
/obj/structure/cable/white{
icon_state = "1-8"
},
/turf/open/floor/plasteel/redyellow,
/turf/open/floor/plasteel/bar,
/area/crew_quarters/bar/atrium)
"aDP" = (
/obj/effect/landmark/xmastree,
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
/turf/open/floor/plasteel/redyellow,
/turf/open/floor/plasteel/bar,
/area/crew_quarters/bar/atrium)
"aDQ" = (
/obj/structure/chair/stool/bar,
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 5
},
/turf/open/floor/plasteel/redyellow,
/turf/open/floor/plasteel/bar,
/area/crew_quarters/bar/atrium)
"aDR" = (
/obj/structure/table/reinforced,
@@ -16654,28 +16684,26 @@
/turf/open/floor/plasteel/neutral/corner,
/area/hallway/primary/central)
"aEK" = (
/obj/machinery/vending/clothing,
/obj/machinery/firealarm{
dir = 8;
pixel_x = -24
},
/obj/structure/closet/crate/bin,
/turf/open/floor/plasteel/vault{
dir = 5
},
/area/crew_quarters/dorms)
"aEL" = (
/obj/item/twohanded/required/kirbyplants{
icon_state = "plant-21"
},
/obj/machinery/status_display{
pixel_y = -32
},
/obj/machinery/vending/kink,
/turf/open/floor/plasteel/vault{
dir = 5
},
/area/crew_quarters/dorms)
"aEM" = (
/obj/structure/closet/crate/bin,
/obj/machinery/vending/clothing,
/turf/open/floor/plasteel/vault{
dir = 5
},
@@ -16798,12 +16826,12 @@
/obj/structure/cable/white{
icon_state = "1-2"
},
/turf/open/floor/plasteel/redyellow,
/turf/open/floor/plasteel/bar,
/area/crew_quarters/bar/atrium)
"aEX" = (
/obj/structure/table/wood,
/obj/item/reagent_containers/food/snacks/chips,
/turf/open/floor/plasteel/redyellow,
/turf/open/floor/plasteel/bar,
/area/crew_quarters/bar/atrium)
"aEY" = (
/obj/structure/table/reinforced,
@@ -17271,7 +17299,7 @@
dir = 4;
network = list("MINE")
},
/turf/open/floor/plasteel/redyellow,
/turf/open/floor/plasteel/bar,
/area/crew_quarters/bar/atrium)
"aFO" = (
/obj/structure/table/wood,
@@ -17279,14 +17307,14 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
/turf/open/floor/plasteel/redyellow,
/turf/open/floor/plasteel/bar,
/area/crew_quarters/bar/atrium)
"aFP" = (
/obj/structure/chair/stool,
/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
dir = 4
},
/turf/open/floor/plasteel/redyellow,
/turf/open/floor/plasteel/bar,
/area/crew_quarters/bar/atrium)
"aFQ" = (
/obj/structure/table/reinforced,
@@ -17763,7 +17791,7 @@
/obj/structure/cable/white{
icon_state = "2-8"
},
/turf/open/floor/plasteel/redyellow,
/turf/open/floor/plasteel/bar,
/area/crew_quarters/bar/atrium)
"aGO" = (
/obj/item/reagent_containers/food/condiment/saltshaker{
@@ -17778,7 +17806,7 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
/turf/open/floor/plasteel/redyellow,
/turf/open/floor/plasteel/bar,
/area/crew_quarters/bar/atrium)
"aGP" = (
/obj/structure/chair/stool,
@@ -17786,7 +17814,7 @@
/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
dir = 4
},
/turf/open/floor/plasteel/redyellow,
/turf/open/floor/plasteel/bar,
/area/crew_quarters/bar/atrium)
"aGQ" = (
/obj/machinery/holopad,
@@ -17794,7 +17822,7 @@
name = "Station Intercom";
pixel_x = 28
},
/turf/open/floor/plasteel/redyellow,
/turf/open/floor/plasteel/bar,
/area/crew_quarters/bar/atrium)
"aGR" = (
/obj/machinery/vending/dinnerware,
@@ -18411,7 +18439,7 @@
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 4
},
/turf/open/floor/plasteel/redyellow,
/turf/open/floor/plasteel/bar,
/area/crew_quarters/bar/atrium)
"aHS" = (
/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
@@ -18420,12 +18448,12 @@
/obj/structure/cable/white{
icon_state = "1-2"
},
/turf/open/floor/plasteel/redyellow,
/turf/open/floor/plasteel/bar,
/area/crew_quarters/bar/atrium)
"aHT" = (
/obj/structure/table/wood,
/obj/item/reagent_containers/food/drinks/coffee,
/turf/open/floor/plasteel/redyellow,
/turf/open/floor/plasteel/bar,
/area/crew_quarters/bar/atrium)
"aHU" = (
/obj/item/twohanded/required/kirbyplants{
@@ -18434,7 +18462,7 @@
/obj/structure/sign/poster/random{
pixel_x = 32
},
/turf/open/floor/plasteel/redyellow,
/turf/open/floor/plasteel/bar,
/area/crew_quarters/bar/atrium)
"aHV" = (
/obj/machinery/status_display,
@@ -18941,7 +18969,7 @@
pixel_x = 32
},
/obj/structure/closet/crate/bin,
/turf/open/floor/plasteel/redyellow,
/turf/open/floor/plasteel/bar,
/area/crew_quarters/bar/atrium)
"aIR" = (
/obj/structure/closet/secure_closet/freezer/meat,
@@ -19301,12 +19329,18 @@
/obj/item/stack/sheet/metal/fifty,
/obj/item/stack/sheet/glass/fifty,
/obj/item/stack/sheet/glass/fifty,
/obj/item/crowbar,
/obj/item/grenade/chem_grenade/smart_metal_foam,
/obj/item/grenade/chem_grenade/smart_metal_foam,
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
/obj/item/stack/sheet/rglass{
amount = 50;
pixel_x = 2;
pixel_y = -2
},
/obj/item/stack/sheet/plasteel/fifty,
/obj/item/grenade/chem_grenade/smart_metal_foam,
/obj/item/grenade/chem_grenade/smart_metal_foam,
/obj/item/crowbar,
/turf/open/floor/plasteel/yellow/side{
dir = 8
},
@@ -19523,7 +19557,7 @@
/obj/structure/cable/white{
icon_state = "1-2"
},
/turf/open/floor/plasteel/redyellow,
/turf/open/floor/plasteel/bar,
/area/crew_quarters/bar/atrium)
"aJX" = (
/obj/machinery/vending/cola,
@@ -19970,9 +20004,6 @@
/turf/open/floor/plasteel/neutral,
/area/engine/engineering)
"aKO" = (
/obj/machinery/computer/station_alert{
dir = 8
},
/obj/structure/cable/white{
icon_state = "1-8"
},
@@ -19982,6 +20013,9 @@
/obj/structure/cable/white{
icon_state = "4-8"
},
/obj/machinery/computer/rdconsole/production{
dir = 8
},
/turf/open/floor/plasteel/yellow/side{
dir = 4
},
@@ -20154,7 +20188,7 @@
pixel_x = -32;
pixel_y = -32
},
/turf/open/floor/plasteel/redyellow,
/turf/open/floor/plasteel/bar,
/area/crew_quarters/bar/atrium)
"aLg" = (
/obj/machinery/vending/snack,
@@ -20544,6 +20578,7 @@
/obj/item/twohanded/required/kirbyplants{
icon_state = "plant-21"
},
/obj/machinery/rnd/circuit_imprinter,
/turf/open/floor/plasteel/yellow/side{
dir = 4
},
@@ -20700,7 +20735,7 @@
/obj/machinery/light{
dir = 8
},
/turf/open/floor/plasteel/redyellow,
/turf/open/floor/plasteel/bar,
/area/crew_quarters/bar/atrium)
"aMu" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
@@ -20710,7 +20745,7 @@
/obj/structure/cable/white{
icon_state = "2-4"
},
/turf/open/floor/plasteel/redyellow,
/turf/open/floor/plasteel/bar,
/area/crew_quarters/bar/atrium)
"aMv" = (
/obj/effect/decal/cleanable/dirt,
@@ -21074,13 +21109,6 @@
/turf/open/floor/plasteel,
/area/engine/engineering)
"aNd" = (
/obj/structure/table/reinforced,
/obj/item/stack/sheet/plasteel/fifty,
/obj/item/stack/sheet/rglass{
amount = 50;
pixel_x = 2;
pixel_y = -2
},
/obj/effect/turf_decal/delivery,
/obj/machinery/computer/security/telescreen{
desc = "Used for watching the Engine.";
@@ -21089,6 +21117,7 @@
network = list("Engine");
pixel_y = -32
},
/obj/machinery/rnd/protolathe/department/engineering,
/turf/open/floor/plasteel,
/area/engine/engineering)
"aNe" = (
@@ -21721,37 +21750,27 @@
/obj/item/twohanded/required/kirbyplants{
icon_state = "plant-21"
},
/turf/open/floor/plasteel/redyellow/side{
dir = 9
},
/turf/open/floor/plasteel/yellowsiding,
/area/hallway/primary/central)
"aOn" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/obj/structure/cable/white{
icon_state = "1-2"
},
/turf/open/floor/plasteel/redyellow/side{
dir = 1
},
/turf/open/floor/plasteel/stairs/left,
/area/hallway/primary/central)
"aOo" = (
/turf/open/floor/plasteel/redyellow/side{
dir = 1
},
/turf/open/floor/plasteel/stairs/medium,
/area/hallway/primary/central)
"aOp" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/turf/open/floor/plasteel/redyellow/side{
dir = 1
},
/turf/open/floor/plasteel/stairs/right,
/area/hallway/primary/central)
"aOq" = (
/obj/item/twohanded/required/kirbyplants{
icon_state = "plant-22"
},
/turf/open/floor/plasteel/redyellow/side{
dir = 5
},
/turf/open/floor/plasteel/yellowsiding,
/area/hallway/primary/central)
"aOr" = (
/obj/structure/sign/directions/engineering{
@@ -24699,7 +24718,7 @@
/turf/open/floor/plasteel/grimy,
/area/hallway/primary/central)
"aUA" = (
/obj/machinery/r_n_d/destructive_analyzer,
/obj/machinery/rnd/destructive_analyzer,
/obj/effect/turf_decal/stripes/line{
dir = 9
},
@@ -24712,11 +24731,11 @@
/turf/open/floor/plasteel,
/area/science/lab)
"aUC" = (
/obj/machinery/r_n_d/protolathe,
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/obj/effect/turf_decal/stripes/line{
dir = 5
},
/obj/machinery/rnd/protolathe/department/science,
/turf/open/floor/plasteel,
/area/science/lab)
"aUD" = (
@@ -25124,12 +25143,12 @@
/turf/open/floor/plasteel,
/area/science/lab)
"aVv" = (
/obj/machinery/r_n_d/circuit_imprinter,
/obj/item/reagent_containers/glass/beaker/sulphuric,
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/obj/effect/turf_decal/stripes/line{
dir = 6
},
/obj/machinery/rnd/circuit_imprinter/department/science,
/turf/open/floor/plasteel,
/area/science/lab)
"aVw" = (
@@ -25577,7 +25596,7 @@
},
/area/science/research)
"aWs" = (
/obj/machinery/r_n_d/server/core,
/obj/machinery/rnd/server,
/obj/machinery/atmospherics/pipe/manifold/general/visible{
dir = 8
},
@@ -25592,7 +25611,7 @@
},
/area/science/research)
"aWu" = (
/obj/machinery/r_n_d/server/robotics,
/obj/machinery/rnd/server,
/obj/machinery/atmospherics/pipe/simple/general/hidden{
dir = 9
},
@@ -26340,6 +26359,12 @@
pixel_y = 24
},
/obj/effect/turf_decal/bot,
/obj/item/storage/box/beakers{
pixel_x = 3;
pixel_y = 3
},
/obj/item/storage/box/syringes,
/obj/item/gun/syringe,
/turf/open/floor/plasteel,
/area/medical/medbay/zone3)
"aXR" = (
@@ -27647,13 +27672,6 @@
/turf/open/floor/plasteel,
/area/medical/medbay/zone3)
"bau" = (
/obj/structure/table/glass,
/obj/item/storage/box/beakers{
pixel_x = 3;
pixel_y = 3
},
/obj/item/storage/box/syringes,
/obj/item/gun/syringe,
/obj/machinery/light,
/obj/structure/noticeboard{
dir = 1;
@@ -27663,6 +27681,7 @@
dir = 5
},
/obj/effect/turf_decal/bot,
/obj/machinery/rnd/protolathe/department/medical,
/turf/open/floor/plasteel,
/area/medical/medbay/zone3)
"bav" = (
@@ -33198,7 +33217,7 @@
c_tag = "Central Diner 4";
dir = 1
},
/turf/open/floor/plasteel/redyellow,
/turf/open/floor/plasteel/bar,
/area/crew_quarters/bar/atrium)
"blk" = (
/obj/machinery/camera{
@@ -34415,7 +34434,7 @@
dir = 4
},
/obj/effect/landmark/event_spawn,
/turf/open/floor/plasteel/redyellow,
/turf/open/floor/plasteel/bar,
/area/crew_quarters/bar/atrium)
"bxH" = (
/obj/effect/decal/cleanable/dirt,
@@ -34444,7 +34463,7 @@
/area/crew_quarters/dorms)
"bxL" = (
/obj/effect/landmark/event_spawn,
/turf/open/floor/plasteel/redyellow,
/turf/open/floor/plasteel/bar,
/area/crew_quarters/bar/atrium)
"bxM" = (
/obj/effect/landmark/event_spawn,
@@ -34661,6 +34680,66 @@
},
/turf/open/space,
/area/space/nearstation)
"swt" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 4
},
/obj/machinery/rnd/protolathe/department/service,
/turf/open/floor/plasteel/redyellow,
/area/crew_quarters/bar/atrium)
"swu" = (
/obj/machinery/rnd/protolathe/department/medical,
/turf/closed/wall,
/area/medical/medbay/zone3)
"swv" = (
/obj/machinery/door/firedoor,
/obj/machinery/door/airlock{
id_tag = "Dorm4";
name = "Cabin"
},
/obj/effect/turf_decal/stripes/line{
dir = 2
},
/obj/effect/turf_decal/stripes/line{
dir = 1
},
/turf/open/floor/plasteel,
/area/crew_quarters/dorms)
"sww" = (
/obj/machinery/door/firedoor,
/obj/machinery/door/airlock{
id_tag = "Dorm1";
name = "Cabin"
},
/obj/effect/turf_decal/stripes/line{
dir = 2
},
/obj/effect/turf_decal/stripes/line{
dir = 1
},
/turf/open/floor/plasteel,
/area/crew_quarters/dorms)
"swx" = (
/obj/machinery/door/firedoor,
/obj/machinery/door/airlock{
id_tag = "Dorm2";
name = "Cabin"
},
/obj/effect/turf_decal/stripes/line{
dir = 2
},
/obj/effect/turf_decal/stripes/line{
dir = 1
},
/turf/open/floor/plasteel,
/area/crew_quarters/dorms)
"swy" = (
/obj/effect/decal/cleanable/dirt,
/obj/machinery/vending/kink,
/turf/open/floor/plasteel/vault{
dir = 8
},
/area/maintenance/port)
(1,1,1) = {"
aaa
@@ -67181,7 +67260,7 @@ aZp
bak
bbc
bbQ
bcF
swy
bdD
beu
baj
@@ -67438,7 +67517,7 @@ aZq
bal
bbd
bbR
bcG
bbR
bdE
bev
baj
@@ -72293,7 +72372,7 @@ ayz
azD
aAH
aBQ
azD
sww
aDG
aEO
awQ
@@ -73061,10 +73140,10 @@ apI
awQ
axJ
ayB
azD
swv
aAH
aBS
azD
swx
ayz
aEQ
awQ
File diff suppressed because it is too large Load Diff
+33 -33
View File
@@ -106,10 +106,10 @@
/obj/structure/cable{
icon_state = "0-4"
},
/turf/open/floor/plasteel,
/obj/effect/turf_decal/stripes/line{
dir = 9
},
/turf/open/floor/plasteel,
/area/engine/gravity_generator)
"at" = (
/obj/machinery/power/apc{
@@ -123,10 +123,10 @@
/obj/structure/cable{
icon_state = "0-2"
},
/turf/open/floor/plasteel,
/obj/effect/turf_decal/stripes/line{
dir = 5
},
/turf/open/floor/plasteel,
/area/engine/gravity_generator)
"au" = (
/obj/effect/spawner/structure/window/reinforced,
@@ -213,19 +213,19 @@
/obj/machinery/light{
dir = 8
},
/turf/open/floor/plasteel,
/obj/effect/turf_decal/stripes/line{
dir = 8
},
/turf/open/floor/plasteel,
/area/engine/gravity_generator)
"aH" = (
/obj/structure/cable{
icon_state = "1-2"
},
/turf/open/floor/plasteel,
/obj/effect/turf_decal/stripes/line{
dir = 4
},
/turf/open/floor/plasteel,
/area/engine/gravity_generator)
"aI" = (
/obj/effect/spawner/structure/window/reinforced,
@@ -255,10 +255,10 @@
dir = 4
},
/obj/machinery/portable_atmospherics/canister/nitrous_oxide,
/turf/open/floor/plasteel{
/obj/effect/turf_decal/bot{
dir = 2
},
/obj/effect/turf_decal/bot{
/turf/open/floor/plasteel{
dir = 2
},
/area/engine/atmos)
@@ -324,19 +324,19 @@
/obj/structure/cable{
icon_state = "4-8"
},
/turf/open/floor/plasteel,
/obj/effect/turf_decal/stripes/line{
dir = 8
},
/turf/open/floor/plasteel,
/area/engine/gravity_generator)
"aW" = (
/obj/structure/cable{
icon_state = "1-8"
},
/turf/open/floor/plasteel,
/obj/effect/turf_decal/stripes/line{
dir = 4
},
/turf/open/floor/plasteel,
/area/engine/gravity_generator)
"aX" = (
/obj/machinery/door/airlock/glass_engineering{
@@ -367,10 +367,10 @@
dir = 4
},
/obj/machinery/portable_atmospherics/canister,
/turf/open/floor/plasteel{
/obj/effect/turf_decal/bot{
dir = 2
},
/obj/effect/turf_decal/bot{
/turf/open/floor/plasteel{
dir = 2
},
/area/engine/atmos)
@@ -397,16 +397,16 @@
/turf/open/floor/plating,
/area/engine/engineering)
"bg" = (
/turf/open/floor/plasteel,
/obj/effect/turf_decal/stripes/line{
dir = 8
},
/turf/open/floor/plasteel,
/area/engine/gravity_generator)
"bh" = (
/turf/open/floor/plasteel,
/obj/effect/turf_decal/stripes/line{
dir = 4
},
/turf/open/floor/plasteel,
/area/engine/gravity_generator)
"bi" = (
/obj/machinery/gravity_generator/main/station,
@@ -468,17 +468,17 @@
/turf/open/floor/plating,
/area/engine/engineering)
"bq" = (
/turf/open/floor/plasteel,
/obj/effect/turf_decal/stripes/line{
dir = 10
},
/turf/open/floor/plasteel,
/area/engine/gravity_generator)
"br" = (
/obj/structure/closet/radiation,
/turf/open/floor/plasteel,
/obj/effect/turf_decal/stripes/line{
dir = 6
},
/turf/open/floor/plasteel,
/area/engine/gravity_generator)
"bs" = (
/obj/structure/cable{
@@ -996,25 +996,25 @@
dir = 8;
pixel_x = -24
},
/turf/open/floor/plasteel,
/obj/effect/turf_decal/stripes/corner,
/turf/open/floor/plasteel,
/area/construction)
"cX" = (
/obj/machinery/atmospherics/components/unary/vent_pump/on{
dir = 1
},
/turf/open/floor/plasteel,
/obj/effect/turf_decal/stripes/line,
/turf/open/floor/plasteel,
/area/construction)
"cY" = (
/turf/open/floor/plasteel,
/obj/effect/turf_decal/stripes/line,
/turf/open/floor/plasteel,
/area/construction)
"cZ" = (
/turf/open/floor/plasteel,
/obj/effect/turf_decal/stripes/corner{
dir = 1
},
/turf/open/floor/plasteel,
/area/construction)
"da" = (
/obj/machinery/airalarm{
@@ -1036,10 +1036,10 @@
/turf/open/floor/plating,
/area/storage/primary)
"dc" = (
/turf/open/floor/plasteel,
/obj/effect/turf_decal/stripes/line{
dir = 8
},
/turf/open/floor/plasteel,
/area/storage/primary)
"dd" = (
/turf/open/floor/plasteel{
@@ -1083,10 +1083,10 @@
},
/area/storage/primary)
"dk" = (
/turf/open/floor/plasteel,
/obj/effect/turf_decal/stripes/line{
dir = 4
},
/turf/open/floor/plasteel,
/area/storage/primary)
"dl" = (
/turf/open/floor/plating,
@@ -1095,10 +1095,10 @@
/obj/machinery/light{
dir = 8
},
/turf/open/floor/plasteel,
/obj/effect/turf_decal/stripes/line{
dir = 4
},
/turf/open/floor/plasteel,
/area/construction)
"dn" = (
/turf/open/floor/plating,
@@ -1107,10 +1107,10 @@
/obj/machinery/light{
dir = 4
},
/turf/open/floor/plasteel,
/obj/effect/turf_decal/stripes/line{
dir = 8
},
/turf/open/floor/plasteel,
/area/construction)
"dp" = (
/obj/machinery/light{
@@ -1160,50 +1160,50 @@
/turf/open/floor/plating,
/area/storage/primary)
"dy" = (
/turf/open/floor/plasteel,
/obj/effect/turf_decal/stripes/line{
dir = 4
},
/turf/open/floor/plasteel,
/area/construction)
"dz" = (
/turf/open/floor/plasteel,
/obj/effect/turf_decal/stripes/line{
dir = 8
},
/turf/open/floor/plasteel,
/area/construction)
"dA" = (
/turf/open/floor/plasteel,
/obj/effect/turf_decal/stripes/line{
dir = 10
},
/turf/open/floor/plasteel,
/area/storage/primary)
"dB" = (
/turf/open/floor/plasteel,
/obj/effect/turf_decal/stripes/line,
/turf/open/floor/plasteel,
/area/storage/primary)
"dC" = (
/turf/open/floor/plasteel,
/obj/effect/turf_decal/stripes/line{
dir = 6
},
/turf/open/floor/plasteel,
/area/storage/primary)
"dD" = (
/turf/open/floor/plasteel,
/obj/effect/turf_decal/stripes/line{
dir = 9
},
/turf/open/floor/plasteel,
/area/storage/primary)
"dE" = (
/turf/open/floor/plasteel,
/obj/effect/turf_decal/stripes/line{
dir = 1
},
/turf/open/floor/plasteel,
/area/storage/primary)
"dF" = (
/turf/open/floor/plasteel,
/obj/effect/turf_decal/stripes/line{
dir = 5
},
/turf/open/floor/plasteel,
/area/storage/primary)
"dG" = (
/obj/machinery/door/airlock,
@@ -1221,22 +1221,22 @@
/turf/open/floor/plasteel,
/area/storage/primary)
"dK" = (
/turf/open/floor/plasteel,
/obj/effect/turf_decal/stripes/corner{
dir = 8
},
/turf/open/floor/plasteel,
/area/construction)
"dL" = (
/turf/open/floor/plasteel,
/obj/effect/turf_decal/stripes/line{
dir = 1
},
/turf/open/floor/plasteel,
/area/construction)
"dM" = (
/turf/open/floor/plasteel,
/obj/effect/turf_decal/stripes/corner{
dir = 4
},
/turf/open/floor/plasteel,
/area/construction)
"dN" = (
/obj/structure/table,
+1 -1
View File
@@ -9835,7 +9835,7 @@
/area/wizard_station)
"zQ" = (
/obj/effect/decal/cleanable/blood/splatter,
/mob/living/simple_animal/hostile/creature{
/mob/living/simple_animal/hostile/netherworld{
name = "Experiment 35b"
},
/turf/open/floor/grass,
+1 -1
View File
@@ -1 +1 @@
#define FORCE_MAP "_maps/metastation.json"
#define FORCE_MAP "_maps/metastation.json"
+1 -1
View File
@@ -1 +1 @@
#define FORCE_MAP "_maps/omegastation.json"
#define FORCE_MAP "_maps/omegastation.json"
+1 -1
View File
@@ -1 +1 @@
#define FORCE_MAP "_maps/pubbystation.json"
#define FORCE_MAP "_maps/pubbystation.json"
+1 -1
View File
@@ -1 +1 @@
#define FORCE_MAP "_maps/runtimestation.json"
#define FORCE_MAP "_maps/runtimestation.json"
+123
View File
@@ -1 +1,124 @@
jayehh role=admin
optimumtact role=admin
newsta role=admin
expletives role=admin
kingofkosmos role=admin
mrstonedone role=admin
microscopics role=admin
gunhog role=admin
korphaeron role=admin
razharas role=admin
lordpidey role=admin
niknakflak role=admin
rolan7 role=admin
quarxink role=admin
adrix89 role=admin
tle role=admin
xsi role=admin
scaredofshadows role=admin
neofite role=admin
trubblebass role=admin
mport2004 role=admin
deuryn role=admin
agouri role=admin
errorage role=admin
superxpdude role=admin
petethegoat role=admin
nodrak role=admin
carnwennan role=admin
ikarrus role=admin
cheridan role=admin
giacomand role=admin
rockdtben role=admin
sieve role=admin
aranclanos role=admin
intigracy role=admin
dumpdavidson role=admin
kazeespada role=admin
malkevin role=admin
incoming role=admin
demas role=admin
fleure role=admin
ricotez role=admin
misterperson role=admin
crimsonvision role=admin
iamgoofball role=admin
zelacks role=admin
androidsfv role=admin
miggles role=admin
jordie0608 role=admin
s0ldi3rkr4s0 role=admin
ergovisavi role=admin
vistapowa role=admin
miauw62 role=admin
rumia29 role=admin
bobylein role=admin
sirbayer role=admin
hornygranny role=admin
yota role=admin
firecage role=admin
donkieyo role=admin
argoneus role=admin
paprka role=admin
cookingboy3 role=admin
limeliz role=admin
steelpoint role=admin
phil235 role=admin
corruptcomputer role=admin
xxnoob role=admin
tkdrg role=admin
cuboos role=admin
thunder12345 role=admin
wjohnston role=admin
mandurrh role=admin
thurgatar role=admin
xerux role=admin
dannno role=admin
lo6a4evskiy role=admin
vekter role=admin
ahammer18 role=admin
account12 role=admin
fayrik role=admin
shadowlight213 role=admin
drovidicorv role=admin
dunc role=admin
mmmiracles role=admin
bear1ake role=admin
coreoverload role=admin
jalleo role=admin
changelingrain role=admin
foxpmccloud role=admin
xhuis role=admin
astralenigma role=admin
tokiko1 role=admin
supersayu role=admin
lzimann role=admin
as334 role=admin
neersighted role=admin
swankcookie role=admin
ressler role=admin
folix role=admin
bawhoppennn role=admin
anturke role=admin
lumipharon role=admin
bgobandit role=admin
coiax role=admin
randommarine role=admin
pkpenguin321 role=admin
technoalchemist role=admin
aloraydrel role=admin
quiltyquilty role=admin
snipedragon role=admin
fjeld role=admin
kevinz000 role=admin
tacolizard role=admin
trustygun role=admin
cyberboss role=admin
pjb3005 role=admin
sweaterkittens role=admin
feemjmeem role=admin
jstheguy role=admin
excessiveuseofcobby role=admin
plizzard role=admin
octareenroon91 role=admin
serpentarium role=admin
+16 -13
View File
@@ -94,19 +94,22 @@
#define BANTYPE_ANY_JOB 9 //used to remove jobbans
//Admin Permissions
#define R_BUILDMODE 1
#define R_ADMIN 2
#define R_BAN 4
#define R_FUN 8
#define R_SERVER 16
#define R_DEBUG 32
#define R_POSSESS 64
#define R_PERMISSIONS 128
#define R_STEALTH 256
#define R_POLL 512
#define R_VAREDIT 1024
#define R_SOUNDS 2048
#define R_SPAWN 4096
#define R_BUILDMODE 0x1
#define R_ADMIN 0x2
#define R_BAN 0x4
#define R_FUN 0x8
#define R_SERVER 0x10
#define R_DEBUG 0x20
#define R_POSSESS 0x40
#define R_PERMISSIONS 0x80
#define R_STEALTH 0x100
#define R_POLL 0x200
#define R_VAREDIT 0x400
#define R_SOUNDS 0x800
#define R_SPAWN 0x1000
#define R_AUTOLOGIN 0x2000
#define R_DEFAULT R_AUTOLOGIN
#if DM_VERSION > 512
#error Remove the flag below , its been long enough
+6
View File
@@ -12,6 +12,12 @@
//ATMOS
//stuff you should probably leave well alone!
#define R_IDEAL_GAS_EQUATION 8.31 //kPa*L/(K*mol)
#define ONE_ATMOSPHERE 101.325 //kPa
#define T0C 273.15 // 0degC
#define T20C 293.15 // 20degC
#define TCMB 2.7 // -270.3degC
#define MOLES_CELLSTANDARD (ONE_ATMOSPHERE*CELL_VOLUME/(T20C*R_IDEAL_GAS_EQUATION)) //moles in a 2.5 m^3 cell at 101.325 Pa and 20 degC
#define M_CELL_WITH_RATIO (MOLES_CELLSTANDARD * 0.005) //compared against for superconductivity
#define O2STANDARD 0.21 //percentage of oxygen in a normal mixture of air
+17 -15
View File
@@ -17,8 +17,9 @@
#define DIAG_TRACK_HUD "13"// Mech tracking beacon
#define DIAG_AIRLOCK_HUD "14"//Airlock shock overlay
#define DIAG_PATH_HUD "15"//Bot path indicators
#define GLAND_HUD "16"//Gland indicators for abductors
//for antag huds. these are used at the /mob level
#define ANTAG_HUD "16"
#define ANTAG_HUD "17"
//by default everything in the hud_list of an atom is an image
//a value in hud_list with one of these will change that behavior
@@ -32,21 +33,22 @@
#define DATA_HUD_MEDICAL_ADVANCED 4
#define DATA_HUD_DIAGNOSTIC_BASIC 5
#define DATA_HUD_DIAGNOSTIC_ADVANCED 6
#define DATA_HUD_ABDUCTOR 7
//antag HUD defines
#define ANTAG_HUD_CULT 7
#define ANTAG_HUD_REV 8
#define ANTAG_HUD_OPS 9
#define ANTAG_HUD_WIZ 10
#define ANTAG_HUD_SHADOW 11
#define ANTAG_HUD_TRAITOR 12
#define ANTAG_HUD_NINJA 13
#define ANTAG_HUD_CHANGELING 14
#define ANTAG_HUD_ABDUCTOR 15
#define ANTAG_HUD_DEVIL 16
#define ANTAG_HUD_SINTOUCHED 17
#define ANTAG_HUD_SOULLESS 18
#define ANTAG_HUD_CLOCKWORK 19
#define ANTAG_HUD_BROTHER 20
#define ANTAG_HUD_CULT 8
#define ANTAG_HUD_REV 9
#define ANTAG_HUD_OPS 10
#define ANTAG_HUD_WIZ 11
#define ANTAG_HUD_SHADOW 12
#define ANTAG_HUD_TRAITOR 13
#define ANTAG_HUD_NINJA 14
#define ANTAG_HUD_CHANGELING 15
#define ANTAG_HUD_ABDUCTOR 16
#define ANTAG_HUD_DEVIL 17
#define ANTAG_HUD_SINTOUCHED 18
#define ANTAG_HUD_SOULLESS 19
#define ANTAG_HUD_CLOCKWORK 20
#define ANTAG_HUD_BROTHER 21
// Notification action types
#define NOTIFY_JUMP "jump"
+2 -1
View File
@@ -61,6 +61,8 @@
#define COMSIG_ITEM_ATTACK "item_attack" //from base of obj/item/attack(): (/mob/living/target, /mob/living/user)
#define COMSIG_ITEM_ATTACK_SELF "item_attack_self" //from base of obj/item/attack_self(): (/mob)
#define COMSIG_ITEM_ATTACK_OBJ "item_attack_obj" //from base of obj/item/attack_obj(): (/obj, /mob)
#define COMSIG_ITEM_EQUIPPED "item_equip" //from base of obj/item/equipped(): (/mob/equipper, slot)
#define COMSIG_ITEM_DROPPED "item_drop" //from base of obj/item/dropped(): (/mob/dropper)
// /obj/item/clothing signals
#define COMSIG_SHOES_STEP_ACTION "shoes_step_action" //from base of obj/item/clothing/shoes/proc/step_action(): ()
@@ -77,7 +79,6 @@
#define COMSIG_MACHINE_PROCESS "machine_process" //from machinery subsystem fire(): ()
#define COMSIG_MACHINE_PROCESS_ATMOS "machine_process_atmos" //from air subsystem process_atmos_machinery(): ()
// /mob/living/carbon/human signals
#define COMSIG_HUMAN_MELEE_UNARMED_ATTACK "human_melee_unarmed_attack" //from mob/living/carbon/human/UnarmedAttack(): (atom/target)
#define COMSIG_HUMAN_MELEE_UNARMED_ATTACKBY "human_melee_unarmed_attackby" //from mob/living/carbon/human/UnarmedAttack(): (mob/living/carbon/human/attacker)
-2
View File
@@ -1,8 +1,6 @@
//config files
#define CONFIG_DEF(X) /datum/config_entry/##X { resident_file = CURRENT_RESIDENT_FILE }; /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_TWEAK(X) /datum/config_entry/##X
#define CONFIG_MAPS_FILE "maps.txt"
+1
View File
@@ -10,6 +10,7 @@
#define INVESTIGATE_TELESCI "telesci"
#define INVESTIGATE_WIRES "wires"
#define INVESTIGATE_PORTAL "portals"
#define INVESTIGATE_RESEARCH "research"
#define INVESTIGATE_HALLUCINATIONS "hallucinations"
#define INVESTIGATE_RADIATION "radiation"
#define INVESTIGATE_EXONET "exonet"
-27
View File
@@ -1,27 +0,0 @@
#define PI 3.1415
#define SPEED_OF_LIGHT 3e8 //not exact but hey!
#define SPEED_OF_LIGHT_SQ 9e+16
#define INFINITY 1e31 //closer then enough
//atmos
#define R_IDEAL_GAS_EQUATION 8.31 //kPa*L/(K*mol)
#define ONE_ATMOSPHERE 101.325 //kPa
#define T0C 273.15 // 0degC
#define T20C 293.15 // 20degC
#define TCMB 2.7 // -270.3degC
#define SHORT_REAL_LIMIT 16777216
//"fancy" math for calculating time in ms from tick_usage percentage and the length of ticks
//percent_of_tick_used * (ticklag * 100(to convert to ms)) / 100(percent ratio)
//collapsed to percent_of_tick_used * tick_lag
#define TICK_DELTA_TO_MS(percent_of_tick_used) ((percent_of_tick_used) * world.tick_lag)
#define TICK_USAGE_TO_MS(starting_tickusage) (TICK_DELTA_TO_MS(TICK_USAGE_REAL - starting_tickusage))
#define PERCENT(val) (round(val*100, 0.1))
#define CLAMP01(x) (Clamp(x, 0, 1))
//time of day but automatically adjusts to the server going into the next day within the same round.
//for when you need a reliable time number that doesn't depend on byond time.
#define REALTIMEOFDAY (world.timeofday + (MIDNIGHT_ROLLOVER * MIDNIGHT_ROLLOVER_CHECK))
#define MIDNIGHT_ROLLOVER_CHECK ( GLOB.rollovercheck_last_timeofday != world.timeofday ? update_midnight_rollover() : GLOB.midnight_rollovers )
+209
View File
@@ -0,0 +1,209 @@
// Credits to Nickr5 for the useful procs I've taken from his library resource.
// This file is quadruple wrapped for your pleasure
// (
#define NUM_E 2.71828183
#define NUM_SQRT2 1.41421356
#define PI 3.1415
#define SPEED_OF_LIGHT 3e8 //not exact but hey!
#define SPEED_OF_LIGHT_SQ 9e+16
#define INFINITY 1e31 //closer then enough
#define SHORT_REAL_LIMIT 16777216
//"fancy" math for calculating time in ms from tick_usage percentage and the length of ticks
//percent_of_tick_used * (ticklag * 100(to convert to ms)) / 100(percent ratio)
//collapsed to percent_of_tick_used * tick_lag
#define TICK_DELTA_TO_MS(percent_of_tick_used) ((percent_of_tick_used) * world.tick_lag)
#define TICK_USAGE_TO_MS(starting_tickusage) (TICK_DELTA_TO_MS(TICK_USAGE_REAL - starting_tickusage))
#define PERCENT(val) (round((val)*100, 0.1))
#define CLAMP01(x) (CLAMP(x, 0, 1))
//time of day but automatically adjusts to the server going into the next day within the same round.
//for when you need a reliable time number that doesn't depend on byond time.
#define REALTIMEOFDAY (world.timeofday + (MIDNIGHT_ROLLOVER * MIDNIGHT_ROLLOVER_CHECK))
#define MIDNIGHT_ROLLOVER_CHECK ( GLOB.rollovercheck_last_timeofday != world.timeofday ? update_midnight_rollover() : GLOB.midnight_rollovers )
#define SIGN(x) ( (x)!=0 ? (x) / abs(x) : 0 )
#define CEILING(x, y) ( -round(-(x) / (y)) * (y) )
// round() acts like floor(x, 1) by default but can't handle other values
#define FLOOR(x, y) ( round((x) / (y)) * (y) )
#define CLAMP(CLVALUE,CLMIN,CLMAX) ( max( (CLMIN), min((CLVALUE), (CLMAX)) ) )
// Similar to clamp but the bottom rolls around to the top and vice versa. min is inclusive, max is exclusive
#define WRAP(val, min, max) ( min == max ? min : (val) - (round(((val) - (min))/((max) - (min))) * ((max) - (min))) )
// Real modulus that handles decimals
#define MODULUS(x, y) ( (x) - (y) * round((x) / (y)) )
// Tangent
#define TAN(x) (sin(x) / cos(x))
// Cotangent
#define COT(x) (1 / TAN(x))
// Secant
#define SEC(x) (1 / cos(x))
// Cosecant
#define CSC(x) (1 / sin(x))
#define ATAN2(x, y) ( !(x) && !(y) ? 0 : (y) >= 0 ? arccos((x) / sqrt((x)*(x) + (y)*(y))) : -arccos((x) / sqrt((x)*(x) + (y)*(y))) )
// Greatest Common Divisor - Euclid's algorithm
/proc/Gcd(a, b)
return b ? Gcd(b, (a) % (b)) : a
// Least Common Multiple
#define Lcm(a, b) (abs(a) / Gcd(a, b) * abs(b))
#define INVERSE(x) ( 1/(x) )
// Used for calculating the radioactive strength falloff
#define INVERSE_SQUARE(initial_strength,cur_distance,initial_distance) ( (initial_strength)*((initial_distance)**2/(cur_distance)**2) )
#define ISABOUTEQUAL(a, b, deviation) (deviation ? abs((a) - (b)) <= deviation : abs((a) - (b)) <= 0.1)
#define ISEVEN(x) (x % 2 == 0)
#define ISODD(x) (x % 2 != 0)
// Returns true if val is from min to max, inclusive.
#define ISINRANGE(val, min, max) (min <= val && val <= max)
// Same as above, exclusive.
#define ISINRANGE_EX(val, min, max) (min < val && val > max)
#define ISINTEGER(x) (round(x) == x)
#define ISMULTIPLE(x, y) ((x) % (y) == 0)
// Performs a linear interpolation between a and b.
// Note that amount=0 returns a, amount=1 returns b, and
// amount=0.5 returns the mean of a and b.
#define LERP(a, b, amount) (amount ? ((a) + ((b) - (a)) * (amount)) : ((a) + ((b) - (a)) * 0.5)
// Returns the nth root of x.
#define ROOT(n, x) ((x) ** (1 / (n)))
// The quadratic formula. Returns a list with the solutions, or an empty list
// if they are imaginary.
/proc/SolveQuadratic(a, b, c)
ASSERT(a)
. = list()
var/d = b*b - 4 * a * c
var/bottom = 2 * a
if(d < 0)
return
var/root = sqrt(d)
. += (-b + root) / bottom
if(!d)
return
. += (-b - root) / bottom
#define TODEGREES(radians) ((radians) * 57.2957795)
#define TORADIANS(degrees) ((degrees) * 0.0174532925)
// Will filter out extra rotations and negative rotations
// E.g: 540 becomes 180. -180 becomes 180.
#define SIMPLIFY_DEGREES(degrees) (MODULUS((degrees), 360))
#define GET_ANGLE_OF_INCIDENCE(face, input) (MODULUS((face) - (input), 360))
//A logarithm that converts an integer to a number scaled between 0 and 1.
//Currently, this is used for hydroponics-produce sprite transforming, but could be useful for other transform functions.
#define TRANSFORM_USING_VARIABLE(input, max) ( sin((90*(input))/(max))**2 )
//converts a uniform distributed random number into a normal distributed one
//since this method produces two random numbers, one is saved for subsequent calls
//(making the cost negligble for every second call)
//This will return +/- decimals, situated about mean with standard deviation stddev
//68% chance that the number is within 1stddev
//95% chance that the number is within 2stddev
//98% chance that the number is within 3stddev...etc
#define ACCURACY 10000
/proc/gaussian(mean, stddev)
var/static/gaussian_next
var/R1;var/R2;var/working
if(gaussian_next != null)
R1 = gaussian_next
gaussian_next = null
else
do
R1 = rand(-ACCURACY,ACCURACY)/ACCURACY
R2 = rand(-ACCURACY,ACCURACY)/ACCURACY
working = R1*R1 + R2*R2
while(working >= 1 || working==0)
working = sqrt(-2 * log(working) / working)
R1 *= working
gaussian_next = R2 * working
return (mean + stddev * R1)
#undef ACCURACY
/proc/mouse_angle_from_client(client/client)
var/list/mouse_control = params2list(client.mouseParams)
if(mouse_control["screen-loc"] && client)
var/list/screen_loc_params = splittext(mouse_control["screen-loc"], ",")
var/list/screen_loc_X = splittext(screen_loc_params[1],":")
var/list/screen_loc_Y = splittext(screen_loc_params[2],":")
var/x = (text2num(screen_loc_X[1]) * 32 + text2num(screen_loc_X[2]) - 32)
var/y = (text2num(screen_loc_Y[1]) * 32 + text2num(screen_loc_Y[2]) - 32)
var/list/screenview = getviewsize(client.view)
var/screenviewX = screenview[1] * world.icon_size
var/screenviewY = screenview[2] * world.icon_size
var/ox = round(screenviewX/2) - client.pixel_x //"origin" x
var/oy = round(screenviewY/2) - client.pixel_y //"origin" y
var/angle = SIMPLIFY_DEGREES(ATAN2(y - oy, x - ox))
return angle
/proc/get_turf_in_angle(angle, turf/starting, increments)
var/pixel_x = 0
var/pixel_y = 0
for(var/i in 1 to increments)
pixel_x += sin(angle)+16*sin(angle)*2
pixel_y += cos(angle)+16*cos(angle)*2
var/new_x = starting.x
var/new_y = starting.y
while(pixel_x > 16)
pixel_x -= 32
new_x++
while(pixel_x < -16)
pixel_x += 32
new_x--
while(pixel_y > 16)
pixel_y -= 32
new_y++
while(pixel_y < -16)
pixel_y += 32
new_y--
new_x = CLAMP(new_x, 0, world.maxx)
new_y = CLAMP(new_y, 0, world.maxy)
return locate(new_x, new_y, starting.z)
// Returns a list where [1] is all x values and [2] is all y values that overlap between the given pair of rectangles
/proc/get_overlap(x1, y1, x2, y2, x3, y3, x4, y4)
var/list/region_x1 = list()
var/list/region_y1 = list()
var/list/region_x2 = list()
var/list/region_y2 = list()
// These loops create loops filled with x/y values that the boundaries inhabit
// ex: list(5, 6, 7, 8, 9)
for(var/i in min(x1, x2) to max(x1, x2))
region_x1["[i]"] = TRUE
for(var/i in min(y1, y2) to max(y1, y2))
region_y1["[i]"] = TRUE
for(var/i in min(x3, x4) to max(x3, x4))
region_x2["[i]"] = TRUE
for(var/i in min(y3, y4) to max(y3, y4))
region_y2["[i]"] = TRUE
return list(region_x1 & region_x2, region_y1 & region_y2)
// )
+3
View File
@@ -484,6 +484,9 @@ GLOBAL_LIST_INIT(ghost_others_options, list(GHOST_OTHERS_SIMPLE, GHOST_OTHERS_DE
#define SYRINGE_DRAW 0
#define SYRINGE_INJECT 1
#define RESEARCH_MATERIAL_RECLAMATION_ID "0"
//gold slime core spawning
#define NO_SPAWN 0
#define HOSTILE_SPAWN 1
+61
View File
@@ -0,0 +1,61 @@
//RDSCREEN screens
#define RDSCREEN_MENU 0
#define RDSCREEN_TECHDISK 1
#define RDSCREEN_DESIGNDISK 20
#define RDSCREEN_DESIGNDISK_UPLOAD 21
#define RDSCREEN_DECONSTRUCT 3
#define RDSCREEN_PROTOLATHE 40
#define RDSCREEN_PROTOLATHE_MATERIALS 41
#define RDSCREEN_PROTOLATHE_CHEMICALS 42
#define RDSCREEN_PROTOLATHE_CATEGORY_VIEW 43
#define RDSCREEN_PROTOLATHE_SEARCH 44
#define RDSCREEN_IMPRINTER 50
#define RDSCREEN_IMPRINTER_MATERIALS 51
#define RDSCREEN_IMPRINTER_CHEMICALS 52
#define RDSCREEN_IMPRINTER_CATEGORY_VIEW 53
#define RDSCREEN_IMPRINTER_SEARCH 54
#define RDSCREEN_SETTINGS 61
#define RDSCREEN_DEVICE_LINKING 62
#define RDSCREEN_TECHWEB 70
#define RDSCREEN_TECHWEB_NODEVIEW 71
#define RDSCREEN_TECHWEB_DESIGNVIEW 72
#define RDSCREEN_NOBREAK "<NO_HTML_BREAK>"
#define RDSCREEN_TEXT_NO_PROTOLATHE "<div><h3>No Protolathe Linked!</h3></div><br>"
#define RDSCREEN_TEXT_NO_IMPRINTER "<div><h3>No Circuit Imprinter Linked!</h3></div><br>"
#define RDSCREEN_TEXT_NO_DECONSTRUCT "<div><h3>No Deconstructive Analyzer Linked!</h3></div><br>"
#define RDSCREEN_TEXT_NO_TDISK "<div><h3>No Technology Disk Inserted!</h3></div><br>"
#define RDSCREEN_TEXT_NO_DDISK "<div><h3>No Design Disk Inserted!</h3></div><br>"
#define RDSCREEN_TEXT_NO_SNODE "<div><h3>No Technology Node Selected!</h3></div><br>"
#define RDSCREEN_TEXT_NO_SDESIGN "<div><h3>No Design Selected!</h3></div><br>"
#define RDSCREEN_UI_LATHE_CHECK if(!linked_lathe) { return RDSCREEN_TEXT_NO_PROTOLATHE }
#define RDSCREEN_UI_IMPRINTER_CHECK if(!linked_imprinter) { return RDSCREEN_TEXT_NO_IMPRINTER }
#define RDSCREEN_UI_DECONSTRUCT_CHECK if(!linked_destroy) { return RDSCREEN_TEXT_NO_DECONSTRUCT }
#define RDSCREEN_UI_TDISK_CHECK if(!t_disk) { return RDSCREEN_TEXT_NO_TDISK }
#define RDSCREEN_UI_DDISK_CHECK if(!d_disk) { return RDSCREEN_TEXT_NO_DDISK }
#define RDSCREEN_UI_SNODE_CHECK if(!selected_node) { return RDSCREEN_TEXT_NO_SNODE }
#define RDSCREEN_UI_SDESIGN_CHECK if(!selected_design) { return RDSCREEN_TEXT_NO_SDESIGN }
#define DEPLATHE_SCREEN_PRIMARY 1
#define DEPLATHE_SCREEN_SEARCH 2
#define DEPLATHE_SCREEN_MATERIALS 3
#define DEPLATHE_SCREEN_CHEMICALS 4
#define DEPPRINTER_SCREEN_PRIMARY 1
#define DEPPRINTER_SCREEN_SEARCH 2
#define DEPPRINTER_SCREEN_MATERIALS 3
#define DEPPRINTER_SCREEN_CHEMICALS 4
#define DEPARTMENTAL_FLAG_SECURITY 1
#define DEPARTMENTAL_FLAG_MEDICAL 2
#define DEPARTMENTAL_FLAG_CARGO 4
#define DEPARTMENTAL_FLAG_SCIENCE 8
#define DEPARTMENTAL_FLAG_ENGINEERING 16
#define DEPARTMENTAL_FLAG_SERVICE 32
#define DEPARTMENTAL_FLAG_ALL 64 //NO THIS DOESN'T ALLOW YOU TO PRINT EVERYTHING, IT'S FOR ALL DEPARTMENTS!
//#define DEPARTMENTAL_FLAG_MINING 128
#define DESIGN_ID_IGNORE "IGNORE_THIS_DESIGN"
+8
View File
@@ -0,0 +1,8 @@
#define SERVER_TOOLS_EXTERNAL_CONFIGURATION
#define SERVER_TOOLS_DEFINE_AND_SET_GLOBAL(Name, Value) GLOBAL_VAR_INIT(##Name, ##Value); GLOBAL_PROTECT(##Name)
#define SERVER_TOOLS_READ_GLOBAL(Name) GLOB.##Name
#define SERVER_TOOLS_WRITE_GLOBAL(Name, Value) GLOB.##Name = ##Value
#define SERVER_TOOLS_WORLD_ANNOUNCE(message) to_chat(world, "<span class='boldannounce'>[html_encode(##message)]</span>")
#define SERVER_TOOLS_LOG(message) log_world("SERVICE: [##message]")
#define SERVER_TOOLS_NOTIFY_ADMINS(event) message_admins(##event)
#define SERVER_TOOLS_CLIENT_COUNT GLOB.clients.len
+14 -13
View File
@@ -1,4 +1,5 @@
// /tg/station 13 server tools API v3.1.0.2
// /tg/station 13 server tools API
#define SERVICE_API_VERSION_STRING "3.2.0.1"
//CONFIGURATION
//use this define if you want to do configuration outside of this file
@@ -10,19 +11,19 @@
//create a global variable named `Name` and set it to `Value`
//These globals must not be modifiable from anywhere outside of the server tools
#define SERVER_TOOLS_DEFINE_AND_SET_GLOBAL(Name, Value) GLOBAL_VAR_INIT(##Name, ##Value); GLOBAL_PROTECT(##Name)
#define SERVER_TOOLS_DEFINE_AND_SET_GLOBAL(Name, Value)
//Read the value in the global variable `Name`
#define SERVER_TOOLS_READ_GLOBAL(Name) GLOB.##Name
#define SERVER_TOOLS_READ_GLOBAL(Name)
//Set the value in the global variable `Name` to `Value`
#define SERVER_TOOLS_WRITE_GLOBAL(Name, Value) GLOB.##Name = ##Value
#define SERVER_TOOLS_WRITE_GLOBAL(Name, Value)
//display an announcement `message` from the server to all players
#define SERVER_TOOLS_WORLD_ANNOUNCE(message) to_chat(world, "<span class='boldannounce'>[html_encode(##message)]</span>")
#define SERVER_TOOLS_WORLD_ANNOUNCE(message)
//Write a string `message` to a server log
#define SERVER_TOOLS_LOG(message) log_world("SERVICE: [##message]")
#define SERVER_TOOLS_LOG(message)
//Notify current in-game administrators of a string `event`
#define SERVER_TOOLS_NOTIFY_ADMINS(event) message_admins(##event)
#define SERVER_TOOLS_NOTIFY_ADMINS(event)
//The current amount of connected clients
#define SERVER_TOOLS_CLIENT_COUNT GLOB.clients.len
#define SERVER_TOOLS_CLIENT_COUNT
#endif
//Required hooks:
@@ -64,16 +65,15 @@
//IMPLEMENTATION
#define SERVICE_API_VERSION_STRING "3.1.0.2"
#define REBOOT_MODE_NORMAL 0
#define REBOOT_MODE_HARD 1
#define REBOOT_MODE_SHUTDOWN 2
#define SERVICE_WORLD_PARAM "server_service"
#define SERVICE_VERSION_PARAM "server_service_version"
#define SERVICE_INSTANCE_PARAM "server_instance"
#define SERVICE_PR_TEST_JSON "prtestjob.json"
#define SERVICE_INTERFACE_DLL "TGServiceInterface.dll"
#define SERVICE_INTERFACE_DLL "TGDreamDaemonBridge.dll"
#define SERVICE_INTERFACE_FUNCTION "DDEntryPoint"
#define SERVICE_CMD_HARD_REBOOT "hard_reboot"
@@ -98,11 +98,12 @@
#define SERVICE_REQUEST_WORLD_REBOOT "worldreboot"
#define SERVICE_REQUEST_API_VERSION "api_ver"
#define SERVICE_RETURN_SUCCESS "SUCCESS"
/*
The MIT License
Copyright (c) 2011 Dominic Tarr
Copyright (c) 2017 Jordan Brown
Permission is hereby granted, free of charge,
to any person obtaining a copy of this software and
associated documentation files (the "Software"), to
+12 -11
View File
@@ -23,8 +23,8 @@
#define FLIGHTSUIT_PROCESSING_FULL 1
#define INITIALIZATION_INSSATOMS 0 //New should not call Initialize
#define INITIALIZATION_INNEW_MAPLOAD 1 //New should call Initialize(TRUE)
#define INITIALIZATION_INNEW_REGULAR 2 //New should call Initialize(FALSE)
#define INITIALIZATION_INNEW_MAPLOAD 2 //New should call Initialize(TRUE)
#define INITIALIZATION_INNEW_REGULAR 1 //New should call Initialize(FALSE)
#define INITIALIZE_HINT_NORMAL 0 //Nothing happens
#define INITIALIZE_HINT_LATELOAD 1 //Call LateInitialize
@@ -46,15 +46,16 @@
#define INIT_ORDER_DBCORE 18
#define INIT_ORDER_BLACKBOX 17
#define INIT_ORDER_SERVER_MAINT 16
#define INIT_ORDER_EVENTS 15
#define INIT_ORDER_JOBS 14
#define INIT_ORDER_TICKER 13
#define INIT_ORDER_MAPPING 12
#define INIT_ORDER_ATOMS 11
#define INIT_ORDER_NETWORKS 10
#define INIT_ORDER_LANGUAGE 9
#define INIT_ORDER_MACHINES 8
#define INIT_ORDER_CIRCUIT 7
#define INIT_ORDER_RESEARCH 15
#define INIT_ORDER_EVENTS 14
#define INIT_ORDER_JOBS 13
#define INIT_ORDER_TICKER 12
#define INIT_ORDER_MAPPING 11
#define INIT_ORDER_ATOMS 10
#define INIT_ORDER_NETWORKS 9
#define INIT_ORDER_LANGUAGE 8
#define INIT_ORDER_MACHINES 7
#define INIT_ORDER_CIRCUIT 6
#define INIT_ORDER_TIMER 1
#define INIT_ORDER_DEFAULT 0
#define INIT_ORDER_AIR -1
+2 -2
View File
@@ -43,8 +43,8 @@
//Returns list element or null. Should prevent "index out of bounds" error.
/proc/listgetindex(list/L, index)
if(LAZYLEN(L))
if(isnum(index) && IsInteger(index))
if(IsInRange(index,1,L.len))
if(isnum(index) && ISINTEGER(index))
if(ISINRANGE(index,1,L.len))
return L[index]
else if(index in L)
return L[index]
-5
View File
@@ -72,11 +72,6 @@
var/datum/material/D = new path()
GLOB.materials_list[D.id] = D
//Techs
for(var/path in subtypesof(/datum/tech))
var/datum/tech/D = new path()
GLOB.tech_list[D.id] = D
//Emotes
for(var/path in subtypesof(/datum/emote))
var/datum/emote/E = new path()
-257
View File
@@ -1,257 +0,0 @@
// Credits to Nickr5 for the useful procs I've taken from his library resource.
GLOBAL_VAR_INIT(E, 2.71828183)
GLOBAL_VAR_INIT(Sqrt2, 1.41421356)
// List of square roots for the numbers 1-100.
GLOBAL_LIST_INIT(sqrtTable, list(1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5,
5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 7, 7,
7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 10))
/proc/sign(x)
return x!=0?x/abs(x):0
/proc/Atan2(x, y)
if(!x && !y)
return 0
var/a = arccos(x / sqrt(x*x + y*y))
return y >= 0 ? a : -a
/proc/Ceiling(x, y=1)
return -round(-x / y) * y
/proc/Floor(x, y=1)
return round(x / y) * y
#define Clamp(CLVALUE,CLMIN,CLMAX) ( max( (CLMIN), min((CLVALUE), (CLMAX)) ) )
/proc/Modulus(x, y) //Byond's modulus doesn't work with decimals.
return x - y * round(x / y)
// cotangent
/proc/Cot(x)
return 1 / Tan(x)
// cosecant
/proc/Csc(x)
return 1 / sin(x)
/proc/Default(a, b)
return a ? a : b
// Greatest Common Divisor - Euclid's algorithm
/proc/Gcd(a, b)
return b ? Gcd(b, a % b) : a
/proc/Inverse(x)
return 1 / x
#define InverseSquareLaw(initial_strength,cur_distance,initial_distance) (initial_strength*(initial_distance**2/cur_distance**2))
/proc/IsAboutEqual(a, b, deviation = 0.1)
return abs(a - b) <= deviation
/proc/IsEven(x)
return x % 2 == 0
// Returns true if val is from min to max, inclusive.
/proc/IsInRange(val, min, max)
return min <= val && val <= max
/proc/IsInteger(x)
return round(x) == x
/proc/IsOdd(x)
return !IsEven(x)
/proc/IsMultiple(x, y)
return x % y == 0
// Least Common Multiple
/proc/Lcm(a, b)
return abs(a) / Gcd(a, b) * abs(b)
// Performs a linear interpolation between a and b.
// Note that amount=0 returns a, amount=1 returns b, and
// amount=0.5 returns the mean of a and b.
/proc/Lerp(a, b, amount = 0.5)
return a + (b - a) * amount
//Calculates the sum of a list of numbers.
/proc/Sum(var/list/data)
. = 0
for(var/val in data)
.+= val
//Calculates the mean of a list of numbers.
/proc/Mean(var/list/data)
. = Sum(data) / (data.len)
// Returns the nth root of x.
/proc/Root(n, x)
return x ** (1 / n)
// secant
/proc/Sec(x)
return 1 / cos(x)
// The quadratic formula. Returns a list with the solutions, or an empty list
// if they are imaginary.
/proc/SolveQuadratic(a, b, c)
ASSERT(a)
. = list()
var/d = b*b - 4 * a * c
var/bottom = 2 * a
if(d < 0)
return
var/root = sqrt(d)
. += (-b + root) / bottom
if(!d)
return
. += (-b - root) / bottom
// tangent
/proc/Tan(x)
return sin(x) / cos(x)
/proc/ToDegrees(radians)
// 180 / Pi
return radians * 57.2957795
/proc/ToRadians(degrees)
// Pi / 180
return degrees * 0.0174532925
// Will filter out extra rotations and negative rotations
// E.g: 540 becomes 180. -180 becomes 180.
/proc/SimplifyDegrees(degrees)
degrees = degrees % 360
if(degrees < 0)
degrees += 360
return degrees
// min is inclusive, max is exclusive
/proc/Wrap(val, min, max)
var/d = max - min
var/t = round((val - min) / d)
return val - (t * d)
#define NORM_ROT(rot) ((((rot % 360) + (rot - round(rot, 1))) >= 0) ? ((rot % 360) + (rot - round(rot, 1))) : (((rot % 360) + (rot - round(rot, 1))) + 360))
/proc/get_angle_of_incidence(face_angle, angle_in, auto_normalize = TRUE)
var/angle_in_s = NORM_ROT(angle_in)
var/face_angle_s = NORM_ROT(face_angle)
var/incidence = face_angle_s - angle_in_s
var/incidence_s = incidence
while(incidence_s < -90)
incidence_s += 180
while(incidence_s > 90)
incidence_s -= 180
if(auto_normalize)
return incidence_s
else
return incidence
//A logarithm that converts an integer to a number scaled between 0 and 1 (can be tweaked to be higher).
//Currently, this is used for hydroponics-produce sprite transforming, but could be useful for other transform functions.
/proc/TransformUsingVariable(input, inputmaximum, scaling_modifier = 0)
var/inputToDegrees = (input/inputmaximum)*180 //Converting from a 0 -> 100 scale to a 0 -> 180 scale. The 0 -> 180 scale corresponds to degrees
var/size_factor = ((-cos(inputToDegrees) +1) /2) //returns a value from 0 to 1
return size_factor + scaling_modifier //scale mod of 0 results in a number from 0 to 1. A scale modifier of +0.5 returns 0.5 to 1.5
//converts a uniform distributed random number into a normal distributed one
//since this method produces two random numbers, one is saved for subsequent calls
//(making the cost negligble for every second call)
//This will return +/- decimals, situated about mean with standard deviation stddev
//68% chance that the number is within 1stddev
//95% chance that the number is within 2stddev
//98% chance that the number is within 3stddev...etc
#define ACCURACY 10000
/proc/gaussian(mean, stddev)
var/static/gaussian_next
var/R1;var/R2;var/working
if(gaussian_next != null)
R1 = gaussian_next
gaussian_next = null
else
do
R1 = rand(-ACCURACY,ACCURACY)/ACCURACY
R2 = rand(-ACCURACY,ACCURACY)/ACCURACY
working = R1*R1 + R2*R2
while(working >= 1 || working==0)
working = sqrt(-2 * log(working) / working)
R1 *= working
gaussian_next = R2 * working
return (mean + stddev * R1)
#undef ACCURACY
/proc/mouse_angle_from_client(client/client)
var/list/mouse_control = params2list(client.mouseParams)
if(mouse_control["screen-loc"] && client)
var/list/screen_loc_params = splittext(mouse_control["screen-loc"], ",")
var/list/screen_loc_X = splittext(screen_loc_params[1],":")
var/list/screen_loc_Y = splittext(screen_loc_params[2],":")
var/x = (text2num(screen_loc_X[1]) * 32 + text2num(screen_loc_X[2]) - 32)
var/y = (text2num(screen_loc_Y[1]) * 32 + text2num(screen_loc_Y[2]) - 32)
var/list/screenview = getviewsize(client.view)
var/screenviewX = screenview[1] * world.icon_size
var/screenviewY = screenview[2] * world.icon_size
var/ox = round(screenviewX/2) - client.pixel_x //"origin" x
var/oy = round(screenviewY/2) - client.pixel_y //"origin" y
var/angle = NORM_ROT(Atan2(y - oy, x - ox))
return angle
/proc/get_turf_in_angle(angle, turf/starting, increments)
var/pixel_x = 0
var/pixel_y = 0
for(var/i in 1 to increments)
pixel_x += sin(angle)+16*sin(angle)*2
pixel_y += cos(angle)+16*cos(angle)*2
var/new_x = starting.x
var/new_y = starting.y
while(pixel_x > 16)
pixel_x -= 32
new_x++
while(pixel_x < -16)
pixel_x += 32
new_x--
while(pixel_y > 16)
pixel_y -= 32
new_y++
while(pixel_y < -16)
pixel_y += 32
new_y--
new_x = Clamp(new_x, 0, world.maxx)
new_y = Clamp(new_y, 0, world.maxy)
return locate(new_x, new_y, starting.z)
/proc/round_down(num)
if(round(num) != num)
return round(num--)
else return num
//proc/get_overlap()
// Returns a list where [1] is all x values and [2] is all y values that overlap between the given pair of rectangles
/proc/get_overlap(x1, y1, x2, y2, x3, y3, x4, y4)
var/list/region_x1 = list()
var/list/region_y1 = list()
var/list/region_x2 = list()
var/list/region_y2 = list()
// These loops create loops filled with x/y values that the boundaries inhabit
// ex: list(5, 6, 7, 8, 9)
for(var/i in min(x1, x2) to max(x1, x2))
region_x1["[i]"] = TRUE
for(var/i in min(y1, y2) to max(y1, y2))
region_y1["[i]"] = TRUE
for(var/i in min(x3, x4) to max(x3, x4))
region_x2["[i]"] = TRUE
for(var/i in min(y3, y4) to max(y3, y4))
region_y2["[i]"] = TRUE
return list(region_x1 & region_x2, region_y1 & region_y2)
+1 -5
View File
@@ -121,9 +121,6 @@ GLOBAL_VAR(command_name)
return new_station_name
/proc/syndicate_name()
var/static/syndicate_name
if (syndicate_name)
return syndicate_name
var/name = ""
@@ -146,8 +143,7 @@ GLOBAL_VAR(command_name)
else
name += pick("-", "*", "")
name += pick("Tech", "Sun", "Co", "Tek", "X", "Inc", "Gen", "Star", "Dyne", "Code", "Hive")
syndicate_name = name
return name
+14 -14
View File
@@ -1,14 +1,14 @@
// Ensure the frequency is within bounds of what it should be sending/recieving at
/proc/sanitize_frequency(frequency, free = FALSE)
. = round(frequency)
if(free)
. = Clamp(frequency, MIN_FREE_FREQ, MAX_FREE_FREQ)
else
. = Clamp(frequency, MIN_FREQ, MAX_FREQ)
if(!(. % 2)) // Ensure the last digit is an odd number
. += 1
// Format frequency by moving the decimal.
/proc/format_frequency(frequency)
frequency = text2num(frequency)
return "[round(frequency / 10)].[frequency % 10]"
// Ensure the frequency is within bounds of what it should be sending/recieving at
/proc/sanitize_frequency(frequency, free = FALSE)
. = round(frequency)
if(free)
. = CLAMP(frequency, MIN_FREE_FREQ, MAX_FREE_FREQ)
else
. = CLAMP(frequency, MIN_FREQ, MAX_FREQ)
if(!(. % 2)) // Ensure the last digit is an odd number
. += 1
// Format frequency by moving the decimal.
/proc/format_frequency(frequency)
frequency = text2num(frequency)
return "[round(frequency / 10)].[frequency % 10]"
+3 -3
View File
@@ -60,7 +60,7 @@ GLOBAL_VAR_INIT(rollovercheck_last_timeofday, 0)
if(!second)
return "0 seconds"
if(second >= 60)
minute = round_down(second/60)
minute = FLOOR(second/60, 1)
second = round(second - (minute*60), 0.1)
second_rounded = TRUE
if(second) //check if we still have seconds remaining to format, or if everything went into minute.
@@ -91,7 +91,7 @@ GLOBAL_VAR_INIT(rollovercheck_last_timeofday, 0)
if(!minute)
return "[second]"
if(minute >= 60)
hour = round_down(minute/60,1)
hour = FLOOR(minute/60, 1)
minute = (minute - (hour*60))
if(minute) //alot simpler from here since you don't have to worry about fractions
if(minute != 1)
@@ -114,7 +114,7 @@ GLOBAL_VAR_INIT(rollovercheck_last_timeofday, 0)
if(!hour)
return "[minute][second]"
if(hour >= 24)
day = round_down(hour/24,1)
day = FLOOR(hour/24, 1)
hour = (hour - (day*24))
if(hour)
if(hour != 1)
+1 -1
View File
@@ -117,7 +117,7 @@
//Converts an angle (degrees) into an ss13 direction
/proc/angle2dir(degree)
degree = SimplifyDegrees(degree)
degree = SIMPLIFY_DEGREES(degree)
switch(degree)
if(0 to 22.5) //north requires two angle ranges
return NORTH
+9 -9
View File
@@ -147,10 +147,10 @@ Turf and target are separate in case you want to teleport some distance from a t
var/line[] = list(locate(px,py,M.z))
var/dx=N.x-px //x distance
var/dy=N.y-py
var/dxabs=abs(dx)//Absolute value of x distance
var/dyabs=abs(dy)
var/sdx=sign(dx) //Sign of x distance (+ or -)
var/sdy=sign(dy)
var/dxabs = abs(dx)//Absolute value of x distance
var/dyabs = abs(dy)
var/sdx = SIGN(dx) //Sign of x distance (+ or -)
var/sdy = SIGN(dy)
var/x=dxabs>>1 //Counters for steps taken, setting to distance/2
var/y=dyabs>>1 //Bit-shifting makes me l33t. It also makes getline() unnessecarrily fast.
var/j //Generic integer for counting
@@ -953,8 +953,8 @@ GLOBAL_LIST_INIT(WALLITEMS_INVERSE, typecacheof(list(
tY = tY[1]
tX = splittext(tX[1], ":")
tX = tX[1]
tX = Clamp(origin.x + text2num(tX) - world.view - 1, 1, world.maxx)
tY = Clamp(origin.y + text2num(tY) - world.view - 1, 1, world.maxy)
tX = CLAMP(origin.x + text2num(tX) - world.view - 1, 1, world.maxx)
tY = CLAMP(origin.y + text2num(tY) - world.view - 1, 1, world.maxy)
return locate(tX, tY, tZ)
/proc/screen_loc2turf(text, turf/origin)
@@ -966,8 +966,8 @@ GLOBAL_LIST_INIT(WALLITEMS_INVERSE, typecacheof(list(
tX = splittext(tZ[2], "-")
tX = text2num(tX[2])
tZ = origin.z
tX = Clamp(origin.x + 7 - tX, 1, world.maxx)
tY = Clamp(origin.y + 7 - tY, 1, world.maxy)
tX = CLAMP(origin.x + 7 - tX, 1, world.maxx)
tY = CLAMP(origin.y + 7 - tY, 1, world.maxy)
return locate(tX, tY, tZ)
/proc/IsValidSrc(datum/D)
@@ -1272,7 +1272,7 @@ proc/pick_closest_path(value, list/matches = get_fancy_list_of_atom_types())
. = 0
var/i = DS2TICKS(initial_delay)
do
. += Ceiling(i*DELTA_CALC)
. += CEILING(i*DELTA_CALC, 1)
sleep(i*world.tick_lag*DELTA_CALC)
i *= 2
while (TICK_USAGE > min(TICK_LIMIT_TO_RUN, Master.current_ticklimit))
+2 -2
View File
@@ -257,8 +257,8 @@
view = world.view
var/list/viewscales = getviewsize(view)
var/countx = Ceiling((viewscales[1]/2)/(480/world.icon_size))+1
var/county = Ceiling((viewscales[2]/2)/(480/world.icon_size))+1
var/countx = CEILING((viewscales[1]/2)/(480/world.icon_size), 1)+1
var/county = CEILING((viewscales[2]/2)/(480/world.icon_size), 1)+1
var/list/new_overlays = new
for(var/x in -countx to countx)
for(var/y in -county to county)
+277 -277
View File
@@ -1,277 +1,277 @@
/obj/screen/robot
icon = 'icons/mob/screen_cyborg.dmi'
/obj/screen/robot/module
name = "cyborg module"
icon_state = "nomod"
/obj/screen/robot/Click()
if(isobserver(usr))
return 1
/obj/screen/robot/module/Click()
if(..())
return
var/mob/living/silicon/robot/R = usr
if(R.module.type != /obj/item/robot_module)
R.hud_used.toggle_show_robot_modules()
return 1
R.pick_module()
/obj/screen/robot/module1
name = "module1"
icon_state = "inv1"
/obj/screen/robot/module1/Click()
if(..())
return
var/mob/living/silicon/robot/R = usr
R.toggle_module(1)
/obj/screen/robot/module2
name = "module2"
icon_state = "inv2"
/obj/screen/robot/module2/Click()
if(..())
return
var/mob/living/silicon/robot/R = usr
R.toggle_module(2)
/obj/screen/robot/module3
name = "module3"
icon_state = "inv3"
/obj/screen/robot/module3/Click()
if(..())
return
var/mob/living/silicon/robot/R = usr
R.toggle_module(3)
/obj/screen/robot/radio
name = "radio"
icon_state = "radio"
/obj/screen/robot/radio/Click()
if(..())
return
var/mob/living/silicon/robot/R = usr
R.radio.interact(R)
/obj/screen/robot/store
name = "store"
icon_state = "store"
/obj/screen/robot/store/Click()
if(..())
return
var/mob/living/silicon/robot/R = usr
R.uneq_active()
/obj/screen/robot/lamp
name = "headlamp"
icon_state = "lamp0"
/obj/screen/robot/lamp/Click()
if(..())
return
var/mob/living/silicon/robot/R = usr
R.control_headlamp()
/obj/screen/robot/thrusters
name = "ion thrusters"
icon_state = "ionpulse0"
/obj/screen/robot/thrusters/Click()
if(..())
return
var/mob/living/silicon/robot/R = usr
R.toggle_ionpulse()
/datum/hud/robot
ui_style_icon = 'icons/mob/screen_cyborg.dmi'
/datum/hud/robot/New(mob/owner, ui_style = 'icons/mob/screen_cyborg.dmi')
..()
var/mob/living/silicon/robot/mymobR = mymob
var/obj/screen/using
using = new/obj/screen/language_menu
using.screen_loc = ui_borg_language_menu
static_inventory += using
//Radio
using = new /obj/screen/robot/radio()
using.screen_loc = ui_borg_radio
static_inventory += using
//Module select
using = new /obj/screen/robot/module1()
using.screen_loc = ui_inv1
static_inventory += using
mymobR.inv1 = using
using = new /obj/screen/robot/module2()
using.screen_loc = ui_inv2
static_inventory += using
mymobR.inv2 = using
using = new /obj/screen/robot/module3()
using.screen_loc = ui_inv3
static_inventory += using
mymobR.inv3 = using
//End of module select
//Photography stuff
using = new /obj/screen/ai/image_take()
using.screen_loc = ui_borg_camera
static_inventory += using
using = new /obj/screen/ai/image_view()
using.screen_loc = ui_borg_album
static_inventory += using
//Sec/Med HUDs
using = new /obj/screen/ai/sensors()
using.screen_loc = ui_borg_sensor
static_inventory += using
//Headlamp control
using = new /obj/screen/robot/lamp()
using.screen_loc = ui_borg_lamp
static_inventory += using
mymobR.lamp_button = using
//Thrusters
using = new /obj/screen/robot/thrusters()
using.screen_loc = ui_borg_thrusters
static_inventory += using
mymobR.thruster_button = using
//Intent
action_intent = new /obj/screen/act_intent/robot()
action_intent.icon_state = mymob.a_intent
static_inventory += action_intent
//Health
healths = new /obj/screen/healths/robot()
infodisplay += healths
//Installed Module
mymobR.hands = new /obj/screen/robot/module()
mymobR.hands.screen_loc = ui_borg_module
static_inventory += mymobR.hands
//Store
module_store_icon = new /obj/screen/robot/store()
module_store_icon.screen_loc = ui_borg_store
pull_icon = new /obj/screen/pull()
pull_icon.icon = 'icons/mob/screen_cyborg.dmi'
pull_icon.update_icon(mymob)
pull_icon.screen_loc = ui_borg_pull
hotkeybuttons += pull_icon
zone_select = new /obj/screen/zone_sel/robot()
zone_select.update_icon(mymob)
static_inventory += zone_select
/datum/hud/proc/toggle_show_robot_modules()
if(!iscyborg(mymob))
return
var/mob/living/silicon/robot/R = mymob
R.shown_robot_modules = !R.shown_robot_modules
update_robot_modules_display()
/datum/hud/proc/update_robot_modules_display(mob/viewer)
if(!iscyborg(mymob))
return
var/mob/living/silicon/robot/R = mymob
var/mob/screenmob = viewer || R
if(!R.module)
return
if(!R.client)
return
if(R.shown_robot_modules && screenmob.hud_used.hud_shown)
//Modules display is shown
screenmob.client.screen += module_store_icon //"store" icon
if(!R.module.modules)
to_chat(usr, "<span class='danger'>Selected module has no modules to select</span>")
return
if(!R.robot_modules_background)
return
var/display_rows = Ceiling(length(R.module.get_inactive_modules()) / 8)
R.robot_modules_background.screen_loc = "CENTER-4:16,SOUTH+1:7 to CENTER+3:16,SOUTH+[display_rows]:7"
screenmob.client.screen += R.robot_modules_background
var/x = -4 //Start at CENTER-4,SOUTH+1
var/y = 1
for(var/atom/movable/A in R.module.get_inactive_modules())
//Module is not currently active
screenmob.client.screen += A
if(x < 0)
A.screen_loc = "CENTER[x]:16,SOUTH+[y]:7"
else
A.screen_loc = "CENTER+[x]:16,SOUTH+[y]:7"
A.layer = ABOVE_HUD_LAYER
A.plane = ABOVE_HUD_PLANE
x++
if(x == 4)
x = -4
y++
else
//Modules display is hidden
screenmob.client.screen -= module_store_icon //"store" icon
for(var/atom/A in R.module.get_inactive_modules())
//Module is not currently active
screenmob.client.screen -= A
R.shown_robot_modules = 0
screenmob.client.screen -= R.robot_modules_background
/mob/living/silicon/robot/create_mob_hud()
if(client && !hud_used)
hud_used = new /datum/hud/robot(src)
/datum/hud/robot/persistent_inventory_update(mob/viewer)
if(!mymob)
return
var/mob/living/silicon/robot/R = mymob
var/mob/screenmob = viewer || R
if(screenmob.hud_used)
if(screenmob.hud_used.hud_shown)
for(var/i in 1 to R.held_items.len)
var/obj/item/I = R.held_items[i]
if(I)
switch(i)
if(1)
I.screen_loc = ui_inv1
if(2)
I.screen_loc = ui_inv2
if(3)
I.screen_loc = ui_inv3
else
return
screenmob.client.screen += I
else
for(var/obj/item/I in R.held_items)
screenmob.client.screen -= I
/obj/screen/robot
icon = 'icons/mob/screen_cyborg.dmi'
/obj/screen/robot/module
name = "cyborg module"
icon_state = "nomod"
/obj/screen/robot/Click()
if(isobserver(usr))
return 1
/obj/screen/robot/module/Click()
if(..())
return
var/mob/living/silicon/robot/R = usr
if(R.module.type != /obj/item/robot_module)
R.hud_used.toggle_show_robot_modules()
return 1
R.pick_module()
/obj/screen/robot/module1
name = "module1"
icon_state = "inv1"
/obj/screen/robot/module1/Click()
if(..())
return
var/mob/living/silicon/robot/R = usr
R.toggle_module(1)
/obj/screen/robot/module2
name = "module2"
icon_state = "inv2"
/obj/screen/robot/module2/Click()
if(..())
return
var/mob/living/silicon/robot/R = usr
R.toggle_module(2)
/obj/screen/robot/module3
name = "module3"
icon_state = "inv3"
/obj/screen/robot/module3/Click()
if(..())
return
var/mob/living/silicon/robot/R = usr
R.toggle_module(3)
/obj/screen/robot/radio
name = "radio"
icon_state = "radio"
/obj/screen/robot/radio/Click()
if(..())
return
var/mob/living/silicon/robot/R = usr
R.radio.interact(R)
/obj/screen/robot/store
name = "store"
icon_state = "store"
/obj/screen/robot/store/Click()
if(..())
return
var/mob/living/silicon/robot/R = usr
R.uneq_active()
/obj/screen/robot/lamp
name = "headlamp"
icon_state = "lamp0"
/obj/screen/robot/lamp/Click()
if(..())
return
var/mob/living/silicon/robot/R = usr
R.control_headlamp()
/obj/screen/robot/thrusters
name = "ion thrusters"
icon_state = "ionpulse0"
/obj/screen/robot/thrusters/Click()
if(..())
return
var/mob/living/silicon/robot/R = usr
R.toggle_ionpulse()
/datum/hud/robot
ui_style_icon = 'icons/mob/screen_cyborg.dmi'
/datum/hud/robot/New(mob/owner, ui_style = 'icons/mob/screen_cyborg.dmi')
..()
var/mob/living/silicon/robot/mymobR = mymob
var/obj/screen/using
using = new/obj/screen/language_menu
using.screen_loc = ui_borg_language_menu
static_inventory += using
//Radio
using = new /obj/screen/robot/radio()
using.screen_loc = ui_borg_radio
static_inventory += using
//Module select
using = new /obj/screen/robot/module1()
using.screen_loc = ui_inv1
static_inventory += using
mymobR.inv1 = using
using = new /obj/screen/robot/module2()
using.screen_loc = ui_inv2
static_inventory += using
mymobR.inv2 = using
using = new /obj/screen/robot/module3()
using.screen_loc = ui_inv3
static_inventory += using
mymobR.inv3 = using
//End of module select
//Photography stuff
using = new /obj/screen/ai/image_take()
using.screen_loc = ui_borg_camera
static_inventory += using
using = new /obj/screen/ai/image_view()
using.screen_loc = ui_borg_album
static_inventory += using
//Sec/Med HUDs
using = new /obj/screen/ai/sensors()
using.screen_loc = ui_borg_sensor
static_inventory += using
//Headlamp control
using = new /obj/screen/robot/lamp()
using.screen_loc = ui_borg_lamp
static_inventory += using
mymobR.lamp_button = using
//Thrusters
using = new /obj/screen/robot/thrusters()
using.screen_loc = ui_borg_thrusters
static_inventory += using
mymobR.thruster_button = using
//Intent
action_intent = new /obj/screen/act_intent/robot()
action_intent.icon_state = mymob.a_intent
static_inventory += action_intent
//Health
healths = new /obj/screen/healths/robot()
infodisplay += healths
//Installed Module
mymobR.hands = new /obj/screen/robot/module()
mymobR.hands.screen_loc = ui_borg_module
static_inventory += mymobR.hands
//Store
module_store_icon = new /obj/screen/robot/store()
module_store_icon.screen_loc = ui_borg_store
pull_icon = new /obj/screen/pull()
pull_icon.icon = 'icons/mob/screen_cyborg.dmi'
pull_icon.update_icon(mymob)
pull_icon.screen_loc = ui_borg_pull
hotkeybuttons += pull_icon
zone_select = new /obj/screen/zone_sel/robot()
zone_select.update_icon(mymob)
static_inventory += zone_select
/datum/hud/proc/toggle_show_robot_modules()
if(!iscyborg(mymob))
return
var/mob/living/silicon/robot/R = mymob
R.shown_robot_modules = !R.shown_robot_modules
update_robot_modules_display()
/datum/hud/proc/update_robot_modules_display(mob/viewer)
if(!iscyborg(mymob))
return
var/mob/living/silicon/robot/R = mymob
var/mob/screenmob = viewer || R
if(!R.module)
return
if(!R.client)
return
if(R.shown_robot_modules && screenmob.hud_used.hud_shown)
//Modules display is shown
screenmob.client.screen += module_store_icon //"store" icon
if(!R.module.modules)
to_chat(usr, "<span class='danger'>Selected module has no modules to select</span>")
return
if(!R.robot_modules_background)
return
var/display_rows = CEILING(length(R.module.get_inactive_modules()) / 8, 1)
R.robot_modules_background.screen_loc = "CENTER-4:16,SOUTH+1:7 to CENTER+3:16,SOUTH+[display_rows]:7"
screenmob.client.screen += R.robot_modules_background
var/x = -4 //Start at CENTER-4,SOUTH+1
var/y = 1
for(var/atom/movable/A in R.module.get_inactive_modules())
//Module is not currently active
screenmob.client.screen += A
if(x < 0)
A.screen_loc = "CENTER[x]:16,SOUTH+[y]:7"
else
A.screen_loc = "CENTER+[x]:16,SOUTH+[y]:7"
A.layer = ABOVE_HUD_LAYER
A.plane = ABOVE_HUD_PLANE
x++
if(x == 4)
x = -4
y++
else
//Modules display is hidden
screenmob.client.screen -= module_store_icon //"store" icon
for(var/atom/A in R.module.get_inactive_modules())
//Module is not currently active
screenmob.client.screen -= A
R.shown_robot_modules = 0
screenmob.client.screen -= R.robot_modules_background
/mob/living/silicon/robot/create_mob_hud()
if(client && !hud_used)
hud_used = new /datum/hud/robot(src)
/datum/hud/robot/persistent_inventory_update(mob/viewer)
if(!mymob)
return
var/mob/living/silicon/robot/R = mymob
var/mob/screenmob = viewer || R
if(screenmob.hud_used)
if(screenmob.hud_used.hud_shown)
for(var/i in 1 to R.held_items.len)
var/obj/item/I = R.held_items[i]
if(I)
switch(i)
if(1)
I.screen_loc = ui_inv1
if(2)
I.screen_loc = ui_inv2
if(3)
I.screen_loc = ui_inv3
else
return
screenmob.client.screen += I
else
for(var/obj/item/I in R.held_items)
screenmob.client.screen -= I
+2 -2
View File
@@ -119,9 +119,9 @@
/obj/item/proc/get_clamped_volume()
if(w_class)
if(force)
return Clamp((force + w_class) * 4, 30, 100)// Add the item's force to its weight class and multiply by 4, then clamp the value between 30 and 100
return CLAMP((force + w_class) * 4, 30, 100)// Add the item's force to its weight class and multiply by 4, then clamp the value between 30 and 100
else
return Clamp(w_class * 6, 10, 100) // Multiply the item's weight class by 6, then clamp the value between 10 and 100
return CLAMP(w_class * 6, 10, 100) // Multiply the item's weight class by 6, then clamp the value between 10 and 100
/mob/living/proc/send_item_attack_message(obj/item/I, mob/living/user, hit_area)
var/message_verb = "attacked"
+1 -1
View File
@@ -14,7 +14,7 @@
// Otherwise jump
else if(A.loc)
loc = get_turf(A)
forceMove(get_turf(A))
update_parallax_contents()
/mob/dead/observer/ClickOn(var/atom/A, var/params)
+2 -2
View File
@@ -62,14 +62,14 @@
/mob/living/proc/adjustArousalLoss(amount, updating_arousal=1)
if(status_flags & GODMODE || !canbearoused)
return 0
arousalloss = Clamp(arousalloss + amount, min_arousal, max_arousal)
arousalloss = CLAMP(arousalloss + amount, min_arousal, max_arousal)
if(updating_arousal)
updatearousal()
/mob/living/proc/setArousalLoss(amount, updating_arousal=1)
if(status_flags & GODMODE || !canbearoused)
return 0
arousalloss = Clamp(amount, min_arousal, max_arousal)
arousalloss = CLAMP(amount, min_arousal, max_arousal)
if(updating_arousal)
updatearousal()
-1
View File
@@ -8,7 +8,6 @@
throw_speed = 3
throw_range = 5
w_class = WEIGHT_CLASS_TINY
origin_tech = "biotech=3"
var/applied_region = "chest"
var/list/add_mutations = list()
var/list/remove_mutations = list()
-30
View File
@@ -4,7 +4,6 @@
icon = 'icons/obj/guns/cit_guns.dmi'
icon_state = "lasernew"
item_state = "laser"
origin_tech = "combat=4;magnets=4"
force = 10
throwforce = 10
ammo_type = list(/obj/item/ammo_casing/energy/lasergun)
@@ -22,7 +21,6 @@
name = "Laser Carbine"
desc = "Beefed up version of a standard laser gun."
id = "lasercarbine"
req_tech = list("combat" = 5, "magnets" = 5, "powerstorage" = 4)
build_type = PROTOLATHE
materials = list(MAT_GOLD = 2500, MAT_METAL = 5000, MAT_GLASS = 5000)
build_path = /obj/item/gun/energy/laser/carbine/nopin
@@ -40,7 +38,6 @@
mag_type = /obj/item/ammo_box/magazine/sniper_rounds
fire_delay = 50
burst_size = 1
origin_tech = "combat=7"
can_suppress = 0
w_class = WEIGHT_CLASS_NORMAL
actions_types = list()
@@ -60,7 +57,6 @@
name = "Syndicate Anti Tank Pistol"
desc = "A massively impractical and silly monstrosity of a pistol that fires .50 calliber rounds. The recoil is likely to dislocate a variety of joints without proper bracing."
pin = /obj/item/device/firing_pin/implant/pindicate
origin_tech = "combat=7;syndicate=6"
/////////////spinfusor stuff////////////////
@@ -115,7 +111,6 @@
select = 0
actions_types = list()
casing_ejector = 0
origin_tech = "combat=6;magnets=6"
/obj/item/gun/ballistic/automatic/spinfusor/attackby(obj/item/A, mob/user, params)
var/num_loaded = magazine.attackby(A, user, params, 1)
@@ -163,7 +158,6 @@
icon_state = "x9"
item_state = "arg"
slot_flags = 0
origin_tech = "combat=7;engineering=7"
mag_type = /obj/item/ammo_box/magazine/m556 //Uses the m90gl's magazine, just like the NT-ARG
fire_sound = 'sound/weapons/gunshot_smg.ogg'
can_suppress = 0
@@ -194,7 +188,6 @@
spread = 90 //MAXIMUM XCOM MEMES (actually that'd be 180 spread)
w_class = WEIGHT_CLASS_BULKY
weapon_weight = WEAPON_HEAVY
origin_tech = "combat=1;magnets=1"
/datum/design/foam_x9
name = "Foam Force X9 Rifle"
@@ -254,7 +247,6 @@
name = "magpistol magazine (non-lethal disabler)"
icon = 'icons/obj/guns/cit_guns.dmi'
icon_state = "nlmagmag"
origin_tech = "magnets=5"
ammo_type = /obj/item/ammo_casing/caseless/anlmags
caliber = "mags"
max_ammo = 15
@@ -264,7 +256,6 @@
name = "magpistol magazine (lethal)"
icon = 'icons/obj/guns/cit_guns.dmi'
icon_state = "smallmagmag"
origin_tech = "combat=5"
ammo_type = /obj/item/ammo_casing/caseless/amags
//////the gun itself//////
@@ -280,7 +271,6 @@
can_suppress = 0
casing_ejector = 0
fire_delay = 2
origin_tech = "combat=4;magnets=4"
/obj/item/gun/ballistic/automatic/pistol/mag/update_icon()
..()
@@ -301,7 +291,6 @@
name = "Magpistol"
desc = "A weapon which fires ferromagnetic slugs."
id = "magpisol"
req_tech = list("combat" = 5, "magnets" = 6, "powerstorage" = 5)
build_type = PROTOLATHE
materials = list(MAT_METAL = 7500, MAT_GLASS = 1000, MAT_URANIUM = 1000, MAT_TITANIUM = 5000, MAT_SILVER = 2000)
build_path = /obj/item/gun/ballistic/automatic/pistol/mag/nopin
@@ -311,7 +300,6 @@
name = "Magpistol Magazine"
desc = "A 7 round magazine for the Magpistol."
id = "mag_magpistol"
req_tech = list("combat" = 5, "magnets" = 6, "materials" = 5, "syndicate" = 3)
build_type = PROTOLATHE
materials = list(MAT_METAL = 4000, MAT_SILVER = 500)
build_path = /obj/item/ammo_box/magazine/mmag/small/lethal
@@ -321,7 +309,6 @@
name = "Magpistol Magazine (Non-Lethal)"
desc = "A 7 round non-lethal magazine for the Magpistol."
id = "mag_magpistol_nl"
req_tech = list("combat" = 5, "magnets" = 6, "materials" = 5)
materials = list(MAT_METAL = 3000, MAT_SILVER = 250, MAT_TITANIUM = 250)
build_path = /obj/item/ammo_box/magazine/mmag/small
@@ -354,7 +341,6 @@
fire_sound = 'sound/weapons/magpistol.ogg'
slot_flags = SLOT_BELT
w_class = WEIGHT_CLASS_SMALL
origin_tech = "combat=1;magnets=1"
/obj/item/ammo_box/foambox/mag
name = "ammo box (Magnetic Foam Darts)"
@@ -427,7 +413,6 @@
name = "magrifle magazine (non-lethal disabler)"
icon = 'icons/obj/guns/cit_guns.dmi'
icon_state = "mediummagmag"
origin_tech = "magnets=6"
ammo_type = /obj/item/ammo_casing/caseless/anlmagm
caliber = "magm"
max_ammo = 27
@@ -437,7 +422,6 @@
name = "magrifle magazine (lethal)"
icon = 'icons/obj/guns/cit_guns.dmi'
icon_state = "mediummagmag"
origin_tech = "combat=6"
ammo_type = /obj/item/ammo_casing/caseless/amagm
max_ammo = 21
@@ -450,7 +434,6 @@
icon_state = "magrifle"
item_state = "arg"
slot_flags = 0
origin_tech = "combat=6;engineering=6;magnets=6"
mag_type = /obj/item/ammo_box/magazine/mmag
fire_sound = 'sound/weapons/magrifle.ogg'
can_suppress = 0
@@ -470,7 +453,6 @@
name = "Magrifle"
desc = "An upscaled Magpistol in rifle form."
id = "magrifle"
req_tech = list("combat" = 7, "magnets" = 7, "powerstorage" = 7)
build_type = PROTOLATHE
materials = list(MAT_METAL = 10000, MAT_GLASS = 2000, MAT_URANIUM = 2000, MAT_TITANIUM = 10000, MAT_SILVER = 4000, MAT_GOLD = 2000)
build_path = /obj/item/gun/ballistic/automatic/magrifle/nopin
@@ -480,7 +462,6 @@
name = "Magrifle Magazine (Lethal)"
desc = "A 15 round magazine for the Magrifle."
id = "mag_magrifle"
req_tech = list("combat" = 7, "magnets" = 7, "materials" = 5, "syndicate" = 4)
build_type = PROTOLATHE
materials = list(MAT_METAL = 8000, MAT_SILVER = 1000)
build_path = /obj/item/ammo_box/magazine/mmag/lethal
@@ -490,7 +471,6 @@
name = "Magrifle Magazine (Non-Lethal)"
desc = "A 15 round non-lethal magazine for the Magrifle."
id = "mag_magrifle_nl"
req_tech = list("combat" = 7, "magnets" = 7, "materials" = 5)
materials = list(MAT_METAL = 6000, MAT_SILVER = 500, MAT_TITANIUM = 500)
build_path = /obj/item/ammo_box/magazine/mmag
@@ -512,7 +492,6 @@
needs_permit = FALSE
mag_type = /obj/item/ammo_box/magazine/toy/foamag
casing_ejector = FALSE
origin_tech = "combat=1;engineering=1;magnets=1"
spread = 60
w_class = WEIGHT_CLASS_BULKY
weapon_weight = WEAPON_HEAVY
@@ -598,7 +577,6 @@
icon_state = "hyperburst"
item_state = "arg"
slot_flags = 0
origin_tech = "combat=6;engineering=6;magnets=6;syndicate=6"
mag_type = /obj/item/ammo_box/magazine/mhyper
fire_sound = 'sound/weapons/magburst.ogg'
can_suppress = 0
@@ -646,7 +624,6 @@
charge_delay = 2
recoil = 2
cell_type = /obj/item/stock_parts/cell/toymagburst
origin_tech = "combat=1;magnets=1"
/obj/item/stock_parts/cell/toymagburst
name = "toy mag burst rifle power supply"
@@ -669,7 +646,6 @@
icon = 'icons/obj/guns/cit_guns.dmi'
icon_state = "stealthpistol"
w_class = WEIGHT_CLASS_SMALL
origin_tech = "combat=3;materials=3;syndicate=4"
mag_type = /obj/item/ammo_box/magazine/m10mm
can_suppress = 0
fire_sound = 'sound/weapons/gunshot_silenced.ogg'
@@ -703,7 +679,6 @@
fire_delay = 0
spread = 60
actions_types = list()
origin_tech = "combat=1;magnets=1"
/obj/item/gun/ballistic/automatic/toy/pistol/stealth/update_icon()
..()
@@ -805,7 +780,6 @@ obj/item/projectile/bullet/c10mm/soporific
name = "flechette magazine (armor piercing)"
icon = 'icons/obj/guns/cit_guns.dmi'
icon_state = "flechettemag"
origin_tech = "combat=5;syndicate=1"
ammo_type = /obj/item/ammo_casing/caseless/flechetteap
caliber = "flechette"
max_ammo = 40
@@ -826,7 +800,6 @@ obj/item/projectile/bullet/c10mm/soporific
w_class = WEIGHT_CLASS_NORMAL
slot_flags = 0
/obj/item/device/firing_pin/implant/pindicate
origin_tech = "combat=6;materials=2;syndicate=5"
mag_type = /obj/item/ammo_box/magazine/flechette/
fire_sound = 'sound/weapons/gunshot_smg.ogg'
can_suppress = 0
@@ -930,7 +903,6 @@ obj/item/projectile/bullet/c10mm/soporific
desc = "A toy laser with a classic, retro feel and look. Compatible with existing laser tag systems."
ammo_type = list(/obj/item/ammo_casing/energy/laser/raytag)
selfcharge = TRUE
origin_tech = "combat=1;magnets=1"
/datum/design/toyray
name = "RayTag Gun"
@@ -1186,7 +1158,6 @@ obj/item/projectile/bullet/c10mm/soporific
mag_type = /obj/item/ammo_box/magazine/toy/pistol
can_suppress = FALSE
actions_types = list(/datum/action/item_action/pick_color)
origin_tech = "combat=1;magnets=1"
/datum/design/foam_p37
name = "Foam Force Mk.37F"
@@ -1209,7 +1180,6 @@ obj/item/gun/energy/e_gun/cx
lefthand_file = 'icons/mob/citadel/guns_lefthand.dmi'
righthand_file = 'icons/mob/citadel/guns_righthand.dmi'
ammo_type = list(/obj/item/ammo_casing/energy/disabler, /obj/item/ammo_casing/energy/laser)
origin_tech = "combat=4;magnets=3"
flight_x_offset = 15
flight_y_offset = 10
actions_types = list(/datum/action/item_action/pick_color)
-242
View File
@@ -1,242 +0,0 @@
/obj/item/toy/sword/cx
name = "\improper DX Non-Euplastic LightSword"
desc = "A deluxe toy replica of an energy sword. Realistic visuals and sounds! Ages 8 and up."
icon = 'icons/obj/cit_weapons.dmi'
icon_state = "cxsword_hilt"
item_state = "cxsword"
lefthand_file = 'icons/mob/citadel/melee_lefthand.dmi'
righthand_file = 'icons/mob/citadel/melee_righthand.dmi'
active = FALSE
w_class = WEIGHT_CLASS_SMALL
attack_verb = list("poked", "jabbed", "hit")
light_color = "#37FFF7"
var/light_brightness = 3
actions_types = list()
/obj/item/toy/sword/cx/attack_self(mob/user)
active = !( active )
if (active)
to_chat(user, "<span class='notice'>You activate the holographic blade with a press of a button.</span>")
playsound(user, 'sound/weapons/nebon.ogg', 50, 1)
w_class = WEIGHT_CLASS_BULKY
attack_verb = list("slashed", "stabbed", "ravaged")
set_light(light_brightness)
update_icon()
else
to_chat(user, "<span class='notice'>You deactivate the holographic blade with a press of a button.</span>")
playsound(user, 'sound/weapons/neboff.ogg', 50, 1)
w_class = WEIGHT_CLASS_SMALL
attack_verb = list("poked", "jabbed", "hit")
set_light(0)
update_icon()
for(var/X in actions)
var/datum/action/A = X
A.UpdateButtonIcon()
add_fingerprint(user)
/obj/item/toy/sword/cx/update_icon()
var/mutable_appearance/blade_overlay = mutable_appearance('icons/obj/cit_weapons.dmi', "cxsword_blade")
var/mutable_appearance/gem_overlay = mutable_appearance('icons/obj/cit_weapons.dmi', "cxsword_gem")
if(light_color)
blade_overlay.color = light_color
gem_overlay.color = light_color
cut_overlays() //So that it doesn't keep stacking overlays non-stop on top of each other
add_overlay(gem_overlay)
if(active)
add_overlay(blade_overlay)
if(ismob(loc))
var/mob/M = loc
M.update_inv_hands()
/obj/item/toy/sword/cx/AltClick(mob/living/user)
if(user.incapacitated() || !istype(user))
to_chat(user, "<span class='warning'>You can't do that right now!</span>")
return
if(!in_range(src, user))
return
if(user.incapacitated() || !istype(user) || !in_range(src, user))
return
if(alert("Are you sure you want to recolor your blade?", "Confirm Repaint", "Yes", "No") == "Yes")
var/energy_color_input = input(usr,"Choose Energy Color") as color|null
if(energy_color_input)
light_color = sanitize_hexcolor(energy_color_input, desired_format=6, include_crunch=1)
update_icon()
update_light()
/obj/item/toy/sword/cx/worn_overlays(isinhands, icon_file)
. = ..()
if(active)
if(isinhands)
var/mutable_appearance/blade_inhand = mutable_appearance(icon_file, "cxsword_blade")
blade_inhand.color = light_color
. += blade_inhand
/obj/item/toy/sword/cx/attackby(obj/item/W, mob/living/user, params)
if(istype(W, /obj/item/toy/sword/cx))
if((W.flags_1 & NODROP_1) || (flags_1 & NODROP_1))
to_chat(user, "<span class='warning'>\the [flags_1 & NODROP_1 ? src : W] is stuck to your hand, you can't attach it to \the [flags_1 & NODROP_1 ? W : src]!</span>")
return
else
to_chat(user, "<span class='notice'>You combine the two plastic swords, making a single supermassive toy! You're fake-cool.</span>")
new /obj/item/twohanded/hypereutactic/toy(user.loc)
qdel(W)
qdel(src)
else
return ..()
/obj/item/toy/sword/cx/examine(mob/user)
..()
to_chat(user, "<span class='notice'>Alt-click to recolor it.</span>")
/*///autolathe memes/// I really need to stop doing this and find a proper way of adding in my toys
/datum/design/toyneb
name = "Non-Euplastic Blade"
id = "toyneb"
build_type = AUTOLATHE
materials = list(MAT_METAL = 10000, MAT_GLASS = 1000)
build_path = /obj/item/toy/sword/cx
category = list("hacked", "Misc")
*/ // There, I stopped doing it
/datum/crafting_recipe/toyneb
name = "Non-Euplastic Blade"
reqs = list(/obj/item/light/bulb = 1, /obj/item/stack/cable_coil = 1, /obj/item/toy/sword = 1)
result = /obj/item/toy/sword/cx
category = CAT_MISC
/*/////////////////////////////////////////////////////////////////////////
///////////// The TRUE Energy Sword ///////////////////////////
*//////////////////////////////////////////////////////////////////////////
/obj/item/melee/transforming/energy/sword/cx
name = "non-eutactic blade"
desc = "The CX Armories Type-69 Non-Eutactic Blade utilizes a hardlight blade that is dynamically 'forged' on demand to create a deadly sharp edge that is unbreakable."
icon_state = "cxsword_hilt"
icon = 'icons/obj/cit_weapons.dmi'
item_state = "cxsword"
lefthand_file = 'icons/mob/citadel/melee_lefthand.dmi'
righthand_file = 'icons/mob/citadel/melee_righthand.dmi'
force = 3
throwforce = 5
hitsound = "swing_hit" //it starts deactivated
hitsound_on = 'sound/weapons/nebhit.ogg'
attack_verb_off = list("tapped", "poked")
throw_speed = 3
throw_range = 5
sharpness = IS_SHARP
embed_chance = 40
embedded_impact_pain_multiplier = 10
armour_penetration = 0
origin_tech = "combat=3;magnets=4"
block_chance = 60
light_color = "#37FFF7"
actions_types = list()
/obj/item/melee/transforming/energy/sword/cx/transform_weapon(mob/living/user, supress_message_text)
active = !active //I'd use a ..() here but it'd inherit from the regular esword's proc instead, so SPAGHETTI CODE
if(active) //also I need to rip out the iconstate changing bits
force = force_on
throwforce = throwforce_on
hitsound = hitsound_on
throw_speed = 4
if(attack_verb_on.len)
attack_verb = attack_verb_on
w_class = w_class_on
START_PROCESSING(SSobj, src)
set_light(brightness_on)
update_icon()
else
force = initial(force)
throwforce = initial(throwforce)
hitsound = initial(hitsound)
throw_speed = initial(throw_speed)
if(attack_verb_off.len)
attack_verb = attack_verb_off
w_class = initial(w_class)
STOP_PROCESSING(SSobj, src)
set_light(0)
update_icon()
transform_messages(user, supress_message_text)
add_fingerprint(user)
return TRUE
/obj/item/melee/transforming/energy/sword/cx/transform_messages(mob/living/user, supress_message_text)
playsound(user, active ? 'sound/weapons/nebon.ogg' : 'sound/weapons/neboff.ogg', 65, 1)
if(!supress_message_text)
to_chat(user, "<span class='notice'>[src] [active ? "is now active":"can now be concealed"].</span>")
/obj/item/melee/transforming/energy/sword/cx/update_icon()
var/mutable_appearance/blade_overlay = mutable_appearance('icons/obj/cit_weapons.dmi', "cxsword_blade")
var/mutable_appearance/gem_overlay = mutable_appearance('icons/obj/cit_weapons.dmi', "cxsword_gem")
if(light_color)
blade_overlay.color = light_color
gem_overlay.color = light_color
cut_overlays() //So that it doesn't keep stacking overlays non-stop on top of each other
add_overlay(gem_overlay)
if(active)
add_overlay(blade_overlay)
if(ismob(loc))
var/mob/M = loc
M.update_inv_hands()
/obj/item/melee/transforming/energy/sword/cx/AltClick(mob/living/user)
if(user.incapacitated() || !istype(user))
to_chat(user, "<span class='warning'>You can't do that right now!</span>")
return
if(!in_range(src, user))
return
if(user.incapacitated() || !istype(user) || !in_range(src, user))
return
if(alert("Are you sure you want to recolor your blade?", "Confirm Repaint", "Yes", "No") == "Yes")
var/energy_color_input = input(usr,"Choose Energy Color") as color|null
if(energy_color_input)
light_color = sanitize_hexcolor(energy_color_input, desired_format=6, include_crunch=1)
update_icon()
update_light()
/obj/item/melee/transforming/energy/sword/cx/examine(mob/user)
..()
to_chat(user, "<span class='notice'>Alt-click to recolor it.</span>")
/obj/item/melee/transforming/energy/sword/cx/worn_overlays(isinhands, icon_file)
. = ..()
if(active)
if(isinhands)
var/mutable_appearance/blade_inhand = mutable_appearance(icon_file, "cxsword_blade")
blade_inhand.color = light_color
. += blade_inhand
/obj/item/melee/transforming/energy/sword/cx/traitor
name = "\improper Dragon's Tooth Sword"
desc = "The Dragon's Tooth sword is a blackmarket modification of the CX Armouries Type-69 NEB, \
which utilizes a hardlight blade that is dynamically 'forged' on demand to create a deadly sharp edge that is unbreakable. \
It appears to have a wooden grip and a shaved down guard."
icon_state = "cxsword_hilt_traitor"
armour_penetration = 35
embed_chance = 75
block_chance = 50
origin_tech = "combat=3;magnets=4;syndicate=4"
hitsound_on = 'sound/weapons/blade1.ogg'
light_color = "#37F0FF"
/obj/item/melee/transforming/energy/sword/cx/traitor/transform_messages(mob/living/user, supress_message_text)
playsound(user, active ? 'sound/weapons/saberon.ogg' : 'sound/weapons/saberoff.ogg', 35, 1)
if(!supress_message_text)
to_chat(user, "<span class='notice'>[src] [active ? "is now active":"can now be concealed"].</span>")
@@ -38,8 +38,8 @@
explanation_text = "Make sure the research required to produce a [initial(targetdesign.name)] is available on the R&D server by the end of the shift."
/datum/objective/crew/research/check_completion()
for(var/obj/machinery/r_n_d/server/S in GLOB.machines)
if(S && S.files && S.files.known_designs)
if(targetdesign in S.files.known_designs)
for(var/obj/machinery/rnd/server/S in GLOB.machines)
if(S && S.stored_research)
if(S.stored_research.researched_designs[initial(targetdesign.id)])
return TRUE
return FALSE
+40 -40
View File
@@ -17,9 +17,9 @@
name = "Kiara's Cloak"
desc = "The design on this seems a little too familiar."
icon = 'icons/obj/custom.dmi'
icon_state = "infcloak-i"
icon_override = 'icons/obj/custom.dmi'
item_state = "infcloak-w"
icon_state = "infcloak"
icon_override = 'icons/mob/custom_w.dmi'
item_state = "infcloak"
w_class = WEIGHT_CLASS_SMALL
body_parts_covered = CHEST|GROIN|LEGS|ARMS
@@ -27,9 +27,9 @@
name = "Kiara's Collar"
desc = "A soft black collar that seems to stretch to fit whoever wears it."
icon = 'icons/obj/custom.dmi'
icon_state = "infcollar-i"
icon_override = 'icons/obj/custom.dmi'
item_state = "infcollar-w"
icon_state = "infcollar"
icon_override = 'icons/mob/custom_w.dmi'
item_state = "infcollar"
item_color = null
tagname = null
@@ -62,19 +62,19 @@
/obj/item/clothing/neck/scarf/zomb //Default white color, same functionality as beanies.
name = "A special scarf"
icon = 'icons/obj/custom.dmi'
icon_state = "zombscarf-i"
icon_state = "zombscarf"
desc = "A fashionable collar"
icon_override = 'icons/obj/custom.dmi'
item_color = "zombscarf-w"
icon_override = 'icons/mob/custom_w.dmi'
item_color = "zombscarf"
dog_fashion = /datum/dog_fashion/head
/obj/item/clothing/suit/toggle/labcoat/mad/red
name = "\improper The Mad's labcoat"
desc = "An oddly special looking coat."
icon = 'icons/obj/custom.dmi'
icon_state = "labred-i"
icon_override = 'icons/obj/custom.dmi'
item_state = "labred-w"
icon_state = "labred"
icon_override = 'icons/mob/custom_w.dmi'
item_state = "labred"
/*PLACEHOLDER*/
@@ -94,9 +94,9 @@
name = "carrot cloak"
desc = "A cloak in the shape and color of a carrot!"
icon = 'icons/obj/custom.dmi'
icon_override = 'icons/obj/custom.dmi'
icon_state = "carrotcloak-i"
item_state = "carrotcloak-w"
icon_override = 'icons/mob/custom_w.dmi'
icon_state = "carrotcloak"
item_state = "carrotcloak"
w_class = WEIGHT_CLASS_SMALL
body_parts_covered = CHEST|GROIN|LEGS|ARMS
@@ -115,9 +115,9 @@
name = "Celebratory Cloak of Morozko"
desc = " It probably will protect from snow, charcoal or elves."
icon = 'icons/obj/custom.dmi'
icon_state = "festive-i"
item_state = "festive-w"
icon_override = 'icons/obj/custom.dmi'
icon_state = "festive"
item_state = "festive"
icon_override = 'icons/mob/custom_w.dmi'
w_class = WEIGHT_CLASS_SMALL
body_parts_covered = CHEST|GROIN|LEGS|ARMS
@@ -127,9 +127,9 @@
/obj/item/clothing/mask/luchador/zigfie
name = "Alboroto Rosa mask"
icon = 'icons/obj/custom.dmi'
icon_state = "lucharzigfie-i"
icon_override = 'icons/obj/custom.dmi'
item_state = "lucharzigfie-w"
icon_state = "lucharzigfie"
icon_override = 'icons/mob/custom_w.dmi'
item_state = "lucharzigfie"
/*PLACEHOLDER*/
@@ -168,9 +168,9 @@
name = "Reece's Great Coat"
desc = "You would swear this was in your nightmares after eating too many veggies."
icon = 'icons/obj/custom.dmi'
icon_state = "hos-g-i"
icon_override = 'icons/obj/custom.dmi'
item_state = "hos-g-w"
icon_state = "hos-g"
icon_override = 'icons/mob/custom_w.dmi'
item_state = "hos-g"
body_parts_covered = CHEST|GROIN|ARMS|LEGS
@@ -186,9 +186,9 @@
name = "S.T.A.L.K.E.R. mask"
desc = "Smells like reactor four."
icon = 'icons/obj/custom.dmi'
item_state = "stalker-w"
icon_override = 'icons/obj/custom.dmi'
icon_state = "stalker-i"
item_state = "stalker"
icon_override = 'icons/mob/custom_w.dmi'
icon_state = "stalker"
/*Sylas*/
@@ -196,9 +196,9 @@
name = "collar"
desc = "It's a collar..."
icon = 'icons/obj/custom.dmi'
icon_state = "petcollar-stripe-i"
icon_override = 'icons/obj/custom.dmi'
item_state = "petcollar-stripe-w"
icon_state = "petcollar-stripe"
icon_override = 'icons/mob/custom_w.dmi'
item_state = "petcollar-stripe"
tagname = null
@@ -207,10 +207,10 @@
name = "bluish performer's outfit"
desc = "Just looking at this makes you want to sing."
icon = 'icons/obj/custom.dmi'
icon_state = "singer-i"
icon_override = 'icons/obj/custom.dmi'
item_state = "singer-w"
item_color = "singer-i"
icon_state = "singer"
icon_override = 'icons/mob/custom_w.dmi'
item_state = "singer"
item_color = "singer"
fitted = NO_FEMALE_UNIFORM
alternate_worn_layer = ABOVE_SHOES_LAYER
can_adjust = 0
@@ -218,9 +218,9 @@
/obj/item/clothing/shoes/sneakers/pink
icon = 'icons/obj/custom.dmi'
icon_state = "pink-i"
icon_override = 'icons/obj/custom.dmi'
item_state = "pink-w"
icon_state = "pink"
icon_override = 'icons/mob/custom_w.dmi'
item_state = "pink"
/*Fractious*/
@@ -228,8 +228,8 @@
/obj/item/clothing/suit/vermillion
name = "vermillion clothing"
desc = "Some clothing."
icon_state = "vermillion-i"
item_state = "vermillion-w"
icon_state = "vermillion"
item_state = "vermillion"
body_parts_covered = CHEST|GROIN|LEGS|ARMS|HANDS
icon = 'icons/obj/custom.dmi'
icon_override = 'icons/obj/custom.dmi'
icon_override = 'icons/mob/custom_w.dmi'
@@ -9,7 +9,7 @@
var/value
var/default //read-only, just set value directly
var/resident_file //the file which this belongs to, must be set
var/resident_file //the file which this was loaded from, if any
var/modified = FALSE //set to TRUE if the default has been overridden by a config entry
var/protection = NONE
@@ -18,8 +18,6 @@
var/dupes_allowed = FALSE
/datum/config_entry/New()
if(!resident_file)
CRASH("Config entry [type] has no resident_file set")
if(type == abstract_type)
CRASH("Abstract config entry [type] instatiated!")
name = lowertext(type2top(type))
@@ -110,7 +108,7 @@
/datum/config_entry/number/ValidateAndSet(str_val)
var/temp = text2num(trim(str_val))
if(!isnull(temp))
value = Clamp(integer ? round(temp) : temp, min_val, max_val)
value = CLAMP(integer ? round(temp) : temp, min_val, max_val)
if(value != temp && !var_edited)
log_config("Changing [name] from [temp] to [value]!")
return TRUE
+29 -15
View File
@@ -20,10 +20,13 @@ GLOBAL_PROTECT(config_dir)
/datum/controller/configuration/New()
config = src
var/list/config_files = InitEntries()
InitEntries()
LoadModes()
for(var/I in config_files)
LoadEntries(I)
if(!LoadEntries("config.txt"))
log_config("No $include directives found in config.txt! Loading legacy game_options/dbconfig/comms files...")
LoadEntries("game_options.txt")
LoadEntries("dbconfig.txt")
LoadEntries("comms.txt")
loadmaplist(CONFIG_MAPS_FILE)
/datum/controller/configuration/Destroy()
@@ -42,8 +45,6 @@ GLOBAL_PROTECT(config_dir)
var/list/_entries_by_type = list()
entries_by_type = _entries_by_type
. = list()
for(var/I in typesof(/datum/config_entry)) //typesof is faster in this case
var/datum/config_entry/E = I
if(initial(E.abstract_type) == I)
@@ -57,24 +58,30 @@ GLOBAL_PROTECT(config_dir)
continue
_entries[esname] = E
_entries_by_type[I] = E
.[E.resident_file] = TRUE
/datum/controller/configuration/proc/RemoveEntry(datum/config_entry/CE)
entries -= CE.name
entries_by_type -= CE.type
/datum/controller/configuration/proc/LoadEntries(filename)
/datum/controller/configuration/proc/LoadEntries(filename, list/stack = list())
var/filename_to_test = world.system_type == MS_WINDOWS ? lowertext(filename) : filename
if(filename_to_test in stack)
log_config("Warning: Config recursion detected ([english_list(stack)]), breaking!")
return
stack = stack + filename_to_test
log_config("Loading config file [filename]...")
var/list/lines = world.file2list("[GLOB.config_dir][filename]")
var/list/_entries = entries
for(var/L in lines)
if(!L)
continue
if(copytext(L, 1, 2) == "#")
var/firstchar = copytext(L, 1, 2)
if(firstchar == "#")
continue
var/lockthis = copytext(L, 1, 2) == "@"
var/lockthis = firstchar == "@"
if(lockthis)
L = copytext(L, 2)
@@ -91,14 +98,17 @@ GLOBAL_PROTECT(config_dir)
if(!entry)
continue
if(entry == "$include")
if(!value)
log_config("Warning: Invalid $include directive: [value]")
else
LoadEntries(value, stack)
continue
var/datum/config_entry/E = _entries[entry]
if(!E)
log_config("Unknown setting in configuration: '[entry]'")
continue
if(filename != E.resident_file)
log_config("Found [entry] in [filename] when it should have been in [E.resident_file]! Ignoring.")
continue
if(lockthis)
E.protection |= CONFIG_ENTRY_LOCKED
@@ -107,10 +117,14 @@ GLOBAL_PROTECT(config_dir)
if(!validated)
log_config("Failed to validate setting \"[value]\" for [entry]")
else if(E.modified && !E.dupes_allowed)
log_config("Duplicate setting for [entry] ([value]) detected! Using latest.")
log_config("Duplicate setting for [entry] ([value], [E.resident_file]) detected! Using latest.")
E.resident_file = filename
if(validated)
E.modified = TRUE
. = TRUE
/datum/controller/configuration/can_vv_get(var_name)
return (var_name != "entries_by_type" || !hiding_entries_by_type) && ..()
@@ -1,22 +1,20 @@
#define CURRENT_RESIDENT_FILE "comms.txt"
CONFIG_DEF(string/comms_key)
/datum/config_entry/string/comms_key
protection = CONFIG_ENTRY_HIDDEN
/datum/config_entry/string/comms_key/ValidateAndSet(str_val)
return str_val != "default_pwd" && length(str_val) > 6 && ..()
CONFIG_DEF(string/cross_server_address)
/datum/config_entry/keyed_string_list/cross_server
protection = CONFIG_ENTRY_LOCKED
/datum/config_entry/string/cross_server_address/ValidateAndSet(str_val)
return str_val != "byond:\\address:port" && ..()
CONFIG_DEF(string/cross_comms_name)
/datum/config_entry/string/cross_comms_name
GLOBAL_VAR_INIT(medals_enabled, TRUE) //will be auto set to false if the game fails contacting the medal hub to prevent unneeded calls.
CONFIG_DEF(string/medal_hub_address)
/datum/config_entry/string/medal_hub_address
CONFIG_DEF(string/medal_hub_password)
protection = CONFIG_ENTRY_HIDDEN
/datum/config_entry/string/medal_hub_password
protection = CONFIG_ENTRY_HIDDEN
@@ -1,390 +0,0 @@
#define CURRENT_RESIDENT_FILE "config.txt"
CONFIG_DEF(flag/autoadmin) // if autoadmin is enabled
protection = CONFIG_ENTRY_LOCKED
CONFIG_DEF(string/autoadmin_rank) // the rank for autoadmins
value = "Game Master"
protection = CONFIG_ENTRY_LOCKED
CONFIG_DEF(string/servername) // server name (the name of the game window)
CONFIG_DEF(string/serversqlname) // short form server name used for the DB
CONFIG_DEF(string/stationname) // station name (the name of the station in-game)
CONFIG_DEF(number/lobby_countdown) // In between round countdown.
value = 120
min_val = 0
CONFIG_DEF(number/round_end_countdown) // Post round murder death kill countdown
value = 25
min_val = 0
CONFIG_DEF(flag/hub) // if the game appears on the hub or not
CONFIG_DEF(flag/log_ooc) // log OOC channel
CONFIG_DEF(flag/log_access) // log login/logout
CONFIG_DEF(flag/log_say) // log client say
CONFIG_DEF(flag/log_admin) // log admin actions
protection = CONFIG_ENTRY_LOCKED
CONFIG_DEF(flag/log_prayer) // log prayers
CONFIG_DEF(flag/log_law) // log lawchanges
CONFIG_DEF(flag/log_game) // log game events
CONFIG_DEF(flag/log_vote) // log voting
CONFIG_DEF(flag/log_whisper) // log client whisper
CONFIG_DEF(flag/log_attack) // log attack messages
CONFIG_DEF(flag/log_emote) // log emotes
CONFIG_DEF(flag/log_adminchat) // log admin chat messages
protection = CONFIG_ENTRY_LOCKED
CONFIG_DEF(flag/log_pda) // log pda messages
CONFIG_DEF(flag/log_twitter) // log certain expliotable parrots and other such fun things in a JSON file of twitter valid phrases.
CONFIG_DEF(flag/log_world_topic) // log all world.Topic() calls
CONFIG_DEF(flag/log_manifest) // log crew manifest to seperate file
CONFIG_DEF(flag/allow_admin_ooccolor) // Allows admins with relevant permissions to have their own ooc colour
CONFIG_DEF(flag/allow_vote_restart) // allow votes to restart
CONFIG_DEF(flag/allow_vote_mode) // allow votes to change mode
CONFIG_DEF(number/vote_delay) // minimum time between voting sessions (deciseconds, 10 minute default)
value = 6000
min_val = 0
CONFIG_DEF(number/vote_period) // length of voting period (deciseconds, default 1 minute)
value = 600
min_val = 0
CONFIG_DEF(flag/default_no_vote) // vote does not default to nochange/norestart
CONFIG_DEF(flag/no_dead_vote) // dead people can't vote
CONFIG_DEF(flag/allow_metadata) // Metadata is supported.
CONFIG_DEF(flag/popup_admin_pm) // adminPMs to non-admins show in a pop-up 'reply' window when set
CONFIG_DEF(number/fps)
value = 20
min_val = 1
max_val = 100 //byond will start crapping out at 50, so this is just ridic
var/sync_validate = FALSE
/datum/config_entry/number/fps/ValidateAndSet(str_val)
. = ..()
if(.)
sync_validate = TRUE
var/datum/config_entry/number/ticklag/TL = config.entries_by_type[/datum/config_entry/number/ticklag]
if(!TL.sync_validate)
TL.ValidateAndSet(10 / value)
sync_validate = FALSE
CONFIG_DEF(number/ticklag)
integer = FALSE
var/sync_validate = FALSE
/datum/config_entry/number/ticklag/New() //ticklag weirdly just mirrors fps
var/datum/config_entry/CE = /datum/config_entry/number/fps
value = 10 / initial(CE.value)
..()
/datum/config_entry/number/ticklag/ValidateAndSet(str_val)
. = text2num(str_val) > 0 && ..()
if(.)
sync_validate = TRUE
var/datum/config_entry/number/fps/FPS = config.entries_by_type[/datum/config_entry/number/fps]
if(!FPS.sync_validate)
FPS.ValidateAndSet(10 / value)
sync_validate = FALSE
CONFIG_DEF(flag/allow_holidays)
CONFIG_DEF(number/tick_limit_mc_init) //SSinitialization throttling
value = TICK_LIMIT_MC_INIT_DEFAULT
min_val = 0 //oranges warned us
integer = FALSE
CONFIG_DEF(flag/admin_legacy_system) //Defines whether the server uses the legacy admin system with admins.txt or the SQL system
protection = CONFIG_ENTRY_LOCKED
CONFIG_DEF(string/hostedby)
CONFIG_DEF(flag/norespawn)
CONFIG_DEF(flag/guest_jobban)
CONFIG_DEF(flag/usewhitelist)
CONFIG_DEF(flag/ban_legacy_system) //Defines whether the server uses the legacy banning system with the files in /data or the SQL system.
protection = CONFIG_ENTRY_LOCKED
CONFIG_DEF(flag/use_age_restriction_for_jobs) //Do jobs use account age restrictions? --requires database
CONFIG_DEF(flag/use_account_age_for_jobs) //Uses the time they made the account for the job restriction stuff. New player joining alerts should be unaffected.
CONFIG_DEF(flag/use_exp_tracking)
CONFIG_DEF(flag/use_exp_restrictions_heads)
CONFIG_DEF(number/use_exp_restrictions_heads_hours)
value = 0
min_val = 0
CONFIG_DEF(flag/use_exp_restrictions_heads_department)
CONFIG_DEF(flag/use_exp_restrictions_other)
CONFIG_DEF(flag/use_exp_restrictions_admin_bypass)
CONFIG_DEF(string/server)
CONFIG_DEF(string/banappeals)
CONFIG_DEF(string/wikiurl)
value = "http://www.tgstation13.org/wiki"
CONFIG_DEF(string/forumurl)
value = "http://tgstation13.org/phpBB/index.php"
CONFIG_DEF(string/rulesurl)
value = "http://www.tgstation13.org/wiki/Rules"
CONFIG_DEF(string/githuburl)
value = "https://www.github.com/tgstation/-tg-station"
CONFIG_DEF(number/githubrepoid)
value = null
min_val = 0
CONFIG_DEF(flag/guest_ban)
CONFIG_DEF(number/id_console_jobslot_delay)
value = 30
min_val = 0
CONFIG_DEF(number/inactivity_period) //time in ds until a player is considered inactive)
value = 3000
min_val = 0
/datum/config_entry/number/inactivity_period/ValidateAndSet(str_val)
. = ..()
if(.)
value *= 10 //documented as seconds in config.txt
CONFIG_DEF(number/afk_period) //time in ds until a player is considered inactive)
value = 3000
min_val = 0
/datum/config_entry/number/afk_period/ValidateAndSet(str_val)
. = ..()
if(.)
value *= 10 //documented as seconds in config.txt
CONFIG_DEF(flag/kick_inactive) //force disconnect for inactive players
CONFIG_DEF(flag/load_jobs_from_txt)
CONFIG_DEF(flag/forbid_singulo_possession)
CONFIG_DEF(flag/automute_on) //enables automuting/spam prevention
CONFIG_DEF(string/panic_server_name)
/datum/config_entry/string/panic_server_name/ValidateAndSet(str_val)
return str_val != "\[Put the name here\]" && ..()
CONFIG_DEF(string/panic_server_address) //Reconnect a player this linked server if this server isn't accepting new players
/datum/config_entry/string/panic_server_address/ValidateAndSet(str_val)
return str_val != "byond://address:port" && ..()
CONFIG_DEF(string/invoke_youtubedl)
protection = CONFIG_ENTRY_LOCKED | CONFIG_ENTRY_HIDDEN
CONFIG_DEF(flag/show_irc_name)
CONFIG_DEF(flag/see_own_notes) //Can players see their own admin notes (read-only)?
CONFIG_DEF(number/note_fresh_days)
value = null
min_val = 0
integer = FALSE
CONFIG_DEF(number/note_stale_days)
value = null
min_val = 0
integer = FALSE
CONFIG_DEF(flag/maprotation)
CONFIG_DEF(number/maprotatechancedelta)
value = 0.75
min_val = 0
max_val = 1
integer = FALSE
CONFIG_DEF(number/soft_popcap)
value = null
min_val = 0
CONFIG_DEF(number/hard_popcap)
value = null
min_val = 0
CONFIG_DEF(number/extreme_popcap)
value = null
min_val = 0
CONFIG_DEF(string/soft_popcap_message)
value = "Be warned that the server is currently serving a high number of users, consider using alternative game servers."
CONFIG_DEF(string/hard_popcap_message)
value = "The server is currently serving a high number of users, You cannot currently join. You may wait for the number of living crew to decline, observe, or find alternative servers."
CONFIG_DEF(string/extreme_popcap_message)
value = "The server is currently serving a high number of users, find alternative servers."
CONFIG_DEF(flag/panic_bunker) // prevents people the server hasn't seen before from connecting
CONFIG_DEF(number/notify_new_player_age) // how long do we notify admins of a new player
min_val = -1
CONFIG_DEF(number/notify_new_player_account_age) // how long do we notify admins of a new byond account
min_val = 0
CONFIG_DEF(flag/irc_first_connection_alert) // do we notify the irc channel when somebody is connecting for the first time?
CONFIG_DEF(flag/check_randomizer)
CONFIG_DEF(string/ipintel_email)
/datum/config_entry/string/ipintel_email/ValidateAndSet(str_val)
return str_val != "ch@nge.me" && ..()
CONFIG_DEF(number/ipintel_rating_bad)
value = 1
integer = FALSE
min_val = 0
max_val = 1
CONFIG_DEF(number/ipintel_save_good)
value = 12
min_val = 0
CONFIG_DEF(number/ipintel_save_bad)
value = 1
min_val = 0
CONFIG_DEF(string/ipintel_domain)
value = "check.getipintel.net"
CONFIG_DEF(flag/aggressive_changelog)
CONFIG_DEF(flag/autoconvert_notes) //if all connecting player's notes should attempt to be converted to the database
protection = CONFIG_ENTRY_LOCKED
CONFIG_DEF(flag/allow_webclient)
CONFIG_DEF(flag/webclient_only_byond_members)
CONFIG_DEF(flag/announce_admin_logout)
CONFIG_DEF(flag/announce_admin_login)
CONFIG_DEF(flag/allow_map_voting)
CONFIG_DEF(flag/generate_minimaps)
CONFIG_DEF(number/client_warn_version)
value = null
min_val = 500
max_val = DM_VERSION - 1
CONFIG_DEF(string/client_warn_message)
value = "Your version of byond may have issues or be blocked from accessing this server in the future."
CONFIG_DEF(flag/client_warn_popup)
CONFIG_DEF(number/client_error_version)
value = null
min_val = 500
max_val = DM_VERSION - 1
CONFIG_DEF(string/client_error_message)
value = "Your version of byond is too old, may have issues, and is blocked from accessing this server."
CONFIG_DEF(number/minute_topic_limit)
value = null
min_val = 0
CONFIG_DEF(number/second_topic_limit)
value = null
min_val = 0
CONFIG_DEF(number/error_cooldown) // The "cooldown" time for each occurrence of a unique error)
value = 600
min_val = 0
CONFIG_DEF(number/error_limit) // How many occurrences before the next will silence them
value = 50
CONFIG_DEF(number/error_silence_time) // How long a unique error will be silenced for
value = 6000
CONFIG_DEF(number/error_msg_delay) // How long to wait between messaging admins about occurrences of a unique error
value = 50
CONFIG_DEF(flag/irc_announce_new_game)
CONFIG_DEF(flag/debug_admin_hrefs)
CONFIG_DEF(number/mc_tick_rate/base_mc_tick_rate)
integer = FALSE
value = 1
CONFIG_DEF(number/mc_tick_rate/high_pop_mc_tick_rate)
integer = FALSE
value = 1.1
CONFIG_DEF(number/mc_tick_rate/high_pop_mc_mode_amount)
value = 65
CONFIG_DEF(number/mc_tick_rate/disable_high_pop_mc_mode_amount)
value = 60
CONFIG_TWEAK(number/mc_tick_rate)
abstract_type = /datum/config_entry/number/mc_tick_rate
CONFIG_TWEAK(number/mc_tick_rate/ValidateAndSet(str_val))
. = ..()
if (.)
Master.UpdateTickRate()
CONFIG_DEF(flag/resume_after_initializations)
CONFIG_TWEAK(flag/resume_after_initializations/ValidateAndSet(str_val))
. = ..()
if(. && Master.current_runlevel)
world.sleep_offline = !value
CONFIG_DEF(number/rounds_until_hard_restart)
value = -1
min_val = 0
CONFIG_DEF(string/default_view)
value = "15x15"
@@ -1,28 +1,26 @@
#define CURRENT_RESIDENT_FILE "dbconfig.txt"
CONFIG_DEF(flag/sql_enabled) // for sql switching
/datum/config_entry/flag/sql_enabled // for sql switching
protection = CONFIG_ENTRY_LOCKED
CONFIG_DEF(string/address)
/datum/config_entry/string/address
value = "localhost"
protection = CONFIG_ENTRY_LOCKED | CONFIG_ENTRY_HIDDEN
CONFIG_DEF(number/port)
/datum/config_entry/number/port
value = 3306
min_val = 0
max_val = 65535
protection = CONFIG_ENTRY_LOCKED | CONFIG_ENTRY_HIDDEN
CONFIG_DEF(string/feedback_database)
/datum/config_entry/string/feedback_database
value = "test"
protection = CONFIG_ENTRY_LOCKED | CONFIG_ENTRY_HIDDEN
CONFIG_DEF(string/feedback_login)
/datum/config_entry/string/feedback_login
value = "root"
protection = CONFIG_ENTRY_LOCKED | CONFIG_ENTRY_HIDDEN
CONFIG_DEF(string/feedback_password)
/datum/config_entry/string/feedback_password
protection = CONFIG_ENTRY_LOCKED | CONFIG_ENTRY_HIDDEN
CONFIG_DEF(string/feedback_tableprefix)
/datum/config_entry/string/feedback_tableprefix
protection = CONFIG_ENTRY_LOCKED | CONFIG_ENTRY_HIDDEN
@@ -1,253 +1,255 @@
#define CURRENT_RESIDENT_FILE "game_options.txt"
/datum/config_entry/number_list/repeated_mode_adjust
CONFIG_DEF(number_list/repeated_mode_adjust)
CONFIG_DEF(keyed_number_list/probability)
/datum/config_entry/keyed_number_list/probability
/datum/config_entry/keyed_number_list/probability/ValidateKeyName(key_name)
return key_name in config.modes
CONFIG_DEF(keyed_number_list/max_pop)
/datum/config_entry/keyed_number_list/max_pop
/datum/config_entry/keyed_number_list/max_pop/ValidateKeyName(key_name)
return key_name in config.modes
CONFIG_DEF(keyed_number_list/min_pop)
/datum/config_entry/keyed_number_list/min_pop
/datum/config_entry/keyed_number_list/min_pop/ValidateKeyName(key_name)
return key_name in config.modes
CONFIG_DEF(keyed_flag_list/continuous) // which roundtypes continue if all antagonists die
/datum/config_entry/keyed_flag_list/continuous // which roundtypes continue if all antagonists die
/datum/config_entry/keyed_flag_list/continuous/ValidateKeyName(key_name)
return key_name in config.modes
CONFIG_DEF(keyed_flag_list/midround_antag) // which roundtypes use the midround antagonist system
/datum/config_entry/keyed_flag_list/midround_antag // which roundtypes use the midround antagonist system
/datum/config_entry/keyed_flag_list/midround_antag/ValidateKeyName(key_name)
return key_name in config.modes
CONFIG_DEF(keyed_string_list/policy)
/datum/config_entry/keyed_string_list/policy
CONFIG_DEF(number/damage_multiplier)
/datum/config_entry/number/damage_multiplier
value = 1
integer = FALSE
CONFIG_DEF(number/minimal_access_threshold) //If the number of players is larger than this threshold, minimal access will be turned on.
/datum/config_entry/number/minimal_access_threshold //If the number of players is larger than this threshold, minimal access will be turned on.
min_val = 0
CONFIG_DEF(flag/jobs_have_minimal_access) //determines whether jobs use minimal access or expanded access.
/datum/config_entry/flag/jobs_have_minimal_access //determines whether jobs use minimal access or expanded access.
CONFIG_DEF(flag/assistants_have_maint_access)
/datum/config_entry/flag/assistants_have_maint_access
CONFIG_DEF(flag/security_has_maint_access)
/datum/config_entry/flag/security_has_maint_access
CONFIG_DEF(flag/everyone_has_maint_access)
/datum/config_entry/flag/everyone_has_maint_access
CONFIG_DEF(flag/sec_start_brig) //makes sec start in brig instead of dept sec posts
/datum/config_entry/flag/sec_start_brig //makes sec start in brig instead of dept sec posts
CONFIG_DEF(flag/force_random_names)
/datum/config_entry/flag/force_random_names
CONFIG_DEF(flag/humans_need_surnames)
/datum/config_entry/flag/humans_need_surnames
CONFIG_DEF(flag/allow_ai) // allow ai job
/datum/config_entry/flag/allow_ai // allow ai job
CONFIG_DEF(flag/disable_secborg) // disallow secborg module to be chosen.
/datum/config_entry/flag/disable_secborg // disallow secborg module to be chosen.
CONFIG_DEF(flag/disable_peaceborg)
/datum/config_entry/flag/disable_peaceborg
CONFIG_DEF(number/traitor_scaling_coeff) //how much does the amount of players get divided by to determine traitors
/datum/config_entry/number/traitor_scaling_coeff //how much does the amount of players get divided by to determine traitors
value = 6
min_val = 1
CONFIG_DEF(number/brother_scaling_coeff) //how many players per brother team
/datum/config_entry/number/brother_scaling_coeff //how many players per brother team
value = 25
min_val = 1
CONFIG_DEF(number/changeling_scaling_coeff) //how much does the amount of players get divided by to determine changelings
/datum/config_entry/number/changeling_scaling_coeff //how much does the amount of players get divided by to determine changelings
value = 6
min_val = 1
CONFIG_DEF(number/security_scaling_coeff) //how much does the amount of players get divided by to determine open security officer positions
/datum/config_entry/number/security_scaling_coeff //how much does the amount of players get divided by to determine open security officer positions
value = 8
min_val = 1
CONFIG_DEF(number/abductor_scaling_coeff) //how many players per abductor team
/datum/config_entry/number/abductor_scaling_coeff //how many players per abductor team
value = 15
min_val = 1
CONFIG_DEF(number/traitor_objectives_amount)
/datum/config_entry/number/traitor_objectives_amount
value = 2
min_val = 0
CONFIG_DEF(number/brother_objectives_amount)
/datum/config_entry/number/brother_objectives_amount
value = 2
min_val = 0
CONFIG_DEF(flag/reactionary_explosions) //If we use reactionary explosions, explosions that react to walls and doors
/datum/config_entry/flag/reactionary_explosions //If we use reactionary explosions, explosions that react to walls and doors
CONFIG_DEF(flag/protect_roles_from_antagonist) //If security and such can be traitor/cult/other
/datum/config_entry/flag/protect_roles_from_antagonist //If security and such can be traitor/cult/other
CONFIG_DEF(flag/protect_assistant_from_antagonist) //If assistants can be traitor/cult/other
/datum/config_entry/flag/protect_assistant_from_antagonist //If assistants can be traitor/cult/other
CONFIG_DEF(flag/enforce_human_authority) //If non-human species are barred from joining as a head of staff
/datum/config_entry/flag/enforce_human_authority //If non-human species are barred from joining as a head of staff
CONFIG_DEF(flag/allow_latejoin_antagonists) // If late-joining players can be traitor/changeling
/datum/config_entry/flag/allow_latejoin_antagonists // If late-joining players can be traitor/changeling
CONFIG_DEF(number/midround_antag_time_check) // How late (in minutes) you want the midround antag system to stay on, setting this to 0 will disable the system
/datum/config_entry/number/midround_antag_time_check // How late (in minutes you want the midround antag system to stay on, setting this to 0 will disable the system)
value = 60
min_val = 0
CONFIG_DEF(number/midround_antag_life_check) // A ratio of how many people need to be alive in order for the round not to immediately end in midround antagonist
/datum/config_entry/number/midround_antag_life_check // A ratio of how many people need to be alive in order for the round not to immediately end in midround antagonist
value = 0.7
integer = FALSE
min_val = 0
max_val = 1
CONFIG_DEF(number/shuttle_refuel_delay)
/datum/config_entry/number/shuttle_refuel_delay
value = 12000
min_val = 0
CONFIG_DEF(flag/show_game_type_odds) //if set this allows players to see the odds of each roundtype on the get revision screen
/datum/config_entry/flag/show_game_type_odds //if set this allows players to see the odds of each roundtype on the get revision screen
CONFIG_DEF(keyed_flag_list/roundstart_races) //races you can play as from the get go.
/datum/config_entry/keyed_flag_list/roundstart_races //races you can play as from the get go.
CONFIG_DEF(flag/join_with_mutant_humans) //players can pick mutant bodyparts for humans before joining the game
/datum/config_entry/flag/join_with_mutant_humans //players can pick mutant bodyparts for humans before joining the game
CONFIG_DEF(flag/no_summon_guns) //No
/datum/config_entry/flag/no_summon_guns //No
CONFIG_DEF(flag/no_summon_magic) //Fun
/datum/config_entry/flag/no_summon_magic //Fun
CONFIG_DEF(flag/no_summon_events) //Allowed
/datum/config_entry/flag/no_summon_events //Allowed
CONFIG_DEF(flag/no_intercept_report) //Whether or not to send a communications intercept report roundstart. This may be overriden by gamemodes.
/datum/config_entry/flag/no_intercept_report //Whether or not to send a communications intercept report roundstart. This may be overriden by gamemodes.
CONFIG_DEF(number/arrivals_shuttle_dock_window) //Time from when a player late joins on the arrivals shuttle to when the shuttle docks on the station
/datum/config_entry/number/arrivals_shuttle_dock_window //Time from when a player late joins on the arrivals shuttle to when the shuttle docks on the station
value = 55
min_val = 30
CONFIG_DEF(flag/arrivals_shuttle_require_undocked) //Require the arrivals shuttle to be undocked before latejoiners can join
/datum/config_entry/flag/arrivals_shuttle_require_undocked //Require the arrivals shuttle to be undocked before latejoiners can join
CONFIG_DEF(flag/arrivals_shuttle_require_safe_latejoin) //Require the arrivals shuttle to be operational in order for latejoiners to join
/datum/config_entry/flag/arrivals_shuttle_require_safe_latejoin //Require the arrivals shuttle to be operational in order for latejoiners to join
CONFIG_DEF(string/alert_green)
/datum/config_entry/string/alert_green
value = "All threats to the station have passed. Security may not have weapons visible, privacy laws are once again fully enforced."
CONFIG_DEF(string/alert_blue_upto)
/datum/config_entry/string/alert_blue_upto
value = "The station has received reliable information about possible hostile activity on the station. Security staff may have weapons visible, random searches are permitted."
CONFIG_DEF(string/alert_blue_downto)
/datum/config_entry/string/alert_blue_downto
value = "The immediate threat has passed. Security may no longer have weapons drawn at all times, but may continue to have them visible. Random searches are still allowed."
CONFIG_DEF(string/alert_red_upto)
/datum/config_entry/string/alert_red_upto
value = "There is an immediate serious threat to the station. Security may have weapons unholstered at all times. Random searches are allowed and advised."
CONFIG_DEF(string/alert_red_downto)
/datum/config_entry/string/alert_red_downto
value = "The station's destruction has been averted. There is still however an immediate serious threat to the station. Security may have weapons unholstered at all times, random searches are allowed and advised."
CONFIG_DEF(string/alert_delta)
/datum/config_entry/string/alert_delta
value = "Destruction of the station is imminent. All crew are instructed to obey all instructions given by heads of staff. Any violations of these orders can be punished by death. This is not a drill."
CONFIG_DEF(flag/revival_pod_plants)
/datum/config_entry/flag/revival_pod_plants
CONFIG_DEF(flag/revival_cloning)
/datum/config_entry/flag/revival_cloning
CONFIG_DEF(number/revival_brain_life)
/datum/config_entry/number/revival_brain_life
value = -1
min_val = -1
CONFIG_DEF(flag/rename_cyborg)
/datum/config_entry/flag/rename_cyborg
CONFIG_DEF(flag/ooc_during_round)
/datum/config_entry/flag/ooc_during_round
CONFIG_DEF(flag/emojis)
/datum/config_entry/flag/emojis
CONFIG_DEF(number/run_delay) //Used for modifying movement speed for mobs.
/datum/config_entry/number/run_delay //Used for modifying movement speed for mobs.
var/static/value_cache = 0
CONFIG_TWEAK(number/run_delay/ValidateAndSet())
/datum/config_entry/number/run_delay/ValidateAndSet()
. = ..()
if(.)
value_cache = value
CONFIG_DEF(number/walk_delay)
/datum/config_entry/number/walk_delay
var/static/value_cache = 0
CONFIG_TWEAK(number/walk_delay/ValidateAndSet())
/datum/config_entry/number/walk_delay/ValidateAndSet()
. = ..()
if(.)
value_cache = value
CONFIG_DEF(number/human_delay) //Mob specific modifiers. NOTE: These will affect different mob types in different ways
CONFIG_DEF(number/robot_delay)
CONFIG_DEF(number/monkey_delay)
CONFIG_DEF(number/alien_delay)
CONFIG_DEF(number/slime_delay)
CONFIG_DEF(number/animal_delay)
/datum/config_entry/number/human_delay //Mob specific modifiers. NOTE: These will affect different mob types in different ways
/datum/config_entry/number/robot_delay
/datum/config_entry/number/monkey_delay
/datum/config_entry/number/alien_delay
/datum/config_entry/number/slime_delay
/datum/config_entry/number/animal_delay
CONFIG_DEF(number/gateway_delay) //How long the gateway takes before it activates. Default is half an hour.
/datum/config_entry/number/gateway_delay //How long the gateway takes before it activates. Default is half an hour.
value = 18000
min_val = 0
CONFIG_DEF(flag/ghost_interaction)
/datum/config_entry/flag/ghost_interaction
CONFIG_DEF(flag/silent_ai)
CONFIG_DEF(flag/silent_borg)
/datum/config_entry/flag/silent_ai
/datum/config_entry/flag/silent_borg
CONFIG_DEF(flag/sandbox_autoclose) // close the sandbox panel after spawning an item, potentially reducing griff
/datum/config_entry/flag/sandbox_autoclose // close the sandbox panel after spawning an item, potentially reducing griff
CONFIG_DEF(number/default_laws) //Controls what laws the AI spawns with.
/datum/config_entry/number/default_laws //Controls what laws the AI spawns with.
value = 0
min_val = 0
max_val = 3
CONFIG_DEF(number/silicon_max_law_amount)
/datum/config_entry/number/silicon_max_law_amount
value = 12
min_val = 0
CONFIG_DEF(keyed_flag_list/random_laws)
/datum/config_entry/keyed_flag_list/random_laws
CONFIG_DEF(keyed_number_list/law_weight)
/datum/config_entry/keyed_number_list/law_weight
splitter = ","
CONFIG_DEF(number/assistant_cap)
/datum/config_entry/number/assistant_cap
value = -1
min_val = -1
CONFIG_DEF(flag/starlight)
CONFIG_DEF(flag/grey_assistants)
/datum/config_entry/flag/starlight
/datum/config_entry/flag/grey_assistants
CONFIG_DEF(number/lavaland_budget)
/datum/config_entry/number/lavaland_budget
value = 60
min_val = 0
CONFIG_DEF(number/space_budget)
/datum/config_entry/number/space_budget
value = 16
min_val = 0
CONFIG_DEF(flag/allow_random_events) // Enables random events mid-round when set
/datum/config_entry/flag/allow_random_events // Enables random events mid-round when set
CONFIG_DEF(number/events_min_time_mul) // Multipliers for random events minimal starting time and minimal players amounts
/datum/config_entry/number/events_min_time_mul // Multipliers for random events minimal starting time and minimal players amounts
value = 1
min_val = 0
integer = FALSE
CONFIG_DEF(number/events_min_players_mul)
/datum/config_entry/number/events_min_players_mul
value = 1
min_val = 0
integer = FALSE
CONFIG_DEF(number/mice_roundstart)
/datum/config_entry/number/mice_roundstart
value = 10
min_val = 0
CONFIG_DEF(number/bombcap)
/datum/config_entry/number/bombcap
value = 14
min_val = 4
CONFIG_DEF(flag/allow_crew_objectives)
CONFIG_DEF(flag/allow_miscreants)
CONFIG_DEF(flag/allow_extended_miscreants)
//Cit changes - Adds config options for crew objectives and miscreants
/datum/config_entry/flag/allow_crew_objectives
/datum/config_entry/flag/allow_miscreants
/datum/config_entry/flag/allow_extended_miscreants
//End of Cit changes
/datum/config_entry/number/bombcap/ValidateAndSet(str_val)
. = ..()
@@ -258,9 +260,9 @@ CONFIG_DEF(flag/allow_extended_miscreants)
GLOB.MAX_EX_FLASH_RANGE = value
GLOB.MAX_EX_FLAME_RANGE = value
CONFIG_DEF(number/emergency_shuttle_autocall_threshold)
/datum/config_entry/number/emergency_shuttle_autocall_threshold
min_val = 0
max_val = 1
integer = FALSE
CONFIG_DEF(flag/ic_printing)
/datum/config_entry/flag/ic_printing
@@ -0,0 +1,388 @@
/datum/config_entry/flag/autoadmin // if autoadmin is enabled
protection = CONFIG_ENTRY_LOCKED
/datum/config_entry/string/autoadmin_rank // the rank for autoadmins
value = "Game Master"
protection = CONFIG_ENTRY_LOCKED
/datum/config_entry/string/servername // server name (the name of the game window)
/datum/config_entry/string/serversqlname // short form server name used for the DB
/datum/config_entry/string/stationname // station name (the name of the station in-game)
/datum/config_entry/number/lobby_countdown // In between round countdown.
value = 120
min_val = 0
/datum/config_entry/number/round_end_countdown // Post round murder death kill countdown
value = 25
min_val = 0
/datum/config_entry/flag/hub // if the game appears on the hub or not
/datum/config_entry/flag/log_ooc // log OOC channel
/datum/config_entry/flag/log_access // log login/logout
/datum/config_entry/flag/log_say // log client say
/datum/config_entry/flag/log_admin // log admin actions
protection = CONFIG_ENTRY_LOCKED
/datum/config_entry/flag/log_prayer // log prayers
/datum/config_entry/flag/log_law // log lawchanges
/datum/config_entry/flag/log_game // log game events
/datum/config_entry/flag/log_vote // log voting
/datum/config_entry/flag/log_whisper // log client whisper
/datum/config_entry/flag/log_attack // log attack messages
/datum/config_entry/flag/log_emote // log emotes
/datum/config_entry/flag/log_adminchat // log admin chat messages
protection = CONFIG_ENTRY_LOCKED
/datum/config_entry/flag/log_pda // log pda messages
/datum/config_entry/flag/log_twitter // log certain expliotable parrots and other such fun things in a JSON file of twitter valid phrases.
/datum/config_entry/flag/log_world_topic // log all world.Topic() calls
/datum/config_entry/flag/log_manifest // log crew manifest to seperate file
/datum/config_entry/flag/allow_admin_ooccolor // Allows admins with relevant permissions to have their own ooc colour
/datum/config_entry/flag/allow_vote_restart // allow votes to restart
/datum/config_entry/flag/allow_vote_mode // allow votes to change mode
/datum/config_entry/number/vote_delay // minimum time between voting sessions (deciseconds, 10 minute default)
value = 6000
min_val = 0
/datum/config_entry/number/vote_period // length of voting period (deciseconds, default 1 minute)
value = 600
min_val = 0
/datum/config_entry/flag/default_no_vote // vote does not default to nochange/norestart
/datum/config_entry/flag/no_dead_vote // dead people can't vote
/datum/config_entry/flag/allow_metadata // Metadata is supported.
/datum/config_entry/flag/popup_admin_pm // adminPMs to non-admins show in a pop-up 'reply' window when set
/datum/config_entry/number/fps
value = 20
min_val = 1
max_val = 100 //byond will start crapping out at 50, so this is just ridic
var/sync_validate = FALSE
/datum/config_entry/number/fps/ValidateAndSet(str_val)
. = ..()
if(.)
sync_validate = TRUE
var/datum/config_entry/number/ticklag/TL = config.entries_by_type[/datum/config_entry/number/ticklag]
if(!TL.sync_validate)
TL.ValidateAndSet(10 / value)
sync_validate = FALSE
/datum/config_entry/number/ticklag
integer = FALSE
var/sync_validate = FALSE
/datum/config_entry/number/ticklag/New() //ticklag weirdly just mirrors fps
var/datum/config_entry/CE = /datum/config_entry/number/fps
value = 10 / initial(CE.value)
..()
/datum/config_entry/number/ticklag/ValidateAndSet(str_val)
. = text2num(str_val) > 0 && ..()
if(.)
sync_validate = TRUE
var/datum/config_entry/number/fps/FPS = config.entries_by_type[/datum/config_entry/number/fps]
if(!FPS.sync_validate)
FPS.ValidateAndSet(10 / value)
sync_validate = FALSE
/datum/config_entry/flag/allow_holidays
/datum/config_entry/number/tick_limit_mc_init //SSinitialization throttling
value = TICK_LIMIT_MC_INIT_DEFAULT
min_val = 0 //oranges warned us
integer = FALSE
/datum/config_entry/flag/admin_legacy_system //Defines whether the server uses the legacy admin system with admins.txt or the SQL system
protection = CONFIG_ENTRY_LOCKED
/datum/config_entry/string/hostedby
/datum/config_entry/flag/norespawn
/datum/config_entry/flag/guest_jobban
/datum/config_entry/flag/usewhitelist
/datum/config_entry/flag/ban_legacy_system //Defines whether the server uses the legacy banning system with the files in /data or the SQL system.
protection = CONFIG_ENTRY_LOCKED
/datum/config_entry/flag/use_age_restriction_for_jobs //Do jobs use account age restrictions? --requires database
/datum/config_entry/flag/use_account_age_for_jobs //Uses the time they made the account for the job restriction stuff. New player joining alerts should be unaffected.
/datum/config_entry/flag/use_exp_tracking
/datum/config_entry/flag/use_exp_restrictions_heads
/datum/config_entry/number/use_exp_restrictions_heads_hours
value = 0
min_val = 0
/datum/config_entry/flag/use_exp_restrictions_heads_department
/datum/config_entry/flag/use_exp_restrictions_other
/datum/config_entry/flag/use_exp_restrictions_admin_bypass
/datum/config_entry/string/server
/datum/config_entry/string/banappeals
/datum/config_entry/string/wikiurl
value = "http://www.tgstation13.org/wiki"
/datum/config_entry/string/forumurl
value = "http://tgstation13.org/phpBB/index.php"
/datum/config_entry/string/rulesurl
value = "http://www.tgstation13.org/wiki/Rules"
/datum/config_entry/string/githuburl
value = "https://www.github.com/tgstation/-tg-station"
/datum/config_entry/number/githubrepoid
value = null
min_val = 0
/datum/config_entry/flag/guest_ban
/datum/config_entry/number/id_console_jobslot_delay
value = 30
min_val = 0
/datum/config_entry/number/inactivity_period //time in ds until a player is considered inactive
value = 3000
min_val = 0
/datum/config_entry/number/inactivity_period/ValidateAndSet(str_val)
. = ..()
if(.)
value *= 10 //documented as seconds in config.txt
/datum/config_entry/number/afk_period //time in ds until a player is considered inactive
value = 3000
min_val = 0
/datum/config_entry/number/afk_period/ValidateAndSet(str_val)
. = ..()
if(.)
value *= 10 //documented as seconds in config.txt
/datum/config_entry/flag/kick_inactive //force disconnect for inactive players
/datum/config_entry/flag/load_jobs_from_txt
/datum/config_entry/flag/forbid_singulo_possession
/datum/config_entry/flag/automute_on //enables automuting/spam prevention
/datum/config_entry/string/panic_server_name
/datum/config_entry/string/panic_server_name/ValidateAndSet(str_val)
return str_val != "\[Put the name here\]" && ..()
/datum/config_entry/string/panic_server_address //Reconnect a player this linked server if this server isn't accepting new players
/datum/config_entry/string/panic_server_address/ValidateAndSet(str_val)
return str_val != "byond://address:port" && ..()
/datum/config_entry/string/invoke_youtubedl
protection = CONFIG_ENTRY_LOCKED | CONFIG_ENTRY_HIDDEN
/datum/config_entry/flag/show_irc_name
/datum/config_entry/flag/see_own_notes //Can players see their own admin notes
/datum/config_entry/number/note_fresh_days
value = null
min_val = 0
integer = FALSE
/datum/config_entry/number/note_stale_days
value = null
min_val = 0
integer = FALSE
/datum/config_entry/flag/maprotation
/datum/config_entry/number/maprotatechancedelta
value = 0.75
min_val = 0
max_val = 1
integer = FALSE
/datum/config_entry/number/soft_popcap
value = null
min_val = 0
/datum/config_entry/number/hard_popcap
value = null
min_val = 0
/datum/config_entry/number/extreme_popcap
value = null
min_val = 0
/datum/config_entry/string/soft_popcap_message
value = "Be warned that the server is currently serving a high number of users, consider using alternative game servers."
/datum/config_entry/string/hard_popcap_message
value = "The server is currently serving a high number of users, You cannot currently join. You may wait for the number of living crew to decline, observe, or find alternative servers."
/datum/config_entry/string/extreme_popcap_message
value = "The server is currently serving a high number of users, find alternative servers."
/datum/config_entry/flag/panic_bunker // prevents people the server hasn't seen before from connecting
/datum/config_entry/number/notify_new_player_age // how long do we notify admins of a new player
min_val = -1
/datum/config_entry/number/notify_new_player_account_age // how long do we notify admins of a new byond account
min_val = 0
/datum/config_entry/flag/irc_first_connection_alert // do we notify the irc channel when somebody is connecting for the first time?
/datum/config_entry/flag/check_randomizer
/datum/config_entry/string/ipintel_email
/datum/config_entry/string/ipintel_email/ValidateAndSet(str_val)
return str_val != "ch@nge.me" && ..()
/datum/config_entry/number/ipintel_rating_bad
value = 1
integer = FALSE
min_val = 0
max_val = 1
/datum/config_entry/number/ipintel_save_good
value = 12
min_val = 0
/datum/config_entry/number/ipintel_save_bad
value = 1
min_val = 0
/datum/config_entry/string/ipintel_domain
value = "check.getipintel.net"
/datum/config_entry/flag/aggressive_changelog
/datum/config_entry/flag/autoconvert_notes //if all connecting player's notes should attempt to be converted to the database
protection = CONFIG_ENTRY_LOCKED
/datum/config_entry/flag/allow_webclient
/datum/config_entry/flag/webclient_only_byond_members
/datum/config_entry/flag/announce_admin_logout
/datum/config_entry/flag/announce_admin_login
/datum/config_entry/flag/allow_map_voting
/datum/config_entry/flag/generate_minimaps
/datum/config_entry/number/client_warn_version
value = null
min_val = 500
max_val = DM_VERSION - 1
/datum/config_entry/string/client_warn_message
value = "Your version of byond may have issues or be blocked from accessing this server in the future."
/datum/config_entry/flag/client_warn_popup
/datum/config_entry/number/client_error_version
value = null
min_val = 500
max_val = DM_VERSION - 1
/datum/config_entry/string/client_error_message
value = "Your version of byond is too old, may have issues, and is blocked from accessing this server."
/datum/config_entry/number/minute_topic_limit
value = null
min_val = 0
/datum/config_entry/number/second_topic_limit
value = null
min_val = 0
/datum/config_entry/number/error_cooldown // The "cooldown" time for each occurrence of a unique error
value = 600
min_val = 0
/datum/config_entry/number/error_limit // How many occurrences before the next will silence them
value = 50
/datum/config_entry/number/error_silence_time // How long a unique error will be silenced for
value = 6000
/datum/config_entry/number/error_msg_delay // How long to wait between messaging admins about occurrences of a unique error
value = 50
/datum/config_entry/flag/irc_announce_new_game
/datum/config_entry/flag/debug_admin_hrefs
/datum/config_entry/number/mc_tick_rate/base_mc_tick_rate
integer = FALSE
value = 1
/datum/config_entry/number/mc_tick_rate/high_pop_mc_tick_rate
integer = FALSE
value = 1.1
/datum/config_entry/number/mc_tick_rate/high_pop_mc_mode_amount
value = 65
/datum/config_entry/number/mc_tick_rate/disable_high_pop_mc_mode_amount
value = 60
/datum/config_entry/number/mc_tick_rate
abstract_type = /datum/config_entry/number/mc_tick_rate
/datum/config_entry/number/mc_tick_rate/ValidateAndSet(str_val)
. = ..()
if (.)
Master.UpdateTickRate()
/datum/config_entry/flag/resume_after_initializations
/datum/config_entry/flag/resume_after_initializations/ValidateAndSet(str_val)
. = ..()
if(. && Master.current_runlevel)
world.sleep_offline = !value
/datum/config_entry/number/rounds_until_hard_restart
value = -1
min_val = 0
/datum/config_entry/string/default_view
value = "15x15"
+1 -1
View File
@@ -301,7 +301,7 @@ GLOBAL_REAL(Master, /datum/controller/master) = new
continue
//Byond resumed us late. assume it might have to do the same next tick
if (last_run + Ceiling(world.tick_lag * (processing * sleep_delta), world.tick_lag) < world.time)
if (last_run + CEILING(world.tick_lag * (processing * sleep_delta), world.tick_lag) < world.time)
sleep_delta += 1
sleep_delta = MC_AVERAGE_FAST(sleep_delta, 1) //decay sleep_delta
+3
View File
@@ -8,6 +8,8 @@
var/flags = 0 //see MC.dm in __DEFINES Most flags must be set on world start to take full effect. (You can also restart the mc to force them to process again)
var/initialized = FALSE //set to TRUE after it has been initialized, will obviously never be set if the subsystem doesn't initialize
//set to 0 to prevent fire() calls, mostly for admin use or subsystems that may be resumed later
// use the SS_NO_FIRE flag instead for systems that never fire to keep it from even being added to the list
var/can_fire = TRUE
@@ -156,6 +158,7 @@
//used to initialize the subsystem AFTER the map has loaded
/datum/controller/subsystem/Initialize(start_timeofday)
initialized = TRUE
var/time = (REALTIMEOFDAY - start_timeofday) / 10
var/msg = "Initialized [name] subsystem within [time] second[time == 1 ? "" : "s"]!"
to_chat(world, "<span class='boldannounce'>[msg]</span>")
-1
View File
@@ -8,7 +8,6 @@ SUBSYSTEM_DEF(atoms)
init_order = INIT_ORDER_ATOMS
flags = SS_NO_FIRE
var/initialized = INITIALIZATION_INSSATOMS
var/old_initialized
var/list/late_loaders
+12
View File
@@ -0,0 +1,12 @@
SUBSYSTEM_DEF(input)
name = "Input"
wait = 1 //SS_TICKER means this runs every tick
flags = SS_TICKER | SS_NO_INIT
priority = 1000
runlevels = RUNLEVELS_DEFAULT | RUNLEVEL_LOBBY
/datum/controller/subsystem/input/fire()
var/list/clients = GLOB.clients // Let's sing the list cache song
for(var/i in 1 to clients.len)
var/client/C = clients[i]
C.keyLoop()
-2
View File
@@ -8,8 +8,6 @@ SUBSYSTEM_DEF(lighting)
init_order = INIT_ORDER_LIGHTING
flags = SS_TICKER
var/initialized = FALSE
/datum/controller/subsystem/lighting/stat_entry()
..("L:[GLOB.lighting_update_lights.len]|C:[GLOB.lighting_update_corners.len]|O:[GLOB.lighting_update_objects.len]")
+5 -1
View File
@@ -1,14 +1,18 @@
SUBSYSTEM_DEF(mobs)
name = "Mobs"
priority = 100
flags = SS_KEEP_TIMING|SS_NO_INIT
flags = SS_KEEP_TIMING
runlevels = RUNLEVEL_GAME | RUNLEVEL_POSTGAME
var/list/currentrun = list()
var/static/list/clients_by_zlevel[][]
/datum/controller/subsystem/mobs/stat_entry()
..("P:[GLOB.mob_living_list.len]")
/datum/controller/subsystem/mobs/Initialize(start_timeofday)
clients_by_zlevel = new /list(world.maxz,0)
return ..()
/datum/controller/subsystem/mobs/fire(resumed = 0)
var/seconds = wait * 0.1
-1
View File
@@ -10,7 +10,6 @@ SUBSYSTEM_DEF(overlays)
var/list/stats
var/list/overlay_icon_state_caches
var/list/overlay_icon_cache
var/initialized = FALSE
/datum/controller/subsystem/overlays/PreInit()
overlay_icon_state_caches = list()
@@ -44,10 +44,20 @@ PROCESSING_SUBSYSTEM_DEF(circuit)
circuit_fabricator_recipe_list["Assemblies"] = list(
/obj/item/device/electronic_assembly,
/obj/item/device/electronic_assembly/medium,
/obj/item/device/electronic_assembly/large,
/obj/item/device/electronic_assembly/drone
/obj/item/device/electronic_assembly/default,
/obj/item/device/electronic_assembly/calc,
/obj/item/device/electronic_assembly/clam,
/obj/item/device/electronic_assembly/simple,
/obj/item/device/electronic_assembly/medium/default,
/obj/item/device/electronic_assembly/medium/box,
/obj/item/device/electronic_assembly/medium/clam,
/obj/item/device/electronic_assembly/medium/medical,
/obj/item/device/electronic_assembly/large/default,
/obj/item/device/electronic_assembly/large/scope,
/obj/item/device/electronic_assembly/large/terminal,
/obj/item/device/electronic_assembly/large/arm,
/obj/item/device/electronic_assembly/drone/default,
/obj/item/device/electronic_assembly/drone/arms
///obj/item/weapon/implant/integrated_circuit
)
+75
View File
@@ -0,0 +1,75 @@
SUBSYSTEM_DEF(research)
name = "Research"
flags = SS_KEEP_TIMING
priority = 15 //My powergame is priority.
wait = 10
init_order = INIT_ORDER_RESEARCH
var/list/invalid_design_ids = list() //associative id = number of times
var/list/invalid_node_ids = list() //associative id = number of times
var/list/invalid_node_boost = list() //associative id = error message
var/list/obj/machinery/rnd/server/servers = list()
var/datum/techweb/science/science_tech
var/datum/techweb/admin/admin_tech
var/list/techweb_nodes = list() //associative id = node datum
var/list/techweb_categories = list() //category name = list(node.id = node)
var/list/techweb_designs = list() //associative id = node datum
var/list/techweb_nodes_starting = list() //associative id = node datum
var/list/techweb_boost_items = list() //associative double-layer path = list(id = point_discount)
var/list/techweb_nodes_hidden = list() //Nodes that should be hidden by default.
var/list/techweb_point_items = list() //path = value
var/list/errored_datums = list()
//----------------------------------------------
var/single_server_income = 40.7
var/multiserver_calculation = FALSE
var/last_income = 0
//^^^^^^^^ ALL OF THESE ARE PER SECOND! ^^^^^^^^
//Aiming for 1.5 hours to max R&D
//[88nodes * 5000points/node] / [1.5hr * 90min/hr * 60s/min]
//Around 450000 points max???
var/bomb_research_point_scaling = 1800
/datum/controller/subsystem/research/Initialize()
initialize_all_techweb_designs()
initialize_all_techweb_nodes()
science_tech = new /datum/techweb/science
admin_tech = new /datum/techweb/admin
autosort_categories()
return ..()
/datum/controller/subsystem/research/fire()
handle_research_income()
/datum/controller/subsystem/research/proc/handle_research_income()
var/bitcoins = 0
if(multiserver_calculation)
var/eff = calculate_server_coefficient()
for(var/obj/machinery/rnd/server/miner in servers)
bitcoins += (miner.mine() * eff) //SLAVE AWAY, SLAVE.
else
for(var/obj/machinery/rnd/server/miner in servers)
if(miner.working)
bitcoins = single_server_income
break //Just need one to work.
var/income_time_difference = world.time - last_income
bitcoins *= income_time_difference / 10
science_tech.research_points += bitcoins
last_income = world.time
/datum/controller/subsystem/research/proc/calculate_server_coefficient() //Diminishing returns.
var/amt = servers.len
if(!amt)
return 0
var/coeff = 100
coeff = sqrt(coeff / amt)
return coeff
/datum/controller/subsystem/research/proc/autosort_categories()
for(var/i in techweb_nodes)
var/datum/techweb_node/I = techweb_nodes[i]
if(techweb_categories[I.category])
techweb_categories[I.category][I.id] = I
else
techweb_categories[I.category] = list(I.id = I)
+3
View File
@@ -307,6 +307,9 @@ SUBSYSTEM_DEF(shuttle)
return 1
/datum/controller/subsystem/shuttle/proc/autoEvac()
if (!SSticker.IsRoundInProgress())
return
var/callShuttle = 1
for(var/thing in GLOB.shuttle_caller_list)
+1 -1
View File
@@ -80,7 +80,7 @@ SUBSYSTEM_DEF(throwing)
last_move = world.time
//calculate how many tiles to move, making up for any missed ticks.
var/tilestomove = Ceiling(min(((((world.time+world.tick_lag) - start_time + delayed_time) * speed) - (dist_travelled ? dist_travelled : -1)), speed*MAX_TICKS_TO_MAKE_UP) * (world.tick_lag * SSthrowing.wait))
var/tilestomove = CEILING(min(((((world.time+world.tick_lag) - start_time + delayed_time) * speed) - (dist_travelled ? dist_travelled : -1)), speed*MAX_TICKS_TO_MAKE_UP) * (world.tick_lag * SSthrowing.wait), 1)
while (tilestomove-- > 0)
if ((dist_travelled >= maxrange || AM.loc == target_turf) && AM.has_gravity(AM.loc))
finalize()
+1 -1
View File
@@ -165,7 +165,7 @@ SUBSYSTEM_DEF(vote)
var/admin = FALSE
var/ckey = ckey(initiator_key)
if((GLOB.admin_datums[ckey]) || (ckey in GLOB.deadmins))
if(GLOB.admin_datums[ckey])
admin = TRUE
if(next_allowed_time > world.time && !admin)
+16 -16
View File
@@ -12,7 +12,7 @@
name = "Nuclear Operative"
roundend_category = "syndicate operatives" //just in case
job_rank = ROLE_OPERATIVE
var/datum/objective_team/nuclear/nuke_team
var/datum/team/nuclear/nuke_team
var/always_new_team = FALSE //If not assigned a team by default ops will try to join existing ones, set this to TRUE to always create new team.
var/send_to_spawnpoint = TRUE //Should the user be moved to default spawnpoint.
var/nukeop_outfit = /datum/outfit/syndicate
@@ -39,7 +39,7 @@
if(!ishuman(owner.current))
return
var/mob/living/carbon/human/H = owner.current
H.set_species(/datum/species/human) //Plasamen burn up otherwise, and lizards are vulnerable to asimov AIs
H.equipOutfit(nukeop_outfit)
@@ -103,14 +103,14 @@
/datum/antagonist/nukeop/leader/move_to_spawnpoint()
owner.current.forceMove(pick(GLOB.nukeop_leader_start))
/datum/antagonist/nukeop/create_team(datum/objective_team/nuclear/new_team)
/datum/antagonist/nukeop/create_team(datum/team/nuclear/new_team)
if(!new_team)
if(!always_new_team)
for(var/datum/antagonist/nukeop/N in GLOB.antagonists)
if(N.nuke_team)
nuke_team = N.nuke_team
return
nuke_team = new /datum/objective_team/nuclear
nuke_team = new /datum/team/nuclear
nuke_team.update_objectives()
assign_nuke() //This is bit ugly
return
@@ -158,7 +158,7 @@
return
nuke_team.rename_team(ask_name())
/datum/objective_team/nuclear/proc/rename_team(new_name)
/datum/team/nuclear/proc/rename_team(new_name)
syndicate_name = new_name
name = "[syndicate_name] Team"
for(var/I in members)
@@ -201,40 +201,40 @@
stack_trace("Station self destruct ot found during lone op team creation.")
nuke_team.memorized_code = null
/datum/objective_team/nuclear
/datum/team/nuclear
var/syndicate_name
var/obj/machinery/nuclearbomb/tracked_nuke
var/core_objective = /datum/objective/nuclear
var/memorized_code
/datum/objective_team/nuclear/New()
/datum/team/nuclear/New()
..()
syndicate_name = syndicate_name()
/datum/objective_team/nuclear/proc/update_objectives()
/datum/team/nuclear/proc/update_objectives()
if(core_objective)
var/datum/objective/O = new core_objective
O.team = src
objectives += O
/datum/objective_team/nuclear/proc/disk_rescued()
/datum/team/nuclear/proc/disk_rescued()
for(var/obj/item/disk/nuclear/D in GLOB.poi_list)
if(!D.onCentCom())
return FALSE
return TRUE
/datum/objective_team/nuclear/proc/operatives_dead()
/datum/team/nuclear/proc/operatives_dead()
for(var/I in members)
var/datum/mind/operative_mind = I
if(ishuman(operative_mind.current) && (operative_mind.current.stat != DEAD))
return FALSE
return TRUE
/datum/objective_team/nuclear/proc/syndies_escaped()
/datum/team/nuclear/proc/syndies_escaped()
var/obj/docking_port/mobile/S = SSshuttle.getShuttle("syndicate")
return (S && (S.z == ZLEVEL_CENTCOM || S.z == ZLEVEL_TRANSIT))
/datum/objective_team/nuclear/proc/get_result()
/datum/team/nuclear/proc/get_result()
var/evacuation = SSshuttle.emergency.mode == SHUTTLE_ENDGAME
var/disk_rescued = disk_rescued()
var/syndies_didnt_escape = !syndies_escaped()
@@ -262,10 +262,10 @@
else
return //Undefined result
/datum/objective_team/nuclear/roundend_report()
/datum/team/nuclear/roundend_report()
var/list/parts = list()
parts += "<span class='header'>[syndicate_name] Operatives:</span>"
switch(get_result())
if(NUKE_RESULT_FLUKE)
parts += "<span class='redtext big'>Humiliating Syndicate Defeat</span>"
@@ -306,7 +306,7 @@
for(var/U in GLOB.uplinks)
var/datum/component/uplink/H = U
if(H.owner == syndicate.key)
TC_uses += H.spent_telecrystals
TC_uses += H.purchase_log.total_spent
if(H.purchase_log)
purchases += H.purchase_log.generate_render(show_key = FALSE)
else
@@ -316,7 +316,7 @@
text += "(Syndicates used [TC_uses] TC) [purchases]"
if(TC_uses == 0 && SSticker.mode.station_was_nuked && !operatives_dead())
text += "<BIG>[icon2html('icons/badass.dmi', world, "badass")]</BIG>"
parts += text
return "<div class='panel redborder'>[parts.Join("<br>")]</div>"
+2 -2
View File
@@ -128,11 +128,11 @@
//Position the effect so the beam is one continous line
var/a
if(abs(Pixel_x)>32)
a = Pixel_x > 0 ? round(Pixel_x/32) : Ceiling(Pixel_x/32)
a = Pixel_x > 0 ? round(Pixel_x/32) : CEILING(Pixel_x/32, 1)
X.x += a
Pixel_x %= 32
if(abs(Pixel_y)>32)
a = Pixel_y > 0 ? round(Pixel_y/32) : Ceiling(Pixel_y/32)
a = Pixel_y > 0 ? round(Pixel_y/32) : CEILING(Pixel_y/32, 1)
X.y += a
Pixel_y %= 32
@@ -27,6 +27,8 @@
if(LAZYLEN(candidates))
var/client/C = pick(candidates)
stranger_backseat.key = C.key
log_game("[key_name(stranger_backseat)] became [key_name(owner)]'s split personality.")
message_admins("[key_name_admin(stranger_backseat)] became [key_name_admin(owner)]'s split personality.")
else
qdel(src)
@@ -59,7 +61,7 @@
current_backseat = owner_backseat
free_backseat = stranger_backseat
log_game("[current_backseat]/([current_backseat.ckey]) assumed control of [owner]/([owner.ckey] due to [src]. (Original owner: [current_controller == OWNER ? owner.ckey : current_backseat.ckey])")
log_game("[key_name(current_backseat)] assumed control of [key_name(owner)] due to [src]. (Original owner: [current_controller == OWNER ? owner.ckey : current_backseat.ckey])")
to_chat(owner, "<span class='userdanger'>You feel your control being taken away... your other personality is in charge now!</span>")
to_chat(current_backseat, "<span class='userdanger'>You manage to take control of your body!</span>")
+1 -1
View File
@@ -6,7 +6,7 @@
var/datum/callback/callback
/datum/component/archaeology/Initialize(_prob2drop, list/_archdrops = list(), datum/callback/_callback)
prob2drop = Clamp(_prob2drop, 0, 100)
prob2drop = CLAMP(_prob2drop, 0, 100)
archdrops = _archdrops
callback = _callback
RegisterSignal(COMSIG_PARENT_ATTACKBY,.proc/Dig)
+1 -1
View File
@@ -48,7 +48,7 @@
if(old_dir == new_dir)
return
remove()
var/rotation = SimplifyDegrees(dir2angle(new_dir)-dir2angle(old_dir))
var/rotation = SIMPLIFY_DEGREES(dir2angle(new_dir)-dir2angle(old_dir))
pic.dir = turn(pic.dir, rotation)
apply()
+81
View File
@@ -0,0 +1,81 @@
/datum/component/jousting
var/current_direction = NONE
var/max_tile_charge = 5
var/min_tile_charge = 2 //tiles before this code gets into effect.
var/current_tile_charge = 0
var/movement_reset_tolerance = 2 //deciseconds
var/unmounted_damage_boost_per_tile = 0
var/unmounted_knockdown_chance_per_tile = 0
var/unmounted_knockdown_time = 0
var/mounted_damage_boost_per_tile = 2
var/mounted_knockdown_chance_per_tile = 20
var/mounted_knockdown_time = 20
var/requires_mob_riding = TRUE //whether this only works if the attacker is riding a mob, rather than anything they can buckle to.
var/requires_mount = TRUE //kinda defeats the point of jousting if you're not mounted but whatever.
var/mob/current_holder
var/datum/component/redirect/listener
var/current_timerid
/datum/component/jousting/Initialize()
if(!isitem(parent))
. = COMPONENT_INCOMPATIBLE
stack_trace("Warning: Jousting component incorrectly applied to invalid parent type [parent.type]")
RegisterSignal(COMSIG_ITEM_EQUIPPED, .proc/on_equip)
RegisterSignal(COMSIG_ITEM_DROPPED, .proc/on_drop)
RegisterSignal(COMSIG_ITEM_ATTACK, .proc/on_attack)
/datum/component/jousting/Destroy()
QDEL_NULL(listener)
return ..()
/datum/component/jousting/proc/on_equip(mob/user, slot)
QDEL_NULL(listener)
current_holder = user
listener = new(user, COMSIG_MOVABLE_MOVED, CALLBACK(src, .proc/mob_move))
/datum/component/jousting/proc/on_drop(mob/user)
QDEL_NULL(listener)
current_holder = null
current_direction = NONE
current_tile_charge = 0
/datum/component/jousting/proc/on_attack(mob/living/target, mob/user)
if(user != current_holder)
return
var/current = current_tile_charge
var/obj/item/I = parent
var/target_buckled = target.buckled ? TRUE : FALSE //we don't need the reference of what they're buckled to, just whether they are.
if((requires_mount && ((requires_mob_riding && !ismob(user.buckled)) || (!user.buckled))) || !current_direction || (current_tile_charge < min_tile_charge))
return
var/turf/target_turf = get_step(user, current_direction)
if(target in range(1, target_turf))
var/knockdown_chance = (target_buckled? mounted_knockdown_chance_per_tile : unmounted_knockdown_chance_per_tile) * current
var/knockdown_time = (target_buckled? mounted_knockdown_time : unmounted_knockdown_time)
var/damage = (target_buckled? mounted_damage_boost_per_tile : unmounted_damage_boost_per_tile) * current
var/sharp = I.is_sharp()
var/msg
if(damage)
msg += "[user] [sharp? "impales" : "slams into"] [target] [sharp? "on" : "with"] their [parent]"
target.apply_damage(damage, BRUTE, user.zone_selected, 0)
if(prob(knockdown_chance))
msg += " and knocks [target] [target_buckled? "off of [target.buckled]" : "down"]"
if(target_buckled)
target.buckled.unbuckle_mob(target)
target.Knockdown(knockdown_time)
if(length(msg))
user.visible_message("<span class='danger'>[msg]!</span>")
/datum/component/jousting/proc/mob_move(newloc, dir)
if(!current_holder || (requires_mount && ((requires_mob_riding && !ismob(current_holder.buckled)) || (!current_holder.buckled))))
return
if(dir != current_direction)
current_tile_charge = 0
current_direction = dir
if(current_tile_charge < max_tile_charge)
current_tile_charge++
if(current_timerid)
deltimer(current_timerid)
current_timerid = addtimer(CALLBACK(src, .proc/reset_charge), movement_reset_tolerance, TIMER_STOPPABLE)
/datum/component/jousting/proc/reset_charge()
current_tile_charge = 0
@@ -70,6 +70,7 @@
user_insert(I, user)
/datum/component/material_container/proc/user_insert(obj/item/I, mob/living/user)
set waitfor = FALSE
var/requested_amount
var/Itype = I.type
if(ispath(Itype, /obj/item/stack) && precise_insertion)
+1 -1
View File
@@ -43,7 +43,7 @@
addtimer(CALLBACK(src, .proc/charge), charge_rate)
/datum/action/innate/dash/proc/charge()
current_charges = Clamp(current_charges + 1, 0, max_charges)
current_charges = CLAMP(current_charges + 1, 0, max_charges)
holder.update_action_buttons_icon()
if(recharge_sound)
playsound(dashing_item, recharge_sound, 50, 1)
+4 -4
View File
@@ -185,10 +185,10 @@
if(properties["stealth"] >= 2)
visibility_flags = HIDDEN_SCANNER
SetSpread(Clamp(2 ** (properties["transmittable"] - symptoms.len), VIRUS_SPREAD_BLOOD, VIRUS_SPREAD_AIRBORNE))
SetSpread(CLAMP(2 ** (properties["transmittable"] - symptoms.len), VIRUS_SPREAD_BLOOD, VIRUS_SPREAD_AIRBORNE))
permeability_mod = max(Ceiling(0.4 * properties["transmittable"]), 1)
cure_chance = 15 - Clamp(properties["resistance"], -5, 5) // can be between 10 and 20
permeability_mod = max(CEILING(0.4 * properties["transmittable"], 1), 1)
cure_chance = 15 - CLAMP(properties["resistance"], -5, 5) // can be between 10 and 20
stage_prob = max(properties["stage_rate"], 2)
SetSeverity(properties["severity"])
GenerateCure(properties)
@@ -243,7 +243,7 @@
// Will generate a random cure, the less resistance the symptoms have, the harder the cure.
/datum/disease/advance/proc/GenerateCure()
if(properties && properties.len)
var/res = Clamp(properties["resistance"] - (symptoms.len / 2), 1, advance_cures.len)
var/res = CLAMP(properties["resistance"] - (symptoms.len / 2), 1, advance_cures.len)
cures = list(advance_cures[res])
// Get the cure name from the cure_id
+9 -6
View File
@@ -85,9 +85,16 @@ GLOBAL_LIST_EMPTY(explosions)
var/max_range = max(devastation_range, heavy_impact_range, light_impact_range, flame_range)
var/area/epi_area = get_area(epicenter)
if(adminlog)
message_admins("Explosion with size ([devastation_range], [heavy_impact_range], [light_impact_range], [flame_range]) in area: [get_area(epicenter)] [ADMIN_COORDJMP(epicenter)]")
message_admins("Explosion with size ([devastation_range], [heavy_impact_range], [light_impact_range], [flame_range]) in area: [epi_area] [ADMIN_COORDJMP(epicenter)]")
log_game("Explosion with size ([devastation_range], [heavy_impact_range], [light_impact_range], [flame_range]) in area [epicenter.loc.name] ([epicenter.x],[epicenter.y],[epicenter.z])")
var/x0 = epicenter.x
var/y0 = epicenter.y
var/z0 = epicenter.z
SSblackbox.record_feedback("associative", "explosion", 1, list("dev" = devastation_range, "heavy" = heavy_impact_range, "light" = light_impact_range, "flash" = flash_range, "flame" = flame_range, "orig_dev" = orig_dev_range, "orig_heavy" = orig_heavy_range, "orig_light" = orig_light_range, "x" = x0, "y" = y0, "z" = z0, "area" = epi_area.type))
// Play sounds; we want sounds to be different depending on distance so we will manually do it ourselves.
// Stereo users will also hear the direction of the explosion!
@@ -99,10 +106,6 @@ GLOBAL_LIST_EMPTY(explosions)
far_dist += heavy_impact_range * 5
far_dist += devastation_range * 20
var/x0 = epicenter.x
var/y0 = epicenter.y
var/z0 = epicenter.z
if(!silent)
var/frequency = get_rand_frequency()
var/sound/explosion_sound = sound(get_sfx("explosion"))
@@ -118,7 +121,7 @@ GLOBAL_LIST_EMPTY(explosions)
M.playsound_local(epicenter, null, 100, 1, frequency, falloff = 5, S = explosion_sound)
// You hear a far explosion if you're outside the blast radius. Small bombs shouldn't be heard all over the station.
else if(dist <= far_dist)
var/far_volume = Clamp(far_dist, 30, 50) // Volume is based on explosion size and dist
var/far_volume = CLAMP(far_dist, 30, 50) // Volume is based on explosion size and dist
far_volume += (dist <= far_dist * 0.5 ? 50 : 0) // add 50 volume if the mob is pretty close to the explosion
M.playsound_local(epicenter, null, far_volume, 1, frequency, falloff = 5, S = far_explosion_sound)
EX_PREPROCESS_CHECK_TICK
+1
View File
@@ -10,6 +10,7 @@ GLOBAL_LIST_INIT(huds, list(
DATA_HUD_MEDICAL_ADVANCED = new/datum/atom_hud/data/human/medical/advanced(),
DATA_HUD_DIAGNOSTIC_BASIC = new/datum/atom_hud/data/diagnostic/basic(),
DATA_HUD_DIAGNOSTIC_ADVANCED = new/datum/atom_hud/data/diagnostic/advanced(),
DATA_HUD_ABDUCTOR = new/datum/atom_hud/abductor(),
ANTAG_HUD_CULT = new/datum/atom_hud/antag(),
ANTAG_HUD_REV = new/datum/atom_hud/antag(),
ANTAG_HUD_OPS = new/datum/atom_hud/antag(),
@@ -32,7 +32,7 @@
mid_sounds = list('sound/machines/fryer/deep_fryer_1.ogg' = 1, 'sound/machines/fryer/deep_fryer_2.ogg' = 1)
mid_length = 2
end_sound = 'sound/machines/fryer/deep_fryer_emerge.ogg'
volume = 25
volume = 15
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+2 -2
View File
@@ -101,7 +101,7 @@
"<span class='userdanger'>[A] slams your chest! You can't breathe!</span>")
playsound(get_turf(A), 'sound/effects/hit_punch.ogg', 50, 1, -1)
if(D.losebreath <= 10)
D.losebreath = Clamp(D.losebreath + 5, 0, 10)
D.losebreath = CLAMP(D.losebreath + 5, 0, 10)
D.adjustOxyLoss(10)
add_logs(A, D, "quickchoked")
return 1
@@ -112,7 +112,7 @@
playsound(get_turf(A), 'sound/effects/hit_punch.ogg', 50, 1, -1)
D.apply_damage(5, BRUTE)
if(D.silent <= 10)
D.silent = Clamp(D.silent + 10, 0, 10)
D.silent = CLAMP(D.silent + 10, 0, 10)
add_logs(A, D, "neck chopped")
return 1
+13 -72
View File
@@ -201,6 +201,7 @@
remove_antag_datum(ANTAG_DATUM_BROTHER)
SSticker.mode.update_brother_icons_removed(src)
/datum/mind/proc/remove_nukeop()
var/datum/antagonist/nukeop/nuke = has_antag_datum(/datum/antagonist/nukeop,TRUE)
if(nuke)
@@ -320,14 +321,19 @@ special_role = null
SSticker.mode.add_cultist(src)
else if(is_revolutionary(creator))
var/datum/antagonist/rev/converter = creator.mind.has_antag_datum(/datum/antagonist/rev)
var/datum/antagonist/rev/converter = creator.mind.has_antag_datum(/datum/antagonist/rev,TRUE)
converter.add_revolutionary(src,FALSE)
else if(is_servant_of_ratvar(creator))
add_servant_of_ratvar(current)
else if(is_nuclear_operative(creator))
make_Nuke(null, null, 0, FALSE)
var/datum/antagonist/nukeop/converter = creator.mind.has_antag_datum(/datum/antagonist/nukeop,TRUE)
var/datum/antagonist/nukeop/N = new(src)
N.send_to_spawnpoint = FALSE
N.nukeop_outfit = null
add_antag_datum(N,converter.nuke_team)
enslaved_to = creator
@@ -484,7 +490,8 @@ special_role = null
if (SSticker.mode.config_tag=="nuclear")
text = uppertext(text)
text = "<i><b>[text]</b></i>: "
if (src in SSticker.mode.syndicates)
var/datum/antagonist/nukeop/N = has_antag_datum(/datum/antagonist/nukeop,TRUE)
if(N)
text += "<b>OPERATIVE</b> | <a href='?src=[REF(src)];nuclear=clear'>nanotrasen</a>"
text += "<br><a href='?src=[REF(src)];nuclear=lair'>To shuttle</a>, <a href='?src=[REF(src)];common=undress'>undress</a>, <a href='?src=[REF(src)];nuclear=dressup'>dress up</a>."
var/code
@@ -704,7 +711,7 @@ special_role = null
out += sections[i]+"<br>"
if(((src in SSticker.mode.traitors) || (src in SSticker.mode.syndicates)) && ishuman(current))
if(((src in SSticker.mode.traitors) || is_nuclear_operative(current)) && ishuman(current))
text = "Uplink: <a href='?src=[REF(src)];common=uplink'>give</a>"
var/datum/component/uplink/U = find_syndicate_uplink()
if(U)
@@ -1100,36 +1107,14 @@ special_role = null
message_admins("[key_name_admin(usr)] has de-nuke op'ed [current].")
log_admin("[key_name(usr)] has de-nuke op'ed [current].")
if("nuclear")
if(!(src in SSticker.mode.syndicates))
SSticker.mode.syndicates += src
SSticker.mode.update_synd_icons_added(src)
if (SSticker.mode.syndicates.len==1)
SSticker.mode.prepare_syndicate_leader(src)
else
current.real_name = "[syndicate_name()] Operative #[SSticker.mode.syndicates.len-1]"
if(!has_antag_datum(/datum/antagonist/nukeop,TRUE))
add_antag_datum(/datum/antagonist/nukeop)
special_role = "Syndicate"
assigned_role = "Syndicate"
to_chat(current, "<span class='notice'>You are a [syndicate_name()] agent!</span>")
SSticker.mode.forge_syndicate_objectives(src)
SSticker.mode.greet_syndicate(src)
message_admins("[key_name_admin(usr)] has nuke op'ed [current].")
log_admin("[key_name(usr)] has nuke op'ed [current].")
if("lair")
current.forceMove(pick(GLOB.nukeop_start))
if("dressup")
var/mob/living/carbon/human/H = current
qdel(H.belt)
qdel(H.back)
qdel(H.ears)
qdel(H.gloves)
qdel(H.head)
qdel(H.shoes)
qdel(H.wear_id)
qdel(H.wear_suit)
qdel(H.w_uniform)
if (!SSticker.mode.equip_syndicate(current))
to_chat(usr, "<span class='danger'>Equipping a syndicate failed!</span>")
if("tellcode")
var/code
for (var/obj/machinery/nuclearbomb/bombue in GLOB.machines)
@@ -1377,50 +1362,6 @@ special_role = null
T.should_specialise = TRUE
add_antag_datum(T)
/datum/mind/proc/make_Nuke(turf/spawnloc, nuke_code, leader=0, telecrystals = TRUE)
if(!(src in SSticker.mode.syndicates))
SSticker.mode.syndicates += src
SSticker.mode.update_synd_icons_added(src)
assigned_role = "Syndicate"
special_role = "Syndicate"
SSticker.mode.forge_syndicate_objectives(src)
SSticker.mode.greet_syndicate(src)
current.faction |= "syndicate"
if(spawnloc)
current.forceMove(spawnloc)
if(ishuman(current))
var/mob/living/carbon/human/H = current
qdel(H.belt)
qdel(H.back)
qdel(H.ears)
qdel(H.gloves)
qdel(H.head)
qdel(H.shoes)
qdel(H.wear_id)
qdel(H.wear_suit)
qdel(H.w_uniform)
SSticker.mode.equip_syndicate(current, telecrystals)
if (nuke_code)
store_memory("<B>Syndicate Nuclear Bomb Code</B>: [nuke_code]", 0, 0)
to_chat(current, "The nuclear authorization code is: <B>[nuke_code]</B>")
else
var/obj/machinery/nuclearbomb/nuke = locate("syndienuke") in GLOB.nuke_list
if(nuke)
store_memory("<B>Syndicate Nuclear Bomb Code</B>: [nuke.r_code]", 0, 0)
to_chat(current, "The nuclear authorization code is: <B>nuke.r_code</B>")
else
to_chat(current, "You were not provided with a nuclear code. Trying asking your team leader or contacting syndicate command.</B>")
if (leader)
SSticker.mode.prepare_syndicate_leader(src,nuke_code)
else
current.real_name = "[syndicate_name()] Operative #[SSticker.mode.syndicates.len-1]"
/datum/mind/proc/make_Changling()
var/datum/antagonist/changeling/C = has_antag_datum(/datum/antagonist/changeling)
if(!C)
+1
View File
@@ -98,6 +98,7 @@
/datum/mutation/human/unintelligible
name = "Unintelligible"
quality = NEGATIVE
dna_block = NON_SCANNABLE
text_gain_indication = "<span class='danger'>You can't seem to form any coherent thoughts!</span>"
text_lose_indication = "<span class='danger'>Your mind feels more clear.</span>"
+1 -1
View File
@@ -38,7 +38,7 @@
if (user.client)
user.client.images += bar
progress = Clamp(progress, 0, goal)
progress = CLAMP(progress, 0, goal)
bar.icon_state = "prog_bar_[round(((progress / goal) * 100), 5)]"
if (!shown)
user.client.images += bar
+2 -2
View File
@@ -34,7 +34,7 @@
var/strength
if(steps>1)
strength = InverseSquareLaw(intensity, max(range_modifier*steps, 1), 1)
strength = INVERSE_SQUARE(intensity, max(range_modifier*steps, 1), 1)
else
strength = intensity
@@ -42,7 +42,7 @@
qdel(src)
return
radiate(atoms, Floor(strength))
radiate(atoms, FLOOR(strength, 1))
check_obstructions(atoms) // reduce our overall strength if there are radiation insulators
+3 -3
View File
@@ -60,8 +60,8 @@
if(istype(L)) //this is probably more safety than actually needed
var/vanguard = L.stun_absorption["vanguard"]
desc = initial(desc)
desc += "<br><b>[Floor(vanguard["stuns_absorbed"] * 0.1)]</b> seconds of stuns held back.\
[GLOB.ratvar_awakens ? "":"<br><b>[Floor(min(vanguard["stuns_absorbed"] * 0.025, 20))]</b> seconds of stun will affect you."]"
desc += "<br><b>[FLOOR(vanguard["stuns_absorbed"] * 0.1, 1)]</b> seconds of stuns held back.\
[GLOB.ratvar_awakens ? "":"<br><b>[FLOOR(min(vanguard["stuns_absorbed"] * 0.025, 20), 1)]</b> seconds of stun will affect you."]"
..()
/datum/status_effect/vanguard_shield/Destroy()
@@ -87,7 +87,7 @@
var/vanguard = owner.stun_absorption["vanguard"]
var/stuns_blocked = 0
if(vanguard)
stuns_blocked = Floor(min(vanguard["stuns_absorbed"] * 0.25, 400))
stuns_blocked = FLOOR(min(vanguard["stuns_absorbed"] * 0.25, 400), 1)
vanguard["end_time"] = 0 //so it doesn't absorb the stuns we're about to apply
if(owner.stat != DEAD)
var/message_to_owner = "<span class='warning'>You feel your Vanguard quietly fade...</span>"
+2 -2
View File
@@ -230,7 +230,7 @@
if(prob(severity * 0.15))
to_chat(owner, "<span class='sevtug[span_part]'>\"[text2ratvar(pick(mania_messages))]\"</span>")
owner.playsound_local(get_turf(motor), hum, severity, 1)
owner.adjust_drugginess(Clamp(max(severity * 0.075, 1), 0, max(0, 50 - owner.druggy))) //7.5% of severity per second, minimum 1
owner.adjust_drugginess(CLAMP(max(severity * 0.075, 1), 0, max(0, 50 - owner.druggy))) //7.5% of severity per second, minimum 1
if(owner.hallucination < 50)
owner.hallucination = min(owner.hallucination + max(severity * 0.075, 1), 50) //7.5% of severity per second, minimum 1
if(owner.dizziness < 50)
@@ -310,7 +310,7 @@
var/icon/I = icon(owner.icon, owner.icon_state, owner.dir)
var/icon_height = I.Height()
bleed_overlay.pixel_x = -owner.pixel_x
bleed_overlay.pixel_y = Floor(icon_height * 0.25)
bleed_overlay.pixel_y = FLOOR(icon_height * 0.25, 1)
bleed_overlay.transform = matrix() * (icon_height/world.icon_size) //scale the bleed overlay's size based on the target's icon size
bleed_underlay.pixel_x = -owner.pixel_x
bleed_underlay.transform = matrix() * (icon_height/world.icon_size) * 3
+11 -11
View File
@@ -1,8 +1,8 @@
/datum/wires/r_n_d
holder_type = /obj/machinery/r_n_d
/datum/wires/rnd
holder_type = /obj/machinery/rnd
randomize = TRUE
/datum/wires/r_n_d/New(atom/holder)
/datum/wires/rnd/New(atom/holder)
wires = list(
WIRE_HACK, WIRE_DISABLE,
WIRE_SHOCK
@@ -10,22 +10,22 @@
add_duds(5)
..()
/datum/wires/r_n_d/interactable(mob/user)
var/obj/machinery/r_n_d/R = holder
/datum/wires/rnd/interactable(mob/user)
var/obj/machinery/rnd/R = holder
if(R.panel_open)
return TRUE
/datum/wires/r_n_d/get_status()
var/obj/machinery/r_n_d/R = holder
/datum/wires/rnd/get_status()
var/obj/machinery/rnd/R = holder
var/list/status = list()
status += "The red light is [R.disabled ? "off" : "on"]."
status += "The green light is [R.shocked ? "off" : "on"]."
status += "The blue light is [R.hacked ? "off" : "on"]."
return status
/datum/wires/r_n_d/on_pulse(wire)
/datum/wires/rnd/on_pulse(wire)
set waitfor = FALSE
var/obj/machinery/r_n_d/R = holder
var/obj/machinery/rnd/R = holder
switch(wire)
if(WIRE_HACK)
R.hacked = !R.hacked
@@ -37,8 +37,8 @@
if(R)
R.shocked = FALSE
/datum/wires/r_n_d/on_cut(wire, mend)
var/obj/machinery/r_n_d/R = holder
/datum/wires/rnd/on_cut(wire, mend)
var/obj/machinery/rnd/R = holder
switch(wire)
if(WIRE_HACK)
R.hacked = !mend
-1
View File
@@ -20,7 +20,6 @@ GLOBAL_LIST_EMPTY(active_alternate_appearances)
var/list/arguments = args.Copy(2)
new type(arglist(arguments))
/datum/atom_hud/alternate_appearance
var/appearance_key
+19 -24
View File
@@ -200,7 +200,7 @@
loc.handle_atom_del(src)
for(var/atom/movable/AM in contents)
qdel(AM)
loc = null
moveToNullspace()
invisibility = INVISIBILITY_ABSTRACT
if(pulledby)
pulledby.stop_pulling()
@@ -254,6 +254,12 @@
loc = destination
if(!same_loc)
var/turf/oldturf = get_turf(oldloc)
var/turf/destturf = get_turf(destination)
var/old_z = (oldturf ? oldturf.z : null)
var/dest_z = (destturf ? destturf.z : null)
if (old_z != dest_z)
onTransitZ(old_z, dest_z)
destination.Entered(src, oldloc)
if(destarea && old_area != destarea)
destarea.Entered(src, oldloc)
@@ -268,30 +274,18 @@
//If no destination, move the atom into nullspace (don't do this unless you know what you're doing)
else
. = TRUE
var/atom/oldloc = loc
var/area/old_area = get_area(oldloc)
oldloc.Exited(src, null)
if(old_area)
old_area.Exited(src, null)
if (loc)
var/atom/oldloc = loc
var/area/old_area = get_area(oldloc)
oldloc.Exited(src, null)
if(old_area)
old_area.Exited(src, null)
loc = null
/mob/living/forceMove(atom/destination)
stop_pulling()
if(buckled)
buckled.unbuckle_mob(src, force = TRUE)
if(has_buckled_mobs())
unbuckle_all_mobs(force = TRUE)
. = ..()
if(.)
if(client)
reset_perspective(destination)
update_canmove() //if the mob was asleep inside a container and then got forceMoved out we need to make them fall.
/mob/living/brain/forceMove(atom/destination)
if(container)
return container.forceMove(destination)
else //something went very wrong.
CRASH("Brainmob without container.")
/atom/movable/proc/onTransitZ(old_z,new_z)
for (var/item in src) // Notify contents of Z-transition. This can be overridden IF we know the items contents do not care.
var/atom/movable/AM = item
AM.onTransitZ(old_z,new_z)
//Called whenever an object moves and by mobs when they attempt to move themselves through space
//And when an object or action applies a force on src, see newtonian_move() below
@@ -420,7 +414,7 @@
for(var/m in buckled_mobs)
var/mob/living/buckled_mob = m
if(!buckled_mob.Move(newloc, direct))
loc = buckled_mob.loc
forceMove(buckled_mob.loc)
last_move = buckled_mob.last_move
inertia_dir = last_move
buckled_mob.inertia_dir = last_move
@@ -522,6 +516,7 @@
. = ..()
. -= "Jump to"
.["Follow"] = "?_src_=holder;[HrefToken()];adminplayerobservefollow=[REF(src)]"
.["Get"] = "?_src=holder;[HrefToken()];admingetmovable=[REF(src)]"
/atom/movable/proc/ex_check(ex_id)
if(!ex_id)
+3
View File
@@ -60,6 +60,9 @@
/datum/atom_hud/data/bot_path
hud_icons = list(DIAG_PATH_HUD)
/datum/atom_hud/abductor
hud_icons = list(GLAND_HUD)
/* MED/SEC/DIAG HUD HOOKS */
/*
+28 -23
View File
@@ -4,7 +4,7 @@
w_class = WEIGHT_CLASS_TINY
var/used = 0
/obj/item/antag_spawner/proc/spawn_antag(client/C, turf/T, type = "")
/obj/item/antag_spawner/proc/spawn_antag(client/C, turf/T, kind = "", datum/mind/user)
return
/obj/item/antag_spawner/proc/equip_antag(mob/target)
@@ -67,18 +67,16 @@
else
to_chat(H, "Unable to reach your apprentice! You can either attack the spellbook with the contract to refund your points, or wait and try again later.")
/obj/item/antag_spawner/contract/spawn_antag(client/C, turf/T, school,datum/mind/user)
/obj/item/antag_spawner/contract/spawn_antag(client/C, turf/T, kind ,datum/mind/user)
new /obj/effect/particle_effect/smoke(T)
var/mob/living/carbon/human/M = new/mob/living/carbon/human(T)
C.prefs.copy_to(M)
M.key = C.key
var/datum/mind/app_mind = M.mind
var/datum/antagonist/wizard/apprentice/app = new(app_mind)
app.master = user
app.school = school
app.school = kind
var/datum/antagonist/wizard/master_wizard = user.has_antag_datum(/datum/antagonist/wizard)
if(master_wizard)
@@ -107,7 +105,7 @@
if(used)
to_chat(user, "<span class='warning'>[src] is out of power!</span>")
return FALSE
if(!(user.mind in SSticker.mode.syndicates))
if(!user.mind.has_antag_datum(/datum/antagonist/nukeop,TRUE))
to_chat(user, "<span class='danger'>AUTHENTICATION FAILURE. ACCESS DENIED.</span>")
return FALSE
if(user.z != ZLEVEL_CENTCOM)
@@ -127,25 +125,25 @@
return
used = TRUE
var/mob/dead/observer/theghost = pick(nuke_candidates)
spawn_antag(theghost.client, get_turf(src), "syndieborg", user)
spawn_antag(theghost.client, get_turf(src), "syndieborg")
do_sparks(4, TRUE, src)
qdel(src)
else
to_chat(user, "<span class='warning'>Unable to connect to Syndicate command. Please wait and try again later or use the teleporter on your uplink to get your points refunded.</span>")
/obj/item/antag_spawner/nuke_ops/spawn_antag(client/C, turf/T)
/obj/item/antag_spawner/nuke_ops/spawn_antag(client/C, turf/T, kind, datum/mind/user)
var/mob/living/carbon/human/M = new/mob/living/carbon/human(T)
C.prefs.copy_to(M)
M.key = C.key
var/code = "BOMB-NOT-FOUND"
var/obj/machinery/nuclearbomb/nuke = locate("syndienuke") in GLOB.nuke_list
if(nuke)
code = nuke.r_code
M.mind.make_Nuke(null, code, 0, FALSE)
var/newname = M.dna.species.random_name(M.gender,0,SSticker.mode.nukeops_lastname)
M.mind.name = newname
M.real_name = newname
M.name = newname
var/datum/antagonist/nukeop/new_op = new(M.mind)
new_op.send_to_spawnpoint = FALSE
new_op.nukeop_outfit = /datum/outfit/syndicate/no_crystals
var/datum/antagonist/nukeop/creator_op = user.has_antag_datum(/datum/antagonist/nukeop,TRUE)
if(creator_op)
M.mind.add_antag_datum(new_op,creator_op.nuke_team)
M.mind.special_role = "Nuclear Operative"
//////SYNDICATE BORG
/obj/item/antag_spawner/nuke_ops/borg_tele
@@ -162,8 +160,12 @@
name = "syndicate medical teleporter"
borg_to_spawn = "Medical"
/obj/item/antag_spawner/nuke_ops/borg_tele/spawn_antag(client/C, turf/T)
/obj/item/antag_spawner/nuke_ops/borg_tele/spawn_antag(client/C, turf/T, kind, datum/mind/user)
var/mob/living/silicon/robot/R
var/datum/antagonist/nukeop/creator_op = user.has_antag_datum(/datum/antagonist/nukeop,TRUE)
if(!creator_op)
return
switch(borg_to_spawn)
if("Medical")
R = new /mob/living/silicon/robot/modules/syndicate/medical(T)
@@ -174,8 +176,8 @@
if(prob(50))
brainfirstname = pick(GLOB.first_names_female)
var/brainopslastname = pick(GLOB.last_names)
if(SSticker.mode.nukeops_lastname) //the brain inside the syndiborg has the same last name as the other ops.
brainopslastname = SSticker.mode.nukeops_lastname
if(creator_op.nuke_team.syndicate_name) //the brain inside the syndiborg has the same last name as the other ops.
brainopslastname = creator_op.nuke_team.syndicate_name
var/brainopsname = "[brainfirstname] [brainopslastname]"
R.mmi.name = "Man-Machine Interface: [brainopsname]"
@@ -185,7 +187,11 @@
R.real_name = R.name
R.key = C.key
R.mind.make_Nuke(null, nuke_code = null,leader=0, telecrystals = TRUE)
var/datum/antagonist/nukeop/new_borg = new(R.mind)
new_borg.send_to_spawnpoint = FALSE
R.mind.add_antag_datum(new_borg,creator_op.nuke_team)
R.mind.special_role = "Syndicate Cyborg"
///////////SLAUGHTER DEMON
@@ -222,8 +228,7 @@
to_chat(user, "<span class='notice'>You can't seem to work up the nerve to shatter the bottle. Perhaps you should try again later.</span>")
/obj/item/antag_spawner/slaughter_demon/spawn_antag(client/C, turf/T, type = "")
/obj/item/antag_spawner/slaughter_demon/spawn_antag(client/C, turf/T, kind = "", datum/mind/user)
var/obj/effect/dummy/slaughter/holder = new /obj/effect/dummy/slaughter(T)
var/mob/living/simple_animal/slaughter/S = new demon_type(holder)
S.holder = holder
+1 -1
View File
@@ -42,7 +42,7 @@
/mob/living/simple_animal/hostile/blob/fire_act(exposed_temperature, exposed_volume)
..()
if(exposed_temperature)
adjustFireLoss(Clamp(0.01 * exposed_temperature, 1, 5))
adjustFireLoss(CLAMP(0.01 * exposed_temperature, 1, 5))
else
adjustFireLoss(5)
+3 -3
View File
@@ -153,7 +153,7 @@ GLOBAL_LIST_EMPTY(blob_nodes)
B.hud_used.blobpwrdisplay.maptext = "<div align='center' valign='middle' style='position:relative; top:0px; left:6px'><font color='#82ed00'>[round(blob_core.obj_integrity)]</font></div>"
/mob/camera/blob/proc/add_points(points)
blob_points = Clamp(blob_points + points, 0, max_blob_points)
blob_points = CLAMP(blob_points + points, 0, max_blob_points)
hud_used.blobpwrdisplay.maptext = "<div align='center' valign='middle' style='position:relative; top:0px; left:6px'><font color='#82ed00'>[round(blob_points)]</font></div>"
/mob/camera/blob/say(message)
@@ -215,12 +215,12 @@ GLOBAL_LIST_EMPTY(blob_nodes)
if(placed)
var/obj/structure/blob/B = locate() in range("3x3", NewLoc)
if(B)
loc = NewLoc
forceMove(NewLoc)
else
return 0
else
var/area/A = get_area(NewLoc)
if(isspaceturf(NewLoc) || istype(A, /area/shuttle)) //if unplaced, can't go on shuttles or space tiles
return 0
loc = NewLoc
forceMove(NewLoc)
return 1

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