Add WiP move attributes system

This commit is contained in:
Flashfyre committed 2023-04-03 23:38:31 -04:00
1 parent 1cf81869d0
commit c9c4e82f7f
7 files changed
+760 -576

No files matched your search

+1 -1
View File
@@ -342,7 +342,7 @@ export function loadMoveAnimAssets(scene: BattleScene, moveIds: Moves[], startLo
scene.loadImage(bg, 'battle_anims');
for (let s of sounds)
scene.loadSe(s, 'battle_anims', s);
this.scene.load.once(Phaser.Loader.Events.COMPLETE, () => resolve());
scene.load.once(Phaser.Loader.Events.COMPLETE, () => resolve());
if (startLoad && !scene.load.isLoading())
scene.load.start();
});
+31 -1
View File
@@ -10,6 +10,7 @@ import PartyUiHandler from "./ui/party-ui-handler";
import { doPokeballBounceAnim, getPokeballAtlasKey, getPokeballCatchMultiplier, getPokeballTintColor as getPokeballTintColor, PokeballType } from "./pokeball";
import { pokemonLevelMoves } from "./pokemon-level-moves";
import { MoveAnim, loadMoveAnimAssets } from "./battle-anims";
import { StatusEffect } from "./status-effect";
export class BattlePhase {
protected scene: BattleScene;
@@ -246,6 +247,7 @@ export class SummonPhase extends BattlePhase {
onComplete: () => {
playerPokemon.cry();
playerPokemon.getSprite().clearTint();
playerPokemon.resetSummonData();
this.scene.time.delayedCall(1000, () => this.end());
}
});
@@ -337,6 +339,9 @@ export class CommandPhase extends BattlePhase {
this.scene.ui.setMode(Mode.COMMAND);
this.scene.currentBattle.addParticipant(this.scene.getPlayerPokemon());
this.scene.getPlayerPokemon().resetTurnData();
this.scene.getEnemyPokemon().resetTurnData();
}
handleCommand(command: Command, cursor: integer): boolean{
@@ -441,6 +446,7 @@ abstract class MovePhase extends BattlePhase {
console.log(this.pokemon.moveset);
this.scene.ui.showText(`${this.pokemon.name} used\n${this.move.getName()}!`, null, () => {
this.move.ppUsed++;
if (this.move.getMove().category !== MoveCategory.STATUS) {
if (this.hitCheck())
this.scene.unshiftPhase(this.getEffectPhase());
@@ -507,8 +513,14 @@ abstract class MoveEffectPhase extends PokemonPhase {
new MoveAnim(this.move.getMove().id as Moves, user, target).play(this.scene, () =>{
this.getTargetPokemon().apply(this.getUserPokemon(), this.move, () => this.end());
if (this.getTargetPokemon().hp <= 0)
if (this.getUserPokemon().hp <= 0) {
this.scene.pushPhase(new FaintPhase(this.scene, this.player));
this.getTargetPokemon().resetBattleSummonData();
}
if (this.getTargetPokemon().hp <= 0) {
this.scene.pushPhase(new FaintPhase(this.scene, !this.player));
this.getUserPokemon().resetBattleSummonData();
}
});
}
@@ -549,6 +561,24 @@ export class EnemyMoveEffectPhase extends MoveEffectPhase {
}
}
export class ObtainStatusEffectPhase extends PokemonPhase {
private statusEffect: StatusEffect;
constructor(scene: BattleScene, player: boolean, statusEffect: StatusEffect) {
super(scene, player);
}
start() {
const pokemon = this.getPokemon();
if (pokemon.status === StatusEffect.NONE) {
pokemon.status = this.statusEffect;
// Show message and animation
this.end();
} else
this.end();
}
}
export class MessagePhase extends BattlePhase {
private text: string;
private prompt: boolean;
+658 -566
View File
File diff suppressed because it is too large. Load diff
+35
View File
@@ -13,6 +13,7 @@ import { PokemonBaseStatModifier as PokemonBaseStatBoosterModifier, ShinyRateBoo
import { PokeballType } from './pokeball';
import { Gender } from './gender';
import { Anim, initAnim, loadMoveAnimAssets, moveAnims } from './battle-anims';
import { StatusEffect } from './status-effect';
export default abstract class Pokemon extends Phaser.GameObjects.Container {
public id: integer;
@@ -29,8 +30,13 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container {
public stats: integer[];
public ivs: integer[];
public moveset: PokemonMove[];
public status: StatusEffect;
public winCount: integer;
public summonData: PokemonSummonData;
public battleSummonData: PokemonBattleSummonData;
public turnData: PokemonTurnData;
private shinySparkle: Phaser.GameObjects.Sprite;
constructor(scene: BattleScene, x: number, y: number, species: PokemonSpecies, level: integer, dataSource?: Pokemon) {
@@ -52,6 +58,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container {
this.stats = dataSource.stats;
this.ivs = dataSource.ivs;
this.moveset = dataSource.moveset;
this.status = dataSource.status;
this.winCount = dataSource.winCount;
} else {
this.generateAndPopulateMoveset();
@@ -96,6 +103,8 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container {
/*else
this.shiny = Utils.randInt(16) === 0;*/
this.status = StatusEffect.NONE;
this.winCount = 0;
}
@@ -476,6 +485,19 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container {
});
}
resetSummonData() {
this.summonData = new PokemonSummonData();
this.resetBattleSummonData();
}
resetBattleSummonData() {
this.battleSummonData = new PokemonBattleSummonData();
}
resetTurnData() {
this.turnData = new PokemonTurnData();
}
getExpValue(victor: Pokemon): integer {
return ((this.species.baseExp * this.level) / 5) * ((Math.round(Math.sqrt(2 * this.level + 10)) * Math.pow(2 * this.level + 10, 2)) / (Math.round(Math.sqrt(this.level + victor.level + 10)) * Math.pow(this.level + victor.level + 10, 2))) + 1;
}
@@ -639,6 +661,19 @@ export class EnemyPokemon extends Pokemon {
}
}
export class PokemonSummonData {
public confusionTurns: integer;
}
export class PokemonBattleSummonData {
public infatuated: boolean;
}
export class PokemonTurnData {
public flinched: boolean;
public hitsLeft: integer;
}
export enum AiType {
RANDOM,
SMART_RANDOM,
+18
View File
@@ -0,0 +1,18 @@
export enum StatusEffect {
NONE,
POISON,
TOXIC,
PARALYSIS,
SLEEP,
FREEZE,
BURN
}
export class Status {
public statusType: StatusEffect;
public turnCount: integer;
constructor(statusType: StatusEffect) {
this.statusType = statusType;
}
}
+14 -5
View File
@@ -92,13 +92,22 @@ export default class FightUiHandler extends UiHandler {
ui.add(this.cursorObj);
}
const pokemonMove = (this.scene as BattleScene).getPlayerPokemon().moveset[cursor];
this.typeIcon.setTexture('types', Type[pokemonMove.getMove().type].toLowerCase());
const moveset = (this.scene as BattleScene).getPlayerPokemon().moveset;
const maxPP = pokemonMove.getMove().pp + pokemonMove.ppUp;
const pp = maxPP - pokemonMove.ppUsed;
const hasMove = cursor < moveset.length;
this.ppText.setText(`${Utils.padInt(pp, 2, ' ')}/${Utils.padInt(maxPP, 2, ' ')}`);
if (hasMove) {
const pokemonMove = moveset[cursor];
this.typeIcon.setTexture('types', Type[pokemonMove.getMove().type].toLowerCase());
const maxPP = pokemonMove.getMove().pp + pokemonMove.ppUp;
const pp = maxPP - pokemonMove.ppUsed;
this.ppText.setText(`${Utils.padInt(pp, 2, ' ')}/${Utils.padInt(maxPP, 2, ' ')}`);
}
this.typeIcon.setVisible(hasMove);
this.ppText.setVisible(hasMove);
this.cursorObj.setPosition(13 + (cursor % 2 === 1 ? 100 : 0), -31 + (cursor >= 2 ? 15 : 0));