Skip to content

Releases: Skycrafter-dev/ForeverTAS

ForeverTAS 0.2.7

Choose a tag to compare

@Skycrafter-dev Skycrafter-dev released this 18 Oct 17:39

ForeverTAS 0.2.7

Downloads

Once this release is published, existing installations can update from inside the app. New users can start with the download for their operating system, then let ForeverTAS recommend the matching GPU package.

Fixed

  • Session rows now show Finish time in seconds instead of nanoseconds. This also applies to previously saved sessions.
  • Autorestart now starts another cycle even when no iteration meets the conditions. Stop and Abort still work, and cycles with no valid result do not save a fake winner.
  • Fixed Tree search and Adaptive escalation on CUDA/HIP sometimes stopping with "sandbox input timeline is invalid" after finding a better result.
  • The search could put reset inputs just after the simulation horizon in the wrong order when it used a previous winner as its new starting point. These inputs now stay in the correct order, including when they were already present in the original inputs.

Includes the full Linux and Windows package range: universal, NVIDIA, and AMD RX 7000/9000.

ForeverTAS 0.2.6

Choose a tag to compare

@Skycrafter-dev Skycrafter-dev released this 05 Oct 18:23

ForeverTAS 0.2.6

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.

Fixed

  • Removed ForeverTAS's GPU step time limit. A search will no longer stop just because a GPU step takes longer than the app expected.
  • This applies to both manual sample counts and automatic calibration, including the initial checks before the search starts.
  • Memory checks and the Stop button still work. CPU searches are unchanged.

This does not change Windows, Linux, or graphics-driver timeouts.

Includes the full Linux and Windows package range: universal, NVIDIA, and AMD RX 7000/9000.

ForeverTAS 0.2.5

Choose a tag to compare

@Skycrafter-dev Skycrafter-dev released this 05 Oct 08:29

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.

ForeverTAS 0.2.4

Choose a tag to compare

@Skycrafter-dev Skycrafter-dev released this 27 Sep 12:13

ForeverTAS 0.2.4

Downloads

Start with the download for your operating system. ForeverTAS can recommend and install the matching GPU package from inside the app.

Changes since 0.2.2.

New and improved

  • More ways to search on your GPU: Vulkan and HIP join CUDA, with dedicated NVIDIA builds and AMD RX 7000/9000 packages.
  • Simpler installation and updates: a Windows installer, in-app updates on Windows and Linux, automatic GPU-package recommendations, and package switching without losing settings.
  • Saved search sessions: automatically restart after a duration or attempt count, save each cycle, and browse, sort, preview, or copy previous results. Best-run previews belong to the current session.
  • Custom objectives: write expressions to minimize, maximize, or reach a chosen value; combine several goals in one search on CPU or GPU.
  • Reorganized search controls: dedicated Base, Target, Passes, and Search tabs, visual target selection, and grouped controls for adding, reordering, and deleting input passes.
  • Edit time ranges in the 3D view: drag input-pass and evaluation windows, the simulation horizon, and stunt deadlines directly along the trajectory. Capture the current timeline time into a field, or select the full run or the remaining run in one click.
  • Easier target placement: pick a point directly in the scene or copy the car/camera position. Set velocity direction from the car's travel, heading, or an axis, with a visible direction arrow and alignment cone.
  • See what the search evaluates: visual markers and live measurements for targets, entry/finish events, stunt scores, and satisfied conditions. Telemetry text now supports calculations and these evaluation fields.
  • Control the viewer's appearance: a Runs/Overlays/Targets panel with visibility, colors, opacity, line widths, dashed lines, and draw-through options for individual items.
  • Undo and redo across the editor: search settings, input passes, target edits, drawings, telemetry, and appearance changes, not just the base input script.

Fixes from 0.2.2

  • Corrected yaw, pitch, and roll in pose targets and condition scripts so they match the car's orientation in the viewer.
  • Camera shortcuts 1, 2, 3, and 7 work after clicking the race preview, rather than requiring focus on the camera controls.
  • Fixed CUDA compatibility on older NVIDIA GPUs. Regular CUDA supports compute capability 5.0+; unavailable Fast CUDA automatically falls back to regular CUDA.
  • Loading maps and viewing trajectories no longer depend on the selected GPU search backend being available.
  • Made CPU input-mutation sampling consistent between Windows and Linux for reproducible seeded searches.

ForeverTAS 0.2.2

Choose a tag to compare

@Skycrafter-dev Skycrafter-dev released this 10 Aug 08:07

ForeverTAS 0.2.2

  • Search, scripting, telemetry, race-viewer, and map-rendering fixes for the 0.2.2 release.
  • CUDA acceleration supports NVIDIA GeForce GTX 750/750 Ti, GTX 900-series, GTX 10-series, GTX 16-series, and RTX 20/30/40/50-series GPUs, plus many NVIDIA workstation GPUs. CPU mode works without an NVIDIA GPU.
  • Linux x86_64 AppImage and Windows x86_64 ZIP are attached below.

Condition scripting

Conditions select which evaluation ticks are eligible. Use one comparison per non-empty line; all lines are ANDed. Identifiers/functions are case-insensitive.

Syntax: comparisons >, <, >=, <=, =; arithmetic +, -, *, /; scalar parentheses; numeric constants; vector literals (x, y, z). ==, !=, OR, and comments are not supported. Scripts are limited to 256 compiled instructions.

Functions: kmh(x) (m/s → km/h), deg(x) (radians → degrees), time_since(x) (current simulation time minus x, in seconds), distance(a, b) (3D Euclidean distance), variable(name) / var(name) (external variable; quoted names are also accepted).

Scalar variables:

  • Position: car.x, car.y, car.z; aliases car.position.x, car.position.y, car.position.z.
  • Previous position: car.prev.x, car.prev.y, car.prev.z; aliases car.prev.position.x, car.prev.position.y, car.prev.position.z.
  • World linear velocity: car.vel.x, car.vel.y, car.vel.z; aliases car.velocity.x, car.velocity.y, car.velocity.z.
  • Previous world linear velocity: car.prev.vel.x, car.prev.vel.y, car.prev.vel.z; aliases car.prev.velocity.x, car.prev.velocity.y, car.prev.velocity.z.
  • Angular velocity: car.vel.pitch, car.vel.yaw, car.vel.roll; aliases car.velocity.pitch, car.velocity.yaw, car.velocity.roll.
  • Previous angular velocity: car.prev.vel.pitch, car.prev.vel.yaw, car.prev.vel.roll; aliases car.prev.velocity.pitch, car.prev.velocity.yaw, car.prev.velocity.roll.
  • Local velocity: car.localvel.x, car.localvel.y, car.localvel.z; aliases car.localvelocity.x, car.localvelocity.y, car.localvelocity.z.
  • Previous local velocity: car.prev.localvel.x, car.prev.localvel.y, car.prev.localvel.z; aliases car.prev.localvelocity.x, car.prev.localvelocity.y, car.prev.localvelocity.z.
  • Speed magnitudes: car.speed, car.prev.speed, car.localspeed, car.prev.localspeed.
  • Rotation: car.yaw, car.pitch, car.roll; aliases car.rotation.yaw, car.rotation.pitch, car.rotation.roll.
  • Previous rotation: car.prev.yaw, car.prev.pitch, car.prev.roll; aliases car.prev.rotation.yaw, car.prev.rotation.pitch, car.prev.rotation.roll.
  • Car state: car.freewheel, car.lateralcontact, car.sliding (aliases car.is_sliding, car.is), car.gear, car.rpm, car.turning_rate (alias car.tr), car.turbo_type (alias car.tt), car.turbo_boost_factor (alias car.tbf), car.cps (collected checkpoint count).
  • Search state: iterations, last_improvement.time, last_restart.time.
  • Wheels: for each of frontleft, frontright, backleft, backright: car.wheels.<wheel>.groundcontact, car.wheels.<wheel>.is_sliding (alias car.wheels.<wheel>.is), and car.wheels.<wheel>.surface.

Vector variables (usable by distance): car.pos / car.position, car.prev.pos / car.prev.position, car.vel / car.velocity, car.prev.vel / car.prev.velocity, car.localvel / car.localvelocity, car.prev.localvel / car.prev.localvelocity.

External variable: when the Point Target evaluator is selected, bf_target_point is available as a 3D vector through variable(bf_target_point) / var(bf_target_point).

ForeverTAS 0.2.0

Choose a tag to compare

@github-actions github-actions released this 01 Aug 09:48