fertig-classic-games/assets/gamedata/peggle/powers.md

53 lines
3.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Peggle Powers
Every power lives in the `POWERS` map in `src/games/peggle/PeggleLogic.js`
(id, display name, trigger type, player-facing description, and tuning
`params`). A level grants a power by setting `powerId` on its entry in
`levels.json`; hitting a green peg charges/fires it. Any friend can be paired
with any power — the mapping below is the intended one.
**Trigger types:**
- **instant** — fires the moment the green peg is hit
- **next ball** — banks a charge; applied to your next launched ball
- **current ball** — applied to the ball in flight when the green peg is hit
- **charge** — banks a lasting effect (multiple shots, or "next time X happens")
## Live powers (levels 125)
| Friend | Power (`powerId`) | Trigger | What it does |
|---|---|---|---|
| Ethel | Super Guide (`superguide`) | next 3 balls | The aim guide extends through extra bounces, showing where the ball goes after it hits pegs |
| Kona | Multiball (`multiball`) | instant | Kona fetches three more balls — they spawn at the current ball's position, fanned out (mirrored + ±18°) |
| Zanthor | Space Blast (`spaceblast`) | instant | The green peg explodes, instantly lighting and scoring every peg within 150px |
| Fireball | Fireball (`fireball`) | next ball | The ball is tripled in size and blazes straight through pegs without bouncing, lighting everything it touches |
| Victor | Zen Ball (`zenball`) | next 3 balls per hit, stacking | Each shot is silently nudged to the best-scoring angle within ±6° of your aim |
## Powers awaiting their friends
| Friend | Power (`powerId`) | Trigger | What it does |
|---|---|---|---|
| The Smasher | Body Slam (`bodyslam`) | next ball | The ball becomes a massive slam ball (×1.6 size) that barely slows down when it hits pegs |
| DV-8-2303 | Laser Sweep (`lasergrid`) | instant | The green peg fires a horizontal laser across the board, lighting every peg in its row |
| Steve | Beam Up (`beamup`) | current ball | If the ball falls off the bottom, a beam catches it and drops it back in from the top at the same spot (once per charge) |
| Terry | Meteor Strike (`meteor`) | instant | A meteor crashes down through the green peg, lighting every peg in its column |
| Nicole | Overclock (`overclock`) | instant | The system is hacked — every peg scores DOUBLE for the rest of the shot |
| Gerome | Extreme Ball (`extremeball`) | next ball | Launches at ×1.45 speed, and walls never absorb any of its speed |
| Blackwind | Cannonball (`cannonball`) | current ball | The ball turns to iron and plows straight through the next 3 pegs it strikes |
| Maurice | Beaver Dam (`beaverdam`) | 3 shots | The free-ball bucket is dammed up to nearly double width (×1.9) for the next 3 shots |
| Kage | Shadow Slash (`shadowslash`) | instant | A blade of shadow slashes an X through the green peg, lighting pegs along both diagonals |
| Schooner | Tailwind (`tailwind`) | next ball | The ball rides the sea breeze at ~half gravity — long, floaty, controllable arcs |
| Aiko | Cosmic Bloom (`cosmicbloom`) | instant | Alien spores drift out — 2 random blue pegs bloom into new GREEN power pegs (hitting those charges the power again) |
| Nadia | Rewind (`rewind`) | charge | The next ball that drains without being caught is rewound back into your reserve |
## Adding a new power
1. Add an entry to `POWERS` in `src/games/peggle/PeggleLogic.js` (put tuning
values in `params`) and implement its behavior in `applyPower` (and, if it
changes ball physics, via per-ball flags set in `launchBall`/`substep`).
2. Add its banner/FX/sound to `onPowerFired` (and an event case if it has a
custom effect) in `src/games/peggle/PeggleGame.js`, plus a status line in
`updatePowerHud` if it banks charges.
3. Add a check-cluster to `tools/verifyPeggle.js`.
4. Reference it from a level's `powerId` — the editor's power dropdown picks
it up automatically.