Repository navigation
fix: consolidate startup, navigator, LAN administration, RP speed limits and graphics defaults - #3481
Conversation
… dedicated policy (#333)
Preserve explicit plugin preferences and keep ordinary vehicle scripts active. Cover new games, restored situations and tutorials; update Apple UI and docs.
Keep the upstream camera-heading behavior while retaining server-authoritative teleport requests. Preserve both changelog entries.
Test builds for 4ee3e71
|
thibautgnt
left a comment
There was a problem hiding this comment.
Thanks @isaacsa2 for pulling all of this together. The server-side checks for self teleport are well built: the sender is the authenticated peer, never an id from the payload, coordinates are checked, bring/bringall stay admin-only on the server, and the F4 camera heading from #3421 is kept. The startup fixtures (staged key, battery master, a reverse trigger that must never be pressed) are good regression tests too.
Three things I would like fixed before merge:
-
The navigator cap comes back at the numbers that were reverted (
crates/omsi-navigator/src/build.rs:16-17,73-74,117). 10060f4 removed the 260 000 ground vertex cap because Berlin-Spandau goes over it. With this PR, Spandau doesn't lose its roads any more, but its whole ground becomes a grid of about 208 x 208 cells (ground_budget.rs:81,sqrt(260000 / 6)). That is a 6 m cell over the panel's 1280 m square (PANEL_REACH640), and tens of metres per cell on the city map, so the small map on a popular map turns into a mosaic, while main draws it exactly today. The three house painters also still hard-drop everything after 90 000 vertices (room_for), which is the same "later geometry vanishes" failure the revert was about, now for houses. 260k x 60 B is about 15 MB, and #3249 was a 1 to 2 GB buffer. Please raise both caps so they only kick in on truly pathological builds (ground in the low millions, houses around 1M each, or a byte budget of a few hundred MB). Please also attach panel and city map screenshots on Berlin-Spandau and Xiahai, main vs this branch. -
Plugins get switched off for existing players too, not only new profiles (
crates/omsi-launcher-core/src/lib.rs:2256,settings-schema.js:423,SettingsPage.swift:419).settings_from_text_onnow defaultsdisable_pluginsto true for every file without the key, andplugin_launch_tests.rsasserts exactly that fordiscord_status=1\n. So anyone whose settings were last written before #3379 (three days ago) starts without their Lua, OMSI and vehicle plugins after updating, with no hint in game and nothing in the CHANGELOG. The description says "new launcher profiles". Please make the code match it: default to true only when there is no settings file at all (text == None), keep false for an existing file without the key, and add a CHANGELOG line. Since this reverses the opt-in design of #3379, a quick ok from @turbo-devv would be good (or split it out). -
New texts have no translations (none are in
crates/omsi-app/locales/app.yml):crates/omsi-app/src/admin.rs:225"Invalid teleport destination",:230"Teleport requested from the server"crates/omsi-lan/src/admin/panel.rs:195, 278, 280, 282(the four new Players menu lines)- Server answers, which go through
trinadmin_panel::take:crates/omsi-lan/src/admin.rs:325, 329,crates/omsi-app/src/app_impl/lan_tick.rs:123 - The changed launcher and Apple labels and help texts ("Disable plugins (recommended)", the new
light_shadows,road_snowanddisable_pluginshelp) are new keys now, so the existing "Disable plugins" translations are lost. Either keep the old wording or add every language for the new one.
Non-blocking:
- Ctrl+click on the city map (
app_impl/vehicles.rs:146) and "Teleport to a start point" (game_lists.rs:1099) no longer say anything when they succeed in solo or as host. The "The bus stands ..." messages were dropped; onlymove_here.rskept its message. lan_tick.rs:27sendsspeed-limit?every 180 frames for the whole session. Current release servers answer it with a "command not taken" log line each time, for every player. Asking once after connecting and again after a reconnect (likevoice?) would be enough.- A client in a player-hosted session used to get "In a LAN session only the host moves vehicles on the map". Now it gets "Teleport requested from the server" and then a rejection that talks about administrator authentication (and from an older host, nothing at all). If the client can tell it is not on a dedicated server, keep the old local message.
crates/omsi-net/src/ws.rs:1219: on Windows a port that is excluded for TCP fails withPermissionDenied(os error 10013), notAddrInUse. That is exactly what madehost_ports.rsfail in this run's windows-tests (a file this PR doesn't touch, so a re-run should pass). Retrying onPermissionDeniedtoo would make the new helper hold up on Windows.crates/omsi-lan/src/admin.rs:292: the doc comment ofserver_commandnow sits onPLAYER_TELEPORT_ALLOWED. Please move it back above the function.- CHANGELOG: the new entry cites
#329(a fork number) and leaves a double blank line. The new default changes (plugins, built-up snow, light shadows), the speed limiter and the admin teleport have no entries. - Built-up snow and light shadows defaults:
light_shadowsonly matters in Enhanced (the default mode is Vanilla+), and road snow does nothing outside winter. The perf gain for most players is small, and it changes the defaults of features from @Bulekoo and @usonskyyyy, so they should hear about it. .github/workflows/release.yml: only a retry loop aroundsdkmanager, with no permission, secret, signing or publishing change and no new download source. Fine to keep here.build.rsbelongs with the navigator change (point 1).- The PR body was pasted as raw HTML. Plain markdown would be easier to read.
…lized UI behavior
…lized UI behavior
…lized UI behavior
…lized UI behavior
…lized UI behavior
…lized UI behavior
…lized UI behavior
…lized UI behavior
|
Thanks for the detailed review, @thibautgnt! I've pushed the follow-up fixes to this PR ("666cf6a"). Here's what has changed: Navigator geometry
Comparative screenshots of Berlin-Spandau and Xiahai (main vs this PR, navigator panel and city map) are still needed. Plugin compatibility — temporary safety measure Disabling optional plugins by default is intended as a temporary stability measure until the underlying plugin compatibility problems are fixed. Some legacy OMSI plugins, including integrations such as OmniNavigation and AUXI, have been reported to cause freezes, stalls or unexpected behavior when running under openOMSI. There are indications that certain plugin interactions may block the game's main thread, but the exact causes still require investigation. The intention is not to remove plugin support or permanently force plugins off. The updated behavior is:
Once plugin execution, compatibility and potential main-thread blocking issues have been resolved and tested, we should reassess this temporary default. @turbo-devv, your feedback on this approach would be appreciated. Localization
Additional fixes
Graphics defaults Accumulated snow and Enhanced light shadows remain available as optional effects. Their default settings are intended to avoid unnecessary GPU work on fresh configurations, although the actual performance impact depends on weather conditions and rendering mode. Existing saved preferences are respected. Validation At commit "666cf6a", Linux, Android, macOS ARM64, Windows x64, Windows tests, CodeQL analysis and secret scanning passed. The separate build check was still running at the last verification. Real-map comparisons and multiplayer gameplay validation remain necessary before declaring the changes fully verified. Thanks again for the review. The goal is to preserve backward compatibility while improving stability and avoiding regressions. |
thibautgnt
left a comment
There was a problem hiding this comment.
Thanks @isaacsa2 for working through all of this so quickly. The tp-policy? handshake is a neat way to tell a dedicated server from a player host without guessing, and it brings back the old local message for player-hosted sessions at no cost.
All three points from my last review are fixed:
- Navigator caps: 2M ground vertices and 750k per house painter (about 243 MiB worst case,
crates/omsi-navigator/src/build.rs:18-19), with the grid clamp raised to 512. That is the "only on pathological builds" range I asked for, and nothing is preallocated. - Plugins:
disable_pluginsnow defaults to true only when there is no settings file (crates/omsi-launcher-core/src/lib.rs:2257), an existing file without the key keeps plugins on, andplugin_launch_tests.rschecks both cases. USER_GUIDE and CHANGELOG say so too. - Translations: the launcher keeps the existing "Disable plugins" wording and help, which are translated, the Players menu and the teleport messages reuse existing keys, and the two new server answers have all 29 languages.
Before merging:
- GitHub shows a conflict with main in
crates/omsi-app/src/settings.rs:557(Settings::default): #3427 addedpassenger_hailing: falseto the same line. Keep your line and addpassenger_hailing: false,afterpassenger_animation. With that, size budget and arch guard pass on the merged tree. - The Berlin-Spandau and Xiahai screenshots (panel and city map, main vs this branch) you mentioned would be good to have on the PR before it goes in.
Non-blocking:
crates/omsi-app/locales/teleport.yml: rust-i18n does load it, but everything else only readsapp.yml: the locale check in pr_checks (.github/scripts/check_locales.py),omsi_launcher_lib::i18n::TABLES(theinclude_str!that makes cargo rebuild when translations change, so an edit toteleport.ymlalone may not recompile),apple/Tools/gen-strings.pyand the machine translation. Moving the two entries intoapp.ymlwould keep it all in one place.apple/Shared/Pages/SettingsPage.swift:419: the new Apple "Disable plugins" toggle and its help are not inapple/Resources/Localizable.xcstringsyet, so the Apple launcher shows them in English. Runningpython3 apple/Tools/gen-strings.pypicks them up fromapp.yml.- The
tp-policy?/tp-policy 0|1exchange has no test. A small one next to the existingserver_commandtests would protect it. - CHANGELOG: there is a blank line in the middle of the Fixes list (before "Dense navigator keeps dense maps intact"). Also, "Safer defaults on new installations" holds for plugins, but
road_snowandlight_shadowsdefault off for any file without the key too, so files written before 10-25 / 10-27 also switch. That is minor, just worth knowing.
Thanks again, this is in good shape.
…nd dedicated LAN settings
|
Thanks for asking, @isaacsa2, and @thibautgnt for raising it. I'm fine with the built-up snow being opt-in: it changes how the winter looks, not everyone will want that, and with the switch in Settings > Graphics each player decides for themselves. For reference, from the measurements on #3237 (RTX 3060, DX12, 1080p): switching it off saves about 0.45 ms of the 0.55 ms it adds to the GPU main pass in snow (Enhanced, looking down a street), and nothing measurable outside winter. The remaining 0.09 ms is the snow code being in the scene shader, which stays either way, since the shader is picked by the device gate ( |
|
Thanks again, @thibautgnt! Just a quick note regarding the requested screenshots: unfortunately, I won't be able to provide comparisons using the Xiahai map at the moment, as the available download link is no longer working and I haven't been able to obtain a copy. Berlin-Spandau is available, so it can still be used for the in-game visual comparisons of the navigator panel and city map, using the same locations and zoom levels on I understand that the screenshots are intended to verify actual in-game rendering, particularly road coverage, terrain detail and building geometry, rather than just confirming that the geometry budgets are respected. The Xiahai comparison will therefore remain unverified unless a working download or another copy of the map becomes available. Thanks for understanding! |
thibautgnt
left a comment
There was a problem hiding this comment.
Thanks @isaacsa2 for bringing this up to date with main so carefully. The merges are clean: the PR's net change against main is exactly what I approved on 666cf6a, nothing from main is lost.
Settings::default(crates/omsi-app/src/settings.rs) keeps all four passenger fields from #3427/#3428/#3429 (passenger_hailing,passenger_full_bus_reaction,passenger_connections,passenger_transfer_percent) next to yourlight_shadows: "off"androad_snow: false, and the room switch from #3488 is untouched.- The launcher parser change (dc4d83d) only shortens the comment above
disable_plugins, the code is the same. - Size budget and arch guard pass on this head, which already contains current main, and CI is green.
- The CHANGELOG blank line is gone and the defaults entry now says older files switch too, thanks.
Non-blocking: the Berlin-Spandau comparison screenshots (navigator panel and city map, main vs this branch) are not on the PR yet. Understood that Xiahai can't be downloaded any more, Spandau alone would be enough. The non-blocking notes from my last review (teleport.yml vs app.yml, the Apple strings, a tp-policy test) still stand if you want to pick them up later.
Approving, thanks again!
What changes for the player?
This PR consolidates multiple fixes and improvements for openOMSI, focusing on vehicle startup compatibility, navigator geometry, multiplayer administration, optional RP driving rules, performance defaults, plugin stability and build reliability.
The changes are intended for upstream integration while preserving existing player configurations and compatibility wherever possible.
1. Vehicle startup and ignition improvements
Improves automatic startup for vehicles using different electrical and ignition systems.
2. Navigator geometry improvements
Improves rendering of dense maps without prematurely discarding roads or ground geometry.
Updated geometry limits:
The combined raw vertex-data ceiling is approximately 243 MiB at 60 bytes per vertex. This is not a preallocated allocation.
The fallback can still reduce visual fidelity when triggered, so real-map comparisons remain important.
3. Dedicated-server administration and teleportation
Restores and improves server-authorized multiplayer relocation.
Supported operations include:
Teleport requests are validated using the authenticated network peer and server-side permissions.
The server rejects invalid destinations and unauthorized actions.
Configuration:
```ini allow_player_teleport = 0 ```
The default remains restricted.
Setting it to
1permits ordinary players to relocate their own vehicles, without granting authority over other players.Player-hosted LAN sessions retain their previous host-only behavior.
4. Optional RP speed limiter
Dedicated servers may configure:
```ini speed_limit_kmh = 60 ```
Supported values:
0,60,75,80.This remains a cooperative client-side RP mechanism, not server-enforced anti-cheat.
0disables the feature and remains the default.5. Graphics performance defaults
Fresh configurations disable certain optional GPU-intensive effects by default:
These features remain fully selectable in the graphics settings.
Existing saved preferences are preserved.
Performance improvements depend on the rendering mode, season, weather and hardware. No universal FPS increase is claimed.
6. Temporary plugin safety defaults
Important: Disabling optional plugins by default is a temporary safety and stability measure until the existing plugin compatibility issues are properly resolved.
Some legacy OMSI plugins and external integrations have been reported to cause freezes, stalls or unexpected behavior under openOMSI.
Potential main-thread blocking and plugin compatibility issues are still being investigated.
The temporary default reduces the likelihood of exposing new installations to these problems before the underlying causes are fixed.
Compatibility policy:
disable_plugins: previous plugin behavior preserved.This is not intended to permanently disable plugin support.
Once the execution and compatibility problems have been corrected and validated, the temporary default should be reassessed.
7. Build and test reliability
PermissionDeniedandAddrInUse.8. Localization and compatibility fixes
How to test
Vehicle startup
Navigator
main.Dedicated server and multiplayer
goto,bring,bringallandunstick.Speed limiter
Plugin compatibility
disable_plugins.Graphics settings
Automated validation
At commit
666cf6a4cef4a2f75a41ab4734310c4f812c7baa:Screenshots and remaining validation
Comparative screenshots on Berlin-Spandau and Xiahai, including both the navigator panel and city map, are still pending.
Real-world multiplayer compatibility and visual/performance regression testing also require further validation.
No screenshots or performance results are claimed without supporting evidence.
Review notes
Feedback on the temporary plugin default is welcome from @turbo-devv.
Feedback on optional snow and lighting defaults is welcome from @Bulekoo and @usonskyyyy.
The aim is to merge these improvements upstream once remaining review concerns and validation requirements have been addressed.