public override void Initialize(System.IO.BinaryReader reader, RecordHeader header) { while (reader.BaseStream.Position < header.DataEndPos) { var subRecordType = (SubRecordType)reader.ReadInt32(); var size = reader.ReadInt32(); switch (subRecordType) { case SubRecordType.Id: name = reader.ReadString(size); break; case SubRecordType.Data: type = (SoundGeneratorType)reader.ReadInt32(); break; case SubRecordType.SoundName: sound = Record.GetRecord <SoundRecord>(reader.ReadString(size)); break; case SubRecordType.CreatureName: creature = Record.GetRecord <CreatureRecord>(reader.ReadString(size)); break; default: throw new NotImplementedException(subRecordType.ToString()); } } }
private Creature CreateCreature(CreatureRecord creatureRecord, int mutations, List <IProcessor> processors) { var dna = creatureRecord.Dna.Take(RedirectProcessor.DnaLength).ToList(); while (dna.Count < RedirectProcessor.DnaLength) { dna.Add(0); } for (int i = 0; i < mutations; i++) { var index = Random.Next(RedirectProcessor.DnaLength); dna[index] = Random.Next(DnaInterpreter.TotalCommands); } return(new Creature { Parent = creatureRecord.Id, Dna = DnaInterpreter.Decode(processors, dna) }); }
private CreatureRecord[] CreateBase() { var dna = new int[RedirectProcessor.DnaLength]; DnaInterpreter.Encode(DnaInterpreter.Processors, DnaInterpreter.DefaultDnaDecrypted).CopyTo(dna, 0); var record = new CreatureRecord { Id = Guid.NewGuid(), ParentId = null, Dna = dna }; var records = new CreatureRecord[DnaProcessor.GenerationSetCount]; for (var i = 0; i < DnaProcessor.GenerationSetCount; i++) { records[i] = record; } return(records); }
public ReferenceData(System.IO.BinaryReader reader) { var index = reader.ReadInt32(); while (true) { var type = (SubRecordType)reader.ReadInt32(); var size = reader.ReadInt32(); switch (type) { case SubRecordType.Id: target = Record.GetRecord<CreatableRecord>(reader.ReadString(size)); break; case SubRecordType.Scale: scale = reader.ReadSingle(); break; case SubRecordType.DoorData: doorData = DoorExitData.Create(reader); break; case SubRecordType.DoorName: loadCell = reader.ReadString(size); break; case SubRecordType.FloatValue: lockLevel = reader.ReadInt32(); break; case SubRecordType.KeyName: key = Record.GetRecord<MiscItemRecord>(reader.ReadString(size)); break; case SubRecordType.Trapname: trap = Record.GetRecord<SpellRecord>(reader.ReadString(size)); break; case SubRecordType.ReferenceBlocked: referenceBlocked = reader.ReadByte() != 0; break; case SubRecordType.OwnerName: owner = Record.GetRecord<NpcRecord>(reader.ReadString(size)); break; case SubRecordType.BodyName: global = Record.GetRecord<Global>(reader.ReadString(size)); break; case SubRecordType.IntValue: health = reader.ReadInt32(); // Health remaining? Also charge for lights break; case SubRecordType.Name9: quantity = reader.ReadInt32(); //0, 1, 5, 10, 25, 100. Definitely value override or object count break; case SubRecordType.SoulName: soul = Record.GetRecord<CreatureRecord>(reader.ReadString(size)); break; case SubRecordType.Data: transformData = new TransformData(reader); break; case SubRecordType.CreatureName: faction = Record.GetRecord<Faction>(reader.ReadString(size)); break; case SubRecordType.Index: rank = reader.ReadInt32(); break; case SubRecordType.SoulCharge: charge = reader.ReadSingle(); break; default: reader.BaseStream.Position -= 8; return; } } }
public InfoPanel DisplayInfo(Vector3 position, int quantity, bool displayIcon, CreatureRecord soul) { var infoPanel = base.CreateInfo(position, quantity, displayIcon); // Soul Gems if (soul != null) { infoPanel.AddTitle($"{fullName} ({soul})"); } // Gold else if (fullName.StartsWith("Gold")) { var goldCountIndex = fullName.IndexOf("_"); var goldCount = fullName.Substring(goldCountIndex); infoPanel.AddTitle($"Gold ({goldCount})"); } else { infoPanel.AddTitle(fullName); } infoPanel.DisplayIcon(Icon); data.DisplayInfo(infoPanel); return(infoPanel); }
protected override void Initialize(MiscItemRecord record, ReferenceData referenceData) { base.Initialize(record, referenceData); soul = referenceData.Soul; }