mirror of
https://github.com/bryanthaboi/gen1recomp
synced 2026-09-26 13:33:27 -04:00
241 lines
8.9 KiB
Lua
241 lines
8.9 KiB
Lua
-- Shared FRLG std / common scripts (not map-local). Same role as pret
|
|
-- data/scripts/pc.inc + pkmn_center_nurse.inc — one definition, every map.
|
|
|
|
local Flags = require("src.core.game3.scripting.flags")
|
|
local Opcodes = require("src.core.game3.scripting.opcodes")
|
|
local TextIR = require("src.core.game3.scripting.text_ir")
|
|
|
|
local Std = {}
|
|
|
|
local function T(ascii)
|
|
ascii = ascii:gsub("^\n", ""):gsub("\r\n", "\n"):gsub("\n", "\\n")
|
|
return TextIR.fromAscii(ascii)
|
|
end
|
|
|
|
-- specials.inc indices (FireRed)
|
|
Std.SPECIAL = {
|
|
HealPlayerParty = 0x00,
|
|
ShowPokemonStorageSystemPC = 0x3C,
|
|
BufferMonNickname = 0x7D, -- 125
|
|
ChangePokemonNickname = 0x9F, -- 159
|
|
-- ShowRegionMap / Sevii town map (Tier A special → game3 region UI).
|
|
ShowRegionMap = 0xAF,
|
|
AnimatePcTurnOn = 0xD6,
|
|
AnimatePcTurnOff = 0xD7,
|
|
BedroomPC = 0xF9, -- pokefirered/data/specials.inc:260
|
|
PlayerPC = 0xFA,
|
|
CreatePCMenu = 0x106,
|
|
EnterHallOfFame = 0x110, -- 272 (special HallOfFame / GameClear)
|
|
EnableNationalPokedex = 0x179, -- 377
|
|
SetUnlockedPokedexFlags = 0x18B, -- 395
|
|
IsNationalPokedexEnabled = 0x19D, -- 413
|
|
-- Engine-extension specials (not cart indices) for shared primitives.
|
|
FadeScreen = 0xF001,
|
|
OpenNaming = 0xF002,
|
|
PlayCry = 0xF003,
|
|
}
|
|
|
|
Std.TEXT = {
|
|
Text_WelcomeWantToHealPkmn = T([[
|
|
Welcome to our POKéMON CENTER!
|
|
Would you like me to rest your
|
|
POKéMON to good health?]]),
|
|
Text_TakeYourPkmnForFewSeconds = T([[
|
|
OK. I'll take your POKéMON for a
|
|
few seconds.]]),
|
|
Text_RestoredPkmnToFullHealth = T([[
|
|
Thank you for waiting.
|
|
We've restored your POKéMON to
|
|
full health.]]),
|
|
Text_WeHopeToSeeYouAgain = T([[
|
|
We hope to see you again!]]),
|
|
Text_BootedUpPC = T([[
|
|
{PLAYER} booted up the PC.]]),
|
|
Text_UsualPCServicesUnavailable = T([[
|
|
The usual PC services aren't
|
|
available right now…]]),
|
|
-- obtain_item.inc (simplified host strings)
|
|
Text_ObtainedTheX = T([[
|
|
{PLAYER} obtained
|
|
the {STR_VAR_2}!]]),
|
|
Text_PutItemAway = T([[
|
|
{PLAYER} put away the
|
|
{STR_VAR_2} in the {STR_VAR_3}.]]),
|
|
Text_TooBadBagFull = T([[
|
|
Too bad!
|
|
The BAG is full…]]),
|
|
Text_FoundOneItem = T([[
|
|
{PLAYER} found one {STR_VAR_2}!]]),
|
|
Text_FoundTMHMContainsMove = T([[
|
|
{PLAYER} found
|
|
{STR_VAR_2}!]]),
|
|
}
|
|
|
|
-- Cart EventScript_PC (simplified host path: open full storage UI).
|
|
Std.SCRIPTS = {
|
|
EventScript_PC = {
|
|
{ op = "lockall" },
|
|
{ op = "special", id = Std.SPECIAL.AnimatePcTurnOn },
|
|
{ op = "loadword", dest = 0, value = "Text_BootedUpPC" },
|
|
{ op = "message", ptr = 0 },
|
|
{ op = "waitmessage" },
|
|
{ op = "waitbuttonpress" },
|
|
{ op = "special", id = Std.SPECIAL.CreatePCMenu },
|
|
{ op = "waitstate" },
|
|
{ op = "special", id = Std.SPECIAL.AnimatePcTurnOff },
|
|
{ op = "releaseall" },
|
|
{ op = "end" },
|
|
},
|
|
-- Pret shape: welcome → YES/NO → take&heal (turn left → FLDEFF_POKECENTER_HEAL
|
|
-- → turn down → HealPlayerParty) → restored → bow → goodbye.
|
|
EventScript_PkmnCenterNurse = {
|
|
{ op = "loadword", dest = 0, value = "Text_WelcomeWantToHealPkmn" },
|
|
{ op = "callstd", std = Opcodes.STD.MSGBOX_YESNO },
|
|
{ op = "compare_var_to_value", var = 0x800D, value = 0 },
|
|
{ op = "goto_if", cond = 1, target = "EventScript_PkmnCenterNurse_Goodbye" },
|
|
{ op = "loadword", dest = 0, value = "Text_TakeYourPkmnForFewSeconds" },
|
|
{ op = "message", ptr = 0 },
|
|
{ op = "waitmessage" },
|
|
{ op = "call", target = "EventScript_PkmnCenterNurse_TakeAndHealPkmn" },
|
|
{ op = "goto", target = "EventScript_PkmnCenterNurse_ReturnPkmn" },
|
|
},
|
|
-- pret EventScript_PkmnCenterNurse_TakeAndHealPkmn
|
|
EventScript_PkmnCenterNurse_TakeAndHealPkmn = {
|
|
-- WalkInPlaceFasterLeft / Down (0x2F / 0x2D) + step_end
|
|
{ op = "applymovement", localId = 0x800F, movement = { 0x2F, 0xFE } },
|
|
{ op = "waitmovement", localId = 0x800F },
|
|
{ op = "dofieldeffect", [1] = 25 },
|
|
{ op = "waitfieldeffect", [1] = 25 },
|
|
{ op = "applymovement", localId = 0x800F, movement = { 0x2D, 0xFE } },
|
|
{ op = "waitmovement", localId = 0x800F },
|
|
{ op = "special", id = Std.SPECIAL.HealPlayerParty },
|
|
{ op = "return" },
|
|
},
|
|
EventScript_PkmnCenterNurse_ReturnPkmn = {
|
|
{ op = "loadword", dest = 0, value = "Text_RestoredPkmnToFullHealth" },
|
|
{ op = "message", ptr = 0 },
|
|
{ op = "waitmessage" },
|
|
-- nurse_joy_bow (0x5B) + delay_4 (0x1A) + step_end
|
|
{ op = "applymovement", localId = 0x800F, movement = { 0x5B, 0x1A, 0xFE } },
|
|
{ op = "waitmovement", localId = 0x800F },
|
|
{ op = "goto", target = "EventScript_PkmnCenterNurse_Goodbye" },
|
|
},
|
|
EventScript_PkmnCenterNurse_Goodbye = {
|
|
{ op = "loadword", dest = 0, value = "Text_WeHopeToSeeYouAgain" },
|
|
{ op = "callstd", std = Opcodes.STD.MSGBOX_DEFAULT },
|
|
{ op = "return" },
|
|
},
|
|
-- Economy / item stds (pret obtain_item.inc). Pocket name → STR_VAR_3.
|
|
["std:0"] = { -- STD_OBTAIN_ITEM
|
|
{ op = "additem", [1] = 0x8000, [2] = 0x8001 },
|
|
{ op = "copyvar", [1] = 0x8007, [2] = 0x800D },
|
|
{ op = "bufferitemname", dest = 1, src = 0x8000 }, -- STR_VAR_2
|
|
{ op = "checkitemtype", [1] = 0x8000 },
|
|
{ op = "call", target = "EventScript_BufferPocketName" },
|
|
{ op = "compare_var_to_value", var = 0x8007, value = 1 },
|
|
{ op = "goto_if", cond = 1, target = "EventScript_ObtainedItem" },
|
|
{ op = "setvar", var = 0x800D, value = 0 },
|
|
{ op = "return" },
|
|
},
|
|
EventScript_ObtainedItem = {
|
|
{ op = "loadword", dest = 0, value = "Text_ObtainedTheX" },
|
|
{ op = "message", ptr = 0 },
|
|
{ op = "waitmessage" },
|
|
{ op = "waitbuttonpress" },
|
|
{ op = "loadword", dest = 0, value = "Text_PutItemAway" },
|
|
{ op = "message", ptr = 0 },
|
|
{ op = "waitmessage" },
|
|
{ op = "waitbuttonpress" },
|
|
{ op = "setvar", var = 0x800D, value = 1 },
|
|
{ op = "return" },
|
|
},
|
|
EventScript_BufferPocketName = {
|
|
{ op = "compare_var_to_value", var = 0x800D, value = 1 },
|
|
{ op = "goto_if", cond = 1, target = "EventScript_BufferItemsPocket" },
|
|
{ op = "compare_var_to_value", var = 0x800D, value = 2 },
|
|
{ op = "goto_if", cond = 1, target = "EventScript_BufferKeyItemsPocket" },
|
|
{ op = "compare_var_to_value", var = 0x800D, value = 3 },
|
|
{ op = "goto_if", cond = 1, target = "EventScript_BufferPokeBallsPocket" },
|
|
{ op = "compare_var_to_value", var = 0x800D, value = 4 },
|
|
{ op = "goto_if", cond = 1, target = "EventScript_BufferTMCase" },
|
|
{ op = "compare_var_to_value", var = 0x800D, value = 5 },
|
|
{ op = "goto_if", cond = 1, target = "EventScript_BufferBerryPouch" },
|
|
{ op = "bufferstdstring", dest = 2, src = 24 }, -- STR_VAR_3 ITEMS POCKET
|
|
{ op = "return" },
|
|
},
|
|
EventScript_BufferItemsPocket = {
|
|
{ op = "bufferstdstring", dest = 2, src = 24 },
|
|
{ op = "return" },
|
|
},
|
|
EventScript_BufferKeyItemsPocket = {
|
|
{ op = "bufferstdstring", dest = 2, src = 25 },
|
|
{ op = "return" },
|
|
},
|
|
EventScript_BufferPokeBallsPocket = {
|
|
{ op = "bufferstdstring", dest = 2, src = 26 },
|
|
{ op = "return" },
|
|
},
|
|
EventScript_BufferTMCase = {
|
|
{ op = "bufferstdstring", dest = 2, src = 27 },
|
|
{ op = "return" },
|
|
},
|
|
EventScript_BufferBerryPouch = {
|
|
{ op = "bufferstdstring", dest = 2, src = 28 },
|
|
{ op = "return" },
|
|
},
|
|
["std:1"] = { -- STD_FIND_ITEM
|
|
{ op = "checkitemspace", [1] = 0x8000, [2] = 0x8001 },
|
|
{ op = "copyvar", [1] = 0x8007, [2] = 0x800D },
|
|
{ op = "bufferitemname", dest = 1, src = 0x8000 },
|
|
{ op = "checkitemtype", [1] = 0x8000 },
|
|
{ op = "call", target = "EventScript_BufferPocketName" },
|
|
{ op = "compare_var_to_value", var = 0x8007, value = 1 },
|
|
{ op = "goto_if", cond = 1, target = "EventScript_PickUpItem" },
|
|
{ op = "loadword", dest = 0, value = "Text_TooBadBagFull" },
|
|
{ op = "message", ptr = 0 },
|
|
{ op = "waitmessage" },
|
|
{ op = "waitbuttonpress" },
|
|
{ op = "setvar", var = 0x800D, value = 0 },
|
|
{ op = "return" },
|
|
},
|
|
EventScript_PickUpItem = {
|
|
{ op = "removeobject", [1] = 0x800F },
|
|
{ op = "additem", [1] = 0x8000, [2] = 0x8001 },
|
|
{ op = "loadword", dest = 0, value = "Text_FoundOneItem" },
|
|
{ op = "message", ptr = 0 },
|
|
{ op = "waitmessage" },
|
|
{ op = "waitbuttonpress" },
|
|
{ op = "loadword", dest = 0, value = "Text_PutItemAway" },
|
|
{ op = "message", ptr = 0 },
|
|
{ op = "waitmessage" },
|
|
{ op = "waitbuttonpress" },
|
|
{ op = "setvar", var = 0x800D, value = 1 },
|
|
{ op = "return" },
|
|
},
|
|
["std:6"] = { -- MSGBOX_AUTOCLOSE
|
|
{ op = "message", ptr = 0 },
|
|
{ op = "waitmessage" },
|
|
{ op = "waitbuttonpress" },
|
|
{ op = "return" },
|
|
},
|
|
["std:8"] = { -- STD_PUT_ITEM_AWAY
|
|
{ op = "bufferitemname", dest = 1, src = 0x8000 },
|
|
{ op = "checkitemtype", [1] = 0x8000 },
|
|
{ op = "call", target = "EventScript_BufferPocketName" },
|
|
{ op = "loadword", dest = 0, value = "Text_PutItemAway" },
|
|
{ op = "message", ptr = 0 },
|
|
{ op = "waitmessage" },
|
|
{ op = "waitbuttonpress" },
|
|
{ op = "return" },
|
|
},
|
|
["std:9"] = { -- STD_RECEIVED_ITEM (msgreceiveditem)
|
|
{ op = "message", ptr = 0 },
|
|
{ op = "waitmessage" },
|
|
{ op = "waitfanfare" },
|
|
{ op = "waitbuttonpress" },
|
|
{ op = "return" },
|
|
},
|
|
}
|
|
|
|
return Std
|