mirror of
https://gitlab.com/hashborgir/d2tweaks-rnd2k.git
synced 2024-12-02 13:45:58 +00:00
223 lines
4.2 KiB
C++
223 lines
4.2 KiB
C++
#pragma once
|
|
|
|
#include <cstdint>
|
|
|
|
#pragma pack(push, 1)
|
|
|
|
namespace diablo2 {
|
|
namespace structures {
|
|
struct skills;
|
|
struct game;
|
|
struct inventory;
|
|
struct stats;
|
|
struct path;
|
|
struct player_data;
|
|
struct item_data;
|
|
struct object_data;
|
|
struct monster_data;
|
|
struct drlg_act;
|
|
struct skill_sequence;
|
|
struct anim_data;
|
|
struct unit_gfxdata;
|
|
struct statslistex;
|
|
struct quest_record;
|
|
struct npc_record;
|
|
|
|
enum class unit_type_t : int32_t {
|
|
UNIT_TYPE_PLAYER = 0,
|
|
UNIT_TYPE_MONSTER = 1,
|
|
UNIT_TYPE_OBJECT = 2,
|
|
UNIT_TYPE_MISSILE = 3,
|
|
UNIT_TYPE_ITEM = 4,
|
|
UNIT_TYPE_VIS_TILE = 5 //unused?
|
|
};
|
|
|
|
enum player_class_t : int32_t {
|
|
PLAYER_CLASS_AMAZON = 0,
|
|
PLAYER_CLASS_SORCERESS = 1,
|
|
PLAYER_CLASS_NECROMANCER = 2,
|
|
PLAYER_CLASS_PALADIN = 3,
|
|
PLAYER_CLASS_BARBARIAN = 4,
|
|
PLAYER_CLASS_DRUID = 5,
|
|
PLAYER_CLASS_ASSASSIN = 6
|
|
};
|
|
|
|
enum itemflags_t : int32_t {
|
|
ITEMFLAG_NEWITEM = 0x00000001,
|
|
ITEMFLAG_TARGET = 0x00000002,
|
|
ITEMFLAG_TARGETING = 0x00000004,
|
|
ITEMFLAG_DELETED = 0x00000008,
|
|
ITEMFLAG_IDENTIFIED = 0x00000010,
|
|
ITEMFLAG_QUANTITY = 0x00000020,
|
|
ITEMFLAG_WEAPONSET_IN = 0x00000040,
|
|
ITEMFLAG_WEAPONSET_OUT = 0x00000080,
|
|
ITEMFLAG_BROKEN = 0x00000100,
|
|
ITEMFLAG_REPAIRED = 0x00000200,
|
|
ITEMFLAG_UNKNOWN2 = 0x00000400,
|
|
ITEMFLAG_SOCKETED = 0x00000800,
|
|
ITEMFLAG_NON_SELLABLE = 0x00001000,
|
|
ITEMFLAG_INSTORE = 0x00002000,
|
|
ITEMFLAG_NOEQUIP = 0x00004000,
|
|
ITEMFLAG_NAMED = 0x00008000,
|
|
ITEMFLAG_ORGAN = 0x00010000,
|
|
ITEMFLAG_SELLCHEAP = 0x00020000,
|
|
ITEMFLAG_UNK5 = 0x00040000,
|
|
ITEMFLAG_INIT = 0x00080000,
|
|
ITEMFLAG_UNK6 = 0x00100000,
|
|
ITEMFLAG_COMPACTSAVE = 0x00200000,
|
|
ITEMFLAG_ETHEREAL = 0x00400000,
|
|
ITEMFLAG_JUSTSAVED = 0x00800000,
|
|
ITEMFLAG_PERSONALIZED = 0x01000000,
|
|
ITEMFLAG_LOWQUALITY = 0x02000000,
|
|
ITEMFLAG_RUNEWORD = 0x04000000,
|
|
ITEMFLAG_SHOPITEM = 0x06000000,
|
|
ITEMFLAG_ITEM = 0x08000000
|
|
};
|
|
|
|
struct unit {
|
|
unit_type_t type;
|
|
|
|
union {
|
|
player_class_t player_class;
|
|
int32_t data_record_index;
|
|
};
|
|
|
|
void* memory_pool;
|
|
uint32_t guid;
|
|
uint32_t mode;
|
|
|
|
union {
|
|
player_data* player_data;
|
|
monster_data* monster_data;
|
|
object_data* object_data;
|
|
//missile_data* missile_data;
|
|
item_data* item_data;
|
|
};
|
|
|
|
int8_t act;
|
|
int8_t act_padding[0x03];
|
|
drlg_act* drlg_act;
|
|
|
|
struct {
|
|
uint32_t low_seed;
|
|
uint32_t high_seed;
|
|
} seed;
|
|
uint32_t init_seed;
|
|
|
|
path* path;
|
|
|
|
skill_sequence* skill_sequence;
|
|
uint32_t skill_sequence_frame_count;
|
|
uint32_t skill_sequence_frame;
|
|
|
|
uint32_t anim_speed;
|
|
uint32_t skill_sequence_mode;
|
|
|
|
uint32_t current_frame;
|
|
uint32_t frame_count;
|
|
uint16_t anim_speed_w;
|
|
|
|
uint8_t action_frame;
|
|
uint8_t pad1;
|
|
|
|
anim_data* anim_data;
|
|
|
|
unit_gfxdata* gfxdata;
|
|
unit_gfxdata* gfxdata_copy;
|
|
|
|
statslistex* statslistex;
|
|
inventory* inventory;
|
|
|
|
union {
|
|
struct {
|
|
uint32_t interact_guid;
|
|
uint32_t interact_type;
|
|
uint8_t interacting;
|
|
} interaction;
|
|
|
|
struct {
|
|
void* light_map;
|
|
uint32_t start_light_radius;
|
|
uint16_t p12_shift_index;
|
|
} lightning;
|
|
};
|
|
|
|
uint16_t update_type;
|
|
unit* update_unit;
|
|
|
|
quest_record* quest_record;
|
|
uint32_t sparky_chest;
|
|
void* timer_args;
|
|
|
|
union {
|
|
game* game;
|
|
uint32_t sound_sync;
|
|
};
|
|
|
|
char pad2[0x0C];
|
|
|
|
void* event;
|
|
|
|
unit_type_t owner_type;
|
|
uint32_t owner_guid;
|
|
|
|
char pad3[8];
|
|
|
|
char* hover_text;
|
|
|
|
void* skills;
|
|
|
|
void* combat;
|
|
uint32_t hit_class;
|
|
|
|
char pad4[4];
|
|
|
|
uint32_t drop_code;
|
|
|
|
char pad5[8];
|
|
|
|
union {
|
|
struct {
|
|
uint32_t unit_flags;
|
|
uint32_t unit_flags_ex;
|
|
} flags;
|
|
uint64_t flags64;
|
|
};
|
|
|
|
char pad6[4];
|
|
|
|
uint32_t node_index;
|
|
uint32_t get_tick_count;
|
|
|
|
union {
|
|
uint32_t get_tick_count2;
|
|
void* particle_stream;
|
|
};
|
|
|
|
void* timer;
|
|
|
|
unit* change_next_unit; //?
|
|
unit* prev_unit;
|
|
unit* prev_unit_in_room;
|
|
|
|
void* msg_first;
|
|
void* msg_last;
|
|
|
|
bool is_hireling() const {
|
|
if (type != unit_type_t::UNIT_TYPE_MONSTER)
|
|
return false;
|
|
|
|
return (flags.unit_flags & 0x00000200) == 0x00000200;
|
|
}
|
|
|
|
bool is_pet() const {
|
|
if (type != unit_type_t::UNIT_TYPE_MONSTER)
|
|
return false;
|
|
|
|
return (flags.unit_flags & 0x80000000) == 0x80000000;
|
|
}
|
|
};
|
|
}
|
|
}
|
|
|
|
#pragma pack(pop) |