;
; Racer settings - see www.racer.nl for specifics.
; Most settings come with comments as to what they do.
;
app
{
  ; Allow double runs?
  run_twice=0
  ; First run ever?
  first_run=0
  ; Keyboard support? (avoid scenes with keys)
  keyboard=1
}
machine
{
  ; Type of role (M=master, L=right etc). Used for loading images (loading_<role>.jpg) if not empty
  role=
}
process
{
  ; Dualcore/multicore options (Windows only)
  ; CPU affinity mask; 0=all CPU's, 1=CPU 0, 2=CPU 1, 3=CPU0 & CPU1 etc.
  ; Setting this to use only 1 CPU may help on some fast machine that give (s)low framerates
  cpu_affinity_mask=0
  ; Main thread affinity mask; must be a subset of 'cpu_affinity_mask'
  ; The main thread does controls, basic timing, graphics (although the graphics driver may spawn its own thread)
  ; When using physics.async=1, you can control the cores directly using the thread affinity masks
  ; If you don't understand process and thread masks, it's better to stay away from these settings
  main_thread_affinity_mask=0
}
physics
{
  ; Run physics asynchronously? (multithreaded).
  ; Only works nicely on multi-core systems.
  ; Single processor machines may experience fluctuating performance.
  ; Do not set this to 1 for multiview slaves (enforced in software)
  ; Will turn off collisions (ePhyse/DLL)
  async=0
  ; Run on which cores? (a subset of process.cpu_affinity_mask) - 0=all cores
  thread_affinity_mask=2
  tracks
  {
    ; Use road_noise from special.ini? (default 1, which means it is used)
    use_road_noise=1
  }
  newton
  {
    ; Platform architecture; 0=lowest common denominator, 1=special instruction set, 2=optimal (default)
    architecture=0
  }
}
ini
{
  ; Controls file (new format since v0.5.2 beta 9.4; in data/controls/)
  controls=profile1.ini
  ; Possibly fall back on a local set of defining controls (useful for multiple different calibrations)
  ; Directory of the file is local on Windows
  controls_fallback=
  ; Locale file (languages); default is racer_english.txt
  locale=racer_english.txt
  ; Language ID (0=English, 1=French, 2=Dutch); for some internal texts
  locale_id=0
  ; Force feedback damping (for low speed)
  ff_damping=0.2
  ; Force feedback damping threshold (in m/s of tire velocity)
  ff_damping_threshold=1.0
  ; Let time-of-day automatically control lights?
  auto_lights=0
}
race
{
  ; Race settings
  ; Skip lights sequence at the start?
  quickstart=0
  ; Track (location) where the action takes place
  track=carlswood_nt
  ; Which car to drive?
  car=lamborghini_murcielago
  ; Total #cars expected (if >1, waits before showing graphics)
  expected_cars=1
  ; Car setup
  ; Number of AI cars besides player car
  ai_cars=0
  ai_car=lamborghini_murcielago
  ; Multiple different AI cars
  ai_car_multiple=
  ai
  {
    random_scenario=0
    ; Performance for each AI car
    performance=1.0 0.8 1.0 0.96 0.97 0.96 0.98 1.0 0.97 0.96
  }
  ; Player preferred grid position (0..ai_cars-1)
  grid_position=0
  ; Number of laps in race (0=infinite)
  laps=0
  ; Maximum race time (in seconds)
  max_time_race=0
  ; Type of race ranking; 0=racetime (fixed number of laps), 1=distance (fixed time), 2=bestlap (fixed time)
  ranking=0
  ; Qualifying max laps (0=no qualifying)
  qualify_laps=0
  ; Qualifying time (in seconds)
  qualify_time=0
  ; Type of qualifying ranking; 0=racetime (doesn't make sense for qualifying), 1=distance, 2=bestlap
  qualify_ranking=2
  ; Where to start in qualifying; 0=pits, 1=track (default=1)
  qualify_start=1
  ; Where to start in the race; 0=pits, 1=track (default=1)
  race_start=1
  ; Event type; what type of race you're running; 0=Qualifying run, 1=Qual+Race, 2=Real race (default)
  event_type=2
  ; Racing class; 0=circuit (loops), 1=rally/A-B tracks. Only used for menu statistics and warp position.
  racing_class=0
  ; Driver id (name)
  driver=The_Driver
  ; Pace car present? (first AI car found)
  pace_car
  {
    ; Enable pace car?
    enable=0
    ; Pace car #laps to assist
    laps=2
    ; Disappear immediately when done pacing?
    disappear=0
  }
  ; Driver level; see levels.* (normally Pro=0, Semi-pro=1, Beginner=2)
  level=0
  ; Auto-return time (in ms; once a race ends, return to start for next lap; rally for example)
  ; 0 means no auto-return. Only works for point-to-point tracks
  auto_return_time=3000
  ; Competition name and id
  competition=1
  competition_id=1
  ; Customer ID (passed by RaceManager for example)
  cid=RUUD
  ; Heat number
  heat=66
  ; Time (s) to countdown towards end of session
  countdown_start=3
  ; Time (s) to cool down after a session (qualify)
  cooldown_time=3
  ; Time (s) to cool down after the race (show results)
  cooldown_time_race=10
  ; Time (s) for the start scene (after all cars are loaded, and just before the starting lights)
  ; Allow some time for multiplayer clients to settle down to trigger the race on each client at the same time.
  startscene_time=1
  ; Show lights overlay texture at (non-quick)start?
  ; Note that the position of the start lights is set in stats.lights_y
  show_start_lights=1
  ; Show 3..2..1 at (non-quick)start?
  show_start_numbers=0
  ; Speed of start lights (time in ms per light)
  time_per_light=1000
  ; Start lights sequence options
  start_lights
  {
    ; Number of images (vertically) in data/images/race.tga
    ; For the vertical position, see stats.lights_y
    ; #Start lights = images-2 (so 7 for 5 startlights, images=5 for 3 startlights)
    images=5
    ; Time range between last row of lights and turning them all off (triggering the race); in seconds
    final_time_min=1.0
    final_time_max=1.0
  }
  ; Controls
  disengage_at_race_end=1
}
ghost
{
  ; Ghost car options (use 'ghost save <name>' to save current ghost lap in data/tracks/<trackname>/ghosts/<name>.ghost)
  enable=1
  ; show ghost? (if 0, and 'enable'=1, you could still record ghost files)
  show=1
  ; Auto save ghost? (uses race.heat entry: saves as 'data/tracks/<trackname>/ghosts/heat<heatNr>.ghost')
  auto_save=1
  ; Load ghost file upon starting race? (leave empty to skip loading; don't add .ghost postfix)
  load=
  ; Update ghost data if you've loaded an explicit ghost file? If 0, the loaded ghost will replay the loaded lap, even if you're faster (default=1)
  update_if_loaded=1
  ; Time offset (ms) for playback (so you can let the ghost run in front of you)
  time_offset=0
  ; Time scale for slow-motion playback (normally 1.0)
  time_scale=1.0
  record=1
}
rules
{
  ; When pitting (standing still currently), what is the distance of other cars before hiding car?
  pitstop_autohide_distance=250
}
gadgets
{
  ; Turn on the menu? If set to 0, the game immediately proceeds into Race
  menu=1
  ; Automatically go into replay mode? (see replay.load for which replay it will load)
  replay=0
  ; Turn on the game itself? Normally keep this at 1.
  game=1
}
loading
{
  indicator_pos=360 200 80 80
  ; Load bar Y
  bar_y=570
}
menu
{
  ; Background movie (leave empty for none)
  bgr=
  bgr_opacity=0.2
  bgr_scale_x=1
  bgr_scale_y=1
  ; Show wheel?
  wheel=0
  ; Running at x fps
  movie_fps=25
  ; Show buttons? (might not want a menu when using a Race Manager for example)
  show_buttons=1
  ; Show statistics? (best drivers etc)
  show_stats=0
  ; Paint logo?
  show_logo=0
  ; Paint title on top?
  show_title=1
  ; Show console in menu?
  show_console=0
  ; Redo fullscreen after x ms? (Mac Cinema HD ugly bugfix). Only for multiview slaves. 0 means no redo.
  redo_fullscreen=0
  ; Be CPU friendly in menu? (ms to wait every step)
  wait=30
  ; Screen saver time (in seconds)
  screen_saver=0
}
splash
{
  ; Image (must be 2^n sized); if not found no splash screen will be shown
  ; Size of image onscreen
  width=500
  height=350
  ; Duration of splash image onscreen (ms)
  time=1500
  ; Fade out time
  fade_time=1500
}
network
{
  ; Timeout time (ms) before an enet connection is disconnected; 0 is the default of ENet,
  ; which is currently 30000.
  enet_timeout=0
}
audio
{
  ; Turn off enable (0) in case of sound problems
  ; All platforms use FMOD (www.fmod.org)
  enable=1
  ; Set mastervolume; 0 is silent, 255 is maximum volume
  mastervolume=255
  ; Output; for Windows, use 'dsound', 'winmm', 'asio', 'openal', 'wasapi' (Vista) or leave empty
  ; to autodetect. For Linux, use 'oss', 'alsa', 'esd' or also
  ; leave empty. For Mac, use 'mac' (or empty).
  ; Try empty for starters. In case of trouble, try 'nosound' or enable=0 above.
  type=
  ; Driver number; check out the available drivers with the 'audiodrivers' console command
  driver=1
  ; Output frequency (44100 or 48000 is ok)
  frequency=44100
  ; Bits per sample; 16-bits sounds much better and the mixer
  ; is optimized for 16-bit anyway.
  bits=16
  ; Speaker mode; -1=system default, 1=mono, 2=stereo, 3=quad (4.0), 4=surround (5.0), 5=5.1 (subwoofer), 6=7.1, 7=ProLogic (5.1)
  speakermode=-1
  ; Number of voices to allocate (defaults to 128)
  voices=512
  ; 3D rolloff factor; 1=default, nearing 0 means volumes don't roll off
  ; as quickly, while >1 means sounds will fade very quickly
  rolloff_factor=0.1
  ; Buffer size (defaults to 512); too low means cracking up the sound, too high
  ; will generate audible frequency updates (stepwise changes)
  ; Doesn't seem to work in Linux/SuSE7.3/ALSoundblaster
  buffersize=512
  ; Number of buffers (defaults to 8)
  buffers=8
  ; Hook car audio to camera? (for more noise with incar cameras); default=1
  hook_incar_to_camera=0
  ; Generic effects on all audio
  distortion=0
  {
    ; Level 0..1
    level=0.5
  }
  reverb=1
  {
    new_var_here=0
  }
  flange=0
  {
    ; Drymix 0..1
    drymix=0.45
    ; Wetmix 0..1
    wetmix=0.55
    ; Depth 0..1
    depth=1.0
    ; Rate 0..20, default 0.1
    rate=0.1
  }
  lowpass=0
  {
    ; Lowpass cutoff frequency in hz.  1.0 to 22000.0.  Default = 5000.0
    cutoff=5000.0
    ; Lowpass resonance Q value.  0.0 to 127.0.  Default = 1.0.
    resonance=1.0
  }
  ; Surface sounds
  road
  {
    volume=0
    ; Pitch determination
    pitch_scale=0.005
    pitch_offset=2
    smp0
    {
      sample=road.wav
      ; Speeds in m/s
      min=0
      max=9999
      natural=5
    }
  }
  road_offline
  {
    ; When going off the optimal line
    ; Pitch determination
    pitch_scale=0.005
    pitch_offset=2
    smp0
    {
      sample=road_offline.wav
      ; Off the line amount (normalized, so 0..1)
      attack=0.5
      min=0.5
      max=1
      decay=0
    }
  }
  grass
  {
    ; Pitch determination
    pitch_scale=0.005
    pitch_offset=2
    smp0
    {
      sample=grass.wav
      min=0
      max=9999
      natural=5
    }
  }
  gravel
  {
    ; Pitch determination
    pitch_scale=0.015
    pitch_offset=0.5
    smp0
    {
      sample=gravel.wav
      min=0
      max=9999
      natural=5
    }
  }
  sand
  {
    ; Volume determination
    volume_scale=0.5
    volume_offset=0
    ; Pitch determination
    pitch_scale=0.015
    pitch_offset=0.5
    smp0
    {
      sample=sand.wav
      min=0
      max=9999
      natural=5
    }
  }
  kerb
  {
    ; Pitch determination
    pitch_scale=0.02
    pitch_offset=2
    smp0
    {
      sample=kerb.wav
      min=0
      max=9999
      natural=5
    }
  }
  stone
  {
    ; Volume determination adjust as desired
    volume=1
    volume_scale=1
    ; Pitch determination
    pitch_scale=0.01
    pitch_offset=1
    smp0
    {
      sample=stone.wav
      min=0
      max=9999
      natural=1
    }
  }
  water
  {
    ; Volume determination adjust as desired
    volume=1
    volume_scale=1
    ; Pitch determination
    pitch_scale=0.01
    pitch_offset=0
    smp0
    {
      sample=water.wav
      min=0
      max=9999
      natural=0.7
    }
  }
  ice
  {
    ; Volume determination adjust as desired
    volume=0.9
    volume_scale=0.01
    ; Pitch determination
    pitch_scale=0.01
    pitch_offset=1
    smp0
    {
      sample=ice.wav
      min=0
      max=9999
      natural=1
    }
  }
  snow
  {
    ; Volume determination adjust as desired
    volume=1
    volume_scale=1
    ; Pitch determination
    pitch_scale=0.01
    pitch_offset=1
    smp0
    {
      sample=snow.wav
      min=0
      max=9999
      natural=1
    }
  }
  mud
  {
    ; Volume determination adjust as desired
    volume=1
    volume_scale=1
    ; Pitch determination
    pitch_scale=0.01
    pitch_offset=0
    smp0
    {
      sample=mud.wav
      min=0
      max=9999
      natural=1
    }
  }
  ; Environment sounds
  rain
  {
    ; Pitch determination
    pitch_scale=1
    pitch_offset=0
    smp0
    {
      sample=rain.wav
      min=0
      max=9999
      natural=1
    }
  }
}
music
{
  ; Several section with music choices
  ; Menu music (MP3/WAV etc)
  menu
  {
    ; song1=menu.mp3
    song1=
  }
  lobby
  {
    song1=lobby.mp3
  }
  replay
  {
  }
  race
  {
  }
}
replay
{
  enable=1
  ; Replay to load/view (by default taken from data/replays/?)
  file=
  ; Show file open dialog instead of using replay.file?
  file_request=0
  ; Show menu to select the file, or just go ahead and just use replay.file?
  file_menu=1
  ; Generic full-race replay buffer size (in bytes)
  size=10000000
  ; Ghost-car replay buffer size
  size_ghost=100000
  ; Recording interval (ms per step, default=100 which is 10Hz)
  interval=100
  ; Load standard replay (data/replays/test.rpl) instead of actual replay? Quite useless probably.
  load_standard=0
  ; Automatically save replay on race end?
  auto_save=0
  ; Video recording of replays (the movie clipboard icon while running a replay) - 0=TGA's, 1=AVI, 2=DirectShow (requires codecs)
  video
  {
    ; Type of output: 0=TGA's, 1=AVI, 2=DirectShow (requires encoder codecs)
    type=2
    ; Encoder; if type=2 (DirectShow): compressor codec name; depends on the installed Video Compressor codecs.
    codec=Microsoft Windows Media Video 9
    ; CSharp is fast but gives choppy AVI's
    ; CSIR seems not to compress
    ; MainConcept is unknown but may be ok
    ; Add 'Color Space Converter' and 'YUV Transform' filters before the codec?
    ; (some filters only accept YUV, not RGB32 as input)
    yuv_convert=1
    ; What muxer filter to use? Currently hardcoded to 'AVIMux', the future
    ; might see this change to allow other muxers. This is inserted just
    ; before the 'File Writer' filter.
    muxer=AVIMux
    ; Recording framerate; if set to 0, the user is requested the framerate
    fps=0
    ; Automatically go into video record mode when the replay starts? (for automated solutions)
    ; When set to 1, the replay mode will start generating a video file, and exit (!)
    ; implicitly after this.
    auto_record=0
    ; Output directory; used when auto_record=1. The output file will then be
    ; <output_dir>/<replayname>.avi (if AVI generation is used)
    output_dir=
    ; Extra audio silence to sync audio (samples, so ~44100 for 1 second of silence)
    audio_silence=0
    compressor=Microsoft Windows Media Video 9
  }
  ; Batch export movie for all drivers? This will generate a separate video file for each driver.
  batch_export=0
  ; Batch export limit to a single driver? (useful for automated batch replay rendering) -1=all drivers
  batch_driver=-1
  database
  {
    ; Alternative storage location (leave empty to store replay files in data/dump)
    ; If defined, this will use the filename <heat>_<date>_<time>.rpl
    dir=
  }
}
multiplayer
{
  ; Always enable multiplayer; even your local car will connect
  ; through it's own server
  enable=1
  ; The host that serves the game. I.e. 'somehost' or '192.168.0.1'.
  ; Note that for v0.4.8, if 'server' is 'localhost', the machine
  ; is both client and server. Do NOT use the real machine name in
  ; this case, since Racer will think that the server is a remote
  ; machine, and no serving will take place.
  server=localhost
  ; Time (ms) to connect to server (per try!)
  timeout_connect=1000
  ; Retries when connecting to server
  connect_attempts=30
  ; Remote server; this indicates a fixed server you want to connect
  ; to when selecting 'Join' from the menu.
  ; This automatic selection is only used if 'use_remote_server'=1
  ; and generally you only want this on the Mac, where dialogs
  ; don't work yet.
  server_remote=10.1.90.111
  ; 'server_remote' is only used if the value below is 1
  ; This is needed on the Mac, where dialogs don't work yet.
  use_remote_server=0
  ; Expected number of clients. Leave at 0 unless you know in advance
  ; how many clients (including spectators) will/should connect.
  expected_clients=1
  ; Timeout for expected clients to arrive (in seconds)
  expected_clients_timeout=60
  ; Allow remote connects? (in other words, be a host?)
  ; If enabled (1) it will allow remote clients to connect.
  ; If 0, the server above will automatically be set at 'localhost'
  ; because Racer is always multiplayer, even in single player mode.
  allow_remote=1
  ; Communication port (normally 25000, for WAN latency tests port 25001 can be used with a computer inbetween running:
  ;   portforward 25000 25001 192.168.0.101 (where .101 = the multiplayer server)
  port=25000
  ; Time (ms) between car updates being sent to the server
  ; For example: 100 means 100ms is 10Hz, which seems about reasonable.
  ; Default for LAN     : time_per_update=10, linear_interpolation=1
  ; Default for internet: time_per_update=100, linear_interpolation=0
  ; This value must be the same on all clients and server PC's.
  time_per_update=100
  ; Type of interpolation; use linear for LAN play (1), splines potentially for internet (0) or history buffers (2) for spectating
  linear_interpolation=1
  ; History interpolation time offset (milliseconds) - keep it at least twice as large as 'time_per_update' above
  history_time_offset=200
  lag
  {
    ; Upon receipt of a packet, a spline interpolation is used to
    ; smoothly move the car to the new position. The time this takes
    ; is dependent on 'multiplayer.time_per_update'.
    ; It is advised to keep time_per_update the same on every client
    ; (and server) for minimal interpolation weirdness.
    ; The 'correct_factor' is multiplied by the time_per_update to
    ; get the time in which the car is smoothly pushed to its new
    ; location (as just received from the latest network packet)
    ; Experimentation is probably useful for this value (0..2?).
    correct_factor=2
  }
  ; Spectator-only view? (no cars will be added by this MP client)
  audience=0
  ; Internet based games
  internet
  {
    ; Obsolete tree; use multiplayer.listclient from v0.5.5 on.
    ; Are the races public for the internet?
    public=0
    ; List server to notify of races, so people can hook on to that listserver and see your race
    listserver=192.168.1.99
  }
  listclient
  {
    ; Where is our current listserver?
    host=lobby.racer.nl
    ; UDP port
    port=28100
    ; Your nickname/login with which to enter the listserver
    nick=MyNick
    ; Viewing extra's for development
    dev_flags=0
    ; Known listservers
    servers
    {
      count=1
      server0
      {
        host=127.0.0.1
        port=28100
      }
    }
  }
}
limits
{
  ; Max #milliseconds to simulate per graphics frame. If this is not
  ; attainable, the display will show 'SLOMO' (your fps is too low)
  max_sim_time_per_frame=100
  ; Max world size (Newton)
  world_size=10000
}
car
{
  ; Y offset when warping the car
  warp_offset_y=0.01
  ; What is considered low speed? (rotational velocity of wheel in radians)
  low_speed=2.0
  ; Damping of forward/backward wheel speed reversal. This takes place
  ; when the car is coming to a stop; when a wheel reverses direction,
  ; the slip ratio is negated but damped using this factor. This is an
  ; addition to the SAE950311 damping method.
  ; Is also used laterally.
  damp_sr_reversal=0.0
}
stats
{
  ; Default info page; 0=none, 1=tire forces, 2=timing/race/aero, 3=surface,
  ; 4=controls, 5=network, 6=profile, 7=suspensions, 8=driveline/ai, 9=telemetry
  default_info=0
  ; Default info subpage - some info pages have multiple subpages
  default_info_sub=0
  ; Big info text font name
  font=realvirtue40
  ; Extra horizontal scale (on top of global scale)
  font_scale_x=1.0
  ; Smaller font scale; 1=default, <1=smaller, >1=larger
  scale=0.6
  ; Show FPS initially? (toggle with Ctrl-F)
  fps=1
  ; Show gear indicator as debug text? (toggle with Ctrl-G)
  show_gear=1
  ; Show car view initially? (toggle with Ctrl-V)
  show_dials_2d=1
  ; Race summary view; 0=nothing, 1=laps at bottom, 2=time comparisons (default), 3=last lap results (big),
  ; 4=session results (big), 5=ranking (spectator), 6=front/rear time difference
  race_view=2
  ; Position and size of race_view=2 (default x=30, y=30, wid=180)
  race_view_x=30
  race_view_y=30
  race_view_wid=180
  ; Limit race summary view toggling
  max_race_view=3
  ; Race start lights vertical position (typical values from 0..600)
  lights_y=200
  ; Time to keep info texts onscreen (ms)
  info_time=5000
  ; Info position; x=0 means center horizontally
  info_pos=0 50 0 0
  ; Flag position (carproblem/disqualify); normalized to a 800x600 display (0,0 is topleft); default is centered horizontally
  flag_pos=325 20 150 110
  ; Enable wrong-direction indicator? (flashing image)
  show_wrong_direction=1
  ; Alpha scale of data/images/standings.tga (fading)
  standings_alpha_scale=0.1
}
console
{
  enable=1
  ; Location
  x=200
  y=580
  maxline=10
  ; Initial activation?
  active=1
  ; Paint console onscreen? (can still do UDP output)
  paint=1
  ; Autohide? If >0, specifies time (in milliseconds) when to hide in
  ; case of no messages
  autohide=5000
  ; Alternative route; UDP output (hides console window, only outputs to UDP)
  ; If no host is defined, output goes to main computer console window.
  ; Preferred is to direct to a RaceManager directly to catch all messages upon startup
  host=
  port=26000
  ; UDP server (for reliable messages, with connections, using ENet middleware)
  port_server=26001
  ; Multithreaded port - this port only replies to simple ping commands, making
  ; sure you can check Racer's up state even if Racer is busy with something (load a track for example)
  ; Default port is 26002
  port_mt=26002
  ; Log file (outputs all console message into data/dump/<file>). Leave empty to cancel logging.
  logfile=
  log_append=0
}
environment
{
  ; Air density; taken here is density of air at 15 degrees Celsius,
  ; 59 degrees Fahrenheit, in kg/m^3.
  air_density=1.225
  ; Gravity (in m/s^2)
  gravity=9.80665
  ; Outside temperature in degrees Celsius
  temperature=20
  rain
  {
    ; Multiply grip of surfaces for full rain (1.0)
    grip_factor=0.9
  }
  snow
  {
    ; Multiply surface grip; normally around 90% (0.9) for good snow tires
    grip_factor=0.8
  }
}
assist
{
  ; Automatically engage clutch at low engine rpm? (if 0 it might still be turned on if it is 1 in the car.ini)
  auto_clutch=1
  ; Automatically shift? (if car isn't already an automatic)
  ; You can also use the script commands 'manual' and 'automatic')
  auto_shift=0
  ; Enable traction control? (if 0 it might still be turned on if it is 1 in the car.ini)
  ; (script commands 'tc on', 'tc off')
  traction_control=0
  ; Enable ABS? (if 0 it might still be turned on if it is 1 in the car.ini)
  abs=0
  ; Enable ASL? Limits to AI speed (helps braking before turns; active speed limiter)
  asl=0
  ; Time allowed offroad (ms) before auto-reset
  time_allowed_offroad=0
  ; Time allowed without wheel contact (flying or lying on back)
  time_allowed_nowheel=3000
  ; Time allowed without driving
  time_allowed_novelocity=0
  ; Time allowed with high angular velocity (spinning)
  time_allowed_spin=0
  ; Spin amount that is considered too high (length of rotational velocity vector)
  spin_threshold=5.0
  ; When resetting, check if we are close to another car, this is the minimum distance (0 for no check)
  ; The default here is 50 (meters)
  reset_distance=0
  ; When resetting, the time to keep the car invulnerable (uncollidable)
  time_invulnerable=0
}
controls
{
  ; Input time step (#ms per input update); 20=50Hz
  time_input=20
  ; Output time step (#ms per output update; FF)
  time_output=20
  ; Time (in ms) when a bad shift is done (no clutching or bad speedshift)
  ; This is then the delay before the actual gear really becomes active.
  bad_shift_penalty=250
  ; Following the steering angle.
  ; An attempt to make the car cameras point in the direction where
  ; the driver would like to look. With high speed, use a smaller angle,
  ; since this can otherwise be disturbing to look at.
  pov_follow
  {
    enable=0
    min
    {
      ; Speed in m/s (100 m/s=360 km/h), angle in degrees
      speed=5
      angle=10
    }
    max
    {
      speed=50
      angle=1
    }
  }
  ; On-center reduction of oscilattion (shimmy). Reducing steering wheel back and forth
  ; motion at higher speeds. The idea is to cut down force near zero steering.
  ; Center squeeze: the higher the number, the smaller the range where force is reduced.
  ; Values ranging roughly from 1 to 20.
  center_squeeze=10
  ; Center minfactor; makes sure that at zero steering, there is still some force left.
  ; Mathematically, Mz will not be reduced further than the original Mz times center_minfactor.
  center_minfactor=0.4
  ; Minimal car velocity before on-center reduction becomes active (m/s)
  center_velocity_threshold=50
  ; Maximum start throttle, to keep automatics from going to 5th when lights go out
  max_start_throttle=1.0
  ; Ignore safety on controllers?
  ignore_safety=0
  ; Multi-thread engaging of controllers? (quick motion up while loading the track)
  thread_engage=0
}
selcar
{
  ; Car selection options
  ; Rotate floor along with car?
  rotate_floor=1
  light
  {
    x=1
    y=4
    z=5
  }
}
helicopter
{
  ; Mass of helicopter
  mass=200
  ; Spring constant to pull heli above car
  k=1
  ; Damping to keep helicopter from overshooting car location
  damping=10
  ; Height of heli (avoid going to high for clipping and rendering speed)
  height=30
  ; Lens
  fov=50
}
graphics
{
  ; Default font (in data/fonts/)
  default_font=eurostile11
  ; Hide cursor? 0=don't hide, 1=hide if fullscreen, 2=hide even if not fullscreen
  hide_cursor=0
  ; Use track-specific loading images? (data/tracks/<trackname>/loading.jpg)
  use_track_loading_image=1
  ; Show car names above cars? (default 0)
  show_names=1
}
minimap
{
  ; Small map indicating where all the cars are
  enable=1
  alpha=1.0
  x=800-200
  y=0
  wid=180
  hgt=180
}
pacecar
{
  ; Instructor car mostly (pacecars can be safetycars instead of instructor cars)
  ; Instructors cars will wait for real drivers, and stops after X amount of time/distance.
  ; Safety cars will not do this and just drive.
  ; The pacecar stops after 1 lap
  ; Minimal distance between pacecar and actual drivers (m); starts braking beyond this.
  min_distance=20
  ; Minimal pacecar distance in time (s); if time to impact gets under this value,
  ; the pacecar will drive.
  min_distance_time=20
  ; Maximum distance before pacecar begins to slow down to let
  ; drivers approach
  max_distance=60
  ; At which distance before the end of the last pacelap to stop pacing
  turn_off_distance=12000
  ; Distance upon which the pacecar is removed from the race after pacing ends
  disappear_distance=-100
}
resultsscreen
{
  ; Vertical offset of the non-header fields in the race results screen (at the end of the race)
  ; Note that the header stays at the same position (!)
  y_offset=0
}
;
; Graphics
;
resolution
{
  ; Resolution to play in
  fullscreen=0
  ; Avoid screen switch? (takes 1 of height)
  near_fullscreen=0
  ; No border? (for non-fullscreen windows without a border)
  no_border=0
  ; Position of (non-fullscreen) window; for x/y, -1 means center on the desktop (non-fullscreen only)
  x=-1
  y=-1
  ; Width and height of window (or fullscreen resolution)
  width=1280
  height=800
  ; Pixel aspect ratio; normally 1 (pixels onscreen are sized 1:1)
  aspect=1
  ; Rendering aspect; 1.333 for most VGA resolutions, 1.6 for example for a 1280x800 screen (Apple screens, 16:10). 0=automatic (width/height)
  render_aspect=0
  ; Pixel depth (RGB; use 16 or 32; 32 preferred)
  bits=32
  ; Alpha bits? Not really needed for normal shader operation, so keep at 0
  alpha_bits=0
  ; Depth buffer bits; 0, 16 or 24 bits. With FBO's you can leave this at 0.
  z_bits=0
  ; Stencil buffer bits; is used for projective shadows, stencil shadowing
  stencil_bits=0
  ; Frequency - 0 for the default frequency, >0 for an exact frequency (i.e. 60 or 72)
  frequency=60
  ; Vertical sync? 0=off (max framerate, the default), 1=sync to display frequency, >1=set interval
  vsync=0
  ; Frame lock? (0=disable, 1=enable) Only works on nVidia Quadro cards.
  ; Obsolete; use swap_group=1 and swap_barrier=1 to framelock several PC's together.
  ; frame_lock=0
  ; Obsolete; Force frame lock enable/disable to succeed? (for tests on non-Quadro cards)
  ; frame_lock_force=0
  ; Swap group & barrier; for locking multiple computers/displays (nVidia Quadro cards only) - 0=off
  swap_group=0
  swap_barrier=0
  ; Gamma (only implemented on Mac)
  gamma=1.0
  stereo
  {
    ; Stereoscopic 3D options
    ; Use quad-buffered stereo? (currently unsupported)
    quad_buffered=0
    ; See also renderer.stereo.* for Oculus Rift for example
  }
  ; Number of monitors; normally set to 1, may be set to 3 if for example
  ; a Matrox Parhelia is used.
  monitors=1
  frame_lock=0
  frame_lock_force=0
}
window
{
  ; On X-Windows systems, should we let the window manager manage us?
  ; (this gives a border)
  manage=0
  ; Enable maximizing?
  maximize=0
  ; Allow resizing of the window?
  resize=0
}
fx
{
  ; #ms per fx interval (things like skidmarks, smoke etc)
  interval=20
  ; Fog hint; 0=don't care, 1=fastest, 2=nicest
  fog_hint=2
  ; Forward visibility (in good weather conditions) in meters
  ; Should match constants.cg's zFar!
  visibility=1500
  ; Use track lighting?
  track_lighting=1
  ; Skid marks; number of skid mark points
  skid_mark_buffer=100
  skid_mark_enable=1
  ; Allow skid mark saving?
  skid_mark_save=1
  sun
  {
    ; Sun white-out factor; the bigger, the more whiteout. Try 50000 first.
    whiteout=0
    ; Visibility method; 0=always (if in frustum), 1=zbuffer, 2=raytrace (NYI)
    visibility_method=0
    ; Enable flare?
    flare=0
    ; Flare textures (8 textures, ac0..4 each); avoid texture switches
    ; by keeping equal textures together (i.e. 0 1 1 instead of 1 0 1)
    texture=0 1 1 2 3 3 4 4
    ; Length of flare distance to sun (1=sun itself, 0=center of screen,
    ; -1 is mirrored across screen center)
    length=1.0 0.5 0.33 0.6 0.4 -0.25 0.2 -1
    ; Size scaling; 1=128x128, <1=smaller, >1=bigger
    size=6.0 .5 .25 0.8 .5 .25 .25 1.2
    ; Time of day enforcing (HHMM); if empty, the track's sun settings are used.
    time_of_day=
    ; Speed of time progress; 0 if no progress, 1 for real-time etc.
    fast_time_factor=0
    ; Use actual system time for sun? (take real time of day if time_of_day is empty; overrules the track's special.ini gfx.time setting)
    auto_time_of_day=0
    ; Day-night zapping in the middle of a session
    day_night_ramp=0
    ; Start time for ramp (in minutes from midnight)
    day_night_ramp_start=14*60
    ; End time for ramp
    day_night_ramp_end=23*60
  }
  smoke
  {
    ; Number of particles reserved; the more, the slower things may be,
    ; but nicer graphics (decrease fx.interval for best effect)
    particles=200
  }
  ; Fade value if car has a problem (to prevent sickness); may need to be >0.5 to have an effect
  problem_fade=0.95
  ; Fade alpha scale (to keep fade from fully fading)
  fade_alpha_scale=1.0
}
filter
{
  ; These settings are overruled by the new gfx engine in Racer v0.5.2+
  ; Use mipmapping? 0=none, 1=nearest, 2=linear
  mipmap=1
  ; Use trilinear filtering? If mipmap=0 and trilinear=1,
  ; bilinear filtering is used instead.
  trilinear=1
  ; Max anisotropy; the higher, the better the filtering
  ; Only supported on some cards. Values 1..?. 1 will not use any
  ; anisotropy, starting from 2 you'll get results.
  max_anisotropy=8
}
envmap
{
  ; Enable old-style spherical environment mapping?
  enable=1
  ; Generate mipmaps from environment map for soft reflection maps? (very expensive when using live_track=1 and render_once=0!)
  generate_mipmaps=1
  ; Live updating of track environment map? (very costly)
  live_track=1
  {
    ; Number of cubemap sides to update per frame (less=faster but more jerk)
    sides_per_frame=6
    ; Frames per update; each update, 'sides_per_frame' sides will be rendered (!). Default is 1.
    frames_per_update=1
    ; Use an offscreen FBO? Faster, better
    fbo=1
    ; Number of FBO bits; 8 or 16 (HDR)
    bits=16
    ; Size of FBO (width & height)
    size=512
    ; Render once? This will generate a nice map, but never update it. Very fast
    render_once=1
  }
  ; Dozens of options controlling live track map should come here. :)
  ; Default environment map image for sphere environment mapping
  default_texture=smap_whitesun_add.tga
}
shadow
{
  ; Use projected shadow for cars (on tracks)? Turn off when using shadow mapping (CSM).
  project_shadows=0
}
damage
{
  ; Global damage options
  texture_damage
  {
    ; Some cards dont support texture lookups in vertex shaders
    ; disable (0) when this is the case (faster)
    vertex_damage=0
  }
}
renderer
{
  ; Graphics render engine options
  ; Desired framerate - will reduce detail dynamically to obtain the framerate (0 to disable)
  desired_fps=0
  ; Throttler detail limits (0=nothing drawn, 1=full detail, >1=increased visibility range)
  min_detail=1.0
  max_detail=1.0
  surround
  {
    ; For surround rendering (across multiple monitors), note that resolution.monitors
    ; already contains the number of attached monitors. These define the number of
    ; splits to render the main view in. I.e. resolution.monitors=3 will split
    ; the main view in 3 parts.
    ; See also http://www.racer.nl/tutorial/surround_rendering.htm
    ; Surround method: 0=single render with wide horizontal FOV, 1=split render (renders multiple times; recommended)
    method=1
    ; Rotation angle factor, just above 1.0 to correct for bevels
    angle_factor=1.0
  }
  stereo
  {
    oculus_rift
    {
      ; Settings for supporting the Oculus Rift (currently not yet implemented).
      ; Don't use resolution.stereo.quad_buffered=1 for the Rift; it uses 2 images side by side horizontally.
      enable=0
    }
    ; Infitec only render left or right eye (two separate video streams)
    only_left_eye=0
    only_right_eye=0
  }
  paint
  {
    ; Show wire frame?
    wireframe=0
    ; Show vertex normals?
    normals=0
    ; Show triangles? (default=1)
    triangles=1
  }
  ; Note that some fog parameters are defined in <track>/special.ini
  ; Enable fog? (shaders can still turn fog off)
  fog=1
  ; Use array elements instead of 1 drawelements?
  use_array_elements=0
  ; Use single pass rendering instead of multitexturing? Don't set at 1 if you use Cg shaders
  single_pass=0
  ; Support Vertex Buffer Objects? (for cars and/or tracks). Often increases framerate if enabled.
  use_vbo=1
  ; Support projected lights? (default=1)
  projected_lights=1
  ; Render with the camera at the origin? (keeping numbers small)
  camera_at_origin=0
  ; CSM shadow mapping
  shadowmapping
  {
    ; Enable shadow mapping? If enabled, changes the Cg shader directory to
    ; data/renderer/shaders_hdr_csm (!) instead of data/renderer/shaders_hdr
    enable=1
    ; debug mode (paints splits)
    debug=0
    ; Size of the debug polygons rendered (visualize the shadowmap)
    dbgsize=256
    ; Alpha of the visualization
    dbgalpha=1.0
    ; Blur the shadowmap? (slower if 1)
    blur=1
    ; Profiles for different camera types
    profile0
    {
      ; Outside the car
      ; Number of splits used, each split takes one extra render loop (3 should be enough)
      splits=4
      ; Texture resolution; MUST match that in data/renderer/common/constants.*!
      mapsize=512
      ; Split distances 0 - 3, each distance higher than the previous one; now in data/renderer/common/constants.*? (not true probably)
      splitdist0=10
      splitdist1=40
      splitdist2=160
      splitdist3=640
      ; the amount of frames to skip to increase performance
      splitrenderjump0=0
      splitrenderjump1=0
      splitrenderjump2=0
      splitrenderjump3=0
      ; offset the framecount for jumping frames
      splitrenderoffset0=0
      splitrenderoffset1=0
      splitrenderoffset2=0
      splitrenderoffset3=0
    }
    profile1
    {
      ; Inside car
      ; Number of splits used, each split takes one extra render loop (3 should be enough)
      splits=4
      ; texture resolution; MUST match that in data/renderer/common/constants.cg!
      mapsize=512
      ; split distances 0 - 3, each distance higher than the previous one; now in data/renderer/common/constants.cg? (not true probably)
      splitdist0=5
      splitdist1=30
      splitdist2=150
      splitdist3=850
      ; the amount of frames to skip to increase performance
      splitrenderjump0=0
      splitrenderjump1=0
      splitrenderjump2=0
      splitrenderjump3=0
      ; offset the framecount for jumping frames
      splitrenderoffset0=0
      splitrenderoffset1=0
      splitrenderoffset2=0
      splitrenderoffset3=0
    }
    mapsize=1024
    shadowintensity=0
  }
  rain
  {
    ; Method of rain; 0=fullscreen poly (old), 1=Project Gotham Racing 4 particle boxes
    method=1
    ; Method 1: particles per box (there's a maximum of 20 boxes); default 10000 (rain 1 means 20*10000 particles visible); max=10900
    particles_per_box=10000
  }
  bloom
  {
    ; Bloom on top of HDR - keep it on
    enable=1
    ; Size of first bloom FBO (more are created, each half the size of the one before)
    width=256
    height=256
  }
  auto_exposure
  {
    ; If enabled, calculates luminance of the scene and automatically adjusts the 'exposure'
    ; It then overrules any exposure setting from track special.ini files or the script 'exposure' command
    enable=0
    ; Time per luminance sample (increase value to improve framerate)
    time_per_sample=500
    ; Exposure is calculated using: gradient/sceneLuminance+offset (this was changed in v0.8.18)
    offset=0
    gradient=0.35
    ; Minimal exposure
    min=0.0
    max=1000.0
    ; Gradually change exposure with a Kalman filter (values around 0..1; close to 0=slow)
    filter_gain=0.001
  }
  motion_blur
  {
    ; Method: 0=disabled, 1=OpenGL accumulation buffers, 2=blur-texture, 3=bitmap (not functional), 4=FBO (fast texture based)
    ; Preferred is FBO (the future is going to do more & more with FBO's due to Cg shaders)
    method=4
    ; Direct setting of FBO size (if 0, the window size is used) - only used for multiview+mirrors currently
    fbo_width=0
    fbo_height=0
    ; Use stencil buffer? (default=0) - use 0 when using shadowmapping, 1 when using the old projected shadows
    stencil=0
    ; (Method 1 only) Motion blur using accumulation buffers; 0=don't use, >1=number of passes (renders); can be slow!
    passes=4
    ; (Method 1 only) Mix scale; <1=darken, >1=brighten (sort of HDR)
    accum_factor=1.0
    ; (Method 2 & 4) Amount of blur; 0=nothing, 1=lots of blur. 0.5 seems reasonable. Based on a 100fps rate and adjusted accordingly.
    blur_alpha=0
    ; (Method 4 only)
    fs_filter1=bloom_shadows_f.cg
    ; (Method=4 only) Number of color samples for multisampled FBO (0=no multi-sampling, 2/4/8/16=samples); only works on nVidia cards 8xxx series and up
    samples=4
    ; CSAA coverage samples (only supported on nVidia cards that support CSAA)
    ; Typical use: CSAA 16x: samples=4, coverage_samples=16. Much faster than plain MSAA (samples=16).
    coverage_samples=16
    ; Generate velocity map? (for use in fullscreen shader) Creates velocity values in R & G channels using motion_blur_v/f GPU shaders.
    velocity_map=0
    ; Distortion for projectors
    distorter
    {
      ; Enable distortion? (also set motion_blur.fs_filter1 to bloom_distort_edge_lr_f.cg/glsl for example if enabled)
      enable=0
      ; Enter edit mode at startup?
      auto_edit=0
      ; Enable a test pattern at start (0=none, 1=bars, 2=crosses)
      init_testpattern=0
      ; Transparency of control points
      points_alpha=1.0
      ; Texture size (must be a power of 2)
      texture_size=1024
      ; Projection surface correction image for this projector
      projection_correction=
      ; Pass live environment cubemap to the shader? Useful for non-flat projections,
      ; where you for example use fish-eye (cylindrical-eye) distortions
      ; For cylindrical though, you can also just use the normal render, and distort
      ; that image, instead of using the live cubemap (much faster and gets rid of frustum problems).
      pass_live_map=0
      ; Control points defining a net to fit the screen in. The points are normalized
      ; (so 1 means the right or lower side of the screen, 0,0 is the origin at the top-left)
      ; Number order is row-column, so control_point_10 means row 1, col 0.
      control_point_00=0.000000 0.000000
      control_point_01=0.250000 0.000000
      control_point_02=0.501954 0.048828
      control_point_03=0.750000 0.000000
      control_point_04=1.000000 0.000000
      control_point_10=0.000000 0.250000
      control_point_11=0.250000 0.250000
      control_point_12=0.500000 0.250000
      control_point_13=0.750000 0.250000
      control_point_14=1.000000 0.250000
      control_point_20=0.000000 0.500000
      control_point_21=0.250000 0.500000
      control_point_22=0.500000 0.500000
      control_point_23=0.750000 0.500000
      control_point_24=1.000000 0.500000
      control_point_30=0.000000 0.750000
      control_point_31=0.250000 0.750000
      control_point_32=0.500000 0.750000
      control_point_33=0.750000 0.750000
      control_point_34=1.000000 0.750000
      control_point_40=0.000000 1.000000
      control_point_41=0.250000 1.000000
      control_point_42=0.500000 1.000000
      control_point_43=0.750000 1.000000
      control_point_44=1.000000 1.000000
      projection_correct=data/images/projection/projection_surface_correct.tga
    }
    masker
    {
      ; Enable masking texture?
      enable=0
      ; Automatically go into edit mode?
      auto_edit=0
      ; additional blur (its better to add blur in photoshop)
      blur=0
      ; Texture to apply
      file=data/renderer/masks/screenmask.tga
      ; Size of texture (should be implicit based on the file?)
      texture_size=1024
    }
  }
  ; Enable depth of field rendering? (experimental); needs motion_blur_passes>=2
  depth_of_field=0
  ; Force ATI card? A number of measurements may be taken, since ATI drivers have some problems.
  ; Note that v0.5.3 beta 8+ already automatically tries to detect ATI cards and overrules this value
  ; if an ATI card is indeed found (will force it to 1).
  ati=0
  ; Fader PID proportional setting; 0.002 is ok, 1 means superfast fades
  fgr_pid_p=0.002
  edge_blend
  {
    ; Software edge blending
    ; From v0.8.5, this needs to be done in Cg shaders, not a texture onscreen!
    ; Still, even with Cg, the p and gamma values are used.
    enable=0
    ; Curvature of edge fall-off (1=linear, 2=curvy, 3=more curved); normally always 2.0 since it is a property of light
    p=2.000000
    ; Gamma of projector (around 1.8..2.2, 1.0=linear)
    gamma=1.930000
    ; Global brightness adjustment to compensate for brightness differences in projectors
    brightness=1.0 1.0 1.0
    ; Left edge (normalized, 0..1)
    left_edge=0.1
    ; Right edge
    right_edge=0.9
    ; OBSOLETE Size of edge ramp in pixels
    ; OBSOLETE Side (1=left, 2=right, 1+2=left&right)
    ; Testing the setup; draw a test image? (see also the script commands 'edgetest on' and 'edgetest off')
    test_pattern=0
    ; Transparency of test pattern (defaults to 128)
    test_pattern_alpha=128
  }
  water
  {
    ; Enable water reflections to be drawn?
    enable=0
    ; Size of the water reflection FBO - aspect should match the actual resolution
    wid=1280
    hgt=720
    ; Multisample water FBO? (1=no, 2/4/8/16=oversampling)
    samples=1
    ; Paint reflection texture?
    debug=0
  }
  gpu_shaders=1
}
lod
{
  ; Level of detail
  enable=1
  ; Modifying LOD values being loaded.
  ; 1=normal, <1=objects move out quicker, >1=objects stay visible longer
  factor=1.0
}
mirrors
{
  ; Simple rectangular mirror at top? Use the mirror texture!
  ; So if used, also enable texture.enable (set to 1)
  simple
  {
    ; Draw simple mirror on top of screen? If 1, also set mirrors.texture.enable to 1.
    enable=1
    ; Position (if undefined, it is centered horizontally and placed near the top vertically)
    ; Size of simple mirror (onscreen)
    wid=300
    hgt=120
  }
  ; Second rectangular mirror, if one mirror isn't enough (e.g. SLI car with two mirrors)
  simple2
  {
    ; Draw a second simple mirror? Assumes that mirrors.simple.enable=1
    ; Used for cars with two mirrors
    ; The mirror texture is rendered only once, use tc_x_start,tc_x_end select the left/right part
    enable=0
    ; Position (if undefined, it is centered horizontally and placed near the top vertically)
    x=0
    y=0
    ; Size of simple mirror (onscreen)
    wid=150
    hgt=120
    ; Texture coordinates; normally 0 and 1. Use 0.5..1 for the left part (the mirror is reversed!)
    tc_x_start=0
    tc_x_end=1
  }
  ; Mirror texture
  texture
  {
    ; If you don't enable the simple mirror, you may also turn this setting off to save memory & render time
    enable=1
    ; Use an FBO to render into? (faster if you have the graphics power)
    fbo=1
    ; Anti-aliasing of mirror (normally 0, but 2/4/8/16 may look better)
    fbo_samples=4
    ; Texture size; the larger, the sharper, but also more costly
    wid=512
    hgt=128
    ; FOV in mirror view
    fov=40
    ; Update rate (1=update every frame, 2=update every 2nd frame, 3=every 3rd etc)
    update_rate=2
    ; Visibility in mirror (distance in meters)
    visibility=100
    ; Haziness in the mirror (default: 1.0)
    extinction_factor=1
    ; LOD factor (default: 1.0); keep it low to get fast rendering
    lod_factor=1
    ; Offset
    offset=0 0 0
    ; Angle offset (yaw, in degrees)
    angle=0
    ; Texture coordinates; normally 0 and 1. Use 0.5..1 for the left part (the mirror is reversed!)
    tc_x_start=0
    tc_x_end=1
  }
}
textures
{
  ; Big hack for faster loads during testing (does not work for DDS images)
  enable=1
  ; Quality; 1=max, 2=halfsize, 4=1/4th etc. Must be power of 2.
  quality=1
  ; Support texture compression? (default is 1 (on) unless shaders specifiy compression=0)
  compression=1
  ; Support DDS textures? Quadro 5000 seems to crash on DXT5 that work fine on Geforce
  dds=1
  ; Maximum texture size; useful to cut down on really big texturemaps
  ; or supporting ancient gfxcards that can only deal with 256x256
  ; texturemaps.
  max_wid=8192
  max_hgt=8192
  ; Stub texture name; if not empty, this image is loaded instead of the actual texture
  stub=
}
shaders
{
  ; Faster loading during testing; if set to 0, no (Racer) shaders are loaded
  enable=1
}
;
; Debug settings
;
dbg_car
{
  ; Several physics settings - can have a big impact on car behavior, so proceed with care!
  ; Initial rotational speed
  av_yaw=0
  av_pitch=0
  av_roll=0
  ; Initial speed
  vx=0
  vy=0
  vz=0
  ; Car's grip, when set to 0, the level's values are used, else, this overrides the level's grip
  grip=0
  ; Engine's torque, when set to 0, the level's values are used, else, this overrides the level's torque
  torque=0
  ; Disable slipangle usage? (for steady-state acceleration tests)
  no_sa=0
  ; Disable pitch jacking forces?
  no_jack_pitch=0
  ; Disable roll jacking forces?
  no_jack_roll=0
  ; Wheel rotation speed at start (100 for example)
  wheel_rvx=0
  ; Enable suspension rotational movement?
  suspension=1
  ; Enable wheels touching ground? (if 0, it's all car-track collisions)
  wheel_road=1
  ; Enable gravity working on the body? Actually enables all chassis
  ; forces (suspension, aero, gravity). Gives a floating car if 0.
  ; DOES NOT WORK ANYMORE FROM V0.8.7!
  gravity_body=1
  ; Apply friction circle?
  apply_friction_circle=1
  ; Method; 0=Genta (prefers longitudinal forces)
  ;         1=vector trim (equal mix of forces); much too simple
  ;         2=void (don't combine forces; should be testing only)
  ;         3=Gregor Veble's combined Pacejka (FC_SLIPVECTOR, very similar to Brian Beckman's Physics of Racing Series, chapter 25)
  ;         4=Cruden combined (not really useful yet)
  ;         5=none (for MF5.2 testing; automatically used if Pacejka model is set to Magic Formula 5.2)
  ;         6=Brian Beckman (=3 without factor limiting, see chapter 25; http://phors.locost7.info/phors25.htm)
  ;         7=Similarity method (~3 with adjusted scalings for Fx/Fy; no optimal SA/SR used), as in the Pacejka book, chapter 4.2.2 mostly, page 168
  ;         8=Magnus Gafvert, 2003/2004 (~7 with estimated peak Fx/Fy) which divides tire forces into adhesive and sliding (rotating sliding forces)
  ;         9=Cruden2013; separating adhesive and sliding
  ;        10=Similarity method (~7) with direct kappa/alpha friction circle (Marno Hopmans); no dividing by (1+kappa)
  ;        11=Brush model sliding direction (RvG 2013)
  friction_circle_method=10
  ; Maximum slip length for combined slip calculations (5=understeery, 15=snap oversteers)
  ; This is a default value; tweak it by car (if not defined in its car.ini, this value is used)
  max_slip_len=6.0
  ; Maximum tan(slipAngle); default is 0.75 (+/- 36 degrees), 20.0 (87 degrees) seems to work better
  max_tan_sa=20.0
  ; Maximum slip ratio; default is 1.5. You may want to let this grow for friction_circle_method 10 to get equal atan(sa)/sr ratios!
  ; In that case, set max_sr to 99 and max_tan_sa to 99.
  max_sr=1.5
  ; Maximum brake reduction when wheels stop spinning - default=0.2
  max_brake_reduction=0.1
  ; Adjust force direction when wheel starts locking?
  wheel_lock_adjust=1
  ; Zero lateral tire forces? (focus on longitudinal only)
  lateral_tire_forces=1
  ; Automatic damping (car.ini's damping_predict_lat)?
  auto_damping=1
  ; On (multiplayer) collision, how much time to keep server master (steps)
  collide_time=25
  ; Use AABBTree to speed up wheel-track collision checking?
  use_aabb_tree=1
  ; Avoid using spline info in the track? (to compare WITH splines)
  no_splines=0
  ; Use suspension force instead of tire rate force to determine
  ; load for Pacejka curves? This may stabilize things a lot during
  ; braking, avoiding the tire's jittering behavior and using the more
  ; gradual and damped suspension force instead. I think that rules
  ; out wheel hop though.
  use_susp_as_load=0
  ; Maximum forces (to try to avoid sudden explosive physics)
  max_force=130000
  max_torque=130000
  ; Maximum tire penetration (limits tire load forces)
  max_tire_penetration=0.1
  ; Maximum camber angle (Pacejka doesn't work well with high camber)
  ; Angle is in degrees.
  max_camber=15.0
  ; Enable camber calculations? (sideway car movement bugs)
  enable_camber=1
  ; Start with AI driver?
  start_ai=0
  ; Limiting velocities to avoid adding too much energy
  ; 350 m/s is around Mach 1 (1260 km/h)
  ; NO LONGER ENFORCED (Newton)
  max_linear_velocity=350.0
  ; Max rotational velocity (radians/sec), to keep from overly spinning
  ; NO LONGER ENFORCED (Newton)
  max_angular_velocity=10.0
  ; Apply conservation of momentum after collisions?
  conserve_momentum=0
  ; #samples in conversion of torque curve to lookup-table (lut)
  engine_lut_steps=100
  ; Implicity integrate suspension? (much more stable since v0.8.7)
  susp_implicit_integration=0
  ; 24-07-08: suspension live rate slope was overly simple; set the next variable to 0 (default=1 for backwards compatibility)
  simple_susp_live_rate_slope=0
  ; Dampen wheel velocity when its sign changes? (perhaps more stable with really hard dampers, default=0)
  damp_vertical_velocity_reversal=0
  ; Add jacking forces in implicit integration mode (susp_implicit_integration=1), default is 0 for backwards compatibility
  ; 1 works well (?) for the F1-v2, 0 for older cars
  implicit_add_jacking_forces=0
  ; Use Tustin tire? (experimental; different integration of wheel movement, currently buggy)
  tustin_tire=0
  ; Damper force correction: 0=don't (before v0.6.3, v0.8.7+), 1=halfway to zero velocity (v0.6.3-v0.8.4), 2=to desired damper velocity (v0.8.5/v0.8.6)
  damper_correct_method=0
  ; Flip tan/atan in slipangle calculations? Default is 0 (v0.8.22 behavior)
  flip_tan=0
  ; Move CG to match nullpoint? Needed to fix CG problems (set to 1). Default=1; 0 is for backward compatibility.
  move_cg=1
  limit_arb_forces=0
}
ai
{
  ; Thinking rate (ms per step)
  time_per_update=1
  ; Looking ahead; velocity*lookahead_factor is the #meters the AI
  ; looks ahead (targeting)
  lookahead_factor=0.02
  ; Minimal lookahead distance; too smooth out steering at low speed
  lookahead_offset=1
  ; Steering response; frequency (lower=slower response, high=fast steering)
  ; Higher values reduce driver induced oscillation it seems.
  steering_frequency=100
  ; Throttle/brake response
  throttle_frequency=2
  ; Line adjustment factor; the higher, the more the car is pulled towards
  ; the driving line
  line_adjust=0.0
  ; Line adjust minimal distance; race distance to be completed before
  ; line adjusting starts
  line_adjust_distance=1
  ; Distance between cars when you may not overtake. The cars will
  ; actually move a bit closer, to try and stay within this distance.
  ; So if 'no_overtake_distance'=15, expect smaller values in practice
  ; to be used. This is called the 'cushion' (see below).
  ; Default value is 15.0 (meters)
  no_overtake_distance=15.0
  ; When no-overtake is active, allow the AI to enter the 'no_overtake_distance'
  ; zone. The amount, a small value above 0 will allow this. Used to avoid
  ; leaving to no_overtake_distance and generate jittering brakes.
  ; Default value is 0.2
  no_overtake_cushion=0.2
  ; Focus on AI car when it appears? (testing AI avoid other cars)
  focus=0
  ; Load AI lines at all?
  load_ai_lines=1
  ; Drive alongside player car? (matches velocity to stay near)
  ; Only works with car0=player, car1=AI
  drive_alongside=0
  ; Adjust U for the race start? Defaults to 1. Set to 0
  ; if you simulate a situation where the AI is assumed to already be driving
  ; in a race.
  adjust_u_race_start=1
  ; Ignore other cars entirely?
  ignore_cars=0
  ; Velocity scale (global AI performance)
  scale_velocity=1.0
  ; Target U correction speed (default 1.0; lower is slower)
  target_u_correct=0.5
  ; Target smoothing to avoid jerky steering
  target_smd
  {
    mass=1
    k=140
    ; Keep damping close to optimal; sqrt(k)
    damping=10
    maxdist=0.5
  }
  ; Acceleration smoothing using PID controller
  pid_accelerate
  {
    ; Seem negated
    ; Agressive
    ; v0.8.33
    proportional=-0.3
    derivative=0.01
    integral=0
    min=-1
    max=1
  }
  pid_steering
  {
    proportional=100
    integral=0
  }
}
state
{
  ; Automatically load state at start? (simulates Ctrl-L)
  auto_load=0
}
dbg_controls
{
  ; Turn off control updates altogether? Useful to test a fixed deterministic situation.
  update=1
  ; Debugging the engine (also set controls.update to 0 to keep control values)
  ; Throttle 0..1
  throttle=0.2
  ; Brakes 0..1
  brakes=0.0
  ; Clutch 0..1
  clutch=0.0
  ; Initial steering position (-1..+1)
  steer=0.05
  ; Road noise velocity factor (smaller=less road noise at low velocity)
  ; Only deals with low velocity situations!
  road_noise_factor=0.1
}
timing
{
  ; Speed of simulation; this time (in milliseconds) gives the number
  ; of milliseconds for each integration step. Internally, the granularity
  ; of time is 1/1000th sec. So laptime accuracy upto 1/1000th sec
  ; is possible.
  ; However, this is quite a lot of computing, and some computers may not
  ; be able to catch up with this. In fact, REAL time may then move faster
  ; than the computer can keep up with (in which case FPS becomes 0!).
  ; So I suggest 5ms for example. This will make the simulation run at 200Hz.
  ; Keep it at least below 10; a simulation running at anything less
  ; than 100Hz becomes more and more instable.
  integration_time=1
  ; Fixed time between each frame? Default=0 (free) but with vsync=1 you may for example
  ; want to freeze this. I.e. for a 60Hz display use fixed_time_step=0.01666667 (1/60)
  fixed_time_step=0
  ; Draw each frame? For debugging, it is handy to see every integration step,
  ; instead of doing realtime stuff, which may go much to quickly
  draw_every_step=0
  ; Pause every step? Only kicks in after the first car is loaded
  pause_every_step=0
  ; Slowmotion inserts <slomo> milliseconds of delay at every drawn frame
  slomo=0
  ; Exit after x frames?
  ; Exit after x physics steps?
  max_steps=0
  ; Quit Racer after max_steps physics steps?
  exit_after_max_steps=1
  ; Realtime scaling; actually allows slowmotion or fastmotion driving
  ; Scales the realtime clock.
  realtime_scale=1.0
}
gfx
{
  ; Display triangles of the spline surface? (also use 'show splines' or 'hide splines' in the console)
  show_spline_tris=0
  ; Show car collision geometries?
  show_car_bbox=0
  ; Show movables collision geometries?
  show_movables_bbox=0
  ; Show live envmapping render results? -1=none, 0..5=side selection
  show_live_envmap=-1
  ; Show car points/lines, like nullpoint, CG, rollcenters, contact patch locations,
  ; suspension, spline interpolated location (hit point), AI etc.
  ; 'show carpoints' in the console
  show_car_points=0
  ; Show aerodynamics? ('show aero')
  show_aero=0
  ; Show AI lines (racing lines, lateral lines)
  show_ai_lines=0
  ; Show timelines? ('show timelines')
  show_timelines=0
  ; Show best driving line?
  show_bestline=0
  ; Show traffic lines?
  show_traffic_lines=0
  ; Show mesh of splines?
  show_meshspline=0
  bestline
  {
    ; Derive 'bestline' from which source: 0=AI (default), 1=ghostlap
    source=0
  }
}
collision
{
  ; Car-track CFM (constraint force mixing). Use a small value near 0 for default,
  ; and increase to make the car body softer
  cfm=0.0001
  ; Car-track ERP (error reduction parameter). Use a value close to 1 (0.9?) for
  ; default behavior, and reduce to decrease movements of the car when hitting
  ; an object (takes more integration steps to correct the car position)
  erp=0.6
  ; Friction coefficient for car touching track (or fences etc!)
  mu=0.5
  ; Body restitution; 0=bouncy, 30=clay, >40 bouncy again?
  restitution=15
  ; Restitution for network collisions (car-car)
  restitution_network=0.9
  ; Player car is never affected by collisions with AI?
  ai_collide_rock=0
  ; Do car-car collisions?
  car_car=1
  ; Report car-track collisions? (in console) (variable renamed on 8-4-09)
  ; For Newton, it reports all contact points generated
  report_car_track_collision=0
}
scripts
{
  ; automatically load scripts when loading track
  auto_load=1
  ; load rsx files ? skips rcx files with the same name in the folder
  load_rsx=1
}
log
{
  ; Logging telemetry groups (also use F3 to toggle logging while driving)
  enable=0
  ; Filename (in data/dump/) to log to (extension will be .log or .pds, depending on 'type' below)
  filename=log
  database
  {
    ; Alternative storage location (leave empty to store log files in data/dump)
    ; If defined, this will use the filename <cid>/<date>_<time>.<extension>, automatically creating
    ; customer folders
    dir=
  }
  ; #ms per logging entry
  period=100
  ; Allocated buffer in milliseconds (#samples allocated=buffer_time/period); default is 30 minutes (30*60*1000)
  buffer_time=1800000
  ; Logging type (0=ASCII file, 1=PI Toolbox PDS (.pds, commercially only), 2=Racer Telemetry Data (.rtd))
  type=2
  groups
  {
    ; Suspension lengths (for ASCII, also the ARB force)
    ; Required to generate ghost laps in Telemetry Analyzer! (suspLength<n>)
    suspension=1
    ; Slip angle per wheel
    slip_angle=0
    ; Slip ratio per wheel
    slip_ratio=0
    ; Tire forces (Fx/Fy/Fz); currently unsupported for PDS output (only ASCII)
    tire_forces=0
    ; Steering angle (per wheel) & force feedback
    steering=1
    ; Throttle/brake/clutch (clutch stored is actual controller input, no auto-clutch included)
    controls=1
    ; Orientation is unsupported for PDS output
    orientation=1
    ; XYZ and distance (in PDS, only distance is recorded)
    position=1
    ; Car velocity (3D in ASCII, 1D in PDS/RTD)
    velocity=1
    ; Angular velocity (not supported in PDS)
    angular_velocity=0
    ; AX/AY/AZ m*s^-2
    acceleration=1
    ; RPM, Gear, Engine torque
    engine=1
    ; AI (ai_line_delta)
    ai=0
    ; Lap info (sector and lap; only supported for RTD)
    lap=1
    ; Surface intersections (XYZ)
    surface=1
  }
  events
  {
    ; UDP output for single events (external tracking)
    host=
    port=7003
  }
}
camera
{
  ; Initial camera mode (0=car, 1=track, 2=helicopter, 3=director/disco)
  initial_mode=0
  ; Initial car camera (if initial_mode=0)
  initial_car_camera=0
  ; Focus settings - only one of the focus settings should be 1
  ; Focus on last network car that entered?
  focus_network_car=0
  ; Focus on front (pole) car?
  focus_front_car=0
  ; Focus on master in our group? For example, if we are 10.1.90.44 (spectator), then we try
  ; to track the car that was created on 10.1.90.41 (a master)
  focus_master_car=0
  ; Automatically switch track and director camera modes every now & then?
  auto_switch_director_track_cam=0
  ; Use the headtracking controller
  enable_head_tracking=1
}
stability
{
  ; Test going from menu into game and back again. Waits a couple of seconds, then
  ; runs the game, exists again etc.
  ; This is to find bugs which only appear every couple of hours.
  test_inout=0
  ; Number of seconds to stay racing
  time_to_race=5
  ; Number of seconds in menu
  time_in_menu=2
}
levels
{
  level0
  {
    name=Pro
    grip=1
    torque=1
    ; Motion tuningset (depends on platform)
    system_model_switch=1
    ; Controller acceleration output scaling
    acc_factor=1
    ; Controller force feedback scaling (only supported for motion)
    ff_factor=1
  }
  level1
  {
    name=Semi-pro
    grip=1.2
    torque=0.75
    ; Motion tuningset (depends on platform)
    system_model_switch=1
    ; Controller acceleration output scaling
    acc_factor=1
    ; Controller force feedback scaling (only supported for motion)
    ff_factor=1
  }
  level2
  {
    name=Beginner
    grip=1.3
    torque=0.6
    ; Motion tuningset (depends on platform)
    system_model_switch=1
    ; Controller acceleration output scaling
    acc_factor=0.75
    ; Controller force feedback scaling (only supported for motion)
    ff_factor=0.75
  }
}
pacenotes
{
  ; Location onscreen (center!) in virtual 800x600 screen
  x=400
  y=30
  ; Size
  wid=100
  hgt=100
}
dev
{
  ; Development options
  ; Open up a terminal window upon starting Racer? (can be opened later using the 'terminal' console command)
  terminal=0
  ; Run a program first before starting Racer? Normally empty.
  run_first=
  ; If strict mode is set to 1, any errors are treated as fatal when loading tracks/cars and Racer exists immediately
  ; Use this mode if you're developing cars or tracks to make sure they're clean (generate no QLOG warnings/errors)
  strict=0
  ; Leave message in QLOG on car.ini values that are taken from data/cars/default/car.ini instead of car's car.ini?
  ; Will generate a lot of noise, only for use while developing car.ini files.
  note_ini_fallback=0
  ; Report unused ini items for cars? Useful to hunt for typos.
  note_ini_unused=0
  ; Show QLOG at exit automatically, if it contains errors or warnings? Only works on Windows (runs Notepad).
  log_last=0
  ; Debug messages, sends UDP packets to host:port (for use with a UDP terminal, such as 'udpterm')
  udp_out=
  ; Check a lot for OpenGL errors? (useful sometimes to catch OpenGL errors early on) Normally 0 since it's expensive.
  opengl_checks=0
  ; Use explicit argument stack tracing? Slows down the program considerably, but may
  ; give more information when it crashes. Use primarily when you have found a reproducable
  ; crash procedure; only then set this to 1 and see if QLOG gives you some useful information
  argument_tracing=0
  ; Network wait to let a remote PC enter before the local one (multiplayer tests)
  ; In Racer upto v0.5.5, this leads to swapped driver names & cars
  wait_for_remote_client=0
  ; Fast start for BoundsChecker runs? (skips many driver inits for example)
  fast_start=0
  ; Add geometry triangles to AABB tree? (default: 1)
  add_geometry_to_aabb=1
  ; Optimize Newton collision trees (delete trackcollision.bin in the track's cache/ directory first to regenerate) - default is 1
  optimize_newton_tree=1
  ; Show memory reports in console?
  show_memory_usage=0
  ; Fake stats for sorting tests
  fake_laptime=0
  ; Hide audio for local car? (to listen to multiplayer cars)
  no_local_car_sound=0
  ; Force output of race results to statsclient even if the race is aborted?
  force_out_race_results=0
  ; Cache geode loading? (default:1); currently buggy when skinning cars
  cache_geodes=0
  internet_simulator
  {
    ; Enable delaying of packets sent out of the machine? (much better to use an extra machine with delayed portforwarding)
    enable=0
  }
  ; Flash screen every second? Used for network timesync tests to check timesyncing
  flash_network=0
  ; Use nVidia PerfSDK counters? (need instrumented driver; current drivers don't seem to need this explicitly anymore) - default=0
  nvidia_perf=0
  ; Location of nvPmApi.Core.dll, i.e. C:/packs/NVPerfKit/bin/win7_x86/NvPmApi.Core.dll
  ; Required to make nvdia_perf=1 work.
  nvidia_perf_path=C:/packs/NVPerfKit/bin/win7_x86/NvPmApi.Core.dll
  ; Fast fading? (quicker exit)
  fast_fade=0
  ; Minimum track length - used to correct longitudinal distances in network play (lap counter vs spline distance). Default is 500 (meters).
  min_track_length=500
  ; Perform collision handling at all?
  collisions=1
  ; Port offset for all network ports? (to get two of the same apps running on one PC)
  port_offset=0
  ; Percentage of packets to drop (ENet peers only)
  fake_packet_drops=0
  ; Initial surface multi-sampling count (beta feature, used by racer, for sister use sister.surface_samples)
  surface_samples=1
  ; Force loading of lidar data when present (normally skipped when not required)
  force_loading_lidar=0
  ; Fast Cg shaders (-DFAST); may skip expensive features to render faster
  fast_cg_shaders=0
}
video
{
}
silverlining
{
  enable=0
  ; Cloud presets: 0=fair, 1=partly_cloudy, 2=mostly_cloudy, 3=overcast
  cloud_preset=1
}
triton
{
  ; Triton SDK for water generation
  enable=0
  ; Use (live) environment map on water?
  use_cubemap=0
  test
  {
    beaufort=4.0
    sea_level=0.0
    wind_direction=0.1
    swell_wave_length=150.0
    ; If swell_wave_height>0, a swell effect is added
    swell_wave_height=0.0
    swell_direction=0.0
  }
}
apps
{
  ; App definition - supersedes the hardcoded Racer racing game with a more flexible alternative
  initial=
  ; Code directory; the default (if left empty) is <apps.initial>/code/games
  ; Can be useful if the game code is somewhere else (the source tree for example).
  code_directory=
  ; Keep Racer as the base app, and overlay Panthera on top? Default is 0 (game overrules everything)
  base_racer=0
}
