]> www.infradead.org Git - users/mchehab/andors-trail.git/commitdiff
Initial work on item categorization.
authorOskar Wiksten <oskar.wiksten@gmail.com>
Sat, 9 Jun 2012 13:13:52 +0000 (15:13 +0200)
committerOskar Wiksten <oskar.wiksten@gmail.com>
Sun, 7 Oct 2012 14:09:27 +0000 (16:09 +0200)
18 files changed:
AndorsTrail/res/menu/inventoryitem.xml
AndorsTrail/res/values/content_itemcategories.xml [new file with mode: 0644]
AndorsTrail/res/values/content_itemlist.xml
AndorsTrail/res/values/loadresources.xml
AndorsTrail/res/values/strings.xml
AndorsTrail/src/com/gpl/rpg/AndorsTrail/activity/HeroinfoActivity_Inventory.java
AndorsTrail/src/com/gpl/rpg/AndorsTrail/activity/ItemInfoActivity.java
AndorsTrail/src/com/gpl/rpg/AndorsTrail/context/WorldContext.java
AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/ItemController.java
AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/item/Inventory.java
AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/item/ItemCategory.java [new file with mode: 0644]
AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/item/ItemCategoryCollection.java [new file with mode: 0644]
AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/item/ItemType.java
AndorsTrail/src/com/gpl/rpg/AndorsTrail/resource/ResourceLoader.java
AndorsTrail/src/com/gpl/rpg/AndorsTrail/resource/parsers/ItemCategoryParser.java [new file with mode: 0644]
AndorsTrail/src/com/gpl/rpg/AndorsTrail/resource/parsers/ItemTypeParser.java
AndorsTrail/src/com/gpl/rpg/AndorsTrail/resource/tiles/TileCollection.java
AndorsTrail/src/com/gpl/rpg/AndorsTrail/view/MainView.java

index bd8c419399b8a18f08ab406ae9a63207a9f29005..2b03c4eb0c707e4bf7b6285502bc91a8c79b1a0e 100644 (file)
@@ -3,6 +3,7 @@
        xmlns:android="http://schemas.android.com/apk/res/android">
        <item android:title="@string/inventory_info" android:id="@+id/inv_menu_info" />
        <item android:title="@string/inventory_equip" android:id="@+id/inv_menu_equip" android:visible="false" />
+       <item android:title="@string/inventory_equip_offhand" android:id="@+id/inv_menu_equip_offhand" android:visible="false" />
        <item android:title="@string/inventory_unequip" android:id="@+id/inv_menu_unequip" android:visible="false" />
        <item android:title="@string/inventory_use" android:id="@+id/inv_menu_use" android:visible="false" />
        <item android:title="@string/inventory_drop" android:id="@+id/inv_menu_drop" />
diff --git a/AndorsTrail/res/values/content_itemcategories.xml b/AndorsTrail/res/values/content_itemcategories.xml
new file mode 100644 (file)
index 0000000..486f5a0
--- /dev/null
@@ -0,0 +1,64 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<resources>
+       <string name="itemcategories_1">
+[id|name|actionType|inventorySlot|size|];
+{dagger|Dagger|2|0|1|};
+{ssword|Shortsword|2|0|1|};
+{lsword|Longsword|2|0|2|};
+{2hsword|Two-handed sword|2|0|3|};
+{bsword|Broadsword|2|0|2|};
+{axe|Axe|2|0|2|};
+{axe2h|Greataxe|2|0|3|};
+{club|Club|2|0|2|};
+{staff|Quarterstaff|2|0|3|};
+{mace|Mace|2|0|2|};
+{scepter|Scepter|2|0|2|};
+{hammer|Warhammer|2|0|2|};
+{hammer2h|Giant hammer|2|0|3|};
+
+{buckler|Buckler|2|1|1|};
+{shld_wd_li|Shield, wood (light)|2|1|2|};
+{shld_mtl_li|Shield, metal (light)|2|1|2|};
+{shld_wd_hv|Shield, wood (heavy)|2|1|3|};
+{shld_mtl_hv|Shield, metal (heavy)|2|1|3|};
+{shld_twr|Tower shield|2|1|3|};
+
+{hd_cloth|Headwear, cloth|2|2||};
+{hd_lthr|Headwear, leather|2|2|1|};
+{hd_mtl_li|Headwear, metal (light)|2|2|2|};
+{hd_mtl_hv|Headwear, metal (heavy)|2|2|3|};
+
+{bdy_clth|Armor, cloth|2|3||};
+{bdy_lthr|Armor, leather|2|3|1|};
+{bdy_hide|Hide armor|2|3|1|};
+{bdy_lt|Armor (light)|2|3|2|};
+{bdy_hv|Armor (heavy)|2|3|3|};
+{chmail|Chain mail|2|3|3|};
+{spmail|Splint mail|2|3|3|};
+{plmail|Plate mail|2|3|3|};
+
+{hnd_cloth|Gloves, cloth|2|4||};
+{hnd_lthr|Gloves, leather|2|4|1|};
+{hnd_mtl_li|Gloves, metal (light)|2|4|2|};
+{hnd_mtl_hv|Gloves, metal (heavy)|2|4|3|};
+
+{feet_clth|Footwear, cloth|2|5||};
+{feet_lthr|Footwear, leather|2|5|1|};
+{feet_mtl_li|Footwear, metal (light)|2|5|2|};
+{feet_mtl_hv|Footwear, metal (heavy)|2|5|3|};
+
+{neck|Necklace|2|6||};
+{ring|Ring|2|7||};
+
+{pot|Potion|1|||};
+{food|Food|1|||};
+{gem|Gem||||};
+{animal|Animal part||||};
+{animal_e|Edible animal part|1|||};
+{flask|Liquid container||||};
+{money|Money||||};
+{other|Other||||};
+       </string>
+
+</resources>
index c26e72ff910bdca31944126f93109854bd3b6ec3..9579edfc0b5c7376eb961e35213a31fca1608b7c 100644 (file)
 <resources>
        <string name="itemlist_money">
 [id|iconID|name|category|displaytype|hasManualPrice|baseMarketCost|hasEquipEffect|equip_boostMaxHP|equip_boostMaxAP|equip_moveCostPenalty|equip_attackCost|equip_attackChance|equip_criticalChance|equip_criticalMultiplier|equip_attackDamage_Min|equip_attackDamage_Max|equip_blockChance|equip_damageResistance|equip_conditions[condition|magnitude|]|hasUseEffect|use_boostHP_Min|use_boostHP_Max|use_boostAP_Min|use_boostAP_Max|use_conditionsSource[condition|magnitude|duration|chance|]|hasHitEffect|hit_boostHP_Min|hit_boostHP_Max|hit_boostAP_Min|hit_boostAP_Max|hit_conditionsSource[condition|magnitude|duration|chance|]|hit_conditionsTarget[condition|magnitude|duration|chance|]|hasKillEffect|kill_boostHP_Min|kill_boostHP_Max|kill_boostAP_Min|kill_boostAP_Max|kill_conditionsSource[condition|magnitude|duration|chance|]|];
-{gold|items_misc:10|Gold coins|30||1|1|||||||||||||||||||||||||||||||||};
+{gold|items_misc:10|Gold coins|money||1|1|||||||||||||||||||||||||||||||||};
        </string>
        
        <string name="itemlist_weapons">
 [id|iconID|name|category|displaytype|hasManualPrice|baseMarketCost|hasEquipEffect|equip_boostMaxHP|equip_boostMaxAP|equip_moveCostPenalty|equip_attackCost|equip_attackChance|equip_criticalChance|equip_criticalMultiplier|equip_attackDamage_Min|equip_attackDamage_Max|equip_blockChance|equip_damageResistance|equip_conditions[condition|magnitude|]|hasUseEffect|use_boostHP_Min|use_boostHP_Max|use_boostAP_Min|use_boostAP_Max|use_conditionsSource[condition|magnitude|duration|chance|]|hasHitEffect|hit_boostHP_Min|hit_boostHP_Max|hit_boostAP_Min|hit_boostAP_Max|hit_conditionsSource[condition|magnitude|duration|chance|]|hit_conditionsTarget[condition|magnitude|duration|chance|]|hasKillEffect|kill_boostHP_Min|kill_boostHP_Max|kill_boostAP_Min|kill_boostAP_Max|kill_conditionsSource[condition|magnitude|duration|chance|]|];
-{club1|items_weapons:42|Wooden club|0|||7|1||||5|10|||0|1|||||||||||||||||||||||};
-{club3|items_weapons:44|Iron club|0|||253|1||||6|5|||2|7|||||||||||||||||||||||};
-{ironsword0|items_weapons:0|Crude iron sword|0|||12|1||||5|10|||0|1|||||||||||||||||||||||};
-{hammer0|items_weapons:45|Iron hammer|0|||12|1||||5|10|||0|1|||||||||||||||||||||||};
-{hammer1|items_weapons:45|Giant hammer|0|||121|1||||10|5|||4|7|||||||||||||||||||||||};
-{dagger0|items_weapons:14|Iron dagger|0|||12|1||||5|10|||0|1|||||||||||||||||||||||};
-{dagger1|items_weapons:14|Sharp iron dagger|0|||53|1||||4|20|||1|2|||||||||||||||||||||||};
-{dagger2|items_weapons:14|Superior iron dagger|0|||70|1||||4|25|||1|2|||||||||||||||||||||||};
-{shortsword1|items_weapons:15|Iron shortsword|0|||78|1||||4|15|||1|2|||||||||||||||||||||||};
-{ironsword1|items_weapons:0|Iron sword|0|||78|1||||5|10|||1|3|||||||||||||||||||||||};
-{ironsword2|items_weapons:1|Iron longsword|0|||121|1||||5|10|||1|4|||||||||||||||||||||||};
-{broadsword1|items_weapons:5|Iron broadsword|0|||251|1||||7|2|||1|10|||||||||||||||||||||||};
-{broadsword2|items_weapons:6|Steel broadsword|0|||582|1||||6|15|||3|10|||||||||||||||||||||||};
-{steelsword1|items_weapons:7|Steel sword|0|||874|1||||4|24|||3|7|||||||||||||||||||||||};
-{axe1|items_weapons:56|Woodcutter axe|0|||24|1||||5|5|||1|3|||||||||||||||||||||||};
-{axe2|items_weapons:56|Iron axe|0|||312|1||||6|5|||2|5|||||||||||||||||||||||};
-{quickdagger1|items_weapons:14|Quickstrike dagger|0|4||512|1||||3|20|||0|0|-20||||||||||||||||||||||};
+{club1|items_weapons:42|Wooden club|club|||7|1||||5|10|||0|1|||||||||||||||||||||||};
+{club3|items_weapons:44|Iron club|mace|||253|1||||6|5|||2|7|||||||||||||||||||||||};
+{ironsword0|items_weapons:0|Crude iron sword|lsword|||12|1||||5|10|||0|1|||||||||||||||||||||||};
+{hammer0|items_weapons:45|Iron hammer|hammer|||12|1||||5|10|||0|1|||||||||||||||||||||||};
+{hammer1|items_weapons:45|Giant hammer|hammer2h|||121|1||||10|5|||4|7|||||||||||||||||||||||};
+{dagger0|items_weapons:14|Iron dagger|dagger|||12|1||||5|10|||0|1|||||||||||||||||||||||};
+{dagger1|items_weapons:14|Sharp iron dagger|dagger|||53|1||||4|20|||1|2|||||||||||||||||||||||};
+{dagger2|items_weapons:14|Superior iron dagger|dagger|||70|1||||4|25|||1|2|||||||||||||||||||||||};
+{shortsword1|items_weapons:15|Iron shortsword|ssword|||78|1||||4|15|||1|2|||||||||||||||||||||||};
+{ironsword1|items_weapons:0|Iron sword|lsword|||78|1||||5|10|||1|3|||||||||||||||||||||||};
+{ironsword2|items_weapons:1|Iron longsword|lsword|||121|1||||5|10|||1|4|||||||||||||||||||||||};
+{broadsword1|items_weapons:5|Iron broadsword|bsword|||251|1||||7|2|||1|10|||||||||||||||||||||||};
+{broadsword2|items_weapons:6|Steel broadsword|bsword|||582|1||||6|15|||3|10|||||||||||||||||||||||};
+{steelsword1|items_weapons:7|Steel sword|lsword|||874|1||||4|24|||3|7|||||||||||||||||||||||};
+{axe1|items_weapons:56|Woodcutter axe|axe|||24|1||||5|5|||1|3|||||||||||||||||||||||};
+{axe2|items_weapons:56|Iron axe|axe|||312|1||||6|5|||2|5|||||||||||||||||||||||};
+{quickdagger1|items_weapons:14|Quickstrike dagger|dagger|4||512|1||||3|20|||0|0|-20||||||||||||||||||||||};
        </string>
 
        <string name="itemlist_rings">
 [id|iconID|name|category|displaytype|hasManualPrice|baseMarketCost|hasEquipEffect|equip_boostMaxHP|equip_boostMaxAP|equip_moveCostPenalty|equip_attackCost|equip_attackChance|equip_criticalChance|equip_criticalMultiplier|equip_attackDamage_Min|equip_attackDamage_Max|equip_blockChance|equip_damageResistance|equip_conditions[condition|magnitude|]|hasUseEffect|use_boostHP_Min|use_boostHP_Max|use_boostAP_Min|use_boostAP_Max|use_conditionsSource[condition|magnitude|duration|chance|]|hasHitEffect|hit_boostHP_Min|hit_boostHP_Max|hit_boostAP_Min|hit_boostAP_Max|hit_conditionsSource[condition|magnitude|duration|chance|]|hit_conditionsTarget[condition|magnitude|duration|chance|]|hasKillEffect|kill_boostHP_Min|kill_boostHP_Max|kill_boostAP_Min|kill_boostAP_Max|kill_conditionsSource[condition|magnitude|duration|chance|]|];
-{ring_dmg1|items_jewelry:0|Ring of damage +1|7|||215|1||||||||1|1|||||||||||||||||||||||};
-{ring_dmg2|items_jewelry:1|Ring of damage +2|7|||398|1||||||||2|2|||||||||||||||||||||||};
-{ring_dmg5|items_jewelry:2|Ring of damage +5|7|4||2014|1||||||||5|5|||||||||||||||||||||||};
-{ring_dmg6|items_jewelry:3|Ring of damage +6|7|4||3186|1||||||||6|6|||||||||||||||||||||||};
-{ring_block1|items_jewelry:0|Lesser ring of block|7|4||1239|1||||||||||10||||||||||||||||||||||};
-{ring_block2|items_jewelry:0|Polished ring of block|7|4||3866|1||||||||||15||||||||||||||||||||||};
-{ring_atkch1|items_jewelry:0|Ring of surehit|7|||215|1|||||15|||||||||||||||||||||||||||};
-{ring1|items_jewelry:0|Mundane ring|7||1|13|1||||||||0|1|||||||||||||||||||||||};
-{ring2|items_jewelry:0|Polished ring|7||1|21|1||||||||||1||||||||||||||||||||||};
-{ring_jinxed1|items_jewelry:2|Jinxed ring of damage resistance|7|||229|1||||||||||-9|1|||||||||||||||||||||};
+{ring_dmg1|items_jewelry:0|Ring of damage +1|ring|||215|1||||||||1|1|||||||||||||||||||||||};
+{ring_dmg2|items_jewelry:1|Ring of damage +2|ring|||398|1||||||||2|2|||||||||||||||||||||||};
+{ring_dmg5|items_jewelry:2|Ring of damage +5|ring|4||2014|1||||||||5|5|||||||||||||||||||||||};
+{ring_dmg6|items_jewelry:3|Ring of damage +6|ring|4||3186|1||||||||6|6|||||||||||||||||||||||};
+{ring_block1|items_jewelry:0|Lesser ring of block|ring|4||1239|1||||||||||10||||||||||||||||||||||};
+{ring_block2|items_jewelry:0|Polished ring of block|ring|4||3866|1||||||||||15||||||||||||||||||||||};
+{ring_atkch1|items_jewelry:0|Ring of surehit|ring|||215|1|||||15|||||||||||||||||||||||||||};
+{ring1|items_jewelry:0|Mundane ring|ring||1|13|1||||||||0|1|||||||||||||||||||||||};
+{ring2|items_jewelry:0|Polished ring|ring||1|21|1||||||||||1||||||||||||||||||||||};
+{ring_jinxed1|items_jewelry:2|Jinxed ring of damage resistance|ring|||229|1||||||||||-9|1|||||||||||||||||||||};
        </string>
 
        <string name="itemlist_necklaces">
 [id|iconID|name|category|displaytype|hasManualPrice|baseMarketCost|hasEquipEffect|equip_boostMaxHP|equip_boostMaxAP|equip_moveCostPenalty|equip_attackCost|equip_attackChance|equip_criticalChance|equip_criticalMultiplier|equip_attackDamage_Min|equip_attackDamage_Max|equip_blockChance|equip_damageResistance|equip_conditions[condition|magnitude|]|hasUseEffect|use_boostHP_Min|use_boostHP_Max|use_boostAP_Min|use_boostAP_Max|use_conditionsSource[condition|magnitude|duration|chance|]|hasHitEffect|hit_boostHP_Min|hit_boostHP_Max|hit_boostAP_Min|hit_boostAP_Max|hit_conditionsSource[condition|magnitude|duration|chance|]|hit_conditionsTarget[condition|magnitude|duration|chance|]|hasKillEffect|kill_boostHP_Min|kill_boostHP_Max|kill_boostAP_Min|kill_boostAP_Max|kill_conditionsSource[condition|magnitude|duration|chance|]|];
-{jewel_fallhaven|items_jewelry:6|Jewel of Fallhaven|6|4||3125|1||||-1||||||||||||||||||||||||||||};
-{necklace_shield1|items_jewelry:7|Necklace of the guardian|6|4||935|1||||||||||9||||||||||||||||||||||};
-{necklace_shield2|items_jewelry:7|Shielding necklace|6|4||1255|1||||||||||12||||||||||||||||||||||};
+{jewel_fallhaven|items_jewelry:6|Jewel of Fallhaven|neck|4||3125|1||||-1||||||||||||||||||||||||||||};
+{necklace_shield1|items_jewelry:7|Necklace of the guardian|neck|4||935|1||||||||||9||||||||||||||||||||||};
+{necklace_shield2|items_jewelry:7|Shielding necklace|neck|4||1255|1||||||||||12||||||||||||||||||||||};
        </string>
        
 <string name="itemlist_armour">
 [id|iconID|name|category|displaytype|hasManualPrice|baseMarketCost|hasEquipEffect|equip_boostMaxHP|equip_boostMaxAP|equip_moveCostPenalty|equip_attackCost|equip_attackChance|equip_criticalChance|equip_criticalMultiplier|equip_attackDamage_Min|equip_attackDamage_Max|equip_blockChance|equip_damageResistance|equip_conditions[condition|magnitude|]|hasUseEffect|use_boostHP_Min|use_boostHP_Max|use_boostAP_Min|use_boostAP_Max|use_conditionsSource[condition|magnitude|duration|chance|]|hasHitEffect|hit_boostHP_Min|hit_boostHP_Max|hit_boostAP_Min|hit_boostAP_Max|hit_conditionsSource[condition|magnitude|duration|chance|]|hit_conditionsTarget[condition|magnitude|duration|chance|]|hasKillEffect|kill_boostHP_Min|kill_boostHP_Max|kill_boostAP_Min|kill_boostAP_Max|kill_conditionsSource[condition|magnitude|duration|chance|]|];
-{shirt1|items_armours:14|Cloth shirt|3|||16|1||||||||||2||||||||||||||||||||||};
-{shirt2|items_armours:14|Fine shirt|3|||72|1||||||||||5||||||||||||||||||||||};
-{shirt_dmgresist|items_armours:15|Hardened leather shirt|3|4||1633|1||||||||||5|1|||||||||||||||||||||};
-{armor1|items_armours:15|Leather armour|3|||464|1||||||||||8||||||||||||||||||||||};
-{armor2|items_armours:15|Superior leather armour|3|||624|1||||||||||9||||||||||||||||||||||};
-{armor3|items_armours:16|Hard leather armour|3|||2407|1||||||||||13||||||||||||||||||||||};
-{armor4|items_armours:16|Superior hard leather armour|3|||3866|1||||||||||15||||||||||||||||||||||};
-{hat1|items_armours:21|Green hat|2|||13|1||||||||||1||||||||||||||||||||||};
-{hat2|items_armours:21|Fine green hat|2|||25|1||||||||||2||||||||||||||||||||||};
-{hat3|items_armours:24|Crude leather cap|2|||72|1||||||||||5||||||||||||||||||||||};
-{hat4|items_armours:24|Leather cap|2|||146|1||||||||||6||||||||||||||||||||||};
-{gloves1|items_armours:35|Leather gloves|4|||23|1||||||||||3||||||||||||||||||||||};
-{gloves2|items_armours:35|Fine leather gloves|4|||38|1||||||||||4||||||||||||||||||||||};
-{gloves3|items_armours:36|Snakeskin gloves|4|||72|1||||||||||5||||||||||||||||||||||};
-{gloves4|items_armours:36|Fine snakeskin gloves|4|||146|1||||||||||6||||||||||||||||||||||};
-{shield1|items_armours:0|Wooden buckler|1|||72|1|||||-2|||||5||||||||||||||||||||||};
-{shield3|items_armours:1|Reinforced wooden buckler|1|||226|1|||||-5|||||7||||||||||||||||||||||};
-{shield4|items_armours:2|Crude wooden shield|1|||464|1|||||-5|||||8||||||||||||||||||||||};
-{shield5|items_armours:2|Superior wooden shield|1|||624|1|||||-4|||||9||||||||||||||||||||||};
-{boots1|items_armours:28|Leather boots|5|||23|1||||||||||3||||||||||||||||||||||};
-{boots2|items_armours:28|Superior leather boots|5|||38|1||||||||||4||||||||||||||||||||||};
-{boots3|items_armours:29|Snakeskin boots|5|||146|1||||||||||6||||||||||||||||||||||};
-{boots5|items_armours:30|Reinforced boots|5|||226|1||||||||||7||||||||||||||||||||||};
-{gloves_attack1|items_armours:35|Gloves of swift attack|4|||150|1|||||15|||||-9||||||||||||||||||||||};
-{gloves_attack2|items_armours:35|Fine gloves of swift attack|4|||221|1|||||17|||||-9||||||||||||||||||||||};
+{shirt1|items_armours:14|Cloth shirt|bdy_clth|||16|1||||||||||2||||||||||||||||||||||};
+{shirt2|items_armours:14|Fine shirt|bdy_clth|||72|1||||||||||5||||||||||||||||||||||};
+{shirt_dmgresist|items_armours:15|Hardened leather shirt|bdy_lthr|4||1633|1||||||||||5|1|||||||||||||||||||||};
+{armor1|items_armours:15|Leather armour|bdy_lthr|||464|1||||||||||8||||||||||||||||||||||};
+{armor2|items_armours:15|Superior leather armour|bdy_lthr|||624|1||||||||||9||||||||||||||||||||||};
+{armor3|items_armours:16|Hard leather armour|bdy_lthr|||2407|1||||||||||13||||||||||||||||||||||};
+{armor4|items_armours:16|Superior hard leather armour|bdy_lthr|||3866|1||||||||||15||||||||||||||||||||||};
+{hat1|items_armours:21|Green hat|hd_cloth|||13|1||||||||||1||||||||||||||||||||||};
+{hat2|items_armours:21|Fine green hat|hd_cloth|||25|1||||||||||2||||||||||||||||||||||};
+{hat3|items_armours:24|Crude leather cap|hd_lthr|||72|1||||||||||5||||||||||||||||||||||};
+{hat4|items_armours:24|Leather cap|hd_lthr|||146|1||||||||||6||||||||||||||||||||||};
+{gloves1|items_armours:35|Leather gloves|hnd_lthr|||23|1||||||||||3||||||||||||||||||||||};
+{gloves2|items_armours:35|Fine leather gloves|hnd_lthr|||38|1||||||||||4||||||||||||||||||||||};
+{gloves3|items_armours:36|Snakeskin gloves|hnd_cloth|||72|1||||||||||5||||||||||||||||||||||};
+{gloves4|items_armours:36|Fine snakeskin gloves|hnd_cloth|||146|1||||||||||6||||||||||||||||||||||};
+{shield1|items_armours:0|Wooden buckler|buckler|||72|1|||||-2|||||5||||||||||||||||||||||};
+{shield3|items_armours:1|Reinforced wooden buckler|buckler|||226|1|||||-5|||||7||||||||||||||||||||||};
+{shield4|items_armours:2|Crude wooden shield|shld_wd_li|||464|1|||||-5|||||8||||||||||||||||||||||};
+{shield5|items_armours:2|Superior wooden shield|shld_wd_li|||624|1|||||-4|||||9||||||||||||||||||||||};
+{boots1|items_armours:28|Leather boots|feet_lthr|||23|1||||||||||3||||||||||||||||||||||};
+{boots2|items_armours:28|Superior leather boots|feet_lthr|||38|1||||||||||4||||||||||||||||||||||};
+{boots3|items_armours:29|Snakeskin boots|feet_lthr|||146|1||||||||||6||||||||||||||||||||||};
+{boots5|items_armours:30|Reinforced boots|feet_mtl_li|||226|1||||||||||7||||||||||||||||||||||};
+{gloves_attack1|items_armours:35|Gloves of swift attack|hnd_lthr|||150|1|||||15|||||-9||||||||||||||||||||||};
+{gloves_attack2|items_armours:35|Fine gloves of swift attack|hnd_lthr|||221|1|||||17|||||-9||||||||||||||||||||||};
        </string>
        
 <string name="itemlist_food">
 [id|iconID|name|category|displaytype|hasManualPrice|baseMarketCost|hasEquipEffect|equip_boostMaxHP|equip_boostMaxAP|equip_moveCostPenalty|equip_attackCost|equip_attackChance|equip_criticalChance|equip_criticalMultiplier|equip_attackDamage_Min|equip_attackDamage_Max|equip_blockChance|equip_damageResistance|equip_conditions[condition|magnitude|]|hasUseEffect|use_boostHP_Min|use_boostHP_Max|use_boostAP_Min|use_boostAP_Max|use_conditionsSource[condition|magnitude|duration|chance|]|hasHitEffect|hit_boostHP_Min|hit_boostHP_Max|hit_boostAP_Min|hit_boostAP_Max|hit_conditionsSource[condition|magnitude|duration|chance|]|hit_conditionsTarget[condition|magnitude|duration|chance|]|hasKillEffect|kill_boostHP_Min|kill_boostHP_Max|kill_boostAP_Min|kill_boostAP_Max|kill_conditionsSource[condition|magnitude|duration|chance|]|];
-{apple_green|items_consumables:2|Green apple|21|||9||||||||||||||1|4|4|||||||||||||||||};
-{apple_red|items_consumables:3|Red apple|21|||15||||||||||||||1|6|6|||||||||||||||||};
-{meat|items_consumables:25|Meat|21||1|29||||||||||||||1|12|12|||||||||||||||||};
-{meat_cooked|items_consumables:27|Cooked meat|21||1|78||||||||||||||1|21|21|||||||||||||||||};
-{strawberry|items_consumables:8|Strawberry|21|||1||||||||||||||1|1|1|||||||||||||||||};
-{carrot|items_consumables:15|Carrot|21|||9||||||||||||||1|4|4|||||||||||||||||};
-{bread|items_consumables:21|Bread|21||1|6||||||||||||||1|5|5|||||||||||||||||};
-{mushroom|items_consumables:19|Mushroom|21|||1||||||||||||||1|1|1|||||||||||||||||};
-{pear|items_consumables:9|Pear|21|||9||||||||||||||1|4|4|||||||||||||||||};
-{eggs|items_consumables:20|Eggs|21|||8||||||||||||||1|3|3|||||||||||||||||};
-{radish|items_consumables:14|Radish|21|||5||||||||||||||1|2|2|||||||||||||||||};
+{apple_green|items_consumables:2|Green apple|food|||9||||||||||||||1|4|4|||||||||||||||||};
+{apple_red|items_consumables:3|Red apple|food|||15||||||||||||||1|6|6|||||||||||||||||};
+{meat|items_consumables:25|Meat|animal_e||1|29||||||||||||||1|12|12|||||||||||||||||};
+{meat_cooked|items_consumables:27|Cooked meat|food||1|78||||||||||||||1|21|21|||||||||||||||||};
+{strawberry|items_consumables:8|Strawberry|food|||1||||||||||||||1|1|1|||||||||||||||||};
+{carrot|items_consumables:15|Carrot|food|||9||||||||||||||1|4|4|||||||||||||||||};
+{bread|items_consumables:21|Bread|food||1|6||||||||||||||1|5|5|||||||||||||||||};
+{mushroom|items_consumables:19|Mushroom|food|||1||||||||||||||1|1|1|||||||||||||||||};
+{pear|items_consumables:9|Pear|food|||9||||||||||||||1|4|4|||||||||||||||||};
+{eggs|items_consumables:20|Eggs|food|||8||||||||||||||1|3|3|||||||||||||||||};
+{radish|items_consumables:14|Radish|food|||5||||||||||||||1|2|2|||||||||||||||||};
        </string>
 
        <string name="itemlist_potions">
 [id|iconID|name|category|displaytype|hasManualPrice|baseMarketCost|hasEquipEffect|equip_boostMaxHP|equip_boostMaxAP|equip_moveCostPenalty|equip_attackCost|equip_attackChance|equip_criticalChance|equip_criticalMultiplier|equip_attackDamage_Min|equip_attackDamage_Max|equip_blockChance|equip_damageResistance|equip_conditions[condition|magnitude|]|hasUseEffect|use_boostHP_Min|use_boostHP_Max|use_boostAP_Min|use_boostAP_Max|use_conditionsSource[condition|magnitude|duration|chance|]|hasHitEffect|hit_boostHP_Min|hit_boostHP_Max|hit_boostAP_Min|hit_boostAP_Max|hit_conditionsSource[condition|magnitude|duration|chance|]|hit_conditionsTarget[condition|magnitude|duration|chance|]|hasKillEffect|kill_boostHP_Min|kill_boostHP_Max|kill_boostAP_Min|kill_boostAP_Max|kill_conditionsSource[condition|magnitude|duration|chance|]|];
-{vial_empty1|items_consumables:56|Small empty vial|31||1|2|||||||||||||||||||||||||||||||||};
-{vial_empty2|items_consumables:57|Empty vial|31||1|4|||||||||||||||||||||||||||||||||};
-{vial_empty3|items_consumables:59|Empty flask|31||1|6|||||||||||||||||||||||||||||||||};
-{vial_empty4|items_consumables:58|Empty potion bottle|31||1|11|||||||||||||||||||||||||||||||||};
-{health_minor|items_consumables:35|Minor vial of health|20||1|5||||||||||||||1|5|5|||||||||||||||||};
-{health_minor2|items_consumables:35|Minor potion of health|20|||18||||||||||||||1|5|5|||||||||||||||||};
-{health|items_consumables:49|Regular potion of health|20|||40||||||||||||||1|10|10|||||||||||||||||};
-{health_major|items_consumables:28|Major flask of health|20||1|210||||||||||||||1|40|40|||||||||||||||||};
-{health_major2|items_consumables:28|Major potion of health|20|||280||||||||||||||1|40|40|||||||||||||||||};
-{mead|items_consumables:51|Mead|20|||15||||||||||||||1|1|1|||||||||||||||||};
-{milk|items_consumables:55|Milk|20|||21||||||||||||||1|2|2|||||||||||||||||};
-{bonemeal_potion|items_consumables:34|Bonemeal potion|20||1|45||||||||||||||1|40|40|||||||||||||||||};
+{vial_empty1|items_consumables:56|Small empty vial|flask||1|2|||||||||||||||||||||||||||||||||};
+{vial_empty2|items_consumables:57|Empty vial|flask||1|4|||||||||||||||||||||||||||||||||};
+{vial_empty3|items_consumables:59|Empty flask|flask||1|6|||||||||||||||||||||||||||||||||};
+{vial_empty4|items_consumables:58|Empty potion bottle|flask||1|11|||||||||||||||||||||||||||||||||};
+{health_minor|items_consumables:35|Minor vial of health|pot||1|5||||||||||||||1|5|5|||||||||||||||||};
+{health_minor2|items_consumables:35|Minor potion of health|pot|||18||||||||||||||1|5|5|||||||||||||||||};
+{health|items_consumables:49|Regular potion of health|pot|||40||||||||||||||1|10|10|||||||||||||||||};
+{health_major|items_consumables:28|Major flask of health|pot||1|210||||||||||||||1|40|40|||||||||||||||||};
+{health_major2|items_consumables:28|Major potion of health|pot|||280||||||||||||||1|40|40|||||||||||||||||};
+{mead|items_consumables:51|Mead|pot|||15||||||||||||||1|1|1|||||||||||||||||};
+{milk|items_consumables:55|Milk|pot|||21||||||||||||||1|2|2|||||||||||||||||};
+{bonemeal_potion|items_consumables:34|Bonemeal potion|pot||1|45||||||||||||||1|40|40|||||||||||||||||};
        </string>
        
        <string name="itemlist_animal">
 [id|iconID|name|category|displaytype|hasManualPrice|baseMarketCost|hasEquipEffect|equip_boostMaxHP|equip_boostMaxAP|equip_moveCostPenalty|equip_attackCost|equip_attackChance|equip_criticalChance|equip_criticalMultiplier|equip_attackDamage_Min|equip_attackDamage_Max|equip_blockChance|equip_damageResistance|equip_conditions[condition|magnitude|]|hasUseEffect|use_boostHP_Min|use_boostHP_Max|use_boostAP_Min|use_boostAP_Max|use_conditionsSource[condition|magnitude|duration|chance|]|hasHitEffect|hit_boostHP_Min|hit_boostHP_Max|hit_boostAP_Min|hit_boostAP_Max|hit_conditionsSource[condition|magnitude|duration|chance|]|hit_conditionsTarget[condition|magnitude|duration|chance|]|hasKillEffect|kill_boostHP_Min|kill_boostHP_Max|kill_boostAP_Min|kill_boostAP_Max|kill_conditionsSource[condition|magnitude|duration|chance|]|];
-{hair|items_misc:48|Animal hair|31||1|2|||||||||||||||||||||||||||||||||};
-{insectwing|items_misc:52|Insect wing|31||1|3|||||||||||||||||||||||||||||||||};
-{bone|items_misc:44|Bone|31||1|2|||||||||||||||||||||||||||||||||};
-{claws|items_misc:47|Claws|31||1|2|||||||||||||||||||||||||||||||||};
-{shell|items_misc:54|Insect shell|31||1|2|||||||||||||||||||||||||||||||||};
-{gland|actorconditions_1:60|Poison gland|31||1|15|||||||||||||||||||||||||||||||||};
-{rat_tail|items_misc:38|Rat tail|31||1|2|||||||||||||||||||||||||||||||||};
+{hair|items_misc:48|Animal hair|animal||1|2|||||||||||||||||||||||||||||||||};
+{insectwing|items_misc:52|Insect wing|animal||1|3|||||||||||||||||||||||||||||||||};
+{bone|items_misc:44|Bone|animal||1|2|||||||||||||||||||||||||||||||||};
+{claws|items_misc:47|Claws|animal||1|2|||||||||||||||||||||||||||||||||};
+{shell|items_misc:54|Insect shell|animal||1|2|||||||||||||||||||||||||||||||||};
+{gland|actorconditions_1:60|Poison gland|animal||1|15|||||||||||||||||||||||||||||||||};
+{rat_tail|items_misc:38|Rat tail|animal||1|2|||||||||||||||||||||||||||||||||};
        </string>
 
 <!--
        <string name="itemlist_pre0610_unused">
 [id|iconID|name|category|displaytype|hasManualPrice|baseMarketCost|hasEquipEffect|equip_boostMaxHP|equip_boostMaxAP|equip_moveCostPenalty|equip_attackCost|equip_attackChance|equip_criticalChance|equip_criticalMultiplier|equip_attackDamage_Min|equip_attackDamage_Max|equip_blockChance|equip_damageResistance|equip_conditions[condition|magnitude|]|hasUseEffect|use_boostHP_Min|use_boostHP_Max|use_boostAP_Min|use_boostAP_Max|use_conditionsSource[condition|magnitude|duration|chance|]|hasHitEffect|hit_boostHP_Min|hit_boostHP_Max|hit_boostAP_Min|hit_boostAP_Max|hit_conditionsSource[condition|magnitude|duration|chance|]|hit_conditionsTarget[condition|magnitude|duration|chance|]|hasKillEffect|kill_boostHP_Min|kill_boostHP_Max|kill_boostAP_Min|kill_boostAP_Max|kill_conditionsSource[condition|magnitude|duration|chance|]|];
-{eye|items_misc:45|Eye|31||1|6|||||||||||||||||||||||||||||||||};
-{bat_wing|items_misc:46|Bat wing|31||1|2|||||||||||||||||||||||||||||||||};
-{feather|items_misc:16|Feather|31||1|6|||||||||||||||||||||||||||||||||};
-{red_feather|items_misc:15|Red feather|31||1|11|||||||||||||||||||||||||||||||||};
-{clay|actorconditions_1:9|Lump of clay|31||1|1|||||||||||||||||||||||||||||||||};
-{gem6|items_misc:4|Shimmering gem|31||1|26|||||||||||||||||||||||||||||||||};
-{gem8|actorconditions_1:50|Brilliant gem|31||1|68|||||||||||||||||||||||||||||||||};
+{eye|items_misc:45|Eye|animal||1|6|||||||||||||||||||||||||||||||||};
+{bat_wing|items_misc:46|Bat wing|animal||1|2|||||||||||||||||||||||||||||||||};
+{feather|items_misc:16|Feather|animal||1|6|||||||||||||||||||||||||||||||||};
+{red_feather|items_misc:15|Red feather|animal||1|11|||||||||||||||||||||||||||||||||};
+{clay|actorconditions_1:9|Lump of clay|other||1|1|||||||||||||||||||||||||||||||||};
+{gem6|items_misc:4|Shimmering gem|gem||1|26|||||||||||||||||||||||||||||||||};
+{gem8|actorconditions_1:50|Brilliant gem|gem||1|68|||||||||||||||||||||||||||||||||};
        </string>
 -->
 
        <string name="itemlist_junk">
 [id|iconID|name|category|displaytype|hasManualPrice|baseMarketCost|hasEquipEffect|equip_boostMaxHP|equip_boostMaxAP|equip_moveCostPenalty|equip_attackCost|equip_attackChance|equip_criticalChance|equip_criticalMultiplier|equip_attackDamage_Min|equip_attackDamage_Max|equip_blockChance|equip_damageResistance|equip_conditions[condition|magnitude|]|hasUseEffect|use_boostHP_Min|use_boostHP_Max|use_boostAP_Min|use_boostAP_Max|use_conditionsSource[condition|magnitude|duration|chance|]|hasHitEffect|hit_boostHP_Min|hit_boostHP_Max|hit_boostAP_Min|hit_boostAP_Max|hit_conditionsSource[condition|magnitude|duration|chance|]|hit_conditionsTarget[condition|magnitude|duration|chance|]|hasKillEffect|kill_boostHP_Min|kill_boostHP_Max|kill_boostAP_Min|kill_boostAP_Max|kill_conditionsSource[condition|magnitude|duration|chance|]|];
-{rock|items_misc:28|Small rock|31||1|1|||||||||||||||||||||||||||||||||};
-{gem1|items_misc:0|Glass gem|31||1|2|||||||||||||||||||||||||||||||||};
-{gem2|items_misc:1|Ruby gem|31||1|6|||||||||||||||||||||||||||||||||};
-{gem3|items_misc:2|Polished gem|31||1|8|||||||||||||||||||||||||||||||||};
-{gem4|items_misc:3|Sharpened gem|31||1|13|||||||||||||||||||||||||||||||||};
-{gem5|items_misc:5|Polished sparkling gem|31||1|15|||||||||||||||||||||||||||||||||};
+{rock|items_misc:28|Small rock|gem||1|1|||||||||||||||||||||||||||||||||};
+{gem1|items_misc:0|Glass gem|gem||1|2|||||||||||||||||||||||||||||||||};
+{gem2|items_misc:1|Ruby gem|gem||1|6|||||||||||||||||||||||||||||||||};
+{gem3|items_misc:2|Polished gem|gem||1|8|||||||||||||||||||||||||||||||||};
+{gem4|items_misc:3|Sharpened gem|gem||1|13|||||||||||||||||||||||||||||||||};
+{gem5|items_misc:5|Polished sparkling gem|gem||1|15|||||||||||||||||||||||||||||||||};
        </string>
        
        <string name="itemlist_quest">
 [id|iconID|name|category|displaytype|hasManualPrice|baseMarketCost|hasEquipEffect|equip_boostMaxHP|equip_boostMaxAP|equip_moveCostPenalty|equip_attackCost|equip_attackChance|equip_criticalChance|equip_criticalMultiplier|equip_attackDamage_Min|equip_attackDamage_Max|equip_blockChance|equip_damageResistance|equip_conditions[condition|magnitude|]|hasUseEffect|use_boostHP_Min|use_boostHP_Max|use_boostAP_Min|use_boostAP_Max|use_conditionsSource[condition|magnitude|duration|chance|]|hasHitEffect|hit_boostHP_Min|hit_boostHP_Max|hit_boostAP_Min|hit_boostAP_Max|hit_conditionsSource[condition|magnitude|duration|chance|]|hit_conditionsTarget[condition|magnitude|duration|chance|]|hasKillEffect|kill_boostHP_Min|kill_boostHP_Max|kill_boostAP_Min|kill_boostAP_Max|kill_conditionsSource[condition|magnitude|duration|chance|]|];
-{tail_caverat|items_misc:38|Cave rat tail|31|1|1|0|||||||||||||||||||||||||||||||||};
-{tail_trainingrat|items_misc:38|Small rat tail|31|1|1|0|||||||||||||||||||||||||||||||||};
-{ring_mikhail|items_jewelry:0|Mikhail\'s ring|7|||15|1|||||10|||||||||||||||||||||||||||};
-{neck_irogotu|items_jewelry:7|Irogotu\'s necklace|6|3|1|30|1||||||||||5|1|||||||||||||||||||||};
-{ring_gandir|items_jewelry:0|Gandir\'s ring|31|1|1|0|||||||||||||||||||||||||||||||||};
-{dagger_venom|items_weapons:17|Venomous Dagger|0|3||15|1||||4|10|5|2|1|2|||||||||||||||||||||||};
-{key_luthor|items_misc:21|Key of Luthor|31|1|1|0|||||||||||||||||||||||||||||||||};
-{calomyran_secrets|items_books:0|Calomyran secrets|31|1|1|0|||||||||||||||||||||||||||||||||};
-{heartstone|items_misc:6|Heartstone|31|1|1|0|||||||||||||||||||||||||||||||||};
-{vacor_spell|items_books:7|Piece of Vacor\'s spell|31|1|1|0|||||||||||||||||||||||||||||||||};
-{ring_unzel|items_jewelry:0|Unzel\'s ring|31|1|1|0|||||||||||||||||||||||||||||||||};
-{ring_vacor|items_jewelry:0|Vacor\'s ring|31|1|1|0|||||||||||||||||||||||||||||||||};
-{boots_unzel|items_armours:29|Unzel\'s defensive boots|5|3||185|1||||||||||8||||||||||||||||||||||};
-{boots_vacor|items_armours:29|Vacor\'s boots of attack|5|3||185|1|||||9|||||2||||||||||||||||||||||};
-{necklace_flagstone|items_jewelry:6|Flagstone Warden\'s necklace|31|1|1|0|||||||||||||||||||||||||||||||||};
-{packhide|items_armours:15|Wolfpack\'s animal hide|3|3|1|121|1|||||-15|||||2|1|||||||||||||||||||||};
-{sword_flagstone|items_weapons:7|Flagstone\'s pride|0|3||169|1||||4|21|10|2|1|6|||||||||||||||||||||||};
+{tail_caverat|items_misc:38|Cave rat tail|animal|1|1|0|||||||||||||||||||||||||||||||||};
+{tail_trainingrat|items_misc:38|Small rat tail|animal|1|1|0|||||||||||||||||||||||||||||||||};
+{ring_mikhail|items_jewelry:0|Mikhail\'s ring|ring|||15|1|||||10|||||||||||||||||||||||||||};
+{neck_irogotu|items_jewelry:7|Irogotu\'s necklace|neck|3|1|30|1||||||||||5|1|||||||||||||||||||||};
+{ring_gandir|items_jewelry:0|Gandir\'s ring|other|1|1|0|||||||||||||||||||||||||||||||||};
+{dagger_venom|items_weapons:17|Venomous Dagger|dagger|3||15|1||||4|10|5|2|1|2|||||||||||||||||||||||};
+{key_luthor|items_misc:21|Key of Luthor|other|1|1|0|||||||||||||||||||||||||||||||||};
+{calomyran_secrets|items_books:0|Calomyran secrets|other|1|1|0|||||||||||||||||||||||||||||||||};
+{heartstone|items_misc:6|Heartstone|gem|1|1|0|||||||||||||||||||||||||||||||||};
+{vacor_spell|items_books:7|Piece of Vacor\'s spell|other|1|1|0|||||||||||||||||||||||||||||||||};
+{ring_unzel|items_jewelry:0|Unzel\'s ring|other|1|1|0|||||||||||||||||||||||||||||||||};
+{ring_vacor|items_jewelry:0|Vacor\'s ring|other|1|1|0|||||||||||||||||||||||||||||||||};
+{boots_unzel|items_armours:29|Unzel\'s defensive boots|feet_lthr|3||185|1||||||||||8||||||||||||||||||||||};
+{boots_vacor|items_armours:29|Vacor\'s boots of attack|feet_lthr|3||185|1|||||9|||||2||||||||||||||||||||||};
+{necklace_flagstone|items_jewelry:6|Flagstone Warden\'s necklace|other|1|1|0|||||||||||||||||||||||||||||||||};
+{packhide|items_armours:15|Wolfpack\'s animal hide|bdy_hide|3|1|121|1|||||-15|||||2|1|||||||||||||||||||||};
+{sword_flagstone|items_weapons:7|Flagstone\'s pride|lsword|3||169|1||||4|21|10|2|1|6|||||||||||||||||||||||};
        </string>
        
        <string name="itemlist_v068">
 [id|iconID|name|category|displaytype|hasManualPrice|baseMarketCost|hasEquipEffect|equip_boostMaxHP|equip_boostMaxAP|equip_moveCostPenalty|equip_attackCost|equip_attackChance|equip_criticalChance|equip_criticalMultiplier|equip_attackDamage_Min|equip_attackDamage_Max|equip_blockChance|equip_damageResistance|equip_conditions[condition|magnitude|]|hasUseEffect|use_boostHP_Min|use_boostHP_Max|use_boostAP_Min|use_boostAP_Max|use_conditionsSource[condition|magnitude|duration|chance|]|hasHitEffect|hit_boostHP_Min|hit_boostHP_Max|hit_boostAP_Min|hit_boostAP_Max|hit_conditionsSource[condition|magnitude|duration|chance|]|hit_conditionsTarget[condition|magnitude|duration|chance|]|hasKillEffect|kill_boostHP_Min|kill_boostHP_Max|kill_boostAP_Min|kill_boostAP_Max|kill_conditionsSource[condition|magnitude|duration|chance|]|];
-{armor_chain1|items_armours:17|Rusty chain mail|3|||3629|1|||||-9|||||20||||||||||||||||||||||};
-{armor_chain2|items_armours:17|Ordinary chain mail|3|||4191|1|||||-10|||||22||||||||||||||||||||||};
-{hat_leather1|items_armours:24|Ordinary leather cap|2|||261|1|||||-2|||||7||||||||||||||||||||||};
-{sleepingmead|items_consumables:51|Prepared sleepy mead|31|1|1|0|||||||||||||||||||||||||||||||||};
-{ffguard_qitem|items_jewelry:0|Feygard patrol ring|31|1|1|0|||||||||||||||||||||||||||||||||};
-{shield6|items_armours:3|Wooden tower shield|1|||952|1|||||-6|||||12||||||||||||||||||||||};
-{shield7|items_armours:3|Strong wooden tower shield|1|||1538|1|||||-6|||||14||||||||||||||||||||||};
-{club_wood1|items_weapons:44|Heavy iron club|0|||950|1||||8|15|5|3|2|11|||||||||||||||||||||||};
-{club_wood2|items_weapons:44|Balanced heavy iron club|0|||2194|1||||7|10|10|3|2|11|||||||||||||||||||||||};
-{gloves_grip|items_armours:35|Gloves of better grip|4|||471|1|||||9|||||1||||||||||||||||||||||};
-{gloves_fancy|items_armours:35|Fancy gloves|4|||78|1|||||5|||||||||||||||||||||||||||};
-{ring_crit1|items_jewelry:0|Ring of strike|7|4||2921|1||||||5||||||||||||||||||||||||||};
-{ring_crit2|items_jewelry:0|Ring of vicious strike|7|4||3455|1|||||-3|7||||||||||||||||||||||||||};
-{armor_stone|items_armours:17|Stone Cuirass|3|3||52|1||||2||||||22|1|||||||||||||||||||||};
-{ring_shadow0|items_jewelry:2|Ring of lesser Shadow|7|2|1|0|1|||||25|6||4|7|5||{{regen|1|}}||||||||||||||||||||};
+{armor_chain1|items_armours:17|Rusty chain mail|chmail|||3629|1|||||-9|||||20||||||||||||||||||||||};
+{armor_chain2|items_armours:17|Ordinary chain mail|chmail|||4191|1|||||-10|||||22||||||||||||||||||||||};
+{hat_leather1|items_armours:24|Ordinary leather cap|hd_lthr|||261|1|||||-2|||||7||||||||||||||||||||||};
+{sleepingmead|items_consumables:51|Prepared sleepy mead|other|1|1|0|||||||||||||||||||||||||||||||||};
+{ffguard_qitem|items_jewelry:0|Feygard patrol ring|other|1|1|0|||||||||||||||||||||||||||||||||};
+{shield6|items_armours:3|Wooden tower shield|shld_twr|||952|1|||||-6|||||12||||||||||||||||||||||};
+{shield7|items_armours:3|Strong wooden tower shield|shld_twr|||1538|1|||||-6|||||14||||||||||||||||||||||};
+{club_wood1|items_weapons:44|Heavy iron club|mace|||950|1||||8|15|5|3|2|11|||||||||||||||||||||||};
+{club_wood2|items_weapons:44|Balanced heavy iron club|mace|||2194|1||||7|10|10|3|2|11|||||||||||||||||||||||};
+{gloves_grip|items_armours:35|Gloves of better grip|hnd_lthr|||471|1|||||9|||||1||||||||||||||||||||||};
+{gloves_fancy|items_armours:35|Fancy gloves|hnd_cloth|||78|1|||||5|||||||||||||||||||||||||||};
+{ring_crit1|items_jewelry:0|Ring of strike|ring|4||2921|1||||||5||||||||||||||||||||||||||};
+{ring_crit2|items_jewelry:0|Ring of vicious strike|ring|4||3455|1|||||-3|7||||||||||||||||||||||||||};
+{armor_stone|items_armours:17|Stone Cuirass|bdy_hv|3||52|1||||2||||||22|1|||||||||||||||||||||};
+{ring_shadow0|items_jewelry:2|Ring of lesser Shadow|ring|2|1|0|1|||||25|6||4|7|5||{{regen|1|}}||||||||||||||||||||};
        </string>
 
        <string name="itemlist_v069">
 [id|iconID|name|category|displaytype|hasManualPrice|baseMarketCost|hasEquipEffect|equip_boostMaxHP|equip_boostMaxAP|equip_moveCostPenalty|equip_attackCost|equip_attackChance|equip_criticalChance|equip_criticalMultiplier|equip_attackDamage_Min|equip_attackDamage_Max|equip_blockChance|equip_damageResistance|equip_conditions[condition|magnitude|]|hasUseEffect|use_boostHP_Min|use_boostHP_Max|use_boostAP_Min|use_boostAP_Max|use_conditionsSource[condition|magnitude|duration|chance|]|hasHitEffect|hit_boostHP_Min|hit_boostHP_Max|hit_boostAP_Min|hit_boostAP_Max|hit_conditionsSource[condition|magnitude|duration|chance|]|hit_conditionsTarget[condition|magnitude|duration|chance|]|hasKillEffect|kill_boostHP_Min|kill_boostHP_Max|kill_boostAP_Min|kill_boostAP_Max|kill_conditionsSource[condition|magnitude|duration|chance|]|];
-{rapier_lifesteal|items_weapons:71|Rapier of lifesteal|0|2|1|0|1|5|||5|21|||1|6||||||||||1|0|3|||||1|3|3||||};
-{dagger_barbed|items_weapons:17|Barbed dagger|0|3|1|0|1||||4|15|||0|0|5|||||||||1||||||{{bleeding_wound|1|5|50|}}|||||||};
-{elytharan_redeemer|items_weapons:70|Elytharan redeemer|0|2|1|0|1||2||5|25|||3|8|5||{{bless|1|}}|0|||||||||||||||||||};
-{clouded_rage|items_weapons:71|Sword of Shadow\'s rage|0|3|1|0|1||||5|21|||3|6|5|||0|||||||||||||1|||||{{rage_minor|1|1|50|}}|};
-{shadow_slayer|items_weapons:60|Shadow of the slayer|0|3|1|0|1||2||7|25|10|2|5|9|||||||||||||||||1|1|1||||};
+{rapier_lifesteal|items_weapons:71|Rapier of lifesteal|2hsword|2|1|0|1|5|||5|21|||1|6||||||||||1|0|3|||||1|3|3||||};
+{dagger_barbed|items_weapons:17|Barbed dagger|dagger|3|1|0|1||||4|15|||0|0|5|||||||||1||||||{{bleeding_wound|1|5|50|}}|||||||};
+{elytharan_redeemer|items_weapons:70|Elytharan redeemer|2hsword|2|1|0|1||2||5|25|||3|8|5||{{bless|1|}}|0|||||||||||||||||||};
+{clouded_rage|items_weapons:71|Sword of Shadow\'s rage|2hsword|3|1|0|1||||5|21|||3|6|5|||0|||||||||||||1|||||{{rage_minor|1|1|50|}}|};
+{shadow_slayer|items_weapons:60|Shadow of the slayer|axe2h|3|1|0|1||2||7|25|10|2|5|9|||||||||||||||||1|1|1||||};
 
-{ring_shadow_embrace|items_jewelry:0|Ring of Shadow embrace|7|3|1|0|1|20||||10|||2|2|||||||||||||||||||||||};
+{ring_shadow_embrace|items_jewelry:0|Ring of Shadow embrace|ring|3|1|0|1|20||||10|||2|2|||||||||||||||||||||||};
 
-{bwm_dagger|items_weapons:19|Blackwater dagger|0|4|1|539|1||||3|40|||1|1|5||{{blackwater_misery|1|}}||||||||||||||||||||};
-{bwm_dagger_venom|items_weapons:19|Blackwater poisoned dagger|0|4|1|1552|1||||3|45|||1|1|||{{blackwater_misery|1|}}|||||||1||||||{{poison_weak|1|5|50|}}|||||||};
-{bwm_ironsword|items_weapons:0|Blackwater iron sword|0|4|1|1224|1||||4|50|||3|7|5||{{blackwater_misery|1|}}||||||||||||||||||||};
-{bwm_leather_armour|items_armours:15|Blackwater leather armour|3|4|1|2551|1||||||||||25|1|{{blackwater_misery|1|}}||||||||||||||||||||};
-{bwm_leather_cap|items_armours:24|Blackwater leather cap|2|4|1|722|1|5|||||||||21||{{blackwater_misery|1|}}||||||||||||||||||||};
-{bwm_combat_ring|items_jewelry:2|Blackwater ring of combat|7|4|1|595|1|||||5|||0|7|||{{blackwater_misery|1|}}||||||||||||||||||||};
-{bwm_brew|items_consumables:51|Blackwater brew|20||1|57||||||||||||||1|15|15|||{{intoxicated|1|10|100|}}||||||||||||||};
-{woodcutter_hatchet|items_weapons:57|Woodcutter\'s hatchet|0|||0|1||||6|9|||6|12|||||||||||||||||||||||};
-{woodcutter_boots|items_armours:30|Woodcutter\'s boots|5|||873|1|1||||3|||||8||||||||||||||||||||||};
-{heavy_club|items_weapons:44|Heavy club|0|||1229|1||||7|15|5|3|2|15|||||||||||||||||||||||};
+{bwm_dagger|items_weapons:19|Blackwater dagger|dagger|4|1|539|1||||3|40|||1|1|5||{{blackwater_misery|1|}}||||||||||||||||||||};
+{bwm_dagger_venom|items_weapons:19|Blackwater poisoned dagger|dagger|4|1|1552|1||||3|45|||1|1|||{{blackwater_misery|1|}}|||||||1||||||{{poison_weak|1|5|50|}}|||||||};
+{bwm_ironsword|items_weapons:0|Blackwater iron sword|lsword|4|1|1224|1||||4|50|||3|7|5||{{blackwater_misery|1|}}||||||||||||||||||||};
+{bwm_leather_armour|items_armours:15|Blackwater leather armour|bdy_lthr|4|1|2551|1||||||||||25|1|{{blackwater_misery|1|}}||||||||||||||||||||};
+{bwm_leather_cap|items_armours:24|Blackwater leather cap|hd_lthr|4|1|722|1|5|||||||||21||{{blackwater_misery|1|}}||||||||||||||||||||};
+{bwm_combat_ring|items_jewelry:2|Blackwater ring of combat|ring|4|1|595|1|||||5|||0|7|||{{blackwater_misery|1|}}||||||||||||||||||||};
+{bwm_brew|items_consumables:51|Blackwater brew|pot||1|57||||||||||||||1|15|15|||{{intoxicated|1|10|100|}}||||||||||||||};
+{woodcutter_hatchet|items_weapons:57|Woodcutter\'s hatchet|axe|||0|1||||6|9|||6|12|||||||||||||||||||||||};
+{woodcutter_boots|items_armours:30|Woodcutter\'s boots|feet_lthr|||873|1|1||||3|||||8||||||||||||||||||||||};
+{heavy_club|items_weapons:44|Heavy club|mace|||1229|1||||7|15|5|3|2|15|||||||||||||||||||||||};
 
-{pot_speed_1|items_consumables:41|Minor potion of speed|20||1|261||||||||||||||1|||||{{speed_minor|1|5|100|}}||||||||||||||};
-{pot_poison_weak|items_consumables:40|Weak poison|20||1|125||||||||||||||1|||||{{poison_weak|1|5|100|}}||||||||||||||};
-{pot_poison_weak_antidote|items_consumables:54|Weak poison antidote|20||1|337||||||||||||||1|||||{{poison_weak|-99||100|}}||||||||||||||};
-{pot_bleeding_ointment|items_consumables:35|Ointment of bleeding wounds|20||1|310||||||||||||||1|||||{{bleeding_wound|-99||100|}}||||||||||||||};
-{pot_fatigue_restore|items_consumables:41|Restore fatigue|20||1|210||||||||||||||1|||||{{fatigue_minor|-99||100|}}||||||||||||||};
+{pot_speed_1|items_consumables:41|Minor potion of speed|pot||1|261||||||||||||||1|||||{{speed_minor|1|5|100|}}||||||||||||||};
+{pot_poison_weak|items_consumables:40|Weak poison|pot||1|125||||||||||||||1|||||{{poison_weak|1|5|100|}}||||||||||||||};
+{pot_poison_weak_antidote|items_consumables:54|Weak poison antidote|pot||1|337||||||||||||||1|||||{{poison_weak|-99||100|}}||||||||||||||};
+{pot_bleeding_ointment|items_consumables:35|Ointment of bleeding wounds|pot||1|310||||||||||||||1|||||{{bleeding_wound|-99||100|}}||||||||||||||};
+{pot_fatigue_restore|items_consumables:41|Restore fatigue|pot||1|210||||||||||||||1|||||{{fatigue_minor|-99||100|}}||||||||||||||};
 
-{pot_blind_rage|items_consumables:63|Potion of blind rage|20||1|495||||||||||||||1|||||{{rage_minor|1|5|100|}}|0|||||||0||||||};
+{pot_blind_rage|items_consumables:63|Potion of blind rage|pot||1|495||||||||||||||1|||||{{rage_minor|1|5|100|}}|0|||||||0||||||};
        </string>
 
        <string name="itemlist_v069_2">
 [id|iconID|name|category|displaytype|hasManualPrice|baseMarketCost|hasEquipEffect|equip_boostMaxHP|equip_boostMaxAP|equip_moveCostPenalty|equip_attackCost|equip_attackChance|equip_criticalChance|equip_criticalMultiplier|equip_attackDamage_Min|equip_attackDamage_Max|equip_blockChance|equip_damageResistance|equip_conditions[condition|magnitude|]|hasUseEffect|use_boostHP_Min|use_boostHP_Max|use_boostAP_Min|use_boostAP_Max|use_conditionsSource[condition|magnitude|duration|chance|]|hasHitEffect|hit_boostHP_Min|hit_boostHP_Max|hit_boostAP_Min|hit_boostAP_Max|hit_conditionsSource[condition|magnitude|duration|chance|]|hit_conditionsTarget[condition|magnitude|duration|chance|]|hasKillEffect|kill_boostHP_Min|kill_boostHP_Max|kill_boostAP_Min|kill_boostAP_Max|kill_conditionsSource[condition|magnitude|duration|chance|]|];
-{rusted_iron_sword|items_weapons:0|Rusted iron sword|0|||52|1||||5|10|||1|2|||||||||||||||||||||||};
-{broken_buckler|items_armours:0|Broken wooden buckler|1|||120|1|||||-5|||||1||||||||||||||||||||||};
-{used_gloves|items_armours:35|Blood-stained gloves|4|||56|1||||||||||1||||||||||||||||||||||};
+{rusted_iron_sword|items_weapons:0|Rusted iron sword|lsword|||52|1||||5|10|||1|2|||||||||||||||||||||||};
+{broken_buckler|items_armours:0|Broken wooden buckler|buckler|||120|1|||||-5|||||1||||||||||||||||||||||};
+{used_gloves|items_armours:35|Blood-stained gloves|hnd_lthr|||56|1||||||||||1||||||||||||||||||||||};
        </string>
 
        <string name="itemlist_v069_questitems">
 [id|iconID|name|category|displaytype|hasManualPrice|baseMarketCost|hasEquipEffect|equip_boostMaxHP|equip_boostMaxAP|equip_moveCostPenalty|equip_attackCost|equip_attackChance|equip_criticalChance|equip_criticalMultiplier|equip_attackDamage_Min|equip_attackDamage_Max|equip_blockChance|equip_damageResistance|equip_conditions[condition|magnitude|]|hasUseEffect|use_boostHP_Min|use_boostHP_Max|use_boostAP_Min|use_boostAP_Max|use_conditionsSource[condition|magnitude|duration|chance|]|hasHitEffect|hit_boostHP_Min|hit_boostHP_Max|hit_boostAP_Min|hit_boostAP_Max|hit_conditionsSource[condition|magnitude|duration|chance|]|hit_conditionsTarget[condition|magnitude|duration|chance|]|hasKillEffect|kill_boostHP_Min|kill_boostHP_Max|kill_boostAP_Min|kill_boostAP_Max|kill_conditionsSource[condition|magnitude|duration|chance|]|];
-{bwm_claws|items_misc:47|White wyrm claw|31||1|35|||||||||||||||||||||||||||||||||};
-{bwm_permit|items_books:8|Forged papers for Blackwater|31|1|1|0|||||||||||||||||||||||||||||||||};
-{bjorgur_dagger|items_weapons:14|Bjorgur\'s family dagger|0|1|1|0|1||||5||||||||||||||||||||||||||||};
-{q_kazaul_vial|items_consumables:57|Vial of purifying spirit|31|1|1|0|||||||||||||||||||||||||||||||||};
-{guthbered_id|items_jewelry:0|Guthbered\'s ring|31|1|1|0|||||||||||||||||||||||||||||||||};
-{harlenn_id|items_jewelry:0|Harlenn\'s ring|31|1|1|0|||||||||||||||||||||||||||||||||};
+{bwm_claws|items_misc:47|White wyrm claw|animal||1|35|||||||||||||||||||||||||||||||||};
+{bwm_permit|items_books:8|Forged papers for Blackwater|other|1|1|0|||||||||||||||||||||||||||||||||};
+{bjorgur_dagger|items_weapons:14|Bjorgur\'s family dagger|dagger|1|1|0|1||||5||||||||||||||||||||||||||||};
+{q_kazaul_vial|items_consumables:57|Vial of purifying spirit|other|1|1|0|||||||||||||||||||||||||||||||||};
+{guthbered_id|items_jewelry:0|Guthbered\'s ring|other|1|1|0|||||||||||||||||||||||||||||||||};
+{harlenn_id|items_jewelry:0|Harlenn\'s ring|other|1|1|0|||||||||||||||||||||||||||||||||};
        </string>
 
        <string name="itemlist_v0610_1">
 [id|iconID|name|category|displaytype|hasManualPrice|baseMarketCost|hasEquipEffect|equip_boostMaxHP|equip_boostMaxAP|equip_moveCostPenalty|equip_attackCost|equip_attackChance|equip_criticalChance|equip_criticalMultiplier|equip_attackDamage_Min|equip_attackDamage_Max|equip_blockChance|equip_damageResistance|equip_conditions[condition|magnitude|]|hasUseEffect|use_boostHP_Min|use_boostHP_Max|use_boostAP_Min|use_boostAP_Max|use_conditionsSource[condition|magnitude|duration|chance|]|hasHitEffect|hit_boostHP_Min|hit_boostHP_Max|hit_boostAP_Min|hit_boostAP_Max|hit_conditionsSource[condition|magnitude|duration|chance|]|hit_conditionsTarget[condition|magnitude|duration|chance|]|hasKillEffect|kill_boostHP_Min|kill_boostHP_Max|kill_boostAP_Min|kill_boostAP_Max|kill_conditionsSource[condition|magnitude|duration|chance|]|];
-{dagger_shadow_priests|items_weapons:17|Dagger of the Shadow priests|0|3|1|15|1||||4|20|20|3|1|2|||||||||||||||||||||||};
-{sword_hard_iron|items_weapons:0|Hardened iron sword|0||0|369|1||||5|15|||2|4|||||||||||||||||||||||};
-{club_fine_wooden|items_weapons:42|Fine wooden club|0||0|245|1||||5|12|||0|7|||||||||||||||||||||||};
-{axe_fine_iron|items_weapons:56|Fine iron axe|0||0|365|1||||6|9|||4|6|||||||||||||||||||||||};
-{longsword_hard_iron|items_weapons:1|Hardened iron longsword|0||0|362|1||||5|14|||2|6|||||||||||||||||||||||};
-{broadsword_fine_iron|items_weapons:5|Fine iron broadsword|0||0|422|1||||7|5|||4|10|||||||||||||||||||||||};
-{dagger_sharp_steel|items_weapons:14|Sharp steel dagger|0||0|1428|1||||4|24|||2|4|||||||||||||||||||||||};
-{sword_balanced_steel|items_weapons:7|Balanced steel sword|0||0|2797|1||||4|32|||3|7|||||||||||||||||||||||};
-{broadsword_fine_steel|items_weapons:6|Fine steel broadsword|0||0|1206|1||||6|20|||4|11|||||||||||||||||||||||};
-{sword_defenders|items_weapons:2|Defender\'s blade|0||0|1711|1||||5|26|||3|7|3||||||||||||||||||||||};
-{sword_villains|items_weapons:16|Villain\'s blade|0||0|1665|1||||4|20|5|3|1|2|||||||||||||||||||||||};
-{sword_challengers|items_weapons:1|Challenger\'s iron sword|0||0|785|1||||5|20|||2|6|||||||||||||||||||||||};
-{sword_fencing|items_weapons:13|Fencing blade|0||0|922|1||||4|14|||2|5|5||||||||||||||||||||||};
-{club_brutal|items_weapons:44|Brutal club|0||0|2522|1||||7|20|5|3|2|21|||||||||||||||||||||||};
-{axe_gutsplitter|items_weapons:58|Gutsplitter|0||0|2733|1||||6|21|||7|17|||||||||||||||||||||||};
-{hammer_skullcrusher|items_weapons:45|Skullcrusher|0||0|3142|1||||7|20|5|3|0|26|||||||||||||||||||||||};
-{shield_crude_wooden|items_armours:0|Crude wooden buckler|1||0|31|1||||||||||1||||||||||||||||||||||};
-{shield_cracked_wooden|items_armours:0|Cracked wooden buckler|1||0|34|1|||||-2|||||2||||||||||||||||||||||};
-{shield_wooden_buckler|items_armours:0|Second-hand wooden buckler|1||0|92|1|||||-2|||||3||||||||||||||||||||||};
-{shield_wooden|items_armours:2|Wooden shield|1||0|514|1|||||-4|||||8||||||||||||||||||||||};
-{shield_wooden_defender|items_armours:2|Wooden defender|1||0|1996|1|||||-8|-5||||14|1|||||||||||||||||||||};
-{hat_hard_leather|items_armours:24|Hardened leather cap|2||0|648|1|||||-3|-1||||8||||||||||||||||||||||};
-{hat_fine_leather|items_armours:24|Fine leather cap|2||0|846|1|||||-3|-2||||9||||||||||||||||||||||};
-{hat_leather_vision|items_armours:24|Leather cap of reduced vision|2||0|971|1|||||-3|-4||||10||||||||||||||||||||||};
-{helm_crude_iron|items_armours:25|Crude iron helmet|2||0|1120|1|||||-3|-5||||11||||||||||||||||||||||};
-{shirt_torn|items_armours:14|Torn shirt|3||0|92|1|||||-2|||||3||||||||||||||||||||||};
-{shirt_weathered|items_armours:14|Weathered shirt|3||0|125|1|||||-1|||||3||||||||||||||||||||||};
-{shirt_patched_cloth|items_armours:14|Patched cloth shirt|3||0|208|1||||||||||4||||||||||||||||||||||};
-{armour_crude_leather|items_armours:16|Crude leather armour|3||0|514|1|||||-4|||||8||||||||||||||||||||||};
-{armour_firm_leather|items_armours:16|Firm leather armour|3||0|417|1|||1|||||||8||||||||||||||||||||||};
-{armour_rigid_leather|items_armours:16|Rigid leather armour|3||0|625|1|||1||-1|||||9||||||||||||||||||||||};
-{armour_rigid_chain|items_armours:17|Rigid chain mail|3||0|4667|1||||1|-5|||||23||||||||||||||||||||||};
-{armour_superior_chain|items_armours:17|Superior chain mail|3||0|5992|1|||||-9|||||23||||||||||||||||||||||};
-{armour_chain_champ|items_armours:17|Champion\'s chain mail|3||0|6808|1|2||||-9|-5||||24||||||||||||||||||||||};
-{armour_leather_villain|items_armours:16|Villain\'s leather armour|3||0|3700|1|||-1||-4|3||||15||||||||||||||||||||||};
-{armour_misfortune|items_armours:15|Leather shirt of misfortune|3||0|2459|1|||||-5|||-1|-1|15||||||||||||||||||||||};
-{gloves_barbrawler|items_armours:35|Bar brawler\'s gloves|4||0|95|1|||||5|||||2||||||||||||||||||||||};
-{gloves_fumbling|items_armours:35|Gloves of fumbling|4||0|-432|1|||||-5|||||1||||||||||||||||||||||};
-{gloves_crude_cloth|items_armours:35|Crude cloth gloves|4||0|31|1||||||||||1||||||||||||||||||||||};
-{gloves_crude_leather|items_armours:35|Crude leather gloves|4||0|180|1|||||-4|||||6||||||||||||||||||||||};
-{gloves_troublemaker|items_armours:36|Troublemaker\'s gloves|4||0|501|1|1||||7|4||||4||||||||||||||||||||||};
-{gloves_guards|items_armours:37|Guard\'s gloves|4||0|636|1|3||||3|||||5||||||||||||||||||||||};
-{gloves_leather_attack|items_armours:35|Leather gloves of attack|4||0|510|1|3||||13|||||-2||||||||||||||||||||||};
-{gloves_woodcutter|items_armours:35|Woodcutter\'s gloves|4||0|426|1|3||||8|||||1||||||||||||||||||||||};
-{boots_crude_leather|items_armours:28|Crude leather boots|5||0|31|1||||||||||1||||||||||||||||||||||};
-{boots_sewn|items_armours:28|Sewn footwear|5||0|73|1||||||||||2||||||||||||||||||||||};
-{boots_coward|items_armours:28|Coward\'s boots|5||0|933|1|||-1|||||||2||||||||||||||||||||||};
-{boots_hard_leather|items_armours:30|Hardened leather boots|5||0|626|1|||1||-4|||||10||||||||||||||||||||||};
-{boots_defender|items_armours:30|Defender\'s boots|5||0|1190|1|2|||||||||9||||||||||||||||||||||};
-{necklace_shield_0|items_jewelry:7|Lesser shielding necklace|6||0|131|1||||||||||3||||||||||||||||||||||};
-{necklace_strike|items_jewelry:6|Necklace of strike|6||0|832|1|5|||||5||||||||||||||||||||||||||};
-{necklace_defender_stone|items_jewelry:7|Defender\'s stone|6|4|0|1325|1|||||||||||1|||||||||||||||||||||};
-{necklace_protector|items_jewelry:7|Necklace of the protector|6|4|0|3207|1|5||||||||||2|||||||||||||||||||||};
-{ring_crude_combat|items_jewelry:0|Crude combat ring|7||0|44|1|||||5|||0|1|||||||||||||||||||||||};
-{ring_crude_surehit|items_jewelry:0|Crude ring of surehit|7||0|52|1|||||7|||||||||||||||||||||||||||};
-{ring_crude_block|items_jewelry:0|Crude ring of block|7||0|73|1||||||||||2||||||||||||||||||||||};
-{ring_rough_life|items_jewelry:0|Rough ring of life force|7||0|100|1|1|||||||||||||||||||||||||||||||};
-{ring_fumbling|items_jewelry:0|Ring of fumbling|7||0|-463|1|||||-5|||||||||||||||||||||||||||};
-{ring_rough_damage|items_jewelry:0|Rough ring of damage|7||0|56|1||||||||0|2|||||||||||||||||||||||};
-{ring_barbrawler|items_jewelry:0|Bar brawler\'s ring|7||0|222|1|||||12|||0|1|||||||||||||||||||||||};
-{ring_dmg_3|items_jewelry:0|Ring of damage +3|7||0|624|1||||||||3|3|||||||||||||||||||||||};
-{ring_life|items_jewelry:0|Ring of life force|7||0|557|1|5|||||||||||||||||||||||||||||||};
-{ring_taverbrawler|items_jewelry:0|Tavern brawler\'s ring|7||0|314|1|||||12|||0|3|||||||||||||||||||||||};
-{ring_defender|items_jewelry:0|Defender\'s ring|7||0|755|1|||||-6|||||11||||||||||||||||||||||};
-{ring_challenger|items_jewelry:0|Challenger\'s ring|7||0|408|1|||||12|||||4||||||||||||||||||||||};
-{ring_dmg_4|items_jewelry:2|Ring of damage +4|7||0|1168|1||||||||4|4|||||||||||||||||||||||};
-{ring_troublemaker|items_jewelry:2|Troublemaker\'s ring|7||0|797|1|||||15|||2|4|||||||||||||||||||||||};
-{ring_guardian|items_jewelry:2|Ring of the guardian|7|4|0|1489|1|||||19|||3|5|||||||||||||||||||||||};
-{ring_block|items_jewelry:2|Ring of block|7|4|0|2192|1||||||||||13||||||||||||||||||||||};
-{ring_backstab|items_jewelry:2|Ring of backstabbing|7||0|1363|1|||||17|7||||3||||||||||||||||||||||};
-{ring_polished_combat|items_jewelry:2|Polished combat ring|7|4|0|1346|1|5||||15|||1|5|||||||||||||||||||||||};
-{ring_villain|items_jewelry:2|Villain\'s ring|7|4|0|2750|1|4||||25|||3|6|||||||||||||||||||||||};
-{ring_polished_backstab|items_jewelry:2|Polished ring of backstabbing|7|4|0|2731|1|||||21|7||4|4|||||||||||||||||||||||};
-{ring_protector|items_jewelry:4|Ring of the protector|7|4|0|3744|1|3||||20|||0|3|14||||||||||||||||||||||};
+{dagger_shadow_priests|items_weapons:17|Dagger of the Shadow priests|dagger|3|1|15|1||||4|20|20|3|1|2|||||||||||||||||||||||};
+{sword_hard_iron|items_weapons:0|Hardened iron sword|lsword||0|369|1||||5|15|||2|4|||||||||||||||||||||||};
+{club_fine_wooden|items_weapons:42|Fine wooden club|club||0|245|1||||5|12|||0|7|||||||||||||||||||||||};
+{axe_fine_iron|items_weapons:56|Fine iron axe|axe||0|365|1||||6|9|||4|6|||||||||||||||||||||||};
+{longsword_hard_iron|items_weapons:1|Hardened iron longsword|lsword||0|362|1||||5|14|||2|6|||||||||||||||||||||||};
+{broadsword_fine_iron|items_weapons:5|Fine iron broadsword|bsword||0|422|1||||7|5|||4|10|||||||||||||||||||||||};
+{dagger_sharp_steel|items_weapons:14|Sharp steel dagger|dagger||0|1428|1||||4|24|||2|4|||||||||||||||||||||||};
+{sword_balanced_steel|items_weapons:7|Balanced steel sword|lsword||0|2797|1||||4|32|||3|7|||||||||||||||||||||||};
+{broadsword_fine_steel|items_weapons:6|Fine steel broadsword|bsword||0|1206|1||||6|20|||4|11|||||||||||||||||||||||};
+{sword_defenders|items_weapons:2|Defender\'s blade|lsword||0|1711|1||||5|26|||3|7|3||||||||||||||||||||||};
+{sword_villains|items_weapons:16|Villain\'s blade|ssword||0|1665|1||||4|20|5|3|1|2|||||||||||||||||||||||};
+{sword_challengers|items_weapons:1|Challenger\'s iron sword|lsword||0|785|1||||5|20|||2|6|||||||||||||||||||||||};
+{sword_fencing|items_weapons:13|Fencing blade|lsword||0|922|1||||4|14|||2|5|5||||||||||||||||||||||};
+{club_brutal|items_weapons:44|Brutal club|mace||0|2522|1||||7|20|5|3|2|21|||||||||||||||||||||||};
+{axe_gutsplitter|items_weapons:58|Gutsplitter|axe2h||0|2733|1||||6|21|||7|17|||||||||||||||||||||||};
+{hammer_skullcrusher|items_weapons:45|Skullcrusher|hammer2h||0|3142|1||||7|20|5|3|0|26|||||||||||||||||||||||};
+{shield_crude_wooden|items_armours:0|Crude wooden buckler|buckler||0|31|1||||||||||1||||||||||||||||||||||};
+{shield_cracked_wooden|items_armours:0|Cracked wooden buckler|buckler||0|34|1|||||-2|||||2||||||||||||||||||||||};
+{shield_wooden_buckler|items_armours:0|Second-hand wooden buckler|buckler||0|92|1|||||-2|||||3||||||||||||||||||||||};
+{shield_wooden|items_armours:2|Wooden shield|shld_wd_li||0|514|1|||||-4|||||8||||||||||||||||||||||};
+{shield_wooden_defender|items_armours:2|Wooden defender|shld_wd_li||0|1996|1|||||-8|-5||||14|1|||||||||||||||||||||};
+{hat_hard_leather|items_armours:24|Hardened leather cap|hd_lthr||0|648|1|||||-3|-1||||8||||||||||||||||||||||};
+{hat_fine_leather|items_armours:24|Fine leather cap|hd_lthr||0|846|1|||||-3|-2||||9||||||||||||||||||||||};
+{hat_leather_vision|items_armours:24|Leather cap of reduced vision|hd_lthr||0|971|1|||||-3|-4||||10||||||||||||||||||||||};
+{helm_crude_iron|items_armours:25|Crude iron helmet|hd_mtl_hv||0|1120|1|||||-3|-5||||11||||||||||||||||||||||};
+{shirt_torn|items_armours:14|Torn shirt|bdy_clth||0|92|1|||||-2|||||3||||||||||||||||||||||};
+{shirt_weathered|items_armours:14|Weathered shirt|bdy_clth||0|125|1|||||-1|||||3||||||||||||||||||||||};
+{shirt_patched_cloth|items_armours:14|Patched cloth shirt|bdy_clth||0|208|1||||||||||4||||||||||||||||||||||};
+{armour_crude_leather|items_armours:16|Crude leather armour|bdy_lthr||0|514|1|||||-4|||||8||||||||||||||||||||||};
+{armour_firm_leather|items_armours:16|Firm leather armour|bdy_lthr||0|417|1|||1|||||||8||||||||||||||||||||||};
+{armour_rigid_leather|items_armours:16|Rigid leather armour|bdy_lthr||0|625|1|||1||-1|||||9||||||||||||||||||||||};
+{armour_rigid_chain|items_armours:17|Rigid chain mail|chmail||0|4667|1||||1|-5|||||23||||||||||||||||||||||};
+{armour_superior_chain|items_armours:17|Superior chain mail|chmail||0|5992|1|||||-9|||||23||||||||||||||||||||||};
+{armour_chain_champ|items_armours:17|Champion\'s chain mail|chmail||0|6808|1|2||||-9|-5||||24||||||||||||||||||||||};
+{armour_leather_villain|items_armours:16|Villain\'s leather armour|bdy_lthr||0|3700|1|||-1||-4|3||||15||||||||||||||||||||||};
+{armour_misfortune|items_armours:15|Leather shirt of misfortune|bdy_lthr||0|2459|1|||||-5|||-1|-1|15||||||||||||||||||||||};
+{gloves_barbrawler|items_armours:35|Bar brawler\'s gloves|hnd_lthr||0|95|1|||||5|||||2||||||||||||||||||||||};
+{gloves_fumbling|items_armours:35|Gloves of fumbling|hnd_lthr||0|-432|1|||||-5|||||1||||||||||||||||||||||};
+{gloves_crude_cloth|items_armours:35|Crude cloth gloves|hnd_cloth||0|31|1||||||||||1||||||||||||||||||||||};
+{gloves_crude_leather|items_armours:35|Crude leather gloves|hnd_lthr||0|180|1|||||-4|||||6||||||||||||||||||||||};
+{gloves_troublemaker|items_armours:36|Troublemaker\'s gloves|hnd_lthr||0|501|1|1||||7|4||||4||||||||||||||||||||||};
+{gloves_guards|items_armours:37|Guard\'s gloves|hnd_mtl_li||0|636|1|3||||3|||||5||||||||||||||||||||||};
+{gloves_leather_attack|items_armours:35|Leather gloves of attack|hnd_lthr||0|510|1|3||||13|||||-2||||||||||||||||||||||};
+{gloves_woodcutter|items_armours:35|Woodcutter\'s gloves|hnd_lthr||0|426|1|3||||8|||||1||||||||||||||||||||||};
+{boots_crude_leather|items_armours:28|Crude leather boots|feet_lthr||0|31|1||||||||||1||||||||||||||||||||||};
+{boots_sewn|items_armours:28|Sewn footwear|feet_clth||0|73|1||||||||||2||||||||||||||||||||||};
+{boots_coward|items_armours:28|Coward\'s boots|feet_lthr||0|933|1|||-1|||||||2||||||||||||||||||||||};
+{boots_hard_leather|items_armours:30|Hardened leather boots|feet_lthr||0|626|1|||1||-4|||||10||||||||||||||||||||||};
+{boots_defender|items_armours:30|Defender\'s boots|feet_mtl_li||0|1190|1|2|||||||||9||||||||||||||||||||||};
+{necklace_shield_0|items_jewelry:7|Lesser shielding necklace|neck||0|131|1||||||||||3||||||||||||||||||||||};
+{necklace_strike|items_jewelry:6|Necklace of strike|neck||0|832|1|5|||||5||||||||||||||||||||||||||};
+{necklace_defender_stone|items_jewelry:7|Defender\'s stone|neck|4|0|1325|1|||||||||||1|||||||||||||||||||||};
+{necklace_protector|items_jewelry:7|Necklace of the protector|neck|4|0|3207|1|5||||||||||2|||||||||||||||||||||};
+{ring_crude_combat|items_jewelry:0|Crude combat ring|ring||0|44|1|||||5|||0|1|||||||||||||||||||||||};
+{ring_crude_surehit|items_jewelry:0|Crude ring of surehit|ring||0|52|1|||||7|||||||||||||||||||||||||||};
+{ring_crude_block|items_jewelry:0|Crude ring of block|ring||0|73|1||||||||||2||||||||||||||||||||||};
+{ring_rough_life|items_jewelry:0|Rough ring of life force|ring||0|100|1|1|||||||||||||||||||||||||||||||};
+{ring_fumbling|items_jewelry:0|Ring of fumbling|ring||0|-463|1|||||-5|||||||||||||||||||||||||||};
+{ring_rough_damage|items_jewelry:0|Rough ring of damage|ring||0|56|1||||||||0|2|||||||||||||||||||||||};
+{ring_barbrawler|items_jewelry:0|Bar brawler\'s ring|ring||0|222|1|||||12|||0|1|||||||||||||||||||||||};
+{ring_dmg_3|items_jewelry:0|Ring of damage +3|ring||0|624|1||||||||3|3|||||||||||||||||||||||};
+{ring_life|items_jewelry:0|Ring of life force|ring||0|557|1|5|||||||||||||||||||||||||||||||};
+{ring_taverbrawler|items_jewelry:0|Tavern brawler\'s ring|ring||0|314|1|||||12|||0|3|||||||||||||||||||||||};
+{ring_defender|items_jewelry:0|Defender\'s ring|ring||0|755|1|||||-6|||||11||||||||||||||||||||||};
+{ring_challenger|items_jewelry:0|Challenger\'s ring|ring||0|408|1|||||12|||||4||||||||||||||||||||||};
+{ring_dmg_4|items_jewelry:2|Ring of damage +4|ring||0|1168|1||||||||4|4|||||||||||||||||||||||};
+{ring_troublemaker|items_jewelry:2|Troublemaker\'s ring|ring||0|797|1|||||15|||2|4|||||||||||||||||||||||};
+{ring_guardian|items_jewelry:2|Ring of the guardian|ring|4|0|1489|1|||||19|||3|5|||||||||||||||||||||||};
+{ring_block|items_jewelry:2|Ring of block|ring|4|0|2192|1||||||||||13||||||||||||||||||||||};
+{ring_backstab|items_jewelry:2|Ring of backstabbing|ring||0|1363|1|||||17|7||||3||||||||||||||||||||||};
+{ring_polished_combat|items_jewelry:2|Polished combat ring|ring|4|0|1346|1|5||||15|||1|5|||||||||||||||||||||||};
+{ring_villain|items_jewelry:2|Villain\'s ring|ring|4|0|2750|1|4||||25|||3|6|||||||||||||||||||||||};
+{ring_polished_backstab|items_jewelry:2|Polished ring of backstabbing|ring|4|0|2731|1|||||21|7||4|4|||||||||||||||||||||||};
+{ring_protector|items_jewelry:4|Ring of the protector|ring|4|0|3744|1|3||||20|||0|3|14||||||||||||||||||||||};
        </string>
 
        <string name="itemlist_v0610_2">
 [id|iconID|name|category|displaytype|hasManualPrice|baseMarketCost|hasEquipEffect|equip_boostMaxHP|equip_boostMaxAP|equip_moveCostPenalty|equip_attackCost|equip_attackChance|equip_criticalChance|equip_criticalMultiplier|equip_attackDamage_Min|equip_attackDamage_Max|equip_blockChance|equip_damageResistance|equip_conditions[condition|magnitude|]|hasUseEffect|use_boostHP_Min|use_boostHP_Max|use_boostAP_Min|use_boostAP_Max|use_conditionsSource[condition|magnitude|duration|chance|]|hasHitEffect|hit_boostHP_Min|hit_boostHP_Max|hit_boostAP_Min|hit_boostAP_Max|hit_conditionsSource[condition|magnitude|duration|chance|]|hit_conditionsTarget[condition|magnitude|duration|chance|]|hasKillEffect|kill_boostHP_Min|kill_boostHP_Max|kill_boostAP_Min|kill_boostAP_Max|kill_conditionsSource[condition|magnitude|duration|chance|]|];
-{erinith_book|items_books:0|Erinith\'s book|31|1|1|0|||||||||||||||||||||||||||||||||};
-{hadracor_waspwing|items_misc:52|Giant wasp wing|31|1|1|0|||||||||||||||||||||||||||||||||};
-{tinlyn_bells|items_necklaces_1:10|Tinlyn\'s sheep bell|31|1|1|0|||||||||||||||||||||||||||||||||};
-{tinlyn_sheep_meat|items_consumables:25|Meat from Tinlyn\'s sheep|31|1|1|0|||||||||||||||||||||||||||||||||};
-{rogorn_qitem|items_books:7|Piece of painting|31|1|1|0|||||||||||||||||||||||||||||||||};
-{fg_ironsword|items_weapons:0|Feygard iron sword|0|1|1|0|1||||5|10|||1|5|||||||||||||||||||||||};
-{fg_ironsword_d|items_weapons:0|Degraded Feygard iron sword|0|1|1|0|1||||5|-50|||0|0|||||||||||||||||||||||};
-{buceth_vial|items_consumables:47|Buceth\'s vial of green liquid|31|1|1|0|||||||||||||||||||||||||||||||||};
-{chaosreaper|items_weapons:49|Chaosreaper|0|3|1|339|1||||4|-30|||0|2||||0||||||1||||||{{chaotic_grip|5|3|50|}}|||||||};
-{izthiel_claw|items_misc:47|Izthiel claw|21||1|1||||||||||||||1|1|6|||||||||||||||||};
-{iqhan_pendant|items_necklaces_1:2|Iqhan pendant|6||1|10|1|||||6|||||||||||||||||||||||||||};
-{shadowfang|items_weapons_3:41|Shadowfang|0|3|1|512|1|-20|||4|40|||2|5||||0||||||1|||||{{fatigue_minor|1|3|20|}}||||||||};
-{gloves_life|items_armours_2:1|Gloves of life force|4|3|1|390|1|9||||5|||||3||||||||||||||||||||||};
+{erinith_book|items_books:0|Erinith\'s book|other|1|1|0|||||||||||||||||||||||||||||||||};
+{hadracor_waspwing|items_misc:52|Giant wasp wing|animal|1|1|0|||||||||||||||||||||||||||||||||};
+{tinlyn_bells|items_necklaces_1:10|Tinlyn\'s sheep bell|other|1|1|0|||||||||||||||||||||||||||||||||};
+{tinlyn_sheep_meat|items_consumables:25|Meat from Tinlyn\'s sheep|animal|1|1|0|||||||||||||||||||||||||||||||||};
+{rogorn_qitem|items_books:7|Piece of painting|other|1|1|0|||||||||||||||||||||||||||||||||};
+{fg_ironsword|items_weapons:0|Feygard iron sword|lsword|1|1|0|1||||5|10|||1|5|||||||||||||||||||||||};
+{fg_ironsword_d|items_weapons:0|Degraded Feygard iron sword|lsword|1|1|0|1||||5|-50|||0|0|||||||||||||||||||||||};
+{buceth_vial|items_consumables:47|Buceth\'s vial of green liquid|other|1|1|0|||||||||||||||||||||||||||||||||};
+{chaosreaper|items_weapons:49|Chaosreaper|scepter|3|1|339|1||||4|-30|||0|2||||0||||||1||||||{{chaotic_grip|5|3|50|}}|||||||};
+{izthiel_claw|items_misc:47|Izthiel claw|animal_e||1|1||||||||||||||1|1|6|||||||||||||||||};
+{iqhan_pendant|items_necklaces_1:2|Iqhan pendant|neck||1|10|1|||||6|||||||||||||||||||||||||||};
+{shadowfang|items_weapons_3:41|Shadowfang|ssword|3|1|512|1|-20|||4|40|||2|5||||0||||||1|||||{{fatigue_minor|1|3|20|}}||||||||};
+{gloves_life|items_armours_2:1|Gloves of life force|hnd_lthr|3|1|390|1|9||||5|||||3||||||||||||||||||||||};
        </string>
 
        <string name="itemlist_v0611_1">
 [id|iconID|name|category|displaytype|hasManualPrice|baseMarketCost|hasEquipEffect|equip_boostMaxHP|equip_boostMaxAP|equip_moveCostPenalty|equip_attackCost|equip_attackChance|equip_criticalChance|equip_criticalMultiplier|equip_attackDamage_Min|equip_attackDamage_Max|equip_blockChance|equip_damageResistance|equip_conditions[condition|magnitude|]|hasUseEffect|use_boostHP_Min|use_boostHP_Max|use_boostAP_Min|use_boostAP_Max|use_conditionsSource[condition|magnitude|duration|chance|]|hasHitEffect|hit_boostHP_Min|hit_boostHP_Max|hit_boostAP_Min|hit_boostAP_Max|hit_conditionsSource[condition|magnitude|duration|chance|]|hit_conditionsTarget[condition|magnitude|duration|chance|]|hasKillEffect|kill_boostHP_Min|kill_boostHP_Max|kill_boostAP_Min|kill_boostAP_Max|kill_conditionsSource[condition|magnitude|duration|chance|]|];
-{pot_focus_dmg|items_consumables:39|Potion of damage focus|20||1|272||||||||||||||1|||||{{focus_dmg|1|4|100|}}||||||||||||||};
-{pot_focus_dmg2|items_consumables:39|Strong potion of damage focus|20||1|630||||||||||||||1|||||{{focus_dmg|2|4|100|}}||||||||||||||};
-{pot_focus_ac|items_consumables:37|Potion of accuracy focus|20||1|210||||||||||||||1|||||{{focus_ac|1|4|100|}}||||||||||||||};
-{pot_focus_ac2|items_consumables:37|Strong potion of accuracy focus|20||1|618||||||||||||||1|||||{{focus_ac|2|4|100|}}||||||||||||||};
-{pot_scaradon|items_consumables:48|Scaradon extract|20||0|28||||||||||||||1|5|10|||||||||||||||||};
+{pot_focus_dmg|items_consumables:39|Potion of damage focus|pot||1|272||||||||||||||1|||||{{focus_dmg|1|4|100|}}||||||||||||||};
+{pot_focus_dmg2|items_consumables:39|Strong potion of damage focus|pot||1|630||||||||||||||1|||||{{focus_dmg|2|4|100|}}||||||||||||||};
+{pot_focus_ac|items_consumables:37|Potion of accuracy focus|pot||1|210||||||||||||||1|||||{{focus_ac|1|4|100|}}||||||||||||||};
+{pot_focus_ac2|items_consumables:37|Strong potion of accuracy focus|pot||1|618||||||||||||||1|||||{{focus_ac|2|4|100|}}||||||||||||||};
+{pot_scaradon|items_consumables:48|Scaradon extract|pot||0|28||||||||||||||1|5|10|||||||||||||||||};
 
-{remgard_shield_1|items_armours_3:24|Remgard shield|1||0|2189|1|||||-3|||||9|1|||||||||||||||||||||};
-{remgard_shield_2|items_armours_3:24|Remgard combat shield|1||0|2720|1|||||-3|||||11|1|||||||||||||||||||||};
+{remgard_shield_1|items_armours_3:24|Remgard shield|shld_mtl_li||0|2189|1|||||-3|||||9|1|||||||||||||||||||||};
+{remgard_shield_2|items_armours_3:24|Remgard combat shield|shld_mtl_li||0|2720|1|||||-3|||||11|1|||||||||||||||||||||};
 
-{helm_combat1|items_armours:25|Combat helm|2||0|455|1|||||5|||||6||||||||||||||||||||||};
-{helm_combat2|items_armours:25|Enhanced combat helmet|2||0|485|1|||||7|||||6||||||||||||||||||||||};
-{helm_combat3|items_armours:26|Remgard combat helmet|2||0|1540|1|1||||-3|-5||||12||||||||||||||||||||||};
-{helm_redeye1|items_armours:24|Cap of red eyes|2||0|1|1|-5|||||||||8||||||||||||||||||||||};
-{helm_redeye2|items_armours:24|Cap of bloody eyes|2||0|1|1|-5|||||||0|1|8||||||||||||||||||||||};
-{helm_defend1|items_armours_3:31|Defender\'s helmet|2||0|1975|1|||||-3|||||8|1|||||||||||||||||||||};
-{helm_protector0|items_armours_3:31|Strange looking helmet|2|1|1|0|1|-9|||||||0|1|5||||||||||||||||||||||};
-{helm_protector|items_armours_3:31|Dark protector|2|3|0|3119|1|-6|||||||0|1|13|1|||||||||||||||||||||};
+{helm_combat1|items_armours:25|Combat helm|hd_mtl_li||0|455|1|||||5|||||6||||||||||||||||||||||};
+{helm_combat2|items_armours:25|Enhanced combat helmet|hd_mtl_li||0|485|1|||||7|||||6||||||||||||||||||||||};
+{helm_combat3|items_armours:26|Remgard combat helmet|hd_mtl_hv||0|1540|1|1||||-3|-5||||12||||||||||||||||||||||};
+{helm_redeye1|items_armours:24|Cap of red eyes|hd_lthr||0|1|1|-5|||||||||8||||||||||||||||||||||};
+{helm_redeye2|items_armours:24|Cap of bloody eyes|hd_lthr||0|1|1|-5|||||||0|1|8||||||||||||||||||||||};
+{helm_defend1|items_armours_3:31|Defender\'s helmet|hd_mtl_hv||0|1975|1|||||-3|||||8|1|||||||||||||||||||||};
+{helm_protector0|items_armours_3:31|Strange looking helmet|hd_mtl_hv|1|1|0|1|-9|||||||0|1|5||||||||||||||||||||||};
+{helm_protector|items_armours_3:31|Dark protector|hd_mtl_hv|3|0|3119|1|-6|||||||0|1|13|1|||||||||||||||||||||};
 
-{armour_chain_remg|items_armours_3:13|Remgard chain mail|3||0|8927|1|||||-7|||||25||||||||||||||||||||||};
-{armour_cvest1|items_armours_3:5|Combat vest|3||0|1116|1|||||15|||||8||||||||||||||||||||||};
-{armour_cvest2|items_armours_3:5|Remgard combat vest|3||0|1244|1|||||17|||||8||||||||||||||||||||||};
+{armour_chain_remg|items_armours_3:13|Remgard chain mail|chmail||0|8927|1|||||-7|||||25||||||||||||||||||||||};
+{armour_cvest1|items_armours_3:5|Combat vest|bdy_lt||0|1116|1|||||15|||||8||||||||||||||||||||||};
+{armour_cvest2|items_armours_3:5|Remgard combat vest|bdy_lt||0|1244|1|||||17|||||8||||||||||||||||||||||};
 
-{gloves_leather1|items_armours:38|Hardened leather gloves|4||0|757|1|3||||2|||||6||||||||||||||||||||||};
-{gloves_arulir|items_armours_2:1|Arulir skin gloves|4||0|1793|1|||||-3|||||7|1|||||||||||||||||||||};
-{gloves_combat1|items_armours:36|Combat gloves|4||0|956|1|4||||-5|||||9||||||||||||||||||||||};
-{gloves_combat2|items_armours:36|Enhanced combat gloves|4||0|1204|1|4||||-5|||||10||||||||||||||||||||||};
-{gloves_remgard1|items_armours:37|Remgard fighting gloves|4||0|1205|1|4|||||||||8||||||||||||||||||||||};
-{gloves_remgard2|items_armours:37|Enchanted Remgard gloves|4||0|1326|1|5||||2|||||8||||||||||||||||||||||};
-{gloves_guard1|items_armours:38|Gloves of the guardian|4||1|601|1|||||-9|-5||||14||||||||||||||||||||||};
+{gloves_leather1|items_armours:38|Hardened leather gloves|hnd_lthr||0|757|1|3||||2|||||6||||||||||||||||||||||};
+{gloves_arulir|items_armours_2:1|Arulir skin gloves|hnd_lthr||0|1793|1|||||-3|||||7|1|||||||||||||||||||||};
+{gloves_combat1|items_armours:36|Combat gloves|hnd_lthr||0|956|1|4||||-5|||||9||||||||||||||||||||||};
+{gloves_combat2|items_armours:36|Enhanced combat gloves|hnd_lthr||0|1204|1|4||||-5|||||10||||||||||||||||||||||};
+{gloves_remgard1|items_armours:37|Remgard fighting gloves|hnd_mtl_li||0|1205|1|4|||||||||8||||||||||||||||||||||};
+{gloves_remgard2|items_armours:37|Enchanted Remgard gloves|hnd_mtl_li||0|1326|1|5||||2|||||8||||||||||||||||||||||};
+{gloves_guard1|items_armours:38|Gloves of the guardian|hnd_lthr||1|601|1|||||-9|-5||||14||||||||||||||||||||||};
 
-{boots_combat1|items_armours:30|Combat boots|5||0|0|1|||||7|||||7||||||||||||||||||||||};
-{boots_combat2|items_armours:30|Enhanced combat boots|5||0|0|1|||||7|||||11||||||||||||||||||||||};
-{boots_remgard1|items_armours:31|Remgard boots|5||0|0|1|4|||||||||12||||||||||||||||||||||};
-{boots_guard1|items_armours:31|Boots of the guardian|5||0|0|1||||||||||7|1|||||||||||||||||||||};
-{boots_brawler|items_armours_3:38|Bar brawler\'s boots|5||0|0|1|2|||||4||||7||||||||||||||||||||||};
+{boots_combat1|items_armours:30|Combat boots|feet_mtl_li||0|0|1|||||7|||||7||||||||||||||||||||||};
+{boots_combat2|items_armours:30|Enhanced combat boots|feet_mtl_li||0|0|1|||||7|||||11||||||||||||||||||||||};
+{boots_remgard1|items_armours:31|Remgard boots|feet_mtl_hv||0|0|1|4|||||||||12||||||||||||||||||||||};
+{boots_guard1|items_armours:31|Boots of the guardian|feet_mtl_hv||0|0|1||||||||||7|1|||||||||||||||||||||};
+{boots_brawler|items_armours_3:38|Bar brawler\'s boots|feet_lthr||0|0|1|2|||||4||||7||||||||||||||||||||||};
 
-{marrowtaint|items_necklaces_1:9|Marrowtaint|6|3|0|4760|1|5|||-1|9|||||9||||||||||||||||||||||};
-{valugha_gown|items_armours_3:2|Silk robe of Valugha|3|3|0|3109|1|5||-1||30|||||-10|||||||||0|||||||||||||};
-{valugha_hat|items_armours_3:1|Valugha\'s shimmering hat|2|3|1|648|1|3||-1||15|||-2|-2|-5||||||||||||||||||||||};
-{hat_crit|items_armours_3:0|Woodcutter\'s feathered hat|2|3|0|1|1||||||4||||-5||||||||||||||||||||||};
+{marrowtaint|items_necklaces_1:9|Marrowtaint|neck|3|0|4760|1|5|||-1|9|||||9||||||||||||||||||||||};
+{valugha_gown|items_armours_3:2|Silk robe of Valugha|bdy_clth|3|0|3109|1|5||-1||30|||||-10|||||||||0|||||||||||||};
+{valugha_hat|items_armours_3:1|Valugha\'s shimmering hat|hd_cloth|3|1|648|1|3||-1||15|||-2|-2|-5||||||||||||||||||||||};
+{hat_crit|items_armours_3:0|Woodcutter\'s feathered hat|hd_cloth|3|0|1|1||||||4||||-5||||||||||||||||||||||};
        </string>
 
        <string name="itemlist_v0611_2">
 [id|iconID|name|category|displaytype|hasManualPrice|baseMarketCost|hasEquipEffect|equip_boostMaxHP|equip_boostMaxAP|equip_moveCostPenalty|equip_attackCost|equip_attackChance|equip_criticalChance|equip_criticalMultiplier|equip_attackDamage_Min|equip_attackDamage_Max|equip_blockChance|equip_damageResistance|equip_conditions[condition|magnitude|]|hasUseEffect|use_boostHP_Min|use_boostHP_Max|use_boostAP_Min|use_boostAP_Max|use_conditionsSource[condition|magnitude|duration|chance|]|hasHitEffect|hit_boostHP_Min|hit_boostHP_Max|hit_boostAP_Min|hit_boostAP_Max|hit_conditionsSource[condition|magnitude|duration|chance|]|hit_conditionsTarget[condition|magnitude|duration|chance|]|hasKillEffect|kill_boostHP_Min|kill_boostHP_Max|kill_boostAP_Min|kill_boostAP_Max|kill_conditionsSource[condition|magnitude|duration|chance|]|];
-{thorin_bone|items_misc:44|Chewed bone|31|1|1|0|||||||||||||||||||||||||||||||||};
-{spider|items_misc:40|Dead spider|31||1|1|||||||||||||||||||||||||||||||||};
-{irdegh|items_misc:49|Irdegh poison gland|31||1|5|||||||||||||||||||||||||||||||||};
-{arulir_skin|items_misc:39|Arulir skin|31||1|4|||||||||||||||||||||||||||||||||};
-{algangror_rat|items_misc:38|Strange looking rat tail|31|1|1|0|||||||||||||||||||||||||||||||||};
-{oegyth|items_misc:35|Oegyth crystal|31|1|1|0|||||||||||||||||||||||||||||||||};
-{toszylae_heart|items_misc:6|Demon heart|31|1|1|0|||||||||||||||||||||||||||||||||};
-{potion_rotworm|items_consumables:63|Kazaul rotworm|31|1|1|0|||||||||||||||||||||||||||||||||};
+{thorin_bone|items_misc:44|Chewed bone|animal|1|1|0|||||||||||||||||||||||||||||||||};
+{spider|items_misc:40|Dead spider|animal||1|1|||||||||||||||||||||||||||||||||};
+{irdegh|items_misc:49|Irdegh poison gland|animal||1|5|||||||||||||||||||||||||||||||||};
+{arulir_skin|items_misc:39|Arulir skin|animal||1|4|||||||||||||||||||||||||||||||||};
+{algangror_rat|items_misc:38|Strange looking rat tail|animal|1|1|0|||||||||||||||||||||||||||||||||};
+{oegyth|items_misc:35|Oegyth crystal|gem|1|1|0|||||||||||||||||||||||||||||||||};
+{toszylae_heart|items_misc:6|Demon heart|other|1|1|0|||||||||||||||||||||||||||||||||};
+{potion_rotworm|items_consumables:63|Kazaul rotworm|other|1|1|0|||||||||||||||||||||||||||||||||};
        </string>
 
        <string name="itemlist_v0611_3">
 [id|iconID|name|category|displaytype|hasManualPrice|baseMarketCost|hasEquipEffect|equip_boostMaxHP|equip_boostMaxAP|equip_moveCostPenalty|equip_attackCost|equip_attackChance|equip_criticalChance|equip_criticalMultiplier|equip_attackDamage_Min|equip_attackDamage_Max|equip_blockChance|equip_damageResistance|equip_conditions[condition|magnitude|]|hasUseEffect|use_boostHP_Min|use_boostHP_Max|use_boostAP_Min|use_boostAP_Max|use_conditionsSource[condition|magnitude|duration|chance|]|hasHitEffect|hit_boostHP_Min|hit_boostHP_Max|hit_boostAP_Min|hit_boostAP_Max|hit_conditionsSource[condition|magnitude|duration|chance|]|hit_conditionsTarget[condition|magnitude|duration|chance|]|hasKillEffect|kill_boostHP_Min|kill_boostHP_Max|kill_boostAP_Min|kill_boostAP_Max|kill_conditionsSource[condition|magnitude|duration|chance|]|];
-{lyson_marrow|items_consumables:63|Vial of Lyson marrow extract|31|1|1|0|||||||||||||||||||||||||||||||||};
-{algangror_idol|items_misc_2:220|Small idol|31|1|1|0|||||||||||||||||||||||||||||||||};
-{algangror_ring|items_rings_1:11|Algangror\'s ring|31|1|1|0|||||||||||||||||||||||||||||||||};
-{kaverin_message|items_books:7|Kaverin\'s sealed message|31|1|1|0|||||||||||||||||||||||||||||||||};
-{vacor_map|items_books:9|Map to Vacor\'s old hideout|31|1|1|0|||||||||||||||||||||||||||||||||};
+{lyson_marrow|items_consumables:63|Vial of Lyson marrow extract|other|1|1|0|||||||||||||||||||||||||||||||||};
+{algangror_idol|items_misc_2:220|Small idol|other|1|1|0|||||||||||||||||||||||||||||||||};
+{algangror_ring|items_rings_1:11|Algangror\'s ring|other|1|1|0|||||||||||||||||||||||||||||||||};
+{kaverin_message|items_books:7|Kaverin\'s sealed message|other|1|1|0|||||||||||||||||||||||||||||||||};
+{vacor_map|items_books:9|Map to Vacor\'s old hideout|other|1|1|0|||||||||||||||||||||||||||||||||};
        </string>
 
 </resources>
index b20e5cdaef0a987b4bbb73b68cbfdc3e001b6161..c667634fbe3e38988da37178e5efa1e131121331 100644 (file)
@@ -1,5 +1,9 @@
 <?xml version="1.0" encoding="utf-8"?>
 <resources>
+    <array name="loadresource_itemcategories">
+       <item>@string/itemcategories_1</item>
+    </array>
+    
     <array name="loadresource_actorconditions">
        <item>@string/actorconditions_v069</item>
        <item>@string/actorconditions_v069_bwm</item>
index 1fcb53d3c6fd8e8e6c98b0de299e290fc0c10864..76a094f72bd12c7ae6b0e939ba10a679fe5b1788 100644 (file)
 
     <string name="about_button4">About</string>
     
+       <!-- =========================================== -->
+       <!-- Added in v0.6.12 -->
+       
+       <string name="inventory_equip_offhand">Equip (offhand)</string>
+       
 </resources>
index 3c0d2c1d7d9d42e2d631ff12d0138e55e7a8ed5e..5868dbfb36c69136708fcacf3ee413fa368b998f 100644 (file)
@@ -76,15 +76,15 @@ public final class HeroinfoActivity_Inventory extends Activity {
         heroinfo_stats_attack = (TextView) findViewById(R.id.heroinfo_stats_attack);
         heroinfo_stats_defense = (TextView) findViewById(R.id.heroinfo_stats_defense);
         
-        setWearSlot(ItemType.CATEGORY_WEAPON, R.id.heroinfo_worn_weapon, R.drawable.equip_weapon);
-        setWearSlot(ItemType.CATEGORY_SHIELD, R.id.heroinfo_worn_shield, R.drawable.equip_shield);
-        setWearSlot(ItemType.CATEGORY_WEARABLE_HEAD, R.id.heroinfo_worn_head, R.drawable.equip_head);
-        setWearSlot(ItemType.CATEGORY_WEARABLE_BODY, R.id.heroinfo_worn_body, R.drawable.equip_body);
-        setWearSlot(ItemType.CATEGORY_WEARABLE_FEET, R.id.heroinfo_worn_feet, R.drawable.equip_feet);
-        setWearSlot(ItemType.CATEGORY_WEARABLE_NECK, R.id.heroinfo_worn_neck, R.drawable.equip_neck);
-        setWearSlot(ItemType.CATEGORY_WEARABLE_HAND, R.id.heroinfo_worn_hand, R.drawable.equip_hand);
-        setWearSlot(ItemType.CATEGORY_WEARABLE_RING, R.id.heroinfo_worn_ringleft, R.drawable.equip_ring);
-        setWearSlot(ItemType.CATEGORY_WEARABLE_RING+1, R.id.heroinfo_worn_ringright, R.drawable.equip_ring);
+        setWearSlot(Inventory.WEARSLOT_WEAPON, R.id.heroinfo_worn_weapon, R.drawable.equip_weapon);
+        setWearSlot(Inventory.WEARSLOT_SHIELD, R.id.heroinfo_worn_shield, R.drawable.equip_shield);
+        setWearSlot(Inventory.WEARSLOT_HEAD, R.id.heroinfo_worn_head, R.drawable.equip_head);
+        setWearSlot(Inventory.WEARSLOT_BODY, R.id.heroinfo_worn_body, R.drawable.equip_body);
+        setWearSlot(Inventory.WEARSLOT_FEET, R.id.heroinfo_worn_feet, R.drawable.equip_feet);
+        setWearSlot(Inventory.WEARSLOT_NECK, R.id.heroinfo_worn_neck, R.drawable.equip_neck);
+        setWearSlot(Inventory.WEARSLOT_HAND, R.id.heroinfo_worn_hand, R.drawable.equip_hand);
+        setWearSlot(Inventory.WEARSLOT_RING, R.id.heroinfo_worn_ringleft, R.drawable.equip_ring);
+        setWearSlot(Inventory.WEARSLOT_RING+1, R.id.heroinfo_worn_ringright, R.drawable.equip_ring);
     }
 
     @Override
@@ -119,7 +119,8 @@ public final class HeroinfoActivity_Inventory extends Activity {
                        if (actionType == ItemInfoActivity.ITEMACTION_UNEQUIP) {
                        view.itemController.unequipSlot(itemType, data.getExtras().getInt("inventorySlot"));
                } else  if (actionType == ItemInfoActivity.ITEMACTION_EQUIP) {
-                       view.itemController.equipItem(itemType);
+                       int slot = suggestInventorySlot(itemType, player);
+                       view.itemController.equipItem(itemType, slot);
                } else  if (actionType == ItemInfoActivity.ITEMACTION_USE) {
                                view.itemController.useItem(itemType);  
                        }
@@ -134,6 +135,16 @@ public final class HeroinfoActivity_Inventory extends Activity {
                }
        }
 
+       private static int suggestInventorySlot(ItemType itemType, Player player) {
+               int slot = itemType.category.inventorySlot;
+               if (slot == Inventory.WEARSLOT_RING) {
+                       if (!player.inventory.isEmptySlot(slot)) return slot + 1;
+               } else if (itemType.isOffhandCapableWeapon()) { 
+                       if (player.inventory.isEmptySlot(Inventory.WEARSLOT_SHIELD)) return Inventory.WEARSLOT_SHIELD;
+               }
+               return slot;
+       }
+
        private void dropItem(String itemTypeID, int quantity) {
                ItemType itemType = world.itemTypes.getItemType(itemTypeID);
                view.itemController.dropItem(itemType, quantity);
@@ -182,7 +193,11 @@ public final class HeroinfoActivity_Inventory extends Activity {
                                menu.findItem(R.id.inv_menu_use).setVisible(true);
                                menu.findItem(R.id.inv_menu_assign).setVisible(true);
                        }
-                       if (type.isEquippable()) menu.findItem(R.id.inv_menu_equip).setVisible(true);
+                       if (type.isEquippable()) {
+                               menu.findItem(R.id.inv_menu_equip).setVisible(true);
+                               if (type.isOffhandCapableWeapon()) menu.findItem(R.id.inv_menu_equip_offhand).setVisible(true);
+                               else if (type.category.inventorySlot == Inventory.WEARSLOT_RING) menu.findItem(R.id.inv_menu_equip_offhand).setVisible(true);
+                       }
                        break;
                }
                lastSelectedItem = null;
@@ -193,6 +208,7 @@ public final class HeroinfoActivity_Inventory extends Activity {
     }
     @Override
     public boolean onContextItemSelected(MenuItem item) {
+       ItemType itemType;
        AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();
                switch (item.getItemId()) {
                case R.id.inv_menu_info:
@@ -209,7 +225,12 @@ public final class HeroinfoActivity_Inventory extends Activity {
                        }
                        break;
                case R.id.inv_menu_equip:
-                       view.itemController.equipItem(getSelectedItemType(info));
+                       itemType = getSelectedItemType(info);
+                       view.itemController.equipItem(itemType, itemType.category.inventorySlot);
+                       break;
+               case R.id.inv_menu_equip_offhand:
+                       itemType = getSelectedItemType(info);
+                       view.itemController.equipItem(itemType, itemType.category.inventorySlot + 1);
                        break;
                /*case R.id.inv_menu_unequip:
                        context.controller.unequipItem(this, getSelectedItemType(info));
index 96ab20168bda25fbcaaa6696e0d4fb168a824b56..753816be478256e334b22feea99dd965703fe71e 100644 (file)
@@ -51,7 +51,7 @@ public final class ItemInfoActivity extends Activity {
         tv.setText(itemType.name);
         world.tileManager.setImageViewTileForSingleItemType(tv, itemType, getResources());
         tv = (TextView) findViewById(R.id.iteminfo_category);
-        tv.setText(getCategoryNameRes(itemType.category));
+        tv.setText(itemType.category.displayName);
         
         ((ItemEffectsView) findViewById(R.id.iteminfo_effects)).update(
                        itemType.effects_equip,
@@ -101,32 +101,4 @@ public final class ItemInfoActivity extends Activity {
     public static String getDisplayTypeString(Resources res, ItemType itemType) {
        return res.getStringArray(R.array.iteminfo_displaytypes)[itemType.displayType];
     }
-
-    private static int getCategoryNameRes(int itemCategory) {
-               switch (itemCategory) {
-               case ItemType.CATEGORY_MONEY:
-                       return R.string.itemcategory_money;
-               case ItemType.CATEGORY_WEAPON:
-                       return R.string.itemcategory_weapon;
-               case ItemType.CATEGORY_SHIELD:
-                       return R.string.itemcategory_shield;
-               case ItemType.CATEGORY_WEARABLE_HEAD:
-                       return R.string.itemcategory_wearable_head;
-               case ItemType.CATEGORY_WEARABLE_HAND:
-                       return R.string.itemcategory_wearable_hand;
-               case ItemType.CATEGORY_WEARABLE_FEET:
-                       return R.string.itemcategory_wearable_feet;
-               case ItemType.CATEGORY_WEARABLE_BODY:
-                       return R.string.itemcategory_wearable_body;
-               case ItemType.CATEGORY_WEARABLE_NECK:
-                       return R.string.itemcategory_wearable_neck;
-               case ItemType.CATEGORY_WEARABLE_RING:
-                       return R.string.itemcategory_wearable_ring;
-               case ItemType.CATEGORY_POTION:
-                       return R.string.itemcategory_potion;
-               default:
-                       return R.string.itemcategory_other;
-               }
-       }
-
 }
index 160d5e3cca364f9f8ee9daa795ebbe0c57fb0454..ce7aacc033e68f78207b0039a8b20ec467c261da 100644 (file)
@@ -7,6 +7,7 @@ import com.gpl.rpg.AndorsTrail.model.ability.ActorConditionTypeCollection;
 import com.gpl.rpg.AndorsTrail.model.ability.SkillCollection;\r
 import com.gpl.rpg.AndorsTrail.model.actor.MonsterTypeCollection;\r
 import com.gpl.rpg.AndorsTrail.model.item.DropListCollection;\r
+import com.gpl.rpg.AndorsTrail.model.item.ItemCategoryCollection;\r
 import com.gpl.rpg.AndorsTrail.model.item.ItemTypeCollection;\r
 import com.gpl.rpg.AndorsTrail.model.map.MapCollection;\r
 import com.gpl.rpg.AndorsTrail.model.quest.QuestCollection;\r
@@ -16,6 +17,7 @@ public class WorldContext {
        //Objectcollections\r
        public final ConversationLoader conversationLoader;\r
        public final ItemTypeCollection itemTypes;\r
+       public final ItemCategoryCollection itemCategories;\r
        public final MonsterTypeCollection monsterTypes;\r
        public final VisualEffectCollection visualEffectTypes;\r
        public final DropListCollection dropLists;\r
@@ -33,6 +35,7 @@ public class WorldContext {
        public WorldContext() {\r
                this.conversationLoader = new ConversationLoader();\r
                this.itemTypes = new ItemTypeCollection();\r
+               this.itemCategories = new ItemCategoryCollection();\r
                this.monsterTypes = new MonsterTypeCollection();\r
                this.visualEffectTypes = new VisualEffectCollection();\r
                this.dropLists = new DropListCollection();\r
@@ -45,6 +48,7 @@ public class WorldContext {
        public WorldContext(WorldContext copy) {\r
                this.conversationLoader = copy.conversationLoader;\r
                this.itemTypes = copy.itemTypes;\r
+               this.itemCategories = copy.itemCategories;\r
                this.monsterTypes = copy.monsterTypes;\r
                this.visualEffectTypes = copy.visualEffectTypes;\r
                this.dropLists = copy.dropLists;\r
index 8e1cea16b25c54f7e64997515afe66e0c19d7e00..7681e5e8cd2de3d77a223cdee494fa9a4a5c0bd5 100644 (file)
@@ -37,30 +37,23 @@ public final class ItemController {
        model.currentMap.itemDropped(type, quantity, model.player.position);
     }
 
-       public void equipItem(ItemType type) {
+       public void equipItem(ItemType type, int slot) {
                if (!type.isEquippable()) return;
                final Player player = model.player;
        if (model.uiSelections.isInCombat) {
                if (!player.useAPs(player.reequipCost)) return;
        }
                
-               int slot = type.category;
-               if (slot == ItemType.CATEGORY_WEARABLE_RING) {
-                       if (!player.inventory.isEmptySlot(slot)) {
-                               ++slot;
-                       }
-               }
-               
                if (!player.inventory.removeItem(type.id, 1)) return;
                
-               if (!player.inventory.isEmptySlot(slot)) {
-                       ItemType removedItemType = player.inventory.wear[slot];
-                       player.inventory.addItem(removedItemType);
-                       player.inventory.wear[slot] = null;
-                       ActorStatsController.removeConditionsFromUnequippedItem(player, removedItemType);
+               unequipSlot(player, slot);
+               if (type.isTwohandWeapon()) unequipSlot(player, Inventory.WEARSLOT_SHIELD);
+               else if (slot == Inventory.WEARSLOT_SHIELD) {
+                       ItemType currentWeapon = player.inventory.wear[Inventory.WEARSLOT_WEAPON];
+                       if (currentWeapon != null && currentWeapon.isTwohandWeapon()) unequipSlot(player, Inventory.WEARSLOT_WEAPON);
                }
+                       
                player.inventory.wear[slot] = type;
-               
                ActorStatsController.addConditionsFromEquippedItem(player, type);
                ActorStatsController.recalculatePlayerCombatTraits(player);
     }
@@ -74,12 +67,17 @@ public final class ItemController {
                if (!player.useAPs(player.reequipCost)) return;
        }
        
-               player.inventory.addItem(player.inventory.wear[slot]);
-               player.inventory.wear[slot] = null;
-               
-               ActorStatsController.removeConditionsFromUnequippedItem(player, type);
+               unequipSlot(player, slot);
                ActorStatsController.recalculatePlayerCombatTraits(player);
     }
+
+       private static void unequipSlot(Player player, int slot) {
+               ItemType removedItemType = player.inventory.wear[slot];
+               if (removedItemType == null) return;
+               player.inventory.addItem(removedItemType);
+               player.inventory.wear[slot] = null;
+               ActorStatsController.removeConditionsFromUnequippedItem(player, removedItemType);
+    }
     
     public void useItem(ItemType type) {
        if (!type.isUsable()) return;
@@ -103,7 +101,7 @@ public final class ItemController {
        }
        
        public static void applyInventoryEffects(Player player) {
-               ItemType weapon = player.inventory.wear[ItemType.CATEGORY_WEAPON];
+               ItemType weapon = player.inventory.wear[Inventory.WEARSLOT_WEAPON];
                if (weapon != null) {
                        if (weapon.effects_equip != null) {
                                CombatTraits weaponTraits = weapon.effects_equip.combatProficiency;
@@ -118,7 +116,7 @@ public final class ItemController {
                        ItemType type = player.inventory.wear[i];
                        if (type == null) continue;
                        
-                       final boolean isWeapon = (i == ItemType.CATEGORY_WEAPON);
+                       final boolean isWeapon = type.isWeapon();
                        ActorStatsController.applyAbilityEffects(player, type.effects_equip, isWeapon, 1);
                }
        }
index f0193742b80dc0c150852328c7dea4a5de269ea2..54925a199d8a609e2e548d91beef83296c6ee07c 100644 (file)
@@ -8,8 +8,17 @@ import com.gpl.rpg.AndorsTrail.context.WorldContext;
 \r
 public final class Inventory extends ItemContainer {\r
 \r
+       public static final int WEARSLOT_WEAPON = 0;\r
+       public static final int WEARSLOT_SHIELD = 1;\r
+       public static final int WEARSLOT_HEAD = 2;\r
+       public static final int WEARSLOT_BODY = 3;\r
+       public static final int WEARSLOT_HAND = 4;\r
+       public static final int WEARSLOT_FEET = 5;\r
+       public static final int WEARSLOT_NECK = 6;\r
+       public static final int WEARSLOT_RING = 7;\r
+       \r
        public int gold = 0;\r
-       public static final int NUM_WORN_SLOTS = ItemType.MAX_CATEGORY_WEAR+1+1; // +1 for 0 based index. +1 for left+right rings.\r
+       public static final int NUM_WORN_SLOTS = WEARSLOT_RING+1+1; // +1 for 0 based index. +1 for left+right rings.\r
        public static final int NUM_QUICK_SLOTS = 3;\r
        public final ItemType[] wear = new ItemType[NUM_WORN_SLOTS];\r
        public final ItemType[] quickitem = new ItemType[NUM_QUICK_SLOTS];\r
diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/item/ItemCategory.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/item/ItemCategory.java
new file mode 100644 (file)
index 0000000..d519c52
--- /dev/null
@@ -0,0 +1,40 @@
+package com.gpl.rpg.AndorsTrail.model.item;
+
+public final class ItemCategory {
+       private static final int SIZE_NONE = 0;
+       private static final int SIZE_LIGHT = 1;
+       private static final int SIZE_STD = 2;
+       private static final int SIZE_LARGE = 3;
+       
+       public final String id;
+       public final String displayName;
+       public final int inventorySlot;
+       private final int actionType;
+       private final int size;
+       
+       public ItemCategory(String id, String displayName, int actionType, int inventorySlot, int size) {
+               this.id = id;
+               this.displayName = displayName;
+               this.inventorySlot = inventorySlot;
+               this.size = size;
+               this.actionType = actionType;
+       }
+       
+       private static final int ACTIONTYPE_NONE = 0;
+       private static final int ACTIONTYPE_USE = 1;
+       private static final int ACTIONTYPE_EQUIP = 2;
+       public boolean isEquippable() { return actionType == ACTIONTYPE_EQUIP; }
+       public boolean isUsable() { return actionType == ACTIONTYPE_USE; }
+       public boolean isWeapon() { return inventorySlot == Inventory.WEARSLOT_WEAPON; }
+       public boolean isTwohandWeapon() {
+               if (!isWeapon()) return false;
+               else if (size == SIZE_LARGE) return true;
+               else return false;
+       }
+       public boolean isOffhandCapableWeapon() {
+               if (!isWeapon()) return false;
+               else if (size == SIZE_LIGHT) return true;
+               else if (size == SIZE_STD) return true;
+               else return false;
+       }
+}
diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/item/ItemCategoryCollection.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/item/ItemCategoryCollection.java
new file mode 100644 (file)
index 0000000..38d67d1
--- /dev/null
@@ -0,0 +1,30 @@
+package com.gpl.rpg.AndorsTrail.model.item;\r
+\r
+import java.util.HashMap;\r
+\r
+import com.gpl.rpg.AndorsTrail.AndorsTrailApplication;\r
+import com.gpl.rpg.AndorsTrail.resource.parsers.ItemCategoryParser;\r
+import com.gpl.rpg.AndorsTrail.util.L;\r
+\r
+public final class ItemCategoryCollection {\r
+       private final HashMap<String, ItemCategory> itemCategories = new HashMap<String, ItemCategory>();\r
+       \r
+       public ItemCategory getItemCategory(String id) {\r
+               if (AndorsTrailApplication.DEVELOPMENT_VALIDATEDATA) {\r
+                       if (!itemCategories.containsKey(id)) {\r
+                               L.log("WARNING: Cannot find ItemCategory for id \"" + id + "\".");\r
+                       }\r
+               }\r
+               return itemCategories.get(id);\r
+       }\r
+       \r
+       public void initialize(final ItemCategoryParser parser, String input) {\r
+               parser.parseRows(input, itemCategories);\r
+       }\r
+\r
+       // Unit test method. Not part of the game logic.\r
+       public HashMap<String, ItemCategory> UNITTEST_getAllItemCategories() {\r
+               return itemCategories;\r
+       }\r
+}\r
+  
\ No newline at end of file
index 3527ce1ce6a3e288b186235fe30816441399b015..bbae17c22e8a5d9a06af0c898a8a3b9c0c9213fd 100644 (file)
@@ -4,26 +4,6 @@ import com.gpl.rpg.AndorsTrail.model.CombatTraits;
 import com.gpl.rpg.AndorsTrail.resource.tiles.TileManager;\r
 \r
 public final class ItemType {\r
-       public static final int CATEGORY_WEAPON = 0;\r
-       public static final int CATEGORY_SHIELD = 1;\r
-       public static final int CATEGORY_WEARABLE_HEAD = 2;\r
-       public static final int CATEGORY_WEARABLE_BODY = 3;\r
-       public static final int CATEGORY_WEARABLE_HAND = 4;\r
-       public static final int CATEGORY_WEARABLE_FEET = 5;\r
-       //public static final int CATEGORY_WEARABLE_CAPE = 6;\r
-       //public static final int CATEGORY_WEARABLE_LEGS = 7;\r
-       public static final int CATEGORY_WEARABLE_NECK = 6;\r
-       public static final int CATEGORY_WEARABLE_RING = 7;\r
-       public static final int MAX_CATEGORY_WEAR = CATEGORY_WEARABLE_RING;\r
-       public static final int CATEGORY_POTION = 20;\r
-       public static final int CATEGORY_FOOD = 21;\r
-       public static final int MAX_CATEGORY_USE = CATEGORY_FOOD;\r
-       public static final int CATEGORY_MONEY = 30;\r
-       public static final int CATEGORY_OTHER = 31;\r
-       \r
-       public static final int ACTIONTYPE_NONE = 0;\r
-       public static final int ACTIONTYPE_USE = 1;\r
-       public static final int ACTIONTYPE_EQUIP = 2;\r
        \r
        public static final int DISPLAYTYPE_ORDINARY = 0;\r
        public static final int DISPLAYTYPE_QUEST = 1;\r
@@ -34,8 +14,7 @@ public final class ItemType {
        public final String id;\r
        public final int iconID;\r
        public final String name;\r
-       public final int category;\r
-       public final int actionType;\r
+       public final ItemCategory category;\r
        public final boolean hasManualPrice;\r
        public final int baseMarketCost;\r
        public final int fixedBaseMarketCost;\r
@@ -46,12 +25,11 @@ public final class ItemType {
        public final ItemTraits_OnUse effects_hit;\r
        public final ItemTraits_OnUse effects_kill;\r
 \r
-       public ItemType(String id, int iconID, String name, int category, int displayType, boolean hasManualPrice, int fixedBaseMarketCost, ItemTraits_OnEquip effects_equip, ItemTraits_OnUse effects_use, ItemTraits_OnUse effects_hit, ItemTraits_OnUse effects_kill) {\r
+       public ItemType(String id, int iconID, String name, ItemCategory category, int displayType, boolean hasManualPrice, int fixedBaseMarketCost, ItemTraits_OnEquip effects_equip, ItemTraits_OnUse effects_use, ItemTraits_OnUse effects_hit, ItemTraits_OnUse effects_kill) {\r
                this.id = id;\r
                this.iconID = iconID;\r
                this.name = name;\r
                this.category = category;\r
-               this.actionType = getActionType(category);\r
                this.displayType = displayType;\r
                this.hasManualPrice = hasManualPrice;\r
                this.baseMarketCost = hasManualPrice ? fixedBaseMarketCost : calculateCost(category, effects_equip, effects_use);\r
@@ -62,17 +40,13 @@ public final class ItemType {
                this.effects_kill = effects_kill;\r
        }\r
        \r
-       private static int getActionType(int category) {\r
-               if (category <= MAX_CATEGORY_WEAR) return ACTIONTYPE_EQUIP;\r
-               else if (category <= MAX_CATEGORY_USE) return ACTIONTYPE_USE;\r
-               else return ACTIONTYPE_NONE;\r
-       }\r
-       public boolean isEquippable() { return actionType == ACTIONTYPE_EQUIP; }\r
-       public boolean isUsable() { return actionType == ACTIONTYPE_USE; }\r
+       public boolean isEquippable() { return category.isEquippable(); }\r
+       public boolean isUsable() { return category.isUsable(); }\r
        public boolean isQuestItem() { return displayType == DISPLAYTYPE_QUEST; }\r
        public boolean isOrdinaryItem() { return displayType == DISPLAYTYPE_ORDINARY; }\r
-       public boolean isWeapon() { return isWeaponCategory(category); }\r
-       public static boolean isWeaponCategory(int category) { return category == CATEGORY_WEAPON; }\r
+       public boolean isWeapon() { return category.isWeapon(); }\r
+       public boolean isTwohandWeapon() { return category.isTwohandWeapon(); }\r
+       public boolean isOffhandCapableWeapon() { return category.isOffhandCapableWeapon(); }\r
        public boolean isSellable() {\r
                if (isQuestItem()) return false;\r
                if (baseMarketCost == 0) return false;\r
@@ -164,8 +138,8 @@ public final class ItemType {
        }\r
        \r
        public int calculateCost() { return calculateCost(category, effects_equip, effects_use); }\r
-       public static int calculateCost(int category, ItemTraits_OnEquip effects_equip, ItemTraits_OnUse effects_use) {\r
-               final int costEquipStats = effects_equip == null ? 0 : effects_equip.calculateCost(isWeaponCategory(category));\r
+       public static int calculateCost(ItemCategory category, ItemTraits_OnEquip effects_equip, ItemTraits_OnUse effects_use) {\r
+               final int costEquipStats = effects_equip == null ? 0 : effects_equip.calculateCost(category.isWeapon());\r
                final int costUse = effects_use == null ? 0 : effects_use.calculateCost();\r
                //final int costHit = effects_hit == null ? 0 : effects_hit.calculateCost();\r
                //final int costKill = effects_kill == null ? 0 : effects_kill.calculateCost();\r
index a96d825d53db475de04de8729b82f76f0fb1cf18..03695480786d868f78426222763cf32f9eb7fe0d 100644 (file)
@@ -10,6 +10,7 @@ import com.gpl.rpg.AndorsTrail.model.map.TMXMapTranslator;
 import com.gpl.rpg.AndorsTrail.resource.parsers.ActorConditionsTypeParser;
 import com.gpl.rpg.AndorsTrail.resource.parsers.ConversationListParser;
 import com.gpl.rpg.AndorsTrail.resource.parsers.DropListParser;
+import com.gpl.rpg.AndorsTrail.resource.parsers.ItemCategoryParser;
 import com.gpl.rpg.AndorsTrail.resource.parsers.ItemTypeParser;
 import com.gpl.rpg.AndorsTrail.resource.parsers.MonsterTypeParser;
 import com.gpl.rpg.AndorsTrail.resource.parsers.QuestParser;
@@ -21,6 +22,7 @@ import android.content.res.TypedArray;
 
 public final class ResourceLoader {
 
+       private static final int itemCategoriesResourceId = R.array.loadresource_itemcategories;
        private static final int actorConditionsResourceId = R.array.loadresource_actorconditions;
        private static final int itemsResourceId = AndorsTrailApplication.DEVELOPMENT_DEBUGRESOURCES ? R.array.loadresource_items_debug : R.array.loadresource_items;
        private static final int droplistsResourceId = AndorsTrailApplication.DEVELOPMENT_DEBUGRESOURCES ? R.array.loadresource_droplists_debug : R.array.loadresource_droplists;
@@ -74,6 +76,15 @@ public final class ResourceLoader {
         world.skills.initialize();
         if (AndorsTrailApplication.DEVELOPMENT_DEBUGMESSAGES) timingCheckpoint("SkillLoader");
         
+        // ========================================================================
+        // Load item categories
+        final ItemCategoryParser itemCategoryParser = new ItemCategoryParser();
+        final TypedArray categoriesToLoad = r.obtainTypedArray(itemCategoriesResourceId);
+        for (int i = 0; i < categoriesToLoad.length(); ++i) {
+               world.itemCategories.initialize(itemCategoryParser, categoriesToLoad.getString(i));     
+        }
+        if (AndorsTrailApplication.DEVELOPMENT_DEBUGMESSAGES) timingCheckpoint("ItemCategoryParser");
+        
        // ========================================================================
         // Load condition types
         final ActorConditionsTypeParser actorConditionsTypeParser = new ActorConditionsTypeParser(loader);
@@ -91,7 +102,7 @@ public final class ResourceLoader {
         
         // ========================================================================
         // Load items
-        final ItemTypeParser itemTypeParser = new ItemTypeParser(loader, world.actorConditionsTypes);
+        final ItemTypeParser itemTypeParser = new ItemTypeParser(loader, world.actorConditionsTypes, world.itemCategories);
         final TypedArray itemsToLoad = r.obtainTypedArray(itemsResourceId);
         for (int i = 0; i < itemsToLoad.length(); ++i) {
                world.itemTypes.initialize(itemTypeParser, itemsToLoad.getString(i));   
diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/resource/parsers/ItemCategoryParser.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/resource/parsers/ItemCategoryParser.java
new file mode 100644 (file)
index 0000000..5a952dc
--- /dev/null
@@ -0,0 +1,25 @@
+package com.gpl.rpg.AndorsTrail.resource.parsers;
+
+import com.gpl.rpg.AndorsTrail.model.item.ItemCategory;
+import com.gpl.rpg.AndorsTrail.resource.ResourceFileTokenizer.ResourceParserFor;
+import com.gpl.rpg.AndorsTrail.util.Pair;
+
+public final class ItemCategoryParser extends ResourceParserFor<ItemCategory> {
+
+       public ItemCategoryParser() {
+               super(5);
+       }
+
+       @Override
+       public Pair<String, ItemCategory> parseRow(String[] parts) {
+               String id = parts[0];
+               final ItemCategory itemType = new ItemCategory(
+                               id
+                       , parts[1]                                                                              // displayName
+                       , ResourceParserUtils.parseInt(parts[2], 0)             // actionType
+                       , ResourceParserUtils.parseInt(parts[3], -1)    // inventorySlot
+                       , ResourceParserUtils.parseInt(parts[4], 0)             // size
+                       );
+               return new Pair<String, ItemCategory>(id, itemType);
+       }
+}
index 06e09da368b49b107b27f8d6a5026a51f2838f8e..c25728ece49b155699b16dbeb1315242e865ae15 100644 (file)
@@ -1,6 +1,7 @@
 package com.gpl.rpg.AndorsTrail.resource.parsers;
 
 import com.gpl.rpg.AndorsTrail.model.ability.ActorConditionTypeCollection;
+import com.gpl.rpg.AndorsTrail.model.item.ItemCategoryCollection;
 import com.gpl.rpg.AndorsTrail.model.item.ItemTraits_OnEquip;
 import com.gpl.rpg.AndorsTrail.model.item.ItemTraits_OnUse;
 import com.gpl.rpg.AndorsTrail.model.item.ItemType;
@@ -12,11 +13,13 @@ public final class ItemTypeParser extends ResourceParserFor<ItemType> {
 
        private final DynamicTileLoader tileLoader;
        private final ItemTraitsParser itemTraitsParser;
+       private final ItemCategoryCollection itemCategories;
        
-       public ItemTypeParser(DynamicTileLoader tileLoader, ActorConditionTypeCollection actorConditionsTypes) {
+       public ItemTypeParser(DynamicTileLoader tileLoader, ActorConditionTypeCollection actorConditionsTypes, ItemCategoryCollection itemCategories) {
                super(39);
                this.tileLoader = tileLoader;
                this.itemTraitsParser = new ItemTraitsParser(actorConditionsTypes);
+               this.itemCategories = itemCategories;
        }
 
        @Override
@@ -34,8 +37,8 @@ public final class ItemTypeParser extends ResourceParserFor<ItemType> {
                                id
                        , ResourceParserUtils.parseImageID(tileLoader, parts[1])
                        , itemTypeName
-                       , Integer.parseInt(parts[3])                                                                                            // category
-                       , ResourceParserUtils.parseInt(parts[4], ItemType.DISPLAYTYPE_ORDINARY)                 // Displaytype
+                       , itemCategories.getItemCategory(parts[3])                                                                      // category
+                       , ResourceParserUtils.parseInt(parts[4], ItemType.DISPLAYTYPE_ORDINARY)         // Displaytype
                        , hasManualPrice                                                                                                                        // hasManualPrice
                        , baseMarketCost                                                                                                                        // Base market cost
                        , equipEffect
index de3563e116e6535a9c864298d54303ee0c1f46c1..a92937775dce69223f8f5eb35f3b99d869081939 100644 (file)
@@ -1,6 +1,8 @@
 package com.gpl.rpg.AndorsTrail.resource.tiles;
 
 import android.graphics.Bitmap;
+import android.graphics.Canvas;
+import android.graphics.Paint;
 
 public class TileCollection {
        public final Bitmap[] bitmaps;
@@ -16,4 +18,8 @@ public class TileCollection {
        public void setBitmap(int tileID, Bitmap bitmap) {
                bitmaps[tileID] = bitmap; 
        }
+
+       public void drawTile(Canvas canvas, int tile, int px, int py, Paint mPaint) {
+               canvas.drawBitmap(bitmaps[tile], px, py, mPaint);
+       }
 }
index 87e89418d14f6d32ba604e6671d0a3338f2568ce..c575833745097654c2c29e22d99608de33fcd450 100644 (file)
@@ -307,7 +307,7 @@ public final class MainView extends SurfaceView implements SurfaceHolder.Callbac
                for (int x = 0; x < area.size.width; ++x, ++mx, px += tileSize) {
                        final int tile = layer.tiles[mx][my];
                        if (tile != 0) {
-                               canvas.drawBitmap(tiles.bitmaps[tile], px, py, mPaint);
+                               tiles.drawTile(canvas, tile, px, py, mPaint);
                        }
             }
         }
@@ -326,10 +326,7 @@ public final class MainView extends SurfaceView implements SurfaceHolder.Callbac
        y -= mapViewArea.topLeft.y;
                if (       (x >= 0 && x < mapViewArea.size.width)
                                && (y >= 0 && y < mapViewArea.size.height)) {
-                       canvas.drawBitmap(tiles.bitmaps[tile], 
-                               x * tileSize,
-                               y * tileSize,
-                               mPaint);
+                       tiles.drawTile(canvas, tile, x * tileSize, y * tileSize, mPaint);
                }
     }