Extraído de ~/pokeidle-web-staging (staging). Dados: data/creatures.json. Fórmulas: lib/combat.ts, lib/hunt.ts, lib/pokemon.ts, server/combat.ts, lib/pxg-pvp.ts, lib/pvp-sim.ts, lib/gym-battle.ts.
Na HUNT (PvE) a speed NÃO altera a frequência de ataque. O combate é por turnos fixos: a cada turno o aliado bate 1×, o selvagem revida 1×. Existe um relógio virtual só para os cooldowns:
A speed é calculada como stat (statReal) e guardada no Pokémon, mas não entra no loop de dano da hunt — todos batem 1×/turno independentemente da velocidade.
speed vira velocidade de locomoção (ms por tile) e prioridade de quem age primeiro — não reduz cooldown de golpe. Ver a seção PvP abaixo.server/combat.ts (loop de turno) · lib/pxg-pvp.ts:66-84 · lib/pvp-sim.ts:84
Núcleo estilo Pokémon (lib/combat.ts → damage()). Sem crítico na HUNT, de propósito (Rafael 30/07):
Os stats A/D/HP vêm de statReal (nível + IV + qualidade):
Na HUNT o dano recebe multiplicadores fixos (server/combat.ts) + amplificação de tipo (huntTypeAmp, lib/combat.ts):
O aliado luta no nível do TREINADOR (capado nele), não no nível do bicho — allyCombat() em lib/hunt.ts.
lib/combat.ts damage()/huntTypeAmp() · lib/pokemon.ts:93 combatHp · lib/hunt.ts allyCombat
Cada golpe tem cooldownMs no catálogo (creatures.json). No combate é um mapa por NOME do golpe:
Não é afetado por speed. É por golpe (não compartilhado entre golpes diferentes). Na HUNT usa noBasic:true: se todos os golpes estão em cooldown, reusa a melhor skill (não cai no Ataque Básico fraco).
server/combat.ts pickAttack calls · lib/combat.ts:47 pickAttack() · lib/pxg-pvp.ts:137
Não existe um CAP de 4 no código. Nenhum arquivo corta o moveset em 4. Procurei em lib/hunt.ts, lib/combat.ts, server/combat.ts, server/boss-arena.ts, lib/gym-battle.ts, lib/pvp-sim.ts, lib/pxg-pvp.ts, scripts/, app/ e server/*.mjs — não há slice(0,4) nem seleção de "as 4 melhores". O jogo usa TODOS os golpes já aprendidos:
O "4 skills" é uma convenção de DADO, não de código. No data/creatures.json (349 espécies): 273 têm exatamente 4 golpes. As demais têm menos (Ditto 0, Magikarp 1, Caterpie/Weedle 3) ou mais — 72 espécies têm 5 a 11 golpes (toda a leva de Gen 3 / Hoenn 132xx–133xx e Riolu/Lucario 13447/13448, que entraram com o moveset completo do idleworld e nunca foram aparadas). O corte "pra 4" foi feito editando o dado das 273 originais, não no motor — confirmado pelo comentário lib/pxg-pvp.ts:315: "quando os movesets foram cortados pra 4 golpes".
learnLevel ≤ nível.Qual dos golpes SAI a cada ataque (a "rotação"): entre os que estão fora de cooldown, o de maior dano efetivo contra o alvo. lib/combat.ts:71-86 pickAttack:
Só 1 golpe no catálogo tem flag de área (aoe): "10,000,000 Volt Thunderbolt" do Ash Pikachu (dex 10025). O peso de área (2,5) entra no mesmo score, então nunca ignora a regra de tipo (imune continua imune). lib/combat.ts:74-86
| Pokémon | Tipos | Arquétipo PvP | Golpes | Maior power | Skills (nome · dano · cd) |
|---|
Clique numa linha (ou aperte Enter/Espaço com ela focada) para expandir as skills com nome · tipo · categoria · dano (power) · cooldown · nível que aprende. A coluna resumo mostra até 4 na própria linha.
Modo usado só no Duelo de Ginásio 6v6 (ao vivo, com troca de Pokémon) e no X1 na cidade (pré-computado). PvE não passa por aqui (hunt/boss/líder/altar ficam em lib/combat.ts). Motor em tempo contínuo inspirado no engine TFS do PXG — não há turnos: cada criatura tem dois relógios independentes, um de passo (andar) e um de ataque. Andar nunca custa golpe e atacar nunca custa passo — é daí que emerge o kiting. lib/pxg-pvp.ts:1-25 · lib/pvp-sim.ts:1-13
Sai do eixo spAtk vs atk (o mesmo que decide a categoria do básico):
BRAWLER_SPECIES = {125} (Electabuzz) — magia elétrica é ranged mas o design é brawler. pxg-pvp.ts:57range 0) · PHYSICAL = adjacente (range 1). pxg-pvp.ts:41pxg-pvp.ts:34-58 · pvp-sim.ts:50 mkSide
A speed (stat já calculado) vira o tempo pra atravessar 1 tile. Fórmula do TFS (creature.cpp:1393):
Depois o passo é ajustado por arquétipo (piso/teto pra nunca teleportar):
| Constantes da curva | SPEED_A 857.36 · SPEED_B 261.29 · SPEED_C −4795.01 · GROUND 150 |
| Passo diagonal | × 3 (DIAGONAL_MULT) — diagonal custa 3 passos |
| Piso melee / ranged | STEP_MELEE_FLOOR 350 · STEP_RANGED_FLOOR 400 |
| Teto do passo | STEP_CEIL 900 |
| Bônus de passo melee | × 0.90 (MELEE_STEP_MULT) — anda 10% + rápido que o stat |
| Trava de animação | ATTACK_LOCK_MS 350 — ao atacar, congela o passo 350 ms |
| Perseguição (fechar gap) | passo = max(CHASE_FLOOR 275, round(passo_do_alvo · CHASE_MULT 0.62)) → ~38% + rápido, garante que o melee pega o kiter |
pxg-pvp.ts:62-111 · pvp-sim.ts:52-53,109-111
O ataque não é avaliado a todo instante. Roda no "think" a cada 1 s e o golpe pronto ainda passa por um sorteio de 40% (o valor do datapack inteiro do PXG):
nextThink==0), o golpe sai sem o sorteio de 40% — a luta já começa soltando magia. pvp-sim.ts:130order = a.speed >= b.speed ? [a,b] : [b,a]. pvp-sim.ts:84DODGE_CHANCE 0.08) → dano 0 + "Dodge!". pxg-pvp.ts:101-103 · pvp-sim.ts:142pxg-pvp.ts:74-84 · pvp-sim.ts:123-146
No PvP cada magia ganha um piso de cooldown proporcional ao power (o dado no creatures.json fica intacto — só o PvP sente):
O Ataque Básico do PvP é derivado da espécie:
Ex.: Machamp (atk 130) → básico power 65 (rivaliza com skill) · Alakazam (atk 50) → power 25 (só chip).
pxg-pvp.ts:113-138 · pvp-sim.ts:140,144-146
Diferente do PvE: efetividade é ±1.5 FLAT (não ×2/×4), dual-type não empilha, sem STAB, e a defesa amortece de leve:
| PVP_DMG_SCALE | 6.0 — subiu de 4.5 quando os movesets foram cortados pra 4 (menos golpes = luta mais longa) |
| DMG_SCALE (pvp-sim) | 0.5 |
| crit / block | 1% cada (crit ×1.5 · block ×0) |
| dodge | 8% → dano 0 |
pxg-pvp.ts:300-330 (dano) :318 (scale) · pvp-sim.ts:142-146,154
| HP do lutador | combatHp = max(24, round(hpStat · 12)) pros dois lados gym-battle.ts:36 · pokemon.ts:93 |
| HP e cooldown persistem | viajam com o POKÉMON no 6v6: quem sai e volta mantém vida e recarga pvp-sim.ts:41-47,69-76 |
| Escolha de golpe | pickAttackAt: entre os PRONTOS que alcançam a distância, maior power·(A/D)·flatEff; nenhum → básico se alcança, senão anda pxg-pvp.ts:287-298 |
| Alcance | usableAt: ranged sempre · melee só a Chebyshev ≤ 1 (adjacente, inclui diagonal) pxg-pvp.ts:282-284 |
| Arena | ARENA_RADIUS 4 · START_GAP 4 · SIM_DT 50 ms · SIM_MAX_MS 90000 pxg-pvp.ts:333-338 |
| Distância que cada arquétipo mantém | KITER 5 · HYBRID 1 · MELEE 1 (PREFER) · KITE_TRIGGER 3 pxg-pvp.ts:52,60 |
| Fuga por vida baixa | desligada: FLEE_HP = 0 (luta até o fim; só "foge" com HP≤0 = morto). FLEE_DIST 3 pxg-pvp.ts:161-163 |
| Movimento vivo | JOCKEY_MS 1600 (circula o alvo) · SKIRMISH_MS 2200 (hit-and-run) — na v3 o tick só usa jockey, sem dash pxg-pvp.ts:209,217 · pvp-sim.ts:95,105 |
| Investida (dash) | constantes existem (DASH_CD_MS 9000 · DASH_TILES 3) mas desativadas na v3 — aproximação 100% gradual pxg-pvp.ts:262-263 · pvp-sim.ts:95-98 |
| Talentos de guild | NÃO valem no PvP — a ausência do import é o gate pvp-sim.ts:9-13 |
| Pokémon | Tipos | Arq. | Speed | Atk | SpAtk | Def | SpDef | HP | BST |
|---|
| Golpe | Tipo | Categoria | Power | Cooldown | CD PvP | Pwr/s | Nível | Espécies |
|---|