From 987697e6c7e9fe591d697f6c44e21b5fdc47351f Mon Sep 17 00:00:00 2001 From: Flashfyre Date: Sat, 1 Apr 2023 20:06:44 -0400 Subject: [PATCH] Add gender indicator --- README.md | 2 +- public/images/ui/boolean0.png | Bin 3034 -> 0 bytes public/images/ui/pbinfo_gender_f.png | Bin 2839 -> 0 bytes public/images/ui/pbinfo_gender_m.png | Bin 2833 -> 0 bytes src/battle-info.ts | 61 ++++++++++++--------------- src/battle-phase.ts | 15 ++----- src/battle-scene.ts | 1 + src/gender.ts | 25 +++++++++++ src/pokemon-species.ts | 4 +- src/pokemon-stat.ts | 2 +- src/pokemon.ts | 13 +++--- src/text.ts | 13 +++++- src/ui/switch-check-ui-handler.ts | 3 +- 13 files changed, 82 insertions(+), 57 deletions(-) delete mode 100644 public/images/ui/boolean0.png delete mode 100644 public/images/ui/pbinfo_gender_f.png delete mode 100644 public/images/ui/pbinfo_gender_m.png create mode 100644 src/gender.ts diff --git a/README.md b/README.md index bcca64fb720..0cc9c752c8b 100644 --- a/README.md +++ b/README.md @@ -25,13 +25,13 @@ - Battle info - Owned icon - Status effect indicator - - Gender icon - Evolution - Evolution screen - Background (ripped video?) - Particles - Modifiers - PP Up + - Ether/elixir - Type enhancers - Evolution items - Various mainline game items for various enhancements diff --git a/public/images/ui/boolean0.png b/public/images/ui/boolean0.png deleted file mode 100644 index d3d3686979987e84a90f57e4c484b0689471b06f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3034 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 diff --git a/public/images/ui/pbinfo_gender_m.png b/public/images/ui/pbinfo_gender_m.png deleted file mode 100644 index ae34b03fe18066aa31bd1d1b01332170d3e26345..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2833 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 diff --git a/src/battle-info.ts b/src/battle-info.ts index 9f56bde1154..3014092e892 100644 --- a/src/battle-info.ts +++ b/src/battle-info.ts @@ -1,6 +1,8 @@ import { default as Pokemon } from './pokemon'; import { getLevelTotalExp, getLevelRelExp } from './exp'; import * as Utils from './utils'; +import { addTextObject, TextStyle } from './text'; +import { getGenderSymbol, getGenderColor } from './gender'; export default class BattleInfo extends Phaser.GameObjects.Container { private player: boolean; @@ -13,6 +15,7 @@ export default class BattleInfo extends Phaser.GameObjects.Container { private lastName: string; private nameText: Phaser.GameObjects.Text; + private genderText: Phaser.GameObjects.Text; private levelContainer: Phaser.GameObjects.Container; private hpBar: Phaser.GameObjects.Image; private levelNumbersContainer: Phaser.GameObjects.Container; @@ -37,41 +40,31 @@ export default class BattleInfo extends Phaser.GameObjects.Container { box.setOrigin(1, 0.5); this.add(box); - const nameText = this.scene.add.text(player ? -115 : -124, player ? -15.2 : -11.2, '', { - color: '#404040', - font: '72px emerald' - }); - nameText.setShadow(4, 4, '#ded6b5'); - nameText.setOrigin(0, 0); - nameText.setScale(0.1666666667); - this.add(nameText); + this.nameText = addTextObject(this.scene, player ? -115 : -124, player ? -15.2 : -11.2, '', TextStyle.BATTLE_INFO); + this.nameText.setOrigin(0, 0); + this.add(this.nameText); - this.nameText = nameText; + this.genderText = addTextObject(this.scene, 0, 0, '', TextStyle.BATTLE_INFO); + this.genderText.setOrigin(0, 0); + this.genderText.setPositionRelative(this.nameText, 0, 2); + this.add(this.genderText); - const levelContainer = this.scene.add.container(player ? -41 : -50, player ? -10 : -5); - this.add(levelContainer); - - this.levelContainer = levelContainer; + this.levelContainer = this.scene.add.container(player ? -41 : -50, player ? -10 : -5); + this.add(this.levelContainer); const levelOverlay = this.scene.add.image(0, 0, 'overlay_lv'); - levelContainer.add(levelOverlay); + this.levelContainer.add(levelOverlay); - const hpBar = this.scene.add.image(player ? -61 : -71, player ? -1 : 4.5, 'overlay_hp'); - hpBar.setOrigin(0); - this.add(hpBar); + this.hpBar = this.scene.add.image(player ? -61 : -71, player ? -1 : 4.5, 'overlay_hp'); + this.hpBar.setOrigin(0); + this.add(this.hpBar); - this.hpBar = hpBar; - - const levelNumbersContainer = this.scene.add.container(9.5, 0); - levelContainer.add(levelNumbersContainer); - - this.levelNumbersContainer = levelNumbersContainer; + this.levelNumbersContainer = this.scene.add.container(9.5, 0); + this.levelContainer.add(this.levelNumbersContainer); if (this.player) { - const hpNumbersContainer = this.scene.add.container(-15, 10); - this.add(hpNumbersContainer); - - this.hpNumbersContainer = hpNumbersContainer; + this.hpNumbersContainer = this.scene.add.container(-15, 10); + this.add(this.hpNumbersContainer); const expBar = this.scene.add.image(-98, 18, 'overlay_exp'); expBar.setOrigin(0); @@ -84,7 +77,14 @@ export default class BattleInfo extends Phaser.GameObjects.Container { initInfo(pokemon: Pokemon) { this.nameText.setText(pokemon.name); - this.lastName = pokemon.species.name; + + const nameSizeTest = addTextObject(this.scene, 0, 0, pokemon.name, TextStyle.BATTLE_INFO); + const nameTextWidth = nameSizeTest.displayWidth; + nameSizeTest.destroy(); + + this.genderText.setText(getGenderSymbol(pokemon.gender)); + this.genderText.setColor(getGenderColor(pokemon.gender)); + this.genderText.setPositionRelative(this.nameText, nameTextWidth, 0); this.hpBar.setScale(pokemon.getHpRatio(), 1); if (this.player) @@ -107,11 +107,6 @@ export default class BattleInfo extends Phaser.GameObjects.Container { if (!this.scene) return; - if (this.lastName !== pokemon.species.name) { - this.nameText.setText(pokemon.name); - this.lastName = pokemon.species.name; - } - const updatePokemonHp = () => { const duration = Utils.clampInt(Math.abs((this.lastHp) - pokemon.hp) * 5, 250, 5000); this.scene.tweens.add({ diff --git a/src/battle-phase.ts b/src/battle-phase.ts index 31670d409ea..1a5154609cd 100644 --- a/src/battle-phase.ts +++ b/src/battle-phase.ts @@ -247,10 +247,7 @@ export class SummonPhase extends BattlePhase { onComplete: () => { playerPokemon.cry(); playerPokemon.getSprite().clearTint(); - this.scene.time.delayedCall(1000, () => { - this.scene.currentBattle.addParticipant(playerPokemon); - this.end(); - }); + this.scene.time.delayedCall(1000, () => this.end()); } }); } @@ -326,13 +323,7 @@ export class CheckSwitchPhase extends BattlePhase { super.start(); this.scene.ui.showText('Will you switch\nPOKéMON?', null, () => { - this.scene.ui.setMode(Mode.SWITCH_CHECK, () => { - console.log('handler', this.scene.ui.getHandler()); - console.log(this.scene.ui.getHandler().getCursor()) - if (this.scene.ui.getHandler().getCursor()) - this.scene.currentBattle.addParticipant(this.scene.getPlayerPokemon()); - this.end(); - }); + this.scene.ui.setMode(Mode.SWITCH_CHECK, () => this.end()); }); } } @@ -348,6 +339,8 @@ export class CommandPhase extends BattlePhase { //interp(this.scene); this.scene.ui.setMode(Mode.COMMAND); + console.log('add participant', this.scene.getPlayerPokemon().name) + this.scene.currentBattle.addParticipant(this.scene.getPlayerPokemon()); } handleCommand(command: Command, cursor: integer): boolean{ diff --git a/src/battle-scene.ts b/src/battle-scene.ts index f0efa7566c5..b23de5767b0 100644 --- a/src/battle-scene.ts +++ b/src/battle-scene.ts @@ -103,6 +103,7 @@ export default class BattleScene extends Phaser.Scene { this.loadImage('pbinfo_enemy', 'ui'); this.loadImage('overlay_lv', 'ui'); this.loadAtlas('numbers', 'ui'); + this.loadAtlas('gender', 'ui'); this.loadAtlas('overlay_hp', 'ui'); this.loadImage('overlay_exp', 'ui'); this.loadImage('level_up_stats', 'ui'); diff --git a/src/gender.ts b/src/gender.ts new file mode 100644 index 00000000000..4d5ba00a9bd --- /dev/null +++ b/src/gender.ts @@ -0,0 +1,25 @@ +export enum Gender { + GENDERLESS = -1, + FEMALE, + MALE +} + +export function getGenderSymbol(gender: Gender) { + switch (gender) { + case Gender.MALE: + return '♂'; + case Gender.FEMALE: + return '♀'; + } + return ''; +} + +export function getGenderColor(gender: Gender) { + switch (gender) { + case Gender.MALE: + return '#40c8f8'; + case Gender.FEMALE: + return '#f89890'; + } + return '#ffffff'; +} \ No newline at end of file diff --git a/src/pokemon-species.ts b/src/pokemon-species.ts index 141d059f15d..35f62b9d20d 100644 --- a/src/pokemon-species.ts +++ b/src/pokemon-species.ts @@ -18,8 +18,8 @@ export default class PokemonSpecies { public legendary: boolean; public mythical: boolean; public species: string; - public type1: integer; - public type2: integer; + public type1: Type; + public type2: Type; public height: number; public weight: number; public ability1: string; diff --git a/src/pokemon-stat.ts b/src/pokemon-stat.ts index c0023b91d33..8f74fb44439 100644 --- a/src/pokemon-stat.ts +++ b/src/pokemon-stat.ts @@ -10,7 +10,7 @@ export enum Stat { }; export function getStatName(stat: Stat) { - let ret; + let ret: string; switch (stat) { case Stat.HP: ret = 'Max. HP'; diff --git a/src/pokemon.ts b/src/pokemon.ts index 84735f82299..f949a1cc83a 100644 --- a/src/pokemon.ts +++ b/src/pokemon.ts @@ -9,8 +9,9 @@ import * as Utils from './utils'; import { getTypeDamageMultiplier } from './type'; import { getLevelTotalExp } from './exp'; import { Stat } from './pokemon-stat'; -import { ExpShareModifier, PokemonBaseStatModifier as PokemonBaseStatBoosterModifier, ShinyRateBoosterModifier } from './modifier'; +import { PokemonBaseStatModifier as PokemonBaseStatBoosterModifier, ShinyRateBoosterModifier } from './modifier'; import { PokeballType } from './pokeball'; +import { Gender } from './gender'; export default abstract class Pokemon extends Phaser.GameObjects.Container { public id: integer; @@ -22,7 +23,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { public level: integer; public exp: integer; public levelExp: integer; - public gender: integer; + public gender: Gender; public hp: integer; public stats: integer[]; public ivs: integer[]; @@ -67,13 +68,13 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { //this.id = parseInt(Utils.decToBin(this.ivs[Stat.HP]) + Utils.decToBin(this.ivs[Stat.ATK]) + Utils.decToBin(this.ivs[Stat.DEF]) + Utils.decToBin(this.ivs[Stat.SPATK]) + Utils.decToBin(this.ivs[Stat.SPDEF]) + Utils.decToBin(this.ivs[Stat.SPD]) + this.id.toString(2).slice(30)); if (this.species.malePercent === null) - this.gender = -1; + this.gender = Gender.GENDERLESS; else { - const genderChance = (this.id % 256) / 32; + const genderChance = (this.id % 256) * 0.390625; if (genderChance < this.species.malePercent) - this.gender = 0; + this.gender = Gender.MALE; else - this.gender = 1; + this.gender = Gender.FEMALE; } const rand1 = Utils.binToDec(Utils.decToBin(this.id).substring(0, 16)); diff --git a/src/text.ts b/src/text.ts index 2d8620c5b2e..b6f422f5d34 100644 --- a/src/text.ts +++ b/src/text.ts @@ -1,12 +1,14 @@ export enum TextStyle { MESSAGE, WINDOW, + BATTLE_INFO, PARTY }; export function addTextObject(scene: Phaser.Scene, x: number, y: number, content: string, style: TextStyle, extraStyleOptions?: Phaser.Types.GameObjects.Text.TextStyle) { let styleOptions; let shadowColor; + let shadowSize = 6; switch (style) { case TextStyle.WINDOW: @@ -31,6 +33,15 @@ export function addTextObject(scene: Phaser.Scene, x: number, y: number, content }; shadowColor = '#6b5a73'; break; + case TextStyle.BATTLE_INFO: + styleOptions = { + fontFamily: 'emerald', + fontSize: '72px', + color: '#404040' + }; + shadowColor = '#ded6b5'; + shadowSize = 4; + break; case TextStyle.PARTY: styleOptions = { fontFamily: 'pkmnems', @@ -49,7 +60,7 @@ export function addTextObject(scene: Phaser.Scene, x: number, y: number, content const ret = scene.add.text(x, y, content, styleOptions); ret.setScale(0.1666666667); - ret.setShadow(6, 6, shadowColor); + ret.setShadow(shadowSize, shadowSize, shadowColor); ret.setLineSpacing(5); return ret; diff --git a/src/ui/switch-check-ui-handler.ts b/src/ui/switch-check-ui-handler.ts index 7bee6972831..335fb23a5f0 100644 --- a/src/ui/switch-check-ui-handler.ts +++ b/src/ui/switch-check-ui-handler.ts @@ -61,7 +61,7 @@ export default class SwitchCheckUiHandler extends AwaitableUiHandler { if (keyCode === keyCodes.Z || keyCode === keyCodes.X) { success = true; if (keyCode === keyCodes.X) - this.cursor = 1; + this.setCursor(1); if (this.onActionInput) { if (!this.cursor) this.scene.unshiftPhase(new SwitchPhase(this.scene, false, true)); @@ -88,7 +88,6 @@ export default class SwitchCheckUiHandler extends AwaitableUiHandler { } setCursor(cursor: integer): boolean { - const ui = this.getUi(); const ret = super.setCursor(cursor); if (!this.cursorObj) {