-
Notifications
You must be signed in to change notification settings - Fork 108
Description
This is a sort of all-in-one proposal for making & keeping the project clean and using uniform conventions, the direction of the project moving forward, and a solution to foreseen long-term issues; this issue also obsoletes what remains of issue #58.
The current version of the Skill System, 1.2, has been plagued with a series of issues for a long time: a significant amount of stuff included is not a part of the Skill System itself, a lot of the older parts use discouraged practices in their implementations, and a focus on remaining backward-compatible prevents a lot of these things from being fixed, only accounted for. Per semantic versioning rules, a 2.0 version would allow for dropping the consideration for backward compatibility, opening the door for cutting a large amount of the fat out of the project and keeping it focused on just the core system.
Looking forward to a setting where the FE8 decompilation is completed, there becomes an issue that used to also be an issue with assembly hacks, namely installing multiple of them without having to manually integrate pieces of each. The two solutions to this that we have now for assembly hacks are EA installers, allowing them to be installed to and reference wherever there is free space for them in the ROM automatically, and modular hooks, allowing multiple hacks to hook in the same locations without requiring the end user to manually integrate them beyond writing a label name in a specific location. Building directly from source code inherently solves the first of these issues, but the second of these returns: any two modifications that edit the same function(s) require manual integration to use together.
Given all of this, the proposal is as follows:
- Remove all superfluous hacks and skills that rely upon them
- This constitutes everything in the
ExternalHacksandQualityOfLifefolders. There should be 3 skills that integrate with an external hack, which would be removed along with them.
- This constitutes everything in the
- Rewrite all core systems in C
- This is the contents of
NecessaryandSkillSystem/Internals, much of which is already in C, but the rest needs to be converted still.
- This is the contents of
- Replace all inline edits
- All existing hooks and inline edits are to instead target full function replacements using lyn autohooks. The combination of this and the previous point makes for a decomp-compatible framework for dealing with conflicting changes to the same function(s).
- Rewrite all skill functions and hooks in C
- This constitutes converting all skill-specific hooks into calculation loops called from full function replacements, as with the rest of the inline edits.
- Standardize code styling & practices
- The styling should be able to be done automatically with a linter
- Standardized practices are light, mostly just utilizing new data structures instead of editing existing ones for compatibility purposes
- Document everything!!!
- Utilize the wiki to document every hook and how it works, the arguments of the functions each calls, the layout of new data structures, the core system and how to utilize it, adding skills, etc. Anyone should be able to edit the wiki, but it has to be done separately from pull requests.
- Stage 2.0 on its own branch
- The existing
masterbranch would becomev1.2.xand remain the default branch for the repository until 2.0 is ready for a release, and 2.0 work would be staged on a newv2.xbranch. This allows the existing version to remain as the default and recommended one until 2.0 is ready, and remain on its own branch afterward to receive maintenance for bugfixes and such as needed.
- The existing
This should solve longstanding existing organizational and bloat issues, give a platform moving forward to address future issues from, and deal with the technical debt left by some of the older components still used in the skill system. I know various parts of this are things that other people have started working on before and had nowhere to put incomplete work towards, so hopefully this setup would allow for a place to put incremental work towards some of these goals.
Before any changes are actually made I want people's thoughts on this proposal, preferably as replies to this GitHub issue to keep them all organized in one place.