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_gameplay( void ) { JE_loadPic(2, false); JE_dString(JE_fontCenter(gameplay_name[0], FONT_SHAPES), 20, gameplay_name[0], FONT_SHAPES); int gameplay = 1, gameplay_max = 4; bool fade_in = true; for (; ; ) { for (int i = 1; i <= gameplay_max; i++) { JE_outTextAdjust(JE_fontCenter(gameplay_name[i], SMALL_FONT_SHAPES), i * 24 + 30, gameplay_name[i], 15, - 4 + (i == gameplay ? 2 : 0) - (i == 4 ? 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: gameplay--; if (gameplay < 1) { gameplay = gameplay_max; } JE_playSampleNum(CURSOR_MOVE); break; case SDLK_DOWN: gameplay++; if (gameplay > gameplay_max) { gameplay = 1; } JE_playSampleNum(CURSOR_MOVE); break; case SDLK_RETURN: if (gameplay == 4) { JE_playSampleNum(ESC); /* TODO: NETWORK */ printf("error: networking via menu not implemented\n"); break; } JE_playSampleNum(SELECT); JE_fadeBlack(10); onePlayerAction = (gameplay == 2); twoPlayerMode = (gameplay == 3); return true; case SDLK_ESCAPE: JE_playSampleNum(ESC); /* fading handled elsewhere JE_fadeBlack(10); */ return false; default: break; } } } return false; }
void JE_jukeboxGo( void ) { JE_boolean weirdMusic, weirdCurrent; JE_byte weirdSpeed = 0; char tempStr[64]; JE_byte lastSong; JE_byte tempVolume; JE_boolean youStopped, drawText, quit, fade; weirdMusic = false; weirdCurrent = true; drawText = true; fx = false; fxNum = 1; lastSong = currentJukeboxSong; JE_fadeBlack(10); SDL_FillRect(VGAScreenSeg, NULL, 0x0); JE_showVGA(); JE_updateColorsFast(vga_palette); //JE_fadeColor(10); JE_starlib_init(); quit = false; fade = false; repeatedFade = false; tempVolume = tyrMusicVolume; youStopped = false; JE_wipeKey(); do { tempScreenSeg = VGAScreenSeg; if (weirdMusic) { if (delaycount2() == 0) { setjasondelay2(weirdSpeed); if (weirdCurrent) { JE_setVol(tempVolume / 2, fxVolume); } else { JE_setVol(tempVolume, fxVolume); } weirdCurrent = !weirdCurrent; } } if (repeated && !repeatedFade) { fade = true; repeatedFade = true; } if ( ( (repeated && !fade) || !playing) && !youStopped) { currentJukeboxSong = ( mt_rand() % MUSIC_NUM ); JE_playNewSong(); } setdelay(1); push_joysticks_as_keyboard(); service_SDL_events(true); JE_starlib_main(); if (lastSong != currentJukeboxSong) { lastSong = currentJukeboxSong; JE_bar(50, 190, 250, 198, 0); } if (drawText) { tempScreenSeg = VGAScreenSeg; if (fx) { sprintf(tempStr, "%d %s", fxNum, soundTitle[fxNum - 1]); JE_bar(50, 190, 250, 198, 0); JE_outText(JE_fontCenter(tempStr, TINY_FONT), 190, tempStr, 1, 4); } else { sprintf(tempStr, "%d %s", currentJukeboxSong, musicTitle[currentJukeboxSong - 1]); JE_outText(JE_fontCenter(tempStr, TINY_FONT), 190, tempStr, 1, 4); } tempScreenSeg = VGAScreenSeg; JE_outText(JE_fontCenter("Press ESC to quit the jukebox.", TINY_FONT), 170, "Press ESC to quit the jukebox.", 1, 0); tempScreenSeg = VGAScreenSeg; JE_outText(JE_fontCenter("Arrow keys change the song being played.", TINY_FONT), 180, "Arrow keys change the song being played.", 1, 0); } JE_showVGA(); wait_delay(); if (fade) { if (volumeActive) { if (tempVolume > 5) { tempVolume -= 2; JE_setVol(tempVolume, fxVolume); } else { fade = false; } } else if (speed < 0xE000) { speed += 0x800; } else { speed = 0xE000; fade = false; } JE_resetTimerInt(); JE_setTimerInt(); } if (JE_mousePosition(&x, &y) > 0 || button[0]) { quit = true; JE_wipeKey(); } if (newkey) { JE_newSpeed(); switch (lastkey_sym) { case SDLK_ESCAPE: /* quit jukebox */ case SDLK_q: quit = true; break; case SDLK_r: /* restart song */ JE_jukebox_selectSong(1); break; case SDLK_n: /* toggle continuous play */ continuousPlay = !continuousPlay; break; case SDLK_v: volumeActive = !volumeActive; break; case SDLK_t: /* No idea what this is doing -- possibly resetting to default speed? */ speed = 0x4300; JE_resetTimerInt(); JE_setTimerInt(); break; case SDLK_f: fade = !fade; break; case SDLK_COMMA: /* dec sound effect */ fxNum = (fxNum - 1 < 1) ? SOUND_NUM + 9 : fxNum - 1; break; case SDLK_PERIOD: /* inc sound effect */ fxNum = (fxNum + 1 > SOUND_NUM + 9) ? 1 : fxNum + 1; break; case SDLK_SLASH: /* switch to sfx mode */ fx = !fx; break; case SDLK_SEMICOLON: JE_playSampleNum(fxNum); break; case SDLK_RETURN: currentJukeboxSong++; JE_playNewSong(); youStopped = false; break; case SDLK_s: JE_jukebox_selectSong(0); youStopped = true; break; case SDLK_w: if (!weirdMusic) { weirdMusic = true; weirdSpeed = 10; } else if (weirdSpeed > 1) { weirdSpeed--; } else { weirdMusic = false; if (!fade) { JE_setVol(tempVolume, fxVolume); } } break; case SDLK_SPACE: drawText = !drawText; if (!drawText) { JE_bar(30, 170, 270, 198, 0); } break; case SDLK_LEFT: case SDLK_UP: currentJukeboxSong--; JE_playNewSong(); youStopped = false; break; case SDLK_RIGHT: case SDLK_DOWN: currentJukeboxSong++; JE_playNewSong(); youStopped = false; break; default: break; } } } while (!quit); JE_updateColorsFast(black); //JE_fadeBlack(10); JE_setVol(255, fxVolume); }