|
import { describe, it, expect } from 'vitest'; |
|
import { BattleEngine } from './BattleEngine'; |
|
import type { PicletDefinition } from './types'; |
|
import { PicletType, AttackType } from './types'; |
|
|
|
describe('Debug Field Effects', () => { |
|
it('should debug field effect creation and damage calculation', () => { |
|
const fieldUser: PicletDefinition = { |
|
name: "Field User", |
|
description: "Creates field effects", |
|
tier: 'medium', |
|
primaryType: PicletType.BEAST, |
|
baseStats: { hp: 100, attack: 60, defense: 80, speed: 60 }, |
|
nature: "Calm", |
|
specialAbility: { name: "No Ability", description: "" }, |
|
movepool: [ |
|
{ |
|
name: "Contact Barrier", |
|
type: AttackType.SPACE, |
|
power: 0, |
|
accuracy: 100, |
|
pp: 10, |
|
priority: 0, |
|
flags: [], |
|
effects: [ |
|
{ |
|
type: 'fieldEffect', |
|
effect: 'reflect', |
|
target: 'playerSide', |
|
stackable: false |
|
} |
|
] |
|
} |
|
] |
|
}; |
|
|
|
const attacker: PicletDefinition = { |
|
name: "Contact Attacker", |
|
description: "Uses contact moves", |
|
tier: 'medium', |
|
primaryType: PicletType.BEAST, |
|
baseStats: { hp: 80, attack: 80, defense: 60, speed: 70 }, |
|
nature: "Adamant", |
|
specialAbility: { name: "No Ability", description: "" }, |
|
movepool: [ |
|
{ |
|
name: "Physical Strike", |
|
type: AttackType.BEAST, |
|
power: 60, |
|
accuracy: 100, |
|
pp: 15, |
|
priority: 0, |
|
flags: ['contact'], |
|
effects: [{ type: 'damage', target: 'opponent', amount: 'normal' }] |
|
} |
|
] |
|
}; |
|
|
|
const engine = new BattleEngine(fieldUser, attacker); |
|
|
|
console.log('Initial state:', { |
|
playerHp: engine.getState().playerPiclet.currentHp, |
|
opponentHp: engine.getState().opponentPiclet.currentHp, |
|
fieldEffects: engine.getState().fieldEffects |
|
}); |
|
|
|
|
|
engine.executeActions( |
|
{ type: 'move', piclet: 'player', moveIndex: 0 }, |
|
{ type: 'move', piclet: 'opponent', moveIndex: 0 } |
|
); |
|
|
|
console.log('After first turn:', { |
|
playerHp: engine.getState().playerPiclet.currentHp, |
|
opponentHp: engine.getState().opponentPiclet.currentHp, |
|
fieldEffects: engine.getState().fieldEffects, |
|
log: engine.getLog() |
|
}); |
|
|
|
|
|
const hpBeforeSecondAttack = engine.getState().playerPiclet.currentHp; |
|
|
|
engine.executeActions( |
|
{ type: 'move', piclet: 'player', moveIndex: 0 }, |
|
{ type: 'move', piclet: 'opponent', moveIndex: 0 } |
|
); |
|
|
|
const hpAfterSecondAttack = engine.getState().playerPiclet.currentHp; |
|
const damage = hpBeforeSecondAttack - hpAfterSecondAttack; |
|
|
|
console.log('After second turn:', { |
|
playerHp: hpAfterSecondAttack, |
|
damage: damage, |
|
fieldEffects: engine.getState().fieldEffects, |
|
log: engine.getLog() |
|
}); |
|
|
|
expect(engine.getState().fieldEffects.length).toBeGreaterThan(0); |
|
expect(damage).toBeGreaterThan(0); |
|
}); |
|
}); |