diff --git a/src/HexManiac.Core/Models/Code/default.axve.axpe.toml b/src/HexManiac.Core/Models/Code/default.axve.axpe.toml index bb8cdb75..a1c45dcd 100644 --- a/src/HexManiac.Core/Models/Code/default.axve.axpe.toml +++ b/src/HexManiac.Core/Models/Code/default.axve.axpe.toml @@ -39,3 +39,7 @@ Name = '''Items''' Image = '''graphics.overworld.sprites/59/data/0/sprites/0/sprite/''' Destination = '''data.items.stats''' +[[GotoShortcut]] +Name = '''Maps''' +Image = '''data.maps.banks/0/maps/9/map/0/layout/0/blockmap/''' +Destination = '''maps.0-9 (LITTLEROOTTOWN)''' diff --git a/src/HexManiac.Core/Models/Code/default.bpee.toml b/src/HexManiac.Core/Models/Code/default.bpee.toml index c64d1a0f..a7e9ebfd 100644 --- a/src/HexManiac.Core/Models/Code/default.bpee.toml +++ b/src/HexManiac.Core/Models/Code/default.bpee.toml @@ -690,3 +690,8 @@ Destination = '''data.pokemon.moves.stats.battle''' Name = '''Items''' Image = '''graphics.items.sprites/13/sprite/''' Destination = '''data.items.stats''' + +[[GotoShortcut]] +Name = '''Maps''' +Image = '''data.maps.banks/0/maps/9/map/0/layout/0/blockmap/''' +Destination = '''maps.0-9 (LITTLEROOT TOWN)''' diff --git a/src/HexManiac.Core/Models/Code/default.bpre.bpge.toml b/src/HexManiac.Core/Models/Code/default.bpre.bpge.toml index 1cec6f81..5da1d06d 100644 --- a/src/HexManiac.Core/Models/Code/default.bpre.bpge.toml +++ b/src/HexManiac.Core/Models/Code/default.bpre.bpge.toml @@ -773,6 +773,11 @@ Name = '''Items''' Image = '''graphics.items.sprites/13/sprite/''' Destination = '''data.items.stats''' +[[GotoShortcut]] +Name = '''Maps''' +Image = '''data.maps.banks/3/maps/0/map/0/layout/0/blockmap/''' +Destination = '''maps.3-0 (PALLET TOWN)''' + [[List]] Name = '''effectanimations''' 0 = [ diff --git a/src/HexManiac.Core/ViewModels/EditorViewModel.cs b/src/HexManiac.Core/ViewModels/EditorViewModel.cs index 1ffa4350..7a092d3b 100644 --- a/src/HexManiac.Core/ViewModels/EditorViewModel.cs +++ b/src/HexManiac.Core/ViewModels/EditorViewModel.cs @@ -2,6 +2,7 @@ using HavenSoft.HexManiac.Core.Models.Runs; using HavenSoft.HexManiac.Core.Models.Runs.Sprites; using HavenSoft.HexManiac.Core.ViewModels.DataFormats; +using HavenSoft.HexManiac.Core.ViewModels.Images; using HavenSoft.HexManiac.Core.ViewModels.QuickEditItems; using HavenSoft.HexManiac.Core.ViewModels.Tools; using System; @@ -1186,10 +1187,20 @@ namespace HavenSoft.HexManiac.Core.ViewModels { var results = new List(); for (int i = 0; i < model.GotoShortcuts.Count; i++) { var destinationAddress = model.GetAddressFromAnchor(new ModelDelta(), -1, model.GotoShortcuts[i].GotoAnchor); - if (destinationAddress == Pointer.NULL) continue; // skip this one + if (destinationAddress == Pointer.NULL) { + var count = model.GetMatchingMaps(model.GotoShortcuts[i].GotoAnchor).Count; + if (count != 1) continue; + } var spriteAddress = model.GetAddressFromAnchor(new ModelDelta(), -1, model.GotoShortcuts[i].ImageAnchor); - var spriteRun = model.GetNextRun(spriteAddress) as ISpriteRun; - var sprite = SpriteDecorator.BuildSprite(viewPort.Model, spriteRun, useTransparency: true); + var run = model.GetNextRun(spriteAddress) as BaseRun; + IPixelViewModel sprite; + if (run is ISpriteRun spriteRun) { + sprite = SpriteDecorator.BuildSprite(viewPort.Model, spriteRun, useTransparency: true); + } else if (run.CreateDataFormat(viewPort.Model, run.Start, true, 16) is SpriteDecorator decorator) { + sprite = decorator.Pixels; + } else { + continue; + } var anchor = model.GotoShortcuts[i].GotoAnchor; var text = model.GotoShortcuts[i].DisplayText; results.Add(new GotoShortcutViewModel(gotoViewModel, viewPort, sprite, anchor, text));