Categories
News

RumiCar Simulator v8.8.0 released

We have released RumiCar Simulator v8.8.0. The release notes below are also available on GitHub.


v8.8.0

Fixes to manual driving, practice records, car types, the standings table and submitted courses; heavy submitted course shapes are lighter (Stage BE; official records and driving on the shipped courses are unchanged — the official-race verifyHash c731ecce and the frozen hashes f0–f3 are the same as before). (1) In manual driving, the car could keep going after you let go — when the touch on a manual button was cancelled mid-press, when you right-clicked a button, or when you switched to another tab or window while holding an arrow key (measured: after a cancelled touch the car kept going for 58–89 px, after a right-click 66–69 px, and hit a wall; with the left/right buttons the following forward run kept turning). In these three cases it now stops just as it does when released normally. (Cases we have no way to trigger and verify — the tab becoming hidden while keeping focus, a key released while ⌘ is held on macOS, and a cancelled pen — are left unchanged.) (2) Practice bests are now recorded by the course’s shape, not its name — after editing the walls of a saved course and pressing “Apply and drive” without renaming it, the practice best set on the old layout was still shown. Now changing the walls starts a separate record, and renaming a saved course keeps its record. A shipped course applied or saved from the editor loses information the editor does not handle (such as the centerline), so it gets a separate record even if the walls are unchanged (61 of the 66 shipped courses). Practice bests set on your own or submitted courses up to v8.7.0 are no longer shown — those records did not store the course shape, so there is no way to confirm they belong to the same course (they are not deleted, and data backups still include them). Records on shipped courses are still shown as long as the course content matches the current shipped course (records from an earlier version carry “(was vX)”). (3) A custom car type could replace a built-in one — if a saved custom car type used the same key as a built-in car, it replaced the built-in definition at startup. It is now not registered, and a notice explains why (the saved data is kept; use Duplicate in the car-type dialog to give it another key). Also, after “re-run locally to verify” on an official race or a ghost battle, the car definitions brought into that race stayed behind and affected later practice runs and the next race. Those definitions are now used only for the duration of the race and restored afterwards (the race result itself and its verification hash do not change). The result table and the ghost legend show the name from the definition that actually raced. (4) Full-width and emoji car names broke the standings table — a name of five full-width characters overlapped the LAP column (up to 20.71 px measured), and names containing emoji could be cut in the middle of a character and garbled. The name column now widens to the width of the names actually drawn, and names are cut to their first five visible characters. Names made only of half-width characters look exactly as before (pixels match in all 280 combinations of 2 courses × Japanese/English × 5 name sets × 14 screen widths). With full-width names the standings frame grows by up to 35 px, so at a 1440 px screen width one course out of 68 (66 shipped, 2 submitted) — Triangle — moves its instruments to the band below the course. (5) Submitted courses are checked more strictly, and course names are no longer confused — (a) Submitted courses now have limits: name and English name up to 120 characters each, description and English description up to 3,300 characters each, and the whole course up to 4 million characters as JSON without whitespace (counted the JavaScript way, so most emoji count as 2). Submissions over a limit are left out of the list, and a notice gives the count and the reason. These limits do not apply to your own saved courses. (b) A long description with no break points no longer pushes the page sideways. (c) When a saved course had the same name as a shipped course, choosing the shipped course could open the saved one, and 🗑 could delete that saved course. A saved course whose name matches a shipped course, or starts with gh: or ★, now uses “★ + saved name” as the value behind the list and in share URLs (the list label is unchanged) (older share URLs that pointed to such a saved course will open a different course or report it as not found). (d) A reference whose name matches more than one submitted course (re-verifying an official race, an old-style share URL) no longer silently takes the first one; a notice says it cannot be decided. (e) In 📋 Event, “🌐 Host officially on GitHub” no longer writes the event when looking the course up by name would find a different course (or several) — it shows the reason instead (for example, a shipped course edited and applied with “Apply and drive” without renaming, or a saved course named like a shipped course). Submitted courses whose name matches a shipped course or another submitted course are written by file name. While the list of submitted courses has not been read in full, hosting saved courses and the like is stopped. (f) If you shrink the frame in the course editor and walls are left outside it (beyond a margin of 5% of the long side), a notice with the number of walls appears when you resize, press “Apply and drive”, save, or import JSON. (g) Saving or submitting with a name made only of spaces now uses the default name. (6) Heavy submitted course shapes are lighter — on submitted courses with comb-like shapes (measured with 2,996 walls), choosing the course, changing the car scale or changing the number of cars froze for several seconds each time (measured: one search for car positions went from 2.4 s to about 0.05 s). On 1000 m-class submitted courses, moving the car-scale slider continuously could exhaust memory (reproduced in node, where it stopped with an out-of-memory error; the wall grids kept in memory are now limited to the latest three). On courses with many walls, drawing while driving (depth view, sensor fans, ranging, zoomed/follow view) is lighter too: in an example with 20,000 walls, 6 cars and 3× speed, each frame went from about 120 ms to about 25–31 ms, and from about 152 ms to about 54–62 ms with the follow camera on (measured in a real browser on this server; the figures vary by machine). Only the amount of computation was reduced; the answers are unchanged — the initial placement on the shipped courses matches the previous version in all 43,956 combinations, and ranging and drawing showed zero difference in the outputs compared against the previous version (about 180,000 cases). One exception can occur in rare cases: the search for places to put the cars now has a limit (6,000 search points), so on a non-shipped course (submitted or your own) whose only free places lie beyond that, the car goes to the next candidate (such as the free point farthest from the other cars) instead of that distant place, and the judgement of how many cars fit can change too. The largest number of search points on any shipped course is 2,552, so placement on the shipped courses, official records and share URLs are not affected. We also improved the verification tooling (permanent verification gates 69 → 73, real-browser checks 30 → 37) and, since BE2 added one module, updated the number of JS modules in README and REBUILD from 46 to 47.


Verifying this release yourself

git clone https://github.com/RumiCar-group/RumiCar-Simulator.git
cd RumiCar-Simulator
node wf_run_all.mjs        # the full assertion-gate suite

The suite runs from a fresh clone with no dependencies beyond Node.js.
The real-browser checks under browser/ additionally need npm install and a display.

How this site is built (v1.4.0)

Some components are open source:

Enjoyed the machinery? The main event is our autonomous-driving simulator — it runs in your browser.
Try the simulator → / GitHub →