Upgrades modding problem

Altek

hi, i have a problem with the upgrades in rfactor, in particular in the replacing of the 3d model. see in the screenshot

94616416.png


46878819.png


please help me :)
thanks in advance.
 
Hi! Same problem here, but with a windscreen. I've set incremental to 0, but no luck. Besides, it only happens in the showroom, not ingame.

Any guess?
 
Hi! Same problem here, but with a windscreen. I've set incremental to 0, but no luck. Besides, it only happens in the showroom, not ingame.

Any guess?

I also setting incremental=0 I did not get results :-\
 
Can you paste what you have in the spinner gen file and the upgrades ini file in relation to this item?

The fact that it works in game and not the showroom is a really simple thing, I can't remember off hand now because learning everything else has fried my brain, but I came across this a while back and compared the hammer files to mine. Saw the issue and got it working straight away.
 
Can you paste what you have in the spinner gen file and the upgrades ini file in relation to this item?

The fact that it works in game and not the showroom is a really simple thing, I can't remember off hand now because learning everything else has fried my brain, but I came across this a while back and compared the hammer files to mine. Saw the issue and got it working straight away.

Spinner
Code:
//----------------------------------------

SearchPath=<VEHDIR>





MASFile=cmaps.mas
MASFile=ExigeGT3\teams\TIRES.mas
MASFile=ExigeGT3\teams\TEAM.MAS

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           


ReflectPlane=(0.0, -1.0, 0.0, 0.0)

//----------------------------------------

Instance=SLOT<ID>
{
  Moveable=True
  MeshFile=exige_spinner.GMT CollTarget=False HATTarget=False LODIn=(0.0) LODOut=(1000.0) Reflect=True
  MeshFile=EXIGE_SHAD_spin.gmt CollTarget=False HATTarget=False ShadowObject=(Dynamic, Solid, 1024, 1024) LODIn=(0.0) LODOut=(200.0) Reflect=True
  MeshFile=BODY.GMT CollTarget=False HATTarget=False LODIn=(0.0) LODOut=(100.0) Reflect=True

        
  Actor=VEHICLE
  

 


<STARTUPGRADES>

 

/////////////////////////////////////////////////TIRES////////////////////////////////////////////////////////
Instance=LFTIRE<UPNUMBER>
  {
    Moveable=True
   
     MeshFile=TIRE1_LF.GMT CollTarget=False HATTarget=False ShadowCaster=(True, Solid, 256, 256) LODIn=(0.00) LODOut=(300.0) ShadowReceiver=True Reflect=True
     MeshFile=<wheel_lf> CollTarget=False HATTarget=False LODIn=(0.00) LODOut=(15.0) ShadowCaster=(Dynamic, Solid, 128, 128) Reflect=True
     MeshFile=DISC_lf.gmt CollTarget=False HATTarget=False LODIn=(0.00) LODOut=(300.0) Reflect=True
  
 }

  Instance=LFSpindle
  {
    Moveable=True
    MeshFile=CALIPER_lf.gmt CollTarget=False HATTarget=False LODIn=(0.00) LODOut=(300.0) ShadowReceiver=True Reflect=True
  }

  
Instance=RFTIRE<UPNUMBER>
  {
    Moveable=True
   
     MeshFile=TIRE1_RF.GMT CollTarget=False HATTarget=False ShadowCaster=(True, Solid, 256, 256) LODIn=(0.00) LODOut=(300.0) ShadowReceiver=True Reflect=True
     MeshFile=<wheel_rf> CollTarget=False HATTarget=False LODIn=(0.00) LODOut=(15.0) ShadowCaster=(Dynamic, Solid, 128, 128) Reflect=True
     MeshFile=DISC_rf.gmt CollTarget=False HATTarget=False LODIn=(0.00) LODOut=(300.0) Reflect=True
  }

  Instance=RFSpindle
  {
    Moveable=True
    MeshFile=CALIPER_rf.gmt CollTarget=False HATTarget=False LODIn=(0.00) LODOut=(300.0) ShadowReceiver=True Reflect=True
  }
  
  
Instance=LRTIRE<UPNUMBER>
  {
  
    Moveable=True
   
     MeshFile=TIRE1_LR.GMT CollTarget=False HATTarget=False ShadowCaster=(True, Solid, 256, 256) LODIn=(0.00) LODOut=(300.0) ShadowReceiver=True Reflect=True
     MeshFile=<wheel_lr> CollTarget=False HATTarget=False LODIn=(0.00) LODOut=(15.0) ShadowCaster=(Dynamic, Solid, 128, 128) Reflect=True
     MeshFile=DISC_lr.gmt CollTarget=False HATTarget=False LODIn=(0.00) LODOut=(300.0) Reflect=True
  }

  Instance=LRSpindle
  {
    Moveable=True
    MeshFile=CALIPER_lr.gmt CollTarget=False HATTarget=False LODIn=(0.00) LODOut=(300.0) ShadowReceiver=True Reflect=True
  }


  Instance=RRTIRE<UPNUMBER>
  {
  
    Moveable=True
   
     MeshFile=TIRE1_RR.GMT CollTarget=False HATTarget=False ShadowCaster=(True, Solid, 256, 256) LODIn=(0.00) LODOut=(300.0) ShadowReceiver=True Reflect=True
     MeshFile=<wheel_rr> CollTarget=False HATTarget=False LODIn=(0.00) LODOut=(15.0) ShadowCaster=(Dynamic, Solid, 128, 128) Reflect=True
     MeshFile=DISC_Rr.gmt CollTarget=False HATTarget=False LODIn=(0.00) LODOut=(300.0) Reflect=True
  }

  Instance=RRSpindle
  {
   Moveable=True
    MeshFile=CALIPER_rr.gmt CollTarget=False HATTarget=False LODIn=(0.00) LODOut=(300.0) ShadowReceiver=True Reflect=True
 }
  

  <STOPUPGRADES>

}

and Upgrades.ini

BaseVehiclePrice=0



UpgradeType="WHEEL TYPE"
{

Instance="LFTIRE"
Instance="RFTIRE"
Instance="LRTIRE"
Instance="RRTIRE"

Incremental=0

UpgradeLevel="BBS"
{
Description="BBS WHEEL"
HDV=[GENERAL]
HDV=TireBrand=
{
Price=0

GEN=<wheel_LF>=bbs_LF.GMT
GEN=<wheel_RF>=bbs_RF.GMT
GEN=<wheel_LR>=bbs_LR.GMT
GEN=<wheel_RR>=bbs_RR.GMT
}
UpgradeLevel="Racing Hart cp-f"
{
Description="Racing Hart WHEEL"
HDV=[GENERAL]
HDV=TireBrand=
{
Price=0

GEN=<wheel_LF>=hart_cp-f_LF.GMT
GEN=<wheel_RF>=hart_cp-f_RF.GMT
GEN=<wheel_LR>=hart_cp-f_LR.GMT
GEN=<wheel_RR>=hart_cp-f_RR.GMT
}
UpgradeLevel="Team Dynamics"
{
Description="Team Dynamics WHEEL"
HDV=[GENERAL]
HDV=TireBrand=
{
Price=0

GEN=<wheel_LF>=td_LF.GMT
GEN=<wheel_RF>=td_RF.GMT
GEN=<wheel_LR>=td_LR.GMT
GEN=<wheel_RR>=td_RR.GMT

}
}


UpgradeType="ARMS ON STEERING WHEEL"
{

UpgradeLevel="ON"
{
Description="ARMS ON STEERING WHEEL"

Price=0

GEN=<ARMSEXISTS>=""
GEN=<NOARMSEXISTS>="//"
}
UpgradeLevel="OFF"
{
Description="ARMS ON STEERING WHEEL"

Price=0

GEN=<ARMSEXISTS>="//"
GEN=<NOARMSEXISTS>=""
}

}
 
It looks like you have your { } in the wrong places. I don't know what the tirebrand in the hdv is because the tires aren't being upgraded and no value is being inserted. If you don't need the hdv stuff, remove it.
Try this
Code:
UpgradeType="WHEEL TYPE"
{

  Instance="LFTIRE"
  Instance="RFTIRE"
  Instance="LRTIRE"
  Instance="RRTIRE"

  Incremental=0

  UpgradeLevel="BBS"
  {
    Description="BBS WHEEL"
    Price=0

    GEN=<wheel_LF>=bbs_LF.GMT
    GEN=<wheel_RF>=bbs_RF.GMT
    GEN=<wheel_LR>=bbs_LR.GMT
    GEN=<wheel_RR>=bbs_RR.GMT
  }
  UpgradeLevel="Racing Hart cp-f"
  {
    Description="Racing Hart WHEEL"
    Price=0

    GEN=<wheel_LF>=hart_cp-f_LF.GMT
    GEN=<wheel_RF>=hart_cp-f_RF.GMT
    GEN=<wheel_LR>=hart_cp-f_LR.GMT
    GEN=<wheel_RR>=hart_cp-f_RR.GMT
  }
  UpgradeLevel="Team Dynamics"
  {
    Description="Team Dynamics WHEEL"
    Price=0

    GEN=<wheel_LF>=td_LF.GMT
    GEN=<wheel_RF>=td_RF.GMT
    GEN=<wheel_LR>=td_LR.GMT
    GEN=<wheel_RR>=td_RR.GMT
  }
}
 
Hi all, did someone solved this trouble?
I'm in the same condition, the first level of all my upgrades are impossible to be deactivated.
I created a small spinner.gen and upgrades.ini in order to better debug it, but without solution.

This is the debug spinner.gen , that loads only "A155V6TI_Carrozzeria_Cockpit.gmt" (an extract of the car body used with internal cockpit view) and declares only one instance "LFTIRE" with a variable mesh name "<PNEUMATICO>":
SearchPath=<VEHDIR>\RPMT_DTM1993\
MASFile=cmaps_spinner.mas
SearchPath=<VEHDIR>\RPMT_DTM1993\AR155V6TI\AR155V6TI_MAS
//MASFile=

ReflectPlane=(0.0, -1.0, 0.0, 0.0)

//----------------------------------------

Instance=SLOT<ID>
{
Moveable=True
MeshFile=A155V6TI_Carrozzeria_Cockpit.gmt CollTarget=False HATTarget=False LODIn=(0.0) LODOut=(100.0) ShadowCaster=(Dynamic, Solid, 256, 256) Reflect=True

Actor=VEHICLE

<STARTUPGRADES>

Instance=LFTIRE<UPNUMBER>
{
Moveable=True
MeshFile=<PNEUMATICO> CollTarget=False HATTarget=False LODIn=(0.0) LODOut=(100.00) ShadowCaster=(Dynamic, Solid, 64, 64) Reflect=True
}


<STOPUPGRADES>
}

This is the debug Upgrades.ini, that assigns a string at <PNEUMATICO> variable. In order to better explain the bug, first line of "Pneumatici" upgrade shows the left-front tire (A155V6TI_Pneumatico_Michelin_A_AS.GMT where final AS is Anteriore Sinistro, Front Left), second line shows the right-front tire (...AD, Anteriore Destro, Front Right) and third line shows the left-rear tire (PS, Posteriore Sinistro, Rear Left).

UpgradeType="Pneumatici"
{
Instance=LFTIRE

Incremental=0

UpgradeLevel="Michelin"
{
Description="Pneumatici Michelin"
GEN=<PNEUMATICO>=A155V6TI_Pneumatico_Michelin_A_AS.GMT
}

UpgradeLevel="Michelin da pioggia"
{
Description="Pneumatici Michelin da pioggia"
GEN=<PNEUMATICO>=A155V6TI_Pneumatico_Michelin_W_AD.GMT
}

UpgradeLevel="Pirelli"
{
Description="Pneumatici Pirelli"
GEN=<PNEUMATICO>=A155V6TI_Pneumatico_Pirelli_A_PS.GMT
}
}

As You can see on this picture, first line of upgrades (the front-left tire mesh A155V6TI_Pneumatico_Michelin_A_AS.GMT) is showed also selecting second and third upgrade level.
201111111720.jpg

Many thanks in advance for any reply.
 
Try putting the instance in quotation marks.
Instance="LFTIRE"


If that doesn't work try moving Incremental=0 up before the instance entry.
 
Hi mianiak, thank you for you prompt reply.
Unfortunately, I made this mistake only on this debug_upgrades.ini. Changing it in Instance="LFTIRE" and moving up incremental=0, result is the same.

Now my next move is to copy original file from an ISI mod, like H6 Howson or AW Hammer, and to replace and modify files until the trouble will appear again, hoping to understand which file or line starts all.
 
Yes, your on the right track, doing that with a hammer will help you find the issue.

One other thing, check and make sure you don't have any extra brackets's {} in the upgrades.ini file and in the gen files.

Remember too that the gen files have 'linked' instances (I think linked is the right word) where you start with the main body { and don't close off that instance until the end of the file. } This is a common mistake I always make so It can't hurt to check and make sure.
I recommend using notepad++ and switch to one of the C languages, it will give you formatting on the left margin so you can see the structure more clearly.
Code:
instance=slot ID
{ [I]<- open[/I]
main body.gmt

  instance=cockpit
    {
     cockpit.gmt
    }
  instance=wheels
    {
     wheels.gmt
    }
  instance=etcetc
    {
     etcetc.gmt
    }

} [I]<- closed[/I]
 
Hi mianiak, I have found something.
Comparing ISI default upgrades.ini with mine, I noticed that I was using italian words to make upgrades. As you can see on my upgrades.ini my variable was called <PNEUMATICI>, the translation of "Tires".

So, I have modified "MeshFile=<PNEUMATICO>" to "MeshFile=<LFTIRES>"
and "GEN=<PNEUMATICO>=A155V6TI_Pneu...." to "GEN=<LFTIRES>=A155V6TI_Pneu...." as the ISI standard upgrades.ini

result is that... upgrade work correctly!

So I think that spinner.gen and showroom works bad with self-maded upgrades variables, like mine <PNEUMATICO>. In the other hand, in game.gen works also with invented upgrades variables.

The question now is: we have to use only defined variables like <LFTIRES>, <RFTIRES>, <COCKPIT>, <COCKPITWINDOWS> , <WHEEL> etc.etc. in order to let upgrades work correctly, or there is somewhere another file where we can declare any variables we want to use, like mine <PNEUMATICI> ?
 
Last edited:
After my experiments under my spinner.gen and after surfing into ISI's default spinner.gen, I've written some rules to follow in order to avoid problems on the Showroom. In-game.gen works without follow this rules, but my advice is to prepare a perfect spinner.gen before working on in-game.gen.

Any advice, corrections, and translations improving (hemm..) are welcome! :)

1) Any instance on spinner.gen that we want to modify with an upgrade, need at least a token which name starts like the instance.
My test was to create an instance called SPECCHI (the italian translation of mirrors).
- Using the token <SPECCHI> or <SPECCHIETTI>, upgrade works without problem and I can modify rear mirrors with an upgrade.
- Using a different token like <PIZZA> (lol), upgrade works bad ; first level of upgrade will continue to be activated also selecting second or thirth level.
- Using a chained name for the mesh like <SPECCHI>_DS.GMT, upgrade works without problems.
- Using two meshes, the first with token <SPECCHI> and the second with token called <PIZZA>, upgrade works without problem.

2) LFTIRE, LRTIRE, RFTIRE and RRTIRE instances, only if modified from an upgrade, must have only one mesh. Other meshes like BRAKEDISK or RIMS must be moved in another instance like LFSpindle, LRSpindle, RFSpindle and RRSpindle (when you compile in-game.gen, remember to return these meshes under LFTIRE, LRTIRE etc. instance, to let them rotate and turn as the wheels).

3) LFTIRE, LRTIRE etc. instances doesn't like chained mesh names. The only chain that work is the GenString token like <123...>.
For example, a car called by the file "alfaromeo.veh" or with a GenString="AlfaRomeo", should have on LFTIRE instance the meshfile=<1234>_lftire.gmt to show "alfa_lftire.gmt", or the meshfile=<1234><LFTIRE>to call "alfa_michelin_lf.gmt", or the meshfile=<LFTIRE>to call "Michelin_LF.gmt" . Others chained words like meshfile=<LFTIRE>_LF.gmt doesn't work perfectly with TIRE instances.

4) ANY instance couldn't contains tokens from different upgrades. In the other hand, a single UpgradeLevel can recall and modify more tokens placed in different instances.
 
Last edited:
Nice find, well done. Now I learned something new :D

The question now is: we have to use only defined variables
I 'think' the important parts need to follow the naming convention because they do more than just sit in 3d space, ie, the tires spin around and they also break off in a crash.

I just did some digging around and I found something interesting. It could possibly also be related to damage.ini. In the case of the hammer it uses a standard damage.ini in the \Vehicles folder. You see the 'debris' entries are all part of then .gen, upgrades.ini and damage.ini files.

By the looks of it, seeing no actual way to define each part, I'd say that it is relative to a naming convention that has been hard wired into the game.
 
Hi mianiak , I'm sure that instances LFTIRE, LRTIRES etc. and tokens <LFTIRES> , <LRTIRES> etc. are names wired on the engine game, but some instance and tokens that I've found on standard spinner.gen seems to have different names, like MIRRORS instance on Hammer_Spinner.gen and MIRROR_DS or MIRROR_PS on GTR12004_Spinner.gen .
Remember also that instance like <WHEEL> or <DEBRIS1> haves a special function only on in-game.gen, while on spinner.gen they becomes instances like others.

Now I will continue to make experiments about instances and tokens name, I will modify my previous reply if I find something new.
 

Back
Top