Subversion Repositories Kolibri OS

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
9169 turbocat 1
/*
2
 * OpenTyrian: A modern cross-platform port of Tyrian
3
 * Copyright (C) 2007-2009  The OpenTyrian Development Team
4
 *
5
 * This program is free software; you can redistribute it and/or
6
 * modify it under the terms of the GNU General Public License
7
 * as published by the Free Software Foundation; either version 2
8
 * of the License, or (at your option) any later version.
9
 *
10
 * This program is distributed in the hope that it will be useful,
11
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13
 * GNU General Public License for more details.
14
 *
15
 * You should have received a copy of the GNU General Public License
16
 * along with this program; if not, write to the Free Software
17
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
18
 */
19
#ifndef VARZ_H
20
#define VARZ_H
21
 
22
#include "episodes.h"
23
#include "opentyr.h"
24
#include "player.h"
25
#include "sprite.h"
26
 
27
#include 
28
 
29
#define SA 7
30
 
31
enum
32
{
33
	SA_NONE = 0,
34
	SA_NORTSHIPZ = 7,
35
 
36
	// only used for code entry
37
	SA_DESTRUCT = 8,
38
	SA_ENGAGE = 9,
39
 
40
	// only used in pItems[P_SUPERARCADE]
41
	SA_SUPERTYRIAN = 254,
42
	SA_ARCADE = 255
43
};
44
 
45
#define ENEMY_SHOT_MAX  60 /* 60*/
46
 
47
#define CURRENT_KEY_SPEED 1  /*Keyboard/Joystick movement rate*/
48
 
49
#define MAX_EXPLOSIONS           200
50
#define MAX_REPEATING_EXPLOSIONS 20
51
#define MAX_SUPERPIXELS          101
52
 
53
struct JE_SingleEnemyType
54
{
55
	JE_byte     fillbyte;
56
	JE_integer  ex, ey;     /* POSITION */
57
	JE_shortint exc, eyc;   /* CURRENT SPEED */
58
	JE_shortint exca, eyca; /* RANDOM ACCELERATION */
59
	JE_shortint excc, eycc; /* FIXED ACCELERATION WAITTIME */
60
	JE_shortint exccw, eyccw;
61
	JE_byte     armorleft;
62
	JE_byte     eshotwait[3], eshotmultipos[3]; /* [1..3] */
63
	JE_byte     enemycycle;
64
	JE_byte     ani;
65
	JE_word     egr[20]; /* [1..20] */
66
	JE_byte     size;
67
	JE_byte     linknum;
68
	JE_byte     aniactive;
69
	JE_byte     animax;
70
	JE_byte     aniwhenfire;
71
	Sprite2_array *sprite2s;
72
	JE_shortint exrev, eyrev;
73
	JE_integer  exccadd, eyccadd;
74
	JE_byte     exccwmax, eyccwmax;
75
	void       *enemydatofs;
76
	JE_boolean  edamaged;
77
	JE_word     enemytype;
78
	JE_byte     animin;
79
	JE_word     edgr;
80
	JE_shortint edlevel;
81
	JE_shortint edani;
82
	JE_byte     fill1;
83
	JE_byte     filter;
84
	JE_integer  evalue;
85
	JE_integer  fixedmovey;
86
	JE_byte     freq[3]; /* [1..3] */
87
	JE_byte     launchwait;
88
	JE_word     launchtype;
89
	JE_byte     launchfreq;
90
	JE_byte     xaccel;
91
	JE_byte     yaccel;
92
	JE_byte     tur[3]; /* [1..3] */
93
	JE_word     enemydie; /* Enemy created when this one dies */
94
	JE_boolean  enemyground;
95
	JE_byte     explonum;
96
	JE_word     mapoffset;
97
	JE_boolean  scoreitem;
98
 
99
	JE_boolean  special;
100
	JE_byte     flagnum;
101
	JE_boolean  setto;
102
 
103
	JE_byte     iced; /*Duration*/
104
 
105
	JE_byte     launchspecial;
106
 
107
	JE_integer  xminbounce;
108
	JE_integer  xmaxbounce;
109
	JE_integer  yminbounce;
110
	JE_integer  ymaxbounce;
111
	JE_byte     fill[3]; /* [1..3] */
112
};
113
 
114
typedef struct JE_SingleEnemyType JE_MultiEnemyType[100]; /* [1..100] */
115
 
116
typedef JE_word JE_DanCShape[(24 * 28) / 2]; /* [1..(24*28) div 2] */
117
 
118
typedef JE_char JE_CharString[256]; /* [1..256] */
119
 
120
typedef JE_byte JE_Map1Buffer[24 * 28 * 13 * 4]; /* [1..24*28*13*4] */
121
 
122
typedef JE_byte *JE_MapType[300][14]; /* [1..300, 1..14] */
123
typedef JE_byte *JE_MapType2[600][14]; /* [1..600, 1..14] */
124
typedef JE_byte *JE_MapType3[600][15]; /* [1..600, 1..15] */
125
 
126
struct JE_EventRecType
127
{
128
	JE_word     eventtime;
129
	JE_byte     eventtype;
130
	JE_integer  eventdat, eventdat2;
131
	JE_shortint eventdat3, eventdat5, eventdat6;
132
	JE_byte     eventdat4;
133
};
134
 
135
struct JE_MegaDataType1
136
{
137
	JE_MapType mainmap;
138
	struct
139
	{
140
		JE_DanCShape sh;
141
	} shapes[72]; /* [0..71] */
142
	JE_byte tempdat1;
143
	/*JE_DanCShape filler;*/
144
};
145
 
146
struct JE_MegaDataType2
147
{
148
	JE_MapType2 mainmap;
149
	struct
150
	{
151
		JE_byte nothing[3]; /* [1..3] */
152
		JE_byte fill;
153
		JE_DanCShape sh;
154
	} shapes[71]; /* [0..70] */
155
	JE_byte tempdat2;
156
};
157
 
158
struct JE_MegaDataType3
159
{
160
	JE_MapType3 mainmap;
161
	struct
162
	{
163
		JE_byte nothing[3]; /* [1..3] */
164
		JE_byte fill;
165
		JE_DanCShape sh;
166
	} shapes[70]; /* [0..69] */
167
	JE_byte tempdat3;
168
};
169
 
170
typedef JE_byte JE_EnemyAvailType[100]; /* [1..100] */
171
 
172
typedef struct {
173
	JE_integer sx, sy;
174
	JE_integer sxm, sym;
175
	JE_shortint sxc, syc;
176
	JE_byte tx, ty;
177
	JE_word sgr;
178
	JE_byte sdmg;
179
	JE_byte duration;
180
	JE_word animate;
181
	JE_word animax;
182
	JE_byte fill[12];
183
} EnemyShotType;
184
 
185
typedef struct {
186
	unsigned int ttl;
187
	signed int x, y;
188
	signed int delta_x, delta_y;
189
	bool fixed_position;
190
	bool follow_player;
191
	unsigned int sprite;
192
} explosion_type;
193
 
194
typedef struct {
195
	unsigned int delay;
196
	unsigned int ttl;
197
	unsigned int x, y;
198
	bool big;
199
} rep_explosion_type;
200
 
201
typedef struct {
202
	unsigned int x, y, z;
203
	signed int delta_x, delta_y;
204
	Uint8 color;
205
} superpixel_type;
206
 
207
extern JE_integer tempDat, tempDat2, tempDat3;
208
extern const JE_byte SANextShip[SA + 2];
209
extern const JE_word SASpecialWeapon[SA];
210
extern const JE_word SASpecialWeaponB[SA];
211
extern const JE_byte SAShip[SA];
212
extern const JE_word SAWeapon[SA][5];
213
extern const JE_byte specialArcadeWeapon[PORT_NUM];
214
extern const JE_byte optionSelect[16][3][2];
215
extern const JE_word PGR[21];
216
extern const JE_byte PAni[21];
217
extern const JE_word linkGunWeapons[38];
218
extern const JE_word chargeGunWeapons[38];
219
extern const JE_byte randomEnemyLaunchSounds[3];
220
extern const JE_byte keyboardCombos[26][8];
221
extern const JE_byte shipCombosB[21];
222
extern const JE_byte superTyrianSpecials[4];
223
extern const JE_byte shipCombos[14][3];
224
extern JE_byte SFCurrentCode[2][21];
225
extern JE_byte SFExecuted[2];
226
extern JE_byte lvlFileNum;
227
extern JE_word maxEvent, eventLoc;
228
extern JE_word tempBackMove, explodeMove;
229
extern JE_byte levelEnd;
230
extern JE_word levelEndFxWait;
231
extern JE_shortint levelEndWarp;
232
extern JE_boolean endLevel, reallyEndLevel, waitToEndLevel, playerEndLevel, normalBonusLevelCurrent, bonusLevelCurrent, smallEnemyAdjust, readyToEndLevel, quitRequested;
233
extern JE_byte newPL[10];
234
extern JE_word returnLoc;
235
extern JE_boolean returnActive;
236
extern JE_word galagaShotFreq;
237
extern JE_longint galagaLife;
238
extern JE_boolean debug;
239
extern Uint32 debugTime, lastDebugTime;
240
extern JE_longint debugHistCount;
241
extern JE_real debugHist;
242
extern JE_word curLoc;
243
extern JE_boolean firstGameOver, gameLoaded, enemyStillExploding;
244
extern JE_word totalEnemy;
245
extern JE_word enemyKilled;
246
extern struct JE_MegaDataType1 megaData1;
247
extern struct JE_MegaDataType2 megaData2;
248
extern struct JE_MegaDataType3 megaData3;
249
extern JE_byte flash;
250
extern JE_shortint flashChange;
251
extern JE_byte displayTime;
252
 
253
extern bool play_demo, record_demo, stopped_demo;
254
extern Uint8 demo_num;
255
extern FILE *demo_file;
256
 
257
extern Uint8 demo_keys, next_demo_keys;
258
extern Uint16 demo_keys_wait;
259
 
260
extern JE_byte soundQueue[8];
261
extern JE_boolean enemyContinualDamage;
262
extern JE_boolean enemiesActive;
263
extern JE_boolean forceEvents;
264
extern JE_boolean stopBackgrounds;
265
extern JE_byte stopBackgroundNum;
266
extern JE_byte damageRate;
267
extern JE_boolean background3x1;
268
extern JE_boolean background3x1b;
269
extern JE_boolean levelTimer;
270
extern JE_word levelTimerCountdown;
271
extern JE_word levelTimerJumpTo;
272
extern JE_boolean randomExplosions;
273
extern JE_boolean editShip1, editShip2;
274
extern JE_boolean globalFlags[10];
275
extern JE_byte levelSong;
276
extern JE_boolean loadDestruct;
277
extern JE_word mapOrigin, mapPNum;
278
extern JE_byte mapPlanet[5], mapSection[5];
279
extern JE_boolean moveTyrianLogoUp;
280
extern JE_boolean skipStarShowVGA;
281
extern JE_MultiEnemyType enemy;
282
extern JE_EnemyAvailType enemyAvail;
283
extern JE_word enemyOffset;
284
extern JE_word enemyOnScreen;
285
extern JE_byte enemyShapeTables[6];
286
extern JE_word superEnemy254Jump;
287
extern explosion_type explosions[MAX_EXPLOSIONS];
288
extern JE_integer explosionFollowAmountX, explosionFollowAmountY;
289
extern JE_boolean fireButtonHeld;
290
extern JE_boolean enemyShotAvail[ENEMY_SHOT_MAX];
291
extern EnemyShotType enemyShot[ENEMY_SHOT_MAX];
292
extern JE_byte zinglonDuration;
293
extern JE_byte astralDuration;
294
extern JE_word flareDuration;
295
extern JE_boolean flareStart;
296
extern JE_shortint flareColChg;
297
extern JE_byte specialWait;
298
extern JE_byte nextSpecialWait;
299
extern JE_boolean spraySpecial;
300
extern JE_byte doIced;
301
extern JE_boolean infiniteShot;
302
extern JE_boolean allPlayersGone;
303
extern const uint shadowYDist;
304
extern JE_real optionSatelliteRotate;
305
extern JE_integer optionAttachmentMove;
306
extern JE_boolean optionAttachmentLinked, optionAttachmentReturn;
307
extern JE_byte chargeWait, chargeLevel, chargeMax, chargeGr, chargeGrWait;
308
extern JE_word neat;
309
extern rep_explosion_type rep_explosions[MAX_REPEATING_EXPLOSIONS];
310
extern superpixel_type superpixels[MAX_SUPERPIXELS];
311
extern unsigned int last_superpixel;
312
extern JE_byte temp, temp2, temp3;
313
extern JE_word tempX, tempY;
314
extern JE_word tempW;
315
extern JE_boolean doNotSaveBackup;
316
extern JE_word x, y;
317
extern JE_integer b;
318
extern JE_byte **BKwrap1to, **BKwrap2to, **BKwrap3to, **BKwrap1, **BKwrap2, **BKwrap3;
319
extern JE_shortint specialWeaponFilter, specialWeaponFreq;
320
extern JE_word specialWeaponWpn;
321
extern JE_boolean linkToPlayer;
322
extern JE_word shipGr, shipGr2;
323
extern Sprite2_array *shipGrPtr, *shipGr2ptr;
324
 
325
static const int hud_sidekick_y[2][2] =
326
{
327
	{  64,  82 }, // one player HUD
328
	{ 108, 126 }, // two player HUD
329
};
330
 
331
void JE_getShipInfo( void );
332
JE_word JE_SGr( JE_word ship, Sprite2_array **ptr );
333
 
334
void JE_drawOptions( void );
335
 
336
void JE_tyrianHalt( JE_byte code ); /* This ends the game */
337
void JE_specialComplete( JE_byte playernum, JE_byte specialType );
338
void JE_doSpecialShot( JE_byte playernum, uint *armor, uint *shield );
339
 
340
void JE_wipeShieldArmorBars( void );
341
JE_byte JE_playerDamage( JE_byte temp, Player * );
342
 
343
void JE_setupExplosion( signed int x, signed int y, signed int delta_y, unsigned int type, bool fixed_position, bool follow_player );
344
void JE_setupExplosionLarge( JE_boolean enemyground, JE_byte explonum, JE_integer x, JE_integer y );
345
 
346
void JE_drawShield( void );
347
void JE_drawArmor( void );
348
 
349
JE_word JE_portConfigs( void );
350
 
351
/*SuperPixels*/
352
void JE_doSP( JE_word x, JE_word y, JE_word num, JE_byte explowidth, JE_byte color );
353
void JE_drawSP( void );
354
 
355
void JE_drawOptionLevel( void );
356
 
357
 
358
#endif /* VARZ_H */
359