Esempio n. 1
0
        public BYTVField?XRGD;                    // Ragdoll Data (optional)

        public override bool CreateField(BinaryFileReader r, GameFormat format, string type, int dataSize)
        {
            switch (type)
            {
            case "EDID": EDID = r.ReadSTRV(dataSize); return(true);

            case "NAME": NAME = new FMIDField <Record>(r, dataSize); return(true);

            case "DATA": DATA = new REFRRecord.DATAField(r, dataSize); return(true);

            case "XOWN": if (XOWNs == null)
                {
                    XOWNs = new List <CELLRecord.XOWNGroup>();
                }
                XOWNs.Add(new CELLRecord.XOWNGroup {
                    XOWN = new FMIDField <Record>(r, dataSize)
                }); return(true);

            case "XRNK": XOWNs.Last().XRNK = r.ReadT <IN32Field>(dataSize); return(true);

            case "XGLB": XOWNs.Last().XGLB = new FMIDField <Record>(r, dataSize); return(true);

            case "XESP": XESP = new REFRRecord.XESPField(r, dataSize); return(true);

            case "XSCL": XSCL = r.ReadT <FLTVField>(dataSize); return(true);

            case "XRGD": XRGD = r.ReadBYTV(dataSize); return(true);

            default: return(false);
            }
        }
Esempio n. 2
0
        public FMIDField <SOUNRecord> SNAM; // Sound FormId (optional)

        public override bool CreateField(BinaryFileReader r, GameFormat format, string type, int dataSize)
        {
            switch (type)
            {
            case "EDID":
            case "NAME": EDID = r.ReadSTRV(dataSize); return(true);

            case "FULL": FULL = r.ReadSTRV(dataSize); return(true);

            case "FNAM": if (format != GameFormat.TES3)
                {
                    FNAM = r.ReadT <FLTVField>(dataSize);
                }
                else
                {
                    FULL = r.ReadSTRV(dataSize);
                } return(true);

            case "DATA":
            case "LHDT": DATA = new DATAField(r, dataSize, format); return(true);

            case "SCPT": SCPT = r.ReadSTRV(dataSize); return(true);

            case "SCRI": SCRI = new FMIDField <SCPTRecord>(r, dataSize); return(true);

            case "ICON":
            case "ITEX": ICON = r.ReadFILE(dataSize); return(true);

            case "MODL": MODL = new MODLGroup(r, dataSize); return(true);

            case "MODB": MODL.MODBField(r, dataSize); return(true);

            case "MODT": MODL.MODTField(r, dataSize); return(true);

            case "SNAM": SNAM = new FMIDField <SOUNRecord>(r, dataSize); return(true);

            default: return(false);
            }
        }
        public override bool CreateField(UnityBinaryReader r, GameFormatId format, string type, int dataSize)
        {
            if (format == GameFormatId.TES3)
            {
                switch (type)
                {
                case "NAME": EDID = r.ReadSTRV(dataSize); return(true);

                case "FNAM": FULL = r.ReadSTRV(dataSize); return(true);

                case "RADT": DATA = new DATAField(r, dataSize, format); return(true);

                case "NPCS": SPLOs.Add(r.ReadSTRV(dataSize)); return(true);

                case "DESC": DESC = r.ReadSTRV(dataSize); return(true);

                default: return(false);
                }
            }
            if (format == GameFormatId.TES4)
            {
                switch (_nameState)
                {
                case 0:
                    switch (type)
                    {
                    case "EDID": EDID = r.ReadSTRV(dataSize); return(true);

                    case "FULL": FULL = r.ReadSTRV(dataSize); return(true);

                    case "DESC": DESC = r.ReadSTRV(dataSize); return(true);

                    case "DATA": DATA = new DATAField(r, dataSize, format); return(true);

                    case "SPLO": SPLOs.Add(r.ReadSTRV(dataSize)); return(true);

                    case "VNAM": VNAM = new FMID2Field <RACERecord>(r, dataSize); return(true);

                    case "DNAM": DNAM = new FMID2Field <HAIRRecord>(r, dataSize); return(true);

                    case "CNAM": CNAM = r.ReadT <BYTEField>(dataSize); return(true);

                    case "PNAM": PNAM = r.ReadT <FLTVField>(dataSize); return(true);

                    case "UNAM": UNAM = r.ReadT <FLTVField>(dataSize); return(true);

                    case "XNAM": XNAM = r.ReadUNKN(dataSize); return(true);

                    case "ATTR": DATA.ATTRField(r, dataSize); return(true);

                    case "NAM0": _nameState++; return(true);

                    default: return(false);
                    }

                case 1:     // Face Data
                    switch (type)
                    {
                    case "INDX": FaceParts.Add(new FacePartGroup {
                            INDX = r.ReadT <UI32Field>(dataSize)
                        }); return(true);

                    case "MODL": FaceParts.Last().MODL = new MODLGroup(r, dataSize); return(true);

                    case "ICON": FaceParts.Last().ICON = r.ReadFILE(dataSize); return(true);

                    case "MODB": FaceParts.Last().MODL.MODBField(r, dataSize); return(true);

                    case "NAM1": _nameState++; return(true);

                    default: return(false);
                    }

                case 2:     // Body Data
                    switch (type)
                    {
                    case "MNAM": _genderState = 0; return(true);

                    case "FNAM": _genderState = 1; return(true);

                    case "MODL": Bodys[_genderState].MODL = r.ReadFILE(dataSize); return(true);

                    case "MODB": Bodys[_genderState].MODB = r.ReadT <FLTVField>(dataSize); return(true);

                    case "INDX": Bodys[_genderState].BodyParts.Add(new BodyPartGroup {
                            INDX = r.ReadT <UI32Field>(dataSize)
                        }); return(true);

                    case "ICON": Bodys[_genderState].BodyParts.Last().ICON = r.ReadFILE(dataSize); return(true);

                    case "HNAM": _nameState++; break;

                    default: return(false);
                    }
                    goto case 3;

                case 3:     // Postamble
                    switch (type)
                    {
                    case "HNAM": for (var i = 0; i < dataSize >> 2; i++)
                        {
                            HNAMs.Add(new FMIDField <HAIRRecord>(r, 4));
                        }
                        return(true);

                    case "ENAM": for (var i = 0; i < dataSize >> 2; i++)
                        {
                            ENAMs.Add(new FMIDField <EYESRecord>(r, 4));
                        }
                        return(true);

                    case "FGGS": FGGS = r.ReadBYTV(dataSize); return(true);

                    case "FGGA": FGGA = r.ReadBYTV(dataSize); return(true);

                    case "FGTS": FGTS = r.ReadBYTV(dataSize); return(true);

                    case "SNAM": SNAM = r.ReadUNKN(dataSize); return(true);

                    default: return(false);
                    }

                default: return(false);
                }
            }
            return(false);
        }