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={(