void JoinMultiGame(TXT_UNCAST_ARG(widget), void *user_data) { txt_window_t *window; txt_inputbox_t *address_box; window = TXT_NewWindow("Join multiplayer game"); TXT_SetTableColumns(window, 2); TXT_SetColumnWidths(window, 12, 12); TXT_SetWindowHelpURL(window, MULTI_JOIN_HELP_URL); TXT_AddWidgets(window, TXT_NewLabel("Game"), IWADSelector(), NULL); if (gamemission == hexen) { TXT_AddWidgets(window, TXT_NewLabel("Character class "), TXT_NewDropdownList(&character_class, character_classes, 3), NULL); } TXT_AddWidgets(window, TXT_NewSeparator("Server"), TXT_NewLabel("Connect to address: "), address_box = TXT_NewInputBox(&connect_address, 30), TXT_NewButton2("Find server on Internet...", FindInternetServer, NULL), TXT_TABLE_OVERFLOW_RIGHT, TXT_NewButton2("Find server on local network...", FindLANServer, NULL), TXT_TABLE_OVERFLOW_RIGHT, TXT_NewStrut(0, 1), TXT_TABLE_OVERFLOW_RIGHT, TXT_NewButton2("Add extra parameters...", OpenExtraParamsWindow, NULL), NULL); TXT_SelectWidget(window, address_box); TXT_SetWindowAction(window, TXT_HORIZ_CENTER, WadWindowAction()); TXT_SetWindowAction(window, TXT_HORIZ_RIGHT, JoinGameAction()); }
void ConfigMouse(void) { txt_window_t *window; window = TXT_NewWindow("Mouse configuration"); TXT_SetTableColumns(window, 2); TXT_SetWindowAction(window, TXT_HORIZ_CENTER, TestConfigAction()); TXT_SetWindowHelpURL(window, WINDOW_HELP_URL); TXT_AddWidgets(window, TXT_NewCheckBox("Enable mouse", &usemouse), TXT_TABLE_OVERFLOW_RIGHT, TXT_NewInvertedCheckBox("Allow vertical mouse movement", &novert), TXT_TABLE_OVERFLOW_RIGHT, TXT_NewCheckBox("Grab mouse in windowed mode", &grabmouse), TXT_TABLE_OVERFLOW_RIGHT, TXT_NewCheckBox("Double click acts as \"use\"", &dclick_use), TXT_TABLE_OVERFLOW_RIGHT, TXT_NewSeparator("Mouse motion"), TXT_NewLabel("Speed"), TXT_NewSpinControl(&mouseSensitivity, 1, 256), TXT_NewLabel("Acceleration"), TXT_NewFloatSpinControl(&mouse_acceleration, 1.0, 5.0), TXT_NewLabel("Acceleration threshold"), TXT_NewSpinControl(&mouse_threshold, 0, 32), TXT_NewSeparator("Buttons"), NULL); AddMouseControl(window, "Fire/Attack", &mousebfire); AddMouseControl(window, "Move forward", &mousebforward); AddMouseControl(window, "Strafe on", &mousebstrafe); TXT_AddWidget(window, TXT_NewButton2("More controls...", ConfigExtraButtons, NULL)); }
static void StartGameMenu(const char *window_title, int multiplayer) { txt_window_t *window; txt_widget_t *iwad_selector; window = TXT_NewWindow(window_title); TXT_SetTableColumns(window, 2); TXT_SetColumnWidths(window, 12, 6); if (multiplayer) { TXT_SetWindowHelpURL(window, MULTI_START_HELP_URL); } else { TXT_SetWindowHelpURL(window, LEVEL_WARP_HELP_URL); } TXT_SetWindowAction(window, TXT_HORIZ_CENTER, WadWindowAction()); TXT_SetWindowAction(window, TXT_HORIZ_RIGHT, StartGameAction(multiplayer)); TXT_AddWidgets(window, TXT_NewLabel("Game"), iwad_selector = IWADSelector(), NULL); if (gamemission == hexen) { txt_dropdown_list_t *cc_dropdown; TXT_AddWidgets(window, TXT_NewLabel("Character class "), cc_dropdown = TXT_NewDropdownList(&character_class, character_classes, 3), NULL); // Update skill level dropdown when the character class is changed: TXT_SignalConnect(cc_dropdown, "changed", UpdateWarpType, NULL); } TXT_AddWidgets(window, TXT_NewLabel("Skill"), skillbutton = TXT_NewDropdownList(&skill, doom_skills, 5), TXT_NewLabel("Level warp"), warpbutton = TXT_NewButton2("?", LevelSelectDialog, NULL), NULL); if (multiplayer) { TXT_AddWidgets(window, TXT_NewLabel("Game type"), GameTypeDropdown(), TXT_NewLabel("Time limit"), TXT_NewHorizBox(TXT_NewIntInputBox(&timer, 2), TXT_NewLabel("minutes"), NULL), NULL); } TXT_AddWidgets(window, TXT_NewSeparator("Monster options"), TXT_NewInvertedCheckBox("Monsters enabled", &nomonsters), TXT_TABLE_OVERFLOW_RIGHT, TXT_NewCheckBox("Fast monsters", &fast), TXT_TABLE_OVERFLOW_RIGHT, TXT_NewCheckBox("Respawning monsters", &respawn), TXT_TABLE_OVERFLOW_RIGHT, NULL); if (multiplayer) { TXT_AddWidgets(window, TXT_NewSeparator("Advanced"), TXT_NewLabel("UDP port"), TXT_NewIntInputBox(&udpport, 5), TXT_NewInvertedCheckBox("Register with master server", &privateserver), TXT_TABLE_OVERFLOW_RIGHT, NULL); } TXT_AddWidgets(window, TXT_NewButton2("Add extra parameters...", OpenExtraParamsWindow, NULL), TXT_TABLE_OVERFLOW_RIGHT, NULL); TXT_SignalConnect(iwad_selector, "changed", UpdateWarpType, NULL); UpdateWarpType(NULL, NULL); UpdateWarpButton(); }
static void LevelSelectDialog(TXT_UNCAST_ARG(widget), TXT_UNCAST_ARG(user_data)) { txt_window_t *window; txt_button_t *button; const iwad_t *iwad; char buf[10]; int episodes; intptr_t x, y; intptr_t l; int i; window = TXT_NewWindow("Select level"); iwad = GetCurrentIWAD(); if (warptype == WARP_ExMy) { episodes = D_GetNumEpisodes(iwad->mission, iwad->mode); TXT_SetTableColumns(window, episodes); // ExMy levels for (y=1; y<10; ++y) { for (x=1; x<=episodes; ++x) { if (IsChexQuest(iwad) && (x > 1 || y > 5)) { continue; } if (!D_ValidEpisodeMap(iwad->mission, iwad->mode, x, y)) { TXT_AddWidget(window, NULL); continue; } M_snprintf(buf, sizeof(buf), " E%" PRIiPTR "M%" PRIiPTR " ", x, y); button = TXT_NewButton(buf); TXT_SignalConnect(button, "pressed", SetExMyWarp, (void *) (x * 10 + y)); TXT_SignalConnect(button, "pressed", CloseLevelSelectDialog, window); TXT_AddWidget(window, button); if (warpepisode == x && warpmap == y) { TXT_SelectWidget(window, button); } } } } else { TXT_SetTableColumns(window, 6); for (i=0; i<60; ++i) { x = i % 6; y = i / 6; l = x * 10 + y + 1; if (!D_ValidEpisodeMap(iwad->mission, iwad->mode, 1, l)) { TXT_AddWidget(window, NULL); continue; } M_snprintf(buf, sizeof(buf), " MAP%02" PRIiPTR " ", l); button = TXT_NewButton(buf); TXT_SignalConnect(button, "pressed", SetMAPxyWarp, (void *) l); TXT_SignalConnect(button, "pressed", CloseLevelSelectDialog, window); TXT_AddWidget(window, button); if (warpmap == l) { TXT_SelectWidget(window, button); } } } }
void ConfigSound(void) { txt_window_t *window; txt_table_t *extra_table; txt_dropdown_list_t *sfx_mode_control; txt_dropdown_list_t *music_mode_control; int num_sfx_modes, num_music_modes; // Work out what sfx mode we are currently using: if (snd_sfxdevice == SNDDEVICE_PCSPEAKER) { snd_sfxmode = SFXMODE_PCSPEAKER; } else if (snd_sfxdevice >= SNDDEVICE_SB) { snd_sfxmode = SFXMODE_DIGITAL; } else { snd_sfxmode = SFXMODE_DISABLED; } // Is music enabled? switch (snd_musicdevice) { case SNDDEVICE_GENMIDI: snd_musicmode = MUSICMODE_NATIVE; break; case SNDDEVICE_CD: snd_musicmode = MUSICMODE_CD; break; case SNDDEVICE_SB: case SNDDEVICE_ADLIB: case SNDDEVICE_AWE32: snd_musicmode = MUSICMODE_OPL; break; case SNDDEVICE_GUS: snd_musicmode = MUSICMODE_GUS; break; default: snd_musicmode = MUSICMODE_DISABLED; break; } // Doom has PC speaker sound effects, but others do not: if (gamemission == doom) { num_sfx_modes = NUM_SFXMODES; } else { num_sfx_modes = NUM_SFXMODES - 1; } // Hexen has CD audio; others do not. if (gamemission == hexen) { num_music_modes = NUM_MUSICMODES; } else { num_music_modes = NUM_MUSICMODES - 1; } // Build the window window = TXT_NewWindow("Sound configuration"); TXT_SetWindowHelpURL(window, WINDOW_HELP_URL); TXT_SetTableColumns(window, 2); TXT_SetColumnWidths(window, 19, 15); TXT_SetWindowPosition(window, TXT_HORIZ_CENTER, TXT_VERT_TOP, TXT_SCREEN_W / 2, 5); TXT_AddWidgets(window, TXT_NewSeparator("Sound effects"), TXT_NewLabel("Sound effects"), sfx_mode_control = TXT_NewDropdownList(&snd_sfxmode, sfxmode_strings, num_sfx_modes), TXT_NewLabel("Sound channels"), TXT_NewSpinControl(&numChannels, 1, 8), TXT_NewLabel("SFX volume"), TXT_NewSpinControl(&sfxVolume, 0, 15), NULL); // Only show for games that implemented pitch shifting: if (gamemission == doom || gamemission == heretic || gamemission == hexen) { TXT_AddWidgets(window, TXT_NewCheckBox("Pitch-shifted sounds", &snd_pitchshift), TXT_TABLE_OVERFLOW_RIGHT, NULL); } if (gamemission == strife) { TXT_AddWidgets(window, TXT_NewLabel("Voice volume"), TXT_NewSpinControl(&voiceVolume, 0, 15), TXT_NewCheckBox("Show text with voices", &show_talk), TXT_TABLE_OVERFLOW_RIGHT, NULL); } TXT_AddWidgets(window, TXT_NewSeparator("Music"), TXT_NewLabel("Music"), music_mode_control = TXT_NewDropdownList(&snd_musicmode, musicmode_strings, num_music_modes), TXT_NewLabel("Music volume"), TXT_NewSpinControl(&musicVolume, 0, 15), extra_table = TXT_NewTable(2), TXT_TABLE_OVERFLOW_RIGHT, NULL); TXT_SetColumnWidths(extra_table, 19, 15); TXT_SignalConnect(sfx_mode_control, "changed", UpdateSndDevices, NULL); TXT_SignalConnect(music_mode_control, "changed", UpdateSndDevices, NULL); // Update extra_table when the music mode is changed, and build it now. TXT_SignalConnect(music_mode_control, "changed", UpdateExtraTable, extra_table); UpdateExtraTable(music_mode_control, extra_table); }