Skip to content

Commit

Permalink
Merge pull request #487 from FFXIV-CombatReborn/mergeWIP
Browse files Browse the repository at this point in the history
some cleanup
  • Loading branch information
CarnifexOptimus authored Dec 6, 2024
2 parents 873320c + bcec222 commit 3f7a296
Show file tree
Hide file tree
Showing 43 changed files with 291 additions and 139 deletions.
4 changes: 1 addition & 3 deletions BossMod/BossModule/AIHints.cs
Original file line number Diff line number Diff line change
@@ -1,6 +1,4 @@
using BossMod.AST;

namespace BossMod;
namespace BossMod;

// information relevant for AI decision making process for a specific player
public sealed class AIHints
Expand Down
15 changes: 6 additions & 9 deletions BossMod/BossModule/ArenaBounds.cs
Original file line number Diff line number Diff line change
Expand Up @@ -128,7 +128,7 @@ public override WDir ClampToBounds(WDir offset)
private Pathfinding.Map BuildMap()
{
var map = new Pathfinding.Map(MapResolution, default, Radius, Radius);
map.BlockPixelsInsideConvex(p => -ShapeDistance.Circle(default, Radius)(p), 0, 0);
map.BlockPixelsInsideConvex(p => -ShapeDistance.Circle(default, Radius)(p), float.NegativeInfinity, 0);
return map;
}
}
Expand All @@ -149,7 +149,7 @@ private static float CalculateScaleFactor(Angle Rotation)
private Pathfinding.Map BuildMap()
{
var map = new Pathfinding.Map(MapResolution, default, HalfWidth, HalfHeight, Rotation);
map.BlockPixelsInsideConvex(p => -ShapeDistance.Rect(default, Rotation, HalfHeight, HalfHeight, HalfWidth)(p), 0, 0);
map.BlockPixelsInsideConvex(p => -ShapeDistance.Rect(default, Rotation, HalfHeight, HalfHeight, HalfWidth)(p), float.NegativeInfinity, 0);
return map;
}

Expand Down Expand Up @@ -284,7 +284,6 @@ private Pathfinding.Map BuildMap()
var width = map.Width;
var height = map.Height;
var resolution = map.Resolution;
var rotation = map.Rotation;
var center = map.Center;

var halfSample = MapResolution * Half - Epsilon; // tiny offset to account for floating point inaccuracies
Expand All @@ -302,9 +301,8 @@ private Pathfinding.Map BuildMap()
new(halfSample, halfSample)
];

var dir = rotation.ToDirection();
var dx = dir.OrthoL() * resolution;
var dy = dir * resolution;
var dx = new WDir(resolution, 0);
var dy = new WDir(0, resolution);
var startPos = center - (width * Half - Half) * dx - (height * Half - Half) * dy;

Parallel.For(0, height, y =>
Expand All @@ -319,16 +317,15 @@ private Pathfinding.Map BuildMap()
var allInside = true;
for (var i = 0; i < 9; ++i)
{
var samplePoint = relativeCenter + sampleOffsets[i];
if (!polygon.Contains(samplePoint))
if (!polygon.Contains(relativeCenter + sampleOffsets[i]))
{
allInside = false;
break;
}
}

ref var pixel = ref pixels[rowOffset + x];
pixel.MaxG = allInside ? float.MaxValue : 0;
pixel.MaxG = allInside ? float.MaxValue : float.NegativeInfinity;
}
});

Expand Down
5 changes: 4 additions & 1 deletion BossMod/Modules/Dawntrail/FATE/MicaTheMagicalMu.cs
Original file line number Diff line number Diff line change
Expand Up @@ -93,9 +93,12 @@ public override IEnumerable<AOEInstance> ActiveAOEs(int slot, Actor actor)
{
if (_safeZones.Count != 0)
for (var i = 0; i < 6; ++i)
{
var card = _cards[i];
if (i != _safeZones[0])
for (var j = 0; j < _cards[j].Count; ++j)
yield return new(_shape, _cards[i][j].Position, default, _activation);
yield return new(_shape, card[j].Position, default, _activation);
}
}

public override void OnCastStarted(Actor caster, ActorCastInfo spell)
Expand Down
4 changes: 3 additions & 1 deletion BossMod/Modules/Dawntrail/Quest/RoleQuests/AHunterTrue.cs
Original file line number Diff line number Diff line change
Expand Up @@ -159,9 +159,11 @@ public AHunterTrueStates(BossModule module) : base(module)
public class AHunterTrue(WorldState ws, Actor primary) : BossModule(ws, primary, arena.Center, arena)
{
private static readonly ArenaBoundsComplex arena = new([new Polygon(new(4, 248), 19.5f, 20)]);
private static readonly uint[] all = [(uint)OID.Boss, (uint)OID.Garula, (uint)OID.Dzo, (uint)OID.SteppeEagle, (uint)OID.BallOfNaught];

protected override void DrawEnemies(int pcSlot, Actor pc)
{
Arena.Actors(WorldState.Actors.Where(x => !x.IsAlly));
Arena.Actors(Enemies(all));
Arena.Actors(Enemies(OID.FilthyShackle), Colors.Object);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -179,9 +179,10 @@ public AnAntidoteForAnarchyStates(BossModule module) : base(module)
public class AnAntidoteForAnarchy(WorldState ws, Actor primary) : BossModule(ws, primary, arena.Center, arena)
{
private static readonly ArenaBoundsComplex arena = new([new Polygon(new(-5.65f, -84.73f), 14.5f, 20)]);
private static readonly uint[] all = [(uint)OID.Boss, (uint)OID.KAModelMammet, (uint)OID.KRModelMammet, (uint)OID.SuffocatingCloud, (uint)OID.PoisonCloud];

protected override void DrawEnemies(int pcSlot, Actor pc)
{
Arena.Actors(WorldState.Actors.Where(x => !x.IsAlly));
Arena.Actors(Enemies(all));
}
}
10 changes: 6 additions & 4 deletions BossMod/Modules/Dawntrail/Quest/RoleQuests/DreamsOfANewDay.cs
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,8 @@ public enum OID : uint
public enum AID : uint
{
AutoAttack1 = 870, // Boss/TentoawaTheWideEye->player/Boss/TentoawaTheWideEye, no cast, single-target
AutoAttack2 = 39796, // UnboundRavager4->4583, no cast, single-target
AutoAttack3 = 873, // UnboundRavager5->4583, no cast, single-target
AutoAttack2 = 39796, // UnboundRavager4->ZunduWarrior, no cast, single-target
AutoAttack3 = 873, // UnboundRavager5->ZunduWarrior, no cast, single-target
Teleport = 39054, // Boss->location, no cast, single-target
ZunduWarriorVisual = 39033, // Helper->self, no cast, single-target

Expand All @@ -48,7 +48,7 @@ public enum AID : uint
BloodyTrinity = 39032, // BossP2->players, 5.0s cast, single-target, tankbuster
AetherialExposure = 39041, // Helper->LoazenikweTheShutEye, 8.0s cast, range 6 circle, stack
PoisonDaggersVisual = 39045, // BossP2->self, 8.0s cast, single-target
PoisonDaggers = 39046, // Helper->player/TentoawaTheWideEye/LoazenikweTheShutEye, no cast, single-target
PoisonDaggers = 39046 // Helper->player/TentoawaTheWideEye/LoazenikweTheShutEye, no cast, single-target
}

class Bladestorm(BossModule module) : Components.SelfTargetedAOEs(module, ActionID.MakeSpell(AID.Bladestorm), new AOEShapeCone(20, 45.Degrees()));
Expand Down Expand Up @@ -157,10 +157,12 @@ class DreamsOfANewDayP2States(BossModule module) : DreamsOfANewDayStates(module)
public class DreamsOfANewDay(WorldState ws, Actor primary) : BossModule(ws, primary, arena.Center, arena)
{
private static readonly ArenaBoundsComplex arena = new([new Polygon(new(-757, -719), 19.5f, 20)]);
private static readonly uint[] all = [(uint)OID.Boss, (uint)OID.UnboundRaider1, (uint)OID.UnboundRaider2, (uint)OID.UnboundRaider3, (uint)OID.UnboundRaider4,
(uint)OID.UnboundRavager1, (uint)OID.UnboundRavager4, (uint)OID.UnboundRavager6, (uint)OID.UnboundRavager7, (uint)OID.UnboundRavager8, (uint)OID.BossP2];

protected override void DrawEnemies(int pcSlot, Actor pc)
{
Arena.Actors(WorldState.Actors.Where(x => !x.IsAlly));
Arena.Actors(Enemies(all));
}

protected override bool CheckPull() => Raid.WithoutSlot().Any(x => x.InCombat);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ public enum OID : uint
PerchOfTheApex = 0x428C, // R0.7
CultivatedMorbolSeedling = 0x4207, // R0.9
CultivatedMossFungus = 0x4208, // R1.32
Helper = 0x233C, // R0.5
Helper = 0x233C
}

public enum AID : uint
Expand All @@ -34,7 +34,7 @@ public enum AID : uint
PerchOfTheApexVisual1 = 37471, // PerchOfTheApex->self, no cast, single-target
PerchOfTheApexVisual2 = 37474, // PerchOfTheApex->self, no cast, single-target
ApexJudgment = 37472, // Helper->self, no cast, range 35 circle, raidwide
Visual = 37473, // Boss->self, no cast, single-target
Visual = 37473 // Boss->self, no cast, single-target
}

class FledglingFury(BossModule module) : Components.LocationTargetedAOEs(module, ActionID.MakeSpell(AID.FledglingFury), 4);
Expand Down Expand Up @@ -89,8 +89,11 @@ public class HeroesAndPretenders(WorldState ws, Actor primary) : BossModule(ws,
{
private static readonly ArenaBoundsComplex arena = new([new Polygon(new(676, 41), 14.5f, 20)]);

private static readonly uint[] all = [(uint)OID.Boss, (uint)OID.PerchOfTheApex, (uint)OID.CultivatedMossFungus, (uint)OID.CultivatedOchu1, (uint)OID.CultivatedOchu2,
(uint)OID.CultivatedMorbolSeedling];

protected override void DrawEnemies(int pcSlot, Actor pc)
{
Arena.Actors(WorldState.Actors.Where(x => !x.IsAlly));
Arena.Actors(Enemies(all));
}
}
13 changes: 9 additions & 4 deletions BossMod/Modules/Dawntrail/Quest/RoleQuests/TheMightiestShield.cs
Original file line number Diff line number Diff line change
Expand Up @@ -170,14 +170,16 @@ class HeavySurfaceMissiles(BossModule module) : Components.GenericAOEs(module)
public override void OnCastStarted(Actor caster, ActorCastInfo spell)
{
if (casts.Contains((AID)spell.Action.ID))
{
_aoes.Add(new(circle, caster.Position, spell.Rotation, Module.CastFinishAt(spell)));
if (_aoes.Count > 0)
_aoes.SortBy(x => x.Activation);
if (_aoes.Count > 1)
_aoes.SortBy(x => x.Activation);
}
}

public override void OnCastFinished(Actor caster, ActorCastInfo spell)
{
if (casts.Contains((AID)spell.Action.ID))
if (_aoes.Count != 0 && casts.Contains((AID)spell.Action.ID))
_aoes.RemoveAt(0);
}
}
Expand Down Expand Up @@ -222,10 +224,13 @@ public TheMightiestShieldStates(BossModule module) : base(module)
public class TheMightiestShield(WorldState ws, Actor primary) : BossModule(ws, primary, arena.Center, arena)
{
private static readonly ArenaBoundsComplex arena = new([new Polygon(new(-191, 72), 14.5f, 20)]);
private static readonly uint[] all = [(uint)OID.Boss, (uint)OID.CravenFollower1, (uint)OID.CravenFollower2, (uint)OID.CravenFollower3, (uint)OID.CravenFollower4,
(uint)OID.CravenFollower5, (uint)OID.CravenFollower6, (uint)OID.CravenFollower7, (uint)OID.CravenFollower8, (uint)OID.MagitekMissile, (uint)OID.UnyieldingMettle2,
(uint)OID.UnyieldingMettle3, (uint)OID.CrackedMettle1, (uint)OID.CrackedMettle2];

protected override void DrawEnemies(int pcSlot, Actor pc)
{
Arena.Actors(WorldState.Actors.Where(x => !x.IsAlly));
Arena.Actors(Enemies(all));
}

protected override bool CheckPull() => Raid.WithoutSlot().Any(x => x.InCombat);
Expand Down
2 changes: 1 addition & 1 deletion BossMod/Modules/RealmReborn/Raid/T01Caduceus/Platforms.cs
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ class Platforms(BossModule module) : BossComponent(module)
new(0, -HexaPlatformSide)
];

public static readonly Func<WPos, float>[] PlatformShapes = [.. Enumerable.Range(0, HexaPlatformCenters.Length + 1).Select(i => ShapeDistance.ConvexPolygon(PlatformPoly(i), true, Pathfinding.NavigationDecision.DefaultForbiddenZoneCushion))];
public static readonly Func<WPos, float>[] PlatformShapes = [.. Enumerable.Range(0, HexaPlatformCenters.Length + 1).Select(i => ShapeDistance.ConvexPolygon([.. PlatformPoly(i)], true, Pathfinding.NavigationDecision.DefaultForbiddenZoneCushion))];
public static readonly Func<WPos, float>[] HighEdgeShapes = [.. HighEdges.Select(e => HexaEdge(e.lower, e.upper)).Select(e => ShapeDistance.Rect(e.Item1, e.Item2, 0))];
public static readonly (WPos p, WDir d, float l)[] JumpEdgeSegments = [.. JumpEdges.Select(e => HexaEdge(e.lower, e.upper)).Select(e => (e.Item1, (e.Item2 - e.Item1).Normalized(), (e.Item2 - e.Item1).Length()))];

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,8 @@ public class D022Griaule(WorldState ws, Actor primary) : BossModule(ws, primary,

protected override void DrawEnemies(int pcSlot, Actor pc)
{
Arena.Actors(Enemies(OID.PaintedRoot).Concat([PrimaryActor]));
Arena.Actor(PrimaryActor);
Arena.Actors(Enemies(OID.PaintedRoot));
}

protected override void CalculateModuleAIHints(int slot, Actor actor, PartyRolesConfig.Assignment assignment, AIHints hints)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -179,6 +179,6 @@ protected override void CalculateModuleAIHints(int slot, Actor actor, PartyRoles
protected override void DrawEnemies(int pcSlot, Actor pc)
{
Arena.Actor(PrimaryActor);
Arena.Actor(Enemies(OID.LiarsLyre).FirstOrDefault(), Colors.Object);
Arena.Actors(Enemies(OID.LiarsLyre), Colors.Object);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@ public GoliathStates(BossModule module) : base(module)
.ActivateOnEnter<HeirloomScream>()
.ActivateOnEnter<PungentPirouette>()
.ActivateOnEnter<Pollen>()
.Raw.Update = () => Module.WorldState.Actors.Where(x => !x.IsAlly && x.IsTargetable).All(x => x.IsDeadOrDestroyed);
.Raw.Update = () => module.Enemies(Goliath.All).All(x => x.IsDeadOrDestroyed);
}
}

Expand Down Expand Up @@ -107,12 +107,15 @@ public class Goliath(WorldState ws, Actor primary) : BossModule(ws, primary, are
new(13.6f, -413.3f), new(12.62f, -414.9f), new(12.36f, -415.55f), new(12.47f, -416.28f), new(12.81f, -416.95f)];
private static readonly ArenaBoundsComplex arena = new([new PolygonCustom(vertices)]);

private static readonly uint[] bonusAdds = [(uint)OID.DungeonEgg, (uint)OID.DungeonGarlic, (uint)OID.DungeonTomato, (uint)OID.DungeonOnion,
(uint)OID.DungeonQueen, (uint)OID.KeeperOfKeys];
public static readonly uint[] All = [(uint)OID.Boss, (uint)OID.GoliathsJavelin, .. bonusAdds];

protected override void DrawEnemies(int pcSlot, Actor pc)
{
Arena.Actor(PrimaryActor);
Arena.Actors(Enemies(OID.GoliathsJavelin));
Arena.Actors(Enemies(OID.DungeonEgg).Concat(Enemies(OID.DungeonTomato)).Concat(Enemies(OID.DungeonQueen).Concat(Enemies(OID.DungeonGarlic)).Concat(Enemies(OID.DungeonOnion))
.Concat(Enemies(OID.KeeperOfKeys))), Colors.Vulnerable);
Arena.Actors(Enemies(bonusAdds), Colors.Vulnerable);
}

protected override void CalculateModuleAIHints(int slot, Actor actor, PartyRolesConfig.Assignment assignment, AIHints hints)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -157,17 +157,22 @@ public DaenOseTheAvariciousTyphonStates(BossModule module) : base(module)
.ActivateOnEnter<HeirloomScream>()
.ActivateOnEnter<PungentPirouette>()
.ActivateOnEnter<Pollen>()
.Raw.Update = () => Module.WorldState.Actors.Where(x => !x.IsAlly && x.IsTargetable).All(x => x.IsDeadOrDestroyed);
.Raw.Update = () => module.Enemies(DaenOseTheAvariciousTyphon.All).All(x => x.IsDeadOrDestroyed);
}
}

[ModuleInfo(BossModuleInfo.Maturity.Verified, Contributors = "The Combat Reborn Team (Malediktus)", GroupType = BossModuleInfo.GroupType.CFC, GroupID = 745, NameID = 9808)]
public class DaenOseTheAvariciousTyphon(WorldState ws, Actor primary) : THTemplate(ws, primary)
{
private static readonly uint[] bonusAdds = [(uint)OID.SecretEgg, (uint)OID.SecretGarlic, (uint)OID.SecretOnion, (uint)OID.SecretTomato,
(uint)OID.SecretQueen];
public static readonly uint[] All = [(uint)OID.Boss, (uint)OID.WrigglingMenace, .. bonusAdds];

protected override void DrawEnemies(int pcSlot, Actor pc)
{
Arena.Actors(Enemies(OID.WrigglingMenace).Concat([PrimaryActor]));
Arena.Actors(Enemies(OID.SecretEgg).Concat(Enemies(OID.SecretTomato)).Concat(Enemies(OID.SecretQueen)).Concat(Enemies(OID.SecretGarlic)).Concat(Enemies(OID.SecretOnion)), Colors.Vulnerable);
Arena.Actor(PrimaryActor);
Arena.Actors(Enemies(OID.WrigglingMenace));
Arena.Actors(Enemies(bonusAdds), Colors.Vulnerable);
}

protected override void CalculateModuleAIHints(int slot, Actor actor, PartyRolesConfig.Assignment assignment, AIHints hints)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,13 +38,15 @@ public FuathTroublemakerStates(BossModule module) : base(module)
.ActivateOnEnter<Spittle>()
.ActivateOnEnter<Hydrocannon>()
.ActivateOnEnter<FrigidNeedle>()
.Raw.Update = () => Module.WorldState.Actors.Where(x => !x.IsAlly && x.IsTargetable).All(x => x.IsDeadOrDestroyed);
.Raw.Update = () => module.Enemies(FuathTroublemaker.All).All(x => x.IsDeadOrDestroyed);
}
}

[ModuleInfo(BossModuleInfo.Maturity.Verified, Contributors = "Malediktus", GroupType = BossModuleInfo.GroupType.CFC, GroupID = 745, NameID = 9786)]
public class FuathTroublemaker(WorldState ws, Actor primary) : THTemplate(ws, primary)
{
public static readonly uint[] All = [(uint)OID.Boss, (uint)OID.FuathTrickster];

protected override void DrawEnemies(int pcSlot, Actor pc)
{
Arena.Actor(PrimaryActor);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -84,19 +84,22 @@ public GreedyPixieStates(BossModule module) : base(module)
.ActivateOnEnter<Spin>()
.ActivateOnEnter<Mash>()
.ActivateOnEnter<Scoop>()
.Raw.Update = () => Module.WorldState.Actors.Where(x => !x.IsAlly && x.IsTargetable).All(x => x.IsDeadOrDestroyed);
.Raw.Update = () => module.Enemies(GreedyPixie.All).All(x => x.IsDeadOrDestroyed);
}
}

[ModuleInfo(BossModuleInfo.Maturity.Verified, Contributors = "Malediktus", GroupType = BossModuleInfo.GroupType.CFC, GroupID = 745, NameID = 9797)]
public class GreedyPixie(WorldState ws, Actor primary) : THTemplate(ws, primary)
{
private static readonly uint[] bonusAdds = [(uint)OID.SecretEgg, (uint)OID.SecretGarlic, (uint)OID.SecretOnion, (uint)OID.SecretTomato,
(uint)OID.SecretQueen, (uint)OID.FuathTrickster, (uint)OID.KeeperOfKeys];
public static readonly uint[] All = [(uint)OID.Boss, (uint)OID.SecretMorpho, .. bonusAdds];

protected override void DrawEnemies(int pcSlot, Actor pc)
{
Arena.Actor(PrimaryActor);
Arena.Actors(Enemies(OID.SecretMorpho));
Arena.Actors(Enemies(OID.SecretEgg).Concat(Enemies(OID.SecretTomato)).Concat(Enemies(OID.SecretQueen)).Concat(Enemies(OID.SecretGarlic)).Concat(Enemies(OID.SecretOnion))
.Concat(Enemies(OID.KeeperOfKeys)).Concat(Enemies(OID.FuathTrickster)), Colors.Vulnerable);
Arena.Actors(Enemies(bonusAdds), Colors.Vulnerable);
}

protected override void CalculateModuleAIHints(int slot, Actor actor, PartyRolesConfig.Assignment assignment, AIHints hints)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ public enum OID : uint
SecretOnion = 0x301D, // R0.84, icon 1, needs to be killed in order from 1 to 5 for maximum rewards
SecretEgg = 0x301E, // R0.84, icon 2, needs to be killed in order from 1 to 5 for maximum rewards
KeeperOfKeys = 0x3034, // R3.23
FuathTrickster = 0x3033, // R0.75
Helper = 0x233C
}

Expand Down Expand Up @@ -107,18 +108,22 @@ public SecretBasketStates(BossModule module) : base(module)
.ActivateOnEnter<Spin>()
.ActivateOnEnter<Mash>()
.ActivateOnEnter<Scoop>()
.Raw.Update = () => Module.WorldState.Actors.Where(x => !x.IsAlly && x.IsTargetable).All(x => x.IsDeadOrDestroyed);
.Raw.Update = () => module.Enemies(SecretBasket.All).All(x => x.IsDeadOrDestroyed);
}
}

[ModuleInfo(BossModuleInfo.Maturity.Verified, Contributors = "Malediktus", GroupType = BossModuleInfo.GroupType.CFC, GroupID = 745, NameID = 9784)]
public class SecretBasket(WorldState ws, Actor primary) : THTemplate(ws, primary)
{
private static readonly uint[] bonusAdds = [(uint)OID.SecretEgg, (uint)OID.SecretGarlic, (uint)OID.SecretOnion, (uint)OID.SecretTomato,
(uint)OID.SecretQueen, (uint)OID.FuathTrickster, (uint)OID.KeeperOfKeys];
public static readonly uint[] All = [(uint)OID.Boss, (uint)OID.SecretEchivore, .. bonusAdds];

protected override void DrawEnemies(int pcSlot, Actor pc)
{
Arena.Actors(Enemies(OID.SecretEchivore).Concat([PrimaryActor]));
Arena.Actors(Enemies(OID.SecretEgg).Concat(Enemies(OID.SecretTomato)).Concat(Enemies(OID.SecretQueen)).Concat(Enemies(OID.SecretGarlic)).Concat(Enemies(OID.SecretOnion)
.Concat(Enemies(OID.KeeperOfKeys))), Colors.Vulnerable);
Arena.Actor(PrimaryActor);
Arena.Actors(Enemies(OID.SecretEchivore));
Arena.Actors(Enemies(bonusAdds), Colors.Vulnerable);
}

protected override void CalculateModuleAIHints(int slot, Actor actor, PartyRolesConfig.Assignment assignment, AIHints hints)
Expand All @@ -131,7 +136,7 @@ protected override void CalculateModuleAIHints(int slot, Actor actor, PartyRoles
OID.SecretOnion => 6,
OID.SecretEgg => 5,
OID.SecretGarlic => 4,
OID.SecretTomato => 3,
OID.SecretTomato or OID.FuathTrickster => 3,
OID.SecretQueen or OID.KeeperOfKeys => 2,
OID.SecretEchivore => 1,
_ => 0
Expand Down
Loading

0 comments on commit 3f7a296

Please sign in to comment.