Ejemplo n.º 1
0
MFLUtil::MFLError MFLUtil::ReadV21(AssetLibInfo &lib, Stream *in)
{
    // init randomizer
    int rand_val = in->ReadInt32() + EncryptionRandSeed;
    // number of clib parts
    size_t mf_count = ReadEncInt32(in, rand_val);
    lib.LibFileNames.resize(mf_count);
    // filenames for all clib parts
    char fn_buf[MaxDataFileLen > MaxAssetFileLen ? MaxDataFileLen : MaxAssetFileLen];
    for (size_t i = 0; i < mf_count; ++i)
    {
        ReadEncString(fn_buf, MaxDataFileLen, in, rand_val);
        lib.LibFileNames[i] = fn_buf;
    }

    // number of files in clib
    size_t asset_count = ReadEncInt32(in, rand_val);
    // read information on clib contents
    lib.AssetInfos.resize(asset_count);
    for (size_t i = 0; i < asset_count; ++i)
    {
        ReadEncString(fn_buf, MaxAssetFileLen, in, rand_val);
        lib.AssetInfos[i].FileName = fn_buf;
    }
    for (size_t i = 0; i < asset_count; ++i)
        lib.AssetInfos[i].Offset = ReadEncInt32(in, rand_val);
    for (size_t i = 0; i < asset_count; ++i)
        lib.AssetInfos[i].Size = ReadEncInt32(in, rand_val);
    for (size_t i = 0; i < asset_count; ++i)
        lib.AssetInfos[i].LibUid = ReadEncInt8(in, rand_val);
    return kMFLNoError;
}
Ejemplo n.º 2
0
AssetError AssetManager::ReadAssetLibV21(MultiFileLib * mfl, Stream *ci_s, int libver)
{
    // init randomizer
    int randSeed = ci_s->ReadInt32();
    _InitPseudoRand(randSeed + _encryptionRandSeed);
    // number of clib parts
    mfl->num_data_files = ReadEncInt32(ci_s);
    // filenames for all clib parts
    for (int i = 0; i < mfl->num_data_files; i++)
    {
        ReadEncString(mfl->data_filenames[i], 50, ci_s);
    }
    // number of files in clib
    mfl->num_files = ReadEncInt32(ci_s);
    if (mfl->num_files > MAX_FILES)
    {
        return kAssetErrLibAssetCount; // too many files in clib, return error code
    }

    // read information on clib contents
    for (int i = 0; i < mfl->num_files; i++)
    {
        ReadEncString(mfl->filenames[i], 100, ci_s);
    }

    for (int i = 0; i < mfl->num_files; i++)
    {
        mfl->offset[i] = ReadEncInt32(ci_s);
    }

    for (int i = 0; i < mfl->num_files; i++)
    {
        mfl->length[i] = ReadEncInt32(ci_s);
    }

    ReadEncArray(&mfl->file_datafile[0], 1, mfl->num_files, ci_s);
    return kAssetNoError;
}