pokemon-io-core 0.0.125 → 0.0.127

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.
Files changed (45) hide show
  1. package/dist/core/ids.d.ts +18 -6
  2. package/dist/core/ids.js +10 -1
  3. package/dist/core/index.d.ts +2 -1
  4. package/dist/core/index.js +2 -1
  5. package/dist/core/randomEvents.d.ts +21 -5
  6. package/dist/core/randomEvents.js +4 -4
  7. package/dist/core/randomEventsList.d.ts +10 -4
  8. package/dist/core/randomEventsList.js +24 -163
  9. package/dist/core/status.d.ts +1 -0
  10. package/dist/core/validation.d.ts +21 -0
  11. package/dist/core/validation.js +183 -0
  12. package/dist/engine/combat/damage.js +2 -1
  13. package/dist/engine/events/applyRandomEvent.js +13 -6
  14. package/dist/engine/turn/resolveTurn.js +3 -2
  15. package/dist/skins/CombatSkin.d.ts +1 -0
  16. package/dist/skins/cliches/clicheSkin.d.ts +2 -1
  17. package/dist/skins/cliches/clicheSkin.js +3 -0
  18. package/dist/skins/cliches/constants.d.ts +135 -0
  19. package/dist/skins/cliches/constants.js +136 -0
  20. package/dist/skins/cliches/fighters.d.ts +1 -1
  21. package/dist/skins/cliches/fighters.js +165 -165
  22. package/dist/skins/cliches/index.d.ts +1 -0
  23. package/dist/skins/cliches/index.js +1 -0
  24. package/dist/skins/cliches/items.js +45 -44
  25. package/dist/skins/cliches/moves.js +74 -69
  26. package/dist/skins/cliches/randomEvents.d.ts +7 -0
  27. package/dist/skins/cliches/randomEvents.js +1167 -0
  28. package/dist/skins/cliches/statuses.js +63 -36
  29. package/dist/skins/cliches/types.d.ts +1 -15
  30. package/dist/skins/cliches/types.js +165 -181
  31. package/dist/skins/pokemon/constants.d.ts +83 -0
  32. package/dist/skins/pokemon/constants.js +84 -0
  33. package/dist/skins/pokemon/fighters.js +55 -55
  34. package/dist/skins/pokemon/index.d.ts +1 -0
  35. package/dist/skins/pokemon/index.js +1 -0
  36. package/dist/skins/pokemon/items.js +23 -22
  37. package/dist/skins/pokemon/moves.js +59 -58
  38. package/dist/skins/pokemon/pokemonSkin.d.ts +2 -1
  39. package/dist/skins/pokemon/pokemonSkin.js +3 -0
  40. package/dist/skins/pokemon/randomEvents.d.ts +6 -0
  41. package/dist/skins/pokemon/randomEvents.js +165 -0
  42. package/dist/skins/pokemon/statuses.js +5 -4
  43. package/dist/skins/pokemon/types.d.ts +0 -9
  44. package/dist/skins/pokemon/types.js +49 -56
  45. package/package.json +1 -1
@@ -1,12 +1,13 @@
1
+ import { POKEMON_MOVE_IDS, POKEMON_STATUS_IDS, POKEMON_TYPE_IDS } from "./constants.js";
1
2
  // Balance Standards:
2
3
  // Nuke: 45 Power, 85 Acc, 4 PP.
3
4
  // Core: 25 Power, 95 Acc, 8 PP. (10% Status Chance)
4
5
  // Utility/Heal: 100 Acc, 12 PP.
5
6
  export const POKEMON_MOVES = [
6
7
  {
7
- id: "phantom_step",
8
+ id: POKEMON_MOVE_IDS.PHANTOM_STEP,
8
9
  name: "Paso Fantasma",
9
- typeId: "typeless",
10
+ typeId: POKEMON_TYPE_IDS.TYPELESS,
10
11
  accuracy: 95,
11
12
  maxPP: 4,
12
13
  priority: 0,
@@ -14,9 +15,9 @@ export const POKEMON_MOVES = [
14
15
  effects: [{ kind: "damage", basePower: 40 }]
15
16
  },
16
17
  {
17
- id: "true_sight",
18
+ id: POKEMON_MOVE_IDS.TRUE_SIGHT,
18
19
  name: "Visión Verdadera",
19
- typeId: "typeless",
20
+ typeId: POKEMON_TYPE_IDS.TYPELESS,
20
21
  accuracy: 100,
21
22
  maxPP: 8,
22
23
  priority: 0,
@@ -24,25 +25,25 @@ export const POKEMON_MOVES = [
24
25
  effects: [{ kind: "damage", basePower: 40 }]
25
26
  },
26
27
  {
27
- id: "hypnosis",
28
+ id: POKEMON_MOVE_IDS.HYPNOSIS,
28
29
  name: "Hipnosis",
29
- typeId: "typeless",
30
+ typeId: POKEMON_TYPE_IDS.TYPELESS,
30
31
  accuracy: 70, // Low accuracy for Hard CC
31
32
  maxPP: 4,
32
33
  priority: 0,
33
34
  effects: [
34
35
  {
35
36
  kind: "apply_status",
36
- statusId: "sleep",
37
+ statusId: POKEMON_STATUS_IDS.SLEEP,
37
38
  chance: 1 // 100% chance if hits
38
39
  }
39
40
  ]
40
41
  },
41
42
  // --- FIRE ---
42
43
  {
43
- id: "inferno",
44
+ id: POKEMON_MOVE_IDS.INFERNO,
44
45
  name: "Infierno",
45
- typeId: "fire",
46
+ typeId: POKEMON_TYPE_IDS.FIRE,
46
47
  accuracy: 85,
47
48
  maxPP: 4,
48
49
  narration: [
@@ -57,28 +58,28 @@ export const POKEMON_MOVES = [
57
58
  ]
58
59
  },
59
60
  {
60
- id: "ember",
61
+ id: POKEMON_MOVE_IDS.EMBER,
61
62
  name: "Ascuas",
62
- typeId: "fire",
63
+ typeId: POKEMON_TYPE_IDS.FIRE,
63
64
  accuracy: 95,
64
65
  maxPP: 8,
65
66
  effects: [
66
67
  { kind: "damage", basePower: 25 },
67
- { kind: "apply_status", statusId: "burn", chance: 0.1 }
68
+ { kind: "apply_status", statusId: POKEMON_STATUS_IDS.BURN, chance: 0.1 }
68
69
  ]
69
70
  },
70
71
  {
71
- id: "heat_wave",
72
+ id: POKEMON_MOVE_IDS.HEAT_WAVE,
72
73
  name: "Onda de Calor",
73
- typeId: "fire",
74
+ typeId: POKEMON_TYPE_IDS.FIRE,
74
75
  accuracy: 100,
75
76
  maxPP: 12,
76
77
  effects: [{ kind: "heal", target: "self", amount: 50 }]
77
78
  },
78
79
  {
79
- id: "cauterize",
80
+ id: POKEMON_MOVE_IDS.CAUTERIZE,
80
81
  name: "Cauterizar",
81
- typeId: "fire",
82
+ typeId: POKEMON_TYPE_IDS.FIRE,
82
83
  accuracy: 100,
83
84
  maxPP: 12,
84
85
  effects: [
@@ -88,9 +89,9 @@ export const POKEMON_MOVES = [
88
89
  },
89
90
  // --- WATER ---
90
91
  {
91
- id: "tsunami",
92
+ id: POKEMON_MOVE_IDS.TSUNAMI,
92
93
  name: "Tsunami",
93
- typeId: "water",
94
+ typeId: POKEMON_TYPE_IDS.WATER,
94
95
  accuracy: 85,
95
96
  maxPP: 4,
96
97
  effects: [
@@ -99,25 +100,25 @@ export const POKEMON_MOVES = [
99
100
  ]
100
101
  },
101
102
  {
102
- id: "stream",
103
+ id: POKEMON_MOVE_IDS.STREAM,
103
104
  name: "Corriente",
104
- typeId: "water",
105
+ typeId: POKEMON_TYPE_IDS.WATER,
105
106
  accuracy: 95,
106
107
  maxPP: 8,
107
108
  effects: [{ kind: "damage", basePower: 25 }]
108
109
  },
109
110
  {
110
- id: "refresh",
111
+ id: POKEMON_MOVE_IDS.REFRESH,
111
112
  name: "Refrescar",
112
- typeId: "water",
113
+ typeId: POKEMON_TYPE_IDS.WATER,
113
114
  accuracy: 100,
114
115
  maxPP: 12,
115
116
  effects: [{ kind: "heal", target: "self", amount: 50 }]
116
117
  },
117
118
  {
118
- id: "purify",
119
+ id: POKEMON_MOVE_IDS.PURIFY,
119
120
  name: "Purificar",
120
- typeId: "water",
121
+ typeId: POKEMON_TYPE_IDS.WATER,
121
122
  accuracy: 100,
122
123
  maxPP: 12,
123
124
  effects: [
@@ -127,9 +128,9 @@ export const POKEMON_MOVES = [
127
128
  },
128
129
  // --- GRASS ---
129
130
  {
130
- id: "solar_beam",
131
+ id: POKEMON_MOVE_IDS.SOLAR_BEAM,
131
132
  name: "Rayo Solar",
132
- typeId: "grass",
133
+ typeId: POKEMON_TYPE_IDS.GRASS,
133
134
  accuracy: 85,
134
135
  maxPP: 4,
135
136
  effects: [
@@ -138,28 +139,28 @@ export const POKEMON_MOVES = [
138
139
  ]
139
140
  },
140
141
  {
141
- id: "vine",
142
+ id: POKEMON_MOVE_IDS.VINE,
142
143
  name: "Látigo Cepa",
143
- typeId: "grass",
144
+ typeId: POKEMON_TYPE_IDS.GRASS,
144
145
  accuracy: 95,
145
146
  maxPP: 8,
146
147
  effects: [
147
148
  { kind: "damage", basePower: 25 },
148
- { kind: "apply_status", statusId: "poison", chance: 0.1 }
149
+ { kind: "apply_status", statusId: POKEMON_STATUS_IDS.POISON, chance: 0.1 }
149
150
  ]
150
151
  },
151
152
  {
152
- id: "synthesis",
153
+ id: POKEMON_MOVE_IDS.SYNTHESIS,
153
154
  name: "Síntesis",
154
- typeId: "grass",
155
+ typeId: POKEMON_TYPE_IDS.GRASS,
155
156
  accuracy: 100,
156
157
  maxPP: 12,
157
158
  effects: [{ kind: "heal", target: "self", amount: 50 }]
158
159
  },
159
160
  {
160
- id: "bloom",
161
+ id: POKEMON_MOVE_IDS.BLOOM,
161
162
  name: "Floración",
162
- typeId: "grass",
163
+ typeId: POKEMON_TYPE_IDS.GRASS,
163
164
  accuracy: 100,
164
165
  maxPP: 12,
165
166
  effects: [
@@ -169,9 +170,9 @@ export const POKEMON_MOVES = [
169
170
  },
170
171
  // --- ELECTRIC ---
171
172
  {
172
- id: "thunder_strike",
173
+ id: POKEMON_MOVE_IDS.THUNDER_STRIKE,
173
174
  name: "Golpe Trueno",
174
- typeId: "electric",
175
+ typeId: POKEMON_TYPE_IDS.ELECTRIC,
175
176
  accuracy: 85,
176
177
  maxPP: 4,
177
178
  effects: [
@@ -180,28 +181,28 @@ export const POKEMON_MOVES = [
180
181
  ]
181
182
  },
182
183
  {
183
- id: "spark",
184
+ id: POKEMON_MOVE_IDS.SPARK,
184
185
  name: "Chispa",
185
- typeId: "electric",
186
+ typeId: POKEMON_TYPE_IDS.ELECTRIC,
186
187
  accuracy: 95,
187
188
  maxPP: 8,
188
189
  effects: [
189
190
  { kind: "damage", basePower: 25 },
190
- { kind: "apply_status", statusId: "paralysis", chance: 0.1 }
191
+ { kind: "apply_status", statusId: POKEMON_STATUS_IDS.PARALYSIS, chance: 0.1 }
191
192
  ]
192
193
  },
193
194
  {
194
- id: "recharge",
195
+ id: POKEMON_MOVE_IDS.RECHARGE,
195
196
  name: "Recarga",
196
- typeId: "electric",
197
+ typeId: POKEMON_TYPE_IDS.ELECTRIC,
197
198
  accuracy: 100,
198
199
  maxPP: 12,
199
200
  effects: [{ kind: "heal", target: "self", amount: 50 }]
200
201
  },
201
202
  {
202
- id: "grounding",
203
+ id: POKEMON_MOVE_IDS.GROUNDING,
203
204
  name: "Toma de Tierra",
204
- typeId: "electric",
205
+ typeId: POKEMON_TYPE_IDS.ELECTRIC,
205
206
  accuracy: 100,
206
207
  maxPP: 12,
207
208
  effects: [
@@ -211,9 +212,9 @@ export const POKEMON_MOVES = [
211
212
  },
212
213
  // --- PSYCHIC ---
213
214
  {
214
- id: "psystrike",
215
+ id: POKEMON_MOVE_IDS.PSYSTRIKE,
215
216
  name: "Onda Mental",
216
- typeId: "psychic",
217
+ typeId: POKEMON_TYPE_IDS.PSYCHIC,
217
218
  accuracy: 85,
218
219
  maxPP: 4,
219
220
  effects: [
@@ -222,25 +223,25 @@ export const POKEMON_MOVES = [
222
223
  ]
223
224
  },
224
225
  {
225
- id: "pulse",
226
+ id: POKEMON_MOVE_IDS.PULSE,
226
227
  name: "Pulso",
227
- typeId: "psychic",
228
+ typeId: POKEMON_TYPE_IDS.PSYCHIC,
228
229
  accuracy: 95,
229
230
  maxPP: 8,
230
231
  effects: [{ kind: "damage", basePower: 25 }]
231
232
  },
232
233
  {
233
- id: "meditate",
234
+ id: POKEMON_MOVE_IDS.MEDITATE,
234
235
  name: "Meditar",
235
- typeId: "psychic",
236
+ typeId: POKEMON_TYPE_IDS.PSYCHIC,
236
237
  accuracy: 100,
237
238
  maxPP: 12,
238
239
  effects: [{ kind: "heal", target: "self", amount: 50 }]
239
240
  },
240
241
  {
241
- id: "clarity",
242
+ id: POKEMON_MOVE_IDS.CLARITY,
242
243
  name: "Claridad",
243
- typeId: "psychic",
244
+ typeId: POKEMON_TYPE_IDS.PSYCHIC,
244
245
  accuracy: 100,
245
246
  maxPP: 12,
246
247
  effects: [
@@ -250,9 +251,9 @@ export const POKEMON_MOVES = [
250
251
  },
251
252
  // --- ROCK ---
252
253
  {
253
- id: "landslide",
254
+ id: POKEMON_MOVE_IDS.LANDSLIDE,
254
255
  name: "Avalancha",
255
- typeId: "rock",
256
+ typeId: POKEMON_TYPE_IDS.ROCK,
256
257
  accuracy: 85,
257
258
  maxPP: 4,
258
259
  effects: [
@@ -261,25 +262,25 @@ export const POKEMON_MOVES = [
261
262
  ]
262
263
  },
263
264
  {
264
- id: "throw",
265
+ id: POKEMON_MOVE_IDS.THROW,
265
266
  name: "Lanzar Rocas",
266
- typeId: "rock",
267
+ typeId: POKEMON_TYPE_IDS.ROCK,
267
268
  accuracy: 95,
268
269
  maxPP: 8,
269
270
  effects: [{ kind: "damage", basePower: 25 }]
270
271
  },
271
272
  {
272
- id: "mend",
273
+ id: POKEMON_MOVE_IDS.MEND,
273
274
  name: "Reconstruir",
274
- typeId: "rock",
275
+ typeId: POKEMON_TYPE_IDS.ROCK,
275
276
  accuracy: 100,
276
277
  maxPP: 12,
277
278
  effects: [{ kind: "heal", target: "self", amount: 50 }]
278
279
  },
279
280
  {
280
- id: "polish",
281
+ id: POKEMON_MOVE_IDS.POLISH,
281
282
  name: "Pulir",
282
- typeId: "rock",
283
+ typeId: POKEMON_TYPE_IDS.ROCK,
283
284
  accuracy: 100,
284
285
  maxPP: 12,
285
286
  effects: [
@@ -1,9 +1,10 @@
1
- import { ItemDefinition, MoveDefinition } from "../../core/index.js";
1
+ import { FighterDefinition, ItemDefinition, MoveDefinition } from "../../core/index.js";
2
2
  import { PlayerBattleConfig } from "../../engine/rules.js";
3
3
  import type { CombatSkin, PlayerTeamLoadout } from "../CombatSkin.js";
4
4
  export declare class PokemonSkin implements CombatSkin {
5
5
  readonly id = "pokemon";
6
6
  getTypes(): import("../../index.js").TypeDefinition[];
7
+ getFighters(): FighterDefinition[];
7
8
  getTypeEffectiveness(): import("../../index.js").TypeEffectivenessMatrix;
8
9
  getMoves(): MoveDefinition[];
9
10
  getItems(): ItemDefinition[];
@@ -50,6 +50,9 @@ export class PokemonSkin {
50
50
  getTypes() {
51
51
  return POKEMON_TYPES;
52
52
  }
53
+ getFighters() {
54
+ return POKEMON_FIGHTERS;
55
+ }
53
56
  getTypeEffectiveness() {
54
57
  return POKEMON_TYPE_MATRIX;
55
58
  }
@@ -0,0 +1,6 @@
1
+ import type { RandomEventDefinition } from "../../core/randomEvents.js";
2
+ /**
3
+ * POKEMON-SPECIFIC Random Events
4
+ * These only appear when using the Pokemon skin
5
+ */
6
+ export declare const POKEMON_RANDOM_EVENTS: RandomEventDefinition[];
@@ -0,0 +1,165 @@
1
+ // @pokemon-io/combat-core/src/skins/pokemon/randomEvents.ts
2
+ /**
3
+ * POKEMON-SPECIFIC Random Events
4
+ * These only appear when using the Pokemon skin
5
+ */
6
+ export const POKEMON_RANDOM_EVENTS = [
7
+ // ==================== COMMON (3 events) ====================
8
+ {
9
+ id: "pokemon_center",
10
+ name: "🏥 Centro Pokémon Móvil",
11
+ description: "Una enfermera Joy aparece y cura a ambos Pokémon.",
12
+ narration: ["¡Suena una música familiar!", "¡La Enfermera Joy ha venido a ayudar!"],
13
+ rarity: "common",
14
+ effects: [
15
+ {
16
+ effectType: "heal_percent",
17
+ target: "both",
18
+ percentValue: 15,
19
+ },
20
+ ],
21
+ },
22
+ {
23
+ id: "team_rocket",
24
+ name: "🚀 ¡Equipo Rocket!",
25
+ description: "¡Preparaos para los problemas! El ataque de ambos baja.",
26
+ narration: ["¡Prepárense para los problemas!", "¡Y más vale que teman!"],
27
+ rarity: "common",
28
+ effects: [
29
+ {
30
+ effectType: "stat_change",
31
+ target: "both",
32
+ statType: "offense",
33
+ statChange: -1,
34
+ },
35
+ ],
36
+ },
37
+ {
38
+ id: "rare_candy",
39
+ name: "🍬 Caramelo Raro",
40
+ description: "Un Pokémon aleatorio encuentra un caramelo y se fortalece.",
41
+ narration: ["¡Un objeto brillante aparece!", "¡Es un Caramelo Raro!"],
42
+ rarity: "common",
43
+ effects: [
44
+ {
45
+ effectType: "stat_change",
46
+ target: "random_one",
47
+ statType: "offense",
48
+ statChange: 1,
49
+ },
50
+ {
51
+ effectType: "stat_change",
52
+ target: "random_one",
53
+ statType: "defense",
54
+ statChange: 1,
55
+ },
56
+ ],
57
+ },
58
+ // ==================== RARE (4 events) ====================
59
+ {
60
+ id: "sandstorm",
61
+ name: "🌪️ Tormenta de Arena",
62
+ description: "Una tormenta de arena daña a todos los Pokémon.",
63
+ narration: ["¡El viento empieza a soplar con fuerza!", "¡Una tormenta de arena azota el combate!"],
64
+ rarity: "rare",
65
+ effects: [
66
+ {
67
+ effectType: "damage_percent",
68
+ target: "both",
69
+ percentValue: 8,
70
+ },
71
+ ],
72
+ },
73
+ {
74
+ id: "professor_oak",
75
+ name: "👴 Profesor Oak",
76
+ description: "¡El Profesor Oak anima a tu Pokémon!",
77
+ narration: ["¡Un mensaje del laboratorio!", "¡El Profesor Oak envía sus ánimos!"],
78
+ rarity: "rare",
79
+ effects: [
80
+ {
81
+ effectType: "stat_change",
82
+ target: "random_one",
83
+ statType: "offense",
84
+ statChange: 2,
85
+ },
86
+ {
87
+ effectType: "stat_change",
88
+ target: "random_one",
89
+ statType: "speed",
90
+ statChange: 1,
91
+ },
92
+ ],
93
+ },
94
+ {
95
+ id: "dawn_stone",
96
+ name: "💎 Piedra Alba",
97
+ description: "Una piedra evolutiva aumenta la defensa de un Pokémon.",
98
+ narration: ["¡Una extraña piedra emite luz!", "¡El poder de la Piedra Alba se manifiesta!"],
99
+ rarity: "rare",
100
+ effects: [
101
+ {
102
+ effectType: "stat_change",
103
+ target: "random_one",
104
+ statType: "defense",
105
+ statChange: 3,
106
+ },
107
+ ],
108
+ },
109
+ {
110
+ id: "potion_spray",
111
+ name: "💊 Lluvia de Pociones",
112
+ description: "Pociones caen del cielo curando a ambos Pokémon.",
113
+ narration: ["¡Empieza a llover... ¿medicina?!", "¡Una lluvia de pociones cubre el estadio!"],
114
+ rarity: "rare",
115
+ effects: [
116
+ {
117
+ effectType: "heal_percent",
118
+ target: "both",
119
+ percentValue: 12,
120
+ },
121
+ ],
122
+ },
123
+ // ==================== EPIC (2 events) ====================
124
+ {
125
+ id: "legendary_appearance",
126
+ name: "✨ Aparición Legendaria",
127
+ description: "Un Pokémon legendario otorga poder a un luchador aleatorio.",
128
+ narration: ["¡UNA PRESENCIA ABRUMADORA SE SIENTE!", "¡Un Pokémon Legendario observa el combate!"],
129
+ rarity: "epic",
130
+ effects: [
131
+ {
132
+ effectType: "stat_change",
133
+ target: "random_one",
134
+ statType: "offense",
135
+ statChange: 3,
136
+ },
137
+ {
138
+ effectType: "stat_change",
139
+ target: "random_one",
140
+ statType: "defense",
141
+ statChange: 2,
142
+ },
143
+ {
144
+ effectType: "stat_change",
145
+ target: "random_one",
146
+ statType: "speed",
147
+ statChange: 2,
148
+ },
149
+ ],
150
+ },
151
+ {
152
+ id: "max_revive",
153
+ name: "⚡ Revivir Máximo",
154
+ description: "El Pokémon con menos vida recupera un 30% de HP.",
155
+ narration: ["¡Un cristal amarillo brilla con intensidad!", "¡El poder del Revivir Máximo restaura la energía!"],
156
+ rarity: "epic",
157
+ effects: [
158
+ {
159
+ effectType: "heal_percent",
160
+ target: "random_one", // TODO: Cambiar a "lowest_hp" cuando se implemente
161
+ percentValue: 30,
162
+ },
163
+ ],
164
+ },
165
+ ];
@@ -1,8 +1,9 @@
1
+ import { POKEMON_STATUS_IDS } from "./constants.js";
1
2
  export const POKEMON_STATUSES = [
2
3
  // --- BURN (Fuego) ---
3
4
  // Effect: DoT + Halves Attack (Engine)
4
5
  {
5
- id: "burn",
6
+ id: POKEMON_STATUS_IDS.BURN,
6
7
  name: "Quemado",
7
8
  kind: "soft",
8
9
  minDurationTurns: 3,
@@ -17,7 +18,7 @@ export const POKEMON_STATUSES = [
17
18
  // --- PARALYSIS (Eléctrico) ---
18
19
  // Effect: Halves Speed + 25% Chance to Skip Turn (Engine)
19
20
  {
20
- id: "paralysis",
21
+ id: POKEMON_STATUS_IDS.PARALYSIS,
21
22
  name: "Paralizado",
22
23
  kind: "soft",
23
24
  minDurationTurns: 3,
@@ -29,7 +30,7 @@ export const POKEMON_STATUSES = [
29
30
  // --- POISON (Planta/Toxic) ---
30
31
  // Effect: DoT that scales each turn (Engine)
31
32
  {
32
- id: "poison",
33
+ id: POKEMON_STATUS_IDS.POISON,
33
34
  name: "Envenenado",
34
35
  kind: "soft",
35
36
  minDurationTurns: 4,
@@ -44,7 +45,7 @@ export const POKEMON_STATUSES = [
44
45
  // --- SLEEP (Psychic/Hypnosis) ---
45
46
  // Effect: Hard CC. 30% Wake on Hit (Engine)
46
47
  {
47
- id: "sleep",
48
+ id: POKEMON_STATUS_IDS.SLEEP,
48
49
  name: "Dormido",
49
50
  kind: "hard_cc",
50
51
  minDurationTurns: 2,
@@ -1,13 +1,4 @@
1
1
  import type { TypeDefinition, TypeEffectivenessMatrix, TypeId } from "../../core/index.js";
2
- export declare const POKEMON_TYPE_IDS: {
3
- readonly fire: "fire";
4
- readonly water: "water";
5
- readonly grass: "grass";
6
- readonly electric: "electric";
7
- readonly psychic: "psychic";
8
- readonly rock: "rock";
9
- };
10
- export type PokemonTypeId = (typeof POKEMON_TYPE_IDS)[keyof typeof POKEMON_TYPE_IDS];
11
2
  export declare const POKEMON_TYPES: TypeDefinition[];
12
3
  export declare const POKEMON_TYPE_MATRIX: TypeEffectivenessMatrix;
13
4
  export declare const getPokemonTypeEffectiveness: (attackerTypeId: TypeId, defenderTypeId: TypeId) => number;