Example #1
0
            public static IEnumerable <ATopicReference> Factory(MutagenFrame frame)
            {
                while (frame.TryReadSubrecord(RecordTypes.PDTO, out var _))
                {
                    var type = (ATopicReference.TopicType)frame.ReadInt32();
                    switch (type)
                    {
                    case ATopicReference.TopicType.Ref:
                        yield return(new TopicReference()
                        {
                            Reference = new FormLink <IDialogTopicGetter>(FormLinkBinaryTranslation.Instance.Parse(frame))
                        });

                        break;

                    case ATopicReference.TopicType.Subtype:
                        yield return(new TopicReferenceSubtype()
                        {
                            Subtype = new RecordType(frame.ReadInt32())
                        });

                        break;

                    default:
                        throw new NotImplementedException();
                    }
                }
            }
Example #2
0
 static partial void FillBinaryParameterParsingCustom(MutagenFrame frame, IFunctionConditionData item)
 {
     item.ParameterOneNumber = frame.ReadInt32();
     item.ParameterTwoNumber = frame.ReadInt32();
     item.ParameterOneRecord = FormKey.Factory(frame.MetaData.MasterReferences !, (uint)item.ParameterOneNumber);
     item.ParameterTwoRecord = FormKey.Factory(frame.MetaData.MasterReferences !, (uint)item.ParameterTwoNumber);
     item.Unknown3           = frame.ReadInt32();
     item.Unknown4           = frame.ReadInt32();
     item.Unknown5           = frame.ReadInt32();
 }
Example #3
0
            public static partial void FillBinarySecondaryFlagsCustom(MutagenFrame frame, ICombatStyleData item)
            {
                int flags     = frame.ReadInt32();
                var otherFlag = (CombatStyle.Flag)(flags << 8);

                item.Flags |= otherFlag;
            }
        public string Parse(
            MutagenFrame reader,
            bool parseWhole = true,
            StringBinaryType stringBinaryType = StringBinaryType.NullTerminate)
        {
            switch (stringBinaryType)
            {
            case StringBinaryType.Plain:
            case StringBinaryType.NullTerminate:
                if (parseWhole)
                {
                    return(BinaryStringUtility.ProcessWholeToZString(reader.ReadMemory(checked ((int)reader.Remaining))));
                }
                else
                {
                    return(BinaryStringUtility.ParseUnknownLengthString(reader.Reader));
                }

            case StringBinaryType.PrependLength:
            {
                var len = reader.ReadInt32();
                return(BinaryStringUtility.ToZString(reader.ReadMemory(len)));
            }

            case StringBinaryType.PrependLengthUShort:
            {
                var len = reader.ReadInt16();
                return(BinaryStringUtility.ToZString(reader.ReadMemory(len)));
            }

            default:
                throw new NotImplementedException();
            }
        }
Example #5
0
            static partial void FillBinaryLengthLogicCustom(MutagenFrame frame, IANavigationMeshInternal item)
            {
                frame.Position += frame.MetaData.Constants.SubConstants.HeaderLength;
                var xxxxSize = frame.ReadInt32();

                HeaderTranslation.ReadNextSubrecordType(frame, out var len);
                frame = frame.SpawnWithLength(xxxxSize, checkFraming: false);
                GetSetData(frame, item);
            }
            public static ALocationTarget GetLocationTarget(MutagenFrame frame)
            {
                var type = (LocationTargetRadius.LocationType)frame.ReadInt32();

                switch (type)
                {
                case LocationTargetRadius.LocationType.NearReference:
                    return(new LocationTarget()
                    {
                        Link = FormKeyBinaryTranslation.Instance.Parse(frame).AsLink <ILocationTargetableGetter>()
                    });

                case LocationTargetRadius.LocationType.InCell:
                    return(new LocationCell()
                    {
                        Link = FormKeyBinaryTranslation.Instance.Parse(frame).AsLink <ICellGetter>()
                    });

                case LocationTargetRadius.LocationType.ObjectID:
                    return(new LocationObjectId()
                    {
                        Link = FormKeyBinaryTranslation.Instance.Parse(frame).AsLink <IObjectIdGetter>()
                    });

                case LocationTargetRadius.LocationType.ObjectType:
                    return(new LocationObjectType()
                    {
                        Type = (TargetObjectType)frame.ReadInt32()
                    });

                case LocationTargetRadius.LocationType.LinkedReference:
                    return(new LocationKeyword()
                    {
                        Link = FormKeyBinaryTranslation.Instance.Parse(frame).AsLink <IKeywordGetter>()
                    });

                default:
                    return(new LocationFallback()
                    {
                        Type = type,
                        Data = frame.ReadInt32()
                    });
                }
            }
Example #7
0
            static partial void FillBinaryCoverTrianglesLogicCustom(MutagenFrame frame, IANavigationMeshData item)
            {
                var count = frame.ReadInt32();

                for (int i = 0; i < count; i++)
                {
                    var index = frame.ReadInt16();
                    item.Triangles[index].IsCover = true;
                }
            }
Example #8
0
        public static APackageTarget CreateFromBinary(MutagenFrame frame)
        {
            APackageTarget target = ((APackageTarget.Type)frame.ReadUInt32()) switch
            {
                APackageTarget.Type.SpecificReference => new PackageTargetSpecificReference()
                {
                    Reference = FormKeyBinaryTranslation.Instance.Parse(frame)
                },
                APackageTarget.Type.ObjectID => new PackageTargetObjectID()
                {
                    Reference = FormKeyBinaryTranslation.Instance.Parse(frame)
                },
                APackageTarget.Type.ObjectType => new PackageTargetObjectType()
                {
                    Type = (TargetObjectType)frame.ReadInt32()
                },
                APackageTarget.Type.LinkedReference => new PackageTargetReference()
                {
                    Reference = FormKeyBinaryTranslation.Instance.Parse(frame)
                },
                APackageTarget.Type.RefAlias => new PackageTargetAlias()
                {
                    Alias = frame.ReadInt32()
                },
                APackageTarget.Type.Unknown => new PackageTargetUnknown()
                {
                    Data = frame.ReadInt32()
                },
                APackageTarget.Type.Self => new PackageTargetSelf()
                {
                    Data = frame.ReadInt32()
                },
                _ => throw new NotImplementedException(),
            };

            target.CountOrDistance = frame.ReadInt32();
            return(target);
        }
Example #9
0
 public static partial void FillBinaryTeachesCustom(MutagenFrame frame, IBookInternal item)
 {
     if ((((int)item.Flags) & SpellFlag) > 0)
     {
         item.Teaches = new BookSpell()
         {
             Spell = new FormLink <ISpellGetter>(FormLinkBinaryTranslation.Instance.Parse(frame))
         };
     }
     else if ((((int)item.Flags) & SkillFlag) > 0)
     {
         item.Teaches = new BookSkill
         {
             Skill = (Skill)frame.ReadInt32()
         };
     }
     else
     {
         item.Teaches = new BookTeachesNothing()
         {
             RawContent = frame.ReadUInt32()
         };
     }
 }
Example #10
0
            public static MagicEffectArchetype ReadArchetype(MutagenFrame frame)
            {
                // Jump back and read in association FormKey
                var curPos = frame.Position;

                frame.Position -= 56;
                FormKey associatedItemKey = FormKeyBinaryTranslation.Instance.Parse(frame);

                frame.Position = curPos;

                // Finish reading archetype
                MagicEffectArchetype.TypeEnum archetypeEnum = (MagicEffectArchetype.TypeEnum)frame.ReadInt32();
                MagicEffectArchetype          archetype;

                switch (archetypeEnum)
                {
                case MagicEffectArchetype.TypeEnum.Light:
                    archetype = new MagicEffectLightArchetype();
                    break;

                case MagicEffectArchetype.TypeEnum.Bound:
                    archetype = new MagicEffectBoundArchetype();
                    break;

                case MagicEffectArchetype.TypeEnum.SummonCreature:
                    archetype = new MagicEffectNpcArchetype();
                    break;

                case MagicEffectArchetype.TypeEnum.Guide:
                    archetype = new MagicEffectGuideArchetype();
                    break;

                case MagicEffectArchetype.TypeEnum.SpawnHazard:
                    archetype = new MagicEffectSpawnHazardArchetype();
                    break;

                case MagicEffectArchetype.TypeEnum.PeakValueModifier:
                    archetype = new MagicEffectKeywordArchetype();
                    break;

                case MagicEffectArchetype.TypeEnum.Cloak:
                    archetype = new MagicEffectSpellArchetype();
                    break;

                case MagicEffectArchetype.TypeEnum.Werewolf:
                    archetype = new MagicEffectWerewolfArchetype();
                    break;

                case MagicEffectArchetype.TypeEnum.VampireLord:
                    archetype = new MagicEffectVampireArchetype();
                    break;

                case MagicEffectArchetype.TypeEnum.EnhanceWeapon:
                    archetype = new MagicEffectEnchantmentArchetype();
                    break;

                case MagicEffectArchetype.TypeEnum.Calm:
                case MagicEffectArchetype.TypeEnum.Frenzy:
                    archetype = new MagicEffectArchetype(archetypeEnum)
                    {
                        ActorValue = ActorValue.Aggression
                    };
                    break;

                case MagicEffectArchetype.TypeEnum.Invisibility:
                    archetype = new MagicEffectArchetype(archetypeEnum)
                    {
                        ActorValue = ActorValue.Invisibility
                    };
                    break;

                case MagicEffectArchetype.TypeEnum.Paralysis:
                    archetype = new MagicEffectArchetype(archetypeEnum)
                    {
                        ActorValue = ActorValue.Paralysis
                    };
                    break;

                case MagicEffectArchetype.TypeEnum.Demoralize:
                case MagicEffectArchetype.TypeEnum.TurnUndead:
                case MagicEffectArchetype.TypeEnum.Rally:
                case MagicEffectArchetype.TypeEnum.Banish:
                    archetype = new MagicEffectArchetype(archetypeEnum)
                    {
                        ActorValue = ActorValue.Confidence
                    };
                    break;

                default:
                    archetype = new MagicEffectArchetype(archetypeEnum)
                    {
                        ActorValue = ActorValue.None
                    };
                    break;
                }
                archetype.AssociationKey = associatedItemKey;
                archetype.ActorValue     = (ActorValue)frame.ReadInt32();
                return(archetype);
            }