From b21ccdbb4cb6857bf390f38fe8bb4df41fe8ed09 Mon Sep 17 00:00:00 2001 From: MagicBot Date: Thu, 15 Oct 2026 07:05:25 -0400 Subject: [PATCH] Use rune natural attack range for unarmed mobs Unarmed mobs now add their rune natural attack range in processAttack and use it in getRange. Most melee runes have 0, so they are unchanged; ranged plant mobs (Gasser, Spitter, Needler, ...) get 150, Shuggra 50. Natural range is not subject to the unverified 80 clamp. Co-Authored-By: Claude Opus 5.5 --- src/engine/gameManager/CombatManager.java | 8 ++++++++ src/engine/objects/AbstractCharacter.java | 9 +++++++++ 2 files changed, 17 insertions(+) diff --git a/src/engine/gameManager/CombatManager.java b/src/engine/gameManager/CombatManager.java index 23043bcd..633cc5eb 100644 --- a/src/engine/gameManager/CombatManager.java +++ b/src/engine/gameManager/CombatManager.java @@ -147,6 +147,14 @@ public enum CombatManager { rangeMod += bonus.getFloatPercentAll(mbEnums.ModType.WeaponRange, mbEnums.SourceType.None); attackRange += weapon.template.item_weapon_max_range * rangeMod; + } else if (attacker.getObjectType().equals(mbEnums.GameObjectType.Mob)) { + + //unarmed mob, add the natural attack range from its rune (0 for most melee mobs) + + if (bonus != null) + rangeMod += bonus.getFloatPercentAll(mbEnums.ModType.WeaponRange, mbEnums.SourceType.None); + + attackRange += getNaturalAttackRange(attacker, slot) * rangeMod; } if (attacker.getObjectType().equals(mbEnums.GameObjectType.Mob)) diff --git a/src/engine/objects/AbstractCharacter.java b/src/engine/objects/AbstractCharacter.java index eb31e338..1b42ecda 100644 --- a/src/engine/objects/AbstractCharacter.java +++ b/src/engine/objects/AbstractCharacter.java @@ -1483,6 +1483,15 @@ public abstract class AbstractCharacter extends AbstractWorldObject { range = ((Mob) this).charItemManager.equipped.get(EquipSlotType.RHELD).template.item_weapon_max_range; } else if (((Mob) this).charItemManager.equipped.get(EquipSlotType.LHELD) != null) { range = ((Mob) this).charItemManager.equipped.get(EquipSlotType.LHELD).template.item_weapon_max_range; + } else { + + // Unarmed: use the rune natural attack range when it has one (e.g. Gasser 150), not clamped. + // Most melee runes have 0, so they keep the default of 8. + + float naturalRange = CombatManager.getNaturalAttackRange(mob, EquipSlotType.RHELD); + + if (naturalRange > 0) + return naturalRange; } // TODO Is this clamp from live?