/* * OpenTyrian Classic: A modern cross-platform port of Tyrian * Copyright (C) 2007-2009 The OpenTyrian Development Team * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef VARZ_H #define VARZ_H #include "episodes.h" #include "opentyr.h" #include "player.h" #include "sprite.h" #include #define SA 7 enum { SA_NONE = 0, SA_NORTSHIPZ = 7, // only used for code entry SA_DESTRUCT = 8, SA_ENGAGE = 9, // only used in pItems[P_SUPERARCADE] SA_SUPERTYRIAN = 254, SA_ARCADE = 255 }; #define MAX_PWEAPON 81 /* 81*/ #define ENEMY_SHOT_MAX 60 /* 60*/ #define CURRENT_KEY_SPEED 1 /*Keyboard/Joystick movement rate*/ #define MAX_EXPLOSIONS 200 #define MAX_REPEATING_EXPLOSIONS 20 #define MAX_SUPERPIXELS 101 struct JE_SingleEnemyType { JE_byte fillbyte; JE_integer ex, ey; /* POSITION */ JE_shortint exc, eyc; /* CURRENT SPEED */ JE_shortint exca, eyca; /* RANDOM ACCELERATION */ JE_shortint excc, eycc; /* FIXED ACCELERATION WAITTIME */ JE_shortint exccw, eyccw; JE_byte armorleft; JE_byte eshotwait[3], eshotmultipos[3]; /* [1..3] */ JE_byte enemycycle; JE_byte ani; JE_word egr[20]; /* [1..20] */ JE_byte size; JE_byte linknum; JE_byte aniactive; JE_byte animax; JE_byte aniwhenfire; Sprite2_array *sprite2s; JE_shortint exrev, eyrev; JE_integer exccadd, eyccadd; JE_byte exccwmax, eyccwmax; void *enemydatofs; JE_boolean edamaged; JE_word enemytype; JE_byte animin; JE_word edgr; JE_shortint edlevel; JE_shortint edani; JE_byte fill1; JE_byte filter; JE_integer evalue; JE_integer fixedmovey; JE_byte freq[3]; /* [1..3] */ JE_byte launchwait; JE_word launchtype; JE_byte launchfreq; JE_byte xaccel; JE_byte yaccel; JE_byte tur[3]; /* [1..3] */ JE_word enemydie; /* Enemy created when this one dies */ JE_boolean enemyground; JE_byte explonum; JE_word mapoffset; JE_boolean scoreitem; JE_boolean special; JE_byte flagnum; JE_boolean setto; JE_byte iced; /*Duration*/ JE_byte launchspecial; JE_integer xminbounce; JE_integer xmaxbounce; JE_integer yminbounce; JE_integer ymaxbounce; JE_byte fill[3]; /* [1..3] */ }; typedef struct JE_SingleEnemyType JE_MultiEnemyType[100]; /* [1..100] */ typedef JE_word JE_DanCShape[(24 * 28) / 2]; /* [1..(24*28) div 2] */ typedef JE_char JE_CharString[256]; /* [1..256] */ typedef JE_byte JE_Map1Buffer[24 * 28 * 13 * 4]; /* [1..24*28*13*4] */ typedef JE_byte *JE_MapType[300][14]; /* [1..300, 1..14] */ typedef JE_byte *JE_MapType2[600][14]; /* [1..600, 1..14] */ typedef JE_byte *JE_MapType3[600][15]; /* [1..600, 1..15] */ struct JE_EventRecType { JE_word eventtime; JE_byte eventtype; JE_integer eventdat, eventdat2; JE_shortint eventdat3, eventdat5, eventdat6; JE_byte eventdat4; }; struct JE_MegaDataType1 { JE_MapType mainmap; struct { JE_DanCShape sh; } shapes[72]; /* [0..71] */ JE_byte tempdat1; /*JE_DanCShape filler;*/ }; struct JE_MegaDataType2 { JE_MapType2 mainmap; struct { JE_byte nothing[3]; /* [1..3] */ JE_byte fill; JE_DanCShape sh; } shapes[71]; /* [0..70] */ JE_byte tempdat2; }; struct JE_MegaDataType3 { JE_MapType3 mainmap; struct { JE_byte nothing[3]; /* [1..3] */ JE_byte fill; JE_DanCShape sh; } shapes[70]; /* [0..69] */ JE_byte tempdat3; }; typedef JE_MultiEnemyType JE_EnemyType; typedef JE_byte JE_EnemyAvailType[100]; /* [1..100] */ typedef struct { JE_integer sx, sy; JE_integer sxm, sym; JE_shortint sxc, syc; JE_byte tx, ty; JE_word sgr; JE_byte sdmg; JE_byte duration; JE_word animate; JE_word animax; JE_byte fill[12]; } EnemyShotType; typedef struct { JE_integer shotX, shotY, shotXM, shotYM, shotXC, shotYC; JE_boolean shotComplicated; JE_integer shotDevX, shotDirX, shotDevY, shotDirY, shotCirSizeX, shotCirSizeY; JE_byte shotTrail; JE_word shotGr, shotAni, shotAniMax; Uint8 shotDmg; JE_byte shotBlastFilter, chainReaction, playerNumber, aimAtEnemy, aimDelay, aimDelayMax; } PlayerShotDataType; typedef struct { unsigned int ttl; signed int x, y; signed int delta_x, delta_y; bool fixed_position; bool follow_player; unsigned int sprite; } explosion_type; typedef struct { unsigned int delay; unsigned int ttl; unsigned int x, y; bool big; } rep_explosion_type; typedef struct { unsigned int x, y, z; signed int delta_x, delta_y; Uint8 color; } superpixel_type; extern JE_integer tempDat, tempDat2, tempDat3; extern const JE_byte SANextShip[SA + 2]; extern const JE_word SASpecialWeapon[SA]; extern const JE_word SASpecialWeaponB[SA]; extern const JE_byte SAShip[SA]; extern const JE_word SAWeapon[SA][5]; extern const JE_byte specialArcadeWeapon[PORT_NUM]; extern const JE_byte optionSelect[16][3][2]; extern const JE_word PGR[21]; extern const JE_byte PAni[21]; extern const JE_word linkGunWeapons[38]; extern const JE_word chargeGunWeapons[38]; extern const JE_word linkMultiGr[17]; extern const JE_word linkSonicGr[17]; extern const JE_word linkMult2Gr[17]; extern const JE_byte randomEnemyLaunchSounds[3]; extern const JE_byte keyboardCombos[26][8]; extern const JE_byte shipCombosB[21]; extern const JE_byte superTyrianSpecials[4]; extern const JE_byte shipCombos[14][3]; extern JE_byte SFCurrentCode[2][21]; extern JE_byte SFExecuted[2]; extern JE_byte lvlFileNum; extern JE_word maxEvent, eventLoc; extern JE_word tempBackMove, explodeMove; extern JE_byte levelEnd; extern JE_word levelEndFxWait; extern JE_shortint levelEndWarp; extern JE_boolean endLevel, reallyEndLevel, waitToEndLevel, playerEndLevel, normalBonusLevelCurrent, bonusLevelCurrent, smallEnemyAdjust, readyToEndLevel, quitRequested; extern JE_byte newPL[10]; extern JE_word returnLoc; extern JE_boolean returnActive; extern JE_word galagaShotFreq; extern JE_longint galagaLife; extern JE_boolean debug; extern Uint32 debugTime, lastDebugTime; extern JE_longint debugHistCount; extern JE_real debugHist; extern JE_word curLoc; extern JE_boolean firstGameOver, gameLoaded, enemyStillExploding; extern JE_word totalEnemy; extern JE_word enemyKilled; extern struct JE_MegaDataType1 megaData1; extern struct JE_MegaDataType2 megaData2; extern struct JE_MegaDataType3 megaData3; extern JE_byte flash; extern JE_shortint flashChange; extern JE_byte displayTime; extern bool play_demo, record_demo, stopped_demo; extern Uint8 demo_num; extern FILE *demo_file; extern Uint8 demo_keys, next_demo_keys; extern Uint16 demo_keys_wait; extern JE_byte soundQueue[8]; extern JE_boolean enemyContinualDamage; extern JE_boolean enemiesActive; extern JE_boolean forceEvents; extern JE_boolean stopBackgrounds; extern JE_byte stopBackgroundNum; extern JE_byte damageRate; extern JE_boolean background3x1; extern JE_boolean background3x1b; extern JE_boolean levelTimer; extern JE_word levelTimerCountdown; extern JE_word levelTimerJumpTo; extern JE_boolean randomExplosions; extern JE_boolean editShip1, editShip2; extern JE_boolean globalFlags[10]; extern JE_byte levelSong; extern JE_boolean loadDestruct; extern JE_word mapOrigin, mapPNum; extern JE_byte mapPlanet[5], mapSection[5]; extern JE_boolean moveTyrianLogoUp; extern JE_boolean skipStarShowVGA; extern JE_EnemyType enemy; extern JE_EnemyAvailType enemyAvail; extern JE_word enemyOffset; extern JE_word enemyOnScreen; extern JE_byte enemyShapeTables[6]; extern JE_boolean uniqueEnemy; extern JE_word superEnemy254Jump; extern explosion_type explosions[MAX_EXPLOSIONS]; extern JE_integer explosionFollowAmountX, explosionFollowAmountY; extern JE_boolean fireButtonHeld; extern JE_boolean enemyShotAvail[ENEMY_SHOT_MAX]; extern EnemyShotType enemyShot[ENEMY_SHOT_MAX]; extern JE_byte zinglonDuration; extern JE_byte astralDuration; extern JE_word flareDuration; extern JE_boolean flareStart; extern JE_shortint flareColChg; extern JE_byte specialWait; extern JE_byte nextSpecialWait; extern JE_boolean spraySpecial; extern JE_byte doIced; extern JE_boolean infiniteShot; extern PlayerShotDataType playerShotData[MAX_PWEAPON + 1]; extern JE_byte chain; extern JE_boolean allPlayersGone; extern JE_byte shotAvail[MAX_PWEAPON]; extern const uint shadowYDist; extern JE_real optionSatelliteRotate; extern JE_integer optionAttachmentMove; extern JE_boolean optionAttachmentLinked, optionAttachmentReturn; extern JE_byte chargeWait, chargeLevel, chargeMax, chargeGr, chargeGrWait; extern JE_word neat; extern rep_explosion_type rep_explosions[MAX_REPEATING_EXPLOSIONS]; extern superpixel_type superpixels[MAX_SUPERPIXELS]; extern unsigned int last_superpixel; extern JE_integer tempI, tempI2, tempI3, tempI4; extern JE_longint tempL; extern JE_byte temp, temp2, temp3, temp4, temp5, tempPos; extern JE_word tempX, tempY, tempX2, tempY2; extern JE_word tempW, tempW2; extern JE_boolean doNotSaveBackup; extern JE_word x, y; extern JE_integer b; extern JE_byte playerNum; extern JE_byte **BKwrap1to, **BKwrap2to, **BKwrap3to, **BKwrap1, **BKwrap2, **BKwrap3; extern JE_shortint specialWeaponFilter, specialWeaponFreq; extern JE_word specialWeaponWpn; extern JE_boolean linkToPlayer; extern JE_word shipGr, shipGr2; extern Sprite2_array *shipGrPtr, *shipGr2ptr; static const int hud_sidekick_y[2][2] = { { 64, 82 }, // one player HUD { 108, 126 }, // two player HUD }; void JE_getShipInfo( void ); JE_word JE_SGr( JE_word ship, Sprite2_array **ptr ); void JE_drawOptions( void ); void JE_tyrianHalt( JE_byte code ); /* This ends the game */ void JE_initPlayerShot( JE_word portnum, uint shot_i, JE_word px, JE_word py, JE_word mousex, JE_word mousey, JE_word wpnum, JE_byte playernum ); void JE_specialComplete( JE_byte playernum, JE_byte specialType ); void JE_doSpecialShot( JE_byte playernum, uint *armor, uint *shield ); void JE_wipeShieldArmorBars( void ); JE_byte JE_playerDamage( JE_byte temp, Player * ); void JE_setupExplosion( signed int x, signed int y, signed int delta_y, unsigned int type, bool fixed_position, bool follow_player ); void JE_setupExplosionLarge( JE_boolean enemyground, JE_byte explonum, JE_integer x, JE_integer y ); void JE_drawShield( void ); void JE_drawArmor( void ); JE_word JE_portConfigs( void ); /*SuperPixels*/ void JE_doSP( JE_word x, JE_word y, JE_word num, JE_byte explowidth, JE_byte color ); void JE_drawSP( void ); void JE_drawOptionLevel( void ); #endif /* VARZ_H */ // kate: tab-width 4; vim: set noet: