X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Fscreens.c;h=91aa31b8d2cfad6e6683773c5cd4a3b5b43d6986;hb=2ae6ae8ed951e87fcba7c363705cd6ddea8de91c;hp=ddd4def814d661eba2e1ade1a6ff5d63753a01e9;hpb=b9c7e4a42762c8526702726f1404d3e75dbc29f5;p=rocksndiamonds.git diff --git a/src/screens.c b/src/screens.c index ddd4def8..91aa31b8 100644 --- a/src/screens.c +++ b/src/screens.c @@ -1,25 +1,24 @@ /*********************************************************** -* Rocks'n'Diamonds -- McDuffin Strikes Back! * +* Rocks'n'Diamonds -- McDuffin Strikes Back! * *----------------------------------------------------------* -* (c) 1995-98 Artsoft Entertainment * -* Holger Schemel * -* Oststrasse 11a * -* 33604 Bielefeld * -* phone: ++49 +521 290471 * -* email: aeglos@valinor.owl.de * +* (c) 1995-2000 Artsoft Entertainment * +* Holger Schemel * +* Detmolder Strasse 189 * +* 33604 Bielefeld * +* Germany * +* e-mail: info@artsoft.org * *----------------------------------------------------------* -* screens.c * +* screens.c * ***********************************************************/ +#include "libgame/libgame.h" + #include "screens.h" #include "events.h" -#include "sound.h" #include "game.h" #include "tools.h" #include "editor.h" -#include "misc.h" #include "files.h" -#include "buttons.h" #include "tape.h" #include "joystick.h" #include "cartoons.h" @@ -60,7 +59,7 @@ void DrawHeadline() int x = SX + (SXSIZE - strlen(PROGRAM_TITLE_STRING) * FONT1_XSIZE) / 2; DrawText(x, SY + 8, PROGRAM_TITLE_STRING, FS_BIG, FC_YELLOW); - DrawTextFCentered(46, FC_RED, COPYRIGHT_STRING); + DrawTextFCentered(46, FC_RED, WINDOW_SUBTITLE_STRING); } void DrawMainMenu() @@ -84,6 +83,12 @@ void DrawMainMenu() /* needed if last screen was the editor screen */ UndrawSpecialEditorDoor(); + /* needed if last screen was the setup screen and fullscreen state changed */ + setup.fullscreen = ChangeVideoModeIfNeeded(setup.fullscreen); +#ifdef TARGET_SDL + SetDrawtoField(DRAW_BACKBUFFER); +#endif + /* map gadgets for main menu screen */ MapTapeButtons(); @@ -256,9 +261,9 @@ void HandleMainMenu(int mx, int my, int dx, int dy, int button) level_nr = new_level_nr; - DrawTextExt(drawto, gc, SX + 11 * 32, SY + 3 * 32, + DrawTextExt(drawto, SX + 11 * 32, SY + 3 * 32, int2str(level_nr, 3), FS_BIG, font_color); - DrawTextExt(window, gc, SX + 11 * 32, SY + 3 * 32, + DrawTextExt(window, SX + 11 * 32, SY + 3 * 32, int2str(level_nr, 3), FS_BIG, font_color); LoadLevel(level_nr); @@ -327,7 +332,7 @@ void HandleMainMenu(int mx, int my, int dx, int dy, int button) if (setup.autorecord) TapeStartRecording(); -#ifndef MSDOS +#if defined(PLATFORM_UNIX) if (options.network) SendToServer_StartPlaying(); else @@ -611,7 +616,7 @@ void DrawHelpScreenElAction(int start) } j++; - DrawGraphicExt(drawto, gc, xstart, ystart+(i-start)*ystep, graphic+frame); + DrawGraphicExt(drawto, xstart, ystart+(i-start)*ystep, graphic+frame); i++; } @@ -686,7 +691,7 @@ void DrawHelpScreenCreditsText() DrawTextFCentered(100, FC_GREEN, "Credits:"); DrawTextFCentered(ystart + 0 * ystep, FC_YELLOW, - "DOS/Windows port of the game:"); + "DOS port of the game:"); DrawTextFCentered(ystart + 1 * ystep, FC_RED, "Guido Schulz"); DrawTextFCentered(ystart + 2 * ystep, FC_YELLOW, @@ -716,13 +721,13 @@ void DrawHelpScreenContactText() DrawTextFCentered(ystart + 1 * ystep, FC_YELLOW, "If you like it, send e-mail to:"); DrawTextFCentered(ystart + 2 * ystep, FC_RED, - "aeglos@valinor.owl.de"); + "info@artsoft.org"); DrawTextFCentered(ystart + 3 * ystep, FC_YELLOW, "or SnailMail to:"); DrawTextFCentered(ystart + 4 * ystep + 0, FC_RED, "Holger Schemel"); DrawTextFCentered(ystart + 4 * ystep + 20, FC_RED, - "Oststrasse 11a"); + "Detmolder Strasse 189"); DrawTextFCentered(ystart + 4 * ystep + 40, FC_RED, "33604 Bielefeld"); DrawTextFCentered(ystart + 4 * ystep + 60, FC_RED, @@ -822,33 +827,34 @@ void HandleTypeName(int newxpos, Key key) return; } - if (((key >= KEY_A && key <= KEY_Z) || (key >= KEY_a && key <= KEY_z)) && + if (((key >= KSYM_A && key <= KSYM_Z) || + (key >= KSYM_a && key <= KSYM_z)) && xpos < MAX_PLAYER_NAME_LEN) { char ascii; - if (key >= KEY_A && key <= KEY_Z) - ascii = 'A' + (char)(key - KEY_A); + if (key >= KSYM_A && key <= KSYM_Z) + ascii = 'A' + (char)(key - KSYM_A); else - ascii = 'a' + (char)(key - KEY_a); + ascii = 'a' + (char)(key - KSYM_a); setup.player_name[xpos] = ascii; setup.player_name[xpos + 1] = 0; xpos++; - DrawTextExt(drawto, gc, SX + 6*32, SY + ypos*32, + DrawTextExt(drawto, SX + 6*32, SY + ypos*32, setup.player_name, FS_BIG, FC_YELLOW); - DrawTextExt(window, gc, SX + 6*32, SY + ypos*32, + DrawTextExt(window, SX + 6*32, SY + ypos*32, setup.player_name, FS_BIG, FC_YELLOW); DrawGraphic(xpos + 6, ypos, GFX_KUGEL_ROT); } - else if ((key == KEY_Delete || key == KEY_BackSpace) && xpos > 0) + else if ((key == KSYM_Delete || key == KSYM_BackSpace) && xpos > 0) { xpos--; setup.player_name[xpos] = 0; DrawGraphic(xpos + 6, ypos, GFX_KUGEL_ROT); DrawGraphic(xpos + 7, ypos, GFX_LEERRAUM); } - else if (key == KEY_Return && xpos > 0) + else if (key == KSYM_Return && xpos > 0) { DrawText(SX + 6*32, SY + ypos*32, setup.player_name, FS_BIG, FC_RED); DrawGraphic(xpos + 6, ypos, GFX_LEERRAUM); @@ -1036,7 +1042,7 @@ void HandleChooseLevel(int mx, int my, int dx, int dy, int button) else x = y = 0; /* no action */ - if (ABS(dy) == SCR_FIELDY) /* handle KEY_Page_Up, KEY_Page_Down */ + if (ABS(dy) == SCR_FIELDY) /* handle KSYM_Page_Up, KSYM_Page_Down */ { dy = SIGN(dy); step = num_page_entries - 1; @@ -1224,7 +1230,7 @@ void HandleHallOfFame(int mx, int my, int dx, int dy, int button) return; } - if (ABS(dy) == SCR_FIELDY) /* handle KEY_Page_Up, KEY_Page_Down */ + if (ABS(dy) == SCR_FIELDY) /* handle KSYM_Page_Up, KSYM_Page_Down */ step = MAX_LEVEL_SERIES_ON_SCREEN - 1; if (dy < 0) @@ -1283,7 +1289,10 @@ void DrawSetupScreen() #endif { &setup.scroll_delay, "Scroll Delay:" }, { &setup.soft_scrolling, "Soft Scroll.:" }, +#if 0 { &setup.fading, "Fading:" }, +#endif + { &setup.fullscreen, "Fullscreen:" }, { &setup.quick_doors, "Quick Doors:" }, { &setup.autorecord, "Auto-Record:" }, { &setup.team_mode, "Team-Mode:" }, @@ -1399,7 +1408,7 @@ void HandleSetupScreen(int mx, int my, int dx, int dy, int button) { int yy = y-1; - if (y==3 && sound_status==SOUND_AVAILABLE) + if (y == 3 && audio.sound_available) { if (setup.sound) { @@ -1413,7 +1422,7 @@ void HandleSetupScreen(int mx, int my, int dx, int dy, int button) DrawText(SX+14*32, SY+yy*32,"on ",FS_BIG,FC_YELLOW); setup.sound = !setup.sound; } - else if (y==4 && sound_loops_allowed) + else if (y == 4 && audio.loops_available) { if (setup.sound_loops) DrawText(SX+14*32, SY+yy*32,"off",FS_BIG,FC_BLUE); @@ -1425,7 +1434,7 @@ void HandleSetupScreen(int mx, int my, int dx, int dy, int button) } setup.sound_loops = !setup.sound_loops; } - else if (y==5 && sound_loops_allowed) + else if (y == 5 && audio.loops_available) { if (setup.sound_music) DrawText(SX+14*32, SY+yy*32,"off",FS_BIG,FC_BLUE); @@ -1439,7 +1448,7 @@ void HandleSetupScreen(int mx, int my, int dx, int dy, int button) } #if 0 - else if (y==6) + else if (y == 6) { if (setup.toons) DrawText(SX+14*32, SY+yy*32,"off",FS_BIG,FC_BLUE); @@ -1447,7 +1456,7 @@ void HandleSetupScreen(int mx, int my, int dx, int dy, int button) DrawText(SX+14*32, SY+yy*32,"on ",FS_BIG,FC_YELLOW); setup.toons = !setup.toons; } - else if (y==7) + else if (y == 7) { #if 0 if (setup.double_buffering) @@ -1464,7 +1473,7 @@ void HandleSetupScreen(int mx, int my, int dx, int dy, int button) } #endif - else if (y==6) + else if (y == 6) { if (setup.scroll_delay) DrawText(SX+14*32, SY+yy*32,"off",FS_BIG,FC_BLUE); @@ -1472,7 +1481,7 @@ void HandleSetupScreen(int mx, int my, int dx, int dy, int button) DrawText(SX+14*32, SY+yy*32,"on ",FS_BIG,FC_YELLOW); setup.scroll_delay = !setup.scroll_delay; } - else if (y==7) + else if (y == 7) { if (setup.soft_scrolling) DrawText(SX+14*32, SY+yy*32,"off",FS_BIG,FC_BLUE); @@ -1480,7 +1489,8 @@ void HandleSetupScreen(int mx, int my, int dx, int dy, int button) DrawText(SX+14*32, SY+yy*32,"on ",FS_BIG,FC_YELLOW); setup.soft_scrolling = !setup.soft_scrolling; } - else if (y==8) +#if 0 + else if (y == 8) { if (setup.fading) DrawText(SX+14*32, SY+yy*32,"off",FS_BIG,FC_BLUE); @@ -1488,7 +1498,16 @@ void HandleSetupScreen(int mx, int my, int dx, int dy, int button) DrawText(SX+14*32, SY+yy*32,"on ",FS_BIG,FC_YELLOW); setup.fading = !setup.fading; } - else if (y==9) +#endif + else if (y == 8 && video.fullscreen_available) + { + if (setup.fullscreen) + DrawText(SX+14*32, SY+yy*32,"off",FS_BIG,FC_BLUE); + else + DrawText(SX+14*32, SY+yy*32,"on ",FS_BIG,FC_YELLOW); + setup.fullscreen = !setup.fullscreen; + } + else if (y == 9) { if (setup.quick_doors) DrawText(SX+14*32, SY+yy*32,"off",FS_BIG,FC_BLUE); @@ -1496,7 +1515,7 @@ void HandleSetupScreen(int mx, int my, int dx, int dy, int button) DrawText(SX+14*32, SY+yy*32,"on ",FS_BIG,FC_YELLOW); setup.quick_doors = !setup.quick_doors; } - else if (y==10) + else if (y == 10) { if (setup.autorecord) DrawText(SX+14*32, SY+yy*32,"off",FS_BIG,FC_BLUE); @@ -1504,7 +1523,7 @@ void HandleSetupScreen(int mx, int my, int dx, int dy, int button) DrawText(SX+14*32, SY+yy*32,"on ",FS_BIG,FC_YELLOW); setup.autorecord = !setup.autorecord; } - else if (y==11) + else if (y == 11) { if (setup.team_mode) DrawText(SX+14*32, SY+yy*32,"off",FS_BIG,FC_BLUE); @@ -1512,7 +1531,7 @@ void HandleSetupScreen(int mx, int my, int dx, int dy, int button) DrawText(SX+14*32, SY+yy*32,"on ",FS_BIG,FC_YELLOW); setup.team_mode = !setup.team_mode; } - else if (y==12) + else if (y == 12) { if (setup.handicap) DrawText(SX+14*32, SY+yy*32,"off",FS_BIG,FC_BLUE); @@ -1520,7 +1539,7 @@ void HandleSetupScreen(int mx, int my, int dx, int dy, int button) DrawText(SX+14*32, SY+yy*32,"on ",FS_BIG,FC_YELLOW); setup.handicap = !setup.handicap; } - else if (y==13) + else if (y == 13) { if (setup.time_limit) DrawText(SX+14*32, SY+yy*32,"off",FS_BIG,FC_BLUE); @@ -1528,7 +1547,7 @@ void HandleSetupScreen(int mx, int my, int dx, int dy, int button) DrawText(SX+14*32, SY+yy*32,"on ",FS_BIG,FC_YELLOW); setup.time_limit = !setup.time_limit; } - else if (y==14) + else if (y == 14) { game_status = SETUPINPUT; DrawSetupInputScreen(); @@ -1544,7 +1563,7 @@ void HandleSetupScreen(int mx, int my, int dx, int dy, int button) SaveJoystickData(); */ -#ifdef MSDOS +#if defined(PLATFORM_MSDOS) save_joystick_data(JOYSTICK_FILENAME); #endif @@ -1898,14 +1917,18 @@ void CustomizeKeyboard(int player_nr) { Key key = GetEventKey((KeyEvent *)&event, TRUE); - if (key == KEY_Escape || (key == KEY_Return && step_nr == 6)) + if (key == KSYM_Escape || (key == KSYM_Return && step_nr == 6)) { finished = TRUE; break; } + /* all keys configured -- wait for "Escape" or "Return" key */ + if (step_nr == 6) + break; + /* press 'Enter' to keep the existing key binding */ - if (key == KEY_Return || step_nr == 6) + if (key == KSYM_Return) key = *customize_step[step_nr].key; /* check if key already used */ @@ -1985,7 +2008,7 @@ void CalibrateJoystick(int player_nr) } joy_ctrl; #endif -#ifndef MSDOS +#if !defined(PLATFORM_MSDOS) int new_joystick_xleft = 128, new_joystick_xright = 128; int new_joystick_yupper = 128, new_joystick_ylower = 128; int new_joystick_xmiddle, new_joystick_ymiddle; @@ -2007,7 +2030,7 @@ void CalibrateJoystick(int player_nr) ClearWindow(); -#ifndef MSDOS +#if !defined(PLATFORM_MSDOS) DrawText(SX, SY + 6*32, " ROTATE JOYSTICK ", FS_BIG, FC_YELLOW); DrawText(SX, SY + 7*32, "IN ALL DIRECTIONS", FS_BIG, FC_YELLOW); DrawText(SX + 16, SY + 9*32, " IF ALL BALLS ", FS_BIG, FC_YELLOW); @@ -2062,12 +2085,12 @@ void CalibrateJoystick(int player_nr) case EVENT_KEYPRESS: switch(GetEventKey((KeyEvent *)&event, TRUE)) { - case KEY_Return: + case KSYM_Return: if (check_remaining == 0) result = 1; break; - case KEY_Escape: + case KSYM_Escape: result = 0; break; @@ -2086,12 +2109,18 @@ void CalibrateJoystick(int player_nr) } } -#ifndef MSDOS +#if !defined(PLATFORM_MSDOS) + +#if defined(TARGET_SDL) + joy_ctrl.x = Get_SDL_Joystick_Axis(joystick_fd, 0); + joy_ctrl.y = Get_SDL_Joystick_Axis(joystick_fd, 1); +#else if (read(joystick_fd, &joy_ctrl, sizeof(joy_ctrl)) != sizeof(joy_ctrl)) { joystick_status = JOYSTICK_OFF; goto error_out; } +#endif new_joystick_xleft = MIN(new_joystick_xleft, joy_ctrl.x); new_joystick_xright = MAX(new_joystick_xright, joy_ctrl.x); @@ -2119,7 +2148,7 @@ void CalibrateJoystick(int player_nr) { result = 1; -#ifdef MSDOS +#if defined(PLATFORM_MSDOS) if (calibration_step == 1) { remove_joystick(); @@ -2160,7 +2189,7 @@ void CalibrateJoystick(int player_nr) if (x != last_x || y != last_y) { -#ifndef MSDOS +#if !defined(PLATFORM_MSDOS) DrawGraphic(xpos + last_x, ypos + last_y, GFX_KUGEL_GELB); #else DrawGraphic(xpos + last_x, ypos + last_y, GFX_KUGEL_BLAU); @@ -2199,7 +2228,20 @@ void CalibrateJoystick(int player_nr) StopAnimation(); DrawSetupInputScreen(); - while(Joystick(player_nr) & JOY_BUTTON); + + /* wait until the last pressed button was released */ + while(Joystick(player_nr) & JOY_BUTTON) + { + if (PendingEvent()) /* got event */ + { + Event event; + + NextEvent(&event); + HandleOtherEvents(&event); + + Delay(10); + } + } return; error_out: @@ -2294,7 +2336,7 @@ static struct static void CreateScreenScrollbuttons() { - Bitmap gd_bitmap = pix[PIX_MORE]; + Bitmap *gd_bitmap = pix[PIX_MORE]; struct GadgetInfo *gi; unsigned long event_mask; int i; @@ -2348,7 +2390,7 @@ static void CreateScreenScrollbars() for (i=0; i