mirror of
				https://github.com/OpenMW/openmw.git
				synced 2025-11-04 05:56:39 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			141 lines
		
	
	
	
		
			3.8 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			141 lines
		
	
	
	
		
			3.8 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
#ifndef _ESM_INFO_H
 | 
						|
#define _ESM_INFO_H
 | 
						|
 | 
						|
#include "esm_reader.hpp"
 | 
						|
#include "defs.hpp"
 | 
						|
 | 
						|
namespace ESM
 | 
						|
{
 | 
						|
 | 
						|
// NOT DONE
 | 
						|
 | 
						|
/*
 | 
						|
 * Dialogue information. A series of these follow after DIAL records,
 | 
						|
 * and form a linked list of dialogue items.
 | 
						|
 */
 | 
						|
 | 
						|
struct DialInfo
 | 
						|
{
 | 
						|
    enum Gender
 | 
						|
    {
 | 
						|
        Male = 0,
 | 
						|
        Female = 1,
 | 
						|
        NA = -1
 | 
						|
    };
 | 
						|
 | 
						|
    struct DATAstruct
 | 
						|
    {
 | 
						|
        int unknown1;
 | 
						|
        int disposition;
 | 
						|
        char rank; // Rank of NPC
 | 
						|
        char gender; // See Gender enum
 | 
						|
        char PCrank; // Player rank
 | 
						|
        char unknown2;
 | 
						|
    }; // 12 bytes
 | 
						|
    DATAstruct data;
 | 
						|
 | 
						|
    // The rules for whether or not we will select this dialog item.
 | 
						|
    struct SelectStruct
 | 
						|
    {
 | 
						|
        std::string selectRule; // This has a complicated format
 | 
						|
        float f; // Only one of 'f' or 'i' is used
 | 
						|
        int i;
 | 
						|
        VarType type;
 | 
						|
    };
 | 
						|
 | 
						|
    // Journal quest indices (introduced with the quest system in Tribunal)
 | 
						|
    enum QuestStatus
 | 
						|
    {
 | 
						|
        QS_None,
 | 
						|
        QS_Name,
 | 
						|
        QS_Finished,
 | 
						|
        QS_Restart,
 | 
						|
        QS_Deleted
 | 
						|
    };
 | 
						|
 | 
						|
    // Rules for when to include this item in the final list of options
 | 
						|
    // visible to the player.
 | 
						|
    std::vector<SelectStruct> selects;
 | 
						|
 | 
						|
    // Id of this, previous and next INFO items
 | 
						|
    std::string id, prev, next,
 | 
						|
 | 
						|
    // Various references used in determining when to select this item.
 | 
						|
            actor, race, clas, npcFaction, pcFaction, cell,
 | 
						|
 | 
						|
            // Sound and text associated with this item
 | 
						|
            sound, response,
 | 
						|
 | 
						|
            // Result script (uncomiled) to run whenever this dialog item is
 | 
						|
            // selected
 | 
						|
            resultScript;
 | 
						|
 | 
						|
    // ONLY include this item the NPC is not part of any faction.
 | 
						|
    bool factionLess;
 | 
						|
 | 
						|
    // Status of this quest item
 | 
						|
    QuestStatus questStatus;
 | 
						|
 | 
						|
    // 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_INTV = 0x56544e49,
 | 
						|
        REC_FLTV = 0x56544c46,
 | 
						|
        REC_BNAM = 0x4d414e42,
 | 
						|
        REC_QSTN = 0x4e545351,
 | 
						|
        REC_QSTF = 0x46545351,
 | 
						|
        REC_QSTR = 0x52545351,
 | 
						|
        REC_DELE = 0x454c4544
 | 
						|
    };
 | 
						|
 | 
						|
    void load(ESMReader &esm);
 | 
						|
};
 | 
						|
 | 
						|
/*
 | 
						|
  Some old and unused D code and comments, that might be useful later:
 | 
						|
  --------
 | 
						|
 | 
						|
  // We only need to put each item in ONE list. For if your NPC
 | 
						|
  // matches this response, then it must match ALL criteria, thus it
 | 
						|
  // will have to look up itself in all the lists. I think the order
 | 
						|
  // is well optimized in making the lists as small as possible.
 | 
						|
  if(this.actor.index != -1) actorDial[this.actor][parent]++;
 | 
						|
  else if(cell != "") cellDial[cell][parent]++;
 | 
						|
  else if(this.Class != -1) classDial[this.Class][parent]++;
 | 
						|
  else if(this.npcFaction != -1)
 | 
						|
    factionDial[this.npcFaction][parent]++;
 | 
						|
  else if(this.race != -1) raceDial[this.race][parent]++;
 | 
						|
  else allDial[parent]++; // Lists dialogues that might
 | 
						|
  // apply to all npcs.
 | 
						|
  */
 | 
						|
 | 
						|
// List of dialogue topics (and greetings, voices, etc.) that
 | 
						|
// reference other objects. Eg. raceDial is indexed by the indices of
 | 
						|
// all races referenced. The value of raceDial is a new AA, which is
 | 
						|
// basically used as a map (the int value is just a count and isn't
 | 
						|
// used for anything important.) The indices (or elements of the map)
 | 
						|
// are the dialogues that reference the given race. I use an AA
 | 
						|
// instead of a list or array, since each dialogue can be added lots
 | 
						|
// of times.
 | 
						|
 | 
						|
/*
 | 
						|
int allDial[Dialogue*];
 | 
						|
int classDial[int][Dialogue*];
 | 
						|
int factionDial[int][Dialogue*];
 | 
						|
int actorDial[Item][Dialogue*];
 | 
						|
// If I look up cells on cell load, I don't have to resolve these
 | 
						|
// names into anything!
 | 
						|
int cellDial[char[]][Dialogue*];
 | 
						|
int raceDial[int][Dialogue*];
 | 
						|
*/
 | 
						|
}
 | 
						|
#endif
 |