For a long time, I’ve wanted to tamper with the competitor companies in Automation. Now that we’ve recently got the sankey chart in Campaign mode, we actually have some visibility of the competition’s company names and individual trims for the first time ever, so I figured now was as good a time as ever to start cracking.
I’ve been able to do a few small things so far:
-I can add cars to an existing company!!! This means you can, very awkwardly, compete against player cars! They don’t keep their appearance in thumbnails though.
-Change the name of an existing company
-Remove cars from an existing company’s lineup
-Learn a little more about how the competition works
-Probably cause a couple game crashes
-I have NOT ruined any Sandbox.db or campaign save files, so that’s good!
I’m still stumbling around in the dark though. In short, I’m creating this thread to share my progress now and in the future, and look for hints from anybody else who wants to take a crack at this. I’m a complete SQL noob so I’m learning as I go.
My big goal right now is to add a company from a campaign save file (or a sandbox company) into the list of competitors. However, I haven’t been able to get it to work. I’ve seemingly added my new company to all of the relevant tables, but it never appears in the list of companies in game. Just while making this thread, I managed to get player-made cars to appear though!
In this picture I replaced the cars from one of the Fruinia FamilySmall companies with cars from my campaign save file. This means we can make a campaign where you can directly compete with another person’s car roster.
My other findings so far:
Cars and companies are composed of a LOT of different, interacting tables. Every entity in the game, such as companies, models and trims, has UID (Unique ID). This is called a UID in its own table or something like a CUID (Company UID) or TUID (Trim UID) if it’s referenced in another table.
These tables all reference each other and have foreign key constraints (you can’t have a blank register which is supposed to reference a UID in another table, you can’t delete a UID which is referenced somewhere else).
There’s also a LOT of tables in Competitors.db which are modeled after a player save file. Many of them are blank, and a few of them seem to reference a placeholder player type company called Stormwell Motorworks, which is the only company to have factories, but it has no cars and doesn’t appear in game. For example, the tables for dealership levels and marketing exist but are blank. Competitor cars also have spaces for data about things like paint and fixtures, which are blank or filled with default values.
Just cars consist of the following (non-empty) tables, in approximate order of dependency:
Model
Family
Variant
Trim
TrimResults
CarFacelifts
TrimSlots
EngineResults
EngineCurves (IDK if this one is important, but the competitor cars have data here)
CompetitorTrimCostInfo
CompetitorVariantCostInfo
The last two DO NOT exist in player save files, and show an ET, PU, and M$ cost for trims and variants. In my case I filled them with some estimated data, I don’t actually know how to get correct data from the other tables.
Companies consist of the following tables
Companies
CompanySize (not in player save file, gives numbers for size at various years)
CompanyProfile (not in player save file, designates a type such as “Family Small”)
CompanyAwareness (for each market in each country at various points in time, this is a huge table)
CompanyPrestigeAndReputation (also over time)
CarProjects (associates a model with a company and a date, called Internal Days but it looks like a year)
CompanyTrims (associates each trim’s UID with a CUID, again not in player save file so I had to construct this)
Incidentally, I believe this list is exhaustive, because I kept deleting these tables until I stopped getting foreign key constraint errors when I tried to delete a UID from Companies. So I don’t think I missed any.
That leaves me stumped as to what I might be doing wrong. (Edit while writing this: I missed CarFacelifts table lmao). Well, I still don’t know why my company won’t appear, but I can make cars appear in an existing company.
We do have a few findings from looking at the Competitors.db. First, the way people talked implied that all companies chose from a list of all cars, but instead it seems like every trim is associated with a company. I don’t know if each company produces all of their cars or if it’s randomized during each campaign in some way, but if a model belonged to FamilySmall 3 Fruinia in one playthrough, that model will always belong to FamilySmall 3 Fruinia.
We can also see some of the ways that competitor companies behave differently than player companies, such as the fact that they have a ‘size’ number in lieu of both factories and dealerships but they DO have a full map of awareness just like the players do. They also slowly grow over the course of the game on a fixed track, it doesn’t seem like the economy, competition, or anything else would alter their size.
There’s also a couple other tables I haven’t messed with yet but they look like they should do something. Country unlock years are governed by a table, and there’s a table called DemographicModifiers which seems to determine the country demographic tastes, so I could make everybody in Dalluha love small cars instead of big ones or something. There’s also a lot of stuff that is NOT in here, like emissions and safety dates, or demographic sizes.
My Next Goals
The #1 thing I want to do is make a script which lets me dump a player save file into the competition with a few clicks. This will be much easier if I manage to add companies instead of merely overwriting them as well. I also need to learn SQL better so I can handle some of the tables that need new data created instead of just INSERT commands, I’ve been manually pasting them in the SQLite GUI.
Hit me up here or on the official discord if you can help me figure out the next steps, or want help getting as far as I have on your end. I might want to collect some save files to try playing against too.