DEF.H 29 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124
  1. /* Catacomb Apocalypse Source Code
  2. * Copyright (C) 1993-2014 Flat Rock Software
  3. *
  4. * This program is free software; you can redistribute it and/or modify
  5. * it under the terms of the GNU General Public License as published by
  6. * the Free Software Foundation; either version 2 of the License, or
  7. * (at your option) any later version.
  8. *
  9. * This program is distributed in the hope that it will be useful,
  10. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  12. * GNU General Public License for more details.
  13. *
  14. * You should have received a copy of the GNU General Public License along
  15. * with this program; if not, write to the Free Software Foundation, Inc.,
  16. * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
  17. */
  18. #include "ID_HEADS.H"
  19. #include <MATH.H>
  20. #include <VALUES.H>
  21. //#define PROFILE
  22. #define DEBUG_KEYS_AVAILABLE 0
  23. /*
  24. =============================================================================
  25. GLOBAL CONSTANTS
  26. =============================================================================
  27. */
  28. //
  29. // SOFTLIB GFX FILENAME
  30. //
  31. #define SLIB_GFX "APC_SLIB."EXT
  32. #define USE_INERT_LIST false
  33. //
  34. // MAX_BASE - represents 100 percent in 1st base
  35. // MAX_PERC - represents 100 percent in 2nd base
  36. // PERC - fractional portion of 2nd base
  37. // SCALE - arbitrary scaling value (bigger number means more accurate)
  38. //
  39. // ex: PERCENTAGE(320,16,8,7) returns 160
  40. //
  41. // Make sure values used won't overflow a WORD! In general, if largest number
  42. // to be used (320 in ex: above) * (1<<SCALE) is greater than 65535, use
  43. // LONG_PERCENTAGE or a lower SCALE. Using a SCALE of 8 in the example
  44. // above would overflow a WORD in some circumstances!
  45. //
  46. // LONG_PERCENTAGE is to be used for larger SCALEs, thus, giving you
  47. // massive accuracy!
  48. //
  49. #define PERCENTAGE(MAX_BASE,MAX_PERC,PERC,SCALE) ((unsigned)(MAX_BASE*((PERC<<SCALE)/MAX_PERC))>>SCALE)
  50. #define LONG_PERCENTAGE(MAX_BASE,MAX_PERC,PERC,SCALE) (((long)MAX_BASE*(((long)PERC<<SCALE)/MAX_PERC))>>SCALE)
  51. #define PI 3.141592657
  52. //#define SIZE_TEST 65000
  53. #define SIZE_TEST 0
  54. #define FL_QUICK 0x01
  55. #define FL_NOMEMCHECK 0x02
  56. #define FL_HELPTEST 0x04
  57. #define FL_CLEAR (FL_QUICK|FL_NOMEMCHECK|FL_HELPTEST)
  58. #if 0
  59. #define GEM_SHIFT 2
  60. #define FL_RGEM 0x04
  61. #define FL_GGEM 0x08
  62. #define FL_BGEM 0x10
  63. #define FL_YGEM 0x20
  64. #define FL_PGEM 0x40
  65. #endif
  66. #define FL_DEAD 0x80
  67. #define MAXBOLTS 10
  68. #define MAXNUKES 10
  69. #define MAXPOTIONS 10
  70. #define NUKE_COST (1000)
  71. #define BOLT_COST (1200)
  72. #define POTION_COST (1300)
  73. #define NUKE_COST_TXT ("1000") // Allows for Q&D positioning..
  74. #define BOLT_COST_TXT ("1200")
  75. #define POTION_COST_TXT ("1300")
  76. #define RADARX 31 // bytes
  77. #define RADARY 11 // pixels
  78. #define RADAR_WIDTH 51 // "
  79. #define RADAR_HEIGHT 51 // "
  80. #define RADAR_XCENTER ((RADARX*8)+(RADAR_WIDTH/2)+3) // "
  81. #define RADAR_YCENTER ((RADARY-8)+(RADAR_HEIGHT/2)+5) // "
  82. #define MAX_RADAR_BLIPS 60
  83. #define RADAR_RADIUS 17
  84. #define RADAR_RADIUS_NSEW 15
  85. #define RADAR_X_IRADIUS (113/5)
  86. #define RADAR_Y_IRADIUS (113/7)
  87. #define RADAR_ICON_CENTER 4 // Center offset into icon.
  88. #define NAMESTART 180
  89. #define REMOVED_DOOR_TILE NAMESTART
  90. #define NEXT_LEVEL_CODE 0xff
  91. #define REMOVE_DOOR_CODE 0xfe
  92. #define CANT_OPEN_CODE 0xfd
  93. #define EXP_WALL_CODE 0xfc
  94. #define UNMARKGRCHUNK(chunk) (grneeded[chunk]&=~ca_levelbit)
  95. #define MOUSEINT 0x33
  96. #define NUMEXPWALLS 7
  97. #define WALLEXP 59
  98. #define WATEREXP 62
  99. #define NUMFLOORS 100
  100. #define NUMLATCHPICS (FIRSTWALLPIC-FIRSTLATCHPIC) //+5
  101. #define NUMSCALEPICS (FIRSTWALLPIC-FIRSTSCALEPIC) //+5
  102. #define NUMSCALEWALLS (LASTWALLPIC-FIRSTWALLPIC) //+5
  103. #define FLASHCOLOR 12
  104. #define FLASHTICS 4
  105. #define NUMLEVELS 32 //21
  106. #define VIEWX 0 // corner of view window
  107. #define VIEWY 0
  108. #define VIEWWIDTH (40*8) // size of view window // 33
  109. #define VIEWHEIGHT (15*8) // 18
  110. #define VIEWXH (VIEWX+VIEWWIDTH-1)
  111. #define VIEWYH (VIEWY+VIEWHEIGHT-1)
  112. #define CENTERX (VIEWX+VIEWWIDTH/2-1) // middle of view window
  113. #define CENTERY (VIEWY+VIEWHEIGHT/2-1)
  114. #define GLOBAL1 (1l<<16)
  115. #define TILEGLOBAL GLOBAL1
  116. #define TILESHIFT 16l
  117. #define MINDIST (2*GLOBAL1/5)
  118. #define FOCALLENGTH (TILEGLOBAL) // in global coordinates
  119. #define ANGLES 360 // must be divisable by 4
  120. #define MAPSIZE 64 // maps are 64*64 max
  121. #define MAXACTORS 100 // max number of tanks, etc / map
  122. #define NORTH 0
  123. #define EAST 1
  124. #define SOUTH 2
  125. #define WEST 3
  126. #define SIGN(x) ((x)>0?1:-1)
  127. #define ABS(x) ((int)(x)>0?(x):-(x))
  128. #define LABS(x) ((long)(x)>0?(x):-(x))
  129. #define MAXSCALE (VIEWWIDTH/2)
  130. #define MAXBODY 100
  131. #define MAXSHOTPOWER 56
  132. #define SCREEN1START 0
  133. #define SCREEN2START 8320
  134. #define STATUSLEN 0xc80
  135. #define PAGELEN 0x1700
  136. #define PAGE1START STATUSLEN
  137. #define PAGE2START (PAGE1START+PAGELEN)
  138. #define PAGE3START (PAGE2START+PAGELEN)
  139. #define FREESTART (PAGE3START+PAGELEN)
  140. #define PIXRADIUS 512
  141. #define STATUSLINES (200-VIEWHEIGHT)
  142. enum bonusnumbers {B_BOLT,B_NUKE,B_POTION,B_RKEY,B_YKEY,B_GKEY,B_BKEY,
  143. B_GOAL,B_CHEST,B_OLDCHEST,B_RGEM,B_GGEM,B_BGEM,B_YGEM,B_PGEM};
  144. #define MAX_DOOR_STORAGE 5
  145. #define GEM_DELAY_TIME (120*60)
  146. #define ROTATE_SPEED (6)
  147. #define MAXREALTICS (2*60)
  148. #define MAXFREEZETIME (100*30) // 50 secs (100 half)
  149. #define INVISIBLEWALL 0x46
  150. #define USE_STRIPS FALSE
  151. #define SOUNDPLAYED 888
  152. /*
  153. =============================================================================
  154. GLOBAL TYPES
  155. =============================================================================
  156. */
  157. enum {BLANKCHAR=9,BOLTCHAR,NUKECHAR,POTIONCHAR,KEYCHARS,SCROLLCHARS=17,
  158. NUMBERCHARS=25};
  159. typedef long fixed;
  160. typedef struct {int x,y;} tilept;
  161. typedef struct {fixed x,y;} globpt;
  162. typedef struct
  163. {
  164. int x1,x2,leftclip,rightclip;// first pixel of wall (may not be visable)
  165. unsigned height1,height2,color,walllength,side;
  166. long planecoord;
  167. } walltype;
  168. typedef enum
  169. {nothing, playerobj, bonusobj, aquamanobj, wizardobj, trollobj,
  170. wshotobj, blobobj, bshotobj, fmageobj, ramboneobj, robotankobj,
  171. rtshotobj, stompyobj, syshotobj, fmshotobj, rbshotobj, bugobj,
  172. bgshotobj, cyborgdemonobj, invisdudeobj, bounceobj,
  173. eyeobj, reyeobj, rayobj, rshotobj, headobj, hshotobj,
  174. demonobj, pshotobj, grelmobj, freezeobj, solidobj, inertobj,
  175. gateobj, realsolidobj, expobj, bigpshotobj, eshotobj,
  176. gshotobj,
  177. // sshotobj,
  178. // dshotobj
  179. } classtype;
  180. typedef enum {north,east,south,west,northeast,southeast,southwest,
  181. northwest,nodir} dirtype; // a catacombs 2 carryover
  182. typedef struct statestruct
  183. {
  184. int shapenum;
  185. int tictime;
  186. void (*think) ();
  187. struct statestruct far *next;
  188. } statetypestruct;
  189. #define statetype statetypestruct far
  190. #define of_shootable 0x01
  191. #define of_damagedone 0x02
  192. #define of_forcefield 0x40 // defines a solid object as a forcefield???????????
  193. typedef struct objstruct
  194. {
  195. int ticcount; //
  196. statetype *state; // THESE MEMBERS MUST BE IN THE SAME
  197. fixed x,y; // ORDER AS THE MEMBERS DEFINED IN
  198. int viewx; // IOBJSTRUCT OR ALL HELL WILL BREAK
  199. unsigned tilex,tiley; // LOOSE!!
  200. unsigned viewheight; //
  201. unsigned size; //
  202. struct objstruct *next; //
  203. struct objstruct *prev;
  204. enum {no,noalways,yes,always} active;
  205. classtype obclass;
  206. unsigned char flags;
  207. long distance;
  208. dirtype dir;
  209. int angle;
  210. int hitpoints;
  211. long speed;
  212. fixed xl,xh,yl,yh; // hit rectangle
  213. int temp1,temp2;
  214. } objtype;
  215. #if USE_INERT_LIST
  216. #define MAXINERTOBJ 20
  217. typedef struct iobjstruct {
  218. int ticcount;
  219. statetype *state;
  220. fixed x,y;
  221. int viewx;
  222. unsigned tilex,tiley;
  223. unsigned viewheight;
  224. unsigned size;
  225. struct iobjstruct *next;
  226. } inertobjtype;
  227. #endif
  228. typedef enum {ex_stillplaying,ex_died,ex_warped,ex_resetgame
  229. ,ex_loadedgame,ex_victorious,ex_turning,ex_abort} exittype;
  230. typedef enum { S_NONE, S_HELP, S_SND, S_SAVING, S_RESTORING,
  231. S_JOYSTICK, S_RETREAT, S_ADVANCE, S_SIDESTEP, S_QTURN,
  232. S_MISSLE, S_ZAPPER, S_XTER, S_CURING, S_READ,
  233. S_VIEWING, S_ITEMDES, S_DAMAGE, S_TURN, S_TIMESTOP} status_flags;
  234. typedef struct {
  235. char x,y;
  236. unsigned ondoor,underdoor;
  237. } doorinfo;
  238. typedef struct {
  239. char x,y;
  240. short angle;
  241. doorinfo doors[MAX_DOOR_STORAGE];
  242. } levelinfo;
  243. typedef struct
  244. {
  245. int difficulty;
  246. int mapon;
  247. int bolts,nukes,potions,keys[4],scrolls[8];
  248. int gems[5]; // "int allgems[5]" is used for 1:1 comparison
  249. // in play loop for radar... CHANGE IT, TOO!
  250. long score;
  251. int body,shotpower;
  252. short mapwidth,mapheight;
  253. // levelinfo levels[NUMLEVELS];
  254. } gametype;
  255. /*
  256. =============================================================================
  257. C3_MAIN DEFINITIONS
  258. =============================================================================
  259. */
  260. extern char inlevel[][2];
  261. extern char str[80],str2[20];
  262. extern unsigned tedlevelnum;
  263. extern boolean tedlevel;
  264. extern gametype gamestate;
  265. extern exittype playstate;
  266. extern char SlowMode;
  267. extern unsigned Flags;
  268. extern boolean EASYMODEON;
  269. void ExplosionSnd(objtype *ob);
  270. void LargeSound(objtype *ob);
  271. void SmallSound(objtype *ob);
  272. void NewGame (void);
  273. boolean SaveTheGame(int file);
  274. boolean LoadTheGame(int file);
  275. void ResetGame(void);
  276. void ShutdownId (void);
  277. void InitGame (void);
  278. void Quit (char *error, ...);
  279. void TEDDeath(void);
  280. void DemoLoop (void);
  281. void SetupScalePic (unsigned picnum);
  282. void SetupScaleWall (unsigned picnum);
  283. void SetupScaling (void);
  284. void main (void);
  285. void Display320(void);
  286. void Display640(void);
  287. void PrintHelp(void);
  288. /*
  289. =============================================================================
  290. C3_GAME DEFINITIONS
  291. =============================================================================
  292. */
  293. extern unsigned latchpics[NUMLATCHPICS];
  294. extern unsigned tileoffsets[NUMTILE16];
  295. extern unsigned textstarts[27];
  296. #define L_CHARS 0
  297. #define L_NOSHOT 1
  298. #define L_SHOTBAR 2
  299. #define L_NOBODY 3
  300. #define L_BODYBAR 4
  301. void ScanInfoPlane (void);
  302. void ScanText (void);
  303. void SetupGameLevel(void);
  304. void Victory (boolean playsounds);
  305. void Died (void);
  306. void NormalScreen (void);
  307. void DrawPlayScreen (void);
  308. void LoadLatchMem (void);
  309. void FizzleFade (unsigned source, unsigned dest,
  310. unsigned width,unsigned height, boolean abortable);
  311. void FizzleOut (int showlevel);
  312. void FreeUpMemory (void);
  313. void GameLoop (void);
  314. /*
  315. =============================================================================
  316. C3_PLAY DEFINITIONS
  317. =============================================================================
  318. */
  319. #define BGF_NIGHT 0x01 // it is officially night
  320. #define BGF_NOT_LIGHTNING 0x02 // lightning flash has ended
  321. extern byte BGFLAGS,bcolor;
  322. extern unsigned *skycolor,*groundcolor;
  323. extern ControlInfo control;
  324. extern boolean running,slowturn;
  325. extern int bordertime;
  326. extern byte tilemap[MAPSIZE][MAPSIZE];
  327. extern objtype *actorat[MAPSIZE][MAPSIZE];
  328. extern byte spotvis[MAPSIZE][MAPSIZE];
  329. extern objtype objlist[MAXACTORS],*new,*obj,*player;
  330. extern unsigned farmapylookup[MAPSIZE];
  331. extern byte *nearmapylookup[MAPSIZE];
  332. extern byte update[];
  333. extern boolean godmode,singlestep;
  334. extern int extravbls;
  335. extern int mousexmove,mouseymove;
  336. extern int pointcount,pointsleft;
  337. extern status_flags status_flag;
  338. extern int status_delay;
  339. extern objtype dummyobj;
  340. extern short BeepTime;
  341. extern unsigned scolor,gcolor;
  342. void CenterWindow(word w,word h);
  343. void DebugMemory (void);
  344. void PicturePause (void);
  345. int DebugKeys (void);
  346. void CheckKeys (void);
  347. void InitObjList (void);
  348. void GetNewObj (boolean usedummy);
  349. void RemoveObj (objtype *gone);
  350. void PollControlls (void);
  351. void PlayLoop (void);
  352. void InitBgChange(short stimer, unsigned *scolors, short gtimer, unsigned *gcolors, byte flag);
  353. void DisplayStatus (status_flags *stat_flag);
  354. /*
  355. =============================================================================
  356. C3_STATE DEFINITIONS
  357. =============================================================================
  358. */
  359. //void SpawnNewObj (unsigned x, unsigned y, statetype *state, unsigned size);
  360. //void SpawnNewObjFrac (long x, long y, statetype *state, unsigned size);
  361. void Internal_SpawnNewObj (unsigned x, unsigned y, statetype *state, unsigned size, boolean UseDummy, boolean PutInActorat);
  362. void Internal_SpawnNewObjFrac (long x, long y, statetype *state, unsigned size,boolean UseDummy);
  363. #define DSpawnNewObj(x, y, state, size) Internal_SpawnNewObj(x,y,state,size,true,true)
  364. #define SpawnNewObj(x, y, state, size) Internal_SpawnNewObj(x,y,state,size,false,true)
  365. #define ASpawnNewObj(x, y, state, size) Internal_SpawnNewObj(x,y,state,size,false,false)
  366. #define SpawnNewObjFrac(x, y, state, size,Dummy) Internal_SpawnNewObjFrac(x, y, state, size,false)
  367. #define DSpawnNewObjFrac(x, y, state, size) Internal_SpawnNewObjFrac(x, y, state, size,true)
  368. boolean CheckHandAttack (objtype *ob);
  369. void T_DoDamage (objtype *ob);
  370. boolean Walk (objtype *ob);
  371. void ChaseThink (objtype *obj, boolean diagonal);
  372. void MoveObj (objtype *ob, long move);
  373. boolean Chase (objtype *ob, boolean diagonal);
  374. extern dirtype opposite[9];
  375. /*
  376. =============================================================================
  377. C3_TRACE DEFINITIONS
  378. =============================================================================
  379. */
  380. int FollowTrace (fixed tracex, fixed tracey, long deltax, long deltay, int max);
  381. int BackTrace (int finish);
  382. void ForwardTrace (void);
  383. int FinishWall (void);
  384. void InsideCorner (void);
  385. void OutsideCorner (void);
  386. void FollowWalls (void);
  387. extern boolean aborttrace;
  388. /*
  389. =============================================================================
  390. C3_DRAW DEFINITIONS
  391. =============================================================================
  392. */
  393. #define MAXWALLS 50
  394. #define DANGERHIGH 45
  395. #define MIDWALL (MAXWALLS/2)
  396. //==========================================================================
  397. extern tilept tile,lasttile,focal,left,mid,right;
  398. extern globpt edge,view;
  399. extern unsigned screenloc[3];
  400. extern unsigned freelatch;
  401. extern int screenpage;
  402. extern boolean fizzlein;
  403. extern long lasttimecount;
  404. extern int firstangle,lastangle;
  405. extern fixed prestep;
  406. extern int traceclip,tracetop;
  407. extern fixed sintable[ANGLES+ANGLES/4],*costable;
  408. extern fixed viewx,viewy,viewsin,viewcos; // the focal point
  409. extern int viewangle;
  410. extern fixed scale,scaleglobal;
  411. extern unsigned slideofs;
  412. extern int zbuffer[VIEWXH+1];
  413. extern walltype walls[MAXWALLS],*leftwall,*rightwall;
  414. extern fixed tileglobal;
  415. extern fixed focallength;
  416. extern fixed mindist;
  417. extern int viewheight;
  418. extern fixed scale;
  419. extern int far walllight1[NUMFLOORS];
  420. extern int far walldark1[NUMFLOORS];
  421. extern unsigned topcolor,bottomcolor;
  422. extern char wall_anim_info[NUMFLOORS];
  423. extern char wall_anim_pos[NUMFLOORS];
  424. //==========================================================================
  425. void DrawLine (int xl, int xh, int y,int color);
  426. void DrawWall (walltype *wallptr);
  427. void TraceRay (unsigned angle);
  428. fixed FixedByFrac (fixed a, fixed b);
  429. void TransformPoint (fixed gx, fixed gy, int *screenx, unsigned *screenheight);
  430. fixed TransformX (fixed gx, fixed gy);
  431. int FollowTrace (fixed tracex, fixed tracey, long deltax, long deltay, int max);
  432. void ForwardTrace (void);
  433. int FinishWall (void);
  434. int TurnClockwise (void);
  435. int TurnCounterClockwise (void);
  436. void FollowWall (void);
  437. void NewScene (void);
  438. void BuildTables (void);
  439. /*
  440. =============================================================================
  441. C3_SCALE DEFINITIONS
  442. =============================================================================
  443. */
  444. #define COMPSCALECODESTART (65*6) // offset to start of code in comp scaler
  445. typedef struct
  446. {
  447. unsigned codeofs[65];
  448. unsigned start[65];
  449. unsigned width[65];
  450. byte code[];
  451. } t_compscale;
  452. typedef struct
  453. {
  454. unsigned width;
  455. unsigned codeofs[64];
  456. } t_compshape;
  457. extern unsigned scaleblockwidth,
  458. scaleblockheight,
  459. scaleblockdest;
  460. extern byte plotpix[8];
  461. extern byte bitmasks1[8][8];
  462. extern byte bitmasks2[8][8];
  463. extern t_compscale _seg *scaledirectory[NUMSCALEPICS];
  464. extern t_compshape _seg *shapedirectory[NUMSCALEPICS];
  465. extern memptr walldirectory[NUMSCALEWALLS];
  466. extern unsigned shapesize[NUMSCALEPICS];
  467. void DeplanePic (int picnum);
  468. void ScaleShape (int xcenter, t_compshape _seg *compshape, unsigned scale);
  469. unsigned BuildCompShape (t_compshape _seg **finalspot);
  470. /*
  471. =============================================================================
  472. C3_ASM DEFINITIONS
  473. =============================================================================
  474. */
  475. extern unsigned wallheight [VIEWWIDTH];
  476. extern unsigned wallwidth [VIEWWIDTH];
  477. extern unsigned wallseg [VIEWWIDTH];
  478. extern unsigned wallofs [VIEWWIDTH];
  479. extern unsigned screenbyte [VIEWWIDTH];
  480. extern unsigned screenbit [VIEWWIDTH];
  481. extern unsigned bitmasks [64];
  482. extern long wallscalecall;
  483. void ScaleWalls (void);
  484. /*
  485. =============================================================================
  486. C3_WIZ DEFINITIONS
  487. =============================================================================
  488. */
  489. #define MAXHANDHEIGHT 72
  490. extern statetype s_pshot_exp1;
  491. extern statetype s_pshot_exp2;
  492. extern statetype s_pshot_exp3;
  493. extern long lastnuke;
  494. extern int lasttext;
  495. extern int handheight;
  496. extern int boltsleft,bolttimer;
  497. extern short RadarXY[][3];
  498. extern short RotateAngle;
  499. extern short FreezeTime;
  500. //void FaceDir(short x, short y, boolean StopTime);
  501. //short CalcAngle(short dx, short dy);
  502. void FaceAngle(short DestAngle);
  503. void RotateView();
  504. void InitRotate(short DestAngle);
  505. short FaceDoor(short x, short y);
  506. char DisplayMsg(char *text,char *choices);
  507. char DisplaySMsg(char *text,char *choices);
  508. extern statetype s_explode;
  509. void SpawnExplosion(fixed x, fixed y,short Delay);
  510. void T_ExpThink(objtype *obj);
  511. void SpawnBigExplosion(fixed x, fixed y, short Delay, fixed Range);
  512. /*
  513. =============================================================================
  514. C3_ACT1 DEFINITIONS
  515. =============================================================================
  516. */
  517. #define head_mode ob->temp1
  518. #define head_delay ob->temp2
  519. enum head_modes {h_wait_to_rise, h_active, h_other1, h_player1, h_other2,
  520. h_player2, h_other3, h_player3, h_other4, h_player4};
  521. enum shooter_modes {sm_other1, sm_player1, sm_other2, sm_player2, sm_other3,
  522. sm_player3, sm_other4, sm_player4, sm_dummy};
  523. #define MSHOTDAMAGE 2
  524. #define MSHOTSPEED 10000
  525. #define ESHOTDAMAGE 1
  526. #define ESHOTSPEED 5000
  527. #define SSHOTDAMAGE 3
  528. #define SSHOTSPEED 6500
  529. #define RANDOM_ATTACK 20
  530. extern dirtype dirtable[];
  531. extern short other_x[], other_y[];
  532. extern short head_base_delay;
  533. void T_AlternateStates(objtype *ob);
  534. int EasyHitPoints(int NrmHitPts);
  535. int EasyDoDamage(int Damage);
  536. ////////////////////////////////////////////////////////////////////////////
  537. //
  538. // New monsters added for Apocalypse
  539. //
  540. ////////////////////////////////////////////////////////////////////////////
  541. //
  542. // Bonus states
  543. //
  544. extern statetype s_boltbonus;
  545. extern statetype s_boltbonus2;
  546. extern statetype s_boltbonus3;
  547. extern statetype s_nukebonus;
  548. extern statetype s_nukebonus2;
  549. extern statetype s_nukebonus3;
  550. extern statetype s_potionbonus;
  551. extern statetype s_rkeybonus;
  552. extern statetype s_ykeybonus;
  553. extern statetype s_gkeybonus;
  554. extern statetype s_bkeybonus;
  555. extern statetype s_chestbonus;
  556. extern statetype s_oldchestbonus;
  557. extern statetype s_waterchestbonus1;
  558. extern statetype s_waterchestbonus2;
  559. extern statetype s_waterchestbonus3;
  560. extern statetype s_rgem1bonus;
  561. extern statetype s_ygem1bonus;
  562. extern statetype s_ggem1bonus;
  563. extern statetype s_bgem1bonus;
  564. extern statetype s_pgem1bonus;
  565. extern statetype s_bonus_die;
  566. //
  567. // AquaMan states
  568. //
  569. extern statetype s_aqua_under1;
  570. extern statetype s_aqua_under2;
  571. extern statetype s_aqua_under3;
  572. extern statetype s_aqua_left;
  573. extern statetype s_aqua_right;
  574. extern statetype s_aqua_rise1;
  575. extern statetype s_aqua_rise2;
  576. extern statetype s_aqua_sink1;
  577. extern statetype s_aqua_sink2;
  578. extern statetype s_aqua_walk1;
  579. extern statetype s_aqua_walk2;
  580. extern statetype s_aqua_attack1;
  581. extern statetype s_aqua_attack2;
  582. extern statetype s_aqua_die1;
  583. extern statetype s_aqua_die2;
  584. extern statetype s_aqua_die3;
  585. extern statetype s_aqua_die4;
  586. extern statetype s_aqua_die5;
  587. extern statetype s_aqua_die6;
  588. extern statetype s_aqua_die7;
  589. //
  590. // Wizard states
  591. //
  592. extern statetype s_wizard_walk1;
  593. extern statetype s_wizard_walk2;
  594. extern statetype s_wizard_walk3;
  595. extern statetype s_wizard_walk4;
  596. extern statetype s_wizard_attack1;
  597. extern statetype s_wizard_attack2;
  598. extern statetype s_wizard_ouch;
  599. extern statetype s_wizard_die1;
  600. extern statetype s_wizard_die2;
  601. extern statetype s_wizard_die3;
  602. extern statetype s_wizard_die4;
  603. extern statetype s_wizard_shoot1;
  604. extern statetype s_wizard_shoot2;
  605. extern statetype s_wizard_shoot3;
  606. extern statetype s_wizard_shot1;
  607. extern statetype s_wizard_shot2;
  608. //
  609. // Troll states
  610. //
  611. extern statetype s_trollpause;
  612. extern statetype s_troll1;
  613. extern statetype s_troll2;
  614. extern statetype s_troll3;
  615. extern statetype s_troll4;
  616. extern statetype s_trollattack1;
  617. extern statetype s_trollattack2;
  618. extern statetype s_trollouch;
  619. extern statetype s_trolldie1;
  620. extern statetype s_trolldie2;
  621. extern statetype s_trolldie3;
  622. //
  623. // Blob states
  624. //
  625. extern statetype s_blob_gnd1;
  626. extern statetype s_blob_gnd2;
  627. extern statetype s_blob_rise1;
  628. extern statetype s_blob_rise2;
  629. extern statetype s_blob_sink1;
  630. extern statetype s_blob_sink2;
  631. extern statetype s_blob_walk1;
  632. extern statetype s_blob_walk2;
  633. extern statetype s_blob_walk3;
  634. extern statetype s_blob_ouch;
  635. extern statetype s_blob_die1;
  636. extern statetype s_blob_die2;
  637. extern statetype s_blob_die3;
  638. extern statetype s_blob_shot1;
  639. extern statetype s_blob_shot2;
  640. //
  641. // RamBone states
  642. //
  643. extern statetype s_skel_1;
  644. extern statetype s_skel_2;
  645. extern statetype s_skel_3;
  646. extern statetype s_skel_4;
  647. extern statetype s_skel_attack1;
  648. extern statetype s_skel_attack2;
  649. extern statetype s_skel_attack3;
  650. extern statetype s_skel_attack4;
  651. extern statetype s_skel_ouch;
  652. extern statetype s_skel_die1;
  653. extern statetype s_skel_die2;
  654. extern statetype s_skel_die3;
  655. extern statetype s_skel_shot1;
  656. extern statetype s_skel_shot2;
  657. //
  658. // Future Mage states
  659. //
  660. extern statetype s_fmage1;
  661. extern statetype s_fmage2;
  662. extern statetype s_fmage3;
  663. extern statetype s_fmageattack1;
  664. extern statetype s_fmageattack2;
  665. extern statetype s_fmageattack3;
  666. extern statetype s_fmageouch;
  667. extern statetype s_fmagedie1;
  668. extern statetype s_fmagedie2;
  669. extern statetype s_fmagedie3;
  670. extern statetype s_fmshot1;
  671. extern statetype s_fmshot2;
  672. //
  673. // Robo Tank states
  674. //
  675. extern statetype s_robotank_walk1;
  676. extern statetype s_robotank_walk2;
  677. extern statetype s_robotank_walk3;
  678. extern statetype s_robotank_walk4;
  679. extern statetype s_robotank_attack1;
  680. extern statetype s_robotank_attack2;
  681. extern statetype s_robotank_attack3;
  682. extern statetype s_robotank_attack4;
  683. extern statetype s_robotank_death1;
  684. extern statetype s_robotank_death2;
  685. extern statetype s_robotank_death3;
  686. extern statetype s_robotank_death4;
  687. extern statetype s_robotank_death5;
  688. extern statetype s_robotank_shot1;
  689. extern statetype s_robotank_shot2;
  690. //
  691. // Stompy states
  692. //
  693. extern statetype s_stompy_walk1;
  694. extern statetype s_stompy_walk2;
  695. extern statetype s_stompy_walk3;
  696. extern statetype s_stompy_walk4;
  697. extern statetype s_stompy_attack1;
  698. extern statetype s_stompy_attack2;
  699. extern statetype s_stompy_attack3;
  700. extern statetype s_stompy_attack4;
  701. extern statetype s_stompy_ouch;
  702. extern statetype s_stompy_death1;
  703. extern statetype s_stompy_death2;
  704. extern statetype s_stompy_death3;
  705. extern statetype s_stompy_death4;
  706. extern statetype s_stompy_shot1;
  707. extern statetype s_stompy_shot2;
  708. extern statetype s_stompy_shot3;
  709. extern statetype s_stompy_shot4;
  710. extern statetype s_stompy_shot5;
  711. extern statetype s_stompy_shot6;
  712. //
  713. // Bug states
  714. //
  715. extern statetype s_bug_walk1;
  716. extern statetype s_bug_walk2;
  717. extern statetype s_bug_walk3;
  718. extern statetype s_bug_attack1;
  719. extern statetype s_bug_attack2;
  720. extern statetype s_bug_attack3;
  721. extern statetype s_bug_attack4;
  722. extern statetype s_bug_ouch;
  723. extern statetype s_bug_death1;
  724. extern statetype s_bug_death2;
  725. extern statetype s_bug_shot1;
  726. extern statetype s_bug_shot2;
  727. //
  728. // Cyborg states
  729. //
  730. extern statetype s_cyborg_demon1;
  731. extern statetype s_cyborg_demon2;
  732. extern statetype s_cyborg_demon3;
  733. extern statetype s_cyborg_demon4;
  734. extern statetype s_cyborg_demonattack1;
  735. extern statetype s_cyborg_demonattack2;
  736. extern statetype s_cyborg_demonattack3;
  737. extern statetype s_cyborg_demonouch;
  738. extern statetype s_cyborg_demondie1;
  739. extern statetype s_cyborg_demondie2;
  740. extern statetype s_cyborg_demondie3;
  741. //
  742. // Invisible Dude
  743. //
  744. extern statetype s_invis_fizz1;
  745. extern statetype s_invis_fizz2;
  746. extern statetype s_invis_fizz3;
  747. extern statetype s_invis_walk;
  748. extern statetype s_invis_attack;
  749. extern statetype s_invis_pause;
  750. extern statetype s_invis_flash1;
  751. extern statetype s_invis_flash2;
  752. extern statetype s_invis_flash3;
  753. extern statetype s_invis_death1;
  754. extern statetype s_invis_death2;
  755. extern statetype s_invis_death3;
  756. //
  757. // Bounce
  758. //
  759. extern statetype s_bounce1;
  760. extern statetype s_bounce2;
  761. //
  762. // Grelminar or Nemesis
  763. //
  764. extern statetype s_grelpause;
  765. extern statetype s_grel1;
  766. extern statetype s_grel2;
  767. extern statetype s_grelattack3;
  768. extern statetype s_grelouch;
  769. extern statetype s_greldie1;
  770. extern statetype s_greldie2;
  771. extern statetype s_greldie3;
  772. extern statetype s_greldie4;
  773. extern statetype s_greldie5;
  774. extern statetype s_greldie5a;
  775. extern statetype s_greldie6;
  776. extern statetype s_gshot1;
  777. //
  778. // Eye states - shooting eye
  779. //
  780. extern statetype s_eye_pause;
  781. extern statetype s_eye_1;
  782. extern statetype s_eye_2;
  783. extern statetype s_eye_3;
  784. extern statetype s_eye_4;
  785. extern statetype s_eye_shootplayer_1;
  786. extern statetype s_eye_shootplayer_2;
  787. extern statetype s_eye_ouch;
  788. extern statetype s_eye_ouch2;
  789. extern statetype s_eye_die1;
  790. extern statetype s_eye_die2;
  791. extern statetype s_eye_die3;
  792. extern statetype s_eye_die4;
  793. extern statetype s_eshot1;
  794. extern statetype s_eshot2;
  795. //
  796. // Running Eye states
  797. //
  798. extern statetype s_reye_1;
  799. extern statetype s_reye_2;
  800. extern statetype s_reye_3;
  801. extern statetype s_reye_4;
  802. extern statetype s_reye_ouch;
  803. extern statetype s_reye_ouch2;
  804. extern statetype s_reye_die1;
  805. extern statetype s_reye_die2;
  806. extern statetype s_reye_die3;
  807. extern statetype s_reye_die4;
  808. //
  809. // Ray states
  810. //
  811. extern statetype s_ray_under;
  812. extern statetype s_ray_rise;
  813. extern statetype s_ray_sink;
  814. extern statetype s_ray_fly1;
  815. extern statetype s_ray_fly2;
  816. extern statetype s_ray_fly3;
  817. extern statetype s_ray_fly4;
  818. extern statetype s_ray_attack1;
  819. extern statetype s_ray_attack2;
  820. extern statetype s_ray_attack3;
  821. extern statetype s_ray_die1;
  822. extern statetype s_ray_die2;
  823. extern statetype s_ray_shot1;
  824. extern statetype s_ray_shot2;
  825. //
  826. // Portal states
  827. //
  828. extern statetype s_portal1;
  829. extern statetype s_portal2;
  830. extern statetype s_portal3;
  831. extern statetype s_portal4;
  832. extern statetype s_portal5;
  833. extern statetype s_portal6;
  834. //
  835. // Misc states
  836. //
  837. extern statetype s_column1;
  838. extern statetype s_column2;
  839. extern statetype s_column3;
  840. extern statetype s_column4;
  841. extern statetype s_column5;
  842. extern statetype s_ffire_pot;
  843. extern statetype s_ofire_pot1;
  844. extern statetype s_ofire_pot2;
  845. extern statetype s_tomb1;
  846. extern statetype s_tomb2;
  847. extern statetype s_tomb3;
  848. //
  849. // Force Field states
  850. //
  851. extern statetype s_force_field_1;
  852. extern statetype s_force_field_2;
  853. extern statetype s_force_field_3;
  854. extern statetype s_force_field_4;
  855. extern statetype s_force_field_die;
  856. extern statetype s_force_field_die1;
  857. //
  858. // Egyptian head states
  859. //
  860. extern statetype s_head;
  861. extern statetype s_head_shot1;
  862. extern statetype s_head_shot2;
  863. //
  864. // Blue Demon states
  865. //
  866. extern statetype s_demonpause;
  867. extern statetype s_demon1;
  868. extern statetype s_demon2;
  869. extern statetype s_demon3;
  870. extern statetype s_demon4;
  871. extern statetype s_demonattack1;
  872. extern statetype s_demonattack2;
  873. extern statetype s_demonattack3;
  874. extern statetype s_demonouch;
  875. extern statetype s_demondie1;
  876. extern statetype s_demondie2;
  877. extern statetype s_demondie3;