getcompetitive 4.0.0 → 4.1.0
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/README.md +14 -3
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -1
- package/dist/tools/analyze.js +1 -1
- package/dist/tools/analyze.js.map +1 -1
- package/dist/tools/doctor.js +249 -0
- package/dist/tools/doctor.js.map +1 -0
- package/dist/tools/matchup.js +434 -0
- package/dist/tools/matchup.js.map +1 -0
- package/dist/tools/meta.js +17 -5
- package/dist/tools/meta.js.map +1 -1
- package/dist/tools/regulations.js +11 -0
- package/dist/tools/regulations.js.map +1 -1
- package/dist/tools/team.js +412 -0
- package/dist/tools/team.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,434 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Matchup preparation: "here is my opponent — prepare me." A pre-game dossier
|
|
3
|
+
* built entirely from the deterministic primitives the rest of the surface
|
|
4
|
+
* shares: usage-derived sets, level-50 Speed math, real damage calculations,
|
|
5
|
+
* and the same bring-four type scoring `analyze_team` uses. The caller narrates;
|
|
6
|
+
* every claim in here carries the number behind it.
|
|
7
|
+
*/
|
|
8
|
+
import { z } from 'zod';
|
|
9
|
+
import { getDex, typeEffectiveness, TYPES18, finalStat, damageResult, learnableMoveIds } from '../dex.js';
|
|
10
|
+
import { REGULATION_SETS, getRegulationSet, setStatus } from '../regulations.js';
|
|
11
|
+
import { getThreatList, findThreat } from '../threats.js';
|
|
12
|
+
import { ok, wrap, requireExists, READ_ONLY_ANNOTATIONS } from '../result.js';
|
|
13
|
+
import { parsedSetSchema, resolveMembers } from './team.js';
|
|
14
|
+
import { planBringFour } from './analyze.js';
|
|
15
|
+
const LEAD_MOVES = ['fakeout', 'tailwind', 'trickroom', 'helpinghand', 'followme', 'ragepowder', 'wideguard'];
|
|
16
|
+
const toKey = (s) => s.toLowerCase().replace(/[^a-z0-9]/g, '');
|
|
17
|
+
export function registerMatchupTool(server) {
|
|
18
|
+
server.registerTool('prepare_matchup', {
|
|
19
|
+
title: 'Prepare a matchup',
|
|
20
|
+
description: 'Prepare a match against a known opponent: "here is their team — what do I bring, and what should I watch for?" A deterministic pre-game dossier composed from the rest of the surface. `likelySets` orders the opponent most-used first, carrying each species\u2019 actual usage-derived set (item, ability, nature, EVs, four moves, usage share) where one exists. `speedTiers` compares real level-50 Speed with the margins spelled out. `relevantDamageCalcs` runs real damage rolls for the key matchups — the team\u2019s hardest hit into their top threats and the threat\u2019s hardest hit back at the member that answers it. `recommendedBringFour` is the same type-scored pick `analyze_team` makes. Leads, win conditions, loss conditions, and the members to preserve are heuristics from movesets, Speed and typing, each labelled with what it can see. Speeds and moves for uncurated opponent species are base-stat or STAB estimates and say so. The caller narrates; every number here is a real calculation or a real usage figure.',
|
|
21
|
+
annotations: READ_ONLY_ANNOTATIONS,
|
|
22
|
+
inputSchema: {
|
|
23
|
+
team: z
|
|
24
|
+
.array(parsedSetSchema)
|
|
25
|
+
.min(1)
|
|
26
|
+
.max(6)
|
|
27
|
+
.describe('Your team, in the canonical shape `parse_team` returns: species with optional moves, ability, nature, evs or championsPoints, and item.'),
|
|
28
|
+
opponent: z
|
|
29
|
+
.array(z.union([z.string().describe('A species name, e.g. "Sneasler", "Salamence-Mega".'), parsedSetSchema]))
|
|
30
|
+
.min(1)
|
|
31
|
+
.max(6)
|
|
32
|
+
.describe('The opponent\u2019s team: species names for what preview shows, or full sets when more is known — full sets widen the damage calculations and speed math.'),
|
|
33
|
+
regulation: z
|
|
34
|
+
.string()
|
|
35
|
+
.optional()
|
|
36
|
+
.describe('Regulation id the match is under, e.g. "m-c"; omitted, the current set is used.'),
|
|
37
|
+
},
|
|
38
|
+
outputSchema: {
|
|
39
|
+
regulation: z.string().describe('Display name of the regulation the matchup was prepared under.'),
|
|
40
|
+
opponent: z.array(z.string()).describe('The opponent team as resolved species names, in the order supplied.'),
|
|
41
|
+
likelySets: z
|
|
42
|
+
.array(z.object({
|
|
43
|
+
species: z.string().describe('Species name.'),
|
|
44
|
+
priority: z
|
|
45
|
+
.number()
|
|
46
|
+
.int()
|
|
47
|
+
.nullable()
|
|
48
|
+
.describe('Rank by usage among the opponent, 1 being the most used; null when the species has no curated set.'),
|
|
49
|
+
usage: z.number().optional().describe('Usage share in percent; present only for curated species.'),
|
|
50
|
+
role: z.string().optional().describe('Competitive role from the curated list; present only for curated species.'),
|
|
51
|
+
item: z.string().optional().describe('Most-played item; present only for curated species.'),
|
|
52
|
+
ability: z.string().optional().describe('Most-played ability; present only for curated species.'),
|
|
53
|
+
nature: z.string().optional().describe('Most-played nature; present only for curated species.'),
|
|
54
|
+
evs: z.record(z.string(), z.number()).optional().describe('Most-played spread, keyed by stat id; present only for curated species.'),
|
|
55
|
+
moves: z.array(z.string()).optional().describe('The four most-played moves; present only for curated species.'),
|
|
56
|
+
note: z.string().optional().describe('"No curated set" — its speed below is a base-stat estimate; present only for uncurated species.'),
|
|
57
|
+
}))
|
|
58
|
+
.describe('One entry per opponent species, ordered most used first.'),
|
|
59
|
+
speedTiers: z
|
|
60
|
+
.object({
|
|
61
|
+
ourOrder: z.array(z.string()).describe('Your members, fastest first, with their real level-50 Speed.'),
|
|
62
|
+
theirOrder: z.array(z.string()).describe('Their members, fastest first; uncurated species use a base-stat estimate and say so in `races`.'),
|
|
63
|
+
races: z
|
|
64
|
+
.array(z.object({
|
|
65
|
+
ours: z.string().describe('Your member.'),
|
|
66
|
+
theirs: z.string().describe('Their member.'),
|
|
67
|
+
ourSpeed: z.number().int().describe('Your member\u2019s level-50 Speed.'),
|
|
68
|
+
theirSpeed: z.number().int().describe('Their Speed; flagged below when estimated.'),
|
|
69
|
+
margin: z.number().int().describe('How many points separate them.'),
|
|
70
|
+
weMoveFirst: z.boolean().describe('True when your member moves first.'),
|
|
71
|
+
estimated: z.boolean().optional().describe('True when their Speed is a base-stat estimate; present only then.'),
|
|
72
|
+
}))
|
|
73
|
+
.describe('Your top two against their top two, up to four races.'),
|
|
74
|
+
})
|
|
75
|
+
.describe('Where the Speed matchups stand.'),
|
|
76
|
+
relevantDamageCalcs: z
|
|
77
|
+
.array(z.object({
|
|
78
|
+
move: z.string().describe('The move rolled.'),
|
|
79
|
+
attacker: z.string().describe('Who attacks.'),
|
|
80
|
+
defender: z.string().describe('Who takes it.'),
|
|
81
|
+
damageRange: z.tuple([z.number(), z.number()]).describe('[minimum, maximum] damage.'),
|
|
82
|
+
koChance: z.string().optional().describe('KO chance text, e.g. "guaranteed 2HKO"; absent when the calc reports none.'),
|
|
83
|
+
description: z.string().describe('The rendered Showdown-format line.'),
|
|
84
|
+
}))
|
|
85
|
+
.describe('The key damage rolls, at most four: your hardest hit into each of their top two threats, and each threat\u2019s hardest hit back at your best answer.'),
|
|
86
|
+
recommendedBringFour: z
|
|
87
|
+
.object({
|
|
88
|
+
opponent: z.array(z.string()).describe('The opponent as resolved species names.'),
|
|
89
|
+
picks: z
|
|
90
|
+
.array(z.object({
|
|
91
|
+
species: z.string().describe('Member to bring.'),
|
|
92
|
+
offensive: z.number().int().describe('Opponent species it hits super-effectively.'),
|
|
93
|
+
defensive: z.number().int().describe('Opponent species that hit it super-effectively on STAB.'),
|
|
94
|
+
score: z.number().int().describe('`offensive` minus `defensive`.'),
|
|
95
|
+
}))
|
|
96
|
+
.describe('The recommended four, best first.'),
|
|
97
|
+
leftBehind: z
|
|
98
|
+
.array(z.object({
|
|
99
|
+
species: z.string().describe('Member left behind.'),
|
|
100
|
+
offensive: z.number().int(),
|
|
101
|
+
defensive: z.number().int(),
|
|
102
|
+
score: z.number().int(),
|
|
103
|
+
}))
|
|
104
|
+
.describe('The members not recommended.'),
|
|
105
|
+
atRiskTypes: z.array(z.string()).describe('Types the recommended four leave stacked and uncovered.'),
|
|
106
|
+
note: z.string().describe('What the pick is scored on and what it cannot see.'),
|
|
107
|
+
})
|
|
108
|
+
.describe('Which four of your six to bring, scored on the types team preview shows.'),
|
|
109
|
+
possibleLeads: z
|
|
110
|
+
.object({
|
|
111
|
+
pairs: z
|
|
112
|
+
.array(z.object({
|
|
113
|
+
support: z.string().describe('The lead support with Fake Out, Tailwind, Trick Room, Helping Hand, Follow Me, Rage Powder or Wide Guard.'),
|
|
114
|
+
attacker: z.string().describe('The fast member that follows it up.'),
|
|
115
|
+
why: z.string().describe('One-line reason the pairing works.'),
|
|
116
|
+
}))
|
|
117
|
+
.describe('Your strongest lead pairings; empty when no member supplied a lead-support move.'),
|
|
118
|
+
note: z.string().describe('The heuristic: supports pair with your fastest attackers; it cannot see their defensive answers.'),
|
|
119
|
+
})
|
|
120
|
+
.describe('What to open with.'),
|
|
121
|
+
dangerousOpponentLeads: z
|
|
122
|
+
.object({
|
|
123
|
+
pairs: z
|
|
124
|
+
.array(z.object({
|
|
125
|
+
support: z.string().describe('Their lead support.'),
|
|
126
|
+
attacker: z.string().describe('Their fast member that follows it up.'),
|
|
127
|
+
why: z.string().describe('One-line reason to watch for it.'),
|
|
128
|
+
}))
|
|
129
|
+
.describe('Their lead pairings, from curated movesets only; empty when none of their species have curated sets.'),
|
|
130
|
+
note: z.string().describe('Only curated species have movesets to read, so an uncurated opponent contributes nothing here.'),
|
|
131
|
+
})
|
|
132
|
+
.describe('What to watch for at team preview.'),
|
|
133
|
+
winConditions: z.array(z.string()).describe('The concrete ways the matchup is won: who answers which threat, and which Speed races are already yours.'),
|
|
134
|
+
lossConditions: z.array(z.string()).describe('The concrete ways it is lost: unanswered threats, losing the Speed race, and stacked weaknesses into their STAB.'),
|
|
135
|
+
pokemonToPreserve: z
|
|
136
|
+
.array(z.string())
|
|
137
|
+
.describe('Members that are the only super-effective answer to a threat — losing one forfeits that matchup.'),
|
|
138
|
+
matchupConfidence: z
|
|
139
|
+
.object({
|
|
140
|
+
score: z.number().int().describe('0-100: mean of threat coverage, Speed advantage and how much of their team is known sets.'),
|
|
141
|
+
note: z.string().describe('What the three components are.'),
|
|
142
|
+
})
|
|
143
|
+
.describe('A transparent read on how well the matchup is understood.'),
|
|
144
|
+
note: z.string().describe('What is estimated rather than known: uncurated opponent speeds and moves, and everything the damage calcs do not model.'),
|
|
145
|
+
},
|
|
146
|
+
}, wrap(async (args) => {
|
|
147
|
+
const dex = getDex(9);
|
|
148
|
+
const regulationId = args.regulation ?? (REGULATION_SETS.find((s) => setStatus(s) === 'current')?.id ?? 'm-c');
|
|
149
|
+
const set = getRegulationSet(regulationId);
|
|
150
|
+
if (!set) {
|
|
151
|
+
throw new Error(`Unknown regulation set "${regulationId}". Available: ${REGULATION_SETS.map((s) => s.name).join(', ')}.`);
|
|
152
|
+
}
|
|
153
|
+
const list = getThreatList(set.id);
|
|
154
|
+
const { members, unknownMoves } = resolveMembers(args.team);
|
|
155
|
+
// --- Opponent resolution: curated where a set exists, base-stat otherwise ---
|
|
156
|
+
const opponents = [];
|
|
157
|
+
for (const entry of args.opponent) {
|
|
158
|
+
const parsed = typeof entry === 'string' ? { species: entry } : entry;
|
|
159
|
+
const sp = dex.species.get(parsed.species);
|
|
160
|
+
requireExists(sp, 'Pokemon species', parsed.species);
|
|
161
|
+
const curatedHit = findThreat(parsed.species, set.id);
|
|
162
|
+
if (curatedHit) {
|
|
163
|
+
const t = curatedHit.threat;
|
|
164
|
+
const form = t.megaForm ?? t.form ?? t.species;
|
|
165
|
+
const fs = dex.species.get(form);
|
|
166
|
+
const moveTypes = t.moves
|
|
167
|
+
.map((mv) => dex.moves.get(mv))
|
|
168
|
+
.filter((m) => m.exists)
|
|
169
|
+
.map((m) => m.type);
|
|
170
|
+
opponents.push({
|
|
171
|
+
species: sp.name,
|
|
172
|
+
types: [...sp.types],
|
|
173
|
+
baseSpe: sp.baseStats.spe,
|
|
174
|
+
speed: finalStat(9, 'spe', fs.baseStats.spe, 31, t.evs?.spe ?? 0, 50, t.nature),
|
|
175
|
+
speedKnown: true,
|
|
176
|
+
moves: t.moves,
|
|
177
|
+
moveTypes,
|
|
178
|
+
curated: { threat: t, form, usage: t.usage, role: t.role },
|
|
179
|
+
});
|
|
180
|
+
}
|
|
181
|
+
else {
|
|
182
|
+
const moveTypes = (parsed.moves ?? [])
|
|
183
|
+
.map((mv) => dex.moves.get(mv))
|
|
184
|
+
.filter((m) => m.exists)
|
|
185
|
+
.map((m) => m.type);
|
|
186
|
+
opponents.push({
|
|
187
|
+
species: sp.name,
|
|
188
|
+
types: [...sp.types],
|
|
189
|
+
baseSpe: sp.baseStats.spe,
|
|
190
|
+
speed: sp.baseStats.spe,
|
|
191
|
+
speedKnown: false,
|
|
192
|
+
moves: parsed.moves ?? [],
|
|
193
|
+
moveTypes,
|
|
194
|
+
});
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
const ranked = [...opponents].sort((a, b) => (b.curated?.usage ?? -1) - (a.curated?.usage ?? -1));
|
|
198
|
+
const likelySets = ranked.map((o, i) => o.curated
|
|
199
|
+
? {
|
|
200
|
+
species: o.curated.form,
|
|
201
|
+
priority: i + 1,
|
|
202
|
+
usage: o.curated.usage,
|
|
203
|
+
role: o.curated.role,
|
|
204
|
+
item: o.curated.threat.item,
|
|
205
|
+
ability: o.curated.threat.ability,
|
|
206
|
+
nature: o.curated.threat.nature,
|
|
207
|
+
evs: o.curated.threat.evs,
|
|
208
|
+
moves: o.curated.threat.moves,
|
|
209
|
+
}
|
|
210
|
+
: { species: o.species, priority: null, note: 'No curated set' });
|
|
211
|
+
// --- Speed tiers ---
|
|
212
|
+
const ourOrder = [...members].sort((a, b) => b.speed - a.speed);
|
|
213
|
+
const theirOrder = [...opponents].sort((a, b) => b.speed - a.speed);
|
|
214
|
+
const races = [];
|
|
215
|
+
for (const theirs of theirOrder.slice(0, 2)) {
|
|
216
|
+
for (const ours of ourOrder.slice(0, 2)) {
|
|
217
|
+
races.push({
|
|
218
|
+
ours: ours.species,
|
|
219
|
+
theirs: theirs.species,
|
|
220
|
+
ourSpeed: ours.speed,
|
|
221
|
+
theirSpeed: theirs.speed,
|
|
222
|
+
margin: Math.abs(ours.speed - theirs.speed),
|
|
223
|
+
weMoveFirst: ours.speed >= theirs.speed,
|
|
224
|
+
...(theirs.speedKnown ? {} : { estimated: true }),
|
|
225
|
+
});
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
// --- Damage calcs: our hardest hit into their top two threats, and back ---
|
|
229
|
+
const calcs = [];
|
|
230
|
+
const topThreats = opponents.filter((o) => o.curated).slice(0, 2);
|
|
231
|
+
for (const threat of topThreats) {
|
|
232
|
+
// Their side: threat's hardest move into our best answer (highest SE coverage on it).
|
|
233
|
+
let bestAnswer = ourOrder[0];
|
|
234
|
+
let bestEff = 0;
|
|
235
|
+
for (const m of members) {
|
|
236
|
+
const eff = Math.max(...[...new Set([...m.types, ...m.moveTypes])].map((t) => typeEffectiveness(t, threat.types, 9)));
|
|
237
|
+
if (eff > bestEff) {
|
|
238
|
+
bestEff = eff;
|
|
239
|
+
bestAnswer = m;
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
let theirMove;
|
|
243
|
+
for (const mv of threat.moves) {
|
|
244
|
+
const m = dex.moves.get(mv);
|
|
245
|
+
const eff = typeEffectiveness(m.type, bestAnswer.types, 9);
|
|
246
|
+
if (!m.exists || eff === 0)
|
|
247
|
+
continue;
|
|
248
|
+
const score = eff * (m.basePower || 0);
|
|
249
|
+
if (score > 0 && (!theirMove || score > theirMove.score))
|
|
250
|
+
theirMove = { name: m.name, score };
|
|
251
|
+
}
|
|
252
|
+
if (theirMove) {
|
|
253
|
+
const res = damageResult(9, {
|
|
254
|
+
species: threat.curated.form,
|
|
255
|
+
level: 50,
|
|
256
|
+
item: threat.curated.threat.item,
|
|
257
|
+
ability: threat.curated.threat.ability,
|
|
258
|
+
nature: threat.curated.threat.nature,
|
|
259
|
+
evs: threat.curated.threat.evs,
|
|
260
|
+
moves: threat.curated.threat.moves,
|
|
261
|
+
}, { ...bestAnswer.set, level: 50 }, theirMove.name);
|
|
262
|
+
calcs.push({
|
|
263
|
+
move: theirMove.name,
|
|
264
|
+
attacker: res.attacker.species,
|
|
265
|
+
defender: res.defender.species,
|
|
266
|
+
damageRange: res.damageRange,
|
|
267
|
+
koChance: res.koChance,
|
|
268
|
+
description: res.description,
|
|
269
|
+
});
|
|
270
|
+
}
|
|
271
|
+
// Our side: hardest hit into the threat.
|
|
272
|
+
const ourMove = await hardestHit(dex, members, threat.types);
|
|
273
|
+
if (ourMove) {
|
|
274
|
+
const res = damageResult(9, { ...ourMove.member.set, level: 50 }, {
|
|
275
|
+
species: threat.curated.form,
|
|
276
|
+
level: 50,
|
|
277
|
+
item: threat.curated.threat.item,
|
|
278
|
+
ability: threat.curated.threat.ability,
|
|
279
|
+
nature: threat.curated.threat.nature,
|
|
280
|
+
evs: threat.curated.threat.evs,
|
|
281
|
+
moves: threat.curated.threat.moves,
|
|
282
|
+
}, ourMove.move);
|
|
283
|
+
calcs.push({
|
|
284
|
+
move: ourMove.move,
|
|
285
|
+
attacker: res.attacker.species,
|
|
286
|
+
defender: res.defender.species,
|
|
287
|
+
damageRange: res.damageRange,
|
|
288
|
+
koChance: res.koChance,
|
|
289
|
+
description: res.description,
|
|
290
|
+
});
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
// --- Bring four, leads, conditions ---
|
|
294
|
+
const bringFour = planBringFour(members.map((m) => ({ species: m.species, types: m.types, moveTypes: m.moveTypes })), opponents.map((o) => ({ name: o.species, types: o.types })));
|
|
295
|
+
const ourSupports = members.filter((m) => m.moves.some((mv) => LEAD_MOVES.includes(toKey(mv))));
|
|
296
|
+
const ourAttackers = [...members].sort((a, b) => b.speed - a.speed).filter((m) => !ourSupports.includes(m)).slice(0, 2);
|
|
297
|
+
const ourPairs = [];
|
|
298
|
+
for (const s of ourSupports.slice(0, 3)) {
|
|
299
|
+
for (const a of ourAttackers.slice(0, 1)) {
|
|
300
|
+
ourPairs.push({
|
|
301
|
+
support: s.species,
|
|
302
|
+
attacker: a.species,
|
|
303
|
+
why: `${s.species} opens with ${s.moves.find((mv) => LEAD_MOVES.includes(toKey(mv)))} to buy ${a.species} (${a.speed} Speed) a free turn.`,
|
|
304
|
+
});
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
const theirSupports = opponents.filter((m) => m.moves.some((mv) => LEAD_MOVES.includes(toKey(mv))));
|
|
308
|
+
const theirAttackers = [...opponents].sort((a, b) => b.speed - a.speed).filter((m) => !theirSupports.includes(m)).slice(0, 2);
|
|
309
|
+
const theirPairs = [];
|
|
310
|
+
for (const s of theirSupports.slice(0, 3)) {
|
|
311
|
+
for (const a of theirAttackers.slice(0, 1)) {
|
|
312
|
+
theirPairs.push({
|
|
313
|
+
support: s.species,
|
|
314
|
+
attacker: a.species,
|
|
315
|
+
why: `Watch for ${s.species} opening with ${s.moves.find((mv) => LEAD_MOVES.includes(toKey(mv)))} into ${a.species}.`,
|
|
316
|
+
});
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
const threatAnswers = opponents.map((o) => {
|
|
320
|
+
let best = 0;
|
|
321
|
+
let by;
|
|
322
|
+
const solvers = [];
|
|
323
|
+
for (const m of members) {
|
|
324
|
+
const eff = Math.max(...[...new Set([...m.types, ...m.moveTypes])].map((t) => typeEffectiveness(t, o.types, 9)));
|
|
325
|
+
if (eff > best) {
|
|
326
|
+
best = eff;
|
|
327
|
+
by = m.species;
|
|
328
|
+
}
|
|
329
|
+
if (eff >= 2)
|
|
330
|
+
solvers.push(m.species);
|
|
331
|
+
}
|
|
332
|
+
return { species: o.species, best, solvers, by };
|
|
333
|
+
});
|
|
334
|
+
const winConditions = [];
|
|
335
|
+
const lossConditions = [];
|
|
336
|
+
const preserve = new Set();
|
|
337
|
+
for (const a of threatAnswers.filter((t) => t.best >= 2).slice(0, 3)) {
|
|
338
|
+
winConditions.push(`${a.by} answers ${a.species} (${a.best}\u00d7 from STAB or a supplied move).`);
|
|
339
|
+
if (a.solvers.length === 1)
|
|
340
|
+
preserve.add(a.solvers[0]);
|
|
341
|
+
}
|
|
342
|
+
for (const a of threatAnswers.filter((t) => t.best < 2).slice(0, 3)) {
|
|
343
|
+
lossConditions.push(`No super-effective answer to ${a.species} (best hit ${a.best}\u00d7).`);
|
|
344
|
+
}
|
|
345
|
+
const ourFastest = ourOrder[0];
|
|
346
|
+
const theirFastest = theirOrder[0];
|
|
347
|
+
if (ourFastest.speed >= theirFastest.speed) {
|
|
348
|
+
winConditions.push(`${ourFastest.species} (${ourFastest.speed}) outruns their fastest, ${theirFastest.species} (${theirFastest.speed}), by ${ourFastest.speed - theirFastest.speed}.`);
|
|
349
|
+
}
|
|
350
|
+
else {
|
|
351
|
+
lossConditions.push(`${theirFastest.species} (${theirFastest.speed}) moves before ${ourFastest.species} (${ourFastest.speed}) by ${theirFastest.speed - ourFastest.speed}.`);
|
|
352
|
+
}
|
|
353
|
+
const theirStab = new Set(opponents.flatMap((o) => o.types));
|
|
354
|
+
for (const t of TYPES18) {
|
|
355
|
+
if (!theirStab.has(t))
|
|
356
|
+
continue;
|
|
357
|
+
let weak = 0;
|
|
358
|
+
for (const m of members)
|
|
359
|
+
if (typeEffectiveness(t, m.types, 9) > 1)
|
|
360
|
+
weak++;
|
|
361
|
+
if (weak >= 2)
|
|
362
|
+
lossConditions.push(`${weak} of your members are weak to ${t}, which their team carries on STAB.`);
|
|
363
|
+
}
|
|
364
|
+
const answered = threatAnswers.filter((t) => t.best >= 2).length;
|
|
365
|
+
const coveragePart = opponents.length ? answered / opponents.length : 0.5;
|
|
366
|
+
const speedPart = ourFastest.speed >= theirFastest.speed ? 1 : 0.5;
|
|
367
|
+
const knownPart = opponents.length ? opponents.filter((o) => o.curated).length / opponents.length : 0;
|
|
368
|
+
const confidence = Math.round(((coveragePart + speedPart + knownPart) / 3) * 100);
|
|
369
|
+
return ok({
|
|
370
|
+
regulation: set.name,
|
|
371
|
+
opponent: opponents.map((o) => o.species),
|
|
372
|
+
likelySets,
|
|
373
|
+
speedTiers: {
|
|
374
|
+
ourOrder: ourOrder.map((m) => m.species),
|
|
375
|
+
theirOrder: theirOrder.map((o) => o.species),
|
|
376
|
+
races,
|
|
377
|
+
},
|
|
378
|
+
relevantDamageCalcs: calcs.slice(0, 4),
|
|
379
|
+
recommendedBringFour: {
|
|
380
|
+
...bringFour,
|
|
381
|
+
note: 'Scored on type alone, which is what team preview gives you: ranked is closed teamlist, so the opponent\u2019s sets are unknown by design. `offensive` counts the opponent species a member hits super-effectively from STAB or a supplied move, `defensive` counts those that hit it back on their STAB. Speed, bulk, damage rolls and abilities are not modelled here \u2014 pair it with `relevantDamageCalcs`.',
|
|
382
|
+
},
|
|
383
|
+
possibleLeads: {
|
|
384
|
+
pairs: ourPairs,
|
|
385
|
+
note: 'Lead supports are members carrying Fake Out, Tailwind, Trick Room, Helping Hand, Follow Me, Rage Powder or Wide Guard, paired with your fastest attackers. It cannot see their defensive answers \u2014 treat it as a starting point, not a lock.',
|
|
386
|
+
},
|
|
387
|
+
dangerousOpponentLeads: {
|
|
388
|
+
pairs: theirPairs,
|
|
389
|
+
note: 'Read only from curated movesets; an opponent species without one contributes nothing here.',
|
|
390
|
+
},
|
|
391
|
+
winConditions: winConditions.slice(0, 4),
|
|
392
|
+
lossConditions: lossConditions.slice(0, 5),
|
|
393
|
+
pokemonToPreserve: [...preserve],
|
|
394
|
+
matchupConfidence: {
|
|
395
|
+
score: confidence,
|
|
396
|
+
note: 'Mean of three components: share of their team your team has a super-effective answer for, whether your fastest outruns theirs, and how much of their team is known curated sets. A rough read, not a metagame rating.',
|
|
397
|
+
},
|
|
398
|
+
...(unknownMoves.length ? { unknownMoves: [...new Set(unknownMoves)] } : {}),
|
|
399
|
+
note: list
|
|
400
|
+
? `Opponent sets come from the ${list.name} usage list (${list.sourceAsOf}); uncurated opponent species use base-stat Speed estimates and contribute no moves, and Choice Scarf is not modelled on either side.`
|
|
401
|
+
: `No usage list exists for ${set.name}, so every opponent species is estimated from base stats and STAB alone.`,
|
|
402
|
+
});
|
|
403
|
+
}));
|
|
404
|
+
}
|
|
405
|
+
/** The team's hardest hit into a target: best super-effective power among supplied moves, else among the learnset. */
|
|
406
|
+
async function hardestHit(dex, members, targetTypes) {
|
|
407
|
+
let best;
|
|
408
|
+
for (const m of members) {
|
|
409
|
+
for (const mv of m.moves) {
|
|
410
|
+
const move = dex.moves.get(mv);
|
|
411
|
+
const eff = move.exists ? typeEffectiveness(move.type, targetTypes, 9) : 0;
|
|
412
|
+
if (eff === 0)
|
|
413
|
+
continue;
|
|
414
|
+
const stab = m.types.includes(move.type) ? 1.5 : 1;
|
|
415
|
+
const score = eff * (move.basePower || 0) * stab;
|
|
416
|
+
if (score > 0 && (!best || score > best.score))
|
|
417
|
+
best = { member: m, move: move.name, score };
|
|
418
|
+
}
|
|
419
|
+
// Learnset fallback for members that listed no moves: the strongest learnable hit.
|
|
420
|
+
const learnable = await learnableMoveIds(dex, dex.species.get(m.species));
|
|
421
|
+
for (const id of learnable) {
|
|
422
|
+
const move = dex.moves.get(id);
|
|
423
|
+
const eff = move.exists ? typeEffectiveness(move.type, targetTypes, 9) : 0;
|
|
424
|
+
if (eff === 0 || !(move.basePower || 0))
|
|
425
|
+
continue;
|
|
426
|
+
const stab = m.types.includes(move.type) ? 1.5 : 1;
|
|
427
|
+
const score = eff * move.basePower * stab;
|
|
428
|
+
if (!best || score > best.score)
|
|
429
|
+
best = { member: m, move: move.name, score };
|
|
430
|
+
}
|
|
431
|
+
}
|
|
432
|
+
return best ? { member: best.member, move: best.move } : undefined;
|
|
433
|
+
}
|
|
434
|
+
//# sourceMappingURL=matchup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"matchup.js","sourceRoot":"","sources":["../../src/tools/matchup.ts"],"names":[],"mappings":"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"}
|
package/dist/tools/meta.js
CHANGED
|
@@ -202,7 +202,7 @@ export function registerMetaTools(server) {
|
|
|
202
202
|
}));
|
|
203
203
|
server.registerTool('get_set', {
|
|
204
204
|
title: 'Get standard competitive set',
|
|
205
|
-
description: 'Return one species\u2019 most-played competitive set: item, ability (with the Mega form and ability for Mega sets), nature, EVs, the four most-played moves, role, tier, usage share, the usage figures behind it, and the set as a Showdown-format `paste` ready to copy into a team builder or paste host, with EVs in Champions stat points. Pass an array of species to fetch several sets in one call, which answers as `sets` \u2014 use that rather than calling once per species. Reach for it when asked what a species usually runs; `
|
|
205
|
+
description: 'Return one species\u2019 most-played competitive set: item, ability (with the Mega form and ability for Mega sets), nature, EVs, the four most-played moves, role, tier, usage share, the usage figures behind it, and the set as a Showdown-format `paste` ready to copy into a team builder or paste host, with EVs in Champions stat points. Sets exist for the ranked species of each regulation only \u2014 `list_threats` lists exactly which, and `list_regulations` gives each set\u2019s `threatCount` \u2014 so check there before asking for a species outside the meta; a miss returns an isError naming that coverage. Pass an array of species to fetch several sets in one call, which answers as `sets` \u2014 use that rather than calling once per species. Reach for it when asked what a species usually runs; `check_legality` validates teams. Species match is case-insensitive and ignores punctuation, and resolves forms, so "Indeedee-F" and "Salamence-Mega" find the same sets as "Indeedee" and "Salamence"; pass `regulation` (e.g. "m-c") to scope to one list. Usage-derived from Limitless VGC tournament teams, not editorial opinion; read-only, offline, no network or auth.',
|
|
206
206
|
annotations: READ_ONLY_ANNOTATIONS,
|
|
207
207
|
inputSchema: {
|
|
208
208
|
species: z
|
|
@@ -234,12 +234,24 @@ export function registerMetaTools(server) {
|
|
|
234
234
|
.describe('One entry per requested species, in the order supplied; present only when `species` was an array.'),
|
|
235
235
|
},
|
|
236
236
|
}, wrap(async (args) => {
|
|
237
|
-
|
|
238
|
-
|
|
237
|
+
const known = Object.values(THREAT_LISTS);
|
|
238
|
+
const scoped = args.regulation ? getThreatList(args.regulation) : undefined;
|
|
239
|
+
if (args.regulation && !scoped) {
|
|
240
|
+
// A different failure from a missing species: usage needs a closed sample
|
|
241
|
+
// window, so a regulation with no list has no sets at all to return.
|
|
242
|
+
throw new Error(`No threat list for "${args.regulation}", so there are no sets to return. Available: ${known.map((l) => `${l.name} (${l.regulation})`).join(', ')}.`);
|
|
243
|
+
}
|
|
244
|
+
// Sets exist only for the ranked species, so a miss is a question the caller
|
|
245
|
+
// could have answered before asking. Name the coverage and the call that
|
|
246
|
+
// lists it, rather than only naming the tool that would have said so.
|
|
247
|
+
const coverage = scoped
|
|
248
|
+
? `${scoped.name}'s ${scoped.threats.length} ranked species`
|
|
249
|
+
: `the ${known.reduce((n, l) => n + l.threats.length, 0)} ranked species across ${known.length} regulation${known.length === 1 ? '' : 's'}`;
|
|
239
250
|
const lookup = (name) => {
|
|
240
251
|
const hit = findThreat(name, args.regulation);
|
|
241
|
-
if (!hit)
|
|
242
|
-
throw new Error(`No set for "${name}"
|
|
252
|
+
if (!hit) {
|
|
253
|
+
throw new Error(`No curated set for "${name}"; sets exist for ${coverage} only, and \`list_threats\` lists them.`);
|
|
254
|
+
}
|
|
243
255
|
return {
|
|
244
256
|
regulation: hit.list.name,
|
|
245
257
|
sourceAsOf: hit.list.sourceAsOf,
|
package/dist/tools/meta.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"meta.js","sourceRoot":"","sources":["../../src/tools/meta.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"meta.js","sourceRoot":"","sources":["../../src/tools/meta.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,8 +5,10 @@
|
|
|
5
5
|
import { z } from 'zod';
|
|
6
6
|
import { getDex, learnableMoveIds, toID } from '../dex.js';
|
|
7
7
|
import { REGULATION_SETS, getRegulationSet, setStatus, } from '../regulations.js';
|
|
8
|
+
import { THREAT_LISTS } from '../threats.js';
|
|
8
9
|
import { READ_ONLY_ANNOTATIONS, ok, wrap } from '../result.js';
|
|
9
10
|
function summarize(set) {
|
|
11
|
+
const list = THREAT_LISTS[set.id];
|
|
10
12
|
return {
|
|
11
13
|
id: set.id,
|
|
12
14
|
name: set.name,
|
|
@@ -16,6 +18,10 @@ function summarize(set) {
|
|
|
16
18
|
end: set.end,
|
|
17
19
|
eligibleCount: set.eligibleSpecies.length,
|
|
18
20
|
megaCount: set.megaEvolution.species.length,
|
|
21
|
+
// Usage needs a closed sample window, so a past regulation has no threat list.
|
|
22
|
+
// Announcing that here keeps a caller from spending a round trip finding out
|
|
23
|
+
// through `list_threats`, which can only answer for the sets that have one.
|
|
24
|
+
...(list ? { threatCount: list.threats.length } : {}),
|
|
19
25
|
notes: set.notes,
|
|
20
26
|
};
|
|
21
27
|
}
|
|
@@ -34,6 +40,11 @@ const regulationSummaryOutput = {
|
|
|
34
40
|
end: z.string().describe('Last day the set is in force, ISO 8601 (inclusive).'),
|
|
35
41
|
eligibleCount: z.number().describe('How many base species are on the legal roster.'),
|
|
36
42
|
megaCount: z.number().describe('How many base species on the roster may Mega Evolve.'),
|
|
43
|
+
threatCount: z
|
|
44
|
+
.number()
|
|
45
|
+
.int()
|
|
46
|
+
.optional()
|
|
47
|
+
.describe('How many species have a usage-derived standard set in this regulation\u2019s threat list, i.e. how many `get_set` can answer for; absent for a set with no usage sample, where `list_threats` has nothing to list.'),
|
|
37
48
|
notes: z.string().describe('Curator summary of the format and what it changed over the previous set.'),
|
|
38
49
|
};
|
|
39
50
|
function detail(set) {
|