From cb51a652a9ca35d487ebfc2cf163d01d9ec507fc Mon Sep 17 00:00:00 2001 From: Bloop <13398309+vinylspiders@users.noreply.github.com> Date: Sat, 24 May 2025 18:21:02 -0400 Subject: [PATCH] Adds automatic GAGS icon generation for mapping and the loadout menu (#90940) ## About The Pull Request Revival of https://github.com/tgstation/tgstation/pull/86482, which is even more doable now that we have rustg iconforge generation. What this PR does: - Sets up every single GAGS icon in the game to have their own preview icon autogenerated during compile. This is configurable to not run during live. The icons are created in `icons/map_icons/..` - This also has the side effect of providing accurate GAGS icons for things like the loadout menu. No more having to create your own previews. ![FOuGL6ofxC](https://github.com/user-attachments/assets/e5414971-7f13-4883-9f7f-a8a212b46fe8)
Mappers rejoice! ![StrongDMM_1oeMSoRHXT](https://github.com/user-attachments/assets/83dcfe4c-31be-4953-98f3-dff90268bbc4) ![StrongDMM_uyqu3CggPn](https://github.com/user-attachments/assets/7896f99e-2656-40e1-a9da-3a513882365a)
Uses iconforge so it does not take up much time during init ![dreamdaemon_u4Md3Dqwge](https://github.com/user-attachments/assets/17baaff8-5d5e-4a4d-ba8f-9dd548024155)
--- ### Copied from https://github.com/tgstation/tgstation/pull/86482 as this still applies: Note for Spriters: After you've assigned the correct values to vars, you must run the game through init on your local machine and commit the changes to the map icon dmi files. Unit tests should catch all cases of forgetting to assign the correct vars, or not running through init. Note for Server Operators: In order to not generate these icons on live I've added a new config entry which should be disabled on live called GENERATE_ASSETS_IN_INIT in the config.txt ## Why It's Good For The Game No more error icons in SDMM and loadout. ## Changelog :cl: refactor: preview icons for greyscale items are now automatically generated, meaning you can see GAGS as they actually appear ingame while mapping or viewing the loadout menu. /:cl: --------- Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com> --- _maps/RandomRuins/SpaceRuins/film_studio.dmm | 2 +- .../RandomRuins/SpaceRuins/mimesvsclowns.dmm | 4 +- code/__DEFINES/_flags.dm | 2 + .../dcs/signals/signals_subsystem.dm | 2 +- code/_globalvars/bitfields.dm | 4 + .../configuration/entries/general.dm | 3 + code/controllers/master.dm | 1 - code/controllers/subsystem/assets.dm | 2 +- code/controllers/subsystem/atoms.dm | 1 + code/controllers/subsystem/early_assets.dm | 7 +- .../subsystem/greyscale_previews.dm | 122 ++++++++++++++++++ .../subsystem/processing/greyscale.dm | 4 +- .../components/toggle_attached_clothing.dm | 6 +- code/datums/components/toggle_suit.dm | 2 +- .../greyscale_configs/greyscale_items.dm | 8 +- .../greyscale/json_configs/wrap_paper.json | 2 +- .../quirks/positive_quirks/bilingual.dm | 2 +- code/game/atom/atom_appearance.dm | 3 + .../game/atom/atoms_initializing_EXPENSIVE.dm | 3 + code/game/machinery/big_manipulator.dm | 5 +- .../computer/atmos_computers/meters.dm | 3 +- .../dna_infuser/organ_sets/carp_organs.dm | 20 +-- .../dna_infuser/organ_sets/fish_organs.dm | 15 ++- .../dna_infuser/organ_sets/goliath_organs.dm | 20 +-- .../dna_infuser/organ_sets/gondola_organs.dm | 15 ++- .../dna_infuser/organ_sets/rat_organs.dm | 20 +-- .../dna_infuser/organ_sets/roach_organs.dm | 20 +-- .../effects/spawners/random/clothing.dm | 2 +- code/game/objects/items/cigarettes.dm | 14 +- code/game/objects/items/dehy_carp.dm | 2 + .../objects/items/devices/quantum_keycard.dm | 5 +- .../items/devices/radio/encryptionkey.dm | 113 +++++++++++----- code/game/objects/items/melee/misc.dm | 5 +- code/game/objects/items/pet_carrier.dm | 15 ++- code/game/objects/items/piggy_bank.dm | 6 + code/game/objects/items/plushes.dm | 21 ++- code/game/objects/items/stacks/tape.dm | 9 +- code/game/objects/items/stacks/wrap.dm | 3 + code/game/objects/items/tools/screwdriver.dm | 2 + .../objects/structures/beds_chairs/sofa.dm | 16 ++- code/game/objects/structures/maintenance.dm | 1 + code/modules/asset_cache/assets/crafting.dm | 9 +- .../asset_cache/assets/research_designs.dm | 16 +-- .../spritesheet/batched/universal_icon.dm | 2 +- .../atmospherics/machinery/components/tank.dm | 30 ++++- .../components/unary_devices/thermomachine.dm | 27 ++-- .../atmospherics/machinery/other/meter.dm | 8 +- .../machinery/portable/canister.dm | 51 +++++++- .../objects/gimmick_disks/dungeon_disk.dm | 1 + .../modules/capture_the_flag/ctf_equipment.dm | 17 ++- .../medieval_sim/medisim_game.dm | 5 +- code/modules/cargo/packs/costumes_toys.dm | 2 +- .../clothing/chameleon/_chameleon_action.dm | 56 ++++---- .../chameleon/generic_chameleon_clothing.dm | 18 ++- code/modules/clothing/head/beanie.dm | 18 ++- code/modules/clothing/head/collectable.dm | 10 +- code/modules/clothing/head/costume.dm | 12 +- code/modules/clothing/head/fedora.dm | 6 +- code/modules/clothing/head/frenchberet.dm | 20 ++- code/modules/clothing/head/hat.dm | 18 ++- code/modules/clothing/head/jobs.dm | 40 ++++-- code/modules/clothing/head/sombrero.dm | 24 ++-- code/modules/clothing/masks/_masks.dm | 2 +- code/modules/clothing/masks/bandana.dm | 45 +++++-- code/modules/clothing/masks/costume.dm | 8 +- code/modules/clothing/masks/muzzle.dm | 11 +- code/modules/clothing/neck/_neck.dm | 65 +++++++--- code/modules/clothing/shoes/costume.dm | 12 +- code/modules/clothing/shoes/sneakers.dm | 37 ++++-- code/modules/clothing/shoes/wheelys.dm | 12 +- .../modules/clothing/spacesuits/specialops.dm | 4 +- code/modules/clothing/suits/costume.dm | 8 +- code/modules/clothing/suits/ethereal.dm | 6 +- code/modules/clothing/suits/jacket.dm | 20 ++- code/modules/clothing/suits/jobs.dm | 13 +- code/modules/clothing/suits/labcoat.dm | 28 +++- code/modules/clothing/suits/moth.dm | 9 +- code/modules/clothing/suits/shirt.dm | 38 ++++-- code/modules/clothing/suits/wintercoats.dm | 7 +- code/modules/clothing/suits/wiz_robe.dm | 7 +- .../clothing/under/accessories/vests.dm | 4 +- code/modules/clothing/under/color.dm | 56 +++++++- code/modules/clothing/under/costume.dm | 25 +++- code/modules/clothing/under/ethereal.dm | 6 +- .../clothing/under/jobs/civilian/civilian.dm | 9 +- .../under/jobs/civilian/clown_mime.dm | 6 +- .../clothing/under/jobs/civilian/curator.dm | 7 +- code/modules/clothing/under/jobs/rnd.dm | 9 +- code/modules/clothing/under/jobs/security.dm | 16 +-- code/modules/clothing/under/pants.dm | 8 +- code/modules/clothing/under/shorts.dm | 14 +- code/modules/clothing/under/skirt_dress.dm | 31 +++-- code/modules/clothing/under/trek.dm | 39 ++++-- code/modules/hydroponics/grown/flowers.dm | 3 - .../hydroponics/grown/rainbow_bunch.dm | 4 +- .../job_types/chaplain/chaplain_nullrod.dm | 5 +- code/modules/jobs/job_types/mime.dm | 2 +- code/modules/loadout/categories/pocket.dm | 6 - .../ruins/spaceruin_code/caravanambush.dm | 2 + .../mining_loot/megafauna/bubblegum.dm | 9 +- .../mob/living/basic/farm_animals/pony.dm | 4 +- .../basic/lavaland/gutlunchers/gutlunchers.dm | 2 +- .../mob/living/basic/space_fauna/carp/carp.dm | 7 +- .../basic/space_fauna/statue/mannequin.dm | 4 +- .../mob_spawn/ghost_roles/space_roles.dm | 2 +- code/modules/mod/mod_core.dm | 6 +- .../computers/item/computer.dm | 13 +- .../modular_computers/computers/item/pda.dm | 19 ++- .../computers/item/role_tablet_presets.dm | 41 +++++- .../religion/sparring/ceremonial_gear.dm | 5 +- .../modules/transport/tram/tram_structures.dm | 15 ++- code/modules/unit_tests/drink_icons.dm | 11 +- code/modules/unit_tests/greyscale_config.dm | 4 +- ...nshot_antag_icons_syndicateinfiltrator.png | Bin 854 -> 861 bytes ...shot_antag_icons_syndicatesleeperagent.png | Bin 854 -> 861 bytes .../screenshot_antag_icons_traitor.png | Bin 854 -> 861 bytes code/modules/unit_tests/worn_icons.dm | 2 + code/modules/vehicles/pimpin_ride.dm | 6 + config/config.txt | 4 + icons/map_icons/clothing/_clothing.dmi | Bin 0 -> 870 bytes icons/map_icons/clothing/accessory.dmi | Bin 0 -> 1016 bytes icons/map_icons/clothing/head/_head.dmi | Bin 0 -> 3815 bytes icons/map_icons/clothing/head/beret.dmi | Bin 0 -> 2309 bytes icons/map_icons/clothing/mask.dmi | Bin 0 -> 4080 bytes icons/map_icons/clothing/neck.dmi | Bin 0 -> 5010 bytes icons/map_icons/clothing/shoes.dmi | Bin 0 -> 3939 bytes icons/map_icons/clothing/suit/_suit.dmi | Bin 0 -> 10871 bytes icons/map_icons/clothing/suit/costume.dmi | Bin 0 -> 2368 bytes icons/map_icons/clothing/under/_under.dmi | Bin 0 -> 4060 bytes icons/map_icons/clothing/under/color.dmi | Bin 0 -> 3489 bytes icons/map_icons/clothing/under/costume.dmi | Bin 0 -> 1725 bytes icons/map_icons/clothing/under/dress.dmi | Bin 0 -> 2349 bytes icons/map_icons/items/_item.dmi | Bin 0 -> 20004 bytes icons/map_icons/items/encryptionkey.dmi | Bin 0 -> 2384 bytes icons/map_icons/items/pda.dmi | Bin 0 -> 9513 bytes icons/map_icons/mobs.dmi | Bin 0 -> 870 bytes icons/map_icons/objects.dmi | Bin 0 -> 36327 bytes icons/map_icons/turfs.dmi | Bin 0 -> 870 bytes icons/map_icons/unsorted.dmi | Bin 0 -> 870 bytes .../obj/clothing/modsuit/mod_construction.dmi | Bin 5796 -> 12068 bytes icons/obj/fluff/previews.dmi | Bin 10107 -> 6706 bytes tgstation.dme | 1 + .../UpdatePaths/Scripts/90940_frenchberet.txt | 1 + 143 files changed, 1198 insertions(+), 444 deletions(-) create mode 100644 code/controllers/subsystem/greyscale_previews.dm create mode 100644 icons/map_icons/clothing/_clothing.dmi create mode 100644 icons/map_icons/clothing/accessory.dmi create mode 100644 icons/map_icons/clothing/head/_head.dmi create mode 100644 icons/map_icons/clothing/head/beret.dmi create mode 100644 icons/map_icons/clothing/mask.dmi create mode 100644 icons/map_icons/clothing/neck.dmi create mode 100644 icons/map_icons/clothing/shoes.dmi create mode 100644 icons/map_icons/clothing/suit/_suit.dmi create mode 100644 icons/map_icons/clothing/suit/costume.dmi create mode 100644 icons/map_icons/clothing/under/_under.dmi create mode 100644 icons/map_icons/clothing/under/color.dmi create mode 100644 icons/map_icons/clothing/under/costume.dmi create mode 100644 icons/map_icons/clothing/under/dress.dmi create mode 100644 icons/map_icons/items/_item.dmi create mode 100644 icons/map_icons/items/encryptionkey.dmi create mode 100644 icons/map_icons/items/pda.dmi create mode 100644 icons/map_icons/mobs.dmi create mode 100644 icons/map_icons/objects.dmi create mode 100644 icons/map_icons/turfs.dmi create mode 100644 icons/map_icons/unsorted.dmi create mode 100644 tools/UpdatePaths/Scripts/90940_frenchberet.txt diff --git a/_maps/RandomRuins/SpaceRuins/film_studio.dmm b/_maps/RandomRuins/SpaceRuins/film_studio.dmm index 583a6ea0ea9..f5446779a06 100644 --- a/_maps/RandomRuins/SpaceRuins/film_studio.dmm +++ b/_maps/RandomRuins/SpaceRuins/film_studio.dmm @@ -2050,7 +2050,7 @@ /turf/open/floor/iron/showroomfloor, /area/ruin/space/has_grav/film_studio/dorms) "Ki" = ( -/obj/item/clothing/head/frenchberet{ +/obj/item/clothing/head/beret/frenchberet{ pixel_x = 15 }, /turf/open/floor/plating, diff --git a/_maps/RandomRuins/SpaceRuins/mimesvsclowns.dmm b/_maps/RandomRuins/SpaceRuins/mimesvsclowns.dmm index 7a76e71debf..c5566cdeeab 100644 --- a/_maps/RandomRuins/SpaceRuins/mimesvsclowns.dmm +++ b/_maps/RandomRuins/SpaceRuins/mimesvsclowns.dmm @@ -61,8 +61,8 @@ /obj/item/clothing/mask/gas/mime, /obj/item/clothing/under/rank/civilian/mime, /obj/item/clothing/under/rank/civilian/mime, -/obj/item/clothing/head/frenchberet, -/obj/item/clothing/head/frenchberet, +/obj/item/clothing/head/beret/frenchberet, +/obj/item/clothing/head/beret/frenchberet, /obj/item/storage/backpack/mime, /turf/open/floor/iron/checker/airless, /area/ruin) diff --git a/code/__DEFINES/_flags.dm b/code/__DEFINES/_flags.dm index 5aefb1507e5..e483be107d6 100644 --- a/code/__DEFINES/_flags.dm +++ b/code/__DEFINES/_flags.dm @@ -58,6 +58,8 @@ GLOBAL_LIST_INIT(bitflags, list(1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 204 #define DECAL_INIT_UPDATE_EXPERIENCED_1 (1<<17) /// This atom always returns its turf in get_turf_pixel instead of the turf from its offsets #define IGNORE_TURF_PIXEL_OFFSET_1 (1<<18) +/// This atom does not need to generate its own preview icon for GAGS +#define NO_NEW_GAGS_PREVIEW_1 (1<<19) // Update flags for [/atom/proc/update_appearance] /// Update the atom's name diff --git a/code/__DEFINES/dcs/signals/signals_subsystem.dm b/code/__DEFINES/dcs/signals/signals_subsystem.dm index a41ec035a33..749ba9f6381 100644 --- a/code/__DEFINES/dcs/signals/signals_subsystem.dm +++ b/code/__DEFINES/dcs/signals/signals_subsystem.dm @@ -3,7 +3,7 @@ // All signals send the source datum of the signal as the first argument ///Subsystem signals -///From base of datum/controller/subsystem/Initialize +///From base of /datum/controller/master/init_subsystem() #define COMSIG_SUBSYSTEM_POST_INITIALIZE "subsystem_post_initialize" ///Called when the ticker enters the pre-game phase diff --git a/code/_globalvars/bitfields.dm b/code/_globalvars/bitfields.dm index 85838631fd6..cae40d02233 100644 --- a/code/_globalvars/bitfields.dm +++ b/code/_globalvars/bitfields.dm @@ -131,12 +131,16 @@ DEFINE_BITFIELD(flags_1, list( "ALLOW_DARK_PAINTS_1" = ALLOW_DARK_PAINTS_1, "ATMOS_IS_PROCESSING_1" = ATMOS_IS_PROCESSING_1, "CAN_BE_DIRTY_1" = CAN_BE_DIRTY_1, + "DECAL_INIT_UPDATE_EXPERIENCED_1" = DECAL_INIT_UPDATE_EXPERIENCED_1, "HAS_CONTEXTUAL_SCREENTIPS_1" = HAS_CONTEXTUAL_SCREENTIPS_1, "HAS_DISASSOCIATED_STORAGE_1" = HAS_DISASSOCIATED_STORAGE_1, "HOLOGRAM_1" = HOLOGRAM_1, + "HTML_USE_INITAL_ICON_1" = HTML_USE_INITAL_ICON_1, + "IGNORE_TURF_PIXEL_OFFSET_1" = IGNORE_TURF_PIXEL_OFFSET_1, "INITIALIZED_1" = INITIALIZED_1, "IS_ONTOP_1" = IS_ONTOP_1, "IS_PLAYER_COLORABLE_1" = IS_PLAYER_COLORABLE_1, + "NO_NEW_GAGS_PREVIEW_1" = NO_NEW_GAGS_PREVIEW_1, "NO_SCREENTIPS_1" = NO_SCREENTIPS_1, "ON_BORDER_1" = ON_BORDER_1, "PREVENT_CLICK_UNDER_1" = PREVENT_CLICK_UNDER_1, diff --git a/code/controllers/configuration/entries/general.dm b/code/controllers/configuration/entries/general.dm index bc937d4007c..879b7b64e1f 100644 --- a/code/controllers/configuration/entries/general.dm +++ b/code/controllers/configuration/entries/general.dm @@ -785,3 +785,6 @@ // If set, enables the "Link forum account" OOC verb /datum/config_entry/string/forum_link_uri + +/datum/config_entry/flag/generate_assets_in_init + default = FALSE diff --git a/code/controllers/master.dm b/code/controllers/master.dm index 82e2881f255..d42826cd6ae 100644 --- a/code/controllers/master.dm +++ b/code/controllers/master.dm @@ -514,7 +514,6 @@ ADMIN_VERB(cmd_controller_view_ui, R_SERVER|R_DEBUG, "Controller Overview", "Vie if(result != SS_INIT_FAILURE) // Some form of success, implicit failure, or the SS in unused. subsystem.initialized = TRUE - SEND_SIGNAL(subsystem, COMSIG_SUBSYSTEM_POST_INITIALIZE) else // The subsystem officially reports that it failed to init and wishes to be treated as such. diff --git a/code/controllers/subsystem/assets.dm b/code/controllers/subsystem/assets.dm index d6629d1bb44..e3b03c01222 100644 --- a/code/controllers/subsystem/assets.dm +++ b/code/controllers/subsystem/assets.dm @@ -3,7 +3,7 @@ SUBSYSTEM_DEF(assets) dependencies = list( /datum/controller/subsystem/atoms, /datum/controller/subsystem/persistent_paintings, - /datum/controller/subsystem/processing/greyscale, + /datum/controller/subsystem/greyscale_previews, ) flags = SS_NO_FIRE var/list/datum/asset_cache_item/cache = list() diff --git a/code/controllers/subsystem/atoms.dm b/code/controllers/subsystem/atoms.dm index 7b0e705de38..3b62f241360 100644 --- a/code/controllers/subsystem/atoms.dm +++ b/code/controllers/subsystem/atoms.dm @@ -162,6 +162,7 @@ SUBSYSTEM_DEF(atoms) initialized = base_initialized base_initialized = INITIALIZATION_INNEW_REGULAR return + initialized = initialized_state[length(initialized_state)][2] /// Returns TRUE if anything is currently being initialized diff --git a/code/controllers/subsystem/early_assets.dm b/code/controllers/subsystem/early_assets.dm index ad2624789af..df155a4db10 100644 --- a/code/controllers/subsystem/early_assets.dm +++ b/code/controllers/subsystem/early_assets.dm @@ -7,7 +7,7 @@ SUBSYSTEM_DEF(early_assets) name = "Early Assets" dependencies = list( /datum/controller/subsystem/processing/reagents, - /datum/controller/subsystem/processing/greyscale, + /datum/controller/subsystem/greyscale_previews, ) dependents = list( /datum/controller/subsystem/mapping, @@ -17,6 +17,9 @@ SUBSYSTEM_DEF(early_assets) flags = SS_NO_FIRE /datum/controller/subsystem/early_assets/Initialize() + var/init_source = "early assets" + SSatoms.set_tracked_initalized(INITIALIZATION_INNEW_REGULAR, init_source) + for (var/datum/asset/asset_type as anything in subtypesof(/datum/asset)) if (initial(asset_type._abstract) == asset_type) continue @@ -29,4 +32,6 @@ SUBSYSTEM_DEF(early_assets) CHECK_TICK + SSatoms.clear_tracked_initalize(init_source) + return SS_INIT_SUCCESS diff --git a/code/controllers/subsystem/greyscale_previews.dm b/code/controllers/subsystem/greyscale_previews.dm new file mode 100644 index 00000000000..e5b108b1fd4 --- /dev/null +++ b/code/controllers/subsystem/greyscale_previews.dm @@ -0,0 +1,122 @@ +/// If we are in unit tests OR if we are not using iconforge, then we should make sure the icons we are using are valid. +#if !defined(USE_RUSTG_ICONFORGE_GAGS) || defined(UNIT_TESTS) + #define CHECK_SPRITESHEET_ICON_VALIDITY +#endif + +SUBSYSTEM_DEF(greyscale_previews) + name = "Greyscale Previews" + flags = SS_NO_FIRE + init_stage = INITSTAGE_EARLY + dependencies = list( + /datum/controller/subsystem/processing/greyscale, + ) + +/datum/controller/subsystem/greyscale_previews/Initialize() +#ifndef UNIT_TESTS // We want this to run during unit tests regardless of the config + if(!CONFIG_GET(flag/generate_assets_in_init)) + return SS_INIT_SUCCESS +#endif + + ExportMapPreviews() + return SS_INIT_SUCCESS + +/datum/controller/subsystem/greyscale_previews/proc/ExportMapPreviews() + // Put subtypes before their parent or the parent file will take all the generated icons + var/static/list/types_that_get_their_own_file = list( + "turfs" = /turf, // None of these yet but it's harmless to be prepared + "mobs" = /mob, // Ditto + "clothing/accessory" = /obj/item/clothing/accessory, + "clothing/head/beret" = /obj/item/clothing/head/beret, + "clothing/head/_head" = /obj/item/clothing/head, + "clothing/mask" = /obj/item/clothing/mask, + "clothing/neck" = /obj/item/clothing/neck, + "clothing/shoes" = /obj/item/clothing/shoes, + "clothing/suit/costume" = /obj/item/clothing/suit/costume, + "clothing/suit/_suit" = /obj/item/clothing/suit, + "clothing/under/color" = /obj/item/clothing/under/color, + "clothing/under/costume" = /obj/item/clothing/under/costume, + "clothing/under/dress" = /obj/item/clothing/under/dress, + "clothing/under/_under" = /obj/item/clothing/under, + "clothing/_clothing" = /obj/item/clothing, + "items/encryptionkey" = /obj/item/encryptionkey, + "items/pda" = /obj/item/modular_computer/pda, + "items/_item" = /obj/item, + "objects" = /obj, +) + +#ifdef UNIT_TESTS + if(!check_map_previews_filepath_order(types_that_get_their_own_file)) + CRASH("The list 'types_that_get_their_own_file', used by ExportMapPreviews, is invalid. Please ensure that subtypes come BEFORE parent types in the list order.") +#endif + + var/list/handled_types = list() + for(var/filename in types_that_get_their_own_file) + var/type_to_export = types_that_get_their_own_file[filename] + handled_types += ExportMapPreviewsForType(filename, type_to_export, handled_types) + + ExportMapPreviewsForType("unsorted", /atom, handled_types) + +/// Checks that we do not have any parent types coming before subtypes in the types_that_get_their_own_file list (which is an assoc list (filepath, typepath)) +/datum/controller/subsystem/greyscale_previews/proc/check_map_previews_filepath_order(list/our_list) + var/list/type_paths_to_check = list() + for(var/filepath in our_list) + type_paths_to_check += our_list[filepath] + + if(!length(type_paths_to_check)) + return TRUE + + for(var/i = 1 to length(type_paths_to_check)) + var/path_i = type_paths_to_check[i] + for(var/j = i+1 to length(type_paths_to_check)) + var/path_j = type_paths_to_check[j] + if(ispath(path_j, path_i)) + stack_trace("Error: [path_j] (index [j]) is a subtype of [path_i] (index [i]) but appears after it.") + return FALSE + return TRUE + +/datum/controller/subsystem/greyscale_previews/proc/ExportMapPreviewsForType(filename, atom/atom_typepath, list/type_blacklist) + var/list/handled_types = list() + var/list/icons = list() + for(var/atom/atom_type as anything in typesof(atom_typepath)) + if(type_blacklist && type_blacklist[atom_type]) + continue + handled_types[atom_type] = TRUE + var/greyscale_config = atom_type::greyscale_config + var/greyscale_colors = atom_type::greyscale_colors + if(!greyscale_config || !greyscale_colors || atom_type::flags_1 & NO_NEW_GAGS_PREVIEW_1) + continue + #ifdef CHECK_SPRITESHEET_ICON_VALIDITY + var/icon/map_icon = icon(SSgreyscale.GetColoredIconByType(greyscale_config, greyscale_colors)) + if((map_icon.Height() > 32) || (map_icon.Width() > 32)) // No large icons, use icon_preview and icon_preview_state instead. + stack_trace("GAGS configuration is trying to generate a map preview graphic for '[atom_type]', which has a large icon. This is not suppoorted; implement icon_preview instead.") + continue + if(!(atom_type::post_init_icon_state in map_icon.IconStates())) + stack_trace("GAGS configuration missing icon state needed to generate map preview graphic for '[atom_type]'. Make sure the right greyscale_config is set up.") + continue + map_icon = icon(map_icon, atom_type::post_init_icon_state) + icons["[atom_type]"] = map_icon + #else // will be updated to use iconforge's new .dmi spritesheet generation instead + var/icon/map_icon = icon(SSgreyscale.GetColoredIconByType(greyscale_config, greyscale_colors)) + map_icon = icon(map_icon, atom_type::post_init_icon_state) + icons["[atom_type]"] = map_icon + #endif + + var/icon/holder = icon('icons/testing/greyscale_error.dmi') + for(var/state in icons) + holder.Insert(icons[state], state) + + var/filepath = "icons/map_icons/[filename].dmi" +#ifdef UNIT_TESTS + var/old_md5 = rustg_hash_file(RUSTG_HASH_MD5, filepath) +#endif + fcopy(holder, filepath) +#ifdef UNIT_TESTS + var/new_md5 = rustg_hash_file(RUSTG_HASH_MD5, filepath) + if(old_md5 != new_md5) + stack_trace("Generated map icons were different than what is currently saved. If you see this in a CI run it means you need to run the game once through initialization and commit the resulting files in 'icons/map_icons/'") +#endif + return handled_types + +#ifdef CHECK_SPRITESHEET_ICON_VALIDITY + #undef CHECK_SPRITESHEET_ICON_VALIDITY +#endif diff --git a/code/controllers/subsystem/processing/greyscale.dm b/code/controllers/subsystem/processing/greyscale.dm index fcd7b482847..0b7b4d3b66e 100644 --- a/code/controllers/subsystem/processing/greyscale.dm +++ b/code/controllers/subsystem/processing/greyscale.dm @@ -17,8 +17,8 @@ PROCESSING_SUBSYSTEM_DEF(greyscale) #endif /datum/controller/subsystem/processing/greyscale/Initialize() - for(var/datum/greyscale_layer/fake_type as anything in subtypesof(/datum/greyscale_layer)) - layer_types[initial(fake_type.layer_type)] = fake_type + for(var/datum/greyscale_layer/greyscale_layer as anything in subtypesof(/datum/greyscale_layer)) + layer_types[initial(greyscale_layer.layer_type)] = greyscale_layer for(var/greyscale_type in subtypesof(/datum/greyscale_config)) var/datum/greyscale_config/config = new greyscale_type() diff --git a/code/datums/components/toggle_attached_clothing.dm b/code/datums/components/toggle_attached_clothing.dm index a1cde8cba63..a251fd0e38a 100644 --- a/code/datums/components/toggle_attached_clothing.dm +++ b/code/datums/components/toggle_attached_clothing.dm @@ -70,7 +70,7 @@ RegisterSignal(parent, COMSIG_ITEM_POST_UNEQUIP, PROC_REF(remove_deployable)) RegisterSignal(parent, COMSIG_ITEM_EQUIPPED_AS_OUTFIT, PROC_REF(on_parent_equipped_outfit)) if (down_overlay_state_suffix) - var/overlay_state = "[initial(clothing_parent.icon_state)][down_overlay_state_suffix]" + var/overlay_state = "[initial(clothing_parent.post_init_icon_state) || initial(clothing_parent.icon_state)][down_overlay_state_suffix]" undeployed_overlay = mutable_appearance(initial(clothing_parent.worn_icon), overlay_state, -SUIT_LAYER) RegisterSignal(parent, COMSIG_ITEM_GET_WORN_OVERLAYS, PROC_REF(on_checked_overlays)) clothing_parent.update_slot_icon() @@ -137,7 +137,7 @@ currently_deployed = TRUE on_deployed?.Invoke(deployable) if (parent_icon_state_suffix) - parent_gear.icon_state = "[initial(parent_gear.icon_state)][parent_icon_state_suffix]" + parent_gear.icon_state = "[initial(parent_gear.post_init_icon_state) || initial(parent_gear.icon_state)][parent_icon_state_suffix]" parent_gear.worn_icon_state = parent_gear.icon_state parent_gear.update_slot_icon() wearer.update_mob_action_buttons() @@ -201,7 +201,7 @@ if(destroy_on_removal) QDEL_NULL(deployable) if(parent_icon_state_suffix) - parent_gear.icon_state = "[initial(parent_gear.icon_state)]" + parent_gear.icon_state = "[initial(parent_gear.post_init_icon_state) || initial(parent_gear.icon_state)]" parent_gear.worn_icon_state = parent_gear.icon_state parent_gear.update_slot_icon() parent_gear.update_item_action_buttons() diff --git a/code/datums/components/toggle_suit.dm b/code/datums/components/toggle_suit.dm index 022fc37c07a..1f6afe053e0 100644 --- a/code/datums/components/toggle_suit.dm +++ b/code/datums/components/toggle_suit.dm @@ -18,7 +18,7 @@ atom_parent.flags_1 |= HAS_CONTEXTUAL_SCREENTIPS_1 src.toggle_noun = toggle_noun - src.base_icon_state = atom_parent.base_icon_state || atom_parent.icon_state + src.base_icon_state = atom_parent.base_icon_state || atom_parent.post_init_icon_state || atom_parent.icon_state /datum/component/toggle_icon/RegisterWithParent() RegisterSignal(parent, COMSIG_CLICK_ALT, PROC_REF(on_click_alt)) diff --git a/code/datums/greyscale/config_types/greyscale_configs/greyscale_items.dm b/code/datums/greyscale/config_types/greyscale_configs/greyscale_items.dm index 1c7fd0523b0..fa9440e8c1c 100644 --- a/code/datums/greyscale/config_types/greyscale_configs/greyscale_items.dm +++ b/code/datums/greyscale/config_types/greyscale_configs/greyscale_items.dm @@ -274,7 +274,7 @@ json_config = 'code/datums/greyscale/json_configs/vape.json' /datum/greyscale_config/vape/worn - name = "Worn Vape" + name = "Vape (Worn)" icon_file = 'icons/mob/clothing/mask.dmi' json_config = 'code/datums/greyscale/json_configs/vape_worn.json' @@ -315,12 +315,12 @@ json_config = 'code/datums/greyscale/json_configs/tape_piece_spikes.json' /datum/greyscale_config/tape_piece/worn - name = "Worn Tape Piece" + name = "Tape Piece (Worn)" icon_file = 'icons/obj/tapes.dmi' json_config = 'code/datums/greyscale/json_configs/tape_piece_worn.json' /datum/greyscale_config/tape_piece/worn/spikes - name = "Worn Spiked Tape Piece" + name = "Spiked Tape Piece (Worn)" icon_file = 'icons/obj/tapes.dmi' json_config = 'code/datums/greyscale/json_configs/tape_piece_spikes_worn.json' @@ -347,7 +347,7 @@ json_config = 'code/datums/greyscale/json_configs/simple_flower.json' /datum/greyscale_config/flower_simple_worn - name = "Flower Worn" + name = "Flower (Worn)" icon_file = 'icons/mob/clothing/head/hydroponics.dmi' json_config = 'code/datums/greyscale/json_configs/simple_flower_worn.json' diff --git a/code/datums/greyscale/json_configs/wrap_paper.json b/code/datums/greyscale/json_configs/wrap_paper.json index c7ea889bc22..b3e9774848c 100644 --- a/code/datums/greyscale/json_configs/wrap_paper.json +++ b/code/datums/greyscale/json_configs/wrap_paper.json @@ -1,5 +1,5 @@ { - "": [ + "wrap_paper": [ { "type": "icon_state", "icon_state": "wrap_paper_base", diff --git a/code/datums/quirks/positive_quirks/bilingual.dm b/code/datums/quirks/positive_quirks/bilingual.dm index b5fc8a75f37..bfc6db677a4 100644 --- a/code/datums/quirks/positive_quirks/bilingual.dm +++ b/code/datums/quirks/positive_quirks/bilingual.dm @@ -6,7 +6,7 @@ gain_text = span_notice("Some of the words of the people around you certainly aren't common. Good thing you studied for this.") lose_text = span_notice("You seem to have forgotten your second language.") medical_record_text = "Patient speaks multiple languages." - mail_goodies = list(/obj/item/taperecorder, /obj/item/clothing/head/frenchberet, /obj/item/clothing/mask/fakemoustache/italian) + mail_goodies = list(/obj/item/taperecorder, /obj/item/clothing/head/beret/frenchberet, /obj/item/clothing/mask/fakemoustache/italian) /datum/quirk_constant_data/bilingual associated_typepath = /datum/quirk/bilingual diff --git a/code/game/atom/atom_appearance.dm b/code/game/atom/atom_appearance.dm index d3e0a64d69c..b9753d219cf 100644 --- a/code/game/atom/atom_appearance.dm +++ b/code/game/atom/atom_appearance.dm @@ -1,6 +1,9 @@ /atom ///overlays managed by [update_overlays][/atom/proc/update_overlays] to prevent removing overlays that weren't added by the same proc. Single items are stored on their own, not in a list. var/list/managed_overlays + /// The icon state that will be switched to during initialization. + /// Mostly intended for things that have a special map icon. + var/post_init_icon_state /** * Updates the appearence of the icon diff --git a/code/game/atom/atoms_initializing_EXPENSIVE.dm b/code/game/atom/atoms_initializing_EXPENSIVE.dm index b73504fb137..7b0965beabb 100644 --- a/code/game/atom/atoms_initializing_EXPENSIVE.dm +++ b/code/game/atom/atoms_initializing_EXPENSIVE.dm @@ -132,6 +132,9 @@ if (light_system == COMPLEX_LIGHT && light_power && light_range) update_light() + if(post_init_icon_state) + icon_state = post_init_icon_state + SETUP_SMOOTHING() if(uses_integrity) diff --git a/code/game/machinery/big_manipulator.dm b/code/game/machinery/big_manipulator.dm index 1e4054c876f..318d7046c54 100644 --- a/code/game/machinery/big_manipulator.dm +++ b/code/game/machinery/big_manipulator.dm @@ -27,8 +27,9 @@ /obj/machinery/big_manipulator name = "Big Manipulator" desc = "Operates different objects. Truly, a groundbreaking innovation..." - icon = 'icons/obj/machines/big_manipulator_parts/big_manipulator_core.dmi' - icon_state = "core" + icon = 'icons/map_icons/objects.dmi' + icon_state = "/obj/machinery/big_manipulator" + post_init_icon_state = "core" density = TRUE circuit = /obj/item/circuitboard/machine/big_manipulator greyscale_colors = "#d8ce13" diff --git a/code/game/machinery/computer/atmos_computers/meters.dm b/code/game/machinery/computer/atmos_computers/meters.dm index 9cfe3072a69..e2316401820 100644 --- a/code/game/machinery/computer/atmos_computers/meters.dm +++ b/code/game/machinery/computer/atmos_computers/meters.dm @@ -1,12 +1,13 @@ /obj/machinery/meter/monitored /// The unique string that represents which atmos chamber to associate with. var/chamber_id + flags_1 = parent_type::flags_1 | NO_NEW_GAGS_PREVIEW_1 /obj/machinery/meter/monitored/Initialize(mapload, new_piping_layer) id_tag = assign_random_name() if(mapload) GLOB.map_loaded_sensors[chamber_id] = id_tag - . = ..() + return ..() /obj/machinery/meter/monitored/layer2 target_layer = 2 diff --git a/code/game/machinery/dna_infuser/organ_sets/carp_organs.dm b/code/game/machinery/dna_infuser/organ_sets/carp_organs.dm index 95be7fc6e71..eea2ba1c857 100644 --- a/code/game/machinery/dna_infuser/organ_sets/carp_organs.dm +++ b/code/game/machinery/dna_infuser/organ_sets/carp_organs.dm @@ -23,8 +23,9 @@ safe_oxygen_min = 0 safe_oxygen_max = 15 - icon = 'icons/obj/medical/organs/infuser_organs.dmi' - icon_state = "lungs" + icon = 'icons/map_icons/items/_item.dmi' + icon_state = "/obj/item/organ/lungs/carp" + post_init_icon_state = "lungs" greyscale_config = /datum/greyscale_config/mutant_organ greyscale_colors = CARP_COLORS organ_traits = list(TRAIT_NODROWN) @@ -42,8 +43,9 @@ say_mod = "gnashes" - icon = 'icons/obj/medical/organs/infuser_organs.dmi' - icon_state = "tongue" + icon = 'icons/map_icons/items/_item.dmi' + icon_state = "/obj/item/organ/tongue/carp" + post_init_icon_state = "tongue" greyscale_config = /datum/greyscale_config/mutant_organ greyscale_colors = CARP_COLORS @@ -110,8 +112,9 @@ name = "mutated carp-brain" desc = "Carp DNA infused into what was once a normal brain." - icon = 'icons/obj/medical/organs/infuser_organs.dmi' - icon_state = "brain" + icon = 'icons/map_icons/items/_item.dmi' + icon_state = "/obj/item/organ/brain/carp" + post_init_icon_state = "brain" greyscale_config = /datum/greyscale_config/mutant_organ greyscale_colors = CARP_COLORS can_smoothen_out = FALSE @@ -153,8 +156,9 @@ name = "mutated carp-heart" desc = "Carp DNA infused into what was once a normal heart." - icon = 'icons/obj/medical/organs/infuser_organs.dmi' - icon_state = "heart" + icon = 'icons/map_icons/items/_item.dmi' + icon_state = "/obj/item/organ/heart/carp" + post_init_icon_state = "heart" greyscale_config = /datum/greyscale_config/mutant_organ greyscale_colors = CARP_COLORS diff --git a/code/game/machinery/dna_infuser/organ_sets/fish_organs.dm b/code/game/machinery/dna_infuser/organ_sets/fish_organs.dm index 4b96d3e04fb..7bf126075b4 100644 --- a/code/game/machinery/dna_infuser/organ_sets/fish_organs.dm +++ b/code/game/machinery/dna_infuser/organ_sets/fish_organs.dm @@ -163,8 +163,9 @@ /obj/item/organ/tail/fish name = "fish tail" desc = "A severed tail from some sort of marine creature... or a fish-infused spaceman. It's smooth, faintly wet and definitely not flopping." - icon = 'icons/obj/medical/organs/infuser_organs.dmi' - icon_state = "fish_tail" + icon = 'icons/map_icons/items/_item.dmi' + icon_state = "/obj/item/organ/tail/fish" + post_init_icon_state = "fish_tail" greyscale_config = /datum/greyscale_config/fish_tail greyscale_colors = FISH_ORGAN_COLOR @@ -382,8 +383,9 @@ /obj/item/organ/stomach/fish name = "mutated fish-stomach" desc = "Fish DNA infused into a stomach now permeated by the faint smell of salt and slightly putrefied fish." - icon = 'icons/obj/medical/organs/infuser_organs.dmi' - icon_state = "stomach" + icon = 'icons/map_icons/items/_item.dmi' + icon_state = "/obj/item/organ/stomach/fish" + post_init_icon_state = "stomach" greyscale_config = /datum/greyscale_config/mutant_organ greyscale_colors = FISH_COLORS @@ -431,8 +433,9 @@ /obj/item/organ/liver/fish name = "mutated fish-liver" desc = "Fish DNA infused into a stomach that now uses tetrodotoxin as regenerative material. It also processes alcohol quite well." - icon = 'icons/obj/medical/organs/infuser_organs.dmi' - icon_state = "liver" + icon = 'icons/map_icons/items/_item.dmi' + icon_state = "/obj/item/organ/liver/fish" + post_init_icon_state = "liver" greyscale_config = /datum/greyscale_config/mutant_organ greyscale_colors = FISH_COLORS diff --git a/code/game/machinery/dna_infuser/organ_sets/goliath_organs.dm b/code/game/machinery/dna_infuser/organ_sets/goliath_organs.dm index 97e312a158c..900f566f057 100644 --- a/code/game/machinery/dna_infuser/organ_sets/goliath_organs.dm +++ b/code/game/machinery/dna_infuser/organ_sets/goliath_organs.dm @@ -16,9 +16,10 @@ name = "goliath eyes" desc = "goliath DNA infused into what was once some normal eyes." - icon = 'icons/obj/medical/organs/infuser_organs.dmi' - icon_state = "eyes" iris_overlay = null + icon = 'icons/map_icons/items/_item.dmi' + icon_state = "/obj/item/organ/eyes/night_vision/goliath" + post_init_icon_state = "eyes" greyscale_config = /datum/greyscale_config/mutant_organ greyscale_colors = GOLIATH_COLORS @@ -40,8 +41,9 @@ name = "mutated goliath-lungs" desc = "goliath DNA infused into what was once some normal lungs." - icon = 'icons/obj/medical/organs/infuser_organs.dmi' - icon_state = "lungs" + icon = 'icons/map_icons/items/_item.dmi' + icon_state = "/obj/item/organ/lungs/lavaland/goliath" + post_init_icon_state = "lungs" greyscale_config = /datum/greyscale_config/mutant_organ greyscale_colors = GOLIATH_COLORS @@ -55,8 +57,9 @@ name = "mutated goliath-brain" desc = "goliath DNA infused into what was once a normal brain." - icon = 'icons/obj/medical/organs/infuser_organs.dmi' - icon_state = "brain" + icon = 'icons/map_icons/items/_item.dmi' + icon_state = "/obj/item/organ/brain/goliath" + post_init_icon_state = "brain" greyscale_config = /datum/greyscale_config/mutant_organ greyscale_colors = GOLIATH_COLORS can_smoothen_out = FALSE @@ -165,8 +168,9 @@ name = "mutated goliath-heart" desc = "goliath DNA infused into what was once a normal heart." - icon = 'icons/obj/medical/organs/infuser_organs.dmi' - icon_state = "heart" + icon = 'icons/map_icons/items/_item.dmi' + icon_state = "/obj/item/organ/heart/goliath" + post_init_icon_state = "heart" greyscale_config = /datum/greyscale_config/mutant_organ greyscale_colors = GOLIATH_COLORS diff --git a/code/game/machinery/dna_infuser/organ_sets/gondola_organs.dm b/code/game/machinery/dna_infuser/organ_sets/gondola_organs.dm index 805277b3d9c..f8d47242623 100644 --- a/code/game/machinery/dna_infuser/organ_sets/gondola_organs.dm +++ b/code/game/machinery/dna_infuser/organ_sets/gondola_organs.dm @@ -20,8 +20,9 @@ Fluoride Stare: After someone says 5 words, blah blah blah... name = "mutated gondola-heart" desc = "Gondola DNA infused into what was once a normal heart." - icon = 'icons/obj/medical/organs/infuser_organs.dmi' - icon_state = "heart" + icon = 'icons/map_icons/items/_item.dmi' + icon_state = "/obj/item/organ/heart/gondola" + post_init_icon_state = "heart" greyscale_config = /datum/greyscale_config/mutant_organ greyscale_colors = GONDOLA_COLORS organ_traits = list(TRAIT_PACIFISM) @@ -53,8 +54,9 @@ Fluoride Stare: After someone says 5 words, blah blah blah... /obj/item/organ/tongue/gondola name = "mutated gondola-tongue" desc = "Gondola DNA infused into what was once a normal tongue." - icon = 'icons/obj/medical/organs/infuser_organs.dmi' - icon_state = "tongue" + icon = 'icons/map_icons/items/_item.dmi' + icon_state = "/obj/item/organ/tongue/gondola" + post_init_icon_state = "tongue" greyscale_config = /datum/greyscale_config/mutant_organ greyscale_colors = GONDOLA_COLORS organ_traits = list(TRAIT_MUTE) @@ -76,8 +78,9 @@ Fluoride Stare: After someone says 5 words, blah blah blah... /obj/item/organ/liver/gondola name = "mutated gondola-liver" desc = "Gondola DNA infused into what was once a normal liver." - icon = 'icons/obj/medical/organs/infuser_organs.dmi' - icon_state = "liver" + icon = 'icons/map_icons/items/_item.dmi' + icon_state = "/obj/item/organ/liver/gondola" + post_init_icon_state = "liver" greyscale_config = /datum/greyscale_config/mutant_organ greyscale_colors = GONDOLA_COLORS diff --git a/code/game/machinery/dna_infuser/organ_sets/rat_organs.dm b/code/game/machinery/dna_infuser/organ_sets/rat_organs.dm index a39b43643e8..74965cb462b 100644 --- a/code/game/machinery/dna_infuser/organ_sets/rat_organs.dm +++ b/code/game/machinery/dna_infuser/organ_sets/rat_organs.dm @@ -19,9 +19,10 @@ eye_color_left = COLOR_BLACK eye_color_right = COLOR_BLACK - icon = 'icons/obj/medical/organs/infuser_organs.dmi' - icon_state = "eyes" iris_overlay = null + icon = 'icons/map_icons/items/_item.dmi' + icon_state = "/obj/item/organ/eyes/night_vision/rat" + post_init_icon_state = "eyes" greyscale_config = /datum/greyscale_config/mutant_organ greyscale_colors = RAT_COLORS low_light_cutoff = list(16, 11, 0) @@ -39,8 +40,9 @@ desc = "Rat DNA infused into what was once a normal stomach." disgust_metabolism = 3 - icon = 'icons/obj/medical/organs/infuser_organs.dmi' - icon_state = "stomach" + icon = 'icons/map_icons/items/_item.dmi' + icon_state = "/obj/item/organ/stomach/rat" + post_init_icon_state = "stomach" greyscale_config = /datum/greyscale_config/mutant_organ greyscale_colors = RAT_COLORS hunger_modifier = 10 @@ -54,8 +56,9 @@ /obj/item/organ/heart/rat name = "mutated rat-heart" desc = "Rat DNA infused into what was once a normal heart." - icon = 'icons/obj/medical/organs/infuser_organs.dmi' - icon_state = "heart" + icon = 'icons/map_icons/items/_item.dmi' + icon_state = "/obj/item/organ/heart/rat" + post_init_icon_state = "heart" greyscale_config = /datum/greyscale_config/mutant_organ greyscale_colors = RAT_COLORS @@ -88,10 +91,11 @@ /obj/item/organ/tongue/rat name = "mutated rat-tongue" desc = "Rat DNA infused into what was once a normal tongue." - icon = 'icons/obj/medical/organs/infuser_organs.dmi' - icon_state = "tongue" say_mod = "squeaks" modifies_speech = TRUE + icon = 'icons/map_icons/items/_item.dmi' + icon_state = "/obj/item/organ/tongue/rat" + post_init_icon_state = "tongue" greyscale_config = /datum/greyscale_config/mutant_organ greyscale_colors = RAT_COLORS liked_foodtypes = DAIRY //mmm, cheese. doesn't especially like anything else diff --git a/code/game/machinery/dna_infuser/organ_sets/roach_organs.dm b/code/game/machinery/dna_infuser/organ_sets/roach_organs.dm index 2c07038fd17..744c2a34c87 100644 --- a/code/game/machinery/dna_infuser/organ_sets/roach_organs.dm +++ b/code/game/machinery/dna_infuser/organ_sets/roach_organs.dm @@ -44,8 +44,9 @@ desc = "Roach DNA infused into what was once a normal heart." maxHealth = 2 * STANDARD_ORGAN_THRESHOLD - icon = 'icons/obj/medical/organs/infuser_organs.dmi' - icon_state = "heart" + icon = 'icons/map_icons/items/_item.dmi' + icon_state = "/obj/item/organ/heart/roach" + post_init_icon_state = "heart" greyscale_config = /datum/greyscale_config/mutant_organ greyscale_colors = ROACH_COLORS @@ -161,8 +162,9 @@ metabolism_efficiency = 0.033 // Slightly worse at transferring reagents hunger_modifier = 3 - icon = 'icons/obj/medical/organs/infuser_organs.dmi' - icon_state = "stomach" + icon = 'icons/map_icons/items/_item.dmi' + icon_state = "/obj/item/organ/stomach/roach" + post_init_icon_state = "stomach" greyscale_config = /datum/greyscale_config/mutant_organ greyscale_colors = ROACH_COLORS @@ -179,8 +181,9 @@ toxTolerance = 5 // More tolerance for toxins liver_resistance = 0.25 // But if they manage to get in you're screwed - icon = 'icons/obj/medical/organs/infuser_organs.dmi' - icon_state = "liver" + icon = 'icons/map_icons/items/_item.dmi' + icon_state = "/obj/item/organ/liver/roach" + post_init_icon_state = "liver" greyscale_config = /datum/greyscale_config/mutant_organ greyscale_colors = ROACH_COLORS @@ -211,8 +214,9 @@ desc = "Roach DNA infused into what was once a normal appendix. It could get worse?" maxHealth = 2 * STANDARD_ORGAN_THRESHOLD - icon = 'icons/obj/medical/organs/infuser_organs.dmi' - icon_state = "appendix" + icon = 'icons/map_icons/items/_item.dmi' + icon_state = "/obj/item/organ/appendix/roach" + post_init_icon_state = "appendix" greyscale_config = /datum/greyscale_config/mutant_organ greyscale_colors = ROACH_COLORS diff --git a/code/game/objects/effects/spawners/random/clothing.dm b/code/game/objects/effects/spawners/random/clothing.dm index 119697c5317..62bb9d4e130 100644 --- a/code/game/objects/effects/spawners/random/clothing.dm +++ b/code/game/objects/effects/spawners/random/clothing.dm @@ -216,7 +216,7 @@ /obj/item/clothing/head/costume/deckers, /obj/item/clothing/head/costume/yuri, /obj/item/clothing/head/costume/allies, - /obj/item/clothing/head/frenchberet, + /obj/item/clothing/head/beret/frenchberet, /obj/item/clothing/head/costume/crown, /obj/item/clothing/head/fedora, /obj/item/clothing/head/beanie/red, diff --git a/code/game/objects/items/cigarettes.dm b/code/game/objects/items/cigarettes.dm index a90a4c8cdc9..3cef0352018 100644 --- a/code/game/objects/items/cigarettes.dm +++ b/code/game/objects/items/cigarettes.dm @@ -960,7 +960,9 @@ CIGARETTE PACKETS ARE IN FANCY.DM /obj/item/vape name = "\improper E-Cigarette" desc = "A classy and highly sophisticated electronic cigarette, for classy and dignified gentlemen. A warning label reads \"Warning: Do not fill with flammable materials.\""//<<< i'd vape to that. - icon_state = "vape" + icon = 'icons/map_icons/items/_item.dmi' + icon_state = "/obj/item/vape" + post_init_icon_state = "vape" worn_icon_state = "vape_worn" greyscale_config = /datum/greyscale_config/vape greyscale_config_worn = /datum/greyscale_config/vape/worn @@ -1008,7 +1010,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM screw = FALSE to_chat(user, span_notice("You close the cap on [src].")) reagents.flags &= ~(OPENCONTAINER) - icon_state = initial(icon_state) + icon_state = initial(post_init_icon_state) || initial(icon_state) set_greyscale(new_config = initial(greyscale_config)) /obj/item/vape/multitool_act(mob/living/user, obj/item/tool) @@ -1138,33 +1140,41 @@ CIGARETTE PACKETS ARE IN FANCY.DM handle_reagents() /obj/item/vape/red + icon_state = "/obj/item/vape/red" greyscale_colors = "#A02525" flags_1 = NONE /obj/item/vape/blue + icon_state = "/obj/item/vape/blue" greyscale_colors = "#294A98" flags_1 = NONE /obj/item/vape/purple + icon_state = "/obj/item/vape/purple" greyscale_colors = "#9900CC" flags_1 = NONE /obj/item/vape/green + icon_state = "/obj/item/vape/green" greyscale_colors = "#3D9829" flags_1 = NONE /obj/item/vape/yellow + icon_state = "/obj/item/vape/yellow" greyscale_colors = "#DAC20E" flags_1 = NONE /obj/item/vape/orange + icon_state = "/obj/item/vape/orange" greyscale_colors = "#da930e" flags_1 = NONE /obj/item/vape/black + icon_state = "/obj/item/vape/black" greyscale_colors = "#2e2e2e" flags_1 = NONE /obj/item/vape/white + icon_state = "/obj/item/vape/white" greyscale_colors = "#DCDCDC" flags_1 = NONE diff --git a/code/game/objects/items/dehy_carp.dm b/code/game/objects/items/dehy_carp.dm index 21cc1922783..6c25f9db9fa 100644 --- a/code/game/objects/items/dehy_carp.dm +++ b/code/game/objects/items/dehy_carp.dm @@ -8,6 +8,7 @@ var/mob/owner = null //Carp doesn't attack owner, set when using in hand var/mobtype = /mob/living/basic/carp //So admins can change what mob spawns via var fuckery var/swelling = FALSE + flags_1 = parent_type::flags_1 | NO_NEW_GAGS_PREVIEW_1 //Attack self /obj/item/toy/plush/carpplushie/dehy_carp/attack_self(mob/user) @@ -75,3 +76,4 @@ /obj/item/toy/plush/carpplushie/dehy_carp/peaceful mobtype = /mob/living/basic/carp/passive + flags_1 = parent_type::flags_1 | NO_NEW_GAGS_PREVIEW_1 diff --git a/code/game/objects/items/devices/quantum_keycard.dm b/code/game/objects/items/devices/quantum_keycard.dm index ccaef00cfc6..c815cc41ef1 100644 --- a/code/game/objects/items/devices/quantum_keycard.dm +++ b/code/game/objects/items/devices/quantum_keycard.dm @@ -1,8 +1,9 @@ /obj/item/quantum_keycard name = "quantum keycard" desc = "A keycard able to link to a quantum pad's particle signature, allowing other quantum pads to travel there instead of their linked pad." - icon = 'icons/obj/devices/tool.dmi' - icon_state = "quantum_keycard_gags" + icon = 'icons/map_icons/items/_item.dmi' + icon_state = "/obj/item/quantum_keycard" + post_init_icon_state = "quantum_keycard_gags" greyscale_config = /datum/greyscale_config/quantum_keycard greyscale_colors = COLOR_WHITE inhand_icon_state = "card-id" diff --git a/code/game/objects/items/devices/radio/encryptionkey.dm b/code/game/objects/items/devices/radio/encryptionkey.dm index d8d51697954..20246e94199 100644 --- a/code/game/objects/items/devices/radio/encryptionkey.dm +++ b/code/game/objects/items/devices/radio/encryptionkey.dm @@ -1,11 +1,12 @@ /obj/item/encryptionkey name = "standard encryption key" + icon = 'icons/map_icons/items/encryptionkey.dmi' + icon_state = "/obj/item/encryptionkey" + post_init_icon_state = "cypherkey_basic" desc = "An encryption key for a radio headset." - icon = 'icons/obj/devices/circuitry_n_data.dmi' - icon_state = "cypherkey_basic" - icon_preview = 'icons/obj/fluff/previews.dmi' - icon_state_preview = "cypherkey" w_class = WEIGHT_CLASS_TINY + greyscale_config = /datum/greyscale_config/encryptionkey_basic + greyscale_colors = "#820a16#3758c4" /// What channels does this encryption key grant to the parent headset. var/list/channels = list() /// Flags for which "special" radio networks should be accessible @@ -13,9 +14,6 @@ /// Assoc list of language to how well understood it is. 0 is invalid, 100 is perfect. var/list/language_data - greyscale_config = /datum/greyscale_config/encryptionkey_basic - greyscale_colors = "#820a16#3758c4" - /obj/item/encryptionkey/examine(mob/user) . = ..() if(!LAZYLEN(channels) && !(special_channels & RADIO_SPECIAL_BINARY) && !LAZYLEN(language_data)) @@ -49,7 +47,9 @@ /obj/item/encryptionkey/syndicate name = "syndicate encryption key" - icon_state = "cypherkey_syndicate" + icon = 'icons/map_icons/items/encryptionkey.dmi' + icon_state = "/obj/item/encryptionkey/syndicate" + post_init_icon_state = "cypherkey_syndicate" channels = list(RADIO_CHANNEL_SYNDICATE = 1) special_channels = RADIO_SPECIAL_SYNDIE greyscale_config = /datum/greyscale_config/encryptionkey_syndicate @@ -57,7 +57,9 @@ /obj/item/encryptionkey/binary name = "binary translator key" - icon_state = "cypherkey_basic" + icon = 'icons/map_icons/items/encryptionkey.dmi' + icon_state = "/obj/item/encryptionkey/binary" + post_init_icon_state = "cypherkey_basic" special_channels = RADIO_SPECIAL_BINARY language_data = list( /datum/language/machine = 100, @@ -67,153 +69,199 @@ /obj/item/encryptionkey/headset_sec name = "security radio encryption key" - icon_state = "cypherkey_security" + icon = 'icons/map_icons/items/encryptionkey.dmi' + icon_state = "/obj/item/encryptionkey/headset_sec" + post_init_icon_state = "cypherkey_security" channels = list(RADIO_CHANNEL_SECURITY = 1) greyscale_config = /datum/greyscale_config/encryptionkey_security greyscale_colors = "#820a16#280b1a" /obj/item/encryptionkey/headset_eng name = "engineering radio encryption key" - icon_state = "cypherkey_engineering" + icon = 'icons/map_icons/items/encryptionkey.dmi' + icon_state = "/obj/item/encryptionkey/headset_eng" + post_init_icon_state = "cypherkey_engineering" channels = list(RADIO_CHANNEL_ENGINEERING = 1) greyscale_config = /datum/greyscale_config/encryptionkey_engineering greyscale_colors = "#f8d860#dca01b" /obj/item/encryptionkey/headset_rob name = "robotics radio encryption key" - icon_state = "cypherkey_engineering" + icon = 'icons/map_icons/items/encryptionkey.dmi' + icon_state = "/obj/item/encryptionkey/headset_rob" + post_init_icon_state = "cypherkey_engineering" channels = list(RADIO_CHANNEL_SCIENCE = 1, RADIO_CHANNEL_ENGINEERING = 1) greyscale_config = /datum/greyscale_config/encryptionkey_engineering greyscale_colors = "#793a80#dca01b" /obj/item/encryptionkey/headset_med name = "medical radio encryption key" - icon_state = "cypherkey_medical" + icon = 'icons/map_icons/items/encryptionkey.dmi' + icon_state = "/obj/item/encryptionkey/headset_med" + post_init_icon_state = "cypherkey_medical" channels = list(RADIO_CHANNEL_MEDICAL = 1) greyscale_config = /datum/greyscale_config/encryptionkey_medical greyscale_colors = "#ebebeb#69abd1" /obj/item/encryptionkey/headset_sci name = "science radio encryption key" - icon_state = "cypherkey_research" + icon = 'icons/map_icons/items/encryptionkey.dmi' + icon_state = "/obj/item/encryptionkey/headset_sci" + post_init_icon_state = "cypherkey_research" channels = list(RADIO_CHANNEL_SCIENCE = 1) greyscale_config = /datum/greyscale_config/encryptionkey_research greyscale_colors = "#793a80#bc4a9b" /obj/item/encryptionkey/headset_medsci name = "medical research radio encryption key" - icon_state = "cypherkey_medical" + icon = 'icons/map_icons/items/encryptionkey.dmi' + icon_state = "/obj/item/encryptionkey/headset_medsci" + post_init_icon_state = "cypherkey_medical" channels = list(RADIO_CHANNEL_SCIENCE = 1, RADIO_CHANNEL_MEDICAL = 1) greyscale_config = /datum/greyscale_config/encryptionkey_medical greyscale_colors = "#ebebeb#9d1de8" /obj/item/encryptionkey/headset_srvsec name = "law and order radio encryption key" - icon_state = "cypherkey_service" + icon = 'icons/map_icons/items/encryptionkey.dmi' + icon_state = "/obj/item/encryptionkey/headset_srvsec" + post_init_icon_state = "cypherkey_service" channels = list(RADIO_CHANNEL_SERVICE = 1, RADIO_CHANNEL_SECURITY = 1) greyscale_config = /datum/greyscale_config/encryptionkey_service greyscale_colors = "#820a16#3bca5a" /obj/item/encryptionkey/headset_srvmed name = "psychology radio encryption key" - icon_state = "cypherkey_service" + icon = 'icons/map_icons/items/encryptionkey.dmi' + icon_state = "/obj/item/encryptionkey/headset_srvmed" + post_init_icon_state = "cypherkey_service" channels = list(RADIO_CHANNEL_MEDICAL = 1, RADIO_CHANNEL_SERVICE = 1) greyscale_config = /datum/greyscale_config/encryptionkey_service greyscale_colors = "#ebebeb#3bca5a" /obj/item/encryptionkey/headset_srvent name = "press radio encryption key" - icon_state = "cypherkey_service" + icon = 'icons/map_icons/items/encryptionkey.dmi' + icon_state = "/obj/item/encryptionkey/headset_srvent" + post_init_icon_state = "cypherkey_service" channels = list(RADIO_CHANNEL_SERVICE = 1, RADIO_CHANNEL_ENTERTAINMENT = 0) greyscale_config = /datum/greyscale_config/encryptionkey_service greyscale_colors = "#83eb8f#3bca5a" /obj/item/encryptionkey/headset_com name = "command radio encryption key" - icon_state = "cypherkey_cube" + icon = 'icons/map_icons/items/encryptionkey.dmi' + icon_state = "/obj/item/encryptionkey/headset_com" + post_init_icon_state = "cypherkey_cube" channels = list(RADIO_CHANNEL_COMMAND = 1) greyscale_config = /datum/greyscale_config/encryptionkey_cube greyscale_colors = "#2b2793#67a552" +/obj/item/encryptionkey/heads + flags_1 = parent_type::flags_1 | NO_NEW_GAGS_PREVIEW_1 + /obj/item/encryptionkey/heads/captain name = "\proper the captain's encryption key" - icon_state = "cypherkey_cube" + icon = 'icons/map_icons/items/encryptionkey.dmi' + icon_state = "/obj/item/encryptionkey/heads/captain" + post_init_icon_state = "cypherkey_cube" channels = list(RADIO_CHANNEL_COMMAND = 1, RADIO_CHANNEL_SECURITY = 1, RADIO_CHANNEL_ENGINEERING = 0, RADIO_CHANNEL_SCIENCE = 0, RADIO_CHANNEL_MEDICAL = 0, RADIO_CHANNEL_SUPPLY = 0, RADIO_CHANNEL_SERVICE = 0) greyscale_config = /datum/greyscale_config/encryptionkey_cube greyscale_colors = "#2b2793#dca01b" /obj/item/encryptionkey/heads/rd name = "\proper the research director's encryption key" - icon_state = "cypherkey_research" + icon = 'icons/map_icons/items/encryptionkey.dmi' + icon_state = "/obj/item/encryptionkey/heads/rd" + post_init_icon_state = "cypherkey_research" channels = list(RADIO_CHANNEL_SCIENCE = 1, RADIO_CHANNEL_COMMAND = 1) greyscale_config = /datum/greyscale_config/encryptionkey_research greyscale_colors = "#bc4a9b#793a80" /obj/item/encryptionkey/heads/hos name = "\proper the head of security's encryption key" - icon_state = "cypherkey_security" + icon = 'icons/map_icons/items/encryptionkey.dmi' + icon_state = "/obj/item/encryptionkey/heads/hos" + post_init_icon_state = "cypherkey_security" channels = list(RADIO_CHANNEL_SECURITY = 1, RADIO_CHANNEL_COMMAND = 1) greyscale_config = /datum/greyscale_config/encryptionkey_security greyscale_colors = "#280b1a#820a16" /obj/item/encryptionkey/heads/ce name = "\proper the chief engineer's encryption key" - icon_state = "cypherkey_engineering" + icon = 'icons/map_icons/items/encryptionkey.dmi' + icon_state = "/obj/item/encryptionkey/heads/ce" + post_init_icon_state = "cypherkey_engineering" channels = list(RADIO_CHANNEL_ENGINEERING = 1, RADIO_CHANNEL_COMMAND = 1) greyscale_config = /datum/greyscale_config/encryptionkey_engineering greyscale_colors = "#dca01b#f8d860" /obj/item/encryptionkey/heads/cmo name = "\proper the chief medical officer's encryption key" - icon_state = "cypherkey_medical" + icon = 'icons/map_icons/items/encryptionkey.dmi' + icon_state = "/obj/item/encryptionkey/heads/cmo" + post_init_icon_state = "cypherkey_medical" channels = list(RADIO_CHANNEL_MEDICAL = 1, RADIO_CHANNEL_COMMAND = 1) greyscale_config = /datum/greyscale_config/encryptionkey_medical greyscale_colors = "#ebebeb#2b2793" /obj/item/encryptionkey/heads/hop name = "\proper the head of personnel's encryption key" - icon_state = "cypherkey_cube" + icon = 'icons/map_icons/items/encryptionkey.dmi' + icon_state = "/obj/item/encryptionkey/heads/hop" + post_init_icon_state = "cypherkey_cube" channels = list(RADIO_CHANNEL_SERVICE = 1, RADIO_CHANNEL_COMMAND = 1) greyscale_config = /datum/greyscale_config/encryptionkey_cube greyscale_colors = "#2b2793#c2c1c9" /obj/item/encryptionkey/heads/qm name = "\proper the quartermaster's encryption key" - icon_state = "cypherkey_cargo" + icon = 'icons/map_icons/items/encryptionkey.dmi' + icon_state = "/obj/item/encryptionkey/heads/qm" + post_init_icon_state = "cypherkey_cargo" channels = list(RADIO_CHANNEL_SUPPLY = 1, RADIO_CHANNEL_COMMAND = 1) greyscale_config = /datum/greyscale_config/encryptionkey_cargo greyscale_colors = "#49241a#dca01b" /obj/item/encryptionkey/headset_cargo name = "supply radio encryption key" - icon_state = "cypherkey_cargo" + icon = 'icons/map_icons/items/encryptionkey.dmi' + icon_state = "/obj/item/encryptionkey/headset_cargo" + post_init_icon_state = "cypherkey_cargo" channels = list(RADIO_CHANNEL_SUPPLY = 1) greyscale_config = /datum/greyscale_config/encryptionkey_cargo greyscale_colors = "#49241a#7b3f2e" /obj/item/encryptionkey/headset_mining name = "mining radio encryption key" - icon_state = "cypherkey_cargo" + icon = 'icons/map_icons/items/encryptionkey.dmi' + icon_state = "/obj/item/encryptionkey/headset_mining" + post_init_icon_state = "cypherkey_cargo" channels = list(RADIO_CHANNEL_SUPPLY = 1, RADIO_CHANNEL_SCIENCE = 1) greyscale_config = /datum/greyscale_config/encryptionkey_cargo greyscale_colors = "#49241a#bc4a9b" /obj/item/encryptionkey/headset_service name = "service radio encryption key" - icon_state = "cypherkey_service" + icon = 'icons/map_icons/items/encryptionkey.dmi' + icon_state = "/obj/item/encryptionkey/headset_service" + post_init_icon_state = "cypherkey_service" channels = list(RADIO_CHANNEL_SERVICE = 1) greyscale_config = /datum/greyscale_config/encryptionkey_service greyscale_colors = "#3758c4#3bca5a" /obj/item/encryptionkey/headset_cent name = "\improper CentCom radio encryption key" - icon_state = "cypherkey_centcom" + icon = 'icons/map_icons/items/encryptionkey.dmi' + icon_state = "/obj/item/encryptionkey/headset_cent" + post_init_icon_state = "cypherkey_centcom" special_channels = RADIO_SPECIAL_CENTCOM channels = list(RADIO_CHANNEL_CENTCOM = 1) greyscale_config = /datum/greyscale_config/encryptionkey_centcom greyscale_colors = "#24a157#dca01b" /obj/item/encryptionkey/ai //ported from NT, this goes 'inside' the AI. + flags_1 = parent_type::flags_1 | NO_NEW_GAGS_PREVIEW_1 channels = list( RADIO_CHANNEL_COMMAND = 1, RADIO_CHANNEL_SECURITY = 1, @@ -228,6 +276,7 @@ /obj/item/encryptionkey/ai_with_binary name = "ai encryption key" + flags_1 = parent_type::flags_1 | NO_NEW_GAGS_PREVIEW_1 channels = list( RADIO_CHANNEL_COMMAND = 1, RADIO_CHANNEL_SECURITY = 1, @@ -246,7 +295,9 @@ /obj/item/encryptionkey/ai/evil //ported from NT, this goes 'inside' the AI. name = "syndicate binary encryption key" - icon_state = "cypherkey_syndicate" + icon = 'icons/map_icons/items/encryptionkey.dmi' + icon_state = "/obj/item/encryptionkey/ai_with_binary" + post_init_icon_state = "cypherkey_syndicate" channels = list(RADIO_CHANNEL_SYNDICATE = 1) special_channels = RADIO_SPECIAL_SYNDIE greyscale_config = /datum/greyscale_config/encryptionkey_syndicate diff --git a/code/game/objects/items/melee/misc.dm b/code/game/objects/items/melee/misc.dm index 49392c9b1f7..ab6a3778aef 100644 --- a/code/game/objects/items/melee/misc.dm +++ b/code/game/objects/items/melee/misc.dm @@ -521,8 +521,9 @@ /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/weapons/cleric_mace.dmi' - icon_state = "default" + icon = 'icons/map_icons/items/_item.dmi' + icon_state = "/obj/item/melee/cleric_mace" + post_init_icon_state = "default" inhand_icon_state = "default" worn_icon_state = "default_worn" icon_angle = -45 diff --git a/code/game/objects/items/pet_carrier.dm b/code/game/objects/items/pet_carrier.dm index 843abe98d37..ee3b323eec0 100644 --- a/code/game/objects/items/pet_carrier.dm +++ b/code/game/objects/items/pet_carrier.dm @@ -5,9 +5,10 @@ /obj/item/pet_carrier name = "pet carrier" desc = "A big white-and-blue pet carrier. Good for carrying meat to the chef cute animals around." - icon = 'icons/obj/pet_carrier.dmi' + icon = 'icons/map_icons/items/_item.dmi' + icon_state = "/obj/item/pet_carrier" + post_init_icon_state = "pet_carrier_open" base_icon_state = "pet_carrier" - icon_state = "pet_carrier_open" inhand_icon_state = "pet_carrier" lefthand_file = 'icons/mob/inhands/items_lefthand.dmi' righthand_file = 'icons/mob/inhands/items_righthand.dmi' @@ -224,8 +225,10 @@ /obj/item/pet_carrier/biopod name = "biopod" desc = "Alien device used for undescribable purpose. Or carrying pets." - base_icon_state = "biopod" + icon = 'icons/obj/pet_carrier.dmi' icon_state = "biopod_open" + post_init_icon_state = null + base_icon_state = "biopod" inhand_icon_state = "biopod" greyscale_config = null greyscale_config_inhand_left = null @@ -235,9 +238,11 @@ /obj/item/pet_carrier/small name = "small pet carrier" desc = "A small pet carrier for miniature sized animals." + icon = 'icons/obj/pet_carrier.dmi' + icon_state = "small_carrier_open" + post_init_icon_state = null w_class = WEIGHT_CLASS_NORMAL base_icon_state = "small_carrier" - icon_state = "small_carrier_open" inhand_icon_state = "syringe_kit" lefthand_file = 'icons/mob/inhands/equipment/medical_lefthand.dmi' righthand_file = 'icons/mob/inhands/equipment/medical_righthand.dmi' @@ -252,8 +257,8 @@ /obj/item/pet_carrier/small/mouse name = "small mouse carrier" desc = "A small pet carrier for miniature sized animals. This looks prepared for a mouse." - open = FALSE icon_state = "small_carrier_occupied_unlocked" + open = FALSE /obj/item/pet_carrier/small/mouse/Initialize(mapload) var/mob/living/basic/mouse/hero_mouse = new /mob/living/basic/mouse(src) diff --git a/code/game/objects/items/piggy_bank.dm b/code/game/objects/items/piggy_bank.dm index 0a14347116e..117220a0aac 100644 --- a/code/game/objects/items/piggy_bank.dm +++ b/code/game/objects/items/piggy_bank.dm @@ -152,6 +152,9 @@ /obj/item/piggy_bank/museum name = "Pigston Swinelord VI" desc = "The museum's mascot piggy bank and favorite embezzler, known to carry donations between shifts without paying taxes. The space IRS hates him." + icon = 'icons/map_icons/items/_item.dmi' + icon_state = "/obj/item/piggy_bank/museum" + post_init_icon_state = "piggy_bank" persistence_id = "museum_piggy" greyscale_colors = COLOR_PINK maximum_value = PAYCHECK_COMMAND * 100 @@ -164,6 +167,9 @@ /obj/item/piggy_bank/vault name = "vault piggy bank" desc = "A pig-shaped money container made of porkelain, containing the station's emergency funds carried between shifts, oink. Do not throw." + icon = 'icons/map_icons/items/_item.dmi' + icon_state = "/obj/item/piggy_bank/vault" + post_init_icon_state = "piggy_bank" persistence_id = "vault_piggy" greyscale_colors = COLOR_LIGHT_ORANGE maximum_value = PAYCHECK_COMMAND * 33 diff --git a/code/game/objects/items/plushes.dm b/code/game/objects/items/plushes.dm index 05babd8415a..d765951a311 100644 --- a/code/game/objects/items/plushes.dm +++ b/code/game/objects/items/plushes.dm @@ -388,7 +388,9 @@ /obj/item/toy/plush/carpplushie name = "space carp plushie" desc = "An adorable stuffed toy that resembles a space carp." - icon_state = "map_plushie_carp" + icon = 'icons/map_icons/items/_item.dmi' + icon_state = "/obj/item/toy/plush/carpplushie" + post_init_icon_state = "map_plushie_carp" greyscale_config = /datum/greyscale_config/plush_carp greyscale_colors = "#cc99ff#000000" inhand_icon_state = "carp_plushie" @@ -531,10 +533,16 @@ // Preset lizard plushie that uses the original lizard plush green. (Or close to it) /obj/item/toy/plush/lizard_plushie/green desc = "An adorable stuffed toy that resembles a green lizardperson. This one fills you with nostalgia and soul." + icon = 'icons/map_icons/items/_item.dmi' + icon_state = "/obj/item/toy/plush/lizard_plushie/green" + post_init_icon_state = "map_plushie_lizard" greyscale_colors = "#66ff33#000000" /obj/item/toy/plush/lizard_plushie/greyscale desc = "An adorable stuffed toy that resembles a lizardperson. This one has been custom made." + icon = 'icons/map_icons/items/_item.dmi' + icon_state = "/obj/item/toy/plush/lizard_plushie/greyscale" + post_init_icon_state = "map_plushie_lizard" greyscale_colors = "#d3d3d3#000000" flags_1 = IS_PLAYER_COLORABLE_1 @@ -549,12 +557,17 @@ /obj/item/toy/plush/lizard_plushie/space/green desc = "An adorable stuffed toy that resembles a very determined spacefaring green lizardperson. To infinity and beyond, little guy. This one fills you with nostalgia and soul." + icon = 'icons/map_icons/items/_item.dmi' + icon_state = "/obj/item/toy/plush/lizard_plushie/space/green" + post_init_icon_state = "map_plushie_spacelizard" greyscale_colors = "#66ff33#000000" /obj/item/toy/plush/snakeplushie name = "snake plushie" desc = "An adorable stuffed toy that resembles a snake. Not to be mistaken for the real thing." - icon_state = "map_plushie_snake" + icon = 'icons/map_icons/items/_item.dmi' + icon_state = "/obj/item/toy/plush/snakeplushie" + post_init_icon_state = "map_plushie_snake" greyscale_config = /datum/greyscale_config/plush_snake greyscale_colors = "#99ff99#000000" inhand_icon_state = null @@ -583,7 +596,9 @@ /obj/item/toy/plush/slimeplushie name = "slime plushie" desc = "An adorable stuffed toy that resembles a slime. It is practically just a hacky sack." - icon_state = "map_plushie_slime" + icon = 'icons/map_icons/items/_item.dmi' + icon_state = "/obj/item/toy/plush/slimeplushie" + post_init_icon_state = "map_plushie_slime" greyscale_config = /datum/greyscale_config/plush_slime greyscale_colors = "#aaaaff#000000" inhand_icon_state = null diff --git a/code/game/objects/items/stacks/tape.dm b/code/game/objects/items/stacks/tape.dm index d32ab025b6c..d06b2250ed2 100644 --- a/code/game/objects/items/stacks/tape.dm +++ b/code/game/objects/items/stacks/tape.dm @@ -2,8 +2,9 @@ name = "sticky tape" singular_name = "sticky tape" desc = "Used for sticking to things for sticking said things to people." - icon = 'icons/obj/tapes.dmi' - icon_state = "tape" + icon = 'icons/map_icons/items/_item.dmi' + icon_state = "/obj/item/stack/sticky_tape" + post_init_icon_state = "tape" var/prefix = "sticky" w_class = WEIGHT_CLASS_TINY full_w_class = WEIGHT_CLASS_TINY @@ -99,9 +100,11 @@ /obj/item/stack/sticky_tape/pointy name = "pointy tape" + icon = 'icons/map_icons/items/_item.dmi' + icon_state = "/obj/item/stack/sticky_tape/pointy" + post_init_icon_state = "tape_spikes" singular_name = "pointy tape" desc = "Used for sticking to things for sticking said things inside people." - icon_state = "tape_spikes" prefix = "pointy" conferred_embed = /datum/embedding/pointy_tape merge_type = /obj/item/stack/sticky_tape/pointy diff --git a/code/game/objects/items/stacks/wrap.dm b/code/game/objects/items/stacks/wrap.dm index 54fe0aac410..76194010707 100644 --- a/code/game/objects/items/stacks/wrap.dm +++ b/code/game/objects/items/stacks/wrap.dm @@ -63,6 +63,9 @@ //preset wrapping paper meant to fill the original color configuration /obj/item/stack/wrapping_paper/xmas + icon = 'icons/map_icons/items/_item.dmi' + icon_state = "/obj/item/stack/wrapping_paper/xmas" + post_init_icon_state = "wrap_paper" greyscale_colors = "#00FF00#FF0000" /obj/item/stack/wrapping_paper/use(used, transfer, check = TRUE) diff --git a/code/game/objects/items/tools/screwdriver.dm b/code/game/objects/items/tools/screwdriver.dm index cb6411e7e8c..143bd63cfd0 100644 --- a/code/game/objects/items/tools/screwdriver.dm +++ b/code/game/objects/items/tools/screwdriver.dm @@ -66,6 +66,7 @@ desc = "An ultrasonic screwdriver." icon = 'icons/obj/antags/abductor.dmi' icon_state = "screwdriver_a" + post_init_icon_state = null inhand_icon_state = "screwdriver_nuke" custom_materials = list(/datum/material/iron=HALF_SHEET_MATERIAL_AMOUNT*5, /datum/material/silver=SHEET_MATERIAL_AMOUNT*1.25, /datum/material/plasma =HALF_SHEET_MATERIAL_AMOUNT, /datum/material/titanium =SHEET_MATERIAL_AMOUNT, /datum/material/diamond =SHEET_MATERIAL_AMOUNT) usesound = 'sound/items/pshoom/pshoom.ogg' @@ -80,6 +81,7 @@ /obj/item/screwdriver/power name = "hand drill" desc = "A simple powered hand drill." + icon = 'icons/obj/tools.dmi' icon_state = "drill" inside_belt_icon_state = null inhand_icon_state = "drill" diff --git a/code/game/objects/structures/beds_chairs/sofa.dm b/code/game/objects/structures/beds_chairs/sofa.dm index 36b95e9515e..986bbcd99a0 100644 --- a/code/game/objects/structures/beds_chairs/sofa.dm +++ b/code/game/objects/structures/beds_chairs/sofa.dm @@ -73,25 +73,31 @@ COLORED_SOFA(/obj/structure/chair/sofa, maroon, SOFA_MAROON) /obj/structure/chair/sofa/bench name = "bench" desc = "Perfectly designed to be comfortable to sit on, and hellish to sleep on." - icon_state = "bench_middle" + icon = 'icons/map_icons/objects.dmi' + icon_state = "/obj/structure/chair/sofa/bench" + post_init_icon_state = "bench_middle" greyscale_config = /datum/greyscale_config/bench_middle greyscale_colors = "#af7d28" has_armrest = FALSE /obj/structure/chair/sofa/bench/left - icon_state = "bench_left" + icon_state = "/obj/structure/chair/sofa/bench/left" + post_init_icon_state = "bench_left" greyscale_config = /datum/greyscale_config/bench_left /obj/structure/chair/sofa/bench/right - icon_state = "bench_right" + icon_state = "/obj/structure/chair/sofa/bench/right" + post_init_icon_state = "bench_right" greyscale_config = /datum/greyscale_config/bench_right /obj/structure/chair/sofa/bench/corner - icon_state = "bench_corner" + icon_state = "/obj/structure/chair/sofa/bench/corner" + post_init_icon_state = "bench_corner" greyscale_config = /datum/greyscale_config/bench_corner /obj/structure/chair/sofa/bench/solo - icon_state = "bench_solo" + icon_state = "/obj/structure/chair/sofa/bench/solo" + post_init_icon_state = "bench_solo" greyscale_config = /datum/greyscale_config/bench_solo diff --git a/code/game/objects/structures/maintenance.dm b/code/game/objects/structures/maintenance.dm index 4a4a30c1a0a..19a7815c1b4 100644 --- a/code/game/objects/structures/maintenance.dm +++ b/code/game/objects/structures/maintenance.dm @@ -231,6 +231,7 @@ at the cost of risking a vicious bite.**/ /obj/item/clothing/under/pants/slacks/altar name = "strange pants" desc = "A pair of pants. They do not look or feel natural, and smell like fresh blood." + icon_state = "/obj/item/clothing/under/pants/slacks/altar" greyscale_colors = "#ffffff#ffffff#ffffff" flags_1 = NONE //If IS_PLAYER_COLORABLE gets added color-changing support (i.e. spraycans), these won't end up getting it too. Plus, it already has its own recolor. diff --git a/code/modules/asset_cache/assets/crafting.dm b/code/modules/asset_cache/assets/crafting.dm index a196736fcfe..36c3c9f105a 100644 --- a/code/modules/asset_cache/assets/crafting.dm +++ b/code/modules/asset_cache/assets/crafting.dm @@ -36,8 +36,13 @@ icon_file = style.icon icon_state = style.icon_state - icon_file ||= initial(preview_item.icon_preview) || initial(preview_item.icon) - icon_state ||= initial(preview_item.icon_state_preview) || initial(preview_item.icon_state) + if(preview_item.greyscale_config) + var/datum/greyscale_config/greyscale_config = preview_item::greyscale_config + icon_file ||= preview_item::icon_preview || greyscale_config::icon_file + icon_state ||= preview_item::icon_state_preview || preview_item::post_init_icon_state || preview_item::icon_state + else + icon_file ||= preview_item::icon_preview || preview_item::icon + icon_state ||= preview_item::icon_state_preview || preview_item::icon_state if(PERFORM_ALL_TESTS(focus_only/bad_cooking_crafting_icons)) if(!icon_exists_or_scream(icon_file, icon_state)) diff --git a/code/modules/asset_cache/assets/research_designs.dm b/code/modules/asset_cache/assets/research_designs.dm index dffef470344..3f28fcdd67b 100644 --- a/code/modules/asset_cache/assets/research_designs.dm +++ b/code/modules/asset_cache/assets/research_designs.dm @@ -12,8 +12,8 @@ var/datum/icon_transformer/transform = null if(initial(path.research_icon) && initial(path.research_icon_state)) //If the design has an icon replacement skip the rest - icon_file = initial(path.research_icon) - icon_state = initial(path.research_icon_state) + icon_file = path::research_icon + icon_state = path::research_icon_state if (PERFORM_ALL_TESTS(focus_only/invalid_research_designs)) if(!icon_exists(icon_file, icon_state)) stack_trace("design [path] with icon '[icon_file]' missing state '[icon_state]'") @@ -37,15 +37,15 @@ item = machine // GAGS icon short-circuit the rest of the checks - if (initial(item.greyscale_config) && initial(item.greyscale_colors)) - insert_icon(initial(path.id), gags_to_universal_icon(item)) + if (item::greyscale_config && item::greyscale_colors) + insert_icon(path::id, gags_to_universal_icon(item)) continue else - icon_file = initial(item.icon) + icon_file = item::icon - icon_state = initial(item.icon_state) - if(initial(item.color)) - transform = color_transform(initial(item.color)) + icon_state = item::icon_state + if(item::color) + transform = color_transform(item::color) if (PERFORM_ALL_TESTS(focus_only/invalid_research_designs)) if(!icon_exists(icon_file, icon_state)) stack_trace("design [path] with icon '[icon_file]' missing state '[icon_state]'") diff --git a/code/modules/asset_cache/spritesheet/batched/universal_icon.dm b/code/modules/asset_cache/spritesheet/batched/universal_icon.dm index 08c37646459..3f06001900b 100644 --- a/code/modules/asset_cache/spritesheet/batched/universal_icon.dm +++ b/code/modules/asset_cache/spritesheet/batched/universal_icon.dm @@ -210,7 +210,7 @@ CRASH("gags_to_universal_icon() received an invalid path of \"[path]\"!") var/datum/greyscale_config/config = initial(path.greyscale_config) var/colors = initial(path.greyscale_colors) - var/datum/universal_icon/entry = SSgreyscale.GetColoredIconByTypeUniversalIcon(config, colors, initial(path.icon_state)) + var/datum/universal_icon/entry = SSgreyscale.GetColoredIconByTypeUniversalIcon(config, colors, path::post_init_icon_state || path::icon_state) return entry /// Gets the relevant universal icon for an atom, when displayed in TGUI. (see: icon_state_preview) diff --git a/code/modules/atmospherics/machinery/components/tank.dm b/code/modules/atmospherics/machinery/components/tank.dm index 272fff1ddb8..c82cf1e9a15 100644 --- a/code/modules/atmospherics/machinery/components/tank.dm +++ b/code/modules/atmospherics/machinery/components/tank.dm @@ -1,13 +1,14 @@ #define TANK_PLATING_SHEETS 12 /obj/machinery/atmospherics/components/tank - icon = 'icons/obj/pipes_n_cables/stationary_canisters.dmi' - icon_state = "canister-0" - base_icon_state = "canister" - name = "pressure tank" desc = "A large vessel containing pressurized gas." + icon = 'icons/map_icons/objects.dmi' + icon_state = "/obj/machinery/atmospherics/components/tank" + post_init_icon_state = "canister-0" + base_icon_state = "canister" + max_integrity = 800 integrity_failure = 0.2 density = TRUE @@ -421,6 +422,7 @@ /obj/machinery/atmospherics/components/tank/air name = "pressure tank (Air)" + flags_1 = parent_type::flags_1 | NO_NEW_GAGS_PREVIEW_1 /obj/machinery/atmospherics/components/tank/air/layer1 piping_layer = 1 @@ -441,63 +443,83 @@ /obj/machinery/atmospherics/components/tank/carbon_dioxide gas_type = /datum/gas/carbon_dioxide + flags_1 = parent_type::flags_1 | NO_NEW_GAGS_PREVIEW_1 /obj/machinery/atmospherics/components/tank/plasma gas_type = /datum/gas/plasma + flags_1 = parent_type::flags_1 | NO_NEW_GAGS_PREVIEW_1 /obj/machinery/atmospherics/components/tank/nitrogen gas_type = /datum/gas/nitrogen + flags_1 = parent_type::flags_1 | NO_NEW_GAGS_PREVIEW_1 /obj/machinery/atmospherics/components/tank/oxygen gas_type = /datum/gas/oxygen + flags_1 = parent_type::flags_1 | NO_NEW_GAGS_PREVIEW_1 /obj/machinery/atmospherics/components/tank/nitrous gas_type = /datum/gas/nitrous_oxide + flags_1 = parent_type::flags_1 | NO_NEW_GAGS_PREVIEW_1 /obj/machinery/atmospherics/components/tank/bz gas_type = /datum/gas/bz + flags_1 = parent_type::flags_1 | NO_NEW_GAGS_PREVIEW_1 /obj/machinery/atmospherics/components/tank/freon gas_type = /datum/gas/freon + flags_1 = parent_type::flags_1 | NO_NEW_GAGS_PREVIEW_1 /obj/machinery/atmospherics/components/tank/halon gas_type = /datum/gas/halon + flags_1 = parent_type::flags_1 | NO_NEW_GAGS_PREVIEW_1 /obj/machinery/atmospherics/components/tank/healium gas_type = /datum/gas/healium + flags_1 = parent_type::flags_1 | NO_NEW_GAGS_PREVIEW_1 /obj/machinery/atmospherics/components/tank/hydrogen gas_type = /datum/gas/hydrogen + flags_1 = parent_type::flags_1 | NO_NEW_GAGS_PREVIEW_1 /obj/machinery/atmospherics/components/tank/hypernoblium gas_type = /datum/gas/hypernoblium + flags_1 = parent_type::flags_1 | NO_NEW_GAGS_PREVIEW_1 /obj/machinery/atmospherics/components/tank/miasma gas_type = /datum/gas/miasma + flags_1 = parent_type::flags_1 | NO_NEW_GAGS_PREVIEW_1 /obj/machinery/atmospherics/components/tank/nitrium gas_type = /datum/gas/nitrium + flags_1 = parent_type::flags_1 | NO_NEW_GAGS_PREVIEW_1 /obj/machinery/atmospherics/components/tank/pluoxium gas_type = /datum/gas/pluoxium + flags_1 = parent_type::flags_1 | NO_NEW_GAGS_PREVIEW_1 /obj/machinery/atmospherics/components/tank/proto_nitrate gas_type = /datum/gas/proto_nitrate + flags_1 = parent_type::flags_1 | NO_NEW_GAGS_PREVIEW_1 /obj/machinery/atmospherics/components/tank/tritium gas_type = /datum/gas/tritium + flags_1 = parent_type::flags_1 | NO_NEW_GAGS_PREVIEW_1 /obj/machinery/atmospherics/components/tank/water_vapor gas_type = /datum/gas/water_vapor + flags_1 = parent_type::flags_1 | NO_NEW_GAGS_PREVIEW_1 /obj/machinery/atmospherics/components/tank/zauker gas_type = /datum/gas/zauker + flags_1 = parent_type::flags_1 | NO_NEW_GAGS_PREVIEW_1 /obj/machinery/atmospherics/components/tank/helium gas_type = /datum/gas/helium + flags_1 = parent_type::flags_1 | NO_NEW_GAGS_PREVIEW_1 /obj/machinery/atmospherics/components/tank/antinoblium gas_type = /datum/gas/antinoblium + flags_1 = parent_type::flags_1 | NO_NEW_GAGS_PREVIEW_1 /////////////////////////////////////////////////////////////////// // Tank Frame Structure diff --git a/code/modules/atmospherics/machinery/components/unary_devices/thermomachine.dm b/code/modules/atmospherics/machinery/components/unary_devices/thermomachine.dm index df4bfd21af8..77d7d0a66f1 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/thermomachine.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/thermomachine.dm @@ -1,15 +1,16 @@ #define THERMOMACHINE_POWER_CONVERSION 0.01 /obj/machinery/atmospherics/components/unary/thermomachine - icon = 'icons/obj/machines/atmospherics/thermomachine.dmi' - icon_state = "thermo_base" + name = "Temperature control unit" + desc = "Heats or cools gas in connected pipes." + + icon = 'icons/map_icons/objects.dmi' + icon_state = "/obj/machinery/atmospherics/components/unary/thermomachine" + post_init_icon_state = "thermo_base" plane = GAME_PLANE interaction_flags_atom = INTERACT_ATOM_ATTACK_HAND | INTERACT_ATOM_UI_INTERACT - name = "Temperature control unit" - desc = "Heats or cools gas in connected pipes." - density = TRUE max_integrity = 300 armor_type = /datum/armor/unary_thermomachine @@ -126,9 +127,7 @@ /obj/machinery/atmospherics/components/unary/thermomachine/update_overlays() . = ..() - if(!initial(icon)) - return - var/mutable_appearance/thermo_overlay = new(initial(icon)) + var/mutable_appearance/thermo_overlay = new(icon) var/image/pipe = get_pipe_image(thermo_overlay, "pipe", dir, pipe_color, piping_layer) pipe.appearance_flags |= RESET_COLOR|KEEP_APART . += pipe @@ -334,6 +333,7 @@ return /obj/machinery/atmospherics/components/unary/thermomachine/freezer + flags_1 = parent_type::flags_1 | NO_NEW_GAGS_PREVIEW_1 /obj/machinery/atmospherics/components/unary/thermomachine/freezer/layer1 piping_layer = 1 @@ -348,16 +348,19 @@ piping_layer = 5 /obj/machinery/atmospherics/components/unary/thermomachine/freezer/on + icon_state = "/obj/machinery/atmospherics/components/unary/thermomachine/freezer/on" + post_init_icon_state = "thermo_1" + flags_1 = /obj/machinery/atmospherics/components/unary/thermomachine::flags_1 // we want this one to generate a preview on = TRUE - icon_state = "thermo_base_1" /obj/machinery/atmospherics/components/unary/thermomachine/freezer/on/Initialize(mapload) . = ..() if(target_temperature == initial(target_temperature)) target_temperature = min_temperature + /obj/machinery/atmospherics/components/unary/thermomachine/freezer/on/coldroom name = "Cold room temperature control unit" - icon_state = "thermo_base_1" + icon_state = "/obj/machinery/atmospherics/components/unary/thermomachine/freezer/on/coldroom" greyscale_colors = COLOR_CYAN /obj/machinery/atmospherics/components/unary/thermomachine/freezer/on/coldroom/Initialize(mapload) @@ -365,6 +368,7 @@ target_temperature = COLD_ROOM_TEMP /obj/machinery/atmospherics/components/unary/thermomachine/heater + flags_1 = parent_type::flags_1 | NO_NEW_GAGS_PREVIEW_1 /obj/machinery/atmospherics/components/unary/thermomachine/heater/layer1 piping_layer = 1 @@ -379,7 +383,8 @@ piping_layer = 5 /obj/machinery/atmospherics/components/unary/thermomachine/heater/on + icon_state = "/obj/machinery/atmospherics/components/unary/thermomachine/freezer/on" // same icon as the freezer + post_init_icon_state = "thermo_1" on = TRUE - icon_state = "thermo_base_1" #undef THERMOMACHINE_POWER_CONVERSION diff --git a/code/modules/atmospherics/machinery/other/meter.dm b/code/modules/atmospherics/machinery/other/meter.dm index cee96ae0ee7..d74841072e2 100644 --- a/code/modules/atmospherics/machinery/other/meter.dm +++ b/code/modules/atmospherics/machinery/other/meter.dm @@ -1,8 +1,9 @@ /obj/machinery/meter name = "gas flow meter" desc = "It measures something." - icon = 'icons/obj/pipes_n_cables/meter.dmi' - icon_state = "meter" + icon = 'icons/map_icons/objects.dmi' + icon_state = "/obj/machinery/meter" + post_init_icon_state = "meter" layer = HIGH_PIPE_LAYER power_channel = AREA_USAGE_ENVIRON idle_power_usage = BASE_MACHINE_IDLE_CONSUMPTION * 0.05 @@ -198,12 +199,15 @@ // TURF METER - REPORTS A TILE'S AIR CONTENTS // why are you yelling? /obj/machinery/meter/turf + flags_1 = parent_type::flags_1 | NO_NEW_GAGS_PREVIEW_1 /obj/machinery/meter/turf/reattach_to_layer() target = loc /obj/machinery/meter/layer2 target_layer = 2 + flags_1 = parent_type::flags_1 | NO_NEW_GAGS_PREVIEW_1 /obj/machinery/meter/layer4 target_layer = 4 + flags_1 = parent_type::flags_1 | NO_NEW_GAGS_PREVIEW_1 diff --git a/code/modules/atmospherics/machinery/portable/canister.dm b/code/modules/atmospherics/machinery/portable/canister.dm index 684e5e1e5c4..e1b9db1c78d 100644 --- a/code/modules/atmospherics/machinery/portable/canister.dm +++ b/code/modules/atmospherics/machinery/portable/canister.dm @@ -6,8 +6,9 @@ /obj/machinery/portable_atmospherics/canister name = "canister" desc = "A canister for the storage of gas." - icon = 'icons/obj/pipes_n_cables/canisters.dmi' - icon_state = "#mapme" + icon = 'icons/map_icons/objects.dmi' + icon_state = "/obj/machinery/portable_atmospherics/canister" + post_init_icon_state = "" greyscale_config = /datum/greyscale_config/canister greyscale_colors = "#6b6b80" density = TRUE @@ -115,6 +116,8 @@ /obj/machinery/portable_atmospherics/canister/air name = "Air canister" desc = "Pre-mixed air." + icon_state = "/obj/machinery/portable_atmospherics/canister/air" + post_init_icon_state = "" greyscale_config = /datum/greyscale_config/canister greyscale_colors = "#c6c0b5" @@ -122,18 +125,24 @@ name = "Antinoblium canister" gas_type = /datum/gas/antinoblium filled = 1 + icon_state = "/obj/machinery/portable_atmospherics/canister/antinoblium" + post_init_icon_state = "" greyscale_config = /datum/greyscale_config/canister/double_stripe greyscale_colors = "#333333#fefb30" /obj/machinery/portable_atmospherics/canister/bz name = "\improper BZ canister" gas_type = /datum/gas/bz + icon_state = "/obj/machinery/portable_atmospherics/canister/bz" + post_init_icon_state = "" greyscale_config = /datum/greyscale_config/canister/double_stripe greyscale_colors = "#9b5d7f#d0d2a0" /obj/machinery/portable_atmospherics/canister/carbon_dioxide name = "Carbon dioxide canister" gas_type = /datum/gas/carbon_dioxide + icon_state = "/obj/machinery/portable_atmospherics/canister/carbon_dioxide" + post_init_icon_state = "" greyscale_config = /datum/greyscale_config/canister/double_stripe greyscale_colors = "#4e4c48#eaeaea" @@ -141,6 +150,8 @@ name = "Freon canister" gas_type = /datum/gas/freon filled = 1 + icon_state = "/obj/machinery/portable_atmospherics/canister/freon" + post_init_icon_state = "" greyscale_config = /datum/greyscale_config/canister/double_stripe greyscale_colors = "#6696ee#fefb30" @@ -148,6 +159,8 @@ name = "Halon canister" gas_type = /datum/gas/halon filled = 1 + icon_state = "/obj/machinery/portable_atmospherics/canister/halon" + post_init_icon_state = "" greyscale_config = /datum/greyscale_config/canister/double_stripe greyscale_colors = "#9b5d7f#368bff" @@ -155,6 +168,8 @@ name = "Healium canister" gas_type = /datum/gas/healium filled = 1 + icon_state = "/obj/machinery/portable_atmospherics/canister/healium" + post_init_icon_state = "" greyscale_config = /datum/greyscale_config/canister/double_stripe greyscale_colors = "#009823#ff0e00" @@ -162,6 +177,8 @@ name = "Helium canister" gas_type = /datum/gas/helium filled = 1 + icon_state = "/obj/machinery/portable_atmospherics/canister/helium" + post_init_icon_state = "" greyscale_config = /datum/greyscale_config/canister/double_stripe greyscale_colors = "#9b5d7f#368bff" @@ -169,6 +186,8 @@ name = "Hydrogen canister" gas_type = /datum/gas/hydrogen filled = 1 + icon_state = "/obj/machinery/portable_atmospherics/canister/hydrogen" + post_init_icon_state = "" greyscale_config = /datum/greyscale_config/canister/double_stripe greyscale_colors = "#eaeaea#be3455" @@ -176,42 +195,56 @@ name = "Miasma canister" gas_type = /datum/gas/miasma filled = 1 + icon_state = "/obj/machinery/portable_atmospherics/canister/miasma" + post_init_icon_state = "" greyscale_config = /datum/greyscale_config/canister/double_stripe greyscale_colors = "#009823#f7d5d3" /obj/machinery/portable_atmospherics/canister/nitrogen name = "Nitrogen canister" gas_type = /datum/gas/nitrogen + icon_state = "/obj/machinery/portable_atmospherics/canister/nitrogen" + post_init_icon_state = "" greyscale_config = /datum/greyscale_config/canister/double_stripe greyscale_colors = "#e9ff5c#f4fce8" /obj/machinery/portable_atmospherics/canister/nitrous_oxide name = "Nitrous oxide canister" gas_type = /datum/gas/nitrous_oxide + icon_state = "/obj/machinery/portable_atmospherics/canister/nitrous_oxide" + post_init_icon_state = "" greyscale_config = /datum/greyscale_config/canister/double_stripe greyscale_colors = "#c63e3b#f7d5d3" /obj/machinery/portable_atmospherics/canister/nitrium name = "Nitrium canister" gas_type = /datum/gas/nitrium + icon_state = "/obj/machinery/portable_atmospherics/canister/nitrium" + post_init_icon_state = "" greyscale_config = /datum/greyscale_config/canister greyscale_colors = "#7b4732" /obj/machinery/portable_atmospherics/canister/nob name = "Hyper-noblium canister" gas_type = /datum/gas/hypernoblium + icon_state = "/obj/machinery/portable_atmospherics/canister/nob" + post_init_icon_state = "" greyscale_config = /datum/greyscale_config/canister/double_stripe greyscale_colors = "#6399fc#b2b2b2" /obj/machinery/portable_atmospherics/canister/oxygen name = "Oxygen canister" gas_type = /datum/gas/oxygen + icon_state = "/obj/machinery/portable_atmospherics/canister/oxygen" + post_init_icon_state = "" greyscale_config = /datum/greyscale_config/canister/stripe greyscale_colors = "#2786e5#e8fefe" /obj/machinery/portable_atmospherics/canister/pluoxium name = "Pluoxium canister" gas_type = /datum/gas/pluoxium + icon_state = "/obj/machinery/portable_atmospherics/canister/pluoxium" + post_init_icon_state = "" greyscale_config = /datum/greyscale_config/canister greyscale_colors = "#2786e5" @@ -219,18 +252,24 @@ name = "Proto Nitrate canister" gas_type = /datum/gas/proto_nitrate filled = 1 + icon_state = "/obj/machinery/portable_atmospherics/canister/proto_nitrate" + post_init_icon_state = "" greyscale_config = /datum/greyscale_config/canister/double_stripe greyscale_colors = "#008200#33cc33" /obj/machinery/portable_atmospherics/canister/plasma name = "Plasma canister" gas_type = /datum/gas/plasma + icon_state = "/obj/machinery/portable_atmospherics/canister/plasma" + post_init_icon_state = "" greyscale_config = /datum/greyscale_config/canister/hazard greyscale_colors = "#f62800#000000" /obj/machinery/portable_atmospherics/canister/tritium name = "Tritium canister" gas_type = /datum/gas/tritium + icon_state = "/obj/machinery/portable_atmospherics/canister/tritium" + post_init_icon_state = "" greyscale_config = /datum/greyscale_config/canister/hazard greyscale_colors = "#3fcd40#000000" @@ -238,6 +277,8 @@ name = "Water vapor canister" gas_type = /datum/gas/water_vapor filled = 1 + icon_state = "/obj/machinery/portable_atmospherics/canister/water_vapor" + post_init_icon_state = "" greyscale_config = /datum/greyscale_config/canister/double_stripe greyscale_colors = "#4c4e4d#f7d5d3" @@ -245,6 +286,8 @@ name = "Zauker canister" gas_type = /datum/gas/zauker filled = 1 + icon_state = "/obj/machinery/portable_atmospherics/canister/zauker" + post_init_icon_state = "" greyscale_config = /datum/greyscale_config/canister/double_stripe greyscale_colors = "#009a00#006600" @@ -266,6 +309,8 @@ /obj/machinery/portable_atmospherics/canister/anesthetic_mix name = "Anesthetic mix" desc = "A mixture of N2O and Oxygen" + icon_state = "/obj/machinery/portable_atmospherics/canister/anesthetic_mix" + post_init_icon_state = "" greyscale_config = /datum/greyscale_config/canister/double_stripe greyscale_colors = "#9fba6c#3d4680" @@ -629,7 +674,7 @@ var/datum/greyscale_modify_menu/menu = new( src, usr, list("[initial_config]"), CALLBACK(src, PROC_REF(recolor)), - starting_icon_state = initial(icon_state), + starting_icon_state = initial(post_init_icon_state) || initial(icon_state), starting_config = initial_config, starting_colors = initial(greyscale_colors) ) diff --git a/code/modules/bitrunning/objects/gimmick_disks/dungeon_disk.dm b/code/modules/bitrunning/objects/gimmick_disks/dungeon_disk.dm index 1a90072c884..9f595d5774f 100644 --- a/code/modules/bitrunning/objects/gimmick_disks/dungeon_disk.dm +++ b/code/modules/bitrunning/objects/gimmick_disks/dungeon_disk.dm @@ -122,6 +122,7 @@ /obj/item/clothing/mask/facescarf/rogue name = "cloth of DOOM" + icon_state = "/obj/item/clothing/mask/facescarf/rogue" greyscale_colors = "#292929" /obj/item/clothing/glasses/eyepatch diff --git a/code/modules/capture_the_flag/ctf_equipment.dm b/code/modules/capture_the_flag/ctf_equipment.dm index c6ae2d005e7..6360f763678 100644 --- a/code/modules/capture_the_flag/ctf_equipment.dm +++ b/code/modules/capture_the_flag/ctf_equipment.dm @@ -190,12 +190,13 @@ /obj/item/clothing/suit/armor/vest/ctf name = "white shielded vest" desc = "Standard issue vest for playing capture the flag." - icon = 'icons/mob/clothing/suits/ctf.dmi' worn_icon = 'icons/mob/clothing/suits/ctf.dmi' - icon_state = "standard" // Adding TRAIT_NODROP is done when the CTF spawner equips people armor_type = /datum/armor/none allowed = null + icon = 'icons/map_icons/clothing/suit/_suit.dmi' + icon_state = "/obj/item/clothing/suit/armor/vest/ctf" + post_init_icon_state = "standard" greyscale_config = /datum/greyscale_config/ctf_standard greyscale_config_worn = /datum/greyscale_config/ctf_standard/worn greyscale_colors = "#ffffff" @@ -227,7 +228,9 @@ /obj/item/clothing/suit/armor/vest/ctf/light name = "light white shielded vest" desc = "Lightweight vest for playing capture the flag." - icon_state = "light" + icon = 'icons/map_icons/clothing/suit/_suit.dmi' + icon_state = "/obj/item/clothing/suit/armor/vest/ctf/light" + post_init_icon_state = "light" greyscale_config = /datum/greyscale_config/ctf_light greyscale_config_worn = /datum/greyscale_config/ctf_light/worn slowdown = -0.25 @@ -484,6 +487,7 @@ // Regular /obj/item/clothing/suit/armor/vest/ctf/red name = "red shielded vest" + icon_state = "/obj/item/clothing/suit/armor/vest/ctf/red" inhand_icon_state = null team_shield_icon = "shield-red" greyscale_colors = COLOR_VIVID_RED @@ -491,6 +495,7 @@ // Light /obj/item/clothing/suit/armor/vest/ctf/light/red name = "light red shielded vest" + icon_state = "/obj/item/clothing/suit/armor/vest/ctf/light/red" inhand_icon_state = null team_shield_icon = "shield-red" greyscale_colors = COLOR_VIVID_RED @@ -500,6 +505,7 @@ // Regular /obj/item/clothing/suit/armor/vest/ctf/blue name = "blue shielded vest" + icon_state = "/obj/item/clothing/suit/armor/vest/ctf/blue" inhand_icon_state = null team_shield_icon = "shield-old" greyscale_colors = COLOR_DARK_CYAN @@ -507,6 +513,7 @@ // Light /obj/item/clothing/suit/armor/vest/ctf/light/blue name = "light blue shielded vest" + icon_state = "/obj/item/clothing/suit/armor/vest/ctf/light/blue" inhand_icon_state = null team_shield_icon = "shield-old" greyscale_colors = COLOR_DARK_CYAN @@ -516,6 +523,7 @@ // Regular /obj/item/clothing/suit/armor/vest/ctf/green name = "green shielded vest" + icon_state = "/obj/item/clothing/suit/armor/vest/ctf/green" inhand_icon_state = null team_shield_icon = "shield-green" greyscale_colors = COLOR_LIME @@ -523,6 +531,7 @@ // Light /obj/item/clothing/suit/armor/vest/ctf/light/green name = "light green shielded vest" + icon_state = "/obj/item/clothing/suit/armor/vest/ctf/light/green" inhand_icon_state = null team_shield_icon = "shield-green" greyscale_colors = COLOR_LIME @@ -532,6 +541,7 @@ // Regular /obj/item/clothing/suit/armor/vest/ctf/yellow name = "yellow shielded vest" + icon_state = "/obj/item/clothing/suit/armor/vest/ctf/yellow" inhand_icon_state = null team_shield_icon = "shield-yellow" greyscale_colors = COLOR_VIVID_YELLOW @@ -539,6 +549,7 @@ // Light /obj/item/clothing/suit/armor/vest/ctf/light/yellow name = "light yellow shielded vest" + icon_state = "/obj/item/clothing/suit/armor/vest/ctf/light/yellow" inhand_icon_state = null team_shield_icon = "shield-yellow" greyscale_colors = COLOR_VIVID_YELLOW diff --git a/code/modules/capture_the_flag/medieval_sim/medisim_game.dm b/code/modules/capture_the_flag/medieval_sim/medisim_game.dm index 118184698a3..66ed55f71e2 100644 --- a/code/modules/capture_the_flag/medieval_sim/medisim_game.dm +++ b/code/modules/capture_the_flag/medieval_sim/medisim_game.dm @@ -62,8 +62,9 @@ /obj/item/ctf_flag/blue/medisim name = "\improper Bluesworth Hold Fair Maiden" desc = "Protect your maiden, and capture theirs!" - icon = 'icons/obj/toys/plushes.dmi' - icon_state = "map_plushie_slime" + icon = 'icons/map_icons/items/_item.dmi' + icon_state = "/obj/item/ctf_flag/blue/medisim" + post_init_icon_state = "map_plushie_slime" greyscale_config = /datum/greyscale_config/plush_slime greyscale_colors = "#3399ff#000000" force = 0 diff --git a/code/modules/cargo/packs/costumes_toys.dm b/code/modules/cargo/packs/costumes_toys.dm index eeba66d0938..325af2c9522 100644 --- a/code/modules/cargo/packs/costumes_toys.dm +++ b/code/modules/cargo/packs/costumes_toys.dm @@ -159,7 +159,7 @@ /obj/item/clothing/shoes/sneakers/black, /obj/item/clothing/gloves/color/white, /obj/item/clothing/mask/gas/mime, - /obj/item/clothing/head/frenchberet, + /obj/item/clothing/head/beret/frenchberet, /obj/item/clothing/suit/toggle/suspenders, /obj/item/reagent_containers/cup/glass/bottle/bottleofnothing, /obj/item/storage/backpack/mime, diff --git a/code/modules/clothing/chameleon/_chameleon_action.dm b/code/modules/clothing/chameleon/_chameleon_action.dm index 448ebcc906e..d0fdf826991 100644 --- a/code/modules/clothing/chameleon/_chameleon_action.dm +++ b/code/modules/clothing/chameleon/_chameleon_action.dm @@ -93,9 +93,9 @@ chameleon_typecache |= typecacheof(type_to_add) for(var/obj/item/item_type as anything in chameleon_typecache) - if(chameleon_blacklist[item_type] || (initial(item_type.item_flags) & ABSTRACT) || !initial(item_type.icon_state)) + if(chameleon_blacklist[item_type] || (item_type::item_flags & ABSTRACT) || !item_type::icon_state) continue - var/chameleon_item_name = "[initial(item_type.name)] ([initial(item_type.icon_state)])" + var/chameleon_item_name = "[item_type::name] ([item_type::post_init_icon_state || item_type::icon_state])" chameleon_list[chameleon_item_name] = item_type @@ -125,53 +125,53 @@ PROTECTED_PROC(TRUE) // Call update_look, not this! var/atom/atom_target = target - atom_target.name = initial(picked_item.name) - atom_target.desc = initial(picked_item.desc) - atom_target.icon_state = initial(picked_item.icon_state) + atom_target.name = picked_item::name + atom_target.desc = picked_item::desc + atom_target.icon_state = picked_item::post_init_icon_state || picked_item::icon_state if(isitem(atom_target)) var/obj/item/item_target = target - item_target.worn_icon = initial(picked_item.worn_icon) - item_target.lefthand_file = initial(picked_item.lefthand_file) - item_target.righthand_file = initial(picked_item.righthand_file) + item_target.worn_icon = picked_item::worn_icon + item_target.lefthand_file = picked_item::lefthand_file + item_target.righthand_file = picked_item::righthand_file - item_target.worn_icon_state = initial(picked_item.worn_icon_state) - item_target.inhand_icon_state = initial(picked_item.inhand_icon_state) + item_target.worn_icon_state = picked_item::worn_icon_state + item_target.inhand_icon_state = picked_item::inhand_icon_state - if(initial(picked_item.greyscale_colors)) - if(initial(picked_item.greyscale_config_worn)) + if(picked_item::greyscale_colors) + if(picked_item.greyscale_config_worn) item_target.worn_icon = SSgreyscale.GetColoredIconByType( - initial(picked_item.greyscale_config_worn), - initial(picked_item.greyscale_colors), + picked_item::greyscale_config_worn, + picked_item::greyscale_colors, ) - if(initial(picked_item.greyscale_config_inhand_left)) + if(picked_item::greyscale_config_inhand_left) item_target.lefthand_file = SSgreyscale.GetColoredIconByType( - initial(picked_item.greyscale_config_inhand_left), - initial(picked_item.greyscale_colors), + picked_item::greyscale_config_inhand_left, + picked_item::greyscale_colors, ) - if(initial(picked_item.greyscale_config_inhand_right)) + if(picked_item::greyscale_config_inhand_right) item_target.righthand_file = SSgreyscale.GetColoredIconByType( - initial(picked_item.greyscale_config_inhand_right), - initial(picked_item.greyscale_colors), + picked_item::greyscale_config_inhand_right, + picked_item::greyscale_colors, ) - item_target.flags_inv = initial(picked_item.flags_inv) - item_target.hair_mask = initial(picked_item.hair_mask) - item_target.transparent_protection = initial(picked_item.transparent_protection) + item_target.flags_inv = picked_item::flags_inv + item_target.hair_mask = picked_item::hair_mask + item_target.transparent_protection = picked_item::transparent_protection if(isclothing(item_target) && ispath(picked_item, /obj/item/clothing)) var/obj/item/clothing/clothing_target = item_target var/obj/item/clothing/picked_clothing = picked_item - clothing_target.flags_cover = initial(picked_clothing.flags_cover) + clothing_target.flags_cover = picked_clothing::flags_cover - if(initial(picked_item.greyscale_config) && initial(picked_item.greyscale_colors)) + if((picked_item::greyscale_config) && picked_item::greyscale_colors) atom_target.icon = SSgreyscale.GetColoredIconByType( - initial(picked_item.greyscale_config), - initial(picked_item.greyscale_colors), + picked_item::greyscale_config, + picked_item::greyscale_colors, ) else - atom_target.icon = initial(picked_item.icon) + atom_target.icon = picked_item::icon /datum/action/item_action/chameleon/change/do_effect(trigger_flags) select_look(owner) diff --git a/code/modules/clothing/chameleon/generic_chameleon_clothing.dm b/code/modules/clothing/chameleon/generic_chameleon_clothing.dm index b2aea379212..e42347474c7 100644 --- a/code/modules/clothing/chameleon/generic_chameleon_clothing.dm +++ b/code/modules/clothing/chameleon/generic_chameleon_clothing.dm @@ -18,12 +18,15 @@ do { \ /obj/item/clothing/under/chameleon name = "black jumpsuit" desc = "It's a plain jumpsuit. It has a small dial on the wrist." - icon_state = "jumpsuit" - greyscale_colors = "#3f3f3f" + icon = 'icons/map_icons/clothing/under/color.dmi' + icon_state = "/obj/item/clothing/under/color" + post_init_icon_state = "jumpsuit" + flags_1 = parent_type::flags_1 | NO_NEW_GAGS_PREVIEW_1 greyscale_config = /datum/greyscale_config/jumpsuit greyscale_config_worn = /datum/greyscale_config/jumpsuit/worn greyscale_config_inhand_left = /datum/greyscale_config/jumpsuit/inhand_left greyscale_config_inhand_right = /datum/greyscale_config/jumpsuit/inhand_right + greyscale_colors = "#3f3f3f" sensor_mode = SENSOR_OFF //Hey who's this guy on the Syndicate Shuttle?? random_sensor = FALSE resistance_flags = NONE @@ -225,14 +228,16 @@ do { \ /obj/item/clothing/shoes/chameleon name = "black shoes" desc = "A pair of black shoes." - icon_state = "sneakers" + icon = 'icons/map_icons/clothing/shoes.dmi' + icon_state = "/obj/item/clothing/shoes/chameleon" + post_init_icon_state = "sneakers" inhand_icon_state = "sneakers_back" body_parts_covered = FEET|LEGS - greyscale_colors = "#545454#ffffff" greyscale_config = /datum/greyscale_config/sneakers greyscale_config_worn = /datum/greyscale_config/sneakers/worn greyscale_config_inhand_left = /datum/greyscale_config/sneakers/inhand_left greyscale_config_inhand_right = /datum/greyscale_config/sneakers/inhand_right + greyscale_colors = "#545454#ffffff" resistance_flags = NONE armor_type = /datum/armor/shoes_chameleon actions_types = list(/datum/action/item_action/chameleon/change/shoes) @@ -243,12 +248,14 @@ do { \ create_storage(storage_type = /datum/storage/pockets/shoes) /obj/item/clothing/shoes/chameleon/broken + flags_1 = parent_type::flags_1 | NO_NEW_GAGS_PREVIEW_1 /obj/item/clothing/shoes/chameleon/broken/Initialize(mapload) . = ..() BREAK_CHAMELEON_ACTION(src) /obj/item/clothing/shoes/chameleon/noslip + flags_1 = parent_type::flags_1 | NO_NEW_GAGS_PREVIEW_1 clothing_traits = list(TRAIT_NO_SLIP_WATER) can_be_bloody = FALSE @@ -269,6 +276,7 @@ do { \ ADD_TRAIT(src, TRAIT_CONTRABAND_BLOCKER, INNATE_TRAIT) /obj/item/storage/backpack/chameleon/broken + flags_1 = parent_type::flags_1 | NO_NEW_GAGS_PREVIEW_1 /obj/item/storage/backpack/chameleon/broken/Initialize(mapload) . = ..() @@ -308,8 +316,10 @@ do { \ name = "tablet" actions_types = list(/datum/action/item_action/chameleon/change/tablet) action_slots = ALL + flags_1 = parent_type::flags_1 | NO_NEW_GAGS_PREVIEW_1 /obj/item/modular_computer/pda/chameleon/broken + flags_1 = parent_type::flags_1 | NO_NEW_GAGS_PREVIEW_1 /obj/item/modular_computer/pda/chameleon/broken/Initialize(mapload) . = ..() diff --git a/code/modules/clothing/head/beanie.dm b/code/modules/clothing/head/beanie.dm index ccb59996416..32167a86081 100644 --- a/code/modules/clothing/head/beanie.dm +++ b/code/modules/clothing/head/beanie.dm @@ -6,46 +6,50 @@ /obj/item/clothing/head/beanie name = "beanie" desc = "A stylish beanie. The perfect winter accessory for those with a keen fashion sense, and those who just can't handle a cold breeze on their heads." - icon = 'icons/obj/clothing/head/beanie.dmi' + icon = 'icons/map_icons/clothing/head/_head.dmi' worn_icon = 'icons/mob/clothing/head/beanie.dmi' - icon_state = "beanie" - icon_preview = 'icons/obj/fluff/previews.dmi' - icon_state_preview = "beanie_cloth" + icon_state = "/obj/item/clothing/head/beanie" + post_init_icon_state = "beanie" custom_price = PAYCHECK_CREW * 1.2 - greyscale_colors = "#EEEEEE#EEEEEE" greyscale_config = /datum/greyscale_config/beanie greyscale_config_worn = /datum/greyscale_config/beanie/worn + greyscale_colors = "#EEEEEE#EEEEEE" flags_1 = IS_PLAYER_COLORABLE_1 /obj/item/clothing/head/beanie/black name = "black beanie" + icon_state = "/obj/item/clothing/head/beanie/black" greyscale_colors = "#4A4A4B#4A4A4B" /obj/item/clothing/head/beanie/red name = "red beanie" + icon_state = "/obj/item/clothing/head/beanie/red" greyscale_colors = "#D91414#D91414" /obj/item/clothing/head/beanie/darkblue name = "dark blue beanie" + icon_state = "/obj/item/clothing/head/beanie/darkblue" greyscale_colors = "#1E85BC#1E85BC" /obj/item/clothing/head/beanie/yellow name = "yellow beanie" + icon_state = "/obj/item/clothing/head/beanie/yellow" greyscale_colors = "#E0C14F#E0C14F" /obj/item/clothing/head/beanie/orange name = "orange beanie" + icon_state = "/obj/item/clothing/head/beanie/orange" greyscale_colors = "#C67A4B#C67A4B" /obj/item/clothing/head/beanie/christmas name = "christmas beanie" + icon_state = "/obj/item/clothing/head/beanie/christmas" greyscale_colors = "#038000#960000" /obj/item/clothing/head/beanie/durathread name = "durathread beanie" desc = "A beanie made from durathread, its resilient fibres provide some protection to the wearer." - icon_preview = 'icons/obj/fluff/previews.dmi' - icon_state_preview = "beanie_durathread" + icon_state = "/obj/item/clothing/head/beanie/durathread" greyscale_colors = "#8291A1#8291A1" armor_type = /datum/armor/beanie_durathread diff --git a/code/modules/clothing/head/collectable.dm b/code/modules/clothing/head/collectable.dm index cd4c211d723..ef9385f40ef 100644 --- a/code/modules/clothing/head/collectable.dm +++ b/code/modules/clothing/head/collectable.dm @@ -67,12 +67,15 @@ /obj/item/clothing/head/collectable/beret name = "collectable beret" desc = "A collectable red beret. It smells faintly of garlic." - icon_state = "beret" + icon = 'icons/map_icons/clothing/head/beret.dmi' + icon_state = "/obj/item/clothing/head/beret" + post_init_icon_state = "beret" greyscale_config = /datum/greyscale_config/beret greyscale_config_worn = /datum/greyscale_config/beret/worn greyscale_colors = "#972A2A" dog_fashion = /datum/dog_fashion/head/beret hair_mask = /datum/hair_mask/standard_hat_middle + flags_1 = NO_NEW_GAGS_PREVIEW_1 /obj/item/clothing/head/collectable/welding name = "collectable welding helmet" @@ -95,11 +98,14 @@ /obj/item/clothing/head/collectable/flatcap name = "collectable flat cap" desc = "A collectible farmer's flat cap!" - icon_state = "beret_flat" + icon = 'icons/map_icons/clothing/head/_head.dmi' + icon_state = "/obj/item/clothing/head/flatcap" + post_init_icon_state = "beret_flat" greyscale_config = /datum/greyscale_config/beret greyscale_config_worn = /datum/greyscale_config/beret/worn greyscale_colors = "#8F7654" inhand_icon_state = null + flags_1 = parent_type::flags_1 | NO_NEW_GAGS_PREVIEW_1 /obj/item/clothing/head/collectable/pirate name = "collectable pirate hat" diff --git a/code/modules/clothing/head/costume.dm b/code/modules/clothing/head/costume.dm index c7e1777fc9c..4c6f507f22a 100644 --- a/code/modules/clothing/head/costume.dm +++ b/code/modules/clothing/head/costume.dm @@ -134,18 +134,22 @@ /obj/item/clothing/head/costume/fancy name = "fancy hat" - icon_state = "fancy_hat" - greyscale_colors = "#E3C937#782A81" + icon = 'icons/map_icons/clothing/head/_head.dmi' + icon_state = "/obj/item/clothing/head/costume/fancy" + post_init_icon_state = "fancy_hat" greyscale_config = /datum/greyscale_config/fancy_hat greyscale_config_worn = /datum/greyscale_config/fancy_hat/worn + greyscale_colors = "#E3C937#782A81" flags_1 = IS_PLAYER_COLORABLE_1 /obj/item/clothing/head/costume/football_helmet name = "football helmet" - icon_state = "football_helmet" - greyscale_colors = "#D74722" + icon = 'icons/map_icons/clothing/head/_head.dmi' + icon_state = "/obj/item/clothing/head/costume/football_helmet" + post_init_icon_state = "football_helmet" greyscale_config = /datum/greyscale_config/football_helmet greyscale_config_worn = /datum/greyscale_config/football_helmet/worn + greyscale_colors = "#D74722" flags_1 = IS_PLAYER_COLORABLE_1 /obj/item/clothing/head/costume/tv_head diff --git a/code/modules/clothing/head/fedora.dm b/code/modules/clothing/head/fedora.dm index 7ff7fc0f7bc..468464a4678 100644 --- a/code/modules/clothing/head/fedora.dm +++ b/code/modules/clothing/head/fedora.dm @@ -47,9 +47,11 @@ inhand_icon_state = null /obj/item/clothing/head/fedora/greyscale - icon_state = "fedora_greyscale" inhand_icon_state = null - greyscale_colors = "#F0DAB4#794D2E" + icon = 'icons/map_icons/clothing/head/_head.dmi' + icon_state = "/obj/item/clothing/head/fedora/greyscale" + post_init_icon_state = "fedora_greyscale" greyscale_config = /datum/greyscale_config/fedora greyscale_config_worn = /datum/greyscale_config/fedora/worn + greyscale_colors = "#F0DAB4#794D2E" flags_1 = IS_PLAYER_COLORABLE_1 diff --git a/code/modules/clothing/head/frenchberet.dm b/code/modules/clothing/head/frenchberet.dm index 8343eee6e1d..90c2e830094 100644 --- a/code/modules/clothing/head/frenchberet.dm +++ b/code/modules/clothing/head/frenchberet.dm @@ -1,23 +1,19 @@ -/obj/item/clothing/head/frenchberet +/obj/item/clothing/head/beret/frenchberet name = "french beret" desc = "A quality beret, infused with the aroma of chain-smoking, wine-swilling Parisians. You feel less inclined to engage in military conflict, for some reason." - icon_state = "beret" - greyscale_config = /datum/greyscale_config/beret - greyscale_config_worn = /datum/greyscale_config/beret/worn - greyscale_colors = "#972A2A" - hair_mask = /datum/hair_mask/standard_hat_middle + flags_1 = NO_NEW_GAGS_PREVIEW_1 -/obj/item/clothing/head/frenchberet/Initialize(mapload) +/obj/item/clothing/head/beret/frenchberet/Initialize(mapload) . = ..() AddComponent(/datum/component/speechmod, replacements = strings("french_replacement.json", "french"), end_string = list(" Honh honh honh!"," Honh!"," Zut Alors!"), end_string_chance = 3, slots = ITEM_SLOT_HEAD) -/obj/item/clothing/head/frenchberet/equipped(mob/M, slot) +/obj/item/clothing/head/beret/frenchberet/equipped(mob/user, slot, initial) . = ..() if (slot & ITEM_SLOT_HEAD) - ADD_TRAIT(M, TRAIT_GARLIC_BREATH, type) + ADD_TRAIT(user, TRAIT_GARLIC_BREATH, type) else - REMOVE_TRAIT(M, TRAIT_GARLIC_BREATH, type) + REMOVE_TRAIT(user, TRAIT_GARLIC_BREATH, type) -/obj/item/clothing/head/frenchberet/dropped(mob/M) +/obj/item/clothing/head/beret/frenchberet/dropped(mob/user, silent) . = ..() - REMOVE_TRAIT(M, TRAIT_GARLIC_BREATH, type) + REMOVE_TRAIT(user, TRAIT_GARLIC_BREATH, type) diff --git a/code/modules/clothing/head/hat.dm b/code/modules/clothing/head/hat.dm index c66fd47e555..6a6153897f3 100644 --- a/code/modules/clothing/head/hat.dm +++ b/code/modules/clothing/head/hat.dm @@ -98,9 +98,9 @@ /obj/item/clothing/head/flatcap name = "flat cap" desc = "A working man's cap." - icon_state = "beret_flat" - icon_preview = 'icons/obj/clothing/head/beret.dmi' - icon_state_preview = "beret_flat" + icon = 'icons/map_icons/clothing/head/_head.dmi' + icon_state = "/obj/item/clothing/head/flatcap" + post_init_icon_state = "beret_flat" greyscale_config = /datum/greyscale_config/beret greyscale_config_worn = /datum/greyscale_config/beret/worn greyscale_colors = "#8F7654" @@ -200,19 +200,23 @@ /obj/item/clothing/head/costume/santa/gags name = "santa hat" desc = "On the first day of christmas my employer gave to me!" - icon_state = "santa_hat" - greyscale_colors = "#cc0000#f8f8f8" + icon = 'icons/map_icons/clothing/head/_head.dmi' + icon_state = "/obj/item/clothing/head/costume/santa/gags" + post_init_icon_state = "santa_hat" greyscale_config = /datum/greyscale_config/santa_hat greyscale_config_worn = /datum/greyscale_config/santa_hat/worn + greyscale_colors = "#cc0000#f8f8f8" flags_1 = IS_PLAYER_COLORABLE_1 /obj/item/clothing/head/costume/jester name = "jester hat" desc = "A hat with bells, to add some merriness to the suit." - icon_state = "jester_map" - greyscale_colors = "#00ff00#ff0000" + icon = 'icons/map_icons/clothing/head/_head.dmi' + icon_state = "/obj/item/clothing/head/costume/jester" + post_init_icon_state = "jester_map" greyscale_config = /datum/greyscale_config/jester_hat greyscale_config_worn = /datum/greyscale_config/jester_hat/worn + greyscale_colors = "#00ff00#ff0000" flags_1 = IS_PLAYER_COLORABLE_1 /obj/item/clothing/head/costume/jesteralt diff --git a/code/modules/clothing/head/jobs.dm b/code/modules/clothing/head/jobs.dm index 0a769fa0ca2..a772f4c474b 100644 --- a/code/modules/clothing/head/jobs.dm +++ b/code/modules/clothing/head/jobs.dm @@ -124,7 +124,9 @@ /obj/item/clothing/head/caphat/beret name = "captain's beret" desc = "For the Captains known for their sense of fashion." - icon_state = "beret_badge" + icon = 'icons/map_icons/clothing/head/_head.dmi' + icon_state = "/obj/item/clothing/head/caphat/beret" + post_init_icon_state = "beret_badge" greyscale_config = /datum/greyscale_config/beret_badge greyscale_config_worn = /datum/greyscale_config/beret_badge/worn greyscale_colors = "#0070B7#FFCE5B" @@ -383,10 +385,10 @@ /obj/item/clothing/head/beret name = "beret" desc = "A beret, a mime's favorite headwear." - icon_state = "beret" - icon_preview = 'icons/obj/clothing/head/beret.dmi' - icon_state_preview = "beret" dog_fashion = /datum/dog_fashion/head/beret + icon = 'icons/map_icons/clothing/head/beret.dmi' + icon_state = "/obj/item/clothing/head/beret" + post_init_icon_state = "beret" greyscale_config = /datum/greyscale_config/beret greyscale_config_worn = /datum/greyscale_config/beret/worn greyscale_colors = "#972A2A" @@ -443,7 +445,9 @@ /obj/item/clothing/head/hats/hos/beret name = "head of security's beret" desc = "A robust beret for the Head of Security, for looking stylish while not sacrificing protection." - icon_state = "beret_badge" + icon = 'icons/map_icons/clothing/head/_head.dmi' + icon_state = "/obj/item/clothing/head/hats/hos/beret" + post_init_icon_state = "beret_badge" greyscale_config = /datum/greyscale_config/beret_badge greyscale_config_worn = /datum/greyscale_config/beret_badge/worn greyscale_colors = "#39393f#f0cc8f" @@ -452,6 +456,7 @@ /obj/item/clothing/head/hats/hos/beret/navyhos name = "head of security's formal beret" desc = "A special beret with the Head of Security's insignia emblazoned on it. A symbol of excellence, a badge of courage, a mark of distinction." + icon_state = "/obj/item/clothing/head/hats/hos/beret/navyhos" greyscale_colors = "#638799#f0cc8f" /obj/item/clothing/head/hats/hos/beret/syndicate @@ -558,7 +563,8 @@ /obj/item/clothing/head/beret/sec name = "security beret" desc = "A robust beret with the security insignia emblazoned on it. Uses reinforced fabric to offer sufficient protection." - icon_state = "beret_badge" + icon_state = "/obj/item/clothing/head/beret/sec" + post_init_icon_state = "beret_badge" greyscale_config = /datum/greyscale_config/beret_badge greyscale_config_worn = /datum/greyscale_config/beret_badge/worn greyscale_colors = "#a52f29#F2F2F2" @@ -580,23 +586,27 @@ /obj/item/clothing/head/beret/sec/navywarden name = "warden's beret" desc = "A special beret with the Warden's insignia emblazoned on it. For wardens with class." + icon_state = "/obj/item/clothing/head/beret/sec/navywarden" greyscale_colors = "#638799#ebebeb" strip_delay = 60 /obj/item/clothing/head/beret/sec/navyofficer desc = "A special beret with the security insignia emblazoned on it. For officers with class." + icon_state = "/obj/item/clothing/head/beret/sec/navyofficer" greyscale_colors = "#638799#a52f29" //Science /obj/item/clothing/head/beret/science name = "science beret" desc = "A science-themed beret for our hardworking scientists." + icon_state = "/obj/item/clothing/head/beret/science" greyscale_colors = "#8D008F" flags_1 = NONE /obj/item/clothing/head/beret/science/rd desc = "A purple badge with the insignia of the Research Director attached. For the paper-shuffler in you!" - icon_state = "beret_badge" + icon_state = "/obj/item/clothing/head/beret/science/rd" + post_init_icon_state = "beret_badge" greyscale_config = /datum/greyscale_config/beret_badge greyscale_config_worn = /datum/greyscale_config/beret_badge/worn greyscale_colors = "#7e1980#c9cbcb" @@ -605,17 +615,20 @@ /obj/item/clothing/head/beret/medical name = "medical beret" desc = "A medical-flavored beret for the doctor in you!" + icon_state = "/obj/item/clothing/head/beret/medical" greyscale_colors = COLOR_WHITE flags_1 = NONE /obj/item/clothing/head/beret/medical/paramedic name = "paramedic beret" desc = "For finding corpses in style!" + icon_state = "/obj/item/clothing/head/beret/medical/paramedic" greyscale_colors = "#16313D" /obj/item/clothing/head/beret/medical/cmo name = "chief medical officer beret" desc = "A beret in a distinct surgical turquoise!" + icon_state = "/obj/item/clothing/head/beret/medical/cmo" greyscale_colors = "#5EB8B8" /obj/item/clothing/head/utility/surgerycap @@ -749,6 +762,7 @@ /obj/item/clothing/head/beret/engi name = "engineering beret" desc = "Might not protect you from radiation, but definitely will protect you from looking unfashionable!" + icon_state = "/obj/item/clothing/head/beret/engi" greyscale_colors = "#FFBC30" flags_1 = NONE @@ -756,6 +770,7 @@ /obj/item/clothing/head/beret/cargo name = "cargo beret" desc = "No need to compensate when you can wear this beret!" + icon_state = "/obj/item/clothing/head/beret/cargo" greyscale_colors = "#b7723d" flags_1 = NONE @@ -768,9 +783,8 @@ /obj/item/clothing/head/beret/durathread name = "durathread beret" desc = "A beret made from durathread, its resilient fibers provide some protection to the wearer." - icon_state = "beret_badge" - icon_preview = 'icons/obj/fluff/previews.dmi' - icon_state_preview = "beret_durathread" + icon_state = "/obj/item/clothing/head/beret/durathread" + post_init_icon_state = "beret_badge" greyscale_config = /datum/greyscale_config/beret_badge greyscale_config_worn = /datum/greyscale_config/beret_badge/worn greyscale_colors = "#C5D4F3#ECF1F8" @@ -798,7 +812,8 @@ /obj/item/clothing/head/beret/centcom_formal name = "\improper CentCom Formal Beret" desc = "Sometimes, a compromise between fashion and defense needs to be made. Thanks to Nanotrasen's most recent nano-fabric durability enhancements, this time, it's not the case." - icon_state = "beret_badge" + icon_state = "/obj/item/clothing/head/beret/centcom_formal" + post_init_icon_state = "beret_badge" greyscale_config = /datum/greyscale_config/beret_badge greyscale_config_worn = /datum/greyscale_config/beret_badge/worn greyscale_colors = "#46b946#f2c42e" @@ -826,7 +841,8 @@ /obj/item/clothing/head/beret/militia name = "\improper Militia General's Beret" desc = "A rallying cry for the inhabitants of the Spinward Sector, the heroes that wear this keep the horrors of the galaxy at bay. Call them, and they'll be there in a minute!" - icon_state = "beret_badge" + icon_state = "/obj/item/clothing/head/beret/militia" + post_init_icon_state = "beret_badge" greyscale_config = /datum/greyscale_config/beret_badge greyscale_config_worn = /datum/greyscale_config/beret_badge/worn greyscale_colors = "#43523d#a2abb0" diff --git a/code/modules/clothing/head/sombrero.dm b/code/modules/clothing/head/sombrero.dm index b207d2ae757..7536043b402 100644 --- a/code/modules/clothing/head/sombrero.dm +++ b/code/modules/clothing/head/sombrero.dm @@ -1,31 +1,39 @@ /obj/item/clothing/head/costume/sombrero name = "sombrero" + desc = "You can practically taste the fiesta." icon = 'icons/obj/clothing/head/sombrero.dmi' icon_state = "sombrero" inhand_icon_state = "sombrero" - desc = "You can practically taste the fiesta." flags_inv = HIDEHAIR dog_fashion = /datum/dog_fashion/head/sombrero +/obj/item/clothing/head/costume/sombrero/green + name = "green sombrero" + desc = "As elegant as a dancing cactus." + icon = 'icons/map_icons/clothing/head/_head.dmi' + icon_state = "/obj/item/clothing/head/costume/sombrero/green" + post_init_icon_state = "sombrero" + flags_inv = HIDEHAIR|HIDEFACE|HIDEEARS + dog_fashion = null greyscale_config = /datum/greyscale_config/sombrero greyscale_config_worn = /datum/greyscale_config/sombrero/worn greyscale_config_inhand_left = /datum/greyscale_config/sombrero/lefthand greyscale_config_inhand_right = /datum/greyscale_config/sombrero/righthand - -/obj/item/clothing/head/costume/sombrero/green - name = "green sombrero" - desc = "As elegant as a dancing cactus." - flags_inv = HIDEHAIR|HIDEFACE|HIDEEARS - dog_fashion = null greyscale_colors = "#13d968#ffffff" flags_1 = IS_PLAYER_COLORABLE_1 /obj/item/clothing/head/costume/sombrero/shamebrero name = "shamebrero" - icon_state = "shamebrero" desc = "Once it's on, it never comes off." + icon = 'icons/map_icons/clothing/head/_head.dmi' + icon_state = "/obj/item/clothing/head/costume/sombrero/shamebrero" + post_init_icon_state = "shamebrero" dog_fashion = null + greyscale_config = /datum/greyscale_config/sombrero + greyscale_config_worn = /datum/greyscale_config/sombrero/worn + greyscale_config_inhand_left = /datum/greyscale_config/sombrero/lefthand + greyscale_config_inhand_right = /datum/greyscale_config/sombrero/righthand greyscale_colors = "#d565d3#f8db18" flags_1 = IS_PLAYER_COLORABLE_1 diff --git a/code/modules/clothing/masks/_masks.dm b/code/modules/clothing/masks/_masks.dm index 9443730df49..5d5e2b87070 100644 --- a/code/modules/clothing/masks/_masks.dm +++ b/code/modules/clothing/masks/_masks.dm @@ -59,7 +59,7 @@ /obj/item/clothing/mask/update_icon_state() . = ..() - icon_state = "[base_icon_state || initial(icon_state)][up ? "_up" : ""]" + icon_state = "[base_icon_state || initial(post_init_icon_state) || initial(icon_state)][up ? "_up" : ""]" /** * Proc called in lungs.dm to act if wearing a mask with filters, used to reduce the filters durability, return a changed gas mixture depending on the filter status diff --git a/code/modules/clothing/masks/bandana.dm b/code/modules/clothing/masks/bandana.dm index c43c49a3995..304baa4a878 100644 --- a/code/modules/clothing/masks/bandana.dm +++ b/code/modules/clothing/masks/bandana.dm @@ -1,4 +1,10 @@ /obj/item/clothing/mask/bandana + name = "bandana" + desc = "A fine bandana with nanotech lining." + icon = 'icons/map_icons/clothing/mask.dmi' + icon_state = "/obj/item/clothing/mask/bandana" + post_init_icon_state = "bandana" + inhand_icon_state = "greyscale_bandana" w_class = WEIGHT_CLASS_TINY flags_cover = MASKCOVERSMOUTH flags_inv = HIDEFACE|HIDEFACIALHAIR|HIDESNOUT @@ -9,11 +15,7 @@ species_exception = list(/datum/species/golem) dying_key = DYE_REGISTRY_BANDANA flags_1 = IS_PLAYER_COLORABLE_1 - name = "bandana" - desc = "A fine bandana with nanotech lining." - icon_state = "bandana" - icon_state_preview = "bandana_cloth" - inhand_icon_state = "greyscale_bandana" + greyscale_config = /datum/greyscale_config/bandana greyscale_config_worn = /datum/greyscale_config/bandana/worn greyscale_config_inhand_left = /datum/greyscale_config/bandana/inhands_left @@ -81,36 +83,42 @@ /obj/item/clothing/mask/bandana/red name = "red bandana" desc = "A fine red bandana with nanotech lining." + icon_state = "/obj/item/clothing/mask/bandana/red" greyscale_colors = "#A02525" flags_1 = NONE /obj/item/clothing/mask/bandana/blue name = "blue bandana" desc = "A fine blue bandana with nanotech lining." + icon_state = "/obj/item/clothing/mask/bandana/blue" greyscale_colors = "#294A98" flags_1 = NONE /obj/item/clothing/mask/bandana/purple name = "purple bandana" desc = "A fine purple bandana with nanotech lining." + icon_state = "/obj/item/clothing/mask/bandana/purple" greyscale_colors = "#9900CC" flags_1 = NONE /obj/item/clothing/mask/bandana/green name = "green bandana" desc = "A fine green bandana with nanotech lining." + icon_state = "/obj/item/clothing/mask/bandana/green" greyscale_colors = "#3D9829" flags_1 = NONE /obj/item/clothing/mask/bandana/gold name = "gold bandana" desc = "A fine gold bandana with nanotech lining." + icon_state = "/obj/item/clothing/mask/bandana/gold" greyscale_colors = "#DAC20E" flags_1 = NONE /obj/item/clothing/mask/bandana/orange name = "orange bandana" desc = "A fine orange bandana with nanotech lining." + icon_state = "/obj/item/clothing/mask/bandana/orange" greyscale_colors = "#da930e" flags_1 = NONE @@ -118,27 +126,29 @@ name = "black bandana" desc = "A fine black bandana with nanotech lining." greyscale_colors = "#2e2e2e" + flags_1 = parent_type::flags_1 | NO_NEW_GAGS_PREVIEW_1 // Same color as the basetype flags_1 = NONE /obj/item/clothing/mask/bandana/white name = "white bandana" desc = "A fine white bandana with nanotech lining." + icon_state = "/obj/item/clothing/mask/bandana/white" greyscale_colors = "#DCDCDC" flags_1 = NONE - icon_state_preview = "bandana_cloth" /obj/item/clothing/mask/bandana/durathread name = "durathread bandana" desc = "A bandana made from durathread, you wish it would provide some protection to its wearer, but it's far too thin..." + icon_state = "/obj/item/clothing/mask/bandana/durathread" greyscale_colors = "#5c6d80" flags_1 = NONE - icon_preview = 'icons/obj/fluff/previews.dmi' - icon_state_preview = "bandana_durathread" /obj/item/clothing/mask/bandana/striped name = "striped bandana" desc = "A fine bandana with nanotech lining and a stripe across." - icon_state = "bandstriped" + icon = 'icons/map_icons/clothing/mask.dmi' + icon_state = "/obj/item/clothing/mask/bandana/striped" + post_init_icon_state = "bandstriped" greyscale_config = /datum/greyscale_config/bandana/striped greyscale_config_worn = /datum/greyscale_config/bandana/striped/worn greyscale_config_inhand_left = /datum/greyscale_config/bandana/striped/inhands_left @@ -149,49 +159,57 @@ /obj/item/clothing/mask/bandana/striped/black name = "striped bandana" desc = "A fine black and white bandana with nanotech lining and a stripe across." - greyscale_colors = "#2e2e2e#C6C6C6" + flags_1 = parent_type::flags_1 | NO_NEW_GAGS_PREVIEW_1 // same exact icon/color as the base type flags_1 = NONE /obj/item/clothing/mask/bandana/striped/security name = "striped security bandana" desc = "A fine bandana with nanotech lining, a stripe across and security colors." + icon_state = "/obj/item/clothing/mask/bandana/striped/security" greyscale_colors = "#A02525#2e2e2e" flags_1 = NONE /obj/item/clothing/mask/bandana/striped/science name = "striped science bandana" desc = "A fine bandana with nanotech lining, a stripe across and science colors." + icon_state = "/obj/item/clothing/mask/bandana/striped/science" greyscale_colors = "#DCDCDC#8019a0" flags_1 = NONE /obj/item/clothing/mask/bandana/striped/engineering name = "striped engineering bandana" desc = "A fine bandana with nanotech lining, a stripe across and engineering colors." + icon_state = "/obj/item/clothing/mask/bandana/striped/engineering" greyscale_colors = "#dab50e#ec7404" flags_1 = NONE /obj/item/clothing/mask/bandana/striped/medical name = "striped medical bandana" desc = "A fine bandana with nanotech lining, a stripe across and medical colors." + icon_state = "/obj/item/clothing/mask/bandana/striped/medical" greyscale_colors = "#DCDCDC#5995BA" flags_1 = NONE /obj/item/clothing/mask/bandana/striped/cargo name = "striped cargo bandana" desc = "A fine bandana with nanotech lining, a stripe across and cargo colors." + icon_state = "/obj/item/clothing/mask/bandana/striped/cargo" greyscale_colors = "#967032#5F350B" flags_1 = NONE /obj/item/clothing/mask/bandana/striped/botany name = "striped botany bandana" desc = "A fine bandana with nanotech lining, a stripe across and botany colors." + icon_state = "/obj/item/clothing/mask/bandana/striped/botany" greyscale_colors = "#3D9829#294A98" flags_1 = NONE /obj/item/clothing/mask/bandana/skull name = "skull bandana" desc = "A fine bandana with nanotech lining and a skull emblem." - icon_state = "bandskull" + icon = 'icons/map_icons/clothing/mask.dmi' + icon_state = "/obj/item/clothing/mask/bandana/skull" + post_init_icon_state = "bandskull" greyscale_config = /datum/greyscale_config/bandana/skull greyscale_config_worn = /datum/greyscale_config/bandana/skull/worn greyscale_config_inhand_left = /datum/greyscale_config/bandana/skull/inhands_left @@ -201,6 +219,7 @@ /obj/item/clothing/mask/bandana/skull/black desc = "A fine black bandana with nanotech lining and a skull emblem." + icon_state = "/obj/item/clothing/mask/bandana/skull/black" greyscale_colors = "#2e2e2e#C6C6C6" flags_1 = NONE @@ -208,7 +227,6 @@ name = "facescarf" desc = "Cover your face like in the cowboy movies. It also has breathtube so you can wear it everywhere!" actions_types = list(/datum/action/item_action/adjust) - icon_state = "facescarf" inhand_icon_state = "greyscale_facescarf" alternate_worn_layer = BACK_LAYER clothing_flags = BLOCK_GAS_SMOKE_EFFECT|MASKINTERNALS @@ -220,6 +238,9 @@ visor_flags_cover = MASKCOVERSMOUTH custom_price = PAYCHECK_CREW greyscale_colors = "#eeeeee" + icon = 'icons/map_icons/clothing/mask.dmi' + icon_state = "/obj/item/clothing/mask/facescarf" + post_init_icon_state = "facescarf" greyscale_config = /datum/greyscale_config/facescarf greyscale_config_worn = /datum/greyscale_config/facescarf/worn greyscale_config_inhand_left = /datum/greyscale_config/facescarf/inhands_left diff --git a/code/modules/clothing/masks/costume.dm b/code/modules/clothing/masks/costume.dm index a275fbdaf50..41e4e48dd6b 100644 --- a/code/modules/clothing/masks/costume.dm +++ b/code/modules/clothing/masks/costume.dm @@ -36,13 +36,15 @@ /obj/item/clothing/mask/kitsune name = "kitsune mask" desc = "Porcelain mask made in the style of the Sol-3 region. It is painted to look like a kitsune." - icon_state = "kitsune" inhand_icon_state = null w_class = WEIGHT_CLASS_SMALL adjusted_flags = ITEM_SLOT_HEAD flags_inv = HIDEFACE|HIDEFACIALHAIR custom_price = PAYCHECK_CREW greyscale_colors = "#EEEEEE#AA0000" + icon = 'icons/map_icons/clothing/mask.dmi' + icon_state = "/obj/item/clothing/mask/kitsune" + post_init_icon_state = "kitsune" greyscale_config = /datum/greyscale_config/kitsune greyscale_config_worn = /datum/greyscale_config/kitsune/worn flags_1 = IS_PLAYER_COLORABLE_1 @@ -62,12 +64,14 @@ /obj/item/clothing/mask/rebellion name = "rebellion mask" desc = "Mask that is usually used during rebellions by insurgents. It covers the entire face and makes you unrecognizable." - icon_state = "rebellion_mask" inhand_icon_state = null w_class = WEIGHT_CLASS_SMALL flags_inv = HIDEFACE|HIDEFACIALHAIR|HIDESNOUT custom_price = PAYCHECK_CREW greyscale_colors = COLOR_VERY_LIGHT_GRAY + icon = 'icons/map_icons/clothing/mask.dmi' + icon_state = "/obj/item/clothing/mask/rebellion" + post_init_icon_state = "rebellion_mask" greyscale_config = /datum/greyscale_config/rebellion_mask greyscale_config_worn = /datum/greyscale_config/rebellion_mask/worn flags_1 = IS_PLAYER_COLORABLE_1 diff --git a/code/modules/clothing/masks/muzzle.dm b/code/modules/clothing/masks/muzzle.dm index b9b2460167c..82bb1dd348f 100644 --- a/code/modules/clothing/masks/muzzle.dm +++ b/code/modules/clothing/masks/muzzle.dm @@ -41,13 +41,15 @@ /obj/item/clothing/mask/muzzle/tape name = "tape piece" desc = "A piece of tape that can be put over someone's mouth." - icon_state = "tape_piece" worn_icon_state = "tape_piece_worn" inhand_icon_state = null w_class = WEIGHT_CLASS_TINY clothing_flags = INEDIBLE_CLOTHING equip_delay_other = 40 strip_delay = 40 + icon = 'icons/map_icons/clothing/mask.dmi' + icon_state = "/obj/item/clothing/mask/muzzle/tape" + post_init_icon_state = "tape_piece" greyscale_config = /datum/greyscale_config/tape_piece greyscale_config_worn = /datum/greyscale_config/tape_piece/worn greyscale_colors = "#B2B2B2" @@ -92,12 +94,14 @@ /obj/item/clothing/mask/muzzle/tape/super name = "super tape piece" desc = "A piece of tape that can be put over someone's mouth. This one has extra strength." + icon_state = "/obj/item/clothing/mask/muzzle/tape/super" greyscale_colors = "#4D4D4D" strip_delay = 80 /obj/item/clothing/mask/muzzle/tape/surgical name = "surgical tape piece" desc = "A piece of tape that can be put over someone's mouth. As long as you apply this to your patient, you won't hear their screams of pain!" + icon_state = "/obj/item/clothing/mask/muzzle/tape/surgical" greyscale_colors = "#70BAE7" equip_delay_other = 30 strip_delay = 30 @@ -105,8 +109,10 @@ /obj/item/clothing/mask/muzzle/tape/pointy name = "pointy tape piece" desc = "A piece of tape that can be put over someone's mouth. Looks like it will hurt if this is ripped off." - icon_state = "tape_piece_spikes" worn_icon_state = "tape_piece_spikes_worn" + icon = 'icons/map_icons/clothing/mask.dmi' + icon_state = "/obj/item/clothing/mask/muzzle/tape/pointy" + post_init_icon_state = "tape_piece_spikes" greyscale_config = /datum/greyscale_config/tape_piece/spikes greyscale_config_worn = /datum/greyscale_config/tape_piece/worn/spikes greyscale_colors = "#E64539#AD2F45" @@ -116,6 +122,7 @@ /obj/item/clothing/mask/muzzle/tape/pointy/super name = "super pointy tape piece" desc = "A piece of tape that can be put over someone's mouth. This thing could rip your face into a thousand pieces if ripped off." + icon_state = "/obj/item/clothing/mask/muzzle/tape/pointy/super" greyscale_colors = "#8C0A00#300008" strip_delay = 60 stripping_damage = 20 diff --git a/code/modules/clothing/neck/_neck.dm b/code/modules/clothing/neck/_neck.dm index b77f94f53de..25b17bbf0c4 100644 --- a/code/modules/clothing/neck/_neck.dm +++ b/code/modules/clothing/neck/_neck.dm @@ -26,11 +26,12 @@ /obj/item/clothing/neck/bowtie name = "bow tie" desc = "A small neosilk bowtie." - icon = 'icons/obj/clothing/neck.dmi' - icon_state = "bowtie_greyscale" inhand_icon_state = "" //no inhands w_class = WEIGHT_CLASS_SMALL custom_price = PAYCHECK_CREW + icon = 'icons/map_icons/clothing/neck.dmi' + icon_state = "/obj/item/clothing/neck/bowtie" + post_init_icon_state = "bowtie_greyscale" greyscale_config = /datum/greyscale_config/ties greyscale_config_worn = /datum/greyscale_config/ties/worn greyscale_colors = "#151516ff" @@ -39,7 +40,9 @@ /obj/item/clothing/neck/bowtie/rainbow name = "rainbow bow tie" desc = "An extremely large neosilk rainbow-colored bowtie." + icon = 'icons/obj/clothing/neck.dmi' icon_state = "bowtie_rainbow" + post_init_icon_state = null greyscale_config = null greyscale_config_worn = null greyscale_colors = null @@ -47,12 +50,13 @@ /obj/item/clothing/neck/tie name = "slick tie" desc = "A neosilk tie." - icon = 'icons/obj/clothing/neck.dmi' - icon_state = "tie_greyscale_tied" inhand_icon_state = "" //no inhands alternate_worn_layer = LOW_NECK_LAYER // So that it renders below suit jackets, MODsuits, etc w_class = WEIGHT_CLASS_SMALL custom_price = PAYCHECK_CREW + icon = 'icons/map_icons/clothing/neck.dmi' + icon_state = "/obj/item/clothing/neck/tie" + post_init_icon_state = "tie_greyscale_tied" greyscale_config = /datum/greyscale_config/ties greyscale_config_worn = /datum/greyscale_config/ties/worn greyscale_colors = "#4d4e4e" @@ -154,37 +158,45 @@ /obj/item/clothing/neck/tie/blue name = "blue tie" - icon_state = "tie_greyscale_untied" + icon_state = "/obj/item/clothing/neck/tie/blue" + post_init_icon_state = "tie_greyscale_untied" greyscale_colors = "#5275b6ff" /obj/item/clothing/neck/tie/red name = "red tie" - icon_state = "tie_greyscale_untied" + icon_state = "/obj/item/clothing/neck/tie/red" + post_init_icon_state = "tie_greyscale_untied" greyscale_colors = "#c23838ff" /obj/item/clothing/neck/tie/red/tied is_tied = TRUE + flags_1 = parent_type::flags_1 | NO_NEW_GAGS_PREVIEW_1 /obj/item/clothing/neck/tie/red/hitman desc = "This is a $47,000 custom-tailored Référence Du Tueur À Gages tie. The clot is from neosilkworms raised at a tie microfarm in Cookwell, from a secret pattern passed down by monk tailors since the twenty-first century!" - icon_state = "tie_greyscale_untied" tie_timer = 1 SECONDS // You're a professional. + flags_1 = parent_type::flags_1 | NO_NEW_GAGS_PREVIEW_1 /obj/item/clothing/neck/tie/red/hitman/tied is_tied = TRUE + flags_1 = parent_type::flags_1 | NO_NEW_GAGS_PREVIEW_1 /obj/item/clothing/neck/tie/black name = "black tie" - icon_state = "tie_greyscale_untied" + icon_state = "/obj/item/clothing/neck/tie/black" + post_init_icon_state = "tie_greyscale_untied" greyscale_colors = "#151516ff" /obj/item/clothing/neck/tie/black/tied is_tied = TRUE + flags_1 = parent_type::flags_1 | NO_NEW_GAGS_PREVIEW_1 /obj/item/clothing/neck/tie/horrible name = "horrible tie" desc = "A neosilk tie. This one is disgusting." + icon = 'icons/obj/clothing/neck.dmi' icon_state = "horribletie" + post_init_icon_state = null clip_on = TRUE greyscale_config = null greyscale_config_worn = null @@ -192,7 +204,9 @@ /obj/item/clothing/neck/tie/disco name = "horrific necktie" + icon = 'icons/obj/clothing/neck.dmi' icon_state = "eldritch_tie" + post_init_icon_state = null desc = "The necktie is adorned with a garish pattern. It's disturbingly vivid. Somehow you feel as if it would be wrong to ever take it off. It's your friend now. You will betray it if you change it for some boring scarf." clip_on = TRUE greyscale_config = null @@ -202,7 +216,9 @@ /obj/item/clothing/neck/tie/detective name = "loose tie" desc = "A loosely tied necktie, a perfect accessory for the over-worked detective." + icon = 'icons/obj/clothing/neck.dmi' icon_state = "detective" + post_init_icon_state = null clip_on = TRUE greyscale_config = null greyscale_config_worn = null @@ -349,10 +365,10 @@ /obj/item/clothing/neck/scarf name = "scarf" - icon_state = "scarf" - icon_preview = 'icons/obj/fluff/previews.dmi' - icon_state_preview = "scarf_cloth" desc = "A stylish scarf. The perfect winter accessory for those with a keen fashion sense, and those who just can't handle a cold breeze on their necks." + icon = 'icons/map_icons/clothing/neck.dmi' + icon_state = "/obj/item/clothing/neck/scarf" + post_init_icon_state = "scarf" w_class = WEIGHT_CLASS_TINY custom_price = PAYCHECK_CREW greyscale_colors = "#EEEEEE#EEEEEE" @@ -362,81 +378,98 @@ /obj/item/clothing/neck/scarf/black name = "black scarf" + icon_state = "/obj/item/clothing/neck/scarf/black" greyscale_colors = "#4A4A4B#4A4A4B" /obj/item/clothing/neck/scarf/pink name = "pink scarf" + icon_state = "/obj/item/clothing/neck/scarf/pink" greyscale_colors = "#F699CD#F699CD" /obj/item/clothing/neck/scarf/red name = "red scarf" + icon_state = "/obj/item/clothing/neck/scarf/red" greyscale_colors = "#D91414#D91414" /obj/item/clothing/neck/scarf/green name = "green scarf" + icon_state = "/obj/item/clothing/neck/scarf/green" greyscale_colors = "#5C9E54#5C9E54" /obj/item/clothing/neck/scarf/darkblue name = "dark blue scarf" + icon_state = "/obj/item/clothing/neck/scarf/darkblue" greyscale_colors = "#1E85BC#1E85BC" /obj/item/clothing/neck/scarf/purple name = "purple scarf" + icon_state = "/obj/item/clothing/neck/scarf/purple" greyscale_colors = "#9557C5#9557C5" /obj/item/clothing/neck/scarf/yellow name = "yellow scarf" + icon_state = "/obj/item/clothing/neck/scarf/yellow" greyscale_colors = "#E0C14F#E0C14F" /obj/item/clothing/neck/scarf/orange name = "orange scarf" + icon_state = "/obj/item/clothing/neck/scarf/orange" greyscale_colors = "#C67A4B#C67A4B" /obj/item/clothing/neck/scarf/cyan name = "cyan scarf" + icon_state = "/obj/item/clothing/neck/scarf/cyan" greyscale_colors = "#54A3CE#54A3CE" /obj/item/clothing/neck/scarf/zebra name = "zebra scarf" + icon_state = "/obj/item/clothing/neck/scarf/zebra" greyscale_colors = "#333333#EEEEEE" /obj/item/clothing/neck/scarf/christmas name = "christmas scarf" + icon_state = "/obj/item/clothing/neck/scarf/christmas" greyscale_colors = "#038000#960000" /obj/item/clothing/neck/large_scarf name = "large scarf" - icon_state = "large_scarf" - icon_preview = 'icons/obj/fluff/previews.dmi' - icon_state_preview = "scarf_large" + icon = 'icons/map_icons/clothing/neck.dmi' + icon_state = "/obj/item/clothing/neck/large_scarf" + post_init_icon_state = "large_scarf" w_class = WEIGHT_CLASS_TINY custom_price = PAYCHECK_CREW - greyscale_colors = "#C6C6C6#EEEEEE" greyscale_config = /datum/greyscale_config/scarf greyscale_config_worn = /datum/greyscale_config/scarf/worn + greyscale_colors = "#C6C6C6#EEEEEE" flags_1 = IS_PLAYER_COLORABLE_1 /obj/item/clothing/neck/large_scarf/red name = "large red scarf" + icon_state = "/obj/item/clothing/neck/large_scarf/red" greyscale_colors = "#8A2908#A06D66" /obj/item/clothing/neck/large_scarf/green name = "large green scarf" + icon_state = "/obj/item/clothing/neck/large_scarf/green" greyscale_colors = "#525629#888674" /obj/item/clothing/neck/large_scarf/blue name = "large blue scarf" + icon_state = "/obj/item/clothing/neck/large_scarf/blue" greyscale_colors = "#20396C#6F7F91" /obj/item/clothing/neck/large_scarf/syndie name = "suspicious looking striped scarf" desc = "Ready to operate." + icon_state = "/obj/item/clothing/neck/large_scarf/syndie" greyscale_colors = "#B40000#545350" armor_type = /datum/armor/large_scarf_syndie /obj/item/clothing/neck/infinity_scarf name = "infinity scarf" - icon_state = "infinity_scarf" + icon = 'icons/map_icons/clothing/neck.dmi' + icon_state = "/obj/item/clothing/neck/infinity_scarf" + post_init_icon_state = "infinity_scarf" w_class = WEIGHT_CLASS_TINY custom_price = PAYCHECK_CREW greyscale_colors = COLOR_VERY_LIGHT_GRAY diff --git a/code/modules/clothing/shoes/costume.dm b/code/modules/clothing/shoes/costume.dm index 9df11874d86..c836af89a9d 100644 --- a/code/modules/clothing/shoes/costume.dm +++ b/code/modules/clothing/shoes/costume.dm @@ -70,11 +70,13 @@ /obj/item/clothing/shoes/glow name = "glow shoes" desc = "t3h c00L3st sh03z j00'LL 3v3r f1nd." - icon_state = "glow_shoes" + icon = 'icons/map_icons/clothing/shoes.dmi' + icon_state = "/obj/item/clothing/shoes/glow" + post_init_icon_state = "glow_shoes" inhand_icon_state = null - greyscale_colors = "#4A3A40#8EEEEE" greyscale_config = /datum/greyscale_config/glow_shoes greyscale_config_worn = /datum/greyscale_config/glow_shoes/worn + greyscale_colors = "#4A3A40#8EEEEE" flags_1 = IS_PLAYER_COLORABLE_1 /obj/item/clothing/shoes/glow/Initialize(mapload) @@ -100,11 +102,13 @@ /obj/item/clothing/shoes/jester_shoes name = "jester shoes" desc = "Shoes that jingle with every step!!" - icon_state = "jester_map" + icon = 'icons/map_icons/clothing/shoes.dmi' + icon_state = "/obj/item/clothing/shoes/jester_shoes" + post_init_icon_state = "jester_map" inhand_icon_state = null - greyscale_colors = "#00ff00#ff0000" greyscale_config = /datum/greyscale_config/jester_shoes greyscale_config_worn = /datum/greyscale_config/jester_shoes/worn + greyscale_colors = "#00ff00#ff0000" flags_1 = IS_PLAYER_COLORABLE_1 /obj/item/clothing/shoes/jester_shoes/Initialize(mapload) diff --git a/code/modules/clothing/shoes/sneakers.dm b/code/modules/clothing/shoes/sneakers.dm index 3011caa4487..a431544298a 100644 --- a/code/modules/clothing/shoes/sneakers.dm +++ b/code/modules/clothing/shoes/sneakers.dm @@ -1,14 +1,16 @@ /obj/item/clothing/shoes/sneakers dying_key = DYE_REGISTRY_SNEAKERS - icon_state = "sneakers" + icon = 'icons/map_icons/clothing/shoes.dmi' + icon_state = "/obj/item/clothing/shoes/sneakers" + post_init_icon_state = "sneakers" inhand_icon_state = "sneakers_back" lefthand_file = 'icons/mob/inhands/clothing/shoes_lefthand.dmi' righthand_file = 'icons/mob/inhands/clothing/shoes_righthand.dmi' - greyscale_colors = "#2d2d33#ffffff" greyscale_config = /datum/greyscale_config/sneakers greyscale_config_worn = /datum/greyscale_config/sneakers/worn greyscale_config_inhand_left = /datum/greyscale_config/sneakers/inhand_left greyscale_config_inhand_right = /datum/greyscale_config/sneakers/inhand_right + greyscale_colors = "#2d2d33#ffffff" supports_variations_flags = CLOTHING_DIGITIGRADE_MASK flags_1 = IS_PLAYER_COLORABLE_1 interaction_flags_mouse_drop = NEED_HANDS @@ -20,6 +22,9 @@ /obj/item/clothing/shoes/sneakers/generate_digitigrade_icons(icon/base_icon, greyscale_colors) return icon(SSgreyscale.GetColoredIconByType(/datum/greyscale_config/digitigrade, greyscale_colors), "sneakers_worn") +/obj/item/clothing/shoes/sneakers/random + flags_1 = parent_type::flags_1 | NO_NEW_GAGS_PREVIEW_1 // same icon/color as base type + /obj/item/clothing/shoes/sneakers/random/Initialize(mapload) . = ..() greyscale_colors = "#" + random_color() + "#" + random_color() @@ -28,6 +33,7 @@ /obj/item/clothing/shoes/sneakers/black name = "black shoes" desc = "A pair of black shoes." + flags_1 = parent_type::flags_1 | NO_NEW_GAGS_PREVIEW_1 // same icon/color as base type custom_price = PAYCHECK_CREW cold_protection = FEET @@ -38,10 +44,12 @@ /obj/item/clothing/shoes/sneakers/brown name = "brown shoes" desc = "A pair of brown shoes." + icon_state = "/obj/item/clothing/shoes/sneakers/brown" greyscale_colors = "#472c21#ffffff" /obj/item/clothing/shoes/sneakers/blue name = "blue shoes" + icon_state = "/obj/item/clothing/shoes/sneakers/blue" greyscale_colors = "#4f88df#ffffff" armor_type = /datum/armor/sneakers_blue @@ -50,26 +58,29 @@ /obj/item/clothing/shoes/sneakers/green name = "green shoes" + icon_state = "/obj/item/clothing/shoes/sneakers/green" greyscale_colors = "#3bca5a#ffffff" /obj/item/clothing/shoes/sneakers/yellow name = "yellow shoes" + icon_state = "/obj/item/clothing/shoes/sneakers/yellow" greyscale_colors = "#deb63d#ffffff" /obj/item/clothing/shoes/sneakers/purple name = "purple shoes" + icon_state = "/obj/item/clothing/shoes/sneakers/purple" greyscale_colors = "#7e1980#ffffff" /obj/item/clothing/shoes/sneakers/red name = "red shoes" desc = "Stylish red shoes." + icon_state = "/obj/item/clothing/shoes/sneakers/red" greyscale_colors = "#a52f29#ffffff" /obj/item/clothing/shoes/sneakers/white name = "white shoes" + icon_state = "/obj/item/clothing/shoes/sneakers/white" greyscale_colors = "#ffffff#ffffff" - icon_preview = 'icons/obj/fluff/previews.dmi' - icon_state_preview = "shoes_cloth" armor_type = /datum/armor/sneakers_white /datum/armor/sneakers_white @@ -78,7 +89,9 @@ /obj/item/clothing/shoes/sneakers/rainbow name = "rainbow shoes" desc = "Very gay shoes." + icon = 'icons/obj/clothing/shoes.dmi' icon_state = "rain_bow" + post_init_icon_state = null inhand_icon_state = "rainbow_sneakers" greyscale_colors = null @@ -90,13 +103,14 @@ /obj/item/clothing/shoes/sneakers/orange name = "orange shoes" - icon_preview = 'icons/obj/fluff/previews.dmi' - icon_state_preview = "prisonshoes" - greyscale_colors = "#d15b1b#ffffff" + icon = 'icons/map_icons/clothing/shoes.dmi' + icon_state = "/obj/item/clothing/shoes/sneakers/orange" + post_init_icon_state = "sneakers" greyscale_config = /datum/greyscale_config/sneakers_orange greyscale_config_worn = /datum/greyscale_config/sneakers_orange/worn greyscale_config_inhand_left = /datum/greyscale_config/sneakers_orange/inhand_left greyscale_config_inhand_right = /datum/greyscale_config/sneakers_orange/inhand_right + greyscale_colors = "#d15b1b#ffffff" flags_1 = NONE var/obj/item/restraints/handcuffs/attached_cuffs @@ -127,7 +141,7 @@ if(attached_cuffs) icon_state = inhand_icon_state = "sneakers_chained" else - icon_state = initial(icon_state) + icon_state = initial(post_init_icon_state) || initial(icon_state) inhand_icon_state = initial(inhand_icon_state) update_greyscale() @@ -170,14 +184,18 @@ /obj/item/clothing/shoes/sneakers/mime name = "mime shoes" + icon_state = "/obj/item/clothing/shoes/sneakers/mime" greyscale_colors = "#ffffff#ffffff" /obj/item/clothing/shoes/sneakers/marisa desc = "A pair of magic black shoes." name = "magic shoes" - greyscale_colors = "#2d2d33#ffffff" + icon = 'icons/map_icons/clothing/shoes.dmi' + icon_state = "/obj/item/clothing/shoes/sneakers/marisa" + post_init_icon_state = "sneakers" greyscale_config = /datum/greyscale_config/sneakers_marisa greyscale_config_worn = /datum/greyscale_config/sneakers_marisa/worn + greyscale_colors = "#2d2d33#ffffff" strip_delay = 5 equip_delay_other = 50 fastening_type = SHOES_SLIPON @@ -186,4 +204,5 @@ /obj/item/clothing/shoes/sneakers/cyborg name = "cyborg boots" desc = "Shoes for a cyborg costume." + icon_state = "/obj/item/clothing/shoes/sneakers/cyborg" greyscale_colors = "#4e4e4e#4e4e4e" diff --git a/code/modules/clothing/shoes/wheelys.dm b/code/modules/clothing/shoes/wheelys.dm index da4acfb3b81..63c72ad71ff 100644 --- a/code/modules/clothing/shoes/wheelys.dm +++ b/code/modules/clothing/shoes/wheelys.dm @@ -1,14 +1,16 @@ /obj/item/clothing/shoes/wheelys name = "Wheely-Heels" desc = "Uses patented retractable wheel technology. Never sacrifice speed for style - not that this provides much of either." //Thanks Fel - icon_state = "sneakers" + icon = 'icons/map_icons/clothing/shoes.dmi' + worn_icon = 'icons/mob/large-worn-icons/64x64/feet.dmi' + icon_state = "/obj/item/clothing/shoes/wheelys" + post_init_icon_state = "sneakers" worn_icon_state = "wheelys" inhand_icon_state = "sneakers_back" - greyscale_colors = "#545454#ffffff" greyscale_config = /datum/greyscale_config/sneakers_wheelys greyscale_config_inhand_left = /datum/greyscale_config/sneakers/inhand_left greyscale_config_inhand_right = /datum/greyscale_config/sneakers/inhand_right - worn_icon = 'icons/mob/large-worn-icons/64x64/feet.dmi' + greyscale_colors = "#545454#ffffff" worn_x_dimension = 64 worn_y_dimension = 64 clothing_flags = parent_type::clothing_flags | LARGE_WORN_ICON @@ -61,7 +63,9 @@ /obj/item/clothing/shoes/wheelys/rollerskates name = "roller skates" desc = "An EightO brand pair of roller skates. The wheels are retractable, though're quite bulky to walk in." + icon = 'icons/obj/clothing/shoes.dmi' icon_state = "rollerskates" + post_init_icon_state = null inhand_icon_state = null greyscale_colors = null greyscale_config = null @@ -74,7 +78,9 @@ /obj/item/clothing/shoes/wheelys/skishoes name = "ski shoes" desc = "A pair of shoes equipped with foldable skis! Very handy to move in snowy environments unimpeded." + icon = 'icons/obj/clothing/shoes.dmi' icon_state = "skishoes" + post_init_icon_state = null inhand_icon_state = null greyscale_colors = null greyscale_config = null diff --git a/code/modules/clothing/spacesuits/specialops.dm b/code/modules/clothing/spacesuits/specialops.dm index db2170dfe1b..066a80cddd5 100644 --- a/code/modules/clothing/spacesuits/specialops.dm +++ b/code/modules/clothing/spacesuits/specialops.dm @@ -1,9 +1,11 @@ /obj/item/clothing/head/helmet/space/beret name = "CentCom officer's beret" desc = "An armored beret commonly used by special operations officers. Uses advanced force field technology to protect the head from space." + icon = 'icons/map_icons/clothing/head/_head.dmi' + icon_state = "/obj/item/clothing/head/helmet/space/beret" + post_init_icon_state = "beret_badge" greyscale_config = /datum/greyscale_config/beret_badge greyscale_config_worn = /datum/greyscale_config/beret_badge/worn - icon_state = "beret_badge" inhand_icon_state = null greyscale_colors = "#397F3F#FFCE5B" clothing_flags = STOPSPRESSUREDAMAGE | THICKMATERIAL | SNUG_FIT diff --git a/code/modules/clothing/suits/costume.dm b/code/modules/clothing/suits/costume.dm index caea796808b..a85a0f78603 100644 --- a/code/modules/clothing/suits/costume.dm +++ b/code/modules/clothing/suits/costume.dm @@ -606,7 +606,9 @@ /obj/item/clothing/suit/costume/hawaiian name = "hawaiian overshirt" desc = "A cool shirt for chilling on the beach." - icon_state = "hawaiian_shirt" + icon = 'icons/map_icons/clothing/suit/costume.dmi' + icon_state = "/obj/item/clothing/suit/costume/hawaiian" + post_init_icon_state = "hawaiian_shirt" inhand_icon_state = null greyscale_config = /datum/greyscale_config/hawaiian_shirt greyscale_config_worn = /datum/greyscale_config/hawaiian_shirt/worn @@ -621,7 +623,9 @@ /obj/item/clothing/suit/costume/football_armor name = "football protective gear" desc = "Given to members of the football team!" - icon_state = "football_armor" + icon = 'icons/map_icons/clothing/suit/costume.dmi' + icon_state = "/obj/item/clothing/suit/costume/football_armor" + post_init_icon_state = "football_armor" body_parts_covered = CHEST|GROIN|LEGS|ARMS greyscale_config = /datum/greyscale_config/football_armor greyscale_config_worn = /datum/greyscale_config/football_armor/worn diff --git a/code/modules/clothing/suits/ethereal.dm b/code/modules/clothing/suits/ethereal.dm index 031d5ac4c3c..680bc001c08 100644 --- a/code/modules/clothing/suits/ethereal.dm +++ b/code/modules/clothing/suits/ethereal.dm @@ -1,9 +1,10 @@ /obj/item/clothing/suit/hooded/ethereal_raincoat name = "ethereal raincoat" desc = " A raincoat commonly worn by travelers or tourists not too fond of Sprout's rainy weather." - icon = 'icons/obj/clothing/suits/ethereal.dmi' - icon_state = "eth_raincoat" + icon = 'icons/map_icons/clothing/suit/_suit.dmi' worn_icon = 'icons/mob/clothing/suits/ethereal.dmi' + icon_state = "/obj/item/clothing/suit/hooded/ethereal_raincoat" + post_init_icon_state = "eth_raincoat" greyscale_config = /datum/greyscale_config/eth_raincoat greyscale_config_worn = /datum/greyscale_config/eth_raincoat/worn greyscale_colors = "#4e7cc7" @@ -28,6 +29,7 @@ /obj/item/clothing/suit/hooded/ethereal_raincoat/trailwarden name = "trailwarden oilcoat" desc = "A masterfully handcrafted oilslick coat, supposedly makes for excellent camouflage among Sprout's vegetation. You can hear a faint electrical buzz emanating from the luminescent pattern." + icon_state = "/obj/item/clothing/suit/hooded/ethereal_raincoat/trailwarden" greyscale_colors = "#32a87d" hoodtype = /obj/item/clothing/head/hooded/ethereal_rainhood/trailwarden diff --git a/code/modules/clothing/suits/jacket.dm b/code/modules/clothing/suits/jacket.dm index 15dad0e32e6..ddd05bf5ab6 100644 --- a/code/modules/clothing/suits/jacket.dm +++ b/code/modules/clothing/suits/jacket.dm @@ -37,7 +37,9 @@ /obj/item/clothing/suit/toggle/jacket/sweater name = "sweater jacket" desc = "A sweater jacket." - icon_state = "sweater" + icon = 'icons/map_icons/clothing/suit/_suit.dmi' + icon_state = "/obj/item/clothing/suit/toggle/jacket/sweater" + post_init_icon_state = "sweater" greyscale_config = /datum/greyscale_config/sweater greyscale_config_worn = /datum/greyscale_config/sweater/worn greyscale_colors = "#414344" @@ -46,7 +48,9 @@ /obj/item/clothing/suit/toggle/jacket/trenchcoat name = "trenchcoat" desc = "A multi-purpose trenchcoat." - icon_state = "trenchcoat" + icon = 'icons/map_icons/clothing/suit/_suit.dmi' + icon_state = "/obj/item/clothing/suit/toggle/jacket/trenchcoat" + post_init_icon_state = "trenchcoat" greyscale_config = /datum/greyscale_config/trenchcoat greyscale_config_worn = /datum/greyscale_config/trenchcoat/worn greyscale_colors = "#414344" @@ -57,7 +61,9 @@ /obj/item/clothing/suit/jacket/blazer name = "blazer jacket" desc = "A blazer jacket." - icon_state = "blazer" + icon = 'icons/map_icons/clothing/suit/_suit.dmi' + icon_state = "/obj/item/clothing/suit/jacket/blazer" + post_init_icon_state = "blazer" greyscale_config = /datum/greyscale_config/blazer greyscale_config_worn = /datum/greyscale_config/blazer/worn greyscale_colors = "#414344" @@ -66,7 +72,9 @@ /obj/item/clothing/suit/jacket/oversized name = "oversized jacket" desc = "An oversized jacket." - icon_state = "jacket_oversized" + icon = 'icons/map_icons/clothing/suit/_suit.dmi' + icon_state = "/obj/item/clothing/suit/jacket/oversized" + post_init_icon_state = "jacket_oversized" greyscale_config = /datum/greyscale_config/jacket_oversized greyscale_config_worn = /datum/greyscale_config/jacket_oversized/worn greyscale_colors = "#414344" @@ -75,7 +83,9 @@ /obj/item/clothing/suit/jacket/fancy name = "fancy fur coat" desc = "Rated 10 out of 10 in Cosmo for best coat brand." - icon_state = "fancy_coat" + icon = 'icons/map_icons/clothing/suit/_suit.dmi' + icon_state = "/obj/item/clothing/suit/jacket/fancy" + post_init_icon_state = "fancy_coat" body_parts_covered = CHEST|GROIN|LEGS|ARMS cold_protection = CHEST|GROIN|LEGS|ARMS min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT diff --git a/code/modules/clothing/suits/jobs.dm b/code/modules/clothing/suits/jobs.dm index 7cdde7ac96c..00cf2936416 100644 --- a/code/modules/clothing/suits/jobs.dm +++ b/code/modules/clothing/suits/jobs.dm @@ -44,7 +44,9 @@ /obj/item/clothing/suit/apron/overalls name = "coveralls" desc = "A set of overalls, good for protecting thinner clothes from the elements." - icon_state = "overalls" + icon = 'icons/map_icons/clothing/suit/_suit.dmi' + icon_state = "/obj/item/clothing/suit/apron/overalls" + post_init_icon_state = "overalls" inhand_icon_state = "" body_parts_covered = CHEST|GROIN|LEGS species_exception = list(/datum/species/golem) @@ -264,7 +266,9 @@ /obj/item/clothing/suit/toggle/lawyer/greyscale name = "formal suit jacket" - icon_state = "jacket_lawyer" + icon = 'icons/map_icons/clothing/suit/_suit.dmi' + icon_state = "/obj/item/clothing/suit/toggle/lawyer/greyscale" + post_init_icon_state = "jacket_lawyer" inhand_icon_state = "" greyscale_config = /datum/greyscale_config/jacket_lawyer greyscale_config_worn = /datum/greyscale_config/jacket_lawyer/worn @@ -275,8 +279,9 @@ /obj/item/clothing/suit/toggle/suspenders name = "suspenders" desc = "They suspend the illusion of the mime's play." - icon = 'icons/obj/clothing/belts.dmi' - icon_state = "suspenders" + icon = 'icons/map_icons/clothing/suit/_suit.dmi' + icon_state = "/obj/item/clothing/suit/toggle/suspenders" + post_init_icon_state = "suspenders" worn_icon = 'icons/mob/clothing/suits/utility.dmi' worn_icon_state = "suspenders" blood_overlay_type = "armor" //it's the less thing that I can put here diff --git a/code/modules/clothing/suits/labcoat.dm b/code/modules/clothing/suits/labcoat.dm index 171a072cd70..3b2d6a0882f 100644 --- a/code/modules/clothing/suits/labcoat.dm +++ b/code/modules/clothing/suits/labcoat.dm @@ -72,7 +72,9 @@ /obj/item/clothing/suit/toggle/labcoat/genetics name = "geneticist labcoat" desc = "A suit that protects against minor chemical spills. Has a blue stripe on the shoulder." - icon_state = "labcoat_job" + icon = 'icons/map_icons/clothing/suit/_suit.dmi' + icon_state = "/obj/item/clothing/suit/toggle/labcoat/genetics" + post_init_icon_state = "labcoat_job" greyscale_config = /datum/greyscale_config/labcoat greyscale_config_worn = /datum/greyscale_config/labcoat/worn greyscale_colors = "#EEEEEE#4A77A1#4A77A1#7095C2" @@ -84,7 +86,9 @@ /obj/item/clothing/suit/toggle/labcoat/chemist name = "chemist labcoat" desc = "A suit that protects against minor chemical spills. Has an orange stripe on the shoulder." - icon_state = "labcoat_job" + icon = 'icons/map_icons/clothing/suit/_suit.dmi' + icon_state = "/obj/item/clothing/suit/toggle/labcoat/chemist" + post_init_icon_state = "labcoat_job" greyscale_config = /datum/greyscale_config/labcoat greyscale_config_worn = /datum/greyscale_config/labcoat/worn greyscale_colors = "#EEEEEE#F17420#F17420#EB6F2C" @@ -96,7 +100,9 @@ /obj/item/clothing/suit/toggle/labcoat/virologist name = "virologist labcoat" desc = "A suit that protects against minor chemical spills. Has a green stripe on the shoulder." - icon_state = "labcoat_job" + icon = 'icons/map_icons/clothing/suit/_suit.dmi' + icon_state = "/obj/item/clothing/suit/toggle/labcoat/virologist" + post_init_icon_state = "labcoat_job" greyscale_config = /datum/greyscale_config/labcoat greyscale_config_worn = /datum/greyscale_config/labcoat/worn greyscale_colors = "#EEEEEE#198019#198019#40992E" @@ -108,7 +114,9 @@ /obj/item/clothing/suit/toggle/labcoat/coroner name = "coroner labcoat" desc = "A suit that protects against minor chemical spills. Has a black stripe on the shoulder." - icon_state = "labcoat_job" + icon = 'icons/map_icons/clothing/suit/_suit.dmi' + icon_state = "/obj/item/clothing/suit/toggle/labcoat/coroner" + post_init_icon_state = "labcoat_job" greyscale_config = /datum/greyscale_config/labcoat greyscale_config_worn = /datum/greyscale_config/labcoat/worn greyscale_colors = "#EEEEEE#2D2D33#2D2D33#39393F" @@ -126,7 +134,9 @@ /obj/item/clothing/suit/toggle/labcoat/science name = "scientist labcoat" desc = "A suit that protects against minor chemical spills. Has a purple stripe on the shoulder." - icon_state = "labcoat_job" + icon = 'icons/map_icons/clothing/suit/_suit.dmi' + icon_state = "/obj/item/clothing/suit/toggle/labcoat/science" + post_init_icon_state = "labcoat_job" greyscale_config = /datum/greyscale_config/labcoat greyscale_config_worn = /datum/greyscale_config/labcoat/worn greyscale_colors = "#EEEEEE#7E1980#7E1980#B347A1" @@ -138,7 +148,9 @@ /obj/item/clothing/suit/toggle/labcoat/roboticist name = "roboticist labcoat" desc = "More like an eccentric coat than a labcoat. Helps pass off bloodstains as part of the aesthetic. Comes with red shoulder pads." - icon_state = "labcoat_job" + icon = 'icons/map_icons/clothing/suit/_suit.dmi' + icon_state = "/obj/item/clothing/suit/toggle/labcoat/roboticist" + post_init_icon_state = "labcoat_job" greyscale_config = /datum/greyscale_config/labcoat greyscale_config_worn = /datum/greyscale_config/labcoat/worn greyscale_colors = "#EEEEEE#88242D#88242D#39393F" @@ -146,7 +158,9 @@ /obj/item/clothing/suit/toggle/labcoat/interdyne name = "interdyne labcoat" desc = "More like an eccentric coat than a labcoat. Helps pass off bloodstains as part of the aesthetic. Comes with red shoulder pads." - icon_state = "labcoat_job" + icon = 'icons/map_icons/clothing/suit/_suit.dmi' + icon_state = "/obj/item/clothing/suit/toggle/labcoat/interdyne" + post_init_icon_state = "labcoat_job" greyscale_config = /datum/greyscale_config/labcoat greyscale_config_worn = /datum/greyscale_config/labcoat/worn greyscale_colors = "#EEEEEE#88242D#88242D#39393F" diff --git a/code/modules/clothing/suits/moth.dm b/code/modules/clothing/suits/moth.dm index b9c8ab64fa6..5a95a3945e0 100644 --- a/code/modules/clothing/suits/moth.dm +++ b/code/modules/clothing/suits/moth.dm @@ -1,7 +1,9 @@ /obj/item/clothing/suit/mothcoat name = "mothic flightsuit" desc = "This peculiar utility harness is a common sight among the moth fleet's crews due to its ability to fasten the wings to the body without impacting mobility inside cramped ship interiors. It looks somewhat crude yet it's surprisingly comfortable." - icon_state = "mothcoat" + icon = 'icons/map_icons/clothing/suit/_suit.dmi' + icon_state = "/obj/item/clothing/suit/mothcoat" + post_init_icon_state = "mothcoat" greyscale_config = /datum/greyscale_config/mothcoat greyscale_config_worn = /datum/greyscale_config/mothcoat/worn greyscale_colors = "#eaeaea" @@ -12,6 +14,7 @@ /obj/item/clothing/suit/mothcoat/original desc = "An old-school flightsuit from the moth fleet. A perfect token of mothic survivalistic and adaptable attitude, yet a bitter reminder that with the loss of their home planet and institution of the fleet, their beloved wings remain as a burden to bear, condemned to never fly again." + icon_state = "/obj/item/clothing/suit/mothcoat/original" greyscale_colors = "#dfa409" /obj/item/clothing/suit/mothcoat/original/Initialize(mapload) @@ -22,7 +25,9 @@ /obj/item/clothing/suit/mothcoat/winter name = "mothic mantella" desc = "A thick garment that keeps warm and protects those precious wings from harsh weather, also commonly used during festivities. Feels much heavier than it looks." - icon_state = "mothcoat_winter" + icon = 'icons/map_icons/clothing/suit/_suit.dmi' + icon_state = "/obj/item/clothing/suit/mothcoat/winter" + post_init_icon_state = "mothcoat_winter" greyscale_config = /datum/greyscale_config/mothcoat_winter greyscale_config_worn = /datum/greyscale_config/mothcoat_winter/worn greyscale_colors = "#557979#795e55" diff --git a/code/modules/clothing/suits/shirt.dm b/code/modules/clothing/suits/shirt.dm index 9b8ce90693b..11e7451a840 100644 --- a/code/modules/clothing/suits/shirt.dm +++ b/code/modules/clothing/suits/shirt.dm @@ -1,8 +1,10 @@ /obj/item/clothing/suit/costume/wellworn_shirt name = "well-worn shirt" desc = "A worn out, curiously comfortable t-shirt. You wouldn't go so far as to say it feels like being hugged when you wear it, but it's pretty close. Good for sleeping in." - icon_state = "wellworn_shirt" inhand_icon_state = null + icon = 'icons/map_icons/clothing/suit/costume.dmi' + icon_state = "/obj/item/clothing/suit/costume/wellworn_shirt" + post_init_icon_state = "wellworn_shirt" greyscale_config = /datum/greyscale_config/wellworn_shirt greyscale_config_worn = /datum/greyscale_config/wellworn_shirt/worn greyscale_colors = COLOR_WHITE @@ -24,70 +26,78 @@ /obj/item/clothing/suit/costume/wellworn_shirt/skub name = "pro-skub shirt" desc = "A worn out, curiously comfortable t-shirt proclaiming your pro-skub stance. Fuck those anti-skubbies." - icon_state = "wellworn_shirt_pro_skub" greyscale_colors = "#FFFF4D" + icon_state = "/obj/item/clothing/suit/costume/wellworn_shirt/skub" + post_init_icon_state = "wellworn_shirt_pro_skub" greyscale_config = /datum/greyscale_config/wellworn_shirt_skub greyscale_config_worn = /datum/greyscale_config/wellworn_shirt_skub/worn /obj/item/clothing/suit/costume/wellworn_shirt/skub/anti name = "anti-skub shirt" desc = "A worn out, curiously comfortable t-shirt proclaiming your anti-skub stance. Fuck those pro-skubbies." - icon_state = "wellworn_shirt_anti_skub" + icon_state = "/obj/item/clothing/suit/costume/wellworn_shirt/skub/anti" + post_init_icon_state = "wellworn_shirt_anti_skub" /obj/item/clothing/suit/costume/wellworn_shirt/graphic name = "well-worn graphic shirt" desc = "A worn out, curiously comfortable t-shirt with a character from Phanic the Weasel on the front. It adds some charm points to itself and the wearer, and reminds you of when the series was still good; way back in 2500." - icon_state = "wellworn_shirt_gamer" greyscale_colors = "#FFFFFF#46B45B" + icon_state = "/obj/item/clothing/suit/costume/wellworn_shirt/graphic" + post_init_icon_state = "wellworn_shirt_gamer" greyscale_config = /datum/greyscale_config/wellworn_shirt_graphic greyscale_config_worn = /datum/greyscale_config/wellworn_shirt_graphic/worn /obj/item/clothing/suit/costume/wellworn_shirt/graphic/ian name = "well-worn ian shirt" desc = "A worn out, curiously comfortable t-shirt with a picture of Ian the Corgi. You wouldn't go so far as to say it feels like being hugged when you wear it, but it's pretty close. Good for sleeping in." - icon_state = "wellworn_shirt_ian" + icon_state = "/obj/item/clothing/suit/costume/wellworn_shirt/graphic/ian" + post_init_icon_state = "wellworn_shirt_ian" greyscale_colors = "#FFFFFF#E1B26C" /obj/item/clothing/suit/costume/wellworn_shirt/wornout name = "worn-out shirt" desc = "A pretty grubby, yet still comfortable t-shirt. You've been sleeping in this one for a bit too long." - icon_state = "wornout_shirt" + icon_state = "/obj/item/clothing/suit/costume/wellworn_shirt/wornout" + post_init_icon_state = "wornout_shirt" /obj/item/clothing/suit/costume/wellworn_shirt/wornout/graphic name = "worn-out graphic shirt" desc = "A pretty grubby, yet still comfortable t-shirt with a character from Phanic the Weasel on the front. The slightly raggedy nature recalls that one horrid title where they made him a vampire. You should get cheevos for sleeping in it this many days straight." - icon_state = "wornout_shirt_gamer" greyscale_colors = "#FFFFFF#46B45B" + icon_state = "/obj/item/clothing/suit/costume/wellworn_shirt/wornout/graphic" + post_init_icon_state = "wornout_shirt_gamer" greyscale_config = /datum/greyscale_config/wornout_shirt_graphic greyscale_config_worn = /datum/greyscale_config/wornout_shirt_graphic/worn /obj/item/clothing/suit/costume/wellworn_shirt/wornout/graphic/ian name = "worn-out ian shirt" desc = "A pretty grubby, yet still comfortable t-shirt with a picture of Ian the Corgi. It's gone past 'a bit worn' to 'well-loved;' excellent for use as pajamas." - icon_state = "wornout_shirt_ian" + icon_state = "/obj/item/clothing/suit/costume/wellworn_shirt/wornout/graphic/ian" + post_init_icon_state = "wornout_shirt_ian" greyscale_colors = "#FFFFFF#E1B26C" /obj/item/clothing/suit/costume/wellworn_shirt/messy name = "messy worn-out shirt" desc = "This worn-out, somehow comfortable t-shirt has reached a more thorough understanding of grime; maybe the fact that it's still gone unwashed could function as a sort of camo?" - icon_state = "messyworn_shirt" + icon_state = "/obj/item/clothing/suit/costume/wellworn_shirt/messy" + post_init_icon_state = "messyworn_shirt" /obj/item/clothing/suit/costume/wellworn_shirt/messy/graphic name = "messy graphic shirt" desc = "This worn-out, somehow comfortable t-shirt has reached a more thorough understanding of grime. Normies will never understand that this is a collector's item, and your sense of fashion absolutely mogs theirs. Phanic Phorever." - icon_state = "messyworn_shirt_gamer" - greyscale_colors = "#FFFFFF#46B45B" + icon_state = "/obj/item/clothing/suit/costume/wellworn_shirt/messy/graphic" + post_init_icon_state = "messyworn_shirt_gamer" greyscale_config = /datum/greyscale_config/messyworn_shirt_graphic greyscale_config_worn = /datum/greyscale_config/messyworn_shirt_graphic/worn + greyscale_colors = "#FFFFFF#46B45B" /obj/item/clothing/suit/costume/wellworn_shirt/messy/graphic/ian name = "messy ian shirt" desc = "This worn-out, somehow comfortable t-shirt has reached a more thorough understanding of grime. You get the feeling like you understand how it's like to be a stray dog, yet Ian's face still comforts you." - icon_state = "messyworn_shirt_ian" + icon_state = "/obj/item/clothing/suit/costume/wellworn_shirt/messy/graphic/ian" + post_init_icon_state = "messyworn_shirt_ian" greyscale_colors = "#FFFFFF#E1B26C" /obj/item/clothing/suit/costume/wellworn_shirt/messy/graphic/gamer name = "gamer shirt" desc = "A baggy, extremely well-used shirt with vintage game character Phanic the Weasel far-too-boldly displayed on the chest. Your mind cannot hope to withstand the assault of remembering the Phanic Phanart you've seen; let alone the stench of this top." - icon_state = "messyworn_shirt_gamer" - greyscale_colors = "#FFFFFF#46B45B" diff --git a/code/modules/clothing/suits/wintercoats.dm b/code/modules/clothing/suits/wintercoats.dm index e97bfd1e42a..fb9320297e4 100644 --- a/code/modules/clothing/suits/wintercoats.dm +++ b/code/modules/clothing/suits/wintercoats.dm @@ -50,7 +50,7 @@ /obj/item/clothing/suit/hooded/wintercoat/click_alt(mob/user) zipped = !zipped playsound(src, 'sound/items/zip/zip_up.ogg', 30, TRUE, -3) - worn_icon_state = "[initial(icon_state)][zipped ? "_t" : ""]" + worn_icon_state = "[initial(post_init_icon_state) || initial(icon_state)][zipped ? "_t" : ""]" balloon_alert(user, "[zipped ? "" : "un"]zipped") if(ishuman(loc)) @@ -656,10 +656,13 @@ /obj/item/clothing/suit/hooded/wintercoat/custom name = "tailored winter coat" desc = "A heavy jacket made from 'synthetic' animal furs, with custom colors." + icon = 'icons/map_icons/clothing/suit/_suit.dmi' + icon_state = "/obj/item/clothing/suit/hooded/wintercoat/custom" + post_init_icon_state = "coatwinter" hood_down_overlay_suffix = "" - greyscale_colors = "#ffffff#ffffff#808080#808080#808080#808080" greyscale_config = /datum/greyscale_config/winter_coats greyscale_config_worn = /datum/greyscale_config/winter_coats/worn + greyscale_colors = "#ffffff#ffffff#808080#808080#808080#808080" hoodtype = /obj/item/clothing/head/hooded/winterhood/custom flags_1 = IS_PLAYER_COLORABLE_1 diff --git a/code/modules/clothing/suits/wiz_robe.dm b/code/modules/clothing/suits/wiz_robe.dm index 1f5af3f3ec7..591d59d0f0a 100644 --- a/code/modules/clothing/suits/wiz_robe.dm +++ b/code/modules/clothing/suits/wiz_robe.dm @@ -70,10 +70,12 @@ /obj/item/clothing/head/wizard/marisa name = "witch hat" desc = "Strange-looking hat-wear. Makes you want to cast fireballs." - icon_state = "witch_hat" - greyscale_colors = "#343640#e0cab8#e0cab8" + icon = 'icons/map_icons/clothing/head/_head.dmi' + icon_state = "/obj/item/clothing/head/wizard/marisa" + post_init_icon_state = "witch_hat" greyscale_config = /datum/greyscale_config/witch_hat greyscale_config_worn = /datum/greyscale_config/witch_hat/worn + greyscale_colors = "#343640#e0cab8#e0cab8" flags_1 = IS_PLAYER_COLORABLE_1 dog_fashion = null @@ -198,6 +200,7 @@ /obj/item/clothing/head/wizard/marisa/fake name = "witch hat" + flags_1 = parent_type::flags_1 | NO_NEW_GAGS_PREVIEW_1 armor_type = /datum/armor/none resistance_flags = FLAMMABLE fishing_modifier = -2 diff --git a/code/modules/clothing/under/accessories/vests.dm b/code/modules/clothing/under/accessories/vests.dm index 83bbc789bdd..d3b5c5642f0 100644 --- a/code/modules/clothing/under/accessories/vests.dm +++ b/code/modules/clothing/under/accessories/vests.dm @@ -2,7 +2,9 @@ /obj/item/clothing/accessory/waistcoat name = "waistcoat" desc = "For some classy, murderous fun." - icon_state = "waistcoat" + icon = 'icons/map_icons/clothing/accessory.dmi' + icon_state = "/obj/item/clothing/accessory/waistcoat" + post_init_icon_state = "waistcoat" inhand_icon_state = "wcoat" lefthand_file = 'icons/mob/inhands/clothing/suits_lefthand.dmi' righthand_file = 'icons/mob/inhands/clothing/suits_righthand.dmi' diff --git a/code/modules/clothing/under/color.dm b/code/modules/clothing/under/color.dm index af64ca4e999..9c1fe797ba5 100644 --- a/code/modules/clothing/under/color.dm +++ b/code/modules/clothing/under/color.dm @@ -1,24 +1,26 @@ /obj/item/clothing/under/color name = "jumpsuit" desc = "A standard issue colored jumpsuit. Variety is the spice of life!" + icon = 'icons/map_icons/clothing/under/color.dmi' + icon_state = "/obj/item/clothing/under/color" + post_init_icon_state = "jumpsuit" + inhand_icon_state = "jumpsuit" + worn_icon_state = "jumpsuit" + worn_icon = 'icons/mob/clothing/under/color.dmi' dying_key = DYE_REGISTRY_UNDER greyscale_colors = "#3f3f3f" greyscale_config = /datum/greyscale_config/jumpsuit greyscale_config_worn = /datum/greyscale_config/jumpsuit/worn greyscale_config_inhand_left = /datum/greyscale_config/jumpsuit/inhand_left greyscale_config_inhand_right = /datum/greyscale_config/jumpsuit/inhand_right - icon = 'icons/obj/clothing/under/color.dmi' - icon_state = "jumpsuit" - inhand_icon_state = "jumpsuit" - worn_icon_state = "jumpsuit" - worn_icon = 'icons/mob/clothing/under/color.dmi' flags_1 = IS_PLAYER_COLORABLE_1 /obj/item/clothing/under/color/jumpskirt + icon_state = "/obj/item/clothing/under/color/jumpskirt" + post_init_icon_state = "jumpskirt" body_parts_covered = CHEST|GROIN|ARMS dying_key = DYE_REGISTRY_JUMPSKIRT female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY - icon_state = "jumpskirt" supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON /// Returns a random, acceptable jumpsuit typepath @@ -33,7 +35,9 @@ ) /obj/item/clothing/under/color/random + icon = 'icons/obj/clothing/under/color.dmi' icon_state = "random_jumpsuit" + flags_1 = parent_type::flags_1 | NO_NEW_GAGS_PREVIEW_1 /obj/item/clothing/under/color/random/Initialize(mapload) ..() @@ -54,7 +58,9 @@ ) /obj/item/clothing/under/color/jumpskirt/random + icon = 'icons/obj/clothing/under/color.dmi' icon_state = "random_jumpsuit" //Skirt variant needed + flags_1 = parent_type::flags_1 | NO_NEW_GAGS_PREVIEW_1 /obj/item/clothing/under/color/jumpskirt/random/Initialize(mapload) ..() @@ -69,9 +75,11 @@ /obj/item/clothing/under/color/black name = "black jumpsuit" resistance_flags = NONE + flags_1 = parent_type::flags_1 | NO_NEW_GAGS_PREVIEW_1 /obj/item/clothing/under/color/jumpskirt/black name = "black jumpskirt" + flags_1 = parent_type::flags_1 | NO_NEW_GAGS_PREVIEW_1 /obj/item/clothing/under/color/black/ghost item_flags = DROPDEL @@ -83,17 +91,21 @@ /obj/item/clothing/under/color/grey name = "grey jumpsuit" desc = "A tasteful grey jumpsuit that reminds you of the good old days." + icon_state = "/obj/item/clothing/under/color/grey" greyscale_colors = "#b3b3b3" /obj/item/clothing/under/color/jumpskirt/grey name = "grey jumpskirt" desc = "A tasteful grey jumpskirt that reminds you of the good old days." + icon_state = "/obj/item/clothing/under/color/jumpskirt/grey" greyscale_colors = "#b3b3b3" /obj/item/clothing/under/color/grey/ancient name = "ancient jumpsuit" desc = "A terribly ragged and frayed grey jumpsuit. It looks like it hasn't been washed in over a decade." + icon = 'icons/obj/clothing/under/color.dmi' icon_state = "grey_ancient" + post_init_icon_state = null inhand_icon_state = "gy_suit" greyscale_config = null greyscale_config_inhand_left = null @@ -103,122 +115,152 @@ /obj/item/clothing/under/color/blue name = "blue jumpsuit" + icon_state = "/obj/item/clothing/under/color/blue" greyscale_colors = "#52aecc" /obj/item/clothing/under/color/jumpskirt/blue name = "blue jumpskirt" + icon_state = "/obj/item/clothing/under/color/jumpskirt/blue" greyscale_colors = "#52aecc" /obj/item/clothing/under/color/green name = "green jumpsuit" + icon_state = "/obj/item/clothing/under/color/green" greyscale_colors = "#9ed63a" /obj/item/clothing/under/color/jumpskirt/green name = "green jumpskirt" + icon_state = "/obj/item/clothing/under/color/jumpskirt/green" greyscale_colors = "#9ed63a" /obj/item/clothing/under/color/orange name = "orange jumpsuit" desc = "Don't wear this near paranoid security officers." + icon_state = "/obj/item/clothing/under/color/orange" greyscale_colors = "#ff8c19" /obj/item/clothing/under/color/jumpskirt/orange name = "orange jumpskirt" + icon_state = "/obj/item/clothing/under/color/jumpskirt/orange" greyscale_colors = "#ff8c19" /obj/item/clothing/under/color/pink name = "pink jumpsuit" desc = "Just looking at this makes you feel fabulous." + icon_state = "/obj/item/clothing/under/color/pink" greyscale_colors = "#ffa69b" /obj/item/clothing/under/color/jumpskirt/pink name = "pink jumpskirt" + icon_state = "/obj/item/clothing/under/color/jumpskirt/pink" greyscale_colors = "#ffa69b" /obj/item/clothing/under/color/red name = "red jumpsuit" + icon_state = "/obj/item/clothing/under/color/red" greyscale_colors = "#eb0c07" /obj/item/clothing/under/color/jumpskirt/red name = "red jumpskirt" + icon_state = "/obj/item/clothing/under/color/jumpskirt/red" greyscale_colors = "#eb0c07" /obj/item/clothing/under/color/white name = "white jumpsuit" + icon_state = "/obj/item/clothing/under/color/white" greyscale_colors = "#ffffff" /obj/item/clothing/under/color/jumpskirt/white name = "white jumpskirt" + icon_state = "/obj/item/clothing/under/color/jumpskirt/white" greyscale_colors = "#ffffff" /obj/item/clothing/under/color/yellow name = "yellow jumpsuit" + icon_state = "/obj/item/clothing/under/color/yellow" greyscale_colors = "#ffe14d" /obj/item/clothing/under/color/jumpskirt/yellow name = "yellow jumpskirt" + icon_state = "/obj/item/clothing/under/color/jumpskirt/yellow" greyscale_colors = "#ffe14d" /obj/item/clothing/under/color/darkblue name = "dark blue jumpsuit" + icon_state = "/obj/item/clothing/under/color/darkblue" greyscale_colors = "#3285ba" /obj/item/clothing/under/color/jumpskirt/darkblue name = "dark blue jumpskirt" + icon_state = "/obj/item/clothing/under/color/jumpskirt/darkblue" greyscale_colors = "#3285ba" /obj/item/clothing/under/color/teal name = "teal jumpsuit" + icon_state = "/obj/item/clothing/under/color/teal" greyscale_colors = "#77f3b7" /obj/item/clothing/under/color/jumpskirt/teal name = "teal jumpskirt" + icon_state = "/obj/item/clothing/under/color/jumpskirt/teal" greyscale_colors = "#77f3b7" /obj/item/clothing/under/color/lightpurple name = "light purple jumpsuit" + icon_state = "/obj/item/clothing/under/color/lightpurple" greyscale_colors = "#9f70cc" /obj/item/clothing/under/color/jumpskirt/lightpurple name = "light purple jumpskirt" + icon_state = "/obj/item/clothing/under/color/jumpskirt/lightpurple" greyscale_colors = "#9f70cc" /obj/item/clothing/under/color/darkgreen name = "dark green jumpsuit" + icon_state = "/obj/item/clothing/under/color/darkgreen" greyscale_colors = "#6fbc22" /obj/item/clothing/under/color/jumpskirt/darkgreen name = "dark green jumpskirt" + icon_state = "/obj/item/clothing/under/color/jumpskirt/darkgreen" greyscale_colors = "#6fbc22" /obj/item/clothing/under/color/lightbrown name = "light brown jumpsuit" + icon_state = "/obj/item/clothing/under/color/lightbrown" greyscale_colors = "#c59431" /obj/item/clothing/under/color/jumpskirt/lightbrown name = "light brown jumpskirt" + icon_state = "/obj/item/clothing/under/color/jumpskirt/lightbrown" greyscale_colors = "#c59431" /obj/item/clothing/under/color/brown name = "brown jumpsuit" + icon_state = "/obj/item/clothing/under/color/brown" greyscale_colors = "#a17229" /obj/item/clothing/under/color/jumpskirt/brown name = "brown jumpskirt" + icon_state = "/obj/item/clothing/under/color/jumpskirt/brown" greyscale_colors = "#a17229" /obj/item/clothing/under/color/maroon name = "maroon jumpsuit" + icon_state = "/obj/item/clothing/under/color/maroon" greyscale_colors = "#cc295f" /obj/item/clothing/under/color/jumpskirt/maroon name = "maroon jumpskirt" + icon_state = "/obj/item/clothing/under/color/jumpskirt/maroon" greyscale_colors = "#cc295f" /obj/item/clothing/under/color/rainbow name = "rainbow jumpsuit" desc = "A multi-colored jumpsuit!" + icon = 'icons/obj/clothing/under/color.dmi' icon_state = "rainbow" + post_init_icon_state = null inhand_icon_state = "rainbow" greyscale_config = null greyscale_config_inhand_left = null @@ -233,7 +275,9 @@ /obj/item/clothing/under/color/jumpskirt/rainbow name = "rainbow jumpskirt" desc = "A multi-colored jumpskirt!" + icon = 'icons/obj/clothing/under/color.dmi' icon_state = "rainbow_skirt" + post_init_icon_state = null inhand_icon_state = "rainbow" greyscale_config = null greyscale_config_inhand_left = null diff --git a/code/modules/clothing/under/costume.dm b/code/modules/clothing/under/costume.dm index 39734352fda..adc7cb1a30a 100644 --- a/code/modules/clothing/under/costume.dm +++ b/code/modules/clothing/under/costume.dm @@ -311,19 +311,24 @@ /obj/item/clothing/under/costume/buttondown/slacks name = "button-down shirt with slacks" desc = "A fancy button-down shirt with slacks." - icon_state = "buttondown_slacks" + icon = 'icons/map_icons/clothing/under/costume.dmi' + icon_state = "/obj/item/clothing/under/costume/buttondown/slacks" + post_init_icon_state = "buttondown_slacks" greyscale_config = /datum/greyscale_config/buttondown_slacks greyscale_config_worn = /datum/greyscale_config/buttondown_slacks/worn greyscale_colors = "#EEEEEE#EE8E2E#222227#D8D39C" flags_1 = IS_PLAYER_COLORABLE_1 /obj/item/clothing/under/costume/buttondown/slacks/service //preset one to be a formal white shirt and black pants + icon_state = "/obj/item/clothing/under/costume/buttondown/slacks/service" greyscale_colors = "#EEEEEE#CBDBFC#17171B#222227" /obj/item/clothing/under/costume/buttondown/shorts name = "button-down shirt with shorts" desc = "A fancy button-down shirt with shorts." - icon_state = "buttondown_shorts" + icon = 'icons/map_icons/clothing/under/costume.dmi' + icon_state = "/obj/item/clothing/under/costume/buttondown/shorts" + post_init_icon_state = "buttondown_shorts" greyscale_config = /datum/greyscale_config/buttondown_shorts greyscale_config_worn = /datum/greyscale_config/buttondown_shorts/worn greyscale_colors = "#EEEEEE#EE8E2E#222227#D8D39C" @@ -332,7 +337,9 @@ /obj/item/clothing/under/costume/buttondown/skirt name = "button-down shirt with skirt" desc = "A fancy button-down shirt with skirt." - icon_state = "buttondown_skirt" + icon = 'icons/map_icons/clothing/under/costume.dmi' + icon_state = "/obj/item/clothing/under/costume/buttondown/skirt" + post_init_icon_state = "buttondown_skirt" greyscale_config = /datum/greyscale_config/buttondown_skirt greyscale_config_worn = /datum/greyscale_config/buttondown_skirt/worn greyscale_colors = "#EEEEEE#EE8E2E#222227#D8D39C" @@ -342,6 +349,7 @@ supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON /obj/item/clothing/under/costume/buttondown/skirt/service //preset one to be a formal white shirt and black skirt + icon_state = "/obj/item/clothing/under/costume/buttondown/skirt/service" greyscale_colors = "#EEEEEE#CBDBFC#17171B#222227" /obj/item/clothing/under/costume/jackbros @@ -359,7 +367,9 @@ /obj/item/clothing/under/costume/football_suit name = "football uniform" - icon_state = "football_suit" + icon = 'icons/map_icons/clothing/under/costume.dmi' + icon_state = "/obj/item/clothing/under/costume/football_suit" + post_init_icon_state = "football_suit" can_adjust = FALSE greyscale_config = /datum/greyscale_config/football_suit greyscale_config_worn = /datum/greyscale_config/football_suit/worn @@ -419,7 +429,9 @@ /obj/item/clothing/under/costume/gi name = "martial gi" desc = "Assistant, nukie, whatever. You can beat anyone; it's called hard work!" - icon_state = "martial_arts_gi" + icon = 'icons/map_icons/clothing/under/costume.dmi' + icon_state = "/obj/item/clothing/under/costume/gi" + post_init_icon_state = "martial_arts_gi" greyscale_config = /datum/greyscale_config/gi greyscale_config_worn = /datum/greyscale_config/gi/worn greyscale_colors = "#f1eeee#000000" @@ -436,7 +448,8 @@ /obj/item/clothing/under/costume/gi/goku name = "sacred gi" desc = "Created by a man who touched the hearts and lives of many." - icon_state = "martial_arts_gi_goku" + icon_state = "/obj/item/clothing/under/costume/gi/goku" + post_init_icon_state = "martial_arts_gi_goku" greyscale_colors = "#f89925#3e6dd7" /obj/item/clothing/under/costume/traditional diff --git a/code/modules/clothing/under/ethereal.dm b/code/modules/clothing/under/ethereal.dm index 0028ae3ac1b..25a47323a30 100644 --- a/code/modules/clothing/under/ethereal.dm +++ b/code/modules/clothing/under/ethereal.dm @@ -1,9 +1,10 @@ /obj/item/clothing/under/ethereal_tunic name = "ethereal tunic" desc = "A simple sleeveless tunic worn over an undersuit, it glows in the dark!" - icon_state = "eth_tunic" - icon = 'icons/obj/clothing/under/ethereal.dmi' + icon = 'icons/map_icons/clothing/under/_under.dmi' worn_icon = 'icons/mob/clothing/under/ethereal.dmi' + icon_state = "/obj/item/clothing/under/ethereal_tunic" + post_init_icon_state = "eth_tunic" greyscale_colors = "#4e7cc7" greyscale_config = /datum/greyscale_config/eth_tunic greyscale_config_worn = /datum/greyscale_config/eth_tunic/worn @@ -26,6 +27,7 @@ /obj/item/clothing/under/ethereal_tunic/trailwarden name = "trailwarden tunic" desc = "Farmers and pilgrims would commonly find their clothes permanently stained from years of wading through the mud and bioluminescent flora of Sprout, eventually it became customary to dye clothes to replicate this effect purposefully." + icon_state = "/obj/item/clothing/under/ethereal_tunic/trailwarden" greyscale_colors = "#32a87d" /obj/item/clothing/under/ethereal_tunic/trailwarden/equipped(mob/living/user, slot) diff --git a/code/modules/clothing/under/jobs/civilian/civilian.dm b/code/modules/clothing/under/jobs/civilian/civilian.dm index 35eb2db3029..d906bc3d879 100644 --- a/code/modules/clothing/under/jobs/civilian/civilian.dm +++ b/code/modules/clothing/under/jobs/civilian/civilian.dm @@ -180,9 +180,10 @@ /obj/item/clothing/under/rank/civilian/lawyer/bluesuit name = "blue buttondown suit" - icon = 'icons/obj/clothing/under/shorts_pants_shirts.dmi' worn_icon = 'icons/mob/clothing/under/shorts_pants_shirts.dmi' - icon_state = "buttondown_slacks" + icon = 'icons/map_icons/clothing/under/_under.dmi' + icon_state = "/obj/item/clothing/under/rank/civilian/lawyer/bluesuit" + post_init_icon_state = "buttondown_slacks" greyscale_config = /datum/greyscale_config/buttondown_slacks greyscale_config_worn = /datum/greyscale_config/buttondown_slacks/worn greyscale_colors = "#EEEEEE#CBDBFC#17171B#2B65A8" @@ -191,7 +192,9 @@ /obj/item/clothing/under/rank/civilian/lawyer/bluesuit/skirt name = "blue buttondown suitskirt" - icon_state = "buttondown_skirt" + icon = 'icons/map_icons/clothing/under/_under.dmi' + icon_state = "/obj/item/clothing/under/rank/civilian/lawyer/bluesuit/skirt" + post_init_icon_state = "buttondown_skirt" greyscale_config = /datum/greyscale_config/buttondown_skirt greyscale_config_worn = /datum/greyscale_config/buttondown_skirt/worn body_parts_covered = CHEST|GROIN|ARMS diff --git a/code/modules/clothing/under/jobs/civilian/clown_mime.dm b/code/modules/clothing/under/jobs/civilian/clown_mime.dm index 55f0da88918..bb0c33e7e2f 100644 --- a/code/modules/clothing/under/jobs/civilian/clown_mime.dm +++ b/code/modules/clothing/under/jobs/civilian/clown_mime.dm @@ -77,10 +77,12 @@ /obj/item/clothing/under/rank/civilian/clown/jester name = "jester suit" desc = "A jolly dress, well suited to entertain your master, nuncle." - icon_state = "jester_map" - greyscale_colors = "#00ff00#ff0000" + icon = 'icons/map_icons/clothing/under/_under.dmi' + icon_state = "/obj/item/clothing/under/rank/civilian/clown/jester" + post_init_icon_state = "jester_map" greyscale_config = /datum/greyscale_config/jester_suit greyscale_config_worn = /datum/greyscale_config/jester_suit/worn + greyscale_colors = "#00ff00#ff0000" flags_1 = IS_PLAYER_COLORABLE_1 /obj/item/clothing/under/rank/civilian/clown/jesteralt diff --git a/code/modules/clothing/under/jobs/civilian/curator.dm b/code/modules/clothing/under/jobs/civilian/curator.dm index 44be99b8951..a4cc66f2d2e 100644 --- a/code/modules/clothing/under/jobs/civilian/curator.dm +++ b/code/modules/clothing/under/jobs/civilian/curator.dm @@ -35,13 +35,16 @@ /obj/item/clothing/under/rank/civilian/curator/nasa name = "\improper NASA jumpsuit" desc = "It has a NASA logo on it and is made of space-proofed materials." - icon_state = "jumpsuit" + icon = 'icons/map_icons/clothing/under/color.dmi' + icon_state = "/obj/item/clothing/under/color" + post_init_icon_state = "jumpsuit" inhand_icon_state = "jumpsuit" - greyscale_colors = "#3f3f3f" + flags_1 = parent_type::flags_1 | NO_NEW_GAGS_PREVIEW_1 greyscale_config = /datum/greyscale_config/jumpsuit greyscale_config_worn = /datum/greyscale_config/jumpsuit/worn greyscale_config_inhand_left = /datum/greyscale_config/jumpsuit/inhand_left greyscale_config_inhand_right = /datum/greyscale_config/jumpsuit/inhand_right + greyscale_colors = "#3f3f3f" w_class = WEIGHT_CLASS_BULKY armor_type = /datum/armor/clothing_under/curator_nasa body_parts_covered = CHEST|GROIN|LEGS|FEET|ARMS|HANDS diff --git a/code/modules/clothing/under/jobs/rnd.dm b/code/modules/clothing/under/jobs/rnd.dm index dc5937e4e02..bb65ef5801f 100644 --- a/code/modules/clothing/under/jobs/rnd.dm +++ b/code/modules/clothing/under/jobs/rnd.dm @@ -36,9 +36,10 @@ /obj/item/clothing/under/rank/rnd/research_director/alt name = "research director's tan suit" desc = "Maybe you'll engineer your own half-man, half-pig creature some day. Its fabric provides minor protection from biological contaminants." - icon = 'icons/obj/clothing/under/shorts_pants_shirts.dmi' + icon = 'icons/map_icons/clothing/under/_under.dmi' worn_icon = 'icons/mob/clothing/under/shorts_pants_shirts.dmi' - icon_state = "buttondown_slacks" + icon_state = "/obj/item/clothing/under/rank/rnd/research_director/alt" + post_init_icon_state = "buttondown_slacks" greyscale_config = /datum/greyscale_config/buttondown_slacks greyscale_config_worn = /datum/greyscale_config/buttondown_slacks/worn greyscale_colors = "#ffeeb6#c2d3da#402912#615233" @@ -47,7 +48,9 @@ /obj/item/clothing/under/rank/rnd/research_director/alt/skirt name = "research director's tan suitskirt" - icon_state = "buttondown_skirt" + icon = 'icons/map_icons/clothing/under/_under.dmi' + icon_state = "/obj/item/clothing/under/rank/rnd/research_director/alt/skirt" + post_init_icon_state = "buttondown_skirt" greyscale_config = /datum/greyscale_config/buttondown_skirt greyscale_config_worn = /datum/greyscale_config/buttondown_skirt/worn body_parts_covered = CHEST|GROIN|ARMS diff --git a/code/modules/clothing/under/jobs/security.dm b/code/modules/clothing/under/jobs/security.dm index 83b7847855e..f93ca808fbb 100644 --- a/code/modules/clothing/under/jobs/security.dm +++ b/code/modules/clothing/under/jobs/security.dm @@ -230,15 +230,15 @@ /obj/item/clothing/under/rank/prisoner name = "prison jumpsuit" desc = "Standardised Nanotrasen prisoner-wear. Its suit sensors are stuck in the \"Fully On\" position." - icon_state = "jumpsuit" - icon_preview = 'icons/obj/fluff/previews.dmi' - icon_state_preview = "prisonsuit" + icon = 'icons/map_icons/clothing/under/_under.dmi' + icon_state = "/obj/item/clothing/under/rank/prisoner" + post_init_icon_state = "jumpsuit" inhand_icon_state = "jumpsuit" - greyscale_colors = "#ff8300" greyscale_config = /datum/greyscale_config/jumpsuit/prison greyscale_config_worn = /datum/greyscale_config/jumpsuit/prison/worn greyscale_config_inhand_left = /datum/greyscale_config/jumpsuit/prison/inhand_left greyscale_config_inhand_right = /datum/greyscale_config/jumpsuit/prison/inhand_right + greyscale_colors = "#ff8300" has_sensor = LOCKED_SENSORS sensor_mode = SENSOR_COORDS random_sensor = FALSE @@ -251,14 +251,14 @@ /obj/item/clothing/under/rank/prisoner/skirt name = "prison jumpskirt" desc = "Standardised Nanotrasen prisoner-wear. Its suit sensors are stuck in the \"Fully On\" position." - icon_state = "jumpskirt" - icon_preview = 'icons/obj/fluff/previews.dmi' - icon_state_preview = "prisonskirt" - greyscale_colors = "#ff8300" + icon = 'icons/map_icons/clothing/under/_under.dmi' + icon_state = "/obj/item/clothing/under/rank/prisoner/skirt" + post_init_icon_state = "jumpskirt" greyscale_config = /datum/greyscale_config/jumpsuit/prison greyscale_config_worn = /datum/greyscale_config/jumpsuit/prison/worn greyscale_config_inhand_left = /datum/greyscale_config/jumpsuit/prison/inhand_left greyscale_config_inhand_right = /datum/greyscale_config/jumpsuit/prison/inhand_right + greyscale_colors = "#ff8300" body_parts_covered = CHEST|GROIN|ARMS dying_key = DYE_REGISTRY_JUMPSKIRT female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY diff --git a/code/modules/clothing/under/pants.dm b/code/modules/clothing/under/pants.dm index a582f7ccb92..90f05d8f2ea 100644 --- a/code/modules/clothing/under/pants.dm +++ b/code/modules/clothing/under/pants.dm @@ -11,7 +11,9 @@ /obj/item/clothing/under/pants/slacks name = "slacks" desc = "A pair of comfy slacks." - icon_state = "slacks" + icon = 'icons/map_icons/clothing/under/_under.dmi' + icon_state = "/obj/item/clothing/under/pants/slacks" + post_init_icon_state = "slacks" greyscale_config = /datum/greyscale_config/slacks greyscale_config_worn = /datum/greyscale_config/slacks/worn greyscale_colors = "#575757#3E3E3E#75634F" @@ -20,7 +22,9 @@ /obj/item/clothing/under/pants/jeans name = "jeans" desc = "A nondescript pair of tough jeans." - icon_state = "jeans" + icon = 'icons/map_icons/clothing/under/_under.dmi' + icon_state = "/obj/item/clothing/under/pants/jeans" + post_init_icon_state = "jeans" greyscale_config = /datum/greyscale_config/jeans greyscale_config_worn = /datum/greyscale_config/jeans/worn greyscale_colors = "#787878#723E0E#4D7EAC" diff --git a/code/modules/clothing/under/shorts.dm b/code/modules/clothing/under/shorts.dm index 289c59ae3d1..eb06c86fbe4 100644 --- a/code/modules/clothing/under/shorts.dm +++ b/code/modules/clothing/under/shorts.dm @@ -1,7 +1,9 @@ /obj/item/clothing/under/shorts name = "shorts" desc = "A pair of comfy shorts." - icon_state = "shorts" + icon = 'icons/map_icons/clothing/under/_under.dmi' + icon_state = "/obj/item/clothing/under/shorts" + post_init_icon_state = "shorts" greyscale_config = /datum/greyscale_config/shorts greyscale_config_worn = /datum/greyscale_config/shorts/worn greyscale_colors = "#575757#3E3E3E#75634F" @@ -16,7 +18,9 @@ /obj/item/clothing/under/shorts/jeanshorts name = "jean shorts" desc = "A nondescript pair of tough jean shorts." - icon_state = "jeanshorts" + icon = 'icons/map_icons/clothing/under/_under.dmi' + icon_state = "/obj/item/clothing/under/shorts/jeanshorts" + post_init_icon_state = "jeanshorts" greyscale_config = /datum/greyscale_config/jeanshorts greyscale_config_worn = /datum/greyscale_config/jeanshorts/worn greyscale_colors = "#787878#723E0E#4D7EAC" @@ -24,29 +28,35 @@ /obj/item/clothing/under/shorts/red name = "athletic shorts" desc = "95% Polyester, 5% Spandex!" + icon_state = "/obj/item/clothing/under/shorts/red" greyscale_colors = "#E43F3F#A81818#A81818" /obj/item/clothing/under/shorts/green name = "athletic shorts" desc = "95% Polyester, 5% Spandex!" + icon_state = "/obj/item/clothing/under/shorts/green" greyscale_colors = "#68E43F#3CA818#3CA818" /obj/item/clothing/under/shorts/blue name = "athletic shorts" desc = "95% Polyester, 5% Spandex!" + icon_state = "/obj/item/clothing/under/shorts/blue" greyscale_colors = "#3F68E4#183CA8#183CA8" /obj/item/clothing/under/shorts/black name = "athletic shorts" desc = "95% Polyester, 5% Spandex!" + icon_state = "/obj/item/clothing/under/shorts/black" greyscale_colors = "#606060#353535#353535" /obj/item/clothing/under/shorts/grey name = "athletic shorts" desc = "95% Polyester, 5% Spandex!" + icon_state = "/obj/item/clothing/under/shorts/grey" greyscale_colors = "#EFEFEF#B2B2B2#B2B2B2" /obj/item/clothing/under/shorts/purple name = "athletic shorts" desc = "95% Polyester, 5% Spandex!" + icon_state = "/obj/item/clothing/under/shorts/purple" greyscale_colors = "#B847FF#8F36C6#8F36C6" diff --git a/code/modules/clothing/under/skirt_dress.dm b/code/modules/clothing/under/skirt_dress.dm index 0ea09301dba..68503be3255 100644 --- a/code/modules/clothing/under/skirt_dress.dm +++ b/code/modules/clothing/under/skirt_dress.dm @@ -14,9 +14,11 @@ /obj/item/clothing/under/dress/striped name = "striped dress" desc = "Fashion in space." - icon_state = "stripeddress" inhand_icon_state = null female_sprite_flags = FEMALE_UNIFORM_FULL + icon = 'icons/map_icons/clothing/under/dress.dmi' + icon_state = "/obj/item/clothing/under/dress/striped" + post_init_icon_state = "stripeddress" greyscale_config = /datum/greyscale_config/striped_dress greyscale_config_worn = /datum/greyscale_config/striped_dress/worn flags_1 = IS_PLAYER_COLORABLE_1 @@ -25,8 +27,10 @@ /obj/item/clothing/under/dress/sailor name = "sailor dress" desc = "Formal wear for a leading lady." - icon_state = "sailor_dress" alternate_worn_layer = UNDER_SUIT_LAYER + icon = 'icons/map_icons/clothing/under/dress.dmi' + icon_state = "/obj/item/clothing/under/dress/sailor" + post_init_icon_state = "sailor_dress" greyscale_config = /datum/greyscale_config/sailor_dress greyscale_config_worn = /datum/greyscale_config/sailor_dress/worn greyscale_colors = "#0000ff#cc0000#eaeaea" @@ -49,9 +53,11 @@ /obj/item/clothing/under/dress/eveninggown name = "evening gown" desc = "Fancy dress for space bar singers." - icon_state = "evening_gown" alternate_worn_layer = UNDER_SUIT_LAYER inhand_icon_state = null + icon = 'icons/map_icons/clothing/under/dress.dmi' + icon_state = "/obj/item/clothing/under/dress/eveninggown" + post_init_icon_state = "evening_gown" greyscale_config = /datum/greyscale_config/evening_dress greyscale_config_worn = /datum/greyscale_config/evening_dress/worn flags_1 = IS_PLAYER_COLORABLE_1 @@ -64,7 +70,9 @@ /obj/item/clothing/under/dress/skirt name = "cardigan skirt" desc = "A nice skirt with a cute cardigan, very fancy!" - icon_state = "cardiganskirt" + icon = 'icons/map_icons/clothing/under/dress.dmi' + icon_state = "/obj/item/clothing/under/dress/skirt" + post_init_icon_state = "cardiganskirt" greyscale_config = /datum/greyscale_config/cardiganskirt greyscale_config_worn = /datum/greyscale_config/cardiganskirt/worn greyscale_colors = "#bf504d#545454" @@ -74,7 +82,8 @@ /obj/item/clothing/under/dress/skirt/plaid name = "plaid skirt" desc = "A preppy plaid skirt with a white blouse." - icon_state = "plaidskirt" + icon_state = "/obj/item/clothing/under/dress/skirt/plaid" + post_init_icon_state = "plaidskirt" can_adjust = TRUE alt_covers_chest = TRUE custom_price = PAYCHECK_CREW @@ -86,9 +95,11 @@ /obj/item/clothing/under/dress/skirt/turtleskirt name = "turtleneck skirt" desc = "A casual turtleneck skirt." - icon_state = "turtleskirt" custom_price = PAYCHECK_CREW greyscale_colors = "#cc0000#5f5f5f" + icon = 'icons/map_icons/clothing/under/dress.dmi' + icon_state = "/obj/item/clothing/under/dress/skirt/turtleskirt" + post_init_icon_state = "turtleskirt" greyscale_config = /datum/greyscale_config/turtleskirt greyscale_config_worn = /datum/greyscale_config/turtleskirt/worn flags_1 = IS_PLAYER_COLORABLE_1 @@ -96,10 +107,12 @@ /obj/item/clothing/under/dress/tango name = "tango dress" desc = "Filled with Latin fire." - icon_state = "tango" alternate_worn_layer = UNDER_SUIT_LAYER custom_price = PAYCHECK_CREW greyscale_colors = "#ff0000#1c1c1c" + icon = 'icons/map_icons/clothing/under/dress.dmi' + icon_state = "/obj/item/clothing/under/dress/tango" + post_init_icon_state = "tango" greyscale_config = /datum/greyscale_config/tango greyscale_config_worn = /datum/greyscale_config/tango/worn flags_1 = IS_PLAYER_COLORABLE_1 @@ -107,9 +120,11 @@ /obj/item/clothing/under/dress/sundress name = "sundress" desc = "Makes you want to frolic in a field of daisies." - icon_state = "sundress" custom_price = PAYCHECK_CREW greyscale_colors = "#FFE60F#9194A5#1F243C" + icon = 'icons/map_icons/clothing/under/dress.dmi' + icon_state = "/obj/item/clothing/under/dress/sundress" + post_init_icon_state = "sundress" greyscale_config = /datum/greyscale_config/sundress greyscale_config_worn = /datum/greyscale_config/sundress/worn flags_1 = IS_PLAYER_COLORABLE_1 diff --git a/code/modules/clothing/under/trek.dm b/code/modules/clothing/under/trek.dm index de72342f941..501a6505dc8 100644 --- a/code/modules/clothing/under/trek.dm +++ b/code/modules/clothing/under/trek.dm @@ -11,8 +11,10 @@ /obj/item/clothing/under/trek/command name = "command uniform" desc = "An outdated uniform worn by command officers." - icon_state = "trek_tos_com" //Shirt has gold wrist-bands inhand_icon_state = "y_suit" + icon = 'icons/map_icons/clothing/under/_under.dmi' + icon_state = "/obj/item/clothing/under/trek/command" + post_init_icon_state = "trek_tos_com" greyscale_config = /datum/greyscale_config/trek greyscale_config_worn = /datum/greyscale_config/trek/worn greyscale_colors = "#fab342" @@ -20,7 +22,9 @@ /obj/item/clothing/under/trek/engsec name = "engsec uniform" desc = "An outdated uniform worn by engineering/security officers." - icon_state = "trek_tos_sec" //Tucked-in shirt + icon = 'icons/map_icons/clothing/under/_under.dmi' + icon_state = "/obj/item/clothing/under/trek/engsec" + post_init_icon_state = "trek_tos_sec" inhand_icon_state = "r_suit" greyscale_config = /datum/greyscale_config/trek greyscale_config_worn = /datum/greyscale_config/trek/worn @@ -29,7 +33,9 @@ /obj/item/clothing/under/trek/medsci name = "medsci uniform" desc = "An outdated worn by medical/science officers." - icon_state = "trek_tos" + icon = 'icons/map_icons/clothing/under/_under.dmi' + icon_state = "/obj/item/clothing/under/trek/medsci" + post_init_icon_state = "trek_tos" inhand_icon_state = "b_suit" greyscale_config = /datum/greyscale_config/trek greyscale_config_worn = /datum/greyscale_config/trek/worn @@ -39,40 +45,49 @@ * The Next Generation */ /obj/item/clothing/under/trek/command/next - icon_state = "trek_next" //Technically TNG had Command wearing red, but bc gold is closer to command roles for SS13 we're taking some liberties + icon_state = "/obj/item/clothing/under/trek/command/next" + post_init_icon_state = "trek_next" //Technically TNG had Command wearing red, but bc gold is closer to command roles for SS13 we're taking some liberties /obj/item/clothing/under/trek/engsec/next - icon_state = "trek_next" + icon_state = "/obj/item/clothing/under/trek/engsec/next" + post_init_icon_state = "trek_next" /obj/item/clothing/under/trek/medsci/next - icon_state = "trek_next" + icon_state = "/obj/item/clothing/under/trek/medsci/next" + post_init_icon_state = "trek_next" /* * Voyager */ /obj/item/clothing/under/trek/command/voy - icon_state = "trek_voy" //Same point applies as TNG + icon_state = "/obj/item/clothing/under/trek/command/voy" + post_init_icon_state = "trek_voy" //Same point applies as TNG /obj/item/clothing/under/trek/engsec/voy - icon_state = "trek_voy" + icon_state = "/obj/item/clothing/under/trek/engsec/voy" + post_init_icon_state = "trek_voy" /obj/item/clothing/under/trek/medsci/voy - icon_state = "trek_voy" + icon_state = "/obj/item/clothing/under/trek/medsci/voy" + post_init_icon_state = "trek_voy" /* * Enterprise */ /obj/item/clothing/under/trek/command/ent - icon_state = "trek_ent" + icon_state = "/obj/item/clothing/under/trek/command/ent" + post_init_icon_state = "trek_ent" //Greyscale sprite note, the base of it can't be greyscaled lest I make a whole new .json, but the color bands are greyscale at least. inhand_icon_state = "bl_suit" /obj/item/clothing/under/trek/engsec/ent - icon_state = "trek_ent" + icon_state = "/obj/item/clothing/under/trek/engsec/ent" + post_init_icon_state = "trek_ent" inhand_icon_state = "bl_suit" /obj/item/clothing/under/trek/medsci/ent - icon_state = "trek_ent" + icon_state = "/obj/item/clothing/under/trek/medsci/ent" + post_init_icon_state = "trek_ent" inhand_icon_state = "bl_suit" //Q diff --git a/code/modules/hydroponics/grown/flowers.dm b/code/modules/hydroponics/grown/flowers.dm index 7d142c0a5a8..40a84d9c8ff 100644 --- a/code/modules/hydroponics/grown/flowers.dm +++ b/code/modules/hydroponics/grown/flowers.dm @@ -124,9 +124,6 @@ desc = "A beautiful light pink flower." icon_state = "fraxinella" distill_reagent = /datum/reagent/ash - greyscale_config = null - greyscale_config_worn = null - greyscale_colors = null // Harebell /obj/item/seeds/harebell diff --git a/code/modules/hydroponics/grown/rainbow_bunch.dm b/code/modules/hydroponics/grown/rainbow_bunch.dm index c3d21347bf9..655184c874f 100644 --- a/code/modules/hydroponics/grown/rainbow_bunch.dm +++ b/code/modules/hydroponics/grown/rainbow_bunch.dm @@ -23,7 +23,6 @@ seed = /obj/item/seeds/rainbow_bunch name = "rainbow flower" desc = "A beautiful flower capable of being used for most dyeing processes." - icon_state = "map_flower" slot_flags = ITEM_SLOT_HEAD alternate_worn_layer = ABOVE_BODY_FRONT_HEAD_LAYER force = 0 @@ -34,6 +33,9 @@ attack_verb_continuous = list("pompfs") attack_verb_simple = list("pompf") greyscale_colors = COLOR_BLACK //only here for unit testing. overriden in initialize() + icon = 'icons/map_icons/items/_item.dmi' + icon_state = "/obj/item/food/grown/rainbow_flower" + post_init_icon_state = "map_flower" greyscale_config = /datum/greyscale_config/flower_simple greyscale_config_worn = /datum/greyscale_config/flower_simple_worn diff --git a/code/modules/jobs/job_types/chaplain/chaplain_nullrod.dm b/code/modules/jobs/job_types/chaplain/chaplain_nullrod.dm index 2b5aa6b306b..100477494b8 100644 --- a/code/modules/jobs/job_types/chaplain/chaplain_nullrod.dm +++ b/code/modules/jobs/job_types/chaplain/chaplain_nullrod.dm @@ -578,8 +578,9 @@ /obj/item/nullrod/carp name = "carp-sie plushie" desc = "An adorable stuffed toy that resembles the god of all carp. The teeth look pretty sharp. Activate it to receive the blessing of Carp-Sie." - icon = 'icons/obj/toys/plushes.dmi' - icon_state = "map_plushie_carp" + icon = 'icons/map_icons/items/_item.dmi' + icon_state = "/obj/item/nullrod/carp" + post_init_icon_state = "map_plushie_carp" greyscale_config = /datum/greyscale_config/plush_carp greyscale_colors = "#cc99ff#000000" inhand_icon_state = "carp_plushie" diff --git a/code/modules/jobs/job_types/mime.dm b/code/modules/jobs/job_types/mime.dm index e96e1db81ca..50c48509dec 100644 --- a/code/modules/jobs/job_types/mime.dm +++ b/code/modules/jobs/job_types/mime.dm @@ -56,7 +56,7 @@ belt = /obj/item/modular_computer/pda/mime ears = /obj/item/radio/headset/headset_srv gloves = /obj/item/clothing/gloves/color/white - head = /obj/item/clothing/head/frenchberet + head = /obj/item/clothing/head/beret/frenchberet mask = /obj/item/clothing/mask/gas/mime shoes = /obj/item/clothing/shoes/laceup diff --git a/code/modules/loadout/categories/pocket.dm b/code/modules/loadout/categories/pocket.dm index 8b6b65ed0a6..8e195d38671 100644 --- a/code/modules/loadout/categories/pocket.dm +++ b/code/modules/loadout/categories/pocket.dm @@ -55,14 +55,10 @@ /datum/loadout_item/pocket_items/plush/carp name = "Plush (Carp)" - ui_icon = 'icons/obj/fluff/previews.dmi' - ui_icon_state = "plushie_carp" item_path = /obj/item/toy/plush/carpplushie /datum/loadout_item/pocket_items/plush/lizard_greyscale name = "Plush (Lizard, Colorable)" - ui_icon = 'icons/obj/fluff/previews.dmi' - ui_icon_state = "plushie_lizard" item_path = /obj/item/toy/plush/lizard_plushie/greyscale /datum/loadout_item/pocket_items/plush/lizard_random @@ -98,8 +94,6 @@ /datum/loadout_item/pocket_items/plush/snake name = "Plush (Snake)" - ui_icon = 'icons/obj/fluff/previews.dmi' - ui_icon_state = "plushie_snake" item_path = /obj/item/toy/plush/snakeplushie /datum/loadout_item/pocket_items/plush/horse diff --git a/code/modules/mapfluff/ruins/spaceruin_code/caravanambush.dm b/code/modules/mapfluff/ruins/spaceruin_code/caravanambush.dm index c531ae75e0d..cb99c2c8710 100644 --- a/code/modules/mapfluff/ruins/spaceruin_code/caravanambush.dm +++ b/code/modules/mapfluff/ruins/spaceruin_code/caravanambush.dm @@ -8,6 +8,7 @@ toolspeed = 0.3 /obj/item/screwdriver/caravan + icon = 'icons/obj/tools.dmi' icon_state = "screwdriver_caravan" desc = "A prototype of a new screwdriver design, allegedly the red color scheme makes it go faster." name = "experimental screwdriver" @@ -15,6 +16,7 @@ random_color = FALSE /obj/item/wirecutters/caravan + icon = 'icons/obj/tools.dmi' icon_state = "cutters_caravan" desc = "A prototype of a new wirecutter design, allegedly the red color scheme makes it go faster." name = "experimental wirecutters" diff --git a/code/modules/mining/lavaland/mining_loot/megafauna/bubblegum.dm b/code/modules/mining/lavaland/mining_loot/megafauna/bubblegum.dm index 28ef2ec0a62..ada46f3d1cd 100644 --- a/code/modules/mining/lavaland/mining_loot/megafauna/bubblegum.dm +++ b/code/modules/mining/lavaland/mining_loot/megafauna/bubblegum.dm @@ -27,7 +27,9 @@ /obj/item/clothing/suit/hooded/hostile_environment name = "H.E.C.K. suit" desc = "Hostile Environment Cross-Kinetic Suit: A suit designed to withstand the wide variety of hazards from Lavaland. It wasn't enough for its last owner." - icon_state = "hostile_env" + icon = 'icons/map_icons/clothing/suit/_suit.dmi' + icon_state = "/obj/item/clothing/suit/hooded/hostile_environment" + post_init_icon_state = "hostile_env" hoodtype = /obj/item/clothing/head/hooded/hostile_environment armor_type = /datum/armor/hooded_hostile_environment cold_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS @@ -73,9 +75,10 @@ /obj/item/clothing/head/hooded/hostile_environment name = "H.E.C.K. helmet" desc = "Hostile Environment Cross-Kinetic Helmet: A helmet designed to withstand the wide variety of hazards from Lavaland. It wasn't enough for its last owner." - icon = 'icons/obj/clothing/head/helmet.dmi' + icon = 'icons/map_icons/clothing/head/_head.dmi' + icon_state = "/obj/item/clothing/head/hooded/hostile_environment" + post_init_icon_state = "hostile_env" worn_icon = 'icons/mob/clothing/head/helmet.dmi' - icon_state = "hostile_env" w_class = WEIGHT_CLASS_NORMAL armor_type = /datum/armor/hooded_hostile_environment cold_protection = HEAD diff --git a/code/modules/mob/living/basic/farm_animals/pony.dm b/code/modules/mob/living/basic/farm_animals/pony.dm index d1b5142b62c..a9a7fc8fb5a 100644 --- a/code/modules/mob/living/basic/farm_animals/pony.dm +++ b/code/modules/mob/living/basic/farm_animals/pony.dm @@ -67,7 +67,7 @@ ai_controller.replace_planning_subtrees(list( /datum/ai_planning_subtree/find_nearest_thing_which_attacked_me_to_flee, /datum/ai_planning_subtree/flee_target, - /datum/ai_planning_subtree/random_speech/pony/tamed + /datum/ai_planning_subtree/random_speech/pony/tamed, )) if(unique_tamer) @@ -131,7 +131,7 @@ /datum/ai_planning_subtree/flee_target, /datum/ai_planning_subtree/target_retaliate, /datum/ai_planning_subtree/basic_melee_attack_subtree, - /datum/ai_planning_subtree/random_speech/pony + /datum/ai_planning_subtree/random_speech/pony, ) // A stronger horse is required for our strongest cowboys. diff --git a/code/modules/mob/living/basic/lavaland/gutlunchers/gutlunchers.dm b/code/modules/mob/living/basic/lavaland/gutlunchers/gutlunchers.dm index da1122b259b..87df7e847b5 100644 --- a/code/modules/mob/living/basic/lavaland/gutlunchers/gutlunchers.dm +++ b/code/modules/mob/living/basic/lavaland/gutlunchers/gutlunchers.dm @@ -8,9 +8,9 @@ desc = "A scavenger that eats raw ores, often found alongside ash walkers. Produces a thick, nutritious milk." icon = 'icons/mob/simple/lavaland/lavaland_monsters.dmi' icon_state = "gutlunch" - combat_mode = FALSE icon_living = "gutlunch" icon_dead = "gutlunch" + combat_mode = FALSE mob_biotypes = MOB_ORGANIC|MOB_BUG|MOB_MINING basic_mob_flags = DEL_ON_DEATH speak_emote = list("warbles", "quavers") diff --git a/code/modules/mob/living/basic/space_fauna/carp/carp.dm b/code/modules/mob/living/basic/space_fauna/carp/carp.dm index 7d50a58ae48..1bfb0071fa3 100644 --- a/code/modules/mob/living/basic/space_fauna/carp/carp.dm +++ b/code/modules/mob/living/basic/space_fauna/carp/carp.dm @@ -61,7 +61,7 @@ /datum/pet_command/idle, /datum/pet_command/free, /datum/pet_command/follow, - /datum/pet_command/attack + /datum/pet_command/attack, ) /// Carp want to eat raw meat var/static/list/desired_food = list(/obj/item/food/meat/slab, /obj/item/food/meat/rawcutlet) @@ -179,7 +179,7 @@ * Holographic carp from the holodeck */ /mob/living/basic/carp/holographic - icon_state = "holocarp" + icon_state = "base_friend" icon_living = "holocarp" gold_core_spawnable = NO_SPAWN greyscale_config = NONE @@ -221,10 +221,10 @@ faction = list(FACTION_NEUTRAL) maxHealth = 200 health = 200 + icon_state = "magicarp" icon_dead = "magicarp_dead" icon_gib = "magicarp_gib" icon_living = "magicarp" - icon_state = "magicarp" greyscale_config = NONE /// Boosted chance for Cayenne to be silver @@ -295,7 +295,6 @@ /mob/living/basic/carp/passive name = "false carp" desc = "A close relative of the space carp which is entirely toothless and feeds by stealing its cousin's leftovers." - icon_state = "base_friend" icon_living = "base_friend" icon_dead = "base_friend_dead" diff --git a/code/modules/mob/living/basic/space_fauna/statue/mannequin.dm b/code/modules/mob/living/basic/space_fauna/statue/mannequin.dm index 2084b413014..0842a516cf0 100644 --- a/code/modules/mob/living/basic/space_fauna/statue/mannequin.dm +++ b/code/modules/mob/living/basic/space_fauna/statue/mannequin.dm @@ -25,9 +25,9 @@ /mob/living/basic/statue/mannequin/update_overlays() . = ..() if(held_item) - . += mutable_appearance(initial(held_item.righthand_file), initial(held_item.inhand_icon_state)) + . += mutable_appearance(held_item::righthand_file, held_item::inhand_icon_state) if(hat) - . += mutable_appearance(initial(hat.worn_icon), initial(hat.worn_icon_state) || initial(hat.icon_state)) + . += mutable_appearance(hat::worn_icon, hat::worn_icon_state || hat::post_init_icon_state || hat::icon_state) /datum/ai_controller/basic_controller/stares_at_people blackboard = list( diff --git a/code/modules/mob_spawn/ghost_roles/space_roles.dm b/code/modules/mob_spawn/ghost_roles/space_roles.dm index 1c41188eab9..0799de4c2b0 100644 --- a/code/modules/mob_spawn/ghost_roles/space_roles.dm +++ b/code/modules/mob_spawn/ghost_roles/space_roles.dm @@ -229,4 +229,4 @@ name = "Director" id_trim = /datum/id_trim/away/director uniform = /obj/item/clothing/under/suit/red - head = /obj/item/clothing/head/frenchberet + head = /obj/item/clothing/head/beret/frenchberet diff --git a/code/modules/mod/mod_core.dm b/code/modules/mod/mod_core.dm index 657b6838394..004373669f2 100644 --- a/code/modules/mod/mod_core.dm +++ b/code/modules/mod/mod_core.dm @@ -513,8 +513,9 @@ /obj/item/mod/core/soul name = "MOD soul shard core" desc = "A soul shard haphazardly jammed into a hand-crafted MOD core frame." - icon_state = "mod-core-soul" - icon_state_preview = "mod-core-soul-preview" + icon = 'icons/map_icons/items/_item.dmi' + icon_state = "/obj/item/mod/core/soul" + post_init_icon_state = "mod-core-soul" var/base_desc var/theme = THEME_CULT greyscale_config = /datum/greyscale_config/mod_core_soul @@ -673,4 +674,5 @@ timeout = 10 SECONDS /obj/item/mod/core/soul/wizard + flags_1 = parent_type::flags_1 | NO_NEW_GAGS_PREVIEW_1 theme = THEME_WIZARD diff --git a/code/modules/modular_computers/computers/item/computer.dm b/code/modules/modular_computers/computers/item/computer.dm index a5409705546..a12935ca2b8 100644 --- a/code/modules/modular_computers/computers/item/computer.dm +++ b/code/modules/modular_computers/computers/item/computer.dm @@ -121,6 +121,9 @@ */ var/datum/component/shell/shell + /// This is where our overlays reside + var/overlays_icon = 'icons/obj/machines/computer.dmi' + /datum/armor/item_modular_computer bullet = 20 laser = 20 @@ -443,15 +446,11 @@ /obj/item/modular_computer/update_overlays() . = ..() - var/init_icon = initial(icon) - if(!init_icon) - return - if(enabled) - . += active_program ? mutable_appearance(init_icon, active_program.program_open_overlay) : mutable_appearance(init_icon, icon_state_menu) + . += active_program ? mutable_appearance(overlays_icon, active_program.program_open_overlay) : mutable_appearance(overlays_icon, icon_state_menu) if(atom_integrity <= integrity_failure * max_integrity) - . += mutable_appearance(init_icon, "bsod") - . += mutable_appearance(init_icon, "broken") + . += mutable_appearance(overlays_icon, "bsod") + . += mutable_appearance(overlays_icon, "broken") /obj/item/modular_computer/Exited(atom/movable/gone, direction) if(internal_cell == gone) diff --git a/code/modules/modular_computers/computers/item/pda.dm b/code/modules/modular_computers/computers/item/pda.dm index e93bff5e373..5766cf3b842 100644 --- a/code/modules/modular_computers/computers/item/pda.dm +++ b/code/modules/modular_computers/computers/item/pda.dm @@ -1,7 +1,8 @@ /obj/item/modular_computer/pda name = "pda" - icon = 'icons/obj/devices/modular_pda.dmi' - icon_state = "pda" + icon = 'icons/map_icons/items/pda.dmi' + icon_state = "/obj/item/modular_computer/pda" + post_init_icon_state = "pda" worn_icon_state = "nothing" base_icon_state = "tablet" greyscale_config = /datum/greyscale_config/tablet @@ -11,6 +12,8 @@ righthand_file = 'icons/mob/inhands/items/devices_righthand.dmi' inhand_icon_state = "electronic" + overlays_icon = 'icons/obj/devices/modular_pda.dmi' + steel_sheet_cost = 2 custom_materials = list(/datum/material/iron=SMALL_MATERIAL_AMOUNT * 3, /datum/material/glass=SMALL_MATERIAL_AMOUNT, /datum/material/plastic=SMALL_MATERIAL_AMOUNT) interaction_flags_atom = parent_type::interaction_flags_atom | INTERACT_ATOM_ALLOW_USER_LOCATION | INTERACT_ATOM_IGNORE_MOBILITY @@ -74,11 +77,11 @@ /obj/item/modular_computer/pda/update_overlays() . = ..() if(computer_id_slot) - . += mutable_appearance(initial(icon), "id_overlay") + . += mutable_appearance(overlays_icon, "id_overlay") if(light_on) - . += mutable_appearance(initial(icon), "light_overlay") + . += mutable_appearance(overlays_icon, "light_overlay") if(inserted_pai) - . += mutable_appearance(initial(icon), "pai_inserted") + . += mutable_appearance(overlays_icon, "pai_inserted") /obj/item/modular_computer/pda/interact(mob/user) . = ..() @@ -261,6 +264,7 @@ */ /obj/item/modular_computer/pda/nukeops name = "nuclear pda" + icon_state = "/obj/item/modular_computer/pda/nukeops" device_theme = PDA_THEME_SYNDICATE comp_light_luminosity = 6.3 //matching a flashlight light_color = COLOR_RED @@ -280,8 +284,9 @@ /obj/item/modular_computer/pda/syndicate_contract_uplink name = "contractor tablet" - device_theme = PDA_THEME_SYNDICATE + icon_state = "/obj/item/modular_computer/pda/syndicate_contract_uplink" icon_state_menu = "contractor-assign" + device_theme = PDA_THEME_SYNDICATE comp_light_luminosity = 6.3 has_pda_programs = FALSE greyscale_config = /datum/greyscale_config/tablet/stripe_double @@ -299,7 +304,9 @@ */ /obj/item/modular_computer/pda/silicon name = "modular interface" + icon = 'icons/obj/devices/modular_pda.dmi' icon_state = "tablet-silicon" + post_init_icon_state = null base_icon_state = "tablet-silicon" greyscale_config = null greyscale_colors = null diff --git a/code/modules/modular_computers/computers/item/role_tablet_presets.dm b/code/modules/modular_computers/computers/item/role_tablet_presets.dm index 7c021c72cf4..17eebde4cd4 100644 --- a/code/modules/modular_computers/computers/item/role_tablet_presets.dm +++ b/code/modules/modular_computers/computers/item/role_tablet_presets.dm @@ -3,6 +3,7 @@ */ /obj/item/modular_computer/pda/heads + icon_state = "/obj/item/modular_computer/pda/heads" greyscale_config = /datum/greyscale_config/tablet/head greyscale_colors = "#67A364#a92323" max_capacity = parent_type::max_capacity * 2 @@ -21,6 +22,7 @@ /obj/item/modular_computer/pda/heads/captain name = "captain PDA" + icon_state = "/obj/item/modular_computer/pda/heads/captain" greyscale_config = /datum/greyscale_config/tablet/captain greyscale_colors = "#2C7CB2#FF0000#FFFFFF#FFD55B" inserted_item = /obj/item/pen/fountain/captain @@ -37,6 +39,7 @@ /obj/item/modular_computer/pda/heads/hop name = "head of personnel PDA" + icon_state = "/obj/item/modular_computer/pda/heads/hop" greyscale_config = /datum/greyscale_config/tablet/stripe_thick/head greyscale_colors = "#374f7e#a52f29#a52f29" starting_programs = list( @@ -46,6 +49,7 @@ /obj/item/modular_computer/pda/heads/hos name = "head of security PDA" + icon_state = "/obj/item/modular_computer/pda/heads/hos" greyscale_config = /datum/greyscale_config/tablet/head greyscale_colors = "#EA3232#0000CC" inserted_item = /obj/item/pen/red/security @@ -55,6 +59,7 @@ /obj/item/modular_computer/pda/heads/ce name = "chief engineer PDA" + icon_state = "/obj/item/modular_computer/pda/heads/ce" greyscale_config = /datum/greyscale_config/tablet/stripe_thick/head greyscale_colors = "#D99A2E#69DBF3#FAFAFA" starting_programs = list( @@ -65,6 +70,7 @@ /obj/item/modular_computer/pda/heads/cmo name = "chief medical officer PDA" + icon_state = "/obj/item/modular_computer/pda/heads/cmo" greyscale_config = /datum/greyscale_config/tablet/stripe_thick/head greyscale_colors = "#FAFAFA#000099#3F96CC" starting_programs = list( @@ -74,6 +80,7 @@ /obj/item/modular_computer/pda/heads/rd name = "research director PDA" + icon_state = "/obj/item/modular_computer/pda/heads/rd" greyscale_config = /datum/greyscale_config/tablet/stripe_thick/head greyscale_colors = "#FAFAFA#000099#B347BC" inserted_item = /obj/item/pen/fountain @@ -85,6 +92,7 @@ /obj/item/modular_computer/pda/heads/quartermaster name = "quartermaster PDA" + icon_state = "/obj/item/modular_computer/pda/heads/quartermaster" greyscale_config = /datum/greyscale_config/tablet/stripe_thick/head greyscale_colors = "#c4b787#18191e#8b4c31" inserted_item = /obj/item/pen/survival @@ -118,6 +126,7 @@ /obj/item/modular_computer/pda/warden name = "warden PDA" + icon_state = "/obj/item/modular_computer/pda/warden" greyscale_config = /datum/greyscale_config/tablet/stripe_double greyscale_colors = "#EA3232#0000CC#363636" inserted_item = /obj/item/pen/red/security @@ -132,6 +141,7 @@ /obj/item/modular_computer/pda/engineering name = "engineering PDA" + icon_state = "/obj/item/modular_computer/pda/engineering" greyscale_config = /datum/greyscale_config/tablet/stripe_thick greyscale_colors = "#D99A2E#69DBF3#E3DF3D" starting_programs = list( @@ -142,6 +152,7 @@ /obj/item/modular_computer/pda/atmos name = "atmospherics PDA" + icon_state = "/obj/item/modular_computer/pda/atmos" greyscale_config = /datum/greyscale_config/tablet/stripe_thick greyscale_colors = "#EEDC43#00E5DA#727272" starting_programs = list( @@ -156,6 +167,7 @@ /obj/item/modular_computer/pda/science name = "scientist PDA" + icon_state = "/obj/item/modular_computer/pda/science" greyscale_config = /datum/greyscale_config/tablet/stripe_thick greyscale_colors = "#FAFAFA#000099#B347BC" starting_programs = list( @@ -167,6 +179,7 @@ /obj/item/modular_computer/pda/roboticist name = "roboticist PDA" + icon_state = "/obj/item/modular_computer/pda/roboticist" greyscale_config = /datum/greyscale_config/tablet/stripe_double greyscale_colors = "#484848#0099CC#D94927" starting_programs = list( @@ -177,6 +190,7 @@ /obj/item/modular_computer/pda/geneticist name = "geneticist PDA" + icon_state = "/obj/item/modular_computer/pda/geneticist" greyscale_config = /datum/greyscale_config/tablet/stripe_double greyscale_colors = "#FAFAFA#000099#0097CA" starting_programs = list( @@ -189,6 +203,7 @@ /obj/item/modular_computer/pda/medical name = "medical PDA" + icon_state = "/obj/item/modular_computer/pda/medical" greyscale_config = /datum/greyscale_config/tablet/stripe_thick greyscale_colors = "#FAFAFA#000099#3F96CC" starting_programs = list( @@ -198,6 +213,7 @@ /obj/item/modular_computer/pda/medical/paramedic name = "paramedic PDA" + icon_state = "/obj/item/modular_computer/pda/medical/paramedic" greyscale_config = /datum/greyscale_config/tablet/stripe_double greyscale_colors = "#28334D#000099#3F96CC" starting_programs = list( @@ -207,11 +223,13 @@ /obj/item/modular_computer/pda/chemist name = "chemist PDA" + icon_state = "/obj/item/modular_computer/pda/chemist" greyscale_config = /datum/greyscale_config/tablet/stripe_thick greyscale_colors = "#FAFAFA#355FAC#EA6400" /obj/item/modular_computer/pda/coroner name = "coroner PDA" + icon_state = "/obj/item/modular_computer/pda/coroner" greyscale_config = /datum/greyscale_config/tablet/stripe_thick greyscale_colors = "#FAFAFA#000099#1f2026" starting_programs = list( @@ -224,6 +242,7 @@ /obj/item/modular_computer/pda/cargo name = "cargo technician PDA" + icon_state = "/obj/item/modular_computer/pda/cargo" greyscale_colors = "#8b4c31#2c2e32" stored_paper = 20 starting_programs = list( @@ -235,6 +254,7 @@ /obj/item/modular_computer/pda/shaftminer name = "shaft miner PDA" + icon_state = "/obj/item/modular_computer/pda/shaftminer" greyscale_config = /datum/greyscale_config/tablet/stripe_thick greyscale_colors = "#927444#8b4c31#4c202d" starting_programs = list( @@ -243,6 +263,7 @@ /obj/item/modular_computer/pda/bitrunner name = "bit runner PDA" + icon_state = "/obj/item/modular_computer/pda/bitrunner" greyscale_colors = "#D6B328#6BC906" starting_programs = list( /datum/computer_file/program/arcade, @@ -255,6 +276,7 @@ /obj/item/modular_computer/pda/janitor name = "janitor PDA" + icon_state = "/obj/item/modular_computer/pda/janitor" greyscale_colors = "#933ea8#235AB2" starting_programs = list( /datum/computer_file/program/skill_tracker, @@ -263,6 +285,7 @@ /obj/item/modular_computer/pda/chaplain name = "chaplain PDA" + icon_state = "/obj/item/modular_computer/pda/chaplain" greyscale_config = /datum/greyscale_config/tablet/chaplain greyscale_colors = "#333333#D11818" @@ -281,22 +304,27 @@ /obj/item/modular_computer/pda/botanist name = "botanist PDA" + icon_state = "/obj/item/modular_computer/pda/botanist" greyscale_config = /datum/greyscale_config/tablet/stripe_thick greyscale_colors = "#50E193#E26F41#71A7CA" /obj/item/modular_computer/pda/cook name = "cook PDA" + icon_state = "/obj/item/modular_computer/pda/botanist" greyscale_colors = "#FAFAFA#A92323" /obj/item/modular_computer/pda/bar name = "bartender PDA" + icon_state = "/obj/item/modular_computer/pda/bar" greyscale_colors = "#333333#C7C7C7" inserted_item = /obj/item/pen/fountain /obj/item/modular_computer/pda/clown name = "clown PDA" - inserted_disk = /obj/item/computer_disk/virus/clown + icon = 'icons/obj/devices/modular_pda.dmi' icon_state = "pda-clown" + post_init_icon_state = null + inserted_disk = /obj/item/computer_disk/virus/clown greyscale_config = null greyscale_colors = null inserted_item = /obj/item/toy/crayon/rainbow @@ -339,6 +367,7 @@ /obj/item/modular_computer/pda/mime name = "mime PDA" inserted_disk = /obj/item/computer_disk/virus/mime + icon_state = "/obj/item/modular_computer/pda/mime" greyscale_config = /datum/greyscale_config/tablet/mime greyscale_colors = "#FAFAFA#EA3232" inserted_item = /obj/item/toy/crayon/mime @@ -355,9 +384,11 @@ /obj/item/modular_computer/pda/curator name = "curator PDA" desc = "A small experimental microcomputer." + icon = 'icons/obj/devices/modular_pda.dmi' + icon_state = "pda-library" + post_init_icon_state = null greyscale_config = null greyscale_colors = null - icon_state = "pda-library" inserted_item = /obj/item/pen/fountain long_ranged = TRUE starting_programs = list( @@ -372,6 +403,7 @@ /obj/item/modular_computer/pda/psychologist name = "psychologist PDA" + icon_state = "/obj/item/modular_computer/pda/psychologist" greyscale_config = /datum/greyscale_config/tablet/stripe_thick greyscale_colors = "#333333#000099#3F96CC" starting_programs = list( @@ -384,6 +416,7 @@ */ /obj/item/modular_computer/pda/assistant name = "assistant PDA" + flags_1 = parent_type::flags_1 | NO_NEW_GAGS_PREVIEW_1 starting_programs = list( /datum/computer_file/program/bounty_board, ) @@ -407,7 +440,9 @@ /obj/item/modular_computer/pda/human_ai name = "modular interface" + icon = 'icons/obj/devices/modular_pda.dmi' icon_state = "pda-silicon-human" + post_init_icon_state = null base_icon_state = "pda-silicon-human" greyscale_config = null greyscale_colors = null @@ -451,7 +486,9 @@ /obj/item/modular_computer/pda/clear name = "clear PDA" + icon = 'icons/obj/devices/modular_pda.dmi' icon_state = "pda-clear" + post_init_icon_state = null greyscale_config = null greyscale_colors = null long_ranged = TRUE diff --git a/code/modules/religion/sparring/ceremonial_gear.dm b/code/modules/religion/sparring/ceremonial_gear.dm index 727c8dd8edb..612b97f8042 100644 --- a/code/modules/religion/sparring/ceremonial_gear.dm +++ b/code/modules/religion/sparring/ceremonial_gear.dm @@ -2,9 +2,10 @@ /obj/item/ceremonial_blade name = "ceremonial blade" desc = "A blade created to spar with. It seems weak, but if you spar with it...?" - icon_state = "default" + icon = 'icons/map_icons/items/_item.dmi' + icon_state = "/obj/item/ceremonial_blade" + post_init_icon_state = "default" inhand_icon_state = "default" - icon = 'icons/obj/weapons/ritual_weapon.dmi' icon_angle = -45 //does the exact thing we want so heck why not diff --git a/code/modules/transport/tram/tram_structures.dm b/code/modules/transport/tram/tram_structures.dm index a9ba78d9898..a73e478cc2e 100644 --- a/code/modules/transport/tram/tram_structures.dm +++ b/code/modules/transport/tram/tram_structures.dm @@ -608,22 +608,27 @@ /obj/structure/chair/sofa/bench/tram name = "bench" desc = "Perfectly designed to be comfortable to sit on, and hellish to sleep on." - icon_state = "bench_middle" + icon_state = "/obj/structure/chair/sofa/bench/tram" + post_init_icon_state = "bench_middle" greyscale_config = /datum/greyscale_config/bench_middle greyscale_colors = COLOR_TRAM_BLUE /obj/structure/chair/sofa/bench/tram/left - icon_state = "bench_left" + icon_state = "/obj/structure/chair/sofa/bench/tram/left" + post_init_icon_state = "bench_left" greyscale_config = /datum/greyscale_config/bench_left /obj/structure/chair/sofa/bench/tram/right - icon_state = "bench_right" + icon_state = "/obj/structure/chair/sofa/bench/tram/right" + post_init_icon_state = "bench_right" greyscale_config = /datum/greyscale_config/bench_right /obj/structure/chair/sofa/bench/tram/corner - icon_state = "bench_corner" + icon_state = "/obj/structure/chair/sofa/bench/tram/corner" + post_init_icon_state = "bench_corner" greyscale_config = /datum/greyscale_config/bench_corner /obj/structure/chair/sofa/bench/tram/solo - icon_state = "bench_solo" + icon_state = "/obj/structure/chair/sofa/bench/tram/solo" + post_init_icon_state = "bench_solo" greyscale_config = /datum/greyscale_config/bench_solo diff --git a/code/modules/unit_tests/drink_icons.dm b/code/modules/unit_tests/drink_icons.dm index efa1e39f9d1..87d8c304955 100644 --- a/code/modules/unit_tests/drink_icons.dm +++ b/code/modules/unit_tests/drink_icons.dm @@ -63,8 +63,15 @@ /datum/unit_test/drink_icons/Run() for(var/obj/item/reagent_containers/cup/glass/glass_subtypes as anything in subtypesof(/obj/item/reagent_containers/cup)) - var/glass_icon = initial(glass_subtypes.icon) - var/glass_icon_state = initial(glass_subtypes.icon_state) + var/glass_icon + var/glass_icon_state + if(glass_subtypes::greyscale_config) + var/datum/greyscale_config/greyscale_config = glass_subtypes::greyscale_config + glass_icon = greyscale_config::icon_file + glass_icon_state = glass_subtypes::post_init_icon_state + else + glass_icon = glass_subtypes::icon + glass_icon_state = glass_subtypes::icon_state if(!glass_icon_state) continue if(!glass_icon) diff --git a/code/modules/unit_tests/greyscale_config.dm b/code/modules/unit_tests/greyscale_config.dm index 9c0484eff7d..edd6df20c5a 100644 --- a/code/modules/unit_tests/greyscale_config.dm +++ b/code/modules/unit_tests/greyscale_config.dm @@ -5,7 +5,7 @@ for(var/obj/item/item_path as anything in subtypesof(/obj/item)) if(isnull(initial(item_path.greyscale_colors))) continue //All configs depend on greyscale_colors being defined. - var/held_icon_state = initial(item_path.inhand_icon_state) || initial(item_path.icon_state) + var/held_icon_state = initial(item_path.inhand_icon_state) || initial(item_path.post_init_icon_state) var/datum/greyscale_config/lefthand = SSgreyscale.configurations["[initial(item_path.greyscale_config_inhand_left)]"] if(lefthand && !lefthand.icon_states[held_icon_state]) @@ -16,7 +16,7 @@ TEST_FAIL("[righthand.DebugName()] is missing a sprite for the held righthand for [item_path]. Expected icon state: '[held_icon_state]'") var/datum/greyscale_config/worn = SSgreyscale.configurations["[initial(item_path.greyscale_config_worn)]"] - var/worn_icon_state = initial(item_path.worn_icon_state) || initial(item_path.icon_state) + var/worn_icon_state = initial(item_path.worn_icon_state) || initial(item_path.post_init_icon_state) if(worn && !worn.icon_states[worn_icon_state]) TEST_FAIL("[worn.DebugName()] is missing a sprite for the worn overlay for [item_path]. Expected icon state: '[worn_icon_state]'") diff --git a/code/modules/unit_tests/screenshots/screenshot_antag_icons_syndicateinfiltrator.png b/code/modules/unit_tests/screenshots/screenshot_antag_icons_syndicateinfiltrator.png index 4c9212509d2eaeec56a85da1433acafc4775a123..e35ea7f091cfe4ad0207bc32fb7ef053e5c3ad37 100644 GIT binary patch delta 602 zcmV-g0;T=d2HggbBmt0-B~KELkdy!a|BUPZQBPX{1qO6?fRTnL5Y*S-<-Hw0KR>gx zvygCCZ;`ive+x-OK~!jg?U-p(f>0QREd;XC%01hRXt9$1|G(>;x#tErQcN*6IPdf2 za#_yf@Ol^RbPU5V48v%U1IHoIp$Up8H3)((KoiJif}IGMqtq}ADL@m-)r6z{0>1pN zBZ?yG&_p`Z#BeY{Edi>^z6Aw=u4{wAI^^L@-#%5C zppHP5_4U>`kU;+%1@6Z<@6oiBfB6|+k#2&Tf;*r&UiGH3AaEng@2<<$Re1Gc*+Rh* z+&kD!lH>uTY5E8>4)o827ih`EHQw_CN?-nse@}0MS^^zX0>LwIjx?W+80Xgmw-!us z<^}NctX8YaFMs<5lDqxqO!PG63oGMfUO4jQ&OR+uO1a$-o=OMyb zYdpvv2SAo(oNf^O0jNX|Co^1Qsw9=+Ciqd{C!x;Qm@AyodcZgcxVxsng?GQJ>Rt&p oBv?AsD@@m#i?o;1?)u*apKibKYo;AINB{r;07*qoM6N<$f;>(jTmS$7 delta 595 zcmV-Z0<8Vr2G$0UBms(%B~KE|&C&n=|BUPZba8?J1qP+5wvmP>3gx{WKR-Vl7fev#m;6kFThvLIGnr&j6*MQ@cPiP9nSRmd~SkY3j7b5qR4+Y z02#M{0`#cFk-rB|Y=<+wvdA45AV*t?J0Srk=X+2R=(;u-tV0pb^!-zX3F-(`Szm9B z0}1rMQQ&@z^Bzr0#mmp|igXjy6g&XU@v1kKC4n1Res{fHU4>UKmK_uI7ePgM~w69fm;hEIP(Vhc~+}c z<;&lFfh6w$;Y&C^03P%;(B=V&e!6yBjX*V^WW8Rq6#LUnP)DF}9wMBz#)Ir}0BklJ zPB#eVt4<|)IJvUTM14 hT%^66cGv$d_yo48?fwqQ`49jA002ovPDHLkV1gBy5K;gD diff --git a/code/modules/unit_tests/screenshots/screenshot_antag_icons_syndicatesleeperagent.png b/code/modules/unit_tests/screenshots/screenshot_antag_icons_syndicatesleeperagent.png index 4c9212509d2eaeec56a85da1433acafc4775a123..e35ea7f091cfe4ad0207bc32fb7ef053e5c3ad37 100644 GIT binary patch delta 602 zcmV-g0;T=d2HggbBmt0-B~KELkdy!a|BUPZQBPX{1qO6?fRTnL5Y*S-<-Hw0KR>gx zvygCCZ;`ive+x-OK~!jg?U-p(f>0QREd;XC%01hRXt9$1|G(>;x#tErQcN*6IPdf2 za#_yf@Ol^RbPU5V48v%U1IHoIp$Up8H3)((KoiJif}IGMqtq}ADL@m-)r6z{0>1pN zBZ?yG&_p`Z#BeY{Edi>^z6Aw=u4{wAI^^L@-#%5C zppHP5_4U>`kU;+%1@6Z<@6oiBfB6|+k#2&Tf;*r&UiGH3AaEng@2<<$Re1Gc*+Rh* z+&kD!lH>uTY5E8>4)o827ih`EHQw_CN?-nse@}0MS^^zX0>LwIjx?W+80Xgmw-!us z<^}NctX8YaFMs<5lDqxqO!PG63oGMfUO4jQ&OR+uO1a$-o=OMyb zYdpvv2SAo(oNf^O0jNX|Co^1Qsw9=+Ciqd{C!x;Qm@AyodcZgcxVxsng?GQJ>Rt&p oBv?AsD@@m#i?o;1?)u*apKibKYo;AINB{r;07*qoM6N<$f;>(jTmS$7 delta 595 zcmV-Z0<8Vr2G$0UBms(%B~KE|&C&n=|BUPZba8?J1qP+5wvmP>3gx{WKR-Vl7fev#m;6kFThvLIGnr&j6*MQ@cPiP9nSRmd~SkY3j7b5qR4+Y z02#M{0`#cFk-rB|Y=<+wvdA45AV*t?J0Srk=X+2R=(;u-tV0pb^!-zX3F-(`Szm9B z0}1rMQQ&@z^Bzr0#mmp|igXjy6g&XU@v1kKC4n1Res{fHU4>UKmK_uI7ePgM~w69fm;hEIP(Vhc~+}c z<;&lFfh6w$;Y&C^03P%;(B=V&e!6yBjX*V^WW8Rq6#LUnP)DF}9wMBz#)Ir}0BklJ zPB#eVt4<|)IJvUTM14 hT%^66cGv$d_yo48?fwqQ`49jA002ovPDHLkV1gBy5K;gD diff --git a/code/modules/unit_tests/screenshots/screenshot_antag_icons_traitor.png b/code/modules/unit_tests/screenshots/screenshot_antag_icons_traitor.png index 4c9212509d2eaeec56a85da1433acafc4775a123..e35ea7f091cfe4ad0207bc32fb7ef053e5c3ad37 100644 GIT binary patch delta 602 zcmV-g0;T=d2HggbBmt0-B~KELkdy!a|BUPZQBPX{1qO6?fRTnL5Y*S-<-Hw0KR>gx zvygCCZ;`ive+x-OK~!jg?U-p(f>0QREd;XC%01hRXt9$1|G(>;x#tErQcN*6IPdf2 za#_yf@Ol^RbPU5V48v%U1IHoIp$Up8H3)((KoiJif}IGMqtq}ADL@m-)r6z{0>1pN zBZ?yG&_p`Z#BeY{Edi>^z6Aw=u4{wAI^^L@-#%5C zppHP5_4U>`kU;+%1@6Z<@6oiBfB6|+k#2&Tf;*r&UiGH3AaEng@2<<$Re1Gc*+Rh* z+&kD!lH>uTY5E8>4)o827ih`EHQw_CN?-nse@}0MS^^zX0>LwIjx?W+80Xgmw-!us z<^}NctX8YaFMs<5lDqxqO!PG63oGMfUO4jQ&OR+uO1a$-o=OMyb zYdpvv2SAo(oNf^O0jNX|Co^1Qsw9=+Ciqd{C!x;Qm@AyodcZgcxVxsng?GQJ>Rt&p oBv?AsD@@m#i?o;1?)u*apKibKYo;AINB{r;07*qoM6N<$f;>(jTmS$7 delta 595 zcmV-Z0<8Vr2G$0UBms(%B~KE|&C&n=|BUPZba8?J1qP+5wvmP>3gx{WKR-Vl7fev#m;6kFThvLIGnr&j6*MQ@cPiP9nSRmd~SkY3j7b5qR4+Y z02#M{0`#cFk-rB|Y=<+wvdA45AV*t?J0Srk=X+2R=(;u-tV0pb^!-zX3F-(`Szm9B z0}1rMQQ&@z^Bzr0#mmp|igXjy6g&XU@v1kKC4n1Res{fHU4>UKmK_uI7ePgM~w69fm;hEIP(Vhc~+}c z<;&lFfh6w$;Y&C^03P%;(B=V&e!6yBjX*V^WW8Rq6#LUnP)DF}9wMBz#)Ir}0BklJ zPB#eVt4<|)IJvUTM14 hT%^66cGv$d_yo48?fwqQ`49jA002ovPDHLkV1gBy5K;gD diff --git a/code/modules/unit_tests/worn_icons.dm b/code/modules/unit_tests/worn_icons.dm index 5b308d9a4ff..38acff5efd9 100644 --- a/code/modules/unit_tests/worn_icons.dm +++ b/code/modules/unit_tests/worn_icons.dm @@ -48,6 +48,8 @@ match_message += (match_message ? " & '[file_place]'" : " - Matching sprite found in: '[file_place]'") if(worn_icon) //easiest to check since we override everything. this automatically includes downstream support. + if(isnull(worn_icon_state)) // no worn sprite for this item. + continue if(!(icon_state in icon_states(worn_icon, 1))) TEST_FAIL("[item_path] using invalid [worn_icon_state ? "worn_icon_state" : "icon_state"], \"[icon_state]\" in worn_icon override file, '[worn_icon]'[match_message]") continue diff --git a/code/modules/vehicles/pimpin_ride.dm b/code/modules/vehicles/pimpin_ride.dm index 16ff261b1c3..88582410dcd 100644 --- a/code/modules/vehicles/pimpin_ride.dm +++ b/code/modules/vehicles/pimpin_ride.dm @@ -192,6 +192,9 @@ /obj/item/janicart_upgrade/buffer name = "floor buffer upgrade" desc = "An upgrade for mobile janicarts which adds a floor buffer functionality." + icon = 'icons/map_icons/items/_item.dmi' + icon_state = "/obj/item/janicart_upgrade/buffer" + post_init_icon_state = "janicart_upgrade" greyscale_colors = "#ffffff#6aa3ff#a2a2a2#d1d15f" /obj/item/janicart_upgrade/buffer/install(obj/vehicle/ridden/janicart/installee) @@ -203,6 +206,9 @@ /obj/item/janicart_upgrade/vacuum name = "vacuum upgrade" desc = "An upgrade for mobile janicarts which adds a vacuum functionality." + icon = 'icons/map_icons/items/_item.dmi' + icon_state = "/obj/item/janicart_upgrade/vacuum" + post_init_icon_state = "janicart_upgrade" greyscale_colors = "#ffffff#ffea6a#a2a2a2#d1d15f" /obj/item/janicart_upgrade/vacuum/install(obj/vehicle/ridden/janicart/installee) diff --git a/config/config.txt b/config/config.txt index eb4f5bc8dec..80460f18dce 100644 --- a/config/config.txt +++ b/config/config.txt @@ -645,3 +645,7 @@ TGUI_MAX_CHUNK_COUNT 32 ## Uncomment and replace with the URL where users can verify their byond accounts #FORUM_LINK_URI + +## While this is uncommented, server initialization will include some asset generation usually useful for development. +## It increases initialization time significantly so you'll want to disable this in live environments. +GENERATE_ASSETS_IN_INIT diff --git a/icons/map_icons/clothing/_clothing.dmi b/icons/map_icons/clothing/_clothing.dmi new file mode 100644 index 0000000000000000000000000000000000000000..6c781a70ad1911fce8b0f3984aaca861a1038738 GIT binary patch literal 870 zcmV-s1DX7ZP)9u}?;3$YmzvmO?09~hG% z7?U3uv>_P62?v)21)UQRp&S;ZAsfXP5y&4H$t4`6Bpu2p9=XmN)&Kwi0d!JMQvg8b z*k%9#0CIX%Sad{Xb7OL8aCB*JZU6vyoKseCa&`CgQ*iP10006xNkl?7D%Cspu{n+pxID)}$wKrBq8&$eCMr0x^M3$)4w)4x4pL!dZ@(WnWY(lP zNQadJ04_Dm6Tqd0IRSWdJZ@qdEh2e;O&hEZUO<9jYbN% zY&1Nec*g8#2%z~pW=CTJoK8IQ!1>H$1SnOOrOmiV_Iohwx>BtPcBTx|xYHqBSl44a66QoQGr05t&016uQ*&jK_6=rKS75CD__Bme4e@wewIeN=w@|=sJ8olKzea>9_robM6Vg`VM;z}9w}IKw5MZf4K;VAokq2h`17o_bvl$P`{t1R%H-=X9 z2Mj!H2B-G@Z{H7_0N`nVz&{(_^Id=*0ONs${vZM*00BU>qCYUhAqqeMkO%xB=K2E! z_yj2&;uM(e58^dG1o(k#Y-vS*fIyt*f!Y3G`%iiMV`|%O^p?BiIWP1F474-A4S=Wp w!BEl=a3zhBl9ufchN22aSiz$D>JPH<2U%87S-(@z>Hq)$07*qoM6N<$g7ai&ssI20 literal 0 HcmV?d00001 diff --git a/icons/map_icons/clothing/accessory.dmi b/icons/map_icons/clothing/accessory.dmi new file mode 100644 index 0000000000000000000000000000000000000000..1f048116d9ad5382fb7336e330435a4f3c7573f7 GIT binary patch literal 1016 zcmV_O!Bpu2p9>BoBz`(#B9wRC&F*G(f zJwHDiA(CV=-0C=2jj=>IsFc3t~ z?N>B-HB^wR7XvXIM3%&76S z=D~t<$QqI+dS{xhem{NzLTohKPb<)v0007yNkl%zc_PGPN(mrH%~QU}C`QD-T>m2)w=Vz(s_>`#TR@1Ol!)8X@4S zqY(nGIvO>gIAit35J2;Ltlk&`7=Dk{8>0g(7Ch3xa>*kNtX4c)fKu!A+E(01^$%~@ zd8OpzY`0rmaVOP3yjFIOdB8p2mlHI z5`X}p03ZPf0IGjbx5)w!08|6@CJR6SPz}_ZEC2yOU4VC({3dq+-eK~a+y!`t$!~HE zG{5OafDiahC&6#J6W|km(=7N+4+4C_Z#r!QO^yRijss0b;NeHb;}5&ZWZgQe*THd} zW!u(Sy$z1*>2%*ZtM}n?&3A7Xm;sPQfH?ru2mlw3yD|}QS0)8lCIartq~OX#z+IUk zfQFyJOCJnBgO@%Senx<2JmVSt?fJhC^!5K^0m=S<1b}n8|9=>u9|6R!M2G_N03dOx z-w*Wk|Dyu2{vUy}P3K#IzWyJ9@=WJ)2ym_c$NE*p<3^#c|8L@4Rh2wLfq4HP0_6~Z zbGrWrpp+GqcL1^ezlowOtD-7z-GjdVABCcjXE+e+|L=|)j*2^h{=;r4aJ~N@1-RD# mj{scn|HlH7{r@xm`}hk4U`tY#%E4Ix0000S@--^L7j6F+|m{3IaLPqv7L$;R~$-Xb8QW+_xS2D^P zSrQ^7*|NNLS;qKHzn=H^$M4?fo^$Sb?sLz1KIh(Z?oG0>Hs#?G;sOAG$K1@wmdR<% zQNqc>q}R7I0ssK4Z)0g^O#5$(0RxZ0z&i+sJpj1!a>oEb5-)c)8(Sd^>ILUdh4Yt+ z2xP>`cwH26mGre1ajw!5A!p=#exn{J6V{1C?(FQmDpS;i;rv7e(nSR-B!rWo+^K^6 z>0$!Uq1-is{Iy~Nt#G~$aYW}yk?Z1!3<*SrIO3%Q;(?Ut2N|(sWrQs6X*Y4cKh7{I z9sqdDtcooPivfVY+pWW;T~bP^0RUhl-h&dzjyRy1~cdKxGN3Ybu&8*>wN4-XGh4e#F4iQ4&!01lZQ z0QvyH1MmTW4*&pH7p#6@#=#EsH$Ht)mOVM(ywT!t*yBW_HN7t~Nso`EP$+|gpBEP9 z|L5%=L0(=Shr>xpNr{Pxq0#8Pq9-b<8Yw)yFns*P#DuZ2Nf!(z5>?&U^j=3t_Zbw5 z@XNdA6D}zs?GEAM)o~3&0MwJfm;zvCX6Eed?C6VGXYF93F~ zgr@5I`DCJ!lDed%bpOjUuY*jk06+==gePQ8c0JP4!oJ8iD00&UdjTw=fY;4Cp7tn5 z4QV3)(9ySr!v#TFKq&J(Tyb{QlfGdlKl3hewL6VkaQ%-_8~-SsbI!r8M)sy^fKw)5 z=+^vA>=#d_>>go<4>s~3xCi+J2Kxl~ z13*~8v&>#!uqw2z_n-3$5sFr?E=S6qS+j95knW@=&8AtJc`UpfukHN!{ z$W}H=D3iPI^&RoQ4+wAA--^r@MXoySUE+zNrNB&G5?Ae@m z#thp^8q7a=g~|vJk3{t{Dz!|(8uw*dD-;)^9!YH8vYq_U>q#6SCw?F@S`vXuz0mr1 z5A?jN)~#Q=@Zy_G>HC}sPk#nvNG}I9Qt2k&Kr=3QiQ^sK4gkP4Yi?v<7gn&Gv+D#K z7HXfnQL1_g|9R2>mE+=;Z8TEhin+5&dIj>>6NRBbpY**9))3redP4}@e*y6tlo1ielL>KPc)CEU!*PfSIJwpE6>goB=ZK)wH|^84i-dHO~+&) z+OPZ-=jyzPA0KkRItHjysQ>AjK?A!MHdg<1jqPBi^aSPeYCyW?n>@ic&asM|V=Z7( zKZ#Ywepq6LEAMJEM_6L4x4_P-A*RJVaRS?Iy0(^=MJ9X0PWvp{V^E-?%fTw#tD$i9 z9Ja8C{$>UJ&7*VQ>aIIQz1v=fBvs%(VMCT^?nxl$C_wdA3kiazD7}r8Vu1y^U9uFv z@#RGdLt7{GpD}?ZQC5EbkaN2?NhjIMX#b3d^?@U|Ck?ol#*;Y|k&C^gR~d-n#I^64 zV?_SM zOHH(>jzAHs0qr?<)@w~wn@rK=lWA7tHt#eycQSDGa>TJlI<1d2XZSWDaujGuzTW3pJP@hMgng++wcENQs^us>XG;LqK;S-Z4Z^ zu96xc52~*Y@wU{5v1Sd36FZU`^fZYlrA8p;u7M&Xx&hhb;LC{xZee@_YFJ z+rK)k>;ZAMFQcl0QjQ@(FZ_wS8M2_U=DeDuXJ9JJX?K_-TOfyDn{*vl$DVp@;o6SX zDasNEZ(wc-G$qA#cm!i%J9ui!)N=5&S{Rva$B24lYB_LPEg}aJCFg9SsaTHvQ66>> zSHqVzYZ`l1B;4C-*9x3&uLSj(`OT1v0Roe}Lz~?|g1Ag`)ZQ~{CX{W7QZYPnFaNd2 zZ1#)rjd-5@tTBrf^>OQfu`t)p##PY3^5#RU1g274ZQT0nFBer5#XypB5&8uMSuH|R z%q1ztP|9Kx7npwH0g8sT^?jIj-wj}-t0*uhfBn{a?wOfyxhR7Ao6#q3KZ2_vyjqTK z#l+t5>{8p4KgJb@E46u}TY; zf&JgXON{V&kuYEB{+d_F@79Yg zBWq;?*`lt*>JL30sGRKJy0ftle*U=xTcDOx7%2@;U2;V?VW~#Ql_fZB1cPf{?j+GK z*V`daN(M^0*eauF)iH#*Q#?&aK=2f_4IY1N)uV7vEl{otj*?SoA-oMP03mLaP^nV$ zy*&qVIr+;+vyQ=kXhp||v#*EU9wkD;PFFh<=S)d-QTy1KjXCbs#dmRpxk(EZv$MZ; zqd+d_O8SoLlZaI+HmovHdUeHD=JpO4B~4QJ0wE)ktM3g8tM$%-#WrCA9&!5&un{@^ zUOX50(xwLLxa=5G1aU@HLwQ^)YWt8jb}jLu(&dj(#NFC2+r;!9lUP@Ch;T?w%DsEY z*E0k7qt3>-4unFCdR?MPJcIj)gRF@U#Ba>I|T9l9v zE~vzk9L`y*aPF3(W_#7wE!f6Np`3Q{j}#R+%@z)aKJ;W~#poNi#s%#ZL$Z%uZfH4n zm0~M(c+sq9%HbAat?UBr$M&5dxp9fJ584+qm%t3o6a%`1yu6|!^9`X~{Rovk1bOSB zb>h(Sa92Z;$bN0Js_Kap*k2^-Y>!9UoSJhyMoS=8CHS8lcN#O_@c|OqZ(1kIlc+sx&PTneycAzb0PH@<+?YutSU84~|QC z297xW+=@U(Ke&LzMsvtuqX*ee=`Lpm5+g@vy#T3K0L7D}25&8IEt~1qK!mh~w8`vl>84ehAsQi)cUz>r7kn3Rc^y^&`ymL~6wK|M z@GADDCQKdhWBKX*n(ut0@DT5(ku%-EQ_+elD?OGdUi|H;YTC_PM>{s$aj6)W&4~K9 z9Mik~M8g@chRN;gZXC#AExYJtcA41-&4j1lrpY&#M+?7V8DaapnTMj2|BN$>*u+B$uA3Mh_HtTTS*e#ldc=2hlDHf|cU-8piy0G^htR8(j zS}~Tk?6=MzCCmEq?^U*weLes$2<(q{Fj${H^==6^6ZCx`6^pYnI7GX(FZH5W|JuXbR+D337fQZuGm`*x%NKSW=>r?MnCv8IWOG00S^8Y-k(L8VW?bs*H zlP-n_0|x_UO~EjXAR;F>{6kKzAcBH8GTy+^d67PX71O=f!wkYzx11ahUZ-Q4QB^J4;0KhQ zsesAWDIwYJ4SI#a%ef71Cg_xojq2QHdU3>U9CCDHH?E0!m1tAnA{eLnIgety4nH}j zZAa;0=n9AOe!9Qe;^|Ioz;rgJQKVkL2W37YJ=uhD8k!TmedJ#4PHps?C?CGW?Wo(| zcL@><`DEHuGMrq{TD>>BwRjq;&!VwMsI65ap?c@wRFas>zbR`7H#vimo1Dtc&zMfz zi((9d@PPUNc-_2&2J_HZV%y=Ykid2Nk zJ(1VQBZ)?iD{o49jT%E5uQB(pb8hRd`&;X~_jm8T{`*i;A*zMcGo!9*U$G6^WoL$yP~w0U;Q)UjQy-;?jJsA0q zGmDFywb_P!%k8?k_aEM?sHv@MuD_!ieLX25?4v9E*!U-^+8S(=MYuB8K5rp5u zeZm4SMFfTf0{|)i$w052fWD;2(#njsMO0SjpnH=|@^?>(p9S@70r@g&Q zm&|hH1n0Z0#QSs8IID zu!aOux1m=V8)*%DDv@LjTZHD~41nBL1sMqTR7-k#b;LPH1QWh`{H%$ae5W+E?`23gO3JZoOg1CMm z?2nC)*9Ql2K_7zRE+nQ-w<$;?mOcCh?^8Qdya(Rj)lV_mRmA6u6u#;s8mOmeubY+^ z$0}I*3}@;;SY+oXZX8VPy#2`2zGD)})W>7{`nT>vM~-gl3)LFoACMQeQ0AyNS#<$Y zk068d^^|1UcrsD*%%^)+J^C$rHAaF&C1~Y8Aa{}hW`1ij*85rO@N*K!$_C0TXiLU^ zT3TO^cX^#^TO4D;rVE}^G}egk-io(3*T`TXsORPOz=@qEao5JKlXq8!y9J@Z1JK`4 zR%jI46Q3Dka!dX3PEMqG#(ZF7M6prPN@a*SQKz@3hdie;uX|N>44V}Y?&t6Sk&-<> ze=6y`Lg9Af_O)y^@%ENW)BLVK&7&<-;%xiP17kB;88#8P86Ui% z9Gpbq^-P8C-Oj1A7q6-*g5z{M@P=pLq*Pu{%9p#$o7C4aa8Fz}gOnN1(Gn=Au>A?9(7-)2RE*XqmFN3Rk=Eu?mp0~d|&Z;N^on_~AaYco2(f-~dG z^pN9o>=7USYMlF(w?~^z6PTR77nqI56PiFtTrXD+Xj_=7h$;dEJ=!(}Jue5secKy0 zStI8}iLUO6?*_IfLRc(qpklHGGr-!r7aiVcs_p4>dADzS)Y4{WB0#`AnP_XcqK*~~ zxU4kZpb3fLad?{u$(x0mz)715?&nqkc%6%tO7OR~qy%Q=2O2q#J4f#;`nNLv&cc-i zn~28myF!d;xAHbWQ$9bpm>Py%mNAdYgI<;~DO|culO!FmP`q)wM=bN*RaS0~*y*!2 z|63D57P-jP{Wg2=H;V`Q4_rYPq-^MxR%GYpIbiaRrw)x=6CS=0*#6^3cvqyWYGkCl zd8CQL(}qpNv(eMHjg|5 z6U>=zvV*v~x`OOJXnRIQ?eV2@HG~!y7s)-Gi3jBIaW^pgrjT0}Olh*#cijJ(>fE1< zT7og}IsK+v4^j!QkFl3VcOew9O>OL#VCX+O&~8vQ8&%XmyBkw74X=j56&*-cHglwO zi5+&kbL4aku+F~j54-=Hx}W{BpG5!LhvhB&<9^Cvw3GN7-^E7IO-)={Q=xTcGylt> zAwDpS@4LloOQW^L9`R;wIG1eku+wLYbQWDbyu8>kAe?S)%Tu-`Xn1M#YINUz<#noH z(K4@^dq`=6DzpQslvX_(19jwW8~;!w?I4=m6a}K9qR^@n<#;OflsRwHV|G*o$vMow z8l4aQAt7!kS_z=qq(qIFAl#G{V>zdop>gawk4+yzOjwyua$eNf<5?Gted5s($1ir6;t+ka+ZjA_J-eVeh3E!j&_#*!^bQYvCp*7CK7!i=Rwwvl~{$`*x6h%lBc zDZ5gph@uE1S;jW+_+4+`-}Szq>pJ)6e$IXF&vTvo^PE3UjJ1_1np>0`0Dv|(Gqzzf zZRg^Gv7-w#M;id>errqHBecJWgn~y<(1Jvq27ttaiUc5r2bIpjk&ESZ6T&12VeX3y zUhxRYx>t(D2#ASET$T__k`OGA5{uzQC5T{>Bn8WPQBOrM&m{$43-NX0guCR#8=6|B zq@=xY!pTy?$vELEDd9p{i8u0+U%q@H5D0&F{x8eO$OMav<8=J|LDpVBT)|zGl9E!g zv^2puHV)M5#1cB6p;c5=_U_%ABP*LPC#PVRqG*wk3feQl+k+_zhcXn08hAdn@F*)Q z%gM>5%gB%=B;-w~QU^nlK=U>5K$j}79wOCKgD%fP{dZRyt-u>qR8(}thSYfr{pQUZ z+e?8%i9DZ@dEUQ&Pp8w*dWJf9QBqS=+uPflo13evt9xS6<$)QJ5^YSFZDDZ4H7o^nH|i?C(cZPiz1RADxC8x06yglKbu-- zm-NC(8|9#d3KUBI=n1!pDYH}OE~lb`&MNejp%Xk+|JCp6Z0qlPOCKGX_)51hx4`4@ zr2qu_1!$;iB*w-a);sj@;X_kX)3VaitgI{xb8{mjBevs@A3y$Aft{#Yl1Sphx^Q3~ zl$O3n&Vdu0OR9dkPsLSS(U%K|0}i*cp+S8u3KCp-N_W2B87ZUn*>ImM;Jn2RI`q^- zkieV!VjEi*5@2I>5)h|GT-mwRHQO@*#xDLB{XBdEJiPw_AUNmA`*&8YYP-O={|5i? z)gvgedOw5gKAv9^^r2%$g9Uz=qPd@4lo$)V?2Ne50gt6eSLt~!%T?sV;$@$^?}r-w z{`7I?>8JAf?umlzzQX3#qCL7prKmg@4o~71ihbs;#pEyVejq2z5cMA1BdX(6Y?oc% zwb)=&yMF2iC5qa9!^&QclhNRA@F1NyxA12j7l|*H?z!q&i9R!4E){2V&sj&8ZDPjntn-At^}#I@7R1 z6J_Q>pQSz}FFwWd)OX^Q{TR!Astr>q-8Id7Deo$!!n8zeUMao3Hyg<4@9{>qh{l`a z+CH}MstQF(({xyS2{#$O#&2YkE-X**i{)0wnKI>C zn<~hJ$&6e?=ZGu?(i%HgDV&}AEit>)e)x0Yd|i#!K9XC>LO@O0tY?`1hbQwhg|h8A zIbW_G<1E_$M3PT$D|BvIvCwe#-?8R9M`g4HIg2%o<4|wte+4Bdp0oDYv5*N|8$U zZ~m@8=l4K)pMy3P@bm+O(R1*^fb#uMwEBfR<}CTsuve@1GX7XprjrA~Ktqo;8n1tT zl^s9N?ivPW%thExOyT@t5};(EY;23!048S-Ab4YEm54NT)c3g-KbE(;PHF@c=JU(toxt-P*7!)^uPz;3j5F$FvU9 zI8+0`Q+|~*Kn+b%+{vtWT8coMO%(}3(*lAOg?d0%v!zP4U$PXqYI6-X8edm~-WGhj zX(GJLu}kH+(w^ZV@v zCyU;qmJ6p(1r`@uo#&lFsg}%G9nY>-7)p1v9nLN4z6_5JBh(w7*uaqPKuC3*YQrSb zO-{9UKvogA*S(l|dwMC9FcBZm4mY5AF~KLX zc`>y)N%Q;k83!J^jADvYa&Odi*&CuCwD(1_ znOlsT!zZ!8deHRPv2n?x_aAGF#SIayGM#P=5gjwV4LtKtWIDwT5e+h(5{HP%8clp< z5IoS9QLH-WA#m65a>_X>|GDBSLG$})i`gXpbu*8L9Hc>4e>!aB_tOLOkSkkl;;W!K z%roIS7}eM8I7E@i%bvVL8YJu@Vy=9QgqTG>u~!G?m0n_;cx1JA2as(}kdUPjTAIL! z;hGSzN3x(Kv9C_xiu@*uB9TIF-L z;n8F~eiH`yisRy95sB;5pn%Nt|7c?xo~ARGhdnb{Txjz0oohZJsa3|IP68lCpSL0>`1dGYSRnGfDEHPzb^ z(ait!u^=s*=@u-w^S0M)&1?Ihc{-D$(~?vlZcTr2`NKcd%={|1-g^yr%?Pip>fl+S zCr{WONsTT?P0U~5W7}l=$zCafZO;nF?AZP^oy(`Df~2)~+HI$Tq_nMVrdILVl@;&o z$@L;MOgcP2*NppYIgUR_dCt(ry<$KTo`0;oF-#vy?0`{VPFa)Hvj|CAv(Z#7!e>qS z($;|UM))Q6J4x&K09d7?K8TD$uubq;Q{%)-R4j(Uo=VS1dI5Rk=c*BV_>IzAvC9kcTOTKq0mZRNg@--*jpZnIiEY3rTf`p>G%c?; zOMTKu;J55|Za|OHPv2YVMYg{Tx2Jdgi=T68UZIq^P4dgP)4nMcwriGcUX!R_ldvn( ztZtgx%5MP@?MS?8W&G~ST$ZYG{EN^d$XNS!p^8ZFLG2b zLaLWo-(^e_#5ppNSH3HEBuE_O(ZG(h3tfs@gtR~Jm5*Fv$y+W~B&KzbH#%&8;%5;Q zSn-P6bBh)nbUUT7tO+J5G=e$5_RGRMl*0VOj7k2&WbtUyf=G>_-`tBu#;;d|ri+Xt z)SM1neKoqPvR%xHLjRI?{-q7U`Z-g2C?;9n1safJ2pW@-Lm{G&HOI6C-6*h$$ChmD zfmWIjtWo>SnI*SRoclcIHI{dsF^|yd|U)aj41CCUCl0ix|f-Z-aGXNb-7rN zL#v)AGkUv&0{OPjeh&`X|20owUsaX$_Unev-AL91eNM4O|KjxC9KvSoZ#OPhTy9fv z8bfs+?PRcCldv;t{h)|gcz$u?Cg@Ule~RIhr4H)%mnWOamkE=YUIJfw5VUW`xJ0M0>yf*A+6{H+uh% z$0l;G)4z+}L)5j+u@G&158#K=cK>)X+$Fp)cHFhxXOPkGdM4yddTJQ4Ry<*4(-`|_ z+u>ky#{AfH(aXz?)NTb@p(n*h;Lm12s_c&~<~cNcvX+c<@b9_-A+CCtKzV!`Ozrsd zE9}zyzv#@5358T#-UIgkL$3{AnmHBhCu58U|9q|+{y?4+)q5!*Cp@;b(Y31}ag*hw z4x=}!d|om=NW6`Q@=EO-#J2Ar9Gw>LD%6QIY);ON-X-ca3W95)6uBNqt!fEmQ3nEA zob9t~4a7xo#ExW-B%R3dYBOmpaZWK{OBdbu!Hv@$<{Z>9uxPBCyEsZDNUTE;u3l}A zaUO(GPR1-i#1Hk@@>;J9ps`)Iy${{o}>7edD%5#h5u^=_6AydRx~ILt0A zXhN%Ad~Q~zVUBl-zme6@h|Mo@)vmDC&S%=yEbFm$P ztZ-?h{zd6uGGiAi)(5qhi)6xLsBvL2zF(U17~$>kEj~zy@se($TYCtraUG4FP$ewz z6(;}1;OJw>(a=5&?%FAn_L2xE_sHgYt>(T4BtdxX`(bmn;MHa|0bJdx&$nUSb=+%+ z2_oReL{!i%9D0WP^{x4MJ;{OPqPXiAaQvR0NZ2*jVZ9KHG_N+}7xTGk>+YL4M#pro zA^ZWS$5vikT7^8oNCT(=@|i-N+sZ10dIbB@ZHnu-X^h0uI9?uKCun4p zL%L8exHD5dVZw%q(QZ>ho%f}mxhCrvsRm|a^vk9#YmzO$z>S(&A0FW_y7O*ID5a|mveiZ^L&3kpU25?u(#nyNFo3L;I}BLbw z=TC!iactOH?im08TRR+fv7-O;6PM9cRo6=b12tfv3(kX4)HX0Y;0ge~0=!88kRiaE z2Za_3BP}d(L1IEz#e~YFMS1xI1qG3(_K4=}5v`Py5)wjXAbGD!2<6C#)+2czNC-WW z5$zE}^~s9AP?SDwZyF{mo+~GwD=Yq3PP}UGo|nopFgV{qTT@AmFr2774~$>U{JfD% zN|3DLB^6b9g9t}S1voi!~UAS}B^5l`zSxs1VG#cd?b(L|6hxXwnv3}5 zh7by9S8-R|jhj)Z5j5I9&DNvHS>jx!O!5=*p}JhxuC^+xkL~u=!DijDhm!gD4M_$< zj`8l;q_k+gSUc@|NaP7P!Zy)rpS7C!sR99G-x%vMOJ)Cug=T@SDkXlV?)pmS92`g| zJZkD1UcY&Nj%ZhW%0JWBgG4%-dhuLzbnum|oY?b8elpz75>O+Yj1E?+yStlYVUex^ zi{8uQ#P+!e zN*Hi}Dk!--F)^WIct}Z6^`mEbJO?aLq?5ffK$!hIkmC!-xwu7I21J}Vck*oH$up+` zAhzhM&BC0N9DcIi3|22sbu)ohX0Un<)3(`>BZAe3UyfU&4#dh zvzTFn@B7!HVjK#$>z`t55Z

tJ4qExkIk)DXczv+->iPclR>jLRY_px{C6LOZNvH zf6Qm<{e9KYif6;fyG};wt4EDR)bREDqm8^Tt{Hqd@o9b^U&d0<&*d{u9BS2KZi2+6 z%0PEoTj3A5PX~NspQRCJs$ehV&p^7boPx6V zukBIeuHo-TI}83geU(d}snm)UPE~pAd{zA~=W8lYogD_+Q6}{>9?RF47yCi72}WTw`SqYpbs-hT0((U;T3~qh5>{+XaSibHVrS zefHw(eTrrC>;0gOHzQ+;m^b$x*-_edK+rxqlHQy?zD6^{0HM``jiz^mZGrKO-9&!R zs$ie&ag25n!3jd0fq`v1j`*H@dLY+@+AGtYW(13-^vd?8eaMKWDwohXaZW=buoKJh zL3m_KbK4Q#)(S*}Hs<#wd;M`|<8=FP&ij1l#^B^|6Ghhdz(UpL26avl^BEx*R%BYxYbG527MkgRIC6Fg^znx(9v-GM0C0Q zk_l2_^Ft%st#w2iVnzQRX9e6REsHmZ$1{9FK36|XiI}w&a=QoHD+#u>HJl})=#o&( z3*F87gkaDBNq9G+j(Ik~ z2h%O<5Nren|peWd9i-ax^^ktq`!?dV9PQBU(dvd0(QPrT_RU6%!@RQ&s$}>8vRT;_ThB3 zn5OramOSr(*5b8xauaxH%bhIbb_W$}iE^t1#k!!}>QHXwuvjlVFX-d8L>y}8Pz|E5 z;df%D{02JU`#h;FVL_2Np^+ zRm4U;s`Z*aQ(0LR7T##b3b?+qa_^^LA8iTHbY!mOsZKDZ)RV&mxN6t=lNbI7I?v2H zP;_rDHuhw%eV@Pxq1215{0jT@Ec%WT0Whl6#LKdSH4f{KdOF} z^v^!hMvR&F*p1rH2EPnK^;1H@qC2-WZf75%clorxN56$JSz}|k5k}RX^9{2zGY_~m z7hfi77#R4R$_|Ms>9^1fzRrht+ z0nCIk-1Pc9go4*p&SL(KQ{c{s83l~@J-ew z%1s~C(DHZ4{q+RCj_fU>w@kO@%ua6U;%uoJ$P?85BQ(`#hJonoe?eke?XRb>K6)NO z4Gq%xC%`8QpF-c}8AEkU=b##XCEi2wBX857(kyoPeh?2kvDl8@$;Ky0ED6QFul=OL z^$6{-5e44YVNZW02%g|RVEmN-T+9P*C(0KCh#T1g1MWcXz$}(RF3QD*t%0M-&6MIv z4ceDdT~Lc~<8NaK!+!YnB9b%JXyC?tUekNl*dc+y|roplat-0?#F5%Wt($qDjmQ;_cS_cHAZV@ctSX=g4p`N<$EVm=P6 zwcJ|B;EveE_8)fp7mG(#{rM+w@sM-**x0Xg+I@~A05is7?Z^J1W-hjOUwd1MI-A@_-L_I^ zoAs3?_o%Z;eL3BV>TJip2NhLygt1mAG@!0i>O%h{XMqyLKk?D$7unGfdTME;^QGXW zOf}9`1dk=SIXU%6K8<+1S@HI5$OsMi!=3}|4|^)$UG|0$Xf8aiQ!5yHh$36+EB+W< zMb9E?@p*#-F0`Ps!C$s^tq9Mqy^*$SkJ{|o_q{DBVCP|y&a~z`IFNXrbl_LscL=4U z{7w>6jYFZ&aZg*;4I>bvVPB2>&c0$`=~$kta3WU0!GW^Ehlim>oARc;n!X!9%fb#0?rOy!m7)Es<^Srxb(xB=^eM4(Y*n=r%#@Fb zFZ(6Pa_gm+5UD~ zJuTpUnVFnKk{a!9<;5wnsuu8FJG%p9&u1oWG^>Gkyzc+s`C+D6r$c|P!WDY?|4KX} z`hpbt=c>NShs7|5_@Qyy%>8Dw`8Nl-7p=vU*5&y+w@|5!WDdZji*n34q9$fyb%uwF zNY+~VuO!1*|K+RHB!?X5$>Ax>nVeWZrlgR4l$WR0!FfI0RJyL~S1M6*D!m|Srr};# zNXST&-OlEw?|rNB{TotJ9v(y!%R{)aYaKQ7?#l*t;`Pic%Q_-m>5nl&O@x6Nb z%~;an=dxl8jZVxOPR5-oym0UDt=O{>bD6wia$;`Dmj~+X@=VC=#QM+6H`MZsSGZq= z`8X|hqlR9U-DDga-a1?K_Enkif{*iJcX;Y83wk2x+%NO$lEu(K*T7?9MSra>d^O%5 zv$8_3$rILMHr9%Bnsi~GH7L2%qsPZ{uJyy%Sg&N!!tzFIYePU_)I9&|bx-!~=5_1d zFEYhu(ZUiKvTK-iQ|-2YHXoAxd9xt5e(l{oe+siyPX>Q)4pIBr{-d#uv%$=tesi09b@HJ>gPWJm*!ARjuiFB zVf0c!l-FC{l^7a*wcqrZAt+IJ4Y$XgO65Ekj&!>INHF3|CzGRNHmn3A(B?K9%Yw#@ zVv7lhy{q514eEVTB_b`9kpPuanYJ*DO|u`N5{mzI4Jd?Uj_abEW~3Pz&1n~62fJf9 zDr0*)G0`TGeWOI}erm&dt4HBD_%`S$*H@j>@R3{GF8oFPOv?+&CkgKfk1mroyeoIR z<*#4sY%TVaN%s1h#bP&WbUAbOc9TB3Pv_Dt4~)1aHS3DstWa>+85=6`vfphn`o!W1 zrXvu?{(xOz<#1L22B+s{1!0f^aF`*u(ONqKQG_T#Ov8qydInU_-d;Uye3ek)IG_h^ z0dE=^OOW3rTp_b3UoB-$NNtajL{@aHXmEZORq0Xw7}OUS@}=z$7S(M9Tu6H2p~2Y9 zTh@#up0;$>R-)Up?d`wD6rf8ud0){J2gmaSs2C&h9`V}FW6_|eS%xP#$*oaIYORS3 ztWSr|+owajg0Il0Agr~YhYVFB_=bl^bCT4byYYvDlY6D496D7vzB`sPi+u8$;BGU0 zO2sQUNZkoL)s4~$2`6kTG6_e#61+^|MLHqjpD0IYWe>_8wC%B>-|68`t|vZ`B*EGj zmUlK-F=v%Kd1;^{auuSZMvx)ee)0OARRNG*aIoO$^m89gDo%=6hD+GV6Mfg>=k5JwiiicBA;TDDs%;h5~zsEp^pLFEcQ*Zz(g>KW*dldb8?+ zMmcm(2=_BvPOPhibooF`7oIyC?@(kNosUmWUYOA8I8!hWggmVv#Jy3H2A>766ONcR z7$OajCR~X@AJqI{g@*9K6AOdiA;g8a%uvG|NnR*VsE2k5g>_xgRDdS^V?S73U(&uy z*}uCHhPyforx>p+MQ}IW{Larkv7H)EQ;F#PeJUb?xrH)xODTIJ`<#*AjJTHQ?;js; z&KX;JpPQF?L>$&{{dkl0`7?gv4dUYsR@o47eYO@@-6@t`WEs}zwiq93OI)nJfPXb8 zm!B`)JJD-loOU|JoHJGo*ikcHl-8_IwNw;ZG@Exga0Y@i-mm4*|I_V(BE%z8$Mo65 z!xl;b=Pnd++ITCcu-R)N#)8wv_{;pCqS(}$t@TdMY!yNI{&JzP+khkh!re?F<J~qGvVc?!Lh$xX^4u>m8F*B13$o8K(Lmsq)z57dth@SYg<-?!+i^f`@WgM5aUnQ z6sqIp2a>F5mek*?hAHKp_=E_5agob@m*4w(isVa3N-08*b9R`6`j^XTndq449LP}c z9iE;#S(OkN92pvU8S+!2F*fq~>M@q%XB&{7cnRO=bk51DJ&++^J#>A~iQjgP zqssmosfX1Tban4&A==1xBYx=~bggu7M?R9nWQ6<2T_)eX%RRKE5zf0OHSn3&F0{JB zZ&}52p=C)B#ve?zRsR=Lcrhj28s2@_tygb#yV8}Ooe$4IDr3sKi8Evo qgho0-XTuC*b$?58h$JWM2+m!y{3SaNGva&_0c@@8E$hvFll}usV*c9z literal 0 HcmV?d00001 diff --git a/icons/map_icons/clothing/shoes.dmi b/icons/map_icons/clothing/shoes.dmi new file mode 100644 index 0000000000000000000000000000000000000000..b73fd466d3f1d4c68fa1f4f4dc8a168d9a423e7b GIT binary patch literal 3939 zcmb7HcTm$!^Z!zm-WBOVK#C{FK|#9oo~TIg zASD#xF$AOpq(dO&7oYjf``7!=JF|Ctv!A=U+4=14?#16VHeh2GUL~H-%}RDXoxD>n06U`_~8t@LVH`6`+YXO=Ka^} zZlJKRpyRG3?~S&|!Hv1OY&!|;P`~kpIyPu%^L@)aIVWiICmB{!S;?RfoC!f-KAr|$ z*)wK+d=nY_F&SVo>^Xz9XIYYsXrFD4@W@-k?RzA`&F$NihWETRm#4kB*V{nR5^TX* zGxZTCmbzTYpVRCBwW)0PjJ{&9|9NLQWI9^c_n0~zwnX0BZ(rqS6FQbQZfm!QGX)X@ zPHITWgOEy)<&fIBTi)_-%>2U6J98t&&kV-ympM!vE$>lJSSHQi4m4Ai_P@kF;U3w> zckOFRAtEG_oSnk7uS71LS?kDPvP?qcjTn7Bn3yzNKePLCB~cjUKgm+Oy7$YKjLNWe z1Xo=cMks>04sTghB6gMv|3LOqO(gbdNgYZaYoQy_|G)Dy)d_iNuP?y`pKu=pVf~VG z(w-`oNf3USA}0~{qNgo6tk+-}McbK=hOwD`x)o!CbH>jz#cCr?+?=hE`mt{237Jld zdV=t4ieKY~6Hp2~Wg-+P*9B3quB*882tmayM_|*V%@QhRTx+!q8PEPonlupPC2yzCb8do9_FDodM-B63e`1$Ta93?8GT*zY zxNT`yF0;dK&=hg@cTr~?XOq=e(jT9`G4?A`Qd0ZXgzpWhDI4a#V|7DZhi_R)CSjLr z2wpRW&8n8w9Z`nxE>Ya;W2&(s;>1(W3@k3um!;80j;VUXX2ma(t}ihI^+(g$~h8h22dAhAPjFPiI=MkroVtKr)z%vvj2 z*)h7#F;iXyJw9m%8tOx52^Vd>4)S@LBSALCNU2-~_j>%`&sFFGWyM(%sIAC?Jl z_YR~3Fh6Uo#I+~bf%>)&kx1};$#_OLvr%CHG4+sgyY_9%RWWY) zXbbn)Cn6LS;Uxo6wnga6)D1c=^%%IaVNMF*i@lGhE2E zXVWJzqR*bJCj>0?BvKbQXFu9o1g_O2RC-g)x(0V<-9o++?JM)cDY^L&zo z0f8}sVFr8q;fOz9uP6vPj#o`R%-=yfNpp@G<+d*O>g|!>i}CEcoW-ir9*AS!Ph-@x3?HQcQ+xL)^OKzxm_W-`Jvp$y;e zuvT0ZaYFY@AK5~hILmI8zm(0X<(a>wS9GfX?7_pFo(ajv6}kheG!Z|fvcg8SgedwG z_q~1Gg3h~Rm_`bC1x$ih{ml9FCo-viFgKPm)NrWGNfoq9Qp553h%dJIbPTRIy}HFA znZ@|YA$tI3q?UQTs|&Mr(<*$mu1EU2v7O{lRh8!H%KPxWY46L<-+C6+wfA2cG=Hn1 zriw%(VR$jG4l|1k2 z!?foB$S*RGcP`AL)ymq=#ty#^RQm6g$R2~@w1&?`{@HWSPGBk^a^j-N-*tkv=|m3n zpAjCa)cj5<03O<_*9}~W5+;5NRLs6lZ+!GGqBbqb(%0i%EH43d*cG($#_L0r-I!7? zkeP`pzPm3+Kr{o$3uM&ozQz%gSNC-nVUXnvTHjqWmvqj@BYxl9HC0K)3S!^WhUid* z4xIsh=4M3=kN}v6rH3drPf(roT;1Jg0ZaGwV%=9=4>hKhLn4l05cnlo3cC0$ml|R6 z#|kkOG$hCNf{F|Ir2fToCkEx;gYLf4hRmiIRE|z1MHcWy&M(ED_}@+ylsXOc8r9*~ z*`%Ci^Lnjo1)k&3+EG-6%z-A$l;$W|R<_Eajs}{Rjt~^y@hj=TIC}#zo?j;rxsV3J z=IlD55ibO>UeUe5lyXY5nG0lE5`O~Hdb2RU9D+ws;KQFm8?>gmpu`Y%_nr2uSV9D! z$3cJ1+Ncd{2%1vcmLk!7RzK^nIXaR;D+ZeM<&$hO`Edg z#MS5EoNq@rLyX>kG78rCMM#G-0>dKA1^p=uDa0nc)SazL6RUhR!JB<<&0G5D?$RNLAZ0W_RQ;BVk=<-s?Pl5$4a^MO&O@A_vT0~g)_ob0 zL#4C!#kap@;w@gT`!D@2N-9l%=}m8-Y(3o{%8ppJJ9cXodQCV?D{UBRDPp^jP_85e zSzwv;{xPLB;(KMLF(y0LZ%xaVm1Fo5B}ZA+eVv#uzjS?1HwK~9v~~0pqB@5a;k6IP zt3It6Kn!dPydtBY)rD`bu-Q?l6$2t?W9`+=L12)eq?3wHkc*VE9h3isH66|X)*|l= zO+SocREDg>#yZLsv%N=eYM#N7;xqqKt8lT%Hk@G58~0E9FT%APdjO~eBY%lW>D5!# zaXu&nkYR684nXfFUV>6vJ?W|l%c2U%TfR>_erk}sN-60pQZ<>+CNFTNr{emZPh(2o zj6M+OWbEkVW$u%f16v7&YFf8p+k|!0WBGZcWWO|B`u;?N@|?c=Wi;&B(ceOT<>IzB zyaQ&uQS|q9+HGzbsnrHa0ZwYjiV4ee03VH$^<#Aa>gfafU0`C$_+@f70UblzpP_bN z{eqra@-pNjKqc;Jd_vvG%%cH}d5@a_@3ZK$f)ZW@4USPO=TZD){?P#nlJ?Q+8i~R; zsLL1!aI=lA0(?X)SV;4Eb;)I=&z+!-)0$Z)`4C*pnW)r&)i; z+Wuakk|0G`Hng)rm8RDoKI2Hshuz$>&gW(J9V0ekE4Ask*r{!)NQU+*%`^)O@LOXn z9;M*QGzPA;58C;sMg@{%>Skpji!U_3A$m?vTBt8Rs=0~ZrL^$dN;d;=^DTuBX&F}} zC?Nlc&>NqLx_h+|yGL$gQP{G#V{z9zu$iBq;p734P77tAeLHm9=#1uyHKRv1#8HBG zuSr)$R8Wu)<2!9Oggi1&C}wEW05kVw)7D15`op;tclxG~s;W}_hsfh&>o&JL6Tj%3 zztK7C+I_qL8V0vc0{!bVKXWkiU$0XjhiA5-iY+BJ{P*t(fJ-}6>&xuSh8TMOsz`ZqtytlD349vYb2%hMCx*q|;L-!orgq0B{h`Q{{5#Y^96PpINz; z`5{WW`X@d!kJnK`;0c5eSzb%8jRg^wlju2lM0gzUvUhB9?AO-i7hT;4GqV$CaesFw zuT(`9M|R*UBUjck533ieLcBimkB^z5dfhd(o^R5zpC|b?)h^~(p{@a_cCPT9K+}cG zopD~g->_N$4g?KL;y4mF5IZCv+&b<9%MBh{V^$+CeHJW?>yu6@xAnSdq(4)9ktVPk zEZ12Zxv6jEB|AGa-$h+^HVk3oN@UECm#RW?%oo0Yun1e2S#~sX*{xk(E&K-+Rs^G)w|YLlvV~C}q-zH58vY zzBc(-r&9H&Ty`Y#1`W3pcXd;QYx3cL+Jr%|Qx5de2Y&tsBXZPVGjI!LtXHAy6!U*v CNSZeQ literal 0 HcmV?d00001 diff --git a/icons/map_icons/clothing/suit/_suit.dmi b/icons/map_icons/clothing/suit/_suit.dmi new file mode 100644 index 0000000000000000000000000000000000000000..43b0400ab55dddbbbeb65c89c4038815d38c5ba6 GIT binary patch literal 10871 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 H8hiIYy@zV_ literal 0 HcmV?d00001 diff --git a/icons/map_icons/clothing/under/color.dmi b/icons/map_icons/clothing/under/color.dmi new file mode 100644 index 0000000000000000000000000000000000000000..c091de182d6456a6e1d2cffb0fe5a2f49f78192a GIT binary patch literal 3489 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 SUv-E78i4ga2a9|&3hUqH6Fb`g literal 0 HcmV?d00001 diff --git a/icons/map_icons/clothing/under/costume.dmi b/icons/map_icons/clothing/under/costume.dmi new file mode 100644 index 0000000000000000000000000000000000000000..4cc1261c71d003872f5b8c10119e032f83279ea4 GIT binary patch literal 1725 zcmX|Bc~sK*7XSVvLXZSkP(g5|$S`T2Mu ztQZ3WYWHida*E60#4?!$p}KKCnwgfwR{}vtqM=MC3#Vu-&dlC1O7S*<9vtib4`#$~Q5R#QVlDs>SNxFcr2fhZ zdwqIJTcb{Ox#ZOsr`W8891LaIf@JUmy2ILgVnfdIDckt(NX3 zT@A2o*E$|rtvh1BT)1a%K*VQ}`#u(*gr)x+n87cunb7vVf#c7dj-6V2+`)V6$)~0E z?B_60w;~!o8F;m{107FqvRk41(BRcod`Y!fmNd9RF?GihYOE~9zj59~ox*TS?<{O- z@$%bWMEK?#ojdG6?7vu)oSL4%40cYDt8e4KDQ@bhmIAOt;O*{8KbJapXBYDiFMRr` zY}d>7?327mrbE3?P=C+-`p+3~>6KZ9;-`^OYVV9q@QWuOYA2EH+y~8+gve_eW&Y)w z-qBFEX#=u~^B+5jVguNlUa0jqbG3D1rmdaQY|;%jef(~J)4BTG=Z&rAsU`QSOU4DL zjKIn{w2SoaGaC5U>{BNQzn#hh)1u2is-UQjn^BIE9SBaz@~@7Bacqi4*y*7>ji?A`4~4S zu01RNPtnG|MPh<0)VVZWO0HQaBVO(Xq8-8~RgvFFW5>}9Gw|#u+Y|;|pu(VmVL1j^ zf!&}C3DkiP=m#+50v+g})NHzTf->Nu!oeEWatfAyUYGVYw|r32>K!Ap4<3 z-d07gp*UrJ5l=o3y+Cq0YM>+mQHD;LMdHZ=Bc+hfPS^lh7Oi@*7SOT47D?@KPBIIG zCW5T{!@B+p7A-`E)a1Vtrizsc`WdgjD$5F=td*>dfEug&XMa5_BkZA9`Ioz0*KQmk zM?21~HA*Fa#(7kZZb!CEEM2BI4OHL;bZ$SJM8=|rN8I2Zars}d=O5VYeEyj1i8}3) zSjp6J3~Qjhe<;Elw6V4iE95l@7NGoS7WN&PT37lv7eG;-MKxlxZ#UI;^!BqR6 z6%W`q<%wxgsLCL6@Ya$^>LfhrwZ6RdmKz-)&+N&*^l;@mM(6uI3V7-L!upbV9{cv0 zZ z)`4e{tPiW3(TyPy$oI9ka=~%}cB~L>Ro@3%TsY0ixc99$uayQQ?}ZGHsPz7BCOmB1 zc}ftm8pIQvwUDCHE;W4pIu&0Om-(8V^kQXENjG{b_8sn>)zR7ySjGBn$P@4p*UnO! zSw=xHq>t1{!I*WP6rh+=g-D!Fd15#&mCCQNn{>`&M{Ff`zYr-K2y#r$4NVH={svuE#r+CF~VpZW4q8K=+ z`i2Rw_Jy&Mc%$=n&2yJchRC7YOXhM2KZa{fSiJy~D>@=*P?jc~tI8Qg?mL{W!)PA9 zX&16iE26XF>-K`qokK7^#rR@Em${ssS9=g9d#xVB2QT<3EG_)2`W19%$Ww+RVz&Hx Qm46y|d-%COa$~Um2c;VoMF0Q* literal 0 HcmV?d00001 diff --git a/icons/map_icons/clothing/under/dress.dmi b/icons/map_icons/clothing/under/dress.dmi new file mode 100644 index 0000000000000000000000000000000000000000..6e6a9883a12611338c9239478bc704a9746eedae GIT binary patch literal 2349 zcmX{Xc{tSh`}3U{b701pVGNBiCQ{_cl}Z_MUs+kEOCxQh#aMO|;X6}n9l4K4GL&D` zCT*@1CO=2A8b>j^ijk2@Inowun4SIo@q3@=y`J}epZ9s*bU$A=yt0lm008gd?(DDN zumU+)q=LS_k&y@hbi&U&z(pt&@)4jG0XlJ*K!pQAg%3bFLFKZNQaPCzrbWuuB305T zXLKofx|AFGo6?CY+1jK$I;D=Na!;FdpHAu4Qh%aH?K7lB>QM{ysReq}27PL^f$mcy zx+1xOfkAO`v6q*Zy}iBvX8lOh?O<~-8-N6L^$){5B z!X5&U2Y`S=v9Pd^N~LnS{27f_Po*jnj*N`Rr_`qO^cW0=NF)LvqpPdy{rmTd2pEQ& zo11w&UTJA*XJ_Z==x9w%4FHXbsQ*KCZBtwfUr};?e!hQT=okR)0FcNU8dQ@i04Q2o zzhqp|*4;5bM$pmG(Pi5GrdXgVfk4#Tq-T9h4YIP_Q?&_E4M0BtasV_nbo3cUhuI-6 z`+Y7_pmsfkiLu2z08}bcULx;S*edpgUJylEy#rgXl1gtmWQwn7uA%Gp{{9SD5 z52v|tr=z0)h`)L#|FLqX1<_eF5QIuB>KP4gb9b?S>)?F9>GqDifx}A+K68$0%1(*w z5^ZsB{rAR~Z~t}5==Mj~1{Ty-pmOMxRo=@XE_vV)(F4ieDYN9+>@O@xcUSdKv()O# z`>eG4SdYf9$#F4(-VSftYGoTYa;K^Yqp=t20(XYNh5A@Wr7e&6tItI8-tdNNsr~{b zt^0pYzLGeF8PJug>H?=1k$-J%S3g3n-gG8t?eU$ecU|Vb#z7BnrHGC26)ziYJhn9h zfEIW-I|hXFK9;Nn>9}e1y5Su^S?}0!ZK!X%^9v>>M>(3u373Q7|;o{4|A1!dHdtZTmR zg@U493cYq#rkuwJ2kNX)(97_oYzAC*EDVdlF8L*k-~X{k6-Dfc+1qM`fttZGQzc@5V%Sk%hWX(rUxPI?Bo;%LLHN3s}|ivbE%>x^+Wq7?Z1hP$ZID zI853)BHwBr=p`g17l2bXa4v>OxE|IV&fgWuug4J61+&dKPB1bp9<)u{02kni^yA?) zd;|@+0Kig*hXFc0sPZRul0quPNHo>|wfrmSLtF7I7j(KB;3ye)U>`#D{KDhTuK=6( z)Vwnam<5lgp2bS)n()1d@wapz?(uQgX<#~015=Yj|5Khx!P4d| z>tXlJS#jwZu3GfH2@S+7f=SBuR^stX<}7oW3$yaAqiw!?vV+Z`#`4LO+&?L#5B)5n>|veV_r?RyrZY zJ-_8r-uN`zwYllU&|fPF)=iDw2m@PNTT)JiedV?O3R?>+E)~Hmx+g0}0=244u{*$t zcqo-z+awS>B0cp)oIB1hR)T%%m2ML=BXQ%L#7!iJBpJ#xB=O-M2kDPc@KOJ^vkJBoH&#FM`gMSa%V=O;KN5ol;GE-MCd<^40AgL9!J3fscHMPN5ivs0m$qqZxGf#-n+P4EOF1~qb0KrLiW*6cD|9t&Ro6KE^A1_{4T^_GT zeQ-_dF?q8o~p#N#GX<-t#2)w7yyT$E9i!CK4$9N{&S z$NclP0oy2m{4GuZQ>2410s~fg0{_R^M%;;AHD|L?i%o}bzewXB zG%M@RhX!Za;Axfy6E;y7wC3c40JF>ePWY3Rv#FV@%u+vo`x9TkpKx7<@%I-ze|4IK zlBr{Ii3H5S@(a7w?Pgjn_YtmcEWcQrg08-~cO=zxgAqQ)Xh5){F}|YnV3hycbjzCGVdP!3!PqxWT`)+Bk*5&j|5U|+VGzwd1VAV6sc zE~sb}vvkK`kjin?#*I0_u_Y_cc&_zFz|5k Kb*^*b@c#iDY4(r+ literal 0 HcmV?d00001 diff --git a/icons/map_icons/items/_item.dmi b/icons/map_icons/items/_item.dmi new file mode 100644 index 0000000000000000000000000000000000000000..000aa654750889a5466f264164d6abd58f2b31fe GIT binary patch literal 20004 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 D*R<1( literal 0 HcmV?d00001 diff --git a/icons/map_icons/items/encryptionkey.dmi b/icons/map_icons/items/encryptionkey.dmi new file mode 100644 index 0000000000000000000000000000000000000000..c44fac3a26e7b6ccc86871d8f8e71e16bdbf42d6 GIT binary patch literal 2384 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 Tt(68|fx=Oi*O050u?YQt5_MCt literal 0 HcmV?d00001 diff --git a/icons/map_icons/mobs.dmi b/icons/map_icons/mobs.dmi new file mode 100644 index 0000000000000000000000000000000000000000..6c781a70ad1911fce8b0f3984aaca861a1038738 GIT binary patch literal 870 zcmV-s1DX7ZP)9u}?;3$YmzvmO?09~hG% z7?U3uv>_P62?v)21)UQRp&S;ZAsfXP5y&4H$t4`6Bpu2p9=XmN)&Kwi0d!JMQvg8b z*k%9#0CIX%Sad{Xb7OL8aCB*JZU6vyoKseCa&`CgQ*iP10006xNkl?7D%Cspu{n+pxID)}$wKrBq8&$eCMr0x^M3$)4w)4x4pL!dZ@(WnWY(lP zNQadJ04_Dm6Tqd0IRSWdJZ@qdEh2e;O&hEZUO<9jYbN% zY&1Nec*g8#2%z~pW=CTJoK8IQ!1>H$1SnOOrOmiV_Iohwx>BtPcBTx|xYHqBSl44a66QoQGr05t&016uQ*&jK_6=rKS75CD__Bme4e@wewIeN=w@|=sJ8olKzea>9_robM6Vg`VM;z}9w}IKw5MZf4K;VAokq2h`17o_bvl$P`{t1R%H-=X9 z2Mj!H2B-G@Z{H7_0N`nVz&{(_^Id=*0ONs${vZM*00BU>qCYUhAqqeMkO%xB=K2E! z_yj2&;uM(e58^dG1o(k#Y-vS*fIyt*f!Y3G`%iiMV`|%O^p?BiIWP1F474-A4S=Wp w!BEl=a3zhBl9ufchN22aSiz$D>JPH<2U%87S-(@z>Hq)$07*qoM6N<$g7ai&ssI20 literal 0 HcmV?d00001 diff --git a/icons/map_icons/objects.dmi b/icons/map_icons/objects.dmi new file mode 100644 index 0000000000000000000000000000000000000000..8fc20d26983faa827eaef080bdd3ec1ad47efe42 GIT binary patch literal 36327 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 literal 0 HcmV?d00001 diff --git a/icons/map_icons/turfs.dmi b/icons/map_icons/turfs.dmi new file mode 100644 index 0000000000000000000000000000000000000000..6c781a70ad1911fce8b0f3984aaca861a1038738 GIT binary patch literal 870 zcmV-s1DX7ZP)9u}?;3$YmzvmO?09~hG% z7?U3uv>_P62?v)21)UQRp&S;ZAsfXP5y&4H$t4`6Bpu2p9=XmN)&Kwi0d!JMQvg8b z*k%9#0CIX%Sad{Xb7OL8aCB*JZU6vyoKseCa&`CgQ*iP10006xNkl?7D%Cspu{n+pxID)}$wKrBq8&$eCMr0x^M3$)4w)4x4pL!dZ@(WnWY(lP zNQadJ04_Dm6Tqd0IRSWdJZ@qdEh2e;O&hEZUO<9jYbN% zY&1Nec*g8#2%z~pW=CTJoK8IQ!1>H$1SnOOrOmiV_Iohwx>BtPcBTx|xYHqBSl44a66QoQGr05t&016uQ*&jK_6=rKS75CD__Bme4e@wewIeN=w@|=sJ8olKzea>9_robM6Vg`VM;z}9w}IKw5MZf4K;VAokq2h`17o_bvl$P`{t1R%H-=X9 z2Mj!H2B-G@Z{H7_0N`nVz&{(_^Id=*0ONs${vZM*00BU>qCYUhAqqeMkO%xB=K2E! z_yj2&;uM(e58^dG1o(k#Y-vS*fIyt*f!Y3G`%iiMV`|%O^p?BiIWP1F474-A4S=Wp w!BEl=a3zhBl9ufchN22aSiz$D>JPH<2U%87S-(@z>Hq)$07*qoM6N<$g7ai&ssI20 literal 0 HcmV?d00001 diff --git a/icons/map_icons/unsorted.dmi b/icons/map_icons/unsorted.dmi new file mode 100644 index 0000000000000000000000000000000000000000..6c781a70ad1911fce8b0f3984aaca861a1038738 GIT binary patch literal 870 zcmV-s1DX7ZP)9u}?;3$YmzvmO?09~hG% z7?U3uv>_P62?v)21)UQRp&S;ZAsfXP5y&4H$t4`6Bpu2p9=XmN)&Kwi0d!JMQvg8b z*k%9#0CIX%Sad{Xb7OL8aCB*JZU6vyoKseCa&`CgQ*iP10006xNkl?7D%Cspu{n+pxID)}$wKrBq8&$eCMr0x^M3$)4w)4x4pL!dZ@(WnWY(lP zNQadJ04_Dm6Tqd0IRSWdJZ@qdEh2e;O&hEZUO<9jYbN% zY&1Nec*g8#2%z~pW=CTJoK8IQ!1>H$1SnOOrOmiV_Iohwx>BtPcBTx|xYHqBSl44a66QoQGr05t&016uQ*&jK_6=rKS75CD__Bme4e@wewIeN=w@|=sJ8olKzea>9_robM6Vg`VM;z}9w}IKw5MZf4K;VAokq2h`17o_bvl$P`{t1R%H-=X9 z2Mj!H2B-G@Z{H7_0N`nVz&{(_^Id=*0ONs${vZM*00BU>qCYUhAqqeMkO%xB=K2E! z_yj2&;uM(e58^dG1o(k#Y-vS*fIyt*f!Y3G`%iiMV`|%O^p?BiIWP1F474-A4S=Wp w!BEl=a3zhBl9ufchN22aSiz$D>JPH<2U%87S-(@z>Hq)$07*qoM6N<$g7ai&ssI20 literal 0 HcmV?d00001 diff --git a/icons/obj/clothing/modsuit/mod_construction.dmi b/icons/obj/clothing/modsuit/mod_construction.dmi index b2b5c1f5ceb906d750822923df76467b80cbdebc..054fafdc12e23721470887e2cad499b2d455ddbc 100644 GIT binary patch literal 12068 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 literal 5796 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 diff --git a/icons/obj/fluff/previews.dmi b/icons/obj/fluff/previews.dmi index d2ad34b0054a56e77ceb4207de77cb667a0596d7..4e4e380bc3f884ab105db31bf3a05c71bdb5714d 100644 GIT binary patch literal 6706 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 IM6N<$f={aw4gdfE literal 10107 zcmZvCcQjm4_x7C`%#1pEXAm`dZ(($zhC~R_gAk$xi8hQ;LJ&j?(GwBTqD6^O5)z_! z!HiymXcK~;_kGv;{`&s7_ny1XI_vDS_j=BG_OnmCnTZ}1IU6|u08|G0+U8f^g8w`) zva5H(pqm%~fPiPWtpcexEd{UVD-5a%B8wfO}TH&NcJ~1bxVO?JfDu=ANh#UF$Uw(|KAEC{=k@Echw{p`_50(D2mlIrEFHVrxSm86bH`Qd4e3UmI}kF>L+b zQg7%#81hYz>jl3}svfn;z~$3_96yV)YYs;*Z|sI7>6XtvZn`H_S%yA^K=G+t-j*8R z<|VyJ@~H~~Hk0nz{H(+U|AxOGr@gr^@L3UU3;$5_m0#P&KFgEqZj~U^C%5zNom((^ zK?a)XDb`wc_2%Xq~u7Nz2E|u(`u3t^2hKE7MAq{>2BiM|Zi#}%2i(Niq zi-&_Q>TZRVMwf>yqLiErQ!wm~s+z=Det6NG+_wTw?t$nQOHuCcgA2ZTB(# zzSIER-l(xllE_doKkw0ENt%YbAjR+1#fk6EHYPWiyp!3CL{y`YC~m_@7lblL(h?ae z`f-zj8Y4oQI5h5rb^QEIi-k)H{t^>>xPEKq`0x-tyYm)ZI7Iu=(vw9~IIbyKHZh_t ze7uR&N0FE%`A;|xD*(m^-_%|lh;okX4Iu70&N%63bTS+FK+vMyJPbllUCU*oD=zQ) z7f1<2|GB^iuR{fFV;qqen|Irb`ttJfeD?4f?vEaoB=vTm#tu6qlHob;+VjeuU{R%` zkqGkPbGwVlcHQ&NxzL?@&4|a3yPI8-6Zlgo*7CXPBfd72f>93_B-qe3bT4loLrSrG z!~gOPCPA!mC-Wgy#6ddPEt`f%@o2$uuQ3T4W}gv{o@OI)ex|&fo{qB7f;63- zu3vc6vn481!4G&O-Nyp%{~k+28g3OQ&q6RgyWU>dz<8BeKR@J8R}5ds$;g8bcBE}; zJi;(%5Q~^-GAY`q3+r5Z7D=i4H&)CVp?4=PiHz6dZgU^MD0s@59=5-=7i-7-89pIWSq=Z@l3>5V7>%PFlz zZ+bKj7}|dJ-Q}uglTBHw#?8lwH(!hgE!^Qh?UW&!!N7gG#Y!~Zcj-`MzkGNUbJ8ih zx)?js&hz!C9AptKEiD_(WQ$Ie+UX0s@4V_niS1Q?BPGQa08%CD;EMw?a3z}`IR#Qo zFj>v*vcb#2fG@kD&-fk%i+-ofrzsKdgL~Zv<722>ckU2F^QiRP8*whu8V{_wLjB8F z1vbwdHY_4cXU?bI-QNV>$C%nZi-&3+YiI~F#;nXGx>s|{04vD((1V`=tX&dO!OOk0 z&572vsw7LNDpf7E?wf}lI)ZDcp;Y+RiArI5_e#MmDW?X67^dd#F6x2X5x+J|vbrZaw5E3#O+{r#nZzr>9|#qNh3$hL}+=mS)toY}Eg!`~DesypkhH3m^-5{I`vE>KqN`T&OpQry1Bt>7_ydLkZ7QgvDt3QZfHzp| zG8SH)I-Gd&MOhO!f_um>0M4NJvE98h6E?)RUO2dd zsqHlKS=Taq#f82=lQ#ry5GvKxKDryYh=N>_iz9mn22(Ls_!p*t2B`=*v49S>m+;Bv z_VNo;5|lujWpoNvbXmOr(a9mdDl1{S5oE$u@cMsa2Z-rBcE!WcWIq*P6j#^i`A;uxV13$c0oE2GUIxk%NS5d zf$gR#@Nf{Ks^6STUIgzwzeE^{i#ICXG1N;UP(>pd7yz2d$x-$4X-SDWe~bg)dB+Vg z@2m_r@LheXOm$-8l80+O1M1=RC%T^@MI}QuJ0ok!6aWUKUZ#nVYBV*jHQFAFINra< zA`b7k$p7vX8SsJi^uD;{%NiRF=y6&*!uQVNhhnllZ8K3I7DD$mSA61P!2>Yfu#}GG zPnzTnRiwcFE}^qg2gx8Pam*hkwd$n%A1=J6P|B8H-*|$N`w3HPUk~=EeV6P~soWNv zJMT^HP>$x1!0V7ADB5@`+TqKlaCG;MK z<%^Uv|1osC_y>qX1<}59IhcYFt-ND_kYf|WnzF#YMj?5ZkDkI!!Rv{xuxDQl%B-`q zhqic&8Sl|5|G7P^K}yB);+{{)jS`wNUbsnI;%y(mf^<2!o8roMum)JbMA_`6;AwC8M4c>oe$N(F{?PcEKo894 zD$HQ_hPM`FX0Z5g?!XByGpS#f9$uQW*KHo4uK=Qk)PHjT7wa0kwK#AO>v{x=q<+mZ zcFlo%LQhklfd$J;Kj%Su8R7UyGQss5oV-GcL{knUEk8?pA(%3l)G~GWu3LmgsQtW500}8t>x6@Ow0U$u@u@_kskcB zhD0xdm?z!Yz14j@no?OQ@%)r_l`hX|UM*(>Pv>MFAa5(>ndmh(_Y^yvTfO?p!L*gna2*nN+Wn@c5q8o`|3^ zWz}r^E6Kf`1cb-8xu)NqyW~KoF5{?5BzBV$9o8m! z=!k!ySX=D9``ewJo+$lkhrnKGh*hu;YIyRNp_711+sd!HQOpuesTOTWUC5!K#*D4u^g!InuPD8Gj9T%eV^7R<)^6D zB>KuD6=uJlNiDuuZ{wl~5Pf);31_t@g)=jU6?<`0MZ@g99a*sy*yNQVgI6Lz#9y3q zr@^~7bmQk)L!|8&9@kY5aZWl_8sywj*yewmubm%#o{)yHiXTXp%4$i$cdrvmB zd!T8WN&mZbB`5vpatPEOa`BWPd7YVJFh8vBrW7<0iXzLuy&k@vdJ_`7!FU(Or-Zk; zB=+oELlen(qI%LjfKtS_)YLr#5QoWn0IAN)Dnk*xmLtm>YgMc0i!*98cG2te`!lZ( zvC*BoO{8Yz^Hv>#Sjkm6k=#&i3}Vih`nBzQbTTMzr$6$w50B4CPuUU^YK+gcO{8R2 zI+-=J=O(N$G;ajE8hlMmSMR#E;JxToz>l92NzpF4d{gTWT#88)o6@Cl?BvLTC0KsR zUElvEhUWOPq_yNHPpR2USh@nn|I(ZPfaVG_{{ao8_Z9ewYy@B3*e=-zgI2ANvr7q6 z7oE=sc}Bgl@eh=ShR30k3x6C&9+a=Nx7-(!_=$cF|BT-}=}P}Dv+>NIVEsJviz0eS zf9vjrvCvNi9n!ts$B(1o{7Q#X7uw&x-d#`pLGD^x>wb^>W3%V9_uKw@iuwHD~GjTrViT9Q@GI zG|h+B%E;iRhbdP0HyrrZ9z9YeU$Z*~Zmec^T_*_ww>e$-f>>h2OR~;KS3~sE2-ePnI*=T$rht*|&rFwH=UUdn<(j-IpoG zG$JY>B!XxMw=8Y34QXMP7D z^81D@u!37v#p-M>@*9NZ&D0Xj{ax-RgWka>L(bbX{?Ql5`8`Wm2N>*^>-yHoNWQ~$ zvA`jFgRDSvMr;avPV&uUJVY^SKG;JFE7?-bvf8hl7tnj-P{G`s5Z!;SJo_5SaM(qN zQJZRgz`o)96#ty!9d4#7DTbgW1>CJVBcmQ`K&fn0kz&B-kv#wEEsS(msSe@vk$a6N zzmSS8ry6{J;~Sz>p`=4QN5k9&vTSlGx*Q0N?&CUZ`rg>D6!d-9yMQ9ysFW)!BxyHx z-oF!%3**Gh8=Y!@^=)e^21(-mJ94OEJErHsPd{f%`ujZ#Rwo&B85=!L8$7{X%vicV z+yTGPrP9SDMSD}oa_k_JTndr}?=16^;CC9u8Ez)*-~)~|k!8H%LKir*_F0JXM>dY* zfc5olR?GfMJRcoW*|o)S4WmJT_tO!5_)e_B{Xy^#PKX?jscfyEB8b# zgY?tI!i>a8$D14h_b10g4{VxQD~T8H_hxL^VWNw>$3Js!>CS2+Loe&0Shb*(L&(>S zfh)1VIKps9XTmX}Iv!B_T#NA7vT;AJX&f}vlDU{zN!%pA0!1Q)CbdH@U=Cg1*Esq< zDvTETI8op(qzllhF@TBlKXwj%_1u_4cMlhN&YUkPwf3O-+tKH-IUCJC{@5ypS&}}Q zvxY+BW$wkP)}qQVxEk@$UrIRJESGf4 z;1A|p%jpXVj#6=E^V(V!ZT#}WMt)cq>ejRPyRq}`LPP}9wJRdi1(mp zYobXyx{izlij%|}>yDx)pN56gsf7?GN|U==Ct5P?_(ab}KZpdNY{kXvMut2kbM#43 zR5#AmHsi_;Wk=RLHv~u@Mr!uvR+k8|?=e41ZaD5JW$s6hjF>+F0z@G=dpo%VZt12( zm)XY?amn{fLYDctN0M4zK_zKV46zVh3_`|f6@3%5zB|v?bpOWCjQZf#By% zbxu{rAJ6IO^AZHGOWU-dZYG}4?LzkG)I}rk6n^W&L_!d6U-feXlu#L8G2c%I`Eq@w zUW2@9phD>T?EdJ^Zrgb|vn~|90@b%sV)%PB} za2+)rWI8x*uMmMd7!c)uT=&=tV2u_fSz5YrmK@VafPJ5+^6b#;tdE%*J*QEZ+pfP@ z{k=tElf#5SF<^!y$|A=aAAT6O(if9_p~&mIU?S+-rBCgM3PBO~Qy%^(F6Tv>NPEL#8pH7?d4WNcOd=kNesJ zNS0On%RA3xV$-keYifD>GBGP4ZJ3->b^owW3M5OL2~QRMB`2iTw(#-;F2DA zBs(I{*G1_;TYhHOGf27101g@QxYe@_6(GTvQmn%NL&EhvI{K@4HFQ89G0CJPf;uq$RhJpj?vZ&}*kIJ6L|JeVu^Ep26C8@> zf*1cVh(EEQ?d{+1c+x?{!ILjhOwyDJ?^W}g(!@ogTTbLOL-e>q8yvZb|H74ZIVf-o z^Nn!=JlXP)br?qHuO)fDI-&$1!z_*_x%@~He<{G4MeX*aZYC|xRPB;XRgHV9f{D1`<^*wFa8n8h5mBbB}+0dZ;9#z;`?#B(rff=Mw@dAW&Pf8x?IN5)9+7iV}XjP_$T z5`sJa7W^5wva|m?YWOtLiaA}x8kpO$iH8J^?j<+|DM|tA*OqYk;Wf}7H*43|wM{Y@ z#fkHEKE~A_W*NzRwkq!_Ke+zlnrRKtjd(Pu&sV7n^h*LvML)Z(X>kMM>UoLPArbWb z72<^!xYYrHr8d^Ll4$Gf!1dpok$1KNHE`TTeJiEYcnYH9YTfr@2%<|&09gTWe*9V; z+6occft;RKN=Bb~P$!j3Ox-$pkGKYp)#VGUWoJv$Zpsgkr=$lH_ucHf#>zF#1AfPh z6p5OL(4Xmuvg^WVahwYrk#Fpn^J@O|`&UtY{!*&m@?2LjHc!#M84Gsjfm6iHR*Ew} zX{!pPj#24HujSu}XZUcSaV7I7xqM?v!%nc%;u?h&x)}*lBK_4F zT-&ZzT*30BwYeZvKk4CWg^a^&hJ^c50m0cf0ru4oE<+g58J2D&!Cgwof#|=Fy6k%U zYF_T?|KPjEHy|(>Oi&tiT<9pK9o+vLRqeP1QuhA0?O)YHvS)hPqIuN4`-6)8m=rRWs9^KGSO#qCUd>Z5jtXq$t z%d8*sy)Y3H?k^F8AOw>ycD^#+s(PVeW$PXbFA47f9_{#GVxohE(JTCcy?qUlmQ|$> zSTH7rx*C4^O-#70Ctb7L@oB<06Z{E@7JWq%VEQ*SLdM$5%5ORn$dJz;bW*B48m3JH zRX-ej9o4$3z!6&Zg#AQAhIMzYc1bcXYQc2VG0?oYWqZMGbb6RllL6fHWYQ5=WvlCt zdOrlJxy*bhleRYpu}j665hcUZqVjJEQhzVCu9JLnQ|dd;*B%=D9m=CFn2-L#oy(bL zmbHbBrzh{wt@R*5@MBX<^*Q;`=CE6gD^79xt}Z2nt;sI#-&Vknv&gBzGp7U4lp%ia zw0qwPV+UoW?AvDJlT4YIqKQ_vqn=Vp2*J^fZEULrs??|$ttlJE-!7H zNfr1y1DC}W*x^00+Z~PsXXU$LwnbHZzl%~Am;*5ccGy=VB}jWwx{>8WwIOGYohwY-M0*!}qyD}-JPYs@+90@I!mLQ(DNEc7_Z z=xY`C5}yh6Hx9oT(7q3)Tce7VM7jC>Sb@+pm>$KaMSW`gEpoeuM_ zrWL@T^mOS@@faN5IXUF)v?I;)#+PB#;sNPhX&n0*R0y{PCt9qMx@b-qn z?O{N+$H!5Cez_fZu-$pMptOlA6K8zYTZ0=mj(SjV>|`d-&0l?L@wgR6e_B5g&-ksu6P(&d2Sd z`3m+z1rl>NhDg-h(dNW_xipik{A3-Xt9>p!dxgh`%e-qfDAzzsv7C8_BTTpZ7tS^s( zbTIibc6to{4U@k3$)Q_s=f zZ5&gSiz3jIL=M0V7)iGO^`U6)zRawkd=ter@&z`|@a1;CdPewpUzldYIE$V47NgsT zUzcW^zlf1E_K5H%(OAt`kNMr0)|>QRK_53vSUO9@Z&NR9>@JXoU^H)n(!1XEA!gUS zLW(&pe1Vm{FqG<$@r;hovmb*Jlj?66&NvU;(lxvc71CE+hmP%Ss7tSSQTxGVA6MX) zWG>Ese?o^D4yFJWDz)3?z`yC(Ns6xr0kUI12wlh4cRWC$&hzbXir&8Hlbp=16FOKm z+3MTFf5UiZ{LW)0ko%6W#fc$*C?$$1JSbur8*@W^{Sj;KE9b#+jU933e}9{a5pu$X z6iKA^<$yNv?VLM_v+K2hijS8<^$5WZxip z=Ww9$)VbyFGVI)oJS`wSX5D62g!AZ0&E9n^4d?DL^QDN(^7=P2T;;C1G>IA+vh(|4 zNz3(0=VTIOv;F?x92l{Bw}&o8YnO5!UjF2++3=&R&kLl|#5eo~aTLuu#D)oQF7NzX zroc8*&&snrr?sA;#sE6o2@Z5x0y_iY<8HT4BSDc7zS!+EJ#x#d z3F!?ap?OuVjQ{hLo1)78bAsBNKQX}z9a`JR7}!Fk-5-ZnMFR?+6QYj8uO4ffG{Y-Z z8d+91GL9oI zye`6<6Dx)8L>R^~m6RfQn{H}+ABb>0e>D^+|J2NhJ3uX%yMP~{xHs7)QOUl2Db^nT zrh57B@)-t3m`hNDo&2@4y>Hr~RXAF+_oJJR?sK}Idd7LtGT|;Y54na*XP7f~wS?2G z{I)U@Qm|1PatFr9RJb)s>`49a7VpUYQp~VxPoiNCDa4pD{daAy-4s1)AX0fshnz&= zLSh5P`uCRPt`{Pi@vp~StTw4>nE(BXu>78M>gxU|Cf)2VsXZ%pDrFMtJNMn+ zO-p&mvevd9cIv7XfrMgHgqcDOAS}l3Nf220ch7(qHBCx;&a)A%)FMK~~I$CO@3SXIaa)Jti`6WB$7j)WA9wgrJ9! z4bZs0isht^?5q~WiZQuwv-~-NpASL|hPq;Z7w(kAyh z;`y4xh#%y#!a|bNftBl+*Fw}#%Q!vktPR4N(gMPv3$Haf9;3yht8CFPV%5;^@<}Dr zzFdwZfGkyEk~i{NnYIMd9Gj8_l# zhYP#=6kMfSZu5Kj@K^U@EHt6-$KJxZ|H(n#1Xs|8e`%8ZWk*aa%)_5Ys_B4KkHq=J zy0(J@5Yh}$F%Q_%$KbE}p9`ZUQnd(cyTfbx@o7(;XaJvTbIV@8){b7o?`bOyYnxNG6HvZ=ud3+HIztcUXfpcXVI^`C!7}d@IYE9 z6vlPafcT9HO{sZo^=7BGLXoi^rvck7TC)e(V_aJN<7B#${-l4llZ9Ep-*9viQsd~! zaKU(vKBY)=v3$Wd5u$i@&phMPNKXsJhM#WQ{#VMiiS7U7YYx=^3Ov+IQjgy`~Q2c{l6iwz5a!6_7%mJxs+_j=Tm{B$^LX~^HM;@z1$25Nqfo?&!M8!nBz6m&oO- zS(m^mH(Y%jSzHMx4YRA-+sP?KT3m`F@b>lyI%vxEr$EiZ$tJ~JY=>ss;i`Poac%aY zRLsJT%BjP&)W>$Th};m}r?-h_9H`1$kT~kzTxxr=_3my45U(JznVp{mr#yXJt17&Q{Qmt_ZBnHg*(fxZfz>RVi+=1XqZO; diff --git a/tgstation.dme b/tgstation.dme index 6c53dc34a6f..b597d6999d6 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -673,6 +673,7 @@ #include "code\controllers\subsystem\explosions.dm" #include "code\controllers\subsystem\fluids.dm" #include "code\controllers\subsystem\garbage.dm" +#include "code\controllers\subsystem\greyscale_previews.dm" #include "code\controllers\subsystem\icon_smooth.dm" #include "code\controllers\subsystem\init_profiler.dm" #include "code\controllers\subsystem\input.dm" diff --git a/tools/UpdatePaths/Scripts/90940_frenchberet.txt b/tools/UpdatePaths/Scripts/90940_frenchberet.txt new file mode 100644 index 00000000000..f484fa0719b --- /dev/null +++ b/tools/UpdatePaths/Scripts/90940_frenchberet.txt @@ -0,0 +1 @@ +/obj/item/clothing/head/frenchberet : /obj/item/clothing/head/beret/frenchberet{@OLD} \ No newline at end of file