Skip to content

Releases: ollidiemaus/wayscribe

0.0.6

Choose a tag to compare

@ollidiemaus ollidiemaus released this 12 Oct 11:25
3670322

Wayscribe

0.0.6 (2026-10-12)

Full Changelog Previous Releases

  • Merge pull request #15 from ollidiemaus/0.9-duels
    Track duels: day entries, a Duels tab and a Your Year card
  • Track duels: day entries, a Duels tab and a Your Year card
    Each finished duel is a DUEL entry: the opponent (from the StartDuel hook
    when the player challenges, or looked up among nearby units when they are
    challenged), their class and level, who won, a flight, a duel to the
    death, where and how long. The winner comes from the client's own result
    line, parsed through its global strings, so every language works; a
    declined challenge or someone else's duel leaves nothing.
    The journal gets a Duels tab between Maps and Your Year (shown while the
    tracker is on, /ws duels): all duels with the record by class and the
    latest ones, then each opponent with every duel against them. Your Year
    gets a Duels card with the result, the rival, the nemesis and the
    easiest and toughest class. Entries have a new PvP filter category.
    The duel log's string parsing moved to Compat (FormatToPattern,
    ParseGlobalString), next to new helpers for nearby players and class
    names. Turning a tracker on or off now fires SETTINGS_CHANGED, so the tab
    follows at once.
  • Merge pull request #14 from ollidiemaus/duel-trace
    Log raw duel events in developer mode
  • Log raw duel events in developer mode
    Research for a duel tracker. The game says who won a duel only in a
    system chat line, and Forever may hide that line from addons; its names
    also carry surnames. In developer mode, Compat/DuelTrace.lua prints every
    duel event with its raw values (secret ones as ) and keeps the
    last 200 lines in WayscribeDB.duelTrace; /ws duellog shows them again.
  • Merge pull request #13 from ollidiemaus/recap-day-playtime
    Show the playtime of the recap's day, not of the last session
  • Show the playtime of the recap's day, not of the last session
    The login recap dated the previous session by its start but showed that
    session's length. It now shows the day the session ended and everything
    played that day up to its end, earlier sessions that day included.

0.0.5

Choose a tag to compare

@ollidiemaus ollidiemaus released this 11 Oct 10:22
a443eaf

Wayscribe

0.0.5 (2026-10-11)

Full Changelog Previous Releases

  • Merge pull request #12 from ollidiemaus/maps-empty-divider
    Hide the maps page divider while the page is empty
  • Hide the maps page divider while the page is empty
    The right page's divider under the dungeon name was always drawn, so with
    no maps it ran through the second line of the empty-page text. It now
    shows only when a dungeon is open, like the Notes tab's empty page.
  • Split the architecture doc into one file per section
    ARCHITECTURE.md had grown to 100 KB. It now keeps the principles, the
    layers and an index; every other section lives in docs/architecture/,
    with §4 and §6 split further (backup, notes, footsteps). Section numbers
    are unchanged, so the code's citations still resolve through the index.
    The repository layout now lists the dungeon map files and tools/.

0.0.4

Choose a tag to compare

@ollidiemaus ollidiemaus released this 09 Oct 16:38
27ee5b8

Wayscribe

0.0.4 (2026-10-09)

Full Changelog Previous Releases

  • Merge pull request #11 from ollidiemaus/0.8-dungeon-maps
    Wayscribe 0.8 Dungeon maps: plan and the first four dungeons
  • Bring the README up to date
    The README gains the dungeon maps: what the Maps tab shows and how the
    fog lifts, /ws map and its key binding, the dungeons covered so far,
    the setting that hides them, and that a backup brings them back. Your
    Year is now the journal's last tab, not its third. Good to know also
    says why the maps lift room by room, and that the journal can't be
    used in Forever's controller mode.
  • Let players hide the dungeon maps
    Some players want the game without maps. A new setting, Show dungeon
    maps (on by default, its own section in the settings), hides the Maps
    tab, makes /ws map and its key binding say how to turn the maps on,
    and hides the "Charted ... completely" entries in the journal and the
    login recap. The tracker keeps noting the rooms reached, so the maps
    are complete when they're shown again; its own toggle under Tracking
    still stops that.
    Record types can now declare shown, a function that hides their
    entries while a setting says so; the records stay. The journal lays
    its tabs out on every refresh so the ones after Maps close the gap.
    The map strings move out of the middle of the notes strings, and an
    unused one goes.
  • Add dungeon maps for four dungeons
    Forever has no dungeon maps, so the journal gets a Maps tab between
    Notes and Your Year with Wayscribe's own, under fog that lifts room by
    room: the game gives no position inside instances, so arriving, a boss
    reached (a wipe counts) and a named area are what lift a section.
    Data/Charted.lua saves only those triggers per character (the backup
    carries them) and back-fills them from runs and kills already in the
    journal; Trackers/DungeonMaps.lua notes them and writes "Charted ...
    completely" once a whole map is found. The map draws the client's
    tiles by file ID with fog over the cells not found yet, fades a
    section out when it's found, and unfolds across both pages. /ws map
    and a key binding open it inside a dungeon.
    The data covers Ragefire Chasm, Wailing Caverns, the Deadmines and the
    Hall of Thanes for now; the in-game checks are in ingame-tests.md.
  • Add the dungeon map generator
    tools/dungeonmaps/build.py writes StaticData/DungeonMaps.lua from what
    the client and public data already hold: retail's map tables name the
    tiles of each old dungeon map (the files are in Forever's build), the
    minimap tiles of Forever's own instances stand in where there's no art,
    and boss and entrance spots come from retail's encounter journal or
    AzerothCore's spawn positions (coordinates only). Each floor is cut
    into sections by walking distance to those spots on a 64-column grid.
    dungeons.py holds what can't be looked up. Downloads and review pages
    stay in an ignored cache; the packager leaves tools/ out.
  • Plan dungeon maps with fog of war
    Forever has no dungeon maps, but the client still holds the map art
    retail drew for the old dungeons (by retail's file IDs), and the
    minimap tiles of its new instances such as the Hall of Thanes. Addons
    get no position inside instances, so docs/dungeon-maps.md plans a fog
    that lifts room by room (entrance, bosses reached, named areas),
    kept per character and readable outside the dungeon, with the
    phases, the in-game proof lines, the risks and the open decisions.
    The roadmap points to it.

0.0.3

Choose a tag to compare

@ollidiemaus ollidiemaus released this 09 Oct 12:54
53d116d

Wayscribe

0.0.3 (2026-10-09)

Full Changelog Previous Releases

  • Merge pull request #10 from ollidiemaus/minimap-icon
    Bolder small icon, centered on the minimap and in the Addon Compartment
  • Center the minimap icon and use it in the Addon Compartment
    LibDBIcon picks its Classic layout because Forever's WOW_PROJECT_ID is
    18, not Mainline's, but Forever draws the Mainline ring, so the icon
    sat up and to the left of the opening. On Forever the button now gets
    the layout of Blizzard's own button in that ring
    (WorldMapTrackingPinButtonTemplate): border 54 px, dark disc 25 px at
    (3, -4), icon 20 px at (7, -6).
    The bolder icon is renamed IconSmall (Theme.ICON_SMALL) and is now the
    TOC's IconTexture as well, so the Addon Compartment and the addon list
    show it too. Icon.tga stays the journal's portrait and the Your Year
    card. Compat's comment about Forever's WOW_PROJECT_ID is corrected (18
    since build 70235).
  • Give the minimap button a bolder icon
    The minimap button draws its icon at 17-18 px inside a round border,
    where Icon.tga's blue margin, vignette and frame left the parchment a
    small patch and the trail and compass mere specks.
    Media/MinimapIcon.tga (64x64, 32-bit, source Media/MinimapIcon.svg,
    not packaged) redraws it for that size: parchment and quill fill the
    ring, outlines are thicker, the trail is a thick dashed line, and the
    compass, frame and grain are left out. Theme.MINIMAP_ICON names it for
    the LibDataBroker launcher; Icon.tga stays the TOC icon, the journal's
    portrait and the Your Year card.
  • Merge pull request #9 from ollidiemaus/0.7-notes
    Wayscribe 0.7 Notes: your own notes and map markers
  • Let a note hold places as /way lines
    A note's places are now the /way lines in its text, in the notation
    websites share waypoints in (TomTom's: /way [zone | #uiMapID] x y
    [label]). One note can hold many places, e.g. Forever's Hidden Books
    pasted from a website (docs/ARCHITECTURE.md §4.9, §7.9).
    • Every /way line is a marker with the note's icon; its label shows in
      the tooltip. A line without a zone takes the zone of the /way line
      above, else the player's, and leaving the note writes that zone into
      the line (Notes:FillZones, also at logout).
    • Zone names are the client's own (C_Map.GetMapChildrenInfo) and the
      English ones from StaticData/Zones.lua (UiMap.db2, build 70235), so
      an English list works on a German client; "#1411" names a map by ID.
    • Alt+click and /ws mark start a note whose text is the spot's /way
      line. Notes from the test build with a single place get theirs as a
      /way line at login.
    • /way is not a chat command: in chat it belongs to TomTom and others.
    • The note's subtitle counts its places and the /way lines whose zone
      isn't known.
      In-game results on build 70291 are in docs/ingame-tests.md,
      docs/forever-probe.md and §12 row 14: Alt+click works in and out of
      combat with the popup in front of the map (strata MEDIUM), and the
      game's own map pin is on.
  • Add Wayscribe 0.7 Notes
    The player's own notes, in the journal and on the world map
    (docs/ARCHITECTURE.md §4.9, §7.9, 0.7). Everything else Wayscribe keeps
    is recorded for the player; this is the first place to write something
    down yourself.
    • A marker is a note with a place: one kind of thing, one list, one
      editor. Notes live per character in WayscribeCharDB.notes
      ({ seq, list }) with their own write path, Data/Notes.lua. They are
      not records: they can be edited and deleted, and nothing is derived
      from them, so rollups, firsts and Your Year stay as they are. The
      table is optional, so there is no schema change.
    • A Notes tab between Journal and Your Year (UI/NotesView.lua): the
      notes newest first under New note, the open note written onto the
      page (title, when and where, text). Every keystroke is saved; a note
      left blank is dropped. Read-only journals can be read, not edited.
    • Markers on the world map (UI/NotesMap.lua), a data provider of its
      own at the default map's waypoint pin level, with the eight raid
      target icons. Alt+click on a zone or continent map names a new note
      in a popup; /ws mark [title] marks where the player stands. Hover
      shows the note, a click opens it in the journal; Show on the map
      opens the map at a note. The map button's menu and Settings > Notes
      hide them.
    • Backup and safety: the backup copies the notes with meta and state
      (a snapshot, so edits during a backup stay out) and counts them in
      its header. A journal with notes isn't "empty", so a restore never
      replaces them. The canary counts the notes' seq, so a journal that
      held only notes is still guarded when its file doesn't load. Reset
      deletes them.
    • The text export lists the notes written in its range after the days;
      /ws stats counts them; /ws probe reports the map click handler, the
      map's strata and Forever's map pin game rule.
      362 tests pass on Lua 5.1 and 5.5, among them backup and restore of
      notes and markers into a journal that didn't load. In-game checks are
      in docs/ingame-tests.md under "Notes and markers".
  • Record that addon windows can't join Forever's controller mode
    In controller mode the journal can't be focused ("There is no interface
    window to focus"): the default UI's frame manager only knows windows
    from ShowUIPanel or FrameShown, and an addon can't read the controller
    itself (EnableGamePadButton is protected). A test build that called
    FrameShown for the login recap could be navigated, but every focus
    change raised "Wayscribe has been blocked from an action only available
    to the Blizzard UI", and closing the recap with the controller froze
    the client. The manager and SmartNavigation run tainted once an addon
    window is in them, and they call protected functions on focus changes.
    The code was withdrawn (kept in a stash); ARCHITECTURE §12 row 13
    records the result for build 70245.

0.0.2

Choose a tag to compare

@ollidiemaus ollidiemaus released this 07 Oct 18:55
b38dec7

Wayscribe

0.0.2 (2026-10-07)

Full Changelog Previous Releases

  • Merge pull request #8 from ollidiemaus/journal-close-in-combat
    Close the journal with its X button in combat
  • Record that the journal closes with its X in combat
    Checked in game: with a fight going on, the X closes the journal.
  • Record the journal's map link check
    Show on the map opens the map in front of the journal at the day's zone,
    showing only that day, and the map button says Today again after the
    map is closed.
  • Close the journal with its X button in combat
    A friend's report: in a dungeon fight the journal closed with Escape
    but not with the X. The default UI's close button calls HideUIPanel,
    which since the Mainline engine does nothing for an addon in combat
    ("We no longer allow addons to show or hide UI panels in combat",
    UIParentPanelManager.lua on build 70245) and prints "Interface action
    failed because of an AddOn" once per session. Escape hides the frame
    directly through UISpecialFrames, so it kept working.
    The X button now hides the frame directly too, for the portrait frame
    and the plain-border fallback. The test stubs give the template's
    close button the client's behaviour, and InCombatLockdown.
  • Merge pull request #7 from ollidiemaus/forever-surnames
    Name Forever players with their surnames
  • Record that Forever's surnames are confirmed in game
    /ws probe on client build 70245 shows has.surnames = true, and the
    character is now saved as "Scoopz Scoopz" on realm "Classic Beta PvE"
    instead of "Scoopz" on realm "Scoopz". Companion names in a group run
    and the repair of an older entry are still open in-game checks.
  • Name Forever players with their surnames
    On WoW Forever, UnitName and UnitFullName return a character's first
    name and surname where other clients return the name and the realm.
    Wayscribe stored the surname as the realm, so dungeon entries and the
    companions card named players by their first name only.
    Compat.has.surnames is set when UnitName("player") returns a second
    value (it never returns the player's own realm elsewhere). With it,
    names are "First Surname", other players' realms are left out, and
    the player's realm comes from GetRealmName. Players saved by older
    versions get their surname joined back at login, in writable journals
    only, and the missing-journal guard accepts a canary in the old form.

0.0.1

Choose a tag to compare

@ollidiemaus ollidiemaus released this 07 Oct 15:18
f352e91

Wayscribe

0.0.1 (2026-10-07)

Full Changelog Previous Releases

  • Merge pull request #6 from ollidiemaus/custom-icon
    Give Wayscribe its own icon
  • Record the icon's in-game checks
    The new icon shows in the addon list, on the minimap button, in the
    Addon Compartment, as the journal's portrait and on Your Year's first
    card. Also verified: with /ws dev off, Your Year says the year opens
    on December 1.
  • Give Wayscribe its own icon
    A quill drawing a dotted route on a parchment scrap replaces the
    default UI's book icon (INV_Misc_Book_09). Media/Icon.tga is the
    texture (128x128, 32-bit), Media/Icon.svg its source, left out of the
    package. Theme.ICON names it once for the minimap button, the
    journal's portrait and the Your Year overview card; the TOC's
    IconTexture points at the same file.
  • Describe the release setup as it is
    CurseForge project 1731716 and GitHub Releases, no Wago; the tag
    becomes the version. The setup steps are done, so the docs list what
    the workflow relies on instead of what is still to do.
  • set version from tag
  • dropped wago support
  • updated toc
  • Regroup the in-game tests by feature
    Shorter checks in a do-then-expect form for a tester who doesn't know
    the addon, grouped by area instead of by release, with the open ones
    first and the verified ones as a short list at the end.
  • Clean up the architecture document
    Describe the addon as built instead of as a plan: drop the per-release
    tags, fix claims the code never matched (ns.Defer, DAY_CHANGED, strict
    validation in dev mode), split the UI table into sections, condense the
    backup measurements, and group the decisions by topic. Section numbers
    stay, since code comments cite them.
  • Write the README for players and move developer notes to docs
    The README now describes the addon from a player's view, so it can also
    serve as the CurseForge description. Tests, lint, the in-game setup,
    developer commands and the release steps move to docs/DEVELOPMENT.md.
  • Merge pull request #5 from ollidiemaus/0.6-backup
    Wayscribe 0.6 Backup: a restorable backup string
  • Log what the guards find as warnings, not errors
    The missing-journal restore worked in game (2026-10-07): the warning
    at login, the popup, and after the reload the journal and trails were
    back without /ws accept. But with developer mode on, BugSack showed
    "schema: missing" at login: the guard's own log entry, forwarded like
    an error.
    What the guards find in the saved data (missing, renamed, foreign,
    newer, corrupt, and a pasted backup the addon can't take) is the
    player's situation, not a bug, so it goes to /ws log only (Log:Warn).
    A migration that throws stays an error. The missing and renamed
    entries now say what they found ("missing: the account file counted
    42 entries").
  • Record the 0.6 backup, refusal and reset-and-restore checks
    /ws backup matched /ws stats, a backup pasted into the same character
    was refused, Reset followed by a restore brought everything back, and
    the Settings buttons open the same windows (2026-10-07). The restore
    of a journal that didn't load, the release's exit criterion, is still
    open in game.
  • Record the in-game paste of a long backup
    The third build pastes the 365-day sample (2,474,487 characters) back
    in 2.8 s and checks it in 1.2 s; 7 and 30 days take 0.1 s and 0.2 s.
    In line with the size, as the model predicted: one string is enough,
    without splitting by year or compression. §4.8, the 0.6 decisions and
    a new §12 row record it; the clipboard checks are ticked.
  • Collect a pasted backup from OnChar into a 32-byte field
    The second in-game test: a field without a limit took 3.3 s for 49,899
    pasted characters and 55.6 s for 205,724, the square of the size. The
    client inserts a paste one character at a time and works through
    everything the field holds for each one, about 2.6 ns per character
    held; the same figure explains the first build's 28.3 s with 4,000
    bytes held, leaving about 1 us for the OnChar call itself.
    So the restore field holds only 32 bytes and the paste is collected
    from OnChar again, in chunks of 4,096 characters instead of one table
    of millions (0.14 s for the 2.4 MB sample in plain Lua). It is read on
    the next frame; text that reached the field without OnChar is read
    from the field. Expected in game: about 2.5 s for the sample.
  • Read a pasted backup in one piece, in one-line fields
    The first in-game test with the 365-day sample (2,474,487 characters):
    the backup was made and shown in 3.7 s and copied out whole, and the
    check took 1.2 s. But the multi-line box drew nothing of the 2.4 MB
    string until clicked, and collecting the paste from OnChar (a
    4,000-byte box, the WeakAuras way) delivered every character yet took
    28.3 s: about 11 us per character, one script call each.
    • Backup and restore use a one-line field; the export keeps its
      multi-line box.
    • The restore field has no limit and no script per character: once a
      frame the window asks how many letters it holds, reads them with
      GetText in one piece and empties the field.
    • What was found is shown in white, and below it what a restore would
      do: green when it can, red with the reason when it can't, so the
      disabled button (on purpose for a sample) always has its reason
      next to it.
    • Developer mode prints how long the backup took to make and to show.
    • The in-game results in docs, and a stepwise paste test (7, 30 and
      365 days) for the new field.
  • Add Wayscribe 0.6 Backup
    A restorable backup of the character's facts as one string, copied out
    through the clipboard and pasted back (docs/ARCHITECTURE.md §4.8, 0.6).
    It closes the gap the missing-journal guard can't cover: every saved
    file gone, or a new computer.
    • Format: WSB1:, a header (versions, character, counts, the payload's
      length and Adler-32), then the payload. A small serializer for plain
      data: a tag per value, the codec's zigzag varints, strings defined
      once and referred to by number, base64 for bytes outside the
      alphabet. Only the codec's 64 characters after the magic; whitespace
      an editor adds is ignored. Round-tripped in plain Lua 5.1 and 5.5.
    • Only facts go in: rollups, firsts and the rollup version stay out and
      are rebuilt on restore. The trails are optional.
    • A backup is a snapshot of its first frame: it is built in a coroutine
      at 10 ms per frame, so meta, state and players are copied first and
      later records are left out. The session being played ends with it.
    • Restore decodes and checks everything first, runs the journal and
      trails through the same migrations and shape checks as a saved file
      (Schema:PrepareCharacter / PreparePaths), then says what it would do.
      The journal goes only into one with no entries or one the
      missing-journal guard stopped (missing, renamed); what a journal
      without entries recorded since login is replaced, and the
      confirmation says so. Trails go along, or on their own into missing
      or empty trails. Read-only data is never written over. Another
      character's backup takes this character's identity. Then the caches
      are rebuilt, the trackers stopped, the tables swapped in
      (Schema:SwapIn), the canary stamped and the UI reloaded.
    • Windows next to the text export: Back up journal (selected for
      Ctrl+C, With footsteps) and Restore backup (a paste collected from
      OnChar into a 4,000-byte box, a status line, a confirmation popup).
      /ws backup, /ws restore and two Settings > Data buttons; the
      missing-journal warnings point at /ws restore.
    • /ws backup sample [days] (developer mode): the backup of a made-up
      year, never stored, to time the clipboard in game; it can be checked,
      not restored. Developer mode prints how long backup, paste and check
      took.
    • Measured on a very active simulated year (14,600 entries, 3,650
      trails): 1.06 MB without trails, 2.5 MB with; made in 0.37 s, checked
      in 0.26 s in plain Lua. One string, no compression for now.
    • The exit criterion's unit test: a simulated year survives backup,
      Reset and restore with the same facts, caches and Your Year cards.
    • enUS and deDE strings, docs, README and the 0.6 in-game checklist.
    • 318 tests (was 289), all passing on Lua 5.1.5 and 5.5; luacheck clean.
  • Plan the 0.6 backup
    The missing-DB guard can't help when every saved file is gone, and the
    0.5 text export can't be restored. A new §4.8 plans a backup string of
    the character's facts (journal, optionally trails; caches rebuilt on
    restore) in the codec's alphabet with a checksum, and restoring it
    only into an empty or missing journal, through the same migrations and
    build-then-swap as a loaded file. §4.6 points at it; the roadmap gets
    a 0.6 row with its exit criterion.
  • Merge pull request #4 from ollidiemaus/0.5-your-year
    Wayscribe 0.5 Your Year: yearly recap cards, share of Azeroth walked, journal export
  • Record the 0.5 in-game results and probe
    The 0.5 probe on build 70235: C_Map.GetMapChildrenInfo lists 50 zone
    maps (Kalimdor...
Read more