Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
29 commits
Select commit Hold shift + click to select a range
b485579
Add occlusion culling design (#108)
markwpearce Oct 17, 2026
7a8d5ea
Add occlusion culling implementation plan (#108)
markwpearce Oct 17, 2026
ec8e421
Measure oriented model/polygon depth from the object, not the origin …
markwpearce Oct 17, 2026
c0b0a34
Use object centre for depth in every non-screen-aligned draw mode (#342)
markwpearce Oct 17, 2026
b4e81bb
Add screen-space span occlusion map (#108)
markwpearce Oct 17, 2026
ba5b809
Never hide an empty or inverted box in the span map (#108)
markwpearce Oct 17, 2026
1853822
Merge coplanar model faces into occluder panels (#108)
markwpearce Oct 17, 2026
9137bd0
Report visibility as an enum; keep GameEntity.isOnScreen() as a wrapp…
markwpearce Oct 17, 2026
e7dc8fb
Register static drawables flagged isOccluder (#108)
markwpearce Oct 17, 2026
47e564c
Fix occluder auto-registration and doc comment placement (#108)
markwpearce Oct 17, 2026
8253b2a
Project occluders to canvas polygons and draw them exactly (#108)
markwpearce Oct 17, 2026
748dbb3
Draw Image occluders without the fast path; document occluder opacity…
markwpearce Oct 17, 2026
3623cac
Cull objects hidden behind static occluders (#108)
markwpearce Oct 17, 2026
c943314
Add occlusion debug overlay (#108)
markwpearce Oct 17, 2026
3c65df3
Add occlusion benchmarks to rendererTest (#108)
markwpearce Oct 17, 2026
c91bcff
Time-box span benchmark checks; drop unused startScene param (#108)
markwpearce Oct 17, 2026
22bea23
Add an occluding chapel to terrain (#108)
markwpearce Oct 17, 2026
7b404b9
Document occlusion culling and visibility (#108)
markwpearce Oct 17, 2026
2ae186f
Fix occlusion review findings: popping and stale reveals (#108)
markwpearce Oct 17, 2026
a5c1fde
Fix chapel winding and draw it without back faces (#108)
markwpearce Oct 17, 2026
6a75d28
Use plain solid in the occluder docs example (#108)
markwpearce Oct 17, 2026
36ca153
Let occluders use fast-path drawing, shrinking their claim (#108)
markwpearce Oct 17, 2026
8782f28
Add Renderer.occluderDrawPolicy (#108)
markwpearce Oct 17, 2026
5aacdd9
Add a scripted occlusion profile to the terrain example (#108)
markwpearce Oct 17, 2026
caa5741
Fix inverted back-face test for 3D models (#108)
markwpearce Oct 17, 2026
85d903c
Cut the occlusion pass's per-frame cost (#108)
markwpearce Oct 17, 2026
2bab7f5
Soften occluder doc claims about over-claiming (#108)
markwpearce Oct 17, 2026
d2b118a
Fix occlusion review findings: runtime isOccluder, band clamp, types …
markwpearce Oct 19, 2026
50999cd
Rebuild model occluder panels after invalidateGeometry(); cheaper pol…
markwpearce Oct 19, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .claude/skills/rokubot-examples/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -202,9 +202,9 @@ channel back to Home).
| `canvas` | Demonstrates panning/scaling the whole game **canvas** (offset/scale), not an on-screen entity. On-screen text/rectangle are drawn on the separate UI layer, so the pan/scale effect isn't visible in a screenshot even though it's working — don't mistake that for a bug. | arrows = pan canvas, `info`/`instantreplay` = scale up/down, `play` = re-center |
| `quickstart` | Minimal scaffold-template app: one white square, moves freely. Good smoke-test for "is the toolchain working." | arrows (any direction, free movement via `input.x`/`input.y`) |
| `platformer` | "Jungle Adventure" side-scroller: 7 levels, the last a one-screen boss fight (a pop-up Venus fly trap that fires aimed fireballs and dies after 3 head stomps). `--param level=N` (1-based) skips the title screen straight to level N, e.g. `level=7` for the boss. | `left`/`right` run, `select` (OK) jumps, `back` pauses, `info` (options) toggles debug overlay + collider outlines |
| `rendererTest` | Categorized, menu-driven suite of `BGE.Renderer` demos - deliberately **not** built on `BGE.Game`/`GameScene` (see `CLAUDE.md`'s "Manually exercising the Renderer" note for the architecture and how to add a new demo). Grouped by category on an on-screen menu. Every demo shows an automatic timing line (fps / frame ms / update ms / draw ms / draw calls), so this is the place to *measure* a draw-cost question rather than reason about it - the `quad-fill-benchmark` demo times two fill approaches head to head in one run. | `up`/`down` = select in menu, `select` (OK) = run selected demo / demo-specific action, `back` = return to menu. Can also skip the menu entirely via a launch param: `rokubot launch dev --param demo=<id>` (see `DemoList.bs` for valid ids) |
| `rendererTest` | Categorized, menu-driven suite of `BGE.Renderer` demos - deliberately **not** built on `BGE.Game`/`GameScene` (see `CLAUDE.md`'s "Manually exercising the Renderer" note for the architecture and how to add a new demo). Grouped by category on an on-screen menu. Every demo shows an automatic timing line (fps / frame ms / update ms / draw ms / draw calls), so this is the place to *measure* a draw-cost question rather than reason about it - the `quad-fill-benchmark` demo times two fill approaches head to head in one run. The Benchmarks category also has `occlusion-span-map-benchmark` (the occlusion span map's build/query cost) and `occlusion-scene-benchmark` (a scene of static occluders hiding objects, occlusion on vs off). | `up`/`down` = select in menu, `select` (OK) = run selected demo / demo-specific action, `back` = return to menu. Can also skip the menu entirely via a launch param: `rokubot launch dev --param demo=<id>` (see `DemoList.bs` for valid ids) |
| `hybrid` | Fixed (was previously broken — stale `getImage` call). Now: SceneGraph side plays a sample video; roScreen/BGE side is a ball-to-target minigame that switches back to SceneGraph on collision. | Ball game: arrows move the ball, reaching the green target switches to video. `back` (either side) toggles/quits |
| `terrain` | Demonstrates `BGE.DrawablePlane`/`SceneObjectPlane` (a Mode-7-style textured ground plane) — no vehicle/kart entity, just a camera driving around above the plane. Camera starts centered directly above the plane's origin. | `left`/`right` steer (yaw about world y), `up`/`down` drive forward/back along the current heading, `select` (OK) toggles the ground texture between the Mario Kart track image and a plain checkerboard, `options` (`*`) toggles the debug entity-details overlay, `back` quits |
| `terrain` | Demonstrates `BGE.DrawablePlane`/`SceneObjectPlane` (a Mode-7-style textured ground plane) — no vehicle/kart entity, just a camera driving around above the plane. Camera starts centered directly above the plane's origin. | `left`/`right` steer (yaw about world y), `up`/`down` drive forward/back along the current heading, `select` (OK) toggles the ground texture between the Mario Kart track image and a plain checkerboard, `options` (`*`) toggles the debug entity-details overlay, `back` quits. In the start scene (`WorldScene`) OK instead toggles occlusion culling, and holding Back 2s also shows the occlusion overlay (occluders and hidden objects); a static chapel stands in the scene and hides the trees behind it |
| `rpg` | "Broadsword" (manifest title) - a *Link to the Past*-style top-down action RPG with a story: opens on a title screen (Continue/New Game), then a town with NPCs (Bram, Hilde's shop, a gate knight), a seven-room keep (goblins, a goblin king, the witch) and a sewer (rats), sword combat, hearts + coins HUD top-left. Deep links skip the title and disable saving: `--param scene=TownScene|CastleScene|SewerScene|GuardroomScene|StoreroomScene|BarracksScene|AntechamberScene|KingsHallScene|ThroneRoomScene|GoblinShowcaseScene` (the showcase now includes the witch) and/or `--param stage=0-8` (story checkpoint; stage 3 = knight wants a sword, 5 = met Mara in the keep, 6 = goblin king beaten, 7 = throne room with the witch's intro playing, 8 = town, witch defeated), `scene=CreditsScene`, plus `spawn=<id>`, `flags=`, `items=`, `peaceful=`, `open=`. Real-time fighting is too fast to play via rokubot - hand that to the user. Black screenshots here have so far always been capture failures (retry; see gotchas). | arrows (or analog stick) move, `select` (OK) swings the sword / talks / confirms in panels, `play` opens the inventory, `info` (options) toggles debug overlays (colliders red, SolidWorld walls cyan), `back` quits or closes a panel (gamepad: A/B confirm/cancel, Y inventory, stick moves menu focus, B never quits; rokubot can't press gamepad buttons) |
| `loading` | Asset-loading demo: a menu of scenes that each load in `GameScene.onLoad()`. "Large local assets" loads every model in `pkg:/models/` plus three large PNGs under a loading screen with a frame-time readout, then lists faces/sizes; "Custom loading screen" builds a 24x14 tile grid a row per frame under a strip-style loading screen. The debug UI (FPS etc.) is on. "Remote assets" downloads two images, a textured d20 .obj and a sound from `baseUrl`, plus `https://picsum.photos/200` (no extension - its type comes from the response's Content-Type; roUrlTransfer follows picsum's redirect) (default GitHub `main`; or serve `examples/loading/remote-assets` locally with `python3 -m http.server 8000 --directory examples/loading/remote-assets` plus `baseUrl=http://<mac ip>:8000/` - macOS may block incoming connections, so allow it when prompted, or use `npx http-server examples/loading/remote-assets -p 8000`) and lists each file as `network` or `cache`; a relaunch should show every remote file as `cache`. "Failure" shows failed loads. A "Clear download cache" menu button resets it. `--param scene=LocalAssetsScene|CustomScreenScene|RemoteAssetsScene|FailureScene` skips the menu. | `up`/`down` + `select` in the menu, `back` returns to the menu |
| `visualnovel` | "The Mutiny": a short sci-fi visual novel (title with Continue/New Game/Credits and "Endings found", then a background, two portrait cards, a typewriter text box and choice buttons). Saves to the registry (`bge-visualnovel`), which `--deleteDevChannel` doesn't clear - to see a fresh install, break into the debugger and run `r = CreateObject("roRegistry") : r.Delete("bge-visualnovel") : r.Flush()`. `--param node=<id>` (plus `flags=`/`items=` comma lists) starts at a node with saving off, e.g. `node=confrontation items=relayTap,navLog,accessRecord`. Pressing OK repeatedly plays through on the first choice each time and reaches an ending in about 60 presses. Ctrl-C into the debugger lags a second or two, so it's no good for catching a short loading screen. | `select` (OK) finishes typing / reads on / picks the focused choice, `up`/`down` move focus, `info` (`*`) or `up` while reading opens the backlog (`up`/`down` scroll, `back` closes), `back` returns to the title (quits from the title) |
Expand Down
Loading
Loading