+#include "game.h"
+
+
+// for DrawElementShifted
+#define NO_CUTTING 0
+#define CUT_ABOVE (1 << 0)
+#define CUT_BELOW (1 << 1)
+#define CUT_LEFT (1 << 2)
+#define CUT_RIGHT (1 << 3)
+
+// for masking functions
+#define NO_MASKING 0
+#define USE_MASKING 1
+
+// for MoveDoor
+#define DOOR_OPEN_1 (1 << 0)
+#define DOOR_OPEN_2 (1 << 1)
+#define DOOR_CLOSE_1 (1 << 2)
+#define DOOR_CLOSE_2 (1 << 3)
+#define DOOR_OPEN_ALL (DOOR_OPEN_1 | DOOR_OPEN_2)
+#define DOOR_CLOSE_ALL (DOOR_CLOSE_1 | DOOR_CLOSE_2)
+#define DOOR_ACTION_1 (DOOR_OPEN_1 | DOOR_CLOSE_1)
+#define DOOR_ACTION_2 (DOOR_OPEN_2 | DOOR_CLOSE_2)
+#define DOOR_ACTION (DOOR_ACTION_1 | DOOR_ACTION_2)
+#define DOOR_COPY_BACK (1 << 4)
+#define DOOR_NO_COPY_BACK (1 << 5)
+#define DOOR_NO_DELAY (1 << 6)
+#define DOOR_FORCE_ANIM (1 << 7)
+#define DOOR_FORCE_REDRAW (1 << 8)
+#define DOOR_GET_STATE (1 << 9)
+#define DOOR_SET_STATE (1 << 10)
+
+#define DOOR_1 (DOOR_ACTION_1)
+#define DOOR_2 (DOOR_ACTION_2)
+#define DOOR_OPEN (DOOR_OPEN_ALL)
+#define DOOR_CLOSE (DOOR_CLOSE_ALL)
+
+#define DOOR_INDEX_FROM_TOKEN(x) ((x) == DOOR_1 ? 0 : 1)
+#define DOOR_TOKEN_FROM_INDEX(x) ((x) == 0 ? DOOR_1 ? : DOOR_2)
+#define REDRAW_DOOR_FROM_TOKEN(x) ((x) == DOOR_1 ? REDRAW_DOOR_1 : \
+ REDRAW_DOOR_2)
+
+// for Request
+#define REQ_ASK (1 << 0)
+#define REQ_CONFIRM (1 << 1)
+#define REQ_PLAYER (1 << 2)
+#define REQ_STAY_OPEN (1 << 3)
+#define REQ_STAY_CLOSED (1 << 4)
+#define REQ_REOPEN (1 << 5)
+
+#define REQUEST_WAIT_FOR_INPUT (REQ_ASK | REQ_CONFIRM | REQ_PLAYER)
+
+
+int getFieldbufferOffsetX_RND(int, int);
+int getFieldbufferOffsetY_RND(int, int);
+
+int getLevelFromScreenX(int);
+int getLevelFromScreenY(int);
+
+int getScreenFieldSizeX(void);
+int getScreenFieldSizeY(void);
+
+void DumpTile(int, int);
+void DumpTileFromScreen(int, int);
+
+void DrawMaskedBorder_FIELD(void);
+void DrawMaskedBorder_DOOR_1(void);
+void DrawMaskedBorder_DOOR_2(void);
+void DrawMaskedBorder_DOOR_3(void);
+void DrawMaskedBorder_ALL(void);
+void DrawMaskedBorder(int);
+void DrawMaskedBorderToTarget(int);
+void DrawTileCursor(int);
+
+void SetDrawtoField(int);
+int GetDrawtoField(void);
+void RedrawPlayfield(void);
+void BlitScreenToBitmapExt_RND(Bitmap *, int, int);
+void BlitScreenToBitmap_RND(Bitmap *);
+void BlitScreenToBitmap(Bitmap *);
+void BackToFront(void);
+void BackToFront_WithFrameDelay(unsigned int);
+
+void FadeIn(int);
+void FadeOut(int);
+void FadeSetEnterMenu(void);
+void FadeSetLeaveMenu(void);
+void FadeSetEnterScreen(void);
+void FadeSetNextScreen(void);
+void FadeSetLeaveScreen(void);
+void FadeSetFromType(int);
+void FadeSetDisabled(void);
+void FadeSkipNextFadeIn(void);
+void FadeSkipNextFadeOut(void);
+
+Bitmap *getBitmapFromGraphicOrDefault(int, int);
+Bitmap *getGlobalBorderBitmapFromStatus(int);
+
+void ClearField(void);
+void SetWindowBackgroundImageIfDefined(int);
+void SetMainBackgroundImageIfDefined(int);
+void SetDoorBackgroundImageIfDefined(int);
+void SetWindowBackgroundImage(int);
+void SetMainBackgroundImage(int);
+void SetDoorBackgroundImage(int);
+void SetPanelBackground(void);
+void DrawBackground(int, int, int, int);
+void DrawBackgroundForFont(int, int, int, int, int);
+void DrawBackgroundForGraphic(int, int, int, int, int);
+boolean CheckIfGlobalBorderHasChanged(void);
+void RedrawGlobalBorder(void);
+
+void MarkTileDirty(int, int);
+void SetBorderElement(void);
+void FloodFillLevel(int, int, int, short[MAX_LEV_FIELDX][MAX_LEV_FIELDY], int, int);
+void FloodFillLevelExt(int, int, int, int x, int y, short field[x][y], int, int);
+
+void SetRandomAnimationValue(int, int);
+int getGraphicAnimationFrame(int, int);
+int getGraphicAnimationFrameXY(int, int, int);
+
+void DrawFixedGraphicAnimation(int, int, int);
+void DrawFixedGraphicAnimationExt(DrawBuffer *, int, int, int, int, int);
+
+void DrawLevelGraphicAnimation(int, int, int);
+void DrawLevelElementAnimation(int, int, int);
+void DrawLevelGraphicAnimationIfNeeded(int, int, int);
+void DrawLevelElementAnimationIfNeeded(int, int, int);
+
+void DrawAllPlayers(void);
+void DrawPlayerField(int, int);
+void DrawPlayer(struct PlayerInfo *);
+
+void getGraphicSourceBitmap(int, int, Bitmap **);
+void getGraphicSourceXY(int, int, int *, int *, boolean);
+void getSizedGraphicSourceExt(int, int, int, Bitmap **, int *, int *, boolean);
+void getSizedGraphicSource(int, int, int, Bitmap **, int *, int *);
+void getFixedGraphicSource(int, int, Bitmap **, int *, int *);
+void getMiniGraphicSource(int, Bitmap **, int *, int *);
+void getGlobalAnimGraphicSource(int, int, Bitmap **, int *, int *);
+void getGraphicSource(int, int, Bitmap **, int *, int *);
+
+void DrawGraphic(int, int, int, int);
+void DrawGraphicExt(DrawBuffer *, int, int, int, int);
+void DrawGraphicThruMask(int, int, int, int);
+void DrawGraphicThruMaskExt(DrawBuffer *, int, int, int, int);
+
+void DrawFixedGraphic(int, int, int, int);
+void DrawFixedGraphicExt(DrawBuffer *, int, int, int, int);
+void DrawFixedGraphicThruMask(int, int, int, int);
+void DrawFixedGraphicThruMaskExt(DrawBuffer *, int, int, int, int);
+
+void DrawSizedGraphic(int, int, int, int, int);
+void DrawSizedGraphicExt(DrawBuffer *, int, int, int, int, int);
+void DrawSizedGraphicThruMask(int, int, int, int, int);
+void DrawSizedGraphicThruMaskExt(DrawBuffer *, int, int, int, int, int);