void load(ESMReader &esm) { // Get the grid location esm.getSubNameIs("INTV"); esm.getT(X); esm.getT(Y); esm.getHNT(flags, "DATA"); // Store the file position context = esm.getContext(); hasData = false; int cnt = 0; // Skip these here. Load the actual data when the cell is loaded. if(esm.isNextSub("VNML")) {esm.skipHSubSize(12675);cnt++;} if(esm.isNextSub("VHGT")) {esm.skipHSubSize(4232);cnt++;} if(esm.isNextSub("WNAM")) esm.skipHSubSize(81); if(esm.isNextSub("VCLR")) esm.skipHSubSize(12675); if(esm.isNextSub("VTEX")) {esm.skipHSubSize(512);cnt++;} // We need all three of VNML, VHGT and VTEX in order to use the // landscape. hasData = (cnt == 3); }
void NPC::load(ESMReader &esm) { mNpdt52.mGold = -10; mPersistent = esm.getRecordFlags() & 0x0400; mModel = esm.getHNOString("MODL"); mName = esm.getHNOString("FNAM"); mRace = esm.getHNString("RNAM"); mClass = esm.getHNString("CNAM"); mFaction = esm.getHNString("ANAM"); mHead = esm.getHNString("BNAM"); mHair = esm.getHNString("KNAM"); mScript = esm.getHNOString("SCRI"); esm.getSubNameIs("NPDT"); esm.getSubHeader(); if (esm.getSubSize() == 52) { mNpdtType = 52; esm.getExact(&mNpdt52, 52); } else if (esm.getSubSize() == 12) { mNpdtType = 12; esm.getExact(&mNpdt12, 12); } else esm.fail("NPC_NPDT must be 12 or 52 bytes long"); esm.getHNT(mFlags, "FLAG"); mInventory.load(esm); mSpells.load(esm); if (esm.isNextSub("AIDT")) { esm.getHExact(&mAiData, sizeof(mAiData)); mHasAI= true; } else mHasAI = false; while (esm.isNextSub("DODT") || esm.isNextSub("DNAM")) { if (esm.retSubName() == 0x54444f44) { // DODT struct Dest dodt; esm.getHExact(&dodt.mPos, 24); mTransport.push_back(dodt); } else if (esm.retSubName() == 0x4d414e44) { // DNAM struct mTransport.back().mCellName = esm.getHString(); } } mAiPackage.load(esm); esm.skipRecord(); }
void ESM::GlobalMap::load (ESMReader &esm) { esm.getHNT(mBounds, "BNDS"); esm.getSubNameIs("DATA"); esm.getSubHeader(); mImageData.resize(esm.getSubSize()); esm.getExact(&mImageData[0], mImageData.size()); }
void Land::load(ESMReader &esm) { mEsm = &esm; mPlugin = mEsm->getIndex(); // Get the grid location esm.getSubNameIs("INTV"); esm.getSubHeaderIs(8); esm.getT<int>(mX); esm.getT<int>(mY); esm.getHNT(mFlags, "DATA"); // Store the file position mContext = esm.getContext(); mHasData = false; // Skip these here. Load the actual data when the cell is loaded. if (esm.isNextSub("VNML")) { esm.skipHSubSize(12675); mDataTypes |= DATA_VNML; } if (esm.isNextSub("VHGT")) { esm.skipHSubSize(4232); mDataTypes |= DATA_VHGT; } if (esm.isNextSub("WNAM")) { esm.skipHSubSize(81); mDataTypes |= DATA_WNAM; } if (esm.isNextSub("VCLR")) { esm.skipHSubSize(12675); mDataTypes |= DATA_VCLR; } if (esm.isNextSub("VTEX")) { esm.skipHSubSize(512); mDataTypes |= DATA_VTEX; } // We need all three of VNML, VHGT and VTEX in order to use the // landscape. (Though Morrowind seems to accept terrain without VTEX/VCLR entries) mHasData = mDataTypes & (DATA_VNML|DATA_VHGT|DATA_WNAM); mDataLoaded = 0; mLandData = NULL; }
void Land::load(ESMReader &esm) { mEsm = &esm; mPlugin = mEsm->getIndex(); // Get the grid location esm.getSubNameIs("INTV"); esm.getSubHeaderIs(8); esm.getT<int>(mX); esm.getT<int>(mY); esm.getHNT(mFlags, "DATA"); // Store the file position mContext = esm.getContext(); // Skip these here. Load the actual data when the cell is loaded. if (esm.isNextSub("VNML")) { esm.skipHSubSize(12675); mDataTypes |= DATA_VNML; } if (esm.isNextSub("VHGT")) { esm.skipHSubSize(4232); mDataTypes |= DATA_VHGT; } if (esm.isNextSub("WNAM")) { esm.skipHSubSize(81); mDataTypes |= DATA_WNAM; } if (esm.isNextSub("VCLR")) { esm.skipHSubSize(12675); mDataTypes |= DATA_VCLR; } if (esm.isNextSub("VTEX")) { esm.skipHSubSize(512); mDataTypes |= DATA_VTEX; } mDataLoaded = 0; mLandData = NULL; }
void Dialogue::load(ESMReader &esm) { esm.getSubNameIs("DATA"); esm.getSubHeader(); int si = esm.getSubSize(); if (si == 1) esm.getT(type); else if (si == 4) { // These are just markers, their values are not used. int i; esm.getT(i); esm.getHNT(i, "DELE"); type = Deleted; } else esm.fail("Unknown sub record size"); }
void ESM::GlobalMap::load (ESMReader &esm) { esm.getHNT(mBounds, "BNDS"); esm.getSubNameIs("DATA"); esm.getSubHeader(); mImageData.resize(esm.getSubSize()); esm.getExact(&mImageData[0], mImageData.size()); while (esm.isNextSub("MRK_")) { esm.getSubHeader(); CellId cell; esm.getT(cell.first); esm.getT(cell.second); mMarkers.push_back(cell); } }
void NPC::load(ESMReader &esm, const std::string& id) { mId = id; npdt52.gold = -10; model = esm.getHNOString("MODL"); name = esm.getHNOString("FNAM"); race = esm.getHNString("RNAM"); cls = esm.getHNString("CNAM"); faction = esm.getHNString("ANAM"); head = esm.getHNString("BNAM"); hair = esm.getHNString("KNAM"); script = esm.getHNOString("SCRI"); esm.getSubNameIs("NPDT"); esm.getSubHeader(); if(esm.getSubSize() == 52) esm.getExact(&npdt52, 52); else if(esm.getSubSize() == 12) esm.getExact(&npdt12, 12); else esm.fail("NPC_NPDT must be 12 or 52 bytes long"); esm.getHNT(flags, "FLAG"); inventory.load(esm); spells.load(esm); if(esm.isNextSub("AIDT")) { esm.getHExact(&AI, sizeof(AI)); hasAI = true; } else hasAI = false; esm.skipRecord(); }
// Load a record and add it to the list void load(ESMReader &esm) { esm.getSubNameIs("DATA"); esm.skipHSub(); script = esm.getHNString("NAME"); }