From b525a7a3ab0c1c09e8cba26b3a073430e317b0cf Mon Sep 17 00:00:00 2001 From: MagicBot Date: Thu, 15 Oct 2026 07:01:57 -0400 Subject: [PATCH] Document verified rune natural attack layout Field layout of rune_naturalattacks confirmed in the client (IDA): it is the same attack info struct as a weapon, so [0] is WEPSPEED. Co-Authored-By: Claude Opus 5.5 --- src/engine/objects/ItemTemplate.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/engine/objects/ItemTemplate.java b/src/engine/objects/ItemTemplate.java index 8022ab74..5f8ff06a 100644 --- a/src/engine/objects/ItemTemplate.java +++ b/src/engine/objects/ItemTemplate.java @@ -138,9 +138,10 @@ public class ItemTemplate { public final EnumSet rune_group_role_set = EnumSet.noneOf(mbEnums.MobBehaviourType.class); public boolean rune_renderable = false; public int rune_natural_power_attack; - // [AI] One float[] per rune_naturalattacks entry. Layout inferred from game data, not yet verified in IDA: - // [0] attack speed (x100 ms), [1] range, [2] ?, [3] hand (1 = right, 2 = left), [4] weapon/ammo template id, - // [5] projectile speed?, [6] swing anim, [7] damage type index, [8] min damage, [9] max damage + // [AI] One float[] per rune_naturalattacks entry. Same "attack info" struct as a weapon (verified in IDA, see + // MBDATA/docs/client-map.md): [0] attack speed (WEPSPEED), [1] range (MAXRANGE), [2] unknown int, + // [3] equip slot (1 = RHELD, 2 = LHELD), [4] projectile template id, [5] projectile speed, [6] swing anim, + // [7] damage type, [8] min damage, [9] max damage public final ArrayList rune_natural_attacks = new ArrayList<>(); public final HashMap rune_sparse_data = new HashMap<>(); public final HashMap rune_skill_adj = new HashMap<>();