pokemon-io-core 0.0.31 → 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.
@@ -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")
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pokemon-io-core",
3
- "version": "0.0.31",
3
+ "version": "0.0.33",
4
4
  "description": "",
5
5
  "main": "index.js",
6
6
  "type": "module",