Vacuum: pick up what you click, blow out what's in hand (t20)
A drag takes only the material it starts on (Shift: everything). The blow selection is the hand: click or Q/E for one material, Ctrl+click for a mix. Empty materials leave the hand, an empty hand blows nothing, and a pickup fills an empty hand. Removes the pick-up marks and the F vacuum menu. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
+12
-2
@@ -43,7 +43,7 @@ decides something new, add it under "Decisions" with the date.
|
||||
## The core loop
|
||||
|
||||
1. Dig with the resonance drill. Rock shatters into loose grains: rubble, ore, coal, clay, sand.
|
||||
2. Vacuum up what you want (mark materials in the vacuum menu, F, to take only those), and blow it out where you need it.
|
||||
2. Vacuum up what you want (a drag takes only the material it starts on), and blow out what's in hand where you need it.
|
||||
3. Build a furnace from wall blocks, with a grate floor over a mold. Charge it with ore and coal,
|
||||
light it, and let the molten metal run into the mold.
|
||||
4. Bars drop out of the bottom of the mold; collect them and sell them at the trade dock, or fill buyers' orders, which pay more.
|
||||
@@ -128,7 +128,8 @@ above, including:
|
||||
- **Fans melt like copper (1085°C).** Put the fan outside the furnace, blowing in through a grate.
|
||||
The game warns when a fan gets close to melting.
|
||||
- **The vacuum takes only marked materials** once any are marked, even if the drag starts on
|
||||
something else. The t6 controls below replace the shared ticks; t16 replaces t6's modes.
|
||||
something else. The t6 controls below replace the shared ticks; t16 replaces t6's modes; t20
|
||||
replaces the marks with pick-what-you-click.
|
||||
- **The Refiner** grinds stone, granite and basalt rubble, gravel, sand and dirt for trace ore,
|
||||
roughly halving the waste. Ore and anything else it cannot grind drop straight through.
|
||||
- **Pipes, pumps and outlets** move liquids up to 500°C, one liquid per line. A line is stored as
|
||||
@@ -234,6 +235,15 @@ above, including:
|
||||
the bag; Ctrl+click a bag name adds it to the blow mix and Ctrl+right-click to pick-up; the menu
|
||||
is one line per material because the first version was too large.
|
||||
|
||||
- **Pick up what you click, blow out what's in hand (t20, 2026-10-24).** Replaces t16's pick-up
|
||||
marks and the vacuum menu; the owner wanted something simpler and more intuitive. A left drag
|
||||
takes only the material it starts on (or the first loose grain it reaches); Shift takes
|
||||
everything. The hand is the blow selection: click a bag name or Q/E for one material, Ctrl+click
|
||||
for a mix, Shift + right click for everything loose. When something in hand runs out it leaves
|
||||
the hand (this settles the old t18 question), and an empty hand blows nothing and says so.
|
||||
Picking something up fills an empty hand, never a chosen one. One tool, no menu; R and F do
|
||||
nothing special with the Vacuum. The owner mostly uses it to collect ore and fuel and feed furnaces.
|
||||
|
||||
- **Fog of war also reveals the ground around the bot (t17, 2026-10-24).** About 20 grains in every
|
||||
direction, through rock, fully clear with a soft edge. Line of sight alone hid everything inside
|
||||
the ground, so the owner couldn't see what was around them or where to dig.
|
||||
|
||||
+8
-8
@@ -288,7 +288,7 @@ Trees (background layer), acorns, saplings, and waking freezing water.
|
||||
- functions: cutTree, treeHeld, findTreeBases, treeSupportTick, woodRoom, treeFall, coldTick, plantTick, setTreeCell, saplingTick, igniteTree
|
||||
- variables: treeBases, saplings, treeDraw
|
||||
|
||||
### src/sim/vacuum.js (165 lines)
|
||||
### src/sim/vacuum.js (166 lines)
|
||||
The vacuum, blowing grains out, grains in flight (flyers), and the flame tool. Material the vacuum would start on at the cursor: a bar, else the nearest loose grain.
|
||||
- functions: vacuumTargetAt, toolVacuum, nozzle, toolBlow, flyOpen, depositNear, bagTemp, landFlyer, flyTick, toolIgnite
|
||||
- variables: blowRR, FLY_G, FLY_Q
|
||||
@@ -366,9 +366,9 @@ Audio: chiptune effects and generative music that changes with depth. Everything
|
||||
- functions: auInit, auVolumes, rateOk, tone, noiseBurst, sfxPlace, playSfx, auAmbient, mtof, zoneForDepth, scaleNote, musicScheduler
|
||||
- variables: AU, SFX, SFX_NEAR, SFX_FAR, ZONES
|
||||
|
||||
### src/ui/state.js (67 lines)
|
||||
### src/ui/state.js (66 lines)
|
||||
Game shell (src/ui/): browser only. This file: settings, the GAME state object, DOM helpers, toasts and the status line.
|
||||
- functions: loadSettings, saveSettings, loadCollect, el, esc, rgbOf, fmtT, toast, setStatus
|
||||
- functions: loadSettings, saveSettings, el, esc, rgbOf, fmtT, toast, setStatus
|
||||
- variables: SET_DEFAULT, SET, TOOLS, ICONS, BAG_ORDER, GAME, keys, hudDirty, $
|
||||
|
||||
### src/ui/title.js (46 lines)
|
||||
@@ -395,18 +395,18 @@ The notebook (N): milestones, market, wallet, blueprints, controls.
|
||||
- functions: openNotebook, renderNotebook, fmtClock, orderName, orderLeft, renderMarketTab, fmtPrice, itemsText, renderWallet, renderBlueprintTab, copyCode, controlsHtml
|
||||
- variables: nbTab, MARKET_GROUPS
|
||||
|
||||
### src/ui/hud.js (40 lines)
|
||||
### src/ui/hud.js (34 lines)
|
||||
The tool hotbar and what is selected.
|
||||
- functions: renderHotbar, toolId, steering, modShift, grainAt, selectTool, bagMaterials, blowList, blowAllList, blowingAll, ensureBlow, piece
|
||||
- functions: renderHotbar, toolId, steering, modShift, grainAt, selectTool, bagMaterials, blowList, blowAllList, blowingAll, piece
|
||||
|
||||
### src/ui/build-menu.js (102 lines)
|
||||
The build menu along the bottom: categories, piece tiles and their icons.
|
||||
- functions: pieceIcon, catOf, selectBuildCat, cycleBuildCat, buildVariantChips, renderBuildBar, setupBuildBar
|
||||
- variables: BUILD_CATS, BUILD_ORDER, PIECE_ICONS, lastBuildKey, lastBuildMenu
|
||||
|
||||
### src/ui/selection.js (276 lines)
|
||||
### src/ui/selection.js (230 lines)
|
||||
The selected tool and piece: R / Q / E, drill width, filter picker, the selection card, the bag panel.
|
||||
- functions: pieceUsesWall, setDrillWidth, tuneUnderCursor, cycleItem, cycleWall, rotate, toggleCollect, toggleBlow, pickFilterUnderCursor, toggleFilterMat, toggleCollectUnderCursor, setBrush, pieceV, pieceExtra, filterChoices, matList, filterParts, filterSentence, applyFilterRun, openFilterPicker, openVacuumMenu, openWallPicker, filterBlockAt, chipCost, pieceCostNow, renderSelCard, renderBag
|
||||
- functions: pieceUsesWall, setDrillWidth, tuneUnderCursor, cycleItem, cycleWall, rotate, toggleBlow, pickFilterUnderCursor, toggleFilterMat, setBrush, pieceV, pieceExtra, filterChoices, matList, filterParts, filterSentence, applyFilterRun, openFilterPicker, openWallPicker, filterBlockAt, chipCost, pieceCostNow, renderSelCard, renderBag
|
||||
- variables: lastBagKey
|
||||
|
||||
### src/ui/info.js (171 lines)
|
||||
@@ -418,7 +418,7 @@ Keyboard and mouse listeners.
|
||||
- functions: isTyping
|
||||
- variables: canvas
|
||||
|
||||
### src/ui/actions.js (233 lines)
|
||||
### src/ui/actions.js (237 lines)
|
||||
What input does: overlays, F, pick, copy / cut / paste, undo, building and tool use each frame. Which overlays are on, shown as a coloured frame round the screen and a named badge
|
||||
- functions: updateOverlayUI, toggleLens, doInteract, pickUnderCursor, aimBlock, stampOrigin, selModeHeld, startPaste, stopSelectAndPaste, plural, piecesIn, doUndo, endRmbRecord, dragDirFor, blockLabel, primaryPress, primaryRelease, secondaryPress, toolTick
|
||||
- variables: ovShown
|
||||
|
||||
@@ -4,6 +4,18 @@ What agents have done, newest first. Add an entry for every piece of work: the d
|
||||
note or request it was for, what changed, the files touched, the tests run, and anything left
|
||||
open or not verified. Keep each entry short; the git history has the details.
|
||||
|
||||
## 2026-10-24: t20: pick up what you click, blow out what's in hand (Claude Code, Codex)
|
||||
|
||||
- After discussing options with the owner: one Vacuum, a drag locks onto the material it starts on
|
||||
(Shift: everything), and `GAME.blow` is "the hand" (click/Q/E, Ctrl+click mix). Empty materials
|
||||
leave the hand; an empty hand blows nothing; a pickup fills an empty hand. Removed `GAME.collect`,
|
||||
R marks, Ctrl+right-click, `openVacuumMenu`, `ensureBlow` and the `.vpick` styles.
|
||||
- Files: `src/ui/{actions,selection,hud,state,previews,build-menu,info,notebook,session}.js`,
|
||||
`src/sim/{vacuum,progress}.js` (`toolVacuum` returns the first material picked up),
|
||||
`src/styles/style.css`, `test/play.py`, `test/t_basics.js`.
|
||||
- Tests: `run_all.py --browser` all passed (play.py 214 checks). Screenshots `shots/t20-*.png`
|
||||
(empty hand, one item, mix, 900px).
|
||||
|
||||
## 2026-10-24: t17 follow-up: no jagged rim, unexplored is black (Claude Code)
|
||||
|
||||
- The owner still saw a jagged grey edge. Causes found by sampling pixels: the fade went to 0
|
||||
|
||||
Reference in New Issue
Block a user