X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Flibgame%2Fsystem.h;h=3fd6798d3ff8a24f9d1aa52ac2631ea2a9415da9;hb=c5d03f36989babf47697957101ecebe9b7b9cbe8;hp=32f4ee6a36b916f1b5b78a587ca8fa5ac2dfbb3f;hpb=3bf51f147946d7080ed973f7d1fca2971e5009d2;p=rocksndiamonds.git diff --git a/src/libgame/system.h b/src/libgame/system.h index 32f4ee6a..3fd6798d 100644 --- a/src/libgame/system.h +++ b/src/libgame/system.h @@ -95,6 +95,14 @@ #define NUM_DIRECTIONS 4 +/* diagonal movement directions are used in a different contect than buttons */ +#define MV_BIT_UPLEFT 4 +#define MV_BIT_UPRIGHT 5 +#define MV_BIT_DOWNLEFT 6 +#define MV_BIT_DOWNRIGHT 7 + +#define NUM_DIRECTIONS_FULL 8 + /* values for special "button" bitmasks */ #define BUTTON_1 4 #define BUTTON_2 5 @@ -106,6 +114,11 @@ #define MV_UP (1 << MV_BIT_UP) #define MV_DOWN (1 << MV_BIT_DOWN) +#define MV_UPLEFT (MV_UP | MV_LEFT) +#define MV_UPRIGHT (MV_UP | MV_RIGHT) +#define MV_DOWNLEFT (MV_DOWN | MV_LEFT) +#define MV_DOWNRIGHT (MV_DOWN | MV_RIGHT) + #define MV_HORIZONTAL (MV_LEFT | MV_RIGHT) #define MV_VERTICAL (MV_UP | MV_DOWN) #define MV_ALL_DIRECTIONS (MV_LEFT | MV_RIGHT | MV_UP | MV_DOWN) @@ -118,15 +131,32 @@ #define KEY_BUTTON (KEY_BUTTON_1 | KEY_BUTTON_2) #define KEY_ACTION (KEY_MOTION | KEY_BUTTON) -#define MV_DIR_BIT(x) ((x) == MV_LEFT ? MV_BIT_LEFT : \ - (x) == MV_RIGHT ? MV_BIT_RIGHT : \ - (x) == MV_UP ? MV_BIT_UP : MV_BIT_DOWN) - -#define MV_DIR_OPPOSITE(x) ((x) == MV_LEFT ? MV_RIGHT : \ - (x) == MV_RIGHT ? MV_LEFT : \ - (x) == MV_UP ? MV_DOWN : \ - (x) == MV_DOWN ? MV_UP : MV_NONE) - +#define MV_DIR_FROM_BIT(x) ((x) < NUM_DIRECTIONS ? 1 << (x) : \ + (x) == MV_BIT_UPLEFT ? MV_UPLEFT : \ + (x) == MV_BIT_UPRIGHT ? MV_UPRIGHT : \ + (x) == MV_BIT_DOWNLEFT ? MV_DOWNLEFT : \ + (x) == MV_BIT_DOWNRIGHT ? MV_DOWNRIGHT : \ + MV_NONE) + +#define MV_DIR_TO_BIT(x) ((x) == MV_LEFT ? MV_BIT_LEFT : \ + (x) == MV_RIGHT ? MV_BIT_RIGHT : \ + (x) == MV_UP ? MV_BIT_UP : \ + (x) == MV_DOWN ? MV_BIT_DOWN : \ + (x) == MV_UPLEFT ? MV_BIT_UPLEFT : \ + (x) == MV_UPRIGHT ? MV_BIT_UPRIGHT : \ + (x) == MV_DOWNLEFT ? MV_BIT_DOWNLEFT : \ + (x) == MV_DOWNRIGHT ? MV_BIT_DOWNRIGHT : \ + MV_BIT_DOWN) + +#define MV_DIR_OPPOSITE(x) ((x) == MV_LEFT ? MV_RIGHT : \ + (x) == MV_RIGHT ? MV_LEFT : \ + (x) == MV_UP ? MV_DOWN : \ + (x) == MV_DOWN ? MV_UP : \ + (x) == MV_UPLEFT ? MV_DOWNRIGHT : \ + (x) == MV_UPRIGHT ? MV_DOWNLEFT : \ + (x) == MV_DOWNLEFT ? MV_UPRIGHT : \ + (x) == MV_DOWNRIGHT ? MV_UPLEFT : \ + MV_NONE) /* values for animation mode (frame order and direction) */ #define ANIM_NONE 0 @@ -135,11 +165,14 @@ #define ANIM_PINGPONG (1 << 2) #define ANIM_PINGPONG2 (1 << 3) #define ANIM_RANDOM (1 << 4) -#define ANIM_REVERSE (1 << 5) +#define ANIM_CE_VALUE (1 << 5) +#define ANIM_CE_SCORE (1 << 6) +#define ANIM_REVERSE (1 << 7) /* values for special (non game element) animation modes */ -#define ANIM_HORIZONTAL (1 << 6) -#define ANIM_VERTICAL (1 << 7) +#define ANIM_HORIZONTAL (1 << 8) +#define ANIM_VERTICAL (1 << 9) +#define ANIM_STATIC_PANEL (1 << 10) #define ANIM_DEFAULT ANIM_LOOP @@ -909,6 +942,7 @@ inline void BlitBitmapMasked(Bitmap *, Bitmap *, int, int, int, int, int, int); inline boolean DrawingOnBackground(int, int); inline void BlitBitmapOnBackground(Bitmap *, Bitmap *, int, int, int, int, int, int); +inline void DrawSimpleBlackLine(Bitmap *, int, int, int, int); inline void DrawSimpleWhiteLine(Bitmap *, int, int, int, int); inline void DrawLines(Bitmap *, struct XY *, int, Pixel); inline Pixel GetPixel(Bitmap *, int, int);