-
Notifications
You must be signed in to change notification settings - Fork 0
/
MWRandItems.h
281 lines (230 loc) · 9.35 KB
/
MWRandItems.h
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
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
/*===========================================================================
*
* File: Mwranditem.H
* Author: Dave Humphrey ([email protected])
* Created On: Friday, May 23, 2003
*
* Description
*
*=========================================================================*/
#ifndef __MWRANDITEMS_H
#define __MWRANDITEMS_H
/*===========================================================================
*
* Begin Required Includes
*
*=========================================================================*/
#include "PtrArray.h"
#include "GenFile.h"
#include "utility/NameList.h"
#include "EsmWeapon.h"
#include "EsmArmor.h"
#include "EsmClothing.h"
#include "mwrandcom.h"
/*===========================================================================
* End of Required Includes
*=========================================================================*/
/*===========================================================================
*
* Begin Definitions
*
*=========================================================================*/
/* Maximum string name size */
#define MWRI_MAX_NAMESIZE 32
/* Temporary buffer size */
#define MWRI_MAX_BUFFERSIZE 511
/* Item masks */
#define MWRI_ITEMMASK_WEAPON 1
#define MWRI_ITEMMASK_ARMOR 2
#define MWRI_ITEMMASK_CLOTHING 4
#define MWRI_ITEMMASK_MISC 8
#define MWRI_ITEMMASK_ALL 0xFFFF
/* Biped name indices */
#define MWRI_ITEMBODY_NONE -1
#define MWRI_ITEMBODY_HEAD 0
#define MWRI_ITEMBODY_HAIR 1
#define MWRI_ITEMBODY_NECK 2
#define MWRI_ITEMBODY_CHEST 3
#define MWRI_ITEMBODY_GROIN 4
#define MWRI_ITEMBODY_SKIRT 5
#define MWRI_ITEMBODY_RIGHTHAND 6
#define MWRI_ITEMBODY_LEFTHAND 7
#define MWRI_ITEMBODY_RIGHTWRIST 8
#define MWRI_ITEMBODY_LEFTWRIST 9
#define MWRI_ITEMBODY_SHIELD 10
#define MWRI_ITEMBODY_RIGHTFOREARM 11
#define MWRI_ITEMBODY_LEFTFOREARM 12
#define MWRI_ITEMBODY_RIGHTUPPERARM 13
#define MWRI_ITEMBODY_LEFTUPPERARM 14
#define MWRI_ITEMBODY_RIGHTFOOT 15
#define MWRI_ITEMBODY_LEFTFOOT 16
#define MWRI_ITEMBODY_RIGHTANKLE 17
#define MWRI_ITEMBODY_LEFTANKLE 18
#define MWRI_ITEMBODY_RIGHTKNEE 19
#define MWRI_ITEMBODY_LEFTKNEE 20
#define MWRI_ITEMBODY_RIGHTUPPERLEG 21
#define MWRI_ITEMBODY_LEFTUPPERLEG 22
#define MWRI_ITEMBODY_RIGHTPAULDRON 23
#define MWRI_ITEMBODY_LEFTPAULDRON 24
#define MWRI_ITEMBODY_WEAPON 25
#define MWRI_ITEMBODY_TAIL 26
#define MWRI_ITEMBODY_NUMPARTS 27
/* Effect masks */
#define MWRI_EFFMASK_NONE 1
#define MWRI_EFFMASK_ENCHANT 2
#define MWRI_EFFMASK_WEIGHT 4
#define MWRI_EFFMASK_DAMAGE 8
#define MWRI_EFFMASK_MAXDAMAGE 16
#define MWRI_EFFMASK_MINDAMAGE 32
#define MWRI_EFFMASK_REACH 64
#define MWRI_EFFMASK_SPEED 128
#define MWRI_EFFMASK_CONDITION 256
#define MWRI_EFFMASK_ARMOR 512
#define MWRI_EFFMASK_ENCHANTPTS 1024
#define MWRI_EFFMASK_SPELL (2048)
#define MWRI_EFFMASK_ALL 0x7FFFFFFF
/* Enchantment masks */
#define MWRI_ENCMASK_NONE 1
#define MWRI_ENCMASK_STRIKES 2
#define MWRI_ENCMASK_CONSTANT 4
#define MWRI_ENCMASK_USED 8
#define MWRI_ENCMASK_ONCE 16
#define MWRI_ENCMASK_ALL 0x7FFFFFFF
/*===========================================================================
* End of Definitions
*=========================================================================*/
/*===========================================================================
*
* Begin Type Definitions
*
*=========================================================================*/
/* Weapon specific data */
typedef struct {
long Condition;
byte MinChop;
byte MaxChop;
byte MinSlash;
byte MaxSlash;
byte MinThrust;
byte MaxThrust;
float Speed;
float Reach;
int Type;
bool IgnoreResist;
} mwri_weapon_t;
/* Armor specific data */
typedef struct {
long Condition;
long AC;
int Type;
} mwri_armor_t;
/* Clothing specific data */
typedef struct {
int Type;
} mwri_clothing_t;
typedef struct {
TCHAR Name[MWRI_MAX_NAMESIZE+1]; /* Base item name string */
TCHAR Material[MWRI_MAX_NAMESIZE+1]; /* Optional material of the item */
long ItemType; /* Item type value (bitmask) */
long BasePrice; /* Base item price */
long EnchantPts; /* Base enchantment points */
float Weight; /* Base item weight */
long EffectMask; /* Types of valid effects for the item */
long EnchantMask; /* Types of valid enchantments for the item */
union { /* Specific item type data */
mwri_armor_t Armor;
mwri_weapon_t Weapon;
mwri_clothing_t Clothing;
};
long ItemLevel; /* Base item level (higher level items will be rarer) (0-100) */
TCHAR Model[MWRI_MAX_NAMESIZE+1]; /* Model and icon filenames */
TCHAR Icon[MWRI_MAX_NAMESIZE+1];
/* Male/female parts for clothing/armor */
TCHAR MaleParts[MWRI_ITEMBODY_NUMPARTS][MWRI_MAX_NAMESIZE+1];
TCHAR FemaleParts[MWRI_ITEMBODY_NUMPARTS][MWRI_MAX_NAMESIZE+1];
} mwri_item_t;
/* Pointer array of items */
typedef TPtrArray<mwri_item_t> CMwRandItemArray;
/*===========================================================================
* End of Type Definitions
*=========================================================================*/
/*===========================================================================
*
* Begin Class CMwRandItems Definition
*
* An array of base item records used for random item creation.
*
*=========================================================================*/
class CMwRandItems {
/*---------- Begin Private Class Members ----------------------*/
private:
CMwRandItemArray m_ItemArray; /* Array of item pointers */
long m_InputLine;
/*---------- Begin Protected Class Methods --------------------*/
protected:
/* Find a body part index */
int FindBodyPart (const TCHAR* pString);
/* Read item from text file */
bool ReadItem (CGenFile& File, mwri_item_t* pNewItem);
bool ReadItem (CGenFile& File);
/* Parse an effect/enchant mask value string */
long ParseEffectMask (const TCHAR* pValue);
long ParseEnchantMask (const TCHAR* pValue);
/* Set item parameters from string values */
bool SetItemParam (mwri_item_t* pNewItem, const TCHAR* pVariable, const TCHAR* pValue);
bool SetArmorParam (mwri_item_t* pNewItem, const TCHAR* pVariable, const TCHAR* pValue);
bool SetClothingParam (mwri_item_t* pNewItem, const TCHAR* pVariable, const TCHAR* pValue);
bool SetMiscParam (mwri_item_t* pNewItem, const TCHAR* pVariable, const TCHAR* pValue);
bool SetWeaponParam (mwri_item_t* pNewItem, const TCHAR* pVariable, const TCHAR* pValue);
bool SetMaleBodyPart (mwri_item_t* pNewItem, const TCHAR* pVariable, const TCHAR* pValue);
bool SetFemaleBodyPart (mwri_item_t* pNewItem, const TCHAR* pVariable, const TCHAR* pValue);
/*---------- Begin Public Class Methods -----------------------*/
public:
/* Class Constructors/Destructors */
CMwRandItems();
virtual ~CMwRandItems() { Destroy(); }
virtual void Destroy (void);
/* Get class members */
int GetNumItems (void) { return (m_ItemArray.GetNumElements()); }
mwri_item_t* GetItem (const int Index) { return (m_ItemArray.GetAt(Index)); }
/* Input items from the given filename */
bool ReadItemFile (const TCHAR* pFilename);
};
/*===========================================================================
* End of Class CMwRandItems Definition
*=========================================================================*/
/*===========================================================================
*
* Begin Function Prototypes
*
*=========================================================================*/
/* Initialize an item structure */
void DefaultMwRandItem (mwri_item_t& Item);
void DefaultMwRandItemArmor (mwri_item_t& Item);
void DefaultMwRandItemClothing (mwri_item_t& Item);
void DefaultMwRandItemMisc (mwri_item_t& Item);
void DefaultMwRandItemWeapon (mwri_item_t& Item);
/* Find a body part string */
const TCHAR* GetMWRandItemBodyPart (const int Index);
/* String conversion methods */
long ShortStringToMwRandItemMask (const TCHAR* pString);
int StringToMwRandItemMask (const TCHAR* pString);
const TCHAR* MwRandItemMaskToString (const long ItemMask);
const TCHAR* MwRandItemMaskToShortString (const long ItemMask);
/*===========================================================================
* End of Function Prototypes
*=========================================================================*/
/*===========================================================================
*
* Begin External Variable Definitions
*
*=========================================================================*/
extern valuenames_t l_MwEffectMasks[];
extern valuenames_t l_MwEnchantMasks[];
/*===========================================================================
* End of External Variable Definitions
*=========================================================================*/
#endif
/*===========================================================================
* End of File Mwranditem.H
*=========================================================================*/