pokemon-io-core 0.0.32 → 0.0.33
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/core/engine.js +42 -1
- package/package.json +1 -1
package/dist/core/engine.js
CHANGED
|
@@ -57,6 +57,38 @@ const createBattleFighter = (cfg) => {
|
|
|
57
57
|
isAlive: true,
|
|
58
58
|
};
|
|
59
59
|
};
|
|
60
|
+
const recomputeEffectiveStatsForFighter = (state, fighter) => {
|
|
61
|
+
// Partimos de base
|
|
62
|
+
let eff = { ...fighter.baseStats };
|
|
63
|
+
// 1) Aplicar estados
|
|
64
|
+
for (const st of fighter.statuses) {
|
|
65
|
+
const def = state.runtime.statusesById[st.statusId];
|
|
66
|
+
if (!def)
|
|
67
|
+
continue;
|
|
68
|
+
const stacks = st.stacks === 2 ? 2 : 1;
|
|
69
|
+
for (const effDef of def.effectsPerStack) {
|
|
70
|
+
const totalStacks = stacks; // podrías multiplicar efectos por stacks
|
|
71
|
+
switch (effDef.kind) {
|
|
72
|
+
case "modify_stats":
|
|
73
|
+
eff.offense += (effDef.offenseDelta ?? 0) * totalStacks;
|
|
74
|
+
eff.defense += (effDef.defenseDelta ?? 0) * totalStacks;
|
|
75
|
+
eff.speed += (effDef.speedDelta ?? 0) * totalStacks;
|
|
76
|
+
eff.crit += (effDef.critDelta ?? 0) * totalStacks;
|
|
77
|
+
break;
|
|
78
|
+
case "modify_effective_speed":
|
|
79
|
+
eff.speed = Math.floor(eff.speed * Math.pow(effDef.multiplier, totalStacks));
|
|
80
|
+
break;
|
|
81
|
+
default:
|
|
82
|
+
break;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
// 2) Aquí podrías aplicar amuletos, buffs temporales o lo que quieras
|
|
87
|
+
return {
|
|
88
|
+
...fighter,
|
|
89
|
+
effectiveStats: eff,
|
|
90
|
+
};
|
|
91
|
+
};
|
|
60
92
|
const createPlayerBattleState = (cfg) => {
|
|
61
93
|
const fighter = createBattleFighter(cfg);
|
|
62
94
|
return {
|
|
@@ -723,6 +755,16 @@ const applyEndOfTurnStatuses = (state) => {
|
|
|
723
755
|
// ------------------------------------------------------
|
|
724
756
|
export const resolveTurn = (state, actions) => {
|
|
725
757
|
const runtimeState = state;
|
|
758
|
+
let currentState = runtimeState;
|
|
759
|
+
const recalcForPlayer = (player) => {
|
|
760
|
+
const team = player.fighterTeam.map((f) => recomputeEffectiveStatsForFighter(runtimeState, f));
|
|
761
|
+
return { ...player, fighterTeam: team };
|
|
762
|
+
};
|
|
763
|
+
currentState = {
|
|
764
|
+
...currentState,
|
|
765
|
+
player1: recalcForPlayer(currentState.player1),
|
|
766
|
+
player2: recalcForPlayer(currentState.player2),
|
|
767
|
+
};
|
|
726
768
|
const events = [];
|
|
727
769
|
dbg(`TURN ${runtimeState.turnNumber} start`, {
|
|
728
770
|
p1Action: actions.player1.kind,
|
|
@@ -759,7 +801,6 @@ export const resolveTurn = (state, actions) => {
|
|
|
759
801
|
priority: e.priority,
|
|
760
802
|
speed: e.speed,
|
|
761
803
|
})));
|
|
762
|
-
let currentState = runtimeState;
|
|
763
804
|
for (const entry of entries) {
|
|
764
805
|
const { playerKey, action } = entry;
|
|
765
806
|
if (action.kind === "no_action")
|