1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257
|
#ifndef _BLOCKS_H_
#define _BLOCKS_H_
/*
* XBoing - An X11 blockout style computer game
*
* (c) Copyright 1993, 1994, 1995, Justin C. Kibell, All Rights Reserved
*
* The X Consortium, and any party obtaining a copy of these files from
* the X Consortium, directly or indirectly, is granted, free of charge, a
* full and unrestricted irrevocable, world-wide, paid up, royalty-free,
* nonexclusive right and license to deal in this software and
* documentation files (the "Software"), including without limitation the
* rights to use, copy, modify, merge, publish, distribute, sublicense,
* and/or sell copies of the Software, and to permit persons who receive
* copies from any such party to do so. This license includes without
* limitation a license to do the foregoing actions under any patents of
* the party supplying this software to the X Consortium.
*
* In no event shall the author be liable to any party for direct, indirect,
* special, incidental, or consequential damages arising out of the use of
* this software and its documentation, even if the author has been advised
* of the possibility of such damage.
*
* The author specifically disclaims any warranties, including, but not limited
* to, the implied warranties of merchantability and fitness for a particular
* purpose. The software provided hereunder is on an "AS IS" basis, and the
* author has no obligation to provide maintenance, support, updates,
* enhancements, or modifications.
*/
/*
* =========================================================================
*
* $Id: blocks.h,v 1.1.1.1 1994/12/16 01:36:50 jck Exp $
* $Source: /usr5/legends/jck/xb/master/xboing/include/blocks.h,v $
* $Revision: 1.1.1.1 $
* $Date: 1994/12/16 01:36:50 $
*
* $Log: blocks.h,v $
* Revision 1.1.1.1 1994/12/16 01:36:50 jck
* The XBoing distribution requires configuration management. This is why the
* cvs utility is being used. This is the initial import of all source etc..
*
*
* =========================================================================
*/
/*
* Dependencies on other include files:
*/
#include <X11/Xlib.h>
/*
* Constants and macros:
*/
/*
* ALWAYS change the SetupBlockInfo() function as well if you change defines.
*/
#define NONE_BLK -2
#define KILL_BLK -1
#define RED_BLK 0
#define BLUE_BLK 1
#define GREEN_BLK 2
#define TAN_BLK 3
#define YELLOW_BLK 4
#define PURPLE_BLK 5
#define BULLET_BLK 6
#define BLACK_BLK 7
#define COUNTER_BLK 8
#define BOMB_BLK 9
#define DEATH_BLK 10
#define REVERSE_BLK 11
#define HYPERSPACE_BLK 12
#define EXTRABALL_BLK 13
#define MGUN_BLK 14
#define WALLOFF_BLK 15
#define MULTIBALL_BLK 16
#define STICKY_BLK 17
#define PAD_SHRINK_BLK 18
#define PAD_EXPAND_BLK 19
#define DROP_BLK 20
#define MAXAMMO_BLK 21
#define ROAMER_BLK 22
#define TIMER_BLK 23
#define RANDOM_BLK 24
#define DYNAMITE_BLK 25
#define BONUSX2_BLK 26
#define BONUSX4_BLK 27
#define BONUS_BLK 28
#define BLACKHIT_BLK 29
#define MAX_STATIC_BLOCKS 25
#define MAX_BLOCKS 30
#define MAX_ROW 18
#define MAX_COL 9
#define BLOCK_WIDTH 40
#define BLOCK_HEIGHT 20
#define SPACE 7
#define REGION_NONE 0
#define REGION_TOP 1
#define REGION_BOTTOM 2
#define REGION_LEFT 4
#define REGION_RIGHT 8
#define EXPLODE_DELAY 10
#define BONUS_DELAY 150
#define BONUS_LENGTH 1500
#define NUMBER_OF_BULLETS_NEW_LEVEL 4
#define DEATH_DELAY1 100
#define DEATH_DELAY2 700
#define EXTRABALL_DELAY 300
#define RANDOM_DELAY 500
#define DROP_DELAY 1000
#define INFINITE_DELAY 9999999
#define ROAM_EYES_DELAY 300
#define ROAM_DELAY 1000
#define EXTRA_TIME 20
/*
* Type declarations:
*/
struct blockInfo
{
int blockType;
int width;
int height;
int slide;
};
struct aBlock
{
/* General properties of the block */
int occupied;
int blockType;
int hitPoints;
/* Used when block explodes */
int exploding;
int explodeStartFrame;
int explodeNextFrame;
int explodeSlide;
/* Used for animation of object */
int currentFrame;
int nextFrame;
int lastFrame;
/* Used for positioning of block in arena */
int blockOffsetX;
int blockOffsetY;
int x;
int y;
int width;
int height;
/* Used for ball collision with block */
Region regionTop;
Region regionBottom;
Region regionLeft;
Region regionRight;
/* Indexes into animation frames for object */
int counterSlide; /* For counter blocks only */
int bonusSlide; /* For bonus blocks only */
/* Special types of block flags */
int random;
int drop;
int specialPopup;
int explodeAll;
/* Used for splitting of the ball in multiball mode */
int ballHitIndex;
int balldx;
int balldy;
};
typedef struct aBlock **BLOCKPTR;
/*
* Function prototypes:
*/
#if NeedFunctionPrototypes
void FreeBlockPixmaps(Display *display);
void InitialiseBlocks(Display *display, Window window, Colormap colormap);
void DrawBlock(Display *display, Window window, int row, int col,
int blockType);
void ExplodeBlocksPending(Display *display, Window window);
void RedrawAllBlocks(Display *display, Window window);
void DrawTheBlock(Display *display, Window window, int x, int y,
int blockType, int slide, int r, int c);
void ExplodeBlockType(Display *display, Window window, int x, int y,
int row, int col, int type, int slide);
void AddNewBlock(Display *display, Window window, int row, int col,
int blockType, int counterSlide, int drawIt);
void HandlePendingAnimations(Display *display, Window window);
void AddBonusBlock(Display *display, Window window, int *row, int *col,
int type);
void ClearBlockArray(void);
int StillActiveBlocks(void);
void SkipToNextLevel(Display *display, Window window);
void PlaySoundForBlock(int type);
void AddSpecialBlock(Display *display, Window window, int *row, int *col,
int type, int kill_shots);
void HandlePendingSpecials(Display *display, Window window, int type,
int r, int c);
int GetRandomType(int blankBlock);
void SetExplodeAllType(Display *display, Window window, int type);
void EraseVisibleBlock(Display *display, Window window, int row, int col);
void ClearBlock(int row, int col);
void SetupBlockInfo(void);
#else
void SetupBlockInfo();
void ClearBlock();
void EraseVisibleBlock();
void SetExplodeAllType();
int GetRandomType();
void HandlePendingSpecials();
void AddSpecialBlock();
void PlaySoundForBlock();
void FreeBlockPixmaps();
void InitialiseBlocks();
void DrawBlock();
void ExplodeBlocksPending();
void RedrawAllBlocks();
void DrawTheBlock();
void ExplodeBlockType();
void AddNewBlock();
void HandlePendingAnimations();
void AddBonusBlock();
void ClearBlockArray();
int StillActiveBlocks();
void SkipToNextLevel();
#endif
extern struct aBlock blocks[MAX_ROW][MAX_COL];
extern int rowHeight;
extern int colWidth;
extern int blocksExploding;
extern Pixmap exyellowblock[3], exyellowblockM[3];
extern struct blockInfo BlockInfo[MAX_BLOCKS];
#endif
|