1 /***********************************************************
2 *                      K O U L E S                         *
3 *----------------------------------------------------------*
4 *  C1995 JAHUSOFT                                          *
5 *        Jan Hubicka                                       *
6 *        Dukelskych Bojovniku 1944                         *
7 *        390 03 Tabor                                      *
8 *        Czech Republic                                    *
9 *        Phone: 0041-361-32613                             *
10 *        eMail: hubicka@limax.paru.cas.cz                  *
11 *----------------------------------------------------------*
12 *   Copyright(c)1995,1996 by Jan Hubicka.See README for    *
13 *                    licence details.                      *
14 *----------------------------------------------------------*
15 *  koules.h                                                *
16 ***********************************************************/
17 /* Changes for joystick "accelerate by deflection"         *
18  *  (c) 1997 by Ludvik Tesar (Ludv\'{\i}k Tesa\v{r})       *
19  ************************LT*********************************/
20 
21 #ifndef __KOULE_INCLUDED___
22 #define __KOULE_INCLUDED___
23 #include <stdio.h>
24 #include <string.h>
25 #include <stdlib.h>
26 #include <unistd.h>
27 #include <math.h>
28 #include <sys/types.h>
29 #include <fcntl.h>
30 #ifndef M_PI			/*hp ansi c stuff */
31 #define M_PI 3.14
32 #endif
33 #ifdef JOYSTICK
34 #include "joystick.h"
35 #endif
36 #if defined(SOUND)||defined(NAS_SOUND)||defined(RSOUND)
37 #include "sound.h"
38 #endif
39 #ifndef HAVEUSLEEP
40 #define usleep myusleep
41 extern void     myusleep (unsigned long);
42 #endif
43 
44 /*do not confuse compiler when function is not required */
45 #if defined(__GNUC__)&&!defined(ONLYANSI)
46 #define CONST const
47 #define INLINE inline
48 #else
49 #define INLINE
50 #define CONST
51 #endif
52 #define DUMMY do { } while (0)
53 
54 extern int      nomouse;
55 #include <interface.h>
56 
57 #define MENUTIME 5
58 
59 
60 
61 #define back(x) (32 + x)
62 #define ball(x) (64 + x)
63 #define rocket(x) (96 + x)
64 
65 
66 #define PLAY_X1 0
67 #define PLAY_Y1 0
68 
69 
70 
71 
72 #define RAD(n)  ((float)(n)/180.0*M_PI)
73 #define ROTSTEP RAD(10)
74 
75 
76 #define BALL_RADIUS 8
77 #define BBALL_RADIUS 16
78 #define APPLE_RADIUS 32
79 #define INSPECTOR_RADIUS 14
80 #define LUNATIC_RADIUS EYE_RADIUS
81 #define HOLE_RADIUS 12
82 #define ROCKET_RADIUS 14
83 #define EYE_RADIUS1 10
84 #define SPRINGSIZE (4*BBALL_RADIUS)
85 #define SPRINGSTRENGTH (BBALL_RADIUS/2)
86 
87 
88 
89 #define NTRACKS 4
90 #define NTRACKS 4
91 #define ROCKET 1
92 #define BALL 2
93 
94 
95 #define LBALL 3
96 #define CREATOR 4
97 #define HOLE 5
98 #define BBALL 6
99 #define APPLE 7
100 #define INSPECTOR 8
101 #define EHOLE 9
102 #define LUNATIC 10
103 
104 
105 #define MAXOBJECT 255
106 #define MAXPOINT (4000)
107 #define MAXROCKETS 5
108 
109 
110 #define L_ACCEL 'A'
111 #define L_GUMM 'M'
112 #define L_THIEF 'T'
113 #define L_FINDER 'G'
114 #define L_TTOOL 'S'
115 #define A_ADD 0.13
116 #define M_ADD 0.8
117 #define NLETTERS 5
118 
119 
120 #define LETTER 1024
121 
122 
123 #define S_START 0
124 #define S_END 1
125 #define S_COLIZE 2
126 #define S_DESTROY_BALL 3
127 #define S_DESTROY_ROCKET 4
128 #define S_CREATOR1 5
129 #define S_CREATOR2 6
130 
131 #define C_REMOTE 0
132 #define C_KEYBOARD 1
133 #define C_RKEYBOARD 2
134 #define C_JOYSTICK1 3
135 #define C_JOYSTICK2 4
136 #define C_MOUSE 5
137 
138 #define DEATHMATCH 0
139 #define COOPERATIVE 1
140 
141 
142 #define NSAMPLES 7
143 
144 #define MENU 1
145 #define KEYS 2
146 #define GAME 3
147 #define JOY 4
148 #define WAIT 5
149 #define PREGAME 6
150 
151 
152 #define next			/*((++cit)>=NTRACKS?cit=1:cit) */
153 
154 
155 typedef struct
156   {
157     int             type;
158     int             thief;
159     int             ctype;
160     int             live;
161     int             time;
162     int             score;
163     int             lineto;
164     float           x;
165     float           y;
166     float           fx;		/*forces */
167     float           fy;
168     float           rotation;	/*for rockets */
169     int             live1;	/*backup for rockets */
170     float           M;
171     int             radius;
172     float           accel;
173     char            letter;
174 /* B ****LT**** */
175 #ifdef JOYSTICK
176    float          joymulx;    /* multiply x cootdinate by this to obtai number between <0,1> */
177    float          joymuly;    /* multiply y ... */
178    float          joythresh;  /* minimum how should be joystick deflected for acceleration <0,1> */
179 #endif
180 /* B ****LT**** */
181   }
182 Object;
183 typedef struct
184   {
185     int             x, y, xp, yp, time, color;
186   }
187 Point;
188 extern int      PlaySound (int s);
189 #ifdef NETSUPPORT
190 #define play_sound1(p1) (!server?play_sound(p1):PlaySound(p1))
191 #else
192 #define play_sound1(p1) play_sound(p1)
193 #endif
194 
195 #ifdef SOUND
196 #define Effect(p1,p2) (sound?play_sound1(p1):0)
197 #else
198 #if defined(NAS_SOUND)||defined(RSOUND)
199 #define Effect(p1,p2) (sound?play_sound1(p1):0)
200 #define SOUND
201 #else
202 #define Effect(p1,p2) (server?PlaySound(p1):0)
203 #endif
204 #endif
205 
206 struct control
207   {
208     int             type;
209     double          jx, jy;
210     int             mx, my;
211     int             mask;
212   };
213 #ifndef VARIABLES_HERE
214 extern float    ROCKET_SPEED;
215 extern float    BALL_SPEED;
216 extern float    BBALL_SPEED;
217 extern float    SLOWDOWN;
218 extern float    GUMM;
219 
220 extern float    BALLM;
221 extern float    LBALLM;
222 extern float    BBALLM;
223 extern float    APPLEM;
224 extern float    INSPECTORM;
225 extern float    LUNATICM;
226 extern float    ROCKETM;
227 
228 
229 extern int      dosprings;
230 extern int      difficulty;
231 extern int      randsprings;
232 extern int      nobjects;
233 extern int      drawpointer;
234 extern int      textcolor;
235 extern int      nrockets;
236 extern Object   object[MAXOBJECT];
237 extern Point    point[MAXPOINT];
238 extern int      gameplan;
239 extern int      rotation[MAXROCKETS];
240 extern char     control[MAXROCKETS];
241 extern struct control controls[MAXROCKETS];
242 extern int      lastlevel, maxlevel;
243 #ifdef NETSUPPORT
244 extern int      client, server;
245 #endif
246 #ifdef SOUND
247 extern int      sndinit;
248 #endif
249 
250 extern int      mouseplayer;
251 #ifdef JOYSTICK
252 extern int      joystickplayer[2];
253 extern int      joystickdevice[2];
254 extern int      calibrated[2];
255 extern int      center[2][2];
256 /* B ****LT**** */
257 /* coordinates are multiplied by this number before computing of speed */
258 extern float    joystickmul[2];
259 /* default value for "accel by fire button" : */
260 #define JOYMUL1 0.0
261 /* default value for "accel by deflection" : */
262 #define JOYMUL2 1.5
263 /* joystickthresh is lower threshold for movement of joystick (something between 0 and 1)*/
264 extern float    joystickthresh[2];
265 /* E ****LT**** */
266 #endif
267 
268 
269 extern VScreenType physicalscreen;
270 extern VScreenType backscreen;
271 extern VScreenType background;
272 extern VScreenType starbackground;
273 /*extern int      cit; */
274 extern int      gamemode;
275 extern int      tbreak;
276 
277 extern int      a_bballs, a_rockets, a_balls, a_holes, a_apples, a_inspectors,
278                 a_lunatics, a_eholes;
279 
280 extern int      keys[5][4];
281 extern int      sound;
282 
283 extern BitmapType bball_bitmap, apple_bitmap, inspector_bitmap, mouse_bitmap,
284                 lunatic_bitmap, lball_bitmap[NLETTERS], circle_bitmap,
285                 hole_bitmap, ehole_bitmap, ball_bitmap, eye_bitmap[MAXROCKETS],
286                 rocket_bitmap[MAXROCKETS];
287 extern char     rocketcolor[5];
288 
289 
290 #endif
291 
292 #if defined(__GNUC__)&&!defined(ONLYANSI)
293 extern inline void
normalize(float * x,float * y,CONST float size)294 normalize (float *x, float *y, CONST float size)
295 {
296   float           length = sqrt ((*x) * (*x) + (*y) * (*y));
297   if (length == 0)
298     length = 1;
299   *x *= size / length;
300   *y *= size / length;
301 }
302 #else
303 extern void     normalize (float *, float *, CONST float);
304 #endif
305 
306 extern void     addpoint (CONST int, CONST int, CONST int, CONST int, CONST int, CONST int);
307 extern void     destroy (CONST int);
308 extern void     creator (CONST int);
309 extern void     creator_rocket (CONST int);
310 extern void     uninitialize ();
311 extern void     draw_menu (CONST int);
312 extern void     draw_joy (CONST int);
313 extern void     init_menu ();
314 extern void     menu_keys ();
315 
316 extern void     draw_keys (int);
317 extern void     keys_keys ();
318 extern void     joy_keys ();
319 extern void     gameplan_init ();
320 
321 extern void     update_game ();
322 extern void     init_objects ();
323 extern void     outro1 ();
324 extern void     outro2 ();
325 extern void     clearpoints ();
326 extern void     intro_intro ();
327 extern void     lunatic_intro ();
328 extern void     spring_intro ();
329 extern void     thief_intro ();
330 extern void     finder_intro ();
331 extern void     ttool_intro ();
332 extern void     hole_intro ();
333 extern void     inspector_intro ();
334 extern void     bball_intro ();
335 extern void     bbball_intro ();
336 extern void     maghole_intro ();
337 extern void     fadeout ();
338 extern void     fadein ();
339 extern void     load_rc ();
340 extern void     save_rc ();
341 extern int      allow_finder ();
342 #if defined(__GNUC__)&&!defined(ONLYANSI)
343 extern int
344 find_possition (float *, float *, CONST float)
345                 __attribute ((const));
346      extern int      radius (CONST int) __attribute ((const));
347      extern float    M (CONST int) __attribute ((const));
348      extern int      create_letter () __attribute ((const));
349 #else
350 extern int      find_possition (float *, float *, CONST float);
351 extern int      radius (CONST int);
352 extern float    M (CONST int);
353 extern int      create_letter ();
354 #endif
355 #ifndef NETSUPPORT
356 #define client 0
357 #define server 0
358 #endif
359 
360 #endif
361