inventory: speak the item action menu
Pressing enter/z on an inventory item plays a click and, until now, said nothing. The click is sound.select: the menu WAS opening every time. inventory.keypressed -> inventoryWindow.enableItemMenu() builds a second, nested selection over the grid (modules/item/itemMenu.lua) listing the actions that item currently allows, filtered from itemActions.lua by per-action conditions: Activate, Wield/Unwield, Wear/Take off, Switch on/off, Drink, Eat, Apply, Read, Open, Prepare for throwing/Pack away. Up/down move in it, enter activates, any other key cancels. None of it goes through console.print or the cursor popup, so it was silent -- and since the game has no separate equipment screen, this menu is the only way to equip anything. Reported by Talon: the torch quest was unplayable. _itemgrid.lua now checks window.itemMenu first and keeps the grid cell quiet underneath, since the menu is modal over it. The menu is a closure with no getters, so lines and currentSelectedAction are read as upvalues of its own draw(). The item name leads only when the menu opens, and the "just opened" memory is the menu table itself rather than a flag, which keeps read() idempotent -- a flag would be consumed by the focus poll and the real announcement would come out headless. Items also now read "equipped", which is part of the focus key on purpose: after Switch on the menu closes with the cursor unmoved, so otherwise the re-read is suppressed as unchanged and the action still feels silent. Now: "Switch on" -> "a torch, equipped, slot 3". New patch (the 6th) wraps the inventoryWindow factory for the dead case: when getActionsList returns nil -- an item with no applicable actions -- the game does literally nothing, not even the click, which by ear is indistinguishable from a dropped keypress. Says "<item>, no actions". The prologue inventory is empty, so the live path is unverified; the testbed instead builds an itemMenu from a synthetic item and asserts the two upvalue names still resolve. That is the version-bump canary for this descriptor, not proof of the wording. 38 checks, 0 failures. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
7ce429c2fb
commit
0df3842bf1
@@ -435,6 +435,35 @@ local function scenario()
|
||||
end
|
||||
end
|
||||
|
||||
-- The item action menu (enter/z on an inventory item) is a closure with no
|
||||
-- getters, so _itemgrid.lua reads its `lines` and `currentSelectedAction`
|
||||
-- as upvalues of its draw(). The prologue inventory is empty, so the menu
|
||||
-- cannot be opened for real here -- but the fragile part is the upvalue
|
||||
-- NAMES, and those can be checked by building a menu directly. This is the
|
||||
-- version-bump canary for that descriptor.
|
||||
do
|
||||
local newItemMenu = require("modules.item.itemMenu")
|
||||
local fakeItem = {name = "a test item", onUse = function() end}
|
||||
local itemMenu = newItemMenu(fakeItem, 0, 0)
|
||||
|
||||
check("item action menu builds for a usable item", itemMenu ~= nil)
|
||||
|
||||
if itemMenu then
|
||||
local lines = menus.getUpvalue(itemMenu.draw, "lines")
|
||||
local selected = menus.getUpvalue(itemMenu.draw, "currentSelectedAction")
|
||||
|
||||
check("item action menu exposes its action list by upvalue",
|
||||
type(lines) == "table" and lines[1] and lines[1].text ~= nil,
|
||||
"lines=" .. tostring(lines))
|
||||
check("item action menu exposes its selection by upvalue",
|
||||
selected == 1, "currentSelectedAction=" .. tostring(selected))
|
||||
|
||||
itemMenu.adjustSelectedAction(1)
|
||||
check("item action menu selection is readable after it moves",
|
||||
menus.getUpvalue(itemMenu.draw, "currentSelectedAction") ~= nil)
|
||||
end
|
||||
end
|
||||
|
||||
-- The journal's whole point is the page of text on the right-hand side; the
|
||||
-- list of titles on the left is just an index into it. Announcing only the
|
||||
-- title (which is what it used to do) reads as "there is an entry here"
|
||||
|
||||
Reference in New Issue
Block a user