bool runMultiPlayerMenu(void) { UDWORD id; id = widgRunScreen(psWScreen); // Run the current set of widgets switch(id) { case FRONTEND_HOST: // don't pretend we are running a network game. Really do it! NetPlay.bComms = true; // use network = true NETdiscoverUPnPDevices(); ingame.bHostSetup = true; bMultiPlayer = true; bMultiMessages = true; game.type = SKIRMISH; // needed? lastTitleMode = MULTI; changeTitleMode(MULTIOPTION); break; case FRONTEND_JOIN: ingame.bHostSetup = false; if (getLobbyError() != ERROR_CHEAT && getLobbyError() != ERROR_KICKED) { setLobbyError(ERROR_NOERROR); } changeTitleMode(PROTOCOL); break; case FRONTEND_QUIT: changeTitleMode(TITLE); break; default: break; } widgDisplayScreen(psWScreen); // show the widgets currently running if (CancelPressed()) { changeTitleMode(TITLE); } return true; }
// ///////////////// ///////////////////////////////////////////////// // Main Front end game loop. TITLECODE titleLoop(void) { TITLECODE RetCode = TITLECODE_CONTINUE; pie_SetDepthBufferStatus(DEPTH_CMP_ALWAYS_WRT_ON); pie_SetFogStatus(false); screen_RestartBackDrop(); wzShowMouse(true); // When we first init the game, firstcall is true. if (firstcall) { firstcall = false; // First check to see if --host was given as a command line option, if not, // then check --join and if neither, run the normal game menu. if (hostlaunch) { NetPlay.bComms = true; // use network = true NetPlay.isUPNP_CONFIGURED = false; NetPlay.isUPNP_ERROR = false; ingame.bHostSetup = true; bMultiPlayer = true; bMultiMessages = true; NETinit(true); NETdiscoverUPnPDevices(); game.type = SKIRMISH; changeTitleMode(MULTIOPTION); hostlaunch = false; // reset the bool to default state. } else if (strlen(iptoconnect)) { NetPlay.bComms = true; // use network = true NETinit(true); joinGame(iptoconnect, 0); } else { changeTitleMode(TITLE); // normal game, run main title screen. } // Using software cursors (when on) for these menus due to a bug in SDL's SDL_ShowCursor() wzSetCursor(CURSOR_DEFAULT); } if (titleMode != MULTIOPTION && titleMode != MULTILIMIT && titleMode != STARTGAME) { screen_disableMapPreview(); } switch (titleMode) // run relevant title screen code. { // MULTIPLAYER screens case PROTOCOL: runConnectionScreen(); // multiplayer connection screen. break; case MULTIOPTION: runMultiOptions(); break; case GAMEFIND: runGameFind(); break; case MULTI: runMultiPlayerMenu(); break; case MULTILIMIT: runLimitScreen(); break; case KEYMAP: runKeyMapEditor(); break; case TITLE: runTitleMenu(); break; case CAMPAIGNS: runCampaignSelector(); break; case SINGLE: runSinglePlayerMenu(); break; case TUTORIAL: runTutorialMenu(); break; case CREDITS: runCreditsScreen(); break; case OPTIONS: runOptionsMenu(); break; case GAME: runGameOptionsMenu(); break; case GRAPHICS_OPTIONS: runGraphicsOptionsMenu(); break; case AUDIO_OPTIONS: runAudioOptionsMenu(); break; case VIDEO_OPTIONS: runVideoOptionsMenu(); break; case MOUSE_OPTIONS: runMouseOptionsMenu(); break; case QUIT: RetCode = TITLECODE_QUITGAME; break; case STARTGAME: case LOADSAVEGAME: if (titleMode == LOADSAVEGAME) { RetCode = TITLECODE_SAVEGAMELOAD; } else { RetCode = TITLECODE_STARTGAME; } return RetCode; // don't flip! case SHOWINTRO: pie_SetFogStatus(false); pie_ScreenFlip(CLEAR_BLACK); changeTitleMode(TITLE); RetCode = TITLECODE_SHOWINTRO; break; default: debug(LOG_FATAL, "unknown title screen mode"); abort(); } NETflush(); // Send any pending network data. audio_Update(); pie_SetFogStatus(false); pie_ScreenFlip(CLEAR_BLACK);//title loop if ((keyDown(KEY_LALT) || keyDown(KEY_RALT)) && keyPressed(KEY_RETURN)) { war_setFullscreen(!war_getFullscreen()); wzToggleFullscreen(); } return RetCode; }