Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
51 commits
Select commit Hold shift + click to select a range
36813a1
Dancer Buffs.
May 12, 2025
ce83544
Afterimages code for Dancer Dodge.
May 13, 2025
0e64627
Merge branch 'master' into dancer-rework
Venuska1117 May 13, 2025
b8f2371
Increased Dancer Evasion, this need TM bad.
May 13, 2025
25cc2f0
Merge branch 'master' into dancer-rework
Venuska1117 May 15, 2025
cba207d
Add Dodge mechanic.
May 19, 2025
d7400b5
Merge branch 'dancer-rework' of https://github.com/Venuska1117/cmss13…
May 19, 2025
e0ecd15
Removes unused code.
May 19, 2025
f4ef3a3
Changed numbers of dodge chances.
May 20, 2025
ad27bac
Description change and bulled dodge adjustement.
Jun 18, 2025
b379654
dodge_chance now respects rockets/sniper bullets.
Jun 28, 2025
123e96d
vwv
Jul 11, 2025
69ba878
Merge branch 'master' of https://github.com/Venuska1117/cmss13 into d…
Dec 9, 2025
a9d6335
Making dancer capable of capturing targets.
Dec 9, 2025
3a1693e
Merge branch 'master' into dancer-rework
Venuska1117 Jan 11, 2026
5bd78a5
changes requested
Jan 23, 2026
94f514f
requested changes p.2
Jan 23, 2026
5cdea03
forgot about that
Jan 23, 2026
3dccd0c
Requested changes
Jan 25, 2026
ad2a216
Amend
MistChristmas Jan 25, 2026
ce15d24
fixing small issues, oops
Jan 25, 2026
aa5b4d0
Merge branch 'dancer-rework' of https://github.com/Venuska1117/cmss13…
Jan 25, 2026
5e7f861
New changes, version 0.3.
Jan 26, 2026
77dbd1a
changed name
Jan 26, 2026
9486fbd
changes v0.4
Jan 27, 2026
e4e8ecd
version 0.5
Jan 28, 2026
e3c611a
Merge branch 'master' into dancer-rework
Venuska1117 Jan 28, 2026
3354eef
Changed is to our in tail message.
Jan 28, 2026
f0a6e9c
Merge branch 'dancer-rework' of https://github.com/Venuska1117/cmss13…
Jan 28, 2026
6b8dd13
version 0.666 (thwomper request)
Jan 30, 2026
d91b271
patch for 0.666
Jan 30, 2026
e644888
another fix for 0.666
Jan 30, 2026
dc3f96f
version 0.7 (drathek dodge_chance request)
Feb 1, 2026
849a48d
version 0.8 changes:
Feb 1, 2026
c98a704
forgot
Feb 1, 2026
e1dadfd
typo
Feb 1, 2026
cb1547f
increased from 5 -> 7 to be safe
Feb 1, 2026
fd5dfca
version 0.85 (fix patch)
Feb 3, 2026
efbf486
updates dancer description for 0.85
Feb 3, 2026
95aed22
bubble not bursting, thanks mist
Feb 3, 2026
a980766
Merge branch 'master' of https://github.com/Venuska1117/cmss13 into d…
Feb 22, 2026
13438ac
Small Improvements:
Feb 23, 2026
c345fa8
Merge branches 'dancer-rework' and 'master' of https://github.com/Ven…
Feb 26, 2026
411d84f
Fix Yellow Tags Spreading
Mar 1, 2026
5b888ba
forgot to remove unused list from fix
Mar 1, 2026
e9f2246
Requested Mist Changes:
Mar 5, 2026
a907fbf
Merge branch 'master' of https://github.com/Venuska1117/cmss13 into d…
Mar 15, 2026
38e2a92
version 1.0
Mar 21, 2026
8fb1f59
Ver 1.1
Mar 26, 2026
965dfa9
light fix
Mar 27, 2026
d7445ec
Move that back AAAAHH
Mar 27, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions code/__DEFINES/mob_hud.dm
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@
#define XENO_EXECUTE "29" // Execute thershold, vampire
#define NEW_PLAYER_HUD "30" //Makes it easy to see new players.
#define SPYCAM_HUD "31" //Remote control spy cameras.
#define XENO_HOSTILE_TAG_SPREAD "32" // dancer prae yellow 'tag'

//data HUD (medhud, sechud) defines
#define MOB_HUD_SECURITY_BASIC 1
Expand Down
3 changes: 3 additions & 0 deletions code/__DEFINES/xeno.dm
Original file line number Diff line number Diff line change
Expand Up @@ -744,6 +744,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

Expand Down
49 changes: 34 additions & 15 deletions code/datums/effects/xeno_strains/dancer_tag.dm
Original file line number Diff line number Diff line change
Expand Up @@ -3,19 +3,24 @@
duration = null
flags = DEL_ON_DEATH | INF_DURATION

var/spread = FALSE
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)
/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(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()

/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 ..()

Expand All @@ -24,18 +29,32 @@
. = ..()

// 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()
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
effect_name = "dancer tag normal"

/datum/effects/dancer_tag/spread
effect_name = "dancer tag spread"

/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
20 changes: 16 additions & 4 deletions code/datums/mob_hud.dm
Original file line number Diff line number Diff line change
Expand Up @@ -204,7 +204,7 @@ GLOBAL_LIST_INIT_TYPED(huds, /datum/mob_hud, flatten_numeric_alist(alist(
/datum/mob_hud/xeno/xeno_hive_tutorial

/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)
Expand Down Expand Up @@ -903,16 +903,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
Expand All @@ -936,14 +939,23 @@ 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/normal_tag in effects_list)
if(!QDELETED(normal_tag))
tag_found = TRUE
break

if (tag_found)
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)
freeze_holder.overlays += image('icons/mob/hud/hud.dmi', src, "xeno_freeze")
Expand Down
1 change: 1 addition & 0 deletions code/modules/client/preferences_toggles.dm
Original file line number Diff line number Diff line change
Expand Up @@ -771,6 +771,7 @@ CLIENT_VERB(toggle_minimap_ceiling_protection)
"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,
"Hunter HUD" = MOB_HUD_HUNTER,
"Faction UPP HUD" = MOB_HUD_FACTION_UPP,
"Faction Wey-Yu HUD" = MOB_HUD_FACTION_WY,
Expand Down
3 changes: 3 additions & 0 deletions code/modules/mob/dead/observer/observer.dm
Original file line number Diff line number Diff line change
Expand Up @@ -407,6 +407,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("Hunter HUD")
the_hud = GLOB.huds[MOB_HUD_HUNTER]
the_hud.add_hud_to(src, src)
Expand Down
5 changes: 4 additions & 1 deletion code/modules/mob/living/carbon/human/human_defines.dm
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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

Expand Down
9 changes: 8 additions & 1 deletion code/modules/mob/living/carbon/xenomorph/Xenomorph.dm
Original file line number Diff line number Diff line change
Expand Up @@ -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, SPECIAL_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, SPECIAL_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
Expand All @@ -69,6 +69,13 @@
var/static/list/walking_state_cache = list()
var/has_walking_icon_state = FALSE

/// 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_threshold = 0

//////////////////////////////////////////////////////////////////
//
// Core Stats
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -167,6 +167,12 @@

////////// Dancer Abilities

/datum/action/xeno_action/activable/tail_stab/harpoon_tail
name = "Tail Lance"
action_icon_state = "tail_harpoon"
action_type = XENO_ACTION_CLICK
ability_primacy = XENO_TAIL_STAB

/datum/action/xeno_action/activable/prae_impale
name = "Impale"
action_icon_state = "prae_impale"
Expand All @@ -175,21 +181,22 @@
action_type = XENO_ACTION_CLICK
xeno_cooldown = 13 SECONDS
plasma_cost = 80
var/range = 2

var/impale_click_miss_cooldown = 1.5 SECONDS
var/impale_click_miss_cooldown = 0.7 SECONDS

/datum/action/xeno_action/onclick/prae_dodge
name = "Dodge"
action_icon_state = "prae_dodge"
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 = 70
var/duration = DANCER_DODGE_TIME
var/dodge_timer = TIMER_ID_NULL
var/speed_buff_amount = 0.5
var/afterimage_interval = 1 DECISECONDS

/datum/action/xeno_action/activable/prae_tail_trip
name = "Tail Trip"
Expand All @@ -200,7 +207,7 @@
xeno_cooldown = 13 SECONDS
plasma_cost = 30

var/tail_click_miss_cooldown = 1.5 SECONDS
var/tail_click_miss_cooldown = 0.7 SECONDS

// Config
var/range = 2
Expand Down
Loading
Loading