This app is an extension to https://www.racedepartment.com/downloads/substanding.4998/ by MegadetH_44 (who kindly gave me permission to publish my changes).
Install
To install this app it is recommended to use Content Manager by just dragging the zip over the Content Manager Window. You can also copy the "apps" and "content" directories into your AC folder. You need to additionally activate the app in Content Manager as usual, and then activate the individual widgets in game so that they are displayed.
Requirements
SubStanding
This app offers multiple standings and position indicators in addition to a "relative" (alternative to Kunos "Realtime").
Deltas can be viewed as as time in seconds or distance in metric/imperial.
Widgets
All available widgets, not all possible values shown.
What makes this app different
The gap and interval calculations are pretty much the biggest differences to other apps. There are multiple calculation methods used, to calculate the times as accurately as possible.
This approach allows the app to be way more accurate than the official Kunos apps or the original SubStanding.
Settings
A lot of settings can be configured.
It is not necessary to show all windows, each window is a separate in game widget. Also all standings widgets have separate settings, so elements can be shown/hidden individually.
Full support to manage settings in content manager. All settings are additionally explained, when hovering the name.
Standings
The "standings" widgets display the best lap times during practice and qualification.
During races, they will display the distance (metric or imperial) or time between the driver in first (of that standing) and the others as well as currently used tyres and if people are in pit and their pit stop count during the race.
Summary of displayed elements:
Relative Standing
The relative is inspired by the Kunos "Realtime" app or the Relative in iRacing or RaceLabApp.
In contrast to the standing widgets, the relative does not show the drivers in order of their overall position in the race but in their exact order on the track. So lapped cars might be in the mix (see example).
Additionally all interval values are relative to you, rather than the race/class leader. You can toggle a lap difference as well displayed in brackets after the time/distance.
There are colors used to indicate the position of the car relative to you (colors are configurable, see Colors/Distance colors configurations):
Click to Spectate
Especially for spectators but also otherwise it might be helpful to easily switch focus to another driver. Per default you can click on the position in any standing to jump into the perspective of that driver. It's also configurable to have a click anywhere on the row do that, or disable it completely.
Classes
There are two different ways of using classes:
Option 2: You can freely configure the classes in the file SubStanding_classes/classes.ini. Here is an example of what it could look like (some values are already prefilled):
[GT2 Class]
car1 = ferrari_458_gt2
car2 = bmw_m3_gt2
car3 = p4-5_2011
[GT3 Class]
car1 = mercedes_sls_gt3
car2 = mclaren_mp412c_gt3
car3 = bmw_z4_gt3
Mini Skins (replacing badges)
Mini Skins enabled to replace car badges.
To be able to get the correct mini skin displayed in game, you have to generate the images first.
Use the preview-preset contained in the downloaded archive. Install it by using Drag-n-drop over Content Manager window. Then check "Content Manager" - "Content" - "Tools" - "Update Previews" and generate previews for the just added preset.
The file for the mini skin can be named one of the following:
preview_mini.png, preview_mini.jpg, preview.png, preview.jpg
In the settings activate "Show badges" and "use Mini Skin" for the given standing.
Highlight Drivers
You can highlight certain drivers by adding their names to a list of "teammates" (cyan) and "rivals" (magenta). The list can be found in SubStanding_drivers/drivers.ini. Also drivers can be completely hidden from the lists by adding them to the "ignored" list.
Values for this example:
[TEAMMATES]
driver1 = Scott Pedder
[RIVALS]
driver1 = Marc Bousquet
driver2 = Philippe Jamoul
[IGNORED]
driver1 = Ignored Name
Positions
The "position" widgets are much smaller and give your position like the picture below. It can also be configured with the in-game configuration widget.
Disclaimer
I made the changes mainly for myself, but thought that others might want to use it as well, that's why I offer it here. I do not plan to actively maintain it and add features on requests. If they feel reasonable and I'm interestend in them, I might add them though.
Changelog (since v1.1)
2.1 +
See https://www.racedepartment.com/downloads/substanding-extended.51973/updates
2.0
Known Issues
If you want to thank me with money or just need to get rid of it, feel free to send me a beer or something via PayPal
Without CSP a lot of the functionality wouldn't have been possible, so you might want to support Ilja for the work on CSP as well!
Install
To install this app it is recommended to use Content Manager by just dragging the zip over the Content Manager Window. You can also copy the "apps" and "content" directories into your AC folder. You need to additionally activate the app in Content Manager as usual, and then activate the individual widgets in game so that they are displayed.
Requirements
- CSP (Custom Shaders Patch): >= v0.1.73
- the app cannot be loaded with a lower version, or CSP being deactivated in the settings
SubStanding
This app offers multiple standings and position indicators in addition to a "relative" (alternative to Kunos "Realtime").
Deltas can be viewed as as time in seconds or distance in metric/imperial.
Widgets
- Relative ("Realtime" alternative)
- Global Standing (all drivers)
- Global Position
- Class Standing (drivers from the same class, manually defined beforehand)
- Class Position
- Same Car Standing
- Same Car Position
- (Configuration Widget)
All available widgets, not all possible values shown.
What makes this app different
The gap and interval calculations are pretty much the biggest differences to other apps. There are multiple calculation methods used, to calculate the times as accurately as possible.
- (Only in Relative) Live estimation based on the driver's "micro" sectors in their best lap
- really accurate and live updating, even when you're not moving, e.g. in the pits / after a crash
- used only in the relative widget, as this is really based on your times and will result in gaps specific to your pace
- the distance and exact part of the map having to be travelled is used to calculate the gap based on how long it took you on your fastest lap
- Real interval times
- uses the time passed since the leading driver passed the "micro" sector of the following driver (actual time measurement)
- will not update if the driver behind is not moving (as no new sectors are passed)
- different sectors might be compared between different drivers
- e.g. #1 and #2 could e.g. use sector 10 as both have already passed 10, but for #1 and #5 the latest available sector is sector 8 (because #5 has not yet reached sector 9). So intervals between single drivers do not have to add up to the actual total gap displayed
- Speed and distance estimation
- this is used as a fallback whenever not enough sectors are available to correctly calculate the times mentioned above
- highly fluctuating in corners, so better than nothing and also what the original apps do, but not good
This approach allows the app to be way more accurate than the official Kunos apps or the original SubStanding.
Settings
A lot of settings can be configured.
It is not necessary to show all windows, each window is a separate in game widget. Also all standings widgets have separate settings, so elements can be shown/hidden individually.
Full support to manage settings in content manager. All settings are additionally explained, when hovering the name.
Standings
The "standings" widgets display the best lap times during practice and qualification.
During races, they will display the distance (metric or imperial) or time between the driver in first (of that standing) and the others as well as currently used tyres and if people are in pit and their pit stop count during the race.
Summary of displayed elements:
- Position
- Class Indicator
- Car Badge / Livery / Mini Skin (or combinations)
- Nation Flag
- Name
- Tyre
- Pit Stop Count
- Interval (to driver in front)
- Gap (to first or selected car)
- Best Lap
- Last Lap
- Latest Sector times (3 sectors in this case, dynamic based on the track)
Relative Standing
The relative is inspired by the Kunos "Realtime" app or the Relative in iRacing or RaceLabApp.
In contrast to the standing widgets, the relative does not show the drivers in order of their overall position in the race but in their exact order on the track. So lapped cars might be in the mix (see example).
Additionally all interval values are relative to you, rather than the race/class leader. You can toggle a lap difference as well displayed in brackets after the time/distance.
There are colors used to indicate the position of the car relative to you (colors are configurable, see Colors/Distance colors configurations):
- Cyan: yourself (or the currently viewed car)
- Orange: drivers in front
- Green: drivers behind
- Yellow: drivers in front that lapped you
- Blue: drivers behind that you have lapped
Click to Spectate
Especially for spectators but also otherwise it might be helpful to easily switch focus to another driver. Per default you can click on the position in any standing to jump into the perspective of that driver. It's also configurable to have a click anywhere on the row do that, or disable it completely.
Classes
There are two different ways of using classes:
- use tag based dynamic classes
- enabled by default
- check "Use class tags"
- allows specific class colors (optional)
- manually configure classes in the classes.ini
- used if "Use class tags" is disabled
- does not allow specific class colors
Option 2: You can freely configure the classes in the file SubStanding_classes/classes.ini. Here is an example of what it could look like (some values are already prefilled):
[GT2 Class]
car1 = ferrari_458_gt2
car2 = bmw_m3_gt2
car3 = p4-5_2011
[GT3 Class]
car1 = mercedes_sls_gt3
car2 = mclaren_mp412c_gt3
car3 = bmw_z4_gt3
Mini Skins (replacing badges)
Mini Skins enabled to replace car badges.
To be able to get the correct mini skin displayed in game, you have to generate the images first.
Use the preview-preset contained in the downloaded archive. Install it by using Drag-n-drop over Content Manager window. Then check "Content Manager" - "Content" - "Tools" - "Update Previews" and generate previews for the just added preset.
The file for the mini skin can be named one of the following:
preview_mini.png, preview_mini.jpg, preview.png, preview.jpg
In the settings activate "Show badges" and "use Mini Skin" for the given standing.
Highlight Drivers
You can highlight certain drivers by adding their names to a list of "teammates" (cyan) and "rivals" (magenta). The list can be found in SubStanding_drivers/drivers.ini. Also drivers can be completely hidden from the lists by adding them to the "ignored" list.
Values for this example:
[TEAMMATES]
driver1 = Scott Pedder
[RIVALS]
driver1 = Marc Bousquet
driver2 = Philippe Jamoul
[IGNORED]
driver1 = Ignored Name
Positions
The "position" widgets are much smaller and give your position like the picture below. It can also be configured with the in-game configuration widget.
Disclaimer
I made the changes mainly for myself, but thought that others might want to use it as well, that's why I offer it here. I do not plan to actively maintain it and add features on requests. If they feel reasonable and I'm interestend in them, I might add them though.
Changelog (since v1.1)
2.1 +
See https://www.racedepartment.com/downloads/substanding-extended.51973/updates
2.0
Major
- Added relative app (shows relative in all modes)
- Changed time colors (orange in front, yellow in front lapped, green behind, blue behind lapped)
- Added internal mini sector times (every 50m)
- Base all time calculations on mini sectors (use estimations only if mini sectors are missing, e.g. in first round)
- Estimate time difference in relative based on distance and these mini sectors, for accurate non-fluctuating gaps
- Add last lap time (can be disabled) to non-relative standings
- Added top split visualization for all non-relative standings (freely configurable how many players are displayed)
- standings now always display time interval to leader rather then to the current driver
- added lower alpha texts for lapped cars
- allow colorDistance 0 for always full colorized
- colorDistance only applies in relative
- add bottom anchor functionality (if the number of drivers changes the bottom of the window will stay in the same position, useful for anchoring to bottom of the screen)
- fixed the first lap distance jumping issue completely, including session resets
- minor performance improvements (better string formatting, removal of unnecessary code)
- removed +- signs for distances/times (as it added no additional info)
- Refactor row label rendering into StandingsRow class
- Performance: this app requires quite some CPU. A big part of that is rendering so many elements, the other part is to get and calculate the information of all drivers, to sort them correctly and display them in the different widgets. I already spent some time trying to optimize the code as much as possible, and this is where it's currently at. It could most likely be even better, but I think from here on, I would mostly kill the maintainable code for a few minor improvements.
- In some cases (e.g on race starts, ports to pit) the mini sector times are not accurate and thus gaps can be invalid. There are some fallbacks implemented, so that distance/speed estimation is used in those cases and that this does not happen often at all. These issues usually heal themselves, if the drivers continue driving.
- For estimations of deltas between drivers, the best indicator is the best lap time of the connected user. If you're spectating others and have not driven a valid lap yourself, these times might be more inaccurate, as it will fall back to interval times (that are delayed a short while) or distance/speed estimation.
- I've edited the classes.ini / drivers.ini but now it's not working anymore.
- It's likely that there is a small error in your changes. Check the C:\Users\<user>\Documents\Assetto Corsa\logs\py_log.txt content for messages containing "SubStanding Error". E.g. "SubStanding Error reading classes.ini". The message directly behind that could help you identify the error and fix it yourself. Otherwise, see #2.
- I've encountered a problem / the app crashes. How do I fix this?
- I can try to help if you send me as much information as possible, preferably in the "Discussion" thread or via DM.
- Answer the following questions:
- Do I have CSP activated? (if not, do so, the App does not work without it)
- What exactly do I have to do after a clean install of the app to encounter the problem? (Change some settings in game? Open a specific map? Use a specific car? Run in a specific mode? Offline/Online?)
- Try to create the error again and afterwards extract the content of C:\Users\<user>\Documents\Assetto Corsa\logs\py_log.txt. Directly after you've encountered the problem again. The content of this file is replaced with every start, so do not start the game again before getting the content of the file.
Send me this content via DM in additions to the answers from above. This is usually the most valuable information to find the problem.
If you want to thank me with money or just need to get rid of it, feel free to send me a beer or something via PayPal
Without CSP a lot of the functionality wouldn't have been possible, so you might want to support Ilja for the work on CSP as well!
I did a lot to improve it in version 2.x, but given it's an old python app, it's not really possible to improve it any further. The spikes might be higher as long as all vehicles are standing still (after a session change/before starting a race) as there are additional variable resets, but within a race it's really close to the absolute minimum a python app can achieve.
Feel free to rate it as you did, but I don't think that rating is anywhere close to being fair. (But I see your recent activity is all about spreading some bad ratings)