diff --git a/README.md b/README.md
index 655cf83d724..8384fdf3658 100644
--- a/README.md
+++ b/README.md
@@ -1,17 +1,17 @@
-## /tg/station codebase
+## Pariah Station codebase
-[![Build Status](https://github.com/tgstation/tgstation/workflows/CI%20Suite/badge.svg)](https://github.com/tgstation/tgstation/actions?query=workflow%3A%22CI+Suite%22)
-[![Percentage of issues still open](https://isitmaintained.com/badge/open/tgstation/tgstation.svg)](https://isitmaintained.com/project/tgstation/tgstation "Percentage of issues still open")
-[![Average time to resolve an issue](https://isitmaintained.com/badge/resolution/tgstation/tgstation.svg)](https://isitmaintained.com/project/tgstation/tgstation "Average time to resolve an issue")
-![Coverage](https://img.shields.io/badge/coverage---3%25-red.svg)
+[![CI Suite](https://github.com/pariahstation/Pariah-Station/actions/workflows/ci_suite.yml/badge.svg)](https://github.com/pariahstation/Pariah-Station/actions/workflows/ci_suite.yml)
+
+
+
[![resentment](https://forthebadge.com/images/badges/built-with-resentment.svg)](https://www.monkeyuser.com/assets/images/2019/131-bug-free.png) [![resentment](https://forthebadge.com/images/badges/contains-technical-debt.svg)](https://user-images.githubusercontent.com/8171642/50290880-ffef5500-043a-11e9-8270-a2e5b697c86c.png) [![forinfinityandbyond](https://user-images.githubusercontent.com/5211576/29499758-4efff304-85e6-11e7-8267-62919c3688a9.gif)](https://www.reddit.com/r/SS13/comments/5oplxp/what_is_the_main_problem_with_byond_as_an_engine/dclbu1a)
-* **Website:** https://wiki.pariahstation.org/index.php/Main_Page
+* **Website:** https://pariahstation.org
* **Code:** https://github.com/pariahstation/Pariah-Station
* **Wiki:** https://wiki.pariahstation.org/index.php/Main_Page
-* **Codedocs:** https://codedocs.tgstation13.org/
-* **Pariah Station Discord:** https://discord.gg/96dfjqwfVM
+
+* **Pariah Station Discord:** https://discord.gg/pariahstation
* **Coderbus Discord:** https://discord.gg/Vh8TJp9
This is the codebase for the /tg/station flavoured fork of SpaceStation 13.
@@ -27,7 +27,7 @@ Space Station 13 is a paranoia-laden round-based roleplaying game set against th
## :exclamation: How to compile :exclamation:
-On **2021-01-04** we have changed the way to compile the codebase.
+On **2021-01-04**, /TG/station changed the way to compile the codebase.
**The quick way**. Find `bin/server.cmd` in this folder and double click it to automatically build and host the server on port 1337.
@@ -40,9 +40,9 @@ On **2021-01-04** we have changed the way to compile the codebase.
## Contributors
[Guides for Contributors](.github/CONTRIBUTING.md)
-[/tg/station HACKMD account](https://hackmd.io/@tgstation) - Design documentation here
+
## LICENSE
diff --git a/_maps/RandomRuins/SpaceRuins/hilbertresearchfacility.dmm b/_maps/RandomRuins/SpaceRuins/hilbertresearchfacility.dmm
index 8ee03bb502e..ff9f004c337 100644
--- a/_maps/RandomRuins/SpaceRuins/hilbertresearchfacility.dmm
+++ b/_maps/RandomRuins/SpaceRuins/hilbertresearchfacility.dmm
@@ -1558,7 +1558,7 @@
/turf/open/floor/grass/fairy,
/area/ruin/space/has_grav/powered/hilbertresearchfacility)
"Iy" = (
-/turf/closed/indestructible/riveted/plastinum/nodiagonal,
+/turf/closed/indestructible/riveted/plastinum,
/area/ruin/space/has_grav/powered/hilbertresearchfacility/secretroom)
"ID" = (
/obj/structure/table/reinforced/rglass,
@@ -1878,7 +1878,7 @@
/turf/open/floor/iron/grimy,
/area/ruin/space/has_grav/powered/hilbertresearchfacility)
"Ok" = (
-/turf/closed/indestructible/riveted/plastinum/nodiagonal,
+/turf/closed/indestructible/riveted/plastinum,
/area/ruin/space/has_grav/powered/hilbertresearchfacility)
"OA" = (
/obj/machinery/door/airlock/titanium,
diff --git a/_maps/map_files/PubbyStation/PubbyStation.dmm b/_maps/map_files/PubbyStation/PubbyStation.dmm
index ca0e1335144..fbea6e190dc 100644
--- a/_maps/map_files/PubbyStation/PubbyStation.dmm
+++ b/_maps/map_files/PubbyStation/PubbyStation.dmm
@@ -55550,7 +55550,7 @@
/turf/open/floor/iron/dark,
/area/service/library/artgallery)
"wCj" = (
-/obj/item/paint/paint_remover{
+/obj/item/paint_remover{
pixel_y = 8
},
/obj/structure/table/wood,
diff --git a/_maps/map_files/generic/CentCom.dmm b/_maps/map_files/generic/CentCom.dmm
index 073981f327d..e8228b8e62a 100644
--- a/_maps/map_files/generic/CentCom.dmm
+++ b/_maps/map_files/generic/CentCom.dmm
@@ -1817,9 +1817,6 @@
},
/turf/open/floor/carpet/black,
/area/centcom/holding)
-"fg" = (
-/turf/closed/indestructible/weeb,
-/area/centcom/holding)
"fh" = (
/obj/structure/lattice/catwalk,
/obj/effect/turf_decal/stripes/line{
@@ -35720,16 +35717,16 @@ OL
pJ
pJ
pJ
-fg
+Nd
bE
Ob
zS
Nd
Nd
-fg
-fg
-fg
-fg
+Nd
+Nd
+Nd
+Nd
Nd
Nd
oZ
@@ -35977,7 +35974,7 @@ OL
pJ
pJ
pJ
-fg
+Nd
Vt
Fh
hj
@@ -36491,7 +36488,7 @@ pJ
pJ
pJ
pJ
-fg
+Nd
QA
ci
Fh
@@ -36748,7 +36745,7 @@ pJ
aU
pJ
pJ
-fg
+Nd
US
cr
Fh
@@ -36763,7 +36760,7 @@ fO
Rt
Rt
Rt
-fg
+Nd
OL
Di
Qe
@@ -37020,7 +37017,7 @@ fO
Rt
Rt
Rt
-fg
+Nd
OL
Di
Qe
@@ -37534,7 +37531,7 @@ Sn
Uy
Uy
Uy
-fg
+Nd
OL
Di
Qe
@@ -37791,7 +37788,7 @@ Fl
Uy
Cr
Uy
-fg
+Nd
OL
Di
Qe
@@ -38288,8 +38285,8 @@ Nd
Nd
Nd
Nd
-fg
-fg
+Nd
+Nd
Nd
Nd
Nd
@@ -38305,7 +38302,7 @@ Fl
Uy
Pu
Uy
-fg
+Nd
OL
Di
Qe
@@ -38562,7 +38559,7 @@ fe
Uy
rC
Uy
-fg
+Nd
OL
Di
Qe
@@ -39072,7 +39069,7 @@ fO
UU
YC
YC
-fg
+Nd
hs
pJ
pJ
@@ -39586,7 +39583,7 @@ cJ
Rv
YC
YC
-fg
+Nd
pJ
hs
pJ
@@ -39843,7 +39840,7 @@ cJ
Rv
YC
YC
-fg
+Nd
pJ
pJ
pJ
@@ -40357,7 +40354,7 @@ Px
Rv
YC
YC
-fg
+Nd
hs
pJ
pJ
@@ -40596,7 +40593,7 @@ pJ
pJ
pJ
pJ
-fg
+Nd
Zi
wX
fO
@@ -40614,7 +40611,7 @@ JK
Rv
YC
YC
-fg
+Nd
pJ
pJ
OC
@@ -40853,7 +40850,7 @@ pJ
hs
pJ
hs
-fg
+Nd
Zi
kw
eT
@@ -41110,7 +41107,7 @@ pJ
pJ
Zc
hs
-fg
+Nd
bI
fp
fO
@@ -41129,8 +41126,8 @@ Rv
YC
aA
Nd
-fg
-fg
+Nd
+Nd
Nd
pJ
pJ
@@ -42414,8 +42411,8 @@ fO
YC
aA
Nd
-fg
-fg
+Nd
+Nd
Nd
pJ
pJ
@@ -43428,8 +43425,8 @@ Nd
Nd
Nd
Nd
-fg
-fg
+Nd
+Nd
Nd
Nd
Nd
@@ -43956,8 +43953,8 @@ QL
YC
YC
Nd
-fg
-fg
+Nd
+Nd
Nd
ft
CQ
@@ -44191,18 +44188,18 @@ hh
hh
OL
Nd
-fg
+Nd
fM
-fg
Nd
-fg
-fg
-fg
-fg
Nd
-fg
-fg
-fg
+Nd
+Nd
+Nd
+Nd
+Nd
+Nd
+Nd
+Nd
Nd
eZ
YC
@@ -47022,10 +47019,10 @@ aa
aa
aa
Nd
-fg
-fg
-fg
-fg
+Nd
+Nd
+Nd
+Nd
Nd
gk
Zt
@@ -47284,9 +47281,9 @@ OL
OL
OL
Nd
-fg
-fg
-fg
+Nd
+Nd
+Nd
Nd
cE
cv
@@ -47294,9 +47291,9 @@ PD
cv
XF
Nd
-fg
-fg
-fg
+Nd
+Nd
+Nd
Nd
pJ
hs
@@ -47545,11 +47542,11 @@ OL
OL
OL
Nd
-fg
-fg
-fg
-fg
-fg
+Nd
+Nd
+Nd
+Nd
+Nd
Nd
OL
OL
@@ -47559,10 +47556,10 @@ OL
OL
OL
Nd
-fg
-fg
-fg
-fg
+Nd
+Nd
+Nd
+Nd
Nd
OL
aa
diff --git a/_maps/shuttles/emergency_casino.dmm b/_maps/shuttles/emergency_casino.dmm
index fa2f13efcab..9a9fde660f2 100644
--- a/_maps/shuttles/emergency_casino.dmm
+++ b/_maps/shuttles/emergency_casino.dmm
@@ -912,7 +912,7 @@
/obj/item/paint/violet,
/obj/item/paint/white,
/obj/item/paint/yellow,
-/obj/item/paint/paint_remover,
+/obj/item/paint_remover,
/turf/open/floor/sepia,
/area/shuttle/escape)
"yJ" = (
diff --git a/_maps/shuttles/emergency_monastery.dmm b/_maps/shuttles/emergency_monastery.dmm
index 35b87c98441..31354e92f8e 100644
--- a/_maps/shuttles/emergency_monastery.dmm
+++ b/_maps/shuttles/emergency_monastery.dmm
@@ -2090,7 +2090,7 @@
/turf/open/floor/iron/grimy,
/area/shuttle/escape)
"Dn" = (
-/obj/item/paint/paint_remover{
+/obj/item/paint_remover{
pixel_y = 8
},
/obj/structure/table/wood,
diff --git a/code/__DEFINES/construction.dm b/code/__DEFINES/construction.dm
index 23722d43ce8..8ea42e3cfd5 100644
--- a/code/__DEFINES/construction.dm
+++ b/code/__DEFINES/construction.dm
@@ -6,9 +6,7 @@
#define GIRDER_NORMAL 0
#define GIRDER_REINF_STRUTS 1
#define GIRDER_REINF 2
-#define GIRDER_DISPLACED 3
-#define GIRDER_DISASSEMBLED 4
-#define GIRDER_TRAM 5
+#define GIRDER_TRAM 3
//rwall construction states
#define INTACT 0
@@ -141,3 +139,6 @@
/// How much less resources the RCD uses when reconstructing
#define RCD_MEMORY_COST_BUFF 8
+
+/// How many sheets does it cost to make a fulltile window
+#define SHEETS_FOR_FULLTILE_WINDOW 2
diff --git a/code/__DEFINES/direction_junctions.dm b/code/__DEFINES/direction_junctions.dm
new file mode 100644
index 00000000000..6a1d8a8afb8
--- /dev/null
+++ b/code/__DEFINES/direction_junctions.dm
@@ -0,0 +1,31 @@
+//Redefinitions of the diagonal directions so they can be stored in one var without conflicts
+#define NORTH_JUNCTION NORTH //(1<<0)
+#define SOUTH_JUNCTION SOUTH //(1<<1)
+#define EAST_JUNCTION EAST //(1<<2)
+#define WEST_JUNCTION WEST //(1<<3)
+#define NORTHEAST_JUNCTION (1<<4)
+#define SOUTHEAST_JUNCTION (1<<5)
+#define SOUTHWEST_JUNCTION (1<<6)
+#define NORTHWEST_JUNCTION (1<<7)
+
+#define ALL_JUNCTION_DIRECTIONS list(\
+ NORTH_JUNCTION,\
+ SOUTH_JUNCTION,\
+ EAST_JUNCTION,\
+ WEST_JUNCTION,\
+ NORTHEAST_JUNCTION,\
+ SOUTHEAST_JUNCTION,\
+ SOUTHWEST_JUNCTION,\
+ NORTHWEST_JUNCTION\
+ )
+
+DEFINE_BITFIELD(smoothing_junction, list(
+ "NORTH_JUNCTION" = NORTH_JUNCTION,
+ "SOUTH_JUNCTION" = SOUTH_JUNCTION,
+ "EAST_JUNCTION" = EAST_JUNCTION,
+ "WEST_JUNCTION" = WEST_JUNCTION,
+ "NORTHEAST_JUNCTION" = NORTHEAST_JUNCTION,
+ "SOUTHEAST_JUNCTION" = SOUTHEAST_JUNCTION,
+ "SOUTHWEST_JUNCTION" = SOUTHWEST_JUNCTION,
+ "NORTHWEST_JUNCTION" = NORTHWEST_JUNCTION,
+))
diff --git a/code/__DEFINES/greyscale.dm b/code/__DEFINES/greyscale.dm
new file mode 100644
index 00000000000..26ba210988d
--- /dev/null
+++ b/code/__DEFINES/greyscale.dm
@@ -0,0 +1,9 @@
+/* flags for greyscale config for smoothing */
+/// The config will create states for cardinal smoothing
+#define GAGS_CARDINAL_SMOOTH (1<<0)
+/// The config will create states for diagonal smoothing
+#define GAGS_DIAGONAL_SMOOTH (1<<1)
+/// This will make it so diagonal steps require both adjacent cardinal steps to make a state
+#define GAGS_DIAGONAL_NEED_ADJACENT_CARDINAL (1<<2)
+/// The common way to bitmask features all of the modes above
+#define GAGS_COMMON_BITMASKING (GAGS_CARDINAL_SMOOTH|GAGS_DIAGONAL_SMOOTH|GAGS_DIAGONAL_NEED_ADJACENT_CARDINAL)
diff --git a/code/__DEFINES/icon_smoothing.dm b/code/__DEFINES/icon_smoothing.dm
index 8805767237f..2fd07a082d6 100644
--- a/code/__DEFINES/icon_smoothing.dm
+++ b/code/__DEFINES/icon_smoothing.dm
@@ -3,19 +3,16 @@
#define SMOOTH_CORNERS (1<<0)
/// Smoothing system in where adjacencies are calculated and used to select a pre-baked icon_state, encoded by bitmasking.
#define SMOOTH_BITMASK (1<<1)
-/// Atom has diagonal corners, with underlays under them.
-#define SMOOTH_DIAGONAL_CORNERS (1<<2)
/// Atom will smooth with the borders of the map.
-#define SMOOTH_BORDER (1<<3)
+#define SMOOTH_BORDER (1<<2)
/// Atom is currently queued to smooth.
-#define SMOOTH_QUEUED (1<<4)
+#define SMOOTH_QUEUED (1<<3)
/// Smooths with objects, and will thus need to scan turfs for contents.
-#define SMOOTH_OBJ (1<<5)
+#define SMOOTH_OBJ (1<<4)
DEFINE_BITFIELD(smoothing_flags, list(
"SMOOTH_CORNERS" = SMOOTH_CORNERS,
"SMOOTH_BITMASK" = SMOOTH_BITMASK,
- "SMOOTH_DIAGONAL_CORNERS" = SMOOTH_DIAGONAL_CORNERS,
"SMOOTH_BORDER" = SMOOTH_BORDER,
"SMOOTH_QUEUED" = SMOOTH_QUEUED,
"SMOOTH_OBJ" = SMOOTH_OBJ,
@@ -96,12 +93,10 @@ DEFINE_BITFIELD(smoothing_flags, list(
#define SMOOTH_GROUP_BAMBOO_FLOOR S_TURF(52) //![/turf/open/floor/bamboo]
#define SMOOTH_GROUP_CLOSED_TURFS S_TURF(53) ///turf/closed
-#define SMOOTH_GROUP_MATERIAL_WALLS S_TURF(54) ///turf/closed/wall/material
-#define SMOOTH_GROUP_SYNDICATE_WALLS S_TURF(55) ///turf/closed/wall/r_wall/syndicate, /turf/closed/indestructible/syndicate
-#define SMOOTH_GROUP_HOTEL_WALLS S_TURF(56) ///turf/closed/indestructible/hotelwall
-#define SMOOTH_GROUP_MINERAL_WALLS S_TURF(57) ///turf/closed/mineral, /turf/closed/indestructible
-#define SMOOTH_GROUP_BOSS_WALLS S_TURF(58) ///turf/closed/indestructible/riveted/boss
-#define SMOOTH_GROUP_SURVIVAL_TITANIUM_WALLS S_TURF(59) ///turf/closed/wall/mineral/titanium/survival
+#define SMOOTH_GROUP_SURVIVAL_TITANIUM_WALLS S_TURF(53) ///turf/closed/wall/mineral/titanium/survival
+#define SMOOTH_GROUP_HOTEL_WALLS S_TURF(54) ///turf/closed/indestructible/hotelwall
+#define SMOOTH_GROUP_MINERAL_WALLS S_TURF(55) ///turf/closed/mineral, /turf/closed/indestructible
+#define SMOOTH_GROUP_BOSS_WALLS S_TURF(56) ///turf/closed/indestructible/riveted/boss
#define MAX_S_TURF SMOOTH_GROUP_SURVIVAL_TITANIUM_WALLS //Always match this value with the one above it.
@@ -110,22 +105,8 @@ DEFINE_BITFIELD(smoothing_flags, list(
/* /obj included */
#define SMOOTH_GROUP_WALLS S_OBJ(0) ///turf/closed/wall, /obj/structure/falsewall
-#define SMOOTH_GROUP_URANIUM_WALLS S_OBJ(1) ///turf/closed/wall/mineral/uranium, /obj/structure/falsewall/uranium
-#define SMOOTH_GROUP_GOLD_WALLS S_OBJ(2) ///turf/closed/wall/mineral/gold, /obj/structure/falsewall/gold
-#define SMOOTH_GROUP_SILVER_WALLS S_OBJ(3) ///turf/closed/wall/mineral/silver, /obj/structure/falsewall/silver
-#define SMOOTH_GROUP_DIAMOND_WALLS S_OBJ(4) ///turf/closed/wall/mineral/diamond, /obj/structure/falsewall/diamond
-#define SMOOTH_GROUP_PLASMA_WALLS S_OBJ(5) ///turf/closed/wall/mineral/plasma, /obj/structure/falsewall/plasma
-#define SMOOTH_GROUP_BANANIUM_WALLS S_OBJ(6) ///turf/closed/wall/mineral/bananium, /obj/structure/falsewall/bananium
-#define SMOOTH_GROUP_SANDSTONE_WALLS S_OBJ(7) ///turf/closed/wall/mineral/sandstone, /obj/structure/falsewall/sandstone
-#define SMOOTH_GROUP_WOOD_WALLS S_OBJ(8) ///turf/closed/wall/mineral/wood, /obj/structure/falsewall/wood
-#define SMOOTH_GROUP_IRON_WALLS S_OBJ(9) ///turf/closed/wall/mineral/iron, /obj/structure/falsewall/iron
-#define SMOOTH_GROUP_ABDUCTOR_WALLS S_OBJ(10) ///turf/closed/wall/mineral/abductor, /obj/structure/falsewall/abductor
-#define SMOOTH_GROUP_TITANIUM_WALLS S_OBJ(11) ///turf/closed/wall/mineral/titanium, /obj/structure/falsewall/titanium
-#define SMOOTH_GROUP_PLASTITANIUM_WALLS S_OBJ(13) ///turf/closed/wall/mineral/plastitanium, /obj/structure/falsewall/plastitanium
-#define SMOOTH_GROUP_SURVIVAL_TIANIUM_POD S_OBJ(14) ///turf/closed/wall/mineral/titanium/survival/pod, /obj/machinery/door/airlock/survival_pod, /obj/structure/window/reinforced/shuttle/survival_pod
-#define SMOOTH_GROUP_HIERO_WALL S_OBJ(15) ///obj/effect/temp_visual/elite_tumor_wall, /obj/effect/temp_visual/hierophant/wall
-#define SMOOTH_GROUP_BAMBOO_WALLS S_TURF(16) //![/turf/closed/wall/mineral/bamboo, /obj/structure/falsewall/bamboo]
-#define SMOOTH_GROUP_PLASTINUM_WALLS S_TURF(17) //![turf/closed/indestructible/riveted/plastinum]
+#define SMOOTH_GROUP_HIERO_WALL S_OBJ(1) ///obj/effect/temp_visual/elite_tumor_wall, /obj/effect/temp_visual/hierophant/wall
+#define SMOOTH_GROUP_SURVIVAL_TIANIUM_POD S_OBJ(2) ///turf/closed/wall/mineral/titanium/survival/pod, /obj/machinery/door/airlock/survival_pod, /obj/structure/window/reinforced/shuttle/survival_pod
#define SMOOTH_GROUP_PAPERFRAME S_OBJ(20) ///obj/structure/window/paperframe, /obj/structure/mineral_door/paperframe
@@ -136,8 +117,11 @@ DEFINE_BITFIELD(smoothing_flags, list(
#define SMOOTH_GROUP_LATTICE S_OBJ(30) ///obj/structure/lattice
#define SMOOTH_GROUP_CATWALK S_OBJ(31) ///obj/structure/lattice/catwalk
+#define SMOOTH_GROUP_GRILLE S_OBJ(32) ///obj/structure/grille
+#define SMOOTH_GROUP_LOW_WALL S_OBJ(33) ///obj/structure/low_wall
#define SMOOTH_GROUP_AIRLOCK S_OBJ(40) ///obj/machinery/door/airlock
+#define SMOOTH_GROUP_SHUTTERS_BLASTDOORS S_OBJ(41) ///obj/machinery/door/poddoor
#define SMOOTH_GROUP_TABLES S_OBJ(50) ///obj/structure/table
#define SMOOTH_GROUP_WOOD_TABLES S_OBJ(51) ///obj/structure/table/wood
diff --git a/code/__DEFINES/is_helpers.dm b/code/__DEFINES/is_helpers.dm
index 6bec7ae1f33..d8e57293420 100644
--- a/code/__DEFINES/is_helpers.dm
+++ b/code/__DEFINES/is_helpers.dm
@@ -54,6 +54,8 @@ GLOBAL_LIST_INIT(turfs_openspace, typecacheof(list(
#define isplatingturf(A) (istype(A, /turf/open/floor/plating))
+#define iswall(A) (istype(A, /turf/closed/wall))
+
#define istransparentturf(A) (HAS_TRAIT(A, TURF_Z_TRANSPARENT_TRAIT))
//Mobs
@@ -206,7 +208,7 @@ GLOBAL_LIST_INIT(turfs_openspace, typecacheof(list(
#define isclothing(A) (istype(A, /obj/item/clothing))
-#define ispickedupmob(A) (istype(A, /obj/item/clothing/head/mob_holder)) // Checks if clothing item is actually a held mob
+#define ismobholder(A) (istype(A, /obj/item/mob_holder))
#define iscash(A) (istype(A, /obj/item/coin) || istype(A, /obj/item/stack/spacecash) || istype(A, /obj/item/holochip))
@@ -220,6 +222,8 @@ GLOBAL_LIST_INIT(turfs_openspace, typecacheof(list(
#define is_reagent_container(O) (istype(O, /obj/item/reagent_containers))
+#define isfalsewall(A) (istype(A, /obj/structure/falsewall))
+
//Assemblies
#define isassembly(O) (istype(O, /obj/item/assembly))
diff --git a/code/__DEFINES/layers.dm b/code/__DEFINES/layers.dm
index b5366603493..13fe6405968 100644
--- a/code/__DEFINES/layers.dm
+++ b/code/__DEFINES/layers.dm
@@ -73,6 +73,7 @@
#define PROJECTILE_HIT_THRESHHOLD_LAYER 2.75 //projectiles won't hit objects at or below this layer if possible
#define TABLE_LAYER 2.8
#define GATEWAY_UNDERLAY_LAYER 2.85
+#define LOW_WALL_LAYER 2.86
#define BELOW_OBJ_LAYER 2.9
#define LOW_ITEM_LAYER 2.95
//#define OBJ_LAYER 3 //For easy recordkeeping; this is a byond define
@@ -81,6 +82,7 @@
#define ABOVE_OBJ_LAYER 3.2
#define CLOSED_BLASTDOOR_LAYER 3.3 // ABOVE WINDOWS AND DOORS
#define SHUTTER_LAYER 3.3 // HERE BE DRAGONS
+#define LOW_WALL_STRIPE_LAYER 3.25
#define ABOVE_WINDOW_LAYER 3.3
#define SIGN_LAYER 3.4
#define CORGI_ASS_PIN_LAYER 3.41
diff --git a/code/__DEFINES/mobs.dm b/code/__DEFINES/mobs.dm
index 15d8298fe83..6bdbbfbe416 100644
--- a/code/__DEFINES/mobs.dm
+++ b/code/__DEFINES/mobs.dm
@@ -81,9 +81,13 @@
///The limb has skrelly bits
#define BODYTYPE_SKRELL (1<<6)
///THe limb is voxed
-#define BODYTYPE_VOX (1<<7)
+#define BODYTYPE_VOX_BEAK (1<<7)
+///The limb is in the shape of a vox leg.
+#define BODYTYPE_VOX_LEGS (1<<8)
+///Vox limb that isnt a head or legs.
+#define BODYTYPE_VOX_OTHER (1<<9)
///The limb is small and feathery
-#define BODYTYPE_TESHARI (1<<8)
+#define BODYTYPE_TESHARI (1<<10)
//Defines for Species IDs
#define SPECIES_ABDUCTOR "abductor"
diff --git a/code/__HELPERS/colors.dm b/code/__HELPERS/colors.dm
index 760704cc560..44c7058c9c3 100644
--- a/code/__HELPERS/colors.dm
+++ b/code/__HELPERS/colors.dm
@@ -1,6 +1,6 @@
/// Given a color in the format of "#RRGGBB", will return if the color
/// is dark.
-/proc/is_color_dark(color, threshold = 25)
+/proc/is_color_dark(color, threshold = 15)
var/hsl = rgb2num(color, COLORSPACE_HSL)
return hsl[3] < threshold
diff --git a/code/__HELPERS/icon_smoothing.dm b/code/__HELPERS/icon_smoothing.dm
index 321d943a6bf..f9f317e6424 100644
--- a/code/__HELPERS/icon_smoothing.dm
+++ b/code/__HELPERS/icon_smoothing.dm
@@ -9,43 +9,12 @@
Each atom has its own icon file with all the possible corner states. See 'smooth_wall.dmi' for a template.
- DIAGONAL SMOOTHING INSTRUCTIONS
- To make your atom smooth diagonally you need all the proper icon states (see 'smooth_wall.dmi' for a template) and
- to add the 'SMOOTH_DIAGONAL_CORNERS' flag to the atom's smoothing_flags var (in addition to either SMOOTH_TRUE or SMOOTH_MORE).
-
For turfs, what appears under the diagonal corners depends on the turf that was in the same position previously: if you make a wall on
a plating floor, you will see plating under the diagonal wall corner, if it was space, you will see space.
- If you wish to map a diagonal wall corner with a fixed underlay, you must configure the turf's 'fixed_underlay' list var, like so:
- fixed_underlay = list("icon"='icon_file.dmi', "icon_state"="iconstatename")
- A non null 'fixed_underlay' list var will skip copying the previous turf appearance and always use the list. If the list is
- not set properly, the underlay will default to regular floor plating.
-
To see an example of a diagonal wall, see '/turf/closed/wall/mineral/titanium' and its subtypes.
*/
-//Redefinitions of the diagonal directions so they can be stored in one var without conflicts
-#define NORTH_JUNCTION NORTH //(1<<0)
-#define SOUTH_JUNCTION SOUTH //(1<<1)
-#define EAST_JUNCTION EAST //(1<<2)
-#define WEST_JUNCTION WEST //(1<<3)
-#define NORTHEAST_JUNCTION (1<<4)
-#define SOUTHEAST_JUNCTION (1<<5)
-#define SOUTHWEST_JUNCTION (1<<6)
-#define NORTHWEST_JUNCTION (1<<7)
-
-DEFINE_BITFIELD(smoothing_junction, list(
- "NORTH_JUNCTION" = NORTH_JUNCTION,
- "SOUTH_JUNCTION" = SOUTH_JUNCTION,
- "EAST_JUNCTION" = EAST_JUNCTION,
- "WEST_JUNCTION" = WEST_JUNCTION,
- "NORTHEAST_JUNCTION" = NORTHEAST_JUNCTION,
- "SOUTHEAST_JUNCTION" = SOUTHEAST_JUNCTION,
- "SOUTHWEST_JUNCTION" = SOUTHWEST_JUNCTION,
- "NORTHWEST_JUNCTION" = NORTHWEST_JUNCTION,
-))
-
-
#define NO_ADJ_FOUND 0
#define ADJ_FOUND 1
#define NULLTURF_BORDER 2
@@ -156,10 +125,7 @@ DEFINE_BITFIELD(smoothing_junction, list(
if (!z)
CRASH("[type] called smooth_icon() without being on a z-level")
if(smoothing_flags & SMOOTH_CORNERS)
- if(smoothing_flags & SMOOTH_DIAGONAL_CORNERS)
- corners_diagonal_smooth(calculate_adjacencies())
- else
- corners_cardinal_smooth(calculate_adjacencies())
+ corners_cardinal_smooth(calculate_adjacencies())
else if(smoothing_flags & SMOOTH_BITMASK)
bitmask_smooth()
else
@@ -167,35 +133,6 @@ DEFINE_BITFIELD(smoothing_junction, list(
SEND_SIGNAL(src, COMSIG_ATOM_SMOOTHED_ICON)
update_appearance(~UPDATE_SMOOTHING)
-
-/atom/proc/corners_diagonal_smooth(adjacencies)
- switch(adjacencies)
- if(NORTH_JUNCTION|WEST_JUNCTION)
- replace_smooth_overlays("d-se","d-se-0")
- if(NORTH_JUNCTION|EAST_JUNCTION)
- replace_smooth_overlays("d-sw","d-sw-0")
- if(SOUTH_JUNCTION|WEST_JUNCTION)
- replace_smooth_overlays("d-ne","d-ne-0")
- if(SOUTH_JUNCTION|EAST_JUNCTION)
- replace_smooth_overlays("d-nw","d-nw-0")
-
- if(NORTH_JUNCTION|WEST_JUNCTION|NORTHWEST_JUNCTION)
- replace_smooth_overlays("d-se","d-se-1")
- if(NORTH_JUNCTION|EAST_JUNCTION|NORTHEAST_JUNCTION)
- replace_smooth_overlays("d-sw","d-sw-1")
- if(SOUTH_JUNCTION|WEST_JUNCTION|SOUTHWEST_JUNCTION)
- replace_smooth_overlays("d-ne","d-ne-1")
- if(SOUTH_JUNCTION|EAST_JUNCTION|SOUTHEAST_JUNCTION)
- replace_smooth_overlays("d-nw","d-nw-1")
-
- else
- corners_cardinal_smooth(adjacencies)
- return FALSE
-
- icon_state = ""
- return TRUE
-
-
/atom/proc/corners_cardinal_smooth(adjacencies)
var/mutable_appearance/temp_ma
@@ -361,38 +298,6 @@ DEFINE_BITFIELD(smoothing_junction, list(
icon_state = "[base_icon_state]-[smoothing_junction]"
-/turf/closed/set_smoothed_icon_state(new_junction)
- . = ..()
- if(smoothing_flags & SMOOTH_DIAGONAL_CORNERS)
- switch(new_junction)
- if(
- NORTH_JUNCTION|WEST_JUNCTION,
- NORTH_JUNCTION|EAST_JUNCTION,
- SOUTH_JUNCTION|WEST_JUNCTION,
- SOUTH_JUNCTION|EAST_JUNCTION,
- NORTH_JUNCTION|WEST_JUNCTION|NORTHWEST_JUNCTION,
- NORTH_JUNCTION|EAST_JUNCTION|NORTHEAST_JUNCTION,
- SOUTH_JUNCTION|WEST_JUNCTION|SOUTHWEST_JUNCTION,
- SOUTH_JUNCTION|EAST_JUNCTION|SOUTHEAST_JUNCTION
- )
- icon_state = "[base_icon_state]-[smoothing_junction]-d"
- if(!fixed_underlay && new_junction != .) // Mutable underlays?
- var/junction_dir = reverse_ndir(smoothing_junction)
- var/turned_adjacency = REVERSE_DIR(junction_dir)
- var/turf/neighbor_turf = get_step(src, turned_adjacency & (NORTH|SOUTH))
- var/mutable_appearance/underlay_appearance = mutable_appearance(layer = TURF_LAYER, plane = FLOOR_PLANE)
- if(!neighbor_turf.get_smooth_underlay_icon(underlay_appearance, src, turned_adjacency))
- neighbor_turf = get_step(src, turned_adjacency & (EAST|WEST))
-
- if(!neighbor_turf.get_smooth_underlay_icon(underlay_appearance, src, turned_adjacency))
- neighbor_turf = get_step(src, turned_adjacency)
-
- if(!neighbor_turf.get_smooth_underlay_icon(underlay_appearance, src, turned_adjacency))
- if(!get_smooth_underlay_icon(underlay_appearance, src, turned_adjacency)) //if all else fails, ask our own turf
- underlay_appearance.icon = DEFAULT_UNDERLAY_ICON
- underlay_appearance.icon_state = DEFAULT_UNDERLAY_ICON_STATE
- underlays += underlay_appearance
-
/turf/open/floor/set_smoothed_icon_state(new_junction)
if(broken || burnt)
return
@@ -505,19 +410,10 @@ DEFINE_BITFIELD(smoothing_junction, list(
name = "smooth wall"
icon = 'icons/turf/smooth_wall.dmi'
icon_state = "smooth"
- smoothing_flags = SMOOTH_CORNERS|SMOOTH_DIAGONAL_CORNERS|SMOOTH_BORDER
+ smoothing_flags = SMOOTH_CORNERS|SMOOTH_BORDER
smoothing_groups = null
canSmoothWith = null
-#undef NORTH_JUNCTION
-#undef SOUTH_JUNCTION
-#undef EAST_JUNCTION
-#undef WEST_JUNCTION
-#undef NORTHEAST_JUNCTION
-#undef NORTHWEST_JUNCTION
-#undef SOUTHEAST_JUNCTION
-#undef SOUTHWEST_JUNCTION
-
#undef NO_ADJ_FOUND
#undef ADJ_FOUND
#undef NULLTURF_BORDER
diff --git a/code/__HELPERS/names.dm b/code/__HELPERS/names.dm
index 6b1ce24da55..7f63372f920 100644
--- a/code/__HELPERS/names.dm
+++ b/code/__HELPERS/names.dm
@@ -24,6 +24,8 @@
while(i <= sounds)
i++
newname += pick(list("ti","hi","ki","ya","ta","ha","ka","ya","chi","cha","kah","ri","ra"))
+
+ newname = capitalize(newname)
return newname
/proc/teshari_name()
diff --git a/code/__HELPERS/turfs.dm b/code/__HELPERS/turfs.dm
index 5da17c67f31..0d0126b48b1 100644
--- a/code/__HELPERS/turfs.dm
+++ b/code/__HELPERS/turfs.dm
@@ -229,8 +229,8 @@ Turf and target are separate in case you want to teleport some distance from a t
var/turf/atom_turf = get_turf(checked_atom) //use checked_atom's turfs, as it's coords are the same as checked_atom's AND checked_atom's coords are lost if it is inside another atom
if(!atom_turf)
return null
- var/final_x = atom_turf.x + rough_x
- var/final_y = atom_turf.y + rough_y
+ var/final_x = clamp(atom_turf.x + rough_x, 1, world.maxx)
+ var/final_y = clamp(atom_turf.y + rough_y, 1, world.maxy)
if(final_x || final_y)
return locate(final_x, final_y, atom_turf.z)
diff --git a/code/_globalvars/lists/maintenance_loot.dm b/code/_globalvars/lists/maintenance_loot.dm
index 81224a93dc6..ee182ebcdba 100644
--- a/code/_globalvars/lists/maintenance_loot.dm
+++ b/code/_globalvars/lists/maintenance_loot.dm
@@ -307,7 +307,7 @@ GLOBAL_LIST_INIT(rarity_loot, list(//rare: really good items
/obj/item/paint/black = 1,
/obj/item/paint/blue = 1,
/obj/item/paint/green = 1,
- /obj/item/paint/paint_remover = 1,
+ /obj/item/paint_remover = 1,
/obj/item/paint/red = 1,
/obj/item/paint/violet = 1,
/obj/item/paint/white = 1,
diff --git a/code/datums/actions/mobs/charge.dm b/code/datums/actions/mobs/charge.dm
index 4d69e28aa71..7c00190dd3d 100644
--- a/code/datums/actions/mobs/charge.dm
+++ b/code/datums/actions/mobs/charge.dm
@@ -287,7 +287,7 @@
/datum/action/cooldown/mob_cooldown/charge/hallucination_charge/hallucination_surround
name = "Surround Target"
- icon_icon = 'icons/turf/walls/wall.dmi'
+ icon_icon = 'icons/turf/walls/legacy/wall.dmi'
button_icon_state = "wall-0"
desc = "Allows you to create hallucinations that charge around your target."
charge_delay = 0.6 SECONDS
diff --git a/code/datums/components/storage/concrete/pockets.dm b/code/datums/components/storage/concrete/pockets.dm
index 060ac625d20..745ddeb0510 100644
--- a/code/datums/components/storage/concrete/pockets.dm
+++ b/code/datums/components/storage/concrete/pockets.dm
@@ -44,15 +44,15 @@
/datum/component/storage/concrete/pockets/chefhat/Initialize()
. = ..()
set_holdable(list(
- /obj/item/clothing/head/mob_holder,
+ /obj/item/mob_holder,
/obj/item/food/deadmouse
))
/datum/component/storage/concrete/pockets/chefhat/can_be_inserted(obj/item/I, stop_messages, mob/M)
. = ..()
- if(istype(I,/obj/item/clothing/head/mob_holder))
- var/obj/item/clothing/head/mob_holder/mausholder = I
- if(locate(/mob/living/simple_animal/mouse) in mausholder.contents)
+ if(ismobholder(I))
+ var/obj/item/mob_holder/mausholder = I
+ if(mausholder.held_mob && ismouse(mausholder.held_mob))
return
return FALSE
diff --git a/code/datums/datacore.dm b/code/datums/datacore.dm
index 47e2e71b5c8..8417ca6cbab 100644
--- a/code/datums/datacore.dm
+++ b/code/datums/datacore.dm
@@ -164,6 +164,7 @@ GLOBAL_DATUM_INIT(data_core, /datum/datacore, new)
misc_list[++misc_list.len] = list(
"name" = name,
"rank" = rank,
+ "trim" = trim,
)
continue
for(var/department_type as anything in job.departments_list)
@@ -174,6 +175,7 @@ GLOBAL_DATUM_INIT(data_core, /datum/datacore, new)
var/list/entry = list(
"name" = name,
"rank" = rank,
+ "trim" = trim,
)
var/list/department_list = manifest_out[department.department_name]
if(istype(job, department.department_head))
@@ -209,7 +211,7 @@ GLOBAL_DATUM_INIT(data_core, /datum/datacore, new)
var/even = FALSE
for(var/entry in entries)
var/list/entry_list = entry
- dat += "
[entry_list["name"]] | [entry_list["rank"]] |
"
+ dat += "[entry_list["name"]] | [entry_list["rank"] == entry_list["trim"] ? entry_list["rank"] : "[entry_list["rank"]] ([entry_list["trim"]])"] |
"
even = !even
dat += ""
diff --git a/code/datums/greyscale/README.md b/code/datums/greyscale/README.md
index ca4e28bf843..a69991db404 100644
--- a/code/datums/greyscale/README.md
+++ b/code/datums/greyscale/README.md
@@ -6,6 +6,7 @@ If you're wanting to add easy recolors for your sprite then this is the system f
- Mixed greyscale and colored sprite layers; You can choose to only greyscale a part of the sprite or have premade filters applied to layers.
- Blend modes; Instead of just putting layers of sprites on top of eachother you can use the more advanced blend modes.
- Reusable configurations; You can reference greyscale sprites from within the configuration of another, allowing you to have a bunch of styles with minimal additional configuration.
+- Bitmasked icons can be generated from bitmasked source files. In order to do this, add "bitmask_config" key to your icon state metadata with an integer value equal to a bitfield of flags from `code/__DEFINES/greyscale.dm`. The common one that walls and windows use is 7 (first three flags). After this you need to set `"bitmask" = true` in your layer data to have that layer use a bitmasked variant. You can mix bitmasked layers and non-bitmasked layers.
## Other Documents
@@ -33,27 +34,31 @@ The json is made up of some metadata and a list of layers used while creating th
```json
{
- "icon_state_name": [
- {
- "type": "reference",
- "reference_type": "/datum/greyscale_config/some_other_config",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- },
+ "icon_state_name":
+ {
+ "layers":
[
{
- "type": "icon_state",
- "icon_state": "highlights",
+ "type": "reference",
+ "reference_type": "/datum/greyscale_config/some_other_config",
"blend_mode": "overlay",
- "color_ids": [ 2 ]
+ "color_ids": [ 1 ]
},
- {
- "type": "reference",
- "reference_type": "/datum/greyscale_config/sparkle_effect",
- "blend_mode": "add"
- }
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "highlights",
+ "blend_mode": "overlay",
+ "color_ids": [ 2 ]
+ },
+ {
+ "type": "reference",
+ "reference_type": "/datum/greyscale_config/sparkle_effect",
+ "blend_mode": "add"
+ }
+ ]
]
- ]
+ }
}
```
diff --git a/code/datums/greyscale/_greyscale_config.dm b/code/datums/greyscale/_greyscale_config.dm
index 393a0f901c3..cd3a89d4bbc 100644
--- a/code/datums/greyscale/_greyscale_config.dm
+++ b/code/datums/greyscale/_greyscale_config.dm
@@ -138,8 +138,8 @@
/// Called after every config has refreshed, this proc handles data verification that depends on multiple entwined configurations.
/datum/greyscale_config/proc/CrossVerify()
for(var/icon_state in icon_states)
- var/list/verification_targets = icon_states[icon_state]
- verification_targets = verification_targets.Copy()
+ var/datum/greyscale_state/gags_state = icon_states[icon_state]
+ var/list/verification_targets = gags_state.layers.Copy()
while(length(verification_targets))
var/datum/greyscale_layer/layer = verification_targets[length(verification_targets)]
verification_targets.len--
@@ -157,13 +157,16 @@
/datum/greyscale_config/proc/ReadIconStateConfiguration(list/data)
icon_states = list()
for(var/state in data)
- var/list/raw_layers = data[state]
+ var/list/state_information = data[state]
+ var/list/raw_layers = state_information["layers"]
+ var/bitmask_config = state_information["bitmask_config"] ? text2num(state_information["bitmask_config"]) : NONE
+ var/default_state_if_bitmask = state_information["default_state_if_bitmask"] ? TRUE : FALSE
if(!length(raw_layers))
stack_trace("The json configuration [DebugName()] for icon state '[state]' is missing any layers.")
continue
if(icon_states[state])
stack_trace("The json configuration [DebugName()] has a duplicate icon state '[state]' and is being overriden.")
- icon_states[state] = ReadLayersFromJson(raw_layers)
+ icon_states[state] = new /datum/greyscale_state(ReadLayersFromJson(raw_layers), bitmask_config, default_state_if_bitmask)
/// Takes the json layers configuration and puts it into a more processed format
/datum/greyscale_config/proc/ReadLayersFromJson(list/data)
@@ -190,8 +193,10 @@
width = source.Width()
var/list/datum/greyscale_layer/all_layers = list()
+ var/list/to_process = list()
for(var/state in icon_states)
- var/list/to_process = list(icon_states[state])
+ var/datum/greyscale_state/gags_state = icon_states[state]
+ to_process += gags_state.layers
var/list/state_layers = list()
while(length(to_process))
@@ -239,6 +244,13 @@
var/icon/icon_bundle = GenerateBundle(color_string, last_external_icon=last_external_icon)
icon_bundle = fcopy_rsc(icon_bundle)
+
+ // This block is done like this because generated icons are unable to be scaled before getting added to the rsc
+ icon_bundle = fcopy_rsc(icon_bundle)
+ icon_bundle = icon(icon_bundle)
+ icon_bundle.Scale(width, height)
+ icon_bundle = fcopy_rsc(icon_bundle)
+
icon_cache[key] = icon_bundle
var/icon/output = icon(icon_bundle)
return output
@@ -252,34 +264,61 @@
var/list/generated_icons = list()
for(var/icon_state in icon_states)
- var/list/icon_state_steps
- if(render_steps)
- icon_state_steps = render_steps[icon_state] = list()
- var/icon/generated_icon = GenerateLayerGroup(colors, icon_states[icon_state], icon_state_steps, last_external_icon)
- // We read a pixel to force the icon to be fully generated before we let it loose into the world
- // I hate this
- generated_icon.GetPixel(1, 1)
- generated_icons[icon_state] = generated_icon
-
- var/icon/icon_bundle = generated_icons[""] || icon('icons/testing/greyscale_error.dmi')
- icon_bundle.Scale(width, height)
- generated_icons -= ""
-
+ var/datum/greyscale_state/gags_state = icon_states[icon_state]
+ var/list/layers = gags_state.layers
+ var/bitmask_config = gags_state.bitmask_config
+ var/default_state_if_bitmask = gags_state.default_state_if_bitmask
+ // Generate the default icon state if we are not bitmasking, or we want to do so despite bitmasking
+ if(bitmask_config == NONE || default_state_if_bitmask == TRUE)
+ var/icon/generated_icon = GenerateLayerGroup(colors, layers, render_steps)
+ // We read a pixel to force the icon to be fully generated before we let it loose into the world
+ // I hate this
+ generated_icon.GetPixel(1, 1)
+ generated_icons[icon_state] = generated_icon
+
+ // Also generate bitmasked states if the config tells us to.
+ if(bitmask_config != NONE)
+ var/list/steps = list()
+ for(var/potential_step in 0 to 255)
+ if(!(bitmask_config & GAGS_CARDINAL_SMOOTH))
+ if(potential_step & (NORTH_JUNCTION|SOUTH_JUNCTION|EAST_JUNCTION|WEST_JUNCTION))
+ continue
+ if(potential_step & (NORTHEAST_JUNCTION|SOUTHEAST_JUNCTION|SOUTHWEST_JUNCTION|NORTHWEST_JUNCTION))
+ if(!(bitmask_config & GAGS_DIAGONAL_SMOOTH))
+ continue
+ else if (bitmask_config & GAGS_DIAGONAL_NEED_ADJACENT_CARDINAL)
+ if(potential_step & NORTHEAST_JUNCTION && !(potential_step & NORTH_JUNCTION && potential_step & EAST_JUNCTION))
+ continue
+ if(potential_step & SOUTHEAST_JUNCTION && !(potential_step & SOUTH_JUNCTION && potential_step & EAST_JUNCTION))
+ continue
+ if(potential_step & SOUTHWEST_JUNCTION && !(potential_step & SOUTH_JUNCTION && potential_step & WEST_JUNCTION))
+ continue
+ if(potential_step & NORTHWEST_JUNCTION && !(potential_step & NORTH_JUNCTION && potential_step & WEST_JUNCTION))
+ continue
+
+ steps += potential_step
+ for(var/bit_step in steps)
+ var/icon/generated_icon = GenerateLayerGroup(colors, layers, render_steps, TRUE, bit_step)
+ // Same as above.
+ generated_icon.GetPixel(1, 1)
+ generated_icons["[icon_state]-[bit_step]"] = generated_icon
+
+ var/icon/icon_bundle = icon('icons/testing/greyscale_error.dmi')
for(var/icon_state in generated_icons)
icon_bundle.Insert(generated_icons[icon_state], icon_state)
return icon_bundle
/// Internal recursive proc to handle nested layer groups
-/datum/greyscale_config/proc/GenerateLayerGroup(list/colors, list/group, list/render_steps, icon/last_external_icon)
+/datum/greyscale_config/proc/GenerateLayerGroup(list/colors, list/group, list/render_steps, do_bitmasking = FALSE, bitmask_step, icon/last_external_icon)
var/icon/new_icon
for(var/datum/greyscale_layer/layer as anything in group)
var/icon/layer_icon
if(islist(layer))
- layer_icon = GenerateLayerGroup(colors, layer, render_steps, new_icon || last_external_icon)
+ layer_icon = GenerateLayerGroup(colors, layer, render_steps, do_bitmasking, bitmask_step, last_external_icon)
layer = layer[1] // When there are multiple layers in a group like this we use the first one's blend mode
else
- layer_icon = layer.Generate(colors, render_steps, new_icon || last_external_icon)
+ layer_icon = layer.Generate(colors, render_steps, do_bitmasking, bitmask_step, last_external_icon)
if(!new_icon)
new_icon = layer_icon
@@ -289,7 +328,7 @@
// These are so we can see the result of every step of the process in the preview ui
if(render_steps)
var/list/icon_data = list()
- render_steps += list(icon_data)
+ render_steps[icon(layer_icon)] = icon_data
icon_data["config_name"] = name
icon_data["step"] = icon(layer_icon)
icon_data["result"] = icon(new_icon)
diff --git a/code/datums/greyscale/config_types/greyscale_configs.dm b/code/datums/greyscale/config_types/greyscale_configs.dm
index 665b4ea3698..58484d6481d 100644
--- a/code/datums/greyscale/config_types/greyscale_configs.dm
+++ b/code/datums/greyscale/config_types/greyscale_configs.dm
@@ -516,3 +516,63 @@
name = "Worn Skull Bandana Up"
icon_file = 'icons/mob/clothing/mask.dmi'
json_config = 'code/datums/greyscale/json_configs/bandskull_worn_up.json'
+
+/datum/greyscale_config/solid_wall
+ name = "Solid Wall"
+ icon_file = 'icons/turf/walls/solid_wall.dmi'
+ json_config = 'code/datums/greyscale/json_configs/turfs/solid_wall.json'
+
+/datum/greyscale_config/reinforced_solid_wall
+ name = "Reinforced Solid Wall"
+ icon_file = 'icons/turf/walls/solid_wall_reinforced.dmi'
+ json_config = 'code/datums/greyscale/json_configs/turfs/solid_wall.json'
+
+/datum/greyscale_config/low_wall
+ name = "Low Wall"
+ icon_file = 'icons/obj/smooth_structures/low_wall.dmi'
+ json_config = 'code/datums/greyscale/json_configs/structures/low_wall.json'
+
+/datum/greyscale_config/wall_stripe
+ name = "Wall Stripe"
+ icon_file = 'icons/turf/walls/wall_stripe.dmi'
+ json_config = 'code/datums/greyscale/json_configs/turfs/wall_stripe.json'
+
+/datum/greyscale_config/wood_wall_stripe
+ name = "Wood Wall Stripe"
+ icon_file = 'icons/turf/walls/wood_wall_stripe.dmi'
+ json_config = 'code/datums/greyscale/json_configs/turfs/shineless_wall_stripe.json'
+
+/datum/greyscale_config/wall_neighbor_stripe
+ name = "Wall Neighbor Stripe"
+ icon_file = 'icons/turf/walls/neighbor_stripe.dmi'
+ json_config = 'code/datums/greyscale/json_configs/turfs/wall_neighbor_stripe.json'
+
+/datum/greyscale_config/metal_wall
+ name = "Metal Wall"
+ icon_file = 'icons/turf/walls/metal_wall.dmi'
+ json_config = 'code/datums/greyscale/json_configs/turfs/shineless_wall.json'
+
+/datum/greyscale_config/wood_wall
+ name = "Wood Wall"
+ icon_file = 'icons/turf/walls/wood_wall.dmi'
+ json_config = 'code/datums/greyscale/json_configs/turfs/shineless_wall.json'
+
+/datum/greyscale_config/stone_wall
+ name = "Stone Wall"
+ icon_file = 'icons/turf/walls/stone_wall.dmi'
+ json_config = 'code/datums/greyscale/json_configs/turfs/shineless_wall.json'
+
+/datum/greyscale_config/cult_wall
+ name = "Cult Wall"
+ icon_file = 'icons/turf/walls/cult_wall.dmi'
+ json_config = 'code/datums/greyscale/json_configs/turfs/shineless_wall.json'
+
+/datum/greyscale_config/fulltile_window
+ name = "Fulltile Window"
+ icon_file = 'icons/obj/smooth_structures/window.dmi'
+ json_config = 'code/datums/greyscale/json_configs/structures/fulltile_window.json'
+
+/datum/greyscale_config/fulltile_reinforced_window
+ name = "Fulltile Window Reinforced"
+ icon_file = 'icons/obj/smooth_structures/window_reinforced.dmi'
+ json_config = 'code/datums/greyscale/json_configs/structures/fulltile_window.json'
diff --git a/code/datums/greyscale/json_configs/bandana.json b/code/datums/greyscale/json_configs/bandana.json
index a56d9b18265..567c913a01a 100644
--- a/code/datums/greyscale/json_configs/bandana.json
+++ b/code/datums/greyscale/json_configs/bandana.json
@@ -1,10 +1,14 @@
{
- "bandana": [
- {
- "type": "icon_state",
- "icon_state": "bandana_cloth",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- }
- ]
+ "bandana":
+ {
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "bandana_cloth",
+ "blend_mode": "overlay",
+ "color_ids": [ 1 ]
+ }
+ ]
+ }
}
diff --git a/code/datums/greyscale/json_configs/bandana_up.json b/code/datums/greyscale/json_configs/bandana_up.json
index 393d7b0710f..524d70afd56 100644
--- a/code/datums/greyscale/json_configs/bandana_up.json
+++ b/code/datums/greyscale/json_configs/bandana_up.json
@@ -1,10 +1,14 @@
{
- "bandana_up": [
- {
- "type": "icon_state",
- "icon_state": "bandana_cloth_up",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- }
- ]
+ "bandana_up":
+ {
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "bandana_cloth_up",
+ "blend_mode": "overlay",
+ "color_ids": [ 1 ]
+ }
+ ]
+ }
}
diff --git a/code/datums/greyscale/json_configs/bandana_worn.json b/code/datums/greyscale/json_configs/bandana_worn.json
index bc0e6c002d5..c0800b7f088 100644
--- a/code/datums/greyscale/json_configs/bandana_worn.json
+++ b/code/datums/greyscale/json_configs/bandana_worn.json
@@ -1,10 +1,14 @@
{
- "bandana_worn": [
- {
- "type": "icon_state",
- "icon_state": "bandana_cloth_worn",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- }
- ]
+ "bandana_worn":
+ {
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "bandana_cloth_worn",
+ "blend_mode": "overlay",
+ "color_ids": [ 1 ]
+ }
+ ]
+ }
}
diff --git a/code/datums/greyscale/json_configs/bandana_worn_up.json b/code/datums/greyscale/json_configs/bandana_worn_up.json
index b5375d5dfa0..30a7887d49d 100644
--- a/code/datums/greyscale/json_configs/bandana_worn_up.json
+++ b/code/datums/greyscale/json_configs/bandana_worn_up.json
@@ -1,10 +1,14 @@
{
- "bandana_worn_up": [
- {
- "type": "icon_state",
- "icon_state": "bandana_cloth_worn_up",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- }
- ]
+ "bandana_worn_up":
+ {
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "bandana_cloth_worn_up",
+ "blend_mode": "overlay",
+ "color_ids": [ 1 ]
+ }
+ ]
+ }
}
diff --git a/code/datums/greyscale/json_configs/bandskull.json b/code/datums/greyscale/json_configs/bandskull.json
index 18344d5d13a..31a06692f74 100644
--- a/code/datums/greyscale/json_configs/bandskull.json
+++ b/code/datums/greyscale/json_configs/bandskull.json
@@ -1,16 +1,20 @@
{
- "bandskull": [
- {
- "type": "icon_state",
- "icon_state": "bandana_cloth",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- },
+ "bandskull":
{
- "type": "icon_state",
- "icon_state": "bandana_skull",
- "blend_mode": "overlay",
- "color_ids": [ 2 ]
- }
- ]
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "bandana_cloth",
+ "blend_mode": "overlay",
+ "color_ids": [ 1 ]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "bandana_skull",
+ "blend_mode": "overlay",
+ "color_ids": [ 2 ]
+ }
+ ]
+ }
}
diff --git a/code/datums/greyscale/json_configs/bandskull_up.json b/code/datums/greyscale/json_configs/bandskull_up.json
index c01dc7bcf43..e972cb564d6 100644
--- a/code/datums/greyscale/json_configs/bandskull_up.json
+++ b/code/datums/greyscale/json_configs/bandskull_up.json
@@ -1,16 +1,20 @@
{
- "bandskull_up": [
- {
- "type": "icon_state",
- "icon_state": "bandana_cloth_up",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- },
- {
- "type": "icon_state",
- "icon_state": "bandana_skull_up",
- "blend_mode": "overlay",
- "color_ids": [ 2 ]
- }
- ]
+ "bandskull_up":
+ {
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "bandana_cloth_up",
+ "blend_mode": "overlay",
+ "color_ids": [ 1 ]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "bandana_skull_up",
+ "blend_mode": "overlay",
+ "color_ids": [ 2 ]
+ }
+ ]
+ }
}
diff --git a/code/datums/greyscale/json_configs/bandskull_worn.json b/code/datums/greyscale/json_configs/bandskull_worn.json
index 3d2e34688c9..ca2147adf14 100644
--- a/code/datums/greyscale/json_configs/bandskull_worn.json
+++ b/code/datums/greyscale/json_configs/bandskull_worn.json
@@ -1,16 +1,20 @@
{
- "bandskull_worn": [
- {
- "type": "icon_state",
- "icon_state": "bandana_cloth_worn",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- },
- {
- "type": "icon_state",
- "icon_state": "bandana_skull_worn",
- "blend_mode": "overlay",
- "color_ids": [ 2 ]
- }
- ]
+ "bandskull_worn":
+ {
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "bandana_cloth_worn",
+ "blend_mode": "overlay",
+ "color_ids": [ 1 ]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "bandana_skull_worn",
+ "blend_mode": "overlay",
+ "color_ids": [ 2 ]
+ }
+ ]
+ }
}
diff --git a/code/datums/greyscale/json_configs/bandskull_worn_up.json b/code/datums/greyscale/json_configs/bandskull_worn_up.json
index be37d2ee2b8..81b530d15d1 100644
--- a/code/datums/greyscale/json_configs/bandskull_worn_up.json
+++ b/code/datums/greyscale/json_configs/bandskull_worn_up.json
@@ -1,16 +1,20 @@
{
- "bandskull_worn_up": [
- {
- "type": "icon_state",
- "icon_state": "bandana_cloth_worn_up",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- },
- {
- "type": "icon_state",
- "icon_state": "bandana_skull_worn_up",
- "blend_mode": "overlay",
- "color_ids": [ 2 ]
- }
- ]
+ "bandskull_up":
+ {
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "bandana_cloth_worn_up",
+ "blend_mode": "overlay",
+ "color_ids": [ 1 ]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "bandana_skull_worn_up",
+ "blend_mode": "overlay",
+ "color_ids": [ 2 ]
+ }
+ ]
+ }
}
diff --git a/code/datums/greyscale/json_configs/bandstriped.json b/code/datums/greyscale/json_configs/bandstriped.json
index e31fb50309f..ee11bf76d1d 100644
--- a/code/datums/greyscale/json_configs/bandstriped.json
+++ b/code/datums/greyscale/json_configs/bandstriped.json
@@ -1,16 +1,20 @@
{
- "bandstriped": [
- {
- "type": "icon_state",
- "icon_state": "bandana_cloth",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- },
- {
- "type": "icon_state",
- "icon_state": "bandana_stripe",
- "blend_mode": "overlay",
- "color_ids": [ 2 ]
- }
- ]
+ "bandstriped":
+ {
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "bandana_cloth",
+ "blend_mode": "overlay",
+ "color_ids": [ 1 ]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "bandana_stripe",
+ "blend_mode": "overlay",
+ "color_ids": [ 2 ]
+ }
+ ]
+ }
}
diff --git a/code/datums/greyscale/json_configs/bandstriped_up.json b/code/datums/greyscale/json_configs/bandstriped_up.json
index da464432cd4..fe6e38849d9 100644
--- a/code/datums/greyscale/json_configs/bandstriped_up.json
+++ b/code/datums/greyscale/json_configs/bandstriped_up.json
@@ -1,16 +1,20 @@
{
- "bandstriped_up": [
- {
- "type": "icon_state",
- "icon_state": "bandana_cloth_up",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- },
- {
- "type": "icon_state",
- "icon_state": "bandana_stripe_up",
- "blend_mode": "overlay",
- "color_ids": [ 2 ]
- }
- ]
+ "bandstriped_up":
+ {
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "bandana_cloth_up",
+ "blend_mode": "overlay",
+ "color_ids": [ 1 ]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "bandana_stripe_up",
+ "blend_mode": "overlay",
+ "color_ids": [ 2 ]
+ }
+ ]
+ }
}
diff --git a/code/datums/greyscale/json_configs/bandstriped_worn.json b/code/datums/greyscale/json_configs/bandstriped_worn.json
index 89d729aa4c9..11a028a0ea6 100644
--- a/code/datums/greyscale/json_configs/bandstriped_worn.json
+++ b/code/datums/greyscale/json_configs/bandstriped_worn.json
@@ -1,16 +1,20 @@
{
- "bandstriped_worn": [
- {
- "type": "icon_state",
- "icon_state": "bandana_cloth_worn",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- },
- {
- "type": "icon_state",
- "icon_state": "bandana_stripe_worn",
- "blend_mode": "overlay",
- "color_ids": [ 2 ]
- }
- ]
+ "bandstriped_worn":
+ {
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "bandana_cloth_worn",
+ "blend_mode": "overlay",
+ "color_ids": [ 1 ]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "bandana_stripe_worn",
+ "blend_mode": "overlay",
+ "color_ids": [ 2 ]
+ }
+ ]
+ }
}
diff --git a/code/datums/greyscale/json_configs/bandstriped_worn_up.json b/code/datums/greyscale/json_configs/bandstriped_worn_up.json
index 7d08ea651ac..a9251904c56 100644
--- a/code/datums/greyscale/json_configs/bandstriped_worn_up.json
+++ b/code/datums/greyscale/json_configs/bandstriped_worn_up.json
@@ -1,16 +1,20 @@
{
- "bandstriped_worn_up": [
- {
- "type": "icon_state",
- "icon_state": "bandana_cloth_worn_up",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- },
- {
- "type": "icon_state",
- "icon_state": "bandana_stripe_worn_up",
- "blend_mode": "overlay",
- "color_ids": [ 2 ]
- }
- ]
+ "bandstriped_worn_up":
+ {
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "bandana_cloth_worn_up",
+ "blend_mode": "overlay",
+ "color_ids": [ 1 ]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "bandana_stripe_worn_up",
+ "blend_mode": "overlay",
+ "color_ids": [ 2 ]
+ }
+ ]
+ }
}
diff --git a/code/datums/greyscale/json_configs/bench_corner.json b/code/datums/greyscale/json_configs/bench_corner.json
index 3a86aea97e2..9f2a0f23cfd 100644
--- a/code/datums/greyscale/json_configs/bench_corner.json
+++ b/code/datums/greyscale/json_configs/bench_corner.json
@@ -1,15 +1,19 @@
{
- "bench_corner": [
- {
- "type": "icon_state",
- "icon_state": "bench_corner_base",
- "blend_mode": "overlay"
- },
- {
- "type": "icon_state",
- "icon_state": "bench_corner_cover",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- }
- ]
+ "bench_corner":
+ {
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "bench_corner_base",
+ "blend_mode": "overlay"
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "bench_corner_cover",
+ "blend_mode": "overlay",
+ "color_ids": [ 1 ]
+ }
+ ]
+ }
}
diff --git a/code/datums/greyscale/json_configs/bench_left.json b/code/datums/greyscale/json_configs/bench_left.json
index 36939f8b716..a008cd37586 100644
--- a/code/datums/greyscale/json_configs/bench_left.json
+++ b/code/datums/greyscale/json_configs/bench_left.json
@@ -1,15 +1,19 @@
{
- "bench_left": [
- {
- "type": "icon_state",
- "icon_state": "bench_left_base",
- "blend_mode": "overlay"
- },
- {
- "type": "icon_state",
- "icon_state": "bench_left_cover",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- }
- ]
+ "bench_left":
+ {
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "bench_left_base",
+ "blend_mode": "overlay"
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "bench_left_cover",
+ "blend_mode": "overlay",
+ "color_ids": [ 1 ]
+ }
+ ]
+ }
}
diff --git a/code/datums/greyscale/json_configs/bench_middle.json b/code/datums/greyscale/json_configs/bench_middle.json
index a40df28984e..be15aa53bee 100644
--- a/code/datums/greyscale/json_configs/bench_middle.json
+++ b/code/datums/greyscale/json_configs/bench_middle.json
@@ -1,15 +1,19 @@
{
- "bench_middle": [
- {
- "type": "icon_state",
- "icon_state": "bench_middle_base",
- "blend_mode": "overlay"
- },
- {
- "type": "icon_state",
- "icon_state": "bench_middle_cover",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- }
- ]
+ "bench_middle":
+ {
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "bench_middle_base",
+ "blend_mode": "overlay"
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "bench_middle_cover",
+ "blend_mode": "overlay",
+ "color_ids": [ 1 ]
+ }
+ ]
+ }
}
diff --git a/code/datums/greyscale/json_configs/bench_right.json b/code/datums/greyscale/json_configs/bench_right.json
index ec1c3575613..f04ccc62980 100644
--- a/code/datums/greyscale/json_configs/bench_right.json
+++ b/code/datums/greyscale/json_configs/bench_right.json
@@ -1,15 +1,19 @@
{
- "bench_right": [
- {
- "type": "icon_state",
- "icon_state": "bench_right_base",
- "blend_mode": "overlay"
- },
- {
- "type": "icon_state",
- "icon_state": "bench_right_cover",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- }
- ]
+ "bench_right":
+ {
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "bench_right_base",
+ "blend_mode": "overlay"
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "bench_right_cover",
+ "blend_mode": "overlay",
+ "color_ids": [1]
+ }
+ ]
+ }
}
diff --git a/code/datums/greyscale/json_configs/beret.json b/code/datums/greyscale/json_configs/beret.json
index f7ee848d264..9e9fdd57247 100644
--- a/code/datums/greyscale/json_configs/beret.json
+++ b/code/datums/greyscale/json_configs/beret.json
@@ -1,18 +1,26 @@
{
- "beret": [
- {
- "type": "icon_state",
- "icon_state": "beret",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- }
- ],
- "beret_flat": [
- {
- "type": "icon_state",
- "icon_state": "beret_flat",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- }
- ]
+ "beret":
+ {
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "beret",
+ "blend_mode": "overlay",
+ "color_ids": [ 1 ]
+ }
+ ]
+ },
+ "beret_flat":
+ {
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "beret_flat",
+ "blend_mode": "overlay",
+ "color_ids": [ 1 ]
+ }
+ ]
+ }
}
diff --git a/code/datums/greyscale/json_configs/beret_badge.json b/code/datums/greyscale/json_configs/beret_badge.json
index f0eda0df5ae..e4581927529 100644
--- a/code/datums/greyscale/json_configs/beret_badge.json
+++ b/code/datums/greyscale/json_configs/beret_badge.json
@@ -1,16 +1,20 @@
{
- "beret_badge": [
- {
- "type": "icon_state",
- "icon_state": "beret",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- },
- {
- "type": "icon_state",
- "icon_state": "badge",
- "blend_mode": "overlay",
- "color_ids": [ 2 ]
- }
- ]
+ "beret_badge":
+ {
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "beret",
+ "blend_mode": "overlay",
+ "color_ids": [ 1 ]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "badge",
+ "blend_mode": "overlay",
+ "color_ids": [ 2 ]
+ }
+ ]
+ }
}
diff --git a/code/datums/greyscale/json_configs/beret_badge_worn.json b/code/datums/greyscale/json_configs/beret_badge_worn.json
index 47960e08daa..2f2bd8624e8 100644
--- a/code/datums/greyscale/json_configs/beret_badge_worn.json
+++ b/code/datums/greyscale/json_configs/beret_badge_worn.json
@@ -1,16 +1,20 @@
{
- "beret_badge": [
- {
- "type": "icon_state",
- "icon_state": "beret_worn",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- },
- {
- "type": "icon_state",
- "icon_state": "badge_worn",
- "blend_mode": "overlay",
- "color_ids": [ 2 ]
- }
- ]
+ "beret_badge":
+ {
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "beret_worn",
+ "blend_mode": "overlay",
+ "color_ids": [ 1 ]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "badge_worn",
+ "blend_mode": "overlay",
+ "color_ids": [ 2 ]
+ }
+ ]
+ }
}
diff --git a/code/datums/greyscale/json_configs/beret_worn.json b/code/datums/greyscale/json_configs/beret_worn.json
index 8509136e53a..9924102d195 100644
--- a/code/datums/greyscale/json_configs/beret_worn.json
+++ b/code/datums/greyscale/json_configs/beret_worn.json
@@ -1,18 +1,26 @@
{
- "beret": [
- {
- "type": "icon_state",
- "icon_state": "beret_worn",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- }
- ],
- "beret_flat": [
- {
- "type": "icon_state",
- "icon_state": "beret_worn",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- }
- ]
+ "beret":
+ {
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "beret_worn",
+ "blend_mode": "overlay",
+ "color_ids": [ 1 ]
+ }
+ ]
+ },
+ "beret_flat":
+ {
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "beret_worn",
+ "blend_mode": "overlay",
+ "color_ids": [ 1 ]
+ }
+ ]
+ }
}
diff --git a/code/datums/greyscale/json_configs/canister_base.json b/code/datums/greyscale/json_configs/canister_base.json
index 4528c6225c6..19095949d00 100644
--- a/code/datums/greyscale/json_configs/canister_base.json
+++ b/code/datums/greyscale/json_configs/canister_base.json
@@ -1,20 +1,24 @@
{
- "": [
- {
- "type": "icon_state",
- "icon_state": "base",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- },
- {
- "type": "icon_state",
- "icon_state": "add_shader",
- "blend_mode": "add"
- },
- {
- "type": "icon_state",
- "icon_state": "multi_shader",
- "blend_mode": "multiply"
- }
- ]
+ "":
+ {
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "base",
+ "blend_mode": "overlay",
+ "color_ids": [1]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "add_shader",
+ "blend_mode": "add"
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "multi_shader",
+ "blend_mode": "multiply"
+ }
+ ]
+ }
}
diff --git a/code/datums/greyscale/json_configs/canister_default.json b/code/datums/greyscale/json_configs/canister_default.json
index b965e9ec3fd..630c84cad3f 100644
--- a/code/datums/greyscale/json_configs/canister_default.json
+++ b/code/datums/greyscale/json_configs/canister_default.json
@@ -1,24 +1,32 @@
{
- "": [
- {
- "type": "reference",
- "reference_type": "/datum/greyscale_config/canister/base",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- },
- {
- "type": "reference",
- "reference_type": "/datum/greyscale_config/canister/post_effects",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- }
- ],
- "window-base": [
- {
- "type": "icon_state",
- "icon_state": "window-base",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- }
- ]
+ "":
+ {
+ "layers":
+ [
+ {
+ "type": "reference",
+ "reference_type": "/datum/greyscale_config/canister/base",
+ "blend_mode": "overlay",
+ "color_ids": [1]
+ },
+ {
+ "type": "reference",
+ "reference_type": "/datum/greyscale_config/canister/post_effects",
+ "blend_mode": "overlay",
+ "color_ids": [1]
+ }
+ ]
+ },
+ "window-base":
+ {
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "window-base",
+ "blend_mode": "overlay",
+ "color_ids": [1]
+ }
+ ]
+ }
}
diff --git a/code/datums/greyscale/json_configs/canister_double_stripe.json b/code/datums/greyscale/json_configs/canister_double_stripe.json
index 33dd115d3ea..6beffb49157 100644
--- a/code/datums/greyscale/json_configs/canister_double_stripe.json
+++ b/code/datums/greyscale/json_configs/canister_double_stripe.json
@@ -1,37 +1,45 @@
{
- "": [
- {
- "type": "reference",
- "reference_type": "/datum/greyscale_config/canister/base",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- },
+ "":
+ {
+ "layers":
[
{
- "type": "icon_state",
- "icon_state": "double_stripe",
+ "type": "reference",
+ "reference_type": "/datum/greyscale_config/canister/base",
"blend_mode": "overlay",
- "color_ids": [ 2 ]
+ "color_ids": [1]
},
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "double_stripe",
+ "blend_mode": "overlay",
+ "color_ids": [2]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "double_stripe_shader",
+ "blend_mode": "subtract"
+ }
+ ],
+ {
+ "type": "reference",
+ "reference_type": "/datum/greyscale_config/canister/post_effects",
+ "blend_mode": "overlay",
+ "color_ids": [1]
+ }
+ ]
+ },
+ "window-base":
+ {
+ "layers":
+ [
{
"type": "icon_state",
- "icon_state": "double_stripe_shader",
- "blend_mode": "subtract"
+ "icon_state": "window-base",
+ "blend_mode": "overlay",
+ "color_ids": [1]
}
- ],
- {
- "type": "reference",
- "reference_type": "/datum/greyscale_config/canister/post_effects",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- }
- ],
- "window-base": [
- {
- "type": "icon_state",
- "icon_state": "window-base",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- }
- ]
+ ]
+ }
}
diff --git a/code/datums/greyscale/json_configs/canister_hazard.json b/code/datums/greyscale/json_configs/canister_hazard.json
index 81c19362231..f82cda43784 100644
--- a/code/datums/greyscale/json_configs/canister_hazard.json
+++ b/code/datums/greyscale/json_configs/canister_hazard.json
@@ -1,30 +1,38 @@
{
- "": [
- {
- "type": "reference",
- "reference_type": "/datum/greyscale_config/canister/base",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- },
- {
- "type": "icon_state",
- "icon_state": "hazard_stripes",
- "blend_mode": "overlay",
- "color_ids": [ 2 ]
- },
- {
- "type": "reference",
- "reference_type": "/datum/greyscale_config/canister/post_effects",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- }
- ],
- "window-base": [
- {
- "type": "icon_state",
- "icon_state": "window-base",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- }
- ]
+ "":
+ {
+ "layers":
+ [
+ {
+ "type": "reference",
+ "reference_type": "/datum/greyscale_config/canister/base",
+ "blend_mode": "overlay",
+ "color_ids": [1]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "hazard_stripes",
+ "blend_mode": "overlay",
+ "color_ids": [2]
+ },
+ {
+ "type": "reference",
+ "reference_type": "/datum/greyscale_config/canister/post_effects",
+ "blend_mode": "overlay",
+ "color_ids": [1]
+ }
+ ]
+ },
+ "window-base":
+ {
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "window-base",
+ "blend_mode": "overlay",
+ "color_ids": [1]
+ }
+ ]
+ }
}
diff --git a/code/datums/greyscale/json_configs/canister_post_effects.json b/code/datums/greyscale/json_configs/canister_post_effects.json
index 6756c3221f9..3eb0391365d 100644
--- a/code/datums/greyscale/json_configs/canister_post_effects.json
+++ b/code/datums/greyscale/json_configs/canister_post_effects.json
@@ -1,15 +1,19 @@
{
- "": [
- {
- "type": "icon_state",
- "icon_state": "outline",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- },
- {
- "type": "icon_state",
- "icon_state": "lights",
- "blend_mode": "overlay"
- }
- ]
+ "":
+ {
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "outline",
+ "blend_mode": "overlay",
+ "color_ids": [1]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "lights",
+ "blend_mode": "overlay"
+ }
+ ]
+ }
}
diff --git a/code/datums/greyscale/json_configs/canister_proto.json b/code/datums/greyscale/json_configs/canister_proto.json
index 09f19b80e9b..4d1873d0dd6 100644
--- a/code/datums/greyscale/json_configs/canister_proto.json
+++ b/code/datums/greyscale/json_configs/canister_proto.json
@@ -1,39 +1,43 @@
{
- "": [
- {
- "type": "icon_state",
- "icon_state": "can_base",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- },
- {
- "type": "icon_state",
- "icon_state": "can_shader",
- "blend_mode": "multiply"
- },
- {
- "type": "icon_state",
- "icon_state": "stand",
- "blend_mode": "overlay"
- },
- {
- "type": "icon_state",
- "icon_state": "decals",
- "blend_mode": "overlay"
- },
+ "":
+ {
+ "layers":
[
{
"type": "icon_state",
- "icon_state": "light_base",
+ "icon_state": "can_base",
"blend_mode": "overlay",
- "color_ids": [ 2 ]
+ "color_ids": [1]
},
{
"type": "icon_state",
- "icon_state": "light",
- "blend_mode": "overlay",
- "color_ids": [ 3 ]
- }
+ "icon_state": "can_shader",
+ "blend_mode": "multiply"
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "stand",
+ "blend_mode": "overlay"
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "decals",
+ "blend_mode": "overlay"
+ },
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "light_base",
+ "blend_mode": "overlay",
+ "color_ids": [2]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "light",
+ "blend_mode": "overlay",
+ "color_ids": [3]
+ }
+ ]
]
- ]
+ }
}
diff --git a/code/datums/greyscale/json_configs/canister_stripe.json b/code/datums/greyscale/json_configs/canister_stripe.json
index 9e5f087c0ae..cc7c8288cf9 100644
--- a/code/datums/greyscale/json_configs/canister_stripe.json
+++ b/code/datums/greyscale/json_configs/canister_stripe.json
@@ -1,30 +1,38 @@
{
- "": [
- {
- "type": "reference",
- "reference_type": "/datum/greyscale_config/canister/base",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- },
- {
- "type": "icon_state",
- "icon_state": "stripe",
- "blend_mode": "overlay",
- "color_ids": [ 2 ]
- },
- {
- "type": "reference",
- "reference_type": "/datum/greyscale_config/canister/post_effects",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- }
- ],
- "window-base": [
- {
- "type": "icon_state",
- "icon_state": "window-base",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- }
- ]
+ "":
+ {
+ "layers":
+ [
+ {
+ "type": "reference",
+ "reference_type": "/datum/greyscale_config/canister/base",
+ "blend_mode": "overlay",
+ "color_ids": [1]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "stripe",
+ "blend_mode": "overlay",
+ "color_ids": [2]
+ },
+ {
+ "type": "reference",
+ "reference_type": "/datum/greyscale_config/canister/post_effects",
+ "blend_mode": "overlay",
+ "color_ids": [1]
+ }
+ ]
+ },
+ "window-base":
+ {
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "window-base",
+ "blend_mode": "overlay",
+ "color_ids": [1]
+ }
+ ]
+ }
}
diff --git a/code/datums/greyscale/json_configs/carp.json b/code/datums/greyscale/json_configs/carp.json
index d01fda5a9ee..a11851c9c49 100644
--- a/code/datums/greyscale/json_configs/carp.json
+++ b/code/datums/greyscale/json_configs/carp.json
@@ -1,28 +1,36 @@
{
- "base": [
- {
- "type": "icon_state",
- "icon_state": "base",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- },
- {
- "type": "icon_state",
- "icon_state": "base_mouth",
- "blend_mode": "overlay"
- }
- ],
- "base_dead": [
- {
- "type": "icon_state",
- "icon_state": "base_dead",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- },
- {
- "type": "icon_state",
- "icon_state": "base_dead_mouth",
- "blend_mode": "overlay"
- }
- ]
+ "base":
+ {
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "base",
+ "blend_mode": "overlay",
+ "color_ids": [1]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "base_mouth",
+ "blend_mode": "overlay"
+ }
+ ]
+ },
+ "base_dead":
+ {
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "base_dead",
+ "blend_mode": "overlay",
+ "color_ids": [1]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "base_dead_mouth",
+ "blend_mode": "overlay"
+ }
+ ]
+ }
}
diff --git a/code/datums/greyscale/json_configs/carp_disk_mouth.json b/code/datums/greyscale/json_configs/carp_disk_mouth.json
index f74fcfdeec6..c014ba45f91 100644
--- a/code/datums/greyscale/json_configs/carp_disk_mouth.json
+++ b/code/datums/greyscale/json_configs/carp_disk_mouth.json
@@ -1,10 +1,14 @@
{
- "disk_mouth": [
- {
- "type": "icon_state",
- "icon_state": "disk_mouth",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- }
- ]
+ "disk_mouth":
+ {
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "disk_mouth",
+ "blend_mode": "overlay",
+ "color_ids": [1]
+ }
+ ]
+ }
}
diff --git a/code/datums/greyscale/json_configs/circuit.json b/code/datums/greyscale/json_configs/circuit.json
index ed1569cda25..e2421536e9d 100644
--- a/code/datums/greyscale/json_configs/circuit.json
+++ b/code/datums/greyscale/json_configs/circuit.json
@@ -1,15 +1,19 @@
{
- "": [
- {
- "type": "icon_state",
- "icon_state": "circuit_board",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- },
- {
- "type": "icon_state",
- "icon_state": "circuit_chip",
- "blend_mode": "overlay"
- }
- ]
+ "":
+ {
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "circuit_board",
+ "blend_mode": "overlay",
+ "color_ids": [1]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "circuit_chip",
+ "blend_mode": "overlay"
+ }
+ ]
+ }
}
diff --git a/code/datums/greyscale/json_configs/ctf_light.json b/code/datums/greyscale/json_configs/ctf_light.json
index e48762afa67..59576795fc5 100644
--- a/code/datums/greyscale/json_configs/ctf_light.json
+++ b/code/datums/greyscale/json_configs/ctf_light.json
@@ -1,15 +1,19 @@
{
- "light": [
- {
- "type": "icon_state",
- "icon_state": "light",
- "blend_mode": "overlay"
- },
- {
- "type": "icon_state",
- "icon_state": "light_colours",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- }
- ]
+ "light":
+ {
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "light",
+ "blend_mode": "overlay"
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "light_colours",
+ "blend_mode": "overlay",
+ "color_ids": [ 1 ]
+ }
+ ]
+ }
}
diff --git a/code/datums/greyscale/json_configs/ctf_light_worn.json b/code/datums/greyscale/json_configs/ctf_light_worn.json
index e48762afa67..59576795fc5 100644
--- a/code/datums/greyscale/json_configs/ctf_light_worn.json
+++ b/code/datums/greyscale/json_configs/ctf_light_worn.json
@@ -1,15 +1,19 @@
{
- "light": [
- {
- "type": "icon_state",
- "icon_state": "light",
- "blend_mode": "overlay"
- },
- {
- "type": "icon_state",
- "icon_state": "light_colours",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- }
- ]
+ "light":
+ {
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "light",
+ "blend_mode": "overlay"
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "light_colours",
+ "blend_mode": "overlay",
+ "color_ids": [ 1 ]
+ }
+ ]
+ }
}
diff --git a/code/datums/greyscale/json_configs/ctf_standard.json b/code/datums/greyscale/json_configs/ctf_standard.json
index f56ed5d8c06..3830cb27113 100644
--- a/code/datums/greyscale/json_configs/ctf_standard.json
+++ b/code/datums/greyscale/json_configs/ctf_standard.json
@@ -1,15 +1,19 @@
{
- "standard": [
- {
- "type": "icon_state",
- "icon_state": "standard",
- "blend_mode": "overlay"
- },
- {
- "type": "icon_state",
- "icon_state": "standard_colours",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- }
- ]
+ "standard":
+ {
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "standard",
+ "blend_mode": "overlay"
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "standard_colours",
+ "blend_mode": "overlay",
+ "color_ids": [ 1 ]
+ }
+ ]
+ }
}
diff --git a/code/datums/greyscale/json_configs/ctf_standard_worn.json b/code/datums/greyscale/json_configs/ctf_standard_worn.json
index f56ed5d8c06..3830cb27113 100644
--- a/code/datums/greyscale/json_configs/ctf_standard_worn.json
+++ b/code/datums/greyscale/json_configs/ctf_standard_worn.json
@@ -1,15 +1,19 @@
{
- "standard": [
- {
- "type": "icon_state",
- "icon_state": "standard",
- "blend_mode": "overlay"
- },
- {
- "type": "icon_state",
- "icon_state": "standard_colours",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- }
- ]
+ "standard":
+ {
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "standard",
+ "blend_mode": "overlay"
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "standard_colours",
+ "blend_mode": "overlay",
+ "color_ids": [ 1 ]
+ }
+ ]
+ }
}
diff --git a/code/datums/greyscale/json_configs/giftdeliverybox.json b/code/datums/greyscale/json_configs/giftdeliverybox.json
index 68c4ad1f76d..cc57a31a56e 100644
--- a/code/datums/greyscale/json_configs/giftdeliverybox.json
+++ b/code/datums/greyscale/json_configs/giftdeliverybox.json
@@ -1,16 +1,20 @@
{
- "": [
- {
- "type": "icon_state",
- "icon_state": "giftdeliverybox_base",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- },
- {
- "type": "icon_state",
- "icon_state": "giftdeliverybox_ribbon",
- "blend_mode": "overlay",
- "color_ids": [ 2 ]
- }
- ]
+ "":
+ {
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "giftdeliverybox_base",
+ "blend_mode": "overlay",
+ "color_ids": [1]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "giftdeliverybox_ribbon",
+ "blend_mode": "overlay",
+ "color_ids": [2]
+ }
+ ]
+ }
}
diff --git a/code/datums/greyscale/json_configs/giftdeliverycloset.json b/code/datums/greyscale/json_configs/giftdeliverycloset.json
index 9de529901a2..6bac550d021 100644
--- a/code/datums/greyscale/json_configs/giftdeliverycloset.json
+++ b/code/datums/greyscale/json_configs/giftdeliverycloset.json
@@ -1,16 +1,20 @@
{
- "": [
- {
- "type": "icon_state",
- "icon_state": "giftdeliverycloset_base",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- },
- {
- "type": "icon_state",
- "icon_state": "giftdeliverycloset_ribbon",
- "blend_mode": "overlay",
- "color_ids": [ 2 ]
- }
- ]
+ "":
+ {
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "giftdeliverycloset_base",
+ "blend_mode": "overlay",
+ "color_ids": [1]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "giftdeliverycloset_ribbon",
+ "blend_mode": "overlay",
+ "color_ids": [2]
+ }
+ ]
+ }
}
diff --git a/code/datums/greyscale/json_configs/giftdeliverycrate.json b/code/datums/greyscale/json_configs/giftdeliverycrate.json
index 78d864f4123..9d3200155d1 100644
--- a/code/datums/greyscale/json_configs/giftdeliverycrate.json
+++ b/code/datums/greyscale/json_configs/giftdeliverycrate.json
@@ -1,16 +1,20 @@
{
- "": [
- {
- "type": "icon_state",
- "icon_state": "giftdeliverycrate_base",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- },
- {
- "type": "icon_state",
- "icon_state": "giftdeliverycrate_ribbon",
- "blend_mode": "overlay",
- "color_ids": [ 2 ]
- }
- ]
+ "":
+ {
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "giftdeliverycrate_base",
+ "blend_mode": "overlay",
+ "color_ids": [1]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "giftdeliverycrate_ribbon",
+ "blend_mode": "overlay",
+ "color_ids": [2]
+ }
+ ]
+ }
}
diff --git a/code/datums/greyscale/json_configs/giftdeliverypackage1.json b/code/datums/greyscale/json_configs/giftdeliverypackage1.json
index 7b61b49688c..6fd0c65fb8e 100644
--- a/code/datums/greyscale/json_configs/giftdeliverypackage1.json
+++ b/code/datums/greyscale/json_configs/giftdeliverypackage1.json
@@ -1,16 +1,20 @@
{
- "": [
- {
- "type": "icon_state",
- "icon_state": "giftdeliverypackage1_base",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- },
- {
- "type": "icon_state",
- "icon_state": "giftdeliverypackage1_ribbon",
- "blend_mode": "overlay",
- "color_ids": [ 2 ]
- }
- ]
+ "":
+ {
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "giftdeliverypackage1_base",
+ "blend_mode": "overlay",
+ "color_ids": [1]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "giftdeliverypackage1_ribbon",
+ "blend_mode": "overlay",
+ "color_ids": [2]
+ }
+ ]
+ }
}
diff --git a/code/datums/greyscale/json_configs/giftdeliverypackage2.json b/code/datums/greyscale/json_configs/giftdeliverypackage2.json
index a2724a4d4f5..1a113ff6c29 100644
--- a/code/datums/greyscale/json_configs/giftdeliverypackage2.json
+++ b/code/datums/greyscale/json_configs/giftdeliverypackage2.json
@@ -1,16 +1,20 @@
{
- "": [
- {
- "type": "icon_state",
- "icon_state": "giftdeliverypackage2_base",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- },
- {
- "type": "icon_state",
- "icon_state": "giftdeliverypackage2_ribbon",
- "blend_mode": "overlay",
- "color_ids": [ 2 ]
- }
- ]
+ "":
+ {
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "giftdeliverypackage2_base",
+ "blend_mode": "overlay",
+ "color_ids": [1]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "giftdeliverypackage2_ribbon",
+ "blend_mode": "overlay",
+ "color_ids": [2]
+ }
+ ]
+ }
}
diff --git a/code/datums/greyscale/json_configs/giftdeliverypackage3.json b/code/datums/greyscale/json_configs/giftdeliverypackage3.json
index 20b2b2a1f10..335401abae2 100644
--- a/code/datums/greyscale/json_configs/giftdeliverypackage3.json
+++ b/code/datums/greyscale/json_configs/giftdeliverypackage3.json
@@ -1,16 +1,20 @@
{
- "": [
- {
- "type": "icon_state",
- "icon_state": "giftdeliverypackage3_base",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- },
- {
- "type": "icon_state",
- "icon_state": "giftdeliverypackage3_ribbon",
- "blend_mode": "overlay",
- "color_ids": [ 2 ]
- }
- ]
+ "":
+ {
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "giftdeliverypackage3_base",
+ "blend_mode": "overlay",
+ "color_ids": [1]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "giftdeliverypackage3_ribbon",
+ "blend_mode": "overlay",
+ "color_ids": [2]
+ }
+ ]
+ }
}
diff --git a/code/datums/greyscale/json_configs/giftdeliverypackage4.json b/code/datums/greyscale/json_configs/giftdeliverypackage4.json
index a75521dfd7e..29c9e26f627 100644
--- a/code/datums/greyscale/json_configs/giftdeliverypackage4.json
+++ b/code/datums/greyscale/json_configs/giftdeliverypackage4.json
@@ -1,16 +1,20 @@
{
- "": [
- {
- "type": "icon_state",
- "icon_state": "giftdeliverypackage4_base",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- },
- {
- "type": "icon_state",
- "icon_state": "giftdeliverypackage4_ribbon",
- "blend_mode": "overlay",
- "color_ids": [ 2 ]
- }
- ]
+ "":
+ {
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "giftdeliverypackage4_base",
+ "blend_mode": "overlay",
+ "color_ids": [1]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "giftdeliverypackage4_ribbon",
+ "blend_mode": "overlay",
+ "color_ids": [2]
+ }
+ ]
+ }
}
diff --git a/code/datums/greyscale/json_configs/giftdeliverypackage5.json b/code/datums/greyscale/json_configs/giftdeliverypackage5.json
index 180cb27dddc..a7878d6a2ef 100644
--- a/code/datums/greyscale/json_configs/giftdeliverypackage5.json
+++ b/code/datums/greyscale/json_configs/giftdeliverypackage5.json
@@ -1,16 +1,20 @@
{
- "": [
- {
- "type": "icon_state",
- "icon_state": "giftdeliverypackage5_base",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- },
- {
- "type": "icon_state",
- "icon_state": "giftdeliverypackage5_ribbon",
- "blend_mode": "overlay",
- "color_ids": [ 2 ]
- }
- ]
+ "":
+ {
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "giftdeliverypackage5_base",
+ "blend_mode": "overlay",
+ "color_ids": [1]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "giftdeliverypackage5_ribbon",
+ "blend_mode": "overlay",
+ "color_ids": [2]
+ }
+ ]
+ }
}
diff --git a/code/datums/greyscale/json_configs/items/ceremonial_blade.json b/code/datums/greyscale/json_configs/items/ceremonial_blade.json
index 16360a5e889..2a8b48b38cb 100644
--- a/code/datums/greyscale/json_configs/items/ceremonial_blade.json
+++ b/code/datums/greyscale/json_configs/items/ceremonial_blade.json
@@ -1,15 +1,19 @@
{
- "default": [
- {
- "type": "icon_state",
- "icon_state": "base",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- },
- {
- "type": "icon_state",
- "icon_state": "handle",
- "blend_mode": "overlay"
- }
- ]
+ "default":
+ {
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "base",
+ "blend_mode": "overlay",
+ "color_ids": [ 1 ]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "handle",
+ "blend_mode": "overlay"
+ }
+ ]
+ }
}
diff --git a/code/datums/greyscale/json_configs/items/ceremonial_blade_lefthand.json b/code/datums/greyscale/json_configs/items/ceremonial_blade_lefthand.json
index aafdb2d897e..7e774e21fd5 100644
--- a/code/datums/greyscale/json_configs/items/ceremonial_blade_lefthand.json
+++ b/code/datums/greyscale/json_configs/items/ceremonial_blade_lefthand.json
@@ -1,10 +1,14 @@
{
- "default": [
- {
- "type": "icon_state",
- "icon_state": "inhand_left",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- }
- ]
+ "default":
+ {
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "inhand_left",
+ "blend_mode": "overlay",
+ "color_ids": [ 1 ]
+ }
+ ]
+ }
}
diff --git a/code/datums/greyscale/json_configs/items/ceremonial_blade_righthand.json b/code/datums/greyscale/json_configs/items/ceremonial_blade_righthand.json
index d80b0c49a25..72d7364ba8c 100644
--- a/code/datums/greyscale/json_configs/items/ceremonial_blade_righthand.json
+++ b/code/datums/greyscale/json_configs/items/ceremonial_blade_righthand.json
@@ -1,10 +1,14 @@
{
- "default": [
- {
- "type": "icon_state",
- "icon_state": "inhand_right",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- }
- ]
+ "default":
+ {
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "inhand_right",
+ "blend_mode": "overlay",
+ "color_ids": [ 1 ]
+ }
+ ]
+ }
}
diff --git a/code/datums/greyscale/json_configs/items/cleric_mace.json b/code/datums/greyscale/json_configs/items/cleric_mace.json
index 781c790ea6a..91eb4c32d7f 100644
--- a/code/datums/greyscale/json_configs/items/cleric_mace.json
+++ b/code/datums/greyscale/json_configs/items/cleric_mace.json
@@ -1,28 +1,36 @@
{
- "default": [
- {
- "type": "icon_state",
- "icon_state": "base",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- },
- {
- "type": "icon_state",
- "icon_state": "handle",
- "blend_mode": "overlay"
- }
- ],
- "default_worn": [
- {
- "type": "icon_state",
- "icon_state": "worn_shaft",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- },
- {
- "type": "icon_state",
- "icon_state": "worn_handle",
- "blend_mode": "overlay"
- }
- ]
+ "default":
+ {
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "base",
+ "blend_mode": "overlay",
+ "color_ids": [ 1 ]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "handle",
+ "blend_mode": "overlay"
+ }
+ ]
+ },
+ "default_worn":
+ {
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "worn_shaft",
+ "blend_mode": "overlay",
+ "color_ids": [ 1 ]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "worn_handle",
+ "blend_mode": "overlay"
+ }
+ ]
+ }
}
diff --git a/code/datums/greyscale/json_configs/items/cleric_mace_gold.json b/code/datums/greyscale/json_configs/items/cleric_mace_gold.json
index 8ca0ba3b607..54bde741f45 100644
--- a/code/datums/greyscale/json_configs/items/cleric_mace_gold.json
+++ b/code/datums/greyscale/json_configs/items/cleric_mace_gold.json
@@ -1,46 +1,54 @@
{
- "default": [
- {
- "type": "reference",
- "reference_type": "/datum/greyscale_config/cleric_mace",
- "icon_state": "default",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- },
+ "default":
+ {
+ "layers":
[
{
"type": "reference",
- "reference_type": "/datum/greyscale_config/shimmer",
+ "reference_type": "/datum/greyscale_config/cleric_mace",
+ "icon_state": "default",
"blend_mode": "overlay",
- "color_ids": [ "#ffffff" ]
+ "color_ids": [1]
},
- {
- "type": "icon_state",
- "icon_state": "shimmer_mask",
- "blend_mode": "multiply"
- }
+ [
+ {
+ "type": "reference",
+ "reference_type": "/datum/greyscale_config/shimmer",
+ "blend_mode": "overlay",
+ "color_ids": ["#ffffff"]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "shimmer_mask",
+ "blend_mode": "multiply"
+ }
+ ]
]
- ],
- "default_worn": [
- {
- "type": "reference",
- "reference_type": "/datum/greyscale_config/cleric_mace",
- "icon_state": "default_worn",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- },
+ },
+ "default_worn":
+ {
+ "layers":
[
{
"type": "reference",
- "reference_type": "/datum/greyscale_config/shimmer",
+ "reference_type": "/datum/greyscale_config/cleric_mace",
+ "icon_state": "default_worn",
"blend_mode": "overlay",
- "color_ids": [ "#ffffff" ]
+ "color_ids": [1]
},
- {
- "type": "icon_state",
- "icon_state": "shimmer_mask_worn",
- "blend_mode": "multiply"
- }
+ [
+ {
+ "type": "reference",
+ "reference_type": "/datum/greyscale_config/shimmer",
+ "blend_mode": "overlay",
+ "color_ids": ["#ffffff"]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "shimmer_mask_worn",
+ "blend_mode": "multiply"
+ }
+ ]
]
- ]
+ }
}
diff --git a/code/datums/greyscale/json_configs/items/cleric_mace_lefthand.json b/code/datums/greyscale/json_configs/items/cleric_mace_lefthand.json
index aafdb2d897e..7e774e21fd5 100644
--- a/code/datums/greyscale/json_configs/items/cleric_mace_lefthand.json
+++ b/code/datums/greyscale/json_configs/items/cleric_mace_lefthand.json
@@ -1,10 +1,14 @@
{
- "default": [
- {
- "type": "icon_state",
- "icon_state": "inhand_left",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- }
- ]
+ "default":
+ {
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "inhand_left",
+ "blend_mode": "overlay",
+ "color_ids": [ 1 ]
+ }
+ ]
+ }
}
diff --git a/code/datums/greyscale/json_configs/items/cleric_mace_lefthand_gold.json b/code/datums/greyscale/json_configs/items/cleric_mace_lefthand_gold.json
index 9372b4b0551..4191da7aeea 100644
--- a/code/datums/greyscale/json_configs/items/cleric_mace_lefthand_gold.json
+++ b/code/datums/greyscale/json_configs/items/cleric_mace_lefthand_gold.json
@@ -1,24 +1,28 @@
{
- "default": [
- {
- "type": "reference",
- "reference_type": "/datum/greyscale_config/cleric_mace_lefthand",
- "icon_state": "default",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- },
+ "default":
+ {
+ "layers":
[
{
"type": "reference",
- "reference_type": "/datum/greyscale_config/shimmer",
+ "reference_type": "/datum/greyscale_config/cleric_mace_lefthand",
+ "icon_state": "default",
"blend_mode": "overlay",
- "color_ids": [ "#ffffff" ]
+ "color_ids": [1]
},
- {
- "type": "icon_state",
- "icon_state": "shimmer_mask_lefthand",
- "blend_mode": "multiply"
- }
+ [
+ {
+ "type": "reference",
+ "reference_type": "/datum/greyscale_config/shimmer",
+ "blend_mode": "overlay",
+ "color_ids": ["#ffffff"]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "shimmer_mask_lefthand",
+ "blend_mode": "multiply"
+ }
+ ]
]
- ]
+ }
}
diff --git a/code/datums/greyscale/json_configs/items/cleric_mace_righthand.json b/code/datums/greyscale/json_configs/items/cleric_mace_righthand.json
index d80b0c49a25..72d7364ba8c 100644
--- a/code/datums/greyscale/json_configs/items/cleric_mace_righthand.json
+++ b/code/datums/greyscale/json_configs/items/cleric_mace_righthand.json
@@ -1,10 +1,14 @@
{
- "default": [
- {
- "type": "icon_state",
- "icon_state": "inhand_right",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- }
- ]
+ "default":
+ {
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "inhand_right",
+ "blend_mode": "overlay",
+ "color_ids": [ 1 ]
+ }
+ ]
+ }
}
diff --git a/code/datums/greyscale/json_configs/items/cleric_mace_righthand_gold.json b/code/datums/greyscale/json_configs/items/cleric_mace_righthand_gold.json
index d91f1c0800c..48be3b82581 100644
--- a/code/datums/greyscale/json_configs/items/cleric_mace_righthand_gold.json
+++ b/code/datums/greyscale/json_configs/items/cleric_mace_righthand_gold.json
@@ -1,24 +1,28 @@
{
- "default": [
- {
- "type": "reference",
- "reference_type": "/datum/greyscale_config/cleric_mace_righthand",
- "icon_state": "default",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- },
+ "default":
+ {
+ "layers":
[
{
"type": "reference",
- "reference_type": "/datum/greyscale_config/shimmer",
+ "reference_type": "/datum/greyscale_config/cleric_mace_righthand",
+ "icon_state": "default",
"blend_mode": "overlay",
- "color_ids": [ "#ffffff" ]
+ "color_ids": [1]
},
- {
- "type": "icon_state",
- "icon_state": "shimmer_mask_righthand",
- "blend_mode": "multiply"
- }
+ [
+ {
+ "type": "reference",
+ "reference_type": "/datum/greyscale_config/shimmer",
+ "blend_mode": "overlay",
+ "color_ids": ["#ffffff"]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "shimmer_mask_righthand",
+ "blend_mode": "multiply"
+ }
+ ]
]
- ]
+ }
}
diff --git a/code/datums/greyscale/json_configs/items/cleric_mace_worn.json b/code/datums/greyscale/json_configs/items/cleric_mace_worn.json
index c49a829aa2c..6ef0be472a1 100644
--- a/code/datums/greyscale/json_configs/items/cleric_mace_worn.json
+++ b/code/datums/greyscale/json_configs/items/cleric_mace_worn.json
@@ -1,15 +1,19 @@
{
- "default": [
- {
- "type": "icon_state",
- "icon_state": "worn_shaft",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- },
- {
- "type": "icon_state",
- "icon_state": "worn_handle",
- "blend_mode": "overlay"
- }
- ]
+ "belt_human_default_worn":
+ {
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "worn_shaft",
+ "blend_mode": "overlay",
+ "color_ids": [ 1 ]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "worn_handle",
+ "blend_mode": "overlay"
+ }
+ ]
+ }
}
diff --git a/code/datums/greyscale/json_configs/items/cleric_mace_worn_gold.json b/code/datums/greyscale/json_configs/items/cleric_mace_worn_gold.json
index 21850436657..3abc633055e 100644
--- a/code/datums/greyscale/json_configs/items/cleric_mace_worn_gold.json
+++ b/code/datums/greyscale/json_configs/items/cleric_mace_worn_gold.json
@@ -1,24 +1,27 @@
{
- "default": [
- {
- "type": "reference",
- "reference_type": "/datum/greyscale_config/cleric_mace_worn",
- "icon_state": "default",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- },
+ "default":
+ {
+ "layers":
[
{
"type": "reference",
- "reference_type": "/datum/greyscale_config/shimmer",
+ "reference_type": "/datum/greyscale_config/cleric_mace_worn",
"blend_mode": "overlay",
- "color_ids": [ "#ffffff" ]
+ "color_ids": [ 1 ]
},
- {
- "type": "icon_state",
- "icon_state": "shimmer_mask_worn",
- "blend_mode": "multiply"
- }
+ [
+ {
+ "type": "reference",
+ "reference_type": "/datum/greyscale_config/shimmer",
+ "blend_mode": "overlay",
+ "color_ids": ["#ffffff"]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "shimmer_mask_worn",
+ "blend_mode": "multiply"
+ }
+ ]
]
- ]
+ }
}
diff --git a/code/datums/greyscale/json_configs/janicart_upgrade.json b/code/datums/greyscale/json_configs/janicart_upgrade.json
index 7269059b3bc..9f2c14ac7d1 100644
--- a/code/datums/greyscale/json_configs/janicart_upgrade.json
+++ b/code/datums/greyscale/json_configs/janicart_upgrade.json
@@ -1,28 +1,32 @@
{
- "janicart_upgrade": [
- {
- "type": "icon_state",
- "icon_state": "housing",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- },
- {
- "type": "icon_state",
- "icon_state": "bristles",
- "blend_mode": "overlay",
- "color_ids": [ 2 ]
- },
- {
- "type": "icon_state",
- "icon_state": "accent",
- "blend_mode": "overlay",
- "color_ids": [ 3 ]
- },
- {
- "type": "icon_state",
- "icon_state": "light",
- "blend_mode": "overlay",
- "color_ids": [ 4 ]
- }
- ]
+ "janicart_upgrade":
+ {
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "housing",
+ "blend_mode": "overlay",
+ "color_ids": [ 1 ]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "bristles",
+ "blend_mode": "overlay",
+ "color_ids": [ 2 ]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "accent",
+ "blend_mode": "overlay",
+ "color_ids": [ 3 ]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "light",
+ "blend_mode": "overlay",
+ "color_ids": [ 4 ]
+ }
+ ]
+ }
}
diff --git a/code/datums/greyscale/json_configs/janicart_upgrade_installed.json b/code/datums/greyscale/json_configs/janicart_upgrade_installed.json
index c586c92709c..5c513e7e68b 100644
--- a/code/datums/greyscale/json_configs/janicart_upgrade_installed.json
+++ b/code/datums/greyscale/json_configs/janicart_upgrade_installed.json
@@ -1,28 +1,32 @@
{
- "janicart_upgrade": [
- {
- "type": "icon_state",
- "icon_state": "cart_housing",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- },
- {
- "type": "icon_state",
- "icon_state": "cart_bristles",
- "blend_mode": "overlay",
- "color_ids": [ 2 ]
- },
- {
- "type": "icon_state",
- "icon_state": "cart_accent",
- "blend_mode": "overlay",
- "color_ids": [ 3 ]
- },
- {
- "type": "icon_state",
- "icon_state": "cart_light",
- "blend_mode": "overlay",
- "color_ids": [ 4 ]
- }
- ]
+ "janicart_upgrade":
+ {
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "cart_housing",
+ "blend_mode": "overlay",
+ "color_ids": [ 1 ]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "cart_bristles",
+ "blend_mode": "overlay",
+ "color_ids": [ 2 ]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "cart_accent",
+ "blend_mode": "overlay",
+ "color_ids": [ 3 ]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "cart_light",
+ "blend_mode": "overlay",
+ "color_ids": [ 4 ]
+ }
+ ]
+ }
}
diff --git a/code/datums/greyscale/json_configs/jumpsuit.json b/code/datums/greyscale/json_configs/jumpsuit.json
index 03044770b95..73634a73fbd 100644
--- a/code/datums/greyscale/json_configs/jumpsuit.json
+++ b/code/datums/greyscale/json_configs/jumpsuit.json
@@ -1,28 +1,36 @@
{
- "jumpsuit": [
- {
- "type": "icon_state",
- "icon_state": "jumpsuit",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- },
- {
- "type": "icon_state",
- "icon_state": "jumpsuit_accessories",
- "blend_mode": "overlay"
- }
- ],
- "jumpskirt": [
- {
- "type": "icon_state",
- "icon_state": "jumpskirt",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- },
- {
- "type": "icon_state",
- "icon_state": "jumpsuit_accessories",
- "blend_mode": "overlay"
- }
- ]
+ "jumpsuit":
+ {
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "jumpsuit",
+ "blend_mode": "overlay",
+ "color_ids": [ 1 ]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "jumpsuit_accessories",
+ "blend_mode": "overlay"
+ }
+ ]
+ },
+ "jumpskirt":
+ {
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "jumpskirt",
+ "blend_mode": "overlay",
+ "color_ids": [ 1 ]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "jumpsuit_accessories",
+ "blend_mode": "overlay"
+ }
+ ]
+ }
}
diff --git a/code/datums/greyscale/json_configs/jumpsuit_inhand.json b/code/datums/greyscale/json_configs/jumpsuit_inhand.json
index 754620651b9..af10692f4de 100644
--- a/code/datums/greyscale/json_configs/jumpsuit_inhand.json
+++ b/code/datums/greyscale/json_configs/jumpsuit_inhand.json
@@ -1,15 +1,19 @@
{
- "jumpsuit": [
- {
- "type": "icon_state",
- "icon_state": "jumpsuit",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- },
- {
- "type": "icon_state",
- "icon_state": "jumpsuit_accessories",
- "blend_mode": "overlay"
- }
- ]
+ "jumpsuit":
+ {
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "jumpsuit",
+ "blend_mode": "overlay",
+ "color_ids": [ 1 ]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "jumpsuit_accessories",
+ "blend_mode": "overlay"
+ }
+ ]
+ }
}
diff --git a/code/datums/greyscale/json_configs/jumpsuit_prison.json b/code/datums/greyscale/json_configs/jumpsuit_prison.json
index 1ac85b764bf..43e1e1bd3bb 100644
--- a/code/datums/greyscale/json_configs/jumpsuit_prison.json
+++ b/code/datums/greyscale/json_configs/jumpsuit_prison.json
@@ -1,28 +1,36 @@
{
- "jumpsuit": [
- {
- "type": "icon_state",
- "icon_state": "jumpsuit",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- },
- {
- "type": "icon_state",
- "icon_state": "jumpsuit_prison",
- "blend_mode": "overlay"
- }
- ],
- "jumpskirt": [
- {
- "type": "icon_state",
- "icon_state": "jumpskirt",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- },
- {
- "type": "icon_state",
- "icon_state": "jumpsuit_prison",
- "blend_mode": "overlay"
- }
- ]
+ "jumpsuit":
+ {
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "jumpsuit",
+ "blend_mode": "overlay",
+ "color_ids": [ 1 ]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "jumpsuit_prison",
+ "blend_mode": "overlay"
+ }
+ ]
+ },
+ "jumpskirt":
+ {
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "jumpskirt",
+ "blend_mode": "overlay",
+ "color_ids": [ 1 ]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "jumpsuit_prison",
+ "blend_mode": "overlay"
+ }
+ ]
+ }
}
diff --git a/code/datums/greyscale/json_configs/jumpsuit_prison_inhand.json b/code/datums/greyscale/json_configs/jumpsuit_prison_inhand.json
index be537b5a00a..0cf437eba8c 100644
--- a/code/datums/greyscale/json_configs/jumpsuit_prison_inhand.json
+++ b/code/datums/greyscale/json_configs/jumpsuit_prison_inhand.json
@@ -1,15 +1,19 @@
{
- "jumpsuit": [
- {
- "type": "icon_state",
- "icon_state": "jumpsuit",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- },
- {
- "type": "icon_state",
- "icon_state": "jumpsuit_prison",
- "blend_mode": "overlay"
- }
- ]
+ "jumpsuit":
+ {
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "jumpsuit",
+ "blend_mode": "overlay",
+ "color_ids": [ 1 ]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "jumpsuit_prison",
+ "blend_mode": "overlay"
+ }
+ ]
+ }
}
diff --git a/code/datums/greyscale/json_configs/jumpsuit_prison_worn.json b/code/datums/greyscale/json_configs/jumpsuit_prison_worn.json
index 0096c95e812..1edf964b8b2 100644
--- a/code/datums/greyscale/json_configs/jumpsuit_prison_worn.json
+++ b/code/datums/greyscale/json_configs/jumpsuit_prison_worn.json
@@ -1,54 +1,70 @@
{
- "jumpsuit": [
- {
- "type": "icon_state",
- "icon_state": "jumpsuit",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- },
- {
- "type": "icon_state",
- "icon_state": "jumpsuit_prison",
- "blend_mode": "overlay"
- }
- ],
- "jumpsuit_d" : [
- {
- "type": "icon_state",
- "icon_state": "jumpsuit_d",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- },
- {
- "type": "icon_state",
- "icon_state": "jumpsuit_d_prison",
- "blend_mode": "overlay"
- }
- ],
- "jumpskirt": [
- {
- "type": "icon_state",
- "icon_state": "jumpskirt",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- },
- {
- "type": "icon_state",
- "icon_state": "jumpskirt_prison",
- "blend_mode": "overlay"
- }
- ],
- "jumpskirt_d" : [
- {
- "type": "icon_state",
- "icon_state": "jumpskirt_d",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- },
- {
- "type": "icon_state",
- "icon_state": "jumpskirt_d_prison",
- "blend_mode": "overlay"
- }
- ]
+ "jumpsuit":
+ {
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "jumpsuit",
+ "blend_mode": "overlay",
+ "color_ids": [ 1 ]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "jumpsuit_prison",
+ "blend_mode": "overlay"
+ }
+ ]
+ },
+ "jumpsuit_d":
+ {
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "jumpsuit_d",
+ "blend_mode": "overlay",
+ "color_ids": [ 1 ]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "jumpsuit_d_prison",
+ "blend_mode": "overlay"
+ }
+ ]
+ },
+ "jumpskirt":
+ {
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "jumpskirt",
+ "blend_mode": "overlay",
+ "color_ids": [ 1 ]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "jumpskirt_prison",
+ "blend_mode": "overlay"
+ }
+ ]
+ },
+ "jumpskirt_d":
+ {
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "jumpskirt_d",
+ "blend_mode": "overlay",
+ "color_ids": [ 1 ]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "jumpskirt_d_prison",
+ "blend_mode": "overlay"
+ }
+ ]
+ }
}
diff --git a/code/datums/greyscale/json_configs/jumpsuit_worn.json b/code/datums/greyscale/json_configs/jumpsuit_worn.json
index b2e81aa1b15..cae3f2409e7 100644
--- a/code/datums/greyscale/json_configs/jumpsuit_worn.json
+++ b/code/datums/greyscale/json_configs/jumpsuit_worn.json
@@ -1,44 +1,60 @@
{
- "jumpsuit": [
- {
- "type": "icon_state",
- "icon_state": "jumpsuit",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- },
- {
- "type": "icon_state",
- "icon_state": "jumpsuit_accessories",
- "blend_mode": "overlay"
- }
- ],
- "jumpsuit_d" : [
- {
- "type": "icon_state",
- "icon_state": "jumpsuit_d",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- }
- ],
- "jumpskirt": [
- {
- "type": "icon_state",
- "icon_state": "jumpskirt",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- },
- {
- "type": "icon_state",
- "icon_state": "jumpskirt_accessories",
- "blend_mode": "overlay"
- }
- ],
- "jumpskirt_d" : [
- {
- "type": "icon_state",
- "icon_state": "jumpskirt_d",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- }
- ]
+ "jumpsuit":
+ {
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "jumpsuit",
+ "blend_mode": "overlay",
+ "color_ids": [ 1 ]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "jumpsuit_accessories",
+ "blend_mode": "overlay"
+ }
+ ]
+ },
+ "jumpsuit_d":
+ {
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "jumpsuit_d",
+ "blend_mode": "overlay",
+ "color_ids": [ 1 ]
+ }
+ ]
+ },
+ "jumpskirt":
+ {
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "jumpskirt",
+ "blend_mode": "overlay",
+ "color_ids": [ 1 ]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "jumpskirt_accessories",
+ "blend_mode": "overlay"
+ }
+ ]
+ },
+ "jumpskirt_d":
+ {
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "jumpskirt_d",
+ "blend_mode": "overlay",
+ "color_ids": [ 1 ]
+ }
+ ]
+ }
}
diff --git a/code/datums/greyscale/json_configs/material_effects/shimmer.json b/code/datums/greyscale/json_configs/material_effects/shimmer.json
index 64e2168e5c2..f2773cd501c 100644
--- a/code/datums/greyscale/json_configs/material_effects/shimmer.json
+++ b/code/datums/greyscale/json_configs/material_effects/shimmer.json
@@ -1,10 +1,14 @@
{
- "": [
- {
- "type": "icon_state",
- "icon_state": "animation",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- }
- ]
+ "":
+ {
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "animation",
+ "blend_mode": "overlay",
+ "color_ids": [ 1 ]
+ }
+ ]
+ }
}
diff --git a/code/datums/greyscale/json_configs/meter.json b/code/datums/greyscale/json_configs/meter.json
index 73cfb739959..1e3dd3bdca9 100644
--- a/code/datums/greyscale/json_configs/meter.json
+++ b/code/datums/greyscale/json_configs/meter.json
@@ -1,374 +1,458 @@
{
- "meter": [
- {
- "type": "icon_state",
- "icon_state": "pressure_off",
- "blend_mode": "overlay"
- },
- {
- "type": "icon_state",
- "icon_state": "meter_base",
- "blend_mode": "overlay"
- }
- ],
- "meter0": [
- {
- "type": "icon_state",
- "icon_state": "pressure0",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- },
- {
- "type": "icon_state",
- "icon_state": "meter_base",
- "blend_mode": "overlay"
- },
- {
- "type": "icon_state",
- "icon_state": "buttons0",
- "blend_mode": "overlay"
- }
- ],
- "meter1_1": [
- {
- "type": "icon_state",
- "icon_state": "pressure1_1",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- },
- {
- "type": "icon_state",
- "icon_state": "meter_base",
- "blend_mode": "overlay"
- },
- {
- "type": "icon_state",
- "icon_state": "buttons1",
- "blend_mode": "overlay"
- }
- ],
- "meter1_2": [
- {
- "type": "icon_state",
- "icon_state": "pressure1_2",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- },
- {
- "type": "icon_state",
- "icon_state": "meter_base",
- "blend_mode": "overlay"
- },
- {
- "type": "icon_state",
- "icon_state": "buttons1",
- "blend_mode": "overlay"
- }
- ],
- "meter1_3": [
- {
- "type": "icon_state",
- "icon_state": "pressure1_3",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- },
- {
- "type": "icon_state",
- "icon_state": "meter_base",
- "blend_mode": "overlay"
- },
- {
- "type": "icon_state",
- "icon_state": "buttons1",
- "blend_mode": "overlay"
- }
- ],
- "meter1_4": [
- {
- "type": "icon_state",
- "icon_state": "pressure1_4",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- },
- {
- "type": "icon_state",
- "icon_state": "meter_base",
- "blend_mode": "overlay"
- },
- {
- "type": "icon_state",
- "icon_state": "buttons1",
- "blend_mode": "overlay"
- }
- ],
- "meter1_5": [
- {
- "type": "icon_state",
- "icon_state": "pressure1_5",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- },
- {
- "type": "icon_state",
- "icon_state": "meter_base",
- "blend_mode": "overlay"
- },
- {
- "type": "icon_state",
- "icon_state": "buttons1",
- "blend_mode": "overlay"
- }
- ],
- "meter1_6": [
- {
- "type": "icon_state",
- "icon_state": "pressure1_6",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- },
- {
- "type": "icon_state",
- "icon_state": "meter_base",
- "blend_mode": "overlay"
- },
- {
- "type": "icon_state",
- "icon_state": "buttons1",
- "blend_mode": "overlay"
- }
- ],
- "meter2_1": [
- {
- "type": "icon_state",
- "icon_state": "pressure2_1",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- },
- {
- "type": "icon_state",
- "icon_state": "meter_base",
- "blend_mode": "overlay"
- },
- {
- "type": "icon_state",
- "icon_state": "buttons2",
- "blend_mode": "overlay"
- }
- ],
- "meter2_2": [
- {
- "type": "icon_state",
- "icon_state": "pressure2_2",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- },
- {
- "type": "icon_state",
- "icon_state": "meter_base",
- "blend_mode": "overlay"
- },
- {
- "type": "icon_state",
- "icon_state": "buttons2",
- "blend_mode": "overlay"
- }
- ],
- "meter2_3": [
- {
- "type": "icon_state",
- "icon_state": "pressure2_3",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- },
- {
- "type": "icon_state",
- "icon_state": "meter_base",
- "blend_mode": "overlay"
- },
- {
- "type": "icon_state",
- "icon_state": "buttons2",
- "blend_mode": "overlay"
- }
- ],
- "meter2_4": [
- {
- "type": "icon_state",
- "icon_state": "pressure2_4",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- },
- {
- "type": "icon_state",
- "icon_state": "meter_base",
- "blend_mode": "overlay"
- },
- {
- "type": "icon_state",
- "icon_state": "buttons2",
- "blend_mode": "overlay"
- }
- ],
- "meter2_5": [
- {
- "type": "icon_state",
- "icon_state": "pressure2_5",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- },
- {
- "type": "icon_state",
- "icon_state": "meter_base",
- "blend_mode": "overlay"
- },
- {
- "type": "icon_state",
- "icon_state": "buttons2",
- "blend_mode": "overlay"
- }
- ],
- "meter2_6": [
- {
- "type": "icon_state",
- "icon_state": "pressure2_6",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- },
- {
- "type": "icon_state",
- "icon_state": "meter_base",
- "blend_mode": "overlay"
- },
- {
- "type": "icon_state",
- "icon_state": "buttons2",
- "blend_mode": "overlay"
- }
- ],
- "meter3_1": [
- {
- "type": "icon_state",
- "icon_state": "pressure3_1",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- },
- {
- "type": "icon_state",
- "icon_state": "meter_base",
- "blend_mode": "overlay"
- },
- {
- "type": "icon_state",
- "icon_state": "buttons3",
- "blend_mode": "overlay"
- }
- ],
- "meter3_2": [
- {
- "type": "icon_state",
- "icon_state": "pressure3_2",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- },
- {
- "type": "icon_state",
- "icon_state": "meter_base",
- "blend_mode": "overlay"
- },
- {
- "type": "icon_state",
- "icon_state": "buttons3",
- "blend_mode": "overlay"
- }
- ],
- "meter3_3": [
- {
- "type": "icon_state",
- "icon_state": "pressure3_3",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- },
- {
- "type": "icon_state",
- "icon_state": "meter_base",
- "blend_mode": "overlay"
- },
- {
- "type": "icon_state",
- "icon_state": "buttons3",
- "blend_mode": "overlay"
- }
- ],
- "meter3_4": [
- {
- "type": "icon_state",
- "icon_state": "pressure3_4",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- },
- {
- "type": "icon_state",
- "icon_state": "meter_base",
- "blend_mode": "overlay"
- },
- {
- "type": "icon_state",
- "icon_state": "buttons3",
- "blend_mode": "overlay"
- }
- ],
- "meter3_5": [
- {
- "type": "icon_state",
- "icon_state": "pressure3_5",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- },
- {
- "type": "icon_state",
- "icon_state": "meter_base",
- "blend_mode": "overlay"
- },
- {
- "type": "icon_state",
- "icon_state": "buttons3",
- "blend_mode": "overlay"
- }
- ],
- "meter3_6": [
- {
- "type": "icon_state",
- "icon_state": "pressure3_6",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- },
- {
- "type": "icon_state",
- "icon_state": "meter_base",
- "blend_mode": "overlay"
- },
- {
- "type": "icon_state",
- "icon_state": "buttons3",
- "blend_mode": "overlay"
- }
- ],
- "meter4": [
- {
- "type": "icon_state",
- "icon_state": "pressure4",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- },
- {
- "type": "icon_state",
- "icon_state": "meter_base",
- "blend_mode": "overlay"
- },
- {
- "type": "icon_state",
- "icon_state": "buttons4",
- "blend_mode": "overlay"
- }
- ]
+ "meter":
+ {
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "pressure_off",
+ "blend_mode": "overlay"
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "meter_base",
+ "blend_mode": "overlay"
+ }
+ ]
+ },
+ "meter0":
+ {
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "pressure0",
+ "blend_mode": "overlay",
+ "color_ids": [ 1 ]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "meter_base",
+ "blend_mode": "overlay"
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "buttons0",
+ "blend_mode": "overlay"
+ }
+ ]
+ },
+ "meter1_1":
+ {
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "pressure1_1",
+ "blend_mode": "overlay",
+ "color_ids": [ 1 ]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "meter_base",
+ "blend_mode": "overlay"
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "buttons1",
+ "blend_mode": "overlay"
+ }
+ ]
+ },
+ "meter1_2":
+ {
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "pressure1_2",
+ "blend_mode": "overlay",
+ "color_ids": [ 1 ]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "meter_base",
+ "blend_mode": "overlay"
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "buttons1",
+ "blend_mode": "overlay"
+ }
+ ]
+ },
+ "meter1_3":
+ {
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "pressure1_3",
+ "blend_mode": "overlay",
+ "color_ids": [ 1 ]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "meter_base",
+ "blend_mode": "overlay"
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "buttons1",
+ "blend_mode": "overlay"
+ }
+ ]
+ },
+ "meter1_4":
+ {
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "pressure1_4",
+ "blend_mode": "overlay",
+ "color_ids": [ 1 ]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "meter_base",
+ "blend_mode": "overlay"
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "buttons1",
+ "blend_mode": "overlay"
+ }
+ ]
+ },
+ "meter1_5":
+ {
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "pressure1_5",
+ "blend_mode": "overlay",
+ "color_ids": [ 1 ]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "meter_base",
+ "blend_mode": "overlay"
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "buttons1",
+ "blend_mode": "overlay"
+ }
+ ]
+ },
+ "meter1_6":
+ {
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "pressure1_6",
+ "blend_mode": "overlay",
+ "color_ids": [ 1 ]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "meter_base",
+ "blend_mode": "overlay"
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "buttons1",
+ "blend_mode": "overlay"
+ }
+ ]
+ },
+ "meter2_1":
+ {
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "pressure2_1",
+ "blend_mode": "overlay",
+ "color_ids": [ 1 ]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "meter_base",
+ "blend_mode": "overlay"
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "buttons2",
+ "blend_mode": "overlay"
+ }
+ ]
+ },
+ "meter2_2":
+ {
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "pressure2_2",
+ "blend_mode": "overlay",
+ "color_ids": [ 1 ]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "meter_base",
+ "blend_mode": "overlay"
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "buttons2",
+ "blend_mode": "overlay"
+ }
+ ]
+ },
+ "meter2_3":
+ {
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "pressure2_3",
+ "blend_mode": "overlay",
+ "color_ids": [ 1 ]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "meter_base",
+ "blend_mode": "overlay"
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "buttons2",
+ "blend_mode": "overlay"
+ }
+ ]
+ },
+ "meter2_4":
+ {
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "pressure2_4",
+ "blend_mode": "overlay",
+ "color_ids": [ 1 ]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "meter_base",
+ "blend_mode": "overlay"
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "buttons2",
+ "blend_mode": "overlay"
+ }
+ ]
+ },
+ "meter2_5":
+ {
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "pressure2_5",
+ "blend_mode": "overlay",
+ "color_ids": [ 1 ]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "meter_base",
+ "blend_mode": "overlay"
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "buttons2",
+ "blend_mode": "overlay"
+ }
+ ]
+ },
+ "meter2_6":
+ {
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "pressure2_6",
+ "blend_mode": "overlay",
+ "color_ids": [ 1 ]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "meter_base",
+ "blend_mode": "overlay"
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "buttons2",
+ "blend_mode": "overlay"
+ }
+ ]
+ },
+ "meter3_1":
+ {
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "pressure3_1",
+ "blend_mode": "overlay",
+ "color_ids": [ 1 ]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "meter_base",
+ "blend_mode": "overlay"
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "buttons3",
+ "blend_mode": "overlay"
+ }
+ ]
+ },
+ "meter3_2":
+ {
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "pressure3_2",
+ "blend_mode": "overlay",
+ "color_ids": [ 1 ]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "meter_base",
+ "blend_mode": "overlay"
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "buttons3",
+ "blend_mode": "overlay"
+ }
+ ]
+ },
+ "meter3_3":
+ {
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "pressure3_3",
+ "blend_mode": "overlay",
+ "color_ids": [ 1 ]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "meter_base",
+ "blend_mode": "overlay"
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "buttons3",
+ "blend_mode": "overlay"
+ }
+ ]
+ },
+ "meter3_4":
+ {
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "pressure3_4",
+ "blend_mode": "overlay",
+ "color_ids": [ 1 ]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "meter_base",
+ "blend_mode": "overlay"
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "buttons3",
+ "blend_mode": "overlay"
+ }
+ ]
+ },
+ "meter3_5":
+ {
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "pressure3_5",
+ "blend_mode": "overlay",
+ "color_ids": [ 1 ]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "meter_base",
+ "blend_mode": "overlay"
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "buttons3",
+ "blend_mode": "overlay"
+ }
+ ]
+ },
+ "meter3_6":
+ {
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "pressure3_6",
+ "blend_mode": "overlay",
+ "color_ids": [ 1 ]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "meter_base",
+ "blend_mode": "overlay"
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "buttons3",
+ "blend_mode": "overlay"
+ }
+ ]
+ },
+ "meter4":
+ {
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "pressure4",
+ "blend_mode": "overlay",
+ "color_ids": [ 1 ]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "meter_base",
+ "blend_mode": "overlay"
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "buttons4",
+ "blend_mode": "overlay"
+ }
+ ]
+ }
}
diff --git a/code/datums/greyscale/json_configs/moth_coat.json b/code/datums/greyscale/json_configs/moth_coat.json
index 84cdfb4821e..4418014be3c 100644
--- a/code/datums/greyscale/json_configs/moth_coat.json
+++ b/code/datums/greyscale/json_configs/moth_coat.json
@@ -1,15 +1,19 @@
{
- "mothcoat": [
- {
- "type": "icon_state",
- "icon_state": "mothcoat",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- },
- {
- "type": "icon_state",
- "icon_state": "mothcoat_details",
- "blend_mode": "overlay"
- }
- ]
+ "mothcoat":
+ {
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "mothcoat",
+ "blend_mode": "overlay",
+ "color_ids": [ 1 ]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "mothcoat_details",
+ "blend_mode": "overlay"
+ }
+ ]
+ }
}
diff --git a/code/datums/greyscale/json_configs/moth_coat_winter.json b/code/datums/greyscale/json_configs/moth_coat_winter.json
index 6c8c36615e3..836e6da9656 100644
--- a/code/datums/greyscale/json_configs/moth_coat_winter.json
+++ b/code/datums/greyscale/json_configs/moth_coat_winter.json
@@ -1,21 +1,25 @@
{
- "mothcoat_winter": [
- {
- "type": "icon_state",
- "icon_state": "mothcoat_mantle_top",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- },
- {
- "type": "icon_state",
- "icon_state": "mothcoat_mantle_bottom",
- "blend_mode": "overlay",
- "color_ids": [ 2 ]
- },
- {
- "type": "icon_state",
- "icon_state": "mothcoat_mantle_details",
- "blend_mode": "overlay"
- }
- ]
+ "mothcoat_winter":
+ {
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "mothcoat_mantle_top",
+ "blend_mode": "overlay",
+ "color_ids": [ 1 ]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "mothcoat_mantle_bottom",
+ "blend_mode": "overlay",
+ "color_ids": [ 2 ]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "mothcoat_mantle_details",
+ "blend_mode": "overlay"
+ }
+ ]
+ }
}
diff --git a/code/datums/greyscale/json_configs/moth_coat_winter_worn.json b/code/datums/greyscale/json_configs/moth_coat_winter_worn.json
index 04dce626ce2..ea9505fc056 100644
--- a/code/datums/greyscale/json_configs/moth_coat_winter_worn.json
+++ b/code/datums/greyscale/json_configs/moth_coat_winter_worn.json
@@ -1,21 +1,25 @@
{
- "mothcoat_winter": [
- {
- "type": "icon_state",
- "icon_state": "mothcoat_mantle_top_worn",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- },
- {
- "type": "icon_state",
- "icon_state": "mothcoat_mantle_bottom_worn",
- "blend_mode": "overlay",
- "color_ids": [ 2 ]
- },
- {
- "type": "icon_state",
- "icon_state": "mothcoat_mantle_details_worn",
- "blend_mode": "overlay"
- }
- ]
+ "mothcoat_winter":
+ {
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "mothcoat_mantle_top_worn",
+ "blend_mode": "overlay",
+ "color_ids": [ 1 ]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "mothcoat_mantle_bottom_worn",
+ "blend_mode": "overlay",
+ "color_ids": [ 2 ]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "mothcoat_mantle_details_worn",
+ "blend_mode": "overlay"
+ }
+ ]
+ }
}
diff --git a/code/datums/greyscale/json_configs/moth_coat_worn.json b/code/datums/greyscale/json_configs/moth_coat_worn.json
index c04046f7f86..fa657a6e254 100644
--- a/code/datums/greyscale/json_configs/moth_coat_worn.json
+++ b/code/datums/greyscale/json_configs/moth_coat_worn.json
@@ -1,15 +1,19 @@
{
- "mothcoat": [
- {
- "type": "icon_state",
- "icon_state": "mothcoat_worn",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- },
- {
- "type": "icon_state",
- "icon_state": "mothcoat_details_worn",
- "blend_mode": "overlay"
- }
- ]
+ "mothcoat":
+ {
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "mothcoat_worn",
+ "blend_mode": "overlay",
+ "color_ids": [ 1 ]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "mothcoat_details_worn",
+ "blend_mode": "overlay"
+ }
+ ]
+ }
}
diff --git a/code/datums/greyscale/json_configs/pda.json b/code/datums/greyscale/json_configs/pda.json
index c10b453817a..77cb8f683ee 100644
--- a/code/datums/greyscale/json_configs/pda.json
+++ b/code/datums/greyscale/json_configs/pda.json
@@ -1,21 +1,25 @@
{
- "pda": [
- {
- "type": "icon_state",
- "icon_state": "pda_base",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- },
- {
- "type": "icon_state",
- "icon_state": "pda_buttons",
- "blend_mode": "overlay",
- "color_ids": [ 2 ]
- },
- {
- "type": "icon_state",
- "icon_state": "pda_screen_borders",
- "blend_mode": "overlay"
- }
- ]
+ "pda":
+ {
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "pda_base",
+ "blend_mode": "overlay",
+ "color_ids": [ 1 ]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "pda_buttons",
+ "blend_mode": "overlay",
+ "color_ids": [ 2 ]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "pda_screen_borders",
+ "blend_mode": "overlay"
+ }
+ ]
+ }
}
diff --git a/code/datums/greyscale/json_configs/pda_captain.json b/code/datums/greyscale/json_configs/pda_captain.json
index 52d3f9d1333..c5e36c1e546 100644
--- a/code/datums/greyscale/json_configs/pda_captain.json
+++ b/code/datums/greyscale/json_configs/pda_captain.json
@@ -1,33 +1,37 @@
{
- "pda": [
- {
- "type": "icon_state",
- "icon_state": "pda_base",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- },
- {
- "type": "icon_state",
- "icon_state": "pda_buttons",
- "blend_mode": "overlay",
- "color_ids": [ 2 ]
- },
- {
- "type": "icon_state",
- "icon_state": "pda_stripe_split",
- "blend_mode": "overlay",
- "color_ids": [ 3 ]
- },
- {
- "type": "icon_state",
- "icon_state": "pda_stripe_thick",
- "blend_mode": "overlay",
- "color_ids": [ 4 ]
- },
- {
- "type": "icon_state",
- "icon_state": "pda_screen_borders",
- "blend_mode": "overlay"
- }
- ]
+ "pda":
+ {
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "pda_base",
+ "blend_mode": "overlay",
+ "color_ids": [ 1 ]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "pda_buttons",
+ "blend_mode": "overlay",
+ "color_ids": [ 2 ]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "pda_stripe_split",
+ "blend_mode": "overlay",
+ "color_ids": [ 3 ]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "pda_stripe_thick",
+ "blend_mode": "overlay",
+ "color_ids": [ 4 ]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "pda_screen_borders",
+ "blend_mode": "overlay"
+ }
+ ]
+ }
}
diff --git a/code/datums/greyscale/json_configs/pda_chaplain.json b/code/datums/greyscale/json_configs/pda_chaplain.json
index e4e351e339d..cd6593a4ac0 100644
--- a/code/datums/greyscale/json_configs/pda_chaplain.json
+++ b/code/datums/greyscale/json_configs/pda_chaplain.json
@@ -1,26 +1,30 @@
{
- "pda": [
- {
- "type": "icon_state",
- "icon_state": "pda_base",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- },
- {
- "type": "icon_state",
- "icon_state": "pda_buttons",
- "blend_mode": "overlay",
- "color_ids": [ 2 ]
- },
- {
- "type": "icon_state",
- "icon_state": "pda_cross",
- "blend_mode": "overlay"
- },
- {
- "type": "icon_state",
- "icon_state": "pda_screen_borders",
- "blend_mode": "overlay"
- }
- ]
+ "pda":
+ {
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "pda_base",
+ "blend_mode": "overlay",
+ "color_ids": [ 1 ]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "pda_buttons",
+ "blend_mode": "overlay",
+ "color_ids": [ 2 ]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "pda_cross",
+ "blend_mode": "overlay"
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "pda_screen_borders",
+ "blend_mode": "overlay"
+ }
+ ]
+ }
}
diff --git a/code/datums/greyscale/json_configs/pda_clown.json b/code/datums/greyscale/json_configs/pda_clown.json
index e9be8922369..41f691c68ce 100644
--- a/code/datums/greyscale/json_configs/pda_clown.json
+++ b/code/datums/greyscale/json_configs/pda_clown.json
@@ -1,9 +1,13 @@
{
- "pda": [
- {
- "type": "icon_state",
- "icon_state": "pda-clown",
- "blend_mode": "overlay"
- }
- ]
+ "pda":
+ {
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "pda-clown",
+ "blend_mode": "overlay"
+ }
+ ]
+ }
}
diff --git a/code/datums/greyscale/json_configs/pda_head.json b/code/datums/greyscale/json_configs/pda_head.json
index c9f56870373..1095eb7e60c 100644
--- a/code/datums/greyscale/json_configs/pda_head.json
+++ b/code/datums/greyscale/json_configs/pda_head.json
@@ -1,26 +1,30 @@
{
- "pda": [
- {
- "type": "icon_state",
- "icon_state": "pda_base",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- },
- {
- "type": "icon_state",
- "icon_state": "pda_buttons",
- "blend_mode": "overlay",
- "color_ids": [ 2 ]
- },
- {
- "type": "icon_state",
- "icon_state": "pda_stripe_head",
- "blend_mode": "overlay"
- },
- {
- "type": "icon_state",
- "icon_state": "pda_screen_borders",
- "blend_mode": "overlay"
- }
- ]
+ "pda":
+ {
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "pda_base",
+ "blend_mode": "overlay",
+ "color_ids": [ 1 ]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "pda_buttons",
+ "blend_mode": "overlay",
+ "color_ids": [ 2 ]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "pda_stripe_head",
+ "blend_mode": "overlay"
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "pda_screen_borders",
+ "blend_mode": "overlay"
+ }
+ ]
+ }
}
diff --git a/code/datums/greyscale/json_configs/pda_mime.json b/code/datums/greyscale/json_configs/pda_mime.json
index dc76e60649b..7f31eaa3818 100644
--- a/code/datums/greyscale/json_configs/pda_mime.json
+++ b/code/datums/greyscale/json_configs/pda_mime.json
@@ -1,26 +1,30 @@
{
- "pda": [
- {
- "type": "icon_state",
- "icon_state": "pda_base",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- },
- {
- "type": "icon_state",
- "icon_state": "pda_stripe_mime",
- "blend_mode": "overlay"
- },
- {
- "type": "icon_state",
- "icon_state": "pda_buttons",
- "blend_mode": "overlay",
- "color_ids": [ 2 ]
- },
- {
- "type": "icon_state",
- "icon_state": "pda_screen_borders",
- "blend_mode": "overlay"
- }
- ]
+ "pda":
+ {
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "pda_base",
+ "blend_mode": "overlay",
+ "color_ids": [ 1 ]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "pda_stripe_mime",
+ "blend_mode": "overlay"
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "pda_buttons",
+ "blend_mode": "overlay",
+ "color_ids": [ 2 ]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "pda_screen_borders",
+ "blend_mode": "overlay"
+ }
+ ]
+ }
}
diff --git a/code/datums/greyscale/json_configs/pda_stripe_split.json b/code/datums/greyscale/json_configs/pda_stripe_split.json
index 82aaaac1031..fa6d3eefeba 100644
--- a/code/datums/greyscale/json_configs/pda_stripe_split.json
+++ b/code/datums/greyscale/json_configs/pda_stripe_split.json
@@ -1,27 +1,31 @@
{
- "pda": [
- {
- "type": "icon_state",
- "icon_state": "pda_base",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- },
- {
- "type": "icon_state",
- "icon_state": "pda_buttons",
- "blend_mode": "overlay",
- "color_ids": [ 2 ]
- },
- {
- "type": "icon_state",
- "icon_state": "pda_stripe_split",
- "blend_mode": "overlay",
- "color_ids": [ 3 ]
- },
- {
- "type": "icon_state",
- "icon_state": "pda_screen_borders",
- "blend_mode": "overlay"
- }
- ]
+ "pda":
+ {
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "pda_base",
+ "blend_mode": "overlay",
+ "color_ids": [ 1 ]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "pda_buttons",
+ "blend_mode": "overlay",
+ "color_ids": [ 2 ]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "pda_stripe_split",
+ "blend_mode": "overlay",
+ "color_ids": [ 3 ]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "pda_screen_borders",
+ "blend_mode": "overlay"
+ }
+ ]
+ }
}
diff --git a/code/datums/greyscale/json_configs/pda_stripe_thick.json b/code/datums/greyscale/json_configs/pda_stripe_thick.json
index cc730f3816a..cfa16375040 100644
--- a/code/datums/greyscale/json_configs/pda_stripe_thick.json
+++ b/code/datums/greyscale/json_configs/pda_stripe_thick.json
@@ -1,27 +1,31 @@
{
- "pda": [
- {
- "type": "icon_state",
- "icon_state": "pda_base",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- },
- {
- "type": "icon_state",
- "icon_state": "pda_buttons",
- "blend_mode": "overlay",
- "color_ids": [ 2 ]
- },
- {
- "type": "icon_state",
- "icon_state": "pda_stripe_thick",
- "blend_mode": "overlay",
- "color_ids": [ 3 ]
- },
- {
- "type": "icon_state",
- "icon_state": "pda_screen_borders",
- "blend_mode": "overlay"
- }
- ]
+ "pda":
+ {
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "pda_base",
+ "blend_mode": "overlay",
+ "color_ids": [ 1 ]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "pda_buttons",
+ "blend_mode": "overlay",
+ "color_ids": [ 2 ]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "pda_stripe_thick",
+ "blend_mode": "overlay",
+ "color_ids": [ 3 ]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "pda_screen_borders",
+ "blend_mode": "overlay"
+ }
+ ]
+ }
}
diff --git a/code/datums/greyscale/json_configs/pda_stripe_thick_head.json b/code/datums/greyscale/json_configs/pda_stripe_thick_head.json
index ea216b2476b..06b34aac7c7 100644
--- a/code/datums/greyscale/json_configs/pda_stripe_thick_head.json
+++ b/code/datums/greyscale/json_configs/pda_stripe_thick_head.json
@@ -1,32 +1,36 @@
{
- "pda": [
- {
- "type": "icon_state",
- "icon_state": "pda_base",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- },
- {
- "type": "icon_state",
- "icon_state": "pda_buttons",
- "blend_mode": "overlay",
- "color_ids": [ 2 ]
- },
- {
- "type": "icon_state",
- "icon_state": "pda_stripe_thick",
- "blend_mode": "overlay",
- "color_ids": [ 3 ]
- },
- {
- "type": "icon_state",
- "icon_state": "pda_stripe_head",
- "blend_mode": "overlay"
- },
- {
- "type": "icon_state",
- "icon_state": "pda_screen_borders",
- "blend_mode": "overlay"
- }
- ]
+ "pda":
+ {
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "pda_base",
+ "blend_mode": "overlay",
+ "color_ids": [ 1 ]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "pda_buttons",
+ "blend_mode": "overlay",
+ "color_ids": [ 2 ]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "pda_stripe_thick",
+ "blend_mode": "overlay",
+ "color_ids": [ 3 ]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "pda_stripe_head",
+ "blend_mode": "overlay"
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "pda_screen_borders",
+ "blend_mode": "overlay"
+ }
+ ]
+ }
}
diff --git a/code/datums/greyscale/json_configs/plushie_lizard.json b/code/datums/greyscale/json_configs/plushie_lizard.json
index 5326beac0b1..01c918ce7b1 100644
--- a/code/datums/greyscale/json_configs/plushie_lizard.json
+++ b/code/datums/greyscale/json_configs/plushie_lizard.json
@@ -1,26 +1,30 @@
{
- "map_plushie_lizard": [
- {
- "type": "icon_state",
- "icon_state": "plushie_lizard_body",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- },
- {
- "type": "icon_state",
- "icon_state": "plushie_lizard_eyes",
- "blend_mode": "overlay",
- "color_ids": [ 2 ]
- },
- {
- "type": "icon_state",
- "icon_state": "plushie_lizard_tongue",
- "blend_mode": "overlay"
- },
- {
- "type": "icon_state",
- "icon_state": "plushie_lizard_pupil",
- "blend_mode": "overlay"
- }
- ]
+ "map_plushie_lizard":
+ {
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "plushie_lizard_body",
+ "blend_mode": "overlay",
+ "color_ids": [ 1 ]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "plushie_lizard_eyes",
+ "blend_mode": "overlay",
+ "color_ids": [ 2 ]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "plushie_lizard_tongue",
+ "blend_mode": "overlay"
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "plushie_lizard_pupil",
+ "blend_mode": "overlay"
+ }
+ ]
+ }
}
diff --git a/code/datums/greyscale/json_configs/screwdriver.json b/code/datums/greyscale/json_configs/screwdriver.json
index 7604eb07465..e5abb8255ab 100644
--- a/code/datums/greyscale/json_configs/screwdriver.json
+++ b/code/datums/greyscale/json_configs/screwdriver.json
@@ -1,15 +1,19 @@
{
- "screwdriver_map": [
- {
- "type": "icon_state",
- "icon_state": "screwdriver",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- },
- {
- "type": "icon_state",
- "icon_state": "screwdriver_screwybits",
- "blend_mode": "overlay"
- }
- ]
+ "screwdriver_map":
+ {
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "screwdriver",
+ "blend_mode": "overlay",
+ "color_ids": [ 1 ]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "screwdriver_screwybits",
+ "blend_mode": "overlay"
+ }
+ ]
+ }
}
diff --git a/code/datums/greyscale/json_configs/screwdriver_worn.json b/code/datums/greyscale/json_configs/screwdriver_worn.json
index 9e63bb6b883..91fe1880d0a 100644
--- a/code/datums/greyscale/json_configs/screwdriver_worn.json
+++ b/code/datums/greyscale/json_configs/screwdriver_worn.json
@@ -1,15 +1,19 @@
{
- "screwdriver": [
- {
- "type": "icon_state",
- "icon_state": "screwdriver",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- },
- {
- "type": "icon_state",
- "icon_state": "screwdriver_head",
- "blend_mode": "overlay"
- }
- ]
+ "screwdriver":
+ {
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "screwdriver",
+ "blend_mode": "overlay",
+ "color_ids": [ 1 ]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "screwdriver_head",
+ "blend_mode": "overlay"
+ }
+ ]
+ }
}
diff --git a/code/datums/greyscale/json_configs/simple_flower.json b/code/datums/greyscale/json_configs/simple_flower.json
index 986615c8f15..09bc0cbd54c 100644
--- a/code/datums/greyscale/json_configs/simple_flower.json
+++ b/code/datums/greyscale/json_configs/simple_flower.json
@@ -1,25 +1,29 @@
{
- "map_flower": [
- {
- "type": "icon_state",
- "icon_state": "flower_petal",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- },
- {
- "type": "icon_state",
- "icon_state": "flower_receptacle",
- "blend_mode": "overlay"
- },
- {
- "type": "icon_state",
- "icon_state": "flower_filament",
- "blend_mode": "overlay"
- },
- {
- "type": "icon_state",
- "icon_state": "flower_anthers",
- "blend_mode": "overlay"
- }
- ]
+ "map_flower":
+ {
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "flower_petal",
+ "blend_mode": "overlay",
+ "color_ids": [ 1 ]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "flower_receptacle",
+ "blend_mode": "overlay"
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "flower_filament",
+ "blend_mode": "overlay"
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "flower_anthers",
+ "blend_mode": "overlay"
+ }
+ ]
+ }
}
diff --git a/code/datums/greyscale/json_configs/simple_flower_worn.json b/code/datums/greyscale/json_configs/simple_flower_worn.json
index 9a43d2cbd98..4b77667fc52 100644
--- a/code/datums/greyscale/json_configs/simple_flower_worn.json
+++ b/code/datums/greyscale/json_configs/simple_flower_worn.json
@@ -1,15 +1,19 @@
{
- "map_flower": [
- {
- "type": "icon_state",
- "icon_state": "flower_petals_worn",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- },
- {
- "type": "icon_state",
- "icon_state": "flower_stem_worn",
- "blend_mode": "overlay"
- }
- ]
+ "map_flower":
+ {
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "flower_petals_worn",
+ "blend_mode": "overlay",
+ "color_ids": [ 1 ]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "flower_stem_worn",
+ "blend_mode": "overlay"
+ }
+ ]
+ }
}
diff --git a/code/datums/greyscale/json_configs/smooth_canister_stationary.json b/code/datums/greyscale/json_configs/smooth_canister_stationary.json
index df01ce1e6d2..9d2d9c311ab 100644
--- a/code/datums/greyscale/json_configs/smooth_canister_stationary.json
+++ b/code/datums/greyscale/json_configs/smooth_canister_stationary.json
@@ -1,186 +1,278 @@
{
- "smooth": [
- {
- "type": "icon_state",
- "icon_state": "smooth",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- }
- ],
- "window-fg": [
- {
- "type": "icon_state",
- "icon_state": "window-fg",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- }
- ],
- "window-bg": [
- {
- "type": "icon_state",
- "icon_state": "window-bg",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- }
- ],
- "1-i": [
- {
- "type": "icon_state",
- "icon_state": "1-i",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- }
- ],
- "2-i": [
- {
- "type": "icon_state",
- "icon_state": "2-i",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- }
- ],
- "3-i": [
- {
- "type": "icon_state",
- "icon_state": "3-i",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- }
- ],
- "4-i": [
- {
- "type": "icon_state",
- "icon_state": "4-i",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- }
- ],
- "1-n": [
- {
- "type": "icon_state",
- "icon_state": "1-n",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- }
- ],
- "2-n": [
- {
- "type": "icon_state",
- "icon_state": "2-n",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- }
- ],
- "3-s": [
- {
- "type": "icon_state",
- "icon_state": "3-s",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- }
- ],
- "4-s": [
- {
- "type": "icon_state",
- "icon_state": "4-s",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- }
- ],
- "1-w": [
- {
- "type": "icon_state",
- "icon_state": "1-w",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- }
- ],
- "2-e": [
- {
- "type": "icon_state",
- "icon_state": "2-e",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- }
- ],
- "3-w": [
- {
- "type": "icon_state",
- "icon_state": "3-w",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- }
- ],
- "4-e": [
- {
- "type": "icon_state",
- "icon_state": "4-e",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- }
- ],
- "1-nw": [
- {
- "type": "icon_state",
- "icon_state": "1-nw",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- }
- ],
- "2-ne": [
- {
- "type": "icon_state",
- "icon_state": "2-ne",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- }
- ],
- "3-sw": [
- {
- "type": "icon_state",
- "icon_state": "3-sw",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- }
- ],
- "4-se": [
- {
- "type": "icon_state",
- "icon_state": "4-se",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- }
- ],
- "1-f": [
- {
- "type": "icon_state",
- "icon_state": "1-f",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- }
- ],
- "2-f": [
- {
- "type": "icon_state",
- "icon_state": "2-f",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- }
- ],
- "3-f": [
- {
- "type": "icon_state",
- "icon_state": "3-f",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- }
- ],
- "4-f": [
- {
- "type": "icon_state",
- "icon_state": "4-f",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- }
- ]
+ "smooth":
+ {
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "smooth",
+ "blend_mode": "overlay",
+ "color_ids": [ 1 ]
+ }
+ ]
+ },
+ "window-fg":
+ {
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "window-fg",
+ "blend_mode": "overlay",
+ "color_ids": [ 1 ]
+ }
+ ]
+ },
+ "window-bg":
+ {
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "window-bg",
+ "blend_mode": "overlay",
+ "color_ids": [ 1 ]
+ }
+ ]
+ },
+ "1-i":
+ {
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "1-i",
+ "blend_mode": "overlay",
+ "color_ids": [ 1 ]
+ }
+ ]
+ },
+ "2-i":
+ {
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "2-i",
+ "blend_mode": "overlay",
+ "color_ids": [ 1 ]
+ }
+ ]
+ },
+ "3-i":
+ {
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "3-i",
+ "blend_mode": "overlay",
+ "color_ids": [ 1 ]
+ }
+ ]
+ },
+ "4-i":
+ {
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "4-i",
+ "blend_mode": "overlay",
+ "color_ids": [ 1 ]
+ }
+ ]
+ },
+ "1-n":
+ {
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "1-n",
+ "blend_mode": "overlay",
+ "color_ids": [ 1 ]
+ }
+ ]
+ },
+ "2-n":
+ {
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "2-n",
+ "blend_mode": "overlay",
+ "color_ids": [ 1 ]
+ }
+ ]
+ },
+ "3-s":
+ {
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "3-s",
+ "blend_mode": "overlay",
+ "color_ids": [ 1 ]
+ }
+ ]
+ },
+ "4-s":
+ {
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "4-s",
+ "blend_mode": "overlay",
+ "color_ids": [ 1 ]
+ }
+ ]
+ },
+ "1-w":
+ {
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "1-w",
+ "blend_mode": "overlay",
+ "color_ids": [ 1 ]
+ }
+ ]
+ },
+ "2-e":
+ {
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "2-e",
+ "blend_mode": "overlay",
+ "color_ids": [ 1 ]
+ }
+ ]
+ },
+ "3-w":
+ {
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "3-w",
+ "blend_mode": "overlay",
+ "color_ids": [ 1 ]
+ }
+ ]
+ },
+ "4-e":
+ {
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "4-e",
+ "blend_mode": "overlay",
+ "color_ids": [ 1 ]
+ }
+ ]
+ },
+ "1-nw":
+ {
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "1-nw",
+ "blend_mode": "overlay",
+ "color_ids": [ 1 ]
+ }
+ ]
+ },
+ "2-ne":
+ {
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "2-ne",
+ "blend_mode": "overlay",
+ "color_ids": [ 1 ]
+ }
+ ]
+ },
+ "3-sw":
+ {
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "3-sw",
+ "blend_mode": "overlay",
+ "color_ids": [ 1 ]
+ }
+ ]
+ },
+ "4-se":
+ {
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "4-se",
+ "blend_mode": "overlay",
+ "color_ids": [ 1 ]
+ }
+ ]
+ },
+ "1-f":
+ {
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "1-f",
+ "blend_mode": "overlay",
+ "color_ids": [ 1 ]
+ }
+ ]
+ },
+ "2-f":
+ {
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "2-f",
+ "blend_mode": "overlay",
+ "color_ids": [ 1 ]
+ }
+ ]
+ },
+ "3-f":
+ {
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "3-f",
+ "blend_mode": "overlay",
+ "color_ids": [ 1 ]
+ }
+ ]
+ },
+ "4-f":
+ {
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "4-f",
+ "blend_mode": "overlay",
+ "color_ids": [ 1 ]
+ }
+ ]
+ }
}
diff --git a/code/datums/greyscale/json_configs/sneakers.json b/code/datums/greyscale/json_configs/sneakers.json
index 50a064bb02b..5cd4d30f157 100644
--- a/code/datums/greyscale/json_configs/sneakers.json
+++ b/code/datums/greyscale/json_configs/sneakers.json
@@ -1,16 +1,20 @@
{
- "sneakers": [
- {
- "type": "icon_state",
- "icon_state": "sneakers_back",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- },
- {
- "type": "icon_state",
- "icon_state": "sneakers_front",
- "blend_mode": "overlay",
- "color_ids": [ 2 ]
- }
- ]
+ "sneakers":
+ {
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "sneakers_back",
+ "blend_mode": "overlay",
+ "color_ids": [ 1 ]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "sneakers_front",
+ "blend_mode": "overlay",
+ "color_ids": [ 2 ]
+ }
+ ]
+ }
}
diff --git a/code/datums/greyscale/json_configs/sneakers_marisa.json b/code/datums/greyscale/json_configs/sneakers_marisa.json
index b42838b3e15..fc839629ce9 100644
--- a/code/datums/greyscale/json_configs/sneakers_marisa.json
+++ b/code/datums/greyscale/json_configs/sneakers_marisa.json
@@ -1,21 +1,25 @@
{
- "sneakers": [
- {
- "type": "icon_state",
- "icon_state": "sneakers_back",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- },
- {
- "type": "icon_state",
- "icon_state": "sneakers_front",
- "blend_mode": "overlay",
- "color_ids": [ 2 ]
- },
- {
- "type": "icon_state",
- "icon_state": "sneakers_marisa",
- "blend_mode": "overlay"
- }
- ]
+ "sneakers":
+ {
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "sneakers_back",
+ "blend_mode": "overlay",
+ "color_ids": [ 1 ]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "sneakers_front",
+ "blend_mode": "overlay",
+ "color_ids": [ 2 ]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "sneakers_marisa",
+ "blend_mode": "overlay"
+ }
+ ]
+ }
}
diff --git a/code/datums/greyscale/json_configs/sneakers_orange.json b/code/datums/greyscale/json_configs/sneakers_orange.json
index f0e27c02814..6e421e4b434 100644
--- a/code/datums/greyscale/json_configs/sneakers_orange.json
+++ b/code/datums/greyscale/json_configs/sneakers_orange.json
@@ -1,35 +1,43 @@
{
- "sneakers": [
- {
- "type": "icon_state",
- "icon_state": "sneakers_back",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- },
- {
- "type": "icon_state",
- "icon_state": "sneakers_front",
- "blend_mode": "overlay",
- "color_ids": [ 2 ]
- }
- ],
- "sneakers_chained": [
- {
- "type": "icon_state",
- "icon_state": "sneakers_alt_back",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- },
- {
- "type": "icon_state",
- "icon_state": "sneakers_alt_front",
- "blend_mode": "overlay",
- "color_ids": [ 2 ]
- },
- {
- "type": "icon_state",
- "icon_state": "sneakers_alt_chained",
- "blend_mode": "overlay"
- }
- ]
+ "sneakers":
+ {
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "sneakers_back",
+ "blend_mode": "overlay",
+ "color_ids": [ 1 ]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "sneakers_front",
+ "blend_mode": "overlay",
+ "color_ids": [ 2 ]
+ }
+ ]
+ },
+ "sneakers_chained":
+ {
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "sneakers_alt_back",
+ "blend_mode": "overlay",
+ "color_ids": [ 1 ]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "sneakers_alt_front",
+ "blend_mode": "overlay",
+ "color_ids": [ 2 ]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "sneakers_alt_chained",
+ "blend_mode": "overlay"
+ }
+ ]
+ }
}
diff --git a/code/datums/greyscale/json_configs/sneakers_orange_worn.json b/code/datums/greyscale/json_configs/sneakers_orange_worn.json
index fb0a07ff196..85a3aed74b1 100644
--- a/code/datums/greyscale/json_configs/sneakers_orange_worn.json
+++ b/code/datums/greyscale/json_configs/sneakers_orange_worn.json
@@ -1,35 +1,43 @@
{
- "sneakers": [
- {
- "type": "icon_state",
- "icon_state": "sneakers_back",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- },
- {
- "type": "icon_state",
- "icon_state": "sneakers_front",
- "blend_mode": "overlay",
- "color_ids": [ 2 ]
- }
- ],
- "sneakers_chained": [
- {
- "type": "icon_state",
- "icon_state": "sneakers_back",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- },
- {
- "type": "icon_state",
- "icon_state": "sneakers_front",
- "blend_mode": "overlay",
- "color_ids": [ 2 ]
- },
- {
- "type": "icon_state",
- "icon_state": "sneakers_chained",
- "blend_mode": "overlay"
- }
- ]
+ "sneakers":
+ {
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "sneakers_back",
+ "blend_mode": "overlay",
+ "color_ids": [ 1 ]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "sneakers_front",
+ "blend_mode": "overlay",
+ "color_ids": [ 2 ]
+ }
+ ]
+ },
+ "sneakers_chained":
+ {
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "sneakers_back",
+ "blend_mode": "overlay",
+ "color_ids": [ 1 ]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "sneakers_front",
+ "blend_mode": "overlay",
+ "color_ids": [ 2 ]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "sneakers_chained",
+ "blend_mode": "overlay"
+ }
+ ]
+ }
}
diff --git a/code/datums/greyscale/json_configs/sneakers_wheelys.json b/code/datums/greyscale/json_configs/sneakers_wheelys.json
index 221dd5717fe..9fe98a42d9d 100644
--- a/code/datums/greyscale/json_configs/sneakers_wheelys.json
+++ b/code/datums/greyscale/json_configs/sneakers_wheelys.json
@@ -1,21 +1,25 @@
{
- "sneakers": [
- {
- "type": "icon_state",
- "icon_state": "sneakers_back",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- },
- {
- "type": "icon_state",
- "icon_state": "sneakers_front",
- "blend_mode": "overlay",
- "color_ids": [ 2 ]
- },
- {
- "type": "icon_state",
- "icon_state": "sneakers_wheelys",
- "blend_mode": "overlay"
- }
- ]
+ "sneakers":
+ {
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "sneakers_back",
+ "blend_mode": "overlay",
+ "color_ids": [ 1 ]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "sneakers_front",
+ "blend_mode": "overlay",
+ "color_ids": [ 2 ]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "sneakers_wheelys",
+ "blend_mode": "overlay"
+ }
+ ]
+ }
}
diff --git a/code/datums/greyscale/json_configs/sneakers_worn.json b/code/datums/greyscale/json_configs/sneakers_worn.json
index 50a064bb02b..5cd4d30f157 100644
--- a/code/datums/greyscale/json_configs/sneakers_worn.json
+++ b/code/datums/greyscale/json_configs/sneakers_worn.json
@@ -1,16 +1,20 @@
{
- "sneakers": [
- {
- "type": "icon_state",
- "icon_state": "sneakers_back",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- },
- {
- "type": "icon_state",
- "icon_state": "sneakers_front",
- "blend_mode": "overlay",
- "color_ids": [ 2 ]
- }
- ]
+ "sneakers":
+ {
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "sneakers_back",
+ "blend_mode": "overlay",
+ "color_ids": [ 1 ]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "sneakers_front",
+ "blend_mode": "overlay",
+ "color_ids": [ 2 ]
+ }
+ ]
+ }
}
diff --git a/code/datums/greyscale/json_configs/sombrero.json b/code/datums/greyscale/json_configs/sombrero.json
index 8a183c55def..35590541223 100644
--- a/code/datums/greyscale/json_configs/sombrero.json
+++ b/code/datums/greyscale/json_configs/sombrero.json
@@ -1,23 +1,31 @@
{
- "sombrero": [
- {
- "type": "reference",
- "reference_type": "/datum/greyscale_config/sombrero/base",
- "blend_mode": "overlay",
- "color_ids": [ 1, 2 ]
- }
- ],
- "shamebrero": [
- {
- "type": "reference",
- "reference_type": "/datum/greyscale_config/sombrero/base",
- "blend_mode": "overlay",
- "color_ids": [ 1, 2 ]
- },
- {
- "type": "icon_state",
- "icon_state": "dongles",
- "blend_mode": "overlay"
- }
- ]
+ "sombrero":
+ {
+ "layers":
+ [
+ {
+ "type": "reference",
+ "reference_type": "/datum/greyscale_config/sombrero/base",
+ "blend_mode": "overlay",
+ "color_ids": [ 1, 2 ]
+ }
+ ]
+ },
+ "shamebrero":
+ {
+ "layers":
+ [
+ {
+ "type": "reference",
+ "reference_type": "/datum/greyscale_config/sombrero/base",
+ "blend_mode": "overlay",
+ "color_ids": [ 1, 2 ]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "dongles",
+ "blend_mode": "overlay"
+ }
+ ]
+ }
}
diff --git a/code/datums/greyscale/json_configs/sombrero_base.json b/code/datums/greyscale/json_configs/sombrero_base.json
index 9f2097ac2e8..da00849bf36 100644
--- a/code/datums/greyscale/json_configs/sombrero_base.json
+++ b/code/datums/greyscale/json_configs/sombrero_base.json
@@ -1,21 +1,25 @@
{
- "": [
- {
- "type": "icon_state",
- "icon_state": "cloth",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- },
- {
- "type": "icon_state",
- "icon_state": "ornamentation",
- "blend_mode": "overlay",
- "color_ids": [ 2 ]
- },
- {
- "type": "icon_state",
- "icon_state": "plate",
- "blend_mode": "overlay"
- }
- ]
+ "":
+ {
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "cloth",
+ "blend_mode": "overlay",
+ "color_ids": [ 1 ]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "ornamentation",
+ "blend_mode": "overlay",
+ "color_ids": [ 2 ]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "plate",
+ "blend_mode": "overlay"
+ }
+ ]
+ }
}
diff --git a/code/datums/greyscale/json_configs/sombrero_base_lefthand.json b/code/datums/greyscale/json_configs/sombrero_base_lefthand.json
index d9d26e0b9c2..971940c76d6 100644
--- a/code/datums/greyscale/json_configs/sombrero_base_lefthand.json
+++ b/code/datums/greyscale/json_configs/sombrero_base_lefthand.json
@@ -1,16 +1,20 @@
{
- "": [
- {
- "type": "icon_state",
- "icon_state": "cloth_lefthand",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- },
- {
- "type": "icon_state",
- "icon_state": "ornamentation_lefthand",
- "blend_mode": "overlay",
- "color_ids": [ 2 ]
- }
- ]
+ "":
+ {
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "cloth_lefthand",
+ "blend_mode": "overlay",
+ "color_ids": [ 1 ]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "ornamentation_lefthand",
+ "blend_mode": "overlay",
+ "color_ids": [ 2 ]
+ }
+ ]
+ }
}
diff --git a/code/datums/greyscale/json_configs/sombrero_base_righthand.json b/code/datums/greyscale/json_configs/sombrero_base_righthand.json
index 32769cb21be..c45603a19d0 100644
--- a/code/datums/greyscale/json_configs/sombrero_base_righthand.json
+++ b/code/datums/greyscale/json_configs/sombrero_base_righthand.json
@@ -1,16 +1,20 @@
{
- "": [
- {
- "type": "icon_state",
- "icon_state": "cloth_righthand",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- },
- {
- "type": "icon_state",
- "icon_state": "ornamentation_righthand",
- "blend_mode": "overlay",
- "color_ids": [ 2 ]
- }
- ]
+ "":
+ {
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "cloth_righthand",
+ "blend_mode": "overlay",
+ "color_ids": [ 1 ]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "ornamentation_righthand",
+ "blend_mode": "overlay",
+ "color_ids": [ 2 ]
+ }
+ ]
+ }
}
diff --git a/code/datums/greyscale/json_configs/sombrero_base_worn.json b/code/datums/greyscale/json_configs/sombrero_base_worn.json
index e97c1875df4..b24bed99889 100644
--- a/code/datums/greyscale/json_configs/sombrero_base_worn.json
+++ b/code/datums/greyscale/json_configs/sombrero_base_worn.json
@@ -1,21 +1,25 @@
{
- "": [
- {
- "type": "icon_state",
- "icon_state": "cloth_worn",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- },
- {
- "type": "icon_state",
- "icon_state": "ornamentation_worn",
- "blend_mode": "overlay",
- "color_ids": [ 2 ]
- },
- {
- "type": "icon_state",
- "icon_state": "plate_worn",
- "blend_mode": "overlay"
- }
- ]
+ "":
+ {
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "cloth_worn",
+ "blend_mode": "overlay",
+ "color_ids": [ 1 ]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "ornamentation_worn",
+ "blend_mode": "overlay",
+ "color_ids": [ 2 ]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "plate_worn",
+ "blend_mode": "overlay"
+ }
+ ]
+ }
}
diff --git a/code/datums/greyscale/json_configs/sombrero_lefthand.json b/code/datums/greyscale/json_configs/sombrero_lefthand.json
index 5ba8a89ed28..22499a30499 100644
--- a/code/datums/greyscale/json_configs/sombrero_lefthand.json
+++ b/code/datums/greyscale/json_configs/sombrero_lefthand.json
@@ -1,23 +1,31 @@
{
- "sombrero": [
- {
- "type": "reference",
- "reference_type": "/datum/greyscale_config/sombrero/base_lefthand",
- "blend_mode": "overlay",
- "color_ids": [ 1, 2 ]
- }
- ],
- "shamebrero": [
- {
- "type": "reference",
- "reference_type": "/datum/greyscale_config/sombrero/base_lefthand",
- "blend_mode": "overlay",
- "color_ids": [ 1, 2 ]
- },
- {
- "type": "icon_state",
- "icon_state": "dongles_lefthand",
- "blend_mode": "overlay"
- }
- ]
+ "sombrero":
+ {
+ "layers":
+ [
+ {
+ "type": "reference",
+ "reference_type": "/datum/greyscale_config/sombrero/base_lefthand",
+ "blend_mode": "overlay",
+ "color_ids": [ 1, 2 ]
+ }
+ ]
+ },
+ "shamebrero":
+ {
+ "layers":
+ [
+ {
+ "type": "reference",
+ "reference_type": "/datum/greyscale_config/sombrero/base_lefthand",
+ "blend_mode": "overlay",
+ "color_ids": [ 1, 2 ]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "dongles_lefthand",
+ "blend_mode": "overlay"
+ }
+ ]
+ }
}
diff --git a/code/datums/greyscale/json_configs/sombrero_righthand.json b/code/datums/greyscale/json_configs/sombrero_righthand.json
index 07737ad2532..f2895566a9e 100644
--- a/code/datums/greyscale/json_configs/sombrero_righthand.json
+++ b/code/datums/greyscale/json_configs/sombrero_righthand.json
@@ -1,23 +1,31 @@
{
- "sombrero": [
- {
- "type": "reference",
- "reference_type": "/datum/greyscale_config/sombrero/base_righthand",
- "blend_mode": "overlay",
- "color_ids": [ 1, 2 ]
- }
- ],
- "shamebrero": [
- {
- "type": "reference",
- "reference_type": "/datum/greyscale_config/sombrero/base_righthand",
- "blend_mode": "overlay",
- "color_ids": [ 1, 2 ]
- },
- {
- "type": "icon_state",
- "icon_state": "dongles_righthand",
- "blend_mode": "overlay"
- }
- ]
+ "sombrero":
+ {
+ "layers":
+ [
+ {
+ "type": "reference",
+ "reference_type": "/datum/greyscale_config/sombrero/base_righthand",
+ "blend_mode": "overlay",
+ "color_ids": [ 1, 2 ]
+ }
+ ]
+ },
+ "shamebrero":
+ {
+ "layers":
+ [
+ {
+ "type": "reference",
+ "reference_type": "/datum/greyscale_config/sombrero/base_righthand",
+ "blend_mode": "overlay",
+ "color_ids": [ 1, 2 ]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "dongles_righthand",
+ "blend_mode": "overlay"
+ }
+ ]
+ }
}
diff --git a/code/datums/greyscale/json_configs/sombrero_worn.json b/code/datums/greyscale/json_configs/sombrero_worn.json
index a70cd5ce9c7..56b20246e86 100644
--- a/code/datums/greyscale/json_configs/sombrero_worn.json
+++ b/code/datums/greyscale/json_configs/sombrero_worn.json
@@ -1,23 +1,31 @@
{
- "sombrero": [
- {
- "type": "reference",
- "reference_type": "/datum/greyscale_config/sombrero/base_worn",
- "blend_mode": "overlay",
- "color_ids": [ 1, 2 ]
- }
- ],
- "shamebrero": [
- {
- "type": "reference",
- "reference_type": "/datum/greyscale_config/sombrero/base_worn",
- "blend_mode": "overlay",
- "color_ids": [ 1, 2 ]
- },
- {
- "type": "icon_state",
- "icon_state": "dongles_worn",
- "blend_mode": "overlay"
- }
- ]
+ "sombrero":
+ {
+ "layers":
+ [
+ {
+ "type": "reference",
+ "reference_type": "/datum/greyscale_config/sombrero/base_worn",
+ "blend_mode": "overlay",
+ "color_ids": [ 1, 2 ]
+ }
+ ]
+ },
+ "shamebrero":
+ {
+ "layers":
+ [
+ {
+ "type": "reference",
+ "reference_type": "/datum/greyscale_config/sombrero/base_worn",
+ "blend_mode": "overlay",
+ "color_ids": [ 1, 2 ]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "dongles_worn",
+ "blend_mode": "overlay"
+ }
+ ]
+ }
}
diff --git a/code/datums/greyscale/json_configs/structures/fulltile_window.json b/code/datums/greyscale/json_configs/structures/fulltile_window.json
new file mode 100644
index 00000000000..b2b9363d1b9
--- /dev/null
+++ b/code/datums/greyscale/json_configs/structures/fulltile_window.json
@@ -0,0 +1,16 @@
+{
+ "window":
+ {
+ "bitmask_config": 7,
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "window",
+ "blend_mode": "overlay",
+ "bitmask": true,
+ "color_ids": [1]
+ }
+ ]
+ }
+}
diff --git a/code/datums/greyscale/json_configs/structures/low_wall.json b/code/datums/greyscale/json_configs/structures/low_wall.json
new file mode 100644
index 00000000000..0b6ff8c9b9f
--- /dev/null
+++ b/code/datums/greyscale/json_configs/structures/low_wall.json
@@ -0,0 +1,22 @@
+{
+ "wall":
+ {
+ "bitmask_config": 7,
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "wall",
+ "blend_mode": "overlay",
+ "bitmask": true,
+ "color_ids": [1]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "shine",
+ "blend_mode": "overlay",
+ "bitmask": true
+ }
+ ]
+ }
+}
diff --git a/code/datums/greyscale/json_configs/suspenders.json b/code/datums/greyscale/json_configs/suspenders.json
index e7ac4730563..df0b440012b 100644
--- a/code/datums/greyscale/json_configs/suspenders.json
+++ b/code/datums/greyscale/json_configs/suspenders.json
@@ -1,18 +1,26 @@
{
- "suspenders": [
- {
- "type": "icon_state",
- "icon_state": "suspenders",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- }
- ],
- "suspenders_t": [
- {
- "type": "icon_state",
- "icon_state": "suspenders_t",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- }
- ]
+ "suspenders":
+ {
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "suspenders",
+ "blend_mode": "overlay",
+ "color_ids": [ 1 ]
+ }
+ ]
+ },
+ "suspenders_t":
+ {
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "suspenders_t",
+ "blend_mode": "overlay",
+ "color_ids": [ 1 ]
+ }
+ ]
+ }
}
diff --git a/code/datums/greyscale/json_configs/suspenders_worn.json b/code/datums/greyscale/json_configs/suspenders_worn.json
index e7ac4730563..df0b440012b 100644
--- a/code/datums/greyscale/json_configs/suspenders_worn.json
+++ b/code/datums/greyscale/json_configs/suspenders_worn.json
@@ -1,18 +1,26 @@
{
- "suspenders": [
- {
- "type": "icon_state",
- "icon_state": "suspenders",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- }
- ],
- "suspenders_t": [
- {
- "type": "icon_state",
- "icon_state": "suspenders_t",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- }
- ]
+ "suspenders":
+ {
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "suspenders",
+ "blend_mode": "overlay",
+ "color_ids": [ 1 ]
+ }
+ ]
+ },
+ "suspenders_t":
+ {
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "suspenders_t",
+ "blend_mode": "overlay",
+ "color_ids": [ 1 ]
+ }
+ ]
+ }
}
diff --git a/code/datums/greyscale/json_configs/thermomachine.json b/code/datums/greyscale/json_configs/thermomachine.json
index 37a4cbd6815..82200ed0e6c 100644
--- a/code/datums/greyscale/json_configs/thermomachine.json
+++ b/code/datums/greyscale/json_configs/thermomachine.json
@@ -1,41 +1,54 @@
{
- "thermo_base": [
- {
- "type": "icon_state",
- "icon_state": "temp_meter",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- },
- {
- "type": "icon_state",
- "icon_state": "thermo_base",
- "blend_mode": "overlay"
- }
- ],
- "thermo_1": [
- {
- "type": "icon_state",
- "icon_state": "temp_meter_1",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- },
- {
- "type": "icon_state",
- "icon_state": "thermo_base_1",
- "blend_mode": "overlay"
- }
- ],
- "thermo-open": [
- {
- "type": "icon_state",
- "icon_state": "temp_meter-o",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- },
- {
- "type": "icon_state",
- "icon_state": "thermo_base-o",
- "blend_mode": "overlay"
- }
- ]
+ "thermo_base":
+ {
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "temp_meter",
+ "blend_mode": "overlay",
+ "color_ids": [ 1 ]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "thermo_base",
+ "blend_mode": "overlay"
+ }
+ ]
+ },
+ "thermo_1":
+ {
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "temp_meter_1",
+ "blend_mode": "overlay",
+ "color_ids": [ 1 ]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "thermo_base_1",
+ "blend_mode": "overlay"
+ }
+ ]
+ },
+ "thermo_open":
+ {
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "temp_meter-o",
+ "blend_mode": "overlay",
+ "color_ids": [ 1 ]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "thermo_base-o",
+ "blend_mode": "overlay"
+ }
+ ]
+ }
}
+
diff --git a/code/datums/greyscale/json_configs/turfs/shineless_wall.json b/code/datums/greyscale/json_configs/turfs/shineless_wall.json
new file mode 100644
index 00000000000..b399839d6f4
--- /dev/null
+++ b/code/datums/greyscale/json_configs/turfs/shineless_wall.json
@@ -0,0 +1,52 @@
+{
+ "wall":
+ {
+ "bitmask_config": 7,
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "wall",
+ "blend_mode": "overlay",
+ "bitmask": true,
+ "color_ids": [1]
+ }
+ ]
+ },
+ "fwall_opening":
+ {
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "fwall_opening",
+ "blend_mode": "overlay",
+ "color_ids": [1]
+ }
+ ]
+ },
+ "fwall_open":
+ {
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "fwall_open",
+ "blend_mode": "overlay",
+ "color_ids": [1]
+ }
+ ]
+ },
+ "fwall_closing":
+ {
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "fwall_closing",
+ "blend_mode": "overlay",
+ "color_ids": [1]
+ }
+ ]
+ }
+}
diff --git a/code/datums/greyscale/json_configs/turfs/shineless_wall_stripe.json b/code/datums/greyscale/json_configs/turfs/shineless_wall_stripe.json
new file mode 100644
index 00000000000..0f7d9305b4b
--- /dev/null
+++ b/code/datums/greyscale/json_configs/turfs/shineless_wall_stripe.json
@@ -0,0 +1,16 @@
+{
+ "wall":
+ {
+ "bitmask_config": 7,
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "wall",
+ "blend_mode": "overlay",
+ "bitmask": true,
+ "color_ids": [1]
+ }
+ ]
+ }
+}
diff --git a/code/datums/greyscale/json_configs/turfs/solid_wall.json b/code/datums/greyscale/json_configs/turfs/solid_wall.json
new file mode 100644
index 00000000000..9bd5f467e8c
--- /dev/null
+++ b/code/datums/greyscale/json_configs/turfs/solid_wall.json
@@ -0,0 +1,58 @@
+{
+ "wall":
+ {
+ "bitmask_config": 7,
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "wall",
+ "blend_mode": "overlay",
+ "bitmask": true,
+ "color_ids": [1]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "shine",
+ "blend_mode": "overlay",
+ "bitmask": true
+ }
+ ]
+ },
+ "fwall_opening":
+ {
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "fwall_opening",
+ "blend_mode": "overlay",
+ "color_ids": [1]
+ }
+ ]
+ },
+ "fwall_open":
+ {
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "fwall_open",
+ "blend_mode": "overlay",
+ "color_ids": [1]
+ }
+ ]
+ },
+ "fwall_closing":
+ {
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "fwall_closing",
+ "blend_mode": "overlay",
+ "color_ids": [1]
+ }
+ ]
+ }
+}
diff --git a/code/datums/greyscale/json_configs/turfs/wall_neighbor_stripe.json b/code/datums/greyscale/json_configs/turfs/wall_neighbor_stripe.json
new file mode 100644
index 00000000000..36659e88267
--- /dev/null
+++ b/code/datums/greyscale/json_configs/turfs/wall_neighbor_stripe.json
@@ -0,0 +1,22 @@
+{
+ "stripe":
+ {
+ "bitmask_config": 1,
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "stripe",
+ "blend_mode": "overlay",
+ "bitmask": true,
+ "color_ids": [1]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "shine",
+ "blend_mode": "overlay",
+ "bitmask": true
+ }
+ ]
+ }
+}
diff --git a/code/datums/greyscale/json_configs/turfs/wall_stripe.json b/code/datums/greyscale/json_configs/turfs/wall_stripe.json
new file mode 100644
index 00000000000..0b6ff8c9b9f
--- /dev/null
+++ b/code/datums/greyscale/json_configs/turfs/wall_stripe.json
@@ -0,0 +1,22 @@
+{
+ "wall":
+ {
+ "bitmask_config": 7,
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "wall",
+ "blend_mode": "overlay",
+ "bitmask": true,
+ "color_ids": [1]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "shine",
+ "blend_mode": "overlay",
+ "bitmask": true
+ }
+ ]
+ }
+}
diff --git a/code/datums/greyscale/json_configs/wintercoats.json b/code/datums/greyscale/json_configs/wintercoats.json
index a1a50b04447..fdeb488740b 100644
--- a/code/datums/greyscale/json_configs/wintercoats.json
+++ b/code/datums/greyscale/json_configs/wintercoats.json
@@ -1,84 +1,92 @@
{
- "coatwinter": [
- {
- "type": "icon_state",
- "icon_state": "neck",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- },
- {
- "type": "icon_state",
- "icon_state": "sleeves",
- "blend_mode": "overlay",
- "color_ids": [ 2 ]
- },
- {
- "type": "icon_state",
- "icon_state": "arms",
- "blend_mode": "overlay",
- "color_ids": [ 3 ]
- },
- {
- "type": "icon_state",
- "icon_state": "bodytop",
- "blend_mode": "overlay",
- "color_ids": [ 4 ]
- },
- {
- "type": "icon_state",
- "icon_state": "bodymiddle",
- "blend_mode": "overlay",
- "color_ids": [ 5 ]
- },
- {
- "type": "icon_state",
- "icon_state": "bodybottom",
- "blend_mode": "overlay",
- "color_ids": [ 6 ]
- }
- ],
- "coatwinter_t": [
- {
- "type": "icon_state",
- "icon_state": "neck",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- },
- {
- "type": "icon_state",
- "icon_state": "sleeves",
- "blend_mode": "overlay",
- "color_ids": [ 2 ]
- },
- {
- "type": "icon_state",
- "icon_state": "arms",
- "blend_mode": "overlay",
- "color_ids": [ 3 ]
- },
- {
- "type": "icon_state",
- "icon_state": "bodytop",
- "blend_mode": "overlay",
- "color_ids": [ 4 ]
- },
- {
- "type": "icon_state",
- "icon_state": "bodymiddle",
- "blend_mode": "overlay",
- "color_ids": [ 5 ]
- },
- {
- "type": "icon_state",
- "icon_state": "bodybottom",
- "blend_mode": "overlay",
- "color_ids": [ 6 ]
- },
- {
- "type": "icon_state",
- "icon_state": "hood",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- }
- ]
+ "coatwinter":
+ {
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "neck",
+ "blend_mode": "overlay",
+ "color_ids": [1]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "sleeves",
+ "blend_mode": "overlay",
+ "color_ids": [2]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "arms",
+ "blend_mode": "overlay",
+ "color_ids": [3]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "bodytop",
+ "blend_mode": "overlay",
+ "color_ids": [4]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "bodymiddle",
+ "blend_mode": "overlay",
+ "color_ids": [5]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "bodybottom",
+ "blend_mode": "overlay",
+ "color_ids": [6]
+ }
+ ]
+ },
+ "coatwinter_t":
+ {
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "neck",
+ "blend_mode": "overlay",
+ "color_ids": [1]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "sleeves",
+ "blend_mode": "overlay",
+ "color_ids": [2]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "arms",
+ "blend_mode": "overlay",
+ "color_ids": [3]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "bodytop",
+ "blend_mode": "overlay",
+ "color_ids": [4]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "bodymiddle",
+ "blend_mode": "overlay",
+ "color_ids": [5]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "bodybottom",
+ "blend_mode": "overlay",
+ "color_ids": [6]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "hood",
+ "blend_mode": "overlay",
+ "color_ids": [1]
+ }
+ ]
+ }
}
diff --git a/code/datums/greyscale/json_configs/wintercoats_hood.json b/code/datums/greyscale/json_configs/wintercoats_hood.json
index d4ea34aa73a..1ad7615b658 100644
--- a/code/datums/greyscale/json_configs/wintercoats_hood.json
+++ b/code/datums/greyscale/json_configs/wintercoats_hood.json
@@ -1,22 +1,26 @@
{
- "hood_winter": [
- {
- "type": "icon_state",
- "icon_state": "top_trim",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- },
- {
- "type": "icon_state",
- "icon_state": "bottom_trim",
- "blend_mode": "overlay",
- "color_ids": [ 2 ]
- },
- {
- "type": "icon_state",
- "icon_state": "hood_cloth",
- "blend_mode": "overlay",
- "color_ids": [ 3 ]
- }
- ]
+ "hood_winter":
+ {
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "top_trim",
+ "blend_mode": "overlay",
+ "color_ids": [1]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "bottom_trim",
+ "blend_mode": "overlay",
+ "color_ids": [2]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "hood_cloth",
+ "blend_mode": "overlay",
+ "color_ids": [3]
+ }
+ ]
+ }
}
diff --git a/code/datums/greyscale/json_configs/wintercoats_hood_worn.json b/code/datums/greyscale/json_configs/wintercoats_hood_worn.json
index d4ea34aa73a..1ad7615b658 100644
--- a/code/datums/greyscale/json_configs/wintercoats_hood_worn.json
+++ b/code/datums/greyscale/json_configs/wintercoats_hood_worn.json
@@ -1,22 +1,26 @@
{
- "hood_winter": [
- {
- "type": "icon_state",
- "icon_state": "top_trim",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- },
- {
- "type": "icon_state",
- "icon_state": "bottom_trim",
- "blend_mode": "overlay",
- "color_ids": [ 2 ]
- },
- {
- "type": "icon_state",
- "icon_state": "hood_cloth",
- "blend_mode": "overlay",
- "color_ids": [ 3 ]
- }
- ]
+ "hood_winter":
+ {
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "top_trim",
+ "blend_mode": "overlay",
+ "color_ids": [1]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "bottom_trim",
+ "blend_mode": "overlay",
+ "color_ids": [2]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "hood_cloth",
+ "blend_mode": "overlay",
+ "color_ids": [3]
+ }
+ ]
+ }
}
diff --git a/code/datums/greyscale/json_configs/wintercoats_worn.json b/code/datums/greyscale/json_configs/wintercoats_worn.json
index 59e2e9223b1..dbe87ef7b22 100644
--- a/code/datums/greyscale/json_configs/wintercoats_worn.json
+++ b/code/datums/greyscale/json_configs/wintercoats_worn.json
@@ -1,79 +1,86 @@
{
- "coatwinter": [
- {
- "type": "icon_state",
- "icon_state": "neck_worn",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- },
- {
- "type": "icon_state",
- "icon_state": "sleeves_worn",
- "blend_mode": "overlay",
- "color_ids": [ 2 ]
- },
- {
- "type": "icon_state",
- "icon_state": "arms_worn",
- "blend_mode": "overlay",
- "color_ids": [ 3 ]
- },
- {
- "type": "icon_state",
- "icon_state": "bodytop_worn",
- "blend_mode": "overlay",
- "color_ids": [ 4 ]
- },
- {
- "type": "icon_state",
- "icon_state": "bodymiddle_worn",
- "blend_mode": "overlay",
- "color_ids": [ 5 ]
- },
- {
- "type": "icon_state",
- "icon_state": "bodybottom_worn",
- "blend_mode": "overlay",
- "color_ids": [ 6 ]
- }
- ],
-
- "coatwinter_t": [
- {
- "type": "icon_state",
- "icon_state": "neck_worn",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- },
- {
- "type": "icon_state",
- "icon_state": "sleeves_worn",
- "blend_mode": "overlay",
- "color_ids": [ 2 ]
- },
- {
- "type": "icon_state",
- "icon_state": "arms_worn",
- "blend_mode": "overlay",
- "color_ids": [ 3 ]
- },
- {
- "type": "icon_state",
- "icon_state": "bodytop_worn_t",
- "blend_mode": "overlay",
- "color_ids": [ 4 ]
- },
- {
- "type": "icon_state",
- "icon_state": "bodymiddle_worn_t",
- "blend_mode": "overlay",
- "color_ids": [ 5 ]
- },
- {
- "type": "icon_state",
- "icon_state": "bodybottom_worn_t",
- "blend_mode": "overlay",
- "color_ids": [ 6 ]
- }
- ]
+ "coatwinter":
+ {
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "neck_worn",
+ "blend_mode": "overlay",
+ "color_ids": [1]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "sleeves_worn",
+ "blend_mode": "overlay",
+ "color_ids": [2]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "arms_worn",
+ "blend_mode": "overlay",
+ "color_ids": [3]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "bodytop_worn",
+ "blend_mode": "overlay",
+ "color_ids": [4]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "bodymiddle_worn",
+ "blend_mode": "overlay",
+ "color_ids": [5]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "bodybottom_worn",
+ "blend_mode": "overlay",
+ "color_ids": [6]
+ }
+ ]
+ },
+ "coatwinter_t":
+ {
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "neck_worn",
+ "blend_mode": "overlay",
+ "color_ids": [1]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "sleeves_worn",
+ "blend_mode": "overlay",
+ "color_ids": [2]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "arms_worn",
+ "blend_mode": "overlay",
+ "color_ids": [3]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "bodytop_worn_t",
+ "blend_mode": "overlay",
+ "color_ids": [4]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "bodymiddle_worn_t",
+ "blend_mode": "overlay",
+ "color_ids": [5]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "bodybottom_worn_t",
+ "blend_mode": "overlay",
+ "color_ids": [6]
+ }
+ ]
+ }
}
diff --git a/code/datums/greyscale/json_configs/wirecutters.json b/code/datums/greyscale/json_configs/wirecutters.json
index 0fb5c530eb5..118d1976b3e 100644
--- a/code/datums/greyscale/json_configs/wirecutters.json
+++ b/code/datums/greyscale/json_configs/wirecutters.json
@@ -1,15 +1,20 @@
{
- "cutters_map": [
- {
- "type": "icon_state",
- "icon_state": "cutters",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- },
- {
- "type": "icon_state",
- "icon_state": "cutters_cutty_thingy",
- "blend_mode": "overlay"
- }
- ]
+ "cutters_map":
+ {
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "cutters",
+ "blend_mode": "overlay",
+ "color_ids": [ 1 ]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "cutters_cutty_thingy",
+ "blend_mode": "overlay"
+ }
+ ]
+ }
}
+
diff --git a/code/datums/greyscale/json_configs/wrap_paper.json b/code/datums/greyscale/json_configs/wrap_paper.json
index c7ea889bc22..9dddb7673d0 100644
--- a/code/datums/greyscale/json_configs/wrap_paper.json
+++ b/code/datums/greyscale/json_configs/wrap_paper.json
@@ -1,16 +1,21 @@
{
- "": [
- {
- "type": "icon_state",
- "icon_state": "wrap_paper_base",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- },
- {
- "type": "icon_state",
- "icon_state": "wrap_paper_ribbon",
- "blend_mode": "overlay",
- "color_ids": [ 2 ]
- }
- ]
+ "":
+ {
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "wrap_paper_base",
+ "blend_mode": "overlay",
+ "color_ids": [ 1 ]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "wrap_paper_ribbon",
+ "blend_mode": "overlay",
+ "color_ids": [ 2 ]
+ }
+ ]
+ }
}
+
diff --git a/code/datums/greyscale/layer.dm b/code/datums/greyscale/layer.dm
index 06a001c1ad8..658d1f2dcc4 100644
--- a/code/datums/greyscale/layer.dm
+++ b/code/datums/greyscale/layer.dm
@@ -2,6 +2,7 @@
var/layer_type
var/list/color_ids
var/blend_mode
+ var/bitmask = FALSE
var/static/list/json_readers
@@ -66,19 +67,18 @@
/// Used to actualy create the layer using the given colors
/// Do not override, use InternalGenerate instead
-/datum/greyscale_layer/proc/Generate(list/colors, list/render_steps, icon/new_icon)
+/datum/greyscale_layer/proc/Generate(list/colors, list/render_steps, do_bitmask, bitmask_step)
var/list/processed_colors = list()
for(var/i in color_ids)
if(isnum(i))
processed_colors += colors[i]
else
processed_colors += i
- var/icon/copy_of_new_icon = icon(new_icon) // Layers shouldn't be modifying it directly, this is just for them to reference
- return InternalGenerate(processed_colors, render_steps, copy_of_new_icon)
+ return InternalGenerate(processed_colors, render_steps, do_bitmask, bitmask_step)
/// Override this to implement layers.
/// The colors var will only contain colors that this layer is configured to use.
-/datum/greyscale_layer/proc/InternalGenerate(list/colors, list/render_steps, icon/new_icon)
+/datum/greyscale_layer/proc/InternalGenerate(list/colors, list/render_steps, do_bitmask, bitmask_step)
////////////////////////////////////////////////////////
// Subtypes
@@ -87,15 +87,22 @@
/datum/greyscale_layer/icon_state
layer_type = "icon_state"
var/icon_state
+ var/icon_file
var/icon/icon
var/color_id
/datum/greyscale_layer/icon_state/Initialize(icon_file)
. = ..()
+ src.icon_file = icon_file
var/list/icon_states = icon_states(icon_file)
- if(!(icon_state in icon_states))
- CRASH("Configured icon state \[[icon_state]\] was not found in [icon_file]. Double check your json configuration.")
- icon = new(icon_file, icon_state)
+ var/state_to_check
+ if(bitmask)
+ state_to_check = "[icon_state]-0"
+ else
+ state_to_check = icon_state
+ if(!(state_to_check in icon_states))
+ CRASH("Configured icon state \[[state_to_check]\] was not found in [icon_file]. Double check your json configuration.")
+ icon = new(icon_file, state_to_check)
if(length(color_ids) > 1)
CRASH("Icon state layers can not have more than one color id")
@@ -103,32 +110,23 @@
/datum/greyscale_layer/icon_state/GetExpectedValues(list/required_values, list/optional_values)
. = ..()
required_values[NAMEOF(src, icon_state)] = /datum/json_reader/text
+ optional_values[NAMEOF(src, bitmask)] = /datum/json_reader/number
-/datum/greyscale_layer/icon_state/InternalGenerate(list/colors, list/render_steps, icon/new_icon)
+/datum/greyscale_layer/icon_state/InternalGenerate(list/colors, list/render_steps, do_bitmask, bitmask_step)
. = ..()
- var/icon/generated_icon = icon(icon)
+ var/icon/new_icon
+ if(bitmask && do_bitmask)
+ new_icon = icon(icon_file, "[icon_state]-[bitmask_step]")
+ else
+ new_icon = icon(icon)
if(length(colors))
- generated_icon.Blend(colors[1], ICON_MULTIPLY)
- return generated_icon
-
-/// A layer to modify the previous layer's colors with a color matrix
-/datum/greyscale_layer/color_matrix
- layer_type = "color_matrix"
- var/list/color_matrix
-
-/datum/greyscale_layer/color_matrix/GetExpectedValues(list/required_values, list/optional_values)
- . = ..()
- required_values[NAMEOF(src, color_matrix)] = /datum/json_reader/color_matrix
-
-/datum/greyscale_layer/color_matrix/InternalGenerate(list/colors, list/render_steps, icon/new_icon)
- . = ..()
- new_icon.MapColors(arglist(color_matrix))
+ new_icon.Blend(colors[1], ICON_MULTIPLY)
return new_icon
/// A layer created by using another greyscale icon's configuration
/datum/greyscale_layer/reference
layer_type = "reference"
- var/icon_state = ""
+ var/icon_state
var/datum/greyscale_config/reference_type
/datum/greyscale_layer/reference/GetExpectedValues(list/required_values, list/optional_values)
@@ -140,17 +138,8 @@
. = ..()
return reference_type.Refresh(loadFromDisk=TRUE)
-/datum/greyscale_layer/reference/CrossVerify()
- . = ..()
- if(!reference_type.icon_states[icon_state])
- CRASH("[src] expects icon_state '[icon_state]' but referenced configuration '[reference_type]' does not have it.")
-
-/datum/greyscale_layer/reference/InternalGenerate(list/colors, list/render_steps, icon/new_icon)
- var/icon/generated_icon
+/datum/greyscale_layer/reference/InternalGenerate(list/colors, list/render_steps, do_bitmask, bitmask_step)
if(render_steps)
- var/list/reference_data = list()
- generated_icon = reference_type.GenerateBundle(colors, reference_data, new_icon)
- render_steps += reference_data[icon_state]
+ return reference_type.GenerateBundle(colors, render_steps)
else
- generated_icon = reference_type.Generate(colors.Join(), new_icon)
- return icon(generated_icon, icon_state)
+ return reference_type.Generate(colors.Join(), null, do_bitmask, bitmask_step)
diff --git a/code/datums/greyscale/state.dm b/code/datums/greyscale/state.dm
new file mode 100644
index 00000000000..f7ccb99fe21
--- /dev/null
+++ b/code/datums/greyscale/state.dm
@@ -0,0 +1,11 @@
+/// An icon state information for GAGS system
+/datum/greyscale_state
+ /// Flags for the bitmasking configuration
+ var/bitmask_config = NONE
+ var/default_state_if_bitmask = FALSE
+ /// List of `/datum/greyscale_layer`
+ var/list/layers
+
+/datum/greyscale_state/New(layers, bitmask_config, default_state_if_bitmask)
+ src.layers = layers
+ src.bitmask_config = bitmask_config
diff --git a/code/datums/materials/_material.dm b/code/datums/materials/_material.dm
index 7eed429ad3d..50b1ee7febc 100644
--- a/code/datums/materials/_material.dm
+++ b/code/datums/materials/_material.dm
@@ -46,6 +46,20 @@ Simple datum which is instanced once per type and is used for every object of sa
var/cached_texture_filter_icon
///What type of shard the material will shatter to
var/obj/item/shard_type
+ ///Icon for walls which are plated with this material
+ var/wall_greyscale_config = /datum/greyscale_config/solid_wall
+ ///Icon for reinforced walls which are plated with this material
+ var/reinforced_wall_greyscale_config = /datum/greyscale_config/reinforced_solid_wall
+ /// Icon for painted stripes on the walls
+ var/wall_stripe_greyscale_config = /datum/greyscale_config/wall_stripe
+ /// Color of walls constructed with this material as their plating
+ var/wall_color
+ /// Type of the wall this material makes when its used as a plating, null means can't make a wall out of it.
+ var/wall_type = /turf/closed/wall
+ /// Type of the false wall this material will make when used as its plating
+ var/false_wall_type
+ /// If true, walls plated with this material that have a reinforcement, will be hard to deconstruct
+ var/hard_wall_decon = FALSE
/** Handles initializing the material.
*
@@ -58,6 +72,12 @@ Simple datum which is instanced once per type and is used for every object of sa
else if(isnull(id))
id = type
+ if(!wall_color)
+ wall_color = greyscale_colors
+
+ if(wall_type && !false_wall_type)
+ false_wall_type = /obj/structure/falsewall
+
if(texture_layer_icon_state)
cached_texture_filter_icon = icon('icons/materials/composite.dmi', texture_layer_icon_state)
diff --git a/code/datums/materials/alloys.dm b/code/datums/materials/alloys.dm
index f92df020843..5cf866b2bab 100644
--- a/code/datums/materials/alloys.dm
+++ b/code/datums/materials/alloys.dm
@@ -40,6 +40,8 @@
sheet_type = /obj/item/stack/sheet/plasteel
categories = list(MAT_CATEGORY_RIGID=TRUE, MAT_CATEGORY_BASE_RECIPES=TRUE, MAT_CATEGORY_ITEM_MATERIAL=TRUE)
composition = list(/datum/material/iron=1, /datum/material/plasma=1)
+ wall_color = "#57575c"
+ hard_wall_decon = TRUE
/datum/material/alloy/plasteel/on_applied_obj(obj/item/target_item, amount, material_flags)
. = ..()
@@ -73,6 +75,11 @@
sheet_type = /obj/item/stack/sheet/mineral/plastitanium
categories = list(MAT_CATEGORY_RIGID=TRUE, MAT_CATEGORY_BASE_RECIPES=TRUE, MAT_CATEGORY_ITEM_MATERIAL=TRUE)
composition = list(/datum/material/titanium=1, /datum/material/plasma=1)
+ wall_greyscale_config = /datum/greyscale_config/metal_wall
+ wall_type = /turf/closed/wall/mineral/plastitanium
+ false_wall_type = /obj/structure/falsewall/plastitanium
+ hard_wall_decon = TRUE
+ wall_color = "#423b3b"
/** Plasmaglass
*
@@ -92,6 +99,7 @@
value_per_unit = 0.075
categories = list(MAT_CATEGORY_RIGID=TRUE, MAT_CATEGORY_BASE_RECIPES=TRUE, MAT_CATEGORY_ITEM_MATERIAL=TRUE)
composition = list(/datum/material/glass=1, /datum/material/plasma=0.5)
+ wall_type = null
/** Titaniumglass
*
@@ -110,6 +118,7 @@
value_per_unit = 0.04
categories = list(MAT_CATEGORY_RIGID=TRUE, MAT_CATEGORY_BASE_RECIPES=TRUE, MAT_CATEGORY_ITEM_MATERIAL=TRUE)
composition = list(/datum/material/glass=1, /datum/material/titanium=0.5)
+ wall_type = null
/** Plastitanium Glass
*
@@ -149,6 +158,7 @@
value_per_unit = 0.4
categories = list(MAT_CATEGORY_RIGID=TRUE, MAT_CATEGORY_BASE_RECIPES=TRUE, MAT_CATEGORY_ITEM_MATERIAL=TRUE)
composition = list(/datum/material/iron=2, /datum/material/plasma=2)
+ hard_wall_decon = TRUE
/datum/material/alloy/alien/on_applied_obj(obj/item/target_item, amount, material_flags)
. = ..()
diff --git a/code/datums/materials/basemats.dm b/code/datums/materials/basemats.dm
index c16526aface..660725390c2 100644
--- a/code/datums/materials/basemats.dm
+++ b/code/datums/materials/basemats.dm
@@ -7,6 +7,7 @@
categories = list(MAT_CATEGORY_ORE = TRUE, MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_BASE_RECIPES = TRUE, MAT_CATEGORY_ITEM_MATERIAL=TRUE)
sheet_type = /obj/item/stack/sheet/iron
value_per_unit = 0.0025
+ wall_color = "#57575c"
/datum/material/iron/on_accidental_mat_consumption(mob/living/carbon/victim, obj/item/source_item)
victim.apply_damage(10, BRUTE, BODY_ZONE_HEAD, wound_bonus = 5)
@@ -26,6 +27,7 @@
value_per_unit = 0.0025
beauty_modifier = 0.05
armor_modifiers = list(MELEE = 0.2, BULLET = 0.2, LASER = 0, ENERGY = 1, BOMB = 0, BIO = 0.2, FIRE = 1, ACID = 0.2)
+ wall_type = null
/datum/material/glass/on_accidental_mat_consumption(mob/living/carbon/victim, obj/item/source_item)
victim.apply_damage(10, BRUTE, BODY_ZONE_HEAD, wound_bonus = 5, sharpness = TRUE) //cronch
@@ -46,6 +48,8 @@ Unless you know what you're doing, only use the first three numbers. They're in
sheet_type = /obj/item/stack/sheet/mineral/silver
value_per_unit = 0.025
beauty_modifier = 0.075
+ wall_type = /turf/closed/wall/mineral/silver
+ false_wall_type = /obj/structure/falsewall/silver
/datum/material/silver/on_accidental_mat_consumption(mob/living/carbon/victim, obj/item/source_item)
victim.apply_damage(10, BRUTE, BODY_ZONE_HEAD, wound_bonus = 5)
@@ -63,6 +67,8 @@ Unless you know what you're doing, only use the first three numbers. They're in
value_per_unit = 0.0625
beauty_modifier = 0.15
armor_modifiers = list(MELEE = 1.1, BULLET = 1.1, LASER = 1.15, ENERGY = 1.15, BOMB = 1, BIO = 1, FIRE = 0.7, ACID = 1.1)
+ wall_type = /turf/closed/wall/mineral/gold
+ false_wall_type = /obj/structure/falsewall/gold
/datum/material/gold/on_accidental_mat_consumption(mob/living/carbon/victim, obj/item/source_item)
victim.apply_damage(10, BRUTE, BODY_ZONE_HEAD, wound_bonus = 5)
@@ -80,6 +86,8 @@ Unless you know what you're doing, only use the first three numbers. They're in
value_per_unit = 0.25
beauty_modifier = 0.3
armor_modifiers = list(MELEE = 1.3, BULLET = 1.3, LASER = 0.6, ENERGY = 1, BOMB = 1.2, BIO = 1, FIRE = 1, ACID = 1)
+ wall_type = /turf/closed/wall/mineral/diamond
+ false_wall_type = /obj/structure/falsewall/diamond
/datum/material/diamond/on_accidental_mat_consumption(mob/living/carbon/victim, obj/item/source_item)
victim.apply_damage(15, BRUTE, BODY_ZONE_HEAD, wound_bonus = 7)
@@ -96,6 +104,8 @@ Unless you know what you're doing, only use the first three numbers. They're in
value_per_unit = 0.05
beauty_modifier = 0.3 //It shines so beautiful
armor_modifiers = list(MELEE = 1.5, BULLET = 1.4, LASER = 0.5, ENERGY = 0.5, BOMB = 0, BIO = 0, FIRE = 1, ACID = 1)
+ wall_type = /turf/closed/wall/mineral/uranium
+ false_wall_type = /obj/structure/falsewall/uranium
/datum/material/uranium/on_applied(atom/source, amount, material_flags)
. = ..()
@@ -132,6 +142,8 @@ Unless you know what you're doing, only use the first three numbers. They're in
value_per_unit = 0.1
beauty_modifier = 0.15
armor_modifiers = list(MELEE = 1.4, BULLET = 0.7, LASER = 0, ENERGY = 1.2, BOMB = 0, BIO = 1.2, FIRE = 0, ACID = 0.5)
+ wall_type = /turf/closed/wall/mineral/plasma
+ false_wall_type = /obj/structure/falsewall/plasma
/datum/material/plasma/on_applied(atom/source, amount, material_flags)
. = ..()
@@ -163,6 +175,7 @@ Unless you know what you're doing, only use the first three numbers. They're in
beauty_modifier = 0.5
sheet_type = /obj/item/stack/sheet/bluespace_crystal
value_per_unit = 0.15
+ wall_type = null
/datum/material/bluespace/on_accidental_mat_consumption(mob/living/carbon/victim, obj/item/source_item)
victim.reagents.add_reagent(/datum/reagent/bluespace, rand(5, 8))
@@ -180,6 +193,8 @@ Unless you know what you're doing, only use the first three numbers. They're in
value_per_unit = 0.5
beauty_modifier = 0.5
armor_modifiers = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 100, BIO = 0, FIRE = 10, ACID = 0) //Clowns cant be blown away.
+ wall_type = /turf/closed/wall/mineral/bananium
+ false_wall_type = /obj/structure/falsewall/bananium
/datum/material/bananium/on_applied(atom/source, amount, material_flags)
. = ..()
@@ -206,8 +221,10 @@ Unless you know what you're doing, only use the first three numbers. They're in
categories = list(MAT_CATEGORY_ORE = TRUE, MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_BASE_RECIPES = TRUE, MAT_CATEGORY_ITEM_MATERIAL=TRUE)
sheet_type = /obj/item/stack/sheet/mineral/titanium
value_per_unit = 0.0625
- beauty_modifier = 0.05
armor_modifiers = list(MELEE = 1.35, BULLET = 1.3, LASER = 1.3, ENERGY = 1.25, BOMB = 1.25, BIO = 1, FIRE = 0.7, ACID = 1)
+ wall_greyscale_config = /datum/greyscale_config/metal_wall
+ wall_type = /turf/closed/wall/mineral/titanium
+ false_wall_type = /obj/structure/falsewall/titanium
/datum/material/titanium/on_accidental_mat_consumption(mob/living/carbon/victim, obj/item/source_item)
victim.apply_damage(15, BRUTE, BODY_ZONE_HEAD, wound_bonus = 7)
@@ -265,9 +282,13 @@ Unless you know what you're doing, only use the first three numbers. They're in
sheet_type = /obj/item/stack/sheet/mineral/wood
categories = list(MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_BASE_RECIPES = TRUE, MAT_CATEGORY_ITEM_MATERIAL=TRUE)
value_per_unit = 0.01
- beauty_modifier = 0.1
armor_modifiers = list(MELEE = 1.1, BULLET = 1.1, LASER = 0.4, ENERGY = 0.4, BOMB = 1, BIO = 0.2, FIRE = 0, ACID = 0.3)
texture_layer_icon_state = "woodgrain"
+ wall_greyscale_config = /datum/greyscale_config/wood_wall
+ wall_stripe_greyscale_config = /datum/greyscale_config/wood_wall_stripe
+ wall_color = "#93662C"
+ wall_type = /turf/closed/wall/mineral/wood
+ false_wall_type = /obj/structure/falsewall/wood
/datum/material/wood/on_applied_obj(obj/source, amount, material_flags)
. = ..()
@@ -404,9 +425,9 @@ Unless you know what you're doing, only use the first three numbers. They're in
sheet_type = /obj/item/stack/sheet/mineral/sandstone
value_per_unit = 0.0025
armor_modifiers = list(MELEE = 0.5, BULLET = 0.5, LASER = 1.25, ENERGY = 0.5, BOMB = 0.5, BIO = 0.25, FIRE = 1.5, ACID = 1.5)
- beauty_modifier = 0.3
turf_sound_override = FOOTSTEP_WOOD
texture_layer_icon_state = "brick"
+ wall_greyscale_config = /datum/greyscale_config/stone_wall
/datum/material/snow
name = "snow"
@@ -417,9 +438,9 @@ Unless you know what you're doing, only use the first three numbers. They're in
sheet_type = /obj/item/stack/sheet/mineral/snow
value_per_unit = 0.0025
armor_modifiers = list(MELEE = 0.25, BULLET = 0.25, LASER = 0.25, ENERGY = 0.25, BOMB = 0.25, BIO = 0.25, FIRE = 0.25, ACID = 1.5)
- beauty_modifier = 0.3
turf_sound_override = FOOTSTEP_SAND
texture_layer_icon_state = "sand"
+ wall_greyscale_config = /datum/greyscale_config/stone_wall
/datum/material/snow/on_accidental_mat_consumption(mob/living/carbon/victim, obj/item/source_item)
victim.reagents.add_reagent(/datum/reagent/water, rand(5, 10))
@@ -434,8 +455,8 @@ Unless you know what you're doing, only use the first three numbers. They're in
sheet_type = /obj/item/stack/sheet/runed_metal
value_per_unit = 0.75
armor_modifiers = list(MELEE = 1.2, BULLET = 1.2, LASER = 1, ENERGY = 1, BOMB = 1.2, BIO = 1.2, FIRE = 1.5, ACID = 1.5)
- beauty_modifier = -0.15
texture_layer_icon_state = "runed"
+ wall_greyscale_config = /datum/greyscale_config/cult_wall
/datum/material/runedmetal/on_accidental_mat_consumption(mob/living/carbon/victim, obj/item/source_item)
victim.reagents.add_reagent(/datum/reagent/fuel/unholywater, rand(8, 12))
diff --git a/code/datums/status_effects/debuffs/debuffs.dm b/code/datums/status_effects/debuffs/debuffs.dm
index 3709dc47836..8a44a973cb4 100644
--- a/code/datums/status_effects/debuffs/debuffs.dm
+++ b/code/datums/status_effects/debuffs/debuffs.dm
@@ -406,7 +406,7 @@
return ..()
/datum/status_effect/eldritch/on_apply()
- if(owner.mob_size >= MOB_SIZE_HUMAN)
+ if(owner.mob_size >= MOB_SIZE_HUMAN || ishuman(owner)) // This is horrible but I can't see a better way to do it
RegisterSignal(owner, COMSIG_ATOM_UPDATE_OVERLAYS, .proc/update_owner_underlay)
owner.update_icon(UPDATE_OVERLAYS)
return TRUE
diff --git a/code/game/machinery/doors/poddoor.dm b/code/game/machinery/doors/poddoor.dm
index 59356ad6b28..98d7a0d3d0c 100644
--- a/code/game/machinery/doors/poddoor.dm
+++ b/code/game/machinery/doors/poddoor.dm
@@ -15,6 +15,7 @@
damage_deflection = 70
can_open_with_hands = FALSE
block_air_zones = FALSE
+ smoothing_groups = list(SMOOTH_GROUP_SHUTTERS_BLASTDOORS)
var/datum/crafting_recipe/recipe_type = /datum/crafting_recipe/blast_doors
var/deconstruction = BLASTDOOR_FINISHED // deconstruction step
var/id = 1
diff --git a/code/game/machinery/washing_machine.dm b/code/game/machinery/washing_machine.dm
index 851b7a2c916..eb802b11592 100644
--- a/code/game/machinery/washing_machine.dm
+++ b/code/game/machinery/washing_machine.dm
@@ -294,10 +294,6 @@ GLOBAL_LIST_INIT(dye_registry, list(
addtimer(VARSET_CALLBACK(src, freshly_laundered, FALSE), 5 MINUTES, TIMER_UNIQUE | TIMER_OVERRIDE)
..()
-/obj/item/clothing/head/mob_holder/machine_wash(obj/machinery/washing_machine/washer)
- ..()
- held_mob.machine_wash(washer)
-
/obj/item/clothing/shoes/sneakers/machine_wash(obj/machinery/washing_machine/washer)
if(chained)
chained = FALSE
diff --git a/code/game/objects/effects/contraband.dm b/code/game/objects/effects/contraband.dm
index ee2dbb64203..77f2fe6386d 100644
--- a/code/game/objects/effects/contraband.dm
+++ b/code/game/objects/effects/contraband.dm
@@ -137,13 +137,6 @@
to_chat(user, span_warning("[P] has no poster... inside it? Inform a coder!"))
return
- // Deny placing posters on currently-diagonal walls, although the wall may change in the future.
- if (smoothing_flags & SMOOTH_DIAGONAL_CORNERS)
- for (var/O in overlays)
- var/image/I = O
- if(copytext(I.icon_state, 1, 3) == "d-") //3 == length("d-") + 1
- return
-
var/stuff_on_wall = 0
for(var/obj/O in contents) //Let's see if it already has a poster on it or too much stuff
if(istype(O, /obj/structure/sign/poster))
diff --git a/code/game/objects/effects/effect_system/effects_foam.dm b/code/game/objects/effects/effect_system/effects_foam.dm
index c1d02254383..2ba5541c969 100644
--- a/code/game/objects/effects/effect_system/effects_foam.dm
+++ b/code/game/objects/effects/effect_system/effects_foam.dm
@@ -266,18 +266,15 @@
opacity = TRUE // changed in New()
anchored = TRUE
layer = EDGED_TURF_LAYER
- plane = GAME_PLANE_UPPER
resistance_flags = FIRE_PROOF | ACID_PROOF
name = "foamed metal"
- desc = "A lightweight foamed metal wall that can be used as base to construct a wall."
+ desc = "A lightweight foamed metal wall."
gender = PLURAL
max_integrity = 20
can_atmos_pass = CANPASS_NEVER
obj_flags = CAN_BE_HIT | BLOCK_Z_IN_DOWN | BLOCK_Z_IN_UP
- ///Var used to prevent spamming of the construction sound
- var/next_beep = 0
-/obj/structure/foamedmetal/Initialize(mapload)
+/obj/structure/foamedmetal/Initialize()
. = ..()
update_nearby_tiles()
@@ -305,37 +302,6 @@
to_chat(user, span_warning("You hit [src] but bounce off it!"))
playsound(src.loc, 'sound/weapons/tap.ogg', 100, TRUE)
-/obj/structure/foamedmetal/attackby(obj/item/W, mob/user, params)
- ///A speed modifier for how fast the wall is build
- var/platingmodifier = 1
- if(HAS_TRAIT(user, TRAIT_QUICK_BUILD))
- platingmodifier = 0.7
- if(next_beep <= world.time)
- next_beep = world.time + 1 SECONDS
- playsound(src, 'sound/machines/clockcult/integration_cog_install.ogg', 50, TRUE)
- add_fingerprint(user)
-
- if(!istype(W, /obj/item/stack/sheet))
- return ..()
-
- var/obj/item/stack/sheet/sheet_for_plating = W
- if(istype(sheet_for_plating, /obj/item/stack/sheet/iron))
- if(sheet_for_plating.get_amount() < 2)
- to_chat(user, span_warning("You need two sheets of iron to finish a wall on [src]!"))
- return
- to_chat(user, span_notice("You start adding plating to the foam structure..."))
- if (do_after(user, 40*platingmodifier, target = src))
- if(!sheet_for_plating.use(2))
- return
- to_chat(user, span_notice("You add the plating."))
- var/turf/T = get_turf(src)
- T.PlaceOnTop(/turf/closed/wall/metal_foam_base)
- transfer_fingerprints_to(T)
- qdel(src)
- return
-
- add_hiddenprint(user)
-
/obj/structure/foamedmetal/iron
max_integrity = 50
icon_state = "ironfoam"
diff --git a/code/game/objects/effects/spawners/structure.dm b/code/game/objects/effects/spawners/structure.dm
index 40edbf913f0..77c97d71616 100644
--- a/code/game/objects/effects/spawners/structure.dm
+++ b/code/game/objects/effects/spawners/structure.dm
@@ -22,7 +22,7 @@ again.
icon = 'icons/obj/structures_spawners.dmi'
icon_state = "window_spawner"
name = "window spawner"
- spawn_list = list(/obj/structure/grille, /obj/structure/window/fulltile)
+ spawn_list = list(/obj/structure/low_wall, /obj/structure/window/fulltile)
dir = SOUTH
/obj/effect/spawner/structure/window/Initialize(mapload)
@@ -32,6 +32,11 @@ again.
var/turf/current_turf = get_turf(src)
current_turf.rcd_memory = RCD_MEMORY_WINDOWGRILLE
+/obj/effect/spawner/structure/window/wood
+ name = "window with wooden low wall spawner"
+ spawn_list = list(/obj/structure/low_wall/wood, /obj/structure/window/fulltile)
+
+
/obj/effect/spawner/structure/window/hollow
name = "hollow window spawner"
icon_state = "hwindow_spawner_full"
@@ -91,7 +96,16 @@ again.
/obj/effect/spawner/structure/window/reinforced
name = "reinforced window spawner"
icon_state = "rwindow_spawner"
- spawn_list = list(/obj/structure/grille, /obj/structure/window/reinforced/fulltile)
+ spawn_list = list(/obj/structure/low_wall, /obj/structure/window/reinforced/fulltile)
+
+/obj/effect/spawner/structure/window/reinforced/grille
+ name = "reinforced window with grille spawner"
+ spawn_list = list(/obj/structure/grille, /obj/structure/low_wall, /obj/structure/window/reinforced/fulltile)
+
+/obj/effect/spawner/structure/window/reinforced/wood
+ name = "reinforced window with wooden low wall spawner"
+ icon_state = "rwindow_spawner"
+ spawn_list = list(/obj/structure/low_wall/wood, /obj/structure/window/reinforced/fulltile)
/obj/effect/spawner/structure/window/hollow/reinforced
name = "hollow reinforced window spawner"
@@ -152,7 +166,11 @@ again.
/obj/effect/spawner/structure/window/reinforced/tinted
name = "tinted reinforced window spawner"
icon_state = "twindow_spawner"
- spawn_list = list(/obj/structure/grille, /obj/structure/window/reinforced/tinted/fulltile)
+ spawn_list = list(/obj/structure/low_wall, /obj/structure/window/reinforced/tinted/fulltile)
+
+/obj/effect/spawner/structure/window/reinforced/tinted/grille
+ name = "tinted reinforced window with grille spawner"
+ spawn_list = list(/obj/structure/grille, /obj/structure/low_wall, /obj/structure/window/reinforced/tinted/fulltile)
//bronze
@@ -167,7 +185,7 @@ again.
/obj/effect/spawner/structure/window/reinforced/shuttle
name = "shuttle window spawner"
icon_state = "swindow_spawner"
- spawn_list = list(/obj/structure/grille, /obj/structure/window/reinforced/shuttle)
+ spawn_list = list(/obj/structure/low_wall/titanium, /obj/structure/window/reinforced/shuttle)
//plastitanium window
@@ -175,7 +193,7 @@ again.
/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium
name = "plastitanium window spawner"
icon_state = "plastitaniumwindow_spawner"
- spawn_list = list(/obj/structure/grille, /obj/structure/window/reinforced/plasma/plastitanium)
+ spawn_list = list(/obj/structure/low_wall/plastitanium, /obj/structure/window/reinforced/plasma/plastitanium)
//ice window
@@ -183,7 +201,7 @@ again.
/obj/effect/spawner/structure/window/ice
name = "ice window spawner"
icon_state = "icewindow_spawner"
- spawn_list = list(/obj/structure/grille, /obj/structure/window/reinforced/fulltile/ice)
+ spawn_list = list(/obj/structure/low_wall, /obj/structure/window/reinforced/fulltile/ice)
//survival pod window
@@ -253,7 +271,7 @@ again.
/obj/effect/spawner/structure/window/plasma
name = "plasma window spawner"
icon_state = "pwindow_spawner"
- spawn_list = list(/obj/structure/grille, /obj/structure/window/plasma/fulltile)
+ spawn_list = list(/obj/structure/low_wall, /obj/structure/window/plasma/fulltile)
/obj/effect/spawner/structure/window/hollow/plasma
name = "hollow plasma window spawner"
@@ -314,7 +332,7 @@ again.
/obj/effect/spawner/structure/window/reinforced/plasma
name = "reinforced plasma window spawner"
icon_state = "prwindow_spawner"
- spawn_list = list(/obj/structure/grille, /obj/structure/window/reinforced/plasma/fulltile)
+ spawn_list = list(/obj/structure/grille, /obj/structure/low_wall, /obj/structure/window/reinforced/plasma/fulltile)
/obj/effect/spawner/structure/window/hollow/reinforced/plasma
name = "hollow reinforced plasma window spawner"
diff --git a/code/game/objects/items/RCD.dm b/code/game/objects/items/RCD.dm
index 5dc6b045242..52637a0ac6d 100644
--- a/code/game/objects/items/RCD.dm
+++ b/code/game/objects/items/RCD.dm
@@ -260,7 +260,7 @@ GLOBAL_VAR_INIT(icon_holographic_window, init_holographic_window())
// and referencing that. I don't know why.
/proc/init_holographic_wall()
return getHologramIcon(
- icon('icons/turf/walls/wall.dmi', "wall-0"),
+ icon('icons/turf/walls/legacy/wall.dmi', "wall-0"),
opacity = 1,
)
diff --git a/code/game/objects/items/paint.dm b/code/game/objects/items/paint.dm
index 8f3b55010bf..94bcc9676a3 100644
--- a/code/game/objects/items/paint.dm
+++ b/code/game/objects/items/paint.dm
@@ -16,6 +16,10 @@
/// How many uses are left
var/paintleft = 10
+/obj/item/paint/examine(mob/user)
+ . = ..()
+ . += span_notice("Paint wall stripes by right clicking a walls.")
+
/obj/item/paint/red
name = "red paint"
paint_color = COLOR_RED
@@ -56,6 +60,17 @@
name = "adaptive paint"
icon_state = "paint_neutral"
+/obj/item/paint/anycolor/examine(mob/user)
+ . = ..()
+ . += span_notice("Choose a basic color by using the paint.")
+ . += span_notice("Choose any color by alt-clicking the paint.")
+
+/obj/item/paint/anycolor/AltClick(mob/living/user)
+ var/new_paint_color = input(user, "Choose new paint color", "Paint Color", paint_color) as color|null
+ if(new_paint_color)
+ paint_color = new_paint_color
+ icon_state = "paint_neutral"
+
/obj/item/paint/anycolor/attack_self(mob/user)
var/list/possible_colors = list(
"black" = image(icon = src.icon, icon_state = "paint_black"),
@@ -102,28 +117,121 @@
return FALSE
return TRUE
-/obj/item/paint/afterattack(atom/target, mob/user, proximity)
+/obj/item/paint/afterattack(atom/target, mob/user, proximity, params)
. = ..()
+ if(.)
+ return
if(!proximity)
return
+ var/list/modifiers = params2list(params)
if(paintleft <= 0)
icon_state = "paint_empty"
return
+ if(istype(target, /obj/structure/low_wall))
+ var/obj/structure/low_wall/target_low_wall = target
+ if(LAZYACCESS(modifiers, RIGHT_CLICK))
+ target_low_wall.set_stripe_paint(paint_color)
+ else
+ target_low_wall.set_wall_paint(paint_color)
+ user.changeNext_move(CLICK_CD_MELEE)
+ user.visible_message(span_notice("[user] paints \the [target_low_wall]."), \
+ span_notice("You paint \the [target_low_wall]."))
+ return TRUE
+ if(iswall(target))
+ var/turf/closed/wall/target_wall = target
+ if(LAZYACCESS(modifiers, RIGHT_CLICK))
+ target_wall.paint_stripe(paint_color)
+ else
+ target_wall.paint_wall(paint_color)
+ user.changeNext_move(CLICK_CD_MELEE)
+ user.visible_message(span_notice("[user] paints \the [target_wall]."), \
+ span_notice("You paint \the [target_wall]."))
+ return TRUE
+ if(isfalsewall(target))
+ var/obj/structure/falsewall/target_falsewall = target
+ if(LAZYACCESS(modifiers, RIGHT_CLICK))
+ target_falsewall.paint_stripe(paint_color)
+ else
+ target_falsewall.paint_wall(paint_color)
+ user.changeNext_move(CLICK_CD_MELEE)
+ user.visible_message(span_notice("[user] paints \the [target_falsewall]."), \
+ span_notice("You paint \the [target_falsewall]."))
+ return TRUE
if(!isturf(target) || isspaceturf(target))
- return
+ return TRUE
target.add_atom_colour(paint_color, WASHABLE_COLOUR_PRIORITY)
-/obj/item/paint/paint_remover
+/obj/item/paint_remover
gender = PLURAL
name = "paint remover"
desc = "Used to remove color from anything."
+ icon = 'icons/obj/items_and_weapons.dmi'
icon_state = "paint_neutral"
+ inhand_icon_state = "paintcan"
+ w_class = WEIGHT_CLASS_NORMAL
+ resistance_flags = FLAMMABLE
+ max_integrity = 100
+
+/obj/item/paint_remover/examine(mob/user)
+ . = ..()
+ . += span_notice("Remove wall stripe paint by right-clicking a wall.")
-/obj/item/paint/paint_remover/afterattack(atom/target, mob/user, proximity)
+/obj/item/paint_remover/afterattack(atom/target, mob/user, proximity, params)
. = ..()
+ if(.)
+ return
if(!proximity)
return
- if(!isturf(target) || !isobj(target))
+ var/list/modifiers = params2list(params)
+ if(istype(target, /obj/structure/low_wall))
+ var/obj/structure/low_wall/target_low_wall = target
+ if(LAZYACCESS(modifiers, RIGHT_CLICK))
+ if(!target_low_wall.stripe_paint)
+ to_chat(user, span_warning("There is no paint to strip!"))
+ return TRUE
+ target_low_wall.set_stripe_paint(null)
+ else
+ if(!target_low_wall.wall_paint)
+ to_chat(user, span_warning("There is no paint to strip!"))
+ return TRUE
+ target_low_wall.set_wall_paint(null)
+ user.changeNext_move(CLICK_CD_MELEE)
+ user.visible_message(span_notice("[user] strips the paint from \the [target_low_wall]."), \
+ span_notice("You strip the paint from \the [target_low_wall]."))
+ return TRUE
+ if(iswall(target))
+ var/turf/closed/wall/target_wall = target
+ if(LAZYACCESS(modifiers, RIGHT_CLICK))
+ if(!target_wall.stripe_paint)
+ to_chat(user, span_warning("There is no paint to strip!"))
+ return TRUE
+ target_wall.paint_stripe(null)
+ else
+ if(!target_wall.wall_paint)
+ to_chat(user, span_warning("There is no paint to strip!"))
+ return TRUE
+ target_wall.paint_wall(null)
+ user.changeNext_move(CLICK_CD_MELEE)
+ user.visible_message(span_notice("[user] strips the paint from \the [target_wall]."), \
+ span_notice("You strip the paint from \the [target_wall]."))
+ return TRUE
+ if(isfalsewall(target))
+ var/obj/structure/falsewall/target_falsewall = target
+ if(LAZYACCESS(modifiers, RIGHT_CLICK))
+ if(!target_falsewall.stripe_paint)
+ to_chat(user, span_warning("There is no paint to strip!"))
+ return TRUE
+ target_falsewall.paint_stripe(null)
+ else
+ if(!target_falsewall.wall_paint)
+ to_chat(user, span_warning("There is no paint to strip!"))
+ return TRUE
+ target_falsewall.paint_wall(null)
+ user.changeNext_move(CLICK_CD_MELEE)
+ user.visible_message(span_notice("[user] strips the paint from \the [target_falsewall]."), \
+ span_notice("You strip the paint from \the [target_falsewall]."))
+ return TRUE
+ if(!isturf(target) && !isobj(target))
return
if(target.color != initial(target.color))
target.remove_atom_colour(WASHABLE_COLOUR_PRIORITY)
diff --git a/code/game/objects/items/stacks/sheets/glass.dm b/code/game/objects/items/stacks/sheets/glass.dm
index d8dd5a03f6e..149db4fbfbf 100644
--- a/code/game/objects/items/stacks/sheets/glass.dm
+++ b/code/game/objects/items/stacks/sheets/glass.dm
@@ -32,6 +32,7 @@ GLOBAL_LIST_INIT(glass_recipes, list ( \
matter_amount = 4
cost = 500
source = /datum/robot_energy_storage/glass
+ window_type = /obj/structure/window/fulltile
/obj/item/stack/sheet/glass/suicide_act(mob/living/carbon/user)
user.visible_message(span_suicide("[user] begins to slice [user.p_their()] neck with \the [src]! It looks like [user.p_theyre()] trying to commit suicide!"))
@@ -94,6 +95,7 @@ GLOBAL_LIST_INIT(pglass_recipes, list ( \
grind_results = list(/datum/reagent/silicon = 20, /datum/reagent/toxin/plasma = 10)
material_flags = NONE
tableVariant = /obj/structure/table/glass/plasmaglass
+ window_type = /obj/structure/window/plasma/fulltile
/obj/item/stack/sheet/plasmaglass/fifty
amount = 50
@@ -149,6 +151,7 @@ GLOBAL_LIST_INIT(reinforced_glass_recipes, list ( \
point_value = 4
matter_amount = 6
tableVariant = /obj/structure/table/reinforced/rglass
+ window_type = /obj/structure/window/reinforced/fulltile
/obj/item/stack/sheet/rglass/attackby(obj/item/W, mob/user, params)
add_fingerprint(user)
@@ -202,6 +205,7 @@ GLOBAL_LIST_INIT(prglass_recipes, list ( \
point_value = 23
matter_amount = 8
tableVariant = /obj/structure/table/reinforced/plasmarglass
+ window_type = /obj/structure/window/reinforced/plasma/fulltile
/obj/item/stack/sheet/plasmarglass/get_main_recipes()
. = ..()
@@ -224,6 +228,7 @@ GLOBAL_LIST_INIT(titaniumglass_recipes, list(
resistance_flags = ACID_PROOF
merge_type = /obj/item/stack/sheet/titaniumglass
tableVariant = /obj/structure/table/reinforced/titaniumglass
+ window_type = /obj/structure/window/reinforced/shuttle
/obj/item/stack/sheet/titaniumglass/fifty
amount = 50
@@ -250,6 +255,7 @@ GLOBAL_LIST_INIT(plastitaniumglass_recipes, list(
resistance_flags = ACID_PROOF
merge_type = /obj/item/stack/sheet/plastitaniumglass
tableVariant = /obj/structure/table/reinforced/plastitaniumglass
+ window_type = /obj/structure/window/reinforced/plasma/plastitanium
/obj/item/stack/sheet/plastitaniumglass/get_main_recipes()
. = ..()
diff --git a/code/game/objects/items/stacks/sheets/sheet_types.dm b/code/game/objects/items/stacks/sheets/sheet_types.dm
index 4ec51231657..c477fc1815d 100644
--- a/code/game/objects/items/stacks/sheets/sheet_types.dm
+++ b/code/game/objects/items/stacks/sheets/sheet_types.dm
@@ -73,6 +73,7 @@ GLOBAL_LIST_INIT(metal_recipes, list ( \
new/datum/stack_recipe("iron rod", /obj/item/stack/rods, 1, 2, 60), \
null, \
new/datum/stack_recipe("wall girders (anchored)", /obj/structure/girder, 2, time = 40, one_per_turf = TRUE, on_floor = TRUE, trait_booster = TRAIT_QUICK_BUILD, trait_modifier = 0.75), \
+ new/datum/stack_recipe("low wall", /obj/structure/low_wall, 2, time = 40, one_per_turf = TRUE, on_floor = TRUE, trait_booster = TRAIT_QUICK_BUILD, trait_modifier = 0.75), \
null, \
new/datum/stack_recipe("tram wall girders (anchored)", /obj/structure/girder/tram, 2, time = 40, one_per_turf = TRUE, on_floor = FALSE, on_tram = TRUE, trait_booster = TRAIT_QUICK_BUILD, trait_modifier = 0.75), \
null, \
@@ -284,6 +285,8 @@ GLOBAL_LIST_INIT(wood_recipes, list ( \
new /datum/stack_recipe("pew (right)", /obj/structure/chair/pew/right, 3, one_per_turf = TRUE, on_floor = TRUE)
)),
null, \
+ new/datum/stack_recipe("low wall", /obj/structure/low_wall/wood, 2, time = 40, one_per_turf = TRUE, on_floor = TRUE, trait_booster = TRAIT_QUICK_BUILD, trait_modifier = 0.75), \
+ null, \
))
/obj/item/stack/sheet/mineral/wood
@@ -345,7 +348,6 @@ GLOBAL_LIST_INIT(bamboo_recipes, list ( \
merge_type = /obj/item/stack/sheet/mineral/bamboo
grind_results = list(/datum/reagent/cellulose = 10)
material_type = /datum/material/bamboo
- walltype = /turf/closed/wall/mineral/bamboo
/obj/item/stack/sheet/mineral/bamboo/get_main_recipes()
. = ..()
@@ -661,6 +663,7 @@ GLOBAL_LIST_INIT(bronze_recipes, list ( \
material_type = /datum/material/bronze
walltype = /turf/closed/wall/mineral/bronze
has_unique_girder = TRUE
+ window_type = /obj/structure/window/bronze/fulltile
/obj/item/stack/sheet/bronze/get_main_recipes()
. = ..()
diff --git a/code/game/objects/items/stacks/sheets/sheets.dm b/code/game/objects/items/stacks/sheets/sheets.dm
index 99a26832268..9e7110e29c9 100644
--- a/code/game/objects/items/stacks/sheets/sheets.dm
+++ b/code/game/objects/items/stacks/sheets/sheets.dm
@@ -17,6 +17,8 @@
///What type of wall does this sheet spawn
var/walltype
var/tram_wall_type
+ /// What type of fulltile window this sheet can construct.
+ var/window_type
/obj/item/stack/sheet/Initialize(mapload, new_amount, merge = TRUE, list/mat_override=null, mat_amt=1)
. = ..()
@@ -47,3 +49,38 @@
user.visible_message(span_notice("[user] shatters the sheet of [name] on the floor, leaving [english_list(shards)]."), \
span_notice("You shatter the sheet of [name] on the floor, leaving [english_list(shards)]."))
return TRUE
+
+/// Mob action to try and install a window if the sheet can do that
+/obj/item/stack/sheet/proc/try_install_window(mob/living/user, turf/location, obj/mounted_on)
+ /// If we can't create a window out of this type, return FALSE to not affect attack chain.
+ if(!window_type)
+ return FALSE
+ if(get_amount() < SHEETS_FOR_FULLTILE_WINDOW)
+ to_chat(user, span_warning("You need at least two sheets of glass for that!"))
+ return TRUE
+ var/had_mounted_object = FALSE
+ if(mounted_on)
+ had_mounted_object = TRUE
+ if(!mounted_on.anchored)
+ to_chat(user, span_warning("[mounted_on] needs to be fastened to the floor first!"))
+ return TRUE
+ var/obj/structure/window/existing_window = locate() in location
+ if(existing_window && existing_window.fulltile)
+ to_chat(user, span_warning("There is already a window there!"))
+ return TRUE
+ /// Dense turf (most likely closed). Why check types of if you can check .density
+ if(location.density)
+ to_chat(user, span_warning("You can't install the window there!"))
+ return TRUE
+ to_chat(user, span_notice("You start placing the window..."))
+ var/atom/target = mounted_on || location
+ if(do_after(user, 2 SECONDS, target = target))
+ /// Something we were mounting the window on was deleted, or unanchored
+ if(had_mounted_object && (QDELETED(mounted_on) || !mounted_on.anchored))
+ return TRUE
+ var/obj/structure/window/window = new window_type(location)
+ window.set_anchored(FALSE)
+ window.state = 0
+ use(SHEETS_FOR_FULLTILE_WINDOW)
+ to_chat(user, span_notice("You place \the [window] on \the [target]."))
+ return TRUE
diff --git a/code/game/objects/items/storage/belt.dm b/code/game/objects/items/storage/belt.dm
index f4a43045208..3fec5c435b5 100644
--- a/code/game/objects/items/storage/belt.dm
+++ b/code/game/objects/items/storage/belt.dm
@@ -671,7 +671,7 @@
/obj/item/clothing/gloves,
/obj/item/melee/flyswatter,
/obj/item/assembly/mousetrap,
- /obj/item/paint/paint_remover,
+ /obj/item/paint_remover,
/obj/item/pushbroom
))
diff --git a/code/game/objects/items/storage/boxes.dm b/code/game/objects/items/storage/boxes.dm
index 812f9b768b2..dbd994e17d9 100644
--- a/code/game/objects/items/storage/boxes.dm
+++ b/code/game/objects/items/storage/boxes.dm
@@ -856,9 +856,8 @@
/obj/item/storage/box/clown/suicide_act(mob/user)
user.visible_message(span_suicide("[user] opens [src] and gets consumed by [p_them()]! It looks like [user.p_theyre()] trying to commit suicide!"))
playsound(user, 'sound/misc/scary_horn.ogg', 70, vary = TRUE)
- var/obj/item/clothing/head/mob_holder/consumed = new(src, user)
- user.forceMove(consumed)
- consumed.desc = "It's [user.real_name]! It looks like [user.p_they()] committed suicide!"
+ forceMove(get_turf(user))
+ new /obj/item/mob_holder(src, user) // Put the mob in the box
return OXYLOSS
//////
diff --git a/code/game/objects/structures/crates_lockers/closets/job_closets.dm b/code/game/objects/structures/crates_lockers/closets/job_closets.dm
index b02f7e9e74a..a2a28de7c79 100644
--- a/code/game/objects/structures/crates_lockers/closets/job_closets.dm
+++ b/code/game/objects/structures/crates_lockers/closets/job_closets.dm
@@ -55,7 +55,7 @@
new /obj/item/clothing/under/rank/civilian/janitor(src)
new /obj/item/clothing/gloves/color/black(src)
new /obj/item/clothing/head/soft/purple(src)
- new /obj/item/paint/paint_remover(src)
+ new /obj/item/paint_remover(src)
new /obj/item/melee/flyswatter(src)
new /obj/item/flashlight(src)
for(var/i in 1 to 3)
diff --git a/code/game/objects/structures/false_walls.dm b/code/game/objects/structures/false_walls.dm
index 172d42c5c39..74f14da5c25 100644
--- a/code/game/objects/structures/false_walls.dm
+++ b/code/game/objects/structures/false_walls.dm
@@ -5,34 +5,64 @@
name = "wall"
desc = "A huge chunk of metal used to separate rooms."
anchored = TRUE
- icon = 'icons/turf/walls/wall.dmi'
+ icon = 'icons/turf/walls/solid_wall.dmi'
icon_state = "wall-0"
base_icon_state = "wall"
+ color = "#57575c" //To display in mapping softwares
layer = LOW_OBJ_LAYER
density = TRUE
opacity = TRUE
max_integrity = 100
smoothing_flags = SMOOTH_BITMASK
smoothing_groups = list(SMOOTH_GROUP_CLOSED_TURFS, SMOOTH_GROUP_WALLS)
- canSmoothWith = list(SMOOTH_GROUP_WALLS)
+ canSmoothWith = list(SMOOTH_GROUP_SHUTTERS_BLASTDOORS, SMOOTH_GROUP_WALLS, SMOOTH_GROUP_AIRLOCK, SMOOTH_GROUP_WINDOW_FULLTILE)
can_be_unanchored = FALSE
can_atmos_pass = CANPASS_PROC
rad_insulation = RAD_MEDIUM_INSULATION
material_flags = MATERIAL_EFFECTS
- var/mineral = /obj/item/stack/sheet/iron
- var/mineral_amount = 2
- var/walltype = /turf/closed/wall
- var/girder_type = /obj/structure/girder/displaced
+ greyscale_config = /datum/greyscale_config/low_wall
+ /// Material type of the plating
+ var/plating_material = /datum/material/iron
+ /// Material type of the reinforcement
+ var/reinf_material
+ /// Paint of the wall
+ var/wall_paint
+ /// Stripe paint of the wall
+ var/stripe_paint
var/opening = FALSE
+ /// Typecache of the neighboring objects that we want to neighbor stripe overlay with
+ var/static/list/neighbor_typecache
-/obj/structure/falsewall/Initialize(mapload)
+/obj/structure/falsewall/Initialize()
. = ..()
- var/obj/item/stack/initialized_mineral = new mineral // Okay this kinda sucks.
- set_custom_materials(initialized_mineral.mats_per_unit, mineral_amount)
- qdel(initialized_mineral)
+ color = null //Clear the color that's a mapping aid
update_nearby_tiles()
+ set_wall_information(plating_material, reinf_material, wall_paint, stripe_paint)
+/obj/structure/falsewall/update_greyscale()
+ greyscale_colors = get_wall_color()
+ return ..()
+
+/obj/structure/falsewall/proc/get_wall_color()
+ var/wall_color = wall_paint
+ if(!wall_color)
+ var/datum/material/plating_mat_ref = GET_MATERIAL_REF(plating_material)
+ wall_color = plating_mat_ref.wall_color
+ return wall_color
+
+/obj/structure/falsewall/proc/get_stripe_color()
+ var/stripe_color = stripe_paint
+ if(!stripe_color)
+ stripe_color = get_wall_color()
+ return stripe_color
+
+/obj/structure/falsewall/update_name()
+ . = ..()
+ if(reinf_material)
+ name = "reinforced wall"
+ else
+ name = "wall"
/obj/structure/falsewall/attack_hand(mob/user, list/modifiers)
if(opening)
@@ -82,9 +112,38 @@
icon_state = density ? "[base_icon_state]-[smoothing_junction]" : "fwall_open"
return ..()
+/// Partially copypasted from /turf/closed/wall
+/obj/structure/falsewall/update_overlays()
+ //Updating the unmanaged wall overlays (unmanaged for optimisations)
+ overlays.Cut()
+ if(density && !opening)
+ if(stripe_paint)
+ var/datum/material/plating_mat_ref = GET_MATERIAL_REF(plating_material)
+ var/icon/stripe_icon = SSgreyscale.GetColoredIconByType(plating_mat_ref.wall_stripe_greyscale_config, get_stripe_color())
+ var/mutable_appearance/smoothed_stripe = mutable_appearance(stripe_icon, icon_state)
+ overlays += smoothed_stripe
+ var/neighbor_stripe = NONE
+ if(!neighbor_typecache)
+ neighbor_typecache = typecacheof(list(/obj/machinery/door/airlock, /obj/structure/window/reinforced/fulltile, /obj/structure/window/fulltile, /obj/structure/window/reinforced/shuttle, /obj/machinery/door/poddoor))
+ for(var/cardinal in GLOB.cardinals)
+ var/turf/step_turf = get_step(src, cardinal)
+ for(var/atom/movable/movable_thing as anything in step_turf)
+ if(neighbor_typecache[movable_thing.type])
+ neighbor_stripe ^= cardinal
+ break
+ if(neighbor_stripe)
+ var/icon/neighbor_icon = SSgreyscale.GetColoredIconByType(/datum/greyscale_config/wall_neighbor_stripe, get_stripe_color())
+ var/mutable_appearance/neighb_stripe_appearace = mutable_appearance(neighbor_icon, "stripe-[neighbor_stripe]")
+ overlays += neighb_stripe_appearace
+ //And letting anything else that may want to render on the wall to work (ie components)
+ return ..()
+
/obj/structure/falsewall/proc/ChangeToWall(delete = 1)
+ var/datum/material/plating_mat_ref = GET_MATERIAL_REF(plating_material)
var/turf/T = get_turf(src)
- T.PlaceOnTop(walltype)
+ T.PlaceOnTop(plating_mat_ref.wall_type)
+ var/turf/closed/wall/placed_wall = T
+ placed_wall.set_wall_information(plating_material, reinf_material, wall_paint, stripe_paint)
if(delete)
qdel(src)
return T
@@ -117,8 +176,45 @@
return TOOL_ACT_TOOLTYPE_SUCCESS
return
+/// Painfully copypasted from /turf/closed/wall
+/obj/structure/falsewall/proc/paint_wall(new_paint)
+ wall_paint = new_paint
+ update_greyscale()
+ update_appearance()
+
+/// Painfully copypasted from /turf/closed/wall
+/obj/structure/falsewall/proc/paint_stripe(new_paint)
+ stripe_paint = new_paint
+ update_appearance()
+
+/// Painfully copypasted from /turf/closed/wall
+/obj/structure/falsewall/proc/set_wall_information(plating_mat, reinf_mat, new_paint, new_stripe_paint)
+ wall_paint = new_paint
+ stripe_paint = new_stripe_paint
+ set_materials(plating_mat, reinf_mat)
+
+/// Painfully copypasted from /turf/closed/wall
+/obj/structure/falsewall/proc/set_materials(plating_mat, reinf_mat)
+ var/datum/material/plating_mat_ref
+ if(plating_mat)
+ plating_mat_ref = GET_MATERIAL_REF(plating_mat)
+ var/datum/material/reinf_mat_ref
+ if(reinf_mat)
+ reinf_mat_ref = GET_MATERIAL_REF(reinf_mat)
+
+ if(reinf_mat_ref)
+ greyscale_config = plating_mat_ref.reinforced_wall_greyscale_config
+ else
+ greyscale_config = plating_mat_ref.wall_greyscale_config
+
+ plating_material = plating_mat
+ reinf_material = reinf_mat
+
+ update_greyscale()
+ update_appearance()
+
/obj/structure/falsewall/attackby(obj/item/W, mob/user, params)
- if(!opening)
+ if(opening)
to_chat(user, span_warning("You must wait until the door has stopped moving!"))
return
return ..()
@@ -134,10 +230,9 @@
/obj/structure/falsewall/deconstruct(disassembled = TRUE)
if(!(flags_1 & NODECONSTRUCT_1))
if(disassembled)
- new girder_type(loc)
- if(mineral_amount)
- for(var/i in 1 to mineral_amount)
- new mineral(loc)
+ new /obj/structure/girder(src.loc, reinf_material, wall_paint, stripe_paint, TRUE)
+ var/datum/material/plating_mat_ref = GET_MATERIAL_REF(plating_material)
+ new plating_mat_ref.sheet_type(src.loc, 2)
qdel(src)
/obj/structure/falsewall/get_dumping_location()
@@ -154,12 +249,8 @@
/obj/structure/falsewall/reinforced
name = "reinforced wall"
desc = "A huge chunk of reinforced metal used to separate rooms."
- icon = 'icons/turf/walls/reinforced_wall.dmi'
- icon_state = "reinforced_wall-0"
- base_icon_state = "reinforced_wall"
- walltype = /turf/closed/wall/r_wall
- mineral = /obj/item/stack/sheet/plasteel
- smoothing_flags = SMOOTH_BITMASK
+ icon = 'icons/turf/walls/solid_wall_reinforced.dmi'
+ reinf_material = /datum/material/alloy/plasteel
/obj/structure/falsewall/reinforced/examine_status(mob/user)
to_chat(user, span_notice("The outer grille is fully intact."))
@@ -177,14 +268,7 @@
/obj/structure/falsewall/uranium
name = "uranium wall"
desc = "A wall with uranium plating. This is probably a bad idea."
- icon = 'icons/turf/walls/uranium_wall.dmi'
- icon_state = "uranium_wall-0"
- base_icon_state = "uranium_wall"
- mineral = /obj/item/stack/sheet/mineral/uranium
- walltype = /turf/closed/wall/mineral/uranium
- smoothing_flags = SMOOTH_BITMASK
- smoothing_groups = list(SMOOTH_GROUP_WALLS, SMOOTH_GROUP_URANIUM_WALLS)
- canSmoothWith = list(SMOOTH_GROUP_URANIUM_WALLS)
+ plating_material = /datum/material/uranium
var/active = null
var/last_event = 0
@@ -220,146 +304,64 @@
/obj/structure/falsewall/gold
name = "gold wall"
desc = "A wall with gold plating. Swag!"
- icon = 'icons/turf/walls/gold_wall.dmi'
- icon_state = "gold_wall-0"
- base_icon_state = "gold_wall"
- mineral = /obj/item/stack/sheet/mineral/gold
- walltype = /turf/closed/wall/mineral/gold
- smoothing_flags = SMOOTH_BITMASK
- smoothing_groups = list(SMOOTH_GROUP_WALLS, SMOOTH_GROUP_GOLD_WALLS)
- canSmoothWith = list(SMOOTH_GROUP_GOLD_WALLS)
+ plating_material = /datum/material/gold
/obj/structure/falsewall/silver
name = "silver wall"
desc = "A wall with silver plating. Shiny."
- icon = 'icons/turf/walls/silver_wall.dmi'
- icon_state = "silver_wall-0"
- base_icon_state = "silver_wall"
- mineral = /obj/item/stack/sheet/mineral/silver
- walltype = /turf/closed/wall/mineral/silver
- smoothing_flags = SMOOTH_BITMASK
- smoothing_groups = list(SMOOTH_GROUP_WALLS, SMOOTH_GROUP_SILVER_WALLS)
- canSmoothWith = list(SMOOTH_GROUP_SILVER_WALLS)
+ plating_material = /datum/material/silver
/obj/structure/falsewall/diamond
name = "diamond wall"
desc = "A wall with diamond plating. You monster."
- icon = 'icons/turf/walls/diamond_wall.dmi'
- icon_state = "diamond_wall-0"
- base_icon_state = "diamond_wall"
- mineral = /obj/item/stack/sheet/mineral/diamond
- walltype = /turf/closed/wall/mineral/diamond
- smoothing_flags = SMOOTH_BITMASK
- smoothing_groups = list(SMOOTH_GROUP_WALLS, SMOOTH_GROUP_DIAMOND_WALLS)
- canSmoothWith = list(SMOOTH_GROUP_DIAMOND_WALLS)
+ plating_material = /datum/material/diamond
max_integrity = 800
/obj/structure/falsewall/plasma
name = "plasma wall"
desc = "A wall with plasma plating. This is definitely a bad idea."
- icon = 'icons/turf/walls/plasma_wall.dmi'
- icon_state = "plasma_wall-0"
- base_icon_state = "plasma_wall"
- mineral = /obj/item/stack/sheet/mineral/plasma
- walltype = /turf/closed/wall/mineral/plasma
- smoothing_flags = SMOOTH_BITMASK
- smoothing_groups = list(SMOOTH_GROUP_WALLS, SMOOTH_GROUP_PLASMA_WALLS)
- canSmoothWith = list(SMOOTH_GROUP_PLASMA_WALLS)
+ plating_material = /datum/material/plasma
/obj/structure/falsewall/bananium
name = "bananium wall"
desc = "A wall with bananium plating. Honk!"
- icon = 'icons/turf/walls/bananium_wall.dmi'
- icon_state = "bananium_wall-0"
- base_icon_state = "bananium_wall"
- mineral = /obj/item/stack/sheet/mineral/bananium
- walltype = /turf/closed/wall/mineral/bananium
- smoothing_flags = SMOOTH_BITMASK
- smoothing_groups = list(SMOOTH_GROUP_WALLS, SMOOTH_GROUP_BANANIUM_WALLS)
- canSmoothWith = list(SMOOTH_GROUP_BANANIUM_WALLS)
+ plating_material = /datum/material/bananium
/obj/structure/falsewall/sandstone
name = "sandstone wall"
desc = "A wall with sandstone plating. Rough."
- icon = 'icons/turf/walls/sandstone_wall.dmi'
- icon_state = "sandstone_wall-0"
- base_icon_state = "sandstone_wall"
- mineral = /obj/item/stack/sheet/mineral/sandstone
- walltype = /turf/closed/wall/mineral/sandstone
- smoothing_flags = SMOOTH_BITMASK
- smoothing_groups = list(SMOOTH_GROUP_WALLS, SMOOTH_GROUP_SANDSTONE_WALLS)
- canSmoothWith = list(SMOOTH_GROUP_SANDSTONE_WALLS)
+ icon = 'icons/turf/walls/stone_wall.dmi'
+ plating_material = /datum/material/sandstone
/obj/structure/falsewall/wood
name = "wooden wall"
desc = "A wall with wooden plating. Stiff."
icon = 'icons/turf/walls/wood_wall.dmi'
- icon_state = "wood_wall-0"
- base_icon_state = "wood_wall"
- mineral = /obj/item/stack/sheet/mineral/wood
- walltype = /turf/closed/wall/mineral/wood
- smoothing_flags = SMOOTH_BITMASK
- smoothing_groups = list(SMOOTH_GROUP_WALLS, SMOOTH_GROUP_WOOD_WALLS)
- canSmoothWith = list(SMOOTH_GROUP_WOOD_WALLS)
-
-/obj/structure/falsewall/bamboo
- name = "bamboo wall"
- desc = "A wall with bamboo finish. Zen."
- icon = 'icons/turf/walls/bamboo_wall.dmi'
- icon_state = "bamboo"
- mineral = /obj/item/stack/sheet/mineral/bamboo
- walltype = /turf/closed/wall/mineral/bamboo
- smoothing_flags = SMOOTH_BITMASK
- smoothing_groups = list(SMOOTH_GROUP_CLOSED_TURFS, SMOOTH_GROUP_WALLS, SMOOTH_GROUP_BAMBOO_WALLS)
- canSmoothWith = list(SMOOTH_GROUP_BAMBOO_WALLS)
+ plating_material = /datum/material/wood
/obj/structure/falsewall/iron
name = "rough iron wall"
desc = "A wall with rough metal plating."
- icon = 'icons/turf/walls/iron_wall.dmi'
- icon_state = "iron_wall-0"
- base_icon_state = "iron_wall"
- mineral = /obj/item/stack/rods
- mineral_amount = 5
- walltype = /turf/closed/wall/mineral/iron
base_icon_state = "iron_wall"
- smoothing_flags = SMOOTH_BITMASK
- smoothing_groups = list(SMOOTH_GROUP_WALLS, SMOOTH_GROUP_IRON_WALLS)
- canSmoothWith = list(SMOOTH_GROUP_IRON_WALLS)
/obj/structure/falsewall/abductor
name = "alien wall"
desc = "A wall with alien alloy plating."
- icon = 'icons/turf/walls/abductor_wall.dmi'
- icon_state = "abductor_wall-0"
- base_icon_state = "abductor_wall"
- mineral = /obj/item/stack/sheet/mineral/abductor
- walltype = /turf/closed/wall/mineral/abductor
- smoothing_flags = SMOOTH_BITMASK
- smoothing_groups = list(SMOOTH_GROUP_WALLS, SMOOTH_GROUP_ABDUCTOR_WALLS)
- canSmoothWith = list(SMOOTH_GROUP_ABDUCTOR_WALLS)
+ plating_material = /datum/material/alloy/alien
/obj/structure/falsewall/titanium
name = "wall"
desc = "A light-weight titanium wall used in shuttles."
- icon = 'icons/turf/walls/shuttle_wall.dmi'
- icon_state = "shuttle_wall-0"
- base_icon_state = "shuttle_wall"
- mineral = /obj/item/stack/sheet/mineral/titanium
- walltype = /turf/closed/wall/mineral/titanium
- smoothing_flags = SMOOTH_BITMASK
- smoothing_groups = list(SMOOTH_GROUP_WALLS, SMOOTH_GROUP_TITANIUM_WALLS)
- canSmoothWith = list(SMOOTH_GROUP_TITANIUM_WALLS, SMOOTH_GROUP_AIRLOCK, SMOOTH_GROUP_SHUTTLE_PARTS)
+ icon = 'icons/turf/walls/metal_wall.dmi'
+ plating_material = /datum/material/titanium
+ smoothing_groups = list(SMOOTH_GROUP_WALLS)
+ canSmoothWith = list(SMOOTH_GROUP_SHUTTERS_BLASTDOORS, SMOOTH_GROUP_WALLS, SMOOTH_GROUP_AIRLOCK, SMOOTH_GROUP_WINDOW_FULLTILE, SMOOTH_GROUP_SHUTTLE_PARTS)
/obj/structure/falsewall/plastitanium
name = "wall"
desc = "An evil wall of plasma and titanium."
- icon = 'icons/turf/walls/plastitanium_wall.dmi'
- icon_state = "plastitanium_wall-0"
- base_icon_state = "plastitanium_wall"
- mineral = /obj/item/stack/sheet/mineral/plastitanium
- walltype = /turf/closed/wall/mineral/plastitanium
- smoothing_flags = SMOOTH_BITMASK
- smoothing_groups = list(SMOOTH_GROUP_WALLS, SMOOTH_GROUP_PLASTITANIUM_WALLS)
- canSmoothWith = list(SMOOTH_GROUP_PLASTITANIUM_WALLS, SMOOTH_GROUP_AIRLOCK, SMOOTH_GROUP_SHUTTLE_PARTS)
+ icon = 'icons/turf/walls/metal_wall.dmi'
+ plating_material = /datum/material/alloy/plastitanium
+ smoothing_groups = list(SMOOTH_GROUP_WALLS)
+ canSmoothWith = list(SMOOTH_GROUP_SHUTTERS_BLASTDOORS, SMOOTH_GROUP_WALLS, SMOOTH_GROUP_AIRLOCK, SMOOTH_GROUP_WINDOW_FULLTILE, SMOOTH_GROUP_SHUTTLE_PARTS)
diff --git a/code/game/objects/structures/girders.dm b/code/game/objects/structures/girders.dm
index f10298aa139..3df6b6e5364 100644
--- a/code/game/objects/structures/girders.dm
+++ b/code/game/objects/structures/girders.dm
@@ -1,3 +1,7 @@
+#define GIRDER_PASSCHANCE_NORMAL 20
+#define GIRDER_PASSCHANCE_UNANCHORED 25
+#define GIRDER_PASSCHANCE_REINFORCED 0
+
/obj/structure/girder
name = "girder"
icon_state = "girder"
@@ -8,35 +12,60 @@
rad_insulation = RAD_VERY_LIGHT_INSULATION
can_atmos_pass = CANPASS_ALWAYS
var/state = GIRDER_NORMAL
- var/girderpasschance = 20 // percentage chance that a projectile passes through the girder.
+ var/girderpasschance = GIRDER_PASSCHANCE_NORMAL // percentage chance that a projectile passes through the girder.
var/can_displace = TRUE //If the girder can be moved around by wrenching it
var/next_beep = 0 //Prevents spamming of the construction sound
- /// The material cost to construct something on the girder
- var/static/list/construction_cost = list(
- /obj/item/stack/sheet/iron = 2,
- /obj/item/stack/rods = 5,
- /obj/item/stack/sheet/plasteel = 2,
- /obj/item/stack/sheet/bronze = 2,
- /obj/item/stack/sheet/runed_metal = 1,
- exotic_material = 2 // this needs to be refactored properly
- )
+ /// What material is this girder reinforced by
+ var/reinforced_material
+ /// Paint to apply to the wall built. Matters for deconstructed and reconstructed walls
+ var/wall_paint
+ /// Stripe paint to apply to the wall built. Matters for deconstructed and reconstructed walls
+ var/stripe_paint
+
+/obj/structure/girder/Initialize(mapload, reinforced_mat, new_paint, new_stripe_paint, unanchored)
+ . = ..()
+ wall_paint = new_paint
+ stripe_paint = new_stripe_paint
+ if(unanchored)
+ set_anchored(FALSE)
+ girderpasschance = GIRDER_PASSCHANCE_UNANCHORED
+ if(reinforced_mat)
+ reinforced_material = reinforced_mat
+ state = GIRDER_REINF
+ update_appearance()
+
+/obj/structure/girder/update_name()
+ . = ..()
+ if(!anchored)
+ name = "displaced girder"
+ else if (state == GIRDER_NORMAL)
+ name = "girder"
+ else
+ name = "reinforced girder"
+
+/obj/structure/girder/update_icon_state()
+ . = ..()
+ if(!anchored)
+ icon_state = "displaced"
+ else if (state == GIRDER_NORMAL)
+ icon_state = "girder"
+ else
+ icon_state = "reinforced"
/obj/structure/girder/examine(mob/user)
. = ..()
switch(state)
if(GIRDER_REINF)
- . += span_notice("The support struts are screwed in place.")
+ . += span_notice("It's reinforcement can be screwed off.")
if(GIRDER_REINF_STRUTS)
- . += span_notice("The support struts are unscrewed and the inner grille is intact.")
+ . += span_notice("The reinforcement struts can be reinforced with a material or cut off.")
if(GIRDER_NORMAL)
- if(can_displace)
- . += span_notice("The bolts are wrenched in place.")
- if(GIRDER_DISPLACED)
- . += span_notice("The bolts are loosened, but the screws are holding [src] together.")
- if(GIRDER_DISASSEMBLED)
- . += span_notice("[src] is disassembled! You probably shouldn't be able to see this examine message.")
- if(GIRDER_TRAM)
- . += span_notice("[src] is designed for tram usage. Deconstructed with a screwdriver!")
+ . += span_notice("The girder can be prepared for reinforcement with rods.")
+ if(anchored)
+ if(can_displace)
+ . += span_notice("The bolts are wrenched in place.")
+ else
+ . += span_notice("The bolts are loosened, but the screws are holding [src] together.")
/obj/structure/girder/attackby(obj/item/W, mob/user, params)
var/platingmodifier = 1
@@ -48,212 +77,93 @@
add_fingerprint(user)
if(istype(W, /obj/item/gun/energy/plasmacutter))
- balloon_alert(user, "slicing apart...")
+ to_chat(user, span_notice("You start slicing apart the girder..."))
if(W.use_tool(src, user, 40, volume=100))
+ to_chat(user, span_notice("You slice apart the girder."))
var/obj/item/stack/sheet/iron/M = new (loc, 2)
- if (!QDELETED(M))
- M.add_fingerprint(user)
+ M.add_fingerprint(user)
qdel(src)
- return
else if(istype(W, /obj/item/stack))
- if(iswallturf(loc) || (locate(/obj/structure/falsewall) in src.loc.contents))
- balloon_alert(user, "wall already present!")
+ if(iswallturf(loc))
+ to_chat(user, span_warning("There is already a wall present!"))
return
- if(!isfloorturf(src.loc) && state != GIRDER_TRAM)
- balloon_alert(user, "need floor!")
+ if(!isfloorturf(src.loc))
+ to_chat(user, span_warning("A floor must be present to build a false wall!"))
return
- if(state == GIRDER_TRAM)
- if(!locate(/obj/structure/industrial_lift/tram) in src.loc.contents)
- balloon_alert(user, "need tram floors!")
- return
-
- if(istype(W, /obj/item/stack/rods))
- var/obj/item/stack/rods/rod = W
- var/amount = construction_cost[rod.type]
- if(state == GIRDER_DISPLACED)
- if(rod.get_amount() < amount)
- balloon_alert(user, "need [amount] rods!")
- return
- balloon_alert(user, "concealing entrance...")
- if(do_after(user, 20, target = src))
- if(rod.get_amount() < amount)
- return
- rod.use(amount)
- var/obj/structure/falsewall/iron/FW = new (loc)
- transfer_fingerprints_to(FW)
- qdel(src)
- return
- else
- if(rod.get_amount() < amount)
- balloon_alert(user, "need [amount] rods!")
- return
- balloon_alert(user, "adding plating...")
- if(do_after(user, 40, target = src))
- if(rod.get_amount() < amount)
- return
- rod.use(amount)
- var/turf/T = get_turf(src)
- T.PlaceOnTop(/turf/closed/wall/mineral/iron)
- transfer_fingerprints_to(T)
- qdel(src)
- return
-
- if(!istype(W, /obj/item/stack/sheet))
+ if (locate(/obj/structure/falsewall) in src.loc.contents)
+ to_chat(user, span_warning("There is already a false wall present!"))
return
- var/obj/item/stack/sheet/sheets = W
- if(istype(sheets, /obj/item/stack/sheet/iron))
- var/amount = construction_cost[/obj/item/stack/sheet/iron]
- if(state == GIRDER_DISPLACED)
- if(sheets.get_amount() < amount)
- balloon_alert(user, "need [amount] sheets!")
- return
- balloon_alert(user, "concealing entrance...")
- if(do_after(user, 20*platingmodifier, target = src))
- if(sheets.get_amount() < amount)
- return
- sheets.use(amount)
- var/obj/structure/falsewall/F = new (loc)
- transfer_fingerprints_to(F)
- qdel(src)
- return
- else if(state == GIRDER_REINF)
- balloon_alert(user, "need plasteel sheet!")
- return
- else if(state == GIRDER_TRAM)
- if(sheets.get_amount() < amount)
- balloon_alert(user, "need [amount] sheets!")
- return
- balloon_alert(user, "adding plating...")
- if (do_after(user, 4 SECONDS, target = src))
- if(sheets.get_amount() < amount)
- return
- sheets.use(2)
- var/obj/structure/tramwall/tram_wall = new sheets.tram_wall_type(loc)
- transfer_fingerprints_to(tram_wall)
- qdel(src)
+ if(istype(W, /obj/item/stack/rods))
+ var/obj/item/stack/rods/S = W
+ if(state != GIRDER_NORMAL)
return
- else
- if(sheets.get_amount() < amount)
- balloon_alert(user, "need [amount] sheets!")
- return
- balloon_alert(user, "adding plating...")
- if (do_after(user, 40*platingmodifier, target = src))
- if(sheets.get_amount() < amount)
- return
- sheets.use(amount)
- var/turf/T = get_turf(src)
- T.PlaceOnTop(/turf/closed/wall)
- transfer_fingerprints_to(T)
- qdel(src)
+ if(S.get_amount() < 2)
+ to_chat(user, span_warning("You need two rods to place reinforcement struts!"))
return
-
- if(istype(sheets, /obj/item/stack/sheet/plasteel))
- var/amount = construction_cost[/obj/item/stack/sheet/plasteel]
- if(state == GIRDER_DISPLACED)
- if(sheets.get_amount() < amount)
- balloon_alert(user, "need [amount] sheets!")
+ to_chat(user, span_notice("You start placing reinforcement struts..."))
+ if(do_after(user, 20*platingmodifier, target = src))
+ if(S.get_amount() < 2)
return
- balloon_alert(user, "concealing entrance...")
- if(do_after(user, 20, target = src))
- if(sheets.get_amount() < amount)
- return
- sheets.use(amount)
- var/obj/structure/falsewall/reinforced/FW = new (loc)
- transfer_fingerprints_to(FW)
- qdel(src)
- return
- else if(state == GIRDER_REINF)
- amount = 1 // hur dur let's make plasteel have different construction amounts 4norasin
- if(sheets.get_amount() < amount)
- return
- balloon_alert(user, "adding plating...")
- if(do_after(user, 50*platingmodifier, target = src))
- if(sheets.get_amount() < amount)
- return
- sheets.use(amount)
- var/turf/T = get_turf(src)
- T.PlaceOnTop(/turf/closed/wall/r_wall)
- transfer_fingerprints_to(T)
- qdel(src)
- return
- else
- amount = 1 // hur dur x2
- if(sheets.get_amount() < amount)
+ if(state != GIRDER_NORMAL)
return
- balloon_alert(user, "reinforcing frame...")
- if(do_after(user, 60*platingmodifier, target = src))
- if(sheets.get_amount() < amount)
- return
- sheets.use(amount)
- var/obj/structure/girder/reinforced/R = new (loc)
- transfer_fingerprints_to(R)
- qdel(src)
- return
+ to_chat(user, span_notice("You place reinforcement struts."))
+ S.use(2)
+ state = GIRDER_REINF_STRUTS
+ update_appearance()
- if(!sheets.has_unique_girder && sheets.material_type)
- if(istype(src, /obj/structure/girder/reinforced))
- balloon_alert(user, "need plasteel!")
- return
+ if(!istype(W, /obj/item/stack/sheet))
+ return
- var/M = sheets.sheettype
- var/amount = construction_cost["exotic_material"]
- if(state == GIRDER_TRAM)
- if(!sheets.tram_wall_type)
- balloon_alert(user, "need titanium, plastitanium, or iron!")
+ var/obj/item/stack/sheet/S = W
+ if(S.get_amount() < 2)
+ to_chat(user, span_warning("You need two sheets of [S]!"))
+ return
+ if(state == GIRDER_REINF_STRUTS)
+ to_chat(user, span_notice("You start reinforcing the girder..."))
+ if(do_after(user, 20*platingmodifier, target = src))
+ if(state != GIRDER_REINF_STRUTS)
return
- if(sheets.get_amount() < amount)
- balloon_alert(user, "need [amount] sheets!")
+ if(S.get_amount() < 2)
return
- balloon_alert(user, "adding plating...")
- if (do_after(user, 4 SECONDS, target = src))
- if(sheets.get_amount() < amount)
- return
- sheets.use(amount)
- var/obj/structure/tramwall/tram_wall = new sheets.tram_wall_type(loc)
- transfer_fingerprints_to(tram_wall)
- qdel(src)
+ S.use(2)
+ state = GIRDER_REINF
+ reinforced_material = S.material_type
+ update_appearance()
+ return
+ else
+ var/datum/material/plating_mat_ref = GET_MATERIAL_REF(S.material_type)
+ var/wall_type = plating_mat_ref.wall_type
+ if(!wall_type)
+ to_chat(user, span_warning("You can't figure out how to make a wall out of this!"))
return
- if(state == GIRDER_DISPLACED)
- var/falsewall_type = text2path("/obj/structure/falsewall/[M]")
- if(!falsewall_type)
- balloon_alert(user, "need comptatiable sheets!")
- return
- if(sheets.get_amount() < amount)
- balloon_alert(user, "need [amount] sheets!")
- return
- balloon_alert(user, "concealing entrance...")
- if(do_after(user, 20, target = src))
- if(sheets.get_amount() < amount)
- return
- sheets.use(amount)
- var/obj/structure/falsewall/FW = new falsewall_type (loc)
- transfer_fingerprints_to(FW)
- qdel(src)
- return
+ if(anchored)
+ to_chat(user, span_notice("You start adding plating..."))
else
- if(sheets.get_amount() < amount)
- balloon_alert(user, "need [amount] sheets!")
+ to_chat(user, span_notice("You start adding plating, creating a false wall..."))
+ if (do_after(user, 40*platingmodifier, target = src))
+ if(S.get_amount() < 2)
return
- balloon_alert(user, "adding plating...")
- if (do_after(user, 40, target = src))
- if(sheets.get_amount() < amount)
- return
- sheets.use(amount)
- var/turf/T = get_turf(src)
- if(sheets.walltype)
- T.PlaceOnTop(sheets.walltype)
- else
- var/turf/newturf = T.PlaceOnTop(/turf/closed/wall/material)
- var/list/material_list = list()
- material_list[GET_MATERIAL_REF(sheets.material_type)] = MINERAL_MATERIAL_AMOUNT * 2
- if(material_list)
- newturf.set_custom_materials(material_list)
-
- transfer_fingerprints_to(T)
- qdel(src)
- return
+ S.use(2)
+ if(anchored)
+ to_chat(user, span_notice("You add the plating."))
+ else
+ to_chat(user, span_notice("You create the false wall."))
+ var/turf/T = get_turf(src)
+ if(anchored)
+ //Build a normal wall
+ T.PlaceOnTop(wall_type)
+ var/turf/closed/wall/placed_wall = T
+ placed_wall.set_wall_information(S.material_type, reinforced_material, wall_paint, stripe_paint)
+ transfer_fingerprints_to(placed_wall)
+ else
+ //Build a false wall
+ var/false_wall_type = plating_mat_ref.false_wall_type
+ var/obj/structure/falsewall/false_wall = new false_wall_type(T)
+ false_wall.set_wall_information(S.material_type, reinforced_material, wall_paint, stripe_paint)
+ transfer_fingerprints_to(false_wall)
+ qdel(src)
add_hiddenprint(user)
@@ -262,7 +172,7 @@
if (P.pipe_type in list(0, 1, 5)) //simple pipes, simple bends, and simple manifolds.
if(!user.transferItemToLoc(P, drop_location()))
return
- balloon_alert(user, "inserted pipe")
+ to_chat(user, span_notice("You fit the pipe into \the [src]."))
else
return ..()
@@ -272,86 +182,74 @@
return TRUE
. = FALSE
- if(state == GIRDER_TRAM)
- balloon_alert(user, "disassembling frame...")
- if(tool.use_tool(src, user, 4 SECONDS, volume=100))
- if(state != GIRDER_TRAM)
- return
- state = GIRDER_DISASSEMBLED
- var/obj/item/stack/sheet/iron/M = new (loc, 2)
- if (!QDELETED(M))
- M.add_fingerprint(user)
- qdel(src)
- return TRUE
-
- if(state == GIRDER_DISPLACED)
- balloon_alert(user, "disassembling frame...")
- if(tool.use_tool(src, user, 40, volume=100))
- if(state != GIRDER_DISPLACED)
- return
- state = GIRDER_DISASSEMBLED
- var/obj/item/stack/sheet/iron/M = new (loc, 2)
- if (!QDELETED(M))
- M.add_fingerprint(user)
- qdel(src)
- return TRUE
-
- else if(state == GIRDER_REINF)
- balloon_alert(user, "unsecuring support struts...")
+ if(state == GIRDER_REINF)
+ to_chat(user, span_notice("You start removing the reinforcement..."))
if(tool.use_tool(src, user, 40, volume=100))
if(state != GIRDER_REINF)
return
+ to_chat(user, span_notice("You remove the reinforcement."))
state = GIRDER_REINF_STRUTS
+ var/datum/material/reinf_mat_ref = GET_MATERIAL_REF(reinforced_material)
+ new reinf_mat_ref.sheet_type(loc, 2)
+ reinforced_material = null
+ update_appearance()
return TRUE
- else if(state == GIRDER_REINF_STRUTS)
- balloon_alert(user, "securing support struts...")
+ else if(!anchored && state != GIRDER_REINF_STRUTS)
+ user.visible_message(span_warning("[user] disassembles the girder."),
+ span_notice("You start to disassemble the girder..."),
+ span_hear("You hear clanking and banging noises."))
if(tool.use_tool(src, user, 40, volume=100))
- if(state != GIRDER_REINF_STRUTS)
+ if(anchored)
return
- state = GIRDER_REINF
+ to_chat(user, span_notice("You disassemble the girder."))
+ var/obj/item/stack/sheet/iron/M = new (loc, 2)
+ M.add_fingerprint(user)
+ qdel(src)
return TRUE
// Wirecutter behavior for girders
/obj/structure/girder/wirecutter_act(mob/user, obj/item/tool)
. = ..()
if(state == GIRDER_REINF_STRUTS)
- balloon_alert(user, "removing inner grille...")
+ to_chat(user, span_notice("You start removing the reinforcement struts..."))
if(tool.use_tool(src, user, 40, volume=100))
- new /obj/item/stack/sheet/plasteel(get_turf(src))
- var/obj/structure/girder/G = new (loc)
- transfer_fingerprints_to(G)
- qdel(src)
+ to_chat(user, span_notice("You remove the reinforcement struts."))
+ new /obj/item/stack/rods(get_turf(src), 2)
+ state = GIRDER_NORMAL
+ update_appearance()
return TRUE
/obj/structure/girder/wrench_act(mob/user, obj/item/tool)
. = ..()
- if(state == GIRDER_DISPLACED)
+ if(!anchored)
if(!isfloorturf(loc))
- balloon_alert(user, "needs floor!")
+ to_chat(user, span_warning("A floor must be present to secure the girder!"))
- balloon_alert(user, "securing frame...")
+ to_chat(user, span_notice("You start securing the girder..."))
if(tool.use_tool(src, user, 40, volume=100))
- var/obj/structure/girder/G = new (loc)
- transfer_fingerprints_to(G)
- qdel(src)
+ to_chat(user, span_notice("You secure the girder."))
+ set_anchored(TRUE)
+ girderpasschance = GIRDER_PASSCHANCE_NORMAL
+ update_appearance()
return TRUE
else if(state == GIRDER_NORMAL && can_displace)
- balloon_alert(user, "unsecuring frame...")
+ to_chat(user, span_notice("You start unsecuring the girder..."))
if(tool.use_tool(src, user, 40, volume=100))
- var/obj/structure/girder/displaced/D = new (loc)
- transfer_fingerprints_to(D)
- qdel(src)
+ to_chat(user, span_notice("You unsecure the girder."))
+ set_anchored(FALSE)
+ girderpasschance = GIRDER_PASSCHANCE_UNANCHORED
+ update_appearance()
return TRUE
-/obj/structure/girder/CanAllowThrough(atom/movable/mover, border_dir)
+/obj/structure/girder/CanAllowThrough(atom/movable/mover, turf/target)
. = ..()
if((mover.pass_flags & PASSGRILLE) || istype(mover, /obj/projectile))
return prob(girderpasschance)
/obj/structure/girder/CanAStarPass(obj/item/card/id/ID, to_dir, atom/movable/caller)
. = !density
- if(caller)
+ if(istype(caller))
. = . || (caller.pass_flags & PASSGRILLE)
/obj/structure/girder/deconstruct(disassembled = TRUE)
@@ -366,18 +264,14 @@
/obj/structure/girder/displaced
name = "displaced girder"
- icon_state = "displaced"
anchored = FALSE
- state = GIRDER_DISPLACED
- girderpasschance = 25
- max_integrity = 120
+ girderpasschance = GIRDER_PASSCHANCE_UNANCHORED
/obj/structure/girder/reinforced
name = "reinforced girder"
- icon_state = "reinforced"
state = GIRDER_REINF
- girderpasschance = 0
- max_integrity = 350
+ reinforced_material = /datum/material/iron
+ girderpasschance = GIRDER_PASSCHANCE_REINFORCED
/obj/structure/girder/tram
name = "tram girder"
@@ -394,27 +288,33 @@
/obj/structure/girder/cult/attackby(obj/item/W, mob/user, params)
add_fingerprint(user)
- if(W.tool_behaviour == TOOL_WELDER)
+ if(istype(W, /obj/item/melee/cultblade/dagger) && IS_CULTIST(user)) //Cultists can demolish cult girders instantly with their tomes
+ user.visible_message(span_warning("[user] strikes [src] with [W]!"), span_notice("You demolish [src]."))
+ new /obj/item/stack/sheet/runed_metal(drop_location(), 1)
+ qdel(src)
+
+ else if(W.tool_behaviour == TOOL_WELDER)
if(!W.tool_start_check(user, amount=0))
return
- balloon_alert(user, "slicing apart...")
+ to_chat(user, span_notice("You start slicing apart the girder..."))
if(W.use_tool(src, user, 40, volume=50))
+ to_chat(user, span_notice("You slice apart the girder."))
var/obj/item/stack/sheet/runed_metal/R = new(drop_location(), 1)
transfer_fingerprints_to(R)
qdel(src)
else if(istype(W, /obj/item/stack/sheet/runed_metal))
var/obj/item/stack/sheet/runed_metal/R = W
- var/amount = construction_cost[R.type]
- if(R.get_amount() < amount)
- balloon_alert(user, "need [amount] sheet!")
+ if(R.get_amount() < 1)
+ to_chat(user, span_warning("You need at least one sheet of runed metal to construct a runed wall!"))
return
- balloon_alert(user, "adding plating...")
+ user.visible_message(span_notice("[user] begins laying runed metal on [src]..."), span_notice("You begin constructing a runed wall..."))
if(do_after(user, 50, target = src))
- if(R.get_amount() < amount)
+ if(R.get_amount() < 1)
return
- R.use(amount)
+ user.visible_message(span_notice("[user] plates [src] with runed metal."), span_notice("You construct a runed wall."))
+ R.use(1)
var/turf/T = get_turf(src)
T.PlaceOnTop(/turf/closed/wall/mineral/cult)
qdel(src)
@@ -445,10 +345,12 @@
var/turf/T = get_turf(src)
switch(passed_mode)
if(RCD_FLOORWALL)
+ to_chat(user, span_notice("You finish a wall."))
T.PlaceOnTop(/turf/closed/wall)
qdel(src)
return TRUE
if(RCD_DECONSTRUCT)
+ to_chat(user, span_notice("You deconstruct the girder."))
qdel(src)
return TRUE
return FALSE
@@ -456,6 +358,7 @@
/obj/structure/girder/bronze
name = "wall gear"
desc = "A girder made out of sturdy bronze, made to resemble a gear."
+ icon = 'icons/obj/clockwork_objects.dmi'
icon_state = "wall_gear"
can_displace = FALSE
@@ -464,23 +367,24 @@
if(W.tool_behaviour == TOOL_WELDER)
if(!W.tool_start_check(user, amount = 0))
return
- balloon_alert(user, "slicing apart...")
+ to_chat(user, span_notice("You start slicing apart [src]..."))
if(W.use_tool(src, user, 40, volume=50))
+ to_chat(user, span_notice("You slice apart [src]."))
var/obj/item/stack/sheet/bronze/B = new(drop_location(), 2)
transfer_fingerprints_to(B)
qdel(src)
else if(istype(W, /obj/item/stack/sheet/bronze))
var/obj/item/stack/sheet/bronze/B = W
- var/amount = construction_cost[B.type]
- if(B.get_amount() < amount)
- balloon_alert(user, "need [amount] sheets!")
+ if(B.get_amount() < 2)
+ to_chat(user, span_warning("You need at least two bronze sheets to build a bronze wall!"))
return
- balloon_alert(user, "adding plating...")
+ user.visible_message(span_notice("[user] begins plating [src] with bronze..."), span_notice("You begin constructing a bronze wall..."))
if(do_after(user, 50, target = src))
- if(B.get_amount() < amount)
+ if(B.get_amount() < 2)
return
- B.use(amount)
+ user.visible_message(span_notice("[user] plates [src] with bronze!"), span_notice("You construct a bronze wall."))
+ B.use(2)
var/turf/T = get_turf(src)
T.PlaceOnTop(/turf/closed/wall/mineral/bronze)
qdel(src)
diff --git a/code/game/objects/structures/grille.dm b/code/game/objects/structures/grille.dm
index 013f4614ccb..da5d3c9d5bc 100644
--- a/code/game/objects/structures/grille.dm
+++ b/code/game/objects/structures/grille.dm
@@ -4,9 +4,10 @@
/obj/structure/grille
desc = "A flimsy framework of iron rods."
name = "grille"
- icon = 'icons/obj/structures.dmi'
- icon_state = "grille"
+ icon = 'icons/obj/smooth_structures/grille.dmi'
+ icon_state = "grille-0"
base_icon_state = "grille"
+ color = "#545454"
density = TRUE
anchored = TRUE
pass_flags_self = PASSGRILLE
@@ -16,6 +17,9 @@
armor = list(MELEE = 50, BULLET = 70, LASER = 70, ENERGY = 100, BOMB = 10, BIO = 100, FIRE = 0, ACID = 0)
max_integrity = 50
integrity_failure = 0.4
+ smoothing_flags = SMOOTH_BITMASK
+ smoothing_groups = list(SMOOTH_GROUP_GRILLE)
+ canSmoothWith = list(SMOOTH_GROUP_GRILLE)
var/rods_type = /obj/item/stack/rods
var/rods_amount = 2
var/rods_broken = TRUE
@@ -24,20 +28,19 @@
update_cable_icons_on_turf(get_turf(src))
return ..()
-/obj/structure/grille/take_damage(damage_amount, damage_type = BRUTE, damage_flag = 0, sound_effect = 1, attack_dir)
- . = ..()
- update_appearance()
-
/obj/structure/grille/update_appearance(updates)
- if(QDELETED(src) || broken)
+ if(QDELETED(src))
return
-
. = ..()
- if((updates & UPDATE_SMOOTHING) && (smoothing_flags & (SMOOTH_CORNERS|SMOOTH_BITMASK)))
- QUEUE_SMOOTH(src)
/obj/structure/grille/update_icon_state()
- icon_state = "[base_icon_state][((atom_integrity / max_integrity) <= 0.5) ? "50_[rand(0, 3)]" : null]"
+ . = ..()
+ if(broken)
+ icon_state = "brokengrille"
+
+/obj/structure/grille/set_smoothed_icon_state(new_junction)
+ if(broken)
+ return
return ..()
/obj/structure/grille/examine(mob/user)
@@ -79,9 +82,6 @@
if(repair_grille())
to_chat(user, span_notice("You rebuild the broken grille."))
- if(!clear_tile(user))
- return FALSE
-
if(!ispath(the_rcd.window_type, /obj/structure/window))
CRASH("Invalid window path type in RCD: [the_rcd.window_type]")
var/obj/structure/window/window_path = the_rcd.window_type
@@ -93,29 +93,6 @@
return TRUE
return FALSE
-/obj/structure/grille/proc/clear_tile(mob/user)
- var/at_users_feet = get_turf(user)
-
- var/unanchored_items_on_tile
- var/obj/item/last_item_moved
- for(var/obj/item/item_to_move in loc.contents)
- if(!item_to_move.anchored)
- if(unanchored_items_on_tile <= CLEAR_TILE_MOVE_LIMIT)
- item_to_move.forceMove(at_users_feet)
- last_item_moved = item_to_move
- unanchored_items_on_tile++
-
- if(!unanchored_items_on_tile)
- return TRUE
-
- to_chat(user, span_notice("You move [unanchored_items_on_tile == 1 ? "[last_item_moved]" : "some things"] out of the way."))
-
- if(unanchored_items_on_tile - CLEAR_TILE_MOVE_LIMIT > 0)
- to_chat(user, span_warning("There's still too much stuff in the way!"))
- return FALSE
-
- return TRUE
-
/obj/structure/grille/Bumped(atom/movable/AM)
if(!ismob(AM))
return
@@ -201,52 +178,11 @@
R.use(1)
return TRUE
-//window placing begin
- else if(is_glass_sheet(W) || istype(W, /obj/item/stack/sheet/bronze))
- if (!broken)
- var/obj/item/stack/ST = W
- if (ST.get_amount() < 2)
- to_chat(user, span_warning("You need at least two sheets of glass for that!"))
- return
- var/dir_to_set = SOUTHWEST
- if(!anchored)
- to_chat(user, span_warning("[src] needs to be fastened to the floor first!"))
- return
- for(var/obj/structure/window/WINDOW in loc)
- to_chat(user, span_warning("There is already a window there!"))
- return
- if(!clear_tile(user))
- return
- to_chat(user, span_notice("You start placing the window..."))
- if(do_after(user,20, target = src))
- if(!src.loc || !anchored) //Grille broken or unanchored while waiting
- return
- for(var/obj/structure/window/WINDOW in loc) //Another window already installed on grille
- return
- if(!clear_tile(user))
- return
- var/obj/structure/window/WD
- if(istype(W, /obj/item/stack/sheet/plasmarglass))
- WD = new/obj/structure/window/reinforced/plasma/fulltile(drop_location()) //reinforced plasma window
- else if(istype(W, /obj/item/stack/sheet/plasmaglass))
- WD = new/obj/structure/window/plasma/fulltile(drop_location()) //plasma window
- else if(istype(W, /obj/item/stack/sheet/rglass))
- WD = new/obj/structure/window/reinforced/fulltile(drop_location()) //reinforced window
- else if(istype(W, /obj/item/stack/sheet/titaniumglass))
- WD = new/obj/structure/window/reinforced/shuttle(drop_location())
- else if(istype(W, /obj/item/stack/sheet/plastitaniumglass))
- WD = new/obj/structure/window/reinforced/plasma/plastitanium(drop_location())
- else if(istype(W, /obj/item/stack/sheet/bronze))
- WD = new/obj/structure/window/bronze/fulltile(drop_location())
- else
- WD = new/obj/structure/window/fulltile(drop_location()) //normal window
- WD.setDir(dir_to_set)
- WD.set_anchored(FALSE)
- WD.state = 0
- ST.use(2)
- to_chat(user, span_notice("You place [WD] on [src]."))
- return
-//window placing end
+ //Try place window on the grille if the sheet supports it
+ else if(istype(W, /obj/item/stack/sheet))
+ var/obj/item/stack/sheet/my_sheet = W
+ if(my_sheet.try_install_window(user, src.loc, src))
+ return TRUE
else if(istype(W, /obj/item/shard) || !shock(user, 70))
return ..()
@@ -274,7 +210,6 @@
/obj/structure/grille/atom_break()
. = ..()
if(!broken && !(flags_1 & NODECONSTRUCT_1))
- icon_state = "brokengrille"
set_density(FALSE)
atom_integrity = 20
broken = TRUE
@@ -282,15 +217,18 @@
rods_broken = FALSE
var/obj/R = new rods_type(drop_location(), rods_broken)
transfer_fingerprints_to(R)
+ smoothing_flags = NONE
+ update_appearance()
/obj/structure/grille/proc/repair_grille()
if(broken)
- icon_state = "grille"
set_density(TRUE)
atom_integrity = max_integrity
broken = FALSE
rods_amount = 2
rods_broken = TRUE
+ smoothing_flags = SMOOTH_BITMASK
+ update_appearance()
return TRUE
return FALSE
@@ -337,7 +275,6 @@
return null
/obj/structure/grille/broken // Pre-broken grilles for map placement
- icon_state = "brokengrille"
density = FALSE
broken = TRUE
rods_amount = 1
diff --git a/code/game/objects/structures/low_wall.dm b/code/game/objects/structures/low_wall.dm
new file mode 100644
index 00000000000..4f232177819
--- /dev/null
+++ b/code/game/objects/structures/low_wall.dm
@@ -0,0 +1,207 @@
+/obj/structure/low_wall
+ name = "low wall"
+ desc = "A low wall, with space to mount windows or grilles on top of it."
+ icon = 'icons/obj/smooth_structures/low_wall.dmi'
+ icon_state = "wall-0"
+ base_icon_state = "wall"
+ color = "#57575c" //To display in mapping softwares
+ greyscale_colors = "#57575c"
+ density = TRUE
+ anchored = TRUE
+ pass_flags_self = PASSTABLE | LETPASSTHROW
+ can_atmos_pass = CANPASS_ALWAYS
+ layer = LOW_WALL_LAYER
+ max_integrity = 150
+ smoothing_flags = SMOOTH_BITMASK
+ smoothing_groups = list(SMOOTH_GROUP_LOW_WALL)
+ canSmoothWith = list(SMOOTH_GROUP_LOW_WALL, SMOOTH_GROUP_WALLS, SMOOTH_GROUP_AIRLOCK, SMOOTH_GROUP_SHUTTERS_BLASTDOORS)
+ armor = list(MELEE = 20, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 25, BIO = 100, FIRE = 80, ACID = 100)
+ greyscale_config = /datum/greyscale_config/low_wall
+ /// Material used in construction
+ var/plating_material = /datum/material/iron
+ /// Paint color of our wall
+ var/wall_paint
+ /// Paint colour of our stripe
+ var/stripe_paint
+ /// Typecache of airlocks to apply a neighboring stripe overlay to
+ var/static/list/airlock_typecache
+
+/obj/structure/low_wall/update_greyscale()
+ greyscale_colors = get_wall_color()
+ return ..()
+
+/obj/structure/low_wall/proc/get_wall_color()
+ var/wall_color = wall_paint
+ if(!wall_color)
+ var/datum/material/plating_mat_ref = GET_MATERIAL_REF(plating_material)
+ wall_color = plating_mat_ref.wall_color
+ return wall_color
+
+/obj/structure/low_wall/proc/get_stripe_color()
+ var/stripe_color = stripe_paint
+ if(!stripe_color)
+ stripe_color = get_wall_color()
+ return stripe_color
+
+/obj/structure/low_wall/ex_act(severity)
+ // Obstructed low walls cant be deleted through explosions
+ if(is_top_obstructed())
+ return
+ return ..()
+
+/obj/structure/low_wall/examine(mob/user)
+ . = ..()
+ . += span_notice("You could weld it down.")
+ if(wall_paint)
+ . += span_notice("It's coated with a layer of paint.")
+ if(stripe_paint)
+ . += span_notice("It has a painted stripe around its base.")
+
+/obj/structure/low_wall/Initialize(mapload)
+ . = ..()
+ color = null //To remove the mapping preview color
+ AddElement(/datum/element/climbable)
+ set_material(plating_material)
+ if(wall_paint)
+ set_wall_paint(wall_paint)
+ if(stripe_paint)
+ set_stripe_paint(stripe_paint)
+ QUEUE_SMOOTH(src)
+ QUEUE_SMOOTH_NEIGHBORS(src)
+
+/obj/structure/low_wall/update_overlays()
+ overlays.Cut()
+ var/datum/material/plating_mat_ref = GET_MATERIAL_REF(plating_material)
+
+ var/icon/stripe_icon = SSgreyscale.GetColoredIconByType(plating_mat_ref.wall_stripe_greyscale_config, get_stripe_color())
+ var/mutable_appearance/smoothed_stripe = mutable_appearance(stripe_icon, icon_state, layer = LOW_WALL_STRIPE_LAYER)
+ overlays += smoothed_stripe
+
+ if(!airlock_typecache)
+ airlock_typecache = typecacheof(list(/obj/machinery/door/airlock, /obj/machinery/door/poddoor))
+ var/neighbor_stripe = NONE
+ for(var/cardinal in GLOB.cardinals)
+ var/turf/step_turf = get_step(src, cardinal)
+ var/obj/structure/low_wall/neighboring_lowwall = locate() in step_turf
+ if(neighboring_lowwall)
+ continue
+ for(var/atom/movable/movable_thing as anything in step_turf)
+ if(airlock_typecache[movable_thing.type])
+ neighbor_stripe ^= cardinal
+ break
+ if(neighbor_stripe)
+ var/icon/neighbor_icon = SSgreyscale.GetColoredIconByType(/datum/greyscale_config/wall_neighbor_stripe, get_stripe_color())
+ var/mutable_appearance/neighb_stripe_appearace = mutable_appearance(neighbor_icon, "stripe-[neighbor_stripe]", layer = LOW_WALL_STRIPE_LAYER)
+ overlays += neighb_stripe_appearace
+ return ..()
+
+/obj/structure/low_wall/CanAllowThrough(atom/movable/mover, turf/target)
+ . = ..()
+ if(.)
+ return
+ if(mover.throwing)
+ return TRUE
+ if(locate(/obj/structure/low_wall) in get_turf(mover))
+ return TRUE
+
+/obj/structure/low_wall/attackby(obj/item/weapon, mob/living/user, params)
+ if(is_top_obstructed())
+ return TRUE
+ var/list/modifiers = params2list(params)
+ if(!(flags_1 & NODECONSTRUCT_1) && LAZYACCESS(modifiers, RIGHT_CLICK))
+ if(weapon.tool_behaviour == TOOL_WELDER)
+ if(weapon.tool_start_check(user, amount = 0))
+ to_chat(user, span_notice("You start cutting \the [src]..."))
+ if (weapon.use_tool(src, user, 50, volume = 50))
+ to_chat(user, span_notice("You cut \the [src] down."))
+ deconstruct(TRUE)
+ return TRUE
+ if(istype(weapon, /obj/item/stack/sheet))
+ var/obj/item/stack/sheet/my_sheet = weapon
+ if(my_sheet.try_install_window(user, src.loc, src))
+ return TRUE
+ if(!user.combat_mode && !(weapon.item_flags & ABSTRACT))
+ if(user.transferItemToLoc(weapon, loc, silent = FALSE, user_click_modifiers = modifiers))
+ return TRUE
+ return ..()
+
+/obj/structure/low_wall/deconstruct(disassembled = TRUE, wrench_disassembly = 0)
+ var/datum/material/plating_mat_ref = GET_MATERIAL_REF(plating_material)
+ new plating_mat_ref.sheet_type(loc, 2)
+ qdel(src)
+
+/obj/structure/low_wall/rcd_vals(mob/user, obj/item/construction/rcd/the_rcd)
+ if(is_top_obstructed())
+ return FALSE
+ switch(the_rcd.mode)
+ if(RCD_DECONSTRUCT)
+ return list("mode" = RCD_DECONSTRUCT, "delay" = 20, "cost" = 5)
+ if(RCD_WINDOWGRILLE)
+ /// Slight copypasta from grilles
+ var/cost = 8
+ var/delay = 2 SECONDS
+
+ if(the_rcd.window_glass == RCD_WINDOW_REINFORCED)
+ delay = 4 SECONDS
+ cost = 12
+
+ return rcd_result_with_memory(
+ list("mode" = RCD_WINDOWGRILLE, "delay" = delay, "cost" = cost),
+ get_turf(src), RCD_MEMORY_WINDOWGRILLE,
+ )
+ return FALSE
+
+/obj/structure/low_wall/rcd_act(mob/user, obj/item/construction/rcd/the_rcd, passed_mode)
+ if(is_top_obstructed())
+ return FALSE
+ switch(passed_mode)
+ if(RCD_DECONSTRUCT)
+ to_chat(user, span_notice("You deconstruct \the [src]."))
+ qdel(src)
+ return TRUE
+ if(RCD_WINDOWGRILLE)
+ /// Slight copypasta from grilles
+ var/turf/my_turf = loc
+ if(!ispath(the_rcd.window_type, /obj/structure/window))
+ CRASH("Invalid window path type in RCD: [the_rcd.window_type]")
+ var/obj/structure/window/window_path = the_rcd.window_type
+ if(!valid_window_location(my_turf, user.dir, is_fulltile = initial(window_path.fulltile)))
+ return FALSE
+ to_chat(user, span_notice("You construct the window."))
+ var/obj/structure/window/WD = new the_rcd.window_type(my_turf, user.dir)
+ WD.set_anchored(TRUE)
+ return TRUE
+ return FALSE
+
+/obj/structure/low_wall/proc/set_wall_paint(new_paint)
+ wall_paint = new_paint
+ update_greyscale()
+ update_appearance()
+
+/obj/structure/low_wall/proc/set_stripe_paint(new_paint)
+ stripe_paint = new_paint
+ update_appearance()
+
+/obj/structure/low_wall/proc/set_material(new_material_type)
+ plating_material = new_material_type
+ update_greyscale()
+ update_appearance()
+
+/// Whether the top of the low wall is obstructed by an installed grille or a window
+/obj/structure/low_wall/proc/is_top_obstructed()
+ var/obj/structure/window/window = locate() in loc
+ if(window && window.anchored)
+ return TRUE
+ var/obj/structure/grille/grille = locate() in loc
+ if(grille && grille.anchored)
+ return TRUE
+ return FALSE
+
+/obj/structure/low_wall/titanium
+ plating_material = /datum/material/titanium
+
+/obj/structure/low_wall/plastitanium
+ plating_material = /datum/material/alloy/plastitanium
+
+/obj/structure/low_wall/wood
+ plating_material = /datum/material/wood
diff --git a/code/game/objects/structures/tram_walls.dm b/code/game/objects/structures/tram_walls.dm
index ff1df4f5dd2..616ad57c3b7 100644
--- a/code/game/objects/structures/tram_walls.dm
+++ b/code/game/objects/structures/tram_walls.dm
@@ -5,7 +5,7 @@
name = "wall"
desc = "A huge chunk of metal used to separate rooms."
anchored = TRUE
- icon = 'icons/turf/walls/wall.dmi'
+ icon = 'icons/turf/walls/legacy/wall.dmi'
icon_state = "wall-0"
base_icon_state = "wall"
layer = LOW_OBJ_LAYER
@@ -24,7 +24,6 @@
var/tram_wall_type = /obj/structure/tramwall
var/girder_type = /obj/structure/girder/tram
-
/obj/structure/tramwall/Initialize(mapload)
. = ..()
var/obj/item/stack/initialized_mineral = new mineral
@@ -76,23 +75,18 @@
/obj/structure/tramwall/titanium
name = "wall"
desc = "A light-weight titanium wall used in shuttles."
- icon = 'icons/turf/walls/shuttle_wall.dmi'
- icon_state = "shuttle_wall-0"
- base_icon_state = "shuttle_wall"
- mineral = /obj/item/stack/sheet/mineral/titanium
+ explosion_block = 3
+ flags_1 = CAN_BE_DIRTY_1
+ flags_ricochet = RICOCHET_SHINY | RICOCHET_HARD
tram_wall_type = /obj/structure/tramwall/titanium
- smoothing_flags = SMOOTH_BITMASK
- smoothing_groups = list(SMOOTH_GROUP_WALLS, SMOOTH_GROUP_TITANIUM_WALLS)
- canSmoothWith = list(SMOOTH_GROUP_TITANIUM_WALLS, SMOOTH_GROUP_AIRLOCK, SMOOTH_GROUP_SHUTTLE_PARTS)
+ smoothing_groups = list(SMOOTH_GROUP_WALLS)
+ canSmoothWith = list(SMOOTH_GROUP_SHUTTERS_BLASTDOORS, SMOOTH_GROUP_WALLS, SMOOTH_GROUP_AIRLOCK, SMOOTH_GROUP_WINDOW_FULLTILE, SMOOTH_GROUP_LOW_WALL)
+ color = "#b3c0c7" //To display in mapping softwares
/obj/structure/tramwall/plastitanium
name = "wall"
desc = "An evil wall of plasma and titanium."
- icon = 'icons/turf/walls/plastitanium_wall.dmi'
- icon_state = "plastitanium_wall-0"
- base_icon_state = "plastitanium_wall"
- mineral = /obj/item/stack/sheet/mineral/plastitanium
+ icon = 'icons/turf/walls/metal_wall.dmi'
tram_wall_type = /obj/structure/tramwall/plastitanium
- smoothing_flags = SMOOTH_BITMASK
- smoothing_groups = list(SMOOTH_GROUP_WALLS, SMOOTH_GROUP_PLASTITANIUM_WALLS)
- canSmoothWith = list(SMOOTH_GROUP_PLASTITANIUM_WALLS, SMOOTH_GROUP_AIRLOCK, SMOOTH_GROUP_SHUTTLE_PARTS)
+ smoothing_groups = list(SMOOTH_GROUP_WALLS)
+ canSmoothWith = list(SMOOTH_GROUP_SHUTTERS_BLASTDOORS, SMOOTH_GROUP_WALLS, SMOOTH_GROUP_AIRLOCK, SMOOTH_GROUP_WINDOW_FULLTILE, SMOOTH_GROUP_LOW_WALL)
diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm
index 46d71b5d308..e48acd436ad 100644
--- a/code/game/objects/structures/window.dm
+++ b/code/game/objects/structures/window.dm
@@ -391,7 +391,7 @@
cut_overlay(crack_overlay)
if(ratio > 75)
return
- crack_overlay = mutable_appearance('icons/obj/structures.dmi', "damage[ratio]", -(layer+0.1))
+ crack_overlay = mutable_appearance('icons/obj/structures.dmi', "damage[ratio]", -(layer+0.1), appearance_flags = RESET_COLOR)
. += crack_overlay
/obj/structure/window/fire_act(exposed_temperature, exposed_volume)
@@ -617,27 +617,35 @@
icon = 'icons/obj/smooth_structures/window.dmi'
icon_state = "window-0"
base_icon_state = "window"
+ color = "#AFD3E6"
+ greyscale_config = /datum/greyscale_config/fulltile_window
+ greyscale_colors = "#AFD3E6"
+ alpha = 180
max_integrity = 50
fulltile = TRUE
flags_1 = PREVENT_CLICK_UNDER_1
smoothing_flags = SMOOTH_BITMASK
smoothing_groups = list(SMOOTH_GROUP_WINDOW_FULLTILE)
- canSmoothWith = list(SMOOTH_GROUP_WINDOW_FULLTILE)
+ canSmoothWith = list(SMOOTH_GROUP_WINDOW_FULLTILE, SMOOTH_GROUP_WALLS, SMOOTH_GROUP_AIRLOCK, SMOOTH_GROUP_SHUTTERS_BLASTDOORS)
glass_amount = 2
/obj/structure/window/fulltile/unanchored
anchored = FALSE
/obj/structure/window/plasma/fulltile
- icon = 'icons/obj/smooth_structures/plasma_window.dmi'
- icon_state = "plasma_window-0"
- base_icon_state = "plasma_window"
+ icon = 'icons/obj/smooth_structures/window.dmi'
+ icon_state = "window-0"
+ base_icon_state = "window"
+ color = "#c162ec"
+ greyscale_config = /datum/greyscale_config/fulltile_window
+ greyscale_colors = "#c162ec"
+ alpha = 180
max_integrity = 300
fulltile = TRUE
flags_1 = PREVENT_CLICK_UNDER_1
smoothing_flags = SMOOTH_BITMASK
smoothing_groups = list(SMOOTH_GROUP_WINDOW_FULLTILE)
- canSmoothWith = list(SMOOTH_GROUP_WINDOW_FULLTILE)
+ canSmoothWith = list(SMOOTH_GROUP_WINDOW_FULLTILE, SMOOTH_GROUP_WALLS, SMOOTH_GROUP_AIRLOCK, SMOOTH_GROUP_SHUTTERS_BLASTDOORS)
glass_amount = 2
melting_point = 25000
@@ -645,16 +653,20 @@
anchored = FALSE
/obj/structure/window/reinforced/plasma/fulltile
- icon = 'icons/obj/smooth_structures/rplasma_window.dmi'
- icon_state = "rplasma_window-0"
- base_icon_state = "rplasma_window"
+ icon = 'icons/obj/smooth_structures/window.dmi'
+ icon_state = "window-0"
+ base_icon_state = "window"
+ color = "#c162ec"
+ greyscale_config = /datum/greyscale_config/fulltile_reinforced_window
+ greyscale_colors = "#c162ec"
+ alpha = 180
state = RWINDOW_SECURE
- max_integrity = 1000
+ max_integrity = 500
fulltile = TRUE
flags_1 = PREVENT_CLICK_UNDER_1
smoothing_flags = SMOOTH_BITMASK
smoothing_groups = list(SMOOTH_GROUP_WINDOW_FULLTILE)
- canSmoothWith = list(SMOOTH_GROUP_WINDOW_FULLTILE)
+ canSmoothWith = list(SMOOTH_GROUP_WINDOW_FULLTILE, SMOOTH_GROUP_WALLS, SMOOTH_GROUP_AIRLOCK, SMOOTH_GROUP_SHUTTERS_BLASTDOORS)
glass_amount = 2
melting_point = 28000
@@ -663,16 +675,20 @@
state = WINDOW_OUT_OF_FRAME
/obj/structure/window/reinforced/fulltile
- icon = 'icons/obj/smooth_structures/reinforced_window.dmi'
- icon_state = "reinforced_window-0"
- base_icon_state = "reinforced_window"
+ icon = 'icons/obj/smooth_structures/window_reinforced.dmi'
+ icon_state = "window-0"
+ base_icon_state = "window"
+ color = "#829eb5"
+ greyscale_config = /datum/greyscale_config/fulltile_reinforced_window
+ greyscale_colors = "#829eb5"
+ alpha = 180
max_integrity = 150
fulltile = TRUE
flags_1 = PREVENT_CLICK_UNDER_1
state = RWINDOW_SECURE
smoothing_flags = SMOOTH_BITMASK
smoothing_groups = list(SMOOTH_GROUP_WINDOW_FULLTILE)
- canSmoothWith = list(SMOOTH_GROUP_WINDOW_FULLTILE)
+ canSmoothWith = list(SMOOTH_GROUP_WINDOW_FULLTILE, SMOOTH_GROUP_WALLS, SMOOTH_GROUP_AIRLOCK, SMOOTH_GROUP_SHUTTERS_BLASTDOORS)
glass_amount = 2
/obj/structure/window/reinforced/fulltile/unanchored
@@ -680,20 +696,21 @@
state = WINDOW_OUT_OF_FRAME
/obj/structure/window/reinforced/tinted/fulltile
- icon = 'icons/obj/smooth_structures/tinted_window.dmi'
- icon_state = "tinted_window-0"
- base_icon_state = "tinted_window"
+ icon = 'icons/obj/smooth_structures/window_reinforced.dmi'
+ icon_state = "window-0"
+ base_icon_state = "window"
+ color = "#3b5461"
+ greyscale_config = /datum/greyscale_config/fulltile_reinforced_window
+ greyscale_colors = "#3b5461"
+ alpha = 180
fulltile = TRUE
flags_1 = PREVENT_CLICK_UNDER_1
smoothing_flags = SMOOTH_BITMASK
smoothing_groups = list(SMOOTH_GROUP_WINDOW_FULLTILE)
- canSmoothWith = list(SMOOTH_GROUP_WINDOW_FULLTILE)
+ canSmoothWith = list(SMOOTH_GROUP_WINDOW_FULLTILE, SMOOTH_GROUP_WALLS, SMOOTH_GROUP_AIRLOCK, SMOOTH_GROUP_SHUTTERS_BLASTDOORS)
glass_amount = 2
/obj/structure/window/reinforced/fulltile/ice
- icon = 'icons/obj/smooth_structures/rice_window.dmi'
- icon_state = "rice_window-0"
- base_icon_state = "rice_window"
max_integrity = 150
glass_amount = 2
melting_point = T0C
@@ -703,26 +720,30 @@
/obj/structure/window/reinforced/shuttle//this is called reinforced because it is reinforced w/titanium
name = "shuttle window"
desc = "A reinforced, air-locked pod window."
- icon = 'icons/obj/smooth_structures/shuttle_window.dmi'
- icon_state = "shuttle_window-0"
- base_icon_state = "shuttle_window"
+ icon = 'icons/obj/smooth_structures/window_reinforced.dmi'
+ icon_state = "window-0"
+ base_icon_state = "window"
+ color = "#D0CBD4"
+ greyscale_config = /datum/greyscale_config/fulltile_reinforced_window
+ greyscale_colors = "#D0CBD4"
+ alpha = 180
max_integrity = 150
wtype = "shuttle"
- reinf = TRUE
fulltile = TRUE
flags_1 = PREVENT_CLICK_UNDER_1
reinf = TRUE
heat_resistance = 1600
- armor = list(MELEE = 90, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 50, BIO = 100, FIRE = 80, ACID = 100)
+ armor = list(MELEE = 75, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 50, BIO = 100, FIRE = 80, ACID = 100)
smoothing_flags = SMOOTH_BITMASK
- smoothing_groups = list(SMOOTH_GROUP_SHUTTLE_PARTS, SMOOTH_GROUP_WINDOW_FULLTILE_SHUTTLE)
- canSmoothWith = list(SMOOTH_GROUP_WINDOW_FULLTILE_SHUTTLE)
+ smoothing_groups = list(SMOOTH_GROUP_WINDOW_FULLTILE_SHUTTLE)
+ canSmoothWith = list(SMOOTH_GROUP_WINDOW_FULLTILE_SHUTTLE, SMOOTH_GROUP_WALLS, SMOOTH_GROUP_AIRLOCK, SMOOTH_GROUP_SHUTTERS_BLASTDOORS)
explosion_block = 3
glass_type = /obj/item/stack/sheet/titaniumglass
glass_amount = 2
receive_ricochet_chance_mod = 1.2
melting_point = 8000
damage_per_fire_tick = 5
+ damage_deflection = 11
/obj/structure/window/reinforced/shuttle/narsie_act()
add_atom_colour("#3C3434", FIXED_COLOUR_PRIORITY)
@@ -732,14 +753,17 @@
/obj/structure/window/reinforced/shuttle/unanchored
anchored = FALSE
- state = WINDOW_OUT_OF_FRAME
/obj/structure/window/reinforced/plasma/plastitanium
name = "plastitanium window"
desc = "A durable looking window made of an alloy of of plasma and titanium."
- icon = 'icons/obj/smooth_structures/plastitanium_window.dmi'
- icon_state = "plastitanium_window-0"
- base_icon_state = "plastitanium_window"
+ icon = 'icons/obj/smooth_structures/window.dmi'
+ icon_state = "window-0"
+ base_icon_state = "window"
+ color = "#D0CBD4"
+ greyscale_config = /datum/greyscale_config/fulltile_window
+ greyscale_colors = "#D0CBD4"
+ alpha = 180
max_integrity = 1200
wtype = "shuttle"
fulltile = TRUE
@@ -747,8 +771,8 @@
heat_resistance = 1600
armor = list(MELEE = 95, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 50, BIO = 100, FIRE = 80, ACID = 100)
smoothing_flags = SMOOTH_BITMASK
- smoothing_groups = list(SMOOTH_GROUP_SHUTTLE_PARTS, SMOOTH_GROUP_WINDOW_FULLTILE_PLASTITANIUM)
- canSmoothWith = list(SMOOTH_GROUP_WINDOW_FULLTILE_PLASTITANIUM)
+ smoothing_groups = list(SMOOTH_GROUP_WINDOW_FULLTILE)
+ canSmoothWith = list(SMOOTH_GROUP_WINDOW_FULLTILE, SMOOTH_GROUP_WALLS, SMOOTH_GROUP_AIRLOCK, SMOOTH_GROUP_SHUTTERS_BLASTDOORS)
explosion_block = 3
damage_deflection = 21 //The same as reinforced plasma windows.3
glass_type = /obj/item/stack/sheet/plastitaniumglass
@@ -854,11 +878,16 @@
anchored = FALSE
/obj/structure/window/bronze/fulltile
- icon_state = "clockwork_window-0"
- base_icon_state = "clockwork_window"
+ icon = 'icons/obj/smooth_structures/window.dmi'
+ icon_state = "window-0"
+ base_icon_state = "window"
+ color = "#92661A"
+ greyscale_config = /datum/greyscale_config/fulltile_window
+ greyscale_colors = "#92661A"
+ alpha = 180
smoothing_flags = SMOOTH_BITMASK
- smoothing_groups = list(SMOOTH_GROUP_WINDOW_FULLTILE, SMOOTH_GROUP_WINDOW_FULLTILE_BRONZE)
- canSmoothWith = list(SMOOTH_GROUP_WINDOW_FULLTILE_BRONZE)
+ smoothing_groups = list(SMOOTH_GROUP_WINDOW_FULLTILE)
+ canSmoothWith = list(SMOOTH_GROUP_WINDOW_FULLTILE, SMOOTH_GROUP_WALLS, SMOOTH_GROUP_AIRLOCK, SMOOTH_GROUP_SHUTTERS_BLASTDOORS)
fulltile = TRUE
flags_1 = PREVENT_CLICK_UNDER_1
max_integrity = 50
diff --git a/code/game/turfs/change_turf.dm b/code/game/turfs/change_turf.dm
index 569a0567f77..dc2472d72e0 100644
--- a/code/game/turfs/change_turf.dm
+++ b/code/game/turfs/change_turf.dm
@@ -24,8 +24,11 @@ GLOBAL_LIST_INIT(blacklisted_automated_baseturfs, typecacheof(list(
if(T.icon != icon)
T.icon = icon
if(color)
- T.atom_colours = atom_colours.Copy()
- T.update_atom_colour()
+ if(atom_colours) //Because, we may very well not use atom_colours while we use color, to optimize memory
+ T.atom_colours = atom_colours.Copy()
+ T.update_atom_colour()
+ else
+ T.color = color
if(T.dir != dir)
T.setDir(dir)
return T
diff --git a/code/game/turfs/closed/_closed.dm b/code/game/turfs/closed/_closed.dm
index f269032d350..f52f33f61dc 100644
--- a/code/game/turfs/closed/_closed.dm
+++ b/code/game/turfs/closed/_closed.dm
@@ -1,6 +1,5 @@
/turf/closed
layer = CLOSED_TURF_LAYER
- turf_flags = IS_SOLID
opacity = TRUE
density = TRUE
blocks_air = AIR_BLOCKED
@@ -42,29 +41,10 @@
icon = 'icons/turf/shuttleold.dmi'
icon_state = "block"
-/turf/closed/indestructible/weeb
- name = "paper wall"
- desc = "Reinforced paper walling. Someone really doesn't you to leave."
- icon = 'icons/obj/smooth_structures/paperframes.dmi'
- icon_state = "paperframes-0"
- base_icon_state = "paperframes"
- smoothing_flags = SMOOTH_BITMASK
- smoothing_groups = list(SMOOTH_GROUP_PAPERFRAME)
- canSmoothWith = list(SMOOTH_GROUP_PAPERFRAME)
- var/static/mutable_appearance/indestructible_paper = mutable_appearance('icons/obj/smooth_structures/paperframes.dmi',icon_state = "paper", layer = CLOSED_TURF_LAYER - 0.1)
-
-/turf/closed/indestructible/weeb/Initialize(mapload)
- . = ..()
- update_appearance()
-
-/turf/closed/indestructible/weeb/update_overlays()
- . = ..()
- . += indestructible_paper
-
/turf/closed/indestructible/sandstone
name = "sandstone wall"
desc = "A wall with sandstone plating. Rough."
- icon = 'icons/turf/walls/sandstone_wall.dmi'
+ icon = 'icons/turf/walls/legacy/sandstone_wall.dmi'
icon_state = "sandstone_wall-0"
base_icon_state = "sandstone_wall"
baseturfs = /turf/closed/indestructible/sandstone
@@ -116,7 +96,7 @@ INITIALIZE_IMMEDIATE(/turf/closed/indestructible/splashscreen)
/turf/closed/indestructible/reinforced
name = "reinforced wall"
desc = "A huge chunk of reinforced metal used to separate rooms. Effectively impervious to conventional methods of destruction."
- icon = 'icons/turf/walls/reinforced_wall.dmi'
+ icon = 'icons/turf/walls/legacy/reinforced_wall.dmi'
icon_state = "reinforced_wall-0"
base_icon_state = "reinforced_wall"
smoothing_flags = SMOOTH_BITMASK
@@ -125,7 +105,7 @@ INITIALIZE_IMMEDIATE(/turf/closed/indestructible/splashscreen)
/turf/closed/indestructible/riveted
- icon = 'icons/turf/walls/riveted.dmi'
+ icon = 'icons/turf/walls/legacy/riveted.dmi'
icon_state = "riveted-0"
base_icon_state = "riveted"
smoothing_flags = SMOOTH_BITMASK
@@ -133,15 +113,15 @@ INITIALIZE_IMMEDIATE(/turf/closed/indestructible/splashscreen)
canSmoothWith = list(SMOOTH_GROUP_CLOSED_TURFS)
/turf/closed/indestructible/syndicate
- icon = 'icons/turf/walls/plastitanium_wall.dmi'
+ icon = 'icons/turf/walls/legacy/plastitanium_wall.dmi'
icon_state = "plastitanium_wall-0"
base_icon_state = "plastitanium_wall"
smoothing_flags = SMOOTH_BITMASK
- smoothing_groups = list(SMOOTH_GROUP_CLOSED_TURFS, SMOOTH_GROUP_WALLS, SMOOTH_GROUP_SYNDICATE_WALLS)
- canSmoothWith = list(SMOOTH_GROUP_SYNDICATE_WALLS, SMOOTH_GROUP_PLASTITANIUM_WALLS, SMOOTH_GROUP_AIRLOCK, SMOOTH_GROUP_SHUTTLE_PARTS)
+ smoothing_groups = list(SMOOTH_GROUP_CLOSED_TURFS, SMOOTH_GROUP_WALLS)
+ canSmoothWith = list(SMOOTH_GROUP_WALLS, SMOOTH_GROUP_AIRLOCK, SMOOTH_GROUP_SHUTTLE_PARTS)
/turf/closed/indestructible/riveted/uranium
- icon = 'icons/turf/walls/uranium_wall.dmi'
+ icon = 'icons/turf/walls/legacy/uranium_wall.dmi'
icon_state = "uranium_wall-0"
base_icon_state = "uranium_wall"
smoothing_flags = SMOOTH_BITMASK
@@ -149,41 +129,33 @@ INITIALIZE_IMMEDIATE(/turf/closed/indestructible/splashscreen)
/turf/closed/indestructible/riveted/plastinum
name = "plastinum wall"
desc = "A luxurious wall made out of a plasma-platinum alloy. Effectively impervious to conventional methods of destruction."
- icon = 'icons/turf/walls/plastinum_wall.dmi'
+ icon = 'icons/turf/walls/legacy/plastinum_wall.dmi'
icon_state = "plastinum_wall-0"
base_icon_state = "plastinum_wall"
- smoothing_flags = SMOOTH_BITMASK | SMOOTH_DIAGONAL_CORNERS
- smoothing_groups = list(SMOOTH_GROUP_CLOSED_TURFS, SMOOTH_GROUP_WALLS, SMOOTH_GROUP_PLASTINUM_WALLS)
- canSmoothWith = list(SMOOTH_GROUP_PLASTINUM_WALLS)
-
-/turf/closed/indestructible/riveted/plastinum/nodiagonal
- icon_state = "map-shuttle_nd"
- smoothing_flags = SMOOTH_BITMASK
/turf/closed/indestructible/wood
- icon = 'icons/turf/walls/wood_wall.dmi'
+ icon = 'icons/turf/walls/legacy/wood_wall.dmi'
icon_state = "wood_wall-0"
base_icon_state = "wood_wall"
smoothing_flags = SMOOTH_BITMASK
- smoothing_groups = list(SMOOTH_GROUP_CLOSED_TURFS, SMOOTH_GROUP_WALLS, SMOOTH_GROUP_WOOD_WALLS)
- canSmoothWith = list(SMOOTH_GROUP_WOOD_WALLS)
+ smoothing_groups = list(SMOOTH_GROUP_CLOSED_TURFS, SMOOTH_GROUP_WALLS, SMOOTH_GROUP_WALLS)
+ canSmoothWith = list(SMOOTH_GROUP_WALLS)
/turf/closed/indestructible/alien
name = "alien wall"
desc = "A wall with alien alloy plating."
- icon = 'icons/turf/walls/abductor_wall.dmi'
+ icon = 'icons/turf/walls/legacy/abductor_wall.dmi'
icon_state = "abductor_wall-0"
base_icon_state = "abductor_wall"
- smoothing_flags = SMOOTH_BITMASK | SMOOTH_DIAGONAL_CORNERS
- smoothing_groups = list(SMOOTH_GROUP_CLOSED_TURFS, SMOOTH_GROUP_WALLS, SMOOTH_GROUP_ABDUCTOR_WALLS)
- canSmoothWith = list(SMOOTH_GROUP_ABDUCTOR_WALLS)
+ smoothing_groups = list(SMOOTH_GROUP_CLOSED_TURFS, SMOOTH_GROUP_WALLS, SMOOTH_GROUP_WALLS)
+ canSmoothWith = list(SMOOTH_GROUP_WALLS)
/turf/closed/indestructible/cult
name = "runed metal wall"
desc = "A cold metal wall engraved with indecipherable symbols. Studying them causes your head to pound. Effectively impervious to conventional methods of destruction."
- icon = 'icons/turf/walls/cult_wall.dmi'
+ icon = 'icons/turf/walls/legacy/cult_wall.dmi'
icon_state = "cult_wall-0"
base_icon_state = "cult_wall"
smoothing_flags = SMOOTH_BITMASK
@@ -200,30 +172,32 @@ INITIALIZE_IMMEDIATE(/turf/closed/indestructible/splashscreen)
/turf/closed/indestructible/fakeglass
name = "window"
- icon = 'icons/obj/smooth_structures/reinforced_window.dmi'
- icon_state = "fake_window"
- base_icon_state = "reinforced_window"
+ icon = 'icons/obj/smooth_structures/window.dmi'
+ icon_state = "window-0"
+ base_icon_state = "window"
+ color = "#c162ec"
opacity = FALSE
smoothing_flags = SMOOTH_BITMASK
smoothing_groups = list(SMOOTH_GROUP_WINDOW_FULLTILE)
canSmoothWith = list(SMOOTH_GROUP_WINDOW_FULLTILE)
-/turf/closed/indestructible/fakeglass/Initialize(mapload)
+/turf/closed/indestructible/fakeglass/Initialize(mapload, inherited_virtual_z)
. = ..()
underlays += mutable_appearance('icons/obj/structures.dmi', "grille") //add a grille underlay
underlays += mutable_appearance('icons/turf/floors.dmi', "plating") //add the plating underlay, below the grille
/turf/closed/indestructible/opsglass
name = "window"
- icon = 'icons/obj/smooth_structures/plastitanium_window.dmi'
- icon_state = "plastitanium_window-0"
- base_icon_state = "plastitanium_window"
+ icon = 'icons/obj/smooth_structures/window.dmi'
+ icon_state = "window-0"
+ base_icon_state = "window"
+ color = "#5d3369"
opacity = FALSE
smoothing_flags = SMOOTH_BITMASK
smoothing_groups = list(SMOOTH_GROUP_SHUTTLE_PARTS, SMOOTH_GROUP_WINDOW_FULLTILE_PLASTITANIUM)
canSmoothWith = list(SMOOTH_GROUP_WINDOW_FULLTILE_PLASTITANIUM)
-/turf/closed/indestructible/opsglass/Initialize(mapload)
+/turf/closed/indestructible/opsglass/Initialize(mapload, inherited_virtual_z)
. = ..()
icon_state = null
underlays += mutable_appearance('icons/obj/structures.dmi', "grille")
@@ -255,7 +229,7 @@ INITIALIZE_IMMEDIATE(/turf/closed/indestructible/splashscreen)
icon_state = "icerock"
/turf/closed/indestructible/rock/snow/ice/ore
- icon = 'icons/turf/walls/icerock_wall.dmi'
+ icon = 'icons/turf/walls/legacy/icerock_wall.dmi'
icon_state = "icerock_wall-0"
base_icon_state = "icerock_wall"
smoothing_flags = SMOOTH_BITMASK | SMOOTH_BORDER
@@ -286,18 +260,18 @@ INITIALIZE_IMMEDIATE(/turf/closed/indestructible/splashscreen)
/turf/closed/indestructible/iron
name = "impervious iron wall"
desc = "A wall with tough iron plating."
- icon = 'icons/turf/walls/iron_wall.dmi'
+ icon = 'icons/turf/walls/legacy/iron_wall.dmi'
icon_state = "iron_wall-0"
base_icon_state = "iron_wall"
smoothing_flags = SMOOTH_BITMASK
- smoothing_groups = list(SMOOTH_GROUP_CLOSED_TURFS, SMOOTH_GROUP_WALLS, SMOOTH_GROUP_IRON_WALLS)
- canSmoothWith = list(SMOOTH_GROUP_IRON_WALLS)
+ smoothing_groups = list(SMOOTH_GROUP_CLOSED_TURFS, SMOOTH_GROUP_WALLS)
+ canSmoothWith = list(SMOOTH_GROUP_WALLS)
opacity = FALSE
/turf/closed/indestructible/riveted/boss
name = "necropolis wall"
desc = "A thick, seemingly indestructible stone wall."
- icon = 'icons/turf/walls/boss_wall.dmi'
+ icon = 'icons/turf/walls/legacy/boss_wall.dmi'
icon_state = "boss_wall-0"
base_icon_state = "boss_wall"
smoothing_flags = SMOOTH_BITMASK
@@ -317,7 +291,7 @@ INITIALIZE_IMMEDIATE(/turf/closed/indestructible/splashscreen)
/turf/closed/indestructible/riveted/hierophant
name = "wall"
desc = "A wall made out of a strange metal. The squares on it pulse in a predictable pattern."
- icon = 'icons/turf/walls/hierophant_wall.dmi'
+ icon = 'icons/turf/walls/legacy/hierophant_wall.dmi'
icon_state = "wall"
smoothing_flags = SMOOTH_CORNERS
smoothing_groups = list(SMOOTH_GROUP_HIERO_WALL)
diff --git a/code/game/turfs/closed/minerals.dm b/code/game/turfs/closed/minerals.dm
index 2004f89a951..746963b1d25 100644
--- a/code/game/turfs/closed/minerals.dm
+++ b/code/game/turfs/closed/minerals.dm
@@ -13,7 +13,6 @@
initial_gas = AIRLESS_ATMOS
opacity = TRUE
density = TRUE
- layer = EDGED_TURF_LAYER
plane = GAME_PLANE_UPPER
base_icon_state = "smoothrocks"
temperature = TCMB
@@ -262,7 +261,7 @@
/turf/closed/mineral/random/snow
name = "snowy mountainside"
icon = 'icons/turf/mining.dmi'
- smooth_icon = 'icons/turf/walls/mountain_wall.dmi'
+ smooth_icon = 'icons/turf/walls/legacy/mountain_wall.dmi'
icon_state = "mountainrock"
base_icon_state = "mountain_wall"
smoothing_flags = SMOOTH_BITMASK | SMOOTH_BORDER
@@ -276,8 +275,8 @@
/turf/closed/mineral/random/snow/Change_Ore(ore_type, random = 0)
. = ..()
if(mineralType)
- smooth_icon = 'icons/turf/walls/icerock_wall.dmi'
- icon = 'icons/turf/walls/icerock_wall.dmi'
+ smooth_icon = 'icons/turf/walls/legacy/icerock_wall.dmi'
+ icon = 'icons/turf/walls/legacy/icerock_wall.dmi'
icon_state = "icerock_wall-0"
base_icon_state = "icerock_wall"
smoothing_flags = SMOOTH_BITMASK | SMOOTH_BORDER
@@ -323,7 +322,7 @@
/turf/closed/mineral/random/labormineral/ice
name = "snowy mountainside"
icon = 'icons/turf/mining.dmi'
- smooth_icon = 'icons/turf/walls/mountain_wall.dmi'
+ smooth_icon = 'icons/turf/walls/legacy/mountain_wall.dmi'
icon_state = "mountainrock"
base_icon_state = "mountain_wall"
smoothing_flags = SMOOTH_BITMASK | SMOOTH_BORDER
@@ -341,8 +340,8 @@
/turf/closed/mineral/random/labormineral/ice/Change_Ore(ore_type, random = 0)
. = ..()
if(mineralType)
- smooth_icon = 'icons/turf/walls/icerock_wall.dmi'
- icon = 'icons/turf/walls/icerock_wall.dmi'
+ smooth_icon = 'icons/turf/walls/legacy/icerock_wall.dmi'
+ icon = 'icons/turf/walls/legacy/icerock_wall.dmi'
icon_state = "icerock_wall-0"
base_icon_state = "icerock_wall"
smoothing_flags = SMOOTH_BITMASK | SMOOTH_BORDER
@@ -353,7 +352,7 @@
/turf/closed/mineral/iron/ice
icon_state = "icerock_iron"
- smooth_icon = 'icons/turf/walls/icerock_wall.dmi'
+ smooth_icon = 'icons/turf/walls/legacy/icerock_wall.dmi'
base_icon_state = "icerock_wall"
smoothing_flags = SMOOTH_BITMASK | SMOOTH_BORDER
turf_type = /turf/open/misc/asteroid/snow/ice
@@ -371,7 +370,7 @@
/turf/closed/mineral/diamond/ice
icon_state = "icerock_iron"
- smooth_icon = 'icons/turf/walls/icerock_wall.dmi'
+ smooth_icon = 'icons/turf/walls/legacy/icerock_wall.dmi'
base_icon_state = "icerock_wall"
smoothing_flags = SMOOTH_BITMASK | SMOOTH_BORDER
turf_type = /turf/open/misc/asteroid/snow/ice
@@ -408,7 +407,7 @@
/turf/closed/mineral/plasma/ice
icon_state = "icerock_plasma"
- smooth_icon = 'icons/turf/walls/icerock_wall.dmi'
+ smooth_icon = 'icons/turf/walls/legacy/icerock_wall.dmi'
base_icon_state = "icerock_wall"
smoothing_flags = SMOOTH_BITMASK | SMOOTH_BORDER
turf_type = /turf/open/misc/asteroid/snow/ice
@@ -445,7 +444,7 @@
/turf/closed/mineral/ash_rock //wall piece
name = "rock"
icon = 'icons/turf/mining.dmi'
- smooth_icon = 'icons/turf/walls/rock_wall.dmi'
+ smooth_icon = 'icons/turf/walls/legacy/rock_wall.dmi'
icon_state = "rock2"
base_icon_state = "rock_wall"
smoothing_flags = SMOOTH_BITMASK | SMOOTH_BORDER
@@ -458,7 +457,7 @@
/turf/closed/mineral/snowmountain
name = "snowy mountainside"
icon = 'icons/turf/mining.dmi'
- smooth_icon = 'icons/turf/walls/mountain_wall.dmi'
+ smooth_icon = 'icons/turf/walls/legacy/mountain_wall.dmi'
icon_state = "mountainrock"
base_icon_state = "mountain_wall"
smoothing_flags = SMOOTH_BITMASK | SMOOTH_BORDER
@@ -476,7 +475,7 @@
/turf/closed/mineral/snowmountain/cavern
name = "ice cavern rock"
icon = 'icons/turf/mining.dmi'
- smooth_icon = 'icons/turf/walls/icerock_wall.dmi'
+ smooth_icon = 'icons/turf/walls/legacy/icerock_wall.dmi'
icon_state = "icerock"
base_icon_state = "icerock_wall"
smoothing_flags = SMOOTH_BITMASK | SMOOTH_BORDER
@@ -494,13 +493,13 @@
name = "iron rock"
icon = 'icons/turf/mining.dmi'
icon_state = "redrock"
- smooth_icon = 'icons/turf/walls/red_wall.dmi'
+ smooth_icon = 'icons/turf/walls/legacy/red_wall.dmi'
base_icon_state = "red_wall"
/turf/closed/mineral/random/stationside/asteroid
name = "iron rock"
icon = 'icons/turf/mining.dmi'
- smooth_icon = 'icons/turf/walls/red_wall.dmi'
+ smooth_icon = 'icons/turf/walls/legacy/red_wall.dmi'
base_icon_state = "red_wall"
/turf/closed/mineral/random/stationside/asteroid/porus
@@ -613,7 +612,7 @@
/turf/closed/mineral/gibtonite/ice
icon_state = "icerock_Gibtonite"
- smooth_icon = 'icons/turf/walls/icerock_wall.dmi'
+ smooth_icon = 'icons/turf/walls/legacy/icerock_wall.dmi'
base_icon_state = "icerock_wall"
smoothing_flags = SMOOTH_BITMASK | SMOOTH_BORDER
turf_type = /turf/open/misc/asteroid/snow/ice
@@ -633,7 +632,7 @@
baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface
initial_gas = LAVALAND_DEFAULT_ATMOS
defer_change = 1
- smooth_icon = 'icons/turf/walls/rock_wall.dmi'
+ smooth_icon = 'icons/turf/walls/legacy/rock_wall.dmi'
base_icon_state = "rock_wall"
smoothing_flags = SMOOTH_BITMASK | SMOOTH_BORDER
diff --git a/code/game/turfs/closed/wall/material_walls.dm b/code/game/turfs/closed/wall/material_walls.dm
deleted file mode 100644
index e1de7f8a98d..00000000000
--- a/code/game/turfs/closed/wall/material_walls.dm
+++ /dev/null
@@ -1,26 +0,0 @@
-/turf/closed/wall/material
- name = "wall"
- desc = "A huge chunk of material used to separate rooms."
- icon = 'icons/turf/walls/materialwall.dmi'
- icon_state = "materialwall-0"
- base_icon_state = "materialwall"
- smoothing_flags = SMOOTH_BITMASK
- smoothing_groups = list(SMOOTH_GROUP_CLOSED_TURFS, SMOOTH_GROUP_WALLS, SMOOTH_GROUP_MATERIAL_WALLS)
- canSmoothWith = list(SMOOTH_GROUP_MATERIAL_WALLS)
- rcd_memory = null
- material_flags = MATERIAL_EFFECTS | MATERIAL_ADD_PREFIX | MATERIAL_COLOR | MATERIAL_AFFECT_STATISTICS
-
-/turf/closed/wall/material/break_wall()
- for(var/i in custom_materials)
- var/datum/material/M = i
- new M.sheet_type(src, FLOOR(custom_materials[M] / MINERAL_MATERIAL_AMOUNT, 1))
- return new girder_type(src)
-
-/turf/closed/wall/material/devastate_wall()
- for(var/i in custom_materials)
- var/datum/material/M = i
- new M.sheet_type(src, FLOOR(custom_materials[M] / MINERAL_MATERIAL_AMOUNT, 1))
-
-/turf/closed/wall/material/mat_update_desc(mat)
- desc = "A huge chunk of [mat] used to separate rooms."
-
diff --git a/code/game/turfs/closed/wall/mineral_walls.dm b/code/game/turfs/closed/wall/mineral_walls.dm
index cff9015aa77..cff5538d3a2 100644
--- a/code/game/turfs/closed/wall/mineral_walls.dm
+++ b/code/game/turfs/closed/wall/mineral_walls.dm
@@ -1,9 +1,6 @@
/turf/closed/wall/mineral
name = "mineral wall"
desc = "This shouldn't exist"
- icon_state = ""
- smoothing_flags = SMOOTH_BITMASK
- canSmoothWith = null
rcd_memory = null
material_flags = MATERIAL_EFFECTS
var/last_event = 0
@@ -12,40 +9,23 @@
/turf/closed/wall/mineral/gold
name = "gold wall"
desc = "A wall with gold plating. Swag!"
- icon = 'icons/turf/walls/gold_wall.dmi'
- icon_state = "gold_wall-0"
- base_icon_state = "gold_wall"
- sheet_type = /obj/item/stack/sheet/mineral/gold
explosion_block = 0 //gold is a soft metal you dingus.
- smoothing_groups = list(SMOOTH_GROUP_CLOSED_TURFS, SMOOTH_GROUP_WALLS, SMOOTH_GROUP_GOLD_WALLS)
- canSmoothWith = list(SMOOTH_GROUP_GOLD_WALLS)
- custom_materials = list(/datum/material/gold = 4000)
+ plating_material = /datum/material/gold
+ color = "#dbdd4c" //To display in mapping softwares
/turf/closed/wall/mineral/silver
name = "silver wall"
desc = "A wall with silver plating. Shiny!"
- icon = 'icons/turf/walls/silver_wall.dmi'
- icon_state = "silver_wall-0"
- base_icon_state = "silver_wall"
- sheet_type = /obj/item/stack/sheet/mineral/silver
- smoothing_flags = SMOOTH_BITMASK
- smoothing_groups = list(SMOOTH_GROUP_CLOSED_TURFS, SMOOTH_GROUP_WALLS, SMOOTH_GROUP_SILVER_WALLS)
- canSmoothWith = list(SMOOTH_GROUP_SILVER_WALLS)
- custom_materials = list(/datum/material/silver = 4000)
+ plating_material = /datum/material/silver
+ color = "#e3f1f8" //To display in mapping softwares
/turf/closed/wall/mineral/diamond
name = "diamond wall"
desc = "A wall with diamond plating. You monster."
- icon = 'icons/turf/walls/diamond_wall.dmi'
- icon_state = "diamond_wall-0"
- base_icon_state = "diamond_wall"
- sheet_type = /obj/item/stack/sheet/mineral/diamond
slicing_duration = 200 //diamond wall takes twice as much time to slice
explosion_block = 3
- smoothing_flags = SMOOTH_BITMASK
- smoothing_groups = list(SMOOTH_GROUP_CLOSED_TURFS, SMOOTH_GROUP_WALLS, SMOOTH_GROUP_DIAMOND_WALLS)
- canSmoothWith = list(SMOOTH_GROUP_DIAMOND_WALLS)
- custom_materials = list(/datum/material/diamond = 4000)
+ plating_material = /datum/material/diamond
+ color = "#71c8f7" //To display in mapping softwares
/turf/closed/wall/mineral/diamond/hulk_recoil(obj/item/bodypart/arm, mob/living/carbon/human/hulkman, damage = 41)
return ..()
@@ -53,40 +33,23 @@
/turf/closed/wall/mineral/bananium
name = "bananium wall"
desc = "A wall with bananium plating. Honk!"
- icon = 'icons/turf/walls/bananium_wall.dmi'
- icon_state = "bananium_wall-0"
- base_icon_state = "bananium_wall"
- sheet_type = /obj/item/stack/sheet/mineral/bananium
- smoothing_flags = SMOOTH_BITMASK
- smoothing_groups = list(SMOOTH_GROUP_CLOSED_TURFS, SMOOTH_GROUP_WALLS, SMOOTH_GROUP_BANANIUM_WALLS)
- canSmoothWith = list(SMOOTH_GROUP_BANANIUM_WALLS)
- custom_materials = list(/datum/material/bananium = 4000)
+ plating_material = /datum/material/bananium
+ color = "#ffff00" //To display in mapping softwares
/turf/closed/wall/mineral/sandstone
name = "sandstone wall"
desc = "A wall with sandstone plating. Rough."
- icon = 'icons/turf/walls/sandstone_wall.dmi'
- icon_state = "sandstone_wall-0"
- base_icon_state = "sandstone_wall"
- sheet_type = /obj/item/stack/sheet/mineral/sandstone
+ icon = 'icons/turf/walls/stone_wall.dmi'
explosion_block = 0
- smoothing_flags = SMOOTH_BITMASK
- smoothing_groups = list(SMOOTH_GROUP_CLOSED_TURFS, SMOOTH_GROUP_WALLS, SMOOTH_GROUP_SANDSTONE_WALLS)
- canSmoothWith = list(SMOOTH_GROUP_SANDSTONE_WALLS)
- custom_materials = list(/datum/material/sandstone = 4000)
+ plating_material = /datum/material/sandstone
+ color = "#B77D31" //To display in mapping softwares
/turf/closed/wall/mineral/uranium
article = "a"
name = "uranium wall"
desc = "A wall with uranium plating. This is probably a bad idea."
- icon = 'icons/turf/walls/uranium_wall.dmi'
- icon_state = "uranium_wall-0"
- base_icon_state = "uranium_wall"
- sheet_type = /obj/item/stack/sheet/mineral/uranium
- smoothing_flags = SMOOTH_BITMASK
- smoothing_groups = list(SMOOTH_GROUP_CLOSED_TURFS, SMOOTH_GROUP_WALLS, SMOOTH_GROUP_URANIUM_WALLS)
- canSmoothWith = list(SMOOTH_GROUP_URANIUM_WALLS)
- custom_materials = list(/datum/material/uranium = 4000)
+ plating_material = /datum/material/uranium
+ color = "#30f71a" //To display in mapping softwares
/turf/closed/wall/mineral/uranium/proc/radiate()
if(!active)
@@ -124,30 +87,19 @@
/turf/closed/wall/mineral/plasma
name = "plasma wall"
desc = "A wall with plasma plating. This is definitely a bad idea."
- icon = 'icons/turf/walls/plasma_wall.dmi'
- icon_state = "plasma_wall-0"
- base_icon_state = "plasma_wall"
- sheet_type = /obj/item/stack/sheet/mineral/plasma
- //thermal_conductivity = 0.04
- smoothing_flags = SMOOTH_BITMASK
- smoothing_groups = list(SMOOTH_GROUP_CLOSED_TURFS, SMOOTH_GROUP_WALLS, SMOOTH_GROUP_PLASMA_WALLS)
- canSmoothWith = list(SMOOTH_GROUP_PLASMA_WALLS)
- custom_materials = list(/datum/material/plasma = 4000)
+ thermal_conductivity = 0.04
+ plating_material = /datum/material/plasma
+ color = "#c162ec" //To display in mapping softwares
/turf/closed/wall/mineral/wood
name = "wooden wall"
desc = "A wall with wooden plating. Stiff."
icon = 'icons/turf/walls/wood_wall.dmi'
- icon_state = "wood_wall-0"
- base_icon_state = "wood_wall"
- sheet_type = /obj/item/stack/sheet/mineral/wood
hardness = 70
turf_flags = IS_SOLID
explosion_block = 0
- smoothing_flags = SMOOTH_BITMASK
- smoothing_groups = list(SMOOTH_GROUP_CLOSED_TURFS, SMOOTH_GROUP_WALLS, SMOOTH_GROUP_WOOD_WALLS)
- canSmoothWith = list(SMOOTH_GROUP_WOOD_WALLS)
- custom_materials = list(/datum/material/wood = 4000)
+ plating_material = /datum/material/wood
+ color = "#bb8e53" //To display in mapping softwares
/turf/closed/wall/mineral/wood/attackby(obj/item/W, mob/user)
if(W.get_sharpness() && W.force)
@@ -164,49 +116,23 @@
/turf/closed/wall/mineral/wood/nonmetal
desc = "A solidly wooden wall. It's a bit weaker than a wall made with metal."
- girder_type = /obj/structure/barricade/wooden
hardness = 50
-/turf/closed/wall/mineral/bamboo
- name = "bamboo wall"
- desc = "A wall with a bamboo finish."
- icon = 'icons/turf/walls/bamboo_wall.dmi'
- icon_state = "bamboo"
- smoothing_flags = SMOOTH_BITMASK
- smoothing_groups = list(SMOOTH_GROUP_CLOSED_TURFS, SMOOTH_GROUP_WALLS, SMOOTH_GROUP_BAMBOO_WALLS)
- canSmoothWith = list(SMOOTH_GROUP_BAMBOO_WALLS)
- sheet_type = /obj/item/stack/sheet/mineral/bamboo
- hardness = 60
-
/turf/closed/wall/mineral/iron
name = "rough iron wall"
desc = "A wall with rough iron plating."
- icon = 'icons/turf/walls/iron_wall.dmi'
- icon_state = "iron_wall-0"
- base_icon_state = "iron_wall"
- sheet_type = /obj/item/stack/rods
- sheet_amount = 5
- smoothing_flags = SMOOTH_BITMASK
- smoothing_groups = list(SMOOTH_GROUP_CLOSED_TURFS, SMOOTH_GROUP_WALLS, SMOOTH_GROUP_IRON_WALLS)
- canSmoothWith = list(SMOOTH_GROUP_IRON_WALLS)
- custom_materials = list(/datum/material/iron = 5000)
+ icon = 'icons/turf/walls/stone_wall.dmi'
/turf/closed/wall/mineral/snow
name = "packed snow wall"
desc = "A wall made of densely packed snow blocks."
- icon = 'icons/turf/walls/snow_wall.dmi'
- icon_state = "snow_wall-0"
- base_icon_state = "snow_wall"
- smoothing_flags = SMOOTH_BITMASK
+ icon = 'icons/turf/walls/stone_wall.dmi'
hardness = 80
explosion_block = 0
slicing_duration = 30
- sheet_type = /obj/item/stack/sheet/mineral/snow
- canSmoothWith = null
- girder_type = null
bullet_sizzle = TRUE
bullet_bounce_sound = null
- custom_materials = list(/datum/material/snow = 4000)
+ plating_material = /datum/material/snow
/turf/closed/wall/mineral/snow/hulk_recoil(obj/item/bodypart/arm, mob/living/carbon/human/hulkman, damage = 0)
return ..() //No recoil damage, snow is weak
@@ -214,78 +140,47 @@
/turf/closed/wall/mineral/abductor
name = "alien wall"
desc = "A wall with alien alloy plating."
- icon = 'icons/turf/walls/abductor_wall.dmi'
- icon_state = "abductor_wall-0"
- base_icon_state = "abductor_wall"
- sheet_type = /obj/item/stack/sheet/mineral/abductor
slicing_duration = 200 //alien wall takes twice as much time to slice
explosion_block = 3
- smoothing_flags = SMOOTH_BITMASK | SMOOTH_DIAGONAL_CORNERS
- smoothing_groups = list(SMOOTH_GROUP_CLOSED_TURFS, SMOOTH_GROUP_WALLS, SMOOTH_GROUP_ABDUCTOR_WALLS)
- canSmoothWith = list(SMOOTH_GROUP_ABDUCTOR_WALLS)
- custom_materials = list(/datum/material/alloy/alien = 4000)
+ plating_material = /datum/material/alloy/alien
+ color = "#6041aa" //To display in mapping softwares
/////////////////////Titanium walls/////////////////////
/turf/closed/wall/mineral/titanium //has to use this path due to how building walls works
name = "wall"
desc = "A light-weight titanium wall used in shuttles."
- icon = 'icons/turf/walls/shuttle_wall.dmi'
- icon_state = "shuttle_wall-0"
- base_icon_state = "shuttle_wall"
explosion_block = 3
flags_1 = CAN_BE_DIRTY_1
flags_ricochet = RICOCHET_SHINY | RICOCHET_HARD
- sheet_type = /obj/item/stack/sheet/mineral/titanium
- smoothing_flags = SMOOTH_BITMASK | SMOOTH_DIAGONAL_CORNERS
- smoothing_groups = list(SMOOTH_GROUP_CLOSED_TURFS, SMOOTH_GROUP_WALLS, SMOOTH_GROUP_TITANIUM_WALLS)
- canSmoothWith = list(SMOOTH_GROUP_TITANIUM_WALLS, SMOOTH_GROUP_AIRLOCK, SMOOTH_GROUP_SHUTTLE_PARTS)
- custom_materials = list(/datum/material/titanium = 4000)
+ smoothing_groups = list(SMOOTH_GROUP_WALLS)
+ canSmoothWith = list(SMOOTH_GROUP_SHUTTERS_BLASTDOORS, SMOOTH_GROUP_WALLS, SMOOTH_GROUP_AIRLOCK, SMOOTH_GROUP_WINDOW_FULLTILE, SMOOTH_GROUP_LOW_WALL)
+ plating_material = /datum/material/titanium
+ color = "#b3c0c7" //To display in mapping softwares
/turf/closed/wall/mineral/titanium/rust_heretic_act()
return // titanium does not rust
/turf/closed/wall/mineral/titanium/nodiagonal
- icon = 'icons/turf/walls/shuttle_wall.dmi'
- icon_state = "map-shuttle_nd"
- base_icon_state = "shuttle_wall"
- smoothing_flags = SMOOTH_BITMASK
/turf/closed/wall/mineral/titanium/nosmooth
- icon = 'icons/turf/shuttle.dmi'
- icon_state = "wall"
- smoothing_flags = NONE
/turf/closed/wall/mineral/titanium/overspace
- icon_state = "map-overspace"
- smoothing_flags = SMOOTH_BITMASK | SMOOTH_DIAGONAL_CORNERS
- fixed_underlay = list("space" = TRUE)
-
-/turf/closed/wall/mineral/titanium/interior/copyTurf(turf/T)
- . = ..()
- T.transform = transform
-/turf/closed/wall/mineral/titanium/copyTurf(turf/T)
- . = ..()
- T.transform = transform
+/turf/closed/wall/mineral/titanium/interior
/turf/closed/wall/mineral/titanium/survival
name = "pod wall"
desc = "An easily-compressable wall used for temporary shelter."
- icon = 'icons/turf/walls/survival_pod_walls.dmi'
- icon_state = "survival_pod_walls-0"
- base_icon_state = "survival_pod_walls"
- smoothing_flags = SMOOTH_BITMASK | SMOOTH_DIAGONAL_CORNERS
- canSmoothWith = list(SMOOTH_GROUP_TITANIUM_WALLS, SMOOTH_GROUP_AIRLOCK, SMOOTH_GROUP_WINDOW_FULLTILE, SMOOTH_GROUP_SHUTTLE_PARTS)
+ canSmoothWith = list(SMOOTH_GROUP_SURVIVAL_TIANIUM_POD, SMOOTH_GROUP_AIRLOCK, SMOOTH_GROUP_WINDOW_FULLTILE, SMOOTH_GROUP_SHUTTLE_PARTS)
+ color = "#242424" //To display in mapping softwares
+ wall_paint = "#242424"
+ stripe_paint = "#824621"
/turf/closed/wall/mineral/titanium/survival/nodiagonal
- icon = 'icons/turf/walls/survival_pod_walls.dmi'
- icon_state = "survival_pod_walls-0"
- base_icon_state = "survival_pod_walls"
- smoothing_flags = SMOOTH_BITMASK
/turf/closed/wall/mineral/titanium/survival/pod
- smoothing_groups = list(SMOOTH_GROUP_CLOSED_TURFS, SMOOTH_GROUP_WALLS, SMOOTH_GROUP_TITANIUM_WALLS, SMOOTH_GROUP_SURVIVAL_TIANIUM_POD)
+ smoothing_groups = list(SMOOTH_GROUP_CLOSED_TURFS, SMOOTH_GROUP_WALLS, SMOOTH_GROUP_SURVIVAL_TIANIUM_POD)
canSmoothWith = list(SMOOTH_GROUP_SURVIVAL_TIANIUM_POD)
/////////////////////Plastitanium walls/////////////////////
@@ -293,34 +188,21 @@
/turf/closed/wall/mineral/plastitanium
name = "wall"
desc = "A durable wall made of an alloy of plasma and titanium."
- icon = 'icons/turf/walls/plastitanium_wall.dmi'
- icon_state = "plastitanium_wall-0"
- base_icon_state = "plastitanium_wall"
+ icon = 'icons/turf/walls/metal_wall.dmi'
explosion_block = 4
- sheet_type = /obj/item/stack/sheet/mineral/plastitanium
- smoothing_flags = SMOOTH_BITMASK | SMOOTH_DIAGONAL_CORNERS
- smoothing_groups = list(SMOOTH_GROUP_CLOSED_TURFS, SMOOTH_GROUP_WALLS, SMOOTH_GROUP_PLASTITANIUM_WALLS)
- canSmoothWith = list(SMOOTH_GROUP_PLASTITANIUM_WALLS, SMOOTH_GROUP_SYNDICATE_WALLS, SMOOTH_GROUP_AIRLOCK, SMOOTH_GROUP_SHUTTLE_PARTS)
- custom_materials = list(/datum/material/alloy/plastitanium = 4000)
+ smoothing_groups = list(SMOOTH_GROUP_WALLS)
+ canSmoothWith = list(SMOOTH_GROUP_SHUTTERS_BLASTDOORS, SMOOTH_GROUP_WALLS, SMOOTH_GROUP_AIRLOCK, SMOOTH_GROUP_WINDOW_FULLTILE, SMOOTH_GROUP_LOW_WALL)
+ plating_material = /datum/material/alloy/plastitanium
+ color = "#3a313a" //To display in mapping softwares
/turf/closed/wall/mineral/plastitanium/rust_heretic_act()
return // plastitanium does not rust
/turf/closed/wall/mineral/plastitanium/nodiagonal
- icon = 'icons/turf/walls/plastitanium_wall.dmi'
- icon_state = "map-shuttle_nd"
- base_icon_state = "plastitanium_wall"
- smoothing_flags = SMOOTH_BITMASK
/turf/closed/wall/mineral/plastitanium/nosmooth
- icon = 'icons/turf/shuttle.dmi'
- icon_state = "wall"
- smoothing_flags = NONE
/turf/closed/wall/mineral/plastitanium/overspace
- icon_state = "map-overspace"
- smoothing_flags = SMOOTH_BITMASK | SMOOTH_DIAGONAL_CORNERS
- fixed_underlay = list("space" = TRUE)
/turf/closed/wall/mineral/plastitanium/explosive/ex_act(severity)
@@ -328,9 +210,4 @@
bombcore.detonate()
return ..()
-/turf/closed/wall/mineral/plastitanium/hulk_recoil(obj/item/bodypart/arm, mob/living/carbon/human/hulkman, damage = 41)
- return ..()
-
-/turf/closed/wall/mineral/plastitanium/copyTurf(turf/T)
- . = ..()
- T.transform = transform
+/turf/closed/wall/mineral/plastitanium/interior
diff --git a/code/game/turfs/closed/wall/misc_walls.dm b/code/game/turfs/closed/wall/misc_walls.dm
index 8842aeada09..4d1f430736e 100644
--- a/code/game/turfs/closed/wall/misc_walls.dm
+++ b/code/game/turfs/closed/wall/misc_walls.dm
@@ -2,22 +2,16 @@
name = "runed metal wall"
desc = "A cold metal wall engraved with indecipherable symbols. Studying them causes your head to pound."
icon = 'icons/turf/walls/cult_wall.dmi'
- icon_state = "cult_wall-0"
- base_icon_state = "cult_wall"
turf_flags = IS_SOLID
smoothing_flags = SMOOTH_BITMASK
canSmoothWith = null
- sheet_type = /obj/item/stack/sheet/runed_metal
- sheet_amount = 1
- girder_type = /obj/structure/girder/cult
+ plating_material = /datum/material/runedmetal
+ color = "#3C3434" //To display in mapping softwares
/turf/closed/wall/mineral/cult/Initialize(mapload)
new /obj/effect/temp_visual/cult/turf(src)
. = ..()
-/turf/closed/wall/mineral/cult/devastate_wall()
- new sheet_type(get_turf(src), sheet_amount)
-
/turf/closed/wall/mineral/cult/Exited(atom/movable/gone, direction)
. = ..()
if(istype(gone, /mob/living/simple_animal/hostile/construct/harvester)) //harvesters can go through cult walls, dragging something with
@@ -41,9 +35,6 @@
/turf/closed/wall/vault
name = "strange wall"
- icon = 'icons/turf/walls.dmi'
- icon_state = "rockvault"
- base_icon_state = "rockvault"
turf_flags = IS_SOLID
smoothing_flags = NONE
canSmoothWith = null
@@ -65,9 +56,6 @@
base_icon_state = "sandstonevault"
/turf/closed/wall/ice
- icon = 'icons/turf/walls/icedmetal_wall.dmi'
- icon_state = "icedmetal_wall-0"
- base_icon_state = "icedmetal_wall"
desc = "A wall covered in a thick sheet of ice."
turf_flags = IS_SOLID
smoothing_flags = SMOOTH_BITMASK
@@ -100,28 +88,20 @@
/turf/closed/wall/mineral/bronze
name = "clockwork wall"
desc = "A huge chunk of bronze, decorated like gears and cogs."
- icon = 'icons/turf/walls/clockwork_wall.dmi'
- icon_state = "clockwork_wall-0"
- base_icon_state = "clockwork_wall"
turf_flags = IS_SOLID
smoothing_flags = SMOOTH_BITMASK
- sheet_type = /obj/item/stack/sheet/bronze
- sheet_amount = 2
- girder_type = /obj/structure/girder/bronze
+ plating_material = /datum/material/bronze
+ color = "#92661A" //To display in mapping softwares
/turf/closed/wall/rock
name = "reinforced rock"
desc = "It has metal struts that need to be welded away before it can be mined."
- icon = 'icons/turf/walls/reinforced_rock.dmi'
+ icon = 'icons/turf/walls/legacy/reinforced_rock.dmi'
icon_state = "porous_rock-0"
base_icon_state = "porous_rock"
turf_flags = NO_RUST
- sheet_amount = 1
hardness = 50
- girder_type = null
- decon_type = /turf/closed/mineral/asteroid
/turf/closed/wall/rock/porous
name = "reinforced porous rock"
desc = "This rock is filled with pockets of breathable air. It has metal struts to protect it from mining."
- decon_type = /turf/closed/mineral/asteroid/porous
diff --git a/code/game/turfs/closed/wall/reinf_walls.dm b/code/game/turfs/closed/wall/reinf_walls.dm
index 350b3097c41..eb209b6640c 100644
--- a/code/game/turfs/closed/wall/reinf_walls.dm
+++ b/code/game/turfs/closed/wall/reinf_walls.dm
@@ -1,271 +1,30 @@
/turf/closed/wall/r_wall
name = "reinforced wall"
desc = "A huge chunk of reinforced metal used to separate rooms."
- icon = 'icons/turf/walls/reinforced_wall.dmi'
- icon_state = "reinforced_wall-0"
- base_icon_state = "reinforced_wall"
+ icon = 'icons/turf/walls/solid_wall_reinforced.dmi'
opacity = TRUE
density = TRUE
- turf_flags = IS_SOLID
- smoothing_flags = SMOOTH_BITMASK
hardness = 10
- sheet_type = /obj/item/stack/sheet/plasteel
- sheet_amount = 1
- girder_type = /obj/structure/girder/reinforced
+ reinf_material = /datum/material/iron
+ plating_material = /datum/material/alloy/plasteel
explosion_block = 2
rad_insulation = RAD_HEAVY_INSULATION
heat_capacity = 312500 //a little over 5 cm thick , 312500 for 1 m by 2.5 m by 0.25 m plasteel wall. also indicates the temperature at wich the wall will melt (currently only able to melt with H/E pipes)
- ///Dismantled state, related to deconstruction.
- var/d_state = INTACT
-
-
-/turf/closed/wall/r_wall/deconstruction_hints(mob/user)
- switch(d_state)
- if(INTACT)
- return span_notice("The outer grille is fully intact.")
- if(SUPPORT_LINES)
- return span_notice("The outer grille has been cut, and the support lines are screwed securely to the outer cover.")
- if(COVER)
- return span_notice("The support lines have been unscrewed, and the metal cover is welded firmly in place.")
- if(CUT_COVER)
- return span_notice("The metal cover has been sliced through, and is connected loosely to the girder.")
- if(ANCHOR_BOLTS)
- return span_notice("The outer cover has been pried away, and the bolts anchoring the support rods are wrenched in place.")
- if(SUPPORT_RODS)
- return span_notice("The bolts anchoring the support rods have been loosened, but are still welded firmly to the girder.")
- if(SHEATH)
- return span_notice("The support rods have been sliced through, and the outer sheath is connected loosely to the girder.")
-
-/turf/closed/wall/r_wall/devastate_wall()
- new sheet_type(src, sheet_amount)
- new /obj/item/stack/sheet/iron(src, 2)
-
-/turf/closed/wall/r_wall/attack_animal(mob/living/simple_animal/user, list/modifiers)
- user.changeNext_move(CLICK_CD_MELEE)
- user.do_attack_animation(src)
- if(!user.environment_smash)
- return
- if(user.environment_smash & ENVIRONMENT_SMASH_RWALLS)
- dismantle_wall(1)
- playsound(src, 'sound/effects/meteorimpact.ogg', 100, TRUE)
- else
- playsound(src, 'sound/effects/bang.ogg', 50, TRUE)
- to_chat(user, span_warning("This wall is far too strong for you to destroy."))
-
-/turf/closed/wall/r_wall/hulk_recoil(obj/item/bodypart/arm, mob/living/carbon/human/hulkman, damage = 41)
- return ..()
-
-/turf/closed/wall/r_wall/try_decon(obj/item/W, mob/user, turf/T)
- //DECONSTRUCTION
- switch(d_state)
- if(INTACT)
- if(W.tool_behaviour == TOOL_WIRECUTTER)
- W.play_tool_sound(src, 100)
- d_state = SUPPORT_LINES
- update_appearance()
- to_chat(user, span_notice("You cut the outer grille."))
- return TRUE
-
- if(SUPPORT_LINES)
- if(W.tool_behaviour == TOOL_SCREWDRIVER)
- to_chat(user, span_notice("You begin unsecuring the support lines..."))
- if(W.use_tool(src, user, 40, volume=100))
- if(!istype(src, /turf/closed/wall/r_wall) || d_state != SUPPORT_LINES)
- return TRUE
- d_state = COVER
- update_appearance()
- to_chat(user, span_notice("You unsecure the support lines."))
- return TRUE
-
- else if(W.tool_behaviour == TOOL_WIRECUTTER)
- W.play_tool_sound(src, 100)
- d_state = INTACT
- update_appearance()
- to_chat(user, span_notice("You repair the outer grille."))
- return TRUE
-
- if(COVER)
- if(W.tool_behaviour == TOOL_WELDER)
- if(!W.tool_start_check(user, amount=0))
- return
- to_chat(user, span_notice("You begin slicing through the metal cover..."))
- if(W.use_tool(src, user, 60, volume=100))
- if(!istype(src, /turf/closed/wall/r_wall) || d_state != COVER)
- return TRUE
- d_state = CUT_COVER
- update_appearance()
- to_chat(user, span_notice("You press firmly on the cover, dislodging it."))
- return TRUE
-
- if(W.tool_behaviour == TOOL_SCREWDRIVER)
- to_chat(user, span_notice("You begin securing the support lines..."))
- if(W.use_tool(src, user, 40, volume=100))
- if(!istype(src, /turf/closed/wall/r_wall) || d_state != COVER)
- return TRUE
- d_state = SUPPORT_LINES
- update_appearance()
- to_chat(user, span_notice("The support lines have been secured."))
- return TRUE
-
- if(CUT_COVER)
- if(W.tool_behaviour == TOOL_CROWBAR)
- to_chat(user, span_notice("You struggle to pry off the cover..."))
- if(W.use_tool(src, user, 100, volume=100))
- if(!istype(src, /turf/closed/wall/r_wall) || d_state != CUT_COVER)
- return TRUE
- d_state = ANCHOR_BOLTS
- update_appearance()
- to_chat(user, span_notice("You pry off the cover."))
- return TRUE
-
- if(W.tool_behaviour == TOOL_WELDER)
- if(!W.tool_start_check(user, amount=0))
- return
- to_chat(user, span_notice("You begin welding the metal cover back to the frame..."))
- if(W.use_tool(src, user, 60, volume=100))
- if(!istype(src, /turf/closed/wall/r_wall) || d_state != CUT_COVER)
- return TRUE
- d_state = COVER
- update_appearance()
- to_chat(user, span_notice("The metal cover has been welded securely to the frame."))
- return TRUE
-
- if(ANCHOR_BOLTS)
- if(W.tool_behaviour == TOOL_WRENCH)
- to_chat(user, span_notice("You start loosening the anchoring bolts which secure the support rods to their frame..."))
- if(W.use_tool(src, user, 40, volume=100))
- if(!istype(src, /turf/closed/wall/r_wall) || d_state != ANCHOR_BOLTS)
- return TRUE
- d_state = SUPPORT_RODS
- update_appearance()
- to_chat(user, span_notice("You remove the bolts anchoring the support rods."))
- return TRUE
-
- if(W.tool_behaviour == TOOL_CROWBAR)
- to_chat(user, span_notice("You start to pry the cover back into place..."))
- if(W.use_tool(src, user, 20, volume=100))
- if(!istype(src, /turf/closed/wall/r_wall) || d_state != ANCHOR_BOLTS)
- return TRUE
- d_state = CUT_COVER
- update_appearance()
- to_chat(user, span_notice("The metal cover has been pried back into place."))
- return TRUE
-
- if(SUPPORT_RODS)
- if(W.tool_behaviour == TOOL_WELDER)
- if(!W.tool_start_check(user, amount=0))
- return
- to_chat(user, span_notice("You begin slicing through the support rods..."))
- if(W.use_tool(src, user, 100, volume=100))
- if(!istype(src, /turf/closed/wall/r_wall) || d_state != SUPPORT_RODS)
- return TRUE
- d_state = SHEATH
- update_appearance()
- to_chat(user, span_notice("You slice through the support rods."))
- return TRUE
-
- if(W.tool_behaviour == TOOL_WRENCH)
- to_chat(user, span_notice("You start tightening the bolts which secure the support rods to their frame..."))
- W.play_tool_sound(src, 100)
- if(W.use_tool(src, user, 40))
- if(!istype(src, /turf/closed/wall/r_wall) || d_state != SUPPORT_RODS)
- return TRUE
- d_state = ANCHOR_BOLTS
- update_appearance()
- to_chat(user, span_notice("You tighten the bolts anchoring the support rods."))
- return TRUE
-
- if(SHEATH)
- if(W.tool_behaviour == TOOL_CROWBAR)
- to_chat(user, span_notice("You struggle to pry off the outer sheath..."))
- if(W.use_tool(src, user, 100, volume=100))
- if(!istype(src, /turf/closed/wall/r_wall) || d_state != SHEATH)
- return TRUE
- to_chat(user, span_notice("You pry off the outer sheath."))
- dismantle_wall()
- return TRUE
-
- if(W.tool_behaviour == TOOL_WELDER)
- if(!W.tool_start_check(user, amount=0))
- return
- to_chat(user, span_notice("You begin welding the support rods back together..."))
- if(W.use_tool(src, user, 100, volume=100))
- if(!istype(src, /turf/closed/wall/r_wall) || d_state != SHEATH)
- return TRUE
- d_state = SUPPORT_RODS
- update_appearance()
- to_chat(user, span_notice("You weld the support rods back together."))
- return TRUE
- return FALSE
-
-/turf/closed/wall/r_wall/update_icon(updates=ALL)
- . = ..()
- if(d_state != INTACT)
- smoothing_flags = NONE
- return
- if (!(updates & UPDATE_SMOOTHING))
- return
- smoothing_flags = SMOOTH_BITMASK
- QUEUE_SMOOTH_NEIGHBORS(src)
- QUEUE_SMOOTH(src)
-
-/turf/closed/wall/r_wall/update_icon_state()
- if(d_state != INTACT)
- icon_state = "r_wall-[d_state]"
- else
- icon_state = "[base_icon_state]-[smoothing_junction]"
- return ..()
-
-/turf/closed/wall/r_wall/wall_singularity_pull(current_size)
- if(current_size >= STAGE_FIVE)
- if(prob(30))
- dismantle_wall()
-
-/turf/closed/wall/r_wall/rcd_vals(mob/user, obj/item/construction/rcd/the_rcd)
- if(the_rcd.canRturf)
- return ..()
-
-
-/turf/closed/wall/r_wall/rcd_act(mob/user, obj/item/construction/rcd/the_rcd, passed_mode)
- if(the_rcd.canRturf)
- return ..()
-
-/turf/closed/wall/r_wall/rust_heretic_act()
- if(prob(50))
- return
- if(HAS_TRAIT(src, TRAIT_RUSTY))
- ScrapeAway()
- return
- return ..()
/turf/closed/wall/r_wall/syndicate
name = "hull"
desc = "The armored hull of an ominous looking ship."
- icon = 'icons/turf/walls/plastitanium_wall.dmi'
- icon_state = "plastitanium_wall-0"
- base_icon_state = "plastitanium_wall"
+ icon = 'icons/turf/walls/metal_wall.dmi'
explosion_block = 20
- sheet_type = /obj/item/stack/sheet/mineral/plastitanium
- turf_flags = IS_SOLID
- smoothing_flags = SMOOTH_BITMASK | SMOOTH_DIAGONAL_CORNERS
- smoothing_groups = list(SMOOTH_GROUP_CLOSED_TURFS, SMOOTH_GROUP_WALLS, SMOOTH_GROUP_SYNDICATE_WALLS)
- canSmoothWith = list(SMOOTH_GROUP_SYNDICATE_WALLS, SMOOTH_GROUP_PLASTITANIUM_WALLS, SMOOTH_GROUP_AIRLOCK, SMOOTH_GROUP_SHUTTLE_PARTS)
+ reinf_material = /datum/material/iron
+ plating_material = /datum/material/alloy/plastitanium
+ color = "#3a313a" //To display in mapping softwares
/turf/closed/wall/r_wall/syndicate/rcd_vals(mob/user, obj/item/construction/rcd/the_rcd)
return FALSE
/turf/closed/wall/r_wall/syndicate/nodiagonal
- icon = 'icons/turf/walls/plastitanium_wall.dmi'
- icon_state = "map-shuttle_nd"
- base_icon_state = "plastitanium_wall"
- smoothing_flags = SMOOTH_BITMASK
/turf/closed/wall/r_wall/syndicate/nosmooth
- icon = 'icons/turf/shuttle.dmi'
- icon_state = "wall"
- smoothing_flags = NONE
/turf/closed/wall/r_wall/syndicate/overspace
- icon_state = "map-overspace"
- smoothing_flags = SMOOTH_BITMASK | SMOOTH_DIAGONAL_CORNERS
- fixed_underlay = list("space" = TRUE)
diff --git a/code/game/turfs/closed/walls.dm b/code/game/turfs/closed/walls.dm
index a220de11af5..32feaeeb77d 100644
--- a/code/game/turfs/closed/walls.dm
+++ b/code/game/turfs/closed/walls.dm
@@ -3,7 +3,7 @@
/turf/closed/wall
name = "wall"
desc = "A huge chunk of iron used to separate rooms."
- icon = 'icons/turf/walls/wall.dmi'
+ icon = 'icons/turf/walls/solid_wall.dmi'
icon_state = "wall-0"
base_icon_state = "wall"
explosion_block = 1
@@ -16,59 +16,211 @@
smoothing_flags = SMOOTH_BITMASK
smoothing_groups = list(SMOOTH_GROUP_CLOSED_TURFS, SMOOTH_GROUP_WALLS)
- canSmoothWith = list(SMOOTH_GROUP_WALLS, SMOOTH_GROUP_WINDOW_FULLTILE, SMOOTH_GROUP_AIRLOCK)
+ canSmoothWith = list(SMOOTH_GROUP_SHUTTERS_BLASTDOORS, SMOOTH_GROUP_WALLS, SMOOTH_GROUP_AIRLOCK, SMOOTH_GROUP_WINDOW_FULLTILE, SMOOTH_GROUP_LOW_WALL)
rcd_memory = RCD_MEMORY_WALL
- ///bool on whether this wall can be chiselled into
- var/can_engrave = TRUE
+
+ color = "#57575c" //To display in mapping softwares
+
+ greyscale_config = /datum/greyscale_config/solid_wall
+ greyscale_colors = "#57575c"
+
///lower numbers are harder. Used to determine the probability of a hulk smashing through.
var/hardness = 40
var/slicing_duration = 100 //default time taken to slice the wall
- var/sheet_type = /obj/item/stack/sheet/iron
- var/sheet_amount = 2
- var/girder_type = /obj/structure/girder
- /// A turf that will replace this turf when this turf is destroyed
- var/decon_type
+ /// Material type of the plating
+ var/plating_material = /datum/material/iron
+ /// Material type of the reinforcement
+ var/reinf_material
+ /// Paint color of which the wall has been painted with.
+ var/wall_paint
+ /// Paint color of which the stripe has been painted with. Will not overlay a stripe if no paint is applied
+ var/stripe_paint
+ /// Whether this wall is hard to deconstruct, like a reinforced plasteel wall. Dictated by material
+ var/hard_decon
+ /// Deconstruction state, matters if the wall is hard to deconstruct (hard_decon)
+ var/d_state = INTACT
+ /// Whether this wall is rusted or not, to apply the rusted overlay
+ var/rusted
var/list/dent_decals
+ /// Typecache of all objects that we seek out to apply a neighbor stripe overlay
+ var/static/list/neighbor_typecache
+
+/turf/closed/wall/update_greyscale()
+ greyscale_colors = get_wall_color()
+ return ..()
+
+/turf/closed/wall/proc/get_wall_color()
+ var/wall_color = wall_paint
+ if(!wall_color)
+ var/datum/material/plating_mat_ref = GET_MATERIAL_REF(plating_material)
+ wall_color = plating_mat_ref.wall_color
+ return wall_color
+
+/turf/closed/wall/proc/get_stripe_color()
+ var/stripe_color = stripe_paint
+ if(!stripe_color)
+ stripe_color = get_wall_color()
+ return stripe_color
+
+/turf/closed/wall/has_material_type(datum/material/mat_type, exact=FALSE, mat_amount=0)
+ if(plating_material == mat_type)
+ return TRUE
+ if(reinf_material == mat_type)
+ return TRUE
+ return FALSE
+
+/turf/closed/wall/update_name()
+ . = ..()
+ name = ""
+ if(rusted)
+ name = "rusted "
+ if(reinf_material)
+ name += "reinforced wall"
+ else
+ name += "wall"
+
/turf/closed/wall/Initialize(mapload)
. = ..()
- if(!can_engrave)
- ADD_TRAIT(src, TRAIT_NOT_ENGRAVABLE, INNATE_TRAIT)
- if(is_station_level(z))
+ color = null // Remove the color that was set for mapping clarity
+ set_materials(plating_material, reinf_material)
+ if(is_station_level(src))
GLOB.station_turfs += src
- if(smoothing_flags & SMOOTH_DIAGONAL_CORNERS && fixed_underlay) //Set underlays for the diagonal walls.
- var/mutable_appearance/underlay_appearance = mutable_appearance(layer = TURF_LAYER, plane = FLOOR_PLANE)
- if(fixed_underlay["space"])
- underlay_appearance.icon = 'icons/turf/space.dmi'
- underlay_appearance.icon_state = SPACE_ICON_STATE
- underlay_appearance.plane = PLANE_SPACE
- else
- underlay_appearance.icon = fixed_underlay["icon"]
- underlay_appearance.icon_state = fixed_underlay["icon_state"]
- fixed_underlay = string_assoc_list(fixed_underlay)
- underlays += underlay_appearance
-
-/turf/closed/wall/atom_destruction(damage_flag)
- dismantle_wall(TRUE, FALSE)
/turf/closed/wall/Destroy()
if(is_station_level(z))
GLOB.station_turfs -= src
return ..()
+/turf/closed/wall/copyTurf(turf/T)
+ . = ..()
+ if(istype(., /turf/closed/wall))
+ var/turf/closed/wall/pasted_turf = .
+ pasted_turf.d_state = d_state
+ pasted_turf.set_wall_information(plating_material, reinf_material, wall_paint, stripe_paint)
+
+/// Most of this code is pasted within /obj/structure/falsewall. Be mindful of this
+/turf/closed/wall/update_overlays()
+ //Updating the unmanaged wall overlays (unmanaged for optimisations)
+ overlays.Cut()
+
+ if(stripe_paint)
+ var/datum/material/plating_mat_ref = GET_MATERIAL_REF(plating_material)
+ var/icon/stripe_icon = SSgreyscale.GetColoredIconByType(plating_mat_ref.wall_stripe_greyscale_config, get_stripe_color())
+ var/mutable_appearance/smoothed_stripe = mutable_appearance(stripe_icon, icon_state)
+ overlays += smoothed_stripe
+
+ var/neighbor_stripe = NONE
+ if(!neighbor_typecache)
+ neighbor_typecache = typecacheof(list(
+ /obj/machinery/door/airlock,
+ /obj/structure/window/reinforced/fulltile,
+ /obj/structure/window/fulltile,
+ /obj/structure/window/reinforced/shuttle,
+ /obj/machinery/door/poddoor,
+ /obj/structure/window/reinforced/plasma/fulltile,
+ /obj/structure/window/plasma/fulltile,
+ /obj/structure/low_wall
+ ))
+ for(var/cardinal in GLOB.cardinals)
+ var/turf/step_turf = get_step(src, cardinal)
+ for(var/atom/movable/movable_thing as anything in step_turf)
+ if(neighbor_typecache[movable_thing.type])
+ neighbor_stripe ^= cardinal
+ break
+ if(neighbor_stripe)
+ var/icon/neighbor_icon = SSgreyscale.GetColoredIconByType(/datum/greyscale_config/wall_neighbor_stripe, get_stripe_color())
+ var/mutable_appearance/neighb_stripe_appearace = mutable_appearance(neighbor_icon, "stripe-[neighbor_stripe]")
+ overlays += neighb_stripe_appearace
+
+ if(rusted)
+ var/mutable_appearance/rust_overlay = mutable_appearance('icons/turf/rust_overlay.dmi', "blobby_rust", appearance_flags = RESET_COLOR)
+ overlays += rust_overlay
+
+ if(hard_decon && d_state)
+ var/mutable_appearance/decon_overlay = mutable_appearance('icons/turf/walls/decon_states.dmi', "[d_state]", appearance_flags = RESET_COLOR)
+ overlays += decon_overlay
+
+ if(dent_decals)
+ add_overlay(dent_decals)
+ //And letting anything else that may want to render on the wall to work (ie components)
+ return ..()
/turf/closed/wall/examine(mob/user)
. += ..()
+ if(wall_paint)
+ . += span_notice("It's coated with a layer of paint.")
+ if(stripe_paint)
+ . += span_notice("It has a painted stripe around its base.")
. += deconstruction_hints(user)
/turf/closed/wall/proc/deconstruction_hints(mob/user)
- return span_notice("The outer plating is welded firmly in place.")
+ if(hard_decon)
+ switch(d_state)
+ if(INTACT)
+ return span_notice("The outer grille is fully intact.")
+ if(SUPPORT_LINES)
+ return span_notice("The outer grille has been cut, and the support lines are screwed securely to the outer cover.")
+ if(COVER)
+ return span_notice("The support lines have been unscrewed, and the metal cover is welded firmly in place.")
+ if(CUT_COVER)
+ return span_notice("The metal cover has been sliced through, and is connected loosely to the girder.")
+ if(ANCHOR_BOLTS)
+ return span_notice("The outer cover has been pried away, and the bolts anchoring the support rods are wrenched in place.")
+ if(SUPPORT_RODS)
+ return span_notice("The bolts anchoring the support rods have been loosened, but are still welded firmly to the girder.")
+ if(SHEATH)
+ return span_notice("The support rods have been sliced through, and the outer sheath is connected loosely to the girder.")
+ else
+ return span_notice("The outer plating is welded firmly in place.")
/turf/closed/wall/attack_tk()
return
+/// Most of this code is pasted within /obj/structure/falsewall. Be mindful of this
+/turf/closed/wall/proc/paint_wall(new_paint)
+ wall_paint = new_paint
+ update_greyscale()
+ update_appearance()
+
+/// Most of this code is pasted within /obj/structure/falsewall. Be mindful of this
+/turf/closed/wall/proc/paint_stripe(new_paint)
+ stripe_paint = new_paint
+ update_appearance()
+
+/// Most of this code is pasted within /obj/structure/falsewall. Be mindful of this
+/turf/closed/wall/proc/set_wall_information(plating_mat, reinf_mat, new_paint, new_stripe_paint)
+ wall_paint = new_paint
+ stripe_paint = new_stripe_paint
+ set_materials(plating_mat, reinf_mat)
+
+/// Most of this code is pasted within /obj/structure/falsewall. Be mindful of this
+/turf/closed/wall/proc/set_materials(plating_mat, reinf_mat)
+ var/datum/material/plating_mat_ref
+ if(plating_mat)
+ plating_mat_ref = GET_MATERIAL_REF(plating_mat)
+ var/datum/material/reinf_mat_ref
+ if(reinf_mat)
+ reinf_mat_ref = GET_MATERIAL_REF(reinf_mat)
+
+ if(reinf_mat_ref && plating_mat_ref.hard_wall_decon)
+ hard_decon = TRUE
+ else
+ hard_decon = null
+
+ if(reinf_mat_ref)
+ greyscale_config = plating_mat_ref.reinforced_wall_greyscale_config
+ else
+ greyscale_config = plating_mat_ref.wall_greyscale_config
+
+ plating_material = plating_mat
+ reinf_material = reinf_mat
+
+ update_greyscale()
+ update_appearance()
+
/turf/closed/wall/proc/dismantle_wall(devastated = FALSE, explode = FALSE)
if(devastated)
devastate_wall()
@@ -82,21 +234,24 @@
if(istype(O, /obj/structure/sign/poster))
var/obj/structure/sign/poster/P = O
P.roll_and_drop(src)
- if(decon_type)
- ChangeTurf(decon_type, flags = CHANGETURF_INHERIT_AIR)
- else
- ScrapeAway()
- QUEUE_SMOOTH_NEIGHBORS(src)
-/turf/closed/wall/proc/break_wall()
- new sheet_type(src, sheet_amount)
- if(girder_type)
- return new girder_type(src)
+ ScrapeAway()
+
+/turf/closed/wall/proc/break_wall(drop_mats = TRUE)
+ if(drop_mats)
+ drop_materials_used()
+ return new /obj/structure/girder(src, reinf_material, wall_paint, stripe_paint)
/turf/closed/wall/proc/devastate_wall()
- new sheet_type(src, sheet_amount)
- if(girder_type)
- new /obj/item/stack/sheet/iron(src)
+ drop_materials_used(TRUE)
+ new /obj/item/stack/sheet/iron(src)
+
+/turf/closed/wall/proc/drop_materials_used(drop_reinf = FALSE)
+ var/datum/material/plating_mat_ref = GET_MATERIAL_REF(plating_material)
+ new plating_mat_ref.sheet_type(src, 2)
+ if(drop_reinf && reinf_material)
+ var/datum/material/reinf_mat_ref = GET_MATERIAL_REF(reinf_material)
+ new reinf_mat_ref.sheet_type(src, 2)
/turf/closed/wall/ex_act(severity, target)
if(target == src)
@@ -130,12 +285,24 @@
/turf/closed/wall/attack_animal(mob/living/simple_animal/user, list/modifiers)
- user.changeNext_move(CLICK_CD_MELEE)
- user.do_attack_animation(src)
- if((user.environment_smash & ENVIRONMENT_SMASH_WALLS) || (user.environment_smash & ENVIRONMENT_SMASH_RWALLS))
- playsound(src, 'sound/effects/meteorimpact.ogg', 100, TRUE)
- dismantle_wall(1)
- return
+ if(hard_decon)
+ user.changeNext_move(CLICK_CD_MELEE)
+ user.do_attack_animation(src)
+ if(!user.environment_smash)
+ return
+ if(user.environment_smash & ENVIRONMENT_SMASH_RWALLS)
+ dismantle_wall(1)
+ playsound(src, 'sound/effects/meteorimpact.ogg', 100, TRUE)
+ else
+ playsound(src, 'sound/effects/bang.ogg', 50, TRUE)
+ to_chat(user, span_warning("This wall is far too strong for you to destroy."))
+ else
+ user.changeNext_move(CLICK_CD_MELEE)
+ user.do_attack_animation(src)
+ if((user.environment_smash & ENVIRONMENT_SMASH_WALLS) || (user.environment_smash & ENVIRONMENT_SMASH_RWALLS))
+ playsound(src, 'sound/effects/meteorimpact.ogg', 100, TRUE)
+ dismantle_wall(1)
+ return
/turf/closed/wall/attack_hulk(mob/living/carbon/user)
..()
@@ -238,16 +405,157 @@
return FALSE
/turf/closed/wall/proc/try_decon(obj/item/I, mob/user, turf/T)
- if(I.tool_behaviour == TOOL_WELDER)
- if(!I.tool_start_check(user, amount=0))
- return FALSE
+ if(hard_decon)
+ switch(d_state)
+ if(INTACT)
+ if(I.tool_behaviour == TOOL_WIRECUTTER)
+ I.play_tool_sound(src, 100)
+ d_state = SUPPORT_LINES
+ update_appearance()
+ to_chat(user, span_notice("You cut the outer grille."))
+ return TRUE
+
+ if(SUPPORT_LINES)
+ if(I.tool_behaviour == TOOL_SCREWDRIVER)
+ to_chat(user, span_notice("You begin unsecuring the support lines..."))
+ if(I.use_tool(src, user, 40, volume=100))
+ if(!istype(src, /turf/closed/wall) || d_state != SUPPORT_LINES)
+ return TRUE
+ d_state = COVER
+ update_appearance()
+ to_chat(user, span_notice("You unsecure the support lines."))
+ return TRUE
+
+ else if(I.tool_behaviour == TOOL_WIRECUTTER)
+ I.play_tool_sound(src, 100)
+ d_state = INTACT
+ update_appearance()
+ to_chat(user, span_notice("You repair the outer grille."))
+ return TRUE
+
+ if(COVER)
+ if(I.tool_behaviour == TOOL_WELDER)
+ if(!I.tool_start_check(user, amount=0))
+ return
+ to_chat(user, span_notice("You begin slicing through the metal cover..."))
+ if(I.use_tool(src, user, 60, volume=100))
+ if(!istype(src, /turf/closed/wall) || d_state != COVER)
+ return TRUE
+ d_state = CUT_COVER
+ update_appearance()
+ to_chat(user, span_notice("You press firmly on the cover, dislodging it."))
+ return TRUE
+
+ if(I.tool_behaviour == TOOL_SCREWDRIVER)
+ to_chat(user, span_notice("You begin securing the support lines..."))
+ if(I.use_tool(src, user, 40, volume=100))
+ if(!istype(src, /turf/closed/wall) || d_state != COVER)
+ return TRUE
+ d_state = SUPPORT_LINES
+ update_appearance()
+ to_chat(user, span_notice("The support lines have been secured."))
+ return TRUE
+
+ if(CUT_COVER)
+ if(I.tool_behaviour == TOOL_CROWBAR)
+ to_chat(user, span_notice("You struggle to pry off the cover..."))
+ if(I.use_tool(src, user, 100, volume=100))
+ if(!istype(src, /turf/closed/wall) || d_state != CUT_COVER)
+ return TRUE
+ d_state = ANCHOR_BOLTS
+ update_appearance()
+ to_chat(user, span_notice("You pry off the cover."))
+ return TRUE
+
+ if(I.tool_behaviour == TOOL_WELDER)
+ if(!I.tool_start_check(user, amount=0))
+ return
+ to_chat(user, span_notice("You begin welding the metal cover back to the frame..."))
+ if(I.use_tool(src, user, 60, volume=100))
+ if(!istype(src, /turf/closed/wall) || d_state != CUT_COVER)
+ return TRUE
+ d_state = COVER
+ update_appearance()
+ to_chat(user, span_notice("The metal cover has been welded securely to the frame."))
+ return TRUE
+
+ if(ANCHOR_BOLTS)
+ if(I.tool_behaviour == TOOL_WRENCH)
+ to_chat(user, span_notice("You start loosening the anchoring bolts which secure the support rods to their frame..."))
+ if(I.use_tool(src, user, 40, volume=100))
+ if(!istype(src, /turf/closed/wall) || d_state != ANCHOR_BOLTS)
+ return TRUE
+ d_state = SUPPORT_RODS
+ update_appearance()
+ to_chat(user, span_notice("You remove the bolts anchoring the support rods."))
+ return TRUE
+
+ if(I.tool_behaviour == TOOL_CROWBAR)
+ to_chat(user, span_notice("You start to pry the cover back into place..."))
+ if(I.use_tool(src, user, 20, volume=100))
+ if(!istype(src, /turf/closed/wall) || d_state != ANCHOR_BOLTS)
+ return TRUE
+ d_state = CUT_COVER
+ update_appearance()
+ to_chat(user, span_notice("The metal cover has been pried back into place."))
+ return TRUE
+
+ if(SUPPORT_RODS)
+ if(I.tool_behaviour == TOOL_WELDER)
+ if(!I.tool_start_check(user, amount=0))
+ return
+ to_chat(user, span_notice("You begin slicing through the support rods..."))
+ if(I.use_tool(src, user, 100, volume=100))
+ if(!istype(src, /turf/closed/wall) || d_state != SUPPORT_RODS)
+ return TRUE
+ d_state = SHEATH
+ update_appearance()
+ to_chat(user, span_notice("You slice through the support rods."))
+ return TRUE
+
+ if(I.tool_behaviour == TOOL_WRENCH)
+ to_chat(user, span_notice("You start tightening the bolts which secure the support rods to their frame..."))
+ I.play_tool_sound(src, 100)
+ if(I.use_tool(src, user, 40))
+ if(!istype(src, /turf/closed/wall) || d_state != SUPPORT_RODS)
+ return TRUE
+ d_state = ANCHOR_BOLTS
+ update_appearance()
+ to_chat(user, span_notice("You tighten the bolts anchoring the support rods."))
+ return TRUE
+
+ if(SHEATH)
+ if(I.tool_behaviour == TOOL_CROWBAR)
+ to_chat(user, span_notice("You struggle to pry off the outer sheath..."))
+ if(I.use_tool(src, user, 100, volume=100))
+ if(!istype(src, /turf/closed/wall) || d_state != SHEATH)
+ return TRUE
+ to_chat(user, span_notice("You pry off the outer sheath."))
+ dismantle_wall()
+ return TRUE
+
+ if(I.tool_behaviour == TOOL_WELDER)
+ if(!I.tool_start_check(user, amount=0))
+ return
+ to_chat(user, span_notice("You begin welding the support rods back together..."))
+ if(I.use_tool(src, user, 100, volume=100))
+ if(!istype(src, /turf/closed/wall) || d_state != SHEATH)
+ return TRUE
+ d_state = SUPPORT_RODS
+ update_appearance()
+ to_chat(user, span_notice("You weld the support rods back together."))
+ return TRUE
+ else
+ if(I.tool_behaviour == TOOL_WELDER)
+ if(!I.tool_start_check(user, amount=0))
+ return FALSE
- to_chat(user, span_notice("You begin slicing through the outer plating..."))
- if(I.use_tool(src, user, slicing_duration, volume=100))
- if(iswallturf(src))
- to_chat(user, span_notice("You remove the outer plating."))
- dismantle_wall()
- return TRUE
+ to_chat(user, span_notice("You begin slicing through the outer plating..."))
+ if(I.use_tool(src, user, slicing_duration, volume=100))
+ if(iswallturf(src))
+ to_chat(user, span_notice("You remove the outer plating."))
+ dismantle_wall()
+ return TRUE
return FALSE
@@ -256,20 +564,25 @@
wall_singularity_pull(current_size)
/turf/closed/wall/proc/wall_singularity_pull(current_size)
- if(current_size >= STAGE_FIVE)
- if(prob(50))
- dismantle_wall()
- return
- if(current_size == STAGE_FOUR)
- if(prob(30))
- dismantle_wall()
+ if(hard_decon)
+ if(current_size >= STAGE_FIVE)
+ if(prob(30))
+ dismantle_wall()
+ else
+ if(current_size >= STAGE_FIVE)
+ if(prob(50))
+ dismantle_wall()
+ return
+ if(current_size == STAGE_FOUR)
+ if(prob(30))
+ dismantle_wall()
/turf/closed/wall/narsie_act(force, ignore_mobs, probability = 20)
. = ..()
if(.)
ChangeTurf(/turf/closed/wall/mineral/cult)
-/turf/closed/wall/get_dumping_location()
+/turf/closed/wall/get_dumping_location(obj/item/storage/source, mob/user)
return null
/turf/closed/wall/acid_act(acidpwr, acid_volume)
@@ -281,12 +594,16 @@
dismantle_wall(1)
/turf/closed/wall/rcd_vals(mob/user, obj/item/construction/rcd/the_rcd)
+ if(hard_decon && !the_rcd.canRturf)
+ return
switch(the_rcd.mode)
if(RCD_DECONSTRUCT)
return list("mode" = RCD_DECONSTRUCT, "delay" = 40, "cost" = 26)
return FALSE
/turf/closed/wall/rcd_act(mob/user, obj/item/construction/rcd/the_rcd, passed_mode)
+ if(hard_decon && !the_rcd.canRturf)
+ return
switch(passed_mode)
if(RCD_DECONSTRUCT)
to_chat(user, span_notice("You deconstruct the wall."))
@@ -317,14 +634,13 @@
add_overlay(dent_decals)
/turf/closed/wall/rust_heretic_act()
- if(HAS_TRAIT(src, TRAIT_RUSTY))
- ScrapeAway()
+ if(rusted)
+ return
+ if(hard_decon && prob(50))
return
if(prob(70))
new /obj/effect/temp_visual/glowing_rune(src)
- return ..()
-
-/turf/closed/wall/metal_foam_base
- girder_type = /obj/structure/foamedmetal
+ rusted = TRUE
+ update_appearance()
#undef MAX_DENT_DECALS
diff --git a/code/game/turfs/open/floor.dm b/code/game/turfs/open/floor.dm
index 8e2ba018ebb..2842cc950e7 100644
--- a/code/game/turfs/open/floor.dm
+++ b/code/game/turfs/open/floor.dm
@@ -23,7 +23,7 @@
var/broken = FALSE
var/burnt = FALSE
/// Path of the tile that this floor drops
- var/floor_tile = null
+ var/floor_tile = null
var/list/broken_states
var/list/burnt_states
@@ -269,7 +269,8 @@
switch(passed_mode)
if(RCD_FLOORWALL)
to_chat(user, span_notice("You build a wall."))
- PlaceOnTop(/turf/closed/wall)
+ var/turf/closed/wall/placed_wall = PlaceOnTop(/turf/closed/wall)
+ placed_wall.set_wall_information(/datum/material/iron)
return TRUE
if(RCD_AIRLOCK)
for(var/obj/machinery/door/door in src)
diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm
index a0493a0ab10..d334b7e30d1 100755
--- a/code/game/turfs/turf.dm
+++ b/code/game/turfs/turf.dm
@@ -41,9 +41,6 @@ GLOBAL_LIST_EMPTY(station_turfs)
var/tiled_dirt = FALSE // use smooth tiled dirt decal
- ///Icon-smoothing variable to map a diagonal wall corner with a fixed underlay.
- var/list/fixed_underlay = null
-
///Lumcount added by sources other than lighting datum objects, such as the overlay lighting component.
var/dynamic_lumcount = 0
diff --git a/code/modules/antagonists/nightmare/nightmare_species.dm b/code/modules/antagonists/nightmare/nightmare_species.dm
index 5b448b72187..8815f081dd4 100644
--- a/code/modules/antagonists/nightmare/nightmare_species.dm
+++ b/code/modules/antagonists/nightmare/nightmare_species.dm
@@ -2,7 +2,7 @@
* A highly aggressive subset of shadowlings
*/
/datum/species/shadow/nightmare
- name = "Nightmare"
+ name = "\improper Nightmare"
id = SPECIES_NIGHTMARE
examine_limb_id = "shadow"
burnmod = 1.5
diff --git a/code/modules/cards/cardhand.dm b/code/modules/cards/cardhand.dm
index a2606ae3b1f..2ecb1d799f3 100644
--- a/code/modules/cards/cardhand.dm
+++ b/code/modules/cards/cardhand.dm
@@ -6,13 +6,16 @@
w_class = WEIGHT_CLASS_TINY
worn_icon_state = "card"
-/obj/item/toy/cards/cardhand/Initialize(mapload, list/cards_to_combine)
+/obj/item/toy/cards/cardhand/Initialize(mapload, list/cards_to_combine = list())
. = ..()
- if(!LAZYLEN(cards_to_combine) && (mapload && !LAZYLEN(cards)))
+ var/has_runtime_spawned_cards = length(cards_to_combine)
+ var/has_mapped_spawned_cards = mapload && length(cards)
+
+ if(!has_runtime_spawned_cards && !has_mapped_spawned_cards)
CRASH("[src] is being made into a cardhand without a list of cards to combine")
- if(mapload && LAZYLEN(cards)) // these cards have not been initialized
+ if(has_mapped_spawned_cards) // these cards have not been initialized
for(var/card_name in cards)
var/obj/item/toy/singlecard/new_card = new (loc, card_name)
new_card.update_appearance()
diff --git a/code/modules/cargo/goodies.dm b/code/modules/cargo/goodies.dm
index 15a6c5b5724..de4671e5094 100644
--- a/code/modules/cargo/goodies.dm
+++ b/code/modules/cargo/goodies.dm
@@ -167,3 +167,9 @@
desc = "A complete meal package for the terminally lazy. Contains one Ready-Donk meal."
cost = PAYCHECK_MEDIUM * 2
contains = list(/obj/item/food/ready_donk)
+
+/datum/supply_pack/goody/paint
+ name = "Adaptive Paint"
+ desc = "A single, premium can of adaptive paint. Now you can turn the entire station neon pink!"
+ cost = PAYCHECK_EASY * 2
+ contains = list(/obj/item/paint/anycolor)
diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm
index 3a42bc07ca5..14c49b84fc4 100644
--- a/code/modules/clothing/clothing.dm
+++ b/code/modules/clothing/clothing.dm
@@ -117,7 +117,7 @@
qdel(src)
/obj/item/clothing/attack(mob/living/M, mob/living/user, params)
- if(user.combat_mode || !ismoth(M) || ispickedupmob(src))
+ if(user.combat_mode || !ismoth(M))
return ..()
if(isnull(moth_snack))
moth_snack = new
diff --git a/code/modules/holodeck/computer.dm b/code/modules/holodeck/computer.dm
index de886b391d2..b51120bc078 100644
--- a/code/modules/holodeck/computer.dm
+++ b/code/modules/holodeck/computer.dm
@@ -73,7 +73,7 @@ GLOBAL_LIST_INIT(typecache_holodeck_linked_floorcheck_ok, typecacheof(list(/turf
///special locs that can mess with derez'ing holo spawned objects
var/list/special_locs = list(
- /obj/item/clothing/head/mob_holder,
+ /obj/item/mob_holder,
)
///TRUE if the holodeck is using extra power because of a program, FALSE otherwise
diff --git a/code/modules/mapfluff/ruins/lavalandruin_code/elephantgraveyard.dm b/code/modules/mapfluff/ruins/lavalandruin_code/elephantgraveyard.dm
index 8372cfd8544..6ed7e46870e 100644
--- a/code/modules/mapfluff/ruins/lavalandruin_code/elephantgraveyard.dm
+++ b/code/modules/mapfluff/ruins/lavalandruin_code/elephantgraveyard.dm
@@ -54,7 +54,7 @@
color = "#B5651D"
turf_type = /turf/open/misc/asteroid/basalt/wasteland
baseturfs = /turf/open/misc/asteroid/basalt/wasteland
- smooth_icon = 'icons/turf/walls/rock_wall.dmi'
+ smooth_icon = 'icons/turf/walls/legacy/rock_wall.dmi'
base_icon_state = "rock_wall"
smoothing_flags = SMOOTH_BITMASK | SMOOTH_BORDER
diff --git a/code/modules/mapping/mapping_helpers.dm b/code/modules/mapping/mapping_helpers.dm
index 3556319f852..f6a26d8d39b 100644
--- a/code/modules/mapping/mapping_helpers.dm
+++ b/code/modules/mapping/mapping_helpers.dm
@@ -698,3 +698,52 @@ INITIALIZE_IMMEDIATE(/obj/effect/mapping_helpers/no_lava)
json_cache[json_url] = json_data
query_in_progress = FALSE
return json_data
+
+
+/obj/effect/mapping_helpers/paint_wall
+ name = "Paint Wall Helper"
+ icon = 'icons/effects/paint_helpers.dmi'
+ icon_state = "paint"
+ late = TRUE
+ /// What wall paint this helper will apply
+ var/wall_paint
+ /// What stripe paint this helper will apply
+ var/stripe_paint
+
+/obj/effect/mapping_helpers/paint_wall/LateInitialize()
+ for(var/obj/effect/mapping_helpers/paint_wall/paint_helper in loc)
+ if(paint_helper == src)
+ continue
+ WARNING("Duplicate paint helper found at [x], [y], [z]")
+ qdel(src)
+ return
+
+ var/did_anything = FALSE
+
+ if(istype(loc, /turf/closed/wall))
+ var/turf/closed/wall/target_wall = loc
+ target_wall.paint_wall(wall_paint)
+ target_wall.paint_stripe(stripe_paint)
+ did_anything = TRUE
+
+ var/obj/structure/low_wall/low_wall = locate() in loc
+ if(low_wall)
+ low_wall.set_wall_paint(wall_paint)
+ low_wall.set_stripe_paint(stripe_paint)
+ did_anything = TRUE
+
+ var/obj/structure/falsewall/falsewall = locate() in loc
+ if(falsewall)
+ falsewall.paint_wall(wall_paint)
+ falsewall.paint_stripe(stripe_paint)
+ did_anything = TRUE
+
+ if(!did_anything)
+ WARNING("Redundant paint helper found at [x], [y], [z]")
+
+ qdel(src)
+
+/obj/effect/mapping_helpers/paint_wall/bridge
+ name = "Bridge Wall Paint"
+ stripe_paint = "#334E6D"
+ icon_state = "paint_bridge"
diff --git a/code/modules/mob/inventory.dm b/code/modules/mob/inventory.dm
index 715eee74d25..47516130526 100644
--- a/code/modules/mob/inventory.dm
+++ b/code/modules/mob/inventory.dm
@@ -288,9 +288,16 @@
I.pixel_y = I.base_pixel_y + rand(-6, 6)
I.do_drop_animation(src)
-//for when the item will be immediately placed in a loc other than the ground
-/mob/proc/transferItemToLoc(obj/item/I, newloc = null, force = FALSE, silent = TRUE)
+//for when the item will be immediately placed in a loc other than the ground. Supports shifting the item's x and y from click modifiers.
+/mob/proc/transferItemToLoc(obj/item/I, newloc = null, force = FALSE, silent = TRUE, list/user_click_modifiers)
. = doUnEquip(I, force, newloc, FALSE, silent = silent)
+ if(. && user_click_modifiers)
+ //Center the icon where the user clicked.
+ if(!LAZYACCESS(user_click_modifiers, ICON_X) || !LAZYACCESS(user_click_modifiers, ICON_Y))
+ return
+ //Clamp it so that the icon never moves more than 16 pixels in either direction (thus leaving the location)
+ I.pixel_x = clamp(text2num(LAZYACCESS(user_click_modifiers, ICON_X)) - 16, -(world.icon_size/2), world.icon_size/2)
+ I.pixel_y = clamp(text2num(LAZYACCESS(user_click_modifiers, ICON_Y)) - 16, -(world.icon_size/2), world.icon_size/2)
I.do_drop_animation(src)
//visibly unequips I but it is NOT MOVED AND REMAINS IN SRC
diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm
index 56f6ad5491e..686829fdead 100644
--- a/code/modules/mob/living/carbon/human/examine.dm
+++ b/code/modules/mob/living/carbon/human/examine.dm
@@ -14,11 +14,14 @@
if(HAS_TRAIT(L, TRAIT_PROSOPAGNOSIA) || HAS_TRAIT(L, TRAIT_INVISIBLE_MAN))
obscure_name = TRUE
- . = list("This is [!obscure_name ? name : "Unknown"]
") //PARIAH EDIT CHANGE
-
var/obscured = check_obscured_slots()
var/skipface = (wear_mask && (wear_mask.flags_inv & HIDEFACE)) || (head && (head.flags_inv & HIDEFACE))
+ var/species_text
+ if(dna.species && !skipface)
+ species_text = ", \a [dna.species.name]"
+
+ . = list("This is [!obscure_name ? name : "Unknown"][species_text]!
")
//uniform
if(w_uniform && !(obscured & ITEM_SLOT_ICLOTHING) && !(w_uniform.item_flags & EXAMINE_SKIP))
diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm
index 17441b5a6c0..ff5e986c64a 100644
--- a/code/modules/mob/living/carbon/human/human.dm
+++ b/code/modules/mob/living/carbon/human/human.dm
@@ -1158,3 +1158,6 @@
/mob/living/carbon/human/species/skrell
race = /datum/species/skrell
+
+/mob/living/carbon/human/species/vox
+ race = /datum/species/vox
diff --git a/code/modules/mob/living/carbon/human/human_defines.dm b/code/modules/mob/living/carbon/human/human_defines.dm
index 032d9c6180e..0e3799fcfe1 100644
--- a/code/modules/mob/living/carbon/human/human_defines.dm
+++ b/code/modules/mob/living/carbon/human/human_defines.dm
@@ -12,6 +12,7 @@
buckle_lying = 0
mob_biotypes = MOB_ORGANIC|MOB_HUMANOID
can_be_shoved_into = TRUE
+ held_w_class = WEIGHT_CLASS_BULKY
//Hair colour and style
var/hair_color = "#000000"
diff --git a/code/modules/mob/living/carbon/human/human_stripping.dm b/code/modules/mob/living/carbon/human/human_stripping.dm
index ae5fa42f6e6..828e091d342 100644
--- a/code/modules/mob/living/carbon/human/human_stripping.dm
+++ b/code/modules/mob/living/carbon/human/human_stripping.dm
@@ -23,16 +23,18 @@ GLOBAL_LIST_INIT(strippable_human_items, create_strippable_list(list(
/datum/strippable_item/mob_item_slot/legcuffs,
)))
-/mob/living/carbon/human/proc/should_strip(mob/user)
- if (user.pulling != src || user.grab_state != GRAB_AGGRESSIVE)
+/mob/living/carbon/human/should_strip(mob/user)
+ . = ..()
+ if (!.)
+ return FALSE
+
+ if (user.grab_state != GRAB_AGGRESSIVE)
return TRUE
if (ishuman(user))
var/mob/living/carbon/human/human_user = user
return !human_user.can_be_firemanned(src)
- return TRUE
-
/datum/strippable_item/mob_item_slot/eyes
key = STRIPPABLE_ITEM_EYES
item_slot = ITEM_SLOT_EYES
diff --git a/code/modules/mob/living/carbon/human/human_update_icons.dm b/code/modules/mob/living/carbon/human/human_update_icons.dm
index f58cbde93ec..85113976955 100644
--- a/code/modules/mob/living/carbon/human/human_update_icons.dm
+++ b/code/modules/mob/living/carbon/human/human_update_icons.dm
@@ -168,14 +168,10 @@ There are several things that need to be remembered:
if(dna.species.bodytype & BODYTYPE_TESHARI)
if(U.supports_variations_flags & CLOTHING_TESHARI_VARIATION)
icon_file = TESHARI_UNIFORM_FILE
- else
- handled_by_bodytype = FALSE
- if(dna.species.bodytype & BODYTYPE_VOX)
+ if(dna.species.bodytype & BODYTYPE_VOX_LEGS)
if(U.supports_variations_flags & CLOTHING_VOX_VARIATION)
icon_file = U.worn_icon_vox || VOX_UNIFORM_FILE
- else
- handled_by_bodytype = FALSE
//Female sprites have lower priority than digitigrade sprites
else if(dna.species.sexes && (dna.species.bodytype & BODYTYPE_HUMANOID) && physique == FEMALE && U.adjusted != NO_FEMALE_UNIFORM) //Agggggggghhhhh
@@ -185,6 +181,7 @@ There are several things that need to be remembered:
icon_file = DEFAULT_UNIFORM_FILE
handled_by_bodytype = FALSE
//END SPECIES HANDLING
+
uniform_overlay = U.build_worn_icon(
default_layer = UNIFORM_LAYER,
default_icon_file = icon_file,
@@ -267,14 +264,10 @@ There are several things that need to be remembered:
if(dna.species.bodytype & BODYTYPE_TESHARI)
if(gloves.supports_variations_flags & CLOTHING_TESHARI_VARIATION)
icon_file = TESHARI_GLOVES_FILE
- else
- handled_by_bodytype = FALSE
- if(dna.species.bodytype & BODYTYPE_VOX)
+ if(dna.species.bodytype & BODYTYPE_VOX_OTHER)
if(worn_item.supports_variations_flags & CLOTHING_VOX_VARIATION)
icon_file = worn_item.worn_icon_vox || VOX_GLOVES_FILE
- else
- handled_by_bodytype = FALSE
if(!icon_exists(icon_file, RESOLVE_ICON_STATE(worn_item)))
icon_file = 'icons/mob/clothing/hands.dmi'
@@ -317,14 +310,10 @@ There are several things that need to be remembered:
if(dna.species.bodytype & BODYTYPE_TESHARI)
if(glasses.supports_variations_flags & CLOTHING_TESHARI_VARIATION)
icon_file = TESHARI_EYES_FILE
- else
- handled_by_bodytype = FALSE
- if(dna.species.bodytype & BODYTYPE_VOX)
+ if(dna.species.bodytype & BODYTYPE_VOX_OTHER)
if(worn_item.supports_variations_flags & CLOTHING_VOX_VARIATION)
icon_file = worn_item.worn_icon_vox || VOX_EYES_FILE
- else
- handled_by_bodytype = FALSE
if(!icon_exists(icon_file, RESOLVE_ICON_STATE(worn_item)))
icon_file = 'icons/mob/clothing/eyes.dmi'
@@ -366,14 +355,10 @@ There are several things that need to be remembered:
if(dna.species.bodytype & BODYTYPE_TESHARI)
if(ears.supports_variations_flags & CLOTHING_TESHARI_VARIATION)
icon_file = TESHARI_EARS_FILE
- else
- handled_by_bodytype = FALSE
- if(dna.species.bodytype & BODYTYPE_VOX)
+ if(dna.species.bodytype & BODYTYPE_VOX_OTHER)
if(worn_item.supports_variations_flags & CLOTHING_VOX_VARIATION)
icon_file = worn_item.worn_icon_vox || VOX_EARS_FILE
- else
- handled_by_bodytype = FALSE
if(!(icon_exists(icon_file, RESOLVE_ICON_STATE(worn_item))))
handled_by_bodytype = FALSE
@@ -406,8 +391,6 @@ There are several things that need to be remembered:
if(dna.species.bodytype & BODYTYPE_TESHARI)
if(worn_item.supports_variations_flags & CLOTHING_TESHARI_VARIATION)
icon_file = TESHARI_NECK_FILE
- else
- handled_by_bodytype = FALSE
if(!(icon_exists(icon_file, RESOLVE_ICON_STATE(worn_item))))
handled_by_bodytype = FALSE
@@ -456,14 +439,12 @@ There are several things that need to be remembered:
if(dna.species.bodytype & BODYTYPE_TESHARI)
if(worn_item.supports_variations_flags & CLOTHING_TESHARI_VARIATION)
icon_file = TESHARI_SHOES_FILE
- else
- handled_by_bodytype = FALSE
- if(dna.species.bodytype & BODYTYPE_VOX)
+ if(dna.species.bodytype & BODYTYPE_VOX_LEGS)
if(worn_item.supports_variations_flags & CLOTHING_VOX_VARIATION)
- icon_file = worn_item.worn_icon_vox || VOX_SHOES_FILE
- else
- handled_by_bodytype = FALSE
+ var/obj/item/bodypart/leg = src.get_bodypart(BODY_ZONE_L_LEG)
+ if(leg.limb_id == "digitigrade")//Snowflakey and bad. But it makes it look consistent.
+ icon_file = worn_item.worn_icon_vox || VOX_SHOES_FILE
if(!(icon_exists(icon_file, RESOLVE_ICON_STATE(worn_item))))
handled_by_bodytype = FALSE
@@ -524,20 +505,14 @@ There are several things that need to be remembered:
if(dna.species.bodytype & BODYTYPE_SNOUTED)
if(worn_item.supports_variations_flags & CLOTHING_SNOUTED_VARIATION)
icon_file = head.worn_icon_snouted || SNOUTED_HEAD_FILE
- else
- handled_by_bodytype = FALSE
- if(dna.species.bodytype & BODYTYPE_VOX)
+ if(dna.species.bodytype & BODYTYPE_VOX_BEAK)
if(worn_item.supports_variations_flags & CLOTHING_VOX_VARIATION)
icon_file = worn_item.worn_icon_vox || VOX_HEAD_FILE
- else
- handled_by_bodytype = FALSE
if(dna.species.bodytype & BODYTYPE_TESHARI)
if(worn_item.supports_variations_flags & CLOTHING_TESHARI_VARIATION)
icon_file = TESHARI_HEAD_FILE
- else
- handled_by_bodytype = FALSE
if(!(icon_exists(icon_file, RESOLVE_ICON_STATE(worn_item))))
handled_by_bodytype = FALSE
@@ -575,14 +550,10 @@ There are several things that need to be remembered:
if(dna.species.bodytype & BODYTYPE_TESHARI)
if(worn_item.supports_variations_flags & CLOTHING_TESHARI_VARIATION)
icon_file = TESHARI_BELT_FILE
- else
- handled_by_bodytype = FALSE
- if(dna.species.bodytype & BODYTYPE_VOX)
+ if(dna.species.bodytype & BODYTYPE_VOX_OTHER)
if(worn_item.supports_variations_flags & CLOTHING_VOX_VARIATION)
icon_file = worn_item.worn_icon_vox || VOX_BELT_FILE
- else
- handled_by_bodytype = FALSE
if(!(icon_exists(icon_file, RESOLVE_ICON_STATE(worn_item))))
handled_by_bodytype = FALSE
@@ -627,14 +598,10 @@ There are several things that need to be remembered:
if(dna.species.bodytype & BODYTYPE_TESHARI)
if(worn_item.supports_variations_flags & CLOTHING_TESHARI_VARIATION)
icon_file = TESHARI_SUIT_FILE
- else
- handled_by_bodytype = FALSE
- if(dna.species.bodytype & BODYTYPE_VOX)
+ if(dna.species.bodytype & BODYTYPE_VOX_LEGS)
if(worn_item.supports_variations_flags & CLOTHING_VOX_VARIATION)
icon_file = worn_item.worn_icon_vox || VOX_SUIT_FILE
- else
- handled_by_bodytype = FALSE
if(!(icon_exists(icon_file, RESOLVE_ICON_STATE(worn_item))))
handled_by_bodytype = FALSE
@@ -691,31 +658,24 @@ There are several things that need to be remembered:
inv.update_icon()
if(wear_mask)
- var/obj/item/worn_item = wear_mask
- update_hud_wear_mask(worn_item)
- var/mutable_appearance/mask_overlay
- var/icon_file = 'icons/mob/clothing/mask.dmi'
- var/handled_by_bodytype = TRUE
-
- if(dna.species.bodytype & BODYTYPE_SNOUTED)
- if(worn_item.supports_variations_flags & CLOTHING_SNOUTED_VARIATION)
- icon_file = wear_mask.worn_icon_snouted || SNOUTED_MASK_FILE
- else
- handled_by_bodytype = FALSE
+ if(!(ITEM_SLOT_MASK in check_obscured_slots()))
+ var/obj/item/worn_item = wear_mask
+ update_hud_wear_mask(worn_item)
+ var/mutable_appearance/mask_overlay
+ var/icon_file
+ var/handled_by_bodytype = TRUE
- if(dna.species.bodytype & BODYTYPE_VOX)
- if(worn_item.supports_variations_flags & CLOTHING_VOX_VARIATION)
- icon_file = worn_item.worn_icon_vox || VOX_MASK_FILE
- else
- handled_by_bodytype = FALSE
+ if(dna.species.bodytype & BODYTYPE_SNOUTED)
+ if(worn_item.supports_variations_flags & CLOTHING_SNOUTED_VARIATION)
+ icon_file = wear_mask.worn_icon_snouted || SNOUTED_MASK_FILE
- if(dna.species.bodytype & BODYTYPE_TESHARI)
- if(worn_item.supports_variations_flags & CLOTHING_TESHARI_VARIATION)
- icon_file = TESHARI_MASK_FILE
- else
- handled_by_bodytype = FALSE
+ if(dna.species.bodytype & BODYTYPE_VOX_BEAK)
+ if(worn_item.supports_variations_flags & CLOTHING_VOX_VARIATION)
+ icon_file = worn_item.worn_icon_vox || VOX_MASK_FILE
- if(!(ITEM_SLOT_MASK in check_obscured_slots()))
+ if(dna.species.bodytype & BODYTYPE_TESHARI)
+ if(worn_item.supports_variations_flags & CLOTHING_TESHARI_VARIATION)
+ icon_file = TESHARI_MASK_FILE
if(!(icon_exists(icon_file, RESOLVE_ICON_STATE(worn_item))))
icon_file = 'icons/mob/clothing/mask.dmi'
@@ -727,13 +687,13 @@ There are several things that need to be remembered:
override_file = handled_by_bodytype ? icon_file : null
)
- if(!mask_overlay)
- return
- if(!handled_by_bodytype && (OFFSET_FACEMASK in dna.species.offset_features))
- mask_overlay.pixel_x += dna.species.offset_features[OFFSET_FACEMASK][1]
- mask_overlay.pixel_y += dna.species.offset_features[OFFSET_FACEMASK][2]
+ if(!mask_overlay)
+ return
+ if(!handled_by_bodytype && (OFFSET_FACEMASK in dna.species.offset_features))
+ mask_overlay.pixel_x += dna.species.offset_features[OFFSET_FACEMASK][1]
+ mask_overlay.pixel_y += dna.species.offset_features[OFFSET_FACEMASK][2]
- overlays_standing[FACEMASK_LAYER] = mask_overlay
+ overlays_standing[FACEMASK_LAYER] = mask_overlay
apply_overlay(FACEMASK_LAYER)
update_mutant_bodyparts() //e.g. upgate needed because mask now hides lizard snout
@@ -749,18 +709,15 @@ There are several things that need to be remembered:
var/obj/item/worn_item = back
var/mutable_appearance/back_overlay
update_hud_back(worn_item)
- var/icon_file = 'icons/mob/clothing/back.dmi'
+ var/icon_file
var/handled_by_bodytype = TRUE
if(dna.species.bodytype & BODYTYPE_TESHARI)
if(worn_item.supports_variations_flags & CLOTHING_TESHARI_VARIATION)
icon_file = TESHARI_BACK_FILE
- else
- handled_by_bodytype = FALSE
- if(dna.species.bodytype & BODYTYPE_VOX)
+
+ if(dna.species.bodytype & BODYTYPE_VOX_OTHER)
if(worn_item.supports_variations_flags & CLOTHING_VOX_VARIATION)
icon_file = worn_item.worn_icon_vox || VOX_BACK_FILE
- else
- handled_by_bodytype = FALSE
if(!icon_exists(icon_file, RESOLVE_ICON_STATE(worn_item)))
@@ -918,7 +875,7 @@ There are several things that need to be remembered:
/mob/living/carbon/human/proc/update_hud_s_store(obj/item/worn_item)
worn_item.screen_loc = ui_sstore1
- if((client && hud_used) && (hud_used.inventory_shown && hud_used.hud_shown))
+ if(client && hud_used?.hud_shown)
client.screen += worn_item
update_observer_view(worn_item,TRUE)
diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm
index 5b44d761ac9..cc35f214c89 100644
--- a/code/modules/mob/living/carbon/human/species.dm
+++ b/code/modules/mob/living/carbon/human/species.dm
@@ -15,7 +15,7 @@ GLOBAL_LIST_EMPTY(features_by_species)
/datum/species
///If the game needs to manually check your race to do something not included in a proc here, it will use this.
var/id
- ///This is the fluff name. They are displayed on health analyzers and in the character setup menu. Leave them generic for other servers to customize.
+ ///This is the fluff name. They are displayed on health analyzers and in the character setup menu. Must be `\improper`.
var/name
/// The formatting of the name of the species in plural context. Defaults to "[name]\s" if unset.
/// Ex "[Plasmamen] are weak", "[Mothmen] are strong", "[Lizardpeople] don't like", "[Golems] hate"
@@ -172,6 +172,8 @@ GLOBAL_LIST_EMPTY(features_by_species)
var/inherent_biotypes = MOB_ORGANIC|MOB_HUMANOID
///List of factions the mob gain upon gaining this species.
var/list/inherent_factions
+ /// The [/mob/living/var/mob_size] of members of this species.
+ var/species_mob_size = MOB_SIZE_HUMAN
///Punch-specific attack verb.
var/attack_verb = SFX_PUNCH
@@ -429,7 +431,7 @@ GLOBAL_LIST_EMPTY(features_by_species)
if(C.hud_used)
C.hud_used.update_locked_slots()
-
+ C.mob_size = species_mob_size
C.mob_biotypes = inherent_biotypes
replace_body(C, src)
diff --git a/code/modules/mob/living/carbon/human/species_types/abductors.dm b/code/modules/mob/living/carbon/human/species_types/abductors.dm
index a248ce1e338..7f8999e28f4 100644
--- a/code/modules/mob/living/carbon/human/species_types/abductors.dm
+++ b/code/modules/mob/living/carbon/human/species_types/abductors.dm
@@ -1,5 +1,5 @@
/datum/species/abductor
- name = "Abductor"
+ name = "\improper Abductor"
id = SPECIES_ABDUCTOR
say_mod = "gibbers"
sexes = FALSE
diff --git a/code/modules/mob/living/carbon/human/species_types/android.dm b/code/modules/mob/living/carbon/human/species_types/android.dm
index 3735838029d..2304df4bc3d 100644
--- a/code/modules/mob/living/carbon/human/species_types/android.dm
+++ b/code/modules/mob/living/carbon/human/species_types/android.dm
@@ -1,5 +1,5 @@
/datum/species/android
- name = "Android"
+ name = "\improper Android"
id = SPECIES_ANDROID
say_mod = "states"
species_traits = list(NOBLOOD, NO_DNA_COPY, NOTRANSSTING)
diff --git a/code/modules/mob/living/carbon/human/species_types/dullahan.dm b/code/modules/mob/living/carbon/human/species_types/dullahan.dm
index edf3e008371..8715c86b98a 100644
--- a/code/modules/mob/living/carbon/human/species_types/dullahan.dm
+++ b/code/modules/mob/living/carbon/human/species_types/dullahan.dm
@@ -1,5 +1,5 @@
/datum/species/dullahan
- name = "Dullahan"
+ name = "\improper Dullahan"
id = SPECIES_DULLAHAN
default_color = "FFFFFF"
species_traits = list(EYECOLOR, HAIR, FACEHAIR, LIPS, HAS_FLESH, HAS_BONE, HAIRCOLOR, FACEHAIRCOLOR)
diff --git a/code/modules/mob/living/carbon/human/species_types/felinid.dm b/code/modules/mob/living/carbon/human/species_types/felinid.dm
index a19009b2131..a770c0a0692 100644
--- a/code/modules/mob/living/carbon/human/species_types/felinid.dm
+++ b/code/modules/mob/living/carbon/human/species_types/felinid.dm
@@ -1,6 +1,6 @@
//Subtype of human
/datum/species/human/felinid
- name = "Felinid"
+ name = "\improper Felinid"
id = SPECIES_FELINE
say_mod = "meows"
diff --git a/code/modules/mob/living/carbon/human/species_types/flypeople.dm b/code/modules/mob/living/carbon/human/species_types/flypeople.dm
index 7a781dedddd..90dd1419180 100644
--- a/code/modules/mob/living/carbon/human/species_types/flypeople.dm
+++ b/code/modules/mob/living/carbon/human/species_types/flypeople.dm
@@ -1,5 +1,5 @@
/datum/species/fly
- name = "Flyperson"
+ name = "\improper Flyperson"
plural_form = "Flypeople"
id = SPECIES_FLYPERSON
say_mod = "buzzes"
diff --git a/code/modules/mob/living/carbon/human/species_types/golems.dm b/code/modules/mob/living/carbon/human/species_types/golems.dm
index dbf39d46237..ff4b7b9f961 100644
--- a/code/modules/mob/living/carbon/human/species_types/golems.dm
+++ b/code/modules/mob/living/carbon/human/species_types/golems.dm
@@ -1,6 +1,6 @@
/datum/species/golem
// Animated beings of stone. They have increased defenses, and do not need to breathe. They're also slow as fuuuck.
- name = "Golem"
+ name = "\improper Golem"
id = SPECIES_GOLEM
species_traits = list(NOBLOOD,NOTRANSSTING, MUTCOLORS,NO_UNDERWEAR, NO_DNA_COPY)
inherent_traits = list(
@@ -84,7 +84,7 @@
return to_add
/datum/species/golem/adamantine
- name = "Adamantine Golem"
+ name = "\improper Adamantine Golem"
id = SPECIES_GOLEM_ADAMANTINE
meat = /obj/item/food/meat/slab/human/mutant/golem/adamantine
mutant_organs = list(/obj/item/organ/adamantine_resonator, /obj/item/organ/vocal_cords/adamantine)
@@ -104,7 +104,7 @@
//The suicide bombers of golemkind
/datum/species/golem/plasma
- name = "Plasma Golem"
+ name = "\improper Plasma Golem"
id = SPECIES_GOLEM_PLASMA
fixed_mut_color = "#aa33dd"
meat = /obj/item/stack/ore/plasma
@@ -177,7 +177,7 @@
//Harder to hurt
/datum/species/golem/diamond
- name = "Diamond Golem"
+ name = "\improper Diamond Golem"
id = SPECIES_GOLEM_DIAMOND
fixed_mut_color = "#00ffff"
armor = 70 //up from 55
@@ -189,7 +189,7 @@
//Faster but softer and less armoured
/datum/species/golem/gold
- name = "Gold Golem"
+ name = "\improper Gold Golem"
id = SPECIES_GOLEM_GOLD
fixed_mut_color = "#cccc00"
speedmod = 1
@@ -202,7 +202,7 @@
//Heavier, thus higher chance of stunning when punching
/datum/species/golem/silver
- name = "Silver Golem"
+ name = "\improper Silver Golem"
id = SPECIES_GOLEM_SILVER
fixed_mut_color = "#dddddd"
punchstunthreshold = 9 //60% chance, from 40%
@@ -222,7 +222,7 @@
//Harder to stun, deals more damage, massively slowpokes, but gravproof and obstructive. Basically, The Wall.
/datum/species/golem/plasteel
- name = "Plasteel Golem"
+ name = "\improper Plasteel Golem"
id = SPECIES_GOLEM_PLASTEEL
fixed_mut_color = "#bbbbbb"
stunmod = 0.4
@@ -252,7 +252,7 @@
//Immune to ash storms
/datum/species/golem/titanium
- name = "Titanium Golem"
+ name = "\improper Titanium Golem"
id = SPECIES_GOLEM_TITANIUM
fixed_mut_color = "#ffffff"
meat = /obj/item/stack/ore/titanium
@@ -272,7 +272,7 @@
//Immune to ash storms and lava
/datum/species/golem/plastitanium
- name = "Plastitanium Golem"
+ name = "\improper Plastitanium Golem"
id = SPECIES_GOLEM_PLASTITANIUM
fixed_mut_color = "#888888"
meat = /obj/item/stack/ore/titanium
@@ -294,7 +294,7 @@
//Fast and regenerates... but can only speak like an abductor
/datum/species/golem/alloy
- name = "Alien Alloy Golem"
+ name = "\improper Alien Alloy Golem"
id = SPECIES_GOLEM_ALIEN
fixed_mut_color = "#333333"
meat = /obj/item/stack/sheet/mineral/abductor
@@ -315,7 +315,7 @@
//Since this will usually be created from a collaboration between podpeople and free golems, wood golems are a mix between the two races
/datum/species/golem/wood
- name = "Wood Golem"
+ name = "\improper Wood Golem"
id = SPECIES_GOLEM_WOOD
fixed_mut_color = "#9E704B"
meat = /obj/item/stack/sheet/mineral/wood
@@ -371,7 +371,7 @@
//Radioactive puncher, hits for burn but only as hard as human, slightly more durable against brute but less against everything else
/datum/species/golem/uranium
- name = "Uranium Golem"
+ name = "\improper Uranium Golem"
id = SPECIES_GOLEM_URANIUM
fixed_mut_color = "#77ff00"
meat = /obj/item/stack/ore/uranium
@@ -415,7 +415,7 @@
//Immune to physical bullets and resistant to brute, but very vulnerable to burn damage. Dusts on death.
/datum/species/golem/sand
- name = "Sand Golem"
+ name = "\improper Sand Golem"
id = SPECIES_GOLEM_SAND
fixed_mut_color = "#ffdc8f"
meat = /obj/item/stack/ore/glass //this is sand
@@ -447,7 +447,7 @@
//Reflects lasers and resistant to burn damage, but very vulnerable to brute damage. Shatters on death.
/datum/species/golem/glass
- name = "Glass Golem"
+ name = "\improper Glass Golem"
id = SPECIES_GOLEM_GLASS
fixed_mut_color = "#5a96b4aa" //transparent body
meat = /obj/item/shard
@@ -485,7 +485,7 @@
//Teleports when hit or when it wants to
/datum/species/golem/bluespace
- name = "Bluespace Golem"
+ name = "\improper Bluespace Golem"
id = SPECIES_GOLEM_BLUESPACE
fixed_mut_color = "#3333ff"
meat = /obj/item/stack/ore/bluespace_crystal
@@ -545,7 +545,7 @@
..()
/datum/action/innate/unstable_teleport
- name = "Unstable Teleport"
+ name = "\improper Unstable Teleport"
check_flags = AB_CHECK_CONSCIOUS
button_icon_state = "jaunt"
icon_icon = 'icons/mob/actions/actions_spells.dmi'
@@ -584,7 +584,7 @@
//honk
/datum/species/golem/bananium
- name = "Bananium Golem"
+ name = "\improper Bananium Golem"
id = SPECIES_GOLEM_BANANIUM
fixed_mut_color = "#ffff00"
say_mod = "honks"
@@ -691,7 +691,7 @@
speech_args[SPEECH_SPANS] |= SPAN_CLOWN
/datum/species/golem/runic
- name = "Runic Golem"
+ name = "\improper Runic Golem"
id = SPECIES_GOLEM_CULT
sexes = FALSE
info_text = "As a Runic Golem, you possess eldritch powers granted by the Elder Goddess Nar'Sie."
@@ -768,7 +768,7 @@
H.reagents.remove_reagent(chem.type, REAGENTS_METABOLISM * delta_time)
/datum/species/golem/cloth
- name = "Cloth Golem"
+ name = "\improper Cloth Golem"
id = SPECIES_GOLEM_CLOTH
sexes = FALSE
info_text = "As a Cloth Golem, you are able to reform yourself after death, provided your remains aren't burned or destroyed. You are, of course, very flammable. \
@@ -944,7 +944,7 @@
fire_act()
/datum/species/golem/plastic
- name = "Plastic Golem"
+ name = "\improper Plastic Golem"
id = SPECIES_GOLEM_PLASTIC
inherent_traits = list(
TRAIT_ADVANCEDTOOLUSER,
@@ -969,7 +969,7 @@
examine_limb_id = SPECIES_GOLEM
/datum/species/golem/bronze
- name = "Bronze Golem"
+ name = "\improper Bronze Golem"
id = SPECIES_GOLEM_BRONZE
prefix = "Bronze"
special_names = list("Bell")
@@ -1039,7 +1039,7 @@
/datum/species/golem/cardboard //Faster but weaker, can also make new shells on its own
- name = "Cardboard Golem"
+ name = "\improper Cardboard Golem"
id = SPECIES_GOLEM_CARDBOARD
prefix = "Cardboard"
special_names = list("Box")
@@ -1107,7 +1107,7 @@
last_creation = world.time
/datum/species/golem/leather
- name = "Leather Golem"
+ name = "\improper Leather Golem"
id = SPECIES_GOLEM_LEATHER
special_names = list("Face", "Man", "Belt") //Ah dude 4 strength 4 stam leather belt AHHH
inherent_traits = list(
@@ -1131,7 +1131,7 @@
attack_sound = 'sound/weapons/whip.ogg'
examine_limb_id = SPECIES_GOLEM
/datum/species/golem/durathread
- name = "Durathread Golem"
+ name = "\improper Durathread Golem"
id = SPECIES_GOLEM_DURATHREAD
prefix = "Durathread"
special_names = list("Boll","Weave")
@@ -1166,7 +1166,7 @@
target.apply_status_effect(/datum/status_effect/strandling)
/datum/species/golem/bone
- name = "Bone Golem"
+ name = "\improper Bone Golem"
id = SPECIES_GOLEM_BONE
say_mod = "rattles"
prefix = "Bone"
@@ -1283,7 +1283,7 @@
SEND_SIGNAL(L, COMSIG_ADD_MOOD_EVENT, "spooked", /datum/mood_event/spooked)
/datum/species/golem/snow
- name = "Snow Golem"
+ name = "\improper Snow Golem"
id = SPECIES_GOLEM_SNOW
fixed_mut_color = null //custom sprites
armor = 45 //down from 55
@@ -1352,7 +1352,7 @@
action_icon_state = "snowball"
/datum/species/golem/mhydrogen
- name = "Metallic Hydrogen Golem"
+ name = "\improper Metallic Hydrogen Golem"
id = SPECIES_GOLEM_HYDROGEN
fixed_mut_color = "#dddddd"
info_text = "As a Metallic Hydrogen Golem, you were forged in the highest pressures and the highest heats. Your unique mineral makeup makes you immune to most types of damages."
diff --git a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm
index 4bf8a1b9a9c..8d97ba7c2f1 100644
--- a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm
+++ b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm
@@ -442,7 +442,7 @@
//Luminescents are able to consume and use slime extracts, without them decaying.
/datum/species/jelly/luminescent
- name = "Luminescent"
+ name = "\improper Luminescent"
plural_form = null
id = SPECIES_LUMINESCENT
examine_limb_id = SPECIES_JELLYPERSON
diff --git a/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm b/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm
index 899afb5ae34..bba70f4559b 100644
--- a/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm
+++ b/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm
@@ -179,7 +179,7 @@
Lizard subspecies: ASHWALKERS
*/
/datum/species/lizard/ashwalker
- name = "Ash Walker"
+ name = "\improper Ash Walker"
id = SPECIES_LIZARD_ASH
species_traits = list(MUTCOLORS,EYECOLOR,LIPS,HAS_FLESH,HAS_BONE)
mutantlungs = /obj/item/organ/lungs/ashwalker
@@ -196,7 +196,7 @@ Lizard subspecies: ASHWALKERS
Lizard subspecies: SILVER SCALED
*/
/datum/species/lizard/silverscale
- name = "Silver Scale"
+ name = "\improper Silver Scale"
id = SPECIES_LIZARD_SILVER
inherent_biotypes = MOB_ORGANIC|MOB_HUMANOID|MOB_REPTILE
inherent_traits = list(
diff --git a/code/modules/mob/living/carbon/human/species_types/monkeys.dm b/code/modules/mob/living/carbon/human/species_types/monkeys.dm
index 40063c834ce..9a0d0d528b2 100644
--- a/code/modules/mob/living/carbon/human/species_types/monkeys.dm
+++ b/code/modules/mob/living/carbon/human/species_types/monkeys.dm
@@ -1,5 +1,5 @@
/datum/species/monkey
- name = "Monkey"
+ name = "\improper Monkey"
id = SPECIES_MONKEY
say_mod = "chimpers"
bodytype = BODYTYPE_ORGANIC | BODYTYPE_MONKEY
diff --git a/code/modules/mob/living/carbon/human/species_types/mushpeople.dm b/code/modules/mob/living/carbon/human/species_types/mushpeople.dm
index db340e41898..e4afe71d1b4 100644
--- a/code/modules/mob/living/carbon/human/species_types/mushpeople.dm
+++ b/code/modules/mob/living/carbon/human/species_types/mushpeople.dm
@@ -1,5 +1,5 @@
/datum/species/mush //mush mush codecuck
- name = "Mushroomperson"
+ name = "\improper Mushroomperson"
plural_form = "Mushroompeople"
id = SPECIES_MUSHROOM
mutant_bodyparts = list("caps" = "Round")
diff --git a/code/modules/mob/living/carbon/human/species_types/shadowpeople.dm b/code/modules/mob/living/carbon/human/species_types/shadowpeople.dm
index 4b905f35aa0..a659937d80e 100644
--- a/code/modules/mob/living/carbon/human/species_types/shadowpeople.dm
+++ b/code/modules/mob/living/carbon/human/species_types/shadowpeople.dm
@@ -1,6 +1,6 @@
/datum/species/shadow
// Humans cursed to stay in the darkness, lest their life forces drain. They regain health in shadow and die in light.
- name = "Shadow"
+ name = "\improper Shadow"
plural_form = "Shadowpeople"
id = SPECIES_SHADOW
sexes = 0
diff --git a/code/modules/mob/living/carbon/human/species_types/skeletons.dm b/code/modules/mob/living/carbon/human/species_types/skeletons.dm
index 67b0712254e..ac7eb01b227 100644
--- a/code/modules/mob/living/carbon/human/species_types/skeletons.dm
+++ b/code/modules/mob/living/carbon/human/species_types/skeletons.dm
@@ -1,6 +1,6 @@
/datum/species/skeleton
// 2spooky
- name = "Spooky Scary Skeleton"
+ name = "\improper Spooky Scary Skeleton"
id = SPECIES_SKELETON
say_mod = "rattles"
sexes = 0
diff --git a/code/modules/mob/living/carbon/human/species_types/skrell.dm b/code/modules/mob/living/carbon/human/species_types/skrell.dm
index a5f1f3652eb..16df6433834 100644
--- a/code/modules/mob/living/carbon/human/species_types/skrell.dm
+++ b/code/modules/mob/living/carbon/human/species_types/skrell.dm
@@ -1,5 +1,5 @@
/datum/species/skrell
- name = "Skrell"
+ name = "\improper Skrell"
id = SPECIES_SKRELL
say_mod = "warbles"
default_color = "42F58D"
diff --git a/code/modules/mob/living/carbon/human/species_types/snail.dm b/code/modules/mob/living/carbon/human/species_types/snail.dm
index 6b7dfecd6fe..5763fc89e57 100644
--- a/code/modules/mob/living/carbon/human/species_types/snail.dm
+++ b/code/modules/mob/living/carbon/human/species_types/snail.dm
@@ -1,5 +1,5 @@
/datum/species/snail
- name = "Snailperson"
+ name = "\improper Snailperson"
id = SPECIES_SNAIL
offset_features = list(OFFSET_GLASSES = list(0,4))
default_color = "336600" //vomit green
diff --git a/code/modules/mob/living/carbon/human/species_types/teshari.dm b/code/modules/mob/living/carbon/human/species_types/teshari.dm
index d88670d370f..b30179b5350 100644
--- a/code/modules/mob/living/carbon/human/species_types/teshari.dm
+++ b/code/modules/mob/living/carbon/human/species_types/teshari.dm
@@ -16,6 +16,7 @@
OFFSET_BACK = list(0, -4),
OFFSET_ACCESSORY = list(0, -3))
+ species_mob_size = MOB_SIZE_SMALL
say_mod = "chirps"
attack_verb = "slash"
attack_effect = ATTACK_EFFECT_CLAW
@@ -59,10 +60,13 @@
/datum/species/teshari/prepare_human_for_preview(mob/living/carbon/human/human)
human.dna.features["mcolor"] = TESH_BODY_COLOR
human.hair_color = TESH_FEATHER_COLOR
- human.facial_hair_color = COLOR_WHITE
var/obj/item/organ/external/teshari_feathers/head_feathers = human.internal_organs_slot[ORGAN_SLOT_EXTERNAL_TESHARI_FEATHERS]
head_feathers.set_sprite("Plain")
+ var/obj/item/organ/external/teshari_body_feathers/body_feathers = human.internal_organs_slot[ORGAN_SLOT_EXTERNAL_TESHARI_BODY_FEATHERS]
+ body_feathers.set_sprite("None")
+ var/obj/item/organ/external/teshari_ears/ears = human.internal_organs_slot[ORGAN_SLOT_EXTERNAL_TESHARI_EARS]
+ ears.set_sprite("None")
human.update_body(TRUE)
#undef TESH_BODY_COLOR
diff --git a/code/modules/mob/living/carbon/human/species_types/vampire.dm b/code/modules/mob/living/carbon/human/species_types/vampire.dm
index 699c07f47d5..88600038787 100644
--- a/code/modules/mob/living/carbon/human/species_types/vampire.dm
+++ b/code/modules/mob/living/carbon/human/species_types/vampire.dm
@@ -5,7 +5,7 @@
#define VAMP_DRAIN_AMOUNT 50
/datum/species/vampire
- name = "Vampire"
+ name = "\improper Vampire"
id = SPECIES_VAMPIRE
default_color = "FFFFFF"
species_traits = list(
diff --git a/code/modules/mob/living/carbon/human/species_types/vox.dm b/code/modules/mob/living/carbon/human/species_types/vox.dm
index 82ff87f74e2..cfeb6ce1455 100644
--- a/code/modules/mob/living/carbon/human/species_types/vox.dm
+++ b/code/modules/mob/living/carbon/human/species_types/vox.dm
@@ -50,8 +50,8 @@
BODY_ZONE_CHEST = /obj/item/bodypart/chest/vox,
BODY_ZONE_L_ARM = /obj/item/bodypart/l_arm/vox,
BODY_ZONE_R_ARM = /obj/item/bodypart/r_arm/vox,
- BODY_ZONE_L_LEG = /obj/item/bodypart/l_leg/digitigrade/vox,
- BODY_ZONE_R_LEG = /obj/item/bodypart/r_leg/digitigrade/vox,
+ BODY_ZONE_L_LEG = /obj/item/bodypart/l_leg/vox,
+ BODY_ZONE_R_LEG = /obj/item/bodypart/r_leg/vox,
)
/datum/species/vox/prepare_human_for_preview(mob/living/carbon/human/human)
diff --git a/code/modules/mob/living/carbon/human/species_types/zombies.dm b/code/modules/mob/living/carbon/human/species_types/zombies.dm
index 797d64bc62b..3d4684d64d3 100644
--- a/code/modules/mob/living/carbon/human/species_types/zombies.dm
+++ b/code/modules/mob/living/carbon/human/species_types/zombies.dm
@@ -2,7 +2,7 @@
/datum/species/zombie
// 1spooky
- name = "High-Functioning Zombie"
+ name = "\improper High-Functioning Zombie"
id = SPECIES_ZOMBIE
say_mod = "moans"
sexes = 0
@@ -77,7 +77,7 @@
return to_add
/datum/species/zombie/infectious
- name = "Infectious Zombie"
+ name = "\improper Infectious Zombie"
id = SPECIES_ZOMBIE_INFECTIOUS
examine_limb_id = SPECIES_ZOMBIE
mutanthands = /obj/item/zombie_hand
diff --git a/code/modules/mob/living/inhand_holder.dm b/code/modules/mob/living/inhand_holder.dm
index d2146c0c749..b5efad00ec8 100644
--- a/code/modules/mob/living/inhand_holder.dm
+++ b/code/modules/mob/living/inhand_holder.dm
@@ -1,116 +1,117 @@
-//Generic system for picking up mobs.
-//Currently works for head and hands.
-/obj/item/clothing/head/mob_holder
+/// Simple holder for picked-up mobs
+/obj/item/mob_holder
name = "bugged mob"
desc = "Yell at coderbrush."
- icon = null
- icon_state = ""
- slot_flags = NONE
+
+ /// The mob being held by this item.
var/mob/living/held_mob
- var/destroying = FALSE
+ /// Should the held mob be examined instead of the holder?
+ var/examine_mob = TRUE
-/obj/item/clothing/head/mob_holder/Initialize(mapload, mob/living/M, worn_state, head_icon, lh_icon, rh_icon, worn_slot_flags = NONE)
- if(head_icon)
- worn_icon = head_icon
+/obj/item/mob_holder/Initialize(mapload, mob/living/target_mob, worn_state, head_icon, lh_icon, rh_icon, worn_slot_flags = NONE)
+ . = ..()
+ if(!istype(target_mob))
+ return INITIALIZE_HINT_QDEL
if(worn_state)
inhand_icon_state = worn_state
+ if(head_icon)
+ worn_icon = head_icon
if(lh_icon)
lefthand_file = lh_icon
if(rh_icon)
righthand_file = rh_icon
if(worn_slot_flags)
slot_flags = worn_slot_flags
- w_class = M.held_w_class
- deposit(M)
- . = ..()
-/obj/item/clothing/head/mob_holder/Destroy()
- destroying = TRUE
+ w_class = target_mob.held_w_class
+ deposit(target_mob)
+
+/obj/item/mob_holder/Destroy(force)
if(held_mob)
- release(FALSE)
+ release_mob(del_on_release = FALSE)
return ..()
-/obj/item/clothing/head/mob_holder/proc/deposit(mob/living/L)
- if(!istype(L))
- return FALSE
- L.setDir(SOUTH)
- update_visuals(L)
- held_mob = L
- L.forceMove(src)
- name = L.name
- desc = L.desc
- return TRUE
-
-/obj/item/clothing/head/mob_holder/proc/update_visuals(mob/living/L)
- appearance = L.appearance
-
-/obj/item/clothing/head/mob_holder/dropped()
- ..()
- if(held_mob && isturf(loc))
- release()
+/obj/item/mob_holder/examine(mob/user)
+ if(examine_mob)
+ return held_mob.examine(user)
+ return ..()
+
+/obj/item/mob_holder/proc/deposit(mob/living/target_mob)
+ target_mob.setDir(SOUTH)
+ target_mob.forceMove(src)
+ held_mob = target_mob
+ name = held_mob.name
+ desc = held_mob.desc
+ appearance = held_mob.appearance
-/obj/item/clothing/head/mob_holder/proc/release(del_on_release = TRUE, display_messages = TRUE)
+/obj/item/mob_holder/proc/release_mob(del_on_release = TRUE, display_messages = TRUE)
if(!held_mob)
- if(del_on_release && !destroying)
- qdel(src)
- return FALSE
- var/mob/living/released_mob = held_mob
- held_mob = null // stops the held mob from being release()'d twice.
- if(isliving(loc))
- var/mob/living/L = loc
- if(display_messages)
- to_chat(L, span_warning("[released_mob] wriggles free!"))
- L.dropItemToGround(src)
- released_mob.forceMove(drop_location())
- released_mob.reset_perspective()
- released_mob.setDir(SOUTH)
+ return
if(display_messages)
- released_mob.visible_message(span_warning("[released_mob] uncurls!"))
- if(del_on_release && !destroying)
+ // Both procs can handle non-mob locs so a check isn't needed here
+ to_chat(loc, span_warning("[held_mob] wriggles free!"))
+ visible_message(span_warning("[held_mob] uncurls!"), ignored_mobs = loc)
+ held_mob.forceMove(drop_location())
+ held_mob.reset_perspective()
+ held_mob.setDir()
+ held_mob = null
+ if(del_on_release)
qdel(src)
- return TRUE
-/obj/item/clothing/head/mob_holder/relaymove(mob/living/user, direction)
- release()
+/obj/item/mob_holder/dropped(mob/user, silent)
+ . = ..()
+ if(held_mob && isturf(loc))
+ release_mob(display_messages = !silent)
-/obj/item/clothing/head/mob_holder/container_resist_act()
- release()
+/obj/item/mob_holder/attackby(obj/item/attacking_item, mob/user, params)
+ return held_mob.attackby(attacking_item, user, params)
-/obj/item/clothing/head/mob_holder/on_found(mob/finder)
- if(held_mob?.will_escape_storage())
- to_chat(finder, span_warning("\A [held_mob.name] pops out! "))
- finder.visible_message(span_warning("\A [held_mob.name] pops out of the container [finder] is opening!"), ignored_mobs = finder)
- release(TRUE, FALSE)
- return
+/obj/item/mob_holder/relaymove(mob/living/user, direction)
+ release_mob()
-/obj/item/clothing/head/mob_holder/drone/Initialize(mapload, mob/living/M, worn_state, head_icon, lh_icon, rh_icon, worn_slot_flags = NONE)
- //If we're not being put onto a drone, end it all
- if(!isdrone(M))
- return INITIALIZE_HINT_QDEL
- return ..()
+/obj/item/mob_holder/container_resist_act(mob/living/user)
+ release_mob()
-/obj/item/clothing/head/mob_holder/drone/deposit(mob/living/L)
- . = ..()
- if(!isdrone(L))
- qdel(src)
- name = "drone (hiding)"
- desc = "This drone is scared and has curled up into a ball!"
+/obj/item/mob_holder/on_thrown(mob/living/carbon/user, atom/target)
+ . = held_mob
+ if(!..())
+ return null
-/obj/item/clothing/head/mob_holder/drone/update_visuals(mob/living/L)
- var/mob/living/simple_animal/drone/D = L
- if(!D)
- return ..()
- icon = 'icons/mob/drone.dmi'
- icon_state = "[D.visualAppearance]_hat"
+/obj/item/mob_holder/on_found(mob/finder)
+ if(held_mob.will_escape_storage())
+ finder.visible_message(span_warning("[held_mob] pops out of the container [finder] is opening!"), ignored_mobs = finder)
+ to_chat(finder, span_warning("[held_mob] pops out!"))
+ release_mob(display_messages = FALSE)
-/obj/item/clothing/head/mob_holder/destructible
+/obj/item/mob_holder/emp_act(severity)
+ return held_mob.emp_act(severity)
-/obj/item/clothing/head/mob_holder/destructible/Destroy()
- if(held_mob)
- release(FALSE, TRUE, TRUE)
+/obj/item/mob_holder/machine_wash(obj/machinery/washing_machine/washer)
+ ..()
+ held_mob.machine_wash(washer)
+
+
+/// Identical to the parent [/obj/item/mob_holder], except `Destroy()` also deletes the held mob.
+/obj/item/mob_holder/destructible
+
+/obj/item/mob_holder/destructible/Destroy(force)
+ QDEL_NULL(held_mob)
return ..()
-/obj/item/clothing/head/mob_holder/destructible/release(del_on_release = TRUE, display_messages = TRUE, delete_mob = FALSE)
- if(delete_mob && held_mob)
- QDEL_NULL(held_mob)
+
+/obj/item/mob_holder/drone
+ examine_mob = FALSE
+
+/obj/item/mob_holder/drone/Initialize(mapload, mob/living/target_mob, worn_state, head_icon, lh_icon, rh_icon, worn_slot_flags)
+ //If we're not going to hold a drone, end it all
+ if(!isdrone(target_mob))
+ return INITIALIZE_HINT_QDEL
return ..()
+
+/obj/item/mob_holder/drone/deposit(mob/living/target_mob)
+ . = ..()
+ var/mob/living/simple_animal/drone/held_drone = held_mob
+ name = "drone (hiding)"
+ desc = "This drone is scared and has curled up into a ball!"
+ icon = 'icons/mob/drone.dmi'
+ icon_state = "[held_drone.visualAppearance]_hat"
diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm
index 10d312c653b..efad7e212ba 100644
--- a/code/modules/mob/living/living.dm
+++ b/code/modules/mob/living/living.dm
@@ -1566,39 +1566,70 @@
var/mob/living/U = user
if(isliving(dropping))
var/mob/living/M = dropping
- if(M.can_be_held && U.pulling == M)
+ if(U.pulling == M && mob_size > M.mob_size)
M.mob_try_pickup(U)//blame kevinz
return//dont open the mobs inventory if you are picking them up
. = ..()
-/mob/living/proc/mob_pickup(mob/living/L)
- var/obj/item/clothing/head/mob_holder/holder = new(get_turf(src), src, held_state, head_icon, held_lh, held_rh, worn_slot_flags)
- L.visible_message(span_warning("[L] scoops up [src]!"))
- L.put_in_hands(holder)
-
-/mob/living/proc/set_name()
- numba = rand(1, 1000)
- name = "[name] ([numba])"
- real_name = name
-
-/mob/living/proc/mob_try_pickup(mob/living/user, instant=FALSE)
- if(!ishuman(user))
+/**
+ * Attempt to pick up a mob.
+ *
+ * `src` is the mob being picked up, `user` is the mob doing the pick upping.
+ *
+ * Arguments:
+ * * mob/living/user - The user attempting to pick up this mob.
+ * * instant - Should the mob be picked up instantly?
+ */
+/mob/living/proc/mob_try_pickup(mob/living/user, instant = FALSE)
+ . = FALSE
+ if(!mob_pickup_checks(user))
return
+ if(!instant)
+ user.visible_message(span_warning("[user] starts trying to pick up [src]!"),
+ span_danger("You start trying to pick up [src]..."), ignored_mobs = src)
+ to_chat(src, span_userdanger("[user] starts trying to pick you up!"))
+ if(!do_after(user, 2 SECONDS, src))
+ return
+ if(!mob_pickup_checks(user)) // Check everything again after the timer
+ return
+ mob_pickup(user)
+ return TRUE
+
+/mob/living/proc/mob_pickup_checks(mob/living/user, display_messages = TRUE)
+ if(QDELETED(src) || !istype(user))
+ return FALSE
if(!user.get_empty_held_indexes())
- to_chat(user, span_warning("Your hands are full!"))
+ if(display_messages)
+ to_chat(user, span_warning("Your hands are full!"))
return FALSE
if(buckled)
- to_chat(user, span_warning("[src] is buckled to something!"))
+ if(display_messages)
+ to_chat(user, span_warning("[src] is buckled to [buckled] and cannot be picked up!"))
return FALSE
- if(!instant)
- user.visible_message(span_warning("[user] starts trying to scoop up [src]!"), \
- span_danger("You start trying to scoop up [src]..."), null, null, src)
- to_chat(src, span_userdanger("[user] starts trying to scoop you up!"))
- if(!do_after(user, 2 SECONDS, target = src))
- return FALSE
- mob_pickup(user)
return TRUE
+/**
+ * Spawn a [/obj/item/mob_holder], move `src` into it, and put it into the hands of `user`.
+ *
+ * [/mob/living/proc/mob_try_pickup] should be called instead of this under most circumstances.
+ *
+ * Arguments:
+ * * mob/living/user - The user picking up this mob.
+ */
+/mob/living/proc/mob_pickup(mob/living/user)
+ var/obj/item/mob_holder/holder = new held_type(get_turf(src), src, held_state, head_icon, held_lh, held_rh, worn_slot_flags)
+ user.visible_message(span_warning("[user] picks up [src]!"))
+ user.put_in_hands(holder)
+ return holder
+
+/mob/living/remove_air(amount) //To prevent those in contents suffocating
+ return loc ? loc.remove_air(amount) : null
+
+/mob/living/proc/set_name()
+ numba = rand(1, 1000)
+ name = "[name] ([numba])"
+ real_name = name
+
/mob/living/proc/get_static_viruses() //used when creating blood and other infective objects
if(!LAZYLEN(diseases))
return
diff --git a/code/modules/mob/living/living_defines.dm b/code/modules/mob/living/living_defines.dm
index 3736b412c5f..a0e625946aa 100644
--- a/code/modules/mob/living/living_defines.dm
+++ b/code/modules/mob/living/living_defines.dm
@@ -133,13 +133,6 @@
var/list/obj/effect/proc_holder/abilities = list()
- ///whether this can be picked up and held.
- var/can_be_held = FALSE
- /// The w_class of the holder when held.
- var/held_w_class = WEIGHT_CLASS_NORMAL
- ///if it can be held, can it be equipped to any slots? (think pAI's on head)
- var/worn_slot_flags = NONE
-
var/ventcrawl_layer = PIPING_LAYER_DEFAULT
var/losebreath = 0
@@ -152,6 +145,12 @@
/// List of changes to body temperature, used by desease symtoms like fever
var/list/body_temp_changes = list()
+ /// The type of /obj/item/mob_holder to create if the mob is picked up.
+ var/held_type = /obj/item/mob_holder
+ /// The w_class of the holder when held.
+ var/held_w_class = WEIGHT_CLASS_NORMAL
+ ///if it can be held, can it be equipped to any slots? (think pAI's on head)
+ var/worn_slot_flags = NONE
//this stuff is here to make it simple for admins to mess with custom held sprites
var/icon/held_lh = 'icons/mob/pets_held_lh.dmi'//icons for holding mobs
var/icon/held_rh = 'icons/mob/pets_held_rh.dmi'
diff --git a/code/modules/mob/living/living_stripping.dm b/code/modules/mob/living/living_stripping.dm
new file mode 100644
index 00000000000..a0956eb2672
--- /dev/null
+++ b/code/modules/mob/living/living_stripping.dm
@@ -0,0 +1,7 @@
+/mob/living/proc/should_strip(mob/user)
+ . = TRUE
+
+ if(user.pulling == src && isliving(user))
+ var/mob/living/living_user = user
+ if(mob_size < living_user.mob_size) // If we're smaller than user
+ return !mob_pickup_checks(user, FALSE)
diff --git a/code/modules/mob/living/silicon/pai/pai.dm b/code/modules/mob/living/silicon/pai/pai.dm
index 5eed839b807..798a11aacc4 100644
--- a/code/modules/mob/living/silicon/pai/pai.dm
+++ b/code/modules/mob/living/silicon/pai/pai.dm
@@ -14,7 +14,6 @@
health = 500
maxHealth = 500
layer = LOW_MOB_LAYER
- can_be_held = TRUE
move_force = 0
pull_force = 0
move_resist = 0
diff --git a/code/modules/mob/living/silicon/pai/pai_shell.dm b/code/modules/mob/living/silicon/pai/pai_shell.dm
index 8431e0e967e..abd3969d791 100644
--- a/code/modules/mob/living/silicon/pai/pai_shell.dm
+++ b/code/modules/mob/living/silicon/pai/pai_shell.dm
@@ -56,9 +56,9 @@
return
visible_message(span_notice("[src] deactivates its holochassis emitter and folds back into a compact card!"))
stop_pulling()
- if(istype(loc, /obj/item/clothing/head/mob_holder))
- var/obj/item/clothing/head/mob_holder/MH = loc
- MH.release(display_messages = FALSE)
+ if(ismobholder(loc))
+ var/obj/item/mob_holder/MH = loc
+ MH.release_mob(display_messages = FALSE)
if(client)
client.perspective = EYE_PERSPECTIVE
client.eye = card
@@ -148,8 +148,9 @@
set_light(0)
to_chat(src, span_notice("You disable your integrated light."))
-/mob/living/silicon/pai/mob_try_pickup(mob/living/user, instant=FALSE)
+/mob/living/silicon/pai/mob/mob_pickup_checks(mob/living/user, display_messages)
if(!possible_chassis[chassis])
- to_chat(user, span_warning("[src]'s current form isn't able to be carried!"))
+ if(display_messages)
+ to_chat(user, span_warning("[src]'s current form isn't able to be carried!"))
return FALSE
return ..()
diff --git a/code/modules/mob/living/silicon/robot/robot_model.dm b/code/modules/mob/living/silicon/robot/robot_model.dm
index db9636a6d0b..b01806bfcf3 100644
--- a/code/modules/mob/living/silicon/robot/robot_model.dm
+++ b/code/modules/mob/living/silicon/robot/robot_model.dm
@@ -352,7 +352,7 @@
/obj/item/extinguisher/mini,
/obj/item/mop/cyborg,
/obj/item/reagent_containers/glass/bucket,
- /obj/item/paint/paint_remover,
+ /obj/item/paint_remover,
/obj/item/lightreplacer/cyborg,
/obj/item/holosign_creator,
/obj/item/reagent_containers/spray/cyborg_drying)
diff --git a/code/modules/mob/living/simple_animal/bot/mulebot.dm b/code/modules/mob/living/simple_animal/bot/mulebot.dm
index 2dd22bd7571..972aa0ae03c 100644
--- a/code/modules/mob/living/simple_animal/bot/mulebot.dm
+++ b/code/modules/mob/living/simple_animal/bot/mulebot.dm
@@ -756,9 +756,6 @@
new /obj/effect/decal/cleanable/oil(loc)
return ..()
-/mob/living/simple_animal/bot/mulebot/remove_air(amount) //To prevent riders suffocating
- return loc ? loc.remove_air(amount) : null
-
/mob/living/simple_animal/bot/mulebot/resist()
..()
if(load)
diff --git a/code/modules/mob/living/simple_animal/friendly/cat.dm b/code/modules/mob/living/simple_animal/friendly/cat.dm
index 48321556ea3..af61bd67967 100644
--- a/code/modules/mob/living/simple_animal/friendly/cat.dm
+++ b/code/modules/mob/living/simple_animal/friendly/cat.dm
@@ -32,7 +32,6 @@
var/mob/living/simple_animal/mouse/movement_target
gold_core_spawnable = FRIENDLY_SPAWN
collar_type = "cat"
- can_be_held = TRUE
held_state = "cat2"
///In the case 'melee_damage_upper' is somehow raised above 0
attack_verb_continuous = "claws"
diff --git a/code/modules/mob/living/simple_animal/friendly/dog.dm b/code/modules/mob/living/simple_animal/friendly/dog.dm
index 26ad57e4dce..7334b61ad61 100644
--- a/code/modules/mob/living/simple_animal/friendly/dog.dm
+++ b/code/modules/mob/living/simple_animal/friendly/dog.dm
@@ -16,7 +16,6 @@
see_in_dark = 5
speak_chance = 1
turns_per_move = 10
- can_be_held = TRUE
ai_controller = /datum/ai_controller/dog
stop_automated_movement = TRUE
///In the case 'melee_damage_upper' is somehow raised above 0
@@ -177,7 +176,7 @@
/mob/living/simple_animal/pet/dog/corgi/Initialize(mapload)
. = ..()
regenerate_icons()
- AddElement(/datum/element/strippable, GLOB.strippable_corgi_items)
+ AddElement(/datum/element/strippable, GLOB.strippable_corgi_items, /mob/living/.proc/should_strip)
/mob/living/simple_animal/pet/dog/corgi/exoticcorgi/Initialize(mapload)
. = ..()
diff --git a/code/modules/mob/living/simple_animal/friendly/drone/_drone.dm b/code/modules/mob/living/simple_animal/friendly/drone/_drone.dm
index 30bdeba9b84..9fdcd17aed8 100644
--- a/code/modules/mob/living/simple_animal/friendly/drone/_drone.dm
+++ b/code/modules/mob/living/simple_animal/friendly/drone/_drone.dm
@@ -48,7 +48,7 @@
dextrous_hud_type = /datum/hud/dextrous/drone
lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE
see_in_dark = 7
- can_be_held = TRUE
+ held_type = /obj/item/mob_holder/drone
worn_slot_flags = ITEM_SLOT_HEAD
held_items = list(null, null)
/// `TRUE` if we have picked our visual appearance, `FALSE` otherwise (default)
diff --git a/code/modules/mob/living/simple_animal/friendly/drone/interaction.dm b/code/modules/mob/living/simple_animal/friendly/drone/interaction.dm
index 305c221f319..aafa2ef9006 100644
--- a/code/modules/mob/living/simple_animal/friendly/drone/interaction.dm
+++ b/code/modules/mob/living/simple_animal/friendly/drone/interaction.dm
@@ -28,29 +28,9 @@
else
to_chat(drone, span_warning("You need to remain still to cannibalize [src]!"))
-//ATTACK HAND IGNORING PARENT RETURN VALUE
-/mob/living/simple_animal/drone/attack_hand(mob/user, list/modifiers)
- if(ishuman(user))
- if(stat == DEAD || status_flags & GODMODE || !can_be_held)
- ..()
- return
- if(user.get_active_held_item())
- to_chat(user, span_warning("Your hands are full!"))
- return
- visible_message(span_warning("[user] starts picking up [src]."), \
- span_userdanger("[user] starts picking you up!"))
- if(!do_after(user, 20, target = src))
- return
- visible_message(span_warning("[user] picks up [src]!"), \
- span_userdanger("[user] picks you up!"))
- if(buckled)
- to_chat(user, span_warning("[src] is buckled to [buckled] and cannot be picked up!"))
- return
- to_chat(user, span_notice("You pick [src] up."))
- drop_all_held_items()
- var/obj/item/clothing/head/mob_holder/drone/DH = new(get_turf(src), src)
- DH.slot_flags = worn_slot_flags
- user.put_in_hands(DH)
+/mob/living/simple_animal/drone/mob_pickup(mob/living/user)
+ drop_all_held_items()
+ return ..()
/**
* Called when a drone attempts to reactivate a dead drone
diff --git a/code/modules/mob/living/simple_animal/friendly/fox.dm b/code/modules/mob/living/simple_animal/friendly/fox.dm
index a262190a2df..672570cf50c 100644
--- a/code/modules/mob/living/simple_animal/friendly/fox.dm
+++ b/code/modules/mob/living/simple_animal/friendly/fox.dm
@@ -21,7 +21,6 @@
response_harm_continuous = "kicks"
response_harm_simple = "kick"
gold_core_spawnable = FRIENDLY_SPAWN
- can_be_held = TRUE
held_state = "fox"
///In the case 'melee_damage_upper' is somehow raised above 0
attack_verb_continuous = "bites"
diff --git a/code/modules/mob/living/simple_animal/friendly/lizard.dm b/code/modules/mob/living/simple_animal/friendly/lizard.dm
index 74427b27171..83d23c59864 100644
--- a/code/modules/mob/living/simple_animal/friendly/lizard.dm
+++ b/code/modules/mob/living/simple_animal/friendly/lizard.dm
@@ -25,7 +25,6 @@
gold_core_spawnable = FRIENDLY_SPAWN
obj_damage = 0
environment_smash = ENVIRONMENT_SMASH_NONE
- can_be_held = TRUE
var/static/list/edibles = typecacheof(list(/mob/living/simple_animal/butterfly, /mob/living/basic/cockroach)) //list of atoms, however turfs won't affect AI, but will affect consumption.
/mob/living/simple_animal/hostile/lizard/Initialize(mapload)
diff --git a/code/modules/mob/living/simple_animal/friendly/mouse.dm b/code/modules/mob/living/simple_animal/friendly/mouse.dm
index 99123688212..ba1a250f9bf 100644
--- a/code/modules/mob/living/simple_animal/friendly/mouse.dm
+++ b/code/modules/mob/living/simple_animal/friendly/mouse.dm
@@ -27,7 +27,7 @@
var/body_color //brown, gray and white, leave blank for random
gold_core_spawnable = FRIENDLY_SPAWN
var/chew_probability = 1
- can_be_held = TRUE
+ worn_slot_flags = ITEM_SLOT_HEAD
held_w_class = WEIGHT_CLASS_TINY
held_state = "mouse_gray"
faction = list("rat")
diff --git a/code/modules/mob/living/simple_animal/friendly/rabbit.dm b/code/modules/mob/living/simple_animal/friendly/rabbit.dm
index 603fd873c57..7006ce000c4 100644
--- a/code/modules/mob/living/simple_animal/friendly/rabbit.dm
+++ b/code/modules/mob/living/simple_animal/friendly/rabbit.dm
@@ -21,7 +21,6 @@
emote_hear = list("hops.")
emote_see = list("hops around","bounces up and down")
butcher_results = list(/obj/item/food/meat/slab = 1)
- can_be_held = TRUE
density = FALSE
speak_chance = 2
turns_per_move = 3
diff --git a/code/modules/mob/living/simple_animal/friendly/sloth.dm b/code/modules/mob/living/simple_animal/friendly/sloth.dm
index a6a2ee382d2..1978694e467 100644
--- a/code/modules/mob/living/simple_animal/friendly/sloth.dm
+++ b/code/modules/mob/living/simple_animal/friendly/sloth.dm
@@ -10,7 +10,6 @@
emote_see = list("dozes off.", "looks around sleepily.")
speak_chance = 1
turns_per_move = 5
- can_be_held = TRUE
butcher_results = list(/obj/item/food/meat/slab = 3)
response_help_continuous = "pets"
response_help_simple = "pet"
@@ -19,6 +18,7 @@
response_harm_continuous = "kicks"
response_harm_simple = "kick"
mob_biotypes = MOB_ORGANIC|MOB_BEAST
+ mob_size = MOB_SIZE_SMALL
gold_core_spawnable = FRIENDLY_SPAWN
melee_damage_lower = 18
melee_damage_upper = 18
diff --git a/code/modules/mob/living/simple_animal/hostile/ant.dm b/code/modules/mob/living/simple_animal/hostile/ant.dm
index 72a9286069d..f36ee97b6e7 100644
--- a/code/modules/mob/living/simple_animal/hostile/ant.dm
+++ b/code/modules/mob/living/simple_animal/hostile/ant.dm
@@ -21,7 +21,7 @@
harm_intent_damage = 4
obj_damage = 5
melee_damage_lower = 5
- melee_damage_upper = 10 // Higher health than a base carp, so much lower damage.
+ melee_damage_upper = 10 // Higher health than a base carp, so much lower damage.
attack_verb_continuous = "bites"
attack_verb_simple = "bite"
attack_sound = 'sound/weapons/bite.ogg'
@@ -35,7 +35,6 @@
response_harm_simple = "kick"
gold_core_spawnable = FRIENDLY_SPAWN
faction = list("neutral")
- can_be_held = FALSE
footstep_type = FOOTSTEP_MOB_CLAW
health = 100
maxHealth = 100
diff --git a/code/modules/mob/living/simple_animal/hostile/bees.dm b/code/modules/mob/living/simple_animal/hostile/bees.dm
index 910cd39fbe8..c47a9558d1c 100644
--- a/code/modules/mob/living/simple_animal/hostile/bees.dm
+++ b/code/modules/mob/living/simple_animal/hostile/bees.dm
@@ -42,7 +42,7 @@
mob_biotypes = MOB_ORGANIC|MOB_BUG
gold_core_spawnable = FRIENDLY_SPAWN
search_objects = 1 //have to find those plant trays!
- can_be_held = TRUE
+ held_type = /obj/item/mob_holder/destructible
held_w_class = WEIGHT_CLASS_TINY
//Spaceborn beings don't get hurt by space
@@ -68,16 +68,17 @@
AddComponent(/datum/component/swarming)
add_cell_sample()
-/mob/living/simple_animal/hostile/bee/mob_pickup(mob/living/L)
+/mob/living/simple_animal/hostile/bee/mob_pickup_checks(mob/living/user, display_messages)
if(flags_1 & HOLOGRAM_1)
- return
- var/obj/item/clothing/head/mob_holder/destructible/holder = new(get_turf(src), src, held_state, head_icon, held_lh, held_rh, worn_slot_flags)
+ return FALSE
+ return ..()
+
+/mob/living/simple_animal/hostile/bee/mob_pickup(mob/living/L)
+ var/obj/item/mob_holder/holder = ..()
var/list/reee = list(/datum/reagent/consumable/nutriment/vitamin = 5)
if(beegent)
reee[beegent.type] = 5
holder.AddComponent(/datum/component/edible, reee, null, RAW | MEAT | GROSS, 10, 0, list("bee"), null, 10)
- L.visible_message(span_warning("[L] scoops up [src]!"))
- L.put_in_hands(holder)
/mob/living/simple_animal/hostile/bee/Destroy()
if(beehome)
diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/hierophant.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/hierophant.dm
index dd550099053..76ff1fcaf5d 100644
--- a/code/modules/mob/living/simple_animal/hostile/megafauna/hierophant.dm
+++ b/code/modules/mob/living/simple_animal/hostile/megafauna/hierophant.dm
@@ -529,7 +529,7 @@ Difficulty: Hard
/obj/effect/temp_visual/hierophant/wall //smoothing and pooling were not friends, but pooling is dead.
name = "vortex wall"
- icon = 'icons/turf/walls/hierophant_wall_temp.dmi'
+ icon = 'icons/turf/walls/legacy/hierophant_wall_temp.dmi'
icon_state = "hierophant_wall_temp-0"
base_icon_state = "hierophant_wall_temp"
smoothing_flags = SMOOTH_BITMASK
diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/wendigo.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/wendigo.dm
index 12d5c58a25b..4eaad55c0cc 100644
--- a/code/modules/mob/living/simple_animal/hostile/megafauna/wendigo.dm
+++ b/code/modules/mob/living/simple_animal/hostile/megafauna/wendigo.dm
@@ -89,7 +89,7 @@ Difficulty: Hard
/datum/action/innate/megafauna_attack/shockwave_scream
name = "Shockwave Scream"
- icon_icon = 'icons/turf/walls/wall.dmi'
+ icon_icon = 'icons/turf/walls/legacy/wall.dmi'
button_icon_state = "wall-0"
chosen_message = "You are now screeching, disorienting targets around you."
chosen_attack_num = 3
diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/elite.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/elite.dm
index b29de2f72bc..9b1a79a3d9f 100644
--- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/elite.dm
+++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/elite.dm
@@ -372,7 +372,7 @@ While using this makes the system rely on OnFire, it still gives options for tim
/obj/effect/temp_visual/elite_tumor_wall
name = "magic wall"
- icon = 'icons/turf/walls/hierophant_wall_temp.dmi'
+ icon = 'icons/turf/walls/legacy/hierophant_wall_temp.dmi'
icon_state = "hierophant_wall_temp-0"
base_icon_state = "hierophant_wall_temp"
smoothing_flags = SMOOTH_BITMASK
diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/frog.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/frog.dm
index 07399d35750..308b6722aeb 100644
--- a/code/modules/mob/living/simple_animal/hostile/retaliate/frog.dm
+++ b/code/modules/mob/living/simple_animal/hostile/retaliate/frog.dm
@@ -28,10 +28,8 @@
pass_flags = PASSTABLE | PASSGRILLE | PASSMOB
mob_size = MOB_SIZE_TINY
gold_core_spawnable = FRIENDLY_SPAWN
- can_be_held = TRUE
held_w_class = WEIGHT_CLASS_TINY
worn_slot_flags = ITEM_SLOT_HEAD
- head_icon = 'icons/mob/animal_item_head.dmi'
var/stepped_sound = 'sound/effects/huuu.ogg'
/mob/living/simple_animal/hostile/retaliate/frog/Initialize(mapload)
diff --git a/code/modules/mob/living/simple_animal/parrot.dm b/code/modules/mob/living/simple_animal/parrot.dm
index 2ddfcb99c98..185541eed9a 100644
--- a/code/modules/mob/living/simple_animal/parrot.dm
+++ b/code/modules/mob/living/simple_animal/parrot.dm
@@ -127,7 +127,7 @@
/mob/living/simple_animal/parrot/proc/toggle_mode,
/mob/living/simple_animal/parrot/proc/perch_mob_player))
- AddElement(/datum/element/strippable, GLOB.strippable_parrot_items)
+ AddElement(/datum/element/strippable, GLOB.strippable_parrot_items, /mob/living/.proc/should_strip)
AddElement(/datum/element/simple_flying)
/mob/living/simple_animal/parrot/examine(mob/user)
diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm
index d9ec4e9bb9e..3c4dd839d26 100644
--- a/code/modules/mob/mob.dm
+++ b/code/modules/mob/mob.dm
@@ -179,7 +179,7 @@
*
* Use for atoms performing visible actions
*
- * message is output to anyone who can see, e.g. `"The [src] does something!"`
+ * message is output to anyone who can see, e.g. `"[src] does something!"`
*
* Vars:
* * self_message (optional) is what the src mob sees e.g. "You do something!"
@@ -216,7 +216,7 @@
if(M.see_invisible < invisibility)//if src is invisible to M
msg = blind_message
msg_type = MSG_AUDIBLE
- else if(T != loc && T != src) //if src is inside something and not a turf.
+ else if((T != loc && T != src) && !ismobholder(loc)) //if src is inside something and not a turf.
if(M != loc) // Only give the blind message to hearers that aren't the location
msg = blind_message
msg_type = MSG_AUDIBLE
diff --git a/code/modules/modular_computers/hardware/hard_drive.dm b/code/modules/modular_computers/hardware/hard_drive.dm
index 2431b41f876..98b4d07aac9 100644
--- a/code/modules/modular_computers/hardware/hard_drive.dm
+++ b/code/modules/modular_computers/hardware/hard_drive.dm
@@ -175,6 +175,7 @@
store_file(new /datum/computer_file/program/messenger(src))
store_file(new /datum/computer_file/program/notepad(src))
+ store_file(new /datum/computer_file/program/crew_manifest(src))
// For borg integrated tablets. No downloader.
/obj/item/computer_hardware/hard_drive/small/integrated/install_default_programs()
@@ -186,6 +187,7 @@
store_file(new /datum/computer_file/program/computerconfig(src)) // Computer configuration utility, allows hardware control and displays more info than status bar
store_file(new /datum/computer_file/program/filemanager(src)) // File manager, allows text editor functions and basic file manipulation.
store_file(new /datum/computer_file/program/robotact(src))
+ store_file(new /datum/computer_file/program/crew_manifest(src))
var/datum/computer_file/program/messenger/messenger = new(src)
messenger.is_silicon = TRUE
store_file(messenger)
diff --git a/code/modules/power/apc/apc_main.dm b/code/modules/power/apc/apc_main.dm
index 16f92a1748a..8fa0dcb1f2f 100644
--- a/code/modules/power/apc/apc_main.dm
+++ b/code/modules/power/apc/apc_main.dm
@@ -263,6 +263,7 @@
"coverLocked" = coverlocked,
"siliconUser" = user.has_unlimited_silicon_privilege || user.using_power_flow_console(),
"malfStatus" = get_malf_status(user),
+ "mainLights" = area.lightswitch,
"emergencyLights" = !emergency_lights,
"nightshiftLights" = nightshift_lights,
@@ -307,9 +308,10 @@
. = UI_INTERACTIVE
/obj/machinery/power/apc/ui_act(action, params)
+ var/list/locked_actions = list("main_lights", "toggle_nightshift")
. = ..()
- if(. || !can_use(usr, 1) || (locked && !usr.has_unlimited_silicon_privilege && !failure_timer && action != "toggle_nightshift"))
+ if(. || !can_use(usr, 1) || (locked && !usr.has_unlimited_silicon_privilege && !failure_timer && !(action in locked_actions)))
return
switch(action)
if("lock")
@@ -366,6 +368,12 @@
failure_timer = 0
update_appearance()
update()
+ if("main_lights")
+ area.lightswitch = !area.lightswitch
+ area.power_change()
+ for(var/obj/machinery/light_switch/light_switch in area)
+ light_switch.update_appearance()
+ SEND_SIGNAL(light_switch, COMSIG_LIGHT_SWITCH_SET, area.lightswitch)
if("emergency_lighting")
emergency_lights = !emergency_lights
for(var/obj/machinery/light/L in area)
diff --git a/code/modules/research/designs/misc_designs.dm b/code/modules/research/designs/misc_designs.dm
index 89a9280a677..63b9b8e3ce7 100644
--- a/code/modules/research/designs/misc_designs.dm
+++ b/code/modules/research/designs/misc_designs.dm
@@ -415,7 +415,7 @@
build_type = PROTOLATHE | AWAY_LATHE
materials = list(/datum/material/iron = 1000)
reagents_list = list(/datum/reagent/acetone = 60)
- build_path = /obj/item/paint/paint_remover
+ build_path = /obj/item/paint_remover
category = list("Equipment")
departmental_flags = DEPARTMENTAL_FLAG_SERVICE
diff --git a/code/modules/surgery/bodyparts/species_parts/vox_bodyparts.dm b/code/modules/surgery/bodyparts/species_parts/vox_bodyparts.dm
index e84eabcfec1..cfc954dc94b 100644
--- a/code/modules/surgery/bodyparts/species_parts/vox_bodyparts.dm
+++ b/code/modules/surgery/bodyparts/species_parts/vox_bodyparts.dm
@@ -1,34 +1,70 @@
// voxs!
/obj/item/bodypart/head/vox
icon_greyscale = 'icons/mob/species/vox/bodyparts.dmi'
- bodytype = BODYTYPE_HUMANOID | BODYTYPE_ORGANIC | BODYTYPE_VOX
+ bodytype = BODYTYPE_HUMANOID | BODYTYPE_ORGANIC | BODYTYPE_VOX_BEAK
limb_id = SPECIES_VOX
is_dimorphic = TRUE
/obj/item/bodypart/chest/vox
icon_greyscale = 'icons/mob/species/vox/bodyparts.dmi'
- bodytype = BODYTYPE_HUMANOID | BODYTYPE_ORGANIC
+ bodytype = BODYTYPE_HUMANOID | BODYTYPE_ORGANIC | BODYTYPE_VOX_OTHER
limb_id = SPECIES_VOX
is_dimorphic = TRUE
/obj/item/bodypart/l_arm/vox
mutcolor_used = MUTCOLORS2
icon_greyscale = 'icons/mob/species/vox/bodyparts.dmi'
- bodytype = BODYTYPE_HUMANOID | BODYTYPE_ORGANIC
+ bodytype = BODYTYPE_HUMANOID | BODYTYPE_ORGANIC | BODYTYPE_VOX_OTHER
limb_id = SPECIES_VOX
/obj/item/bodypart/r_arm/vox
mutcolor_used = MUTCOLORS2
icon_greyscale = 'icons/mob/species/vox/bodyparts.dmi'
- bodytype = BODYTYPE_HUMANOID | BODYTYPE_ORGANIC
+ bodytype = BODYTYPE_HUMANOID | BODYTYPE_ORGANIC | BODYTYPE_VOX_OTHER
limb_id = SPECIES_VOX
-/obj/item/bodypart/l_leg/digitigrade/vox
+/obj/item/bodypart/l_leg/vox
mutcolor_used = MUTCOLORS2
+ bodytype = BODYTYPE_HUMANOID | BODYTYPE_ORGANIC | BODYTYPE_VOX_LEGS
icon_greyscale = 'icons/mob/species/vox/bodyparts.dmi'
- limb_id = SPECIES_VOX
+ limb_id = "digitigrade"
+
+/obj/item/bodypart/l_leg/vox/update_limb(dropping_limb = FALSE, is_creating = FALSE)
+ . = ..()
+ if(ishuman(owner))
+ var/mob/living/carbon/human/human_owner = owner
+ var/uniform_compatible = FALSE
+ var/suit_compatible = FALSE
+ if(!(human_owner.w_uniform) || (human_owner.w_uniform.supports_variations_flags & CLOTHING_VOX_VARIATION)) //Checks uniform compatibility
+ uniform_compatible = TRUE
+ if((!human_owner.wear_suit) || (human_owner.wear_suit.supports_variations_flags & CLOTHING_VOX_VARIATION) || !(human_owner.wear_suit.body_parts_covered & LEGS)) //Checks suit compatability
+ suit_compatible = TRUE
+
+ if((uniform_compatible && suit_compatible) || (suit_compatible && human_owner.wear_suit?.flags_inv & HIDEJUMPSUIT)) //If the uniform is hidden, it doesnt matter if its compatible
+ limb_id = "digitigrade"
+
+ else
+ limb_id = SPECIES_VOX
-/obj/item/bodypart/r_leg/digitigrade/vox
+/obj/item/bodypart/r_leg/vox
mutcolor_used = MUTCOLORS2
+ bodytype = BODYTYPE_HUMANOID | BODYTYPE_ORGANIC | BODYTYPE_VOX_LEGS
icon_greyscale = 'icons/mob/species/vox/bodyparts.dmi'
- limb_id = SPECIES_VOX
+ limb_id = "digitigrade"
+
+/obj/item/bodypart/r_leg/vox/update_limb(dropping_limb = FALSE, is_creating = FALSE)
+ . = ..()
+ if(ishuman(owner))
+ var/mob/living/carbon/human/human_owner = owner
+ var/uniform_compatible = FALSE
+ var/suit_compatible = FALSE
+ if(!(human_owner.w_uniform) || (human_owner.w_uniform.supports_variations_flags & CLOTHING_VOX_VARIATION)) //Checks uniform compatibility
+ uniform_compatible = TRUE
+ if((!human_owner.wear_suit) || (human_owner.wear_suit.supports_variations_flags & CLOTHING_VOX_VARIATION) || !(human_owner.wear_suit.body_parts_covered & LEGS)) //Checks suit compatability
+ suit_compatible = TRUE
+
+ if((uniform_compatible && suit_compatible) || (suit_compatible && human_owner.wear_suit?.flags_inv & HIDEJUMPSUIT)) //If the uniform is hidden, it doesnt matter if its compatible
+ limb_id = "digitigrade"
+
+ else
+ limb_id = SPECIES_VOX
diff --git a/code/modules/surgery/organs/external/_external_organs.dm b/code/modules/surgery/organs/external/_external_organs.dm
index 790272e4038..02cdcd516bd 100644
--- a/code/modules/surgery/organs/external/_external_organs.dm
+++ b/code/modules/surgery/organs/external/_external_organs.dm
@@ -493,8 +493,9 @@
var/mutable_appearance/tail_secondary = mutable_appearance(tail_primary.icon, "[tail_primary.icon_state]_secondary", layer = -image_layer)
var/mutable_appearance/tail_tertiary = mutable_appearance(tail_primary.icon, "[tail_primary.icon_state]_tertiary", layer = -image_layer)
- tail_secondary.color = owner.dna.features["mcolor2"]
- tail_tertiary.color = owner.dna.features["mcolor3"]
+ if(owner)
+ tail_secondary.color = owner.dna.features["mcolor2"]
+ tail_tertiary.color = owner.dna.features["mcolor3"]
overlay_list += tail_secondary
overlay_list += tail_tertiary
diff --git a/code/modules/unit_tests/_unit_tests.dm b/code/modules/unit_tests/_unit_tests.dm
index cbd6e3777ba..5c4080947dd 100644
--- a/code/modules/unit_tests/_unit_tests.dm
+++ b/code/modules/unit_tests/_unit_tests.dm
@@ -93,6 +93,7 @@
#include "emoting.dm"
#include "food_edibility_check.dm"
#include "gas_transfer.dm"
+#include "get_turf_pixel.dm"
#include "greyscale_config.dm"
#include "heretic_knowledge.dm"
#include "heretic_rituals.dm"
diff --git a/code/modules/unit_tests/create_and_destroy.dm b/code/modules/unit_tests/create_and_destroy.dm
index c47aeba0345..48ca520388c 100644
--- a/code/modules/unit_tests/create_and_destroy.dm
+++ b/code/modules/unit_tests/create_and_destroy.dm
@@ -85,7 +85,7 @@
//Needs a linked mecha
ignore += typesof(/obj/effect/skyfall_landingzone)
//Expects a mob to holderize, we have nothing to give
- ignore += typesof(/obj/item/clothing/head/mob_holder)
+ ignore += typesof(/obj/item/mob_holder)
//Needs cards passed into the initilazation args
ignore += typesof(/obj/item/toy/cards/cardhand)
//Needs a holodeck area linked to it which is not guarenteed to exist and technically is supposed to have a 1:1 relationship with computer anyway.
diff --git a/code/modules/unit_tests/get_turf_pixel.dm b/code/modules/unit_tests/get_turf_pixel.dm
new file mode 100644
index 00000000000..8cd292d3b6c
--- /dev/null
+++ b/code/modules/unit_tests/get_turf_pixel.dm
@@ -0,0 +1,11 @@
+///ensures that get_turf_pixel() returns turfs within the bounds of the map,
+///even when called on a movable with its sprite out of bounds
+/datum/unit_test/get_turf_pixel
+
+/datum/unit_test/get_turf_pixel/Run()
+ //we need long larry to peek over the top edge of the earth
+ var/turf/north = locate(1, world.maxy, run_loc_floor_bottom_left.z)
+
+ //hes really long, so hes really good at peaking over the edge of the map
+ var/mob/living/simple_animal/hostile/megafauna/colossus/long_larry = allocate(/mob/living/simple_animal/hostile/megafauna/colossus, north)
+ TEST_ASSERT(istype(get_turf_pixel(long_larry), /turf), "get_turf_pixel() isnt clamping a mob whos sprite is above the bounds of the world inside of the map.")
diff --git a/code/modules/uplink/uplink_items/stealthy_tools.dm b/code/modules/uplink/uplink_items/stealthy_tools.dm
index 1415d30b0a6..a33ec6941e6 100644
--- a/code/modules/uplink/uplink_items/stealthy_tools.dm
+++ b/code/modules/uplink/uplink_items/stealthy_tools.dm
@@ -18,6 +18,14 @@
item = /obj/item/card/id/advanced/chameleon
cost = 2
+/datum/uplink_item/stealthy_tools/agent_card_advanced
+ name = "Advanced Agent Identification Card"
+ desc = "Created by Cybersun Industries to be the ultimate for field operations, this upgraded Agent ID \
+ comes with all the fluff of the original, but with an upgraded microchip - allowing for the storage of all \
+ standard Nanotrasen access codes in one conveinent package. Now in glossy black by default!"
+ item = /obj/item/card/id/advanced/chameleon/black
+ cost = 5
+
/datum/uplink_item/stealthy_tools/ai_detector
name = "Artificial Intelligence Detector"
desc = "A functional multitool that turns red when it detects an artificial intelligence watching it, and can be \
diff --git a/code/modules/vending/wardrobes.dm b/code/modules/vending/wardrobes.dm
index a4ce8ca2e83..fc144376980 100644
--- a/code/modules/vending/wardrobes.dm
+++ b/code/modules/vending/wardrobes.dm
@@ -322,7 +322,7 @@
/obj/item/clothing/head/soft/purple = 2,
/obj/item/clothing/mask/bandana/color/purple = 2,
/obj/item/pushbroom = 2,
- /obj/item/paint/paint_remover = 2,
+ /obj/item/paint_remover = 2,
/obj/item/melee/flyswatter = 2,
/obj/item/flashlight = 2,
/obj/item/clothing/suit/caution = 6,
diff --git a/code/modules/vending/youtool.dm b/code/modules/vending/youtool.dm
index 576ec656a8c..79a9ba1d5a5 100644
--- a/code/modules/vending/youtool.dm
+++ b/code/modules/vending/youtool.dm
@@ -17,7 +17,8 @@
/obj/item/flashlight/glowstick = 3,
/obj/item/flashlight/glowstick/red = 3,
/obj/item/flashlight = 5,
- /obj/item/clothing/ears/earmuffs = 1
+ /obj/item/clothing/ears/earmuffs = 1,
+ /obj/item/paint/anycolor = 5
)
contraband = list(
/obj/item/clothing/gloves/color/fyellow = 2
diff --git a/html/changelogs/AutoChangeLog-pr-65038.yml b/html/changelogs/AutoChangeLog-pr-65038.yml
deleted file mode 100644
index fea645863c3..00000000000
--- a/html/changelogs/AutoChangeLog-pr-65038.yml
+++ /dev/null
@@ -1,8 +0,0 @@
-author: "ArcaneMusic ft. sprites by Kryson"
-delete-after: True
-changes:
- - rscadd: "Newscasters have been moved over to TGUI, and with them several new features."
- - expansion: "Newscaster channels can now be given channel descriptions!"
- - expansion: "Messages can now be censored by crew with brig access from any console."
- - rscdel: "Standalone bounty boards have been replaced with newscasters, as the two have been merged."
- - refactor: "Bounty boards and newscaster code have been refactored in order to merge the two pieces of content."
diff --git a/html/changelogs/AutoChangeLog-pr-65466.yml b/html/changelogs/AutoChangeLog-pr-65466.yml
deleted file mode 100644
index 49c1b4a9f71..00000000000
--- a/html/changelogs/AutoChangeLog-pr-65466.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-author: "SuperNovaa41"
-delete-after: True
-changes:
- - bugfix: "Fixes nonhuman head of departments showing up as their original species in security records."
diff --git a/html/changelogs/AutoChangeLog-pr-65473.yml b/html/changelogs/AutoChangeLog-pr-65473.yml
deleted file mode 100644
index b2714e3e6e1..00000000000
--- a/html/changelogs/AutoChangeLog-pr-65473.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-author: "cacogen"
-delete-after: True
-changes:
- - expansion: "Can fire guns and secondary attack (right-click) with TK. Throwing things with TK now requires throw mode."
diff --git a/html/changelogs/AutoChangeLog-pr-65496.yml b/html/changelogs/AutoChangeLog-pr-65496.yml
deleted file mode 100644
index 2a3e03d32c2..00000000000
--- a/html/changelogs/AutoChangeLog-pr-65496.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-author: "GoblinBackwards"
-delete-after: True
-changes:
- - bugfix: "Fixed airlocks and windoors not being able to be attacked by melee weapons in combat mode."
diff --git a/html/changelogs/AutoChangeLog-pr-65594.yml b/html/changelogs/AutoChangeLog-pr-65594.yml
deleted file mode 100644
index 06c8770dfc9..00000000000
--- a/html/changelogs/AutoChangeLog-pr-65594.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-author: "Jolly"
-delete-after: True
-changes:
- - bugfix: "SnowCabin.dmm had its active turfs rectified."
diff --git a/html/changelogs/AutoChangeLog-pr-65615.yml b/html/changelogs/AutoChangeLog-pr-65615.yml
deleted file mode 100644
index 1b8329c0c85..00000000000
--- a/html/changelogs/AutoChangeLog-pr-65615.yml
+++ /dev/null
@@ -1,6 +0,0 @@
-author: "dragomagol"
-delete-after: True
-changes:
- - bugfix: "The chairs on the casino shuttle are now facing the proper directions"
- - bugfix: "The Zeta shuttle brig now uses the brig shuttle area"
- - qol: "Shuttle doors that previously had varedited accesses now use preset access helpers"
diff --git a/html/changelogs/AutoChangeLog-pr-65619.yml b/html/changelogs/AutoChangeLog-pr-65619.yml
deleted file mode 100644
index b64ce7a9eb8..00000000000
--- a/html/changelogs/AutoChangeLog-pr-65619.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-author: "nianjiilical"
-delete-after: True
-changes:
- - balance: "Sentient Diseases now require a minimum playercount of 25 to activate, up from 10."
diff --git a/html/changelogs/AutoChangeLog-pr-65633.yml b/html/changelogs/AutoChangeLog-pr-65633.yml
deleted file mode 100644
index d8abab9f79e..00000000000
--- a/html/changelogs/AutoChangeLog-pr-65633.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-author: "Maurukas"
-delete-after: True
-changes:
- - bugfix: "The engineering console on Icebox is once again connected to the station's grid and can see APC status and available power."
diff --git a/html/changelogs/AutoChangeLog-pr-65637.yml b/html/changelogs/AutoChangeLog-pr-65637.yml
deleted file mode 100644
index 23cfcd7c763..00000000000
--- a/html/changelogs/AutoChangeLog-pr-65637.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-author: "Rhials"
-delete-after: True
-changes:
- - rscadd: "Added command encryption keys to the cargo order console"
diff --git a/html/changelogs/AutoChangeLog-pr-65641.yml b/html/changelogs/AutoChangeLog-pr-65641.yml
deleted file mode 100644
index aaedcfb7c1a..00000000000
--- a/html/changelogs/AutoChangeLog-pr-65641.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-author: "Watermelon914"
-delete-after: True
-changes:
- - balance: "Destroy the Blackbox is now worth 6-9 TC instead of 4 TC"
diff --git a/html/changelogs/AutoChangeLog-pr-65651.yml b/html/changelogs/AutoChangeLog-pr-65651.yml
deleted file mode 100644
index a8f57fbf1b7..00000000000
--- a/html/changelogs/AutoChangeLog-pr-65651.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-author: "san7890"
-delete-after: True
-changes:
- - bugfix: "If you were a prisoner on KiloStation and you noticed some abnormally dark rocks, I hope you are pleased to know that they have been brightened up. No compensation is offered."
diff --git a/html/changelogs/AutoChangeLog-pr-65659.yml b/html/changelogs/AutoChangeLog-pr-65659.yml
deleted file mode 100644
index b12ff67947b..00000000000
--- a/html/changelogs/AutoChangeLog-pr-65659.yml
+++ /dev/null
@@ -1,6 +0,0 @@
-author: "cacogen"
-delete-after: True
-changes:
- - bugfix: "You can no longer offer things to yourself, choosing instead to take them directly"
- - bugfix: "Can no longer headpat mobs without heads"
- - expansion: "Adds screentips for headpatting, hugging and tail pulling"
diff --git a/html/changelogs/AutoChangeLog-pr-65662.yml b/html/changelogs/AutoChangeLog-pr-65662.yml
deleted file mode 100644
index 2fd38aea341..00000000000
--- a/html/changelogs/AutoChangeLog-pr-65662.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-author: "OperativeLyn"
-delete-after: True
-changes:
- - bugfix: "IceBox had two washing machines on the same tile, as well as a bit brighter than usual decals. That tile is back to normal."
diff --git a/html/changelogs/AutoChangeLog-pr-65667.yml b/html/changelogs/AutoChangeLog-pr-65667.yml
deleted file mode 100644
index 23b44f026b5..00000000000
--- a/html/changelogs/AutoChangeLog-pr-65667.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-author: "GoblinBackwards"
-delete-after: True
-changes:
- - bugfix: "Fixed stray syndicate supply pods not containing any items."
diff --git a/html/changelogs/AutoChangeLog-pr-65671.yml b/html/changelogs/AutoChangeLog-pr-65671.yml
deleted file mode 100644
index 0e6ebe53e2c..00000000000
--- a/html/changelogs/AutoChangeLog-pr-65671.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-author: "LemonInTheDark"
-delete-after: True
-changes:
- - bugfix: "The latejoin menu will now properly close when you join the game"
diff --git a/html/changelogs/AutoChangeLog-pr-65675.yml b/html/changelogs/AutoChangeLog-pr-65675.yml
deleted file mode 100644
index a9343dde82e..00000000000
--- a/html/changelogs/AutoChangeLog-pr-65675.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-author: "vincentiusvin"
-delete-after: True
-changes:
- - spellcheck: "made the reaction list on a few machines' ui (compressor, atmos control) to be newlined."
diff --git a/html/changelogs/archive/2022-06.yml b/html/changelogs/archive/2022-06.yml
new file mode 100644
index 00000000000..c5322166cd6
--- /dev/null
+++ b/html/changelogs/archive/2022-06.yml
@@ -0,0 +1,52 @@
+2022-06-10:
+ ArcaneMusic ft. sprites by Kryson:
+ - rscadd: Newscasters have been moved over to TGUI, and with them several new features.
+ - expansion: Newscaster channels can now be given channel descriptions!
+ - expansion: Messages can now be censored by crew with brig access from any console.
+ - rscdel: Standalone bounty boards have been replaced with newscasters, as the two
+ have been merged.
+ - refactor: Bounty boards and newscaster code have been refactored in order to merge
+ the two pieces of content.
+ GoblinBackwards:
+ - bugfix: Fixed stray syndicate supply pods not containing any items.
+ - bugfix: Fixed airlocks and windoors not being able to be attacked by melee weapons
+ in combat mode.
+ Jolly:
+ - bugfix: SnowCabin.dmm had its active turfs rectified.
+ LemonInTheDark:
+ - bugfix: The latejoin menu will now properly close when you join the game
+ Maurukas:
+ - bugfix: The engineering console on Icebox is once again connected to the station's
+ grid and can see APC status and available power.
+ OperativeLyn:
+ - bugfix: IceBox had two washing machines on the same tile, as well as a bit brighter
+ than usual decals. That tile is back to normal.
+ Rhials:
+ - rscadd: Added command encryption keys to the cargo order console
+ SuperNovaa41:
+ - bugfix: Fixes nonhuman head of departments showing up as their original species
+ in security records.
+ Watermelon914:
+ - balance: Destroy the Blackbox is now worth 6-9 TC instead of 4 TC
+ cacogen:
+ - bugfix: You can no longer offer things to yourself, choosing instead to take them
+ directly
+ - bugfix: Can no longer headpat mobs without heads
+ - expansion: Adds screentips for headpatting, hugging and tail pulling
+ - expansion: Can fire guns and secondary attack (right-click) with TK. Throwing
+ things with TK now requires throw mode.
+ dragomagol:
+ - bugfix: The chairs on the casino shuttle are now facing the proper directions
+ - bugfix: The Zeta shuttle brig now uses the brig shuttle area
+ - qol: Shuttle doors that previously had varedited accesses now use preset access
+ helpers
+ nianjiilical:
+ - balance: Sentient Diseases now require a minimum playercount of 25 to activate,
+ up from 10.
+ san7890:
+ - bugfix: If you were a prisoner on KiloStation and you noticed some abnormally
+ dark rocks, I hope you are pleased to know that they have been brightened up.
+ No compensation is offered.
+ vincentiusvin:
+ - spellcheck: made the reaction list on a few machines' ui (compressor, atmos control)
+ to be newlined.
diff --git a/icons/effects/paint_helpers.dmi b/icons/effects/paint_helpers.dmi
new file mode 100644
index 00000000000..11a198fd710
Binary files /dev/null and b/icons/effects/paint_helpers.dmi differ
diff --git a/icons/mob/animal_item_head.dmi b/icons/mob/animal_item_head.dmi
deleted file mode 100644
index 74621ba0e80..00000000000
Binary files a/icons/mob/animal_item_head.dmi and /dev/null differ
diff --git a/icons/mob/clothing/species/vox/feet.dmi b/icons/mob/clothing/species/vox/feet.dmi
index f7c0c79434b..194bf615787 100644
Binary files a/icons/mob/clothing/species/vox/feet.dmi and b/icons/mob/clothing/species/vox/feet.dmi differ
diff --git a/icons/mob/pai_item_head.dmi b/icons/mob/pai_item_head.dmi
index 337e22254ea..3f8ffc2e2d5 100644
Binary files a/icons/mob/pai_item_head.dmi and b/icons/mob/pai_item_head.dmi differ
diff --git a/icons/mob/pets_held.dmi b/icons/mob/pets_held.dmi
index 1a8d30b6abf..a645863d9e7 100644
Binary files a/icons/mob/pets_held.dmi and b/icons/mob/pets_held.dmi differ
diff --git a/icons/obj/clockwork_objects.dmi b/icons/obj/clockwork_objects.dmi
new file mode 100644
index 00000000000..b867ddafc14
Binary files /dev/null and b/icons/obj/clockwork_objects.dmi differ
diff --git a/icons/obj/power.dmi b/icons/obj/power.dmi
index 2cb18e04db3..7888c60f41e 100644
Binary files a/icons/obj/power.dmi and b/icons/obj/power.dmi differ
diff --git a/icons/obj/smooth_structures/grille.dmi b/icons/obj/smooth_structures/grille.dmi
new file mode 100644
index 00000000000..33d63084ecd
Binary files /dev/null and b/icons/obj/smooth_structures/grille.dmi differ
diff --git a/icons/obj/smooth_structures/low_wall.dmi b/icons/obj/smooth_structures/low_wall.dmi
new file mode 100644
index 00000000000..bf468aa6699
Binary files /dev/null and b/icons/obj/smooth_structures/low_wall.dmi differ
diff --git a/icons/obj/smooth_structures/window.dmi b/icons/obj/smooth_structures/window.dmi
index 4b78390251e..10553b3a17b 100644
Binary files a/icons/obj/smooth_structures/window.dmi and b/icons/obj/smooth_structures/window.dmi differ
diff --git a/icons/obj/smooth_structures/window_reinforced.dmi b/icons/obj/smooth_structures/window_reinforced.dmi
new file mode 100644
index 00000000000..26824d02da5
Binary files /dev/null and b/icons/obj/smooth_structures/window_reinforced.dmi differ
diff --git a/icons/turf/rust_overlay.dmi b/icons/turf/rust_overlay.dmi
new file mode 100644
index 00000000000..d0aea195a33
Binary files /dev/null and b/icons/turf/rust_overlay.dmi differ
diff --git a/icons/turf/walls/bamboo_wall.dmi b/icons/turf/walls/bamboo_wall.dmi
deleted file mode 100644
index 4eafc79ad48..00000000000
Binary files a/icons/turf/walls/bamboo_wall.dmi and /dev/null differ
diff --git a/icons/turf/walls/bananium_wall.dmi b/icons/turf/walls/bananium_wall.dmi
deleted file mode 100644
index abf70635337..00000000000
Binary files a/icons/turf/walls/bananium_wall.dmi and /dev/null differ
diff --git a/icons/turf/walls/clockwork_wall.dmi b/icons/turf/walls/clockwork_wall.dmi
deleted file mode 100644
index d6f1872d7c0..00000000000
Binary files a/icons/turf/walls/clockwork_wall.dmi and /dev/null differ
diff --git a/icons/turf/walls/cult_wall.dmi b/icons/turf/walls/cult_wall.dmi
index 4990c4474ff..14051316c53 100644
Binary files a/icons/turf/walls/cult_wall.dmi and b/icons/turf/walls/cult_wall.dmi differ
diff --git a/icons/turf/walls/decon_states.dmi b/icons/turf/walls/decon_states.dmi
new file mode 100644
index 00000000000..76c19f05d8b
Binary files /dev/null and b/icons/turf/walls/decon_states.dmi differ
diff --git a/icons/turf/walls/diamond_wall.dmi b/icons/turf/walls/diamond_wall.dmi
deleted file mode 100644
index 1dd44ba283f..00000000000
Binary files a/icons/turf/walls/diamond_wall.dmi and /dev/null differ
diff --git a/icons/turf/walls/gold_wall.dmi b/icons/turf/walls/gold_wall.dmi
deleted file mode 100644
index 7012124c271..00000000000
Binary files a/icons/turf/walls/gold_wall.dmi and /dev/null differ
diff --git a/icons/turf/walls/icedmetal_wall.dmi b/icons/turf/walls/icedmetal_wall.dmi
deleted file mode 100644
index b069da4394d..00000000000
Binary files a/icons/turf/walls/icedmetal_wall.dmi and /dev/null differ
diff --git a/icons/turf/walls/abductor_wall.dmi b/icons/turf/walls/legacy/abductor_wall.dmi
similarity index 100%
rename from icons/turf/walls/abductor_wall.dmi
rename to icons/turf/walls/legacy/abductor_wall.dmi
diff --git a/icons/turf/walls/boss_wall.dmi b/icons/turf/walls/legacy/boss_wall.dmi
similarity index 100%
rename from icons/turf/walls/boss_wall.dmi
rename to icons/turf/walls/legacy/boss_wall.dmi
diff --git a/icons/turf/walls/legacy/cult_wall.dmi b/icons/turf/walls/legacy/cult_wall.dmi
new file mode 100644
index 00000000000..4990c4474ff
Binary files /dev/null and b/icons/turf/walls/legacy/cult_wall.dmi differ
diff --git a/icons/turf/walls/hierophant_wall.dmi b/icons/turf/walls/legacy/hierophant_wall.dmi
similarity index 100%
rename from icons/turf/walls/hierophant_wall.dmi
rename to icons/turf/walls/legacy/hierophant_wall.dmi
diff --git a/icons/turf/walls/hierophant_wall_temp.dmi b/icons/turf/walls/legacy/hierophant_wall_temp.dmi
similarity index 100%
rename from icons/turf/walls/hierophant_wall_temp.dmi
rename to icons/turf/walls/legacy/hierophant_wall_temp.dmi
diff --git a/icons/turf/walls/icerock_wall.dmi b/icons/turf/walls/legacy/icerock_wall.dmi
similarity index 100%
rename from icons/turf/walls/icerock_wall.dmi
rename to icons/turf/walls/legacy/icerock_wall.dmi
diff --git a/icons/turf/walls/iron_wall.dmi b/icons/turf/walls/legacy/iron_wall.dmi
similarity index 100%
rename from icons/turf/walls/iron_wall.dmi
rename to icons/turf/walls/legacy/iron_wall.dmi
diff --git a/icons/turf/walls/mountain_wall.dmi b/icons/turf/walls/legacy/mountain_wall.dmi
similarity index 100%
rename from icons/turf/walls/mountain_wall.dmi
rename to icons/turf/walls/legacy/mountain_wall.dmi
diff --git a/icons/turf/walls/plastinum_wall.dmi b/icons/turf/walls/legacy/plastinum_wall.dmi
similarity index 100%
rename from icons/turf/walls/plastinum_wall.dmi
rename to icons/turf/walls/legacy/plastinum_wall.dmi
diff --git a/icons/turf/walls/plastitanium_wall.dmi b/icons/turf/walls/legacy/plastitanium_wall.dmi
similarity index 100%
rename from icons/turf/walls/plastitanium_wall.dmi
rename to icons/turf/walls/legacy/plastitanium_wall.dmi
diff --git a/icons/turf/walls/legacy/red_wall.dmi b/icons/turf/walls/legacy/red_wall.dmi
new file mode 100644
index 00000000000..91ef6219344
Binary files /dev/null and b/icons/turf/walls/legacy/red_wall.dmi differ
diff --git a/icons/turf/walls/reinforced_rock.dmi b/icons/turf/walls/legacy/reinforced_rock.dmi
similarity index 100%
rename from icons/turf/walls/reinforced_rock.dmi
rename to icons/turf/walls/legacy/reinforced_rock.dmi
diff --git a/icons/turf/walls/legacy/reinforced_wall.dmi b/icons/turf/walls/legacy/reinforced_wall.dmi
new file mode 100644
index 00000000000..c7b05315d50
Binary files /dev/null and b/icons/turf/walls/legacy/reinforced_wall.dmi differ
diff --git a/icons/turf/walls/riveted.dmi b/icons/turf/walls/legacy/riveted.dmi
similarity index 100%
rename from icons/turf/walls/riveted.dmi
rename to icons/turf/walls/legacy/riveted.dmi
diff --git a/icons/turf/walls/rock_wall.dmi b/icons/turf/walls/legacy/rock_wall.dmi
similarity index 100%
rename from icons/turf/walls/rock_wall.dmi
rename to icons/turf/walls/legacy/rock_wall.dmi
diff --git a/icons/turf/walls/sandstone_wall.dmi b/icons/turf/walls/legacy/sandstone_wall.dmi
similarity index 100%
rename from icons/turf/walls/sandstone_wall.dmi
rename to icons/turf/walls/legacy/sandstone_wall.dmi
diff --git a/icons/turf/walls/uranium_wall.dmi b/icons/turf/walls/legacy/uranium_wall.dmi
similarity index 100%
rename from icons/turf/walls/uranium_wall.dmi
rename to icons/turf/walls/legacy/uranium_wall.dmi
diff --git a/icons/turf/walls/legacy/wall.dmi b/icons/turf/walls/legacy/wall.dmi
new file mode 100644
index 00000000000..651227fe8de
Binary files /dev/null and b/icons/turf/walls/legacy/wall.dmi differ
diff --git a/icons/turf/walls/legacy/wood_wall.dmi b/icons/turf/walls/legacy/wood_wall.dmi
new file mode 100644
index 00000000000..60b785c5030
Binary files /dev/null and b/icons/turf/walls/legacy/wood_wall.dmi differ
diff --git a/icons/turf/walls/materialwall.dmi b/icons/turf/walls/materialwall.dmi
deleted file mode 100644
index 1027effda94..00000000000
Binary files a/icons/turf/walls/materialwall.dmi and /dev/null differ
diff --git a/icons/turf/walls/metal_wall.dmi b/icons/turf/walls/metal_wall.dmi
new file mode 100644
index 00000000000..2ce2964513d
Binary files /dev/null and b/icons/turf/walls/metal_wall.dmi differ
diff --git a/icons/turf/walls/neighbor_stripe.dmi b/icons/turf/walls/neighbor_stripe.dmi
new file mode 100644
index 00000000000..45a8e0e4179
Binary files /dev/null and b/icons/turf/walls/neighbor_stripe.dmi differ
diff --git a/icons/turf/walls/plasma_wall.dmi b/icons/turf/walls/plasma_wall.dmi
deleted file mode 100644
index c2f10843c6d..00000000000
Binary files a/icons/turf/walls/plasma_wall.dmi and /dev/null differ
diff --git a/icons/turf/walls/red_wall.dmi b/icons/turf/walls/red_wall.dmi
deleted file mode 100644
index 5eb26cf6a30..00000000000
Binary files a/icons/turf/walls/red_wall.dmi and /dev/null differ
diff --git a/icons/turf/walls/reinforced_wall.dmi b/icons/turf/walls/reinforced_wall.dmi
deleted file mode 100644
index 9f10b2bc427..00000000000
Binary files a/icons/turf/walls/reinforced_wall.dmi and /dev/null differ
diff --git a/icons/turf/walls/rusty_reinforced_wall.dmi b/icons/turf/walls/rusty_reinforced_wall.dmi
deleted file mode 100644
index e2636950d27..00000000000
Binary files a/icons/turf/walls/rusty_reinforced_wall.dmi and /dev/null differ
diff --git a/icons/turf/walls/rusty_wall.dmi b/icons/turf/walls/rusty_wall.dmi
deleted file mode 100644
index ca27a10fe07..00000000000
Binary files a/icons/turf/walls/rusty_wall.dmi and /dev/null differ
diff --git a/icons/turf/walls/shuttle_wall.dmi b/icons/turf/walls/shuttle_wall.dmi
deleted file mode 100644
index c96b087f77f..00000000000
Binary files a/icons/turf/walls/shuttle_wall.dmi and /dev/null differ
diff --git a/icons/turf/walls/silver_wall.dmi b/icons/turf/walls/silver_wall.dmi
deleted file mode 100644
index f0f170fdfe3..00000000000
Binary files a/icons/turf/walls/silver_wall.dmi and /dev/null differ
diff --git a/icons/turf/walls/snow_wall.dmi b/icons/turf/walls/snow_wall.dmi
deleted file mode 100644
index 833f7245e46..00000000000
Binary files a/icons/turf/walls/snow_wall.dmi and /dev/null differ
diff --git a/icons/turf/walls/solid_wall.dmi b/icons/turf/walls/solid_wall.dmi
new file mode 100644
index 00000000000..cb68120cc26
Binary files /dev/null and b/icons/turf/walls/solid_wall.dmi differ
diff --git a/icons/turf/walls/solid_wall_reinforced.dmi b/icons/turf/walls/solid_wall_reinforced.dmi
new file mode 100644
index 00000000000..d92d558c3bd
Binary files /dev/null and b/icons/turf/walls/solid_wall_reinforced.dmi differ
diff --git a/icons/turf/walls/stone_wall.dmi b/icons/turf/walls/stone_wall.dmi
new file mode 100644
index 00000000000..5e2e4da98c1
Binary files /dev/null and b/icons/turf/walls/stone_wall.dmi differ
diff --git a/icons/turf/walls/survival_pod_walls.dmi b/icons/turf/walls/survival_pod_walls.dmi
deleted file mode 100644
index 01700f1ed6f..00000000000
Binary files a/icons/turf/walls/survival_pod_walls.dmi and /dev/null differ
diff --git a/icons/turf/walls/wall.dmi b/icons/turf/walls/wall.dmi
deleted file mode 100644
index fd48b11b9b1..00000000000
Binary files a/icons/turf/walls/wall.dmi and /dev/null differ
diff --git a/icons/turf/walls/wall_stripe.dmi b/icons/turf/walls/wall_stripe.dmi
new file mode 100644
index 00000000000..6da8aa92293
Binary files /dev/null and b/icons/turf/walls/wall_stripe.dmi differ
diff --git a/icons/turf/walls/wood_wall.dmi b/icons/turf/walls/wood_wall.dmi
index 60b785c5030..c72f87d282c 100644
Binary files a/icons/turf/walls/wood_wall.dmi and b/icons/turf/walls/wood_wall.dmi differ
diff --git a/icons/turf/walls/wood_wall_stripe.dmi b/icons/turf/walls/wood_wall_stripe.dmi
new file mode 100644
index 00000000000..e539322de7c
Binary files /dev/null and b/icons/turf/walls/wood_wall_stripe.dmi differ
diff --git a/modular_pariah/modules/GAGS/greyscale_configs.dm b/modular_pariah/modules/GAGS/greyscale_configs.dm
index 3ace0280fb0..b4a15a3917a 100644
--- a/modular_pariah/modules/GAGS/greyscale_configs.dm
+++ b/modular_pariah/modules/GAGS/greyscale_configs.dm
@@ -30,146 +30,10 @@
name = "Beret With Fancy Badge Worn"
json_config = 'modular_pariah/modules/GAGS/json_configs/beret/beret_badge_fancy_worn.json'
-//MUSHROOM CAP
-
-/datum/greyscale_config/mushcap
- name = "Mushroom Cap"
- icon_file = 'modular_pariah/modules/GAGS/icons/mushcap.dmi'
- json_config = 'modular_pariah/modules/GAGS/json_configs/mush_cap/mushcap.json'
-
-/datum/greyscale_config/mushcap/worn
- name = "Mushroom Cap Worn"
- json_config = 'modular_pariah/modules/GAGS/json_configs/mush_cap/mushcap_worn.json'
-
-// FLATCAP
-
-/datum/greyscale_config/flatcap
- name = "Flat Cap"
- icon_file = 'modular_pariah/modules/GAGS/icons/hats.dmi'
- json_config = 'modular_pariah/modules/GAGS/json_configs/flatcap/flatcap.json'
-
-/datum/greyscale_config/flatcap/worn
- name = "Flat Cap (Worn)"
- icon_file = 'modular_pariah/modules/GAGS/icons/hats.dmi'
- json_config = 'modular_pariah/modules/GAGS/json_configs/flatcap/flatcap_worn.json'
-
-// FLOWER PIN
-
-/datum/greyscale_config/flowerpin
- name = "Flower Pin"
- icon_file = 'modular_pariah/modules/GAGS/icons/hats.dmi'
- json_config = 'modular_pariah/modules/GAGS/json_configs/flowerpin/flowerpin.json'
-
-/datum/greyscale_config/flowerpin/worn
- name = "Flower Pin (Worn)"
- icon_file = 'modular_pariah/modules/GAGS/icons/hats.dmi'
- json_config = 'modular_pariah/modules/GAGS/json_configs/flowerpin/flowerpin_worn.json'
-
-/*
-* MASKS
-*/
-
-// CLOWN
-/datum/greyscale_config/clown_mask
- name = "Colourable Clown Mask"
- icon_file = 'modular_pariah/modules/GAGS/icons/clown_mask.dmi'
- json_config = 'modular_pariah/modules/GAGS/json_configs/clown_mask/clown_mask.json'
-
-/datum/greyscale_config/clown_mask/worn
- name = "Colourable Clown Mask (Worn)"
- json_config = 'modular_pariah/modules/GAGS/json_configs/clown_mask/clown_mask_worn.json'
-
-
-/*
-* NECK
-*/
-
-// RANGER PONCHO
-/datum/greyscale_config/ranger_poncho
- name = "Ranger Poncho"
- icon_file = 'modular_pariah/modules/GAGS/icons/ranger_poncho.dmi'
- json_config = 'modular_pariah/modules/GAGS/json_configs/ranger_poncho/ranger_poncho.json'
-
-/datum/greyscale_config/ranger_poncho/worn
- name = "Ranger Poncho Worn"
- json_config = 'modular_pariah/modules/GAGS/json_configs/ranger_poncho/ranger_poncho_worn.json'
-
-// CLOAKS
-/datum/greyscale_config/cloak
- name = "Cloak"
- icon_file = 'modular_pariah/modules/GAGS/icons/cloak.dmi'
- json_config = 'modular_pariah/modules/GAGS/json_configs/cloak/cloak.json'
-
-/datum/greyscale_config/cloak/worn
- name = "Cloak Worn"
- json_config = 'modular_pariah/modules/GAGS/json_configs/cloak/cloak_worn.json'
-
-/datum/greyscale_config/cloak/veil
- name = "Veil"
- json_config = 'modular_pariah/modules/GAGS/json_configs/cloak/veil.json'
-
-/datum/greyscale_config/cloak/veil/worn
- name = "Veil Worn"
- json_config = 'modular_pariah/modules/GAGS/json_configs/cloak/veil_worn.json'
-
-/datum/greyscale_config/cloak/boat
- name = "Boatcloak"
- json_config = 'modular_pariah/modules/GAGS/json_configs/cloak/boat.json'
-
-/datum/greyscale_config/cloak/boat/worn
- name = "Boatcloak Worn"
- json_config = 'modular_pariah/modules/GAGS/json_configs/cloak/boat_worn.json'
-
-/datum/greyscale_config/cloak/shroud
- name = "Shroud"
- json_config = 'modular_pariah/modules/GAGS/json_configs/cloak/shroud.json'
-
-/datum/greyscale_config/cloak/shroud/worn
- name = "Shroud Worn"
- json_config = 'modular_pariah/modules/GAGS/json_configs/cloak/shroud_worn.json'
-
/*
* SUITS
*/
-// FANCY SUITS
-/datum/greyscale_config/fancy_suit
- name = "Fancy Suit"
- icon_file = 'modular_pariah/modules/GAGS/icons/fancy_suits.dmi'
- json_config = 'modular_pariah/modules/GAGS/json_configs/fancy_suits/fancy_suit.json'
-
-/datum/greyscale_config/fancy_suit/worn
- name = "Fancy Suit Worn"
- json_config = 'modular_pariah/modules/GAGS/json_configs/fancy_suits/fancy_suit_worn.json'
-
-// HOODIES
-/datum/greyscale_config/hoodie
- name = "Hoodie"
- icon_file = 'modular_pariah/modules/GAGS/icons/hoodie.dmi'
- json_config = 'modular_pariah/modules/GAGS/json_configs/hoodie/hoodie.json'
-
-/datum/greyscale_config/hoodie/worn
- name = "Hoodie Worn"
- json_config = 'modular_pariah/modules/GAGS/json_configs/hoodie/hoodie_worn.json'
-
-/datum/greyscale_config/hoodie_trim
- name = "Trimmed Hoodie"
- icon_file = 'modular_pariah/modules/GAGS/icons/hoodie.dmi'
- json_config = 'modular_pariah/modules/GAGS/json_configs/hoodie/hoodie_trim.json'
-
-/datum/greyscale_config/hoodie_trim/worn
- name = "Trimmed Hoodie Worn"
- json_config = 'modular_pariah/modules/GAGS/json_configs/hoodie/hoodie_trim_worn.json'
-
-/datum/greyscale_config/hoodie_branded
- name = "Branded Hoodie"
- icon_file = 'modular_pariah/modules/GAGS/icons/hoodie.dmi'
- json_config = 'modular_pariah/modules/GAGS/json_configs/hoodie/hoodie_branded.json'
-
-/datum/greyscale_config/hoodie_branded/worn
- name = "Branded Hoodie Worn"
- json_config = 'modular_pariah/modules/GAGS/json_configs/hoodie/hoodie_branded_worn.json'
-
// JUMPSUITS
/datum/greyscale_config/jumpsuit_worn/digitigrade
@@ -180,17 +44,6 @@
name = "Worn Prison Jumpsuit - Digitigrade"
icon_file = 'modular_pariah/modules/GAGS/icons/jumpsuit_digi.dmi'
-// KILT
-
-/datum/greyscale_config/kilt
- name = "Kilt"
- icon_file = 'modular_pariah/modules/GAGS/icons/kilt.dmi'
- json_config = 'modular_pariah/modules/GAGS/json_configs/kilt/kilt.json'
-
-/datum/greyscale_config/kilt/worn
- name = "Kilt (Worn)"
- json_config = 'modular_pariah/modules/GAGS/json_configs/kilt/kilt_worn.json'
-
/*
* SHOES
*/
diff --git a/modular_pariah/modules/GAGS/json_configs/beret/beret.json b/modular_pariah/modules/GAGS/json_configs/beret/beret.json
index f7ee848d264..9e9fdd57247 100644
--- a/modular_pariah/modules/GAGS/json_configs/beret/beret.json
+++ b/modular_pariah/modules/GAGS/json_configs/beret/beret.json
@@ -1,18 +1,26 @@
{
- "beret": [
- {
- "type": "icon_state",
- "icon_state": "beret",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- }
- ],
- "beret_flat": [
- {
- "type": "icon_state",
- "icon_state": "beret_flat",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- }
- ]
+ "beret":
+ {
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "beret",
+ "blend_mode": "overlay",
+ "color_ids": [ 1 ]
+ }
+ ]
+ },
+ "beret_flat":
+ {
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "beret_flat",
+ "blend_mode": "overlay",
+ "color_ids": [ 1 ]
+ }
+ ]
+ }
}
diff --git a/modular_pariah/modules/GAGS/json_configs/beret/beret_badge.json b/modular_pariah/modules/GAGS/json_configs/beret/beret_badge.json
index 193c4625706..30d86d5dc77 100644
--- a/modular_pariah/modules/GAGS/json_configs/beret/beret_badge.json
+++ b/modular_pariah/modules/GAGS/json_configs/beret/beret_badge.json
@@ -1,72 +1,92 @@
{
- "beret_badge": [
- {
- "type": "icon_state",
- "icon_state": "beret",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- },
- {
- "type": "icon_state",
- "icon_state": "badge",
- "blend_mode": "overlay",
- "color_ids": [ 2 ]
- }
- ],
- "beret_badge_bolt": [
- {
- "type": "icon_state",
- "icon_state": "beret",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- },
- {
- "type": "icon_state",
- "icon_state": "badge_fancy_twist_second",
- "blend_mode": "overlay",
- "color_ids": [ 2 ]
- }
- ],
- "beret_badge_med": [
- {
- "type": "icon_state",
- "icon_state": "beret",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- },
- {
- "type": "icon_state",
- "icon_state": "badge_med",
- "blend_mode": "overlay",
- "color_ids": [ 2 ]
- }
- ],
- "beret_badge_engi": [
- {
- "type": "icon_state",
- "icon_state": "beret",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- },
- {
- "type": "icon_state",
- "icon_state": "badge_engi",
- "blend_mode": "overlay",
- "color_ids": [ 2 ]
- }
- ],
- "beret_badge_police": [
- {
- "type": "icon_state",
- "icon_state": "beret",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- },
- {
- "type": "icon_state",
- "icon_state": "badge_police",
- "blend_mode": "overlay",
- "color_ids": [ 2 ]
- }
- ]
+ "beret_badge":
+ {
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "beret",
+ "blend_mode": "overlay",
+ "color_ids": [ 1 ]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "badge",
+ "blend_mode": "overlay",
+ "color_ids": [ 2 ]
+ }
+ ]
+ },
+ "beret_badge_bolt":
+ {
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "beret",
+ "blend_mode": "overlay",
+ "color_ids": [ 1 ]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "badge_fancy_twist_second",
+ "blend_mode": "overlay",
+ "color_ids": [ 2 ]
+ }
+ ]
+ },
+ "beret_badge_med":
+ {
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "beret",
+ "blend_mode": "overlay",
+ "color_ids": [ 1 ]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "badge_med",
+ "blend_mode": "overlay",
+ "color_ids": [ 2 ]
+ }
+ ]
+ },
+ "beret_badge_engi":
+ {
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "beret",
+ "blend_mode": "overlay",
+ "color_ids": [ 1 ]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "badge_engi",
+ "blend_mode": "overlay",
+ "color_ids": [ 2 ]
+ }
+ ]
+ },
+ "beret_badge_police":
+ {
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "beret",
+ "blend_mode": "overlay",
+ "color_ids": [ 1 ]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "badge_police",
+ "blend_mode": "overlay",
+ "color_ids": [ 2 ]
+ }
+ ]
+ }
}
diff --git a/modular_pariah/modules/GAGS/json_configs/beret/beret_badge_fancy.json b/modular_pariah/modules/GAGS/json_configs/beret/beret_badge_fancy.json
index 0fafdc77714..96526f263a4 100644
--- a/modular_pariah/modules/GAGS/json_configs/beret/beret_badge_fancy.json
+++ b/modular_pariah/modules/GAGS/json_configs/beret/beret_badge_fancy.json
@@ -1,62 +1,74 @@
{
- "beret_badge_fancy": [
- {
- "type": "icon_state",
- "icon_state": "beret",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- },
- {
- "type": "icon_state",
- "icon_state": "badge_fancy_first",
- "blend_mode": "overlay",
- "color_ids": [ 2 ]
- },
- {
- "type": "icon_state",
- "icon_state": "badge_fancy_second",
- "blend_mode": "overlay",
- "color_ids": [ 3 ]
- }
- ],
- "beret_badge_fancy_diagonal": [
- {
- "type": "icon_state",
- "icon_state": "beret",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- },
- {
- "type": "icon_state",
- "icon_state": "badge_fancy_diagonal_first",
- "blend_mode": "overlay",
- "color_ids": [ 2 ]
- },
- {
- "type": "icon_state",
- "icon_state": "badge_fancy_diagonal_second",
- "blend_mode": "overlay",
- "color_ids": [ 3 ]
- }
- ],
- "beret_badge_fancy_twist": [
- {
- "type": "icon_state",
- "icon_state": "beret",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- },
- {
- "type": "icon_state",
- "icon_state": "badge_fancy_twist_first",
- "blend_mode": "overlay",
- "color_ids": [ 2 ]
- },
- {
- "type": "icon_state",
- "icon_state": "badge_fancy_twist_second",
- "blend_mode": "overlay",
- "color_ids": [ 3 ]
- }
- ]
+ "beret_badge_fancy":
+ {
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "beret",
+ "blend_mode": "overlay",
+ "color_ids": [ 1 ]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "badge_fancy_first",
+ "blend_mode": "overlay",
+ "color_ids": [ 2 ]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "badge_fancy_second",
+ "blend_mode": "overlay",
+ "color_ids": [ 3 ]
+ }
+ ]
+ },
+ "beret_badge_fancy_diagonal":
+ {
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "beret",
+ "blend_mode": "overlay",
+ "color_ids": [ 1 ]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "badge_fancy_diagonal_first",
+ "blend_mode": "overlay",
+ "color_ids": [ 2 ]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "badge_fancy_twist_second",
+ "blend_mode": "overlay",
+ "color_ids": [ 3 ]
+ }
+ ]
+ },
+ "beret_badge_fancy_twist":
+ {
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "beret",
+ "blend_mode": "overlay",
+ "color_ids": [ 1 ]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "badge_fancy_twist_first",
+ "blend_mode": "overlay",
+ "color_ids": [ 2 ]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "badge_fancy_twist_second",
+ "blend_mode": "overlay",
+ "color_ids": [ 3 ]
+ }
+ ]
+ }
}
diff --git a/modular_pariah/modules/GAGS/json_configs/beret/beret_badge_fancy_worn.json b/modular_pariah/modules/GAGS/json_configs/beret/beret_badge_fancy_worn.json
index 11db050e207..1db3e954b7a 100644
--- a/modular_pariah/modules/GAGS/json_configs/beret/beret_badge_fancy_worn.json
+++ b/modular_pariah/modules/GAGS/json_configs/beret/beret_badge_fancy_worn.json
@@ -1,60 +1,74 @@
{
- "beret_badge_fancy": [
- {
- "type": "icon_state",
- "icon_state": "beret_worn",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- },
- {
- "type": "icon_state",
- "icon_state": "badge_fancy_first_worn",
- "blend_mode": "overlay",
- "color_ids": [ 2 ]
- },
- {
- "type": "icon_state",
- "icon_state": "badge_fancy_second_worn",
- "blend_mode": "overlay",
- "color_ids": [ 3 ]
- }
- ],"beret_badge_fancy_diagonal": [
- {
- "type": "icon_state",
- "icon_state": "beret_worn",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- },
- {
- "type": "icon_state",
- "icon_state": "badge_fancy_first_worn",
- "blend_mode": "overlay",
- "color_ids": [ 2 ]
- },
- {
- "type": "icon_state",
- "icon_state": "badge_fancy_second_worn",
- "blend_mode": "overlay",
- "color_ids": [ 3 ]
- }
- ],"beret_badge_fancy_twist": [
- {
- "type": "icon_state",
- "icon_state": "beret_worn",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- },
- {
- "type": "icon_state",
- "icon_state": "badge_fancy_first_worn",
- "blend_mode": "overlay",
- "color_ids": [ 2 ]
- },
- {
- "type": "icon_state",
- "icon_state": "badge_fancy_second_worn",
- "blend_mode": "overlay",
- "color_ids": [ 3 ]
- }
- ]
+ "beret_badge_fancy":
+ {
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "beret_worn",
+ "blend_mode": "overlay",
+ "color_ids": [ 1 ]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "badge_fancy_first_worn",
+ "blend_mode": "overlay",
+ "color_ids": [ 2 ]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "badge_fancy_second_worn",
+ "blend_mode": "overlay",
+ "color_ids": [ 3 ]
+ }
+ ]
+ },
+ "beret_badge_fancy_diagonal":
+ {
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "beret_worn",
+ "blend_mode": "overlay",
+ "color_ids": [ 1 ]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "badge_fancy_first_worn",
+ "blend_mode": "overlay",
+ "color_ids": [ 2 ]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "badge_fancy_second_worn",
+ "blend_mode": "overlay",
+ "color_ids": [ 3 ]
+ }
+ ]
+ },
+ "beret_badge_fancy_twist":
+ {
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "beret_worn",
+ "blend_mode": "overlay",
+ "color_ids": [ 1 ]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "badge_fancy_first_worn",
+ "blend_mode": "overlay",
+ "color_ids": [ 2 ]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "badge_fancy_second_worn",
+ "blend_mode": "overlay",
+ "color_ids": [ 3 ]
+ }
+ ]
+ }
}
diff --git a/modular_pariah/modules/GAGS/json_configs/beret/beret_badge_worn.json b/modular_pariah/modules/GAGS/json_configs/beret/beret_badge_worn.json
index 19578536e5d..e4c1bc17e06 100644
--- a/modular_pariah/modules/GAGS/json_configs/beret/beret_badge_worn.json
+++ b/modular_pariah/modules/GAGS/json_configs/beret/beret_badge_worn.json
@@ -1,72 +1,92 @@
{
- "beret_badge": [
- {
- "type": "icon_state",
- "icon_state": "beret_worn",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- },
- {
- "type": "icon_state",
- "icon_state": "badge_worn",
- "blend_mode": "overlay",
- "color_ids": [ 2 ]
- }
- ],
- "beret_badge_bolt": [
- {
- "type": "icon_state",
- "icon_state": "beret_worn",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- },
- {
- "type": "icon_state",
- "icon_state": "badge_worn",
- "blend_mode": "overlay",
- "color_ids": [ 2 ]
- }
- ],
- "beret_badge_med": [
- {
- "type": "icon_state",
- "icon_state": "beret_worn",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- },
- {
- "type": "icon_state",
- "icon_state": "badge_worn",
- "blend_mode": "overlay",
- "color_ids": [ 2 ]
- }
- ],
- "beret_badge_engi": [
- {
- "type": "icon_state",
- "icon_state": "beret_worn",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- },
- {
- "type": "icon_state",
- "icon_state": "badge_worn",
- "blend_mode": "overlay",
- "color_ids": [ 2 ]
- }
- ],
- "beret_badge_police": [
- {
- "type": "icon_state",
- "icon_state": "beret_worn",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- },
- {
- "type": "icon_state",
- "icon_state": "badge_worn",
- "blend_mode": "overlay",
- "color_ids": [ 2 ]
- }
- ]
+ "beret_badge":
+ {
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "beret_worn",
+ "blend_mode": "overlay",
+ "color_ids": [ 1 ]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "badge_worn",
+ "blend_mode": "overlay",
+ "color_ids": [ 2 ]
+ }
+ ]
+ },
+ "beret_badge_bolt":
+ {
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "beret_worn",
+ "blend_mode": "overlay",
+ "color_ids": [ 1 ]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "badge_worn",
+ "blend_mode": "overlay",
+ "color_ids": [ 2 ]
+ }
+ ]
+ },
+ "beret_badge_med":
+ {
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "beret_worn",
+ "blend_mode": "overlay",
+ "color_ids": [ 1 ]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "badge_worn",
+ "blend_mode": "overlay",
+ "color_ids": [ 2 ]
+ }
+ ]
+ },
+ "beret_badge_engi":
+ {
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "beret_worn",
+ "blend_mode": "overlay",
+ "color_ids": [ 1 ]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "badge_worn",
+ "blend_mode": "overlay",
+ "color_ids": [ 2 ]
+ }
+ ]
+ },
+ "beret_badge_police":
+ {
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "beret_worn",
+ "blend_mode": "overlay",
+ "color_ids": [ 1 ]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "badge_worn",
+ "blend_mode": "overlay",
+ "color_ids": [ 2 ]
+ }
+ ]
+ }
}
diff --git a/modular_pariah/modules/GAGS/json_configs/beret/beret_worn.json b/modular_pariah/modules/GAGS/json_configs/beret/beret_worn.json
index 8509136e53a..9924102d195 100644
--- a/modular_pariah/modules/GAGS/json_configs/beret/beret_worn.json
+++ b/modular_pariah/modules/GAGS/json_configs/beret/beret_worn.json
@@ -1,18 +1,26 @@
{
- "beret": [
- {
- "type": "icon_state",
- "icon_state": "beret_worn",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- }
- ],
- "beret_flat": [
- {
- "type": "icon_state",
- "icon_state": "beret_worn",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- }
- ]
+ "beret":
+ {
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "beret_worn",
+ "blend_mode": "overlay",
+ "color_ids": [ 1 ]
+ }
+ ]
+ },
+ "beret_flat":
+ {
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "beret_worn",
+ "blend_mode": "overlay",
+ "color_ids": [ 1 ]
+ }
+ ]
+ }
}
diff --git a/modular_pariah/modules/GAGS/json_configs/cloak/boat.json b/modular_pariah/modules/GAGS/json_configs/cloak/boat.json
deleted file mode 100644
index bd36d48c9df..00000000000
--- a/modular_pariah/modules/GAGS/json_configs/cloak/boat.json
+++ /dev/null
@@ -1,22 +0,0 @@
-{
- "gags_boat": [
- {
- "type": "icon_state",
- "icon_state": "boat_obj",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- },
- {
- "type": "icon_state",
- "icon_state": "boat_pattern_obj",
- "blend_mode": "overlay",
- "color_ids": [ 2 ]
- },
- {
- "type": "icon_state",
- "icon_state": "boat_trim_obj",
- "blend_mode": "overlay",
- "color_ids": [ 3 ]
- }
- ]
-}
diff --git a/modular_pariah/modules/GAGS/json_configs/cloak/boat_worn.json b/modular_pariah/modules/GAGS/json_configs/cloak/boat_worn.json
deleted file mode 100644
index f7f1fbdd007..00000000000
--- a/modular_pariah/modules/GAGS/json_configs/cloak/boat_worn.json
+++ /dev/null
@@ -1,22 +0,0 @@
-{
- "gags_boat": [
- {
- "type": "icon_state",
- "icon_state": "boat_mob",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- },
- {
- "type": "icon_state",
- "icon_state": "boat_pattern_mob",
- "blend_mode": "overlay",
- "color_ids": [ 2 ]
- },
- {
- "type": "icon_state",
- "icon_state": "boat_trim_mob",
- "blend_mode": "overlay",
- "color_ids": [ 3 ]
- }
- ]
-}
diff --git a/modular_pariah/modules/GAGS/json_configs/cloak/cloak.json b/modular_pariah/modules/GAGS/json_configs/cloak/cloak.json
deleted file mode 100644
index c5801b413cd..00000000000
--- a/modular_pariah/modules/GAGS/json_configs/cloak/cloak.json
+++ /dev/null
@@ -1,22 +0,0 @@
-{
- "gags_cloak": [
- {
- "type": "icon_state",
- "icon_state": "cloak_obj",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- },
- {
- "type": "icon_state",
- "icon_state": "cloak_pattern_obj",
- "blend_mode": "overlay",
- "color_ids": [ 2 ]
- },
- {
- "type": "icon_state",
- "icon_state": "cloak_trim_obj",
- "blend_mode": "overlay",
- "color_ids": [ 3 ]
- }
- ]
-}
diff --git a/modular_pariah/modules/GAGS/json_configs/cloak/cloak_worn.json b/modular_pariah/modules/GAGS/json_configs/cloak/cloak_worn.json
deleted file mode 100644
index ad615c69bfa..00000000000
--- a/modular_pariah/modules/GAGS/json_configs/cloak/cloak_worn.json
+++ /dev/null
@@ -1,22 +0,0 @@
-{
- "gags_cloak": [
- {
- "type": "icon_state",
- "icon_state": "cloak_mob",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- },
- {
- "type": "icon_state",
- "icon_state": "cloak_pattern_mob",
- "blend_mode": "overlay",
- "color_ids": [ 2 ]
- },
- {
- "type": "icon_state",
- "icon_state": "cloak_trim_mob",
- "blend_mode": "overlay",
- "color_ids": [ 3 ]
- }
- ]
-}
diff --git a/modular_pariah/modules/GAGS/json_configs/cloak/shroud.json b/modular_pariah/modules/GAGS/json_configs/cloak/shroud.json
deleted file mode 100644
index 222c5d133bd..00000000000
--- a/modular_pariah/modules/GAGS/json_configs/cloak/shroud.json
+++ /dev/null
@@ -1,22 +0,0 @@
-{
- "gags_shroud": [
- {
- "type": "icon_state",
- "icon_state": "shroud_obj",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- },
- {
- "type": "icon_state",
- "icon_state": "shroud_pattern_obj",
- "blend_mode": "overlay",
- "color_ids": [ 2 ]
- },
- {
- "type": "icon_state",
- "icon_state": "shroud_trim_obj",
- "blend_mode": "overlay",
- "color_ids": [ 3 ]
- }
- ]
-}
diff --git a/modular_pariah/modules/GAGS/json_configs/cloak/shroud_worn.json b/modular_pariah/modules/GAGS/json_configs/cloak/shroud_worn.json
deleted file mode 100644
index ebd8ab86d70..00000000000
--- a/modular_pariah/modules/GAGS/json_configs/cloak/shroud_worn.json
+++ /dev/null
@@ -1,22 +0,0 @@
-{
- "gags_shroud": [
- {
- "type": "icon_state",
- "icon_state": "shroud_mob",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- },
- {
- "type": "icon_state",
- "icon_state": "shroud_pattern_mob",
- "blend_mode": "overlay",
- "color_ids": [ 2 ]
- },
- {
- "type": "icon_state",
- "icon_state": "shroud_trim_mob",
- "blend_mode": "overlay",
- "color_ids": [ 3 ]
- }
- ]
-}
diff --git a/modular_pariah/modules/GAGS/json_configs/cloak/veil.json b/modular_pariah/modules/GAGS/json_configs/cloak/veil.json
deleted file mode 100644
index 87da07ffe9d..00000000000
--- a/modular_pariah/modules/GAGS/json_configs/cloak/veil.json
+++ /dev/null
@@ -1,22 +0,0 @@
-{
- "gags_veil": [
- {
- "type": "icon_state",
- "icon_state": "veil_obj",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- },
- {
- "type": "icon_state",
- "icon_state": "veil_pattern_obj",
- "blend_mode": "overlay",
- "color_ids": [ 2 ]
- },
- {
- "type": "icon_state",
- "icon_state": "veil_trim_obj",
- "blend_mode": "overlay",
- "color_ids": [ 3 ]
- }
- ]
-}
diff --git a/modular_pariah/modules/GAGS/json_configs/cloak/veil_worn.json b/modular_pariah/modules/GAGS/json_configs/cloak/veil_worn.json
deleted file mode 100644
index 48ecc28aa12..00000000000
--- a/modular_pariah/modules/GAGS/json_configs/cloak/veil_worn.json
+++ /dev/null
@@ -1,22 +0,0 @@
-{
- "gags_veil": [
- {
- "type": "icon_state",
- "icon_state": "veil_mob",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- },
- {
- "type": "icon_state",
- "icon_state": "veil_pattern_mob",
- "blend_mode": "overlay",
- "color_ids": [ 2 ]
- },
- {
- "type": "icon_state",
- "icon_state": "veil_trim_mob",
- "blend_mode": "overlay",
- "color_ids": [ 3 ]
- }
- ]
-}
diff --git a/modular_pariah/modules/GAGS/json_configs/clown_mask/clown_mask.json b/modular_pariah/modules/GAGS/json_configs/clown_mask/clown_mask.json
deleted file mode 100644
index b53e1a072df..00000000000
--- a/modular_pariah/modules/GAGS/json_configs/clown_mask/clown_mask.json
+++ /dev/null
@@ -1,28 +0,0 @@
-{
- "gags_mask": [
- {
- "type": "icon_state",
- "icon_state": "mask_obj",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- },
- {
- "type": "icon_state",
- "icon_state": "hair_obj",
- "blend_mode": "overlay",
- "color_ids": [ 2 ]
- },
- {
- "type": "icon_state",
- "icon_state": "features_obj",
- "blend_mode": "overlay",
- "color_ids": [ 3 ]
- },
- {
- "type": "icon_state",
- "icon_state": "eyes_obj",
- "blend_mode": "overlay",
- "color_ids": [ 4 ]
- }
- ]
-}
diff --git a/modular_pariah/modules/GAGS/json_configs/clown_mask/clown_mask_worn.json b/modular_pariah/modules/GAGS/json_configs/clown_mask/clown_mask_worn.json
deleted file mode 100644
index 80bf4b835cc..00000000000
--- a/modular_pariah/modules/GAGS/json_configs/clown_mask/clown_mask_worn.json
+++ /dev/null
@@ -1,28 +0,0 @@
-{
- "gags_mask": [
- {
- "type": "icon_state",
- "icon_state": "mask_mob",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- },
- {
- "type": "icon_state",
- "icon_state": "hair_mob",
- "blend_mode": "overlay",
- "color_ids": [ 2 ]
- },
- {
- "type": "icon_state",
- "icon_state": "features_mob",
- "blend_mode": "overlay",
- "color_ids": [ 3 ]
- },
- {
- "type": "icon_state",
- "icon_state": "eyes_mob",
- "blend_mode": "overlay",
- "color_ids": [ 4 ]
- }
- ]
-}
diff --git a/modular_pariah/modules/GAGS/json_configs/fancy_suits/fancy_suit.json b/modular_pariah/modules/GAGS/json_configs/fancy_suits/fancy_suit.json
deleted file mode 100644
index 190c44456ea..00000000000
--- a/modular_pariah/modules/GAGS/json_configs/fancy_suits/fancy_suit.json
+++ /dev/null
@@ -1,22 +0,0 @@
-{
- "fancy_suit": [
- {
- "type": "icon_state",
- "icon_state": "fancy_suit",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- },
- {
- "type": "icon_state",
- "icon_state": "fancy_suit_undershirt",
- "blend_mode": "overlay",
- "color_ids": [ 2 ]
- },
- {
- "type": "icon_state",
- "icon_state": "fancy_suit_buttons",
- "blend_mode": "overlay",
- "color_ids": [ 3 ]
- }
- ]
-}
diff --git a/modular_pariah/modules/GAGS/json_configs/fancy_suits/fancy_suit_worn.json b/modular_pariah/modules/GAGS/json_configs/fancy_suits/fancy_suit_worn.json
deleted file mode 100644
index c6e023f6d8c..00000000000
--- a/modular_pariah/modules/GAGS/json_configs/fancy_suits/fancy_suit_worn.json
+++ /dev/null
@@ -1,22 +0,0 @@
-{
- "fancy_suit": [
- {
- "type": "icon_state",
- "icon_state": "fancy_suit_worn",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- },
- {
- "type": "icon_state",
- "icon_state": "fancy_suit_undershirt_worn",
- "blend_mode": "overlay",
- "color_ids": [ 2 ]
- },
- {
- "type": "icon_state",
- "icon_state": "fancy_suit_buttons_worn",
- "blend_mode": "overlay",
- "color_ids": [ 3 ]
- }
- ]
-}
diff --git a/modular_pariah/modules/GAGS/json_configs/flatcap/flatcap.json b/modular_pariah/modules/GAGS/json_configs/flatcap/flatcap.json
deleted file mode 100644
index 758731a5a85..00000000000
--- a/modular_pariah/modules/GAGS/json_configs/flatcap/flatcap.json
+++ /dev/null
@@ -1,10 +0,0 @@
-{
- "flatcap": [
- {
- "type": "icon_state",
- "icon_state": "flatcap_obj",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- }
- ]
-}
diff --git a/modular_pariah/modules/GAGS/json_configs/flatcap/flatcap_worn.json b/modular_pariah/modules/GAGS/json_configs/flatcap/flatcap_worn.json
deleted file mode 100644
index 56c3467673e..00000000000
--- a/modular_pariah/modules/GAGS/json_configs/flatcap/flatcap_worn.json
+++ /dev/null
@@ -1,10 +0,0 @@
-{
- "flatcap": [
- {
- "type": "icon_state",
- "icon_state": "flatcap_mob",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- }
- ]
-}
diff --git a/modular_pariah/modules/GAGS/json_configs/flowerpin/flowerpin.json b/modular_pariah/modules/GAGS/json_configs/flowerpin/flowerpin.json
deleted file mode 100644
index c891b726a21..00000000000
--- a/modular_pariah/modules/GAGS/json_configs/flowerpin/flowerpin.json
+++ /dev/null
@@ -1,10 +0,0 @@
-{
- "flowerpin": [
- {
- "type": "icon_state",
- "icon_state": "flowerpin_obj",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- }
- ]
-}
diff --git a/modular_pariah/modules/GAGS/json_configs/flowerpin/flowerpin_worn.json b/modular_pariah/modules/GAGS/json_configs/flowerpin/flowerpin_worn.json
deleted file mode 100644
index 47aa98f431e..00000000000
--- a/modular_pariah/modules/GAGS/json_configs/flowerpin/flowerpin_worn.json
+++ /dev/null
@@ -1,10 +0,0 @@
-{
- "flowerpin": [
- {
- "type": "icon_state",
- "icon_state": "flowerpin_mob",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- }
- ]
-}
diff --git a/modular_pariah/modules/GAGS/json_configs/hoodie/hoodie.json b/modular_pariah/modules/GAGS/json_configs/hoodie/hoodie.json
deleted file mode 100644
index 2317c31ba00..00000000000
--- a/modular_pariah/modules/GAGS/json_configs/hoodie/hoodie.json
+++ /dev/null
@@ -1,18 +0,0 @@
-{
- "hoodie": [
- {
- "type": "icon_state",
- "icon_state": "hoodie_obj",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- }
- ],
- "hoodie_t": [
- {
- "type": "icon_state",
- "icon_state": "hoodie_obj",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- }
- ]
-}
diff --git a/modular_pariah/modules/GAGS/json_configs/hoodie/hoodie_branded.json b/modular_pariah/modules/GAGS/json_configs/hoodie/hoodie_branded.json
deleted file mode 100644
index b4e7afa6810..00000000000
--- a/modular_pariah/modules/GAGS/json_configs/hoodie/hoodie_branded.json
+++ /dev/null
@@ -1,134 +0,0 @@
-{
- "hoodie_NT": [
- {
- "type": "icon_state",
- "icon_state": "hoodie_obj",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- },
- {
- "type": "icon_state",
- "icon_state": "trim_obj",
- "blend_mode": "overlay"
- }
- ],
- "hoodie_NT_t": [
- {
- "type": "icon_state",
- "icon_state": "hoodie_obj",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- },
- {
- "type": "icon_state",
- "icon_state": "trim_obj",
- "blend_mode": "overlay"
- }
- ],
- "hoodie_NRTI": [
- {
- "type": "icon_state",
- "icon_state": "hoodie_obj",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- },
- {
- "type": "icon_state",
- "icon_state": "trim_alt_obj",
- "blend_mode": "overlay",
- "color_ids": [ 2 ]
- }
- ],
- "hoodie_NRTI_t": [
- {
- "type": "icon_state",
- "icon_state": "hoodie_obj",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- },
- {
- "type": "icon_state",
- "icon_state": "trim_alt_obj",
- "blend_mode": "overlay",
- "color_ids": [ 2 ]
- }
- ],
- "hoodie_MU": [
- {
- "type": "icon_state",
- "icon_state": "hoodie_obj",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- },
- {
- "type": "icon_state",
- "icon_state": "mu_logo_obj",
- "blend_mode": "overlay"
- }
- ],
- "hoodie_MU_t": [
- {
- "type": "icon_state",
- "icon_state": "hoodie_obj",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- },
- {
- "type": "icon_state",
- "icon_state": "mu_logo_obj",
- "blend_mode": "overlay"
- }
- ],
- "hoodie_CTI": [
- {
- "type": "icon_state",
- "icon_state": "hoodie_obj",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- },
- {
- "type": "icon_state",
- "icon_state": "cti_logo_obj",
- "blend_mode": "overlay"
- }
- ],
- "hoodie_CTI_t": [
- {
- "type": "icon_state",
- "icon_state": "hoodie_obj",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- },
- {
- "type": "icon_state",
- "icon_state": "cti_logo_obj",
- "blend_mode": "overlay"
- }
- ],
- "hoodie_SMW": [
- {
- "type": "icon_state",
- "icon_state": "hoodie_obj",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- },
- {
- "type": "icon_state",
- "icon_state": "smw_logo_obj",
- "blend_mode": "overlay"
- }
- ],
- "hoodie_SMW_t": [
- {
- "type": "icon_state",
- "icon_state": "hoodie_obj",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- },
- {
- "type": "icon_state",
- "icon_state": "smw_logo_obj",
- "blend_mode": "overlay"
- }
- ]
-}
diff --git a/modular_pariah/modules/GAGS/json_configs/hoodie/hoodie_branded_worn.json b/modular_pariah/modules/GAGS/json_configs/hoodie/hoodie_branded_worn.json
deleted file mode 100644
index d416bf96b1e..00000000000
--- a/modular_pariah/modules/GAGS/json_configs/hoodie/hoodie_branded_worn.json
+++ /dev/null
@@ -1,154 +0,0 @@
-{
- "hoodie_NT": [
- {
- "type": "icon_state",
- "icon_state": "hoodie",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- },
- {
- "type": "icon_state",
- "icon_state": "trim",
- "blend_mode": "overlay"
- },
- {
- "type": "icon_state",
- "icon_state": "nt_logo",
- "blend_mode": "overlay"
- }
- ],
- "hoodie_NT_t": [
- {
- "type": "icon_state",
- "icon_state": "hoodie_t",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- },
- {
- "type": "icon_state",
- "icon_state": "trim_t",
- "blend_mode": "overlay"
- },
- {
- "type": "icon_state",
- "icon_state": "nt_logo_t",
- "blend_mode": "overlay"
- }
- ],
- "hoodie_NRTI": [
- {
- "type": "icon_state",
- "icon_state": "hoodie",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- },
- {
- "type": "icon_state",
- "icon_state": "trim_alt",
- "blend_mode": "overlay",
- "color_ids": [ 2 ]
- },
- {
- "type": "icon_state",
- "icon_state": "nrti_logo",
- "blend_mode": "overlay"
- }
- ],
- "hoodie_NRTI_t": [
- {
- "type": "icon_state",
- "icon_state": "hoodie_t",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- },
- {
- "type": "icon_state",
- "icon_state": "trim_alt_t",
- "blend_mode": "overlay",
- "color_ids": [ 2 ]
- },
- {
- "type": "icon_state",
- "icon_state": "nrti_logo_t",
- "blend_mode": "overlay"
- }
- ],
- "hoodie_MU": [
- {
- "type": "icon_state",
- "icon_state": "hoodie",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- },
- {
- "type": "icon_state",
- "icon_state": "mu_logo",
- "blend_mode": "overlay"
- }
- ],
- "hoodie_MU_t": [
- {
- "type": "icon_state",
- "icon_state": "hoodie_t",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- },
- {
- "type": "icon_state",
- "icon_state": "mu_logo_t",
- "blend_mode": "overlay"
- }
- ],
- "hoodie_CTI": [
- {
- "type": "icon_state",
- "icon_state": "hoodie",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- },
- {
- "type": "icon_state",
- "icon_state": "cti_logo",
- "blend_mode": "overlay"
- }
- ],
- "hoodie_CTI_t": [
- {
- "type": "icon_state",
- "icon_state": "hoodie_t",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- },
- {
- "type": "icon_state",
- "icon_state": "cti_logo_t",
- "blend_mode": "overlay"
- }
- ],
- "hoodie_SMW": [
- {
- "type": "icon_state",
- "icon_state": "hoodie",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- },
- {
- "type": "icon_state",
- "icon_state": "smw_logo",
- "blend_mode": "overlay"
- }
- ],
- "hoodie_SMW_t": [
- {
- "type": "icon_state",
- "icon_state": "hoodie_t",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- },
- {
- "type": "icon_state",
- "icon_state": "smw_logo_t",
- "blend_mode": "overlay"
- }
- ]
-}
diff --git a/modular_pariah/modules/GAGS/json_configs/hoodie/hoodie_trim.json b/modular_pariah/modules/GAGS/json_configs/hoodie/hoodie_trim.json
deleted file mode 100644
index fb6613d855d..00000000000
--- a/modular_pariah/modules/GAGS/json_configs/hoodie/hoodie_trim.json
+++ /dev/null
@@ -1,58 +0,0 @@
-{
- "hoodie_trim": [
- {
- "type": "icon_state",
- "icon_state": "hoodie_obj",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- },
- {
- "type": "icon_state",
- "icon_state": "trim_obj",
- "blend_mode": "overlay",
- "color_ids": [ 2 ]
- }
- ],
- "hoodie_trim_t": [
- {
- "type": "icon_state",
- "icon_state": "hoodie_obj",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- },
- {
- "type": "icon_state",
- "icon_state": "trim_obj",
- "blend_mode": "overlay",
- "color_ids": [ 2 ]
- }
- ],
- "hoodie_trim_alt": [
- {
- "type": "icon_state",
- "icon_state": "hoodie_obj",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- },
- {
- "type": "icon_state",
- "icon_state": "trim_alt_obj",
- "blend_mode": "overlay",
- "color_ids": [ 2 ]
- }
- ],
- "hoodie_trim_alt_t": [
- {
- "type": "icon_state",
- "icon_state": "hoodie_obj",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- },
- {
- "type": "icon_state",
- "icon_state": "trim_alt_obj",
- "blend_mode": "overlay",
- "color_ids": [ 2 ]
- }
- ]
-}
diff --git a/modular_pariah/modules/GAGS/json_configs/hoodie/hoodie_trim_worn.json b/modular_pariah/modules/GAGS/json_configs/hoodie/hoodie_trim_worn.json
deleted file mode 100644
index 236a62a2cdf..00000000000
--- a/modular_pariah/modules/GAGS/json_configs/hoodie/hoodie_trim_worn.json
+++ /dev/null
@@ -1,58 +0,0 @@
-{
- "hoodie_trim": [
- {
- "type": "icon_state",
- "icon_state": "hoodie",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- },
- {
- "type": "icon_state",
- "icon_state": "trim",
- "blend_mode": "overlay",
- "color_ids": [ 2 ]
- }
- ],
- "hoodie_trim_t": [
- {
- "type": "icon_state",
- "icon_state": "hoodie_t",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- },
- {
- "type": "icon_state",
- "icon_state": "trim_t",
- "blend_mode": "overlay",
- "color_ids": [ 2 ]
- }
- ],
- "hoodie_trim_alt": [
- {
- "type": "icon_state",
- "icon_state": "hoodie",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- },
- {
- "type": "icon_state",
- "icon_state": "trim_alt",
- "blend_mode": "overlay",
- "color_ids": [ 2 ]
- }
- ],
- "hoodie_trim_alt_t": [
- {
- "type": "icon_state",
- "icon_state": "hoodie_t",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- },
- {
- "type": "icon_state",
- "icon_state": "trim_alt_t",
- "blend_mode": "overlay",
- "color_ids": [ 2 ]
- }
- ]
-}
diff --git a/modular_pariah/modules/GAGS/json_configs/hoodie/hoodie_worn.json b/modular_pariah/modules/GAGS/json_configs/hoodie/hoodie_worn.json
deleted file mode 100644
index 4122bdd059d..00000000000
--- a/modular_pariah/modules/GAGS/json_configs/hoodie/hoodie_worn.json
+++ /dev/null
@@ -1,18 +0,0 @@
-{
- "hoodie": [
- {
- "type": "icon_state",
- "icon_state": "hoodie",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- }
- ],
- "hoodie_t": [
- {
- "type": "icon_state",
- "icon_state": "hoodie_t",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- }
- ]
-}
diff --git a/modular_pariah/modules/GAGS/json_configs/kilt/kilt.json b/modular_pariah/modules/GAGS/json_configs/kilt/kilt.json
deleted file mode 100644
index 94bbba667c2..00000000000
--- a/modular_pariah/modules/GAGS/json_configs/kilt/kilt.json
+++ /dev/null
@@ -1,16 +0,0 @@
-{
- "kilt": [
- {
- "type": "icon_state",
- "icon_state": "kilt_obj",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- },
- {
- "type": "icon_state",
- "icon_state": "kilt_top_obj",
- "blend_mode": "overlay",
- "color_ids": [ 2 ]
- }
- ]
-}
diff --git a/modular_pariah/modules/GAGS/json_configs/kilt/kilt_worn.json b/modular_pariah/modules/GAGS/json_configs/kilt/kilt_worn.json
deleted file mode 100644
index 41a7a3832a5..00000000000
--- a/modular_pariah/modules/GAGS/json_configs/kilt/kilt_worn.json
+++ /dev/null
@@ -1,16 +0,0 @@
-{
- "kilt": [
- {
- "type": "icon_state",
- "icon_state": "kilt_mob",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- },
- {
- "type": "icon_state",
- "icon_state": "kilt_top_mob",
- "blend_mode": "overlay",
- "color_ids": [ 2 ]
- }
- ]
-}
diff --git a/modular_pariah/modules/GAGS/json_configs/mush_cap/mushcap.json b/modular_pariah/modules/GAGS/json_configs/mush_cap/mushcap.json
deleted file mode 100644
index 5ca5a3e6fe2..00000000000
--- a/modular_pariah/modules/GAGS/json_configs/mush_cap/mushcap.json
+++ /dev/null
@@ -1,16 +0,0 @@
-{
- "mush_cap": [
- {
- "type": "icon_state",
- "icon_state": "mush_cap",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- },
- {
- "type": "icon_state",
- "icon_state": "mush_face",
- "blend_mode": "overlay",
- "color_ids": []
- }
- ]
-}
diff --git a/modular_pariah/modules/GAGS/json_configs/mush_cap/mushcap_worn.json b/modular_pariah/modules/GAGS/json_configs/mush_cap/mushcap_worn.json
deleted file mode 100644
index 9236835d3ca..00000000000
--- a/modular_pariah/modules/GAGS/json_configs/mush_cap/mushcap_worn.json
+++ /dev/null
@@ -1,16 +0,0 @@
-{
- "mush_cap": [
- {
- "type": "icon_state",
- "icon_state": "mush_cap_worn",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- },
- {
- "type": "icon_state",
- "icon_state": "mush_face_worn",
- "blend_mode": "overlay",
- "color_ids": []
- }
- ]
-}
diff --git a/modular_pariah/modules/GAGS/json_configs/ranger_poncho/ranger_poncho.json b/modular_pariah/modules/GAGS/json_configs/ranger_poncho/ranger_poncho.json
deleted file mode 100644
index 9dcd4115e07..00000000000
--- a/modular_pariah/modules/GAGS/json_configs/ranger_poncho/ranger_poncho.json
+++ /dev/null
@@ -1,30 +0,0 @@
-{
- "ranger_poncho": [
- {
- "type": "icon_state",
- "icon_state": "ranger_obj",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- },
- {
- "type": "icon_state",
- "icon_state": "trim_obj",
- "blend_mode": "overlay",
- "color_ids": [ 2 ]
- }
- ],
- "ranger_poncho_t": [
- {
- "type": "icon_state",
- "icon_state": "ranger_obj_t",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- },
- {
- "type": "icon_state",
- "icon_state": "trim_obj_t",
- "blend_mode": "overlay",
- "color_ids": [ 2 ]
- }
- ]
-}
diff --git a/modular_pariah/modules/GAGS/json_configs/ranger_poncho/ranger_poncho_worn.json b/modular_pariah/modules/GAGS/json_configs/ranger_poncho/ranger_poncho_worn.json
deleted file mode 100644
index f35c691008f..00000000000
--- a/modular_pariah/modules/GAGS/json_configs/ranger_poncho/ranger_poncho_worn.json
+++ /dev/null
@@ -1,30 +0,0 @@
-{
- "ranger_poncho": [
- {
- "type": "icon_state",
- "icon_state": "ranger",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- },
- {
- "type": "icon_state",
- "icon_state": "trim",
- "blend_mode": "overlay",
- "color_ids": [ 2 ]
- }
- ],
- "ranger_poncho_t": [
- {
- "type": "icon_state",
- "icon_state": "ranger_t",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- },
- {
- "type": "icon_state",
- "icon_state": "trim_t",
- "blend_mode": "overlay",
- "color_ids": [ 2 ]
- }
- ]
-}
diff --git a/modular_pariah/modules/GAGS/json_configs/wraps/wraps.json b/modular_pariah/modules/GAGS/json_configs/wraps/wraps.json
index c708d9526f7..a920c87121f 100644
--- a/modular_pariah/modules/GAGS/json_configs/wraps/wraps.json
+++ b/modular_pariah/modules/GAGS/json_configs/wraps/wraps.json
@@ -1,10 +1,14 @@
{
- "clothwrap": [
- {
- "type": "icon_state",
- "icon_state": "wrap_obj",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- }
- ]
+ "clothwrap":
+ {
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "wrap_obj",
+ "blend_mode": "overlay",
+ "color_ids": [ 1 ]
+ }
+ ]
+ }
}
diff --git a/modular_pariah/modules/GAGS/json_configs/wraps/wraps_worn.json b/modular_pariah/modules/GAGS/json_configs/wraps/wraps_worn.json
index 4d9f6d4a1d5..30600b0e02d 100644
--- a/modular_pariah/modules/GAGS/json_configs/wraps/wraps_worn.json
+++ b/modular_pariah/modules/GAGS/json_configs/wraps/wraps_worn.json
@@ -1,10 +1,14 @@
{
- "clothwrap": [
- {
- "type": "icon_state",
- "icon_state": "wrap_mob",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
- }
- ]
+ "clothwrap":
+ {
+ "layers":
+ [
+ {
+ "type": "icon_state",
+ "icon_state": "wrap_mob",
+ "blend_mode": "overlay",
+ "color_ids": [ 1 ]
+ }
+ ]
+ }
}
diff --git a/modular_pariah/modules/aesthetics/windows/code/windows.dm b/modular_pariah/modules/aesthetics/windows/code/windows.dm
deleted file mode 100644
index bb9f422e79a..00000000000
--- a/modular_pariah/modules/aesthetics/windows/code/windows.dm
+++ /dev/null
@@ -1,27 +0,0 @@
-/obj/structure/window/fulltile
- icon = 'modular_pariah/modules/aesthetics/windows/icons/window.dmi'
- canSmoothWith = list(SMOOTH_GROUP_WINDOW_FULLTILE, SMOOTH_GROUP_WALLS, SMOOTH_GROUP_AIRLOCK)
-
-/obj/structure/window/reinforced/fulltile
- icon = 'modular_pariah/modules/aesthetics/windows/icons/r_window.dmi'
- canSmoothWith = list(SMOOTH_GROUP_WINDOW_FULLTILE, SMOOTH_GROUP_WALLS, SMOOTH_GROUP_AIRLOCK)
-
-/obj/structure/window/reinforced/tinted/fulltile
- icon = 'modular_pariah/modules/aesthetics/windows/icons/r_window_tinted.dmi'
- icon_state = "reinforced_window-0"
- base_icon_state = "reinforced_window"
- canSmoothWith = list(SMOOTH_GROUP_WINDOW_FULLTILE, SMOOTH_GROUP_WALLS, SMOOTH_GROUP_AIRLOCK)
-
-/obj/structure/window/plasma/fulltile
- icon = 'modular_pariah/modules/aesthetics/windows/icons/window_plasma.dmi'
- icon_state = "window-0"
- base_icon_state = "window"
- canSmoothWith = list(SMOOTH_GROUP_WINDOW_FULLTILE, SMOOTH_GROUP_WALLS, SMOOTH_GROUP_AIRLOCK)
-
-/obj/structure/window/reinforced/plasma/fulltile
- icon = 'modular_pariah/modules/aesthetics/windows/icons/r_window_plasma.dmi'
- icon_state = "reinforced_window-0"
- base_icon_state = "reinforced_window"
- canSmoothWith = list(SMOOTH_GROUP_WINDOW_FULLTILE, SMOOTH_GROUP_WALLS, SMOOTH_GROUP_AIRLOCK)
-
-/obj/structure/window/reinforced/fulltile/ice
diff --git a/modular_pariah/modules/aesthetics/windows/icons/r_window.dmi b/modular_pariah/modules/aesthetics/windows/icons/r_window.dmi
deleted file mode 100644
index 7eeeb246284..00000000000
Binary files a/modular_pariah/modules/aesthetics/windows/icons/r_window.dmi and /dev/null differ
diff --git a/modular_pariah/modules/aesthetics/windows/icons/r_window_plasma.dmi b/modular_pariah/modules/aesthetics/windows/icons/r_window_plasma.dmi
deleted file mode 100644
index 8f86e2c3897..00000000000
Binary files a/modular_pariah/modules/aesthetics/windows/icons/r_window_plasma.dmi and /dev/null differ
diff --git a/modular_pariah/modules/aesthetics/windows/icons/r_window_tinted.dmi b/modular_pariah/modules/aesthetics/windows/icons/r_window_tinted.dmi
deleted file mode 100644
index fdbdde498cc..00000000000
Binary files a/modular_pariah/modules/aesthetics/windows/icons/r_window_tinted.dmi and /dev/null differ
diff --git a/modular_pariah/modules/aesthetics/windows/icons/window.dmi b/modular_pariah/modules/aesthetics/windows/icons/window.dmi
deleted file mode 100644
index 3f9d36a06a4..00000000000
Binary files a/modular_pariah/modules/aesthetics/windows/icons/window.dmi and /dev/null differ
diff --git a/modular_pariah/modules/aesthetics/windows/icons/window_plasma.dmi b/modular_pariah/modules/aesthetics/windows/icons/window_plasma.dmi
deleted file mode 100644
index 0842930bb9a..00000000000
Binary files a/modular_pariah/modules/aesthetics/windows/icons/window_plasma.dmi and /dev/null differ
diff --git a/pariah.dme b/pariah.dme
index f1282321eff..039da0b7a03 100644
--- a/pariah.dme
+++ b/pariah.dme
@@ -61,6 +61,7 @@
#include "code\__DEFINES\cult.dm"
#include "code\__DEFINES\database.dm"
#include "code\__DEFINES\devices.dm"
+#include "code\__DEFINES\direction_junctions.dm"
#include "code\__DEFINES\directional.dm"
#include "code\__DEFINES\diseases.dm"
#include "code\__DEFINES\DNA.dm"
@@ -84,6 +85,7 @@
#include "code\__DEFINES\fov.dm"
#include "code\__DEFINES\ghost.dm"
#include "code\__DEFINES\gravity.dm"
+#include "code\__DEFINES\greyscale.dm"
#include "code\__DEFINES\hud.dm"
#include "code\__DEFINES\icon_smoothing.dm"
#include "code\__DEFINES\id_cards.dm"
@@ -716,8 +718,8 @@
#include "code\datums\components\codeword_hearing.dm"
#include "code\datums\components\combustible_flooder.dm"
#include "code\datums\components\connect_containers.dm"
-#include "code\datums\components\connect_mob_behalf.dm"
#include "code\datums\components\connect_loc_behalf.dm"
+#include "code\datums\components\connect_mob_behalf.dm"
#include "code\datums\components\connect_range.dm"
#include "code\datums\components\construction.dm"
#include "code\datums\components\conveyor_movement.dm"
@@ -1023,6 +1025,7 @@
#include "code\datums\greyscale\_greyscale_config.dm"
#include "code\datums\greyscale\json_reader.dm"
#include "code\datums\greyscale\layer.dm"
+#include "code\datums\greyscale\state.dm"
#include "code\datums\greyscale\config_types\greyscale_configs.dm"
#include "code\datums\greyscale\config_types\material_effects.dm"
#include "code\datums\helper_datums\events.dm"
@@ -1731,6 +1734,7 @@
#include "code\game\objects\structures\lattice.dm"
#include "code\game\objects\structures\life_candle.dm"
#include "code\game\objects\structures\loom.dm"
+#include "code\game\objects\structures\low_wall.dm"
#include "code\game\objects\structures\maintenance.dm"
#include "code\game\objects\structures\memorial.dm"
#include "code\game\objects\structures\mineral_doors.dm"
@@ -1821,7 +1825,6 @@
#include "code\game\turfs\closed\_closed.dm"
#include "code\game\turfs\closed\minerals.dm"
#include "code\game\turfs\closed\walls.dm"
-#include "code\game\turfs\closed\wall\material_walls.dm"
#include "code\game\turfs\closed\wall\mineral_walls.dm"
#include "code\game\turfs\closed\wall\misc_walls.dm"
#include "code\game\turfs\closed\wall\reinf_walls.dm"
@@ -3270,6 +3273,7 @@
#include "code\modules\mob\living\living_fov.dm"
#include "code\modules\mob\living\living_movement.dm"
#include "code\modules\mob\living\living_say.dm"
+#include "code\modules\mob\living\living_stripping.dm"
#include "code\modules\mob\living\living_update_icons.dm"
#include "code\modules\mob\living\login.dm"
#include "code\modules\mob\living\logout.dm"
@@ -4594,7 +4598,6 @@
#include "modular_pariah\modules\aesthetics\vending\access_vending.dm"
#include "modular_pariah\modules\aesthetics\wallmed\code\wallmed.dm"
#include "modular_pariah\modules\aesthetics\washing_machine\code\washing_machine.dm"
-#include "modular_pariah\modules\aesthetics\windows\code\windows.dm"
#include "modular_pariah\modules\alternative_job_titles\code\alt_job_titles.dm"
#include "modular_pariah\modules\alternative_job_titles\code\job.dm"
#include "modular_pariah\modules\announcer\code\baystation_announcer.dm"
diff --git a/strings/tips.txt b/strings/tips.txt
index bf057da3e9c..351b39e35f1 100644
--- a/strings/tips.txt
+++ b/strings/tips.txt
@@ -251,4 +251,5 @@ Laying down will help slow down bloodloss. Death will halt it entirely.
♪ Hey, have you ever tried appending the % character before your messages when speaking in-game? ♫
@You can use the |, + and _ characters to emphasize parts of what you say in-game (e.g. say"my _ass_ |is| +heavy+." will be outputted as "my ass is heavy."). You can also escape these emphasizers by appending backslashes before them (e.g. say"1\+2\+3" will come out as "1+2+3" and not "1\2\3").
If you knock into somebody while doing a wicked grind on a skateboard, they will be floored for double the time. Radical!
-You can cheat games by baking dice in microwaves to make them loaded. Cards can be seen with x-ray vision or be marked with either a pen or crayon to gain an edge.
+Small mobs can be picked up by dragging their sprite onto yours after grabbing them.
+You can cheat games by baking dice in microwaves to make them loaded. Cards can be seen with x-ray vision or be marked with either a pen or crayon to gain an edge.
\ No newline at end of file
diff --git a/tgui/packages/tgui/interfaces/Apc.js b/tgui/packages/tgui/interfaces/Apc.js
index 1bcf7956ea7..1ac2447b63d 100644
--- a/tgui/packages/tgui/interfaces/Apc.js
+++ b/tgui/packages/tgui/interfaces/Apc.js
@@ -7,8 +7,8 @@ export const Apc = (props, context) => {
return (
-
+ height={432}>
+
@@ -86,7 +86,17 @@ const ApcContent = (props, context) => {
return (
<>
-
+ act('main_lights')}
+ />
+ )}
+ >
{
label="Emergency Lighting"
buttons={(