#define IN_SCR_FIELD(x,y) ((x)>=0 && (x)<SCR_FIELDX && (y)>=0 &&(y)<SCR_FIELDY)
#define IN_LEV_FIELD(x,y) ((x)>=0 && (x)<lev_fieldx && (y)>=0 &&(y)<lev_fieldy)
#define IN_SCR_FIELD(x,y) ((x)>=0 && (x)<SCR_FIELDX && (y)>=0 &&(y)<SCR_FIELDY)
#define IN_LEV_FIELD(x,y) ((x)>=0 && (x)<lev_fieldx && (y)>=0 &&(y)<lev_fieldy)
#define IS_FREE(x,y) (Feld[x][y]==EL_LEERRAUM && !IS_PLAYER(x,y))
#define IS_FREE_OR_PLAYER(x,y) (Feld[x][y]==EL_LEERRAUM)
#define IS_MOVING(x,y) (MovPos[x][y]!=0)
#define IS_FREE(x,y) (Feld[x][y]==EL_LEERRAUM && !IS_PLAYER(x,y))
#define IS_FREE_OR_PLAYER(x,y) (Feld[x][y]==EL_LEERRAUM)
#define IS_MOVING(x,y) (MovPos[x][y]!=0)
-extern Drawable drawto, drawto_field, backbuffer;
+extern Drawable drawto, drawto_field, backbuffer, fieldbuffer;
extern int level_nr, leveldir_nr, num_leveldirs;
extern int lev_fieldx,lev_fieldy, scroll_x,scroll_y;
extern int level_nr, leveldir_nr, num_leveldirs;
extern int lev_fieldx,lev_fieldy, scroll_x,scroll_y;
-extern int JX,JY, ZX,ZY, ExitX,ExitY;
-extern int PlayerMovDir, PlayerFrame, PlayerPushing;
+extern int JX,JY, JX2,JY2, ZX,ZY, ExitX,ExitY;
+extern int PlayerMovDir, PlayerMovPos, PlayerFrame, PlayerPushing;
extern int PlayerGone,LevelSolved,GameOver;
extern int FrameCounter,TimeFrames,TimeLeft,Score;
extern int Gems,SokobanFields,Lights,Friends;
extern int PlayerGone,LevelSolved,GameOver;
extern int FrameCounter,TimeFrames,TimeLeft,Score;
extern int Gems,SokobanFields,Lights,Friends;
#define VERSION_STRING "1.1"
#define GAMETITLE_STRING "Rocks'n'Diamonds"
#define WINDOWTITLE_STRING GAMETITLE_STRING " " VERSION_STRING
#define VERSION_STRING "1.1"
#define GAMETITLE_STRING "Rocks'n'Diamonds"
#define WINDOWTITLE_STRING GAMETITLE_STRING " " VERSION_STRING