From 8bce460f3446df7347d9426675beae2b94e03c1f Mon Sep 17 00:00:00 2001 From: Marco Melletti Date: Wed, 3 Sep 2014 14:40:32 +0200 Subject: [PATCH] loadnpc is still unfinished, bodypartcheck.cpp mFlags check fix --- apps/opencs/model/tools/bodypartcheck.cpp | 4 ++-- components/esm/aipackage.hpp | 4 ++-- components/esm/loadarmo.hpp | 2 +- components/esm/loadbody.hpp | 8 ++++---- components/esm/loadnpc.hpp | 11 +++++++---- 5 files changed, 16 insertions(+), 13 deletions(-) diff --git a/apps/opencs/model/tools/bodypartcheck.cpp b/apps/opencs/model/tools/bodypartcheck.cpp index f1f8984403..da7fe7b574 100644 --- a/apps/opencs/model/tools/bodypartcheck.cpp +++ b/apps/opencs/model/tools/bodypartcheck.cpp @@ -33,7 +33,7 @@ void CSMTools::BodyPartCheckStage::perform ( int stage, Messages &messages ) if ( bodyPart.mData.mVampire < 0 ) messages.push_back(std::make_pair( id, bodyPart.mId + " has negative vampire flag." )); - if ( bodyPart.mData.mFlags < 0 || bodyPart.mData.mFlags > 2 ) + if ( bodyPart.mData.mFlags < 0 || bodyPart.mData.mFlags > 3 ) messages.push_back(std::make_pair( id, bodyPart.mId + " has out of range flags value." )); if ( bodyPart.mData.mType < 0 || bodyPart.mData.mType > 2 ) @@ -52,4 +52,4 @@ void CSMTools::BodyPartCheckStage::perform ( int stage, Messages &messages ) messages.push_back(std::make_pair( id, bodyPart.mId + " has no race." )); else if ( mRaces.searchId( bodyPart.mRace ) == -1 ) messages.push_back(std::make_pair( id, bodyPart.mId + " has invalid race." )); -} \ No newline at end of file +} diff --git a/components/esm/aipackage.hpp b/components/esm/aipackage.hpp index 8a31aadf55..2e054c3e7a 100644 --- a/components/esm/aipackage.hpp +++ b/components/esm/aipackage.hpp @@ -16,8 +16,8 @@ namespace ESM struct AIData { - // These are probabilities - char mHello, mU1, mFight, mFlee, mAlarm, mU2, mU3, mU4; + char mU1, mU2, mU3, mU4; // Unknown values + unsigned char mHello, mFight, mFlee, mAlarm; // These are probabilities [0, 100] int mServices; // See the Services enum void blank(); diff --git a/components/esm/loadarmo.hpp b/components/esm/loadarmo.hpp index 991f4e1855..41fbcf8180 100644 --- a/components/esm/loadarmo.hpp +++ b/components/esm/loadarmo.hpp @@ -46,7 +46,7 @@ enum PartReferenceType // Reference to body parts struct PartReference { - char mPart; + unsigned char mPart; // declared values [0, 26] std::string mMale, mFemale; }; diff --git a/components/esm/loadbody.hpp b/components/esm/loadbody.hpp index 286e3f96e3..5e9869d247 100644 --- a/components/esm/loadbody.hpp +++ b/components/esm/loadbody.hpp @@ -49,10 +49,10 @@ struct BodyPart struct BYDTstruct { - char mPart; - char mVampire; - char mFlags; - char mType; + unsigned char mPart; // mesh part + unsigned char mVampire; // boolean + unsigned char mFlags; + unsigned char mType; // mesh type }; BYDTstruct mData; diff --git a/components/esm/loadnpc.hpp b/components/esm/loadnpc.hpp index fd3e45bdc3..ff255608fa 100644 --- a/components/esm/loadnpc.hpp +++ b/components/esm/loadnpc.hpp @@ -81,9 +81,11 @@ struct NPC mLuck; char mSkills[Skill::Length]; - char mReputation; + + // at opencs/model/tools/referenceablecheck.cpp:679 is assumed that negative reputation values are invalid, can we assume we won't find any negative value? + unsigned char mReputation; unsigned short mHealth, mMana, mFatigue; - char mDisposition, mFactionID, mRank; + signed char mDisposition, mFactionID, mRank; char mUnknown; int mGold; }; // 52 bytes @@ -91,7 +93,8 @@ struct NPC struct NPDTstruct12 { short mLevel; - char mDisposition, mReputation, mRank; + unsigned char mReputation; // see NPTDstruct52.mReputation + signed char mDisposition, mRank; char mUnknown1, mUnknown2, mUnknown3; int mGold; // ?? not certain }; // 12 bytes @@ -103,7 +106,7 @@ struct NPC }; #pragma pack(pop) - char mNpdtType; + unsigned char mNpdtType; NPDTstruct52 mNpdt52; NPDTstruct12 mNpdt12; //for autocalculated characters