Euro Truck Simulator 2

Euro Truck Simulator 2

31 ratings
Using a clutch pedal with sequential gearshifts? Yes we can!
By Marscho
This guide shows you how to use sequential shifting with a clutch pedal, something the game does not support by itself.
3
3
3
   
Award
Favorite
Favorited
Unfavorite
The problem this resolves
I have a clutch pedal and wanted to use it, but until now shifted sequentially. (paddle shifter on the wheel and no H-shifter)
To my understanding ETS2 does not allow you to use the clutch in this mode.
I noticed the input configuration files of ETS2 are very customizable and I got a little obsessed finding a solution ... and found one.
The shortest guide
Travel to the past and let this page generate the configuration for you:
Input config generator[markus87.github.io]
The short guide
  1. Find the controls file of your ets2 installation
    • For Windows you may find it here: "C:\Users\Users\<Username>\Documents\Euro Truck Simulator 2\profiles\<Profile ID >\controls.sii"
    • For Linux you may find it here: "~/.local/share/Euro Truck Simulator 2/profiles/<Profile ID>/controls_linux.sii" (untested)
  2. Backup your controls file in case you break it (did not manage to, but found the backup helpful to keep my sanity)
  3. Setup the game
    • Controls
      -> Setup the Clutch axis
      -> Transmission = H-Shifter
    • H-Shiftersetup
      -> Shifterlayout = Range
      -> Shifterlayoutbehavior = Simple + Warning sounds (suppose advanced does not make much sense for this)
    • Keys and Buttons
      -> Define your Shift up + Shift down buttons
  4. Exit the game
  5. Replace the following lines
    • "joy.b4?0" is used to go directly to neutral from any gear, pick your button or replace with "0.0" to disable this function
    • hmdx and hmdy would be used (best guess) for vr-headsets, if you use a vr headset you must pick other "analog" mix lines ("eyegazex" and "eyegazey" seem likely candidates, eyetracker?)
    • the value "0.75" means shifting is enabled once the clutch is pressed to at least 75%, this was the value when ets2 really shifted gears
      -> without this(or to low values) you can change gears in the "back" without clutch and they apply only after you press the clutch

    Warning: The line numbers (config_lines[ > xxx <]) do not matter, you have to match what comes afterwards behind "mix", for example "gear0" with the line in your config that has the same "mix".

    config_lines[229]: "mix hmdx `max( min( memory( ( gearup | geardown | joy.b4?0 ) & gt( clutch, 0.75 ), sel( joy.b4?0, 0.0, hmdy + sel( gearup, 1.0, -1.0 ) ) ), 12.0 ), -2.0 )`" config_lines[230]: "mix hmdy `memory( !gearup & !geardown, hmdx )`" config_lines[371]: "mix gear0 `( gte( hmdx, 0.0 ) & lte( hmdx, 0.0 ) )`" config_lines[405]: "mix gearsel1on `lte( hmdx,-2.0 ) | gte( hmdx, 7.0 )`" config_lines[406]: "mix gearsel1off `!gearsel1on`" config_lines[407]: "mix gearsel1tgl `semantical.gearsel1tgl?0`" config_lines[411]: "mix gear1 `( gte( hmdx,-2.0 ) & lte( hmdx,-1.0 ) )`" config_lines[412]: "mix gear2 `( gte( hmdx, 1.0 ) & lte( hmdx, 1.0 ) ) | ( gte( hmdx, 7.0 ) & lte( hmdx, 7.0 ) )`" config_lines[413]: "mix gear3 `( gte( hmdx, 2.0 ) & lte( hmdx, 2.0 ) ) | ( gte( hmdx, 8.0 ) & lte( hmdx, 8.0 ) )`" config_lines[414]: "mix gear4 `( gte( hmdx, 3.0 ) & lte( hmdx, 3.0 ) ) | ( gte( hmdx, 9.0 ) & lte( hmdx, 9.0 ) )`" config_lines[415]: "mix gear5 `( gte( hmdx, 4.0 ) & lte( hmdx, 4.0 ) ) | ( gte( hmdx,10.0 ) & lte( hmdx,10.0 ) )`" config_lines[416]: "mix gear6 `( gte( hmdx, 5.0 ) & lte( hmdx, 5.0 ) ) | ( gte( hmdx,11.0 ) & lte( hmdx,11.0 ) )`" config_lines[417]: "mix gear7 `( gte( hmdx, 6.0 ) & lte( hmdx, 6.0 ) ) | ( gte( hmdx,12.0 ) & lte( hmdx,12.0 ) )`"

  6. Start the game and check if it worked
The full explanation
Used logic operators
Operator
Description
|
or, is true if the left or the right value is true
&
and, is true if the left and the right value are true
!
the following statement is negated (true->false, false->true)

Used functions
Function
Description
max( value1, value2 )
returns the biggest of the values
min( value1, value2 )
returns the lowest of the values
sel( boolInput, trueValue, falseValue )
if boolInput is true the value of trueValue is returned otherwise the value of falseValue
gt( value1, value2 )
returns true if value1 is greater than value2
gte( value1, value2 )
returns true if value1 is greater or equal than value2
lte( value1, value2 )
returns true if value1 is less or equal than value2
memory( enable, value )
If enable is true it stores and returns the value parameter, if enable is false it returns the stored value instead

Recommendation: Copy the following block in your text editor in order for the formatting to make sense
config_lines[229]: "mix hmdx `max( min( memory( ( gearup | geardown | joy.b4?0 ) & gt( clutch, 0.75 ), sel( joy.b4?0, 0.0, hmdy + sel( gearup, 1.0, -1.0 ) ) ), 12.0 ), -2.0 )`" -> "hmdx" is used as the current analog representation of the gear that is used, its range goes from -2 <-> 12 (R2 <-> 12). max( , -2.0 ) -> Defines the lowest possible gear value min( , 12.0 ) -> Defines the highest possible gear value memory( , ) -> Remembers the gear value if we dont shift and changes the gear once we do ( gearup | geardown | joy.b4?0 ) & gt( clutch, 0.75 ), -> Store the gear value if upshift-, downshift-, neutralbutton is pressed, but only if the clutch is pressed more than 75% sel( joy.b4?0, 0.0, hmdy + sel( gearup, 1.0, -1.0 ) ) -> If neutral button is pressed the gear value is 0.0 else the value is hmdy + 1.0 if gearup is pressed or hmdy - 1.0 if it is not pressed config_lines[230]: "mix hmdy `memory( !gearup & !geardown, hmdx )`" -> Remembers the gear value as long as no shifting takes place, on shifting it returns the previous gear value (without this shifting would be really fast) config_lines[371]: "mix gear0 `( gte( hmdx, 0.0 ) & lte( hmdx, 0.0 ) )`" -> If the gear value equals 0.0 neutral is active (N) config_lines[405]: "mix gearsel1on `lte( hmdx,-2.0 ) | gte( hmdx, 7.0 )`" -> Range is on if gear value is lower or equal -2.0 or if gear value is greater or equal than 7.0 config_lines[406]: "mix gearsel1off `!gearsel1on`" -> Range is off is the opposite of gearsel1on config_lines[407]: "mix gearsel1tgl `semantical.gearsel1tgl?0`" -> The range toggle input is disabled config_lines[411]: "mix gear1 `( gte( hmdx,-2.0 ) & lte( hmdx,-1.0 ) )`" -> If the gear value is greater or equal than -2.0 and lower or equal -1.0 neutral is active (R2-R1) config_lines[412]: "mix gear2 `( gte( hmdx, 1.0 ) & lte( hmdx, 1.0 ) ) | ( gte( hmdx, 7.0 ) & lte( hmdx, 7.0 ) )`" -> If the gear value equals 1.0 or 7.0 gear 1 is active (1, 7) config_lines[413]: "mix gear3 `( gte( hmdx, 2.0 ) & lte( hmdx, 2.0 ) ) | ( gte( hmdx, 8.0 ) & lte( hmdx, 8.0 ) )`" -> If the gear value equals 2.0 or 8.0 gear 2 is active (2, 8) config_lines[414]: "mix gear4 `( gte( hmdx, 3.0 ) & lte( hmdx, 3.0 ) ) | ( gte( hmdx, 9.0 ) & lte( hmdx, 9.0 ) )`" -> If the gear value equals 3.0 or 9.0 gear 3 is active (3, 9) config_lines[415]: "mix gear5 `( gte( hmdx, 4.0 ) & lte( hmdx, 4.0 ) ) | ( gte( hmdx,10.0 ) & lte( hmdx,10.0 ) )`" -> If the gear value equals 4.0 or 10.0 gear 4 is active (4, 10) config_lines[416]: "mix gear6 `( gte( hmdx, 5.0 ) & lte( hmdx, 5.0 ) ) | ( gte( hmdx,11.0 ) & lte( hmdx,11.0 ) )`" -> If the gear value equals 5.0 or 11.0 gear 5 is active (5, 11) config_lines[417]: "mix gear7 `( gte( hmdx, 6.0 ) & lte( hmdx, 6.0 ) ) | ( gte( hmdx,12.0 ) & lte( hmdx,12.0 ) )`" -> If the gear value equals 6.0 or 12.0 gear 6 is active (6, 12)

Once understood how this works I expect that any H-shifter layout can be done with paddle shifters.
Not sure if any other layouts make more or less sense than R2 <-> 12 since range and split would be emulated anyways.
63 Comments
Marscho  [author] 11 hours ago 
@kosta.curcic.96 I checked with ats2 (non beta version) configured via the configurator site. I had no issues with a fresh controls.sii

Not sure what you got going there, but in doubt you can upload your file und I can have a look some time. 🤷‍♂️
Marscho  [author] 11 hours ago 
@TecPix
I just tested this truck and gearbox and it works fine setup from the configurator.
Make sure forward is set to 12 gears and backwards to 2.

In the game you must set Shifter layout to Range.

@Niarscox you need to tell me what truck and gearbox - or I cant check it.
But I also believe you may have the wrong Shifter layout set in the game.
Step 1 in the configurator cant be ignored.

I tried to reproduce your problem with wrong shifter layouts but I could not.
If you upload your configuration file I can check it if you like.
Marscho  [author] 12 hours ago 
@kosta.curcic.96 if you use eyegazex/y and ats has a problem with that use something else - the configurator I provided does not use those variables at all. (it uses hmdx/y)

I am going to check ats later - but I dont see why it would not work any more.
niarscox May 9 @ 12:01pm 
bro so thanks this is work but when i am using truck has 14 shifts (with c1 and c2) between it is skip 11 from 4. and there are 4 shift extra after 12 named N. can you fix that? (sorry for my bad england)
TecPix May 6 @ 11:29am 
changed my gearbox and getting the same issue from Mini_WiggleYT, from gear 4 skips to 11.
Gearbox GRS905R - scania g440
jl.viljakainen Apr 21 @ 12:04pm 
Hi! I got the settings from the markus.github.io site and it works somewhat right. I can switch to reverse, neutral and first gear just fine but after first gear it skips a gear always, going 1, 3, 5, 7, 9, 11 and then back to 2, 4, 6 and so on. I don't think this is supposed to be like this but if is, how can i put it to being 1, 2, 3, 4 and so on?
Marscho  [author] Feb 16 @ 10:39am 
Hm, are other people effected by this?
I currently do not have access to my wheel/ets2 setup to test this. (for a month or so)
Cant promise, but I may be able to test it with my gamepad.
kosta.curcic.96 Feb 10 @ 1:33pm 
Hello, I've been using this for years, and it worked great!
However, after one of the latest updates to ATS, it no longer works.
The console shows this error:

00:00:44.004 : <ERROR> Circular dependency detected in single list - evaluation is not deterministic.
00:00:44.004 : <ERROR> eyegazey
00:00:44.004 : <ERROR> eyegazex

Any idea why this is happening?
Marscho  [author] Dec 3, 2024 @ 8:03am 
So it doesn't actually work. 😂
If you can tell me the truck and it's gearbox I can check if it's my bad.
Mini_WiggleYT Dec 3, 2024 @ 1:48am 
mine does work but it goes from gear 4 and skips all the way to gear 11