Skip to content

Archive experiment#289

Open
riperiperi wants to merge 115 commits into
archivefrom
archive-experiment
Open

Archive experiment#289
riperiperi wants to merge 115 commits into
archivefrom
archive-experiment

Conversation

@riperiperi
Copy link
Copy Markdown
Owner

@riperiperi riperiperi commented Feb 5, 2026

I originally split this off due to using a custom version of Monogame and an experimental feature, but those things should be solved now.

There are a large number of changes in here to a lot of different things, the majority are around the lot connection lifecycle. Here are some highlights for other features:

  • Github Actions build
  • 3rd person direct control, improved direct control interaction with live mode UI / interactions
  • Ambience rework for TSO and TS1
  • HIT VM fixes for footstep sounds
  • Archive server user and event management, dialog redesign
  • RSA client/server automatic authorization (could still use a TLS connection)
  • Huge performance improvements for loading and SimAntics heavy situations
  • Fun archive specific features
  • A lot of archive and game bug fixes + improvements (eg. TTS voice selection)
image

- Transitioning multiple from and back to a lot may error since you haven't left the first one yet
- Weather "darken" not being properly set for lighting calculation is very noticable
- Switching to city view for half a second sucks
Prevented joining lots in the first 10 seconds, and also messed with the shutdown process.
Configures the rate at which the server sends ticks, relative to its base rate of 30 ticks per second. Default is 4 (7.5 ticks per second), which was appropriate for an MMO scale server.
Also adds mgcb tooling to the project, fixes the project files and splits fonts to their own.
- Disables pixel snapping for sprites when scale isn't 1. (avoids weird holes in 9-slice textures and similar)
- Enable scaling for masked UIListBox
- Enable scaling for UI3DThumb
- Use HighDpiMode.PerMonitorV2 for FSO.Windows
- Fix ArchivePersonSelection when scaled
- Fix bulletin board sticky rendering when scaled
- Improve tooltip positioning at 100%
Reduces bad frametimes when running with high refresh rates like `-hz120` `-hz144` `-hz180`
TODOs:
- Fix running back to previous lot causing sim-already-exists error
- look over CoreGameScreen/CameraController3D changes (camera inheritance + transition)
- VMNetGotoLotCmd level?
- VMNetSimJoinCmd validate transition info!
It has some opinions on what settings should be, but generally uses the last known good configuration.
Needs Wrapped = true, but does work
CommandLineParser has been changed significantly, so there is some refactoring.
Export archive config to be used with FSO.Server.Core.

Not currently tested.
- Plugin needs teleporter checks and committing reviewed json
- Archive management needs a lot...
Most things should work now.
Should probably still support TLS to prevent mitm -> session hijack, but this should avoid client ID harvesting.
Still a bit buggy in some places (main window, avatar tool) but is actually usable now.

Could do with hi-dpi support in the BHAV editor. Not sure what can be done about win forms super broken per-screen DPI switch.
- SetToNext often has StackObject scope, use prefetched objects when possible
- Cheaper type checks for VMRoutingFrame and VMDirectControlFrame (they are less common cases, so a boolean to indicate the frame is normal is a lot faster).
- Some cleanup for Pop method. Could be faster if the thread separately remembers the active frame for NextInstruction.
- Some stackallocs that probably don't do much in .NET 9 but make me less unhappy
Also select voice randomly from installed selection based on persist id. (maybe users should be able to select a preference)
Use the mouse wheel to switch to a third person perspective. Currently still clips through walls a bit.
Should support combining different tile raycasts (floor/wall) into one. Used to push the 3rd person camera away from walls.
- Ideally should be able to clip through fences
- Core algorithm is based on the existing tile raycast, which isn't airtight.
- Could start using for the terrain raycasts.
I guess this is a precision error?
Add some rudimentary validation for it, too. Should probably disable thumbnail and facade generation when exiting build/buy without changes.
Currently displays TSO credits, should allow switching between this and FSO credits in future
@salvadorc17
Copy link
Copy Markdown

The archive experiment is just testing stuff no regular changes?

* Server connection back

Get the server connection working again that was lost by the Archive
mode changes.

Key changes:
- Fix server connection bugs caused by the new Archive mode
- Update Microsoft.Data.Sqlite.Core to 10.0.2
- Add allOpenable config flag for free roam lot transitions for normal
servers.
- Add city and lot server configuration options
- Make UCP.InitArchive public for CoreGameScreenController
- Archive UI improvements (join dialog with direct server IP join)

* Keyboard navigation

Add full keyboard and Tab navigation support to the UI framework.

Key changes:
- Tab/Shift+Tab navigation between focusable UI elements
- Keyboard support for UIButton, UISlider, UIListBox, UICombobox
- UIRadioButton arrow key navigation within groups
- Mouse wheel scrolling for UIListBox
- UIContextMenu keyboard navigation (arrow keys, Enter, Escape)
- UIGridViewer keyboard support
- Focus management via InputManager with IFocusableUI interface

* FSO.Unix cross-platform support

Add FSO.Unix project for native Linux and macOS support.

Key changes:
- New FSO.Unix project with cross-platform entry point
- macOS .app bundle creation and deploy script for macOS/Linux
- Native dialogs via osascript (macOS) and zenity (Linux)
- ImageSharp-based bitmap/PNG handling instead of Windows drawing library
for non-Windows platforms
- GameLocator path fixes for TSO on macOS and Linux

* Docker containers

Add Docker configuration files for running a FreeSO server.

Key changes:
- Dockerfile and docker-compose.yml for server deployment
- Entrypoint script with secret generation
- OCI image labels for container metadata
- Default server configuration template (config.json)

* Spectator mode

Allow non-roommate visitors to open and explore lots in a read-only
spectator mode. Spectators can walk around and observe but cannot
modify the lot (build, buy, delete objects, or use most interactions).

Key features:
- Basic spectator mode for non-roommate lot opening
- Block VM commands, cross-room routing, and portal interactions for spectators
- Block pie menu on lot objects with error feedback
- Spectator-to-writable transition when a roommate/owner joins
- Reload lot save and transition back when lot owner joins
- Walls up with roof on spectator lot entry
- Spectator label shown in UI
- Admins excluded from spectator mode restrictions
- Chat event when lot transitions from spectator mode
- Allow spectators to use direct control
- No spectator lots in Archive mode

Also includes: cursor fixes for macOS/Linux, PriorityQueue pathfinder
optimization, UIListBox focus fix, CurLoader BMP header fix, API
config cleanup, and various other minor fixes.

* Spector mode improvements
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.

3 participants