Skip to content

docs(screenshots): commit the commercial frames that render well - #192

Merged
doublegate merged 4 commits into
mainfrom
docs/commercial-screenshots
Jul 29, 2026
Merged

docs(screenshots): commit the commercial frames that render well#192
doublegate merged 4 commits into
mainfrom
docs/commercial-screenshots

Conversation

@doublegate

Copy link
Copy Markdown
Owner

Captures the commercial titles that display correctly, names them by title, and rewrites screenshots/README.md around the full set. 14 frames committed; every one was rendered to PNG and looked at.

Rendering correctly (11)

Title What it shows
Super Mario 64 The title screen — Mario's head, textured cap with the M logo
Pokémon Snap A full 3D landscape: sky, hills, river, foliage
Pokémon Stadium The NINTENDO 64 wordmark with the coloured 3D "N" cube
Mario Kart 64 Attract mode — checkered flag over the track
Castlevania: Legacy of Darkness The "Controller Pak not inserted" dialog, fully legible
Bomberman Hero A textured tower on a landscape with a rainbow
Bomberman 64 The intro grid floor with the character sprite
Super Smash Bros. A textured 3D room with correct perspective
Mario Golf Mario on the green with his club
Resident Evil 2 R.P.D. building + legible content-warning overlay
WCW/nWo Revenge The THQ INC. logo

Castlevania and Resident Evil 2 are worth singling out — both are text/UI paths rather than 3D geometry, showing the texture and blend pipeline producing readable glyphs over a background.

Kept as known-imperfect (3), clearly labelled

Committed as evidence of what currently happens, not as goldens: Banjo-Kazooie (colour cast), Ocarina of Time (visible texture-clamp box around the moon), Paper Mario (the first-ever commercial frame, kept for the record).

The selection rule earned its keep

The census justified inspection-over-counting on its own data:

Title RDP commands lit pixels
Rayman 2 0 123,540
Namco Museum 64 0 137,681

A lit-pixel rule would have committed two frames of pure uninitialised RDRAM as evidence of rendering. Rejected after looking: Blast Corps (garbled blocks), Turok (glitchy plane), Wave Race 64 (ambiguous), Ogre Battle 64 (partial).

Looking found two new defects

  • Mirrored text — GoldenEye's "Nintendo" logo and WCW vs. nWo's banner both render left-right flipped. Two studios, same flip, both at high command counts → the texture S-axis mirror path (R-13). And it is tile-specific, not global: WCW/nWo Revenge — same publisher — renders its THQ logo correctly oriented. That narrows the search to how a particular tile's mirror_s resolves, a distinction only a second sample could make.
  • Texture-clamp box — Ocarina of Time's moon carries a visible rectangular border. A different R-13 path from the mirror one.

Neither is guessed at or patched; both are recorded in R-18 and want an Angrylion vector.

Process note

The capture produced 31 frames, seven of which arrived after I built the contact sheets — so my first selection was made on an incomplete set. Reviewing the remainder added four correct titles and one known-imperfect, and produced the tile-specific mirror refinement. Recorded because "I judged on what had finished" is exactly the sampling error this ledger keeps catching.

Gates

fmt · cargo test --workspace · markdownlint — green. No ROMs committed; only rendered output, which the commercial-roms policy permits.

doublegate and others added 2 commits July 29, 2026 13:20
Seven titles rendering correctly: Super Mario 64 (title screen), Pokemon Snap
(3D landscape), Pokemon Stadium (NINTENDO 64 logo), Mario Kart 64 (attract
mode), Castlevania: Legacy of Darkness (a legible Controller Pak dialog),
Bomberman Hero and Bomberman 64. Two kept as known-imperfect and labelled as
such: Banjo-Kazooie's colour cast, and Paper Mario as the first frame ever
rendered from a commercial cartridge.

Every file was rendered to PNG and LOOKED AT before being committed, and the
census justified that rule on its own data: Rayman 2 and Namco Museum 64 report
ZERO RDP commands with 123,540 and 137,681 lit pixels. A lit-pixel-only rule
would have committed two frames of pure uninitialised RDRAM as evidence of
rendering.

Frames that scored well but looked wrong were rejected, and the rejections are
recorded rather than discarded -- they localise real defects. The notable one
is new: GoldenEye 007's "Nintendo" logo and WCW vs. nWo's banner both render
LEFT-RIGHT MIRRORED. Two independent titles, different studios, same flip, both
at high command counts, so it is the texture S-axis mirror path (R-13) and not
either game. No counter would have surfaced it; only looking did.

Castlevania is worth singling out: it is a text/UI dialog rather than 3D
geometry, so it exercises a different path and shows the texture and blend
pipeline producing readable glyphs.

screenshots/README.md documents the selection rule, the known-imperfect frames,
the defects visible in rejected ones, and the 625x237 geometry with its
provenance.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
…nding

The capture pass produced 31 frames, seven of which landed after I had built
the contact sheets and made the first selection -- so that selection was made
on an incomplete set. Reviewing the remainder adds four titles that render
correctly and one known-imperfect.

Rendering correctly: Super Smash Bros. (a textured 3D room with correct
perspective), Mario Golf (Mario on the green with his club), Resident Evil 2
(the R.P.D. building with a legible content-warning overlay composited over a
pre-rendered background), and WCW/nWo Revenge (the THQ INC. logo).

Known-imperfect: Ocarina of Time renders a recognisable night sky over Hyrule
Field, but the moon carries a visible rectangular texture-clamp box -- an open
clamp/border defect, a different R-13 path from the mirror one.

The mirrored-text finding is refined rather than restated. WCW/nWo Revenge is
the SAME PUBLISHER as the mirrored WCW vs. nWo World Tour, and its THQ logo is
correctly oriented. So the flip is tile-specific -- how a particular tile's
mirror_s resolves -- not a global S-axis inversion. That narrows the search
considerably and is the kind of distinction only a second sample could make.

Fourteen frames committed in total. Every one was rendered and looked at.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@coderabbitai

coderabbitai Bot commented Jul 29, 2026

Copy link
Copy Markdown

Review Change Stack

Warning

Review limit reached

@doublegate, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 13 minutes

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: ceec11ac-d63d-492a-9a00-ab3c17019e94

📥 Commits

Reviewing files that changed from the base of the PR and between 5111efb and ea4b608.

📒 Files selected for processing (1)
  • screenshots/README.md
📝 Walkthrough

Walkthrough

The PR revises the R-18 accuracy-ledger evidence and restructures screenshot documentation around capture scope, visual validation, known imperfections, rejected-frame defects, and scanout geometry.

Changes

Accuracy evidence documentation

Layer / File(s) Summary
R-18 findings and evidence
docs/accuracy-ledger.md
The R-18 entry records the hle_boot stack-pointer finding, corrected measurement paths, commercial-title rendering evidence, TLUT and Load Block observations, and remaining per-title coverage gaps.
Screenshot evidence policy
screenshots/README.md
The README adds capture scope and reproduction instructions, replaces pixel-count validation with visual review, consolidates rendered and deliberately imperfect frames into tables, lists rejected-frame defects, and documents scanout geometry and provenance.

Estimated code review effort: 2 (Simple) | ~10 minutes

Possibly related PRs

🚥 Pre-merge checks | ✅ 9 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Changelog Entry For User-Visible Changes ⚠️ Warning FAIL — the branch diff adds screenshots/docs but not CHANGELOG.md, so the [Unreleased] requirement isn’t met. Add a short [Unreleased] bullet for the new screenshots/README and accuracy-ledger updates, then re-run the check.
✅ Passed checks (9 passed)
Check name Status Explanation
Title check ✅ Passed The title matches the main changeset and follows the required Conventional Commits pattern with a valid docs scope.
Description check ✅ Passed The description is clearly related to the screenshot and README rewrite, so it satisfies the lenient relevance check.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Oracle Number Is Stated ✅ Passed PASS — only docs changed, so the oracle-number rule is exempt; no emulation behaviour or n64-systemtest assertions were altered.
Docs-As-Spec Sync ✅ Passed No files changed under crates/rustyn64-{cpu,rsp,rdp,audio,cart,core}; only docs and screenshots were touched, so no chip-crate behaviour change needed a matching subsystem doc.
Measured, Never Tuned ✅ Passed PASS — the new VI scaling constants are sourced to N64brew/R-5, and the boot/timing values in R-18 are recorded with measurement notes; no uncited tuned constant appears.
Unsafe Stays Out Of The Chip Crates ✅ Passed Diff only touches docs; no Rust files changed, no unsafe syntax found, and core/chip crate roots still carry #![forbid(unsafe_code)].

Comment @coderabbitai help to get the list of available commands.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@docs/accuracy-ledger.md`:
- Line 413: Reconcile the R-18 evidence with the authoritative current counts in
docs/STATUS.md: update the correctly-rendering and known-imperfect title totals
to match screenshots/README.md, and distinguish registered RDP vectors plus VI
vectors from any additional fuzz test when reporting probe totals. Preserve
earlier measurements only as explicitly dated historical figures, and update the
surrounding R-18 wording without changing its append-only evidence history.

In `@screenshots/README.md`:
- Around line 36-37: Update the Markdown tables in screenshots/README.md around
the visible header separator and the second table to use padded MD060
separators, adding spaces inside each pipe-delimited cell such as | --- | --- |
--- | while preserving the existing columns and content.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 456ba772-e96a-4d43-b0b0-1e3f52b3e780

📥 Commits

Reviewing files that changed from the base of the PR and between d7312da and 2f6dc9d.

⛔ Files ignored due to path filters (11)
  • screenshots/bomberman-64-intro.png is excluded by !**/*.png
  • screenshots/bomberman-hero-3d-scene.png is excluded by !**/*.png
  • screenshots/castlevania-legacy-of-darkness-menu.png is excluded by !**/*.png
  • screenshots/mario-golf-course.png is excluded by !**/*.png
  • screenshots/mario-kart-64-attract-mode.png is excluded by !**/*.png
  • screenshots/ocarina-of-time-night-sky.png is excluded by !**/*.png
  • screenshots/pokemon-snap-3d-landscape.png is excluded by !**/*.png
  • screenshots/pokemon-stadium-n64-logo.png is excluded by !**/*.png
  • screenshots/resident-evil-2-intro.png is excluded by !**/*.png
  • screenshots/super-smash-bros-3d-stage.png is excluded by !**/*.png
  • screenshots/wcw-nwo-revenge-thq-logo.png is excluded by !**/*.png
📒 Files selected for processing (2)
  • docs/accuracy-ledger.md
  • screenshots/README.md

Comment thread docs/accuracy-ledger.md Outdated
Comment thread screenshots/README.md Outdated
The ledger append said "seven titles render correctly and two known-imperfect"
while screenshots/README.md lists eleven and three. The ledger sentence was
written before the capture pass finished -- seven of its 31 frames landed after
the contact sheets were built -- and was not revised when the extra titles were
committed in the same PR.

That is drift I introduced myself, in the same session, in the document whose
whole purpose is to prevent it. Corrected to 11 + 3 = 14, with the README named
as authoritative, and the miscount left recorded rather than quietly fixed:
judging on what had finished rather than on what the run produced is the same
sampling error this row keeps catching.

Also clarifies that microcode_families.rs and game_microcode.rs are different
tests -- the first censuses the corpus for what reaches the screen, the second
witnesses a retail title's microcode executing on the LLE RSP and reaching the
RDP -- and notes that the Paper Mario frame predates this change. Renames the
"Geometry" heading to "Output resolution and VI scaling".

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@doublegate

Copy link
Copy Markdown
Owner Author

Adjudication — Antigravity review

No blocking issues. All three adopted, one with a correction to its premise.

1. microcode_families vs game_microcode.rs — adopted as a clarification

Worth checking, and the answer is that both exist and both are correct — they are different tests, not a stale reference:

crates/rustyn64-test-harness/tests/game_microcode.rs      T-71-003 witness
crates/rustyn64-test-harness/tests/microcode_families.rs  T-71-003 census

game_microcode.rs witnesses a retail title's own microcode executing on the LLE RSP and its output reaching the RDP — the ADR 0002 payoff as a falsifiable claim. microcode_families.rs censuses the whole corpus for what actually reaches the screen, and is what regenerates these frames. The README now says so explicitly, since the distinction was genuinely unclear from the command alone.

2. Paper Mario image not in this diff — adopted

Correct: it was committed when it was the only commercial frame that existed. The README now notes it predates this change and is listed for completeness of the set, not because this PR produced it.

3. Rename ## Geometry — adopted

Now ## Output resolution and VI scaling, which is what the section is actually about.


Separately, CodeRabbit caught a real count drift in the same review round: the ledger said "seven … and two" where the README lists eleven and three, because the ledger sentence was written before seven of the capture's 31 frames had landed. Corrected to 14 total, with the miscount recorded rather than silently fixed. Gates re-run: fmt, cargo test --workspace, markdownlint — green.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

♻️ Duplicate comments (1)
screenshots/README.md (1)

40-41: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Use padded Markdown table separators.

Lines 41 and 64 use |---|---|---|, but this repository configures MD060 with style: "padded". Change both to | --- | --- | --- |, then rerun the pinned markdownlint hook on this PR branch. This is the same unresolved finding from the previous review.

As per path instructions, every Markdown change must satisfy the repository’s padded-table configuration and be checked with pre-commit run markdownlint --all-files.

Also applies to: 63-64

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@screenshots/README.md` around lines 40 - 41, Update the Markdown table
separator rows near the table headers in README.md to use padded spacing (`| ---
| --- | --- |`) consistently in both locations, then run the pinned markdownlint
hook with `pre-commit run markdownlint --all-files`.

Sources: Path instructions, Learnings

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Duplicate comments:
In `@screenshots/README.md`:
- Around line 40-41: Update the Markdown table separator rows near the table
headers in README.md to use padded spacing (`| --- | --- | --- |`) consistently
in both locations, then run the pinned markdownlint hook with `pre-commit run
markdownlint --all-files`.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 533cda94-4a7d-4bea-a6e4-bca7c603b0aa

📥 Commits

Reviewing files that changed from the base of the PR and between 2f6dc9d and 5111efb.

📒 Files selected for processing (2)
  • docs/accuracy-ledger.md
  • screenshots/README.md

.markdownlint.json sets MD060 to style "padded" and every other document uses
| --- | --- | --- |; this file used the unpadded form. The pinned markdownlint
(v0.49.1) passes it either way because that version does not implement MD060,
so the rule is configured but invisible to the gate -- the inverse of the
version hazard CLAUDE.md already warns about, and a reason to match the
declared style rather than trust the linter's silence.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@github-actions

Copy link
Copy Markdown

Antigravity review (Gemini via Ultra)

This pull request commits 11 rendered PNG screenshots from commercial N64 titles into screenshots/, expands screenshots/README.md with an updated inventory and defect catalog, and appends visual inspection findings to ledger entry R-18 in docs/accuracy-ledger.md.

Blocking issues

None found.

Suggestions

  • docs/accuracy-ledger.md: The R-18 table row continues to accumulate extensive historical investigation logs inside a single Markdown table cell. This single cell is now thousands of words long, making the source file diffs diffcult to read and degrading Markdown rendering. Consider extracting detailed diagnostic post-mortems into standalone documents in docs/ while keeping the ledger row restricted to concise status summaries.
  • screenshots/README.md: The reproduction instructions cite microcode_families.rs without its path; specify tests/microcode_families.rs for clear file discovery.

Nitpicks

  • docs/accuracy-ledger.md: Minor title naming discrepancy between R-18 notes ("WCW vs. nWo") and screenshots/README.md ("WCW/nWo Revenge"). Standardize cartridge names across docs.

Automated first-pass review by agy on a self-hosted runner -- not a human review.

@doublegate
doublegate merged commit e6154ac into main Jul 29, 2026
11 checks passed
@doublegate
doublegate deleted the docs/commercial-screenshots branch July 29, 2026 17:44
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant