Add move accuracy checks

This commit is contained in:
Flashfyre 2023-03-31 22:31:20 -04:00
parent 124f69f1ec
commit f8283a810a
3 changed files with 590 additions and 569 deletions

View File

@ -1,7 +1,7 @@
import BattleScene from "./battle-scene"; import BattleScene from "./battle-scene";
import { default as Pokemon, PlayerPokemon, EnemyPokemon, PokemonMove } from "./pokemon"; import { default as Pokemon, PlayerPokemon, EnemyPokemon, PokemonMove } from "./pokemon";
import * as Utils from './utils'; import * as Utils from './utils';
import { allMoves, Moves as Move, MOVE_CATEGORY } from "./move"; import { allMoves, Moves as Move, MoveCategory } from "./move";
import { Mode } from './ui/ui'; import { Mode } from './ui/ui';
import { Command } from "./ui/command-ui-handler"; import { Command } from "./ui/command-ui-handler";
import { interp } from "./temp_interpreter"; import { interp } from "./temp_interpreter";
@ -450,7 +450,7 @@ abstract class MovePhase extends BattlePhase {
console.log(this.pokemon.moveset); console.log(this.pokemon.moveset);
this.scene.ui.showText(`${this.pokemon.name} used\n${this.move.getName()}!`, null, () => this.end(), 500); this.scene.ui.showText(`${this.pokemon.name} used\n${this.move.getName()}!`, null, () => this.end(), 500);
this.move.ppUsed++; this.move.ppUsed++;
if (this.move.getMove().category !== MOVE_CATEGORY.STATUS) if (this.move.getMove().category !== MoveCategory.STATUS)
this.scene.unshiftPhase(this.getEffectPhase()); this.scene.unshiftPhase(this.getEffectPhase());
} }
} }
@ -487,12 +487,33 @@ abstract class MoveEffectPhase extends PokemonPhase {
start() { start() {
super.start(); super.start();
this.getTargetPokemon().apply(this.getUserPokemon(), this.move, () => this.end()); if (this.hitCheck()) {
if (this.getTargetPokemon().hp <= 0) { this.getTargetPokemon().apply(this.getUserPokemon(), this.move, () => this.end());
this.scene.pushPhase(new FaintPhase(this.scene, !this.player)); if (this.getTargetPokemon().hp <= 0) {
this.scene.pushPhase(new FaintPhase(this.scene, !this.player));
}
} else {
this.scene.unshiftPhase(new MessagePhase(this.scene, `${!this.player ? 'Foe ' : ''}${this.getPokemon().name}'s\nattack missed!`));
this.end();
} }
} }
hitCheck(): boolean {
if (this.move.getMove().category !== MoveCategory.STATUS) {
const userAccuracyLevel = 0;
const targetEvasionLevel = 0;
const rand = Utils.randInt(100, 1);
let accuracyMultiplier = 1;
if (userAccuracyLevel !== targetEvasionLevel) {
accuracyMultiplier = userAccuracyLevel > targetEvasionLevel
? (3 + Math.min(userAccuracyLevel - targetEvasionLevel, 6)) / 3
: 3 / (3 + Math.min(targetEvasionLevel - userAccuracyLevel, 6));
}
return rand <= this.move.getMove().accuracy * accuracyMultiplier;
}
return true;
}
abstract getUserPokemon(): Pokemon; abstract getUserPokemon(): Pokemon;
abstract getTargetPokemon(): Pokemon; abstract getTargetPokemon(): Pokemon;
@ -508,7 +529,7 @@ export class PlayerMoveEffectPhase extends MoveEffectPhase {
} }
getTargetPokemon(): Pokemon { getTargetPokemon(): Pokemon {
if (this.move.getMove().category === MOVE_CATEGORY.STATUS) if (this.move.getMove().category === MoveCategory.STATUS)
return this.getUserPokemon(); return this.getUserPokemon();
return this.scene.getEnemyPokemon(); return this.scene.getEnemyPokemon();
} }
@ -524,7 +545,7 @@ export class EnemyMoveEffectPhase extends MoveEffectPhase {
} }
getTargetPokemon(): Pokemon { getTargetPokemon(): Pokemon {
if (this.move.getMove().category === MOVE_CATEGORY.STATUS) if (this.move.getMove().category === MoveCategory.STATUS)
return this.getUserPokemon(); return this.getUserPokemon();
return this.scene.getPlayerPokemon(); return this.scene.getPlayerPokemon();
} }

File diff suppressed because it is too large Load Diff

View File

@ -2,7 +2,7 @@ import Phaser from 'phaser';
import BattleScene from './battle-scene'; import BattleScene from './battle-scene';
import BattleInfo, { PlayerBattleInfo, EnemyBattleInfo } from './battle-info'; import BattleInfo, { PlayerBattleInfo, EnemyBattleInfo } from './battle-info';
import { MessagePhase } from './battle-phase'; import { MessagePhase } from './battle-phase';
import { default as Move, allMoves, MOVE_CATEGORY as MoveCategory, Moves } from './move'; import { default as Move, allMoves, MoveCategory, Moves } from './move';
import { pokemonLevelMoves } from './pokemon-level-moves'; import { pokemonLevelMoves } from './pokemon-level-moves';
import { default as PokemonSpecies } from './pokemon-species'; import { default as PokemonSpecies } from './pokemon-species';
import * as Utils from './utils'; import * as Utils from './utils';
@ -608,7 +608,7 @@ export class EnemyPokemon extends Pokemon {
ret = newPokemon; ret = newPokemon;
} }
this.hp = 0; this.hp = 0;
return ret; return ret;
} }
} }