blades-engine load ItemData

This commit is contained in:
2022-05-19 18:45:12 -04:00
parent 62348fe70a
commit b3999cab2b
2 changed files with 107 additions and 1 deletions

View File

@@ -0,0 +1,99 @@
package data;
using Type;
using Reflect;
enum ItemVariety {
Null;
OneHand;
TwoHand;
Gold;
Food;
ThrownMissile;
Bow;
Potion;
Scroll;
WandOrRod;
Tool;
Pants;
Shield;
Armor;
Helm;
Gloves;
Boots;
Cloak;
Ring;
Necklace;
Bracelet;
Object;
Crossbow;
Arrows;
Bolts;
}
class ItemData {
public function new() {}
public function clone():ItemData {
var id = new ItemData();
for (field in ItemData.getInstanceFields()) {
id.setField(field, this.field(field));
}
return id;
}
public var name = "";
public var full_name = "";
private var variety = 0;
public function getVariety() {
return ItemVariety.createEnumIndex(variety);
}
public var damage_per_level = 0;
public var bonus = 0;
private var weapon_skill_used = 4;
// TODO public getter to convert weapon skill to a skill enum using the skill numbers in the appendix
public var protection = 0;
public var charges = 0;
public var encumbrance = 0;
public var floor_which_sheet = 0;
public var floor_which_icon = 0;
public var icon_adjust = 0;
public var inventory_icon = 0;
private var ability_1 = -1;
private var ability_str_1 = 0;
private var ability_2 = -1;
private var ability_str_2 = 0;
private var ability_3 = -1;
private var ability_str_3 = 0;
private var ability_4 = -1;
private var ability_str_4 = 0;
// TODO public getters for ability types as an enum
public var special_class = 0;
public var value = 0;
private var weight = 0;
public function getWeight():Float {
return weight / 10.0;
}
private var identified = 0;
public function isIdentified() {
return identified == 1;
}
private var magic = 0;
public function isMagic() {
return magic == 1;
}
private var cursed = 0;
public function isCursed() {
return cursed == 1;
}
private var once_per_day = 0;
public function oncePerDay() {
return once_per_day == 1;
}
private var junk_item = 0;
public function junkItem() {
return junk_item == 1;
}
private var missile_anim_type = 0;
// TODO make missile anim type publically available as an enum
}

View File

@@ -1,5 +1,6 @@
package data; package data;
import haxe.iterators.DynamicAccessIterator;
import hscript.Parser; import hscript.Parser;
import hscript.Interp; import hscript.Interp;
import sys.io.File; import sys.io.File;
@@ -13,6 +14,7 @@ class ScenData {
public var floorData:Map<Int, FloorData> = []; public var floorData:Map<Int, FloorData> = [];
public var terrainData:Map<Int, TerrainData> = []; public var terrainData:Map<Int, TerrainData> = [];
public var creatureData:Map<Int, CreatureData> = []; public var creatureData:Map<Int, CreatureData> = [];
public var itemData:Map<Int, ItemData> = [];
static var failed:Array<String> = []; static var failed:Array<String> = [];
static var passed = 0; static var passed = 0;
@@ -67,6 +69,8 @@ class ScenData {
terrainData; terrainData;
case "creature": case "creature":
creatureData; creatureData;
case "item":
itemData;
default: default:
null; null;
}; };
@@ -75,7 +79,6 @@ class ScenData {
function commitData() { function commitData() {
data = interp.variables["data"]; data = interp.variables["data"];
if (data == null) return; if (data == null) return;
trace(data);
mapFor(defining)[id] = data; mapFor(defining)[id] = data;
data = data.clone(); data = data.clone();
@@ -90,6 +93,8 @@ class ScenData {
new TerrainData(); new TerrainData();
case "creature": case "creature":
new CreatureData(); new CreatureData();
case "item":
new ItemData();
default: default:
null; null;
}; };
@@ -132,6 +137,8 @@ class ScenData {
line = "data." + line.substr(3); line = "data." + line.substr(3);
} else if (line.startsWith("cr_")) { } else if (line.startsWith("cr_")) {
line = "data." + line.substr(3); line = "data." + line.substr(3);
} else if (line.startsWith("it_")) {
line = "data." + line.substr(3);
} else if (line == "clear;") { } else if (line == "clear;") {
line = "clear();"; line = "clear();";
} else if (line.startsWith("import =")) { } else if (line.startsWith("import =")) {