Basically, remove as many as possible of the dependencies of the source files in the tools and classes folders on source files not in those folders. (With the exception that files in the classes folder may depend on files in the tools folder.) In this commit, several changes were made. - Project file modified, may need further modification. - Many files renamed to match the Mac version. - #include statements for system headers changed to use <> instead of "" (some already did, but many didn't). - xxx.h headers replaced with cxxx headers where appropriate. - Most sound-related variables moved from globvars.cpp to soundvars.cpp. - The files originally named graphutil and gutils have been merged. - Changed TRUE/FALSE to true/false. - Changed exlsound to soundtool and mostly removed dependencies on the main game files; the exception is that it still uses mainPtr (which probably can't be helped) and print_nums (which should probably be incorporated into the MessageBox string). - Possibly other things that were forgotten. For some reason this commit also includes changes recently committed into the branch for osx. git-svn-id: http://openexile.googlecode.com/svn/trunk@121 4ebdad44-0ea0-11de-aab3-ff745001d230
444 lines
10 KiB
C++
444 lines
10 KiB
C++
/*
|
|
* item.cpp
|
|
* BoE
|
|
*
|
|
* Created by Celtic Minstrel on 20/04/09.
|
|
*
|
|
*/
|
|
|
|
#include <string>
|
|
#include <vector>
|
|
#include <map>
|
|
#include <sstream>
|
|
|
|
|
|
#include "classes.h"
|
|
#include "boe.consts.h"
|
|
#include "oldstructs.h"
|
|
|
|
cItemRec k;
|
|
unsigned char cItemRec::rec_treas_class() const {
|
|
short tmp = value;
|
|
if(charges > 0) tmp *= charges;
|
|
if(tmp >= 15) return 1;
|
|
if(tmp >= 100) return 2;
|
|
if(tmp >= 900) return 3;
|
|
if(tmp >= 2400) return 4;
|
|
return 0;
|
|
}
|
|
|
|
//bool cItemRec::is_ident() const {
|
|
// return item_properties & 1;
|
|
//}
|
|
//
|
|
//bool cItemRec::is_property() const {
|
|
// return item_properties & 2;
|
|
//}
|
|
//
|
|
//bool cItemRec::is_magic() const {
|
|
// return item_properties & 4;
|
|
//}
|
|
//
|
|
//bool cItemRec::is_contained() const {
|
|
// return item_properties & 8;
|
|
//}
|
|
//
|
|
//bool cItemRec::is_cursed() const {
|
|
// return item_properties & 16;
|
|
//}
|
|
//
|
|
//bool cItemRec::is_concealed() const {
|
|
// return item_properties & 32;
|
|
//}
|
|
//
|
|
//bool cItemRec::is_enchanted() const {
|
|
// return item_properties & 64;
|
|
//}
|
|
//
|
|
//// Set bit to 1: a |= b
|
|
//// Set bit to 0: a &= ~b
|
|
//// Toggle bit: a ^= b
|
|
//
|
|
//void cItemRec::set_ident(bool b) {
|
|
// if(b) item_properties |= 1;
|
|
// else item_properties &= ~1;
|
|
//}
|
|
//
|
|
//void cItemRec::set_property(bool b) {
|
|
// if(b) item_properties |= 2;
|
|
// else item_properties &= ~2;
|
|
//}
|
|
//
|
|
//void cItemRec::set_magic(bool b) {
|
|
// if(b) item_properties |= 4;
|
|
// else item_properties &= ~4;
|
|
//}
|
|
//
|
|
//void cItemRec::set_contained(bool b) {
|
|
// if(b) item_properties |= 8;
|
|
// else item_properties &= ~8;
|
|
//}
|
|
//
|
|
//void cItemRec::set_cursed(bool b) {
|
|
// if(b) item_properties |= 16;
|
|
// else item_properties &= ~16;
|
|
//}
|
|
//
|
|
//void cItemRec::set_concealed(bool b) {
|
|
// if(b) item_properties |= 32;
|
|
// else item_properties &= ~32;
|
|
//}
|
|
//
|
|
//void cItemRec::set_enchanted(bool b) {
|
|
// if(b) item_properties |= 64;
|
|
// else item_properties &= ~64;
|
|
//}
|
|
|
|
short cItemRec::item_weight() const {
|
|
short n = charges, w = weight;
|
|
if (variety == 0)
|
|
return 0;
|
|
if(charges > 0){
|
|
if((variety == 5) || (variety == 6) || (variety == 7) || (variety == 24))
|
|
return n * w;
|
|
}
|
|
return w;
|
|
}
|
|
|
|
cItemRec::cItemRec(){
|
|
variety = ITEM_TYPE_NO_ITEM;
|
|
item_level = 0;
|
|
awkward = 0;
|
|
bonus = 0;
|
|
protection = 0;
|
|
charges = 0;
|
|
type = ITEM_NOT_MELEE;
|
|
magic_use_type = 0;
|
|
graphic_num = 0;
|
|
ability = ITEM_NO_ABILITY;
|
|
ability_strength = 0;
|
|
type_flag = 0;
|
|
is_special = 0;
|
|
value = 0;
|
|
weight = 0;
|
|
special_class = 0;
|
|
item_loc.x = 0;
|
|
item_loc.y = 0;
|
|
full_name = "";
|
|
name = "";
|
|
treas_class = 0;
|
|
ident = property = magic = contained = false;
|
|
cursed = concealed = enchanted = unsellable = false;
|
|
reserved1 = 0;
|
|
reserved2 = 0;
|
|
}
|
|
|
|
cItemRec::cItemRec(long preset){
|
|
ability = ITEM_NO_ABILITY;
|
|
ability_strength = 0;
|
|
type_flag = 0;
|
|
is_special = 0;
|
|
special_class = 0;
|
|
item_loc.x = 0;
|
|
item_loc.y = 0;
|
|
treas_class = 0;
|
|
ident = property = magic = contained = false;
|
|
cursed = concealed = enchanted = unsellable = false;
|
|
reserved1 = 0;
|
|
reserved2 = 0;
|
|
switch(preset){
|
|
case 'nife':
|
|
variety = ITEM_TYPE_ONE_HANDED;
|
|
item_level = 4;
|
|
awkward = 0;
|
|
bonus = 1;
|
|
protection = 0;
|
|
charges = 0;
|
|
type = ITEM_EDGED;
|
|
magic_use_type = 0;
|
|
graphic_num = 45;
|
|
value = 2;
|
|
weight = 7;
|
|
full_name = "Bronze Knife";
|
|
name = "Knife";
|
|
ident = true;
|
|
break;
|
|
case 'buck':
|
|
variety = ITEM_TYPE_SHIELD;
|
|
item_level = 1;
|
|
awkward = 1;
|
|
bonus = 0;
|
|
protection = 0;
|
|
charges = 0;
|
|
type = ITEM_NOT_MELEE;
|
|
magic_use_type = 0;
|
|
graphic_num = 65;
|
|
value = 2;
|
|
weight = 20;
|
|
full_name = "Crude Buckler";
|
|
name = "Buckler";
|
|
ident = true;
|
|
break;
|
|
case 'bow ':
|
|
variety = ITEM_TYPE_BOW;
|
|
item_level = 0;
|
|
awkward = 0;
|
|
bonus = 0;
|
|
protection = 0;
|
|
charges = 0;
|
|
type = ITEM_NOT_MELEE;
|
|
magic_use_type = 0;
|
|
graphic_num = 10;
|
|
value = 15;
|
|
weight = 20;
|
|
full_name = "Cavewood Bow";
|
|
name = "Bow";
|
|
ident = true;
|
|
break;
|
|
case 'arrw':
|
|
variety = ITEM_TYPE_ARROW;
|
|
item_level = 12;
|
|
awkward = 0;
|
|
bonus = 0;
|
|
protection = 0;
|
|
charges = 12;
|
|
type = ITEM_NOT_MELEE;
|
|
magic_use_type = 0;
|
|
graphic_num = 47;
|
|
value = 1;
|
|
weight = 1;
|
|
full_name = "Arrows";
|
|
name = "Arrows";
|
|
ident = true;
|
|
break;
|
|
case 'pole':
|
|
variety = ITEM_TYPE_TWO_HANDED;
|
|
item_level = 9;
|
|
awkward = 0;
|
|
bonus = 0;
|
|
protection = 0;
|
|
charges = 0;
|
|
type = ITEM_POLE;
|
|
magic_use_type = 0;
|
|
graphic_num = 4;
|
|
value = 10;
|
|
weight = 20;
|
|
full_name = "Stone Spear";
|
|
name = "Spear";
|
|
ident = true;
|
|
break;
|
|
case 'helm':
|
|
variety = ITEM_TYPE_HELM;
|
|
item_level = 1;
|
|
awkward = 0;
|
|
bonus = 0;
|
|
protection = 0;
|
|
charges = 0;
|
|
type = ITEM_NOT_MELEE;
|
|
magic_use_type = 0;
|
|
graphic_num = 66;
|
|
value = 6;
|
|
weight = 15;
|
|
full_name = "Leather Helm";
|
|
name = "Helm";
|
|
ident = true;
|
|
break;
|
|
case 'food':
|
|
variety = ITEM_TYPE_FOOD;
|
|
item_level = 0;
|
|
awkward = 0;
|
|
bonus = 0;
|
|
protection = 0;
|
|
charges = 0;
|
|
type = ITEM_NOT_MELEE;
|
|
magic_use_type = 0;
|
|
graphic_num = 62;
|
|
value = 0;
|
|
weight = 0;
|
|
full_name = "Food";
|
|
name = "Food";
|
|
ident = false;
|
|
break;
|
|
case 'spel':
|
|
variety = ITEM_TYPE_NON_USE_OBJECT;
|
|
item_level = 0;
|
|
awkward = 0;
|
|
bonus = 0;
|
|
protection = 0;
|
|
charges = 0;
|
|
type = ITEM_NOT_MELEE;
|
|
magic_use_type = 0;
|
|
graphic_num = 53;
|
|
value = 0;
|
|
weight = 0;
|
|
full_name = "";
|
|
name = "";
|
|
ident = false;
|
|
break;
|
|
case 'alch':
|
|
variety = ITEM_TYPE_POTION;
|
|
item_level = 0;
|
|
awkward = 0;
|
|
bonus = 0;
|
|
protection = 0;
|
|
charges = 1;
|
|
type = ITEM_NOT_MELEE;
|
|
magic_use_type = 0;
|
|
graphic_num = 50;
|
|
value = 0;
|
|
weight = 8;
|
|
full_name = "Potion";
|
|
name = "Potion";
|
|
ident = false;
|
|
magic = true;
|
|
break;
|
|
}
|
|
}
|
|
|
|
cItemRec& cItemRec::operator = (legacy::item_record_type& old){
|
|
variety = (eItemType) old.variety;
|
|
item_level = old.item_level;
|
|
awkward = old.awkward;
|
|
bonus = old.bonus;
|
|
protection = old.protection;
|
|
charges = old.charges;
|
|
type = (eWeapType) old.type;
|
|
magic_use_type = old.magic_use_type;
|
|
graphic_num = old.graphic_num;
|
|
if(graphic_num >= 150) // custom item graphic
|
|
graphic_num += 850;
|
|
else if(graphic_num == 59) // duplicate mushroom graphic
|
|
graphic_num = 64;
|
|
ability = (eItemAbil) old.ability;
|
|
ability_strength = old.ability_strength;
|
|
type_flag = old.type_flag;
|
|
is_special = old.is_special;
|
|
value = old.value;
|
|
weight = old.weight;
|
|
special_class = old.special_class;
|
|
item_loc.x = old.item_loc.x;
|
|
item_loc.y = old.item_loc.y;
|
|
full_name = std::string(old.full_name);
|
|
name = old.name;
|
|
treas_class = old.treas_class;
|
|
ident = old.item_properties & 1;
|
|
property = old.item_properties & 2;
|
|
magic = old.item_properties & 4;
|
|
contained = old.item_properties & 8;
|
|
cursed = old.item_properties & 16;
|
|
concealed = old.item_properties & 32;
|
|
enchanted = false;
|
|
unsellable = old.item_properties & 16;
|
|
reserved1 = old.reserved1;
|
|
reserved2 = old.reserved2;
|
|
return *this;
|
|
}
|
|
|
|
void cItemRec::writeTo(std::ostream& file, std::string prefix){
|
|
file << prefix << "VARIETY " << variety << std::endl;
|
|
file << prefix << "LEVEL " << item_level << std::endl;
|
|
file << prefix << "AWKWARD " << awkward << std::endl;
|
|
file << prefix << "BONUS " << bonus << std::endl;
|
|
file << prefix << "PROT " << protection << std::endl;
|
|
file << prefix << "CHARGES " << charges << std::endl;
|
|
file << prefix << "WEAPON " << type << std::endl;
|
|
file << prefix << "USE " << magic_use_type << std::endl;
|
|
file << prefix << "ICON " << graphic_num << std::endl;
|
|
file << prefix << "ABILITY " << ability << std::endl;
|
|
file << prefix << "ABILSTR " << ability_strength << std::endl;
|
|
file << prefix << "TYPE " << type_flag << std::endl;
|
|
file << prefix << "ISSPEC " << is_special << std::endl;
|
|
file << prefix << "VALUE " << value << std::endl;
|
|
file << prefix << "WEIGHT " << weight << std::endl;
|
|
file << prefix << "SPEC " << special_class << std::endl;
|
|
file << prefix << "AT " << item_loc.x << ' ' << item_loc.y << std::endl;
|
|
file << prefix << "FULLNAME " << full_name << std::endl;
|
|
file << prefix << "NAME " << name << std::endl;
|
|
file << prefix << "TREASURE " << treas_class << std::endl;
|
|
if(ident) file << prefix << "IDENTIFIED" << std::endl;
|
|
if(property) file << prefix << "PROPERTY" << std::endl;
|
|
if(magic) file << prefix << "MAGIC" << std::endl;
|
|
if(contained) file << prefix << "CONTAINED" << std::endl;
|
|
if(cursed) file << prefix << "CURSED" << std::endl;
|
|
if(concealed) file << prefix << "CONCEALED" << std::endl;
|
|
if(enchanted) file << prefix << "ENCHANTED" << std::endl;
|
|
if(unsellable) file << prefix << "UNSELLABLE" << std::endl;
|
|
}
|
|
|
|
void cItemRec::readAttrFrom(std::string cur, std::istream& sin){
|
|
if(cur == "VARIETY") sin >> variety;
|
|
else if(cur == "LEVEL") sin >> item_level;
|
|
else if(cur == "AWKWARD") sin >> awkward;
|
|
else if(cur == "BONUS") sin >> bonus;
|
|
else if(cur == "PROT") sin >> protection;
|
|
else if(cur == "CHARGES") sin >> charges;
|
|
else if(cur == "WEAPON") sin >> type;
|
|
else if(cur == "USE") sin >> magic_use_type;
|
|
else if(cur == "ICON") sin >> graphic_num;
|
|
else if(cur == "ABILITY") sin >> ability;
|
|
else if(cur == "ABILSTR") sin >> ability_strength;
|
|
else if(cur == "TYPE") sin >> type_flag;
|
|
else if(cur == "ISSPEC") sin >> is_special;
|
|
else if(cur == "VALUE") sin >> value;
|
|
else if(cur == "WEIGHT") sin >> weight;
|
|
else if(cur == "SPEC") sin >> special_class;
|
|
else if(cur == "AT") sin >> item_loc.x >> item_loc.y;
|
|
else if(cur == "FULLNAME"){
|
|
getline(sin,cur);
|
|
full_name = cur;
|
|
}else if(cur == "NAME"){
|
|
getline(sin,cur);
|
|
name = cur;
|
|
}
|
|
else if(cur == "TREASURE") sin >> treas_class;
|
|
else if(cur == "IDENTIFIED") ident = true;
|
|
else if(cur == "PROPERTY") property = true;
|
|
else if(cur == "MAGIC") magic = true;
|
|
else if(cur == "CONTAINED") contained = true;
|
|
else if(cur == "CURSED") cursed = true;
|
|
else if(cur == "CONCEALED") concealed = true;
|
|
else if(cur == "ENCHANTED") enchanted = true;
|
|
else if(cur == "UNSELLABLE") unsellable = true;
|
|
}
|
|
|
|
std::ostream& operator << (std::ostream& out, eWeapType& e){
|
|
return out << (int) e;
|
|
}
|
|
|
|
std::ostream& operator << (std::ostream& out, eItemType& e){
|
|
return out << (int) e;
|
|
}
|
|
|
|
std::ostream& operator << (std::ostream& out, eItemAbil& e){
|
|
return out << (int) e;
|
|
}
|
|
|
|
std::istream& operator >> (std::istream& in, eWeapType& e){
|
|
int i;
|
|
in >> i;
|
|
if(i > 0 && i < 4)
|
|
e = (eWeapType) i;
|
|
else e = ITEM_NOT_MELEE;
|
|
return in;
|
|
}
|
|
|
|
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;
|
|
return in;
|
|
}
|
|
|
|
std::istream& operator >> (std::istream& in, eItemAbil& e){
|
|
int i;
|
|
in >> i;
|
|
if((i > 0 && i < 15) || (i > 29 && i < 63) ||
|
|
(i > 69 && i < 95) || (i > 109 && i < 136) ||
|
|
(i > 149 && i < 162) || (i > 169 && i < 177))
|
|
e = (eItemAbil) i;
|
|
else e = ITEM_NO_ABILITY;
|
|
return in;
|
|
}
|