Fix Yellow Oak speech showing Nidorino instead of Pikachu (#915)

Yellow's field.oakSpeech manifest carried only shrink frames, so
OakSpeech.lua's `oakGfx.demoSpecies or "NIDORINO"` fallback fired and
the opening speech showed Nidorino's sprite and cry instead of the
player's Pikachu.

- Stamp demoSpecies "PIKACHU" in the Yellow import manifest (source of
  truth for fresh ROM imports and developer builds).
- Stamp it in make_yellow_manifest.py so regeneration keeps the value.
- Repair stale Yellow caches in Data:applyVersionedFieldData() with a
  fill-if-absent block, matching the #617 oldManBattle RATTATA pattern.
- Add parity test (manifest carries PIKACHU; stale cache filled;
  pre-stamped value left alone).

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
This commit is contained in:
Shane McGovern
2026-08-07 10:51:50 +01:00
parent 112120e8fe
commit 66e7d9432e
4 changed files with 67 additions and 0 deletions
+9
View File
@@ -84,6 +84,15 @@ function Data:applyVersionedFieldData()
-- Yellow caches carry the wrong demo species too. The fixed import
-- manifest below stamps RATTATA for fresh imports.
self.field.oldManBattle = { species = "RATTATA", level = 5 }
-- The Oak-speech show-off mon is the player's Pikachu in Yellow
-- (engine/battle/core.asm BATTLE_TYPE_PIKACHU / the ProfOak demo)
-- but caches imported before the manifest carried demoSpecies fell
-- back to Red's NIDORINO (#915). The fixed import manifest below
-- stamps PIKACHU for fresh imports; fill it here for stale caches.
local oakSpeech = self.field.oakSpeech
if type(oakSpeech) == "table" and not oakSpeech.demoSpecies then
oakSpeech.demoSpecies = "PIKACHU"
end
end
end