Tool HexManiacAdvance: A New Hex Editor for Gen 3 Hacking

Started by haven1433 December 20th, 2019 7:30 PM
  • 48502 views
  • 111 replies

haven1433

Modder / Programmer

Male
Seen May 30th, 2022
Posted May 29th, 2022
32 posts
8.9 Years

[Tool] Hex Maniac Advance


Author: haven1433
Current release: v0.4.4


HexManiacAdvance

Introduction

HexManiacAdvance is a hex editor designed for editing Pokemon GBA games. It specifically targets the English games Ruby (AXVE), Sapphire (AXPE), FireRed (BPRE), LeafGreen (BPGE), and Emerald (BPEE) and can edit the 1.0 and 1.1 versions. Being a hex editor, it can view an edit any data in the file. But for a lot of data, HexManiacAdvance offers an enriched editing experience which can rival and surpass other editors like PGE, G3T, and Yape.

For all you binary Rom Hackers, I need you to give it a try and let me know what you think. I want it to be the most useful hex editor possible for Gen 3 ROM hacking, but I can't do that without feedback from hackers like you!

Features



Data Editing

  • Edit Pokemon names, stats, evolutions, moves, and pokedex entries
  • Edit Trainer names, items, and pokemon teams
  • Edit Move names, stats, and descriptions
  • Edit Item stats and effects
  • Edit many other miscellaneous tables in the game like multi-choice text lists, what moves are effected by SoundProof, how much money different types of trainers give you, in-game trades, and what moves won't appear during metronome
  • Edit many constants within the game, such as the shiny odds, the stat boost for various badges, or the exp boost for lucky egg or traded pokemon

Text Editing

  • Find and edit almost any text in the game
  • Safely and automatically repoint text that's too long to fit in its original space

Image Editing

  • Edit images and tilemaps directly within HMA, or use import/export to convert from PNG so you can use your favorite image editor
  • Never worry about tilesets again: HMA lets you treat tilemaps just like any other sprite
  • Edit the title screen and the menus
  • Edit the townmap and player icons
  • Edit sprites of pokemon, trainers, items, and Overworld characters
  • Edit type icons
  • Have full control over how you handle shared palettes, or ask HMA to do it for you

Code Editing

  • View/Edit events scripts like you would with XSE
  • HMA can integrate with AdvanceMap as a script editor
  • View/Edit battle scripts and animation scripts for your moves
  • View/Edit thumb code

Utilities

  • Safely add the Fairy type to your game
  • Expand your game with any number of additional moves
  • Create and apply patches (.ips and .ups)
  • Reorder your pokedex
  • Export backups as you work
  • Create or apply patches in the IPS or UPS format
  • Create backups of your hack to prevent loss of work

Community

  • An active discord community to help with any problems you encounter
  • Frequent releases with bugfixes and new features

Screenshots





Download

Tutorials

Notes: Please report any bugs in the Discord server. Feel free to reach out to me if you have any trouble!
Male
Katones City
Seen 2 Days Ago
Posted January 7th, 2022
48 posts
5.9 Years
Amazing software!
It seems like a lot of hassles will be saved for binary hackers like me!

There is one tiny problem. If I go full screen, the app crashes. Here is what the crash log says:
Spoiler:
Index was out of range. Must be non-negative and less than the size of the collection.
Parameter name: index
at System.ThrowHelper.ThrowArgumentOutOfRangeException(ExceptionArgument argument, ExceptionResource resource)
at HavenSoft.HexManiac.WPF.Implementations.GlyphCollector.Collect[T](IDataFormat format, Int32 cellStart, Int32 cellWidth, String text)
at HavenSoft.HexManiac.WPF.Implementations.FormatDrawer.RenderRow()
at HavenSoft.HexManiac.WPF.Controls.HexContent.RenderData(DrawingContext drawingContext, FormatDrawer visitor)
at HavenSoft.HexManiac.WPF.Controls.HexContent.OnRender(DrawingContext drawingContext)
at System.Windows.UIElement.Arrange(Rect finalRect)
at System.Windows.Controls.Grid.ArrangeOverride(Size arrangeSize)
at System.Windows.FrameworkElement.ArrangeCore(Rect finalRect)
at System.Windows.UIElement.Arrange(Rect finalRect)
at System.Windows.Controls.Grid.ArrangeOverride(Size arrangeSize)
at System.Windows.FrameworkElement.ArrangeCore(Rect finalRect)
at System.Windows.UIElement.Arrange(Rect finalRect)
at System.Windows.Controls.Grid.ArrangeOverride(Size arrangeSize)
at System.Windows.FrameworkElement.ArrangeCore(Rect finalRect)
at System.Windows.UIElement.Arrange(Rect finalRect)
at System.Windows.Controls.DockPanel.ArrangeOverride(Size arrangeSize)
at System.Windows.FrameworkElement.ArrangeCore(Rect finalRect)
at System.Windows.UIElement.Arrange(Rect finalRect)
at MS.Internal.Helper.ArrangeElementWithSingleChild(UIElement element, Size arrangeSize)
at System.Windows.Controls.ContentPresenter.ArrangeOverride(Size arrangeSize)
at System.Windows.FrameworkElement.ArrangeCore(Rect finalRect)
at System.Windows.UIElement.Arrange(Rect finalRect)
at System.Windows.Controls.Border.ArrangeOverride(Size finalSize)
at System.Windows.FrameworkElement.ArrangeCore(Rect finalRect)
at System.Windows.UIElement.Arrange(Rect finalRect)
at System.Windows.Controls.Control.ArrangeOverride(Size arrangeBounds)
at System.Windows.FrameworkElement.ArrangeCore(Rect finalRect)
at System.Windows.UIElement.Arrange(Rect finalRect)
at MS.Internal.Helper.ArrangeElementWithSingleChild(UIElement element, Size arrangeSize)
at System.Windows.Controls.ContentPresenter.ArrangeOverride(Size arrangeSize)
at System.Windows.FrameworkElement.ArrangeCore(Rect finalRect)
at System.Windows.UIElement.Arrange(Rect finalRect)
at System.Windows.Controls.Control.ArrangeOverride(Size arrangeBounds)
at System.Windows.FrameworkElement.ArrangeCore(Rect finalRect)
at System.Windows.UIElement.Arrange(Rect finalRect)
at MS.Internal.Helper.ArrangeElementWithSingleChild(UIElement element, Size arrangeSize)
at System.Windows.Controls.ContentPresenter.ArrangeOverride(Size arrangeSize)
at System.Windows.FrameworkElement.ArrangeCore(Rect finalRect)
at System.Windows.UIElement.Arrange(Rect finalRect)
at System.Windows.Controls.Border.ArrangeOverride(Size finalSize)
at System.Windows.FrameworkElement.ArrangeCore(Rect finalRect)
at System.Windows.UIElement.Arrange(Rect finalRect)
at System.Windows.Controls.Grid.ArrangeOverride(Size arrangeSize)
at System.Windows.FrameworkElement.ArrangeCore(Rect finalRect)
at System.Windows.UIElement.Arrange(Rect finalRect)
at System.Windows.Controls.Control.ArrangeOverride(Size arrangeBounds)
at System.Windows.FrameworkElement.ArrangeCore(Rect finalRect)
at System.Windows.UIElement.Arrange(Rect finalRect)
at System.Windows.Controls.Grid.ArrangeOverride(Size arrangeSize)
at System.Windows.FrameworkElement.ArrangeCore(Rect finalRect)
at System.Windows.UIElement.Arrange(Rect finalRect)
at System.Windows.Controls.DockPanel.ArrangeOverride(Size arrangeSize)
at System.Windows.FrameworkElement.ArrangeCore(Rect finalRect)
at System.Windows.UIElement.Arrange(Rect finalRect)
at System.Windows.Controls.Grid.ArrangeOverride(Size arrangeSize)
at System.Windows.FrameworkElement.ArrangeCore(Rect finalRect)
at System.Windows.UIElement.Arrange(Rect finalRect)
at MS.Internal.Helper.ArrangeElementWithSingleChild(UIElement element, Size arrangeSize)
at System.Windows.Controls.ContentPresenter.ArrangeOverride(Size arrangeSize)
at System.Windows.FrameworkElement.ArrangeCore(Rect finalRect)
at System.Windows.UIElement.Arrange(Rect finalRect)
at System.Windows.Documents.AdornerDecorator.ArrangeOverride(Size finalSize)
at System.Windows.FrameworkElement.ArrangeCore(Rect finalRect)
at System.Windows.UIElement.Arrange(Rect finalRect)
at System.Windows.Controls.Border.ArrangeOverride(Size finalSize)
at System.Windows.FrameworkElement.ArrangeCore(Rect finalRect)
at System.Windows.UIElement.Arrange(Rect finalRect)
at System.Windows.Window.ArrangeOverride(Size arrangeBounds)
at System.Windows.FrameworkElement.ArrangeCore(Rect finalRect)
at System.Windows.UIElement.Arrange(Rect finalRect)
at System.Windows.ContextLayoutManager.UpdateLayout()
at System.Windows.UIElement.UpdateLayout()
at System.Windows.Interop.HwndSource.Process_WM_SIZE(UIElement rootUIElement, IntPtr hwnd, WindowMessage msg, IntPtr wParam, IntPtr lParam)
at System.Windows.Interop.HwndSource.LayoutFilterMessage(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
at MS.Win32.HwndWrapper.WndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
at MS.Win32.HwndSubclass.DispatcherCallbackOperation(Object o)
at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
at System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Int32 numArgs, Delegate catchHandler)Index was out of range. Must be non-negative and less than the size of the collection.
Parameter name: index
at System.ThrowHelper.ThrowArgumentOutOfRangeException(ExceptionArgument argument, ExceptionResource resource)
at HavenSoft.HexManiac.WPF.Implementations.GlyphCollector.Collect[T](IDataFormat format, Int32 cellStart, Int32 cellWidth, String text)
at HavenSoft.HexManiac.WPF.Implementations.FormatDrawer.RenderRow()
at HavenSoft.HexManiac.WPF.Controls.HexContent.RenderData(DrawingContext drawingContext, FormatDrawer visitor)
at HavenSoft.HexManiac.WPF.Controls.HexContent.OnRender(DrawingContext drawingContext)
at System.Windows.UIElement.Arrange(Rect finalRect)
at System.Windows.ContextLayoutManager.UpdateLayout()
at System.Windows.ContextLayoutManager.UpdateLayoutCallback(Object arg)
at System.Windows.Media.MediaContext.InvokeOnRenderCallback.DoWork()
at System.Windows.Media.MediaContext.FireInvokeOnRenderCallbacks()
at System.Windows.Media.MediaContext.RenderMessageHandlerCore(Object resizedCompositionTarget)
at System.Windows.Media.MediaContext.RenderMessageHandler(Object resizedCompositionTarget)
at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
at System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Int32 numArgs, Delegate catchHandler)Index was out of range. Must be non-negative and less than the size of the collection.
Parameter name: index
at System.ThrowHelper.ThrowArgumentOutOfRangeException(ExceptionArgument argument, ExceptionResource resource)
at HavenSoft.HexManiac.WPF.Implementations.GlyphCollector.Collect[T](IDataFormat format, Int32 cellStart, Int32 cellWidth, String text)
at HavenSoft.HexManiac.WPF.Implementations.FormatDrawer.RenderRow()
at HavenSoft.HexManiac.WPF.Controls.HexContent.RenderData(DrawingContext drawingContext, FormatDrawer visitor)
at HavenSoft.HexManiac.WPF.Controls.HexContent.OnRender(DrawingContext drawingContext)
at System.Windows.UIElement.Arrange(Rect finalRect)
at System.Windows.ContextLayoutManager.UpdateLayout()
at System.Windows.ContextLayoutManager.UpdateLayoutCallback(Object arg)
at System.Windows.Media.MediaContext.InvokeOnRenderCallback.DoWork()
at System.Windows.Media.MediaContext.FireInvokeOnRenderCallbacks()
at System.Windows.Media.MediaContext.RenderMessageHandlerCore(Object resizedCompositionTarget)
at System.Windows.Media.MediaContext.RenderMessageHandler(Object resizedCompositionTarget)
at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
at System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Int32 numArgs, Delegate catchHandler)Index was out of range. Must be non-negative and less than the size of the collection.
Parameter name: index
at System.ThrowHelper.ThrowArgumentOutOfRangeException(ExceptionArgument argument, ExceptionResource resource)
at HavenSoft.HexManiac.WPF.Implementations.GlyphCollector.Collect[T](IDataFormat format, Int32 cellStart, Int32 cellWidth, String text)
at HavenSoft.HexManiac.WPF.Implementations.FormatDrawer.RenderRow()
at HavenSoft.HexManiac.WPF.Controls.HexContent.RenderData(DrawingContext drawingContext, FormatDrawer visitor)
at HavenSoft.HexManiac.WPF.Controls.HexContent.OnRender(DrawingContext drawingContext)
at System.Windows.UIElement.Arrange(Rect finalRect)
at System.Windows.ContextLayoutManager.UpdateLayout()
at System.Windows.ContextLayoutManager.UpdateLayoutCallback(Object arg)
at System.Windows.Media.MediaContext.InvokeOnRenderCallback.DoWork()
at System.Windows.Media.MediaContext.FireInvokeOnRenderCallbacks()
at System.Windows.Media.MediaContext.RenderMessageHandlerCore(Object resizedCompositionTarget)
at System.Windows.Media.MediaContext.RenderMessageHandler(Object resizedCompositionTarget)
at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
at System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Int32 numArgs, Delegate catchHandler)Index was out of range. Must be non-negative and less than the size of the collection.
Parameter name: index
at System.ThrowHelper.ThrowArgumentOutOfRangeException(ExceptionArgument argument, ExceptionResource resource)
at HavenSoft.HexManiac.WPF.Implementations.GlyphCollector.Collect[T](IDataFormat format, Int32 cellStart, Int32 cellWidth, String text)
at HavenSoft.HexManiac.WPF.Implementations.FormatDrawer.RenderRow()
at HavenSoft.HexManiac.WPF.Controls.HexContent.RenderData(DrawingContext drawingContext, FormatDrawer visitor)
at HavenSoft.HexManiac.WPF.Controls.HexContent.OnRender(DrawingContext drawingContext)
at System.Windows.UIElement.Arrange(Rect finalRect)
at System.Windows.ContextLayoutManager.UpdateLayout()
at System.Windows.ContextLayoutManager.UpdateLayoutCallback(Object arg)
at System.Windows.Media.MediaContext.InvokeOnRenderCallback.DoWork()
at System.Windows.Media.MediaContext.FireInvokeOnRenderCallbacks()
at System.Windows.Media.MediaContext.RenderMessageHandlerCore(Object resizedCompositionTarget)
at System.Windows.Media.MediaContext.RenderMessageHandler(Object resizedCompositionTarget)
at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
at System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Int32 numArgs, Delegate catchHandler)Index was out of range. Must be non-negative and less than the size of the collection.
Parameter name: index
at System.ThrowHelper.ThrowArgumentOutOfRangeException(ExceptionArgument argument, ExceptionResource resource)
at HavenSoft.HexManiac.WPF.Implementations.GlyphCollector.Collect[T](IDataFormat format, Int32 cellStart, Int32 cellWidth, String text)
at HavenSoft.HexManiac.WPF.Implementations.FormatDrawer.RenderRow()
at HavenSoft.HexManiac.WPF.Controls.HexContent.RenderData(DrawingContext drawingContext, FormatDrawer visitor)
at HavenSoft.HexManiac.WPF.Controls.HexContent.OnRender(DrawingContext drawingContext)
at System.Windows.UIElement.Arrange(Rect finalRect)
at System.Windows.Controls.Grid.ArrangeOverride(Size arrangeSize)
at System.Windows.FrameworkElement.ArrangeCore(Rect finalRect)
at System.Windows.UIElement.Arrange(Rect finalRect)
at System.Windows.Controls.Grid.ArrangeOverride(Size arrangeSize)
at System.Windows.FrameworkElement.ArrangeCore(Rect finalRect)
at System.Windows.UIElement.Arrange(Rect finalRect)
at System.Windows.Controls.Grid.ArrangeOverride(Size arrangeSize)
at System.Windows.FrameworkElement.ArrangeCore(Rect finalRect)
at System.Windows.UIElement.Arrange(Rect finalRect)
at System.Windows.Controls.DockPanel.ArrangeOverride(Size arrangeSize)
at System.Windows.FrameworkElement.ArrangeCore(Rect finalRect)
at System.Windows.UIElement.Arrange(Rect finalRect)
at MS.Internal.Helper.ArrangeElementWithSingleChild(UIElement element, Size arrangeSize)
at System.Windows.Controls.ContentPresenter.ArrangeOverride(Size arrangeSize)
at System.Windows.FrameworkElement.ArrangeCore(Rect finalRect)
at System.Windows.UIElement.Arrange(Rect finalRect)
at System.Windows.Controls.Border.ArrangeOverride(Size finalSize)
at System.Windows.FrameworkElement.ArrangeCore(Rect finalRect)
at System.Windows.UIElement.Arrange(Rect finalRect)
at System.Windows.Controls.Control.ArrangeOverride(Size arrangeBounds)
at System.Windows.FrameworkElement.ArrangeCore(Rect finalRect)
at System.Windows.UIElement.Arrange(Rect finalRect)
at MS.Internal.Helper.ArrangeElementWithSingleChild(UIElement element, Size arrangeSize)
at System.Windows.Controls.ContentPresenter.ArrangeOverride(Size arrangeSize)
at System.Windows.FrameworkElement.ArrangeCore(Rect finalRect)
at System.Windows.UIElement.Arrange(Rect finalRect)
at System.Windows.Controls.Control.ArrangeOverride(Size arrangeBounds)
at System.Windows.FrameworkElement.ArrangeCore(Rect finalRect)
at System.Windows.UIElement.Arrange(Rect finalRect)
at MS.Internal.Helper.ArrangeElementWithSingleChild(UIElement element, Size arrangeSize)
at System.Windows.Controls.ContentPresenter.ArrangeOverride(Size arrangeSize)
at System.Windows.FrameworkElement.ArrangeCore(Rect finalRect)
at System.Windows.UIElement.Arrange(Rect finalRect)
at System.Windows.Controls.Border.ArrangeOverride(Size finalSize)
at System.Windows.FrameworkElement.ArrangeCore(Rect finalRect)
at System.Windows.UIElement.Arrange(Rect finalRect)
at System.Windows.Controls.Grid.ArrangeOverride(Size arrangeSize)
at System.Windows.FrameworkElement.ArrangeCore(Rect finalRect)
at System.Windows.UIElement.Arrange(Rect finalRect)
at System.Windows.Controls.Control.ArrangeOverride(Size arrangeBounds)
at System.Windows.FrameworkElement.ArrangeCore(Rect finalRect)
at System.Windows.UIElement.Arrange(Rect finalRect)
at System.Windows.Controls.Grid.ArrangeOverride(Size arrangeSize)
at System.Windows.FrameworkElement.ArrangeCore(Rect finalRect)
at System.Windows.UIElement.Arrange(Rect finalRect)
at System.Windows.Controls.DockPanel.ArrangeOverride(Size arrangeSize)
at System.Windows.FrameworkElement.ArrangeCore(Rect finalRect)
at System.Windows.UIElement.Arrange(Rect finalRect)
at System.Windows.Controls.Grid.ArrangeOverride(Size arrangeSize)
at System.Windows.FrameworkElement.ArrangeCore(Rect finalRect)
at System.Windows.UIElement.Arrange(Rect finalRect)
at MS.Internal.Helper.ArrangeElementWithSingleChild(UIElement element, Size arrangeSize)
at System.Windows.Controls.ContentPresenter.ArrangeOverride(Size arrangeSize)
at System.Windows.FrameworkElement.ArrangeCore(Rect finalRect)
at System.Windows.UIElement.Arrange(Rect finalRect)
at System.Windows.Documents.AdornerDecorator.ArrangeOverride(Size finalSize)
at System.Windows.FrameworkElement.ArrangeCore(Rect finalRect)
at System.Windows.UIElement.Arrange(Rect finalRect)
at System.Windows.Controls.Border.ArrangeOverride(Size finalSize)
at System.Windows.FrameworkElement.ArrangeCore(Rect finalRect)
at System.Windows.UIElement.Arrange(Rect finalRect)
at System.Windows.Window.ArrangeOverride(Size arrangeBounds)
at System.Windows.FrameworkElement.ArrangeCore(Rect finalRect)
at System.Windows.UIElement.Arrange(Rect finalRect)
at System.Windows.ContextLayoutManager.UpdateLayout()
at System.Windows.UIElement.UpdateLayout()
at System.Windows.Interop.HwndSource.Process_WM_SIZE(UIElement rootUIElement, IntPtr hwnd, WindowMessage msg, IntPtr wParam, IntPtr lParam)
at System.Windows.Interop.HwndSource.LayoutFilterMessage(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
at MS.Win32.HwndWrapper.WndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
at MS.Win32.HwndSubclass.DispatcherCallbackOperation(Object o)
at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
at System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Int32 numArgs, Delegate catchHandler)Index was out of range. Must be non-negative and less than the size of the collection.
Parameter name: index
at System.ThrowHelper.ThrowArgumentOutOfRangeException(ExceptionArgument argument, ExceptionResource resource)
at HavenSoft.HexManiac.WPF.Implementations.GlyphCollector.Collect[T](IDataFormat format, Int32 cellStart, Int32 cellWidth, String text)
at HavenSoft.HexManiac.WPF.Implementations.FormatDrawer.RenderRow()
at HavenSoft.HexManiac.WPF.Controls.HexContent.RenderData(DrawingContext drawingContext, FormatDrawer visitor)
at HavenSoft.HexManiac.WPF.Controls.HexContent.OnRender(DrawingContext drawingContext)
at System.Windows.UIElement.Arrange(Rect finalRect)
at System.Windows.ContextLayoutManager.UpdateLayout()
at System.Windows.ContextLayoutManager.UpdateLayoutCallback(Object arg)
at System.Windows.Media.MediaContext.InvokeOnRenderCallback.DoWork()
at System.Windows.Media.MediaContext.FireInvokeOnRenderCallbacks()
at System.Windows.Media.MediaContext.RenderMessageHandlerCore(Object resizedCompositionTarget)
at System.Windows.Media.MediaContext.RenderMessageHandler(Object resizedCompositionTarget)
at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
at System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Int32 numArgs, Delegate catchHandler)Index was out of range. Must be non-negative and less than the size of the collection.
Parameter name: index
at System.ThrowHelper.ThrowArgumentOutOfRangeException(ExceptionArgument argument, ExceptionResource resource)
at HavenSoft.HexManiac.WPF.Implementations.GlyphCollector.Collect[T](IDataFormat format, Int32 cellStart, Int32 cellWidth, String text)
at HavenSoft.HexManiac.WPF.Implementations.FormatDrawer.RenderRow()
at HavenSoft.HexManiac.WPF.Controls.HexContent.RenderData(DrawingContext drawingContext, FormatDrawer visitor)
at HavenSoft.HexManiac.WPF.Controls.HexContent.OnRender(DrawingContext drawingContext)
at System.Windows.UIElement.Arrange(Rect finalRect)
at System.Windows.ContextLayoutManager.UpdateLayout()
at System.Windows.ContextLayoutManager.UpdateLayoutCallback(Object arg)
at System.Windows.Media.MediaContext.InvokeOnRenderCallback.DoWork()
at System.Windows.Media.MediaContext.FireInvokeOnRenderCallbacks()
at System.Windows.Media.MediaContext.RenderMessageHandlerCore(Object resizedCompositionTarget)
at System.Windows.Media.MediaContext.RenderMessageHandler(Object resizedCompositionTarget)
at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
at System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Int32 numArgs, Delegate catchHandler)Index was out of range. Must be non-negative and less than the size of the collection.
Parameter name: index
at System.ThrowHelper.ThrowArgumentOutOfRangeException(ExceptionArgument argument, ExceptionResource resource)
at HavenSoft.HexManiac.WPF.Implementations.GlyphCollector.Collect[T](IDataFormat format, Int32 cellStart, Int32 cellWidth, String text)
at HavenSoft.HexManiac.WPF.Implementations.FormatDrawer.RenderRow()
at HavenSoft.HexManiac.WPF.Controls.HexContent.RenderData(DrawingContext drawingContext, FormatDrawer visitor)
at HavenSoft.HexManiac.WPF.Controls.HexContent.OnRender(DrawingContext drawingContext)
at System.Windows.UIElement.Arrange(Rect finalRect)
at System.Windows.ContextLayoutManager.UpdateLayout()
at System.Windows.ContextLayoutManager.UpdateLayoutCallback(Object arg)
at System.Windows.Media.MediaContext.InvokeOnRenderCallback.DoWork()
at System.Windows.Media.MediaContext.FireInvokeOnRenderCallbacks()
at System.Windows.Media.MediaContext.RenderMessageHandlerCore(Object resizedCompositionTarget)
at System.Windows.Media.MediaContext.RenderMessageHandler(Object resizedCompositionTarget)
at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
at System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Int32 numArgs, Delegate catchHandler)

Otherwise it works just fine!

haven1433

Modder / Programmer

Male
Seen May 30th, 2022
Posted May 29th, 2022
32 posts
8.9 Years
Amazing software!
It seems like a lot of hassles will be saved for binary hackers like me!

There is one tiny problem. If I go full screen, the app crashes. Here is what the crash log says:
Spoiler:

Index was out of range. Must be non-negative and less than the size of the collection.
Parameter name: index
...

Otherwise it works just fine!
What version of the app are you using? You can check by going to Help -> About.
If you're using the latest version, I'd like to try and fix the issue for you. If you can reproduce it with the debug version and send me the crash.log file from that, I'll be much more likely to be able to find it.

Very useful.
I am very grateful to have an editor want to modify the Pickup Ability.
No other tool has that.

No other tool has a Metronome editor, do you plan to add? ;D
I just added the metronome / mimic "forbidden moves" table because of this comment ;) it'll be in version 0.3.8.
Age 34
Male
Rio de Janeiro, Brazil
Seen April 19th, 2021
Posted September 22nd, 2020
34 posts
1.9 Years
I've been working on this for about a year, and I've finally made enough progress that it's ready for its first public beta!

I've downloaded this tool but I'm a little lost. How can I go precisely to this window?

Clicking on the sheet "Table", the dropdown menu doesn't have "pokestats". The closest I can get is this:



What am I doing wrong?

Thanks.

Anthroyd

Professor

Male
United States
Seen 4 Days Ago
Posted May 24th, 2022
209 posts
6.2 Years
Note to readers: this tool will likely become an all-in-one gen III hacking suite. Although it's labeled simply as a "hex editor," it assists you through various other tasks like rearranging the Dex with an extremely intuitive drag-and-drop interface, importing new mons, replacing obscure text, modifying abilities, etc. I highly recommend picking this up and learning how to use it properly.
Male
Katones City
Seen 2 Days Ago
Posted January 7th, 2022
48 posts
5.9 Years
What version of the app are you using? You can check by going to Help -> About.
If you're using the latest version, I'd like to try and fix the issue for you. If you can reproduce it with the debug version and send me the crash.log file from that, I'll be much more likely to be able to find it.
My one is version 0.3.5.. or at least that is the one where the error happened. Haven't tried the latest one, tho..

haven1433

Modder / Programmer

Male
Seen May 30th, 2022
Posted May 29th, 2022
32 posts
8.9 Years
My one is version 0.3.5.. or at least that is the one where the error happened. Haven't tried the latest one, tho..
You can get the latest version here if you want. Either way, I can't fix the problem if I can't reproduce it or if you don't have a crash.log. If you provide me with steps to reproduce the issue with the latest release or if you can share a crash.log file from the crash, I'm much more likely to be able to fix it.

Either way, thanks for trying it out!

haven1433

Modder / Programmer

Male
Seen May 30th, 2022
Posted May 29th, 2022
32 posts
8.9 Years
What am I doing wrong?
You're doing nothing wrong :) you can any table in the editor using the 'goto' option: Edit -> Goto in the menu, or Ctrl+G as a shortcut. Then you can type in some text of what you're looking for to filter the list of tables.

Specifically, the table that you're looking for (pokestats) was renamed to data.pokemon.stats in the most recent version, so that's it's name in the dropdown that you're looking at. But "Ctrl+G -> pokestats" should still be able to find it just fine.

Outwitter

You reap what you plant...

Male
India
Seen May 15th, 2022
Posted May 15th, 2022
146 posts
4.9 Years
This editor looks very promising and is rightly so recommend by none other than Anthroyd himself! I'll definitely be keeping an eye on it and would love to see it evolve into a single editor for all gen 3 hacking needs. I have a question if you don't mind. This might sound stupid but can HMA generate INIs for completed hacks? In other words, can I modify sophisticated hacks like Gaia for example with HMA? This is something where PGE fails and G3T becomes mediocre....

haven1433

Modder / Programmer

Male
Seen May 30th, 2022
Posted May 29th, 2022
32 posts
8.9 Years
@outwitter HexManiacAdvance doesn't use INI files. It instead stores its metadata in TOML files. Whenever you open a rom for the first time, it'll generate a TOML file based on what it finds in the rom. I'm working to guarantee that this works perfectly for Ruby, Sapphire, FireRed, LeafGreen, and Emerald, but it tends to work fairly well for romhacks as well. It's not perfect: it may get the length of some of the tables wrong (for example, the number of pokemon or number of moves), but everything is stored, organized with labels, in the TOML file, and you can edit anything that's incorrect.

This does, however, require that you actually KNOW what's going on in your rom ;) so it won't work so well if you're using a big rombase without knowing how it works. But if you know what's going on in the file, you can customize the generated TOML file to get HexManiacAdvance to display it correctly for you.

Outwitter

You reap what you plant...

Male
India
Seen May 15th, 2022
Posted May 15th, 2022
146 posts
4.9 Years
@outwitter HexManiacAdvance doesn't use INI files. It instead stores its metadata in TOML files. Whenever you open a rom for the first time, it'll generate a TOML file based on what it finds in the rom. I'm working to guarantee that this works perfectly for Ruby, Sapphire, FireRed, LeafGreen, and Emerald, but it tends to work fairly well for romhacks as well. It's not perfect: it may get the length of some of the tables wrong (for example, the number of pokemon or number of moves), but everything is stored, organized with labels, in the TOML file, and you can edit anything that's incorrect.

This does, however, require that you actually KNOW what's going on in your rom ;) so it won't work so well if you're using a big rombase without knowing how it works. But if you know what's going on in the file, you can customize the generated TOML file to get HexManiacAdvance to display it correctly for you.
So I should know "what's going on in the file"; that's pretty much the essence of hacking, I guess! Thanks for the reply though. Stay safe, keep working!

haven1433

Modder / Programmer

Male
Seen May 30th, 2022
Posted May 29th, 2022
32 posts
8.9 Years
LykO, I went through and checked my build settings: none of them have changed between 0.3.7 and 0.3.8. They're both built with .Net Framework 4.7.2. Perhaps there's some backwards compatibility in 4.8 that was allowing it to run apps built with 4.7.2.

Either way, your screenshot convinces me that the .Net version is not the issue. If I get access to a Windows 7 machine to test with, I'll look into it and try and fix it. Otherwise, I'll mention that the project is open source; if you're up to it you can try building it locally.



That would require installing Visual Studio, but the free Community edition should be capable of doing the build.
Seen December 15th, 2020
Posted December 15th, 2020
4 posts
1.8 Years
I was happy to finally find a tool, that would give me access to add more Pokémon to Battle Frontier trainers' rosters in Emerald (PGE only lets you to edit trainers' current roster but not add/remove them). However I found soon a problem (see the screenshot):
HMA seems to only show first 100 trainers (all "pre-evolution" ones) in "data.battlefrontier.trainers" section and there are supposed to be 300 trainers in total. Where and how I can find the rest of the trainers?
Male
Seen 1 Week Ago
Posted December 26th, 2021
409 posts
2.2 Years
I was happy to finally find a tool, that would give me access to add more Pokémon to Battle Frontier trainers' rosters in Emerald (PGE only lets you to edit trainers' current roster but not add/remove them). However I found soon a problem (see the screenshot):
HMA seems to only show first 100 trainers (all "pre-evolution" ones) in "data.battlefrontier.trainers" section and there are supposed to be 300 trainers in total. Where and how I can find the rest of the trainers?
After it generates the toml file, open it in a text editor and edit the values.
[[NamedAnchors]]
Name = '''data.battlefrontier.trainers'''
Address = 0x5D5ACC
Format = '''[facilityclass::data.battlefrontier.trainerclass trainername""8 before1:|h before2:|h before3:|h before4:|h before5:|h before6:|h win1:|h win2:|h win3:|h win4:|h win5:|h win6:|h lose1:|h lose2:|h lose3:|h lose4:|h lose5:|h lose6:|h teamoptions<[pokemon:data.battlefrontier.pokemon]!FFFF>]100'''
At the end before ''' change 100
Male
Seen 1 Week Ago
Posted December 26th, 2021
409 posts
2.2 Years
How do you use the "Update" Function, it's greyed out.
How do you edit shiny odds with this?
Really like the image editor. Is there a grid view function in the image editor? (If not pls add one)

Can u also add a starter editor? I know. Just change those bytes. But it’s annoying to do all those stuff because I am lazy.
Overall, AWESOME Tool!!!
Seen December 15th, 2020
Posted December 15th, 2020
4 posts
1.8 Years
After it generates the toml file, open it in a text editor and edit the values.
[[NamedAnchors]]
Name = '''data.battlefrontier.trainers'''
Address = 0x5D5ACC
Format = '''[facilityclass::data.battlefrontier.trainerclass trainername""8 before1:|h before2:|h before3:|h before4:|h before5:|h before6:|h win1:|h win2:|h win3:|h win4:|h win5:|h win6:|h lose1:|h lose2:|h lose3:|h lose4:|h lose5:|h lose6:|h teamoptions<[pokemon:data.battlefrontier.pokemon]!FFFF>]100'''
At the end before ''' change 100
Thank you. Text editor made its magic and I can now finally edit other Frontier trainers properly. Before this, I was trying to copy and paste pointer values of the rosters from PGE to HMA for editing, which didn't work (it should be working now). PGE even crashed and made Frontier data unreadable, when I tried to copy and paste new pointer values to it from HMA (luckily I had backup). At least I have written up all original 300 pointer values in case I need them. It took me several hours, but it was worth it.

Anyway, I'm going to have fun with improving Battle Frontier. I even have made very own "must-do list" for it:
Spoiler:
- More varied and unique rosters with different type combinations (such as Grass/Fire/Water) and gimmick teams with certain abilities/moves (such as Intimidate team from Battle Maison). "Fairy" type is also involved in some form.
- Ponyta, Porygon and Wailmer along with certain other mons from Group2 such as Sableye, Roselia, Plusle/Minun and Volbeat/Illumise will now also appear in Group1 teams like they did in Gen 4 Battle Frontier. Chansey and Scyther will still remain in Group2 for obvious reason.
- Some Group3 mons will now also appear in Group2 like in Gen 4, such as Misdreavus, Electabuzz and Magmar.
- Unown is now included in the rosters.
- Certain mons that didn't get many appearances in different rosters are now more common to add more variety. Notable examples include cocoons (only 1 trainer for each in original), Dragonair (only 3 trainers with exact same roster in original, 2 with Set1 and the third with Set2), Tangela (4 trainers, 2 rosters), Jumpluff/Sunflora (6 trainers, 3 rosters), Slugma/Nuzleaf/Growlithe (13 trainers, 2 rosters), Caterpie/Weedle/Wurmple (13 trainers, 4 "different" rosters) etc.
- If certain mon was missing in type specific team in original, it will be now included. For example Rich Boy/Lady/Guitarist in Round 1, which had Poochyena/Houndour (Dark types), but not Carvanha/Nuzleaf (also Dark types) in the roster. Or 2 Triathletes in Round 2 with Normal/Fighting/Flying types, but didn't include Masquerain/Jumpluff/Poliwrath in the roster for some reason.
- Some minor moveset changes are considered like Detect to Protect, Minimize to Double Team etc. Items may stay untouched. While stuff like Vulpix/Growlithe/Ponyta with Rawst Berry or Tentacool with Pecha Berry seem weird, items are likely meant to be stolen with Thief/Covet/Trick, especially in Pyramid.