Damage-related fixes and changes

Apply damage numbers to all damage and heal; fix some damage-related bugs
This commit is contained in:
Flashfyre committed 2024-03-01 09:35:36 -05:00
1 parent 716d8853a3
commit 1f6a6f4621
7 files changed
+103 -65

No files matched your search

+12 -5
View File
@@ -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
+4 -5
View File
@@ -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