From 4914ae5ae15f8a1f8c8366e993e8d64c5bbd48d2 Mon Sep 17 00:00:00 2001 From: SkyratBot <59378654+SkyratBot@users.noreply.github.com> Date: Tue, 1 Jun 2021 05:49:32 +0200 Subject: [PATCH] [MIRROR] Datum mat GAGS support and mace migration (#6059) * Datum mat GAGS support and mace migration * Mirror! Co-authored-by: Emmett Gaines Co-authored-by: Funce --- code/__DEFINES/materials.dm | 7 ++- code/controllers/subsystem/greyscale.dm | 6 ++ code/datums/greyscale/_greyscale_config.dm | 14 ++--- .../{ => config_types}/greyscale_configs.dm | 40 ++++++++++++++ .../config_types/material_effects.dm | 4 ++ .../json_configs/items/cleric_mace.json | 28 ++++++++++ .../json_configs/items/cleric_mace_gold.json | 46 ++++++++++++++++ .../items/cleric_mace_lefthand.json | 10 ++++ .../items/cleric_mace_lefthand_gold.json | 24 ++++++++ .../items/cleric_mace_righthand.json | 10 ++++ .../items/cleric_mace_righthand_gold.json | 24 ++++++++ .../json_configs/items/cleric_mace_worn.json | 15 +++++ .../items/cleric_mace_worn_gold.json | 23 ++++++++ .../material_effects/shimmer.json | 10 ++++ code/datums/greyscale/layer.dm | 16 ++++-- code/datums/materials/_material.dm | 52 +++++++++++++++--- code/datums/materials/alloys.dm | 6 ++ code/datums/materials/basemats.dm | 28 ++++++++++ code/datums/materials/hauntium.dm | 1 + code/datums/materials/meat.dm | 1 + code/datums/materials/pizza.dm | 1 + code/game/objects/items/melee/misc.dm | 27 ++++----- icons/effects/shimmer.dmi | Bin 0 -> 1509 bytes icons/mob/inhands/weapons/melee_lefthand.dmi | Bin 5443 -> 5301 bytes icons/mob/inhands/weapons/melee_righthand.dmi | Bin 5231 -> 5093 bytes icons/obj/items/cleric_mace.dmi | Bin 0 -> 2664 bytes tgstation.dme | 3 +- 27 files changed, 361 insertions(+), 35 deletions(-) rename code/datums/greyscale/{ => config_types}/greyscale_configs.dm (83%) create mode 100644 code/datums/greyscale/config_types/material_effects.dm create mode 100644 code/datums/greyscale/json_configs/items/cleric_mace.json create mode 100644 code/datums/greyscale/json_configs/items/cleric_mace_gold.json create mode 100644 code/datums/greyscale/json_configs/items/cleric_mace_lefthand.json create mode 100644 code/datums/greyscale/json_configs/items/cleric_mace_lefthand_gold.json create mode 100644 code/datums/greyscale/json_configs/items/cleric_mace_righthand.json create mode 100644 code/datums/greyscale/json_configs/items/cleric_mace_righthand_gold.json create mode 100644 code/datums/greyscale/json_configs/items/cleric_mace_worn.json create mode 100644 code/datums/greyscale/json_configs/items/cleric_mace_worn_gold.json create mode 100644 code/datums/greyscale/json_configs/material_effects/shimmer.json create mode 100644 icons/effects/shimmer.dmi create mode 100644 icons/obj/items/cleric_mace.dmi diff --git a/code/__DEFINES/materials.dm b/code/__DEFINES/materials.dm index f2b6af0aeaf..e10277435f2 100644 --- a/code/__DEFINES/materials.dm +++ b/code/__DEFINES/materials.dm @@ -45,11 +45,16 @@ /// Breakdown flags used when exporting materials. #define BREAKDOWN_FLAGS_EXPORT (NONE) -/// Flag for atoms, this flag ensures it isn't re-colored by materials. Useful for snowflake icons such as default toolboxes. +/// Applies the material color to the atom's color. Deprecated, use MATERIAL_GREYSCALE instead #define MATERIAL_COLOR (1<<0) +/// Whether a prefix describing the material should be added to the name #define MATERIAL_ADD_PREFIX (1<<1) +/// Whether a material's mechanical effects should apply to the atom #define MATERIAL_NO_EFFECTS (1<<2) +/// Whether a material should affect the stats of the atom #define MATERIAL_AFFECT_STATISTICS (1<<3) +/// Applies the material greyscale color to the atom's greyscale color. +#define MATERIAL_GREYSCALE (1<<4) /// Wrapper for fetching material references. Exists exclusively so that people don't need to wrap everything in a list every time. #define GET_MATERIAL_REF(arguments...) SSmaterials._GetMaterialRef(list(##arguments)) diff --git a/code/controllers/subsystem/greyscale.dm b/code/controllers/subsystem/greyscale.dm index eac8f661b93..dbbe872b55f 100644 --- a/code/controllers/subsystem/greyscale.dm +++ b/code/controllers/subsystem/greyscale.dm @@ -31,3 +31,9 @@ SUBSYSTEM_DEF(greyscale) if(istype(colors)) // It's the color list format colors = colors.Join() return configurations[type].Generate(colors) + +/datum/controller/subsystem/greyscale/proc/ParseColorString(color_string) + . = list() + var/list/split_colors = splittext(color_string, "#") + for(var/color in 2 to length(split_colors)) + . += "#[split_colors[color]]" diff --git a/code/datums/greyscale/_greyscale_config.dm b/code/datums/greyscale/_greyscale_config.dm index 48a1d448e7e..58728c7a3b4 100644 --- a/code/datums/greyscale/_greyscale_config.dm +++ b/code/datums/greyscale/_greyscale_config.dm @@ -8,6 +8,10 @@ /// Reference to the dmi file for this config var/icon_file + /// An optional var to set that tells the material system what material this configuration is for. + /// Use a typepath here, not an instance. + var/datum/material/material_skin + /////////////////////////////////////////////////////////////////////////////////////////// // Do not set any further vars, the json file specified above is what generates the object @@ -116,6 +120,8 @@ var/list/color_groups = list() for(var/datum/greyscale_layer/layer as anything in all_layers) for(var/id in layer.color_ids) + if(!isnum(id)) + continue color_groups["[id]"] = TRUE expected_colors = length(color_groups) @@ -142,7 +148,7 @@ /// Handles the actual icon manipulation to create the spritesheet /datum/greyscale_config/proc/GenerateBundle(list/colors, list/render_steps) if(!istype(colors)) - colors = ParseColorString(colors) + colors = SSgreyscale.ParseColorString(colors) if(length(colors) != expected_colors) CRASH("[DebugName()] expected [expected_colors] color arguments but only received [length(colors)]") @@ -188,9 +194,3 @@ output["icon"] = GenerateBundle(colors, debug_steps) return output - -/datum/greyscale_config/proc/ParseColorString(color_string) - . = list() - var/list/split_colors = splittext(color_string, "#") - for(var/color in 2 to length(split_colors)) - . += "#[split_colors[color]]" diff --git a/code/datums/greyscale/greyscale_configs.dm b/code/datums/greyscale/config_types/greyscale_configs.dm similarity index 83% rename from code/datums/greyscale/greyscale_configs.dm rename to code/datums/greyscale/config_types/greyscale_configs.dm index 5bbbd70770f..fd22927a4ff 100644 --- a/code/datums/greyscale/greyscale_configs.dm +++ b/code/datums/greyscale/config_types/greyscale_configs.dm @@ -217,3 +217,43 @@ name = "Flower Worn" icon_file = 'icons/mob/clothing/head/hydroponics.dmi' json_config = 'code/datums/greyscale/json_configs/simple_flower_worn.json' + +/datum/greyscale_config/cleric_mace + name = "Base Cleric Mace" + icon_file = 'icons/obj/items/cleric_mace.dmi' + json_config = 'code/datums/greyscale/json_configs/items/cleric_mace.json' + +/datum/greyscale_config/cleric_mace_lefthand + name = "Base Held Cleric Mace, Left" + icon_file = 'icons/obj/items/cleric_mace.dmi' + json_config = 'code/datums/greyscale/json_configs/items/cleric_mace_lefthand.json' + +/datum/greyscale_config/cleric_mace_righthand + name = "Base Held Cleric Mace, Right" + icon_file = 'icons/obj/items/cleric_mace.dmi' + json_config = 'code/datums/greyscale/json_configs/items/cleric_mace_righthand.json' + +/datum/greyscale_config/cleric_mace_worn + name = "Base Worn Cleric Mace" + icon_file = 'icons/obj/items/cleric_mace.dmi' + json_config = 'code/datums/greyscale/json_configs/items/cleric_mace_worn.json' + +/datum/greyscale_config/cleric_mace/gold + name = "Gold Cleric Mace" + material_skin = /datum/material/gold + json_config = 'code/datums/greyscale/json_configs/items/cleric_mace_gold.json' + +/datum/greyscale_config/cleric_mace_lefthand/gold + name = "Gold Held Cleric Mace, Left" + material_skin = /datum/material/gold + json_config = 'code/datums/greyscale/json_configs/items/cleric_mace_lefthand_gold.json' + +/datum/greyscale_config/cleric_mace_righthand/gold + name = "Gold Held Cleric Mace, Right" + material_skin = /datum/material/gold + json_config = 'code/datums/greyscale/json_configs/items/cleric_mace_righthand_gold.json' + +/datum/greyscale_config/cleric_mace_worn/gold + name = "Gold Worn Cleric Mace" + icon_file = 'icons/obj/items/cleric_mace.dmi' + json_config = 'code/datums/greyscale/json_configs/items/cleric_mace_worn_gold.json' diff --git a/code/datums/greyscale/config_types/material_effects.dm b/code/datums/greyscale/config_types/material_effects.dm new file mode 100644 index 00000000000..0ed32375a27 --- /dev/null +++ b/code/datums/greyscale/config_types/material_effects.dm @@ -0,0 +1,4 @@ +/datum/greyscale_config/shimmer + name = "Shimmer Effect" + icon_file = 'icons/effects/shimmer.dmi' + json_config = 'code/datums/greyscale/json_configs/material_effects/shimmer.json' diff --git a/code/datums/greyscale/json_configs/items/cleric_mace.json b/code/datums/greyscale/json_configs/items/cleric_mace.json new file mode 100644 index 00000000000..781c790ea6a --- /dev/null +++ b/code/datums/greyscale/json_configs/items/cleric_mace.json @@ -0,0 +1,28 @@ +{ + "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" + } + ] +} diff --git a/code/datums/greyscale/json_configs/items/cleric_mace_gold.json b/code/datums/greyscale/json_configs/items/cleric_mace_gold.json new file mode 100644 index 00000000000..8ca0ba3b607 --- /dev/null +++ b/code/datums/greyscale/json_configs/items/cleric_mace_gold.json @@ -0,0 +1,46 @@ +{ + "default": [ + { + "type": "reference", + "reference_type": "/datum/greyscale_config/cleric_mace", + "icon_state": "default", + "blend_mode": "overlay", + "color_ids": [ 1 ] + }, + [ + { + "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 ] + }, + [ + { + "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 new file mode 100644 index 00000000000..aafdb2d897e --- /dev/null +++ b/code/datums/greyscale/json_configs/items/cleric_mace_lefthand.json @@ -0,0 +1,10 @@ +{ + "default": [ + { + "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 new file mode 100644 index 00000000000..9372b4b0551 --- /dev/null +++ b/code/datums/greyscale/json_configs/items/cleric_mace_lefthand_gold.json @@ -0,0 +1,24 @@ +{ + "default": [ + { + "type": "reference", + "reference_type": "/datum/greyscale_config/cleric_mace_lefthand", + "icon_state": "default", + "blend_mode": "overlay", + "color_ids": [ 1 ] + }, + [ + { + "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 new file mode 100644 index 00000000000..d80b0c49a25 --- /dev/null +++ b/code/datums/greyscale/json_configs/items/cleric_mace_righthand.json @@ -0,0 +1,10 @@ +{ + "default": [ + { + "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 new file mode 100644 index 00000000000..d91f1c0800c --- /dev/null +++ b/code/datums/greyscale/json_configs/items/cleric_mace_righthand_gold.json @@ -0,0 +1,24 @@ +{ + "default": [ + { + "type": "reference", + "reference_type": "/datum/greyscale_config/cleric_mace_righthand", + "icon_state": "default", + "blend_mode": "overlay", + "color_ids": [ 1 ] + }, + [ + { + "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 new file mode 100644 index 00000000000..c49a829aa2c --- /dev/null +++ b/code/datums/greyscale/json_configs/items/cleric_mace_worn.json @@ -0,0 +1,15 @@ +{ + "default": [ + { + "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 new file mode 100644 index 00000000000..9ea1c0b5cbc --- /dev/null +++ b/code/datums/greyscale/json_configs/items/cleric_mace_worn_gold.json @@ -0,0 +1,23 @@ +{ + "default": [ + { + "type": "reference", + "reference_type": "/datum/greyscale_config/cleric_mace_worn", + "blend_mode": "overlay", + "color_ids": [ 1 ] + }, + [ + { + "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/material_effects/shimmer.json b/code/datums/greyscale/json_configs/material_effects/shimmer.json new file mode 100644 index 00000000000..64e2168e5c2 --- /dev/null +++ b/code/datums/greyscale/json_configs/material_effects/shimmer.json @@ -0,0 +1,10 @@ +{ + "": [ + { + "type": "icon_state", + "icon_state": "animation", + "blend_mode": "overlay", + "color_ids": [ 1 ] + } + ] +} diff --git a/code/datums/greyscale/layer.dm b/code/datums/greyscale/layer.dm index c1aa41f7550..91b8f29e289 100644 --- a/code/datums/greyscale/layer.dm +++ b/code/datums/greyscale/layer.dm @@ -15,8 +15,11 @@ /datum/greyscale_layer/New(icon_file, list/json_data) color_ids = json_data["color_ids"] for(var/i in color_ids) - if(!isnum(i)) - CRASH("Color ids must be a positive integer starting from 1, '[i]' is not valid. Make sure it is not quoted in the json configuration.") + if(isnum(i)) + continue + if(istext(i) && i[1] == "#") + continue + CRASH("Color ids must be a color string or positive integer starting from 1, '[i]' is not valid.") blend_mode = blend_modes[lowertext(json_data["blend_mode"])] if(isnull(blend_mode)) CRASH("Greyscale config for [icon_file] is missing a blend mode on a layer.") @@ -26,7 +29,10 @@ /datum/greyscale_layer/proc/Generate(list/colors, list/render_steps) var/list/processed_colors = list() for(var/i in color_ids) - processed_colors += colors[i] + if(isnum(i)) + processed_colors += colors[i] + else + processed_colors += i return InternalGenerate(processed_colors, render_steps) /datum/greyscale_layer/proc/InternalGenerate(list/colors, list/render_steps) @@ -60,13 +66,15 @@ /// A layer created by using another greyscale icon's configuration /datum/greyscale_layer/reference layer_type = "reference" + var/icon_state var/datum/greyscale_config/reference_config /datum/greyscale_layer/reference/New(icon_file, list/json_data) . = ..() + icon_state = json_data["icon_state"] || "" reference_config = SSgreyscale.configurations[json_data["reference_type"]] if(!reference_config) CRASH("An unknown greyscale configuration was given to a reference layer: [json_data["reference_type"]]") /datum/greyscale_layer/reference/InternalGenerate(list/colors, list/render_steps) - return reference_config.Generate(colors.Join(), render_steps) + return icon(reference_config.Generate(colors.Join(), render_steps), icon_state) diff --git a/code/datums/materials/_material.dm b/code/datums/materials/_material.dm index 4816f472882..690fe3224a4 100644 --- a/code/datums/materials/_material.dm +++ b/code/datums/materials/_material.dm @@ -14,7 +14,10 @@ Simple datum which is instanced once per type and is used for every object of sa var/id ///Base color of the material, is used for greyscale. Item isn't changed in color if this is null. + ///Deprecated, use greyscale_color instead. var/color + ///Determines the color palette of the material. Formatted the same as atom/var/greyscale_colors + var/greyscale_colors ///Base alpha of the material, is used for greyscale icons. var/alpha = 255 ///Bitflags that influence how SSmaterials handles this material. @@ -71,6 +74,10 @@ Simple datum which is instanced once per type and is used for every object of sa ADD_KEEP_TOGETHER(source, MATERIAL_SOURCE(src)) source.add_filter("material_texture_[name]",1,layering_filter(icon=cached_texture_filter_icon,blend_mode=BLEND_INSET_OVERLAY)) + if(material_flags & MATERIAL_GREYSCALE) + var/config_path = get_greyscale_config_for(source.greyscale_config) + source.set_greyscale(greyscale_colors, config_path) + if(alpha < 255) source.opacity = FALSE if(material_flags & MATERIAL_ADD_PREFIX) @@ -108,17 +115,29 @@ Simple datum which is instanced once per type and is used for every object of sa for(var/i in current_armor) temp_armor_list[i] = current_armor[i] * armor_modifiers[i] o.armor = getArmor(arglist(temp_armor_list)) + if(!isitem(o)) return - var/obj/item/I = o + var/obj/item/item = o + + if(material_flags & MATERIAL_GREYSCALE) + var/worn_path = get_greyscale_config_for(item.greyscale_config_worn) + var/lefthand_path = get_greyscale_config_for(item.greyscale_config_inhand_left) + var/righthand_path = get_greyscale_config_for(item.greyscale_config_inhand_right) + item.set_greyscale( + new_worn_config = worn_path, + new_inhand_left = lefthand_path, + new_inhand_right = righthand_path + ) + if(!item_sound_override) return - I.hitsound = item_sound_override - I.usesound = item_sound_override - I.mob_throw_hit_sound = item_sound_override - I.equip_sound = item_sound_override - I.pickup_sound = item_sound_override - I.drop_sound = item_sound_override + item.hitsound = item_sound_override + item.usesound = item_sound_override + item.mob_throw_hit_sound = item_sound_override + item.equip_sound = item_sound_override + item.pickup_sound = item_sound_override + item.drop_sound = item_sound_override /datum/material/proc/on_applied_turf(turf/T, amount, material_flags) if(isopenturf(T)) @@ -132,6 +151,14 @@ Simple datum which is instanced once per type and is used for every object of sa T.AddElement(/datum/element/turf_z_transparency, TRUE) return +/datum/material/proc/get_greyscale_config_for(datum/greyscale_config/config_path) + if(!config_path) + return + for(var/datum/greyscale_config/path as anything in subtypesof(config_path)) + if(type != initial(path.material_skin)) + continue + return path + ///This proc is called when the material is removed from an object. /datum/material/proc/on_removed(atom/source, amount, material_flags) if(material_flags & MATERIAL_COLOR) //Prevent changing things with pre-set colors, to keep colored toolboxes their looks for example @@ -142,6 +169,9 @@ Simple datum which is instanced once per type and is used for every object of sa REMOVE_KEEP_TOGETHER(source, MATERIAL_SOURCE(src)) source.alpha = initial(source.alpha) + if(material_flags & MATERIAL_GREYSCALE) + source.set_greyscale(initial(source.greyscale_colors), initial(source.greyscale_config)) + if(material_flags & MATERIAL_ADD_PREFIX) source.name = initial(source.name) @@ -162,6 +192,14 @@ Simple datum which is instanced once per type and is used for every object of sa o.force = initial(o.force) o.throwforce = initial(o.throwforce) + if(isitem(o) && (material_flags & MATERIAL_GREYSCALE)) + var/obj/item/item = o + item.set_greyscale( + new_worn_config = initial(item.greyscale_config_worn), + new_inhand_left = initial(item.greyscale_config_inhand_left), + new_inhand_right = initial(item.greyscale_config_inhand_right) + ) + /datum/material/proc/on_removed_turf(turf/T, amount, material_flags) if(alpha < 255) T.RemoveElement(/datum/element/turf_z_transparency, FALSE) diff --git a/code/datums/materials/alloys.dm b/code/datums/materials/alloys.dm index ffcc40ad44c..96ab370d640 100644 --- a/code/datums/materials/alloys.dm +++ b/code/datums/materials/alloys.dm @@ -31,6 +31,7 @@ name = "plasteel" desc = "The heavy duty result of infusing iron with plasma." color = "#706374" + greyscale_colors = "#706374" init_flags = MATERIAL_INIT_MAPLOAD value_per_unit = 0.135 strength_modifier = 1.25 @@ -63,6 +64,7 @@ name = "plastitanium" desc = "The extremely heat resistant result of infusing titanium with plasma." color = "#3a313a" + greyscale_colors = "#3a313a" init_flags = MATERIAL_INIT_MAPLOAD value_per_unit = 0.225 strength_modifier = 0.9 // It's a lightweight alloy. @@ -80,6 +82,7 @@ name = "plasmaglass" desc = "Plasma-infused silicate. It is much more durable and heat resistant than either of its component materials." color = "#ff80f4" + greyscale_colors = "#ff80f4" alpha = 150 init_flags = MATERIAL_INIT_MAPLOAD integrity_modifier = 0.5 @@ -98,6 +101,7 @@ name = "titanium glass" desc = "A specialized silicate-titanium alloy that is commonly used in shuttle windows." color = "#cfbee0" + greyscale_colors = "#cfbee0" alpha = 150 init_flags = MATERIAL_INIT_MAPLOAD armor_modifiers = list(MELEE = 1.2, BULLET = 1.2, LASER = 0.8, ENERGY = 0.8, BOMB = 0.5, BIO = 1.2, RAD = 1, FIRE = 0.8, ACID = 2) @@ -115,6 +119,7 @@ name = "plastitanium glass" desc = "A specialized silicate-plastitanium alloy." color = "#5d3369" + greyscale_colors = "#5d3369" alpha = 150 init_flags = MATERIAL_INIT_MAPLOAD integrity_modifier = 1.1 @@ -135,6 +140,7 @@ name = "alien alloy" desc = "An extremely dense alloy similar to plasteel in composition. It requires exotic metallurgical processes to create." color = "#6041aa" + greyscale_colors = "#6041aa" init_flags = MATERIAL_INIT_MAPLOAD strength_modifier = 1.5 // It's twice the density of plasteel and just as durable. Getting hit with it is going to HURT. integrity_modifier = 1.5 diff --git a/code/datums/materials/basemats.dm b/code/datums/materials/basemats.dm index b4490c66843..7aa35fbe355 100644 --- a/code/datums/materials/basemats.dm +++ b/code/datums/materials/basemats.dm @@ -3,6 +3,7 @@ name = "iron" desc = "Common iron ore often found in sedimentary and igneous layers of the crust." color = "#878687" + greyscale_colors = "#878687" 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 @@ -16,6 +17,7 @@ name = "glass" desc = "Glass forged by melting sand." color = "#88cdf1" + greyscale_colors = "#88cdf1" alpha = 150 categories = list(MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_BASE_RECIPES = TRUE, MAT_CATEGORY_ITEM_MATERIAL=TRUE) integrity_modifier = 0.1 @@ -39,6 +41,7 @@ Unless you know what you're doing, only use the first three numbers. They're in name = "silver" desc = "Silver" color = list(255/255, 284/255, 302/255,0, 0,0,0,0, 0,0,0,0, 0,0,0,1, 0,0,0,0) + greyscale_colors = "#e3f1f8" 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/silver value_per_unit = 0.025 @@ -53,6 +56,7 @@ Unless you know what you're doing, only use the first three numbers. They're in name = "gold" desc = "Gold" color = list(340/255, 240/255, 50/255,0, 0,0,0,0, 0,0,0,0, 0,0,0,1, 0,0,0,0) //gold is shiny, but not as bright as bananium + greyscale_colors = "#dbdd4c" strength_modifier = 1.2 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/gold @@ -69,6 +73,7 @@ Unless you know what you're doing, only use the first three numbers. They're in name = "diamond" desc = "Highly pressurized carbon" color = list(48/255, 272/255, 301/255,0, 0,0,0,0, 0,0,0,0, 0,0,0,1, 0,0,0,0) + greyscale_colors = "#71c8f7" 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/diamond alpha = 132 @@ -85,6 +90,7 @@ Unless you know what you're doing, only use the first three numbers. They're in name = "uranium" desc = "Uranium" color = rgb(48, 237, 26) + greyscale_colors = rgb(48, 237, 26) 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/uranium value_per_unit = 0.05 @@ -109,6 +115,7 @@ Unless you know what you're doing, only use the first three numbers. They're in name = "plasma" desc = "Isn't plasma a state of matter? Oh whatever." color = list(298/255, 46/255, 352/255,0, 0,0,0,0, 0,0,0,0, 0,0,0,1, 0,0,0,0) + greyscale_colors = "#c162ec" 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/plasma shard_type = /obj/item/shard/plasma @@ -137,6 +144,7 @@ Unless you know what you're doing, only use the first three numbers. They're in name = "bluespace crystal" desc = "Crystals with bluespace properties" color = list(119/255, 217/255, 396/255,0, 0,0,0,0, 0,0,0,0, 0,0,0,1, 0,0,0,0) + greyscale_colors = "#4e7dff" alpha = 200 categories = list(MAT_CATEGORY_ORE = TRUE) beauty_modifier = 0.5 @@ -153,6 +161,7 @@ Unless you know what you're doing, only use the first three numbers. They're in name = "bananium" desc = "Material with hilarious properties" color = list(460/255, 464/255, 0, 0, 0,0,0,0, 0,0,0,0, 0,0,0,1, 0,0,0,0) //obnoxiously bright yellow + greyscale_colors = "#ffff00" 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/bananium value_per_unit = 0.5 @@ -179,6 +188,7 @@ Unless you know what you're doing, only use the first three numbers. They're in name = "titanium" desc = "Titanium" color = "#b3c0c7" + greyscale_colors = "#b3c0c7" strength_modifier = 1.3 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 @@ -194,6 +204,7 @@ Unless you know what you're doing, only use the first three numbers. They're in name = "runite" desc = "Runite" color = "#3F9995" + greyscale_colors = "#3F9995" strength_modifier = 1.3 categories = list(MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_BASE_RECIPES = TRUE, MAT_CATEGORY_ITEM_MATERIAL=TRUE) sheet_type = /obj/item/stack/sheet/mineral/runite @@ -210,6 +221,7 @@ Unless you know what you're doing, only use the first three numbers. They're in name = "plastic" desc = "Plastic" color = "#caccd9" + greyscale_colors = "#caccd9" strength_modifier = 0.85 sheet_type = /obj/item/stack/sheet/plastic categories = list(MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_BASE_RECIPES = TRUE, MAT_CATEGORY_ITEM_MATERIAL=TRUE) @@ -227,6 +239,7 @@ Unless you know what you're doing, only use the first three numbers. They're in name = "biomass" desc = "Organic matter" color = "#735b4d" + greyscale_colors = "#735b4d" strength_modifier = 0.8 value_per_unit = 0.025 @@ -234,6 +247,7 @@ Unless you know what you're doing, only use the first three numbers. They're in name = "wood" desc = "Flexible, durable, but flamable. Hard to come across in space." color = "#bb8e53" + greyscale_colors = "#bb8e53" strength_modifier = 0.5 sheet_type = /obj/item/stack/sheet/mineral/wood categories = list(MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_BASE_RECIPES = TRUE, MAT_CATEGORY_ITEM_MATERIAL=TRUE) @@ -266,6 +280,7 @@ Unless you know what you're doing, only use the first three numbers. They're in name = "adamantine" desc = "A powerful material made out of magic, I mean science!" color = "#6d7e8e" + greyscale_colors = "#6d7e8e" strength_modifier = 1.5 categories = list(MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_BASE_RECIPES = TRUE, MAT_CATEGORY_ITEM_MATERIAL=TRUE) sheet_type = /obj/item/stack/sheet/mineral/adamantine @@ -282,6 +297,7 @@ Unless you know what you're doing, only use the first three numbers. They're in name = "mythril" desc = "How this even exists is byond me" color = "#f2d5d7" + greyscale_colors = "#f2d5d7" categories = list(MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_BASE_RECIPES = TRUE, MAT_CATEGORY_ITEM_MATERIAL=TRUE) sheet_type = /obj/item/stack/sheet/mineral/mythril value_per_unit = 0.75 @@ -308,6 +324,7 @@ Unless you know what you're doing, only use the first three numbers. They're in name = "hot ice" desc = "A weird kind of ice, feels warm to the touch" color = "#88cdf1" + greyscale_colors = "#88cdf1" alpha = 150 categories = list(MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_ITEM_MATERIAL=TRUE) sheet_type = /obj/item/stack/sheet/hot_ice @@ -331,6 +348,7 @@ Unless you know what you're doing, only use the first three numbers. They're in name = "Metal Hydrogen" desc = "Solid metallic hydrogen. Some say it should be impossible" color = "#f2d5d7" + greyscale_colors = "#f2d5d7" alpha = 150 categories = list(MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_ITEM_MATERIAL=TRUE) sheet_type = /obj/item/stack/sheet/mineral/metal_hydrogen @@ -348,6 +366,7 @@ Unless you know what you're doing, only use the first three numbers. They're in name = "sand" desc = "You know, it's amazing just how structurally sound sand can be." color = "#EDC9AF" + greyscale_colors = "#EDC9AF" categories = list(MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_ITEM_MATERIAL=TRUE) sheet_type = /obj/item/stack/sheet/sandblock value_per_unit = 0.001 @@ -367,6 +386,7 @@ Unless you know what you're doing, only use the first three numbers. They're in name = "sandstone" desc = "Bialtaakid 'ant taerif ma hdha." color = "#B77D31" + greyscale_colors = "#B77D31" categories = list(MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_ITEM_MATERIAL=TRUE) sheet_type = /obj/item/stack/sheet/mineral/sandstone value_per_unit = 0.0025 @@ -379,6 +399,7 @@ Unless you know what you're doing, only use the first three numbers. They're in name = "snow" desc = "There's no business like snow business." color = "#FFFFFF" + greyscale_colors = "#FFFFFF" categories = list(MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_ITEM_MATERIAL=TRUE) sheet_type = /obj/item/stack/sheet/mineral/snow value_per_unit = 0.0025 @@ -395,6 +416,7 @@ Unless you know what you're doing, only use the first three numbers. They're in name = "runed metal" desc = "Mir'ntrath barhah Nar'sie." color = "#3C3434" + greyscale_colors = "#3C3434" categories = list(MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_ITEM_MATERIAL=TRUE) sheet_type = /obj/item/stack/sheet/runed_metal value_per_unit = 0.75 @@ -411,6 +433,7 @@ Unless you know what you're doing, only use the first three numbers. They're in name = "bronze" desc = "Clock Cult? Never heard of it." color = "#92661A" + greyscale_colors = "#92661A" categories = list(MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_ITEM_MATERIAL=TRUE) sheet_type = /obj/item/stack/sheet/bronze value_per_unit = 0.025 @@ -421,6 +444,7 @@ Unless you know what you're doing, only use the first three numbers. They're in name = "paper" desc = "Ten thousand folds of pure starchy power." color = "#E5DCD5" + greyscale_colors = "#E5DCD5" categories = list(MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_ITEM_MATERIAL=TRUE) sheet_type = /obj/item/stack/sheet/paperframes value_per_unit = 0.0025 @@ -446,6 +470,7 @@ Unless you know what you're doing, only use the first three numbers. They're in name = "cardboard" desc = "They say cardboard is used by hobos to make incredible things." color = "#5F625C" + greyscale_colors = "#5F625C" categories = list(MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_ITEM_MATERIAL=TRUE) sheet_type = /obj/item/stack/sheet/cardboard value_per_unit = 0.003 @@ -469,6 +494,7 @@ Unless you know what you're doing, only use the first three numbers. They're in name = "bone" desc = "Man, building with this will make you the coolest caveman on the block." color = "#e3dac9" + greyscale_colors = "#e3dac9" categories = list(MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_ITEM_MATERIAL=TRUE) sheet_type = /obj/item/stack/sheet/bone value_per_unit = 0.05 @@ -479,6 +505,7 @@ Unless you know what you're doing, only use the first three numbers. They're in name = "bamboo" desc = "If it's good enough for pandas, it's good enough for you." color = "#339933" + greyscale_colors = "#339933" categories = list(MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_ITEM_MATERIAL=TRUE) sheet_type = /obj/item/stack/sheet/mineral/bamboo value_per_unit = 0.0025 @@ -491,6 +518,7 @@ Unless you know what you're doing, only use the first three numbers. They're in name = "zaukerite" desc = "A light absorbing crystal" color = COLOR_ALMOST_BLACK + greyscale_colors = COLOR_ALMOST_BLACK categories = list(MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_ITEM_MATERIAL=TRUE) sheet_type = /obj/item/stack/sheet/mineral/zaukerite value_per_unit = 0.45 diff --git a/code/datums/materials/hauntium.dm b/code/datums/materials/hauntium.dm index abee58f7216..43003c356e7 100644 --- a/code/datums/materials/hauntium.dm +++ b/code/datums/materials/hauntium.dm @@ -2,6 +2,7 @@ name = "hauntium" desc = "very scary!" color = list(460/255, 464/255, 460/255, 0, 0,0,0,0, 0,0,0,0, 0,0,0,1, 0,0,0,0) + greyscale_colors = "#FFFFFF" alpha = 100 categories = list(MAT_CATEGORY_ITEM_MATERIAL=TRUE) sheet_type = /obj/item/stack/sheet/hauntium diff --git a/code/datums/materials/meat.dm b/code/datums/materials/meat.dm index 64e67794731..281082fe350 100644 --- a/code/datums/materials/meat.dm +++ b/code/datums/materials/meat.dm @@ -6,6 +6,7 @@ desc = "Meat" id = /datum/material/meat // So the bespoke versions are categorized under this color = rgb(214, 67, 67) + greyscale_colors = rgb(214, 67, 67) categories = list(MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_BASE_RECIPES = TRUE, MAT_CATEGORY_ITEM_MATERIAL=TRUE) sheet_type = /obj/item/stack/sheet/meat value_per_unit = 0.05 diff --git a/code/datums/materials/pizza.dm b/code/datums/materials/pizza.dm index 3a1e0cd7f78..dcd140d1ea3 100644 --- a/code/datums/materials/pizza.dm +++ b/code/datums/materials/pizza.dm @@ -4,6 +4,7 @@ name = "pizza" desc = "~Jamme, jamme, n'coppa, jamme ja! Jamme, jamme, n'coppa jamme ja, funi-culi funi-cala funi-culi funi-cala!! Jamme jamme ja funiculi funicula!~" color = "#FF9F23" + greyscale_colors = "#FF9F23" categories = list(MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_BASE_RECIPES = TRUE, MAT_CATEGORY_ITEM_MATERIAL=TRUE) sheet_type = /obj/item/stack/sheet/pizza value_per_unit = 0.05 diff --git a/code/game/objects/items/melee/misc.dm b/code/game/objects/items/melee/misc.dm index f9b9195104e..e7a0b5c4cde 100644 --- a/code/game/objects/items/melee/misc.dm +++ b/code/game/objects/items/melee/misc.dm @@ -681,13 +681,18 @@ /obj/item/melee/cleric_mace name = "cleric mace" desc = "The grandson of the club, yet the grandfather of the baseball bat. Most notably used by holy orders in days past." - icon = 'icons/obj/items_and_weapons.dmi' - icon_state = "mace_greyscale" - inhand_icon_state = "mace_greyscale" - worn_icon_state = "mace" - lefthand_file = 'icons/mob/inhands/weapons/melee_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/melee_righthand.dmi' - material_flags = MATERIAL_ADD_PREFIX | MATERIAL_COLOR | MATERIAL_AFFECT_STATISTICS //Material type changes the prefix as well as the color. + icon = 'icons/obj/items/cleric_mace.dmi' + icon_state = "default" + inhand_icon_state = "default" + worn_icon_state = "default_worn" + + greyscale_config = /datum/greyscale_config/cleric_mace + greyscale_config_inhand_left = /datum/greyscale_config/cleric_mace_lefthand + greyscale_config_inhand_right = /datum/greyscale_config/cleric_mace_righthand + greyscale_config_worn = /datum/greyscale_config/cleric_mace + greyscale_colors = "#FFFFFF" + + material_flags = MATERIAL_ADD_PREFIX | MATERIAL_GREYSCALE | MATERIAL_AFFECT_STATISTICS //Material type changes the prefix as well as the color. custom_materials = list(/datum/material/iron = 12000) //Defaults to an Iron Mace. slot_flags = ITEM_SLOT_BELT force = 14 @@ -697,11 +702,3 @@ armour_penetration = 50 attack_verb_continuous = list("smacks", "strikes", "cracks", "beats") attack_verb_simple = list("smack", "strike", "crack", "beat") - var/overlay_state = "mace_handle" - var/mutable_appearance/overlay - -/obj/item/melee/cleric_mace/Initialize() - . = ..() - overlay = mutable_appearance(icon, overlay_state) - overlay.appearance_flags = RESET_COLOR | RESET_ALPHA | KEEP_APART - add_overlay(overlay) diff --git a/icons/effects/shimmer.dmi b/icons/effects/shimmer.dmi new file mode 100644 index 0000000000000000000000000000000000000000..cf464371c8151c366c9dbc96e7140f667b6ff2cd GIT binary patch literal 1509 zcma)6e^Al~6#p(UzhS9}`6CpRG<8n2w31Lzh9tUhX;ZHJfqB|&{Sae9sc3=;GsPcm z*2G+%Wvw(lt+Y@?O>)jiOG^)ul#Ig$gFiaCUamCg^)tE(4nog4*DE zmVu;Pb&@~JyU~3QB)_V=)!g|5F2pZTzb*fanWO`HuCWlhI4+@IR125fr%}_}UCon| z>-ENb93K_!D(wRReM<_-?*LmgSK4%1K{L}Aw(nEwO(zna_uI_+9Rfr-JFgqzOt(Il z2F}v`ty-f3M^w1%jxP?U8}YWQQUU)c?;){R47NP1Is{B?`XqDnI*1Dd3H3s()s(pO1!!@XLVG?Jm)rQwvX*|E~voSL!4l0ym4-1g~X+m2gJsY zB%8$G3{o-@xEFE!n%uVIt(kDO{d>TSP!ncnNaYoIdnOlD<64ytUWcWE#KP(4wr_ae2_~jP+5{wQC8J4^?0hLK_U?zN<@ps7Q;ymw5qTI!^@Kg z*c1}GuuT!k5PZz)+a4%(z%9IcZfFYm8mH`cN()iLh=7_^OyU{fF6_SMh+&t9svTfz zKcf^DIUqtqs%#BHw{{w#PIMQ1L>5`&m56N&DZCWwCIAWFUaZINAI)^!vpLEX#+h_K z&AQdDAI$tzY>ytANqn+=>?1vGkF}UU|9}jk^Qt12vDSC|;?@c@o?>pf)Y{*JPBrmk1mhb-Js;2R0ureYvzI(K!X|VS4A|vZ>l~092`#%02164y+Ylh)8dz%n7WB_;k52$n7Z*%`FBCWn(;*fz zh${eqxhWVBxu78Drt>jtZEbCTe}8*>drp(R!y)a!z(7q+%@Ze1z~ON2R|PtX{HRcZ zx$Q<=l7?GJpie3iPeaLMa&mHVy0t`ESy^^=Hi1CkU<^0__XEhuaV#t>TwPtgy}dCQ zOjuZ$hK9xw8yjJ9a`ZvxR(-Lw=`Bw$ zs*s?Nw(z+$vtELW--2V}+`ye~fnrV(@AU&moSuH_G@osXs7>%6#*Z-A0eDElYFdt_ zE#n+QQSrn8dQg97kGvb-lS4D)yHb(@b?3Hn5?pM(F`v+r2gAyaj%7YhE_i7a^fHC+ zmFgdC_0`%_t-F-iW`8p3*`rQAoC!tl>qPcAbgltOe*cHkBF|-GxM{C^w)L@S`TUj( zYDT9g)T>kwq~N^x-0M;F2P5JSlqt%AB1-J$;EuYPwurVFH&iX^h2${bNQ`C~s$V70 zvfuY%*Y`z{VRF_M&!YrD*{K{<2ms<3ha-pGV;@i-{uwx2Bb9b9o;vl^=Ynm2&On4i zZnghlQ?(D;(6NETd7<_#hc5?pHF_Vzeqc56ro+8W)cYo&)KEb2HdoHSFU7hD;HAZ> zlfdQ3d<(gxD`%D zRHrH;O{HEzCRbE`RKy;XdL=qpr7{`b`t+?97P*qT-Fve`2Ft`*87iMiVq4#t(+=oQ zyQf8--XNPLK3bycC%I>S&3($z(6* zAx57rZ*}THI9Ag2M&J67XsON z-WiifF)8gwAMkv*XN!jnO|xzusFHT{(>n)SMWXRu>;%m$=`U1qF|8uDxLAE^+~}j{ z34KZFq#mYTv-vc^%`&UH5~dL=;5>B=EK^Jm{Lg;=H}a^bQQ)!mQ`M1s1w}t* z3V%ph;+KUun=33;Yg#C;R=c6%8Q;L}-)WM#(c~H+SQdh=*=?ekNpxs}_X|FdJc{d0 z?%!#m*@YUQiqiX={2m1M)$ks_

WJJ^uYZ%HiUU(g?y+K)p>B_l9*E{H$+RuJD-i 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 diff --git a/icons/mob/inhands/weapons/melee_righthand.dmi b/icons/mob/inhands/weapons/melee_righthand.dmi index dcedd8117a2ed2031f785f078f0cc230aec735e8..4920754a1634eef758c74e8b724a04f9e793f9c0 100644 GIT binary patch literal 5093 zcmaJ^c|26>|35Qh?4q$1HG-XQafH!~p=1 zI(PQu1pt6UBpeV$K-1g&{qLcv4SU|<6bOPNF~>n~JsOQhAP{n?4@7qA^!N97rk_yN zwH|1QYoXneMyY)I@Wk#1%O}YR+S=MU9PaGdvtYy7a|YTT9v)g+S~fN|7z_py>0!NN zqC^dSai`lI1&q0DilYks+A$`R866#c&r-IqurMhpsi~<6OxFVeJtZX&1b_<{E|{8{ zo<4p0^5x4nZ{F0@)J#uLKWSxUVq&7NukYaCU>*eOrGt9jAlL~U3NJqYr1MJgcp!b& zFuwj#_bjBpl$6x+&%j%4X3Z2yBUksL5vC|>8JZC-na$xK5~4FNY& z&EWFgt5pfBamiYzxV~;GDmMKogGVL1l`kT54W^k7<>f?beZM9Xu%|Akx2KGMf3xs3 z>z8NIPm1(Ci^v@3Se%#nfTh!cE*ib%tmCbMryWSD(U{V}=cK=m&DIl{@9fnU5y6I- z6FtgFmOtE9PHXl*pnvW2!OHz^qh6^IkK%7}G8w4MePjDPcBt_iz24VOw*<9JUnJF# zUdW9g8KGK*q~84=X1!OlI)@i`j4%_wBAya}eYVB03;@{q_S{Jehp^0rEI)$sDOB8V zQm_b)>gI)v5~$>tFH;>t1;0K675;iaGS&_O2_`{W)s5 zayJC$_A@V8-6suP2>eZ()Ltt#`h-`U*5)`dDh?{XioL}5lkX|a)MndLeB6s2Zjc-& zuGR)cJtgZ`Dm|&TUU1@78yY+{<^E_SCV$VNd}Io(BsxyR&|v7& zC+_}(U|U0dXqGtMGACi3cQC)KbBSTyMY1+uInA2yG9w5@?Ca=@^fmnQv3}#Z6D&ki zjx)cy#$|H0Dm`gx6T+h)m1Dj_aY*%`MdR98e!6^R{kiyAKP7 zO=w_EPN1D&7pI_M?me*t9(bLvC(m-L9nQFPLoHN2OkeKaFK2Ct$kEQN4JXY0iqL9v zM7Wz!NnB)-{qvb((%~+!lV@!9irs?Myg-bxWiS8PeLC-ePt^CvZH4}6pMTA2t^7v; zMHnjPaJo%^U+7v&Tq?6<6(H6`XT6#S)Mw-(EeJ^2gxblR% zf!uJKWS6KUauOL;0EpZWiidOmK?!$CoZO1~Y{0GDLJaRYT4RmbkH_{@OW^UTq_gh0 zzp2NVBLxymdY}Or6A`EM#&HmFm^`oInK10{E`97|fH>iyJb2cOY!BT3JpfK_SJCN5 z_zlILlQ`;sQIjseAv@e$6|L#x5Dq#>7yV^Te}t@&XTpolHQ z#PM-ufbSAznp{-`7}5adUTsqN0^4bxU`EjDk;5udqope>jSvaD?MYGO#~3!Ou7Gre zEFw0+azQ`ZN%~*~n>Ui9KUnP!W_s^~Im^10a1CU|{srLQ1V-A|@6QtMYCkU#?Ka=- zw1MVFmZRMm;Mdg_eq=CMFi79)TS?Ym{++X$B8G3*skvn3K4^F?&ege)KTsxN8%(^2 zX^^<2=$->F*h8L$dkW>VA!0^y|6Hj?*{b?cS905C#%p*Adk}@yg_)q?v6VYIGs1bh zGvj2$-=_i`(esbpBY=U#od4Esdp&K%yVC6I7PC3{xu2)I(fXoW1S?SY|0OAj)J0;g ziBp5vFx!SUnpHn1hLr{yOhT(~P@e=HPa^Mtm2WSGDbjYiR4Z14NzU~@cb|PNLtT<%xeL3%eFa;YDzMl+KB6?Xw8UlzY{w$1$0%oC z>pT9IRe_;8Pd!M~1+r?0l*&_sIDI3|<`Q&}E$lR{;b!15#Av1qIUZ97JiFp3-ZNtN zXn4pPlQ5hed373A{i{4AR07LCjPbX_1z!#kRSD1XMY_N@;YFPoTV?GY8Co%LPoL_6 zeDBQ~QjQU5k3>4BlQRt~pg5XUHCVzSEXi-jRz!_n;pSYZTGS)-n8=40wPhsw7-L!Y zF&9~7$Kja3x&Km2Ia5fnQLL85_o{&dUXaC|_YEc>N;ef8acgWfyAfjvsxVLvnFj=yqxXXVZJ_+(YRs zTZ<%!6=lAS?AJYmcHEHodyF=u-=~)%atZ7`sh8fDhuT3md`PiVW5)g5g!E~+7eS~q zh0X4q{-jNB$dgY%UVRZxnlq|~2f)6_>8Oy;#EIWIJOzQka`}L`+FC2`Bax5_d=WK0 z;=syD1+;rm_-r ziQl@gVcecj;e{=32k*=5Dy&ZsSxc|cxZ=`9Fbnc&fe)-p9`8et`W z4T>KZ8s~?xC3A7`@pXJT8W(L&f?hH;971tz;xC2z_+j5tFiogR&#US0TpAnGIPyCr z2+EKGcM_xVIIA&@8@Aq%tGM-S__j+P7uq4diL*&3Kc-)6rYuU%HmAcZ$#;>wyV;G9 z|BW7*X0ERlW31dEk#a0nCuttM~?e_kQ^De zn+|jSs&sS%pt^-ksMF6xh9<(GF8|uGQ_c= z4Xc)#t75VNb~R9L;)F)rlf|A*IL$eW7jfYv}Dfsb_eJ@nIrhenhe2;O6m5feL$T-u7=(rS?1jymk&-Ke<>?>UVCE)lG(Q#Y zMK8J~-W<`nMD!a%7SuICffrXOQHCY=KEMRSj=_63 zdmqs62q!~5(-3E8S_$2gXM=Ww1`GdHYY9F&?Wxeaw*n!ba) zNR;Z}DLXqknh6B8x9Z+HpL!MkXUejJEI!Q3LuygsKkvLv@4CBL9n;?^ z#MW&or*fOf6`plf&t$0NQjVqIhTR0H3=P*rK$iCp^Jgtm@2ee_Iu1- z(ok0Yh#vOCu}5bu?$QaNmMyu0`bImCc`mmmn!x)qy!&jukb_w)BdTY{cwloZWwK{0 z;Pi>sR`WMMmEyu;{&+Q3h(DD5^6pg7u>j=xS}{hv8D{dt02cUj6_)%tJP%9F%?^(V zggr;&BFstakv}CzOp3L`|Ko;bc{R-9q zwMxmP@aIOfRTbq8T0`^JB3E5Mug1S?a&l0)j#6Mo6C<+yZ%1$P`c1*Ms;v#p1fp)^ z1=#bg>iv`VTb?qrW*&FEQA*yUvzih(HbGpEWrtf^EOd7}VUB@P_c)1Y{*W86N{QZV zt21u2cKGhTYF!KXrn3?Zw}Q6WIbn>!@^{yhcE85K-i6kxisfpnrGt-ShA9+AemJ+O z@EuQ{VYnHdK1Jyby=ICZ729%>mkt4!`i|Xsrsy z#BxP8r6as?*Vl=OIJ#(@4PN8Q#g~!nt?OzEyF9KguAON`>85hDX5G40-HIYRQq5I! z%EY?5DNTh{uQR74DBU>MY`~HnfxN>VbCJic7hK^OMs}Qvv-z>{ymKDoH&YNC^Q-m~ zo$fx9Hb4oC!r2e0l{#MTc=e^iH%dhUV)t-+TjVBz>U-(4&X{QPm`{|F{No5u^F(Cd zl=?Jp=2nIL!%nbIo;AVgPrW2oj*e=X>r##zWPci0`Up>RW?7?e4>VkGO1$~Vvs07E z^K)ByGZzsAf0i~%X;i9dYMjv_88#Us%zl*J^>&TFHW@IB`E3LM`Uj6Mgkr{0SE-0H#Yw|mcFW$nd+9#94z2qG-CHy7U<&b&dxuu; v!BoL~uHazC_MG3^z3Pejw-o{4=o1ir#!vWZNVI6JfPe0k?a2~L_n7|!GyYQK literal 5231 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 literal 0 HcmV?d00001 diff --git a/tgstation.dme b/tgstation.dme index c9cde63de58..a14c70741c4 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -772,8 +772,9 @@ #include "code\datums\elements\food\processable.dm" #include "code\datums\elements\food\venue_price.dm" #include "code\datums\greyscale\_greyscale_config.dm" -#include "code\datums\greyscale\greyscale_configs.dm" #include "code\datums\greyscale\layer.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" #include "code\datums\helper_datums\getrev.dm" #include "code\datums\helper_datums\icon_snapshot.dm"