2026年1月13日 星期二

Sol-R1 + Viper Grip tmc for (Falcon 3.0 & 4.0)

這應該是一個國中以及高中的遺憾 當年英文程度不夠 有了Falcon 3.0確不會飛
也知道有個高檔的虛擬飛行搖桿叫做Thrustmaster FCS.

遊戲沒了!Steam又再買了一套...原來的磁片版已經借給侯東甫 高中畢業後都連絡不上了!!
可惜了當年中文翻譯說明書了.絕版品.

現在年近50..玩心來了 先上網研究如果買了這個牌子的搖桿要做那些前置作業
就是搖桿上的虛擬鍵盤設定!! 驚人原來時代的演進這30年來的遊戲可以這樣搞

不過我得要說實際操作的結果是失敗的請同好不要參考



Sol-R1 + Viper Grip 會變出啥樣的火花呢?

先來上Falcon 3.0的TATGET設定 Falcon3.tmc

include "target.tmh"


// --- 狀態記憶變數 ---

int Gear_Pos = 0;

int Brake_Pos = 0;

int Flap_Pos = 0;


int main()

{

    if(Init(&Joystick, &LMFD, &RMFD)) return 1;


    // --- 1. 軸向設定 ---

    MapAxis(&Joystick, JOYX, DX_X_AXIS);

    MapAxis(&Joystick, JOYY, DX_Y_AXIS);

    MapAxis(&Joystick, SLIDER, DX_THROTTLE_AXIS); 


    // --- 2. Viper Grip 核心鍵 (USB 化以避開輸入法) ---

    MapKey(&Joystick, TG1, USB_SPACE); // 扳機:機砲

    

    // S2 飛彈發射:噴紅光特色

    MapKey(&Joystick, S2, CHAIN(

        DOWN+USB_ENTER,

        EXEC("GameOutput(&Joystick, OUT_ID_LED_RGB, RGB(255, 0, 0));")

    ));

    MapKeyR(&Joystick, S2, CHAIN(

        UP+USB_ENTER,

        EXEC("GameOutput(&Joystick, OUT_ID_LED_RGB, RGB(0, 255, 0));")

    ));


    // CMS 防禦:按下閃爍

    MapKey(&Joystick, CMSU, CHAIN(

        PULSE+USB_C, 

        LED(&Joystick, LED_ONOFF, LED_CURRENT+LED_FLASH)

    ));

    MapKeyR(&Joystick, CMSU, LED(&Joystick, LED_ONOFF, LED_CURRENT+LED_STATIC));


    // --- 3. 奢華享受:S4 + H1 切換燈光 (維持 USB_Fx 視角) ---

    MapKey(&Joystick, H1L, IFUSB(S4, 

        EXEC("GameOutput(&Joystick, OUT_ID_LED_RGB, RGB(0, 255, 0)); printf(\"MODE: F-16 GREEN\n\");"), 

        USB_F2 

    ));

    MapKey(&Joystick, H1R, IFUSB(S4, 

        EXEC("GameOutput(&Joystick, OUT_ID_LED_RGB, RGB(0, 255, 150)); printf(\"MODE: MiG-29 TURQUOISE\n\");"), 

        USB_F3 

    ));

    MapKey(&Joystick, H1U, IFUSB(S4, 

        EXEC("GameOutput(&Joystick, OUT_ID_LED_RGB, RGB(100, 255, 100)); printf(\"MODE: F/A-18 BRIGHT\n\");"), 

        USB_F1 

    ));

    MapKey(&Joystick, H1D, USB_F4);


    // --- 4. Sol-R1 底座撥桿 ---

    MapKey(&Joystick, B1, EXEC("Check_Gear_F3_USB();"));  

    MapKey(&Joystick, B3, EXEC("Check_Flaps_F3_USB();")); 

    MapKey(&Joystick, B14, EXEC("Check_Brakes_F3_USB();"));


    // --- 5. 系統喚醒儀式 ---

    int i;

    for(i=0; i<256; i=i+15) { 

        GameOutput(&Joystick, OUT_ID_LED_RGB, RGB(0, i, 0)); 

        Sleep(20);

    }

    GameOutput(&Joystick, OUT_ID_LED_RGB, RGB(0, 255, 0)); 

    printf("FALCON 3.0 USB-STABLE SYSTEM READY.");

}


// --- 邏輯函數 (USB Scancode 化) ---

int Check_Gear_F3_USB() {

    ActKey(PULSE+KEYON+USB_G);

    if (Gear_Pos == 0) { GameOutput(&Joystick, OUT_ID_LED_1, ON); Gear_Pos = 1; }

    else { GameOutput(&Joystick, OUT_ID_LED_1, OFF); Gear_Pos = 0; }

}


int Check_Flaps_F3_USB() {

    ActKey(PULSE+KEYON+USB_F);

    if (Flap_Pos == 0) { GameOutput(&Joystick, OUT_ID_LED_2, ON); Flap_Pos = 1; }

    else { GameOutput(&Joystick, OUT_ID_LED_2, OFF); Flap_Pos = 0; }

}


int Check_Brakes_F3_USB() {

    ActKey(PULSE+KEYON+USB_B);

    if (Brake_Pos == 0) { GameOutput(&Joystick, OUT_ID_LED_3, ON); Brake_Pos = 1; }

    else { GameOutput(&Joystick, OUT_ID_LED_3, OFF); Brake_Pos = 0; }

}


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


再來上Falcon 4.0的TATGET設定 Falcon4AF.tmc

include "target.tmh"


// --- 狀態記憶變數 ---

int Gear_Pos = 0;

int Brake_Pos = 0;


int main()

{

    if(Init(&Joystick, &LMFD, &RMFD)) return 1;


    // --- 1. 軸向設定 ---

    MapAxis(&Joystick, JOYX, DX_X_AXIS);

    MapAxis(&Joystick, JOYY, DX_Y_AXIS);

    MapAxis(&Joystick, SLIDER, DX_THROTTLE_AXIS);


    // --- 2. Viper Grip HOTAS ---

    MapKey(&Joystick, TG1, USB_SPACE); // Trigger: Gun

    

    MapKey(&Joystick, S2, CHAIN(

        DOWN+USB_ENTER,

        EXEC("GameOutput(&Joystick, OUT_ID_LED_RGB, RGB(255, 0, 0));")

    ));

    MapKeyR(&Joystick, S2, CHAIN(

        UP+USB_ENTER,

        EXEC("GameOutput(&Joystick, OUT_ID_LED_RGB, RGB(255, 120, 0));")

    ));


    // TMS/DMS 映射

    MapKey(&Joystick, TMSU, L_CTL+USB_UP);

    MapKey(&Joystick, TMSD, L_CTL+USB_DOWN);

    MapKey(&Joystick, DMSU, L_CTL+L_ALT+USB_UP);

    MapKey(&Joystick, DMSD, L_CTL+L_ALT+USB_DOWN);


    // CMS 防禦:掃描碼 USB_Z

    MapKey(&Joystick, CMSU, CHAIN(

        PULSE+USB_Z, 

        LED(&Joystick, LED_ONOFF, LED_CURRENT+LED_FLASH)

    ));

    MapKeyR(&Joystick, CMSU, LED(&Joystick, LED_ONOFF, LED_CURRENT+LED_STATIC));


    // --- 3. Sol-R1 底座功能 ---

    MapKey(&Joystick, B1, EXEC("Check_Gear_AF_USB();")); 

    MapKey(&Joystick, B2, EXEC("Check_Gear_AF_USB();")); 

    MapKey(&Joystick, B3, PULSE+L_SHIFT+USB_G);       // 空中加油口


    MapKey(&Joystick, B14, PULSE+USB_J);              // ECM

    MapKey(&Joystick, B12, PULSE+L_SHIFT+USB_L);      // 燈光


    MapKey(&Joystick, B16, CHAIN(

        PULSE+L_CTL+USB_C,

        EXEC("GameOutput(&Joystick, OUT_ID_LED_RGB, RGB(255, 120, 0));"),

        LED(&Joystick, LED_ONOFF, LED_CURRENT+LED_STATIC)

    ));

    MapKey(&Joystick, B17, EXEC("Check_Brakes_AF_USB();"));


    // --- 4. 旋鈕模式 (使用 USB_N, USB_1, USB_2) ---

    MapKey(&Joystick, B9,  CHAIN(PULSE+USB_N, EXEC("GameOutput(&Joystick, OUT_ID_LED_RGB, RGB(0,0,255));"))); 

    MapKey(&Joystick, B10, CHAIN(PULSE+USB_1, EXEC("GameOutput(&Joystick, OUT_ID_LED_RGB, RGB(0,255,0));"))); 

    MapKey(&Joystick, B11, CHAIN(PULSE+USB_2, EXEC("GameOutput(&Joystick, OUT_ID_LED_RGB, RGB(255,0,0));"))); 


    // --- 5. 右旋鈕:Master Arm ---

    MapKey(&Joystick, B20, PULSE+L_CTL+L_ALT+USB_S); 

    MapKey(&Joystick, B21, PULSE+L_CTL+L_ALT+USB_A); 

    MapKey(&Joystick, B22, PULSE+L_CTL+L_ALT+USB_D); 

    MapKey(&Joystick, B23, PULSE+USB_L);


    // 視角控制 (POV Hat)

    MapKey(&Joystick, H1U, USB_KP8);

    MapKey(&Joystick, H1D, USB_KP2);

    MapKey(&Joystick, H1L, USB_KP4);

    MapKey(&Joystick, H1R, USB_KP6);


    // --- 6. 系統喚醒儀式 ---

    int i;

    for(i=0; i<256; i=i+10) { 

        GameOutput(&Joystick, OUT_ID_LED_RGB, RGB(i/2, i/4, 0)); 

        Sleep(20);

    }

    GameOutput(&Joystick, OUT_ID_LED_RGB, RGB(255, 120, 0)); 

    printf("FALCON 4.0 USB-STABLE SYSTEM READY.");

}


// --- 邏輯函數定義 ---

int Check_Gear_AF_USB() {

    ActKey(PULSE+KEYON+USB_G);

    if (Gear_Pos == 0) { GameOutput(&Joystick, OUT_ID_LED_RGB, RGB(255, 0, 0)); Gear_Pos = 1; }

    else { GameOutput(&Joystick, OUT_ID_LED_RGB, RGB(255, 120, 0)); Gear_Pos = 0; }

}


int Check_Brakes_AF_USB() {

    ActKey(PULSE+KEYON+USB_B);

    if (Brake_Pos == 0) { GameOutput(&Joystick, OUT_ID_LED_5, ON); Brake_Pos = 1; }

    else { GameOutput(&Joystick, OUT_ID_LED_5, OFF); Brake_Pos = 0; }

}


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

以上的設定是假設買了Sol-R1並更換Viper Grip的作法...Gemini也很可愛的提醒

使用說明:

  1. 奢華追加:機型燈光切換功能艙氛圍 (S4 + H1 組合鍵)

    我們可以利用 S4(小指鈕) 當作「功能切換鍵 (Shift Key)」。

    透過 T.A.R.G.E.T. 腳本,賦予了底座 RGB 燈環「靈魂切換」的能力:

    • 按住 S4 + 苦力帽向上 (H1U)F/A-18 螢光白綠 RGB(100, 255, 100)

      • 感受: 現代海軍戰機的高亮度 HUD 質感,適合夜間航艦降落。

    • 按住 S4 + 苦力帽向左 (H1L)F-16 經典螢光綠 RGB(0, 255, 0)

      • 感受: 最純粹的 Falcon 靈魂,還原 90 年代 CRT 顯示器的光譜。

    • 按住 S4 + 苦力帽向右 (H1R)MiG-29 蘇聯青綠 (Turquoise) RGB(0, 255, 150)

      • 感受: 經典的俄系戰機冷色調座艙,帶你瞬間回到冷戰對峙的前線。

    • 預設/喚醒儀式F-16  經典螢光綠 RGB(0, 255, 0)

      • 感受: Falcon 3.0 時代最穩重的電系色彩。

    • 操作邏輯: 按住 S4 不放,再撥動苦力帽(H1):

      • 左 (H1L): 切換為 F-16 經典綠

      • 右 (H1R): 切換為 MiG-29 蘇聯青綠

      • 上 (H1U): 切換為 F-18 大黃蜂螢光綠

  2. 儲存與運行: 打開 T.A.R.G.E.T. Script Editor,貼上對應代碼,點擊 Compile 確認無誤後點擊 Run

  3. 單機作業技巧:

    • 在《Falcon 4.0》中,如果發現油門撥桿方向反了,可以將 MapAxis 的最後一個參數加上 AXIS_REVERSED

    • Sol-R1 的按鍵編號(B1~B23)請依據 T.A.R.G.E.T. GUI 內的編號對應,以上預設 B1~B5 為最常用的系統鍵。

  4. 目前的按鍵設定

    硬體部位實體編號Falcon 3.0 (DOS)Falcon 4.0 AF (WINDOWS XP)燈光/LED 特色
    左旋鈕9 / 10 / 11視角切換 (F1/F2/F3)主模式 (NAV/AA/AG)轉動變換藍/綠/紅燈
    右旋鈕20 ~ 23雷達範圍 (F5-F8)武器保險 (Master Arm)固定琥珀色/機型燈色
    搖頭開關 (左外)1 / 2起落架 (Gear)起落架 (Gear)放下時底座 LED 1 亮
    搖頭開關 (左內)3 / 4襟翼 (Flaps)加油口 (Refuel Door)啟動時底座 LED 2 亮
    搖頭開關 (右內)14 / 15減速板 (Brakes)電子干擾 (ECM)啟動時底座 LED 3 亮
    搖頭開關 (右外)12 / 13地圖 (Map)外部燈光 (Lights)-
    藍色方鈕16通訊選單警報解除 (Caution Reset)按下恢復靜態燈光
    Viper 扳機TG1機砲 (Gun)機砲 (First Detent)-
    Viper 紅鈕S2飛彈發射 (Missile)武器釋放 (Pickle)按下時底座噴紅光
    Viper 小指鈕S4氛圍切換 (組合鍵)FOV 切換 (組合鍵)按住組合鍵變換燈色
    CMS 帽 (上)CMSU防禦投放 (Chaff)CMS 程序啟動啟動時 LED 閃爍警報
  5. 同樣都是F16但時代差異補充可說明為何 按鍵功能不同

    特性Falcon 3.0 (F-16A)Falcon 4.0 (F-16C Block 50/52)
    航電系統類比儀表為主,螢光綠單色 CRT 顯示器。全數位化多功能顯示器 (MFD)。
    自動化程度較低,襟翼與引擎管理需要較多人工干預。極高,具備先進的數位飛控系統 (FLCS)。
    武器系統主要是 AIM-9 響尾蛇與早期麻雀飛彈。具備 AIM-120 (AMRAAM) 視距外打擊能力。
    座艙色彩代碼中設定的「經典螢光綠」。代碼中設定的「電子琥珀橘」。
  6. 為什麼 Falcon 3.0 沒有「主模式」?

    在玩這兩款跨越 10 餘年的作品時,會發現底座旋鈕(9/10/11)的定義完全不同,這背後代表了 F-16 航電系統的真實進化史:

    • Falcon 3.0 (F-16A 時代): 當時的戰機自動化程度較低,資訊散落在不同的顯示畫面中(HUD、儀表、全螢幕地圖)。因此,我們將旋鈕定義為 「視角切換」(F1/F2/F3),模擬飛行員在座艙內不斷轉頭檢查儀表與地圖的操作,這在 DOS 時代是最高效的配置。

    • Falcon 4.0 (F-16C 時代): 進入全數位化多功能顯示器(MFD)時代,所有的戰鬥資訊都被整合進了 NAV(導航)、AA(空對空)、AG(空對地) 三大主模式中。只需旋轉一下 Sol-R1 的旋鈕,整架戰機的雷達、武器與顯示畫面就會同步切換。這就是為什麼 4.0 的旋鈕必須回歸到 Master Mode 的原因。

  7. DOSBox 提醒: T.A.R.G.E.T. Script Editor 程式運行 Falcon3.tmc 後,DOSBox 的 joysticktype 設為 fcs 即可完美取代這些字母輸入。

  8. DOSBox 按鍵映射 (MapKey): 走的是「虛擬鍵盤通道」。這些訊號會讓電腦以為你真的按了鍵盤。關鍵設定提醒:dosbox.conf 中,請確保以下搭配:

    [joystick]

    joysticktype=fcs

    timed=false

    # 重要:不要在 DOSBox 內部的 Mapper (Ctrl+F1) 重複設定搖桿按鈕,讓它保持空白,只讓 T.A.R.G.E.T. 處理按鍵。



補充:如果沒買到Viper Grip呢?

硬體部位實體編號Falcon 3.0 (DOS)Falcon 4.0 AF (XP)燈光/LED 特色
手把扳機TG1機砲 (Gun)機砲 (Gun)-
手把頂部紅鈕S2飛彈發射 (Missile)武器釋放 (Pickle)按下時底座噴紅光
手把側鍵 (上)S3目標鎖定 (Target Lock)TMS Up (追蹤鎖定)-
手把側鍵 (下)S4雷達範圍 (Radar Range)TMS Down (解除鎖定)-
手把苦力帽H1視角切換 (F1-F4)視角移動 (POV)-
左旋鈕9 / 10 / 11視角切換 (F1/F2/F3)主模式 (NAV/AA/AG)轉動變換藍/綠/紅燈
右旋鈕20 ~ 23預留功能武器保險 (Master Arm)固定機型燈色
搖頭開關 (左外)1 / 2起落架 (Gear)起落架 (Gear)下放時底座 LED 1 亮
搖頭開關 (左內)3 / 4襟翼 (Flaps)加油口 (Refuel Door)開啟時底座 LED 2 亮
搖頭開關 (右內)14 / 15減速板 (Brakes)電子干擾 (ECM)啟動時底座 LED 3 亮
藍色方鈕16 / 17通訊 / 備用警報解除 / 減速板按下恢復靜態燈光

Falcon 3.0的設定為

include "target.tmh"


// --- 狀態記憶變數 ---

int Gear_Pos = 0;

int Brake_Pos = 0;

int Flap_Pos = 0;


int main()

{

    if(Init(&Joystick, &LMFD, &RMFD)) return 1;


    // --- 1. 軸向設定 ---

    MapAxis(&Joystick, JOYX, DX_X_AXIS);

    MapAxis(&Joystick, JOYY, DX_Y_AXIS);

    MapAxis(&Joystick, SLIDER, DX_THROTTLE_AXIS); 


    // --- 2. Sol-R1 原始握把鍵位分配 ---

    MapKey(&Joystick, TG1, USB_SPACE);       // 扳機:機砲

    MapKey(&Joystick, S2,  USB_ENTER);       // 頂端紅鈕:發射飛彈 (噴紅光)

    

    // S2 按下/放開 燈光連動

    MapKey(&Joystick, S2, CHAIN(

        DOWN+USB_ENTER,

        EXEC("GameOutput(&Joystick, OUT_ID_LED_RGB, RGB(255, 0, 0));")

    ));

    MapKeyR(&Joystick, S2, CHAIN(

        UP+USB_ENTER,

        EXEC("GameOutput(&Joystick, OUT_ID_LED_RGB, RGB(0, 255, 0));")

    ));


    // 原始握把的其他按鍵 (S3, S4) 可設為雷達切換

    MapKey(&Joystick, S3, PULSE+USB_T);       // Target Lock (目標鎖定)

    MapKey(&Joystick, S4, PULSE+USB_R);       // Radar Range (雷達範圍)


    // --- 3. 視角控制 (POV Hat) ---

    MapKey(&Joystick, H1U, USB_F1);           // HUD 視角

    MapKey(&Joystick, H1D, USB_F4);           // 追蹤視角

    MapKey(&Joystick, H1L, USB_F2);           // 駕駛艙視角

    MapKey(&Joystick, H1R, USB_F3);           // 外部視角


    // --- 4. Sol-R1 底座撥桿 (維持機械浪漫) ---

    MapKey(&Joystick, B1, EXEC("Check_Gear_F3_USB();"));  

    MapKey(&Joystick, B3, EXEC("Check_Flaps_F3_USB();")); 

    MapKey(&Joystick, B14, EXEC("Check_Brakes_F3_USB();"));


    // --- 5. 系統喚醒儀式 ---

    int i;

    for(i=0; i<256; i=i+15) { 

        GameOutput(&Joystick, OUT_ID_LED_RGB, RGB(0, i, 0)); 

        Sleep(20);

    }

    GameOutput(&Joystick, OUT_ID_LED_RGB, RGB(0, 255, 0)); 

    printf("FALCON 3.0 (ORIGINAL GRIP) READY.");

}


// 邏輯函數同前 (略) ...

Falcon 4.0的設定為

include "target.tmh"


int Gear_Pos = 0;

int Brake_Pos = 0;


int main()

{

    if(Init(&Joystick, &LMFD, &RMFD)) return 1;


    // --- 1. 軸向設定 ---

    MapAxis(&Joystick, JOYX, DX_X_AXIS);

    MapAxis(&Joystick, JOYY, DX_Y_AXIS);

    MapAxis(&Joystick, SLIDER, DX_THROTTLE_AXIS);


    // --- 2. Sol-R1 原始握把戰鬥配置 ---

    MapKey(&Joystick, TG1, USB_SPACE);       // 扳機:機砲

    MapKey(&Joystick, S2,  USB_ENTER);       // 頂部鈕:武器釋放 (噴紅光)

    

    // S2 燈光連動 (回歸琥珀橘)

    MapKey(&Joystick, S2, CHAIN(

        DOWN+USB_ENTER,

        EXEC("GameOutput(&Joystick, OUT_ID_LED_RGB, RGB(255, 0, 0));")

    ));

    MapKeyR(&Joystick, S2, CHAIN(

        UP+USB_ENTER,

        EXEC("GameOutput(&Joystick, OUT_ID_LED_RGB, RGB(255, 120, 0));")

    ));


    // S3, S4 設為最常用的 TMS/DMS 功能

    MapKey(&Joystick, S3, L_CTL+USB_UP);     // TMS Up (目標追蹤)

    MapKey(&Joystick, S4, L_CTL+USB_DOWN);   // TMS Down (目標解除)


    // --- 3. 底座模式切換 (旋鈕與撥桿) ---

    MapKey(&Joystick, B9,  CHAIN(PULSE+USB_N, EXEC("GameOutput(&Joystick, OUT_ID_LED_RGB, RGB(0,0,255));"))); // NAV

    MapKey(&Joystick, B10, CHAIN(PULSE+USB_1, EXEC("GameOutput(&Joystick, OUT_ID_LED_RGB, RGB(0,255,0));"))); // AA

    MapKey(&Joystick, B11, CHAIN(PULSE+USB_2, EXEC("GameOutput(&Joystick, OUT_ID_LED_RGB, RGB(255,0,0));"))); // AG


    MapKey(&Joystick, B1, EXEC("Check_Gear_AF_USB();")); 

    MapKey(&Joystick, B14, PULSE+USB_J);     // ECM 電子干擾


    // --- 4. 視角控制 (POV Hat) ---

    MapKey(&Joystick, H1U, USB_KP8);

    MapKey(&Joystick, H1D, USB_KP2);

    MapKey(&Joystick, H1L, USB_KP4);

    MapKey(&Joystick, H1R, USB_KP6);


    // --- 5. 系統喚醒儀式 (琥珀色) ---

    int i;

    for(i=0; i<256; i=i+10) { 

        GameOutput(&Joystick, OUT_ID_LED_RGB, RGB(i/2, i/4, 0)); 

        Sleep(20);

    }

    GameOutput(&Joystick, OUT_ID_LED_RGB, RGB(255, 120, 0)); 

    printf("FALCON 4.0 (ORIGINAL GRIP) READY.");

}


// 邏輯函數同前 (略) ...

沒有留言:

張貼留言

2027日本旅遊行程規劃

這回還是請出厲害的 Grok 大神一起討論旅遊計畫 , 以下是討論結果   京阪神 6 天 5 夜 家族溫馨祈福之旅計畫書( 2027 年 1 月 23 日~ 28 日 國泰版) 四大兩小(含 65 歲長輩與國中生)|住一黑門酒店|全程大眾交通|體力優先+飲食精算+...