Allow pokemon images/palettes to show up with their other data

The pokemon table tool content is getting rather long.
It might be time to consider resizing the tool or adjusting the format.
This commit is contained in:
Benjamin Popp 2020-03-31 16:26:00 -05:00
parent fe161c4600
commit fe210221e5
3 changed files with 17 additions and 12 deletions

View File

@ -43,12 +43,13 @@ battlescriptsource, , , , , , , ,
// sprites / palettes
// bits x width x height. Width/Hegiht measured in tiles.
frontsprites, ,,,, 000128,,,, 000128, [sprite<`lzs4x8x8`> uncompressedLength: index:]440
backsprites, ,,,, 00012C,,,, 00012C, [sprite<`lzs4x8x8`> uncompressedLength: index:]frontsprites
pokepalettes, ,,,, 000130,,,, 000130, [palette<`lzp4`> index: unused:]frontsprites
shinypalettes, ,,,, 000134,,,, 000134, [palette<`lzp4`> index: unused:]frontsprites
pokeicons, ,,,, 000138,,,, 000138, [icon<`ucs4x4x8|pokeiconpalindex`>]frontsprites
pokeiconpalindex, ,,,, 00013C,,,, 00013C, [index.pokeiconpalettes]frontsprites
// pakenames+28: egg, unown*27 (B-Z, !, ?),
frontsprites, ,,,, 000128,,,, 000128, [sprite<`lzs4x8x8`> uncompressedLength: index:]pokenames+28
backsprites, ,,,, 00012C,,,, 00012C, [sprite<`lzs4x8x8`> uncompressedLength: index:]pokenames+28
pokepalettes, ,,,, 000130,,,, 000130, [palette<`lzp4`> index: unused:]pokenames+28
shinypalettes, ,,,, 000134,,,, 000134, [palette<`lzp4`> index: unused:]pokenames+28
pokeicons, ,,,, 000138,,,, 000138, [icon<`ucs4x4x8|pokeiconpalindex`>]pokenames+28
pokeiconpalindex, ,,,, 00013C,,,, 00013C, [index.pokeiconpalettes]pokenames+28
pokeiconpalettes, ,,,, 000140,,,, 000140, [palette<`ucp4`> id::]3
ballsprites, ,,,, 0001D0,,,, 0001D0, [sprite<`lzs4x2x6|ballpalettes`> uncompressedLength: a b]12
ballpalettes, ,,,, 0001D4,,,, 0001D4, [palette<`lzp4`> a b unused:]ballsprites

View File

@ -179,8 +179,10 @@ namespace HavenSoft.HexManiac.Core.Models.Runs {
}
if (options.Count == ElementCount - ParentOffset && ParentOffset != 0) {
// if negative: pull values off the front
if (ParentOffset < 0) options = options.Skip(-ParentOffset).ToList();
else options = Enumerable.Repeat(string.Empty, ParentOffset).Concat(options).ToList();
// if positive: add values onto the back
else options = options.Concat(Enumerable.Range(ElementCount, ParentOffset).Select(i => i.ToString())).ToList();
}
return options;
@ -196,7 +198,7 @@ namespace HavenSoft.HexManiac.Core.Models.Runs {
if (!format.StartsWith(ArrayStart.ToString()) || closeArray == -1) throw new ArrayRunParseException($"Array Content must be wrapped in {ArrayStart}{ArrayEnd}.");
var segments = format.Substring(1, closeArray - 1);
var length = format.Substring(closeArray + 1);
if (!length.All(c => char.IsLetterOrDigit(c) || c == '-')) throw new ArrayRunParseException("Array length must be an anchor name or a number."); // the name might end with "-1" so also allow dashes
if (!length.All(c => char.IsLetterOrDigit(c) || c.IsAny('-', '+'))) throw new ArrayRunParseException("Array length must be an anchor name or a number."); // the name might end with "-1" so also allow +/-
ElementContent = ParseSegments(segments, data);
if (ElementContent.Count == 0) throw new ArrayRunParseException("Array Content must not be empty.");
ElementLength = ElementContent.Sum(e => e.Length);
@ -257,7 +259,7 @@ namespace HavenSoft.HexManiac.Core.Models.Runs {
if (startArray == -1 || startArray > closeArray) return new ErrorInfo($"Array Content must be wrapped in {ArrayStart}{ArrayEnd}.");
var length = format.Substring(closeArray + 1);
if (length.All(c => char.IsLetterOrDigit(c) || c == '-')) {
if (length.All(c => char.IsLetterOrDigit(c) || c.IsAny('-', '+'))) {
// option 1: the length looks like a standard table length (or is empty, and thus dynamic). Parse as a table.
try {
using (ModelCacheScope.CreateScope(data)) {
@ -693,8 +695,9 @@ namespace HavenSoft.HexManiac.Core.Models.Runs {
private (string lengthFromAnchor, int parentOffset, int elementCount) ParseLengthFromAnchor(string length) {
var parts = length.Split("-");
if (parts.Length == 1) parts = length.Split("+");
if (parts.Length == 2 && int.TryParse(parts[1], out int parentOffset)) {
parentOffset = -parentOffset;
if (length.Contains("-")) parentOffset = -parentOffset;
} else {
parentOffset = 0;
}

View File

@ -186,12 +186,13 @@ namespace HavenSoft.HexManiac.Core.ViewModels.Tools {
AddChildrenFromTable(array, index);
if (array is ArrayRun arrayRun) {
index -= arrayRun.ParentOffset;
int negParentOffset = Math.Min(arrayRun.ParentOffset, 0);
index -= negParentOffset;
if (!string.IsNullOrEmpty(arrayRun.LengthFromAnchor)) basename = arrayRun.LengthFromAnchor; // basename is now a 'parent table' name, if there is one
foreach(var currentArray in model.GetRelatedArrays(arrayRun)) {
var currentArrayName = model.GetAnchorFromAddress(-1, currentArray.Start);
var currentIndex = index + currentArray.ParentOffset;
var currentIndex = index + negParentOffset;
if (currentIndex >= 0 && currentIndex < currentArray.ElementCount) {
AddChild(new SplitterArrayElementViewModel(currentArrayName));
AddChildrenFromTable(currentArray, currentIndex);