Common Types: Difference between revisions

From wowdev
Jump to navigation Jump to search
mNo edit summary
mNo edit summary
(21 intermediate revisions by 7 users not shown)
Line 7: Line 7:
                         ^ table referenced
                         ^ table referenced
                                       ^ variable referenced
                                       ^ variable referenced
=stringref=
A reference into the string block of a [[DBC]] or [[DB2]] database file. See [[DBC#String_Block]].
using stringref = uint32_t;
==langstringref==
A field for localized strings, consisting of an array of stringrefs followed by a field of flags. The amount of language entries depends on the version, with Cataclysm dropping all but the client's language. See [[Localization]] for details.
struct langstringref
{
#if {{Template:Sandbox/VersionRange|max_expansionlevel=4|max_exclusive=1}}
  stringref enUS; // also enGB
  stringref koKR;
  stringref frFR;
  stringref deDE;
  stringref enCN; // also zhCN
  stringref enTW; // also zhTW
  stringref esES;
  stringref esMX;
//! \todo verify that pre->8 locales hadn't changed
#if {{Template:Sandbox/VersionRange|min_expansionlevel=2|min_build=2.?.?.????}} // {{Template:Unverified|At least in 2.4.3, but probably after 2.0}}
  stringref ruRU;
  stringref unknown_9;
  stringref ptPT; // also ptBR
  stringref itIT;
  stringref unknown_12;
  stringref unknown_13;
  stringref unknown_14;
  stringref unknown_15;
#endif
  uint32_t flags;
#else
  stringref client_locale;
#endif
};
=C2Vector=
=C2Vector=
A two component float vector.
A two component float vector.
Line 13: Line 46:
   float x;
   float x;
   float y;
   float y;
};
=C2iVector=
A two component int vector.
struct C2iVector
{
  int x;
  int y;
  };
  };
=C3Vector=
=C3Vector=
Line 22: Line 62:
   float z;
   float z;
  };
  };
= C3iVector =
A three component int vector.
struct C3iVector
{
  int x;
  int y;
  int z;
};
=C4Vector=
=C4Vector=
A four component float vector.
A four component float vector.
Line 31: Line 83:
   float w;
   float w;
  };
  };
=C4iVector=
A four component int vector.
  struct C4iVector
  {
    int x;
    int y;
    int z;
    int w;
  };
=C33Matrix=
=C33Matrix=
A three by three matrix.
A three by three matrix.
  struct C33Matrix // todo: row or column?
  struct C33Matrix // todo: row or column?
  {
  {
   C3Vector columns[3];
   {{Template:Type|C3Vector}} columns[3];
};
=C34Matrix=
A three by four matrix.
struct C34Matrix // todo: row or column?
{
  {{Template:Type|C3Vector}} columns[4];
  };
  };
=C44Matrix=
=C44Matrix=
Line 41: Line 110:
  struct C44Matrix // todo: row or column?
  struct C44Matrix // todo: row or column?
  {
  {
   C4Vector columns[4];
   {{Template:Type|C4Vector}} columns[4];
  };
  };
=C4Plane=
=C4Plane=
Line 47: Line 116:
  struct C4Plane // todo: verify
  struct C4Plane // todo: verify
  {
  {
   C3Vector normal;
   {{Template:Type|C3Vector}} normal;
   float distance;
   float distance;
  };
  };
Those 4 floats are ''a, b, c, d'' variables from [https://en.wikipedia.org/wiki/Plane_(geometry)#Point-normal_form_and_general_form_of_the_equation_of_a_plane General form of the equation of a plane]
=C4Quaternion=
=C4Quaternion=
A quaternion.
A quaternion.
  struct C4Quaternioin
  struct C4Quaternion
  {
  {
   float x;
   float x;
   float y;
   float y;
   float z;
   float z;
   float w; // todo: w first?
   float w; // Unlike Quaternions elsewhere, the scalar part ('w') is the last element in the struct instead of the first
  };
  };
=CRange=
=CRange=
A one dimensional range defined by the bounds.
A one dimensional float range defined by the bounds.
  struct Range
  struct Range
  {
  {
   float min;
   float min;
   float max;
   float max;
};
=CiRange=
A one dimensional int range defined by the bounds.
struct Range
{
  int min;
  int max;
  };
  };
=CAaBox=
=CAaBox=
Line 70: Line 150:
  struct CAaBox
  struct CAaBox
  {
  {
   C3Vector min;
   {{Template:Type|C3Vector}} min;
   C3Vector max;
   {{Template:Type|C3Vector}} max;
  };
  };
=CAaSphere=
=CAaSphere=
Line 77: Line 157:
  struct CAaSphere
  struct CAaSphere
  {
  {
   C3Vector position;
   {{Template:Type|C3Vector}} position;
   float radius;
   float radius;
  };
  };
Line 91: Line 171:
   unsigned char a;
   unsigned char a;
  };
  };
=CImVector=
A color given in values of blue, green, red and alpha
struct CImVector
{
  unsigned char b;
  unsigned char g;
  unsigned char r;
  unsigned char a;
};
=C3sVector=
A three component vector of shorts.
struct C3sVector
{
  int16_t x;
  int16_t y;
  int16_t z;
};
=C3Segment=
  struct C3Segment
  {
    C3Vector start;
    C3Vector end;
  };
=CFacet=
  struct CFacet
  {
    C4Plane plane;
    C3Vector vertices[3];
  };
=C3Ray=
A ray defined by an origin and direction.
  struct C3Ray
  {
    C3Vector origin;
    C3Vector dir;
  };
=CRect=
  struct CRect
  {
    float top;
    float miny;
    float left;
    float minx;
    float bottom;
    float maxy;
    float right;
    float maxx;
  };
=CiRect=
  struct CiRect
  {
    int top;
    int miny;
    int left;
    int minx;
    int bottom;
    int maxy;
    int right;
    int maxx;
  };
=fixed_point=
=fixed_point=
A fixed point real number, opposed to a floating point.
A fixed point real number, opposed to a floating point.
Line 100: Line 247:
   float to_float() const { return (sign ? -1.0f : 1.0f) * (integer + decimal / float (1 << decimal_bits)); }
   float to_float() const { return (sign ? -1.0f : 1.0f) * (integer + decimal / float (1 << decimal_bits)); }
  };
  };
=fixed16=
A fixed point number without integer part.
using fixed16 = short; // divide by 0x7fff to get float value
or semantically (0 is not a valid bit size in bitfields) equivalent to
using fixed16 = {{Template:Type|fixed_point}}<uint16_t, 0, 15>;

Revision as of 21:04, 8 October 2017

This page lists types commonly used in WoW, but not specific to a file format.

foreign_key

A reference into a DBC or DB2 database file. E.g.

foreign_key<uint16_t, &LiquidTypeRec::m_spellID> liquid_spell_id;
            ^ type of reference
                       ^ table referenced
                                      ^ variable referenced

stringref

A reference into the string block of a DBC or DB2 database file. See DBC#String_Block.

using stringref = uint32_t;

langstringref

A field for localized strings, consisting of an array of stringrefs followed by a field of flags. The amount of language entries depends on the version, with Cataclysm dropping all but the client's language. See Localization for details.

struct langstringref
{
#if < Cata
  stringref enUS; // also enGB
  stringref koKR;
  stringref frFR;
  stringref deDE;
  stringref enCN; // also zhCN
  stringref enTW; // also zhTW
  stringref esES;
  stringref esMX;
//! \todo verify that pre->8 locales hadn't changed
#if ≥ BC (2.?.?.????) // At least in 2.4.3, but probably after 2.0
  stringref ruRU;
  stringref unknown_9;
  stringref ptPT; // also ptBR
  stringref itIT;
  stringref unknown_12;
  stringref unknown_13;
  stringref unknown_14;
  stringref unknown_15;
#endif
  uint32_t flags;
#else
  stringref client_locale;
#endif
};

C2Vector

A two component float vector.

struct C2Vector
{
  float x;
  float y;
};

C2iVector

A two component int vector.

struct C2iVector
{
  int x;
  int y;
};

C3Vector

A three component float vector.

struct C3Vector
{
  float x;
  float y;
  float z;
};

C3iVector

A three component int vector.

struct C3iVector
{
  int x;
  int y;
  int z;
};

C4Vector

A four component float vector.

struct C4Vector
{
  float x;
  float y;
  float z;
  float w;
};

C4iVector

A four component int vector.

 struct C4iVector
 {
   int x;
   int y;
   int z;
   int w;
 };

C33Matrix

A three by three matrix.

struct C33Matrix // todo: row or column?
{
  C3Vector columns[3];
};

C34Matrix

A three by four matrix.

struct C34Matrix // todo: row or column?
{
  C3Vector columns[4];
};

C44Matrix

A four by four matrix.

struct C44Matrix // todo: row or column?
{
  C4Vector columns[4];
};

C4Plane

A 3D plane defined by four floats.

struct C4Plane // todo: verify
{
  C3Vector normal;
  float distance;
};

Those 4 floats are a, b, c, d variables from General form of the equation of a plane

C4Quaternion

A quaternion.

struct C4Quaternion
{
  float x;
  float y;
  float z;
  float w; // Unlike Quaternions elsewhere, the scalar part ('w') is the last element in the struct instead of the first
};

CRange

A one dimensional float range defined by the bounds.

struct Range
{
  float min;
  float max;
};

CiRange

A one dimensional int range defined by the bounds.

struct Range
{
  int min;
  int max;
};

CAaBox

An axis aligned box described by the minimum and maximum point.

struct CAaBox
{
  C3Vector min;
  C3Vector max;
};

CAaSphere

An axis aligned sphere described by position and radius.

struct CAaSphere
{
  C3Vector position;
  float radius;
};

CArgb

A color given in values of red, green, blue and alpha. Either

using CArgb = uint32_t;

or

struct CArgb // todo: verify, add CRgba, ..?
{
  unsigned char r;
  unsigned char g;
  unsigned char b;
  unsigned char a;
};

CImVector

A color given in values of blue, green, red and alpha

struct CImVector
{
  unsigned char b;
  unsigned char g;
  unsigned char r;
  unsigned char a;
};

C3sVector

A three component vector of shorts.

struct C3sVector
{
  int16_t x;
  int16_t y;
  int16_t z;
};

C3Segment

 struct C3Segment
 {
   C3Vector start;
   C3Vector end;
 };

CFacet

 struct CFacet
 {
   C4Plane plane;
   C3Vector vertices[3];
 };

C3Ray

A ray defined by an origin and direction.

 struct C3Ray
 {
   C3Vector origin;
   C3Vector dir;
 };

CRect

 struct CRect
 {
   float top;
   float miny;
   float left;
   float minx;
   float bottom;
   float maxy;
   float right;
   float maxx;
 };

CiRect

 struct CiRect
 {
   int top;
   int miny;
   int left;
   int minx;
   int bottom;
   int maxy;
   int right;
   int maxx;
 };

fixed_point

A fixed point real number, opposed to a floating point.

template<typename Base, size_t integer_bits, size_t decimal_bits> struct fixed_point
{
  Base decimal : decimal_bits;
  Base integer : integer_bits;
  Base sign : 1;
  float to_float() const { return (sign ? -1.0f : 1.0f) * (integer + decimal / float (1 << decimal_bits)); }
};

fixed16

A fixed point number without integer part.

using fixed16 = short; // divide by 0x7fff to get float value

or semantically (0 is not a valid bit size in bitfields) equivalent to

using fixed16 = fixed_point<uint16_t, 0, 15>;