diff --git a/src/config.c b/src/config.c index e387cedf..4ad96e24 100644 --- a/src/config.c +++ b/src/config.c @@ -53,6 +53,11 @@ const DosKeySettings defaultDosKeySettings = 72, 80, 75, 77, 57, 28, 29, 56 }; +const MouseSettings defaultMouseSettings = +{ + 1, 4, 5 +}; + const KeySettings defaultKeySettings = { SDL_SCANCODE_UP, @@ -77,74 +82,24 @@ static const char *const keySettingNames[] = "right sidekick", }; -const char defaultHighScoreNames[34][23] = /* [1..34] of string [22] */ -{/*1P*/ -/*TYR*/ "The Prime Chair", /*13*/ - "Transon Lohk", - "Javi Onukala", - "Mantori", - "Nortaneous", - "Dougan", - "Reid", - "General Zinglon", - "Late Gyges Phildren", - "Vykromod", - "Beppo", - "Borogar", - "ShipMaster Carlos", - -/*OTHER*/ "Jill", /*5*/ - "Darcy", - "Jake Stone", - "Malvineous Havershim", - "Marta Louise Velasquez", - -/*JAZZ*/ "Jazz Jackrabbit", /*3*/ - "Eva Earlong", - "Devan Shell", - -/*OMF*/ "Crystal Devroe", /*11*/ - "Steffan Tommas", - "Milano Angston", - "Christian", - "Shirro", - "Jean-Paul", - "Ibrahim Hothe", - "Angel", - "Cossette Akira", - "Raven", - "Hans Kreissack", - -/*DARE*/ "Tyler", /*2*/ - "Rennis the Rat Guard" +static const char *const mouseSettingNames[] = +{ + "left mouse", + "right mouse", + "middle mouse", }; -const char defaultTeamNames[22][25] = /* [1..22] of string [24] */ +static const char *const mouseSettingValues[] = { - "Jackrabbits", - "Team Tyrian", - "The Elam Brothers", - "Dare to Dream Team", - "Pinball Freaks", - "Extreme Pinball Freaks", - "Team Vykromod", - "Epic All-Stars", - "Hans Keissack's WARriors", - "Team Overkill", - "Pied Pipers", - "Gencore Growlers", - "Microsol Masters", - "Beta Warriors", - "Team Loco", - "The Shellians", - "Jungle Jills", - "Murderous Malvineous", - "The Traffic Department", - "Clan Mikal", - "Clan Patrok", - "Carlos' Crawlers" + "fire main weapon", + "fire left sidekick", + "fire right sidekick", + "fire both sidekicks", + "change rear mode", }; +char defaultHighScoreNames[39][23]; /* [1..39] of string [22] */ +char defaultTeamNames[10][25]; /* [1..22] of string [24] */ const JE_EditorItemAvailType initialItemAvail = { @@ -199,6 +154,9 @@ JE_byte mainLevel, nextLevel, saveLevel; /*Current Level #*/ DosKeySettings dosKeySettings; KeySettings keySettings; +/* Mouse settings */ +MouseSettings mouseSettings; + /* Configuration */ JE_shortint levelFilter, levelFilterNew, levelBrightness, levelBrightnessChg; JE_boolean filtrationAvail, filterActive, filterFade, filterFadeStart; @@ -233,7 +191,7 @@ JE_boolean explosionTransparent, JE_byte soundEffects; // dummy value for config JE_byte versionNum; /* SW 1.0 and SW/Reg 1.1 = 0 or 1 - * EA 1.2 = 2 */ + * EA 1.2 = 2 T2K = 3*/ JE_byte fastPlay; JE_boolean pentiumMode; @@ -303,6 +261,28 @@ bool load_opentyrian_config( void ) } } + memcpy(mouseSettings, defaultMouseSettings, sizeof(mouseSettings)); + + section = config_find_section(config, "mouse", NULL); + if (section != NULL) + { + for (size_t i = 0; i < COUNTOF(mouseSettings); ++i) + { + const char *mouseValue; + if (config_get_string_option(section, mouseSettingNames[i], &mouseValue)) + { + for (size_t val = 1; val <= COUNTOF(mouseSettingValues); ++val) + { + if (strcmp(mouseValue, mouseSettingValues[val - 1])) + continue; + + mouseSettings[i] = val; + break; + } + } + } + } + fclose(file); return true; @@ -341,11 +321,19 @@ bool save_opentyrian_config( void ) #else mkdir(get_user_directory()); #endif + + // Tyrian 2000 doesn't save mouse settings, so we do it ourselves + section = config_find_or_add_section(config, "mouse", NULL); + if (section == NULL) + exit(EXIT_FAILURE); // out of memory + for (size_t i = 0; i < COUNTOF(mouseSettings); ++i) + config_set_string_option(section, mouseSettingNames[i], mouseSettingValues[mouseSettings[i] - 1]); + FILE *file = dir_fopen(get_user_directory(), "opentyrian.cfg", "w"); if (file == NULL) return false; - + config_write(config, file); #if _POSIX_C_SOURCE >= 1 || _XOPEN_SOURCE || _POSIX_SOURCE @@ -834,6 +822,7 @@ void JE_loadConfiguration( void ) gammaCorrection = 0; processorType = 3; gameSpeed = 4; + versionNum = 3; } load_opentyrian_config(); @@ -978,9 +967,9 @@ void JE_loadConfiguration( void ) if (z % 6 > 2) { saveFiles[z].highScore2 = ((mt_rand() % 20) + 1) * 1000; - strcpy(saveFiles[z].highScoreName, defaultTeamNames[mt_rand() % 22]); + strcpy(saveFiles[z].highScoreName, defaultTeamNames[mt_rand() % COUNTOF(defaultTeamNames)]); } else { - strcpy(saveFiles[z].highScoreName, defaultHighScoreNames[mt_rand() % 34]); + strcpy(saveFiles[z].highScoreName, defaultHighScoreNames[mt_rand() % COUNTOF(defaultHighScoreNames)]); } } @@ -990,7 +979,7 @@ void JE_loadConfiguration( void ) { // Timed Battle scores t2kHighScores[z][y].score = ((mt_rand() % 50) + 1) * 100; - strcpy(t2kHighScores[z][y].playerName, defaultHighScoreNames[mt_rand() % 34]); + strcpy(t2kHighScores[z][y].playerName, defaultHighScoreNames[mt_rand() % COUNTOF(defaultHighScoreNames)]); } } for (z = 10; z < 20; ++z) @@ -1000,9 +989,9 @@ void JE_loadConfiguration( void ) // Main Game scores t2kHighScores[z][y].score = ((mt_rand() % 20) + 1) * 1000; if (z & 1) - strcpy(t2kHighScores[z][y].playerName, defaultTeamNames[mt_rand() % 22]); + strcpy(t2kHighScores[z][y].playerName, defaultTeamNames[mt_rand() % COUNTOF(defaultTeamNames)]); else - strcpy(t2kHighScores[z][y].playerName, defaultHighScoreNames[mt_rand() % 34]); + strcpy(t2kHighScores[z][y].playerName, defaultHighScoreNames[mt_rand() % COUNTOF(defaultHighScoreNames)]); } } } diff --git a/src/config.h b/src/config.h index af2c906a..61d31b69 100644 --- a/src/config.h +++ b/src/config.h @@ -55,6 +55,8 @@ typedef JE_byte DosKeySettings[8]; // fka KeySettingType typedef SDL_Scancode KeySettings[8]; +typedef JE_byte MouseSettings[3]; + typedef JE_byte JE_PItemsType[12]; /* [1..12] */ typedef JE_byte JE_EditorItemAvailType[100]; /* [1..100] */ @@ -103,8 +105,9 @@ extern T2KHighScoreType t2kHighScores[20][3]; extern const JE_byte cryptKey[10]; extern const DosKeySettings defaultDosKeySettings; // fka defaultKeySettings extern const KeySettings defaultKeySettings; -extern const char defaultHighScoreNames[34][23]; -extern const char defaultTeamNames[22][25]; +extern const MouseSettings defaultMouseSettings; +extern char defaultHighScoreNames[39][23]; +extern char defaultTeamNames[10][25]; extern const JE_EditorItemAvailType initialItemAvail; extern JE_boolean smoothies[9]; extern JE_byte starShowVGASpecialCode; @@ -137,6 +140,7 @@ extern char lastLevelName[11], levelName[11]; extern JE_byte mainLevel, nextLevel, saveLevel; extern DosKeySettings dosKeySettings; // fka keySettings extern KeySettings keySettings; +extern MouseSettings mouseSettings; extern JE_shortint levelFilter, levelFilterNew, levelBrightness, levelBrightnessChg; extern JE_boolean filtrationAvail, filterActive, filterFade, filterFadeStart; extern JE_boolean gameJustLoaded; diff --git a/src/game_menu.c b/src/game_menu.c index 8c7b9c0d..cdff7d87 100644 --- a/src/game_menu.c +++ b/src/game_menu.c @@ -60,6 +60,7 @@ enum MENU_LIMITED_OPTIONS = 11, // Hides save/load menus. MENU_JOYSTICK_CONFIG = 12, MENU_SUPER_TYRIAN = 13, + MENU_MOUSE_CONFIG = 14, // T2000 }; /*** Structs ***/ @@ -104,8 +105,8 @@ static PlayerItems old_items[2]; // TODO: should not be global if possible static struct cube_struct cube[4]; -static const JE_MenuChoiceType menuChoicesDefault = { 7, 9, 9, 0, 0, 11, (SAVE_FILES_NUM / 2) + 2, 0, 0, 6, 4, 6, 7, 5 }; -static const JE_byte menuEsc[MENU_MAX] = { 0, 1, 1, 1, 2, 3, 3, 1, 8, 0, 0, 11, 3, 0 }; +static const JE_MenuChoiceType menuChoicesDefault = { 7, 9, 9, 0, 0, 11, (SAVE_FILES_NUM / 2) + 2, 0, 0, 6, 4, 6, 7, 5, 6 }; +static const JE_byte menuEsc[MENU_MAX] = { 0, 1, 1, 1, 2, 3, 3, 1, 8, 0, 0, 11, 3, 0, 2 }; static const JE_byte itemAvailMap[7] = { 1, 2, 3, 9, 4, 6, 7 }; static const JE_word planetX[21] = { 200, 150, 240, 300, 270, 280, 320, 260, 220, 150, 160, 210, 80, 240, 220, 180, 310, 330, 150, 240, 200 }; static const JE_word planetY[21] = { 40, 90, 90, 80, 170, 30, 50, 130, 120, 150, 220, 200, 80, 50, 160, 10, 55, 55, 90, 90, 40 }; @@ -307,11 +308,20 @@ void JE_itemScreen( void ) /* Draw menu choices for simple menus */ if ((curMenu >= MENU_FULL_GAME && curMenu <= MENU_PLAY_NEXT_LEVEL) || (curMenu >= MENU_2_PLAYER_ARCADE && curMenu <= MENU_LIMITED_OPTIONS) || - curMenu == MENU_SUPER_TYRIAN) + curMenu >= MENU_SUPER_TYRIAN) { JE_drawMenuChoices(); } + if (curMenu == MENU_MOUSE_CONFIG) + { + for (int i = 0; i < 3; ++i) + { + int tempY = 51 + i * 24; + JE_textShade(VGAScreen, 215, tempY, joyButtonNames[mouseSettings[i] - 1], 15, 2, PART_SHADE); + } + } + /* Data cube icons */ if (curMenu == MENU_FULL_GAME) { @@ -1155,7 +1165,7 @@ void JE_itemScreen( void ) mouseX < 308 && curMenu != MENU_DATA_CUBE_SUB) { - const JE_byte mouseSelectionY[MENU_MAX] = { 16, 16, 16, 16, 26, 12, 11, 28, 0, 16, 16, 16, 8, 16 }; + const JE_byte mouseSelectionY[MENU_MAX] = { 16, 16, 16, 16, 26, 12, 11, 28, 0, 16, 16, 16, 8, 16, 24 }; int selection = (mouseY - 38) / mouseSelectionY[curMenu]+2; @@ -1983,6 +1993,11 @@ void JE_drawMenuChoices( void ) tempY -= 16; } + if (curMenu == MENU_MOUSE_CONFIG) + { + tempY += (x-2) * 8; + } + str = malloc(strlen(menuInt[curMenu + 1][x-1])+2); if (curSel[curMenu] == x) { @@ -2783,8 +2798,7 @@ void JE_menuFunction( JE_byte select ) curMenu = MENU_KEYBOARD_CONFIG; break; case 8: - // TODO Mouse settings menu - JE_playSampleNum(S_SPRING); + curMenu = MENU_MOUSE_CONFIG; break; case 9: curMenu = MENU_FULL_GAME; @@ -3119,6 +3133,24 @@ void JE_menuFunction( JE_byte select ) } } break; + + case MENU_MOUSE_CONFIG: + switch(curSel[curMenu]) + { + case 2: + case 3: + case 4: + temp = curSel[curMenu] - 2; + if (++mouseSettings[temp] > 5) + mouseSettings[temp] = 1; + break; + case 5: + memcpy(mouseSettings, defaultMouseSettings, sizeof(mouseSettings)); + break; + case 6: + curMenu = MENU_OPTIONS; + break; + } } old_items[0] = player[0].items; diff --git a/src/helptext.c b/src/helptext.c index b7f7b5d3..a6d55d7c 100644 --- a/src/helptext.c +++ b/src/helptext.c @@ -45,7 +45,8 @@ const JE_byte menuHelp[MENU_MAX][11] = /* [1..maxmenu, 1..11] */ { 4, 37, 12, 0, 0, 0, 0, 0, 0, 0, 0 }, { 16, 17, 15, 15, 12, 0, 0, 0, 0, 0, 0 }, { 31, 31, 31, 31, 32, 12, 0, 0, 0, 0, 0 }, - { 4, 34, 3, 5, 0, 0, 0, 0, 0, 0, 0 } + { 4, 34, 3, 5, 0, 0, 0, 0, 0, 0, 0 }, + { 35, 35, 35, 36, 12, 0, 0, 0, 0, 0, 0 } }; JE_byte verticalHeight = 7; @@ -75,6 +76,9 @@ char destructHelp[25][22]; /* [1.. char weaponNames[17][17]; /* [1..17] of string [16] */ char destructModeName[DESTRUCT_MODES][13]; /* [1..destructmodes] of string [12] */ char shipInfo[HELPTEXT_SHIPINFO_COUNT][2][256]; /* [1..13, 1..2] of string */ +char licensingInfo[3][46]; /* [1..3] of string */ +char orderingInfo[6][32]; /* [1..6] of string */ +char superTyrianText[6][64]; /* [1..6] of string */ char menuInt[MENU_MAX+1][11][18]; /* [0..14, 1..11] of string [17] */ @@ -185,7 +189,8 @@ void JE_HBox( SDL_Surface *screen, int x, int y, unsigned int messagenum, unsig void JE_loadHelpText( void ) { - const unsigned int menuInt_entries[MENU_MAX + 1] = { -1, 7, 9, 9, -1, -1, 11, -1, -1, -1, 6, 4, 7, 7, 5 }; + const unsigned int menuInt_entries[MENU_MAX + 1] = { -1, 7, 9, 9, -1, -1, 11, -1, -1, -1, 6, 4, 7, 7, 5, 6 }; + const unsigned int setup_entries[10] = {10, 5, 4, 4, 5, 7, 7, 21, 3, 3}; FILE *f = dir_fopen_die(data_dir(), "tyrian.hdt", "rb"); fread_s32_die(&episode1DataLoc, 1, f); @@ -402,6 +407,50 @@ void JE_loadHelpText( void ) read_encrypted_pascal_string(timed_battle_name[i], sizeof(timed_battle_name[i]), f); skip_pascal_string(f); + /*Setup entries, skipped since we don't use them*/ + for (unsigned int entry = 0; entry < COUNTOF(setup_entries); ++entry) + { + skip_pascal_string(f); + for (unsigned int i = 0; i < setup_entries[entry]; ++i) + skip_pascal_string(f); + skip_pascal_string(f); + } + + /*Menu 15 - Mouse Settings*/ + skip_pascal_string(f); + for (unsigned int i = 0; i < menuInt_entries[15]; ++i) + read_encrypted_pascal_string(menuInt[15][i], sizeof(menuInt[15][i]), f); + skip_pascal_string(f); + + /*Tyrian Licensing Info*/ + skip_pascal_string(f); + for (unsigned int i = 0; i < COUNTOF(licensingInfo); ++i) + read_encrypted_pascal_string(licensingInfo[i], sizeof(licensingInfo[i]), f); + skip_pascal_string(f); + + /*Default High Score Names*/ + skip_pascal_string(f); + for (unsigned int i = 0; i < COUNTOF(defaultHighScoreNames); ++i) + read_encrypted_pascal_string(defaultHighScoreNames[i], sizeof(defaultHighScoreNames[i]), f); + skip_pascal_string(f); + + /*Default Team Names*/ + skip_pascal_string(f); + for (unsigned int i = 0; i < COUNTOF(defaultTeamNames); ++i) + read_encrypted_pascal_string(defaultTeamNames[i], sizeof(defaultTeamNames[i]), f); + skip_pascal_string(f); + + /*Ordering Info?*/ + skip_pascal_string(f); + for (unsigned int i = 0; i < COUNTOF(orderingInfo); ++i) + read_encrypted_pascal_string(orderingInfo[i], sizeof(orderingInfo[i]), f); + skip_pascal_string(f); + + /*Super Tyrian text*/ + skip_pascal_string(f); + for (unsigned int i = 0; i < COUNTOF(superTyrianText); ++i) + read_encrypted_pascal_string(superTyrianText[i], sizeof(superTyrianText[i]), f); + fclose(f); } diff --git a/src/helptext.h b/src/helptext.h index 3bcf3e3b..7b254666 100644 --- a/src/helptext.h +++ b/src/helptext.h @@ -25,7 +25,7 @@ #include -#define MENU_MAX 14 +#define MENU_MAX 15 #define DESTRUCT_MODES 5 @@ -67,6 +67,9 @@ extern char destructHelp[25][22]; extern char weaponNames[17][17]; extern char destructModeName[DESTRUCT_MODES][13]; extern char shipInfo[HELPTEXT_SHIPINFO_COUNT][2][256]; +extern char licensingInfo[3][46]; +extern char orderingInfo[6][32]; +extern char superTyrianText[6][64]; extern char menuInt[MENU_MAX+1][11][18]; void read_encrypted_pascal_string( char *s, size_t size, FILE *f ); diff --git a/src/keyboard.c b/src/keyboard.c index 82a2936c..e68dbe9a 100644 --- a/src/keyboard.c +++ b/src/keyboard.c @@ -18,6 +18,7 @@ */ #include "keyboard.h" +#include "config.h" #include "joystick.h" #include "network.h" #include "opentyr.h" @@ -35,7 +36,7 @@ SDL_Scancode lastkey_scan; SDL_Keymod lastkey_mod; Uint8 lastmouse_but; Uint16 lastmouse_x, lastmouse_y; -JE_boolean mouse_pressed[3] = {false, false, false}; +JE_boolean mouse_pressed[4] = {false, false, false, false}; Uint16 mouse_x, mouse_y; Uint8 keysactive[SDL_NUM_SCANCODES]; @@ -228,14 +229,35 @@ void service_SDL_events( JE_boolean clear_new ) { mousedown = false; } + + int whichMB = -1; switch (ev.button.button) { - case SDL_BUTTON_LEFT: - mouse_pressed[0] = mousedown; break; - case SDL_BUTTON_RIGHT: - mouse_pressed[1] = mousedown; break; - case SDL_BUTTON_MIDDLE: - mouse_pressed[2] = mousedown; break; + case SDL_BUTTON_LEFT: whichMB = 0; break; + case SDL_BUTTON_RIGHT: whichMB = 1; break; + case SDL_BUTTON_MIDDLE: whichMB = 2; break; + } + if (whichMB < 0) + break; + + switch (mouseSettings[whichMB]) + { + case 1: // Fire Main Weapons + mouse_pressed[0] = mousedown; + break; + case 2: // Fire Left Sidekick + mouse_pressed[1] = mousedown; + break; + case 3: // Fire Right Sidekick + mouse_pressed[2] = mousedown; + break; + case 4: // Fire BOTH Sidekicks + mouse_pressed[1] = mousedown; + mouse_pressed[2] = mousedown; + break; + case 5: // Change Rear Mode + mouse_pressed[3] = mousedown; + break; } break; diff --git a/src/keyboard.h b/src/keyboard.h index cc626346..93317bad 100644 --- a/src/keyboard.h +++ b/src/keyboard.h @@ -33,7 +33,7 @@ extern SDL_Scancode lastkey_scan; extern SDL_Keymod lastkey_mod; extern Uint8 lastmouse_but; extern Uint16 lastmouse_x, lastmouse_y; -extern JE_boolean mouse_pressed[3]; +extern JE_boolean mouse_pressed[4]; extern Uint16 mouse_x, mouse_y; extern Uint8 keysactive[SDL_NUM_SCANCODES]; diff --git a/src/mainint.c b/src/mainint.c index cd988120..de2cae3b 100644 --- a/src/mainint.c +++ b/src/mainint.c @@ -3156,10 +3156,10 @@ void JE_playerMovement( Player *this_player, /* mouse input */ if ((inputDevice == 0 || inputDevice == 2) && has_mouse) { - // TODO Tyrian 2000 remap mouse button[0] |= mouse_pressed[0]; button[1] |= mouse_pressed[1]; button[2] |= mouse_pressed[2]; + button[3] |= mouse_pressed[3]; if (input_grab_enabled) { diff --git a/src/opentyr.c b/src/opentyr.c index 897b3b02..c600bdbb 100644 --- a/src/opentyr.c +++ b/src/opentyr.c @@ -154,6 +154,8 @@ void opentyrian_menu( void ) if (sel == MENU_FULLSCREEN || sel == MENU_SCALER || sel == MENU_SCALING_MODE) { draw_font_hv_shadow(VGAScreen, VGAScreen->w / 2, 190, "Change option with Left/Right keys then press Enter.", small_font, centered, 15, 2, true, 1); + } else { + draw_font_hv_shadow(VGAScreen, VGAScreen->w / 2, 190, opentyrian_version, small_font, centered, 15, 2, true, 1); } JE_showVGA(); @@ -335,11 +337,18 @@ int main( int argc, char *argv[] ) return -1; } - JE_loadConfiguration(); + // Note for this reorganization: + // Tyrian 2000 requires help text to be loaded before the configuration, + // because the default high score names are stored in help text + + JE_paramCheck(argc, argv); xmas = xmas_time(); // arg handler may override - JE_paramCheck(argc, argv); + JE_loadHelpText(); + /*debuginfo("Help text complete");*/ + + JE_loadConfiguration(); JE_scanForEpisodes(); @@ -392,9 +401,6 @@ int main( int argc, char *argv[] ) JE_loadExtraShapes(); /*Editship*/ - JE_loadHelpText(); - /*debuginfo("Help text complete");*/ - if (isNetworkGame) { #ifdef WITH_NETWORK diff --git a/src/tyrian2.c b/src/tyrian2.c index ff590ba6..34dd2c1d 100644 --- a/src/tyrian2.c +++ b/src/tyrian2.c @@ -3344,7 +3344,10 @@ bool JE_titleScreen( JE_boolean animate ) JE_loadPic(VGAScreen, 4, false); - draw_font_hv_shadow(VGAScreen, 2, 192, opentyrian_version, small_font, left_aligned, 15, 0, false, 1); + // Version display moved to OT2K menu + draw_font_hv_shadow(VGAScreen, 2, 179, licensingInfo[2], small_font, left_aligned, 15, 0, true, 1); + draw_font_hv_shadow(VGAScreen, 2, 186, licensingInfo[1], small_font, left_aligned, 15, 0, true, 1); + draw_font_hv_shadow(VGAScreen, 2, 193, licensingInfo[0], small_font, left_aligned, 15, 0, true, 1); memcpy(VGAScreen2->pixels, VGAScreen->pixels, VGAScreen2->pitch * VGAScreen2->h); @@ -3465,15 +3468,15 @@ bool JE_titleScreen( JE_boolean animate ) initialDifficulty = keysactive[SDL_SCANCODE_SCROLLLOCK] ? 6 : 8; JE_clr256(VGAScreen); - JE_outText(VGAScreen, 10, 10, "Cheat codes have been disabled.", 15, 4); + JE_outText(VGAScreen, 10, 10, superTyrianText[0], 15, 4); if (initialDifficulty == 8) - JE_outText(VGAScreen, 10, 20, "Difficulty level has been set to Lord of Game.", 15, 4); + JE_outText(VGAScreen, 10, 20, superTyrianText[1], 15, 4); else - JE_outText(VGAScreen, 10, 20, "Difficulty level has been set to Suicide.", 15, 4); - JE_outText(VGAScreen, 10, 30, "It is imperative that you discover the special codes.", 15, 4); + JE_outText(VGAScreen, 10, 20, superTyrianText[2], 15, 4); + JE_outText(VGAScreen, 10, 30, superTyrianText[3], 15, 4); if (initialDifficulty == 8) - JE_outText(VGAScreen, 10, 40, "(Next time, for an easier challenge hold down SCROLL LOCK.)", 15, 4); - JE_outText(VGAScreen, 10, 60, "Prepare to play...", 15, 4); + JE_outText(VGAScreen, 10, 40, superTyrianText[4], 15, 4); + JE_outText(VGAScreen, 10, 60, superTyrianText[5], 15, 4); char buf[10+1+15+1]; snprintf(buf, sizeof(buf), "%s %s", miscTextB[4], pName[0]);