public void LoadSpriteGroups() { Loaded = true; for (int i = 0; i < 144; i++) { SpriteGroup sg = new SpriteGroup(romData, spriteRequirementsCollection, i); SpriteGroups.Add(sg); } }
public void Write(Stream stream) { stream.MustWriteAndSeek(); var header = new Header { MagicCode = MagicCodeValidator, Unknown04 = Unknown04, SpriteDesc = new Section() { Count = Sprites.Count }, SpritePartDesc = new Section() { Count = SpriteGroups.Sum(x => x.Count) }, SpriteGroupDesc = new Section() { Count = SpriteGroups.Count }, AnimationDesc = new Section() { Count = AnimationGroups.Sum(x => x.Animations.Count) }, AnimationGroupDesc = new Section() { Count = AnimationGroups.Count }, }; var index = 0; var basePosition = stream.Position; stream.Position = basePosition + MinimumLength; header.SpriteDesc.Offset = (int)(stream.Position - basePosition); header.SpritePartDesc.Offset = stream.WriteList(Sprites.Select(x => new RawSprite { Left = x.Left, Top = x.Top, Right = x.Right, Bottom = x.Bottom, UTranslation = x.UTranslation, VTranslation = x.VTranslation, ColorLeft = x.ColorLeft, ColorTop = x.ColorTop, ColorRight = x.ColorRight, ColorBottom = x.ColorBottom, })) + header.SpriteDesc.Offset; header.SpriteGroupDesc.Offset = stream.WriteList(SpriteGroups.SelectMany(x => x)) + header.SpritePartDesc.Offset; index = 0; foreach (var spriteGroup in SpriteGroups) { BinaryMapping.WriteObject(stream, new RawSpriteGroup { Start = (short)index, Count = (short)spriteGroup.Count }); index += spriteGroup.Count; } header.AnimationDesc.Offset = SpriteGroups.Count * 4 + header.SpriteGroupDesc.Offset; header.AnimationGroupDesc.Offset = stream.WriteList(AnimationGroups.SelectMany(x => x.Animations)) + header.AnimationDesc.Offset; index = 0; foreach (var animGroup in AnimationGroups) { BinaryMapping.WriteObject(stream, new RawAnimationGroup { AnimationIndex = (short)index, Count = (short)animGroup.Animations.Count, DoNotLoop = animGroup.DoNotLoop, Unknown06 = animGroup.Unknown06, LoopStart = animGroup.LoopStart, LoopEnd = animGroup.LoopEnd, Unknown10 = animGroup.LightPositionX, Unknown14 = animGroup.TextPositionY, Unknown18 = animGroup.TextScale, Unknown1C = animGroup.UiPadding, Unknown20 = animGroup.TextPositionX, }); index += animGroup.Animations.Count; } var endPosition = stream.Position; stream.Position = basePosition; BinaryMapping.WriteObject(stream, header); stream.Position = endPosition; }