pokemon-io-core 0.0.124 → 0.0.126
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/ids.d.ts +18 -6
- package/dist/core/ids.js +10 -1
- package/dist/core/index.d.ts +2 -1
- package/dist/core/index.js +2 -1
- package/dist/core/randomEvents.d.ts +21 -5
- package/dist/core/randomEvents.js +4 -4
- package/dist/core/randomEventsList.d.ts +10 -4
- package/dist/core/randomEventsList.js +24 -163
- package/dist/core/status.d.ts +1 -0
- package/dist/core/validation.d.ts +21 -0
- package/dist/core/validation.js +183 -0
- package/dist/engine/combat/damage.js +2 -1
- package/dist/engine/events/applyRandomEvent.js +13 -6
- package/dist/engine/turn/resolveTurn.js +3 -2
- package/dist/skins/CombatSkin.d.ts +1 -0
- package/dist/skins/cliches/clicheSkin.d.ts +2 -1
- package/dist/skins/cliches/clicheSkin.js +3 -0
- package/dist/skins/cliches/constants.d.ts +135 -0
- package/dist/skins/cliches/constants.js +136 -0
- package/dist/skins/cliches/fighters.d.ts +1 -1
- package/dist/skins/cliches/fighters.js +165 -165
- package/dist/skins/cliches/items.js +45 -44
- package/dist/skins/cliches/moves.js +74 -69
- package/dist/skins/cliches/randomEvents.d.ts +7 -0
- package/dist/skins/cliches/randomEvents.js +1167 -0
- package/dist/skins/cliches/statuses.js +63 -36
- package/dist/skins/cliches/types.d.ts +12 -12
- package/dist/skins/cliches/types.js +12 -11
- package/dist/skins/pokemon/constants.d.ts +83 -0
- package/dist/skins/pokemon/constants.js +84 -0
- package/dist/skins/pokemon/fighters.js +55 -55
- package/dist/skins/pokemon/items.js +23 -22
- package/dist/skins/pokemon/moves.js +59 -58
- package/dist/skins/pokemon/pokemonSkin.d.ts +2 -1
- package/dist/skins/pokemon/pokemonSkin.js +3 -0
- package/dist/skins/pokemon/randomEvents.d.ts +6 -0
- package/dist/skins/pokemon/randomEvents.js +165 -0
- package/dist/skins/pokemon/statuses.js +5 -4
- package/dist/skins/pokemon/types.d.ts +6 -6
- package/dist/skins/pokemon/types.js +7 -6
- package/package.json +1 -1
|
@@ -1,81 +1,108 @@
|
|
|
1
|
+
import { TRIBE_STATUS_IDS } from "./constants.js";
|
|
1
2
|
export const TRIBE_STATUSES = [
|
|
2
|
-
//
|
|
3
|
+
// Nuevos estados humorísticos
|
|
3
4
|
{
|
|
4
|
-
id:
|
|
5
|
-
name: "
|
|
5
|
+
id: TRIBE_STATUS_IDS.MEDITAR,
|
|
6
|
+
name: "Meditando",
|
|
6
7
|
kind: "soft",
|
|
8
|
+
color: '#7f48ff',
|
|
7
9
|
minDurationTurns: 3,
|
|
8
10
|
maxDurationTurns: 5,
|
|
9
11
|
effectsPerStack: [
|
|
10
12
|
{
|
|
11
|
-
kind: "
|
|
12
|
-
|
|
13
|
+
kind: "modify_stats",
|
|
14
|
+
target: "self",
|
|
15
|
+
offenseDelta: 1,
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
kind: "heal",
|
|
19
|
+
target: "self",
|
|
20
|
+
amount: 5,
|
|
13
21
|
},
|
|
14
22
|
],
|
|
15
23
|
},
|
|
16
|
-
// CAYETANO (Agua) – Escaldado -> "Cancelado" (en Twitter)
|
|
17
24
|
{
|
|
18
|
-
id:
|
|
19
|
-
name: "
|
|
25
|
+
id: TRIBE_STATUS_IDS.RESACA,
|
|
26
|
+
name: "Resaca",
|
|
20
27
|
kind: "soft",
|
|
21
|
-
|
|
22
|
-
|
|
28
|
+
color: '#ff00aa',
|
|
29
|
+
minDurationTurns: 4,
|
|
30
|
+
maxDurationTurns: 6,
|
|
23
31
|
effectsPerStack: [
|
|
24
32
|
{
|
|
25
33
|
kind: "damage",
|
|
26
|
-
flatAmount: 5,
|
|
34
|
+
flatAmount: 5,
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
kind: "modify_stats",
|
|
38
|
+
target: "self",
|
|
39
|
+
defenseDelta: -1,
|
|
27
40
|
},
|
|
28
41
|
],
|
|
29
42
|
},
|
|
30
|
-
// PERROFLAUTA (Planta) – Enredado -> "Sin Cobertura"
|
|
31
43
|
{
|
|
32
|
-
id:
|
|
33
|
-
name: "
|
|
44
|
+
id: TRIBE_STATUS_IDS.AGUJETAS,
|
|
45
|
+
name: "Agujetas",
|
|
34
46
|
kind: "soft",
|
|
47
|
+
color: '#ff672b',
|
|
35
48
|
minDurationTurns: 3,
|
|
36
49
|
maxDurationTurns: 5,
|
|
37
50
|
effectsPerStack: [
|
|
38
51
|
{
|
|
39
52
|
kind: "damage",
|
|
40
|
-
flatAmount:
|
|
53
|
+
flatAmount: 6,
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
kind: "modify_stats",
|
|
57
|
+
target: "self",
|
|
58
|
+
speedDelta: -1,
|
|
41
59
|
},
|
|
42
60
|
],
|
|
43
61
|
},
|
|
44
|
-
// CUÑADO (Psíquico) – Bloqueo mental -> "Turra" (Te aburren)
|
|
45
|
-
{
|
|
46
|
-
id: "turra_maxima",
|
|
47
|
-
name: "Turra Máxima",
|
|
48
|
-
kind: "hard_cc", // Hard CC, te duermes del aburrimiento
|
|
49
|
-
minDurationTurns: 1,
|
|
50
|
-
maxDurationTurns: 2,
|
|
51
|
-
effectsPerStack: [],
|
|
52
|
-
},
|
|
53
|
-
// GYMBRO (Roca) – Petrificado -> "Agujetas"
|
|
54
62
|
{
|
|
55
|
-
id:
|
|
56
|
-
name: "
|
|
63
|
+
id: TRIBE_STATUS_IDS.FUMADO,
|
|
64
|
+
name: "Fumado",
|
|
57
65
|
kind: "soft",
|
|
66
|
+
color: '#00ff77',
|
|
58
67
|
minDurationTurns: 2,
|
|
59
68
|
maxDurationTurns: 4,
|
|
60
69
|
effectsPerStack: [
|
|
61
70
|
{
|
|
62
|
-
kind: "
|
|
63
|
-
|
|
71
|
+
kind: "modify_stats",
|
|
72
|
+
target: "self",
|
|
73
|
+
speedDelta: -1,
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
kind: "modify_stats",
|
|
77
|
+
target: "self",
|
|
78
|
+
defenseDelta: -1,
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
kind: "modify_stats",
|
|
82
|
+
target: "self",
|
|
83
|
+
offenseDelta: 1,
|
|
64
84
|
},
|
|
65
85
|
],
|
|
66
86
|
},
|
|
67
|
-
// CRYPTOBRO (Eléctrico) – Electrocutado -> "Ansiedad"
|
|
68
87
|
{
|
|
69
|
-
id:
|
|
70
|
-
name: "
|
|
88
|
+
id: TRIBE_STATUS_IDS.ESTUDIAR,
|
|
89
|
+
name: "Estudiando",
|
|
71
90
|
kind: "soft",
|
|
72
|
-
|
|
73
|
-
|
|
91
|
+
color: '#cacaca',
|
|
92
|
+
minDurationTurns: 3,
|
|
93
|
+
maxDurationTurns: 5,
|
|
74
94
|
effectsPerStack: [
|
|
75
95
|
{
|
|
76
|
-
kind: "
|
|
77
|
-
|
|
96
|
+
kind: "modify_stats",
|
|
97
|
+
target: "self",
|
|
98
|
+
offenseDelta: 1,
|
|
99
|
+
},
|
|
100
|
+
{
|
|
101
|
+
kind: "modify_stats",
|
|
102
|
+
target: "self",
|
|
103
|
+
defenseDelta: 1,
|
|
78
104
|
},
|
|
79
105
|
],
|
|
80
106
|
},
|
|
81
107
|
];
|
|
108
|
+
;
|
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import { type TypeDefinition, type TypeEffectivenessMatrix, type TypeId } from "../../core/index.js";
|
|
2
2
|
export declare const TRIBE_TYPE_IDS: {
|
|
3
|
-
readonly formal:
|
|
4
|
-
readonly deportista:
|
|
5
|
-
readonly nerd:
|
|
6
|
-
readonly chuleta:
|
|
7
|
-
readonly kinki:
|
|
8
|
-
readonly artista:
|
|
9
|
-
readonly fiestero:
|
|
10
|
-
readonly hippie:
|
|
11
|
-
readonly mistico:
|
|
12
|
-
readonly misterioso:
|
|
13
|
-
readonly loco:
|
|
3
|
+
readonly formal: TypeId;
|
|
4
|
+
readonly deportista: TypeId;
|
|
5
|
+
readonly nerd: TypeId;
|
|
6
|
+
readonly chuleta: TypeId;
|
|
7
|
+
readonly kinki: TypeId;
|
|
8
|
+
readonly artista: TypeId;
|
|
9
|
+
readonly fiestero: TypeId;
|
|
10
|
+
readonly hippie: TypeId;
|
|
11
|
+
readonly mistico: TypeId;
|
|
12
|
+
readonly misterioso: TypeId;
|
|
13
|
+
readonly loco: TypeId;
|
|
14
14
|
};
|
|
15
15
|
export type TribeTypeId = (typeof TRIBE_TYPE_IDS)[keyof typeof TRIBE_TYPE_IDS];
|
|
16
16
|
export declare const TRIBE_TYPES: TypeDefinition[];
|
|
@@ -1,15 +1,16 @@
|
|
|
1
|
+
import { typeId, } from "../../core/index.js";
|
|
1
2
|
export const TRIBE_TYPE_IDS = {
|
|
2
|
-
formal: "formal",
|
|
3
|
-
deportista: "deportista",
|
|
4
|
-
nerd: "nerd",
|
|
5
|
-
chuleta: "chuleta",
|
|
6
|
-
kinki: "kinki",
|
|
7
|
-
artista: "artista",
|
|
8
|
-
fiestero: "fiestero",
|
|
9
|
-
hippie: "hippie",
|
|
10
|
-
mistico: "mistico",
|
|
11
|
-
misterioso: "misterioso",
|
|
12
|
-
loco: "loco",
|
|
3
|
+
formal: typeId("formal"),
|
|
4
|
+
deportista: typeId("deportista"),
|
|
5
|
+
nerd: typeId("nerd"),
|
|
6
|
+
chuleta: typeId("chuleta"),
|
|
7
|
+
kinki: typeId("kinki"),
|
|
8
|
+
artista: typeId("artista"),
|
|
9
|
+
fiestero: typeId("fiestero"),
|
|
10
|
+
hippie: typeId("hippie"),
|
|
11
|
+
mistico: typeId("mistico"),
|
|
12
|
+
misterioso: typeId("misterioso"),
|
|
13
|
+
loco: typeId("loco"),
|
|
13
14
|
};
|
|
14
15
|
export const TRIBE_TYPES = [
|
|
15
16
|
// --- FÍSICOS ---
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
export declare const POKEMON_TYPE_IDS: {
|
|
2
|
+
readonly FIRE: import("../../index.js").TypeId;
|
|
3
|
+
readonly WATER: import("../../index.js").TypeId;
|
|
4
|
+
readonly GRASS: import("../../index.js").TypeId;
|
|
5
|
+
readonly ELECTRIC: import("../../index.js").TypeId;
|
|
6
|
+
readonly PSYCHIC: import("../../index.js").TypeId;
|
|
7
|
+
readonly ROCK: import("../../index.js").TypeId;
|
|
8
|
+
readonly TYPELESS: import("../../index.js").TypeId;
|
|
9
|
+
};
|
|
10
|
+
export declare const POKEMON_FIGHTER_IDS: {
|
|
11
|
+
readonly PIKACHU: import("../../index.js").FighterId;
|
|
12
|
+
readonly CYNDAQUIL: import("../../index.js").FighterId;
|
|
13
|
+
readonly SQUIRTLE: import("../../index.js").FighterId;
|
|
14
|
+
readonly CHIKORITA: import("../../index.js").FighterId;
|
|
15
|
+
readonly PSYDUCK: import("../../index.js").FighterId;
|
|
16
|
+
readonly GEODUDE: import("../../index.js").FighterId;
|
|
17
|
+
readonly ELECTABUZZ: import("../../index.js").FighterId;
|
|
18
|
+
readonly MAGMORTAR: import("../../index.js").FighterId;
|
|
19
|
+
readonly BLASTOISE: import("../../index.js").FighterId;
|
|
20
|
+
readonly SCEPTILE: import("../../index.js").FighterId;
|
|
21
|
+
readonly ALAKAZAM: import("../../index.js").FighterId;
|
|
22
|
+
readonly ONIX: import("../../index.js").FighterId;
|
|
23
|
+
readonly ZAPDOS: import("../../index.js").FighterId;
|
|
24
|
+
readonly CHARIZARD: import("../../index.js").FighterId;
|
|
25
|
+
readonly KYOGRE: import("../../index.js").FighterId;
|
|
26
|
+
readonly VENUSAUR: import("../../index.js").FighterId;
|
|
27
|
+
readonly MEW: import("../../index.js").FighterId;
|
|
28
|
+
readonly GROUDON: import("../../index.js").FighterId;
|
|
29
|
+
};
|
|
30
|
+
export declare const POKEMON_MOVE_IDS: {
|
|
31
|
+
readonly PHANTOM_STEP: import("../../index.js").MoveId;
|
|
32
|
+
readonly TRUE_SIGHT: import("../../index.js").MoveId;
|
|
33
|
+
readonly HYPNOSIS: import("../../index.js").MoveId;
|
|
34
|
+
readonly INFERNO: import("../../index.js").MoveId;
|
|
35
|
+
readonly EMBER: import("../../index.js").MoveId;
|
|
36
|
+
readonly HEAT_WAVE: import("../../index.js").MoveId;
|
|
37
|
+
readonly CAUTERIZE: import("../../index.js").MoveId;
|
|
38
|
+
readonly TSUNAMI: import("../../index.js").MoveId;
|
|
39
|
+
readonly STREAM: import("../../index.js").MoveId;
|
|
40
|
+
readonly REFRESH: import("../../index.js").MoveId;
|
|
41
|
+
readonly PURIFY: import("../../index.js").MoveId;
|
|
42
|
+
readonly SOLAR_BEAM: import("../../index.js").MoveId;
|
|
43
|
+
readonly VINE: import("../../index.js").MoveId;
|
|
44
|
+
readonly SYNTHESIS: import("../../index.js").MoveId;
|
|
45
|
+
readonly BLOOM: import("../../index.js").MoveId;
|
|
46
|
+
readonly THUNDER_STRIKE: import("../../index.js").MoveId;
|
|
47
|
+
readonly SPARK: import("../../index.js").MoveId;
|
|
48
|
+
readonly RECHARGE: import("../../index.js").MoveId;
|
|
49
|
+
readonly GROUNDING: import("../../index.js").MoveId;
|
|
50
|
+
readonly PSYSTRIKE: import("../../index.js").MoveId;
|
|
51
|
+
readonly PULSE: import("../../index.js").MoveId;
|
|
52
|
+
readonly MEDITATE: import("../../index.js").MoveId;
|
|
53
|
+
readonly CLARITY: import("../../index.js").MoveId;
|
|
54
|
+
readonly LANDSLIDE: import("../../index.js").MoveId;
|
|
55
|
+
readonly THROW: import("../../index.js").MoveId;
|
|
56
|
+
readonly MEND: import("../../index.js").MoveId;
|
|
57
|
+
readonly POLISH: import("../../index.js").MoveId;
|
|
58
|
+
};
|
|
59
|
+
export declare const POKEMON_STATUS_IDS: {
|
|
60
|
+
readonly BURN: import("../../index.js").StatusId;
|
|
61
|
+
readonly PARALYSIS: import("../../index.js").StatusId;
|
|
62
|
+
readonly POISON: import("../../index.js").StatusId;
|
|
63
|
+
readonly SLEEP: import("../../index.js").StatusId;
|
|
64
|
+
};
|
|
65
|
+
export declare const POKEMON_ITEM_IDS: {
|
|
66
|
+
readonly SUPER_POTION: import("../../index.js").ItemId;
|
|
67
|
+
readonly POTION: import("../../index.js").ItemId;
|
|
68
|
+
readonly APPLE: import("../../index.js").ItemId;
|
|
69
|
+
readonly MUSHROOM: import("../../index.js").ItemId;
|
|
70
|
+
readonly SHOTGUN: import("../../index.js").ItemId;
|
|
71
|
+
readonly PISTOL: import("../../index.js").ItemId;
|
|
72
|
+
readonly RIFFLE: import("../../index.js").ItemId;
|
|
73
|
+
readonly SNIPER: import("../../index.js").ItemId;
|
|
74
|
+
readonly BLUE_BERRY: import("../../index.js").ItemId;
|
|
75
|
+
readonly PINK_BERRY: import("../../index.js").ItemId;
|
|
76
|
+
readonly YELLOW_BERRY: import("../../index.js").ItemId;
|
|
77
|
+
readonly GREEN_BERRY: import("../../index.js").ItemId;
|
|
78
|
+
readonly ATTACK_POTION: import("../../index.js").ItemId;
|
|
79
|
+
readonly DEFENSE_POTION: import("../../index.js").ItemId;
|
|
80
|
+
readonly SPEED_ELIXIR: import("../../index.js").ItemId;
|
|
81
|
+
readonly CRIT_INJECTION: import("../../index.js").ItemId;
|
|
82
|
+
readonly CHESTO_BERRY: import("../../index.js").ItemId;
|
|
83
|
+
};
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import { typeId, fighterId, moveId, statusId, itemId } from "../../core/ids.js";
|
|
2
|
+
export const POKEMON_TYPE_IDS = {
|
|
3
|
+
FIRE: typeId("fire"),
|
|
4
|
+
WATER: typeId("water"),
|
|
5
|
+
GRASS: typeId("grass"),
|
|
6
|
+
ELECTRIC: typeId("electric"),
|
|
7
|
+
PSYCHIC: typeId("psychic"),
|
|
8
|
+
ROCK: typeId("rock"),
|
|
9
|
+
TYPELESS: typeId("typeless"),
|
|
10
|
+
};
|
|
11
|
+
export const POKEMON_FIGHTER_IDS = {
|
|
12
|
+
PIKACHU: fighterId("pikachu"),
|
|
13
|
+
CYNDAQUIL: fighterId("cyndaquil"),
|
|
14
|
+
SQUIRTLE: fighterId("squirtle"),
|
|
15
|
+
CHIKORITA: fighterId("chikorita"),
|
|
16
|
+
PSYDUCK: fighterId("psyduck"),
|
|
17
|
+
GEODUDE: fighterId("geodude"),
|
|
18
|
+
ELECTABUZZ: fighterId("electabuzz"),
|
|
19
|
+
MAGMORTAR: fighterId("magmortar"),
|
|
20
|
+
BLASTOISE: fighterId("blastoise"),
|
|
21
|
+
SCEPTILE: fighterId("sceptile"),
|
|
22
|
+
ALAKAZAM: fighterId("alakazam"),
|
|
23
|
+
ONIX: fighterId("onix"),
|
|
24
|
+
ZAPDOS: fighterId("zapdos"),
|
|
25
|
+
CHARIZARD: fighterId("charizard"),
|
|
26
|
+
KYOGRE: fighterId("kyogre"),
|
|
27
|
+
VENUSAUR: fighterId("venusaur"),
|
|
28
|
+
MEW: fighterId("mew"),
|
|
29
|
+
GROUDON: fighterId("groudon"),
|
|
30
|
+
};
|
|
31
|
+
export const POKEMON_MOVE_IDS = {
|
|
32
|
+
PHANTOM_STEP: moveId("phantom_step"),
|
|
33
|
+
TRUE_SIGHT: moveId("true_sight"),
|
|
34
|
+
HYPNOSIS: moveId("hypnosis"),
|
|
35
|
+
INFERNO: moveId("inferno"),
|
|
36
|
+
EMBER: moveId("ember"),
|
|
37
|
+
HEAT_WAVE: moveId("heat_wave"),
|
|
38
|
+
CAUTERIZE: moveId("cauterize"),
|
|
39
|
+
TSUNAMI: moveId("tsunami"),
|
|
40
|
+
STREAM: moveId("stream"),
|
|
41
|
+
REFRESH: moveId("refresh"),
|
|
42
|
+
PURIFY: moveId("purify"),
|
|
43
|
+
SOLAR_BEAM: moveId("solar_beam"),
|
|
44
|
+
VINE: moveId("vine"),
|
|
45
|
+
SYNTHESIS: moveId("synthesis"),
|
|
46
|
+
BLOOM: moveId("bloom"),
|
|
47
|
+
THUNDER_STRIKE: moveId("thunder_strike"),
|
|
48
|
+
SPARK: moveId("spark"),
|
|
49
|
+
RECHARGE: moveId("recharge"),
|
|
50
|
+
GROUNDING: moveId("grounding"),
|
|
51
|
+
PSYSTRIKE: moveId("psystrike"),
|
|
52
|
+
PULSE: moveId("pulse"),
|
|
53
|
+
MEDITATE: moveId("meditate"),
|
|
54
|
+
CLARITY: moveId("clarity"),
|
|
55
|
+
LANDSLIDE: moveId("landslide"),
|
|
56
|
+
THROW: moveId("throw"),
|
|
57
|
+
MEND: moveId("mend"),
|
|
58
|
+
POLISH: moveId("polish"),
|
|
59
|
+
};
|
|
60
|
+
export const POKEMON_STATUS_IDS = {
|
|
61
|
+
BURN: statusId("burn"),
|
|
62
|
+
PARALYSIS: statusId("paralysis"),
|
|
63
|
+
POISON: statusId("poison"),
|
|
64
|
+
SLEEP: statusId("sleep"),
|
|
65
|
+
};
|
|
66
|
+
export const POKEMON_ITEM_IDS = {
|
|
67
|
+
SUPER_POTION: itemId("super_potion"),
|
|
68
|
+
POTION: itemId("potion"),
|
|
69
|
+
APPLE: itemId("apple"),
|
|
70
|
+
MUSHROOM: itemId("mushroom"),
|
|
71
|
+
SHOTGUN: itemId("shotgun"),
|
|
72
|
+
PISTOL: itemId("pistol"),
|
|
73
|
+
RIFFLE: itemId("riffle"),
|
|
74
|
+
SNIPER: itemId("sniper"),
|
|
75
|
+
BLUE_BERRY: itemId("blue-berry"),
|
|
76
|
+
PINK_BERRY: itemId("pink-berry"),
|
|
77
|
+
YELLOW_BERRY: itemId("yellow-berry"),
|
|
78
|
+
GREEN_BERRY: itemId("green-berry"),
|
|
79
|
+
ATTACK_POTION: itemId("attack_potion"),
|
|
80
|
+
DEFENSE_POTION: itemId("defense_potion"),
|
|
81
|
+
SPEED_ELIXIR: itemId("speed_elixir"),
|
|
82
|
+
CRIT_INJECTION: itemId("crit_injection"),
|
|
83
|
+
CHESTO_BERRY: itemId("chesto_berry"),
|
|
84
|
+
};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { POKEMON_TYPE_IDS } from "./
|
|
1
|
+
import { POKEMON_FIGHTER_IDS, POKEMON_TYPE_IDS } from "./constants.js";
|
|
2
2
|
const makeStats = (offense, defense, speed, crit) => ({
|
|
3
3
|
offense,
|
|
4
4
|
defense,
|
|
@@ -8,167 +8,167 @@ const makeStats = (offense, defense, speed, crit) => ({
|
|
|
8
8
|
export const POKEMON_FIGHTERS = [
|
|
9
9
|
// --- TIER 1: AZUL (Suma Atk + Def < 100) ---
|
|
10
10
|
{
|
|
11
|
-
id:
|
|
11
|
+
id: POKEMON_FIGHTER_IDS.PIKACHU,
|
|
12
12
|
name: "Pikachu",
|
|
13
13
|
description: "Rápido y ágil, confía en su velocidad y golpes críticos.",
|
|
14
14
|
img: "pikachu",
|
|
15
|
-
classIds: [POKEMON_TYPE_IDS.
|
|
15
|
+
classIds: [POKEMON_TYPE_IDS.ELECTRIC],
|
|
16
16
|
baseStats: makeStats(55, 35, 90, 15), // Suma: 90
|
|
17
|
-
recommendedMoves: [
|
|
17
|
+
recommendedMoves: [],
|
|
18
18
|
},
|
|
19
19
|
{
|
|
20
|
-
id:
|
|
20
|
+
id: POKEMON_FIGHTER_IDS.CYNDAQUIL,
|
|
21
21
|
name: "Cyndaquil",
|
|
22
22
|
description: "Pequeño volcán en erupción, ofensivo pero frágil.",
|
|
23
23
|
img: "cyndaquil",
|
|
24
|
-
classIds: [POKEMON_TYPE_IDS.
|
|
24
|
+
classIds: [POKEMON_TYPE_IDS.FIRE],
|
|
25
25
|
baseStats: makeStats(52, 38, 75, 10), // Suma: 90
|
|
26
|
-
recommendedMoves: [
|
|
26
|
+
recommendedMoves: [],
|
|
27
27
|
},
|
|
28
28
|
{
|
|
29
|
-
id:
|
|
29
|
+
id: POKEMON_FIGHTER_IDS.SQUIRTLE,
|
|
30
30
|
name: "Squirtle",
|
|
31
31
|
description: "Caparazón resistente, ideal para resistir el daño inicial.",
|
|
32
32
|
img: "squirtle",
|
|
33
|
-
classIds: [POKEMON_TYPE_IDS.
|
|
33
|
+
classIds: [POKEMON_TYPE_IDS.WATER],
|
|
34
34
|
baseStats: makeStats(40, 58, 45, 5), // Suma: 98
|
|
35
|
-
recommendedMoves: [
|
|
35
|
+
recommendedMoves: [],
|
|
36
36
|
},
|
|
37
37
|
{
|
|
38
|
-
id:
|
|
38
|
+
id: POKEMON_FIGHTER_IDS.CHIKORITA,
|
|
39
39
|
name: "Chikorita",
|
|
40
40
|
description: "Soporte natural, destaca por su defensa y persistencia.",
|
|
41
41
|
img: "chikorita",
|
|
42
|
-
classIds: [POKEMON_TYPE_IDS.
|
|
42
|
+
classIds: [POKEMON_TYPE_IDS.GRASS],
|
|
43
43
|
baseStats: makeStats(35, 60, 40, 5), // Suma: 95
|
|
44
|
-
recommendedMoves: [
|
|
44
|
+
recommendedMoves: [],
|
|
45
45
|
},
|
|
46
46
|
{
|
|
47
|
-
id:
|
|
47
|
+
id: POKEMON_FIGHTER_IDS.PSYDUCK,
|
|
48
48
|
name: "Psyduck",
|
|
49
49
|
description: "Dolor de cabeza constante que desata ráfagas psíquicas.",
|
|
50
50
|
img: "psyduck",
|
|
51
|
-
classIds: [POKEMON_TYPE_IDS.
|
|
51
|
+
classIds: [POKEMON_TYPE_IDS.PSYCHIC],
|
|
52
52
|
baseStats: makeStats(50, 40, 60, 12), // Suma: 90
|
|
53
|
-
recommendedMoves: [
|
|
53
|
+
recommendedMoves: [],
|
|
54
54
|
},
|
|
55
55
|
{
|
|
56
|
-
id:
|
|
56
|
+
id: POKEMON_FIGHTER_IDS.GEODUDE,
|
|
57
57
|
name: "Geodude",
|
|
58
58
|
description: "Roca sólida, muy duro de derribar pero extremadamente lento.",
|
|
59
59
|
img: "geodude",
|
|
60
|
-
classIds: [POKEMON_TYPE_IDS.
|
|
60
|
+
classIds: [POKEMON_TYPE_IDS.ROCK],
|
|
61
61
|
baseStats: makeStats(40, 58, 20, 5), // Suma: 98
|
|
62
|
-
recommendedMoves: [
|
|
62
|
+
recommendedMoves: [],
|
|
63
63
|
},
|
|
64
64
|
// --- TIER 2: AMBER (Suma Atk + Def >= 100 y < 120) ---
|
|
65
65
|
{
|
|
66
|
-
id:
|
|
66
|
+
id: POKEMON_FIGHTER_IDS.ELECTABUZZ,
|
|
67
67
|
name: "Electabuzz",
|
|
68
68
|
description: "Duelista eléctrico balanceado con gran capacidad ofensiva.",
|
|
69
69
|
img: "electabuzz",
|
|
70
|
-
classIds: [POKEMON_TYPE_IDS.
|
|
70
|
+
classIds: [POKEMON_TYPE_IDS.ELECTRIC],
|
|
71
71
|
baseStats: makeStats(65, 45, 95, 10), // Suma: 110
|
|
72
|
-
recommendedMoves: [
|
|
72
|
+
recommendedMoves: [],
|
|
73
73
|
},
|
|
74
74
|
{
|
|
75
|
-
id:
|
|
75
|
+
id: POKEMON_FIGHTER_IDS.MAGMORTAR,
|
|
76
76
|
name: "Magmortar",
|
|
77
77
|
description: "Artillería pesada de fuego, daño masivo a media distancia.",
|
|
78
78
|
img: "magmortar",
|
|
79
|
-
classIds: [POKEMON_TYPE_IDS.
|
|
79
|
+
classIds: [POKEMON_TYPE_IDS.FIRE],
|
|
80
80
|
baseStats: makeStats(70, 45, 60, 8), // Suma: 115
|
|
81
|
-
recommendedMoves: [
|
|
81
|
+
recommendedMoves: [],
|
|
82
82
|
},
|
|
83
83
|
{
|
|
84
|
-
id:
|
|
84
|
+
id: POKEMON_FIGHTER_IDS.BLASTOISE,
|
|
85
85
|
name: "Blastoise",
|
|
86
86
|
description: "Tanque con cañones hidráulicos, una muralla ofensiva.",
|
|
87
87
|
img: "blastoise",
|
|
88
|
-
classIds: [POKEMON_TYPE_IDS.
|
|
88
|
+
classIds: [POKEMON_TYPE_IDS.WATER],
|
|
89
89
|
baseStats: makeStats(50, 65, 55, 5), // Suma: 115
|
|
90
|
-
recommendedMoves: [
|
|
90
|
+
recommendedMoves: [],
|
|
91
91
|
},
|
|
92
92
|
{
|
|
93
|
-
id:
|
|
93
|
+
id: POKEMON_FIGHTER_IDS.SCEPTILE,
|
|
94
94
|
name: "Sceptile",
|
|
95
95
|
description: "Depredador de la selva, golpea letalmente desde las sombras.",
|
|
96
96
|
img: "sceptile",
|
|
97
|
-
classIds: [POKEMON_TYPE_IDS.
|
|
97
|
+
classIds: [POKEMON_TYPE_IDS.GRASS],
|
|
98
98
|
baseStats: makeStats(68, 40, 100, 12), // Suma: 108
|
|
99
|
-
recommendedMoves: [
|
|
99
|
+
recommendedMoves: [],
|
|
100
100
|
},
|
|
101
101
|
{
|
|
102
|
-
id:
|
|
102
|
+
id: POKEMON_FIGHTER_IDS.ALAKAZAM,
|
|
103
103
|
name: "Alakazam",
|
|
104
104
|
description: "Coeficiente intelectual de 5000, poder mental puro sin defensa física.",
|
|
105
105
|
img: "alakazam",
|
|
106
|
-
classIds: [POKEMON_TYPE_IDS.
|
|
106
|
+
classIds: [POKEMON_TYPE_IDS.PSYCHIC],
|
|
107
107
|
baseStats: makeStats(75, 30, 95, 8), // Suma: 105
|
|
108
|
-
recommendedMoves: [
|
|
108
|
+
recommendedMoves: [],
|
|
109
109
|
},
|
|
110
110
|
{
|
|
111
|
-
id:
|
|
111
|
+
id: POKEMON_FIGHTER_IDS.ONIX,
|
|
112
112
|
name: "Onix",
|
|
113
113
|
description: "Serpiente de roca gigante, defensa física casi impenetrable.",
|
|
114
114
|
img: "onix",
|
|
115
|
-
classIds: [POKEMON_TYPE_IDS.
|
|
115
|
+
classIds: [POKEMON_TYPE_IDS.ROCK],
|
|
116
116
|
baseStats: makeStats(35, 80, 30, 5), // Suma: 115
|
|
117
|
-
recommendedMoves: [
|
|
117
|
+
recommendedMoves: [],
|
|
118
118
|
},
|
|
119
119
|
// --- TIER 3: RED (Suma Atk + Def >= 120) ---
|
|
120
120
|
{
|
|
121
|
-
id:
|
|
121
|
+
id: POKEMON_FIGHTER_IDS.ZAPDOS,
|
|
122
122
|
name: "Zapdos",
|
|
123
123
|
description: "Ave legendaria del trueno, domina los cielos con poder bruto.",
|
|
124
124
|
img: "zapdos",
|
|
125
|
-
classIds: [POKEMON_TYPE_IDS.
|
|
125
|
+
classIds: [POKEMON_TYPE_IDS.ELECTRIC],
|
|
126
126
|
baseStats: makeStats(70, 55, 85, 10), // Suma: 125
|
|
127
|
-
recommendedMoves: [
|
|
127
|
+
recommendedMoves: [],
|
|
128
128
|
},
|
|
129
129
|
{
|
|
130
|
-
id:
|
|
130
|
+
id: POKEMON_FIGHTER_IDS.CHARIZARD,
|
|
131
131
|
name: "Charizard",
|
|
132
132
|
description: "Dragón de fuego icónico, arrasa con todo a su paso.",
|
|
133
133
|
img: "charizard",
|
|
134
|
-
classIds: [POKEMON_TYPE_IDS.
|
|
134
|
+
classIds: [POKEMON_TYPE_IDS.FIRE],
|
|
135
135
|
baseStats: makeStats(75, 50, 85, 10), // Suma: 125
|
|
136
|
-
recommendedMoves: [
|
|
136
|
+
recommendedMoves: [],
|
|
137
137
|
},
|
|
138
138
|
{
|
|
139
|
-
id:
|
|
139
|
+
id: POKEMON_FIGHTER_IDS.KYOGRE,
|
|
140
140
|
name: "Kyogre",
|
|
141
141
|
description: "Leviatán mítico capaz de inundar el mundo entero.",
|
|
142
142
|
img: "kyogre",
|
|
143
|
-
classIds: [POKEMON_TYPE_IDS.
|
|
143
|
+
classIds: [POKEMON_TYPE_IDS.WATER],
|
|
144
144
|
baseStats: makeStats(75, 65, 60, 8), // Suma: 140
|
|
145
|
-
recommendedMoves: [
|
|
145
|
+
recommendedMoves: [],
|
|
146
146
|
},
|
|
147
147
|
{
|
|
148
|
-
id:
|
|
148
|
+
id: POKEMON_FIGHTER_IDS.VENUSAUR,
|
|
149
149
|
name: "Venusaur",
|
|
150
150
|
description: "Coloso de la jungla, combina toxicidad y fuerza bruta.",
|
|
151
151
|
img: "venusaur",
|
|
152
|
-
classIds: [POKEMON_TYPE_IDS.
|
|
152
|
+
classIds: [POKEMON_TYPE_IDS.GRASS],
|
|
153
153
|
baseStats: makeStats(62, 63, 60, 6), // Suma: 125
|
|
154
|
-
recommendedMoves: [
|
|
154
|
+
recommendedMoves: [],
|
|
155
155
|
},
|
|
156
156
|
{
|
|
157
|
-
id:
|
|
157
|
+
id: POKEMON_FIGHTER_IDS.MEW,
|
|
158
158
|
name: "Mew",
|
|
159
159
|
description: "El ancestro de todos los Pokémon, versátil y místico.",
|
|
160
160
|
img: "mew",
|
|
161
|
-
classIds: [POKEMON_TYPE_IDS.
|
|
161
|
+
classIds: [POKEMON_TYPE_IDS.PSYCHIC],
|
|
162
162
|
baseStats: makeStats(65, 65, 80, 10), // Suma: 130
|
|
163
|
-
recommendedMoves: [
|
|
163
|
+
recommendedMoves: []
|
|
164
164
|
},
|
|
165
165
|
{
|
|
166
|
-
id:
|
|
166
|
+
id: POKEMON_FIGHTER_IDS.GROUDON,
|
|
167
167
|
name: "Groudon",
|
|
168
168
|
description: "Creador de continentes, poder terrestre devastador.",
|
|
169
169
|
img: "groudon",
|
|
170
|
-
classIds: [POKEMON_TYPE_IDS.
|
|
170
|
+
classIds: [POKEMON_TYPE_IDS.ROCK],
|
|
171
171
|
baseStats: makeStats(80, 70, 50, 6), // Suma: 150
|
|
172
|
-
recommendedMoves: [
|
|
172
|
+
recommendedMoves: []
|
|
173
173
|
},
|
|
174
174
|
];
|