mirror of
https://github.com/haven1433/HexManiacAdvance.git
synced 2026-06-01 04:53:29 -05:00
add tests for anchor reference issues
Verify that all loaded tilemaps have tilesets Verify that all loaded sprites have palettes (unless they don't claim to) Verify that all loaded enums have sources
This commit is contained in:
parent
cb7f747774
commit
284ceeae52
|
|
@ -211,8 +211,8 @@ graphics.text.boxes, , , , , 06979C, 0
|
|||
graphics.text.boxes, , , , , , , , , 09876C, [sprite<`ucs4x3x3`> pal<`ucp4`>]20
|
||||
|
||||
graphics.bag.male, 3C1CC8, 3C1D20, 3C1CE4, 3C1D40, 3D41E4, 3D4020, 3D4254, 3D4090, 57FB34, `lzs4x8x8|graphics.bag.palette`
|
||||
graphics.bag.female, 3C1CD0, 3C1D28, 3C1CEC, 3C1D50, 3D41EC, 3D4028, 3D425C, 3D4098, 57FB3C, `lzs4x8x8|graphics.bag.palette`
|
||||
graphics.bag.palette, 3C1CD8, 3C1D30, 3C1CF4, 3C1D60, 3D41F4, 3D4030, 3D4264, 3D40A0, 57FB44, `lzp4`
|
||||
graphics.bag.female, 3C1CD0, 3C1D28, 3C1CEC, 3C1D48, 3D41EC, 3D4028, 3D425C, 3D4098, 57FB3C, `lzs4x8x8|graphics.bag.palette`
|
||||
graphics.bag.palette, 3C1CD8, 3C1D30, 3C1CF4, 3C1D50, 3D41F4, 3D4030, 3D4264, 3D40A0, 57FB44, `lzp4`
|
||||
graphics.bag.berry.sprites, 0A7D7C, 0A7D7C, 0A7D9C, 0A7D9C, , , , , 0D50C0, [sprite<`lzs4x6x6`> pal<`lzp4`>]
|
||||
graphics.bag.berrycase.palette, ,,,, 4644B0, 463ED0, 464510, 463F40, , `lzp4`
|
||||
graphics.bag.berrycase.sprite, ,,,, 4644A8, 463EC8, 464508, 463F38, , `lzs4x8x8|graphics.bag.berrycase.palette`
|
||||
|
|
@ -261,7 +261,7 @@ graphics.menu.pokemon.item.sprite, 3765DC, 37656C, 3765F4, 376584,
|
|||
graphics.menu.pokemon.item.palette, 3765E4, 376574, 3765FC, 37658C, 45A434, 459E54, 45A494, 459EC4, 615EB8, `ucp4`
|
||||
graphics.menu.boxes.background, ,,,, 09191C, 0918F0, 091930, 091904, , [tileset<`lzt4`> tilemap<`lzm4x20x18|graphics.menu.boxes.background`> palette<`ucp4`>]16
|
||||
graphics.menu.boxes.picker.palette, ,,,, 08F0B4, 08F088, 08F0C8, 08F09C, , `ucp4`
|
||||
graphics.menu.boxes.picker.tileset, ,,,, 08F034, 08F008, 08F048, 08F01C, , `lzt4|graphics.menu.box.picker.palette`
|
||||
graphics.menu.boxes.picker.tileset, ,,,, 08F034, 08F008, 08F048, 08F01C, , `lzt4|graphics.menu.boxes.picker.palette`
|
||||
graphics.menu.boxes.hand.palette.normal, ,,,, 3CEA60, 3CE89C, 3CEAD0, 3CE90C, , `ucp4`
|
||||
graphics.menu.boxes.hand.palette.catch, ,,,, 3D34B8, 3D32F4, 3D3528, 3D3364, , `ucp4`
|
||||
graphics.menu.boxes.hand.sprite, ,,,, 3D34A0, 3D32DC, 3D3510, 3D334C, , `ucs4x4x16|graphics.menu.boxes.hand.palette.normal`
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@
|
|||
using HavenSoft.HexManiac.Core;
|
||||
using HavenSoft.HexManiac.Core.Models;
|
||||
using HavenSoft.HexManiac.Core.Models.Runs;
|
||||
using HavenSoft.HexManiac.Core.Models.Runs.Sprites;
|
||||
using HavenSoft.HexManiac.Core.ViewModels;
|
||||
using HavenSoft.HexManiac.Core.ViewModels.DataFormats;
|
||||
using HavenSoft.HexManiac.Core.ViewModels.QuickEditItems;
|
||||
|
|
@ -78,6 +79,58 @@ namespace HavenSoft.HexManiac.Tests {
|
|||
Assert.Equal(5, sourcePointers.Count(source => source is OffsetPointerRun));
|
||||
}
|
||||
|
||||
[SkippableTheory]
|
||||
[MemberData(nameof(PokemonGames))]
|
||||
public void Rom_TilemapLoaded_TilesetFound(string game) {
|
||||
if (game.Contains("Clover") || game.Contains("Gaia")) return; // these hacks have busted tilesets, it's fine
|
||||
var noChange = new NoDataChangeDeltaModel();
|
||||
var model = fixture.LoadModel(game);
|
||||
|
||||
foreach (var anchor in model.Anchors) {
|
||||
var run = model.GetNextRun(model.GetAddressFromAnchor(noChange, -1, anchor));
|
||||
if (!(run is ITilemapRun tilemap)) continue;
|
||||
var tilesetAddress = tilemap.FindMatchingTileset(model);
|
||||
var tileset = model.GetNextRun(tilesetAddress);
|
||||
Assert.IsAssignableFrom<ISpriteRun>(tileset);
|
||||
}
|
||||
}
|
||||
|
||||
[SkippableTheory]
|
||||
[MemberData(nameof(PokemonGames))]
|
||||
public void Rom_SpriteLoaded_PaletteFound(string game) {
|
||||
if (game.Contains("Gaia")) return; // Gaia has busted palettes, it's fine
|
||||
var noChange = new NoDataChangeDeltaModel();
|
||||
var model = fixture.LoadModel(game);
|
||||
|
||||
foreach (var anchor in model.Anchors) {
|
||||
var run = model.GetNextRun(model.GetAddressFromAnchor(noChange, -1, anchor));
|
||||
if (!(run is ISpriteRun sprite)) continue;
|
||||
if (sprite.SpriteFormat.BitsPerPixel < 4) continue;
|
||||
var palettes = sprite.FindRelatedPalettes(model);
|
||||
if (palettes.Count == 0 && sprite.SpriteFormat.PaletteHint == null) continue;
|
||||
Assert.IsAssignableFrom<IPaletteRun>(palettes[0]);
|
||||
}
|
||||
}
|
||||
|
||||
[SkippableTheory]
|
||||
[MemberData(nameof(PokemonGames))]
|
||||
public void Table_Enum_SourceFound(string game) {
|
||||
var noChange = new NoDataChangeDeltaModel();
|
||||
var model = fixture.LoadModel(game);
|
||||
|
||||
foreach (var anchor in model.Anchors) {
|
||||
var run = model.GetNextRun(model.GetAddressFromAnchor(noChange, -1, anchor));
|
||||
if (!(run is ITableRun table)) continue;
|
||||
for (int i = 0; i < table.ElementContent.Count; i++) {
|
||||
if (table.ElementContent[i] is ArrayRunBitArraySegment bitArray) {
|
||||
Assert.NotEmpty(bitArray.GetOptions(model));
|
||||
} else if (table.ElementContent[i] is ArrayRunEnumSegment enumSegment) {
|
||||
Assert.NotEmpty(enumSegment.GetOptions(model));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
[SkippableTheory]
|
||||
[MemberData(nameof(PokemonGames))]
|
||||
public void NaturesAreFound(string game) {
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user