SubStanding (Extended)

SubStanding (Extended) 2.14

Login or Register an account to download this content
Donate
Buy me a coffee via Paypal

Please support this modder with a small donation.

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
  • 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)
widget_overview.png

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.
  1. (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
  2. 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
  3. 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
To make this possible mini (or rather micro) sector times of all cars in the course of the last lap will be stored internally. These sectors are not arbitrarily placed like the usual sectors but are exactly 50m long (except for the last sector completing the lap). This does not require a lot of resources, not even on huge maps.
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.

1669071307131.png
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.

standing_items.png

Summary of displayed elements:
  1. Position
  2. Class Indicator
  3. Car Badge / Livery / Mini Skin (or combinations)
  4. Nation Flag
  5. Name
  6. Tyre
  7. Pit Stop Count
  8. Interval (to driver in front)
  9. Gap (to first or selected car)
  10. Best Lap
  11. Last Lap
  12. Latest Sector times (3 sectors in this case, dynamic based on the track)
It's possible to always show the top X drivers (e.g. top 3 as in the screenshot). This can be a helpful reference to see who is in the lead, whether they are fighting or if the leaders did already pit. These drivers will be displayed in addition to the usually displayed drivers (see screenshot) and will only be displayed if relevant. So the size of the widget might change based on the position in the race.

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
When color distance is set to a value > 0 the colors will fade to white the further other drivers are away.

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:
  1. use tag based dynamic classes
    • enabled by default
    • check "Use class tags"
    • allows specific class colors (optional)
  2. manually configure classes in the classes.ini
    • used if "Use class tags" is disabled
    • does not allow specific class colors
Option 1 (recommended): if enabled, you can define tags to be used to identify a class. See the bundled documentation/sub_standing_class_config.pdf for an in depth explanation. This approach is compatible with Track Map Display (Extended) class coloring.

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.png

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.

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.

rivals.png


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.
bv0Hotz.jpg


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)
Minor
  • 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
Known Issues
  • 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.
F.A.Q
  1. 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.
  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.
Support
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!

Latest updates

  1. V2.14

    add sector times (can be deactivated as for most elements) add distance and time color...
  2. V2.13

    implement additional Name modes (3 character abbreviation, short versions with dots) implement...
  3. V2.12

    improve position flickering passing the start/finish line (mostly happening online) not...

Latest reviews

Must have application, but I wish the "Ignored" drivers would also be counted towards results. I want to remove the lower class drivers from the list in an endurance race, but it may happen that this lower class driver is going to place higher and it would be good to know the TRUE position in the race.
A
AW939
Thanks for the review.
I'm not sure whether you've set up the classes in Subdtanding. If so, you could use the class standing instead of the global standing to only see your class, but with the correct positions.

Ignored drivers is meant to be used for non-drivers, like casters mainly. I'm not sure if a second option would be worth it if the class view is the only use case.
Looks great, but cant get it to work with CSP 0.1.79 and also not with older versions. Shows up in Apps in Content Manager but cant enable in game in any way
A
AW939
Thanks for the review. If you have problems with the app, please follow the FAQ and use the discussion section, so I can actually help. Leaving a bad review is really not the way to ask for assistance. I will check later but I don't think the app is incompatible with CSP 0.1.79
great Mod thanks.
Can you add Driver points standings over a career mode thanks again.
A
AW939
Thanks for your review! I've checked the documentation again and sadly don't see any way to get the points directly or at least know whether you are currently in a career event at all or not (and of course neither, which it is). So I could not even parse the related files to get the points. I don't think I could get this to work.
This is the best app for standings
The Greatest leaderboard app
top
Great app, frequently updated.
Excellent Mod! A must have.
The best of the best, I hope to keep improving and adding something more (not much more xD ), thank you very much!

Lo mejor de lo mejor, espero siga mejorando y agregando alguna cosa más (no mucho más xD ), muchas gracias!
still top, even better with the new update. There is just a tiny bug that appeared with the latest update:
If you disable the "show title" option, the title gets moved down behind the app. view screenshot. not the biggest concern, but maybe good to know

https://prnt.sc/34gWwqLSWVt1
A
AW939
Thanks for the review and Info. It was already patched by now, see the latest update (just did not bump the version again, so still 2.10). So if you download the latest archive it should correctly hide again
This is what this game needed so badly. I already used your previous version, but this is next level stuff. 10/10 - highly recommend. Thanks for your awesome work!
Fantastic tool's update. Great that you've done this.

If you can, please add "jr" (junior) to lastnames exception. I'm using short form of names and I would like to have ex. "P Fulin Jr" (not "P Jr.").
A
AW939
Thanks for you review.
I'm thinking about a more generic approach that might work for other naming schemes as well. Because otherwise you'd still have something like "Keep Jr as Last Name", "Keep Jr as Addition" "Remove Jr" as options I guess.

The most generic one would be a custom alias. You can enter a list of names and their alias. E.g. "Peter Fulin Jr:P Fulin Jr" (or whatever the name is). So "<original fullname>:<display name>" Then you'd have to do that for everyone with that naming scheme though. But otherwise I feat that e.g. people from countries with 2 last names will have problems too, or people that race with team names or similar.

What do you think about that?
Otherwise maybe something as a "Name exception list" where you could enter "Jr" and than have an additional checkbox for "Remove name exceptions" (Yes/No) to either get "P Fulin" (yes) or "P Fulin Jr" (no). But that will not work for a lot of different cases I'd guess.
version 2.8 has completed the option I was missing, great APP
The work you've done on this and TrackMap in such a small time is utterly remarkable. Doing a service to everyone who races in AC.

Thank you for your hard work
Love this! Is it possible to have livery.png replace the badge icons? Would be great for series racing.
A
AW939
There is the mini skin option if you mean that? But you have to generate the images first using content manager. It's explained in the overview. The livery png would be an option though as well. Will think about it
Greatest leaderboard now in the game... (maybe it would be possible to have green or purple colour for personal best and session best times)
A
AW939
Will be in 2.6!
the original was already good, now this is just straight overkill! thanks so much for picking up development of this app (and others) and adding features I didn't even know I wanted.
One of the best apps out there, thank you very much for the updates.
Really great refresh of this app. Thank you!
Zuper !
Top