mirror of
				https://github.com/OpenMW/openmw.git
				synced 2025-10-30 23:56:38 +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
 |