void ScoreTableDrawCoop () { int i, color; int sorted [MAX_NUM_NET_PLAYERS]; MultiSortKillList (); WIN (DDGRLOCK (dd_grd_curcanv)); grdCurCanv->cvFont = MEDIUM3_FONT; GrString (0x8000, LHY (10), "COOPERATIVE SUMMARY", NULL); grdCurCanv->cvFont = SMALL_FONT; MultiGetKillList (sorted); ScoreTableDrawCoopNames (sorted); for (i=0; i<gameData.multiplayer.nPlayers; i++) { color = sorted [i]; if (gameData.multiplayer.players [sorted [i]].connected==0) GrSetFontColorRGBi (GRAY_RGBA, 1, 0, 0); else GrSetFontColorRGBi (RGBA_PAL2 (playerColors [color].r, playerColors [color].g, playerColors [color].b), 1, 0, 0); ScoreTableDrawCoopItem (i, sorted); } ScoreTableDrawDeaths (sorted); WIN (DDGRUNLOCK (dd_grd_curcanv)); WINDOS ( DDGrSetCurrentCanvas (NULL), GrSetCurrentCanvas (NULL) ); PA_DFX (pa_set_frontbuffer_current ()); PA_DFX (pa_set_backbuffer_current ()); GrPaletteStepLoad (NULL); GrUpdate (0); }
void NetworkNewPlayer (tSequencePacket *their) { int nObject; int nPlayer; nPlayer = their->player.connected; Assert (nPlayer >= 0); Assert (nPlayer < gameData.multiplayer.nMaxPlayers); nObject = gameData.multiplayer.players [nPlayer].nObject; if (gameData.demo.nState == ND_STATE_RECORDING) NDRecordMultiConnect (nPlayer, nPlayer == gameData.multiplayer.nPlayers, their->player.callsign); memcpy (gameData.multiplayer.players [nPlayer].callsign, their->player.callsign, CALLSIGN_LEN+1); memcpy (netPlayers.players [nPlayer].callsign, their->player.callsign, CALLSIGN_LEN+1); ClipRank ((char *) &their->player.rank); netPlayers.players [nPlayer].rank = their->player.rank; netPlayers.players [nPlayer].versionMajor = their->player.versionMajor; netPlayers.players [nPlayer].versionMinor = their->player.versionMinor; NetworkCheckForOldVersion ((char) nPlayer); if (gameStates.multi.nGameType >= IPX_GAME) { if ((* (uint *)their->player.network.ipx.server) != 0) IpxGetLocalTarget ( their->player.network.ipx.server, their->player.network.ipx.node, gameData.multiplayer.players [nPlayer].netAddress); else memcpy (gameData.multiplayer.players [nPlayer].netAddress, their->player.network.ipx.node, 6); } memcpy (&netPlayers.players [nPlayer].network, &their->player.network, sizeof (tNetworkInfo)); gameData.multiplayer.players [nPlayer].nPacketsGot = 0; gameData.multiplayer.players [nPlayer].connected = 1; gameData.multiplayer.players [nPlayer].netKillsTotal = 0; gameData.multiplayer.players [nPlayer].netKilledTotal = 0; memset (gameData.multigame.kills.matrix [nPlayer], 0, MAX_PLAYERS * sizeof (short)); gameData.multiplayer.players [nPlayer].score = 0; gameData.multiplayer.players [nPlayer].flags = 0; gameData.multiplayer.players [nPlayer].nKillGoalCount = 0; if (nPlayer == gameData.multiplayer.nPlayers) { gameData.multiplayer.nPlayers++; netGame.nNumPlayers = gameData.multiplayer.nPlayers; } DigiPlaySample (SOUND_HUD_MESSAGE, F1_0); ClipRank ((char *) &their->player.rank); if (gameOpts->multi.bNoRankings) HUDInitMessage ("'%s' %s\n", their->player.callsign, TXT_JOINING); else HUDInitMessage ("%s'%s' %s\n", pszRankStrings [their->player.rank], their->player.callsign, TXT_JOINING); MultiMakeGhostPlayer (nPlayer); GetPlayerSpawn (GetRandomPlayerPosition (), OBJECTS + gameData.multiplayer.players [nPlayer].nObject); MultiSendScore (); MultiSortKillList (); // CreatePlayerAppearanceEffect (&OBJECTS [nObject]); }
void kmatrix_redraw () { int i, color; int sorted [MAX_NUM_NET_PLAYERS]; xOffs = (grdCurCanv->cv_bitmap.bm_props.w - 640) / 2; yOffs = (grdCurCanv->cv_bitmap.bm_props.h - 480) / 2; if (xOffs < 0) xOffs = 0; if (yOffs < 0) yOffs = 0; if (gameData.app.nGameMode & GM_MULTI_COOP) { kmatrix_redraw_coop (); return; } MultiSortKillList (); WIN (DDGRLOCK (dd_grd_curcanv)); grdCurCanv->cv_font = MEDIUM3_FONT; GrString (0x8000, LHY (10), TXT_KILL_MATRIX_TITLE ); grdCurCanv->cv_font = SMALL_FONT; MultiGetKillList (sorted); kmatrix_draw_names (sorted); for (i=0; i<gameData.multi.nPlayers; i++) { if (gameData.app.nGameMode & GM_TEAM) color = GetTeam (sorted [i]); else color = sorted [i]; if (gameData.multi.players [sorted [i]].connected==0) GrSetFontColorRGBi (GRAY_RGBA, 1, 0, 0); else GrSetFontColorRGBi (RGBA_PAL2 (player_rgb [color].r, player_rgb [color].g, player_rgb [color].b), 1, 0, 0); kmatrix_draw_item (i, sorted); } kmatrix_draw_deaths (sorted); #if defined (POLY_ACC) pa_save_clut (); pa_update_clut (grPalette, 0, 256, 0); #endif PA_DFX (pa_set_frontbuffer_current ()); GrUpdate (0); PA_DFX (pa_set_backbuffer_current ()); #if defined (POLY_ACC) pa_restore_clut (); #endif WIN (DDGRUNLOCK (dd_grd_curcanv)); GrPaletteStepLoad (NULL); }
void ScoreTableRedraw () { int i, color; int sorted [MAX_NUM_NET_PLAYERS]; xOffs = (grdCurCanv->cvBitmap.bmProps.w - 640) / 2; yOffs = (grdCurCanv->cvBitmap.bmProps.h - 480) / 2; if (xOffs < 0) xOffs = 0; if (yOffs < 0) yOffs = 0; if (gameData.app.nGameMode & GM_MULTI_COOP) { ScoreTableDrawCoop (); return; } MultiSortKillList (); WIN (DDGRLOCK (dd_grd_curcanv)); grdCurCanv->cvFont = MEDIUM3_FONT; GrString (0x8000, LHY (10), TXT_KILL_MATRIX_TITLE, NULL); grdCurCanv->cvFont = SMALL_FONT; MultiGetKillList (sorted); ScoreTableDrawNames (sorted); for (i=0; i<gameData.multiplayer.nPlayers; i++) { if (gameData.app.nGameMode & GM_TEAM) color = GetTeam (sorted [i]); else color = sorted [i]; if (!gameData.multiplayer.players [sorted [i]].connected) GrSetFontColorRGBi (GRAY_RGBA, 1, 0, 0); else GrSetFontColorRGBi (RGBA_PAL2 (playerColors [color].r, playerColors [color].g, playerColors [color].b), 1, 0, 0); ScoreTableDrawItem (i, sorted); } ScoreTableDrawDeaths (sorted); PA_DFX (pa_set_frontbuffer_current ()); GrUpdate (0); PA_DFX (pa_set_backbuffer_current ()); WIN (DDGRUNLOCK (dd_grd_curcanv)); GrPaletteStepLoad (NULL); }
void kmatrix_redraw_coop () { int i, color; int sorted [MAX_NUM_NET_PLAYERS]; MultiSortKillList (); WIN (DDGRLOCK (dd_grd_curcanv)); grdCurCanv->cv_font = MEDIUM3_FONT; GrString (0x8000, LHY (10), "COOPERATIVE SUMMARY" ); grdCurCanv->cv_font = SMALL_FONT; MultiGetKillList (sorted); kmatrix_draw_coop_names (sorted); for (i=0; i<gameData.multi.nPlayers; i++) { color = sorted [i]; if (gameData.multi.players [sorted [i]].connected==0) GrSetFontColorRGBi (GRAY_RGBA, 1, 0, 0); else GrSetFontColorRGBi (RGBA_PAL2 (player_rgb [color].r, player_rgb [color].g, player_rgb [color].b), 1, 0, 0); kmatrix_draw_coop_item (i, sorted); } kmatrix_draw_deaths (sorted); WIN (DDGRUNLOCK (dd_grd_curcanv)); WINDOS ( DDGrSetCurrentCanvas (NULL), GrSetCurrentCanvas (NULL) ); #if defined (POLY_ACC) pa_save_clut (); pa_update_clut (grPalette, 0, 256, 0); #endif PA_DFX (pa_set_frontbuffer_current ()); PA_DFX (pa_set_backbuffer_current ()); #if defined (POLY_ACC) pa_restore_clut (); #endif GrPaletteStepLoad (NULL); GrUpdate (0); }
void ScoreTableDrawCoop (void) { int i, color; int sorted [MAX_PLAYERS]; MultiSortKillList (); fontManager.SetCurrent (MEDIUM3_FONT); GrString (0x8000, LHY (10), "COOPERATIVE SUMMARY", NULL); fontManager.SetCurrent (SMALL_FONT); MultiGetKillList (sorted); ScoreTableDrawCoopNames (sorted); for (i=0; i<gameData.multiplayer.nPlayers; i++) { color = sorted [i]; if (gameData.multiplayer.players [sorted [i]].connected==0) fontManager.SetColorRGBi (GRAY_RGBA, 1, 0, 0); else fontManager.SetColorRGBi (RGBA_PAL2 (playerColors [color].red, playerColors [color].green, playerColors [color].blue), 1, 0, 0); ScoreTableDrawCoopItem (i, sorted); } ScoreTableDrawDeaths (sorted); CCanvas::SetCurrent (NULL); //paletteManager.ResumeEffect (); GrUpdate (1); }
void ScoreTableRedraw (void) { int i, color; int sorted [MAX_PLAYERS]; xOffs = (CCanvas::Current ()->Width () - 640) / 2; yOffs = (CCanvas::Current ()->Height () - 480) / 2; if (xOffs < 0) xOffs = 0; if (yOffs < 0) yOffs = 0; if (gameData.app.nGameMode & GM_MULTI_COOP) { ScoreTableDrawCoop (); return; } MultiSortKillList (); fontManager.SetCurrent (MEDIUM3_FONT); GrString (0x8000, LHY (10), TXT_KILL_MATRIX_TITLE, NULL); fontManager.SetCurrent (SMALL_FONT); MultiGetKillList (sorted); ScoreTableDrawNames (sorted); for ( i =0; i<gameData.multiplayer.nPlayers; i++) { if (gameData.app.nGameMode & GM_TEAM) color = GetTeam (sorted [i]); else color = sorted [i]; if (!gameData.multiplayer.players [sorted [i]].connected) fontManager.SetColorRGBi (GRAY_RGBA, 1, 0, 0); else fontManager.SetColorRGBi (RGBA_PAL2 (playerColors [color].red, playerColors [color].green, playerColors [color].blue), 1, 0, 0); ScoreTableDrawItem (i, sorted); } ScoreTableDrawDeaths (sorted); GrUpdate (1); //paletteManager.ResumeEffect (); }
void NetworkReadSyncPacket (tNetgameInfo * sp, int rsinit) { int i, j; char szLocalCallSign [CALLSIGN_LEN+1]; tNetPlayerInfo *playerP; #if defined (WORDS_BIGENDIAN) || defined (__BIG_ENDIAN__) tNetgameInfo tmp_info; if ((gameStates.multi.nGameType >= IPX_GAME) && (sp != &netGame)) { // for macintosh -- get the values unpacked to our structure format ReceiveFullNetGamePacket (reinterpret_cast<ubyte*> (sp), &tmp_info); sp = &tmp_info; } #endif if (rsinit) playerInfoP = &netPlayers; // This function is now called by all people entering the netgame. if (sp != &netGame) { char *p = reinterpret_cast<char*> (sp); ushort h; int i, s; for (i = 0, h = -1; i < (int) sizeof (tNetgameInfo) - 1; i++, p++) { s = *reinterpret_cast<ushort*> (p); if (s == networkData.nSegmentCheckSum) { h = i; break; } else if (((s / 256) + (s % 256) * 256) == networkData.nSegmentCheckSum) { h = i; break; } } memcpy (&netGame, sp, sizeof (tNetgameInfo)); memcpy (&netPlayers, playerInfoP, sizeof (tAllNetPlayersInfo)); } gameData.multiplayer.nPlayers = sp->nNumPlayers; gameStates.app.nDifficultyLevel = sp->difficulty; networkData.nStatus = sp->gameStatus; //Assert (gameStates.app.nFunctionMode != FMODE_GAME); // New code, 11/27 #if 1 console.printf (1, "netGame.checksum = %d, calculated checksum = %d.\n", netGame.nSegmentCheckSum, networkData.nSegmentCheckSum); #endif if (netGame.nSegmentCheckSum != networkData.nSegmentCheckSum) { if (extraGameInfo [0].bAutoDownload) networkData.nStatus = NETSTAT_AUTODL; else { short nInMenu = gameStates.menus.nInMenu; gameStates.menus.nInMenu = 0; networkData.nStatus = NETSTAT_MENU; MsgBox (TXT_ERROR, NULL, 1, TXT_OK, TXT_NETLEVEL_MISMATCH); gameStates.menus.nInMenu = nInMenu; } #if 1//!DBG return; #endif } // Discover my CPlayerData number memcpy (szLocalCallSign, LOCALPLAYER.callsign, CALLSIGN_LEN+1); gameData.multiplayer.nLocalPlayer = -1; for (i = 0; i < MAX_NUM_NET_PLAYERS; i++) gameData.multiplayer.players [i].netKillsTotal = 0; for (i = 0, playerP = playerInfoP->players; i < gameData.multiplayer.nPlayers; i++, playerP++) { if (!CmpLocalPlayer (&playerP->network, playerP->callsign, szLocalCallSign)) { if (gameData.multiplayer.nLocalPlayer != -1) { Int3 (); // Hey, we've found ourselves twice MsgBox (TXT_ERROR, NULL, 1, TXT_OK, TXT_DUPLICATE_PLAYERS); console.printf (CON_DBG, TXT_FOUND_TWICE); networkData.nStatus = NETSTAT_MENU; return; } ChangePlayerNumTo (i); } memcpy (gameData.multiplayer.players [i].callsign, playerP->callsign, CALLSIGN_LEN+1); if (gameStates.multi.nGameType >= IPX_GAME) { #ifdef WORDS_NEED_ALIGNMENT uint server; memcpy (&server, playerP->network.ipx.server, 4); if (server != 0) IpxGetLocalTarget ( reinterpret_cast<ubyte*> (&server), playerInfoP->players [i].network.ipx.node, gameData.multiplayer.players [i].netAddress); #else // WORDS_NEED_ALIGNMENT if (*reinterpret_cast<uint*> (playerInfoP->players [i].network.ipx.server) != 0) IpxGetLocalTarget ( playerInfoP->players [i].network.ipx.server, playerInfoP->players [i].network.ipx.node, gameData.multiplayer.players [i].netAddress); #endif // WORDS_NEED_ALIGNMENT else memcpy (gameData.multiplayer.players [i].netAddress, playerInfoP->players [i].network.ipx.node, 6); } gameData.multiplayer.players [i].nPacketsGot = 0; // How many packets we got from them gameData.multiplayer.players [i].nPacketsSent = 0; // How many packets we sent to them gameData.multiplayer.players [i].connected = playerP->connected; gameData.multiplayer.players [i].netKillsTotal = sp->playerKills [i]; gameData.multiplayer.players [i].netKilledTotal = sp->killed [i]; if (networkData.nJoinState || (i != gameData.multiplayer.nLocalPlayer)) gameData.multiplayer.players [i].score = sp->playerScore [i]; for (j = 0; j < MAX_NUM_NET_PLAYERS; j++) gameData.multigame.kills.matrix [i][j] = sp->kills [i][j]; } if (gameData.multiplayer.nLocalPlayer < 0) { MsgBox (TXT_ERROR, NULL, 1, TXT_OK, TXT_PLAYER_REJECTED); networkData.nStatus = NETSTAT_MENU; return; } if (networkData.nJoinState) { for (i = 0; i < gameData.multiplayer.nPlayers; i++) gameData.multiplayer.players [i].netKilledTotal = sp->killed [i]; NetworkProcessMonitorVector (sp->monitorVector); LOCALPLAYER.timeLevel = sp->xLevelTime; } gameData.multigame.kills.nTeam [0] = sp->teamKills [0]; gameData.multigame.kills.nTeam [1] = sp->teamKills [1]; LOCALPLAYER.connected = 1; netPlayers.players [gameData.multiplayer.nLocalPlayer].connected = 1; netPlayers.players [gameData.multiplayer.nLocalPlayer].rank = GetMyNetRanking (); if (!networkData.nJoinState) { int j, bGotTeamSpawnPos = (IsTeamGame) && GotTeamSpawnPos (); for (i = 0; i < gameData.multiplayer.nPlayerPositions; i++) { if (bGotTeamSpawnPos) { j = TeamSpawnPos (i); if (j < 0) j = netGame.locations [i]; } else j = netGame.locations [i]; GetPlayerSpawn (j, OBJECTS + gameData.multiplayer.players [i].nObject); } } OBJECTS [LOCALPLAYER.nObject].SetType (OBJ_PLAYER); networkData.nStatus = (NetworkIAmMaster () || (networkData.nJoinState >= 4)) ? NETSTAT_PLAYING : NETSTAT_WAITING; SetFunctionMode (FMODE_GAME); networkData.bHaveSync = 1; MultiSortKillList (); }
//------------------------------------------------------------------------------ //this is for system-level keys, such as help, etc. //returns 1 if screen changed int HandleSystemKey (int key) { int bScreenChanged = 0; int bStopPlayerMovement = 1; //if (gameStates.gameplay.bSpeedBoost) // return 0; if (!gameStates.app.bPlayerIsDead) switch (key) { case KEY_ESC: if (gameData.app.bGamePaused) gameData.app.bGamePaused = 0; else { gameStates.app.bGameAborted = 1; SetFunctionMode (FMODE_MENU); } break; case KEY_SHIFTED + KEY_F1: bScreenChanged = SelectNextWindowFunction (0); break; case KEY_SHIFTED + KEY_F2: bScreenChanged = SelectNextWindowFunction (1); break; case KEY_SHIFTED + KEY_F3: gameOpts->render.cockpit.nWindowSize = (gameOpts->render.cockpit.nWindowSize + 1) % 4; bScreenChanged = 1; //SelectNextWindowFunction(1); break; case KEY_CTRLED + KEY_F3: gameOpts->render.cockpit.nWindowPos = (gameOpts->render.cockpit.nWindowPos + 1) % 6; bScreenChanged = 1; //SelectNextWindowFunction(1); break; case KEY_SHIFTED + KEY_CTRLED + KEY_F3: gameOpts->render.cockpit.nWindowZoom = (gameOpts->render.cockpit.nWindowZoom + 1) % 4; bScreenChanged = 1; //SelectNextWindowFunction(1); break; } if (!gameStates.app.bPlayerIsDead || (LOCALPLAYER.lives > 1)) { switch (key) { /* case KEY_SHIFTED + KEY_ESC: console.Show (); break; */ case KEY_COMMAND + KEY_P: case KEY_CTRLED + KEY_P: case KEY_PAUSE: DoGamePause (); break; case KEY_CTRLED + KEY_ALTED + KEY_S: if (!ToggleFreeCam ()) return 0; break; case KEY_COMMAND + KEY_SHIFTED + KEY_P: case KEY_PRINT_SCREEN: gameStates.app.bSaveScreenshot = 1; SaveScreenShot (NULL, 0); break; case KEY_F1: ShowHelp (); break; case KEY_F2: //gameStates.app.bConfigMenu = 1; break; if (!IsMultiGame) { paletteManager.SaveEffect (); paletteManager.ResetEffect (); paletteManager.LoadEffect (); } ConfigMenu (); if (!IsMultiGame) paletteManager.LoadEffect (); break; case KEY_F3: if (!GuidedInMainView ()) { SetFreeCam (0); SetChaseCam (0); cockpit->Toggle (); bScreenChanged = 1; } break; case KEY_F7 + KEY_SHIFTED: paletteManager.SaveEffect (); JoyDefsCalibrate (); paletteManager.LoadEffect (); break; case KEY_SHIFTED + KEY_MINUS: case KEY_MINUS: ShrinkWindow (); bScreenChanged = 1; break; case KEY_SHIFTED + KEY_EQUALS: case KEY_EQUALS: GrowWindow (); bScreenChanged = 1; break; case KEY_CTRLED + KEY_F5: saveGameManager.Save (0, 0, 1, 0); break; case KEY_CTRLED + KEY_F9: saveGameManager.Load (0, 0, 1, 0); break; case KEY_F5: if (gameData.demo.nState == ND_STATE_RECORDING) { NDStopRecording (); } else if (gameData.demo.nState == ND_STATE_NORMAL) if (!gameData.app.bGamePaused) //can't start demo while paused NDStartRecording (); break; case KEY_ALTED + KEY_F4: gameData.multigame.bShowReticleName = (gameData.multigame.bShowReticleName + 1) % 2; case KEY_F7: gameData.multigame.kills.bShowList = (gameData.multigame.kills.bShowList + 1) % (IsTeamGame ? 4 : 3); if (IsMultiGame) MultiSortKillList (); bStopPlayerMovement = 0; break; case KEY_CTRLED + KEY_F7: if ((gameStates.render.cockpit.bShowPingStats = !gameStates.render.cockpit.bShowPingStats)) ResetPingStats (); break; case KEY_CTRLED + KEY_F8: gameData.stats.nDisplayMode = (gameData.stats.nDisplayMode + 1) % 5; gameOpts->render.cockpit.bPlayerStats = gameData.stats.nDisplayMode != 0; break; case KEY_F8: MultiSendMsgStart (-1); bStopPlayerMovement = 0; break; case KEY_F9: case KEY_F10: case KEY_F11: case KEY_F12: MultiSendMacro (key); bStopPlayerMovement = 0; break; // send taunt macros case KEY_CTRLED + KEY_F12: gameData.trackIR.x = gameData.trackIR.y = 0; break; case KEY_ALTED + KEY_F12: if (!ToggleChaseCam ()) return 0; break; case KEY_SHIFTED + KEY_F9: case KEY_SHIFTED + KEY_F10: case KEY_SHIFTED + KEY_F11: case KEY_SHIFTED + KEY_F12: MultiDefineMacro (key); bStopPlayerMovement = 0; break; // redefine taunt macros case KEY_ALTED + KEY_F2: if (!gameStates.app.bPlayerIsDead && !(IsMultiGame && !IsCoopGame)) { paletteManager.SaveEffectAndReset (); paletteManager.SetEffect (); // get only the effect color back saveGameManager.Save (0, 0, 0, NULL); paletteManager.LoadEffect (); } break; // 0 means not between levels. case KEY_ALTED + KEY_F3: if (!gameStates.app.bPlayerIsDead && (!IsMultiGame || IsCoopGame)) { paletteManager.SaveEffectAndReset (); saveGameManager.Load (1, 0, 0, NULL); if (gameData.app.bGamePaused) DoGamePause (); } break; case KEY_F4 + KEY_SHIFTED: if (!gameStates.app.bD1Mission) DoEscortMenu (); break; case KEY_F4 + KEY_SHIFTED + KEY_ALTED: if (!gameStates.app.bD1Mission) ChangeGuidebotName (); break; case KEY_MINUS + KEY_ALTED: songManager.Prev (); break; case KEY_EQUALS + KEY_ALTED: songManager.Next (); break; //added 8/23/99 by Matt Mueller for hot key res/fullscreen changing, and menu access case KEY_CTRLED + KEY_SHIFTED + KEY_PADDIVIDE: case KEY_ALTED + KEY_CTRLED + KEY_PADDIVIDE: case KEY_ALTED + KEY_SHIFTED + KEY_PADDIVIDE: RenderOptionsMenu (); break; case KEY_CTRLED + KEY_F1: SwitchDisplayMode (-1); break; case KEY_CTRLED + KEY_F2: SwitchDisplayMode (1); break; case KEY_ALTED + KEY_ENTER: case KEY_ALTED + KEY_PADENTER: GrToggleFullScreenGame (); break; default: return bScreenChanged; } //switch (key) } if (bStopPlayerMovement) { StopPlayerMovement (); gameStates.app.bEnterGame = 2; } return bScreenChanged; }