mirror of
https://github.com/bryanthaboi/gen1recomp.git
synced 2026-08-17 11:11:10 +02:00
CLOSES #1206, CLOSES #1189, CLOSES #1175, CLOSES #1129, CLOSES #1119, CLOSES #1089, CLOSES #1073, CLOSES #1069, CLOSES #1065, CLOSES #1010, CLOSES #990, CLOSES #989, CLOSES #988, CLOSES #978, CLOSES #944, CLOSES #936, CLOSES #1221, CLOSES #1220, CLOSES #1193, CLOSES #1101, CLOSES #1066, CLOSES #1056, CLOSES #1041, CLOSES #984, CLOSES #1225, CLOSES #1214, CLOSES #1011, CLOSES #1035, CLOSES #1219, CLOSES #1048, CLOSES #1047, CLOSES #964, CLOSES #949, CLOSES #1149, CLOSES #1007, CLOSES #914, CLOSES #1115, CLOSES #1146, CLOSES #999, CLOSES #1207, CLOSES #1029, CLOSES #1120, CLOSES #987, CLOSES #983
This commit is contained in:
+2
-1
@@ -128,7 +128,8 @@ end
|
||||
|
||||
function NPC:draw(camX, camY)
|
||||
local sprite, px, py, facing, phase, flip = self:pose()
|
||||
sprite:draw(px, py, camX, camY, facing, phase, flip)
|
||||
sprite:draw(px, py, camX, camY, facing, phase, flip, nil, nil,
|
||||
self.frameOverride)
|
||||
end
|
||||
|
||||
return NPC
|
||||
|
||||
@@ -1087,6 +1087,7 @@ function OverworldState:update(dt)
|
||||
-- the player lands on desk Oak.
|
||||
local scripted = self.runner:isRunning() or #self.scriptMoves > 0
|
||||
or self.engaging or self.emote or self.teleportOut
|
||||
or self.flyAnim or self.flyArrive
|
||||
if not scripted and not self.transitioning then
|
||||
self:checkTrainerSight()
|
||||
-- CheckFightingMapTrainers (home/trainers.asm) zeroes hJoyHeld and
|
||||
@@ -1095,6 +1096,7 @@ function OverworldState:update(dt)
|
||||
-- the player can never start another step after being spotted.
|
||||
scripted = self.runner:isRunning() or #self.scriptMoves > 0
|
||||
or self.engaging or self.emote or self.teleportOut
|
||||
or self.flyAnim or self.flyArrive
|
||||
end
|
||||
if not scripted and not self.transitioning then
|
||||
self:handleInput()
|
||||
@@ -1664,6 +1666,10 @@ end
|
||||
-- Goldeen/Poliwag L10; Super Rod uses the map's extracted fishing group
|
||||
-- (no group means "Not even a nibble!").
|
||||
function OverworldState:goFishing(rod)
|
||||
if GameVersion.isYellow() then
|
||||
Game.save.pikachuEmotionModifier = 2
|
||||
Game.save.pikachuMood = 0x81
|
||||
end
|
||||
local pool, always = fishingPool(Game.data, rod, self.map.id)
|
||||
local enc
|
||||
if Runtime.wantsHook("encounter.fishing") then
|
||||
@@ -2905,6 +2911,11 @@ end
|
||||
-- POKéMON" and "fighting fit".
|
||||
function OverworldState:nurseHeal(onDone, npc)
|
||||
local t = Game.data.text
|
||||
if self.map.id == "PEWTER_POKECENTER" and self.pikachuPewterSleepScene then
|
||||
Game.stack:push(TextBox.new(Game,
|
||||
t._LooksContentText or "PIKACHU looks\ncontent.", onDone))
|
||||
return
|
||||
end
|
||||
local bye = t._PokemonCenterFarewellText or romText(Game.data, "_PokemonCenterFarewellText", "We hope to see\nyou again!")
|
||||
local hello = t._PokemonCenterWelcomeText
|
||||
or Strings("Welcome to our\nPOKéMON CENTER!")
|
||||
@@ -2978,9 +2989,13 @@ function OverworldState:finishNurseHeal(bye, onDone, npc)
|
||||
end))
|
||||
end
|
||||
if not npc then farewell() return end
|
||||
npc.facing = "up"
|
||||
npc.frameOverride = 3
|
||||
-- bubble = false is the silent world hold, this port's DelayFrames
|
||||
self.emote = { npc = npc, frames = 20, bubble = false, onDone = farewell }
|
||||
self.emote = { npc = npc, frames = 20, bubble = false, onDone = function()
|
||||
npc.frameOverride = nil
|
||||
npc:facePlayer(self.player)
|
||||
farewell()
|
||||
end }
|
||||
end))
|
||||
end
|
||||
|
||||
@@ -2992,6 +3007,11 @@ end
|
||||
-- for the original serial handshake; declining prints "Please come again!"
|
||||
function OverworldState:cableClubReceptionist(onDone)
|
||||
local t = Game.data.text
|
||||
if self.map.id == "PEWTER_POKECENTER" and self.pikachuPewterSleepScene then
|
||||
Game.stack:push(TextBox.new(Game,
|
||||
t._LooksContentText or "PIKACHU looks\ncontent.", onDone))
|
||||
return
|
||||
end
|
||||
local welcome = t._CableClubNPCWelcomeText or romText(Game.data, "_CableClubNPCWelcomeText", "Welcome to the\nCable Club!")
|
||||
if not Game.save.flags.EVENT_GOT_POKEDEX then
|
||||
-- CableClubNPC .didNotConnect path before the pokedex
|
||||
|
||||
@@ -65,6 +65,17 @@ function PikachuFollower.starterInParty(save, needHealthy)
|
||||
return nil
|
||||
end
|
||||
|
||||
function PikachuFollower.isStarterPikachu(save, mon)
|
||||
if not (mon and mon.species == "PIKACHU") then return false end
|
||||
local player = save.player or {}
|
||||
return mon.otId == player.id and mon.ot == player.name
|
||||
end
|
||||
|
||||
function PikachuFollower.isFollowingDisabled(ow)
|
||||
return ow and (ow.pikachuBillsScene or ow.pikachuFanClubScene
|
||||
or ow.pikachuPewterSleepScene) and true or false
|
||||
end
|
||||
|
||||
-- ModifyPikachuHappiness. mon is the party mon the event applied to for
|
||||
-- the per-mon reasons (IsThisPartyMonStarterPikachu); GYMLEADER and
|
||||
-- WALKING instead require any healthy starter in the party
|
||||
@@ -199,6 +210,7 @@ function PikachuFollower.onMapEntered(game, ow, opts, viaMapLoad)
|
||||
-- Bill's House owns a short scripted scene that deliberately keeps
|
||||
-- Pikachu off the normal trailing loop. A new map instance ends it.
|
||||
ow.pikachuBillsScene = nil
|
||||
ow.pikachuFanClubScene = nil
|
||||
remove(ow)
|
||||
if not shouldSpawn(game, ow) then return end
|
||||
-- opts.keepPikachu is the follower a connection crossing kept alive:
|
||||
@@ -410,7 +422,8 @@ end
|
||||
-- (pikachu_follow.asm keeps it one walk step behind)
|
||||
function PikachuFollower.update(game, ow)
|
||||
if ow.pikaHop then return end -- the counter hop owns the follower (#417)
|
||||
if ow.pikachuBillsScene then return end
|
||||
if ow.pikachuBillsScene or ow.pikachuFanClubScene
|
||||
or ow.pikachuPewterSleepScene then return end
|
||||
local npc = findFollower(ow)
|
||||
if not npc then
|
||||
if shouldSpawn(game, ow) then PikachuFollower.onMapEntered(game, ow) end
|
||||
@@ -713,6 +726,13 @@ function PikachuFollower.talk(game, ow, npc, done)
|
||||
ow.player.facing = OPPOSITE[npc.facing] or ow.player.facing
|
||||
local save = game.save
|
||||
local emotion = selectEmotion(game, ow, save)
|
||||
if ow.pikachuPewterSleepScene then
|
||||
local finish = done
|
||||
done = function()
|
||||
ow.pikachuPewterSleepScene = nil
|
||||
if finish then finish() end
|
||||
end
|
||||
end
|
||||
local e = EMOTIONS[emotion] or EMOTIONS[1]
|
||||
if e.turnAway then
|
||||
npc.facing = ow.player.facing -- pikaemotion_9: back to the player
|
||||
@@ -798,6 +818,28 @@ local function movePikachu(ow, npc, steps, onDone)
|
||||
nextStep(1)
|
||||
end
|
||||
|
||||
function PikachuFollower.onFanClubEntered(game, ow)
|
||||
if not (GameVersion.isYellow() and ow.map
|
||||
and ow.map.id == "POKEMON_FAN_CLUB") then return end
|
||||
local starter = PikachuFollower.starterInParty(game.save)
|
||||
local npc = findFollower(ow)
|
||||
if not npc or (starter and starter.status) then return end
|
||||
ow.pikachuFanClubScene = true
|
||||
ow.pikachuMapScriptActive = true
|
||||
ow.player.facing = "down"
|
||||
for _, other in ipairs(ow.npcs or {}) do
|
||||
if other.def and other.def.name == "POKEMONFANCLUB_SEEL" then
|
||||
other.movementStatus = 2
|
||||
other.facing = "down"
|
||||
break
|
||||
end
|
||||
end
|
||||
billsHouseEmotion(game, ow, npc, "EXCLAMATION_BUBBLE")
|
||||
movePikachu(ow, npc, { { "up", 1 }, { "right", 3 }, { "up", 1 } }, function()
|
||||
npc.facing = "up"
|
||||
end)
|
||||
end
|
||||
|
||||
function PikachuFollower.onBillsHouseEnter(game, ow)
|
||||
if not (GameVersion.isYellow() and ow.map and ow.map.id == "BILLS_HOUSE") then
|
||||
return
|
||||
|
||||
Reference in New Issue
Block a user