This reverts commit 17200d47ec, reversing
changes made to 95d6155086.
This commit is contained in:
2026-06-30 00:49:30 +09:00
parent 17200d47ec
commit 5e2fd5db22
7 changed files with 58 additions and 129 deletions

View File

@@ -55,8 +55,7 @@ export function calcAttack(base, str, weak, vulnOnTarget) {
}
export function calcEnemyAttack(base, str, weak, vulnOnTarget, strengthLoss = 0) {
// Lua EnemyActStep 동기화: 힘 손실은 (value+str) 전체에서 차감(음수 힘 허용), 최종 calcAttack이 0 클램프.
return calcAttack(base, str - strengthLoss, weak, vulnOnTarget);
return calcAttack(base, Math.max(0, str - strengthLoss), weak, vulnOnTarget);
}
// 방어 우선 차감 후 hp 적용 → { hp, block }
@@ -343,7 +342,7 @@ export function simulateCombat(data, rng, stats) {
if (c.damagePerDiscardedThisTurn) base += turnDiscardedCards * c.damagePerDiscardedThisTurn;
if (c.damagePerSkillInHand) base += countOtherHandSkills(id) * c.damagePerSkillInHand;
if (c.damagePerCardDrawnThisCombat) base += cardsDrawnThisCombat * c.damagePerCardDrawnThisCombat;
if (c.kind === 'Attack' && turnCardsPlayedThisTurn === 0 && c.firstCardDamageBonus) base += c.firstCardDamageBonus;
if (c.class === 'Attack' && turnCardsPlayedThisTurn === 0 && c.firstCardDamageBonus) base += c.firstCardDamageBonus;
if (c.class === 'shiv') {
if (powerFieldTotal('shivDamageBonus') > 0) base += powerFieldTotal('shivDamageBonus');
if (!shivFirstDamageBonusUsed && powerFieldTotal('firstShivDamageBonus') > 0) base += powerFieldTotal('firstShivDamageBonus');
@@ -423,9 +422,6 @@ export function simulateCombat(data, rng, stats) {
const hitN = (c.hits || 1) + bonusHits;
let useAoe = c.aoe === true;
if (c.class === 'shiv' && shivAoeThisCombat === true) useAoe = true;
if (c.class === 'shiv' && !shivFirstDamageBonusUsed && powerFieldTotal('firstShivDamageBonus') > 0) {
shivFirstDamageBonusUsed = true;
}
const perHit = calcAttack(baseDamage || 0, pStr, pWeak, 0) * turnAttackMultiplier;
const dealToTarget = (target, amount) => {
if (!target || !target.alive) return { killed: false, dealt: 0 };
@@ -519,6 +515,9 @@ export function simulateCombat(data, rng, stats) {
}
}
}
if (c.class === 'shiv' && !shivFirstDamageBonusUsed && powerFieldTotal('firstShivDamageBonus') > 0) {
shivFirstDamageBonusUsed = true;
}
}
}
if (c.strength) pStr += c.strength;
@@ -565,7 +564,7 @@ export function simulateCombat(data, rng, stats) {
}
}
if (c.blockPerDamageDealtThisTurn && c.blockPerDamageDealtThisTurn > 0 && c.kind !== 'Power') {
blockGained += addBlock(Math.max(0, damageDealtThisTurn * c.blockPerDamageDealtThisTurn));
blockGained += Math.max(0, damageDealtThisTurn * c.blockPerDamageDealtThisTurn);
}
if (recordStats && stats) stats[id] = bump(stats[id], costSpent, dmg, blockGained);
}
@@ -659,7 +658,7 @@ export function simulateCombat(data, rng, stats) {
const baseCost = c.cost || 0;
const combatReduction = combatCardCostReduction[id] || 0;
const cost = handCostZeroThisTurn === true ? 0 : (c.useAllEnergy === true ? energy : (skillFree ? 0 : (c.kind === 'Skill' ? Math.max(0, baseCost - skillCostReductionThisTurn) : baseCost)));
const finalCost = c.useAllEnergy === true ? cost : Math.max(0, cost - combatReduction);
const finalCost = Math.max(0, cost - combatReduction);
energy -= finalCost;
resolveCardEffects(id, c, finalCost);
const playedBlock = powerFieldTotal('cardPlayedBlock');
@@ -722,7 +721,7 @@ export function simulateCombat(data, rng, stats) {
const it = m.intents.length ? m.intents[Math.floor(rng() * m.intents.length)] : null;
if (it) {
if (it.kind === 'Attack') {
const atk = calcEnemyAttack(it.value, m.str, m.weak, pVuln, enemyStrengthLossThisTurn);
const atk = calcAttack(it.value, Math.max(0, m.str - enemyStrengthLossThisTurn), m.weak, pVuln);
const beforeHp = pHp;
let incoming = atk;
if (pIntangible > 0 && incoming > 1) incoming = 1;