* lasers: new SDF-based renderer (WIP)
* lasers: tweak sdf_apply shader
* lasers: fix incorrect rendering at 'unlucky' resolutions
* lasers: optimize rendering of multiple lasers
Try to coalesce render passes as much as possible
* lasers: fix warning
* lasers: move rendering into a new file
* lasers: correct "time" coordinate mapping for texturing
* lasers: wrote a novel about laser rendering [skip ci]
* lasers: fux tpyo
* remove references to old laser shape shaders
* lasers: fix some rendering edge cases
`process_boss()` will no longer automatically start the next attack
after the current one ends. Instead, it will set the current attack to
NULL and signal the next attack's `initiated` event. The attack starts
when the event handler calls the `BEGIN_BOSS_ATTACK()` macro. This
allows the attack task to arbitrarily delay the attack phase activation.
Note that `BEGIN_BOSS_ATTACK()` still waits for the `started` event,
which is signaled after `BEGIN_BOSS_ATTACK()` plus an inherent attack
delay (ATTACK_START_DELAY etc.) For regular attacks that don't wish to
delay `BEGIN_BOSS_ATTACK()`, this change is effectively invisible.
* stage1: attempt to make Easy easier; misc tweaks
* stage1: buff health of boss nons
* stage1: use new enemy spawners
* stage1: Normal balance; some Easy tweaks
* stage1: tweak Hard version of Perfect Freeze
* stage1: simplify a common_charge