Esempio n. 1
0
void REFRRecord::REFRData::Write(FileWriter &writer)
    {
    WRITE(EDID);
    WRITE(NAME);
    WRITE(XTEL);
    WRITE(XLOC);
    Ownership.Write(writer);
    WRITE(XESP);
    WRITE(XTRG);
    XSED.Write(writer);
    WRITE(XLOD);
    WRITE(XCHG);
    WRITE(XHLT);
    XPCI.Write(writer);
    WRITE(XLCM);
    WRITE(XRTM);
    WRITE(XACT);
    WRITE(XCNT);
    Marker.Write(writer);
    if(IsOpenByDefault())
        WRITEEMPTY(ONAM);
    WRITE(XSCL);
    WRITE(XSOL);
    WRITE(DATA);
    }
Esempio n. 2
0
int32_t REFRRecord::WriteRecord(FileWriter &writer)
    {
    WRITE(EDID);
    WRITE(NAME);
    WRITE(XEZN);
    WRITE(XRGD);
    WRITE(XRGB);
    Patrol.Write(writer);
    WRITE(XLCM);
    Ownership.Write(writer);
    WRITE(XCNT);
    WRITE(XRDS);
    WRITE(XHLP);
    WRITE(XRAD);
    WRITE(XCHG);
    WRITE(XDCR);
    WRITE(XLKR);
    WRITE(XCLP);
    WRITE(RCLR);
    ActivateParents.Write(writer);
    WRITE(XATO);
    WRITE(XESP);
    WRITE(XEMI);
    WRITE(XMBR);
    WRITE(XPRM);
    WRITE(XTRI);
    WRITE(XMBO);
    WRITE(XTEL);
    MapData.Write(writer);
    AudioData.Write(writer);
    WRITE(XSRF);
    WRITE(XSRD);
    WRITE(XTRG);
    WRITE(XRDO);
    WRITE(XLOC);
    Ammo.Write(writer);
    WRITE(XPWR);
    WRITE(XLTW);
    WRITE(XACT);
    WRITE(XNDP);
    WRITE(XPOD);
    WRITE(XPTL);
    WRITE(XSED);
    Room.Write(writer);
    WRITE(XOCP);
    WRITE(XORD);
    WRITE(XLOD);
    if(IsOpenByDefault())
        WRITEEMPTY(ONAM);
    if(XIBS.IsLoaded())
        WRITEEMPTY(XIBS);
    if(XMBP.IsLoaded())
        WRITEEMPTY(XMBP);
    WRITE(XSCL);
    WRITE(DATA);
    return -1;
    }
Esempio n. 3
0
REFRRecord::REFRRecord(REFRRecord *srcRecord):
    Record()
    {
    if(srcRecord == NULL)
        return;

    flags = srcRecord->flags;
    formID = srcRecord->formID;
    flagsUnk = srcRecord->flagsUnk;

    recData = srcRecord->recData;
    if(!srcRecord->IsChanged())
        return;

    if(srcRecord->Data.IsLoaded())
        {
        Data.Load();
        Data->EDID = srcRecord->Data->EDID;
        Data->NAME = srcRecord->Data->NAME;
        Data->XTEL = srcRecord->Data->XTEL;
        Data->XLOC = srcRecord->Data->XLOC;
        Data->Ownership = srcRecord->Data->Ownership;
        Data->XESP = srcRecord->Data->XESP;
        Data->XTRG = srcRecord->Data->XTRG;
        Data->XSED = srcRecord->Data->XSED;
        Data->XLOD = srcRecord->Data->XLOD;
        Data->XCHG = srcRecord->Data->XCHG;
        Data->XHLT = srcRecord->Data->XHLT;
        Data->XPCI = srcRecord->Data->XPCI;
        Data->XLCM = srcRecord->Data->XLCM;
        Data->XRTM = srcRecord->Data->XRTM;
        Data->XACT = srcRecord->Data->XACT;
        Data->XCNT = srcRecord->Data->XCNT;
        Data->Marker = srcRecord->Data->Marker;
        if(srcRecord->IsOpenByDefault())//bool ONAM; //Open by Default, empty marker, written whenever fOpenByDefault is true
            IsOpenByDefault(true);
        Data->XSCL = srcRecord->Data->XSCL;
        Data->XSOL = srcRecord->Data->XSOL;
        Data->DATA = srcRecord->Data->DATA;
        }
    }
Esempio n. 4
0
SINT32 REFRRecord::ParseRecord(unsigned char *buffer, unsigned char *end_buffer, bool CompressedOnDisk)
    {
    UINT32 subType = 0;
    UINT32 subSize = 0;
    UINT32 lastChunk = 0;
    Data.Load();
    while(buffer < end_buffer){
        subType = *(UINT32 *)buffer;
        buffer += 4;
        switch(subType)
            {
            case REV32(XXXX):
                buffer += 2;
                subSize = *(UINT32 *)buffer;
                buffer += 4;
                subType = *(UINT32 *)buffer;
                buffer += 6;
                break;
            default:
                subSize = *(UINT16 *)buffer;
                buffer += 2;
                break;
            }
        switch(subType)
            {
            case REV32(EDID):
                Data->EDID.Read(buffer, subSize, CompressedOnDisk);
                break;
            case REV32(NAME):
                Data->NAME.Read(buffer, subSize);
                break;
            case REV32(XTEL):
                Data->XTEL.Read(buffer, subSize);
                break;
            case REV32(XLOC):
                switch(subSize)
                    {
                    case 12: //unused2 is absent, so shift the values read into it
                        Data->XLOC.Read(buffer, subSize);
                        Data->XLOC->flags = Data->XLOC->unused2[0];
                        Data->XLOC->unused3[0] = Data->XLOC->unused2[1];
                        Data->XLOC->unused3[1] = Data->XLOC->unused2[2];
                        Data->XLOC->unused3[2] = Data->XLOC->unused2[3];
                        memset(&Data->XLOC->unused2[0], 0x00, sizeof(Data->XLOC->unused2));
                        break;
                    default:
                        Data->XLOC.Read(buffer, subSize);
                        break;
                    }
                break;
            case REV32(XOWN):
                Data->Ownership.Load();
                Data->Ownership->XOWN.Read(buffer, subSize);
                break;
            case REV32(XRNK):
                Data->Ownership.Load();
                Data->Ownership->XRNK.Read(buffer, subSize);
                break;
            case REV32(XGLB):
                Data->Ownership.Load();
                Data->Ownership->XGLB.Read(buffer, subSize);
                break;
            case REV32(XESP):
                Data->XESP.Read(buffer, subSize);
                break;
            case REV32(XTRG):
                Data->XTRG.Read(buffer, subSize);
                break;
            case REV32(XSED):
                switch(subSize)
                    {
                    case 1:
                        //if it's a single byte then it's an offset into the list of seed values in the TREE record
                        Data->XSED.Load();
                        Data->XSED->isOffset = true;
                        //XSED.size = 1;
                        Data->XSED->offset = *(UINT8 *)buffer;
                        buffer++;
                        break;
                    case 4:
                        //if it's 4 byte it's the seed value directly
                        Data->XSED.Load();
                        Data->XSED->isOffset = false;
                        //XSED.size = 4;
                        Data->XSED->seed = *(UINT32 *)buffer;
                        buffer += 4;
                        break;
                    default:
                        printer("  REFR: %08X - Unknown XSED size = %u\n", formID, subSize);
                        printer("  CurPos = %04x\n\n", buffer - 6);
                        buffer += subSize;
                        break;
                    }
                break;
            case REV32(XLOD):
                Data->XLOD.Read(buffer, subSize);
                break;
            case REV32(XCHG):
                Data->XCHG.Read(buffer, subSize);
                break;
            case REV32(XHLT):
                Data->XHLT.Read(buffer, subSize);
                break;
            case REV32(XPCI):
                Data->XPCI.Load();
                Data->XPCI->XPCI.Read(buffer, subSize);
                lastChunk = REV32(XPCI);
                break;
            case REV32(FULL):
                switch(lastChunk)
                    {
                    case REV32(XPCI):
                        Data->XPCI.Load();
                        Data->XPCI->FULL.Read(buffer, subSize, CompressedOnDisk);
                        break;
                    case REV32(XMRK):
                        Data->Marker->FULL.Read(buffer, subSize, CompressedOnDisk);
                        break;
                    default:
                        printer("  REFR: %08X - Unexpected FULL chunk\n", formID);
                        printer("  Size = %i\n", subSize);
                        printer("  CurPos = %04x\n\n", buffer - 6);
                        buffer += subSize;
                        break;
                    }
                break;
            case REV32(XLCM):
                Data->XLCM.Read(buffer, subSize);
                break;
            case REV32(XRTM):
                Data->XRTM.Read(buffer, subSize);
                break;
            case REV32(XACT):
                Data->XACT.Read(buffer, subSize);
                break;
            case REV32(XCNT):
                Data->XCNT.Read(buffer, subSize);
                break;
            case REV32(XMRK):
                Data->Marker.Load();
                buffer += subSize;
                lastChunk = REV32(XMRK);
                break;
            case REV32(FNAM):
                Data->Marker.Load();
                Data->Marker->FNAM.Read(buffer, subSize);
                break;
            case REV32(TNAM):
                Data->Marker.Load();
                Data->Marker->TNAM.Read(buffer, subSize);
                break;
            case REV32(ONAM):
                IsOpenByDefault(true);
                buffer += subSize;
                break;
            case REV32(XSCL):
                Data->XSCL.Read(buffer, subSize);
                break;
            case REV32(XSOL):
                Data->XSOL.Read(buffer, subSize);
                break;
            case REV32(DATA):
                Data->DATA.Read(buffer, subSize);
                break;
            default:
                //printer("FileName = %s\n", FileName);
                printer("  REFR: %08X - Unknown subType = %04x\n", formID, subType);
                CBASH_CHUNK_DEBUG
                printer("  Size = %i\n", subSize);
                printer("  CurPos = %04x\n\n", buffer - 6);
                buffer = end_buffer;
                break;
            }
        };
    return 0;
    }
Esempio n. 5
0
REFRRecord::REFRRecord(REFRRecord *srcRecord):
    FNVRecord()
    {
    if(srcRecord == NULL)
        return;

    flags = srcRecord->flags;
    formID = srcRecord->formID;
    flagsUnk = srcRecord->flagsUnk;
    formVersion = srcRecord->formVersion;
    versionControl2[0] = srcRecord->versionControl2[0];
    versionControl2[1] = srcRecord->versionControl2[1];

    recData = srcRecord->recData;
    if(!srcRecord->IsChanged())
        return;

    EDID = srcRecord->EDID;
    NAME = srcRecord->NAME;
    XEZN = srcRecord->XEZN;
    XRGD = srcRecord->XRGD;
    XRGB = srcRecord->XRGB;
    Patrol = srcRecord->Patrol;
    XLCM = srcRecord->XLCM;
    Ownership = srcRecord->Ownership;
    XCNT = srcRecord->XCNT;
    XRDS = srcRecord->XRDS;
    XHLP = srcRecord->XHLP;
    XRAD = srcRecord->XRAD;
    XCHG = srcRecord->XCHG;
    XDCR = srcRecord->XDCR;
    XLKR = srcRecord->XLKR;
    XCLP = srcRecord->XCLP;
    RCLR = srcRecord->RCLR;
    ActivateParents = srcRecord->ActivateParents;
    XATO = srcRecord->XATO;
    XESP = srcRecord->XESP;
    XEMI = srcRecord->XEMI;
    XMBR = srcRecord->XMBR;
    XPRM = srcRecord->XPRM;
    XTRI = srcRecord->XTRI;
    XMBO = srcRecord->XMBO;
    XTEL = srcRecord->XTEL;
    MapData = srcRecord->MapData;
    AudioData = srcRecord->AudioData;
    XSRF = srcRecord->XSRF;
    XSRD = srcRecord->XSRD;
    XTRG = srcRecord->XTRG;
    XRDO = srcRecord->XRDO;
    XLOC = srcRecord->XLOC;
    Ammo = srcRecord->Ammo;
    XPWR = srcRecord->XPWR;
    XLTW = srcRecord->XLTW;
    XACT = srcRecord->XACT;
    XNDP = srcRecord->XNDP;
    XPOD = srcRecord->XPOD;
    XPTL = srcRecord->XPTL;
    XSED = srcRecord->XSED;
    Room = srcRecord->Room;
    XOCP = srcRecord->XOCP;
    XORD = srcRecord->XORD;
    XLOD = srcRecord->XLOD;
    XIBS = srcRecord->XIBS;
    XSCL = srcRecord->XSCL;
    DATA = srcRecord->DATA;

    if(srcRecord->IsOpenByDefault())//bool ONAM; //Open by Default, empty marker, written whenever fOpenByDefault is true
        IsOpenByDefault(true);
    return;
    }
Esempio n. 6
0
int32_t REFRRecord::ParseRecord(unsigned char *buffer, unsigned char *end_buffer, bool CompressedOnDisk)
    {
    uint32_t subType = 0;
    uint32_t subSize = 0;
    uint32_t lastChunk = 0;
    while(buffer < end_buffer){
        subType = *(uint32_t *)buffer;
        buffer += 4;
        switch(subType)
            {
            case REV32(XXXX):
                buffer += 2;
                subSize = *(uint32_t *)buffer;
                buffer += 4;
                subType = *(uint32_t *)buffer;
                buffer += 6;
                break;
            default:
                subSize = *(uint16_t *)buffer;
                buffer += 2;
                break;
            }
        switch(subType)
            {
            case REV32(EDID):
                EDID.Read(buffer, subSize, CompressedOnDisk);
                break;
            case REV32(NAME):
                NAME.Read(buffer, subSize);
                break;
            case REV32(XEZN):
                XEZN.Read(buffer, subSize);
                break;
            case REV32(XRGD):
                XRGD.Read(buffer, subSize, CompressedOnDisk);
                break;
            case REV32(XRGB):
                XRGB.Read(buffer, subSize, CompressedOnDisk);
                break;
            case REV32(XPRD):
                Patrol.Load();
                Patrol->XPRD.Read(buffer, subSize);
                break;
            case REV32(XPPA):
                //XPPA, Patrol Script Marker (Empty)
                lastChunk = REV32(XPPA);
                break;
            case REV32(INAM):
                Patrol.Load();
                Patrol->INAM.Read(buffer, subSize);
                break;
            case REV32(SCHR):
                Patrol.Load();
                Patrol->SCHR.Read(buffer, subSize);
                break;
            case REV32(SCDA):
                Patrol.Load();
                Patrol->SCDA.Read(buffer, subSize, CompressedOnDisk);
                break;
            case REV32(SCTX):
                Patrol.Load();
                Patrol->SCTX.Read(buffer, subSize, CompressedOnDisk);
                break;
            case REV32(SLSD):
                Patrol.Load();
                Patrol->VARS.value.push_back(new GENVARS);
                Patrol->VARS.value.back()->SLSD.Read(buffer, subSize);
                break;
            case REV32(SCVR):
                Patrol.Load();
                if(Patrol->VARS.value.size() == 0)
                    Patrol->VARS.value.push_back(new GENVARS);
                Patrol->VARS.value.back()->SCVR.Read(buffer, subSize, CompressedOnDisk);
                break;
            case REV32(SCRO):
                Patrol.Load();
                Patrol->SCR_.Read(buffer, subSize);
                Patrol->SCR_.value.back()->isSCRO = true;
                break;
            case REV32(SCRV):
                Patrol.Load();
                Patrol->SCR_.Read(buffer, subSize);
                Patrol->SCR_.value.back()->isSCRO = false;
                break;
            case REV32(TNAM):
                switch(lastChunk)
                    {
                    case REV32(XPPA):
                        Patrol.Load();
                        Patrol->TNAM.Read(buffer, subSize);
                        break;
                    case REV32(XMRK):
                        MapData.Load();
                        MapData->TNAM.Read(buffer, subSize);
                        break;
                    default:
                        printer("  REFR: %08X - Unexpected TNAM chunk\n", formID);
                        printer("  Size = %i\n", subSize);
                        printer("  CurPos = %04x\n\n", buffer - 6);
                        buffer += subSize;
                        break;
                    }
                break;
            case REV32(XLCM):
                XLCM.Read(buffer, subSize);
                break;
            case REV32(XOWN):
                Ownership.Load();
                Ownership->XOWN.Read(buffer, subSize);
                break;
            case REV32(XRNK):
                Ownership.Load();
                Ownership->XRNK.Read(buffer, subSize);
                break;
            case REV32(XCNT):
                XCNT.Read(buffer, subSize);
                break;
            case REV32(XRDS):
                XRDS.Read(buffer, subSize);
                break;
            case REV32(XHLP):
                XHLP.Read(buffer, subSize);
                break;
            case REV32(XRAD):
                XRAD.Read(buffer, subSize);
                break;
            case REV32(XCHG):
                XCHG.Read(buffer, subSize);
                break;
            case REV32(XDCR):
                XDCR.Read(buffer, subSize);
                break;
            case REV32(XLKR):
                XLKR.Read(buffer, subSize);
                break;
            case REV32(XCLP):
                XCLP.Read(buffer, subSize);
                break;
            case REV32(RCLR):
                RCLR.Read(buffer, subSize, CompressedOnDisk);
                break;
            case REV32(XAPD):
                ActivateParents.Load();
                ActivateParents->XAPD.Read(buffer, subSize);
                break;
            case REV32(XAPR):
                ActivateParents.Load();
                ActivateParents->XAPR.Read(buffer, subSize);
                break;
            case REV32(XATO):
                XATO.Read(buffer, subSize, CompressedOnDisk);
                break;
            case REV32(XESP):
                XESP.Read(buffer, subSize);
                break;
            case REV32(XEMI):
                XEMI.Read(buffer, subSize);
                break;
            case REV32(XMBR):
                XMBR.Read(buffer, subSize);
                break;
            case REV32(XPRM):
                XPRM.Read(buffer, subSize);
                break;
            case REV32(XTRI):
                XTRI.Read(buffer, subSize);
                break;
            case REV32(XMBO):
                XMBO.Read(buffer, subSize);
                break;
            case REV32(XTEL):
                XTEL.Read(buffer, subSize);
                break;
            case REV32(FNAM):
                MapData.Load();
                MapData->FNAM.Read(buffer, subSize);
                break;
            case REV32(WMI1):
                MapData.Load();
                MapData->WMI1.Read(buffer, subSize);
                break;
            case REV32(XMRK):
                lastChunk = REV32(XMRK);
                break;
            case REV32(MMRK):
                lastChunk = REV32(MMRK);
                break;
            case REV32(FULL):
                switch(lastChunk)
                    {
                    case REV32(XMRK):
                        MapData.Load();
                        MapData->FULL.Read(buffer, subSize, CompressedOnDisk);
                        break;
                    case REV32(MMRK):
                        AudioData.Load();
                        AudioData->FULL.Read(buffer, subSize, CompressedOnDisk);
                        break;
                    default:
                        printer("  REFR: %08X - Unexpected FULL chunk\n", formID);
                        printer("  Size = %i\n", subSize);
                        printer("  CurPos = %04x\n\n", buffer - 6);
                        buffer += subSize;
                        break;
                    }
                break;
            case REV32(CNAM):
                AudioData.Load();
                AudioData->CNAM.Read(buffer, subSize);
                break;
            case REV32(BNAM):
                AudioData.Load();
                AudioData->BNAM.Read(buffer, subSize, CompressedOnDisk);
                break;
            case REV32(MNAM):
                AudioData.Load();
                AudioData->MNAM.Read(buffer, subSize);
                break;
            case REV32(NNAM):
                AudioData.Load();
                AudioData->NNAM.Read(buffer, subSize);
                break;
            case REV32(XSRF):
                XSRF.Read(buffer, subSize, CompressedOnDisk);
                break;
            case REV32(XSRD):
                XSRD.Read(buffer, subSize, CompressedOnDisk);
                break;
            case REV32(XTRG):
                XTRG.Read(buffer, subSize);
                break;
            case REV32(XRDO):
                XRDO.Read(buffer, subSize);
                break;
            case REV32(XLOC):
                XLOC.Read(buffer, subSize);
                break;
            case REV32(XAMT):
                Ammo.Load();
                Ammo->XAMT.Read(buffer, subSize);
                break;
            case REV32(XAMC):
                Ammo.Load();
                Ammo->XAMC.Read(buffer, subSize);
                break;
            case REV32(XPWR):
                XPWR.Read(buffer, subSize);
                break;
            case REV32(XLTW):
                XLTW.Read(buffer, subSize);
                break;
            case REV32(XACT):
                XACT.Read(buffer, subSize);
                break;
            case REV32(XNDP):
                XNDP.Read(buffer, subSize);
                break;
            case REV32(XPOD):
                XPOD.Read(buffer, subSize);
                break;
            case REV32(XPTL):
                XPTL.Read(buffer, subSize);
                break;
            case REV32(XSED):
                XSED.Read(buffer, subSize);
                break;
            case REV32(XRMR):
                Room.Load();
                Room->XRMR.Read(buffer, subSize);
                break;
            case REV32(XLRM):
                Room.Load();
                Room->XLRM.Read(buffer, subSize);
                break;
            case REV32(XOCP):
                XOCP.Read(buffer, subSize);
                break;
            case REV32(XORD):
                XORD.Read(buffer, subSize);
                break;
            case REV32(XLOD):
                XLOD.Read(buffer, subSize);
                break;
            case REV32(XIBS):
                //XIBS.Read(buffer, subSize);
                XIBS.value = 1;
                break;
            case REV32(XMBP):
                //XMBP.Read(buffer, subSize);
                XMBP.Load();
                break;
            case REV32(XSCL):
                XSCL.Read(buffer, subSize);
                break;
            case REV32(ONAM):
                IsOpenByDefault(true);
                buffer += subSize;
                break;
            case REV32(DATA):
                DATA.Read(buffer, subSize);
                break;
            default:
                //printer("FileName = %s\n", FileName);
                printer("  REFR: %08X - Unknown subType = %04x\n", formID, subType);
                CBASH_CHUNK_DEBUG
                printer("  Size = %i\n", subSize);
                printer("  CurPos = %04x\n\n", buffer - 6);
                buffer = end_buffer;
                break;
            }
        };
    return 0;
    }