Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Tier 4 Caste: Dragon #17230

Open
wants to merge 154 commits into
base: master
Choose a base branch
from
Open

Tier 4 Caste: Dragon #17230

wants to merge 154 commits into from

Conversation

Runian
Copy link
Contributor

@Runian Runian commented Feb 26, 2025

About The Pull Request

Generally follows https://hackmd.io/@wlLEbadtQoCyE4iytTkonw/S10wubC1A.
Sprites are a tad shit and code is kind of slop, but it's ready for review (probably)!

A new tier 4 caste, Dragon.
It looks like this:
slop

They require 13 xenos to exist in order to evolve to it and are last in line to be hive ruler.
They have armor of: 75 melee, 75 bullet, 75 energy, 60 bomb, 75 bio, 200 fire (immunity), and 75 acid.
They take 40% less sunder.
They do not emit any pheromones.
They do not regenerate plasma naturally.
They get a special-looking slash effect.
They have 850 health, 500 plasma (but start at 0 plasma), and move at -0.5 speed.
They are immune to stuns, staggers, slows, and knockbacks of any kind.
They cannot be affected by specific xeno abilities that heal or negate damage:

  • Drone's Acidic Salve & Essence Link
  • Hivelord's Healing Infusion
  • Shrike's Psychic Cure
  • Hivemind's & Queen's Heal
  • Gorger's Transfusion, Oppose, & Psychic Link

Plasma is colored yellow and may be referred as "armor" because that's what it is now.
Any damage that they take, after adjusted for armor, is reduced by half as long they have plasma. Each point of damage takes away 5 plasma until they run out.

They have various abilities which they cannot be shuffled nor perform slash attacks during any windups:
Backhand

  • Cooldown of 10s
  • Telegraphs a 2x3 area in front of them for 1.2s.
  • Humans that are in the area take 60 brute damage (against melee armor) and does a 2-tile knockback.
  • Mechas take 3x damage while APCs takes 1/3x damage for each tile.
  • All other objects take 2x damage.
  • Restores 100 plasma on successfully hitting anything.

If there is a grabbed human, windup is 3s and will do something else:

  • Grabbed human will take 150 brute damage (against melee armor).
  • Restores 250 plasma on completion.

Fly

  • Cooldown of 240s.
  • While grounded, they can begin to fly which takes a windup of 5s in which they cannot cancel out of it until they're done or die.
  • While in the air, they can begin to land which takes 3s and telegraphs a 5x5 area where they will land.
  • They can choose to land anywhere on weeds or within line of sight of xenomorphs.
  • Humans that are in the area take 100 brute damage (against melee armor).
  • Mechas take 3x damage while APCs takes 1/3x damage for each tile.
  • Everyone inside of any vehicle are stunned for 3s.
  • All other objects take 2x damage.

Tailswipe

  • Cooldown of 12s.
  • Telegraphs a 3x5 area in front of them for 1.2s.
  • Humans that are in the area take 55 brute damage (against melee armor) and are stunned for 2s.
  • Mechas take 3x damage while APCs takes 1/3x damage for each tile.
  • Everyone inside of any vehicle are stunned for 1.5s.
  • All other objects take 2x damage.
  • Restores 75 plasma on successfully hitting anything.

Dragon Breath

  • Cooldown of 30s.
  • After a windup of 1.2s, they can constantly spray a fire projectile and are slowed down for 10s.
  • They can end it early by deselecting the ability.
  • The fire projectile creates a short-lived melting fire at the target and applies its associated effects.
  • For each second it is active, they restore 30 plasma.

If there is a grabbed human, windup is 3s and will do something else:

  • Grabbed human will take 200 burn damage (against fire armor), gets 10 melting fire stacks, and a 5-tile knockback.
  • Restores 250 plasma on completion.

Wind current

  • Cooldown of 12s.
  • Telegraphs a 5x5 area in front of them for 1.2s.
  • Any smoke in the area are deleted.
  • Humans that are in the area take 50 burn damage (against melee armor) and a 4-tile knockback.
  • Mechas take 3x damage while APCs takes 1/3x damage for each tile.
  • All other objects take 2x damage.
  • Restores 200 plasma on successfully hitting anything.

Grab

  • Cooldown of 20s.
  • Telegraphs a 2x5 area in front of them for 1.2s.
  • The closest human in the area is considered grabbed and cannot move on their volition.
  • The grabbed human is passively pulled by the Dragon as they move around (along with the pull slowdown).
  • If the pull is stopped in any way, the grab ends and the human can move on their own again.
  • Pull is automatically ended if they take 300 damage (after plasma damage reduction).
  • Restores 250 plasma on successful grab.

Psychic Channel

  • A container for sub-abilities which can be accessed via alternative-fire (aka right-click).
  • No cooldown for channeling, but sub-abilities have their own cooldown.
  • After a windup of 2s, they glow purple (like Warlock) and are slowed down until they decide to stop channeling.
  • Channeling is stopped when they deselect the ability.
  • Miasma (sub-ability 1)
    1. Cooldown of 20s.
    1. Fires a projectile that affects a 5x5 area.
    1. Humans in the affected area take 50 burn damage (against bio armor) and are inflicted with Plague.
    1. Plague is a status effect that lasts for 8s which reduces all brute and burn healing by 50%.
    1. Restores 100 plasma on cast.
  • Lightning Shrike (sub-ability 2)
    1. Cooldown of 25s.
    1. Up to 15 humans that can see the Dragon within a 9x9 radius are affected.
    1. A plus-shaped marked area beneath affected humans that lasts for 1.5s.
    1. Humans in the marked area take 75 burn damage (against fire armor) and are inflicted with Electrified.
    1. Electrified is a status effect that lasts for 5s which deals 5 burn damage (against fire armor). It can be resisted and removed.
    1. Restores 100 plasma on cast.
  • Ice Storm (sub-ability 3)
    1. Cooldown of 30s.
    1. Releases 10 projectiles in a circle that will disappear after moving 10 tiles.
    1. Each projectile deals 10 brute, 10 burn damage (both against fire armor), and a brief slowdown.
    1. They begin homing into the closest human after moving 2 tiles.
    1. Restores 150 plasma on cast.

Unleash (Primordial)

  • Cooldown of 240s.
  • After a Behemoth roar-like windup, gain the following effects for 30s:
    1. Increase of 33% as a melee damage modifier.
    1. Movement speed increase.
    1. Cast times and delays from all other abilities are halved.
    1. All plasma gains from all other abilities are doubled.
  • After 30s, be slowed down almost to human walking speed for 5s.

Other changes:
CASTE_CAN_BE_QUEEN_HEALED has been renamed to CASTE_CAN_BE_HEALED_BY_OTHERS.
Having CASTE_CAN_BE_HEALED_BY_OTHERS allows xenos to be affected by abilities that heal or negate damage.
Queen now gets CASTE_CAN_BE_HEALED_BY_OTHERS (for obvious reason).
Ammo can now set the icon, alpha, and size of projectiles created from it.
Rearranged, commented, and changed some overlapping caste_flags.

Why It's Good For The Game

Dragon. :)

Changelog

🆑
add: A new tier 4 caste named Dragon. It is a combat-oriented caste.
add: A bunch of Dragon-related abilities.
add: New status effect: Plague. Reduces all brute and burn healing by 50%.
add: New status effect: Electrified. Causes moving to deal burn damage. Can be resisted to remove it.
soundadd: Various sounds involving dragon and its ability.
imageadd: Various sprites involving dragon and its abilities.
imageadd: Attack slash effect unique to Dragon.
code: Ammo can now set the icon, alpha, and size of projectiles created from it.
code: Humans taking brute/burn damage now send a signal for either.
code: Xeno caste_flags that gives full immunity to certain status effects & King's Psychic Summon.
/:cl:

@ilikesaying
Copy link

REJOICE! The ultimate Xeno who reaches over Weeds and reigns over the round and map. Her name is Dragon! We are now reaching the last page of TGMC history itself!

@github-actions github-actions bot added the Merge Conflict Pull request is in a conflicted state with base branch. label Feb 28, 2025
@github-actions github-actions bot removed the Merge Conflict Pull request is in a conflicted state with base branch. label Feb 28, 2025
Copy link
Member

@TiviPlus TiviPlus left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

First pass

Comment on lines 656 to 658
#define COMSIG_HUMAN_BRUTE_DAMAGE "human_brute_damage" // (amount, amount_mod)
#define COMSIG_HUMAN_BURN_DAMAGE "human_burn_damage" // (amount, amount_mod)

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

say where it gets sent too

Suggested change
#define COMSIG_HUMAN_BRUTE_DAMAGE "human_brute_damage" // (amount, amount_mod)
#define COMSIG_HUMAN_BURN_DAMAGE "human_burn_damage" // (amount, amount_mod)
#define COMSIG_HUMAN_BRUTE_DAMAGE "human_brute_damage" // (amount, amount_mod)
#define COMSIG_HUMAN_BURN_DAMAGE "human_burn_damage" // (amount, amount_mod)

Comment on lines 1304 to 1309
/datum/keybinding/xeno/backhand
name = "Backhand"
full_name = "Dragon: Backhand"
description = "After a windup, smack a group of marines in front of you away."
keybind_signal = COMSIG_XENOABILITY_BACKHAND

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

no defaults?

qdel(src)
return
debuff_owner = new_owner
. = ..()
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
. = ..()
return ..()

Comment on lines 1008 to 1009
debuff_owner = new_owner
. = ..()
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
debuff_owner = new_owner
. = ..()
debuff_owner = new_owner
return ..()

Comment on lines +113 to +115
SEND_SIGNAL(src, COMSIG_HUMAN_BURN_DAMAGE, amount, amount_mod)
for(var/i in amount_mod)
amount -= i
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

can we just use a byond pointer here (&amount)

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Not sure that works. I can't find any examples of it being used anywhere in the code and it gives me this error when I try:
image

addtimer(CALLBACK(floor_plane, TYPE_PROC_REF(/datum, remove_filter), "dragon_unleash"), resolve_time)
addtimer(CALLBACK(world_plane, TYPE_PROC_REF(/datum, remove_filter), "dragon_unleash"), resolve_time)
return
addtimer(CALLBACK(src, PROC_REF(end_roar_effects_for), affected_living), 0.1 SECONDS)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

why is this looping?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It is basically checking every tick if roar's effects should end.


/// Grants 33% additional slash/ability damage and a boost in movement speed that will wear off in 30 seconds.
/datum/action/ability/activable/xeno/unleash/proc/apply_buffs()
xeno_owner.xeno_melee_damage_modifier += 1/3 //This is 33% increase of all slash and ability damage.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

why not just 0.3

/datum/action/ability/activable/xeno/unleash/proc/start_withdrawal()
if(!is_active())
return
xeno_owner.visible_message(span_danger("\The [xeno_owner] looks tired."), span_danger("We feel tired."), null, 5)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

visuals?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

maybe like particles or something

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Deleted primo, so no need for that anymore.

Comment on lines 164 to 165
else if(isarmoredvehicle(impacted_obj))
handle_vehicle_effects(impacted_obj, damage / 3, should_stun = can_stun)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

see comments about hitboxes yet again

also maybe standardize this into a proccall since you seem to be doing the same thing so often

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

you also seperately check hotboxes so idk why have this actually???

Comment on lines 144 to 146
animate(impacted_living, pixel_z = impacted_living.pixel_z + 8, layer = max(MOB_JUMP_LAYER, impacted_living.layer), time = 0.25 SECONDS, easing = CIRCULAR_EASING|EASE_OUT, flags = ANIMATION_END_NOW|ANIMATION_PARALLEL)
animate(pixel_z = impacted_living.pixel_z - 8, layer = impacted_living.layer, time = 0.25 SECONDS, easing = CIRCULAR_EASING|EASE_IN)
impacted_living.animation_spin(0.5 SECONDS, 1, impacted_living.dir == WEST ? FALSE : TRUE, anim_flags = ANIMATION_PARALLEL)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

why touch layer

@Gregormack
Copy link

"Mechas take 3x damage while APCs takes 1/3x damage for each tile."

Wha.... why? Why mechs recieving more damage than vehicles?

@ju45he
Copy link

ju45he commented Feb 28, 2025

"Mechas take 3x damage while APCs takes 1/3x damage for each tile."

Wha.... why? Why mechs recieving more damage than vehicles?

Because vehicles are multitile and will take loads of damage from AoE attacks, and mechs are single tile but a bit tankier than a marine so mechs take a bit more damage.

@ApplePlastic
Copy link

ApplePlastic commented Mar 2, 2025

Because vehicles are multitile and will take loads of damage from AoE attacks, and mechs are single tile but a bit tankier than a marine so mechs take a bit more damage.

Crushers can instakill mechs by the way (because obviously it's genius to give Crushers 400 fucking damage)

Mechs can get shuffled by the way

Mechs can get tailflung by the w-

@Runian Runian requested a review from TiviPlus March 2, 2025 07:09
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Code Improvement Changes for adhering to code standards and codebase maintainability. Feature New interesting mechanics with new interesting bugs
Projects
None yet
Development

Successfully merging this pull request may close these issues.