Damage-related fixes and changes
Apply damage numbers to all damage and heal; fix some damage-related bugs
This commit is contained in:
1 parent
716d8853a3
commit
1f6a6f4621
7 files changed
+103
-65
No files matched your search
@@ -1,5 +1,5 @@
|
||||
import { TextStyle, addTextObject } from "../ui/text";
|
||||
import Pokemon, { AttackMoveResult, HitResult } from "./pokemon";
|
||||
import Pokemon, { DamageResult, HitResult } from "./pokemon";
|
||||
import * as Utils from "../utils";
|
||||
import { BattlerIndex } from "../battle";
|
||||
|
||||
@@ -10,17 +10,21 @@ export default class DamageNumberHandler {
|
||||
this.damageNumbers = new Map();
|
||||
}
|
||||
|
||||
add(target: Pokemon, result: AttackMoveResult): void {
|
||||
add(target: Pokemon, amount: integer, result: DamageResult | HitResult.HEAL = HitResult.EFFECTIVE, critical: boolean = false): void {
|
||||
const scene = target.scene;
|
||||
|
||||
if (!scene.damageNumbersMode)
|
||||
return;
|
||||
|
||||
const battlerIndex = target.getBattlerIndex();
|
||||
const baseScale = target.getSpriteScale() / 6;
|
||||
const damageNumber = addTextObject(scene, target.x, -(scene.game.canvas.height / 6) + target.y - target.getSprite().height / 2, Utils.formatStat(result.damage, true), TextStyle.SUMMARY);
|
||||
const damageNumber = addTextObject(scene, target.x, -(scene.game.canvas.height / 6) + target.y - target.getSprite().height / 2, Utils.formatStat(amount, true), TextStyle.SUMMARY);
|
||||
damageNumber.setOrigin(0.5, 1);
|
||||
damageNumber.setScale(baseScale);
|
||||
|
||||
let [ textColor, shadowColor ] = [ null, null ];
|
||||
|
||||
switch (result.result) {
|
||||
switch (result) {
|
||||
case HitResult.SUPER_EFFECTIVE:
|
||||
[ textColor, shadowColor ] = [ '#f8d030', '#b8a038' ];
|
||||
break;
|
||||
@@ -30,6 +34,9 @@ export default class DamageNumberHandler {
|
||||
case HitResult.ONE_HIT_KO:
|
||||
[ textColor, shadowColor ] = [ '#a040a0', '#483850' ];
|
||||
break;
|
||||
case HitResult.HEAL:
|
||||
[ textColor, shadowColor ] = [ '#78c850', '#588040' ];
|
||||
break;
|
||||
default:
|
||||
[ textColor, shadowColor ] = [ '#ffffff', '#636363' ];
|
||||
break;
|
||||
@@ -38,7 +45,7 @@ export default class DamageNumberHandler {
|
||||
if (textColor)
|
||||
damageNumber.setColor(textColor);
|
||||
if (shadowColor) {
|
||||
if (result.critical) {
|
||||
if (critical) {
|
||||
damageNumber.setShadowOffset(0, 0);
|
||||
damageNumber.setStroke(shadowColor, 12);
|
||||
} else
|
||||
|
||||
@@ -1123,11 +1123,11 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container {
|
||||
this.scene.applyModifiers(EnemyDamageReducerModifier, false, damage);
|
||||
|
||||
if (damage) {
|
||||
this.scene.unshiftPhase(new DamagePhase(this.scene, this.getBattlerIndex(), result as DamageResult));
|
||||
damage.value = this.damage(damage.value);
|
||||
this.scene.unshiftPhase(new DamagePhase(this.scene, this.getBattlerIndex(), damage.value, result as DamageResult, isCritical));
|
||||
if (isCritical)
|
||||
this.scene.queueMessage('A critical hit!');
|
||||
this.scene.setPhaseQueueSplice();
|
||||
damage.value = this.damage(damage.value);
|
||||
if (source.isPlayer()) {
|
||||
this.scene.validateAchvs(DamageAchv, damage);
|
||||
if (damage.value > this.scene.gameData.gameStats.highestDamage)
|
||||
@@ -1137,8 +1137,6 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container {
|
||||
this.battleData.hitCount++;
|
||||
const attackResult = { move: move.id, result: result as DamageResult, damage: damage.value, critical: isCritical, sourceId: source.id };
|
||||
this.turnData.attacksReceived.unshift(attackResult);
|
||||
if (damage.value && this.scene.damageNumbersMode)
|
||||
this.scene.damageNumberHandler.add(this, attackResult);
|
||||
if (source.isPlayer() && !this.isPlayer())
|
||||
this.scene.applyModifiers(DamageMoneyRewardModifier, true, source, damage)
|
||||
}
|
||||
@@ -2344,7 +2342,7 @@ export class EnemyPokemon extends Pokemon {
|
||||
const hpThreshold = segmentSize * s;
|
||||
const roundedHpThreshold = Math.round(hpThreshold);
|
||||
if (this.hp >= roundedHpThreshold) {
|
||||
if (this.hp - damage < roundedHpThreshold) {
|
||||
if (this.hp - damage <= roundedHpThreshold) {
|
||||
const hpRemainder = this.hp - roundedHpThreshold;
|
||||
let segmentsBypassed = 0;
|
||||
while (this.canBypassBossSegments(segmentsBypassed + 1) && (damage - hpRemainder) >= Math.round(segmentSize * Math.pow(2, segmentsBypassed + 1))) {
|
||||
@@ -2536,6 +2534,7 @@ export enum HitResult {
|
||||
ONE_HIT_KO,
|
||||
NO_EFFECT,
|
||||
STATUS,
|
||||
HEAL,
|
||||
FAIL,
|
||||
MISS,
|
||||
OTHER
|
||||
|
||||
Reference in new issue
Block a user