void JE_loadGame( JE_byte slot ) { JE_byte temp5; superTyrian = false; onePlayerAction = false; twoPlayerMode = false; extraGame = false; galagaMode = false; initialDifficulty = saveFiles[slot-1].initialDifficulty; gameHasRepeated = saveFiles[slot-1].gameHasRepeated; twoPlayerMode = (slot-1) > 10; difficultyLevel = saveFiles[slot-1].difficulty; pitems_to_playeritems(&player[0].items, saveFiles[slot-1].items, &initial_episode_num); superArcadeMode = player[0].items.super_arcade_mode; if (superArcadeMode == SA_SUPERTYRIAN) superTyrian = true; if (superArcadeMode != SA_NONE) onePlayerAction = true; if (superArcadeMode > SA_NORTSHIPZ) superArcadeMode = SA_NONE; if (twoPlayerMode) { onePlayerAction = false; pitems_to_playeritems(&player[1].items, saveFiles[slot-1].lastItems, NULL); } else { pitems_to_playeritems(&player[0].last_items, saveFiles[slot-1].lastItems, NULL); } /* Compatibility with old version */ if (player[1].items.sidekick_level < 101) { player[1].items.sidekick_level = 101; player[1].items.sidekick_series = player[1].items.sidekick[LEFT_SIDEKICK]; } player[0].cash = saveFiles[slot-1].score; player[1].cash = saveFiles[slot-1].score2; mainLevel = saveFiles[slot-1].level; cubeMax = saveFiles[slot-1].cubes; lastCubeMax = cubeMax; secretHint = saveFiles[slot-1].secretHint; inputDevice[0] = saveFiles[slot-1].input1; inputDevice[1] = saveFiles[slot-1].input2; for (uint port = 0; port < 2; ++port) { // if two-player, use first player's front and second player's rear weapon player[twoPlayerMode ? port : 0].items.weapon[port].power = saveFiles[slot-1].power[port]; } temp5 = saveFiles[slot-1].episode; memcpy(&levelName, &saveFiles[slot-1].levelName, sizeof(levelName)); if (strcmp(levelName, "Completed") == 0) { if (temp5 == 4) { temp5 = 1; } else if (temp5 < 4) { temp5++; } /* Increment 1-3 to 2-4. Episode 4 goes to 1. Episode 5 stands still. */ } JE_initEpisode(temp5); saveLevel = mainLevel; memcpy(&lastLevelName, &levelName, sizeof(levelName)); }
bool select_episode( void ) { JE_loadPic(2, false); JE_dString(JE_fontCenter(episode_name[0], FONT_SHAPES), 20, episode_name[0], FONT_SHAPES); int episode = 1, episode_max = EPISODE_MAX - 1; bool fade_in = true; for (; ; ) { for (int i = 1; i <= episode_max; i++) { JE_outTextAdjust(20, i * 30 + 20, episode_name[i], 15, -4 + (i == episode ? 2 : 0) - (!episodeAvail[i - 1] ? 4 : 0), SMALL_FONT_SHAPES, true); } JE_showVGA(); if (fade_in) { JE_fadeColor(10); fade_in = false; } JE_word temp = 0; JE_textMenuWait(&temp, false); if (newkey) { switch (lastkey_sym) { case SDLK_UP: episode--; if (episode < 1) { episode = episode_max; } JE_playSampleNum(CURSOR_MOVE); break; case SDLK_DOWN: episode++; if (episode > episode_max) { episode = 1; } JE_playSampleNum(CURSOR_MOVE); break; case SDLK_RETURN: if (!episodeAvail[episode - 1]) { JE_playSampleNum(ESC); break; } JE_playSampleNum(SELECT); JE_fadeBlack(10); JE_initEpisode(episode); pItems[9-1] = episodeNum; return true; case SDLK_ESCAPE: JE_playSampleNum(ESC); /* fading handled elsewhere JE_fadeBlack(10); */ return false; default: break; } } } return false; }
bool select_episode( void ) { JE_loadPic(VGAScreen, 2, false); JE_dString(VGAScreen, JE_fontCenter(episode_name[0], FONT_SHAPES), 20, episode_name[0], FONT_SHAPES); int episode = 1, episode_max = EPISODE_AVAILABLE; bool fade_in = true; for (; ; ) { for (int i = 1; i <= episode_max; i++) { JE_outTextAdjust(VGAScreen, 20, i * 30 + 20, episode_name[i], 15, -4 + (i == episode ? 2 : 0) - (!episodeAvail[i - 1] ? 4 : 0), SMALL_FONT_SHAPES, true); } JE_showVGA(); if (fade_in) { fade_palette(colors, 10, 0, 255); fade_in = false; } JE_word temp = 0; JE_textMenuWait(&temp, false); if (newkey) { switch (lastkey_sym) { case SDLK_UP: episode--; if (episode < 1) { episode = episode_max; } JE_playSampleNum(S_CURSOR); break; case SDLK_DOWN: episode++; if (episode > episode_max) { episode = 1; } JE_playSampleNum(S_CURSOR); break; case SDLK_RETURN: if (!episodeAvail[episode - 1]) { JE_playSampleNum(S_SPRING); break; } JE_playSampleNum(S_SELECT); fade_black(10); JE_initEpisode(episode); initial_episode_num = episodeNum; return true; case SDLK_ESCAPE: JE_playSampleNum(S_SPRING); /* fading handled elsewhere fade_black(10); */ return false; default: break; } } } }