This commit covers
• TH02/TH03/TH04/TH05's frame_delay() and frame_delay_2() (finally!)
• TH02/TH03/TH04/TH05's game_init_main()
• TH02's graph_copy_rect_1_to_0_16()
• TH03/TH04/TH05's cfg_load_resident_ptr()
• TH05's piano_setup_and_put_initial() and piano_render()
Part of P0264, funded by [Anonymous] and Blue Bolt.
Just a trivial one for the intro part before Meira appears, but it's
going to get slightly more intricate in other stages. We also want to
keep these face IDs as `std_array`s even once we moved the face IDs from
ASM to C land, since the count() method avoids the need for redundantly
declaring `BoxCount` as a separate enum value.
It would further seem like a nice idea to carve the intended values for
`dialog_box_cur` into stone via run-time assert()s, but we would have
to disable them on `master` via `NDEBUG` anyway. Which immediately
stops them from realistically doing their job because modders – the
intended audience – certainly won't remove the `NDEBUG` macro before
they're gonna mod. And maybe those assert()s will even just be an
additional burden to them, because they *want* to change things up
beyond those numbers?
Completes P0260, funded by Yanga.
Which is *not* meant to run the entirety of a sequence, just the
generic part where nothing except text happens for a number of boxes.
That's certainly one way of doing things.
Part of P0260, funded by Yanga.
And we're finally polyfilling std::array to avoid writing these hack
structures over and over.
Unfortunately, we can't ever polyfill it *exactly* because Turbo C++
4.0J neither supports namespaces nor template classes nested inside
non-template classes to simulate namespaces. Might as well go for a
PascalCased class name in accordance with the existing coding style
then – no need to add an exception just to have a class name like
`std_array` or something.
Part of P0260, funded by Yanga.