-
Notifications
You must be signed in to change notification settings - Fork 1
/
uoxstruct.h
266 lines (248 loc) · 5.64 KB
/
uoxstruct.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
#ifndef __UOXSTRUCT_H
#define __UOXSTRUCT_H
namespace UOX
{
const UI08 BIT_ANIMAL = 2;
const UI08 BIT_ANTIBLINK = 1;
const UI08 BIT_CANFLY = 0;
const UI08 BIT_WATER = 3;
const UI08 BIT_AMPHI = 4;
class CCreatures
{
/////////////////////////////////////////////////////////////////////////////////////////////////
// soundflags 0: normal, 5 sounds (attack-started,idle, attack, defence, dying)
// 1: birds .. only one "bird-shape" and zillions of sounds ...
// 2: only 3 sounds -> (attack,defence,dying)
// 3: only 4 sounds -> (attack-started,attack,defnce,dying)
// 4: only 1 sound !!
//
// who_am_i bit # 1 creature can fly (must have the animations, so better not change)
// # 2 anti-blink: these creatures don't have animation #4, if not set creature will randomly disappear in battle
// if you find a creature that blinks while fighting, set that bit
// # 3 animal-bit (currently not used/set)
// # 4 water creatures (currently not used/set)
// icon: used for tracking, to set the appropriate icon
////////////////////////////////////////////////////////////////////////////////////////////////////////
private:
UI16 soundList[SND_COUNT];
std::bitset< 5 > who_am_i;
UI16 icon;
UI16 mountID;
public:
CCreatures() : icon( 0 ), mountID( 0 )
{
who_am_i.reset();
memset( soundList, 0x00, SND_COUNT );
}
UI16 GetSound( monsterSound soundType ) const
{
return soundList[static_cast<UI08>(soundType)];
}
void SetSound( monsterSound soundType, UI16 newVal )
{
soundList[static_cast<UI08>(soundType)] = newVal;
}
UI16 Icon( void ) const
{
return icon;
}
UI08 WhoAmI( void ) const
{
return static_cast<UI08>(who_am_i.to_ulong());
}
void Icon( UI16 value )
{
icon = value;
}
UI16 MountID( void ) const
{
return mountID;
}
void MountID( UI16 value )
{
mountID = value;
}
bool IsAnimal( void ) const { return who_am_i.test( BIT_ANIMAL ); }
bool AntiBlink( void ) const { return who_am_i.test( BIT_ANTIBLINK ); }
bool CanFly( void ) const { return who_am_i.test( BIT_CANFLY ); }
bool IsWater( void ) const { return who_am_i.test( BIT_WATER ); }
bool IsAmphibian( void ) const { return who_am_i.test( BIT_AMPHI ); }
void IsAnimal( bool value ) { who_am_i.set( BIT_ANIMAL, value ); }
void AntiBlink( bool value ) { who_am_i.set( BIT_ANTIBLINK, value ); }
void CanFly( bool value ) { who_am_i.set( BIT_CANFLY, value ); }
void IsWater( bool value ) { who_am_i.set( BIT_WATER, value ); }
void IsAmphibian( bool value ) { who_am_i.set( BIT_AMPHI, value ); }
};
struct point3
{
R32 x, y, z;
point3()
{
}
point3( UI16 X, UI16 Y, SI08 Z ) : x( X ), y( Y ), z( Z )
{
}
point3( R32 X, R32 Y, R32 Z ) : x( X ), y( Y ), z( Z )
{
}
void Assign( UI16 X, UI16 Y, SI08 Z );
void Assign( R32 X, R32 Y, R32 Z );
R64 Mag( void ) const;
R32 MagSquared( void ) const;
R64 Mag3D( void ) const;
R32 MagSquared3D( void ) const;
void Normalize( void );
};
inline bool operator==( point3 const &a, point3 const &b )
{
return (a.x == b.x && a.y == b.y && a.z == b.z );
}
inline point3 operator+( point3 const &a, point3 const &b )
{
return (point3( a.x + b.x, a.y + b.y, a.z + b.z ));
}
inline point3 operator-( point3 const &a, point3 const &b )
{
return (point3( a.x - b.x, a.y - b.y, a.z - b.z ));
}
inline point3 operator*( point3 const &a, R32 const &b )
{
return point3( a.x*b, a.y*b, a.z*b );
}
inline point3 operator*( R32 const &a, point3 const &b )
{
return point3( a * b.x, a * b.y, a * b.z );
}
inline point3 operator/( point3 const &a, R32 const &b )
{
R32 inv = 1.f / b;
return point3( a.x * inv, a.y * inv, a.z * inv );
}
inline void point3::Assign( UI16 X, UI16 Y, SI08 Z )
{
x = X;
y = Y;
z = Z;
}
inline void point3::Assign( R32 X, R32 Y, R32 Z )
{
x = X;
y = Y;
z = Z;
}
inline R64 point3::Mag3D( void ) const
{
return (R32)sqrt( x*x + y*y + z*z );
}
inline R32 point3::MagSquared3D( void ) const
{
return ( x*x + y*y + z*z );
}
inline R64 point3::Mag( void ) const
{
return (R32)sqrt( x*x + y*y );
}
inline R32 point3::MagSquared( void ) const
{
return ( x*x + y*y );
}
inline void point3::Normalize( void )
{
R32 foo = 1 / Mag3D();
x *= foo;
y *= foo;
z *= foo;
}
struct UOXFileWrapper
{
FILE *mWrap;
};
struct GoPlaces_st
{
SI16 x;
SI16 y;
SI08 z;
UI08 worldNum;
GoPlaces_st() : x( -1 ), y( -1 ), z( -1 ), worldNum( 0 )
{
}
};
// Teleport Locations
class CTeleLocationEntry
{
private:
point3 src;
UI08 srcWorld;
point3 trg;
UI08 trgWorld;
public:
CTeleLocationEntry() : srcWorld( 0xFF ), trgWorld( 0 )
{
src.Assign( 0, 0, ILLEGAL_Z );
trg.Assign( 0, 0, ILLEGAL_Z );
}
point3 SourceLocation( void ) const
{
return src;
}
void SourceLocation( UI16 x, UI16 y, SI08 z )
{
src.Assign( x, y, z );
}
UI08 SourceWorld( void ) const
{
return srcWorld;
}
void SourceWorld( UI08 newVal )
{
srcWorld = newVal;
}
point3 TargetLocation( void ) const
{
return trg;
}
void TargetLocation( UI16 x, UI16 y, SI08 z )
{
trg.Assign( x, y, z );
}
UI08 TargetWorld( void ) const
{
return trgWorld;
}
void TargetWorld( UI08 newVal )
{
trgWorld = newVal;
}
};
// Instalog Locations
struct LogoutLocationEntry
{
SI16 x1;
SI16 y1;
SI16 x2;
SI16 y2;
};
struct advance_st
{
UI16 base;
UI08 success;
UI08 failure;
UI08 amtToGain;
advance_st() : base( 0 ), success( 0 ), failure( 0 ), amtToGain( 1 )
{
}
};
struct TitlePair_st
{
SI16 lowBound;
std::string toDisplay;
TitlePair_st() : lowBound( 0 ), toDisplay( "" )
{
}
TitlePair_st( SI16 lB, const std::string toDisp ) : lowBound( lB )
{
toDisplay = toDisp;
}
};
}
#endif