Modding Resources, tips and tricks!

Ole Marius Myrvold

JWB 96-13
Staff
Premium
Hi all! :)

As it is a new game, and a slightly different genre and build that most of the games on this site, there might be some newfound tricks to make modding faster, easier and/or better.
Personally I have more than enough to even try to understand how I might be able to mod the game, but I know that many of you guys are well underway with some cracking mods!
Anyway, sharing is caring, and making each other better is only positive in the long term, who knows what me might be able to achieve with this game! It is also easier to find for new modders, or old modders finding a new game if we are able to gather the brilliant research from you guys on one place :)

Keep up the magnificent work!

@thrashersfreak @Panamera4 @Colin O Callaghan @NemanjaSipka @TheFlamingRed @Mojojo999
 
Is there a way to work on the crashing? This is ridiculous. My driver stats don't matter. Mode and driving style don't matter. I'm tired of my drivers being the only one to crash, and doing it frequently.

Edit: I have also worked on changing the drivers in notepad++, but can't seem to get them to work. I have tried working on the tyre wear, driving styles, and engine modes. I haven't had enough time to really see if they had any effect though. I hope i adjusted the right file since there is the singleseaterdata and singleseaterdatadefault files.

I discovered that spacing matters with the driver changes. When adding personality traits: 6; 15; 165, instead of 6;15;165.

Edit 2: There is nothing like reading through code line by line to discover that half the data I changed meant nothing because the compiler doesn't even read either of the singleseaterdata databases. I could be wrong on my initial look through, but I do know what a call to a database looks like and I didn't see that one.

I stand corrected. The search and analyze in ILSpy are very helpful. Thanks for that Crashed.
 
Last edited:
Interesting note: Mechanics and Designers used to be scoutable. The AI still have code to do it!

Code:
    public void ScoutDrivers()
    {
        if ((global::Game.instance.time.now - this.mLastDriverScoutTime).Days > 7)
        {
            long num = (long)((float)this.mTeam.financeController.finance.currentBudget * this.mTeam.aiWeightings.mFinanceDrivers);
            int num2 = global::TeamAIController.minScoutDriverAge;
            int num3 = global::TeamAIController.maxScoutDriverAge;
            global::HQsBuilding_v1 building = this.mTeam.headquarters.GetBuilding(global::HQsBuildingInfo.Type.ScoutingFacility);
            int num4 = 0;
            if (building != null && building.isBuilt)
            {
                num4 = building.currentLevel;
            }
            List<global::Driver> list = new List<global::Driver>();
            List<global::Driver> entityList = global::Game.instance.driverManager.GetEntityList();
            for (int i = 0; i < entityList.Count; i++)
            {
                global::Driver driver = entityList[i];
                if (this.IsScoutable(driver) && (driver.GetDriverStats().scoutingLevelRequired == 0 || num4 > driver.GetDriverStats().scoutingLevelRequired))
                {
                    int age = driver.GetAge();
                    if (age >= num2 && age <= num3)
                    {
                        long num5 = 0L;
                        if (!driver.IsFreeAgent())
                        {
                            num5 = (long)driver.contract.GetContractTerminationCost();
                        }
                        if ((num5 == 0L || num > num5) && !this.mScoutingManager.IsDriverCurrentlyScouted(driver) && !this.mScoutingManager.IsDriverInScoutQueue(driver))
                        {
                            list.Add(driver);
                        }
                    }
                }
            }
            if (list.Count > 1)
            {
                global::Person.SortByRaceCost<global::Driver>(list, true);
            }
            for (int j = 0; j < list.Count; j++)
            {
                global::Driver inDriverToScout = list[j];
                this.mScoutingManager.AddScoutingAssignment(inDriverToScout);
            }
            this.mLastDriverScoutTime = global::Game.instance.time.now.AddDays((double)global::RandomUtility.GetRandom(-5, 5));
        }
        this.mScoutingManager.UpdatedCompletedScoutsList();
    }

    public void ScoutEngineers()
    {
        if ((global::Game.instance.time.now - this.mLastEngineerScoutTime).Days > 7)
        {
            long num = (long)((float)this.mTeam.financeController.finance.currentBudget * this.mTeam.aiWeightings.mFinanceDrivers);
            int num2 = global::TeamAIController.minScoutEngineerAge;
            int num3 = global::TeamAIController.maxScoutEngineerAge;
            List<global::Engineer> list = new List<global::Engineer>();
            List<global::Engineer> entityList = global::Game.instance.engineerManager.GetEntityList();
            for (int i = 0; i < entityList.Count; i++)
            {
                global::Engineer engineer = entityList[i];
                if (this.IsScoutable(engineer))
                {
                    int age = engineer.GetAge();
                    if (age >= num2 && age <= num3)
                    {
                        long num4 = 0L;
                        if (!engineer.IsFreeAgent())
                        {
                            num4 = (long)engineer.contract.GetContractTerminationCost();
                        }
                        if (num > num4 && !this.mScoutingManager.IsEngineerCurrentlyScouted(engineer) && !this.mScoutingManager.IsEngineerInScoutQueue(engineer))
                        {
                            list.Add(engineer);
                        }
                    }
                }
            }
            if (list.Count > 1)
            {
                global::Person.SortByRaceCost<global::Engineer>(list, true);
            }
            for (int j = 0; j < list.Count; j++)
            {
                global::Engineer inEngineerToScout = list[j];
                this.mScoutingManager.AddScoutingAssignment(inEngineerToScout);
            }
            this.mLastEngineerScoutTime = global::Game.instance.time.now.AddDays((double)global::RandomUtility.GetRandom(-5, 5));
        }
        this.mScoutingManager.UpdatedCompletedScoutsList();
    }

    public void ScoutMechanics()
    {
        if ((global::Game.instance.time.now - this.mLastMechanicScoutTime).Days > 7)
        {
            long num = (long)((float)this.mTeam.financeController.finance.currentBudget * this.mTeam.aiWeightings.mFinanceDrivers);
            int num2 = global::TeamAIController.minScoutMechanicAge;
            int num3 = global::TeamAIController.maxScoutMechanicAge;
            List<global::Mechanic> list = new List<global::Mechanic>();
            List<global::Mechanic> entityList = global::Game.instance.mechanicManager.GetEntityList();
            for (int i = 0; i < entityList.Count; i++)
            {
                global::Mechanic mechanic = entityList[i];
                if (this.IsScoutable(mechanic))
                {
                    int age = mechanic.GetAge();
                    if (age >= num2 && age <= num3)
                    {
                        long num4 = 0L;
                        if (!mechanic.IsFreeAgent())
                        {
                            num4 = (long)mechanic.contract.GetContractTerminationCost();
                        }
                        if (num > num4 && !this.mScoutingManager.IsMechanicCurrentlyScouted(mechanic) && !this.mScoutingManager.IsMechanicInScoutQueue(mechanic))
                        {
                            list.Add(mechanic);
                        }
                    }
                }
            }
            if (list.Count > 1)
            {
                global::Person.SortByRaceCost<global::Mechanic>(list, true);
            }
            for (int j = 0; j < list.Count; j++)
            {
                global::Mechanic inMechanicToScout = list[j];
                this.mScoutingManager.AddScoutingAssignment(inMechanicToScout);
            }
            this.mLastMechanicScoutTime = global::Game.instance.time.now.AddDays((double)global::RandomUtility.GetRandom(-5, 5));
        }
        this.mScoutingManager.UpdatedCompletedScoutsList();
    }

Would love to see if we can make it so that the player also has to scout mechanics and engineers. I wonder if there is enough code to reintroduce it.
 
Last edited:
I have a question for you guys.
I'm not new to modding (I've made several texture mods for gta 4 and 5 but never really uploaded them) but this game breaks my head somethimes. Anyway, I want to change the colors teams are using, the lenght of sponsor contracts, put real teams and contracts in the game (okay, I want to use the f1 2016 mod as a base but change here and there some things for the 2017 season e.g. the drivers to their new team etc), put in the European and the Asian class a team of my own by changing an existing team, maybe even change one engine supplier. I know where I can find the drivers and team file, but my concern is the colors which we can use to edit the livery. I don't know where that file is. I also get some kind of error when I edit the team names in game. It let's me play the game but I don't get any information. Is there a way I can change the history of a team and which file do I need? I also want to change the circuits you race on in the beginning of the career, because in the European championchip you have a lot of double tracks (e.g. 2 times Germany). Oh, and before I forget to mention, where can I find the file for editing the names of the chairman of the different teams or how is that file called?
Anyway, thank you for helping me.
 
Be honest, does this look like the new Force India VJM10? do you have any tips for making it better?
It's my first livery so I take all the tips I get :)
Force india v1.png
 
Currently looking for ways to alter the way contracts work.

-Drastically shorten the time drivers and engineers need to "think", making them reject or accept a contract much quicker.
-Removing the six month (or so) cooldown after getting rejected by a team as player manager, after applying to a new team, making it possible to apply again straight after.
-Making it possible to sign drivers in advance, and not only at the end of a season.

This will essentially make it possible to "fix" the mistakes the AI makes when signing drivers and engineers, and will allow the player to set up certain challenges for himself. Until we get a Football Manager style ingame editor, I believe this is the best way to correct the AI.
 
Is there any mods that change base stats on reliability on season starts? I want it to be increased, since AI can't deal with bad reliability and that makes first races of the season so easy. So when im a top team, then I pretty much decide the championship in the first 5 races...
 
Could somebody please extract all the team and sponsor logos from the game and send them to me please. I cannot do it myself as I don't have Unity, can't download it now and don't know how to use it/where to find them.
 
One Question:
How can I set the team power value? (=Team Stars)
I can't find a value that change the power of a team. I use a Real Driver/Teams Mod but Williams is to strong. I want change that (wih Database Editor). Which values should I change for that?

Edit:
Ok I found it. I only must change the values of the "Defualt Parts".
 
Last edited:
Hey guys, first of all, thanks for your unbelivable job to explane lots of things to lame old person like me and greetings from 2021 :D
Using dnSpy i managed to change a lot in game that im playing w/ f21 manager mod applied. Just in case any of you still here, i need your assistance to help me edit tyre endurance and tyre perfomance, if you dont mind.
so far i found only this (for each tyre compound):

// Token: 0x02000426 RID: 1062
public class SuperSoftTyreSet : TyreSet
{
// Token: 0x06001DE5 RID: 7653 RVA: 0x000122F8 File Offset: 0x000104F8
public override Color GetColor()
{
return GameUtility.ColorFromInts(234, 85, 72);
}

// Token: 0x06001DE6 RID: 7654 RVA: 0x00002EA1 File Offset: 0x000010A1
public override TyreSet.Compound GetCompound()
{
return TyreSet.Compound.SuperSoft;
}

// Token: 0x06001DE7 RID: 7655 RVA: 0x00002EA1 File Offset: 0x000010A1
public override TyreSet.Tread GetTread()
{
return TyreSet.Tread.Slick;
}

// Token: 0x06001DE8 RID: 7656 RVA: 0x00012308 File Offset: 0x00010508
public override string GetName()
{
return Localisation.LocaliseID("PSG_10000472", null);
}

// Token: 0x06001DE9 RID: 7657 RVA: 0x00012315 File Offset: 0x00010515
public override string GetShortName()
{
return "SS";
}

// Token: 0x06001DEA RID: 7658 RVA: 0x0001231C File Offset: 0x0001051C
public override float GetDurabilityForUI()
{
return 0.2f; <--- WICH IS , IM NOT SURE BUT PROBABLY ONLY FOR UI AND NOT CNAHGING INGAME TYRE DURABILITY CALCULATIONS
}
}
and this
public float GetPerformanceForUI(TyreSet.Tread inDesiredTread)
{
switch (inDesiredTread)
{
case TyreSet.Tread.Slick:
switch (this.GetCompound())
{
case TyreSet.Compound.SuperSoft:
return 2.1f;
case TyreSet.Compound.Soft:
return 1.2f;
case TyreSet.Compound.Medium:
return 0.5f;
case TyreSet.Compound.Hard:
return 0f;
case TyreSet.Compound.Intermediate:
return 0f;
case TyreSet.Compound.Wet:
return 0f;
case TyreSet.Compound.UltraSoft:
return 3.3f;
}
break;
wich is supposed to change only visual part od tyre compound perfomance, but not that is calculated in game.

Can u guys help me please?
Thank you in advance.
 

Latest News

Are you buying car setups?

  • Yes

  • No


Results are only viewable after voting.
Back
Top