From 36813a192c5623b7ebd33ffeb538a5e68674a024 Mon Sep 17 00:00:00 2001 From: Venuska1117 Date: Tue, 13 May 2025 01:08:29 +0200 Subject: [PATCH 01/40] Dancer Buffs. - Impale now have reach of 2 instead of 1. - Dodge now gives HIGH evasion (20) - Now dancer gain 10 evasion from 0 and 1.35 regeneration_multiplier for healing on weeds. --- code/__DEFINES/xeno.dm | 1 + .../praetorian/praetorian_abilities.dm | 1 + .../strains/castes/praetorian/dancer.dm | 93 +++++++++++-------- 3 files changed, 57 insertions(+), 38 deletions(-) diff --git a/code/__DEFINES/xeno.dm b/code/__DEFINES/xeno.dm index 6c33ffc92e87..d8d6ff48ca48 100644 --- a/code/__DEFINES/xeno.dm +++ b/code/__DEFINES/xeno.dm @@ -502,6 +502,7 @@ #define XENO_EVASION_MOD_VERY_SMALL 3 #define XENO_EVASION_MOD_SMALL 6 #define XENO_EVASION_MOD_MED 9 +#define XENO_EVASION_MOD_DANCER 10 #define XENO_EVASION_MOD_LARGE 12 #define XENO_EVASION_MOD_VERY_LARGE 15 #define XENO_EVASION_MOD_ULTRA 25 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 890d40ab0b66..f581c1548fb4 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 @@ -175,6 +175,7 @@ action_type = XENO_ACTION_CLICK xeno_cooldown = 13 SECONDS plasma_cost = 80 + var/range = 2 var/impale_click_miss_cooldown = 1.5 SECONDS diff --git a/code/modules/mob/living/carbon/xenomorph/strains/castes/praetorian/dancer.dm b/code/modules/mob/living/carbon/xenomorph/strains/castes/praetorian/dancer.dm index b5ae8f5a4a8c..2126cf3ef153 100644 --- a/code/modules/mob/living/carbon/xenomorph/strains/castes/praetorian/dancer.dm +++ b/code/modules/mob/living/carbon/xenomorph/strains/castes/praetorian/dancer.dm @@ -23,6 +23,8 @@ /datum/xeno_strain/dancer/apply_strain(mob/living/carbon/xenomorph/praetorian/prae) prae.armor_modifier -= XENO_ARMOR_MOD_VERY_SMALL prae.speed_modifier += XENO_SPEED_FASTMOD_TIER_5 + prae.evasion_modifier = XENO_EVASION_MOD_DANCER + prae.regeneration_multiplier = XENO_REGEN_MULTIPLIER_TIER_7 prae.plasma_types = list(PLASMA_CATECHOLAMINE) prae.claw_type = CLAW_TYPE_SHARP @@ -35,14 +37,14 @@ var/dodge_activated = FALSE /datum/behavior_delegate/praetorian_dancer/melee_attack_additional_effects_target(mob/living/carbon/target_carbon) - if (!isxeno_human(target_carbon)) + if(!isxeno_human(target_carbon)) return - if (target_carbon.stat) + if(target_carbon.stat) return // Clean up all tags to 'refresh' our TTL - for (var/datum/effects/dancer_tag/target_tag in target_carbon.effects_list) + for(var/datum/effects/dancer_tag/target_tag in target_carbon.effects_list) qdel(target_tag) new /datum/effects/dancer_tag(target_carbon, bound_xeno, , , 35) @@ -54,37 +56,50 @@ /datum/action/xeno_action/activable/prae_impale/use_ability(atom/target_atom) var/mob/living/carbon/xenomorph/dancer_user = owner - if (!action_cooldown_check()) + if(!action_cooldown_check()) return - if (!dancer_user.check_state()) + if(!dancer_user.check_state()) return - if (!ismob(target_atom)) + if(!ismob(target_atom)) apply_cooldown_override(impale_click_miss_cooldown) update_button_icon() return - if (!isxeno_human(target_atom) || dancer_user.can_not_harm(target_atom)) + if(!isxeno_human(target_atom) || dancer_user.can_not_harm(target_atom)) to_chat(dancer_user, SPAN_XENODANGER("We must target a hostile!")) return - if (!dancer_user.Adjacent(target_atom)) - to_chat(dancer_user, SPAN_XENODANGER("We must be adjacent to [target_atom]!")) - return - var/mob/living/carbon/target_carbon = target_atom - if (target_carbon.stat == DEAD) + if(target_carbon.stat == DEAD) to_chat(dancer_user, SPAN_XENOWARNING("[target_atom] is dead, why would we want to attack it?")) return - if (!check_and_use_plasma_owner()) + var/dist = get_dist(dancer_user, target_carbon) + + if(dist > range) + to_chat(dancer_user, SPAN_WARNING("[target_carbon] is too far away!")) + return + + if(dist > 1) + var/turf/targetTurf = get_step(dancer_user, get_dir(dancer_user, target_carbon)) + if(targetTurf.density) + to_chat(dancer_user, SPAN_WARNING("We can't attack through [targetTurf]!")) + return + else + for(var/atom/atom_in_turf in targetTurf) + if(atom_in_turf.density && !atom_in_turf.throwpass && !istype(atom_in_turf, /obj/structure/barricade) && !istype(atom_in_turf, /mob/living)) + to_chat(dancer_user, SPAN_WARNING("We can't attack through [atom_in_turf]!")) + return + + if(!check_and_use_plasma_owner()) return apply_cooldown() var/buffed = FALSE - for (var/datum/effects/dancer_tag/dancer_tag_effect in target_carbon.effects_list) + for(var/datum/effects/dancer_tag/dancer_tag_effect in target_carbon.effects_list) buffed = TRUE qdel(dancer_tag_effect) break @@ -125,25 +140,27 @@ /datum/action/xeno_action/onclick/prae_dodge/use_ability(atom/target) var/mob/living/carbon/xenomorph/dodge_user = owner - if (!action_cooldown_check()) + if(!action_cooldown_check()) return - if (!istype(dodge_user) || !dodge_user.check_state()) + if(!istype(dodge_user) || !dodge_user.check_state()) return - if (!check_and_use_plasma_owner()) + if(!check_and_use_plasma_owner()) return var/datum/behavior_delegate/praetorian_dancer/behavior = dodge_user.behavior_delegate - if (!istype(behavior)) + if(!istype(behavior)) return behavior.dodge_activated = TRUE button.icon_state = "template_active" to_chat(dodge_user, SPAN_XENOHIGHDANGER("We can now dodge through mobs!")) dodge_user.speed_modifier -= speed_buff_amount + dodge_user.evasion_modifier += XENO_EVASION_MOD_DANCER dodge_user.add_temp_pass_flags(PASS_MOB_THRU) dodge_user.recalculate_speed() + dodge_user.recalculate_evasion() addtimer(CALLBACK(src, PROC_REF(remove_effects)), duration) @@ -153,46 +170,48 @@ /datum/action/xeno_action/onclick/prae_dodge/proc/remove_effects() var/mob/living/carbon/xenomorph/dodge_remove = owner - if (!istype(dodge_remove)) + if(!istype(dodge_remove)) return var/datum/behavior_delegate/praetorian_dancer/behavior = dodge_remove.behavior_delegate - if (!istype(behavior)) + if(!istype(behavior)) return - if (behavior.dodge_activated) + if(behavior.dodge_activated) behavior.dodge_activated = FALSE button.icon_state = "template" dodge_remove.speed_modifier += speed_buff_amount + dodge_remove.evasion_modifier -= XENO_EVASION_MOD_DANCER dodge_remove.remove_temp_pass_flags(PASS_MOB_THRU) dodge_remove.recalculate_speed() + dodge_remove.recalculate_evasion() to_chat(dodge_remove, SPAN_XENOHIGHDANGER("We can no longer dodge through mobs!")) /datum/action/xeno_action/activable/prae_tail_trip/use_ability(atom/target_atom) var/mob/living/carbon/xenomorph/dancer_user = owner - if (!action_cooldown_check()) + if(!action_cooldown_check()) return - if (!istype(dancer_user) || !dancer_user.check_state()) + if(!istype(dancer_user) || !dancer_user.check_state()) return - if (!ismob(target_atom)) + if(!ismob(target_atom)) apply_cooldown_override(tail_click_miss_cooldown) update_button_icon() return - if (!isxeno_human(target_atom) || dancer_user.can_not_harm(target_atom)) + if(!isxeno_human(target_atom) || dancer_user.can_not_harm(target_atom)) to_chat(dancer_user, SPAN_XENODANGER("We must target a hostile!")) return var/mob/living/carbon/target_carbon = target_atom - if (target_carbon.stat == DEAD) + if(target_carbon.stat == DEAD) to_chat(dancer_user, SPAN_XENOWARNING("[target_atom] is dead, why would we want to attack it?")) return - if (!check_and_use_plasma_owner()) + if(!check_and_use_plasma_owner()) return @@ -202,23 +221,21 @@ var/dist = get_dist(dancer_user, target_carbon) - if (dist > range) + if(dist > range) to_chat(dancer_user, SPAN_WARNING("[target_carbon] is too far away!")) return - if (dist > 1) + if(dist > 1) var/turf/targetTurf = get_step(dancer_user, get_dir(dancer_user, target_carbon)) - if (targetTurf.density) + if(targetTurf.density) to_chat(dancer_user, SPAN_WARNING("We can't attack through [targetTurf]!")) return else - for (var/atom/atom_in_turf in targetTurf) - if (atom_in_turf.density && !atom_in_turf.throwpass && !istype(atom_in_turf, /obj/structure/barricade) && !istype(atom_in_turf, /mob/living)) + for(var/atom/atom_in_turf in targetTurf) + if(atom_in_turf.density && !atom_in_turf.throwpass && !istype(atom_in_turf, /obj/structure/barricade) && !istype(atom_in_turf, /mob/living)) to_chat(dancer_user, SPAN_WARNING("We can't attack through [atom_in_turf]!")) return - - // Hmm today I will kill a marine while looking away from them dancer_user.face_atom(target_carbon) dancer_user.flick_attack_overlay(target_carbon, "disarm") @@ -227,17 +244,17 @@ var/datum/effects/dancer_tag/dancer_tag_effect = locate() in target_carbon.effects_list - if (dancer_tag_effect) + if(dancer_tag_effect) buffed = TRUE qdel(dancer_tag_effect) - if (!buffed) + if(!buffed) new /datum/effects/xeno_slow(target_carbon, dancer_user, null, null, get_xeno_stun_duration(target_carbon, slow_duration)) var/stun_duration = stun_duration_default var/daze_duration = 0 - if (buffed) + if(buffed) stun_duration = stun_duration_buffed daze_duration = daze_duration_buffed @@ -259,7 +276,7 @@ dancer_user.spin_circle() dancer_user.emote("tail") to_chat(target_carbon, SPAN_XENOHIGHDANGER("You are swept off your feet by [dancer_user]!")) - if (daze_duration > 0) + if(daze_duration > 0) target_carbon.apply_effect(daze_duration, DAZE) apply_cooldown() From ce8354487f60b467b2080da0cbc49698919dc384 Mon Sep 17 00:00:00 2001 From: Venuska1117 Date: Tue, 13 May 2025 12:36:27 +0200 Subject: [PATCH 02/40] Afterimages code for Dancer Dodge. --- .../praetorian/praetorian_abilities.dm | 3 +- .../strains/castes/praetorian/dancer.dm | 147 +++++++++++++++++- 2 files changed, 142 insertions(+), 8 deletions(-) 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 f581c1548fb4..9c79e57963d6 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 @@ -189,8 +189,9 @@ xeno_cooldown = 19 SECONDS // Config - var/duration = 70 + var/duration = 7 SECONDS var/speed_buff_amount = 0.5 + var/afterimage_interval = 2 DECISECONDS /datum/action/xeno_action/activable/prae_tail_trip name = "Tail Trip" diff --git a/code/modules/mob/living/carbon/xenomorph/strains/castes/praetorian/dancer.dm b/code/modules/mob/living/carbon/xenomorph/strains/castes/praetorian/dancer.dm index 2126cf3ef153..b2cf79fae5fe 100644 --- a/code/modules/mob/living/carbon/xenomorph/strains/castes/praetorian/dancer.dm +++ b/code/modules/mob/living/carbon/xenomorph/strains/castes/praetorian/dancer.dm @@ -127,16 +127,30 @@ // Reroll damage damage = get_xeno_damage_slash(target_carbon, rand(dancer_user.melee_damage_lower, dancer_user.melee_damage_upper)) - sleep(4) // Short sleep so the animation and sounds will be distinct, but this creates some strange effects if the prae runs away. not entirely happy with this, but I think its benefits outweigh its drawbacks + var/list/attack_data = list( + "attacker" = dancer_user, + "target" = target_carbon, + "damage" = damage + ) + addtimer(CALLBACK(src, /datum/action/xeno_action/activable/prae_impale/proc/delayed_impale_strike, attack_data), 4) - dancer_user.animation_attack_on(target_atom) - dancer_user.flick_attack_overlay(target_atom, "tail") - - target_carbon.last_damage_data = create_cause_data(initial(dancer_user.caste_type), dancer_user) - target_carbon.apply_armoured_damage(damage, ARMOR_MELEE, BRUTE, "chest", 10) - playsound(target_carbon, 'sound/weapons/alien_tail_attack.ogg', 30, TRUE) return ..() +/datum/action/xeno_action/activable/prae_impale/proc/delayed_impale_strike(list/attack_data) + var/mob/living/carbon/xenomorph/attacker = attack_data["attacker"] + var/mob/living/carbon/target = attack_data["target"] + var/damage = attack_data["damage"] + + if(!attacker || !target || target.stat == DEAD) + return + + attacker.animation_attack_on(target) + attacker.flick_attack_overlay(target, "tail") + + target.last_damage_data = create_cause_data(initial(attacker.caste_type), attacker) + target.apply_armoured_damage(damage, ARMOR_MELEE, BRUTE, "chest", 10) + playsound(target, 'sound/weapons/alien_tail_attack.ogg', 30, TRUE) + /datum/action/xeno_action/onclick/prae_dodge/use_ability(atom/target) var/mob/living/carbon/xenomorph/dodge_user = owner @@ -153,6 +167,7 @@ if(!istype(behavior)) return + //Activate dodge mechanics behavior.dodge_activated = TRUE button.icon_state = "template_active" to_chat(dodge_user, SPAN_XENOHIGHDANGER("We can now dodge through mobs!")) @@ -162,6 +177,10 @@ dodge_user.recalculate_speed() dodge_user.recalculate_evasion() + //Start afterimage sequence + INVOKE_ASYNC(src, PROC_REF(create_afterimage_sequence), dodge_user, duration) + + //Set a timer to remove effects AFTER the full duration of the ability addtimer(CALLBACK(src, PROC_REF(remove_effects)), duration) apply_cooldown() @@ -187,6 +206,120 @@ dodge_remove.recalculate_evasion() to_chat(dodge_remove, SPAN_XENOHIGHDANGER("We can no longer dodge through mobs!")) +/datum/action/xeno_action/onclick/prae_dodge/proc/create_afterimage_sequence(mob/living/carbon/xenomorph/dodge_user, duration) + if(!dodge_user || !dodge_user.loc) + return + + var/afterimage_count = round(duration / afterimage_interval) + + var/datum/afterimage_state/state = new + state.owner = dodge_user + state.remaining = afterimage_count + state.last_turf = get_turf(dodge_user.loc) + + addtimer(CALLBACK(src, PROC_REF(process_afterimage_tick), state), afterimage_interval) + +/datum/action/xeno_action/onclick/prae_dodge/proc/process_afterimage_tick(datum/afterimage_state/state) + if(!state || !state.owner || !state.owner.loc) + return + + var/mob/living/carbon/xenomorph/dodge_user = state.owner + var/turf/current_position = get_turf(dodge_user.loc) + + if(current_position && current_position != state.last_turf) + var/random_offset_x = rand(-4, 4) + var/random_offset_y = rand(-4, 4) + + dodge_user.reset_position_to_initial() + dodge_user.apply_offset(random_offset_x, random_offset_y) + + create_afterimage(dodge_user, random_offset_x, random_offset_y) + state.last_turf = current_position + + state.remaining-- + + if(state.remaining > 0) + addtimer(CALLBACK(src, PROC_REF(process_afterimage_tick), state), afterimage_interval) + else + addtimer(CALLBACK(dodge_user, TYPE_PROC_REF(/atom/movable, reset_position_to_initial)), 2 DECISECONDS) + +/datum/action/xeno_action/onclick/prae_dodge/proc/create_afterimage(mob/living/carbon/xenomorph/dodge_user, random_offset_x, random_offset_y) + if(!dodge_user || !dodge_user.loc) + return + + var/turf/afterimage_location = get_turf(dodge_user.loc) + if(!afterimage_location) + return + + //Apply directional offset based on the player's direction + var/directional_offset_x = 0 + var/directional_offset_y = 0 + + switch(dodge_user.dir) + if(NORTH) + directional_offset_y = -16 + if(SOUTH) + directional_offset_y = 16 + if(EAST) + directional_offset_x = -16 + if(WEST) + directional_offset_x = 16 + + //Create the afterimage at the current position with the offset + var/obj/effect/overlay/afterimage = new /obj/effect/overlay/afterimage(afterimage_location) + afterimage.icon = dodge_user.icon + afterimage.icon_state = dodge_user.icon_state + afterimage.color = dodge_user.color + afterimage.layer = dodge_user.layer + afterimage.dir = dodge_user.dir + afterimage.alpha = 150 + afterimage.mouse_opacity = 0 // Non-interactive + afterimage.pixel_x = dodge_user.pixel_x + directional_offset_x + afterimage.pixel_y = dodge_user.pixel_y + directional_offset_y + + //Trigger the fade-out effect for the afterimage + addtimer(CALLBACK(afterimage, TYPE_PROC_REF(/obj/effect/overlay/afterimage, fade_out_afterimage))) + +/obj/effect/overlay/afterimage/proc/fade_out_afterimage() + if(!src) + return + + fade_step = 1 + addtimer(CALLBACK(src, PROC_REF(handle_fade_tick)), fade_delay) + +/obj/effect/overlay/afterimage/proc/handle_fade_tick() + if(!src) + return + + alpha = round(200 * (1 - (fade_step / fade_max_steps))) + + if(fade_step >= fade_max_steps) + qdel(src) + else + fade_step++ + addtimer(CALLBACK(src, PROC_REF(handle_fade_tick)), fade_delay) + +/atom/movable/proc/reset_position_to_initial() + pixel_x = initial(pixel_x) + pixel_y = initial(pixel_y) + +/atom/movable/proc/apply_offset(dx, dy) + pixel_x += dx + pixel_y += dy + +/datum/afterimage_state + var/mob/living/carbon/xenomorph/owner + var/remaining + var/turf/last_turf + +/obj/effect/overlay/afterimage + name = "Dancer Afterimage" + icon = 'icons/mob/xenos/castes/tier_3/praetorian.dmi' + layer = MOB_LAYER + var/fade_step = 0 + var/fade_max_steps = 5 + var/fade_delay = 2 DECISECONDS + /datum/action/xeno_action/activable/prae_tail_trip/use_ability(atom/target_atom) var/mob/living/carbon/xenomorph/dancer_user = owner From b8f237111f2ce8b65ac635d2f0c9f754ae4575a3 Mon Sep 17 00:00:00 2001 From: Venuska1117 Date: Wed, 14 May 2025 00:53:04 +0200 Subject: [PATCH 03/40] Increased Dancer Evasion, this need TM bad. --- code/__DEFINES/xeno.dm | 2 +- .../xenomorph/strains/castes/praetorian/dancer.dm | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/code/__DEFINES/xeno.dm b/code/__DEFINES/xeno.dm index d8d6ff48ca48..aaa2e0657d38 100644 --- a/code/__DEFINES/xeno.dm +++ b/code/__DEFINES/xeno.dm @@ -502,10 +502,10 @@ #define XENO_EVASION_MOD_VERY_SMALL 3 #define XENO_EVASION_MOD_SMALL 6 #define XENO_EVASION_MOD_MED 9 -#define XENO_EVASION_MOD_DANCER 10 #define XENO_EVASION_MOD_LARGE 12 #define XENO_EVASION_MOD_VERY_LARGE 15 #define XENO_EVASION_MOD_ULTRA 25 +#define XENO_EVASION_MOD_DANCER 60 // Armor factor modifiers #define XENO_ARMORFACTOR_MOD_VERY_SMALL 5 diff --git a/code/modules/mob/living/carbon/xenomorph/strains/castes/praetorian/dancer.dm b/code/modules/mob/living/carbon/xenomorph/strains/castes/praetorian/dancer.dm index b2cf79fae5fe..d3445a5aaf75 100644 --- a/code/modules/mob/living/carbon/xenomorph/strains/castes/praetorian/dancer.dm +++ b/code/modules/mob/living/carbon/xenomorph/strains/castes/praetorian/dancer.dm @@ -172,7 +172,7 @@ button.icon_state = "template_active" to_chat(dodge_user, SPAN_XENOHIGHDANGER("We can now dodge through mobs!")) dodge_user.speed_modifier -= speed_buff_amount - dodge_user.evasion_modifier += XENO_EVASION_MOD_DANCER + dodge_user.evasion_modifier += XENO_EVASION_MOD_ULTRA dodge_user.add_temp_pass_flags(PASS_MOB_THRU) dodge_user.recalculate_speed() dodge_user.recalculate_evasion() @@ -200,7 +200,7 @@ behavior.dodge_activated = FALSE button.icon_state = "template" dodge_remove.speed_modifier += speed_buff_amount - dodge_remove.evasion_modifier -= XENO_EVASION_MOD_DANCER + dodge_remove.evasion_modifier -= XENO_EVASION_MOD_ULTRA dodge_remove.remove_temp_pass_flags(PASS_MOB_THRU) dodge_remove.recalculate_speed() dodge_remove.recalculate_evasion() @@ -272,7 +272,7 @@ afterimage.color = dodge_user.color afterimage.layer = dodge_user.layer afterimage.dir = dodge_user.dir - afterimage.alpha = 150 + afterimage.alpha = 200 afterimage.mouse_opacity = 0 // Non-interactive afterimage.pixel_x = dodge_user.pixel_x + directional_offset_x afterimage.pixel_y = dodge_user.pixel_y + directional_offset_y @@ -317,8 +317,8 @@ icon = 'icons/mob/xenos/castes/tier_3/praetorian.dmi' layer = MOB_LAYER var/fade_step = 0 - var/fade_max_steps = 5 - var/fade_delay = 2 DECISECONDS + var/fade_max_steps = 4 + var/fade_delay = 1 DECISECONDS /datum/action/xeno_action/activable/prae_tail_trip/use_ability(atom/target_atom) var/mob/living/carbon/xenomorph/dancer_user = owner From cba207d3d6179cd371b137974604093b2ce53c30 Mon Sep 17 00:00:00 2001 From: Venuska1117 Date: Mon, 19 May 2025 17:41:51 +0200 Subject: [PATCH 04/40] Add Dodge mechanic. --- .../modules/mob/living/carbon/xenomorph/Xenomorph.dm | 1 + .../xenomorph/strains/castes/praetorian/dancer.dm | 6 +++--- code/modules/projectiles/projectile.dm | 12 ++++++++++++ 3 files changed, 16 insertions(+), 3 deletions(-) diff --git a/code/modules/mob/living/carbon/xenomorph/Xenomorph.dm b/code/modules/mob/living/carbon/xenomorph/Xenomorph.dm index 1f4f401e2924..040778fe1df4 100644 --- a/code/modules/mob/living/carbon/xenomorph/Xenomorph.dm +++ b/code/modules/mob/living/carbon/xenomorph/Xenomorph.dm @@ -68,6 +68,7 @@ var/static/list/walking_state_cache = list() var/has_walking_icon_state = FALSE + var/dodge_chance = 0 // 0% for guaranteed bullet dodge if RNG hits. (don't work when you are laying down) ////////////////////////////////////////////////////////////////// // diff --git a/code/modules/mob/living/carbon/xenomorph/strains/castes/praetorian/dancer.dm b/code/modules/mob/living/carbon/xenomorph/strains/castes/praetorian/dancer.dm index d3445a5aaf75..32a8c059ea83 100644 --- a/code/modules/mob/living/carbon/xenomorph/strains/castes/praetorian/dancer.dm +++ b/code/modules/mob/living/carbon/xenomorph/strains/castes/praetorian/dancer.dm @@ -23,7 +23,7 @@ /datum/xeno_strain/dancer/apply_strain(mob/living/carbon/xenomorph/praetorian/prae) prae.armor_modifier -= XENO_ARMOR_MOD_VERY_SMALL prae.speed_modifier += XENO_SPEED_FASTMOD_TIER_5 - prae.evasion_modifier = XENO_EVASION_MOD_DANCER + prae.dodge_chance = 20 prae.regeneration_multiplier = XENO_REGEN_MULTIPLIER_TIER_7 prae.plasma_types = list(PLASMA_CATECHOLAMINE) prae.claw_type = CLAW_TYPE_SHARP @@ -172,7 +172,7 @@ button.icon_state = "template_active" to_chat(dodge_user, SPAN_XENOHIGHDANGER("We can now dodge through mobs!")) dodge_user.speed_modifier -= speed_buff_amount - dodge_user.evasion_modifier += XENO_EVASION_MOD_ULTRA + dodge_user.dodge_chance += 25 dodge_user.add_temp_pass_flags(PASS_MOB_THRU) dodge_user.recalculate_speed() dodge_user.recalculate_evasion() @@ -200,7 +200,7 @@ behavior.dodge_activated = FALSE button.icon_state = "template" dodge_remove.speed_modifier += speed_buff_amount - dodge_remove.evasion_modifier -= XENO_EVASION_MOD_ULTRA + dodge_remove.dodge_chance -= 25 dodge_remove.remove_temp_pass_flags(PASS_MOB_THRU) dodge_remove.recalculate_speed() dodge_remove.recalculate_evasion() diff --git a/code/modules/projectiles/projectile.dm b/code/modules/projectiles/projectile.dm index c4629547bd21..722b675873d4 100644 --- a/code/modules/projectiles/projectile.dm +++ b/code/modules/projectiles/projectile.dm @@ -509,6 +509,18 @@ if((ammo.flags_ammo_behavior & AMMO_XENO) && (isfacehugger(L) || L.stat == DEAD)) //xeno ammo is NEVER meant to hit or damage dead people. If you want to add a xeno ammo that DOES then make a new flag that makes it ignore this check. return FALSE + if(isxeno(L)) + if(L.body_position != LYING_DOWN) + var/mob/living/carbon/xenomorph/xeno = L + var/dodge_roll = rand(1, 100) + if(dodge_roll <= xeno.dodge_chance) + xeno.xeno_jitter(5 DECISECONDS) + if(src.ammo.sound_miss) + playsound_client(xeno.client, src.ammo.sound_miss, get_turf(xeno), 75, TRUE) + xeno.visible_message(SPAN_AVOIDHARM("The [xeno] darts aside, evading [src]!"), + SPAN_AVOIDHARM("You react fast, and [src] narrowly misses you!"), null, 4, CHAT_TYPE_TAKING_HIT) + return FALSE + var/hit_chance = L.get_projectile_hit_chance(src) if(hit_chance) // Calculated from combination of both ammo accuracy and gun accuracy From e0ecd156068b9de49ca4bb7a7c971ab77c923c2f Mon Sep 17 00:00:00 2001 From: Venuska1117 Date: Mon, 19 May 2025 18:11:37 +0200 Subject: [PATCH 05/40] Removes unused code. --- .../living/carbon/xenomorph/strains/castes/praetorian/dancer.dm | 2 -- 1 file changed, 2 deletions(-) diff --git a/code/modules/mob/living/carbon/xenomorph/strains/castes/praetorian/dancer.dm b/code/modules/mob/living/carbon/xenomorph/strains/castes/praetorian/dancer.dm index 32a8c059ea83..5334d4b64de2 100644 --- a/code/modules/mob/living/carbon/xenomorph/strains/castes/praetorian/dancer.dm +++ b/code/modules/mob/living/carbon/xenomorph/strains/castes/praetorian/dancer.dm @@ -175,7 +175,6 @@ dodge_user.dodge_chance += 25 dodge_user.add_temp_pass_flags(PASS_MOB_THRU) dodge_user.recalculate_speed() - dodge_user.recalculate_evasion() //Start afterimage sequence INVOKE_ASYNC(src, PROC_REF(create_afterimage_sequence), dodge_user, duration) @@ -203,7 +202,6 @@ dodge_remove.dodge_chance -= 25 dodge_remove.remove_temp_pass_flags(PASS_MOB_THRU) dodge_remove.recalculate_speed() - dodge_remove.recalculate_evasion() to_chat(dodge_remove, SPAN_XENOHIGHDANGER("We can no longer dodge through mobs!")) /datum/action/xeno_action/onclick/prae_dodge/proc/create_afterimage_sequence(mob/living/carbon/xenomorph/dodge_user, duration) From f4ef3a3288b6ffc5d5966779175e5d021fe5cffd Mon Sep 17 00:00:00 2001 From: Venuska1117 Date: Tue, 20 May 2025 10:56:42 +0200 Subject: [PATCH 06/40] Changed numbers of dodge chances. --- .../carbon/xenomorph/strains/castes/praetorian/dancer.dm | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/code/modules/mob/living/carbon/xenomorph/strains/castes/praetorian/dancer.dm b/code/modules/mob/living/carbon/xenomorph/strains/castes/praetorian/dancer.dm index 5334d4b64de2..e16e7c8291c0 100644 --- a/code/modules/mob/living/carbon/xenomorph/strains/castes/praetorian/dancer.dm +++ b/code/modules/mob/living/carbon/xenomorph/strains/castes/praetorian/dancer.dm @@ -23,7 +23,7 @@ /datum/xeno_strain/dancer/apply_strain(mob/living/carbon/xenomorph/praetorian/prae) prae.armor_modifier -= XENO_ARMOR_MOD_VERY_SMALL prae.speed_modifier += XENO_SPEED_FASTMOD_TIER_5 - prae.dodge_chance = 20 + prae.dodge_chance = 18 prae.regeneration_multiplier = XENO_REGEN_MULTIPLIER_TIER_7 prae.plasma_types = list(PLASMA_CATECHOLAMINE) prae.claw_type = CLAW_TYPE_SHARP @@ -172,7 +172,7 @@ button.icon_state = "template_active" to_chat(dodge_user, SPAN_XENOHIGHDANGER("We can now dodge through mobs!")) dodge_user.speed_modifier -= speed_buff_amount - dodge_user.dodge_chance += 25 + dodge_user.dodge_chance += 20 dodge_user.add_temp_pass_flags(PASS_MOB_THRU) dodge_user.recalculate_speed() @@ -199,7 +199,7 @@ behavior.dodge_activated = FALSE button.icon_state = "template" dodge_remove.speed_modifier += speed_buff_amount - dodge_remove.dodge_chance -= 25 + dodge_remove.dodge_chance -= 20 dodge_remove.remove_temp_pass_flags(PASS_MOB_THRU) dodge_remove.recalculate_speed() to_chat(dodge_remove, SPAN_XENOHIGHDANGER("We can no longer dodge through mobs!")) From ad27bac62fa178da6f2e208ace6a3341b63bcd6b Mon Sep 17 00:00:00 2001 From: Venuska1117 Date: Wed, 18 Jun 2025 13:12:47 +0200 Subject: [PATCH 07/40] Description change and bulled dodge adjustement. - You cannot dodge when unconscious --- code/modules/mob/living/carbon/xenomorph/Xenomorph.dm | 2 +- code/modules/projectiles/projectile.dm | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/mob/living/carbon/xenomorph/Xenomorph.dm b/code/modules/mob/living/carbon/xenomorph/Xenomorph.dm index 040778fe1df4..09d8777e7591 100644 --- a/code/modules/mob/living/carbon/xenomorph/Xenomorph.dm +++ b/code/modules/mob/living/carbon/xenomorph/Xenomorph.dm @@ -68,7 +68,7 @@ var/static/list/walking_state_cache = list() var/has_walking_icon_state = FALSE - var/dodge_chance = 0 // 0% for guaranteed bullet dodge if RNG hits. (don't work when you are laying down) + var/dodge_chance = 0 //Guaranteed bullet dodge if RNG hits, from 0% to 100% max. (don't work when you are laying down or UNCONSCIOUS) ////////////////////////////////////////////////////////////////// // diff --git a/code/modules/projectiles/projectile.dm b/code/modules/projectiles/projectile.dm index 722b675873d4..8f1f656ccbdb 100644 --- a/code/modules/projectiles/projectile.dm +++ b/code/modules/projectiles/projectile.dm @@ -510,7 +510,7 @@ return FALSE if(isxeno(L)) - if(L.body_position != LYING_DOWN) + if(L.body_position != LYING_DOWN && L.stat != UNCONSCIOUS) //We don't want to "somehow" dodge bullets when lying down/unconscious. var/mob/living/carbon/xenomorph/xeno = L var/dodge_roll = rand(1, 100) if(dodge_roll <= xeno.dodge_chance) From b379654408dd8656ac2db50844e5fb216a34f582 Mon Sep 17 00:00:00 2001 From: Venuska1117 Date: Sat, 28 Jun 2025 22:10:17 +0200 Subject: [PATCH 08/40] dodge_chance now respects rockets/sniper bullets. --- code/__DEFINES/xeno.dm | 1 - code/modules/projectiles/projectile.dm | 21 +++++++++++---------- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/code/__DEFINES/xeno.dm b/code/__DEFINES/xeno.dm index aaa2e0657d38..6c33ffc92e87 100644 --- a/code/__DEFINES/xeno.dm +++ b/code/__DEFINES/xeno.dm @@ -505,7 +505,6 @@ #define XENO_EVASION_MOD_LARGE 12 #define XENO_EVASION_MOD_VERY_LARGE 15 #define XENO_EVASION_MOD_ULTRA 25 -#define XENO_EVASION_MOD_DANCER 60 // Armor factor modifiers #define XENO_ARMORFACTOR_MOD_VERY_SMALL 5 diff --git a/code/modules/projectiles/projectile.dm b/code/modules/projectiles/projectile.dm index 8f1f656ccbdb..7a89b07312f1 100644 --- a/code/modules/projectiles/projectile.dm +++ b/code/modules/projectiles/projectile.dm @@ -510,16 +510,17 @@ return FALSE if(isxeno(L)) - if(L.body_position != LYING_DOWN && L.stat != UNCONSCIOUS) //We don't want to "somehow" dodge bullets when lying down/unconscious. - var/mob/living/carbon/xenomorph/xeno = L - var/dodge_roll = rand(1, 100) - if(dodge_roll <= xeno.dodge_chance) - xeno.xeno_jitter(5 DECISECONDS) - if(src.ammo.sound_miss) - playsound_client(xeno.client, src.ammo.sound_miss, get_turf(xeno), 75, TRUE) - xeno.visible_message(SPAN_AVOIDHARM("The [xeno] darts aside, evading [src]!"), - SPAN_AVOIDHARM("You react fast, and [src] narrowly misses you!"), null, 4, CHAT_TYPE_TAKING_HIT) - return FALSE + if(!((ammo.flags_ammo_behavior & AMMO_SNIPER) || (ammo.flags_ammo_behavior & AMMO_ROCKET))) + if(L.body_position != LYING_DOWN && L.stat != UNCONSCIOUS) //We don't want to "somehow" dodge bullets when lying down/unconscious. + var/mob/living/carbon/xenomorph/xeno = L + var/dodge_roll = rand(1, 100) + if(dodge_roll <= xeno.dodge_chance) + xeno.xeno_jitter(5 DECISECONDS) + if(src.ammo.sound_miss) + playsound_client(xeno.client, src.ammo.sound_miss, get_turf(xeno), 75, TRUE) + xeno.visible_message(SPAN_AVOIDHARM("The [xeno] darts aside, evading [src]!"), + SPAN_AVOIDHARM("You react fast, and [src] narrowly misses you!"), null, 4, CHAT_TYPE_TAKING_HIT) + return FALSE var/hit_chance = L.get_projectile_hit_chance(src) From 123e96de6c31365d70c5ac34f5c55d4069e1167e Mon Sep 17 00:00:00 2001 From: Venuska1117 Date: Fri, 11 Jul 2025 12:12:49 +0200 Subject: [PATCH 09/40] vwv --- .../xenomorph/strains/castes/praetorian/dancer.dm | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/code/modules/mob/living/carbon/xenomorph/strains/castes/praetorian/dancer.dm b/code/modules/mob/living/carbon/xenomorph/strains/castes/praetorian/dancer.dm index e16e7c8291c0..7d387d2f70e7 100644 --- a/code/modules/mob/living/carbon/xenomorph/strains/castes/praetorian/dancer.dm +++ b/code/modules/mob/living/carbon/xenomorph/strains/castes/praetorian/dancer.dm @@ -108,7 +108,7 @@ var/mob/living/carbon/human/Hu = target_carbon Hu.update_xeno_hostile_hud() - // Hmm todayvisible_message(SPAN_DANGER("\The [dancer_user] violently slices [target_atom] with its tail[buffed?" twice":""]!"), + // Hmm today visible_message(SPAN_DANGER("\The [dancer_user] violently slices [target_atom] with its tail[buffed?" twice":""]!"), dancer_user.face_atom(target_atom) var/damage = get_xeno_damage_slash(target_carbon, rand(dancer_user.melee_damage_lower, dancer_user.melee_damage_upper)) @@ -117,7 +117,6 @@ SPAN_DANGER("We slice [target_atom] with our tail[buffed?" twice":""]!")) if(buffed) - // Do two attacks instead of one dancer_user.animation_attack_on(target_atom) dancer_user.flick_attack_overlay(target_atom, "tail") dancer_user.emote("roar") // Feedback for the player that we got the magic double impale @@ -125,7 +124,6 @@ target_carbon.apply_armoured_damage(damage, ARMOR_MELEE, BRUTE, "chest", 10) playsound(target_carbon, 'sound/weapons/alien_tail_attack.ogg', 30, TRUE) - // Reroll damage damage = get_xeno_damage_slash(target_carbon, rand(dancer_user.melee_damage_lower, dancer_user.melee_damage_upper)) var/list/attack_data = list( "attacker" = dancer_user, @@ -167,7 +165,6 @@ if(!istype(behavior)) return - //Activate dodge mechanics behavior.dodge_activated = TRUE button.icon_state = "template_active" to_chat(dodge_user, SPAN_XENOHIGHDANGER("We can now dodge through mobs!")) @@ -176,10 +173,8 @@ dodge_user.add_temp_pass_flags(PASS_MOB_THRU) dodge_user.recalculate_speed() - //Start afterimage sequence INVOKE_ASYNC(src, PROC_REF(create_afterimage_sequence), dodge_user, duration) - //Set a timer to remove effects AFTER the full duration of the ability addtimer(CALLBACK(src, PROC_REF(remove_effects)), duration) apply_cooldown() @@ -249,7 +244,6 @@ if(!afterimage_location) return - //Apply directional offset based on the player's direction var/directional_offset_x = 0 var/directional_offset_y = 0 @@ -263,7 +257,6 @@ if(WEST) directional_offset_x = 16 - //Create the afterimage at the current position with the offset var/obj/effect/overlay/afterimage = new /obj/effect/overlay/afterimage(afterimage_location) afterimage.icon = dodge_user.icon afterimage.icon_state = dodge_user.icon_state @@ -271,11 +264,10 @@ afterimage.layer = dodge_user.layer afterimage.dir = dodge_user.dir afterimage.alpha = 200 - afterimage.mouse_opacity = 0 // Non-interactive + afterimage.mouse_opacity = 0 afterimage.pixel_x = dodge_user.pixel_x + directional_offset_x afterimage.pixel_y = dodge_user.pixel_y + directional_offset_y - //Trigger the fade-out effect for the afterimage addtimer(CALLBACK(afterimage, TYPE_PROC_REF(/obj/effect/overlay/afterimage, fade_out_afterimage))) /obj/effect/overlay/afterimage/proc/fade_out_afterimage() From a9d633540493942c20be111b169cf6280fe7682a Mon Sep 17 00:00:00 2001 From: Venuska1117 Date: Tue, 9 Dec 2025 14:34:38 +0100 Subject: [PATCH 10/40] Making dancer capable of capturing targets. --- .../living/carbon/xenomorph/XenoAttacks.dm | 5 +++ .../living/carbon/xenomorph/attack_alien.dm | 3 ++ .../xenomorph/strains/behavior_delegate.dm | 3 ++ .../strains/castes/praetorian/dancer.dm | 38 +++++++++++-------- 4 files changed, 33 insertions(+), 16 deletions(-) diff --git a/code/modules/mob/living/carbon/xenomorph/XenoAttacks.dm b/code/modules/mob/living/carbon/xenomorph/XenoAttacks.dm index 260a438061dd..2b38f80c0678 100644 --- a/code/modules/mob/living/carbon/xenomorph/XenoAttacks.dm +++ b/code/modules/mob/living/carbon/xenomorph/XenoAttacks.dm @@ -219,6 +219,11 @@ playsound(loc, 'sound/weapons/thudswoosh.ogg', 25, 1) xeno.visible_message(SPAN_WARNING("\The [xeno] shoves \the [src]!"), SPAN_WARNING("We shove \the [src]!"), null, 5, CHAT_TYPE_XENO_COMBAT) + + if(xeno.behavior_delegate) + var/datum/behavior_delegate/MD = xeno.behavior_delegate + MD.melee_tackle_additional_effects_target(src) + return XENO_ATTACK_ACTION /mob/living/carbon/xenomorph/proc/attempt_headbutt(mob/living/carbon/xenomorph/target) diff --git a/code/modules/mob/living/carbon/xenomorph/attack_alien.dm b/code/modules/mob/living/carbon/xenomorph/attack_alien.dm index d15e84badfac..deb159c7d757 100644 --- a/code/modules/mob/living/carbon/xenomorph/attack_alien.dm +++ b/code/modules/mob/living/carbon/xenomorph/attack_alien.dm @@ -221,6 +221,9 @@ tackle_min_offset += 2 tackle_max_offset += 2 + if(attacking_xeno.behavior_delegate) + attacking_xeno.behavior_delegate.melee_tackle_additional_effects_target(src) + var/knocked_down if(attacking_xeno.attempt_tackle(src, tackle_mult, tackle_min_offset, tackle_max_offset)) var/strength = rand(attacking_xeno.tacklestrength_min, attacking_xeno.tacklestrength_max) diff --git a/code/modules/mob/living/carbon/xenomorph/strains/behavior_delegate.dm b/code/modules/mob/living/carbon/xenomorph/strains/behavior_delegate.dm index 53ca8c3a74da..6ba0bbdbdd9e 100644 --- a/code/modules/mob/living/carbon/xenomorph/strains/behavior_delegate.dm +++ b/code/modules/mob/living/carbon/xenomorph/strains/behavior_delegate.dm @@ -63,6 +63,9 @@ /datum/behavior_delegate/proc/melee_attack_additional_effects_target(mob/living/carbon/A) return +/datum/behavior_delegate/proc/melee_tackle_additional_effects_target(mob/living/carbon/A) + return + /datum/behavior_delegate/proc/melee_attack_additional_effects_self() SEND_SIGNAL(bound_xeno, COMSIG_XENO_SLASH_ADDITIONAL_EFFECTS_SELF) diff --git a/code/modules/mob/living/carbon/xenomorph/strains/castes/praetorian/dancer.dm b/code/modules/mob/living/carbon/xenomorph/strains/castes/praetorian/dancer.dm index 61e7a8bbd15f..7010ac4daf66 100644 --- a/code/modules/mob/living/carbon/xenomorph/strains/castes/praetorian/dancer.dm +++ b/code/modules/mob/living/carbon/xenomorph/strains/castes/praetorian/dancer.dm @@ -37,7 +37,7 @@ // State var/dodge_activated = FALSE -/datum/behavior_delegate/praetorian_dancer/melee_attack_additional_effects_target(mob/living/carbon/target_carbon) +/datum/behavior_delegate/praetorian_dancer/proc/apply_tag(mob/living/carbon/target_carbon) if(!isxeno_human(target_carbon)) return @@ -54,6 +54,12 @@ var/mob/living/carbon/human/target_human = target_carbon target_human.update_xeno_hostile_hud() +/datum/behavior_delegate/praetorian_dancer/melee_attack_additional_effects_target(mob/living/carbon/target_carbon) + apply_tag(target_carbon) + +/datum/behavior_delegate/praetorian_dancer/melee_tackle_additional_effects_target(mob/living/carbon/target_carbon) + apply_tag(target_carbon) + /datum/action/xeno_action/activable/prae_impale/use_ability(atom/target_atom) var/mob/living/carbon/xenomorph/dancer_user = owner @@ -85,12 +91,12 @@ return if(dist > 1) - var/turf/targetTurf = get_step(dancer_user, get_dir(dancer_user, target_carbon)) - if(targetTurf.density) - to_chat(dancer_user, SPAN_WARNING("We can't attack through [targetTurf]!")) + var/turf/target_turf = get_step(dancer_user, get_dir(dancer_user, target_carbon)) + if(target_turf.density) + to_chat(dancer_user, SPAN_WARNING("We can't attack through [target_turf]!")) return else - for(var/atom/atom_in_turf in targetTurf) + for(var/atom/atom_in_turf in target_turf) if(atom_in_turf.density && !atom_in_turf.throwpass && !istype(atom_in_turf, /obj/structure/barricade) && !istype(atom_in_turf, /mob/living)) to_chat(dancer_user, SPAN_WARNING("We can't attack through [atom_in_turf]!")) return @@ -106,8 +112,8 @@ break if(ishuman(target_carbon)) - var/mob/living/carbon/human/Hu = target_carbon - Hu.update_xeno_hostile_hud() + var/mob/living/carbon/human/human_target = target_carbon + human_target.update_xeno_hostile_hud() // Hmm today visible_message(SPAN_DANGER("\The [dancer_user] violently slices [target_atom] with its tail[buffed?" twice":""]!"), dancer_user.face_atom(target_atom) @@ -131,7 +137,7 @@ "target" = target_carbon, "damage" = damage ) - addtimer(CALLBACK(src, /datum/action/xeno_action/activable/prae_impale/proc/delayed_impale_strike, attack_data), 4) + addtimer(CALLBACK(src, /datum/action/xeno_action/activable/prae_impale/proc/delayed_impale_strike, attack_data), 4 DECISECONDS) return ..() @@ -265,7 +271,7 @@ afterimage.layer = dodge_user.layer afterimage.dir = dodge_user.dir afterimage.alpha = 200 - afterimage.mouse_opacity = 0 + afterimage.mouse_opacity = MOUSE_OPACITY_TRANSPARENT afterimage.pixel_x = dodge_user.pixel_x + directional_offset_x afterimage.pixel_y = dodge_user.pixel_y + directional_offset_y @@ -294,9 +300,9 @@ pixel_x = initial(pixel_x) pixel_y = initial(pixel_y) -/atom/movable/proc/apply_offset(dx, dy) - pixel_x += dx - pixel_y += dy +/atom/movable/proc/apply_offset(dir_x, dir_y) + pixel_x += dir_x + pixel_y += dir_y /datum/afterimage_state var/mob/living/carbon/xenomorph/owner @@ -350,12 +356,12 @@ return if(dist > 1) - var/turf/targetTurf = get_step(dancer_user, get_dir(dancer_user, target_carbon)) - if(targetTurf.density) - to_chat(dancer_user, SPAN_WARNING("We can't attack through [targetTurf]!")) + var/turf/target_turf = get_step(dancer_user, get_dir(dancer_user, target_carbon)) + if(target_turf.density) + to_chat(dancer_user, SPAN_WARNING("We can't attack through [target_turf]!")) return else - for(var/atom/atom_in_turf in targetTurf) + for(var/atom/atom_in_turf in target_turf) if(atom_in_turf.density && !atom_in_turf.throwpass && !istype(atom_in_turf, /obj/structure/barricade) && !istype(atom_in_turf, /mob/living)) to_chat(dancer_user, SPAN_WARNING("We can't attack through [atom_in_turf]!")) return From 5bd78a520c62e268e7e51a18b57bef173f58e703 Mon Sep 17 00:00:00 2001 From: Venuska1117 Date: Fri, 23 Jan 2026 03:22:47 +0100 Subject: [PATCH 11/40] changes requested --- code/modules/projectiles/projectile.dm | 24 +++++++++++------------- 1 file changed, 11 insertions(+), 13 deletions(-) diff --git a/code/modules/projectiles/projectile.dm b/code/modules/projectiles/projectile.dm index 5783909ef585..1eef39020e4a 100644 --- a/code/modules/projectiles/projectile.dm +++ b/code/modules/projectiles/projectile.dm @@ -510,19 +510,6 @@ if((ammo.flags_ammo_behavior & AMMO_XENO) && (isfacehugger(L) || L.stat == DEAD)) //xeno ammo is NEVER meant to hit or damage dead people. If you want to add a xeno ammo that DOES then make a new flag that makes it ignore this check. return FALSE - if(isxeno(L)) - if(!((ammo.flags_ammo_behavior & AMMO_SNIPER) || (ammo.flags_ammo_behavior & AMMO_ROCKET))) - if(L.body_position != LYING_DOWN && L.stat != UNCONSCIOUS) //We don't want to "somehow" dodge bullets when lying down/unconscious. - var/mob/living/carbon/xenomorph/xeno = L - var/dodge_roll = rand(1, 100) - if(dodge_roll <= xeno.dodge_chance) - xeno.xeno_jitter(5 DECISECONDS) - if(src.ammo.sound_miss) - playsound_client(xeno.client, src.ammo.sound_miss, get_turf(xeno), 75, TRUE) - xeno.visible_message(SPAN_AVOIDHARM("The [xeno] darts aside, evading [src]!"), - SPAN_AVOIDHARM("You react fast, and [src] narrowly misses you!"), null, 4, CHAT_TYPE_TAKING_HIT) - return FALSE - var/hit_chance = L.get_projectile_hit_chance(src) if(hit_chance) // Calculated from combination of both ammo accuracy and gun accuracy @@ -909,6 +896,17 @@ if(X.hivenumber == hivenumber) return FALSE + if(!((ammo_flags & AMMO_SNIPER) || (ammo_flags & AMMO_ROCKET))) + if(body_position != LYING_DOWN && stat != UNCONSCIOUS) //We don't want to "somehow" dodge bullets when lying down/unconscious. + var/dodge_roll = rand(1, 100) + if(dodge_roll <= dodge_chance) + xeno_jitter(5 DECISECONDS) + if(P.ammo.sound_miss) + playsound_client(client, P.ammo.sound_miss, get_turf(src), 75, TRUE) + visible_message(SPAN_AVOIDHARM("The [src] darts aside, evading [P]!"), + SPAN_AVOIDHARM("You react fast, and [P] narrowly misses you!"), null, 4, CHAT_TYPE_TAKING_HIT) + return FALSE + if(mob_size == MOB_SIZE_SMALL) . -= 10 else if(mob_size >= MOB_SIZE_BIG) From 94f514fa83a44531ab0861f3e41eec23bc233b8e Mon Sep 17 00:00:00 2001 From: Venuska1117 Date: Fri, 23 Jan 2026 22:44:12 +0100 Subject: [PATCH 12/40] requested changes p.2 --- .../living/carbon/xenomorph/XenoAttacks.dm | 5 ----- .../praetorian/praetorian_abilities.dm | 4 ++-- .../living/carbon/xenomorph/attack_alien.dm | 3 --- .../xenomorph/strains/behavior_delegate.dm | 3 --- .../strains/castes/praetorian/dancer.dm | 20 +++++++++---------- code/modules/projectiles/projectile.dm | 2 +- 6 files changed, 13 insertions(+), 24 deletions(-) diff --git a/code/modules/mob/living/carbon/xenomorph/XenoAttacks.dm b/code/modules/mob/living/carbon/xenomorph/XenoAttacks.dm index 2b38f80c0678..260a438061dd 100644 --- a/code/modules/mob/living/carbon/xenomorph/XenoAttacks.dm +++ b/code/modules/mob/living/carbon/xenomorph/XenoAttacks.dm @@ -219,11 +219,6 @@ playsound(loc, 'sound/weapons/thudswoosh.ogg', 25, 1) xeno.visible_message(SPAN_WARNING("\The [xeno] shoves \the [src]!"), SPAN_WARNING("We shove \the [src]!"), null, 5, CHAT_TYPE_XENO_COMBAT) - - if(xeno.behavior_delegate) - var/datum/behavior_delegate/MD = xeno.behavior_delegate - MD.melee_tackle_additional_effects_target(src) - return XENO_ATTACK_ACTION /mob/living/carbon/xenomorph/proc/attempt_headbutt(mob/living/carbon/xenomorph/target) 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 f740f90fd94f..74f7ea64e489 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 @@ -177,7 +177,7 @@ plasma_cost = 80 var/range = 2 - var/impale_click_miss_cooldown = 1.5 SECONDS + var/impale_click_miss_cooldown = 0.8 SECONDS /datum/action/xeno_action/onclick/prae_dodge name = "Dodge" @@ -202,7 +202,7 @@ xeno_cooldown = 13 SECONDS plasma_cost = 30 - var/tail_click_miss_cooldown = 1.5 SECONDS + var/tail_click_miss_cooldown = 0.8 SECONDS // Config var/range = 2 diff --git a/code/modules/mob/living/carbon/xenomorph/attack_alien.dm b/code/modules/mob/living/carbon/xenomorph/attack_alien.dm index 70dcb30cd943..bcbcb56b2ff4 100644 --- a/code/modules/mob/living/carbon/xenomorph/attack_alien.dm +++ b/code/modules/mob/living/carbon/xenomorph/attack_alien.dm @@ -228,9 +228,6 @@ tackle_min_offset += 2 tackle_max_offset += 2 - if(attacking_xeno.behavior_delegate) - attacking_xeno.behavior_delegate.melee_tackle_additional_effects_target(src) - var/knocked_down if(attacking_xeno.attempt_tackle(src, tackle_mult, tackle_min_offset, tackle_max_offset)) var/strength = rand(attacking_xeno.tacklestrength_min, attacking_xeno.tacklestrength_max) diff --git a/code/modules/mob/living/carbon/xenomorph/strains/behavior_delegate.dm b/code/modules/mob/living/carbon/xenomorph/strains/behavior_delegate.dm index 6ba0bbdbdd9e..53ca8c3a74da 100644 --- a/code/modules/mob/living/carbon/xenomorph/strains/behavior_delegate.dm +++ b/code/modules/mob/living/carbon/xenomorph/strains/behavior_delegate.dm @@ -63,9 +63,6 @@ /datum/behavior_delegate/proc/melee_attack_additional_effects_target(mob/living/carbon/A) return -/datum/behavior_delegate/proc/melee_tackle_additional_effects_target(mob/living/carbon/A) - return - /datum/behavior_delegate/proc/melee_attack_additional_effects_self() SEND_SIGNAL(bound_xeno, COMSIG_XENO_SLASH_ADDITIONAL_EFFECTS_SELF) diff --git a/code/modules/mob/living/carbon/xenomorph/strains/castes/praetorian/dancer.dm b/code/modules/mob/living/carbon/xenomorph/strains/castes/praetorian/dancer.dm index 7010ac4daf66..e0f221746caa 100644 --- a/code/modules/mob/living/carbon/xenomorph/strains/castes/praetorian/dancer.dm +++ b/code/modules/mob/living/carbon/xenomorph/strains/castes/praetorian/dancer.dm @@ -57,9 +57,6 @@ /datum/behavior_delegate/praetorian_dancer/melee_attack_additional_effects_target(mob/living/carbon/target_carbon) apply_tag(target_carbon) -/datum/behavior_delegate/praetorian_dancer/melee_tackle_additional_effects_target(mob/living/carbon/target_carbon) - apply_tag(target_carbon) - /datum/action/xeno_action/activable/prae_impale/use_ability(atom/target_atom) var/mob/living/carbon/xenomorph/dancer_user = owner @@ -123,6 +120,12 @@ dancer_user.visible_message(SPAN_DANGER("\The [dancer_user] violently slices [target_atom] with its tail[buffed?" twice":""]!"), SPAN_DANGER("We slice [target_atom] with our tail[buffed?" twice":""]!")) + var/list/attack_data = list( + "attacker" = dancer_user, + "target" = target_carbon, + "damage" = damage + ) + if(buffed) dancer_user.animation_attack_on(target_atom) dancer_user.flick_attack_overlay(target_atom, "tail") @@ -132,16 +135,13 @@ playsound(target_carbon, 'sound/weapons/alien_tail_attack.ogg', 30, TRUE) damage = get_xeno_damage_slash(target_carbon, rand(dancer_user.melee_damage_lower, dancer_user.melee_damage_upper)) - var/list/attack_data = list( - "attacker" = dancer_user, - "target" = target_carbon, - "damage" = damage - ) - addtimer(CALLBACK(src, /datum/action/xeno_action/activable/prae_impale/proc/delayed_impale_strike, attack_data), 4 DECISECONDS) + addtimer(CALLBACK(src, /datum/action/xeno_action/activable/prae_impale/proc/impale_strike, attack_data), 4 DECISECONDS) + else + addtimer(CALLBACK(src, /datum/action/xeno_action/activable/prae_impale/proc/impale_strike, attack_data)) return ..() -/datum/action/xeno_action/activable/prae_impale/proc/delayed_impale_strike(list/attack_data) +/datum/action/xeno_action/activable/prae_impale/proc/impale_strike(list/attack_data) var/mob/living/carbon/xenomorph/attacker = attack_data["attacker"] var/mob/living/carbon/target = attack_data["target"] var/damage = attack_data["damage"] diff --git a/code/modules/projectiles/projectile.dm b/code/modules/projectiles/projectile.dm index 1eef39020e4a..aa264a8aedd1 100644 --- a/code/modules/projectiles/projectile.dm +++ b/code/modules/projectiles/projectile.dm @@ -903,7 +903,7 @@ xeno_jitter(5 DECISECONDS) if(P.ammo.sound_miss) playsound_client(client, P.ammo.sound_miss, get_turf(src), 75, TRUE) - visible_message(SPAN_AVOIDHARM("The [src] darts aside, evading [P]!"), + visible_message(SPAN_AVOIDHARM("The [src] darts aside, evading [P]!"), SPAN_AVOIDHARM("You react fast, and [P] narrowly misses you!"), null, 4, CHAT_TYPE_TAKING_HIT) return FALSE From 5cdea0378ce4549782cb89a892dc8f00845b55aa Mon Sep 17 00:00:00 2001 From: Venuska1117 Date: Fri, 23 Jan 2026 22:47:31 +0100 Subject: [PATCH 13/40] forgot about that --- .../carbon/xenomorph/strains/castes/praetorian/dancer.dm | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/code/modules/mob/living/carbon/xenomorph/strains/castes/praetorian/dancer.dm b/code/modules/mob/living/carbon/xenomorph/strains/castes/praetorian/dancer.dm index e0f221746caa..382106933323 100644 --- a/code/modules/mob/living/carbon/xenomorph/strains/castes/praetorian/dancer.dm +++ b/code/modules/mob/living/carbon/xenomorph/strains/castes/praetorian/dancer.dm @@ -37,7 +37,7 @@ // State var/dodge_activated = FALSE -/datum/behavior_delegate/praetorian_dancer/proc/apply_tag(mob/living/carbon/target_carbon) +/datum/behavior_delegate/praetorian_dancer/melee_attack_additional_effects_target(mob/living/carbon/target_carbon) if(!isxeno_human(target_carbon)) return @@ -54,9 +54,6 @@ var/mob/living/carbon/human/target_human = target_carbon target_human.update_xeno_hostile_hud() -/datum/behavior_delegate/praetorian_dancer/melee_attack_additional_effects_target(mob/living/carbon/target_carbon) - apply_tag(target_carbon) - /datum/action/xeno_action/activable/prae_impale/use_ability(atom/target_atom) var/mob/living/carbon/xenomorph/dancer_user = owner From 3dccd0c513f712fe4364e02530922d4a34c0a044 Mon Sep 17 00:00:00 2001 From: Venuska1117 Date: Sun, 25 Jan 2026 13:10:00 +0100 Subject: [PATCH 14/40] Requested changes --- .../xenomorph/strains/castes/praetorian/dancer.dm | 13 +++---------- code/modules/projectiles/projectile.dm | 2 +- 2 files changed, 4 insertions(+), 11 deletions(-) diff --git a/code/modules/mob/living/carbon/xenomorph/strains/castes/praetorian/dancer.dm b/code/modules/mob/living/carbon/xenomorph/strains/castes/praetorian/dancer.dm index 382106933323..88cc6397f3ce 100644 --- a/code/modules/mob/living/carbon/xenomorph/strains/castes/praetorian/dancer.dm +++ b/code/modules/mob/living/carbon/xenomorph/strains/castes/praetorian/dancer.dm @@ -124,17 +124,10 @@ ) if(buffed) - dancer_user.animation_attack_on(target_atom) - dancer_user.flick_attack_overlay(target_atom, "tail") + impale_strike(attack_data) dancer_user.emote("roar") // Feedback for the player that we got the magic double impale - - target_carbon.apply_armoured_damage(damage, ARMOR_MELEE, BRUTE, "chest", 10) - playsound(target_carbon, 'sound/weapons/alien_tail_attack.ogg', 30, TRUE) - - damage = get_xeno_damage_slash(target_carbon, rand(dancer_user.melee_damage_lower, dancer_user.melee_damage_upper)) - addtimer(CALLBACK(src, /datum/action/xeno_action/activable/prae_impale/proc/impale_strike, attack_data), 4 DECISECONDS) - else - addtimer(CALLBACK(src, /datum/action/xeno_action/activable/prae_impale/proc/impale_strike, attack_data)) + addtimer(CALLBACK(src, PROC_REF(impale_strike), attack_data), 4 DECISECONDS) + impale_strike(attack_data) return ..() diff --git a/code/modules/projectiles/projectile.dm b/code/modules/projectiles/projectile.dm index aa264a8aedd1..c8d39ae94aba 100644 --- a/code/modules/projectiles/projectile.dm +++ b/code/modules/projectiles/projectile.dm @@ -896,7 +896,7 @@ if(X.hivenumber == hivenumber) return FALSE - if(!((ammo_flags & AMMO_SNIPER) || (ammo_flags & AMMO_ROCKET))) + if(dodge_chance && !((ammo_flags & AMMO_SNIPER) || (ammo_flags & AMMO_ROCKET))) if(body_position != LYING_DOWN && stat != UNCONSCIOUS) //We don't want to "somehow" dodge bullets when lying down/unconscious. var/dodge_roll = rand(1, 100) if(dodge_roll <= dodge_chance) From ad2a216357d312098745826348ff20f5994d969d Mon Sep 17 00:00:00 2001 From: MistChristmas <7815982+MistChristmas@users.noreply.github.com> Date: Sun, 25 Jan 2026 12:32:27 +0000 Subject: [PATCH 15/40] Amend --- .../living/carbon/xenomorph/strains/castes/praetorian/dancer.dm | 1 - 1 file changed, 1 deletion(-) diff --git a/code/modules/mob/living/carbon/xenomorph/strains/castes/praetorian/dancer.dm b/code/modules/mob/living/carbon/xenomorph/strains/castes/praetorian/dancer.dm index 88cc6397f3ce..ac537d77e97b 100644 --- a/code/modules/mob/living/carbon/xenomorph/strains/castes/praetorian/dancer.dm +++ b/code/modules/mob/living/carbon/xenomorph/strains/castes/praetorian/dancer.dm @@ -124,7 +124,6 @@ ) if(buffed) - impale_strike(attack_data) dancer_user.emote("roar") // Feedback for the player that we got the magic double impale addtimer(CALLBACK(src, PROC_REF(impale_strike), attack_data), 4 DECISECONDS) impale_strike(attack_data) From ce15d2408334a12075c74dc55f2e580ba4c4842e Mon Sep 17 00:00:00 2001 From: Venuska1117 Date: Sun, 25 Jan 2026 22:45:52 +0100 Subject: [PATCH 16/40] fixing small issues, oops --- .../carbon/xenomorph/strains/castes/praetorian/dancer.dm | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/code/modules/mob/living/carbon/xenomorph/strains/castes/praetorian/dancer.dm b/code/modules/mob/living/carbon/xenomorph/strains/castes/praetorian/dancer.dm index 88cc6397f3ce..edd5f55d6033 100644 --- a/code/modules/mob/living/carbon/xenomorph/strains/castes/praetorian/dancer.dm +++ b/code/modules/mob/living/carbon/xenomorph/strains/castes/praetorian/dancer.dm @@ -122,12 +122,11 @@ "target" = target_carbon, "damage" = damage ) + impale_strike(attack_data) if(buffed) - impale_strike(attack_data) dancer_user.emote("roar") // Feedback for the player that we got the magic double impale addtimer(CALLBACK(src, PROC_REF(impale_strike), attack_data), 4 DECISECONDS) - impale_strike(attack_data) return ..() @@ -136,7 +135,7 @@ var/mob/living/carbon/target = attack_data["target"] var/damage = attack_data["damage"] - if(!attacker || !target || target.stat == DEAD) + if(!attacker || !target || target.stat == DEAD || QDELETED(attacker) || QDELETED(target)) return attacker.animation_attack_on(target) From 5e7f861ddffa64d4cfd9223055e8193f0edcf1db Mon Sep 17 00:00:00 2001 From: Venuska1117 Date: Mon, 26 Jan 2026 18:30:32 +0100 Subject: [PATCH 17/40] New changes, version 0.3. - Replaces tailstab with Harpoon Tail, this tail always deal 8 damage on DISARM intent that bypasses armor, when attacked with this tail you only receive 40% of original cooldown. - Dodge ability is now timed ability, the longer its used, the longer cooldown you get. - Reduced recovery gained from phermones above "Strong" tier, any phermones above "Strong" dont give more regen. --- .../praetorian/praetorian_abilities.dm | 12 ++- .../strains/castes/praetorian/dancer.dm | 102 ++++++++++++++---- icons/mob/hud/actions_xeno.dmi | Bin 60498 -> 62444 bytes 3 files changed, 92 insertions(+), 22 deletions(-) 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 74f7ea64e489..b2d23c97daaa 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 @@ -167,6 +167,13 @@ ////////// Dancer Abilities +/datum/action/xeno_action/activable/tail_stab/harpoon_tail + name = "Tail Harpoon" + action_icon_state = "tail_harpoon" + action_type = XENO_ACTION_CLICK + ability_primacy = XENO_TAIL_STAB + var/blunt_damage = 8 + /datum/action/xeno_action/activable/prae_impale name = "Impale" action_icon_state = "prae_impale" @@ -185,11 +192,10 @@ macro_path = /datum/action/xeno_action/verb/verb_prae_dodge ability_primacy = XENO_PRIMARY_ACTION_2 action_type = XENO_ACTION_CLICK - plasma_cost = 200 - xeno_cooldown = 19 SECONDS // Config - var/duration = 7 SECONDS + var/duration = 10 SECONDS + var/dodge_timer = TIMER_ID_NULL var/speed_buff_amount = 0.5 var/afterimage_interval = 2 DECISECONDS diff --git a/code/modules/mob/living/carbon/xenomorph/strains/castes/praetorian/dancer.dm b/code/modules/mob/living/carbon/xenomorph/strains/castes/praetorian/dancer.dm index edd5f55d6033..54a22f122387 100644 --- a/code/modules/mob/living/carbon/xenomorph/strains/castes/praetorian/dancer.dm +++ b/code/modules/mob/living/carbon/xenomorph/strains/castes/praetorian/dancer.dm @@ -6,6 +6,7 @@ icon_state_prefix = "Dancer" actions_to_remove = list( + /datum/action/xeno_action/activable/tail_stab, /datum/action/xeno_action/activable/xeno_spit, /datum/action/xeno_action/activable/pounce/base_prae_dash, /datum/action/xeno_action/activable/prae_acid_ball, @@ -14,6 +15,7 @@ /datum/action/xeno_action/activable/xeno_spit/praetorian, ) actions_to_add = list( + /datum/action/xeno_action/activable/tail_stab/harpoon_tail, /datum/action/xeno_action/activable/prae_impale, /datum/action/xeno_action/onclick/prae_dodge, /datum/action/xeno_action/activable/prae_tail_trip, @@ -24,10 +26,11 @@ /datum/xeno_strain/dancer/apply_strain(mob/living/carbon/xenomorph/praetorian/prae) prae.armor_modifier -= XENO_ARMOR_MOD_VERY_SMALL prae.speed_modifier += XENO_SPEED_FASTMOD_TIER_5 - prae.dodge_chance = 18 prae.regeneration_multiplier = XENO_REGEN_MULTIPLIER_TIER_7 prae.plasma_types = list(PLASMA_CATECHOLAMINE) prae.claw_type = CLAW_TYPE_SHARP + prae.dodge_chance = 18 + prae.received_phero_caps["recovery"] = 3 //need to be limited, regens too fast. prae.recalculate_everything() @@ -36,6 +39,16 @@ // State var/dodge_activated = FALSE + var/dodge_start_time = -1 + var/dodge_time = 10 SECONDS + +/datum/behavior_delegate/praetorian_dancer/append_to_stat() + . = list() + . += "Dodge Chance: [bound_xeno.dodge_chance]%" + if(dodge_start_time != -1) + var/time_left = (dodge_time-(world.time - dodge_start_time)) / 10 + . += "Dodge Remaining: [time_left] second\s." + return /datum/behavior_delegate/praetorian_dancer/melee_attack_additional_effects_target(mob/living/carbon/target_carbon) if(!isxeno_human(target_carbon)) @@ -54,6 +67,31 @@ var/mob/living/carbon/human/target_human = target_carbon target_human.update_xeno_hostile_hud() +/datum/action/xeno_action/activable/tail_stab/harpoon_tail/ability_act(mob/living/carbon/xenomorph/xeno, mob/living/carbon/target, obj/limb/limb) + if(!istype(xeno) || !istype(target)) + return + + if(xeno.a_intent == INTENT_DISARM) + target.last_damage_data = create_cause_data(initial(xeno.caste_type), xeno) + + xeno.visible_message( + SPAN_XENOWARNING("\The [xeno] smash [target] with the crooked part of its tail!"), + SPAN_XENOWARNING("We smash [target] with the crooked part of our tail!") + ) + xeno.animation_attack_on(target) + xeno.flick_attack_overlay(target, "slam") + + if(xeno.behavior_delegate) + xeno.behavior_delegate.melee_attack_additional_effects_target(target) + + playsound(target, "punch", 25, TRUE) + target.apply_damage(blunt_damage, BRUTE, "chest") + apply_cooldown(cooldown_modifier = 0.4) + update_button_icon() + return target + + return ..() + /datum/action/xeno_action/activable/prae_impale/use_ability(atom/target_atom) var/mob/living/carbon/xenomorph/dancer_user = owner @@ -147,38 +185,43 @@ /datum/action/xeno_action/onclick/prae_dodge/use_ability(atom/target) var/mob/living/carbon/xenomorph/dodge_user = owner + if(!istype(dodge_user) || !dodge_user.check_state()) + return - if(!action_cooldown_check()) + var/datum/behavior_delegate/praetorian_dancer/behavior = dodge_user.behavior_delegate + if(!istype(behavior)) return - if(!istype(dodge_user) || !dodge_user.check_state()) + if(behavior.dodge_activated) + remove_effects(1.0) return - if(!check_and_use_plasma_owner()) + if(!action_cooldown_check()) return - var/datum/behavior_delegate/praetorian_dancer/behavior = dodge_user.behavior_delegate - if(!istype(behavior)) + if(!check_and_use_plasma_owner(200)) return behavior.dodge_activated = TRUE + behavior.dodge_start_time = world.time button.icon_state = "template_active" - to_chat(dodge_user, SPAN_XENOHIGHDANGER("We can now dodge through mobs!")) dodge_user.speed_modifier -= speed_buff_amount dodge_user.dodge_chance += 20 dodge_user.add_temp_pass_flags(PASS_MOB_THRU) dodge_user.recalculate_speed() + dodge_user.balloon_alert(dodge_user, "we start our evasive stance!", text_color = "#7d32bb", delay = 1 SECONDS) INVOKE_ASYNC(src, PROC_REF(create_afterimage_sequence), dodge_user, duration) - addtimer(CALLBACK(src, PROC_REF(remove_effects)), duration) + if(dodge_timer != TIMER_ID_NULL) + deltimer(dodge_timer) + + dodge_timer = addtimer(CALLBACK(src, PROC_REF(remove_effects)), duration, TIMER_STOPPABLE) - apply_cooldown() return ..() -/datum/action/xeno_action/onclick/prae_dodge/proc/remove_effects() +/datum/action/xeno_action/onclick/prae_dodge/proc/remove_effects(refund_multiplier = 1.0) var/mob/living/carbon/xenomorph/dodge_remove = owner - if(!istype(dodge_remove)) return @@ -186,14 +229,32 @@ if(!istype(behavior)) return - if(behavior.dodge_activated) - behavior.dodge_activated = FALSE - button.icon_state = "template_xeno" - dodge_remove.speed_modifier += speed_buff_amount - dodge_remove.dodge_chance -= 20 - dodge_remove.remove_temp_pass_flags(PASS_MOB_THRU) - dodge_remove.recalculate_speed() - to_chat(dodge_remove, SPAN_XENOHIGHDANGER("We can no longer dodge through mobs!")) + if(!behavior.dodge_activated) + return + + behavior.dodge_activated = FALSE + button.icon_state = "template_xeno" + dodge_remove.speed_modifier += speed_buff_amount + dodge_remove.dodge_chance -= 20 + dodge_remove.remove_temp_pass_flags(PASS_MOB_THRU) + dodge_remove.recalculate_speed() + dodge_remove.reset_position_to_initial() + dodge_remove.balloon_alert(dodge_remove, "our evasive stance fades", text_color = "#7d32bb", delay = 1 SECONDS) + + if(dodge_timer != TIMER_ID_NULL) + deltimer(dodge_timer) + dodge_timer = TIMER_ID_NULL + + var/recharge_time = behavior.dodge_time + if(behavior.dodge_start_time > 0) + refund_multiplier = clamp(refund_multiplier, 0, 1) + var/used_ratio = (world.time - behavior.dodge_start_time) / duration + used_ratio = clamp(used_ratio, 0, 1) + var/remaining = 1 - used_ratio + recharge_time = behavior.dodge_time - remaining * refund_multiplier * behavior.dodge_time + + behavior.dodge_start_time = -1 + apply_cooldown_override(recharge_time) /datum/action/xeno_action/onclick/prae_dodge/proc/create_afterimage_sequence(mob/living/carbon/xenomorph/dodge_user, duration) if(!dodge_user || !dodge_user.loc) @@ -213,6 +274,9 @@ return var/mob/living/carbon/xenomorph/dodge_user = state.owner + var/datum/behavior_delegate/praetorian_dancer/behavior = dodge_user.behavior_delegate + if(!istype(behavior) || !behavior.dodge_activated) + return var/turf/current_position = get_turf(dodge_user.loc) if(current_position && current_position != state.last_turf) diff --git a/icons/mob/hud/actions_xeno.dmi b/icons/mob/hud/actions_xeno.dmi index 38dea923420703650abcb3d881fd85239f542f93..f261f20f13e21025bfafcc7078ece69c359d0a8d 100644 GIT binary patch literal 62444 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 NE7jL3RZ13N{|nMpr;h*t literal 60498 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
^d$wgzM(>fzD)CV!|ljf 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 z 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

>jW!z>9K%th z%7Y#mh*9z@`P&%7sJ!=_|2xVqP8c&(&BT?qkfpx~)8)?}qThC1eU@ejoB#ATm7ghu zjOkuNboJmsJSKXSs?qIwn5&N{WTQ*IHuE+F45xe71X(*ThjaeDd@K4%Gs^j$WORZ) ozaF#Izwff`6O8(QE1KRrT>Ky1xKXV>MIhkPRMk_dQ?d^EAMC-aOaK4? From 77dbd1ad0db18d9bdeb244fab5c0d782c1bee150 Mon Sep 17 00:00:00 2001 From: Venuska1117 Date: Mon, 26 Jan 2026 18:43:12 +0100 Subject: [PATCH 18/40] changed name --- .../xenomorph/abilities/praetorian/praetorian_abilities.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 b2d23c97daaa..48f438ea2790 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 @@ -168,7 +168,7 @@ ////////// Dancer Abilities /datum/action/xeno_action/activable/tail_stab/harpoon_tail - name = "Tail Harpoon" + name = "Harpoon Tail" action_icon_state = "tail_harpoon" action_type = XENO_ACTION_CLICK ability_primacy = XENO_TAIL_STAB From 9486fbdce34ff2e5faf716d0d320784b8ebd9e00 Mon Sep 17 00:00:00 2001 From: Venuska1117 Date: Tue, 27 Jan 2026 18:16:05 +0100 Subject: [PATCH 19/40] changes v0.4 - Dancer slash now increase dodge +3% per slash, max 3 slashes for +9% dodge_chance increase, all stacks last 6 seconds. - Increased cooldown for dodge, now instead of 1s dodge = 1s cooldown, now its 1s dodge = 2s cooldown. --- .../strains/castes/praetorian/dancer.dm | 65 +++++++++++++++---- 1 file changed, 54 insertions(+), 11 deletions(-) diff --git a/code/modules/mob/living/carbon/xenomorph/strains/castes/praetorian/dancer.dm b/code/modules/mob/living/carbon/xenomorph/strains/castes/praetorian/dancer.dm index 54a22f122387..85d8e3e0d8ca 100644 --- a/code/modules/mob/living/carbon/xenomorph/strains/castes/praetorian/dancer.dm +++ b/code/modules/mob/living/carbon/xenomorph/strains/castes/praetorian/dancer.dm @@ -37,19 +37,66 @@ /datum/behavior_delegate/praetorian_dancer name = "Praetorian Dancer Behavior Delegate" - // State + /// Is Dodge ability active? var/dodge_activated = FALSE + /// Is dodge_time is activated (used for countdown) var/dodge_start_time = -1 + /// How long we want dodge active. var/dodge_time = 10 SECONDS + /// How much refund we want to get back? 1.0 is 1s used to 1s cooldown, 2.0 is 1s used 2s cooldown. + var/refund_multiplier = 2.0 + /// Used in calculation, its finalized number will be displayed as cooldown. + var/recharge_time = null + + /// How long ago we slashed target? + var/last_slash_time = 0 + /// How long slash bonus should last? + var/slash_time = 6 SECONDS + /// How many slashes we can do before hitting cap. + var/max_slashes = 3 + /// How many slashed did we do already. + var/current_slashes = 0 + /// How much % increase to dodge_chance we gain per slash. + var/dodge_per_slash = 3 /datum/behavior_delegate/praetorian_dancer/append_to_stat() . = list() . += "Dodge Chance: [bound_xeno.dodge_chance]%" + . += "Slash Dodge Stacks: [current_slashes]/[max_slashes]" + if(current_slashes > 0) + var/time_left = (slash_time - (world.time - last_slash_time)) / 10 + . += "Slash Dodge Remaining: [time_left] second\s." if(dodge_start_time != -1) var/time_left = (dodge_time-(world.time - dodge_start_time)) / 10 . += "Dodge Remaining: [time_left] second\s." return +/datum/behavior_delegate/praetorian_dancer/on_life() + if(current_slashes <= 0) + return + + if((world.time - last_slash_time) <= slash_time) + return + + reset_slash_dodge() + +/datum/behavior_delegate/praetorian_dancer/proc/reset_slash_dodge() + if(current_slashes <= 0) + return + + bound_xeno.dodge_chance -= current_slashes * dodge_per_slash + current_slashes = 0 + +/datum/behavior_delegate/praetorian_dancer/melee_attack_additional_effects_self() + if((world.time - last_slash_time) > slash_time) + reset_slash_dodge() + + if(current_slashes < max_slashes) + current_slashes++ + bound_xeno.dodge_chance += dodge_per_slash + + last_slash_time = world.time + /datum/behavior_delegate/praetorian_dancer/melee_attack_additional_effects_target(mob/living/carbon/target_carbon) if(!isxeno_human(target_carbon)) return @@ -75,7 +122,7 @@ target.last_damage_data = create_cause_data(initial(xeno.caste_type), xeno) xeno.visible_message( - SPAN_XENOWARNING("\The [xeno] smash [target] with the crooked part of its tail!"), + SPAN_XENOWARNING("[xeno] smash [target] with the crooked part of its tail!"), SPAN_XENOWARNING("We smash [target] with the crooked part of our tail!") ) xeno.animation_attack_on(target) @@ -193,7 +240,7 @@ return if(behavior.dodge_activated) - remove_effects(1.0) + remove_effects() return if(!action_cooldown_check()) @@ -220,7 +267,7 @@ return ..() -/datum/action/xeno_action/onclick/prae_dodge/proc/remove_effects(refund_multiplier = 1.0) +/datum/action/xeno_action/onclick/prae_dodge/proc/remove_effects() var/mob/living/carbon/xenomorph/dodge_remove = owner if(!istype(dodge_remove)) return @@ -245,16 +292,12 @@ deltimer(dodge_timer) dodge_timer = TIMER_ID_NULL - var/recharge_time = behavior.dodge_time if(behavior.dodge_start_time > 0) - refund_multiplier = clamp(refund_multiplier, 0, 1) - var/used_ratio = (world.time - behavior.dodge_start_time) / duration - used_ratio = clamp(used_ratio, 0, 1) - var/remaining = 1 - used_ratio - recharge_time = behavior.dodge_time - remaining * refund_multiplier * behavior.dodge_time + var/used_ratio = round((world.time - behavior.dodge_start_time) / duration, 0.1) + behavior.recharge_time = max(behavior.dodge_time * used_ratio * behavior.refund_multiplier, 5 SECONDS) behavior.dodge_start_time = -1 - apply_cooldown_override(recharge_time) + apply_cooldown_override(behavior.recharge_time) /datum/action/xeno_action/onclick/prae_dodge/proc/create_afterimage_sequence(mob/living/carbon/xenomorph/dodge_user, duration) if(!dodge_user || !dodge_user.loc) From e4e8ecda3a2bf39d6a324dfd3307ea9628769d33 Mon Sep 17 00:00:00 2001 From: Venuska1117 Date: Wed, 28 Jan 2026 03:20:30 +0100 Subject: [PATCH 20/40] version 0.5 - Changed tail attack description to match it "blunt" use (Mist suggestion) - Decreased impale and tail trip miss delay from 0.8 to 0.7s - Added "Harpoon Tail Intent" to give a hint and information to player on what it does. - Dodge Ability usage time is decreased from 10s to 7s --- .../praetorian/praetorian_abilities.dm | 5 +- .../strains/castes/praetorian/dancer.dm | 60 +++++++++++++------ 2 files changed, 45 insertions(+), 20 deletions(-) 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 48f438ea2790..799064c535c4 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 @@ -172,7 +172,6 @@ action_icon_state = "tail_harpoon" action_type = XENO_ACTION_CLICK ability_primacy = XENO_TAIL_STAB - var/blunt_damage = 8 /datum/action/xeno_action/activable/prae_impale name = "Impale" @@ -184,7 +183,7 @@ plasma_cost = 80 var/range = 2 - var/impale_click_miss_cooldown = 0.8 SECONDS + var/impale_click_miss_cooldown = 0.7 SECONDS /datum/action/xeno_action/onclick/prae_dodge name = "Dodge" @@ -208,7 +207,7 @@ xeno_cooldown = 13 SECONDS plasma_cost = 30 - var/tail_click_miss_cooldown = 0.8 SECONDS + var/tail_click_miss_cooldown = 0.7 SECONDS // Config var/range = 2 diff --git a/code/modules/mob/living/carbon/xenomorph/strains/castes/praetorian/dancer.dm b/code/modules/mob/living/carbon/xenomorph/strains/castes/praetorian/dancer.dm index 85d8e3e0d8ca..2c1c151c78d0 100644 --- a/code/modules/mob/living/carbon/xenomorph/strains/castes/praetorian/dancer.dm +++ b/code/modules/mob/living/carbon/xenomorph/strains/castes/praetorian/dancer.dm @@ -37,15 +37,23 @@ /datum/behavior_delegate/praetorian_dancer name = "Praetorian Dancer Behavior Delegate" + /// How much time is left on timer. (used for status) + var/time_left = null + + /// How much damage Harpoon Tail on DISARM mode do. (pierces armor) + var/blunt_damage = 8 + /// Harpoon Tail mode, used only to display in status. + var/tail_mode = null + /// Is Dodge ability active? var/dodge_activated = FALSE - /// Is dodge_time is activated (used for countdown) + /// Is dodge_time activate? (used for countdown) var/dodge_start_time = -1 - /// How long we want dodge active. - var/dodge_time = 10 SECONDS + /// For how long dodge should be active. + var/dodge_time = 7 SECONDS /// How much refund we want to get back? 1.0 is 1s used to 1s cooldown, 2.0 is 1s used 2s cooldown. var/refund_multiplier = 2.0 - /// Used in calculation, its finalized number will be displayed as cooldown. + /// Used in calculation, finalized number will be displayed as cooldown. var/recharge_time = null /// How long ago we slashed target? @@ -54,7 +62,7 @@ var/slash_time = 6 SECONDS /// How many slashes we can do before hitting cap. var/max_slashes = 3 - /// How many slashed did we do already. + /// How many slashes did we do already. var/current_slashes = 0 /// How much % increase to dodge_chance we gain per slash. var/dodge_per_slash = 3 @@ -63,11 +71,16 @@ . = list() . += "Dodge Chance: [bound_xeno.dodge_chance]%" . += "Slash Dodge Stacks: [current_slashes]/[max_slashes]" + intent_detection() + . += "Harpoon Tail Intent: [tail_mode]" + if(tail_mode == "Blunt") + . += "Damage: [blunt_damage] AP" + . += "Cooldown: 4 seconds." if(current_slashes > 0) - var/time_left = (slash_time - (world.time - last_slash_time)) / 10 + calculate_time(slash_time, last_slash_time) . += "Slash Dodge Remaining: [time_left] second\s." if(dodge_start_time != -1) - var/time_left = (dodge_time-(world.time - dodge_start_time)) / 10 + calculate_time(dodge_time, dodge_start_time) . += "Dodge Remaining: [time_left] second\s." return @@ -80,13 +93,6 @@ reset_slash_dodge() -/datum/behavior_delegate/praetorian_dancer/proc/reset_slash_dodge() - if(current_slashes <= 0) - return - - bound_xeno.dodge_chance -= current_slashes * dodge_per_slash - current_slashes = 0 - /datum/behavior_delegate/praetorian_dancer/melee_attack_additional_effects_self() if((world.time - last_slash_time) > slash_time) reset_slash_dodge() @@ -114,16 +120,36 @@ var/mob/living/carbon/human/target_human = target_carbon target_human.update_xeno_hostile_hud() +/datum/behavior_delegate/praetorian_dancer/proc/reset_slash_dodge() + if(current_slashes <= 0) + return + + bound_xeno.dodge_chance -= current_slashes * dodge_per_slash + current_slashes = 0 + +/datum/behavior_delegate/praetorian_dancer/proc/calculate_time(full_time, when_started) + time_left = (full_time - (world.time - when_started)) / 10 + +/datum/behavior_delegate/praetorian_dancer/proc/intent_detection() + if(bound_xeno && bound_xeno.a_intent == INTENT_DISARM) + tail_mode = "Blunt" + else + tail_mode = "Normal" + /datum/action/xeno_action/activable/tail_stab/harpoon_tail/ability_act(mob/living/carbon/xenomorph/xeno, mob/living/carbon/target, obj/limb/limb) if(!istype(xeno) || !istype(target)) return + var/datum/behavior_delegate/praetorian_dancer/behavior = xeno.behavior_delegate + if(!istype(behavior)) + return + if(xeno.a_intent == INTENT_DISARM) target.last_damage_data = create_cause_data(initial(xeno.caste_type), xeno) xeno.visible_message( - SPAN_XENOWARNING("[xeno] smash [target] with the crooked part of its tail!"), - SPAN_XENOWARNING("We smash [target] with the crooked part of our tail!") + SPAN_XENOWARNING("[xeno] smash [target] with flat side of its tail!"), + SPAN_XENOWARNING("We smash [target] with flat side of its tail!") ) xeno.animation_attack_on(target) xeno.flick_attack_overlay(target, "slam") @@ -132,7 +158,7 @@ xeno.behavior_delegate.melee_attack_additional_effects_target(target) playsound(target, "punch", 25, TRUE) - target.apply_damage(blunt_damage, BRUTE, "chest") + target.apply_damage(behavior.blunt_damage, BRUTE, "chest") apply_cooldown(cooldown_modifier = 0.4) update_button_icon() return target From 3354eefc5aa75d58f765d1252e47e112b22c0dd6 Mon Sep 17 00:00:00 2001 From: Venuska1117 Date: Wed, 28 Jan 2026 12:52:34 +0100 Subject: [PATCH 21/40] Changed is to our in tail message. --- .../living/carbon/xenomorph/strains/castes/praetorian/dancer.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/mob/living/carbon/xenomorph/strains/castes/praetorian/dancer.dm b/code/modules/mob/living/carbon/xenomorph/strains/castes/praetorian/dancer.dm index 2c1c151c78d0..d7805ee374cf 100644 --- a/code/modules/mob/living/carbon/xenomorph/strains/castes/praetorian/dancer.dm +++ b/code/modules/mob/living/carbon/xenomorph/strains/castes/praetorian/dancer.dm @@ -149,7 +149,7 @@ xeno.visible_message( SPAN_XENOWARNING("[xeno] smash [target] with flat side of its tail!"), - SPAN_XENOWARNING("We smash [target] with flat side of its tail!") + SPAN_XENOWARNING("We smash [target] with flat side of our tail!") ) xeno.animation_attack_on(target) xeno.flick_attack_overlay(target, "slam") From 6b8dd13a6c4fea3174e33e96e8d50c2c0d18d920 Mon Sep 17 00:00:00 2001 From: Venuska1117 Date: Fri, 30 Jan 2026 02:46:45 +0100 Subject: [PATCH 22/40] version 0.666 (thwomper request) - Another new passive mechanic, when killing targets, nearby 5 human targets are marked with yellow marker, attacking yellow marker with abilities will decrease cooldown to 1s, yellow marks only last 5 seconds. --- .../datums/effects/xeno_strains/dancer_tag.dm | 25 ++++++++++ code/datums/mob_hud.dm | 12 ++++- .../strains/castes/praetorian/dancer.dm | 46 ++++++++++++++++++ icons/mob/hud/hud.dmi | Bin 21429 -> 21695 bytes 4 files changed, 81 insertions(+), 2 deletions(-) diff --git a/code/datums/effects/xeno_strains/dancer_tag.dm b/code/datums/effects/xeno_strains/dancer_tag.dm index 68a00fd4e5a5..9e135b594791 100644 --- a/code/datums/effects/xeno_strains/dancer_tag.dm +++ b/code/datums/effects/xeno_strains/dancer_tag.dm @@ -3,9 +3,11 @@ duration = null flags = DEL_ON_DEATH | INF_DURATION + var/mob/living/carbon/xenomorph/source_xeno /datum/effects/dancer_tag/New(atom/A, mob/from = null, last_dmg_source = null, zone = "chest", ttl = 35) . = ..(A, from, last_dmg_source, zone) + source_xeno = from addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(qdel), src), ttl) @@ -39,3 +41,26 @@ addtimer(CALLBACK(H, TYPE_PROC_REF(/mob/living/carbon/human, update_xeno_hostile_hud)), 3) return ..() + +/datum/effects/dancer_tag_spread + effect_name = "dancer spread tag" + duration = null + flags = DEL_ON_DEATH | INF_DURATION + + var/mob/living/carbon/xenomorph/source_xeno + +/datum/effects/dancer_tag_spread/New(atom/target_atom, mob/from = null) + . = ..(target_atom, from) + source_xeno = from + + addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(qdel), src), 5 SECONDS) + + if(ishuman(target_atom)) + var/mob/living/carbon/human/target_human = target_atom + target_human.update_xeno_hostile_hud() + +/datum/effects/dancer_tag_spread/Destroy() + if(ishuman(affected_atom)) + var/mob/living/carbon/human/target_human = affected_atom + addtimer(CALLBACK(target_human, TYPE_PROC_REF(/mob/living/carbon/human, update_xeno_hostile_hud)), 3) + return ..() diff --git a/code/datums/mob_hud.dm b/code/datums/mob_hud.dm index 7df85b10f421..5e01086efa45 100644 --- a/code/datums/mob_hud.dm +++ b/code/datums/mob_hud.dm @@ -864,11 +864,19 @@ GLOBAL_DATUM_INIT(hud_icon_hudfocus, /image, image('icons/mob/hud/human_status.d slow_holder.overlays += image('icons/mob/hud/hud.dmi', "xeno_slow") var/tag_found = FALSE - for (var/datum/effects/dancer_tag/DT in effects_list) - if (!QDELETED(DT)) + for(var/datum/effects/dancer_tag/normal_tag in effects_list) + if(!QDELETED(normal_tag)) tag_found = TRUE break + if(tag_found) + tag_holder.overlays += image('icons/mob/hud/hud.dmi', src, "prae_tag") + else + for(var/datum/effects/dancer_tag_spread/special_tag in effects_list) + if(!QDELETED(special_tag)) + tag_holder.overlays += image('icons/mob/hud/hud.dmi', src, "prae_tag_yellow") + break + if (tag_found) tag_holder.overlays += image('icons/mob/hud/hud.dmi', src, "prae_tag") diff --git a/code/modules/mob/living/carbon/xenomorph/strains/castes/praetorian/dancer.dm b/code/modules/mob/living/carbon/xenomorph/strains/castes/praetorian/dancer.dm index d7805ee374cf..05dcef9c41a8 100644 --- a/code/modules/mob/living/carbon/xenomorph/strains/castes/praetorian/dancer.dm +++ b/code/modules/mob/living/carbon/xenomorph/strains/castes/praetorian/dancer.dm @@ -120,6 +120,40 @@ var/mob/living/carbon/human/target_human = target_carbon target_human.update_xeno_hostile_hud() +/datum/behavior_delegate/praetorian_dancer/on_kill_mob(mob/living/carbon/target_carbon) + if(!isxeno_human(target_carbon)) + return + + var/turf/origin = get_turf(target_carbon) + if(!origin) + return + + var/spread_count = 0 + + for(var/mob/living/carbon/human/human_target in view(5, origin)) + if(spread_count >= 5) + break + + if(human_target == target_carbon) + continue + + if(human_target.stat == DEAD) + continue + + if(!isxeno_human(human_target)) + continue + + if(locate(/datum/effects/dancer_tag) in human_target.effects_list) + continue + + if(locate(/datum/effects/dancer_tag_spread) in human_target.effects_list) + continue + + new /datum/effects/dancer_tag_spread(human_target, bound_xeno) + human_target.update_xeno_hostile_hud() + + spread_count++ + /datum/behavior_delegate/praetorian_dancer/proc/reset_slash_dodge() if(current_slashes <= 0) return @@ -216,6 +250,12 @@ qdel(dancer_tag_effect) break + for(var/datum/effects/dancer_tag_spread/dancer_tag_spread in target_carbon.effects_list) + buffed = TRUE + qdel(dancer_tag_spread) + apply_cooldown_override(1 SECONDS) + break + if(ishuman(target_carbon)) var/mob/living/carbon/human/human_target = target_carbon human_target.update_xeno_hostile_hud() @@ -495,6 +535,12 @@ var/buffed = FALSE var/datum/effects/dancer_tag/dancer_tag_effect = locate() in target_carbon.effects_list + var/datum/effects/dancer_tag_spread/dancer_tag_spread = locate() in target_carbon.effects_list + + if(dancer_tag_spread) + buffed = TRUE + qdel(dancer_tag_spread) + apply_cooldown_override(1 SECONDS) if(dancer_tag_effect) buffed = TRUE diff --git a/icons/mob/hud/hud.dmi b/icons/mob/hud/hud.dmi index f3d9879072d4b5b063f47fdef60966ac7fd30efa..da68d37eef5bf4adfbf0655c6bca3b942f68285d 100644 GIT binary patch literal 21695 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 Y_@&Sve;f>{180yW#>TYfg8QTY0T?)3?f?J) From d91b27157c28fa1e9f8f992ef99b9f2a6953c6a9 Mon Sep 17 00:00:00 2001 From: Venuska1117 Date: Fri, 30 Jan 2026 19:29:51 +0100 Subject: [PATCH 23/40] patch for 0.666 --- .../datums/effects/xeno_strains/dancer_tag.dm | 2 +- .../strains/castes/praetorian/dancer.dm | 25 +++++++++++-------- 2 files changed, 16 insertions(+), 11 deletions(-) diff --git a/code/datums/effects/xeno_strains/dancer_tag.dm b/code/datums/effects/xeno_strains/dancer_tag.dm index 9e135b594791..bd7d2586a002 100644 --- a/code/datums/effects/xeno_strains/dancer_tag.dm +++ b/code/datums/effects/xeno_strains/dancer_tag.dm @@ -62,5 +62,5 @@ /datum/effects/dancer_tag_spread/Destroy() if(ishuman(affected_atom)) var/mob/living/carbon/human/target_human = affected_atom - addtimer(CALLBACK(target_human, TYPE_PROC_REF(/mob/living/carbon/human, update_xeno_hostile_hud)), 3) + target_human.update_xeno_hostile_hud() return ..() diff --git a/code/modules/mob/living/carbon/xenomorph/strains/castes/praetorian/dancer.dm b/code/modules/mob/living/carbon/xenomorph/strains/castes/praetorian/dancer.dm index 05dcef9c41a8..3e79be8e518d 100644 --- a/code/modules/mob/living/carbon/xenomorph/strains/castes/praetorian/dancer.dm +++ b/code/modules/mob/living/carbon/xenomorph/strains/castes/praetorian/dancer.dm @@ -31,6 +31,7 @@ prae.claw_type = CLAW_TYPE_SHARP prae.dodge_chance = 18 prae.received_phero_caps["recovery"] = 3 //need to be limited, regens too fast. + prae.received_phero_caps["frenzy"] = 2.7 //zoom too fast, moderate increase in speed. prae.recalculate_everything() @@ -40,6 +41,11 @@ /// How much time is left on timer. (used for status) var/time_left = null + /// List of targets, used to spread yellow marks. + var/list/candidates = list() + /// How many targets got yellow tag. + var/spread_count = 0 + /// How much damage Harpoon Tail on DISARM mode do. (pierces armor) var/blunt_damage = 8 /// Harpoon Tail mode, used only to display in status. @@ -128,30 +134,29 @@ if(!origin) return - var/spread_count = 0 - for(var/mob/living/carbon/human/human_target in view(5, origin)) - if(spread_count >= 5) - break - if(human_target == target_carbon) continue - if(human_target.stat == DEAD) continue - if(!isxeno_human(human_target)) continue - if(locate(/datum/effects/dancer_tag) in human_target.effects_list) continue - if(locate(/datum/effects/dancer_tag_spread) in human_target.effects_list) continue + candidates += human_target + + if(!length(candidates)) + return + + candidates = sort_list_dist(candidates, origin) + for(var/mob/living/carbon/human/human_target in candidates) + if(spread_count >= 5) + break new /datum/effects/dancer_tag_spread(human_target, bound_xeno) human_target.update_xeno_hostile_hud() - spread_count++ /datum/behavior_delegate/praetorian_dancer/proc/reset_slash_dodge() From e644888b3377a1b8a76334987e956cb61d7569f6 Mon Sep 17 00:00:00 2001 From: Venuska1117 Date: Fri, 30 Jan 2026 22:20:53 +0100 Subject: [PATCH 24/40] another fix for 0.666 - maybe now yellow tags will be visible to players - forgot to clean that list --- code/__DEFINES/mob_hud.dm | 1 + code/datums/mob_hud.dm | 20 +++++++++++-------- .../mob/living/carbon/human/human_defines.dm | 2 +- .../mob/living/carbon/xenomorph/Xenomorph.dm | 2 +- .../strains/castes/praetorian/dancer.dm | 10 ++++++++++ 5 files changed, 25 insertions(+), 10 deletions(-) diff --git a/code/__DEFINES/mob_hud.dm b/code/__DEFINES/mob_hud.dm index d9139a59ce98..166af7850805 100644 --- a/code/__DEFINES/mob_hud.dm +++ b/code/__DEFINES/mob_hud.dm @@ -28,6 +28,7 @@ #define XENO_EXECUTE "28" // Execute thershold, vampire #define NEW_PLAYER_HUD "29" //Makes it easy to see new players. #define SPYCAM_HUD "30" //Remote control spy cameras. +#define XENO_HOSTILE_TAG_SPREAD "31" // dancer prae yellow 'tag' //data HUD (medhud, sechud) defines #define MOB_HUD_SECURITY_BASIC 1 diff --git a/code/datums/mob_hud.dm b/code/datums/mob_hud.dm index 5e01086efa45..803d755b17db 100644 --- a/code/datums/mob_hud.dm +++ b/code/datums/mob_hud.dm @@ -175,7 +175,7 @@ GLOBAL_LIST_INIT_TYPED(huds, /datum/mob_hud, flatten_numeric_alist(alist( hud_icons = list(HEALTH_HUD_XENO, PLASMA_HUD, PHEROMONE_HUD, QUEEN_OVERWATCH_HUD, ARMOR_HUD_XENO, XENO_STATUS_HUD, XENO_BANISHED_HUD, HUNTER_HUD) /datum/mob_hud/xeno_hostile - hud_icons = list(XENO_HOSTILE_ACID, XENO_HOSTILE_SLOW, XENO_HOSTILE_TAG, XENO_HOSTILE_FREEZE) + hud_icons = list(XENO_HOSTILE_ACID, XENO_HOSTILE_SLOW, XENO_HOSTILE_TAG, XENO_HOSTILE_TAG_SPREAD, XENO_HOSTILE_FREEZE) /datum/mob_hud/execute_hud hud_icons = list(XENO_EXECUTE) @@ -831,16 +831,19 @@ GLOBAL_DATUM_INIT(hud_icon_hudfocus, /image, image('icons/mob/hud/human_status.d var/image/acid_holder = hud_list[XENO_HOSTILE_ACID] var/image/slow_holder = hud_list[XENO_HOSTILE_SLOW] var/image/tag_holder = hud_list[XENO_HOSTILE_TAG] + var/image/tag_spread_holder = hud_list[XENO_HOSTILE_TAG_SPREAD] var/image/freeze_holder = hud_list[XENO_HOSTILE_FREEZE] acid_holder.icon_state = "hudblank" slow_holder.icon_state = "hudblank" tag_holder.icon_state = "hudblank" + tag_spread_holder.icon_state = "hudblank" freeze_holder.icon_state = "hudblank" acid_holder.overlays.Cut() slow_holder.overlays.Cut() tag_holder.overlays.Cut() + tag_spread_holder.overlays.Cut() freeze_holder.overlays.Cut() var/acid_found = FALSE @@ -871,14 +874,15 @@ GLOBAL_DATUM_INIT(hud_icon_hudfocus, /image, image('icons/mob/hud/human_status.d if(tag_found) tag_holder.overlays += image('icons/mob/hud/hud.dmi', src, "prae_tag") - else - for(var/datum/effects/dancer_tag_spread/special_tag in effects_list) - if(!QDELETED(special_tag)) - tag_holder.overlays += image('icons/mob/hud/hud.dmi', src, "prae_tag_yellow") - break - if (tag_found) - tag_holder.overlays += image('icons/mob/hud/hud.dmi', src, "prae_tag") + var/spread_tag_found = FALSE + for(var/datum/effects/dancer_tag_spread/spread_tag in effects_list) + if(!QDELETED(spread_tag)) + spread_tag_found = TRUE + break + + if(spread_tag_found) + tag_spread_holder.overlays += image('icons/mob/hud/hud.dmi', src, "prae_tag_yellow") var/freeze_found = HAS_TRAIT(src, TRAIT_IMMOBILIZED) && body_position == STANDING_UP && !buckled // Eligible targets are unable to move but can stand and aren't buckled (eg nested) - This is to convey that they are temporarily unable to move if (freeze_found) diff --git a/code/modules/mob/living/carbon/human/human_defines.dm b/code/modules/mob/living/carbon/human/human_defines.dm index 66a20cfc50b0..ba3db71fb199 100644 --- a/code/modules/mob/living/carbon/human/human_defines.dm +++ b/code/modules/mob/living/carbon/human/human_defines.dm @@ -142,7 +142,7 @@ var/last_chew = 0 //taken from human.dm - hud_possible = list(HEALTH_HUD, STATUS_HUD, STATUS_HUD_OOC, STATUS_HUD_XENO_INFECTION, STATUS_HUD_XENO_CULTIST, ID_HUD, WANTED_HUD, ORDER_HUD, XENO_HOSTILE_ACID, XENO_HOSTILE_SLOW, XENO_HOSTILE_TAG, XENO_HOSTILE_FREEZE, XENO_EXECUTE, HUNTER_CLAN, HUNTER_HUD, FACTION_HUD, HOLOCARD_HUD, NEW_PLAYER_HUD) + hud_possible = list(HEALTH_HUD, STATUS_HUD, STATUS_HUD_OOC, STATUS_HUD_XENO_INFECTION, STATUS_HUD_XENO_CULTIST, ID_HUD, WANTED_HUD, ORDER_HUD, XENO_HOSTILE_ACID, XENO_HOSTILE_SLOW, XENO_HOSTILE_TAG, XENO_HOSTILE_TAG_SPREAD, XENO_HOSTILE_FREEZE, XENO_EXECUTE, HUNTER_CLAN, HUNTER_HUD, FACTION_HUD, HOLOCARD_HUD, NEW_PLAYER_HUD) var/embedded_flag //To check if we've need to roll for damage on movement while an item is imbedded in us. var/allow_gun_usage = TRUE var/melee_allowed = TRUE diff --git a/code/modules/mob/living/carbon/xenomorph/Xenomorph.dm b/code/modules/mob/living/carbon/xenomorph/Xenomorph.dm index 812be01479bc..72bff14bfdd2 100644 --- a/code/modules/mob/living/carbon/xenomorph/Xenomorph.dm +++ b/code/modules/mob/living/carbon/xenomorph/Xenomorph.dm @@ -45,7 +45,7 @@ see_in_dark = 12 recovery_constant = 1.5 see_invisible = SEE_INVISIBLE_LIVING - hud_possible = list(HEALTH_HUD_XENO, PLASMA_HUD, PHEROMONE_HUD, QUEEN_OVERWATCH_HUD, ARMOR_HUD_XENO, XENO_STATUS_HUD, XENO_BANISHED_HUD, XENO_HOSTILE_ACID, XENO_HOSTILE_SLOW, XENO_HOSTILE_TAG, XENO_HOSTILE_FREEZE, HUNTER_HUD, NEW_PLAYER_HUD) + hud_possible = list(HEALTH_HUD_XENO, PLASMA_HUD, PHEROMONE_HUD, QUEEN_OVERWATCH_HUD, ARMOR_HUD_XENO, XENO_STATUS_HUD, XENO_BANISHED_HUD, XENO_HOSTILE_ACID, XENO_HOSTILE_SLOW, XENO_HOSTILE_TAG, XENO_HOSTILE_TAG_SPREAD, XENO_HOSTILE_FREEZE, HUNTER_HUD, NEW_PLAYER_HUD) unacidable = TRUE rebounds = TRUE faction = FACTION_XENOMORPH diff --git a/code/modules/mob/living/carbon/xenomorph/strains/castes/praetorian/dancer.dm b/code/modules/mob/living/carbon/xenomorph/strains/castes/praetorian/dancer.dm index 3e79be8e518d..d0fdb688edcf 100644 --- a/code/modules/mob/living/carbon/xenomorph/strains/castes/praetorian/dancer.dm +++ b/code/modules/mob/living/carbon/xenomorph/strains/castes/praetorian/dancer.dm @@ -61,6 +61,8 @@ var/refund_multiplier = 2.0 /// Used in calculation, finalized number will be displayed as cooldown. var/recharge_time = null + /// Cooldown after activation to prevent accidental double click. + var/safe_click_cooldown = 0 /// How long ago we slashed target? var/last_slash_time = 0 @@ -127,6 +129,9 @@ target_human.update_xeno_hostile_hud() /datum/behavior_delegate/praetorian_dancer/on_kill_mob(mob/living/carbon/target_carbon) + candidates.Cut() + spread_count = 0 + if(!isxeno_human(target_carbon)) return @@ -322,6 +327,7 @@ behavior.dodge_activated = TRUE behavior.dodge_start_time = world.time + behavior.safe_click_cooldown = world.time + 1 SECONDS button.icon_state = "template_active" dodge_user.speed_modifier -= speed_buff_amount dodge_user.dodge_chance += 20 @@ -350,6 +356,10 @@ if(!behavior.dodge_activated) return + if(world.time < behavior.safe_click_cooldown) + to_chat(dodge_remove, SPAN_XENOWARNING("We need a moment before breaking our evasive stance!")) + return + behavior.dodge_activated = FALSE button.icon_state = "template_xeno" dodge_remove.speed_modifier += speed_buff_amount From dc3f96fc1bc1574f5aac6e217dbbacb012b4de7e Mon Sep 17 00:00:00 2001 From: Venuska1117 Date: Sun, 1 Feb 2026 03:00:40 +0100 Subject: [PATCH 25/40] version 0.7 (drathek dodge_chance request) - Decreased blunt tailstab cooldown from 4s to 3s. - Changed dodge_chance mechanic, now instead of having % chance, now you have guaranteed dodge every X bullet fired at you, for passive its every 6th bullet and with dodge active is every 3rd bullet. - Slashing targets now decreases cooldown on your dodge ability instead of increasing dodge_chance. - Dancer no longer benefit from frenzy phermones, this change was made to make people get better muscule memory. - Reduced cooldown reduction from 1s to 0s, now hitting yellow marks set your cooldown to 0s, allowing for instant use. --- .../datums/effects/xeno_strains/dancer_tag.dm | 16 +--- code/datums/mob_hud.dm | 2 +- .../mob/living/carbon/xenomorph/Xenomorph.dm | 6 +- .../strains/castes/praetorian/dancer.dm | 82 ++++++------------- code/modules/projectiles/projectile.dm | 22 ++--- 5 files changed, 48 insertions(+), 80 deletions(-) diff --git a/code/datums/effects/xeno_strains/dancer_tag.dm b/code/datums/effects/xeno_strains/dancer_tag.dm index bd7d2586a002..c0af5e26140d 100644 --- a/code/datums/effects/xeno_strains/dancer_tag.dm +++ b/code/datums/effects/xeno_strains/dancer_tag.dm @@ -3,11 +3,8 @@ duration = null flags = DEL_ON_DEATH | INF_DURATION - var/mob/living/carbon/xenomorph/source_xeno - /datum/effects/dancer_tag/New(atom/A, mob/from = null, last_dmg_source = null, zone = "chest", ttl = 35) . = ..(A, from, last_dmg_source, zone) - source_xeno = from addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(qdel), src), ttl) @@ -42,24 +39,19 @@ return ..() -/datum/effects/dancer_tag_spread +/datum/effects/dancer_tag/spread effect_name = "dancer spread tag" - duration = null - flags = DEL_ON_DEATH | INF_DURATION - - var/mob/living/carbon/xenomorph/source_xeno -/datum/effects/dancer_tag_spread/New(atom/target_atom, mob/from = null) +/datum/effects/dancer_tag/spread/New(atom/target_atom, mob/from = null) . = ..(target_atom, from) - source_xeno = from - addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(qdel), src), 5 SECONDS) + addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(qdel), src), 7 SECONDS) if(ishuman(target_atom)) var/mob/living/carbon/human/target_human = target_atom target_human.update_xeno_hostile_hud() -/datum/effects/dancer_tag_spread/Destroy() +/datum/effects/dancer_tag/spread/Destroy() if(ishuman(affected_atom)) var/mob/living/carbon/human/target_human = affected_atom target_human.update_xeno_hostile_hud() diff --git a/code/datums/mob_hud.dm b/code/datums/mob_hud.dm index 803d755b17db..810916193540 100644 --- a/code/datums/mob_hud.dm +++ b/code/datums/mob_hud.dm @@ -876,7 +876,7 @@ GLOBAL_DATUM_INIT(hud_icon_hudfocus, /image, image('icons/mob/hud/human_status.d tag_holder.overlays += image('icons/mob/hud/hud.dmi', src, "prae_tag") var/spread_tag_found = FALSE - for(var/datum/effects/dancer_tag_spread/spread_tag in effects_list) + for(var/datum/effects/dancer_tag/spread/spread_tag in effects_list) if(!QDELETED(spread_tag)) spread_tag_found = TRUE break diff --git a/code/modules/mob/living/carbon/xenomorph/Xenomorph.dm b/code/modules/mob/living/carbon/xenomorph/Xenomorph.dm index 72bff14bfdd2..519ec7548c53 100644 --- a/code/modules/mob/living/carbon/xenomorph/Xenomorph.dm +++ b/code/modules/mob/living/carbon/xenomorph/Xenomorph.dm @@ -68,7 +68,11 @@ var/static/list/walking_state_cache = list() var/has_walking_icon_state = FALSE - var/dodge_chance = 0 //Guaranteed bullet dodge if RNG hits, from 0% to 100% max. (don't work when you are laying down or UNCONSCIOUS) + + /// Counts how many bullets hit xeno before dodge_bullet occurs. + var/count_shoot_bullets = 0 + /// Guaranteed bullet dodge every X bullet shoot (don't work when you are laying down or UNCONSCIOUS) + var/dodge_bullet = 0 ////////////////////////////////////////////////////////////////// // diff --git a/code/modules/mob/living/carbon/xenomorph/strains/castes/praetorian/dancer.dm b/code/modules/mob/living/carbon/xenomorph/strains/castes/praetorian/dancer.dm index d0fdb688edcf..5bfba14f6c87 100644 --- a/code/modules/mob/living/carbon/xenomorph/strains/castes/praetorian/dancer.dm +++ b/code/modules/mob/living/carbon/xenomorph/strains/castes/praetorian/dancer.dm @@ -29,9 +29,9 @@ prae.regeneration_multiplier = XENO_REGEN_MULTIPLIER_TIER_7 prae.plasma_types = list(PLASMA_CATECHOLAMINE) prae.claw_type = CLAW_TYPE_SHARP - prae.dodge_chance = 18 + prae.dodge_bullet = 6 prae.received_phero_caps["recovery"] = 3 //need to be limited, regens too fast. - prae.received_phero_caps["frenzy"] = 2.7 //zoom too fast, moderate increase in speed. + prae.ignore_aura = "frenzy" //we dont want to zoom fast randomly, it breaks muscule memory. prae.recalculate_everything() @@ -64,52 +64,29 @@ /// Cooldown after activation to prevent accidental double click. var/safe_click_cooldown = 0 - /// How long ago we slashed target? - var/last_slash_time = 0 - /// How long slash bonus should last? - var/slash_time = 6 SECONDS - /// How many slashes we can do before hitting cap. - var/max_slashes = 3 - /// How many slashes did we do already. - var/current_slashes = 0 - /// How much % increase to dodge_chance we gain per slash. - var/dodge_per_slash = 3 + /// How much dodge cooldown we decrease when slashing target? + var/dodge_coldown_decrease = 1.5 SECONDS /datum/behavior_delegate/praetorian_dancer/append_to_stat() . = list() - . += "Dodge Chance: [bound_xeno.dodge_chance]%" - . += "Slash Dodge Stacks: [current_slashes]/[max_slashes]" + . += "Dodge Interval: [bound_xeno.count_shoot_bullets]/[bound_xeno.dodge_bullet]" + . += "Decrease Dodge Cooldown per Slash: -[dodge_coldown_decrease/10] seconds." intent_detection() . += "Harpoon Tail Intent: [tail_mode]" if(tail_mode == "Blunt") . += "Damage: [blunt_damage] AP" - . += "Cooldown: 4 seconds." - if(current_slashes > 0) - calculate_time(slash_time, last_slash_time) - . += "Slash Dodge Remaining: [time_left] second\s." + . += "Cooldown: 3 seconds." if(dodge_start_time != -1) calculate_time(dodge_time, dodge_start_time) . += "Dodge Remaining: [time_left] second\s." return -/datum/behavior_delegate/praetorian_dancer/on_life() - if(current_slashes <= 0) - return - - if((world.time - last_slash_time) <= slash_time) - return - - reset_slash_dodge() - /datum/behavior_delegate/praetorian_dancer/melee_attack_additional_effects_self() - if((world.time - last_slash_time) > slash_time) - reset_slash_dodge() - - if(current_slashes < max_slashes) - current_slashes++ - bound_xeno.dodge_chance += dodge_per_slash + ..() - last_slash_time = world.time + var/datum/action/xeno_action/onclick/prae_dodge/action_time = get_action(bound_xeno, /datum/action/xeno_action/onclick/prae_dodge) + if(!action_time.action_cooldown_check()) + action_time.reduce_cooldown(dodge_coldown_decrease) /datum/behavior_delegate/praetorian_dancer/melee_attack_additional_effects_target(mob/living/carbon/target_carbon) if(!isxeno_human(target_carbon)) @@ -148,7 +125,7 @@ continue if(locate(/datum/effects/dancer_tag) in human_target.effects_list) continue - if(locate(/datum/effects/dancer_tag_spread) in human_target.effects_list) + if(locate(/datum/effects/dancer_tag/spread) in human_target.effects_list) continue candidates += human_target @@ -160,17 +137,10 @@ if(spread_count >= 5) break - new /datum/effects/dancer_tag_spread(human_target, bound_xeno) + new /datum/effects/dancer_tag/spread(human_target, bound_xeno) human_target.update_xeno_hostile_hud() spread_count++ -/datum/behavior_delegate/praetorian_dancer/proc/reset_slash_dodge() - if(current_slashes <= 0) - return - - bound_xeno.dodge_chance -= current_slashes * dodge_per_slash - current_slashes = 0 - /datum/behavior_delegate/praetorian_dancer/proc/calculate_time(full_time, when_started) time_left = (full_time - (world.time - when_started)) / 10 @@ -203,7 +173,7 @@ playsound(target, "punch", 25, TRUE) target.apply_damage(behavior.blunt_damage, BRUTE, "chest") - apply_cooldown(cooldown_modifier = 0.4) + apply_cooldown(cooldown_modifier = 0.3) update_button_icon() return target @@ -255,15 +225,15 @@ apply_cooldown() var/buffed = FALSE - for(var/datum/effects/dancer_tag/dancer_tag_effect in target_carbon.effects_list) + for(var/datum/effects/dancer_tag/spread/tag_spread in target_carbon.effects_list) buffed = TRUE - qdel(dancer_tag_effect) + qdel(tag_spread) + apply_cooldown_override() break - for(var/datum/effects/dancer_tag_spread/dancer_tag_spread in target_carbon.effects_list) + for(var/datum/effects/dancer_tag/dancer_tag_effect in target_carbon.effects_list) buffed = TRUE - qdel(dancer_tag_spread) - apply_cooldown_override(1 SECONDS) + qdel(dancer_tag_effect) break if(ishuman(target_carbon)) @@ -330,7 +300,7 @@ behavior.safe_click_cooldown = world.time + 1 SECONDS button.icon_state = "template_active" dodge_user.speed_modifier -= speed_buff_amount - dodge_user.dodge_chance += 20 + dodge_user.dodge_bullet -= 3 dodge_user.add_temp_pass_flags(PASS_MOB_THRU) dodge_user.recalculate_speed() dodge_user.balloon_alert(dodge_user, "we start our evasive stance!", text_color = "#7d32bb", delay = 1 SECONDS) @@ -363,11 +333,11 @@ behavior.dodge_activated = FALSE button.icon_state = "template_xeno" dodge_remove.speed_modifier += speed_buff_amount - dodge_remove.dodge_chance -= 20 + dodge_remove.dodge_bullet += 3 dodge_remove.remove_temp_pass_flags(PASS_MOB_THRU) dodge_remove.recalculate_speed() dodge_remove.reset_position_to_initial() - dodge_remove.balloon_alert(dodge_remove, "our evasive stance fades", text_color = "#7d32bb", delay = 1 SECONDS) + dodge_remove.balloon_alert(dodge_remove, "our evasive stance fades", text_color = "#bb5d32", delay = 1 SECONDS) if(dodge_timer != TIMER_ID_NULL) deltimer(dodge_timer) @@ -550,12 +520,12 @@ var/buffed = FALSE var/datum/effects/dancer_tag/dancer_tag_effect = locate() in target_carbon.effects_list - var/datum/effects/dancer_tag_spread/dancer_tag_spread = locate() in target_carbon.effects_list + var/datum/effects/dancer_tag/spread/tag_spread = locate() in target_carbon.effects_list - if(dancer_tag_spread) + if(tag_spread) buffed = TRUE - qdel(dancer_tag_spread) - apply_cooldown_override(1 SECONDS) + qdel(tag_spread) + apply_cooldown_override() if(dancer_tag_effect) buffed = TRUE diff --git a/code/modules/projectiles/projectile.dm b/code/modules/projectiles/projectile.dm index 9b3eb931019e..b606c354cfcc 100644 --- a/code/modules/projectiles/projectile.dm +++ b/code/modules/projectiles/projectile.dm @@ -904,16 +904,18 @@ if(X.hivenumber == hivenumber) return FALSE - if(dodge_chance && !((ammo_flags & AMMO_SNIPER) || (ammo_flags & AMMO_ROCKET))) - if(body_position != LYING_DOWN && stat != UNCONSCIOUS) //We don't want to "somehow" dodge bullets when lying down/unconscious. - var/dodge_roll = rand(1, 100) - if(dodge_roll <= dodge_chance) - xeno_jitter(5 DECISECONDS) - if(P.ammo.sound_miss) - playsound_client(client, P.ammo.sound_miss, get_turf(src), 75, TRUE) - visible_message(SPAN_AVOIDHARM("The [src] darts aside, evading [P]!"), - SPAN_AVOIDHARM("You react fast, and [P] narrowly misses you!"), null, 4, CHAT_TYPE_TAKING_HIT) - return FALSE + if(dodge_bullet > 0) + if(!(ammo_flags & (AMMO_SNIPER | AMMO_ROCKET))) + if(body_position != LYING_DOWN && stat != UNCONSCIOUS) + count_shoot_bullets++ + if(count_shoot_bullets >= dodge_bullet) + count_shoot_bullets = 0 + xeno_jitter(5 DECISECONDS) + if(P.ammo.sound_miss) + playsound_client(client, P.ammo.sound_miss, get_turf(src), 75, TRUE) + visible_message(SPAN_AVOIDHARM("The [src] darts aside, evading [P]!"), + SPAN_AVOIDHARM("You react fast, and [P] narrowly misses you!"), null, 4, CHAT_TYPE_TAKING_HIT) + return FALSE if(mob_size == MOB_SIZE_SMALL) . -= 10 From 849a48dea1001d38d36a75a307fabc369deaf909 Mon Sep 17 00:00:00 2001 From: Venuska1117 Date: Sun, 1 Feb 2026 21:26:17 +0100 Subject: [PATCH 26/40] version 0.8 changes: - Added another subtype of dancer tag, the gray colored tag, this tag was created to show and prevent targets from spreading yellow tags. - Targets now spread yellow tags when they die or get attacked when UNCONSCIOUS. - UNCONSCIOUS targets don't spread tags for 17 SECONDS and apply gray tag to indicate cooldown. - After dancer spread yellow tags, there is 5 SECONDS delay between spreading. - Observers now gain new hud option called "Xeno Effects HUD" so they can see what xenos see (like tags or markers) - Renamed some stuff requested by Mist. - Decreased Dodge afterimage count from 4 to 3 images. - Removed "ignore_aura" on frenzy, dancers can again benefit from frenzy aura speed. --- code/__DEFINES/mob_hud.dm | 1 + .../datums/effects/xeno_strains/dancer_tag.dm | 49 +++++---- code/datums/mob_hud.dm | 16 ++- code/modules/client/preferences_toggles.dm | 1 + code/modules/mob/dead/observer/observer.dm | 3 + .../mob/living/carbon/human/human_defines.dm | 5 +- .../mob/living/carbon/xenomorph/Xenomorph.dm | 10 +- .../praetorian/praetorian_abilities.dm | 4 +- .../strains/castes/praetorian/dancer.dm | 96 +++++++++++++----- code/modules/projectiles/projectile.dm | 47 +++++---- icons/mob/hud/hud.dmi | Bin 21695 -> 22014 bytes 11 files changed, 151 insertions(+), 81 deletions(-) diff --git a/code/__DEFINES/mob_hud.dm b/code/__DEFINES/mob_hud.dm index 166af7850805..b2aec90efd49 100644 --- a/code/__DEFINES/mob_hud.dm +++ b/code/__DEFINES/mob_hud.dm @@ -29,6 +29,7 @@ #define NEW_PLAYER_HUD "29" //Makes it easy to see new players. #define SPYCAM_HUD "30" //Remote control spy cameras. #define XENO_HOSTILE_TAG_SPREAD "31" // dancer prae yellow 'tag' +#define XENO_HOSTILE_TAG_PREVENT "32" // dancer prae gray 'tag' //data HUD (medhud, sechud) defines #define MOB_HUD_SECURITY_BASIC 1 diff --git a/code/datums/effects/xeno_strains/dancer_tag.dm b/code/datums/effects/xeno_strains/dancer_tag.dm index c0af5e26140d..fb8758a1daab 100644 --- a/code/datums/effects/xeno_strains/dancer_tag.dm +++ b/code/datums/effects/xeno_strains/dancer_tag.dm @@ -3,18 +3,18 @@ duration = null flags = DEL_ON_DEATH | INF_DURATION -/datum/effects/dancer_tag/New(atom/A, mob/from = null, last_dmg_source = null, zone = "chest", ttl = 35) - . = ..(A, from, last_dmg_source, zone) +/datum/effects/dancer_tag/New(atom/target_atom, mob/from = null, last_dmg_source = null, zone = "chest", ttl = 35) + . = ..(target_atom, from, last_dmg_source, zone) addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(qdel), src), ttl) - if (ishuman(A)) - var/mob/living/carbon/human/H = A - H.update_xeno_hostile_hud() + if(ishuman(target_atom)) + var/mob/living/carbon/human/target_human = target_atom + target_human.update_xeno_hostile_hud() -/datum/effects/dancer_tag/validate_atom(mob/living/carbon/H) - if (!isxeno_human(H) || H.stat == DEAD) +/datum/effects/dancer_tag/validate_atom(mob/living/carbon/target_human) + if(!isxeno_human(target_human) || target_human.stat == DEAD) return FALSE return ..() @@ -23,36 +23,33 @@ . = ..() // Also checks for null atoms - if (!istype(affected_atom, /mob/living/carbon/human)) + if(!istype(affected_atom, /mob/living/carbon/human)) return - var/mob/living/carbon/human/H = affected_atom - H.update_xeno_hostile_hud() + var/mob/living/carbon/human/target_human = affected_atom + target_human.update_xeno_hostile_hud() /datum/effects/dancer_tag/Destroy() - if (!ishuman(affected_atom)) - return ..() - - var/mob/living/carbon/human/H = affected_atom - addtimer(CALLBACK(H, TYPE_PROC_REF(/mob/living/carbon/human, update_xeno_hostile_hud)), 3) + if(ishuman(affected_atom)) + var/mob/living/carbon/human/target_human = affected_atom + target_human.update_xeno_hostile_hud() return ..() +/datum/effects/dancer_tag/normal + effect_name = "dancer tag normal" + /datum/effects/dancer_tag/spread - effect_name = "dancer spread tag" + effect_name = "dancer tag spread" /datum/effects/dancer_tag/spread/New(atom/target_atom, mob/from = null) - . = ..(target_atom, from) + . = ..(target_atom, from, null, "chest", 7 SECONDS) - addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(qdel), src), 7 SECONDS) +/datum/effects/dancer_tag/prevent + effect_name = "dancer tag prevent" + flags = INF_DURATION - if(ishuman(target_atom)) - var/mob/living/carbon/human/target_human = target_atom - target_human.update_xeno_hostile_hud() +/datum/effects/dancer_tag/prevent/New(atom/target_atom, mob/from = null) + . = ..(target_atom, from, null, "chest", 17 SECONDS) -/datum/effects/dancer_tag/spread/Destroy() - if(ishuman(affected_atom)) - var/mob/living/carbon/human/target_human = affected_atom - target_human.update_xeno_hostile_hud() - return ..() diff --git a/code/datums/mob_hud.dm b/code/datums/mob_hud.dm index 810916193540..f845a8082fb5 100644 --- a/code/datums/mob_hud.dm +++ b/code/datums/mob_hud.dm @@ -175,7 +175,7 @@ GLOBAL_LIST_INIT_TYPED(huds, /datum/mob_hud, flatten_numeric_alist(alist( hud_icons = list(HEALTH_HUD_XENO, PLASMA_HUD, PHEROMONE_HUD, QUEEN_OVERWATCH_HUD, ARMOR_HUD_XENO, XENO_STATUS_HUD, XENO_BANISHED_HUD, HUNTER_HUD) /datum/mob_hud/xeno_hostile - hud_icons = list(XENO_HOSTILE_ACID, XENO_HOSTILE_SLOW, XENO_HOSTILE_TAG, XENO_HOSTILE_TAG_SPREAD, XENO_HOSTILE_FREEZE) + hud_icons = list(XENO_HOSTILE_ACID, XENO_HOSTILE_SLOW, XENO_HOSTILE_TAG, XENO_HOSTILE_TAG_SPREAD, XENO_HOSTILE_TAG_PREVENT, XENO_HOSTILE_FREEZE) /datum/mob_hud/execute_hud hud_icons = list(XENO_EXECUTE) @@ -832,18 +832,21 @@ GLOBAL_DATUM_INIT(hud_icon_hudfocus, /image, image('icons/mob/hud/human_status.d var/image/slow_holder = hud_list[XENO_HOSTILE_SLOW] var/image/tag_holder = hud_list[XENO_HOSTILE_TAG] var/image/tag_spread_holder = hud_list[XENO_HOSTILE_TAG_SPREAD] + var/image/tag_prevent_holder = hud_list[XENO_HOSTILE_TAG_PREVENT] var/image/freeze_holder = hud_list[XENO_HOSTILE_FREEZE] acid_holder.icon_state = "hudblank" slow_holder.icon_state = "hudblank" tag_holder.icon_state = "hudblank" tag_spread_holder.icon_state = "hudblank" + tag_prevent_holder.icon_state = "hudblank" freeze_holder.icon_state = "hudblank" acid_holder.overlays.Cut() slow_holder.overlays.Cut() tag_holder.overlays.Cut() tag_spread_holder.overlays.Cut() + tag_prevent_holder.overlays.Cut() freeze_holder.overlays.Cut() var/acid_found = FALSE @@ -867,7 +870,7 @@ GLOBAL_DATUM_INIT(hud_icon_hudfocus, /image, image('icons/mob/hud/human_status.d slow_holder.overlays += image('icons/mob/hud/hud.dmi', "xeno_slow") var/tag_found = FALSE - for(var/datum/effects/dancer_tag/normal_tag in effects_list) + for(var/datum/effects/dancer_tag/normal/normal_tag in effects_list) if(!QDELETED(normal_tag)) tag_found = TRUE break @@ -884,6 +887,15 @@ GLOBAL_DATUM_INIT(hud_icon_hudfocus, /image, image('icons/mob/hud/human_status.d if(spread_tag_found) tag_spread_holder.overlays += image('icons/mob/hud/hud.dmi', src, "prae_tag_yellow") + var/prevent_tag_found = FALSE + for(var/datum/effects/dancer_tag/prevent/prevent_tag in effects_list) + if(!QDELETED(prevent_tag)) + prevent_tag_found = TRUE + break + + if(prevent_tag_found) + tag_prevent_holder.overlays += image('icons/mob/hud/hud.dmi', src, "prae_tag_grey") + var/freeze_found = HAS_TRAIT(src, TRAIT_IMMOBILIZED) && body_position == STANDING_UP && !buckled // Eligible targets are unable to move but can stand and aren't buckled (eg nested) - This is to convey that they are temporarily unable to move if (freeze_found) freeze_holder.overlays += image('icons/mob/hud/hud.dmi', src, "xeno_freeze") diff --git a/code/modules/client/preferences_toggles.dm b/code/modules/client/preferences_toggles.dm index b03d7e4dfd83..4788ec4b7790 100644 --- a/code/modules/client/preferences_toggles.dm +++ b/code/modules/client/preferences_toggles.dm @@ -737,6 +737,7 @@ CLIENT_VERB(toggle_adaptive_zooming) "Security HUD" = MOB_HUD_SECURITY_ADVANCED, "Squad HUD" = MOB_HUD_FACTION_OBSERVER, "Xeno Status HUD" = MOB_HUD_XENO_STATUS, + "Xeno Effects HUD" = MOB_HUD_XENO_HOSTILE, "Faction UPP HUD" = MOB_HUD_FACTION_UPP, "Faction Wey-Yu HUD" = MOB_HUD_FACTION_WY, "Faction TWE HUD" = MOB_HUD_FACTION_TWE, diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm index f62c2b030bb2..fc1b86777d55 100644 --- a/code/modules/mob/dead/observer/observer.dm +++ b/code/modules/mob/dead/observer/observer.dm @@ -400,6 +400,9 @@ if("Xeno Status HUD") the_hud = GLOB.huds[MOB_HUD_XENO_STATUS] the_hud.add_hud_to(src, src) + if("Xeno Effects HUD") + the_hud = GLOB.huds[MOB_HUD_XENO_HOSTILE] + the_hud.add_hud_to(src, src) if("Faction UPP HUD") the_hud = GLOB.huds[MOB_HUD_FACTION_UPP] the_hud.add_hud_to(src, src) diff --git a/code/modules/mob/living/carbon/human/human_defines.dm b/code/modules/mob/living/carbon/human/human_defines.dm index ba3db71fb199..53664275686a 100644 --- a/code/modules/mob/living/carbon/human/human_defines.dm +++ b/code/modules/mob/living/carbon/human/human_defines.dm @@ -142,7 +142,7 @@ var/last_chew = 0 //taken from human.dm - hud_possible = list(HEALTH_HUD, STATUS_HUD, STATUS_HUD_OOC, STATUS_HUD_XENO_INFECTION, STATUS_HUD_XENO_CULTIST, ID_HUD, WANTED_HUD, ORDER_HUD, XENO_HOSTILE_ACID, XENO_HOSTILE_SLOW, XENO_HOSTILE_TAG, XENO_HOSTILE_TAG_SPREAD, XENO_HOSTILE_FREEZE, XENO_EXECUTE, HUNTER_CLAN, HUNTER_HUD, FACTION_HUD, HOLOCARD_HUD, NEW_PLAYER_HUD) + hud_possible = list(HEALTH_HUD, STATUS_HUD, STATUS_HUD_OOC, STATUS_HUD_XENO_INFECTION, STATUS_HUD_XENO_CULTIST, ID_HUD, WANTED_HUD, ORDER_HUD, XENO_HOSTILE_ACID, XENO_HOSTILE_SLOW, XENO_HOSTILE_TAG, XENO_HOSTILE_TAG_SPREAD, XENO_HOSTILE_TAG_PREVENT, XENO_HOSTILE_FREEZE, XENO_EXECUTE, HUNTER_CLAN, HUNTER_HUD, FACTION_HUD, HOLOCARD_HUD, NEW_PLAYER_HUD) var/embedded_flag //To check if we've need to roll for damage on movement while an item is imbedded in us. var/allow_gun_usage = TRUE var/melee_allowed = TRUE @@ -182,6 +182,9 @@ // Xenomorph that is hauling us if we are hauled var/mob/living/carbon/xenomorph/hauling_xeno + /// Timer to prevent spreading yellow dancer tags from same person. + var/last_target_spread_time = 0 + // Haul resist cooldown var/next_haul_resist diff --git a/code/modules/mob/living/carbon/xenomorph/Xenomorph.dm b/code/modules/mob/living/carbon/xenomorph/Xenomorph.dm index 519ec7548c53..4264981460ec 100644 --- a/code/modules/mob/living/carbon/xenomorph/Xenomorph.dm +++ b/code/modules/mob/living/carbon/xenomorph/Xenomorph.dm @@ -45,7 +45,7 @@ see_in_dark = 12 recovery_constant = 1.5 see_invisible = SEE_INVISIBLE_LIVING - hud_possible = list(HEALTH_HUD_XENO, PLASMA_HUD, PHEROMONE_HUD, QUEEN_OVERWATCH_HUD, ARMOR_HUD_XENO, XENO_STATUS_HUD, XENO_BANISHED_HUD, XENO_HOSTILE_ACID, XENO_HOSTILE_SLOW, XENO_HOSTILE_TAG, XENO_HOSTILE_TAG_SPREAD, XENO_HOSTILE_FREEZE, HUNTER_HUD, NEW_PLAYER_HUD) + hud_possible = list(HEALTH_HUD_XENO, PLASMA_HUD, PHEROMONE_HUD, QUEEN_OVERWATCH_HUD, ARMOR_HUD_XENO, XENO_STATUS_HUD, XENO_BANISHED_HUD, XENO_HOSTILE_ACID, XENO_HOSTILE_SLOW, XENO_HOSTILE_TAG, XENO_HOSTILE_TAG_SPREAD, XENO_HOSTILE_TAG_PREVENT, XENO_HOSTILE_FREEZE, HUNTER_HUD, NEW_PLAYER_HUD) unacidable = TRUE rebounds = TRUE faction = FACTION_XENOMORPH @@ -69,10 +69,12 @@ var/static/list/walking_state_cache = list() var/has_walking_icon_state = FALSE - /// Counts how many bullets hit xeno before dodge_bullet occurs. - var/count_shoot_bullets = 0 + /// Timer for dodge_threshold + var/last_projectile_time = 0 + /// Counts how many bullets hit xeno before dodge_threshold occurs. + var/projectiles_counted = 0 /// Guaranteed bullet dodge every X bullet shoot (don't work when you are laying down or UNCONSCIOUS) - var/dodge_bullet = 0 + var/dodge_threshold = 0 ////////////////////////////////////////////////////////////////// // 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 799064c535c4..dd1949d7b49a 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 @@ -168,7 +168,7 @@ ////////// Dancer Abilities /datum/action/xeno_action/activable/tail_stab/harpoon_tail - name = "Harpoon Tail" + name = "Tail Lance" action_icon_state = "tail_harpoon" action_type = XENO_ACTION_CLICK ability_primacy = XENO_TAIL_STAB @@ -196,7 +196,7 @@ var/duration = 10 SECONDS var/dodge_timer = TIMER_ID_NULL var/speed_buff_amount = 0.5 - var/afterimage_interval = 2 DECISECONDS + var/afterimage_interval = 1 DECISECONDS /datum/action/xeno_action/activable/prae_tail_trip name = "Tail Trip" diff --git a/code/modules/mob/living/carbon/xenomorph/strains/castes/praetorian/dancer.dm b/code/modules/mob/living/carbon/xenomorph/strains/castes/praetorian/dancer.dm index 5bfba14f6c87..509cb4f0d33c 100644 --- a/code/modules/mob/living/carbon/xenomorph/strains/castes/praetorian/dancer.dm +++ b/code/modules/mob/living/carbon/xenomorph/strains/castes/praetorian/dancer.dm @@ -29,9 +29,8 @@ prae.regeneration_multiplier = XENO_REGEN_MULTIPLIER_TIER_7 prae.plasma_types = list(PLASMA_CATECHOLAMINE) prae.claw_type = CLAW_TYPE_SHARP - prae.dodge_bullet = 6 - prae.received_phero_caps["recovery"] = 3 //need to be limited, regens too fast. - prae.ignore_aura = "frenzy" //we dont want to zoom fast randomly, it breaks muscule memory. + prae.dodge_threshold = 6 + prae.received_phero_caps["recovery"] = 3 //need to be limited, regens too fast with high strength phermones. prae.recalculate_everything() @@ -41,7 +40,10 @@ /// How much time is left on timer. (used for status) var/time_left = null - /// List of targets, used to spread yellow marks. + /// Check for slashed target that had yellow tag + var/spread_slash_triggered = FALSE + + /// List of targets, used to spread yellow tag. var/list/candidates = list() /// How many targets got yellow tag. var/spread_count = 0 @@ -64,13 +66,12 @@ /// Cooldown after activation to prevent accidental double click. var/safe_click_cooldown = 0 - /// How much dodge cooldown we decrease when slashing target? - var/dodge_coldown_decrease = 1.5 SECONDS + /// Timer to prevent dancer from spreading yellow tags. + var/last_dancer_spread_time = 0 /datum/behavior_delegate/praetorian_dancer/append_to_stat() . = list() - . += "Dodge Interval: [bound_xeno.count_shoot_bullets]/[bound_xeno.dodge_bullet]" - . += "Decrease Dodge Cooldown per Slash: -[dodge_coldown_decrease/10] seconds." + . += "Guaranteed Dodge every [bound_xeno.dodge_threshold] bullet." intent_detection() . += "Harpoon Tail Intent: [tail_mode]" if(tail_mode == "Blunt") @@ -84,49 +85,87 @@ /datum/behavior_delegate/praetorian_dancer/melee_attack_additional_effects_self() ..() - var/datum/action/xeno_action/onclick/prae_dodge/action_time = get_action(bound_xeno, /datum/action/xeno_action/onclick/prae_dodge) - if(!action_time.action_cooldown_check()) - action_time.reduce_cooldown(dodge_coldown_decrease) + if(!spread_slash_triggered) + return + + spread_slash_triggered = FALSE + + var/datum/action/xeno_action/activable/prae_impale/impale_action = get_action(bound_xeno, /datum/action/xeno_action/activable/prae_impale) + if(!impale_action.action_cooldown_check()) + impale_action.reduce_cooldown(5 SECONDS) + + var/datum/action/xeno_action/activable/prae_tail_trip/tail_trip_action = get_action(bound_xeno, /datum/action/xeno_action/activable/prae_tail_trip) + if(!tail_trip_action.action_cooldown_check()) + tail_trip_action.reduce_cooldown(5 SECONDS) /datum/behavior_delegate/praetorian_dancer/melee_attack_additional_effects_target(mob/living/carbon/target_carbon) if(!isxeno_human(target_carbon)) return - if(target_carbon.stat) - return - // Clean up all tags to 'refresh' our TTL - for(var/datum/effects/dancer_tag/target_tag in target_carbon.effects_list) + for(var/datum/effects/dancer_tag/normal/target_tag in target_carbon.effects_list) qdel(target_tag) - new /datum/effects/dancer_tag(target_carbon, bound_xeno, , , 35) + new /datum/effects/dancer_tag/normal(target_carbon, bound_xeno, , , 35) if(ishuman(target_carbon)) var/mob/living/carbon/human/target_human = target_carbon target_human.update_xeno_hostile_hud() -/datum/behavior_delegate/praetorian_dancer/on_kill_mob(mob/living/carbon/target_carbon) - candidates.Cut() - spread_count = 0 + var/consumed_spread = FALSE + for(var/datum/effects/dancer_tag/spread/spread_tag in target_carbon.effects_list) + qdel(spread_tag) + consumed_spread = TRUE + break + + if(consumed_spread) + spread_slash_triggered = TRUE + if(target_carbon.stat == UNCONSCIOUS) + try_spread_tags_from(target_carbon) + +/datum/behavior_delegate/praetorian_dancer/on_kill_mob(mob/living/carbon/target_carbon) if(!isxeno_human(target_carbon)) return - var/turf/origin = get_turf(target_carbon) + try_spread_tags_from(target_carbon) + +/datum/behavior_delegate/praetorian_dancer/proc/try_spread_tags_from(mob/living/carbon/human/source) + if(!isxeno_human(source)) + return + + var/turf/origin = get_turf(source) if(!origin) return + if(world.time < last_dancer_spread_time + 5 SECONDS) + return + + if(world.time < source.last_target_spread_time + 17 SECONDS) + return + source.last_target_spread_time = world.time + + if(!(locate(/datum/effects/dancer_tag/prevent) in source.effects_list)) + new /datum/effects/dancer_tag/prevent(source, bound_xeno) + + candidates.Cut() + var/spread_count = 0 + for(var/mob/living/carbon/human/human_target in view(5, origin)) - if(human_target == target_carbon) + if(human_target == source) continue if(human_target.stat == DEAD) continue + if(human_target.stat == UNCONSCIOUS) + continue if(!isxeno_human(human_target)) continue - if(locate(/datum/effects/dancer_tag) in human_target.effects_list) + if(locate(/datum/effects/dancer_tag/normal) in human_target.effects_list) continue if(locate(/datum/effects/dancer_tag/spread) in human_target.effects_list) continue + if(locate(/datum/effects/dancer_tag/prevent) in human_target.effects_list) + continue candidates += human_target if(!length(candidates)) @@ -141,6 +180,9 @@ human_target.update_xeno_hostile_hud() spread_count++ + if(spread_count) + last_dancer_spread_time = world.time + /datum/behavior_delegate/praetorian_dancer/proc/calculate_time(full_time, when_started) time_left = (full_time - (world.time - when_started)) / 10 @@ -231,7 +273,7 @@ apply_cooldown_override() break - for(var/datum/effects/dancer_tag/dancer_tag_effect in target_carbon.effects_list) + for(var/datum/effects/dancer_tag/normal/dancer_tag_effect in target_carbon.effects_list) buffed = TRUE qdel(dancer_tag_effect) break @@ -300,7 +342,7 @@ behavior.safe_click_cooldown = world.time + 1 SECONDS button.icon_state = "template_active" dodge_user.speed_modifier -= speed_buff_amount - dodge_user.dodge_bullet -= 3 + dodge_user.dodge_threshold -= 3 dodge_user.add_temp_pass_flags(PASS_MOB_THRU) dodge_user.recalculate_speed() dodge_user.balloon_alert(dodge_user, "we start our evasive stance!", text_color = "#7d32bb", delay = 1 SECONDS) @@ -333,7 +375,7 @@ behavior.dodge_activated = FALSE button.icon_state = "template_xeno" dodge_remove.speed_modifier += speed_buff_amount - dodge_remove.dodge_bullet += 3 + dodge_remove.dodge_threshold += 3 dodge_remove.remove_temp_pass_flags(PASS_MOB_THRU) dodge_remove.recalculate_speed() dodge_remove.reset_position_to_initial() @@ -461,7 +503,7 @@ icon = 'icons/mob/xenos/castes/tier_3/praetorian.dmi' layer = MOB_LAYER var/fade_step = 0 - var/fade_max_steps = 4 + var/fade_max_steps = 3 var/fade_delay = 1 DECISECONDS /datum/action/xeno_action/activable/prae_tail_trip/use_ability(atom/target_atom) @@ -519,7 +561,7 @@ var/buffed = FALSE - var/datum/effects/dancer_tag/dancer_tag_effect = locate() in target_carbon.effects_list + var/datum/effects/dancer_tag/normal/dancer_tag_effect = locate() in target_carbon.effects_list var/datum/effects/dancer_tag/spread/tag_spread = locate() in target_carbon.effects_list if(tag_spread) diff --git a/code/modules/projectiles/projectile.dm b/code/modules/projectiles/projectile.dm index b606c354cfcc..fa27157267c7 100644 --- a/code/modules/projectiles/projectile.dm +++ b/code/modules/projectiles/projectile.dm @@ -889,33 +889,42 @@ else return FALSE -/mob/living/carbon/xenomorph/get_projectile_hit_chance(obj/projectile/P) +/mob/living/carbon/xenomorph/get_projectile_hit_chance(obj/projectile/proj) . = ..() if(.) - var/ammo_flags = P.ammo.flags_ammo_behavior | P.projectile_override_flags - if(SEND_SIGNAL(P, COMSIG_BULLET_CHECK_MOB_SKIPPING, src) & COMPONENT_SKIP_MOB\ - || P.runtime_iff_group && get_target_lock(P.runtime_iff_group)) + var/ammo_flags = proj.ammo.flags_ammo_behavior | proj.projectile_override_flags + if(SEND_SIGNAL(proj, COMSIG_BULLET_CHECK_MOB_SKIPPING, src) & COMPONENT_SKIP_MOB\ + || proj.runtime_iff_group && get_target_lock(proj.runtime_iff_group)) return FALSE if(ammo_flags & AMMO_SKIPS_ALIENS) - var/mob/living/carbon/xenomorph/X = P.firer - if(!istype(X)) + var/mob/living/carbon/xenomorph/xeno = proj.firer + if(!istype(xeno)) return FALSE - if(X.hivenumber == hivenumber) + if(xeno.hivenumber == hivenumber) return FALSE - if(dodge_bullet > 0) - if(!(ammo_flags & (AMMO_SNIPER | AMMO_ROCKET))) - if(body_position != LYING_DOWN && stat != UNCONSCIOUS) - count_shoot_bullets++ - if(count_shoot_bullets >= dodge_bullet) - count_shoot_bullets = 0 - xeno_jitter(5 DECISECONDS) - if(P.ammo.sound_miss) - playsound_client(client, P.ammo.sound_miss, get_turf(src), 75, TRUE) - visible_message(SPAN_AVOIDHARM("The [src] darts aside, evading [P]!"), - SPAN_AVOIDHARM("You react fast, and [P] narrowly misses you!"), null, 4, CHAT_TYPE_TAKING_HIT) - return FALSE + if(dodge_threshold > 0) + if(body_position == LYING_DOWN || stat == UNCONSCIOUS) + projectiles_counted = 0 + last_projectile_time = 0 + else if(!(ammo_flags & (AMMO_SNIPER | AMMO_ROCKET))) + if(last_projectile_time && world.time - last_projectile_time >= 6 SECONDS) + projectiles_counted = 0 + + projectiles_counted++ + last_projectile_time = world.time + + if(projectiles_counted >= dodge_threshold) + projectiles_counted = 0 + last_projectile_time = 0 + + xeno_jitter(5 DECISECONDS) + if(proj.ammo.sound_miss) + playsound_client(client, proj.ammo.sound_miss, get_turf(src), 75, TRUE) + visible_message(SPAN_AVOIDHARM("The [src] darts aside, evading [proj]!"), + SPAN_AVOIDHARM("You react fast, and [proj] narrowly misses you!"), null, 4, CHAT_TYPE_TAKING_HIT) + return FALSE if(mob_size == MOB_SIZE_SMALL) . -= 10 diff --git a/icons/mob/hud/hud.dmi b/icons/mob/hud/hud.dmi index da68d37eef5bf4adfbf0655c6bca3b942f68285d..4d53712672b9943a6b3a8743bf0bfd1b5048f9eb 100644 GIT binary patch literal 22014 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 Date: Sun, 1 Feb 2026 21:39:10 +0100 Subject: [PATCH 27/40] forgot --- .../carbon/xenomorph/strains/castes/praetorian/dancer.dm | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/code/modules/mob/living/carbon/xenomorph/strains/castes/praetorian/dancer.dm b/code/modules/mob/living/carbon/xenomorph/strains/castes/praetorian/dancer.dm index 509cb4f0d33c..974b2966065b 100644 --- a/code/modules/mob/living/carbon/xenomorph/strains/castes/praetorian/dancer.dm +++ b/code/modules/mob/living/carbon/xenomorph/strains/castes/praetorian/dancer.dm @@ -72,8 +72,9 @@ /datum/behavior_delegate/praetorian_dancer/append_to_stat() . = list() . += "Guaranteed Dodge every [bound_xeno.dodge_threshold] bullet." + . += "Yellow Mark Spread Delay: 5 seconds." intent_detection() - . += "Harpoon Tail Intent: [tail_mode]" + . += "Tail Lance Intent: [tail_mode]" if(tail_mode == "Blunt") . += "Damage: [blunt_damage] AP" . += "Cooldown: 3 seconds." From e1dadfd7c6a0b635248bd262a99a59ae269ed1d7 Mon Sep 17 00:00:00 2001 From: Venuska1117 Date: Sun, 1 Feb 2026 21:39:49 +0100 Subject: [PATCH 28/40] typo --- .../living/carbon/xenomorph/strains/castes/praetorian/dancer.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/mob/living/carbon/xenomorph/strains/castes/praetorian/dancer.dm b/code/modules/mob/living/carbon/xenomorph/strains/castes/praetorian/dancer.dm index 974b2966065b..49d3f72894a2 100644 --- a/code/modules/mob/living/carbon/xenomorph/strains/castes/praetorian/dancer.dm +++ b/code/modules/mob/living/carbon/xenomorph/strains/castes/praetorian/dancer.dm @@ -72,7 +72,7 @@ /datum/behavior_delegate/praetorian_dancer/append_to_stat() . = list() . += "Guaranteed Dodge every [bound_xeno.dodge_threshold] bullet." - . += "Yellow Mark Spread Delay: 5 seconds." + . += "Yellow Tag Spread Delay: 5 seconds." intent_detection() . += "Tail Lance Intent: [tail_mode]" if(tail_mode == "Blunt") From cb1547fca69889960ec36c2ace03f3b7b18678d4 Mon Sep 17 00:00:00 2001 From: Venuska1117 Date: Sun, 1 Feb 2026 22:04:50 +0100 Subject: [PATCH 29/40] increased from 5 -> 7 to be safe --- .../living/carbon/xenomorph/strains/castes/praetorian/dancer.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/mob/living/carbon/xenomorph/strains/castes/praetorian/dancer.dm b/code/modules/mob/living/carbon/xenomorph/strains/castes/praetorian/dancer.dm index 49d3f72894a2..c699f0f011a7 100644 --- a/code/modules/mob/living/carbon/xenomorph/strains/castes/praetorian/dancer.dm +++ b/code/modules/mob/living/carbon/xenomorph/strains/castes/praetorian/dancer.dm @@ -139,7 +139,7 @@ if(!origin) return - if(world.time < last_dancer_spread_time + 5 SECONDS) + if(world.time < last_dancer_spread_time + 7 SECONDS) return if(world.time < source.last_target_spread_time + 17 SECONDS) From fd5dfca237aa4e4b1bc61044fbbe220d2d53d3a4 Mon Sep 17 00:00:00 2001 From: Venuska1117 Date: Tue, 3 Feb 2026 03:24:19 +0100 Subject: [PATCH 30/40] version 0.85 (fix patch) - Fixes Dodge time to actually be 7s instead of 10s. - Removed Visual of gray marks, concept stays. - Changed code to Mist requests. --- code/__DEFINES/mob_hud.dm | 1 - .../datums/effects/xeno_strains/dancer_tag.dm | 7 ---- code/datums/mob_hud.dm | 14 +------- .../mob/living/carbon/human/human_defines.dm | 2 +- .../mob/living/carbon/xenomorph/Xenomorph.dm | 2 +- .../praetorian/praetorian_abilities.dm | 2 +- .../strains/castes/praetorian/dancer.dm | 34 ++++++++---------- code/modules/projectiles/projectile.dm | 18 +++++----- icons/mob/hud/hud.dmi | Bin 22014 -> 21716 bytes 9 files changed, 28 insertions(+), 52 deletions(-) diff --git a/code/__DEFINES/mob_hud.dm b/code/__DEFINES/mob_hud.dm index b2aec90efd49..166af7850805 100644 --- a/code/__DEFINES/mob_hud.dm +++ b/code/__DEFINES/mob_hud.dm @@ -29,7 +29,6 @@ #define NEW_PLAYER_HUD "29" //Makes it easy to see new players. #define SPYCAM_HUD "30" //Remote control spy cameras. #define XENO_HOSTILE_TAG_SPREAD "31" // dancer prae yellow 'tag' -#define XENO_HOSTILE_TAG_PREVENT "32" // dancer prae gray 'tag' //data HUD (medhud, sechud) defines #define MOB_HUD_SECURITY_BASIC 1 diff --git a/code/datums/effects/xeno_strains/dancer_tag.dm b/code/datums/effects/xeno_strains/dancer_tag.dm index fb8758a1daab..35c75544cfa8 100644 --- a/code/datums/effects/xeno_strains/dancer_tag.dm +++ b/code/datums/effects/xeno_strains/dancer_tag.dm @@ -46,10 +46,3 @@ /datum/effects/dancer_tag/spread/New(atom/target_atom, mob/from = null) . = ..(target_atom, from, null, "chest", 7 SECONDS) -/datum/effects/dancer_tag/prevent - effect_name = "dancer tag prevent" - flags = INF_DURATION - -/datum/effects/dancer_tag/prevent/New(atom/target_atom, mob/from = null) - . = ..(target_atom, from, null, "chest", 17 SECONDS) - diff --git a/code/datums/mob_hud.dm b/code/datums/mob_hud.dm index f845a8082fb5..49b4ed0cb69c 100644 --- a/code/datums/mob_hud.dm +++ b/code/datums/mob_hud.dm @@ -175,7 +175,7 @@ GLOBAL_LIST_INIT_TYPED(huds, /datum/mob_hud, flatten_numeric_alist(alist( hud_icons = list(HEALTH_HUD_XENO, PLASMA_HUD, PHEROMONE_HUD, QUEEN_OVERWATCH_HUD, ARMOR_HUD_XENO, XENO_STATUS_HUD, XENO_BANISHED_HUD, HUNTER_HUD) /datum/mob_hud/xeno_hostile - hud_icons = list(XENO_HOSTILE_ACID, XENO_HOSTILE_SLOW, XENO_HOSTILE_TAG, XENO_HOSTILE_TAG_SPREAD, XENO_HOSTILE_TAG_PREVENT, XENO_HOSTILE_FREEZE) + hud_icons = list(XENO_HOSTILE_ACID, XENO_HOSTILE_SLOW, XENO_HOSTILE_TAG, XENO_HOSTILE_TAG_SPREAD, XENO_HOSTILE_FREEZE) /datum/mob_hud/execute_hud hud_icons = list(XENO_EXECUTE) @@ -832,21 +832,18 @@ GLOBAL_DATUM_INIT(hud_icon_hudfocus, /image, image('icons/mob/hud/human_status.d var/image/slow_holder = hud_list[XENO_HOSTILE_SLOW] var/image/tag_holder = hud_list[XENO_HOSTILE_TAG] var/image/tag_spread_holder = hud_list[XENO_HOSTILE_TAG_SPREAD] - var/image/tag_prevent_holder = hud_list[XENO_HOSTILE_TAG_PREVENT] var/image/freeze_holder = hud_list[XENO_HOSTILE_FREEZE] acid_holder.icon_state = "hudblank" slow_holder.icon_state = "hudblank" tag_holder.icon_state = "hudblank" tag_spread_holder.icon_state = "hudblank" - tag_prevent_holder.icon_state = "hudblank" freeze_holder.icon_state = "hudblank" acid_holder.overlays.Cut() slow_holder.overlays.Cut() tag_holder.overlays.Cut() tag_spread_holder.overlays.Cut() - tag_prevent_holder.overlays.Cut() freeze_holder.overlays.Cut() var/acid_found = FALSE @@ -887,15 +884,6 @@ GLOBAL_DATUM_INIT(hud_icon_hudfocus, /image, image('icons/mob/hud/human_status.d if(spread_tag_found) tag_spread_holder.overlays += image('icons/mob/hud/hud.dmi', src, "prae_tag_yellow") - var/prevent_tag_found = FALSE - for(var/datum/effects/dancer_tag/prevent/prevent_tag in effects_list) - if(!QDELETED(prevent_tag)) - prevent_tag_found = TRUE - break - - if(prevent_tag_found) - tag_prevent_holder.overlays += image('icons/mob/hud/hud.dmi', src, "prae_tag_grey") - var/freeze_found = HAS_TRAIT(src, TRAIT_IMMOBILIZED) && body_position == STANDING_UP && !buckled // Eligible targets are unable to move but can stand and aren't buckled (eg nested) - This is to convey that they are temporarily unable to move if (freeze_found) freeze_holder.overlays += image('icons/mob/hud/hud.dmi', src, "xeno_freeze") diff --git a/code/modules/mob/living/carbon/human/human_defines.dm b/code/modules/mob/living/carbon/human/human_defines.dm index 53664275686a..990ed7246a3c 100644 --- a/code/modules/mob/living/carbon/human/human_defines.dm +++ b/code/modules/mob/living/carbon/human/human_defines.dm @@ -142,7 +142,7 @@ var/last_chew = 0 //taken from human.dm - hud_possible = list(HEALTH_HUD, STATUS_HUD, STATUS_HUD_OOC, STATUS_HUD_XENO_INFECTION, STATUS_HUD_XENO_CULTIST, ID_HUD, WANTED_HUD, ORDER_HUD, XENO_HOSTILE_ACID, XENO_HOSTILE_SLOW, XENO_HOSTILE_TAG, XENO_HOSTILE_TAG_SPREAD, XENO_HOSTILE_TAG_PREVENT, XENO_HOSTILE_FREEZE, XENO_EXECUTE, HUNTER_CLAN, HUNTER_HUD, FACTION_HUD, HOLOCARD_HUD, NEW_PLAYER_HUD) + hud_possible = list(HEALTH_HUD, STATUS_HUD, STATUS_HUD_OOC, STATUS_HUD_XENO_INFECTION, STATUS_HUD_XENO_CULTIST, ID_HUD, WANTED_HUD, ORDER_HUD, XENO_HOSTILE_ACID, XENO_HOSTILE_SLOW, XENO_HOSTILE_TAG, XENO_HOSTILE_TAG_SPREAD, XENO_HOSTILE_FREEZE, XENO_EXECUTE, HUNTER_CLAN, HUNTER_HUD, FACTION_HUD, HOLOCARD_HUD, NEW_PLAYER_HUD) var/embedded_flag //To check if we've need to roll for damage on movement while an item is imbedded in us. var/allow_gun_usage = TRUE var/melee_allowed = TRUE diff --git a/code/modules/mob/living/carbon/xenomorph/Xenomorph.dm b/code/modules/mob/living/carbon/xenomorph/Xenomorph.dm index 4264981460ec..6fc40874ab4d 100644 --- a/code/modules/mob/living/carbon/xenomorph/Xenomorph.dm +++ b/code/modules/mob/living/carbon/xenomorph/Xenomorph.dm @@ -45,7 +45,7 @@ see_in_dark = 12 recovery_constant = 1.5 see_invisible = SEE_INVISIBLE_LIVING - hud_possible = list(HEALTH_HUD_XENO, PLASMA_HUD, PHEROMONE_HUD, QUEEN_OVERWATCH_HUD, ARMOR_HUD_XENO, XENO_STATUS_HUD, XENO_BANISHED_HUD, XENO_HOSTILE_ACID, XENO_HOSTILE_SLOW, XENO_HOSTILE_TAG, XENO_HOSTILE_TAG_SPREAD, XENO_HOSTILE_TAG_PREVENT, XENO_HOSTILE_FREEZE, HUNTER_HUD, NEW_PLAYER_HUD) + hud_possible = list(HEALTH_HUD_XENO, PLASMA_HUD, PHEROMONE_HUD, QUEEN_OVERWATCH_HUD, ARMOR_HUD_XENO, XENO_STATUS_HUD, XENO_BANISHED_HUD, XENO_HOSTILE_ACID, XENO_HOSTILE_SLOW, XENO_HOSTILE_TAG, XENO_HOSTILE_TAG_SPREAD, XENO_HOSTILE_FREEZE, HUNTER_HUD, NEW_PLAYER_HUD) unacidable = TRUE rebounds = TRUE faction = FACTION_XENOMORPH 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 dd1949d7b49a..530c85a38a3b 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 @@ -193,7 +193,7 @@ action_type = XENO_ACTION_CLICK // Config - var/duration = 10 SECONDS + var/duration = 7 SECONDS var/dodge_timer = TIMER_ID_NULL var/speed_buff_amount = 0.5 var/afterimage_interval = 1 DECISECONDS diff --git a/code/modules/mob/living/carbon/xenomorph/strains/castes/praetorian/dancer.dm b/code/modules/mob/living/carbon/xenomorph/strains/castes/praetorian/dancer.dm index c699f0f011a7..6fe0b62f198c 100644 --- a/code/modules/mob/living/carbon/xenomorph/strains/castes/praetorian/dancer.dm +++ b/code/modules/mob/living/carbon/xenomorph/strains/castes/praetorian/dancer.dm @@ -34,6 +34,12 @@ prae.recalculate_everything() +#define DANCER_ABILITY_CD_REDUCTION 5 SECONDS +#define DANCER_LAST_TAG_SPREAD_TIME 7 SECONDS +#define DANCER_YELLOW_TAG_SPREAD_CD 20 SECONDS +#define DANCER_DODGE_TIME 7 SECONDS +#define DANCER_TAG_SPREAD_COUNT 5 + /datum/behavior_delegate/praetorian_dancer name = "Praetorian Dancer Behavior Delegate" @@ -55,10 +61,8 @@ /// Is Dodge ability active? var/dodge_activated = FALSE - /// Is dodge_time activate? (used for countdown) + /// Used to countdown DANCER_DODGE_TIME. var/dodge_start_time = -1 - /// For how long dodge should be active. - var/dodge_time = 7 SECONDS /// How much refund we want to get back? 1.0 is 1s used to 1s cooldown, 2.0 is 1s used 2s cooldown. var/refund_multiplier = 2.0 /// Used in calculation, finalized number will be displayed as cooldown. @@ -71,7 +75,7 @@ /datum/behavior_delegate/praetorian_dancer/append_to_stat() . = list() - . += "Guaranteed Dodge every [bound_xeno.dodge_threshold] bullet." + . += "Guaranteed Dodge every [bound_xeno.dodge_threshold] bullet\s." . += "Yellow Tag Spread Delay: 5 seconds." intent_detection() . += "Tail Lance Intent: [tail_mode]" @@ -79,7 +83,7 @@ . += "Damage: [blunt_damage] AP" . += "Cooldown: 3 seconds." if(dodge_start_time != -1) - calculate_time(dodge_time, dodge_start_time) + time_left = (DANCER_DODGE_TIME - (world.time - dodge_start_time)) / 10 . += "Dodge Remaining: [time_left] second\s." return @@ -93,11 +97,11 @@ var/datum/action/xeno_action/activable/prae_impale/impale_action = get_action(bound_xeno, /datum/action/xeno_action/activable/prae_impale) if(!impale_action.action_cooldown_check()) - impale_action.reduce_cooldown(5 SECONDS) + impale_action.reduce_cooldown(DANCER_ABILITY_CD_REDUCTION) var/datum/action/xeno_action/activable/prae_tail_trip/tail_trip_action = get_action(bound_xeno, /datum/action/xeno_action/activable/prae_tail_trip) if(!tail_trip_action.action_cooldown_check()) - tail_trip_action.reduce_cooldown(5 SECONDS) + tail_trip_action.reduce_cooldown(DANCER_ABILITY_CD_REDUCTION) /datum/behavior_delegate/praetorian_dancer/melee_attack_additional_effects_target(mob/living/carbon/target_carbon) if(!isxeno_human(target_carbon)) @@ -139,16 +143,13 @@ if(!origin) return - if(world.time < last_dancer_spread_time + 7 SECONDS) + if(world.time < last_dancer_spread_time + DANCER_LAST_TAG_SPREAD_TIME) return - if(world.time < source.last_target_spread_time + 17 SECONDS) + if(world.time < source.last_target_spread_time + DANCER_YELLOW_TAG_SPREAD_CD) return source.last_target_spread_time = world.time - if(!(locate(/datum/effects/dancer_tag/prevent) in source.effects_list)) - new /datum/effects/dancer_tag/prevent(source, bound_xeno) - candidates.Cut() var/spread_count = 0 @@ -165,8 +166,6 @@ continue if(locate(/datum/effects/dancer_tag/spread) in human_target.effects_list) continue - if(locate(/datum/effects/dancer_tag/prevent) in human_target.effects_list) - continue candidates += human_target if(!length(candidates)) @@ -174,7 +173,7 @@ candidates = sort_list_dist(candidates, origin) for(var/mob/living/carbon/human/human_target in candidates) - if(spread_count >= 5) + if(spread_count >= DANCER_TAG_SPREAD_COUNT) break new /datum/effects/dancer_tag/spread(human_target, bound_xeno) @@ -184,9 +183,6 @@ if(spread_count) last_dancer_spread_time = world.time -/datum/behavior_delegate/praetorian_dancer/proc/calculate_time(full_time, when_started) - time_left = (full_time - (world.time - when_started)) / 10 - /datum/behavior_delegate/praetorian_dancer/proc/intent_detection() if(bound_xeno && bound_xeno.a_intent == INTENT_DISARM) tail_mode = "Blunt" @@ -388,7 +384,7 @@ if(behavior.dodge_start_time > 0) var/used_ratio = round((world.time - behavior.dodge_start_time) / duration, 0.1) - behavior.recharge_time = max(behavior.dodge_time * used_ratio * behavior.refund_multiplier, 5 SECONDS) + behavior.recharge_time = max(DANCER_DODGE_TIME * used_ratio * behavior.refund_multiplier, 5 SECONDS) behavior.dodge_start_time = -1 apply_cooldown_override(behavior.recharge_time) diff --git a/code/modules/projectiles/projectile.dm b/code/modules/projectiles/projectile.dm index fa27157267c7..d01b1d474e56 100644 --- a/code/modules/projectiles/projectile.dm +++ b/code/modules/projectiles/projectile.dm @@ -889,16 +889,16 @@ else return FALSE -/mob/living/carbon/xenomorph/get_projectile_hit_chance(obj/projectile/proj) +/mob/living/carbon/xenomorph/get_projectile_hit_chance(obj/projectile/bullet) . = ..() if(.) - var/ammo_flags = proj.ammo.flags_ammo_behavior | proj.projectile_override_flags - if(SEND_SIGNAL(proj, COMSIG_BULLET_CHECK_MOB_SKIPPING, src) & COMPONENT_SKIP_MOB\ - || proj.runtime_iff_group && get_target_lock(proj.runtime_iff_group)) + var/ammo_flags = bullet.ammo.flags_ammo_behavior | bullet.projectile_override_flags + if(SEND_SIGNAL(bullet, COMSIG_BULLET_CHECK_MOB_SKIPPING, src) & COMPONENT_SKIP_MOB\ + || bullet.runtime_iff_group && get_target_lock(bullet.runtime_iff_group)) return FALSE if(ammo_flags & AMMO_SKIPS_ALIENS) - var/mob/living/carbon/xenomorph/xeno = proj.firer + var/mob/living/carbon/xenomorph/xeno = bullet.firer if(!istype(xeno)) return FALSE if(xeno.hivenumber == hivenumber) @@ -920,10 +920,10 @@ last_projectile_time = 0 xeno_jitter(5 DECISECONDS) - if(proj.ammo.sound_miss) - playsound_client(client, proj.ammo.sound_miss, get_turf(src), 75, TRUE) - visible_message(SPAN_AVOIDHARM("The [src] darts aside, evading [proj]!"), - SPAN_AVOIDHARM("You react fast, and [proj] narrowly misses you!"), null, 4, CHAT_TYPE_TAKING_HIT) + if(bullet.ammo.sound_miss) + playsound_client(client, bullet.ammo.sound_miss, get_turf(src), 75, TRUE) + visible_message(SPAN_AVOIDHARM("The [src] darts aside, evading [bullet]!"), + SPAN_AVOIDHARM("You react fast, and [bullet] narrowly misses you!"), null, 4, CHAT_TYPE_TAKING_HIT) return FALSE if(mob_size == MOB_SIZE_SMALL) diff --git a/icons/mob/hud/hud.dmi b/icons/mob/hud/hud.dmi index 4d53712672b9943a6b3a8743bf0bfd1b5048f9eb..d9ed92bb93de4ba18ee16b02573234eb603b90ff 100644 GIT binary patch literal 21716 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 literal 22014 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 J Date: Tue, 3 Feb 2026 12:42:31 +0100 Subject: [PATCH 31/40] updates dancer description for 0.85 --- .../living/carbon/xenomorph/strains/castes/praetorian/dancer.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/mob/living/carbon/xenomorph/strains/castes/praetorian/dancer.dm b/code/modules/mob/living/carbon/xenomorph/strains/castes/praetorian/dancer.dm index 6fe0b62f198c..21a6b21c1c3d 100644 --- a/code/modules/mob/living/carbon/xenomorph/strains/castes/praetorian/dancer.dm +++ b/code/modules/mob/living/carbon/xenomorph/strains/castes/praetorian/dancer.dm @@ -1,7 +1,7 @@ /datum/xeno_strain/dancer // My name is Cuban Pete, I'm the King of the Rumba Beat name = PRAETORIAN_DANCER - description = "You lose all of your acid-based abilities and a small amount of your armor in exchange for increased movement speed, evasion, and unparalleled agility that gives you an ability to move even more quickly, dodge bullets, and phase through enemies and allies alike. By slashing enemies, you temporarily increase your movement speed and you also you apply a tag that changes how your two new tail abilities function. By tagging enemies, you will make Impale hit twice instead of once and make Tail Trip knock enemies down instead of stunning them." + description = "You lose all acid-based abilities and a small amount of your armor in exchange for increased movement speed, evasion, and unparalleled agility. This strain excels at rapid repositioning, bullet dodging, and phasing effortlessly through enemies and allies alike. Slashing enemies applies a red tag, altering how your tail abilities function. Tagged enemies cause Impale to strike twice and transform Tail Trip into a powerful knockdown instead of a brief stun. Your new Tail Stab adapts to your intent. When used in Disarm mode, it becomes a Blunt, armor-piercing strike. When enemies are brought close to death or slain by your claws, yellow tags spread to nearby foes. Slashing yellow-tagged enemies reduces the cooldown of your tail abilities, and using a tail ability on a yellow-tagged target grants no cooldown penalty." flavor_description = "A performance fit for a Queen, this one will become my instrument of death." icon_state_prefix = "Dancer" From 95aed224c7a6268752d2e63a79dcd592271ebb14 Mon Sep 17 00:00:00 2001 From: Venuska1117 Date: Tue, 3 Feb 2026 12:46:53 +0100 Subject: [PATCH 32/40] bubble not bursting, thanks mist --- code/__DEFINES/xeno.dm | 3 +++ .../xenomorph/abilities/praetorian/praetorian_abilities.dm | 2 +- .../carbon/xenomorph/strains/castes/praetorian/dancer.dm | 1 - 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/code/__DEFINES/xeno.dm b/code/__DEFINES/xeno.dm index 90562f339414..bb5e33bf8e22 100644 --- a/code/__DEFINES/xeno.dm +++ b/code/__DEFINES/xeno.dm @@ -745,6 +745,9 @@ #define XENO_VISION_LEVEL_HIGH_NVG "Three Quarters Night Vision" #define XENO_VISION_LEVEL_FULL_NVG "Full Night Vision" +// dancer defines +#define DANCER_DODGE_TIME 7 SECONDS + // drone fruits 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 530c85a38a3b..46ab4db8a0bf 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 @@ -193,7 +193,7 @@ action_type = XENO_ACTION_CLICK // Config - var/duration = 7 SECONDS + var/duration = DANCER_DODGE_TIME var/dodge_timer = TIMER_ID_NULL var/speed_buff_amount = 0.5 var/afterimage_interval = 1 DECISECONDS diff --git a/code/modules/mob/living/carbon/xenomorph/strains/castes/praetorian/dancer.dm b/code/modules/mob/living/carbon/xenomorph/strains/castes/praetorian/dancer.dm index 21a6b21c1c3d..24bbe9918ea1 100644 --- a/code/modules/mob/living/carbon/xenomorph/strains/castes/praetorian/dancer.dm +++ b/code/modules/mob/living/carbon/xenomorph/strains/castes/praetorian/dancer.dm @@ -37,7 +37,6 @@ #define DANCER_ABILITY_CD_REDUCTION 5 SECONDS #define DANCER_LAST_TAG_SPREAD_TIME 7 SECONDS #define DANCER_YELLOW_TAG_SPREAD_CD 20 SECONDS -#define DANCER_DODGE_TIME 7 SECONDS #define DANCER_TAG_SPREAD_COUNT 5 /datum/behavior_delegate/praetorian_dancer From 13438ac0a4d686cb3f95fdecebc3ddc3e863241b Mon Sep 17 00:00:00 2001 From: Venuska1117 Date: Mon, 23 Feb 2026 14:15:45 +0100 Subject: [PATCH 33/40] Small Improvements: - "Marks" now have darker outline to make them more visible. - Slashing yellow marks removes cooldown on both impale and tail trip. --- .../strains/castes/praetorian/dancer.dm | 9 ++++----- icons/mob/hud/hud.dmi | Bin 21716 -> 21212 bytes 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/code/modules/mob/living/carbon/xenomorph/strains/castes/praetorian/dancer.dm b/code/modules/mob/living/carbon/xenomorph/strains/castes/praetorian/dancer.dm index 24bbe9918ea1..cf02425a2e78 100644 --- a/code/modules/mob/living/carbon/xenomorph/strains/castes/praetorian/dancer.dm +++ b/code/modules/mob/living/carbon/xenomorph/strains/castes/praetorian/dancer.dm @@ -34,8 +34,7 @@ prae.recalculate_everything() -#define DANCER_ABILITY_CD_REDUCTION 5 SECONDS -#define DANCER_LAST_TAG_SPREAD_TIME 7 SECONDS +#define DANCER_LAST_TAG_SPREAD_DURATION 7 SECONDS #define DANCER_YELLOW_TAG_SPREAD_CD 20 SECONDS #define DANCER_TAG_SPREAD_COUNT 5 @@ -96,11 +95,11 @@ var/datum/action/xeno_action/activable/prae_impale/impale_action = get_action(bound_xeno, /datum/action/xeno_action/activable/prae_impale) if(!impale_action.action_cooldown_check()) - impale_action.reduce_cooldown(DANCER_ABILITY_CD_REDUCTION) + impale_action.apply_cooldown_override() var/datum/action/xeno_action/activable/prae_tail_trip/tail_trip_action = get_action(bound_xeno, /datum/action/xeno_action/activable/prae_tail_trip) if(!tail_trip_action.action_cooldown_check()) - tail_trip_action.reduce_cooldown(DANCER_ABILITY_CD_REDUCTION) + tail_trip_action.apply_cooldown_override() /datum/behavior_delegate/praetorian_dancer/melee_attack_additional_effects_target(mob/living/carbon/target_carbon) if(!isxeno_human(target_carbon)) @@ -142,7 +141,7 @@ if(!origin) return - if(world.time < last_dancer_spread_time + DANCER_LAST_TAG_SPREAD_TIME) + if(world.time < last_dancer_spread_time + DANCER_LAST_TAG_SPREAD_DURATION) return if(world.time < source.last_target_spread_time + DANCER_YELLOW_TAG_SPREAD_CD) diff --git a/icons/mob/hud/hud.dmi b/icons/mob/hud/hud.dmi index d9ed92bb93de4ba18ee16b02573234eb603b90ff..0b2ddbcdb5cd1503a61380cf2a9cbafb355f27eb 100644 GIT binary patch literal 21212 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 From 411d84f89f95c6702b2c3fe3bb5f7fe652f49990 Mon Sep 17 00:00:00 2001 From: Venuska1117 Date: Sun, 1 Mar 2026 03:50:04 +0100 Subject: [PATCH 34/40] Fix Yellow Tags Spreading - (Probably) fixed yellow tags spreading delay, optimized code so now it should function quicker. --- .../strains/castes/praetorian/dancer.dm | 29 +++++++------------ 1 file changed, 11 insertions(+), 18 deletions(-) diff --git a/code/modules/mob/living/carbon/xenomorph/strains/castes/praetorian/dancer.dm b/code/modules/mob/living/carbon/xenomorph/strains/castes/praetorian/dancer.dm index cf02425a2e78..2d9dea88b31e 100644 --- a/code/modules/mob/living/carbon/xenomorph/strains/castes/praetorian/dancer.dm +++ b/code/modules/mob/living/carbon/xenomorph/strains/castes/praetorian/dancer.dm @@ -36,6 +36,7 @@ #define DANCER_LAST_TAG_SPREAD_DURATION 7 SECONDS #define DANCER_YELLOW_TAG_SPREAD_CD 20 SECONDS +#define DANCER_YELLOW_TAG_SPREAD_DIST 5 #define DANCER_TAG_SPREAD_COUNT 5 /datum/behavior_delegate/praetorian_dancer @@ -134,7 +135,7 @@ try_spread_tags_from(target_carbon) /datum/behavior_delegate/praetorian_dancer/proc/try_spread_tags_from(mob/living/carbon/human/source) - if(!isxeno_human(source)) + if(!ishuman(source)) return var/turf/origin = get_turf(source) @@ -151,35 +152,27 @@ candidates.Cut() var/spread_count = 0 - for(var/mob/living/carbon/human/human_target in view(5, origin)) + for(var/mob/living/carbon/human/human_target in view(DANCER_YELLOW_TAG_SPREAD_DIST, origin)) if(human_target == source) continue - if(human_target.stat == DEAD) - continue - if(human_target.stat == UNCONSCIOUS) - continue - if(!isxeno_human(human_target)) + if(human_target.stat == DEAD || human_target.stat == UNCONSCIOUS) continue if(locate(/datum/effects/dancer_tag/normal) in human_target.effects_list) continue if(locate(/datum/effects/dancer_tag/spread) in human_target.effects_list) continue - candidates += human_target - - if(!length(candidates)) - return - - candidates = sort_list_dist(candidates, origin) - for(var/mob/living/carbon/human/human_target in candidates) - if(spread_count >= DANCER_TAG_SPREAD_COUNT) - break + if(get_dist(origin, human_target) > DANCER_YELLOW_TAG_SPREAD_DIST) + continue new /datum/effects/dancer_tag/spread(human_target, bound_xeno) human_target.update_xeno_hostile_hud() spread_count++ - if(spread_count) - last_dancer_spread_time = world.time + if(spread_count >= DANCER_TAG_SPREAD_COUNT) + break + + if(spread_count) + last_dancer_spread_time = world.time /datum/behavior_delegate/praetorian_dancer/proc/intent_detection() if(bound_xeno && bound_xeno.a_intent == INTENT_DISARM) From 5b888baaf6d00e3e1111a032ede9f3f67554a497 Mon Sep 17 00:00:00 2001 From: Venuska1117 Date: Sun, 1 Mar 2026 03:55:16 +0100 Subject: [PATCH 35/40] forgot to remove unused list from fix --- .../carbon/xenomorph/strains/castes/praetorian/dancer.dm | 3 --- 1 file changed, 3 deletions(-) diff --git a/code/modules/mob/living/carbon/xenomorph/strains/castes/praetorian/dancer.dm b/code/modules/mob/living/carbon/xenomorph/strains/castes/praetorian/dancer.dm index 2d9dea88b31e..a0f22e178ad1 100644 --- a/code/modules/mob/living/carbon/xenomorph/strains/castes/praetorian/dancer.dm +++ b/code/modules/mob/living/carbon/xenomorph/strains/castes/praetorian/dancer.dm @@ -48,8 +48,6 @@ /// Check for slashed target that had yellow tag var/spread_slash_triggered = FALSE - /// List of targets, used to spread yellow tag. - var/list/candidates = list() /// How many targets got yellow tag. var/spread_count = 0 @@ -149,7 +147,6 @@ return source.last_target_spread_time = world.time - candidates.Cut() var/spread_count = 0 for(var/mob/living/carbon/human/human_target in view(DANCER_YELLOW_TAG_SPREAD_DIST, origin)) From e9f22468cfe2852283004f383a823a38df565bf7 Mon Sep 17 00:00:00 2001 From: Venuska1117 Date: Thu, 5 Mar 2026 01:32:47 +0100 Subject: [PATCH 36/40] Requested Mist Changes: - Code improved --- .../carbon/xenomorph/strains/castes/praetorian/dancer.dm | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/code/modules/mob/living/carbon/xenomorph/strains/castes/praetorian/dancer.dm b/code/modules/mob/living/carbon/xenomorph/strains/castes/praetorian/dancer.dm index a0f22e178ad1..12d41f2950c1 100644 --- a/code/modules/mob/living/carbon/xenomorph/strains/castes/praetorian/dancer.dm +++ b/code/modules/mob/living/carbon/xenomorph/strains/castes/praetorian/dancer.dm @@ -154,11 +154,7 @@ continue if(human_target.stat == DEAD || human_target.stat == UNCONSCIOUS) continue - if(locate(/datum/effects/dancer_tag/normal) in human_target.effects_list) - continue - if(locate(/datum/effects/dancer_tag/spread) in human_target.effects_list) - continue - if(get_dist(origin, human_target) > DANCER_YELLOW_TAG_SPREAD_DIST) + if(locate(/datum/effects/dancer_tag) in human_target.effects_list) continue new /datum/effects/dancer_tag/spread(human_target, bound_xeno) From 38e2a9203b6308c7585aae69deebeb15d8e75aae Mon Sep 17 00:00:00 2001 From: Venuska1117 Date: Sat, 21 Mar 2026 02:21:10 +0100 Subject: [PATCH 37/40] version 1.0 - Changed condition for yellow marks spreading, now yellow marks only spread from dancer player to nearby targets, and they will only spread when you put target into critical condition (health under 0, -100 is death). - Killing targets don't spread yellow tags anymore. - Changed description of strain to match changes. --- .../strains/castes/praetorian/dancer.dm | 16 +++++----------- 1 file changed, 5 insertions(+), 11 deletions(-) diff --git a/code/modules/mob/living/carbon/xenomorph/strains/castes/praetorian/dancer.dm b/code/modules/mob/living/carbon/xenomorph/strains/castes/praetorian/dancer.dm index 12d41f2950c1..1a1add381185 100644 --- a/code/modules/mob/living/carbon/xenomorph/strains/castes/praetorian/dancer.dm +++ b/code/modules/mob/living/carbon/xenomorph/strains/castes/praetorian/dancer.dm @@ -1,7 +1,7 @@ /datum/xeno_strain/dancer // My name is Cuban Pete, I'm the King of the Rumba Beat name = PRAETORIAN_DANCER - description = "You lose all acid-based abilities and a small amount of your armor in exchange for increased movement speed, evasion, and unparalleled agility. This strain excels at rapid repositioning, bullet dodging, and phasing effortlessly through enemies and allies alike. Slashing enemies applies a red tag, altering how your tail abilities function. Tagged enemies cause Impale to strike twice and transform Tail Trip into a powerful knockdown instead of a brief stun. Your new Tail Stab adapts to your intent. When used in Disarm mode, it becomes a Blunt, armor-piercing strike. When enemies are brought close to death or slain by your claws, yellow tags spread to nearby foes. Slashing yellow-tagged enemies reduces the cooldown of your tail abilities, and using a tail ability on a yellow-tagged target grants no cooldown penalty." + description = "You lose all acid-based abilities and a small amount of your armor in exchange for increased movement speed, evasion, and unparalleled agility. This strain excels at rapid repositioning, bullet dodging, and phasing effortlessly through enemies and allies alike. Slashing enemies applies a red tag, altering how your tail abilities function. Tagged enemies cause Impale to strike twice and transform Tail Trip into a powerful knockdown instead of a brief stun. Your new Tail Stab adapts to your intent. When used in Disarm mode, it becomes a Blunt, armor-piercing strike. When enemies are brought close to death, yellow tags will spread to nearby foes. Slashing yellow-tagged enemies reduces the cooldown of your tail abilities, and using a tail ability on a yellow-tagged target grants no cooldown penalty." flavor_description = "A performance fit for a Queen, this one will become my instrument of death." icon_state_prefix = "Dancer" @@ -34,7 +34,7 @@ prae.recalculate_everything() -#define DANCER_LAST_TAG_SPREAD_DURATION 7 SECONDS +#define DANCER_YELLOW_TAG_SPREAD_DURATION 7 SECONDS #define DANCER_YELLOW_TAG_SPREAD_CD 20 SECONDS #define DANCER_YELLOW_TAG_SPREAD_DIST 5 #define DANCER_TAG_SPREAD_COUNT 5 @@ -123,15 +123,9 @@ if(consumed_spread) spread_slash_triggered = TRUE - if(target_carbon.stat == UNCONSCIOUS) + if(target_carbon.health <= 0) try_spread_tags_from(target_carbon) -/datum/behavior_delegate/praetorian_dancer/on_kill_mob(mob/living/carbon/target_carbon) - if(!isxeno_human(target_carbon)) - return - - try_spread_tags_from(target_carbon) - /datum/behavior_delegate/praetorian_dancer/proc/try_spread_tags_from(mob/living/carbon/human/source) if(!ishuman(source)) return @@ -140,7 +134,7 @@ if(!origin) return - if(world.time < last_dancer_spread_time + DANCER_LAST_TAG_SPREAD_DURATION) + if(world.time < last_dancer_spread_time + DANCER_YELLOW_TAG_SPREAD_DURATION) return if(world.time < source.last_target_spread_time + DANCER_YELLOW_TAG_SPREAD_CD) @@ -149,7 +143,7 @@ var/spread_count = 0 - for(var/mob/living/carbon/human/human_target in view(DANCER_YELLOW_TAG_SPREAD_DIST, origin)) + for(var/mob/living/carbon/human/human_target in view(DANCER_YELLOW_TAG_SPREAD_DIST)) if(human_target == source) continue if(human_target.stat == DEAD || human_target.stat == UNCONSCIOUS) From 8fb1f5957fbe1c3df30e026cfa722da80afc412e Mon Sep 17 00:00:00 2001 From: Venuska1117 Date: Thu, 26 Mar 2026 19:39:24 +0100 Subject: [PATCH 38/40] Ver 1.1 - Updated strain description. - Added message warning for targets affected by yellow marks. --- code/datums/effects/xeno_strains/dancer_tag.dm | 16 +++++++++++++++- .../strains/castes/praetorian/dancer.dm | 5 ++++- 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/code/datums/effects/xeno_strains/dancer_tag.dm b/code/datums/effects/xeno_strains/dancer_tag.dm index 35c75544cfa8..38dc9fa7f7c7 100644 --- a/code/datums/effects/xeno_strains/dancer_tag.dm +++ b/code/datums/effects/xeno_strains/dancer_tag.dm @@ -3,11 +3,17 @@ duration = null flags = DEL_ON_DEATH | INF_DURATION + var/spread = FALSE + var/mob/living/carbon/xenomorph/source_xeno + /datum/effects/dancer_tag/New(atom/target_atom, mob/from = null, last_dmg_source = null, zone = "chest", ttl = 35) . = ..(target_atom, from, last_dmg_source, zone) addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(qdel), src), ttl) + if(istype(from, /mob/living/carbon/xenomorph)) + source_xeno = from + if(ishuman(target_atom)) var/mob/living/carbon/human/target_human = target_atom target_human.update_xeno_hostile_hud() @@ -31,10 +37,16 @@ /datum/effects/dancer_tag/Destroy() + var/mob/living/carbon/human/target_human = affected_atom + if(ishuman(affected_atom)) - var/mob/living/carbon/human/target_human = affected_atom target_human.update_xeno_hostile_hud() + if(spread) + to_chat(target_human, SPAN_XENODANGER("You calm down and get back to your senses.")) + to_chat(source_xeno, SPAN_XENODANGER("Our surging instincts fade away, we no longer feel compelled to hunt them.")) + spread = FALSE + return ..() /datum/effects/dancer_tag/normal @@ -46,3 +58,5 @@ /datum/effects/dancer_tag/spread/New(atom/target_atom, mob/from = null) . = ..(target_atom, from, null, "chest", 7 SECONDS) + to_chat(target_atom, SPAN_XENOHIGHDANGER("You feel fear washing down your spine... you could be next!")) + spread = TRUE diff --git a/code/modules/mob/living/carbon/xenomorph/strains/castes/praetorian/dancer.dm b/code/modules/mob/living/carbon/xenomorph/strains/castes/praetorian/dancer.dm index 1a1add381185..616418396fad 100644 --- a/code/modules/mob/living/carbon/xenomorph/strains/castes/praetorian/dancer.dm +++ b/code/modules/mob/living/carbon/xenomorph/strains/castes/praetorian/dancer.dm @@ -1,7 +1,7 @@ /datum/xeno_strain/dancer // My name is Cuban Pete, I'm the King of the Rumba Beat name = PRAETORIAN_DANCER - description = "You lose all acid-based abilities and a small amount of your armor in exchange for increased movement speed, evasion, and unparalleled agility. This strain excels at rapid repositioning, bullet dodging, and phasing effortlessly through enemies and allies alike. Slashing enemies applies a red tag, altering how your tail abilities function. Tagged enemies cause Impale to strike twice and transform Tail Trip into a powerful knockdown instead of a brief stun. Your new Tail Stab adapts to your intent. When used in Disarm mode, it becomes a Blunt, armor-piercing strike. When enemies are brought close to death, yellow tags will spread to nearby foes. Slashing yellow-tagged enemies reduces the cooldown of your tail abilities, and using a tail ability on a yellow-tagged target grants no cooldown penalty." + description = "You lose all acid-based abilities and a small amount of your armor in exchange for increased movement speed, evasion, and unparalleled agility. This strain excels at rapid repositioning, bullet dodging, and phasing effortlessly through enemies and allies alike. Slashing enemies applies a red tag, altering how your tail abilities function. Tagged enemies cause Impale to strike twice and transform Tail Trip into a powerful knockdown instead of a brief stun. Your new Tail Stab adapts to your intent. When used in Disarm mode, it becomes a Blunt, armor-piercing strike. When enemies are brought close to death, yellow tags will spread to nearby foes. Slashing yellow-tagged enemies reduces the cooldown of your tail abilities, and using a tail trip or impale ability on a yellow-tagged target grants no cooldown penalty." flavor_description = "A performance fit for a Queen, this one will become my instrument of death." icon_state_prefix = "Dancer" @@ -161,6 +161,9 @@ if(spread_count) last_dancer_spread_time = world.time + if(spread_count >= 0) + to_chat(bound_xeno, SPAN_XENOHIGHDANGER("Fear spreads among the prey, their weakness fuels your instincts to strike them down!")) + /datum/behavior_delegate/praetorian_dancer/proc/intent_detection() if(bound_xeno && bound_xeno.a_intent == INTENT_DISARM) tail_mode = "Blunt" From 965dfa98d0624b9660da34480ea08b1e0e966571 Mon Sep 17 00:00:00 2001 From: Venuska1117 Date: Fri, 27 Mar 2026 18:48:43 +0100 Subject: [PATCH 39/40] light fix --- code/datums/effects/xeno_strains/dancer_tag.dm | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/code/datums/effects/xeno_strains/dancer_tag.dm b/code/datums/effects/xeno_strains/dancer_tag.dm index 38dc9fa7f7c7..9d89d82a6abe 100644 --- a/code/datums/effects/xeno_strains/dancer_tag.dm +++ b/code/datums/effects/xeno_strains/dancer_tag.dm @@ -41,11 +41,10 @@ if(ishuman(affected_atom)) target_human.update_xeno_hostile_hud() - - if(spread) - to_chat(target_human, SPAN_XENODANGER("You calm down and get back to your senses.")) - to_chat(source_xeno, SPAN_XENODANGER("Our surging instincts fade away, we no longer feel compelled to hunt them.")) - spread = FALSE + if(spread) + to_chat(target_human, SPAN_XENODANGER("You calm down and get back to your senses.")) + to_chat(source_xeno, SPAN_XENODANGER("Our surging instincts fade away, we no longer feel compelled to hunt them.")) + spread = FALSE return ..() From d7445ece763336603a434083418c82e5c17a18b6 Mon Sep 17 00:00:00 2001 From: Venuska1117 Date: Fri, 27 Mar 2026 21:16:23 +0100 Subject: [PATCH 40/40] Move that back AAAAHH --- code/datums/effects/xeno_strains/dancer_tag.dm | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/code/datums/effects/xeno_strains/dancer_tag.dm b/code/datums/effects/xeno_strains/dancer_tag.dm index 9d89d82a6abe..6aeb13998745 100644 --- a/code/datums/effects/xeno_strains/dancer_tag.dm +++ b/code/datums/effects/xeno_strains/dancer_tag.dm @@ -37,9 +37,8 @@ /datum/effects/dancer_tag/Destroy() - var/mob/living/carbon/human/target_human = affected_atom - if(ishuman(affected_atom)) + var/mob/living/carbon/human/target_human = affected_atom target_human.update_xeno_hostile_hud() if(spread) to_chat(target_human, SPAN_XENODANGER("You calm down and get back to your senses."))