PDA

View Full Version : Scripting Assistance for Falcon 4 SP3/4 Profile


Boomer
09-09-2004, 09:34 PM
I’m new to the CH-Hangar, so “hello” to all. This forum is what tipped the balance in my HOTAS selection from TM to CH. You’re a great community- I hope I can add to it.

On similar lines to some earlier work by Kamu & JNOV, I took a shot at creating a Jagtang-like profile for F4 SP3/4. I’m overall satisfied with the profile, but I can not get a few scripting issues to work out.

With perspective, these issues really don’t affect game play but I can’t let them go. Consider this an experiential learning activity for CMS scripting. :D

Okay, here are the issues:

(1) This one should be easy: I can’t get one of Bob Church’s scripts to work (lines 70-96). This script should allow for FS POV down to perform as “trim reset” when double-clicked. I changed the cms.bX, AX and dX variables to work around the rest of the profile. Somewhere along the way, I killed the script. Another set of eyes might see it?

(2) The CMS (FS Hat 3) for Jagstang has some interesting scripting that I’m at a loss on. Two sub-issues:

(2.1)CMS right is ECM Off / CMS down is ECM On: this shouldn’t be hard but I can’t get a script to work to check B2 variable for an on/off status of the ECM (there is no discrete on/off code just a toggle). (This same challenge shows up later.)
Algorithm:
If CMS right is pushed
Â* If ECM is on (B2 = 1)
Â* Â* Â*cms.b31 (ECM on/off) is true
Â* Â* Â*set B2 to 0 (ECM off)
If CMS down is pushed
Â* If ECM is off (B2 = 0)
Â* Â* Â*cms.b31 (ECM on/off) is true
Â* Â* Â*set B2 to 1 (ECM on)

(2.2)Shift-CMS in any direction changes ECM program discretely. This one’s the tough nut. No joy in anything I’ve tried.
Algorithm
A10 = analog variable for ECM program setting. Â*Values 1-4 (default 1)
A11 = analog variable for ECM select setting. Values 1-4 (default 0)
A12 = analog variable for difference from ECM program to ECM select. Values -3 – 3 (default 0)

If shifted js1.b13-16
Â*Switch
Â* Â*Js1.b13 set A11 (ECM select) to 1
Â* Â*Js1.b14 set A11 to 2
Â* Â*Js1.b15 set A11 to 3
Â* Â*Js1.b16 set A11 to 4
Â*
Â*Subtract A11 (ECM select) from A10 (ECM program) to create A12 (difference)
Â* Â*Switch
Â* Â* Â*A12 = 0 do nothing
Â* Â* Â*A12 = -3 cms.b33 (ECM program decrease) three times
Â* Â* Â*A12 = -2 cms.b33 two times
Â* Â* Â*A12 = -1 cms.b33 once
Â* Â* Â*A12 = 1 cms.b34 (ECM program increase) once
Â* Â* Â*A12 = 2 cms.b34 twice
Â* Â* Â*A12 = 3 cms.b34 three times
Â* Â* Â* Â*
Â*Set A10 equal to A11 (new value for ECM program settings)

(3) Jagstang has state dependent view controls assigned to the DMS (FS Hat Two). As an example, DMS right is either "Wide/Normal Cockpit" in 2D and "Padlock Next" in 3D. This solution is probably a modification of the script used for issue 2.1 above (ECM On/Off). By this I mean, its simply a button press determination based on a state variable. However, the state of 3D/2D (B1 bit variable) will have some interesting triggering events which will take some work.

(4) I'd like to set a global variable for the presence of TrackIR, so another user could disable the TIR specific button presses. Once again, this is probably solved with a similar script as 2.1 and 3.

Thanks for the help.

MichaelCHProd
09-09-2004, 11:03 PM
oh my. Where is JNOV when you need him :)

My scripting is lacking so I will ask Bob to step in.... Bob?

Bob Church
10-09-2004, 03:18 AM
Hi Boomer,

I'll have to dig into some of the other bits a little, I'm not sure I understand exactly what you're trying to do, but I suspect that the main problem with the double-click piece of the script is in the end sequence:

sequence
wait(( cms.b30 OR cms.b7 ) and NOT d201 );
delay( 2 );
cms.b7 = FALSE;
cms.b2 = FALSE;
endSequence

The "cms.b2" should be "cms.b30", you want to clear the same bits that show up in the "wait" statement. Whether that's rippling through and causing some problems elsewhere I don't know. I'm sort of busy this evening, I'll try to get a look at the rest of it in the next day or so, but maybe that will help move things along a little.

- Bob

The StickWorks
http://www.stickworks.com

Boomer
10-09-2004, 08:41 PM
Thanks Bob, that should do it. I'll try the fix when I get home.

With regard to the scripting for issue 2.1 ECM on/off, I played around with it a little at the office (like you've never done it :D ).

How about this?

{note some changes to bit variables, I gave myself a little more room for growth}

// Hat Three CMS RIGHT
timer (period, d13, A1) = js1.b14;
Â*sequence
Â* Â*wait (d13 and not js1.b14);
Â* Â* Â*if ( B10 ) then Â* Â* Â* Â* Â* Â* Â* Â* Â*// if ecm state is on
Â* Â* Â* Â*sequence
Â* Â* Â* Â* Â*cms.b31 = true; Â* Â* Â* Â* Â* // turn ecm off
Â* Â* Â* Â* Â*delay (2);
Â* Â* Â* Â* Â*cms.b31 = false;
Â* Â* Â* Â* Â*B10 = False; Â* Â* Â* Â* Â* Â* Â* Â*// set ecm state off
Â* Â* Â* Â*endsequence Â*****
Â* Â* Â*endIf
endsequence

//****Hat Three CMS DOWN / BACK
timer (period, d15, A1) = js1.b15;
Â*sequence
Â* Â*wait (d15 and not js1.b15);
Â* Â* Â*if ( not (B10)) then Â* Â* Â* Â* Â* // if ecm state is off
Â* Â* Â* Â*sequence
Â* Â* Â* Â* Â*cms.b31 = true; Â* Â* Â* Â* Â* // turn ecm on
Â* Â* Â* Â* Â*delay (2);
Â* Â* Â* Â* Â*cms.b31 = false;
Â* Â* Â* Â* Â*B10 = True; Â* Â* Â* Â* Â* Â* Â* Â* // set ecm state on
Â* Â* Â* endsequence Â*
Â* Â* endIf Â* Â*****
Â*endsequence****

I've uploaded the change. It compiles but I can't check it out yet- no HOTAS at work (fortunately or I'd get nothing done) so I'll try it this evening.

JNOV
10-09-2004, 10:44 PM
Hi Boomer:

I actually went through Jag's TM code in some detail and tried to make as close a copy as I could given the hardware differences between Cougar and CH's FS/PT. I think I was pretty successful, but I don't like it. He had to do what he did with his various time-parsing schemes (i.e., quick-click vs. hold vs. double click), but there really is no need for that sort of thing here. Nonetheless, it was an interesting exercise :)

Here are some comments on your numbered points:

1. Here's my scripting for the POV hat, which seems to work as expected (I'm sure the double-click logic is not as efficient and clean as possible, but it works):

// ================================================== ================================
// Fighterstick POV Hat (TRIM)
// Bits: cms.b2-cms.b12
// Timers: d2-d4
// variables: a1
//
// 1. Pan Views
// 2. Hold L/R: Check Six
// 3. Shift: Trim
// 4. Double down: Reset Trim
// ================================================== ================================

///////////////////////////////////////////////////////////////////
// Up
cms.b2 = s0 and js1.b25; // Pan View Up
cms.b3 = s1 and js1.b25; // Trim Nose Down
///////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////
// Down
// Shift 1
cms.b5 = s1 and js1.b29; // Trim Nose Up
// Double click parsing: Pan view down/Reset Trim
timer(period, d4, 5) = js1.b29 and not d4 and s0;
sequence
wait(d4 and js1.b29);
Clicks = Clicks + 1;
endsequence
sequence
wait(not d4 and [Clicks == 1]);
Clicks = 0;
cms.b4 = TRUE; // Pan View Down
delay(3);
cms.b4 = FALSE;
endsequence
sequence
wait(not d4 and [Clicks == 2]);
Clicks = 0;
cms.b12 = TRUE; // Reset trim
delay(3);
cms.b12 = FALSE;
endsequence
if (not d4 and [Clicks > 2]) then
Clicks = 0;
endif
////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////
// Right
// Unshifted Hold parsing
timer(period, d2, hold) = js1.b27 and s0;
sequence
wait(not d2);
cms.b6 = js1.b27; // Held: Check Six (7 o'clock)
cms.b7 = not js1.b27; // Not Held: Pan View Right
delay(3);
cms.b7 = FALSE;
endsequence
if (not js1.b27) then
cms.b6 = FALSE;
endif
// Shift 1
cms.b8 = s1 and js1.b27; // Trim roll right
////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////
// Left
// Unshifted Hold parsing
timer(period, d3, hold) = js1.b31 and s0;
sequence
wait(not d3);
cms.b9 = js1.b31; // Held: Check Six (7 o'clock)
cms.b10 = not js1.b31; // Not Held: Pan View Left
delay(3);
cms.b10 = FALSE;
endsequence
if (not js1.b31) then
cms.b9 = FALSE;
endif
// Shift 1
cms.b11 = s1 and js1.b31; // Trim roll left
////////////////////////////////////////////////////////////////////

2. Here is the CMS scripting:

// ================================================== ================================
// Fighterstick Hat #3 (CMS)
// Bits: cms.b41-cms.b56
// Timers: d9-d12
// variables: None
//
// Note: There is an interlock (X30) in Jag's profile that prevents certain
// view-modifying functions from execution for about 0.2 seconds after
// the CMS quick-click buttons are pressed. I don't know what this is for
// and have not included it here. If there proves to be a valid reason
// for the interlock, it is easy to add.
//
// Quick Click/No Shift:
// U: EWS Run Program
// R: ECM
// D: Set EWS Manual
// L: Set EWS Automatic
//
// Hold/No Shift:
// U: Cat I/III
// R: Next Steerpoint
// D: Aircraft Lights
// L: Previous Steerpoint
//
// Shift 1:
// U: Set EWS Program 1
// R: Set EWS Program 2
// D: Set EWS Program 3
// L: Set EWS Program 4
//
// Shift 2:
// U:
// R:
// D:
// L:
// ================================================== ================================

////////////////////////////////////////////////////////////////////
// Up
// Unshifted Hold parsing
timer(period, d9, hold) = js1.b13 and s0;
sequence
wait(not d9);
cms.b41 = js1.b13 and PL_mode; // Held: Cat I/III
cms.b42 = not js1.b13; // Quick: EWS Run Program
delay(3);
cms.b42 = FALSE;
endsequence
if (not js1.b9) then // Turn off held output when released
cms.b41 = FALSE;
endif
// Shift 1
cms.b43 = s1 and js1.b13; // Set EWS Program 1
// Shift 2
cms.b44 = s2 and PL_mode and js1.b13; // FREE
////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////
// Right
// Unshifted Hold parsing
timer(period, d10, hold) = js1.b14 and s0;
sequence
wait(not d10);
cms.b45 = js1.b14; // Held: Next steerpoint
cms.b46 = not js1.b14; // Quick: ECM
delay(3);
cms.b46 = FALSE;
endsequence
if (not js1.b14) then // Turn off held output when released
cms.b45 = FALSE;
endif
// Shift 1
cms.b47 = s1 and js1.b14; // Set EWS Program 2
// Shift 2
cms.b48 = s2 and js1.b14; // FREE
////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////
// Down
// Unshifted Hold parsing
timer(period, d11, hold) = js1.b15 and s0;
sequence
wait(not d11);
cms.b49 = js1.b15; // Held: Aircraft Lights
cms.b50 = not js1.b15; // Quick: Set EWS Manual
delay(3);
cms.b50 = FALSE;
endsequence
if (not js1.b15) then // Turn off held output when released
cms.b49 = FALSE;
endif
// Shift 1
cms.b51 = s1 and js1.b15; // Set EWS Program 3
// Shift 2
cms.b52 = s2 and js1.b15; // FREE
////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////
// Left
// Unshifted Hold parsing
timer(period, d12, hold) = js1.b16 and s0;
sequence
wait(not d12);
cms.b53 = js1.b16; // Held: Previous steerpoint
cms.b54 = not js1.b16; // Quick: Set EWS Automatic
delay(3);
cms.b54 = FALSE;
endsequence
if (not js1.b16) then // Turn off held output when released
cms.b53 = FALSE;
endif
// Shift 1
cms.b55 = s1 and js1.b16; // Set EWS Program 4
// Shift 2
cms.b56 = s2 and js1.b16; // FREE
////////////////////////////////////////////////////////////////////

All Jag's doing to set the program to 1-4 and to set ECM to auto or manual is to peg the dials all the way to the top or the bottom and then count off the number of pulses he needs to get to his desired setting. Here are the key sequences I use:

EWS_Set_Program_1 KEYS +LSHF +q -q +q -q +q -q -LSHF
EWS_Set_Program_2 KEYS +LSHF +q -q +q -q +q -q +w -w -LSHF
EWS_Set_Program_3 KEYS +LSHF +w -w +w -w +w -w +q -q -LSHF
EWS_Set_Program_4 KEYS +LSHF +w -w +w -w +w -w -LSHF
Set_EWS_Manual KEYS +LSHF +x -x +x -x +x -x +x -x +z -z +z -z -LSHF
Set_EWS_Auto KEYS +LSHF +x -x +x -x +x -x +x -x -LSHF

3/4. I didn't implement his DMS functionality comletely, because I use TrackIR, not padlock. Nonetheless, to factor a logical test into an output, just do something like this:

cms.bx = jsx.bx and bx;

Here's an analog test example:

cms.bx = jsx.bx and [jsx.ax < x];

Where jsx.bx is the button that you want to trigger the output if a certain logical test is satisfied. I do this all of the time in my scripts. For instance, at the top of most of my scripts, I've got a define block that looks something like:

%define s1 (js1.b4 and not js2.b4)
%define s2 (not js1.b4 and js2.b4)
%define s0 (not js1.b4 and not js2.b4)

That allows me to set up shift or mode states that are easily accessible throughout the script. You could just as easily do:

%define TrackIR b1
%define FirstScan b255

sequence
wait (jsx.bx); // key to toggle TrackIR state
TrackIR = not TrackIR;
endsequence

. . .

cms.bx = TrackIR and jsx.bx;


(I may have misunderstood your question; if so I apologize.)

I actually am just finishing up an alternative profile for F4 that, I think, is in the spirit of Jag's (i.e., I tried to preserve the F16 controller functionality to the extent possible), but with most of the time-parsing stripped out in favor of shift/mode keys. I also added a ton of functionality that he just didn't have room for with Cougar's "limited" programmability :) I'll probably post it on the appropriate forum here when I'm done testing it. Also, if you'd like to see my Jag-like profile, drop me a line and I'll send you the files.

Best regards,

JNOV

p.s. Sorry, I just noticed that all the TAB characters were stripped from the code, rendering it rather unintelligible. Again, if you'd like to see it in its entirety, I'm happy to send it along.

Boomer
10-09-2004, 11:00 PM
JNOV, you're the man. Thanks for all the notes. :cheers:

The coding I added above doesn't work at all. I'm sure the fix is the "js1.bx AND BX" version. I'll keep playing with this profile. not because mine will be better than JNOV's but because I'm interested in learning CMS.

After reading all the notes, I'll probably clear this script & start from scratch using the shift definition similar to JNOV's LOMAC profile.

It'll be an interesting weekend- probably more time programing the HOTAS than using it. Oh well, at least I can run CH Control Manager and watch football. I sure couldn't fly the jet while watching tv.

A good weekend to all.

JNOV
10-09-2004, 11:05 PM
I'm glad it was helpful Boomer! Have fun this weekend :)

- JNOV

Boomer
15-09-2004, 06:44 PM
Usually I'm pretty good at throwing myself in the deep end, with CMS I seem to have bitten off more than I can chew.

I re-did the profile after all of JNOV's notes to no avail. I've been fiddling with this for too long now and will humbly admit I'm bested by this. I've posted the new script below for those interested in seeing me drop my trousers.

The issues boil down to two things:

(1) For the life of me, I cannot get either JNOV's or Bob Church's double-click scripts to work. The code is exactly the same, but still it will not work (lines 111-134). Perhaps it has something to do with the character rate settings or the time of the period. I've gone at this thing trial & error to no avail.

(2) The state variables seem to remain locked; They will not change state in the script. The simplest example is the ECM discrete on/off coding. The ecm state variable is fixed at "false". Here's what I've got which will not work (lines 263-311):

//hat three cms right
timer ( period, d10, holdTime ) = js1.b14 and noShift;
*sequence
* *wait ( not d10 );
* * *cms.b44 = js1.b14; * * * * * * * * * // held: next steerpoint
* * *if ( not js1.b14 ) then
* * * *sequence
* * * * *if ( ecm ) then
* * * * * *sequence
* * * * * * *cms.b45 = true; * * * * * * * *// turn off ecm
* * * * * * *delay ( 3 );
* * * * * * *cms.b45 = false;
* * * * * * *ecm = not ecm;
* * * * * *endSequence
* * * * *endIf
* * * * *if ( cmdsAuto ) then
* * * * * *sequence
* * * * * * *cms.b46 = true; * * * * * * * *// manual cmds
* * * * * * *delay ( 3 );
* * * * * * *cms.b46 = false;
* * * * * * *cmdsAuto = not cmdsAuto;
* * * * * endSequence
* * * * endIf
* * * endSequence
* *endIf
*endSequence
if ( not js1.b14 ) then
*cms.b44 = false;
endIf
cms.b47 = shift and js1.b14; * * * * * // set ews program 2

//hat three cms down / back (b15)

timer ( period, d11, holdTime ) = js1.b15 and noShift;
*sequence
* *wait ( not d11 );
* * *cms.b48 = js1.b15; * * * * * // held: toggle external lights
* * *if ( ( not js1.b15 ) and ( not ecm ) ) then
* * * *sequence
* * * * *cms.b45 = true; * * * * * // turn jammer on
* * * * *delay ( 3 );
* * * * *cms.b45 = false;
* * * * *ecm = not ecm;
* * * *endSequence
* * *endIf
*endSequence
if ( not js1.b15 ) then
*cms.b48 = false;
endIf
cms.b49 = shift and js1.b15; * // set ews program 3

Bob Church
16-09-2004, 02:12 PM
Hi Matt,

Well, I took a look at your CMS file, and there isn't that much wrong that I can see, but rather than concentrate on fixing that right now, maybe something a little simpler will give a better idea of what's happening, especially where the sequences come into play. This is undoubtedly more explanation than you need, but some others might find the info useful so if I ramble more than seems necessary, you'll just have to put up with it. :)

First, the CMS file executes in its entirety from top to bottom more or less like a normal linear program, but you have to keep in mind that it cannot be stopped. If an operation can't be executed "now", then the operation has to be delayed and the rest of the CMS file has to be executed. It's that delaying that necessitates sequences, and I suspect it's where you're getting misled. Sequences are more like independent programs than just instructions in the CMS script.

Here's a simple little CMS script with a sequence in it:

>> script
>>
>> cms.b1 = js1.b1;
>>
>> sequence
>> wait( js1.b2 );
>> cms.b2 = TRUE;
>> delay( 10 );
>> cms.b2 = FALSE;
>> endSequence
>>
>> more_script:
>>
>> // do some more stuff here
>>
>> endScript

It starts with a simple statement that copies the state of js1.b1 to cms.b1. It does just what you'd expect, but remember that the entire script executes very frequently. It wouldn't be much good if it didn't since there would be a noticeable lag between the time you changed js1.b1 and the time when cms.b1 changed state to match, but in fact it's fast enough that you can't really "feel" a delay normally.

The second part is a "sequence" that waits for js1.b2 to come TRUE, turns cms.b2 TRUE for 10 character times when it does. It acts basically like a PERIOD timer, but we're looking at sequences so we'll work harder than we need to.

Suppose we've just activated the script and it's the first pass. CMS checks and finds js1.b1 FALSE so it sets cms.b1 FALSE. Nothing out of the ordinary there. Then it comes to the "sequence" statement. That does nothing itself, and CMS execution continues into the sequence as normal. The first thing it runs into is the "wait( js1.b2 )". We're assuming that js1.b2 is FALSE initially, so the "wait" is not satisfied and the sequence has to stop. It can't stop the CMS script, though, so it stashes a pointer to the wait instruction and jumps out of the sequence to more_script:.

Second pass. Same deal in the first part, cms.b1 gets whatever state js1.b1 has. I'm sure you can see that's going to happen every time, so I'll just skip it from now on. The sequence is a different story. It restores it's pointer and picks up execution at the wait statement, but js1.b2 (we'll assume) is not TRUE yet so it just stashes the pointer again and jumps out to more_script:.

Third pass. Sometime between the second and third passes, we'll assume that js1.b2 comes TRUE. The CMS script gets to the sequence, restores the pointer and figures out it can continue now because the wait is satisfied. It sets cms.b2 TRUE and then it runs into the "delay( 10 )" statement. It has to sit there for 10 ticks of the character clock, so it stashes its pointer again and waits.

As each subsequent scan of the CMS script happens, it checks to see if the character clock ticked and if it has it decrements an internal counter. In any case, it jumps out to more_script: if the delay hasn't run out. Eventually, enough time elapses and the delay times out. The CMS script comes into the sequence, restores its pointer at the delay instruction and finds that it can advance. It executes the "cms.b2 = FALSE" statement immediately and then runs into the endSequence statement. It realizes that the sequence is complete so it resets it's pointer to point back at the beginning of the sequence and continues at more_script:. Every sequence in the CMS file is restoring its pointer, advancing as far as it can, and saving its pointer again on every CMS pass in exactly the same way.

WRT your original script (a little useful info at last!) the problem with the double-click part at least is mostly just that you're clearing "click" at line 35 on every CMS scan, but the sequences that reference it span several CMS scans. If you walk through it with that in mine, you'll see it never gets past "1" and even then it won't do anything before it gets cleared again.

Anyway, I don't know if that's any help or not. Sequences are hard to understand sometimes, but maybe that will help clarify a bit.

- Bob

The StickWorks
http://www.stickworks.com

Boomer
16-09-2004, 03:40 PM
Thanks Bob. Let see if I can wrap my head around that: Does this mean that as the script iterates the state variables at the beginning reset them back to the default status?

For example, I set "ecm" to "false" at the beginning of the script as a default state. Because the script runs over itself, it moves the state variable to default "false" each time. Therefore, my "ecm" state gets banged back to "false" even though I made it "true" on the previous run through. And, as the loop gets back to "if ( ecm ) then" it sees "ecm" as "false" because "ecm" was reset to "false at the start.

If the previous para is accurate, that clears up a lot.

Hmmm, how to set default states then?

How about a little script like this:

%define initialized B1
if ( not initialized )
*sequence
* *// initialize all default states
* *initialized = true;
*endSequence
endIf

... might not work though: are the bit variables "false" if not specifically set "true"?

less elegant but certain to work:

%define loop A1
loop = loop + 1;
if ( [ loop == 1 ] )
*sequence
* *// initialize all default states
*endSequence
endIf


Your thoughts?

Bob Church
16-09-2004, 04:04 PM
Hi Matt,

Yes, that's what you need. Actually, there's a "FIRSTSCAN" bit that CMS sets TRUE for the first pass after the map is activated, but it was broken in 3.00. It's been fixed in 3.50, though, which should be out soon. When that works, all you need is:

if( FIRSTSCAN) then
yada yada yada;
endIf

Also, all Bx variables are FALSEd and all Ax variables are zeroed when the map is activated, so even now you can get away with just:

if( not b1 ) then
yada yada yada;
b1 = TRUE;
endIf

Pretty much just as you described without the sequence. I think if you look at JNOVs scripts, he's got a bit of code in there that does that.

In any case, you don't really need a sequence around that. You only need to sequence when there are points in a group of instructions where it may not be able to proceed (WAIT, WHILE, DELAY) and initialization will always have to execute in the first scan. As long as it will always run through the instructions in one scan, you can just put it out at program scope. The instruction will run in order, the only thing the sequence buys you is the ability to stall it without stalling the whole script, and without the sequence there are more instructions available to do things with.

- Bob

The StickWorks
http://www.stickworks.com

Boomer
16-09-2004, 04:46 PM
Fantastic, I think I've got it beat. I'll check it out this evening.

Boomer
17-09-2004, 08:05 PM
The fix worked: the double-click and state variable persistance were both solved by the "if ( not initialized ) then" change.

Thanks for all the help. I've got a couple of additional (manageable) bugs to work out & I'll post for everyone. [Although I recommend JNOV's profile over mine ;) ]

Bob Church
18-09-2004, 12:08 AM
Hi Matt,

>> The fix worked: the double-click and state variable persistance were both solved by the "if ( not initialized ) then" change <<

Great! I thought the other problems were probably some variation on the initialization thing but I wasn't really clear on what you were trying to do. It's hard to follow somebody elses logic sometimes, especially since I don't fly F4 and wasn't really clear on what was supposed to happen. I did understand the double-click thing, though. :)

Anyway, I'm glad to hear you got it sorted out! Have fun with it, and if you run into anything new just ask!

- Bob

The StickWorks
http://www.stickworks.com

Kamu
18-09-2004, 05:43 PM
Originally posted by JNOV@Sep 10 2004, 09:44 PM
Also, if you'd like to see my Jag-like profile, drop me a line and I'll send you the files.

Hi,
i would like to test it. :rolleyes:

JNOV
21-09-2004, 02:38 AM
I haven't tested it enough to submit it for general consumption, so if you'll send me a message with an e-mail address, I'll send you the files.

Best regards,

JNOV

Kamu
21-09-2004, 03:12 PM
Originally posted by JNOV@Sep 21 2004, 01:38 AM
I haven't tested it enough to submit it for general consumption, so if you'll send me a message with an e-mail address, I'll send you the files.

Best regards,

JNOV
I think i send private message to you. I'm not familiar with these message boards. :idea:

Kamu
22-09-2004, 06:09 PM
Originally posted by JNOV@Sep 21 2004, 01:38 AM
I haven't tested it enough to submit it for general consumption, so if you'll send me a message with an e-mail address, I'll send you the files.

Best regards,

JNOV
Thanks JNOW :thumbsup:

I haven't test it yet. There is something weird because for example in key test utility window nothing happens. Older maps works fine.

I'll have to figure out what's wrong. Your profile compiles fine and new control manager successfully transfered it...

JNOV
23-09-2004, 02:37 PM
Kamu:

Well, that's weird. I just loaded the exact same files that I sent you into my HOTAS and they don't work either! Doh!

I was stumped for a minute, because I knew they used to work, but I figured out what is going on. In the original map, I had included a Throttle Quadrant. I deleted it from the one that I sent you, because I didn't think that you'd have a TQ. For some reason, doing that really screwed things up, even though the map appeared to compile and download ok. Maybe this is a question for Bob.

Anyway, I'm attaching the original files to this message, and I'll send them to you by e-mail as well. Those should work (they do even with my TQ unplugged), because I just did a sanity check. So, I hope that now you're good to go!

Sorry for the confusion,

JNOV

Boomer
28-09-2004, 04:42 PM
Kamu, I'm sorry for the delay on this: I've been up at Lake Winnepauskee in New Hampshire for vacation. I'll be back tomorrow and will put it up.

OT, beautiful lake up here & we had fantastic weather. I spent the week guzzling beer and throwing balls into the water for my two golden retrievers. I highly recommend the same to all (I'll even provide the two dogs :P ).