Introduction
------------
This is an all in one package of TORCS. Be aware that some included
artwork has non free (in the GPL sense) licenses, you will find a "readme.txt"
in those directories. The rest is either licenced under the GPL or the Free
Art license.


Non-Free content (in GPL sense)
-------------------------------
Here the list with the directories containing non free content, look at the
readme.txt for details:
- data/cars/models/pw-*
- data/cars/models/kc-*
- data/cars/models/vm-*


Linux Installation from Source
-------------------------------
- Requires plib 1.8.3, FreeGLUT or GLUT, be aware to compile plib with -fPIC
  on AMD64 if you run a 64 bit version of Linux. Be aware that maybe just
  1.8.3 works.
- Requires OpenAL from www.torcs.org for best sound quality.
- Untar the archive
- cd into the torcs-1.2.4 directory
- ./configure (use --help for showing the options, of interest might be
  --enable-debug and --disable-xrandr).
- make
- make install
- make datainstall
- start with "torcs"

Command line arguments:
* -l list the dynamically linked libraries
* -d run under gdb and print stack trace on exit, makes most sense when compile
     with --enable-debug
* -e display the commands to issue when you want to run under gdb
* -s disable multitexturing, imortant for older graphics cards
* -m use X mouse cursor and do not hide it during races


Windows Installation from Source (Release)
------------------------------------------
- hint: you can have a release and a debug build side by side, the release
  version goes to "runtime" and the debug to "runtimed".
- requires VC++ 6.0 (tested with sp6)
- untar the archive into a path without whitespaces and special characters.
- cd into the torcs-1.2.4 directory
- run setup_win32.bat
- run setup_win32-data-from-CVS.bat
- select the TORCS project and the w32-Release version
- compile project (0 warnings)
- cd into the "runtime" directory.
- run "wtorcs.exe"


Windows Installation from Source (Debug version)
------------------------------------------------
- hint: you can have a debug and a release build side by side, the debug
  version goes to "runtimed" and the release to "runtime".
- requires VC++ 6.0 (tested with sp6)
- untar the archive into a path without whitespaces and special characters.
- cd into the torcs-1.2.4 directory
- run setup_win32_debug.bat
- run setup_win32-data-from-CVS_debug.bat
- select the TORCS project and the w32-Debug version
- compile project (131 warnings about debug symbols too long, safe to ignore
  those)
- cd into the "runtimed" directory.
- run "wtorcs.exe"


Windows Binary Installation
---------------------------
- unzip the archive
- cd into the torcs-1.2.4 directory
- run "wtorcs.exe"


Testing
-------
Please pick bugs below and retest them (you can find the original reports on
http://sourceforge.net/tracker/?group_id=3777&atid=103777, select "any" bugs to
see as well the closed ones). If you find problems which should be already
fixed or new ones please report them to the torcs-users mailing list.


Getting Help
------------
During the game press F1. For more in depth information visit www.torcs.org,
you find there a lot of information, look at the documentation section on
the left, have as well a look into the list of howto's. If you are stuck
have a look into the FAQ to learn how and where to report a problem.

Have fun, bye

Bernhard.


Changes since 1.2.4-test3
-------------------------
- Updated version number to 1.2.4 (Bernhard).


Changes since 1.2.4-test2
-------------------------
- Fixed wrong CWD set by installer for trackeditor.bat (Bernhard).
- Fixed OpenAL backend design flaw (run out of sources) (Bernhard, Christos).
- Reviewed and applied penalty clearing/pit stop patches from Mart Kelder
  (Mart Kelder, Bernhard).
- Prepared installation instructions for 1.2.4 (Bernhard).
- Prepared credits for 1.2.4 (Bernhard).
- Updated robot tutorial for 1.2.4 (Bernhard).
- Applied reverse gear patch from Mart Kelder (Mart Kelder, Bernhard).
- Make engine consume fuel on negative torque (Bernhard).
- Fixed cars starting at odd heights, reported by Andrew Sumner (Bernhard).
- Commited some more docs from the website into the CVS (Bernhard).


Changes since 1.2.4-test1
-------------------------
- Tried to fix problem with GL headers differences in Linux (Bernhard).
- Car sound adjustments and new samples (Christos).
- Moved learning and math headers in subdirectories to stop the upcoming
  chaos, updated dependent files (Bernhard).
- Updated Windows project preparation bat files (Bernhard).
- Ported the project to Windows, except olethros and learning (Bernhard).
- Fixed resident texture problem in Windows (Bernhard).
- Updated gl headers for Windows, oss.sgi.com (Bernhard).
- Resolved some OpenAL compatibility issues (Bernhard).
- Fixed XSLT problem in Windows, was a combination of wrong dtd filename,
  missing GetLocalDir and GetDataDir setup (Bernhard).
- Fixed weird bug in screen.cpp, execlp had wrong arguments, therefore
  the XML results headers become formatted wrong when you changed the
  display properties... yikes. Currently it does now work when the full path
  is given in argv[0], so a bit more work is needed (Bernhard).
- Make gcc 4.0.1 compile the code (warnings in trackgen are scheduled for
  1.2.5) (Bernhard).
- Removed unused code in various places (Bernhard).
- Fixed virtual constructor in olethros (Bernhard).
- Removed volume setting from sound menu (Bernhard).
- Ported learning to Windows (Bernhard).
- Ported olethros to Windows (Bernhard).
- Windows version result generation now correct if either started with full
  path or with wtorcs[.exe], current working directory must be the directory
  containing wtorcs.exe, there is no reason to improve this more (people
  start via desktop icon/menu entry anyway) (Bernhard).
- Added GfCreateDir in tgf (Christos, Bernhard).
- Fixed olethros clkdtm texture (Christos).
- Changed some code according to mail of Steven Gutknecht, did not look at the
  sqrt problem (if you want to have TORCS compile for a certain non free
  compiler send me patches or the money to buy it) (Steven Gutknecht,
  Bernhard).
- Kicked out SmartAssert.h for 2 reasons: 1. I want to get rid of this "clever"
  preprocessor tricks (because I think it is really silly to do such things),
  2. Assertions simply do never belong into any code which a third person can
  look at (if the user runs the software to code must deal with its problems by
  itself, the messages will be meaningless for the user anyway) (Bernhard).
- Removed assertions from Olethros (Bernhard).
- Fixed various memory leaks in Olethros caused by sloppy use of make_message
  (a comment regarding that: if possible do not allocate heap memory inside
  a called function, it is better to allocate it before calling and pass the
  buffer and its size as parameter, because the allocation is then visible on
  the first glimpse) (Bernhard).
- Fixed crash bug in Olethros (the proposed singleton does not work, reverted
  to working version) (Bernhard).
- Fixed a possible crash bug in gui.cpp, added deactivation of
  glutKeyboardUpFunc and glutSpecialUpFunc in GfuiScreenDeactivate (Bernhard).
- removed make_message and replaced it (Bernhard).
- Created a debug project for Windows, needed to remove make_message, enhanced
  custom realloc for debug versions of cutom malloc/free, added a workaround
  for clean allocator/deallocator pair in img.cpp, etc, huh... that was a lot
  of work (Bernhard).
- Fixed one more olethros bug, linker (in Linux) was confused about which
  CheckMatchingToken to use, added static to those in ANN.cpp -> file scope
  (Bernhard).
- Tested, build and debug build work with: gcc 3.3.1 (0 warnings), gcc 3.4.3
  (0 warnings), gcc 4.0.1 (a lot of warnings, but just in trackgen, otherwise
  0 warnings), vc++ 6.0sp6 (release build 0 warnings, debug 131 warnings which
  one can safely ignore) (Bernhard).
- Updated Windows installer, checks now for already installed versions, works
  with 1.2.3 or later (Bernhard). Trackeditor is not yet included.
- Windows deinstaller does not delete generated files anymore (Bernhard).
- Integrated trackeditor into Windows installer (Bernhard).


Changes since 1.2.3
-------------------
- Reworked eroad (Bernhard).
- New sounds/sound adjustments (Christos).
- Introduced additional sound effects for simuv2 (Christos).
- Reworked cg-nascar-rwd (holes, dark lod, better lighting) (Bernhard).
- Max Torque as well for simuv2 (Christophe Baegert, Christos).
- More efficient rear mirror (Felix Khling, Bernhard).
- Reworked e-track-1 (Bernhard).
- Reworked Aalborg track (Bernhard).
- Reworked g-track-2 (Bernhard).
- Fixed wheel normals (Bernhard).
- Bugfixes in menus (Christos).
- Improvments in simuv2 (Christos, Bernhard)
- Updated porsche-gt3rs (Olaf Sassnick, Bernhard).
- Fixed weird (new introduced, post 1.2.3, car.cpp) bug in simuv2 (Bernhard).
- Applied patches from Debian maintainer (Rudy Godoy, Bernhard).
- Skidmarks code cleanup and improvment, backface culling (Christos, Bernhard).
- Applied more patches from Debian for AMD64 (Rudy Godoy, Bernhard).
- Smoke code cleanup and improvment (Christos, Bernhard).
- grey-tracks.rgb downsized (Bernhard).
- Updated clkdtm (Eliam Speedychonchon, Bernhard).
- Fixed fence transparency of g-track-3 and spring (Bernhard).
- Visualize clutch command value (Bernhard).
- Simplyfied conditional compiling in grtrackmap.cpp, it requires now OpenGL
  1.3 compatible header files. (Bernhard).
- Added configure test for GL_ARB_texture_compression (Bernhard).
- Added configure test for GL_VERSION_1_3 (Bernhard).
- Disabled mipmapping of "*shadow*" texture files (Bernhard).
- Backface culling for car shadow (Bernhard).
- Added texture compression (Bernhard).
- Added texture downscaling (Bernhard).
- Fixed an issue in sound/simu config screen (after changing values and hitting
  cancel the fields did not represent the current settings) (Bernhard).
- Added OpenGL configuration screen (Bernhard).
- Fixed inconsistency of texture loaders, "_nmm" is now obsolete, use "_n"
  (Bernhard).
- Improved Makefiles of alpine-1, g-track-3 and ole-road-1 (Bernhard).
- New sound architecture/implementation with a plib and OpenAL backend
  (Christos).
- Changes in sound menu for new sound implementation, added volume (Christos).
- Optimized ole-road-1 (Christos).
- Updated pit door (Speedychonchon).
- Fixed Windows version memory management bugs in tgf.cpp (malloc, realloc),
  this should solve some trackgen/accc problems in Windows (Bernhard).
- Updated FAQ (Bernhard).
- Fixed closing of invalid file handle in maintrackgen.cpp (Bernhard).
- Fixed a bug in the msh files generated by trackgen which caused AC3D to
  crash (Bernhard).
- Fixed missing check if model file could be loaded in elevation.cpp
  (Bernhard).
- Fixed non working trackgen -H option in Linux (Bernhard).
- Fixed gamma value in image loader of elevation map loader of trackgen,
  must currently match with the default in img.cpp (Bernhard).
- reviewed "(null)" texture problem and found it harmless, no immediate action
  needed. Its actually a "bug" of the ac files and happend on retexturing/
  "untexturing" objects. Perhaps it is not anymore the case with newer
  versions (Bernhard).
- Reworked g-track-1 (Bernhard).
- Fixed lighting (material) properties of some models to fix the "darkening
  on LOD switch problem". On some models it helps, other models need to
  be rewoked later (the problem there seems to be the model itself -> normals)
  (Bernhard).
- Fixed strndup for FreeBSD (Thierry Thomas, Bernhard).
- Fixed a bug in collision detection which happend when 2 wrecks where
  overlapping. This caused permanent collisions, which in turn avoided to call
  dtProceed and therefore avoided the needed update of the data (Bernhard).
- Fixed: non ending races because of failing virtual crane, was a floating
  point error accumulation problem in simu.cpp (Bernhard).
- Barrier has now a field with normal used for barrier collision detection,
  reworked SimCarCollideXYScene, collide.cpp (Bernhard).
- Added vector classes, such that all berniw/bt derivates can use the same
  copy, instead of having a copy in each bot (Bernhard).
- Collision code refactoring/cleanup, removed doubled code, etc. (Bernhard).
- Initial wall collision support, good enough for now, but needs
  improvment and more testing. The damage is currently set very low, such
  that the robots have some time to adopt (Bernhard).
- Fixed skid sound at low speeds (Christos, Bernhard).
- Fixed scroll lists numbering with more than 100 entries (Bernhard).
- Enabled configure checking for OpenAL (Bernhard).
- Fixed skidmarks when driving in reverse, bug introduced by me when enabling
  backface-culling for skids (Christos, Bernhard).
- Added trackgen option to just calculate the track parameters (Charalampos).
- Increased a "margin" in trackgens track.cpp, will need further inverstigation
  (Charalampos).
- Finished plib backend (Christos).
- Fixed Olethros module discovery memory leak (Bernhard).
- Olethros textures for gt3rs and clkdtm (Christos).
- Various fixes found with valgrind: potential crash bug in new smoke code,
  a few leaks in other places (Bernhard).
- Olethros writes data files to correct location (Christos).
- Car-pitwall collisions now fine, problem was mix up of local/global
  oriented vectors (Bernhard).
- Update sound max. 50 times per second (perhaps this helps with the plib
  timing problem) (Bernhard).
- Improved car-car collisions (Bernhard).
- Alignd widgets in sound config screen (Bernhard).


TODO for 1.3.0 (estimate: goal 12.2005, real 2.2006)
--------------
- Fix sound volume option (ask Christos).
- Fix and reenable -s option in Windows (car rendering ignores missing multitex
  extension).
- fix temporary sound volume jump when changing camera with OpenAL (plib not
  tested, verify) (ask Christos).
- Missing doppler on Windows, investigate.
- SDL port.
- Check for memory leaks.
- Add valgrind option to "torcs".
- Include suppressions file for valgrind.
- (Fix parallel build with make -j n, breaks currently in SOLID) (Bernhard).
- Ongoing for every release: rework free car models (several holes, no
  emmissive color of lod (model becomes dark at a certain distance), single
  sided, add cockpit, lods).
- Ongoing for every release: Improve visual quality of some existing tracks
  (e.g. e-track-3, michigan, eventually wheel-1, e-track-2).
- Add cameras (alpine, spring)
- Texture clamp to edge needs explicit setting in nvidia driver tab in windows,
  have a look into that (otherwise the border is not taken as color around the
  pit door, pits are quite dark around the logo).
- check and merge Christos camera code if useful.
- Integrate documentation into CVS/distribution.
- merge berniw_2004 code into berniw's (rescheduled, a bit more testing will
  not hurt).
- merge bt_2004 into bt.
- review/comment simuv2 (e.g. rollres, fuel, collision, more).
- possibility of one pit for 2 cars of one module.
- fix tools (accc, trackgen, etc, these are way too touchy).
- make trackgen generate two sides for barriers and use just one sided
  polygons (better diffuse lighting).
- fix sound in split screen multiplayer. [in progress] (ask Christos).
- Investigate non reproducable (so far) crash after changing properties in
  multiple players (human) and then doing a race with 2 players. Happend just
  after a fresh install and just once so far (is one of the shipped xml files
  broken)? [note there are many other crashes when using the menus, seemingly
  at random times].
- Add remaining kcendra cars.
- Check and add Andrews tracks.
- Check and add Andrews car improvements.
- Check and add Erics new car class.
- Ongoing: Replace some defines with "static const" to be able to see the
  symbol name when debugging.
- berniw/bt/sparkle: make use of classes in lib/math.
- Investigate/fix crash on rainbowroad (happens as well with 1.2.3). RtTrackGlobal2Local
  seems to deliver nonsense, could be caused by trackloader through unusual turn
  angles (e.g. > 180deg). Check if this problem just occurs on version 3 tracks.
- add more races to championship.
- move berniw/bt spline code into math to share it.
- hunt down all glGet* crap during the simulation.
- verify gear switching flames for car, e.g for the 360.
- check all textures for the user selectable cars, they should be nicer.

- (get/write raceengine.xml to users local dir.)
- (Problem when driver list changes during championship.)
- (add proper init/shutdown to every module which is not bound to anything else
  but the loading/init/shutdown/unloading process.)
- (make use of pbuffers to render trackmap if available.)


TODO for 1.9.x (pre 2.0 series, no release)
--------------
- Design networking, how to embed it into TORCS?
- Networking prototype.
- Gaming modes suitable for online races.
- Cockpit inside view.

TODO for 2.0.0
--------------
- Goal: best online racing game in terms of stability/playability. Most
  commercial games really suck in this department, I hope we will do it better.
- Initial Networking.


TODO LATER
----------
- Add validation for the case no driver selected, do not exit to
  console.
- Fix more memory leaks (already hunt down a LOT there are still more).
- Networking (2.0).
- Rework the whole AC file loaders and state management (most of the remaining
  memory leaks).
- Replace vector/matrix oprations with an efficient implementation (-> use
  SIMD, e.g. enhanced version of v2/v3d.h with SIMD alternatives if compilers
  are not more clever at this time (currently they suck on useful vectorizing)).
- SMP simulaton core (for myself).
- Replays.
- Setup editor (add a function to the robot interface to ask the robot
  about the location or a file handle for its setup file, perhaps a
  close function is needed as well).
- Telemetry recorder/viewer.
- Redesign/Reimplement multitexturing and fileformat.
- Apply light maps to skid marks, smoke and wheels, etc.
- Phong specular highlights (optional env, cube or GLSL).
- Shadowmapped/Stenciled dynamic car shadows.
- Compile/crosscompile on MinGW/Cygwin/Linux for Windows native.
- so/dll with libtool, common code?
- 3d-grass.
- Dynamic sky.
- Pace car and trucks to remove wrecks (remove "virtual" crane).
- More Rules.
- TRB integration.
- Fix/create new simu/switch to updated/new simu.
- (clean up simuv3 conflicts)
- Show just fitting resolutions for fullscreen/change for windowed mode.
- Make it possible for a robot module to carry any arbitrary number of
  drivers (instead of static 10).
- Solve problem of wheels cutting the car body (stencil?).
- Nicer Tires, a bit more round, better lighting.
- Separate components more clean (e.g. ssgInit should go back to
  ssggraph, etc.)
- persistent skidmarks (simply put them back into the shadowmap after
  the race? Extra texture? Just restore them?), restore function.
- Make Windows debug build work.
- Fix windows project such that it compiles in all locations (currently it
  fails if special characters are in the path).
- Avoid cameras cutting the landscape.
- Rework models (holes, just single sided polygons for culling, etc.)
- Check (and fix if neccessary) screenshots on Windows, still wrong gamma?
- API to change setup during the practice mode.
- Timed races (e.g. 24h).
- Allow more mouse events /suggested by Frieder -> mouse wheel for gear
  switching).
- Start position marks on track (same technique like fake shadow, skids).
- Start procedures (pace car, etc).
- Better transparency for track objects.
- More driving aids, switch to AI and back.
- localization (e.g English, French, German, ...).
- add compatibility lib for strndup etc. on win32.
- New GUI.
- driving/races in reverse track direction.
- Check for consistency of simuv2/simuv3.
- verify that simulation obeys conservation of momentum and energy.
- optimise simuv3.
- Fix engine inertia/s of F1 cars, check/fix all other cars as well.
- Opponent sets for human players (e.g 20 Open Wheel cars, etc.)
- Free camera controlled with mouse and keys.
- Automate GL features verification (hopefully obsolete).
- Investigate the oscillation and roughness problems reported by Christos.


IDEAS FOR MUCH LATER
--------------------
- Weather.
- Dynamic day/night-time, car lights with projective texturing.
- Pit crew.
- Dynamic "intelligent" Objects (e.g. Helicopter)
- Solid/dynamic obstacles.
- Nicer trees etc, terrain LOD.
- Inside view.
- Animated driver.
- Dirt on cars, inside view.
- free terrain.
- Open track dynamically generated when driving.
- Random track generator.
- Separate pit path, Y segments, etc?
- TORCS as benchmark or screensaver?
- Switch to rigid body engine?
- Force feedback.
- (Compressed data files?)
- Story mode with message.
- Traffic simulator

