This commit is contained in:
Bertie690 2025-07-22 15:18:19 -04:00
parent b1c279b1f0
commit e523edab13

View File

@ -370,7 +370,10 @@ export class PartyUiHandler extends MessageUiHandler {
this.showPartyText(); this.showPartyText();
this.populatePartySlots(); this.populatePartySlots();
this.partyDiscardModeButton.toggleIcon(this.partyUiMode); // If we are currently transferring items, set the icon to its proper state and reveal the button.
if (this.isItemManageMode()) {
this.partyDiscardModeButton.toggleIcon(this.partyUiMode as PartyUiMode.MODIFIER_TRANSFER | PartyUiMode.DISCARD);
}
this.setCursor(0); this.setCursor(0);
return true; return true;
@ -664,20 +667,20 @@ export class PartyUiHandler extends MessageUiHandler {
const itemModifiers = this.getTransferrableItemsFromPokemon(pokemon); const itemModifiers = this.getTransferrableItemsFromPokemon(pokemon);
let success = true;
if (this.optionsCursor === itemModifiers.length) { if (this.optionsCursor === itemModifiers.length) {
// Discard all currently held items, erroring if any cannot be discarded
let success = true;
for (let i = 0; i < itemModifiers.length; i++) { for (let i = 0; i < itemModifiers.length; i++) {
globalScene.tryDiscardHeldItemModifier(itemModifiers[i], this.transferQuantities[i]); success &&= globalScene.tryDiscardHeldItemModifier(itemModifiers[i], this.transferQuantities[i]);
} }
success = this.getTransferrableItemsFromPokemon(pokemon).length === 0; return success;
} else {
success = globalScene.tryDiscardHeldItemModifier(
itemModifiers[this.optionsCursor],
this.transferQuantities[this.optionsCursor],
);
} }
return success; // Discard the currently selected item
return globalScene.tryDiscardHeldItemModifier(
itemModifiers[this.optionsCursor],
this.transferQuantities[this.optionsCursor],
);
} }
private moveOptionCursor(button: Button.UP | Button.DOWN): boolean { private moveOptionCursor(button: Button.UP | Button.DOWN): boolean {
@ -1000,12 +1003,14 @@ export class PartyUiHandler extends MessageUiHandler {
break; break;
default: default:
ui.playError(); ui.playError();
break; return false;
} }
this.partyDiscardModeButton.toggleIcon(this.partyUiMode); this.partyDiscardModeButton.toggleIcon(this.partyUiMode);
this.showPartyText(); this.showPartyText();
ui.playSelect(); ui.playSelect();
return true;
} }
// Pressing return button // Pressing return button
if (this.cursor === 6) { if (this.cursor === 6) {
if (!this.allowCancel()) { if (!this.allowCancel()) {
@ -1054,6 +1059,9 @@ export class PartyUiHandler extends MessageUiHandler {
let success = false; let success = false;
switch (button) { switch (button) {
// Item manage mode adds an extra 8th "toggle mode" button to the UI, located *below* both active party members.
// The following logic serves to ensure its menu behaviour matches its in-game position,
// being selected when scrolling up from the first inactive party member or down from the last active one.
case Button.UP: case Button.UP:
if (this.isItemManageMode()) { if (this.isItemManageMode()) {
if (this.cursor === 1) { if (this.cursor === 1) {
@ -1103,11 +1111,12 @@ export class PartyUiHandler extends MessageUiHandler {
} }
break; break;
case Button.RIGHT: case Button.RIGHT:
// Scrolling right from item transfer button or with no backup party members goes to cancel
if (this.cursor === 7 || slotCount <= battlerCount) { if (this.cursor === 7 || slotCount <= battlerCount) {
success = this.setCursor(6); success = this.setCursor(6);
break; break;
} }
if (slotCount > battlerCount && this.cursor < battlerCount) { if (this.cursor < battlerCount) {
success = this.setCursor(this.lastRightPokemonCursor || battlerCount); success = this.setCursor(this.lastRightPokemonCursor || battlerCount);
break; break;
} }
@ -2103,8 +2112,7 @@ class PartyCancelButton extends Phaser.GameObjects.Container {
} }
class PartyDiscardModeButton extends Phaser.GameObjects.Container { class PartyDiscardModeButton extends Phaser.GameObjects.Container {
private selected: boolean; private selected = false;
private transferIcon: Phaser.GameObjects.Sprite; private transferIcon: Phaser.GameObjects.Sprite;
private discardIcon: Phaser.GameObjects.Sprite; private discardIcon: Phaser.GameObjects.Sprite;
private partyDiscardPb: Phaser.GameObjects.Sprite; private partyDiscardPb: Phaser.GameObjects.Sprite;
@ -2154,7 +2162,14 @@ class PartyDiscardModeButton extends Phaser.GameObjects.Container {
this.partyDiscardPb.setFrame("party_pb"); this.partyDiscardPb.setFrame("party_pb");
} }
toggleIcon(partyMode: number) { /**
* If the current mode deals with transferring items, toggle the discard items button's name and assets.
* @param partyMode - The current {@linkcode PartyUiMode}
* @remarks
* This will also reveal the button if it is currently hidden.
*/
public toggleIcon(partyMode: PartyUiMode.MODIFIER_TRANSFER | PartyUiMode.DISCARD): void {
this.setActive(true).setVisible(true);
switch (partyMode) { switch (partyMode) {
case PartyUiMode.MODIFIER_TRANSFER: case PartyUiMode.MODIFIER_TRANSFER:
this.transferIcon.setVisible(true); this.transferIcon.setVisible(true);
@ -2180,12 +2195,11 @@ class PartyDiscardModeButton extends Phaser.GameObjects.Container {
); );
this.discardIcon.displayWidth = this.textBox.text.length * 9 + 3; this.discardIcon.displayWidth = this.textBox.text.length * 9 + 3;
break; break;
default:
return;
} }
} }
clear() { clear() {
this.setActive(false).setVisible(false);
this.transferIcon.setVisible(false); this.transferIcon.setVisible(false);
this.discardIcon.setVisible(false); this.discardIcon.setVisible(false);
this.textBox.setVisible(false); this.textBox.setVisible(false);