From 4765e7993fb10346a002a2121243dc8344bad05b Mon Sep 17 00:00:00 2001 From: MagicBot Date: Mon, 19 Oct 2026 11:20:33 -0400 Subject: [PATCH] Add shared obj/combat/item getters to CObjectTemplate The ITEM, DEED and RUNE cache templates implement the getters for the 65 fields all three define. The Item-only fields (weapon, primary and secondary attr, bulk, defense rating, sheath, stub flag/id) stay off the interface. CObjectTemplate.lookup delegates to CObjectIndex.lookup. JSON-Refactor-Plan Task 1.1 (D1). No consumers change; no values change. Co-Authored-By: Claude Opus 5.5 --- .../parsers/objects/CObjectTemplate.java | 86 ++++- src/engine/parsers/objects/DeedTemplate.java | 325 ++++++++++++++++++ src/engine/parsers/objects/ItemTemplate.java | 325 ++++++++++++++++++ src/engine/parsers/objects/RuneTemplate.java | 325 ++++++++++++++++++ 4 files changed, 1060 insertions(+), 1 deletion(-) diff --git a/src/engine/parsers/objects/CObjectTemplate.java b/src/engine/parsers/objects/CObjectTemplate.java index d19e4d5e..2a66aacc 100644 --- a/src/engine/parsers/objects/CObjectTemplate.java +++ b/src/engine/parsers/objects/CObjectTemplate.java @@ -8,8 +8,92 @@ package engine.parsers.objects; +import engine.math.Vector3fImmutable; +import engine.mbEnums; +import engine.parsers.cache.CObjectIndex; +import org.json.JSONArray; + +import java.util.ArrayList; +import java.util.EnumMap; +import java.util.EnumSet; +import java.util.HashMap; +import java.util.LinkedHashMap; + // Common type for ITEM, DEED and RUNE cache templates, which share one id space. -// Shared obj_/combat_/item_ getters arrive with JSON-Refactor-Plan Task 1.1. +// Getters cover only the obj_/combat_/item_ fields all three define (JSON-Refactor-Plan D1). +// Returned collections are the template's own; never modify them. public interface CObjectTemplate { + + static CObjectTemplate lookup(int templateId) { + return CObjectIndex.lookup(templateId); + } + + int getTemplateId(); + String getObjName(); + boolean getObjPickable(); + float getObjGravity(); + float getObjCullDistance(); + Vector3fImmutable getObjScale(); + int getObjRenderObject(); + boolean getObjDoubleFusion(); + Vector3fImmutable getObjForwardVector(); + String getObjTrackingName(); + float getObjMaxTrackingDistance(); + int getObjIcon(); + float getObjGravityF(); + LinkedHashMap getObjSoundEvents(); + JSONArray getObjArcHardpointList(); + HashMap getObjSparseData(); + int getObjRenderObjectLowDetail(); + Vector3fImmutable getObjDefaultAlignment(); + String getObjSoundTable(); + + float getCombatHealthCurrent(); + float getCombatHealthFull(); + EnumMap getCombatAttackResist(); + JSONArray getCombatPowers(); + + mbEnums.ItemType getItemType(); + int getItemEqSlotsValue(); + boolean getItemEqSlotsType(); + EnumSet getItemEqSlotsOr(); + EnumSet getItemEqSlotsAnd(); + boolean getItemTakeable(); + int getItemValue(); + int getItemWt(); + float getItemPassiveDefenseMod(); + String getItemBaseName(); + String getItemDsc(); + int getItemRenderObjectFemale(); + float getItemHealthFull(); + String getItemSkillUsed(); + String getItemSkillMasteryUsed(); + int getItemParryAnimId(); + EnumMap getItemOfferingInfo(); + EnumSet getItemFlags(); + EnumSet getItemUseFlags(); + int getItemPostItemId(); + int getItemInitialCharges(); + int getItemBookArcana(); + LinkedHashMap getItemSkillReq(); + boolean getItemRaceReqRestrict(); + EnumSet getItemRaceReq(); + boolean getItemClassReqRestrict(); + EnumSet getItemClassReq(); + boolean getItemDiscReqRestrict(); + EnumSet getItemDiscReq(); + EnumMap getItemAttrReq(); + int getItemLevelReq(); + int getItemRankReq(); + mbEnums.SexType getItemSexReq(); + ArrayList getItemUserPowerAction(); + ArrayList getItemPowerGrant(); + LinkedHashMap> getItemPowerAction(); + boolean getItemSheathable(); + boolean getItemHasStub(); + EnumMap getItemOfferingAdjustments(); + EnumMap getItemResourceCosts(); + int getItemBaneRank(); + boolean getItemIgnoreSavedActions(); } diff --git a/src/engine/parsers/objects/DeedTemplate.java b/src/engine/parsers/objects/DeedTemplate.java index 60e70e58..a2cc8f1e 100644 --- a/src/engine/parsers/objects/DeedTemplate.java +++ b/src/engine/parsers/objects/DeedTemplate.java @@ -119,4 +119,329 @@ public class DeedTemplate implements CObjectTemplate { public float deed_namelookup_val; public boolean deed_custom_city; public int deed_structure_id; + + @Override + public int getTemplateId() { + return template_id; + } + + @Override + public String getObjName() { + return obj_name; + } + + @Override + public boolean getObjPickable() { + return obj_pickable; + } + + @Override + public float getObjGravity() { + return obj_gravity; + } + + @Override + public float getObjCullDistance() { + return obj_cull_distance; + } + + @Override + public Vector3fImmutable getObjScale() { + return obj_scale; + } + + @Override + public int getObjRenderObject() { + return obj_render_object; + } + + @Override + public boolean getObjDoubleFusion() { + return obj_double_fusion; + } + + @Override + public Vector3fImmutable getObjForwardVector() { + return obj_forward_vector; + } + + @Override + public String getObjTrackingName() { + return obj_tracking_name; + } + + @Override + public float getObjMaxTrackingDistance() { + return obj_max_tracking_distance; + } + + @Override + public int getObjIcon() { + return obj_icon; + } + + @Override + public float getObjGravityF() { + return obj_gravity_f; + } + + @Override + public LinkedHashMap getObjSoundEvents() { + return obj_sound_events; + } + + @Override + public JSONArray getObjArcHardpointList() { + return obj_arc_hardpoint_list; + } + + @Override + public HashMap getObjSparseData() { + return obj_sparse_data; + } + + @Override + public int getObjRenderObjectLowDetail() { + return obj_render_object_low_detail; + } + + @Override + public Vector3fImmutable getObjDefaultAlignment() { + return obj_default_alignment; + } + + @Override + public String getObjSoundTable() { + return obj_sound_table; + } + + @Override + public float getCombatHealthCurrent() { + return combat_health_current; + } + + @Override + public float getCombatHealthFull() { + return combat_health_full; + } + + @Override + public EnumMap getCombatAttackResist() { + return combat_attack_resist; + } + + @Override + public JSONArray getCombatPowers() { + return combat_powers; + } + + @Override + public mbEnums.ItemType getItemType() { + return item_type; + } + + @Override + public int getItemEqSlotsValue() { + return item_eq_slots_value; + } + + @Override + public boolean getItemEqSlotsType() { + return item_eq_slots_type; + } + + @Override + public EnumSet getItemEqSlotsOr() { + return item_eq_slots_or; + } + + @Override + public EnumSet getItemEqSlotsAnd() { + return item_eq_slots_and; + } + + @Override + public boolean getItemTakeable() { + return item_takeable; + } + + @Override + public int getItemValue() { + return item_value; + } + + @Override + public int getItemWt() { + return item_wt; + } + + @Override + public float getItemPassiveDefenseMod() { + return item_passive_defense_mod; + } + + @Override + public String getItemBaseName() { + return item_base_name; + } + + @Override + public String getItemDsc() { + return item_dsc; + } + + @Override + public int getItemRenderObjectFemale() { + return item_render_object_female; + } + + @Override + public float getItemHealthFull() { + return item_health_full; + } + + @Override + public String getItemSkillUsed() { + return item_skill_used; + } + + @Override + public String getItemSkillMasteryUsed() { + return item_skill_mastery_used; + } + + @Override + public int getItemParryAnimId() { + return item_parry_anim_id; + } + + @Override + public EnumMap getItemOfferingInfo() { + return item_offering_info; + } + + @Override + public EnumSet getItemFlags() { + return item_flags; + } + + @Override + public EnumSet getItemUseFlags() { + return item_use_flags; + } + + @Override + public int getItemPostItemId() { + return item_post_item_id; + } + + @Override + public int getItemInitialCharges() { + return item_initial_charges; + } + + @Override + public int getItemBookArcana() { + return item_book_arcana; + } + + @Override + public LinkedHashMap getItemSkillReq() { + return item_skill_req; + } + + @Override + public boolean getItemRaceReqRestrict() { + return item_race_req_restrict; + } + + @Override + public EnumSet getItemRaceReq() { + return item_race_req; + } + + @Override + public boolean getItemClassReqRestrict() { + return item_class_req_restrict; + } + + @Override + public EnumSet getItemClassReq() { + return item_class_req; + } + + @Override + public boolean getItemDiscReqRestrict() { + return item_disc_req_restrict; + } + + @Override + public EnumSet getItemDiscReq() { + return item_disc_req; + } + + @Override + public EnumMap getItemAttrReq() { + return item_attr_req; + } + + @Override + public int getItemLevelReq() { + return item_level_req; + } + + @Override + public int getItemRankReq() { + return item_rank_req; + } + + @Override + public mbEnums.SexType getItemSexReq() { + return item_sex_req; + } + + @Override + public ArrayList getItemUserPowerAction() { + return item_user_power_action; + } + + @Override + public ArrayList getItemPowerGrant() { + return item_power_grant; + } + + @Override + public LinkedHashMap> getItemPowerAction() { + return item_power_action; + } + + @Override + public boolean getItemSheathable() { + return item_sheathable; + } + + @Override + public boolean getItemHasStub() { + return item_has_stub; + } + + @Override + public EnumMap getItemOfferingAdjustments() { + return item_offering_adjustments; + } + + @Override + public EnumMap getItemResourceCosts() { + return item_resource_costs; + } + + @Override + public int getItemBaneRank() { + return item_bane_rank; + } + + @Override + public boolean getItemIgnoreSavedActions() { + return item_ignore_saved_actions; + } } diff --git a/src/engine/parsers/objects/ItemTemplate.java b/src/engine/parsers/objects/ItemTemplate.java index 598ee707..84787ddb 100644 --- a/src/engine/parsers/objects/ItemTemplate.java +++ b/src/engine/parsers/objects/ItemTemplate.java @@ -138,6 +138,331 @@ public class ItemTemplate implements CObjectTemplate { public int item_bane_rank; public boolean item_ignore_saved_actions; + @Override + public int getTemplateId() { + return template_id; + } + + @Override + public String getObjName() { + return obj_name; + } + + @Override + public boolean getObjPickable() { + return obj_pickable; + } + + @Override + public float getObjGravity() { + return obj_gravity; + } + + @Override + public float getObjCullDistance() { + return obj_cull_distance; + } + + @Override + public Vector3fImmutable getObjScale() { + return obj_scale; + } + + @Override + public int getObjRenderObject() { + return obj_render_object; + } + + @Override + public boolean getObjDoubleFusion() { + return obj_double_fusion; + } + + @Override + public Vector3fImmutable getObjForwardVector() { + return obj_forward_vector; + } + + @Override + public String getObjTrackingName() { + return obj_tracking_name; + } + + @Override + public float getObjMaxTrackingDistance() { + return obj_max_tracking_distance; + } + + @Override + public int getObjIcon() { + return obj_icon; + } + + @Override + public float getObjGravityF() { + return obj_gravity_f; + } + + @Override + public LinkedHashMap getObjSoundEvents() { + return obj_sound_events; + } + + @Override + public JSONArray getObjArcHardpointList() { + return obj_arc_hardpoint_list; + } + + @Override + public HashMap getObjSparseData() { + return obj_sparse_data; + } + + @Override + public int getObjRenderObjectLowDetail() { + return obj_render_object_low_detail; + } + + @Override + public Vector3fImmutable getObjDefaultAlignment() { + return obj_default_alignment; + } + + @Override + public String getObjSoundTable() { + return obj_sound_table; + } + + @Override + public float getCombatHealthCurrent() { + return combat_health_current; + } + + @Override + public float getCombatHealthFull() { + return combat_health_full; + } + + @Override + public EnumMap getCombatAttackResist() { + return combat_attack_resist; + } + + @Override + public JSONArray getCombatPowers() { + return combat_powers; + } + + @Override + public mbEnums.ItemType getItemType() { + return item_type; + } + + @Override + public int getItemEqSlotsValue() { + return item_eq_slots_value; + } + + @Override + public boolean getItemEqSlotsType() { + return item_eq_slots_type; + } + + @Override + public EnumSet getItemEqSlotsOr() { + return item_eq_slots_or; + } + + @Override + public EnumSet getItemEqSlotsAnd() { + return item_eq_slots_and; + } + + @Override + public boolean getItemTakeable() { + return item_takeable; + } + + @Override + public int getItemValue() { + return item_value; + } + + @Override + public int getItemWt() { + return item_wt; + } + + @Override + public float getItemPassiveDefenseMod() { + return item_passive_defense_mod; + } + + @Override + public String getItemBaseName() { + return item_base_name; + } + + @Override + public String getItemDsc() { + return item_dsc; + } + + @Override + public int getItemRenderObjectFemale() { + return item_render_object_female; + } + + @Override + public float getItemHealthFull() { + return item_health_full; + } + + @Override + public String getItemSkillUsed() { + return item_skill_used; + } + + @Override + public String getItemSkillMasteryUsed() { + return item_skill_mastery_used; + } + + @Override + public int getItemParryAnimId() { + return item_parry_anim_id; + } + + @Override + public EnumMap getItemOfferingInfo() { + return item_offering_info; + } + + @Override + public EnumSet getItemFlags() { + return item_flags; + } + + @Override + public EnumSet getItemUseFlags() { + return item_use_flags; + } + + @Override + public int getItemPostItemId() { + return item_post_item_id; + } + + @Override + public int getItemInitialCharges() { + return item_initial_charges; + } + + @Override + public int getItemBookArcana() { + return item_book_arcana; + } + + @Override + public LinkedHashMap getItemSkillReq() { + return item_skill_req; + } + + @Override + public boolean getItemRaceReqRestrict() { + return item_race_req_restrict; + } + + @Override + public EnumSet getItemRaceReq() { + return item_race_req; + } + + @Override + public boolean getItemClassReqRestrict() { + return item_class_req_restrict; + } + + @Override + public EnumSet getItemClassReq() { + return item_class_req; + } + + @Override + public boolean getItemDiscReqRestrict() { + return item_disc_req_restrict; + } + + @Override + public EnumSet getItemDiscReq() { + return item_disc_req; + } + + @Override + public EnumMap getItemAttrReq() { + return item_attr_req; + } + + @Override + public int getItemLevelReq() { + return item_level_req; + } + + @Override + public int getItemRankReq() { + return item_rank_req; + } + + @Override + public mbEnums.SexType getItemSexReq() { + return item_sex_req; + } + + @Override + public ArrayList getItemUserPowerAction() { + return item_user_power_action; + } + + @Override + public ArrayList getItemPowerGrant() { + return item_power_grant; + } + + @Override + public LinkedHashMap> getItemPowerAction() { + return item_power_action; + } + + @Override + public boolean getItemSheathable() { + return item_sheathable; + } + + @Override + public boolean getItemHasStub() { + return item_has_stub; + } + + @Override + public EnumMap getItemOfferingAdjustments() { + return item_offering_adjustments; + } + + @Override + public EnumMap getItemResourceCosts() { + return item_resource_costs; + } + + @Override + public int getItemBaneRank() { + return item_bane_rank; + } + + @Override + public boolean getItemIgnoreSavedActions() { + return item_ignore_saved_actions; + } + // item_weapon (ArcAttackInfo_LoadWeapon, sb.exe 0x61FA60). public static class Weapon { diff --git a/src/engine/parsers/objects/RuneTemplate.java b/src/engine/parsers/objects/RuneTemplate.java index 7b09b2da..39182e37 100644 --- a/src/engine/parsers/objects/RuneTemplate.java +++ b/src/engine/parsers/objects/RuneTemplate.java @@ -191,6 +191,331 @@ public class RuneTemplate implements CObjectTemplate { public int rune_natural_power_attack; public final HashMap rune_sparse_data = new HashMap<>(); + @Override + public int getTemplateId() { + return template_id; + } + + @Override + public String getObjName() { + return obj_name; + } + + @Override + public boolean getObjPickable() { + return obj_pickable; + } + + @Override + public float getObjGravity() { + return obj_gravity; + } + + @Override + public float getObjCullDistance() { + return obj_cull_distance; + } + + @Override + public Vector3fImmutable getObjScale() { + return obj_scale; + } + + @Override + public int getObjRenderObject() { + return obj_render_object; + } + + @Override + public boolean getObjDoubleFusion() { + return obj_double_fusion; + } + + @Override + public Vector3fImmutable getObjForwardVector() { + return obj_forward_vector; + } + + @Override + public String getObjTrackingName() { + return obj_tracking_name; + } + + @Override + public float getObjMaxTrackingDistance() { + return obj_max_tracking_distance; + } + + @Override + public int getObjIcon() { + return obj_icon; + } + + @Override + public float getObjGravityF() { + return obj_gravity_f; + } + + @Override + public LinkedHashMap getObjSoundEvents() { + return obj_sound_events; + } + + @Override + public JSONArray getObjArcHardpointList() { + return obj_arc_hardpoint_list; + } + + @Override + public HashMap getObjSparseData() { + return obj_sparse_data; + } + + @Override + public int getObjRenderObjectLowDetail() { + return obj_render_object_low_detail; + } + + @Override + public Vector3fImmutable getObjDefaultAlignment() { + return obj_default_alignment; + } + + @Override + public String getObjSoundTable() { + return obj_sound_table; + } + + @Override + public float getCombatHealthCurrent() { + return combat_health_current; + } + + @Override + public float getCombatHealthFull() { + return combat_health_full; + } + + @Override + public EnumMap getCombatAttackResist() { + return combat_attack_resist; + } + + @Override + public JSONArray getCombatPowers() { + return combat_powers; + } + + @Override + public mbEnums.ItemType getItemType() { + return item_type; + } + + @Override + public int getItemEqSlotsValue() { + return item_eq_slots_value; + } + + @Override + public boolean getItemEqSlotsType() { + return item_eq_slots_type; + } + + @Override + public EnumSet getItemEqSlotsOr() { + return item_eq_slots_or; + } + + @Override + public EnumSet getItemEqSlotsAnd() { + return item_eq_slots_and; + } + + @Override + public boolean getItemTakeable() { + return item_takeable; + } + + @Override + public int getItemValue() { + return item_value; + } + + @Override + public int getItemWt() { + return item_wt; + } + + @Override + public float getItemPassiveDefenseMod() { + return item_passive_defense_mod; + } + + @Override + public String getItemBaseName() { + return item_base_name; + } + + @Override + public String getItemDsc() { + return item_dsc; + } + + @Override + public int getItemRenderObjectFemale() { + return item_render_object_female; + } + + @Override + public float getItemHealthFull() { + return item_health_full; + } + + @Override + public String getItemSkillUsed() { + return item_skill_used; + } + + @Override + public String getItemSkillMasteryUsed() { + return item_skill_mastery_used; + } + + @Override + public int getItemParryAnimId() { + return item_parry_anim_id; + } + + @Override + public EnumMap getItemOfferingInfo() { + return item_offering_info; + } + + @Override + public EnumSet getItemFlags() { + return item_flags; + } + + @Override + public EnumSet getItemUseFlags() { + return item_use_flags; + } + + @Override + public int getItemPostItemId() { + return item_post_item_id; + } + + @Override + public int getItemInitialCharges() { + return item_initial_charges; + } + + @Override + public int getItemBookArcana() { + return item_book_arcana; + } + + @Override + public LinkedHashMap getItemSkillReq() { + return item_skill_req; + } + + @Override + public boolean getItemRaceReqRestrict() { + return item_race_req_restrict; + } + + @Override + public EnumSet getItemRaceReq() { + return item_race_req; + } + + @Override + public boolean getItemClassReqRestrict() { + return item_class_req_restrict; + } + + @Override + public EnumSet getItemClassReq() { + return item_class_req; + } + + @Override + public boolean getItemDiscReqRestrict() { + return item_disc_req_restrict; + } + + @Override + public EnumSet getItemDiscReq() { + return item_disc_req; + } + + @Override + public EnumMap getItemAttrReq() { + return item_attr_req; + } + + @Override + public int getItemLevelReq() { + return item_level_req; + } + + @Override + public int getItemRankReq() { + return item_rank_req; + } + + @Override + public mbEnums.SexType getItemSexReq() { + return item_sex_req; + } + + @Override + public ArrayList getItemUserPowerAction() { + return item_user_power_action; + } + + @Override + public ArrayList getItemPowerGrant() { + return item_power_grant; + } + + @Override + public LinkedHashMap> getItemPowerAction() { + return item_power_action; + } + + @Override + public boolean getItemSheathable() { + return item_sheathable; + } + + @Override + public boolean getItemHasStub() { + return item_has_stub; + } + + @Override + public EnumMap getItemOfferingAdjustments() { + return item_offering_adjustments; + } + + @Override + public EnumMap getItemResourceCosts() { + return item_resource_costs; + } + + @Override + public int getItemBaneRank() { + return item_bane_rank; + } + + @Override + public boolean getItemIgnoreSavedActions() { + return item_ignore_saved_actions; + } + // One entry of rune_skill_grant; same layout as PowerGrant. // skill_monster_types is empty in every RUNE file, so it is kept as raw JSON.