Restructure game over logic to save before clear
This commit is contained in:
parent
acb61d6fb7
commit
9cfc09f673
|
@ -1978,7 +1978,7 @@
|
|||
},
|
||||
{
|
||||
"frameIndex": 0,
|
||||
"resourceName": "PRAS- Sketch and Lick",
|
||||
"resourceName": "PRAS- Sketch + Lick",
|
||||
"bgX": 0,
|
||||
"bgY": 0,
|
||||
"opacity": 0,
|
||||
|
|
|
@ -759,6 +759,8 @@ export default class BattleScene extends SceneBase {
|
|||
|
||||
this.newArena(Overrides.STARTING_BIOME_OVERRIDE || Biome.TOWN);
|
||||
|
||||
this.field.setVisible(true);
|
||||
|
||||
this.arenaBgTransition.setPosition(0, 0);
|
||||
this.arenaPlayer.setPosition(300, 0);
|
||||
this.arenaPlayerTransition.setPosition(0, 0);
|
||||
|
|
|
@ -3484,8 +3484,6 @@ export class GameOverModifierRewardPhase extends ModifierRewardPhase {
|
|||
return new Promise<void>(resolve => {
|
||||
const newModifier = this.modifierType.newModifier();
|
||||
this.scene.addModifier(newModifier).then(() => {
|
||||
this.scene.gameData.saveSystem().then(success => {
|
||||
if (success) {
|
||||
this.scene.playSound('level_up_fanfare');
|
||||
this.scene.ui.setMode(Mode.MESSAGE);
|
||||
this.scene.arenaBg.setVisible(false);
|
||||
|
@ -3495,9 +3493,6 @@ export class GameOverModifierRewardPhase extends ModifierRewardPhase {
|
|||
resolve();
|
||||
}, null, true, 1500);
|
||||
});
|
||||
} else
|
||||
this.scene.reset(true);
|
||||
});
|
||||
});
|
||||
})
|
||||
}
|
||||
|
@ -3516,8 +3511,6 @@ export class RibbonModifierRewardPhase extends ModifierRewardPhase {
|
|||
return new Promise<void>(resolve => {
|
||||
const newModifier = this.modifierType.newModifier();
|
||||
this.scene.addModifier(newModifier).then(() => {
|
||||
this.scene.gameData.saveSystem().then(success => {
|
||||
if (success) {
|
||||
this.scene.playSound('level_up_fanfare');
|
||||
this.scene.ui.setMode(Mode.MESSAGE);
|
||||
this.scene.arenaBg.setVisible(false);
|
||||
|
@ -3526,9 +3519,6 @@ export class RibbonModifierRewardPhase extends ModifierRewardPhase {
|
|||
resolve();
|
||||
}, null, true, 1500);
|
||||
});
|
||||
} else
|
||||
this.scene.reset(true);
|
||||
});
|
||||
});
|
||||
})
|
||||
}
|
||||
|
@ -3548,7 +3538,7 @@ export class GameOverPhase extends BattlePhase {
|
|||
super.start();
|
||||
|
||||
if (this.victory || !this.scene.enableRetries)
|
||||
this.handleClearSession();
|
||||
this.handleGameOver();
|
||||
else {
|
||||
this.scene.ui.showText(`Would you like to retry from the start of the battle?`, null, () => {
|
||||
this.scene.ui.setMode(Mode.CONFIRM, () => {
|
||||
|
@ -3573,18 +3563,16 @@ export class GameOverPhase extends BattlePhase {
|
|||
this.end();
|
||||
});
|
||||
});
|
||||
}, () => this.handleClearSession(), false, 0, 0, 1000);
|
||||
}, () => this.handleGameOver(), false, 0, 0, 1000);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
handleClearSession(): void {
|
||||
this.scene.gameData.tryClearSession(this.scene, this.scene.sessionSlotId).then((success: boolean | [boolean, boolean]) => {
|
||||
if (!success[0])
|
||||
return this.scene.reset(true);
|
||||
handleGameOver(): void {
|
||||
const doGameOver = (newClear: boolean) => {
|
||||
this.scene.time.delayedCall(1000, () => {
|
||||
let firstClear = false;
|
||||
if (this.victory && success[1]) {
|
||||
if (this.victory && newClear) {
|
||||
if (this.scene.gameMode.isClassic) {
|
||||
firstClear = this.scene.validateAchv(achvs.CLASSIC_VICTORY);
|
||||
this.scene.gameData.gameStats.sessionsWon++;
|
||||
|
@ -3595,29 +3583,37 @@ export class GameOverPhase extends BattlePhase {
|
|||
this.awardRibbon(pokemon, true);
|
||||
}
|
||||
}
|
||||
} else if (this.scene.gameMode.isDaily && success[1])
|
||||
} else if (this.scene.gameMode.isDaily && newClear)
|
||||
this.scene.gameData.gameStats.dailyRunSessionsWon++;
|
||||
}
|
||||
this.scene.gameData.saveSystem();
|
||||
const fadeDuration = this.victory ? 10000 : 5000;
|
||||
this.scene.fadeOutBgm(fadeDuration, true);
|
||||
const activeBattlers = this.scene.getField().filter(p => p?.isActive(true));
|
||||
activeBattlers.map(p => p.hideInfo());
|
||||
this.scene.ui.fadeOut(fadeDuration).then(() => {
|
||||
[ this.scene.field, ...activeBattlers ].map(a => a.setVisible(false));
|
||||
this.scene.setFieldScale(1, true);
|
||||
this.scene.clearPhaseQueue();
|
||||
this.scene.ui.clearText();
|
||||
if (newClear)
|
||||
this.handleUnlocks();
|
||||
if (this.victory && success[1]) {
|
||||
if (this.victory && newClear) {
|
||||
for (let species of this.firstRibbons)
|
||||
this.scene.unshiftPhase(new RibbonModifierRewardPhase(this.scene, modifierTypes.VOUCHER_PLUS, species));
|
||||
if (!firstClear)
|
||||
this.scene.unshiftPhase(new GameOverModifierRewardPhase(this.scene, modifierTypes.VOUCHER_PREMIUM));
|
||||
}
|
||||
this.scene.reset();
|
||||
this.scene.unshiftPhase(new TitlePhase(this.scene));
|
||||
this.scene.pushPhase(new PostGameOverPhase(this.scene));
|
||||
this.end();
|
||||
});
|
||||
});
|
||||
});
|
||||
};
|
||||
if (this.victory) {
|
||||
Utils.apiFetch(`savedata/newclear?slot=${this.scene.sessionSlotId}`, true)
|
||||
.then(response => response.json())
|
||||
.then(newClear => doGameOver(newClear));
|
||||
} else
|
||||
doGameOver(false);
|
||||
}
|
||||
|
||||
handleUnlocks(): void {
|
||||
|
@ -3653,8 +3649,6 @@ export class UnlockPhase extends Phase {
|
|||
start(): void {
|
||||
this.scene.time.delayedCall(2000, () => {
|
||||
this.scene.gameData.unlocks[this.unlockable] = true;
|
||||
this.scene.gameData.saveSystem().then(success => {
|
||||
if (success) {
|
||||
this.scene.playSound('level_up_fanfare');
|
||||
this.scene.ui.setMode(Mode.MESSAGE);
|
||||
this.scene.arenaBg.setVisible(false);
|
||||
|
@ -3664,8 +3658,27 @@ export class UnlockPhase extends Phase {
|
|||
this.end();
|
||||
}, null, true, 1500);
|
||||
});
|
||||
} else
|
||||
this.scene.reset(true);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
export class PostGameOverPhase extends Phase {
|
||||
constructor(scene: BattleScene) {
|
||||
super(scene);
|
||||
}
|
||||
|
||||
start() {
|
||||
super.start();
|
||||
|
||||
this.scene.gameData.saveSystem().then(success => {
|
||||
if (!success)
|
||||
return this.scene.reset(true);
|
||||
this.scene.gameData.tryClearSession(this.scene, this.scene.sessionSlotId).then((success: boolean | [boolean, boolean]) => {
|
||||
if (!success[0])
|
||||
return this.scene.reset(true);
|
||||
this.scene.reset();
|
||||
this.scene.unshiftPhase(new TitlePhase(this.scene));
|
||||
this.end();
|
||||
});
|
||||
});
|
||||
}
|
||||
|
|
|
@ -190,11 +190,14 @@ const systemShortKeys = {
|
|||
natureAttr: '$na',
|
||||
seenCount: '$s' ,
|
||||
caughtCount: '$c',
|
||||
hatchedCount: '$hc',
|
||||
ivs: '$i',
|
||||
moveset: '$m',
|
||||
eggMoves: '$em',
|
||||
candyCount: '$x',
|
||||
passive: '$p',
|
||||
friendship: '$f',
|
||||
abilityAttr: '$a',
|
||||
passiveAttr: '$pa',
|
||||
valueReduction: '$vr',
|
||||
classicWinCount: '$wc'
|
||||
};
|
||||
|
@ -454,6 +457,10 @@ export class GameData {
|
|||
}
|
||||
|
||||
private convertSystemDataStr(dataStr: string, shorten: boolean = false): string {
|
||||
if (!shorten) {
|
||||
// Account for past key oversight
|
||||
dataStr = dataStr.replace(/\$pAttr/g, '$pa');
|
||||
}
|
||||
const fromKeys = shorten ? Object.keys(systemShortKeys) : Object.values(systemShortKeys);
|
||||
const toKeys = shorten ? Object.values(systemShortKeys) : Object.keys(systemShortKeys);
|
||||
for (let k in fromKeys)
|
||||
|
|
Loading…
Reference in New Issue