CVS: data/Aircraft/B-1B/Nasal cdu900.nas, NONE, 1.1 fuel_load.nas, NONE, 1.1 oso_ikb.nas, NONE, 1.1 wso_mfd.nas, NONE, 1.1 b1b.nas, 1.12, 1.13 cg.nas, 1.3, 1.4 flightcontrols.nas, 1.4, 1.5 guide_to_target.nas, 1.1, 1.2 low.nas, 1.1, 1.2 oso_management.nas, 1.1, 1.2 phd.nas, 1.1, 1.2 radar.nas, 1.2, 1.3 rain.nas, 1.1, 1.2 terrain_follow.nas, 1.1, 1.2 oso_target.nas, 1.1, NONE tfs.nas, 1.3, NONE weapons.nas, 1.4, NONE

Martin Spott <[email protected]>
Newsgroups gmane.games.flightgear.cvc
Message-ID <[email protected]>
Update of /var/cvs/FlightGear-0.9/data/Aircraft/B-1B/Nasal
In directory baron.flightgear.org:/tmp/cvs-serv7610/Nasal

Modified Files:
	b1b.nas cg.nas flightcontrols.nas guide_to_target.nas low.nas 
	oso_management.nas phd.nas radar.nas rain.nas 
	terrain_follow.nas 
Added Files:
	cdu900.nas fuel_load.nas oso_ikb.nas wso_mfd.nas 
Removed Files:
	oso_target.nas tfs.nas weapons.nas 
Log Message:

Markus Zojer - B-1B easter update:

- terrain following script rewritten
- guided ordonance system rewritten
- exterior model texture improvenments
- new instruments(IKB + MFD) for WSO position
- cdu-900 prototype for nav/com input/display
- radar now sorts for distance, displays closest


--- NEW FILE "cdu900.nas" ---
#cdu900
var cdu_set = func(n,m){

#n >= 0 are direct menu settings
if (n >= 0){
  setprop("instrumentation/cdu900/menu", n);
  setprop("instrumentation/cdu900/submenu", m);
  setprop("instrumentation/cdu900/sel_subm", "");
  setprop("instrumentation/cdu900/line-selected", "");
}


var cdu = [
#com1 and 2 entries
  [ "COM SET", 
    { sub1: "COM1 MHZ", sub2: "instrumentation/comm/frequencies/selected-mhz", sub3: "COM1 STBY", sub4: "instrumentation/comm/frequencies/standby-mhz", sub5: "---", sub6: "instrumentation/cdu900/expr/none"},
    { sub1: "COM2 MHZ", sub2: "instrumentation/comm[1]/frequencies/selected-mhz", sub3: "COM2 STBY", sub4: "instrumentation/comm[1]/frequencies/standby-mhz", sub5: "---", sub6: "instrumentation/cdu900/expr/none"},
  ],
#nav1 and 2,adf entries
  [ "NAV SET", 
    { sub1: "NAV1 MHZ", sub2: "instrumentation/nav[0]/frequencies/selected-mhz", sub3: "NAV1 STBY", sub4: "instrumentation/nav[0]/frequencies/standby-mhz", sub5: "NAV1 HDG", sub6: "instrumentation/nav[0]/radials/selected-deg"},
    { sub1: "NAV2 MHZ", sub2: "instrumentation/nav[1]/frequencies/selected-mhz", sub3: "NAV2 STBY", sub4: "instrumentation/nav[1]/frequencies/standby-mhz", sub5: "NAV2 HDG", sub6: "instrumentation/nav[1]/radials/selected-deg"},
    { sub1: "ADF1 KHZ", sub2: "instrumentation/adf[0]/frequencies/selected-khz", sub3: "ADF1 STBY", sub4: "instrumentation/adf[0]/frequencies/standby-khz", sub5: "ADF1 HDG", sub6: "instrumentation/adf[0]/rotation-deg"},
  ],
#IFF(identify friend foe) entries
  [ "IDFY FRI-FOE", 
    { sub1: "ONBOARD",sub2: "instrumentation/cdu900/expr/leet", sub3: getprop("sim/multiplay/callsign"), sub4: "instrumentation/cdu900/expr/none", sub5: "ENJOY", sub6: "instrumentation/cdu900/expr/oneone"},

  ],
#M3(ATHS) entries
  [ "ATHS", 
    { sub1: "NONE",sub2: "instrumentation/cdu900/expr/none", sub3: "---", sub4: "instrumentation/cdu900/expr/none", sub5: "NOT AVAILABLE", sub6: "instrumentation/cdu900/expr/none"},
  ],
#STR(TGT) entries
  [ "CODE", 
    { sub1: "LISTING",sub2: "instrumentation/cdu900/expr/none", sub3: "---", sub4: "instrumentation/cdu900/expr/none", sub5: "NOT AVAILABLE", sub6: "instrumentation/cdu900/expr/none"},
  ],
#FLPN(CODE) entries
  [ "FLIGHTPLAN", 
    { sub1: "LISTING",sub2: "instrumentation/cdu900/expr/none", sub3: "---", sub4: "instrumentation/cdu900/expr/none", sub5: "NOT AVAILABLE", sub6: "instrumentation/cdu900/expr/none"},
  ],
#PSN(FDLS) entries
  [ "POS INFO", 
    { sub1: "LONGITUDE",sub2: "position/longitude-deg", sub3: "LATITUDE", sub4: "position/latitude-deg", sub5: "ALTITUDE-FT", sub6: "position/altitude-ft"},
    { sub1: "GS KTS",sub2: "velocities/groundspeed-kt", sub3: "AS KTS", sub4: "velocities/airspeed-kt", sub5: "MACH", sub6: "velocities/mach"},
  ],
#DVR(DATA) entries
  [ "DATA", 
    { sub1: "TOT FUEL NORM",sub2: "consumables/fuel/total-fuel-norm", sub3: "TOT FUEL LBS", sub4: "consumables/fuel/total-fuel-lbs", sub5: "GROSS WGT LBS", sub6: "yasim/gross-weight-lbs"},
  ],
];

#n == -1 are submenu toggle settings
if (n == -1){
  var menu_set = getprop("instrumentation/cdu900/menu");
  n = menu_set;
  var nr = size(cdu[n]) - 1;
  #debug.dump(nr);
  var submenu_set = getprop("instrumentation/cdu900/submenu");
  m = submenu_set + m;
  if (m < 1){
    m = 1;
  }
  if (m > nr){
    m = nr;
  }
  setprop("instrumentation/cdu900/sel_subm", "");
  setprop("instrumentation/cdu900/line-selected", "");
}

#n == -2 are sub2/4/6-line2/4/6 selected
if (n == -2){
  var submenu_set = getprop("instrumentation/cdu900/submenu");
  var menu_set = getprop("instrumentation/cdu900/menu");
  var sel_subm = cdu[menu_set][submenu_set]["sub"~ m ~""];
  setprop("instrumentation/cdu900/sel_subm", sel_subm);
  setprop("instrumentation/cdu900/line-selected", m);
  n = menu_set;
  m = submenu_set;
}

#n == -10 manipulate aerrow selected
if (n == -10){
  var sel_subm = getprop("instrumentation/cdu900/sel_subm");
  if (sel_subm){
    var subm_value = getprop(""~ sel_subm ~"");
    #debug.dump(subm_value);
    subm_value = subm_value + m;
    setprop(""~ sel_subm ~"", subm_value);
  }
  #set entries
  var submenu_set = getprop("instrumentation/cdu900/submenu");
  var menu_set = getprop("instrumentation/cdu900/menu");
  n = menu_set;
  m = submenu_set;
}

setprop("instrumentation/cdu900/menu", n);
setprop("instrumentation/cdu900/submenu", m);
setprop("instrumentation/cdu900/line0", cdu[n][0]);
setprop("instrumentation/cdu900/line1", cdu[n][m]["sub1"]);
setprop("instrumentation/cdu900/line2", getprop(""~ cdu[n][m]["sub2"] ~""));
setprop("instrumentation/cdu900/line3", cdu[n][m]["sub3"]);
setprop("instrumentation/cdu900/line4", getprop(""~ cdu[n][m]["sub4"] ~""));
setprop("instrumentation/cdu900/line5", cdu[n][m]["sub5"]);
setprop("instrumentation/cdu900/line6", getprop(""~ cdu[n][m]["sub6"] ~""));

}

#var type = cdu[0]["menu0"];
#cdu[0].menu0 = "gbu-31";# set type to gbu-31

--- NEW FILE "fuel_load.nas" ---
### fuel loading

var fuelload = func(n) {
  var amount = n / 100;
  var wow = getprop("gear/gear[0]/wow");
  var roll = getprop("gear/gear[0]/rollspeed-ms");

if ((wow == 1) and (roll < 1)) {
  setprop("consumables/fuel/tank[0]/level-gal_us", 5000 * amount);
  setprop("consumables/fuel/tank[1]/level-gal_us", 5000 * amount);
  setprop("consumables/fuel/tank[2]/level-gal_us", 5000 * amount);
  setprop("consumables/fuel/tank[3]/level-gal_us", 5000 * amount);
  setprop("consumables/fuel/tank[4]/level-gal_us", 3333 * amount);
  setprop("consumables/fuel/tank[5]/level-gal_us", 5000 * amount);
  setprop("consumables/fuel/tank[6]/level-gal_us", 1666 * amount);
  setprop("consumables/fuel/tank[7]/level-gal_us", 1666 * amount);
  var dtext = "Fuel loaded!";
  screen.log.write(dtext);
} else {
    var ltext = "You have to stop at an airport to be able to onload fuel!";
    screen.log.write(ltext);
  }
}
--- NEW FILE "oso_ikb.nas" ---
###change settings for sms visible on oso mfd

var ikb_path = props.globals.getNode("instrumentation/ikb/ikb_input",1);
ikb_path.setDoubleValue(0);
var coord_input = [0,1,2,3,4,5,6,7,8];
var coord_pos = 0;
setprop("instrumentation/ikb/coord_pos", coord_pos);
setprop("instrumentation/ikb/ikb_number", 0);

var tgt_input = func(n) {
  coord_pos = getprop("instrumentation/ikb/coord_pos");
  var ikb_number = getprop("instrumentation/ikb/ikb_number");
  var nr = getprop("armament/oso/number-selected");
  coord_input[coord_pos] = ikb_number;
  if (coord_pos == 0){
    if (ikb_number == 0){
      coord_input[coord_pos] = -1;
    } else {
        coord_input[coord_pos] = 1;
      }
  }

 #var t_input = ""~ coord_input[0] ~""~ coord_input[1] ~""~ coord_input[2] ~""~ coord_input[3] ~"."~ coord_input[4] ~""~ coord_input[5] ~""~ coord_input[6] ~""~ coord_input[7] ~""~ coord_input[8] ~"";
  var t_input = coord_input[0] * (coord_input[1] * 100 + coord_input[2] * 10 + coord_input[3] * 1 + coord_input[4] * 0.1 + coord_input[5] * 0.01 + coord_input[6] * 0.001 + coord_input[7] * 0.0001 + coord_input[8] * 0.00001);
  ikb_path.setDoubleValue(t_input);
  print(t_input);

  if(n == 1){
    setprop("ai/guided/bomb["~ nr ~"]/target-latitude-deg", ikb_path.getValue());
    weapons.wpn_info[nr].lat = ikb_path.getValue();
    var talt_m = geo.elevation(wpn_info[nr]["lat"], wpn_info[nr]["lon"]);
    if ((talt_m == "nil") or (talt_m == "")) {
      return(weapons.wpn_info[nr].talt_m = -1);
    } else {
        wpn_info[nr].talt_m = talt_m;
      }
    debug.dump(wpn_info[nr]);
  }
  if(n == 2){
    setprop("ai/guided/bomb["~ nr ~"]/target-longitude-deg", ikb_path.getValue());
    weapons.wpn_info[nr].lon = ikb_path.getValue();
    var talt_m = geo.elevation(wpn_info[nr]["lat"], wpn_info[nr]["lon"]);
    if ((talt_m == "nil") or (talt_m == "")) {
      return(weapons.wpn_info[nr].talt_m = -1);
    } else {
        wpn_info[nr].talt_m = talt_m;
      }
    debug.dump(wpn_info[nr]);
  }
}

var change_coord_pos = func(n) {
  coord_pos = getprop("instrumentation/ikb/coord_pos");
  coord_pos = coord_pos + n;
  if((coord_pos < 0) or (coord_pos > 8)){
    coord_pos = 0;
  }
  setprop("instrumentation/ikb/coord_pos", coord_pos);
}

var change_ikb_number = func(n) {
  setprop("instrumentation/ikb/ikb_number", n);
  tgt_input(0);
}
--- NEW FILE "wso_mfd.nas" ---
#settings for the oso mfd

#header:
#line1 
#line2
#line3 
#line4
#line5 
#line6
#line7 
#line8
#footer:menu selections
setprop("instrumentation/ikb/ikb_none", 0);
setprop("instrumentation/ikb/ikb_input", 0);

var wso_mfd = [
#bay intmd
  [ 
    ["BAY INTMD OVERVIEW", "MENU CHANGE <"],
    ["STAT1", "armament/bay1/rack0-armed", "DIST", "ai/guided/bomb[0]/target-distance"],
    ["STAT2", "armament/bay1/rack1-armed", "DIST", "ai/guided/bomb[1]/target-distance"],
    ["STAT3", "armament/bay1/rack2-armed", "DIST", "ai/guided/bomb[2]/target-distance"],
    ["STAT4", "armament/bay1/rack3-armed", "DIST", "ai/guided/bomb[3]/target-distance"],
    ["STAT5", "armament/bay1/rack4-armed", "DIST", "ai/guided/bomb[4]/target-distance"],
    ["STAT6", "armament/bay1/rack5-armed", "DIST", "ai/guided/bomb[5]/target-distance"],
    ["STAT7", "armament/bay1/rack6-armed", "DIST", "ai/guided/bomb[6]/target-distance"],
    ["STAT8", "armament/bay1/rack7-armed", "DIST", "ai/guided/bomb[7]/target-distance"],
  ],
#station1
  [ 
    ["STATION1", "MENU CHANGE <"],
    ["TYPE", "armament/bay1/rack0", "ARMED", "armament/bay1/rack0-armed"],
    ["LON", "ai/guided/bomb[0]/target-longitude-deg", "LAT", "ai/guided/bomb[0]/target-latitude-deg"],
    ["DIST", "ai/guided/bomb[0]/target-distance", "TIME", "ai/guided/bomb[0]/target-distance-sec"],
    ["-----", "instrumentation/ikb/ikb_none", "-----", "instrumentation/ikb/ikb_none"],
    ["IKB", "instrumentation/ikb/ikb_input", "SET IKB<", "instrumentation/ikb/ikb_none"],
    ["POS", "instrumentation/ikb/coord_pos", "", "instrumentation/ikb/ikb_none"],
    ["", "instrumentation/ikb/ikb_none", "SET LON<", "instrumentation/ikb/ikb_none"],
    ["", "instrumentation/ikb/ikb_none", "SET LAT<", "instrumentation/ikb/ikb_none"]
  ],
#station2
  [ 
    ["STATION2", "MENU CHANGE <"],
    ["TYPE", "armament/bay1/rack1", "ARMED", "armament/bay1/rack1-armed"],
    ["LON", "ai/guided/bomb[1]/target-longitude-deg", "LAT", "ai/guided/bomb[1]/target-latitude-deg"],
    ["DIST", "ai/guided/bomb[1]/target-distance", "TIME", "ai/guided/bomb[1]/target-distance-sec"],
    ["-----", "instrumentation/ikb/ikb_none", "-----", "instrumentation/ikb/ikb_none"],
    ["IKB", "instrumentation/ikb/ikb_input", "SET IKB<", "instrumentation/ikb/ikb_none"],
    ["POS", "instrumentation/ikb/coord_pos", "", "instrumentation/ikb/ikb_none"],
    ["", "instrumentation/ikb/ikb_none", "SET LON<", "instrumentation/ikb/ikb_none"],
    ["", "instrumentation/ikb/ikb_none", "SET LAT<", "instrumentation/ikb/ikb_none"]
  ],
#station3
  [ 
    ["STATION3", "MENU CHANGE <"],
    ["TYPE", "armament/bay1/rack2", "ARMED", "armament/bay1/rack2-armed"],
    ["LON", "ai/guided/bomb[2]/target-longitude-deg", "LAT", "ai/guided/bomb[2]/target-latitude-deg"],
    ["DIST", "ai/guided/bomb[2]/target-distance", "TIME", "ai/guided/bomb[2]/target-distance-sec"],
    ["-----", "instrumentation/ikb/ikb_none", "-----", "instrumentation/ikb/ikb_none"],
    ["IKB", "instrumentation/ikb/ikb_input", "SET IKB<", "instrumentation/ikb/ikb_none"],
    ["POS", "instrumentation/ikb/coord_pos", "", "instrumentation/ikb/ikb_none"],
    ["", "instrumentation/ikb/ikb_none", "SET LON<", "instrumentation/ikb/ikb_none"],
    ["", "instrumentation/ikb/ikb_none", "SET LAT<", "instrumentation/ikb/ikb_none"]
  ],
#station4
  [ 
    ["STATION4", "MENU CHANGE <"],
    ["TYPE", "armament/bay1/rack3", "ARMED", "armament/bay1/rack3-armed"],
    ["LON", "ai/guided/bomb[3]/target-longitude-deg", "LAT", "ai/guided/bomb[3]/target-latitude-deg"],
    ["DIST", "ai/guided/bomb[3]/target-distance", "TIME", "ai/guided/bomb[3]/target-distance-sec"],
    ["-----", "instrumentation/ikb/ikb_none", "-----", "instrumentation/ikb/ikb_none"],
    ["IKB", "instrumentation/ikb/ikb_input", "SET IKB<", "instrumentation/ikb/ikb_none"],
    ["POS", "instrumentation/ikb/coord_pos", "", "instrumentation/ikb/ikb_none"],
    ["", "instrumentation/ikb/ikb_none", "SET LON<", "instrumentation/ikb/ikb_none"],
    ["", "instrumentation/ikb/ikb_none", "SET LAT<", "instrumentation/ikb/ikb_none"]
  ],
#station5
  [ 
    ["STATION5", "MENU CHANGE <"],
    ["TYPE", "armament/bay1/rack4", "ARMED", "armament/bay1/rack4-armed"],
    ["LON", "ai/guided/bomb[4]/target-longitude-deg", "LAT", "ai/guided/bomb[4]/target-latitude-deg"],
    ["DIST", "ai/guided/bomb[4]/target-distance", "TIME", "ai/guided/bomb[4]/target-distance-sec"],
    ["-----", "instrumentation/ikb/ikb_none", "-----", "instrumentation/ikb/ikb_none"],
    ["IKB", "instrumentation/ikb/ikb_input", "SET IKB<", "instrumentation/ikb/ikb_none"],
    ["POS", "instrumentation/ikb/coord_pos", "<", "instrumentation/ikb/ikb_none"],
    ["", "instrumentation/ikb/ikb_none", "SET LON", "instrumentation/ikb/ikb_none"],
    ["", "instrumentation/ikb/ikb_none", "SET LAT<", "instrumentation/ikb/ikb_none"]
  ],
#station6
  [ 
    ["STATION6", "MENU CHANGE <"],
    ["TYPE", "armament/bay1/rack5", "ARMED", "armament/bay1/rack5-armed"],
    ["LON", "ai/guided/bomb[5]/target-longitude-deg", "LAT", "ai/guided/bomb[5]/target-latitude-deg"],
    ["DIST", "ai/guided/bomb[5]/target-distance", "TIME", "ai/guided/bomb[5]/target-distance-sec"],
    ["-----", "instrumentation/ikb/ikb_none", "-----", "instrumentation/ikb/ikb_none"],
    ["IKB", "instrumentation/ikb/ikb_input", "SET IKB<", "instrumentation/ikb/ikb_none"],
    ["POS", "instrumentation/ikb/coord_pos", "", "instrumentation/ikb/ikb_none"],
    ["", "instrumentation/ikb/ikb_none", "SET LON<", "instrumentation/ikb/ikb_none"],
    ["", "instrumentation/ikb/ikb_none", "SET LAT<", "instrumentation/ikb/ikb_none"]
  ],
#station7
  [ 
    ["STATION7", "MENU CHANGE <"],
    ["TYPE", "armament/bay1/rack6", "ARMED", "armament/bay1/rack6-armed"],
    ["LON", "ai/guided/bomb[6]/target-longitude-deg", "LAT", "ai/guided/bomb[6]/target-latitude-deg"],
    ["DIST", "ai/guided/bomb[6]/target-distance", "TIME", "ai/guided/bomb[6]/target-distance-sec"],
    ["-----", "instrumentation/ikb/ikb_none", "-----", "instrumentation/ikb/ikb_none"],
    ["IKB", "instrumentation/ikb/ikb_input", "SET IKB<", "instrumentation/ikb/ikb_none"],
    ["POS", "instrumentation/ikb/coord_pos", "", "instrumentation/ikb/ikb_none"],
    ["", "instrumentation/ikb/ikb_none", "SET LON<", "instrumentation/ikb/ikb_none"],
    ["", "instrumentation/ikb/ikb_none", "SET LAT<", "instrumentation/ikb/ikb_none"]
  ],
#station8
  [ 
    ["STATION8", "MENU CHANGE <"],
    ["TYPE", "armament/bay1/rack7", "ARMED", "armament/bay1/rack7-armed"],
    ["LON", "ai/guided/bomb[7]/target-longitude-deg", "LAT", "ai/guided/bomb[7]/target-latitude-deg"],
    ["DIST", "ai/guided/bomb[7]/target-distance", "TIME", "ai/guided/bomb[7]/target-distance-sec"],
    ["-----", "instrumentation/ikb/ikb_none", "-----", "instrumentation/ikb/ikb_none"],
    ["IKB", "instrumentation/ikb/ikb_input", "SET IKB<", "instrumentation/ikb/ikb_none"],
    ["POS", "instrumentation/ikb/coord_pos", "", "instrumentation/ikb/ikb_none"],
    ["", "instrumentation/ikb/ikb_none", "SET LON<", "instrumentation/ikb/ikb_none"],
    ["", "instrumentation/ikb/ikb_none", "SET LAT<", "instrumentation/ikb/ikb_none"]
  ]

];

setprop("instrumentation/wso_mfd/menu", 0);

#m=direct menu select,n= incr/decr current
var wso_mfd_update = func(m,n){
  var cmenu = getprop("instrumentation/wso_mfd/menu");
  var cminu = cmenu - 1;

  if(m == 1){
    #direct select submenu, if we are in topmenu
    if((cmenu == 0) or ((m == 1) and (n == 0))){
      #n = n;
      setprop("instrumentation/wso_mfd/menu", n);
      wso_mfd_draw();
    }

    if((cmenu > 0) and (cmenu < 9)){
      if (n == 5){
        tgt_input(0);
        wso_mfd_draw();
      }
      if (n == 7){
        setprop("ai/guided/bomb["~ cminu ~"]/target-longitude-deg",getprop("instrumentation/ikb/ikb_input"));
        weapons.wpn_info[cminu].lon = getprop("instrumentation/ikb/ikb_input");
        var talt_m = geo.elevation(wpn_info[cminu]["lat"], wpn_info[cminu]["lon"]);
        if ((talt_m == nil) or (talt_m == "")) {
          weapons.wpn_info[cminu].talt_m = -11;
        } else {
            wpn_info[cminu].talt_m = talt_m;
          }
        wso_mfd_draw();
      }
      if (n == 8){
        setprop("ai/guided/bomb["~ cminu ~"]/target-latitude-deg",getprop("instrumentation/ikb/ikb_input"));
        weapons.wpn_info[cminu].lat = getprop("instrumentation/ikb/ikb_input");
        var talt_m = geo.elevation(wpn_info[cminu]["lat"], wpn_info[cminu]["lon"]);
        if ((talt_m == nil) or (talt_m == "")) {
          weapons.wpn_info[cminu].talt_m = -11;
        } else {
            wpn_info[cminu].talt_m = talt_m;
          }
        wso_mfd_draw();
      }
    }
  }

  #incr current menu entry
  if(m == -1){
    n = cmenu + n;
    if ((n > 8) or (n < 0)){
      n = 0;
    }
    setprop("instrumentation/wso_mfd/menu", n);
    wso_mfd_draw();
  }
}

var wso_mfd_draw = func(){

  var n = getprop("instrumentation/wso_mfd/menu");
  #header
  setprop("instrumentation/wso_mfd/line00", wso_mfd[n][0][0]);
  #line1
  setprop("instrumentation/wso_mfd/line10", wso_mfd[n][1][0]);
  setprop("instrumentation/wso_mfd/line11", getprop(""~ wso_mfd[n][1][1] ~""));
  setprop("instrumentation/wso_mfd/line12", wso_mfd[n][1][2]);
  setprop("instrumentation/wso_mfd/line13", getprop(""~ wso_mfd[n][1][3] ~""));
  #line2
  setprop("instrumentation/wso_mfd/line20", wso_mfd[n][2][0]);
  setprop("instrumentation/wso_mfd/line21", getprop(""~ wso_mfd[n][2][1] ~""));
  setprop("instrumentation/wso_mfd/line22", wso_mfd[n][2][2]);
  setprop("instrumentation/wso_mfd/line23", getprop(""~ wso_mfd[n][2][3] ~""));
  #line3
  setprop("instrumentation/wso_mfd/line30", wso_mfd[n][3][0]);
  setprop("instrumentation/wso_mfd/line31", getprop(""~ wso_mfd[n][3][1] ~""));
  setprop("instrumentation/wso_mfd/line32", wso_mfd[n][3][2]);
  setprop("instrumentation/wso_mfd/line33", getprop(""~ wso_mfd[n][3][3] ~""));
  #line4
  setprop("instrumentation/wso_mfd/line40", wso_mfd[n][4][0]);
  setprop("instrumentation/wso_mfd/line41", getprop(""~ wso_mfd[n][4][1] ~""));
  setprop("instrumentation/wso_mfd/line42", wso_mfd[n][4][2]);
  setprop("instrumentation/wso_mfd/line43", getprop(""~ wso_mfd[n][4][3] ~""));
  #line5
  setprop("instrumentation/wso_mfd/line50", wso_mfd[n][5][0]);
  setprop("instrumentation/wso_mfd/line51", getprop(""~ wso_mfd[n][5][1] ~""));
  setprop("instrumentation/wso_mfd/line52", wso_mfd[n][5][2]);
  setprop("instrumentation/wso_mfd/line53", getprop(""~ wso_mfd[n][5][3] ~""));
  #line6
  setprop("instrumentation/wso_mfd/line60", wso_mfd[n][6][0]);
  setprop("instrumentation/wso_mfd/line61", getprop(""~ wso_mfd[n][6][1] ~""));
  setprop("instrumentation/wso_mfd/line62", wso_mfd[n][6][2]);
  setprop("instrumentation/wso_mfd/line63", getprop(""~ wso_mfd[n][6][3] ~""));
  #line7
  setprop("instrumentation/wso_mfd/line70", wso_mfd[n][7][0]);
  setprop("instrumentation/wso_mfd/line71", getprop(""~ wso_mfd[n][7][1] ~""));
  setprop("instrumentation/wso_mfd/line72", wso_mfd[n][7][2]);
  setprop("instrumentation/wso_mfd/line73", getprop(""~ wso_mfd[n][7][3] ~""));
  #line8
  setprop("instrumentation/wso_mfd/line80", wso_mfd[n][8][0]);
  setprop("instrumentation/wso_mfd/line81", getprop(""~ wso_mfd[n][8][1] ~""));
  setprop("instrumentation/wso_mfd/line82", wso_mfd[n][8][2]);
  setprop("instrumentation/wso_mfd/line83", getprop(""~ wso_mfd[n][8][3] ~""));
  #footer
  setprop("instrumentation/wso_mfd/line01", wso_mfd[n][0][1]);

}
Index: b1b.nas
===================================================================
RCS file: /var/cvs/FlightGear-0.9/data/Aircraft/B-1B/Nasal/b1b.nas,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -r1.12 -r1.13
--- b1b.nas	23 Jan 2010 09:51:26 -0000	1.12
+++ b1b.nas	30 Mar 2010 21:49:36 -0000	1.13
@@ -33,8 +33,6 @@
 setprop("instrumentation/cg/cg_mac", 30);
 setprop("instrumentation/tacan/frequencies/selected-channel[12]", 2);
 settimer(flightcontrols.fuelsweep, 1);
-setprop("sim/weight[7]/weigth-lb", 0);
-setprop("sim/weight[8]/weigth-lb", 0);
 setprop("ai/guided/id-number", 0);
 setprop("ai/guided/target-number", 0);
 setprop("ai/guided/id-release", 0);
@@ -56,7 +54,8 @@
 setprop("sim/multiplay/generic/float[4]",0);
 setprop("sim/multiplay/generic/float[5]",0);
 b1b.elevon();
-print ("B-1B starting up!");
+b1b.cdu_set(2,1);
+print ("B-1B systems starting!");
 }
 
 var elevon = func() {
@@ -81,16 +80,12 @@
   setprop("doors/bay_aft/position-norm",m);
 }
 var refuel_door = func {
-#  interpolate("sim/multiplay/generic/float[5]",getprop("controls/switches/refuel-lid"),3);
+  interpolate("sim/multiplay/generic/float[5]",getprop("controls/switches/refuel-lid"),3);
 }
-#var bay_fwd = aircraft.door.new ("sim/multiplay/generic/float[2]",3);
-#var bay_intmd = aircraft.door.new ("sim/multiplay/generic/float[3]",3);
-#var bay_aft = aircraft.door.new ("sim/multiplay/generic/float[4]",3);
-#var refuel_door = aircraft.door.new ("sim/multiplay/generic/float[5]",3);
 
 ### failure dialog
 #var engine_failures = gui.Dialog.new("dialog","Aircraft/B-1B/Dialogs/failures.xml");
-var distance_tanker = gui.Dialog.new("dialog","Aircraft/B-1B/Dialogs/distance_to_tanker.xml");
+#var distance_tanker = gui.Dialog.new("dialog","Aircraft/B-1B/Dialogs/distance_to_tanker.xml");
 
 ### tacan follow autopilot
 var tacan_follow = func {
@@ -142,15 +137,37 @@
 ### autoengage afterburner when full throttle applied
 setlistener("controls/engines/engine[0]/throttle-lever", func(n) {
   var lever_eng0 = n.getValue();
-  if (lever_eng0 >= 0.98) {
+  var enabled = getprop("controls/switches/engines/afterburner[0]");
+  if ((lever_eng0 >= 0.98) and (enabled)) {
     setprop("controls/engines/engine[0]/afterburner", 1);
-    setprop("controls/engines/engine[1]/afterburner", 1);
-    setprop("controls/engines/engine[2]/afterburner", 1);
-    setprop("controls/engines/engine[3]/afterburner", 1);
   } else {
     setprop("controls/engines/engine[0]/afterburner", 0);
+    }
+});
+setlistener("controls/engines/engine[1]/throttle-lever", func(n) {
+  var lever_eng1 = n.getValue();
+  var enabled = getprop("controls/switches/engines/afterburner[1]");
+  if ((lever_eng1 >= 0.98) and (enabled)) {
+    setprop("controls/engines/engine[1]/afterburner", 1);
+  } else {
     setprop("controls/engines/engine[1]/afterburner", 0);
+    }
+});
+setlistener("controls/engines/engine[2]/throttle-lever", func(n) {
+  var lever_eng2 = n.getValue();
+  var enabled = getprop("controls/switches/engines/afterburner[2]");
+  if ((lever_eng2 >= 0.98) and (enabled)) {
+    setprop("controls/engines/engine[2]/afterburner", 1);
+  } else {
     setprop("controls/engines/engine[2]/afterburner", 0);
+    }
+});
+setlistener("controls/engines/engine[3]/throttle-lever", func(n) {
+  var lever_eng3 = n.getValue();
+  var enabled = getprop("controls/switches/engines/afterburner[3]");
+  if ((lever_eng3 >= 0.98) and (enabled)) {
+    setprop("controls/engines/engine[3]/afterburner", 1);
+  } else {
     setprop("controls/engines/engine[3]/afterburner", 0);
     }
 });
@@ -699,43 +716,60 @@
 # tacan block
 ##
 var tacan = func(add) {
-var ch2 = getprop("instrumentation/tacan/frequencies/selected-channel");
-var ch21 = int(ch2 / 10);
-var ch21_new = ch21;
-
-if ((add == 1) and (ch21 <= 11.5)) {
-var ch21_new = ch21 + 1;
-} elsif ((add == -1) and (ch21 >= 0.5)) {
-var ch21_new = ch21 - 1;
-}
-
-var ch1_new = int(ch21_new / 10);
-setprop("instrumentation/tacan/frequencies/selected-channel[1]", ch1_new);
-
-if (ch1_new >= 0.95) {
-var ch2_new = ch21_new - 10;
-setprop("instrumentation/tacan/frequencies/selected-channel[2]", ch2_new);
-} elsif (ch1_new <= 0.95) {
-var ch2_new = ch21_new;
-setprop("instrumentation/tacan/frequencies/selected-channel[2]", ch2_new);
-}
+  var ch2 = getprop("instrumentation/tacan/frequencies/selected-channel");
+  var ch21 = int(ch2 / 10);
+  var ch21_new = ch21;
+
+  if ((add == 1) and (ch21 <= 11.5)) {
+    var ch21_new = ch21 + 1;
+  } elsif ((add == -1) and (ch21 >= 0.5)) {
+      var ch21_new = ch21 - 1;
+    }
+
+  var ch1_new = int(ch21_new / 10);
+  setprop("instrumentation/tacan/frequencies/selected-channel[1]", ch1_new);
+
+  if (ch1_new >= 0.95) {
+    var ch2_new = ch21_new - 10;
+    setprop("instrumentation/tacan/frequencies/selected-channel[2]", ch2_new);
+  } elsif (ch1_new <= 0.95) {
+      var ch2_new = ch21_new;
+      setprop("instrumentation/tacan/frequencies/selected-channel[2]", ch2_new);
+    }
 }
 
 var tacanxy = func() {
-var xy = getprop("instrumentation/tacan/frequencies/selected-channel[4]");
-if (xy == "X") {
-setprop("instrumentation/tacan/frequencies/selected-channel[4]", "Y");
-} elsif (xy == "Y") {
-setprop("instrumentation/tacan/frequencies/selected-channel[4]", "X");
+  var xy = getprop("instrumentation/tacan/frequencies/selected-channel[4]");
+  if (xy == "X") {
+    setprop("instrumentation/tacan/frequencies/selected-channel[4]", "Y");
+    } elsif (xy == "Y") {
+        setprop("instrumentation/tacan/frequencies/selected-channel[4]", "X");
+      }
 }
+
+#----------------------------------------------------------------------------
+# View change: Ctrl-V switchback to view #0 but switch to OSO view when already
+# in view #0.
+#----------------------------------------------------------------------------
+var toggle_cockpit_views = func() {
+var CurrentView_Num = props.globals.getNode("sim/current-view/view-number");
+var oso_view_num = view.indexof("OSO view");
+
+  var cur_v = CurrentView_Num.getValue();
+  if (cur_v != 0 ) {
+    CurrentView_Num.setValue(0);
+  } else {
+    CurrentView_Num.setValue(oso_view_num);
+  }
 }
 
+
 ##
 # nuc switch
 ##
 var nuc = func {
-if (getprop("controls/switches/nuc") == 1) {
-ltext = "Sorry, Duke Nukem not available yet on this plane(t)!";
+  if (getprop("controls/switches/nuc") == 1) {
+    ltext = "Sorry, Duke Nukem not available yet on this plane(t)!";
   screen.log.write(ltext);
-}
+  }
 }
\ No newline at end of file

Index: cg.nas
===================================================================
RCS file: /var/cvs/FlightGear-0.9/data/Aircraft/B-1B/Nasal/cg.nas,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- cg.nas	24 Aug 2008 16:00:11 -0000	1.3
+++ cg.nas	30 Mar 2010 21:49:38 -0000	1.4
@@ -93,43 +93,47 @@
 var cg_adjust = func {
 var cg_on = getprop("controls/switches/cg-adjust");
 if (cg_on == 1) {
-#setprop("/sim/freeze/fuel", 1);
-var cg_macf = getprop("instrumentation/cg/cg_mac");
-var cg_mac_set = getprop("instrumentation/cg/cg_mac_set");
-
-var fuel_fwd = getprop("consumables/fuel/tank[3]/level-lbs");
-var fuel_aft = getprop("consumables/fuel/tank[5]/level-lbs");
-var fuel_fwd_cap = getprop("consumables/fuel/tank[3]/capacity-gal_us");
-var fuel_aft_cap = getprop("consumables/fuel/tank[5]/capacity-gal_us");
-var fuel_dens = getprop("consumables/fuel/tank[3]/density-ppg");
-
-var utime = 1;
-var ffrate = (200 * utime);# in lb/sec
-var fuel_fwd_caplb = fuel_fwd_cap * fuel_dens;
-var fuel_aft_caplb = fuel_aft_cap * fuel_dens;
-var fuel_fwd_space = fuel_fwd_caplb - fuel_fwd;
-var fuel_aft_space = fuel_aft_caplb - fuel_aft;
+  #setprop("/sim/freeze/fuel", 1);
+  var cg_macf = getprop("instrumentation/cg/cg_mac");
+  var cg_mac_set = getprop("instrumentation/cg/cg_mac_set");
 
+  var fuel_fwd = getprop("consumables/fuel/tank[3]/level-lbs");
+  var fuel_aft = getprop("consumables/fuel/tank[5]/level-lbs");
+  #var fuel_fwd1 = props.globals.getNode("consumables/fuel/tank[3]/level-lbs",1);
+  #var fuel_aft1 = props.globals.getNode("consumables/fuel/tank[5]/level-lbs",1);
+  var fuel_fwd_cap = getprop("consumables/fuel/tank[3]/capacity-gal_us");
+  var fuel_aft_cap = getprop("consumables/fuel/tank[5]/capacity-gal_us");
+  var fuel_dens = getprop("consumables/fuel/tank[3]/density-ppg");
 
-if (cg_macf > cg_mac_set) {
+  var utime = 1;
+  var ffrate = (200 * utime);# in lb/sec
+  var fuel_fwd_caplb = fuel_fwd_cap * fuel_dens;
+  var fuel_aft_caplb = fuel_aft_cap * fuel_dens;
+  var fuel_fwd_space = fuel_fwd_caplb - fuel_fwd;
+  var fuel_aft_space = fuel_aft_caplb - fuel_aft;
+
+
+  if (cg_macf > cg_mac_set) {
   if (((fuel_fwd + ffrate) <= fuel_fwd_caplb) and ((fuel_aft) >= (0 + ffrate))) {
     var fuel_fwd_new = (fuel_fwd + ffrate) / fuel_dens;
     var fuel_aft_new = (fuel_aft - ffrate) / fuel_dens;
+
     setprop("/consumables/fuel/tank[3]/level-gal_us", fuel_fwd_new);
     setprop("/consumables/fuel/tank[5]/level-gal_us", fuel_aft_new);
     #print ("weight dist1");
   }
-}
-if (cg_macf < cg_mac_set) {
+  }
+    if (cg_macf < cg_mac_set) {
   if (((fuel_fwd) >= (0 + ffrate)) and ((fuel_aft + ffrate) <= fuel_aft_caplb)) {
     var fuel_fwd_new = (fuel_fwd - ffrate) / fuel_dens;
     var fuel_aft_new = (fuel_aft + ffrate) / fuel_dens;
+
     setprop("/consumables/fuel/tank[3]/level-gal_us", fuel_fwd_new);
     setprop("/consumables/fuel/tank[5]/level-gal_us", fuel_aft_new);
     #print ("weight dist2");
   }
-}
-#setprop("/sim/freeze/fuel", 0);
-settimer(cg_adjust, utime);
-}
+    }
+    #setprop("/sim/freeze/fuel", 0);
+    settimer(cg_adjust, utime);
+  }
 }
\ No newline at end of file

Index: flightcontrols.nas
===================================================================
RCS file: /var/cvs/FlightGear-0.9/data/Aircraft/B-1B/Nasal/flightcontrols.nas,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- flightcontrols.nas	10 Dec 2008 23:25:45 -0000	1.4
+++ flightcontrols.nas	30 Mar 2010 21:49:39 -0000	1.5
@@ -68,6 +68,18 @@
 var conv = getprop("controls/engines/engine[0]/afterburner");
 setprop("engines/engine[4]/n1", conv);
 },0,0);
+setlistener("controls/engines/engine[1]/afterburner", func {
+var conv = getprop("controls/engines/engine[1]/afterburner");
+setprop("engines/engine[5]/n1", conv);
+},0,0);
+setlistener("controls/engines/engine[2]/afterburner", func {
+var conv = getprop("controls/engines/engine[2]/afterburner");
+setprop("engines/engine[6]/n1", conv);
+},0,0);
+setlistener("controls/engines/engine[3]/afterburner", func {
+var conv = getprop("controls/engines/engine[3]/afterburner");
+setprop("engines/engine[7]/n1", conv);
+},0,0);
 setlistener("controls/engines/engine[0]/cutoff", func {
 var conv = getprop("controls/engines/engine[0]/cutoff");
 setprop("engines/engine[4]/n2", conv);

Index: guide_to_target.nas
===================================================================
RCS file: /var/cvs/FlightGear-0.9/data/Aircraft/B-1B/Nasal/guide_to_target.nas,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- guide_to_target.nas	11 Dec 2008 00:02:47 -0000	1.1
+++ guide_to_target.nas	30 Mar 2010 21:49:40 -0000	1.2
@@ -13,7 +13,7 @@
 # At the end there is an exp script that calculates if the target is in range/then releases the model
 ##### by glazmax 2008
 
-var launch = func {
+var launch = func(n) {
 
 # aircraft parameters = initial bomb position
 var calt_m = getprop("position/altitude-ft") / 3.28084;
@@ -23,12 +23,7 @@
 var clong = getprop("position/longitude-deg") + 0.00000000;
 var cspeed_mps = getprop("velocities/groundspeed-kt") * 0.51444;
 
-var n = getprop("ai/guided/id-number");
-var m = n + 1;
-if (m == 4) {
-var m = 0;
-}
-setprop("ai/guided/id-number", m);
+#setprop("ai/guided/id-number", n);
 
 setprop("ai/guided/bomb[" ~ n ~ "]/prop-latitude-deg",clat);
 setprop("ai/guided/bomb[" ~ n ~ "]/prop-longitude-deg",clong);
@@ -66,234 +61,59 @@
 setprop ("models/model[" ~ n ~ "]/heading-deg-prop", "ai/guided/bomb[" ~ n ~ "]/prop-heading-deg");
 aircraft.makeNode("models/model[" ~ n ~ "]/load");
 
-if (n == 0) {
-settimer(target_guide0, 2);
-}
-if (n == 1) {
-settimer(target_guide1, 2);
-}
-if (n == 2) {
-settimer(target_guide2, 2);
-}
-if (n == 3) {
-settimer(target_guide3, 2);
-}
-
+settimer(func{target_guide(n);}, 2);
 }
 
 #####
 ## guidance to target (bomb nr 0)
 #####
-var target_guide0 = func  {
+var target_guide = func(n) {
 
 # target parameters
-#var target = geo.click_position();
-#var tlat = target.lat();
-#var tlong = target.lon();
-var tlat = getprop("ai/guided/bomb[0]/target-latitude-deg");
-var tlong = getprop("ai/guided/bomb[0]/target-longitude-deg");
+var tlat = getprop("ai/guided/bomb["~ n ~"]/target-latitude-deg");
+var tlong = getprop("ai/guided/bomb["~ n ~"]/target-longitude-deg");
 var talt_m = geo.elevation(tlat, tlong);
-setprop("ai/guided/bomb[0]/target-altitude-m",talt_m);
+setprop("ai/guided/bomb["~ n ~"]/target-altitude-m",talt_m);
 
 #calculation of distance, arrival time and heading
-var alat = getprop("ai/guided/bomb[0]/alat");
-var along = getprop("ai/guided/bomb[0]/along");
-var aalt_m = getprop("ai/guided/bomb[0]/aalt_m");
-var apos = geo.Coord.new().set_latlon(alat, along, aalt_m);
-var tpos = geo.Coord.new().set_latlon(tlat, tlong, talt_m);
-var tdist = apos.direct_distance_to(tpos);
-setprop("ai/guided/bomb[0]/target-distance",tdist);
-var cspeed_mps = getprop("velocities/airspeed-kt") * 0.51444;
-var ttime = tdist / cspeed_mps;
-var thdg = apos.course_to(tpos);
-setprop("ai/guided/bomb[0]/target-heading",thdg);
-
-#interpolation to target
-interpolate("ai/guided/bomb[0]/prop-latitude-deg",tlat,ttime);
-interpolate("ai/guided/bomb[0]/prop-longitude-deg",tlong,ttime);
-interpolate("ai/guided/bomb[0]/prop-altitude-ft",talt_m * 3.28084,ttime);
-interpolate("ai/guided/bomb[0]/prop-heading-deg",thdg,ttime / 4);
-
-#settimer(impact_detect, 2);
-impact_detect0();
-}
-
-###guidance to target (bomb nr 1)
-var target_guide1 = func  {
-
-# target parameters
-#var target = geo.click_position();
-#var tlat = target.lat();
-#var tlong = target.lon();
-var tlat = getprop("ai/guided/bomb[1]/target-latitude-deg");
-var tlong = getprop("ai/guided/bomb[1]/target-longitude-deg");
-var talt_m = geo.elevation(tlat, tlong);
-setprop("ai/guided/bomb[1]/target-altitude-m",talt_m);
-
-#calculation of distance and arrival time
-var alat = getprop("ai/guided/bomb[1]/alat");
-var along = getprop("ai/guided/bomb[1]/along");
-var aalt_m = getprop("ai/guided/bomb[1]/aalt_m");
-var apos = geo.Coord.new().set_latlon(alat, along, aalt_m);
-var tpos = geo.Coord.new().set_latlon(tlat, tlong, talt_m);
-var tdist = apos.direct_distance_to(tpos);
-setprop("ai/guided/bomb[1]/target-distance",tdist);
-var cspeed_mps = getprop("velocities/airspeed-kt") * 0.51444;
-var ttime = tdist / cspeed_mps;
-var thdg = apos.course_to(tpos);
-setprop("ai/guided/bomb[1]/target-heading",thdg);
-
-#interpolation to target
-interpolate("ai/guided/bomb[1]/prop-latitude-deg",tlat,ttime);
-interpolate("ai/guided/bomb[1]/prop-longitude-deg",tlong,ttime);
-interpolate("ai/guided/bomb[1]/prop-altitude-ft",talt_m * 3.28084,ttime);
-interpolate("ai/guided/bomb[1]/prop-heading-deg",thdg,ttime / 4);
-
-#settimer(impact_detect, 2);
-impact_detect1();
-}
-
-###guidance to target (bomb nr 2)
-var target_guide2 = func  {
-
-# target parameters
-#var target = geo.click_position();
-#var tlat = target.lat();
-#var tlong = target.lon();
-var tlat = getprop("ai/guided/bomb[2]/target-latitude-deg");
-var tlong = getprop("ai/guided/bomb[2]/target-longitude-deg");
-var talt_m = geo.elevation(tlat, tlong);
-setprop("ai/guided/bomb[2]/target-altitude-m",talt_m);
-
-#calculation of distance and arrival time
-var alat = getprop("ai/guided/bomb[2]/alat");
-var along = getprop("ai/guided/bomb[2]/along");
-var aalt_m = getprop("ai/guided/bomb[2]/aalt_m");
+var alat = getprop("ai/guided/bomb["~ n ~"]/alat");
+var along = getprop("ai/guided/bomb["~ n ~"]/along");
+var aalt_m = getprop("ai/guided/bomb["~ n ~"]/aalt_m");
 var apos = geo.Coord.new().set_latlon(alat, along, aalt_m);
 var tpos = geo.Coord.new().set_latlon(tlat, tlong, talt_m);
 var tdist = apos.direct_distance_to(tpos);
-setprop("ai/guided/bomb[2]/target-distance",tdist);
+setprop("ai/guided/bomb["~ n ~"]/target-distance",tdist);
 var cspeed_mps = getprop("velocities/airspeed-kt") * 0.51444;
 var ttime = tdist / cspeed_mps;
 var thdg = apos.course_to(tpos);
-setprop("ai/guided/bomb[2]/target-heading",thdg);
+setprop("ai/guided/bomb["~ n ~"]/target-heading",thdg);
 
 #interpolation to target
-interpolate("ai/guided/bomb[2]/prop-latitude-deg",tlat,ttime);
-interpolate("ai/guided/bomb[2]/prop-longitude-deg",tlong,ttime);
-interpolate("ai/guided/bomb[2]/prop-altitude-ft",talt_m * 3.28084,ttime);
-interpolate("ai/guided/bomb[2]/prop-heading-deg",thdg,ttime / 4);
+interpolate("ai/guided/bomb["~ n ~"]/prop-latitude-deg",tlat,ttime);
+interpolate("ai/guided/bomb["~ n ~"]/prop-longitude-deg",tlong,ttime);
+interpolate("ai/guided/bomb["~ n ~"]/prop-altitude-ft",talt_m * 3.28084,ttime);
+interpolate("ai/guided/bomb["~ n ~"]/prop-heading-deg",thdg,ttime / 4);
 
-#settimer(impact_detect, 2);
-impact_detect2();
-}
-
-###guidance to target (bomb nr 3)
-var target_guide3 = func  {
-
-# target parameters
-#var target = geo.click_position();
-#var tlat = target.lat();
-#var tlong = target.lon();
-var tlat = getprop("ai/guided/bomb[3]/target-latitude-deg");
-var tlong = getprop("ai/guided/bomb[3]/target-longitude-deg");
-var talt_m = geo.elevation(tlat, tlong);
-setprop("ai/guided/bomb[3]/target-altitude-m",talt_m);
-
-#calculation of distance and arrival time
-var alat = getprop("ai/guided/bomb[3]/alat");
-var along = getprop("ai/guided/bomb[3]/along");
-var aalt_m = getprop("ai/guided/bomb[3]/aalt_m");
-var apos = geo.Coord.new().set_latlon(alat, along, aalt_m);
-var tpos = geo.Coord.new().set_latlon(tlat, tlong, talt_m);
-var tdist = apos.direct_distance_to(tpos);
-setprop("ai/guided/bomb[3]/target-distance",tdist);
-var cspeed_mps = getprop("velocities/airspeed-kt") * 0.51444;
-var ttime = tdist / cspeed_mps;
-var thdg = apos.course_to(tpos);
-setprop("ai/guided/bomb[3]/target-heading",thdg);
-
-#interpolation to target
-interpolate("ai/guided/bomb[3]/prop-latitude-deg",tlat,ttime);
-interpolate("ai/guided/bomb[3]/prop-longitude-deg",tlong,ttime);
-interpolate("ai/guided/bomb[3]/prop-altitude-ft",talt_m * 3.28084,ttime);
-interpolate("ai/guided/bomb[3]/prop-heading-deg",thdg,ttime / 4);
-
-#settimer(impact_detect, 2);
-impact_detect3();
+weapons.impact_detect(n);
 }
 
 #####
-## detect impact (bomb 0)
+## detect impact (bomb n)
 #####
-var impact_detect0 = func {
-var galt = getprop("ai/guided/bomb[0]/prop-altitude-ft");
-var talt = getprop("ai/guided/bomb[0]/target-altitude-m");
-var glat = getprop("ai/guided/bomb[0]/prop-latitude-deg");
-var glong = getprop("ai/guided/bomb[0]/prop-longitude-deg");
-
-if (galt - (talt * 3.28084) <= 3) {
-setprop ("ai/guided/bomb[0]/i-latitude-deg", glat);
-setprop ("ai/guided/bomb[0]/i-longitude-deg", glong);
-
-impact_report(0);
-#props.globals.getNode("/models", 1).removeChild("model", 0);
-} else {
-  settimer(impact_detect0, 0);
-  }
-}
-
-#detect impact (bomb 1)
-var impact_detect1 = func {
-var galt = getprop("ai/guided/bomb[1]/prop-altitude-ft");
-var talt = getprop("ai/guided/bomb[1]/target-altitude-m");
-var glat = getprop("ai/guided/bomb[1]/prop-latitude-deg");
-var glong = getprop("ai/guided/bomb[1]/prop-longitude-deg");
+var impact_detect = func(n) {
+var galt = getprop("ai/guided/bomb["~ n ~"]/prop-altitude-ft");
+var talt = getprop("ai/guided/bomb["~ n ~"]/target-altitude-m");
+var glat = getprop("ai/guided/bomb["~ n ~"]/prop-latitude-deg");
+var glong = getprop("ai/guided/bomb["~ n ~"]/prop-longitude-deg");
 
 if (galt - (talt * 3.28084) <= 3) {
-setprop ("ai/guided/bomb[1]/i-latitude-deg", glat);
-setprop ("ai/guided/bomb[1]/i-longitude-deg", glong);
+  setprop ("ai/guided/bomb["~ n ~"]/i-latitude-deg", glat);
+  setprop ("ai/guided/bomb["~ n ~"]/i-longitude-deg", glong);
 
-impact_report(1);
-#props.globals.getNode("/models", 1).removeChild("model", 0);
-} else {
-  settimer(impact_detect1, 0);
-  }
-}
-
-#detect impact (bomb 2)
-var impact_detect2 = func {
-var galt = getprop("ai/guided/bomb[2]/prop-altitude-ft");
-var talt = getprop("ai/guided/bomb[2]/target-altitude-m");
-var glat = getprop("ai/guided/bomb[2]/prop-latitude-deg");
-var glong = getprop("ai/guided/bomb[2]/prop-longitude-deg");
-
-if (galt - (talt * 3.28084) <= 3) {
-setprop ("ai/guided/bomb[2]/i-latitude-deg", glat);
-setprop ("ai/guided/bomb[2]/i-longitude-deg", glong);
-
-impact_report(2);
-#props.globals.getNode("/models", 1).removeChild("model", 0);
-} else {
-  settimer(impact_detect2, 0);
-  }
-}
-
-#detect impact (bomb 3)
-var impact_detect3 = func {
-var galt = getprop("ai/guided/bomb[3]/prop-altitude-ft");
-var talt = getprop("ai/guided/bomb[3]/target-altitude-m");
-var glat = getprop("ai/guided/bomb[3]/prop-latitude-deg");
-var glong = getprop("ai/guided/bomb[3]/prop-longitude-deg");
-
-if (galt - (talt * 3.28084) <= 3) {
-setprop ("ai/guided/bomb[3]/i-latitude-deg", glat);
-setprop ("ai/guided/bomb[3]/i-longitude-deg", glong);
-
-impact_report(3);
-#props.globals.getNode("/models", 1).removeChild("model", 0);
-} else {
-  settimer(impact_detect3, 0);
+  weapons.impact_report(n);
+  #props.globals.getNode("/models", 1).removeChild("model", 0);
+  } else {
+    settimer(func{impact_detect(n);}, 0);
   }
 }
 
@@ -344,31 +164,18 @@
 #}
 }
 
-#####
-## target designator (mouseclick and button)
-#####
-var target_des_xxx = func {
-var n = getprop("ai/guided/target-number");
-var o = n + 1;
-var m = n + 1;
-if (m == 4) {
-var m = 0;
-}
-setprop("ai/guided/target-number", m);
-# target parameters
-var target = geo.click_position();
-var tlat = target.lat();
-var tlong = target.lon();
-setprop("ai/guided/bomb[" ~ n ~ "]/target-latitude-deg",tlat);
-setprop("ai/guided/bomb[" ~ n ~ "]/target-longitude-deg",tlong);
-setprop("ai/guided/bomb[" ~ n ~ "]/launched",0);
-setprop("ai/guided/bomb[" ~ n ~ "]/target-in_range", 0);
-setprop("ai/guided/number_for_release", 0);
-var ltext = "Coordinates for target " ~ o ~ " stored";
-screen.log.write(ltext);
-}
+## Add listener for bomb impact (from vulcan b2)
+setlistener("ai/models/model-impact", func(n) {
+    var impact = n.getValue();
+    var solid = getprop(impact ~ "/material/solid");
+
+    if (solid){
+      var long = getprop(impact ~ "/impact/longitude-deg");
+      var lat = getprop(impact ~ "/impact/latitude-deg");
+
+      geo.put_model("Aircraft/vulcanb2/Models/crater.ac",lat, long);
+    }
+});
 
 #removing
 #props.globals.getNode("/models", 1).removeChild("model", 0);
-
-#print("clear downhill");

Index: low.nas
===================================================================
RCS file: /var/cvs/FlightGear-0.9/data/Aircraft/B-1B/Nasal/low.nas,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- low.nas	24 Aug 2008 16:09:37 -0000	1.1
+++ low.nas	30 Mar 2010 21:49:41 -0000	1.2
@@ -9,15 +9,11 @@
 
 var calt = getprop("position/altitude-agl-ft");
 var cspd = getprop("velocities/groundspeed-kt");
-var burn0 = getprop("controls/engines/engine[0]/afterburner");
-var burn1 = getprop("controls/engines/engine[1]/afterburner");
 
-if((calt <= 300) and (cspd >= 450)) {
-setprop("controls/state/low_level", 1);
-} elsif ((calt <= 300) and ((burn0 == 1) or (burn1 == 1))) {
-setprop("controls/state/low_level", 1);
-  } else {
-setprop("controls/state/low_level", 0);
+if((calt <= 300) and (cspd >= 430)) {
+  setprop("controls/state/low_level", 1);
+} else {
+   setprop("controls/state/low_level", 0);
     }
 
 settimer(low_loop, 1);

Index: oso_management.nas
===================================================================
RCS file: /var/cvs/FlightGear-0.9/data/Aircraft/B-1B/Nasal/oso_management.nas,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- oso_management.nas	11 Dec 2008 00:02:50 -0000	1.1
+++ oso_management.nas	30 Mar 2010 21:49:44 -0000	1.2
@@ -1,16 +1,267 @@
-#arms delivery system
+###arms delivery system
 
-var intmd_info = [
-{ position: 1, armed: 0, type: "gbu-31", guidable: 1, active: 0, released: 0},
-{ position: 2, armed: 0, type: "gbu-31", guidable: 1, active: 0, released: 0},
-{ position: 3, armed: 0, type: "gbu-31", guidable: 1, active: 0, released: 0},
-{ position: 4, armed: 0, type: "gbu-31", guidable: 1, active: 0, released: 0},
-{ position: 5, armed: 0, type: "gbu-31", guidable: 1, active: 0, released: 0},
-{ position: 6, armed: 0, type: "gbu-31", guidable: 1, active: 0, released: 0},
-{ position: 7, armed: 0, type: "gbu-31", guidable: 1, active: 0, released: 0},
-{ position: 8, armed: 0, type: "gbu-31", guidable: 1, active: 0, released: 0}
+### weapon dialog
+var weapon_select = gui.Dialog.new("dialog","Aircraft/B-1B/Dialogs/weapons.xml");
+
+###set global vars
+var wpn_info = [
+    { position: 1, armed: 0, type: "", guidable: 1, active: 0, released: 0, lon: 0, lat: 0, talt_m: 0, distance: "9999", timer: 9999},
+    { position: 2, armed: 0, type: "", guidable: 1, active: 0, released: 0, lon: 0, lat: 0, talt_m: 0, distance: "9999", timer: 9999},
+    { position: 3, armed: 0, type: "", guidable: 1, active: 0, released: 0, lon: 0, lat: 0, talt_m: 0, distance: "9999", timer: 9999},
+    { position: 4, armed: 0, type: "", guidable: 1, active: 0, released: 0, lon: 0, lat: 0, talt_m: 0, distance: "9999", timer: 9999},
+    { position: 5, armed: 0, type: "", guidable: 1, active: 0, released: 0, lon: 0, lat: 0, talt_m: 0, distance: "9999", timer: 9999},
+    { position: 6, armed: 0, type: "", guidable: 1, active: 0, released: 0, lon: 0, lat: 0, talt_m: 0, distance: "9999", timer: 9999},
+    { position: 7, armed: 0, type: "", guidable: 1, active: 0, released: 0, lon: 0, lat: 0, talt_m: 0, distance: "9999", timer: 9999},
+    { position: 8, armed: 0, type: "", guidable: 1, active: 0, released: 0, lon: 0, lat: 0, talt_m: 0, distance: "9999", timer: 9999}
 ];
+var rot_launch_seq = [0,0,0,0,0,0,0,0];
+setprop("armament/bay1/launcher-pos", 0);
+setprop("ai/guided/target-number", 0);
+
+#####
+###weapon load
+#####
+var wpn_load = func (n) {
+
+  var wow = getprop("gear/gear[0]/wow");
+  var roll = getprop("gear/gear[0]/rollspeed-ms");
+  if ((wow == 1) and (roll < 1)) {
+    var weight_intmd = 0;
+    for (var i = 0; i < 8; i += 1) {
+      wpn_info[i].type = "gbu-31";
+      wpn_info[i].armed = 0;
+      wpn_info[i].active = 0;
+      wpn_info[i].released = 0;
+      setprop("armament/bay"~ n ~"/rack"~ i ~"-armed",0);
+      setprop("armament/bay"~ n ~"/rack"~ i ~"",1);
+      setprop("ai/guided/bomb["~ i ~"]/target-distance",9999);
+      setprop("ai/guided/bomb["~ i ~"]/target-distance-sec",9999);
+      setprop("ai/guided/bomb["~ i ~"]/target-latitude-deg",0);
+      setprop("ai/guided/bomb["~ i ~"]/target-longitude-deg",0);
+      weight_intmd += 2000;#2000lb for gbu-31
+    }
+    var bw = 4 + n;
+    setprop("sim/weight["~ bw ~"]/weight-lb", weight_intmd);
+    var ltext = "Weapons loaded!";
+    screen.log.write(ltext);
+      #some geo stuff tryout
+      var clat = getprop("position/latitude-deg");
+      var clon = getprop("position/longitude-deg");
+      var geo_info = geodinfo(clat,clon);
+      var solid = geo_info[1]["solid"];
+      var material_name = geo_info[1]["names"][0];
+      #debug.dump(geo_info);#dumps the whole info
+      print("Current landcover:");
+      print(solid);#1 if solid, 0 if not
+      print(material_name);
+
+  }  else {
+       var ltext = "You have to stop at an airfield to be able to onload weapons!";
+       screen.log.write(ltext);
+     }
+}
+
+#####
+###weapon status update main
+#####
+var wpn_update = func(){
+
+  var n = getprop("armament/oso/bay-selected");
+
+  ## calculate distance and timer to targets
+  ##
+
+  var on = getprop("armament/oso/x-to-target");
+if (on){
+  # our position
+  var calt_m = getprop("position/altitude-ft") / 3.28084;
+  var clat = getprop("position/latitude-deg");
+  var clong = getprop("position/longitude-deg");
+  var cpos = geo.Coord.new().set_latlon(clat, clong, calt_m);
+
+  # target parameters
+  for (var i = 0; i < 8; i += 1) {
+    # target parameters
+    var tpos = geo.Coord.new().set_latlon(wpn_info[i]["lat"], wpn_info[i]["lon"], wpn_info[i]["talt_m"]);
+
+    var tdist = cpos.distance_to(tpos);#in m
+    var tdist_nm = (tdist / 1000) * 0.539956;#m to nm
+    wpn_info[i].distance = tdist_nm;
+    setprop("ai/guided/bomb["~ i ~"]/target-distance",tdist_nm);
+
+    var tdalt = calt_m - wpn_info[i]["talt_m"];
+    var range_max = tdalt * 3;#30000m downrange for 10000m alt
+
+    #new: calc sec to in range
+    var tdist_range = tdist - range_max;
+    var c_speed = getprop("velocities/groundspeed-kt");
+    var tdist_range_time = tdist_range / (c_speed * 0.51444);#conversions and calc of sec
+    wpn_info[i].timer = tdist_range_time;
+    setprop("ai/guided/bomb["~ i ~"]/target-distance-sec",tdist_range_time);
+    if (tdist_range_time < 4){
+      b1b.bay_intmd(1);
+    }
+
+    var tdeg = cpos.course_to(tpos);
+    setprop("ai/guided/bomb["~ i ~"]/target-bearing", tdeg);
+    var chdg = getprop("orientation/heading-deg");
+    var rel_tdeg = tdeg - chdg;
+    
+    #wpn check and release if in range
+    if ((range_max > tdist) and (rel_tdeg > -45) and (rel_tdeg < 45)){
+      setprop("ai/guided/bomb["~ i ~"]/target-in_range", 1);
+      #print("targetinrange" ~ i ~ "");
+      if ((wpn_info[i]["armed"] == 1) and (wpn_info[i]["active"] == 0)){
+        wpn_info[i].active = 1;
+        #prepare rot launcher for release
+        rot_launch_seq[i] = 1;
+        print("target_in_range");
+      }
+    } else {
+        rot_launch_seq[i] = 0;
+        #print("target_out_of_range");
+      }
+
+    }#for end
+  settimer(wpn_update, 1);
+  weapons.wso_mfd_draw();
+  }#on end
+}#end
+
+#####
+###launch weapons from rot launcher
+#####
+var rot_launch_rel = func() {
+  
+  # calc how many bombs are in target range
+  var in_range = 0;
+  for (var i = 0; i < 8; i += 1) {
+    if (rot_launch_seq[i] == 1){
+      in_range += 1;
+    }
+  }
+  if (in_range > 0) {
+    var bay = getprop("armament/oso/bay-selected");
+    var launcher_pos = getprop("armament/bay"~ bay ~"/launcher-pos");
+    if (rot_launch_seq[launcher_pos] == 1){
+      weapons.launch(launcher_pos);
+      rot_launch_seq[launcher_pos] = 0;
+      wpn_info[launcher_pos].released = 1;
+      wpn_info[launcher_pos].type = "";
+      wpn_info[launcher_pos].armed = 0;
+      setprop("armament/bay"~ bay ~"/rack"~ launcher_pos ~"-armed",0);
+      setprop("armament/bay"~ bay ~"/rack"~ launcher_pos ~"",0);
+      setprop("armament/bay"~ bay ~"/rack"~ launcher_pos ~"-released",1);
+      #weight adjust
+      var bw = 4 + bay;
+      var weight_intmd = getprop("sim/weight["~ bw ~"]/weight-lb");
+      weight_intmd -= 2000;
+      setprop("sim/weight["~ bw ~"]/weight-lb", weight_intmd);
+      #set released
+      print("weapon_released");
+    }
+    launcher_pos += 1;
+    if (launcher_pos >= 8) {
+      launcher_pos = 0;
+    } 
+    interpolate("armament/bay"~ bay ~"/launcher-pos",launcher_pos,1);
+    interpolate("armament/bay"~ bay ~"/launcher-pos-anim",launcher_pos,1);
+  }
+  var on = getprop("armament/oso/auto-release");
+  if (on){
+    settimer(rot_launch_rel, 1.1);
+  }
+}
+
+#####
+###OSO SMS buttons and functions
+#####
+var oso_sms_select = func (m, n){
+  #m: 1=bay,2=buttons - n: 0-9
+  if (m == 1){
+    setprop("armament/oso/bay-selected",n);
+  }
+  if (m == 2){
+    setprop("armament/oso/number-selected",n);
+  }
+}
+#arm selected bay and number if weapon is present
+var oso_arm = func(n){
+  var bay = getprop("armament/oso/bay-selected");
+  var nr = getprop("armament/oso/number-selected");
+  if (wpn_info[nr]["type"] == "gbu-31"){
+    wpn_info[nr].armed = n;
+    setprop("armament/bay"~ bay ~"/rack"~ nr ~"-armed",n);
+  } 
+}
+
+#rotate bay launcher, n determines racks to rotate
+var launcher_rot = func(n) {
+  var bay = getprop("armament/oso/bay-selected");
+  var launcher_pos = getprop("armament/bay"~ bay ~"/launcher-pos");
+  launcher_pos += n;
+  if (launcher_pos >= 8) {
+    launcher_pos = int(launcher_pos - 8);
+  }
+  interpolate("armament/bay"~ bay ~"/launcher-pos",launcher_pos,n);
+  interpolate("armament/bay"~ bay ~"/launcher-pos-anim",launcher_pos,n);
+}
+
+#####
+## target designator (target_number(), mouseclick and target_des())
+#####
+
+### sets target coordinates via mouseclick and t button
+var target_des = func {
+  var n = getprop("ai/guided/target-number");
+  var m = n + 1;
+
+  # target parameters
+  var target = geo.click_position();
+  var tlat = target.lat();
+  var tlon = target.lon();
+  setprop("ai/guided/bomb["~ n ~"]/target-latitude-deg",tlat);
+  setprop("ai/guided/bomb["~ n ~"]/target-longitude-deg",tlon);
+  wpn_info[n].lon = tlon;
+  wpn_info[n].lat = tlat;
+  var talt_m = geo.elevation(wpn_info[n]["lat"], wpn_info[n]["lon"]);
+  if ((talt_m == "nil") or (talt_m == '')) {
+    return;
+  }
+  wpn_info[n].talt_m = talt_m;
+
+  var ltext = "Coordinates for target " ~ m ~ " stored";
+  screen.log.write(ltext);
+}
 
-var type = intmd_info[0]["type"];
+var target_number = func(n){
+  var m = getprop("ai/guided/target-number");
+  m = m + n;
+  if ((m > 7) or (m < 0)) {
+    m = 0;
+  }
+  var mpl = m + 1;
+  setprop("ai/guided/target-number", m);
+  var ltext = "Rack " ~ mpl ~ " selected";
+  screen.log.write(ltext);
+}
 
-intmd_info[0].type = "gbu-31";# set type to gbu-31
+### adjust sniper pod
+var sniper_pod = func(n) {
+var pod_pos = getprop("armament/sniper-pod/position-norm");
+  if ((pod_pos <= 4) and (n == 1)) {
+    var pod_pos_new = pod_pos + n;
+    interpolate("armament/sniper-pod/position-norm",pod_pos_new,1);
+  }
+  if ((pod_pos >= 1) and (n == -1)) {
+    var pod_pos_new = pod_pos + n;
+    interpolate("armament/sniper-pod/position-norm",pod_pos_new,1);
+  }
+# to reset
+  if ((pod_pos >= 0.01) and (pod_pos <= 0.99)) {
+    interpolate("armament/sniper-pod/position-norm",0,1);
+  }
+}
+##
+#var type = wpn_info[0]["type"];
+#wpn_info[0].type = "gbu-31";# set type to gbu-31

Index: phd.nas
===================================================================
RCS file: /var/cvs/FlightGear-0.9/data/Aircraft/B-1B/Nasal/phd.nas,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- phd.nas	23 Jan 2010 09:51:26 -0000	1.1
+++ phd.nas	30 Mar 2010 21:49:46 -0000	1.2
@@ -5,7 +5,7 @@
 
 var disp_length	= 0.0856; # lenght of the plots line in m (3D model).
 var disp_def	= 50; # number of plots in the line (3D model).
-var dev_calibration = 5.5; # factors vert. deviation for better readability (2.5).
+var dev_calibration = 2.75; # factors vert. deviation for better readability (5.5).
 
 var UPDATE_PERIOD = 0.2;
 

Index: radar.nas
===================================================================
RCS file: /var/cvs/FlightGear-0.9/data/Aircraft/B-1B/Nasal/radar.nas,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- radar.nas	23 Jan 2010 09:51:27 -0000	1.2
+++ radar.nas	30 Mar 2010 21:49:46 -0000	1.3
@@ -1,13 +1,5 @@
 ##### Radar properties for display of multiplayer aircraft
-
-setlistener("/sim/signals/fdm-initialized", func {
-setprop("controls/switches/radar_init", 0);
-radar.mplayer();
-});
-
-#setlistener("controls/switches/terrain-follow", func {
-#settimer(mplayer,1, 0);
-#});
+##### Sorts aircraft (ai,multiplayer,tanker,carrier) due to distance
 
 ### calculates the correct mp distance for radar display
 #var 10 = 0.0080;
@@ -18,16 +10,115 @@
 #var 320 = 0.00025;
 #var 640 = 0.000125;
 
-var mplayer = func {
-var r_init = getprop("controls/switches/radar_init");
+var Mp = props.globals.getNode("ai/models");
+var mp_list = [];
+var tgts_list = [];
+var tgts_dist = [];
+var tgts_ind = [];
+
+var tgt_info = func(){
+  #var our_ac_name = getprop("sim/aircraft");
+  #var my_radardist = radar.my_maxrange( our_ac_name ) / 1.852; # in kilometers ->* to nm
+  #debug.dump(my_radardist);
+  tgts_list = [];
+  tgts_dist = {};
+  tgts_ind = [];
+  var raw_list = Mp.getChildren();
+  foreach( var c; raw_list ) {
+    #debug.dump(c);
+    var type = c.getName();
+    var index = c.getIndex();
+
+    if (type == "aircraft" or type == "multiplayer" or type == "tanker" or type == "carrier"){
+      var radar_av = c.getNode("radar"); 
+      if (radar_av != nil or ""){
+        var radar_range = c.getNode("radar/range-nm", 1).getValue();
+        var in_range = c.getNode("radar/in-range", 1).getValue();
+        var range_radar = getprop("instrumentation/radar/range[0]");
+        if(radar_range != nil and radar_range > 0 and range_radar > radar_range and in_range == 1){
+          append(tgts_list, c);
+          #var tc = typeof(c);
+          #print(tc);
+          var c_name = type ~ "[" ~ index ~ "]";
+          #print(c_name);
+          tgts_dist[radar_range] = c_name;
+          append(tgts_ind, radar_range);
+        }
 
- if (r_init == 0) {
-#   print("init1");
-   setprop("controls/switches/radar_init", 1);
-   setprop("controls/switches/radar_i", 0);
  }
+
+    }
+  }
+
+  #debug.dump(tgts_dist);
+  #debug.dump(tgts_ind);
+  var tgt_ind_sort = sort_array(tgts_ind);
+  #debug.dump(tgt_ind_sort);
+  mp_list = [];
+  for (var i = 0; i < size(tgt_ind_sort); i += 1){
+    var tgt_close = tgts_dist[tgt_ind_sort[i]];
+    tgt_close = "ai/models/" ~ tgt_close;
+    append(mp_list, tgt_close);
+  }
+  #debug.dump(mp_list);
+  
+  settimer(tgt_info,3);
+  show_radar();
+}
+
+#sorting array in ascending order, pass array
+var sort_array = func(n){
+  var Ta = n;
+  var ttemp = 0;
+  var tgt_size = size(tgts_ind);
+  for (var i = 1; i < tgt_size; i += 1) {
+    var k = 0;
+    for (var j = i; j > 0; j -= 1) {
+      k = j - 1;
+      if (Ta[k] > Ta[j]){
+        ttemp = Ta[j];
+        Ta[j] = Ta[k];
+        Ta[k] = ttemp;
+
+      }
+    }
+  }
+  return(Ta);
+}
+
+var show_radar = func(){
+  var r_init = getprop("controls/switches/radar_init");
+  if (r_init == 1) {
+    
+    #foreach( var c; mp_list ) {
+    for (var i = 0; i < size(mp_list); i += 1){
+      var c = props.globals.getNode(mp_list[i]);
+      #print(mp_list[i]);
+      var in_range = c.getNode("radar/in-range", 1).getValue();
+      setprop("instrumentation/radar/targets/target["~ i ~"]/in-range", in_range);
+      var radar_range = c.getNode("radar/range-nm", 1).getValue();
+      setprop("instrumentation/radar/targets/target["~ i ~"]/range-nm", radar_range);
+      var radar_bearing = c.getNode("radar/bearing-deg", 1).getValue();
+      setprop("instrumentation/radar/targets/target["~ i ~"]/bearing-deg", radar_bearing);
+      var radar_heading = c.getNode("orientation/true-heading-deg", 1).getValue();
+      setprop("instrumentation/radar/targets/target["~ i ~"]/true-heading-deg", radar_heading);
+      # calc draw distance
+      var range_radar = getprop("instrumentation/radar/range[0]");
+      var factor_range_radar = 0.08 / range_radar;
+      var draw_radar = factor_range_radar * radar_range;
+      setprop("instrumentation/radar/targets/target["~ i ~"]/draw-range-nm", draw_radar);
+      
+    }
+
+  }
+}
+
+
+var mplayer = func {
+  var r_init = getprop("controls/switches/radar_init");
+
  if (r_init == 1) {
-#print("init2");
+  #print("init2");
     var i = getprop("controls/switches/radar_i");
     var range_mp = getprop("ai/models/multiplayer[" ~ i ~ "]/distance-to-nm[0]");
     var range_radar = getprop("instrumentation/radar/range[0]");
@@ -38,6 +129,7 @@
     var factor_range_radar = 0.08 / range_radar;
     var draw_radar = factor_range_radar * range_mp;
     setprop("ai/models/multiplayer[" ~ i ~ "]/radar/draw-range-nm[0]", draw_radar);
+
       ###calculates the relative altitude compared to the user
       var mp_alt = getprop("ai/models/multiplayer[" ~ i ~ "]/position/altitude-ft");
       var my_alt = getprop("position/altitude-ft");
@@ -46,12 +138,18 @@
          }
       var rel_alt_mp = mp_alt - my_alt;
       setprop("ai/models/multiplayer[" ~ i ~ "]/position/rel-altitude-ft", rel_alt_mp);
-    var i = i + 1;
+      i = i + 1;
       if (i == 13) {
-       var i = 0;
+        i = 0;
       }
     setprop("controls/switches/radar_i", i);
   }
-settimer(mplayer, 0.1);
+  settimer(mplayer, 0.5);
 }
 
+setlistener("/sim/signals/fdm-initialized", func {
+  setprop("controls/switches/radar_init", 1);
+  setprop("controls/switches/radar_i", 0);
+  #radar.mplayer();
+  tgt_info();
+});

Index: rain.nas
===================================================================
RCS file: /var/cvs/FlightGear-0.9/data/Aircraft/B-1B/Nasal/rain.nas,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- rain.nas	4 Mar 2008 18:52:51 -0000	1.1
+++ rain.nas	30 Mar 2010 21:49:46 -0000	1.2
@@ -12,11 +12,11 @@
 var speed = getprop("velocities/airspeed-kt");
 if (rain >= 50) {
 setprop("environment/rain/rain", 1);
-settimer(rain_loop, 0.15);
+settimer(rain_loop, 0.5);
 } else {
   var rain_new = (rain + 1);
   setprop("environment/rain/rain", rain_new);
-  settimer(rain_loop, 0.15);
+  settimer(rain_loop, 0.5);
   }
 }
 

Index: terrain_follow.nas
===================================================================
RCS file: /var/cvs/FlightGear-0.9/data/Aircraft/B-1B/Nasal/terrain_follow.nas,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- terrain_follow.nas	23 Jan 2010 09:51:28 -0000	1.1
+++ terrain_follow.nas	30 Mar 2010 21:49:47 -0000	1.2
@@ -1,79 +1,127 @@
-#terrain following system - max speed 540knots tas
-#print("terrain following system active");
-
-#define local global vars
-var beam_ele = -9999;
-var sec_per_km = nil;
-var fixpos = nil;
-
-#start main loops if terrain-follow activated
-setlistener("controls/switches/terrain-follow", func {
-  cont_loop();
-  time_loop();
+#Terrain following script by glazmax
+#To activate/use prepare the following properties:
+#1.)set/create property: "instruments/tfs/range" to 1,2 or 3 (=nm radar range terrain prefetch)
+#2.)set/create property: "controls/switches/terrain-follow-clr" to desired terrain clearance in ft (eg.200 or 600)
+#3.)set/create/toggle property: "controls/switches/terrain-follow" to true
+#
+#terrain following 1000km/h:277.778m/s
+
+setlistener("controls/switches/terrain-follow", func() {
+  var act_path = [0,0,0];
+  setprop("controls/switches/terrain-follow-rng",1);
+  setprop("instrumentation/tfs/range",1);
+  setprop("instrumentation/tfs/high", 0);
+  setprop("instrumentation/tfs/time", 0);
+  setprop("instrumentation/tfs/loww", 0);
+  tfs.beam_max();
 });
 
+#create beam interval 0.1s = 27m resolution at 540knots
 
-var cont_loop = func {
-  if(enabled){
-    beam();
-    dist_cycle();
-    follow();
-    cont_loop();
-  }
-}
-
-var time_loop = func {
-  if(enabled){
-    time_per_km();
-    settimer(time_loop,0.5);
-  }
-}
+var beam_max = func() { 
 
-var beam = func {
-  var beam_dist = 3000;#in m
-  var my_pos = geo.aircraft_position();
-  var beam = my_pos.apply_course_distance(hdg, beam_dist);
-  var beam_alt = geo.elevation(beam.lat(), beam.lon());
-  if(beam_alt > beam_ele){
-    beam_ele = beam_alt;
+  #var alt_mat = n;
+  var range = getprop("instrumentation/tfs/range");
+  var radar_range = range * 1852;#to m
+
+  var clat = getprop("position/latitude-deg");
+  var clon = getprop("position/longitude-deg");
+  var c_pos = geo.Coord.new().set_latlon(clat, clon);
+  #debug.dump(c_pos);
+  var c_hdg = getprop("orientation/heading-magnetic-deg");
+  var c_speed = getprop("velocities/groundspeed-kt");
+  var d_alt = getprop("controls/switches/terrain-follow-clr");
+  var m_speed = c_speed * 0.51444;#conv to m/s
+  var t_time = radar_range / m_speed;
+
+  var point_coord = c_pos.apply_course_distance(c_hdg, radar_range);
+  var point_e = geo.elevation(point_coord.lat(),point_coord.lon());
+
+  if (point_e == nil){
+    point_e = 0;
+    print("Radar scan malfunction, no terrain found!");
+    setprop("instrumentation/tfs/beam-malfunction",1);
+    #return(beam_max);
+  } elsif (point_e != nil){
+      setprop("instrumentation/tfs/beam-malfunction",0);
+  }
+
+  var point_ele = int((point_e * 3.2808) + d_alt);
+  #debug.dump(point_ele);
+
+  #if tfs on --> loop and feed ap_react
+  var enabled = getprop("controls/switches/terrain-follow");
+  if (enabled) {
+    ap_react(radar_range, point_ele, t_time);
+    settimer(beam_max,0.1);
   }
 }
 
-var time_per_km = func {
-  var tas = getprop("velocities/groundspeed-kt");
-  var tas_mps = tas * 1.852 / 3.6;
-  sec_per_km = 1000 / tas_mps;
-}
-
-var vfps_up = func {
-  var calt = getprop("position/altitude-ft");
-  var talt = nil;
-  target-vfpm = ((talt - calt) / sec_per_km + ((talt - calt) * 1) / (2 * sec_per_km)) * 3600;
-  interpolate(instrumentation/teravd/current-vfpm,target-vfpm,(sec_per_km / 3));
-}
-
-var vfps_up_level = func {
-  var talt = nil;
-  if ((talt - calt) < ((talt - fixalt) / 4)){
-    #engage alt hold to level out
-  }
+#compute following behaviour according to scan results
+var ap_react = func(n,m,o){
+
+  var radar_range = n;
+  var point_ele = m;
+  var t_time = o;
+
+  #var alt_mat = getprop("instrumentation/tfs/alt_mat");
+  var high = getprop("instrumentation/tfs/high");
+  var time = getprop("instrumentation/tfs/time");
+  var loww = getprop("instrumentation/tfs/loww");
   
-}
+  var c_alt = getprop("position/altitude-ft");
 
-var dist_cycle = func {
-  if(fixdist == nil or fixdist > 1000){#in m
-  beam_ele = -9999;
-  fixpos = geo.aircraft_position();
+  if (point_ele > c_alt) {
+    print("^up");
+    if (high < point_ele){
+      high = point_ele;
+      time = t_time;
+    } elsif (high > point_ele){
+        time -= 0.1;
+        if (loww < point_ele){
+          loww = point_ele;
+        }
   }
-  var fixdist = fixpos.direct_distance_to(geo.aircraft_position());#in m
-}
-
-var follow = func {
-  if(talt >= calt){
-    #go up
+  
+    setprop("instrumentation/tfs/high", high);
+    setprop("instrumentation/tfs/time", time);
+    setprop("instrumentation/tfs/loww", loww);
+    ap_adjust(high);
+
+  } elsif (point_ele < c_alt){
+      print("vdown");
+      setprop("instrumentation/tfs/high", -999);  
+      time -= 0.1;
+      setprop("instrumentation/tfs/time", time);
+      if (loww < point_ele){
+        loww = point_ele;
+        setprop("instrumentation/tfs/loww", loww);
+  }
+      if (time < 0){
+
+        time = t_time;
+        setprop("instrumentation/tfs/time", time);
+        setprop("instrumentation/tfs/loww", -999);
+        ap_adjust(loww);
   }
-  if(talt < calt){
-    #go down
   }
+}
 
+#adjust the autopilot "terrain-follow" function
+var ap_adjust = func(n) {
+
+  var t_alt = n;
+  setprop("autopilot/settings/target-follow-altitude-ft",t_alt);
+  setprop("autopilot/locks/altitude", "terrain-follow");
+  #print("t_alt:");
+  #debug.dump(t_alt);
+}
+
+#set range according to knob setting
+var range_set = func(){
+  var ranges = [0.5,1,2];
+  var r_set = getprop("controls/switches/terrain-follow-rng");
+  setprop("instrumentation/tfs/range",ranges[r_set]);
+  var set_print = ranges[r_set];
+  #print("tfs_range: " ~ set_print ~ "!");
 }
\ No newline at end of file

--- "oso_target.nas" DELETED ---

--- "tfs.nas" DELETED ---

--- "weapons.nas" DELETED ---


------------------------------------------------------------------------------
Download Intel&#174; Parallel Studio Eval
Try the new software tools for yourself. Speed compiling, find bugs
proactively, and fine-tune applications for parallel performance.
See why Intel Parallel Studio got high marks during beta.
http://p.sf.net/sfu/intel-sw-dev
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.