Skip to content

v1.5.0 - Prosecutor's Path

Choose a tag to compare

@github-actions github-actions released this 02 Sep 08:31
· 62 commits to 5cb77b32e4df552b502c198a6378f6f85ae71f0c since this release

Superseded. This is an older release; install the latest release instead.

New in v1.5.0: Capcom's titles everywhere, and a stricter coverage count

The last fan names are gone from the screens you see most. The title screen now shows
Capcom's Ace Attorney Investigations 2: Prosecutor's Gambit logo; the episode-select
buttons, the splash card at the start of each episode and the save screen all carry the
official episode titles. The logo sprite and the two fonts (Modé Mina B, UD Kakugo M) are
read from your own Collection at build time and rendered into the DS graphics; nothing
Capcom-owned ships with the tool. The splash-card face the fan team hand-drew turned out
to be Modé Mina, so those cards read as the same design with the official words.

Verified in melonDS on a cleared save: title screen, save panel ("Turnabout for the
Ages"), episode select and splash card ("Turnabout Trigger"), all at 60/60.

The shouts, in Capcom's English voices

The fan patch recorded its own English "Objection!", "Hold it!", "Take that!" and the
rest over the Japanese samples. The Collection carries Capcom's 2024 English recordings
under the same sound-effect numbers, and thirteen of the twenty samples the fan team
replaced have one. Those thirteen now play Capcom's takes: read from your Collection at
build time, downmixed and resampled to the retail format of each slot (IMA ADPCM at
22 kHz; 16-bit PCM at 32 kHz for the long one), and written back into the sound archive
with every header rebuilt from the sample data. The DS plays each shout to the end of its
sample, so nothing is time-compressed or cut; the one take that runs half a second longer
than the fan's goes in whole. The seven samples the Collection does not localise keep the
fan's recordings. The rebuilt archive boots and plays in melonDS, and every new sample was
decoded back out of it to confirm length, rate and level.

Logic keyword cards in Capcom's words

The cards on the Logic board were the last large fan-lettered surface. They are images,
not text, and the fan team drew their own English into 206 of them. 194 of those images
(97 keywords, card plus banner) now carry the official short names, rendered in UD Kakugo M
from your Collection over a cleaned card face; the six keywords the Collection has no name
for, and the unused dummy slots, keep the fan's lettering. Verified in melonDS on the
Episode 1 Logic board ("Assassination attempt", "Six-shot revolver").

Character names: line by line

v1.4.4 left ten whole conversations in the fan's names because one line in each could not
take the longer official name. The rename now works line by line: the official name where
it fits, Capcom's surname where only that fits, the fan line only if even that is too wide.
Hyphenated forms ("Courtney-pie") rename too; they were being skipped. Result: 94 rows
renamed (was 84), and five lines in the whole game still carry a fan name, each because
the fan drew that line already at the edge of the box:

  • DS[29] str 14: "Swift will be cleared of suspicion!"
  • DS[76] str 7: "You didn't know either, Uncle Ray?"
  • DS[94] str 2: "escaped prisoner, Jay Elbird"
  • DS[99] str 4: "Mr. Elbird would have seen it"
  • DS[117] str 28: "(The true killer is Warden Roland.)"

108 descriptions and Logic cards, condensed to fit

Official English existed for 108 evidence descriptions, profiles and Logic cards but did not
fit the DS box, so every release until now showed the fan's text there. They now carry
Capcom's wording, condensed: deletions first, names and facts kept, hedges kept. The
Japanese line was the guide for what had to survive and the fan line for what fits. The
edits are word-index operations with result hashes (no Capcom text in the repo), and all
108 can be listed Japanese / Capcom / condensed / fan with tools/desc_overflow.py. Menus &
UI coverage rises from 81.1% to 90.2%; total from 93.7% to 94.3%.

One evidence description, one hedge

The Episode 2 autopsy description used to say "Death was instant." Capcom wrote "would
have been instant" and the Japanese hedges too; in a game where autopsies get overturned
that is not a decoration. It now reads "Death was likely instant," paid for by dropping
"to the head" after "scalp", which says the same thing. Still exactly four lines.

Coverage: 93.7%, not 96.5%

tools/coverage.py counted a string as official whenever its bytes differed from the fan
ROM's. Since v1.4.0 the rename pass has been swapping Capcom's character names into
fan-written rows, and every one of those rows was being counted as official. It now counts
a row as official only if it differs from the fan row after names and titles are applied.
By that rule v1.4.4 was 93.8%, and 1.5.0 is 94.3% (93.7% before the 108 condensed rows). The ROM did not get worse; the
count got stricter. Per-episode figures are in the README.

Also

  • tools/nitro.py: the palette reader started four bytes late (no visible effect on the
    nameplates, wrong colours on every 8bpp screen). Fixed; a rebuild of 1.4.4 hashed
    identically.
  • New tools, all build-time, none shipping game data: ncer.py, title_art.py,
    title_logo.py, extract_logo.py, title_text.py, title_assets.py,
    logic_names.py, logic_cards.py, voices.py.
  • The build now has five steps; the Collection is needed for the title assets as well as
    the script, and --skip-extract checks for them.
  • The splash-card episode titles are now anti-aliased in the same grey steps as the fan's
    "Episode N" line above them, and drawn at the same weight, so the two rows read as one
    piece of lettering (edge pixels used to be thresholded, which left the second line
    harder-edged and lighter than the first).
  • The title screen now shows the build's version ("v1.5.0") in small white digits in its
    top-right corner, so a screenshot or a bug report says which build it came from. Painted
    into the composed picture by tools/title_version.py; no artwork is covered.
sha256  689c599401d3f5221fc71a778d53217649cc0af941db28514f503f8576c46263
python tools/build.py --verify