turn-durations

Converts mainline Pokémon turn counts into millisecond durations for a real-time battle engine.

2|1|Updated Jun 28, 2026
One-click install
npx skills add https://github.com/lxsmnsyc/overwander --skill turn-durations-lxsmnsyc
Or copy as Structured Prompt for Agent▼
Please help me install this Agent Skill.
Skill: turn-durations
Source: https://github.com/lxsmnsyc/overwander/tree/main/.agents/skills/turn-durations
Command: npx skills add https://github.com/lxsmnsyc/overwander --skill turn-durations-lxsmnsyc

SYSTEM DOCUMENTATION & REQUIREMENTS

What problem does it solve? A real-time battle engine has no turns, yet mainline Pokémon mechanics are all specified in turns. This Skill enforces a single conversion rule — one turn equals 2000 ms via the turns() helper in src/battle/turn.ts — so durations stay consistent, testable, and traceable to their mainline source instead of scattered as bare millisecond literals. ## Core Features & Use Cases - Canonical conversion: Import turns from src/battle/turn.ts and write turns(4) for a four-turn status rather than a bare 8000. - Residual ticking: Per-turn chip damage and healing tick on RESIDUAL_TICK, which is exactly one turn; no second interval is invented for new effects. - Faithful mechanics: Turn counts are looked up in the modern games (as with PokeAPI move data), expectation-based conversions (e.g. freeze thawing at a 20% roll per turn becomes five turns) are documented in comments, and item multipliers like Light Clay (×1.6) and Grip Claw (×1.75) stay as multipliers on the converted base. - Use Case: When implementing a screen that holds for five turns in the main games, write turns(5) so a later change to the exchange rate updates every duration and every test assertion at once. ## Quick Start When adding a duration taken from the main games, import turns from src/battle/turn.ts and write it as turns(n) with the mainline turn count instead of a millisecond literal.

Frequently Asked Questions about turn-durations

High-intent search queries and answers about installing and using this skill.

FAQPage Schema
How do I convert Pokémon turn durations to milliseconds in a real-time battle engine?▼

Import turns from src/battle/turn.ts and write the mainline turn count, such as turns(4) for a four-turn status. The exchange rate is one turn equals 2000 ms, so never write a bare millisecond literal like 8000.

How should per-turn residual damage tick in a real-time engine?▼

Residual effects tick on RESIDUAL_TICK, which is exactly one turn (2000 ms). Do not invent a separate interval for a new chipping effect; every per-turn residual shares the same tick.

How are item multipliers like Light Clay and Grip Claw handled with turn durations?▼

Multipliers stay multipliers: convert the base turn count first, then apply the factor. Light Clay is ×1.6 because five turns become eight, and Grip Claw is ×1.75 because four turns become seven.

Which timings should not use the turns() conversion?▼

Engine-native timings stay plain milliseconds: the gap between a move firing and landing, projectile flight, the AI's rest after a cast, and frame-derived cast time. These were never mainline turn counts, so turns() would falsely claim a mainline source.

How are statuses without a fixed turn length converted?▼

Convert through the expectation from the modern games and document the reasoning in a comment. For example, freeze thaws on a 20% roll per turn, so it is converted as five turns.