#ifndef OPENMW_ESM_NPCC_H #define OPENMW_ESM_NPCC_H #include // TODO: create implementation files to remove this #include "esmreader.hpp" namespace ESM { class ESMReader; class ESMWriter; /* * NPC change information (found in savegame files only). We can't * read these yet. * * Some general observations about savegames: * * SCPT records do not define new scripts, but assign values to the * variables of existing ones. * * STLN - stolen items, ONAM is the owner * * GAME - weather data * struct GMDT { char mCellName[64]; int mFogColour; float mFogDensity; int mCurrentWeather, mNextWeather; int mWeatherTransition; // 0-100 transition between weathers, top 3 bytes may be garbage float mTimeOfNextTransition; // weather changes when gamehour == timeOfNextTransition int masserPhase, secundaPhase; // top 3 bytes may be garbage }; * * VFXM, SPLM - no clue * KLST - kill counter * * PCDT - seems to contain a lot of DNAMs, strings? * * FMAP - MAPH and MAPD, global map image. * * JOUR - the entire journal in html * * QUES - seems to contain all the quests in the game, not just the * ones you have done or begun. * * REGN - lists all regions in the game, even unvisited ones. * notable differences to Regions in ESM files: mMapColor may be missing, and includes an unknown WNAM subrecord. * * * The DIAL/INFO blocks contain changes to characters' dialog status. * * Dammit there's a lot of stuff in there! Should really have * suspected as much. The strategy further is to completely ignore * save files for the time being. * * Several records have a "change" variant, like NPCC, CNTC * (contents), and CREC (creature.) These seem to alter specific * instances of creatures, npcs, etc. I have not identified most of * their subrecords yet. * * Several NPCC records have names that begin with "chargen ", I don't * know if it means something special yet. * * The CNTC blocks seem to be instances of leveled lists. When a * container is supposed to contain this leveled list of this type, * but is referenced elsewhere in the file by an INDX, the CNTC with * the corresponding leveled list identifier and INDX will determine * the container contents instead. * * Some classes of objects seem to be altered, and these include an * INDX, which is probably an index used by specific references other * places within the save file. I guess this means 'use this class for * these objects, not the general class.' All the indices I have * encountered so far are zero, but they have been for different * classes (different containers, really) so possibly we start from * zero for each class. This looks like a mess, but is probably still * easier than to duplicate everything. I think WRITING this format * will be harder than reading it. */ struct LoadNPCC { static unsigned int sRecordId; std::string mId; void load(ESMReader &esm) { esm.skipRecord(); } void save(ESMWriter &esm) const { } }; } #endif