Close out the collision conversion in TODO.md
§6 item 39 is done: both listings and both tutorials are on SOLID, COLLISION 2 and RCOLLISION. Record the two traps the conversion turned up that no error reports -- BUMP's mask is by sprite number, so the artwork game's balls are bits 16, 32 and 64; and a bare SOLID after the fill loop retires the rectangles it was meant to precede. §6 item 38 and §9 item 9 carried statements the work since made false. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01EwxGB6TdoVvZ11KQQME9cL
This commit is contained in:
51
TODO.md
51
TODO.md
@@ -2244,35 +2244,35 @@ each is here so the reasoning does not have to be reconstructed.
|
|||||||
naive all-pairs sweep at 0.7% of a frame at 64 actors and 11% at 256, so the crossover is
|
naive all-pairs sweep at 0.7% of a frame at 64 actors and 11% at 256, so the crossover is
|
||||||
well above anything a Commodore-shaped sprite budget will reach.
|
well above anything a Commodore-shaped sprite budget will reach.
|
||||||
|
|
||||||
Also still open at the seam: the contact is computed and discarded. §6 item 40 and the
|
What remains is only the pairing seam above. The contact itself is consumed:
|
||||||
BASIC surface built on it are what consume it.
|
`akbasic_collision_service()` pulls it per sprite and the `RCOLLISION` fields are what both
|
||||||
|
breakout games now bounce on.
|
||||||
|
|
||||||
39. **Convert the breakout listings and chapters 17 and 18 to the collision verbs.** This is the
|
39. ~~**Convert the breakout listings and chapters 17 and 18 to the collision verbs.**~~
|
||||||
payoff, and it is deliberately not part of the integration commit.
|
**Done.** Both games and both tutorials now register their bricks with `SOLID`, arm
|
||||||
|
`COLLISION 2` and read the contact back with `RCOLLISION`.
|
||||||
|
|
||||||
Neither game calls `COLLISION` or `BUMP` even once today. Of roughly 230 lines of collision
|
What went: `BALLBRICKS` (29 lines) and `TESTCELL` (28) in the artwork game, and `HITTEST`
|
||||||
code across the two, about 19 are sprite-against-sprite; the rest is a sprite against
|
(14) plus its pixel-to-cell arithmetic in the characters game — replaced by a handler that
|
||||||
numbers in a BASIC array or against bare constants, because bricks are text characters in
|
asks which box was hit and which axis to reverse. The hand-written minimum-translation-axis
|
||||||
one game and stamped pixels inside one big sprite in the other. Static collision geometry is
|
is `RCOLLISION(n, 7)`. `BUILDLIVE`/`BUILDROW`/`STAMPROW` went with the full-field redraw
|
||||||
what changes that — a brick becomes a collidable box without spending a sprite slot.
|
they existed to make cheap, and the artwork game gave six orphaned declarations back with
|
||||||
|
them: the label table went from 61 of 64 to 57.
|
||||||
|
|
||||||
What goes, concretely:
|
Two things are worth keeping from doing it, because neither is obvious and both cost an
|
||||||
|
evening:
|
||||||
|
|
||||||
- `examples/breakout/sprites/breakout.bas` — `BALLBRICKS` (29 lines) and `TESTCELL` (28)
|
- **`BUMP`'s mask is by sprite number, not by anything the handler is about.** The artwork
|
||||||
become a handler that reads which box was hit and which axis to reverse. The
|
game's balls are sprites 5, 6 and 7, so their bits are 16, 32 and 64. A handler that
|
||||||
hand-written minimum-translation-axis at `:661-666` is a contact field. `BUILDLIVE` and
|
tests 1, 2 and 4 runs, matches nothing and returns, with no error and nothing to see.
|
||||||
`BUILDROW` stop maintaining a parallel `BRK#()` grid.
|
- **A bare `SOLID` must run *before* the level is laid out, not after.** Put after the fill
|
||||||
- `examples/breakout/characters/breakout.bas` — `HITTEST` (14 lines) and the pixel-to-cell
|
loop it retires all sixty rectangles that were just registered, and the only symptom is a
|
||||||
arithmetic go the same way, and `PADHIT`'s five-line overlap test becomes `BUMP`.
|
ball that passes through the wall.
|
||||||
|
|
||||||
**The documentation cost is the reason this is separate.** Chapter 17 Step 10 and chapter 18
|
Chapter 18 also lost a rule it depended on and no longer stated: a `FOR` with equal bounds
|
||||||
Steps 9 and 13 are built around that arithmetic, both chapters' examples are executed by
|
does not run its body (§6 item 19), which is why every list in the chapter has its one-item
|
||||||
`docs_examples`, and both were rewritten and validated immediately before this work started.
|
case written out beside the loop. It is now stated in Step 7 where it is first used, rather
|
||||||
Folding a listing rewrite into a library integration would make neither reviewable.
|
than cross-referenced to a step that the rewrite deleted.
|
||||||
|
|
||||||
Sequence it after §9 item 9 if that is ever fixed, since a game that no longer spends two
|
|
||||||
sprites on the screen has two more to spend on collidable things, and the two rewrites would
|
|
||||||
otherwise touch the same lines twice.
|
|
||||||
|
|
||||||
40. **`akbasic_runtime_call_function()`: call a BASIC function from C with bound values.**
|
40. **`akbasic_runtime_call_function()`: call a BASIC function from C with bound values.**
|
||||||
|
|
||||||
@@ -3151,7 +3151,8 @@ reduced against `build/basic`, the stdio build, unless it says otherwise.
|
|||||||
|
|
||||||
9. ~~**A program that wants a picture on the screen has to spend a sprite slot on it, and
|
9. ~~**A program that wants a picture on the screen has to spend a sprite slot on it, and
|
||||||
`examples/breakout/sprites/breakout.bas` spends two of its eight on the screen itself.**~~
|
`examples/breakout/sprites/breakout.bas` spends two of its eight on the screen itself.**~~
|
||||||
**Done for the interpreter; the listing has not been converted yet -- that is §6 item 39.**
|
**Done.** The listing has been converted with it: no `SSHAPE` of the screen, no `PACE`
|
||||||
|
routine hunting for a batch boundary, and both slots free.
|
||||||
|
|
||||||
The drawing verbs now render into a layer the frame composites under the text and the
|
The drawing verbs now render into a layer the frame composites under the text and the
|
||||||
sprites (`akbasic_graphics_akgl_begin`/`_end`/`_render`, `src/graphics_akgl.c`), so a
|
sprites (`akbasic_graphics_akgl_begin`/`_end`/`_render`, `src/graphics_akgl.c`), so a
|
||||||
|
|||||||
Reference in New Issue
Block a user