Spaces:
Paused
Paused
Commit History
-
Touch / mobile controls β play the whole game by fingerβ
Claude +1: Claude Opus 4.8Unverified signatureA full one-button, no-hover touch scheme layered alongside the existing mouse + keyboard path, plus a responsive HUD so a phone or tablet in landscape (the natural RTS orientation) is fully playable. Gestures (input.js touch handlers): β’ tap your unit/building ... select it (double-tap = all of that type on screen) β’ tap elsewhere ........... command the selection β move Β· tap a foe to attack Β· tap a node to gather Β· set a producing building's rally β’ one-finger drag ......... box-select your units β’ two-finger drag ......... pan Β· pinch ...... zoom (anchored on the pinch) β’ Build / Attack-Move ..... tap places the building / commits the attack-move The touch and mouse paths now share one set of helpers (applyBoxSelection / commandAt / selectSameTypeAt), so a finger-tap issues byte-identical orders to a right-click β the mouse handlers were refactored onto the same helpers with no behaviour change. camera.js: dragCamera + pinchZoomPan β pure vβ¦e7bc56d -
Configurable skirmish: AI speed, map size, and resource abundanceβ
Claude +1: Claude Fable 5Unverified signatureThe splash screen now configures the match before you pick a world. AI speed is a 1β150 actions-per-minute cap on the opponent. Every command it issues β produce a unit, place a building, expand, research, send the scout β spends one action from a budget that accrues at APM/60 per second and caps at a few seconds' burst; when it runs out it waits. So a low setting is a sluggish, forgiving foe and a high one is relentless. The attack commit is deliberately exempt, so even a crawling AI still throws its army at you and the game always resolves. Default (and every headless test) is unthrottled, so existing behaviour is unchanged. Map size scales the field self-similarly β Small (1600Γ1000), Standard, Large, Gigantic (4Γ) β with more hidden caches seeded into the bigger contested space, and the camera can now zoom out far enough to take a Gigantic map fully into view (and opens on your own base, not the map centre). At sizeMult 1 the layout is byte-identical to the original. Resources (β¦19ca109
-
Tier 1: camera + zoom, fog of war, and a Skiff-countering unitβ
Claude +1: Claude Sonnet 5Unverified signatureThree independent features, the biggest-leverage items from a brainstormed improvement list, built in dependency order (fog of war's reveal effect only means something once you can actually pan around to see it). ## Camera + zoom (camera.js, new) The whole 1600x1000 map used to be squeezed into one screen β units were tiny dots. The canvas is now a fixed-resolution viewport with a camera (pan via WASD/arrows, zoom via mouse wheel toward the cursor, clamped to map bounds) instead of a 1:1 map-to-canvas mapping. render.js draws through a camera transform; input.js's toWorld() converts screen->world through it too, so selection/commands keep working exactly as before. Fixed a latent bug while wiring this up: attachInput() was never cleaning up its event listeners, so every "Choose another battlefield" replay stacked a fresh full set on the same canvas/window β added an AbortController-based destroy(). ## Fog of war (engine/fog.js, new) A coarse grid tracks which cells are currently inβ¦34ea8bc