mirror of
				https://github.com/OpenMW/openmw.git
				synced 2025-10-31 13:26:38 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			193 lines
		
	
	
	
		
			6.4 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			193 lines
		
	
	
	
		
			6.4 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| /*
 | |
|   Copyright (C) 2016, 2018-2020 cc9cii
 | |
| 
 | |
|   This software is provided 'as-is', without any express or implied
 | |
|   warranty.  In no event will the authors be held liable for any damages
 | |
|   arising from the use of this software.
 | |
| 
 | |
|   Permission is granted to anyone to use this software for any purpose,
 | |
|   including commercial applications, and to alter it and redistribute it
 | |
|   freely, subject to the following restrictions:
 | |
| 
 | |
|   1. The origin of this software must not be misrepresented; you must not
 | |
|      claim that you wrote the original software. If you use this software
 | |
|      in a product, an acknowledgment in the product documentation would be
 | |
|      appreciated but is not required.
 | |
|   2. Altered source versions must be plainly marked as such, and must not be
 | |
|      misrepresented as being the original software.
 | |
|   3. This notice may not be removed or altered from any source distribution.
 | |
| 
 | |
|   cc9cii cc9c@iinet.net.au
 | |
| 
 | |
|   Much of the information on the data structures are based on the information
 | |
|   from Tes4Mod:Mod_File_Format and Tes5Mod:File_Formats but also refined by
 | |
|   trial & error.  See http://en.uesp.net/wiki for details.
 | |
| 
 | |
| */
 | |
| #ifndef ESM4_ARMO_H
 | |
| #define ESM4_ARMO_H
 | |
| 
 | |
| #include <cstdint>
 | |
| #include <string>
 | |
| #include <vector>
 | |
| 
 | |
| #include "formid.hpp"
 | |
| 
 | |
| namespace ESM4
 | |
| {
 | |
|     class Reader;
 | |
|     class Writer;
 | |
| 
 | |
|     struct Armor
 | |
|     {
 | |
|         // WARN: TES4 Armorflags still has the general flags high bits
 | |
|         enum ArmorFlags
 | |
|         {
 | |
|             TES4_Head        = 0x00000001,
 | |
|             TES4_Hair        = 0x00000002,
 | |
|             TES4_UpperBody   = 0x00000004,
 | |
|             TES4_LowerBody   = 0x00000008,
 | |
|             TES4_Hands       = 0x00000010,
 | |
|             TES4_Feet        = 0x00000020,
 | |
|             TES4_RightRing   = 0x00000040,
 | |
|             TES4_LeftRing    = 0x00000080,
 | |
|             TES4_Amulet      = 0x00000100,
 | |
|             TES4_Weapon      = 0x00000200,
 | |
|             TES4_BackWeapon  = 0x00000400,
 | |
|             TES4_SideWeapon  = 0x00000800,
 | |
|             TES4_Quiver      = 0x00001000,
 | |
|             TES4_Shield      = 0x00002000,
 | |
|             TES4_Torch       = 0x00004000,
 | |
|             TES4_Tail        = 0x00008000,
 | |
|             //
 | |
|             FO3_Head         = 0x00000001,
 | |
|             FO3_Hair         = 0x00000002,
 | |
|             FO3_UpperBody    = 0x00000004,
 | |
|             FO3_LeftHand     = 0x00000008,
 | |
|             FO3_RightHand    = 0x00000010,
 | |
|             FO3_Weapon       = 0x00000020,
 | |
|             FO3_PipBoy       = 0x00000040,
 | |
|             FO3_Backpack     = 0x00000080,
 | |
|             FO3_Necklace     = 0x00000100,
 | |
|             FO3_Headband     = 0x00000200,
 | |
|             FO3_Hat          = 0x00000400,
 | |
|             FO3_EyeGlasses   = 0x00000800,
 | |
|             FO3_NoseRing     = 0x00001000,
 | |
|             FO3_Earrings     = 0x00002000,
 | |
|             FO3_Mask         = 0x00004000,
 | |
|             FO3_Choker       = 0x00008000,
 | |
|             FO3_MouthObject  = 0x00010000,
 | |
|             FO3_BodyAddOn1   = 0x00020000,
 | |
|             FO3_BodyAddOn2   = 0x00040000,
 | |
|             FO3_BodyAddOn3   = 0x00080000,
 | |
|             //
 | |
|             TES5_Head        = 0x00000001,
 | |
|             TES5_Hair        = 0x00000002,
 | |
|             TES5_Body        = 0x00000004,
 | |
|             TES5_Hands       = 0x00000008,
 | |
|             TES5_Forearms    = 0x00000010,
 | |
|             TES5_Amulet      = 0x00000020,
 | |
|             TES5_Ring        = 0x00000040,
 | |
|             TES5_Feet        = 0x00000080,
 | |
|             TES5_Calves      = 0x00000100,
 | |
|             TES5_Shield      = 0x00000200,
 | |
|             TES5_Tail        = 0x00000400,
 | |
|             TES5_LongHair    = 0x00000800,
 | |
|             TES5_Circlet     = 0x00001000,
 | |
|             TES5_Ears        = 0x00002000,
 | |
|             TES5_BodyAddOn3  = 0x00004000,
 | |
|             TES5_BodyAddOn4  = 0x00008000,
 | |
|             TES5_BodyAddOn5  = 0x00010000,
 | |
|             TES5_BodyAddOn6  = 0x00020000,
 | |
|             TES5_BodyAddOn7  = 0x00040000,
 | |
|             TES5_BodyAddOn8  = 0x00080000,
 | |
|             TES5_DecapHead   = 0x00100000,
 | |
|             TES5_Decapitate  = 0x00200000,
 | |
|             TES5_BodyAddOn9  = 0x00400000,
 | |
|             TES5_BodyAddOn10 = 0x00800000,
 | |
|             TES5_BodyAddOn11 = 0x01000000,
 | |
|             TES5_BodyAddOn12 = 0x02000000,
 | |
|             TES5_BodyAddOn13 = 0x04000000,
 | |
|             TES5_BodyAddOn14 = 0x08000000,
 | |
|             TES5_BodyAddOn15 = 0x10000000,
 | |
|             TES5_BodyAddOn16 = 0x20000000,
 | |
|             TES5_BodyAddOn17 = 0x40000000,
 | |
|             TES5_FX01        = 0x80000000
 | |
|         };
 | |
| 
 | |
|         enum GeneralFlags
 | |
|         {
 | |
|             TYPE_TES4        = 0x1000,
 | |
|             TYPE_FO3         = 0x2000,
 | |
|             TYPE_TES5        = 0x3000,
 | |
|             TYPE_FONV        = 0x4000,
 | |
|             //
 | |
|             TES4_HideRings   = 0x0001,
 | |
|             TES4_HideAmulet  = 0x0002,
 | |
|             TES4_NonPlayable = 0x0040,
 | |
|             TES4_HeavyArmor  = 0x0080,
 | |
|             //
 | |
|             FO3_PowerArmor   = 0x0020,
 | |
|             FO3_NonPlayable  = 0x0040,
 | |
|             FO3_HeavyArmor   = 0x0080,
 | |
|             //
 | |
|             TES5_LightArmor  = 0x0000,
 | |
|             TES5_HeavyArmor  = 0x0001,
 | |
|             TES5_None        = 0x0002,
 | |
|             TES5_ModVoice    = 0x0004, // note bit shift
 | |
|             TES5_NonPlayable = 0x0040  // note bit shift
 | |
|         };
 | |
| 
 | |
| #pragma pack(push, 1)
 | |
|         struct Data
 | |
|         {
 | |
|             std::uint16_t armor; // only in TES4?
 | |
|             std::uint32_t value;
 | |
|             std::uint32_t health; // not in TES5?
 | |
|             float         weight;
 | |
|         };
 | |
| #pragma pack(pop)
 | |
| 
 | |
|         FormId mFormId;       // from the header
 | |
|         std::uint32_t mFlags; // from the header, see enum type RecordFlag for details
 | |
| 
 | |
|         bool mIsTES4; // TODO: check that these match the general flags
 | |
|         bool mIsFO3;
 | |
|         bool mIsFONV;
 | |
| 
 | |
|         std::string mEditorId;
 | |
|         std::string mFullName;
 | |
|         std::string mModelMale;
 | |
|         std::string mModelMaleWorld;
 | |
|         std::string mModelFemale;
 | |
|         std::string mModelFemaleWorld;
 | |
|         std::string mText;
 | |
|         std::string mIconMale;
 | |
|         std::string mMiniIconMale;
 | |
|         std::string mIconFemale;
 | |
|         std::string mMiniIconFemale;
 | |
| 
 | |
|         FormId mPickUpSound;
 | |
|         FormId mDropSound;
 | |
| 
 | |
|         std::string mModel; // FIXME: for OpenCS
 | |
| 
 | |
|         float mBoundRadius;
 | |
| 
 | |
|         std::uint32_t mArmorFlags;
 | |
|         std::uint32_t mGeneralFlags;
 | |
|         FormId        mScriptId;
 | |
|         std::uint16_t mEnchantmentPoints;
 | |
|         FormId        mEnchantment;
 | |
| 
 | |
|         std::vector<FormId> mAddOns; // TES5 ARMA
 | |
|         Data mData;
 | |
| 
 | |
|         void load(ESM4::Reader& reader);
 | |
|         //void save(ESM4::Writer& writer) const;
 | |
| 
 | |
|         //void blank();
 | |
|     };
 | |
| }
 | |
| 
 | |
| #endif // ESM4_ARMO_H
 |