From db78b2f091830f3917528046f6fdd3006d401447 Mon Sep 17 00:00:00 2001 From: NovaBot <154629622+NovaBot13@users.noreply.github.com> Date: Fri, 1 Mar 2024 17:54:08 -0500 Subject: [PATCH] [MIRROR] Photocopier butt sprites refactor (#1228) * Photocopier butt sprites refactor (#81693) ## About The Pull Request - Butt sprite pngs put into a single .dmi - All living mobs can have butt sprites defined [maybe even ghosts in the future?] - Human butt sprites are based on the chest bodypart instead of species - having a human chest and felinid tail shows felinid sprite - Added fuzzy moth butt sprite from Paradise - Butt sprites use defines ## Why It's Good For The Game Cleaner code, more realistic and logical for humans on the chest rather than species, moth player flavor, butt sprites did not need to be separate pngs at all, and gives felinid tails some more "value" ## Changelog :cl: refactor: Butt sprites are based on the chest bodypart for humans, instead of the species image: Moths have their own special butt sprites /:cl: * Photocopier butt sprites refactor * Modular updates --------- Co-authored-by: 13spacemen <46101244+13spacemen@users.noreply.github.com> Co-authored-by: Mal <13398309+vinylspiders@users.noreply.github.com> --- code/__DEFINES/mobs.dm | 14 ++++++++++ code/modules/mob/living/basic/drone/_drone.dm | 4 ++- .../mob/living/carbon/alien/adult/adult.dm | 3 +++ .../mob/living/carbon/human/_species.dm | 3 --- code/modules/mob/living/carbon/human/human.dm | 4 +++ .../carbon/human/species_types/abductors.dm | 1 - .../carbon/human/species_types/felinid.dm | 1 - .../carbon/human/species_types/jellypeople.dm | 1 - .../human/species_types/lizardpeople.dm | 2 -- .../carbon/human/species_types/plasmamen.dm | 2 -- .../carbon/human/species_types/podpeople.dm | 2 -- code/modules/mob/living/living.dm | 3 +++ code/modules/mob/living/silicon/silicon.dm | 3 +++ .../mob/living/simple_animal/hostile/alien.dm | 3 +++ code/modules/paperwork/photocopier.dm | 25 +++++------------- code/modules/surgery/bodyparts/parts.dm | 9 +++++++ .../species_parts/lizard_bodyparts.dm | 3 +++ .../bodyparts/species_parts/misc_bodyparts.dm | 9 +++++++ .../bodyparts/species_parts/moth_bodyparts.dm | 3 +++ .../species_parts/plasmaman_bodyparts.dm | 3 +++ code/modules/surgery/organs/external/tails.dm | 6 +++++ icons/ass/assalien.png | Bin 1306 -> 0 bytes icons/ass/asscat.png | Bin 980 -> 0 bytes icons/ass/assdrone.png | Bin 174 -> 0 bytes icons/ass/assfemale.png | Bin 986 -> 0 bytes icons/ass/assgrey.png | Bin 1074 -> 0 bytes icons/ass/asslizard.png | Bin 1121 -> 0 bytes icons/ass/assmachine.png | Bin 246 -> 0 bytes icons/ass/assmale.png | Bin 1109 -> 0 bytes icons/ass/assplasma.png | Bin 662 -> 0 bytes icons/ass/asspodperson.png | Bin 1849 -> 0 bytes icons/ass/assslime.png | Bin 1016 -> 0 bytes icons/mob/butts.dmi | Bin 0 -> 15122 bytes .../modules/bodyparts/code/moth_bodyparts.dm | 3 +++ .../mob/living/carbon/human/species/unathi.dm | 1 - 35 files changed, 76 insertions(+), 32 deletions(-) delete mode 100644 icons/ass/assalien.png delete mode 100644 icons/ass/asscat.png delete mode 100644 icons/ass/assdrone.png delete mode 100644 icons/ass/assfemale.png delete mode 100644 icons/ass/assgrey.png delete mode 100644 icons/ass/asslizard.png delete mode 100644 icons/ass/assmachine.png delete mode 100644 icons/ass/assmale.png delete mode 100644 icons/ass/assplasma.png delete mode 100644 icons/ass/asspodperson.png delete mode 100644 icons/ass/assslime.png create mode 100644 icons/mob/butts.dmi diff --git a/code/__DEFINES/mobs.dm b/code/__DEFINES/mobs.dm index 227256f4956..d5ee278ce03 100644 --- a/code/__DEFINES/mobs.dm +++ b/code/__DEFINES/mobs.dm @@ -1002,3 +1002,17 @@ GLOBAL_LIST_INIT(layers_to_offset, list( /// Types of bullets that mining mobs take full damage from #define MINING_MOB_PROJECTILE_VULNERABILITY list(BRUTE) + +// Sprites for photocopying butts +#define BUTT_SPRITE_HUMAN_MALE "human_male" +#define BUTT_SPRITE_HUMAN_FEMALE "human_female" +#define BUTT_SPRITE_LIZARD "lizard" +#define BUTT_SPRITE_QR_CODE "qr_code" +#define BUTT_SPRITE_XENOMORPH "xeno" +#define BUTT_SPRITE_DRONE "drone" +#define BUTT_SPRITE_CAT "cat" +#define BUTT_SPRITE_FLOWERPOT "flowerpot" +#define BUTT_SPRITE_GREY "grey" +#define BUTT_SPRITE_PLASMA "plasma" +#define BUTT_SPRITE_FUZZY "fuzzy" +#define BUTT_SPRITE_SLIME "slime" diff --git a/code/modules/mob/living/basic/drone/_drone.dm b/code/modules/mob/living/basic/drone/_drone.dm index 0887f430ee9..d0be625dc5a 100644 --- a/code/modules/mob/living/basic/drone/_drone.dm +++ b/code/modules/mob/living/basic/drone/_drone.dm @@ -47,7 +47,6 @@ lighting_cutoff_red = 30 lighting_cutoff_green = 35 lighting_cutoff_blue = 25 - can_be_held = TRUE worn_slot_flags = ITEM_SLOT_HEAD /// `TRUE` if we have picked our visual appearance, `FALSE` otherwise (default) @@ -265,6 +264,9 @@ /mob/living/basic/drone/gib() dust() +/mob/living/basic/drone/get_butt_sprite() + return BUTT_SPRITE_DRONE + /mob/living/basic/drone/examine(mob/user) . = list("This is [icon2html(src, user)] \a [src]!", EXAMINE_SECTION_BREAK) //NOVA EDIT CHANGE diff --git a/code/modules/mob/living/carbon/alien/adult/adult.dm b/code/modules/mob/living/carbon/alien/adult/adult.dm index 2cab03d670e..bbacffd4f6f 100644 --- a/code/modules/mob/living/carbon/alien/adult/adult.dm +++ b/code/modules/mob/living/carbon/alien/adult/adult.dm @@ -143,6 +143,9 @@ GLOBAL_LIST_INIT(strippable_alien_humanoid_items, create_strippable_list(list( melting_pot.consume_thing(lucky_winner) return TRUE +/mob/living/carbon/alien/adult/get_butt_sprite() + return BUTT_SPRITE_XENOMORPH + // Aliens can touch acid /mob/living/carbon/alien/can_touch_acid(atom/acided_atom, acid_power, acid_volume) return TRUE diff --git a/code/modules/mob/living/carbon/human/_species.dm b/code/modules/mob/living/carbon/human/_species.dm index 82ec5a6f311..85619a75f1c 100644 --- a/code/modules/mob/living/carbon/human/_species.dm +++ b/code/modules/mob/living/carbon/human/_species.dm @@ -167,9 +167,6 @@ GLOBAL_LIST_EMPTY(features_by_species) ///Unique cookie given by admins through prayers var/species_cookie = /obj/item/food/cookie - ///For custom overrides for species ass images - var/icon/ass_image - /// List of family heirlooms this species can get with the family heirloom quirk. List of types. var/list/family_heirlooms diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index bc07f083550..3dfd4b5e383 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -381,6 +381,10 @@ var/obj/item/bodypart/the_part = isbodypart(target_zone) ? target_zone : get_bodypart(check_zone(target_zone)) //keep these synced to_chat(user, span_alert("There is no exposed flesh or thin material on [p_their()] [the_part.name].")) +/mob/living/carbon/human/get_butt_sprite() + var/obj/item/bodypart/chest/chest = get_bodypart(BODY_ZONE_CHEST) + return chest?.get_butt_sprite() + /mob/living/carbon/human/get_footprint_sprite() var/obj/item/bodypart/leg/L = get_bodypart(BODY_ZONE_R_LEG) || get_bodypart(BODY_ZONE_L_LEG) return shoes?.footprint_sprite || L?.footprint_sprite diff --git a/code/modules/mob/living/carbon/human/species_types/abductors.dm b/code/modules/mob/living/carbon/human/species_types/abductors.dm index 74d2bedf3a7..1eae13b0a5b 100644 --- a/code/modules/mob/living/carbon/human/species_types/abductors.dm +++ b/code/modules/mob/living/carbon/human/species_types/abductors.dm @@ -19,7 +19,6 @@ mutantlungs = null mutantbrain = /obj/item/organ/internal/brain/abductor changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_PRIDE | MIRROR_MAGIC | RACE_SWAP | ERT_SPAWN | SLIME_EXTRACT - ass_image = 'icons/ass/assgrey.png' bodypart_overrides = list( BODY_ZONE_HEAD = /obj/item/bodypart/head/abductor, diff --git a/code/modules/mob/living/carbon/human/species_types/felinid.dm b/code/modules/mob/living/carbon/human/species_types/felinid.dm index 2ec02dee2b4..615b439a7e3 100644 --- a/code/modules/mob/living/carbon/human/species_types/felinid.dm +++ b/code/modules/mob/living/carbon/human/species_types/felinid.dm @@ -20,7 +20,6 @@ changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_PRIDE | MIRROR_MAGIC | RACE_SWAP | ERT_SPAWN | SLIME_EXTRACT species_language_holder = /datum/language_holder/felinid payday_modifier = 1.0 - ass_image = 'icons/ass/asscat.png' family_heirlooms = list(/obj/item/toy/cattoy) /// When false, this is a felinid created by mass-purrbation var/original_felinid = TRUE diff --git a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm index 2fed7a7351d..1d09e4b986d 100644 --- a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm @@ -30,7 +30,6 @@ changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_PRIDE | MIRROR_MAGIC | RACE_SWAP | ERT_SPAWN | SLIME_EXTRACT inherent_factions = list(FACTION_SLIME) species_language_holder = /datum/language_holder/jelly - ass_image = 'icons/ass/assslime.png' bodypart_overrides = list( BODY_ZONE_L_ARM = /obj/item/bodypart/arm/left/jelly, diff --git a/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm b/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm index 1d431fdb546..f15ffdf819b 100644 --- a/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm @@ -34,8 +34,6 @@ bodytemp_heat_damage_limit = BODYTEMP_HEAT_LAVALAND_SAFE bodytemp_cold_damage_limit = (BODYTEMP_COLD_DAMAGE_LIMIT - 10) - ass_image = 'icons/ass/asslizard.png' - bodypart_overrides = list( BODY_ZONE_HEAD = /obj/item/bodypart/head/lizard, BODY_ZONE_CHEST = /obj/item/bodypart/chest/lizard, diff --git a/code/modules/mob/living/carbon/human/species_types/plasmamen.dm b/code/modules/mob/living/carbon/human/species_types/plasmamen.dm index b6fe0234bac..fe18e15c1d4 100644 --- a/code/modules/mob/living/carbon/human/species_types/plasmamen.dm +++ b/code/modules/mob/living/carbon/human/species_types/plasmamen.dm @@ -51,8 +51,6 @@ // This effects how fast body temp stabilizes, also if cold resit is lost on the mob bodytemp_cold_damage_limit = (BODYTEMP_COLD_DAMAGE_LIMIT - 50) // about -50c - ass_image = 'icons/ass/assplasma.png' - outfit_override_registry = list( /datum/outfit/syndicate = /datum/outfit/syndicate/plasmaman, /datum/outfit/syndicate/full = /datum/outfit/syndicate/full/plasmaman, diff --git a/code/modules/mob/living/carbon/human/species_types/podpeople.dm b/code/modules/mob/living/carbon/human/species_types/podpeople.dm index a28cd78e708..a07e8bcc6bb 100644 --- a/code/modules/mob/living/carbon/human/species_types/podpeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/podpeople.dm @@ -29,8 +29,6 @@ BODY_ZONE_CHEST = /obj/item/bodypart/chest/pod, ) - ass_image = 'icons/ass/asspodperson.png' - /datum/species/pod/on_species_gain(mob/living/carbon/new_podperson, datum/species/old_species, pref_load) . = ..() if(ishuman(new_podperson)) diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index 0a358ada801..e21fb921429 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -2331,6 +2331,9 @@ GLOBAL_LIST_EMPTY(fire_appearances) /mob/living/proc/is_face_visible() return TRUE +/// Sprite to show for photocopying mob butts +/mob/living/proc/get_butt_sprite() + return null ///Proc to modify the value of num_legs and hook behavior associated to this event. /mob/living/proc/set_num_legs(new_value) diff --git a/code/modules/mob/living/silicon/silicon.dm b/code/modules/mob/living/silicon/silicon.dm index e6e1d08f515..67f6a63a6b6 100644 --- a/code/modules/mob/living/silicon/silicon.dm +++ b/code/modules/mob/living/silicon/silicon.dm @@ -436,6 +436,9 @@ /mob/living/silicon/on_standing_up() return // Silicons are always standing by default. +/mob/living/silicon/get_butt_sprite() + return BUTT_SPRITE_QR_CODE + /** * Records an IC event log entry in the cyborg's internal tablet. * diff --git a/code/modules/mob/living/simple_animal/hostile/alien.dm b/code/modules/mob/living/simple_animal/hostile/alien.dm index 593bf29535e..8ce6d28f2ab 100644 --- a/code/modules/mob/living/simple_animal/hostile/alien.dm +++ b/code/modules/mob/living/simple_animal/hostile/alien.dm @@ -110,6 +110,9 @@ egg_cooldown = initial(egg_cooldown) LayEggs() +/mob/living/simple_animal/hostile/alien/get_butt_sprite() + return BUTT_SPRITE_XENOMORPH + /mob/living/simple_animal/hostile/alien/proc/SpreadPlants() if(!isturf(loc) || isspaceturf(loc)) return diff --git a/code/modules/paperwork/photocopier.dm b/code/modules/paperwork/photocopier.dm index e5a30474f87..4b495ae9148 100644 --- a/code/modules/paperwork/photocopier.dm +++ b/code/modules/paperwork/photocopier.dm @@ -199,7 +199,7 @@ GLOBAL_LIST_INIT(paper_blanks, init_paper_blanks()) else to_chat(usr, span_notice("You feel kind of silly, copying [ass]\'s ass with [ass.p_their()] clothes on.")) return FALSE - do_copies(CALLBACK(src, PROC_REF(make_ass_copy), usr), usr, ASS_PAPER_USE, ASS_TONER_USE, num_copies) + do_copies(CALLBACK(src, PROC_REF(make_ass_copy)), usr, ASS_PAPER_USE, ASS_TONER_USE, num_copies) return TRUE else // Basic paper @@ -489,24 +489,13 @@ GLOBAL_LIST_INIT(paper_blanks, init_paper_blanks()) * Calls `check_ass()` first to make sure that `ass` exists, among other conditions. Since this proc is called from a timer, it's possible that it was removed. * Additionally checks that the mob has their clothes off. */ -/obj/machinery/photocopier/proc/make_ass_copy(mob/user) +/obj/machinery/photocopier/proc/make_ass_copy() if(!check_ass()) return null - var/icon/temp_img - if(ishuman(ass)) - var/mob/living/carbon/human/H = ass - var/datum/species/spec = H.dna.species - if(spec.ass_image) - temp_img = icon(spec.ass_image) - else - temp_img = icon(ass.gender == FEMALE ? 'icons/ass/assfemale.png' : 'icons/ass/assmale.png') - else if(isalienadult(ass)) //Xenos have their own asses, thanks to Pybro. - temp_img = icon('icons/ass/assalien.png') - else if(issilicon(ass)) - temp_img = icon('icons/ass/assmachine.png') - else if(isdrone(ass)) //Drones are hot - temp_img = icon('icons/ass/assdrone.png') - + var/butt_icon_state = ass.get_butt_sprite() + if(isnull(butt_icon_state)) + return null + var/icon/temp_img = icon('icons/mob/butts.dmi', butt_icon_state) var/obj/item/photo/copied_ass = new /obj/item/photo(src) var/datum/picture/toEmbed = new(name = "[ass]'s Ass", desc = "You see [ass]'s ass on the photo.", image = temp_img) toEmbed.psize_x = 128 @@ -629,7 +618,7 @@ GLOBAL_LIST_INIT(paper_blanks, init_paper_blanks()) * Returns FALSE if `ass` doesn't exist or is not at the copier's location. Returns TRUE otherwise. */ /obj/machinery/photocopier/proc/check_ass() //I'm not sure wether I made this proc because it's good form or because of the name. - if(!ass) + if(!isliving(ass)) return FALSE if(ass.loc != loc) ass = null diff --git a/code/modules/surgery/bodyparts/parts.dm b/code/modules/surgery/bodyparts/parts.dm index ead03aa0f70..22450ca793d 100644 --- a/code/modules/surgery/bodyparts/parts.dm +++ b/code/modules/surgery/bodyparts/parts.dm @@ -69,6 +69,15 @@ cavity_item = null return ..() +/// Sprite to show for photocopying mob butts +/obj/item/bodypart/chest/proc/get_butt_sprite() + if(!ishuman(owner)) + return null + var/mob/living/carbon/human/human_owner = owner + var/butt_sprite = human_owner.physique == FEMALE ? BUTT_SPRITE_HUMAN_FEMALE : BUTT_SPRITE_HUMAN_MALE + var/obj/item/organ/external/tail/tail = human_owner.get_organ_slot(ORGAN_SLOT_EXTERNAL_TAIL) + return tail?.get_butt_sprite() || butt_sprite + /obj/item/bodypart/chest/monkey icon = 'icons/mob/human/species/monkey/bodyparts.dmi' icon_static = 'icons/mob/human/species/monkey/bodyparts.dmi' diff --git a/code/modules/surgery/bodyparts/species_parts/lizard_bodyparts.dm b/code/modules/surgery/bodyparts/species_parts/lizard_bodyparts.dm index ec60375c8d1..16a4ac6ea2a 100644 --- a/code/modules/surgery/bodyparts/species_parts/lizard_bodyparts.dm +++ b/code/modules/surgery/bodyparts/species_parts/lizard_bodyparts.dm @@ -10,6 +10,9 @@ is_dimorphic = TRUE wing_types = list(/obj/item/organ/external/wings/functional/dragon) +/obj/item/bodypart/chest/lizard/get_butt_sprite() + return BUTT_SPRITE_LIZARD + /obj/item/bodypart/arm/left/lizard icon_greyscale = 'icons/mob/human/species/lizard/bodyparts.dmi' limb_id = SPECIES_LIZARD diff --git a/code/modules/surgery/bodyparts/species_parts/misc_bodyparts.dm b/code/modules/surgery/bodyparts/species_parts/misc_bodyparts.dm index 30f34cb35d0..93f3e09145b 100644 --- a/code/modules/surgery/bodyparts/species_parts/misc_bodyparts.dm +++ b/code/modules/surgery/bodyparts/species_parts/misc_bodyparts.dm @@ -60,6 +60,9 @@ should_draw_greyscale = FALSE wing_types = NONE +/obj/item/bodypart/chest/abductor/get_butt_sprite() + return BUTT_SPRITE_GREY + /obj/item/bodypart/arm/left/abductor limb_id = SPECIES_ABDUCTOR should_draw_greyscale = FALSE @@ -95,6 +98,9 @@ burn_modifier = 0.5 // = 1/2x generic burn damage wing_types = list(/obj/item/organ/external/wings/functional/slime) +/obj/item/bodypart/chest/jelly/get_butt_sprite() + return BUTT_SPRITE_SLIME + /obj/item/bodypart/arm/left/jelly biological_state = (BIO_FLESH|BIO_BLOODED) limb_id = SPECIES_JELLYPERSON @@ -230,6 +236,9 @@ burn_modifier = 1.25 wing_types = NONE +/obj/item/bodypart/chest/pod/get_butt_sprite() + return BUTT_SPRITE_FLOWERPOT + /obj/item/bodypart/arm/left/pod limb_id = SPECIES_PODPERSON unarmed_attack_verb = "slash" diff --git a/code/modules/surgery/bodyparts/species_parts/moth_bodyparts.dm b/code/modules/surgery/bodyparts/species_parts/moth_bodyparts.dm index a6dfc027d00..6acf6d399bc 100644 --- a/code/modules/surgery/bodyparts/species_parts/moth_bodyparts.dm +++ b/code/modules/surgery/bodyparts/species_parts/moth_bodyparts.dm @@ -17,6 +17,9 @@ should_draw_greyscale = FALSE wing_types = list(/obj/item/organ/external/wings/functional/moth/megamoth, /obj/item/organ/external/wings/functional/moth/mothra) +/obj/item/bodypart/chest/moth/get_butt_sprite() + return BUTT_SPRITE_FUZZY + /obj/item/bodypart/arm/left/moth icon = 'icons/mob/human/species/moth/bodyparts.dmi' icon_state = "moth_l_arm" diff --git a/code/modules/surgery/bodyparts/species_parts/plasmaman_bodyparts.dm b/code/modules/surgery/bodyparts/species_parts/plasmaman_bodyparts.dm index 8ba27c2cdf9..40bf4a51c04 100644 --- a/code/modules/surgery/bodyparts/species_parts/plasmaman_bodyparts.dm +++ b/code/modules/surgery/bodyparts/species_parts/plasmaman_bodyparts.dm @@ -26,6 +26,9 @@ bodypart_flags = BODYPART_UNHUSKABLE wing_types = NONE +/obj/item/bodypart/chest/plasmaman/get_butt_sprite() + return BUTT_SPRITE_PLASMA + /obj/item/bodypart/arm/left/plasmaman icon = 'icons/mob/human/species/plasmaman/bodyparts.dmi' icon_state = "plasmaman_l_arm" diff --git a/code/modules/surgery/organs/external/tails.dm b/code/modules/surgery/organs/external/tails.dm index 5a9ffad05d3..2dbafaf0d6d 100644 --- a/code/modules/surgery/organs/external/tails.dm +++ b/code/modules/surgery/organs/external/tails.dm @@ -126,6 +126,9 @@ UnregisterSignal(organ_owner, COMSIG_LIVING_DEATH) return succeeded +/obj/item/organ/external/tail/proc/get_butt_sprite() + return null + ///Tail parent type, with wagging functionality /datum/bodypart_overlay/mutant/tail layers = EXTERNAL_FRONT|EXTERNAL_BEHIND @@ -153,6 +156,9 @@ wag_flags = WAG_ABLE +/obj/item/organ/external/tail/cat/get_butt_sprite() + return BUTT_SPRITE_CAT + ///Cat tail bodypart overlay /datum/bodypart_overlay/mutant/tail/cat feature_key = "tail" // NOVA EDIT - Customization - ORIGINAL: feature_key = "tail_cat" diff --git a/icons/ass/assalien.png b/icons/ass/assalien.png deleted file mode 100644 index 7ac184aa04be0b8a6dce0b8ce06bda912ffdc8c3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1306 zcmV+#1?BpQP)yIiHL`Sfq;>Z zk5*PyEG#RQm6VH$iEeIfL_|b(b#yf~G<$n`V`5=>cz9r6UnV9dOG`?BetmOtadmZc z0002=^z-oV?(OXB@$m2O?(B+*h@zpO?Ca{p!@=n1<>lky>FDML1_tx<^7HcX=H=tz z-`?Qf-1heM_4M@F*w)n3(aOok>+0z0>F4L>9etma#b=TI^($UYqzP!7-xwNyfv9PbNuB@%As)&Y$_4f7K+S$Fly1KZwxVN>d zs;Gg0e|&s_v zQ~v(`{{8#@{{H^{{QLg?{`~s>{{H*>`~Lg>`}g(z{P*(m=)J3FOaK4_KuJVFR5;6Z zlhu~uKoEu-*BOSfb%%r)2@)hBAqnp8?y$hf+VgKi=Iq_pO`q=i%KH2TT>mj2w9^S* zt_jOA@y~a>eSUg+zWtT(sesRNd1KaDZ{Dhi5{cKZY}Xp1O=z?R^K+lux3|aGeYmLa7-A!@V&SC52#WxURkj zmR?!PLW*>rE5QODzuWKkpekUN z+oJ&*Sccv3{!P^bxO}fuA*#?$A?k zSt~!gp#37G$wZp$I?7&u2KGv?Z|o|HR->F3 QcK`qY07*qoM6N<$g7v$oxBvhE diff --git a/icons/ass/asscat.png b/icons/ass/asscat.png deleted file mode 100644 index e37788e3dd734efa5d7968be2c479ef249ae3084..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 980 zcmV;_11tQAP)t8N$NCrlzLd-QCmE(=swL(b3Vy#>Ou%FX7?gv$L~FNl86D zJtih56%`fb<>lk!<3B$?y1KfVnVEimemOZgtgNi4sHk*wbYWp(LPA0v9UZo|wq9Od zH#axm-`~p0%DlY1p`oFVkB^9mh-+(WS65d|OiVyPKo1WOdU|?iXJ=$&WKvR6Pft(T z+1bp@%*e>dxVX5mu&|?}qn(|dmX?-xcXvicMjsy^>FMd`=jYDO&Xkmti;IhdgoJ^C zfp2ebSy@?;k&%Ukh3o6c0RsF5#qYRR57|^sT8BaWN|1vHi zX_qrzeAv$oHKS&9_Z9F`?n7!wrnUWF9Md9|EjJ0bumbQawaQglWh;jxxo>5|GLC!T zt^RTbRcZOx{ztzUw1Pn~x^9Le;q6%fAq3f9OC&#~vb!v|&Pmg?E<*?VzJf5emlLtE zKj15WJi0V>dSWi^vHBzdVb-J%fA)t)+s#^cudVMzrgO@-PZD zF6uNlJGY3>xGG;rv2oDFw#b>O-CuHTdP3t2wQ;nE!f}u=Vxu9pY5eHg`7N2@ID=Lv z4PXU;NMc$?0D8hqDPJz%d5&QioaNUG_cV)-wr_N4bzq`xzc@Tnn z9f>Q*#cE|)o4d37YPHhJZNCU1BnS0wmCxfGP+=EC(a@IgAjnN;n$&`IwDr8W7m9<@fENgx?bf6f{wk zXXOe}k65L=G|8@Yd&-Rfa9dp0lGJ=JquMU+4JdxPNbg@mhhbPv7~QOeIhWQ2Q6rqO zZSuT#8AI&*-D_pv>zdLc3wO212~x>yt~T4~QT`uEJWxxMtMV%V00004P)f77f)z#G(7Z*Q2Kg`U`YHDg)T3Y4h z<jFE1q}C1z%3U0q#LQc^N9GAk=9$;ruXZf+tXBJAw!;o;%k-Q9S|qsHCK%l$4ZxeSLU%cyV!YMn*>W_xHoY!@s}3wzjsjv$L(O zt&@|Ji;IhMb936-+MAo3mzS5Zv9XVjk75Em#Q*>Ts7XXYR5;6xljm~cFcgIsOYXgQ zaKjj5Ooz~WCwc$JSpy-P?99&W`Jo@apU>5mbbkG}O3$VAukts&u%C4VkSt4*NTCPy zH-L~$Tea#SxqxI&7}7NlyI$sYv5s@%YgMA1kaBa0gjS8>)vz8SFU zDiVTYZ`up=G_9s)y`FN~9|F-<#(c7=;T1?9=83!Lp9La{^RFgsEF^o`hwJqkZa=1- zvAmfCZj^zS!H78SYdBt6uixapB-$7`-`0&nbW{2Hma0^NzE@Xw^7USfWf&w2VxWR@bw1s-+q=$jInX`<&{X5JZdQkxmY0AfhNmP+Lf2ID z((6g*BTG>%yKHL+up14oS~tX%s*x|Ctc|ROqNs{BLXeTd#lyiMRxAyao|yv5{U6bY z%-AX%2Bv5jVpLyc;GQ6)2$eE44METeqRx@Piio8v5QLa=04dT@EFd#=VR^oPuI41C zyZ!#cbqO)PC-D~x0Ga8Fei-)8XWeYFVn4in%z|VtWF!FKHw(K~OaJe#@&Et;07*qo IM6N<$g7GZaP5=M^ diff --git a/icons/ass/assgrey.png b/icons/ass/assgrey.png deleted file mode 100644 index 60dde099510cfedf2035c2f88a58d583c66fd731..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1074 zcmV-21kL-2P)udlDJuC9`jlJ4&AmX?+yl8xE`00Ra|L_t(I%QaHhcB3#9)PfqlcQCkuaqqpC zB%A#I_pGq9x(`>H(VfxJ834eacfB@j0r1*^AIYZi}5&* z1W$(wQ-Pd9pS#wkf8VrP!$riTcEjPQGvB90slOhK++n?W`{^~;z4~C0Z=Jj2^#9gd zPCIou1#nQ`H;=2ZF`YERulhW>uY0Ficu>{T-wnYs0P?sWFPE7)S!R=oIvA**;o+-c zui}Z?tZ5$L%CjojwiQc~9ZR9pZZu3YHf=+creAGBflOu-GZRHa41CF&wmJthizOrW zMac|X1Or@Ki%a_&Sfc3LR_F{qrBxOiQefDzSuYTf=S|TTuR-wPTZVBw?|Q4LWLdUo z`M#u%Jb(th%m}XE;s5rx+TGXHPt*Dktq;jO?gW6_YjwI3McY^%dhHq!^46>wFN44j z%;{;50P5VE>oAkdSXDP^S3^S5YEDhl7PG^#A7S7no1a-2hM#JGQ;T#N>+W{FZm5|t zZKxvw0-5yd_1mfbxBbXH#KMGxg){5jj)$+)Pf9qzYyDaO+!@VDSBDU?G|Jj#)1K8& zH)l{QDS)&yI}gX?S(b{7Sy-W>yG3&DIL`L*#1QCs;XG0|5_F0Yt>T5Kpyi|5VzjMc zUICQTYL~7cxE|7FnQ|CuR3O5IxQj%?yayB*Y2&=;7DXfoltKkZLN^r%8IN4-As#@l zaNTiw$&*F*DX>sufsB)UG@M^ts#nPt+|=Fg=c6riB1orH%WK=+xz$NXH$D)d s9eecfkr#SdYEe3GIqYBBX+bFc2WP`w>?yP>0{{R307*qoM6N<$f<@c{IRF3v diff --git a/icons/ass/asslizard.png b/icons/ass/asslizard.png deleted file mode 100644 index 38d82d9754c53c4a87bcd95b7235b90bbc94c521..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1121 zcmV-n1fKheP)FHKhR`m4rv3Un-0009xNkl!J z{r~?Q4;YwP?MMOyHRX58NCq;@wT2dTI_`9@${0!YTD?{SNfNsPs3tpZ*L9uk+gt9u zrHT;Lm0GTeQs4Z99cB$XHYYvSytE7^EL3n^VD0K;W zg?1nMb4q=GX$Hfa=5j?59t0|hMs(hV^Efc8m~n&4OpW`Cm?%n3NQgH8wcKavhZ0E! zj4=XavSs0T2PAo3lLR9&;X)8x5Yts*K*fVq=q>3IFf?5lTjxyl;X@O6rw ztI?m0W-5TI-Fh?rd9B~y+_riLw#bq&o4&`F(P(1n!h^9(C*z+@y2{pTq3Rb_Cp|uo zqhoTpyd4a3(3m{Nqeo{QO_Jlz@Q2nnd%V+dlU#mY9tPC1qRpQ_qiowr_erA~-rHK< z4PW79wE9V#1k}ZL^Xy!b&G?$1x?dwGI^F2DjlzGU@v-X>Fc(&PGr4Z2)8?!@EexZ$ z+jj4BdtIL6_U$eh+|JADtVhRox4Uh$s>5Js6}@IYUUeRAdoN7JSvZ-jA4z(Q@}|z! zprpg^WV;&O-dC%K0L-2pZj(upU9Dz|VU@?NnRT4n?N7tr6&OGre5_Bh{_gDQ-Vj+O zd^q1nx7@Zp@7^*&;<4)w?=q~4ra!~4=5sbzE5{$6Q4o2zB zC{h6{vN@neTpnUZI7Si?FgDMO1;YWC2q=QlY*9aEWxy&V%Y-mi>3X13$}12OqGAkP zXF)|5Lo&kb9MG0NEa}JgQ0Ncw*DHWagc!^=9j%*-k51_ nS#i@;ed;)~S<&yuI#JPo@wjJ<+;O(h00000NkvXXu0mjfGmIPf diff --git a/icons/ass/assmachine.png b/icons/ass/assmachine.png deleted file mode 100644 index 2ba447306c47cbca0145b44c58fefb031e8e2bc8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 246 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnL3?x0byx0z;*aCb)T>t<74`hZOx?BgOR(rZQ zhH%VeT)+?y6g6j;WT@Y`^$r8yx&$8vx5Z+D3`zTe$}{HwV_?WwAoPzRXWG0bhWci+ zT?`C5OuHEN|6jF>VZCxf6GMO2xql3K$yp2xdH)4k8F+kW+cK|*>RLlSX diff --git a/icons/ass/assmale.png b/icons/ass/assmale.png deleted file mode 100644 index d215bc31e0979ea1514228fa51df1c0766467765..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1109 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 diff --git a/icons/ass/assslime.png b/icons/ass/assslime.png deleted file mode 100644 index 9102dce7de10ea06027b41645de69ec4b481c132..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1016 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