/***********************************************************
* Rocks'n'Diamonds -- McDuffin Strikes Back! *
*----------------------------------------------------------*
-* ©1995 Artsoft Development *
-* Holger Schemel *
-* 33659 Bielefeld-Senne *
-* Telefon: (0521) 493245 *
-* eMail: aeglos@valinor.owl.de *
-* aeglos@uni-paderborn.de *
-* q99492@pbhrzx.uni-paderborn.de *
+* (c) 1995-98 Artsoft Entertainment *
+* Holger Schemel *
+* Oststrasse 11a *
+* 33604 Bielefeld *
+* phone: ++49 +521 290471 *
+* email: aeglos@valinor.owl.de *
*----------------------------------------------------------*
* buttons.c *
***********************************************************/
0,0 }}
};
+ if (state & VIDEO_STATE_PBEND_OFF)
+ {
+ int cx = DOOR_GFX_PAGEX3, cy = DOOR_GFX_PAGEY2;
+
+ XCopyArea(display,pix[PIX_DOOR],drawto,gc,
+ cx + VIDEO_REC_LABEL_XPOS,
+ cy + VIDEO_REC_LABEL_YPOS,
+ VIDEO_PBEND_LABEL_XSIZE,
+ VIDEO_PBEND_LABEL_YSIZE,
+ VX + VIDEO_REC_LABEL_XPOS,
+ VY + VIDEO_REC_LABEL_YPOS);
+ }
+
for(i=0;i<20;i++)
{
if (state & (1<<i))
VY + VIDEO_PLAY_SYMBOL_YPOS);
}
+ if (state & VIDEO_STATE_PBEND_ON)
+ {
+ int cx = DOOR_GFX_PAGEX6, cy = DOOR_GFX_PAGEY1;
+
+ XCopyArea(display,pix[PIX_DOOR],drawto,gc,
+ cx + VIDEO_PBEND_LABEL_XPOS,
+ cy + VIDEO_PBEND_LABEL_YPOS,
+ VIDEO_PBEND_LABEL_XSIZE,
+ VIDEO_PBEND_LABEL_YSIZE,
+ VX + VIDEO_REC_LABEL_XPOS,
+ VY + VIDEO_REC_LABEL_YPOS);
+ }
+
if (state & VIDEO_STATE_DATE_ON)
{
int tag = value % 100;
redraw_mask |= REDRAW_DOOR_1;
}
-void DrawChooseButton(unsigned long state)
+void DrawYesNoButton(unsigned long state, int mode)
{
- int pos, cx = DOOR_GFX_PAGEX4, cy = 0;
+ Drawable dest_drawto;
+ int dest_xoffset, dest_yoffset;
+ int xpos, cx = DOOR_GFX_PAGEX4;
- pos = (state & BUTTON_OK ? OK_BUTTON_XPOS : NO_BUTTON_XPOS);
+ if (mode == DB_INIT)
+ {
+ dest_drawto = pix[PIX_DB_DOOR];
+ dest_xoffset = DOOR_GFX_PAGEX1;
+ dest_yoffset = 0;
+ }
+ else
+ {
+ dest_drawto = drawto;
+ dest_xoffset = DX;
+ dest_yoffset = DY;
+ }
+
+ xpos = (state & BUTTON_OK ? OK_BUTTON_XPOS : NO_BUTTON_XPOS);
if (state & BUTTON_PRESSED)
cx = DOOR_GFX_PAGEX3;
- XCopyArea(display,pix[PIX_DOOR],drawto,gc,
- cx + pos,cy + OK_BUTTON_GFX_YPOS,
- OK_BUTTON_XSIZE,OK_BUTTON_YSIZE,
- DX + pos,DY + OK_BUTTON_YPOS);
+ XCopyArea(display, pix[PIX_DOOR], dest_drawto, gc,
+ cx + xpos, OK_BUTTON_GFX_YPOS,
+ OK_BUTTON_XSIZE, OK_BUTTON_YSIZE,
+ dest_xoffset + xpos, dest_yoffset + OK_BUTTON_YPOS);
redraw_mask |= REDRAW_DOOR_1;
}
-void DrawConfirmButton(unsigned long state)
+void DrawConfirmButton(unsigned long state, int mode)
{
+ Drawable dest_drawto;
+ int dest_xoffset, dest_yoffset;
+ int cx = DOOR_GFX_PAGEX4;
+
+ if (mode == DB_INIT)
+ {
+ dest_drawto = pix[PIX_DB_DOOR];
+ dest_xoffset = DOOR_GFX_PAGEX1;
+ dest_yoffset = 0;
+ }
+ else
+ {
+ dest_drawto = drawto;
+ dest_xoffset = DX;
+ dest_yoffset = DY;
+ }
+
+ if (state & BUTTON_PRESSED)
+ cx = DOOR_GFX_PAGEX3;
+
+ XCopyArea(display, pix[PIX_DOOR], dest_drawto, gc,
+ cx + CONFIRM_BUTTON_XPOS, CONFIRM_BUTTON_GFX_YPOS,
+ CONFIRM_BUTTON_XSIZE, CONFIRM_BUTTON_YSIZE,
+ dest_xoffset + CONFIRM_BUTTON_XPOS,
+ dest_yoffset + CONFIRM_BUTTON_YPOS);
+
+ redraw_mask |= REDRAW_DOOR_1;
+}
+
+void DrawPlayerButton(unsigned long state, int mode)
+{
+ Drawable dest_drawto;
+ int dest_xoffset, dest_yoffset;
+ int graphic;
+ int graphic_offset = (PLAYER_BUTTON_XSIZE - TILEX/2)/2;
+ int xpos, ypos;
int cx = DOOR_GFX_PAGEX4, cy = 0;
+ if (mode == DB_INIT)
+ {
+ dest_drawto = pix[PIX_DB_DOOR];
+ dest_xoffset = DOOR_GFX_PAGEX1;
+ dest_yoffset = 0;
+ }
+ else
+ {
+ dest_drawto = drawto;
+ dest_xoffset = DX;
+ dest_yoffset = DY;
+ }
+
+ if (state & BUTTON_PLAYER_1)
+ graphic = GFX_SPIELER1;
+ else if (state & BUTTON_PLAYER_2)
+ graphic = GFX_SPIELER2;
+ else if (state & BUTTON_PLAYER_3)
+ graphic = GFX_SPIELER3;
+ else if (state & BUTTON_PLAYER_4)
+ graphic = GFX_SPIELER4;
+
+ xpos = (state & BUTTON_PLAYER_1 || state & BUTTON_PLAYER_3 ?
+ PLAYER_BUTTON_1_XPOS : PLAYER_BUTTON_2_XPOS);
+ ypos = (state & BUTTON_PLAYER_1 || state & BUTTON_PLAYER_2 ?
+ PLAYER_BUTTON_1_YPOS : PLAYER_BUTTON_3_YPOS);
+
if (state & BUTTON_PRESSED)
+ {
cx = DOOR_GFX_PAGEX3;
+ graphic_offset += 1;
+ }
- XCopyArea(display,pix[PIX_DOOR],drawto,gc,
- cx + CONFIRM_BUTTON_XPOS,cy + CONFIRM_BUTTON_GFX_YPOS,
- CONFIRM_BUTTON_XSIZE,CONFIRM_BUTTON_YSIZE,
- DX + CONFIRM_BUTTON_XPOS,DY + CONFIRM_BUTTON_YPOS);
+ XCopyArea(display, pix[PIX_DOOR], dest_drawto, gc,
+ cx + PLAYER_BUTTON_GFX_XPOS, cy + PLAYER_BUTTON_GFX_YPOS,
+ PLAYER_BUTTON_XSIZE, PLAYER_BUTTON_YSIZE,
+ dest_xoffset + xpos, dest_yoffset + ypos);
+ DrawMiniGraphicExt(dest_drawto,gc,
+ dest_xoffset + xpos + graphic_offset,
+ dest_yoffset + ypos + graphic_offset,
+ graphic);
redraw_mask |= REDRAW_DOOR_1;
}
{
int return_code = 0;
static int choice = -1;
- static BOOL pressed = FALSE;
+ static boolean pressed = FALSE;
static int video_button[5] =
{
VIDEO_PRESS_EJECT_ON,
{
int return_code = 0;
static int choice = -1;
- static BOOL pressed = FALSE;
+ static boolean pressed = FALSE;
int sound_state[3];
- sound_state[0] = BUTTON_SOUND_MUSIC | (BUTTON_ON * sound_music_on);
- sound_state[1] = BUTTON_SOUND_LOOPS | (BUTTON_ON * sound_loops_on);
- sound_state[2] = BUTTON_SOUND_SIMPLE | (BUTTON_ON * sound_simple_on);
+ sound_state[0] = BUTTON_SOUND_MUSIC | (BUTTON_ON * setup.sound_music);
+ sound_state[1] = BUTTON_SOUND_LOOPS | (BUTTON_ON * setup.sound_loops);
+ sound_state[2] = BUTTON_SOUND_SIMPLE | (BUTTON_ON * setup.sound_simple);
if (button)
{
{
int return_code = 0;
static int choice = -1;
- static BOOL pressed = FALSE;
+ static boolean pressed = FALSE;
int game_state[3] =
{
BUTTON_GAME_STOP,
return(return_code);
}
-int CheckChooseButtons(int mx, int my, int button)
+int CheckYesNoButtons(int mx, int my, int button)
{
int return_code = 0;
static int choice = -1;
- static BOOL pressed = FALSE;
- static int choose_button[5] =
+ static boolean pressed = FALSE;
+ static int yesno_button[5] =
{
BUTTON_OK,
BUTTON_NO
{
if (!motion_status) /* Maustaste neu gedrückt */
{
- if (ON_CHOOSE_BUTTON(mx,my))
+ if (ON_YESNO_BUTTON(mx,my))
{
- choice = CHOOSE_BUTTON(mx);
+ choice = YESNO_BUTTON(mx);
pressed = TRUE;
- DrawChooseButton(choose_button[choice] | BUTTON_PRESSED);
+ DrawYesNoButton(yesno_button[choice] | BUTTON_PRESSED, DB_NORMAL);
}
}
else /* Mausbewegung bei gedrückter Maustaste */
{
- if ((!ON_CHOOSE_BUTTON(mx,my) || CHOOSE_BUTTON(mx)!=choice) &&
+ if ((!ON_YESNO_BUTTON(mx,my) || YESNO_BUTTON(mx)!=choice) &&
choice>=0 && pressed)
{
pressed = FALSE;
- DrawChooseButton(choose_button[choice] | BUTTON_RELEASED);
+ DrawYesNoButton(yesno_button[choice] | BUTTON_RELEASED, DB_NORMAL);
}
- else if (ON_CHOOSE_BUTTON(mx,my) &&CHOOSE_BUTTON(mx)==choice && !pressed)
+ else if (ON_YESNO_BUTTON(mx,my) && YESNO_BUTTON(mx)==choice && !pressed)
{
pressed = TRUE;
- DrawChooseButton(choose_button[choice] | BUTTON_PRESSED);
+ DrawYesNoButton(yesno_button[choice] | BUTTON_PRESSED, DB_NORMAL);
}
}
}
else /* Maustaste wieder losgelassen */
{
- if (ON_CHOOSE_BUTTON(mx,my) && CHOOSE_BUTTON(mx)==choice && pressed)
+ if (ON_YESNO_BUTTON(mx,my) && YESNO_BUTTON(mx)==choice && pressed)
{
- DrawChooseButton(choose_button[choice] | BUTTON_RELEASED);
+ DrawYesNoButton(yesno_button[choice] | BUTTON_RELEASED, DB_NORMAL);
return_code = choice+1;
choice = -1;
pressed = FALSE;
{
int return_code = 0;
static int choice = -1;
- static BOOL pressed = FALSE;
+ static boolean pressed = FALSE;
if (button)
{
{
choice = 0;
pressed = TRUE;
- DrawConfirmButton(BUTTON_PRESSED);
+ DrawConfirmButton(BUTTON_PRESSED, DB_NORMAL);
}
}
else /* Mausbewegung bei gedrückter Maustaste */
if (!ON_CONFIRM_BUTTON(mx,my) && choice>=0 && pressed)
{
pressed = FALSE;
- DrawConfirmButton(BUTTON_RELEASED);
+ DrawConfirmButton(BUTTON_RELEASED, DB_NORMAL);
}
else if (ON_CONFIRM_BUTTON(mx,my) && !pressed)
{
pressed = TRUE;
- DrawConfirmButton(BUTTON_PRESSED);
+ DrawConfirmButton(BUTTON_PRESSED, DB_NORMAL);
}
}
}
{
if (ON_CONFIRM_BUTTON(mx,my) && pressed)
{
- DrawConfirmButton(BUTTON_RELEASED);
+ DrawConfirmButton(BUTTON_RELEASED, DB_NORMAL);
return_code = BUTTON_CONFIRM;
choice = -1;
pressed = FALSE;
return(return_code);
}
+int CheckPlayerButtons(int mx, int my, int button)
+{
+ int return_code = 0;
+ static int choice = -1;
+ static boolean pressed = FALSE;
+ int player_state[4] =
+ {
+ BUTTON_PLAYER_1,
+ BUTTON_PLAYER_2,
+ BUTTON_PLAYER_3,
+ BUTTON_PLAYER_4
+ };
+
+ if (button)
+ {
+ if (!motion_status) /* Maustaste neu gedrückt */
+ {
+ if (ON_PLAYER_BUTTON(mx,my))
+ {
+ choice = PLAYER_BUTTON(mx,my);
+ pressed = TRUE;
+ DrawPlayerButton(player_state[choice] | BUTTON_PRESSED, DB_NORMAL);
+ }
+ }
+ else /* Mausbewegung bei gedrückter Maustaste */
+ {
+ if ((!ON_PLAYER_BUTTON(mx,my) || PLAYER_BUTTON(mx,my)!=choice) &&
+ choice>=0 && pressed)
+ {
+ pressed = FALSE;
+ DrawPlayerButton(player_state[choice] | BUTTON_RELEASED, DB_NORMAL);
+ }
+ else if (ON_PLAYER_BUTTON(mx,my) && PLAYER_BUTTON(mx,my)==choice && !pressed)
+ {
+ pressed = TRUE;
+ DrawPlayerButton(player_state[choice] | BUTTON_PRESSED, DB_NORMAL);
+ }
+ }
+ }
+ else /* Maustaste wieder losgelassen */
+ {
+ if (ON_PLAYER_BUTTON(mx,my) && PLAYER_BUTTON(mx,my)==choice && pressed)
+ {
+ DrawPlayerButton(player_state[choice] | BUTTON_RELEASED, DB_NORMAL);
+ return_code = player_state[choice];
+ choice = -1;
+ pressed = FALSE;
+ }
+ else
+ {
+ choice = -1;
+ pressed = FALSE;
+ }
+ }
+
+ BackToFront();
+ return(return_code);
+}
+
/* several buttons in the level editor */
int CheckEditButtons(int mx, int my, int button)
{
int return_code = 0;
static int choice = -1;
- static BOOL pressed = FALSE;
+ static boolean pressed = FALSE;
static int edit_button[6] =
{
ED_BUTTON_CTRL,
{
int return_code = 0;
static int choice = -1;
- static BOOL pressed = FALSE;
+ static boolean pressed = FALSE;
static int ctrl_button[4] =
{
ED_BUTTON_EDIT,
{
int return_code = -1;
static int choice = -1;
- static BOOL pressed = FALSE;
+ static boolean pressed = FALSE;
if (button)
{
{
int return_code = -1;
static int choice = -1;
- static BOOL pressed = FALSE;
+ static boolean pressed = FALSE;
if (button)
{