diff --git a/context/test-harness.md b/context/test-harness.md index 01d1762..61f27d8 100644 --- a/context/test-harness.md +++ b/context/test-harness.md @@ -117,6 +117,11 @@ sleep ; kill $relay; bt_kill_ours - **Stale exe:** `LNK1104` / a bench ignoring new diagnostics = the previous process still holds `btl4.exe`, or the build silently didn't run — check the `btl4.vcxproj ->` line printed, then rerun. +- **Editing source through bash-heredoc python collapses `\` one level** even + single-quoted -- a `"\n"` you meant as backslash-n arrives as a real newline, + the "fix" silently no-ops (`good == bad`), and the C2001 hunt repeats. Build + backslashes as `bytes([92])`/`chr(92)`, and verify a replace by LENGTH DELTA + or a re-read, never by the script printing "fixed". - Bench artifacts (`*.EGG` copies, `*_NNN.png`, bench logs) must be deleted from `content/` before any dist cut; field logs are never committed. diff --git a/game/glass/btl4fe.cpp b/game/glass/btl4fe.cpp index 5aeafb5..5723b14 100644 --- a/game/glass/btl4fe.cpp +++ b/game/glass/btl4fe.cpp @@ -742,8 +742,18 @@ static void { // JOIN trim: the mech list + the JOIN button; callsign is the edit // control (repositioned in BTFrontEnd_Run). Everything else is the - // operator's call. - y = MenuTopY; AddGroup(GroupVehicle, MenuCol2X, &y); + // operator's call -- EXCEPT experience, which is PER-PLAYER by the + // original design (the sysop set each user's tier; mixed-experience + // matches were legal), and each node's master reads its OWN egg's + // value, so mixing already works end to end. + // + // #116: this group was missing here, so joiners silently launched with + // the hidden menu default (veteran) no matter what they believed they + // selected -- "standard mode still having heat and leaks only occurred + // in steam": hosts got their pick, all three affected players were + // JOINERS, and the one clean player (Sauron) was the one HOSTING. + y = MenuTopY; AddGroup(GroupVehicle, MenuCol2X, &y); + y = MenuTopY; AddGroup(GroupExperience, MenuCol3X, &y); AddButton(GroupLaunch, MenuCol5X, MenuClientH - 190, 220, 52); return; } @@ -1173,6 +1183,8 @@ int strcpy(self.vehicle, kVehicles[menu.selection[GroupVehicle]].key); strcpy(self.color, kColors[menu.selection[GroupColor]].key); strcpy(self.experience, kExperience[menu.selection[GroupExperience]].key); + printf("[fe] pilot experience=%s (%s)\n", self.experience, + FeJoinOnly() ? "join" : "host/solo"); strcpy(self.badge, kBadges[menu.selection[GroupBadge]].key); strcpy(self.patch, kPatches[menu.selection[GroupPatch]].key); strcpy(self.dropzone, kDropZones[menu.selection[GroupDropZone]].key);