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
+6
-58
@@ -1,5 +1,4 @@
|
||||
import { drawTownMap } from "./game/rendering/town-map";
|
||||
import { OW } from "./game/world/constants";
|
||||
import "./ui/styles.css";
|
||||
import { renderShell } from "./ui/shell";
|
||||
import { bindTabs } from "./ui/tabs";
|
||||
@@ -48,7 +47,6 @@ function showWorld(world: GameWorld) {
|
||||
get("game-notice").textContent = world.notice;
|
||||
showBattle(world);
|
||||
showStatsScreen(world);
|
||||
showFieldMenu(world);
|
||||
get("town-map-view").hidden = !world.townMap;
|
||||
if (world.townMap)
|
||||
drawTownMap(get<HTMLCanvasElement>("town-map-canvas"), world);
|
||||
@@ -438,64 +436,14 @@ let statsView: { slot?: number; page: number } | undefined;
|
||||
let battleCursor = 0;
|
||||
let battleSelectionKey = "";
|
||||
|
||||
let fieldCursor = 0;
|
||||
function fieldButtons() {
|
||||
return [
|
||||
...get("field-items").querySelectorAll<HTMLButtonElement>(
|
||||
"button:not(:disabled)",
|
||||
),
|
||||
];
|
||||
}
|
||||
function showFieldMenu(world: GameWorld) {
|
||||
const panel = get("field-menu");
|
||||
panel.hidden = !runtime.fieldMenuOpen;
|
||||
if (panel.hidden) return;
|
||||
const buttons = world.state.bag.keyItems.map((item) => {
|
||||
const button = document.createElement("button");
|
||||
button.textContent = world.assets.pokemon.itemName(item);
|
||||
button.disabled = item !== OW.BICYCLE;
|
||||
button.onclick = () => {
|
||||
if (session.state !== "playing") return;
|
||||
runtime.useBicycle();
|
||||
canvas.focus({ preventScroll: true });
|
||||
};
|
||||
return button;
|
||||
});
|
||||
const close = document.createElement("button");
|
||||
close.textContent = "CLOSE";
|
||||
close.onclick = () => {
|
||||
runtime.fieldMenuOpen = false;
|
||||
showFieldMenu(world);
|
||||
canvas.focus();
|
||||
};
|
||||
get("field-items").replaceChildren(...buttons, close);
|
||||
fieldButtons().forEach((button, i) =>
|
||||
button.classList.toggle("battle-selected", i === fieldCursor),
|
||||
);
|
||||
}
|
||||
/** Start opens the start menu and Select uses the registered item, while
|
||||
* the player stands still (StartMenuScript and SelectMenuScript). */
|
||||
function handleFieldInput(button: Button): boolean {
|
||||
const world = runtime.world;
|
||||
if (!world || world.battle) return false;
|
||||
// Start opens the start menu; Select, standing in for a registered
|
||||
// item, opens the Key Items shortcut.
|
||||
if (button === "start" && !runtime.fieldMenuOpen && !world.busy) {
|
||||
runtime.openStartMenu();
|
||||
return true;
|
||||
}
|
||||
if (button === "select" && !world.busy) {
|
||||
runtime.fieldMenuOpen = !runtime.fieldMenuOpen;
|
||||
fieldCursor = 0;
|
||||
return true;
|
||||
}
|
||||
if (!runtime.fieldMenuOpen) return false;
|
||||
if (button === "b") runtime.fieldMenuOpen = false;
|
||||
else if (button === "a") fieldButtons()[fieldCursor]?.click();
|
||||
else if (["up", "down", "left", "right"].includes(button)) {
|
||||
const length = fieldButtons().length;
|
||||
fieldCursor =
|
||||
(fieldCursor + (button === "up" || button === "left" ? -1 : 1) + length) %
|
||||
length;
|
||||
}
|
||||
if (!world || world.battle || world.busy) return false;
|
||||
if (button === "start") runtime.openStartMenu();
|
||||
else if (button === "select") runtime.useSelect();
|
||||
else return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
Reference in new issue
Block a user