File: blocks.h

package info (click to toggle)
xboing 2.4-26.1
  • links: PTS
  • area: main
  • in suites: sarge
  • size: 3,108 kB
  • ctags: 1,516
  • sloc: ansic: 17,999; sh: 51; makefile: 44
file content (257 lines) | stat: -rw-r--r-- 7,122 bytes parent folder | download | duplicates (7)
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