bool xmas_prompt( void ) { const char *xmas_text[] = { "Christmas has been detected.", "Activate Christmas?", "Yes", "No" }; JE_updateColorsFast(palettes[0]); JE_outTextAdjust(JE_fontCenter(xmas_text[0], SMALL_FONT_SHAPES), 85, xmas_text[0], 4, -2, SMALL_FONT_SHAPES, true); JE_outTextAdjust(JE_fontCenter(xmas_text[1], SMALL_FONT_SHAPES), 100, xmas_text[1], 2, -2, SMALL_FONT_SHAPES, false); int selection = 0; bool decided = false; while (!decided) { JE_outTextAdjust(JE_fontCenter(xmas_text[2], SMALL_FONT_SHAPES) - 20, 120, xmas_text[2], 15, (selection == 0) ? -2 : -4, SMALL_FONT_SHAPES, true); JE_outTextAdjust(JE_fontCenter(xmas_text[3], SMALL_FONT_SHAPES) + 20, 120, xmas_text[3], 15, (selection == 1) ? -2 : -4, SMALL_FONT_SHAPES, true); JE_showVGA(); JE_word temp = 0; JE_textMenuWait(&temp, false); if (newkey) { switch (lastkey_sym) { case SDLK_LEFT: if (selection == 0) selection = 2; selection--; break; case SDLK_RIGHT: selection++; selection %= 2; break; case SDLK_RETURN: decided = true; break; case SDLK_ESCAPE: return false; default: break; } } } return (selection == 0); }
void JE_outTextGlow( SDL_Surface * screen, int x, int y, const char *s ) { int16_t z; uint8_t c = 15; if (warningRed) { c = 7; } JE_outTextAdjust(screen, x - 1, y, s, 0, -12, textGlowFont, false); JE_outTextAdjust(screen, x, y - 1, s, 0, -12, textGlowFont, false); JE_outTextAdjust(screen, x + 1, y, s, 0, -12, textGlowFont, false); JE_outTextAdjust(screen, x, y + 1, s, 0, -12, textGlowFont, false); if (frameCountMax > 0) for (z = 1; z <= 12; z++) { setjasondelay(frameCountMax); JE_outTextAdjust(screen, x, y, s, c, z - 10, textGlowFont, false); if (JE_anyButton()) { frameCountMax = 0; } NETWORK_KEEP_ALIVE(); JE_showVGA(); wait_delay(); } for (z = (frameCountMax == 0) ? 6 : 12; z >= textGlowBrightness; z--) { setjasondelay(frameCountMax); JE_outTextAdjust(screen, x, y, s, c, z - 10, textGlowFont, false); if (JE_anyButton()) { frameCountMax = 0; } NETWORK_KEEP_ALIVE(); JE_showVGA(); wait_delay(); } textGlowBrightness = 6; }
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; }
bool select_difficulty( void ) { JE_loadPic(2, false); JE_dString(JE_fontCenter(difficulty_name[0], FONT_SHAPES), 20, difficulty_name[0], FONT_SHAPES); difficultyLevel = 2; int difficulty_max = 3; bool fade_in = true; for (; ; ) { for (int i = 1; i <= difficulty_max; i++) { JE_outTextAdjust(JE_fontCenter(difficulty_name[i], SMALL_FONT_SHAPES), i * 24 + 30, difficulty_name[i], 15, -4 + (i == difficultyLevel ? 2 : 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 (SDL_GetModState() & KMOD_SHIFT) { if ((difficulty_max < 4 && keysactive[SDLK_g]) || (difficulty_max == 4 && keysactive[SDLK_RIGHTBRACKET])) { difficulty_max++; } } else if (difficulty_max == 5 && keysactive[SDLK_l] && keysactive[SDLK_o] && keysactive[SDLK_r] && keysactive[SDLK_d]) { difficulty_max++; } if (newkey) { switch (lastkey_sym) { case SDLK_UP: difficultyLevel--; if (difficultyLevel < 1) { difficultyLevel = difficulty_max; } JE_playSampleNum(CURSOR_MOVE); break; case SDLK_DOWN: difficultyLevel++; if (difficultyLevel > difficulty_max) { difficultyLevel = 1; } JE_playSampleNum(CURSOR_MOVE); break; case SDLK_RETURN: JE_playSampleNum(SELECT); /* fading handled elsewhere JE_fadeBlack(10); */ if (difficultyLevel == 6) { difficultyLevel = 8; } else if (difficultyLevel == 5) { difficultyLevel = 6; } 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(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(VGAScreen, 2, false); JE_dString(VGAScreen, JE_fontCenter(gameplay_name[0], FONT_SHAPES), 20, gameplay_name[0], FONT_SHAPES); int gameplay = 1, gameplay_max = GAMEPLAY_NAME_COUNT - 1; bool fade_in = true; for (; ; ) { for (int i = 1; i <= gameplay_max; i++) { JE_outTextAdjust(VGAScreen, JE_fontCenter(gameplay_name[i], SMALL_FONT_SHAPES), i * 24 + 30, gameplay_name[i], 15, -4 + (i == gameplay ? 2 : 0) - (i == (GAMEPLAY_NAME_COUNT - 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: if (--gameplay < 1) gameplay = gameplay_max; JE_playSampleNum(S_CURSOR); break; case SDLK_DOWN: if (++gameplay > gameplay_max) gameplay = 1; JE_playSampleNum(S_CURSOR); break; case SDLK_RETURN: if (gameplay == GAMEPLAY_NAME_COUNT - 1) { JE_playSampleNum(S_SPRING); /* TODO: NETWORK */ fprintf(stderr, "error: networking via menu not implemented\n"); break; } JE_playSampleNum(S_SELECT); fade_black(10); onePlayerAction = (gameplay == 2); twoPlayerMode = (gameplay == GAMEPLAY_NAME_COUNT - 2); return true; case SDLK_ESCAPE: JE_playSampleNum(S_SPRING); /* fading handled elsewhere fade_black(10); */ return false; default: break; } } } }
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; } } } }
bool select_difficulty( void ) { newkey = false; JE_loadPic(VGAScreen, 2, false); JE_dString(VGAScreen, JE_fontCenter(difficulty_name[0], FONT_SHAPES), 20, difficulty_name[0], FONT_SHAPES); difficultyLevel = 2; int difficulty_max = 3; bool fade_in = true; for (; ; ) { for (int i = 1; i <= difficulty_max; i++) { JE_outTextAdjust(VGAScreen, JE_fontCenter(difficulty_name[i], SMALL_FONT_SHAPES), i * 24 + 30, difficulty_name[i], 15, -4 + (i == difficultyLevel ? 2 : 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 (SDL_GetModState() & KMOD_SHIFT) { if ((difficulty_max < 4 && keysactive[SDL_SCANCODE_G]) || (difficulty_max == 4 && keysactive[SDL_SCANCODE_RIGHTBRACKET])) { difficulty_max++; } } else if (difficulty_max == 5 && keysactive[SDL_SCANCODE_L] && keysactive[SDL_SCANCODE_O] && keysactive[SDL_SCANCODE_R] && keysactive[SDL_SCANCODE_D]) { difficulty_max++; } if (newkey) { switch (lastkey_scan) { case SDL_SCANCODE_UP: difficultyLevel--; if (difficultyLevel < 1) { difficultyLevel = difficulty_max; } JE_playSampleNum(S_CURSOR); break; case SDL_SCANCODE_DOWN: difficultyLevel++; if (difficultyLevel > difficulty_max) { difficultyLevel = 1; } JE_playSampleNum(S_CURSOR); break; case SDL_SCANCODE_RETURN: JE_playSampleNum(S_SELECT); /* fading handled elsewhere fade_black(10); */ if (difficultyLevel == 6) { difficultyLevel = 8; } else if (difficultyLevel == 5) { difficultyLevel = 6; } return true; case SDL_SCANCODE_AC_BACK: case SDL_SCANCODE_ESCAPE: JE_playSampleNum(S_SPRING); /* fading handled elsewhere fade_black(10); */ return false; default: break; } } } }