Speed Dreams

Speed Dreams, often shortened to and formerly known as, is a free and open source 3D racing video game for Linux, Microsoft Windows, AmigaOS 4, AROS, MorphOS and Haiku. Started in 2008 as a fork of the racing car simulator TORCS, it is mainly written in C++ and released under GPL v2+ and Free Art License, the most recent release being version 2.3.0 of March 2023.

The development of an accurate driving behaviour, with different physics engines available, sets the project among the few open source racing simulation codebases.

can be played with a variety of input devices, including keyboards, mouses, joypads, joysticks, racing wheels and pedals.

Racing modes
features several different racing modes; while some offer greater customization than others, most generally try to reproduce real types of races. Complex events, such as various categories of championships or endurance races, are also available. Because racing modes are defined by plain-text configuration files, custom ones can be freely created. In this context the most relevant change since TORCS − introduced in 2.0 − is the "Career" mode: here the player can compete with different car classes, during multiple seasons, on randomly selected tracks and against balanced random opponents, earning points in championship rankings. Within practice mode, since version 1.4.0, it is possible to run robot races in the "results-only" mode, that is, ignoring the graphics display of the race; this allows the simulation to be run at a speed limited only by the computing power available, and is mostly used by robot developers. For the same purpose version 2.0 provides also a text-only mode: the race is run without graphics − no hardware acceleration being required − and the results are displayed through a command-line interface.

Weather
introduced the simulation of a real sky dome, along with customizable weather conditions: the user can choose the time of day, the cloud cover and the intensity of rainfall to have during the race. The sky dome can be set up as dynamic, namely simulating the succession of day and night and the movement of celestial bodies. Weather simulation affects both physics, with proper corrections to the cars' adherence, and graphics, with animated cloud layers, and if necessary a 2D overlay of rain particles.

Physics
can load different physics engines to use during races. Written in C++, they are software modules executed at every simulation frame to compute the cars' parameters such as position, speed, damage, collisions, suspensions. The user is able to select the physics engine before every race; currently available are:

All physics engines feature real-time car collisions based on the SOLID library. Each car model defines a bounding box according to which the physics engine detects side and bottom collisions; these produce car damages, computed on a scale ranging from 0 to 10000; damages affect only cars' performances, without producing any graphical output. A car with more than 10000 damage points is excluded from the race.

Sound
Sound management is achieved through OpenAL or, optionally, PLIB. Audible sounds include collision and tire screeching noise, in addition to the engine's; there are simulated also complex effects such as attenuation and Doppler shift. In 2011, the professional sound production company audioberlin reworked the default sounds; the improved versions are included in release 2.0.0.



Racing interfaces
While racing, the player is offered a customizable 2D cockpit displaying various gauges, lap times information and a dynamic mini-map. Every instrument features several modes, among which the player can choose while racing in order to change the appearance, or even completely hide the interface. A rear mirror is also available, although quite expensive in terms of consumed computing power. An "arcade" mode, legacy of TORCS, is still maintained as of version 2.0; according to the authors of the Italian manual for TORCS, it is more suitable for the novice player of. New addition to is the Formula One-style timer with an accuracy of a millisecond (ten times more precise than TORCS' one).

AI
TORCS was born with focus set more on AI racing than on human driving. , according to the project's description, shifted the balance towards a more user-oriented racing experience. Nonetheless, unlike the fate of the other legacy content, reworked but mostly maintained, in late 2009 all the robot engines inherited from TORCS were removed and replaced by new, more advanced ones.

General description
features computer-controlled opponents to race against, commonly called "robots". These are software modules, written in C++, which control the behaviour of cars during any kind of practice, qualification or race session. A module can virtually handle any number of single robot drivers; these share the source code but may have custom car setups and liveries, and even drive different cars. Robots may be programmed with any kind of function in order to compute racing variables: throttle, brake, steer, gearbox and clutch. These values are sent to the race engine by an open interface of. Human players are treated just like any other robot: their variables are controlled by user-defined input devices and can be influenced by automated driving aids such as ABS, TCS or speed limiter for pit-stops.

Available robots
features 3 official robot engines, for a grand total of about 150 drivers competing in all the official car categories: Robots from the 1936 GP car series are named after real drivers of that period; the names of most other robots are fictitious, although many names of developers and contributors appear, mostly in the Torcs Racing Board 1 category.

Common robot functions
Robots shipped within share some kinds of behavioural functions in order to achieve realism in the driving simulation. While being loaded, robots compute a racing line, which depends on the track's XML description. Initial fuel amount, conforming to a fuel and pit-stop strategy, is also estimated and requested to the race engine. During the race robots aim at following the racing line; however their behaviour can be influenced by the parameters received by the race engine; these include the position and the speed of other cars, which is taken into account by collision-avoidance and overtaking algorithms. Robots also have learning capability: they can improve their lap times basing on previously driven laps. A function to regain the track after accidents is also implemented in all official robot engines. robots can handle a so-called "skilling" parameter, defined by the player: this way the user can alter the robots' performance and therefore their lap times.

Pit stops
As of release 2.0, the pit stop simulation system remains unchanged from TORCS. When racing on tracks equipped with a pit lane, drivers are assigned a pit stop emplacement according to their position on the starting grid. Since most tracks don't provide enough emplacements for all the race competitors, robot drivers support pit stop sharing. To trigger pit stops, robots have to drive near their emplacement at sufficiently slow speed, then make the stop request to the race engine, which captures the car and keeps it still and unresponsive until the end of the process. The human robot automatically sends the request as soon as the other conditions are satisfied; the simulation is then paused, while the player is offered a menu where he can choose the parameters of the stop. Services offered during pit stops are repairing damage, refuelling and serving penalties; the stop's duration is automatically defined and depends on the amount of damage and of fuel to deal with. During pit stops no graphical animation is displayed.



Multiplayer
The "split-screen" feature allows to split the display − on the same monitor − into up to four regions which act independently: these can show the perspective of different cameras, with different interface settings and following different drivers. During the race the regions can be dynamically created, deleted and arranged in several different layouts. On the human racer's side this system allows up to four players to simultaneously compete in the same race using the same PC.

An on-line multiplayer mode was developed for version 2.0, but wasn't included in the official release because it was not yet fully stable.

Penalties
has inherited from TORCS a per-driver penalty system. Penalties are triggered by violations to pit lane rules: breaking the speed limit in the pit lane (90 km/h) results in a drive-through penalty, while crossing the pit lane border produces a stop-and-go penalty. Penalties have to be cleared within five laps since the notification; disobeying drivers are automatically excluded from the race.

Cameras
Several different camera modes are available, covering different cockpit and outside views. The "TV director" camera mode makes use of segment-by-segment cameras defined by each track, automatically focusing on interesting events of a race. Each camera mode can be independently zoomed in and out. No free camera is available as of version 2.0.

Time warping
inherited from TORCS the possibility to accelerate and slow down the simulation; release 2.0 of the project extended this feature so that, while keeping constant the actual duration of the simulated frame, the rendered simulation speed could range from 64 times slower to 16 times faster than default, with increment steps of powers of 2. To achieve such acceleration, more frames have to be rendered within the same actual time: hence the accordingly higher computing power required by this feature.

Content
The whole artwork shipped since version 1.4.0 is licensed under the Free Art License.

File formats
makes an extensive use of plain-text files throughout its content. Used to define settings for cars (about 200 customizable values), tracks, in-game menus, game options and robot engines, XML markup accounts for about 40% of the whole project's code. As for 3D models, there was maintained the .acc format, TORCS evolution of the equally plain-text .ac format from AC3D allowing smoothing and shadow mapping on the model. Although changes to the file formats introduced new features, backward compatibility was preserved: can load cars, tracks and robots designed for TORCS. The opposite is only partially true, as TORCS can't handle the unknown parameters from.

Car features
inherited from TORCS the handling of some graphics features such as custom 3D wheels, working lights (front, rear, brake and reverse) and glowing brake disks; new features introduce support for animated drivers and steering wheels, first used on the 1936 Grand Prix class cars, and improved environment mapping for more realistic reflections. As there isn't support for dynamic shading, each car defines a shadow image that is projected under the car's model. Several levels of detail are supported for each car model in order to improve simulation performance, although − for size reasons − the official release ships only one. Since version 2.0 the user is enabled to choose among different liveries for each car, which affect the car's exterior paint, wheels and interior appearance. About 250 liveries, between player and robots skins, are shipped with the 2.0.0 release. A static preview of the car's appearance is displayed during the car's selection: a special "garage" track was created with the purpose of shooting preview images.

Available cars
Available cars are grouped into categories, usually containing 6 to 8 models of comparable performances and size. Release 2.0 features 44 official cars spread among 6 categories: There are 26 more cars under development inside ' SVN repository, covering various classes of open wheel racing.

Some models available in, and especially the content inherited from TORCS, are inspired from the design of existing racing cars; in order to avoid possible legal issues, the names of manufacturers, of brands and of models were replaced by fictional ones before release 1.4.0.



External tools
The Torcs Car Setup Editor, generally shortened to TCSE, is a cross-platform program written in C++ by Vicente Martí Centelles; it allows to set up all the car's XML parameters from a graphical interface; it can automatically compute many values, draw different charts of the car's performance and display a 3D dynamic preview of the car's appearance.

Track system description
A track is defined as a list of segments: straights and left/right turns. Every segment is divided into four sections: main track, sides, borders and barriers. These sections are customizable in terms of width, graphics, physics behaviour, etc. Track segments are split into more sub-segments in order to get a smoother result on the graphics and on the physics side through interpolation. As a result of this segment-based structure, tracks are limited by left and right boundaries: the physics engine restricts the area where cars can be driven so that no car can actually cross the boundaries, except while being excluded from the race, when it is no more subject to physics. As of release 2.0.0-rc1, supports only a fixed width value for the "main track" section; variable width is simulated by property tweaks to borders and sides, which instead offer customizable width.

Available track categories
Traditionally, TORCS tracks had been divided in 3 categories: road, dirt and oval; the Grand Prix Circuits category was newly introduced in to gather the available race tracks. Release 2.0 of offers 44 official tracks spread among 4 categories:



External tools
Text files describing the track's structure and 3D model are often too intricate to be edited as plain text; hence the need of external tools developed to help with track creation. The most popular graphical track editor, originally developed for TORCS in Java by Charalampos Alexandropoulos, features slider widgets to edit most parameters and a real-time 2D preview of the track's wireframe appearance; as a downside, it doesn't support parameters newly introduced in, such as the ones related to the dynamic sky dome. A new track editor, by Mart Kelder of the team, is under development inside the SVN repository of the main project. The track's 3D description is a plain text AC/ACC file usually generated by a command-line script named trackgen. This tool supports the use of heightmaps and object maps to enhance the quality of the final result. Official tracks of the release feature baked (static) shadow mapping, achieved using trackgen in conjunction with external 3D computer graphics software. While the .AC format is natively handled by the AC3D software, an ACC importing/exporting script makes Blender a common choice among designers for providing tracks with complex objects. An application for automated track generation, named "Interactive Track Generator for TORCS and Speed Dreams", was developed at the Dipartimento di Elettronica e Informazione (ICT) of the Italian Politecnico di Milano university. The project aims at applying evolutionary computing, through the use of genetic programming, for a procedural generation of TORCS/Speed Dreams tracks. The generator was tuned with the help of human interaction and produces a continuous on-line stream of new track outlines, each with a set of different scenarios available.

Requirements
As of version 2.0, still relies on OpenGL 1.3 for rendering. Due to the new graphical and physical features, computing power required has risen compared to TORCS. Yet, the use of PLIB, which doesn't need support for OpenGL 2, still lets run on old - back to 2001 - video cards. In order to increase the performance of the simulation, dual threading was introduced in version 1.4.0: dividing the simulation work between a physics and a graphics thread allows the program to take advantage from multi-core CPUs.

Underlying software
The core architecture, which is still quite the same of TORCS, features a flexible structure that loads as separated modules the components of the simulation, such as the physics, graphics and robot engines. The graphics engine, PLIB's SimpleSceneGraph, offers high-level access to OpenGL functions; PLIB is also a possible choice to deal with sound, the other one − selectable by the user − being OpenAL. Another legacy from TORCS was the need of freeglut, which was removed after version 1.4.0. An SDL-port of the code, in order to get rid of the need of freeglut, was active from October 2008 to February 2010, when it was merged with the main project's trunk; however, in some distributions freeglut still figures as a dependency for the packages. The ENet library was used during the development of network play; while this feature was not released in version 2.0.0, it remained as a dependency in most packages. In the first months since the project's birth, the build system was moved from make to the more advanced CMake.

The project
According to the community leaders, the project was born as a reaction to the slow development pace and the lack of willingness to integrate some new features, like Force Feedback, into TORCS code. At start the team was composed by only two developers, both from France; by the end of 2008 it had been joined by 5 more members, mostly old TORCS contributors who shared the above frustration. Accessions didn't cease during the following years, and release 2.0 was issued by an international development team numbering 12 people from 8 countries and 3 continents.



History
The content of the r1-3-1 branch of the TORCS CVS repository was forked into a new SVN repository on 14 September 2008. At first the name chosen for the project was "Torcs-NG" (Next Generation). After a year of development, in August 2009 the development team decided to sever ties with the parent project: there followed a long discussion about a new name to adopt, in which "" was selected by means of a developer community vote. The "non-free" content inherited from TORCS was also moved to an unmaintained "legacy" branch and replaced with new cars, tracks and robot engines. The first public release was then issued on March 27, 2010 as " 1.4.0", preserving the old versioning system of TORCS. However, for some reason, the release wasn't publicly advertised until April 14; five days later, the number of daily downloads reached 4,120. The development of the next version was started immediately after the release, and four months later the first alpha of was issued. According to the release plan, the final release should have been delivered by the end of 2010; however, development progressed more slowly than expected, and only after 18 months, 5 development releases and more than 2,000 code changes a release candidate of version 2.0 was issued (January 15, 2012). The final version was finally released on April 8, 2012, the most prominent improvements being reworked reflections and menus, and the introduction of Career mode, dynamic weather, SimuV2.1 and dual-threading. Again, the official announcement came with a delay of some weeks; download figures started rising only after advertising began (25 April 2012) and reached about 500/day.

Community
Among the declared aims of the project, since its start, was a particular care to the players community, namely taking more into account the feedback and suggestions of the end-users; for this reason, a number of new communication channels were opened. First were the user and developer mailing lists on SourceForge.net: created along with the main project, they remain by far the most used channel, the speed-dreams-devel list having reached a milestone of 10,000 messages on March 16, 2012; there followed public forums on SourceForge.net, which, however, were never widely used; an official Twitter account was created two weeks before the release of version 1.4.0: as of May 2012, it is followed by 147 subscribers and has sent 124 tweets. In the end of 2011, the project created official pages on the popular social networks Facebook and Google+.

Distribution and packaging
Official releases include a source code package and a Windows installer. However, Linux users aren't forced to compile the source code: binary packages are available, either provided within a distribution or through external repositories. The first package made available was an Ubuntu .deb of version 1.4.0, created by PlayDeb.net. As it didn't get updated for development releases of version 2.0, the team created an official PPA on Launchpad; as of May 2012,  is packaged for the following distributions: A port of version 1.4.0 for the Haiku operating system was reported in August 2010 and was made available on Haikuware.com in April 2011; according to the packager, only minor changes to the code were needed to get running.

was made available also on the digital distribution platform Desura in March 2012. This platform was the first to publish the Windows binary packages for version 2.0, just two days after they were officially released. As of 10 May 2012, the project is ranked 276 out of 6,558 projects.

Commercial redistribution
In April 2012 the development team was made aware of a commercial derivative of. Initially believed to be a clone of TORCS, the product - published by the German company jalada GmbH - had been rebranded as jalada Ultimate Racing and sold for 12.09 € since August 2011. The publisher claimed features such as force feedback support, and a Mac OS X port available at the same price. Although the GNU General Public License allows reselling of free software, this commercial redistribution doesn't comply with the requirement of express attribution to the original authors which is stated by the Free Art License, applied to the whole artwork of.

Critical reception
has received a wide variety of reviews, on technology websites, distribution platforms and open source software websites. Immediately after the release of version 1.4.0, reached the first place in the "les plus populaires" ("the most popular") user ranking on the French free gaming portal JeuxLibres.net;  as of April 2012, the project still maintains the second place. Published in the November 7, 2011 issue of the German computer magazine c't, a review of 2.0-beta1 pointed out the quality of cars' physics and race balancing. In 2011, was among the 23 candidates for the "Mejor juego libre" ("Best free game") prize by PortalProgramas, achieving the 13th place. As of May 2012, the project's files have been downloaded 595,000 times from the SF.net portal. This figure, though, is disputable because of the January 2011 attacks on SourceForge.net. More relevant are then the average periodic data, reaching about 1600 weekly downloads − or 230 per day − in the first months of 2012. As of May 2012, the project has received an average user rating of 88% out of 95 reviews on SourceForge.net portal. On the Linux gaming portal Penguspy, at the same date, had received a mark of 9.49/10 out of 65 votes, which earned the project the first place within the "Racing" category, and the 18th place overall (8th considering only the open source games). On Desura, in the same period, the project's score was of 6/10 out of 90 reviews; the discrepancy can be interpreted as a result of the coexistence − on this platform − of both open source and proprietary video games.