iRtvo Theme Reference
Theme Reference
Table of Contents
- General
- Translation
- Overlays
- Images
- Tickers
- Buttons
- Triggers
- Videos
- Sounds
- External Data
- cars.ini
- tracks.ini
This document explains all the options that are available for creating custom themes. These settings are stored in settings.ini
Items marked in bold are mandatory.
General
General settings
Name | Description | Example value | Note |
name | Name of the theme | Example theme | Has to be the same as the folder name |
author | Author of the theme | Jari Y | |
width | Theme width in pixels | 1280 | |
height | Theme height in pixels | 720 | |
overlays | Comma separated list of text overlays | driver,sessionstate,sidepanel | See ThemeReference#Overlays |
images | Comma separated list of images | logo,sidepanel | See ThemeReference#Images |
tickers | Comma separated list of tickers | ticker | See ThemeReference#Tickers |
buttons | Comma separated list of buttons | sidepanel,ticker | See ThemeReference#Buttons |
videos | Comma separated list of videos | replay | See ThemeReference#Videos |
sounds | Comma separated list of sounds | bleep | See ThemeReference#Sounds |
switchsign | Sign used with intervals (-1.456 or +2 laps) | true | Default false |
dataFullName | column-number of data.csv where {fullname} replacement is found | 2 | column-index in data.csv starts with -1, which is the iR User-ID and the (not used) default value |
dataShortName | column-number of data.csv where {shortname} replacement is found | 3 | column-index in data.csv starts with -1, which is the iR User-ID and the (not used) default value |
dataInitials | column-number of data.csv where {initials} replacement is found | 4 | column-index in data.csv starts with -1, which is the iR User-ID and the (not used) default value |
triggergroups | comma separated list of triggergroups | pits,flags,lights | See ThemeReference#Triggers |
pointscol | column-number of data.csv where the points can be found (for league racing) | 5 | column-index in data.csv starts with -1, which is the iR User-ID and the (not used) default value |
pointschema | comma separated points scheme for getting points as they run - starting from 1. | 10,8,6,5,4,3,2,1 | |
minscoringdistance | minimum distance (in percent - integer only!) to be run, before points are scored | 50 | |
chasecol | column-number of data.csv where the driver is defined to be in tha chase or not | 6 | if that column is empty, "0" or "false", the driver is not in the chase, else the driver is a chasedriver |
driverswapthreshold | time for a driverswap to remain in the driverswap dataset | 10.0 | value in seconds; defaults to 10 seconds (more suitable for trigger-purposes) |
Translation
Program uses a few natural language words in its text fields. These words can be changed in Translation-section.
Name | Example value | Note |
lap | ||
laps | ||
minutes | ||
of | ||
remaining | to go | |
race | ||
qualify | ||
practice | ||
out | retired | Text shown in user's {interval} when he has quitted |
gridding | ||
pacelap | ||
finallap | ||
finishing | ||
invalid | -.-- | Text shown in {curlap} and {prevlap} when last lap was invalid (incident or connection issue) |
replay | REPLAY | Text shown in {lapcounter} when the sim is in replay |
Clear | Used with {sky} | |
Partly Cloudy | Used with {sky} | |
Mostly Cloudy | Used with {sky} | |
Overcast | Used with {sky} |
Overlays
Each of the overlays defined in General-section must have corresponding Overlay-overlayname-section. For example if overlays=driver,sidepanel then there must be [Overlay-driver] and [Overlay-sidepanel].
Name | Description | Example value | Note |
width | Width of the overlay | 540 | |
height | Heigth of the overlay | 80 | |
left | Margin from the left border of the window | 64 | |
top | Margin from the top border of the window | 582 | |
zIndex | Stacking order of all items in the theme | 100 | Item with largest zIndex will be shown top most and vice versa |
dataset | The kind of information shown on the text items | followed | Valid values are followed, standing, sessionstate, points, radio, trigger, pit, driverswap, chasedrivers |
dataorder | Information used for sorting drivers | fastestlap | Valid values are position, liveposition, fastestlap, previouslap, classposition, classlaptime, points, oldpoints, trackposition. Position is the default. |
labels | Comma sparated list of text labels shown inside of the overlay | num,name,diff | |
fixed | If set item is shown always | true | |
maxpages | Limits the number of pages | 1 | |
itemsize | Item size of stanging list | 45 | Applies only to overlays that have dataset as standing |
direction | List items to given direction | down | Applies only to overlays that have dataset as standing, valid values are down, up, left and right. |
number | Number of items to draw | 10 | Applies only to overlays that have dataset as standing |
offset | Skip a number of drivers from the top | 10 | Applies only to overlays that have dataset as standing |
skip | Skip a number of drivers from each page | 10 | Applies only to overlays that have dataset as standing |
delay | Time in seconds before automatically changing page | 5 | Applies only to overlays that have dataset as standing |
class | Filters results to be single class and enable multiclass specific items {class} | GT | See ThemeReference#cars.ini |
Overlay labels
Each of the labels defined in overlay's labels must be defined in its own section. For example labels=name,diff in [Overlay-driver] must then have [Overlay-driver-name] and [Overlay-driver-diff].
Tip: you can do alternating texts with external data - if you'd like to use {external:3) instead of {carnum} but want to fall back on {carnum} if a driver is not in your data.csv, tryp {external:3|carnum}. Important: this only works with external data as the first value and built in property as the second value, so make sure you don't mix the order!
Name | Description | Example value | Note |
fontsize | Font size for the text | 34 | |
width | Object's width in pixels | 400 | |
height | Object's height in pixels | 30 | |
text | Text formatting | {position_ord} | See ThemeReference#text |
font | Font used to draw the text | "Arial Black" | Use the font's full name as seen on Windows Font Viewer (double click the fontfile) |
fontcolor | Font color for the text | black | See all possible colors |
fontbold | Font weight for the text | false | true or false |
fontitalic | Font style for the text | true or false | |
align | Text alignment inside its borders | left | left, right or center |
left | Top-left corner's distance from parent object's left border | 0 | |
top | Top-left corner's distance from parent object's top border | 0 | |
padding-left | Padding from left edge of the label | 2 | |
padding-top | Padding from left edge of the label | 2 | |
padding-right | Padding from left edge of the label | 2 | |
padding-bottom | Padding from left edge of the label | 2 | |
offset | Add offset to shown driver. | -1 | 2 |
rounding | How many decimals are shown in time based labels. Only values between 0-3 work. | 3 | |
uppercase | If true the label text is capitilized | true | |
bgcolor | Background color of the label | #33000000 | See documentation. |
background | Filename of the background image | "labelbg.png" | |
dynamic | Use dynamic filename | true | |
defaultbackground | Filename of the default background image | "labelbg.png" | Used when dynamic background isn't found. |
1 Fonts need to be either in the theme folder or installed in Windows' fonts folder.
2 For example dataset=followed and the driver followed is on 3rd place. The using offset=-1 would show data of the driver on 2nd place and similarly offset=3 would show data of 5th place driver.
Text
Text property select what information is shown on the overlay. Different datasets have different data available.
Dataset: followed or standing or points or pit or radio or trigger
Value | Description | Example output | Note |
{fullname} | Full name | Greger Huttu | |
{shortname} | Shorter name | G Huttu | |
{initials} | Initials | GHU | |
{driverid} | iRacing customer id | 12345 | |
{license} | License | WC4.99 | |
{club} | Club | Finland | |
{irating} | iRating | 3312 | |
{car} | Car | Radical SR8 | See ThemeReference#cars.ini |
{class} | Class | Prototype | See ThemeReference#cars.ini |
{carnum} | Car number | 22 | |
{fastlap} | Fastest lap of the session | 1:23.456 | |
{prevlap} | Lap time of previous finished lap | 1:23.456 | |
{sector1} | Current lap sector 1 time | 1:23.456 | |
{sector2} | Current lap sector 2 time | 1:23.456 | |
{sector2} | Current lap sector 3 time | 1:23.456 | |
{sector1_speed_kph} | Current lap sector 1 top speed in kph | 123.45 | |
{sector2_speed_kph} | Current lap sector 2 top speed in kph | 123.45 | |
{sector2_speed_kph} | Current lap sector 3 top speed in kph | 123.45 | |
{sector1_speed_mph} | Current lap sector 1 top speed in mph | 123.45 | |
{sector2_speed_mph} | Current lap sector 2 top speed in mph | 123.45 | |
{sector2_speed_mph} | Current lap sector 3 top speed in mph | 123.45 | |
{curlap} | Lap time of the current unfinished lap | 1:23.456 | |
{lapnum} | Current lap number | 10 | |
{speedfast_mph} | Average speed of the fastest lap in miles per hour | 123.45 | |
{speedfast_kph} | Average speed of the fastest lap in kilometers per hour | 123.45 | |
{speedprev_mph} | Average speed of the previous lap in miles per hour | 123.45 | |
{speedprev_kph} | Average speed of the previous lap in kilometers per hour | 123.45 | |
{livespeed_mph} | Current speed in miles per hour | 123 | |
{livespeed_kph} | Current speed in kilometers per hour | 123 | |
{position} | Current position at S/F line | 10 | |
{position_ord} | Current position at S/F line in english ordinal | 3rd | |
{liveposition} | Current real time position | 10 | |
{liveposition_ord} | Current real time position in english ordinal | 3rd | |
{positiongain} | Positions gained/lost since the start | +3 | Works only in race sessions |
{startposition} | Positions at start | 3 | Works only in race sessions |
{startposition_ord} | Positions at start in english ordinal | 3rd | Works only in race sessions |
{highestposition} | Highest position during the race | 3 | Works only in race sessions |
{highestposition_ord} | Highest position during the race in english ordinal | 3rd | Works only in race sessions |
{lowestposition} | Lowest position during the race | 29 | Works only in race sessions |
{lowestposition_ord} | Lowest position during the race in english ordinal | 29th | Works only in race sessions |
{gap} | Difference to leader. In practice/qualify difference of fastest laps, in race time/lap difference | +1.234 | Sign can be switched in [General] |
{livegap} | Difference to leader, updated 60 times a second | +1.234 | Sign can be switched in [General] |
{interval} | Time difference to the driver in front | 1.234 | |
{liveinterval} | Time difference to the driver in front, updated 60 times a second | 1.234 | |
{lapsled} | Number of laps in lead | 22 | Works only in race sessions |
{pitstops} | Number of pit stops made | 1 | Works only in race sessions |
{pitstoptime} | Last pit stop length or live timer when pitting | 23.56 | Works only in race sessions |
{classposition} | Current position in class | 1 | Multiclass variant |
{classposition_ord} | Current position (ordinal) in class | 1st | Multiclass variant |
{classliveposition} | Current live position in class | 1 | Multiclass variant |
{classliveposition_ord} | Current live position (ordinal) in class | 1st | Multiclass variant |
{classpositiongain} | Positions (in class) gained/lost since the start | -1 | Multiclass variant |
{classstartposition} | Class position at start | 3 | Multiclass variant |
{classstartposition_ord} | Class position at start in english ordinal | 3rd | Multiclass variant |
{classhighestposition} | Highest class position during the race | 3 | Multiclass variant |
{classhighestposition_ord} | Highest class position during the race in english ordinal | 3rd | Multiclass variant |
{classlowestposition} | Lowest class position during the race | 29 | Multiclass variant |
{classlowestposition_ord} | Lowest class position during the race in english ordinal | 29th | Multiclass variant |
{classgap} | Difference to class leader | +1.234 | Multiclass variant |
{classlivegap} | Difference to class leader (realtime) | +1.234 | Multiclass variant |
{classinterval} | Time difference to same class driver in front | +1.234 | Multiclass variant |
{classliveinterval} | Time difference to same class driver in front (real time). | +1.234 | Multiclass variant |
{points} | Total points | 12 | Including points from current finishing position, use with dataorder=points |
{points_pos} | Championship position | 12 | Including points from current finishing position, use with dataorder=points |
{points_pos_ord} | Championship position ordinal | 12th | Including points from current finishing position, use with dataorder=points |
{external:#} | Shows data from CSV-file, replace # with column number. | N/A | See ThemeReference#External_Data |
{teamid} | Shows iR teamid (in team events, else -1 or 0) | 12345 | |
{teamname} | Shows teamname as retrieved from team.csv | Team Redline | See ThemeReference#teams.csv |
{rpm} | Shows RPM, smoothed to steps of 50 | 6450 | |
{gear} | Shows the gear a car is in - numeric value | 3 | -1 is reverse, 0 is neutral |
{steer} | Shows steering angle in degrees | -13 | negative values mean the steering wheel is turned to the right |
{oldpoints} | points from the data.csv, "old" points, before the race | 13 | |
{oldpoints_pos} | championship position as they were before the race | 2 | ex-aequo is not captured correctly |
{oldpoints_pos_ord} | championship position ordinal as they were before the race | 2nd | ex-aequo is not captured correctly |
{poins_pos_gain} | gained positions in points (from old points to current points | -3 | lost 3 positions |
Dataset: sessionstate
Value | Description | Example output | Note |
{lapstotal} | Total laps in session | 32 | |
{lapscompleted} | Laps completed by the leader | 20 | |
{lapsremaining} | Laps remaining in session | 12 | |
{currentlap} | Lap the leader is currently on | 20 | This is {lapscompleted} + 1 |
{timetotal} | Total elapsed time in session | 30:00 | |
{timepassed} | Total elapsed time in session | 12:33 | |
{timeremaining} | Time remaining in session | 17:27 | |
{lapcounter} | Lap counter including transition to "x laps to go" and "final lap" | 12 / 23 | Works just like in the version 1.0 |
{trackname} | Name of the track | "Infineon long" | See ThemeReference#tracks.ini |
{tracklen_mi} | Length of the track in miles | 1.345 | |
{tracklen_km} | Length of the track in kilometers | 1.345 | |
{cautions} | Number of cautions | 5 | Works only in race sessions with full course cautions |
{cautionlaps} | Number of laps under caution | 25 | Works only in race sessions with full course cautions |
{leadchanges} | Number of lead changes | 5 | |
{sessiontype} | Session type | race | See ThemeReference#Translation |
{turns} | Number of turns in the track | 12 | |
{city} | City where the track is located at | Toronto | |
{country} | Country where track is located at | Canada | |
{altitude_m} | Altitude from sea level in meters | 107 | |
{altitude_ft} | Altitude from sea level in feet | 321 | |
{sky} | Sky condition | Clear | See ThemeReference#Translation |
{tracktemp_c} | Track temperature in celcius | 32 | |
{tracktemp_f} | Track temperature in fahrenheit | 107 | |
{airtemp_c} | Air temperature in celcius | 25 | |
{airtemp_f} | Air temperature in fahrenheit | 107 | |
{humidity} | Relative humidity in percent | 88 | |
{fog} | Relative foggyness in percent | 12 | |
{airpressure_hg} | Air pressure in mmHg | 760 | |
{airpressure_hpa} | Air pressure hecto pascals | 1013 | |
{windspeed_ms} | Windspeed in meters per second | 8 | |
{windspeed_kt} | Windspeed in knots | 10 | |
{windspeed_kph} | Windspeed in kilometers per hour | 5 | |
{winddir_deg} | Wind direction in degrees | 33 | Zero degrees facing north, 90 degrees east, etc. |
{fl_time} | fastest lap time | 1:23.456 | |
{fl_fullname} | full name of fastest driver | Greger Huttu | |
{fl_shortname} | short name of fastest driver | G Huttu | |
{fl_initials} | initials of fastest driver | GH | |
{fl_teamname} | team name of fastest driver | Team Redline | |
{fl_lapnum} | number of fastest lap | 7 | |
{fl_carnum} | car number of fastest lap | 89 |
Images
Each of the images defined in General-section must have corresponding Image-imagename-section. For example if images=driver,sidepanel then there must be [Image-driver] and [Image-sidepanel].
Value | Description | Example output | Note |
filename | Filename of the image in theme folder | lights-off.png | Available image formats are BMP, JPEG, PNG, TIFF, Windows Media Photo, GIF and ICON. |
zIndex | Stacking order of all items in the theme | 10 | Item with largest zIndex will be shown top most and vice versa |
width | Width of the image | 480 | Default is theme width |
height | Height of the image | 480 | Default is theme height |
left | Margin from the left border of the window | 64 | Default is 0 |
top | Margin from the top border of the window | 582 | Default is 0 |
dynamic | Dynamic filename | true | When true filename will be parsed for driver text properties, see ThemeReference#Dataset:_followed_or_standing |
default | When dynamic filename doesn't exist, use this filename | default.png | See dynamic property |
fixed | If set item is shown always | true | |
animate | set true for animated gifs | true | defaults to false |
Tickers
Each of the tickers defined in General-section must have corresponding Ticker-tickername-section. For example if tickers=standings then there must be [Ticker-standings].
Tickers have the same properties as overlays. See ThemeReference#Overlays. There are few additional fields:
Value | Description | Example output | Note |
fillvertical | Sets the direction which labels are stacked. When true it creates multi row ticker. false is the normal behavior. | false | Valid values are true or false |
fixed | If set item is shown always | true | |
speed | Speed of scrolling in 1/60th pixels per second | 6 | Default is 3 |
header | A label to be shown as the first item on the ticker | header | value "header" references to Ticker-name-header |
footer | A label to be shown as the last item on the ticker | footer | similarly as in header |
Buttons
Each of the buttons defined in General-section must have corresponding Button-buttonname-section. For example if buttons=sidepanel,ticker then there must be [Button-sidepanel] and [Button-ticker].
Buttons show and hide overlays, images and tickers. Each button can do any combination of these.
Value | Description | Example output | Note |
text | Sets the text shown in the button. | Side panel | |
row | To which row the button is added | 2 | Starts from 0, which is the default |
show | Comma separated list of items that will be visible after button press | Overlay-sidepanel,Image-sidepanel,Trigger-flags | Valid values are any of the overlays, images or tickers defined in General or any valid trigger. 1 |
hide | Comma separated list of items that will be hidden after button press | Ticker-standings | See show |
toggle | Comma separated list of items that will be toggled (visible/hidden) after button press | Oveylay-driver | See show |
delay | Delay between automatic page changes | 5 | Applies only to buttons which have at least one overlay that has standings-dataset |
loop | Loops back to first page after the last one | true | |
hidden | When true doesn't add button to main window | true | See hotkey |
hotkey | Global hotkey | Shift-H | Comprised of modifier and key, possible modifiers are None, Alt, Ctrl, NoRepeat, Shift, Win and possible keys are listed at http://msdn.microsoft.com/en-us/library/system.windows.input.key.aspx |
replay | Replays given seconds | 10 | use 0 to return live |
playspeed | Changes playspeed | -2 | negative values are slow motion, positive fast forward and 1 is normal speed |
1 Special note: When using overlay with dataset standing use always show to switch to the next page. For example 30 drivers will have 3 pages worth of items if number is 10.
Triggers
Triggers are much like buttons, but they are triggered automically based on their name. Valid names are:
Name | Description |
flagGreen | Green flag |
flagYellow | Yellow flag |
flagWhite | White flag |
flagCheckered | Checkered flag |
lightsOff | Triggered few seconds after the start |
lightsReady | Lights off |
lightsSet | Lights on (red) |
lightsGo | Green light |
replay | Triggered when replay is activated |
live | Triggered when coming back to live from replay |
radioOn | Triggered when radio transmission on received channel starts |
radioOff | radio transmission on received channel ends |
fastestlap | triggered by new fastest lap of session |
offTrack | triggered by an off track event |
notInWorld | car no longer present? |
pitIn | someone pitted |
pitOut | someone left the pits |
pitOccupied | (in race only) fires as soon as a driver hits the pits |
pitEmpty | (in race only) fires when the last driver leaves the pits |
init | fires at startup of theme - only once! |
driverswap | fires when a team swaps drivers - dataset driverswap lists all cars with driverswaps within the last 10 seconds! |
Settings for triggers are:
Value | Description | Example output | Note |
toggle | Comma separated list of items that will be toggled (visible/hidden) at trigger event | Overlay-trigger,Image-trigger | Suggestion: use pushbutton instead |
show | comma separated list of items that will be shown at trigger event | Overlay-trigger,Image-trigger | |
hide | comma separated list of items that will be hidden at trigger event | Overlay-trigger,Image-trigger | |
pushbutton | name of the button to be "pressed" by the trigger | trigger | The button section in this case would be [Button-trigger] |
delayreset | if the delay in the button defined in pushbutton shall be reset if still active at next trigger event | true | only in combination with pushbutton |
repushbutton | if the trigger can push the button again while it's still marked as active/pressed | false | only in combination with pushbutton |
group | triggergroup the trigger belongs to | flags | see triggergroups in ThemeReference#General |
Videos
Each of the videos defined in General-section must have corresponding Video-videoname-section. For example if videos=replay then there must be [Video-replay].
Value | Description | Example output | Note |
filename | Filename of the video in theme folder | replay.wmv | Windows Media Video is a safe format to start with. |
zIndex | Stacking order of all items in the theme | 10 | Item with largest zIndex will be shown top most and vice versa |
loop | When set the video is looped around and stopped only when "hidden" | true |
Sounds
Each of the sounds defined in General-section must have corresponding Sound-videoname-section. For example if sounds=bleep then there must be [Sound-bleep].
Value | Description | Example output | Note |
filename | Filename of the video in theme folder | beep.wav | WAVs should always work |
loop | When set the sound is looped around and stopped only when "hidden" | true |
External Data
Reminder for ALL data files (data.csv, teams.csv, tracks.ini, cars.ini): please encode these in UTF-8, because otherwise you WILL get into
trouble with special characters not be found in a 7-bit ASCII set!
Tip: You can use the data sent by iRacing (trackname, carnames, classnames, teamnames) by not using tracks.ini, cars.ini, teams.csv - the values iRacing provides will act as a fallback, too, if the data cannot be found in the files.
External data is stored in a CSV-file called data.csv which is located at the theme folder. This file is semicolon separated table where first column is the driver's customer id.
Example file - data.csv
35698;Finland;Oulu;Team Trellet
12345;USA;Boston;Team USA
Now {external:0} would become Finland or USA and {external:2} Team Trellet or Team USA respectively.
If the CSV file doesn't have row for the selected driver the external fields will be ignored.
Tip: You can use almost any spreadsheet program to create csv-files, including Google Docs.
Tip: You can overload fullname, shortname, initials with values from data.csv. See ThemeReference#General.
Example file - teams.csv
10815;Crazy Motorsports
14711;Team Redline
7;Team Redline
In teams.csv you can put your team-names either with the TeamID (to be found in iRacing) or with the car number. Since most leagues seem to
run fixed car numbers per driver / team, that's probably the easier way. But of course you can also use the team name as sent by iRacing - then
you don't have to put anything into teams.csv
cars.ini
cars.ini holds the names of cars and classes. File can be in same folder as the irtvo.exe or on theme folder.
Format is carname="Car name". carname is the same used in setup folders, but spaces are replaced with backslashes "\". For example:
[Cars]
26="Chevrolet Corvette C6R"
39="HPD ARX-01c"
40="Ford GT"
[Multiclass]
26="GT"
40="GT"
39="P2"
Cars with same class name (like GT above) are grouped to same class.
tracks.ini
tracks.ini holds the names of tracks. File can be in same folder as the irtvo.exe or on theme folder.
Format is track="Track name". track is the same used in camera.ini in Documents\iRacing. For example:
[Tracks]
26="Daytona International Speedway Road"