Skip to content

Add Module for Normal Everkeep#722

Open
gadeleon wants to merge 41 commits into
awgil:masterfrom
gadeleon:t03-everkeep
Open

Add Module for Normal Everkeep#722
gadeleon wants to merge 41 commits into
awgil:masterfrom
gadeleon:t03-everkeep

Conversation

@gadeleon
Copy link
Copy Markdown

(This is my first attempt at a module and should definitely be squashed if pulled.)

Adds support for Normal Everkeep for Duty Support.

Tested as:

  • GNB
  • WHM
  • BLM
  • BRD
  • SAM

Zero hits on all runs.

Open to feedback to make this better!

Gabriel Deleon added 30 commits April 17, 2026 12:27
Each 42AA Fang does 10 sprint segments (5 inward, 5 outward). The rect
AOE follows the fang's sprint path: from its current position to the
sprint endpoint (carried in the cast's TargetPos/LocXZ).

- Initial sprint (38183, instant): halfwidth 4 + back extension 3 so the
  four outer-perimeter rects tile the diamond flush at the corners.
- Subsequent sprints (37711, 0.7s): halfwidth 2.5 + front 1.5 + back 2
  so the four arms form a pinwheel without overlapping at corners.

Rects are tracked per fang InstanceID; a new cast replaces the previous
rect, and entries auto-expire shortly after each sprint would complete.
Dawn of an Age's raidwide collapses the platform to a 20x20 center square
for the Chasm of Vollok + Forged Track sequence; Actualize restores the
full 40x40 diamond when that sequence ends. Both casts fire twice per
fight, so the arena cycles small - normal - small - normal.

Mirrors the NormalBounds / SmallBounds pattern from Ex2ZoraalJa.
The P2 boss actor is destroyed and re-spawned (same OID, new InstanceID)
during the big arena transition. The old phase-2 end condition treated a
missing BossP2 as 'defeated' via ?? true on the null-conditional IsDead
check, which unloaded the module during the ~0.4s swap gap.

- BossP2() now queries dynamically for any non-destroyed actor with
  OID.BossP2, so the new instance is picked up automatically.
- Phase 2 only ends when a BossP2 is actually dead (HP = 0). A missing
  BossP2 keeps the phase running via ?? false.
After the Gateway/BladeWarp setup, Fangs at the outer intercardinal
platforms cast ForgedTrackPreview (37729, 11.6s, 0-hit telegraph).
Actual damage comes from separate instant-cast Fangs at inner positions
(37730), along lanes parallel to — but offset from — the preview lanes.

The perpendicular offset follows a rotation/Gateway-sign rule:
- NE-SW diagonal previews (rot -45° or +135°, dir.X * dir.Z < 0): damage
  lane offset by sign(Gateway) * 5 perpendicular-left.
- NW-SE diagonal previews (rot +45° or -135°): no offset, damage lane
  matches preview lane.

Origin is shifted 30 forward from the preview caster so the rect sits
inside the shrunken arena where the damage actually lands. Rect is
1-cell wide (halfwidth 2.5) by 4-cells long (20 forward) per the mech's
4-lane cross-arena layout.
Icon 376 appears on all 8 party members simultaneously as a ~5s warning,
then 8 helpers instant-cast Fire III (37752) one per target. Standard
SpreadFromIcon with 5-unit radius matches the per-player spread circle.
Duty's Edge fires 4 line-stack AOEs (37750) ~2.1s apart after the
target icon (35567) picks a player. My old code set GenericWildCharge's
Source on the target cast but never cleared it, so the rect rendering
persisted long after the mechanic resolved.

Track hit count per instance: increment on each AOE event, clear Source
once NumCasts >= 4 so the component stops rendering. Reset NumCasts on
each new target icon so the second Duty's Edge instance fires its own
4-count cleanly.
…na edge

Cast target positions sit at the back corner of each 5x5 grid cell,
so a centered 5x5 rect covered only half the expected cell. Changed
shape from AOEShapeRect(2.5, 2.5, 2.5) (centered) to AOEShapeRect(5, 2.5)
(5 forward + 0 back) — same size, but origin at the rect's back edge.
The SE-most rect now extends its outer corner to the arena's S diamond
tip.
@xanunderscore
Copy link
Copy Markdown
Collaborator

Will try to get this merged after I update the plugin for 7.5, which is blocked on a staging release of Dalamud. Thanks for the PR

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants