diff --git a/main.lua b/main.lua index 8cbf4c7d..7b6fba4c 100644 --- a/main.lua +++ b/main.lua @@ -82,6 +82,43 @@ end local editorHost, editorVersion, editorWindow local closeEditor -- forward declaration: openEditor hands it to the editor +-- Drop CacheFs / Data / mod Runtime / Assets / LegacyCompat for one mounted +-- version session (save editor or game). closeEditor and returnToLauncher +-- both go through here so neither path can forget a singleton the other resets. +local function teardownMountedSession(version) + if version then + require("src.import.CacheFs").unmountVersion(version) + end + require("src.core.Data"):unloadGenerated() + local Runtime = require("src.mods.Runtime") + if Runtime.reset then Runtime.reset() end + local Assets = require("src.render.Assets") + if Assets.installLoader then Assets.installLoader(nil) end + local okCompat, LegacyCompat = pcall(require, "src.mods.LegacyCompat") + if okCompat and LegacyCompat.reset then LegacyCompat.reset() end +end + +-- Evict every save-editor module from package.loaded without a hardcoded +-- panel whitelist. Flat require names (App, Party, …) resolve under +-- tools/save-editor/; path-style keys may also appear. A key is flushed +-- when it names a save-editor path or when tools/save-editor/{panels/}K.lua +-- exists for a flat name K -- new panels are picked up automatically. +local function flushEditorPackageLoaded() + local fs = love and love.filesystem + local function isEditorFlat(name) + if not (fs and fs.getInfo) then return false end + if name:find("[./]") then return false end + return fs.getInfo("tools/save-editor/" .. name .. ".lua") ~= nil + or fs.getInfo("tools/save-editor/panels/" .. name .. ".lua") ~= nil + end + for k in pairs(package.loaded) do + if type(k) == "string" + and (k:find("save%-editor", 1, false) or isEditorFlat(k)) then + package.loaded[k] = nil + end + end +end + -- The editor's modules use flat names (require("Kit"), require("Party")), so -- their directories have to be on the require path. It must be -- love.filesystem's path, not package.path: in a packaged build these files @@ -180,9 +217,9 @@ local function openEditor(version, slotId) if EditorApp.unload then pcall(EditorApp.unload) end EditorApp = nil if version then - require("src.import.CacheFs").unmountVersion(version) - require("src.core.Data"):unloadGenerated() + teardownMountedSession(version) end + flushEditorPackageLoaded() restoreWindow() Importer = editorHost editorHost = nil @@ -197,21 +234,17 @@ end -- Back to the launcher. Everything the editor mounted or cached has to come -- back out: the version overlay (CacheFs) and the generated modules require -- cached behind it (Data), or pressing Play on the OTHER game would boot it --- with this one's data. +-- with this one's data. Also reset Runtime / Assets / LegacyCompat so the +-- next Edit or Play does not inherit the editor's dead mod loader. function closeEditor() local version = editorVersion editorMode = false if EditorApp and EditorApp.unload then EditorApp.unload() end EditorApp = nil if version then - require("src.import.CacheFs").unmountVersion(version) - require("src.core.Data"):unloadGenerated() - end - for k in pairs(package.loaded) do - if type(k) == "string" and (k:find("save%-editor") or k == "App" or k == "Kit" or k == "State" or k == "Catalog" or k == "SaveIO" or k == "Ops" or k == "MonOps" or k == "ItemOps" or k == "PadInput" or k == "Gen" or k == "Theme") then - package.loaded[k] = nil - end + teardownMountedSession(version) end + flushEditorPackageLoaded() editorVersion = nil restoreWindow() Importer = editorHost @@ -333,16 +366,11 @@ local function returnToLauncher() local GameVersion = require("src.core.GameVersion") local currentVersion = GameVersion.get() - if currentVersion then - require("src.import.CacheFs").unmountVersion(currentVersion) - end - require("src.core.Data"):unloadGenerated() + teardownMountedSession(currentVersion) - local Runtime = require("src.mods.Runtime") - if Runtime.reset then - Runtime.reset() + if Game.reset then + pcall(function() Game:reset() end) end - Game = nil autopilot = nil driverCo = nil diff --git a/src/core/Game.lua b/src/core/Game.lua index 85bedf24..b1b730b9 100644 --- a/src/core/Game.lua +++ b/src/core/Game.lua @@ -1381,4 +1381,26 @@ function Game:restoreCheckpointBattle(battle) if battle.resumeCheckpoint then battle:resumeCheckpoint() end end +-- Drop every session-owned field so the next Game:load() starts clean when +-- the process returns to the launcher in-place (Android / intent_game). +-- main.lua must not guess field names: new systems (Game.network, …) are +-- cleared automatically because only functions (methods) are kept. +function Game:reset() + if self.stack and self.stack.clear then + pcall(function() self.stack:clear() end) + end + if self.renderer and self.renderer.releaseCanvases then + pcall(function() self.renderer:releaseCanvases() end) + end + local keys = {} + for key, value in pairs(self) do + if type(value) ~= "function" then + keys[#keys + 1] = key + end + end + for _, key in ipairs(keys) do + self[key] = nil + end +end + return Game diff --git a/src/core/Game2.lua b/src/core/Game2.lua index 8b87ed00..4ab8a479 100644 --- a/src/core/Game2.lua +++ b/src/core/Game2.lua @@ -943,6 +943,12 @@ function Game2:load() self.data.gen2Scripts = loadGenerated("data/generated/scripts.lua") self.data.gen2StdScripts = loadGenerated("data/generated/std_scripts.lua") self.data.gen2Text = loadGenerated("data/generated/text.lua") + -- The engine's own strings, keyed by the disassembly's label. gen2Text + -- above is the script text and is keyed by bank:address for the overworld + -- VM, so the two are different tables and both are loaded. This one is + -- what src/core/RomText.lua reads, which is why it lands on `text`: that + -- helper is shared with Gen 1 and looks up data.text[label]. + self.data.text = loadGenerated("data/generated/rom_text.lua") or {} -- data/generated/events.lua: the side tables a script command NAMES rather -- than carries -- the phone book, the in-game trades, the elevator's floor -- labels, the decoration descriptions. Keyed for World's own `eventTables` @@ -2117,4 +2123,22 @@ function Game2:joystickremoved() TouchControls:joystickremoved() end +-- In-process return-to-launcher (Android / intent_game): drop session fields +-- so a later Game2.new() + load is not sharing a live stack or mod loader. +-- Methods live on the class table; pairs(self) only sees instance state. +function Game2:reset() + if self.stack and self.stack.clear then + pcall(function() self.stack:clear() end) + end + local keys = {} + for key, value in pairs(self) do + if type(value) ~= "function" then + keys[#keys + 1] = key + end + end + for _, key in ipairs(keys) do + self[key] = nil + end +end + return Game2 diff --git a/src/import/CacheFs.lua b/src/import/CacheFs.lua index 00ef8e99..4b86d5cb 100644 --- a/src/import/CacheFs.lua +++ b/src/import/CacheFs.lua @@ -614,14 +614,18 @@ function CacheFs.mountVersion(version) return true end --- Undo mountVersion. A process normally mounts exactly one version and then --- boots it, but the launcher can open the save editor on one game's save, --- close it, and press Play on another: with the first version's subtree --- still prepended, the other's require("data.generated.*") and generated --- art would silently resolve to the first game's files. Callers must also --- drop the generated modules from package.loaded --- (src.core.Data:unloadGenerated) -- unmounting alone only fixes the read --- path, not what require already cached. +-- Undo mountVersion in LIFO order relative to mountVersion: generated-tree +-- overlays first (assets, then data -- reverse of mountGeneratedTrees), then +-- the version folder. PHYSFS resolves by stack order; peeling the wrong +-- layer first can leave another version's generated files winning a name. +-- +-- A process normally mounts exactly one version and then boots it, but the +-- launcher can open the save editor on one game's save, close it, and press +-- Play on another: with the first version's subtree still prepended, the +-- other's require("data.generated.*") and generated art would silently +-- resolve to the first game's files. Callers must also drop the generated +-- modules from package.loaded (src.core.Data:unloadGenerated) -- unmounting +-- alone only fixes the read path, not what require already cached. -- -- Returns true when nothing was mounted or the unmount took. function CacheFs.unmountVersion(version) @@ -633,6 +637,16 @@ function CacheFs.unmountVersion(version) base = love.filesystem.getSaveDirectory() end local done = false + -- LIFO vs mountGeneratedTrees: assets/generated, then data/generated. + if love.filesystem and love.filesystem.unmount then + local generated = { + prefix .. "assets/generated", + prefix .. "data/generated", + } + for _, src in ipairs(generated) do + done = love.filesystem.unmount(src) or done + end + end local fn = resolveUnmount() if fn and base then done = fn(base .. SEP .. sub) or done diff --git a/src/import/RomExtractorGen2.lua b/src/import/RomExtractorGen2.lua index 683ccb24..1ad47af4 100644 --- a/src/import/RomExtractorGen2.lua +++ b/src/import/RomExtractorGen2.lua @@ -27,7 +27,7 @@ RomExtractorGen2.__index = RomExtractorGen2 -- scripts, pokemon, moves, items, marts, encounters, trainers, pokedex, -- landmarks, intro movie, menu gfx, title, credits, diploma, trade animation, -- audio, stubs -local STAGE_COUNT = 26 +local STAGE_COUNT = 27 local Opcodes = require("src.script.gen2.Opcodes") -- BG palette slots inside one loaded 8-palette set (constants/tileset_constants.asm @@ -136,6 +136,18 @@ local TEXT_NO_GLYPH = { [0x13] = true, [0x15] = true, } +-- The three runtime name slots. PlaceMoveUsersName, PlaceMoveTargetsName and +-- PlaceEnemysName (home/text.asm:302, :307, :327) swap these for a battler's +-- own name as the line prints, so they are markers rather than glyphs. They +-- decode to the same shape Gen 1 uses, which src/core/RomText.lua already +-- fills in argument order. Dropped, SubTookDamageText read "took damage +-- for" with nothing after it. +local NAME_SLOT = { + [""] = "{USER}", + [""] = "{TARGET}", + [""] = "{ENEMY}", +} + local ROOF_TILES = 9 local SPRITEDATA_LENGTH = 6 @@ -2596,6 +2608,8 @@ function RomExtractorGen2:decodeGen2Text(bank, address, charmap, buffers) out[#out + 1] = ch elseif ch == "<……>" or b == 0x56 then out[#out + 1] = "……" + elseif NAME_SLOT[ch] then + out[#out + 1] = NAME_SLOT[ch] elseif not ch then out[#out + 1] = ("{BYTE:%02X}"):format(b) end @@ -3698,6 +3712,37 @@ function RomExtractorGen2:splashGfx() } end +-- The engine's own strings, keyed by the label the disassembly gives them. +-- +-- This is what extractOakSpeech has always done for _OakText1-7: resolve the +-- label, decode from the cart, key by name. What is new is that the list of +-- labels comes from the manifest instead of being written out here, so all of +-- data/text/ arrives rather than seven strings. Gen 1 has had the same table +-- since RomExtractor:extractText; this is the Gen 2 side of it, and it is +-- what lets src/core/RomText.lua work on Gold and Silver at all. +-- +-- Written as `rom_text` rather than `text`: data/generated/text.lua is +-- already the script text, keyed by bank:address for the overworld VM, and +-- these are a different table with different keys. +function RomExtractorGen2:extractText() + self:beginStage("Dialogue") + local charmap = self.manifest.charmap or {} + local labels = (self.manifest.text or {}).labels or {} + local texts = {} + for index, label in ipairs(labels) do + local location = self.symbols[label] + -- A label the manifest names but the symbol table does not carry would + -- be a generator bug, not a cart difference: make_gold_manifest.py + -- resolves every one of these before it writes the list. + if location then + texts[label] = self:decodeGen2Text(location[1], location[2], charmap) + end + self:tick("Dialogue", index, #labels) + end + self:write("rom_text", texts) + return texts +end + -- OakSpeech (engine/menus/intro_menu.asm): named _OakText* strings plus the -- POKEMON_PROF / CAL trainer pics shown before NamePlayer. Also pulls -- Shrink1/2 pics and the GameFreak splash sheets for the boot cinema. @@ -6283,6 +6328,7 @@ function RomExtractorGen2:run() results.sprites = self:extractSprites() results.stdScripts = self:extractStdScripts() results.scripts = self:extractScriptsAndText(results.maps, results.stdScripts) + results.text = self:extractText() results.pokemon = self:extractPokemon() results.moves = self:extractMoves() results.items = self:extractItems() diff --git a/src/import/RomImporter.lua b/src/import/RomImporter.lua index ca051683..aa6ea4cf 100644 --- a/src/import/RomImporter.lua +++ b/src/import/RomImporter.lua @@ -104,6 +104,12 @@ local VERSION_REQUIRED_FILES_OVERRIDE = { "data/generated/sprites.lua", -- OW sheets (Chris + NPCs) "data/generated/scripts.lua", -- disassembled map scripts "data/generated/text.lua", -- decoded Gen 2 dialogue strings + -- The engine's own strings, keyed by label rather than by address. A + -- cache built before RomExtractorGen2:extractText has none, and every + -- line that reads through src/core/RomText.lua would silently keep + -- printing its Lua fallback, so this re-imports those caches rather than + -- bumping CACHE_FORMAT and dragging Red, Blue and Yellow through it too. + "data/generated/rom_text.lua", "data/generated/pokemon.lua", "data/generated/tilesets.lua", "data/generated/audio.lua", diff --git a/src/render/PaletteFX.lua b/src/render/PaletteFX.lua index 7accec59..b00d65c3 100644 --- a/src/render/PaletteFX.lua +++ b/src/render/PaletteFX.lua @@ -397,9 +397,12 @@ function PaletteFX.uiSpriteRedraws() end -- Active named-palette table for COLORS: RED++ uses data/palettes_gbc.lua, --- everything else uses the ROM-imported data.palettes. +-- Yellow uses data/palettes_yellow.lua, everything else uses the ROM-imported data.palettes. function PaletteFX.pack(data) - if PaletteFX.usesGbcPack() then + if GameVersion.isYellow() then + local y = PaletteFX.yellowPack() + if y then return y end + elseif PaletteFX.usesGbcPack() then local g = PaletteFX.gbcPack() if g then return g end end @@ -449,24 +452,27 @@ function PaletteFX.pal(data, name) local fromRom = romNamedPal(data, name) if fromRom then return fromRom end end - if PaletteFX.usesYellowCgb() then - local fromCgb = yellowCgbNamedPal(data, name) - if fromCgb then return fromCgb end + if GameVersion.isYellow() then + if PaletteFX.usesYellowCgb() then + local fromCgb = yellowCgbNamedPal(data, name) + if fromCgb then return fromCgb end + end + local y = PaletteFX.yellowPack() + local yc = y and y.palettes and y.palettes[name] + if yc then return yc end + local fromRom = romNamedPal(data, name) + if fromRom then return fromRom end end local p = PaletteFX.pack(data) local c = p and p.palettes and p.palettes[name] if c then return c end - if GameVersion.isYellow() then - local y = PaletteFX.yellowPack() - local yc = y and y.palettes and y.palettes[name] - if yc then return yc end - end if PaletteFX.usesGbcPack() then return romNamedPal(data, name) end return nil end + -- the species' palette (data/pokemon/palettes.asm), MEWMON for unknowns. -- transformed forces PAL_GRAYMON (Ditto's palette) regardless of species -- (engine/gfx/palettes.asm DeterminePaletteID: bit TRANSFORMED, a; a diff --git a/src/render/Renderer.lua b/src/render/Renderer.lua index 412f793c..5ed14d47 100644 --- a/src/render/Renderer.lua +++ b/src/render/Renderer.lua @@ -100,10 +100,30 @@ local function positionLift(ph, contentPx, dpiY, cut) return ScreenPosition.lift(ph, contentPx, ScreenPosition.safeTop() * dpiY) end +-- Free GPU canvases immediately. Overwriting the Lua reference alone leaves +-- VRAM allocated until LOVE's GC runs, which is too slow when Android loops +-- Play → launcher → Play in one process. +local function releaseCanvas(canvas) + if canvas and canvas.release then pcall(canvas.release, canvas) end +end + +function Renderer:releaseCanvases() + releaseCanvas(self.canvas); self.canvas = nil + releaseCanvas(self.battleHUDCanvas); self.battleHUDCanvas = nil + releaseCanvas(self.worldCanvas); self.worldCanvas = nil + releaseCanvas(self.uprightCanvas); self.uprightCanvas = nil + self.worldActive = false + self.uprightActive = false + self.worldOverride = nil +end + function Renderer:init() -- 160x144 real pixels, never DPI-scaled: see src/render/PixelCanvas.lua -- (#208). Every canvas below is sized in framebuffer pixels for the same -- reason -- worldViewSize() already works in drawable pixels. + -- Release any prior session's surfaces before reallocating (in-process + -- return-to-launcher reuses this Renderer singleton). + self:releaseCanvases() self.uiWidth, self.uiHeight = self.WIDTH, self.HEIGHT self.canvas = PixelCanvas.new(self.uiWidth, self.uiHeight, "nearest") self.battleHUDCanvas = nil diff --git a/src/render/TileRenderer.lua b/src/render/TileRenderer.lua index da138779..ad29bce5 100644 --- a/src/render/TileRenderer.lua +++ b/src/render/TileRenderer.lua @@ -951,6 +951,13 @@ function TileRenderer.invalidate() frameImages = {} toggleImages = {} stripData = {} + -- RED++ per-map atlases are large Images; clear and release so an + -- in-process Play → launcher → Play loop does not keep every prior + -- session's bake in VRAM / Lua heap. + for key, img in pairs(gbcAtlasCache) do + safeRelease(img) + gbcAtlasCache[key] = nil + end end Assets.register(TileRenderer.invalidate) diff --git a/src/ui/TradeAnim.lua b/src/ui/TradeAnim.lua index 5e926626..35353e18 100644 --- a/src/ui/TradeAnim.lua +++ b/src/ui/TradeAnim.lua @@ -34,10 +34,12 @@ local DEFAULT_ART = { cableBall = "assets/generated/trade/cable_ball.png", cableBallAlt = "assets/generated/trade/cable_ball_alt.png", bubble = "assets/generated/trade/bubble.png", + moveAnim0 = "assets/generated/battle/anims/move_anim_0.png", + balls = "assets/generated/battle/balls.png", } local function tryImage(path) - if not path then return nil end + if not (path and love and love.graphics and love.graphics.newImage) then return nil end local ok, img = pcall(love.graphics.newImage, path) return ok and img or nil end @@ -89,6 +91,92 @@ local SEQ = { "done", } +-- FrameBlocks 03..08 definition for move_anim_0.png (128x40, 16 tiles/row, 8x8 per tile) +local FRAME_BLOCKS = { + -- FrameBlock03: Pokeball normal (16x16) + [3] = { + { tile = 2, dx = 0, dy = 0, xflip = false, yflip = false }, + { tile = 2, dx = 8, dy = 0, xflip = true, yflip = false }, + { tile = 18, dx = 0, dy = 8, xflip = false, yflip = false }, + { tile = 18, dx = 8, dy = 8, xflip = true, yflip = false }, + }, + -- FrameBlock04: Pokeball tilted left (16x16) + [4] = { + { tile = 6, dx = 0, dy = 0, xflip = false, yflip = false }, + { tile = 7, dx = 8, dy = 0, xflip = false, yflip = false }, + { tile = 22, dx = 0, dy = 8, xflip = false, yflip = false }, + { tile = 23, dx = 8, dy = 8, xflip = false, yflip = false }, + }, + -- FrameBlock05: Pokeball tilted right (16x16) + [5] = { + { tile = 7, dx = 0, dy = 0, xflip = true, yflip = false }, + { tile = 6, dx = 8, dy = 0, xflip = true, yflip = false }, + { tile = 23, dx = 0, dy = 8, xflip = true, yflip = false }, + { tile = 22, dx = 8, dy = 8, xflip = true, yflip = false }, + }, + -- FrameBlock06: Small Poof smoke cloud (32x32) + [6] = { + { tile = 0x23, dx = 8, dy = 0, xflip = false, yflip = false }, + { tile = 0x32, dx = 0, dy = 8, xflip = false, yflip = false }, + { tile = 0x33, dx = 8, dy = 8, xflip = false, yflip = false }, + { tile = 0x23, dx = 16, dy = 0, xflip = true, yflip = false }, + { tile = 0x33, dx = 16, dy = 8, xflip = true, yflip = false }, + { tile = 0x32, dx = 24, dy = 8, xflip = true, yflip = false }, + { tile = 0x32, dx = 0, dy = 16, xflip = false, yflip = true }, + { tile = 0x33, dx = 8, dy = 16, xflip = false, yflip = true }, + { tile = 0x23, dx = 8, dy = 24, xflip = false, yflip = true }, + { tile = 0x33, dx = 16, dy = 16, xflip = true, yflip = true }, + { tile = 0x32, dx = 24, dy = 16, xflip = true, yflip = true }, + { tile = 0x23, dx = 16, dy = 24, xflip = true, yflip = true }, + }, + -- FrameBlock07: Medium Poof smoke cloud (32x32) + [7] = { + { tile = 0x20, dx = 0, dy = 0, xflip = false, yflip = false }, + { tile = 0x21, dx = 8, dy = 0, xflip = false, yflip = false }, + { tile = 0x30, dx = 0, dy = 8, xflip = false, yflip = false }, + { tile = 0x31, dx = 8, dy = 8, xflip = false, yflip = false }, + { tile = 0x21, dx = 16, dy = 0, xflip = true, yflip = false }, + { tile = 0x20, dx = 24, dy = 0, xflip = true, yflip = false }, + { tile = 0x31, dx = 16, dy = 8, xflip = true, yflip = false }, + { tile = 0x30, dx = 24, dy = 8, xflip = true, yflip = false }, + { tile = 0x30, dx = 0, dy = 16, xflip = false, yflip = true }, + { tile = 0x31, dx = 8, dy = 16, xflip = false, yflip = true }, + { tile = 0x20, dx = 0, dy = 24, xflip = false, yflip = true }, + { tile = 0x21, dx = 8, dy = 24, xflip = false, yflip = true }, + { tile = 0x31, dx = 16, dy = 16, xflip = true, yflip = true }, + { tile = 0x30, dx = 24, dy = 16, xflip = true, yflip = true }, + { tile = 0x21, dx = 16, dy = 24, xflip = true, yflip = true }, + { tile = 0x20, dx = 24, dy = 24, xflip = true, yflip = true }, + }, + -- FrameBlock08: Large Poof smoke cloud (32x32) + [8] = { + { tile = 0x22, dx = 0, dy = 0, xflip = false, yflip = false }, + { tile = 0x23, dx = 8, dy = 0, xflip = false, yflip = false }, + { tile = 0x32, dx = 0, dy = 8, xflip = false, yflip = false }, + { tile = 0x33, dx = 8, dy = 8, xflip = false, yflip = false }, + { tile = 0x23, dx = 16, dy = 0, xflip = true, yflip = false }, + { tile = 0x22, dx = 24, dy = 0, xflip = true, yflip = false }, + { tile = 0x33, dx = 16, dy = 8, xflip = true, yflip = false }, + { tile = 0x32, dx = 24, dy = 8, xflip = true, yflip = false }, + { tile = 0x32, dx = 0, dy = 16, xflip = false, yflip = true }, + { tile = 0x33, dx = 8, dy = 16, xflip = false, yflip = true }, + { tile = 0x22, dx = 0, dy = 24, xflip = false, yflip = true }, + { tile = 0x23, dx = 8, dy = 24, xflip = false, yflip = true }, + { tile = 0x33, dx = 16, dy = 16, xflip = true, yflip = true }, + { tile = 0x32, dx = 24, dy = 16, xflip = true, yflip = true }, + { tile = 0x23, dx = 16, dy = 24, xflip = true, yflip = true }, + { tile = 0x22, dx = 24, dy = 24, xflip = true, yflip = true }, + }, +} + +-- BallMoveDistances1 (engine/battle/animations.asm:881) +-- Pokéball jumps up into the open link cable nozzle: -12, -12, -8 (3 frames each) +local BALL_SUCTION_DISTANCES = { -12, -12, -8 } + +-- BallMoveDistances2 (engine/battle/animations.asm:922) +-- Incoming Pokéball bounces out of nozzle onto the ground: 11, 12, -12, -7, 7, 12, -8, 8 (5 frames each) +local BALL_BOUNCE_DISTANCES = { 11, 12, -12, -7, 7, 12, -8, 8 } + function TradeAnim.new(game, opts) opts = opts or {} local self = setmetatable({}, TradeAnim) @@ -120,6 +208,8 @@ function TradeAnim.new(game, opts) cableBall = tryImage(art.cableBall or DEFAULT_ART.cableBall), cableBallAlt = tryImage(art.cableBallAlt or DEFAULT_ART.cableBallAlt), bubble = tryImage(art.bubble or DEFAULT_ART.bubble), + moveAnim0 = tryImage(DEFAULT_ART.moveAnim0), + balls = tryImage(DEFAULT_ART.balls), } self.sentSprite, self.sentSpriteTrueColor = spriteOf(game, self.sent) self.recvSprite, self.recvSpriteTrueColor = spriteOf(game, self.received) @@ -136,6 +226,14 @@ function TradeAnim.new(game, opts) self.monVisible = true self.waitingText = false self.cableFlash = false + self.activeBallBlock = nil + self.activeBallX = 0 + self.activeBallY = 0 + self.activePoofBlock = nil + self.activePoofX = 0 + self.activePoofY = 0 + self.wx = 0 + self.slidingBox = false return self end @@ -151,52 +249,100 @@ function TradeAnim:advance() self.sub = nil self.flash = false self.cableFlash = false - self.poof = nil + self.activeBallBlock = nil + self.activePoofBlock = nil + self.slidingBox = false + self.wx = 0 + if self.phase == "done" then self.game.stack:pop() if self.onDone then self.onDone() end elseif self.phase == "show_enemy" then self.monVisible = false + self.activeBallBlock = 4 + self.activeBallX, self.activeBallY = 72, 40 + self.activePoofBlock = nil + self.cableSlideOut = 0 elseif self.phase == "transfer_lr" then - -- wBaseCoord $54, $1c OAM -> screen (76, 12) - self.monX, self.monY = 76, 12 + -- BaseCoord $54, $1c -> Screen (92, 28) for 16x16 icon (center 100, 36) + self.monX, self.monY = 92, 28 + self.scx = 0 elseif self.phase == "transfer_rl" then - -- wBaseCoord $64, $44 OAM -> screen (92, 52), right GB on screen - self.monX, self.monY = 92, 52 - self.scx = 160 + -- BaseCoord $64, $44 -> Screen (108, 68) for 16x16 icon (center 116, 76) + self.monX, self.monY = 108, 68 + self.scx = 256 elseif self.phase == "ball_enter" then - -- lb bc, $20, $60: b = Y, c = X (Trade_AnimateBallEnteringLinkCable) + -- Pokéball sits at BaseCoord $48 (Screen 72, 64) before shake and suction + self.activeBallBlock = 3 + self.activeBallX, self.activeBallY = 72, 64 self.ballX, self.ballY = 0x60, 0x20 elseif self.phase == "open_cable" or self.phase == "open_cable2" then - -- SCX $a0 -> $f0: cable slides in from the right, open end rests at x64 - self.scx = 0x50 + -- SCX $a0 (160) -> $f0 (240): cable slides in from right, open end rests at x64 + self.scx = 80 + if self.phase == "open_cable" then + self.activeBallBlock = 3 + self.activeBallX, self.activeBallY = 72, 64 + end Sound.play(self.game.data, "Heal_HP") end end -function TradeAnim:say(text, delay, thenFn) - self.waitingText = true - self.game.stack:push(TextBox.new(self.game, text, function() - self.waitingText = false - if thenFn then thenFn() else self:advance() end - end, { auto = { delay = delay or 80 } })) +function TradeAnim:skipHeld() + return self.game.input:wasPressed("a") or self.game.input:wasPressed("b") end -function TradeAnim:skipHeld() - return self.game.input:wasPressed("a") or self.game.input:isDown("a") +function TradeAnim:drawFrameBlock(blockId, x, y) + local block = FRAME_BLOCKS[blockId] + if not block then return end + if self.img.moveAnim0 then + local iw, ih = self.img.moveAnim0:getDimensions() + for _, tile in ipairs(block) do + local tx = (tile.tile % 16) * 8 + local ty = math.floor(tile.tile / 16) * 8 + local quad = love.graphics.newQuad(tx, ty, 8, 8, iw, ih) + local sx = tile.xflip and -1 or 1 + local sy = tile.yflip and -1 or 1 + local ox = tile.xflip and 8 or 0 + local oy = tile.yflip and 8 or 0 + love.graphics.draw(self.img.moveAnim0, quad, x + tile.dx + ox, y + tile.dy + oy, 0, sx, sy) + end + else + if blockId == 3 or blockId == 4 or blockId == 5 then + love.graphics.setColor(0.9, 0.2, 0.2, 1) + love.graphics.arc("fill", x + 8, y + 8, 7, math.pi, 0) + love.graphics.setColor(0.9, 0.9, 0.9, 1) + love.graphics.arc("fill", x + 8, y + 8, 7, 0, math.pi) + love.graphics.setColor(0, 0, 0, 1) + love.graphics.circle("line", x + 8, y + 8, 7) + love.graphics.line(x + 1, y + 8, x + 15, y + 8) + love.graphics.circle("fill", x + 8, y + 8, 2) + love.graphics.setColor(1, 1, 1, 1) + elseif blockId == 6 or blockId == 7 or blockId == 8 then + local r = (blockId - 5) * 5 + love.graphics.setColor(0.8, 0.8, 0.8, 0.8) + love.graphics.circle("fill", x + 16, y + 16, r) + love.graphics.setColor(1, 1, 1, 1) + end + end end function TradeAnim:update(dt) if self.waitingText or self.phase == "done" then return end - local skip = self.game.input:wasPressed("a") + local skip = self:skipHeld() self.t = self.t + 1 local p = self.phase if p == "show_player" then - -- slide from SCX $86 -> 0, hold 80, poof, cry (Trade_ShowPlayerMon) + -- Trade_ShowPlayerMon: + -- 1. Slide from SCX $7e (126) -> 0 at 2px/frame (63 frames) + -- 2. Hold 80 frames + -- 3. TRADE_BALL_POOF_ANIM at BaseCoord $72 (Screen 64, 48): 3 frames x 6 ticks = 18 ticks + -- 4. TRADE_BALL_DROP_ANIM: mon vanishes, ball drops $41 (72, 56) -> $48 (72, 64) over 36 ticks + -- 5. PlayCry while ball sits on ground at (72, 64) if not self.sub then self.sub = "slide" end + if self.sub == "slide" then - self.scx = math.max(0, 0x86 - self.t * 2) + self.scx = math.max(0, 126 - self.t * 2) if skip or self.scx <= 0 then self.scx = 0 self.sub = "hold" @@ -206,52 +352,131 @@ function TradeAnim:update(dt) if skip or self.t >= 80 then self.sub = "poof" self.t = 0 - self.monVisible = false Sound.play(self.game.data, "Ball_Poof") end elseif self.sub == "poof" then - self.poof = math.max(0, 16 - self.t) - if skip or self.t >= 16 then + local step = math.floor(self.t / 6) + if step >= 3 or skip then + self.sub = "ball_drop" + self.t = 0 + self.activePoofBlock = nil + self.monVisible = false + else + self.activePoofBlock = 6 + step + self.activePoofX, self.activePoofY = 64, 48 + end + elseif self.sub == "ball_drop" then + if skip or self.t >= 36 then + self.sub = "cry" + self.t = 0 + self.activeBallBlock = 3 + self.activeBallX, self.activeBallY = 72, 64 Sound.playCry(self.game.data, self.sent.species) + else + local step = math.floor(self.t / 6) + if step == 0 then + self.activeBallBlock = 3 + self.activeBallX, self.activeBallY = 72, 56 + else + local blocks = { 3, 4, 3, 5, 3 } + self.activeBallBlock = blocks[step] or 3 + self.activeBallX, self.activeBallY = 72, 64 + end + end + elseif self.sub == "cry" then + if skip or self.t >= 40 then self.sub = nil self:advance() end end elseif p == "open_cable" or p == "open_cable2" then - -- 20 steps of 4px, matching the SCX loop - self.scx = math.max(0, 0x50 - self.t * 4) + -- Trade_DrawOpenEndOfLinkCable: SCX $a0 (160) -> $f0 (240) in 20 steps of 4px + self.scx = math.max(0, 80 - self.t * 4) if skip or self.scx <= 0 then self.scx = 0 self:advance() end elseif p == "ball_enter" then - -- TRADE_BALL_SHAKE then ball rides the cable; X from $60 toward $a0 - if self.t < 20 then - if skip then self.t = 20 end - return + -- Trade_AnimateBallEnteringLinkCable: + -- 1. TRADE_BALL_SHAKE_ANIM (16 ticks) + TradeShakePokeball suction jump (-12, -12, -8 over 9 ticks): + -- - Shakes at (72, 64) for 16 ticks (FrameBlock 04, 03, 05, 03) + -- - Jumps up: Y=52 (3 ticks), Y=40 (3 ticks), Y=32 (3 ticks) + -- - Ball cleared, SFX_TRADE_MACHINE plays + -- 2. DelayFrames 10 (chills for 10 frames) + -- 3. Ball inside horizontal cable: 16 steps of +4px every 3 frames (48 frames) with Tink sfx & bulge toggle + -- 4. Delay3 + if not self.sub then self.sub = "shake" end + + if self.sub == "shake" then + if skip or self.t >= 16 then + self.sub = "jump_up" + self.t = 0 + else + local shakeBlocks = { 4, 3, 5, 3 } + local step = math.floor(self.t / 4) + 1 + self.activeBallBlock = shakeBlocks[step] or 3 + self.activeBallX, self.activeBallY = 72, 64 + end + elseif self.sub == "jump_up" then + local step = math.floor(self.t / 3) + 1 + if step > #BALL_SUCTION_DISTANCES or skip then + self.sub = "chill" + self.t = 0 + self.activeBallBlock = nil + Sound.play(self.game.data, "Trade_Machine") + else + local yPos = 64 + for i = 1, step do + yPos = yPos + BALL_SUCTION_DISTANCES[i] + end + self.activeBallBlock = 3 + self.activeBallX, self.activeBallY = 72, yPos + end + elseif self.sub == "chill" then + if skip or self.t >= 10 then + self.sub = "suction" + self.t = 0 + self.ballX = 0x60 + end + elseif self.sub == "suction" then + local step = math.floor(self.t / 3) + if step >= 16 or skip then + self.sub = "exit_pause" + self.t = 0 + self.ballX = 0xA0 + else + self.ballX = 0x60 + step * 4 + self.flash = (step % 2 == 1) + if self.t % 3 == 0 and step < 16 then + Sound.play(self.game.data, "Tink") + end + end + elseif self.sub == "exit_pause" then + if skip or self.t >= 3 then + self.sub = nil + self:advance() + end end - local step = self.t - 20 - if step % 3 == 0 then - self.ballX = 0x60 + math.floor(step / 3) * 4 - self.flash = not self.flash - if self.ballX < 0xA0 then Sound.play(self.game.data, "Tink") end - end - if skip then self.ballX = 0xA0 end - if self.ballX >= 0xA0 then self:advance() end elseif p == "transfer_lr" then - -- scroll left GB off while the mon rides the cable, then the sprite - -- itself moves right and down into the right GB (Trade_AnimMonMoveVertical) - if self.t <= 80 then - self.scx = math.min(160, self.t * 2) - self.monX, self.monY = 76, 12 - elseif self.t <= 80 + 32 then - self.monX = 76 + math.floor((self.t - 80) / 8) * 4 - elseif self.t <= 80 + 64 then - self.monX = 92 - self.monY = 12 + math.floor((self.t - 112) / 8) * 10 + -- 16 units of 16px (256px total scroll) at 2px/frame = 128 frames (SCX 0 -> 256) + if self.t <= 128 then + self.scx = math.min(256, self.t * 2) + self.monX, self.monY = 92, 28 + elseif self.t <= 128 + 32 then + local step = math.floor((self.t - 128) / 8) + 1 + step = math.min(4, step) + self.scx = 256 + self.monX = 92 + step * 4 + self.monY = 28 + elseif self.t <= 128 + 64 then + local step = math.floor((self.t - 160) / 8) + 1 + step = math.min(4, step) + self.scx = 256 + self.monX = 108 + self.monY = 28 + step * 10 else self:advance() return @@ -260,17 +485,22 @@ function TradeAnim:update(dt) if skip then self:advance() end elseif p == "transfer_rl" then - -- mirror: sprite climbs out of the right GB, then the screen scrolls - -- back to the left GB + -- 64 frames vertical ascent + 128 frames horizontal scroll (SCX 256 -> 0) if self.t <= 32 then - self.scx = 160 - self.monX, self.monY = 92, 52 - math.floor(self.t / 8) * 10 + local step = math.floor(self.t / 8) + 1 + step = math.min(4, step) + self.scx = 256 + self.monX = 108 + self.monY = 68 - step * 10 elseif self.t <= 64 then - self.monX = 92 - math.floor((self.t - 32) / 8) * 4 - self.monY = 12 - elseif self.t <= 64 + 80 then - self.scx = math.max(0, 160 - (self.t - 64) * 2) - self.monX, self.monY = 76, 12 + local step = math.floor((self.t - 32) / 8) + 1 + step = math.min(4, step) + self.scx = 256 + self.monX = 108 - step * 4 + self.monY = 28 + elseif self.t <= 64 + 128 then + self.scx = math.max(0, 256 - (self.t - 64) * 2) + self.monX, self.monY = 92, 28 else self:advance() return @@ -282,54 +512,185 @@ function TradeAnim:update(dt) if skip or self.t >= 100 then self:advance() end elseif p == "went_to" then - local text = expand(self.game, "_TradeWentToText", { - ["RAM:wStringBuffer"] = speciesName(self.game, self.sent), - ["RAM:wLinkEnemyTrainerName"] = self.enemyName, - }) - self:say(text, 200) + if not self.sub then + self.sub = "text" + self.t = 0 + local text = expand(self.game, "_TradeWentToText", { + ["RAM:wStringBuffer"] = speciesName(self.game, self.sent), + ["RAM:wLinkEnemyTrainerName"] = self.enemyName, + }) + self.dialogText = text + end + + if self.sub == "text" then + if skip or self.t >= 200 then + self.sub = "slide_hold" + self.t = 0 + end + elseif self.sub == "slide_hold" then + if skip or self.t >= 50 then + self.sub = "slide_off" + self.t = 0 + self.slidingBox = true + end + elseif self.sub == "slide_off" then + self.wx = math.min(160, self.t * 2) + if skip or self.wx >= 160 then + self.wx = 160 + self.sub = "slide_end_pause" + self.t = 0 + end + elseif self.sub == "slide_end_pause" then + if skip or self.t >= 10 then + self.slidingBox = false + self.dialogText = nil + self.sub = nil + self:advance() + end + end elseif p == "for_sends" then - local a = expand(self.game, "_TradeForText", { - ["RAM:wStringBuffer"] = speciesName(self.game, self.sent), - }) - local b = expand(self.game, "_TradeSendsText", { - ["RAM:wLinkEnemyTrainerName"] = self.enemyName, - ["RAM:wNameBuffer"] = nameOf(self.game, self.received), - }) - self.waitingText = true - self.game.stack:push(TextBox.new(self.game, a, function() - self.game.stack:push(TextBox.new(self.game, b, function() - self.waitingText = false + if not self.sub then + self.sub = "for_text" + self.t = 0 + self.dialogText = expand(self.game, "_TradeForText", { + ["RAM:wStringBuffer"] = speciesName(self.game, self.sent), + }) + end + + if self.sub == "for_text" then + if skip or self.t >= 80 then + self.sub = "sends_text" + self.t = 0 + self.dialogText = expand(self.game, "_TradeSendsText", { + ["RAM:wLinkEnemyTrainerName"] = self.enemyName, + ["RAM:wNameBuffer"] = nameOf(self.game, self.received), + }) + end + elseif self.sub == "sends_text" then + if skip or self.t >= 80 then + self.dialogText = nil + self.sub = nil self:advance() - end, { auto = { delay = 80 } })) - end, { auto = { delay = 80 } })) + end + end elseif p == "farewell" then - local a = expand(self.game, "_TradeWavesFarewellText", { - ["RAM:wLinkEnemyTrainerName"] = self.enemyName, - }) - local b = expand(self.game, "_TradeTransferredText", { - ["RAM:wNameBuffer"] = nameOf(self.game, self.received), - }) - self.waitingText = true - self.game.stack:push(TextBox.new(self.game, a, function() - self.game.stack:push(TextBox.new(self.game, b, function() - self.waitingText = false + if not self.sub then + self.sub = "farewell_text" + self.t = 0 + self.dialogText = expand(self.game, "_TradeWavesFarewellText", { + ["RAM:wLinkEnemyTrainerName"] = self.enemyName, + }) + end + + if self.sub == "farewell_text" then + if skip or self.t >= 80 then + self.sub = "transferred_text" + self.t = 0 + self.dialogText = expand(self.game, "_TradeTransferredText", { + ["RAM:wNameBuffer"] = nameOf(self.game, self.received), + }) + end + elseif self.sub == "transferred_text" then + if skip or self.t >= 80 then + self.sub = "slide_hold" + self.t = 0 + end + elseif self.sub == "slide_hold" then + if skip or self.t >= 50 then + self.sub = "slide_off" + self.t = 0 + self.slidingBox = true + end + elseif self.sub == "slide_off" then + self.wx = math.min(160, self.t * 2) + if skip or self.wx >= 160 then + self.wx = 160 + self.sub = "slide_end_pause" + self.t = 0 + end + elseif self.sub == "slide_end_pause" then + if skip or self.t >= 10 then + self.slidingBox = false + self.dialogText = nil + self.sub = nil self:advance() - end, { auto = { delay = 80 } })) - end, { auto = { delay = 80 } })) + end + end elseif p == "show_enemy" then - if self.t == 1 then - Sound.play(self.game.data, "Ball_Poof") - self.monVisible = true - elseif self.t == 20 then - Sound.playCry(self.game.data, self.received.species) - elseif self.t >= 120 or skip then - local text = expand(self.game, "_TradeTakeCareText", { - ["RAM:wNameBuffer"] = nameOf(self.game, self.received), - }) - self:say(text, 80) + -- Trade_ShowEnemyMon (engine/movie/trade.asm:354): + -- 1. TRADE_BALL_TILT_ANIM with TradeJumpPokeball (8 bounce steps, 5 ticks each = 40 ticks): + -- - Starts at BaseCoord $84 (Screen X=72, Y=40) + -- - Moves Y by BallMoveDistances2 (+11, +12, -12, -7, +7, +12, -8, +8) + -- - On each step: Cable slides off-screen right by 8px + -- - Plays SFX_SWAP on impacts + -- 2. ClearScreen, Info box at (4, 10), Mon front sprite at (7, 2) + -- 3. TRADE_BALL_POOF_ANIM: FrameBlock 06, 07, 08 (18 ticks), SFX_BALL_POOF, revealing mon + -- 4. PlayCry + -- 5. Trade_Delay100 + -- 6. Info box cleared, PrintTradeTakeCareText (80 ticks) + -- 7. Trade_Delay100 -> finish + if not self.sub then + self.sub = "ball_bounce" + self.t = 0 + self.cableSlideOut = 0 + self.activeBallBlock = 4 + self.activeBallX, self.activeBallY = 72, 40 + end + + if self.sub == "ball_bounce" then + local step = math.floor(self.t / 5) + 1 + if step > #BALL_BOUNCE_DISTANCES or skip then + self.sub = "poof" + self.t = 0 + self.activeBallBlock = nil + self.monVisible = true + self.cableSlideOut = nil + Sound.play(self.game.data, "Ball_Poof") + else + local yPos = 40 + for i = 1, step do + yPos = yPos + BALL_BOUNCE_DISTANCES[i] + end + self.activeBallBlock = 4 + self.activeBallX, self.activeBallY = 72, yPos + self.cableSlideOut = (step - 1) * 8 + if self.t % 5 == 0 and (BALL_BOUNCE_DISTANCES[step] == 12 or step == #BALL_BOUNCE_DISTANCES) then + Sound.play(self.game.data, "Swap") + end + end + elseif self.sub == "poof" then + local step = math.floor(self.t / 6) + if step >= 3 or skip then + self.sub = "cry" + self.t = 0 + self.activePoofBlock = nil + Sound.playCry(self.game.data, self.received.species) + else + self.activePoofBlock = 6 + step + self.activePoofX, self.activePoofY = 64, 48 + end + elseif self.sub == "cry" then + if skip or self.t >= 100 then + self.sub = "take_care" + self.t = 0 + self.dialogText = expand(self.game, "_TradeTakeCareText", { + ["RAM:wNameBuffer"] = nameOf(self.game, self.received), + }) + end + elseif self.sub == "take_care" then + if skip or self.t >= 80 then + self.sub = "delay_end" + self.t = 0 + self.dialogText = nil + end + elseif self.sub == "delay_end" then + if skip or self.t >= 100 then + self.sub = nil + self:advance() + end end end end @@ -337,10 +698,18 @@ end local function drawCableHoriz(self, y, x0, x1) local w = math.max(0, x1 - x0) if w <= 0 then return end + if self.cableFlash then + love.graphics.setColor(0.65, 0.65, 0.65, 1) + else + love.graphics.setColor(1, 1, 1, 1) + end if self.img.cableHoriz then local iw, ih = self.img.cableHoriz:getDimensions() - local quad = love.graphics.newQuad(0, 0, math.min(w, iw), ih, iw, ih) - love.graphics.draw(self.img.cableHoriz, quad, x0, y) + for x = x0, x1 - 1, iw do + local drawW = math.min(iw, x1 - x) + local quad = love.graphics.newQuad(0, 0, drawW, ih, iw, ih) + love.graphics.draw(self.img.cableHoriz, quad, x, y) + end elseif self.img.cableSeg then for x = x0, x1 - 8, 8 do love.graphics.draw(self.img.cableSeg, x, y) @@ -348,13 +717,11 @@ local function drawCableHoriz(self, y, x0, x1) else love.graphics.setColor(0.2, 0.2, 0.2, 1) love.graphics.rectangle("fill", x0, y + 1, w, 6) - love.graphics.setColor(1, 1, 1, 1) end + love.graphics.setColor(1, 1, 1, 1) end function TradeAnim:drawMonInfo(mon, ot, otId, boxTy) - -- Trade_PrintPlayerMonInfoText: rows +0/+2/+4/+6 from the box top; the - -- No. line replaces part of the top border (hlcoord 5, 0 in trade2.asm) Font.drawBox(4, boxTy, 12, 8) local y0 = boxTy * 8 local no = ("No.%03d"):format(dexOf(self.game, mon)) @@ -368,16 +735,6 @@ function TradeAnim:drawMonInfo(mon, ot, otId, boxTy) love.graphics.setColor(1, 1, 1, 1) end --- Trade_WriteCircledMonOAM: the mon crosses the cable as its party-menu --- sprite (wMonPartySpriteSpecies -> WriteMonPartySpriteOAMBySpecies), not as --- its battle pic, and Trade_AnimCircledMon flips both it and the ring to --- their second frame every step. The ring is four OAM blocks -- --- Trade_CircleOAMBlocks .OAMBlock0-3 at (8,8) (24,8) (8,24) (24,24) with the --- X/Y flips -- so the 16x32 bubble sheet holds one quadrant per frame and the --- circle it makes is 32x32 around the 16x16 icon. The icon rides OAM --- block 0 and the circle blocks 1-4 (Trade_WriteCircleOAMBlock counts a up --- from 1), and the lower OAM index wins overlap on DMG, so the icon draws --- on top of the circle's filled interior. #750 function TradeAnim:drawIconInBubble(mon, x, y) if self.img.bubble then if not self.bubbleQuad then @@ -415,11 +772,14 @@ function TradeAnim:drawGameBoy(x, y) end function TradeAnim:drawLeftGB() - -- cable from GB to the right edge + if self.cableFlash then + love.graphics.setColor(0.65, 0.65, 0.65, 1) + end if self.img.cableConn then love.graphics.draw(self.img.cableConn, 88, 32) end - drawCableHoriz(self, 32, 96, 160) + love.graphics.setColor(1, 1, 1, 1) + drawCableHoriz(self, 32, 96, 256) self:drawGameBoy(40, 24) Font.drawBox(4, 12, 9, 4) love.graphics.setColor(0, 0, 0, 1) @@ -429,6 +789,9 @@ end function TradeAnim:drawRightGB() drawCableHoriz(self, 32, 0, 112) + if self.cableFlash then + love.graphics.setColor(0.65, 0.65, 0.65, 1) + end if self.img.cableCorner then love.graphics.draw(self.img.cableCorner, 112, 32) end if self.img.cableVert then for i = 1, 4 do @@ -437,6 +800,7 @@ function TradeAnim:drawRightGB() end if self.img.cableEnd then love.graphics.draw(self.img.cableEnd, 112, 72) end if self.img.cableConn then love.graphics.draw(self.img.cableConn, 104, 72) end + love.graphics.setColor(1, 1, 1, 1) self:drawGameBoy(56, 64) Font.drawBox(6, 0, 9, 4) love.graphics.setColor(0, 0, 0, 1) @@ -444,6 +808,24 @@ function TradeAnim:drawRightGB() love.graphics.setColor(1, 1, 1, 1) end +function TradeAnim:drawDialog() + if not self.dialogText then return end + love.graphics.push() + if self.slidingBox then + love.graphics.translate(self.wx, 0) + end + Font.drawBox(0, 12, 20, 6) + love.graphics.setColor(0, 0, 0, 1) + local lines = {} + for line in self.dialogText:gmatch("[^\n]+") do + lines[#lines + 1] = line + end + if lines[1] then Font.draw(lines[1], 8, 112) end + if lines[2] then Font.draw(lines[2], 8, 128) end + love.graphics.setColor(1, 1, 1, 1) + love.graphics.pop() +end + function TradeAnim:draw() love.graphics.setColor(1, 1, 1, 1) love.graphics.rectangle("fill", 0, 0, 160, 144) @@ -452,10 +834,7 @@ function TradeAnim:draw() if p == "show_player" then love.graphics.push() love.graphics.translate(-self.scx, 0) - -- mon pic on the BG at hlcoord 7, 2; info box on the window at - -- hWY $50, so it sits in the bottom half of the screen if self.monVisible and self.sentSprite then - -- engine/movie/trade.asm:751 love.graphics.draw(self.sentSprite, 56 + self.sentSprite:getWidth(), 16, 0, -1, 1) if self.sentSpriteTrueColor then require("src.render.PaletteFX").markTrueColor( @@ -464,64 +843,79 @@ function TradeAnim:draw() end self:drawMonInfo(self.sent, self.playerOt, self.playerOtId, 10) love.graphics.pop() - if self.poof and self.poof > 0 then - love.graphics.setColor(0, 0, 0, self.poof / 16) - love.graphics.circle("fill", 80, 40, 20 - (self.poof or 0)) - love.graphics.setColor(1, 1, 1, 1) + + if self.activePoofBlock then + self:drawFrameBlock(self.activePoofBlock, self.activePoofX, self.activePoofY) + end + if self.activeBallBlock then + self:drawFrameBlock(self.activeBallBlock, self.activeBallX, self.activeBallY) end elseif p == "open_cable" or p == "open_cable2" then love.graphics.push() love.graphics.translate(self.scx, 0) if self.img.openCable then - love.graphics.draw(self.img.openCable, 64, 16) -- open end at SCX $f0 + love.graphics.draw(self.img.openCable, 64, 16) end love.graphics.pop() + if p == "open_cable" and self.activeBallBlock then + self:drawFrameBlock(self.activeBallBlock, self.activeBallX, self.activeBallY) + end elseif p == "ball_enter" then if self.img.openCable then love.graphics.draw(self.img.openCable, 64, 16) end - -- OAM coords carry a (+8, +16) hardware offset - local ball = self.flash and (self.img.cableBallAlt or self.img.cableBall) - or self.img.cableBall - if ball then - love.graphics.draw(ball, self.ballX - 8, self.ballY - 16) - else - love.graphics.setColor(0, 0, 0, 1) - love.graphics.circle("fill", self.ballX, self.ballY - 8, 6) - love.graphics.setColor(1, 1, 1, 1) + if self.activeBallBlock then + self:drawFrameBlock(self.activeBallBlock, self.activeBallX, self.activeBallY) + elseif self.sub == "suction" or self.sub == "exit_pause" then + local ball = self.flash and (self.img.cableBallAlt or self.img.cableBall) + or self.img.cableBall + if ball then + love.graphics.draw(ball, self.ballX - 8, self.ballY - 16) + else + love.graphics.setColor(0, 0, 0, 1) + love.graphics.circle("fill", self.ballX, self.ballY - 8, 6) + love.graphics.setColor(1, 1, 1, 1) + end end elseif p == "transfer_lr" or p == "transfer_rl" then - -- two-screen world: left GB scene at x0, right GB scene at x160; - -- the mon icon stays in screen space like the OAM sprite it ports love.graphics.push() love.graphics.translate(-self.scx, 0) self:drawLeftGB() - love.graphics.translate(160, 0) + love.graphics.translate(256, 0) self:drawRightGB() love.graphics.pop() local mon = p == "transfer_lr" and self.sent or self.received self:drawIconInBubble(mon, self.monX, self.monY) - if self.cableFlash then - love.graphics.setColor(1, 1, 1, 0.15) - love.graphics.rectangle("fill", 0, 32, 160, 8) - love.graphics.setColor(1, 1, 1, 1) - end elseif p == "show_enemy" then + if self.cableSlideOut and self.img.openCable then + love.graphics.push() + love.graphics.translate(self.cableSlideOut, 0) + love.graphics.draw(self.img.openCable, 64, 16) + love.graphics.pop() + end if self.monVisible and self.recvSprite then - -- engine/movie/trade.asm:751 love.graphics.draw(self.recvSprite, 56 + self.recvSprite:getWidth(), 16, 0, -1, 1) if self.recvSpriteTrueColor then require("src.render.PaletteFX").markTrueColor( 56, 16, self.recvSprite:getDimensions()) end end - self:drawMonInfo(self.received, self.enemyName, self.enemyOtId, 10) + if self.monVisible and self.sub ~= "take_care" and self.sub ~= "delay_end" then + self:drawMonInfo(self.received, self.enemyName, self.enemyOtId, 10) + end + if self.activeBallBlock then + self:drawFrameBlock(self.activeBallBlock, self.activeBallX, self.activeBallY) + end + if self.activePoofBlock then + self:drawFrameBlock(self.activePoofBlock, self.activePoofX, self.activePoofY) + end end - -- went_to / for_sends / farewell / delay: cleared window; TextBox draws + + self:drawDialog() end return TradeAnim diff --git a/src/ui/gen2/MagnetTrainRide.lua b/src/ui/gen2/MagnetTrainRide.lua index dc920687..5a3f6a0f 100644 --- a/src/ui/gen2/MagnetTrainRide.lua +++ b/src/ui/gen2/MagnetTrainRide.lua @@ -22,12 +22,14 @@ -- PAL_BG_YELLOW, out of a TOWN palette set at the current time of day -- (the routine pushes wEnvironment, forces TOWN, and pops it back). -- --- Two hardware details are not reproduced. The four player OBJs all carry --- OAM_PRIO, so on the cart they sit behind background colours 1-3 and only --- show through the window's colour 0; here they are drawn straight over the --- background, which looks the same everywhere the window is transparent and --- differs only if the sprite drifts over solid train tiles. And the ride --- cannot be skipped, exactly as on the cart: the loop reads no input at all. +-- Two hardware details from the cart are faithfully reproduced: +-- 1. Viewport wrapping: the 256x144 background scrolls in 3 LY override bands, +-- wrapped strictly within the 160x144 GB screen so pixels do not bleed into +-- the widescreen surround. +-- 2. OAM Priority (OAM_PRIO): the four player OBJs sit behind background +-- colours 1-3 and only show through the window's colour 0. This is drawn +-- via a base background pass, the player sprite, and an overlay pass where +-- shade 0 is transparent and solid train tiles mask the sprite. local Assets = require("src.render.Assets") local Chrome = require("src.ui.gen2.Chrome") @@ -46,6 +48,30 @@ local BG_W = 256 -- TILEMAP_WIDTH * 8 local TILES_PER_ROW = 16 -- every 2bpp sheet the importer writes local BLACK = { 0, 0, 0 } +-- Overlay shader for OAM_PRIO: shade 0 is transparent; shades 1-3 are solid +-- palette colors, masking any sprites beneath solid background tiles. +local OVERLAY_SHADER_SOURCE = [[ +extern vec3 pal0; +extern vec3 pal1; +extern vec3 pal2; +extern vec3 pal3; + +vec4 effect(vec4 tint, Image tex, vec2 uv, vec2 screen) { + vec4 px = Texel(tex, uv); + float shade = floor((1.0 - px.r) * 3.0 + 0.5); + vec3 rgb = pal0; + if (shade > 2.5) { + rgb = pal3; + } else if (shade > 1.5) { + rgb = pal2; + } else if (shade > 0.5) { + rgb = pal1; + } + float alpha = shade < 0.5 ? 0.0 : px.a; + return vec4(rgb, alpha) * tint; +} +]] + function MagnetTrainRide:wantsFillScale() return true end -- opts: toGoldenrod (the wScriptVar the officer's script set), onDone() @@ -97,7 +123,7 @@ function MagnetTrainRide:palette(slot) end -------------------------------------------------------------------------- --- Sheets +-- Sheets & Shaders -------------------------------------------------------------------------- local function sheetFor(path) @@ -159,22 +185,66 @@ function MagnetTrainRide:playerQuad(vtile) return quad end +function MagnetTrainRide:overlayShader() + if self.ovShader ~= nil then return self.ovShader or nil end + if not (love and love.graphics and love.graphics.newShader) then + self.ovShader = false + return nil + end + local ok, result = pcall(love.graphics.newShader, OVERLAY_SHADER_SOURCE) + self.ovShader = ok and result or false + return self.ovShader or nil +end + +local function palChannel(colors, index) + local c = colors and colors[index] + if not c then return 0, 0, 0 end + return (c[1] or 0) / 255, (c[2] or 0) / 255, (c[3] or 0) / 255 +end + +function MagnetTrainRide:useOverlayShader(colors) + local sh = self:overlayShader() + if not sh then return false end + local resolved = GbcPalette.resolve(colors) + for i = 0, 3 do + local u = "pal" .. i + if sh:hasUniform(u) then + local r, g, b = palChannel(resolved, i + 1) + sh:send(u, { r, g, b }) + end + end + love.graphics.setShader(sh) + return true +end + + -------------------------------------------------------------------------- --- The baked background +-- The baked backgrounds (Base + OAM_PRIO Overlay) -------------------------------------------------------------------------- --- DrawMagnetTrain plus SetMagnetTrainPals, rendered once into a 256x144 --- canvas. Tiles are drawn palette group by palette group so the three --- palettes cost three shader switches rather than one per tile. -function MagnetTrainRide:background() - if self.bgCanvas ~= nil then return self.bgCanvas or nil end +-- DrawMagnetTrain plus SetMagnetTrainPals, rendered once into 256x144 canvases. +-- Base canvas contains the full opaque background; Overlay canvas contains +-- solid shades 1-3 with shade 0 transparent for OAM_PRIO window masking. +function MagnetTrainRide:backgrounds() + if self.bgCanvas ~= nil then + return self.bgCanvas or nil, self.bgOverlayCanvas or nil + end self.bgCanvas = false + self.bgOverlayCanvas = false local rows = self.ride:tilemap() local sheet = self:tileSheet() - if not (rows and sheet) then return nil end - local ok, canvas = pcall(love.graphics.newCanvas, BG_W, SCREEN_H) - if not ok then return nil end - canvas:setFilter("nearest", "nearest") + if not (rows and sheet) then return nil, nil end + + local ok1, baseCanvas = pcall(love.graphics.newCanvas, BG_W, SCREEN_H) + if not ok1 then return nil, nil end + baseCanvas:setFilter("nearest", "nearest") + + local ok2, overlayCanvas = pcall(love.graphics.newCanvas, BG_W, SCREEN_H) + if ok2 and overlayCanvas then + overlayCanvas:setFilter("nearest", "nearest") + else + overlayCanvas = nil + end local groups = {} for row = 1, #rows do @@ -188,11 +258,12 @@ function MagnetTrainRide:background() local G = love.graphics local previous = G.getCanvas() - -- A canvas does not reset the transform: without this the map lands under - -- the renderer's letterbox scale and off the edge. - G.push() + G.push("all") G.origin() - G.setCanvas(canvas) + G.setScissor() + + -- 1. Base background canvas (shades 0-3) + G.setCanvas(baseCanvas) G.clear(0, 0, 0, 1) G.setColor(1, 1, 1, 1) local shader = GbcPalette.available() @@ -205,10 +276,35 @@ function MagnetTrainRide:background() end end if shader then GbcPalette.clear() end + + -- 2. Overlay canvas for OAM_PRIO (shades 1-3 solid, shade 0 transparent) + if overlayCanvas then + G.setCanvas(overlayCanvas) + G.clear(0, 0, 0, 0) + G.setColor(1, 1, 1, 1) + local ovShader = self:overlayShader() + for slot, list in pairs(groups) do + local colors = self:palette(slot) + if ovShader and colors then self:useOverlayShader(colors) end + for _, cell in ipairs(list) do + local quad = sheet.quads[cell[1]] + if quad then G.draw(sheet.image, quad, cell[2], cell[3]) end + end + end + if ovShader then G.setShader() end + end + G.setCanvas(previous) G.pop() - self.bgCanvas = canvas - return canvas + + self.bgCanvas = baseCanvas + self.bgOverlayCanvas = overlayCanvas + return baseCanvas, overlayCanvas +end + +function MagnetTrainRide:background() + local base = self:backgrounds() + return base end -------------------------------------------------------------------------- @@ -240,19 +336,24 @@ function MagnetTrainRide:update(_dt) end end -function MagnetTrainRide:drawBackground() - local canvas = self:background() +-- Draws the 3 LY override bands strictly wrapped inside the 160px GB screen. +function MagnetTrainRide:drawBands(canvas) if not canvas then return end local G = love.graphics G.setColor(1, 1, 1, 1) self.bandQuad = self.bandQuad - or love.graphics.newQuad(0, 0, BG_W, 1, BG_W, SCREEN_H) + or love.graphics.newQuad(0, 0, SCREEN_W, 1, BG_W, SCREEN_H) for _, band in ipairs(self.ride:bands()) do local top, bottom, scx = band[1], band[2], band[3] % BG_W local height = bottom - top + 1 - self.bandQuad:setViewport(0, top, BG_W, height, BG_W, SCREEN_H) - G.draw(canvas, self.bandQuad, -scx, top) - G.draw(canvas, self.bandQuad, -scx + BG_W, top) + local w1 = math.min(SCREEN_W, BG_W - scx) + self.bandQuad:setViewport(scx, top, w1, height, BG_W, SCREEN_H) + G.draw(canvas, self.bandQuad, 0, top) + if w1 < SCREEN_W then + local w2 = SCREEN_W - w1 + self.bandQuad:setViewport(0, top, w2, height, BG_W, SCREEN_H) + G.draw(canvas, self.bandQuad, w1, top) + end end end @@ -277,16 +378,19 @@ function MagnetTrainRide:drawPlayer() if colors then GbcPalette.use(colors) end G.setColor(1, 1, 1, 1) for _, entry in ipairs(oam) do - local quad = self:playerQuad(entry.tile) - if quad then - G.draw(sheet.image, quad, - entry.x + (entry.xflip and 8 or 0), entry.y, 0, - entry.xflip and -1 or 1, 1) + if entry.x >= -8 and entry.x < SCREEN_W and entry.y >= -16 and entry.y < SCREEN_H then + local quad = self:playerQuad(entry.tile) + if quad then + G.draw(sheet.image, quad, + entry.x + (entry.xflip and 8 or 0), entry.y, 0, + entry.xflip and -1 or 1, 1) + end end end if colors then GbcPalette.clear() end end + -- The backdrop is BG colour 0 of the gray palette the train body uses; on the -- cart it is what shows wherever nothing was drawn. function MagnetTrainRide:backdrop() @@ -299,13 +403,24 @@ function MagnetTrainRide:drawPanel() G.setColor(backdrop[1] / 255, backdrop[2] / 255, backdrop[3] / 255, 1) G.rectangle("fill", 0, 0, SCREEN_W, SCREEN_H) G.setColor(1, 1, 1, 1) - self:drawBackground() + + local base, overlay = self:backgrounds() + -- 1. Base background (bushes, train body, window aperture) + self:drawBands(base) + -- 2. Player sprite (OAM_PRIO: sits behind train body, visible through window) self:drawPlayer() + -- 3. Train body / frame overlay (colors 1-3 mask sprite; color 0 is transparent) + self:drawBands(overlay) + G.setColor(1, 1, 1, 1) end function MagnetTrainRide:draw() + local G = love.graphics + G.push("all") + G.setScissor(0, 0, SCREEN_W, SCREEN_H) self:drawPanel() + G.pop() end -- MagnetTrain_LoadGFX_PlayMusic opens on ClearBGPalettes / ClearSprites @@ -323,7 +438,8 @@ function MagnetTrainRide:drawWidescreen(winW, winH) G.setColor(1, 1, 1, 1) local scale = Chrome.fitScale(winW, winH) local ox, oy = Chrome.fitOrigin(winW, winH, scale) - G.push() + G.push("all") + G.setScissor(ox, oy, SCREEN_W * scale, SCREEN_H * scale) G.translate(ox, oy) G.scale(scale, scale) self:drawPanel() @@ -331,3 +447,6 @@ function MagnetTrainRide:drawWidescreen(winW, winH) end return MagnetTrainRide + + + diff --git a/tests/engine/android_exit_to_launcher_test.lua b/tests/engine/android_exit_to_launcher_test.lua index 247366d5..64ae7165 100644 --- a/tests/engine/android_exit_to_launcher_test.lua +++ b/tests/engine/android_exit_to_launcher_test.lua @@ -77,4 +77,26 @@ do check(Runtime.modRequire == nil, "Runtime.reset clears modRequire") end +-- 4. returnToLauncher / closeEditor also clear Assets.loader (orphaned Loader) +do + local Assets = require("src.render.Assets") + Assets.installLoader({ + overrideOrder = function() return { { id = "x", path = "mods/x" } } end, + derivedPath = function() return nil end, + }) + check(Assets.loader ~= nil, "Assets.loader installed for the session") + Assets.installLoader(nil) + check(Assets.loader == nil, "session teardown clears Assets.loader") +end + +-- 5. Gen1 Game:reset exists so main.lua need not guess field names +do + local Game = require("src.core.Game") + check(type(Game.reset) == "function", "Game:reset is defined for in-process return") + Game.mods = { stale = true } + Game:reset() + check(Game.mods == nil, "Game:reset clears session fields") + check(type(Game.load) == "function", "Game:reset keeps methods") +end + T.finish("android_exit_to_launcher_test") diff --git a/tests/engine/cache_fs_red_migration_test.lua b/tests/engine/cache_fs_red_migration_test.lua index 7ab2cd2b..cea34cca 100644 --- a/tests/engine/cache_fs_red_migration_test.lua +++ b/tests/engine/cache_fs_red_migration_test.lua @@ -57,6 +57,36 @@ eq(love.filesystem.read("assets/generated/fonts/font.png"), "font-bytes", eq(love.filesystem.read("data/generated/constants.lua"), "return {}", "post-mount probe reads red data at the un-prefixed path") +-- unmountVersion peels generated overlays (LIFO) then the version folder, so +-- a later Play/Edit on another game cannot resolve this version's files. +do + local mounts = love.filesystem._mounts + local archives = {} + for _, m in ipairs(mounts) do archives[#archives + 1] = m.archive end + local function indexOf(name) + for i, a in ipairs(archives) do if a == name then return i end end + end + local dataIdx = indexOf("red/data/generated") + local assetsIdx = indexOf("red/assets/generated") + check(dataIdx and assetsIdx, "mountVersion recorded generated-tree overlays") + check(assetsIdx > dataIdx, + "assets/generated was mounted after data/generated (LIFO unmount peels it first)") +end +check(CacheFs.unmountVersion("red") == true, "unmountVersion(red) returns true") +check(love.filesystem.read("assets/generated/fonts/font.png") == nil, + "post-unmount probe no longer sees red assets at the un-prefixed path") +check(love.filesystem.read("data/generated/constants.lua") == nil, + "post-unmount probe no longer sees red data at the un-prefixed path") +do + local left = {} + for _, m in ipairs(love.filesystem._mounts) do + if tostring(m.archive):find("red", 1, true) then + left[#left + 1] = m.archive + end + end + eq(#left, 0, "no red/ mounts remain after unmountVersion") +end + -- no legacy cache at all: migration is a no-op, not an error love.filesystem.remove("red/rom-cache.complete") love.filesystem.remove("red/data/generated/maps.lua") diff --git a/tests/engine/launcher_session_teardown_test.lua b/tests/engine/launcher_session_teardown_test.lua new file mode 100644 index 00000000..6ceee3e2 --- /dev/null +++ b/tests/engine/launcher_session_teardown_test.lua @@ -0,0 +1,111 @@ +-- In-process launcher session teardown: Game:reset, Renderer canvas release, +-- Runtime/Assets/LegacyCompat cleanup, and editor package.loaded discovery flush. +-- luajit tests/engine/launcher_session_teardown_test.lua + +package.path = "./?.lua;./?/init.lua;" .. package.path +love = love or require("tests.love_stub") + +local T = require("tests.harness") +local check, eq = T.check, T.eq + +local Runtime = require("src.mods.Runtime") +local Assets = require("src.render.Assets") +local LegacyCompat = require("src.mods.LegacyCompat") +local Game = require("src.core.Game") +local Renderer = require("src.render.Renderer") +local StateStack = require("src.core.StateStack") + +-- ---- Game:reset drops instance state, keeps methods ---------------------- +do + StateStack:init() + StateStack:push({ name = "stale" }) + Game.mods = { id = "orphan" } + Game.save = { money = 1 } + Game.network = { live = true } -- future field: must not need a whitelist + Game.stack = StateStack + Game.renderer = Renderer + Renderer.canvas = love.graphics.newCanvas(8, 8) + + Game:reset() + + check(type(Game.load) == "function", "Game:reset keeps methods") + check(type(Game.reset) == "function", "Game:reset keeps itself") + check(Game.mods == nil, "Game:reset clears mods") + check(Game.save == nil, "Game:reset clears save") + check(Game.network == nil, "Game:reset clears arbitrary future fields") + check(Game.stack == nil, "Game:reset clears stack reference") + check(Game.renderer == nil, "Game:reset clears renderer reference") + check(StateStack:top() == nil, "Game:reset cleared the shared StateStack") +end + +-- ---- Renderer:init releases prior canvases before realloc ---------------- +do + local first = love.graphics.newCanvas(16, 16) + Renderer.canvas = first + Renderer.battleHUDCanvas = love.graphics.newCanvas(16, 16) + Renderer.worldCanvas = love.graphics.newCanvas(16, 16) + Renderer.uprightCanvas = love.graphics.newCanvas(16, 16) + Renderer:init() + check(first.released == true, + "Renderer:init Object:release()s the previous primary canvas") + check(Renderer.canvas ~= nil and Renderer.canvas ~= first, + "Renderer:init allocates a fresh primary canvas") + check(Renderer.canvas.released ~= true, + "the new primary canvas is not released") + -- second init also releases the one just created + local second = Renderer.canvas + Renderer:init() + check(second.released == true, + "a second Renderer:init releases the canvas from the prior init") +end + +-- ---- Shared singleton teardown contract (closeEditor / returnToLauncher) +do + Runtime.install({ emit = function() end }, { call = function() end }, { "e" }) + Assets.installLoader({ + overrideOrder = function() return {} end, + derivedPath = function() return nil end, + }) + LegacyCompat.reports = { some_mod = { order = {} } } + + -- Mirrors main.lua teardownMountedSession without mounting CacheFs. + require("src.core.Data"):unloadGenerated() + Runtime.reset() + Assets.installLoader(nil) + LegacyCompat.reset() + + check(Runtime.errors == nil, "teardown clears Runtime.errors") + check(Assets.loader == nil, "teardown clears Assets.loader") + eq(next(LegacyCompat.reports), nil, "teardown clears LegacyCompat.reports") +end + +-- ---- Editor package.loaded discovery flush (no panel whitelist) --------- +do + love.filesystem.write("tools/save-editor/App.lua", "return {}") + love.filesystem.write("tools/save-editor/panels/NewPanel.lua", "return {}") + package.loaded["App"] = { stale = true } + package.loaded["NewPanel"] = { stale = true } + package.loaded["src.core.Data"] = package.loaded["src.core.Data"] -- keep + + local function isEditorFlat(name) + if name:find("[./]") then return false end + return love.filesystem.getInfo("tools/save-editor/" .. name .. ".lua") ~= nil + or love.filesystem.getInfo("tools/save-editor/panels/" .. name .. ".lua") ~= nil + end + for k in pairs(package.loaded) do + if type(k) == "string" + and (k:find("save%-editor", 1, false) or isEditorFlat(k)) then + package.loaded[k] = nil + end + end + + check(package.loaded["App"] == nil, "discovery flush drops flat App") + check(package.loaded["NewPanel"] == nil, + "discovery flush drops a new panel without a hardcoded list") + check(package.loaded["src.core.Data"] ~= nil, + "discovery flush leaves engine modules alone") + love.filesystem.remove("tools/save-editor/App.lua") + love.filesystem.remove("tools/save-editor/panels/NewPanel.lua") +end + +T.finish("launcher_session_teardown_test") diff --git a/tests/gen2_diploma_test.lua b/tests/gen2_diploma_test.lua index 151d12d8..3f670afd 100644 --- a/tests/gen2_diploma_test.lua +++ b/tests/gen2_diploma_test.lua @@ -42,7 +42,7 @@ check(type(RomExtractorGen2.extractDiploma) == "function", "RomExtractorGen2:extractDiploma exists") check(extractorSource:find("results.diploma = self:extractDiploma()", 1, true) ~= nil, "and RomExtractorGen2:run calls it") -check(extractorSource:find("local STAGE_COUNT = 26", 1, true) ~= nil, +check(extractorSource:find("local STAGE_COUNT = 27", 1, true) ~= nil, "STAGE_COUNT counts the new stage, so the progress bar still ends at 1") -- The three symbols the stage reads have to be in the curated manifest set or diff --git a/tests/gen2_magnet_train_test.lua b/tests/gen2_magnet_train_test.lua index 4e70649d..0b3c7ecd 100644 --- a/tests/gen2_magnet_train_test.lua +++ b/tests/gen2_magnet_train_test.lua @@ -266,6 +266,18 @@ do "and with no hook at all the special is a no-op, not a clobber") end +-- ---- MagnetTrainRide UI screen -------------------------------------------- +do + local MagnetTrainRide = require("src.ui.gen2.MagnetTrainRide") + check(MagnetTrainRide.isOpaque, "MagnetTrainRide is opaque") + local ride = MagnetTrainRide.new(nil, { toGoldenrod = false }) + check(ride:wantsFillScale(), "wantsFillScale returns true") + check(ride:drawsWidescreen(), "drawsWidescreen returns true") + check(type(ride.drawBands) == "function", "drawBands exists") + check(type(ride.backgrounds) == "function", "backgrounds exists for OAM_PRIO") +end + + -- ---- the arrival, from `warpcheck` to the officer's line ------------------- -- -- The ride is only half the feature: the two station scripts end diff --git a/tests/gen2_rom_text_test.lua b/tests/gen2_rom_text_test.lua new file mode 100644 index 00000000..8ffefcc5 --- /dev/null +++ b/tests/gen2_rom_text_test.lua @@ -0,0 +1,139 @@ +-- Gen 2's engine text, the counterpart to Gen 1's data/generated/text.lua. +-- +-- Gold and Silver had no label-keyed string table at all: the manifests +-- carried no `text` section, RomExtractorGen2 had no extractText, and +-- game.data.text was never assigned, so every call through +-- src/core/RomText.lua fell back to the literal written beside it. These +-- cover the three halves of closing that: the manifest names the labels and +-- resolves every one, the decoder emits the runtime name slots rather than +-- dropping them, and RomText fills those slots. +-- +-- GOLD_CACHE="..." luajit tests/gen2_rom_text_test.lua +-- +-- ROM-free apart from the last section, which reads an imported cache's +-- rom_text.lua and skips cleanly when there is none. +package.path = "./?.lua;./?/init.lua;" .. package.path + +local S = require("tests.harness").suite("gen2 rom text") +local check, eq = S.check, S.eq + +love = require("tests.love_stub") + +local Json = require("src.link.Json") +local romText = require("src.core.RomText") + +local function manifest(path) + local file = assert(io.open(path, "r")) + local data = assert(Json.decode(file:read("*a"))) + file:close() + return data +end + +-- ---- the label list, and that every label resolves ------------------------ +-- A label the list names but the symbol table cannot place would fail the +-- import at the Dialogue stage rather than at generation time, so the pairing +-- is asserted here instead. +for _, edition in ipairs({ "gold", "silver" }) do + local data = manifest("tools/rom_manifest_" .. edition .. ".json") + local labels = (data.text or {}).labels or {} + check((data.text or {}).labels ~= nil, + edition .. " carries a text section") + check(#labels > 800, + ("%s names %d text labels"):format(edition, #labels)) + + local unresolved = {} + for _, label in ipairs(labels) do + if not data.symbols[label] then unresolved[#unresolved + 1] = label end + end + eq(#unresolved, 0, + ("every %s text label resolves to a symbol (%s)") + :format(edition, table.concat(unresolved, ", "):sub(1, 60))) + + local named = {} + for _, label in ipairs(labels) do named[label] = true end + + -- data/text/ also holds keyboard layouts and kana tables. Decoded as text + -- they come out as keyboard rows, so make_gold_manifest.TEXT_SOURCES leaves + -- their files out. `BattleText::` is excluded for a different reason: it + -- is a bank anchor sharing an address with the first real label under it, + -- and its own comment in the disassembly says so. + for _, excluded in ipairs({ "NameInputLower", "MailEntry_Uppercase", + "Dakutens", "Gen1TrainerClassNames", "BattleText" }) do + check(not named[excluded], + edition .. " leaves " .. excluded .. " out of the text list") + end +end + +-- Both editions describe the same strings; only the addresses move. +do + local gold = (manifest("tools/rom_manifest_gold.json").text or {}).labels or {} + local silver = + (manifest("tools/rom_manifest_silver.json").text or {}).labels or {} + eq(#gold, #silver, "Gold and Silver name the same number of labels") + local mismatch + for index, label in ipairs(gold) do + if silver[index] ~= label then mismatch = label; break end + end + eq(mismatch, nil, "and the same labels in the same order") +end + +-- ---- the slots RomText fills ---------------------------------------------- +-- decodeGen2Text emits {USER}, {TARGET} and {ENEMY} for the three names +-- PlaceMoveUsersName / PlaceMoveTargetsName / PlaceEnemysName write at +-- runtime (home/text.asm:302, :307, :327). Dropped, the line printed with a +-- hole where the name belongs. +do + local data = { text = { + SubTookDamageText = "The SUBSTITUTE\ntook damage for\v{TARGET}!", + WantsToBattleText = "{ENEMY}\nwants to battle!", + ConfusedNoMoreText = "{USER}'s\nconfused no more!", + SuperEffectiveText = "It's super-\neffective!", + } } + + eq(romText(data, "SubTookDamageText", "fallback", "GEODUDE"), + "The SUBSTITUTE\ntook damage for\vGEODUDE!", + "a {TARGET} slot takes the name the caller passes") + eq(romText(data, "WantsToBattleText", "fallback", "FALKNER"), + "FALKNER\nwants to battle!", "and so does {ENEMY}") + eq(romText(data, "ConfusedNoMoreText", "fallback", "CYNDAQUIL"), + "CYNDAQUIL's\nconfused no more!", "and {USER}") + eq(romText(data, "SuperEffectiveText", "It's super effective!"), + "It's super-\neffective!", + "a line with no slot comes back as the cart wrote it") + eq(romText(data, "NoSuchLabel", "the engine's own wording"), + "the engine's own wording", + "and a label the cache does not carry falls back") +end + +-- ---- against a real imported cache ---------------------------------------- +do + local cache = os.getenv("GOLD_CACHE") + if not cache then + local home = os.getenv("HOME") or "" + cache = home .. "/Library/Application Support/LOVE/gold-dev/gold" + end + local path = cache .. "/data/generated/rom_text.lua" + local file = io.open(path, "r") + if not file then + print(" (skipped: no rom_text.lua at " .. path .. ")") + else + file:close() + local texts = assert(loadfile(path))() + check(next(texts) ~= nil, "the imported cache carries strings") + -- Wording taken from pokegold's data/text/battle.asm, with \n for `line` + -- and \v for `cont`, which is what RomExtractorGen2 decodes those to. + eq(texts.SuperEffectiveText, "It's super-\neffective!", + "SuperEffectiveText comes off the cart hyphenated and broken") + eq(texts.NotVeryEffectiveText, "It's not very\neffective…", + "NotVeryEffectiveText ends on the ellipsis glyph") + eq(texts.StartPerishText, "Both POKéMON will\nfaint in 3 turns!", + "StartPerishText names both sides") + eq(texts.ButItFailedText, "But it failed!", "and a one-row line is one row") + eq(texts.SubTookDamageText, "The SUBSTITUTE\ntook damage for\v{TARGET}!", + "SpikesText's neighbour keeps its cont row and its target slot") + eq(texts.PlayerHitTimesText, "Hit {NUM} times!", + "a text_decimal reads back as {NUM}") + end +end + +S.finish() diff --git a/tests/gen2_trade_gfx_test.lua b/tests/gen2_trade_gfx_test.lua index 3c08d245..2fbded88 100644 --- a/tests/gen2_trade_gfx_test.lua +++ b/tests/gen2_trade_gfx_test.lua @@ -45,7 +45,7 @@ check(type(RomExtractorGen2.extractTrade) == "function", "RomExtractorGen2:extractTrade exists") check(extractorSource:find("results.trade = self:extractTrade()", 1, true) ~= nil, "and RomExtractorGen2:run calls it") -check(extractorSource:find("local STAGE_COUNT = 26", 1, true) ~= nil, +check(extractorSource:find("local STAGE_COUNT = 27", 1, true) ~= nil, "STAGE_COUNT counts the new stage, so the progress bar still ends at 1") -- pokegold.sym, bank $0a. These are also what the cache is checked against diff --git a/tests/love_stub.lua b/tests/love_stub.lua index 0e35f8af..28ad9244 100644 --- a/tests/love_stub.lua +++ b/tests/love_stub.lua @@ -56,7 +56,9 @@ stub.graphics = { end, newQuad = function(x, y, w, h) return { x = x, y = y, w = w, h = h } end, newCanvas = function(w, h) - return setmetatable({ w = w, h = h, setFilter = noop }, Image) + local canvas = setmetatable({ w = w, h = h, setFilter = noop, released = false }, Image) + function canvas:release() self.released = true end + return canvas end, newSpriteBatch = function(image, size) local batch = { image = image, sprites = {} } diff --git a/tests/run_tests.lua b/tests/run_tests.lua index 3b32b255..b2c10116 100644 --- a/tests/run_tests.lua +++ b/tests/run_tests.lua @@ -3526,6 +3526,7 @@ runSuites({ "tests/gen2_decorations_test.lua", "tests/gen2_pokerus_test.lua", "tests/gen2_common_text_test.lua", + "tests/gen2_rom_text_test.lua", "tests/gen2_magnet_train_test.lua", "tests/gen2_bank_of_mom_test.lua", "tests/gen2_trainerhouse_test.lua", diff --git a/tests/save_editor_mod_tests.lua b/tests/save_editor_mod_tests.lua index 1fac297f..9fccce8d 100644 --- a/tests/save_editor_mod_tests.lua +++ b/tests/save_editor_mod_tests.lua @@ -143,6 +143,28 @@ local ok, err = pcall(function() check(#report.lostMons == 0 and probe.party[1].species == "EDITMON", "validate keeps the modded mon while the mod is enabled") + -- Second editor session in the same process (launcher Close → Edit again): + -- host teardown must leave Runtime/Assets clean and Data unloaded so the + -- next App.load remounts mods instead of serving vanilla catalogs. + App.unload() + if Data._pristineKeys or Data.pokemon then Data:unloadGenerated() end + Runtime.reset() + Assets.installLoader(nil) + package.loaded["App"] = nil + package.loaded["Catalog"] = nil + App = require("App") + App.load(tmpPath) + S = App.getState() + loaded = S.mods:status().loaded + check(#loaded == 1 and loaded[1].id == "zz_editor_fixture", + "fixture mod loads again after host-style teardown") + hasSpecies = false + for _, id in ipairs(S.cat.species) do + if id == "EDITMON" then hasSpecies = true end + end + check(hasSpecies, "second App.load catalog still carries the mod's mon") + check(Data.pokemon.EDITMON ~= nil, "second merge lands EDITMON in Data again") + -- Gold-targeted mods: spa/spd records are usable, and a Gen 1-only -- manifest stays out of Gold (no ROM cache / App.load("gold") required). local ModTargets = require("src.mods.ModTargets") diff --git a/tests/yellow_title_palette_test.lua b/tests/yellow_title_palette_test.lua new file mode 100644 index 00000000..33c5d0db --- /dev/null +++ b/tests/yellow_title_palette_test.lua @@ -0,0 +1,48 @@ +package.path = "./?.lua;./?/init.lua;" .. package.path +local S = require("tests.harness").suite("yellow title palette") +local check, eq = S.check, S.eq + +local GameVersion = require("src.core.GameVersion") +local PaletteFX = require("src.render.PaletteFX") +local TitleState = require("src.ui.TitleState") + +GameVersion.set("yellow") +local prevMode = PaletteFX.mode + +-- Test 1: SGB mode +PaletteFX.setMode("gbc") +local mewmonSgb = PaletteFX.pal(nil, "MEWMON") +check(mewmonSgb ~= nil, "MEWMON palette exists in SGB mode on Yellow") +-- In Yellow SGB SuperPalettes: MEWMON color 1 is Yellow {255, 247, 181}, color 2 is Red {222, 132, 132} +eq(mewmonSgb[1][1], 255, "SGB: Color 0 is white R=255") +eq(mewmonSgb[2][1], 255, "SGB: Color 1 is yellow R=255") +eq(mewmonSgb[3][1], 222, "SGB: Color 2 is red R=222") + +-- Test 2: ADVANCED mode (redpp) +PaletteFX.setMode("redpp") +local mewmonAdv = PaletteFX.pal(nil, "MEWMON") +check(mewmonAdv ~= nil, "MEWMON palette exists in ADVANCED mode on Yellow") +-- Must NOT be Red++'s Mew purple {115, 33, 165}! It must be Yellow's Pikachu palette! +eq(mewmonAdv[1][1], 255, "ADVANCED: Color 0 is white R=255 (Pikachu eye sclera)") +eq(mewmonAdv[2][1], 255, "ADVANCED: Color 1 is yellow R=255 (Pikachu body)") +check(mewmonAdv[3][3] < 150, "ADVANCED: Color 2 is not purple (B < 150, red cheeks)") + +-- Test 3: OG YELLOW mode (ogred on Yellow) +PaletteFX.setMode("ogred") +local mewmonOg = PaletteFX.pal(nil, "MEWMON") +check(mewmonOg ~= nil, "MEWMON palette exists in OG YELLOW mode") +eq(mewmonOg[1][1], 255, "OG YELLOW: Color 0 is white") +eq(mewmonOg[2][1], 255, "OG YELLOW: Color 1 is yellow") + +-- Test 4: TitleState sgbPalettes +local fakeGame = { data = { palettes = PaletteFX.yellowPack() } } +local ts = { yellowLayout = true } +local zones = TitleState.sgbPalettes(ts, fakeGame) +check(zones ~= nil and #zones >= 3, "TitleState produces zones for Yellow") +eq(zones[1].colors, PaletteFX.pal(fakeGame.data, "LOGO2"), "Zone 1 uses LOGO2") +eq(zones[2].colors, PaletteFX.pal(fakeGame.data, "MEWMON"), "Zone 2 uses MEWMON (Pikachu yellow/red)") + +PaletteFX.setMode(prevMode) +GameVersion.set("red") + +S.finish() diff --git a/tools/make_gold_manifest.py b/tools/make_gold_manifest.py index 656c9f99..074e7811 100644 --- a/tools/make_gold_manifest.py +++ b/tools/make_gold_manifest.py @@ -907,9 +907,62 @@ REQUIRED_SYMBOLS = { } -def embedded_symbols(symbols, pokemon_labels, song_labels=()): - """Resolve REQUIRED_SYMBOLS + pic labels + Music_* song headers.""" - names = set(REQUIRED_SYMBOLS) | set(pokemon_labels) | set(song_labels) +# The engine's own text, the counterpart to make_rom_manifest.text_metadata. +# +# Only these five carry dialogue. data/text/'s other files are character +# tables rather than strings: dakutens.asm and name_input_chars.asm / +# mail_input_chars.asm are keyboard layouts, and unused_gen1_trainer_names.asm +# is a dead Gen 1 leftover. Decoding those as text yields keyboard rows and +# kana runs, so they are left out by name rather than filtered afterwards. +# +# None of the five carries an IF DEF(_GOLD) / IF DEF(_SILVER) arm, so the +# label set is one list for both editions and make_silver_manifest.py inherits +# it with the addresses re-resolved from pokesilver.sym. +TEXT_SOURCES = ( + "battle.asm", + "common_1.asm", + "common_2.asm", + "common_3.asm", + "std_text.asm", +) + + +def text_labels(pokegold): + """Every text label in TEXT_SOURCES, in sorted order. + + Unlike Gen 1 there is no `dynamic` map beside this. pokered's decoder is + told which runtime token each label carries; RomExtractorGen2's reads the + cart's own TX_RAM / TX_DECIMAL command bytes and emits {STRBUF} / {NUM} + itself, so the label alone is enough. + """ + labels = set() + for name in TEXT_SOURCES: + path = os.path.join(pokegold, "data/text", name) + pending = None + for _, line in read_asm(path): + stripped = line.strip() + if not stripped: + continue + match = re.match(r"(\w+)::?\s*$", stripped) + if match: + # A label whose next line is another label owns no string of + # its own. `BattleText::` is the one in this set: its own + # comment says "used only for BANK(BattleText)", and it shares + # an address with the first real label under it, so taking it + # would decode that neighbour's string a second time. + pending = match.group(1) + continue + if pending: + labels.add(pending) + pending = None + return sorted(labels) + + +def embedded_symbols(symbols, pokemon_labels, song_labels=(), + text_label_names=()): + """Resolve REQUIRED_SYMBOLS + pic labels + songs + text labels.""" + names = (set(REQUIRED_SYMBOLS) | set(pokemon_labels) + | set(song_labels) | set(text_label_names)) for symbol_name in symbols.by_name: # Pokedex entries are split across four banks and the game derives the # bank arithmetically from the species id (radio.asm's rlca/maskbits @@ -1111,6 +1164,7 @@ def generate(pokegold, symbols_path): pokemon_labels.append(asset["backLabel"]) songs = music_order(pokegold) + text_label_names = text_labels(pokegold) sfx = sfx_order(pokegold) # Index 0 is NO_ITEM, so the parsed list is already 1-based on item id. @@ -1202,6 +1256,9 @@ def generate(pokegold, symbols_path): "battleAnimBgPaletteOrder": battle_anim_bg_pals, "battleAnimObPaletteOrder": battle_anim_ob_pals, }, + # Label -> decoded string is built at import time from these, the + # same way Gen 1 builds data/generated/text.lua from its own list. + "text": {"labels": text_label_names}, "charmap": charmap(pokegold), "fontCharmap": font_extract.parse_charmap(pokegold), "pokemonAssets": assets, @@ -1210,7 +1267,8 @@ def generate(pokegold, symbols_path): "maps": {name: map_groups[name] for name in map_order}, "tilesets": {name: {} for name in tilesets}, } - data["symbols"] = embedded_symbols(symbols, pokemon_labels, songs) + data["symbols"] = embedded_symbols( + symbols, pokemon_labels, songs, text_label_names) return data diff --git a/tools/rom_manifest_gold.json b/tools/rom_manifest_gold.json index 8c250e00..333445da 100644 --- a/tools/rom_manifest_gold.json +++ b/tools/rom_manifest_gold.json @@ -12712,6 +12712,22 @@ 16, 19557 ], + "AlreadyAsleepText": [ + 64, + 23414 + ], + "AlreadyConfusedText": [ + 64, + 22417 + ], + "AlreadyParalyzedText": [ + 64, + 24391 + ], + "AlreadyPoisonedText": [ + 64, + 23471 + ], "AmpharosBackpic": [ 29, 25057 @@ -12816,6 +12832,30 @@ 106, 18033 ], + "AskNumber1FText": [ + 64, + 19476 + ], + "AskNumber1MText": [ + 64, + 19144 + ], + "AskNumber2FText": [ + 64, + 19575 + ], + "AskNumber2MText": [ + 64, + 19229 + ], + "AttackMissed2Text": [ + 64, + 23016 + ], + "AttackMissedText": [ + 64, + 22997 + ], "AzumarillBackpic": [ 29, 32162 @@ -12832,6 +12872,10 @@ 9, 25135 ], + "BadlyPoisonedText": [ + 64, + 23451 + ], "BargainShopData": [ 5, 24282 @@ -12860,6 +12904,178 @@ 2, 23561 ], + "BattleText_AnEGGCantBattle": [ + 64, + 21740 + ], + "BattleText_CantEscape": [ + 64, + 21862 + ], + "BattleText_CantEscape2": [ + 64, + 21761 + ], + "BattleText_EnemyFled": [ + 64, + 20885 + ], + "BattleText_EnemyIsAboutToUseWillPlayerChangeMon": [ + 64, + 21648 + ], + "BattleText_EnemyMonFainted": [ + 64, + 21358 + ], + "BattleText_EnemySentOut": [ + 64, + 21694 + ], + "BattleText_EnemyWasDefeated": [ + 64, + 21408 + ], + "BattleText_GotAwaySafely": [ + 64, + 21821 + ], + "BattleText_ItemHealedConfusion": [ + 64, + 22384 + ], + "BattleText_ItemsCantBeUsedHere": [ + 64, + 21945 + ], + "BattleText_MonCantBeRecalled": [ + 64, + 21992 + ], + "BattleText_MonFainted": [ + 64, + 21563 + ], + "BattleText_MonHasNoMovesLeft": [ + 64, + 22072 + ], + "BattleText_MonIsAlreadyOut": [ + 64, + 21971 + ], + "BattleText_MonsLightScreenFell": [ + 64, + 21165 + ], + "BattleText_MonsReflectFaded": [ + 64, + 21195 + ], + "BattleText_PlayerPickedUpPayDayMoney": [ + 64, + 20748 + ], + "BattleText_RainContinuesToFall": [ + 64, + 21221 + ], + "BattleText_SafeguardFaded": [ + 64, + 21144 + ], + "BattleText_StringBuffer1GrewToLevel": [ + 64, + 22114 + ], + "BattleText_TargetRecoveredWithItem": [ + 64, + 21062 + ], + "BattleText_TargetWasHitByFutureSight": [ + 64, + 21116 + ], + "BattleText_TargetsEncoreEnded": [ + 64, + 22096 + ], + "BattleText_TheMoveIsDisabled": [ + 64, + 22049 + ], + "BattleText_TheRainStopped": [ + 64, + 21293 + ], + "BattleText_TheSandstormRages": [ + 64, + 21271 + ], + "BattleText_TheSandstormSubsided": [ + 64, + 21333 + ], + "BattleText_TheSunlightFaded": [ + 64, + 21312 + ], + "BattleText_TheSunlightIsStrong": [ + 64, + 21246 + ], + "BattleText_TheresNoEscapeFromTrainerBattle": [ + 64, + 21775 + ], + "BattleText_TheresNoPPLeftForThisMove": [ + 64, + 22015 + ], + "BattleText_TheresNoWillToBattle": [ + 64, + 21713 + ], + "BattleText_UseNextMon": [ + 64, + 21577 + ], + "BattleText_UserFledUsingAStringBuffer1": [ + 64, + 21839 + ], + "BattleText_UserHurtBySpikes": [ + 64, + 21876 + ], + "BattleText_UserRecoveredPPUsing": [ + 64, + 21087 + ], + "BattleText_UserWasReleasedFromStringBuffer1": [ + 64, + 22458 + ], + "BattleText_UsersHurtByStringBuffer1": [ + 64, + 22439 + ], + "BattleText_UsersStringBuffer1Activated": [ + 64, + 21924 + ], + "BattleText_WildFled": [ + 64, + 20867 + ], + "BattleText_WildMonIsAngry": [ + 64, + 22166 + ], + "BattleText_WildMonIsEating": [ + 64, + 22143 + ], "BattleWinSlideInEnemyTrainerFrontpic": [ 15, 27158 @@ -12876,6 +13092,14 @@ 106, 19025 ], + "BeatUpAttackText": [ + 64, + 25058 + ], + "BecameConfusedText": [ + 64, + 22364 + ], "BeedrillBackpic": [ 24, 17173 @@ -12888,6 +13112,14 @@ 104, 17941 ], + "BeganToNapText": [ + 64, + 22758 + ], + "BellChimedText": [ + 64, + 23381 + ], "BellossomBackpic": [ 26, 25968 @@ -12912,6 +13144,10 @@ 105, 16837 ], + "BellyDrumText": [ + 64, + 24967 + ], "BillsPCOrangePalette": [ 2, 21965 @@ -12928,6 +13164,10 @@ 104, 17276 ], + "BlewSpikesText": [ + 64, + 24899 + ], "BlisseyBackpic": [ 29, 30565 @@ -12940,14 +13180,26 @@ 107, 21761 ], + "BlownAwayText": [ + 64, + 23687 + ], "BoltEmote": [ 5, 17737 ], + "BracedItselfText": [ + 64, + 24750 + ], "BugCatchingContestantEventFlagTable": [ 4, 32186 ], + "BugContestPrizeNoRoomText": [ + 64, + 20500 + ], "BulbasaurBackpic": [ 28, 32477 @@ -12960,6 +13212,10 @@ 104, 16384 ], + "ButItFailedText": [ + 64, + 24229 + ], "ButterfreeBackpic": [ 21, 21096 @@ -12976,6 +13232,10 @@ 26, 26667 ], + "CantEscapeNowText": [ + 64, + 24492 + ], "CardFlipLZ01": [ 56, 21795 @@ -13112,6 +13372,10 @@ 48, 16384 ], + "ClampedByText": [ + 64, + 22542 + ], "ClefableBackpic": [ 22, 24685 @@ -13164,10 +13428,82 @@ 105, 19293 ], + "CoinVendor_Buy500CoinsText": [ + 64, + 20375 + ], + "CoinVendor_Buy50CoinsText": [ + 64, + 20344 + ], + "CoinVendor_CancelText": [ + 64, + 20469 + ], + "CoinVendor_CoinCaseFullText": [ + 64, + 20436 + ], + "CoinVendor_IntroText": [ + 64, + 20267 + ], + "CoinVendor_NoCoinCaseText": [ + 64, + 20196 + ], + "CoinVendor_NotEnoughMoneyText": [ + 64, + 20407 + ], + "CoinVendor_WelcomeText": [ + 64, + 20167 + ], + "CoinsScatteredText": [ + 64, + 24042 + ], + "ConfusedNoMoreText": [ + 64, + 22342 + ], "ContestMons": [ 37, 31672 ], + "ContestResults_ConsolationPrizeText": [ + 64, + 19913 + ], + "ContestResults_DidNotWinText": [ + 64, + 19967 + ], + "ContestResults_JoinUsNextTimeText": [ + 64, + 19875 + ], + "ContestResults_PartyFullText": [ + 64, + 20053 + ], + "ContestResults_PlayerWonAPrizeText": [ + 64, + 19818 + ], + "ContestResults_ReadyToJudgeText": [ + 64, + 19046 + ], + "ContestResults_ReturnPartyText": [ + 64, + 20001 + ], + "CopiedStatsText": [ + 64, + 25003 + ], "CopyBackpic": [ 15, 31090 @@ -13188,6 +13524,14 @@ 107, 19589 ], + "CoveredByVeilText": [ + 64, + 24785 + ], + "CrashedText": [ + 64, + 23035 + ], "CreditsBellossomGFX": [ 33, 27958 @@ -13216,6 +13560,10 @@ 58, 20882 ], + "CriticalHitText": [ + 64, + 23099 + ], "CrobatBackpic": [ 29, 30296 @@ -13280,6 +13628,10 @@ 9, 29015 ], + "DefrostedOpponentText": [ + 64, + 23552 + ], "DelibirdBackpic": [ 26, 28406 @@ -13292,6 +13644,10 @@ 107, 19906 ], + "DestinyBondEffectText": [ + 64, + 23307 + ], "DewgongBackpic": [ 30, 25464 @@ -13304,6 +13660,18 @@ 105, 18846 ], + "DidntAffect1Text": [ + 64, + 24257 + ], + "DidntAffect2Text": [ + 64, + 24277 + ], + "DifficultBookshelfText": [ + 64, + 18433 + ], "DiglettBackpic": [ 30, 30978 @@ -13328,6 +13696,14 @@ 2, 31366 ], + "DisabledMoveText": [ + 64, + 22711 + ], + "DisabledNoMoreText": [ + 64, + 22270 + ], "DittoBackpic": [ 30, 19507 @@ -13364,6 +13740,10 @@ 105, 18490 ], + "DoesntAffectText": [ + 64, + 23078 + ], "DoneTileAnimation": [ 63, 17058 @@ -13380,6 +13760,14 @@ 107, 20667 ], + "DownpourText": [ + 64, + 24920 + ], + "DraggedOutText": [ + 64, + 24313 + ], "DragonairBackpic": [ 28, 25841 @@ -13420,6 +13808,10 @@ 4, 19964 ], + "DreamEatenText": [ + 64, + 23516 + ], "DrowzeeBackpic": [ 30, 21286 @@ -13540,10 +13932,22 @@ 4, 31045 ], + "EliminatedStatsText": [ + 64, + 24107 + ], + "EnduredText": [ + 64, + 22629 + ], "EnemyHPBarBorderGFX": [ 62, 19378 ], + "EnemyHitTimesText": [ + 64, + 23725 + ], "EnteiBackpic": [ 29, 26732 @@ -13572,6 +13976,10 @@ 107, 16728 ], + "EvadedText": [ + 64, + 23996 + ], "EvosAttacksPointers": [ 16, 26557 @@ -13620,6 +14028,10 @@ 105, 18372 ], + "FastAsleepText": [ + 64, + 22188 + ], "FearowBackpic": [ 30, 22036 @@ -13632,6 +14044,14 @@ 104, 18743 ], + "FellAsleepText": [ + 64, + 23398 + ], + "FellInLoveText": [ + 64, + 24768 + ], "FeraligatrBackpic": [ 22, 25968 @@ -13676,10 +14096,22 @@ 106, 17160 ], + "FledFromBattleText": [ + 64, + 23649 + ], + "FledInFearText": [ + 64, + 23670 + ], "FlickeringCaveEntrancePalette": [ 63, 17709 ], + "FlinchedText": [ + 64, + 22239 + ], "Font": [ 62, 17138 @@ -13700,6 +14132,10 @@ 62, 21262 ], + "ForesawAttackText": [ + 64, + 25036 + ], "ForretressBackpic": [ 46, 17219 @@ -13716,6 +14152,14 @@ 62, 18674 ], + "FrozenSolidText": [ + 64, + 22219 + ], + "FullyParalyzedText": [ + 64, + 24370 + ], "FurretBackpic": [ 26, 18539 @@ -13800,6 +14244,10 @@ 15, 31064 ], + "GettingPumpedText": [ + 64, + 23789 + ], "GirafarigBackpic": [ 25, 16384 @@ -13884,6 +14332,14 @@ 105, 17595 ], + "GotAnEncoreText": [ + 64, + 23230 + ], + "GotMoneyForWinningText": [ + 64, + 21380 + ], "GranbullBackpic": [ 28, 23053 @@ -13952,6 +14408,14 @@ 106, 16493 ], + "GymStatue_CityGymText": [ + 64, + 20118 + ], + "GymStatue_WinningTrainersText": [ + 64, + 20132 + ], "HOF_SlideBackpic": [ 33, 26135 @@ -13968,10 +14432,38 @@ 62, 19410 ], + "HPIsFullText": [ + 64, + 24297 + ], + "HappinessText1": [ + 64, + 20689 + ], + "HappinessText2": [ + 64, + 20636 + ], + "HappinessText3": [ + 64, + 20594 + ], "HappyEmote": [ 5, 17545 ], + "HasANightmareText": [ + 64, + 20968 + ], + "HasNoPPLeftText": [ + 64, + 22895 + ], + "HasSubstituteText": [ + 64, + 23853 + ], "HaunterBackpic": [ 28, 17990 @@ -14064,6 +14556,14 @@ 56, 24760 ], + "HomepageText": [ + 64, + 18800 + ], + "HookedPokemonAttackedText": [ + 64, + 20792 + ], "HoothootBackpic": [ 27, 29087 @@ -14124,6 +14624,26 @@ 107, 20245 ], + "HungOnText": [ + 64, + 22606 + ], + "HurtByBurnText": [ + 64, + 20926 + ], + "HurtByCurseText": [ + 64, + 20988 + ], + "HurtByPoisonText": [ + 64, + 20904 + ], + "HurtItselfText": [ + 64, + 22308 + ], "HypnoBackpic": [ 23, 29080 @@ -14144,6 +14664,10 @@ 35, 27326 ], + "IdentifiedText": [ + 64, + 24678 + ], "IgglybuffBackpic": [ 29, 31368 @@ -14156,6 +14680,30 @@ 106, 21350 ], + "IgnoredOrders2Text": [ + 64, + 25098 + ], + "IgnoredOrdersText": [ + 64, + 22811 + ], + "IgnoredSleepingText": [ + 64, + 22832 + ], + "InLoveWithText": [ + 64, + 22649 + ], + "IncenseBurnerText": [ + 64, + 18671 + ], + "InfatuationText": [ + 64, + 22671 + ], "InitializeEventsScript": [ 64, 17256 @@ -14224,6 +14772,14 @@ 1, 25029 ], + "IsConfusedText": [ + 64, + 22292 + ], + "ItFailedText": [ + 64, + 24245 + ], "ItemAttributes": [ 1, 26784 @@ -14504,6 +15060,10 @@ 106, 20340 ], + "LeechSeedSapsText": [ + 64, + 20948 + ], "LickitungBackpic": [ 28, 17349 @@ -14516,6 +15076,10 @@ 105, 21170 ], + "LightScreenEffectText": [ + 64, + 24169 + ], "LoadOrientedFrontpic": [ 20, 22948 @@ -14524,6 +15088,18 @@ 112, 19520 ], + "LoafingAroundText": [ + 64, + 22734 + ], + "LookTownMapText": [ + 64, + 18740 + ], + "LostAgainstText": [ + 64, + 21631 + ], "LugiaBackpic": [ 21, 32466 @@ -14572,6 +15148,14 @@ 105, 16502 ], + "MadeSubstituteText": [ + 64, + 23831 + ], + "MagazineBookshelfText": [ + 64, + 18506 + ], "MagbyBackpic": [ 28, 24918 @@ -14652,6 +15236,10 @@ 105, 18264 ], + "MagnitudeText": [ + 64, + 24838 + ], "MankeyBackpic": [ 23, 28275 @@ -14724,6 +15312,10 @@ 105, 20829 ], + "MartSignText": [ + 64, + 19011 + ], "Marts": [ 5, 25342 @@ -14752,6 +15344,10 @@ 104, 22068 ], + "MerchandiseShelfText": [ + 64, + 18713 + ], "MetapodBackpic": [ 30, 23522 @@ -14800,6 +15396,14 @@ 107, 21658 ], + "MimicLearnedMoveText": [ + 64, + 23963 + ], + "MirrorMoveFailedText": [ + 64, + 24438 + ], "MisdreavusBackpic": [ 25, 31608 @@ -14812,6 +15416,10 @@ 107, 17156 ], + "MistText": [ + 64, + 23744 + ], "MoltresBackpic": [ 23, 16802 @@ -15252,6 +15860,10 @@ 61, 17688 ], + "MustRechargeText": [ + 64, + 22252 + ], "NPCTradeCableText": [ 63, 19744 @@ -15380,6 +15992,10 @@ 104, 20535 ], + "NoPPLeftText": [ + 64, + 22862 + ], "NoctowlBackpic": [ 27, 30705 @@ -15392,6 +16008,62 @@ 106, 20232 ], + "NotVeryEffectiveText": [ + 64, + 23158 + ], + "NothingHappenedText": [ + 64, + 24206 + ], + "NumberAcceptedFText": [ + 64, + 19632 + ], + "NumberAcceptedMText": [ + 64, + 19286 + ], + "NumberDeclinedFText": [ + 64, + 19664 + ], + "NumberDeclinedMText": [ + 64, + 19322 + ], + "NurseAskHealText": [ + 64, + 18079 + ], + "NurseDayText": [ + 64, + 17984 + ], + "NurseGoodbyeText": [ + 64, + 18224 + ], + "NurseMornText": [ + 64, + 17941 + ], + "NurseNiteText": [ + 64, + 18020 + ], + "NursePokerusText": [ + 64, + 18278 + ], + "NurseReturnPokemonText": [ + 64, + 18172 + ], + "NurseTakePokemonText": [ + 64, + 18146 + ], "OctilleryBackpic": [ 30, 16384 @@ -15444,6 +16116,10 @@ 106, 17489 ], + "OneHitKOText": [ + 64, + 23116 + ], "OnixBackpic": [ 25, 17140 @@ -15480,6 +16156,10 @@ 2, 24741 ], + "ParalyzedText": [ + 64, + 24333 + ], "ParasBackpic": [ 29, 16977 @@ -15508,6 +16188,10 @@ 2, 31430 ], + "PerishCountText": [ + 64, + 21034 + ], "PersianBackpic": [ 24, 29263 @@ -15536,6 +16220,14 @@ 36, 17466 ], + "PhoneFullFText": [ + 64, + 19730 + ], + "PhoneFullMText": [ + 64, + 19383 + ], "PhoneOutOfAreaScript": [ 36, 17958 @@ -15560,6 +16252,10 @@ 106, 21137 ], + "PictureBookshelfText": [ + 64, + 18463 + ], "PidgeotBackpic": [ 27, 19109 @@ -15648,6 +16344,14 @@ 5, 28636 ], + "PlayerHitTimesText": [ + 64, + 23706 + ], + "PokecenterSignText": [ + 64, + 18982 + ], "PokedexCursorPalette": [ 2, 21841 @@ -15688,6 +16392,10 @@ 60, 26439 ], + "PokemonFellFromTreeText": [ + 64, + 20820 + ], "PokemonNames": [ 108, 19316 @@ -15796,6 +16504,10 @@ 0, 14778 ], + "PresentFailedText": [ + 64, + 25072 + ], "PrimeapeBackpic": [ 26, 17463 @@ -15808,6 +16520,22 @@ 104, 22617 ], + "ProtectedByMistText": [ + 64, + 23766 + ], + "ProtectedByText": [ + 64, + 24414 + ], + "ProtectedItselfText": [ + 64, + 24602 + ], + "ProtectingItselfText": [ + 64, + 24623 + ], "PsyduckBackpic": [ 26, 21393 @@ -15832,6 +16560,10 @@ 107, 22319 ], + "PutACurseText": [ + 64, + 24562 + ], "PuzzlePieceBorderData.TileBordersGFX": [ 56, 24368 @@ -15880,6 +16612,10 @@ 36, 21708 ], + "RageBuildingText": [ + 64, + 23208 + ], "RaichuBackpic": [ 25, 20523 @@ -15944,6 +16680,46 @@ 63, 17597 ], + "ReceivedItemText": [ + 64, + 19856 + ], + "RecoilText": [ + 64, + 23810 + ], + "RecoveredUsingText": [ + 64, + 21896 + ], + "ReflectEffectText": [ + 64, + 24188 + ], + "RegainedHealthText": [ + 64, + 22977 + ], + "RegisteredNumberFText": [ + 64, + 19603 + ], + "RegisteredNumberMText": [ + 64, + 19257 + ], + "ReleasedByText": [ + 64, + 24857 + ], + "RematchFText": [ + 64, + 19786 + ], + "RematchMText": [ + 64, + 19439 + ], "RemoraidBackpic": [ 26, 22456 @@ -15956,6 +16732,10 @@ 107, 19692 ], + "RestedText": [ + 64, + 22942 + ], "RhydonBackpic": [ 23, 18877 @@ -16008,6 +16788,10 @@ 5, 17609 ], + "SafeguardProtectText": [ + 64, + 24808 + ], "SandshrewBackpic": [ 23, 31080 @@ -16032,6 +16816,14 @@ 104, 19409 ], + "SandstormBrewedText": [ + 64, + 24729 + ], + "SandstormHitsText": [ + 64, + 21011 + ], "ScizorBackpic": [ 25, 31970 @@ -16112,6 +16904,18 @@ 105, 18727 ], + "SentAllToMomText": [ + 64, + 21507 + ], + "SentHalfToMomText": [ + 64, + 21488 + ], + "SentSomeToMomText": [ + 64, + 21442 + ], "SentretBackpic": [ 30, 18217 @@ -16124,6 +16928,14 @@ 106, 19915 ], + "SharedPainText": [ + 64, + 23248 + ], + "ShedLeechSeedText": [ + 64, + 24879 + ], "ShellderBackpic": [ 24, 16384 @@ -16172,6 +16984,10 @@ 107, 20123 ], + "SketchedText": [ + 64, + 23288 + ], "SkiploomBackpic": [ 28, 28285 @@ -16332,6 +17148,10 @@ 36, 17910 ], + "SpikesText": [ + 64, + 24646 + ], "SpinarakBackpic": [ 30, 24500 @@ -16344,6 +17164,10 @@ 106, 20560 ], + "SpiteEffectText": [ + 64, + 23348 + ], "SpriteMons": [ 5, 18025 @@ -16392,6 +17216,14 @@ 105, 22617 ], + "StartPerishText": [ + 64, + 24695 + ], + "StartedNightmareText": [ + 64, + 24512 + ], "StaryuBackpic": [ 29, 23076 @@ -16432,10 +17264,30 @@ 107, 18048 ], + "StoleText": [ + 64, + 24463 + ], + "StoringEnergyText": [ + 64, + 22563 + ], "StubbedGetFrontpic": [ 112, 19066 ], + "SubFadedText": [ + 64, + 23941 + ], + "SubTookDamageText": [ + 64, + 23906 + ], + "SuckedHealthText": [ + 64, + 23493 + ], "SudowoodoBackpic": [ 25, 26480 @@ -16460,6 +17312,10 @@ 107, 22113 ], + "SunGotBrightText": [ + 64, + 24941 + ], "SunfloraBackpic": [ 23, 17634 @@ -16484,6 +17340,10 @@ 106, 23269 ], + "SuperEffectiveText": [ + 64, + 23135 + ], "SwarmGrassWildMons": [ 10, 32284 @@ -16508,6 +17368,10 @@ 4, 23142 ], + "TVText": [ + 64, + 18789 + ], "TangelaBackpic": [ 30, 28456 @@ -16532,6 +17396,10 @@ 105, 23402 ], + "TeamRocketOathText": [ + 64, + 18560 + ], "TeddiursaBackpic": [ 29, 27843 @@ -16568,14 +17436,50 @@ 105, 17272 ], + "Text_BallCaught": [ + 102, + 17502 + ], + "Text_BattleEffectActivate": [ + 101, + 18077 + ], + "Text_BattleFoeEffectActivate": [ + 101, + 18114 + ], + "Text_BattleUser": [ + 101, + 18149 + ], "Text_BreedHuh": [ 101, 18257 ], + "Text_Gained": [ + 100, + 24078 + ], + "Text_MoveForgetCount": [ + 102, + 17088 + ], + "Text_NPCTraded": [ + 100, + 20317 + ], + "Text_PlayedPokeFlute": [ + 102, + 17801 + ], "TheEndGFX": [ 50, 31933 ], + "TiedAgainstText": [ + 64, + 21425 + ], "TilesetBGPalette": [ 2, 30558 @@ -16632,6 +17536,18 @@ 106, 21575 ], + "TooWeakSubText": [ + 64, + 23874 + ], + "TookAimText": [ + 64, + 23275 + ], + "TookDownWithItText": [ + 64, + 23183 + ], "TotodileBackpic": [ 27, 24806 @@ -16744,6 +17660,18 @@ 14, 22978 ], + "TransformedText": [ + 64, + 24142 + ], + "TransformedTypeText": [ + 64, + 24071 + ], + "TrashCanText": [ + 64, + 18893 + ], "TreeMonMaps": [ 46, 25574 @@ -16752,6 +17680,10 @@ 46, 25712 ], + "TurnedAwayText": [ + 64, + 22793 + ], "TypeMatchups": [ 13, 19713 @@ -16808,6 +17740,14 @@ 107, 16835 ], + "UnaffectedText": [ + 64, + 23062 + ], + "UnleashedEnergyText": [ + 64, + 22585 + ], "UnownABackpic": [ 46, 20556 @@ -17036,6 +17976,14 @@ 46, 19007 ], + "UnusedRivalLossText": [ + 64, + 21525 + ], + "UnusedRivalWinText": [ + 64, + 21593 + ], "UrsaringBackpic": [ 29, 27566 @@ -17048,6 +17996,10 @@ 107, 19050 ], + "UsedBindText": [ + 64, + 22486 + ], "VaporeonBackpic": [ 29, 19040 @@ -17148,6 +18100,10 @@ 63, 17061 ], + "WantsToBattleText": [ + 64, + 20847 + ], "WartortleBackpic": [ 26, 18181 @@ -17160,6 +18116,34 @@ 104, 17164 ], + "WasBurnedText": [ + 64, + 23537 + ], + "WasDefrostedText": [ + 64, + 24544 + ], + "WasDisabledText": [ + 64, + 24018 + ], + "WasFrozenText": [ + 64, + 23570 + ], + "WasPoisonedText": [ + 64, + 23434 + ], + "WasSeededText": [ + 64, + 23981 + ], + "WasTrappedText": [ + 64, + 22505 + ], "WaveSamples": [ 58, 19890 @@ -17200,6 +18184,10 @@ 105, 21390 ], + "WentToSleepText": [ + 64, + 22924 + ], "WigglytuffBackpic": [ 30, 18736 @@ -17212,6 +18200,14 @@ 104, 20752 ], + "WildPokemonAppearedText": [ + 64, + 20770 + ], + "WindowText": [ + 64, + 18759 + ], "WobbuffetBackpic": [ 29, 29757 @@ -17224,6 +18220,22 @@ 107, 17375 ], + "WokeUpText": [ + 64, + 22207 + ], + "WontDropAnymoreText": [ + 64, + 23620 + ], + "WontObeyText": [ + 64, + 22777 + ], + "WontRiseAnymoreText": [ + 64, + 23591 + ], "WooperBackpic": [ 30, 26637 @@ -17236,6 +18248,10 @@ 107, 16503 ], + "WrappedByText": [ + 64, + 22521 + ], "WriteTileFromAnimBuffer": [ 63, 17585 @@ -17292,14 +18308,146 @@ 104, 20858 ], + "_ActorNameText": [ + 101, + 18023 + ], + "_AlreadyASaveFileText": [ + 101, + 23097 + ], + "_AlreadySetUpText": [ + 100, + 17756 + ], + "_AlreadySurfingText": [ + 101, + 16405 + ], + "_AlreadyUsingStrengthText": [ + 101, + 16658 + ], + "_AnEggCantHoldAnItemText": [ + 101, + 17731 + ], + "_AnotherSaveFileText": [ + 101, + 23151 + ], "_AreWeGeniusesText": [ 100, 22601 ], + "_AskCutText": [ + 101, + 17313 + ], + "_AskDeleteMoveText": [ + 102, + 18433 + ], + "_AskFloorElevatorText": [ + 100, + 19953 + ], + "_AskForgetMoveText": [ + 102, + 16969 + ], + "_AskGiveNicknameText": [ + 102, + 17604 + ], + "_AskHeadbuttText": [ + 101, + 17021 + ], + "_AskItemMoveText": [ + 101, + 17959 + ], + "_AskQuantityThrowAwayText": [ + 101, + 17791 + ], + "_AskRockSmashText": [ + 101, + 17128 + ], + "_AskStrengthText": [ + 101, + 16737 + ], + "_AskSurfText": [ + 101, + 16429 + ], + "_AskThrowAwayText": [ + 101, + 17769 + ], + "_AskWaterfallText": [ + 101, + 16512 + ], + "_AskWhirlpoolText": [ + 101, + 16933 + ], + "_BGEventText": [ + 101, + 23443 + ], "_BackAlreadyText": [ 100, 22807 ], + "_BadgeRequiredText": [ + 100, + 24749 + ], + "_BallAlmostHadItText": [ + 102, + 17450 + ], + "_BallAppearedCaughtText": [ + 102, + 17418 + ], + "_BallBlockedText": [ + 102, + 18167 + ], + "_BallBoxFullText": [ + 102, + 18273 + ], + "_BallBrokeFreeText": [ + 102, + 17389 + ], + "_BallDodgedText": [ + 102, + 17313 + ], + "_BallDontBeAThiefText": [ + 102, + 18198 + ], + "_BallMissedText": [ + 102, + 17367 + ], + "_BallSentToPCText": [ + 102, + 17534 + ], + "_BallSoCloseText": [ + 102, + 17473 + ], "_BargainShopComeAgainText": [ 101, 24234 @@ -17328,10 +18476,110 @@ 101, 24113 ], + "_BattleDugText": [ + 101, + 18243 + ], + "_BattleFlewText": [ + 101, + 18227 + ], + "_BattleGlowingText": [ + 101, + 18213 + ], + "_BattleLoweredHeadText": [ + 101, + 18193 + ], + "_BattleMadeWhirlwindText": [ + 101, + 18153 + ], + "_BattleMonNickCommaText": [ + 100, + 24221 + ], + "_BattleStatFellText": [ + 101, + 18141 + ], + "_BattleStatSharplyFellText": [ + 101, + 18124 + ], + "_BattleStatWentUpText": [ + 101, + 18103 + ], + "_BattleStatWentWayUpText": [ + 101, + 18087 + ], + "_BattleTookSunlightText": [ + 101, + 18173 + ], + "_BenFernText1": [ + 100, + 19047 + ], + "_BenFernText2A": [ + 100, + 19061 + ], + "_BenFernText2B": [ + 100, + 19080 + ], + "_BenFernText3A": [ + 100, + 19098 + ], + "_BenFernText3B": [ + 100, + 19112 + ], + "_BenIntroText1": [ + 100, + 18968 + ], + "_BenIntroText2": [ + 100, + 18986 + ], + "_BenIntroText3": [ + 100, + 18997 + ], "_BidsFarewellToMonText": [ 100, 18201 ], + "_BlindingFlashText": [ + 100, + 24847 + ], + "_BoostedExpPointsText": [ + 100, + 24091 + ], + "_BootedHMText": [ + 100, + 24343 + ], + "_BootedTMText": [ + 100, + 24326 + ], + "_BouldersMayMoveText": [ + 101, + 16821 + ], + "_BouldersMoveText": [ + 101, + 16793 + ], "_BreedAppearsToCareForText": [ 101, 18477 @@ -17364,6 +18612,26 @@ 101, 18534 ], + "_BreedingIsNotPossibleText": [ + 100, + 17240 + ], + "_BugCatchingContestIsOverText": [ + 100, + 19996 + ], + "_BugCatchingContestTimeUpText": [ + 100, + 19967 + ], + "_BurnWasHealedText": [ + 100, + 16563 + ], + "_ButNoSpaceText": [ + 100, + 20070 + ], "_CGB_GSIntro.ShellderLaprasBGPalette": [ 2, 22241 @@ -17376,10 +18644,114 @@ 2, 22895 ], + "_CameToItsSensesText": [ + 100, + 16694 + ], + "_CanCutText": [ + 101, + 17353 + ], "_CantAcceptEggText": [ 100, 22429 ], + "_CantCarryItemText": [ + 101, + 17392 + ], + "_CantGetOffBikeText": [ + 101, + 17246 + ], + "_CantRegisterText": [ + 101, + 17929 + ], + "_CantSurfText": [ + 101, + 16384 + ], + "_CantUseDigText": [ + 101, + 16582 + ], + "_CantUseItemText": [ + 100, + 24782 + ], + "_CantUseTeleportText": [ + 101, + 16636 + ], + "_CardFlipChooseACardText": [ + 102, + 17214 + ], + "_CardFlipDarnText": [ + 102, + 17306 + ], + "_CardFlipNotEnoughCoinsText": [ + 102, + 17195 + ], + "_CardFlipPlaceYourBetText": [ + 102, + 17230 + ], + "_CardFlipPlayAgainText": [ + 102, + 17247 + ], + "_CardFlipPlayWithThreeCoinsText": [ + 102, + 17171 + ], + "_CardFlipShuffledText": [ + 102, + 17268 + ], + "_CardFlipYeahText": [ + 102, + 17299 + ], + "_CaughtAskNicknameText": [ + 101, + 19555 + ], + "_ChangeBoxSaveText": [ + 101, + 23232 + ], + "_ChangeWhichNumberText": [ + 100, + 17145 + ], + "_ClearAllSaveDataText": [ + 102, + 16838 + ], + "_ClockHasResetText": [ + 101, + 22815 + ], + "_ClockIsThisOKText": [ + 101, + 22802 + ], + "_ClockSetWithControlPadText": [ + 101, + 22739 + ], + "_ClockTimeMayBeWrongText": [ + 101, + 22685 + ], + "_CoinCaseCountText": [ + 102, + 17827 + ], "_ComeAgainText": [ 100, 22990 @@ -17388,6 +18760,78 @@ 100, 22576 ], + "_ComeBackText": [ + 100, + 24291 + ], + "_CompatibilityShouldTheyBreedText": [ + 100, + 17267 + ], + "_CongratulationsYourPokemonText": [ + 101, + 23542 + ], + "_ContainedMoveText": [ + 100, + 24361 + ], + "_ContestAlreadyCaughtText": [ + 101, + 19013 + ], + "_ContestAskSwitchText": [ + 101, + 18999 + ], + "_ContestCaughtMonText": [ + 101, + 18984 + ], + "_ContestJudging_FirstPlaceScoreText": [ + 101, + 19111 + ], + "_ContestJudging_FirstPlaceText": [ + 101, + 19042 + ], + "_ContestJudging_SecondPlaceScoreText": [ + 101, + 19198 + ], + "_ContestJudging_SecondPlaceText": [ + 101, + 19150 + ], + "_ContestJudging_ThirdPlaceScoreText": [ + 101, + 19276 + ], + "_ContestJudging_ThirdPlaceText": [ + 101, + 19229 + ], + "_CoordinatesEventText": [ + 101, + 23453 + ], + "_CorruptedEventText": [ + 101, + 23410 + ], + "_CuredOfPoisonText": [ + 100, + 16516 + ], + "_CutNothingText": [ + 100, + 24818 + ], + "_DSTIsThatOKText": [ + 102, + 18693 + ], "_DayCareLadyIntroEggText": [ 100, 22176 @@ -17408,22 +18852,170 @@ 100, 21900 ], + "_DeleterAskWhichMonText": [ + 102, + 18680 + ], + "_DeleterAskWhichMoveText": [ + 102, + 18551 + ], + "_DeleterEggText": [ + 102, + 18494 + ], + "_DeleterForgotMoveText": [ + 102, + 18460 + ], + "_DeleterIntroText": [ + 102, + 18587 + ], + "_DeleterNoComeAgainText": [ + 102, + 18525 + ], + "_DidNotLearnMoveText": [ + 102, + 16943 + ], + "_DoItMonText": [ + 100, + 24157 + ], + "_EggPhotoText": [ + 100, + 23443 + ], "_EmptyMailboxText": [ 101, 18563 ], + "_EndUsedMove1Text": [ + 101, + 18062 + ], + "_EndUsedMove2Text": [ + 101, + 18065 + ], + "_EndUsedMove3Text": [ + 101, + 18068 + ], + "_EndUsedMove4Text": [ + 101, + 18071 + ], + "_EndUsedMove5Text": [ + 101, + 18074 + ], + "_EnemyUsedOnText": [ + 100, + 16970 + ], + "_EnemyWithdrewText": [ + 100, + 16951 + ], + "_EnterTheAmountText": [ + 100, + 17524 + ], + "_EnterTheIDNoText": [ + 100, + 17506 + ], + "_EvolvedIntoText": [ + 101, + 23571 + ], + "_EvolvingText": [ + 101, + 23623 + ], + "_ExpPointsText": [ + 100, + 24123 + ], + "_FernIntroText1": [ + 100, + 19015 + ], + "_FernIntroText2": [ + 100, + 19031 + ], + "_FluteWakeUpText": [ + 102, + 17773 + ], "_ForYourMonSendsText": [ 100, 18255 ], + "_ForYourMonWillTradeText": [ + 100, + 18314 + ], "_FoundAnEggText": [ 100, 23013 ], + "_FoundItemText": [ + 101, + 17376 + ], + "_FruitBearingTreeText": [ + 100, + 16384 + ], + "_FruitPackIsFullText": [ + 100, + 16446 + ], + "_GearEllipseText": [ + 102, + 16486 + ], + "_GearOutOfServiceText": [ + 102, + 16489 + ], + "_GearTodayText": [ + 102, + 16484 + ], + "_GoForItMonText": [ + 100, + 24172 + ], + "_GoMonText": [ + 100, + 24145 + ], + "_GoodComeBackText": [ + 100, + 24272 + ], "_GotBackMonText": [ 100, 22788 ], + "_GotOffBikeText": [ + 101, + 17291 + ], + "_GotOnBikeText": [ + 101, + 17270 + ], + "_GrewToLevelText": [ + 100, + 16664 + ], "_HallOfFamePC.HOFMaster": [ 33, 26331 @@ -17436,6 +19028,14 @@ 100, 22919 ], + "_HeadbuttNothingText": [ + 101, + 17005 + ], + "_HealthReturnedText": [ + 100, + 16620 + ], "_HerbShopLadyIntroText": [ 101, 23692 @@ -17464,6 +19064,18 @@ 101, 23858 ], + "_HeyItsFruitText": [ + 100, + 16412 + ], + "_HoldStillText": [ + 100, + 23340 + ], + "_HugeWaterfallText": [ + 101, + 16484 + ], "_IllKeepItThanksText": [ 100, 23222 @@ -17472,10 +19084,166 @@ 100, 22549 ], + "_IsThisOKText": [ + 100, + 17493 + ], + "_ItemBelongsToSomeoneElseText": [ + 102, + 18110 + ], + "_ItemCantGetOnText": [ + 102, + 18244 + ], + "_ItemCantHeldText": [ + 101, + 21732 + ], + "_ItemCantUseOnEggText": [ + 102, + 18039 + ], + "_ItemCantUseOnMonText": [ + 102, + 17649 + ], + "_ItemGotOffText": [ + 102, + 18359 + ], + "_ItemGotOnText": [ + 102, + 18338 + ], + "_ItemLooksBitterText": [ + 102, + 18021 + ], + "_ItemOakWarningText": [ + 102, + 18069 + ], + "_ItemStatRoseText": [ + 102, + 17631 + ], + "_ItemStorageFullText": [ + 101, + 21637 + ], + "_ItemUsedText": [ + 102, + 18319 + ], + "_ItemWontHaveEffectText": [ + 102, + 18141 + ], + "_ItemfinderItemNearbyText": [ + 101, + 17467 + ], + "_ItemfinderNopeText": [ + 101, + 17517 + ], + "_ItemsDiscardedText": [ + 101, + 21413 + ], + "_ItemsOakWarningText": [ + 101, + 21470 + ], + "_ItemsThrowAwayText": [ + 101, + 21384 + ], + "_ItemsTooImportantText": [ + 101, + 21434 + ], + "_ItemsTossOutHowManyText": [ + 101, + 21355 + ], + "_ItsGoingToHatchText": [ + 100, + 17335 + ], + "_JustSawSomeRareMonText": [ + 100, + 20096 + ], + "_KarpGuruRecordText": [ + 101, + 19362 + ], + "_KnowsMoveText": [ + 102, + 18383 + ], + "_LC_DragText1": [ + 100, + 19344 + ], + "_LC_DragText2": [ + 100, + 19364 + ], + "_LC_Text1": [ + 100, + 19128 + ], + "_LC_Text10": [ + 100, + 19304 + ], + "_LC_Text11": [ + 100, + 19325 + ], + "_LC_Text2": [ + 100, + 19148 + ], + "_LC_Text3": [ + 100, + 19167 + ], + "_LC_Text4": [ + 100, + 19186 + ], + "_LC_Text5": [ + 100, + 19205 + ], + "_LC_Text6": [ + 100, + 19225 + ], + "_LC_Text7": [ + 100, + 19246 + ], + "_LC_Text8": [ + 100, + 19265 + ], + "_LC_Text9": [ + 100, + 19285 + ], "_LastHealthyMonText": [ 100, 22500 ], + "_LearnedMoveText": [ + 102, + 16865 + ], "_LeftWithDayCareLadyText": [ 101, 18323 @@ -17484,6 +19252,58 @@ 101, 18372 ], + "_LinkAbnormalMonText": [ + 101, + 22941 + ], + "_LinkAskTradeForText": [ + 101, + 22985 + ], + "_LinkTimeoutText": [ + 101, + 22842 + ], + "_LinkTradeCantBattleText": [ + 101, + 22888 + ], + "_LookAdorableDecoText": [ + 100, + 17901 + ], + "_LookClefairyPosterText": [ + 100, + 17831 + ], + "_LookGiantDecoText": [ + 100, + 17925 + ], + "_LookJigglypuffPosterText": [ + 100, + 17865 + ], + "_LookPikachuPosterText": [ + 100, + 17798 + ], + "_LookTownMapText": [ + 100, + 17779 + ], + "_LuckyNumberMatchPCText": [ + 101, + 19477 + ], + "_LuckyNumberMatchPartyText": [ + 101, + 19400 + ], + "_MagikarpGuruMeasureText": [ + 101, + 19307 + ], "_MailAlreadyHoldingItemText": [ 101, 18673 @@ -17532,6 +19352,10 @@ 101, 21892 ], + "_MainMenuTimeUnknownText": [ + 101, + 22032 + ], "_MartAskMoreText": [ 101, 24689 @@ -17580,22 +19404,322 @@ 101, 24518 ], + "_MayPassWhirlpoolText": [ + 101, + 16876 + ], + "_MayRegisterItemText": [ + 101, + 21966 + ], + "_MaySmashText": [ + 101, + 17095 + ], + "_MemoryGameDarnText": [ + 101, + 21312 + ], + "_MemoryGameYeahText": [ + 101, + 21302 + ], + "_MomBankWhatDoYouWantToDoText": [ + 100, + 21543 + ], + "_MomBoughtWithYourMoneyText": [ + 100, + 18020 + ], + "_MomFoundADollText": [ + 100, + 18089 + ], + "_MomFoundAnItemText": [ + 100, + 17984 + ], + "_MomHaventSavedThatMuchText": [ + 100, + 21663 + ], + "_MomHiHowAreYouText": [ + 100, + 17963 + ], + "_MomInsufficientFundsInWalletText": [ + 100, + 21718 + ], + "_MomIsThisAboutYourMoneyText": [ + 100, + 21439 + ], + "_MomItsInPCText": [ + 100, + 18057 + ], + "_MomItsInYourRoomText": [ + 100, + 18141 + ], + "_MomJustDoWhatYouCanText": [ + 100, + 21877 + ], + "_MomLeavingText1": [ + 100, + 21092 + ], + "_MomLeavingText2": [ + 100, + 21325 + ], + "_MomLeavingText3": [ + 100, + 21363 + ], + "_MomLostGearBookletText": [ + 102, + 18936 + ], + "_MomNotEnoughRoomInBankText": [ + 100, + 21744 + ], + "_MomNotEnoughRoomInWalletText": [ + 100, + 21692 + ], + "_MomSaveMoneyText": [ + 100, + 21630 + ], + "_MomStartSavingMoneyText": [ + 100, + 21770 + ], + "_MomStoreMoneyText": [ + 100, + 21568 + ], + "_MomStoredMoneyText": [ + 100, + 21824 + ], + "_MomTakeMoneyText": [ + 100, + 21599 + ], + "_MomTakenMoneyText": [ + 100, + 21859 + ], "_MonNameBidsFarewellText": [ 100, 18223 ], + "_MonNameSentToText": [ + 100, + 18199 + ], "_MonWasSentToText": [ 100, 18175 ], + "_MoveAskForgetText": [ + 102, + 16888 + ], + "_MoveBoulderText": [ + 101, + 16713 + ], + "_MoveCantForgetHMText": [ + 102, + 17138 + ], + "_MoveForgotText": [ + 102, + 17102 + ], + "_MoveKnowsOneText": [ + 102, + 18401 + ], + "_MoveMonWOMailSaveText": [ + 101, + 23285 + ], + "_MoveNameText": [ + 101, + 18057 + ], + "_MysteryGiftCanceledText": [ + 100, + 24521 + ], + "_MysteryGiftCommErrorText": [ + 100, + 24551 + ], + "_MysteryGiftFiveADayText": [ + 100, + 24634 + ], + "_MysteryGiftOneADayText": [ + 100, + 24665 + ], + "_MysteryGiftSentHomeText": [ + 100, + 24717 + ], + "_MysteryGiftSentText": [ + 100, + 24700 + ], + "_NPCTradeAfterText1": [ + 100, + 20519 + ], + "_NPCTradeAfterText2": [ + 100, + 20775 + ], + "_NPCTradeAfterText3": [ + 100, + 21032 + ], + "_NPCTradeCableText": [ + 100, + 20283 + ], + "_NPCTradeCancelText1": [ + 100, + 20415 + ], + "_NPCTradeCancelText2": [ + 100, + 20632 + ], + "_NPCTradeCancelText3": [ + 100, + 20902 + ], + "_NPCTradeCompleteText1": [ + 100, + 20485 + ], + "_NPCTradeCompleteText2": [ + 100, + 20735 + ], + "_NPCTradeCompleteText3": [ + 100, + 20992 + ], + "_NPCTradeFanfareText": [ + 100, + 20345 + ], + "_NPCTradeIntroText1": [ + 100, + 20348 + ], + "_NPCTradeIntroText2": [ + 100, + 20549 + ], + "_NPCTradeIntroText3": [ + 100, + 20820 + ], + "_NPCTradeWrongText1": [ + 100, + 20445 + ], + "_NPCTradeWrongText2": [ + 100, + 20692 + ], + "_NPCTradeWrongText3": [ + 100, + 20937 + ], + "_NameRaterBetterNameText": [ + 100, + 23615 + ], + "_NameRaterComeAgainText": [ + 100, + 23824 + ], + "_NameRaterEggText": [ + 100, + 23930 + ], + "_NameRaterFinishedText": [ + 100, + 23779 + ], + "_NameRaterHelloText": [ + 100, + 23477 + ], + "_NameRaterNamedText": [ + 100, + 24036 + ], + "_NameRaterPerfectNameText": [ + 100, + 23856 + ], + "_NameRaterSameNameText": [ + 100, + 23956 + ], + "_NameRaterWhatNameText": [ + 100, + 23732 + ], + "_NameRaterWhichMonText": [ + 100, + 23570 + ], + "_NewDexDataText": [ + 102, + 17561 + ], "_NewPokedexEntry": [ 16, 23170 ], + "_NoCoinCaseText": [ + 100, + 20255 + ], + "_NoCoinsText": [ + 100, + 20235 + ], + "_NoCyclingText": [ + 102, + 18216 + ], + "_NoPhotoText": [ + 100, + 23410 + ], "_NoRoomForEggText": [ 100, 23255 ], + "_NoRoomTMHMText": [ + 100, + 24461 + ], "_NotEnoughMoneyText": [ 100, 22945 @@ -17604,14 +19728,282 @@ 100, 23003 ], + "_NothingHereText": [ + 100, + 16469 + ], + "_NothingToChooseText": [ + 100, + 17543 + ], + "_NothingToPutAwayText": [ + 100, + 17666 + ], "_NothingToSellText": [ 101, 24438 ], + "_OKComeBackText": [ + 100, + 24255 + ], + "_OPT_AddictivelyText": [ + 100, + 18641 + ], + "_OPT_AlmostPoisonouslyText": [ + 100, + 18561 + ], + "_OPT_AptlyNamedText": [ + 100, + 18482 + ], + "_OPT_BoldSortOfText": [ + 100, + 18784 + ], + "_OPT_CuteText": [ + 100, + 18755 + ], + "_OPT_EvolutionMustBeText": [ + 100, + 18680 + ], + "_OPT_ExcitingText": [ + 100, + 18848 + ], + "_OPT_FlippedOutText": [ + 100, + 18716 + ], + "_OPT_FriendlyText": [ + 100, + 18880 + ], + "_OPT_FrighteningText": [ + 100, + 18801 + ], + "_OPT_GuardedText": [ + 100, + 18924 + ], + "_OPT_HeartMeltinglyText": [ + 100, + 18737 + ], + "_OPT_HotHotHotText": [ + 100, + 18892 + ], + "_OPT_InspiringText": [ + 100, + 18867 + ], + "_OPT_IntroText1": [ + 100, + 18333 + ], + "_OPT_IntroText2": [ + 100, + 18352 + ], + "_OPT_IntroText3": [ + 100, + 18365 + ], + "_OPT_LooksInWaterText": [ + 100, + 18660 + ], + "_OPT_LovelyText": [ + 100, + 18935 + ], + "_OPT_MaryText1": [ + 100, + 18425 + ], + "_OPT_MischievouslyText": [ + 100, + 18602 + ], + "_OPT_NowText": [ + 100, + 18860 + ], + "_OPT_OakText1": [ + 100, + 18382 + ], + "_OPT_OakText2": [ + 100, + 18395 + ], + "_OPT_OakText3": [ + 100, + 18416 + ], + "_OPT_PleasantText": [ + 100, + 18772 + ], + "_OPT_PokemonChannelText": [ + 100, + 18955 + ], + "_OPT_PowerfulText": [ + 100, + 18836 + ], + "_OPT_ProvocativelyText": [ + 100, + 18700 + ], + "_OPT_SensuallyText": [ + 100, + 18582 + ], + "_OPT_SpeedyText": [ + 100, + 18945 + ], + "_OPT_StimulatingText": [ + 100, + 18909 + ], + "_OPT_SuaveDebonairText": [ + 100, + 18816 + ], + "_OPT_SweetAdorablyText": [ + 100, + 18440 + ], + "_OPT_TopicallyText": [ + 100, + 18621 + ], + "_OPT_UnbearablyText": [ + 100, + 18521 + ], + "_OPT_UndeniablyKindOfText": [ + 100, + 18500 + ], + "_OPT_WeirdText": [ + 100, + 18763 + ], + "_OPT_WigglySlicklyText": [ + 100, + 18461 + ], + "_OPT_WowImpressivelyText": [ + 100, + 18541 + ], "_OTSendsText": [ 100, 18274 ], + "_OakPCText1": [ + 101, + 20092 + ], + "_OakPCText2": [ + 101, + 20122 + ], + "_OakPCText3": [ + 101, + 20154 + ], + "_OakPCText4": [ + 101, + 21267 + ], + "_OakRating01": [ + 101, + 20204 + ], + "_OakRating02": [ + 101, + 20236 + ], + "_OakRating03": [ + 101, + 20284 + ], + "_OakRating04": [ + 101, + 20344 + ], + "_OakRating05": [ + 101, + 20406 + ], + "_OakRating06": [ + 101, + 20467 + ], + "_OakRating07": [ + 101, + 20529 + ], + "_OakRating08": [ + 101, + 20592 + ], + "_OakRating09": [ + 101, + 20642 + ], + "_OakRating10": [ + 101, + 20698 + ], + "_OakRating11": [ + 101, + 20747 + ], + "_OakRating12": [ + 101, + 20807 + ], + "_OakRating13": [ + 101, + 20859 + ], + "_OakRating14": [ + 101, + 20924 + ], + "_OakRating15": [ + 101, + 20980 + ], + "_OakRating16": [ + 101, + 21029 + ], + "_OakRating17": [ + 101, + 21088 + ], + "_OakRating18": [ + 101, + 21147 + ], + "_OakRating19": [ + 101, + 21204 + ], "_OakText1": [ 101, 22052 @@ -17640,6 +20032,70 @@ 101, 22493 ], + "_OakThisIsntTheTimeText": [ + 101, + 17842 + ], + "_OakTimeHoursQuestionMarkText": [ + 100, + 16824 + ], + "_OakTimeHowManyMinutesText": [ + 100, + 16827 + ], + "_OakTimeIsItText": [ + 100, + 16941 + ], + "_OakTimeMinutesQuestionMarkText": [ + 100, + 16854 + ], + "_OakTimeOversleptText": [ + 100, + 16857 + ], + "_OakTimeSoDarkText": [ + 100, + 16898 + ], + "_OakTimeWhatDayIsItText": [ + 100, + 16924 + ], + "_OakTimeWhatHoursText": [ + 100, + 16816 + ], + "_OakTimeWhatTimeIsItText": [ + 100, + 16798 + ], + "_OakTimeWhoaMinutesText": [ + 100, + 16846 + ], + "_OakTimeWokeUpText": [ + 100, + 16719 + ], + "_OakTimeYikesText": [ + 100, + 16873 + ], + "_ObjectEventText": [ + 101, + 23428 + ], + "_ObtainedFruitText": [ + 100, + 16429 + ], + "_ObtainedTheVoltorbBadgeText": [ + 100, + 17446 + ], "_OhFineThenText": [ 100, 22974 @@ -17648,10 +20104,66 @@ 100, 22396 ], + "_PCCantDepositLastMonText": [ + 101, + 18920 + ], + "_PCCantTakeText": [ + 101, + 18954 + ], + "_PCGottaHavePokemonText": [ + 101, + 18798 + ], "_PCMonHoldingMailText": [ 101, 18835 ], + "_PCNoSingleMonText": [ + 101, + 18890 + ], + "_PCWhatText": [ + 101, + 18828 + ], + "_PPIsMaxedOutText": [ + 102, + 17901 + ], + "_PPRestoredText": [ + 102, + 17944 + ], + "_PPsIncreasedText": [ + 102, + 17924 + ], + "_PackEmptyText": [ + 101, + 17991 + ], + "_PackNoItemText": [ + 101, + 17758 + ], + "_PasswordAskEnterText": [ + 102, + 16810 + ], + "_PasswordAskResetClockText": [ + 102, + 16792 + ], + "_PasswordAskResetText": [ + 102, + 16727 + ], + "_PasswordWrongText": [ + 102, + 16775 + ], "_PerfectHeresYourMonText": [ 100, 22761 @@ -17684,22 +20196,454 @@ 101, 24335 ], + "_PhoneClickText": [ + 102, + 16636 + ], + "_PhoneEllipseText": [ + 102, + 16644 + ], + "_PhoneJustTalkToThemText": [ + 102, + 16680 + ], + "_PhoneOutOfAreaText": [ + 102, + 16647 + ], + "_PhoneThankYouText": [ + 102, + 16710 + ], + "_PhoneWrongNumberText": [ + 102, + 16609 + ], + "_PlayedFluteText": [ + 102, + 17726 + ], + "_PlayerFoundItemText": [ + 100, + 20054 + ], + "_PlayerPickedUpPayDayMoney": [ + 100, + 24304 + ], + "_PlayersPCAskWhatDoText": [ + 101, + 19663 + ], + "_PlayersPCDepositItemsText": [ + 101, + 19832 + ], + "_PlayersPCHowManyDepositText": [ + 101, + 19798 + ], + "_PlayersPCHowManyWithdrawText": [ + 101, + 19688 + ], + "_PlayersPCNoItemsText": [ + 101, + 19782 + ], + "_PlayersPCNoRoomDepositText": [ + 101, + 19860 + ], + "_PlayersPCNoRoomWithdrawText": [ + 101, + 19750 + ], + "_PlayersPCTurnOnText": [ + 101, + 19642 + ], + "_PlayersPCWithdrewItemsText": [ + 101, + 19723 + ], + "_PnP_BoldText": [ + 100, + 19539 + ], + "_PnP_CoolText": [ + 100, + 19649 + ], + "_PnP_CuteText": [ + 100, + 19455 + ], + "_PnP_GreatText": [ + 100, + 19609 + ], + "_PnP_HappyText": [ + 100, + 19485 + ], + "_PnP_InspiringText": [ + 100, + 19667 + ], + "_PnP_LazyText": [ + 100, + 19466 + ], + "_PnP_MyTypeText": [ + 100, + 19630 + ], + "_PnP_NoisyText": [ + 100, + 19504 + ], + "_PnP_OddText": [ + 100, + 19722 + ], + "_PnP_PickyText": [ + 100, + 19559 + ], + "_PnP_PrecociousText": [ + 100, + 19522 + ], + "_PnP_RightForMeText": [ + 100, + 19703 + ], + "_PnP_SoSoText": [ + 100, + 19592 + ], + "_PnP_SortOfOKText": [ + 100, + 19575 + ], + "_PnP_Text1": [ + 100, + 19385 + ], + "_PnP_Text2": [ + 100, + 19406 + ], + "_PnP_Text3": [ + 100, + 19426 + ], + "_PnP_Text4": [ + 100, + 19441 + ], + "_PnP_Text5": [ + 100, + 19743 + ], + "_PnP_WeirdText": [ + 100, + 19683 + ], + "_PocketIsFullText": [ + 101, + 23522 + ], + "_PoisonFaintText": [ + 101, + 17552 + ], + "_PoisonWhiteoutText": [ + 101, + 17566 + ], + "_PokecenterBillsPCText": [ + 101, + 19931 + ], + "_PokecenterOaksPCText": [ + 101, + 20025 + ], + "_PokecenterPCCantUseText": [ + 101, + 19599 + ], + "_PokecenterPCOaksClosedText": [ + 101, + 20076 + ], + "_PokecenterPCTurnOnText": [ + 101, + 19892 + ], + "_PokecenterPCWhoseText": [ + 101, + 19913 + ], + "_PokecenterPlayersPCText": [ + 101, + 19979 + ], + "_PokedexShowText": [ + 100, + 18961 + ], + "_PokegearAskDeleteText": [ + 102, + 16575 + ], + "_PokegearAskWhoCallText": [ + 102, + 16521 + ], + "_PokegearPressButtonText": [ + 102, + 16548 + ], + "_PokemonAskSwapItemText": [ + 101, + 21687 + ], + "_PokemonHoldItemText": [ + 101, + 21554 + ], + "_PokemonNotEnoughHPText": [ + 101, + 21950 + ], + "_PokemonNotHoldingText": [ + 101, + 21609 + ], "_PokemonRemoveMailText": [ 101, 21578 ], + "_PokemonSwapItemText": [ + 101, + 21511 + ], + "_PokemonTookItemText": [ + 101, + 21663 + ], "_PrepMonFrontpic": [ 0, 14783 ], + "_PrestoAllDoneText": [ + 100, + 23375 + ], + "_PutAwayAndSetUpText": [ + 100, + 17714 + ], + "_PutAwayTheDecoText": [ + 100, + 17645 + ], + "_PutItemInPocketText": [ + 101, + 23491 + ], + "_RaiseThePPOfWhichMoveText": [ + 102, + 17841 + ], + "_ReceiveItemText": [ + 100, + 20211 + ], "_ReceivedEggText": [ 100, 23178 ], + "_ReceivedItemText": [ + 101, + 23472 + ], + "_ReceivedTMHMText": [ + 100, + 24500 + ], + "_RecoveredSomeHPText": [ + 100, + 16491 + ], + "_RegisteredItemText": [ + 101, + 17906 + ], + "_RemainingTimeText": [ + 100, + 17092 + ], "_RemoveMailText": [ 100, 22463 ], + "_RepelUsedEarlierIsStillInEffectText": [ + 102, + 17682 + ], + "_RepelWoreOffText": [ + 100, + 20029 + ], + "_RestoreThePPOfWhichMoveText": [ + 102, + 17870 + ], + "_RetrieveMysteryGiftText": [ + 100, + 24573 + ], + "_RevitalizedText": [ + 100, + 16643 + ], + "_RidOfParalysisText": [ + 100, + 16539 + ], + "_RocketRadioText1": [ + 100, + 19751 + ], + "_RocketRadioText10": [ + 100, + 19931 + ], + "_RocketRadioText2": [ + 100, + 19769 + ], + "_RocketRadioText3": [ + 100, + 19784 + ], + "_RocketRadioText4": [ + 100, + 19804 + ], + "_RocketRadioText5": [ + 100, + 19825 + ], + "_RocketRadioText6": [ + 100, + 19844 + ], + "_RocketRadioText7": [ + 100, + 19862 + ], + "_RocketRadioText8": [ + 100, + 19885 + ], + "_RocketRadioText9": [ + 100, + 19907 + ], + "_RodBiteText": [ + 101, + 17180 + ], + "_RodNothingText": [ + 101, + 17193 + ], + "_SaveFileCorruptedText": [ + 101, + 23203 + ], + "_SavedTheGameText": [ + 101, + 23078 + ], + "_SavingDontTurnOffThePowerText": [ + 101, + 23043 + ], + "_SavingRecordText": [ + 100, + 20179 + ], + "_SentTrophyHomeText": [ + 102, + 17962 + ], + "_SetUpTheDecoText": [ + 100, + 17695 + ], + "_SlotsBetHowManyCoinsText": [ + 101, + 24749 + ], + "_SlotsDarnText": [ + 102, + 16477 + ], + "_SlotsLinedUpText": [ + 102, + 16449 + ], + "_SlotsNotEnoughCoinsText": [ + 102, + 16392 + ], + "_SlotsPlayAgainText": [ + 102, + 16436 + ], + "_SlotsRanOutOfCoinsText": [ + 102, + 16411 + ], + "_SlotsStartText": [ + 102, + 16384 + ], + "_SpaceSpaceColonText": [ + 102, + 16722 + ], + "_SquirtbottleNothingText": [ + 101, + 17663 + ], + "_StartMenuContestEndText": [ + 101, + 21319 + ], + "_StopLearningMoveText": [ + 102, + 16921 + ], + "_StoppedEvolvingText": [ + 101, + 23593 + ], + "_SweetScentNothingText": [ + 101, + 17630 + ], + "_TMHMNotCompatibleText": [ + 100, + 24405 + ], "_TakeGoodCareOfEggText": [ 100, 23199 @@ -17708,14 +20652,226 @@ 100, 18229 ], + "_TeleportReturnText": [ + 101, + 16603 + ], + "_TestEventText": [ + 100, + 17356 + ], + "_ThatCantBeUsedRightNowText": [ + 100, + 16994 + ], + "_ThatItemCantBePutInThePackText": [ + 100, + 17024 + ], + "_ThatsEnoughComeBackText": [ + 100, + 24228 + ], + "_TheBoxIsFullText": [ + 100, + 17428 + ], + "_TheItemWasPutInThePackText": [ + 100, + 17060 + ], + "_ThePasswordIsText": [ + 100, + 17474 + ], + "_ThereIsNoEggText": [ + 100, + 17316 + ], + "_ThrewAwayText": [ + 101, + 17820 + ], + "_TimeAskOkayText": [ + 102, + 18712 + ], + "_TimesetAskAdjustDSTText": [ + 102, + 18876 + ], + "_TimesetAskDSTText": [ + 102, + 18727 + ], + "_TimesetAskNotDSTText": [ + 102, + 18813 + ], + "_TimesetDSTText": [ + 102, + 18775 + ], + "_TimesetNotDSTText": [ + 102, + 18844 + ], + "_UnusedNothingHereText": [ + 101, + 17213 + ], + "_UseCutText": [ + 100, + 24803 + ], + "_UseDigText": [ + 101, + 16543 + ], + "_UseEscapeRopeText": [ + 101, + 16558 + ], + "_UseHeadbuttText": [ + 101, + 16984 + ], + "_UseRockSmashText": [ + 101, + 17073 + ], + "_UseSacredAshText": [ + 101, + 17705 + ], + "_UseStrengthText": [ + 101, + 16693 + ], + "_UseSweetScentText": [ + 101, + 17607 + ], + "_UseWaterfallText": [ + 101, + 16463 + ], + "_UseWhirlpoolText": [ + 101, + 16855 + ], + "_UsedInsteadText": [ + 101, + 18045 + ], + "_UsedMove1Text": [ + 101, + 18027 + ], + "_UsedMove2Text": [ + 101, + 18036 + ], + "_UsedSurfText": [ + 100, + 24885 + ], + "_WaitButtonText": [ + 102, + 17532 + ], + "_WarpingText": [ + 100, + 17135 + ], + "_WasDefrostedText": [ + 100, + 16586 + ], + "_WasSentToBillsPCText": [ + 101, + 18771 + ], + "_WhatDoYouWantToPlayWithText": [ + 100, + 17376 + ], "_WhatShouldIRaiseText": [ 100, 22366 ], + "_WhichMonPhotoText": [ + 100, + 23305 + ], + "_WhichSidePutAwayText": [ + 100, + 17608 + ], + "_WhichSidePutOnText": [ + 100, + 17570 + ], + "_WhitedOutText": [ + 101, + 17426 + ], + "_WillTradeText": [ + 100, + 18292 + ], + "_WillYouPlayWithMonText": [ + 100, + 17178 + ], + "_WindowAreaExceededErrorText": [ + 101, + 23337 + ], + "_WindowPoppingErrorText": [ + 101, + 23373 + ], + "_WokeUpText": [ + 100, + 16606 + ], + "_WouldYouLikeToSaveTheGameText": [ + 101, + 23009 + ], + "_YouCanHaveThisText": [ + 100, + 17408 + ], + "_YouCantUseItInABattleText": [ + 101, + 17993 + ], + "_YouDontHaveAMonText": [ + 101, + 17883 + ], + "_YouNeedTwoMonForBreedingText": [ + 100, + 17205 + ], + "_YourFoesWeakGetmMonText": [ + 100, + 24191 + ], + "_YourFriendIsNotReadyText": [ + 100, + 24609 + ], "_YourMonHasGrownText": [ 100, 22651 ], + "_YourMonsHPWasHealedText": [ + 100, + 17108 + ], "wBaseUnusedBackpic": [ 1, 53556 @@ -17725,6 +20881,899 @@ 53554 ] }, + "text": { + "labels": [ + "AlreadyAsleepText", + "AlreadyConfusedText", + "AlreadyParalyzedText", + "AlreadyPoisonedText", + "AskNumber1FText", + "AskNumber1MText", + "AskNumber2FText", + "AskNumber2MText", + "AttackMissed2Text", + "AttackMissedText", + "BadlyPoisonedText", + "BattleText_AnEGGCantBattle", + "BattleText_CantEscape", + "BattleText_CantEscape2", + "BattleText_EnemyFled", + "BattleText_EnemyIsAboutToUseWillPlayerChangeMon", + "BattleText_EnemyMonFainted", + "BattleText_EnemySentOut", + "BattleText_EnemyWasDefeated", + "BattleText_GotAwaySafely", + "BattleText_ItemHealedConfusion", + "BattleText_ItemsCantBeUsedHere", + "BattleText_MonCantBeRecalled", + "BattleText_MonFainted", + "BattleText_MonHasNoMovesLeft", + "BattleText_MonIsAlreadyOut", + "BattleText_MonsLightScreenFell", + "BattleText_MonsReflectFaded", + "BattleText_PlayerPickedUpPayDayMoney", + "BattleText_RainContinuesToFall", + "BattleText_SafeguardFaded", + "BattleText_StringBuffer1GrewToLevel", + "BattleText_TargetRecoveredWithItem", + "BattleText_TargetWasHitByFutureSight", + "BattleText_TargetsEncoreEnded", + "BattleText_TheMoveIsDisabled", + "BattleText_TheRainStopped", + "BattleText_TheSandstormRages", + "BattleText_TheSandstormSubsided", + "BattleText_TheSunlightFaded", + "BattleText_TheSunlightIsStrong", + "BattleText_TheresNoEscapeFromTrainerBattle", + "BattleText_TheresNoPPLeftForThisMove", + "BattleText_TheresNoWillToBattle", + "BattleText_UseNextMon", + "BattleText_UserFledUsingAStringBuffer1", + "BattleText_UserHurtBySpikes", + "BattleText_UserRecoveredPPUsing", + "BattleText_UserWasReleasedFromStringBuffer1", + "BattleText_UsersHurtByStringBuffer1", + "BattleText_UsersStringBuffer1Activated", + "BattleText_WildFled", + "BattleText_WildMonIsAngry", + "BattleText_WildMonIsEating", + "BeatUpAttackText", + "BecameConfusedText", + "BeganToNapText", + "BellChimedText", + "BellyDrumText", + "BlewSpikesText", + "BlownAwayText", + "BracedItselfText", + "BugContestPrizeNoRoomText", + "ButItFailedText", + "CantEscapeNowText", + "ClampedByText", + "CoinVendor_Buy500CoinsText", + "CoinVendor_Buy50CoinsText", + "CoinVendor_CancelText", + "CoinVendor_CoinCaseFullText", + "CoinVendor_IntroText", + "CoinVendor_NoCoinCaseText", + "CoinVendor_NotEnoughMoneyText", + "CoinVendor_WelcomeText", + "CoinsScatteredText", + "ConfusedNoMoreText", + "ContestResults_ConsolationPrizeText", + "ContestResults_DidNotWinText", + "ContestResults_JoinUsNextTimeText", + "ContestResults_PartyFullText", + "ContestResults_PlayerWonAPrizeText", + "ContestResults_ReadyToJudgeText", + "ContestResults_ReturnPartyText", + "CopiedStatsText", + "CoveredByVeilText", + "CrashedText", + "CriticalHitText", + "DefrostedOpponentText", + "DestinyBondEffectText", + "DidntAffect1Text", + "DidntAffect2Text", + "DifficultBookshelfText", + "DisabledMoveText", + "DisabledNoMoreText", + "DoesntAffectText", + "DownpourText", + "DraggedOutText", + "DreamEatenText", + "EliminatedStatsText", + "EnduredText", + "EnemyHitTimesText", + "EvadedText", + "FastAsleepText", + "FellAsleepText", + "FellInLoveText", + "FledFromBattleText", + "FledInFearText", + "FlinchedText", + "ForesawAttackText", + "FrozenSolidText", + "FullyParalyzedText", + "GettingPumpedText", + "GotAnEncoreText", + "GotMoneyForWinningText", + "GymStatue_CityGymText", + "GymStatue_WinningTrainersText", + "HPIsFullText", + "HappinessText1", + "HappinessText2", + "HappinessText3", + "HasANightmareText", + "HasNoPPLeftText", + "HasSubstituteText", + "HomepageText", + "HookedPokemonAttackedText", + "HungOnText", + "HurtByBurnText", + "HurtByCurseText", + "HurtByPoisonText", + "HurtItselfText", + "IdentifiedText", + "IgnoredOrders2Text", + "IgnoredOrdersText", + "IgnoredSleepingText", + "InLoveWithText", + "IncenseBurnerText", + "InfatuationText", + "IsConfusedText", + "ItFailedText", + "LeechSeedSapsText", + "LightScreenEffectText", + "LoafingAroundText", + "LookTownMapText", + "LostAgainstText", + "MadeSubstituteText", + "MagazineBookshelfText", + "MagnitudeText", + "MartSignText", + "MerchandiseShelfText", + "MimicLearnedMoveText", + "MirrorMoveFailedText", + "MistText", + "MustRechargeText", + "NoPPLeftText", + "NotVeryEffectiveText", + "NothingHappenedText", + "NumberAcceptedFText", + "NumberAcceptedMText", + "NumberDeclinedFText", + "NumberDeclinedMText", + "NurseAskHealText", + "NurseDayText", + "NurseGoodbyeText", + "NurseMornText", + "NurseNiteText", + "NursePokerusText", + "NurseReturnPokemonText", + "NurseTakePokemonText", + "OneHitKOText", + "ParalyzedText", + "PerishCountText", + "PhoneFullFText", + "PhoneFullMText", + "PictureBookshelfText", + "PlayerHitTimesText", + "PokecenterSignText", + "PokemonFellFromTreeText", + "PresentFailedText", + "ProtectedByMistText", + "ProtectedByText", + "ProtectedItselfText", + "ProtectingItselfText", + "PutACurseText", + "RageBuildingText", + "ReceivedItemText", + "RecoilText", + "RecoveredUsingText", + "ReflectEffectText", + "RegainedHealthText", + "RegisteredNumberFText", + "RegisteredNumberMText", + "ReleasedByText", + "RematchFText", + "RematchMText", + "RestedText", + "SafeguardProtectText", + "SandstormBrewedText", + "SandstormHitsText", + "SentAllToMomText", + "SentHalfToMomText", + "SentSomeToMomText", + "SharedPainText", + "ShedLeechSeedText", + "SketchedText", + "SpikesText", + "SpiteEffectText", + "StartPerishText", + "StartedNightmareText", + "StoleText", + "StoringEnergyText", + "SubFadedText", + "SubTookDamageText", + "SuckedHealthText", + "SunGotBrightText", + "SuperEffectiveText", + "TVText", + "TeamRocketOathText", + "Text_BallCaught", + "Text_BattleEffectActivate", + "Text_BattleFoeEffectActivate", + "Text_BattleUser", + "Text_BreedHuh", + "Text_Gained", + "Text_MoveForgetCount", + "Text_NPCTraded", + "Text_PlayedPokeFlute", + "TiedAgainstText", + "TooWeakSubText", + "TookAimText", + "TookDownWithItText", + "TransformedText", + "TransformedTypeText", + "TrashCanText", + "TurnedAwayText", + "UnaffectedText", + "UnleashedEnergyText", + "UnusedRivalLossText", + "UnusedRivalWinText", + "UsedBindText", + "WantsToBattleText", + "WasBurnedText", + "WasDefrostedText", + "WasDisabledText", + "WasFrozenText", + "WasPoisonedText", + "WasSeededText", + "WasTrappedText", + "WentToSleepText", + "WildPokemonAppearedText", + "WindowText", + "WokeUpText", + "WontDropAnymoreText", + "WontObeyText", + "WontRiseAnymoreText", + "WrappedByText", + "_ActorNameText", + "_AlreadyASaveFileText", + "_AlreadySetUpText", + "_AlreadySurfingText", + "_AlreadyUsingStrengthText", + "_AnEggCantHoldAnItemText", + "_AnotherSaveFileText", + "_AreWeGeniusesText", + "_AskCutText", + "_AskDeleteMoveText", + "_AskFloorElevatorText", + "_AskForgetMoveText", + "_AskGiveNicknameText", + "_AskHeadbuttText", + "_AskItemMoveText", + "_AskQuantityThrowAwayText", + "_AskRockSmashText", + "_AskStrengthText", + "_AskSurfText", + "_AskThrowAwayText", + "_AskWaterfallText", + "_AskWhirlpoolText", + "_BGEventText", + "_BackAlreadyText", + "_BadgeRequiredText", + "_BallAlmostHadItText", + "_BallAppearedCaughtText", + "_BallBlockedText", + "_BallBoxFullText", + "_BallBrokeFreeText", + "_BallDodgedText", + "_BallDontBeAThiefText", + "_BallMissedText", + "_BallSentToPCText", + "_BallSoCloseText", + "_BargainShopComeAgainText", + "_BargainShopFinalPriceText", + "_BargainShopIntroText", + "_BargainShopNoFundsText", + "_BargainShopPackFullText", + "_BargainShopSoldOutText", + "_BargainShopThanksText", + "_BattleDugText", + "_BattleFlewText", + "_BattleGlowingText", + "_BattleLoweredHeadText", + "_BattleMadeWhirlwindText", + "_BattleMonNickCommaText", + "_BattleStatFellText", + "_BattleStatSharplyFellText", + "_BattleStatWentUpText", + "_BattleStatWentWayUpText", + "_BattleTookSunlightText", + "_BenFernText1", + "_BenFernText2A", + "_BenFernText2B", + "_BenFernText3A", + "_BenFernText3B", + "_BenIntroText1", + "_BenIntroText2", + "_BenIntroText3", + "_BidsFarewellToMonText", + "_BlindingFlashText", + "_BoostedExpPointsText", + "_BootedHMText", + "_BootedTMText", + "_BouldersMayMoveText", + "_BouldersMoveText", + "_BreedAppearsToCareForText", + "_BreedAskNicknameText", + "_BreedBrimmingWithEnergyText", + "_BreedClearboxText", + "_BreedEggHatchText", + "_BreedFriendlyText", + "_BreedNoInterestText", + "_BreedShowsInterestText", + "_BreedingIsNotPossibleText", + "_BugCatchingContestIsOverText", + "_BugCatchingContestTimeUpText", + "_BurnWasHealedText", + "_ButNoSpaceText", + "_CameToItsSensesText", + "_CanCutText", + "_CantAcceptEggText", + "_CantCarryItemText", + "_CantGetOffBikeText", + "_CantRegisterText", + "_CantSurfText", + "_CantUseDigText", + "_CantUseItemText", + "_CantUseTeleportText", + "_CardFlipChooseACardText", + "_CardFlipDarnText", + "_CardFlipNotEnoughCoinsText", + "_CardFlipPlaceYourBetText", + "_CardFlipPlayAgainText", + "_CardFlipPlayWithThreeCoinsText", + "_CardFlipShuffledText", + "_CardFlipYeahText", + "_CaughtAskNicknameText", + "_ChangeBoxSaveText", + "_ChangeWhichNumberText", + "_ClearAllSaveDataText", + "_ClockHasResetText", + "_ClockIsThisOKText", + "_ClockSetWithControlPadText", + "_ClockTimeMayBeWrongText", + "_CoinCaseCountText", + "_ComeAgainText", + "_ComeBackLaterText", + "_ComeBackText", + "_CompatibilityShouldTheyBreedText", + "_CongratulationsYourPokemonText", + "_ContainedMoveText", + "_ContestAlreadyCaughtText", + "_ContestAskSwitchText", + "_ContestCaughtMonText", + "_ContestJudging_FirstPlaceScoreText", + "_ContestJudging_FirstPlaceText", + "_ContestJudging_SecondPlaceScoreText", + "_ContestJudging_SecondPlaceText", + "_ContestJudging_ThirdPlaceScoreText", + "_ContestJudging_ThirdPlaceText", + "_CoordinatesEventText", + "_CorruptedEventText", + "_CuredOfPoisonText", + "_CutNothingText", + "_DSTIsThatOKText", + "_DayCareLadyIntroEggText", + "_DayCareLadyIntroText", + "_DayCareManIntroEggText", + "_DayCareManIntroText", + "_DaycareDummyText", + "_DeleterAskWhichMonText", + "_DeleterAskWhichMoveText", + "_DeleterEggText", + "_DeleterForgotMoveText", + "_DeleterIntroText", + "_DeleterNoComeAgainText", + "_DidNotLearnMoveText", + "_DoItMonText", + "_EggPhotoText", + "_EmptyMailboxText", + "_EndUsedMove1Text", + "_EndUsedMove2Text", + "_EndUsedMove3Text", + "_EndUsedMove4Text", + "_EndUsedMove5Text", + "_EnemyUsedOnText", + "_EnemyWithdrewText", + "_EnterTheAmountText", + "_EnterTheIDNoText", + "_EvolvedIntoText", + "_EvolvingText", + "_ExpPointsText", + "_FernIntroText1", + "_FernIntroText2", + "_FluteWakeUpText", + "_ForYourMonSendsText", + "_ForYourMonWillTradeText", + "_FoundAnEggText", + "_FoundItemText", + "_FruitBearingTreeText", + "_FruitPackIsFullText", + "_GearEllipseText", + "_GearOutOfServiceText", + "_GearTodayText", + "_GoForItMonText", + "_GoMonText", + "_GoodComeBackText", + "_GotBackMonText", + "_GotOffBikeText", + "_GotOnBikeText", + "_GrewToLevelText", + "_HaveNoRoomText", + "_HeadbuttNothingText", + "_HealthReturnedText", + "_HerbShopLadyIntroText", + "_HerbalLadyComeAgainText", + "_HerbalLadyFinalPriceText", + "_HerbalLadyHowManyText", + "_HerbalLadyNoMoneyText", + "_HerbalLadyPackFullText", + "_HerbalLadyThanksText", + "_HeyItsFruitText", + "_HoldStillText", + "_HugeWaterfallText", + "_IllKeepItThanksText", + "_IllRaiseYourMonText", + "_IsThisOKText", + "_ItemBelongsToSomeoneElseText", + "_ItemCantGetOnText", + "_ItemCantHeldText", + "_ItemCantUseOnEggText", + "_ItemCantUseOnMonText", + "_ItemGotOffText", + "_ItemGotOnText", + "_ItemLooksBitterText", + "_ItemOakWarningText", + "_ItemStatRoseText", + "_ItemStorageFullText", + "_ItemUsedText", + "_ItemWontHaveEffectText", + "_ItemfinderItemNearbyText", + "_ItemfinderNopeText", + "_ItemsDiscardedText", + "_ItemsOakWarningText", + "_ItemsThrowAwayText", + "_ItemsTooImportantText", + "_ItemsTossOutHowManyText", + "_ItsGoingToHatchText", + "_JustSawSomeRareMonText", + "_KarpGuruRecordText", + "_KnowsMoveText", + "_LC_DragText1", + "_LC_DragText2", + "_LC_Text1", + "_LC_Text10", + "_LC_Text11", + "_LC_Text2", + "_LC_Text3", + "_LC_Text4", + "_LC_Text5", + "_LC_Text6", + "_LC_Text7", + "_LC_Text8", + "_LC_Text9", + "_LastHealthyMonText", + "_LearnedMoveText", + "_LeftWithDayCareLadyText", + "_LeftWithDayCareManText", + "_LinkAbnormalMonText", + "_LinkAskTradeForText", + "_LinkTimeoutText", + "_LinkTradeCantBattleText", + "_LookAdorableDecoText", + "_LookClefairyPosterText", + "_LookGiantDecoText", + "_LookJigglypuffPosterText", + "_LookPikachuPosterText", + "_LookTownMapText", + "_LuckyNumberMatchPCText", + "_LuckyNumberMatchPartyText", + "_MagikarpGuruMeasureText", + "_MailAlreadyHoldingItemText", + "_MailAskSendToPCText", + "_MailClearedPutAwayText", + "_MailDetachedText", + "_MailEggText", + "_MailLoseMessageText", + "_MailMessageLostText", + "_MailMovedFromBoxText", + "_MailNoSpaceText", + "_MailPackFullText", + "_MailSentToPCText", + "_MailboxFullText", + "_MainMenuTimeUnknownText", + "_MartAskMoreText", + "_MartBoughtText", + "_MartCantBuyText", + "_MartComeAgainText", + "_MartFinalPriceText", + "_MartHowManyText", + "_MartNoMoneyText", + "_MartPackFullText", + "_MartSellHowManyText", + "_MartSellPriceText", + "_MartThanksText", + "_MartWelcomeText", + "_MayPassWhirlpoolText", + "_MayRegisterItemText", + "_MaySmashText", + "_MemoryGameDarnText", + "_MemoryGameYeahText", + "_MomBankWhatDoYouWantToDoText", + "_MomBoughtWithYourMoneyText", + "_MomFoundADollText", + "_MomFoundAnItemText", + "_MomHaventSavedThatMuchText", + "_MomHiHowAreYouText", + "_MomInsufficientFundsInWalletText", + "_MomIsThisAboutYourMoneyText", + "_MomItsInPCText", + "_MomItsInYourRoomText", + "_MomJustDoWhatYouCanText", + "_MomLeavingText1", + "_MomLeavingText2", + "_MomLeavingText3", + "_MomLostGearBookletText", + "_MomNotEnoughRoomInBankText", + "_MomNotEnoughRoomInWalletText", + "_MomSaveMoneyText", + "_MomStartSavingMoneyText", + "_MomStoreMoneyText", + "_MomStoredMoneyText", + "_MomTakeMoneyText", + "_MomTakenMoneyText", + "_MonNameBidsFarewellText", + "_MonNameSentToText", + "_MonWasSentToText", + "_MoveAskForgetText", + "_MoveBoulderText", + "_MoveCantForgetHMText", + "_MoveForgotText", + "_MoveKnowsOneText", + "_MoveMonWOMailSaveText", + "_MoveNameText", + "_MysteryGiftCanceledText", + "_MysteryGiftCommErrorText", + "_MysteryGiftFiveADayText", + "_MysteryGiftOneADayText", + "_MysteryGiftSentHomeText", + "_MysteryGiftSentText", + "_NPCTradeAfterText1", + "_NPCTradeAfterText2", + "_NPCTradeAfterText3", + "_NPCTradeCableText", + "_NPCTradeCancelText1", + "_NPCTradeCancelText2", + "_NPCTradeCancelText3", + "_NPCTradeCompleteText1", + "_NPCTradeCompleteText2", + "_NPCTradeCompleteText3", + "_NPCTradeFanfareText", + "_NPCTradeIntroText1", + "_NPCTradeIntroText2", + "_NPCTradeIntroText3", + "_NPCTradeWrongText1", + "_NPCTradeWrongText2", + "_NPCTradeWrongText3", + "_NameRaterBetterNameText", + "_NameRaterComeAgainText", + "_NameRaterEggText", + "_NameRaterFinishedText", + "_NameRaterHelloText", + "_NameRaterNamedText", + "_NameRaterPerfectNameText", + "_NameRaterSameNameText", + "_NameRaterWhatNameText", + "_NameRaterWhichMonText", + "_NewDexDataText", + "_NoCoinCaseText", + "_NoCoinsText", + "_NoCyclingText", + "_NoPhotoText", + "_NoRoomForEggText", + "_NoRoomTMHMText", + "_NotEnoughMoneyText", + "_NotYetText", + "_NothingHereText", + "_NothingToChooseText", + "_NothingToPutAwayText", + "_NothingToSellText", + "_OKComeBackText", + "_OPT_AddictivelyText", + "_OPT_AlmostPoisonouslyText", + "_OPT_AptlyNamedText", + "_OPT_BoldSortOfText", + "_OPT_CuteText", + "_OPT_EvolutionMustBeText", + "_OPT_ExcitingText", + "_OPT_FlippedOutText", + "_OPT_FriendlyText", + "_OPT_FrighteningText", + "_OPT_GuardedText", + "_OPT_HeartMeltinglyText", + "_OPT_HotHotHotText", + "_OPT_InspiringText", + "_OPT_IntroText1", + "_OPT_IntroText2", + "_OPT_IntroText3", + "_OPT_LooksInWaterText", + "_OPT_LovelyText", + "_OPT_MaryText1", + "_OPT_MischievouslyText", + "_OPT_NowText", + "_OPT_OakText1", + "_OPT_OakText2", + "_OPT_OakText3", + "_OPT_PleasantText", + "_OPT_PokemonChannelText", + "_OPT_PowerfulText", + "_OPT_ProvocativelyText", + "_OPT_SensuallyText", + "_OPT_SpeedyText", + "_OPT_StimulatingText", + "_OPT_SuaveDebonairText", + "_OPT_SweetAdorablyText", + "_OPT_TopicallyText", + "_OPT_UnbearablyText", + "_OPT_UndeniablyKindOfText", + "_OPT_WeirdText", + "_OPT_WigglySlicklyText", + "_OPT_WowImpressivelyText", + "_OTSendsText", + "_OakPCText1", + "_OakPCText2", + "_OakPCText3", + "_OakPCText4", + "_OakRating01", + "_OakRating02", + "_OakRating03", + "_OakRating04", + "_OakRating05", + "_OakRating06", + "_OakRating07", + "_OakRating08", + "_OakRating09", + "_OakRating10", + "_OakRating11", + "_OakRating12", + "_OakRating13", + "_OakRating14", + "_OakRating15", + "_OakRating16", + "_OakRating17", + "_OakRating18", + "_OakRating19", + "_OakText1", + "_OakText2", + "_OakText3", + "_OakText4", + "_OakText5", + "_OakText6", + "_OakText7", + "_OakThisIsntTheTimeText", + "_OakTimeHoursQuestionMarkText", + "_OakTimeHowManyMinutesText", + "_OakTimeIsItText", + "_OakTimeMinutesQuestionMarkText", + "_OakTimeOversleptText", + "_OakTimeSoDarkText", + "_OakTimeWhatDayIsItText", + "_OakTimeWhatHoursText", + "_OakTimeWhatTimeIsItText", + "_OakTimeWhoaMinutesText", + "_OakTimeWokeUpText", + "_OakTimeYikesText", + "_ObjectEventText", + "_ObtainedFruitText", + "_ObtainedTheVoltorbBadgeText", + "_OhFineThenText", + "_OnlyOneMonText", + "_PCCantDepositLastMonText", + "_PCCantTakeText", + "_PCGottaHavePokemonText", + "_PCMonHoldingMailText", + "_PCNoSingleMonText", + "_PCWhatText", + "_PPIsMaxedOutText", + "_PPRestoredText", + "_PPsIncreasedText", + "_PackEmptyText", + "_PackNoItemText", + "_PasswordAskEnterText", + "_PasswordAskResetClockText", + "_PasswordAskResetText", + "_PasswordWrongText", + "_PerfectHeresYourMonText", + "_PharmacyComeAgainText", + "_PharmacyFinalPriceText", + "_PharmacyHowManyText", + "_PharmacyIntroText", + "_PharmacyNoMoneyText", + "_PharmacyPackFullText", + "_PharmacyThanksText", + "_PhoneClickText", + "_PhoneEllipseText", + "_PhoneJustTalkToThemText", + "_PhoneOutOfAreaText", + "_PhoneThankYouText", + "_PhoneWrongNumberText", + "_PlayedFluteText", + "_PlayerFoundItemText", + "_PlayerPickedUpPayDayMoney", + "_PlayersPCAskWhatDoText", + "_PlayersPCDepositItemsText", + "_PlayersPCHowManyDepositText", + "_PlayersPCHowManyWithdrawText", + "_PlayersPCNoItemsText", + "_PlayersPCNoRoomDepositText", + "_PlayersPCNoRoomWithdrawText", + "_PlayersPCTurnOnText", + "_PlayersPCWithdrewItemsText", + "_PnP_BoldText", + "_PnP_CoolText", + "_PnP_CuteText", + "_PnP_GreatText", + "_PnP_HappyText", + "_PnP_InspiringText", + "_PnP_LazyText", + "_PnP_MyTypeText", + "_PnP_NoisyText", + "_PnP_OddText", + "_PnP_PickyText", + "_PnP_PrecociousText", + "_PnP_RightForMeText", + "_PnP_SoSoText", + "_PnP_SortOfOKText", + "_PnP_Text1", + "_PnP_Text2", + "_PnP_Text3", + "_PnP_Text4", + "_PnP_Text5", + "_PnP_WeirdText", + "_PocketIsFullText", + "_PoisonFaintText", + "_PoisonWhiteoutText", + "_PokecenterBillsPCText", + "_PokecenterOaksPCText", + "_PokecenterPCCantUseText", + "_PokecenterPCOaksClosedText", + "_PokecenterPCTurnOnText", + "_PokecenterPCWhoseText", + "_PokecenterPlayersPCText", + "_PokedexShowText", + "_PokegearAskDeleteText", + "_PokegearAskWhoCallText", + "_PokegearPressButtonText", + "_PokemonAskSwapItemText", + "_PokemonHoldItemText", + "_PokemonNotEnoughHPText", + "_PokemonNotHoldingText", + "_PokemonRemoveMailText", + "_PokemonSwapItemText", + "_PokemonTookItemText", + "_PrestoAllDoneText", + "_PutAwayAndSetUpText", + "_PutAwayTheDecoText", + "_PutItemInPocketText", + "_RaiseThePPOfWhichMoveText", + "_ReceiveItemText", + "_ReceivedEggText", + "_ReceivedItemText", + "_ReceivedTMHMText", + "_RecoveredSomeHPText", + "_RegisteredItemText", + "_RemainingTimeText", + "_RemoveMailText", + "_RepelUsedEarlierIsStillInEffectText", + "_RepelWoreOffText", + "_RestoreThePPOfWhichMoveText", + "_RetrieveMysteryGiftText", + "_RevitalizedText", + "_RidOfParalysisText", + "_RocketRadioText1", + "_RocketRadioText10", + "_RocketRadioText2", + "_RocketRadioText3", + "_RocketRadioText4", + "_RocketRadioText5", + "_RocketRadioText6", + "_RocketRadioText7", + "_RocketRadioText8", + "_RocketRadioText9", + "_RodBiteText", + "_RodNothingText", + "_SaveFileCorruptedText", + "_SavedTheGameText", + "_SavingDontTurnOffThePowerText", + "_SavingRecordText", + "_SentTrophyHomeText", + "_SetUpTheDecoText", + "_SlotsBetHowManyCoinsText", + "_SlotsDarnText", + "_SlotsLinedUpText", + "_SlotsNotEnoughCoinsText", + "_SlotsPlayAgainText", + "_SlotsRanOutOfCoinsText", + "_SlotsStartText", + "_SpaceSpaceColonText", + "_SquirtbottleNothingText", + "_StartMenuContestEndText", + "_StopLearningMoveText", + "_StoppedEvolvingText", + "_SweetScentNothingText", + "_TMHMNotCompatibleText", + "_TakeGoodCareOfEggText", + "_TakeGoodCareOfMonText", + "_TeleportReturnText", + "_TestEventText", + "_ThatCantBeUsedRightNowText", + "_ThatItemCantBePutInThePackText", + "_ThatsEnoughComeBackText", + "_TheBoxIsFullText", + "_TheItemWasPutInThePackText", + "_ThePasswordIsText", + "_ThereIsNoEggText", + "_ThrewAwayText", + "_TimeAskOkayText", + "_TimesetAskAdjustDSTText", + "_TimesetAskDSTText", + "_TimesetAskNotDSTText", + "_TimesetDSTText", + "_TimesetNotDSTText", + "_UnusedNothingHereText", + "_UseCutText", + "_UseDigText", + "_UseEscapeRopeText", + "_UseHeadbuttText", + "_UseRockSmashText", + "_UseSacredAshText", + "_UseStrengthText", + "_UseSweetScentText", + "_UseWaterfallText", + "_UseWhirlpoolText", + "_UsedInsteadText", + "_UsedMove1Text", + "_UsedMove2Text", + "_UsedSurfText", + "_WaitButtonText", + "_WarpingText", + "_WasDefrostedText", + "_WasSentToBillsPCText", + "_WhatDoYouWantToPlayWithText", + "_WhatShouldIRaiseText", + "_WhichMonPhotoText", + "_WhichSidePutAwayText", + "_WhichSidePutOnText", + "_WhitedOutText", + "_WillTradeText", + "_WillYouPlayWithMonText", + "_WindowAreaExceededErrorText", + "_WindowPoppingErrorText", + "_WokeUpText", + "_WouldYouLikeToSaveTheGameText", + "_YouCanHaveThisText", + "_YouCantUseItInABattleText", + "_YouDontHaveAMonText", + "_YouNeedTwoMonForBreedingText", + "_YourFoesWeakGetmMonText", + "_YourFriendIsNotReadyText", + "_YourMonHasGrownText", + "_YourMonsHPWasHealedText" + ] + }, "tilesets": { "TILESET_CAVE": {}, "TILESET_CHAMPIONS_ROOM": {}, diff --git a/tools/rom_manifest_silver.json b/tools/rom_manifest_silver.json index 065dc1c6..0b869a25 100644 --- a/tools/rom_manifest_silver.json +++ b/tools/rom_manifest_silver.json @@ -12712,6 +12712,22 @@ 16, 19557 ], + "AlreadyAsleepText": [ + 64, + 23414 + ], + "AlreadyConfusedText": [ + 64, + 22417 + ], + "AlreadyParalyzedText": [ + 64, + 24391 + ], + "AlreadyPoisonedText": [ + 64, + 23471 + ], "AmpharosBackpic": [ 29, 27083 @@ -12816,6 +12832,30 @@ 106, 18071 ], + "AskNumber1FText": [ + 64, + 19476 + ], + "AskNumber1MText": [ + 64, + 19144 + ], + "AskNumber2FText": [ + 64, + 19575 + ], + "AskNumber2MText": [ + 64, + 19229 + ], + "AttackMissed2Text": [ + 64, + 23016 + ], + "AttackMissedText": [ + 64, + 22997 + ], "AzumarillBackpic": [ 30, 17179 @@ -12832,6 +12872,10 @@ 9, 25135 ], + "BadlyPoisonedText": [ + 64, + 23451 + ], "BargainShopData": [ 5, 24282 @@ -12860,6 +12904,178 @@ 2, 23561 ], + "BattleText_AnEGGCantBattle": [ + 64, + 21740 + ], + "BattleText_CantEscape": [ + 64, + 21862 + ], + "BattleText_CantEscape2": [ + 64, + 21761 + ], + "BattleText_EnemyFled": [ + 64, + 20885 + ], + "BattleText_EnemyIsAboutToUseWillPlayerChangeMon": [ + 64, + 21648 + ], + "BattleText_EnemyMonFainted": [ + 64, + 21358 + ], + "BattleText_EnemySentOut": [ + 64, + 21694 + ], + "BattleText_EnemyWasDefeated": [ + 64, + 21408 + ], + "BattleText_GotAwaySafely": [ + 64, + 21821 + ], + "BattleText_ItemHealedConfusion": [ + 64, + 22384 + ], + "BattleText_ItemsCantBeUsedHere": [ + 64, + 21945 + ], + "BattleText_MonCantBeRecalled": [ + 64, + 21992 + ], + "BattleText_MonFainted": [ + 64, + 21563 + ], + "BattleText_MonHasNoMovesLeft": [ + 64, + 22072 + ], + "BattleText_MonIsAlreadyOut": [ + 64, + 21971 + ], + "BattleText_MonsLightScreenFell": [ + 64, + 21165 + ], + "BattleText_MonsReflectFaded": [ + 64, + 21195 + ], + "BattleText_PlayerPickedUpPayDayMoney": [ + 64, + 20748 + ], + "BattleText_RainContinuesToFall": [ + 64, + 21221 + ], + "BattleText_SafeguardFaded": [ + 64, + 21144 + ], + "BattleText_StringBuffer1GrewToLevel": [ + 64, + 22114 + ], + "BattleText_TargetRecoveredWithItem": [ + 64, + 21062 + ], + "BattleText_TargetWasHitByFutureSight": [ + 64, + 21116 + ], + "BattleText_TargetsEncoreEnded": [ + 64, + 22096 + ], + "BattleText_TheMoveIsDisabled": [ + 64, + 22049 + ], + "BattleText_TheRainStopped": [ + 64, + 21293 + ], + "BattleText_TheSandstormRages": [ + 64, + 21271 + ], + "BattleText_TheSandstormSubsided": [ + 64, + 21333 + ], + "BattleText_TheSunlightFaded": [ + 64, + 21312 + ], + "BattleText_TheSunlightIsStrong": [ + 64, + 21246 + ], + "BattleText_TheresNoEscapeFromTrainerBattle": [ + 64, + 21775 + ], + "BattleText_TheresNoPPLeftForThisMove": [ + 64, + 22015 + ], + "BattleText_TheresNoWillToBattle": [ + 64, + 21713 + ], + "BattleText_UseNextMon": [ + 64, + 21577 + ], + "BattleText_UserFledUsingAStringBuffer1": [ + 64, + 21839 + ], + "BattleText_UserHurtBySpikes": [ + 64, + 21876 + ], + "BattleText_UserRecoveredPPUsing": [ + 64, + 21087 + ], + "BattleText_UserWasReleasedFromStringBuffer1": [ + 64, + 22458 + ], + "BattleText_UsersHurtByStringBuffer1": [ + 64, + 22439 + ], + "BattleText_UsersStringBuffer1Activated": [ + 64, + 21924 + ], + "BattleText_WildFled": [ + 64, + 20867 + ], + "BattleText_WildMonIsAngry": [ + 64, + 22166 + ], + "BattleText_WildMonIsEating": [ + 64, + 22143 + ], "BattleWinSlideInEnemyTrainerFrontpic": [ 15, 27158 @@ -12876,6 +13092,14 @@ 106, 19029 ], + "BeatUpAttackText": [ + 64, + 25058 + ], + "BecameConfusedText": [ + 64, + 22364 + ], "BeedrillBackpic": [ 24, 19540 @@ -12888,6 +13112,14 @@ 104, 17937 ], + "BeganToNapText": [ + 64, + 22758 + ], + "BellChimedText": [ + 64, + 23381 + ], "BellossomBackpic": [ 26, 27056 @@ -12912,6 +13144,10 @@ 105, 16840 ], + "BellyDrumText": [ + 64, + 24967 + ], "BillsPCOrangePalette": [ 2, 21965 @@ -12928,6 +13164,10 @@ 104, 17262 ], + "BlewSpikesText": [ + 64, + 24899 + ], "BlisseyBackpic": [ 29, 31762 @@ -12940,14 +13180,26 @@ 107, 21782 ], + "BlownAwayText": [ + 64, + 23687 + ], "BoltEmote": [ 5, 17737 ], + "BracedItselfText": [ + 64, + 24750 + ], "BugCatchingContestantEventFlagTable": [ 4, 32186 ], + "BugContestPrizeNoRoomText": [ + 64, + 20500 + ], "BulbasaurBackpic": [ 29, 21089 @@ -12960,6 +13212,10 @@ 104, 16384 ], + "ButItFailedText": [ + 64, + 24229 + ], "ButterfreeBackpic": [ 21, 23446 @@ -12976,6 +13232,10 @@ 26, 27406 ], + "CantEscapeNowText": [ + 64, + 24492 + ], "CardFlipLZ01": [ 56, 21795 @@ -13112,6 +13372,10 @@ 48, 16384 ], + "ClampedByText": [ + 64, + 22542 + ], "ClefableBackpic": [ 22, 26062 @@ -13164,10 +13428,82 @@ 105, 19288 ], + "CoinVendor_Buy500CoinsText": [ + 64, + 20375 + ], + "CoinVendor_Buy50CoinsText": [ + 64, + 20344 + ], + "CoinVendor_CancelText": [ + 64, + 20469 + ], + "CoinVendor_CoinCaseFullText": [ + 64, + 20436 + ], + "CoinVendor_IntroText": [ + 64, + 20267 + ], + "CoinVendor_NoCoinCaseText": [ + 64, + 20196 + ], + "CoinVendor_NotEnoughMoneyText": [ + 64, + 20407 + ], + "CoinVendor_WelcomeText": [ + 64, + 20167 + ], + "CoinsScatteredText": [ + 64, + 24042 + ], + "ConfusedNoMoreText": [ + 64, + 22342 + ], "ContestMons": [ 37, 31672 ], + "ContestResults_ConsolationPrizeText": [ + 64, + 19913 + ], + "ContestResults_DidNotWinText": [ + 64, + 19967 + ], + "ContestResults_JoinUsNextTimeText": [ + 64, + 19875 + ], + "ContestResults_PartyFullText": [ + 64, + 20053 + ], + "ContestResults_PlayerWonAPrizeText": [ + 64, + 19818 + ], + "ContestResults_ReadyToJudgeText": [ + 64, + 19046 + ], + "ContestResults_ReturnPartyText": [ + 64, + 20001 + ], + "CopiedStatsText": [ + 64, + 25003 + ], "CopyBackpic": [ 15, 31090 @@ -13188,6 +13524,14 @@ 107, 19610 ], + "CoveredByVeilText": [ + 64, + 24785 + ], + "CrashedText": [ + 64, + 23035 + ], "CreditsBellossomGFX": [ 33, 27958 @@ -13216,6 +13560,10 @@ 58, 20882 ], + "CriticalHitText": [ + 64, + 23099 + ], "CrobatBackpic": [ 29, 31225 @@ -13280,6 +13628,10 @@ 9, 29015 ], + "DefrostedOpponentText": [ + 64, + 23552 + ], "DelibirdBackpic": [ 26, 28452 @@ -13292,6 +13644,10 @@ 107, 19939 ], + "DestinyBondEffectText": [ + 64, + 23307 + ], "DewgongBackpic": [ 30, 25706 @@ -13304,6 +13660,18 @@ 105, 18852 ], + "DidntAffect1Text": [ + 64, + 24257 + ], + "DidntAffect2Text": [ + 64, + 24277 + ], + "DifficultBookshelfText": [ + 64, + 18433 + ], "DiglettBackpic": [ 21, 32573 @@ -13328,6 +13696,14 @@ 2, 31366 ], + "DisabledMoveText": [ + 64, + 22711 + ], + "DisabledNoMoreText": [ + 64, + 22270 + ], "DittoBackpic": [ 30, 20050 @@ -13364,6 +13740,10 @@ 105, 18509 ], + "DoesntAffectText": [ + 64, + 23078 + ], "DoneTileAnimation": [ 63, 17058 @@ -13380,6 +13760,14 @@ 107, 20701 ], + "DownpourText": [ + 64, + 24920 + ], + "DraggedOutText": [ + 64, + 24313 + ], "DragonairBackpic": [ 28, 25209 @@ -13420,6 +13808,10 @@ 4, 19964 ], + "DreamEatenText": [ + 64, + 23516 + ], "DrowzeeBackpic": [ 30, 20558 @@ -13540,10 +13932,22 @@ 4, 31045 ], + "EliminatedStatsText": [ + 64, + 24107 + ], + "EnduredText": [ + 64, + 22629 + ], "EnemyHPBarBorderGFX": [ 62, 19378 ], + "EnemyHitTimesText": [ + 64, + 23725 + ], "EnteiBackpic": [ 29, 28478 @@ -13572,6 +13976,10 @@ 107, 16720 ], + "EvadedText": [ + 64, + 23996 + ], "EvosAttacksPointers": [ 16, 26557 @@ -13620,6 +14028,10 @@ 105, 18395 ], + "FastAsleepText": [ + 64, + 22188 + ], "FearowBackpic": [ 30, 21309 @@ -13632,6 +14044,14 @@ 104, 18694 ], + "FellAsleepText": [ + 64, + 23398 + ], + "FellInLoveText": [ + 64, + 24768 + ], "FeraligatrBackpic": [ 22, 26490 @@ -13676,10 +14096,22 @@ 106, 17185 ], + "FledFromBattleText": [ + 64, + 23649 + ], + "FledInFearText": [ + 64, + 23670 + ], "FlickeringCaveEntrancePalette": [ 63, 17709 ], + "FlinchedText": [ + 64, + 22239 + ], "Font": [ 62, 17138 @@ -13700,6 +14132,10 @@ 62, 21262 ], + "ForesawAttackText": [ + 64, + 25036 + ], "ForretressBackpic": [ 46, 17057 @@ -13716,6 +14152,14 @@ 62, 18674 ], + "FrozenSolidText": [ + 64, + 22219 + ], + "FullyParalyzedText": [ + 64, + 24370 + ], "FurretBackpic": [ 26, 19622 @@ -13800,6 +14244,10 @@ 15, 31064 ], + "GettingPumpedText": [ + 64, + 23789 + ], "GirafarigBackpic": [ 25, 18275 @@ -13884,6 +14332,14 @@ 105, 17623 ], + "GotAnEncoreText": [ + 64, + 23230 + ], + "GotMoneyForWinningText": [ + 64, + 21380 + ], "GranbullBackpic": [ 28, 23351 @@ -13952,6 +14408,14 @@ 106, 16503 ], + "GymStatue_CityGymText": [ + 64, + 20118 + ], + "GymStatue_WinningTrainersText": [ + 64, + 20132 + ], "HOF_SlideBackpic": [ 33, 26135 @@ -13968,10 +14432,38 @@ 62, 19410 ], + "HPIsFullText": [ + 64, + 24297 + ], + "HappinessText1": [ + 64, + 20689 + ], + "HappinessText2": [ + 64, + 20636 + ], + "HappinessText3": [ + 64, + 20594 + ], "HappyEmote": [ 5, 17545 ], + "HasANightmareText": [ + 64, + 20968 + ], + "HasNoPPLeftText": [ + 64, + 22895 + ], + "HasSubstituteText": [ + 64, + 23853 + ], "HaunterBackpic": [ 28, 17025 @@ -14064,6 +14556,14 @@ 56, 24760 ], + "HomepageText": [ + 64, + 18800 + ], + "HookedPokemonAttackedText": [ + 64, + 20792 + ], "HoothootBackpic": [ 27, 28706 @@ -14124,6 +14624,26 @@ 107, 20272 ], + "HungOnText": [ + 64, + 22606 + ], + "HurtByBurnText": [ + 64, + 20926 + ], + "HurtByCurseText": [ + 64, + 20988 + ], + "HurtByPoisonText": [ + 64, + 20904 + ], + "HurtItselfText": [ + 64, + 22308 + ], "HypnoBackpic": [ 23, 30776 @@ -14144,6 +14664,10 @@ 35, 27300 ], + "IdentifiedText": [ + 64, + 24678 + ], "IgglybuffBackpic": [ 30, 16914 @@ -14156,6 +14680,30 @@ 106, 21359 ], + "IgnoredOrders2Text": [ + 64, + 25098 + ], + "IgnoredOrdersText": [ + 64, + 22811 + ], + "IgnoredSleepingText": [ + 64, + 22832 + ], + "InLoveWithText": [ + 64, + 22649 + ], + "IncenseBurnerText": [ + 64, + 18671 + ], + "InfatuationText": [ + 64, + 22671 + ], "InitializeEventsScript": [ 64, 17256 @@ -14224,6 +14772,14 @@ 1, 25030 ], + "IsConfusedText": [ + 64, + 22292 + ], + "ItFailedText": [ + 64, + 24245 + ], "ItemAttributes": [ 1, 26726 @@ -14504,6 +15060,10 @@ 106, 20341 ], + "LeechSeedSapsText": [ + 64, + 20948 + ], "LickitungBackpic": [ 27, 32257 @@ -14516,6 +15076,10 @@ 105, 21184 ], + "LightScreenEffectText": [ + 64, + 24169 + ], "LoadOrientedFrontpic": [ 20, 22948 @@ -14524,6 +15088,18 @@ 112, 19520 ], + "LoafingAroundText": [ + 64, + 22734 + ], + "LookTownMapText": [ + 64, + 18740 + ], + "LostAgainstText": [ + 64, + 21631 + ], "LugiaBackpic": [ 28, 29483 @@ -14572,6 +15148,14 @@ 105, 16484 ], + "MadeSubstituteText": [ + 64, + 23831 + ], + "MagazineBookshelfText": [ + 64, + 18506 + ], "MagbyBackpic": [ 28, 24901 @@ -14652,6 +15236,10 @@ 105, 18286 ], + "MagnitudeText": [ + 64, + 24838 + ], "MankeyBackpic": [ 23, 29571 @@ -14724,6 +15312,10 @@ 105, 20838 ], + "MartSignText": [ + 64, + 19011 + ], "Marts": [ 5, 25342 @@ -14752,6 +15344,10 @@ 104, 22004 ], + "MerchandiseShelfText": [ + 64, + 18713 + ], "MetapodBackpic": [ 30, 23291 @@ -14800,6 +15396,14 @@ 107, 21678 ], + "MimicLearnedMoveText": [ + 64, + 23963 + ], + "MirrorMoveFailedText": [ + 64, + 24438 + ], "MisdreavusBackpic": [ 25, 32010 @@ -14812,6 +15416,10 @@ 107, 17160 ], + "MistText": [ + 64, + 23744 + ], "MoltresBackpic": [ 23, 19733 @@ -15252,6 +15860,10 @@ 61, 17688 ], + "MustRechargeText": [ + 64, + 22252 + ], "NPCTradeCableText": [ 63, 19744 @@ -15380,6 +15992,10 @@ 104, 20465 ], + "NoPPLeftText": [ + 64, + 22862 + ], "NoctowlBackpic": [ 27, 30646 @@ -15392,6 +16008,62 @@ 106, 20240 ], + "NotVeryEffectiveText": [ + 64, + 23158 + ], + "NothingHappenedText": [ + 64, + 24206 + ], + "NumberAcceptedFText": [ + 64, + 19632 + ], + "NumberAcceptedMText": [ + 64, + 19286 + ], + "NumberDeclinedFText": [ + 64, + 19664 + ], + "NumberDeclinedMText": [ + 64, + 19322 + ], + "NurseAskHealText": [ + 64, + 18079 + ], + "NurseDayText": [ + 64, + 17984 + ], + "NurseGoodbyeText": [ + 64, + 18224 + ], + "NurseMornText": [ + 64, + 17941 + ], + "NurseNiteText": [ + 64, + 18020 + ], + "NursePokerusText": [ + 64, + 18278 + ], + "NurseReturnPokemonText": [ + 64, + 18172 + ], + "NurseTakePokemonText": [ + 64, + 18146 + ], "OctilleryBackpic": [ 30, 17443 @@ -15444,6 +16116,10 @@ 106, 17518 ], + "OneHitKOText": [ + 64, + 23116 + ], "OnixBackpic": [ 25, 16763 @@ -15480,6 +16156,10 @@ 2, 24741 ], + "ParalyzedText": [ + 64, + 24333 + ], "ParasBackpic": [ 29, 17277 @@ -15508,6 +16188,10 @@ 2, 31430 ], + "PerishCountText": [ + 64, + 21034 + ], "PersianBackpic": [ 24, 30047 @@ -15536,6 +16220,14 @@ 36, 17466 ], + "PhoneFullFText": [ + 64, + 19730 + ], + "PhoneFullMText": [ + 64, + 19383 + ], "PhoneOutOfAreaScript": [ 36, 17958 @@ -15560,6 +16252,10 @@ 106, 21136 ], + "PictureBookshelfText": [ + 64, + 18463 + ], "PidgeotBackpic": [ 27, 18421 @@ -15648,6 +16344,14 @@ 5, 28636 ], + "PlayerHitTimesText": [ + 64, + 23706 + ], + "PokecenterSignText": [ + 64, + 18982 + ], "PokedexCursorPalette": [ 2, 21841 @@ -15688,6 +16392,10 @@ 60, 26439 ], + "PokemonFellFromTreeText": [ + 64, + 20820 + ], "PokemonNames": [ 108, 19316 @@ -15796,6 +16504,10 @@ 0, 14778 ], + "PresentFailedText": [ + 64, + 25072 + ], "PrimeapeBackpic": [ 26, 18546 @@ -15808,6 +16520,22 @@ 104, 22560 ], + "ProtectedByMistText": [ + 64, + 23766 + ], + "ProtectedByText": [ + 64, + 24414 + ], + "ProtectedItselfText": [ + 64, + 24602 + ], + "ProtectingItselfText": [ + 64, + 24623 + ], "PsyduckBackpic": [ 26, 22120 @@ -15832,6 +16560,10 @@ 107, 22333 ], + "PutACurseText": [ + 64, + 24562 + ], "PuzzlePieceBorderData.TileBordersGFX": [ 56, 24368 @@ -15880,6 +16612,10 @@ 36, 21708 ], + "RageBuildingText": [ + 64, + 23208 + ], "RaichuBackpic": [ 25, 22411 @@ -15944,6 +16680,46 @@ 63, 17597 ], + "ReceivedItemText": [ + 64, + 19856 + ], + "RecoilText": [ + 64, + 23810 + ], + "RecoveredUsingText": [ + 64, + 21896 + ], + "ReflectEffectText": [ + 64, + 24188 + ], + "RegainedHealthText": [ + 64, + 22977 + ], + "RegisteredNumberFText": [ + 64, + 19603 + ], + "RegisteredNumberMText": [ + 64, + 19257 + ], + "ReleasedByText": [ + 64, + 24857 + ], + "RematchFText": [ + 64, + 19786 + ], + "RematchMText": [ + 64, + 19439 + ], "RemoraidBackpic": [ 26, 24247 @@ -15956,6 +16732,10 @@ 107, 19716 ], + "RestedText": [ + 64, + 22942 + ], "RhydonBackpic": [ 23, 20980 @@ -16008,6 +16788,10 @@ 5, 17609 ], + "SafeguardProtectText": [ + 64, + 24808 + ], "SandshrewBackpic": [ 23, 31577 @@ -16032,6 +16816,14 @@ 104, 19350 ], + "SandstormBrewedText": [ + 64, + 24729 + ], + "SandstormHitsText": [ + 64, + 21011 + ], "ScizorBackpic": [ 26, 16384 @@ -16112,6 +16904,18 @@ 105, 18734 ], + "SentAllToMomText": [ + 64, + 21507 + ], + "SentHalfToMomText": [ + 64, + 21488 + ], + "SentSomeToMomText": [ + 64, + 21442 + ], "SentretBackpic": [ 30, 18492 @@ -16124,6 +16928,14 @@ 106, 19896 ], + "SharedPainText": [ + 64, + 23248 + ], + "ShedLeechSeedText": [ + 64, + 24879 + ], "ShellderBackpic": [ 24, 16779 @@ -16172,6 +16984,10 @@ 107, 20164 ], + "SketchedText": [ + 64, + 23288 + ], "SkiploomBackpic": [ 28, 29181 @@ -16332,6 +17148,10 @@ 36, 17910 ], + "SpikesText": [ + 64, + 24646 + ], "SpinarakBackpic": [ 30, 24024 @@ -16344,6 +17164,10 @@ 106, 20577 ], + "SpiteEffectText": [ + 64, + 23348 + ], "SpriteMons": [ 5, 18025 @@ -16392,6 +17216,14 @@ 105, 22613 ], + "StartPerishText": [ + 64, + 24695 + ], + "StartedNightmareText": [ + 64, + 24512 + ], "StaryuBackpic": [ 29, 24253 @@ -16432,10 +17264,30 @@ 107, 18056 ], + "StoleText": [ + 64, + 24463 + ], + "StoringEnergyText": [ + 64, + 22563 + ], "StubbedGetFrontpic": [ 112, 19066 ], + "SubFadedText": [ + 64, + 23941 + ], + "SubTookDamageText": [ + 64, + 23906 + ], + "SuckedHealthText": [ + 64, + 23493 + ], "SudowoodoBackpic": [ 25, 27987 @@ -16460,6 +17312,10 @@ 107, 22111 ], + "SunGotBrightText": [ + 64, + 24941 + ], "SunfloraBackpic": [ 23, 20565 @@ -16484,6 +17340,10 @@ 106, 23272 ], + "SuperEffectiveText": [ + 64, + 23135 + ], "SwarmGrassWildMons": [ 10, 32284 @@ -16508,6 +17368,10 @@ 4, 23142 ], + "TVText": [ + 64, + 18789 + ], "TangelaBackpic": [ 30, 29165 @@ -16532,6 +17396,10 @@ 105, 23380 ], + "TeamRocketOathText": [ + 64, + 18560 + ], "TeddiursaBackpic": [ 29, 29309 @@ -16568,14 +17436,50 @@ 105, 17300 ], + "Text_BallCaught": [ + 102, + 17502 + ], + "Text_BattleEffectActivate": [ + 101, + 18077 + ], + "Text_BattleFoeEffectActivate": [ + 101, + 18114 + ], + "Text_BattleUser": [ + 101, + 18149 + ], "Text_BreedHuh": [ 101, 18257 ], + "Text_Gained": [ + 100, + 24078 + ], + "Text_MoveForgetCount": [ + 102, + 17088 + ], + "Text_NPCTraded": [ + 100, + 20317 + ], + "Text_PlayedPokeFlute": [ + 102, + 17801 + ], "TheEndGFX": [ 50, 31933 ], + "TiedAgainstText": [ + 64, + 21425 + ], "TilesetBGPalette": [ 2, 30558 @@ -16632,6 +17536,18 @@ 106, 21576 ], + "TooWeakSubText": [ + 64, + 23874 + ], + "TookAimText": [ + 64, + 23275 + ], + "TookDownWithItText": [ + 64, + 23183 + ], "TotodileBackpic": [ 27, 23780 @@ -16744,6 +17660,18 @@ 14, 22978 ], + "TransformedText": [ + 64, + 24142 + ], + "TransformedTypeText": [ + 64, + 24071 + ], + "TrashCanText": [ + 64, + 18893 + ], "TreeMonMaps": [ 46, 25574 @@ -16752,6 +17680,10 @@ 46, 25712 ], + "TurnedAwayText": [ + 64, + 22793 + ], "TypeMatchups": [ 13, 19713 @@ -16808,6 +17740,14 @@ 107, 16820 ], + "UnaffectedText": [ + 64, + 23062 + ], + "UnleashedEnergyText": [ + 64, + 22585 + ], "UnownABackpic": [ 46, 20410 @@ -17036,6 +17976,14 @@ 46, 18992 ], + "UnusedRivalLossText": [ + 64, + 21525 + ], + "UnusedRivalWinText": [ + 64, + 21593 + ], "UrsaringBackpic": [ 29, 28756 @@ -17048,6 +17996,10 @@ 107, 19077 ], + "UsedBindText": [ + 64, + 22486 + ], "VaporeonBackpic": [ 29, 19047 @@ -17148,6 +18100,10 @@ 63, 17061 ], + "WantsToBattleText": [ + 64, + 20847 + ], "WartortleBackpic": [ 26, 19980 @@ -17160,6 +18116,34 @@ 104, 17164 ], + "WasBurnedText": [ + 64, + 23537 + ], + "WasDefrostedText": [ + 64, + 24544 + ], + "WasDisabledText": [ + 64, + 24018 + ], + "WasFrozenText": [ + 64, + 23570 + ], + "WasPoisonedText": [ + 64, + 23434 + ], + "WasSeededText": [ + 64, + 23981 + ], + "WasTrappedText": [ + 64, + 22505 + ], "WaveSamples": [ 58, 19890 @@ -17200,6 +18184,10 @@ 105, 21402 ], + "WentToSleepText": [ + 64, + 22924 + ], "WigglytuffBackpic": [ 30, 19536 @@ -17212,6 +18200,14 @@ 104, 20688 ], + "WildPokemonAppearedText": [ + 64, + 20770 + ], + "WindowText": [ + 64, + 18759 + ], "WobbuffetBackpic": [ 29, 30955 @@ -17224,6 +18220,22 @@ 107, 17376 ], + "WokeUpText": [ + 64, + 22207 + ], + "WontDropAnymoreText": [ + 64, + 23620 + ], + "WontObeyText": [ + 64, + 22777 + ], + "WontRiseAnymoreText": [ + 64, + 23591 + ], "WooperBackpic": [ 30, 27113 @@ -17236,6 +18248,10 @@ 107, 16496 ], + "WrappedByText": [ + 64, + 22521 + ], "WriteTileFromAnimBuffer": [ 63, 17585 @@ -17292,14 +18308,146 @@ 104, 20809 ], + "_ActorNameText": [ + 101, + 18023 + ], + "_AlreadyASaveFileText": [ + 101, + 23097 + ], + "_AlreadySetUpText": [ + 100, + 17756 + ], + "_AlreadySurfingText": [ + 101, + 16405 + ], + "_AlreadyUsingStrengthText": [ + 101, + 16658 + ], + "_AnEggCantHoldAnItemText": [ + 101, + 17731 + ], + "_AnotherSaveFileText": [ + 101, + 23151 + ], "_AreWeGeniusesText": [ 100, 22601 ], + "_AskCutText": [ + 101, + 17313 + ], + "_AskDeleteMoveText": [ + 102, + 18433 + ], + "_AskFloorElevatorText": [ + 100, + 19953 + ], + "_AskForgetMoveText": [ + 102, + 16969 + ], + "_AskGiveNicknameText": [ + 102, + 17604 + ], + "_AskHeadbuttText": [ + 101, + 17021 + ], + "_AskItemMoveText": [ + 101, + 17959 + ], + "_AskQuantityThrowAwayText": [ + 101, + 17791 + ], + "_AskRockSmashText": [ + 101, + 17128 + ], + "_AskStrengthText": [ + 101, + 16737 + ], + "_AskSurfText": [ + 101, + 16429 + ], + "_AskThrowAwayText": [ + 101, + 17769 + ], + "_AskWaterfallText": [ + 101, + 16512 + ], + "_AskWhirlpoolText": [ + 101, + 16933 + ], + "_BGEventText": [ + 101, + 23443 + ], "_BackAlreadyText": [ 100, 22807 ], + "_BadgeRequiredText": [ + 100, + 24749 + ], + "_BallAlmostHadItText": [ + 102, + 17450 + ], + "_BallAppearedCaughtText": [ + 102, + 17418 + ], + "_BallBlockedText": [ + 102, + 18167 + ], + "_BallBoxFullText": [ + 102, + 18273 + ], + "_BallBrokeFreeText": [ + 102, + 17389 + ], + "_BallDodgedText": [ + 102, + 17313 + ], + "_BallDontBeAThiefText": [ + 102, + 18198 + ], + "_BallMissedText": [ + 102, + 17367 + ], + "_BallSentToPCText": [ + 102, + 17534 + ], + "_BallSoCloseText": [ + 102, + 17473 + ], "_BargainShopComeAgainText": [ 101, 24234 @@ -17328,10 +18476,110 @@ 101, 24113 ], + "_BattleDugText": [ + 101, + 18243 + ], + "_BattleFlewText": [ + 101, + 18227 + ], + "_BattleGlowingText": [ + 101, + 18213 + ], + "_BattleLoweredHeadText": [ + 101, + 18193 + ], + "_BattleMadeWhirlwindText": [ + 101, + 18153 + ], + "_BattleMonNickCommaText": [ + 100, + 24221 + ], + "_BattleStatFellText": [ + 101, + 18141 + ], + "_BattleStatSharplyFellText": [ + 101, + 18124 + ], + "_BattleStatWentUpText": [ + 101, + 18103 + ], + "_BattleStatWentWayUpText": [ + 101, + 18087 + ], + "_BattleTookSunlightText": [ + 101, + 18173 + ], + "_BenFernText1": [ + 100, + 19047 + ], + "_BenFernText2A": [ + 100, + 19061 + ], + "_BenFernText2B": [ + 100, + 19080 + ], + "_BenFernText3A": [ + 100, + 19098 + ], + "_BenFernText3B": [ + 100, + 19112 + ], + "_BenIntroText1": [ + 100, + 18968 + ], + "_BenIntroText2": [ + 100, + 18986 + ], + "_BenIntroText3": [ + 100, + 18997 + ], "_BidsFarewellToMonText": [ 100, 18201 ], + "_BlindingFlashText": [ + 100, + 24847 + ], + "_BoostedExpPointsText": [ + 100, + 24091 + ], + "_BootedHMText": [ + 100, + 24343 + ], + "_BootedTMText": [ + 100, + 24326 + ], + "_BouldersMayMoveText": [ + 101, + 16821 + ], + "_BouldersMoveText": [ + 101, + 16793 + ], "_BreedAppearsToCareForText": [ 101, 18477 @@ -17364,6 +18612,26 @@ 101, 18534 ], + "_BreedingIsNotPossibleText": [ + 100, + 17240 + ], + "_BugCatchingContestIsOverText": [ + 100, + 19996 + ], + "_BugCatchingContestTimeUpText": [ + 100, + 19967 + ], + "_BurnWasHealedText": [ + 100, + 16563 + ], + "_ButNoSpaceText": [ + 100, + 20070 + ], "_CGB_GSIntro.ShellderLaprasBGPalette": [ 2, 22241 @@ -17376,10 +18644,114 @@ 2, 22895 ], + "_CameToItsSensesText": [ + 100, + 16694 + ], + "_CanCutText": [ + 101, + 17353 + ], "_CantAcceptEggText": [ 100, 22429 ], + "_CantCarryItemText": [ + 101, + 17392 + ], + "_CantGetOffBikeText": [ + 101, + 17246 + ], + "_CantRegisterText": [ + 101, + 17929 + ], + "_CantSurfText": [ + 101, + 16384 + ], + "_CantUseDigText": [ + 101, + 16582 + ], + "_CantUseItemText": [ + 100, + 24782 + ], + "_CantUseTeleportText": [ + 101, + 16636 + ], + "_CardFlipChooseACardText": [ + 102, + 17214 + ], + "_CardFlipDarnText": [ + 102, + 17306 + ], + "_CardFlipNotEnoughCoinsText": [ + 102, + 17195 + ], + "_CardFlipPlaceYourBetText": [ + 102, + 17230 + ], + "_CardFlipPlayAgainText": [ + 102, + 17247 + ], + "_CardFlipPlayWithThreeCoinsText": [ + 102, + 17171 + ], + "_CardFlipShuffledText": [ + 102, + 17268 + ], + "_CardFlipYeahText": [ + 102, + 17299 + ], + "_CaughtAskNicknameText": [ + 101, + 19555 + ], + "_ChangeBoxSaveText": [ + 101, + 23232 + ], + "_ChangeWhichNumberText": [ + 100, + 17145 + ], + "_ClearAllSaveDataText": [ + 102, + 16838 + ], + "_ClockHasResetText": [ + 101, + 22815 + ], + "_ClockIsThisOKText": [ + 101, + 22802 + ], + "_ClockSetWithControlPadText": [ + 101, + 22739 + ], + "_ClockTimeMayBeWrongText": [ + 101, + 22685 + ], + "_CoinCaseCountText": [ + 102, + 17827 + ], "_ComeAgainText": [ 100, 22990 @@ -17388,6 +18760,78 @@ 100, 22576 ], + "_ComeBackText": [ + 100, + 24291 + ], + "_CompatibilityShouldTheyBreedText": [ + 100, + 17267 + ], + "_CongratulationsYourPokemonText": [ + 101, + 23542 + ], + "_ContainedMoveText": [ + 100, + 24361 + ], + "_ContestAlreadyCaughtText": [ + 101, + 19013 + ], + "_ContestAskSwitchText": [ + 101, + 18999 + ], + "_ContestCaughtMonText": [ + 101, + 18984 + ], + "_ContestJudging_FirstPlaceScoreText": [ + 101, + 19111 + ], + "_ContestJudging_FirstPlaceText": [ + 101, + 19042 + ], + "_ContestJudging_SecondPlaceScoreText": [ + 101, + 19198 + ], + "_ContestJudging_SecondPlaceText": [ + 101, + 19150 + ], + "_ContestJudging_ThirdPlaceScoreText": [ + 101, + 19276 + ], + "_ContestJudging_ThirdPlaceText": [ + 101, + 19229 + ], + "_CoordinatesEventText": [ + 101, + 23453 + ], + "_CorruptedEventText": [ + 101, + 23410 + ], + "_CuredOfPoisonText": [ + 100, + 16516 + ], + "_CutNothingText": [ + 100, + 24818 + ], + "_DSTIsThatOKText": [ + 102, + 18693 + ], "_DayCareLadyIntroEggText": [ 100, 22176 @@ -17408,22 +18852,170 @@ 100, 21900 ], + "_DeleterAskWhichMonText": [ + 102, + 18680 + ], + "_DeleterAskWhichMoveText": [ + 102, + 18551 + ], + "_DeleterEggText": [ + 102, + 18494 + ], + "_DeleterForgotMoveText": [ + 102, + 18460 + ], + "_DeleterIntroText": [ + 102, + 18587 + ], + "_DeleterNoComeAgainText": [ + 102, + 18525 + ], + "_DidNotLearnMoveText": [ + 102, + 16943 + ], + "_DoItMonText": [ + 100, + 24157 + ], + "_EggPhotoText": [ + 100, + 23443 + ], "_EmptyMailboxText": [ 101, 18563 ], + "_EndUsedMove1Text": [ + 101, + 18062 + ], + "_EndUsedMove2Text": [ + 101, + 18065 + ], + "_EndUsedMove3Text": [ + 101, + 18068 + ], + "_EndUsedMove4Text": [ + 101, + 18071 + ], + "_EndUsedMove5Text": [ + 101, + 18074 + ], + "_EnemyUsedOnText": [ + 100, + 16970 + ], + "_EnemyWithdrewText": [ + 100, + 16951 + ], + "_EnterTheAmountText": [ + 100, + 17524 + ], + "_EnterTheIDNoText": [ + 100, + 17506 + ], + "_EvolvedIntoText": [ + 101, + 23571 + ], + "_EvolvingText": [ + 101, + 23623 + ], + "_ExpPointsText": [ + 100, + 24123 + ], + "_FernIntroText1": [ + 100, + 19015 + ], + "_FernIntroText2": [ + 100, + 19031 + ], + "_FluteWakeUpText": [ + 102, + 17773 + ], "_ForYourMonSendsText": [ 100, 18255 ], + "_ForYourMonWillTradeText": [ + 100, + 18314 + ], "_FoundAnEggText": [ 100, 23013 ], + "_FoundItemText": [ + 101, + 17376 + ], + "_FruitBearingTreeText": [ + 100, + 16384 + ], + "_FruitPackIsFullText": [ + 100, + 16446 + ], + "_GearEllipseText": [ + 102, + 16486 + ], + "_GearOutOfServiceText": [ + 102, + 16489 + ], + "_GearTodayText": [ + 102, + 16484 + ], + "_GoForItMonText": [ + 100, + 24172 + ], + "_GoMonText": [ + 100, + 24145 + ], + "_GoodComeBackText": [ + 100, + 24272 + ], "_GotBackMonText": [ 100, 22788 ], + "_GotOffBikeText": [ + 101, + 17291 + ], + "_GotOnBikeText": [ + 101, + 17270 + ], + "_GrewToLevelText": [ + 100, + 16664 + ], "_HallOfFamePC.HOFMaster": [ 33, 26331 @@ -17436,6 +19028,14 @@ 100, 22919 ], + "_HeadbuttNothingText": [ + 101, + 17005 + ], + "_HealthReturnedText": [ + 100, + 16620 + ], "_HerbShopLadyIntroText": [ 101, 23692 @@ -17464,6 +19064,18 @@ 101, 23858 ], + "_HeyItsFruitText": [ + 100, + 16412 + ], + "_HoldStillText": [ + 100, + 23340 + ], + "_HugeWaterfallText": [ + 101, + 16484 + ], "_IllKeepItThanksText": [ 100, 23222 @@ -17472,10 +19084,166 @@ 100, 22549 ], + "_IsThisOKText": [ + 100, + 17493 + ], + "_ItemBelongsToSomeoneElseText": [ + 102, + 18110 + ], + "_ItemCantGetOnText": [ + 102, + 18244 + ], + "_ItemCantHeldText": [ + 101, + 21732 + ], + "_ItemCantUseOnEggText": [ + 102, + 18039 + ], + "_ItemCantUseOnMonText": [ + 102, + 17649 + ], + "_ItemGotOffText": [ + 102, + 18359 + ], + "_ItemGotOnText": [ + 102, + 18338 + ], + "_ItemLooksBitterText": [ + 102, + 18021 + ], + "_ItemOakWarningText": [ + 102, + 18069 + ], + "_ItemStatRoseText": [ + 102, + 17631 + ], + "_ItemStorageFullText": [ + 101, + 21637 + ], + "_ItemUsedText": [ + 102, + 18319 + ], + "_ItemWontHaveEffectText": [ + 102, + 18141 + ], + "_ItemfinderItemNearbyText": [ + 101, + 17467 + ], + "_ItemfinderNopeText": [ + 101, + 17517 + ], + "_ItemsDiscardedText": [ + 101, + 21413 + ], + "_ItemsOakWarningText": [ + 101, + 21470 + ], + "_ItemsThrowAwayText": [ + 101, + 21384 + ], + "_ItemsTooImportantText": [ + 101, + 21434 + ], + "_ItemsTossOutHowManyText": [ + 101, + 21355 + ], + "_ItsGoingToHatchText": [ + 100, + 17335 + ], + "_JustSawSomeRareMonText": [ + 100, + 20096 + ], + "_KarpGuruRecordText": [ + 101, + 19362 + ], + "_KnowsMoveText": [ + 102, + 18383 + ], + "_LC_DragText1": [ + 100, + 19344 + ], + "_LC_DragText2": [ + 100, + 19364 + ], + "_LC_Text1": [ + 100, + 19128 + ], + "_LC_Text10": [ + 100, + 19304 + ], + "_LC_Text11": [ + 100, + 19325 + ], + "_LC_Text2": [ + 100, + 19148 + ], + "_LC_Text3": [ + 100, + 19167 + ], + "_LC_Text4": [ + 100, + 19186 + ], + "_LC_Text5": [ + 100, + 19205 + ], + "_LC_Text6": [ + 100, + 19225 + ], + "_LC_Text7": [ + 100, + 19246 + ], + "_LC_Text8": [ + 100, + 19265 + ], + "_LC_Text9": [ + 100, + 19285 + ], "_LastHealthyMonText": [ 100, 22500 ], + "_LearnedMoveText": [ + 102, + 16865 + ], "_LeftWithDayCareLadyText": [ 101, 18323 @@ -17484,6 +19252,58 @@ 101, 18372 ], + "_LinkAbnormalMonText": [ + 101, + 22941 + ], + "_LinkAskTradeForText": [ + 101, + 22985 + ], + "_LinkTimeoutText": [ + 101, + 22842 + ], + "_LinkTradeCantBattleText": [ + 101, + 22888 + ], + "_LookAdorableDecoText": [ + 100, + 17901 + ], + "_LookClefairyPosterText": [ + 100, + 17831 + ], + "_LookGiantDecoText": [ + 100, + 17925 + ], + "_LookJigglypuffPosterText": [ + 100, + 17865 + ], + "_LookPikachuPosterText": [ + 100, + 17798 + ], + "_LookTownMapText": [ + 100, + 17779 + ], + "_LuckyNumberMatchPCText": [ + 101, + 19477 + ], + "_LuckyNumberMatchPartyText": [ + 101, + 19400 + ], + "_MagikarpGuruMeasureText": [ + 101, + 19307 + ], "_MailAlreadyHoldingItemText": [ 101, 18673 @@ -17532,6 +19352,10 @@ 101, 21892 ], + "_MainMenuTimeUnknownText": [ + 101, + 22032 + ], "_MartAskMoreText": [ 101, 24689 @@ -17580,22 +19404,322 @@ 101, 24518 ], + "_MayPassWhirlpoolText": [ + 101, + 16876 + ], + "_MayRegisterItemText": [ + 101, + 21966 + ], + "_MaySmashText": [ + 101, + 17095 + ], + "_MemoryGameDarnText": [ + 101, + 21312 + ], + "_MemoryGameYeahText": [ + 101, + 21302 + ], + "_MomBankWhatDoYouWantToDoText": [ + 100, + 21543 + ], + "_MomBoughtWithYourMoneyText": [ + 100, + 18020 + ], + "_MomFoundADollText": [ + 100, + 18089 + ], + "_MomFoundAnItemText": [ + 100, + 17984 + ], + "_MomHaventSavedThatMuchText": [ + 100, + 21663 + ], + "_MomHiHowAreYouText": [ + 100, + 17963 + ], + "_MomInsufficientFundsInWalletText": [ + 100, + 21718 + ], + "_MomIsThisAboutYourMoneyText": [ + 100, + 21439 + ], + "_MomItsInPCText": [ + 100, + 18057 + ], + "_MomItsInYourRoomText": [ + 100, + 18141 + ], + "_MomJustDoWhatYouCanText": [ + 100, + 21877 + ], + "_MomLeavingText1": [ + 100, + 21092 + ], + "_MomLeavingText2": [ + 100, + 21325 + ], + "_MomLeavingText3": [ + 100, + 21363 + ], + "_MomLostGearBookletText": [ + 102, + 18936 + ], + "_MomNotEnoughRoomInBankText": [ + 100, + 21744 + ], + "_MomNotEnoughRoomInWalletText": [ + 100, + 21692 + ], + "_MomSaveMoneyText": [ + 100, + 21630 + ], + "_MomStartSavingMoneyText": [ + 100, + 21770 + ], + "_MomStoreMoneyText": [ + 100, + 21568 + ], + "_MomStoredMoneyText": [ + 100, + 21824 + ], + "_MomTakeMoneyText": [ + 100, + 21599 + ], + "_MomTakenMoneyText": [ + 100, + 21859 + ], "_MonNameBidsFarewellText": [ 100, 18223 ], + "_MonNameSentToText": [ + 100, + 18199 + ], "_MonWasSentToText": [ 100, 18175 ], + "_MoveAskForgetText": [ + 102, + 16888 + ], + "_MoveBoulderText": [ + 101, + 16713 + ], + "_MoveCantForgetHMText": [ + 102, + 17138 + ], + "_MoveForgotText": [ + 102, + 17102 + ], + "_MoveKnowsOneText": [ + 102, + 18401 + ], + "_MoveMonWOMailSaveText": [ + 101, + 23285 + ], + "_MoveNameText": [ + 101, + 18057 + ], + "_MysteryGiftCanceledText": [ + 100, + 24521 + ], + "_MysteryGiftCommErrorText": [ + 100, + 24551 + ], + "_MysteryGiftFiveADayText": [ + 100, + 24634 + ], + "_MysteryGiftOneADayText": [ + 100, + 24665 + ], + "_MysteryGiftSentHomeText": [ + 100, + 24717 + ], + "_MysteryGiftSentText": [ + 100, + 24700 + ], + "_NPCTradeAfterText1": [ + 100, + 20519 + ], + "_NPCTradeAfterText2": [ + 100, + 20775 + ], + "_NPCTradeAfterText3": [ + 100, + 21032 + ], + "_NPCTradeCableText": [ + 100, + 20283 + ], + "_NPCTradeCancelText1": [ + 100, + 20415 + ], + "_NPCTradeCancelText2": [ + 100, + 20632 + ], + "_NPCTradeCancelText3": [ + 100, + 20902 + ], + "_NPCTradeCompleteText1": [ + 100, + 20485 + ], + "_NPCTradeCompleteText2": [ + 100, + 20735 + ], + "_NPCTradeCompleteText3": [ + 100, + 20992 + ], + "_NPCTradeFanfareText": [ + 100, + 20345 + ], + "_NPCTradeIntroText1": [ + 100, + 20348 + ], + "_NPCTradeIntroText2": [ + 100, + 20549 + ], + "_NPCTradeIntroText3": [ + 100, + 20820 + ], + "_NPCTradeWrongText1": [ + 100, + 20445 + ], + "_NPCTradeWrongText2": [ + 100, + 20692 + ], + "_NPCTradeWrongText3": [ + 100, + 20937 + ], + "_NameRaterBetterNameText": [ + 100, + 23615 + ], + "_NameRaterComeAgainText": [ + 100, + 23824 + ], + "_NameRaterEggText": [ + 100, + 23930 + ], + "_NameRaterFinishedText": [ + 100, + 23779 + ], + "_NameRaterHelloText": [ + 100, + 23477 + ], + "_NameRaterNamedText": [ + 100, + 24036 + ], + "_NameRaterPerfectNameText": [ + 100, + 23856 + ], + "_NameRaterSameNameText": [ + 100, + 23956 + ], + "_NameRaterWhatNameText": [ + 100, + 23732 + ], + "_NameRaterWhichMonText": [ + 100, + 23570 + ], + "_NewDexDataText": [ + 102, + 17561 + ], "_NewPokedexEntry": [ 16, 23170 ], + "_NoCoinCaseText": [ + 100, + 20255 + ], + "_NoCoinsText": [ + 100, + 20235 + ], + "_NoCyclingText": [ + 102, + 18216 + ], + "_NoPhotoText": [ + 100, + 23410 + ], "_NoRoomForEggText": [ 100, 23255 ], + "_NoRoomTMHMText": [ + 100, + 24461 + ], "_NotEnoughMoneyText": [ 100, 22945 @@ -17604,14 +19728,282 @@ 100, 23003 ], + "_NothingHereText": [ + 100, + 16469 + ], + "_NothingToChooseText": [ + 100, + 17543 + ], + "_NothingToPutAwayText": [ + 100, + 17666 + ], "_NothingToSellText": [ 101, 24438 ], + "_OKComeBackText": [ + 100, + 24255 + ], + "_OPT_AddictivelyText": [ + 100, + 18641 + ], + "_OPT_AlmostPoisonouslyText": [ + 100, + 18561 + ], + "_OPT_AptlyNamedText": [ + 100, + 18482 + ], + "_OPT_BoldSortOfText": [ + 100, + 18784 + ], + "_OPT_CuteText": [ + 100, + 18755 + ], + "_OPT_EvolutionMustBeText": [ + 100, + 18680 + ], + "_OPT_ExcitingText": [ + 100, + 18848 + ], + "_OPT_FlippedOutText": [ + 100, + 18716 + ], + "_OPT_FriendlyText": [ + 100, + 18880 + ], + "_OPT_FrighteningText": [ + 100, + 18801 + ], + "_OPT_GuardedText": [ + 100, + 18924 + ], + "_OPT_HeartMeltinglyText": [ + 100, + 18737 + ], + "_OPT_HotHotHotText": [ + 100, + 18892 + ], + "_OPT_InspiringText": [ + 100, + 18867 + ], + "_OPT_IntroText1": [ + 100, + 18333 + ], + "_OPT_IntroText2": [ + 100, + 18352 + ], + "_OPT_IntroText3": [ + 100, + 18365 + ], + "_OPT_LooksInWaterText": [ + 100, + 18660 + ], + "_OPT_LovelyText": [ + 100, + 18935 + ], + "_OPT_MaryText1": [ + 100, + 18425 + ], + "_OPT_MischievouslyText": [ + 100, + 18602 + ], + "_OPT_NowText": [ + 100, + 18860 + ], + "_OPT_OakText1": [ + 100, + 18382 + ], + "_OPT_OakText2": [ + 100, + 18395 + ], + "_OPT_OakText3": [ + 100, + 18416 + ], + "_OPT_PleasantText": [ + 100, + 18772 + ], + "_OPT_PokemonChannelText": [ + 100, + 18955 + ], + "_OPT_PowerfulText": [ + 100, + 18836 + ], + "_OPT_ProvocativelyText": [ + 100, + 18700 + ], + "_OPT_SensuallyText": [ + 100, + 18582 + ], + "_OPT_SpeedyText": [ + 100, + 18945 + ], + "_OPT_StimulatingText": [ + 100, + 18909 + ], + "_OPT_SuaveDebonairText": [ + 100, + 18816 + ], + "_OPT_SweetAdorablyText": [ + 100, + 18440 + ], + "_OPT_TopicallyText": [ + 100, + 18621 + ], + "_OPT_UnbearablyText": [ + 100, + 18521 + ], + "_OPT_UndeniablyKindOfText": [ + 100, + 18500 + ], + "_OPT_WeirdText": [ + 100, + 18763 + ], + "_OPT_WigglySlicklyText": [ + 100, + 18461 + ], + "_OPT_WowImpressivelyText": [ + 100, + 18541 + ], "_OTSendsText": [ 100, 18274 ], + "_OakPCText1": [ + 101, + 20092 + ], + "_OakPCText2": [ + 101, + 20122 + ], + "_OakPCText3": [ + 101, + 20154 + ], + "_OakPCText4": [ + 101, + 21267 + ], + "_OakRating01": [ + 101, + 20204 + ], + "_OakRating02": [ + 101, + 20236 + ], + "_OakRating03": [ + 101, + 20284 + ], + "_OakRating04": [ + 101, + 20344 + ], + "_OakRating05": [ + 101, + 20406 + ], + "_OakRating06": [ + 101, + 20467 + ], + "_OakRating07": [ + 101, + 20529 + ], + "_OakRating08": [ + 101, + 20592 + ], + "_OakRating09": [ + 101, + 20642 + ], + "_OakRating10": [ + 101, + 20698 + ], + "_OakRating11": [ + 101, + 20747 + ], + "_OakRating12": [ + 101, + 20807 + ], + "_OakRating13": [ + 101, + 20859 + ], + "_OakRating14": [ + 101, + 20924 + ], + "_OakRating15": [ + 101, + 20980 + ], + "_OakRating16": [ + 101, + 21029 + ], + "_OakRating17": [ + 101, + 21088 + ], + "_OakRating18": [ + 101, + 21147 + ], + "_OakRating19": [ + 101, + 21204 + ], "_OakText1": [ 101, 22052 @@ -17640,6 +20032,70 @@ 101, 22493 ], + "_OakThisIsntTheTimeText": [ + 101, + 17842 + ], + "_OakTimeHoursQuestionMarkText": [ + 100, + 16824 + ], + "_OakTimeHowManyMinutesText": [ + 100, + 16827 + ], + "_OakTimeIsItText": [ + 100, + 16941 + ], + "_OakTimeMinutesQuestionMarkText": [ + 100, + 16854 + ], + "_OakTimeOversleptText": [ + 100, + 16857 + ], + "_OakTimeSoDarkText": [ + 100, + 16898 + ], + "_OakTimeWhatDayIsItText": [ + 100, + 16924 + ], + "_OakTimeWhatHoursText": [ + 100, + 16816 + ], + "_OakTimeWhatTimeIsItText": [ + 100, + 16798 + ], + "_OakTimeWhoaMinutesText": [ + 100, + 16846 + ], + "_OakTimeWokeUpText": [ + 100, + 16719 + ], + "_OakTimeYikesText": [ + 100, + 16873 + ], + "_ObjectEventText": [ + 101, + 23428 + ], + "_ObtainedFruitText": [ + 100, + 16429 + ], + "_ObtainedTheVoltorbBadgeText": [ + 100, + 17446 + ], "_OhFineThenText": [ 100, 22974 @@ -17648,10 +20104,66 @@ 100, 22396 ], + "_PCCantDepositLastMonText": [ + 101, + 18920 + ], + "_PCCantTakeText": [ + 101, + 18954 + ], + "_PCGottaHavePokemonText": [ + 101, + 18798 + ], "_PCMonHoldingMailText": [ 101, 18835 ], + "_PCNoSingleMonText": [ + 101, + 18890 + ], + "_PCWhatText": [ + 101, + 18828 + ], + "_PPIsMaxedOutText": [ + 102, + 17901 + ], + "_PPRestoredText": [ + 102, + 17944 + ], + "_PPsIncreasedText": [ + 102, + 17924 + ], + "_PackEmptyText": [ + 101, + 17991 + ], + "_PackNoItemText": [ + 101, + 17758 + ], + "_PasswordAskEnterText": [ + 102, + 16810 + ], + "_PasswordAskResetClockText": [ + 102, + 16792 + ], + "_PasswordAskResetText": [ + 102, + 16727 + ], + "_PasswordWrongText": [ + 102, + 16775 + ], "_PerfectHeresYourMonText": [ 100, 22761 @@ -17684,22 +20196,454 @@ 101, 24335 ], + "_PhoneClickText": [ + 102, + 16636 + ], + "_PhoneEllipseText": [ + 102, + 16644 + ], + "_PhoneJustTalkToThemText": [ + 102, + 16680 + ], + "_PhoneOutOfAreaText": [ + 102, + 16647 + ], + "_PhoneThankYouText": [ + 102, + 16710 + ], + "_PhoneWrongNumberText": [ + 102, + 16609 + ], + "_PlayedFluteText": [ + 102, + 17726 + ], + "_PlayerFoundItemText": [ + 100, + 20054 + ], + "_PlayerPickedUpPayDayMoney": [ + 100, + 24304 + ], + "_PlayersPCAskWhatDoText": [ + 101, + 19663 + ], + "_PlayersPCDepositItemsText": [ + 101, + 19832 + ], + "_PlayersPCHowManyDepositText": [ + 101, + 19798 + ], + "_PlayersPCHowManyWithdrawText": [ + 101, + 19688 + ], + "_PlayersPCNoItemsText": [ + 101, + 19782 + ], + "_PlayersPCNoRoomDepositText": [ + 101, + 19860 + ], + "_PlayersPCNoRoomWithdrawText": [ + 101, + 19750 + ], + "_PlayersPCTurnOnText": [ + 101, + 19642 + ], + "_PlayersPCWithdrewItemsText": [ + 101, + 19723 + ], + "_PnP_BoldText": [ + 100, + 19539 + ], + "_PnP_CoolText": [ + 100, + 19649 + ], + "_PnP_CuteText": [ + 100, + 19455 + ], + "_PnP_GreatText": [ + 100, + 19609 + ], + "_PnP_HappyText": [ + 100, + 19485 + ], + "_PnP_InspiringText": [ + 100, + 19667 + ], + "_PnP_LazyText": [ + 100, + 19466 + ], + "_PnP_MyTypeText": [ + 100, + 19630 + ], + "_PnP_NoisyText": [ + 100, + 19504 + ], + "_PnP_OddText": [ + 100, + 19722 + ], + "_PnP_PickyText": [ + 100, + 19559 + ], + "_PnP_PrecociousText": [ + 100, + 19522 + ], + "_PnP_RightForMeText": [ + 100, + 19703 + ], + "_PnP_SoSoText": [ + 100, + 19592 + ], + "_PnP_SortOfOKText": [ + 100, + 19575 + ], + "_PnP_Text1": [ + 100, + 19385 + ], + "_PnP_Text2": [ + 100, + 19406 + ], + "_PnP_Text3": [ + 100, + 19426 + ], + "_PnP_Text4": [ + 100, + 19441 + ], + "_PnP_Text5": [ + 100, + 19743 + ], + "_PnP_WeirdText": [ + 100, + 19683 + ], + "_PocketIsFullText": [ + 101, + 23522 + ], + "_PoisonFaintText": [ + 101, + 17552 + ], + "_PoisonWhiteoutText": [ + 101, + 17566 + ], + "_PokecenterBillsPCText": [ + 101, + 19931 + ], + "_PokecenterOaksPCText": [ + 101, + 20025 + ], + "_PokecenterPCCantUseText": [ + 101, + 19599 + ], + "_PokecenterPCOaksClosedText": [ + 101, + 20076 + ], + "_PokecenterPCTurnOnText": [ + 101, + 19892 + ], + "_PokecenterPCWhoseText": [ + 101, + 19913 + ], + "_PokecenterPlayersPCText": [ + 101, + 19979 + ], + "_PokedexShowText": [ + 100, + 18961 + ], + "_PokegearAskDeleteText": [ + 102, + 16575 + ], + "_PokegearAskWhoCallText": [ + 102, + 16521 + ], + "_PokegearPressButtonText": [ + 102, + 16548 + ], + "_PokemonAskSwapItemText": [ + 101, + 21687 + ], + "_PokemonHoldItemText": [ + 101, + 21554 + ], + "_PokemonNotEnoughHPText": [ + 101, + 21950 + ], + "_PokemonNotHoldingText": [ + 101, + 21609 + ], "_PokemonRemoveMailText": [ 101, 21578 ], + "_PokemonSwapItemText": [ + 101, + 21511 + ], + "_PokemonTookItemText": [ + 101, + 21663 + ], "_PrepMonFrontpic": [ 0, 14783 ], + "_PrestoAllDoneText": [ + 100, + 23375 + ], + "_PutAwayAndSetUpText": [ + 100, + 17714 + ], + "_PutAwayTheDecoText": [ + 100, + 17645 + ], + "_PutItemInPocketText": [ + 101, + 23491 + ], + "_RaiseThePPOfWhichMoveText": [ + 102, + 17841 + ], + "_ReceiveItemText": [ + 100, + 20211 + ], "_ReceivedEggText": [ 100, 23178 ], + "_ReceivedItemText": [ + 101, + 23472 + ], + "_ReceivedTMHMText": [ + 100, + 24500 + ], + "_RecoveredSomeHPText": [ + 100, + 16491 + ], + "_RegisteredItemText": [ + 101, + 17906 + ], + "_RemainingTimeText": [ + 100, + 17092 + ], "_RemoveMailText": [ 100, 22463 ], + "_RepelUsedEarlierIsStillInEffectText": [ + 102, + 17682 + ], + "_RepelWoreOffText": [ + 100, + 20029 + ], + "_RestoreThePPOfWhichMoveText": [ + 102, + 17870 + ], + "_RetrieveMysteryGiftText": [ + 100, + 24573 + ], + "_RevitalizedText": [ + 100, + 16643 + ], + "_RidOfParalysisText": [ + 100, + 16539 + ], + "_RocketRadioText1": [ + 100, + 19751 + ], + "_RocketRadioText10": [ + 100, + 19931 + ], + "_RocketRadioText2": [ + 100, + 19769 + ], + "_RocketRadioText3": [ + 100, + 19784 + ], + "_RocketRadioText4": [ + 100, + 19804 + ], + "_RocketRadioText5": [ + 100, + 19825 + ], + "_RocketRadioText6": [ + 100, + 19844 + ], + "_RocketRadioText7": [ + 100, + 19862 + ], + "_RocketRadioText8": [ + 100, + 19885 + ], + "_RocketRadioText9": [ + 100, + 19907 + ], + "_RodBiteText": [ + 101, + 17180 + ], + "_RodNothingText": [ + 101, + 17193 + ], + "_SaveFileCorruptedText": [ + 101, + 23203 + ], + "_SavedTheGameText": [ + 101, + 23078 + ], + "_SavingDontTurnOffThePowerText": [ + 101, + 23043 + ], + "_SavingRecordText": [ + 100, + 20179 + ], + "_SentTrophyHomeText": [ + 102, + 17962 + ], + "_SetUpTheDecoText": [ + 100, + 17695 + ], + "_SlotsBetHowManyCoinsText": [ + 101, + 24749 + ], + "_SlotsDarnText": [ + 102, + 16477 + ], + "_SlotsLinedUpText": [ + 102, + 16449 + ], + "_SlotsNotEnoughCoinsText": [ + 102, + 16392 + ], + "_SlotsPlayAgainText": [ + 102, + 16436 + ], + "_SlotsRanOutOfCoinsText": [ + 102, + 16411 + ], + "_SlotsStartText": [ + 102, + 16384 + ], + "_SpaceSpaceColonText": [ + 102, + 16722 + ], + "_SquirtbottleNothingText": [ + 101, + 17663 + ], + "_StartMenuContestEndText": [ + 101, + 21319 + ], + "_StopLearningMoveText": [ + 102, + 16921 + ], + "_StoppedEvolvingText": [ + 101, + 23593 + ], + "_SweetScentNothingText": [ + 101, + 17630 + ], + "_TMHMNotCompatibleText": [ + 100, + 24405 + ], "_TakeGoodCareOfEggText": [ 100, 23199 @@ -17708,14 +20652,226 @@ 100, 18229 ], + "_TeleportReturnText": [ + 101, + 16603 + ], + "_TestEventText": [ + 100, + 17356 + ], + "_ThatCantBeUsedRightNowText": [ + 100, + 16994 + ], + "_ThatItemCantBePutInThePackText": [ + 100, + 17024 + ], + "_ThatsEnoughComeBackText": [ + 100, + 24228 + ], + "_TheBoxIsFullText": [ + 100, + 17428 + ], + "_TheItemWasPutInThePackText": [ + 100, + 17060 + ], + "_ThePasswordIsText": [ + 100, + 17474 + ], + "_ThereIsNoEggText": [ + 100, + 17316 + ], + "_ThrewAwayText": [ + 101, + 17820 + ], + "_TimeAskOkayText": [ + 102, + 18712 + ], + "_TimesetAskAdjustDSTText": [ + 102, + 18876 + ], + "_TimesetAskDSTText": [ + 102, + 18727 + ], + "_TimesetAskNotDSTText": [ + 102, + 18813 + ], + "_TimesetDSTText": [ + 102, + 18775 + ], + "_TimesetNotDSTText": [ + 102, + 18844 + ], + "_UnusedNothingHereText": [ + 101, + 17213 + ], + "_UseCutText": [ + 100, + 24803 + ], + "_UseDigText": [ + 101, + 16543 + ], + "_UseEscapeRopeText": [ + 101, + 16558 + ], + "_UseHeadbuttText": [ + 101, + 16984 + ], + "_UseRockSmashText": [ + 101, + 17073 + ], + "_UseSacredAshText": [ + 101, + 17705 + ], + "_UseStrengthText": [ + 101, + 16693 + ], + "_UseSweetScentText": [ + 101, + 17607 + ], + "_UseWaterfallText": [ + 101, + 16463 + ], + "_UseWhirlpoolText": [ + 101, + 16855 + ], + "_UsedInsteadText": [ + 101, + 18045 + ], + "_UsedMove1Text": [ + 101, + 18027 + ], + "_UsedMove2Text": [ + 101, + 18036 + ], + "_UsedSurfText": [ + 100, + 24885 + ], + "_WaitButtonText": [ + 102, + 17532 + ], + "_WarpingText": [ + 100, + 17135 + ], + "_WasDefrostedText": [ + 100, + 16586 + ], + "_WasSentToBillsPCText": [ + 101, + 18771 + ], + "_WhatDoYouWantToPlayWithText": [ + 100, + 17376 + ], "_WhatShouldIRaiseText": [ 100, 22366 ], + "_WhichMonPhotoText": [ + 100, + 23305 + ], + "_WhichSidePutAwayText": [ + 100, + 17608 + ], + "_WhichSidePutOnText": [ + 100, + 17570 + ], + "_WhitedOutText": [ + 101, + 17426 + ], + "_WillTradeText": [ + 100, + 18292 + ], + "_WillYouPlayWithMonText": [ + 100, + 17178 + ], + "_WindowAreaExceededErrorText": [ + 101, + 23337 + ], + "_WindowPoppingErrorText": [ + 101, + 23373 + ], + "_WokeUpText": [ + 100, + 16606 + ], + "_WouldYouLikeToSaveTheGameText": [ + 101, + 23009 + ], + "_YouCanHaveThisText": [ + 100, + 17408 + ], + "_YouCantUseItInABattleText": [ + 101, + 17993 + ], + "_YouDontHaveAMonText": [ + 101, + 17883 + ], + "_YouNeedTwoMonForBreedingText": [ + 100, + 17205 + ], + "_YourFoesWeakGetmMonText": [ + 100, + 24191 + ], + "_YourFriendIsNotReadyText": [ + 100, + 24609 + ], "_YourMonHasGrownText": [ 100, 22651 ], + "_YourMonsHPWasHealedText": [ + 100, + 17108 + ], "wBaseUnusedBackpic": [ 1, 53556 @@ -17725,6 +20881,899 @@ 53554 ] }, + "text": { + "labels": [ + "AlreadyAsleepText", + "AlreadyConfusedText", + "AlreadyParalyzedText", + "AlreadyPoisonedText", + "AskNumber1FText", + "AskNumber1MText", + "AskNumber2FText", + "AskNumber2MText", + "AttackMissed2Text", + "AttackMissedText", + "BadlyPoisonedText", + "BattleText_AnEGGCantBattle", + "BattleText_CantEscape", + "BattleText_CantEscape2", + "BattleText_EnemyFled", + "BattleText_EnemyIsAboutToUseWillPlayerChangeMon", + "BattleText_EnemyMonFainted", + "BattleText_EnemySentOut", + "BattleText_EnemyWasDefeated", + "BattleText_GotAwaySafely", + "BattleText_ItemHealedConfusion", + "BattleText_ItemsCantBeUsedHere", + "BattleText_MonCantBeRecalled", + "BattleText_MonFainted", + "BattleText_MonHasNoMovesLeft", + "BattleText_MonIsAlreadyOut", + "BattleText_MonsLightScreenFell", + "BattleText_MonsReflectFaded", + "BattleText_PlayerPickedUpPayDayMoney", + "BattleText_RainContinuesToFall", + "BattleText_SafeguardFaded", + "BattleText_StringBuffer1GrewToLevel", + "BattleText_TargetRecoveredWithItem", + "BattleText_TargetWasHitByFutureSight", + "BattleText_TargetsEncoreEnded", + "BattleText_TheMoveIsDisabled", + "BattleText_TheRainStopped", + "BattleText_TheSandstormRages", + "BattleText_TheSandstormSubsided", + "BattleText_TheSunlightFaded", + "BattleText_TheSunlightIsStrong", + "BattleText_TheresNoEscapeFromTrainerBattle", + "BattleText_TheresNoPPLeftForThisMove", + "BattleText_TheresNoWillToBattle", + "BattleText_UseNextMon", + "BattleText_UserFledUsingAStringBuffer1", + "BattleText_UserHurtBySpikes", + "BattleText_UserRecoveredPPUsing", + "BattleText_UserWasReleasedFromStringBuffer1", + "BattleText_UsersHurtByStringBuffer1", + "BattleText_UsersStringBuffer1Activated", + "BattleText_WildFled", + "BattleText_WildMonIsAngry", + "BattleText_WildMonIsEating", + "BeatUpAttackText", + "BecameConfusedText", + "BeganToNapText", + "BellChimedText", + "BellyDrumText", + "BlewSpikesText", + "BlownAwayText", + "BracedItselfText", + "BugContestPrizeNoRoomText", + "ButItFailedText", + "CantEscapeNowText", + "ClampedByText", + "CoinVendor_Buy500CoinsText", + "CoinVendor_Buy50CoinsText", + "CoinVendor_CancelText", + "CoinVendor_CoinCaseFullText", + "CoinVendor_IntroText", + "CoinVendor_NoCoinCaseText", + "CoinVendor_NotEnoughMoneyText", + "CoinVendor_WelcomeText", + "CoinsScatteredText", + "ConfusedNoMoreText", + "ContestResults_ConsolationPrizeText", + "ContestResults_DidNotWinText", + "ContestResults_JoinUsNextTimeText", + "ContestResults_PartyFullText", + "ContestResults_PlayerWonAPrizeText", + "ContestResults_ReadyToJudgeText", + "ContestResults_ReturnPartyText", + "CopiedStatsText", + "CoveredByVeilText", + "CrashedText", + "CriticalHitText", + "DefrostedOpponentText", + "DestinyBondEffectText", + "DidntAffect1Text", + "DidntAffect2Text", + "DifficultBookshelfText", + "DisabledMoveText", + "DisabledNoMoreText", + "DoesntAffectText", + "DownpourText", + "DraggedOutText", + "DreamEatenText", + "EliminatedStatsText", + "EnduredText", + "EnemyHitTimesText", + "EvadedText", + "FastAsleepText", + "FellAsleepText", + "FellInLoveText", + "FledFromBattleText", + "FledInFearText", + "FlinchedText", + "ForesawAttackText", + "FrozenSolidText", + "FullyParalyzedText", + "GettingPumpedText", + "GotAnEncoreText", + "GotMoneyForWinningText", + "GymStatue_CityGymText", + "GymStatue_WinningTrainersText", + "HPIsFullText", + "HappinessText1", + "HappinessText2", + "HappinessText3", + "HasANightmareText", + "HasNoPPLeftText", + "HasSubstituteText", + "HomepageText", + "HookedPokemonAttackedText", + "HungOnText", + "HurtByBurnText", + "HurtByCurseText", + "HurtByPoisonText", + "HurtItselfText", + "IdentifiedText", + "IgnoredOrders2Text", + "IgnoredOrdersText", + "IgnoredSleepingText", + "InLoveWithText", + "IncenseBurnerText", + "InfatuationText", + "IsConfusedText", + "ItFailedText", + "LeechSeedSapsText", + "LightScreenEffectText", + "LoafingAroundText", + "LookTownMapText", + "LostAgainstText", + "MadeSubstituteText", + "MagazineBookshelfText", + "MagnitudeText", + "MartSignText", + "MerchandiseShelfText", + "MimicLearnedMoveText", + "MirrorMoveFailedText", + "MistText", + "MustRechargeText", + "NoPPLeftText", + "NotVeryEffectiveText", + "NothingHappenedText", + "NumberAcceptedFText", + "NumberAcceptedMText", + "NumberDeclinedFText", + "NumberDeclinedMText", + "NurseAskHealText", + "NurseDayText", + "NurseGoodbyeText", + "NurseMornText", + "NurseNiteText", + "NursePokerusText", + "NurseReturnPokemonText", + "NurseTakePokemonText", + "OneHitKOText", + "ParalyzedText", + "PerishCountText", + "PhoneFullFText", + "PhoneFullMText", + "PictureBookshelfText", + "PlayerHitTimesText", + "PokecenterSignText", + "PokemonFellFromTreeText", + "PresentFailedText", + "ProtectedByMistText", + "ProtectedByText", + "ProtectedItselfText", + "ProtectingItselfText", + "PutACurseText", + "RageBuildingText", + "ReceivedItemText", + "RecoilText", + "RecoveredUsingText", + "ReflectEffectText", + "RegainedHealthText", + "RegisteredNumberFText", + "RegisteredNumberMText", + "ReleasedByText", + "RematchFText", + "RematchMText", + "RestedText", + "SafeguardProtectText", + "SandstormBrewedText", + "SandstormHitsText", + "SentAllToMomText", + "SentHalfToMomText", + "SentSomeToMomText", + "SharedPainText", + "ShedLeechSeedText", + "SketchedText", + "SpikesText", + "SpiteEffectText", + "StartPerishText", + "StartedNightmareText", + "StoleText", + "StoringEnergyText", + "SubFadedText", + "SubTookDamageText", + "SuckedHealthText", + "SunGotBrightText", + "SuperEffectiveText", + "TVText", + "TeamRocketOathText", + "Text_BallCaught", + "Text_BattleEffectActivate", + "Text_BattleFoeEffectActivate", + "Text_BattleUser", + "Text_BreedHuh", + "Text_Gained", + "Text_MoveForgetCount", + "Text_NPCTraded", + "Text_PlayedPokeFlute", + "TiedAgainstText", + "TooWeakSubText", + "TookAimText", + "TookDownWithItText", + "TransformedText", + "TransformedTypeText", + "TrashCanText", + "TurnedAwayText", + "UnaffectedText", + "UnleashedEnergyText", + "UnusedRivalLossText", + "UnusedRivalWinText", + "UsedBindText", + "WantsToBattleText", + "WasBurnedText", + "WasDefrostedText", + "WasDisabledText", + "WasFrozenText", + "WasPoisonedText", + "WasSeededText", + "WasTrappedText", + "WentToSleepText", + "WildPokemonAppearedText", + "WindowText", + "WokeUpText", + "WontDropAnymoreText", + "WontObeyText", + "WontRiseAnymoreText", + "WrappedByText", + "_ActorNameText", + "_AlreadyASaveFileText", + "_AlreadySetUpText", + "_AlreadySurfingText", + "_AlreadyUsingStrengthText", + "_AnEggCantHoldAnItemText", + "_AnotherSaveFileText", + "_AreWeGeniusesText", + "_AskCutText", + "_AskDeleteMoveText", + "_AskFloorElevatorText", + "_AskForgetMoveText", + "_AskGiveNicknameText", + "_AskHeadbuttText", + "_AskItemMoveText", + "_AskQuantityThrowAwayText", + "_AskRockSmashText", + "_AskStrengthText", + "_AskSurfText", + "_AskThrowAwayText", + "_AskWaterfallText", + "_AskWhirlpoolText", + "_BGEventText", + "_BackAlreadyText", + "_BadgeRequiredText", + "_BallAlmostHadItText", + "_BallAppearedCaughtText", + "_BallBlockedText", + "_BallBoxFullText", + "_BallBrokeFreeText", + "_BallDodgedText", + "_BallDontBeAThiefText", + "_BallMissedText", + "_BallSentToPCText", + "_BallSoCloseText", + "_BargainShopComeAgainText", + "_BargainShopFinalPriceText", + "_BargainShopIntroText", + "_BargainShopNoFundsText", + "_BargainShopPackFullText", + "_BargainShopSoldOutText", + "_BargainShopThanksText", + "_BattleDugText", + "_BattleFlewText", + "_BattleGlowingText", + "_BattleLoweredHeadText", + "_BattleMadeWhirlwindText", + "_BattleMonNickCommaText", + "_BattleStatFellText", + "_BattleStatSharplyFellText", + "_BattleStatWentUpText", + "_BattleStatWentWayUpText", + "_BattleTookSunlightText", + "_BenFernText1", + "_BenFernText2A", + "_BenFernText2B", + "_BenFernText3A", + "_BenFernText3B", + "_BenIntroText1", + "_BenIntroText2", + "_BenIntroText3", + "_BidsFarewellToMonText", + "_BlindingFlashText", + "_BoostedExpPointsText", + "_BootedHMText", + "_BootedTMText", + "_BouldersMayMoveText", + "_BouldersMoveText", + "_BreedAppearsToCareForText", + "_BreedAskNicknameText", + "_BreedBrimmingWithEnergyText", + "_BreedClearboxText", + "_BreedEggHatchText", + "_BreedFriendlyText", + "_BreedNoInterestText", + "_BreedShowsInterestText", + "_BreedingIsNotPossibleText", + "_BugCatchingContestIsOverText", + "_BugCatchingContestTimeUpText", + "_BurnWasHealedText", + "_ButNoSpaceText", + "_CameToItsSensesText", + "_CanCutText", + "_CantAcceptEggText", + "_CantCarryItemText", + "_CantGetOffBikeText", + "_CantRegisterText", + "_CantSurfText", + "_CantUseDigText", + "_CantUseItemText", + "_CantUseTeleportText", + "_CardFlipChooseACardText", + "_CardFlipDarnText", + "_CardFlipNotEnoughCoinsText", + "_CardFlipPlaceYourBetText", + "_CardFlipPlayAgainText", + "_CardFlipPlayWithThreeCoinsText", + "_CardFlipShuffledText", + "_CardFlipYeahText", + "_CaughtAskNicknameText", + "_ChangeBoxSaveText", + "_ChangeWhichNumberText", + "_ClearAllSaveDataText", + "_ClockHasResetText", + "_ClockIsThisOKText", + "_ClockSetWithControlPadText", + "_ClockTimeMayBeWrongText", + "_CoinCaseCountText", + "_ComeAgainText", + "_ComeBackLaterText", + "_ComeBackText", + "_CompatibilityShouldTheyBreedText", + "_CongratulationsYourPokemonText", + "_ContainedMoveText", + "_ContestAlreadyCaughtText", + "_ContestAskSwitchText", + "_ContestCaughtMonText", + "_ContestJudging_FirstPlaceScoreText", + "_ContestJudging_FirstPlaceText", + "_ContestJudging_SecondPlaceScoreText", + "_ContestJudging_SecondPlaceText", + "_ContestJudging_ThirdPlaceScoreText", + "_ContestJudging_ThirdPlaceText", + "_CoordinatesEventText", + "_CorruptedEventText", + "_CuredOfPoisonText", + "_CutNothingText", + "_DSTIsThatOKText", + "_DayCareLadyIntroEggText", + "_DayCareLadyIntroText", + "_DayCareManIntroEggText", + "_DayCareManIntroText", + "_DaycareDummyText", + "_DeleterAskWhichMonText", + "_DeleterAskWhichMoveText", + "_DeleterEggText", + "_DeleterForgotMoveText", + "_DeleterIntroText", + "_DeleterNoComeAgainText", + "_DidNotLearnMoveText", + "_DoItMonText", + "_EggPhotoText", + "_EmptyMailboxText", + "_EndUsedMove1Text", + "_EndUsedMove2Text", + "_EndUsedMove3Text", + "_EndUsedMove4Text", + "_EndUsedMove5Text", + "_EnemyUsedOnText", + "_EnemyWithdrewText", + "_EnterTheAmountText", + "_EnterTheIDNoText", + "_EvolvedIntoText", + "_EvolvingText", + "_ExpPointsText", + "_FernIntroText1", + "_FernIntroText2", + "_FluteWakeUpText", + "_ForYourMonSendsText", + "_ForYourMonWillTradeText", + "_FoundAnEggText", + "_FoundItemText", + "_FruitBearingTreeText", + "_FruitPackIsFullText", + "_GearEllipseText", + "_GearOutOfServiceText", + "_GearTodayText", + "_GoForItMonText", + "_GoMonText", + "_GoodComeBackText", + "_GotBackMonText", + "_GotOffBikeText", + "_GotOnBikeText", + "_GrewToLevelText", + "_HaveNoRoomText", + "_HeadbuttNothingText", + "_HealthReturnedText", + "_HerbShopLadyIntroText", + "_HerbalLadyComeAgainText", + "_HerbalLadyFinalPriceText", + "_HerbalLadyHowManyText", + "_HerbalLadyNoMoneyText", + "_HerbalLadyPackFullText", + "_HerbalLadyThanksText", + "_HeyItsFruitText", + "_HoldStillText", + "_HugeWaterfallText", + "_IllKeepItThanksText", + "_IllRaiseYourMonText", + "_IsThisOKText", + "_ItemBelongsToSomeoneElseText", + "_ItemCantGetOnText", + "_ItemCantHeldText", + "_ItemCantUseOnEggText", + "_ItemCantUseOnMonText", + "_ItemGotOffText", + "_ItemGotOnText", + "_ItemLooksBitterText", + "_ItemOakWarningText", + "_ItemStatRoseText", + "_ItemStorageFullText", + "_ItemUsedText", + "_ItemWontHaveEffectText", + "_ItemfinderItemNearbyText", + "_ItemfinderNopeText", + "_ItemsDiscardedText", + "_ItemsOakWarningText", + "_ItemsThrowAwayText", + "_ItemsTooImportantText", + "_ItemsTossOutHowManyText", + "_ItsGoingToHatchText", + "_JustSawSomeRareMonText", + "_KarpGuruRecordText", + "_KnowsMoveText", + "_LC_DragText1", + "_LC_DragText2", + "_LC_Text1", + "_LC_Text10", + "_LC_Text11", + "_LC_Text2", + "_LC_Text3", + "_LC_Text4", + "_LC_Text5", + "_LC_Text6", + "_LC_Text7", + "_LC_Text8", + "_LC_Text9", + "_LastHealthyMonText", + "_LearnedMoveText", + "_LeftWithDayCareLadyText", + "_LeftWithDayCareManText", + "_LinkAbnormalMonText", + "_LinkAskTradeForText", + "_LinkTimeoutText", + "_LinkTradeCantBattleText", + "_LookAdorableDecoText", + "_LookClefairyPosterText", + "_LookGiantDecoText", + "_LookJigglypuffPosterText", + "_LookPikachuPosterText", + "_LookTownMapText", + "_LuckyNumberMatchPCText", + "_LuckyNumberMatchPartyText", + "_MagikarpGuruMeasureText", + "_MailAlreadyHoldingItemText", + "_MailAskSendToPCText", + "_MailClearedPutAwayText", + "_MailDetachedText", + "_MailEggText", + "_MailLoseMessageText", + "_MailMessageLostText", + "_MailMovedFromBoxText", + "_MailNoSpaceText", + "_MailPackFullText", + "_MailSentToPCText", + "_MailboxFullText", + "_MainMenuTimeUnknownText", + "_MartAskMoreText", + "_MartBoughtText", + "_MartCantBuyText", + "_MartComeAgainText", + "_MartFinalPriceText", + "_MartHowManyText", + "_MartNoMoneyText", + "_MartPackFullText", + "_MartSellHowManyText", + "_MartSellPriceText", + "_MartThanksText", + "_MartWelcomeText", + "_MayPassWhirlpoolText", + "_MayRegisterItemText", + "_MaySmashText", + "_MemoryGameDarnText", + "_MemoryGameYeahText", + "_MomBankWhatDoYouWantToDoText", + "_MomBoughtWithYourMoneyText", + "_MomFoundADollText", + "_MomFoundAnItemText", + "_MomHaventSavedThatMuchText", + "_MomHiHowAreYouText", + "_MomInsufficientFundsInWalletText", + "_MomIsThisAboutYourMoneyText", + "_MomItsInPCText", + "_MomItsInYourRoomText", + "_MomJustDoWhatYouCanText", + "_MomLeavingText1", + "_MomLeavingText2", + "_MomLeavingText3", + "_MomLostGearBookletText", + "_MomNotEnoughRoomInBankText", + "_MomNotEnoughRoomInWalletText", + "_MomSaveMoneyText", + "_MomStartSavingMoneyText", + "_MomStoreMoneyText", + "_MomStoredMoneyText", + "_MomTakeMoneyText", + "_MomTakenMoneyText", + "_MonNameBidsFarewellText", + "_MonNameSentToText", + "_MonWasSentToText", + "_MoveAskForgetText", + "_MoveBoulderText", + "_MoveCantForgetHMText", + "_MoveForgotText", + "_MoveKnowsOneText", + "_MoveMonWOMailSaveText", + "_MoveNameText", + "_MysteryGiftCanceledText", + "_MysteryGiftCommErrorText", + "_MysteryGiftFiveADayText", + "_MysteryGiftOneADayText", + "_MysteryGiftSentHomeText", + "_MysteryGiftSentText", + "_NPCTradeAfterText1", + "_NPCTradeAfterText2", + "_NPCTradeAfterText3", + "_NPCTradeCableText", + "_NPCTradeCancelText1", + "_NPCTradeCancelText2", + "_NPCTradeCancelText3", + "_NPCTradeCompleteText1", + "_NPCTradeCompleteText2", + "_NPCTradeCompleteText3", + "_NPCTradeFanfareText", + "_NPCTradeIntroText1", + "_NPCTradeIntroText2", + "_NPCTradeIntroText3", + "_NPCTradeWrongText1", + "_NPCTradeWrongText2", + "_NPCTradeWrongText3", + "_NameRaterBetterNameText", + "_NameRaterComeAgainText", + "_NameRaterEggText", + "_NameRaterFinishedText", + "_NameRaterHelloText", + "_NameRaterNamedText", + "_NameRaterPerfectNameText", + "_NameRaterSameNameText", + "_NameRaterWhatNameText", + "_NameRaterWhichMonText", + "_NewDexDataText", + "_NoCoinCaseText", + "_NoCoinsText", + "_NoCyclingText", + "_NoPhotoText", + "_NoRoomForEggText", + "_NoRoomTMHMText", + "_NotEnoughMoneyText", + "_NotYetText", + "_NothingHereText", + "_NothingToChooseText", + "_NothingToPutAwayText", + "_NothingToSellText", + "_OKComeBackText", + "_OPT_AddictivelyText", + "_OPT_AlmostPoisonouslyText", + "_OPT_AptlyNamedText", + "_OPT_BoldSortOfText", + "_OPT_CuteText", + "_OPT_EvolutionMustBeText", + "_OPT_ExcitingText", + "_OPT_FlippedOutText", + "_OPT_FriendlyText", + "_OPT_FrighteningText", + "_OPT_GuardedText", + "_OPT_HeartMeltinglyText", + "_OPT_HotHotHotText", + "_OPT_InspiringText", + "_OPT_IntroText1", + "_OPT_IntroText2", + "_OPT_IntroText3", + "_OPT_LooksInWaterText", + "_OPT_LovelyText", + "_OPT_MaryText1", + "_OPT_MischievouslyText", + "_OPT_NowText", + "_OPT_OakText1", + "_OPT_OakText2", + "_OPT_OakText3", + "_OPT_PleasantText", + "_OPT_PokemonChannelText", + "_OPT_PowerfulText", + "_OPT_ProvocativelyText", + "_OPT_SensuallyText", + "_OPT_SpeedyText", + "_OPT_StimulatingText", + "_OPT_SuaveDebonairText", + "_OPT_SweetAdorablyText", + "_OPT_TopicallyText", + "_OPT_UnbearablyText", + "_OPT_UndeniablyKindOfText", + "_OPT_WeirdText", + "_OPT_WigglySlicklyText", + "_OPT_WowImpressivelyText", + "_OTSendsText", + "_OakPCText1", + "_OakPCText2", + "_OakPCText3", + "_OakPCText4", + "_OakRating01", + "_OakRating02", + "_OakRating03", + "_OakRating04", + "_OakRating05", + "_OakRating06", + "_OakRating07", + "_OakRating08", + "_OakRating09", + "_OakRating10", + "_OakRating11", + "_OakRating12", + "_OakRating13", + "_OakRating14", + "_OakRating15", + "_OakRating16", + "_OakRating17", + "_OakRating18", + "_OakRating19", + "_OakText1", + "_OakText2", + "_OakText3", + "_OakText4", + "_OakText5", + "_OakText6", + "_OakText7", + "_OakThisIsntTheTimeText", + "_OakTimeHoursQuestionMarkText", + "_OakTimeHowManyMinutesText", + "_OakTimeIsItText", + "_OakTimeMinutesQuestionMarkText", + "_OakTimeOversleptText", + "_OakTimeSoDarkText", + "_OakTimeWhatDayIsItText", + "_OakTimeWhatHoursText", + "_OakTimeWhatTimeIsItText", + "_OakTimeWhoaMinutesText", + "_OakTimeWokeUpText", + "_OakTimeYikesText", + "_ObjectEventText", + "_ObtainedFruitText", + "_ObtainedTheVoltorbBadgeText", + "_OhFineThenText", + "_OnlyOneMonText", + "_PCCantDepositLastMonText", + "_PCCantTakeText", + "_PCGottaHavePokemonText", + "_PCMonHoldingMailText", + "_PCNoSingleMonText", + "_PCWhatText", + "_PPIsMaxedOutText", + "_PPRestoredText", + "_PPsIncreasedText", + "_PackEmptyText", + "_PackNoItemText", + "_PasswordAskEnterText", + "_PasswordAskResetClockText", + "_PasswordAskResetText", + "_PasswordWrongText", + "_PerfectHeresYourMonText", + "_PharmacyComeAgainText", + "_PharmacyFinalPriceText", + "_PharmacyHowManyText", + "_PharmacyIntroText", + "_PharmacyNoMoneyText", + "_PharmacyPackFullText", + "_PharmacyThanksText", + "_PhoneClickText", + "_PhoneEllipseText", + "_PhoneJustTalkToThemText", + "_PhoneOutOfAreaText", + "_PhoneThankYouText", + "_PhoneWrongNumberText", + "_PlayedFluteText", + "_PlayerFoundItemText", + "_PlayerPickedUpPayDayMoney", + "_PlayersPCAskWhatDoText", + "_PlayersPCDepositItemsText", + "_PlayersPCHowManyDepositText", + "_PlayersPCHowManyWithdrawText", + "_PlayersPCNoItemsText", + "_PlayersPCNoRoomDepositText", + "_PlayersPCNoRoomWithdrawText", + "_PlayersPCTurnOnText", + "_PlayersPCWithdrewItemsText", + "_PnP_BoldText", + "_PnP_CoolText", + "_PnP_CuteText", + "_PnP_GreatText", + "_PnP_HappyText", + "_PnP_InspiringText", + "_PnP_LazyText", + "_PnP_MyTypeText", + "_PnP_NoisyText", + "_PnP_OddText", + "_PnP_PickyText", + "_PnP_PrecociousText", + "_PnP_RightForMeText", + "_PnP_SoSoText", + "_PnP_SortOfOKText", + "_PnP_Text1", + "_PnP_Text2", + "_PnP_Text3", + "_PnP_Text4", + "_PnP_Text5", + "_PnP_WeirdText", + "_PocketIsFullText", + "_PoisonFaintText", + "_PoisonWhiteoutText", + "_PokecenterBillsPCText", + "_PokecenterOaksPCText", + "_PokecenterPCCantUseText", + "_PokecenterPCOaksClosedText", + "_PokecenterPCTurnOnText", + "_PokecenterPCWhoseText", + "_PokecenterPlayersPCText", + "_PokedexShowText", + "_PokegearAskDeleteText", + "_PokegearAskWhoCallText", + "_PokegearPressButtonText", + "_PokemonAskSwapItemText", + "_PokemonHoldItemText", + "_PokemonNotEnoughHPText", + "_PokemonNotHoldingText", + "_PokemonRemoveMailText", + "_PokemonSwapItemText", + "_PokemonTookItemText", + "_PrestoAllDoneText", + "_PutAwayAndSetUpText", + "_PutAwayTheDecoText", + "_PutItemInPocketText", + "_RaiseThePPOfWhichMoveText", + "_ReceiveItemText", + "_ReceivedEggText", + "_ReceivedItemText", + "_ReceivedTMHMText", + "_RecoveredSomeHPText", + "_RegisteredItemText", + "_RemainingTimeText", + "_RemoveMailText", + "_RepelUsedEarlierIsStillInEffectText", + "_RepelWoreOffText", + "_RestoreThePPOfWhichMoveText", + "_RetrieveMysteryGiftText", + "_RevitalizedText", + "_RidOfParalysisText", + "_RocketRadioText1", + "_RocketRadioText10", + "_RocketRadioText2", + "_RocketRadioText3", + "_RocketRadioText4", + "_RocketRadioText5", + "_RocketRadioText6", + "_RocketRadioText7", + "_RocketRadioText8", + "_RocketRadioText9", + "_RodBiteText", + "_RodNothingText", + "_SaveFileCorruptedText", + "_SavedTheGameText", + "_SavingDontTurnOffThePowerText", + "_SavingRecordText", + "_SentTrophyHomeText", + "_SetUpTheDecoText", + "_SlotsBetHowManyCoinsText", + "_SlotsDarnText", + "_SlotsLinedUpText", + "_SlotsNotEnoughCoinsText", + "_SlotsPlayAgainText", + "_SlotsRanOutOfCoinsText", + "_SlotsStartText", + "_SpaceSpaceColonText", + "_SquirtbottleNothingText", + "_StartMenuContestEndText", + "_StopLearningMoveText", + "_StoppedEvolvingText", + "_SweetScentNothingText", + "_TMHMNotCompatibleText", + "_TakeGoodCareOfEggText", + "_TakeGoodCareOfMonText", + "_TeleportReturnText", + "_TestEventText", + "_ThatCantBeUsedRightNowText", + "_ThatItemCantBePutInThePackText", + "_ThatsEnoughComeBackText", + "_TheBoxIsFullText", + "_TheItemWasPutInThePackText", + "_ThePasswordIsText", + "_ThereIsNoEggText", + "_ThrewAwayText", + "_TimeAskOkayText", + "_TimesetAskAdjustDSTText", + "_TimesetAskDSTText", + "_TimesetAskNotDSTText", + "_TimesetDSTText", + "_TimesetNotDSTText", + "_UnusedNothingHereText", + "_UseCutText", + "_UseDigText", + "_UseEscapeRopeText", + "_UseHeadbuttText", + "_UseRockSmashText", + "_UseSacredAshText", + "_UseStrengthText", + "_UseSweetScentText", + "_UseWaterfallText", + "_UseWhirlpoolText", + "_UsedInsteadText", + "_UsedMove1Text", + "_UsedMove2Text", + "_UsedSurfText", + "_WaitButtonText", + "_WarpingText", + "_WasDefrostedText", + "_WasSentToBillsPCText", + "_WhatDoYouWantToPlayWithText", + "_WhatShouldIRaiseText", + "_WhichMonPhotoText", + "_WhichSidePutAwayText", + "_WhichSidePutOnText", + "_WhitedOutText", + "_WillTradeText", + "_WillYouPlayWithMonText", + "_WindowAreaExceededErrorText", + "_WindowPoppingErrorText", + "_WokeUpText", + "_WouldYouLikeToSaveTheGameText", + "_YouCanHaveThisText", + "_YouCantUseItInABattleText", + "_YouDontHaveAMonText", + "_YouNeedTwoMonForBreedingText", + "_YourFoesWeakGetmMonText", + "_YourFriendIsNotReadyText", + "_YourMonHasGrownText", + "_YourMonsHPWasHealedText" + ] + }, "tilesets": { "TILESET_CAVE": {}, "TILESET_CHAMPIONS_ROOM": {},