Skip to content

ForeverTAS 0.2.5

Choose a tag to compare

@Skycrafter-dev Skycrafter-dev released this 05 Oct 08:29
· 3 commits to main since this release

ForeverTAS 0.2.5

Downloads

Start with the download for your operating system. ForeverTAS can recommend and install the matching GPU package from inside the app. This release includes the full Linux and Windows package range, including the NVIDIA packages and AMD RX 7000/9000 packages.

Changes since 0.2.4.

New and improved

New search modes

Tree search focuses changes on selected parts of your input window. By default, it divides that window into four parts and chooses one at random to change. On CPU, it explores branches of possible changes and reuses the simulation work that those branches have in common. You can change the number of parts, how many are selected, and how the other parts are handled.

Adaptive escalation starts with small changes and widens the search when it stops improving. The default is eight parts, starting with one selected part. After eight unsuccessful trees on CPU, it tries two parts. Another eight unsuccessful trees widen it to four, and another eight widen it to all eight. An improvement resets it to one part. On GPU, it counts unsuccessful batches instead of trees. A batch contains one or more attempts; this is not a timer.

Important differences between CPU and GPU:

  • CPU: turn on Promote each best result to baseline to use better results as the starting point for later attempts. It is off in the default settings; with it off, the search keeps starting from your original base inputs.
  • CPU Tree search options: workers can follow their own improvements for a while before taking the shared best result. This is called islands; the default sharing interval is five seconds, and it only has an effect with multiple workers and promotion enabled. Advanced settings also let you control the tree shape and assign some workers to Basic bruteforce.
  • CPU segment boundaries: a selected part tells an input pass where to start its change. A time shift, held input, or smooth-steering change can also affect later parts. It is not a strict guarantee that every control outside the selected part stays untouched.
  • CUDA and HIP: each attempt changes randomly selected parts and keeps the other controls at the current best. Improvements always become the new starting point, even if the promotion checkbox is off. These GPU modes use separate attempts, not the CPU branching tree. CPU-only tree-shape, islands, and mixed-worker settings do not apply.
  • Both new modes support CPU, CUDA, and HIP. They do not support Vulkan. Basic bruteforce remains available.

Targets and conditions

  • Time target: find the first moment when all your conditions become true, then make that moment happen as early or as late as possible. This is checked within the target's time window, every tick. It needs at least one condition. A run that never meets the conditions is not a successful result. "As late as possible" delays the first matching moment; it does not choose the last matching moment in a run.
  • Checkpoint time target: reach a checkpoint or finish sooner, using the moment the game counts it. You can combine filters for checkpoint number, lap, map slot, and event index. All selected filters must match. Evaluate base shows these details for your base run, and the fields have explanations. This target works on CPU, CUDA, and HIP, but not Vulkan. It uses 10 ms steps; Precise finish time is still the separate target for a finer finish-time estimate. Precise cp time may come in the future.
  • Custom volume targets on GPU: CUDA and HIP can now search for entry into a volume made from your custom polygon and its depth, with up to 256 polygon points.
  • Lap-aware conditions and custom goals: use car.completed_laps, or its short name car.laps, to check completed laps. car.cps counts ordinary checkpoints across laps and does not count finish crossings.
  • Easier condition scripts: add comments, combine rules with AND/OR or &&/||, use !=, and group rules with parentheses. Empty scripts, including scripts containing only comments, do not add a restriction.
  • Searchable expression help: the condition and custom-target editors show a searchable tree of supported properties and functions, with descriptions, units, and suggestions while typing.

Inputs and search settings

  • Gamepad driving: select a controller, adjust its steering deadzone, and drive with analog steering and accelerator/brake controls. Driving is recorded as an input script that you can copy or use as a search starting point. Keyboard controls still work alongside it. Losing focus or disconnecting the controller releases its controls; return them to neutral before driving resumes.
  • Global steering and time units: choose steering values from -1 to 1 or the game's native -65536 to 65536 range. Choose milliseconds, seconds, or clock-style times across the interface. Changing the display units does not change your saved values.
  • Readable time entries: time-window fields accept values such as decimal seconds and clock times, including comma decimals. Input scripts also accept clock timestamps such as 1:23.450. Times that need to follow the simulation's 10 ms steps are checked rather than silently rounded.
  • Clearer time-window endings: Until horizon follows Search end. A fixed end time stays fixed, even if it is zero. Switching modes remembers the fixed value. Extend search lets you explicitly grow Search end to cover your configured windows.
  • Disable passes without losing them: turn an input pass off and back on while keeping its settings and position in the list.

Preview and history

  • Evaluate base button: get to know your initial run value before starting a bruteforce.
  • Separate preview length: Preview extent controls how far base, best-run, and history previews play. It is saved separately from Search end, so a longer preview does not make each search attempt longer.
  • A car for each restart: the viewer shows the latest improvement from each restart as a path and a playback car. A new improvement replaces that restart's preview, and older restarts are dimmed.
  • Clearer results: saved sessions and restarts are grouped inside History. Current best and History have separate input displays, so you can copy the current best without accidentally copying an older selected result.
  • Better long-session handling: older history loads in pages, and the amount of live preview data kept in memory is limited.
  • Hide the viewer without stopping a search. Extra ray-tracing scene data is now prepared only when it is needed.
  • Lock target dragging: save a preference that prevents accidental target movement with the mouse. The control appears on the Targets tab.
  • Remembered scroll positions: each settings tab keeps its own scroll position when you switch tabs.

Debugging and messages

  • Clearer failures: error messages explain what happened and suggest what to try next. Technical details are available separately and can be copied when reporting a problem.

Fixes from 0.2.4

  • Faster finish and volume searches: CPU attempts stop when they can no longer beat the best finish or entry time. Volume evaluation stops after its accepted first entry, while the full result preview remains available.
  • More reliable cars and paths: fixed cases where cars or best-run paths disappeared when loading or reloading a map, including when the same map path was written differently. Preview changes made during loading are applied afterward.
  • Reliable return to base inputs: choosing the base preview clears the selected restart and restores the base run independently of history.
  • Camera fixes: Go to start rewinds and focuses the car. Free-camera clipping no longer changes with orbit zoom.
  • Safer steering edits: unnecessary steering insertions are removed only when doing so preserves the controls. Large input scripts and smooth-steering passes also avoid repeated work.
  • Cleaner finish exports: Precise finish time results leave out inputs after the winning simulation step.
  • Clearer numbers: speed displays show km/h alongside m/s. Times keep meaningful trailing zeroes, volume-entry times keep their fractional milliseconds, and large counts use short labels with exact values available.
  • CUDA driver compatibility: fixed a problem that could reject an otherwise compatible NVIDIA driver.
  • Better stopping and closing: Abort remains available while a search is stopping and keeps the last completed best result, without waiting for a final preview. Closing the app waits for background work to stop and offers an explicit force-exit choice if needed.
  • Correct restart controls: the selected automatic-restart policy and its controls stay in sync.