/***********************************************************
-* 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-2001 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"
DrawTextFCentered(46, FC_RED, WINDOW_SUBTITLE_STRING);
}
+static void ToggleFullscreenIfNeeded()
+{
+ if (setup.fullscreen != video.fullscreen_enabled)
+ {
+ /* save old door content */
+ BlitBitmap(backbuffer, pix[PIX_DB_DOOR],
+ DX, DY, DXSIZE, DYSIZE, DOOR_GFX_PAGEX1, DOOR_GFX_PAGEY1);
+
+ /* toggle fullscreen */
+ ChangeVideoModeIfNeeded(setup.fullscreen);
+ setup.fullscreen = video.fullscreen_enabled;
+
+ /* redraw background to newly created backbuffer */
+ BlitBitmap(pix[PIX_BACK], backbuffer, 0,0, WIN_XSIZE,WIN_YSIZE, 0,0);
+
+ /* restore old door content */
+ BlitBitmap(pix[PIX_DB_DOOR], backbuffer,
+ DOOR_GFX_PAGEX1, DOOR_GFX_PAGEY1, DXSIZE, DYSIZE, DX, DY);
+
+ redraw_mask = REDRAW_ALL;
+ }
+}
+
void DrawMainMenu()
{
static struct LevelDirInfo *leveldir_last_valid = NULL;
UndrawSpecialEditorDoor();
/* needed if last screen was the setup screen and fullscreen state changed */
- ChangeVideoModeIfNeeded();
-#ifdef USE_SDL_LIBRARY
+ ToggleFullscreenIfNeeded();
+
+#ifdef TARGET_SDL
SetDrawtoField(DRAW_BACKBUFFER);
#endif
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);
if (setup.autorecord)
TapeStartRecording();
-#if !defined(MSDOS) && !defined(WIN32)
+#if defined(PLATFORM_UNIX)
if (options.network)
SendToServer_StartPlaying();
else
{ "Voyager", "The Alan Parsons Project","Pyramid" },
{ "Twilight Painter", "Tangerine Dream", "Heartbreakers" }
};
+static int num_helpscreen_music = 7;
static int helpscreen_musicpos;
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++;
}
DrawTextFCentered(ybottom, FC_BLUE, "Press any key or button for next page");
+#if 0
PlaySoundLoop(background_loop[num]);
+#endif
}
void DrawHelpScreenCreditsText()
DrawHelpScreenElText(helpscreen_state*MAX_HELPSCREEN_ELS);
DrawHelpScreenElAction(helpscreen_state*MAX_HELPSCREEN_ELS);
}
- else if (helpscreen_state < num_helpscreen_els_pages + num_bg_loops - 1)
+ else if (helpscreen_state <
+ num_helpscreen_els_pages + num_helpscreen_music - 1)
{
helpscreen_state++;
DrawHelpScreenMusicText(helpscreen_state - num_helpscreen_els_pages);
}
- else if (helpscreen_state == num_helpscreen_els_pages + num_bg_loops - 1)
+ else if (helpscreen_state ==
+ num_helpscreen_els_pages + num_helpscreen_music - 1)
{
helpscreen_state++;
DrawHelpScreenCreditsText();
}
- else if (helpscreen_state == num_helpscreen_els_pages + num_bg_loops)
+ else if (helpscreen_state ==
+ num_helpscreen_els_pages + num_helpscreen_music)
{
helpscreen_state++;
DrawHelpScreenContactText();
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);
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;
node_cursor->cl_first = leveldir_current->cl_first;
node_cursor->cl_cursor = leveldir_current->cl_cursor;
leveldir_current = node_cursor->node_group;
+
DrawChooseLevel();
}
else if (node_cursor->parent_link)
{
leveldir_current = node_cursor->node_parent;
+
DrawChooseLevel();
}
else
{
+ node_cursor->cl_first = leveldir_current->cl_first;
+ node_cursor->cl_cursor = leveldir_current->cl_cursor;
leveldir_current = node_cursor;
LoadLevelSetup_SeriesInfo();
void DrawHallOfFame(int highlight_position)
{
UnmapAllGadgets();
+ FadeSounds();
CloseDoor(DOOR_CLOSE_2);
if (highlight_position < 0)
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)
{
int yy = y-1;
- if (y==3 && sound_status==SOUND_AVAILABLE)
+ if (y == 3 && audio.sound_available)
{
if (setup.sound)
{
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);
}
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);
}
#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);
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)
}
#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);
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);
setup.soft_scrolling = !setup.soft_scrolling;
}
#if 0
- else if (y==8)
+ else if (y == 8)
{
if (setup.fading)
DrawText(SX+14*32, SY+yy*32,"off",FS_BIG,FC_BLUE);
setup.fading = !setup.fading;
}
#endif
- else if (y==8 && fullscreen_available)
+ else if (y == 8 && video.fullscreen_available)
{
if (setup.fullscreen)
DrawText(SX+14*32, SY+yy*32,"off",FS_BIG,FC_BLUE);
DrawText(SX+14*32, SY+yy*32,"on ",FS_BIG,FC_YELLOW);
setup.fullscreen = !setup.fullscreen;
}
- else if (y==9)
+ else if (y == 9)
{
if (setup.quick_doors)
DrawText(SX+14*32, SY+yy*32,"off",FS_BIG,FC_BLUE);
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);
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);
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);
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);
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();
SaveJoystickData();
*/
-#ifdef MSDOS
+#if defined(PLATFORM_MSDOS)
save_joystick_data(JOYSTICK_FILENAME);
#endif
{
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;
break;
/* press 'Enter' to keep the existing key binding */
- if (key == KEY_Return)
+ if (key == KSYM_Return)
key = *customize_step[step_nr].key;
/* check if key already used */
} 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;
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);
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;
}
}
-#ifndef MSDOS
+#if !defined(PLATFORM_MSDOS)
-#ifdef USE_SDL_JOYSTICK
+#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
{
result = 1;
-#ifdef MSDOS
+#if defined(PLATFORM_MSDOS)
if (calibration_step == 1)
{
remove_joystick();
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);
static void CreateScreenScrollbuttons()
{
- Bitmap gd_bitmap = pix[PIX_MORE];
+ Bitmap *gd_bitmap = pix[PIX_MORE];
struct GadgetInfo *gi;
unsigned long event_mask;
int i;
for (i=0; i<NUM_SCREEN_SCROLLBARS; i++)
{
int id = scrollbar_info[i].gadget_id;
- Bitmap gd_bitmap = pix[PIX_MORE];
+ Bitmap *gd_bitmap = pix[PIX_MORE];
int gd_x1, gd_x2, gd_y1, gd_y2;
struct GadgetInfo *gi;
int items_max, items_visible, item_position;