Skip to content

Commit

Permalink
Chaotic & FRU stuff
Browse files Browse the repository at this point in the history
  • Loading branch information
awgil committed Jan 9, 2025
1 parent 573bd7a commit 95663ae
Show file tree
Hide file tree
Showing 10 changed files with 240 additions and 163 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ class LoomingChaos(BossModule module) : Components.CastCounter(module, ActionID.
// TODO: tankswap hints component for phase1
// TODO: phase 2 teleport zones?
// TODO: grim embrace / curse of darkness prevent turning
[ModuleInfo(BossModuleInfo.Maturity.Verified, GroupType = BossModuleInfo.GroupType.CFC, GroupID = 1010, NameID = 13624)]
[ModuleInfo(BossModuleInfo.Maturity.Verified, GroupType = BossModuleInfo.GroupType.CFC, GroupID = 1010, NameID = 13624, PlanLevel = 100)]
public class Ch01CloudOfDarkness(WorldState ws, Actor primary) : BossModule(ws, primary, DefaultCenter, InitialBounds)
{
public static readonly WPos DefaultCenter = new(100, 100);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ private void Fork1(uint id)
ComponentCondition<RazingVolleyParticleBeam>(id + 0x410000, 4, comp => comp.Casters.Count > 0);
Subphase1Variant2End(id + 0x410000, 8);

Cast(id + 0x500000, AID.Enrage, 8.1f, 12, "Enrage"); // TODO: check delay
Cast(id + 0x500000, AID.Enrage, 11.2f, 12, "Enrage");
}

private void Fork2(uint id)
Expand All @@ -46,7 +46,7 @@ private void Fork2(uint id)
ComponentCondition<RazingVolleyParticleBeam>(id + 0x410000, 4, comp => comp.Casters.Count > 0);
Subphase1Variant1End(id + 0x410000, 6.1f);

Cast(id + 0x500000, AID.Enrage, 8.1f, 12, "Enrage");
Cast(id + 0x500000, AID.Enrage, 8, 12, "Enrage");
}

private void Subphase1Variant1End(uint id, float delay)
Expand Down Expand Up @@ -76,18 +76,18 @@ private void Subphase2(uint id, float delay)
ThirdArtOfDarknessParticleConcentration(id + 0x20000, 4); // note: 3s after towers resolve, outer ring becomes normal
GhastlyGloom(id + 0x30000, 12.3f);
CurseOfDarkness(id + 0x40000, 8.3f);
EvilSeedChaosCondensedDiffusiveForceParticleBeam(id + 0x50000, 9.9f);
ActivePivotParticleBeam(id + 0x70000, 4.4f);
EvilSeedChaosCondensedDiffusiveForceParticleBeam(id + 0x50000, 10);
ActivePivotParticleBeam(id + 0x70000, 4.5f);
LoomingChaos(id + 0x80000, 6.2f);

CurseOfDarkness(id + 0x100000, 11.9f);
ParticleConcentrationPhaser(id + 0x110000, 4.2f);
DarkDominion(id + 0x120000, 1); // note: 1s after cast ends, outer ring becomes dangerous
FeintParticleBeamThirdActOfDarkness(id + 0x130000, 3.1f); // note: 2.5s after act of darkness resolves, outer ring becomes normal
GhastlyGloom(id + 0x140000, 11.4f);
PhaserChaosCondensedDiffusiveForceParticleBeam(id + 0x150000, 3.4f);
FloodOfDarknessAdds(id + 0x160000, 3);
FloodOfDarkness2(id + 0x170000, 8.5f);
PhaserChaosCondensedDiffusiveForceParticleBeam(id + 0x150000, 3.3f);
FloodOfDarknessAdds(id + 0x160000, 2.9f);
FloodOfDarkness2(id + 0x170000, 8.6f);
}

private void BladeOfDarkness(uint id, float delay)
Expand All @@ -110,9 +110,8 @@ private void DelugeOfDarkness1(uint id, float delay)
.ActivateOnEnter<GrimEmbraceAOE>();
CastMulti(id + 0x110, [AID.GrimEmbraceForward, AID.GrimEmbraceBackward], 3.1f, 5, "Debuffs 2")
.ActivateOnEnter<RazingVolleyParticleBeam>() // has weird overlaps, easier to keep active for the entirety of the phase
.ActivateOnEnter<EndeathVortex>() // we want to keep all these components active, so that they provide advance hints for delayed resolve
.ActivateOnEnter<EnaeroEndeath>() // we want to keep all these components active, so that they provide advance hints for delayed resolve
.ActivateOnEnter<EndeathAOE>() // death has extra resolve steps, which make writing states weird
.ActivateOnEnter<EnaeroKnockback>()
.ActivateOnEnter<EnaeroAOE>();
}

Expand All @@ -125,7 +124,7 @@ private void RazingVolleyParticleBeamStart(uint id, float delay)
private void DeathAero(uint id, float delay)
{
CastMulti(id, [AID.Death, AID.Aero], delay, 5.6f);
Condition(id + 0x10, 0.5f, () => Module.FindComponent<EndeathVortex>()?.NumCasts > 0 || Module.FindComponent<EnaeroKnockback>()?.NumCasts > 0, "Knockback/attract");
ComponentCondition<EnaeroEndeath>(id + 0x10, 0.5f, comp => comp.NumCasts > 0, "Knockback/attract");
}

private void EndeathEnaero(uint id, float delay)
Expand All @@ -136,7 +135,7 @@ private void EndeathEnaero(uint id, float delay)
private void BladeOfDarknessEndeathEnaeroResolve(uint id, float delay)
{
BladeOfDarkness(id, delay);
Condition(id + 0x100, 2.2f, () => Module.FindComponent<EndeathVortex>()?.NumCasts > 0 || Module.FindComponent<EnaeroKnockback>()?.NumCasts > 0, "Knockback/attract");
ComponentCondition<EnaeroEndeath>(id + 0x100, 2.2f, comp => comp.NumCasts > 0, "Knockback/attract");
}

private void RazingVolleyParticleBeamBladeOfDarknessEndeathEnaeroResolve(uint id, float delay)
Expand Down Expand Up @@ -204,9 +203,8 @@ private void FloodOfDarkness1(uint id, float delay)
.DeactivateOnExit<GrimEmbraceBait>()
.DeactivateOnExit<GrimEmbraceAOE>()
.DeactivateOnExit<RazingVolleyParticleBeam>()
.DeactivateOnExit<EndeathVortex>()
.DeactivateOnExit<EnaeroEndeath>()
.DeactivateOnExit<EndeathAOE>()
.DeactivateOnExit<EnaeroKnockback>()
.DeactivateOnExit<EnaeroAOE>()
.OnExit(() => Module.Arena.Bounds = Ch01CloudOfDarkness.InitialBounds)
.SetHint(StateMachine.StateHint.Raidwide);
Expand Down Expand Up @@ -300,21 +298,21 @@ private void EvilSeedChaosCondensedDiffusiveForceParticleBeam(uint id, float del
.ActivateOnEnter<DiffusiveForceParticleBeam>()
.DeactivateOnExit<EvilSeedVoidzone>()
.DeactivateOnExit<ThornyVine>();
Condition(id + 0x3010, 0.7f, () => Module.FindComponent<ChaosCondensedParticleBeam>()?.NumCasts > 0 || Module.FindComponent<DiffusiveForceParticleBeam>()?.Spreads.Count == 0, "Spread/line stacks")
Condition(id + 0x3010, 0.8f, () => Module.FindComponent<ChaosCondensedParticleBeam>()?.NumCasts > 0 || Module.FindComponent<DiffusiveForceParticleBeam>()?.NumCasts > 0, "Spread/line stacks")
.DeactivateOnExit<ChaosCondensedParticleBeam>()
.DeactivateOnExit<DiffusiveForceParticleBeam>(); // TODO: show second wave ...
}

private void ActivePivotParticleBeam(uint id, float delay)
{
CastStartMulti(id, [AID.ActivePivotParticleBeamCW, AID.ActivePivotParticleBeamCCW], delay);
ComponentCondition<Phaser>(id + 1, 0.9f, comp => comp.Casters.Count > 0)
ComponentCondition<Phaser>(id + 1, 0.8f, comp => comp.Casters.Count > 0)
.ActivateOnEnter<ActivePivotParticleBeam>()
.ActivateOnEnter<Phaser>();
ComponentCondition<Phaser>(id + 2, 8, comp => comp.NumCasts > 0, "Adds front/sides");
ComponentCondition<Phaser>(id + 3, 1.5f, comp => comp.NumCasts >= 6, "Adds sides/front")
.DeactivateOnExit<Phaser>();
CastEnd(id + 4, 3.6f);
CastEnd(id + 4, 3.7f);
ComponentCondition<ActivePivotParticleBeam>(id + 0x10, 0.6f, comp => comp.NumCasts > 0, "Rotation start");
ComponentCondition<ActivePivotParticleBeam>(id + 0x20, 6.6f, comp => comp.NumCasts > 4, "Rotation end")
.DeactivateOnExit<ActivePivotParticleBeam>();
Expand All @@ -336,10 +334,10 @@ private void LoomingChaos(uint id, float delay)
private void ParticleConcentrationPhaser(uint id, float delay)
{
CastStart(id, AID.ParticleConcentration, delay);
ComponentCondition<Phaser>(id + 1, 1.1f, comp => comp.Casters.Count > 0)
ComponentCondition<Phaser>(id + 1, 1, comp => comp.Casters.Count > 0)
.ActivateOnEnter<Phaser>();
CastEnd(id + 2, 4.9f);
ComponentCondition<Phaser>(id + 0x10, 3.1f, comp => comp.NumCasts > 0, "Adds front/sides")
CastEnd(id + 2, 5);
ComponentCondition<Phaser>(id + 0x10, 3, comp => comp.NumCasts > 0, "Adds front/sides")
.ActivateOnEnter<ParticleConcentration>(); // TODO: towers appear 1s after cast end
ComponentCondition<Phaser>(id + 0x11, 1.5f, comp => comp.NumCasts >= 6, "Adds sides/front")
.DeactivateOnExit<Phaser>();
Expand Down Expand Up @@ -372,14 +370,14 @@ private void PhaserChaosCondensedDiffusiveForceParticleBeam(uint id, float delay
{
ComponentCondition<Phaser>(id, delay, comp => comp.Casters.Count > 0)
.ActivateOnEnter<Phaser>();
CastStartMulti(id + 0x10, [AID.ChaosCondensedParticleBeam, AID.DiffusiveForceParticleBeam], 7.4f);
ComponentCondition<Phaser>(id + 0x11, 0.6f, comp => comp.NumCasts > 0, "Adds front/sides")
CastStartMulti(id + 0x10, [AID.ChaosCondensedParticleBeam, AID.DiffusiveForceParticleBeam], 7.5f);
ComponentCondition<Phaser>(id + 0x11, 0.5f, comp => comp.NumCasts > 0, "Adds front/sides")
.ActivateOnEnter<ChaosCondensedParticleBeam>()
.ActivateOnEnter<DiffusiveForceParticleBeam>();
ComponentCondition<Phaser>(id + 0x12, 1.5f, comp => comp.NumCasts >= 6, "Adds sides/front")
.DeactivateOnExit<Phaser>();
CastEnd(id + 0x13, 5.9f);
Condition(id + 0x20, 0.7f, () => Module.FindComponent<ChaosCondensedParticleBeam>()?.NumCasts > 0 || Module.FindComponent<DiffusiveForceParticleBeam>()?.Spreads.Count == 0, "Spread/line stacks")
CastEnd(id + 0x13, 6);
Condition(id + 0x20, 0.8f, () => Module.FindComponent<ChaosCondensedParticleBeam>()?.NumCasts > 0 || Module.FindComponent<DiffusiveForceParticleBeam>()?.NumCasts > 0, "Spread/line stacks")
.DeactivateOnExit<ChaosCondensedParticleBeam>()
.DeactivateOnExit<DiffusiveForceParticleBeam>(); // TODO: show second wave ...
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@
// TODO: show second wave for players not hit by first wave
class DiffusiveForceParticleBeam(BossModule module) : Components.UniformStackSpread(module, 0, 7)
{
public int NumCasts;

public override void OnCastStarted(Actor caster, ActorCastInfo spell)
{
if ((AID)spell.Action.ID == AID.DiffusiveForceParticleBeam)
Expand All @@ -16,6 +18,9 @@ public override void OnCastStarted(Actor caster, ActorCastInfo spell)
public override void OnEventCast(Actor caster, ActorCastEvent spell)
{
if ((AID)spell.Action.ID is AID.DiffusiveForceParticleBeamAOE1 or AID.DiffusiveForceParticleBeamAOE2)
Spreads.Clear();
{
++NumCasts;
Spreads.RemoveAll(s => s.Target.InstanceID == spell.MainTargetID);
}
}
}
115 changes: 0 additions & 115 deletions BossMod/Modules/Dawntrail/Chaotic/Ch01CloudOfDarkness/Enaero.cs

This file was deleted.

Loading

0 comments on commit 95663ae

Please sign in to comment.