diff --git a/code/__DEFINES/xeno.dm b/code/__DEFINES/xeno.dm index a0a4c927d3d9..d4771aa218f4 100644 --- a/code/__DEFINES/xeno.dm +++ b/code/__DEFINES/xeno.dm @@ -645,7 +645,8 @@ #define XENO_CASTE_QUEEN "Queen" #define XENO_CASTE_PREDALIEN "Predalien" #define XENO_CASTE_HELLHOUND "Hellhound" -#define XENO_SPECIAL_CASTES list(XENO_CASTE_QUEEN, XENO_CASTE_PREDALIEN, XENO_CASTE_HELLHOUND) +#define XENO_CASTE_PALATINE "Palatine" +#define XENO_SPECIAL_CASTES list(XENO_CASTE_QUEEN, XENO_CASTE_PREDALIEN, XENO_CASTE_HELLHOUND, XENO_CASTE_PALATINE) #define ALL_XENO_CASTES list(XENO_CASTE_LARVA, XENO_CASTE_PREDALIEN_LARVA, XENO_CASTE_FACEHUGGER, XENO_CASTE_LESSER_DRONE, XENO_CASTE_DRONE, XENO_CASTE_RUNNER, XENO_CASTE_SENTINEL, XENO_CASTE_DEFENDER, XENO_CASTE_BURROWER, XENO_CASTE_CARRIER, XENO_CASTE_HIVELORD, XENO_CASTE_LURKER, XENO_CASTE_WARRIOR, XENO_CASTE_SPITTER, XENO_CASTE_BOILER, XENO_CASTE_PRAETORIAN, XENO_CASTE_CRUSHER, XENO_CASTE_RAVAGER, XENO_CASTE_QUEEN, XENO_CASTE_PREDALIEN, XENO_CASTE_HELLHOUND) diff --git a/code/game/jobs/role_authority.dm b/code/game/jobs/role_authority.dm index 8deadbeba32e..a347291a1894 100644 --- a/code/game/jobs/role_authority.dm +++ b/code/game/jobs/role_authority.dm @@ -809,6 +809,8 @@ I hope it's easier to tell what the heck this proc is even doing, unlike previou M = /mob/living/carbon/xenomorph/predalien if(XENO_CASTE_HELLHOUND) M = /mob/living/carbon/xenomorph/hellhound + if(XENO_CASTE_PALATINE) + M = /mob/living/carbon/xenomorph/palatine return M diff --git a/code/modules/admin/player_panel/actions/transform.dm b/code/modules/admin/player_panel/actions/transform.dm index 91a62b1a1d02..3d3704f02c92 100644 --- a/code/modules/admin/player_panel/actions/transform.dm +++ b/code/modules/admin/player_panel/actions/transform.dm @@ -137,9 +137,14 @@ GLOBAL_LIST_INIT(pp_transformables, list( color = "purple" ), list( - name = XENO_CASTE_PREDALIEN, - key = /mob/living/carbon/xenomorph/predalien, - color = "purple" + name = XENO_CASTE_PALATINE, + key = /mob/living/carbon/xenomorph/palatine, + color = "purple" + ), + list( + name = XENO_CASTE_PREDALIEN, + key = /mob/living/carbon/xenomorph/predalien, + color = "purple" ) ), diff --git a/code/modules/mob/living/carbon/xenomorph/abilities/general_abilities.dm b/code/modules/mob/living/carbon/xenomorph/abilities/general_abilities.dm index 00a7ceaba97e..0ad58b6b26f6 100644 --- a/code/modules/mob/living/carbon/xenomorph/abilities/general_abilities.dm +++ b/code/modules/mob/living/carbon/xenomorph/abilities/general_abilities.dm @@ -233,7 +233,7 @@ /** * Any additional effects to apply to the target * is called if and only if we actually hit a human target - */ +*/ /datum/action/xeno_action/activable/pounce/proc/additional_effects(mob/living/L) return @@ -442,6 +442,8 @@ /datum/action/xeno_action/activable/xeno_spit/queen_macro //so it doesn't screw other macros up ability_primacy = XENO_PRIMARY_ACTION_3 +/datum/action/xeno_action/activable/xeno_spit/palatine_macro + ability_primacy = XENO_NOT_PRIMARY_ACTION /datum/action/xeno_action/activable/bombard name = "Bombard" diff --git a/code/modules/mob/living/carbon/xenomorph/abilities/palatine/palatine_abilities.dm b/code/modules/mob/living/carbon/xenomorph/abilities/palatine/palatine_abilities.dm new file mode 100644 index 000000000000..cf17a5de106c --- /dev/null +++ b/code/modules/mob/living/carbon/xenomorph/abilities/palatine/palatine_abilities.dm @@ -0,0 +1,48 @@ +/datum/action/xeno_action/onclick/palatine_roar + name = "Roar" + action_icon_state = "screech_empower" + ability_name = "roar" + action_type = XENO_ACTION_CLICK + ability_primacy = XENO_PRIMARY_ACTION_1 + xeno_cooldown = 60 SECONDS + plasma_cost = 50 + + var/roar_type = "piercing" + var/screech_sound_effect = "sound/voice/alien_distantroar_3.ogg" + var/bonus_damage_scale = 2.5 + var/bonus_speed_scale = 0.05 + +/datum/action/xeno_action/onclick/palatine_change_roar + name = "Change Roar" + icon_file = 'icons/mob/hud/actions_palatine.dmi' + action_icon_state = "screech_shift" + ability_name = "change roar" + action_type = XENO_ACTION_CLICK + ability_primacy = XENO_NOT_PRIMARY_ACTION + plasma_cost = 0 + +/datum/action/xeno_action/onclick/palatine_change_roar/use_ability(atom/A) + var/mob/living/carbon/xenomorph/X = owner + var/action_icon_result + + if(!X.check_state(1)) + return + + var/datum/action/xeno_action/onclick/palatine_roar/PR = get_xeno_action_by_type(X, /datum/action/xeno_action/onclick/palatine_roar) + if (!istype(PR)) + return + + if (PR.roar_type == "piercing") + action_icon_result = "screech_disrupt" + PR.roar_type = "thundering" + PR.screech_sound_effect = "sound/voice/4_xeno_roars.ogg" + to_chat(X, SPAN_XENOWARNING("You will now disrupt dangers to the hive!")) + + else + action_icon_result = "screech_empower" + PR.roar_type = "piercing" + PR.screech_sound_effect = "sound/voice/alien_distantroar_3.ogg" + to_chat(X, SPAN_XENOWARNING("You will now empower your allies with rage!")) + + PR.button.overlays.Cut() + PR.button.overlays += image('icons/mob/hud/actions_palatine.dmi', button, action_icon_result) diff --git a/code/modules/mob/living/carbon/xenomorph/abilities/palatine/palatine_powers.dm b/code/modules/mob/living/carbon/xenomorph/abilities/palatine/palatine_powers.dm new file mode 100644 index 000000000000..ed291474cb24 --- /dev/null +++ b/code/modules/mob/living/carbon/xenomorph/abilities/palatine/palatine_powers.dm @@ -0,0 +1,53 @@ +/datum/action/xeno_action/onclick/palatine_roar/use_ability(atom/target) + var/mob/living/carbon/xenomorph/xeno = owner + + if (!action_cooldown_check()) + return + + if (!xeno.check_state()) + return + + if(!check_and_use_plasma_owner()) + return + + if(roar_type == "piercing") + var/datum/behavior_delegate/palatine_base/behavior = xeno.behavior_delegate + if(!istype(behavior)) + to_chat(xeno, SPAN_ALERTWARNING("Something went wrong with your behavior delegate! Inform forest2001 or a coder!")) + return FALSE + if(behavior.thirst < 3) + to_chat(xeno, SPAN_WARNING("You have not slain enough in the name of the Queen Mother to unleash this power!")) + return FALSE + xeno.visible_message(SPAN_XENOHIGHDANGER("[xeno] emits a piercing screech!")) + xeno.create_shriekwave(color = "#9600d1") + + for(var/mob/living/carbon/carbon in view(7, xeno)) + if(isxeno(carbon) && xeno.can_not_harm(carbon)) + new /datum/effects/xeno_buff(carbon, xeno, ttl = (0.5 SECONDS * behavior.thirst + 3 SECONDS), bonus_damage = bonus_damage_scale * behavior.thirst, bonus_speed = (bonus_speed_scale * behavior.thirst)) + + for(var/mob/M in view(xeno)) + if(M && M.client) + shake_camera(M, 10, 1) + behavior.thirst = max(0, behavior.thirst - 3) + to_chat(xeno, SPAN_XENOMINORWARNING("Your bloodlust cools as you unleash your rage.")) + + else + xeno.visible_message(SPAN_XENOHIGHDANGER("[xeno] emits a thundering roar!")) + xeno.create_shriekwave(color = "#925608") + + for(var/mob/living/carbon/carbon in view(7, xeno)) + if(ishuman(carbon)) + var/mob/living/carbon/human/human = carbon + human.disable_special_items() + + var/obj/item/clothing/gloves/yautja/hunter/YG = locate(/obj/item/clothing/gloves/yautja/hunter) in human + if(isyautja(human) && YG) + if(YG.cloaked) + YG.decloak(human) + + YG.cloak_timer = xeno_cooldown * 0.1 + playsound(xeno.loc, screech_sound_effect, 75, 0, status = 0) + apply_cooldown() + + . = ..() + return diff --git a/code/modules/mob/living/carbon/xenomorph/abilities/praetorian/praetorian_abilities.dm b/code/modules/mob/living/carbon/xenomorph/abilities/praetorian/praetorian_abilities.dm index d3865872f0ab..47267c4b91ff 100644 --- a/code/modules/mob/living/carbon/xenomorph/abilities/praetorian/praetorian_abilities.dm +++ b/code/modules/mob/living/carbon/xenomorph/abilities/praetorian/praetorian_abilities.dm @@ -131,6 +131,9 @@ var/max_distance = 7 var/windup = 8 +/datum/action/xeno_action/activable/prae_abduct/palatine_macro + ability_primacy = XENO_NOT_PRIMARY_ACTION + /datum/action/xeno_action/activable/oppressor_punch name = "Dislocate" action_icon_state = "punch" @@ -307,6 +310,8 @@ var/curr_effect_type = WARDEN_HEAL_HP +/datum/action/xeno_action/activable/warden_heal/palatine_macro + ability_primacy = XENO_PRIMARY_ACTION_4 /datum/action/xeno_action/onclick/prae_switch_heal_type name = "Toggle Aid Type" @@ -360,3 +365,6 @@ var/max_distance = 7 var/windup = 6 var/retrieve_cost = 100 + +/datum/action/xeno_action/activable/prae_retrieve/palatine_macro + ability_primacy = XENO_PRIMARY_ACTION_3 diff --git a/code/modules/mob/living/carbon/xenomorph/abilities/predalien/predalien_abilities.dm b/code/modules/mob/living/carbon/xenomorph/abilities/predalien/predalien_abilities.dm index aa98f063b8d5..db9d4432e46f 100644 --- a/code/modules/mob/living/carbon/xenomorph/abilities/predalien/predalien_abilities.dm +++ b/code/modules/mob/living/carbon/xenomorph/abilities/predalien/predalien_abilities.dm @@ -12,7 +12,8 @@ /datum/action/xeno_action/onclick/predalien_roar name = "Roar" - action_icon_state = "screech" + icon_file = 'icons/mob/hud/actions_palatine.dmi' + action_icon_state = "screech_disrupt" ability_name = "roar" action_type = XENO_ACTION_CLICK ability_primacy = XENO_PRIMARY_ACTION_2 diff --git a/code/modules/mob/living/carbon/xenomorph/abilities/queen/mutated_flight.dm b/code/modules/mob/living/carbon/xenomorph/abilities/queen/mutated_flight.dm new file mode 100644 index 000000000000..30dd717bc89b --- /dev/null +++ b/code/modules/mob/living/carbon/xenomorph/abilities/queen/mutated_flight.dm @@ -0,0 +1,53 @@ +/datum/action/xeno_action/activable/flight + name = "Flight" + action_icon_state = "flight" + plasma_cost = 200 + xeno_cooldown = 1 MINUTES + var/max_distance = 5 + var/speed = 5 + +/datum/action/xeno_action/activable/flight/can_use_action() + . = ..() + if(!.) + return FALSE + +/datum/action/xeno_action/activable/flight/use_ability(atom/target) + if(!..()) + return FALSE + var/mob/living/carbon/xenomorph/xeno = owner + if(isstorage(target.loc) || xeno.contains(target) || istype(target, /atom/movable/screen)) return FALSE + + if(!xeno.check_plasma(plasma_cost)) + to_chat(owner, SPAN_XENOWARNING("You have insufficient plasma to do this.")) + return FALSE + if(target.z != xeno.z) + to_chat(owner, SPAN_XENOWARNING("Not even you can fly that far!")) + return FALSE + apply_cooldown() + + use_plasma_owner() + playsound(owner, 'sound/effects/wingflap.ogg') + owner.visible_message(SPAN_DANGER("\The [src] spreads their wings and leaps into the air!"), \ + SPAN_DANGER("You spread your wings and leap into the air!"), null, 5, CHAT_TYPE_XENO_COMBAT) + + var/turf/t_turf = get_turf(target) + var/obj/effect/warning/hover/warning = new(t_turf) + calculate_warning_turf(warning, owner, t_turf) + + //has sleep + + RegisterSignal(owner, COMSIG_CLIENT_MOB_MOVE, PROC_REF(disable_flying_movement)) + owner.throw_atom(t_turf, max_distance, speed, launch_type = HIGH_LAUNCH) + UnregisterSignal(owner, COMSIG_CLIENT_MOB_MOVE) + qdel(warning) + +/datum/action/xeno_action/activable/flight/proc/disable_flying_movement(mob/living/carbon/human/user) + SIGNAL_HANDLER + return COMPONENT_OVERRIDE_MOVE + +/datum/action/xeno_action/activable/flight/proc/calculate_warning_turf(obj/effect/warning/warning, mob/living/user, turf/t_turf) + var/t_dist = get_dist(user, t_turf) + if(!(t_dist > max_distance)) + return + var/list/turf/path = getline2(user, t_turf, FALSE) + warning.forceMove(path[max_distance]) diff --git a/code/modules/mob/living/carbon/xenomorph/castes/Palatine.dm b/code/modules/mob/living/carbon/xenomorph/castes/Palatine.dm new file mode 100644 index 000000000000..0cce09d3f194 --- /dev/null +++ b/code/modules/mob/living/carbon/xenomorph/castes/Palatine.dm @@ -0,0 +1,93 @@ +/datum/caste_datum/palatine + caste_type = XENO_CASTE_PALATINE + tier = 3 + + melee_damage_lower = XENO_DAMAGE_TIER_7 + melee_damage_upper = XENO_DAMAGE_TIER_8 + melee_vehicle_damage = XENO_DAMAGE_TIER_9 + max_health = XENO_HEALTH_IMMORTAL + plasma_gain = XENO_PLASMA_GAIN_TIER_8 + plasma_max = XENO_PLASMA_TIER_10 + xeno_explosion_resistance = XENO_EXPLOSIVE_ARMOR_TIER_6 + armor_deflection = XENO_ARMOR_TIER_5 + evasion = XENO_EVASION_NONE + speed = XENO_SPEED_TIER_5 + + evolution_allowed = FALSE + deevolves_to = list() + caste_desc = "The guard of the Queen Mother" + spit_types = list(/datum/ammo/xeno/toxin/queen, /datum/ammo/xeno/acid/spatter) + acid_level = 3 + + aura_strength = 3 + spit_delay = 20 + + tackle_min = 2 + tackle_max = 5 + tackle_chance = 45 + + behavior_delegate_type = /datum/behavior_delegate/palatine_base + minimum_evolve_time = 0 + royal_caste = TRUE + +/mob/living/carbon/xenomorph/palatine + caste_type = XENO_CASTE_PALATINE + name = XENO_CASTE_PALATINE + desc = "What god did you anger..." + icon_size = 64 + icon_state = "Normal Palatine Walking" + plasma_types = list(PLASMA_ROYAL,PLASMA_CHITIN,PLASMA_PHEROMONE,PLASMA_NEUROTOXIN) + pixel_x = -16 + old_x = -16 + mob_size = MOB_SIZE_BIG + drag_delay = 6 //pulling a big dead xeno is hard + tier = 3 + mutation_type = "Normal" + counts_for_slots = FALSE + claw_type = CLAW_TYPE_VERY_SHARP + + base_actions = list( + /datum/action/xeno_action/onclick/xeno_resting, + /datum/action/xeno_action/onclick/regurgitate, + /datum/action/xeno_action/watch_xeno, + /datum/action/xeno_action/activable/tail_stab, + /datum/action/xeno_action/activable/corrosive_acid/strong, + /datum/action/xeno_action/activable/xeno_spit/palatine_macro, + /datum/action/xeno_action/onclick/shift_spits, + /datum/action/xeno_action/activable/spray_acid/base_prae_spray_acid, + /datum/action/xeno_action/onclick/palatine_roar,//Mac1 + /datum/action/xeno_action/onclick/palatine_change_roar, + /datum/action/xeno_action/activable/prae_abduct/palatine_macro,//Mac2 + /datum/action/xeno_action/activable/prae_retrieve,//Mac3 + /datum/action/xeno_action/activable/warden_heal,//Mac4 + /datum/action/xeno_action/onclick/prae_switch_heal_type,//Mac5 + /datum/action/xeno_action/onclick/emit_pheromones, + ) + + icon_xeno = 'icons/mob/xenos/palatine.dmi' + icon_xenonid = 'icons/mob/xenos/palatine.dmi' + +/datum/behavior_delegate/palatine_base + name = "Base Palatine Behavior Delegate" + + var/thirst = 0 + var/max_thirst = 10 + +/datum/behavior_delegate/palatine_base/append_to_stat() + . = list() + . += "Bloodthirst: [thirst]/[max_thirst]" + +/datum/behavior_delegate/palatine_base/on_kill_mob(mob/M) + . = ..() + + thirst = min(thirst + 1, max_thirst) + +/datum/behavior_delegate/palatine_base/melee_attack_modify_damage(original_damage, mob/living/carbon/target) + if(!iscarbonsizehuman(target)) + return + + var/size = target.mob_size + var/multiplier = thirst - size + + + return original_damage + (2.5 * multiplier) diff --git a/code/modules/mob/living/carbon/xenomorph/say.dm b/code/modules/mob/living/carbon/xenomorph/say.dm index a2413b766505..f244bd3daf4f 100644 --- a/code/modules/mob/living/carbon/xenomorph/say.dm +++ b/code/modules/mob/living/carbon/xenomorph/say.dm @@ -138,6 +138,8 @@ ghostrend = SPAN_XENOQUEEN("Hivemind, [src.name][track] hisses, '[message]'") else if(istype(X) && IS_XENO_LEADER(X)) ghostrend = SPAN_XENOLEADER("Hivemind, Leader [src.name][track] hisses, '[message]'") + else if(istype(X, /mob/living/carbon/xenomorph/palatine)) + ghostrend = SPAN_XENOLEADER("Hivemind, [src.name][track] hisses, '[message]'") else ghostrend = SPAN_XENO("Hivemind, [src.name][track] hisses, '[message]'") S.show_message(ghostrend, SHOW_MESSAGE_AUDIBLE) @@ -150,6 +152,8 @@ rendered = SPAN_XENOQUEEN("Hivemind, [src.name][overwatch_insert] hisses, '[message]'") else if(istype(X) && IS_XENO_LEADER(X)) rendered = SPAN_XENOLEADER("Hivemind, Leader [src.name][overwatch_insert] hisses, '[message]'") + else if(istype(X, /mob/living/carbon/xenomorph/palatine)) + rendered = SPAN_XENOLEADER("Hivemind, [src.name][overwatch_insert] hisses, '[message]'") else rendered = SPAN_XENO("Hivemind, [src.name][overwatch_insert] hisses, '[message]'") diff --git a/code/modules/mob/living/carbon/xenomorph/xeno_defines.dm b/code/modules/mob/living/carbon/xenomorph/xeno_defines.dm index 810c8f58666b..de386c30c06a 100644 --- a/code/modules/mob/living/carbon/xenomorph/xeno_defines.dm +++ b/code/modules/mob/living/carbon/xenomorph/xeno_defines.dm @@ -616,7 +616,7 @@ // Every caste is manually defined here so you get var/list/xeno_counts = list( // Yes, Queen is technically considered to be tier 0 - list(XENO_CASTE_LARVA = 0, "Queen" = 0), + list(XENO_CASTE_LARVA = 0, XENO_CASTE_QUEEN = 0), list(XENO_CASTE_DRONE = 0, XENO_CASTE_RUNNER = 0, XENO_CASTE_SENTINEL = 0, XENO_CASTE_DEFENDER = 0), list(XENO_CASTE_HIVELORD = 0, XENO_CASTE_BURROWER = 0, XENO_CASTE_CARRIER = 0, XENO_CASTE_LURKER = 0, XENO_CASTE_SPITTER = 0, XENO_CASTE_WARRIOR = 0), list(XENO_CASTE_BOILER = 0, XENO_CASTE_CRUSHER = 0, XENO_CASTE_PRAETORIAN = 0, XENO_CASTE_RAVAGER = 0) diff --git a/code/modules/mob/transform_procs.dm b/code/modules/mob/transform_procs.dm index 6dda93e4d9c2..a535526aa5b9 100644 --- a/code/modules/mob/transform_procs.dm +++ b/code/modules/mob/transform_procs.dm @@ -171,6 +171,8 @@ new_xeno = new /mob/living/carbon/xenomorph/crusher(loc) if(XENO_CASTE_PRAETORIAN) new_xeno = new /mob/living/carbon/xenomorph/praetorian(loc) + if(XENO_CASTE_PALATINE) + new_xeno = new /mob/living/carbon/xenomorph/palatine(loc) if(XENO_CASTE_QUEEN) new_xeno = new /mob/living/carbon/xenomorph/queen(loc) if(XENO_CASTE_HELLHOUND) diff --git a/colonialmarines.dme b/colonialmarines.dme index 6728b6849445..943164fd97bf 100644 --- a/colonialmarines.dme +++ b/colonialmarines.dme @@ -1966,11 +1966,14 @@ #include "code\modules\mob\living\carbon\xenomorph\abilities\lurker\lurker_abilities.dm" #include "code\modules\mob\living\carbon\xenomorph\abilities\lurker\lurker_macros.dm" #include "code\modules\mob\living\carbon\xenomorph\abilities\lurker\lurker_powers.dm" +#include "code\modules\mob\living\carbon\xenomorph\abilities\palatine\palatine_abilities.dm" +#include "code\modules\mob\living\carbon\xenomorph\abilities\palatine\palatine_powers.dm" #include "code\modules\mob\living\carbon\xenomorph\abilities\praetorian\praetorian_abilities.dm" #include "code\modules\mob\living\carbon\xenomorph\abilities\praetorian\praetorian_macros.dm" #include "code\modules\mob\living\carbon\xenomorph\abilities\praetorian\praetorian_powers.dm" #include "code\modules\mob\living\carbon\xenomorph\abilities\predalien\predalien_abilities.dm" #include "code\modules\mob\living\carbon\xenomorph\abilities\predalien\predalien_powers.dm" +#include "code\modules\mob\living\carbon\xenomorph\abilities\queen\mutated_flight.dm" #include "code\modules\mob\living\carbon\xenomorph\abilities\queen\queen_abilities.dm" #include "code\modules\mob\living\carbon\xenomorph\abilities\queen\queen_macros.dm" #include "code\modules\mob\living\carbon\xenomorph\abilities\queen\queen_powers.dm" @@ -2001,6 +2004,7 @@ #include "code\modules\mob\living\carbon\xenomorph\castes\Larva.dm" #include "code\modules\mob\living\carbon\xenomorph\castes\lesser_drone.dm" #include "code\modules\mob\living\carbon\xenomorph\castes\Lurker.dm" +#include "code\modules\mob\living\carbon\xenomorph\castes\Palatine.dm" #include "code\modules\mob\living\carbon\xenomorph\castes\Praetorian.dm" #include "code\modules\mob\living\carbon\xenomorph\castes\Predalien.dm" #include "code\modules\mob\living\carbon\xenomorph\castes\Queen.dm" diff --git a/icons/mob/hud/actions_palatine.dmi b/icons/mob/hud/actions_palatine.dmi new file mode 100644 index 000000000000..11a599af24b5 Binary files /dev/null and b/icons/mob/hud/actions_palatine.dmi differ diff --git a/icons/mob/hud/actions_xeno.dmi b/icons/mob/hud/actions_xeno.dmi index 6a48235a4f3b..9e39236b9421 100644 Binary files a/icons/mob/hud/actions_xeno.dmi and b/icons/mob/hud/actions_xeno.dmi differ diff --git a/icons/mob/hud/hud.dmi b/icons/mob/hud/hud.dmi index c9e4c0c6c23d..23ebd7e36d34 100644 Binary files a/icons/mob/hud/hud.dmi and b/icons/mob/hud/hud.dmi differ diff --git a/icons/mob/xenos/palatine.dmi b/icons/mob/xenos/palatine.dmi new file mode 100644 index 000000000000..4448227b62eb Binary files /dev/null and b/icons/mob/xenos/palatine.dmi differ diff --git a/icons/mob/xenos/wounds.dmi b/icons/mob/xenos/wounds.dmi index bf7d573b73a9..0fb5081a9118 100644 Binary files a/icons/mob/xenos/wounds.dmi and b/icons/mob/xenos/wounds.dmi differ diff --git a/sound/effects/wingflap.ogg b/sound/effects/wingflap.ogg new file mode 100644 index 000000000000..2a63afa616f3 Binary files /dev/null and b/sound/effects/wingflap.ogg differ