Port field moves from the menu, SEL with Select, and moving Pokémon in Bill's PC
Checks / web (push) Canceled after 0s
Checks / web (push) Canceled after 0s
Field moves chosen in the party menu run their original checks and the ROM's from-menu scripts (Cut, Surf, Strength, Flash, Whirlpool, Waterfall, Sweet Scent), and Softboiled and Milk Drink share HP. SEL registers a key item that Select then uses, replacing the Key Items shortcut, and Bill's PC moves Pokémon between the party and every box. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
45275ba83b
commit
3456aa4e11
25 files changed
+1129
-186
No files matched your search
+55
-3
@@ -27,12 +27,12 @@ These paths refer to the pinned [PRET source](https://github.com/pret/pokecrysta
|
||||
| `game/rom/assets.ts` maps/events | `data/maps/maps.asm`, `data/maps/attributes.asm`, `data/maps/scenes.asm`, `data/maps/landmarks.asm`, `macros/scripts/maps.asm` | Any map header in the ROM's 26 groups decodes; only maps explicitly listed in NATIVE_MAPS can be entered. Location names, scene-variable owners and connection offsets come from the ROM. |
|
||||
| Tiles/palettes | `home/map.asm`, `engine/gfx/color.asm`, `engine/tilesets/mapgroup_roofs.asm` | Graphics match rebuilt reference bytes. Connected maps draw beyond the edges with the current tileset, like the original strips. Native tileset animation and special palettes; Johto, Ice Path, restless Ilex Forest and Tin Tower each match 96 reference VRAM frames. 192 palette cases match the original routine. |
|
||||
| Sprites/rendering | `data/sprites/sprites.asm`, `data/sprites/facings.asm`, `data/sprites/emotes.asm` | Chris/Kris, standard NPCs, emote bubbles and jump shadows decoded. Walking frames follow `SetFacingStepAction`. Variable sprites and Pokémon icons decoded; grass priority supported. Owned room decorations support selection, removal, slot placement, descriptions and validated saves. |
|
||||
| `game/world/world.ts` | `engine/overworld/events.asm`, `player_movement.asm`, `warp_connection.asm`, `data/collision/collision_permissions.asm` | 30 Hz overworld ticks, 8-tick walks, 16-tick ledge jumps, directional mats, animated door/stair exits, connection coordinates, events, scenes and callbacks. NPC random walks and spins follow `HandleNPCStep`. Forced movement, Surf, Cut, Strength, cycling rules, pits and elevators implemented. Fourteen reference traces compare turn timing, actors and event flags; map-entry boundaries verify the completed destination. Bicycle access uses the Key Items menu (Select) or the pack. |
|
||||
| `game/world/world.ts` | `engine/overworld/events.asm`, `player_movement.asm`, `warp_connection.asm`, `data/collision/collision_permissions.asm` | 30 Hz overworld ticks, 8-tick walks, 16-tick ledge jumps, directional mats, animated door/stair exits, connection coordinates, events, scenes and callbacks. NPC random walks and spins follow `HandleNPCStep`. Forced movement, Surf, Cut, Strength, cycling rules, pits and elevators implemented. Fourteen reference traces compare turn timing, actors and event flags; map-entry boundaries verify the completed destination. The Bicycle is used from the pack or with Select. Field moves chosen from the party menu are checked here (`menuFieldMove`). |
|
||||
| Event interpreter | `macros/scripts/events.asm`, `engine/overworld/scripting.asm`, `engine/events/std_scripts.asm` | Resumable; yields text, choices, movement, emotes and pauses. Scenes, phone contacts, string buffers and object commands. Unknown commands and specials abort without committing. |
|
||||
| Movement interpreter | `macros/scripts/movement.asm`, `engine/overworld/movement.asm`, `engine/overworld/map_objects.asm` | Turns, steps, slides, jumps (two tiles with the original arc), sleeps, facing locks, visibility and emotes. `follow` takes one tile toward the leader's previous square. All movement opcodes decode, including teleport, fishing, skyfall, shake and flicker poses; Controlled reference scenes check spin, teleport, skyfall, fishing and flicker direction, visibility and lift. |
|
||||
| Specials | `data/events/special_pointers.asm`, `engine/rtc/timeset.asm`, `engine/overworld/decorations.asm` | Selected by routine address from the ROM table: `SetDayOfWeek`, initial DST flags, `RestartMapMusic` (no audio yet), room decoration toggles, `PokemonCenterPC` and `PlayersHousePC` (Bill's, the player's and Oak's PCs), the Town Map, `HealParty`, `HealMachineAnim` (presentation only), `CheckPokerus` and the `StubbedTrainerRankings_Healings` stub. |
|
||||
| `game/scripts/pc.ts` | `engine/events/pokecenter_pc.asm`, `engine/pokemon/bills_pc_top.asm`, `engine/pokemon/bills_pc.asm`, `engine/events/prof_oaks_pc.asm`, `engine/events/std_collision.asm` | The Pokémon Center and house PCs: Bill's PC (deposit, withdraw, release, change and name boxes), item storage, the empty mail box and Oak's rating. Menu strings and texts come from the ROM; lists are native. Moving Pokémon, the stats screen and printing are not ported. |
|
||||
| `game/scripts/start-menu.ts` | `engine/menus/start_menu.asm`, `engine/pokemon/mon_menu.asm`, `mon_submenu.asm`, `party_menu.asm`, `switchpartymons.asm`, `engine/items/pack.asm`, `engine/items/item_effects.asm` | The start menu, the party menu with the Pokémon submenu (STATS, SWITCH, MOVE, ITEM) and the pack (USE, GIVE, TOSS) with the field item effects listed below, including Rare Candy, stones and vitamins. Menu strings, prompts and texts come from the ROM; screens are native. Field moves from the menu, MAIL, SEL and the other field items give a notice. |
|
||||
| `game/scripts/pc.ts` | `engine/events/pokecenter_pc.asm`, `engine/pokemon/bills_pc_top.asm`, `engine/pokemon/bills_pc.asm`, `engine/events/prof_oaks_pc.asm`, `engine/events/std_collision.asm` | The Pokémon Center and house PCs: Bill's PC (deposit, withdraw, release, change and name boxes, MOVE PKMN W/O MAIL, stats), item storage, the empty mail box and Oak's rating. Menu strings and texts come from the ROM; lists are native. Printing is not ported. |
|
||||
| `game/scripts/start-menu.ts` | `engine/menus/start_menu.asm`, `engine/pokemon/mon_menu.asm`, `mon_submenu.asm`, `party_menu.asm`, `switchpartymons.asm`, `engine/items/pack.asm`, `engine/items/item_effects.asm` | The start menu, the party menu with the Pokémon submenu (STATS, SWITCH, MOVE, ITEM) and the pack (USE, GIVE, TOSS) with the field item effects listed below, including Rare Candy, stones and vitamins. Menu strings, prompts and texts come from the ROM; screens are native. Field moves from the menu (checked by the world), Softboiled and Milk Drink, SEL and the Select button (`SelectMenu`). MAIL and the other field items give a notice. |
|
||||
| `game/scripts/evolution.ts` | `engine/pokemon/evolve.asm`, `engine/pokemon/learn.asm`, `engine/movie/evolution_animation.asm`, `engine/pokemon/party_menu.asm` | `EvolveAfterBattle`/`EvolvePokemon` over the raw evolution bytes, the evolution texts and a timed, B-stoppable picture sequence, `UpdateSpeciesNameIfNotNicknamed`, `CalcMonStats` and the HP rise, `LearnLevelMoves`, `LearnMove`/`ForgetMove` outside battle and `PlacePartyMonEvoStoneCompatibility`. |
|
||||
| `game/rom/pokemon.ts` | `data/pokemon/base_stats`, `evos_attacks.asm`, `data/moves/moves.asm`, `data/items/attributes.asm`, `engine/gfx/load_pics.asm` | Species, move and item names, base data, evolution lists, learnsets, move PP, item pockets, growth-rate exp and front pictures (`FixPicBank`, `PadFrontpic`). Starter pictures match rebuilt bytes; all 251 evolution lists match the pinned source. |
|
||||
| `game/party` | `engine/pokemon/move_mon.asm`, `engine/pokemon/caught_data.asm`, `engine/items/items.asm` | `GeneratePartyMonStats` for script gifts: DVs, `FillMoves`, PP, exp, `CalcMonStatC`, happiness and caught data. `PutItemInPocket`, key items and `TossItem`. `SendMonIntoBox`, `SendGetMonIntoFromBox` (deposit and withdraw), `RestorePPOfDepositedPokemon` and `CalcLevel` for the PC's boxes and item storage. TMs and HMs are refused. |
|
||||
@@ -385,3 +385,55 @@ to its limit. `tests/battle-world.test.ts` wins a wild battle whose level-up
|
||||
evolves Cyndaquil, and checks that a non-participant that could evolve does
|
||||
not. A Chromium/WebKit test evolves through a Rare Candy. No emulator
|
||||
comparison of these routines yet.
|
||||
|
||||
## Field moves from the menu, SEL and MOVE PKMN W/O MAIL
|
||||
|
||||
`PokemonActionSubmenu` passes a field move to the world, which evaluates
|
||||
the menu function's checks on the menu's draft for the chosen party slot:
|
||||
`CheckBadge` with `BadgeRequiredText`, `CheckMapForSomethingToCut`
|
||||
(`CheckCutCollision` and `CutTreeBlockPointers`), `SurfFunction` (Fog
|
||||
Badge, forced cycling, already surfing, water permission, `CheckDirection`
|
||||
and `CheckFacingObject`), `StrengthFunction`, `FlashFunction`
|
||||
(`SpecialAerodactylChamber` by map attributes, which sets
|
||||
`EVENT_WALL_OPENED_IN_AERODACTYL_CHAMBER`, or `DARKNESS_PALSET`),
|
||||
`TryWhirlpoolMenu`, `CheckMapCanWaterfall`, and the checks of Fly, Dig,
|
||||
Teleport, Headbutt and Rock Smash. A success queues `Script_CutFromMenu`,
|
||||
`SurfFromMenuScript`, `Script_StrengthFromMenu`, `Script_UseFlash`,
|
||||
`Script_WhirlpoolFromMenu`, `Script_WaterfallFromMenu` or
|
||||
`SweetScentFromMenu.SweetScent` with the field-move context the interpreter
|
||||
already reads (`GetPartyNickname`, the replacement block, the surfing
|
||||
state). New interpreter support: `callasm BlindingFlash` (sets the Flash
|
||||
flag), `callasm SweetScentEncounter` (the encounter the world drew with
|
||||
`CanEncounterWildMon`, `GetMapEncounterRate` and `ChooseWildEncounter`, no
|
||||
rate roll) and `UseFlashTextScript`'s sound-only `text_asm`. Fly's map, Dig
|
||||
and Teleport's warps, `TreeMonEncounter` and `RockMonEncounter` are not
|
||||
ported and give a notice after their checks.
|
||||
`Softboiled_MilkDrinkFunction` runs in the menu with `GetOneFifthMaxHP`,
|
||||
`RemoveHP` and `RestoreHealth`, refusing the user itself and Pokémon that
|
||||
fainted or are at full HP.
|
||||
|
||||
`RegisterItem` stores `wWhichRegisteredItem` (pocket in bits 6-7, 1-based
|
||||
slot in bits 0-5) and `wRegisteredItem`, now saved as `registeredItem`.
|
||||
`SelectMenu` runs as a start-menu run: `CheckRegisteredItem` (items by slot,
|
||||
key items anywhere in their pocket, balls never because `.CheckBall`'s
|
||||
carry test is inverted, TMs never; a miss clears the registration) and
|
||||
`UseRegisteredItem` by field menu, with `wUsingItemWithSelect` choosing
|
||||
`Script_GetOnBike_Register`/`Script_GetOffBike_Register`. `MayRegisterItemText`
|
||||
and `ItemsOakWarningText` come from the ROM.
|
||||
|
||||
`BillsPC_MovePKMNMenu`: `IsAnyMonHoldingMail`, then
|
||||
`StartMoveMonWOMail_SaveGame`'s question (the native session saves by
|
||||
itself, so no save messages follow). `_MovePKMNWithoutMail` treats the party
|
||||
as box 0; lists are presented per box. `BillsPC_CheckMail_PreventBlackout`,
|
||||
`BillsPC_CheckSpaceInDestination` and `MovePKMNWithoutMail_InsertMon` with
|
||||
`.CheckTrivialMove`, `CalcBufferMonStats` for a boxed Pokémon joining the
|
||||
party, and `InsertPokemonIntoBox`'s `RestorePPOfDepositedPokemon`.
|
||||
|
||||
Tests: `tests/overworld-rom.test.ts` uses Surf, Cut, Strength, Flash, Sweet
|
||||
Scent and Rock Smash from the menu (badge refusals, failure texts, the dark
|
||||
map and the encounter); `tests/start-menu.test.ts` covers Softboiled, SEL,
|
||||
Select with and without a registration, indoors, and a registration that
|
||||
left its slot; `tests/pc.test.ts` moves Pokémon party to box, box to party,
|
||||
within the party and within a full box, and refuses the last Pokémon and a
|
||||
full destination. Browser tests register the Bicycle and ride it with
|
||||
Select from the keyboard and the on-screen button.
|
||||
Reference in new issue
Block a user