diff --git a/code/__defines/flags.dm b/code/__defines/flags.dm index 0d06544a7e4..eccfb7d30a1 100644 --- a/code/__defines/flags.dm +++ b/code/__defines/flags.dm @@ -43,6 +43,7 @@ GLOBAL_LIST_INIT(bitflags, list(1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 204 #define BLOCK_GAS_SMOKE_EFFECT (1<<3) // Blocks the effect that chemical clouds would have on a mob -- glasses, mask and helmets ONLY! (NOTE: flag shared with ONESIZEFITSALL) #define FLEXIBLEMATERIAL (1<<4) // At the moment, masks with this flag will not prevent eating even if they are covering your face. #define ALLOW_SURVIVALFOOD (1<<5) // Allows special survival food items to be eaten through it +#define INFINITE_AIR (1<<6) // Provides an infinite air supply. // Flags for pass_flags. - Used in /atom/var/pass_flags #define PASSTABLE (1<<0) diff --git a/code/modules/mob/living/carbon/human/human_defines.dm b/code/modules/mob/living/carbon/human/human_defines.dm index f2e09405ee4..2a0bf0dc140 100644 --- a/code/modules/mob/living/carbon/human/human_defines.dm +++ b/code/modules/mob/living/carbon/human/human_defines.dm @@ -161,3 +161,5 @@ // Custom Species Name var/custom_species + + var/block_hud \ No newline at end of file diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index 115c9defdc3..12e7fa470ce 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -537,6 +537,11 @@ suiciding-- return 0 + if(wear_mask && (wear_mask.item_flags & INFINITE_AIR)) + failed_last_breath = 0 + adjustOxyLoss(-5) + return + if(does_not_breathe) failed_last_breath = 0 adjustOxyLoss(-5) @@ -1972,6 +1977,8 @@ holder.icon_state = "-100" // X_X else holder.icon_state = RoundHealth((health-config.health_threshold_crit)/(getMaxHealth()-config.health_threshold_crit)*100) + if(block_hud) + holder.icon_state = "hudblank" apply_hud(HEALTH_HUD, holder) if (BITTEST(hud_updateflag, LIFE_HUD)) @@ -1982,6 +1989,8 @@ holder.icon_state = "huddead" else holder.icon_state = "hudhealthy" + if(block_hud) + holder.icon_state = "hudblank" apply_hud(LIFE_HUD, holder) if (BITTEST(hud_updateflag, STATUS_HUD)) @@ -2013,6 +2022,9 @@ holder2.icon_state = "hudill" else holder2.icon_state = "hudhealthy" + if(block_hud) + holder.icon_state = "hudblank" + holder2.icon_state = "hudblank" apply_hud(STATUS_HUD, holder) apply_hud(STATUS_HUD_OOC, holder2) @@ -2028,6 +2040,8 @@ else holder.icon_state = "hudunknown" + if(block_hud) + holder.icon_state = "hudblank" apply_hud(ID_HUD, holder) if (BITTEST(hud_updateflag, WANTED_HUD)) @@ -2054,7 +2068,8 @@ else if((R.fields["id"] == E.fields["id"]) && (R.fields["criminal"] == "Released")) holder.icon_state = "hudreleased" break - + if(block_hud) + holder.icon_state = "hudblank" apply_hud(WANTED_HUD, holder) if ( BITTEST(hud_updateflag, IMPLOYAL_HUD) \ diff --git a/code/modules/mob/living/carbon/human/life_vr.dm b/code/modules/mob/living/carbon/human/life_vr.dm index 8e52e3daafa..126fb01012f 100644 --- a/code/modules/mob/living/carbon/human/life_vr.dm +++ b/code/modules/mob/living/carbon/human/life_vr.dm @@ -21,6 +21,8 @@ var/image/other_status = hud_list[STATUS_HUD] var/image/status_r = grab_hud(STATUS_R_HUD) status_r.icon_state = other_status.icon_state + if(block_hud) + status_r.icon_state = "hudblank" apply_hud(STATUS_R_HUD, status_r) //Our custom health bar HUD @@ -28,6 +30,8 @@ var/image/other_health = hud_list[HEALTH_HUD] var/image/health_us = grab_hud(HEALTH_VR_HUD) health_us.icon_state = other_health.icon_state + if(block_hud) + health_us.icon_state = "hudblank" apply_hud(HEALTH_VR_HUD, health_us) //Backup implant hud status @@ -46,7 +50,8 @@ holder.icon_state = "hud_backup_nobody" else holder.icon_state = "hud_backup_norm" - + if(block_hud) + holder.icon_state = "hudblank" apply_hud(BACKUP_HUD, holder) //VOREStation Antag Hud @@ -56,6 +61,8 @@ vantag.icon_state = vantag_pref else vantag.icon_state = "hudblank" + if(block_hud) + vantag.icon_state = "hudblank" apply_hud(VANTAG_HUD, vantag) //Our call for the NIF to do whatever diff --git a/code/modules/mob/living/carbon/human/species/lleill/lleill.dm b/code/modules/mob/living/carbon/human/species/lleill/lleill.dm index 48146df8e8a..5ead8ebb51d 100644 --- a/code/modules/mob/living/carbon/human/species/lleill/lleill.dm +++ b/code/modules/mob/living/carbon/human/species/lleill/lleill.dm @@ -33,6 +33,11 @@ //Specific abilities + var/lleill_energy = 200 + var/lleill_energy_max = 200 + + var/ring_cooldown = 0 + darksight = 10 //Can see in dark burn_mod = 0.25 //Very resistant to fire @@ -43,6 +48,8 @@ warning_high_pressure = 300 hazard_high_pressure = 10000 //Can be killed by pressure but you're going to need a hell of a lot + minimum_breath_pressure = 0 //Doesn't gasp and lungs shouldn't pop + cold_level_1 = -1 //Safe in space cold_level_2 = -1 cold_level_3 = -1 @@ -81,7 +88,9 @@ /mob/living/proc/set_size, /mob/living/carbon/human/proc/lleill_invisibility, /mob/living/carbon/human/proc/lleill_transmute, - /mob/living/carbon/human/proc/lleill_rings) + /mob/living/carbon/human/proc/lleill_rings, + /mob/living/carbon/human/proc/lleill_contact, + /mob/living/carbon/human/proc/lleill_alchemy) //organs, going with just the basics for now diff --git a/code/modules/mob/living/carbon/human/species/lleill/lleill_abilities.dm b/code/modules/mob/living/carbon/human/species/lleill/lleill_abilities.dm index 97ee036c8a7..e428f331a56 100644 --- a/code/modules/mob/living/carbon/human/species/lleill/lleill_abilities.dm +++ b/code/modules/mob/living/carbon/human/species/lleill/lleill_abilities.dm @@ -9,19 +9,35 @@ verbpath = /mob/living/carbon/human/proc/lleill_invisibility /mob/living/carbon/human/proc/lleill_invisibility() - set name = "Invisibility" + set name = "Invisibility (75)" set desc = "Change your appearance to match your surroundings, becoming completely invisible to the naked eye." set category = "Abilities" + var/energy_cost = 75 + + var/datum/species/lleill/LL = species + + if(!istype(LL)) + to_chat(src, "Only a lleill can use that!") + return + if(stat) to_chat(src, "You can't go invisible when weakened like this.") return if(!cloaked) + if(LL.lleill_energy < energy_cost) + to_chat(src, "You do not have enough energy to do that!") + return cloak() + block_hud = 1 + hud_updateflag = 1 to_chat(src, "Your fur shimmers and shifts around you, hiding you from the naked eye.") + LL.lleill_energy -= energy_cost else uncloak() + block_hud = 0 + hud_updateflag = 1 to_chat(src, "The brustling of your fur settles down and you become visible once again.") /mob/living/carbon/human/proc/lleill_select_shape() @@ -81,20 +97,34 @@ regenerate_icons() /mob/living/carbon/human/proc/lleill_transmute() - set name = "Transmute Object" + set name = "Transmute Object (50)" set desc = "Convert an object into a piece of glamour." set category = "Abilities" var/list/transmute_list = list( - /obj/item/weapon/potion_material/glamour_transparent, - /obj/item/weapon/potion_material/glamour_shrinking, - /obj/item/weapon/potion_material/glamour_twinkling, - /obj/item/weapon/potion_material/glamour_shard, - /obj/item/capture_crystal/glamour, - /obj/item/glamour_face, - /obj/item/device/universal_translator/glamour + "Transparent Glamour" = /obj/item/weapon/potion_material/glamour_transparent, + "Shrinking Glamour" = /obj/item/weapon/potion_material/glamour_shrinking, + "Twinkling Glamour" = /obj/item/weapon/potion_material/glamour_twinkling, + "Glamour Shard" = /obj/item/weapon/potion_material/glamour_shard, + "Glamour Cell" = /obj/item/capture_crystal/glamour, + "Face of Glamour" = /obj/item/glamour_face, + "Speaking Glamour" = /obj/item/device/universal_translator/glamour, + "Glamour Bubble" = /obj/item/clothing/mask/gas/glamour, + "Pocket of Glamour" = /obj/item/clothing/under/permit/glamour ) + var/energy_cost = 50 + + var/datum/species/lleill/LL = species + + if(!istype(LL)) + to_chat(src, "Only a lleill can use that!") + return + + if(LL.lleill_energy < energy_cost) + to_chat(src, "You do not have enough energy to do that!") + return + if(stat) to_chat(src, "You can't go do that when weakened like this.") return @@ -104,7 +134,13 @@ to_chat(src, "You have no item in your active hand.") return - var/obj/item/transmute_product = tgui_input_list(src, "Choose an glamour to transmute the item into:", "Transmutation", transmute_list) + var/choice = tgui_input_list(src, "Choose a glamour to transmute the item into:", "Transmutation", transmute_list) + + if(!choice) + return + var/obj/item/transmute_product = transmute_list[choice] + + if(!get_active_hand(I)) to_chat(src, "The item is no longer in your hands.") return @@ -113,36 +149,54 @@ if(!do_after(usr, 10 SECONDS, I, exclusive = TASK_USER_EXCLUSIVE)) visible_message("\The [src] leaves \the [I] in its original form.") return 0 - visible_message("\The [src] transmutes \the [I] into a \the [transmute_product.name].") + visible_message("\The [src] transmutes \the [I] into \the [transmute_product.name].") drop_item(I) qdel(I) var/spawnloc = get_turf(usr) var/obj/item/N = new transmute_product(spawnloc) put_in_active_hand(N) + LL.lleill_energy -= energy_cost /mob/living/carbon/human/proc/lleill_rings() set name = "Place/Use Rings" set desc = "Place or teleport to a glamour ring." set category = "Abilities" + var/energy_cost_multi = src.teleporters.len + var/energy_cost_spawn = (25 * energy_cost_multi) + var/energy_cost_tele = 50 + + var/datum/species/lleill/LL = species + + if(!istype(LL)) + to_chat(src, "Only a lleill can use that!") + return if(stat) to_chat(src, "You can't go do that when weakened like this.") return if(buckled) to_chat(src,"You can't do that when restrained.") - var/r_action = tgui_alert(src, "What would you like to do with your rings?", "Actions", list("Spawn New Ring", "Teleport to Ring", "Cancel")) + var/r_action = tgui_alert(src, "What would you like to do with your rings? You currently have [LL.lleill_energy] energy remaining.", "Actions", list("Spawn New Ring ([energy_cost_spawn])", "Teleport to Ring ([energy_cost_tele])", "Cancel")) if(r_action == "Cancel") return - if(r_action == "Spawn New Ring") + if(findtext(r_action,"Spawn New Ring")) + if(LL.lleill_energy < energy_cost_spawn) + to_chat(src, "You do not have enough energy to do that!") + return if(!do_after(src, 10 SECONDS, src, exclusive = TASK_USER_EXCLUSIVE)) src.visible_message("\The [src] begins to form white rings on the ground.") return 0 to_chat(src, "You place a new glamour ring at your feet.") var/spawnloc = get_turf(src) var/obj/structure/glamour_ring/R = new(spawnloc) + R.connected_mob = src src.teleporters |= R - if(r_action == "Teleport to Ring") + LL.lleill_energy -= energy_cost_spawn + if(findtext(r_action,"Teleport to Ring")) + if(LL.lleill_energy < energy_cost_tele) + to_chat(src, "You do not have enough energy to do that!") + return if(!src.teleporters.len) to_chat(src, "You need to place rings to teleport to them.") return @@ -160,6 +214,7 @@ var/S = get_turf(R) src.forceMove(S) + LL.lleill_energy -= energy_cost_tele spk.start() playsound(S, 'sound/effects/phasein.ogg', 25, 1) @@ -177,3 +232,139 @@ M.forceMove(vore_selected) to_chat(M,"In a bright flash of white light, you suddenly find yourself trapped in \the [src]'s [vore_selected.name]!") +/mob/living/carbon/human/proc/lleill_contact() + set name = "Energy Transfer" + set desc = "Take the energy of another creature by making physical contact with them, the other party must consent. This will make them feel drained." + set category = "Abilities" + if(!ishuman(src)) + return //If you're not a human you don't have permission to do this. + var/datum/species/lleill/LL = species + + var/list/contact_options = list( + "Kiss (lips)", + "Kiss (neck)", + "Bite (neck)", + "Bite (wrist)", + "Hold Hand", + "Embrace", + "Boop (nose)", + "Stroke (hair)", + "Custom" + ) + + if(!istype(LL)) + to_chat(src, "Only a lleill can use that!") + return + if(stat) + to_chat(src, "You can't go do that when weakened like this.") + return + + var/list/targets = list() + for(var/mob/living/carbon/human/M in mob_list) + if(M.z != src.z || get_dist(src,M) > 1) + continue + if(src == M) + continue + targets |= M + + if(!targets) + to_chat(src, "There is nobody next to you.") + return + var/mob/living/carbon/human/chosen_target = tgui_input_list(src, "Who do you wish to take energy from?", "Make contact", targets) + if(!chosen_target) + return + + var/contact_type = tgui_input_list(src, "How do you wish to make contact with \the [chosen_target]?", "Contact type", contact_options) + if(!contact_type) + return + + var/custom_text + if(contact_type == "Custom") + custom_text = tgui_input_text(src, "Write a description of how you make contact with \the [chosen_target], from a third person perspective.", "Custom contact") + + var/accepted = tgui_alert(chosen_target, "Do you accept the [contact_type] physical contact from \the [src]?", "Actions", list("Yes", "No")) + if(get_dist(src,chosen_target) > 1) + to_chat(src, "You need to be standing next to [chosen_target].") + return + if(accepted == "No") + to_chat(src, "\The [chosen_target] refuses the contact.") + return + if(accepted == "Yes") + if(contact_type == "Kiss (lips)") + src.visible_message("\The [src] presses their lips up against [chosen_target]'s own.") + if(contact_type == "Kiss (neck)") + src.visible_message("\The [src] presses their lips up against [chosen_target]'s neck.") + if(contact_type == "Bite (neck)") + src.visible_message("\The [src] bites down on [chosen_target]'s neck.") + if(contact_type == "Bite (wrist)") + src.visible_message("\The [src] bites down on [chosen_target]'s wrist.") + if(contact_type == "Hold Hand") + src.visible_message("\The [src] takes [chosen_target]'s hand into their own.") + if(contact_type == "Embrace") + src.visible_message("\The [src] embraces [chosen_target].") + if(contact_type == "Stroke (hair)") + src.visible_message("\The [src] runs their hand through [chosen_target]'s hair.") + if(contact_type == "Boop (nose)") + src.visible_message("\The [src] boops [chosen_target] on the nose.") + if(contact_type == "Custom") + src.visible_message("[custom_text]") + if(!do_after(src, 10 SECONDS, chosen_target, exclusive = TASK_USER_EXCLUSIVE)) + return + else + src.visible_message("\The [src] and \the [chosen_target] break contact before energy has been transferred.") + src.visible_message("\The [src] and \the [chosen_target] complete their contact.") + LL.lleill_energy = LL.lleill_energy_max + nutrition += (chosen_target.nutrition / 2) + to_chat(src, "You feel revitalised.") + chosen_target.tiredness += 70 + chosen_target.nutrition = max((chosen_target.nutrition / 2),75) + chosen_target.remove_blood(40) //removes enough blood to make them feel a bit woozy, mostly just for flavour + chosen_target.eye_blurry += 20 + to_chat(chosen_target, "You feel considerably weakened for the moment.") + +/mob/living/carbon/human/proc/lleill_alchemy() + set name = "Alchemy (25)" + set desc = "Convert a potion material into a potion without the use of a base or alembic." + set category = "Abilities" + + var/energy_cost = 25 + + var/datum/species/lleill/LL = species + + if(!istype(LL)) + to_chat(src, "Only a lleill can use that!") + return + + if(LL.lleill_energy < energy_cost) + to_chat(src, "You do not have enough energy to do that!") + return + + if(stat) + to_chat(src, "You can't go do that when weakened like this.") + return + + var/obj/item/weapon/potion_material/I = get_active_hand() + if(!I) + to_chat(src, "You have no item in your active hand.") + return + + if(!istype(I)) + to_chat(src, "\The [I] is not a potion material.") + return + var/obj/item/weapon/reagent_containers/glass/bottle/potion/transmute_product = I.product_potion + + if(!get_active_hand(I)) + to_chat(src, "The item is no longer in your hands.") + return + else + visible_message("\The [src] begins to change the form of \the [I].") + if(!do_after(usr, 10 SECONDS, I, exclusive = TASK_USER_EXCLUSIVE)) + visible_message("\The [src] leaves \the [I] in its original form.") + return 0 + visible_message("\The [src] transmutes \the [I] into \the [transmute_product.name].") + drop_item(I) + qdel(I) + var/spawnloc = get_turf(usr) + var/obj/item/N = new transmute_product(spawnloc) + put_in_active_hand(N) + LL.lleill_energy -= energy_cost diff --git a/code/modules/mob/living/carbon/human/species/lleill/lleill_items.dm b/code/modules/mob/living/carbon/human/species/lleill/lleill_items.dm index 8b724fe8b6b..2a1603e8b88 100644 --- a/code/modules/mob/living/carbon/human/species/lleill/lleill_items.dm +++ b/code/modules/mob/living/carbon/human/species/lleill/lleill_items.dm @@ -139,6 +139,8 @@ return var/mob/living/carbon/human/chosen_target = tgui_input_list(user, "Which target do you wish to create a homunculus of?", "homunculus", targets) + if(!chosen_target) + return var/spawnloc = get_turf(user) var/mob/living/simple_mob/homunculus/H = new(spawnloc) @@ -175,6 +177,43 @@ icon = 'icons/obj/glamour.dmi' icon_state = "translator" +/obj/item/device/universal_translator/glamour/hear_talk(mob/M, list/message_pieces, verb) + if(!listening || !istype(M)) + return + + //Show the "I heard something" animation. + if(mult_icons) + flick("[initial(icon_state)]2",src) + + //Handheld or pocket only. + if(!isliving(loc)) + return + + var/mob/living/L = loc + if(visual && ((L.sdisabilities & BLIND) || L.eye_blind)) + return + if(audio && ((L.sdisabilities & DEAF) || L.ear_deaf)) + return + + // Using two for loops kinda sucks, but I think it's more efficient + // to shortcut past string building if we're just going to discard the string + // anyways. + if(user_understands(M, L, message_pieces)) + return + + var/new_message = "" + + for(var/datum/multilingual_say_piece/S in message_pieces) + if(S.speaking.flags & NONVERBAL) + continue + + new_message += (S.message + " ") + + if(!L.say_understands(null, langset)) + new_message = langset.scramble(new_message) + + to_chat(L, "[src] translates, \"[new_message]\"") + //Teleporter ring /obj/structure/glamour_ring @@ -194,5 +233,58 @@ area_name = A.name name = "[area_name] glamour ring" +/obj/structure/glamour_ring/attack_hand(mob/living/M as mob) + + var/mob/living/carbon/human/L = connected_mob + var/datum/species/lleill/LL = L.species + + var/m_action + if(M == L) + m_action= tgui_alert(M, "Do you want to destroy the ring, or restore energy?", "Destroy ring", list("Yes", "No", "Restore Energy")) + else + m_action= tgui_alert(M, "Do you want to destroy the ring, the owner of it may be aware that you have done this?", "Destroy ring", list("Yes", "No")) + + if(m_action == "No") + return + + if(m_action == "Yes") + to_chat(M, "You begin to break the lines of the glamour ring.") + if(!do_after(M, 10 SECONDS, src, exclusive = TASK_USER_EXCLUSIVE)) + to_chat(M, "You leave the glamour ring alone.") + return + to_chat(M, "You have destroyed \the [src].") + src.visible_message("\The [M] has broken apart \the [src].") + if(M != connected_mob && connected_mob) + to_chat(connected_mob, "\The [src] has been destroyed by \the [M].") + if(istype(LL)) + L.teleporters -= src + qdel(src) + + if(m_action == "Restore Energy") + if(LL.ring_cooldown + 10 MINUTES > world.time) + to_chat(M, "You must wait a while before drawing energy from the glamour again.") + return + if(!do_after(M, 10 SECONDS, src, exclusive = TASK_USER_EXCLUSIVE)) + to_chat(M, "You stop drawing energy.") + return + LL.lleill_energy = min((LL.lleill_energy + 75),LL.lleill_energy_max) + +//Glamour Helm + +/obj/item/clothing/mask/gas/glamour + desc = "A bubble-like helmet of glamour that can protect your face from the atmosphere, or lack thereof, outside." + name = "glamour bubble" + icon = 'icons/obj/glamour.dmi' + icon_state = "bubble" + item_flags = BLOCK_GAS_SMOKE_EFFECT | AIRTIGHT | ALLOW_SURVIVALFOOD | INFINITE_AIR + +//Glamour Pockets + +/obj/item/clothing/under/permit/glamour + name = "pocket of glamour" + desc = "A small crystal of glamour that is capable of storing small items inside of it." + icon = 'icons/obj/glamour.dmi' + icon_state = "pocket" + //Glamour Floor //Glamour Wall \ No newline at end of file diff --git a/code/modules/mob/new_player/sprite_accessories_ear_vr.dm b/code/modules/mob/new_player/sprite_accessories_ear_vr.dm index d2932c0b258..afb8652050a 100644 --- a/code/modules/mob/new_player/sprite_accessories_ear_vr.dm +++ b/code/modules/mob/new_player/sprite_accessories_ear_vr.dm @@ -40,6 +40,15 @@ extra_overlay = "lleill-antlers" species_allowed = list(SPECIES_LLEILL) +/datum/sprite_accessory/ears/lleill/curled + name = "Lleill Ears Curled, colorable" + icon_state = "lleill2" + extra_overlay = "lleill2-antlers" + +/datum/sprite_accessory/ears/lleill/tall + name = "Lleill Ears Tall, colorable" + icon_state = "lleill3" + extra_overlay = "lleill3-antlers" // Ears avaliable to anyone diff --git a/code/modules/mob/new_player/sprite_accessories_tail.dm b/code/modules/mob/new_player/sprite_accessories_tail.dm index b1f6a930a73..fd9ad113829 100644 --- a/code/modules/mob/new_player/sprite_accessories_tail.dm +++ b/code/modules/mob/new_player/sprite_accessories_tail.dm @@ -1067,3 +1067,13 @@ do_colouration = 1 color_blend_mode = ICON_MULTIPLY extra_overlay = "tail_marking" + +/datum/sprite_accessory/tail/lleill/large + name = "Lleill tail, Large" + icon_state = "tail2" + extra_overlay = "tail2_marking" + +/datum/sprite_accessory/tail/lleill/small + name = "Lleill tail, Small" + icon_state = "tail3" + extra_overlay = "tail3_marking" diff --git a/code/modules/reagents/machinery/alembic.dm b/code/modules/reagents/machinery/alembic.dm index 99f38aa049c..78e9c7feb6a 100644 --- a/code/modules/reagents/machinery/alembic.dm +++ b/code/modules/reagents/machinery/alembic.dm @@ -292,7 +292,7 @@ product_potion = /obj/item/weapon/reagent_containers/glass/bottle/potion/truepolymorph /obj/item/weapon/potion_material/glamour_shard - name = "glamour_shard" + name = "glamour shard" desc = "A shard of hardened white crystal that seems to change shapes as you hold it." icon = 'icons/obj/chemical_potionreagents.dmi' icon_state = "glamour_shard" diff --git a/icons/inventory/face/mob.dmi b/icons/inventory/face/mob.dmi index 25b3466e07b..98a73bc7888 100644 Binary files a/icons/inventory/face/mob.dmi and b/icons/inventory/face/mob.dmi differ diff --git a/icons/inventory/face/mob_vr.dmi b/icons/inventory/face/mob_vr.dmi index 6596062c57f..f15317e9d5f 100644 Binary files a/icons/inventory/face/mob_vr.dmi and b/icons/inventory/face/mob_vr.dmi differ diff --git a/icons/mob/species/lleill/tail.dmi b/icons/mob/species/lleill/tail.dmi index 3ff90038904..d534d35fec3 100644 Binary files a/icons/mob/species/lleill/tail.dmi and b/icons/mob/species/lleill/tail.dmi differ diff --git a/icons/mob/vore/ears_32x64.dmi b/icons/mob/vore/ears_32x64.dmi index 1e73072d946..97165c67d12 100644 Binary files a/icons/mob/vore/ears_32x64.dmi and b/icons/mob/vore/ears_32x64.dmi differ diff --git a/icons/obj/glamour.dmi b/icons/obj/glamour.dmi index 2682d7badcf..6e110af3a25 100644 Binary files a/icons/obj/glamour.dmi and b/icons/obj/glamour.dmi differ