mirror of
https://github.com/bryanthaboi/gen1recomp.git
synced 2026-08-19 20:20:19 +02:00
CLOSES #644, CLOSES #703, CLOSES #726, CLOSES #737, CLOSES #750, CLOSES #752, CLOSES #764, CLOSES #765, CLOSES #768, CLOSES #773, CLOSES #774, CLOSES #775, CLOSES #777, CLOSES #780, CLOSES #782
This commit is contained in:
@@ -0,0 +1,111 @@
|
||||
-- Manual check that Silph Co Giovanni gets the ordinary trainer theme (#782).
|
||||
-- PlayBattleMusic (audio/play_battle_music.asm) only picks
|
||||
-- MUSIC_GYM_LEADER_BATTLE when wGymLeaderNo is set, and scripts/SilphCo11F.asm
|
||||
-- never writes it -- only the eight gym scripts do. The port keyed the boss
|
||||
-- check on the trainer class alone, so this fight (OPP_GIOVANNI#2) borrowed
|
||||
-- the Viridian Gym roster's theme, victory jingle, and Pikachu happiness bump.
|
||||
-- The data half is asserted in tests/parity_battle_music_bug782.lua.
|
||||
-- POKEPORT_DRIVER=tests/drivers/battle_music_bug782_test.lua POKEPORT_IDENTITY=bug782 POKEPORT_TOUCH=0 POKEPORT_VERSION=red love .
|
||||
return function(game)
|
||||
local U = dofile("tests/drivers/util.lua")
|
||||
local Pokemon = require("src.pokemon.Pokemon")
|
||||
local Music = require("src.core.Music")
|
||||
local BattleState = require("src.battle.BattleState")
|
||||
|
||||
local function check(label, ok)
|
||||
U.log(ok and "PASS" or "FAIL", label)
|
||||
return ok
|
||||
end
|
||||
|
||||
local vol = game.save.options and game.save.options.musicVol
|
||||
if vol == 0 then
|
||||
U.log("music volume is 0 in options; raise it or nothing will be audible")
|
||||
end
|
||||
|
||||
-- record what the engine asks the music system for; the real playback
|
||||
-- still happens underneath, so the listening half is unaffected
|
||||
local played = {}
|
||||
local realPlayBattle = Music.playBattle
|
||||
Music.playBattle = function(data, kind, trainerId)
|
||||
played[#played + 1] = { call = "battle", kind = kind }
|
||||
return realPlayBattle(data, kind, trainerId)
|
||||
end
|
||||
local realPlayVictory = Music.playVictory
|
||||
Music.playVictory = function(data, kind, trainerId)
|
||||
played[#played + 1] = { call = "victory", kind = kind }
|
||||
return realPlayVictory(data, kind, trainerId)
|
||||
end
|
||||
|
||||
-- a party that can win this quickly, so the victory jingle is reachable
|
||||
game.save.party = {
|
||||
Pokemon.new(game.data, "MEWTWO", 90),
|
||||
Pokemon.new(game.data, "CHARIZARD", 80),
|
||||
}
|
||||
game.save.player.name = "RED"
|
||||
|
||||
-- Giovanni's fight is a coordinate trigger, not a talk:
|
||||
-- SilphCo11FDefaultScript (pokered scripts/SilphCo11F.asm
|
||||
-- .PlayerCoordsArray) fires on (6,13) or (7,12), walks him three tiles
|
||||
-- down from his object_event spot at (6,9)
|
||||
-- (pokered data/maps/objects/SilphCo11F.asm), shows his speech and starts
|
||||
-- the battle. The (6,13) pad sits behind the 11F card key door, which this
|
||||
-- teleported-in save has not opened (no CARD KEY, so tryCardKeyDoor never
|
||||
-- swaps the door block), so take the pad on the open side: stand on (6,12)
|
||||
-- and step east onto (7,12).
|
||||
U.teleport(game, "SILPH_CO_11F", 6, 12, "right")
|
||||
U.wait(10)
|
||||
U.hold(game, "right", 40)
|
||||
U.wait(10)
|
||||
|
||||
-- Giovanni's approach, then his pre-battle text box: mash A until the
|
||||
-- battle state is on top of the stack
|
||||
local battle
|
||||
for _ = 1, 400 do
|
||||
local top = game.stack:top()
|
||||
if getmetatable(top) == BattleState and top.kind == "trainer" then
|
||||
battle = top
|
||||
break
|
||||
end
|
||||
U.tap(game, "a")
|
||||
U.wait(3)
|
||||
end
|
||||
|
||||
check("the coordinate trigger engaged a trainer battle", battle ~= nil)
|
||||
if battle then
|
||||
check("the opponent is Giovanni (OPP_GIOVANNI#2)",
|
||||
battle.oppClass == "OPP_GIOVANNI" and battle.partyIndex == 2)
|
||||
check("musicKind is \"trainer\", not \"gym\"",
|
||||
battle.musicKind == "trainer")
|
||||
check("isGymLeader is unset (no Pikachu GYMLEADER happiness bump)",
|
||||
not battle.isGymLeader)
|
||||
local battleCall
|
||||
for _, p in ipairs(played) do
|
||||
if p.call == "battle" then battleCall = p.kind end
|
||||
end
|
||||
check("Music.playBattle was asked for the trainer theme",
|
||||
battleCall == "trainer")
|
||||
end
|
||||
|
||||
U.log("You are in the Silph Co Giovanni fight. The theme playing now")
|
||||
U.log("should be the ordinary Vs. Trainer battle music, not the gym-leader")
|
||||
U.log("theme this fight used to borrow. Win it (MEWTWO 90 vs his level")
|
||||
U.log("~40 party) and the jingle at \"defeated GIOVANNI\" should be the")
|
||||
U.log("plain trainer victory fanfare, again not the gym-leader one.")
|
||||
U.log("For the correct-by-contrast case, the Viridian Gym rematch")
|
||||
U.log("(OPP_GIOVANNI#3) still keeps the gym-leader theme.")
|
||||
|
||||
-- report the victory request when the win lands, then keep idling
|
||||
local reported = false
|
||||
while true do
|
||||
if not reported then
|
||||
for _, p in ipairs(played) do
|
||||
if p.call == "victory" then
|
||||
check("Music.playVictory was asked for the trainer jingle",
|
||||
p.kind == "trainer")
|
||||
reported = true
|
||||
end
|
||||
end
|
||||
end
|
||||
coroutine.yield()
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user