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 00000000000..cf464371c81 Binary files /dev/null and b/icons/effects/shimmer.dmi differ diff --git a/icons/mob/inhands/weapons/melee_lefthand.dmi b/icons/mob/inhands/weapons/melee_lefthand.dmi index 52a52f72aa5..e40e7ed8572 100644 Binary files a/icons/mob/inhands/weapons/melee_lefthand.dmi and b/icons/mob/inhands/weapons/melee_lefthand.dmi differ diff --git a/icons/mob/inhands/weapons/melee_righthand.dmi b/icons/mob/inhands/weapons/melee_righthand.dmi index dcedd8117a2..4920754a163 100644 Binary files a/icons/mob/inhands/weapons/melee_righthand.dmi and b/icons/mob/inhands/weapons/melee_righthand.dmi differ diff --git a/icons/obj/items/cleric_mace.dmi b/icons/obj/items/cleric_mace.dmi new file mode 100644 index 00000000000..3dc90bf10c4 Binary files /dev/null and b/icons/obj/items/cleric_mace.dmi differ 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"