Previous Thread
Next Thread
Print Thread
Rate This Thread
Hop To
#3429294 - 11/08/11 07:23 PM New Warthog? Here's the TARGET tutorial I wish I'd had.  
Joined: Jan 2001
Posts: 960
GregP Offline
Member
GregP  Offline
Member

Joined: Jan 2001
Posts: 960
Fairfax, VA
I bought a Warthog in late September and it took me about a full week to get my TARGET profile up and running, as it took me some time to learn how to translate my "thinking in Foxy" into TARGET syntax. Since then, though, DCS was crashing on me every single time I ran it, anywhere from 5 to 30 minutes into a flight. I suspected it was due to my Warthog not being set up correctly and "flooding" DCS with keypresses, but it was only yesterday that I finally got it all worked out and the problem solved.

I figured it might be worthwhile to compile a bunch of the useful info that I've come across in learning about TARGET; if I'd had all this info in one place when I started, I could have saved an immense amount of time. While the official TARGET documentation is useful, I found that it inexplicably left out information that, for my uses at least, was absolutely critical to setting up a profile. If you plan on customizing your HOTAS layout for DCS using TARGET, I would highly recommend that you read its documentation first. After that, but before wasting hours trying to straighten out your confusion, come back here and re-read the info below. I should note that pretty much ALL of the info below comes from other people on this and the ED forums, people like ivanwfr, PeterP, etc. All I've done is gather it all together in one place.

Note that in the following, when I talk about using TARGET, I'm talking about using the Script Editor, not the GUI. Although the GUI is probably 'easier', the Script Editor makes it much easier to utilize the incredible flexibility and power of TARGET.

So here goes:

First and foremost, there seems to be a lot of confusion (myself included, at first) about the different usage options for the Warthog within DCS. They are as allows, in increasing order of complexity:

1. Pure plug-and-play, i.e. pure DirectX mode. The result of an impressive collaboration between Thrustmaster and ED, you can simply plug in the Warthog, completely forget about anything to do with TARGET, and when you start up DCS, "everything just works". All of the buttons and axes on both the joystick and throttle will automatically be assigned to their correct functions in-game. So if you want your Warthog to faithfully mimic the real A-10C HOTAS and not do anything else, this is the option for you.

Although convenient, this method also has the limitation that you cannot utilize 'shifted' button states on the Warthog. Similar to the Cougar, you can use a button such as S3 or S4 to act as your 'shift' toggle, enabling access to a second 'layer' of commands on top of the default 'unshifted' state, and you can also use a switch like the Speedbrake Switch to enable Up / Middle / Down states, which then adds a further two layers (giving a total of 6 possible layers of function assignments). These additional layers will NOT be available to use if you use option #1, however, because DCS does not by default recognize them.

Before going any further, it is important to understand the limitations of using a controller in pure DirectX mode. When DirectX sees a controller that you've plugged in, it will recognize a maximum of 32 buttons and 8 axes on that controller. These can be 'directly' used in-game and are often automatically set to perform certain default functions, e.g. Button1 = DX1 = fire guns. You can also manually assign them in-game in the controller properties page, e.g. click on "Fire guns" and then press Button1 on your controller.

But what happens if you have more than 32 buttons or 8 axes on a single controller? In that case, those 'extra' buttons/axes are not assigned DirectX names, and so from DirectX's perspective, they're not even there. However, you CAN pass keyboard assignments through those buttons/axes, provided you have some programming utility outside of the game (TARGET, Foxy, etc.) that can handle that. So, let's say you have a 33rd button on your joystick. By default, pressing this button in-game will do nothing, because DirectX doesn't see anything beyond 32 buttons. But if you've programmed that button from outside the game to represent, for example, 'G' for landing gear, now when you press that button in-game, the game simply sees 'G' and doesn't care where it came from.

So given all of the above, how does DCS manage this automatic assignment of HOTAS functions on your Warthog? DCS sees your Warthog as two separate devices -- joystick and throttle -- each with up to 32 buttons and 8 axes available. For every device that DCS detects, it creates a separate lua file in C:\Users\[name]\Saved Games\DCS Warthog\Config\Input\A-10C\joystick\, which lists every possible function available within the game, and it is these lua files that change when you manually assign a controller button or axis to a specific command via the in-game controller options. Specific to the Warthog, because DCS 'knows' that your Warthog button is supposed to correspond to a specific function, it automatically assigns the button to do that in the lua file.

Here's an example:

In the Joystick.lua file, if you were using a stick other than the Warthog, you'd see this entry:

Code:
[158] = 
        {
            ["up"] = 351,
            ["name"] = "Weapon release",
            ["category"] = "HOTAS",
            ["down"] = 350,
        }, -- end of [158]


Nevermind the actual numbers (158, 350, 351); what this is showing you is that DCS has a command available called "Weapon release", but that no button on this controller has currently been assigned to it.

If you have a Warthog plugged in, though, you'll see this in your Joystick - HOTAS Warthog.lua file:

Code:
[158] = 
        {
            ["combos"] = 
            {
                [1] = 
                {
                    ["key"] = "JOY_BTN2",
                }, -- end of [1]
            }, -- end of ["combos"]
            ["up"] = 351,
            ["name"] = "Weapon release",
            ["category"] = "HOTAS",
            ["down"] = 350,
        }, -- end of [158]


And this is now showing you that Button2 on the joystick (=DX2) has been automatically bound to the "Weapon release" function; DCS already knows that DX2 on a Warthog joystick is supposed to activate the "Weapon release" function. DCS follows this logic for all the other assignments on the Warthog, and that's how it "just works" when you plug it in for the first time: it will automatically assign the 19 buttons (+POV hat+2 axes) on the joystick and 32 buttons (+POV hat+axes) on the throttle to their appropriate commands within DCS.

2. Plug-and-play with some in-game assignment changes. This one is almost identical to #1 except that now instead of just using all the default controller assignments that DCS has set for your Warthog, you then go into the controller options screen and manually change some of the assignments. You still don't need TARGET or need to muck around with lua files, but again you're going to be limited to only using unshifted button states on your Warthog.

3. Using either joystick or throttle as plug-and-play device, with the other programmed via TARGET. Although I can't readily think of why you'd want to do this, it is possible. This would allow you to have one controller operating as a pure DirectX device (i.e. no shifted states available, and with the 32/8 limitation) with the other being controlled through TARGET and acting as a pure keyboard-emulation device or hybrid DirectX/keyboard-emulation device. In this case, you need to EXCLUDE the 'DirectX-only' controller from your TARGET profile with a line like:

Code:
Configure(&Throttle,MODE_EXCLUDED);


Note that this is also how you exclude your Thrustmaster MFDs, if you have them and want to assign them in-game rather than thru TARGET. In that case you'd use:

Code:
Configure(&LMFD,MODE_EXCLUDED);
Configure(&RMFD,MODE_EXCLUDED);


4. Using both devices through TARGET. This is by far the most flexible and powerful option, and was the way I wanted to go because I knew that even though I wanted the majority of my Warthog's buttons and axes to be assigned realistically, I wanted to customize some of the buttons on both the joystick and throttle beyond what could be done via the in-game controller options.

If you go this route, you're going to have to work on the lua file itself in addition to your TARGET profile. When you set up and run your TARGET profile, DCS is now going to see your Warthog as a 'virtual' controller called "Thrustmaster Combined". Apparently this creates some problems because, while DCS still tries to automatically assign functions to your HOTAS in-game, this can conflict with what you're telling TARGET to do. The result is that you need to make sure your TARGET profile and Thrustmaster Combined.lua files are coordinated (more on that below).

Here's a very important point (first made by ivanwfr): for some reason, if you try to assign actual keypresses to the buttons on your throttle via TARGET (as opposed to simply letting them act as DirectX buttons that can be bound in-game), DCS often has trouble interpreting them correctly and may unintentionally hold them down, so to speak, such that DCS ends up getting 'flooded' by excess keypresses that will eventually crash it. Frustratingly, these 'excess' keypresses are invisible to any keypress analyzers (like TARGET's Event Analyzer) so you won't necessarily know that this is what is crashing your game.

The solution, then, is to try to keep as many of the throttle's buttons and axes operating as DirectX buttons/axes as possible. Thus you must present these buttons as DX buttons to DCS. You can do this in TARGET by simply 'declaring' the correspondence between physical button and DX number, like the following:

Code:
MapKey(&Throttle,FLAPU,DX22);
MapKey(&Throttle,FLAPD,DX23);


And for any buttons or axes on the throttle that you want to assign a more complicated function, you can do that without messing up the other buttons being simple DX buttons. Here's an example that toggles a 'zoom CDU' function on the Mic Switch Down [shifted] button, with the unshifted simply appearing to DCS as DX5, which can then be assigned a function in-game (or via the lua file, which is the same thing):

Code:
MapKeyIO(&Throttle,MSD,SEQ(CHAIN(PULSE+Toggle_zoom,D(150),PULSE+Zoom_CDU),Toggle_zoom),DX5);


But, as I said, you'll want to minimize the use of assignments like the above on the throttle; if at all possible, you should use as many of the allowed 32 DirectX buttons and 8 axes on the throttle and then assign them in-game (i.e. via the lua file). Note that when explicitly passing DX buttons to DCS via TARGET, you now can use shifted states on these buttons, because you're defining the shifted assignment through TARGET (see above example).

At this point it probably makes sense to list the correspondence of DirectX button name with physical button name (inexplicably, this does not appear in the TARGET documentation anywhere!). Note, again, however, that these codes cannot be used together at the same time inside of TARGET, because you're only allowed a total of 32 buttons and 8 axes on your virtual "Combined" controller. The main use for the first list (the 19 DX buttons on the joystick) would be for option #3 above where you make use of the joystick from within TARGET (presumably using a combination of DirectX button assignments and keypress emulation commands) but allow the throttle to "just work" by EXCLUDing it from your TARGET profile and letting DCS see it as a pure DirectX controller.

The second list (the 32 DX buttons on the throttle), however, is useful for most people who would use option #4, combining both controllers in TARGET but keeping most throttle buttons as DX buttons. Note that, if you could somehow create a TARGET profile that included the joystick and throttle as separate DX controllers with all of the assignments below, you'd get the exact same result as option #1 where you simply plug the Warthog in and it "just works" -- because DCS would simply see two separate controllers that are pure DX devices, and it would recognize that it should assign specific DX buttons on each to specific functions in-game.

Joystick:
TG1 = DX1
TG2 = DX6
S1 = DX5
S2 = DX2
S3 = DX3
S4 = DX4

Trim Control
H1U = DXHATUP
H1D = DXHATDOWN
H1L = DXHATLEFT
H1R = DXHATRIGHT

TMS
H2U = DX7
H2D = DX9
H2L = DX10
H2R = DX8

DMS
H3U = DX11
H3D = DX13
H3L = DX14
H3R = DX12

CMS
H4U = DX15
H4D = DX17
H4L = DX18
H4R = DX16
H4P (Hat4 pressed down) = DX19

Throttle:
Slew Control
SC (slew control button pressed in) = DX1

Mic Switch
MSP (mic switch button pressed in) = DX2
MSU = DX3
MSR = DX4
MSD = DX5
MSL = DX6

Speedbrake Switch
SPDF = DX7
SPDB = DX8

Boat Switch
BSF = DX9
BSB = DX10

China Hat
CHF = DX11
CHB = DX12

Pinky Switch
PSF = DX13
PSB = DX14

Left Throttle Button
LTB = DX15

Engine Fuel Flow Norm/Override Switches
EFLNORM = DX16
EFRNORM = DX17

Engine Oper Motor/Norm Switches
EOLMOTOR = DX18
EORMOTOR = Dx19

APU Start/Off Switch
APUON = DX20

Landing Gear Warning Silence
LDGH = DX21

Flaps
FLAPU = DX22
FLAPD = DX23

EAC On/Off
EACON = DX24

RDR/NORM
RDRNRM = DX25

LAAP Autopilot Switches
APENG = DX26
APPAT = DX27
APALT = DX28

Throttle Idle Detents
IDLERON = DX29
IDLELON = DX30

Engine Oper Ign/Norm
EOLIGN = DX31
EORIGN = DX32

Coolie Switch
CSU = DXHATUP
CSR = DXHATRIGHT
CSD = DXHATDOWN
CSL = DXHATLEFT

Continued below...

Last edited by GregP; 11/09/11 02:40 AM.

i7-9700K / MSI MPG Z390 Gaming PRO Carbon AC / 64GB DDR4 / RTX 3080 Ti / TrackIR5 / MFG Crosswind Rudder Pedals / VKB GF MkIII + MCG Pro
Inline advert (2nd and 3rd post)

#3429298 - 11/08/11 07:25 PM Re: New Warthog? Here's the TARGET tutorial I wish I'd had. [Re: GregP]  
Joined: Jan 2001
Posts: 960
GregP Offline
Member
GregP  Offline
Member

Joined: Jan 2001
Posts: 960
Fairfax, VA
I'll now post my current TARGET configuration; this uses keypress emulations on all of the joystick buttons (as opposed to DX assignments) but leaves most throttle buttons as DX buttons, allowing the latter to be assigned in-game:

Code:

include "target.tmh" //here we link this file to the file that contains the default Thrustmaster function code 
include "DCSA10Cv2.ttm"

int main() 
{ 

Configure(&LMFD,MODE_EXCLUDED); 
Configure(&RMFD,MODE_EXCLUDED);
    
if(Init(&EventHandle)) return 1; // declare the event handler, return on error  
 
//script and function functions go here and before the } 

// shift button
SetShiftButton(&Joystick,S3);

// set pulse and delay lengths
SetKBRate(50,100);

//////////////////////////////////////////////////////////////////////////////////
// Joystick and Throttle Axis Definitions
//////////////////////////////////////////////////////////////////////////////////

MapAxis(&Joystick, JOYX, DX_X_AXIS); 
MapAxis(&Joystick, JOYY, DX_Y_AXIS); 
MapAxis(&Throttle, THR_LEFT, DX_ZROT_AXIS); 
MapAxis(&Throttle, THR_RIGHT, DX_Z_AXIS); 

// Uncomment following two lines if you want Slew Control axes available in-game
MapAxis(&Throttle, SCX, DX_XROT_AXIS); 
MapAxis(&Throttle, SCY, DX_YROT_AXIS);  

// For now, don't do anything with the Slew Control pressed in
MapKey(&Throttle,SC,0);

// Assign zoom control to gray throttle friction lever
KeyAxis(&Throttle,THR_FC,0,AXMAP2(LIST(0,40,60,100),Zoom_in_slow,0,Zoom_out_slow));

////////////////////////////////////////////////////////////////////////////////////
// Joystick Button Definitions
////////////////////////////////////////////////////////////////////////////////////

MapKey(&Joystick,TG1,Gun_trigger_first_stage);
MapKey(&Joystick,TG2,Gun_trigger);
MapKeyIO(&Joystick,S1,Reset_trimmers,HOTAS_Master_Mode_Control_Button);
MapKeyIO(&Joystick,S2,TIR_center,Weapon_release);
MapKeyIO(&Joystick,S4,Eject,HOTAS_nosewheel_steering_button);

MapKey(&Joystick,H1U,Trim_nose_down);
MapKey(&Joystick,H1D,Trim_nose_up);
MapKey(&Joystick,H1L,Trim_aileron_left);
MapKey(&Joystick,H1R,Trim_aileron_right);

MapKeyIO(&Joystick,H2U,Aircraft_view,HOTAS_TMS_up);
MapKeyIO(&Joystick,H2D,Cockpit_view,HOTAS_TMS_down);
MapKeyIO(&Joystick,H2L,Flyby_view,HOTAS_TMS_left);
MapKeyIO(&Joystick,H2R,Chase_view,HOTAS_TMS_right);

MapKeyIO(&Joystick,H3U,Screenshot,HOTAS_DMS_up);
MapKeyIO(&Joystick,H3D,Quit,HOTAS_DMS_down);
MapKeyIO(&Joystick,H3L,Pause,HOTAS_DMS_left);
MapKeyIO(&Joystick,H3R,Active_pause,HOTAS_DMS_right);

MapKeyIO(&Joystick,H4U,SEQ(CHAIN(PULSE+Toggle_zoom,D(150),PULSE+Zoom_fwd_left_console),Toggle_zoom),HOTAS_CMS_forward);
MapKeyIO(&Joystick,H4D,SEQ(CHAIN(PULSE+Toggle_zoom,D(150),PULSE+Zoom_NMSP),Toggle_zoom),HOTAS_CMS_aft);
MapKeyIO(&Joystick,H4L,SEQ(CHAIN(PULSE+Toggle_zoom,D(150),PULSE+Zoom_left_console),Toggle_zoom),HOTAS_CMS_left);
MapKeyIO(&Joystick,H4R,SEQ(CHAIN(PULSE+Toggle_zoom,D(150),PULSE+Zoom_right_console),Toggle_zoom),HOTAS_CMS_right);

//////////////////////////////////////////////////////////////////////////////////////
// Throttle Button Definitions
//////////////////////////////////////////////////////////////////////////////////////

MapKeyIO(&Throttle,MSU,SEQ(CHAIN(PULSE+Toggle_zoom,D(150),PULSE+Zoom_HUD),Toggle_zoom),VAC_comms);
MapKeyIO(&Throttle,MSD,SEQ(CHAIN(PULSE+Toggle_zoom,D(150),PULSE+Zoom_CDU),Toggle_zoom),DX5);
MapKeyIO(&Throttle,MSL,TIR_enable,DX6);
MapKeyIO(&Throttle,MSR,SEQ(CHAIN(PULSE+Toggle_zoom,D(150),PULSE+Zoom_radios),Toggle_zoom),DX4);
MapKey(&Throttle,MSP,DX2);

MapKey(&Throttle,SPDB,DX8);
MapKey(&Throttle,SPDF,DX7);

MapKey(&Throttle,BSB,DX10);
MapKey(&Throttle,BSF,DX9);

MapKey(&Throttle,CHB,DX12);
MapKey(&Throttle,CHF,DX11);

MapKey(&Throttle,PSB,DX14);
MapKey(&Throttle,PSF,DX13);

MapKeyIO(&Throttle,LTB,Toggle_zoom,DX15);

MapKey(&Throttle,CSU,DXHATUP);
MapKey(&Throttle,CSD,DXHATDOWN);
MapKey(&Throttle,CSL,DXHATLEFT);
MapKey(&Throttle,CSR,DXHATRIGHT);

MapKey(&Throttle,EFLNORM,DX16);
MapKey(&Throttle,EFRNORM,DX17);
MapKey(&Throttle,EOLMOTOR,DX18);
MapKey(&Throttle,EORMOTOR,DX19);
MapKey(&Throttle,APUON,DX20);
MapKey(&Throttle,LDGH,DX21);
MapKey(&Throttle,FLAPU,DX22);
MapKey(&Throttle,FLAPD,DX23);
MapKey(&Throttle,EACON,DX24);
MapKey(&Throttle,RDRNRM,DX25);
MapKey(&Throttle,APENG,DX26);
MapKey(&Throttle,APPAT,DX27);
MapKey(&Throttle,APALT,DX28);
MapKey(&Throttle,IDLELON,DX29);
MapKey(&Throttle,IDLERON,DX30);
MapKey(&Throttle,EOLIGN,DX31);
MapKey(&Throttle,EORIGN,DX32);

} 
 
int EventHandle(int type, alias o, int x) 
{ 
DefaultMapping(&o, x); 
} 


The last remaining step is to ensure coordination between the TARGET profile and the "Thrustmaster Combined.lua" file that DCS will create when you first run DCS. The problem is the contradiction that you choose to use TARGET specifically because you want some functionality beyond the automatic assignments that DCS will make when it detects you have a Warthog ... but DCS doesn't know this, and so still automatically assigns all the commands in the lua file, which may now conflict with the assignments you've made in TARGET.

The way around this is to check that all of your DX button declarations in TARGET are being assigned to commands in the lua file, but that your other button assignments in TARGET do not appear in the lua file. This process can be simplified when you realize that the lua ONLY needs to have the actual commands that your joystick+throttle are directly (i.e. by using DX buttons/axes) calling. You can safely delete every unused function in the lua file (and there are hundreds of them), leaving you with the likely 10-32 functions that you DO directly call. This makes it easier to read and to ensure you only have the needed commands in there.

For completeness, I'll include my Thrustmaster Combined.lua file here:

Code:
options = 
{
    ["keyCommands"] = 
    {
        [178] = 
        {
            ["combos"] = 
            {
                [1] = 
                {
                    ["key"] = "JOY_BTN_POV1_U",
                }, -- end of [1]
            }, -- end of ["combos"]
            ["up"] = 543,
            ["name"] = "HOTAS Coolie Switch Up",
            ["category"] = "HOTAS",
            ["down"] = 539,
        }, -- end of [178]
        [179] = 
        {
            ["combos"] = 
            {
                [1] = 
                {
                    ["key"] = "JOY_BTN_POV1_D",
                }, -- end of [1]
            }, -- end of ["combos"]
            ["up"] = 543,
            ["name"] = "HOTAS Coolie Switch Down",
            ["category"] = "HOTAS",
            ["down"] = 540,
        }, -- end of [179]
        [180] = 
        {
            ["combos"] = 
            {
                [1] = 
                {
                    ["key"] = "JOY_BTN_POV1_L",
                }, -- end of [1]
            }, -- end of ["combos"]
            ["up"] = 543,
            ["name"] = "HOTAS Coolie Switch Left",
            ["category"] = "HOTAS",
            ["down"] = 541,
        }, -- end of [180]
        [181] = 
        {
            ["combos"] = 
            {
                [1] = 
                {
                    ["key"] = "JOY_BTN_POV1_R",
                }, -- end of [1]
            }, -- end of ["combos"]
            ["up"] = 543,
            ["name"] = "HOTAS Coolie Switch Right",
            ["category"] = "HOTAS",
            ["down"] = 542,
        }, -- end of [181]
		[182] = 
        {
            ["combos"] = 
            {
                [1] = 
                {
                    ["key"] = "JOY_BTN10",
                }, -- end of [1]
            }, -- end of ["combos"]
            ["up"] = 565,
            ["name"] = "HOTAS Boat Switch Aft",
            ["category"] = "HOTAS",
            ["down"] = 564,
        }, -- end of [182]
        [183] = 
        {
            ["combos"] = 
            {
                [1] = 
                {
                    ["key"] = "JOY_BTN9",
                }, -- end of [1]
            }, -- end of ["combos"]
            ["up"] = 565,
            ["name"] = "HOTAS Boat Switch Forward",
            ["category"] = "HOTAS",
            ["down"] = 563,
        }, -- end of [183]
        [184] = 
        {
            ["combos"] = 
            {
                [1] = 
                {
                    ["key"] = "JOY_BTN12",
                }, -- end of [1]
            }, -- end of ["combos"]
            ["up"] = 589,
            ["name"] = "HOTAS China Hat Aft",
            ["category"] = "HOTAS",
            ["down"] = 567,
        }, -- end of [184]
        [185] = 
        {
            ["combos"] = 
            {
                [1] = 
                {
                    ["key"] = "JOY_BTN11",
                }, -- end of [1]
            }, -- end of ["combos"]
            ["up"] = 589,
            ["name"] = "HOTAS China Hat Forward",
            ["category"] = "HOTAS",
            ["down"] = 566,
        }, -- end of [185]
        [186] = 
        {
            ["combos"] = 
            {
                [1] = 
                {
                    ["key"] = "JOY_BTN15",
                }, -- end of [1]
            }, -- end of ["combos"]
            ["up"] = 1557,
            ["name"] = "HOTAS Left Throttle Button",
            ["category"] = "HOTAS",
            ["down"] = 571,
        }, -- end of [186]
        [189] = 
        {
            ["combos"] = 
            {
                [1] = 
                {
                    ["key"] = "JOY_BTN8",
                }, -- end of [1]
            }, -- end of ["combos"]
            ["up"] = 579,
            ["name"] = "HOTAS Speed Brake Switch Aft",
            ["category"] = "HOTAS",
            ["down"] = 578,
        }, -- end of [189]
        [190] = 
        {
            ["combos"] = 
            {
                [1] = 
                {
                    ["key"] = "JOY_BTN7",
                }, -- end of [1]
            }, -- end of ["combos"]
            ["up"] = 579,
            ["name"] = "HOTAS Speed Brake Switch Forward",
            ["category"] = "HOTAS",
            ["down"] = 577,
        }, -- end of [190]
        [191] = 
        {
            ["combos"] = 
            {
                [1] = 
                {
                    ["key"] = "JOY_BTN14",
                }, -- end of [1]
            }, -- end of ["combos"]
            ["up"] = 570,
            ["name"] = "HOTAS Pinky Switch Aft",
            ["category"] = "HOTAS",
            ["down"] = 569,
        }, -- end of [191]
        [192] = 
        {
            ["combos"] = 
            {
                [1] = 
                {
                    ["key"] = "JOY_BTN13",
                }, -- end of [1]
            }, -- end of ["combos"]
            ["up"] = 570,
            ["name"] = "HOTAS Pinky Switch Forward",
            ["category"] = "HOTAS",
            ["down"] = 568,
        }, -- end of [192]
        [193] = 
        {
            ["up"] = 576,
            ["name"] = "HOTAS MIC Switch Up",
            ["category"] = "HOTAS",
            ["down"] = 572,
        }, -- end of [193]
        [194] = 
        {
            ["combos"] = 
            {
                [1] = 
                {
                    ["key"] = "JOY_BTN5",
                }, -- end of [1]
            }, -- end of ["combos"]
            ["up"] = 576,
            ["name"] = "HOTAS MIC Switch Down",
            ["category"] = "HOTAS",
            ["down"] = 573,
        }, -- end of [194]
        [195] = 
        {
            ["combos"] = 
            {
                [1] = 
                {
                    ["key"] = "JOY_BTN6",
                }, -- end of [1]
            }, -- end of ["combos"]
            ["up"] = 576,
            ["name"] = "HOTAS MIC Switch Aft",
            ["category"] = "HOTAS",
            ["down"] = 574,
        }, -- end of [195]
        [196] = 
        {
            ["combos"] = 
            {
                [1] = 
                {
                    ["key"] = "JOY_BTN4",
                }, -- end of [1]
            }, -- end of ["combos"]
            ["up"] = 576,
            ["name"] = "HOTAS MIC Switch Forward",
            ["category"] = "HOTAS",
            ["down"] = 575,
        }, -- end of [196]
        [237] = 
        {
            ["combos"] = 
            {
                [1] = 
                {
                    ["key"] = "JOY_BTN30",
                }, -- end of [1]
            }, -- end of ["combos"]
            ["up"] = 311,
            ["name"] = "Left Engine Throttle Set OFF",
            ["category"] = "Systems",
            ["down"] = 313,
        }, -- end of [237]
        [238] = 
        {
            ["combos"] = 
            {
                [1] = 
                {
                    ["key"] = "JOY_BTN29",
                }, -- end of [1]
            }, -- end of ["combos"]
            ["up"] = 312,
            ["name"] = "Right Engine Throttle Set OFF",
            ["category"] = "Systems",
            ["down"] = 314,
        }, -- end of [238]
        [239] = 
        {
            ["combos"] = 
            {
                [1] = 
                {
                    ["key"] = "JOY_BTN22",
                }, -- end of [1]
            }, -- end of ["combos"]
            ["up"] = 1048,
            ["name"] = "Toggle Flaps Up",
            ["category"] = "Systems",
            ["down"] = 1047,
        }, -- end of [239]
        [240] = 
        {
            ["combos"] = 
            {
                [1] = 
                {
                    ["key"] = "JOY_BTN23",
                }, -- end of [1]
            }, -- end of ["combos"]
            ["up"] = 1048,
            ["name"] = "Toggle Flaps Dn",
            ["category"] = "Systems",
            ["down"] = 1049,
        }, -- end of [240]
        [248] = 
        {
            ["combos"] = 
            {
                [1] = 
                {
                    ["key"] = "JOY_BTN26",
                }, -- end of [1]
            }, -- end of ["combos"]
            ["up"] = 62,
            ["name"] = "LAAP Engage/Disengage",
            ["category"] = "LASTE Control Panel",
            ["down"] = 62,
        }, -- end of [248]
        [249] = 
        {
            ["combos"] = 
            {
                [1] = 
                {
                    ["key"] = "JOY_BTN27",
                }, -- end of [1]
            }, -- end of ["combos"]
            ["up"] = 636,
            ["name"] = "LAAP Mode Selector (PATH)",
            ["category"] = "LASTE Control Panel",
            ["down"] = 637,
        }, -- end of [249]
        [250] = 
        {
            ["combos"] = 
            {
                [1] = 
                {
                    ["key"] = "JOY_BTN28",
                }, -- end of [1]
            }, -- end of ["combos"]
            ["up"] = 636,
            ["name"] = "LAAP Mode Selector (ALT)",
            ["category"] = "LASTE Control Panel",
            ["down"] = 387,
        }, -- end of [250]
        [251] = 
        {
            ["combos"] = 
            {
                [1] = 
                {
                    ["key"] = "JOY_BTN24",
                }, -- end of [1]
            }, -- end of ["combos"]
            ["up"] = 1051,
            ["name"] = "EAC Arm/Off",
            ["category"] = "LASTE Control Panel",
            ["down"] = 1050,
        }, -- end of [251]
        [252] = 
        {
            ["combos"] = 
            {
                [1] = 
                {
                    ["key"] = "JOY_BTN25",
                }, -- end of [1]
            }, -- end of ["combos"]
            ["up"] = 1053,
            ["name"] = "RDR ALTM Normal/Disable",
            ["category"] = "LASTE Control Panel",
            ["down"] = 1052,
        }, -- end of [252]
        [253] = 
        {
            ["combos"] = 
            {
                [1] = 
                {
                    ["key"] = "JOY_BTN21",
                }, -- end of [1]
            }, -- end of ["combos"]
            ["up"] = 1054,
            ["name"] = "Landing Gear Warning Silence",
            ["category"] = "Engine Control Panel",
            ["down"] = 1054,
        }, -- end of [253]
        [254] = 
        {
            ["combos"] = 
            {
                [1] = 
                {
                    ["key"] = "JOY_BTN20",
                }, -- end of [1]
            }, -- end of ["combos"]
            ["up"] = 1056,
            ["name"] = "APU Start/Off",
            ["category"] = "Engine Control Panel",
            ["down"] = 1055,
        }, -- end of [254]
        [255] = 
        {
            ["combos"] = 
            {
                [1] = 
                {
                    ["key"] = "JOY_BTN31",
                }, -- end of [1]
            }, -- end of ["combos"]
            ["up"] = 1058,
            ["name"] = "Left Engine Oper Ign / Norm",
            ["category"] = "Engine Control Panel",
            ["down"] = 1057,
        }, -- end of [255]
        [256] = 
        {
            ["combos"] = 
            {
                [1] = 
                {
                    ["key"] = "JOY_BTN18",
                }, -- end of [1]
            }, -- end of ["combos"]
            ["up"] = 1058,
            ["name"] = "Left Engine Oper Motor / Norm",
            ["category"] = "Engine Control Panel",
            ["down"] = 1059,
        }, -- end of [256]
        [257] = 
        {
            ["combos"] = 
            {
                [1] = 
                {
                    ["key"] = "JOY_BTN32",
                }, -- end of [1]
            }, -- end of ["combos"]
            ["up"] = 1061,
            ["name"] = "Right Engine Oper Ign / Norm",
            ["category"] = "Engine Control Panel",
            ["down"] = 1060,
        }, -- end of [257]
        [258] = 
        {
            ["combos"] = 
            {
                [1] = 
                {
                    ["key"] = "JOY_BTN19",
                }, -- end of [1]
            }, -- end of ["combos"]
            ["up"] = 1061,
            ["name"] = "Right Engine Oper Motor / Norm",
            ["category"] = "Engine Control Panel",
            ["down"] = 1062,
        }, -- end of [258]
        [259] = 
        {
            ["combos"] = 
            {
                [1] = 
                {
                    ["key"] = "JOY_BTN16",
                }, -- end of [1]
            }, -- end of ["combos"]
            ["up"] = 1064,
            ["name"] = "Left Engine Fuel Flow Norm/Override",
            ["category"] = "Engine Control Panel",
            ["down"] = 1063,
        }, -- end of [259]
        [260] = 
        {
            ["combos"] = 
            {
                [1] = 
                {
                    ["key"] = "JOY_BTN17",
                }, -- end of [1]
            }, -- end of ["combos"]
            ["up"] = 1066,
            ["name"] = "Right Engine Fuel Flow Norm/Override",
            ["category"] = "Engine Control Panel",
            ["down"] = 1065,
        }, -- end of [260]
    }, -- end of ["keyCommands"]
    ["forceFeedback"] = 
    {
        ["trimmer"] = 1,
        ["swapAxes"] = false,
        ["shake"] = 0.5,
    }, -- end of ["forceFeedback"]
    ["axisCommands"] = 
    {
        [1] = 
        {
            ["combos"] = 
            {
                [1] = 
                {
                    ["key"] = "JOY_X",
                    ["reformers"] = 
                    {
                    }, -- end of ["reformers"]
                }, -- end of [1]
            }, -- end of ["combos"]
            ["action"] = 2002,
            ["name"] = "Roll",
            ["category"] = "Axis Commands",
        }, -- end of [1]
        [2] = 
        {
            ["combos"] = 
            {
                [1] = 
                {
                    ["key"] = "JOY_Y",
                    ["reformers"] = 
                    {
                    }, -- end of ["reformers"]
                }, -- end of [1]
            }, -- end of ["combos"]
            ["action"] = 2001,
            ["name"] = "Pitch",
            ["category"] = "Axis Commands",
        }, -- end of [2]
        [12] = 
        {
            ["combos"] = 
            {
                [1] = 
                {
                    ["key"] = "JOY_RZ",
                    ["reformers"] = 
                    {
                    }, -- end of ["reformers"]
                }, -- end of [1]
            }, -- end of ["combos"]
            ["action"] = 2005,
            ["name"] = "Throttle Left",
            ["category"] = "Axis Commands",
        }, -- end of [12]
        [13] = 
        {
            ["combos"] = 
            {
                [1] = 
                {
                    ["key"] = "JOY_Z",
                    ["reformers"] = 
                    {
                    }, -- end of ["reformers"]
                }, -- end of [1]
            }, -- end of ["combos"]
            ["action"] = 2006,
            ["name"] = "Throttle Right",
            ["category"] = "Axis Commands",
        }, -- end of [13]
		[18] = 
        {
            ["combos"] = 
            {
                [1] = 
                {
                    ["key"] = "JOY_RY",
                    ["reformers"] = 
                    {
                    }, -- end of ["reformers"]
                }, -- end of [1]
            }, -- end of ["combos"]
            ["action"] = 2034,
            ["name"] = "HOTAS Slew Vertical",
            ["category"] = "Axis Commands",
        }, -- end of [18]
        [17] = 
        {
            ["combos"] = 
            {
                [1] = 
                {
                    ["key"] = "JOY_RX",
                    ["reformers"] = 
                    {
                    }, -- end of ["reformers"]
                }, -- end of [1]
            }, -- end of ["combos"]
            ["action"] = 2033,
            ["name"] = "HOTAS Slew Horizontal",
            ["category"] = "Axis Commands",
        }, -- end of [17]G
    }, -- end of ["axisCommands"]
} -- end of options
function layout()
return options
end


And with that, I'll wrap up this already way-too-long post. I'm not so sure this is as clear as I'd intended, but nonetheless I hope some new TARGET users find it useful. I know I sure would have!

Last edited by GregP; 11/08/11 11:12 PM.

i7-9700K / MSI MPG Z390 Gaming PRO Carbon AC / 64GB DDR4 / RTX 3080 Ti / TrackIR5 / MFG Crosswind Rudder Pedals / VKB GF MkIII + MCG Pro
#3928384 - 03/22/14 05:30 AM Re: New Warthog? Here's the TARGET tutorial I wish I'd had. [Re: GregP]  
Joined: May 2002
Posts: 2,290
WWSandMan Offline
WW: Online Since 1992
WWSandMan  Offline
WW: Online Since 1992
Member

Joined: May 2002
Posts: 2,290
Mankato, Minnesota, U.S.A.
Just adding a "thank you" for the information above. I've found it to be quite useful, even 2+ years after the original posting. smile

#3928431 - 03/22/14 10:32 AM Re: New Warthog? Here's the TARGET tutorial I wish I'd had. [Re: GregP]  
Joined: Mar 2003
Posts: 3,922
Paradaz Offline
Senior Member
Paradaz  Offline
Senior Member

Joined: Mar 2003
Posts: 3,922
UK
I'll second that.......A great post and very clear. Hugely helpful, thanks.


On the Eighth day God created Paratroopers and the Devil stood to attention.
#3929043 - 03/24/14 01:51 AM Re: New Warthog? Here's the TARGET tutorial I wish I'd had. [Re: GregP]  
Joined: Feb 2014
Posts: 28
TigerL0rd Offline
Junior Member
TigerL0rd  Offline
Junior Member

Joined: Feb 2014
Posts: 28
Quebec
that was very useful, thanks!

#3977666 - 07/07/14 06:54 PM Re: New Warthog? Here's the TARGET tutorial I wish I'd had. [Re: GregP]  
Joined: Jul 2014
Posts: 3
maestro72x Offline
Junior Member
maestro72x  Offline
Junior Member

Joined: Jul 2014
Posts: 3
any ideas on how to map the TDC slew to the throttle mini joystick?

#3983864 - 07/21/14 01:36 PM Re: New Warthog? Here's the TARGET tutorial I wish I'd had. [Re: GregP]  
Joined: Jan 2009
Posts: 5,699
NavyNuke99 Offline
One Man Wolfpack
NavyNuke99  Offline
One Man Wolfpack
Hotshot

Joined: Jan 2009
Posts: 5,699
Raleigh, NC
Maestro, if you're talking about in DCS: World, that'll be under the axis options... I'll look at exactly which options they're called when I get home this evening.


" And any man who may be asked in this century what he did to make his life worthwhile, I think can respond with a good deal of pride and satisfaction: 'I served in the United States Navy.'"- John F. Kennedy

"NUKE-ular. It's pronounced NUKE-ular."- Homer Simpson

AMD FX-8350 Vishera @ 4.0 Ghz
ASUS Sabertooth 990FX R2.0
2x 8GB Corsair Vengeance DDR3 @ 1600
Sapphire Radeon HD 7850 2GB
CM Storm Series Trooper
Samsung 840 series 500 GB OS/ Game drive
WD Green 2TB Media Drive
Thermaltake Black Widow 850W PSU
#4001926 - 08/28/14 03:33 PM Re: New Warthog? Here's the TARGET tutorial I wish I'd had. [Re: GregP]  
Joined: Dec 2003
Posts: 2,975
Brun Offline
Senior Member
Brun  Offline
Senior Member

Joined: Dec 2003
Posts: 2,975
London Town
I would add a suggestion that since the DX buttons are limited, it's a good idea to prioritise those for commands that have to be held. Trigger and weapon release are obvious examples, but for the A-10 I'd also include the many switches which have short/long functionality.

It's been a while since I used TARGET, but I think I'm right in saying that by it doesn't actually send held down keys unless you specifically tell it to. So for example you could map a button to 'g' for landing gear and even if you hold it down DCS will only see it pressed briefly. Will have to check that, and correct it if it's not the case.

#4003920 - 09/02/14 11:04 AM Re: New Warthog? Here's the TARGET tutorial I wish I'd had. [Re: GregP]  
Joined: Dec 2003
Posts: 2,975
Brun Offline
Senior Member
Brun  Offline
Senior Member

Joined: Dec 2003
Posts: 2,975
London Town
Seems I was wrong about the default behaviour. Key presses are held unless you put 'PULSE+' in front of them. Foxy was the other way round.

That at least means my first point is more relevant smile

#4571063 - 06/05/21 03:37 PM Re: New Warthog? Here's the TARGET tutorial I wish I'd had. [Re: GregP]  
Joined: Jul 2013
Posts: 1
HorNet505 Offline
Junior Member
HorNet505  Offline
Junior Member

Joined: Jul 2013
Posts: 1
germany, Dusseldorf
hey Greg
I seem to miss something. I got the grey throttle lever as an axis but I don'T know how to assign it in DCS right now.
Your old code thows back an error, I guess he doesn't like the "Zoom_in_slow" alias, used.

// Assign zoom control to gray throttle friction lever
KeyAxis(&Throttle,THR_FC,0,AXMAP2(LIST(0,40,60,100),Zoom_in_slow,0,Zoom_out_slow));

#4571084 - 06/05/21 09:50 PM Re: New Warthog? Here's the TARGET tutorial I wish I'd had. [Re: HorNet505]  
Joined: Jul 2016
Posts: 61
Drakoz Offline
Junior Member
Drakoz  Offline
Junior Member

Joined: Jul 2016
Posts: 61
Originally Posted by HorNet505
hey Greg
I seem to miss something. I got the grey throttle lever as an axis but I don'T know how to assign it in DCS right now.
Your old code thows back an error, I guess he doesn't like the "Zoom_in_slow" alias, used.

// Assign zoom control to gray throttle friction lever
KeyAxis(&Throttle,THR_FC,0,AXMAP2(LIST(0,40,60,100),Zoom_in_slow,0,Zoom_out_slow));


HorNet505, you have to assign Zoom_out_slow as a macro somewhere in your .ttm file. But I think (based on your comments) you know that. Is there an issue with the way Zoom_out_slow is defined? GregP would have defined this is his DCSA10Cv2.ttm file, but he did not include that file in his examples above. So if you haven't created a macro for Zoom_out_slow, you will get an error.

It should be something like this:
define Zoom_out_slow 'a'

Where the letter a will be pressed when Zoom_out_slow is called. But I think I am missing what the actual issue you are having is, so please clarify.


Moderated by  RacerGT 

Quick Search
Recent Articles
Support SimHQ

If you shop on Amazon use this Amazon link to support SimHQ
.
Social


Recent Topics
Carnival Cruise Ship Fire....... Again
by F4UDash4. 03/26/24 05:58 PM
Baltimore Bridge Collapse
by F4UDash4. 03/26/24 05:51 PM
The Oldest WWII Veterans
by F4UDash4. 03/24/24 09:21 PM
They got fired after this.
by Wigean. 03/20/24 08:19 PM
Grown ups joke time
by NoFlyBoy. 03/18/24 10:34 PM
Anyone Heard from Nimits?
by F4UDash4. 03/18/24 10:01 PM
RIP Gemini/Apollo astronaut Tom Stafford
by semmern. 03/18/24 02:14 PM
10 years after 3/8/2014
by NoFlyBoy. 03/17/24 10:25 AM
Copyright 1997-2016, SimHQ Inc. All Rights Reserved.

Powered by UBB.threads™ PHP Forum Software 7.6.0