These are all general issues with the pokecrystal code. Keep an eye out for opportunities to refactor them. ### Use the [style guide](../tree/master/STYLE.md) Reformat code to adhere to [STYLE.md](../tree/master/STYLE.md). (Converting labels to `.snake_case` is one that stands out.) ### Take advantage of up-to-date rgbds features As of 0.3.7, we have these features that are little-used: - `~` works for bytes, so we can do `~X` instead of `$ff ^ X` - `HIGH()` and `LOW()` work for constants - `BANK(@)` gets the current bank; `BANK("Section Name")` is also valid (some labels can thus be removed) - `\` continues lines, like in C or Python, which could help clean up long macros (`trainer`, `npctrade`) and implement new ones (like for data/trainers/attributes.asm or data/pokemon/base_stats/\*.asm) The next release, presumably 0.3.8, will have even more features: - [PR #277](https://github.com/rednex/rgbds/pull/277) supports the aliases `ldh [c], a` for `ld [$ff00+c], a` and `ldh a, [c]` for `ld a, [$ff00+c]`. These will be easier to read and pair better with other uses of `ldh`. - [PR #295](https://github.com/rednex/rgbds/pull/277) supports charmaps in constant expressions, so we can simplify cases like `TIMESET_DOWN_ARROW EQUS "\"♀\"` to just `TIMESET_DOWN_ARROW EQU "♀"`. ### Meaningless temporary labels Look for `UnknownText_*`, `UnknownScript_*`, `Unknown_*`, and `Function_*`. ### Hard-coded "magic numbers" Most of the time, raw numbers should not exist because there are more meaningful replacements. Examples: - `BANK(Label)`: Mostly finished for WRAM labels, but still a problem with mobile code. - `SomeLabelEnd - SomeLabel`: Some structs and sub-structs still have hard-coded sizes like this. - `(SomeGFXLabel.End - SomeGFXLabel) / LEN_2BPP_TILE`: pokered and pokegold-spaceworld already do this. - Bit flags: Use `SOME_BIT_F` constants instead of hard-coding bits 0-7 for the `bit`/`res`/`set` instructions. Find opportunities with: ```bash grep -rE --include='*.asm' --exclude-dir=mobile '^\s(bit|res|set) [0-7],' ``` - Bit masks: Use `1 << SOME_BIT_F` masks and the `maskbits` macro. - Jumptable indexes: Look for raw values being loaded into `[wJumptableIndex]`. ### Text label styles in [data/text/](../tree/master/data/text/) Currently a mixture of `Text_*`, `*Text`, and `BattleText_*`. Likewise for the [engine/](../tree/master/engine/) labels that just `text_jump` to one of them. The convention that should be used is as follows: - Use suffixes, i.e. not `Text_Something`, but `SomethingText`. Same for `Movement`. - Labels that are referenced through `text_jump` should be prefixed with an underscore, e.g. `SomethingText: text_jump _SomethingText`. ### WRAM label style - `wMapObjects` and friends to be re-formatted to `wObjectEvents` - `wObjectStructs` and friends to be re-formatted to `wMapObjects` - Removal of struct macros which include only a partial label definition (e.g. `wNorthMapConnection:: map_connection_struct wNorth`) ### Project structure - Split big files into meaningful parts - Give files meaningful names - Remove redundancy in names such as `thing/thing_subthing.asm` → `thing/subthing.asm` - Move files into their proper directories: - Palettes in `gfx/` - Pointer tables in `data/` - Group related things in meaningful directories. ### Future of `SECTION`s Namely determining the purpose of them and when they should be defined.