Merge remote-tracking branch 'Upstream/master'

This commit is contained in:
The0bserver
2020-08-23 02:34:23 -04:00
1177 changed files with 38797 additions and 15250 deletions
+8 -1
View File
@@ -414,10 +414,17 @@ Regarding sprites & sounds, you must credit the artist and possibly the codebase
Do not add any of the following in a Pull Request or risk getting the PR closed:
* National Socialist Party of Germany content, National Socialist Party of Germany related content, or National Socialist Party of Germany references
* Code where one line of code is split across mutiple lines (except for multiple, separate strings and comments; in those cases, existing longer lines must not be split up)
* Code adding, removing, or updating the availability of alien races/species/human mutants without prior approval. Pull requests attempting to add or remove features from said races/species/mutants require prior approval as well.
Just because something isn't on this list doesn't mean that it's acceptable. Use common sense above all else.
## Content requiring prior approval
Certain types of changes may require prior approval from maintainers. This currently includes:
* Code adding, removing, or updating the availability of alien races/species/human mutants. This includes pull requests attempting to add or remove features from said races/species/mutants. (Requires approval from at least one maintainer)
* Code adding, removing, or modifying the functionality of adult-oriented features (such as, but not limited to: vore, genitals, MKUltra, and more). This also includes pull requests attempting to add or remove these features outright. (Requires approval from at least half of the formal maintainer team)
The above content requires approval from the specified amount of maintainers prior to PR creation. Seeking approval must be done via a @Maintainer ping in a relevant development/code or staff channel on the Discord, otherwise it will be considered insufficient. If a PR contains any of the above content, but the creator does not have sufficient approval prior to the PR's creation, then the PR may be closed by any maintainer, at any time, for any reason.
## A word on Git
Yes, we know that the files have a tonne of mixed Windows and Linux line endings. Attempts to fix this have been met with less than stellar success, and as such we have decided to give up caring until there comes a time when it matters.
@@ -18,9 +18,7 @@
/obj/item/mining_scanner,
/obj/item/flashlight/lantern,
/obj/item/card/id/mining,
/obj/item/gps/mining{
tracking = 0
},
/obj/item/gps/mining,
/turf/open/floor/plating,
/area/ruin/powered/golem_ship)
"d" = (
@@ -34,9 +32,7 @@
/obj/item/mining_scanner,
/obj/item/flashlight/lantern,
/obj/item/card/id/mining,
/obj/item/gps/mining{
tracking = 0
},
/obj/item/gps/mining,
/turf/open/floor/plating,
/area/ruin/powered/golem_ship)
"e" = (
@@ -156,9 +152,7 @@
"x" = (
/obj/structure/table/wood,
/obj/machinery/reagentgrinder,
/obj/item/gps/mining{
tracking = 0
},
/obj/item/gps/mining,
/turf/open/floor/mineral/titanium/purple,
/area/ruin/powered/golem_ship)
"z" = (
@@ -16,7 +16,7 @@
/turf/open/floor/wood,
/area/ruin/unpowered)
"d" = (
/turf/open/openspace/icemoon,
/turf/open/transparent/openspace/icemoon,
/area/icemoon/surface/outdoors)
"e" = (
/obj/item/clothing/suit/hooded/explorer,
@@ -71,8 +71,9 @@
/turf/closed/wall/r_wall,
/area/engine/engineering)
"di" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/turf/closed/wall,
/obj/structure/reagent_dispensers/fueltank,
/obj/effect/turf_decal/delivery,
/turf/open/floor/plasteel,
/area/engine/engineering)
"dl" = (
/obj/structure/cable{
@@ -304,12 +305,6 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
/obj/effect/turf_decal/tile/yellow{
dir = 1
},
/obj/effect/turf_decal/tile/yellow{
dir = 8
},
/turf/open/floor/plasteel,
/area/engine/engineering)
"kH" = (
@@ -523,6 +518,9 @@
/obj/machinery/light{
dir = 4
},
/obj/structure/sign/warning/enginesafety{
pixel_x = 32
},
/turf/open/floor/plasteel,
/area/engine/engineering)
"qv" = (
@@ -543,7 +541,13 @@
dir = 4
},
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/turf/closed/wall,
/obj/effect/turf_decal/tile/yellow{
dir = 1
},
/obj/effect/turf_decal/tile/yellow{
dir = 8
},
/turf/open/floor/plasteel,
/area/engine/engineering)
"qN" = (
/obj/structure/table/reinforced,
@@ -848,6 +852,10 @@
/obj/machinery/igniter{
id = "TEG_igniter"
},
/mob/living/carbon/monkey{
name = "Mumkey Jones"
},
/obj/item/clothing/head/hardhat/atmos,
/turf/open/floor/engine/vacuum,
/area/engine/engineering)
"An" = (
@@ -882,14 +890,6 @@
/obj/machinery/atmospherics/pipe/simple/orange/visible{
dir = 1
},
/obj/machinery/camera{
c_tag = "TEG - North Center";
dir = 8
},
/obj/effect/turf_decal/tile/yellow{
dir = 4
},
/obj/effect/turf_decal/tile/yellow,
/turf/open/floor/plasteel,
/area/engine/engineering)
"AX" = (
@@ -1042,12 +1042,6 @@
},
/turf/open/floor/plasteel,
/area/engine/engineering)
"EI" = (
/obj/effect/turf_decal/delivery,
/obj/structure/reagent_dispensers/fueltank,
/obj/machinery/atmospherics/pipe/simple/orange/visible,
/turf/open/floor/plasteel,
/area/engine/engineering)
"EL" = (
/turf/closed/wall,
/area/engine/engineering)
@@ -1082,6 +1076,11 @@
/obj/structure/window/reinforced,
/turf/open/floor/plasteel,
/area/engine/engineering)
"Fs" = (
/obj/structure/rack,
/obj/item/pipe_dispenser,
/turf/open/floor/plasteel,
/area/engine/engineering)
"FG" = (
/obj/machinery/atmospherics/pipe/simple/orange/visible{
dir = 10
@@ -1218,11 +1217,6 @@
/turf/open/floor/plasteel,
/area/engine/engineering)
"Jd" = (
/obj/machinery/light,
/obj/effect/turf_decal/tile/yellow{
dir = 8
},
/obj/effect/turf_decal/tile/yellow,
/obj/machinery/atmospherics/pipe/manifold/orange/visible,
/turf/open/floor/plasteel,
/area/engine/engineering)
@@ -1312,15 +1306,6 @@
dir = 4
},
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/obj/machinery/light{
dir = 1
},
/obj/effect/turf_decal/tile/yellow{
dir = 1
},
/obj/effect/turf_decal/tile/yellow{
dir = 4
},
/turf/open/floor/plasteel,
/area/engine/engineering)
"LD" = (
@@ -1372,6 +1357,7 @@
/obj/machinery/atmospherics/pipe/manifold/cyan/visible{
dir = 4
},
/obj/machinery/meter,
/turf/open/floor/plasteel,
/area/engine/engineering)
"Nz" = (
@@ -1429,12 +1415,10 @@
/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{
dir = 4
},
/obj/machinery/airalarm{
dir = 1;
locked = 0;
pixel_y = -22
},
/obj/machinery/light,
/obj/structure/sign/nanotrasen{
pixel_y = -32
},
/turf/open/floor/plasteel,
/area/engine/engineering)
"Pz" = (
@@ -1452,6 +1436,9 @@
/obj/machinery/light{
dir = 1
},
/obj/structure/sign/warning/nosmoking{
pixel_y = 30
},
/turf/open/floor/plasteel,
/area/engine/engineering)
"PK" = (
@@ -1522,12 +1509,11 @@
/turf/open/space,
/area/space/nearstation)
"Rl" = (
/obj/machinery/atmospherics/components/binary/pump{
dir = 1
},
/obj/effect/turf_decal/stripes/line{
dir = 1
},
/obj/machinery/atmospherics/pipe/simple/cyan/visible,
/obj/machinery/meter,
/turf/open/floor/plasteel,
/area/engine/engineering)
"Rz" = (
@@ -1602,7 +1588,13 @@
/turf/open/floor/plating,
/area/engine/engineering)
"TE" = (
/obj/structure/closet/crate/internals,
/obj/structure/closet/crate{
icon_state = "crateopen"
},
/obj/effect/spawner/lootdrop/maintenance{
lootcount = 2;
name = "2maintenance loot spawner"
},
/turf/open/floor/plasteel,
/area/engine/engineering)
"TH" = (
@@ -1648,6 +1640,10 @@
dir = 4
},
/obj/effect/turf_decal/tile/yellow,
/obj/machinery/camera{
c_tag = "TEG - North Center";
dir = 8
},
/turf/open/floor/plasteel,
/area/engine/engineering)
"Uq" = (
@@ -1671,18 +1667,15 @@
/area/engine/engineering)
"UT" = (
/obj/machinery/atmospherics/pipe/simple/orange/visible,
/obj/effect/turf_decal/tile/yellow{
dir = 1
},
/obj/effect/turf_decal/tile/yellow{
dir = 8
},
/turf/open/floor/plasteel,
/area/engine/engineering)
"UY" = (
/obj/machinery/atmospherics/components/unary/vent_pump/on{
dir = 8
},
/obj/machinery/airalarm{
pixel_y = 23
},
/turf/open/floor/plasteel,
/area/engine/engineering)
"Vi" = (
@@ -1811,10 +1804,6 @@
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 5
},
/obj/structure/extinguisher_cabinet{
dir = 4;
pixel_y = -27
},
/turf/open/floor/plasteel,
/area/engine/engineering)
"YC" = (
@@ -1837,9 +1826,10 @@
/turf/open/floor/plasteel,
/area/engine/engineering)
"YP" = (
/obj/structure/rack,
/obj/machinery/atmospherics/pipe/simple/scrubbers/visible,
/obj/item/pipe_dispenser,
/obj/effect/turf_decal/tile/yellow{
dir = 8
},
/obj/effect/turf_decal/tile/yellow,
/turf/open/floor/plasteel,
/area/engine/engineering)
"YQ" = (
@@ -1878,7 +1868,9 @@
/turf/open/floor/plasteel,
/area/engine/engineering)
"Zu" = (
/obj/machinery/atmospherics/pipe/manifold/cyan/visible,
/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{
dir = 6
},
/obj/machinery/meter,
/turf/open/floor/plasteel,
/area/engine/engineering)
@@ -1887,13 +1879,6 @@
dir = 4
},
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/obj/structure/sign/warning/securearea{
pixel_y = -32
},
/obj/effect/turf_decal/tile/yellow{
dir = 8
},
/obj/effect/turf_decal/tile/yellow,
/turf/open/floor/plasteel,
/area/engine/engineering)
"ZC" = (
@@ -2170,7 +2155,7 @@ iD
MP
MP
MP
ij
MP
yX
qn
qn
@@ -2251,11 +2236,11 @@ ME
QS
uB
Ok
Ok
Ok
di
di
Ok
Bz
Zu
lI
Wc
Ok
zG
@@ -2307,8 +2292,8 @@ iP
wk
go
fF
EI
EI
UT
UT
sn
qc
Nh
@@ -2367,7 +2352,7 @@ KA
KA
Ok
dZ
bO
Zu
ev
tl
qb
@@ -2477,7 +2462,7 @@ IP
Zs
sD
Jd
EL
YP
YG
AX
PK
@@ -2505,7 +2490,7 @@ SX
ou
vG
Zv
di
Xe
qJ
Lw
Xe
@@ -2595,7 +2580,7 @@ PK
Dv
Dv
bO
YP
sH
As
yN
yN
@@ -2651,7 +2636,7 @@ eh
zx
XW
ST
Ok
Fs
MP
tw
tw
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+178 -130
View File
@@ -2134,14 +2134,11 @@
/turf/open/floor/plasteel/dark,
/area/maintenance/port)
"adM" = (
/obj/machinery/door/airlock/external{
name = "Abandoned External Airlock"
},
/obj/effect/mapping_helpers/airlock/cyclelink_helper,
/obj/structure/cable{
icon_state = "1-2"
},
/turf/open/floor/plasteel/dark,
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/plasteel,
/area/maintenance/fore)
"adN" = (
/obj/effect/turf_decal/loading_area{
@@ -2160,11 +2157,16 @@
/turf/open/floor/engine,
/area/ai_monitored/storage/satellite)
"adO" = (
/obj/machinery/door/airlock/external{
name = "Satellite External Airlock";
req_one_access_txt = "32;19"
},
/obj/effect/mapping_helpers/airlock/cyclelink_helper,
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/obj/structure/cable{
icon_state = "1-2"
},
/turf/open/floor/engine,
/turf/open/floor/plasteel/dark,
/area/ai_monitored/turret_protected/aisat/atmos)
"adP" = (
/obj/machinery/status_display/ai,
@@ -2513,6 +2515,9 @@
/turf/open/floor/plating,
/area/security/execution/education)
"aeD" = (
/obj/structure/cable{
icon_state = "2-8"
},
/obj/structure/disposalpipe/segment,
/turf/open/floor/plating/airless,
/area/space/nearstation)
@@ -2598,13 +2603,20 @@
},
/obj/machinery/light/small,
/turf/open/floor/plating/airless,
/area/maintenance/starboard/fore)
/area/space/nearstation)
"aeL" = (
/obj/machinery/door/airlock/external{
name = "Abandoned External Airlock"
},
/obj/effect/mapping_helpers/airlock/cyclelink_helper,
/obj/structure/cable{
icon_state = "2-8"
icon_state = "1-2"
},
/obj/structure/cable{
icon_state = "1-2"
},
/obj/structure/disposalpipe/segment,
/turf/open/floor/plating/airless,
/turf/open/floor/plasteel/dark,
/area/maintenance/starboard/fore)
"aeM" = (
/obj/machinery/photocopier,
@@ -5704,13 +5716,6 @@
/turf/open/floor/plasteel/dark,
/area/security/courtroom)
"ajI" = (
/obj/machinery/door/airlock/external{
name = "Abandoned External Airlock"
},
/obj/effect/mapping_helpers/airlock/cyclelink_helper,
/obj/structure/cable{
icon_state = "1-2"
},
/obj/structure/cable{
icon_state = "1-2"
},
@@ -6935,7 +6940,6 @@
dir = 4
},
/obj/structure/closet/emcloset/anchored,
/obj/effect/decal/cleanable/cobweb,
/obj/machinery/light/small{
dir = 8
},
@@ -9658,12 +9662,19 @@
/turf/open/floor/plasteel/showroomfloor,
/area/medical/genetics)
"aqp" = (
/obj/machinery/door/airlock/external{
name = "Solar Maintenance";
req_access_txt = "10; 13"
},
/obj/structure/cable{
icon_state = "4-8"
},
/obj/structure/lattice/catwalk,
/turf/open/floor/plating/airless,
/area/solar/port/fore)
/obj/effect/mapping_helpers/airlock/cyclelink_helper{
dir = 4
},
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/plating,
/area/maintenance/solars/port/fore)
"aqq" = (
/obj/machinery/status_display/ai{
pixel_x = -32
@@ -12462,12 +12473,18 @@
/turf/open/floor/plasteel,
/area/bridge)
"auN" = (
/obj/machinery/door/airlock/external{
name = "Solar Maintenance";
req_access_txt = "10; 13"
},
/obj/structure/cable{
icon_state = "4-8"
},
/obj/structure/lattice/catwalk,
/turf/open/floor/plating/airless,
/area/solar/starboard/fore)
/obj/effect/mapping_helpers/airlock/cyclelink_helper{
dir = 8
},
/turf/open/floor/plating,
/area/maintenance/solars/starboard/fore)
"auO" = (
/obj/effect/decal/cleanable/dirt,
/obj/structure/cable{
@@ -64779,11 +64796,15 @@
/turf/open/floor/plasteel/dark,
/area/hallway/primary/starboard)
"bZG" = (
/obj/structure/sign/warning/vacuum/external{
pixel_y = 32
/obj/machinery/door/airlock/external{
name = "Abandoned External Airlock"
},
/turf/open/floor/plating/airless,
/area/space/nearstation)
/obj/effect/mapping_helpers/airlock/cyclelink_helper,
/obj/structure/cable{
icon_state = "1-2"
},
/turf/open/floor/plasteel/dark,
/area/maintenance/fore)
"bZH" = (
/obj/effect/turf_decal/tile/neutral{
dir = 1
@@ -64902,9 +64923,18 @@
/turf/open/floor/plasteel,
/area/hallway/primary/starboard)
"bZP" = (
/obj/structure/cable,
/turf/open/floor/plating/airless,
/area/space/nearstation)
/obj/machinery/door/airlock/external{
name = "Prison External Airlock";
req_access_txt = "2"
},
/obj/effect/mapping_helpers/airlock/cyclelink_helper{
dir = 1
},
/obj/structure/cable{
icon_state = "1-2"
},
/turf/open/floor/plasteel/dark,
/area/security/prison)
"bZQ" = (
/obj/structure/closet/l3closet/janitor,
/obj/structure/window/reinforced,
@@ -67690,11 +67720,6 @@
},
/area/ai_monitored/turret_protected/ai)
"ceA" = (
/obj/machinery/door/airlock/external{
name = "Satellite External Airlock";
req_one_access_txt = "32;19"
},
/obj/effect/mapping_helpers/airlock/cyclelink_helper,
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/obj/structure/cable{
icon_state = "1-2"
@@ -69610,15 +69635,12 @@
/turf/open/floor/plasteel,
/area/engine/atmos)
"chO" = (
/obj/structure/sign/warning/vacuum/external,
/turf/closed/wall,
/obj/structure/reagent_dispensers/fueltank,
/turf/open/floor/plasteel/dark,
/area/ai_monitored/turret_protected/aisat/atmos)
"chP" = (
/obj/structure/reagent_dispensers/watertank,
/obj/structure/reagent_dispensers/watertank,
/obj/effect/turf_decal/delivery,
/obj/machinery/light,
/turf/open/floor/plasteel/dark,
/obj/structure/sign/warning/vacuum/external,
/turf/closed/wall,
/area/ai_monitored/turret_protected/aisat/atmos)
"chQ" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
@@ -69697,12 +69719,19 @@
/turf/open/floor/plasteel,
/area/engine/engineering)
"chU" = (
/obj/machinery/door/airlock/external{
name = "Solar Maintenance";
req_access_txt = "10; 13"
},
/obj/structure/cable{
icon_state = "4-8"
},
/obj/structure/lattice/catwalk,
/turf/open/floor/plating/airless,
/area/solar/port/aft)
/obj/effect/mapping_helpers/airlock/cyclelink_helper{
dir = 4
},
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/plating,
/area/maintenance/solars/port/aft)
"chW" = (
/obj/machinery/door/firedoor,
/obj/machinery/door/airlock/hatch{
@@ -71343,16 +71372,9 @@
/turf/open/floor/plating,
/area/engine/engineering)
"ckJ" = (
/obj/machinery/door/airlock/external{
name = "Solar Maintenance";
req_access_txt = "10; 13"
},
/obj/structure/cable{
icon_state = "4-8"
},
/obj/effect/mapping_helpers/airlock/cyclelink_helper{
dir = 8
},
/turf/open/floor/plating,
/area/maintenance/solars/starboard/aft)
"ckK" = (
@@ -71763,16 +71785,9 @@
/turf/open/space/basic,
/area/space/nearstation)
"clx" = (
/obj/machinery/door/airlock/external{
name = "Solar Maintenance";
req_access_txt = "10; 13"
},
/obj/structure/cable{
icon_state = "4-8"
},
/obj/effect/mapping_helpers/airlock/cyclelink_helper{
dir = 4
},
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/plating,
/area/maintenance/solars/port/aft)
@@ -74873,6 +74888,9 @@
dir = 8
},
/obj/effect/decal/cleanable/dirt,
/obj/structure/cable{
icon_state = "1-4"
},
/turf/open/floor/plating{
icon_state = "platingdmg1"
},
@@ -74942,6 +74960,9 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
/obj/structure/cable{
icon_state = "4-8"
},
/turf/open/floor/plasteel/dark,
/area/maintenance/disposal)
"crg" = (
@@ -76410,14 +76431,12 @@
/turf/open/floor/plating/airless,
/area/solar/starboard/aft)
"ctO" = (
/obj/machinery/door/airlock/external{
name = "External Airlock";
req_access_txt = "13"
},
/obj/structure/cable{
icon_state = "1-2"
},
/turf/open/floor/plasteel/dark,
/turf/open/floor/plating{
icon_state = "platingdmg1"
},
/area/maintenance/disposal)
"ctP" = (
/obj/structure/cable{
@@ -76438,16 +76457,9 @@
/turf/open/floor/plating/airless,
/area/solar/starboard/aft)
"ctS" = (
/obj/machinery/door/airlock/external{
name = "Solar Maintenance";
req_access_txt = "10; 13"
},
/obj/structure/cable{
icon_state = "4-8"
},
/obj/effect/mapping_helpers/airlock/cyclelink_helper{
dir = 4
},
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/plating,
/area/maintenance/solars/port/fore)
@@ -77673,12 +77685,18 @@
/turf/open/floor/plating,
/area/maintenance/disposal)
"cwb" = (
/obj/machinery/door/airlock/external{
name = "Solar Maintenance";
req_access_txt = "10; 13"
},
/obj/structure/cable{
icon_state = "4-8"
},
/obj/structure/lattice/catwalk,
/turf/open/floor/plating/airless,
/area/solar/starboard/aft)
/obj/effect/mapping_helpers/airlock/cyclelink_helper{
dir = 8
},
/turf/open/floor/plating,
/area/maintenance/solars/starboard/aft)
"cwc" = (
/obj/machinery/atmospherics/components/binary/pump/on,
/obj/machinery/airlock_sensor/incinerator_atmos{
@@ -77774,9 +77792,9 @@
/area/maintenance/starboard/aft)
"cwk" = (
/obj/structure/cable{
icon_state = "1-2"
icon_state = "2-8"
},
/turf/open/floor/plating/asteroid/airless,
/turf/open/floor/plating/airless,
/area/space/nearstation)
"cwl" = (
/obj/structure/cable{
@@ -77954,13 +77972,6 @@
/turf/open/floor/plating,
/area/maintenance/starboard)
"cwD" = (
/obj/machinery/door/airlock/external{
name = "External Airlock";
req_access_txt = "13"
},
/obj/effect/mapping_helpers/airlock/cyclelink_helper{
dir = 8
},
/turf/open/floor/plasteel/dark,
/area/maintenance/starboard)
"cwE" = (
@@ -78131,6 +78142,9 @@
icon_state = "1-8"
},
/obj/effect/decal/cleanable/blood/old,
/obj/structure/cable{
icon_state = "1-2"
},
/turf/open/floor/plating,
/area/maintenance/disposal)
"cwQ" = (
@@ -78244,6 +78258,9 @@
dir = 4
},
/obj/effect/decal/cleanable/dirt,
/obj/structure/cable{
icon_state = "4-8"
},
/turf/open/floor/plating{
icon_state = "platingdmg3"
},
@@ -78301,6 +78318,9 @@
},
/obj/effect/decal/cleanable/dirt,
/obj/effect/decal/cleanable/blood/old,
/obj/structure/cable{
icon_state = "2-8"
},
/turf/open/floor/plating,
/area/maintenance/disposal)
"cxh" = (
@@ -78340,6 +78360,9 @@
/area/maintenance/disposal)
"cxj" = (
/obj/effect/decal/cleanable/dirt,
/obj/structure/cable{
icon_state = "1-2"
},
/turf/open/floor/plating{
icon_state = "platingdmg3"
},
@@ -78387,17 +78410,21 @@
},
/area/maintenance/port/fore)
"cxp" = (
/obj/structure/cable{
icon_state = "1-4"
/obj/machinery/door/airlock/external{
name = "External Airlock";
req_access_txt = "13"
},
/turf/open/floor/plating/airless,
/area/space/nearstation)
/obj/structure/cable{
icon_state = "1-2"
},
/turf/open/floor/plasteel/dark,
/area/maintenance/disposal)
"cxq" = (
/obj/structure/cable{
icon_state = "2-8"
/obj/effect/decal/cleanable/cobweb,
/turf/open/floor/plating{
icon_state = "platingdmg1"
},
/turf/open/floor/plating/airless,
/area/space/nearstation)
/area/maintenance/fore)
"cxr" = (
/obj/structure/sign/poster/contraband/clown,
/turf/closed/wall/rust,
@@ -78498,6 +78525,7 @@
icon_state = "4-8"
},
/obj/machinery/atmospherics/pipe/manifold/supply/hidden,
/mob/living/simple_animal/opossum/poppy,
/turf/open/floor/plating{
icon_state = "platingdmg3"
},
@@ -83809,16 +83837,9 @@
},
/area/maintenance/starboard)
"cMH" = (
/obj/machinery/door/airlock/external{
name = "Solar Maintenance";
req_access_txt = "10; 13"
},
/obj/structure/cable{
icon_state = "4-8"
},
/obj/effect/mapping_helpers/airlock/cyclelink_helper{
dir = 8
},
/turf/open/floor/plating,
/area/maintenance/solars/starboard/fore)
"cMI" = (
@@ -84486,13 +84507,6 @@
/turf/open/space/basic,
/area/space/nearstation)
"cUD" = (
/obj/machinery/door/airlock/external{
name = "Prison External Airlock";
req_access_txt = "2"
},
/obj/effect/mapping_helpers/airlock/cyclelink_helper{
dir = 1
},
/obj/structure/cable{
icon_state = "1-2"
},
@@ -84510,6 +84524,10 @@
icon_state = "wood-broken"
},
/area/security/vacantoffice)
"dky" = (
/obj/structure/cable,
/turf/open/floor/plating/airless,
/area/space/nearstation)
"dlg" = (
/obj/machinery/light,
/turf/open/floor/wood,
@@ -84661,6 +84679,12 @@
/obj/effect/decal/cleanable/cobweb/cobweb2,
/turf/closed/mineral/random/labormineral,
/area/space/nearstation)
"fAn" = (
/obj/structure/sign/warning/vacuum/external{
pixel_y = 32
},
/turf/open/floor/plating/airless,
/area/space/nearstation)
"fXq" = (
/obj/effect/turf_decal/tile/neutral{
dir = 8
@@ -84902,6 +84926,11 @@
/obj/machinery/light,
/turf/open/floor/plating/airless,
/area/hallway/secondary/entry)
"jGN" = (
/obj/effect/decal/cleanable/dirt,
/mob/living/simple_animal/opossum,
/turf/open/floor/plating,
/area/maintenance/starboard/aft)
"jHJ" = (
/obj/machinery/atmospherics/pipe/simple/general/visible{
dir = 9
@@ -85108,6 +85137,16 @@
/obj/structure/sign/poster/ripped,
/turf/closed/wall,
/area/crew_quarters/fitness/recreation)
"lqz" = (
/obj/machinery/door/airlock/external{
name = "External Airlock";
req_access_txt = "13"
},
/obj/effect/mapping_helpers/airlock/cyclelink_helper{
dir = 8
},
/turf/open/floor/plasteel/dark,
/area/maintenance/starboard)
"lKu" = (
/obj/structure/table/wood,
/obj/item/reagent_containers/food/drinks/soda_cans/thirteenloko,
@@ -85165,6 +85204,9 @@
},
/turf/open/floor/plasteel/dark,
/area/science/research)
"mKj" = (
/turf/closed/wall/rust,
/area/security/execution/education)
"mKp" = (
/obj/structure/cable{
icon_state = "1-2"
@@ -85531,6 +85573,12 @@
icon_state = "wood-broken4"
},
/area/maintenance/port/fore)
"yaV" = (
/obj/structure/cable{
icon_state = "1-4"
},
/turf/open/floor/plating/airless,
/area/space/nearstation)
"ydo" = (
/obj/structure/cable{
icon_state = "4-8"
@@ -99344,9 +99392,9 @@ bTK
bVs
hNk
bXG
abp
cZm
bZG
aeU
fAn
aeU
aeU
aeU
@@ -99603,7 +99651,7 @@ cTF
bXH
cUD
bZP
aeU
dky
coy
aeU
aeU
@@ -99856,19 +99904,19 @@ aaG
aez
cIj
aeB
cZm
mKj
aez
aez
aez
cko
cko
cko
aeU
aeU
aeU
aeU
aeU
cnS
chU
aeU
cnS
aUz
aeU
aeu
@@ -100311,9 +100359,9 @@ aeu
aeU
aeU
aeU
aeU
ctH
aqp
aeU
ctH
aeu
aeu
aeu
@@ -112385,7 +112433,7 @@ aaa
aaa
aeU
aUz
aeu
adH
adH
adH
adH
@@ -112642,8 +112690,8 @@ aaa
aaa
acm
aeU
aeU
adQ
cxq
alN
chj
aoc
@@ -112899,7 +112947,7 @@ aeR
aeR
aes
aes
aes
bZG
adM
alO
amL
@@ -113156,7 +113204,7 @@ aaa
aaa
acm
aaa
aaa
adH
adH
adH
adQ
@@ -120597,9 +120645,9 @@ aaa
aaa
aaa
aaa
aeU
aeK
baH
baH
afb
baH
baH
@@ -124306,9 +124354,9 @@ cpb
crf
cnu
cnu
cnu
cko
aeu
aeu
aaa
aaa
aaa
@@ -124564,7 +124612,7 @@ cxg
cxj
ctO
cxp
aeU
yaV
ciQ
aeU
aaa
@@ -124820,7 +124868,7 @@ cnu
cnd
cnu
cnu
cxq
cnu
cwk
cxu
aeU
@@ -125028,7 +125076,7 @@ bAP
bCf
bhQ
bhQ
bAM
jGN
bGH
bOc
bHZ
@@ -126354,9 +126402,9 @@ bzG
bzG
aeu
aeu
aeU
ckz
cwb
aeU
ckz
aeU
aUz
aeU
@@ -129376,9 +129424,9 @@ aaQ
aeo
aeo
acm
acm
acK
acm
bkd
lqz
bkd
aaa
aaa
aaa
@@ -129611,9 +129659,9 @@ aeu
aeu
aeu
aeu
aeU
cLM
auN
aeU
cLM
aeu
aeu
aeu
+11 -3
View File
@@ -44383,7 +44383,6 @@
/turf/open/floor/plasteel/white,
/area/hallway/primary/aft)
"bFB" = (
/obj/structure/reagent_dispensers/keg/aphro/strong,
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/wood{
icon_state = "wood-broken5"
@@ -80286,6 +80285,11 @@
},
/turf/open/space/basic,
/area/engine/engineering)
"eCO" = (
/obj/effect/decal/cleanable/dirt,
/mob/living/simple_animal/opossum/poppy,
/turf/open/floor/plasteel/dark,
/area/maintenance/starboard/aft)
"eDP" = (
/obj/effect/turf_decal/trimline/blue/filled/corner{
dir = 8
@@ -82039,6 +82043,10 @@
},
/turf/open/floor/plasteel/cafeteria,
/area/crew_quarters/kitchen)
"vDO" = (
/mob/living/simple_animal/opossum,
/turf/open/floor/plating,
/area/maintenance/fore)
"vDW" = (
/obj/structure/cable{
icon_state = "1-2"
@@ -107579,7 +107587,7 @@ aaA
abY
ayy
acw
acw
vDO
acw
acw
aeG
@@ -135198,7 +135206,7 @@ bPp
ccJ
clR
bQh
clN
eCO
bPp
bQh
bYx
+768
View File
@@ -0,0 +1,768 @@
//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
"a" = (
/turf/closed/indestructible/riveted,
/area/mafia)
"b" = (
/turf/closed/indestructible{
desc = "A wall with alien alloy plating.";
icon = 'icons/turf/walls/abductor_wall.dmi';
icon_state = "abductor";
name = "alien wall";
smooth = 5
},
/area/mafia)
"g" = (
/obj/mafia_game_board,
/turf/open/floor/plating{
icon_state = "platingdmg3"
},
/area/mafia)
"h" = (
/obj/structure/grille/indestructable,
/turf/open/floor/plating,
/area/mafia)
"i" = (
/turf/open/floor/fakespace,
/area/mafia)
"j" = (
/turf/closed/indestructible/abductor{
icon_state = "alien22"
},
/area/mafia)
"k" = (
/obj/mafia_game_board,
/turf/open/floor/plating,
/area/mafia)
"l" = (
/obj/structure/closet/abductor,
/turf/open/floor/plating/abductor,
/area/mafia)
"m" = (
/obj/effect/landmark/mafia,
/obj/structure/bed/abductor,
/turf/open/floor/plating/abductor,
/area/mafia)
"n" = (
/obj/effect/landmark/mafia,
/obj/structure/bed/abductor,
/turf/open/floor/plating/abductor2,
/area/mafia)
"o" = (
/obj/structure/closet/abductor,
/turf/open/floor/plating/abductor2,
/area/mafia)
"p" = (
/obj/machinery/door/poddoor/preopen{
desc = "When it's time to sleep, the lights will go out. Remember - no one in space can hear you scream.";
id = "mafia";
max_integrity = 99999;
name = "Station Night Shutters"
},
/turf/closed/indestructible/fakeglass,
/area/mafia)
"q" = (
/turf/open/floor/plating/abductor,
/area/mafia)
"r" = (
/turf/open/floor/plating/abductor2,
/area/mafia)
"t" = (
/turf/open/floor/light/colour_cycle/dancefloor_a,
/area/mafia)
"u" = (
/obj/effect/baseturf_helper/asteroid,
/obj/effect/landmark/mafia/town_center,
/turf/open/floor/light/colour_cycle/dancefloor_b,
/area/mafia)
"v" = (
/obj/mafia_game_board,
/turf/open/floor/plating{
icon_state = "panelscorched"
},
/area/mafia)
"x" = (
/obj/machinery/door/poddoor/preopen{
desc = "When it's time to sleep, the lights will go out. Remember - no one in space can hear you scream.";
id = "mafia";
max_integrity = 99999;
name = "Station Night Shutters"
},
/obj/effect/spawner/structure/window/plastitanium,
/turf/open/floor/plating/abductor2,
/area/mafia)
"z" = (
/obj/structure/grille/indestructable,
/turf/open/floor/fakespace,
/area/mafia)
"B" = (
/turf/closed/indestructible/abductor{
icon_state = "alien2"
},
/area/mafia)
"D" = (
/turf/closed/indestructible/abductor{
icon_state = "alien15"
},
/area/mafia)
"E" = (
/turf/closed/indestructible/abductor{
icon_state = "alien7"
},
/area/mafia)
"F" = (
/turf/closed/indestructible/abductor{
icon_state = "alien12"
},
/area/mafia)
"G" = (
/turf/closed/indestructible/abductor{
icon_state = "alien17"
},
/area/mafia)
"H" = (
/turf/open/space/basic,
/area/mafia)
"I" = (
/turf/closed/indestructible/abductor{
icon_state = "alien24"
},
/area/mafia)
"J" = (
/turf/closed/indestructible/abductor{
icon_state = "alien18"
},
/area/mafia)
"K" = (
/turf/closed/indestructible/abductor{
icon_state = "alien11"
},
/area/mafia)
"L" = (
/turf/closed/indestructible/abductor{
icon_state = "alien14"
},
/area/mafia)
"M" = (
/turf/closed/indestructible/abductor{
icon_state = "alien4"
},
/area/mafia)
"N" = (
/turf/closed/indestructible/abductor{
icon_state = "alien21"
},
/area/mafia)
"P" = (
/turf/closed/indestructible/abductor,
/area/mafia)
"Q" = (
/turf/closed/indestructible/abductor{
icon_state = "alien5"
},
/area/mafia)
"S" = (
/turf/closed/indestructible/abductor{
icon_state = "alien3"
},
/area/mafia)
"U" = (
/turf/closed/indestructible/abductor{
icon_state = "alien23"
},
/area/mafia)
"V" = (
/turf/closed/indestructible/abductor{
icon_state = "alien13"
},
/area/mafia)
"W" = (
/turf/closed/indestructible/abductor{
icon_state = "alien20"
},
/area/mafia)
"Y" = (
/turf/closed/indestructible/abductor{
icon_state = "alien8"
},
/area/mafia)
"Z" = (
/turf/closed/indestructible/abductor{
icon_state = "alien10"
},
/area/mafia)
(1,1,1) = {"
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
"}
(2,1,1) = {"
a
b
b
b
b
b
b
b
b
b
b
b
b
b
b
b
b
b
b
b
b
b
a
"}
(3,1,1) = {"
a
b
i
i
i
i
i
i
i
i
i
i
i
i
i
i
i
i
i
i
i
b
a
"}
(4,1,1) = {"
a
b
i
i
g
z
i
i
i
i
i
i
i
i
i
H
i
z
k
i
i
b
a
"}
(5,1,1) = {"
a
b
i
i
z
i
i
i
W
L
F
F
F
Z
P
i
i
i
h
i
i
b
a
"}
(6,1,1) = {"
a
b
i
i
i
W
L
Z
G
l
q
b
r
o
E
L
Z
P
i
i
i
b
a
"}
(7,1,1) = {"
a
b
i
i
i
N
o
r
p
m
q
x
r
n
x
q
l
B
i
i
i
b
a
"}
(8,1,1) = {"
a
b
i
i
i
U
n
r
b
b
q
b
r
b
b
q
m
M
i
i
i
b
a
"}
(9,1,1) = {"
a
b
i
i
W
G
x
r
r
x
q
x
r
x
q
q
x
E
P
i
i
b
a
"}
(10,1,1) = {"
a
b
i
i
N
l
x
b
x
x
x
x
x
x
x
b
x
o
B
i
i
b
a
"}
(11,1,1) = {"
a
b
i
i
j
m
q
q
q
x
t
t
t
x
r
r
r
n
S
i
i
b
a
"}
(12,1,1) = {"
a
b
i
i
j
b
x
b
x
x
t
u
t
x
x
b
x
b
S
i
i
b
a
"}
(13,1,1) = {"
a
b
i
i
j
n
r
r
r
x
t
t
t
x
q
q
q
m
S
i
i
b
a
"}
(14,1,1) = {"
a
b
i
i
U
o
x
b
x
x
x
x
x
x
x
b
x
l
M
i
i
b
a
"}
(15,1,1) = {"
a
b
i
i
I
J
x
q
q
x
r
x
q
x
r
r
x
Y
Q
i
i
b
a
"}
(16,1,1) = {"
a
b
i
i
i
N
m
q
b
b
r
b
q
b
b
r
n
B
i
i
i
b
a
"}
(17,1,1) = {"
a
b
i
i
i
U
l
q
x
n
r
x
q
m
x
r
o
M
i
i
i
b
a
"}
(18,1,1) = {"
a
b
i
i
i
I
D
K
J
o
r
b
q
l
Y
D
K
Q
i
i
i
b
a
"}
(19,1,1) = {"
a
b
i
i
z
i
i
i
I
D
V
V
V
K
Q
i
i
i
z
i
i
b
a
"}
(20,1,1) = {"
a
b
i
i
k
z
i
i
i
i
i
i
i
i
i
i
i
z
v
i
i
b
a
"}
(21,1,1) = {"
a
b
i
i
i
i
i
i
i
i
i
i
i
i
i
i
i
i
i
i
i
b
a
"}
(22,1,1) = {"
a
b
b
b
b
b
b
b
b
b
b
b
b
b
b
b
b
b
b
b
b
b
a
"}
(23,1,1) = {"
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
"}
+675
View File
@@ -0,0 +1,675 @@
//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
"a" = (
/turf/closed/indestructible/riveted,
/area/mafia)
"c" = (
/turf/closed/wall/rust,
/area/mafia)
"d" = (
/turf/open/floor/plating,
/area/mafia)
"e" = (
/turf/open/floor/plating{
icon_state = "platingdmg3"
},
/area/mafia)
"f" = (
/turf/open/floor/plating{
icon_state = "panelscorched"
},
/area/mafia)
"g" = (
/obj/mafia_game_board,
/turf/open/floor/plating{
icon_state = "platingdmg3"
},
/area/mafia)
"h" = (
/obj/structure/grille/indestructable,
/turf/open/floor/plating,
/area/mafia)
"i" = (
/turf/open/floor/plating{
icon_state = "platingdmg1"
},
/area/mafia)
"j" = (
/obj/machinery/door/airlock/maintenance_hatch{
max_integrity = 99999;
name = "Maintenance"
},
/obj/effect/mapping_helpers/airlock/locked,
/turf/open/floor/plating,
/area/mafia)
"k" = (
/obj/mafia_game_board,
/turf/open/floor/plating,
/area/mafia)
"l" = (
/obj/structure/closet/cabinet{
anchored = 1
},
/turf/open/floor/plasteel/dark,
/area/mafia)
"m" = (
/obj/effect/landmark/mafia,
/turf/open/floor/plasteel/dark,
/area/mafia)
"n" = (
/obj/effect/landmark/mafia,
/turf/open/floor/plasteel,
/area/mafia)
"o" = (
/obj/structure/closet/cabinet{
anchored = 1
},
/turf/open/floor/plasteel,
/area/mafia)
"p" = (
/obj/machinery/door/poddoor/preopen{
desc = "When it's time to sleep, the lights will go out. Remember - no one in space can hear you scream.";
id = "mafia";
max_integrity = 99999;
name = "Station Night Shutters"
},
/turf/closed/indestructible/fakeglass,
/area/mafia)
"q" = (
/turf/open/floor/plasteel/dark,
/area/mafia)
"r" = (
/turf/open/floor/plasteel,
/area/mafia)
"s" = (
/turf/open/floor/fakespace,
/area/mafia)
"t" = (
/turf/open/floor/plasteel/solarpanel,
/area/mafia)
"u" = (
/obj/effect/baseturf_helper/asteroid,
/obj/effect/landmark/mafia/town_center,
/turf/open/floor/plasteel/solarpanel,
/area/mafia)
"v" = (
/obj/mafia_game_board,
/turf/open/floor/plating{
icon_state = "panelscorched"
},
/area/mafia)
(1,1,1) = {"
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
"}
(2,1,1) = {"
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
"}
(3,1,1) = {"
a
a
a
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
a
a
a
"}
(4,1,1) = {"
a
a
a
c
g
h
d
d
d
d
d
e
d
d
d
d
d
h
k
c
a
a
a
"}
(5,1,1) = {"
a
a
a
c
h
d
d
e
a
a
j
a
j
a
a
d
d
i
h
c
a
a
a
"}
(6,1,1) = {"
a
a
a
c
i
a
a
j
a
l
q
a
r
o
a
j
a
a
d
c
a
a
a
"}
(7,1,1) = {"
a
a
c
c
d
a
o
r
p
m
q
p
r
n
p
q
l
a
d
c
c
a
a
"}
(8,1,1) = {"
a
a
c
d
d
a
n
r
a
a
q
a
r
a
a
q
m
a
d
d
c
a
a
"}
(9,1,1) = {"
a
a
c
d
a
a
p
r
r
p
q
p
r
p
q
q
p
a
a
d
c
a
a
"}
(10,1,1) = {"
a
a
c
d
a
l
p
a
p
p
p
p
p
p
p
a
p
o
a
d
c
a
a
"}
(11,1,1) = {"
a
a
c
d
j
m
q
q
q
p
s
t
s
p
r
r
r
n
j
e
c
a
a
"}
(12,1,1) = {"
a
a
c
e
a
a
p
a
p
p
t
u
t
p
p
a
p
a
a
d
c
a
a
"}
(13,1,1) = {"
a
a
c
d
j
n
r
r
r
p
s
t
s
p
q
q
q
m
j
d
c
a
a
"}
(14,1,1) = {"
a
a
c
d
a
o
p
a
p
p
p
p
p
p
p
a
p
l
a
i
c
a
a
"}
(15,1,1) = {"
a
a
c
d
a
a
p
q
q
p
r
p
q
p
r
r
p
a
a
d
c
a
a
"}
(16,1,1) = {"
a
a
c
f
d
a
m
q
a
a
r
a
q
a
a
r
n
a
d
d
c
a
a
"}
(17,1,1) = {"
a
a
c
c
d
a
l
q
p
n
r
p
q
m
p
r
o
a
d
c
c
a
a
"}
(18,1,1) = {"
a
a
a
c
d
a
a
j
a
o
r
a
q
l
a
j
a
a
d
c
a
a
a
"}
(19,1,1) = {"
a
a
a
c
h
i
d
d
a
a
j
a
j
a
a
d
e
d
h
c
a
a
a
"}
(20,1,1) = {"
a
a
a
c
k
h
d
d
e
d
d
d
d
d
d
d
d
h
v
c
a
a
a
"}
(21,1,1) = {"
a
a
a
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
a
a
a
"}
(22,1,1) = {"
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
"}
(23,1,1) = {"
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
"}
+724
View File
@@ -0,0 +1,724 @@
//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
"a" = (
/turf/closed/indestructible/riveted,
/area/mafia)
"b" = (
/turf/closed/wall/mineral/iron,
/area/mafia)
"c" = (
/turf/closed/wall/rust,
/area/mafia)
"d" = (
/turf/open/floor/plating,
/area/mafia)
"e" = (
/turf/open/floor/plating{
icon_state = "platingdmg3"
},
/area/mafia)
"f" = (
/turf/open/floor/plating{
icon_state = "panelscorched"
},
/area/mafia)
"g" = (
/obj/mafia_game_board,
/turf/open/floor/plating{
icon_state = "platingdmg3"
},
/area/mafia)
"h" = (
/obj/structure/grille/indestructable,
/turf/open/floor/plating,
/area/mafia)
"i" = (
/turf/open/floor/plating{
icon_state = "platingdmg1"
},
/area/mafia)
"j" = (
/turf/closed/indestructible/fakedoor,
/area/mafia)
"k" = (
/obj/mafia_game_board,
/turf/open/floor/plating,
/area/mafia)
"l" = (
/obj/structure/closet/crate/coffin,
/turf/open/floor/carpet/red,
/area/mafia)
"m" = (
/obj/effect/landmark/mafia,
/turf/open/floor/carpet/red,
/area/mafia)
"n" = (
/obj/effect/landmark/mafia,
/turf/open/floor/plasteel/chapel{
dir = 1
},
/area/mafia)
"o" = (
/obj/structure/closet/crate/coffin,
/turf/open/floor/plasteel/chapel{
dir = 4
},
/area/mafia)
"p" = (
/obj/machinery/door/poddoor/preopen{
desc = "When it's time to sleep, the lights will go out. Remember - no one in space can hear you scream.";
id = "mafia";
max_integrity = 99999;
name = "Station Night Shutters"
},
/obj/effect/spawner/structure/window/plastitanium,
/turf/open/space/basic,
/area/mafia)
"q" = (
/turf/open/floor/carpet/red,
/area/mafia)
"r" = (
/turf/open/floor/plasteel/chapel{
dir = 8
},
/area/mafia)
"t" = (
/turf/open/floor/carpet/royalblack,
/area/mafia)
"u" = (
/obj/effect/baseturf_helper/asteroid,
/obj/effect/landmark/mafia/town_center,
/turf/open/floor/carpet/royalblack,
/area/mafia)
"v" = (
/obj/mafia_game_board,
/turf/open/floor/plating{
icon_state = "panelscorched"
},
/area/mafia)
"D" = (
/obj/effect/landmark/mafia,
/turf/open/floor/plasteel/chapel{
dir = 4
},
/area/mafia)
"E" = (
/turf/open/floor/plasteel/chapel{
dir = 4
},
/area/mafia)
"H" = (
/obj/structure/closet/cabinet{
anchored = 1
},
/turf/open/floor/carpet/red,
/area/mafia)
"J" = (
/obj/structure/closet/crate/coffin,
/turf/open/floor/plasteel/chapel{
dir = 1
},
/area/mafia)
"M" = (
/obj/effect/landmark/mafia,
/turf/open/floor/plasteel/chapel{
dir = 8
},
/area/mafia)
"N" = (
/obj/effect/landmark/mafia,
/turf/open/floor/plasteel/chapel,
/area/mafia)
"O" = (
/turf/open/floor/plasteel/chapel,
/area/mafia)
"P" = (
/obj/structure/closet/crate/coffin,
/turf/open/floor/plasteel/chapel,
/area/mafia)
"Q" = (
/obj/structure/closet/crate/coffin,
/turf/open/floor/plasteel/chapel{
dir = 8
},
/area/mafia)
"X" = (
/turf/open/floor/plasteel/chapel{
dir = 1
},
/area/mafia)
(1,1,1) = {"
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
"}
(2,1,1) = {"
a
b
b
b
b
b
b
b
b
b
b
b
b
b
b
b
b
b
b
b
b
b
a
"}
(3,1,1) = {"
a
b
b
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
b
b
a
"}
(4,1,1) = {"
a
b
b
c
g
h
d
d
d
d
d
e
d
d
d
d
d
h
k
c
b
b
a
"}
(5,1,1) = {"
a
b
b
c
h
d
d
e
b
b
j
b
j
b
b
d
d
i
h
c
b
b
a
"}
(6,1,1) = {"
a
b
b
c
i
b
b
j
b
l
q
b
X
Q
b
j
b
b
d
c
b
b
a
"}
(7,1,1) = {"
a
b
c
c
d
b
J
r
p
m
q
p
E
N
p
q
l
b
d
c
c
b
a
"}
(8,1,1) = {"
a
b
c
d
d
b
D
O
b
b
q
b
r
b
b
q
m
b
d
d
c
b
a
"}
(9,1,1) = {"
a
b
c
d
b
b
p
X
r
p
q
p
O
p
q
q
p
b
b
d
c
b
a
"}
(10,1,1) = {"
a
b
c
d
b
l
p
b
p
p
p
p
p
p
p
b
p
Q
b
d
c
b
a
"}
(11,1,1) = {"
a
b
c
d
j
m
q
q
q
p
t
t
t
p
X
r
E
N
j
e
c
b
a
"}
(12,1,1) = {"
a
b
c
e
b
b
p
b
p
p
t
u
t
p
p
b
p
b
b
d
c
b
a
"}
(13,1,1) = {"
a
b
c
d
j
n
r
E
O
p
t
t
t
p
q
q
q
m
j
d
c
b
a
"}
(14,1,1) = {"
a
b
c
d
b
o
p
b
p
p
p
p
p
p
p
b
p
l
b
i
c
b
a
"}
(15,1,1) = {"
a
b
c
d
b
b
p
q
q
p
X
p
q
p
E
O
p
b
b
d
c
b
a
"}
(16,1,1) = {"
a
b
c
f
d
b
m
q
b
b
E
b
q
b
b
X
M
b
d
d
c
b
a
"}
(17,1,1) = {"
a
b
c
c
d
b
l
q
p
n
r
p
q
m
p
E
P
b
d
c
c
b
a
"}
(18,1,1) = {"
a
b
b
c
d
b
b
j
b
o
O
b
q
H
b
j
b
b
d
c
b
b
a
"}
(19,1,1) = {"
a
b
b
c
h
i
d
d
b
b
j
b
j
b
b
d
e
d
h
c
b
b
a
"}
(20,1,1) = {"
a
b
b
c
k
h
d
d
e
d
d
d
d
d
d
d
d
h
v
c
b
b
a
"}
(21,1,1) = {"
a
b
b
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
b
b
a
"}
(22,1,1) = {"
a
b
b
b
b
b
b
b
b
b
b
b
b
b
b
b
b
b
b
b
b
b
a
"}
(23,1,1) = {"
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
"}
+976
View File
@@ -0,0 +1,976 @@
//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
"a" = (
/turf/closed/indestructible/riveted,
/area/mafia)
"c" = (
/turf/closed/wall/rust,
/area/mafia)
"d" = (
/turf/open/floor/plating,
/area/mafia)
"e" = (
/turf/open/floor/plating{
icon_state = "platingdmg3"
},
/area/mafia)
"f" = (
/turf/open/floor/plating{
icon_state = "panelscorched"
},
/area/mafia)
"g" = (
/obj/mafia_game_board,
/turf/open/floor/plating{
icon_state = "platingdmg3"
},
/area/mafia)
"h" = (
/obj/structure/grille/indestructable,
/turf/open/floor/plating,
/area/mafia)
"i" = (
/turf/open/floor/plating{
icon_state = "platingdmg1"
},
/area/mafia)
"j" = (
/obj/machinery/door/airlock/external{
max_integrity = 99999;
name = "Maintenance"
},
/obj/effect/mapping_helpers/airlock/locked,
/turf/open/floor/plating,
/area/mafia)
"k" = (
/obj/mafia_game_board,
/turf/open/floor/plating,
/area/mafia)
"l" = (
/obj/structure/closet{
desc = "It's a storage unit. For mining stuff. Y'know.";
icon_state = "mining";
name = "miner equipment locker"
},
/obj/item/clothing/under/rank/cargo/miner/lavaland,
/turf/open/floor/grass/fakebasalt,
/area/mafia)
"m" = (
/obj/effect/landmark/mafia,
/turf/open/floor/grass/fakebasalt,
/area/mafia)
"n" = (
/obj/effect/landmark/mafia,
/obj/effect/turf_decal/trimline/brown/filled/line{
icon_state = "trimline_fill";
dir = 9
},
/obj/effect/turf_decal/trimline/brown/filled/corner,
/turf/open/floor/plasteel,
/area/mafia)
"o" = (
/obj/effect/turf_decal/trimline/brown/filled/end{
icon_state = "trimline_end_fill";
dir = 4
},
/obj/structure/closet{
desc = "It's a storage unit. For mining stuff. Y'know.";
icon_state = "mining";
name = "miner equipment locker"
},
/obj/item/clothing/under/rank/cargo/miner/lavaland,
/turf/open/floor/plasteel,
/area/mafia)
"p" = (
/obj/machinery/door/poddoor/preopen{
desc = "When it's time to sleep, the lights will go out. Remember - no one in space can hear you scream.";
id = "mafia";
max_integrity = 99999;
name = "Station Night Shutters"
},
/turf/closed/indestructible/fakeglass,
/area/mafia)
"q" = (
/turf/open/floor/grass/fakebasalt,
/area/mafia)
"r" = (
/obj/effect/turf_decal/trimline/brown/filled/line{
icon_state = "trimline_fill";
dir = 9
},
/obj/structure/closet{
desc = "It's a storage unit. For mining stuff. Y'know.";
icon_state = "mining";
name = "miner equipment locker"
},
/obj/item/clothing/under/rank/cargo/miner/lavaland,
/turf/open/floor/plasteel,
/area/mafia)
"s" = (
/obj/effect/turf_decal/trimline/brown/filled/line{
icon_state = "trimline_fill";
dir = 9
},
/turf/open/floor/plasteel,
/area/mafia)
"t" = (
/obj/effect/turf_decal/tile/red,
/obj/effect/turf_decal/tile/red{
dir = 8
},
/turf/open/floor/plasteel/dark,
/area/mafia)
"u" = (
/obj/effect/turf_decal/tile/red{
dir = 4
},
/obj/effect/turf_decal/tile/red,
/turf/open/floor/plasteel/dark,
/area/mafia)
"v" = (
/obj/mafia_game_board,
/turf/open/floor/plating{
icon_state = "panelscorched"
},
/area/mafia)
"w" = (
/obj/effect/turf_decal/trimline/brown/filled/line{
icon_state = "trimline_fill";
dir = 1
},
/obj/effect/turf_decal/trimline/brown/filled/corner,
/turf/open/floor/plasteel,
/area/mafia)
"x" = (
/obj/effect/turf_decal/trimline/brown/filled/line{
icon_state = "trimline_fill";
dir = 1
},
/obj/effect/turf_decal/trimline/brown/filled/line,
/turf/open/floor/plasteel,
/area/mafia)
"y" = (
/obj/effect/turf_decal/trimline/brown/filled/end{
icon_state = "trimline_end_fill";
dir = 4
},
/turf/open/floor/plasteel,
/area/mafia)
"z" = (
/obj/effect/turf_decal/trimline/brown/filled/line{
icon_state = "trimline_fill";
dir = 5
},
/obj/structure/closet{
desc = "It's a storage unit. For mining stuff. Y'know.";
icon_state = "mining";
name = "miner equipment locker"
},
/obj/item/clothing/under/rank/cargo/miner/lavaland,
/turf/open/floor/plasteel,
/area/mafia)
"A" = (
/obj/effect/landmark/mafia,
/obj/effect/turf_decal/trimline/brown/filled/line{
icon_state = "trimline_fill";
dir = 6
},
/turf/open/floor/plasteel,
/area/mafia)
"B" = (
/obj/effect/turf_decal/trimline/brown/filled/end{
icon_state = "trimline_end_fill";
dir = 1
},
/turf/open/floor/plasteel,
/area/mafia)
"C" = (
/obj/effect/turf_decal/trimline/brown/filled/line{
icon_state = "trimline_fill";
dir = 4
},
/obj/effect/turf_decal/trimline/brown/filled/line{
icon_state = "trimline_fill";
dir = 8
},
/turf/open/floor/plasteel,
/area/mafia)
"D" = (
/obj/effect/turf_decal/trimline/brown/filled/line{
icon_state = "trimline_fill";
dir = 10
},
/obj/effect/turf_decal/trimline/brown/filled/corner{
icon_state = "trimline_corner_fill";
dir = 4
},
/turf/open/floor/plasteel,
/area/mafia)
"E" = (
/obj/effect/turf_decal/trimline/brown/filled/line{
icon_state = "trimline_fill";
dir = 1
},
/obj/effect/turf_decal/trimline/brown/filled/corner{
icon_state = "trimline_corner_fill";
dir = 8
},
/turf/open/floor/plasteel,
/area/mafia)
"F" = (
/obj/effect/turf_decal/trimline/brown/filled/line{
icon_state = "trimline_fill";
dir = 5
},
/turf/open/floor/plasteel,
/area/mafia)
"G" = (
/obj/effect/landmark/mafia,
/obj/effect/turf_decal/trimline/brown/filled/line{
icon_state = "trimline_fill";
dir = 10
},
/turf/open/floor/plasteel,
/area/mafia)
"H" = (
/obj/effect/turf_decal/trimline/brown/filled/line{
icon_state = "trimline_fill";
dir = 10
},
/obj/structure/closet{
desc = "It's a storage unit. For mining stuff. Y'know.";
icon_state = "mining";
name = "miner equipment locker"
},
/obj/item/clothing/under/rank/cargo/miner/lavaland,
/turf/open/floor/plasteel,
/area/mafia)
"I" = (
/obj/effect/turf_decal/trimline/brown/filled/line{
icon_state = "trimline_fill";
dir = 6
},
/obj/structure/closet{
desc = "It's a storage unit. For mining stuff. Y'know.";
icon_state = "mining";
name = "miner equipment locker"
},
/obj/item/clothing/under/rank/cargo/miner/lavaland,
/turf/open/floor/plasteel,
/area/mafia)
"J" = (
/obj/effect/landmark/mafia,
/obj/effect/turf_decal/trimline/brown/filled/line{
icon_state = "trimline_fill";
dir = 6
},
/obj/effect/turf_decal/trimline/brown/filled/corner{
icon_state = "trimline_corner_fill";
dir = 1
},
/turf/open/floor/plasteel,
/area/mafia)
"K" = (
/obj/effect/turf_decal/trimline/brown/filled/end{
icon_state = "trimline_end_fill";
dir = 8
},
/obj/structure/closet{
desc = "It's a storage unit. For mining stuff. Y'know.";
icon_state = "mining";
name = "miner equipment locker"
},
/obj/item/clothing/under/rank/cargo/miner/lavaland,
/turf/open/floor/plasteel,
/area/mafia)
"L" = (
/obj/effect/landmark/mafia,
/obj/effect/turf_decal/trimline/brown/filled/line{
icon_state = "trimline_fill";
dir = 5
},
/turf/open/floor/plasteel,
/area/mafia)
"M" = (
/obj/effect/turf_decal/trimline/brown/filled/line{
icon_state = "trimline_fill";
dir = 10
},
/turf/open/floor/plasteel,
/area/mafia)
"N" = (
/obj/effect/turf_decal/trimline/brown/filled/line,
/obj/effect/turf_decal/trimline/brown/filled/corner{
icon_state = "trimline_corner_fill";
dir = 4
},
/turf/open/floor/plasteel,
/area/mafia)
"O" = (
/obj/effect/turf_decal/trimline/brown/filled/corner{
icon_state = "trimline_corner_fill";
dir = 8
},
/obj/effect/turf_decal/trimline/brown/filled/line{
icon_state = "trimline_fill";
dir = 5
},
/turf/open/floor/plasteel,
/area/mafia)
"P" = (
/obj/effect/turf_decal/trimline/brown/filled/end,
/turf/open/floor/plasteel,
/area/mafia)
"Q" = (
/obj/effect/landmark/mafia,
/obj/effect/turf_decal/trimline/brown/filled/line{
icon_state = "trimline_fill";
dir = 9
},
/turf/open/floor/plasteel,
/area/mafia)
"R" = (
/obj/effect/baseturf_helper/asteroid,
/obj/effect/landmark/mafia/town_center,
/obj/effect/turf_decal/tile/red,
/obj/effect/turf_decal/tile/red{
dir = 1
},
/obj/effect/turf_decal/tile/red{
dir = 8
},
/obj/effect/turf_decal/tile/red{
dir = 4
},
/turf/open/floor/plasteel/dark,
/area/mafia)
"S" = (
/obj/effect/turf_decal/trimline/brown/filled/end{
icon_state = "trimline_end_fill";
dir = 8
},
/turf/open/floor/plasteel,
/area/mafia)
"T" = (
/obj/effect/turf_decal/trimline/brown/filled/line,
/obj/effect/turf_decal/trimline/brown/filled/line{
icon_state = "trimline_fill";
dir = 1
},
/turf/open/floor/plasteel,
/area/mafia)
"U" = (
/obj/effect/turf_decal/trimline/brown/filled/line,
/obj/effect/turf_decal/trimline/brown/filled/corner{
icon_state = "trimline_corner_fill";
dir = 1
},
/turf/open/floor/plasteel,
/area/mafia)
"V" = (
/obj/effect/turf_decal/trimline/brown/filled/line{
icon_state = "trimline_fill";
dir = 6
},
/turf/open/floor/plasteel,
/area/mafia)
"W" = (
/obj/effect/turf_decal/tile/red{
dir = 8
},
/obj/effect/turf_decal/tile/red{
dir = 1
},
/turf/open/floor/plasteel/dark,
/area/mafia)
"X" = (
/obj/effect/turf_decal/tile/red{
dir = 1
},
/obj/effect/turf_decal/tile/red{
dir = 4
},
/turf/open/floor/plasteel/dark,
/area/mafia)
"Y" = (
/turf/closed/indestructible{
icon = 'icons/turf/walls/reinforced_wall.dmi';
icon_state = "r_wall";
name = "reinforced wall"
},
/area/mafia)
(1,1,1) = {"
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
"}
(2,1,1) = {"
a
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
a
"}
(3,1,1) = {"
a
Y
Y
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
Y
Y
a
"}
(4,1,1) = {"
a
Y
Y
c
g
h
d
d
d
d
d
e
d
d
d
d
d
h
k
c
Y
Y
a
"}
(5,1,1) = {"
a
Y
Y
c
h
d
d
e
Y
Y
j
Y
j
Y
Y
d
d
i
h
c
Y
Y
a
"}
(6,1,1) = {"
a
Y
Y
c
i
Y
Y
j
Y
l
q
Y
s
H
Y
j
Y
Y
d
c
Y
Y
a
"}
(7,1,1) = {"
a
Y
c
c
d
Y
r
M
p
m
q
p
w
A
p
q
l
Y
d
c
c
Y
a
"}
(8,1,1) = {"
a
Y
c
d
d
Y
L
N
Y
Y
q
Y
x
Y
Y
q
m
Y
d
d
c
Y
a
"}
(9,1,1) = {"
a
Y
c
d
Y
Y
p
O
P
p
q
p
y
p
q
q
p
Y
Y
d
c
Y
a
"}
(10,1,1) = {"
a
Y
c
d
Y
l
p
Y
p
p
p
p
p
p
p
Y
p
K
Y
d
c
Y
a
"}
(11,1,1) = {"
a
Y
c
d
j
m
q
q
q
p
q
u
q
p
B
C
C
J
j
e
c
Y
a
"}
(12,1,1) = {"
a
Y
c
e
Y
Y
p
Y
p
p
t
R
X
p
p
Y
p
Y
Y
d
c
Y
a
"}
(13,1,1) = {"
a
Y
c
d
j
n
C
C
P
p
q
W
q
p
q
q
q
m
j
d
c
Y
a
"}
(14,1,1) = {"
a
Y
c
d
Y
o
p
Y
p
p
p
p
p
p
p
Y
p
l
Y
i
c
Y
a
"}
(15,1,1) = {"
a
Y
c
d
Y
Y
p
q
q
p
S
p
q
p
B
D
p
Y
Y
d
c
Y
a
"}
(16,1,1) = {"
a
Y
c
f
d
Y
m
q
Y
Y
T
Y
q
Y
Y
E
G
Y
d
d
c
Y
a
"}
(17,1,1) = {"
a
Y
c
c
d
Y
l
q
p
Q
U
p
q
m
p
F
I
Y
d
c
c
Y
a
"}
(18,1,1) = {"
a
Y
Y
c
d
Y
Y
j
Y
z
V
Y
q
l
Y
j
Y
Y
d
c
Y
Y
a
"}
(19,1,1) = {"
a
Y
Y
c
h
i
d
d
Y
Y
j
Y
j
Y
Y
d
e
d
h
c
Y
Y
a
"}
(20,1,1) = {"
a
Y
Y
c
k
h
d
d
e
d
d
d
d
d
d
d
d
h
v
c
Y
Y
a
"}
(21,1,1) = {"
a
Y
Y
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
Y
Y
a
"}
(22,1,1) = {"
a
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
a
"}
(23,1,1) = {"
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
"}
+658
View File
@@ -0,0 +1,658 @@
//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
"a" = (
/turf/closed/indestructible/riveted,
/area/mafia)
"b" = (
/turf/open/indestructible/reebe_void,
/area/mafia)
"c" = (
/turf/open/indestructible/reebe_void/spawning/lattices,
/area/mafia)
"d" = (
/obj/mafia_game_board,
/turf/open/indestructible/reebe_void/spawning/lattices,
/area/mafia)
"e" = (
/turf/closed/wall/clockwork,
/area/mafia)
"f" = (
/turf/open/floor/clockwork/reebe,
/area/mafia)
"g" = (
/obj/effect/landmark/mafia,
/turf/open/floor/clockwork/reebe,
/area/mafia)
"h" = (
/obj/structure/window/reinforced/clockwork/fulltile,
/obj/structure/grille/ratvar,
/obj/machinery/door/poddoor/preopen{
desc = "When it's time to sleep, the lights will go out. Remember - no one in space can hear you scream.";
id = "mafia";
max_integrity = 99999;
name = "Station Night Shutters"
},
/turf/open/floor/clockwork/reebe,
/area/mafia)
"i" = (
/obj/structure/bed,
/obj/item/bedsheet/orange,
/turf/open/floor/clockwork/reebe,
/area/mafia)
"j" = (
/obj/structure/chair/brass{
dir = 4
},
/turf/open/floor/clockwork/reebe,
/area/mafia)
"k" = (
/obj/structure/chair/brass,
/turf/open/floor/clockwork/reebe,
/area/mafia)
"l" = (
/obj/structure/chair/brass{
dir = 8
},
/turf/open/floor/clockwork/reebe,
/area/mafia)
"m" = (
/obj/effect/baseturf_helper/asteroid,
/obj/effect/landmark/mafia/town_center,
/obj/structure/chair/brass,
/turf/open/floor/clockwork/reebe,
/area/mafia)
"n" = (
/obj/structure/chair/brass{
icon_state = "brass_chair";
dir = 1
},
/turf/open/floor/clockwork/reebe,
/area/mafia)
"o" = (
/obj/item/toy/plush/plushvar,
/turf/open/floor/clockwork/reebe,
/area/mafia)
"p" = (
/obj/structure/window/reinforced/clockwork/fulltile,
/obj/structure/grille/ratvar,
/turf/open/floor/clockwork/reebe,
/area/mafia)
"q" = (
/obj/item/toy/plush/plushvar,
/turf/open/indestructible/reebe_void/spawning/lattices,
/area/mafia)
(1,1,1) = {"
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
"}
(2,1,1) = {"
a
b
b
b
b
b
b
b
b
b
b
b
b
b
b
b
b
b
b
b
b
b
a
"}
(3,1,1) = {"
a
b
b
c
c
c
b
b
b
b
b
b
b
b
b
b
b
c
c
c
b
b
a
"}
(4,1,1) = {"
a
b
b
c
d
c
b
b
b
b
b
b
b
b
b
b
b
q
d
c
b
b
a
"}
(5,1,1) = {"
a
b
b
c
c
c
c
b
e
e
p
e
p
e
e
b
b
c
c
c
b
b
a
"}
(6,1,1) = {"
a
b
b
b
b
p
p
e
e
i
f
e
f
i
e
e
p
p
c
b
b
b
a
"}
(7,1,1) = {"
a
b
b
b
b
p
i
f
h
g
f
h
f
g
h
f
i
p
b
b
b
b
a
"}
(8,1,1) = {"
a
b
b
b
b
e
g
f
e
e
f
e
f
e
e
f
g
e
b
b
b
b
a
"}
(9,1,1) = {"
a
b
b
b
e
e
h
f
j
h
j
h
j
h
j
f
h
e
e
b
b
b
a
"}
(10,1,1) = {"
a
b
b
b
e
i
h
e
h
h
h
h
h
h
h
e
h
i
e
b
b
b
a
"}
(11,1,1) = {"
a
b
b
b
p
g
f
f
k
h
f
f
o
h
n
f
f
g
p
b
b
b
a
"}
(12,1,1) = {"
a
b
b
b
e
e
h
e
h
h
f
m
f
h
h
e
h
e
e
b
b
b
a
"}
(13,1,1) = {"
a
b
b
b
p
g
f
f
k
h
f
f
f
h
n
f
f
g
p
b
b
b
a
"}
(14,1,1) = {"
a
b
b
b
e
i
h
e
h
h
h
h
h
h
h
e
h
i
e
b
b
b
a
"}
(15,1,1) = {"
a
b
b
b
e
e
h
f
l
h
l
h
l
h
l
f
h
e
e
b
b
b
a
"}
(16,1,1) = {"
a
b
b
b
b
e
g
f
e
e
f
e
f
e
e
f
g
e
b
b
b
b
a
"}
(17,1,1) = {"
a
b
b
b
b
p
i
f
h
g
f
h
f
g
h
f
i
p
b
b
b
b
a
"}
(18,1,1) = {"
a
b
b
b
b
p
p
e
e
f
i
e
i
f
e
e
p
p
c
b
b
b
a
"}
(19,1,1) = {"
a
b
b
c
c
c
c
b
e
e
p
e
p
e
e
b
b
c
c
c
b
b
a
"}
(20,1,1) = {"
a
b
b
c
d
c
b
b
b
b
b
b
b
b
b
b
b
c
d
c
b
b
a
"}
(21,1,1) = {"
a
b
b
c
c
c
b
b
b
b
b
b
b
b
b
b
b
c
c
c
b
b
a
"}
(22,1,1) = {"
a
b
b
b
b
b
b
b
b
b
b
b
b
b
b
b
b
b
b
b
b
b
a
"}
(23,1,1) = {"
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
"}
+755
View File
@@ -0,0 +1,755 @@
//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
"a" = (
/turf/closed/indestructible/riveted,
/area/mafia)
"d" = (
/turf/open/floor/plating,
/area/mafia)
"e" = (
/turf/open/floor/plating{
icon_state = "platingdmg3"
},
/area/mafia)
"f" = (
/turf/open/floor/plating{
icon_state = "panelscorched"
},
/area/mafia)
"g" = (
/obj/mafia_game_board,
/turf/open/floor/plating{
icon_state = "platingdmg3"
},
/area/mafia)
"h" = (
/obj/structure/grille/indestructable,
/turf/open/floor/plating,
/area/mafia)
"i" = (
/turf/open/floor/plating{
icon_state = "platingdmg1"
},
/area/mafia)
"j" = (
/obj/machinery/door/airlock/maintenance_hatch{
max_integrity = 99999;
name = "Maintenance"
},
/obj/effect/mapping_helpers/airlock/locked,
/turf/open/floor/plating,
/area/mafia)
"k" = (
/obj/mafia_game_board,
/turf/open/floor/plating,
/area/mafia)
"l" = (
/obj/item/bedsheet/brown,
/obj/structure/bed,
/turf/open/floor/holofloor/wood,
/area/mafia)
"m" = (
/obj/effect/landmark/mafia,
/turf/open/floor/holofloor/wood,
/area/mafia)
"n" = (
/obj/item/bedsheet/green,
/obj/structure/bed,
/turf/open/floor/holofloor/wood,
/area/mafia)
"o" = (
/obj/item/bedsheet/blue,
/obj/structure/bed,
/turf/open/floor/holofloor/wood,
/area/mafia)
"p" = (
/obj/machinery/door/poddoor/preopen{
desc = "When it's time to sleep, the lights will go out. Remember - no one in space can hear you scream.";
id = "mafia";
max_integrity = 99999;
name = "Station Night Shutters"
},
/turf/closed/indestructible/fakeglass,
/area/mafia)
"q" = (
/turf/open/floor/plasteel/dark,
/area/mafia)
"r" = (
/turf/open/floor/plasteel,
/area/mafia)
"s" = (
/turf/closed/wall/ice,
/area/mafia)
"t" = (
/turf/open/floor/holofloor/snow,
/area/mafia)
"u" = (
/obj/structure/statue/plasma/scientist{
anchored = 1
},
/turf/open/floor/holofloor/snow,
/area/mafia)
"v" = (
/obj/effect/baseturf_helper/asteroid,
/obj/effect/landmark/mafia/town_center,
/turf/open/floor/holofloor/snow,
/area/mafia)
"w" = (
/turf/open/lava/plasma,
/area/mafia)
"x" = (
/obj/machinery/door/airlock/external{
max_integrity = 9999;
opacity = 0
},
/obj/machinery/door/poddoor/preopen{
desc = "When it's time to sleep, the lights will go out. Remember - no one in space can hear you scream.";
id = "mafia";
max_integrity = 99999;
name = "Station Night Shutters"
},
/obj/effect/mapping_helpers/airlock/locked,
/turf/open/floor/plasteel/dark,
/area/mafia)
"y" = (
/obj/effect/landmark/mafia,
/turf/open/floor/holofloor/snow,
/area/mafia)
"z" = (
/obj/structure/lattice/catwalk,
/turf/open/lava/plasma,
/area/mafia)
"A" = (
/obj/machinery/door/airlock/external{
max_integrity = 9999
},
/obj/machinery/door/poddoor/preopen{
desc = "When it's time to sleep, the lights will go out. Remember - no one in space can hear you scream.";
id = "mafia";
max_integrity = 99999;
name = "Station Night Shutters"
},
/obj/effect/mapping_helpers/airlock/locked,
/turf/open/floor/plasteel,
/area/mafia)
"B" = (
/obj/effect/landmark/mafia,
/obj/structure/lattice/catwalk,
/turf/open/lava/plasma,
/area/mafia)
"C" = (
/obj/mafia_game_board,
/turf/open/floor/holofloor/snow,
/area/mafia)
"D" = (
/obj/structure/closet/crate/science,
/obj/item/clothing/suit/hooded/wintercoat,
/obj/item/clothing/shoes/winterboots,
/turf/open/floor/holofloor/snow,
/area/mafia)
"E" = (
/obj/structure/lattice/catwalk,
/obj/structure/closet/crate/critter,
/obj/item/clothing/suit/hooded/wintercoat/miner,
/obj/item/clothing/shoes/winterboots,
/turf/open/lava/plasma,
/area/mafia)
"F" = (
/turf/open/floor/holofloor/wood,
/area/mafia)
"G" = (
/obj/item/bedsheet/orange,
/obj/structure/bed,
/turf/open/floor/holofloor/wood,
/area/mafia)
"H" = (
/obj/item/bedsheet/black,
/obj/structure/bed,
/turf/open/floor/holofloor/wood,
/area/mafia)
"I" = (
/obj/item/bedsheet/red,
/obj/structure/bed,
/turf/open/floor/holofloor/wood,
/area/mafia)
"J" = (
/turf/open/floor/plating/snowed/smoothed,
/area/mafia)
"K" = (
/turf/closed/indestructible/rock/snow,
/area/mafia)
(1,1,1) = {"
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
"}
(2,1,1) = {"
a
a
a
a
a
a
a
a
a
a
a
s
K
K
K
K
K
K
K
K
K
K
a
"}
(3,1,1) = {"
a
a
a
s
s
s
s
s
s
s
s
s
w
w
t
w
w
w
w
w
w
K
a
"}
(4,1,1) = {"
a
a
a
s
g
h
d
d
d
d
d
s
t
w
w
w
w
w
C
w
w
K
a
"}
(5,1,1) = {"
a
a
a
s
h
d
d
e
s
s
j
s
p
p
p
w
w
w
w
w
w
K
a
"}
(6,1,1) = {"
a
a
a
s
i
s
s
j
s
H
F
s
t
D
p
p
p
p
w
w
w
K
a
"}
(7,1,1) = {"
a
a
s
s
d
s
o
F
p
m
q
p
t
y
p
z
E
p
w
t
w
K
a
"}
(8,1,1) = {"
a
a
s
d
d
s
m
r
s
s
q
s
t
p
p
z
B
p
w
w
w
K
a
"}
(9,1,1) = {"
a
a
s
d
s
s
p
r
r
p
q
p
t
p
z
z
p
p
p
w
w
K
a
"}
(10,1,1) = {"
a
a
s
d
s
l
p
s
p
p
p
p
p
p
p
p
p
D
p
w
w
K
a
"}
(11,1,1) = {"
a
a
s
d
j
m
F
q
q
x
J
t
t
p
t
t
t
y
p
w
t
K
a
"}
(12,1,1) = {"
a
a
s
e
s
a
p
s
p
p
u
v
t
p
p
p
p
p
p
w
w
K
a
"}
(13,1,1) = {"
a
a
s
d
j
m
F
r
r
A
J
t
t
p
t
t
t
y
p
w
w
K
a
"}
(14,1,1) = {"
a
a
s
d
s
n
p
s
p
p
p
p
p
p
p
p
p
D
p
w
w
K
a
"}
(15,1,1) = {"
a
a
s
d
s
s
p
q
q
p
r
p
t
p
z
z
p
p
p
w
w
K
a
"}
(16,1,1) = {"
a
a
s
f
d
s
m
q
s
s
r
s
t
p
p
z
B
p
w
w
w
K
a
"}
(17,1,1) = {"
a
a
s
s
d
s
G
F
p
m
r
p
t
y
p
z
E
p
w
w
w
K
a
"}
(18,1,1) = {"
a
a
a
s
d
s
s
j
s
I
F
s
t
D
p
p
p
p
w
t
w
K
a
"}
(19,1,1) = {"
a
a
a
s
h
i
d
d
s
s
j
s
p
p
p
t
w
w
w
w
w
K
a
"}
(20,1,1) = {"
a
a
a
s
k
h
d
d
e
d
d
s
t
w
w
w
w
w
C
w
w
K
a
"}
(21,1,1) = {"
a
a
a
s
s
s
s
s
s
s
s
s
w
w
w
w
w
w
w
w
w
K
a
"}
(22,1,1) = {"
a
a
a
a
a
a
a
a
a
a
a
s
K
K
K
K
K
K
K
K
K
K
a
"}
(23,1,1) = {"
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
"}
+690
View File
@@ -0,0 +1,690 @@
//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
"a" = (
/turf/closed/indestructible/riveted,
/area/mafia)
"b" = (
/obj/structure/closet/cabinet{
anchored = 1
},
/obj/item/reagent_containers/food/snacks/sashimi,
/turf/open/floor/carpet/black,
/area/mafia)
"c" = (
/turf/closed/wall/rust,
/area/mafia)
"d" = (
/turf/open/floor/plating,
/area/mafia)
"e" = (
/turf/open/floor/plating{
icon_state = "platingdmg3"
},
/area/mafia)
"f" = (
/turf/open/floor/plating{
icon_state = "panelscorched"
},
/area/mafia)
"g" = (
/obj/mafia_game_board,
/turf/open/floor/plating{
icon_state = "platingdmg3"
},
/area/mafia)
"h" = (
/obj/structure/grille/indestructable,
/turf/open/floor/plating,
/area/mafia)
"i" = (
/turf/open/floor/plating{
icon_state = "platingdmg1"
},
/area/mafia)
"j" = (
/turf/closed/wall/mineral/wood{
desc = "A door that goes nowhere. How kafkaesque.";
icon = 'icons/obj/doors/mineral_doors.dmi';
icon_state = "paperframe";
name = "Door"
},
/area/mafia)
"k" = (
/obj/mafia_game_board,
/turf/open/floor/plating,
/area/mafia)
"m" = (
/obj/effect/landmark/mafia,
/turf/open/floor/wood,
/area/mafia)
"n" = (
/obj/effect/landmark/mafia,
/turf/open/floor/carpet/black,
/area/mafia)
"o" = (
/obj/structure/closet/cabinet{
anchored = 1
},
/obj/item/reagent_containers/food/snacks/sashimi,
/turf/open/floor/wood,
/area/mafia)
"p" = (
/obj/machinery/door/poddoor/preopen{
desc = "When it's time to sleep, the lights will go out. Remember - no one in space can hear you scream.";
id = "mafia";
max_integrity = 99999;
name = "Station Night Shutters"
},
/turf/closed/indestructible/fakeglass{
icon = 'icons/obj/smooth_structures/paperframes.dmi';
icon_state = "paper"
},
/area/mafia)
"q" = (
/turf/open/floor/wood,
/area/mafia)
"r" = (
/turf/open/floor/carpet/black,
/area/mafia)
"t" = (
/turf/open/floor/plating/beach/sand,
/area/mafia)
"u" = (
/obj/effect/baseturf_helper/asteroid,
/obj/effect/landmark/mafia/town_center,
/turf/open/floor/plating/beach/sand,
/area/mafia)
"v" = (
/obj/mafia_game_board,
/turf/open/floor/plating{
icon_state = "panelscorched"
},
/area/mafia)
"B" = (
/obj/structure/showcase{
density = 0;
desc = "Welp, only one way to recover your honour.";
icon = 'icons/obj/items_and_weapons.dmi';
icon_state = "katana";
name = "seppuku katana"
},
/turf/open/floor/plating/beach/sand,
/area/mafia)
"S" = (
/turf/closed/wall/mineral/wood,
/area/mafia)
(1,1,1) = {"
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
"}
(2,1,1) = {"
a
S
S
S
S
S
S
S
S
S
S
S
S
S
S
S
S
S
S
S
S
S
a
"}
(3,1,1) = {"
a
S
S
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
S
S
a
"}
(4,1,1) = {"
a
S
S
c
g
h
d
d
d
d
d
e
d
d
d
d
d
h
k
c
S
S
a
"}
(5,1,1) = {"
a
S
S
c
h
d
d
e
S
S
j
S
j
S
S
d
d
i
h
c
S
S
a
"}
(6,1,1) = {"
a
S
S
c
i
S
S
j
S
o
q
S
r
b
S
j
S
S
d
c
S
S
a
"}
(7,1,1) = {"
a
S
c
c
d
S
b
r
p
m
q
p
r
n
p
q
o
S
d
c
c
S
a
"}
(8,1,1) = {"
a
S
c
d
d
S
n
r
S
S
q
S
r
S
S
q
m
S
d
d
c
S
a
"}
(9,1,1) = {"
a
S
c
d
S
S
p
r
r
p
q
p
r
p
q
q
p
S
S
d
c
S
a
"}
(10,1,1) = {"
a
S
c
d
S
o
p
S
p
p
p
p
p
p
p
S
p
b
S
d
c
S
a
"}
(11,1,1) = {"
a
S
c
d
j
m
q
q
q
p
t
t
t
p
r
r
r
n
j
e
c
S
a
"}
(12,1,1) = {"
a
S
c
e
S
S
p
S
p
p
t
u
B
p
p
S
p
S
S
d
c
S
a
"}
(13,1,1) = {"
a
S
c
d
j
n
r
r
r
p
t
t
t
p
q
q
q
m
j
d
c
S
a
"}
(14,1,1) = {"
a
S
c
d
S
b
p
S
p
p
p
p
p
p
p
S
p
o
S
i
c
S
a
"}
(15,1,1) = {"
a
S
c
d
S
S
p
q
q
p
r
p
q
p
r
r
p
S
S
d
c
S
a
"}
(16,1,1) = {"
a
S
c
f
d
S
m
q
S
S
r
S
q
S
S
r
n
S
d
d
c
S
a
"}
(17,1,1) = {"
a
S
c
c
d
S
o
q
p
n
r
p
q
m
p
r
b
S
d
c
c
S
a
"}
(18,1,1) = {"
a
S
S
c
d
S
S
j
S
b
r
S
q
o
S
j
S
S
d
c
S
S
a
"}
(19,1,1) = {"
a
S
S
c
h
i
d
d
S
S
j
S
j
S
S
d
e
d
h
c
S
S
a
"}
(20,1,1) = {"
a
S
S
c
k
h
d
d
e
d
d
d
d
d
d
d
d
h
v
c
S
S
a
"}
(21,1,1) = {"
a
S
S
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
S
S
a
"}
(22,1,1) = {"
a
S
S
S
S
S
S
S
S
S
S
S
S
S
S
S
S
S
S
S
S
S
a
"}
(23,1,1) = {"
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
"}
+869
View File
@@ -0,0 +1,869 @@
//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
"a" = (
/turf/closed/indestructible/riveted,
/area/mafia)
"b" = (
/obj/structure/closet/syndicate{
desc = "A storage closet for syndicate conflict resolution operatives.";
name = "red closet"
},
/obj/item/clothing/under/syndicate/tacticool,
/obj/item/clothing/under/syndicate/tacticool/skirt,
/turf/open/floor/mineral/plastitanium,
/area/mafia)
"c" = (
/turf/closed/wall/rust,
/area/mafia)
"d" = (
/turf/open/floor/plating,
/area/mafia)
"e" = (
/turf/open/floor/plating{
icon_state = "platingdmg3"
},
/area/mafia)
"f" = (
/turf/open/floor/plating{
icon_state = "panelscorched"
},
/area/mafia)
"g" = (
/obj/mafia_game_board,
/turf/open/floor/plating{
icon_state = "platingdmg3"
},
/area/mafia)
"h" = (
/obj/structure/grille/indestructable,
/turf/open/floor/plating,
/area/mafia)
"i" = (
/turf/open/floor/plating{
icon_state = "platingdmg1"
},
/area/mafia)
"j" = (
/obj/machinery/door/airlock/maintenance_hatch{
max_integrity = 99999;
name = "Maintenance"
},
/obj/effect/mapping_helpers/airlock/locked,
/turf/open/floor/plating,
/area/mafia)
"k" = (
/obj/mafia_game_board,
/turf/open/floor/plating,
/area/mafia)
"l" = (
/obj/structure/closet/syndicate{
desc = "A storage closet for syndicate conflict resolution operatives.";
name = "red closet"
},
/obj/item/clothing/under/syndicate/tacticool,
/obj/item/clothing/under/syndicate/tacticool/skirt,
/obj/effect/turf_decal/tile/red,
/obj/effect/turf_decal/tile/red{
dir = 1
},
/obj/effect/turf_decal/tile/red{
dir = 8
},
/obj/effect/turf_decal/tile/red{
dir = 4
},
/turf/open/floor/plasteel/dark,
/area/mafia)
"m" = (
/obj/structure/closet/syndicate{
desc = "A storage closet for syndicate conflict resolution operatives.";
name = "red closet"
},
/obj/item/clothing/under/syndicate/tacticool,
/obj/item/clothing/under/syndicate/tacticool/skirt,
/obj/effect/turf_decal/tile/red,
/obj/effect/turf_decal/tile/red{
dir = 1
},
/obj/effect/turf_decal/tile/red{
dir = 4
},
/obj/effect/turf_decal/tile/red{
dir = 8
},
/turf/open/floor/plasteel/dark,
/area/mafia)
"n" = (
/obj/effect/landmark/mafia,
/turf/open/floor/mineral/plastitanium,
/area/mafia)
"o" = (
/obj/effect/turf_decal/tile/red,
/obj/effect/turf_decal/tile/red{
dir = 4
},
/obj/effect/turf_decal/tile/red{
dir = 8
},
/obj/effect/turf_decal/tile/red{
dir = 1
},
/turf/open/floor/plasteel/dark,
/area/mafia)
"p" = (
/obj/machinery/door/poddoor/preopen{
desc = "When it's time to sleep, the lights will go out. Remember - no one in space can hear you scream.";
id = "mafia";
max_integrity = 99999;
name = "Station Night Shutters"
},
/obj/effect/spawner/structure/window/plastitanium,
/turf/open/space/basic,
/area/mafia)
"q" = (
/obj/effect/turf_decal/tile/red,
/obj/effect/turf_decal/tile/red{
dir = 4
},
/obj/effect/turf_decal/tile/red{
dir = 8
},
/obj/effect/turf_decal/tile/red{
dir = 1
},
/obj/structure/chair/office{
dir = 1;
name = "tactical swivel chair"
},
/turf/open/floor/plasteel/dark,
/area/mafia)
"r" = (
/turf/open/floor/mineral/plastitanium,
/area/mafia)
"s" = (
/turf/open/floor/mineral/plastitanium/red,
/area/mafia)
"t" = (
/turf/open/floor/circuit/red,
/area/mafia)
"u" = (
/obj/effect/baseturf_helper/asteroid,
/obj/effect/landmark/mafia/town_center,
/obj/structure/chair,
/turf/open/floor/circuit/red,
/area/mafia)
"v" = (
/obj/mafia_game_board,
/turf/open/floor/plating{
icon_state = "panelscorched"
},
/area/mafia)
"w" = (
/turf/closed/indestructible/syndicate,
/area/mafia)
"x" = (
/obj/effect/turf_decal/tile/red,
/obj/effect/turf_decal/tile/red{
dir = 4
},
/obj/effect/turf_decal/tile/red{
dir = 8
},
/obj/effect/turf_decal/tile/red{
dir = 1
},
/obj/structure/chair/office{
dir = 4;
name = "tactical swivel chair"
},
/turf/open/floor/plasteel/dark,
/area/mafia)
"y" = (
/obj/structure/chair/office{
dir = 2;
name = "tactical swivel chair"
},
/turf/open/floor/mineral/plastitanium,
/area/mafia)
"z" = (
/obj/effect/turf_decal/tile/red,
/obj/effect/turf_decal/tile/red{
dir = 4
},
/obj/effect/turf_decal/tile/red{
dir = 8
},
/obj/effect/turf_decal/tile/red{
dir = 1
},
/obj/structure/chair/office{
dir = 2;
name = "tactical swivel chair"
},
/turf/open/floor/plasteel/dark,
/area/mafia)
"A" = (
/obj/structure/chair/office{
dir = 8;
name = "tactical swivel chair"
},
/turf/open/floor/mineral/plastitanium,
/area/mafia)
"B" = (
/obj/structure/chair/office{
dir = 4;
name = "tactical swivel chair"
},
/turf/open/floor/mineral/plastitanium,
/area/mafia)
"C" = (
/obj/effect/turf_decal/tile/red,
/obj/effect/turf_decal/tile/red{
dir = 4
},
/obj/effect/turf_decal/tile/red{
dir = 8
},
/obj/effect/turf_decal/tile/red{
dir = 1
},
/obj/structure/chair/office{
dir = 8;
name = "tactical swivel chair"
},
/turf/open/floor/plasteel/dark,
/area/mafia)
"E" = (
/obj/structure/chair/office{
dir = 1;
name = "tactical swivel chair"
},
/turf/open/floor/mineral/plastitanium,
/area/mafia)
"F" = (
/obj/effect/turf_decal/tile/red,
/obj/effect/turf_decal/tile/red{
dir = 4
},
/obj/effect/turf_decal/tile/red{
dir = 8
},
/obj/effect/turf_decal/tile/red{
dir = 1
},
/obj/structure/closet/syndicate{
desc = "A storage closet for syndicate conflict resolution operatives.";
name = "red closet"
},
/obj/item/clothing/under/syndicate/tacticool,
/obj/item/clothing/under/syndicate/tacticool/skirt,
/turf/open/floor/plasteel/dark,
/area/mafia)
"G" = (
/obj/effect/turf_decal/tile/red,
/obj/effect/turf_decal/tile/red{
dir = 4
},
/obj/effect/turf_decal/tile/red{
dir = 8
},
/obj/effect/turf_decal/tile/red{
dir = 1
},
/obj/item/clothing/under/syndicate/tacticool,
/obj/structure/closet/syndicate{
desc = "A storage closet for syndicate conflict resolution operatives.";
name = "red closet"
},
/obj/item/clothing/under/syndicate/tacticool/skirt,
/turf/open/floor/plasteel/dark,
/area/mafia)
"H" = (
/obj/effect/turf_decal/tile/red,
/obj/effect/turf_decal/tile/red{
dir = 4
},
/obj/effect/turf_decal/tile/red{
dir = 8
},
/obj/effect/turf_decal/tile/red{
dir = 1
},
/obj/effect/landmark/mafia,
/turf/open/floor/plasteel/dark,
/area/mafia)
(1,1,1) = {"
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
"}
(2,1,1) = {"
a
w
w
w
w
w
w
w
w
w
w
w
w
w
w
w
w
w
w
w
w
w
a
"}
(3,1,1) = {"
a
w
w
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
w
w
a
"}
(4,1,1) = {"
a
w
w
c
g
h
d
d
d
d
d
e
d
d
d
d
d
h
k
c
w
w
a
"}
(5,1,1) = {"
a
w
w
c
h
d
d
e
w
w
j
w
j
w
w
d
d
i
h
c
w
w
a
"}
(6,1,1) = {"
a
w
w
c
i
w
w
j
w
b
r
w
o
F
w
j
w
w
d
c
w
w
a
"}
(7,1,1) = {"
a
w
c
c
d
w
l
o
p
n
r
p
o
H
p
r
b
w
d
c
c
w
a
"}
(8,1,1) = {"
a
w
c
d
d
w
H
o
w
w
r
w
o
w
w
r
n
w
d
d
c
w
a
"}
(9,1,1) = {"
a
w
c
d
w
w
p
o
x
p
B
p
x
p
B
r
p
w
w
d
c
w
a
"}
(10,1,1) = {"
a
w
c
d
w
b
p
w
p
p
p
p
p
p
p
w
p
m
w
d
c
w
a
"}
(11,1,1) = {"
a
w
c
d
j
n
r
r
y
p
s
t
s
p
q
o
o
H
j
e
c
w
a
"}
(12,1,1) = {"
a
w
c
e
w
w
p
w
p
p
t
u
t
p
p
w
p
w
w
d
c
w
a
"}
(13,1,1) = {"
a
w
c
d
j
H
o
o
z
p
s
t
s
p
E
r
r
n
j
d
c
w
a
"}
(14,1,1) = {"
a
w
c
d
w
l
p
w
p
p
p
p
p
p
p
w
p
b
w
i
c
w
a
"}
(15,1,1) = {"
a
w
c
d
w
w
p
r
A
p
C
p
A
p
C
o
p
w
w
d
c
w
a
"}
(16,1,1) = {"
a
w
c
f
d
w
n
r
w
w
o
w
r
w
w
o
H
w
d
d
c
w
a
"}
(17,1,1) = {"
a
w
c
c
d
w
b
r
p
H
o
p
r
n
p
o
G
w
d
c
c
w
a
"}
(18,1,1) = {"
a
w
w
c
d
w
w
j
w
F
o
w
r
b
w
j
w
w
d
c
w
w
a
"}
(19,1,1) = {"
a
w
w
c
h
i
d
d
w
w
j
w
j
w
w
d
e
d
h
c
w
w
a
"}
(20,1,1) = {"
a
w
w
c
k
h
d
d
e
d
d
d
d
d
d
d
d
h
v
c
w
w
a
"}
(21,1,1) = {"
a
w
w
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
w
w
a
"}
(22,1,1) = {"
a
w
w
w
w
w
w
w
w
w
w
w
w
w
w
w
w
w
w
w
w
w
a
"}
(23,1,1) = {"
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
"}
File diff suppressed because it is too large Load Diff
+103 -96
View File
@@ -1244,15 +1244,7 @@
/turf/closed/wall,
/area/maintenance/starboard/fore)
"abM" = (
/obj/effect/turf_decal/stripes/line,
/obj/machinery/door/airlock/external{
name = "External Airlock";
req_access_txt = "13"
},
/obj/effect/mapping_helpers/airlock/cyclelink_helper,
/obj/effect/turf_decal/stripes/line{
dir = 1
},
/obj/effect/turf_decal/delivery,
/turf/open/floor/plasteel,
/area/maintenance/starboard/fore)
"abN" = (
@@ -23608,22 +23600,9 @@
/turf/open/floor/engine,
/area/engine/supermatter)
"aKB" = (
/obj/effect/turf_decal/stripes/line{
dir = 8
},
/obj/effect/turf_decal/stripes/line{
dir = 4
},
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
/obj/machinery/door/airlock/external{
name = "External Airlock";
req_access_txt = "13"
},
/obj/effect/mapping_helpers/airlock/cyclelink_helper{
dir = 8
},
/turf/open/floor/plasteel,
/area/maintenance/port/aft)
"aKC" = (
@@ -23645,14 +23624,23 @@
/turf/open/floor/plasteel/dark,
/area/engine/engineering)
"aKF" = (
/obj/effect/turf_decal/stripes/line{
dir = 8
},
/obj/effect/turf_decal/stripes/line{
dir = 4
},
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
/obj/structure/sign/warning/vacuum{
pixel_x = -32;
pixel_y = 32
/obj/machinery/door/airlock/external{
name = "External Airlock";
req_access_txt = "13"
},
/turf/open/floor/plating,
/obj/effect/mapping_helpers/airlock/cyclelink_helper{
dir = 8
},
/turf/open/floor/plasteel,
/area/maintenance/port/aft)
"aKG" = (
/obj/structure/cable/white{
@@ -39608,9 +39596,17 @@
/turf/open/floor/plasteel,
/area/engine/atmos)
"edA" = (
/obj/structure/lattice,
/turf/open/space/basic,
/area/space)
/obj/effect/turf_decal/stripes/line,
/obj/machinery/door/airlock/external{
name = "External Airlock";
req_access_txt = "13"
},
/obj/effect/mapping_helpers/airlock/cyclelink_helper,
/obj/effect/turf_decal/stripes/line{
dir = 1
},
/turf/open/floor/plasteel,
/area/maintenance/starboard/fore)
"eew" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/obj/structure/cable{
@@ -41988,6 +41984,16 @@
},
/turf/open/floor/plasteel,
/area/hydroponics)
"saI" = (
/obj/structure/cable/white{
icon_state = "4-8"
},
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
/mob/living/simple_animal/opossum,
/turf/open/floor/plating,
/area/maintenance/starboard)
"scn" = (
/obj/structure/cable{
icon_state = "4-8"
@@ -42866,9 +42872,6 @@
/obj/structure/sign/warning/securearea,
/turf/closed/wall/rust,
/area/maintenance/starboard)
"sIO" = (
/turf/open/space/basic,
/area/space/nearstation)
"sIP" = (
/obj/machinery/vending/cola/random,
/obj/effect/turf_decal/bot,
@@ -45205,6 +45208,10 @@
/obj/effect/landmark/carpspawn,
/turf/open/space,
/area/space/station_ruins)
"uXV" = (
/mob/living/simple_animal/opossum/poppy,
/turf/open/floor/wood,
/area/maintenance/port/aft)
"ver" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{
dir = 10
@@ -71447,7 +71454,7 @@ aaa
aaa
aaa
aaa
aaa
sdX
uhz
uhz
oxn
@@ -71704,7 +71711,7 @@ aac
aac
aac
aac
aaa
sdX
uhz
iye
mJP
@@ -79446,7 +79453,7 @@ aFM
aOH
aOT
aPV
aRm
uXV
aSI
aRC
aKm
@@ -91206,7 +91213,7 @@ aaa
aae
aaa
aaa
aac
bxZ
abL
bxZ
swz
@@ -91463,7 +91470,7 @@ aaa
aae
aad
aac
bvg
edA
abM
acu
adt
@@ -91720,7 +91727,7 @@ aad
aah
aad
aad
aad
bxZ
bxZ
adq
bxZ
@@ -92526,7 +92533,7 @@ aSD
aRz
aRz
aRz
sGY
saI
aRz
sIb
bsD
@@ -93045,7 +93052,7 @@ aRz
sIc
sIv
sFs
sIO
aaa
sIU
sJe
sIU
@@ -98463,9 +98470,9 @@ aac
aaa
aaa
aaa
edA
sdX
aaa
edA
sdX
aac
aac
aac
@@ -98720,9 +98727,9 @@ aac
aaa
aaa
aaa
edA
sdX
aaa
edA
sdX
aaa
aac
aaa
@@ -98977,9 +98984,9 @@ aaa
aaa
aaa
aaa
edA
sdX
aaa
edA
sdX
aaa
aaa
aaa
@@ -99234,9 +99241,9 @@ aaa
aaa
aaa
aaa
edA
sdX
aaa
edA
sdX
aaa
aaa
aaa
@@ -99491,9 +99498,9 @@ aaa
aaa
aaa
aaa
edA
sdX
aaa
edA
sdX
aaa
aaa
aaa
@@ -99748,9 +99755,9 @@ aaa
aaa
aaa
aaa
edA
sdX
aaa
edA
sdX
aaa
aaa
aaa
@@ -100005,9 +100012,9 @@ jFP
aaa
aaa
aaa
edA
sdX
aaa
edA
sdX
aaa
aaa
aaa
@@ -100262,9 +100269,9 @@ jFP
aaa
aaa
aaa
edA
sdX
aaa
edA
sdX
aaa
aaa
aaa
@@ -100519,9 +100526,9 @@ jFP
aaa
aaa
aaa
edA
sdX
aaa
edA
sdX
aaa
aaa
aaa
@@ -100776,9 +100783,9 @@ jFP
aaa
aaa
aaa
edA
sdX
aaa
edA
sdX
aaa
aaa
aaa
@@ -101033,9 +101040,9 @@ jFP
aaa
aaa
aaa
edA
sdX
aaa
edA
sdX
aaa
aaa
aaa
@@ -101290,9 +101297,9 @@ jFP
aaa
aaa
aaa
edA
sdX
aaa
edA
sdX
aaa
aaa
aaa
@@ -101547,9 +101554,9 @@ jFP
aaa
aaa
aaa
edA
sdX
aaa
edA
sdX
aaa
aaa
aaa
@@ -101804,9 +101811,9 @@ jFP
aaa
aaa
aaa
edA
sdX
aaa
edA
sdX
aaa
aaa
aaa
@@ -102061,9 +102068,9 @@ jFP
aaa
aaa
aaa
edA
sdX
aaa
edA
sdX
aaa
aaa
aaa
@@ -102318,9 +102325,9 @@ jFP
aaa
aaa
aaa
edA
sdX
aaa
edA
sdX
aaa
aaa
aaa
@@ -102575,9 +102582,9 @@ jFP
aaa
aaa
aaa
edA
sdX
aaa
edA
sdX
aaa
aaa
aaa
@@ -102832,9 +102839,9 @@ jFP
aaa
aaa
aaa
edA
sdX
aaa
edA
sdX
aaa
aaa
aaa
@@ -103089,9 +103096,9 @@ jFP
aaa
aaa
aaa
edA
sdX
aaa
edA
sdX
aaa
aaa
aaa
@@ -103346,9 +103353,9 @@ jFP
aaa
aaa
aaa
edA
sdX
aaa
edA
sdX
aaa
aaa
aaa
@@ -103603,9 +103610,9 @@ jFP
aaa
aaa
aaa
edA
sdX
aaa
edA
sdX
aaa
aaa
aaa
@@ -103860,9 +103867,9 @@ jFP
aaa
aaa
aaa
edA
sdX
aaa
edA
sdX
aaa
aaa
aaa
@@ -104117,9 +104124,9 @@ jFP
aaa
aaa
aaa
edA
sdX
aaa
edA
sdX
aaa
aaa
aaa
@@ -104374,9 +104381,9 @@ jFP
aaa
aaa
aaa
edA
sdX
aaa
edA
sdX
aaa
aaa
aaa
@@ -104631,9 +104638,9 @@ jFP
aaa
aaa
aaa
edA
sdX
aaa
edA
sdX
aaa
aaa
aaa
@@ -104888,9 +104895,9 @@ aaa
aaa
aaa
aaa
edA
sdX
aaa
edA
sdX
aaa
aaa
aaa
@@ -105145,9 +105152,9 @@ aaa
aaa
aaa
aaa
edA
sdX
aaa
edA
sdX
aaa
aaa
aaa
@@ -105402,9 +105409,9 @@ aaa
aaa
aaa
aaa
edA
sdX
aaa
edA
sdX
aaa
aaa
aaa
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+8 -8
View File
@@ -102,7 +102,7 @@
/turf/open/floor/plasteel,
/area/engine/gravity_generator)
"au" = (
/turf/open/openspace,
/turf/open/transparent/openspace,
/area/space)
"av" = (
/obj/structure/stairs{
@@ -1407,7 +1407,7 @@
},
/area/hallway/secondary/service)
"eC" = (
/turf/open/openspace,
/turf/open/transparent/openspace,
/area/maintenance/department/bridge)
"eD" = (
/obj/effect/turf_decal/stripes/asteroid/line{
@@ -1542,7 +1542,7 @@
/turf/open/floor/plating,
/area/space)
"iu" = (
/turf/open/openspace,
/turf/open/transparent/openspace,
/area/hallway/secondary/service)
"iK" = (
/turf/open/floor/plasteel{
@@ -1593,7 +1593,7 @@
},
/area/hallway/secondary/service)
"nx" = (
/turf/open/openspace,
/turf/open/transparent/openspace,
/area/space/nearstation)
"nz" = (
/obj/machinery/light{
@@ -1633,7 +1633,7 @@
/turf/open/floor/plating,
/area/maintenance/department/bridge)
"qo" = (
/turf/open/openspace,
/turf/open/transparent/openspace,
/area/engine/storage)
"qR" = (
/obj/effect/turf_decal/stripes/white/line{
@@ -1646,7 +1646,7 @@
/obj/machinery/light{
dir = 8
},
/turf/open/openspace,
/turf/open/transparent/openspace,
/area/engine/storage)
"sh" = (
/turf/open/floor/plasteel{
@@ -1746,7 +1746,7 @@
/area/construction)
"Bk" = (
/obj/structure/grille,
/turf/open/openspace,
/turf/open/transparent/openspace,
/area/space/nearstation)
"Bm" = (
/obj/machinery/light{
@@ -1876,7 +1876,7 @@
"Ob" = (
/obj/structure/lattice,
/obj/structure/grille,
/turf/open/openspace,
/turf/open/transparent/openspace,
/area/space/nearstation)
"Og" = (
/obj/machinery/airalarm/directional/north,
+64 -6
View File
@@ -13490,6 +13490,9 @@
/obj/structure/table/wood,
/obj/item/instrument/piano_synth,
/obj/item/instrument/guitar,
/obj/structure/sign/painting{
pixel_x = -32
},
/turf/open/indestructible/hotelwood,
/area/centcom/holding)
"Fg" = (
@@ -13794,6 +13797,9 @@
/turf/open/indestructible/hotelwood,
/area/centcom/holding)
"FX" = (
/obj/structure/sign/painting{
pixel_x = 32
},
/turf/open/floor/plasteel/stairs,
/area/centcom/holding)
"FZ" = (
@@ -14421,6 +14427,9 @@
dir = 8
},
/obj/structure/musician/piano,
/obj/structure/sign/painting{
pixel_x = -32
},
/turf/open/indestructible/hotelwood,
/area/centcom/holding)
"Hk" = (
@@ -16225,6 +16234,12 @@
dir = 1
},
/obj/structure/table/wood,
/obj/item/storage/crayons,
/obj/item/storage/crayons,
/obj/item/storage/crayons,
/obj/structure/sign/painting{
pixel_x = -32
},
/turf/open/indestructible/hotelwood,
/area/centcom/holding)
"KU" = (
@@ -16304,6 +16319,14 @@
/obj/item/storage/box/bodybags,
/turf/open/floor/plasteel/white,
/area/centcom/holding)
"Ll" = (
/obj/structure/window/reinforced{
dir = 1
},
/obj/structure/easel,
/obj/item/canvas/twentythreeXtwentythree,
/turf/open/indestructible/hotelwood,
/area/centcom/holding)
"Lm" = (
/obj/machinery/shower{
dir = 4
@@ -16808,6 +16831,22 @@
},
/turf/open/floor/plasteel,
/area/centcom/supplypod/loading/two)
"NA" = (
/obj/structure/window/reinforced{
dir = 1
},
/obj/structure/table/wood,
/obj/item/canvas/twentythreeXtwentythree,
/obj/item/canvas/twentythreeXtwentythree,
/obj/item/canvas/twentythreeXtwentythree,
/obj/item/canvas/twentythreeXnineteen,
/obj/item/canvas/twentythreeXnineteen,
/obj/item/canvas/twentythreeXnineteen,
/obj/item/canvas/nineteenXnineteen,
/obj/item/canvas/nineteenXnineteen,
/obj/item/canvas/nineteenXnineteen,
/turf/open/indestructible/hotelwood,
/area/centcom/holding)
"NE" = (
/obj/machinery/light{
dir = 4
@@ -16924,6 +16963,12 @@
},
/turf/open/floor/plasteel,
/area/centcom/supplypod/loading/three)
"On" = (
/obj/structure/sign/painting{
pixel_x = 32
},
/turf/open/indestructible/hotelwood,
/area/centcom/holding)
"Op" = (
/obj/structure/sink{
dir = 8;
@@ -17249,6 +17294,10 @@
},
/turf/open/floor/mineral/titanium,
/area/centcom/evac)
"Qc" = (
/obj/effect/landmark/mafia_game_area,
/turf/open/space/basic,
/area/space)
"Qe" = (
/turf/open/ai_visible,
/area/ai_multicam_room)
@@ -17906,6 +17955,15 @@
/obj/machinery/light,
/turf/open/floor/plasteel/freezer,
/area/centcom/holding)
"TD" = (
/obj/machinery/light{
dir = 4
},
/obj/structure/sign/painting{
pixel_x = 32
},
/turf/open/indestructible/hotelwood,
/area/centcom/holding)
"TF" = (
/obj/effect/turf_decal/tile/red{
dir = 8
@@ -45453,8 +45511,8 @@ Nd
AE
CV
Sd
KT
Sd
Ll
CV
Sd
Sd
Sd
@@ -45710,7 +45768,7 @@ Nd
QJ
Sd
Sd
KT
NA
Sd
Sd
Sd
@@ -46222,8 +46280,8 @@ Fh
Fh
Wl
Sd
MR
Sd
TD
On
FX
Sd
Sd
@@ -58911,7 +58969,7 @@ aa
aa
aa
aa
aa
Qc
aa
aa
aa
+1 -1
View File
@@ -2,5 +2,5 @@
"map_name": "MultiZ Debug",
"map_path": "map_files/debug",
"map_file": "multiz.dmm",
"traits": [{"Up": 1}, {"Up": 1, "Down": -1}, {"Down": -1}]
"traits": [{"Up" : 1, "Linkage" : "Cross"}, {"Up" : 1, "Down" : -1, "Baseturf" : "/turf/open/transparent/openspace", "Linkage" : "Cross"}, {"Down" : -1, "Baseturf" : "/turf/open/transparent/openspace", "Linkage" : "Cross"}]
}
+2 -2
View File
@@ -94,7 +94,7 @@
/turf/open/floor/light/colour_cycle,
/area/shuttle/escape)
"r" = (
/turf/open/floor/mineral/plasma,
/turf/open/floor/mineral/plasma/disco,
/area/shuttle/escape)
"s" = (
/turf/open/floor/mineral/silver,
@@ -112,7 +112,7 @@
resistance_flags = 2
},
/obj/structure/fans/tiny,
/turf/open/floor/mineral/plasma,
/turf/open/floor/mineral/plasma/disco,
/area/shuttle/escape)
"v" = (
/obj/machinery/jukebox/disco/indestructible,
+1 -1
View File
@@ -2690,7 +2690,7 @@
/obj/structure/rack,
/obj/item/storage/box/zipties,
/obj/item/assembly/flash/handheld,
/obj/item/melee/classic_baton/telescopic,
/obj/item/melee/classic_baton,
/obj/machinery/light/small/built{
dir = 8
},
+1 -1
View File
@@ -33,7 +33,7 @@
"Linkage":null,
"Gravity":true,
"Ice Ruins Underground":true,
"Baseturf":"/turf/open/openspace/icemoon"
"Baseturf":"/turf/open/transparent/openspace/icemoon"
},
{
"Down":-1,
BIN
View File
Binary file not shown.
+1 -1
View File
@@ -98,7 +98,7 @@ GLOBAL_LIST_INIT(bitflags, list(1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 204
#define ZAP_MOB_DAMAGE (1<<3)
#define ZAP_MOB_STUN (1<<4)
#define ZAP_DEFAULT_FLAGS ALL
#define ZAP_DEFAULT_FLAGS ZAP_MOB_STUN | ZAP_MOB_DAMAGE | ZAP_OBJ_DAMAGE
#define ZAP_FUSION_FLAGS ZAP_OBJ_DAMAGE | ZAP_MOB_DAMAGE | ZAP_MOB_STUN
#define ZAP_SUPERMATTER_FLAGS NONE
+11 -1
View File
@@ -63,6 +63,16 @@
#define CONTRACT_UPLINK_PAGE_CONTRACTS "CONTRACTS"
#define CONTRACT_UPLINK_PAGE_HUB "HUB"
///Heretics --
#define IS_HERETIC(mob) (mob.mind?.has_antag_datum(/datum/antagonist/heretic))
#define PATH_SIDE "Side"
#define PATH_ASH "Ash"
#define PATH_RUST "Rust"
#define PATH_FLESH "Flesh"
//Overthrow time to update heads obj
#define OBJECTIVE_UPDATING_TIME 300
@@ -91,4 +101,4 @@
#define BLOB_REROLL_TIME 2400 // blob gets a free reroll every X time
#define BLOB_SPREAD_COST 4
#define BLOB_ATTACK_REFUND 2 //blob refunds this much if it attacks and doesn't spread
#define BLOB_REFLECTOR_COST 15
#define BLOB_REFLECTOR_COST 15
+1
View File
@@ -60,6 +60,7 @@
#define ANTAG_HUD_BROTHER 23
#define ANTAG_HUD_BLOODSUCKER 24
#define ANTAG_HUD_FUGITIVE 25
#define ANTAG_HUD_HERETIC 26
// Notification action types
#define NOTIFY_JUMP "jump"
+73 -34
View File
@@ -15,22 +15,31 @@
//////////////////////////////////////////////////////////////////
// /datum signals
#define COMSIG_COMPONENT_ADDED "component_added" //sent to the new datum parent when a component is added to them: (/datum/component)
#define COMSIG_COMPONENT_REMOVING "component_removing" //sent to the datum parent before a component is removed from them because of RemoveComponent: (/datum/component)
#define COMSIG_COMPONENT_UNREGISTER_PARENT "component_unregister_parent" //sent to the component itself when unregistered from a parent
#define COMSIG_COMPONENT_REGISTER_PARENT "component_register_parent" //sent to the component itself when registered to a parent
#define COMSIG_PARENT_PREQDELETED "parent_preqdeleted" //before a datum's Destroy() is called: (force), returning a nonzero value will cancel the qdel operation
#define COMSIG_PARENT_QDELETING "parent_qdeleting" //just before a datum's Destroy() is called: (force), at this point none of the other components chose to interrupt qdel and Destroy will be called
/// Trait signals
#define COMPONENT_ADD_TRAIT (1<<0)
#define COMPONENT_REMOVE_TRAIT (1<<1)
/// when a component is added to a datum: (/datum/component)
#define COMSIG_COMPONENT_ADDED "component_added"
/// before a component is removed from a datum because of RemoveComponent: (/datum/component)
#define COMSIG_COMPONENT_REMOVING "component_removing"
/// before a datum's Destroy() is called: (force), returning a nonzero value will cancel the qdel operation
#define COMSIG_PARENT_PREQDELETED "parent_preqdeleted"
/// just before a datum's Destroy() is called: (force), at this point none of the other components chose to interrupt qdel and Destroy will be called
#define COMSIG_PARENT_QDELETING "parent_qdeleting"
/// generic topic handler (usr, href_list)
#define COMSIG_TOPIC "handle_topic"
/// fires on the target datum when an element is attached to it (/datum/element)
#define COMSIG_ELEMENT_ATTACH "element_attach"
/// fires on the target datum when an element is attached to it (/datum/element)
#define COMSIG_ELEMENT_DETACH "element_detach"
/// sent to the component itself when unregistered from a parent
#define COMSIG_COMPONENT_UNREGISTER_PARENT "component_unregister_parent"
/// sent to the component itself when registered to a parent
#define COMSIG_COMPONENT_REGISTER_PARENT "component_register_parent"
/// Trait signals
#define COMPONENT_ADD_TRAIT (1<<0)
#define COMPONENT_REMOVE_TRAIT (1<<1)
// /atom signals
//from base of atom/proc/Initialize(): sent any time a new atom is created
#define COMSIG_ATOM_CREATED "atom_created"
@@ -56,30 +65,54 @@
#define COMSIG_ATOM_EXIT "atom_exit" //from base of atom/Exit(): (/atom/movable/exiting, /atom/newloc)
#define COMPONENT_ATOM_BLOCK_EXIT 1
#define COMSIG_ATOM_EXITED "atom_exited" //from base of atom/Exited(): (atom/movable/exiting, atom/newloc)
#define COMSIG_ATOM_EX_ACT "atom_ex_act" //from base of atom/ex_act(): (severity, target)
#define COMSIG_ATOM_EMP_ACT "atom_emp_act" //from base of atom/emp_act(): (severity)
#define COMSIG_ATOM_FIRE_ACT "atom_fire_act" //from base of atom/fire_act(): (exposed_temperature, exposed_volume)
#define COMSIG_ATOM_BULLET_ACT "atom_bullet_act" //from base of atom/bullet_act(): (/obj/item/projectile, def_zone)
#define COMSIG_ATOM_BLOB_ACT "atom_blob_act" //from base of atom/blob_act(): (/obj/structure/blob)
#define COMSIG_ATOM_ACID_ACT "atom_acid_act" //from base of atom/acid_act(): (acidpwr, acid_volume)
#define COMSIG_ATOM_EMAG_ACT "atom_emag_act" //from base of atom/emag_act(): ()
#define COMSIG_ATOM_RAD_ACT "atom_rad_act" //from base of atom/rad_act(intensity)
#define COMSIG_ATOM_NARSIE_ACT "atom_narsie_act" //from base of atom/narsie_act(): ()
#define COMSIG_ATOM_RATVAR_ACT "atom_ratvar_act" //from base of atom/ratvar_act(): ()
#define COMSIG_ATOM_RCD_ACT "atom_rcd_act" //from base of atom/rcd_act(): (/mob, /obj/item/construction/rcd, passed_mode)
#define COMSIG_ATOM_SING_PULL "atom_sing_pull" //from base of atom/singularity_pull(): (S, current_size)
#define COMSIG_ATOM_SET_LIGHT "atom_set_light" //from base of atom/set_light(): (l_range, l_power, l_color)
#define COMSIG_ATOM_DIR_CHANGE "atom_dir_change" //from base of atom/setDir(): (old_dir, new_dir)
#define COMSIG_ATOM_CONTENTS_DEL "atom_contents_del" //from base of atom/handle_atom_del(): (atom/deleted)
#define COMSIG_ATOM_HAS_GRAVITY "atom_has_gravity" //from base of atom/has_gravity(): (turf/location, list/forced_gravities)
#define COMSIG_ATOM_RAD_PROBE "atom_rad_probe" //from proc/get_rad_contents(): ()
#define COMPONENT_BLOCK_RADIATION 1
#define COMSIG_ATOM_RAD_CONTAMINATING "atom_rad_contam" //from base of datum/radiation_wave/radiate(): (strength)
#define COMPONENT_BLOCK_CONTAMINATION 1
#define COMSIG_ATOM_RAD_WAVE_PASSING "atom_rad_wave_pass" //from base of datum/radiation_wave/check_obstructions(): (datum/radiation_wave, width)
#define COMPONENT_RAD_WAVE_HANDLED 1
#define COMSIG_ATOM_CANREACH "atom_can_reach" //from internal loop in atom/movable/proc/CanReach(): (list/next)
#define COMPONENT_BLOCK_REACH 1
///from base of atom/ex_act(): (severity, target)
#define COMSIG_ATOM_EX_ACT "atom_ex_act"
///from base of atom/emp_act(): (severity)
#define COMSIG_ATOM_EMP_ACT "atom_emp_act"
///from base of atom/fire_act(): (exposed_temperature, exposed_volume)
#define COMSIG_ATOM_FIRE_ACT "atom_fire_act"
///from base of atom/bullet_act(): (/obj/projectile, def_zone)
#define COMSIG_ATOM_BULLET_ACT "atom_bullet_act"
///from base of atom/blob_act(): (/obj/structure/blob)
#define COMSIG_ATOM_BLOB_ACT "atom_blob_act"
///from base of atom/acid_act(): (acidpwr, acid_volume)
#define COMSIG_ATOM_ACID_ACT "atom_acid_act"
///from base of atom/emag_act(): (/mob/user)
#define COMSIG_ATOM_EMAG_ACT "atom_emag_act"
///from base of atom/rad_act(intensity)
#define COMSIG_ATOM_RAD_ACT "atom_rad_act"
///from base of atom/narsie_act(): ()
#define COMSIG_ATOM_NARSIE_ACT "atom_narsie_act"
///from base of atom/ratvar_act(): ()
#define COMSIG_ATOM_RATVAR_ACT "atom_ratvar_act"
///from base of atom/rcd_act(): (/mob, /obj/item/construction/rcd, passed_mode)
#define COMSIG_ATOM_RCD_ACT "atom_rcd_act"
///from base of atom/singularity_pull(): (S, current_size)
#define COMSIG_ATOM_SING_PULL "atom_sing_pull"
///from obj/machinery/bsa/full/proc/fire(): ()
#define COMSIG_ATOM_BSA_BEAM "atom_bsa_beam_pass"
#define COMSIG_ATOM_BLOCKS_BSA_BEAM (1<<0)
///from base of atom/set_light(): (l_range, l_power, l_color)
#define COMSIG_ATOM_SET_LIGHT "atom_set_light"
///from base of atom/setDir(): (old_dir, new_dir). Called before the direction changes.
#define COMSIG_ATOM_DIR_CHANGE "atom_dir_change"
///from base of atom/handle_atom_del(): (atom/deleted)
#define COMSIG_ATOM_CONTENTS_DEL "atom_contents_del"
///from base of atom/has_gravity(): (turf/location, list/forced_gravities)
#define COMSIG_ATOM_HAS_GRAVITY "atom_has_gravity"
///from proc/get_rad_contents(): ()
#define COMSIG_ATOM_RAD_PROBE "atom_rad_probe"
#define COMPONENT_BLOCK_RADIATION (1<<0)
///from base of datum/radiation_wave/radiate(): (strength)
#define COMSIG_ATOM_RAD_CONTAMINATING "atom_rad_contam"
#define COMPONENT_BLOCK_CONTAMINATION (1<<0)
///from base of datum/radiation_wave/check_obstructions(): (datum/radiation_wave, width)
#define COMSIG_ATOM_RAD_WAVE_PASSING "atom_rad_wave_pass"
#define COMPONENT_RAD_WAVE_HANDLED (1<<0)
///from internal loop in atom/movable/proc/CanReach(): (list/next)
#define COMSIG_ATOM_CANREACH "atom_can_reach"
#define COMPONENT_BLOCK_REACH (1<<0)
#define COMSIG_ATOM_SCREWDRIVER_ACT "atom_screwdriver_act" //from base of atom/screwdriver_act(): (mob/living/user, obj/item/I)
#define COMSIG_ATOM_INTERCEPT_TELEPORT "intercept_teleport" //called when teleporting into a protected turf: (channel, turf/origin, turf/destination)
#define COMPONENT_BLOCK_TELEPORT 1
@@ -209,6 +242,8 @@
#define COMSIG_MOB_SWAP_HANDS "mob_swap_hands" //from base of mob/swap_hand(): (obj/item)
#define COMPONENT_BLOCK_SWAP 1
#define COMSIG_PROCESS_BORGCHARGER_OCCUPANT "living_charge"
// /client signals
#define COMSIG_MOB_CLIENT_LOGIN "mob_client_login" //sent when a mob/login() finishes: (client)
#define COMSIG_MOB_CLIENT_LOGOUT "mob_client_logout" //sent when a mob/logout() starts: (client)
@@ -277,6 +312,7 @@
#define COMSIG_OBJ_DECONSTRUCT "obj_deconstruct" //from base of obj/deconstruct(): (disassembled)
#define COMSIG_OBJ_BREAK "obj_break" //from base of /obj/obj_break(): (damage_flag)
#define COMSIG_OBJ_SETANCHORED "obj_setanchored" //called in /obj/structure/setAnchored(): (value)
#define COMSIG_OBJ_DEFAULT_UNFASTEN_WRENCH "obj_default_unfasten_wrench" //called exclusively in plumbing, for now
#define COMSIG_OBJ_ATTACK_GENERIC "obj_attack_generic" //from base of atom/animal_attack(): (/mob/user)
#define COMPONENT_STOP_GENERIC_ATTACK 1
@@ -452,6 +488,9 @@
#define COMPONENT_TWOHANDED_BLOCK_WIELD 1
#define COMSIG_TWOHANDED_UNWIELD "twohanded_unwield" //from base of datum/component/two_handed/proc/unwield(mob/living/carbon/user): (/mob/user)
// /datum/component/squeak signals
#define COMSIG_CROSS_SQUEAKED "cross_squeaked" // sent when a squeak component squeaks from crossing something, to delay anything else crossing that might squeak to prevent ear hurt.
// /datum/action signals
#define COMSIG_ACTION_TRIGGER "action_trigger" //from base of datum/action/proc/Trigger(): (datum/action)
#define COMPONENT_ACTION_BLOCK_TRIGGER 1
+35
View File
@@ -0,0 +1,35 @@
/// Module is compatible with Security Cyborg models
#define BORG_MODULE_SECURITY (1<<0)
/// Module is compatible with Miner Cyborg models
#define BORG_MODULE_MINER (1<<1)
/// Module is compatible with Janitor Cyborg models
#define BORG_MODULE_JANITOR (1<<2)
/// Module is compatible with Medical Cyborg models
#define BORG_MODULE_MEDICAL (1<<3)
/// Module is compatible with Engineering Cyborg models
#define BORG_MODULE_ENGINEERING (1<<4)
/// Module is compatible with Ripley Exosuit models
#define EXOSUIT_MODULE_RIPLEY (1<<0)
/// Module is compatible with Odyseeus Exosuit models
#define EXOSUIT_MODULE_ODYSSEUS (1<<1)
/// Module is compatible with Clarke Exosuit models. Rebranded to firefighter because tg nerfed it to this.
#define EXOSUIT_MODULE_FIREFIGHTER (1<<2)
// #define EXOSUIT_MODULE_CLARKE (1<<2)
/// Module is compatible with Gygax Exosuit models
#define EXOSUIT_MODULE_GYGAX (1<<3)
/// Module is compatible with Durand Exosuit models
#define EXOSUIT_MODULE_DURAND (1<<4)
/// Module is compatible with H.O.N.K Exosuit models
#define EXOSUIT_MODULE_HONK (1<<5)
/// Module is compatible with Phazon Exosuit models
#define EXOSUIT_MODULE_PHAZON (1<<6)
/// Module is compatable with N models
#define EXOSUIT_MODULE_GYGAX_MED (1<<7)
/// Module is compatible with "Working" Exosuit models - Ripley and Clarke
#define EXOSUIT_MODULE_WORKING EXOSUIT_MODULE_RIPLEY | EXOSUIT_MODULE_FIREFIGHTER // | EXOSUIT_MODULE_CLARKE
/// Module is compatible with "Combat" Exosuit models - Gygax, H.O.N.K, Durand and Phazon
#define EXOSUIT_MODULE_COMBAT EXOSUIT_MODULE_GYGAX | EXOSUIT_MODULE_HONK | EXOSUIT_MODULE_DURAND | EXOSUIT_MODULE_PHAZON
/// Module is compatible with "Medical" Exosuit modelsm - Odysseus
#define EXOSUIT_MODULE_MEDICAL EXOSUIT_MODULE_ODYSSEUS | EXOSUIT_MODULE_GYGAX_MED
+14 -4
View File
@@ -7,6 +7,8 @@
#define FOOTSTEP_WATER "water"
#define FOOTSTEP_LAVA "lava"
#define FOOTSTEP_MEAT "meat"
#define FOOTSTEP_RUST "rust"
//barefoot sounds
#define FOOTSTEP_WOOD_BAREFOOT "woodbarefoot"
#define FOOTSTEP_WOOD_CLAW "woodclaw"
@@ -91,7 +93,9 @@ GLOBAL_LIST_INIT(footstep, list(
'sound/effects/footstep/lava2.ogg',
'sound/effects/footstep/lava3.ogg'), 100, 0),
FOOTSTEP_MEAT = list(list(
'sound/effects/meatslap.ogg'), 100, 0)
'sound/effects/meatslap.ogg'), 100, 0),
FOOTSTEP_RUST = list(list(
'sound/effects/footstep/rustystep1.ogg'), 100, 0)
))
//bare footsteps lists
@@ -135,7 +139,9 @@ GLOBAL_LIST_INIT(barefootstep, list(
'sound/effects/footstep/lava2.ogg',
'sound/effects/footstep/lava3.ogg'), 100, 0),
FOOTSTEP_MEAT = list(list(
'sound/effects/meatslap.ogg'), 100, 0)
'sound/effects/meatslap.ogg'), 100, 0),
FOOTSTEP_RUST = list(list(
'sound/effects/footstep/rustystep1.ogg'), 100, 0)
))
//claw footsteps lists
@@ -179,7 +185,9 @@ GLOBAL_LIST_INIT(clawfootstep, list(
'sound/effects/footstep/lava2.ogg',
'sound/effects/footstep/lava3.ogg'), 100, 0),
FOOTSTEP_MEAT = list(list(
'sound/effects/meatslap.ogg'), 100, 0)
'sound/effects/meatslap.ogg'), 100, 0),
FOOTSTEP_RUST = list(list(
'sound/effects/footstep/rustystep1.ogg'), 100, 0)
))
//heavy footsteps list
@@ -197,5 +205,7 @@ GLOBAL_LIST_INIT(heavyfootstep, list(
'sound/effects/footstep/lava2.ogg',
'sound/effects/footstep/lava3.ogg'), 100, 0),
FOOTSTEP_MEAT = list(list(
'sound/effects/meatslap.ogg'), 100, 0)
'sound/effects/meatslap.ogg'), 100, 0),
FOOTSTEP_RUST = list(list(
'sound/effects/footstep/rustystep1.ogg'), 150, 2)
))
+4 -1
View File
@@ -17,7 +17,7 @@ GLOBAL_LIST_INIT(turfs_without_ground, typecacheof(list(
/turf/open/chasm,
/turf/open/lava,
/turf/open/water,
/turf/open/openspace
/turf/open/transparent/openspace
)))
#define isgroundlessturf(A) (is_type_in_typecache(A, GLOB.turfs_without_ground))
@@ -44,6 +44,8 @@ GLOBAL_LIST_INIT(turfs_without_ground, typecacheof(list(
#define isplatingturf(A) (istype(A, /turf/open/floor/plating))
#define istransparentturf(A) (istype(A, /turf/open/transparent))
//Mobs
#define isliving(A) (istype(A, /mob/living))
@@ -74,6 +76,7 @@ GLOBAL_LIST_INIT(turfs_without_ground, typecacheof(list(
#define ismush(A) (is_species(A, /datum/species/mush))
#define isshadow(A) (is_species(A, /datum/species/shadow))
#define isskeleton(A) (is_species(A, /datum/species/skeleton))
#define isethereal(A) (is_species(A, /datum/species/ethereal))
// Citadel specific species
#define isipcperson(A) (is_species(A, /datum/species/ipc))
+2
View File
@@ -131,6 +131,8 @@
#define LIGHTING_LAYER 15
#define LIGHTING_RENDER_TARGET "LIGHT_PLANE"
#define RAD_TEXT_LAYER 15.1
#define ABOVE_LIGHTING_PLANE 16
#define ABOVE_LIGHTING_LAYER 16
#define ABOVE_LIGHTING_RENDER_TARGET "ABOVE_LIGHTING_PLANE"
+33 -33
View File
@@ -1,56 +1,56 @@
//defines for loadout categories
//no category defines
#define NOCATEGORY list("NOCATEGORY")
#define NOSUBCATEGORY list("NOSUBCATEGORY")
#define LOADOUT_CATEGORY_NONE "ERROR"
#define LOADOUT_SUBCATEGORY_NONE "Miscellaneous"
#define LOADOUT_SUBCATEGORIES_NONE list("Miscellaneous")
//backpack
#define CATEGORY_BACKPACK "In backpack"
#define SUBCATEGORY_BACKPACK_GENERAL "General" //basically anything that there's not enough of to have its own subcategory
#define SUBCATEGORY_BACKPACK_TOYS "Toys"
#define LOADOUT_CATEGORY_BACKPACK "In backpack"
#define LOADOUT_SUBCATEGORY_BACKPACK_GENERAL "General" //basically anything that there's not enough of to have its own subcategory
#define LOADOUT_SUBCATEGORY_BACKPACK_TOYS "Toys"
//neck
#define CATEGORY_NECK "Neck"
#define SUBCATEGORY_NECK_GENERAL "General"
#define SUBCATEGORY_NECK_TIE "Ties"
#define SUBCATEGORY_NECK_SCARVES "Scarves"
#define LOADOUT_CATEGORY_NECK "Neck"
#define LOADOUT_SUBCATEGORY_NECK_GENERAL "General"
#define LOADOUT_SUBCATEGORY_NECK_TIE "Ties"
#define LOADOUT_SUBCATEGORY_NECK_SCARVES "Scarves"
//mask
#define CATEGORY_MASK "Mask"
#define LOADOUT_CATEGORY_MASK "Mask"
//hands
#define CATEGORY_HANDS "Hands"
#define LOADOUT_CATEGORY_HANDS "Hands"
//uniform
#define CATEGORY_UNIFORM "Uniform" //there's so many types of uniform it's best to have lots of categories
#define SUBCATEGORY_UNIFORM_GENERAL "General"
#define SUBCATEGORY_UNIFORM_JOBS "Jobs"
#define SUBCATEGORY_UNIFORM_SUITS "Suits"
#define SUBCATEGORY_UNIFORM_SKIRTS "Skirts"
#define SUBCATEGORY_UNIFORM_DRESSES "Dresses"
#define SUBCATEGORY_UNIFORM_SWEATERS "Sweaters"
#define SUBCATEGORY_UNIFORM_PANTS "Pants"
#define SUBCATEGORY_UNIFORM_SHORTS "Shorts"
#define LOADOUT_CATEGORY_UNIFORM "Uniform" //there's so many types of uniform it's best to have lots of categories
#define LOADOUT_SUBCATEGORY_UNIFORM_GENERAL "General"
#define LOADOUT_SUBCATEGORY_UNIFORM_JOBS "Jobs"
#define LOADOUT_SUBCATEGORY_UNIFORM_SUITS "Suits"
#define LOADOUT_SUBCATEGORY_UNIFORM_SKIRTS "Skirts"
#define LOADOUT_SUBCATEGORY_UNIFORM_DRESSES "Dresses"
#define LOADOUT_SUBCATEGORY_UNIFORM_SWEATERS "Sweaters"
#define LOADOUT_SUBCATEGORY_UNIFORM_PANTS "Pants"
#define LOADOUT_SUBCATEGORY_UNIFORM_SHORTS "Shorts"
//suit
#define CATEGORY_SUIT "Suit"
#define SUBCATEGORY_SUIT_GENERAL "General"
#define SUBCATEGORY_SUIT_COATS "Coats"
#define SUBCATEGORY_SUIT_JACKETS "Jackets"
#define SUBCATEGORY_SUIT_JOBS "Jobs"
#define LOADOUT_CATEGORY_SUIT "Suit"
#define LOADOUT_SUBCATEGORY_SUIT_GENERAL "General"
#define LOADOUT_SUBCATEGORY_SUIT_COATS "Coats"
#define LOADOUT_SUBCATEGORY_SUIT_JACKETS "Jackets"
#define LOADOUT_SUBCATEGORY_SUIT_JOBS "Jobs"
//head
#define CATEGORY_HEAD "Head"
#define SUBCATEGORY_HEAD_GENERAL "General"
#define SUBCATEGORY_HEAD_JOBS "Jobs"
#define LOADOUT_CATEGORY_HEAD "Head"
#define LOADOUT_SUBCATEGORY_HEAD_GENERAL "General"
#define LOADOUT_SUBCATEGORY_HEAD_JOBS "Jobs"
//shoes
#define CATEGORY_SHOES "Shoes"
#define LOADOUT_CATEGORY_SHOES "Shoes"
//gloves
#define CATEGORY_GLOVES "Gloves"
#define LOADOUT_CATEGORY_GLOVES "Gloves"
//glasses
#define CATEGORY_GLASSES "Glasses"
#define LOADOUT_CATEGORY_GLASSES "Glasses"
//donator items
#define CATEGORY_DONATOR "Donator"
#define LOADOUT_CATEGORY_DONATOR "Donator"
+1
View File
@@ -19,6 +19,7 @@
#define INVESTIGATE_FERMICHEM "fermichem"
#define INVESTIGATE_RCD "rcd"
#define INVESTIGATE_CRYOGENICS "cryogenics"
#define INVESTIGATE_GHOST "ghost"
// Logging types for log_message()
#define LOG_ATTACK (1 << 0)
+2
View File
@@ -46,6 +46,8 @@
// 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
+5 -4
View File
@@ -341,10 +341,11 @@ GLOBAL_LIST_INIT(pda_reskins, list(PDA_SKIN_CLASSIC = 'icons/obj/pda.dmi', PDA_S
#define COLOUR_PRIORITY_AMOUNT 4 //how many priority levels there are.
//Endgame Results
#define NUKE_MISS_STATION 1
#define NUKE_SYNDICATE_BASE 2
#define STATION_DESTROYED_NUKE 3
#define STATION_EVACUATED 4
#define NUKE_NEAR_MISS 1
#define NUKE_MISS_STATION 2
#define NUKE_SYNDICATE_BASE 3
#define STATION_DESTROYED_NUKE 4
#define STATION_EVACUATED 5
#define BLOB_WIN 8
#define BLOB_NUKE 9
#define BLOB_DESTROYED 10
+12
View File
@@ -176,6 +176,15 @@
#define DISGUST_LEVEL_VERYGROSS 50
#define DISGUST_LEVEL_GROSS 25
//Charge levels for Ethereals
#define ETHEREAL_CHARGE_NONE 0
#define ETHEREAL_CHARGE_LOWPOWER 20
#define ETHEREAL_CHARGE_NORMAL 50
#define ETHEREAL_CHARGE_ALMOSTFULL 75
#define ETHEREAL_CHARGE_FULL 100
#define ETHEREAL_CHARGE_OVERLOAD 125
#define ETHEREAL_CHARGE_DANGEROUS 150
//Slime evolution threshold. Controls how fast slimes can split/grow
#define SLIME_EVOLUTION_THRESHOLD 10
@@ -284,6 +293,7 @@
#define DOOR_CRUSH_DAMAGE 15 //the amount of damage that airlocks deal when they crush you
#define HUNGER_FACTOR 0.1 //factor at which mob nutrition decreases
#define ETHEREAL_CHARGE_FACTOR 0.08 //factor at which ethereal's charge decreases
#define REAGENTS_METABOLISM 0.4 //How many units of reagent are consumed per tick, by default.
#define REAGENTS_EFFECT_MULTIPLIER (REAGENTS_METABOLISM / 0.4) // By defining the effect multiplier this way, it'll exactly adjust all effects according to how they originally were with the 0.4 metabolism
@@ -322,3 +332,5 @@
/// If you examine the same atom twice in this timeframe, we call examine_more() instead of examine()
#define EXAMINE_MORE_TIME 1 SECONDS
#define SILENCE_RANGED_MESSAGE (1<<0)
+9
View File
@@ -0,0 +1,9 @@
#define FIRST_DUCT_LAYER 1
#define SECOND_DUCT_LAYER 2
#define THIRD_DUCT_LAYER 4
#define FOURTH_DUCT_LAYER 8
#define FIFTH_DUCT_LAYER 16
#define DUCT_LAYER_DEFAULT THIRD_DUCT_LAYER
#define MACHINE_REAGENT_TRANSFER 10
+1 -2
View File
@@ -8,6 +8,5 @@
GLOBAL_LIST_INIT(blacklisted_pool_reagents, list(
/datum/reagent/toxin/plasma, /datum/reagent/oxygen, /datum/reagent/nitrous_oxide, /datum/reagent/nitrogen, //gases
/datum/reagent/fermi, //blanket fermichem ban sorry. this also covers mkultra, genital enlargers, etc etc.
/datum/reagent/drug/aphrodisiac, /datum/reagent/drug/anaphrodisiac, /datum/reagent/drug/aphrodisiacplus, /datum/reagent/drug/anaphrodisiacplus, //literally asking for prefbreaks
/datum/reagent/consumable/femcum, /datum/reagent/consumable/semen //NO.
/datum/reagent/consumable/semen //NO.
))
+11 -4
View File
@@ -6,10 +6,17 @@
#define QDEL_HINT_IWILLGC 2 //functionally the same as the above. qdel should assume the object will gc on its own, and not check it.
#define QDEL_HINT_HARDDEL 3 //qdel should assume this object won't gc, and queue a hard delete using a hard reference.
#define QDEL_HINT_HARDDEL_NOW 4 //qdel should assume this object won't gc, and hard del it post haste.
#define QDEL_HINT_FINDREFERENCE 5 //functionally identical to QDEL_HINT_QUEUE if TESTING is not enabled in _compiler_options.dm.
//if TESTING is enabled, qdel will call this object's find_references() verb.
#define QDEL_HINT_IFFAIL_FINDREFERENCE 6 //Above but only if gc fails.
//defines for the gc_destroyed var
#ifdef LEGACY_REFERENCE_TRACKING
/** If LEGACY_REFERENCE_TRACKING is enabled, qdel will call this object's find_references() verb.
*
* Functionally identical to QDEL_HINT_QUEUE if GC_FAILURE_HARD_LOOKUP is not enabled in _compiler_options.dm.
*/
#define QDEL_HINT_FINDREFERENCE 5
/// Behavior as QDEL_HINT_FINDREFERENCE, but only if the GC fails and a hard delete is forced.
#define QDEL_HINT_IFFAIL_FINDREFERENCE 6
#endif
#define GC_QUEUE_CHECK 1
#define GC_QUEUE_HARDDELETE 2
+4
View File
@@ -57,6 +57,10 @@
#define ADD_REAGENT 2 // reagent added
#define REM_REAGENT 3 // reagent removed (may still exist)
#define PILL_STYLE_COUNT 22 //Update this if you add more pill icons or you die (literally, we'll toss a nuke at whever your ip turns up)
#define RANDOM_PILL_STYLE 22 //Dont change this one though
#define THRESHOLD_UNHUSK 50 // health threshold for synthflesh/rezadone to unhusk someone
//reagent bitflags, used for altering how they works
+2
View File
@@ -17,6 +17,7 @@
#define ROLE_ALIEN "xenomorph"
#define ROLE_PAI "pAI"
#define ROLE_CULTIST "cultist"
#define ROLE_HERETIC "Heretic"
#define ROLE_BLOB "blob"
#define ROLE_NINJA "space ninja"
#define ROLE_MONKEY "monkey"
@@ -64,6 +65,7 @@ GLOBAL_LIST_INIT(special_roles, list(
ROLE_INTERNAL_AFFAIRS = /datum/game_mode/traitor/internal_affairs,
ROLE_SENTIENCE,
ROLE_GANG = /datum/game_mode/gang,
ROLE_HERETIC = /datum/game_mode/heretics,
ROLE_BLOODSUCKER = /datum/game_mode/bloodsucker
//ROLE_MONSTERHUNTER Disabled for now
))
+4
View File
@@ -111,6 +111,10 @@
#define STATUS_EFFECT_LIMP /datum/status_effect/limp //For when you have a busted leg (or two!) and want additional slowdown when walking on that leg
#define STATUS_EFFECT_AMOK /datum/status_effect/amok //Makes the target automatically strike out at adjecent non-heretics.
#define STATUS_EFFECT_CLOUDSTRUCK /datum/status_effect/cloudstruck //blinds and applies an overlay.
/// shoves inflict this to indicate the next shove while this is in effect should disarm guns
#define STATUS_EFFECT_OFF_BALANCE /datum/status_effect/off_balance
+1 -7
View File
@@ -146,11 +146,11 @@
#define SSAIR_EQUALIZE 8
#define SSAIR_ACTIVETURFS 9
// |= on overlays is not actually guaranteed to not add same appearances but we're optimistically using it anyway.
#define COMPILE_OVERLAYS(A)\
if (TRUE) {\
var/list/ad = A.add_overlays;\
var/list/rm = A.remove_overlays;\
var/list/po = A.priority_overlays;\
if(LAZYLEN(rm)){\
A.overlays -= rm;\
A.remove_overlays = null;\
@@ -159,11 +159,5 @@
A.overlays |= ad;\
A.add_overlays = null;\
}\
if(LAZYLEN(po)){\
A.overlays |= po;\
}\
else{\
A.priority_overlays = null;\
}\
A.flags_1 &= ~OVERLAY_QUEUED_1;\
}
+28 -4
View File
@@ -1,4 +1,28 @@
#define UI_INTERACTIVE 2 // Green/Interactive
#define UI_UPDATE 1 // Orange/Updates Only
#define UI_DISABLED 0 // Red/Disabled
#define UI_CLOSE -1 // Closed
/// Green eye; fully interactive
#define UI_INTERACTIVE 2
/// Orange eye; updates but is not interactive
#define UI_UPDATE 1
/// Red eye; disabled, does not update
#define UI_DISABLED 0
/// UI Should close
#define UI_CLOSE -1
/// Maximum number of windows that can be suspended/reused
#define TGUI_WINDOW_SOFT_LIMIT 5
/// Maximum number of open windows
#define TGUI_WINDOW_HARD_LIMIT 9
/// Maximum ping timeout allowed to detect zombie windows
#define TGUI_PING_TIMEOUT 4 SECONDS
/// Window does not exist
#define TGUI_WINDOW_CLOSED 0
/// Window was just opened, but is still not ready to be sent data
#define TGUI_WINDOW_LOADING 1
/// Window is free and ready to receive data
#define TGUI_WINDOW_READY 2
/// Get a window id based on the provided pool index
#define TGUI_WINDOW_ID(index) "tgui-window-[index]"
/// Get a pool index of the provided window id
#define TGUI_WINDOW_INDEX(window_id) text2num(copytext(window_id, 13))
+6 -2
View File
@@ -104,7 +104,9 @@
#define TRAIT_RESISTCOLD "resist_cold"
#define TRAIT_RESISTHIGHPRESSURE "resist_high_pressure"
#define TRAIT_RESISTLOWPRESSURE "resist_low_pressure"
#define TRAIT_BOMBIMMUNE "bomb_immunity"
#define TRAIT_RADIMMUNE "rad_immunity"
#define TRAIT_GENELESS "geneless"
#define TRAIT_VIRUSIMMUNE "virus_immunity"
#define TRAIT_PIERCEIMMUNE "pierce_immunity"
#define TRAIT_NODISMEMBER "dismember_immunity"
@@ -178,6 +180,7 @@
#define TRAIT_FREERUNNING "freerunning"
#define TRAIT_SKITTISH "skittish"
#define TRAIT_POOR_AIM "poor_aim"
#define TRAIT_INSANE_AIM "insane_aim" //they don't miss. they never miss. it was all part of their immaculate plan.
#define TRAIT_PROSOPAGNOSIA "prosopagnosia"
#define TRAIT_DRUNK_HEALING "drunk_healing"
#define TRAIT_TAGGER "tagger"
@@ -202,7 +205,7 @@
#define TRAIT_NO_ALCOHOL "alcohol_intolerance"
#define TRAIT_MUTATION_STASIS "mutation_stasis" //Prevents processed genetics mutations from processing.
#define TRAIT_FAST_PUMP "fast_pump"
#define TRAIT_NICE_SHOT "nice_shot" //hnnnnnnnggggg..... you're pretty good....
#define TRAIT_NICE_SHOT "nice_shot" //hnnnnnnnggggg..... you're pretty good...
// mobility flag traits
// IN THE FUTURE, IT WOULD BE NICE TO DO SOMETHING SIMILAR TO https://github.com/tgstation/tgstation/pull/48923/files (ofcourse not nearly the same because I have my.. thoughts on it)
@@ -256,6 +259,7 @@
#define CURSED_ITEM_TRAIT "cursed-item" // The item is magically cursed
#define ABSTRACT_ITEM_TRAIT "abstract-item"
#define STATUS_EFFECT_TRAIT "status-effect"
#define CLOTHING_TRAIT "clothing"
#define ROUNDSTART_TRAIT "roundstart" //cannot be removed without admin intervention
#define GHOSTROLE_TRAIT "ghostrole"
#define APHRO_TRAIT "aphro"
@@ -310,4 +314,4 @@
#define ACTIVE_BLOCK_TRAIT "active_block"
/// This trait is added by the parry system.
#define ACTIVE_PARRY_TRAIT "active_parry"
#define STICKY_NODROP "sticky-nodrop" //sticky nodrop sounds like a bad soundcloud rapper's name
#define STICKY_NODROP "sticky-nodrop" //sticky nodrop sounds like a bad soundcloud rapper's name
+1
View File
@@ -75,6 +75,7 @@
#define VV_HK_MARK "mark"
#define VV_HK_ADDCOMPONENT "addcomponent"
#define VV_HK_MODIFY_TRAITS "modtraits"
#define VV_HK_VIEW_REFERENCES "viewreferences"
// /datum/gas_mixture
#define VV_HK_SET_MOLES "set_moles"
+12 -3
View File
@@ -201,9 +201,18 @@
WRITE_LOG(log, "Starting up round ID [GLOB.round_id].\n-------------------------")
/* ui logging */
/proc/log_tgui(text)
WRITE_LOG(GLOB.tgui_log, text)
/proc/log_tgui(user_or_client, text)
var/entry = ""
if(!user_or_client)
entry += "no user"
else if(istype(user_or_client, /mob))
var/mob/user = user_or_client
entry += "[user.ckey] (as [user])"
else if(istype(user_or_client, /client))
var/client/client = user_or_client
entry += "[client.ckey]"
entry += ":\n[text]"
WRITE_LOG(GLOB.tgui_log, entry)
/* Close open log handles. This should be called as late as possible, and no logging should hapen after. */
/proc/shutdown_logging()
+13 -6
View File
@@ -85,9 +85,6 @@ GLOBAL_VAR_INIT(cmp_field, "name")
/proc/cmp_advdisease_resistance_asc(datum/disease/advance/A, datum/disease/advance/B)
return A.totalResistance() - B.totalResistance()
/proc/cmp_job_display_asc(datum/job/A, datum/job/B)
return A.display_order - B.display_order
/proc/cmp_uplink_items_dsc(datum/uplink_item/A, datum/uplink_item/B)
return sorttext(initial(B.name), initial(A.name))
@@ -97,9 +94,6 @@ GLOBAL_VAR_INIT(cmp_field, "name")
/proc/cmp_numbered_displays_name_dsc(datum/numbered_display/A, datum/numbered_display/B)
return sorttext(B.sample_object.name, A.sample_object.name)
/proc/cmp_reagents_asc(datum/reagent/a, datum/reagent/b)
return sorttext(initial(b.name),initial(a.name))
/proc/cmp_quirk_asc(datum/quirk/A, datum/quirk/B)
var/a_sign = num2sign(initial(A.value) * -1)
var/b_sign = num2sign(initial(B.value) * -1)
@@ -133,3 +127,16 @@ GLOBAL_VAR_INIT(cmp_field, "name")
return A.required_temp - B.required_temp //return coldest
else
return B.required_temp - A.required_temp //return hottest
/proc/cmp_mob_realname_dsc(mob/A,mob/B)
return sorttext(A.real_name,B.real_name)
/proc/cmp_job_display_asc(datum/job/A, datum/job/B)
return A.display_order - B.display_order
/proc/cmp_reagents_asc(datum/reagent/a, datum/reagent/b)
return sorttext(initial(b.name),initial(a.name))
/proc/cmp_typepaths_asc(A, B)
return sorttext("[B]","[A]")
+4 -4
View File
@@ -37,10 +37,10 @@
//CIT CHANGES START HERE, ADDS SNOWFLAKE BODYPARTS AND MORE
//mammal bodyparts (fucking furries)
init_sprite_accessory_subtypes(/datum/sprite_accessory/mam_body_markings, GLOB.mam_body_markings_list)
init_sprite_accessory_subtypes(/datum/sprite_accessory/mam_tails, GLOB.mam_tails_list)
init_sprite_accessory_subtypes(/datum/sprite_accessory/mam_ears, GLOB.mam_ears_list)
init_sprite_accessory_subtypes(/datum/sprite_accessory/mam_snouts, GLOB.mam_snouts_list)
init_sprite_accessory_subtypes(/datum/sprite_accessory/mam_tails_animated, GLOB.mam_tails_animated_list)
init_sprite_accessory_subtypes(/datum/sprite_accessory/tails/mam_tails, GLOB.mam_tails_list)
init_sprite_accessory_subtypes(/datum/sprite_accessory/ears/mam_ears, GLOB.mam_ears_list)
init_sprite_accessory_subtypes(/datum/sprite_accessory/snouts/mam_snouts, GLOB.mam_snouts_list)
init_sprite_accessory_subtypes(/datum/sprite_accessory/tails_animated/mam_tails_animated, GLOB.mam_tails_animated_list)
init_sprite_accessory_subtypes(/datum/sprite_accessory/taur, GLOB.taur_list)
//xeno parts (hiss?)
init_sprite_accessory_subtypes(/datum/sprite_accessory/xeno_head, GLOB.xeno_head_list)
+14 -7
View File
@@ -93,16 +93,16 @@
if(!GLOB.mam_body_markings_list.len)
init_sprite_accessory_subtypes(/datum/sprite_accessory/mam_body_markings, GLOB.mam_body_markings_list)
if(!GLOB.mam_tails_list.len)
init_sprite_accessory_subtypes(/datum/sprite_accessory/mam_tails, GLOB.mam_tails_list)
init_sprite_accessory_subtypes(/datum/sprite_accessory/tails/mam_tails, GLOB.mam_tails_list)
if(!GLOB.mam_ears_list.len)
init_sprite_accessory_subtypes(/datum/sprite_accessory/mam_ears, GLOB.mam_ears_list)
init_sprite_accessory_subtypes(/datum/sprite_accessory/ears/mam_ears, GLOB.mam_ears_list)
if(!GLOB.mam_snouts_list.len)
init_sprite_accessory_subtypes(/datum/sprite_accessory/mam_snouts, GLOB.mam_snouts_list)
init_sprite_accessory_subtypes(/datum/sprite_accessory/snouts/mam_snouts, GLOB.mam_snouts_list)
//snowflake check so people's ckey features don't get randomly put on unmonkeys/spawns
var/list/snowflake_mam_tails_list = list()
for(var/mtpath in GLOB.mam_tails_list)
var/datum/sprite_accessory/mam_tails/instance = GLOB.mam_tails_list[mtpath]
var/datum/sprite_accessory/tails/mam_tails/instance = GLOB.mam_tails_list[mtpath]
if(istype(instance, /datum/sprite_accessory))
var/datum/sprite_accessory/S = instance
if(intendedspecies && S.recommended_species && !S.recommended_species.Find(intendedspecies))
@@ -120,7 +120,7 @@
snowflake_markings_list[S.name] = mmpath
var/list/snowflake_ears_list = list()
for(var/mepath in GLOB.mam_ears_list)
var/datum/sprite_accessory/mam_ears/instance = GLOB.mam_ears_list[mepath]
var/datum/sprite_accessory/ears/mam_ears/instance = GLOB.mam_ears_list[mepath]
if(istype(instance, /datum/sprite_accessory))
var/datum/sprite_accessory/S = instance
if(intendedspecies && S.recommended_species && !S.recommended_species.Find(intendedspecies))
@@ -129,7 +129,7 @@
snowflake_ears_list[S.name] = mepath
var/list/snowflake_mam_snouts_list = list()
for(var/mspath in GLOB.mam_snouts_list)
var/datum/sprite_accessory/mam_snouts/instance = GLOB.mam_snouts_list[mspath]
var/datum/sprite_accessory/snouts/mam_snouts/instance = GLOB.mam_snouts_list[mspath]
if(istype(instance, /datum/sprite_accessory))
var/datum/sprite_accessory/S = instance
if(intendedspecies && S.recommended_species && !S.recommended_species.Find(intendedspecies))
@@ -138,7 +138,7 @@
snowflake_mam_snouts_list[S.name] = mspath
var/list/snowflake_ipc_antenna_list = list()
for(var/mspath in GLOB.ipc_antennas_list)
var/datum/sprite_accessory/mam_snouts/instance = GLOB.ipc_antennas_list[mspath]
var/datum/sprite_accessory/snouts/mam_snouts/instance = GLOB.ipc_antennas_list[mspath]
if(istype(instance, /datum/sprite_accessory))
var/datum/sprite_accessory/S = instance
if(intendedspecies && S.recommended_species && !S.recommended_species.Find(intendedspecies))
@@ -264,6 +264,13 @@
if(!findname(.))
break
/proc/random_unique_ethereal_name(attempts_to_find_unique_name=10)
for(var/i in 1 to attempts_to_find_unique_name)
. = capitalize(ethereal_name())
if(!findname(.))
break
/proc/random_unique_moth_name(attempts_to_find_unique_name=10)
for(var/i in 1 to attempts_to_find_unique_name)
. = capitalize(pick(GLOB.moth_first)) + " " + capitalize(pick(GLOB.moth_last))
+6
View File
@@ -4,6 +4,12 @@
else
return "[pick(GLOB.lizard_names_female)]-[pick(GLOB.lizard_names_female)]"
/proc/ethereal_name()
var/tempname = "[pick(GLOB.ethereal_names)] [random_capital_letter()]"
if(prob(65))
tempname += random_capital_letter()
return tempname
/proc/plasmaman_name()
return "[pick(GLOB.plasmaman_names)] \Roman[rand(1,99)]"
+4
View File
@@ -776,6 +776,10 @@ GLOBAL_LIST_INIT(binary, list("0","1"))
else
return "[number]\th"
/proc/random_capital_letter()
return uppertext(pick(GLOB.alphabet))
/proc/unintelligize(message)
var/regex/word_boundaries = regex(@"\b[\S]+\b", "g")
var/prefix = message[1]
+17 -4
View File
@@ -11,15 +11,28 @@
#ifdef TESTING
#define DATUMVAR_DEBUGGING_MODE
//#define GC_FAILURE_HARD_LOOKUP //makes paths that fail to GC call find_references before del'ing.
//implies FIND_REF_NO_CHECK_TICK
/*
* Enables extools-powered reference tracking system, letting you see what is referencing objects that refuse to hard delete.
*
* * Requires TESTING to be defined to work.
*/
//#define REFERENCE_TRACKING
//#define FIND_REF_NO_CHECK_TICK //Sets world.loop_checks to false and prevents find references from sleeping
///Method of tracking references without using extools. Slower, kept to avoid over-reliance on extools.
//#define LEGACY_REFERENCE_TRACKING
#ifdef LEGACY_REFERENCE_TRACKING
///Use the legacy reference on things hard deleting by default.
//#define GC_FAILURE_HARD_LOOKUP
#ifdef GC_FAILURE_HARD_LOOKUP
#define FIND_REF_NO_CHECK_TICK
#endif //ifdef GC_FAILURE_HARD_LOOKUP
#endif //ifdef LEGACY_REFERENCE_TRACKING
//#define VISUALIZE_ACTIVE_TURFS //Highlights atmos active turfs in green
#endif
#endif //ifdef TESTING
//#define UNIT_TESTS //Enables unit tests via TEST_RUN_PARAMETER
#ifndef PRELOAD_RSC //set to:
+5 -1
View File
@@ -9,4 +9,8 @@ GLOBAL_DATUM(start_state, /datum/station_state) // Used in round-end report
//TODO clear this one up too
GLOBAL_DATUM(cult_narsie, /obj/singularity/narsie/large/cult)
GLOBAL_DATUM(cult_narsie, /obj/singularity/narsie/large/cult)
///We want reality_smash_tracker to exist only once and be accesable from anywhere.
GLOBAL_DATUM_INIT(reality_smash_track, /datum/reality_smash_tracker, new)
+47 -1
View File
@@ -40,6 +40,46 @@ GLOBAL_LIST_EMPTY(insect_fluffs_list)
GLOBAL_LIST_EMPTY(insect_markings_list)
GLOBAL_LIST_EMPTY(caps_list)
//a way to index the right bodypart list given the type of bodypart
GLOBAL_LIST_INIT(mutant_reference_list, list(
"tail_lizard" = GLOB.tails_list_lizard,
"waggingtail_lizard" = GLOB.animated_tails_list_lizard,
"tail_human" = GLOB.tails_list_human,
"waggingtail_human" = GLOB.animated_tails_list_human,
"spines" = GLOB.spines_list,
"waggingspines" = GLOB.animated_spines_list,
"snout" = GLOB.snouts_list,
"frills" = GLOB.frills_list,
"horns" = GLOB.horns_list,
"ears" = GLOB.ears_list,
"body_markings" = GLOB.body_markings_list,
"wings" = GLOB.wings_list,
"wingsopen" = GLOB.wings_open_list,
"deco_wings" = GLOB.deco_wings_list,
"legs" = GLOB.legs_list,
"insect_wings" = GLOB.insect_wings_list,
"insect_fluff" = GLOB.insect_fluffs_list,
"insect_markings" = GLOB.insect_markings_list,
"caps" = GLOB.caps_list,
"ipc_screen" = GLOB.ipc_screens_list,
"ipc_antenna" = GLOB.ipc_antennas_list,
"mam_tail" = GLOB.mam_tails_list,
"mam_waggingtail" = GLOB.mam_tails_animated_list,
"mam_body_markings" = GLOB.mam_body_markings_list,
"mam_ears" = GLOB.mam_ears_list,
"mam_snouts" = GLOB.mam_snouts_list,
"taur" = GLOB.taur_list,
"xenodorsal" = GLOB.xeno_dorsal_list,
"xenohead" = GLOB.xeno_head_list,
"xenotail" = GLOB.xeno_tail_list))
//references wag types to regular types, wings open to wings, etc
GLOBAL_LIST_INIT(mutant_transform_list, list("wingsopen" = "wings",
"waggingtail_human" = "tail_human",
"waggingtail_lizard" = "tail_lizard",
"waggingspines" = "spines",
"mam_waggingtail" = "mam_tail"))
GLOBAL_LIST_INIT(ghost_forms_with_directions_list, list("ghost")) //stores the ghost forms that support directional sprites
GLOBAL_LIST_INIT(ghost_forms_with_accessories_list, list("ghost")) //stores the ghost forms that support hair and other such things
@@ -231,4 +271,10 @@ GLOBAL_LIST_INIT(speech_verbs, list("default","says","gibbers", "states", "chitt
GLOBAL_LIST_INIT(roundstart_tongues, list("default","human tongue" = /obj/item/organ/tongue, "lizard tongue" = /obj/item/organ/tongue/lizard, "skeleton tongue" = /obj/item/organ/tongue/bone, "fly tongue" = /obj/item/organ/tongue/fly, "ipc tongue" = /obj/item/organ/tongue/robot/ipc))
//locked parts are those that your picked species requires to have
//unlocked parts are those that anyone can choose on customisation regardless
//parts not in unlocked, but in all, are thus locked
GLOBAL_LIST_INIT(all_mutant_parts, list("tail_lizard" = "Tail", "mam_tail" = "Tail", "tail_human" = "Tail", "snout" = "Snout", "frills" = "Frills", "spines" = "Spines", "body_markings" = "Body Markings", "mam_body_markings" = "Species Markings" , "mam_ears" = "Ears", "ears" = "Ears", "mam_snouts" = "Snout", "legs" = "Legs", "deco_wings" = "Decorative Wings", "insect_wings" = "Insect Wings", "insect_fluff" = "Insect Fluff", "taur" = "Tauric Body", "insect_markings" = "Insect Markings", "wings" = "Wings", "xenohead" = "Caste Head", "xenotail" = "Tail", "xenodorsal" = "Dorsal Spines", "ipc_screen" = "Screen", "ipc_antenna" = "Antenna", "meat_type" = "Meat Type", "horns" = "Horns"))
GLOBAL_LIST_INIT(unlocked_mutant_parts, list("horns", "insect_fluff"))
//parts in either of the above two lists that require a second option that allows them to be coloured
GLOBAL_LIST_INIT(colored_mutant_parts, list("insect_wings" = "wings_color", "deco_wings" = "wings_color", "horns" = "horns_color"))
+11 -11
View File
@@ -1,13 +1,13 @@
GLOBAL_LIST_INIT(loadout_categories, list(
CATEGORY_BACKPACK = list(SUBCATEGORY_BACKPACK_GENERAL, SUBCATEGORY_BACKPACK_TOYS),
CATEGORY_NECK = list(SUBCATEGORY_NECK_GENERAL, SUBCATEGORY_NECK_TIE, SUBCATEGORY_NECK_SCARVES),
CATEGORY_MASK = NOSUBCATEGORY,
CATEGORY_HANDS = NOSUBCATEGORY,
CATEGORY_UNIFORM = list(SUBCATEGORY_UNIFORM_GENERAL, SUBCATEGORY_UNIFORM_JOBS, SUBCATEGORY_UNIFORM_SUITS, SUBCATEGORY_UNIFORM_SKIRTS, SUBCATEGORY_UNIFORM_DRESSES, SUBCATEGORY_UNIFORM_SWEATERS, SUBCATEGORY_UNIFORM_PANTS, SUBCATEGORY_UNIFORM_SHORTS),
CATEGORY_SUIT = list(SUBCATEGORY_SUIT_GENERAL, SUBCATEGORY_SUIT_COATS, SUBCATEGORY_SUIT_JACKETS, SUBCATEGORY_SUIT_JOBS),
CATEGORY_HEAD = list(SUBCATEGORY_HEAD_GENERAL, SUBCATEGORY_HEAD_JOBS),
CATEGORY_SHOES = NOSUBCATEGORY,
CATEGORY_GLOVES = NOSUBCATEGORY,
CATEGORY_GLASSES = NOSUBCATEGORY,
CATEGORY_DONATOR = NOSUBCATEGORY
LOADOUT_CATEGORY_BACKPACK = list(LOADOUT_SUBCATEGORY_BACKPACK_GENERAL, LOADOUT_SUBCATEGORY_BACKPACK_TOYS),
LOADOUT_CATEGORY_NECK = list(LOADOUT_SUBCATEGORY_NECK_GENERAL, LOADOUT_SUBCATEGORY_NECK_TIE, LOADOUT_SUBCATEGORY_NECK_SCARVES),
LOADOUT_CATEGORY_MASK = LOADOUT_SUBCATEGORIES_NONE,
LOADOUT_CATEGORY_HANDS = LOADOUT_SUBCATEGORIES_NONE,
LOADOUT_CATEGORY_UNIFORM = list(LOADOUT_SUBCATEGORY_UNIFORM_GENERAL, LOADOUT_SUBCATEGORY_UNIFORM_JOBS, LOADOUT_SUBCATEGORY_UNIFORM_SUITS, LOADOUT_SUBCATEGORY_UNIFORM_SKIRTS, LOADOUT_SUBCATEGORY_UNIFORM_DRESSES, LOADOUT_SUBCATEGORY_UNIFORM_SWEATERS, LOADOUT_SUBCATEGORY_UNIFORM_PANTS, LOADOUT_SUBCATEGORY_UNIFORM_SHORTS),
LOADOUT_CATEGORY_SUIT = list(LOADOUT_SUBCATEGORY_SUIT_GENERAL, LOADOUT_SUBCATEGORY_SUIT_COATS, LOADOUT_SUBCATEGORY_SUIT_JACKETS, LOADOUT_SUBCATEGORY_SUIT_JOBS),
LOADOUT_CATEGORY_HEAD = list(LOADOUT_SUBCATEGORY_HEAD_GENERAL, LOADOUT_SUBCATEGORY_HEAD_JOBS),
LOADOUT_CATEGORY_SHOES = LOADOUT_SUBCATEGORIES_NONE,
LOADOUT_CATEGORY_GLOVES = LOADOUT_SUBCATEGORIES_NONE,
LOADOUT_CATEGORY_GLASSES = LOADOUT_SUBCATEGORIES_NONE,
LOADOUT_CATEGORY_DONATOR = LOADOUT_SUBCATEGORIES_NONE
))
+1
View File
@@ -17,6 +17,7 @@ GLOBAL_LIST_INIT(golem_names, world.file2list("strings/names/golem.txt"))
GLOBAL_LIST_INIT(moth_first, world.file2list("strings/names/moth_first.txt"))
GLOBAL_LIST_INIT(moth_last, world.file2list("strings/names/moth_last.txt"))
GLOBAL_LIST_INIT(plasmaman_names, world.file2list("strings/names/plasmaman.txt"))
GLOBAL_LIST_INIT(ethereal_names, world.file2list("strings/names/ethereal.txt"))
GLOBAL_LIST_INIT(posibrain_names, world.file2list("strings/names/posibrain.txt"))
GLOBAL_LIST_INIT(nightmare_names, world.file2list("strings/names/nightmare.txt"))
GLOBAL_LIST_INIT(megacarp_first_names, world.file2list("strings/names/megacarp1.txt"))
+2
View File
@@ -37,7 +37,9 @@ GLOBAL_LIST_INIT(traits_by_type, list(
"TRAIT_RESISTCOLD" = TRAIT_RESISTCOLD,
"TRAIT_RESISTHIGHPRESSURE" = TRAIT_RESISTHIGHPRESSURE,
"TRAIT_RESISTLOWPRESSURE" = TRAIT_RESISTLOWPRESSURE,
"TRAIT_BOMBIMMUNE" = TRAIT_BOMBIMMUNE,
"TRAIT_RADIMMUNE" = TRAIT_RADIMMUNE,
"TRAIT_GENELESS" = TRAIT_GENELESS,
"TRAIT_VIRUSIMMUNE" = TRAIT_VIRUSIMMUNE,
"TRAIT_PIERCEIMMUNE" = TRAIT_PIERCEIMMUNE,
"TRAIT_NODISMEMBER" = TRAIT_NODISMEMBER,
+10
View File
@@ -493,6 +493,16 @@ Recharging stations are available in robotics, the dormitory bathrooms, and the
desc = "Unit's power cell is running low. Recharging stations are available in robotics, the dormitory bathrooms, and the AI satellite."
icon_state = "lowcell"
/obj/screen/alert/etherealcharge
name = "Low Blood Charge"
desc = "Your blood's electric charge is running low, find a source of charge for your blood. Use a recharging station found in robotics or the dormitory bathrooms, or eat some Ethereal-friendly food."
icon_state = "etherealcharge"
/obj/screen/alert/ethereal_overcharge
name = "Blood Overcharge"
desc = "Your blood's electric charge is becoming dangerously high, find an outlet for your energy. Use Grab Intent on an APC to channel your energy into it."
icon_state = "ethereal_overcharge"
//Need to cover all use cases - emag, illegal upgrade module, malf AI hack, traitor cyborg
/obj/screen/alert/hacked
name = "Hacked"
+3 -3
View File
@@ -122,13 +122,13 @@
if(pixel_size == pixels)
return
pixel_size = pixels
cut_overlays(TRUE)
cut_overlays()
//our icon size is 32 pixels.
transform = matrix((pixels - (VOLUMETRIC_STORAGE_BOX_BORDER_SIZE * 2)) / VOLUMETRIC_STORAGE_BOX_ICON_SIZE, 0, 0, 0, 1, 0)
left.pixel_x = -((pixels - VOLUMETRIC_STORAGE_BOX_ICON_SIZE) * 0.5) - VOLUMETRIC_STORAGE_BOX_BORDER_SIZE
right.pixel_x = ((pixels - VOLUMETRIC_STORAGE_BOX_ICON_SIZE) * 0.5) + VOLUMETRIC_STORAGE_BOX_BORDER_SIZE
add_overlay(left, TRUE)
add_overlay(right, TRUE)
add_overlay(left)
add_overlay(right)
/obj/screen/storage/volumetric_edge
layer = VOLUMETRIC_STORAGE_BOX_LAYER
@@ -98,6 +98,11 @@
config_entry_value = 6
min_val = 1
/datum/config_entry/number/ecult_scaling_coeff //how much does the amount of players get divided by to determine e_cult
config_entry_value = 6
integer = FALSE
min_val = 1
/datum/config_entry/number/security_scaling_coeff //how much does the amount of players get divided by to determine open security officer positions
config_entry_value = 8
min_val = 1
@@ -529,4 +534,4 @@
config_entry_value = 6
/datum/config_entry/number/max_shuttle_size
config_entry_value = 250
config_entry_value = 500
+1 -1
View File
@@ -29,7 +29,7 @@ SUBSYSTEM_DEF(acid)
if(O.acid_level && O.acid_processing())
else
O.cut_overlay(GLOB.acid_overlay, TRUE)
O.update_icon()
processing -= O
if (MC_TICK_CHECK)
+5
View File
@@ -0,0 +1,5 @@
PROCESSING_SUBSYSTEM_DEF(fluids)
name = "Fluids"
wait = 20
stat_tag = "FD" //its actually Fluid Ducts
flags = SS_NO_INIT | SS_TICKER
+22 -130
View File
@@ -25,7 +25,7 @@ SUBSYSTEM_DEF(garbage)
//Queue
var/list/queues
#ifdef TESTING
#ifdef LEGACY_REFERENCE_TRACKING
var/list/reference_find_on_fail = list()
var/list/reference_find_on_fail_types = list()
#endif
@@ -134,7 +134,7 @@ SUBSYSTEM_DEF(garbage)
++gcedlasttick
++totalgcs
pass_counts[level]++
#ifdef TESTING
#ifdef LEGACY_REFERENCE_TRACKING
reference_find_on_fail -= refID //It's deleted we don't care anymore.
#endif
if (MC_TICK_CHECK)
@@ -145,7 +145,9 @@ SUBSYSTEM_DEF(garbage)
fail_counts[level]++
switch (level)
if (GC_QUEUE_CHECK)
#ifdef TESTING
#ifdef REFERENCE_TRACKING
D.find_references()
#elif defined(LEGACY_REFERENCE_TRACKING)
if(reference_find_on_fail[refID])
D.find_references()
#ifdef GC_FAILURE_HARD_LOOKUP
@@ -156,7 +158,19 @@ SUBSYSTEM_DEF(garbage)
#endif
var/type = D.type
var/datum/qdel_item/I = items[type]
#ifdef TESTING
log_world("## TESTING: GC: -- \ref[D] | [type] was unable to be GC'd --")
for(var/c in GLOB.admins) //Using testing() here would fill the logs with ADMIN_VV garbage
var/client/admin = c
if(!check_rights_for(admin, R_ADMIN))
continue
to_chat(admin, "## TESTING: GC: -- [ADMIN_VV(D)] | [type] was unable to be GC'd --")
testing("GC: -- \ref[src] | [type] was unable to be GC'd --")
#endif
#ifdef REFERENCE_TRACKING
GLOB.deletion_failures += D //It should no longer be bothered by the GC, manual deletion only.
continue
#endif
I.failures++
if (GC_QUEUE_HARDDELETE)
HardDelete(D)
@@ -181,7 +195,7 @@ SUBSYSTEM_DEF(garbage)
var/gctime = world.time
var/refid = "\ref[D]"
#ifdef TESTING
#ifdef LEGACY_REFERENCE_TRACKING
if(reference_find_on_fail_types[D.type])
reference_find_on_fail["\ref[D]"] = TRUE
#endif
@@ -193,7 +207,7 @@ SUBSYSTEM_DEF(garbage)
queue[refid] = gctime
#ifdef TESTING
#ifdef LEGACY_REFERENCE_TRACKING
/datum/controller/subsystem/garbage/proc/add_type_to_findref(type)
if(!ispath(type))
return "NOT A VAILD PATH"
@@ -260,12 +274,6 @@ SUBSYSTEM_DEF(garbage)
/datum/qdel_item/New(mytype)
name = "[mytype]"
#ifdef TESTING
/proc/qdel_and_find_ref_if_fail(datum/D, force = FALSE)
SSgarbage.reference_find_on_fail["\ref[D]"] = TRUE
qdel(D, force)
#endif
// Should be treated as a replacement for the 'del' keyword.
// Datums passed to this will be given a chance to clean up references to allow the GC to collect them.
/proc/qdel(datum/D, force=FALSE, ...)
@@ -319,16 +327,13 @@ SUBSYSTEM_DEF(garbage)
SSgarbage.Queue(D, GC_QUEUE_HARDDELETE)
if (QDEL_HINT_HARDDEL_NOW) //qdel should assume this object won't gc, and hard del it post haste.
SSgarbage.HardDelete(D)
if (QDEL_HINT_FINDREFERENCE)//qdel will, if TESTING is enabled, display all references to this object, then queue the object for deletion.
#ifdef LEGACY_REFERENCE_TRACKING
if (QDEL_HINT_FINDREFERENCE) //qdel will, if LEGACY_REFERENCE_TRACKING is enabled, display all references to this object, then queue the object for deletion.
SSgarbage.Queue(D)
#ifdef TESTING
D.find_references()
#endif
if (QDEL_HINT_IFFAIL_FINDREFERENCE)
SSgarbage.Queue(D)
#ifdef TESTING
SSgarbage.reference_find_on_fail["\ref[D]"] = TRUE
#endif
#endif
else
#ifdef TESTING
if(!I.no_hint)
@@ -339,119 +344,6 @@ SUBSYSTEM_DEF(garbage)
else if(D.gc_destroyed == GC_CURRENTLY_BEING_QDELETED)
CRASH("[D.type] destroy proc was called multiple times, likely due to a qdel loop in the Destroy logic")
#ifdef TESTING
/datum/verb/find_refs()
set category = "Debug"
set name = "Find References"
set src in world
find_references(FALSE)
/datum/proc/find_references(skip_alert)
running_find_references = type
if(usr && usr.client)
if(usr.client.running_find_references)
testing("CANCELLED search for references to a [usr.client.running_find_references].")
usr.client.running_find_references = null
running_find_references = null
//restart the garbage collector
SSgarbage.can_fire = 1
SSgarbage.next_fire = world.time + world.tick_lag
return
if(!skip_alert)
if(alert("Running this will lock everything up for about 5 minutes. Would you like to begin the search?", "Find References", "Yes", "No") == "No")
running_find_references = null
return
//this keeps the garbage collector from failing to collect objects being searched for in here
SSgarbage.can_fire = 0
if(usr && usr.client)
usr.client.running_find_references = type
testing("Beginning search for references to a [type].")
last_find_references = world.time
DoSearchVar(GLOB) //globals
for(var/datum/thing in world) //atoms (don't beleive it's lies)
DoSearchVar(thing, "World -> [thing]")
for (var/datum/thing) //datums
DoSearchVar(thing, "World -> [thing]")
for (var/client/thing) //clients
DoSearchVar(thing, "World -> [thing]")
testing("Completed search for references to a [type].")
if(usr && usr.client)
usr.client.running_find_references = null
running_find_references = null
//restart the garbage collector
SSgarbage.can_fire = 1
SSgarbage.next_fire = world.time + world.tick_lag
/datum/verb/qdel_then_find_references()
set category = "Debug"
set name = "qdel() then Find References"
set src in world
qdel(src, TRUE) //Force.
if(!running_find_references)
find_references(TRUE)
/datum/verb/qdel_then_if_fail_find_references()
set category = "Debug"
set name = "qdel() then Find References if GC failure"
set src in world
qdel_and_find_ref_if_fail(src, TRUE)
/datum/proc/DoSearchVar(X, Xname, recursive_limit = 64)
if(usr && usr.client && !usr.client.running_find_references)
return
if (!recursive_limit)
return
if(istype(X, /datum))
var/datum/D = X
if(D.last_find_references == last_find_references)
return
D.last_find_references = last_find_references
var/list/L = D.vars
for(var/varname in L)
if (varname == "vars")
continue
var/variable = L[varname]
if(variable == src)
testing("Found [src.type] \ref[src] in [D.type]'s [varname] var. [Xname]")
else if(islist(variable))
DoSearchVar(variable, "[Xname] -> list", recursive_limit-1)
else if(islist(X))
var/normal = IS_NORMAL_LIST(X)
for(var/I in X)
if (I == src)
testing("Found [src.type] \ref[src] in list [Xname].")
else if (I && !isnum(I) && normal && X[I] == src)
testing("Found [src.type] \ref[src] in list [Xname]\[[I]\]")
else if (islist(I))
DoSearchVar(I, "[Xname] -> list", recursive_limit-1)
#ifndef FIND_REF_NO_CHECK_TICK
CHECK_TICK
#endif
#endif
#ifdef TESTING
/proc/writeDatumCount()
var/list/datums = list()
+1 -1
View File
@@ -113,7 +113,7 @@ SUBSYSTEM_DEF(mapping)
// needs to be whitelisted for underground too so place_below ruins work
seedRuins(ice_ruins, CONFIG_GET(number/icemoon_budget), list(/area/icemoon/surface/outdoors/unexplored, /area/icemoon/underground/unexplored), ice_ruins_templates)
for (var/ice_z in ice_ruins)
spawn_rivers(ice_z, 4, /turf/open/openspace/icemoon, /area/icemoon/surface/outdoors/unexplored/rivers)
spawn_rivers(ice_z, 4, /turf/open/transparent/openspace/icemoon, /area/icemoon/surface/outdoors/unexplored/rivers)
var/list/ice_ruins_underground = levels_by_trait(ZTRAIT_ICE_RUINS_UNDERGROUND)
if (ice_ruins_underground.len)
+8 -28
View File
@@ -114,67 +114,47 @@ SUBSYSTEM_DEF(overlays)
#define NOT_QUEUED_ALREADY (!(flags_1 & OVERLAY_QUEUED_1))
#define QUEUE_FOR_COMPILE flags_1 |= OVERLAY_QUEUED_1; SSoverlays.queue += src;
/atom/proc/cut_overlays(priority = FALSE)
LAZYINITLIST(priority_overlays)
/atom/proc/cut_overlays()
LAZYINITLIST(remove_overlays)
LAZYINITLIST(add_overlays)
remove_overlays = overlays.Copy()
add_overlays.Cut()
if(priority)
priority_overlays.Cut()
//If not already queued for work and there are overlays to remove
if(NOT_QUEUED_ALREADY && remove_overlays.len)
QUEUE_FOR_COMPILE
/atom/proc/cut_overlay(list/overlays, priority)
/atom/proc/cut_overlay(list/overlays)
if(!overlays)
return
overlays = build_appearance_list(overlays)
LAZYINITLIST(add_overlays) //always initialized after this point
LAZYINITLIST(priority_overlays)
LAZYINITLIST(remove_overlays)
var/a_len = add_overlays.len
var/r_len = remove_overlays.len
var/p_len = priority_overlays.len
remove_overlays += overlays
add_overlays -= overlays
if(priority)
var/list/cached_priority = priority_overlays
LAZYREMOVE(cached_priority, overlays)
var/fa_len = add_overlays.len
var/fr_len = remove_overlays.len
var/fp_len = priority_overlays.len
//If not already queued and there is work to be done
if(NOT_QUEUED_ALREADY && (fa_len != a_len || fr_len != r_len || fp_len != p_len))
if(NOT_QUEUED_ALREADY && (fa_len != a_len || fr_len != r_len))
QUEUE_FOR_COMPILE
/atom/proc/add_overlay(list/overlays, priority = FALSE)
/atom/proc/add_overlay(list/overlays)
if(!overlays)
return
overlays = build_appearance_list(overlays)
LAZYINITLIST(add_overlays) //always initialized after this point
LAZYINITLIST(priority_overlays)
var/a_len = add_overlays.len
var/p_len = priority_overlays.len
if(priority)
priority_overlays += overlays //or in the image. Can we use [image] = image?
var/fp_len = priority_overlays.len
if(NOT_QUEUED_ALREADY && fp_len != p_len)
QUEUE_FOR_COMPILE
else
add_overlays += overlays
var/fa_len = add_overlays.len
if(NOT_QUEUED_ALREADY && fa_len != a_len)
QUEUE_FOR_COMPILE
add_overlays += overlays
var/fa_len = add_overlays.len
if(NOT_QUEUED_ALREADY && fa_len != a_len)
QUEUE_FOR_COMPILE
/atom/proc/copy_overlays(atom/other, cut_old) //copys our_overlays from another atom
if(!other)
+7 -5
View File
@@ -775,12 +775,14 @@ SUBSYSTEM_DEF(shuttle)
preview_shuttle = null
/datum/controller/subsystem/shuttle/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.admin_state)
ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
if(!ui)
ui = new(user, src, ui_key, "ShuttleManipulator", name, 800, 600, master_ui, state)
ui.open()
/datum/controller/subsystem/shuttle/ui_state(mob/user)
return GLOB.admin_state
/datum/controller/subsystem/shuttle/ui_interact(mob/user, datum/tgui/ui)
ui = SStgui.try_update_ui(user, src, ui)
if(!ui)
ui = new(user, src, "ShuttleManipulator")
ui.open()
/datum/controller/subsystem/shuttle/ui_data(mob/user)
var/list/data = list()
+330 -16
View File
@@ -1,3 +1,12 @@
/**
* tgui subsystem
*
* Contains all tgui state and subsystem code.
*
* Copyright (c) 2020 Aleksej Komarov
* SPDX-License-Identifier: MIT
*/
SUBSYSTEM_DEF(tgui)
name = "tgui"
wait = 9
@@ -5,33 +14,338 @@ SUBSYSTEM_DEF(tgui)
priority = FIRE_PRIORITY_TGUI
runlevels = RUNLEVEL_LOBBY | RUNLEVELS_DEFAULT
var/list/currentrun = list()
var/list/open_uis = list() // A list of open UIs, grouped by src_object and ui_key.
var/list/processing_uis = list() // A list of processing UIs, ungrouped.
var/basehtml // The HTML base used for all UIs.
/// A list of UIs scheduled to process
var/list/current_run = list()
/// A list of open UIs
var/list/open_uis = list()
/// A list of open UIs, grouped by src_object.
var/list/open_uis_by_src = list()
/// The HTML base used for all UIs.
var/basehtml
/datum/controller/subsystem/tgui/PreInit()
basehtml = file2text('tgui/packages/tgui/public/tgui.html')
basehtml = file2text('tgui/packages/tgui/public/tgui.html')
/datum/controller/subsystem/tgui/Shutdown()
close_all_uis()
/datum/controller/subsystem/tgui/stat_entry()
..("P:[processing_uis.len]")
..("P:[open_uis.len]")
/datum/controller/subsystem/tgui/fire(resumed = 0)
if (!resumed)
src.currentrun = processing_uis.Copy()
//cache for sanic speed (lists are references anyways)
var/list/currentrun = src.currentrun
while(currentrun.len)
var/datum/tgui/ui = currentrun[currentrun.len]
currentrun.len--
if(!resumed)
src.current_run = open_uis.Copy()
// Cache for sanic speed (lists are references anyways)
var/list/current_run = src.current_run
while(current_run.len)
var/datum/tgui/ui = current_run[current_run.len]
current_run.len--
// TODO: Move user/src_object check to process()
if(ui && ui.user && ui.src_object)
ui.process()
else
processing_uis.Remove(ui)
if (MC_TICK_CHECK)
open_uis.Remove(ui)
if(MC_TICK_CHECK)
return
/**
* public
*
* Requests a usable tgui window from the pool.
* Returns null if pool was exhausted.
*
* required user mob
* return datum/tgui
*/
/datum/controller/subsystem/tgui/proc/request_pooled_window(mob/user)
if(!user.client)
return null
var/list/windows = user.client.tgui_windows
var/window_id
var/datum/tgui_window/window
var/window_found = FALSE
// Find a usable window
for(var/i in 1 to TGUI_WINDOW_HARD_LIMIT)
window_id = TGUI_WINDOW_ID(i)
window = windows[window_id]
// As we are looping, create missing window datums
if(!window)
window = new(user.client, window_id, pooled = TRUE)
// Skip windows with acquired locks
if(window.locked)
continue
if(window.status == TGUI_WINDOW_READY)
return window
if(window.status == TGUI_WINDOW_CLOSED)
window.status = TGUI_WINDOW_LOADING
window_found = TRUE
break
if(!window_found)
log_tgui(user, "Error: Pool exhausted")
return null
return window
/**
* public
*
* Force closes all tgui windows.
*
* required user mob
*/
/datum/controller/subsystem/tgui/proc/force_close_all_windows(mob/user)
log_tgui(user, "force_close_all_windows")
if(user.client)
user.client.tgui_windows = list()
for(var/i in 1 to TGUI_WINDOW_HARD_LIMIT)
var/window_id = TGUI_WINDOW_ID(i)
user << browse(null, "window=[window_id]")
/**
* public
*
* Force closes the tgui window by window_id.
*
* required user mob
* required window_id string
*/
/datum/controller/subsystem/tgui/proc/force_close_window(mob/user, window_id)
log_tgui(user, "force_close_window")
// Close all tgui datums based on window_id.
for(var/datum/tgui/ui in user.tgui_open_uis)
if(ui.window && ui.window.id == window_id)
ui.close(can_be_suspended = FALSE)
// Unset machine just to be sure.
user.unset_machine()
// Close window directly just to be sure.
user << browse(null, "window=[window_id]")
/**
* public
*
* Try to find an instance of a UI, and push an update to it.
*
* required user mob The mob who opened/is using the UI.
* required src_object datum The object/datum which owns the UI.
* optional ui datum/tgui The UI to be updated, if it exists.
* optional force_open bool If the UI should be re-opened instead of updated.
*
* return datum/tgui The found UI.
*/
/datum/controller/subsystem/tgui/proc/try_update_ui(
mob/user,
datum/src_object,
datum/tgui/ui)
// Look up a UI if it wasn't passed
if(isnull(ui))
ui = get_open_ui(user, src_object)
// Couldn't find a UI.
if(isnull(ui))
return null
ui.process_status()
// UI ended up with the closed status
// or is actively trying to close itself.
// FIXME: Doesn't actually fix the paper bug.
if(ui.status <= UI_CLOSE)
ui.close()
return null
ui.send_update()
return ui
/**
* public
*
* Get a open UI given a user and src_object.
*
* required user mob The mob who opened/is using the UI.
* required src_object datum The object/datum which owns the UI.
*
* return datum/tgui The found UI.
*/
/datum/controller/subsystem/tgui/proc/get_open_ui(mob/user, datum/src_object)
var/key = "[REF(src_object)]"
// No UIs opened for this src_object
if(isnull(open_uis_by_src[key]) || !istype(open_uis_by_src[key], /list))
return null
for(var/datum/tgui/ui in open_uis_by_src[key])
// Make sure we have the right user
if(ui.user == user)
return ui
return null
/**
* public
*
* Update all UIs attached to src_object.
*
* required src_object datum The object/datum which owns the UIs.
*
* return int The number of UIs updated.
*/
/datum/controller/subsystem/tgui/proc/update_uis(datum/src_object)
var/count = 0
var/key = "[REF(src_object)]"
// No UIs opened for this src_object
if(isnull(open_uis_by_src[key]) || !istype(open_uis_by_src[key], /list))
return count
for(var/datum/tgui/ui in open_uis_by_src[key])
// Check if UI is valid.
if(ui && ui.src_object && ui.user && ui.src_object.ui_host(ui.user))
ui.process(force = 1)
count++
return count
/**
* public
*
* Close all UIs attached to src_object.
*
* required src_object datum The object/datum which owns the UIs.
*
* return int The number of UIs closed.
*/
/datum/controller/subsystem/tgui/proc/close_uis(datum/src_object)
var/count = 0
var/key = "[REF(src_object)]"
// No UIs opened for this src_object
if(isnull(open_uis_by_src[key]) || !istype(open_uis_by_src[key], /list))
return count
for(var/datum/tgui/ui in open_uis_by_src[key])
// Check if UI is valid.
if(ui && ui.src_object && ui.user && ui.src_object.ui_host(ui.user))
ui.close()
count++
return count
/**
* public
*
* Close all UIs regardless of their attachment to src_object.
*
* return int The number of UIs closed.
*/
/datum/controller/subsystem/tgui/proc/close_all_uis()
var/count = 0
for(var/key in open_uis_by_src)
for(var/datum/tgui/ui in open_uis_by_src[key])
// Check if UI is valid.
if(ui && ui.src_object && ui.user && ui.src_object.ui_host(ui.user))
ui.close()
count++
return count
/**
* public
*
* Update all UIs belonging to a user.
*
* required user mob The mob who opened/is using the UI.
* optional src_object datum If provided, only update UIs belonging this src_object.
*
* return int The number of UIs updated.
*/
/datum/controller/subsystem/tgui/proc/update_user_uis(mob/user, datum/src_object)
var/count = 0
if(length(user?.tgui_open_uis) == 0)
return count
for(var/datum/tgui/ui in user.tgui_open_uis)
if(isnull(src_object) || ui.src_object == src_object)
ui.process(force = 1)
count++
return count
/**
* public
*
* Close all UIs belonging to a user.
*
* required user mob The mob who opened/is using the UI.
* optional src_object datum If provided, only close UIs belonging this src_object.
*
* return int The number of UIs closed.
*/
/datum/controller/subsystem/tgui/proc/close_user_uis(mob/user, datum/src_object)
var/count = 0
if(length(user?.tgui_open_uis) == 0)
return count
for(var/datum/tgui/ui in user.tgui_open_uis)
if(isnull(src_object) || ui.src_object == src_object)
ui.close()
count++
return count
/**
* private
*
* Add a UI to the list of open UIs.
*
* required ui datum/tgui The UI to be added.
*/
/datum/controller/subsystem/tgui/proc/on_open(datum/tgui/ui)
var/key = "[REF(ui.src_object)]"
if(isnull(open_uis_by_src[key]) || !istype(open_uis_by_src[key], /list))
open_uis_by_src[key] = list()
ui.user.tgui_open_uis |= ui
var/list/uis = open_uis_by_src[key]
uis |= ui
open_uis |= ui
/**
* private
*
* Remove a UI from the list of open UIs.
*
* required ui datum/tgui The UI to be removed.
*
* return bool If the UI was removed or not.
*/
/datum/controller/subsystem/tgui/proc/on_close(datum/tgui/ui)
var/key = "[REF(ui.src_object)]"
if(isnull(open_uis_by_src[key]) || !istype(open_uis_by_src[key], /list))
return FALSE
// Remove it from the list of processing UIs.
open_uis.Remove(ui)
// If the user exists, remove it from them too.
if(ui.user)
ui.user.tgui_open_uis.Remove(ui)
var/list/uis = open_uis_by_src[key]
uis.Remove(ui)
if(length(uis) == 0)
open_uis_by_src.Remove(key)
return TRUE
/**
* private
*
* Handle client logout, by closing all their UIs.
*
* required user mob The mob which logged out.
*
* return int The number of UIs closed.
*/
/datum/controller/subsystem/tgui/proc/on_logout(mob/user)
close_user_uis(user)
/**
* private
*
* Handle clients switching mobs, by transferring their UIs.
*
* required user source The client's original mob.
* required user target The client's new mob.
*
* return bool If the UIs were transferred.
*/
/datum/controller/subsystem/tgui/proc/on_transfer(mob/source, mob/target)
// The old mob had no open UIs.
if(length(source?.tgui_open_uis) == 0)
return FALSE
if(isnull(target.tgui_open_uis) || !istype(target.tgui_open_uis, /list))
target.tgui_open_uis = list()
// Transfer all the UIs.
for(var/datum/tgui/ui in source.tgui_open_uis)
// Inform the UIs of their new owner.
ui.user = target
target.tgui_open_uis.Add(ui)
// Clear the old list.
source.tgui_open_uis.Cut()
return TRUE
+1 -1
View File
@@ -157,7 +157,7 @@
/datum/action/proc/ApplyIcon(obj/screen/movable/action_button/current_button, force = FALSE)
if(icon_icon && button_icon_state && ((current_button.button_icon_state != button_icon_state) || force))
current_button.cut_overlays(TRUE)
current_button.cut_overlays()
current_button.add_overlay(mutable_appearance(icon_icon, button_icon_state))
current_button.button_icon_state = button_icon_state
+17 -10
View File
@@ -431,25 +431,31 @@
if(!owner)
owner = M
/datum/ai_laws/proc/get_law_list(include_zeroth = 0, show_numbers = 1)
/**
* Generates a list of all laws on this datum, including rendered HTML tags if required
*
* Arguments:
* * include_zeroth - Operator that controls if law 0 or law 666 is returned in the set
* * show_numbers - Operator that controls if law numbers are prepended to the returned laws
* * render_html - Operator controlling if HTML tags are rendered on the returned laws
*/
/datum/ai_laws/proc/get_law_list(include_zeroth = FALSE, show_numbers = TRUE, render_html = TRUE)
var/list/data = list()
if (include_zeroth && devillaws && devillaws.len)
for(var/i in devillaws)
data += "[show_numbers ? "666:" : ""] <font color='#cc5500'>[i]</font>"
if (include_zeroth && devillaws)
for(var/law in devillaws)
data += "[show_numbers ? "666:" : ""] [render_html ? "<font color='#cc5500'>[law]</font>" : law]"
if (include_zeroth && zeroth)
data += "[show_numbers ? "0:" : ""] <font color='#ff0000'><b>[zeroth]</b></font>"
data += "[show_numbers ? "0:" : ""] [render_html ? "<font color='#ff0000'><b>[zeroth]</b></font>" : zeroth]"
for(var/law in hacked)
if (length(law) > 0)
var/num = ionnum()
data += "[show_numbers ? "[num]:" : ""] <font color='#660000'>[law]</font>"
data += "[show_numbers ? "[ionnum()]:" : ""] [render_html ? "<font color='#660000'>[law]</font>" : law]"
for(var/law in ion)
if (length(law) > 0)
var/num = ionnum()
data += "[show_numbers ? "[num]:" : ""] <font color='#547DFE'>[law]</font>"
data += "[show_numbers ? "[ionnum()]:" : ""] [render_html ? "<font color='#547DFE'>[law]</font>" : law]"
var/number = 1
for(var/law in inherent)
@@ -459,6 +465,7 @@
for(var/law in supplied)
if (length(law) > 0)
data += "[show_numbers ? "[number]:" : ""] <font color='#990099'>[law]</font>"
data += "[show_numbers ? "[number]:" : ""] [render_html ? "<font color='#990099'>[law]</font>" : law]"
number++
return data
+11 -13
View File
@@ -203,9 +203,9 @@
Set var amt to the value current cycle req is pointing to, its amount of type we need to delete
Get var/surroundings list of things accessable to crafting by get_environment()
Check the type of the current cycle req
If its reagent then do a while loop, inside it try to locate() reagent containers, inside such containers try to locate needed reagent, if there isnt remove thing from surroundings
If its reagent then do a while loop, inside it try to locate() reagent containers, inside such containers try to locate needed reagent, if there isn't remove thing from surroundings
If there is enough reagent in the search result then delete the needed amount, create the same type of reagent with the same data var and put it into deletion list
If there isnt enough take all of that reagent from the container, put into deletion list, substract the amt var by the volume of reagent, remove the container from surroundings list and keep searching
If there isn't enough take all of that reagent from the container, put into deletion list, substract the amt var by the volume of reagent, remove the container from surroundings list and keep searching
While doing above stuff check deletion list if it already has such reagnet, if yes merge instead of adding second one
If its stack check if it has enough amount
If yes create new stack with the needed amount and put in into deletion list, substract taken amount from the stack
@@ -216,7 +216,7 @@
Then do a loop over parts var of the recipe
Do similar stuff to what we have done above, but now in deletion list, until the parts conditions are satisfied keep taking from the deletion list and putting it into parts list for return
After its done loop over deletion list and delete all the shit that wasnt taken by parts loop
After its done loop over deletion list and delete all the shit that wasn't taken by parts loop
del_reqs return the list of parts resulting object will receive as argument of CheckParts proc, on the atom level it will add them all to the contents, on all other levels it calls ..() and does whatever is needed afterwards but from contents list already
*/
@@ -323,9 +323,12 @@
if(user == parent)
ui_interact(user)
/datum/component/personal_crafting/ui_state(mob/user)
return GLOB.not_incapacitated_turf_state
//For the UI related things we're going to assume the user is a mob rather than typesetting it to an atom as the UI isn't generated if the parent is an atom
/datum/component/personal_crafting/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.not_incapacitated_turf_state)
ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
/datum/component/personal_crafting/ui_interact(mob/user, datum/tgui/ui)
ui = SStgui.try_update_ui(user, src, ui)
if(!ui)
cur_category = categories[1]
if(islist(categories[cur_category]))
@@ -333,7 +336,7 @@
cur_subcategory = subcats[1]
else
cur_subcategory = CAT_NONE
ui = new(user, src, ui_key, "PersonalCrafting", "Crafting Menu", 700, 800, master_ui, state)
ui = new(user, src, "PersonalCrafting")
ui.open()
/datum/component/personal_crafting/ui_data(mob/user)
@@ -413,13 +416,8 @@
display_compact = !display_compact
. = TRUE
if("set_category")
if(!isnull(params["category"]))
cur_category = params["category"]
if(!isnull(params["subcategory"]))
if(params["subcategory"] == "0")
cur_subcategory = ""
else
cur_subcategory = params["subcategory"]
cur_category = params["category"]
cur_subcategory = params["subcategory"] || ""
. = TRUE
/datum/component/personal_crafting/proc/build_recipe_data(datum/crafting_recipe/R)
@@ -40,13 +40,23 @@
reqs = list(/obj/item/paper = 20)
category = CAT_CLOTHING
/datum/crafting_recipe/balaclavabreath
name = "Breathaclava"
result = /obj/item/clothing/mask/balaclava/breath
time = 10
reqs = list(/obj/item/clothing/mask/balaclava = 1,
/obj/item/clothing/mask/breath = 1)
category = CAT_CLOTHING
/datum/crafting_recipe/armwraps
name = "Armwraps"
result = /obj/item/clothing/gloves/fingerless/pugilist
time = 60
tools = list(TOOL_WIRECUTTER)
reqs = list(/obj/item/stack/sheet/cloth = 4,
/obj/item/stack/sheet/durathread = 2,
/obj/item/stack/sticky_tape = 2,
/obj/item/stack/sheet/leather = 2)
category = CAT_CLOTHING
@@ -2,6 +2,15 @@
//Large Objects//
/////////////////
/datum/crafting_recipe/plunger
name = "Plunger"
result = /obj/item/plunger
time = 1
reqs = list(/obj/item/stack/sheet/plastic = 1,
/obj/item/stack/sheet/mineral/wood = 1)
category = CAT_MISC
subcategory = CAT_TOOL
/datum/crafting_recipe/showercurtain
name = "Shower Curtains"
reqs = list(/obj/item/stack/sheet/cloth = 2,
@@ -126,7 +135,7 @@
/datum/crafting_recipe/brute_pack
name = "Suture Pack"
result = /obj/item/stack/medical/suture/one
result = /obj/item/stack/medical/suture/five
time = 1
reqs = list(/obj/item/stack/medical/gauze = 1,
/datum/reagent/medicine/styptic_powder = 10)
@@ -135,7 +144,7 @@
/datum/crafting_recipe/burn_pack
name = "Regenerative Mesh"
result = /obj/item/stack/medical/mesh/one
result = /obj/item/stack/medical/mesh/five
time = 1
reqs = list(/obj/item/stack/medical/gauze = 1,
/datum/reagent/medicine/silver_sulfadiazine = 10)
@@ -188,7 +197,7 @@
result = /obj/item/screwdriver/bronze
reqs = list(/obj/item/screwdriver = 1,
/obj/item/stack/cable_coil = 10,
/obj/item/stack/tile/bronze = 1,
/obj/item/stack/sheet/bronze = 1,
/datum/reagent/water = 15)
time = 40
subcategory = CAT_TOOL
@@ -200,7 +209,7 @@
result = /obj/item/weldingtool/bronze
reqs = list(/obj/item/weldingtool = 1,
/obj/item/stack/cable_coil = 10,
/obj/item/stack/tile/bronze = 1,
/obj/item/stack/sheet/bronze = 1,
/datum/reagent/water = 15)
time = 40
subcategory = CAT_TOOL
@@ -212,7 +221,7 @@
result = /obj/item/wirecutters/bronze
reqs = list(/obj/item/wirecutters = 1,
/obj/item/stack/cable_coil = 10,
/obj/item/stack/tile/bronze = 1,
/obj/item/stack/sheet/bronze = 1,
/datum/reagent/water = 15)
time = 40
subcategory = CAT_TOOL
@@ -224,7 +233,7 @@
result = /obj/item/crowbar/bronze
reqs = list(/obj/item/crowbar = 1,
/obj/item/stack/cable_coil = 10,
/obj/item/stack/tile/bronze = 1,
/obj/item/stack/sheet/bronze = 1,
/datum/reagent/water = 15)
time = 40
subcategory = CAT_TOOL
@@ -236,7 +245,7 @@
result = /obj/item/wrench/bronze
reqs = list(/obj/item/wrench = 1,
/obj/item/stack/cable_coil = 10,
/obj/item/stack/tile/bronze = 1,
/obj/item/stack/sheet/bronze = 1,
/datum/reagent/water = 15)
time = 40
subcategory = CAT_TOOL
@@ -269,6 +278,19 @@
subcategory = CAT_TOOL
category = CAT_MISC
/datum/crafting_recipe/heretic/codex
name = "Codex Cicatrix"
result = /obj/item/forbidden_book
tools = list(/obj/item/pen)
reqs = list(/obj/item/paper = 5,
/obj/item/organ/eyes = 1,
/obj/item/organ/heart = 1,
/obj/item/stack/sheet/animalhide/human = 1)
time = 150
subcategory = CAT_MISCELLANEOUS
category = CAT_MISC
always_availible = FALSE
////////////
//Vehicles//
////////////
@@ -324,7 +346,7 @@
result = /obj/item/toy/sword/cx
subcategory = CAT_MISCELLANEOUS
category = CAT_MISC
/datum/crafting_recipe/catgirlplushie
name = "Catgirl Plushie"
reqs = list(/obj/item/toy/plush/hairball = 3)
+5 -2
View File
@@ -119,7 +119,7 @@
UnregisterSignal(weapon, list(COMSIG_MOVABLE_MOVED, COMSIG_PARENT_QDELETING))
if(overlay)
var/atom/A = parent
A.cut_overlay(overlay, TRUE)
UnregisterSignal(A,COMSIG_ATOM_UPDATE_OVERLAYS)
qdel(overlay)
return ..()
@@ -326,7 +326,8 @@
var/matrix/M = matrix()
M.Translate(pixelX, pixelY)
overlay.transform = M
hit.add_overlay(overlay, TRUE)
RegisterSignal(hit,COMSIG_ATOM_UPDATE_OVERLAYS,.proc/apply_overlay)
hit.update_icon()
if(harmful)
hit.visible_message("<span class='danger'>[weapon] embeds itself in [hit]!</span>")
@@ -339,6 +340,8 @@
else
hit.visible_message("<span class='danger'>[weapon] sticks itself to [hit]!</span>")
/datum/component/embedded/proc/apply_overlay(atom/source, list/overlay_list)
overlay_list += overlay
/datum/component/embedded/proc/examineTurf(datum/source, mob/user, list/examine_list)
if(harmful)
+4 -8
View File
@@ -80,19 +80,15 @@ GLOBAL_LIST_EMPTY(GPS_list)
to_chat(user, "<span class='notice'>[parent] is now tracking, and visible to other GPS devices.</span>")
tracking = TRUE
/datum/component/gps/item/ui_interact(mob/user, ui_key = "gps", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) // Remember to use the appropriate state.
/datum/component/gps/item/ui_interact(mob/user, datum/tgui/ui)
if(emped)
to_chat(user, "<span class='hear'>[parent] fizzles weakly.</span>")
return
ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
ui = SStgui.try_update_ui(user, src, ui)
if(!ui)
// Variable window height, depending on how many GPS units there are
// to show, clamped to relatively safe range.
var/gps_window_height = clamp(325 + GLOB.GPS_list.len * 14, 325, 700)
ui = new(user, src, ui_key, "Gps", "Global Positioning System", 470, gps_window_height, master_ui, state) //width, height
ui = new(user, src, "Gps")
ui.open()
ui.set_autoupdate(state = updating)
ui.set_autoupdate(updating)
/datum/component/gps/item/ui_data(mob/user)
var/list/data = list()
+20
View File
@@ -307,6 +307,10 @@
/datum/component/mood/proc/HandleNutrition(mob/living/L)
if(isethereal(L))
HandleCharge(L)
if(HAS_TRAIT(L, TRAIT_NOHUNGER))
return FALSE //no mood events for nutrition
switch(L.nutrition)
if(NUTRITION_LEVEL_FULL to INFINITY)
add_event(null, "nutrition", /datum/mood_event/fat)
@@ -321,6 +325,22 @@
if(0 to NUTRITION_LEVEL_STARVING)
add_event(null, "nutrition", /datum/mood_event/starving)
/datum/component/mood/proc/HandleCharge(mob/living/carbon/human/H)
var/datum/species/ethereal/E = H.dna.species
switch(E.get_charge(H))
if(ETHEREAL_CHARGE_NONE to ETHEREAL_CHARGE_LOWPOWER)
add_event(null, "charge", /datum/mood_event/decharged)
if(ETHEREAL_CHARGE_LOWPOWER to ETHEREAL_CHARGE_NORMAL)
add_event(null, "charge", /datum/mood_event/lowpower)
if(ETHEREAL_CHARGE_NORMAL to ETHEREAL_CHARGE_ALMOSTFULL)
clear_event(null, "charge")
if(ETHEREAL_CHARGE_ALMOSTFULL to ETHEREAL_CHARGE_FULL)
add_event(null, "charge", /datum/mood_event/charged)
if(ETHEREAL_CHARGE_FULL to ETHEREAL_CHARGE_OVERLOAD)
add_event(null, "charge", /datum/mood_event/overcharged)
if(ETHEREAL_CHARGE_OVERLOAD to ETHEREAL_CHARGE_DANGEROUS)
add_event(null, "charge", /datum/mood_event/supercharged)
/datum/component/mood/proc/update_beauty(area/A)
if(A.outdoors) //if we're outside, we don't care.
clear_event(null, "area_beauty")
@@ -0,0 +1,215 @@
/datum/component/plumbing
///Index with "1" = /datum/ductnet/theductpointingnorth etc. "1" being the num2text from NORTH define
var/list/datum/ductnet/ducts = list()
///shortcut to our parents' reagent holder
var/datum/reagents/reagents
///TRUE if we wanna add proper pipe outless under our parent object. this is pretty good if i may so so myself
var/use_overlays = TRUE
///We can't just cut all of the parents' overlays, so we'll track them here
var/list/image/ducterlays
///directions in wich we act as a supplier
var/supply_connects
///direction in wich we act as a demander
var/demand_connects
///FALSE to pretty much just not exist in the plumbing world so we can be moved, TRUE to go plumbo mode
var/active = FALSE
///if TRUE connects will spin with the parent object visually and codually, so you can have it work in any direction. FALSE if you want it to be static
var/turn_connects = TRUE
/datum/component/plumbing/Initialize(start=TRUE, _turn_connects=TRUE) //turn_connects for wheter or not we spin with the object to change our pipes
if(parent && !istype(parent, /atom/movable))
return COMPONENT_INCOMPATIBLE
var/atom/movable/AM = parent
if(!AM.reagents)
return COMPONENT_INCOMPATIBLE
reagents = AM.reagents
turn_connects = _turn_connects
RegisterSignal(parent, list(COMSIG_MOVABLE_MOVED,COMSIG_PARENT_PREQDELETED), .proc/disable)
RegisterSignal(parent, list(COMSIG_OBJ_DEFAULT_UNFASTEN_WRENCH), .proc/toggle_active)
if(start)
enable()
if(use_overlays)
create_overlays()
/datum/component/plumbing/process()
if(!demand_connects || !reagents)
STOP_PROCESSING(SSfluids, src)
return
if(reagents.total_volume < reagents.maximum_volume)
for(var/D in GLOB.cardinals)
if(D & demand_connects)
send_request(D)
///Can we be added to the ductnet?
/datum/component/plumbing/proc/can_add(datum/ductnet/D, dir)
if(!active)
return
if(!dir || !D)
return FALSE
if(num2text(dir) in ducts)
return FALSE
return TRUE
///called from in process(). only calls process_request(), but can be overwritten for children with special behaviour
/datum/component/plumbing/proc/send_request(dir)
process_request(amount = MACHINE_REAGENT_TRANSFER, reagent = null, dir = dir)
///check who can give us what we want, and how many each of them will give us
/datum/component/plumbing/proc/process_request(amount, reagent, dir)
var/list/valid_suppliers = list()
var/datum/ductnet/net
if(!ducts.Find(num2text(dir)))
return
net = ducts[num2text(dir)]
for(var/A in net.suppliers)
var/datum/component/plumbing/supplier = A
if(supplier.can_give(amount, reagent, net))
valid_suppliers += supplier
for(var/A in valid_suppliers)
var/datum/component/plumbing/give = A
give.transfer_to(src, amount / valid_suppliers.len, reagent, net)
///returns TRUE when they can give the specified amount and reagent. called by process request
/datum/component/plumbing/proc/can_give(amount, reagent, datum/ductnet/net)
if(amount <= 0)
return
if(reagent) //only asked for one type of reagent
for(var/A in reagents.reagent_list)
var/datum/reagent/R = A
if(R.type == reagent)
return TRUE
else if(reagents.total_volume > 0) //take whatever
return TRUE
///this is where the reagent is actually transferred and is thus the finish point of our process()
/datum/component/plumbing/proc/transfer_to(datum/component/plumbing/target, amount, reagent, datum/ductnet/net)
if(!reagents || !target || !target.reagents)
return FALSE
if(reagent)
reagents.trans_id_to(target.parent, reagent, amount)
else
reagents.trans_to(target.parent, amount)
///We create our luxurious piping overlays/underlays, to indicate where we do what. only called once if use_overlays = TRUE in Initialize()
/datum/component/plumbing/proc/create_overlays()
var/atom/movable/AM = parent
for(var/image/I in ducterlays)
AM.overlays.Remove(I)
qdel(I)
ducterlays = list()
for(var/D in GLOB.cardinals)
var/color
var/direction
if(D & demand_connects)
color = "red" //red because red is mean and it takes
else if(D & supply_connects)
color = "blue" //blue is nice and gives
else
continue
var/image/I
if(turn_connects)
switch(D)
if(NORTH)
direction = "north"
if(SOUTH)
direction = "south"
if(EAST)
direction = "east"
if(WEST)
direction = "west"
I = image('icons/obj/plumbing/plumbers.dmi', "[direction]-[color]", layer = AM.layer - 1)
else
I = image('icons/obj/plumbing/plumbers.dmi', color, layer = AM.layer - 1) //color is not color as in the var, it's just the name
I.dir = D
AM.add_overlay(I)
ducterlays += I
///we stop acting like a plumbing thing and disconnect if we are, so we can safely be moved and stuff
/datum/component/plumbing/proc/disable()
if(!active)
return
STOP_PROCESSING(SSfluids, src)
for(var/A in ducts)
var/datum/ductnet/D = ducts[A]
D.remove_plumber(src)
active = FALSE
for(var/D in GLOB.cardinals)
if(D & (demand_connects | supply_connects))
for(var/obj/machinery/duct/duct in get_step(parent, D))
duct.attempt_connect()
///settle wherever we are, and start behaving like a piece of plumbing
/datum/component/plumbing/proc/enable()
if(active)
return
update_dir()
active = TRUE
var/atom/movable/AM = parent
for(var/obj/machinery/duct/D in AM.loc) //Destroy any ducts under us. Ducts also self destruct if placed under a plumbing machine. machines disable when they get moved
if(D.anchored) //that should cover everything
D.disconnect_duct()
if(demand_connects)
START_PROCESSING(SSfluids, src)
for(var/D in GLOB.cardinals)
if(D & (demand_connects | supply_connects))
for(var/atom/movable/A in get_step(parent, D))
if(istype(A, /obj/machinery/duct))
var/obj/machinery/duct/duct = A
duct.attempt_connect()
else
var/datum/component/plumbing/P = A.GetComponent(/datum/component/plumbing)
if(P)
direct_connect(P, D)
/// Toggle our machinery on or off. This is called by a hook from default_unfasten_wrench with anchored as only param, so we dont have to copypaste this on every object that can move
/datum/component/plumbing/proc/toggle_active(obj/O, new_state)
if(new_state)
enable()
else
disable()
/** We update our connects only when we settle down by taking our current and original direction to find our new connects
* If someone wants it to fucking spin while connected to something go actually knock yourself out
*/
/datum/component/plumbing/proc/update_dir()
if(!turn_connects)
return
var/atom/movable/AM = parent
var/new_demand_connects
var/new_supply_connects
var/new_dir = AM.dir
var/angle = 180 - dir2angle(new_dir)
if(new_dir == SOUTH)
demand_connects = initial(demand_connects)
supply_connects = initial(supply_connects)
else
for(var/D in GLOB.cardinals)
if(D & initial(demand_connects))
new_demand_connects += turn(D, angle)
if(D & initial(supply_connects))
new_supply_connects += turn(D, angle)
demand_connects = new_demand_connects
supply_connects = new_supply_connects
///Give the direction of a pipe, and it'll return wich direction it originally was when it's object pointed SOUTH
/datum/component/plumbing/proc/get_original_direction(dir)
var/atom/movable/AM = parent
return turn(dir, dir2angle(AM.dir) - 180)
//special case in-case we want to connect directly with another machine without a duct
/datum/component/plumbing/proc/direct_connect(datum/component/plumbing/P, dir)
if(!P.active)
return
var/opposite_dir = turn(dir, 180)
if(P.demand_connects & opposite_dir && supply_connects & dir || P.supply_connects & opposite_dir && demand_connects & dir) //make sure we arent connecting two supplies or demands
var/datum/ductnet/net = new()
net.add_plumber(src, dir)
net.add_plumber(P, opposite_dir)
///has one pipe input that only takes, example is manual output pipe
/datum/component/plumbing/simple_demand
demand_connects = NORTH
///has one pipe output that only supplies. example is liquid pump and manual input pipe
/datum/component/plumbing/simple_supply
supply_connects = NORTH
///input and output, like a holding tank
/datum/component/plumbing/tank
demand_connects = WEST
supply_connects = EAST
@@ -0,0 +1,21 @@
/datum/component/plumbing/acclimator
demand_connects = WEST
supply_connects = EAST
var/obj/machinery/plumbing/acclimator/AC
/datum/component/plumbing/acclimator/Initialize(start=TRUE, _turn_connects=TRUE)
. = ..()
if(!istype(parent, /obj/machinery/plumbing/acclimator))
return COMPONENT_INCOMPATIBLE
AC = parent
/datum/component/plumbing/acclimator/can_give(amount, reagent)
. = ..()
if(. && AC.emptying)
return TRUE
return FALSE
///We're overriding process and not send_request, because all process does is do the requests, so we might aswell cut out the middle man and save some code from running
/datum/component/plumbing/acclimator/process()
if(AC.emptying)
return
. = ..()
+59
View File
@@ -0,0 +1,59 @@
///The magical plumbing component used by the chemical filters. The different supply connects behave differently depending on the filters set on the chemical filter
/datum/component/plumbing/filter
demand_connects = NORTH
supply_connects = SOUTH | EAST | WEST //SOUTH is straight, EAST is left and WEST is right. We look from the perspective of the insert
/datum/component/plumbing/filter/Initialize()
. = ..()
if(!istype(parent, /obj/machinery/plumbing/filter))
return COMPONENT_INCOMPATIBLE
/datum/component/plumbing/filter/can_give(amount, reagent, datum/ductnet/net)
. = ..()
if(.)
var/direction
for(var/A in ducts)
if(ducts[A] == net)
direction = get_original_direction(text2num(A)) //we need it relative to the direction, so filters don't change when we turn the filter
break
if(!direction)
return FALSE
if(reagent)
if(!can_give_in_direction(direction, reagent))
return FALSE
/datum/component/plumbing/filter/transfer_to(datum/component/plumbing/target, amount, reagent, datum/ductnet/net)
if(!reagents || !target || !target.reagents)
return FALSE
var/direction
for(var/A in ducts)
if(ducts[A] == net)
direction = get_original_direction(text2num(A))
break
if(reagent)
reagents.trans_id_to(target.parent, reagent, amount)
else
for(var/A in reagents.reagent_list)
var/datum/reagent/R = A
if(!can_give_in_direction(direction, R.type))
continue
var/new_amount
if(R.volume < amount)
new_amount = amount - R.volume
reagents.trans_id_to(target.parent, R.type, amount)
amount = new_amount
if(amount <= 0)
break
///We check if the direction and reagent are valid to give. Needed for filters since different outputs have different behaviours
/datum/component/plumbing/filter/proc/can_give_in_direction(dir, reagent)
var/obj/machinery/plumbing/filter/F = parent
switch(dir)
if(SOUTH) //straight
if(!F.left.Find(reagent) && !F.right.Find(reagent))
return TRUE
if(WEST) //right
if(F.right.Find(reagent))
return TRUE
if(EAST) //left
if(F.left.Find(reagent))
return TRUE
@@ -0,0 +1,38 @@
/datum/component/plumbing/reaction_chamber
demand_connects = WEST
supply_connects = EAST
/datum/component/plumbing/reaction_chamber/Initialize(start=TRUE, _turn_connects=TRUE)
. = ..()
if(!istype(parent, /obj/machinery/plumbing/reaction_chamber))
return COMPONENT_INCOMPATIBLE
/datum/component/plumbing/reaction_chamber/can_give(amount, reagent, datum/ductnet/net)
. = ..()
var/obj/machinery/plumbing/reaction_chamber/RC = parent
if(!. || !RC.emptying)
return FALSE
/datum/component/plumbing/reaction_chamber/send_request(dir)
var/obj/machinery/plumbing/reaction_chamber/RC = parent
if(RC.emptying || !LAZYLEN(RC.required_reagents))
return
for(var/RT in RC.required_reagents)
var/has_reagent = FALSE
for(var/A in reagents.reagent_list)
var/datum/reagent/RD = A
if(RT == RD.type)
has_reagent = TRUE
if(RD.volume < RC.required_reagents[RT])
process_request(min(RC.required_reagents[RT] - RD.volume, MACHINE_REAGENT_TRANSFER) , RT, dir)
return
if(!has_reagent)
process_request(min(RC.required_reagents[RT], MACHINE_REAGENT_TRANSFER), RT, dir)
return
RC.reagent_flags &= ~NO_REACT
reagents.handle_reactions()
RC.emptying = TRUE //If we move this up, it'll instantly get turned off since any reaction always sets the reagent_total to zero. Other option is make the reaction update
//everything for every chemical removed, wich isn't a good option either.
RC.on_reagent_change() //We need to check it now, because some reactions leave nothing left.
@@ -0,0 +1,45 @@
/datum/component/plumbing/splitter
demand_connects = NORTH
supply_connects = SOUTH | EAST
/datum/component/plumbing/splitter/Initialize()
. = ..()
if(. && !istype(parent, /obj/machinery/plumbing/splitter))
return FALSE
/datum/component/plumbing/splitter/can_give(amount, reagent, datum/ductnet/net)
. = ..()
if(!.)
return
. = FALSE
var/direction
for(var/A in ducts)
if(ducts[A] == net)
direction = get_original_direction(text2num(A))
break
var/obj/machinery/plumbing/splitter/S = parent
switch(direction)
if(SOUTH)
if(S.turn_straight && S.transfer_straight <= amount)
S.turn_straight = FALSE
return TRUE
if(EAST)
if(!S.turn_straight && S.transfer_side <= amount)
S.turn_straight = TRUE
return TRUE
/datum/component/plumbing/splitter/transfer_to(datum/component/plumbing/target, amount, reagent, datum/ductnet/net)
var/direction
for(var/A in ducts)
if(ducts[A] == net)
direction = get_original_direction(text2num(A))
break
var/obj/machinery/plumbing/splitter/S = parent
switch(direction)
if(SOUTH)
if(amount >= S.transfer_straight)
amount = S.transfer_straight
if(EAST)
if(amount >= S.transfer_side)
amount = S.transfer_side
. = ..()
+15
View File
@@ -29,10 +29,18 @@
if(strength > RAD_MINIMUM_CONTAMINATION)
SSradiation.warn(src)
//Let's make er glow
//This relies on parent not being a turf or something. IF YOU CHANGE THAT, CHANGE THIS
var/atom/movable/master = parent
master.add_filter("rad_glow", 2, list("type" = "outline", "color" = "#39ff1430", "size" = 2))
addtimer(CALLBACK(src, .proc/glow_loop, master), rand(1,19))//Things should look uneven
START_PROCESSING(SSradiation, src)
/datum/component/radioactive/Destroy()
STOP_PROCESSING(SSradiation, src)
var/atom/movable/master = parent
master.remove_filter("rad_glow")
return ..()
/datum/component/radioactive/process()
@@ -46,6 +54,13 @@
if(strength <= RAD_BACKGROUND_RADIATION)
return PROCESS_KILL
/datum/component/radioactive/proc/glow_loop(atom/movable/master)
var/filter = master.get_filter("rad_glow")
if(filter)
animate(filter, alpha = 110, time = 15, loop = -1)
animate(alpha = 40, time = 25)
/datum/component/radioactive/InheritComponent(datum/component/C, i_am_original, _strength, _source, _half_life, _can_contaminate)
if(!i_am_original)
return
+18 -20
View File
@@ -14,6 +14,7 @@
var/mob/living/holder //who is currently benefiting from the shield.
var/dissipating = FALSE //Is this shield meant to dissipate over time instead of recharging.
var/del_on_overload = FALSE //will delete itself once it has no charges left.
var/cached_vis_overlay //text identifier of the visual overlay.
/datum/component/shielded/Initialize(current, max = 3, delay = 20 SECONDS, rate = 1, slots, state = "shield-old", broken, \
sound = 'sound/magic/charge.ogg', end_sound = 'sound/machines/ding.ogg', diss = FALSE, del_overload = FALSE)
@@ -47,9 +48,8 @@
holder = L
var/to_add = charges >= 1 ? shield_state : broken_state
if(to_add)
var/mutable_appearance/M = mutable_appearance('icons/effects/effects.dmi', to_add)
M.layer = (L.layer > MOB_LAYER ? L.layer : MOB_LAYER) + 0.01
holder.add_overlay(M, TRUE)
var/layer = (L.layer > MOB_LAYER ? L.layer : MOB_LAYER) + 0.01
SSvis_overlays.add_vis_overlay(L, 'icons/effects/effects.dmi', to_add, layer, GAME_PLANE, L.dir)
/datum/component/shielded/UnregisterFromParent()
. = ..()
@@ -57,9 +57,9 @@
UnregisterSignal(parent, list(COMSIG_ITEM_RUN_BLOCK,COMSIG_ITEM_CHECK_BLOCK,COMSIG_ITEM_EQUIPPED,COMSIG_ITEM_DROPPED))
if(holder)
UnregisterSignal(holder, list(COMSIG_LIVING_RUN_BLOCK, COMSIG_LIVING_GET_BLOCKING_ITEMS))
var/to_remove = charges >= 1 ? shield_state : broken_state
if(to_remove)
holder.cut_overlay(mutable_appearance('icons/effects/effects.dmi', to_remove), TRUE)
if(cached_vis_overlay)
SSvis_overlays.remove_vis_overlay(holder, cached_vis_overlay)
cached_vis_overlay = null
holder = null
/datum/component/shielded/process()
@@ -80,7 +80,7 @@
holder.visible_message("[holder]'s shield overloads!")
qdel(src)
return
if(holder && (old_charges < 1 && charges >= 1) || (!del_on_overload && old_charges >= 1 && charges < 1))
if(holder && ((old_charges < 1 && charges >= 1) || (!del_on_overload && old_charges >= 1 && charges < 1)))
update_shield_overlay(charges < 1)
/datum/component/shielded/proc/adjust_charges(amount)
@@ -93,20 +93,19 @@
holder.visible_message("[holder]'s shield overloads!")
qdel(src)
return
if(holder && (old_charges < 1 && charges >= 1) || (!del_on_overload && old_charges >= 1 && charges < 1))
if(holder && ((old_charges < 1 && charges >= 1) || (!del_on_overload && old_charges >= 1 && charges < 1)))
update_shield_overlay(charges < 1)
/datum/component/shielded/proc/update_shield_overlay(broken)
if(!holder)
return
var/to_remove = broken ? shield_state : broken_state
var/to_add = broken ? broken_state : shield_state
if(to_remove)
holder.cut_overlay(mutable_appearance('icons/effects/effects.dmi', to_remove), TRUE)
if(cached_vis_overlay)
SSvis_overlays.remove_vis_overlay(holder, cached_vis_overlay)
cached_vis_overlay = null
if(to_add)
var/mutable_appearance/M = mutable_appearance('icons/effects/effects.dmi', to_add)
M.layer = (holder.layer > MOB_LAYER ? holder.layer : MOB_LAYER) + 0.01
holder.add_overlay(M, TRUE)
var/layer = (holder.layer > MOB_LAYER ? holder.layer : MOB_LAYER) + 0.01
SSvis_overlays.add_vis_overlay(holder, 'icons/effects/effects.dmi', to_add, layer, GAME_PLANE, holder.dir)
/datum/component/shielded/proc/on_equip(obj/item/source, mob/living/equipper, slot)
if(!(accepted_slots & slotdefine2slotbit(slot)))
@@ -117,17 +116,16 @@
RegisterSignal(equipper, COMSIG_LIVING_GET_BLOCKING_ITEMS, .proc/include_shield)
var/to_add = charges >= 1 ? shield_state : broken_state
if(to_add)
var/mutable_appearance/M = mutable_appearance('icons/effects/effects.dmi', to_add)
M.layer = (holder.layer > MOB_LAYER ? holder.layer : MOB_LAYER) + 0.01
equipper.add_overlay(M, TRUE)
var/layer = (holder.layer > MOB_LAYER ? holder.layer : MOB_LAYER) + 0.01
cached_vis_overlay = SSvis_overlays.add_vis_overlay(holder, 'icons/effects/effects.dmi', to_add, layer, GAME_PLANE, holder.dir)
/datum/component/shielded/proc/on_drop(obj/item/source, mob/dropper)
if(holder == dropper)
UnregisterSignal(holder, COMSIG_LIVING_GET_BLOCKING_ITEMS)
UnregisterSignal(parent, list(COMSIG_ITEM_RUN_BLOCK, COMSIG_ITEM_CHECK_BLOCK))
var/to_remove = charges >= 1 ? shield_state : broken_state
if(to_remove)
holder.cut_overlay(mutable_appearance('icons/effects/effects.dmi', to_remove), TRUE)
if(cached_vis_overlay)
SSvis_overlays.remove_vis_overlay(holder, cached_vis_overlay)
cached_vis_overlay = null
holder = null
/datum/component/shielded/proc/include_shield(mob/source, list/items)
+24 -3
View File
@@ -11,6 +11,13 @@
// This is to stop squeak spam from inhand usage
var/last_use = 0
var/use_delay = 20
// squeak cooldowns
var/last_squeak = 0
var/squeak_delay = 5
/// chance we'll be stopped from squeaking by cooldown when something crossing us squeaks
var/cross_squeak_delay_chance = 33 // about 3 things can squeak at a time
/datum/component/squeak/Initialize(custom_sounds, volume_override, chance_override, step_delay_override, use_delay_override)
if(!isatom(parent))
@@ -19,6 +26,7 @@
if(ismovable(parent))
RegisterSignal(parent, list(COMSIG_MOVABLE_BUMP, COMSIG_MOVABLE_IMPACT), .proc/play_squeak)
RegisterSignal(parent, list(COMSIG_MOVABLE_CROSSED, COMSIG_ITEM_WEARERCROSSED), .proc/play_squeak_crossed)
RegisterSignal(parent, COMSIG_CROSS_SQUEAKED, .proc/delay_squeak)
RegisterSignal(parent, COMSIG_MOVABLE_DISPOSING, .proc/disposing_react)
if(isitem(parent))
RegisterSignal(parent, list(COMSIG_ITEM_ATTACK, COMSIG_ITEM_ATTACK_OBJ, COMSIG_ITEM_HIT_REACT), .proc/play_squeak)
@@ -39,20 +47,28 @@
use_delay = use_delay_override
/datum/component/squeak/proc/play_squeak()
do_play_squeak()
/datum/component/squeak/proc/do_play_squeak(bypass_cooldown = FALSE)
if(!bypass_cooldown && ((last_squeak + squeak_delay) >= world.time))
return FALSE
if(prob(squeak_chance))
if(!override_squeak_sounds)
playsound(parent, pickweight(default_squeak_sounds), volume, 1, -1)
else
playsound(parent, pickweight(override_squeak_sounds), volume, 1, -1)
last_squeak = world.time
return TRUE
return FALSE
/datum/component/squeak/proc/step_squeak()
if(steps > step_delay)
play_squeak()
do_play_squeak(TRUE)
steps = 0
else
steps++
/datum/component/squeak/proc/play_squeak_crossed(atom/movable/AM)
/datum/component/squeak/proc/play_squeak_crossed(datum/source, atom/movable/AM)
if(isitem(AM))
var/obj/item/I = AM
if(I.item_flags & ABSTRACT)
@@ -63,13 +79,18 @@
return
var/atom/current_parent = parent
if(isturf(current_parent.loc))
play_squeak()
if(do_play_squeak())
SEND_SIGNAL(AM, COMSIG_CROSS_SQUEAKED)
/datum/component/squeak/proc/use_squeak()
if(last_use + use_delay < world.time)
last_use = world.time
play_squeak()
/datum/component/squeak/proc/delay_squeak()
if(prob(cross_squeak_delay_chance))
last_squeak = world.time
/datum/component/squeak/proc/on_equip(datum/source, mob/equipper, slot)
RegisterSignal(equipper, COMSIG_MOVABLE_DISPOSING, .proc/disposing_react, TRUE)
+2
View File
@@ -105,6 +105,8 @@
/// Triggered on attack self of the item containing the component
/datum/component/two_handed/proc/on_attack_self(datum/source, mob/user)
if(!user.is_holding(parent))
return //give no quarter to telekinesis powergaemrs (telekinetic wielding will desync the offhand and result in all sorts of bugs so no until someone codes it properly)
if(wielded)
unwield(user)
else
+20 -12
View File
@@ -29,8 +29,8 @@ GLOBAL_LIST_EMPTY(uplinks)
var/saved_player_population = 0
var/list/filters = list()
/datum/component/uplink/Initialize(_owner, _lockable = TRUE, _enabled = FALSE, datum/game_mode/_gamemode, starting_tc = 20, datum/ui_state/_checkstate, datum/traitor_class/traitor_class)
/datum/component/uplink/Initialize(_owner, _lockable = TRUE, _enabled = FALSE, datum/game_mode/_gamemode, starting_tc = 20, datum/traitor_class/traitor_class)
if(!isitem(parent))
return COMPONENT_INCOMPATIBLE
@@ -143,23 +143,21 @@ GLOBAL_LIST_EMPTY(uplinks)
// an unlocked uplink blocks also opening the PDA or headset menu
return COMPONENT_NO_INTERACT
/datum/component/uplink/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, \
datum/tgui/master_ui = null, datum/ui_state/state = GLOB.inventory_state)
/datum/component/uplink/ui_state(mob/user)
if(istype(parent, /obj/item/implant/uplink))
return GLOB.not_incapacitated_state
return GLOB.inventory_state
/datum/component/uplink/ui_interact(mob/user, datum/tgui/ui)
active = TRUE
ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
ui = SStgui.try_update_ui(user, src, ui)
if(!ui)
ui = new(user, src, ui_key, "Uplink", name, 620, 580, master_ui, state)
ui = new(user, src, "Uplink", name)
// This UI is only ever opened by one person,
// and never is updated outside of user input.
ui.set_autoupdate(FALSE)
ui.open()
/datum/component/uplink/ui_host(mob/user)
if(istype(parent, /obj/item/implant)) //implants are like organs, not really located inside mobs codewise.
var/obj/item/implant/I = parent
return I.imp_in
return ..()
/datum/component/uplink/ui_data(mob/user)
if(!user.mind)
return
@@ -187,8 +185,18 @@ GLOBAL_LIST_EMPTY(uplinks)
is_inaccessible = FALSE
if(is_inaccessible)
continue
/*
if(I.restricted_species) //catpeople specfic gloves.
if(ishuman(user))
var/is_inaccessible = TRUE
var/mob/living/carbon/human/H = user
for(var/F in I.restricted_species)
if(F == H.dna.species.id || debug)
is_inaccessible = FALSE
break
if(is_inaccessible)
continue
*/
cat["items"] += list(list(
"name" = I.name,
"cost" = I.cost,
+42 -6
View File
@@ -1,13 +1,13 @@
//TODO: someone please get rid of this shit
/datum/datacore
var/medical[] = list()
var/list/medical = list()
var/medicalPrintCount = 0
var/general[] = list()
var/security[] = list()
var/list/general = list()
var/list/security = list()
var/securityPrintCount = 0
var/securityCrimeCounter = 0
//This list tracks characters spawned in the world and cannot be modified in-game. Currently referenced by respawn_character().
var/locked[] = list()
///This list tracks characters spawned in the world and cannot be modified in-game. Currently referenced by respawn_character().
var/list/locked = list()
/datum/data
var/name = "data"
@@ -91,6 +91,42 @@
if(foundrecord)
foundrecord.fields["rank"] = assignment
/datum/datacore/proc/get_manifest_tg() //copypasted from tg, renamed to avoid namespace conflicts
var/list/manifest_out = list()
var/list/departments = list(
"Command" = GLOB.command_positions,
"Security" = GLOB.security_positions,
"Engineering" = GLOB.engineering_positions,
"Medical" = GLOB.medical_positions,
"Science" = GLOB.science_positions,
"Supply" = GLOB.supply_positions,
"Service" = GLOB.civilian_positions,
"Silicon" = GLOB.nonhuman_positions
)
for(var/datum/data/record/t in GLOB.data_core.general)
var/name = t.fields["name"]
var/rank = t.fields["rank"]
var/has_department = FALSE
for(var/department in departments)
var/list/jobs = departments[department]
if(rank in jobs)
if(!manifest_out[department])
manifest_out[department] = list()
manifest_out[department] += list(list(
"name" = name,
"rank" = rank
))
has_department = TRUE
break
if(!has_department)
if(!manifest_out["Misc"])
manifest_out["Misc"] = list()
manifest_out["Misc"] += list(list(
"name" = name,
"rank" = rank
))
return manifest_out
/datum/datacore/proc/get_manifest(monochrome, OOC)
var/list/heads = list()
var/list/sec = list()
+3
View File
@@ -31,6 +31,9 @@
VV_DROPDOWN_OPTION(VV_HK_EXPOSE, "Show VV To Player")
VV_DROPDOWN_OPTION(VV_HK_ADDCOMPONENT, "Add Component/Element")
VV_DROPDOWN_OPTION(VV_HK_MODIFY_TRAITS, "Modify Traits")
#ifdef REFERENCE_TRACKING
VV_DROPDOWN_OPTION(VV_HK_VIEW_REFERENCES, "View References")
#endif
//This proc is only called if everything topic-wise is verified. The only verifications that should happen here is things like permission checks!
//href_list is a reference, modifying it in these procs WILL change the rest of the proc in topic.dm of admin/view_variables!
@@ -31,4 +31,3 @@
/datum/symptom/inorganic_adaptation/OnRemove(datum/disease/advance/A)
A.infectable_biotypes &= ~MOB_MINERAL
+4 -2
View File
@@ -50,6 +50,7 @@
destination.dna.skin_tone_override = skin_tone_override
destination.dna.features = features.Copy()
destination.set_species(species.type, icon_update=0)
destination.dna.species.say_mod = species.say_mod
destination.dna.real_name = real_name
destination.dna.nameless = nameless
destination.dna.custom_species = custom_species
@@ -74,6 +75,7 @@
new_dna.skin_tone_override = skin_tone_override
new_dna.features = features.Copy()
new_dna.species = new species.type
new_dna.species.say_mod = species.say_mod
new_dna.real_name = real_name
new_dna.nameless = nameless
new_dna.custom_species = custom_species
@@ -135,10 +137,10 @@
L[DNA_COLOR_TWO_BLOCK] = sanitize_hexcolor(features["mcolor2"], 6)
L[DNA_COLOR_THREE_BLOCK] = sanitize_hexcolor(features["mcolor3"], 6)
if(!GLOB.mam_tails_list.len)
init_sprite_accessory_subtypes(/datum/sprite_accessory/mam_tails, GLOB.mam_tails_list)
init_sprite_accessory_subtypes(/datum/sprite_accessory/tails/mam_tails, GLOB.mam_tails_list)
L[DNA_MUTANTTAIL_BLOCK] = construct_block(GLOB.mam_tails_list.Find(features["mam_tail"]), GLOB.mam_tails_list.len)
if(!GLOB.mam_ears_list.len)
init_sprite_accessory_subtypes(/datum/sprite_accessory/mam_ears, GLOB.mam_ears_list)
init_sprite_accessory_subtypes(/datum/sprite_accessory/ears/mam_ears, GLOB.mam_ears_list)
L[DNA_MUTANTEAR_BLOCK] = construct_block(GLOB.mam_ears_list.Find(features["mam_ears"]), GLOB.mam_ears_list.len)
if(!GLOB.mam_body_markings_list.len)
init_sprite_accessory_subtypes(/datum/sprite_accessory/mam_body_markings, GLOB.mam_body_markings_list)
+65
View File
@@ -0,0 +1,65 @@
///We handle the unity part of plumbing. We track who is connected to who.
/datum/ductnet
var/list/suppliers = list()
var/list/demanders = list()
var/list/obj/machinery/duct/ducts = list()
var/capacity
///Add a duct to our network
/datum/ductnet/proc/add_duct(obj/machinery/duct/D)
if(!D || (D in ducts))
return
ducts += D
D.duct = src
///Remove a duct from our network and commit suicide, because this is probably easier than to check who that duct was connected to and what part of us was lost
/datum/ductnet/proc/remove_duct(obj/machinery/duct/ducting)
destroy_network(FALSE)
for(var/obj/machinery/duct/D in ducting.neighbours)
addtimer(CALLBACK(D, /obj/machinery/duct/proc/reconnect), 0) //all needs to happen after the original duct that was destroyed finishes destroying itself
addtimer(CALLBACK(D, /obj/machinery/duct/proc/generate_connects), 0)
qdel(src)
///add a plumbing object to either demanders or suppliers
/datum/ductnet/proc/add_plumber(datum/component/plumbing/P, dir)
if(!P.can_add(src, dir))
return FALSE
P.ducts[num2text(dir)] = src
if(dir & P.supply_connects)
suppliers += P
else if(dir & P.demand_connects)
demanders += P
return TRUE
///remove a plumber. we dont delete ourselves because ductnets dont persist through plumbing objects
/datum/ductnet/proc/remove_plumber(datum/component/plumbing/P)
suppliers.Remove(P) //we're probably only in one of these, but Remove() is inherently sane so this is fine
demanders.Remove(P)
for(var/dir in P.ducts)
if(P.ducts[dir] == src)
P.ducts -= dir
if(!ducts.len) //there were no ducts, so it was a direct connection. we destroy ourselves since a ductnet with only one plumber and no ducts is worthless
destroy_network()
///we combine ductnets. this occurs when someone connects to seperate sets of fluid ducts
/datum/ductnet/proc/assimilate(datum/ductnet/D)
ducts.Add(D.ducts)
suppliers.Add(D.suppliers)
demanders.Add(D.demanders)
for(var/A in D.suppliers + D.demanders)
var/datum/component/plumbing/P = A
for(var/s in P.ducts)
if(P.ducts[s] != D)
continue
P.ducts[s] = src //all your ducts are belong to us
for(var/A in D.ducts)
var/obj/machinery/duct/M = A
M.duct = src //forget your old master
destroy_network()
///destroy the network and tell all our ducts and plumbers we are gone
/datum/ductnet/proc/destroy_network(delete=TRUE)
for(var/A in suppliers + demanders)
remove_plumber(A)
for(var/A in ducts)
var/obj/machinery/duct/D = A
D.duct = null
if(delete) //I don't want code to run with qdeleted objects because that can never be good, so keep this in-case the ductnet has some business left to attend to before commiting suicide
qdel(src)
+10
View File
@@ -0,0 +1,10 @@
//blocks bluespace artillery beams that try to fly through
//look not all elements need to be fancy
/datum/element/bsa_blocker/Attach(datum/target)
if(!isatom(target))
return ELEMENT_INCOMPATIBLE
RegisterSignal(target, COMSIG_ATOM_BSA_BEAM, .proc/block_bsa)
return ..()
/datum/element/bsa_blocker/proc/block_bsa()
return COMSIG_ATOM_BLOCKS_BSA_BEAM
+16 -21
View File
@@ -33,39 +33,34 @@
if(description)
RegisterSignal(A, COMSIG_PARENT_EXAMINE, .proc/examine)
apply(A, TRUE)
num_decals_per_atom[A]++
apply(A)
/datum/element/decal/Detach(datum/target)
var/atom/A = target
remove(A, A.dir)
UnregisterSignal(A, list(COMSIG_ATOM_DIR_CHANGE, COMSIG_COMPONENT_CLEAN_ACT, COMSIG_PARENT_EXAMINE))
LAZYREMOVE(num_decals_per_atom, A)
num_decals_per_atom[A]--
apply(A, TRUE)
if(!num_decals_per_atom[A])
UnregisterSignal(A, list(COMSIG_ATOM_DIR_CHANGE, COMSIG_COMPONENT_CLEAN_ACT, COMSIG_PARENT_EXAMINE, COMSIG_ATOM_UPDATE_OVERLAYS))
LAZYREMOVE(num_decals_per_atom, A)
return ..()
/datum/element/decal/proc/remove(atom/target, old_dir)
pic.dir = first_dir == NORTH ? target.dir : turn(first_dir, dir2angle(old_dir))
for(var/i in 1 to num_decals_per_atom[target])
target.cut_overlay(pic, TRUE)
/datum/element/decal/proc/apply(atom/target, removing = FALSE)
if(num_decals_per_atom[target] == 1 && !removing)
RegisterSignal(target, COMSIG_ATOM_UPDATE_OVERLAYS, .proc/apply_overlay, TRUE)
target.update_icon()
if(isitem(target))
addtimer(CALLBACK(target, /obj/item/.proc/update_slot_icon), 0, TIMER_UNIQUE)
/datum/element/decal/proc/apply(atom/target, init = FALSE)
pic.dir = first_dir == NORTH ? target.dir : turn(first_dir, dir2angle(target.dir))
if(init)
target.add_overlay(pic, TRUE)
else
for(var/i in 1 to num_decals_per_atom[target])
target.add_overlay(pic, TRUE)
if(isitem(target))
addtimer(CALLBACK(target, /obj/item/.proc/update_slot_icon), 0, TIMER_UNIQUE)
/datum/element/decal/proc/apply_overlay(atom/source, list/overlay_list)
pic.dir = first_dir == NORTH ? source.dir : turn(first_dir, dir2angle(source.dir))
for(var/i in 1 to num_decals_per_atom[source])
overlay_list += pic
/datum/element/decal/proc/rotate_react(datum/source, old_dir, new_dir)
/datum/element/decal/proc/rotate_react(atom/source, old_dir, new_dir)
if(old_dir == new_dir)
return
remove(source, old_dir)
apply(source)
source.update_icon()
/datum/element/decal/proc/clean_react(datum/source, strength)
if(strength >= cleanable)
+119 -5
View File
@@ -32,20 +32,29 @@
var/datum/action/innate/end_holocall/hangup //hangup action
var/call_start_time
var/head_call = FALSE //calls from a head of staff autoconnect, if the receiving pad is not secure.
//creates a holocall made by `caller` from `calling_pad` to `callees`
/datum/holocall/New(mob/living/caller, obj/machinery/holopad/calling_pad, list/callees)
/datum/holocall/New(mob/living/caller, obj/machinery/holopad/calling_pad, list/callees, elevated_access = FALSE)
call_start_time = world.time
user = caller
calling_pad.outgoing_call = src
calling_holopad = calling_pad
head_call = elevated_access
dialed_holopads = list()
for(var/I in callees)
var/obj/machinery/holopad/H = I
if(!QDELETED(H) && H.is_operational())
dialed_holopads += H
H.say("Incoming call.")
if(head_call)
if(H.secure)
calling_pad.say("Auto-connection refused, falling back to call mode.")
H.say("Incoming call.")
else
H.say("Incoming connection.")
else
H.say("Incoming call.")
LAZYADD(H.holo_calls, src)
if(!dialed_holopads.len)
@@ -79,6 +88,7 @@
dialed_holopads.Cut()
if(calling_holopad)
calling_holopad.calling = FALSE
calling_holopad.outgoing_call = null
calling_holopad.SetLightsAndPower()
calling_holopad = null
@@ -145,6 +155,7 @@
if(!Check())
return
calling_holopad.calling = FALSE
hologram = H.activate_holo(user)
hologram.HC = src
@@ -160,6 +171,8 @@
hangup = new(eye, src)
hangup.Grant(user)
playsound(H, 'sound/machines/ping.ogg', 100)
H.say("Connection established.")
//Checks the validity of a holocall and qdels itself if it's not. Returns TRUE if valid, FALSE otherwise
/datum/holocall/proc/Check()
@@ -178,7 +191,6 @@
. = world.time < (call_start_time + HOLOPAD_MAX_DIAL_TIME)
if(!.)
calling_holopad.say("No answer received.")
calling_holopad.temp = ""
if(!.)
testing("Holocall Check fail")
@@ -241,10 +253,10 @@
record.caller_image = holodiskOriginal.record.caller_image
record.entries = holodiskOriginal.record.entries.Copy()
record.language = holodiskOriginal.record.language
to_chat(user, "You copy the record from [holodiskOriginal] to [src] by connecting the ports!")
to_chat(user, "<span class='notice'>You copy the record from [holodiskOriginal] to [src] by connecting the ports!</span>")
name = holodiskOriginal.name
else
to_chat(user, "[holodiskOriginal] has no record on it!")
to_chat(user, "<span class='warning'>[holodiskOriginal] has no record on it!</span>")
..()
/obj/item/disk/holodisk/proc/build_record()
@@ -331,6 +343,21 @@
DELAY 20"}
/datum/preset_holoimage/engineer
outfit_type = /datum/outfit/job/engineer
/datum/preset_holoimage/engineer/rig
outfit_type = /datum/outfit/job/engineer/gloved/rig
/datum/preset_holoimage/engineer/ce
outfit_type = /datum/outfit/job/ce
/datum/preset_holoimage/engineer/ce/rig
outfit_type = /datum/outfit/job/engineer/gloved/rig
/datum/preset_holoimage/engineer/atmos
outfit_type = /datum/outfit/job/atmos
/datum/preset_holoimage/engineer/atmos/rig
outfit_type = /datum/outfit/job/engineer/gloved/rig
/datum/preset_holoimage/researcher
@@ -350,3 +377,90 @@
/datum/preset_holoimage/clown
outfit_type = /datum/outfit/job/clown
/obj/item/disk/holodisk/donutstation/whiteship
name = "Blackbox Print-out #DS024"
desc = "A holodisk containing the last viable recording of DS024's blackbox."
preset_image_type = /datum/preset_holoimage/engineer/ce
preset_record_text = {"
NAME Geysr Shorthalt
SAY Engine renovations complete and the ships been loaded. We all ready?
DELAY 25
PRESET /datum/preset_holoimage/engineer
NAME Jacob Ullman
SAY Lets blow this popsicle stand of a station.
DELAY 20
PRESET /datum/preset_holoimage/engineer/atmos
NAME Lindsey Cuffler
SAY Uh, sir? Shouldn't we call for a secondary shuttle? The bluespace drive on this thing made an awfully weird noise when we jumped here..
DELAY 30
PRESET /datum/preset_holoimage/engineer/ce
NAME Geysr Shorthalt
SAY Pah! Ship techie at the dock said to give it a good few kicks if it started acting up, let me just..
DELAY 25
SOUND punch
SOUND sparks
DELAY 10
SOUND punch
SOUND sparks
DELAY 10
SOUND punch
SOUND sparks
SOUND warpspeed
DELAY 15
PRESET /datum/preset_holoimage/engineer/atmos
NAME Lindsey Cuffler
SAY Uhh.. is it supposed to be doing that??
DELAY 15
PRESET /datum/preset_holoimage/engineer/ce
NAME Geysr Shorthalt
SAY See? Working as intended. Now, are we all ready?
DELAY 10
PRESET /datum/preset_holoimage/engineer
NAME Jacob Ullman
SAY Is it supposed to be glowing like that?
DELAY 20
SOUND explosion
"}
/obj/item/disk/holodisk/ruin/snowengieruin
name = "Blackbox Print-out #EB412"
desc = "A holodisk containing the last moments of EB412. There's a bloody fingerprint on it."
preset_image_type = /datum/preset_holoimage/engineer
preset_record_text = {"
NAME Dave Tundrale
SAY Maria, how's Build?
DELAY 10
NAME Maria Dell
PRESET /datum/preset_holoimage/engineer/atmos
SAY It's fine, don't worry. I've got Plastic on it. And frankly, i'm kinda busy with, the, uhhm, incinerator.
DELAY 30
NAME Dave Tundrale
PRESET /datum/preset_holoimage/engineer
SAY Aight, wonderful. The science mans been kinda shit though. No RCDs-
DELAY 20
NAME Maria Dell
PRESET /datum/preset_holoimage/engineer/atmos
SAY Enough about your RCDs. They're not even that important, just bui-
DELAY 15
SOUND explosion
DELAY 10
SAY Oh, shit!
DELAY 10
PRESET /datum/preset_holoimage/engineer/atmos/rig
LANGUAGE /datum/language/narsie
NAME Unknown
SAY RISE, MY LORD!!
DELAY 10
LANGUAGE /datum/language/common
NAME Plastic
PRESET /datum/preset_holoimage/engineer/rig
SAY Fuck, fuck, fuck!
DELAY 20
SAY It's loose! CALL THE FUCKING SHUTT-
DELAY 10
PRESET /datum/preset_holoimage/corgi
NAME Blackbox Automated Message
SAY Connection lost. Dumping audio logs to disk.
DELAY 50"}
+2 -1
View File
@@ -28,7 +28,8 @@ GLOBAL_LIST_INIT(huds, list(
ANTAG_HUD_CLOCKWORK = new/datum/atom_hud/antag(),
ANTAG_HUD_BROTHER = new/datum/atom_hud/antag/hidden(),
ANTAG_HUD_BLOODSUCKER = new/datum/atom_hud/antag/bloodsucker(),
ANTAG_HUD_FUGITIVE = new/datum/atom_hud/antag()
ANTAG_HUD_FUGITIVE = new/datum/atom_hud/antag(),
ANTAG_HUD_HERETIC = new/datum/atom_hud/antag/hidden()
))
/datum/atom_hud

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