diff --git a/apps/opencs/model/tools/bodypartcheck.cpp b/apps/opencs/model/tools/bodypartcheck.cpp index f1f898440..da7fe7b57 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 8a31aadf5..cbe82f16e 100644 --- a/components/esm/aipackage.hpp +++ b/components/esm/aipackage.hpp @@ -16,8 +16,10 @@ namespace ESM struct AIData { - // These are probabilities - char mHello, mU1, mFight, mFlee, mAlarm, mU2, mU3, mU4; + unsigned char mHello; + char mU1; + unsigned char mFight, mFlee, mAlarm; // These are probabilities [0, 100] + char mU2, mU3, mU4; // Unknown values int mServices; // See the Services enum void blank(); diff --git a/components/esm/loadarmo.hpp b/components/esm/loadarmo.hpp index 991f4e185..6be9dd971 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; // possible values [0, 26] std::string mMale, mFemale; }; diff --git a/components/esm/loadbody.hpp b/components/esm/loadbody.hpp index 286e3f96e..5e9869d24 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 fd3e45bdc..0e90108c3 100644 --- a/components/esm/loadnpc.hpp +++ b/components/esm/loadnpc.hpp @@ -80,10 +80,12 @@ struct NPC mPersonality, mLuck; - char mSkills[Skill::Length]; - char mReputation; + // mSkill can grow up to 200, it must be unsigned + unsigned char mSkills[Skill::Length]; + + char mFactionID; unsigned short mHealth, mMana, mFatigue; - char mDisposition, mFactionID, mRank; + signed char mDisposition, mReputation, mRank; char mUnknown; int mGold; }; // 52 bytes @@ -91,9 +93,10 @@ struct NPC struct NPDTstruct12 { short mLevel; - char mDisposition, mReputation, mRank; + // see above + signed char mDisposition, mReputation, mRank; char mUnknown1, mUnknown2, mUnknown3; - int mGold; // ?? not certain + int mGold; }; // 12 bytes struct Dest @@ -103,7 +106,7 @@ struct NPC }; #pragma pack(pop) - char mNpdtType; + unsigned char mNpdtType; NPDTstruct52 mNpdt52; NPDTstruct12 mNpdt12; //for autocalculated characters diff --git a/components/esm/loadregn.hpp b/components/esm/loadregn.hpp index 1992c951b..c231b6aa0 100644 --- a/components/esm/loadregn.hpp +++ b/components/esm/loadregn.hpp @@ -24,10 +24,11 @@ struct Region #pragma pack(1) struct WEATstruct { - // I guess these are probabilities - char mClear, mCloudy, mFoggy, mOvercast, mRain, mThunder, mAsh, mBlight, + // These are probabilities that add up to 100 + unsigned char mClear, mCloudy, mFoggy, mOvercast, mRain, mThunder, mAsh, mBlight, // Unknown weather, probably snow and something. Only // present in file version 1.3. + // the engine uses mA as "snow" and mB as "blizard" mA, mB; }; // 10 bytes @@ -35,7 +36,7 @@ struct Region struct SoundRef { NAME32 mSound; - char mChance; + unsigned char mChance; }; // 33 bytes #pragma pack(pop)