As a bonus, since I looked at all the `on_draw`s, why not look at all of the `on_tick`s? It's useful knowledge to know the order in which things occur: `this` | Priority | Address | Notes === | === | === |=== **`0x4c10d0`** | `0x01` | `0x43b3d0` | Reads raw keyboard input. Supervises threads? Does D3D... stuff. **`Thread63c`** | `0x03` | `0x43b290` | Checks the configured game resolution and... lolidunno **`AsciiManager`** | `0x04` | `0x408070` | Simply ticks down `remaining_time` (`+0x12c`) fields on strings and deletes expired ones. **`MainMenuThread`** | `0x06` | `0x44af80` | Allows navigating the main menu. **`AnmManager`** | `0x09` | `0x46e710` | This is `on_tick__ui`. It advances ANM VMs in layers 36 to 42 and rebuilds their layer lists. **`Global3f4`** | `0x0a` | `0x43e3f0` | Related to the Pause menu. **`HelpManual`** | `0x0b` | `0x401300` | Responds to keyboard input while the help menu is open. **`ThreadB4`** | `0x0f` | `0x42db70` | I think this object is the main game thread, but it doesn't have much work to do thanks to everything else. **`Global31c`** | `0x10` | `0x448e30` or
`0x447fd0` | Input related. **`Stage`** | `0x11` | `0x40a7a0` | Plays STD script, does... things! Things it does! **`Unknown40`** | `0x13` | Various | Numerous things create these objects, such as ECL `screenShake`, and they have different `on_tick`s. **`AsciiPopups`** | `0x14` | `0x449ea0` | Updates those tiny little score, PIV, power and graze popup texts written in kanji numerals. **`Player`** | `0x16` | `0x442560` | **HUGE.** Watches input, moves, initiates bombs, shoots, moves player bullets, precomputes hurtbox... **`ShotType`** | `0x18` | `0x40da60` | Character. Runs per-tick logic of a bomb if the player is using one. **`ShotType`** | `0x19` | `0x40da60` | Subseason. Same but for releases. **`EnemyManager`** | `0x1a` | `0x41af44` | For each enemy, runs ECL, takes damage from the Player, maybe kills the player, and lots, lots more. **`LaserManager`** | `0x1b` | `0x431330` | Runs game logic for each laser, similar to bullets. **`BulletManager`** | `0x1c` | `0x412c50` | Moves enemy bullets. Check graze conditions, maybe kill the player. **`ItemManager`** | `0x1d` | `0x4308f0` | Moves items, checks for PoC/autocollect/attraction/pickup, performs item pickup effects. **`Spellcard`** | `0x1e` | `0x417ee0` | Messes with anms, updates spell bonus, checks for bomb usage. **`Global2020`** | `0x1f` | `0x418ab0` | Scans an array of anm ids at `this+0x1c` and replaces them with `0` if the ANM VMs cannot be found. found. **`Gui`** | `0x20` | `0x429af0` | Extremely involved. **`AnmManager`** | `0x21` | `0x46e710` | This is `on_tick__ui`. It advances ANM VMs in layers 0 to 41 and rebuilds their layer lists. **`Global31c`** | `0x22` | `0x448e40` | This code has no side-effects. Strange. **`Global24`** | `0x23` | `0x4196c0` | Somewhat involved. I think this object might represent the Ending? TH17 is sure to have some differences. (for instance, TH17 has no subseason ShotType, but it has a TokenManager, so some ids are surely shifted).