Skip to content

0.6.17 - beds told apart from bunks, standing, and StarStrings - #27

Merged
peans99 merged 6 commits into
mainfrom
dev060
Aug 23, 2026
Merged

0.6.17 - beds told apart from bunks, standing, and StarStrings#27
peans99 merged 6 commits into
mainfrom
dev060

Conversation

@peans99

@peans99 peans99 commented Aug 23, 2026

Copy link
Copy Markdown
Owner

Six versions since v0.6.12, released together as 0.6.17.

What changed

  • StarStrings, installed from Settings if you want it. MrKraken's community
    text mod, fetched and removable from the app. The only thing here that writes
    into the game folder: two files, anything else in the download refused
    outright, whatever was there copied aside first and put back on removal.
  • Standing: who you have worked for. A table on Contracts of every issuer,
    taken/finished/abandoned and the span. 16 factions, 205 contracts, 62%
    finished on this install. Two spellings of one faction are one row.
  • What a contract pays, where anyone wrote it down. With StarStrings
    installed, titles carry [150 Rep] and [BP] and the app reads them off.
    Explicitly not your reputation - the logs carry no rep value.
  • Waking up is not a hospital visit. The game prints one line for every
    bed, so every login counted as medical treatment. Told apart now by context:
    27 of them here, and Port Tressler drops from 68 bed visits to 54.
  • A bed where there is no clinic was a hab bed. With the UEX place
    directory on, a bed somewhere with no clinic is ruled out of being medical -
    never ruled in, because a place with both stays ambiguous and the app says so.
  • Fixed the stray character in 64 places. The byte-level repair in 0.6.15
    matched the tail of every valid middot too, doubling the lead byte. All 64
    repaired, every text file checked as valid UTF-8.

Release notes

The final commit folds the ### 0.6.13 section into ### 0.6.17. The release
workflow lifts only the section matching the tag, and 0.6.13 never had a
release of its own, so StarStrings would have shipped unmentioned.

Testing

dotnet test -c Release - 392 passing, 0 failing (301 core + 91 web).

Tagging v0.6.17 on the merge commit cuts the release; the workflow checks the
tag against Directory.Build.props, which already declares 0.6.17.

🤖 Generated with Claude Code

lebelnic and others added 6 commits August 22, 2026 23:11
MrKraken's text mod, from Settings, on a click. It rewrites the game's
English localisation so contracts that award blueprints are tagged, item
names are shorter, contracts show the reputation they pay and the mining
guide is sorted by rarity. The app fetches their release, says when a newer
build is out, and can take it back out again.

It is entirely their work. Nothing of theirs is vendored, altered or
re-hosted: the download comes from their own GitHub releases, and they are
credited in the card itself, on the About page, in the footer and in
docs/credits.md with what was taken and what was not.

This is also the first thing in the app that writes outside its own data
folder, so it is built as an exception. The archive is judged by where each
entry RESOLVES, not by what it claims - two paths accepted, anything else
refuses the whole install before a byte is written, and
"Data/Localization/../../Bin64/StarCitizen.exe" is caught by that even
though it starts with an allowed prefix and lands inside the game folder.
Every file written is recorded with what it displaced, so removing restores
exactly that and touches nothing else. "Installed" means the files are
still on disk, because a patch can drop the original back without telling
anyone.

Updates compare publish dates: the project publishes every build to a tag
called "latest", so a version string would compare equal forever.
Reputation is not in the logs. Checked the same way the kill events were:
across all 148 backups the only mention is the gRPC channel being opened to
sc.external.services.reputation.v1.ReputationService. Not one faction,
value or delta - the numbers live on the far side of that channel.

So the app counts the thing that moves standing instead. A table per issuer
of contracts taken, finished, abandoned, the rate, and how long you have
been working for them: 16 factions and 205 contracts on this install. Two
spellings of one faction are one row, because the game writes both "Red
Wind" and "Redwind"; only spacing and one known abbreviation are merged,
since guessing that two names mean one faction is how a page ends up
quietly wrong about who you have worked for.

And the second route, which is the interesting one: the game logs a
contract's DISPLAYED title, and that title comes from the localisation file
StarStrings replaces. The mod writes the reward into the title - [150 Rep],
[BP] - so with it installed the log carries the number in the only place
the game was ever going to put it. Read off the title, shown as a chip on
the contract, summed per faction.

Its coverage is small and the app says so rather than implying otherwise:
25 tagged titles in ~90,000 lines, one family matching the 178 distinct
contract titles here. A faction with nothing annotated shows a blank, never
a zero - nobody wrote it down is not the same as it pays nothing.
The game prints one line for every bed - "Medical Bed: The bed has restored
your health and reset your BDL" - whether it is the clinic bed you crawl
into after a fight or the hab bed you log out and wake up in. Every login
was therefore a medical bed visit, which is why Port Tressler looked like a
hospital.

Nothing in the text separates them, so the kind is read from what surrounds
the toast: a bed within three minutes of leaving the menus with nothing
having happened to you is waking up; a bed within fifteen minutes of a
death or an incapacitation is treatment; anything else is a bed used.

The window is measured from leaving the frontend rather than from the start
of the log, which was the whole difference: the log starts at the launcher,
so a wake-up landed nine minutes in and looked deliberate. Measured from
the world, it is 78 seconds. That change alone moved 19 more visits into
"waking up" - 27 in total here, and Port Tressler drops from 68 to 54.

The section is "Beds used" now, the logins are still reported rather than
hidden, and beds used after a casualty are marked. Cached summaries carry a
new payload version so every install re-reads its logs once.
The place directory carries has_clinic per station, so a bed used somewhere
with no clinic had no clinic bed to use - whatever the toast said. That is
the only direction this evidence runs, and the first cut of it got that
wrong: it counted a bed at a place that HAS a clinic as a clinic visit, and
Port Tressler has habs and a clinic, so 106 beds were labelled medical on
the strength of the building having one. Now a place with no clinic rules
the bed out, a place with one proves nothing, and a place the directory
does not carry says nothing at all.

Three flags travel with the directory that did not before - clinic and
habitation - so an install that fetched it earlier has to refresh that feed
before this can sort anything. The page says so instead of showing an
unexplained pile.

On this install it rules out nothing: every bed was used at a place with a
clinic, so the honest answer stays "could be either" for 118 of them. It
will matter for anyone who sleeps at outposts.
While adding the bed split I wrote a middot as a wide character, which perl
emitted as a lone 0xB7, and then "repaired" it with a substitution that
looked at the byte AFTER each 0xB7 to decide whether it stood alone. The
tail of a perfectly valid middot - C2 B7 followed by a space - matched that
test, so 64 good separators became C2 C2 B7 and rendered as the replacement
glyph: "on <?> fetched 48m ago" through the Settings feeds, and the same
wherever else a middot separates two words.

Repaired by dropping the doubled lead byte, which restores all 64 and
leaves the 69 originals alone. Every file under web/ and docs/ now passes
iconv as valid UTF-8, and there is no double-encoded sequence anywhere in
the tree.

The lesson, since this is the second encoding accident in two days: byte
surgery on a text file needs the whole sequence in the pattern, not one
byte of it, and the check afterwards is iconv rather than eyes.
0.6.13 never got a release of its own - v0.6.12 is the last tag - and the
release workflow lifts only the section matching the version being tagged.
StarStrings would have shipped in v0.6.17 without appearing anywhere on the
release page. Every other version between releases was already accumulated
into the released section; this one was the exception.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@peans99
peans99 merged commit 5e657f7 into main Aug 23, 2026
1 check passed
peans99 added a commit that referenced this pull request Aug 28, 2026
0.6.17 - beds told apart from bunks, standing, and StarStrings
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants