1
0
Fork 0
mirror of https://github.com/OpenMW/openmw.git synced 2025-01-16 19:29:56 +00:00
openmw/components/esm3/loadinfo.hpp
fteppe 20da0892ef openMW_test_suite compiles and runs
Slowly moving through the open-cs errors

Good progress in openCS

Very good progress on openCS

Getting closer with openCS

OpenCS compiles and runs! Didn't have time to test it all though

ix openMW

everything compiles on windows??

Fix gcc

Fix Clang
2022-12-27 19:15:55 +01:00

120 lines
3.3 KiB
C++

#ifndef OPENMW_ESM_INFO_H
#define OPENMW_ESM_INFO_H
#include <string>
#include <vector>
#include "components/esm/defs.hpp"
#include "components/esm/refid.hpp"
#include "variant.hpp"
namespace ESM
{
class ESMReader;
class ESMWriter;
/*
* Dialogue information. A series of these follow after DIAL records,
* and form a linked list of dialogue items.
*/
struct DialInfo
{
constexpr static RecNameInts sRecordId = REC_INFO;
/// Return a string descriptor for this record type. Currently used for debugging / error logs only.
static std::string_view getRecordType() { return "DialInfo"; }
enum Gender
{
Male = 0,
Female = 1,
NA = -1
};
struct DATAstruct
{
int mUnknown1 = 0;
union
{
int mDisposition = 0; // Used for dialogue responses
int mJournalIndex; // Used for journal entries
};
signed char mRank = -1; // Rank of NPC
signed char mGender = Gender::NA; // See Gender enum
signed char mPCrank = -1; // Player rank
signed char mUnknown2 = 0;
}; // 12 bytes
DATAstruct mData;
// The rules for whether or not we will select this dialog item.
struct SelectStruct
{
std::string mSelectRule; // This has a complicated format
Variant mValue;
};
// Journal quest indices (introduced with the quest system in Tribunal)
enum QuestStatus
{
QS_None = 0,
QS_Name = 1,
QS_Finished = 2,
QS_Restart = 3
};
// Rules for when to include this item in the final list of options
// visible to the player.
std::vector<SelectStruct> mSelects;
// Id of this, previous and next INFO items
RefId mId, mPrev, mNext;
// Various references used in determining when to select this item.
RefId mActor, mRace, mClass, mFaction, mPcFaction, mCell;
// Sound and text associated with this item
std::string mSound;
std::string mResponse;
// Result script (uncompiled) to run whenever this dialog item is
// selected
std::string mResultScript;
// ONLY include this item the NPC is not part of any faction.
bool mFactionLess;
// Status of this quest item
QuestStatus mQuestStatus;
// Hexadecimal versions of the various subrecord names.
enum SubNames
{
REC_ONAM = 0x4d414e4f,
REC_RNAM = 0x4d414e52,
REC_CNAM = 0x4d414e43,
REC_FNAM = 0x4d414e46,
REC_ANAM = 0x4d414e41,
REC_DNAM = 0x4d414e44,
REC_SNAM = 0x4d414e53,
REC_NAME = 0x454d414e,
REC_SCVR = 0x52564353,
REC_BNAM = 0x4d414e42,
REC_QSTN = 0x4e545351,
REC_QSTF = 0x46545351,
REC_QSTR = 0x52545351,
REC_DELE = 0x454c4544
};
void load(ESMReader& esm, bool& isDeleted);
///< Loads Info record
void save(ESMWriter& esm, bool isDeleted = false) const;
void blank();
///< Set record to default state (does not touch the ID).
};
}
#endif