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

Base Merge #31

Merged
merged 8 commits into from
Apr 4, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions BossMod/Framework/IPCProvider.cs
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,12 @@ class IPCProvider : IDisposable

public IPCProvider(Autorotation autorotation)
{
// TODO: this really needs to be reconsidered, this exposes implementation detail
// for usecase description, see PR 330 - really AI itself should handle heal range
Register("ActiveModuleComponentBaseList", () => autorotation.Bossmods.ActiveModule?.Components.Select(c => c.GetType().BaseType?.Name).ToList() ?? default);
Register("ActiveModuleComponentList", () => autorotation.Bossmods.ActiveModule?.Components.Select(c => c.GetType().Name).ToList() ?? default);
Register("ActiveModuleHasComponent", (string name) => autorotation.Bossmods.ActiveModule?.Components.Any(c => c.GetType().Name == name || c.GetType().BaseType?.Name == name) ?? false);

Register("HasModule", (GameObject obj) => ModuleRegistry.FindByOID(obj.DataId) != null);
Register("IsMoving", () => ActionManagerEx.Instance!.InputOverride.IsMoving());
Register("ForbiddenZonesCount", () => autorotation.Hints.ForbiddenZones.Count);
Expand Down
2 changes: 1 addition & 1 deletion BossMod/Modules/Global/Quest/FF16Collab/InfernalShadow.cs
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ class SmolderingClaw : Components.SelfTargetedAOEs

class TailStrike : Components.SelfTargetedAOEs
{
public TailStrike() : base(ActionID.MakeSpell(AID.SmolderingClawReal), new AOEShapeCone(40, 75.Degrees())) { }
public TailStrike() : base(ActionID.MakeSpell(AID.TailStrikeReal), new AOEShapeCone(40, 75.Degrees())) { }
}

class FireRampageCleave : Components.GenericAOEs
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ public enum AID : uint
TailStrikeStartActionCombo = 35047, // Boss->self, 3,5s cast, single-target
TailStrikeStartActionCombo2 = 35049, // Helper->self, 0,6s cast, range 40 150-degree cone
TailStrikeStartActionCombo3 = 35929, // Helper->self, 4,1s cast, range 40 150-degree cone
TailStrike = 35048, // Helper->self, 4,5s cast, range 40 150-degree cone
TailStrikeReal = 35048, // Helper->self, 4,5s cast, range 40 150-degree cone

PyrosaultVisual = 35053, // Boss->location, 4,0s cast, single-target
PyrosaultReal = 35054, // Helper->location, 5,0s cast, range 40 circle, damage fall off AOE, seems to be fine after about range 10
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ public InfernalShadowStates(BossModule module) : base(module)
.ActivateOnEnter<Incinerate>()
.ActivateOnEnter<SpreadingFire>()
.ActivateOnEnter<SmolderingClaw>()
.ActivateOnEnter<TailStrike>()
.ActivateOnEnter<CrimsonRush>()
.ActivateOnEnter<Fireball>()
.ActivateOnEnter<CrimsonStreak>()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -230,16 +230,11 @@ public EntrapmentNormal() : base(_allowedPatterns) { }

class EntrapmentInescapable : Entrapment
{
// TODO: don't think these patterns are actually correct...
private readonly static Pattern[] _allowedPatterns = [
new() { Normal = BuildMask(3, 4, 5, 8, 20, 25, 38, 43, 46, 49, 52), Toad = BuildMask(10, 50, 54), Ice = BuildMask(40), Mini = BuildMask(29) },
//new() { Normal = BuildMask(3, 8, 20, 25, 38, 43, 46, 49, 52), Toad = BuildMask(10, 50, 53), Ice = BuildMask(40), Mini = BuildMask(29) },
new() { Normal = BuildMask(2, 5, 8, 11, 14, 16, 25, 29, 46, 49, 51), Toad = BuildMask(0, 4, 44), Ice = BuildMask(50), Mini = BuildMask(34) },
//new() { Normal = BuildMask(2, 8, 11, 16, 25, 29, 38, 46), Toad = BuildMask(0, 4, 44), Ice = BuildMask(49), Mini = BuildMask(34) },
new() { Normal = BuildMask(5, 8, 11, 16, 18, 22, 24, 29, 43, 49, 53), Toad = BuildMask(6, 33, 38), Ice = BuildMask(4), Mini = BuildMask(48) },
//new() { Normal = BuildMask(5, 8, 11, 16, 18, 22, 24, 29, 43, 49, 53), Toad = BuildMask(6, 33, 38), Ice = BuildMask(4), Mini = BuildMask(48) },
new() { Normal = BuildMask(5, 6, 8, 11, 25, 30, 32, 38, 43, 46, 50), Toad = BuildMask(16, 21, 48), Ice = BuildMask(36), Mini = BuildMask(1) },
//new() { Normal = BuildMask(5, 8, 11, 25, 30, 32, 38, 43, 50), Toad = BuildMask(16, 21, 48), Ice = BuildMask(36), Mini = BuildMask(1) },
new() { Normal = BuildMask(2, 5, 8, 11, 14, 16, 25, 29, 46, 49, 51), Toad = BuildMask( 0, 4, 44), Ice = BuildMask(50), Mini = BuildMask(34) },
new() { Normal = BuildMask(5, 8, 11, 16, 18, 22, 24, 29, 43, 49, 53), Toad = BuildMask( 6, 33, 38), Ice = BuildMask( 4), Mini = BuildMask(48) },
new() { Normal = BuildMask(5, 8, 11, 25, 30, 32, 38, 43, 49, 50, 54), Toad = BuildMask(16, 21, 48), Ice = BuildMask(36), Mini = BuildMask( 1) },
];

public EntrapmentInescapable() : base(_allowedPatterns) { }
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,8 @@ private void Phase2(uint id)
P2BloodAndBone(id + 0x30000, 4.2f);
P2GunTurret(id + 0x40000, 10.2f);
P2DoubleGambit(id + 0x50000, 10.3f);
// TODO: raidwides -> tankbusters -> 4th battery -> raidwides -> tankbusters -> enrage
P2BloodAndBone(id + 0x60000, 5.7f);
// TODO: tankbusters -> 4th battery -> raidwides -> tankbusters -> enrage
SimpleState(id + 0xFF0000, 100, "???");
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -61,13 +61,12 @@ private void ForkSwordBowStaff(uint id)

private void ForkStaffBowSword(uint id)
{
// TODO: no idea about timings here
Staff1(id, 8);
Bow1(id + 0x100000, 8);
Sword1(id + 0x200000, 8);
Staff2(id + 0x300000, 8);
Bow2(id + 0x400000, 8);
Sword2(id + 0x500000, 8);
Staff1(id, 5.3f);
Bow1(id + 0x100000, 8.7f);
Sword1(id + 0x200000, 10.4f);
Staff2(id + 0x300000, 7.4f);
Bow2(id + 0x400000, 9.1f);
Sword2(id + 0x500000, 7.9f);
Enrage(id + 0x600000, 16); // TODO: timing
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ public override void OnEventCast(BossModule module, Actor caster, ActorCastEvent
switch ((AID)spell.Action.ID)
{
case AID.LotsCastBigShort:
//case AID.LotsCastSmallShort:
case AID.LotsCastSmallShort:
AdvanceState(State.ShortExplosionsDone);
break;
case AID.LotsCastLong:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -96,6 +96,8 @@ public enum AID : uint
AboveBoard = 23051, // QueensWarrior->self, 6.0s cast, range 60 circle, visual (throw up)
AboveBoardExtra = 23438, // Helper->self, 6.0s cast, range 60 circle, visual (???)
LotsCastBigShort = 23433, // AetherialBurst->location, no cast, range 10 circle
LotsCastSmallShort = 23053, // AetherialBolt->location, no cast, range 10 circle
LotsCastBigLong = 23052, // AetherialBurst->location, no cast, range 10 circle visual
LotsCastSmallLong = 23432, // AetherialBolt->location, no cast, range 10 circle visual
LotsCastLong = 23478, // Helper->location, 1.2s cast, range 10 circle

Expand Down
5 changes: 4 additions & 1 deletion BossMod/Replay/ReplayUtils.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,10 @@ public static class ReplayUtils
{
public static string ParticipantString(Replay.Participant? p, DateTime t)
{
return p != null ? $"{p.Type} {p.InstanceID:X} ({p.OID:X}) '{p.NameAt(t)}'" : "<none>";
if (p == null)
return "<none>";
var name = p.NameAt(t);
return $"{p.Type} {p.InstanceID:X} ({p.OID:X}/{name.id}) '{name.name}'";
}

public static string ParticipantPosRotString(Replay.Participant? p, DateTime t)
Expand Down