GORGON-EGG

I have been working on a massive GORGON-EGG update for the past *waves hands* amount of time. I’m getting closer to a releasable state and wanted to share some stuff, but also wanted to pick folks’ brains for some ideas.

This pending update has a few features:

  • A new TOML-based config and module format
  • Fewer dependencies: GORGON-EGG will no longer require CLib or Python (and by extension, a Python virtual environment)
  • Support for FE6, FE7J/U, FE8J

The project’s Python-based tools (the config parser and tilemap converter) have been replaced with new native executables, which makes for fewer installation steps for end users.

Some technical details about these cool executables

These new executables have been written in Rust, which is a cool language that Cam said I should learn. Rust programs aren’t scripts, and thus do not require an interpreter like Python. The executables will be published with GORGON-EGG’s releases. The source for these programs will be included with the GORGON-EGG source, as normal.

This update to the config parser also changes the config and module declaration files’ format from XML to TOML. Modules will be able to specify a certain game or combination of games that they are made for, along with certain version of the config parser (and GORGON-EGG as a whole) that they work for. Modules will also allow for components within them, like definitions or files to include, to be conditionally used if the game/version matches. Consider the following (precise formats are still pending but this is mostly locked in):

[[module.asm_definitions]]
  name = "GetUnitCurrentHp"
  body = "SET_FUNC GetUnitCurrentHp, 0x08018388 | 1"
  games = [ "FE6J" ]

[[module.asm_definitions]]
  name = "GetUnitCurrentHp"
  body = "SET_FUNC GetUnitCurrentHp, 0x08018A70 | 1"
  games = [ "FE7U" ]

[[module.asm_definitions]]
  name = "GetUnitCurrentHp"
  body = "SET_FUNC GetUnitCurrentHp, 0x08018E60 | 1"
  games = [ "FE7J" ]

Supporting multiple games means that I have to write definitions for game-specific variants of structures, functions, etc., so I had to throw out CLib and write my own set of headers.


And now for the brain picking:

Future plans include having support for changing the ‘burst’ setting for the unit player interface. Instead of limiting users to creating burst-style windows, I would prefer it if either interface option could be configured to be a panel, burst, or something else (see the ring module earlier in the thread).

Trying to support an additional panel-style window would be difficult for a few reasons:

Panel-style windows require a larger proc than the burst-style, which means that I’d have to place the proc into free space and update references to it (this means that I’ll have to touch more vanilla functions, which can lead to collisions with other hacks).

The position of panel-style windows must be checked against by other player interface elements like the terrain and goal windows, so their functions must also be edited, leading to more collisions and incompatibilities.

So, if I’m going to be editing other player interface functions, I feel like I might as well extend GORGON-EGG to support the terrain and goal windows.

Also, as a bonus: it might be fun to just support an arbitrary number of unit display options instead of just the normal Panel -> Burst -> Off and leave it up to the user to provide the options menu/indexing support.

With all of that rambling done: what would you like to see for GORGON-EGG? Would you like a modular burst window? The ability to have two panels or bursts or something else?

Would you take these at the cost of conflicting with other player interface hacks? Should I just bite the bullet and support these windows myself?

8 Likes

I keep forgetting the burst style window exists. It’d be nice to have a modular variant, if only to provide additional information to the player. I envisage it as being a nice place to store what skills a unit has (as I’m currently using an MP system in the regular MMB) with potentially a timer proc to automatically switch between both windows after so many frames.

Supporting the terrain window is also great, for adding resistance bonuses for instance.

When it comes to it conflicting with other hacks, I can only speak for myself, but as I’m using a C buildfile I’m prepared to do the legwork to make it play nice with my stuff. So that isn’t too much of an issue.

If possible I’d appreciate it if you kept the vanilla struct and avoided repointing the procscr for these. I understand if that feels like too much of a hassle, so if you don’t want to, it’s not a big deal.

I’ve been slowly working my way through creating an ingame notification display that shows up like the goal window / mmb / terrain box do. You probably saw a gif in discord a couple weeks ago. Anyway, it has to deal with these procs, so keeping as much of the vanilla structure of things as possible would make my life easier. Eventual plan is to show notifications for completing ingame achievements and for new unlocks - It’s sitting there in my asm repo, but I have a long way to go before it’s done, still.

Anyway, I look forward to seeing what you come up with and I’d like to add this to the self randomizers in the future. I’m biased here, but I think if you do decide to tackle the terrain and goal windows that you should release them individually. Mmb / ge are already hugely customizable for one hack.

I have gone and pushed GORGON-EGG’s current progress (which lacks module documentation, modules, and probably more), including compiled binaries, for anyone interested in taking a look.

Documentation and regular commits will come after I get some sleep.

This version of GORGON-EGG adds multi-game support, a new config/module format, and new modules. This release includes an example config that looks like this when built:

Also included is a ‘custom’ module for previewing unit names, item names, and class names using the new small font text system shown above.

If anyone tries it out, I would love to hear your impressions of the new system (e.g. the setup, editing configs/modules, running the build process, etc.). Thanks!

8 Likes

After much delay, GORGON-EGG’s 1.0.0 release is finally ready:

6 Likes