The plan grows a loot feed and a quest module #51

Manually merged
tvidal merged 6 commits from feat/051-the-plan-grows-a-loot-feed-and-a-quest-module into master 2026-07-27 10:09:43 +02:00
Owner

The plan grows a loot feed and a quest module

Along the way:

  • Eight of the ten sheet items fold up
  • A trinket says when it is up
  • The last page number goes
  • A gear change is watched, not just redrawn
  • The last two sheet items fold up

Touches 12 files: scripts/check.sh, scripts/harness/client/02-text.lua, scripts/harness/client/init.lua, scripts/harness/runner.lua, scripts/harness/sections/52-gear-enchant.lua, scripts/harness/sections/52-trinket-sweep.lua and 6 more.

The plan grows a loot feed and a quest module Along the way: - Eight of the ten sheet items fold up - A trinket says when it is up - The last page number goes - A gear change is watched, not just redrawn - The last two sheet items fold up Touches 12 files: `scripts/check.sh`, `scripts/harness/client/02-text.lua`, `scripts/harness/client/init.lua`, `scripts/harness/runner.lua`, `scripts/harness/sections/52-gear-enchant.lua`, `scripts/harness/sections/52-trinket-sweep.lua` and 6 more.
tvidal approved these changes 2026-07-20 16:51:24 +02:00
tvidal left a comment

The plan reads as work rather than as a wish list, which is the difference. One note.

The plan reads as work rather than as a wish list, which is the difference. One note.
@ -0,0 +296,4 @@
print(("arrive %d rows placed off their own side, %d px over %.1fs with %.2fs"
.. " of lead a row, landing on the layout's own number; a link that moved"
.. " dips that row to %.2f and no other")
Owner

The print carries five numbers and the section asserts on two of them. The other three are decoration until something fails on them, and a number nobody checks is a number that can be wrong for months.

The print carries five numbers and the section asserts on two of them. The other three are decoration until something fails on them, and a number nobody checks is a number that can be wrong for months.
Author
Owner

Two of the three now have a check behind them. The stagger does not, because what it should be is a taste decision and I would rather print it than pin it.

Two of the three now have a check behind them. The stagger does not, because what it should be is a taste decision and I would rather print it than pin it.
mdoorn approved these changes 2026-07-25 08:31:46 +02:00
mdoorn left a comment

No objection to the plan. The loot feed and the quest module are the two people ask for by name.

No objection to the plan. The loot feed and the quest module are the two people ask for by name.
Two asks on 2026-09-06, written up as items 73 to 99.

73 to 88, the loot feed. Repeats fold into the row they are already on,
the feed takes the surface the character sheet just got, and the column
answers why an item matters rather than only what it was: a quest
objective's count, a reagent still worth a skill point, trash the auto
loot would have left. Seven of the sixteen are about surfaces, because
the sheet and the feed are the only two windows drawn over the world and
they had two different answers to that. UI.Wash landing at 2b55319 is
what unblocked those seven.

89 to 99, questing. Questie is not reskinned and will not be: its
database is read and its tracker goes off through its own Disable call,
which is what its options checkbox presses. Then quests scoped to where
you are standing, pins of your own that leave the client's five watch
slots alone, and one line that says what is near you without ever
becoming a levelling route. Read against the live install, 11.37.1,
which ships a stable public API the v6 copy in ~/Downloads does not have.

Also carried: the items 63 to 72 block, which was sitting uncommitted in
the working tree when this session opened and is not this session's
work. It rides along here rather than being reconstructed, and the
session that owns it is folding the landed half down next.
63 to 72 came off an ask this morning and eight of them are in. The font
first, because every number the other nine add to the page is a measurement
of a string and landing the face last would have measured all of it twice.
Then the two removals, then the five that draw.

What is left is the two that had to go last for a reason that still holds.
Item 68 fades and slides rows whose contents 66, 69 and 70 spent the morning
building. Item 71 draws on the icon disc 69 reshaped. The preamble over them
says so now rather than describing a block of ten that is mostly gone.

Item 26 is down a site. It counted nine ways of taking a key off the client
and one of them was src/Loadouts/Loadouts.lua, which item 64 deleted along
with the rest of that folder. Seven in the list, eight in the sentence, and
the line says which one went and why, because a count that quietly drops by
one reads as a miscount rather than as a deletion.
The sheet is where a player checks whether the trinket they are about to
pull with is off cooldown, and it was the one page that could not answer.
ns.InventoryCooldown had been written, probed and called by the cooldown
row alone; nothing on the gear page asked it. A slot holding something you
press now draws its wait as an arc of the ring the disc already has, dark
where the wait is left and back to the item's own quality colour as it runs
down. Two trinkets, an engineering helm and a weapon with a use on it are
the four slots that ever draw one, because ns.ItemSpell is what tells a
trinket you press from one you merely wear and a dark ring on a proc nobody
can spend says wait about nothing.

The arc had to be built, and that is the half worth reading. The client
draws no sector. A Cooldown frame lays a square wedge over the square it is
on, every gear square here is a disc, and the swipe texture call that would
round one off is Legion's: nothing installed on this machine calls it under
a TBC interface, and a documented call nothing on disk makes is how this
addon shipped a bug already. Narcissus, which does exactly this job on its
own character sheet, does not try: it draws the client's square swipe and
sends a pointer round a circle beside it. OPie does, in UI/Mirage.lua, under
`## Interface: 20506`, and UI.Arc is that build cut down. Two textures, each
half of the disc, each cut by a white rectangle covering the right half and
turned about the middle of its own left edge, which is a half plane whose
boundary sweeps. The first turns through the first half of the wait and the
second through the second, so one edge moves at a time and the pair of them
is a wedge. It is four objects rather than OPie's five because only one
colour is being drawn. A client with no masks gets the whole ring dark until
the wait ends, which says the thing worth saying and not how much longer.

Three ticks on this page and the rates are why they are three. The turn on
the figure wants every frame and stops when the button comes up. The oil on
a hand counts whole minutes for all but its last one. The arc has a moving
edge, and a quarter second is one pixel of it on the shortest wait anything
in this expansion carries. Folding any two of them together is either a walk
run four times as often as it has anything to say or a picture that steps.

The sweep hangs off ns.UI.Forever, the way the oil count landed under it
does, and it takes that file's answer for when to keep quiet: the page's own
frame is shown from the moment it is built and never taken down, so the tick
asks whether the window above it is visible. The second switch is its own
and is about gear rather than about the window. The repaint leaves the list
of slots holding something you press, and a character wearing nothing with a
use on it arms no tick at all rather than four visibility tests a second
forever.

The gate is a section of its own because 52-gear-page.lua is at its own line
ceiling. Four ways of getting a wedge wrong draw a shape and measure fine:
two whole discs rather than two halves, a mask turning about its own middle,
which is a band across the disc, both masks moving at once, which is two
edges sweeping in opposite directions, and an arc on the wrong draw layer.
So the texture coordinates, the pivot, each rotation against the other and
the three layers are read back one at a time, and the harness's SetRotation
stub keeps the pivot it had been dropping. It sits above the enchant section
rather than below it, because that one redresses the character and this one
reads the character the fixture dressed.
Item 65 took the tab strip off the sheet, so Window.Show and Window.Pane
stopped taking a page and the GEAR constant stopped existing. Four sites
carried on passing it. Three read it as a nil global and were caught on the
rebases that put them next to the change; this one declared a local of its
own set to 1 and handed that to two functions that ignore it, which is why
nothing noticed.

Both shapes pass the gate and neither is harmless. A number named GEAR going
into Window.Pane says the sheet has pages and that the caller picked one, and
the next person to read it will believe the file over the code.

Nothing else in src or the harness names it now.
Put a ring on with the sheet open and the name under the disc was a
different word between two frames. You saw it if you happened to be
looking at that row and not otherwise, which on a page of nineteen rows
means not otherwise. Opening the sheet was the same problem the other way
round: nineteen rows and a figure all present at once, with nowhere for
the eye to start.

Two motions, one per channel of the tween library, and the client's own
animation groups stay refused for the three reasons Ck/Animations.lua
gives. A repaint that finds the link in a slot changed dips that row and
brings it back. The page coming up slides its two columns in from their
own sides, a hundred and twenty pixels over six tenths, with three
hundredths of lead a row so a column reads as a sweep rather than as a
block. Narcissus does both, at Main.lua:1727 and in the animOut group on
NarciSlotButtonLeftTemplate, and the numbers are its.

The fade is a dip rather than the two runs Narcissus uses, and that is
the half worth explaining. Narcissus can write the new string on the
animation's finish because the string is its own to hold back; here the
repaint has already written the row, and holding the text for a fifth of
a second would put the page behind every caller that reads it. So the
curve goes down and comes back up, the trough is where the swap would
have been, and nothing is left on the tick path to call.

The whole row dips rather than the three regions that changed, because
the sockets, the durability rule and the shadow under the pair of strings
describe the same piece and half a row fading reads as broken. Both are
refused in a fight, and not because anything on the page is protected:
the sheet is opened mid pull to be read, and nineteen rows arriving over
six tenths of a second is nineteen rows you cannot read while they do it.

Two things fall out of the arithmetic. A row is written to the start of
its own path when the arrival is armed, because a tween inside its delay
is not written to at all and every row but the top of each column would
otherwise be drawn at rest and thrown sideways on the first tick. And a
row lands on the layout's own number rather than on the interpolation's:
the tween works in whole units, the layout works in the frame's own
pixel, and the difference is most of a physical pixel of blur under every
name for the rest of the session.

The row builder went over the length gate on the two lines that give a
row its tweens, so the secure button came out of it. That is the seam the
head of the file already argues for, nothing moved twice, and the count
is 69 lines against 100.

The gate is its own section and it runs last. The sheet's other five
sections all sit above 79-floating-messages, which asserts that a dozen
looted drops are still in the air and unticked, so a section beating the
animation tick from up there would expire them and read as that section's
failure.
68 and 71 were held to the end of the block on purpose and both earned it.
68 fades rows whose contents 66, 69 and 70 spent the morning building, and it
would have animated a page that was still changing shape. 71 sweeps the disc
69 reshaped, and the arc is cut out of the ring rather than laid over it.

The preamble over the ten goes with them. It argued an order that has been
carried out, and a paragraph explaining why the font came first is a note to
whoever was going to do the work, not a record of it. What the landed lines
keep is the ten sentences and their hashes; the argument stays reachable at
ee56dde, which is where the block was written down.
tvidal manually merged commit c04b7e58c4 into master 2026-07-27 10:09:43 +02:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
3 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
northgale/warriorkit!51
No description provided.