1
0
Fork 0
mirror of https://github.com/OpenMW/openmw.git synced 2025-06-26 00:41:35 +00:00

Remove tabs as requested. Sorry about that, thought I already

had. :-) I updated the help to better document the --type option,
although I did not finish reasoning through it's interaction with the
new loading framework. I also expanded the print() methods of a few
more of the record types to make a more consistent commit.
This commit is contained in:
cfcohen 2012-10-09 19:41:45 -04:00
parent 57f3b50dc8
commit 50e259c060
3 changed files with 317 additions and 211 deletions

View file

@ -13,7 +13,7 @@
#include "record.hpp" #include "record.hpp"
#define ESMTOOL_VERSION 1.1 #define ESMTOOL_VERSION 1.2
// Create a local alias for brevity // Create a local alias for brevity
namespace bpo = boost::program_options; namespace bpo = boost::program_options;
@ -72,9 +72,12 @@ bool parseOptions (int argc, char** argv, Arguments &info)
desc.add_options() desc.add_options()
("help,h", "print help message.") ("help,h", "print help message.")
("version,v", "print version information and quit.") ("version,v", "print version information and quit.")
("raw,r", "Show an unformattet list of all records and subrecords.") ("raw,r", "Show an unformatted list of all records and subrecords.")
("type,t", bpo::value< std::vector<std::string> >(), // The intention is that this option would interact better
"Show only records of this type.") // with other modes including clone, dump, and raw.
("type,t", bpo::value< std::vector<std::string> >(),
"Show only records of this type (four character record code). May "
"be specified multiple times. Only affects dump mode.")
("quiet,q", "Supress all record information. Useful for speed tests.") ("quiet,q", "Supress all record information. Useful for speed tests.")
("loadcells,C", "Browse through contents of all cells.") ("loadcells,C", "Browse through contents of all cells.")
@ -313,15 +316,15 @@ int load(Arguments& info)
uint32_t flags; uint32_t flags;
esm.getRecHeader(flags); esm.getRecHeader(flags);
// Is the user interested in this record type? // Is the user interested in this record type?
bool interested = true; bool interested = true;
if (info.types.size() > 0) if (info.types.size() > 0)
{ {
std::vector<std::string>::iterator match; std::vector<std::string>::iterator match;
match = std::find(info.types.begin(), info.types.end(), match = std::find(info.types.begin(), info.types.end(),
n.toString()); n.toString());
if (match == info.types.end()) interested = false; if (match == info.types.end()) interested = false;
} }
std::string id = esm.getHNOString("NAME"); std::string id = esm.getHNOString("NAME");

View file

@ -12,18 +12,18 @@ void printAIPackage(ESM::AIPackage p)
std::cout << " Duration: " << p.mWander.mDuration << std::endl; std::cout << " Duration: " << p.mWander.mDuration << std::endl;
std::cout << " Time of Day: " << (int)p.mWander.mTimeOfDay << std::endl; std::cout << " Time of Day: " << (int)p.mWander.mTimeOfDay << std::endl;
if (p.mWander.mUnk != 1) if (p.mWander.mUnk != 1)
std::cout << " Unknown: " << (int)p.mWander.mUnk << std::endl; std::cout << " Unknown: " << (int)p.mWander.mUnk << std::endl;
std::cout << " Idle: "; std::cout << " Idle: ";
for (int i = 0; i != 8; i++) for (int i = 0; i != 8; i++)
std::cout << (int)p.mWander.mIdle[i] << " "; std::cout << (int)p.mWander.mIdle[i] << " ";
std::cout << std::endl; std::cout << std::endl;
} }
else if (p.mType == ESM::AI_Travel) else if (p.mType == ESM::AI_Travel)
{ {
std::cout << " AIType Travel:" << std::endl; std::cout << " AIType Travel:" << std::endl;
std::cout << " Travel Coordinates: (" << p.mTravel.mX << "," std::cout << " Travel Coordinates: (" << p.mTravel.mX << ","
<< p.mTravel.mY << "," << p.mTravel.mZ << ")" << std::endl; << p.mTravel.mY << "," << p.mTravel.mZ << ")" << std::endl;
std::cout << " Travel Unknown: " << (int)p.mTravel.mUnk << std::endl; std::cout << " Travel Unknown: " << (int)p.mTravel.mUnk << std::endl;
} }
else if (p.mType == ESM::AI_Follow || p.mType == ESM::AI_Escort) else if (p.mType == ESM::AI_Follow || p.mType == ESM::AI_Escort)
@ -32,7 +32,7 @@ void printAIPackage(ESM::AIPackage p)
else std::cout << " AIType Escort:" << std::endl; else std::cout << " AIType Escort:" << std::endl;
std::cout << " Follow Coordinates: (" << p.mTarget.mX << "," std::cout << " Follow Coordinates: (" << p.mTarget.mX << ","
<< p.mTarget.mY << "," << p.mTarget.mZ << ")" << std::endl; << p.mTarget.mY << "," << p.mTarget.mZ << ")" << std::endl;
std::cout << " Duration: " << p.mTarget.mDuration << std::endl; std::cout << " Duration: " << p.mTarget.mDuration << std::endl;
std::cout << " Target ID: " << p.mTarget.mId.toString() << std::endl; std::cout << " Target ID: " << p.mTarget.mId.toString() << std::endl;
std::cout << " Unknown: " << (int)p.mTarget.mUnk << std::endl; std::cout << " Unknown: " << (int)p.mTarget.mUnk << std::endl;
@ -51,6 +51,27 @@ void printAIPackage(ESM::AIPackage p)
std::cout << " Cell Name: " << p.mCellName << std::endl; std::cout << " Cell Name: " << p.mCellName << std::endl;
} }
void printEffectList(ESM::EffectList effects)
{
int i = 0;
std::vector<ESM::ENAMstruct>::iterator eit;
for (eit = effects.mList.begin(); eit != effects.mList.end(); eit++)
{
std::cout << " Effect[" << i << "]: " << eit->mEffectID << std::endl;
if (eit->mSkill != -1)
std::cout << " Skill: " << (int)eit->mSkill << std::endl;
if (eit->mAttribute != -1)
std::cout << " Attribute: " << (int)eit->mAttribute << std::endl;
std::cout << " Range: " << eit->mRange << std::endl;
// Area is always zero if range type is "Self"
if (eit->mRange != ESM::RT_Self)
std::cout << " Area: " << eit->mArea << std::endl;
std::cout << " Duration: " << eit->mDuration << std::endl;
std::cout << " Magnitude: " << eit->mMagnMin << "-" << eit->mMagnMax << std::endl;
i++;
}
}
namespace EsmTool { namespace EsmTool {
RecordBase * RecordBase *
@ -293,11 +314,11 @@ void Record<ESM::Potion>::print()
std::cout << " Model: " << mData.mModel << std::endl; std::cout << " Model: " << mData.mModel << std::endl;
std::cout << " Icon: " << mData.mIcon << std::endl; std::cout << " Icon: " << mData.mIcon << std::endl;
if (mData.mScript != "") if (mData.mScript != "")
std::cout << " Script: " << mData.mScript << std::endl; std::cout << " Script: " << mData.mScript << std::endl;
std::cout << " Weight: " << mData.mData.mWeight << std::endl; std::cout << " Weight: " << mData.mData.mWeight << std::endl;
std::cout << " Value: " << mData.mData.mValue << std::endl; std::cout << " Value: " << mData.mData.mValue << std::endl;
std::cout << " AutoCalc: " << mData.mData.mAutoCalc << std::endl; std::cout << " AutoCalc: " << mData.mData.mAutoCalc << std::endl;
// mEffects missing printEffectList(mData.mEffects);
} }
template<> template<>
@ -307,16 +328,23 @@ void Record<ESM::Armor>::print()
std::cout << " Model: " << mData.mModel << std::endl; std::cout << " Model: " << mData.mModel << std::endl;
std::cout << " Icon: " << mData.mIcon << std::endl; std::cout << " Icon: " << mData.mIcon << std::endl;
if (mData.mScript != "") if (mData.mScript != "")
std::cout << " Script: " << mData.mScript << std::endl; std::cout << " Script: " << mData.mScript << std::endl;
if (mData.mEnchant != "") if (mData.mEnchant != "")
std::cout << " Enchantment: " << mData.mEnchant << std::endl; std::cout << " Enchantment: " << mData.mEnchant << std::endl;
std::cout << " Type: " << mData.mData.mType << std::endl; std::cout << " Type: " << mData.mData.mType << std::endl;
std::cout << " Weight: " << mData.mData.mWeight << std::endl; std::cout << " Weight: " << mData.mData.mWeight << std::endl;
std::cout << " Value: " << mData.mData.mValue << std::endl; std::cout << " Value: " << mData.mData.mValue << std::endl;
std::cout << " Health: " << mData.mData.mHealth << std::endl; std::cout << " Health: " << mData.mData.mHealth << std::endl;
std::cout << " Armor: " << mData.mData.mArmor << std::endl; std::cout << " Armor: " << mData.mData.mArmor << std::endl;
std::cout << " Enchantment Points: " << mData.mData.mEnchant << std::endl; std::cout << " Enchantment Points: " << mData.mData.mEnchant << std::endl;
// mParts missing std::vector<ESM::PartReference>::iterator pit;
for (pit = mData.mParts.mParts.begin(); pit != mData.mParts.mParts.end(); pit++)
{
std::cout << " Body Part: " << (int)(pit->mPart) << std::endl;
std::cout << " Male Name: " << pit->mMale << std::endl;
if (pit->mFemale != "")
std::cout << " Female Name: " << pit->mFemale << std::endl;
}
} }
template<> template<>
@ -350,15 +378,20 @@ void Record<ESM::Book>::print()
std::cout << " Model: " << mData.mModel << std::endl; std::cout << " Model: " << mData.mModel << std::endl;
std::cout << " Icon: " << mData.mIcon << std::endl; std::cout << " Icon: " << mData.mIcon << std::endl;
if (mData.mScript != "") if (mData.mScript != "")
std::cout << " Script: " << mData.mScript << std::endl; std::cout << " Script: " << mData.mScript << std::endl;
if (mData.mEnchant != "") if (mData.mEnchant != "")
std::cout << " Enchantment: " << mData.mEnchant << std::endl; std::cout << " Enchantment: " << mData.mEnchant << std::endl;
std::cout << " Weight: " << mData.mData.mWeight << std::endl; std::cout << " Weight: " << mData.mData.mWeight << std::endl;
std::cout << " Value: " << mData.mData.mValue << std::endl; std::cout << " Value: " << mData.mData.mValue << std::endl;
std::cout << " IsScroll: " << mData.mData.mIsScroll << std::endl; std::cout << " IsScroll: " << mData.mData.mIsScroll << std::endl;
std::cout << " SkillID: " << mData.mData.mSkillID << std::endl; std::cout << " SkillID: " << mData.mData.mSkillID << std::endl;
std::cout << " Enchantment Points: " << mData.mData.mEnchant << std::endl; std::cout << " Enchantment Points: " << mData.mData.mEnchant << std::endl;
// mText missing std::cout << " Text: [skipped]" << std::endl;
// Skip until multi-line fields is controllable by a command line option.
// Mildly problematic because there are no parameter to print() currently.
// std::cout << "-------------------------------------------" << std::endl;
// std::cout << mData.mText << std::endl;
// std::cout << "-------------------------------------------" << std::endl;
} }
template<> template<>
@ -369,7 +402,7 @@ void Record<ESM::BirthSign>::print()
std::cout << " Description: " << mData.mDescription << std::endl; std::cout << " Description: " << mData.mDescription << std::endl;
std::vector<std::string>::iterator pit; std::vector<std::string>::iterator pit;
for (pit = mData.mPowers.mList.begin(); pit != mData.mPowers.mList.end(); pit++) for (pit = mData.mPowers.mList.begin(); pit != mData.mPowers.mList.end(); pit++)
std::cout << " Power: " << *pit << std::endl; std::cout << " Power: " << *pit << std::endl;
} }
template<> template<>
@ -377,25 +410,25 @@ void Record<ESM::Cell>::print()
{ {
// None of the cells have names... // None of the cells have names...
if (mData.mName != "") if (mData.mName != "")
std::cout << " Name: " << mData.mName << std::endl; std::cout << " Name: " << mData.mName << std::endl;
if (mData.mRegion != "") if (mData.mRegion != "")
std::cout << " Region: " << mData.mRegion << std::endl; std::cout << " Region: " << mData.mRegion << std::endl;
std::cout << " Flags: " << (int)mData.mData.mFlags << std::endl; std::cout << " Flags: " << (int)mData.mData.mFlags << std::endl;
std::cout << " Coordinates: " << " (" << mData.getGridX() << "," std::cout << " Coordinates: " << " (" << mData.getGridX() << ","
<< mData.getGridY() << ")" << std::endl; << mData.getGridY() << ")" << std::endl;
if (mData.mData.mFlags & ESM::Cell::Interior && if (mData.mData.mFlags & ESM::Cell::Interior &&
!(mData.mData.mFlags & ESM::Cell::QuasiEx)) !(mData.mData.mFlags & ESM::Cell::QuasiEx))
{ {
std::cout << " Ambient Light Color: " << mData.mAmbi.mAmbient << std::endl; std::cout << " Ambient Light Color: " << mData.mAmbi.mAmbient << std::endl;
std::cout << " Sunlight Color: " << mData.mAmbi.mSunlight << std::endl; std::cout << " Sunlight Color: " << mData.mAmbi.mSunlight << std::endl;
std::cout << " Fog Color: " << mData.mAmbi.mFog << std::endl; std::cout << " Fog Color: " << mData.mAmbi.mFog << std::endl;
std::cout << " Fog Density: " << mData.mAmbi.mFogDensity << std::endl; std::cout << " Fog Density: " << mData.mAmbi.mFogDensity << std::endl;
std::cout << " Water Level: " << mData.mWater << std::endl; std::cout << " Water Level: " << mData.mWater << std::endl;
} }
else else
std::cout << " Map Color: " << boost::format("0x%08X") % mData.mMapColor << std::endl; std::cout << " Map Color: " << boost::format("0x%08X") % mData.mMapColor << std::endl;
std::cout << " Water Level Int: " << mData.mWaterInt << std::endl; std::cout << " Water Level Int: " << mData.mWaterInt << std::endl;
std::cout << " NAM0: " << mData.mNAM0 << std::endl; std::cout << " NAM0: " << mData.mNAM0 << std::endl;
@ -412,9 +445,9 @@ void Record<ESM::Class>::print()
std::cout << " Attribute2: " << mData.mData.mAttribute[1] << std::endl; std::cout << " Attribute2: " << mData.mData.mAttribute[1] << std::endl;
std::cout << " Specialization: " << mData.mData.mSpecialization << std::endl; std::cout << " Specialization: " << mData.mData.mSpecialization << std::endl;
for (int i = 0; i != 5; i++) for (int i = 0; i != 5; i++)
std::cout << " Major Skill: " << mData.mData.mSkills[i][0] << std::endl; std::cout << " Major Skill: " << mData.mData.mSkills[i][0] << std::endl;
for (int i = 0; i != 5; i++) for (int i = 0; i != 5; i++)
std::cout << " Minor Skill: " << mData.mData.mSkills[i][1] << std::endl; std::cout << " Minor Skill: " << mData.mData.mSkills[i][1] << std::endl;
} }
template<> template<>
@ -424,9 +457,9 @@ void Record<ESM::Clothing>::print()
std::cout << " Model: " << mData.mModel << std::endl; std::cout << " Model: " << mData.mModel << std::endl;
std::cout << " Icon: " << mData.mIcon << std::endl; std::cout << " Icon: " << mData.mIcon << std::endl;
if (mData.mScript != "") if (mData.mScript != "")
std::cout << " Script: " << mData.mScript << std::endl; std::cout << " Script: " << mData.mScript << std::endl;
if (mData.mEnchant != "") if (mData.mEnchant != "")
std::cout << " Enchantment: " << mData.mEnchant << std::endl; std::cout << " Enchantment: " << mData.mEnchant << std::endl;
std::cout << " Type: " << mData.mData.mType << std::endl; std::cout << " Type: " << mData.mData.mType << std::endl;
std::cout << " Weight: " << mData.mData.mWeight << std::endl; std::cout << " Weight: " << mData.mData.mWeight << std::endl;
std::cout << " Value: " << mData.mData.mValue << std::endl; std::cout << " Value: " << mData.mData.mValue << std::endl;
@ -439,10 +472,13 @@ void Record<ESM::Container>::print()
std::cout << " Name: " << mData.mName << std::endl; std::cout << " Name: " << mData.mName << std::endl;
std::cout << " Model: " << mData.mModel << std::endl; std::cout << " Model: " << mData.mModel << std::endl;
if (mData.mScript != "") if (mData.mScript != "")
std::cout << " Script: " << mData.mScript << std::endl; std::cout << " Script: " << mData.mScript << std::endl;
std::cout << " Flags: " << mData.mFlags << std::endl; std::cout << " Flags: " << mData.mFlags << std::endl;
std::cout << " Weight: " << mData.mWeight << std::endl; std::cout << " Weight: " << mData.mWeight << std::endl;
// mInventory missing std::vector<ESM::ContItem>::iterator cit;
for (cit = mData.mInventory.mList.begin(); cit != mData.mInventory.mList.end(); cit++)
std::cout << " Inventory: Count: " << boost::format("%4d") % cit->mCount
<< " Item: " << cit->mItem.toString() << std::endl;
} }
template<> template<>
@ -476,21 +512,21 @@ void Record<ESM::Creature>::print()
std::cout << " Magic: " << mData.mData.mMagic << std::endl; std::cout << " Magic: " << mData.mData.mMagic << std::endl;
std::cout << " Stealth: " << mData.mData.mStealth << std::endl; std::cout << " Stealth: " << mData.mData.mStealth << std::endl;
std::cout << " Attack1: " << mData.mData.mAttack[0] std::cout << " Attack1: " << mData.mData.mAttack[0]
<< "-" << mData.mData.mAttack[1] << std::endl; << "-" << mData.mData.mAttack[1] << std::endl;
std::cout << " Attack2: " << mData.mData.mAttack[2] std::cout << " Attack2: " << mData.mData.mAttack[2]
<< "-" << mData.mData.mAttack[3] << std::endl; << "-" << mData.mData.mAttack[3] << std::endl;
std::cout << " Attack3: " << mData.mData.mAttack[4] std::cout << " Attack3: " << mData.mData.mAttack[4]
<< "-" << mData.mData.mAttack[5] << std::endl; << "-" << mData.mData.mAttack[5] << std::endl;
std::cout << " Gold: " << mData.mData.mGold << std::endl; std::cout << " Gold: " << mData.mData.mGold << std::endl;
std::vector<ESM::ContItem>::iterator cit; std::vector<ESM::ContItem>::iterator cit;
for (cit = mData.mInventory.mList.begin(); cit != mData.mInventory.mList.end(); cit++) for (cit = mData.mInventory.mList.begin(); cit != mData.mInventory.mList.end(); cit++)
std::cout << " Inventory: Count: " << boost::format("%4d") % cit->mCount std::cout << " Inventory: Count: " << boost::format("%4d") % cit->mCount
<< " Item: " << cit->mItem.toString() << std::endl; << " Item: " << cit->mItem.toString() << std::endl;
std::vector<std::string>::iterator sit; std::vector<std::string>::iterator sit;
for (sit = mData.mSpells.mList.begin(); sit != mData.mSpells.mList.end(); sit++) for (sit = mData.mSpells.mList.begin(); sit != mData.mSpells.mList.end(); sit++)
std::cout << " Spell: " << *sit << std::endl; std::cout << " Spell: " << *sit << std::endl;
std::cout << " Artifical Intelligence: " << mData.mHasAI << std::endl; std::cout << " Artifical Intelligence: " << mData.mHasAI << std::endl;
std::cout << " AI Hello:" << (int)mData.mAiData.mHello << std::endl; std::cout << " AI Hello:" << (int)mData.mAiData.mHello << std::endl;
@ -505,14 +541,19 @@ void Record<ESM::Creature>::print()
std::vector<ESM::AIPackage>::iterator pit; std::vector<ESM::AIPackage>::iterator pit;
for (pit = mData.mAiPackage.mList.begin(); pit != mData.mAiPackage.mList.end(); pit++) for (pit = mData.mAiPackage.mList.begin(); pit != mData.mAiPackage.mList.end(); pit++)
printAIPackage(*pit); printAIPackage(*pit);
} }
template<> template<>
void Record<ESM::Dialogue>::print() void Record<ESM::Dialogue>::print()
{ {
std::cout << " Type: " << (int)mData.mType << std::endl; std::cout << " Type: " << (int)mData.mType << std::endl;
// mInfo missing // Sadly, there are no DialInfos, because the loader dumps as it
// loads, rather than loading and then dumping. :-( Anyone mind if
// I change this?
std::vector<ESM::DialInfo>::iterator iit;
for (iit = mData.mInfo.begin(); iit != mData.mInfo.end(); iit++)
std::cout << "INFO!" << iit->mId << std::endl;
} }
template<> template<>
@ -532,7 +573,7 @@ void Record<ESM::Enchantment>::print()
std::cout << " Cost: " << mData.mData.mCost << std::endl; std::cout << " Cost: " << mData.mData.mCost << std::endl;
std::cout << " Charge: " << mData.mData.mCharge << std::endl; std::cout << " Charge: " << mData.mData.mCharge << std::endl;
std::cout << " AutoCalc: " << mData.mData.mAutocalc << std::endl; std::cout << " AutoCalc: " << mData.mData.mAutocalc << std::endl;
// mEffects missing printEffectList(mData.mEffects);
} }
template<> template<>
@ -541,30 +582,30 @@ void Record<ESM::Faction>::print()
std::cout << " Name: " << mData.mName << std::endl; std::cout << " Name: " << mData.mName << std::endl;
std::cout << " Hidden: " << mData.mData.mIsHidden << std::endl; std::cout << " Hidden: " << mData.mData.mIsHidden << std::endl;
if (mData.mData.mUnknown != -1) if (mData.mData.mUnknown != -1)
std::cout << " Unknown: " << mData.mData.mUnknown << std::endl; std::cout << " Unknown: " << mData.mData.mUnknown << std::endl;
std::cout << " Attribute1: " << mData.mData.mAttribute1 << std::endl; std::cout << " Attribute1: " << mData.mData.mAttribute1 << std::endl;
std::cout << " Attribute2: " << mData.mData.mAttribute2 << std::endl; std::cout << " Attribute2: " << mData.mData.mAttribute2 << std::endl;
for (int i = 0; i != 6; i++) for (int i = 0; i != 6; i++)
if (mData.mData.mSkillID[i] != -1) if (mData.mData.mSkillID[i] != -1)
std::cout << " Skill: " << mData.mData.mSkillID[i] << std::endl; std::cout << " Skill: " << mData.mData.mSkillID[i] << std::endl;
for (int i = 0; i != 10; i++) for (int i = 0; i != 10; i++)
if (mData.mRanks[i] != "") if (mData.mRanks[i] != "")
{ {
std::cout << " Rank: " << mData.mRanks[i] << std::endl; std::cout << " Rank: " << mData.mRanks[i] << std::endl;
std::cout << " Attribute1 Requirement: " std::cout << " Attribute1 Requirement: "
<< mData.mData.mRankData[i].mAttribute1 << std::endl; << mData.mData.mRankData[i].mAttribute1 << std::endl;
std::cout << " Attribute2 Requirement: " std::cout << " Attribute2 Requirement: "
<< mData.mData.mRankData[i].mAttribute2 << std::endl; << mData.mData.mRankData[i].mAttribute2 << std::endl;
std::cout << " One Skill at Level: " std::cout << " One Skill at Level: "
<< mData.mData.mRankData[i].mSkill1 << std::endl; << mData.mData.mRankData[i].mSkill1 << std::endl;
std::cout << " Two Skills at Level: " std::cout << " Two Skills at Level: "
<< mData.mData.mRankData[i].mSkill2 << std::endl; << mData.mData.mRankData[i].mSkill2 << std::endl;
std::cout << " Faction Reaction: " std::cout << " Faction Reaction: "
<< mData.mData.mRankData[i].mFactReaction << std::endl; << mData.mData.mRankData[i].mFactReaction << std::endl;
} }
std::vector<ESM::Faction::Reaction>::iterator rit; std::vector<ESM::Faction::Reaction>::iterator rit;
for (rit = mData.mReactions.begin(); rit != mData.mReactions.end(); rit++) for (rit = mData.mReactions.begin(); rit != mData.mReactions.end(); rit++)
std::cout << " Reaction: " << rit->mReaction << " = " << rit->mFaction << std::endl; std::cout << " Reaction: " << rit->mReaction << " = " << rit->mFaction << std::endl;
} }
template<> template<>
@ -602,8 +643,53 @@ template<>
void Record<ESM::DialInfo>::print() void Record<ESM::DialInfo>::print()
{ {
std::cout << " Id: " << mData.mId << std::endl; std::cout << " Id: " << mData.mId << std::endl;
if (mData.mPrev != "")
std::cout << " Previous ID: " << mData.mPrev << std::endl;
if (mData.mNext != "")
std::cout << " Next ID: " << mData.mNext << std::endl;
std::cout << " Text: " << mData.mResponse << std::endl; std::cout << " Text: " << mData.mResponse << std::endl;
// Lots missing, more coming if (mData.mActor != "")
std::cout << " Actor: " << mData.mActor << std::endl;
if (mData.mRace != "")
std::cout << " Race: " << mData.mRace << std::endl;
if (mData.mClass != "")
std::cout << " Class: " << mData.mClass << std::endl;
std::cout << " Factionless: " << mData.mFactionLess << std::endl;
if (mData.mNpcFaction != "")
std::cout << " NPC Faction: " << mData.mNpcFaction << std::endl;
if (mData.mData.mRank != -1)
std::cout << " NPC Rank: " << (int)mData.mData.mRank << std::endl;
if (mData.mPcFaction != "")
std::cout << " PC Faction: " << mData.mPcFaction << std::endl;
// CHANGE? non-standard capitalization mPCrank -> mPCRank (mPcRank?)
if (mData.mData.mPCrank != -1)
std::cout << " PC Rank: " << (int)mData.mData.mPCrank << std::endl;
if (mData.mCell != "")
std::cout << " Cell: " << mData.mCell << std::endl;
if (mData.mData.mDisposition > 0)
std::cout << " Disposition: " << mData.mData.mDisposition << std::endl;
if (mData.mData.mGender != ESM::DialInfo::NA)
std::cout << " Gender: " << mData.mData.mGender << std::endl;
if (mData.mSound != "")
std::cout << " Sound File: " << mData.mSound << std::endl;
if (mData.mResultScript != "")
{
std::cout << " Result Script: [skipped]" << std::endl;
// Skip until multi-line fields is controllable by a command line option.
// Mildly problematic because there are no parameter to print() currently.
// std::cout << "-------------------------------------------" << std::endl;
// std::cout << mData.mResultScript << std::endl;
// std::cout << "-------------------------------------------" << std::endl;
}
std::cout << " Quest Status: " << mData.mQuestStatus << std::endl;
std::cout << " Unknown1: " << mData.mData.mUnknown1 << std::endl;
std::cout << " Unknown2: " << (int)mData.mData.mUnknown2 << std::endl;
std::vector<ESM::DialInfo::SelectStruct>::iterator sit;
for (sit = mData.mSelects.begin(); sit != mData.mSelects.end(); sit++)
std::cout << " Select Rule: " << sit->mType << " " << sit->mSelectRule << std::endl;
} }
template<> template<>
@ -613,16 +699,16 @@ void Record<ESM::Ingredient>::print()
std::cout << " Model: " << mData.mModel << std::endl; std::cout << " Model: " << mData.mModel << std::endl;
std::cout << " Icon: " << mData.mIcon << std::endl; std::cout << " Icon: " << mData.mIcon << std::endl;
if (mData.mScript != "") if (mData.mScript != "")
std::cout << " Script: " << mData.mScript << std::endl; std::cout << " Script: " << mData.mScript << std::endl;
std::cout << " Weight: " << mData.mData.mWeight << std::endl; std::cout << " Weight: " << mData.mData.mWeight << std::endl;
std::cout << " Value: " << mData.mData.mValue << std::endl; std::cout << " Value: " << mData.mData.mValue << std::endl;
for (int i = 0; i !=4; i++) for (int i = 0; i !=4; i++)
{ {
// A value of -1 means no effect // A value of -1 means no effect
if (mData.mData.mEffectID[i] == -1) continue; if (mData.mData.mEffectID[i] == -1) continue;
std::cout << " Effect: " << mData.mData.mEffectID[i] << std::endl; std::cout << " Effect: " << mData.mData.mEffectID[i] << std::endl;
std::cout << " Skill: " << mData.mData.mSkills[i] << std::endl; std::cout << " Skill: " << mData.mData.mSkills[i] << std::endl;
std::cout << " Attribute: " << mData.mData.mAttributes[i] << std::endl; std::cout << " Attribute: " << mData.mData.mAttributes[i] << std::endl;
} }
} }
@ -630,7 +716,23 @@ template<>
void Record<ESM::Land>::print() void Record<ESM::Land>::print()
{ {
std::cout << " Coordinates: (" << mData.mX << "," << mData.mY << ")" << std::endl; std::cout << " Coordinates: (" << mData.mX << "," << mData.mY << ")" << std::endl;
// Lots missing, more coming std::cout << " Flags: " << mData.mFlags << std::endl;
std::cout << " HasData: " << mData.mHasData << std::endl;
std::cout << " DataTypes: " << mData.mDataTypes << std::endl;
// Seems like this should done with reference counting in the
// loader to me. But I'm not really knowledgable about this
// record type yet. --Cory
bool wasLoaded = mData.mDataLoaded;
if (mData.mDataTypes) mData.loadData(mData.mDataTypes);
if (mData.mDataLoaded)
{
std::cout << " Height Offset: " << mData.mLandData->mHeightOffset << std::endl;
// Lots of missing members.
std::cout << " Unknown1: " << mData.mLandData->mUnk1 << std::endl;
std::cout << " Unknown2: " << mData.mLandData->mUnk2 << std::endl;
}
if (!wasLoaded) mData.unloadData();
} }
template<> template<>
@ -641,8 +743,8 @@ void Record<ESM::CreatureLevList>::print()
std::cout << " Number of items: " << mData.mList.size() << std::endl; std::cout << " Number of items: " << mData.mList.size() << std::endl;
std::vector<ESM::LeveledListBase::LevelItem>::iterator iit; std::vector<ESM::LeveledListBase::LevelItem>::iterator iit;
for (iit = mData.mList.begin(); iit != mData.mList.end(); iit++) for (iit = mData.mList.begin(); iit != mData.mList.end(); iit++)
std::cout << " Creature: Level: " << iit->mLevel std::cout << " Creature: Level: " << iit->mLevel
<< " Creature: " << iit->mId << std::endl; << " Creature: " << iit->mId << std::endl;
} }
template<> template<>
@ -653,21 +755,21 @@ void Record<ESM::ItemLevList>::print()
std::cout << " Number of items: " << mData.mList.size() << std::endl; std::cout << " Number of items: " << mData.mList.size() << std::endl;
std::vector<ESM::LeveledListBase::LevelItem>::iterator iit; std::vector<ESM::LeveledListBase::LevelItem>::iterator iit;
for (iit = mData.mList.begin(); iit != mData.mList.end(); iit++) for (iit = mData.mList.begin(); iit != mData.mList.end(); iit++)
std::cout << " Inventory: Count: " << iit->mLevel std::cout << " Inventory: Count: " << iit->mLevel
<< " Item: " << iit->mId << std::endl; << " Item: " << iit->mId << std::endl;
} }
template<> template<>
void Record<ESM::Light>::print() void Record<ESM::Light>::print()
{ {
if (mData.mName != "") if (mData.mName != "")
std::cout << " Name: " << mData.mName << std::endl; std::cout << " Name: " << mData.mName << std::endl;
if (mData.mModel != "") if (mData.mModel != "")
std::cout << " Model: " << mData.mModel << std::endl; std::cout << " Model: " << mData.mModel << std::endl;
if (mData.mIcon != "") if (mData.mIcon != "")
std::cout << " Icon: " << mData.mIcon << std::endl; std::cout << " Icon: " << mData.mIcon << std::endl;
if (mData.mScript != "") if (mData.mScript != "")
std::cout << " Script: " << mData.mScript << std::endl; std::cout << " Script: " << mData.mScript << std::endl;
std::cout << " Flags: " << mData.mData.mFlags << std::endl; std::cout << " Flags: " << mData.mData.mFlags << std::endl;
std::cout << " Weight: " << mData.mData.mWeight << std::endl; std::cout << " Weight: " << mData.mData.mWeight << std::endl;
std::cout << " Value: " << mData.mData.mValue << std::endl; std::cout << " Value: " << mData.mData.mValue << std::endl;
@ -684,7 +786,7 @@ void Record<ESM::Tool>::print()
std::cout << " Model: " << mData.mModel << std::endl; std::cout << " Model: " << mData.mModel << std::endl;
std::cout << " Icon: " << mData.mIcon << std::endl; std::cout << " Icon: " << mData.mIcon << std::endl;
if (mData.mScript != "") if (mData.mScript != "")
std::cout << " Script: " << mData.mScript << std::endl; std::cout << " Script: " << mData.mScript << std::endl;
std::cout << " Type: " << mData.mType << std::endl; std::cout << " Type: " << mData.mType << std::endl;
std::cout << " Weight: " << mData.mData.mWeight << std::endl; std::cout << " Weight: " << mData.mData.mWeight << std::endl;
std::cout << " Value: " << mData.mData.mValue << std::endl; std::cout << " Value: " << mData.mData.mValue << std::endl;
@ -699,7 +801,7 @@ void Record<ESM::Probe>::print()
std::cout << " Model: " << mData.mModel << std::endl; std::cout << " Model: " << mData.mModel << std::endl;
std::cout << " Icon: " << mData.mIcon << std::endl; std::cout << " Icon: " << mData.mIcon << std::endl;
if (mData.mScript != "") if (mData.mScript != "")
std::cout << " Script: " << mData.mScript << std::endl; std::cout << " Script: " << mData.mScript << std::endl;
std::cout << " Type: " << mData.mType << std::endl; std::cout << " Type: " << mData.mType << std::endl;
std::cout << " Weight: " << mData.mData.mWeight << std::endl; std::cout << " Weight: " << mData.mData.mWeight << std::endl;
std::cout << " Value: " << mData.mData.mValue << std::endl; std::cout << " Value: " << mData.mData.mValue << std::endl;
@ -714,7 +816,7 @@ void Record<ESM::Repair>::print()
std::cout << " Model: " << mData.mModel << std::endl; std::cout << " Model: " << mData.mModel << std::endl;
std::cout << " Icon: " << mData.mIcon << std::endl; std::cout << " Icon: " << mData.mIcon << std::endl;
if (mData.mScript != "") if (mData.mScript != "")
std::cout << " Script: " << mData.mScript << std::endl; std::cout << " Script: " << mData.mScript << std::endl;
std::cout << " Type: " << mData.mType << std::endl; std::cout << " Type: " << mData.mType << std::endl;
std::cout << " Weight: " << mData.mData.mWeight << std::endl; std::cout << " Weight: " << mData.mData.mWeight << std::endl;
std::cout << " Value: " << mData.mData.mValue << std::endl; std::cout << " Value: " << mData.mData.mValue << std::endl;
@ -739,30 +841,30 @@ void Record<ESM::MagicEffect>::print()
std::cout << " Flags: " << mData.mData.mFlags << std::endl; std::cout << " Flags: " << mData.mData.mFlags << std::endl;
std::cout << " Particle Texture: " << mData.mParticle << std::endl; std::cout << " Particle Texture: " << mData.mParticle << std::endl;
if (mData.mCasting != "") if (mData.mCasting != "")
std::cout << " Casting Static: " << mData.mCasting << std::endl; std::cout << " Casting Static: " << mData.mCasting << std::endl;
if (mData.mCastSound != "") if (mData.mCastSound != "")
std::cout << " Casting Sound: " << mData.mCastSound << std::endl; std::cout << " Casting Sound: " << mData.mCastSound << std::endl;
if (mData.mBolt != "") if (mData.mBolt != "")
std::cout << " Bolt Static: " << mData.mBolt << std::endl; std::cout << " Bolt Static: " << mData.mBolt << std::endl;
if (mData.mBoltSound != "") if (mData.mBoltSound != "")
std::cout << " Bolt Sound: " << mData.mBoltSound << std::endl; std::cout << " Bolt Sound: " << mData.mBoltSound << std::endl;
if (mData.mHit != "") if (mData.mHit != "")
std::cout << " Hit Static: " << mData.mHit << std::endl; std::cout << " Hit Static: " << mData.mHit << std::endl;
if (mData.mHitSound != "") if (mData.mHitSound != "")
std::cout << " Hit Sound: " << mData.mHitSound << std::endl; std::cout << " Hit Sound: " << mData.mHitSound << std::endl;
if (mData.mArea != "") if (mData.mArea != "")
std::cout << " Area Static: " << mData.mArea << std::endl; std::cout << " Area Static: " << mData.mArea << std::endl;
if (mData.mAreaSound != "") if (mData.mAreaSound != "")
std::cout << " Area Sound: " << mData.mAreaSound << std::endl; std::cout << " Area Sound: " << mData.mAreaSound << std::endl;
std::cout << " School: " << mData.mData.mSchool << std::endl; std::cout << " School: " << mData.mData.mSchool << std::endl;
std::cout << " Base Cost: " << mData.mData.mBaseCost << std::endl; std::cout << " Base Cost: " << mData.mData.mBaseCost << std::endl;
std::cout << " Speed: " << mData.mData.mSpeed << std::endl; std::cout << " Speed: " << mData.mData.mSpeed << std::endl;
std::cout << " Size: " << mData.mData.mSize << std::endl; std::cout << " Size: " << mData.mData.mSize << std::endl;
std::cout << " Size Cap: " << mData.mData.mSizeCap << std::endl; std::cout << " Size Cap: " << mData.mData.mSizeCap << std::endl;
std::cout << " RGB Color: " << "(" std::cout << " RGB Color: " << "("
<< mData.mData.mRed << "," << mData.mData.mRed << ","
<< mData.mData.mGreen << "," << mData.mData.mGreen << ","
<< mData.mData.mGreen << ")" << std::endl; << mData.mData.mGreen << ")" << std::endl;
} }
template<> template<>
@ -772,7 +874,7 @@ void Record<ESM::Miscellaneous>::print()
std::cout << " Model: " << mData.mModel << std::endl; std::cout << " Model: " << mData.mModel << std::endl;
std::cout << " Icon: " << mData.mIcon << std::endl; std::cout << " Icon: " << mData.mIcon << std::endl;
if (mData.mScript != "") if (mData.mScript != "")
std::cout << " Script: " << mData.mScript << std::endl; std::cout << " Script: " << mData.mScript << std::endl;
std::cout << " Weight: " << mData.mData.mWeight << std::endl; std::cout << " Weight: " << mData.mData.mWeight << std::endl;
std::cout << " Value: " << mData.mData.mValue << std::endl; std::cout << " Value: " << mData.mData.mValue << std::endl;
std::cout << " Is Key: " << mData.mData.mIsKey << std::endl; std::cout << " Is Key: " << mData.mData.mIsKey << std::endl;
@ -788,77 +890,77 @@ void Record<ESM::NPC>::print()
std::cout << " Race: " << mData.mRace << std::endl; std::cout << " Race: " << mData.mRace << std::endl;
std::cout << " Class: " << mData.mClass << std::endl; std::cout << " Class: " << mData.mClass << std::endl;
if (mData.mScript != "") if (mData.mScript != "")
std::cout << " Script: " << mData.mScript << std::endl; std::cout << " Script: " << mData.mScript << std::endl;
if (mData.mFaction != "") if (mData.mFaction != "")
std::cout << " Faction: " << mData.mFaction << std::endl; std::cout << " Faction: " << mData.mFaction << std::endl;
std::cout << " Flags: " << mData.mFlags << std::endl; std::cout << " Flags: " << mData.mFlags << std::endl;
// Seriously? // Seriously?
if (mData.mNpdt52.mGold == -10) if (mData.mNpdt52.mGold == -10)
{ {
std::cout << " Level: " << mData.mNpdt12.mLevel << std::endl; std::cout << " Level: " << mData.mNpdt12.mLevel << std::endl;
std::cout << " Reputation: " << (int)mData.mNpdt12.mReputation << std::endl; std::cout << " Reputation: " << (int)mData.mNpdt12.mReputation << std::endl;
std::cout << " Disposition: " << (int)mData.mNpdt12.mDisposition << std::endl; std::cout << " Disposition: " << (int)mData.mNpdt12.mDisposition << std::endl;
std::cout << " Faction: " << (int)mData.mNpdt52.mFactionID << std::endl; std::cout << " Faction: " << (int)mData.mNpdt52.mFactionID << std::endl;
std::cout << " Rank: " << (int)mData.mNpdt12.mRank << std::endl; std::cout << " Rank: " << (int)mData.mNpdt12.mRank << std::endl;
std::cout << " Unknown1: " std::cout << " Unknown1: "
<< (unsigned int)((unsigned char)mData.mNpdt12.mUnknown1) << std::endl; << (unsigned int)((unsigned char)mData.mNpdt12.mUnknown1) << std::endl;
std::cout << " Unknown2: " std::cout << " Unknown2: "
<< (unsigned int)((unsigned char)mData.mNpdt12.mUnknown2) << std::endl; << (unsigned int)((unsigned char)mData.mNpdt12.mUnknown2) << std::endl;
std::cout << " Unknown3: " std::cout << " Unknown3: "
<< (unsigned int)((unsigned char)mData.mNpdt12.mUnknown3) << std::endl; << (unsigned int)((unsigned char)mData.mNpdt12.mUnknown3) << std::endl;
std::cout << " Gold: " << (int)mData.mNpdt12.mGold << std::endl; std::cout << " Gold: " << (int)mData.mNpdt12.mGold << std::endl;
} }
else { else {
std::cout << " Level: " << mData.mNpdt52.mLevel << std::endl; std::cout << " Level: " << mData.mNpdt52.mLevel << std::endl;
std::cout << " Reputation: " << (int)mData.mNpdt52.mReputation << std::endl; std::cout << " Reputation: " << (int)mData.mNpdt52.mReputation << std::endl;
std::cout << " Disposition: " << (int)mData.mNpdt52.mDisposition << std::endl; std::cout << " Disposition: " << (int)mData.mNpdt52.mDisposition << std::endl;
std::cout << " Rank: " << (int)mData.mNpdt52.mRank << std::endl; std::cout << " Rank: " << (int)mData.mNpdt52.mRank << std::endl;
std::cout << " Attributes:" << std::endl; std::cout << " Attributes:" << std::endl;
std::cout << " Strength: " << (int)mData.mNpdt52.mStrength << std::endl; std::cout << " Strength: " << (int)mData.mNpdt52.mStrength << std::endl;
std::cout << " Intelligence: " << (int)mData.mNpdt52.mIntelligence << std::endl; std::cout << " Intelligence: " << (int)mData.mNpdt52.mIntelligence << std::endl;
std::cout << " Willpower: " << (int)mData.mNpdt52.mWillpower << std::endl; std::cout << " Willpower: " << (int)mData.mNpdt52.mWillpower << std::endl;
std::cout << " Agility: " << (int)mData.mNpdt52.mAgility << std::endl; std::cout << " Agility: " << (int)mData.mNpdt52.mAgility << std::endl;
std::cout << " Speed: " << (int)mData.mNpdt52.mSpeed << std::endl; std::cout << " Speed: " << (int)mData.mNpdt52.mSpeed << std::endl;
std::cout << " Endurance: " << (int)mData.mNpdt52.mEndurance << std::endl; std::cout << " Endurance: " << (int)mData.mNpdt52.mEndurance << std::endl;
std::cout << " Personality: " << (int)mData.mNpdt52.mPersonality << std::endl; std::cout << " Personality: " << (int)mData.mNpdt52.mPersonality << std::endl;
std::cout << " Luck: " << (int)mData.mNpdt52.mLuck << std::endl; std::cout << " Luck: " << (int)mData.mNpdt52.mLuck << std::endl;
std::cout << " Skills:" << std::endl; std::cout << " Skills:" << std::endl;
for (int i = 0; i != 27; i++) for (int i = 0; i != 27; i++)
std::cout << " " << i << " = " std::cout << " " << i << " = "
<< (int)((unsigned char)mData.mNpdt52.mSkills[i]) << std::endl; << (int)((unsigned char)mData.mNpdt52.mSkills[i]) << std::endl;
std::cout << " Health: " << mData.mNpdt52.mHealth << std::endl; std::cout << " Health: " << mData.mNpdt52.mHealth << std::endl;
std::cout << " Magicka: " << mData.mNpdt52.mMana << std::endl; std::cout << " Magicka: " << mData.mNpdt52.mMana << std::endl;
std::cout << " Fatigue: " << mData.mNpdt52.mFatigue << std::endl; std::cout << " Fatigue: " << mData.mNpdt52.mFatigue << std::endl;
std::cout << " Unknown: " << (int)mData.mNpdt52.mUnknown << std::endl; std::cout << " Unknown: " << (int)mData.mNpdt52.mUnknown << std::endl;
std::cout << " Gold: " << mData.mNpdt52.mGold << std::endl; std::cout << " Gold: " << mData.mNpdt52.mGold << std::endl;
} }
std::vector<ESM::ContItem>::iterator cit; std::vector<ESM::ContItem>::iterator cit;
for (cit = mData.mInventory.mList.begin(); cit != mData.mInventory.mList.end(); cit++) for (cit = mData.mInventory.mList.begin(); cit != mData.mInventory.mList.end(); cit++)
std::cout << " Inventory: Count: " << boost::format("%4d") % cit->mCount std::cout << " Inventory: Count: " << boost::format("%4d") % cit->mCount
<< " Item: " << cit->mItem.toString() << std::endl; << " Item: " << cit->mItem.toString() << std::endl;
std::vector<std::string>::iterator sit; std::vector<std::string>::iterator sit;
for (sit = mData.mSpells.mList.begin(); sit != mData.mSpells.mList.end(); sit++) for (sit = mData.mSpells.mList.begin(); sit != mData.mSpells.mList.end(); sit++)
std::cout << " Spell: " << *sit << std::endl; std::cout << " Spell: " << *sit << std::endl;
std::vector<ESM::NPC::Dest>::iterator dit; std::vector<ESM::NPC::Dest>::iterator dit;
for (dit = mData.mTransport.begin(); dit != mData.mTransport.end(); dit++) for (dit = mData.mTransport.begin(); dit != mData.mTransport.end(); dit++)
{ {
std::cout << " Destination Position: " std::cout << " Destination Position: "
<< boost::format("%12.3f") % dit->mPos.pos[0] << "," << boost::format("%12.3f") % dit->mPos.pos[0] << ","
<< boost::format("%12.3f") % dit->mPos.pos[1] << "," << boost::format("%12.3f") % dit->mPos.pos[1] << ","
<< boost::format("%12.3f") % dit->mPos.pos[2] << ")" << std::endl; << boost::format("%12.3f") % dit->mPos.pos[2] << ")" << std::endl;
std::cout << " Destination Rotation: " std::cout << " Destination Rotation: "
<< boost::format("%9.6f") % dit->mPos.rot[0] << "," << boost::format("%9.6f") % dit->mPos.rot[0] << ","
<< boost::format("%9.6f") % dit->mPos.rot[1] << "," << boost::format("%9.6f") % dit->mPos.rot[1] << ","
<< boost::format("%9.6f") % dit->mPos.rot[2] << ")" << std::endl; << boost::format("%9.6f") % dit->mPos.rot[2] << ")" << std::endl;
if (dit->mCellName != "") if (dit->mCellName != "")
std::cout << " Destination Cell: " << dit->mCellName << std::endl; std::cout << " Destination Cell: " << dit->mCellName << std::endl;
} }
std::cout << " Artifical Intelligence: " << mData.mHasAI << std::endl; std::cout << " Artifical Intelligence: " << mData.mHasAI << std::endl;
@ -874,7 +976,7 @@ void Record<ESM::NPC>::print()
std::vector<ESM::AIPackage>::iterator pit; std::vector<ESM::AIPackage>::iterator pit;
for (pit = mData.mAiPackage.mList.begin(); pit != mData.mAiPackage.mList.end(); pit++) for (pit = mData.mAiPackage.mList.begin(); pit != mData.mAiPackage.mList.end(); pit++)
printAIPackage(*pit); printAIPackage(*pit);
} }
template<> template<>
@ -884,7 +986,7 @@ void Record<ESM::Pathgrid>::print()
std::cout << " Coordinates: (" << mData.mData.mX << "," << mData.mData.mY << ")" << std::endl; std::cout << " Coordinates: (" << mData.mData.mX << "," << mData.mData.mY << ")" << std::endl;
std::cout << " Unknown S1: " << mData.mData.mS1 << std::endl; std::cout << " Unknown S1: " << mData.mData.mS1 << std::endl;
if ((unsigned int)mData.mData.mS2 != mData.mPoints.size()) if ((unsigned int)mData.mData.mS2 != mData.mPoints.size())
std::cout << " Reported Point Count: " << mData.mData.mS2 << std::endl; std::cout << " Reported Point Count: " << mData.mData.mS2 << std::endl;
std::cout << " Point Count: " << mData.mPoints.size() << std::endl; std::cout << " Point Count: " << mData.mPoints.size() << std::endl;
std::cout << " Edge Count: " << mData.mEdges.size() << std::endl; std::cout << " Edge Count: " << mData.mEdges.size() << std::endl;
@ -892,22 +994,22 @@ void Record<ESM::Pathgrid>::print()
ESM::Pathgrid::PointList::iterator pit; ESM::Pathgrid::PointList::iterator pit;
for (pit = mData.mPoints.begin(); pit != mData.mPoints.end(); pit++) for (pit = mData.mPoints.begin(); pit != mData.mPoints.end(); pit++)
{ {
std::cout << " Point[" << i << "]:" << std::endl; std::cout << " Point[" << i << "]:" << std::endl;
std::cout << " Coordinates: (" << pit->mX << "," std::cout << " Coordinates: (" << pit->mX << ","
<< pit->mY << "," << pit->mZ << ")" << std::endl; << pit->mY << "," << pit->mZ << ")" << std::endl;
std::cout << " Auto-Generated: " << (int)pit->mAutogenerated << std::endl; std::cout << " Auto-Generated: " << (int)pit->mAutogenerated << std::endl;
std::cout << " Connections: " << (int)pit->mConnectionNum << std::endl; std::cout << " Connections: " << (int)pit->mConnectionNum << std::endl;
std::cout << " Unknown: " << pit->mUnknown << std::endl; std::cout << " Unknown: " << pit->mUnknown << std::endl;
i++; i++;
} }
i = 0; i = 0;
ESM::Pathgrid::EdgeList::iterator eit; ESM::Pathgrid::EdgeList::iterator eit;
for (eit = mData.mEdges.begin(); eit != mData.mEdges.end(); eit++) for (eit = mData.mEdges.begin(); eit != mData.mEdges.end(); eit++)
{ {
std::cout << " Edge[" << i << "]: " << eit->mV0 << " -> " << eit->mV1 << std::endl; std::cout << " Edge[" << i << "]: " << eit->mV0 << " -> " << eit->mV1 << std::endl;
if (eit->mV0 >= mData.mData.mS2 || eit->mV1 >= mData.mData.mS2) if (eit->mV0 >= mData.mData.mS2 || eit->mV1 >= mData.mData.mS2)
std::cout << " BAD POINT IN EDGE!" << std::endl; std::cout << " BAD POINT IN EDGE!" << std::endl;
i++; i++;
} }
} }
@ -920,57 +1022,57 @@ void Record<ESM::Race>::print()
std::cout << " Male:" << std::endl; std::cout << " Male:" << std::endl;
std::cout << " Strength: " std::cout << " Strength: "
<< mData.mData.mStrength.mMale << std::endl; << mData.mData.mStrength.mMale << std::endl;
std::cout << " Intelligence: " std::cout << " Intelligence: "
<< mData.mData.mIntelligence.mMale << std::endl; << mData.mData.mIntelligence.mMale << std::endl;
std::cout << " Willpower: " std::cout << " Willpower: "
<< mData.mData.mWillpower.mMale << std::endl; << mData.mData.mWillpower.mMale << std::endl;
std::cout << " Agility: " std::cout << " Agility: "
<< mData.mData.mAgility.mMale << std::endl; << mData.mData.mAgility.mMale << std::endl;
std::cout << " Speed: " std::cout << " Speed: "
<< mData.mData.mSpeed.mMale << std::endl; << mData.mData.mSpeed.mMale << std::endl;
std::cout << " Endurance: " std::cout << " Endurance: "
<< mData.mData.mEndurance.mMale << std::endl; << mData.mData.mEndurance.mMale << std::endl;
std::cout << " Personality: " std::cout << " Personality: "
<< mData.mData.mPersonality.mMale << std::endl; << mData.mData.mPersonality.mMale << std::endl;
std::cout << " Luck: " std::cout << " Luck: "
<< mData.mData.mLuck.mMale << std::endl; << mData.mData.mLuck.mMale << std::endl;
std::cout << " Height: " std::cout << " Height: "
<< mData.mData.mHeight.mMale << std::endl; << mData.mData.mHeight.mMale << std::endl;
std::cout << " Weight: " std::cout << " Weight: "
<< mData.mData.mWeight.mMale << std::endl; << mData.mData.mWeight.mMale << std::endl;
std::cout << " Female:" << std::endl; std::cout << " Female:" << std::endl;
std::cout << " Strength: " std::cout << " Strength: "
<< mData.mData.mStrength.mFemale << std::endl; << mData.mData.mStrength.mFemale << std::endl;
std::cout << " Intelligence: " std::cout << " Intelligence: "
<< mData.mData.mIntelligence.mFemale << std::endl; << mData.mData.mIntelligence.mFemale << std::endl;
std::cout << " Willpower: " std::cout << " Willpower: "
<< mData.mData.mWillpower.mFemale << std::endl; << mData.mData.mWillpower.mFemale << std::endl;
std::cout << " Agility: " std::cout << " Agility: "
<< mData.mData.mAgility.mFemale << std::endl; << mData.mData.mAgility.mFemale << std::endl;
std::cout << " Speed: " std::cout << " Speed: "
<< mData.mData.mSpeed.mFemale << std::endl; << mData.mData.mSpeed.mFemale << std::endl;
std::cout << " Endurance: " std::cout << " Endurance: "
<< mData.mData.mEndurance.mFemale << std::endl; << mData.mData.mEndurance.mFemale << std::endl;
std::cout << " Personality: " std::cout << " Personality: "
<< mData.mData.mPersonality.mFemale << std::endl; << mData.mData.mPersonality.mFemale << std::endl;
std::cout << " Luck: " std::cout << " Luck: "
<< mData.mData.mLuck.mFemale << std::endl; << mData.mData.mLuck.mFemale << std::endl;
std::cout << " Height: " std::cout << " Height: "
<< mData.mData.mHeight.mFemale << std::endl; << mData.mData.mHeight.mFemale << std::endl;
std::cout << " Weight: " std::cout << " Weight: "
<< mData.mData.mWeight.mFemale << std::endl; << mData.mData.mWeight.mFemale << std::endl;
for (int i = 0; i != 7; i++) for (int i = 0; i != 7; i++)
// Not all races have 7 skills. // Not all races have 7 skills.
if (mData.mData.mBonus[i].mSkill != -1) if (mData.mData.mBonus[i].mSkill != -1)
std::cout << " Skill: " << mData.mData.mBonus[i].mSkill std::cout << " Skill: " << mData.mData.mBonus[i].mSkill
<< " = " << mData.mData.mBonus[i].mBonus << std::endl; << " = " << mData.mData.mBonus[i].mBonus << std::endl;
std::vector<std::string>::iterator sit; std::vector<std::string>::iterator sit;
for (sit = mData.mPowers.mList.begin(); sit != mData.mPowers.mList.end(); sit++) for (sit = mData.mPowers.mList.begin(); sit != mData.mPowers.mList.end(); sit++)
std::cout << " Power: " << *sit << std::endl; std::cout << " Power: " << *sit << std::endl;
} }
template<> template<>
@ -991,10 +1093,10 @@ void Record<ESM::Region>::print()
std::cout << " UnknownB: " << (int)mData.mData.mB << std::endl; std::cout << " UnknownB: " << (int)mData.mData.mB << std::endl;
std::cout << " Map Color: " << mData.mMapColor << std::endl; std::cout << " Map Color: " << mData.mMapColor << std::endl;
if (mData.mSleepList != "") if (mData.mSleepList != "")
std::cout << " Sleep List: " << mData.mSleepList << std::endl; std::cout << " Sleep List: " << mData.mSleepList << std::endl;
std::vector<ESM::Region::SoundRef>::iterator sit; std::vector<ESM::Region::SoundRef>::iterator sit;
for (sit = mData.mSoundList.begin(); sit != mData.mSoundList.end(); sit++) for (sit = mData.mSoundList.begin(); sit != mData.mSoundList.end(); sit++)
std::cout << " Sound: " << (int)sit->mChance << " = " << sit->mSound.toString() << std::endl; std::cout << " Sound: " << (int)sit->mChance << " = " << sit->mSound.toString() << std::endl;
} }
template<> template<>
@ -1009,18 +1111,19 @@ void Record<ESM::Script>::print()
std::cout << " Table Size: " << mData.mData.mStringTableSize << std::endl; std::cout << " Table Size: " << mData.mData.mStringTableSize << std::endl;
std::cout << " Script: [skipped]" << std::endl; std::cout << " Script: [skipped]" << std::endl;
// Skip until multi-line field is controllable by a command line option. // Skip until multi-line fields is controllable by a command line option.
//std::cout << "-------------------------------------------" << std::endl; // Mildly problematic because there are no parameter to print() currently.
//std::cout << s->scriptText << std::endl; // std::cout << "-------------------------------------------" << std::endl;
//std::cout << "-------------------------------------------" << std::endl; // std::cout << s->scriptText << std::endl;
// std::cout << "-------------------------------------------" << std::endl;
std::vector<std::string>::iterator vit; std::vector<std::string>::iterator vit;
for (vit = mData.mVarNames.begin(); vit != mData.mVarNames.end(); vit++) for (vit = mData.mVarNames.begin(); vit != mData.mVarNames.end(); vit++)
std::cout << " Variable: " << *vit << std::endl; std::cout << " Variable: " << *vit << std::endl;
std::cout << " ByteCode: "; std::cout << " ByteCode: ";
std::vector<char>::iterator cit; std::vector<char>::iterator cit;
for (cit = mData.mScriptData.begin(); cit != mData.mScriptData.end(); cit++) for (cit = mData.mScriptData.begin(); cit != mData.mScriptData.end(); cit++)
std::cout << boost::format("%02X") % (int)(*cit); std::cout << boost::format("%02X") % (int)(*cit);
std::cout << std::endl; std::cout << std::endl;
} }
@ -1055,8 +1158,8 @@ void Record<ESM::Sound>::print()
std::cout << " Sound: " << mData.mSound << std::endl; std::cout << " Sound: " << mData.mSound << std::endl;
std::cout << " Volume: " << (int)mData.mData.mVolume << std::endl; std::cout << " Volume: " << (int)mData.mData.mVolume << std::endl;
if (mData.mData.mMinRange != 0 && mData.mData.mMaxRange != 0) if (mData.mData.mMinRange != 0 && mData.mData.mMaxRange != 0)
std::cout << " Range: " << (int)mData.mData.mMinRange << " - " std::cout << " Range: " << (int)mData.mData.mMinRange << " - "
<< (int)mData.mData.mMaxRange << std::endl; << (int)mData.mData.mMaxRange << std::endl;
} }
template<> template<>
@ -1066,7 +1169,7 @@ void Record<ESM::Spell>::print()
std::cout << " Type: " << mData.mData.mType << std::endl; std::cout << " Type: " << mData.mData.mType << std::endl;
std::cout << " Flags: " << mData.mData.mFlags << std::endl; std::cout << " Flags: " << mData.mData.mFlags << std::endl;
std::cout << " Cost: " << mData.mData.mCost << std::endl; std::cout << " Cost: " << mData.mData.mCost << std::endl;
// mEffect missing printEffectList(mData.mEffects);
} }
template<> template<>
@ -1087,15 +1190,15 @@ void Record<ESM::Weapon>::print()
{ {
// No names on VFX bolts // No names on VFX bolts
if (mData.mName != "") if (mData.mName != "")
std::cout << " Name: " << mData.mName << std::endl; std::cout << " Name: " << mData.mName << std::endl;
std::cout << " Model: " << mData.mModel << std::endl; std::cout << " Model: " << mData.mModel << std::endl;
// No icons on VFX bolts or magic bolts // No icons on VFX bolts or magic bolts
if (mData.mIcon != "") if (mData.mIcon != "")
std::cout << " Icon: " << mData.mIcon << std::endl; std::cout << " Icon: " << mData.mIcon << std::endl;
if (mData.mScript != "") if (mData.mScript != "")
std::cout << " Script: " << mData.mScript << std::endl; std::cout << " Script: " << mData.mScript << std::endl;
if (mData.mEnchant != "") if (mData.mEnchant != "")
std::cout << " Enchantment: " << mData.mEnchant << std::endl; std::cout << " Enchantment: " << mData.mEnchant << std::endl;
std::cout << " Type: " << mData.mData.mType << std::endl; std::cout << " Type: " << mData.mData.mType << std::endl;
std::cout << " Flags: " << mData.mData.mFlags << std::endl; std::cout << " Flags: " << mData.mData.mFlags << std::endl;
std::cout << " Weight: " << mData.mData.mWeight << std::endl; std::cout << " Weight: " << mData.mData.mWeight << std::endl;
@ -1105,14 +1208,14 @@ void Record<ESM::Weapon>::print()
std::cout << " Reach: " << mData.mData.mReach << std::endl; std::cout << " Reach: " << mData.mData.mReach << std::endl;
std::cout << " Enchantment Points: " << mData.mData.mEnchant << std::endl; std::cout << " Enchantment Points: " << mData.mData.mEnchant << std::endl;
if (mData.mData.mChop[0] != 0 && mData.mData.mChop[1] != 0) if (mData.mData.mChop[0] != 0 && mData.mData.mChop[1] != 0)
std::cout << " Chop: " << (int)mData.mData.mChop[0] << "-" std::cout << " Chop: " << (int)mData.mData.mChop[0] << "-"
<< (int)mData.mData.mChop[1] << std::endl; << (int)mData.mData.mChop[1] << std::endl;
if (mData.mData.mSlash[0] != 0 && mData.mData.mSlash[1] != 0) if (mData.mData.mSlash[0] != 0 && mData.mData.mSlash[1] != 0)
std::cout << " Slash: " << (int)mData.mData.mSlash[0] << "-" std::cout << " Slash: " << (int)mData.mData.mSlash[0] << "-"
<< (int)mData.mData.mSlash[1] << std::endl; << (int)mData.mData.mSlash[1] << std::endl;
if (mData.mData.mThrust[0] != 0 && mData.mData.mThrust[1] != 0) if (mData.mData.mThrust[0] != 0 && mData.mData.mThrust[1] != 0)
std::cout << " Thrust: " << (int)mData.mData.mThrust[0] << "-" std::cout << " Thrust: " << (int)mData.mData.mThrust[0] << "-"
<< (int)mData.mData.mThrust[1] << std::endl; << (int)mData.mData.mThrust[1] << std::endl;
} }
template<> template<>

View file

@ -20,7 +20,7 @@ namespace EsmTool
protected: protected:
std::string mId; std::string mId;
int mFlags; int mFlags;
ESM::NAME mType; ESM::NAME mType;
public: public:
RecordBase () {} RecordBase () {}
@ -42,7 +42,7 @@ namespace EsmTool
mFlags = flags; mFlags = flags;
} }
ESM::NAME getType() const { ESM::NAME getType() const {
return mType; return mType;
} }