Etape 1 : Création du script
Pour ceux qui utilise déja Target script editor, vous pouvez passer à l'étape suivante. Pour les ceux qui passent par Target GUI, il faut convertir votre profil.
Pour ce faire lancez Target GUI, sélectionnez votre profil, cliquez sur edit, puis cliquez next jusqu'à arriver dans la page de configuration. Dans la zone "2 Assign Parameters", cliquez en bas sur le bouton "view script". Un fichier texte s'ouvre, gardez le de coté pour l'étape suivant. Fermez Target GUI.
Etape 2 : Modification du script
Lancez Target script editor. Si vous êtes directement allez à l'étape 2, ouvrez votre script habituel. Sinon cliquez sur "menu", puis "new" et sur "Target code (.tmc)", vous pouvez nommer votre script. Il n'y a plus qu'a coller le texte du fichier ouvert précédemment. Vous devriez vous retrouvez avec quelque chose d'approchant (c'est mon profil perso, pour ceux qui ont extrait via target gui, ce sera plus condensé )
Pour des raisons techniques, il n'est pas possible d'assigner directement une courbe à un bouton ou interrupteur. Nous allons donc créer les courbes séparément, puis les appeler lorsque l'on en aura besoin.include "target.tmh"
int listXC, listYC, listXR, listYR, main()
{
Exclude(&HCougar);
Exclude(&T16000);
Exclude(&LMFD);
Exclude(&RMFD);
if(Init(&EventHandle)) return 1;
listXC = LIST(0,0, 10,10, 20,20, 30,30, 40,40, 50,50, 60,60, 70,70, 80,80, 90,90, 100,100);
listYC = LIST(0,0, 10,10, 20,20, 30,30, 40,40, 50,50, 60,60, 70,70, 80,80, 90,90, 100,100);
listXR = LIST(0,0, 10,10, 20,20, 30,30, 40,40, 50,50, 60,60, 70,70, 80,80, 90,90, 100,100);
listYR = LIST(0,25, 10,30, 20,35, 30,40, 40,45, 50,50, 60,55, 70,60, 80,65, 90,70, 100,75);
//axis mapping Warthog Joystick
MapAxis(&Joystick, JOYX, DX_X_AXIS, AXIS_NORMAL, MAP_ABSOLUTE);
MapAxis(&Joystick, JOYY, DX_Y_AXIS, AXIS_NORMAL, MAP_ABSOLUTE);
MapAxis(&Throttle, THR_LEFT, DX_ZROT_AXIS, AXIS_NORMAL, MAP_ABSOLUTE);
MapAxis(&Throttle, THR_RIGHT, DX_Z_AXIS, AXIS_NORMAL, MAP_ABSOLUTE);
MapAxis(&Throttle, THR_FC, DX_SLIDER_AXIS, AXIS_NORMAL, MAP_ABSOLUTE);
SetShiftButton(&Joystick, 0, &Throttle, PSF, PSB);
// --- Mapping Manche
// --- Gachette
MapKey(&Joystick, TG1, SPC); // === tir canons + mitrailleuses
MapKey(&Joystick, TG2, 0);
// --- Bouton coté droit
MapKey(&Joystick, S1, 0); //
// --- Bouton rouge
MapKey(&Joystick, S2, PULSE+ 'i'); // === magic II select
// --- Petit doigt
MapKeyUMD(&Joystick, S3, PULSE+ 's', PULSE+ 's', PULSE+ USB[0x31]); // === NWS IFF
// --- Palette
MapKeyUMD(&Joystick, S4, PULSE+ L_ALT+ 'a', PULSE+ L_ALT+ 'a', PULSE+ F1); // === autopilot standby
// --- Trim
MapKey(&Joystick, H1U, ';'); // === curseur radar bas
MapKey(&Joystick, H1D, '.'); // === curseur radar haut
MapKey(&Joystick, H1L, ','); // === curseur radar gauche
MapKey(&Joystick, H1R, '/'); // === curseur radar droite
// --- TMS
MapKey(&Joystick, H2U, PULSE+ ENT); // === target lock
MapKey(&Joystick, H2D, 0);
MapKey(&Joystick, H2L, PULSE+ '-'); // === portée radar -
MapKey(&Joystick, H2R, PULSE+ '='); // === portée radar +
// --- DMS
MapKey(&Joystick, H3U, PULSE+ L_CTL+ '4'); // === selection emport 3
MapKey(&Joystick, H3D, PULSE+ L_CTL+ '1'); // === selection mode canon
MapKey(&Joystick, H3L, PULSE+ L_CTL+ '3'); // === selection emport 2
MapKey(&Joystick, H3R, PULSE+ L_CTL+ '5'); // === selection emport 4
// --- CMS
MapKey(&Joystick, H4U, DEL); // === largage flares
MapKey(&Joystick, H4D, INS); // === largage chaffs
MapKey(&Joystick, H4L, PULSE+ 'v'); // === CAC mode
MapKey(&Joystick, H4R, PULSE+ 'o'); // === Ground Avoidance mode
MapKey(&Joystick, H4P, PULSE+ 'd'); // === mode deselect
// --- Mapping Manette
// --- Flaps
MapKey(&Throttle, FLAPU, 0);
MapKeyR(&Throttle, FLAPU, 0);
MapKey(&Throttle, FLAPM, 0);
MapKey(&Throttle, FLAPD, 0);
MapKeyR(&Throttle, FLAPD, 0);
// --- EAC
MapKey(&Throttle, EACON, PULSE+ '0' ); // === MASTER ARM
MapKey(&Throttle, EACOFF, PULSE+ '0'); // === MASTER ARM
// --- Radar Alt
MapKey(&Throttle, RDRNRM, PULSE+ EXEC("SetCustomCurve(&Joystick, JOYX, listXR);""SetCustomCurve(&Joystick, JOYY, listYR);")); // === Courbe joystick ravitaillement
MapKey(&Throttle, RDRDIS, PULSE+ EXEC("SetCustomCurve(&Joystick, JOYX, listXC);""SetCustomCurve(&Joystick, JOYY, listYC);")); // === Courbe joystick combat
// --- Autopilot on/off
MapKey(&Throttle, APENG, 0); //
MapKey(&Throttle, APDIS, 0);
// --- Autopilot switch
MapKey(&Throttle, APPAT, PULSE+ L_CTL+ 'g'); // === trains d'atterrissage
MapKey(&Throttle, APAH, 0);
MapKey(&Throttle, APALT, PULSE+ L_SHIFT+ 'g'); // === trains d'atterrissage
// --- Alarme de train
MapKey(&Throttle, LDGH, PULSE+ L_ALT+ F10); // === enregistrement video SHADOW PLAY
// --- Moteur gauche
MapKey(&Throttle, EOLIGN, PULSE+ L_WIN+ HOME); // --- démarrage moteur
MapKey(&Throttle, EOLNORM, 0);
MapKey(&Throttle, EOLMOTOR, PULSE+ L_WIN+ END); // --- arret moteur
// --- Moteur droit
MapKey(&Throttle, EORIGN, 0); //
MapKey(&Throttle, EORNORM, 0);
MapKey(&Throttle, EORMOTOR, 0); //
// --- APU
MapKey(&Throttle, APUON, 0);
MapKey(&Throttle, APUOFF, 0);
// --- Debit carbu gauche
MapKey(&Throttle, EFLNORM, PULSE+ L_CTL+ L_SHIFT+ 'c'); // --- FBW Limiter
MapKey(&Throttle, EFLOVER, PULSE+ L_CTL+ L_SHIFT+ 'c'); // --- FBW Limiter
// --- Debit carbu droit
MapKey(&Throttle, EFRNORM, PULSE+ L_CTL+ L_SHIFT+ 'w'); // --- FBW Vrille
MapKey(&Throttle, EFROVER, PULSE+ L_CTL+ L_SHIFT+ 'w'); // --- FBW Vrille
// --- Speedbrake
MapKey(&Throttle, SPDF, PULSE+ 'b'); // === aerofreins
MapKeyR(&Throttle, SPDF, PULSE+ 'b');
MapKey(&Throttle, SPDM, 0);
MapKey(&Throttle, SPDB, PULSE+ L_SHIFT+ 'b');
MapKeyR(&Throttle, SPDB, PULSE+ L_CTL+ 'b');
// --- Mic
MapKey(&Throttle, MSP, 0); // --- teamspeak
MapKey(&Throttle, MSU, 0);
MapKey(&Throttle, MSD, 0);
MapKey(&Throttle, MSL, 0);
MapKey(&Throttle, MSR, 0);
// --- Coolie
MapKey(&Throttle, CSU, 0);
MapKey(&Throttle, CSD, 0);
MapKey(&Throttle, CSL, 0);
MapKey(&Throttle, CSR, 0);
// --- Bouton gaz
MapKey(&Throttle, LTB, SEQ(EXEC("SetCustomCurve(&Joystick, JOYX, listXR);""SetCustomCurve(&Joystick, JOYY, listYR);"),EXEC("SetCustomCurve(&Joystick, JOYX, listXC);""SetCustomCurve(&Joystick, JOYY, listYC);")));
// --- Pinky
MapKey(&Throttle, PSF, 0);
MapKey(&Throttle, PSB, 0);
MapKey(&Throttle, PSM, 0);
// --- China
MapKey(&Throttle, CHF, 0);
MapKey(&Throttle, CHM, 0);
MapKey(&Throttle, CHB, 0);
// --- Boat
MapKey(&Throttle, BSF, 0);
MapKey(&Throttle, BSM, 0);
MapKey(&Throttle, BSB, 0);
}
int EventHandle(int type, alias o, int x)
{
DefaultMapping(&o, x);
}
Il y a 3 étapes à réaliser pour créer et utiliser une courbe :
- déclarer les listes
- définition des listes
- utilisation des listes de courbes
Etape 3 : Déclaration des listes
A ce stade il faudra faire attention à bien respecter, ponctuations, minuscules et majuscules. La moindre erreur pourra entrainer des erreurs de compilation ou d’exécution. On verra cela plus loin.
Au tout début du fichier vous avez une ligne comme celle ci :
Modifiez la de la sorte :int main()
Etape 4 : définition des listesint listXC, listYC, listXR, listYR, main()
Un peu plus bas dans le texte cherchez cette ligne :
et rajoutez ces 4 lignes sous celle ci. Vous devez avoir ceci:if(Init(&EventHandle)) return 1;
Donc ici j'ai déclarer mes courbes, XC et YC pour le combat et XR et YR pour le ravitaillement. Pour ceux qui veulent les modifier, je vous explique le principe.if(Init(&EventHandle)) return 1;
listXC = LIST(0,0, 10,10, 20,20, 30,30, 40,40, 50,50, 60,60, 70,70, 80,80, 90,90, 100,100);
listYC = LIST(0,0, 10,10, 20,20, 30,30, 40,40, 50,50, 60,60, 70,70, 80,80, 90,90, 100,100);
listXR = LIST(0,0, 10,10, 20,20, 30,30, 40,40, 50,50, 60,60, 70,70, 80,80, 90,90, 100,100);
listYR = LIST(0,25, 10,30, 20,35, 30,40, 40,45, 50,50, 60,55, 70,60, 80,65, 90,70, 100,75);
Il y a une série de paires de chiffres (0,0, 10,10, 20,20, 30,30, etc ) dans chaque paires le premier chiffre correspond à la position physique de l'axe, et le second à la réponse qui est renvoyé.
La position 50 correspond au milieu de l'axe. 0 et 100 en sont les extrémités, 25 et 75 mi course depuis le milieu dans une direction et dans l'autre.
Par exemple dans les 3 premières listes, qui sont des courbes linéaires, à la position physique 0, je renvoi la valeur 0 etc ...
Concrètement sur l'axe de tangage, si je tire ou pousse le manche à fond, la réponse est envoyé est je tire ou pousse le manche à fond.
La quatrième liste elle est différente.
Si au milieu je suis toujours à 50,50, aux extrémités je suis à 0,25, et 100,75. Ce qui correspond à une position physique 0 je renvoie la valeur 25. Et à 100, la valeur 75.
Cela veut dire que si je tire ou pousse le manche à fond, la réponse renvoyé sera je tire ou pousse le manche qu'à la moitie de sa course.
]Il faudra faire attention, car les courbes programmé ici et celle que vous avez paramétré dans le jeu, s'additionneront. Si vous avez des courbes spécifiques dans le jeu, il faut faire attention.
Ici nous ne modifions que l'axe de tangage. il faudra dans le jeu mettre une zone linéaire. Pour l'axe de roulis, qui n'est pas modifié, il faut faire l'inverse, garder sa courbe dans le jeu et faire une courbe linéaire dans le script ( ce qui est le cas dans mes réglages ).
Etape 5 : utiliser les listes de courbes
Maintenant il faut faire un choix. A savoir sur quel bouton ou interrupteur assigner le changement de courbes.
Si vous choisissez un interrupteur les 2 positions de l'interrupteur lanceront l'une des deux courbes. Par exemple l'interrupteur RDR ALTM, en position NRM pour les courbes combat et en position DIS pour le ravitaillement.
Si vous choisissez un bouton. Il faudra créer une séquence, qui à chaque fois que vous appuierez dessus, alternera entre les deux réglages.Je vous expliquerez les deux.
Une fois votre bouton ou interrupteur choisis, il faut trouver .... son nom. Si vous ne le connaissez pas lancez Target GUI, et dans la zone "How do I ?" il y a des liens vers deux fichier pdf. Warthog throttle buttons names et Warthog joystick buttons name. Cherchez y le nom de votre bouton ou interrupteur.
- Méthode interrupteur
Une fois repérer dans votre script vos 2 boutons, vous pouvez désactiver ces lignes en ajoutant // à l'avant de la ligne.
Dans mon cas j'ai choisis l'interrupteur RDR ALTM. Je vais donc avoir ces lignes à rajouter. Avec au dessus mes anciennes lignes simplement désactiver.
- Méthode bouton//MapKeyUMD(&Throttle, RDRNRM, PULSE+ L_WIN+ '4', PULSE+ L_WIN+ '4', 0);
//MapKeyUMD(&Throttle, RDRDIS, PULSE+ L_WIN+ '3', PULSE+ L_WIN+ '3', 0);
MapKey(&Throttle, RDRNRM, PULSE+ EXEC("SetCustomCurve(&Joystick, JOYX, listXR);""SetCustomCurve(&Joystick, JOYY, listYR);")); // === Courbe joystick ravitaillement
MapKey(&Throttle, RDRDIS, PULSE+ EXEC("SetCustomCurve(&Joystick, JOYX, listXC);""SetCustomCurve(&Joystick, JOYY, listYC);")); // === Courbe joystick combat
Ici j'ai choisis le bouton rouge sur la manette des gaz.
Le premier appui me fait basculer en mode ravitaillement, le second en mode combat, le troisième retour en mode ravitaillement, etc ...
N'oubliez pas le double // pour garder l'ancienne ligne. On ne sait jamais
MapKey(&Throttle, LTB, SEQ(EXEC("SetCustomCurve(&Joystick, JOYX, listXR);""SetCustomCurve(&Joystick, JOYY, listYR);"),EXEC("SetCustomCurve(&Joystick, JOYX, listXC);""SetCustomCurve(&Joystick, JOYY, listYC);")));
Etape 6 : sauvegarde et utilisation
A ce stade il ne reste plus qu'a compiler ( sauvegarder ) votre script. Cliquez sur le bouton "Compile". Si il n'y a pas d'erreur d'écriture, vous aurez le message "Compile Succeeded" dans l'onglet du bas ( compilateur ).
Mais cela ne veut pas dire que le script soit capable de s’exécuter. Pour cela cliquez sur "Run". Si le message "main returned 0" apparait. Félicitations tout fonctionne.
Si ce n'est pas le cas, le compilateur vous renverra vers la ligne contenant l'erreur.
Désormais il faudra lancé votre script via le Target script editor, en utilisant le bouton "run". Je crois qu'il est possible d'associé le script à un exe dans Target GUI, mais je ne jamais essayer.
Vous pouvez toujours modifier votre profil d'origine dans Target GUI, mais il vous faudra refaire cette manip, si vous le modifiez. Je ne pense pas qu'il existe de moyen de remonter un script vers Target GUI.