void MultiplayerMenu (void) { CMenu m; int choice = 0, i, optCreate, optJoin = -1, optConn = -1, nConnections = 0; int nOldGameMode; if ((gameStates.app.bNostalgia < 2) && gameData.multiplayer.autoNG.bValid) { i = MultiChoice (gameData.multiplayer.autoNG.uConnect, !gameData.multiplayer.autoNG.bHost); if (i >= 0) ExecMultiMenuOption (i); } else { do { nOldGameMode = gameData.app.nGameMode; m.Destroy (); m.Create (15); if (gameStates.app.bNostalgia < 2) { optCreate = m.AddMenu (TXT_CREATE_GAME, KEY_S, HTX_NETWORK_SERVER); optJoin = m.AddMenu (TXT_JOIN_GAME, KEY_J, HTX_NETWORK_CLIENT); m.AddText ("", 0); optConn = m.AddRadio (TXT_NGTYPE_IPX, 0, KEY_I, HTX_NETWORK_IPX); m.AddRadio (TXT_NGTYPE_UDP, 0, KEY_U, HTX_NETWORK_UDP); m.AddRadio (TXT_NGTYPE_TRACKER, 0, KEY_T, HTX_NETWORK_TRACKER); m.AddRadio (TXT_NGTYPE_MCAST4, 0, KEY_M, HTX_NETWORK_MCAST); #ifdef KALINIX m.AddRadio (TXT_NGTYPE_KALI, 0, KEY_K, HTX_NETWORK_KALI); #endif nConnections = m.ToS (); m [optConn + NMCLAMP (gameStates.multi.nConnection, 0, nConnections - optConn)].m_value = 1; } else { #ifdef NATIVE_IPX multiOpts.nStartIpx = m.AddMenu (TXT_START_IPX_NET_GAME, -1, HTX_NETWORK_IPX); multiOpts.nJoinIpx = m.AddMenu (TXT_JOIN_IPX_NET_GAME, -1, HTX_NETWORK_IPX); #endif //NATIVE_IPX multiOpts.nStartMCast4 = m.AddMenu (TXT_MULTICAST_START, KEY_M, HTX_NETWORK_MCAST); multiOpts.nJoinMCast4 = m.AddMenu (TXT_MULTICAST_JOIN, KEY_N, HTX_NETWORK_MCAST); #ifdef KALINIX multiOpts.nStartKali = m.AddMenu (TXT_KALI_START, KEY_K, HTX_NETWORK_KALI); multiOpts.nJoinKali = m.AddMenu (TXT_KALI_JOIN, KEY_I, HTX_NETWORK_KALI); #endif // KALINIX if (gameStates.app.bNostalgia > 2) multiOpts.nSerial = m.AddMenu (TXT_MODEM_GAME2, KEY_G, HTX_NETWORK_MODEM); } i = m.Menu (NULL, TXT_MULTIPLAYER, NULL, &choice); if (i > -1) { if (gameStates.app.bNostalgia > 1) i = choice; else { for (gameStates.multi.nConnection = 0; gameStates.multi.nConnection < nConnections; gameStates.multi.nConnection++) if (m [optConn + gameStates.multi.nConnection].m_value) break; i = MultiChoice (gameStates.multi.nConnection, choice == optJoin); } ExecMultiMenuOption (i); } if (nOldGameMode != gameData.app.nGameMode) break; // leave menu } while (i > -1); } }
void CockpitOptionsMenu (void) { static int choice = 0; CMenu m; int i; int optTextGauges, optHUD, optReticle, optMissiles, optPosition, optAlignment, optZoomType = -1; char szSlider [50]; szWindowSize [0] = TXT_AUXWIN_SMALL; szWindowSize [1] = TXT_AUXWIN_MEDIUM; szWindowSize [2] = TXT_AUXWIN_LARGE; szWindowSize [3] = TXT_AUXWIN_HUGE; szWindowPos [0] = TXT_POS_BOTTOM; szWindowPos [1] = TXT_POS_TOP; szWindowAlign [0] = TXT_ALIGN_CORNERS; szWindowAlign [1] = TXT_ALIGN_MIDDLE; szWindowAlign [2] = TXT_ALIGN_CENTER; szTgtInd [0] = TXT_NONE; szTgtInd [1] = TXT_MISSILES; szTgtInd [2] = TXT_FULL; nWindowPos = gameOpts->render.cockpit.nWindowPos / 3; nWindowAlign = gameOpts->render.cockpit.nWindowPos % 3; optPosition = optAlignment = optWindowSize = optWindowZoom = optTextGauges = -1; #if WEAPON_ICONS int optIconPos = -1; optWeaponIcons = -1; bShowWeaponIcons = (extraGameInfo [0].nWeaponIcons != 0); #endif nTgtInd = extraGameInfo [0].bMslLockIndicators ? extraGameInfo [0].bTargetIndicators ? 2 : 1 : 0; do { m.Destroy (); m.Create (15); optHUD = m.AddCheck (TXT_SHOW_HUD, gameOpts->render.cockpit.bHUD, KEY_U, HTX_CPIT_SHOWHUD); optReticle = m.AddCheck (TXT_SHOW_RETICLE, gameOpts->render.cockpit.bReticle, KEY_R, HTX_CPIT_SHOWRETICLE); optMissiles = m.AddCheck (TXT_MISSILE_VIEW, gameOpts->render.cockpit.bMissileView, KEY_M, HTX_CPIT_MSLVIEW); optTextGauges = m.AddCheck (TXT_SHOW_GFXGAUGES, !gameOpts->render.cockpit.bTextGauges, KEY_G, HTX_CPIT_GFXGAUGES); //if (gameOpts->app.bExpertMode) optZoomType = m.AddCheck (TXT_ZOOM_SMOOTH, extraGameInfo [IsMultiGame].nZoomMode - 1, KEY_O, HTX_GPLAY_ZOOMSMOOTH); #if 0 optTgtInd = m.AddCheck (TXT_TARGET_INDICATORS, extraGameInfo [0].bTargetIndicators, KEY_T, HTX_CPIT_TGTIND); #else m.AddText ("", 0); sprintf (szSlider, TXT_TARGET_INDICATORS, szTgtInd [nTgtInd]); optTgtInd = m.AddSlider (szSlider, nTgtInd, 0, 2, KEY_T, HTX_CPIT_TGTIND); #endif #if WEAPON_ICONS m.AddText ("", 0); optWeaponIcons = m.AddCheck (TXT_SHOW_WEAPONICONS, bShowWeaponIcons, KEY_W, HTX_CPIT_WPNICONS); if (bShowWeaponIcons) { optIconPos = m.AddRadio (TXT_WPNICONS_TOP, 0, KEY_I, HTX_CPIT_ICONPOS); m.AddRadio (TXT_WPNICONS_BTM, 0, KEY_I, HTX_CPIT_ICONPOS); m.AddRadio (TXT_WPNICONS_LRB, 0, KEY_I, HTX_CPIT_ICONPOS); m.AddRadio (TXT_WPNICONS_LRT, 0, KEY_I, HTX_CPIT_ICONPOS); m [optIconPos + NMCLAMP (extraGameInfo [0].nWeaponIcons - 1, 0, 3)].m_value = 1; } else optIconPos = -1; #endif m.AddText ("", 0); m.AddText (TXT_COCKPIT_WINDOWS, 0); sprintf (szSlider, TXT_AUXWIN_SIZE, szWindowSize [gameOpts->render.cockpit.nWindowSize]); optWindowSize = m.AddSlider (szSlider, gameOpts->render.cockpit.nWindowSize, 0, 3, KEY_S, HTX_CPIT_WINSIZE); sprintf (szSlider, TXT_AUXWIN_ZOOM, gameOpts->render.cockpit.nWindowZoom + 1); optWindowZoom = m.AddSlider (szSlider, gameOpts->render.cockpit.nWindowZoom, 0, 3, KEY_Z, HTX_CPIT_WINZOOM); sprintf (szSlider, TXT_AUXWIN_POSITION, szWindowPos [nWindowPos]); optWindowPos = m.AddSlider (szSlider, nWindowPos, 0, 1, KEY_P, HTX_AUXWIN_POSITION); sprintf (szSlider, TXT_AUXWIN_ALIGNMENT, szWindowAlign [nWindowAlign]); optWindowAlign = m.AddSlider (szSlider, nWindowAlign, 0, 2, KEY_A, HTX_AUXWIN_ALIGNMENT); m.AddText ("", 0); do { i = m.Menu (NULL, TXT_COCKPIT_OPTS, &CockpitOptionsCallback, &choice); if (i < 0) break; #if WEAPON_ICONS if (bShowWeaponIcons && (optIconPos >= 0)) { for (int j = 0; j < 4; j++) if (m [optIconPos + j].m_value) { extraGameInfo [0].nWeaponIcons = j + 1; break; } } #endif } while (i >= 0); GET_VAL (gameOpts->render.cockpit.bReticle, optReticle); GET_VAL (gameOpts->render.cockpit.bHUD, optHUD); GET_VAL (gameOpts->render.cockpit.bMissileView, optMissiles); //GET_VAL (extraGameInfo [0].bTargetIndicators, optTgtInd); gameOpts->render.cockpit.bTextGauges = !m [optTextGauges].m_value; gameOpts->render.cockpit.nWindowPos = nWindowPos * 3 + nWindowAlign; //if (gameOpts->app.bExpertMode) extraGameInfo [IsMultiGame].nZoomMode = m [optZoomType].m_value + 1; #if WEAPON_ICONS if (bShowWeaponIcons) { if (optIconPos >= 0) { for (int j = 0; j < 4; j++) if (m [optIconPos + j].m_value) { extraGameInfo [0].nWeaponIcons = j + 1; break; } } GET_VAL (gameOpts->render.weaponIcons.alpha, optIconAlpha); } #endif } while (i == -2); extraGameInfo [0].bMslLockIndicators = (nTgtInd > 0); extraGameInfo [0].bTargetIndicators = (nTgtInd > 1); DefaultCockpitSettings (); }