Hacktoberfest 2026: the issues maintainers tagged for October, open and beginner-friendly. Browse Hacktoberfest issues

Power-ups

Open
#114 0 comments 0 reactions 0 assignees View on GitHub

Maintainers usually reply within 1 day

Nobody has claimed this yet.

Assessment

Difficulty
4/5
Estimated time
3-5 days
Newbie friendliness
42/100
Issue type
Feature
Clarity
Mostly clear
Activity status
Quiet
Domain
game-dev

Research direction

Start with server/src/types/environment.ts and Environment.tick(), then trace the collision and event flow in server/src/util/simulation.ts, ui/src/util/simulate.ts, ui/src/util/arenaReducer.ts, and ui/src/App.tsx. Use the seeded PRNG and the existing simulation and reducer tests as the starting points. Done means power-ups spawn, are collected or expire with effects applied, and the server, client simulation, events, rendering, and relevant tests stay consistent.

Written by the indexing model from the issue text.

Description

enhancement priority: low

Pickups for health, temporary shield, speed, or rapid reload that spawn in the arena. Cheap to add, big on dynamism.

Effort: S–M


Migrated from ENHANCEMENTS.md (§2 Gameplay & fun).

Implementation notes

Priority: low — Fun/gameplay-variety feature with no effect on core UX for most users, stability, or correctness — pure enhancement, not core-path.

Purpose

Power-ups (health, shield, speed boost, rapid reload) add tactical variety and reward map awareness/positioning, giving bot authors a new strategic axis beyond pure aim/movement code — pure user-facing value, no stability motivation.

Implementation approach
  • Model power-ups as new simulation-owned entities alongside Bullet/Bot in server/src/types/environment.ts (e.g. a PowerUp type with id, x, y, kind, expiresAt), spawned/despawned in Environment.tick() using the existing seeded PRNG (env.random(), util/random.ts) so spawns stay deterministic and reproducible via setSeed/set_arena_seed.
  • Extend server/src/util/simulation.ts's run() proximity-check pattern (it already does bot-vs-bot and bullet-vs-bot distance checks with Math.pow/distance < 32) to add pickup-vs-bot collision, applying effects to bot.health, bot.speedMax, bot.turret.loaded, or a new bot.shield field.
  • Mirror the same math in ui/src/util/simulate.ts (client interpolation) exactly as bullets/movement are mirrored today — the file's header comment explicitly calls out keeping it consistent with the server.
  • Add new SSE event types (powerUpSpawned, powerUpCollected, powerUpExpired) alongside bulletFired/botDamaged in the emit sites, and matching cases in ui/src/util/arenaReducer.ts (switch-like if (data.type === ...) chain) and rendering in the arena SVG (ui/src/App.tsx).
  • No new bot-facing API is strictly required (effects are passive), but optionally expose bot.getNearbyPowerUps()/shield status via compiler.ts following the exposeGetter/_bot_* pattern used for bot.getHealth.
  • buildArenaStatus (server/src/util/arenaStatus.ts) and buildMatchSummary should include active power-ups/shield state in the snapshot.
Key details to plan
  • No DB changes needed if power-ups are transient/in-memory only (per-match state on Environment), avoiding the migrations gap (#142).
  • Determinism: spawn timing/location must derive from env.random(), not Math.random(), to preserve seeded-match reproducibility.
  • Sandbox: no new ivm surface if effects are host-applied only; if bot-visible getters are added, follow existing exposeGetter/ExternalCopy patterns — never expose ivm itself.
  • Testing: extend server/test/simulation.test.ts (mock-tank physics) for pickup collision/effect application, and ui/test's arenaReducer.test.ts for the new event cases; simulationIntegration.test.ts if a bot-visible API is added.
  • Rate/resource impact is negligible (no new timers/isolates).
  • Effort S–M as scoped; risk is low-moderate mainly from keeping simulation.ts/simulate.ts in sync.
Dominant language
TypeScript
Stars
0
Forks
0
Avg merge
8m
Merged PRs (30d)
8

Getting set up

Open in Codespaces

Starts the project's dev container in your browser, under your own GitHub account.

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from LeeAdcock/robocodeJs.com

All issues in LeeAdcock/robocodeJs.com

Similar issues

More TypeScript issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.