Skip to content

Conversation

@sleepingkirby
Copy link
Contributor

I affirm:

  • I understand that if I do not agree to the following points by completing the checkboxes my PR will be ignored.
  • I understand I should leave resolving conversations to the LandSandBoat team so that reviewers won't miss what was said.
  • I have read and understood the Contributing Guide and the Code of Conduct.
  • I have tested my code and the things my code has changed since the last commit in the PR and will test after any later commits.

What does this pull request do?

Fills in some blue mage spells. Not all are perfect because neither blue gartr nor ffxiclopedia has all the info, but its close to the functionality.

Steps to test these changes

Logged into the game and used the spells on character or on mob

@Xaver-DaRed
Copy link
Contributor

  • Can you list your souces, if any?
  • Was any retail testing and/or data gathering made?
  • Can you comment in the code which parameters were "made up"?

@sleepingkirby
Copy link
Contributor Author

sleepingkirby commented Dec 28, 2025

@Xaver-DaRed

  • Can you list your souces, if any?
    I used the bg wiki for all the spells(ex. https://www.bg-wiki.com/ffxi/Wind_Breath). If there are any better sources, I'll be happy to go back and fix up the spell files.
  • Was any retail testing and/or data gathering made?
    Unfortunately no. I don't have access to the retail version at the time. I made these scripts more or less so blu is playable as a main job for my own purposes and as accurate as I can find via the info on the blue gartr wiki.
  • Can you comment in the code which parameters were "made up"?
    I've gone back and made comments in code as to which parts are lacking/need further implementation or "made up"/guesses.

Side note: I can't see to pass the automated checks. In particular fantod.lua. That code is pretty much a copy and paste of monk's boost so it's odd to me that it's not passing. The windows build in the check seems to fail but nothing I've added should affect that. If I did accidentally do something to fail the windows check and only the windows check(I'm on a linux machine), I'll be happy to go back and fix it if you can provide me with some direction as to how (without breaking the other compiles, of course).

Thank you.

Copy link
Contributor

@WinterSolstice8 WinterSolstice8 left a comment

Choose a reason for hiding this comment

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

Generally fine aside from some cross references and crit caps that aren't your current problem, but we should consider moving out Fantod to a different PR in case it can't function properly (removal on attacking spells)

params.numhits = 5
params.multiplier = 1.0
params.tp150 = 1.375
params.tp300 = 1.750 -- guessing as blue gartr wiki doesn't have this info
Copy link
Contributor

Choose a reason for hiding this comment

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

you can cite https://wiki.ffo.jp/html/24665.html for this one, it is correct to JP wiki
Doesn't list azure lore though

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Changed comments to cite ffo.jp.

-- Handle status effects.
local effectTable =
{
[1] = { xi.effect.PLAGUE, 9, 6, 40 + math.floor(caster:getTP() / 3000) },
Copy link
Contributor

Choose a reason for hiding this comment

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

Suggested change
[1] = { xi.effect.PLAGUE, 9, 6, 40 + math.floor(caster:getTP() / 3000) },
[1] = { xi.effect.PLAGUE, 10, 3, 40 + math.floor(caster:getTP() / 3000) },

Cite power as 5 from https://wiki.ffo.jp/html/22338.html
Plague works a bit funky, the MP down is intertwined with TP down and BG wiki doesn't really match. It's probably somewhat easy to check but for now JP wiki makes sense:

悪疫のTPスリップはTP100(=10%)/3sec、MPスリップはMP5/3sec

10/2 = 5 MP/tick, 10*10 = 100 TP/tick, see our Plague script

effectObject.onEffectGain = function(target, effect)
    target:addMod(xi.mod.REFRESH_DOWN, math.ceil(effect:getPower() / 2))
    target:addMod(xi.mod.REGAIN_DOWN, effect:getPower() * 10)
end

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Power changed. Reading through the JP wiki, I also noticed this (links removed):
[効果時間]は30秒~60秒のランダムであり

Effect time of 30 ~ 60 second is random.

So I'm going to change the duration from 40 + TP to 30 + math.random(0,30)

params.effect = xi.effect.SLEEP_II -- guessing it's sleep II as it blue gartr wiki says it doesn't overwrite itself or sleep II
params.power = 1
params.tick = 0
params.duration = 120
Copy link
Contributor

Choose a reason for hiding this comment

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

JP wiki says 効果時間は約90秒だが、同時に複数の敵を寝かせた場合、多少のばらつきがある。

The effect lasts approximately 90 seconds, though there is some variation when multiple enemies are put to sleep simultaneously.

https://wiki.ffo.jp/html/5502.html

I'm guessing there's some multi-target reduction going on here Worth leaving a comment that it may not be right.

BG wiki also mentions 90~120 seconds, so its probably that.

Copy link
Contributor

Choose a reason for hiding this comment

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

Adding to this one, the effect should be SLEEP_I

Copy link
Contributor Author

Choose a reason for hiding this comment

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

SLEEP_II changed to SLEEP_I. Comment left about the duration. I take it there's no way, when this spell is activated, for it to figure out how many mobs it'll effect. So laking that, I'm not changing the duration from 120.

Copy link
Contributor

Choose a reason for hiding this comment

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

"Whenever in doubt, balance content against players"

Since this is a player spell, change the duration to 90

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Noted. Updated duration to 90.

return 0
end

spellObject.onSpellCast = function(caster, target, spell)
Copy link
Contributor

@WinterSolstice8 WinterSolstice8 Jan 2, 2026

Choose a reason for hiding this comment

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

https://wiki.ffo.jp/html/21290.html

you should try to implement this per JP wiki - it looks quite a bit better than what i'd expect. Run it through deepl but the jist of it is

Applies a stacking effect to self. Can be stacked multiple times. Effect lasts 3 minutes. Each use increases Physical Attack by approximately +3% and Magic Attack by +2. Can stack up to 10 times, reaching a maximum of +30% Physical Attack and +20% Magic Attack. Stacking beyond this point yields no further increase.

3 ATTP per cast
2 MATT per cast

This one may need to be split into a separate PR, due to a potential problem of this not wearing off when it should (magic attacks probably cancel the boost, but i don't see if we're doing that properly)

Copy link
Contributor Author

Choose a reason for hiding this comment

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

I'll remove it for now.

params.azuretp = 1.25
params.duppercap = 75
params.str_wsc = 0.30
params.dex_wsc = 0.0
Copy link
Contributor

Choose a reason for hiding this comment

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

Suggested change
params.dex_wsc = 0.0
params.dex_wsc = 0.3

See https://www.bg-wiki.com/ffxi/Goblin_Rush , https://wiki.ffo.jp/html/9958.html

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Fixed. Thank you. Not sure how I missed that.

params.agi_wsc = 0.0
params.int_wsc = 0.0
params.mnd_wsc = 0.0
params.chr_wsc = 0.0
Copy link
Contributor

Choose a reason for hiding this comment

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

Suggested change
params.chr_wsc = 0.0
params.chr_wsc = 0.0
params.bonusacc = -100
params.critchance = 100 -- TODO: this should cap to 100%

JP wiki and BG wiki agree on these (at least as plainly written)

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Changed. Thank you.

params.scattr = xi.skillchainType.FRAGMENTATION
params.scattr2 = xi.skillchainType.TRANSFIXION
params.numhits = 1
params.multiplier = 2.25
Copy link
Contributor

Choose a reason for hiding this comment

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

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Changed to 2.5 to match ffo.

params.agi_wsc = 0.0
params.int_wsc = 0.0
params.mnd_wsc = 0.0
params.chr_wsc = 0.0
Copy link
Contributor

Choose a reason for hiding this comment

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

Suggested change
params.chr_wsc = 0.0
params.chr_wsc = 0.0
params.critchance = 30 -- Guessed, this probably scales with TP, BG wiki says 33% which likely includes base crit rate so we're reducing it a bit lower

Just guessed but... better than nothing.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Don't let perfect be the enemy of good, that's what I say. Added.

params.damageType = xi.damageType.FIRE
params.attribute = xi.mod.INT
params.multiplier = 2.0
params.tMultiplier = 2.75
Copy link
Contributor

Choose a reason for hiding this comment

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

JP wiki says this multiplier is 4.0... hmm...

https://wiki.ffo.jp/html/22468.html

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Going with JP wiki only because, from my vague memories, thermal pulse does do a lot of damage at high TP and the JP players, historically, have always been more accurate on these details. Changed.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Given @Xaver-DaRed 's reminder of
"Whenever in doubt, balance content against players"
I'll change the multiplier back to 2.75.

Copy link
Contributor

Choose a reason for hiding this comment

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

The BLU guide on FFXIAH has trustworthy testing data on spells that aligns with the JP Wiki page for Thermal Pulse.

Thermal Pulse - 2.0dINT, 40% VIT, fTP 4 [Blind: -25 for 0:30 ~ 1:00]
151MP, 70 seconds

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Noted. Changing multiplier back to 40.

@WinterSolstice8 WinterSolstice8 added the squash Reminder to squash commits before/on merge (you can do this, or maintainers will do this for you) label Jan 5, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

squash Reminder to squash commits before/on merge (you can do this, or maintainers will do this for you)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants