Strictify item variety enum

This commit is contained in:
2014-12-01 14:08:00 -05:00
parent f0ededde17
commit 3a1de0c890
27 changed files with 351 additions and 313 deletions

View File

@@ -95,17 +95,17 @@ unsigned char cItemRec::rec_treas_class() const {
short cItemRec::item_weight() const {
short n = charges, w = weight;
if (variety == 0)
if (variety == eItemType::NO_ITEM)
return 0;
if(charges > 0){
if((variety == 5) || (variety == 6) || (variety == 7) || (variety == 24))
if((variety == eItemType::ARROW) || (variety == eItemType::THROWN_MISSILE) || (variety == eItemType::POTION) || (variety == eItemType::BOLTS))
return n * w;
}
return w;
}
cItemRec::cItemRec(){
variety = ITEM_TYPE_NO_ITEM;
variety = eItemType::NO_ITEM;
item_level = 0;
awkward = 0;
bonus = 0;
@@ -147,7 +147,7 @@ cItemRec::cItemRec(long preset){
reserved2 = 0;
switch(preset){
case 'nife':
variety = ITEM_TYPE_ONE_HANDED;
variety = eItemType::ONE_HANDED;
item_level = 4;
awkward = 0;
bonus = 1;
@@ -163,7 +163,7 @@ cItemRec::cItemRec(long preset){
ident = true;
break;
case 'buck':
variety = ITEM_TYPE_SHIELD;
variety = eItemType::SHIELD;
item_level = 1;
awkward = 1;
bonus = 0;
@@ -179,7 +179,7 @@ cItemRec::cItemRec(long preset){
ident = true;
break;
case 'bow ':
variety = ITEM_TYPE_BOW;
variety = eItemType::BOW;
item_level = 0;
awkward = 0;
bonus = 0;
@@ -195,7 +195,7 @@ cItemRec::cItemRec(long preset){
ident = true;
break;
case 'arrw':
variety = ITEM_TYPE_ARROW;
variety = eItemType::ARROW;
item_level = 12;
awkward = 0;
bonus = 0;
@@ -211,7 +211,7 @@ cItemRec::cItemRec(long preset){
ident = true;
break;
case 'pole':
variety = ITEM_TYPE_TWO_HANDED;
variety = eItemType::TWO_HANDED;
item_level = 9;
awkward = 0;
bonus = 0;
@@ -227,7 +227,7 @@ cItemRec::cItemRec(long preset){
ident = true;
break;
case 'helm':
variety = ITEM_TYPE_HELM;
variety = eItemType::HELM;
item_level = 1;
awkward = 0;
bonus = 0;
@@ -243,7 +243,7 @@ cItemRec::cItemRec(long preset){
ident = true;
break;
case 'food':
variety = ITEM_TYPE_FOOD;
variety = eItemType::FOOD;
item_level = 0;
awkward = 0;
bonus = 0;
@@ -259,7 +259,7 @@ cItemRec::cItemRec(long preset){
ident = false;
break;
case 'spel':
variety = ITEM_TYPE_NON_USE_OBJECT;
variety = eItemType::NON_USE_OBJECT;
item_level = 0;
awkward = 0;
bonus = 0;
@@ -275,7 +275,7 @@ cItemRec::cItemRec(long preset){
ident = false;
break;
case 'alch':
variety = ITEM_TYPE_POTION;
variety = eItemType::POTION;
item_level = 0;
awkward = 0;
bonus = 0;
@@ -427,12 +427,13 @@ std::istream& operator >> (std::istream& in, eWeapType& e){
return in;
}
// TODO: Perhaps this should understand symbolic names as well?
std::istream& operator >> (std::istream& in, eItemType& e){
int i;
in >> i;
if(i > 0 && i < 28)
e = (eItemType) i;
else e = ITEM_TYPE_NO_ITEM;
else e = eItemType::NO_ITEM;
return in;
}

View File

@@ -294,7 +294,7 @@ void cParty::writeTo(std::ostream& file){
file << '\f';
for(int i = 0; i < 5; i++)
for(int j = 0; j < 10; j++)
if(magic_store_items[i][j].variety > ITEM_TYPE_NO_ITEM){
if(magic_store_items[i][j].variety != eItemType::NO_ITEM){
file << "MAGICSTORE " << i << ' ' << j << '\n';
magic_store_items[i][j].writeTo(file);
file << '\f';
@@ -328,7 +328,7 @@ void cParty::writeTo(std::ostream& file){
file << '\f';
for(int i = 0; i < 3; i++)
for(int j = 0; j < 115; j++)
if(stored_items[i][j].variety > ITEM_TYPE_NO_ITEM){
if(stored_items[i][j].variety != eItemType::NO_ITEM){
file << "STORED " << i << ' ' << j << '\n';
stored_items[i][j].writeTo(file);
file << '\f';

View File

@@ -278,7 +278,7 @@ void cPlayer::writeTo(std::ostream& file){
file << "POISON " << weap_poisoned << '\n';
file << '\f';
for(int i; i < 24; i++)
if(items[i].variety > ITEM_TYPE_NO_ITEM){
if(items[i].variety != eItemType::NO_ITEM){
file << "ITEM " << i << '\n';
items[i].writeTo(file);
file << '\f';

View File

@@ -250,41 +250,53 @@ enum eWeapType {
};
/* items[i].variety a.k.a item type (in editor) */
enum eItemType {
ITEM_TYPE_NO_ITEM = 0,
ITEM_TYPE_ONE_HANDED = 1,
ITEM_TYPE_TWO_HANDED = 2,
ITEM_TYPE_GOLD = 3,
ITEM_TYPE_BOW = 4,
ITEM_TYPE_ARROW = 5,
ITEM_TYPE_THROWN_MISSILE = 6,
ITEM_TYPE_POTION = 7, // potion/magic item
ITEM_TYPE_SCROLL = 8, // scroll/magic item
ITEM_TYPE_WAND = 9,
ITEM_TYPE_TOOL = 10,
ITEM_TYPE_FOOD = 11,
ITEM_TYPE_SHIELD = 12,
ITEM_TYPE_ARMOR = 13,
ITEM_TYPE_HELM = 14,
ITEM_TYPE_GLOVES = 15,
ITEM_TYPE_SHIELD_2 = 16,
enum class eItemType {
NO_ITEM = 0,
ONE_HANDED = 1,
TWO_HANDED = 2,
GOLD = 3,
BOW = 4,
ARROW = 5,
THROWN_MISSILE = 6,
POTION = 7, // potion/magic item
SCROLL = 8, // scroll/magic item
WAND = 9,
TOOL = 10,
FOOD = 11,
SHIELD = 12,
ARMOR = 13,
HELM = 14,
GLOVES = 15,
SHIELD_2 = 16,
// don't know why a second type of shield is used ; it is actually checked
// in the armor code (item >= 12 and <= 17)
// in the armor code -- see below
// and you can't equip another (12) shield while wearing it ... I didn't
// find a single item with this property in the bladbase.exs ...
ITEM_TYPE_BOOTS = 17,
ITEM_TYPE_RING = 18,
ITEM_TYPE_NECKLACE = 19,
ITEM_TYPE_WEAPON_POISON = 20,
ITEM_TYPE_NON_USE_OBJECT = 21,
ITEM_TYPE_PANTS = 22,
ITEM_TYPE_CROSSBOW = 23,
ITEM_TYPE_BOLTS = 24,
ITEM_TYPE_MISSILE_NO_AMMO = 25, //e.g slings
ITEM_TYPE_UNUSED1 = 26, // these are here solely because they are options in the editor
ITEM_TYPE_UNUSED2 = 27,
BOOTS = 17,
RING = 18,
NECKLACE = 19,
WEAPON_POISON = 20,
NON_USE_OBJECT = 21,
PANTS = 22,
CROSSBOW = 23,
BOLTS = 24,
MISSILE_NO_AMMO = 25, //e.g slings
UNUSED1 = 26, // these are here solely because they are options in the editor
UNUSED2 = 27,
};
inline bool isArmourType(eItemType type) {
int code = (int) type;
return code >= 12 && code <= 17;
}
inline bool isWeaponType(eItemType type) {
if(type == eItemType::CROSSBOW || type == eItemType::BOLTS)
return true;
int code = (int) type;
return code >= 1 && code <= 6 && code != 3;
}
/* items[i].ability */
enum eItemAbil {
// Weapon abilities

View File

@@ -739,7 +739,7 @@ void cCurTown::writeTo(std::ostream& file){
file << "AT " << p_loc.x << ' ' << p_loc.y << '\n';
file << '\f';
for(int i; i < 115; i++)
if(items[i].variety > ITEM_TYPE_NO_ITEM){
if(items[i].variety != eItemType::NO_ITEM){
file << "ITEM " << i << '\n';
items[i].writeTo(file);
file << '\f';