In my opinion, one of the coolest aspects of rFactor 1 is its ecosystem of plugins. Want to add a fancy dynamic track surface system and more detailed weather, including wet track surface? Use RFE. Want a legit H-pattern gearbox simulation? Use Grinding Tranny. Want a information-rich HUD? Use GID. Want a dynamic, user-configurable HUD? Use DynHUD. Want to be able to read data from the sim into external programs like SimHub? Use the shared memory plugin. And so on.
In my research on isiMotor2, I had uncovered very little in the way of modder knowledge sharing or official documentation about the plugin system. So I started specifically researching about plugins, and I'll share what I've found.
The first is a PDF document from Image Space Incorporated in 2006 describing the plugin architecture. A link is here: https://www.rfactor.net/downloads/rFactorInternalsPlugin.pdf
There was an example plugin created by ISI to give users a small idea of what plugins could do, and to potentially help the process of creating one. It can be downloaded in the pack here: https://www.racedepartment.com/downloads/isi-rf1-modding-tools-pack.59255/ The text of the PDF mentioned above says the following about the example plugin:
Copy the plugin to the \rFactor\Plugins directory. A compiled version can be found in the \ExamplePlugin\VC7\Release directory. Run rF Config.exe and make sure you choose a resolution that is less than your current desktop resolution and ensure the check box for windowed mode is checked. Then start rFactor and enter a race. Once the track has loaded click on the drive button. You will see the console this example plugin uses come alive. There will also be a text file in the root directory of the simulation that has captured telemetry data. If you see this item then you have successfully installed the example plugin.
What plugins for rF1 have been created where we could see the source code and study it to learn from?
rFactorSharedMemoryMap: A plugin for rFactor 1-based sims to export the standard telemetry and scoring data structs to a shared memory mapped file handle. This allows external programs to access the sim data without affecting frame times in the simulator.
pySRD9c: A Python library application for the Renovatio SRD-9c display. A sample application providing real-time telemetry data for RaceRoom Racing Experience and rFactor 1/Stock Car Extreme/Automobilista/Formula Truck/Copa Petrobras de Marcas is available in pyDash.py. It makes use of the psutil module (https://github.com/giampaolo/psutil) to detect which sim is running. It demonstrates custom mapping of RPM LEDs for use as push-to-pass/DRS indicators as well as warnings that blink the status LEDs during a critical state. It also features live lap timing, lap split time, field position, and lap progession during a race. The dash configuration is controlled via the pyDash.settings.json file (created on start-up if not found, re-read if modified while running).
VCR File Parser for rFactor 1: With this software, you can read and write the rFactor 1 replay files. Because those files are not well documented, only a bunch of events can get readed and manipulated. The rest will get handled as unknown event.
I also found a fascinating post from Marcel Offermans (a well-known sim racing developer who worked on rF1, AMS1, and rF2) about the plugin ecosystem in response to a user here on RD asking about whether an rF1 plugin could be created to add an extra gear:
There is no way to "add gears" using a plugin.
Ehm, I do not want to be a wise guy but I worked on rF1, rF2 and AMS1. None of those plugin interfaces supports what you describe. Yes, you can try and hack the exe to try and add this, but that's not what you were asking and in general much harder to pull off well (as such a thing would instantly also attract people using it to cheat).
Marcel's post makes me wonder what documentation exists (and if any of it was ever public) for the "plugin interface" for rFactor 1. His seemingly clear understanding of what a plugin would be capable of doing (and what it could not do) suggests to me that it must exist somewhere out there.
In my research on isiMotor2, I had uncovered very little in the way of modder knowledge sharing or official documentation about the plugin system. So I started specifically researching about plugins, and I'll share what I've found.
The first is a PDF document from Image Space Incorporated in 2006 describing the plugin architecture. A link is here: https://www.rfactor.net/downloads/rFactorInternalsPlugin.pdf
There was an example plugin created by ISI to give users a small idea of what plugins could do, and to potentially help the process of creating one. It can be downloaded in the pack here: https://www.racedepartment.com/downloads/isi-rf1-modding-tools-pack.59255/ The text of the PDF mentioned above says the following about the example plugin:
Copy the plugin to the \rFactor\Plugins directory. A compiled version can be found in the \ExamplePlugin\VC7\Release directory. Run rF Config.exe and make sure you choose a resolution that is less than your current desktop resolution and ensure the check box for windowed mode is checked. Then start rFactor and enter a race. Once the track has loaded click on the drive button. You will see the console this example plugin uses come alive. There will also be a text file in the root directory of the simulation that has captured telemetry data. If you see this item then you have successfully installed the example plugin.
What plugins for rF1 have been created where we could see the source code and study it to learn from?
rFactorSharedMemoryMap: A plugin for rFactor 1-based sims to export the standard telemetry and scoring data structs to a shared memory mapped file handle. This allows external programs to access the sim data without affecting frame times in the simulator.
GitHub - dallongo/rFactorSharedMemoryMap: Memory mapped telemetry export for rFactor 1
Memory mapped telemetry export for rFactor 1. Contribute to dallongo/rFactorSharedMemoryMap development by creating an account on GitHub.
github.com
pySRD9c: A Python library application for the Renovatio SRD-9c display. A sample application providing real-time telemetry data for RaceRoom Racing Experience and rFactor 1/Stock Car Extreme/Automobilista/Formula Truck/Copa Petrobras de Marcas is available in pyDash.py. It makes use of the psutil module (https://github.com/giampaolo/psutil) to detect which sim is running. It demonstrates custom mapping of RPM LEDs for use as push-to-pass/DRS indicators as well as warnings that blink the status LEDs during a critical state. It also features live lap timing, lap split time, field position, and lap progession during a race. The dash configuration is controlled via the pyDash.settings.json file (created on start-up if not found, re-read if modified while running).
GitHub - dallongo/pySRD9c: Python interface for sim racing dashboard display
Python interface for sim racing dashboard display. Contribute to dallongo/pySRD9c development by creating an account on GitHub.
github.com
VCR File Parser for rFactor 1: With this software, you can read and write the rFactor 1 replay files. Because those files are not well documented, only a bunch of events can get readed and manipulated. The rest will get handled as unknown event.
GitHub - plucked/vcrparser_rf1: This is a software to read and write the rFactor 1 replay files
This is a software to read and write the rFactor 1 replay files - plucked/vcrparser_rf1
github.com
I also found a fascinating post from Marcel Offermans (a well-known sim racing developer who worked on rF1, AMS1, and rF2) about the plugin ecosystem in response to a user here on RD asking about whether an rF1 plugin could be created to add an extra gear:
There is no way to "add gears" using a plugin.
Ehm, I do not want to be a wise guy but I worked on rF1, rF2 and AMS1. None of those plugin interfaces supports what you describe. Yes, you can try and hack the exe to try and add this, but that's not what you were asking and in general much harder to pull off well (as such a thing would instantly also attract people using it to cheat).
Marcel's post makes me wonder what documentation exists (and if any of it was ever public) for the "plugin interface" for rFactor 1. His seemingly clear understanding of what a plugin would be capable of doing (and what it could not do) suggests to me that it must exist somewhere out there.
Last edited: