prime/include/MetroidPrime/TGameTypes.hpp

74 lines
1.8 KiB
C++
Raw Normal View History

#ifndef _TGAMETYPES
#define _TGAMETYPES
2022-07-18 22:42:58 +00:00
#include "types.h"
class CInputStream;
class COutputStream;
2022-08-09 23:03:51 +00:00
struct TAreaId;
struct TEditorId;
struct TUniqueId;
2022-07-18 22:42:58 +00:00
2022-10-10 02:27:35 +00:00
extern const TAreaId kInvalidAreaId;
extern const TEditorId kInvalidEditorId;
extern const TUniqueId kInvalidUniqueId;
2022-07-18 22:42:58 +00:00
2022-08-09 23:03:51 +00:00
struct TAreaId {
int value;
2022-08-09 23:03:51 +00:00
TAreaId() : value(-1) {}
TAreaId(int value) : value(value) {}
int Value() const { return value; }
2022-08-09 23:03:51 +00:00
bool operator==(const TAreaId& other) const { return value == other.value; }
bool operator!=(const TAreaId& other) const { return value != other.value; }
};
2022-08-13 01:26:00 +00:00
CHECK_SIZEOF(TAreaId, 0x4)
2022-08-11 02:33:46 +00:00
2022-08-09 23:03:51 +00:00
struct TEditorId {
uint value;
2022-08-09 23:03:51 +00:00
TEditorId(uint value) : value(value) {}
TEditorId(CInputStream& in);
// TODO
uint Value() const { return value & 0x3FFFFFF; }
2022-11-03 14:21:47 +00:00
uint Id() const { return value & 0xffff; }
int AreaNum() const { return (value >> 16) & 0x3ff; }
void PutTo(COutputStream&) const;
2022-08-11 02:33:46 +00:00
bool operator==(const TEditorId& other) const { return Value() == other.Value(); }
bool operator!=(const TEditorId& other) const { return Value() != other.Value(); }
2022-08-09 23:03:51 +00:00
};
2022-08-13 01:26:00 +00:00
CHECK_SIZEOF(TEditorId, 0x4)
2022-08-11 02:33:46 +00:00
2022-08-09 23:03:51 +00:00
struct TUniqueId {
ushort value;
TUniqueId(ushort version, ushort id) : value(((version & 0x3F) << 10) | (id & 0x3FF)) {}
2022-10-16 13:59:20 +00:00
ushort Value() const { return value & 0x3FF; }
ushort Version() const { return (value >> 10) & 0x3F; }
2022-08-11 02:33:46 +00:00
bool operator==(const TUniqueId& other) const { return value == other.value; }
bool operator!=(const TUniqueId& other) const { return value != other.value; }
bool operator<(const TUniqueId& other) const; // TODO
private:
2022-08-09 23:03:51 +00:00
};
CHECK_SIZEOF(TUniqueId, 0x2)
// struct TGameScriptId {
// TEditorId editorId;
// bool b;
// };
// CHECK_SIZEOF(TGameScriptId, 0x8)
2022-08-13 01:26:00 +00:00
typedef ushort TSfxId;
2022-08-13 01:26:00 +00:00
static TSfxId InvalidSfxId = 0xFFFFu;
2022-08-09 23:03:51 +00:00
#define ALIGN_UP(x, a) (((x) + (a - 1)) & ~(a - 1))
#endif // _TGAMETYPES