You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
246 lines
4.1 KiB
246 lines
4.1 KiB
|
6 years ago
|
/**
|
||
|
|
* @file objdat.h
|
||
|
|
*
|
||
|
|
* Interface of all object data.
|
||
|
|
*/
|
||
|
5 years ago
|
#pragma once
|
||
|
7 years ago
|
|
||
|
5 years ago
|
#include <cstdint>
|
||
|
2 years ago
|
#include <vector>
|
||
|
5 years ago
|
|
||
|
2 years ago
|
#include "cursor.h"
|
||
|
4 years ago
|
#include "levels/gendung.h"
|
||
|
3 years ago
|
#include "utils/enum_traits.h"
|
||
|
5 years ago
|
|
||
|
5 years ago
|
namespace devilution {
|
||
|
6 years ago
|
|
||
|
5 years ago
|
enum theme_id : int8_t {
|
||
|
|
THEME_BARREL,
|
||
|
|
THEME_SHRINE,
|
||
|
|
THEME_MONSTPIT,
|
||
|
|
THEME_SKELROOM,
|
||
|
|
THEME_TREASURE,
|
||
|
|
THEME_LIBRARY,
|
||
|
|
THEME_TORTURE,
|
||
|
|
THEME_BLOODFOUNTAIN,
|
||
|
|
THEME_DECAPITATED,
|
||
|
|
THEME_PURIFYINGFOUNTAIN,
|
||
|
|
THEME_ARMORSTAND,
|
||
|
|
THEME_GOATSHRINE,
|
||
|
|
THEME_CAULDRON,
|
||
|
|
THEME_MURKYFOUNTAIN,
|
||
|
|
THEME_TEARFOUNTAIN,
|
||
|
|
THEME_BRNCROSS,
|
||
|
|
THEME_WEAPONRACK,
|
||
|
|
THEME_NONE = -1,
|
||
|
|
};
|
||
|
6 years ago
|
|
||
|
2 years ago
|
// Index into ObjMasterLoadList.
|
||
|
|
using object_graphic_id = uint8_t;
|
||
|
5 years ago
|
|
||
|
5 years ago
|
enum _object_id : int8_t {
|
||
|
5 years ago
|
OBJ_L1LIGHT,
|
||
|
|
OBJ_L1LDOOR,
|
||
|
|
OBJ_L1RDOOR,
|
||
|
|
OBJ_SKFIRE,
|
||
|
|
OBJ_LEVER,
|
||
|
|
OBJ_CHEST1,
|
||
|
|
OBJ_CHEST2,
|
||
|
|
OBJ_CHEST3,
|
||
|
|
OBJ_CANDLE1,
|
||
|
|
OBJ_CANDLE2,
|
||
|
|
OBJ_CANDLEO,
|
||
|
|
OBJ_BANNERL,
|
||
|
|
OBJ_BANNERM,
|
||
|
|
OBJ_BANNERR,
|
||
|
|
OBJ_SKPILE,
|
||
|
|
OBJ_SKSTICK1,
|
||
|
|
OBJ_SKSTICK2,
|
||
|
|
OBJ_SKSTICK3,
|
||
|
|
OBJ_SKSTICK4,
|
||
|
|
OBJ_SKSTICK5,
|
||
|
|
OBJ_CRUX1,
|
||
|
|
OBJ_CRUX2,
|
||
|
|
OBJ_CRUX3,
|
||
|
|
OBJ_STAND,
|
||
|
|
OBJ_ANGEL,
|
||
|
|
OBJ_BOOK2L,
|
||
|
|
OBJ_BCROSS,
|
||
|
|
OBJ_NUDEW2R,
|
||
|
|
OBJ_SWITCHSKL,
|
||
|
|
OBJ_TNUDEM1,
|
||
|
|
OBJ_TNUDEM2,
|
||
|
|
OBJ_TNUDEM3,
|
||
|
|
OBJ_TNUDEM4,
|
||
|
|
OBJ_TNUDEW1,
|
||
|
|
OBJ_TNUDEW2,
|
||
|
|
OBJ_TNUDEW3,
|
||
|
|
OBJ_TORTURE1,
|
||
|
|
OBJ_TORTURE2,
|
||
|
|
OBJ_TORTURE3,
|
||
|
|
OBJ_TORTURE4,
|
||
|
|
OBJ_TORTURE5,
|
||
|
|
OBJ_BOOK2R,
|
||
|
|
OBJ_L2LDOOR,
|
||
|
|
OBJ_L2RDOOR,
|
||
|
|
OBJ_TORCHL,
|
||
|
|
OBJ_TORCHR,
|
||
|
|
OBJ_TORCHL2,
|
||
|
|
OBJ_TORCHR2,
|
||
|
|
OBJ_SARC,
|
||
|
|
OBJ_FLAMEHOLE,
|
||
|
|
OBJ_FLAMELVR,
|
||
|
|
OBJ_WATER,
|
||
|
|
OBJ_BOOKLVR,
|
||
|
|
OBJ_TRAPL,
|
||
|
|
OBJ_TRAPR,
|
||
|
|
OBJ_BOOKSHELF,
|
||
|
|
OBJ_WEAPRACK,
|
||
|
|
OBJ_BARREL,
|
||
|
|
OBJ_BARRELEX,
|
||
|
|
OBJ_SHRINEL,
|
||
|
|
OBJ_SHRINER,
|
||
|
|
OBJ_SKELBOOK,
|
||
|
|
OBJ_BOOKCASEL,
|
||
|
|
OBJ_BOOKCASER,
|
||
|
|
OBJ_BOOKSTAND,
|
||
|
|
OBJ_BOOKCANDLE,
|
||
|
|
OBJ_BLOODFTN,
|
||
|
|
OBJ_DECAP,
|
||
|
|
OBJ_TCHEST1,
|
||
|
|
OBJ_TCHEST2,
|
||
|
|
OBJ_TCHEST3,
|
||
|
|
OBJ_BLINDBOOK,
|
||
|
|
OBJ_BLOODBOOK,
|
||
|
4 years ago
|
OBJ_PEDESTAL,
|
||
|
5 years ago
|
OBJ_L3LDOOR,
|
||
|
|
OBJ_L3RDOOR,
|
||
|
|
OBJ_PURIFYINGFTN,
|
||
|
|
OBJ_ARMORSTAND,
|
||
|
|
OBJ_ARMORSTANDN,
|
||
|
|
OBJ_GOATSHRINE,
|
||
|
|
OBJ_CAULDRON,
|
||
|
|
OBJ_MURKYFTN,
|
||
|
|
OBJ_TEARFTN,
|
||
|
|
OBJ_ALTBOY,
|
||
|
|
OBJ_MCIRCLE1,
|
||
|
|
OBJ_MCIRCLE2,
|
||
|
|
OBJ_STORYBOOK,
|
||
|
|
OBJ_STORYCANDLE,
|
||
|
|
OBJ_STEELTOME,
|
||
|
|
OBJ_WARARMOR,
|
||
|
|
OBJ_WARWEAP,
|
||
|
|
OBJ_TBCROSS,
|
||
|
|
OBJ_WEAPONRACK,
|
||
|
|
OBJ_WEAPONRACKN,
|
||
|
|
OBJ_MUSHPATCH,
|
||
|
|
OBJ_LAZSTAND,
|
||
|
|
OBJ_SLAINHERO,
|
||
|
|
OBJ_SIGNCHEST,
|
||
|
|
OBJ_BOOKSHELFR,
|
||
|
4 years ago
|
OBJ_POD,
|
||
|
|
OBJ_PODEX,
|
||
|
|
OBJ_URN,
|
||
|
|
OBJ_URNEX,
|
||
|
|
OBJ_L5BOOKS,
|
||
|
|
OBJ_L5CANDLE,
|
||
|
|
OBJ_L5LDOOR,
|
||
|
|
OBJ_L5RDOOR,
|
||
|
|
OBJ_L5LEVER,
|
||
|
|
OBJ_L5SARC,
|
||
|
2 years ago
|
|
||
|
|
OBJ_LAST = OBJ_L5SARC,
|
||
|
5 years ago
|
OBJ_NULL = -1,
|
||
|
5 years ago
|
};
|
||
|
5 years ago
|
|
||
|
5 years ago
|
enum quest_id : int8_t {
|
||
|
|
Q_ROCK,
|
||
|
|
Q_MUSHROOM,
|
||
|
|
Q_GARBUD,
|
||
|
|
Q_ZHAR,
|
||
|
|
Q_VEIL,
|
||
|
|
Q_DIABLO,
|
||
|
|
Q_BUTCHER,
|
||
|
|
Q_LTBANNER,
|
||
|
|
Q_BLIND,
|
||
|
|
Q_BLOOD,
|
||
|
|
Q_ANVIL,
|
||
|
|
Q_WARLORD,
|
||
|
|
Q_SKELKING,
|
||
|
|
Q_PWATER,
|
||
|
|
Q_SCHAMB,
|
||
|
|
Q_BETRAYER,
|
||
|
|
Q_GRAVE,
|
||
|
|
Q_FARMER,
|
||
|
|
Q_GIRL,
|
||
|
|
Q_TRADER,
|
||
|
|
Q_DEFILER,
|
||
|
|
Q_NAKRUL,
|
||
|
|
Q_CORNSTN,
|
||
|
|
Q_JERSEY,
|
||
|
|
Q_INVALID = -1,
|
||
|
|
};
|
||
|
|
|
||
|
3 years ago
|
enum class ObjectDataFlags : uint8_t {
|
||
|
2 years ago
|
None = 0,
|
||
|
3 years ago
|
Animated = 1U,
|
||
|
|
Solid = 1U << 1,
|
||
|
|
MissilesPassThrough = 1U << 2,
|
||
|
|
Light = 1U << 3,
|
||
|
|
Trap = 1U << 4,
|
||
|
|
Breakable = 1U << 5,
|
||
|
|
};
|
||
|
|
use_enum_as_flags(ObjectDataFlags);
|
||
|
|
|
||
|
5 years ago
|
struct ObjectData {
|
||
|
5 years ago
|
object_graphic_id ofindex;
|
||
|
3 years ago
|
int8_t minlvl;
|
||
|
|
int8_t maxlvl;
|
||
|
5 years ago
|
dungeon_type olvltype;
|
||
|
|
theme_id otheme;
|
||
|
|
quest_id oquest;
|
||
|
3 years ago
|
ObjectDataFlags flags;
|
||
|
|
uint8_t animDelay; // Tick length of each frame in the current animation
|
||
|
|
uint8_t animLen; // Number of frames in current animation
|
||
|
|
uint8_t animWidth;
|
||
|
2 years ago
|
SelectionRegion selectionRegion;
|
||
|
3 years ago
|
|
||
|
|
[[nodiscard]] bool isAnimated() const
|
||
|
|
{
|
||
|
|
return HasAnyOf(flags, ObjectDataFlags::Animated);
|
||
|
|
}
|
||
|
|
|
||
|
|
[[nodiscard]] bool isSolid() const
|
||
|
|
{
|
||
|
|
return HasAnyOf(flags, ObjectDataFlags::Solid);
|
||
|
|
}
|
||
|
|
|
||
|
|
[[nodiscard]] bool missilesPassThrough() const
|
||
|
|
{
|
||
|
|
return HasAnyOf(flags, ObjectDataFlags::MissilesPassThrough);
|
||
|
|
}
|
||
|
|
|
||
|
3 years ago
|
[[nodiscard]] bool applyLighting() const
|
||
|
3 years ago
|
{
|
||
|
|
return HasAnyOf(flags, ObjectDataFlags::Light);
|
||
|
|
}
|
||
|
|
|
||
|
|
[[nodiscard]] bool isTrap() const
|
||
|
|
{
|
||
|
|
return HasAnyOf(flags, ObjectDataFlags::Trap);
|
||
|
|
}
|
||
|
|
|
||
|
|
[[nodiscard]] bool isBreakable() const
|
||
|
|
{
|
||
|
|
return HasAnyOf(flags, ObjectDataFlags::Breakable);
|
||
|
|
}
|
||
|
5 years ago
|
};
|
||
|
5 years ago
|
|
||
|
|
extern const _object_id ObjTypeConv[];
|
||
|
2 years ago
|
extern std::vector<ObjectData> AllObjects;
|
||
|
|
extern std::vector<std::string> ObjMasterLoadList;
|
||
|
|
|
||
|
|
void LoadObjectData();
|
||
|
7 years ago
|
|
||
|
5 years ago
|
} // namespace devilution
|