Skip to content

Conversation

@Legends0
Copy link
Collaborator

@Legends0 Legends0 commented Oct 8, 2025

With the status effects now available I was able to get the job ids and level.

@github-actions github-actions bot added raidboss /ui/raidboss module needs-review Awaiting review labels Oct 8, 2025
@github-actions github-actions bot removed the needs-review Awaiting review label Oct 8, 2025
@github-actions github-actions bot added the needs-review Awaiting review label Oct 8, 2025
@github-actions github-actions bot removed the needs-review Awaiting review label Oct 11, 2025
@github-actions github-actions bot added the needs-review Awaiting review label Oct 11, 2025
@Legends0
Copy link
Collaborator Author

Legends0 commented Oct 11, 2025

Some other code I was considering adding were some utility functions similar to conditions.ts, but I may just pull from them as needed:

// Return if the player has a phantom job that can dispel
// Phantom Time Mage Lv 4: Dispel
/*
const phantomCanDispel = (
  phantomJob: string,
  phantomJobLevel: number,
): boolean => {
  if (phantomJob === phantomJobData.timeMage && phantomJobLevel >= 4)
    return true;
  return false;
};
*/

// Return if the player has a phantom job that can slow
// Phantom Time Mage Lv 1: Slowga
/*
const phantomCanSlow = (
  phantomJob: string,
  phantomJobLevel: number,
): boolean => {
  if (phantomJob === phantomJobData.timeMage && phantomJobLevel >= 1)
    return true;
  return false;
};
*/

// Return if the player has a phantom job that can cleanse
// Phantom Oracle Lv 2: Recuperation
/*
const phantomCanCleanse = (
  phantomJob: string,
  phantomJobLevel: number,
): boolean => {
  if (phantomJob === phantomJobData.oracle && phantomJobLevel >= 2)
    return true;
  return false;
};
*/

// Return if the player has a phantom job that can freeze time
// Phantom Bard Lv 2: Romeo's Ballad
/*
const phantomCanFreeze = (
  phantomJob: string,
  phantomJobLevel: number,
): boolean => {
  if (phantomJob === phantomJobData.bard && phantomJobLevel >= 2)
    return true;
  return false;
};
*/

// Return if the player has a phantom job that can suspend
// Phantom Geomancer Lv 4: Suspend
/*
const phantomCanSuspend = (
  phantomJob: string,
  phantomJobLevel: number,
): boolean => {
  if (phantomJob === phantomJobData.geomancer && phantomJobLevel >= 4)
    return true;
  return false;
};
*/

// Return if the player has a phantom job that can reduce tankbuster
// Phantom Knight Lv 4: Phantom Guard + Enhanced Phantom Guard (90%)
// Phantom Knight Lv 6: Pledge
// Phantom Oracle Lv 6: Invulnerability
/*
const phantomCaresAboutTankbuster = (
  phantomJob: string,
  phantomJobLevel: number,
): boolean => {
  if (phantomJob === phantomJobData.knight && phantomJobLevel >= 4)
    return true;
  if (phantomJob === phantomJobData.oracle && phantomJobLevel >= 6)
    return true;
  return false;
};
*/

// Return if the player has a phantom job that can block physical damage
// Phantom Samurai Lv 2: Shirahadori
// Phantom Oracle Lv 6: Invulnerability
/*
const phantomCanBlockPhysical = (
  phantomJob: string,
  phantomJobLevel: number,
): boolean => {
  if (phantomJob === phantomJobData.samurai && phantomJobLevel >= 2)
    return true;
  if (phantomJob === phantomJobData.oracle && phantomJobLevel >= 6)
    return true;
  return false;
};
*/

// Return if the player has a phantom job that can reduce aoe damage
// Phantom Bard Lv 3: Mighty March (+20% MaxHP)
// Phantom Ranger Lv 6: Occult Unicorn (40k AoE Shield)
// Phantom Geomance Lv 2 may be able to use Weather with Blessed Rain, Misty Mirage, Sunbath, or Cloudy Caress effects
/*
const phantomCaresAboutAOE = (
  phantomJob: string,
  phantomJobLevel: number,
): boolean => {
  if (phantomJob === phantomJobData.bard && phantomJobLevel >= 3)
    return true;
  if (phantomJob === phantomJobData.ranger && phantomJobLevel >= 6)
    return true;
  return false;
};
*/

@Legends0
Copy link
Collaborator Author

Well, that merge didn't do what I wanted it to do and ended up touching this other branch too.

@Legends0 Legends0 force-pushed the oc-phantom-job-tracker branch from fa9fc2e to d2b7284 Compare October 12, 2025 21:08
@Legends0
Copy link
Collaborator Author

I think that this doesn't carry over into Forked Tower. The data appears to be reset on entry or between boss seals.

@Legends0
Copy link
Collaborator Author

Legends0 commented Nov 3, 2025

I think that this doesn't carry over into Forked Tower. The data appears to be reset on entry or between boss seals.

Not sure if something changed recently, but I tried more FT and the code I wrote to mask for bard in FT appeared to be working without needing to change job.

// Return if the player has a phantom job that can freeze time
// Phantom Bard Lv 2: Romeo's Ballad
const phantomCanFreeze = (
  phantomJob: string,
  phantomJobLevel: number,
): boolean => {
  if (phantomJob === phantomJobData.bard && phantomJobLevel >= 2)
    return true;
  return false;
};
...
{
      id: 'Occult Crescent Pronged Passage Ancient Aero III',
      // 6 Tower Idols cast Ancient Aero III at different times
      // Must interrupt with Romeo's Ballad all 6 at same time
      // This will count until all 12 have started casting
      type: 'StartsUsing',
      netRegex: { source: 'Tower Idol', id: 'A61F', capture: true },
      condition: (data) => {
        if (
          data.phantomJob === undefined ||
          data.phantomJobLevel === undefined ||
          phantomCanFreeze(data.phantomJob, data.phantomJobLevel)
        )
          return true;
        return false;
      },
...

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

Labels

needs-review Awaiting review raidboss /ui/raidboss module

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants