//starts a new game on the given level void StartNewGame(int start_level) { Game_mode = GM_NORMAL; Function_mode = FMODE_GAME; Next_level_num = 0; InitPlayerObject(); //make sure player's object set up init_player_stats_game(); //clear all stats N_players = 1; #ifdef NETWORK Network_new_game = 0; #endif #ifdef SCRIPT script_reset(); script_load("default.scr"); #endif StartNewLevel(start_level); Players[Player_num].starting_level = start_level; // Mark where they started game_disable_cheats(); }
void LevelWarpCheat (void) { int newLevel_num = MenuGetValue (TXT_WARP_TO_LEVEL); if ((newLevel_num > 0) && (newLevel_num <= gameData.missions.nLastLevel)) { DoCheatPenalty (); StartNewLevel (newLevel_num, 0); } }
void LevelWarpCheat (int bVerbose) { int nNewLevel = MenuGetValue (TXT_WARP_TO_LEVEL); if ((nNewLevel > 0) && (nNewLevel <= gameData.missions.nLastLevel)) { DoCheatPenalty (); StartNewLevel (nNewLevel, 0); } }
int NetworkStartGame (void) { int i, bAutoRun; if (gameStates.multi.nGameType >= IPX_GAME) { Assert (FRAME_INFO_SIZE < DATALIMIT); if (!networkData.bActive) { ExecMessageBox (NULL, NULL, 1, TXT_OK, TXT_IPX_NOT_FOUND); return 0; } } NetworkInit (); ChangePlayerNumTo (0); if (NetworkFindGame ()) { ExecMessageBox (NULL, NULL, 1, TXT_OK, TXT_NET_FULL); return 0; } bAutoRun = InitAutoNetGame (); if (0 > (i = NetworkGetGameParams (bAutoRun))) return 0; gameData.multiplayer.nPlayers = 0; netGame.difficulty = gameStates.app.nDifficultyLevel; netGame.gameMode = mpParams.nGameMode; netGame.gameStatus = NETSTAT_STARTING; netGame.nNumPlayers = 0; netGame.nMaxPlayers = gameData.multiplayer.nMaxPlayers; netGame.nLevel = mpParams.nLevel; netGame.protocolVersion = MULTI_PROTO_VERSION; strcpy (netGame.szGameName, mpParams.szGameName); networkData.nStatus = NETSTAT_STARTING; // Have the network driver initialize whatever data it wants to // store for this netgame. // For mcast4, this randomly chooses a multicast session and port. // Clients subscribe to this address when they call // IpxHandleNetGameAuxData. IpxInitNetGameAuxData (netGame.AuxData); NetworkSetGameMode (netGame.gameMode); d_srand (TimerGetFixedSeconds ()); netGame.nSecurity = d_rand (); // For syncing Netgames with tPlayer packets if (NetworkSelectPlayers (bAutoRun)) { StartNewLevel (netGame.nLevel, 0); ResetAllPlayerTimeouts (); return 1; } else { gameData.app.nGameMode = GM_GAME_OVER; return 0; } }
//starts a resumed game loaded from disk void ResumeSavedGame(int start_level) { Game_mode = GM_NORMAL; Function_mode = FMODE_GAME; N_players = 1; #ifdef NETWORK Network_new_game = 0; #endif InitPlayerObject(); //make sure player's object set up StartNewLevel(start_level); game_disable_cheats(); }
//starts a new game on the given level void StartNewGame(int start_level) { state_quick_item = -1; // for first blind save, pick slot to save in Game_mode = GM_NORMAL; Next_level_num = 0; InitPlayerObject(); //make sure player's object set up init_player_stats_game(Player_num); //clear all stats N_players = 1; StartNewLevel(start_level); Players[Player_num].starting_level = start_level; // Mark where they started game_disable_cheats(); }
//called to go to the next level (if there is one) //if secret_flag is true, advance to secret level, else next normal one // Return true if game over. int AdvanceLevel(int secret_flag) { Control_center_destroyed = 0; #ifdef EDITOR if (Current_level_num == 0) { return 1; //not a real level } #endif key_flush(); #ifdef NETWORK if (Game_mode & GM_MULTI) { int result; result = multi_endlevel(&secret_flag); // Wait for other players to reach this point if (result) // failed to sync { return (Current_level_num == Last_level); } } #endif key_flush(); if (Current_level_num == Last_level) { //player has finished the game! if ((Newdemo_state == ND_STATE_RECORDING) || (Newdemo_state == ND_STATE_PAUSED)) newdemo_stop_recording(); do_end_briefing_screens(Ending_text_filename); return 1; } else { Next_level_num = Current_level_num+1; //assume go to next normal level if (secret_flag) { //go to secret level instead int i; for (i=0;i<-Last_secret_level;i++) if (Secret_level_table[i]==Current_level_num) { Next_level_num = -(i+1); break; } Assert(i<-Last_secret_level); //couldn't find which secret level } if (Current_level_num < 0) { //on secret level, where to go? Assert(!secret_flag); //shouldn't be going to secret level Assert(Current_level_num<=-1 && Current_level_num>=Last_secret_level); Next_level_num = Secret_level_table[(-Current_level_num)-1]+1; } StartNewLevel(Next_level_num); } key_flush(); return 0; }
//called to go to the next level (if there is one) //if secret_flag is true, advance to secret level, else next normal one // Return true if game over. int AdvanceLevel(int secret_flag) { Fuelcen_control_center_destroyed = 0; #ifdef EDITOR if (PLAYING_BUILTIN_MISSION) return 0; //not a real level #endif #ifdef NETWORK if (Game_mode & GM_MULTI) { int result; result = multi_endlevel(&secret_flag); // Wait for other players to reach this point if (result) // failed to sync return (Current_level_num == Last_level); } #endif if (Current_level_num == Last_level) { //player has finished the game! Function_mode = FMODE_MENU; if ((Newdemo_state == ND_STATE_RECORDING) || (Newdemo_state == ND_STATE_PAUSED)) newdemo_stop_recording(); #ifndef SHAREWARE songs_play_song( SONG_ENDGAME, 0 ); #endif do_end_game(); return 1; } else { Next_level_num = Current_level_num+1; //assume go to next normal level if (secret_flag) { //go to secret level instead int i; for (i=0;i<-Last_secret_level;i++) if (Secret_level_table[i]==Current_level_num) { Next_level_num = -(i+1); break; } Assert(i<-Last_secret_level); //couldn't find which secret level } if (Current_level_num < 0) { //on secret level, where to go? Assert(!secret_flag); //shouldn't be going to secret level Assert(Current_level_num<=-1 && Current_level_num>=Last_secret_level); Next_level_num = Secret_level_table[(-Current_level_num)-1]+1; } StartNewLevel(Next_level_num); } return 0; }
int FinalCheats(int key) { static char cheat_buffer[CHEAT_MAX_LEN] = "AAAAAAAAAAAAAAA"; int i = 0, gotcha = 0; if (Game_mode & GM_MULTI) return 0; for (i = 1; i < CHEAT_MAX_LEN; i++) cheat_buffer[i-1] = cheat_buffer[i]; cheat_buffer[CHEAT_MAX_LEN-1] = key_ascii(); for (i = 0; i < NUM_CHEATS; i++) { int cheatlen = strlen(cheat_codes[i].string); Assert(cheatlen <= CHEAT_MAX_LEN); if (d_strnicmp(cheat_codes[i].string, cheat_buffer+CHEAT_MAX_LEN-cheatlen, cheatlen)==0) { if (!cheats.enabled && *cheat_codes[i].stateptr != cheats.enabled) break; if (!cheats.enabled) HUD_init_message(HM_DEFAULT, TXT_CHEATS_ENABLED); *cheat_codes[i].stateptr = !*cheat_codes[i].stateptr; cheats.enabled = 1; digi_play_sample( SOUND_CHEATER, F1_0); Players[Player_num].score = 0; gotcha = i; break; } } if (!gotcha) return 0; if (cheat_codes[gotcha].stateptr == &cheats.wowie) { HUD_init_message_literal(HM_DEFAULT, TXT_WOWIE_ZOWIE); Players[Player_num].primary_weapon_flags |= 0xff ^ (HAS_PLASMA_FLAG | HAS_FUSION_FLAG); Players[Player_num].secondary_weapon_flags |= 0xff ^ (HAS_SMART_FLAG | HAS_MEGA_FLAG); for (i=0; i<3; i++) Players[Player_num].primary_ammo[i] = Primary_ammo_max[i]; for (i=0; i<3; i++) Players[Player_num].secondary_ammo[i] = Secondary_ammo_max[i]; if (Newdemo_state == ND_STATE_RECORDING) newdemo_record_laser_level(Players[Player_num].laser_level, MAX_LASER_LEVEL); Players[Player_num].energy = MAX_ENERGY; Players[Player_num].laser_level = MAX_LASER_LEVEL; Players[Player_num].flags |= PLAYER_FLAGS_QUAD_LASERS; update_laser_weapon_info(); } if (cheat_codes[gotcha].stateptr == &cheats.wowie2) { HUD_init_message(HM_DEFAULT, "SUPER %s",TXT_WOWIE_ZOWIE); Players[Player_num].primary_weapon_flags = 0xff; Players[Player_num].secondary_weapon_flags = 0xff; for (i=0; i<MAX_PRIMARY_WEAPONS; i++) Players[Player_num].primary_ammo[i] = Primary_ammo_max[i]; for (i=0; i<MAX_SECONDARY_WEAPONS; i++) Players[Player_num].secondary_ammo[i] = Secondary_ammo_max[i]; if (Newdemo_state == ND_STATE_RECORDING) newdemo_record_laser_level(Players[Player_num].laser_level, MAX_LASER_LEVEL); Players[Player_num].energy = MAX_ENERGY; Players[Player_num].laser_level = MAX_LASER_LEVEL; Players[Player_num].flags |= PLAYER_FLAGS_QUAD_LASERS; update_laser_weapon_info(); } if (cheat_codes[gotcha].stateptr == &cheats.allkeys) { HUD_init_message_literal(HM_DEFAULT, TXT_ALL_KEYS); Players[Player_num].flags |= PLAYER_FLAGS_BLUE_KEY | PLAYER_FLAGS_RED_KEY | PLAYER_FLAGS_GOLD_KEY; } if (cheat_codes[gotcha].stateptr == &cheats.invul) { Players[Player_num].flags ^= PLAYER_FLAGS_INVULNERABLE; HUD_init_message(HM_DEFAULT, "%s %s!", TXT_INVULNERABILITY, (Players[Player_num].flags&PLAYER_FLAGS_INVULNERABLE)?TXT_ON:TXT_OFF); Players[Player_num].invulnerable_time = GameTime64+i2f(1000); } if (cheat_codes[gotcha].stateptr == &cheats.cloak) { Players[Player_num].flags ^= PLAYER_FLAGS_CLOAKED; HUD_init_message(HM_DEFAULT, "%s %s!", TXT_CLOAK, (Players[Player_num].flags&PLAYER_FLAGS_CLOAKED)?TXT_ON:TXT_OFF); if (Players[Player_num].flags & PLAYER_FLAGS_CLOAKED) { ai_do_cloak_stuff(); Players[Player_num].cloak_time = GameTime64; } } if (cheat_codes[gotcha].stateptr == &cheats.shields) { HUD_init_message_literal(HM_DEFAULT, TXT_FULL_SHIELDS); Players[Player_num].shields = MAX_SHIELDS; } if (cheat_codes[gotcha].stateptr == &cheats.extralife) { if (Players[Player_num].lives<50) { Players[Player_num].lives++; HUD_init_message_literal(HM_DEFAULT, "Extra life!"); } } if (cheat_codes[gotcha].stateptr == &cheats.killreactor) { kill_and_so_forth(); } if (cheat_codes[gotcha].stateptr == &cheats.exitpath) { #ifdef SHOW_EXIT_PATH if (create_special_path()) HUD_init_message_literal(HM_DEFAULT, "Exit path illuminated!"); #endif } if (cheat_codes[gotcha].stateptr == &cheats.levelwarp) { newmenu_item m; char text[10]=""; int new_level_num; int item; *cheat_codes[gotcha].stateptr = 0; m.type=NM_TYPE_INPUT; m.text_len = 10; m.text = text; item = newmenu_do( NULL, TXT_WARP_TO_LEVEL, 1, &m, NULL, NULL ); if (item != -1) { new_level_num = atoi(m.text); if (new_level_num!=0 && new_level_num>=0 && new_level_num<=Last_level) { window_set_visible(Game_wind, 0); StartNewLevel(new_level_num); window_set_visible(Game_wind, 1); } } } if (cheat_codes[gotcha].stateptr == &cheats.ghostphysics) { HUD_init_message(HM_DEFAULT, "%s %s!", "Ghosty mode", cheats.ghostphysics?TXT_ON:TXT_OFF); } if (cheat_codes[gotcha].stateptr == &cheats.rapidfire) { do_megawow_powerup(200); } if (cheat_codes[gotcha].stateptr == &cheats.turbo) { HUD_init_message(HM_DEFAULT, "%s %s!", "Turbo mode", cheats.turbo?TXT_ON:TXT_OFF); } if (cheat_codes[gotcha].stateptr == &cheats.robotfiringsuspended) { HUD_init_message(HM_DEFAULT, "Robot firing %s!", cheats.robotfiringsuspended?TXT_OFF:TXT_ON); } if (cheat_codes[gotcha].stateptr == &cheats.acid) { HUD_init_message_literal(HM_DEFAULT, cheats.acid?"Going up!":"Coming down!"); } return 1; }