case EL_SPIELFIGUR:
case EL_SPIELER1:
Feld[x][y] = EL_LEERRAUM;
- JX = x;
- JY = y;
+ JX = lastJX = x;
+ JY = lastJY = y;
break;
case EL_SPIELER2:
Feld[x][y] = EL_LEERRAUM;
}
}
}
-
- /*
- if (PlayerMovPos)
- ScrollFigure(0);
-
- DrawPlayerField();
- */
-
}
if (TimeLeft>0 && TimeFrames>=25 && !tape.pausing)
KillHero();
}
- /*
- if (PlayerMovPos)
- ScrollFigure(0);
- */
-
-
- /*
DrawPlayerField();
- */
-
-
- DrawPlayerField();
-
BackToFront();
}
void ScrollLevel(int dx, int dy)
{
+ int softscroll_offset = (soft_scrolling_on ? TILEX : 0);
int x,y;
- int softscroll_offset = (FX == TILEX ? TILEX : 0);
-
- /*
- if (soft_scrolling_on)
- {
- ScreenMovPos = PlayerMovPos;
- redraw_mask |= REDRAW_FIELD;
- }
- */
-
ScreenMovPos = PlayerMovPos;
- if (soft_scrolling_on)
- {
- redraw_mask |= REDRAW_FIELD;
- }
-
XCopyArea(display,drawto_field,drawto_field,gc,
FX + TILEX*(dx==-1) - softscroll_offset,
int element;
int can_move;
-/*
- int old_move_dir = PlayerMovDir;
-*/
-
if (PlayerGone || (!dx && !dy))
return(MF_NO_ACTION);
dx > 0 ? MV_RIGHT :
dy < 0 ? MV_UP :
dy > 0 ? MV_DOWN : MV_NO_MOVING);
-/*
- if (old_move_dir != PlayerMovDir)
- PlayerFrame = 0;
- else
- PlayerFrame = (PlayerFrame + 1) % 4;
-*/
if (!IN_LEV_FIELD(newJX,newJY))
return(MF_NO_ACTION);
if (PlayerGone || (!dx && !dy))
return(FALSE);
-/*
- if (!DelayReached(&move_delay,8) && !tape.playing)
- return(FALSE);
-*/
-
-/*
- if (!DelayReached(&move_delay,10) && !tape.playing)
- return(FALSE);
-*/
-
-/*
- if (!FrameReached(&move_delay,2) && !tape.playing)
- return(FALSE);
-*/
-
if (Movemethod == 0)
{
if (!DelayReached(&move_delay,Movespeed[0]) && !tape.playing)
return(FALSE);
}
-
if (last_move_dir & (MV_LEFT | MV_RIGHT))
{
if (!(moved |= MoveFigureOneStep(0,dy, dx,dy)))
last_move_dir = MV_NO_MOVING;
-
- /*
- if (moved |= MoveFigureOneStep(dx,0, dx,dy))
- moved |= MoveFigureOneStep(0,dy, dx,dy);
- else
- {
- moved |= MoveFigureOneStep(0,dy, dx,dy);
- moved |= MoveFigureOneStep(dx,0, dx,dy);
- }
- */
-
if (moved & MF_MOVING)
{
int old_scroll_x=scroll_x, old_scroll_y=scroll_y;
TestIfHeroHitsBadThing();
- /*
- BackToFront();
- */
-
if (PlayerGone)
RemoveHero();
if (init)
{
- /*
- if (PlayerMovPos && oldJX != -1 && oldJY != -1)
- {
- if (Feld[lastJX][lastJY] == EL_LEERRAUM)
- Feld[lastJX][lastJY] = EL_PLAYER_IS_LEAVING;
- DrawLevelElement(oldJX,oldJY, Feld[oldJX][oldJY]);
- DrawPlayerField();
- }
- */
-
if (oldJX != -1 && oldJY != -1)
- {
- /*
- if (Feld[lastJX][lastJY] == EL_LEERRAUM)
- Feld[lastJX][lastJY] = EL_PLAYER_IS_LEAVING;
- */
DrawLevelElement(oldJX,oldJY, Feld[oldJX][oldJY]);
- /*
- DrawLevelElement(lastJX,lastJY, Feld[lastJX][lastJY]);
- DrawPlayerField();
- */
- }
if (Feld[lastJX][lastJY] == EL_LEERRAUM)
Feld[lastJX][lastJY] = EL_PLAYER_IS_LEAVING;
oldJY = lastJY;
actual_frame_counter = FrameCounter;
- /*
- redraw[redraw_x1 + oldJX][redraw_y1 + oldJY] = 1;
- redraw_tiles++;
- */
-
- /*
- DrawLevelElement(oldJX,oldJY, Feld[oldJX][oldJY]);
- */
-
-
if (PlayerPushing)
{
int nextJX = JX + (JX - lastJX);
DrawLevelElement(nextJX,nextJY, EL_SOKOBAN_FELD_LEER);
else
DrawLevelElement(nextJX,nextJY, EL_LEERRAUM);
- }
-
+ }
DrawPlayerField();
if (direct_draw_on && game_status == PLAYING)
redraw_mask &= ~REDRAW_MAIN;
-
-
- /*
- if (ScreenMovPos && redraw_mask & REDRAW_FIELD)
- {
- redraw_mask |= REDRAW_FIELD;
-
- printf("FULL SCREEN REDRAW FORCED by ScreenMovPos == %d\n", ScreenMovPos);
- }
- */
-
-
-
- /*
- if (ScreenMovPos && redraw_mask & REDRAW_TILES)
- {
- redraw_mask |= REDRAW_FIELD;
-
- printf("FULL SCREEN REDRAW FORCED by ScreenMovPos == %d\n", ScreenMovPos);
- }
- */
-
-
- /*
- if (ScreenMovPos && !(redraw_mask & REDRAW_FIELD))
- {
- printf("OOPS!\n");
-
- *((int *)NULL) = 0;
- }
- */
-
- /*
- if (IN_SCR_FIELD(lastJX,lastJY))
- redraw[redraw_x1 + lastJX][redraw_y1 + lastJY] = 0;
- */
-
-
if (redraw_mask & REDRAW_TILES && redraw_tiles > REDRAWTILES_THRESHOLD)
redraw_mask |= REDRAW_FIELD;
if (redraw_mask & REDRAW_FIELD)
redraw_mask &= ~REDRAW_TILES;
- /*
- {
- static int lastFrame = 0;
-
- printf("FrameCounter: %d\n", FrameCounter);
-
- if (FrameCounter != lastFrame + 1)
- {
- printf("SYNC LOST! <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<\n");
-
- if (FrameCounter > 100)
- *((int *)NULL) = 0;
- }
-
- lastFrame = FrameCounter;
- }
- */
-
if (!redraw_mask)
return;
if (redraw_mask & REDRAW_FIELD)
{
- int fx = FX, fy = FY;
-
- if (soft_scrolling_on)
+ if (game_status != PLAYING || redraw_mask & REDRAW_FROM_BACKBUFFER)
+ XCopyArea(display,backbuffer,window,gc,
+ REAL_SX,REAL_SY, FULL_SXSIZE,FULL_SYSIZE,
+ REAL_SX,REAL_SY);
+ else
{
- fx += (PlayerMovDir & (MV_LEFT|MV_RIGHT) ? ScreenMovPos : 0);
- fy += (PlayerMovDir & (MV_UP|MV_DOWN) ? ScreenMovPos : 0);
- }
+ int fx = FX, fy = FY;
+
+ if (soft_scrolling_on)
+ {
+ fx += (PlayerMovDir & (MV_LEFT|MV_RIGHT) ? ScreenMovPos : 0);
+ fy += (PlayerMovDir & (MV_UP|MV_DOWN) ? ScreenMovPos : 0);
+ }
- if (game_status == PLAYING && !(redraw_mask & REDRAW_FROM_BACKBUFFER))
- {
XCopyArea(display,buffer,window,gc,
fx,fy, SXSIZE,SYSIZE,
SX,SY);
-
- /*
- printf("FULL SCREEN REDRAW / ScreenMovPos == %d\n", ScreenMovPos);
- */
-
}
- else
- XCopyArea(display,backbuffer,window,gc,
- REAL_SX,REAL_SY, FULL_SXSIZE,FULL_SYSIZE,
- REAL_SX,REAL_SY);
redraw_mask &= ~REDRAW_MAIN;
}
void FadeToFront()
{
-
/*
long fading_delay = 300000;
if (PlayerGone)
return;
- /*
- printf("INFO: DrawPlayerField(): x = %d, y = %d\n",x,y);
- */
-
-
#if DEBUG
if (!IN_LEV_FIELD(x,y) || !IN_SCR_FIELD(sx,sy))
{
syy = PlayerMovPos;
}
-#if 0
- if (!soft_scrolling_on)
- {
- int old_scroll_x=scroll_x, old_scroll_y=scroll_y;
- int new_scroll_x=scroll_x, new_scroll_y=scroll_y;
- int offset = (scroll_delay_on ? 3 : 0);
-
- if ((scroll_x < lastJX-MIDPOSX-offset || scroll_x > lastJX-MIDPOSX+offset) &&
- lastJX>=MIDPOSX-1-offset && lastJX<=lev_fieldx-(MIDPOSX-offset))
- new_scroll_x = lastJX-MIDPOSX + (scroll_x < lastJX-MIDPOSX ? -offset : offset);
- if ((scroll_y < lastJY-MIDPOSY-offset || scroll_y > lastJY-MIDPOSY+offset) &&
- JY>=MIDPOSY-1-offset && JY<=lev_fieldy-(MIDPOSY-offset))
- new_scroll_y = lastJY-MIDPOSY + (scroll_y < lastJY-MIDPOSY ? -offset : offset);
-
- if (new_scroll_x!=old_scroll_x || new_scroll_y!=old_scroll_y)
- /*
- ScrollLevel(old_scroll_x-scroll_x,old_scroll_y-scroll_y);
- */
- sxx = syy = 0;
- }
-#endif
-
if (!soft_scrolling_on && ScreenMovPos)
sxx = syy = 0;
+
if (draw_thru_mask)
DrawGraphicShiftedThruMask(sx,sy,sxx,syy,graphic,CUT_NO_CUTTING);
/*
GFX_SOKOBAN_OBJEKT,
CUT_NO_CUTTING);
else
- DrawGraphicShifted(px,py,sxx,syy,
- el2gfx(Feld[nextJX][nextJY]),
- CUT_NO_CUTTING);
+ {
+ int element = Feld[nextJX][nextJY];
+ int graphic = el2gfx(element);
+
+ if (element == EL_FELSBROCKEN && sxx)
+ {
+ int phase = PlayerMovPos / (TILEX/4);
+
+ if (PlayerMovDir == MV_LEFT)
+ graphic += phase;
+ else
+ graphic += phase+4;
+ }
+
+ DrawGraphicShifted(px,py, sxx,syy, graphic, CUT_NO_CUTTING);
+ }
}
{
int dest_x = SX+SCROLLX(x)*TILEX;
int dest_y = SY+SCROLLY(y)*TILEY;
+ int x_size = TILEX;
+ int y_size = TILEY;
+
+ if (!ScreenMovPos)
+ {
+ dest_x = SX + SCROLLX(MIN(JX,lastJX))*TILEX;
+ dest_y = SY + SCROLLY(MIN(JY,lastJY))*TILEY;
+ x_size = TILEX * (1 + ABS(JX - lastJX));
+ y_size = TILEY * (1 + ABS(JY - lastJY));
+ }
XCopyArea(display,drawto_field,window,gc,
- dest_x,dest_y, TILEX,TILEY, dest_x,dest_y);
+ dest_x,dest_y, x_size,y_size, dest_x,dest_y);
SetDrawtoField(DRAW_DIRECT);
}
}