diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/CustomAbility.java b/src/main/java/kamkeel/npcs/controllers/data/ability/CustomAbility.java index 4795e7363..fd9d32d39 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/CustomAbility.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/CustomAbility.java @@ -405,19 +405,25 @@ public class CustomAbility extends Ability implements ICustomAbility { // ── Telegraph Controls (Effects tab) ───────────────────────── defs.add(FieldDef.section("ability.section.telegraph").tab("Effects")); defs.add(FieldDef.enumField("ability.telegraphShape", TelegraphType.class, - this::getTelegraphType, this::setTelegraphType).tab("Effects")); + this::getTelegraphType, this::setTelegraphType).tab("Effects") + .hover("ability.hover.telegraphShape")); defs.add(FieldDef.boolField("ability.showTelegraph", this::isShowTelegraph, this::setShowTelegraph) - .tab("Effects").visibleWhen(this::hasTelegraphShape)); + .tab("Effects").visibleWhen(this::hasTelegraphShape) + .hover("ability.hover.showTelegraph")); defs.add(FieldDef.colorSubGui("ability.windUpColor", this::getWindUpColor, this::setWindUpColor) - .tab("Effects").visibleWhen(this::isTelegraphVisible)); + .tab("Effects").visibleWhen(this::isTelegraphVisible) + .hover("ability.hover.windUpColor")); defs.add(FieldDef.colorSubGui("ability.activeColor", this::getActiveColor, this::setActiveColor) - .tab("Effects").visibleWhen(this::isTelegraphVisible)); + .tab("Effects").visibleWhen(this::isTelegraphVisible) + .hover("ability.hover.activeColor")); defs.add(FieldDef.floatField("ability.telegraphHeight", this::getTelegraphHeightOffset, this::setTelegraphHeightOffset) - .tab("Effects").visibleWhen(this::isTelegraphVisible)); + .tab("Effects").visibleWhen(this::isTelegraphVisible) + .hover("ability.hover.telegraphHeight")); // Telegraph active duration with sync toggle (mirrors windup sync pattern) defs.add(FieldDef.row( - FieldDef.intField("ability.telegraphActiveTicks", this::getTelegraphActiveTicks, this::setTelegraphActiveTicks).range(0, 6000), + FieldDef.intField("ability.telegraphActiveTicks", this::getTelegraphActiveTicks, this::setTelegraphActiveTicks).range(0, 6000) + .hover("ability.hover.telegraphActiveTicks"), FieldDef.boolField("ability.syncTelegraph", this::isSyncTelegraphWithDuration, this::setSyncTelegraphWithDuration) .hover("ability.hover.syncTelegraph") ).tab("Effects").visibleWhen(() -> isTelegraphVisible() && !isSyncTelegraphWithDuration())); @@ -429,15 +435,20 @@ public class CustomAbility extends Ability implements ICustomAbility { // Shape-specific dimension fields defs.add(FieldDef.floatField("ability.telegraphRadius", this::getTRadius, this::setTRadius) - .tab("Effects").visibleWhen(() -> isTelegraphVisible() && needsRadius())); + .tab("Effects").visibleWhen(() -> isTelegraphVisible() && needsRadius()) + .hover("ability.hover.telegraphRadius")); defs.add(FieldDef.floatField("ability.telegraphInnerRadius", this::getTInnerRadius, this::setTInnerRadius) - .tab("Effects").visibleWhen(() -> isTelegraphVisible() && needsInnerRadius())); + .tab("Effects").visibleWhen(() -> isTelegraphVisible() && needsInnerRadius()) + .hover("ability.hover.telegraphInnerRadius")); defs.add(FieldDef.floatField("ability.telegraphLength", this::getTLength, this::setTLength) - .tab("Effects").visibleWhen(() -> isTelegraphVisible() && needsLength())); + .tab("Effects").visibleWhen(() -> isTelegraphVisible() && needsLength()) + .hover("ability.hover.telegraphLength")); defs.add(FieldDef.floatField("ability.telegraphWidth", this::getTWidth, this::setTWidth) - .tab("Effects").visibleWhen(() -> isTelegraphVisible() && needsWidth())); + .tab("Effects").visibleWhen(() -> isTelegraphVisible() && needsWidth()) + .hover("ability.hover.telegraphWidth")); defs.add(FieldDef.floatField("ability.telegraphAngle", this::getTAngle, this::setTAngle) - .tab("Effects").visibleWhen(() -> isTelegraphVisible() && needsAngle())); + .tab("Effects").visibleWhen(() -> isTelegraphVisible() && needsAngle()) + .hover("ability.hover.telegraphAngle")); } // ==================== TELEGRAPH VISIBILITY HELPERS ==================== diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityCutter.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityCutter.java index 36dec1715..7454dd3f0 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityCutter.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityCutter.java @@ -461,6 +461,7 @@ public class AbilityCutter extends Ability implements IAbilityCutter { FieldDef.row( FieldDef.floatField("ability.arcAngle", this::getArcAngle, this::setArcAngle), FieldDef.floatField("ability.innerRadius", this::getInnerRadius, this::setInnerRadius) + .hover("ability.hover.innerRadius") ), FieldDef.floatField("ability.sweepSpeed", this::getSweepSpeed, this::setSweepSpeed), FieldDef.intField("ability.spinDuration", this::getSpinDurationTicks, this::setSpinDurationTicks) diff --git a/src/main/resources/assets/customnpcs/lang/en_US.lang b/src/main/resources/assets/customnpcs/lang/en_US.lang index e6dc2779e..e23ef2d11 100644 --- a/src/main/resources/assets/customnpcs/lang/en_US.lang +++ b/src/main/resources/assets/customnpcs/lang/en_US.lang @@ -1772,6 +1772,14 @@ ability.dodgeAnimation3=Dodge Animation 3 ability.showTelegraph=Show Telegraph ability.windUpColor=Wind Up Color ability.activeColor=Active Color +ability.telegraphHeight=Height Offset +ability.telegraphRadius=Radius +ability.telegraphInnerRadius=Inner Radius +ability.telegraphLength=Length +ability.telegraphWidth=Width +ability.telegraphAngle=Angle +ability.telegraphActiveTicks=Active Ticks +ability.syncTelegraph=Sync Duration # Section Headers ability.section.timing=Timing @@ -2108,6 +2116,16 @@ ability.hover.canCounter=Enable counterattack when blocking damage ability.hover.counterType=Flat = fixed damage, Percent = % of blocked damage ability.hover.affectsCaster=Hazard can damage the NPC that created it ability.hover.sweepMode=Swipe = single arc attack, Spin = continuous rotation +ability.hover.innerRadius=Minimum distance from caster. Entities closer than this are not hit. Creates a donut-shaped dead zone. Also shown on the telegraph. +ability.hover.telegraphShape=Shape of the telegraph warning indicator. Different shapes use different size parameters. +ability.hover.telegraphHeight=Vertical offset from the ground for telegraph rendering +ability.hover.telegraphRadius=Radius of the telegraph shape (used by Circle, Ring, Square) +ability.hover.telegraphInnerRadius=Inner radius creating a hollow center. Used by Ring (donut) and Cone (truncated wedge). +ability.hover.telegraphLength=Forward distance of the telegraph shape (used by Line, Cone) +ability.hover.telegraphWidth=Side-to-side width of the telegraph (used by Line) +ability.hover.telegraphAngle=Spread angle in degrees (used by Cone) +ability.hover.telegraphActiveTicks=How long the telegraph stays visible during the active phase (20 ticks = 1 second). Set to 0 for windup-only telegraph. +ability.hover.syncTelegraph=When enabled, telegraph active duration automatically matches the ability duration ability.hover.launching=When enabled, wall launches forward dealing damage and knockback # Energy Barrier Abilities