#include <math.h>
+#ifdef MSDOS
+extern BOOL wait_for_vsync;
+#endif
+
void SetDrawtoField(int mode)
{
if (mode == DRAW_BUFFERED && soft_scrolling_on)
if (redraw_mask & REDRAW_TILES && redraw_tiles > REDRAWTILES_THRESHOLD)
redraw_mask |= REDRAW_FIELD;
- if (redraw_mask & REDRAW_FIELD)
+ if (redraw_mask & REDRAW_FIELD || ScreenMovPos)
redraw_mask &= ~REDRAW_TILES;
if (!redraw_mask)
if (redraw_mask & REDRAW_FIELD)
{
+#ifdef MSDOS
+ wait_for_vsync = TRUE;
+#endif
if (game_status != PLAYING || redraw_mask & REDRAW_FROM_BACKBUFFER)
XCopyArea(display,backbuffer,window,gc,
REAL_SX,REAL_SY, FULL_SXSIZE,FULL_SYSIZE,
XCopyArea(display,buffer,window,gc,
fx,fy, SXSIZE,SYSIZE,
SX,SY);
-
-
-
- printf("Full screen redraw (%d) (%ld)\n",
- ScreenMovPos,
- Counter());
-
-
-
}
redraw_mask &= ~REDRAW_MAIN;
}
if (redraw_mask & REDRAW_DOORS)
{
+#ifdef MSDOS
+ wait_for_vsync = TRUE;
+#endif
if (redraw_mask & REDRAW_DOOR_1)
XCopyArea(display,backbuffer,window,gc,
DX,DY, DXSIZE,DYSIZE,
graphic += PlayerFrame;
- if (PlayerMovPos)
+ if (PlayerGfxPos)
{
if (PlayerMovDir == MV_LEFT || PlayerMovDir == MV_RIGHT)
- sxx = PlayerMovPos;
+ sxx = PlayerGfxPos;
else
- syy = PlayerMovPos;
+ syy = PlayerGfxPos;
}
+
+
+
if (draw_thru_mask)
DrawGraphicShiftedThruMask(sx,sy,sxx,syy,graphic,CUT_NO_CUTTING);
/*
- if (PlayerPushing && PlayerMovPos)
+ if (PlayerPushing && PlayerGfxPos)
{
int nextJX = JX + (JX - lastJX);
int nextJY = JY + (JY - lastJY);
if (element == EL_FELSBROCKEN && sxx)
{
- int phase = PlayerMovPos / (TILEX/4);
+ int phase = (PlayerGfxPos / (TILEX/4));
if (PlayerMovDir == MV_LEFT)
graphic += phase;
else
- graphic += phase+4;
+ graphic += (phase+4)%4;
+
+
+ /*
+ printf("----> (%d, %d, %d)\n",
+ PlayerGfxPos, phase, graphic);
+ */
+
}
DrawGraphicShifted(px,py, sxx,syy, graphic, CUT_NO_CUTTING);
if (element == EL_DYNAMIT)
{
- if ((phase = (48-MovDelay[x][y])/6) > 6)
+ if ((phase = (96-MovDelay[x][y])/12) > 6)
phase = 6;
}
else
{
- if ((phase = ((48-MovDelay[x][y])/3) % 8) > 3)
+ if ((phase = ((96-MovDelay[x][y])/6) % 8) > 3)
phase = 7-phase;
}
else
phase = (FrameCounter % (delay * frames)) / delay;
+ if (mode == ANIM_REVERSE)
+ phase = -phase;
+
return(phase);
}
{
int phase = getGraphicAnimationPhase(frames, delay, mode);
-/*
- int phase;
-
- if (mode == ANIM_OSCILLATE)
- {
- int max_anim_frames = frames*2 - 2;
- phase = (FrameCounter % (delay * max_anim_frames)) / delay;
- phase = (phase < frames ? phase : max_anim_frames - phase);
- }
- else
- phase = (FrameCounter % (delay * frames)) / delay;
-*/
-
if (!(FrameCounter % delay) && IN_SCR_FIELD(SCROLLX(x),SCROLLY(y)))
DrawGraphic(SCROLLX(x),SCROLLY(y), graphic + phase);
}
break;
}
break;
+ case KeyRelease:
+ key_joystick_mapping = 0;
+ break;
case FocusIn:
case FocusOut:
HandleFocusEvent((XFocusChangeEvent *) &event);
break;
+ case ClientMessage:
+ HandleClientMessageEvent((XClientMessageEvent *) &event);
+ break;
default:
break;
}
static unsigned int door2 = DOOR_CLOSE_2;
int x, start, stepsize = 4, door_anim_delay = stepsize*5000;
+#ifdef MSDOS
+ stepsize = 2;
+#endif
+
if (door_state == DOOR_GET_STATE)
return(door1 | door2);
}
BackToFront();
+#ifndef MSDOS
Delay(door_anim_delay);
+#endif
if (game_status==MAINMENU)
DoAnimation();