options UI: anchor all file terminology on the manual's 'game file' (English review)

Full-string audit of the settings UI (front options + F10 overlay):
- front top-row label 'Save file' -> 'Game file' (the instruction
  manual's term)
- per-file row tag '(profile)' -> '(game file)', both UIs
- F10 unavailable value 'Select file' -> 'Select game file'
- kept: 'File N' values, the '(File N)' section annotation and the
  '(no file)' unavailable state (short forms; the annotation's host
  word is the section title, which says the file number)
- 'Bond file' now appears only in identifiers/config keys
  (Bond.* rows, watchSettings* names, ini keys), never user-visible
Docs: D357 plan section 4 is now the terminology record (final string
table); D358 finding notes the (profile) -> (game file) supersession.
Build + headless smoke clean.
This commit is contained in:
James Dansereau committed 2026-09-27 15:00:01 -04:00
1 parent 8775ca6435
commit 44d2b4353a
4 files changed
+37 -21

No files matched your search

+19 -7
View File
@@ -9,7 +9,9 @@ the `Bond.*` rows only). Triggered by maintainer report: the current values
are "a bit confusing".
Companion change landed with this doc's review: the dim per-file row tag is
now **"(profile)"** (was "(save)"; user request, both UIs).
now **"(game file)"** (was "(save)"); the front top row reads **"Game
file"** and the F10 unavailable value reads **"Select game file"** — the
instruction manual's term (§4).
## 1. Problem
@@ -111,13 +113,23 @@ ranges (2026-09-27). "Display" = what the value column shows today.
| Frame rate cap | 60 · 0–1000 · 1 · `Uncapped/N FPS` | Turok: "up to 120 FPS" / uncapped | **Preset grid**: 0/30/60/120/144 (step = next preset, wraps to Uncapped); value text already `N FPS`/`Uncapped`. Decision: preset grid vs free 1-step (recommend presets; 117 FPS has no purpose). |
| Show FPS | Off/On | both | Keep. |
## 4. Terminology
## 4. Terminology (instruction manual = "game file")
- Per-file row tag: **"(save)" → "(profile)"** (landed with this doc's
review; `frontoptions.c` + `optionsoverlay.c`, both draw paths + comments).
- Open question for the maintainer: the front screen's top row still reads
**"Save file: File N"** — rename to "Profile: File N" for consistency?
(Not done; the save *file* is literally what's being chosen.)
The instruction manual calls the per-player save a **"game file"**; the
settings UI anchors on that term (2026-09-27, maintainer request). Final
string set:
| String | Where | State |
|---|---|---|
| **"Game file"** | front options top-row label (was "Save file") | changed |
| **"(game file)"** | per-file row tag, both UIs (was "(save)", briefly "(profile)") | changed |
| **"Select game file"** | F10 unavailable value (was "Select file") | changed |
| `File N` | row values + the `(File N)` section annotation | kept (value-column short form, PD "Player N" pattern) |
| `(no file)` | unavailable state, dim annotation | kept |
"Bond file" remains in code identifiers/config keys (`Bond.*` rows,
`watchSettingsChooseFile`, ini keys) only -- never user-visible; the manual
and UI say "game file".
## 5. Gates
+4 -1
View File
@@ -13965,4 +13965,7 @@ and are untouched. Verified by build + headless boot smoke; visual check
of the screen owed (D357 plan gate 4).
**Companion change (same commit):** the per-file row tag now reads
"(profile)" (was "(save)", maintainer request), both UIs.
"(profile)" (was "(save)", maintainer request), both UIs. (Later the same
day the tag and the rest of the file terminology were anchored on the
instruction manual's "game file" term: "(game file)" tag, "Game file" top
row, "Select game file" -- D357 plan §4.)
+6 -5
View File
@@ -500,9 +500,10 @@ Gfx *frontOptionsMenuDraw(Gfx *DL)
DL = ink(DL, ROW_X + titleW + 8, TITLE_Y, note, INK_DIM);
}
/* D356: the top save-file row (item 0, not in the row table): the
/* D356: the top game-file row (item 0, not in the row table; the
* label reads "Game file", the instruction manual's term): the
* single file control of the front screen (F10 always targets the
* active file, so it has no file row). L/R (and A) cycle folders; ""
* active file, so it has no file row). L/R (and A) cycle folders;
* (no file) is the unavailable state until one is created. */
{
int y = rowY(0);
@@ -511,7 +512,7 @@ Gfx *frontOptionsMenuDraw(Gfx *DL)
DL = microcode_constructor_related_to_menus(DL, ROW_X - 2, y - 1,
ROW_X + 140, y + 0xE, HILITE);
}
DL = ink(DL, ROW_X, y, "Save file\n", INK);
DL = ink(DL, ROW_X, y, "Game file\n", INK);
int f = watchSettingsActiveFolder();
if (f < 0) snprintf(sv, sizeof(sv), "(no file)");
else snprintf(sv, sizeof(sv), "File %d\n", f + 1);
@@ -533,9 +534,9 @@ Gfx *frontOptionsMenuDraw(Gfx *DL)
DL = ink(DL, ROW_X, y, label, INK);
/* D357: per-file rows in the mixed-scope section carry a dim
* "(profile)" tag (the section title already says which file). */
* "(game file)" tag (the section title already says which file). */
if (optionsRowIsSaveScoped(i)) {
DL = ink(DL, ROW_X + measureW(label) + 4, y, "(profile)\n", INK_DIM);
DL = ink(DL, ROW_X + measureW(label) + 4, y, "(game file)\n", INK_DIM);
}
if (optionsRowIsSlider(i)) {
+8 -8
View File
@@ -146,7 +146,7 @@ struct Row {
int dispDiv;
/* D356: 1 = this row's value lives in the selected save file (per-file
* watch rows). Carries the dim "(profile)" tag on the only section that
* watch rows). Carries the dim "(game file)" tag on the only section that
* mixes scopes (GAMEPLAY); on headers the flag is recomputed at init to
* mean "this section contains per-file rows" (drives the "(File N)"
* title annotation in both UIs). */
@@ -158,7 +158,7 @@ static struct Row rows[] = {
* GAMEPLAY, GRAPHICS, AUDIO, VIDEO; docs/dev/D356-SETTINGS-REGROUP-PLAN.md).
* The D353 "BOND FILE" section -- the one named after WHERE a value is
* saved -- is gone: its surviving rows split into GAMEPLAY (the per-file
* watch toggles, dim "(profile)" tagged since the section mixes scopes) and
* watch toggles, dim "(game file)" tagged since the section mixes scopes) and
* AUDIO (the per-file volume sliders, homogeneous so title annotation
* only), and the "Edit file" chooser row is retired in favour of the
* single top save-file row on the front options screen (frontoptions.c).
@@ -198,7 +198,7 @@ static struct Row rows[] = {
* Bond.AimControl collides with Input.AimMode (two rows fighting over
* the same N64-vs-PC aim model).
* The four surviving per-file toggles move here from the D353 BOND FILE
* section and carry .saveScoped (dim "(profile)" tag, the only mixed-scope
* section and carry .saveScoped (dim "(game file)" tag, the only mixed-scope
* section). */
/* { .key="Bond.Look", .label="Look up/down (watch; stacks)", .kind=ROW_TOGGLE,
.names=kReverse, .found=1, .uiMax=1, .cfgMax=1 }, */
@@ -1231,12 +1231,12 @@ static void valueText(int i, char *out, int n)
double v = rowGet(r);
if (r->kind == ROW_BOND_FILE) {
int f = watchSettingsFolder();
if (f < 0) snprintf(out, n, "Select file");
if (f < 0) snprintf(out, n, "Select game file");
else snprintf(out, n, "File %d", f + 1);
return;
}
if (watchSettingsFieldForKey(r->key) >= 0 && !watchSettingsAvailable()) {
snprintf(out, n, "Select file");
snprintf(out, n, "Select game file");
return;
}
if (r->kind == ROW_RES) {
@@ -1437,10 +1437,10 @@ Gfx *optionsOverlayEmit(void)
gdl = drawText(gdl, OV_LABEL_X, rowY, (char *)r->label,
r->found ? col : 0x808080ff);
/* D357: per-file rows in the mixed-scope section carry a dim
* "(profile)" tag (the section title already says which file). */
* "(game file)" tag (the section title already says which file). */
if (r->saveScoped && r->kind != ROW_HEADER) {
gdl = drawText(gdl, OV_LABEL_X + measureText(r->label) + 5, rowY,
"(profile)", 0x909090ff);
"(game file)", 0x909090ff);
}
if (!r->found) {
gdl = drawTextR(gdl, right, rowY, "(n/a)", 0x808080ff);
@@ -1520,7 +1520,7 @@ int optionsRowIsBondChooser(int i)
/* D356: content rows carry the literal per-file flag from the table; header
* rows were recomputed at init to "this section contains per-file rows".
* Both drive UI decoration (the "(profile)" tag, the "(File N)" annotation).
* Both drive UI decoration (the "(game file)" tag, the "(File N)" annotation).
* The F10 overlay and the front options screen are the only consumers. */
int optionsRowIsSaveScoped(int i)
{