The tracker says why not to leave this zone yet #55

Manually merged
mdoorn merged 6 commits from feat/055-the-tracker-says-why-not-to-leave-this-zone-ye into master 2026-08-11 08:30:00 +02:00
Owner

The tracker says why not to leave this zone yet

Along the way:

  • The quest tracker starts in the top left corner
  • The friend's restraint is a gate rather than a comment
  • The quest reskin folds up
  • The tracker stops naming who is standing nearby
  • The HUD moves only where the sheet lands on it

Touches 12 files: docs/CHANGELOG.md, scripts/check.sh, scripts/harness/sections/52-screen-hush.lua, src/Character/Feature.lua, src/Perf/Feature.lua, src/Perf/Perf.lua and 6 more.

The tracker says why not to leave this zone yet Along the way: - The quest tracker starts in the top left corner - The friend's restraint is a gate rather than a comment - The quest reskin folds up - The tracker stops naming who is standing nearby - The HUD moves only where the sheet lands on it Touches 12 files: `docs/CHANGELOG.md`, `scripts/check.sh`, `scripts/harness/sections/52-screen-hush.lua`, `src/Character/Feature.lua`, `src/Perf/Feature.lua`, `src/Perf/Perf.lua` and 6 more.
mdoorn approved these changes 2026-08-10 12:40:30 +02:00
mdoorn left a comment

A tracker that says why not to leave the zone yet is worth three settings. One note on the section.

A tracker that says why not to leave the zone yet is worth three settings. One note on the section.
@ -196,0 +287,4 @@
near:SetPoint("CENTER", sheet, "CENTER", 0, 0)
local anchorAgain = Point(_G[blocks[1].anchor])
_G[blocks[1].anchor]:ClearAllPoints()
_G[blocks[1].anchor]:SetPoint("CENTER", sheet, "CENTER", 0, 0)
Owner

Re-anchoring a Blizzard block onto the sheet inside a section, and putting it back afterwards from a saved point. If the section fails between the two the next section starts on a client with the player frame in the middle of the screen.

Re-anchoring a Blizzard block onto the sheet inside a section, and putting it back afterwards from a saved point. If the section fails between the two the next section starts on a client with the player frame in the middle of the screen.
Author
Owner

The restore is in the runner's per-section teardown now, so a failure between the two does not leak into the next one.

The restore is in the runner's per-section teardown now, so a failure between the two does not leak into the next one.
The addon's own tracker listed the quests in your log and stopped there, which
is the half of "what is close" the client can answer. The other half is who is
standing nearby with a quest that has never been in your log, and item 97's
ns.QuestNear had been walking that list for nobody to read.

ns.QuestFriend turns it into one sentence at the foot of the column, naming one
person and one quest. No yardage reaches it: QuestieLib.Euclid draws a straight
line over world coordinates, so a cliff between you and the murloc makes sixty
yards a three minute walk, and the number is only honest enough to rank with.
The direction is this addon's own arithmetic instead. UI/Chart.World puts you
and the spawn into the same world yards through C_Map.GetWorldPosFromMapPos,
the bearing between them is an atan2, and the player's facing comes off it to
leave one of eight words. That is the one thing on the line the game confirms
as you walk.

The restraint is the feature and it is all in Quests/Friend.lua: one name and
never two, silent in combat, silent wherever IsInInstance says you are indoors,
nothing past the ELSEWHERE cut Quests/Near.lua already makes, and twenty
seconds of standing followed by silence for the person it just named. The
column asks for the line only where it already has a quest on it, which is also
what stops the walk running for a tracker nobody can see.

For item 99, which writes the gate: the four rules are Friend.Line's own
branches, in that order, and 86-quest-friend drives every one of them rather
than reading the source. Where.Nearest still has exactly one caller; this file
asks Where.Map and nothing else. UI/Chart.lua's probe count is unchanged at
three, and the two world vectors now come out of one local Vector() so it
stays there.
It shipped anchored to the right edge, on the reasoning that this game has put
a quest tracker up the right of the screen since 2004. That is true and it is
still the wrong default here, because this addon already puts the loot feed,
the cooldown row and the player's own frame down that side. A column dropped
there lands on top of something on most resolutions, and the first thing a
player does with a frame covering another frame is turn it off.

Fifteen pixels in from the top and fifteen from the left, which is empty on
every screen the addon has been read on.

Nothing else moves. The frame was always placeable through UI/Placeable.lua and
still is: unlock the addon and drag it anywhere, and where you leave it is
saved per character in questsColumnPoint.
The line at the foot of the tracker is one sentence of code holding up a page
of rules, and every one of those rules is the kind that erodes in a refactor
nobody meant anything by. They are checked now, in the two layers this repo
gates in. scripts/check.sh reads two of them out of the source: nothing under
src/Quests/ may put the log in order of distance, experience or level, and
every sort still in that tree carries a written reason for what it orders;
Where.Nearest, which reads every spawn of every open objective, has one caller
and the count is the gate. The harness drives the other three by reading the
line rather than the file. Two npcs at one yardage make one sentence with one
quest in it, nineteen seconds into a twenty second period is silent and twenty
one seconds speaks, and a fight or a dungeon takes the line off the tracker and
leaves the quests on it. Every rule was green the moment it was written, which
is the only cheap moment to write one.

One thing was wrong under those rules and is fixed here. Friend.Line cached the
finished sentence for the whole quiet period, and the direction word was baked
into it, so a player who turned round was told "ahead of you" about somebody now
behind them for up to twenty seconds. The pair is still what stands for the
period; the sentence is worked out again on every reading. That makes the quiet
rule sharper rather than weaker: the period holds which quest is named, not how
it is described, and the harness turns the player half a circle under a standing
line to hold it there. Friend.Describe follows the same path, so the options
reading says what the line says now instead of repeating what it said.

The comment above Where.Nearest said "Both callers below are in the quest
window's paint" and there is one. It says one now, and says the gate counts
them. A later item adding a second reader of that walk fails at the commit: the
memo in front of it holds one quest for one second, so two readers asking about
two quests miss each other every time and the second one pays the walk in full.
Items 89 to 100 landed, minus 93, which stays on the list of things deliberately
not done. Questie keeps its world and minimap icons and loses its tracker by its
own Disable call; ours goes up in their place, off the log this addon already
reads, scoped to the zone the client files your quests under. A pin is this
addon's own, saved per character and uncapped, and the client's five watch slots
are never written again. One line at the foot of the tracker names somebody
nearby holding a quest you have never taken, and item 99 is the gate that keeps
that line from growing into a route planner.

Two defects surfaced only where two items met, which is the argument for gating
the run once at the end rather than each item alone. The tracker read
quest.watched after the pin renamed it to quest.pinned, so no mark ever drew.
And the friend line cached its whole rendered string for the quiet period, so a
player who turned around was told ahead of you about somebody now behind them;
the pair is still held for the twenty seconds and only the word it is said with
is recomputed.

The options window's prose budget is gone rather than raised a ninth time. It
summed every sentence in the window against a number that had moved from 16,000
to 31,000, and every raise in its own comment ended with the same phrase: that
measurement plus a hint's worth of room again. The comment also recorded, twice,
that the counter measured the wrong thing, because twenty three hints replacing
twenty three permanent readings cut what a player reads and pushed the number
up. The caps that bound one string on one row stay at 160 and 200.

The tracker's default corner moved to the top left. Up the right is where this
game has put a tracker since 2004 and it is also where this addon already puts
the loot feed, the cooldown row and the player's frame.

This commit carries another session's rewrite of todo.md's header and its fold
of items 1 to 88, which was uncommitted in the shared tree when the landed lines
went in. A file commits whole. Nothing of theirs was edited.
The line at the foot of the quest tracker read as clutter over the world. It
named one person with a quest never in your log, said which way to turn and
stood for twenty seconds, and walking through a starting zone it appeared under
the quests every time somebody new came into range. It is off, and everything
that existed only to feed it is off with it.

Quests/Friend.lua and Quests/Near.lua are deleted, with their toc entries, their
two harness sections, the Questie offer-table fixture the walk was built on, and
the tick row on the performance tab. Column.lua loses its one wrapping row and
the frame behind it, so the tracker is quest titles and objectives and nothing
else. UI/Chart.World and the inverse world-position fixture go too: that
sentence was the only caller that ever asked which way a spawn was, and the
vector split it wanted folds back to the one vector Chart.Spot fills. Chart's
probe count is unchanged at three. Where.ELSEWHERE stops being handed out,
because the npc half of "what is near you" was the only thing outside that file
making the same cut.

The two gates written for the sentence stay, minus its name. Nothing under
src/Quests/ may put the log in order of distance, experience or level, and every
sort in that tree still carries a written reason: the tracker is filed by zone
and the window draws the quest you clicked, and a sort over the yardage Questie
already carries is what turns either into a route. Where.Nearest still has
exactly one caller and the count is still the gate. Both were true before this
commit and are true after it, which is the argument for keeping them.

The changelog entries went with the code rather than being contradicted by a
third one: both were unreleased, so nobody has read them as a promise.
The hush was one switch: a screen window up meant every registered part away,
wherever it sat. That is right for the three rows the sheet covers and wrong
for the rest, and the rest is most of them, because a sheet pinned to one edge
of the monitor leaves the other edge alone. You lost the swing timer to a sheet
that was nowhere near it.

So the answer is per part and it is a rectangle test. Each registrant gets a
cell of its own rather than one room for all eight, the three unit blocks get a
flag each on the guard rather than one wk-down, and a part hides when its rect
overlaps a window that has asked. Partly covered hides: a row with a corner
under the sheet is a row you cannot read. Corners are read in screen units,
multiplied back up by each frame's own scale, because UI/Pixel.lua takes every
frame it adopts off its parent's.

Swept off a tick and not worked out once, because the picture moves for more
reasons than the sheet opening. Buffs/Nag.lua sets the missing buff row's width
from how many buffs are missing on every paint, Cooldowns/Row.lua sets both of
the cooldown row's from how many cooldowns are up, and the sheet itself is
dragged. Six hooks and a seventh forgotten next month, against one tick at
10 Hz that runs while a window is up and not at all while none is. Edge
triggered, so a sweep that finds nothing moved reads four corners per part and
writes nothing, and the snippet fires on a real change rather than ten times a
second in the fight the sheet is most often opened in.
mdoorn manually merged commit 26a78da191 into master 2026-08-11 08:30:00 +02:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
2 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!55
No description provided.