File: loadskil.hpp

package info (click to toggle)
openmw 0.49.0-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 33,992 kB
  • sloc: cpp: 372,479; xml: 2,149; sh: 1,403; python: 797; makefile: 26
file content (137 lines) | stat: -rw-r--r-- 4,187 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
#ifndef OPENMW_ESM_SKIL_H
#define OPENMW_ESM_SKIL_H

#include <array>
#include <optional>
#include <string>

#include "components/esm/defs.hpp"
#include "components/esm/refid.hpp"

namespace ESM
{

    class ESMReader;
    class ESMWriter;

    using SkillId = StringRefId;

    struct MagicSchool
    {
        ESM::RefId mAreaSound;
        ESM::RefId mBoltSound;
        ESM::RefId mCastSound;
        ESM::RefId mFailureSound;
        ESM::RefId mHitSound;
        std::string mName;
        int32_t mAutoCalcMax;

        static constexpr int Length = 6;

        static RefId indexToSkillRefId(int index);
        static int skillRefIdToIndex(RefId id);
    };

    /*
     * Skill information
     *
     */

    struct Skill
    {

        constexpr static RecNameInts sRecordId = REC_SKIL;
        /// Return a string descriptor for this record type. Currently used for debugging / error logs only.
        static std::string_view getRecordType() { return "Skill"; }

        uint32_t mRecordFlags;
        SkillId mId;

        //! Enum that defines the index into SKDTstruct::mUseValue for all vanilla skill uses
        enum UseType
        {
            // These are shared by multiple skills
            Armor_HitByOpponent = 0,
            Block_Success = 0,
            Spellcast_Success = 0,
            Weapon_SuccessfulHit = 0,

            // Skill-specific use types
            Alchemy_CreatePotion = 0,
            Alchemy_UseIngredient = 1,
            Enchant_Recharge = 0,
            Enchant_UseMagicItem = 1,
            Enchant_CreateMagicItem = 2,
            Enchant_CastOnStrike = 3,
            Acrobatics_Jump = 0,
            Acrobatics_Fall = 1,
            Mercantile_Success = 0,
            Mercantile_Bribe = 1, //!< \Note This is bugged in vanilla and is not actually in use.
            Security_DisarmTrap = 0,
            Security_PickLock = 1,
            Sneak_AvoidNotice = 0,
            Sneak_PickPocket = 1,
            Speechcraft_Success = 0,
            Speechcraft_Fail = 1,
            Armorer_Repair = 0,
            Athletics_RunOneSecond = 0,
            Athletics_SwimOneSecond = 1,

        };

        struct SKDTstruct
        {
            int32_t mAttribute; // see defs.hpp
            int32_t mSpecialization; // 0 - Combat, 1 - Magic, 2 - Stealth
            float mUseValue[4]; // How much skill improves through use. Meaning
                                // of each field depends on what skill this
                                // is. See UseType above
        }; // Total size: 24 bytes
        SKDTstruct mData;

        std::string mDescription;
        std::string mName;
        std::string mIcon;
        float mWerewolfValue{};
        std::optional<MagicSchool> mSchool;

        static const SkillId Block;
        static const SkillId Armorer;
        static const SkillId MediumArmor;
        static const SkillId HeavyArmor;
        static const SkillId BluntWeapon;
        static const SkillId LongBlade;
        static const SkillId Axe;
        static const SkillId Spear;
        static const SkillId Athletics;
        static const SkillId Enchant;
        static const SkillId Destruction;
        static const SkillId Alteration;
        static const SkillId Illusion;
        static const SkillId Conjuration;
        static const SkillId Mysticism;
        static const SkillId Restoration;
        static const SkillId Alchemy;
        static const SkillId Unarmored;
        static const SkillId Security;
        static const SkillId Sneak;
        static const SkillId Acrobatics;
        static const SkillId LightArmor;
        static const SkillId ShortBlade;
        static const SkillId Marksman;
        static const SkillId Mercantile;
        static const SkillId Speechcraft;
        static const SkillId HandToHand;
        static constexpr int Length = 27;

        void load(ESMReader& esm, bool& isDeleted);
        void save(ESMWriter& esm, bool isDeleted = false) const;

        void blank();
        ///< Set record to default state (does not touch the ID/index).

        static RefId indexToRefId(int index);
        static int refIdToIndex(RefId id);
    };
}
#endif