]> icculus.org git repositories - theoddone33/hhexen.git/blob - include/h2def.h
Drop in SDL
[theoddone33/hhexen.git] / include / h2def.h
1
2 //**************************************************************************
3 //**
4 //** h2def.h : Heretic 2 : Raven Software, Corp.
5 //**
6 //** $RCSfile$
7 //** $Revision$
8 //** $Date$
9 //** $Author$
10 //**
11 //**************************************************************************
12
13 #ifndef __H2DEF__
14 #define __H2DEF__
15 #include <config.h>
16 #include <stdio.h>
17 #include <string.h>
18 #include <stdlib.h>
19 #include "st_start.h"
20 #ifdef __linux
21 #include <sys/types.h>
22 #endif
23
24 #define VERSION 110
25 #define VERSION_TEXT "v1.1"
26 #define HHEXEN_VERSION "1.4"
27
28 #if defined(__linux)
29 #define VERSION_PLATFORM "Linux"
30 #elif defined (__FreeBSD__)
31 #define VERSION_PLATFORM "FreeBSD"
32 #elif defined (WIN32)
33 #define VERSION_PLATFORM "Windows"
34 #else
35 #define VERSION_PLATFORM "Unknown"
36 #endif
37 #define VERSION_MAJ 1
38 #define VERSION_MIN 4
39
40 // Uncomment, to enable all timebomb stuff
41 //#define TIMEBOMB
42 #define TIMEBOMB_YEAR   95              // years since 1900
43 #define TIMEBOMB_STARTDATE      268     // initial date (9/26)
44 #define TIMEBOMB_ENDDATE        301     // end date (10/29)
45
46 // if rangecheck is undefined, most parameter validation debugging code
47 // will not be compiled
48 #ifndef NORANGECHECKING
49 #define RANGECHECK
50 #endif
51
52 // Past distributions
53 #ifndef VER_ID
54 #define VER_ID "DVL"
55 #endif
56 //#define VERSIONTEXT "ID V1.2"
57 //#define VERSIONTEXT "RETAIL STORE BETA"               // 9/26/95
58 //#define VERSIONTEXT "DVL BETA 10 05 95" // Used for GT for testing
59 //#define VERSIONTEXT "DVL BETA 10 07 95" // Just an update for Romero
60 //#define VERSIONTEXT "FINAL 1.0 (10 13 95)" // Just an update for Romero
61 #ifdef __linux
62 #ifdef RANGECHECK
63 #define VERSIONTEXT "Version 1.3 +R "__DATE__" (BCP)"
64 #else
65 #define VERSIONTEXT "Version 1.3 "__DATE__" (BCP)"
66 #endif
67 #else
68 #ifdef RANGECHECK
69 #define VERSIONTEXT "Version 1.3 +R "__DATE__" ("VER_ID")"
70 #else
71 #define VERSIONTEXT "Version 1.3 "__DATE__" ("VER_ID")"
72 #endif
73 #endif
74
75 // all exterior data is defined here
76 #include "xddefs.h"
77
78 // all important printed strings
79 #include "textdefs.h"
80
81 // header generated by multigen utility
82 #include "info.h"
83
84 extern byte *destview, *destscreen;     // PC direct to screen pointers
85
86 //
87 // most key data are simple ascii (uppercased)
88 //
89 #define KEY_RIGHTARROW          0xae
90 #define KEY_LEFTARROW           0xac
91 #define KEY_UPARROW                     0xad
92 #define KEY_DOWNARROW           0xaf
93 #define KEY_ESCAPE                      27
94 #define KEY_ENTER                       13
95 #define KEY_F1                          (0x80+0x3b)
96 #define KEY_F2                          (0x80+0x3c)
97 #define KEY_F3                          (0x80+0x3d)
98 #define KEY_F4                          (0x80+0x3e)
99 #define KEY_F5                          (0x80+0x3f)
100 #define KEY_F6                          (0x80+0x40)
101 #define KEY_F7                          (0x80+0x41)
102 #define KEY_F8                          (0x80+0x42)
103 #define KEY_F9                          (0x80+0x43)
104 #define KEY_F10                         (0x80+0x44)
105 #define KEY_F11                         (0x80+0x57)
106 #define KEY_F12                         (0x80+0x58)
107
108 #define KEY_BACKSPACE           127
109 #define KEY_PAUSE                       0xff
110
111 #define KEY_EQUALS                      0x3d
112 #define KEY_MINUS                       0x2d
113
114 #define KEY_RSHIFT                      (0x80+0x36)
115 #define KEY_RCTRL                       (0x80+0x1d)
116 #define KEY_RALT                        (0x80+0x38)
117
118 #define KEY_LALT                        KEY_RALT
119
120 #define KEY_FIVE                        0x35
121 #define KEY_SIX                         0x36
122 #define KEY_SEVEN                       0x37
123 #define KEY_EIGHT                       0x38
124 #define KEY_NINE                        0x39
125 #define KEY_ZERO                        0x30
126 #define KEY_BACKSLASH           0x5C
127
128
129 #define MAXCHAR ((char)0x7f)
130 #define MAXSHORT ((short)0x7fff)
131 #define MAXINT  ((int)0x7fffffff)       /* max pos 32-bit int */
132 #define MAXLONG ((long)0x7fffffff)
133
134 #define MINCHAR ((char)0x80)
135 #define MINSHORT ((short)0x8000)
136 #define MININT  ((int)0x80000000)       /* max negative 32-bit integer */
137 #define MINLONG ((long)0x80000000)
138
139 #define FINEANGLES                      8192
140 #define FINEMASK                        (FINEANGLES-1)
141 #define ANGLETOFINESHIFT        19      // 0x100000000 to 0x2000
142
143 /*
144 ===============================================================================
145
146                                                 GLOBAL TYPES
147
148 ===============================================================================
149 */
150
151 //#define NUMARTIFCTS   28
152 #define MAXPLAYERS      8
153 #define TICRATE         35                      // number of tics / second
154 #define TICSPERSEC      35
155
156 #define MINIMUM_HEAP_SIZE       0x800000                //  8 meg
157 #define MAXIMUM_HEAP_SIZE       0x2000000               // 32 meg
158
159 #define FRACBITS                16
160 #define FRACUNIT                (1<<FRACBITS)
161 typedef int fixed_t;
162
163 #ifndef __linux
164 typedef unsigned int uint;
165 #endif
166
167 //#define ANGLE_1               0x01000000
168 #define ANGLE_45        0x20000000
169 #define ANGLE_90        0x40000000
170 #define ANGLE_180       0x80000000
171 #define ANGLE_MAX       0xffffffff
172 #define ANGLE_1         (ANGLE_45/45)
173 #define ANGLE_60        (ANGLE_180/3)
174
175 #define ANG45   0x20000000
176 #define ANG90   0x40000000
177 #define ANG180  0x80000000
178 #define ANG270  0xc0000000
179
180 typedef unsigned angle_t;
181
182 typedef enum
183 {
184         sk_baby,
185         sk_easy,
186         sk_medium,
187         sk_hard,
188         sk_nightmare
189 } skill_t;
190
191 typedef enum
192 {
193         ev_keydown,
194         ev_keyup,
195         ev_mouse,
196         ev_joystick
197 } evtype_t;
198
199 typedef struct
200 {
201         evtype_t        type;
202         int                     data1;          // keys / mouse/joystick buttons
203         int                     data2;          // mouse/joystick x move
204         int                     data3;          // mouse/joystick y move
205 } event_t;
206
207 typedef struct
208 {
209         char            forwardmove;            // *2048 for move
210         char            sidemove;                       // *2048 for move
211         short           angleturn;                      // <<16 for angle delta
212         short           consistancy;            // checks for net game
213         byte            chatchar;
214         byte            buttons;
215         byte            lookfly;                        // look/fly up/down/centering
216         byte            arti;                           // artitype_t to use
217 } ticcmd_t;
218
219 #define BT_ATTACK               1
220 #define BT_USE                  2
221 #define BT_CHANGE               4                       // if true, the next 3 bits hold weapon num
222 #define BT_WEAPONMASK   (8+16+32)
223 #define BT_WEAPONSHIFT  3
224
225 #define BT_SPECIAL              128                     // game events, not really buttons
226 #define BTS_SAVEMASK    (4+8+16)
227 #define BTS_SAVESHIFT   2
228 #define BT_SPECIALMASK  3
229 #define BTS_PAUSE               1                       // pause the game
230 #define BTS_SAVEGAME    2                       // save the game at each console
231 // savegame slot numbers occupy the second byte of buttons
232
233 // The top 3 bits of the artifact field in the ticcmd_t struct are used
234 //              as additional flags 
235 #define AFLAG_MASK                      0x3F
236 #define AFLAG_SUICIDE           0x40
237 #define AFLAG_JUMP                      0x80
238
239 typedef enum
240 {
241         GS_LEVEL,
242         GS_INTERMISSION,
243         GS_FINALE,
244         GS_DEMOSCREEN
245 } gamestate_t;
246
247 typedef enum
248 {
249         ga_nothing,
250         ga_loadlevel,
251         ga_initnew,
252         ga_newgame,
253         ga_loadgame,
254         ga_savegame,
255         ga_playdemo,
256         ga_completed,
257         ga_leavemap,
258         ga_singlereborn,
259         ga_victory,
260         ga_worlddone,
261         ga_screenshot
262 } gameaction_t;
263
264 typedef enum
265 {
266         wipe_0,
267         wipe_1,
268         wipe_2,
269         wipe_3,
270         wipe_4,
271         NUMWIPES,
272         wipe_random
273 } wipe_t;
274
275 typedef struct
276 {
277         char    *name;
278         int     *location;
279         int     defaultvalue;
280         int     scantranslate;      // PC scan code hack
281         int     untranslated;       // lousy hack
282 } default_t;
283 /*
284 ===============================================================================
285
286                                                         MAPOBJ DATA
287
288 ===============================================================================
289 */
290
291 // think_t is a function pointer to a routine to handle an actor
292 typedef void (*think_t) ();
293
294 typedef struct thinker_s
295 {
296         struct          thinker_s       *prev, *next;
297         think_t         function;
298 } thinker_t;
299
300 struct player_s;
301
302 typedef struct mobj_s
303 {
304         thinker_t               thinker;                        // thinker node
305
306 // info for drawing
307         fixed_t                 x,y,z;
308         struct  mobj_s  *snext, *sprev;         // links in sector (if needed)
309         angle_t                 angle;
310         spritenum_t             sprite;                         // used to find patch_t and flip value
311         int                             frame;                          // might be ord with FF_FULLBRIGHT
312
313 // interaction info
314         struct mobj_s   *bnext, *bprev;         // links in blocks (if needed)
315         struct subsector_s      *subsector;
316         fixed_t                 floorz, ceilingz;       // closest together of contacted secs
317         fixed_t                 floorpic;                       // contacted sec floorpic
318         fixed_t                 radius, height;         // for movement checking
319         fixed_t                 momx, momy, momz;       // momentums
320         int                             validcount;                     // if == validcount, already checked
321         mobjtype_t              type;
322         mobjinfo_t              *info;                          // &mobjinfo[mobj->type]
323         int                             tics;                           // state tic counter
324         state_t                 *state;
325         int                             damage;                 // For missiles
326         int                             flags;
327         int                             flags2;                 // Heretic flags
328         int                             special1;               // Special info
329         int                             special2;               // Special info
330         int                             health;
331         int                             movedir;                // 0-7
332         int                             movecount;              // when 0, select a new dir
333         struct mobj_s   *target;                // thing being chased/attacked (or NULL)
334                                                                         // also the originator for missiles
335         int                             reactiontime;   // if non 0, don't attack yet
336                                                                         // used by player to freeze a bit after
337                                                                         // teleporting
338         int                             threshold;              // if > 0, the target will be chased
339                                                                         // no matter what (even if shot)
340         struct player_s *player;                // only valid if type == MT_PLAYER
341         int                             lastlook;               // player number last looked for
342         fixed_t                 floorclip;              // value to use for floor clipping
343         int                             archiveNum;             // Identity during archive
344         short                   tid;                    // thing identifier
345         byte                    special;                // special
346         byte                    args[5];                // special arguments
347 } mobj_t;
348
349 // each sector has a degenmobj_t in it's center for sound origin purposes
350 typedef struct
351 {
352         thinker_t               thinker;                // not used for anything
353         fixed_t                 x,y,z;
354 } degenmobj_t;
355
356 // Most damage defined using HITDICE
357 #define HITDICE(a) ((1+(P_Random()&7))*a)
358
359 //
360 // frame flags
361 //
362 #define FF_FULLBRIGHT   0x8000          // flag in thing->frame
363 #define FF_FRAMEMASK    0x7fff
364
365 // --- mobj.flags ---
366
367 #define MF_SPECIAL              1                       // call P_SpecialThing when touched
368 #define MF_SOLID                2
369 #define MF_SHOOTABLE    4
370 #define MF_NOSECTOR             8                       // don't use the sector links
371                                                                         // (invisible but touchable)
372 #define MF_NOBLOCKMAP   16                      // don't use the blocklinks
373                                                                         // (inert but displayable)
374 #define MF_AMBUSH               32
375 #define MF_JUSTHIT              64                      // try to attack right back
376 #define MF_JUSTATTACKED 128                     // take at least one step before attacking
377 #define MF_SPAWNCEILING 256                     // hang from ceiling instead of floor
378 #define MF_NOGRAVITY    512                     // don't apply gravity every tic
379
380 // movement flags
381 #define MF_DROPOFF              0x400           // allow jumps from high places
382 #define MF_PICKUP               0x800           // for players to pick up items
383 #define MF_NOCLIP               0x1000          // player cheat
384 #define MF_SLIDE                0x2000          // keep info about sliding along walls
385 #define MF_FLOAT                0x4000          // allow moves to any height, no gravity
386 #define MF_TELEPORT             0x8000          // don't cross lines or look at heights
387 #define MF_MISSILE              0x10000         // don't hit same species, explode on block
388
389 #define MF_ALTSHADOW    0x20000         // alternate fuzzy draw
390 #define MF_SHADOW               0x40000         // use fuzzy draw (shadow demons / invis)
391 #define MF_NOBLOOD              0x80000         // don't bleed when shot (use puff)
392 #define MF_CORPSE               0x100000        // don't stop moving halfway off a step
393 #define MF_INFLOAT              0x200000        // floating to a height for a move, don't
394                                                                         // auto float to target's height
395
396 #define MF_COUNTKILL    0x400000        // count towards intermission kill total
397 #define MF_ICECORPSE    0x800000        // a frozen corpse (for blasting)
398
399 #define MF_SKULLFLY             0x1000000       // skull in flight
400 #define MF_NOTDMATCH    0x2000000       // don't spawn in death match (key cards)
401
402 //#define       MF_TRANSLATION  0xc000000       // if 0x4 0x8 or 0xc, use a translation
403 #define MF_TRANSLATION  0x1c000000      // use a translation table (>>MF_TRANSHIFT)
404 #define MF_TRANSSHIFT   26                      // table for player colormaps
405
406
407 // --- mobj.flags2 ---
408
409 #define MF2_LOGRAV                      0x00000001      // alternate gravity setting
410 #define MF2_WINDTHRUST          0x00000002      // gets pushed around by the wind
411                                                                                 // specials
412 #define MF2_FLOORBOUNCE         0x00000004      // bounces off the floor
413 #define MF2_BLASTED                     0x00000008      // missile will pass through ghosts
414 #define MF2_FLY                         0x00000010      // fly mode is active
415 #define MF2_FLOORCLIP           0x00000020      // if feet are allowed to be clipped
416 #define MF2_SPAWNFLOAT          0x00000040      // spawn random float z
417 #define MF2_NOTELEPORT          0x00000080      // does not teleport
418 #define MF2_RIP                         0x00000100      // missile rips through solid
419                                                                                 // targets
420 #define MF2_PUSHABLE            0x00000200      // can be pushed by other moving
421                                                                                 // mobjs
422 #define MF2_SLIDE                       0x00000400      // slides against walls
423 #define MF2_ONMOBJ                      0x00000800      // mobj is resting on top of another
424                                                                                 // mobj
425 #define MF2_PASSMOBJ            0x00001000      // Enable z block checking.  If on,
426                                                                                 // this flag will allow the mobj to
427                                                                                 // pass over/under other mobjs.
428 #define MF2_CANNOTPUSH          0x00002000      // cannot push other pushable mobjs
429 #define MF2_DROPPED                     0x00004000      // dropped by a demon
430 #define MF2_BOSS                        0x00008000      // mobj is a major boss
431 #define MF2_FIREDAMAGE          0x00010000      // does fire damage
432 #define MF2_NODMGTHRUST         0x00020000      // does not thrust target when
433                                                                                 // damaging
434 #define MF2_TELESTOMP           0x00040000      // mobj can stomp another
435 #define MF2_FLOATBOB            0x00080000      // use float bobbing z movement
436 #define MF2_DONTDRAW            0x00100000      // don't generate a vissprite
437 #define MF2_IMPACT                      0x00200000      // an MF_MISSILE mobj can activate
438                                                                                 // SPAC_IMPACT
439 #define MF2_PUSHWALL            0x00400000      // mobj can push walls
440 #define MF2_MCROSS                      0x00800000      // can activate monster cross lines
441 #define MF2_PCROSS                      0x01000000      // can activate projectile cross lines
442 #define MF2_CANTLEAVEFLOORPIC 0x02000000 // stay within a certain floor type
443 #define MF2_NONSHOOTABLE        0x04000000      // mobj is totally non-shootable, 
444                                                                                 // but still considered solid
445 #define MF2_INVULNERABLE        0x08000000      // mobj is invulnerable
446 #define MF2_DORMANT                     0x10000000      // thing is dormant
447 #define MF2_ICEDAMAGE           0x20000000  // does ice damage
448 #define MF2_SEEKERMISSILE       0x40000000      // is a seeker (for reflection)
449 #define MF2_REFLECTIVE          0x80000000      // reflects missiles
450
451 //=============================================================================
452
453 // ===== Player Class Types =====
454 typedef enum
455 {
456         PCLASS_FIGHTER,
457         PCLASS_CLERIC,
458         PCLASS_MAGE,
459         PCLASS_ASS,
460         PCLASS_PIG,
461         NUMCLASSES
462 } pclass_t;
463
464 typedef enum
465 {
466         PST_LIVE,                       // playing
467         PST_DEAD,                       // dead on the ground
468         PST_REBORN                      // ready to restart
469 } playerstate_t;
470
471 // psprites are scaled shapes directly on the view screen
472 // coordinates are given for a 320*200 view screen
473 typedef enum
474 {
475         ps_weapon,
476         ps_flash,
477         NUMPSPRITES
478 } psprnum_t;
479
480 typedef struct
481 {
482         state_t *state;         // a NULL state means not active
483         int             tics;
484         fixed_t sx, sy;
485 } pspdef_t;
486
487 /* Old Heretic key type
488 typedef enum
489 {
490         key_yellow,
491         key_green,
492         key_blue,
493         NUMKEYS
494 } keytype_t;
495 */
496
497 typedef enum
498 {
499         KEY_1,
500         KEY_2,
501         KEY_3,
502         KEY_4,
503         KEY_5,
504         KEY_6,
505         KEY_7,
506         KEY_8,
507         KEY_9,
508         KEY_A,
509         KEY_B,
510         NUMKEYS
511 } keytype_t;
512
513 typedef enum
514 {
515         ARMOR_ARMOR,
516         ARMOR_SHIELD,
517         ARMOR_HELMET,
518         ARMOR_AMULET,
519         NUMARMOR
520 } armortype_t;
521
522 typedef enum
523 {
524         WP_FIRST,
525         WP_SECOND,
526         WP_THIRD,
527         WP_FOURTH,
528         NUMWEAPONS,
529         WP_NOCHANGE
530 } weapontype_t;
531         
532 typedef enum
533 {
534         MANA_1,
535         MANA_2,
536         NUMMANA,
537         MANA_BOTH,
538         MANA_NONE
539 } manatype_t;
540
541 #define MAX_MANA        200
542
543 #define WPIECE1         1
544 #define WPIECE2         2
545 #define WPIECE3         4
546
547 typedef struct
548 {
549         manatype_t mana;
550         int upstate;
551         int downstate;
552         int readystate;
553         int atkstate;
554         int holdatkstate;
555         int flashstate;
556 } weaponinfo_t;
557
558 extern weaponinfo_t WeaponInfo[NUMWEAPONS][NUMCLASSES];
559
560 typedef enum
561 {
562         arti_none,
563         arti_invulnerability,
564         arti_health,
565         arti_superhealth,
566         arti_healingradius,
567         arti_summon,
568         arti_torch,
569         arti_egg,
570         arti_fly,
571         arti_blastradius,
572         arti_poisonbag,
573         arti_teleportother,
574         arti_speed,
575         arti_boostmana,
576         arti_boostarmor,
577         arti_teleport,
578         // Puzzle artifacts
579         arti_firstpuzzitem,
580         arti_puzzskull = arti_firstpuzzitem,
581         arti_puzzgembig,
582         arti_puzzgemred,
583         arti_puzzgemgreen1,
584         arti_puzzgemgreen2,
585         arti_puzzgemblue1,
586         arti_puzzgemblue2,
587         arti_puzzbook1,
588         arti_puzzbook2,
589         arti_puzzskull2,
590         arti_puzzfweapon,
591         arti_puzzcweapon,
592         arti_puzzmweapon,
593         arti_puzzgear1,
594         arti_puzzgear2,
595         arti_puzzgear3,
596         arti_puzzgear4,
597         NUMARTIFACTS
598 } artitype_t;
599
600 typedef enum
601 {
602         pw_None,
603         pw_invulnerability,
604         pw_allmap,
605         pw_infrared,
606         pw_flight,
607         pw_shield,
608         pw_health2,
609         pw_speed,
610         pw_minotaur,
611         NUMPOWERS
612 } powertype_t;
613
614 #define INVULNTICS (30*35)
615 #define INVISTICS (60*35)
616 #define INFRATICS (120*35)
617 #define IRONTICS (60*35)
618 #define WPNLEV2TICS (40*35)
619 #define FLIGHTTICS (60*35)
620 #define SPEEDTICS (45*35)
621 #define MORPHTICS (40*35)
622 #define MAULATORTICS (25*35)
623
624 #define MESSAGETICS (4*35)
625 #define BLINKTHRESHOLD (4*35)
626
627 #define NUMINVENTORYSLOTS       NUMARTIFACTS
628
629 typedef struct
630 {
631         int type;
632         int count;
633 } inventory_t;
634
635 /*
636 ================
637 =
638 = player_t
639 =
640 ================
641 */
642
643 typedef struct player_s
644 {
645         mobj_t *mo;
646         playerstate_t playerstate;
647         ticcmd_t cmd;
648
649 #if defined( __cplusplus )
650         pclass_t        c_class;                                        // player class type
651 #else
652         pclass_t        class;                                  // player class type
653 #endif
654
655         fixed_t         viewz;                                  // focal origin above r.z
656         fixed_t         viewheight;                             // base height above floor for viewz
657         fixed_t         deltaviewheight;                // squat speed
658         fixed_t         bob;                                    // bounded/scaled total momentum
659
660         int                     flyheight;
661         int                     lookdir;
662         boolean         centering;
663         int                     health;                                 // only used between levels, mo->health
664                                                                                 // is used during levels
665         int     armorpoints[NUMARMOR];
666
667         inventory_t     inventory[NUMINVENTORYSLOTS];
668         artitype_t      readyArtifact;
669         int                     artifactCount;
670         int             inventorySlotNum;
671         int                     powers[NUMPOWERS];
672         int                     keys;
673         int                     pieces;                                 // Fourth Weapon pieces
674         signed int                      frags[MAXPLAYERS];              // kills of other players
675         weapontype_t    readyweapon;
676         weapontype_t    pendingweapon;          // wp_nochange if not changing
677         boolean         weaponowned[NUMWEAPONS];
678         int                     mana[NUMMANA];
679         int                     attackdown, usedown;    // true if button down last tic
680         int                     cheats;                                 // bit flags
681
682         int                     refire;                                 // refired shots are less accurate
683
684         int                     killcount, itemcount, secretcount;              // for intermission
685         char            message[80];                    // hint messages
686         int                     messageTics;                    // counter for showing messages
687         short           ultimateMessage;
688         short           yellowMessage;
689         int                     damagecount, bonuscount;// for screen flashing
690         int                     poisoncount;                    // screen flash for poison damage
691         mobj_t          *poisoner;                              // NULL for non-player mobjs
692         mobj_t          *attacker;                              // who did damage (NULL for floors)
693         int                     extralight;                             // so gun flashes light up areas
694         int                     fixedcolormap;                  // can be set to REDCOLORMAP, etc
695         int                     colormap;                               // 0-3 for which color to draw player
696         pspdef_t        psprites[NUMPSPRITES];  // view sprites (gun, etc)
697         int                     morphTics;                              // player is a pig if > 0
698         uint            jumpTics;                               // delay the next jump for a moment
699         unsigned int worldTimer;                        // total time the player's been playing
700 } player_t;
701
702 #define CF_NOCLIP               1
703 #define CF_GODMODE              2
704 #define CF_NOMOMENTUM   4 // not really a cheat, just a debug aid
705
706
707 #define         BACKUPTICS              12
708
709 typedef struct
710 {
711         unsigned        checksum;                                       // high bit is retransmit request
712         byte            retransmitfrom;                         // only valid if NCMD_RETRANSMIT
713         byte            starttic;
714         byte            player, numtics;
715         ticcmd_t        cmds[BACKUPTICS];
716 } doomdata_t;
717
718 typedef struct
719 {
720         long    id;
721         short   intnum;                 // DOOM executes an int to execute commands
722
723 // communication between DOOM and the driver
724         short   command;                // CMD_SEND or CMD_GET
725         short   remotenode;             // dest for send, set by get (-1 = no packet)
726         short   datalength;             // bytes in doomdata to be sent
727
728 // info common to all nodes
729         short   numnodes;               // console is allways node 0
730         short   ticdup;                 // 1 = no duplication, 2-5 = dup for slow nets
731         short   extratics;              // 1 = send a backup tic in every packet
732         short   deathmatch;             // 1 = deathmatch
733         short   savegame;               // -1 = new game, 0-5 = load savegame
734         short   episode;                // 1-3
735         short   map;                    // 1-9
736         short   skill;                  // 1-5
737
738 // info specific to this node
739         short   consoleplayer;
740         short   numplayers;
741         short   angleoffset;    // 1 = left, 0 = center, -1 = right
742         short   drone;                  // 1 = drone
743
744 // packet data to be sent
745         doomdata_t      data;
746 } doomcom_t;
747
748 #define DOOMCOM_ID              0x12345678l
749
750 extern  doomcom_t               *doomcom;
751 extern  doomdata_t              *netbuffer;             // points inside doomcom
752
753 #define MAXNETNODES             16                      // max computers in a game
754
755 #define CMD_SEND        1
756 #define CMD_GET         2
757 #define CMD_FRAG        3
758
759 #define SBARHEIGHT      39                      // status bar height at bottom of screen
760
761 void NET_SendFrags(player_t *player);
762
763 /*
764 ===============================================================================
765
766                                         GLOBAL VARIABLES
767
768 ===============================================================================
769 */
770
771 #define TELEFOGHEIGHT (32*FRACUNIT)
772
773 #define MAXEVENTS 64
774
775 extern event_t events[MAXEVENTS];
776 extern int eventhead;
777 extern int eventtail;
778
779 extern fixed_t finesine[5*FINEANGLES/4];
780 extern fixed_t *finecosine;
781
782 extern gameaction_t gameaction;
783
784 extern boolean paused;
785
786 extern boolean shareware; // true if other episodes not present
787
788 extern boolean DevMaps; // true = map development mode
789 extern char *DevMapsDir; // development maps directory
790
791 extern boolean nomonsters; // checkparm of -nomonsters
792
793 extern boolean respawnparm; // checkparm of -respawn
794
795 extern boolean randomclass; // checkparm of -randclass
796
797 extern boolean debugmode; // checkparm of -debug
798
799 extern boolean usergame; // ok to save / end game
800
801 extern boolean ravpic; // checkparm of -ravpic
802
803 extern boolean altpal; // checkparm to use an alternate palette routine
804
805 extern boolean cdrom; // true if cd-rom mode active ("-cdrom")
806
807 extern boolean deathmatch; // only if started as net death
808
809 extern boolean netgame; // only true if >1 player
810
811 extern boolean cmdfrag; // true if a CMD_FRAG packet should be sent out every
812                                                 // kill
813
814 extern boolean playeringame[MAXPLAYERS];
815 extern pclass_t PlayerClass[MAXPLAYERS];
816
817 extern int consoleplayer; // player taking events and displaying
818
819 extern int displayplayer;
820
821 extern int viewangleoffset;     // ANG90 = left side, ANG270 = right
822
823 extern player_t players[MAXPLAYERS];
824
825 extern  boolean         singletics;                     // debug flag to cancel adaptiveness
826
827 extern boolean DebugSound; // debug flag for displaying sound info
828
829 extern boolean demoplayback;
830 extern int maxzone;                             // Maximum chunk allocated for zone heap
831
832 extern int Sky1Texture;
833 extern int Sky2Texture;
834
835 extern  gamestate_t     gamestate;
836 extern  skill_t         gameskill;
837 //extern        boolean         respawnmonsters;
838 extern  int                     gameepisode;
839 extern  int                     gamemap;
840 extern  int                     prevmap;
841 extern  int                     levelstarttic;          // gametic at level start
842 extern  int                     leveltime;                      // tics in game play for par
843
844 extern  ticcmd_t        netcmds[MAXPLAYERS][BACKUPTICS];
845 extern int ticdup;
846
847 //#define       MAXNETNODES             8
848
849 extern  ticcmd_t                localcmds[BACKUPTICS];
850 extern int rndindex;
851 extern int gametic, maketic;
852 extern  int             nettics[MAXNETNODES];
853
854 #define MAXDEATHMATCHSTARTS 16
855 extern mapthing_t *deathmatch_p;
856 extern mapthing_t deathmatchstarts[MAXDEATHMATCHSTARTS];
857
858 // Position indicator for cooperative net-play reborn
859 extern int RebornPosition;
860
861 #define MAX_PLAYER_STARTS 8
862 extern mapthing_t playerstarts[MAX_PLAYER_STARTS][MAXPLAYERS];
863
864 extern int viewwindowx;
865 extern int viewwindowy;
866 extern int viewwidth;
867 extern int scaledviewwidth;
868 extern int viewheight;
869
870 extern int mouseSensitivity;
871
872 extern boolean precache; // if true, load all graphics at level load
873
874 extern byte *screen; // off screen work buffer, from V_video.c
875
876 extern boolean singledemo; // quit after playing a demo from cmdline
877
878 extern FILE *debugfile;
879 extern int bodyqueslot;
880 extern skill_t startskill;
881 extern int startepisode;
882 extern int startmap;
883 extern boolean autostart;
884
885
886 /*
887 ===============================================================================
888
889                                         GLOBAL FUNCTIONS
890
891 ===============================================================================
892 */
893
894
895 fixed_t FixedMul (fixed_t a, fixed_t b);
896 fixed_t FixedDiv (fixed_t a, fixed_t b);
897 fixed_t FixedDiv2 (fixed_t a, fixed_t b);
898
899
900 #ifdef __BIG_ENDIAN__
901 short ShortSwap(short);
902 long LongSwap(long);
903 #define SHORT(x)        ShortSwap(x)
904 #define LONG(x)         LongSwap(x)
905 #else
906 #define SHORT(x)        (x)
907 #define LONG(x)         (x)
908 #endif
909
910
911 //-----------
912 //MEMORY ZONE
913 //-----------
914 // tags < 100 are not overwritten until freed
915 #define PU_STATIC               1                       // static entire execution time
916 #define PU_SOUND                2                       // static while playing
917 #define PU_MUSIC                3                       // static while playing
918 #define PU_DAVE                 4                       // anything else Dave wants static
919 #define PU_LEVEL                50                      // static until level exited
920 #define PU_LEVSPEC              51                      // a special thinker in a level
921 // tags >= 100 are purgable whenever needed
922 #define PU_PURGELEVEL   100
923 #define PU_CACHE                101
924
925
926 void    Z_Init (void);
927 void    *Z_Malloc (int size, int tag, void *ptr);
928 void    Z_Free (void *ptr);
929 void    Z_FreeTags (int lowtag, int hightag);
930 //void  Z_DumpHeap (int lowtag, int hightag);
931 //void  Z_FileDumpHeap (FILE *f);
932 void    Z_CheckHeap (void);
933 void    Z_ChangeTag2 (void *ptr, int tag);
934 //int   Z_FreeMemory (void);
935
936 typedef struct memblock_s
937 {
938         int                     size;           // including the header and possibly tiny fragments
939         void            **user;         // NULL if a free block
940         int                     tag;            // purgelevel
941         int                     id;                     // should be ZONEID
942         struct memblock_s       *next, *prev;
943 } memblock_t;
944
945 #define Z_ChangeTag(p,t) \
946 { \
947 if (( (memblock_t *)( (byte *)(p) - sizeof(memblock_t)))->id!=0x1d4a11) \
948         I_Error("Z_CT at "__FILE__":%i",__LINE__); \
949 Z_ChangeTag2(p,t); \
950 };
951
952 //-------
953 //WADFILE
954 //-------
955 typedef struct
956 {
957         char            name[8];
958         int                     handle,position,size;
959 } lumpinfo_t;
960
961 extern lumpinfo_t *lumpinfo;
962 extern int numlumps;
963
964 void W_InitMultipleFiles(char **filenames);
965 void W_OpenAuxiliary(char *filename);
966 void W_CloseAuxiliaryFile(void);
967 void W_CloseAuxiliary(void);
968 void W_UsePrimary(void);
969 void W_UseAuxiliary(void);
970 int W_CheckNumForName(char *name);
971 int W_GetNumForName(char *name);
972 int W_LumpLength(int lump);
973 void W_ReadLump(int lump, void *dest);
974 void *W_CacheLumpNum(int lump, int tag);
975 void *W_CacheLumpName(char *name, int tag);
976 void W_CheckForOldFiles(void);
977
978 //----------
979 //BASE LEVEL
980 //----------
981 void H2_Main(void);
982 // not a globally visible function, just included for source reference
983 // calls all startup code
984 // parses command line options
985 // if not overrided, calls N_AdvanceDemo
986
987 void H2_GameLoop(void);
988 // not a globally visible function, just included for source reference
989 // called by H2_Main, never exits
990 // manages timing and IO
991 // calls all ?_Responder, ?_Ticker, and ?_Drawer functions
992 // calls I_GetTime, I_StartFrame, and I_StartTic
993
994 void H2_PostEvent(event_t *ev);
995 // called by IO functions when input is detected
996
997 void NetUpdate (void);
998 // create any new ticcmds and broadcast to other players
999
1000 void D_QuitNetGame (void);
1001 // broadcasts special packets to other players to notify of game exit
1002
1003 void TryRunTics (void);
1004
1005 //---------
1006 //SYSTEM IO
1007 //---------
1008 #if 1
1009 #define SCREENWIDTH             320
1010 #define SCREENHEIGHT    200
1011 #else
1012 #define SCREENWIDTH             560
1013 #define SCREENHEIGHT    375
1014 #endif
1015
1016 byte *I_ZoneBase (int *size);
1017 // called by startup code to get the ammount of memory to malloc
1018 // for the zone management
1019
1020 int I_GetTime (void);
1021 // called by H2_GameLoop
1022 // returns current time in tics
1023
1024 void I_StartFrame (void);
1025 // called by H2_GameLoop
1026 // called before processing any tics in a frame (just after displaying a frame)
1027 // time consuming syncronous operations are performed here (joystick reading)
1028 // can call H2_PostEvent
1029
1030 void I_StartTic (void);
1031 // called by H2_GameLoop
1032 // called before processing each tic in a frame
1033 // quick syncronous operations are performed here
1034 // can call H2_PostEvent
1035
1036 // asyncronous interrupt functions should maintain private ques that are
1037 // read by the syncronous functions to be converted into events
1038
1039 void I_Init (void);
1040 // called by H2_Main
1041 // determines the hardware configuration and sets up the video mode
1042
1043 void I_InitGraphics (void);
1044
1045 void I_InitNetwork (void);
1046 void I_NetCmd (void);
1047
1048 void I_CheckExternDriver(void);
1049
1050 void I_Error (char *error, ...);
1051 // called by anything that can generate a terminal error
1052 // bad exit with diagnostic message
1053
1054 void I_Quit (void);
1055 // called by M_Responder when quit is selected
1056 // clean exit, displays sell blurb
1057
1058 void I_SetPalette (byte *palette);
1059 // takes full 8 bit values
1060
1061 void I_Update(void);
1062 // Copy buffer to video
1063
1064 void I_WipeUpdate(wipe_t wipe);
1065 // Copy buffer to video with wipe effect
1066
1067 void I_WaitVBL(int count);
1068 // wait for vertical retrace or pause a bit
1069
1070 void I_BeginRead (void);
1071 void I_EndRead (void);
1072
1073 byte    *I_AllocLow (int length);
1074 // allocates from low memory under dos, just mallocs under unix
1075
1076 void I_Tactile (int on, int off, int total);
1077
1078 #if defined(__linux)
1079 extern boolean useexterndriver;
1080
1081 #define EBT_FIRE                        1
1082 #define EBT_OPENDOOR            2
1083 #define EBT_SPEED                       4
1084 #define EBT_STRAFE                      8
1085 #define EBT_MAP                         0x10
1086 #define EBT_INVENTORYLEFT       0x20
1087 #define EBT_INVENTORYRIGHT      0x40
1088 #define EBT_USEARTIFACT         0x80
1089 #define EBT_FLYDROP                     0x100
1090 #define EBT_CENTERVIEW          0x200
1091 #define EBT_PAUSE                       0x400
1092 #define EBT_WEAPONCYCLE         0x800
1093 #define EBT_JUMP                        0x1000
1094
1095 typedef struct
1096 {
1097         short vector; // Interrupt vector
1098         
1099         signed char moveForward; // forward/backward (maxes at 50)
1100         signed char moveSideways; // strafe (maxes at 24)
1101         short angleTurn; // turning speed (640 [slow] 1280 [fast])
1102         short angleHead; // head angle (+2080 [left] : 0 [center] : -2048 [right])
1103         signed char pitch; // look up/down (-110 : +90)
1104         signed char flyDirection; // flyheight (+1/-1)
1105         unsigned short buttons; // EBT_* flags
1106 } externdata_t;
1107 #endif
1108
1109 //----
1110 //GAME
1111 //----
1112
1113 void G_DeathMatchSpawnPlayer (int playernum);
1114
1115 void G_InitNew (skill_t skill, int episode, int map);
1116
1117 void G_DeferedInitNew (skill_t skill, int episode, int map);
1118 // can be called by the startup code or M_Responder
1119 // a normal game starts at map 1, but a warp test can start elsewhere
1120
1121 void G_DeferredNewGame(skill_t skill);
1122
1123 void G_DeferedPlayDemo (char *demo);
1124
1125 void G_LoadGame(int slot);
1126 // can be called by the startup code or M_Responder
1127 // calls P_SetupLevel or W_EnterWorld
1128 void G_DoLoadGame (void);
1129
1130 void G_SaveGame (int slot, char *description);
1131 // called by M_Responder
1132
1133 void G_RecordDemo (skill_t skill, int numplayers, int episode
1134         , int map, char *name);
1135 // only called by startup code
1136
1137 void G_PlayDemo (char *name);
1138 void G_TimeDemo (char *name);
1139
1140 void G_TeleportNewMap(int map, int position);
1141
1142 void G_Completed(int map, int position);
1143 //void G_ExitLevel (void);
1144 //void G_SecretExitLevel (void);
1145
1146 void G_StartNewGame(skill_t skill);
1147 void G_StartNewInit(void);
1148
1149 void G_WorldDone (void);
1150
1151 void G_Ticker (void);
1152 boolean G_Responder (event_t *ev);
1153
1154 void G_ScreenShot (void);
1155
1156 //-------
1157 //SV_SAVE
1158 //-------
1159
1160 #define HXS_VERSION_TEXT "HXS Ver 2.37"
1161 #define HXS_VERSION_TEXT_LENGTH 16
1162 #define HXS_DESCRIPTION_LENGTH 24
1163
1164 void SV_SaveGame(int slot, char *description);
1165 void SV_SaveMap(boolean savePlayers);
1166 void SV_LoadGame(int slot);
1167 void SV_MapTeleport(int map, int position);
1168 void SV_LoadMap(void);
1169 void SV_InitBaseSlot(void);
1170 void SV_UpdateRebornSlot(void);
1171 void SV_ClearRebornSlot(void);
1172 boolean SV_RebornSlotAvailable(void);
1173 int SV_GetRebornSlot(void);
1174
1175 //-----
1176 //PLAY
1177 //-----
1178
1179 void P_Ticker (void);
1180 // called by C_Ticker
1181 // can call G_PlayerExited
1182 // carries out all thinking of monsters and players
1183
1184 void P_SetupLevel (int episode, int map, int playermask, skill_t skill);
1185 // called by W_Ticker
1186
1187 void P_Init (void);
1188 // called by startup code
1189
1190 int P_GetMapCluster(int map);
1191 int P_TranslateMap(int map);
1192 int P_GetMapCDTrack(int map);
1193 int P_GetMapWarpTrans(int map);
1194 int P_GetMapNextMap(int map);
1195 int P_GetMapSky1Texture(int map);
1196 int P_GetMapSky2Texture(int map);
1197 char *P_GetMapName(int map);
1198 fixed_t P_GetMapSky1ScrollDelta(int map);
1199 fixed_t P_GetMapSky2ScrollDelta(int map);
1200 boolean P_GetMapDoubleSky(int map);
1201 boolean P_GetMapLightning(int map);
1202 boolean P_GetMapFadeTable(int map);
1203 char *P_GetMapSongLump(int map);
1204 void P_PutMapSongLump(int map, char *lumpName);
1205 int P_GetCDStartTrack(void);
1206 int P_GetCDEnd1Track(void);
1207 int P_GetCDEnd2Track(void);
1208 int P_GetCDEnd3Track(void);
1209 int P_GetCDIntermissionTrack(void);
1210 int P_GetCDTitleTrack(void);
1211
1212 //-------
1213 //REFRESH
1214 //-------
1215
1216 extern boolean setsizeneeded;
1217
1218 extern boolean BorderNeedRefresh;
1219 extern boolean BorderTopRefresh;
1220
1221 extern int UpdateState;
1222 // define the different areas for the dirty map
1223 #define I_NOUPDATE      0
1224 #define I_FULLVIEW      1
1225 #define I_STATBAR       2
1226 #define I_MESSAGES      4
1227 #define I_FULLSCRN      8
1228
1229 void R_RenderPlayerView (player_t *player);
1230 // called by G_Drawer
1231
1232 void R_Init (void);
1233 // called by startup code
1234
1235 void R_DrawViewBorder (void);
1236 void R_DrawTopBorder (void);
1237 // if the view size is not full screen, draws a border around it
1238
1239 void R_SetViewSize (int blocks, int detail);
1240 // called by M_Responder
1241
1242 int     R_FlatNumForName (char *name);
1243
1244 int     R_TextureNumForName (char *name);
1245 int     R_CheckTextureNumForName (char *name);
1246 // called by P_Ticker for switches and animations
1247 // returns the texture number for the texture name
1248
1249
1250 //----
1251 //MISC
1252 //----
1253 extern  int             myargc;
1254 extern  char    **myargv;
1255 extern  int             localQuakeHappening[MAXPLAYERS];
1256
1257 int     M_CheckParm(char *check);
1258 // returns the position of the given parameter in the arg list (0 if not found)
1259 boolean M_ParmExists(char *check);
1260
1261 void M_ExtractFileBase(char *path, char *dest);
1262
1263 void M_ForceUppercase(char *text);
1264 // Changes a string to uppercase
1265
1266 int M_Random (void);
1267 // returns a number from 0 to 255
1268 extern unsigned char P_Random(void);
1269
1270 void M_ClearRandom (void);
1271 // fix randoms for demos
1272
1273 void M_FindResponseFile(void);
1274
1275 void M_ClearBox (fixed_t *box);
1276 void M_AddToBox (fixed_t *box, fixed_t x, fixed_t y);
1277 // bounding box functions
1278
1279 boolean M_WriteFile(char const *name, void *source, int length);
1280 int M_ReadFile(char const *name, byte **buffer);
1281 int M_ReadFileCLib(char const *name, byte **buffer);
1282
1283 void M_ScreenShot (void);
1284
1285 void M_LoadDefaults(char *fileName);
1286
1287 void M_SaveDefaults (void);
1288
1289 int M_DrawText (int x, int y, boolean direct, char *string);
1290
1291 //------------------------------
1292 // SC_man.c
1293 //------------------------------
1294
1295 void SC_Open(char *name);
1296 void SC_OpenLump(char *name);
1297 void SC_OpenFile(char *name);
1298 void SC_OpenFileCLib(char *name);
1299 void SC_Close(void);
1300 boolean SC_GetString(void);
1301 void SC_MustGetString(void);
1302 void SC_MustGetStringName(char *name);
1303 boolean SC_GetNumber(void);
1304 void SC_MustGetNumber(void);
1305 void SC_UnGet(void);
1306 //boolean SC_Check(void);
1307 boolean SC_Compare(char *text);
1308 int SC_MatchString(char **strings);
1309 int SC_MustMatchString(char **strings);
1310 void SC_ScriptError(char *message);
1311
1312 extern char *sc_String;
1313 extern int sc_Number;
1314 extern int sc_Line;
1315 extern boolean sc_End;
1316 extern boolean sc_Crossed;
1317 extern boolean sc_FileScripts;
1318 extern char *sc_ScriptsDir;
1319
1320 //------------------------------
1321 // SN_sonix.c
1322 //------------------------------
1323
1324 enum
1325 {
1326         SEQ_PLATFORM,
1327         SEQ_PLATFORM_HEAVY,             // same script as a normal platform
1328         SEQ_PLATFORM_METAL,
1329         SEQ_PLATFORM_CREAK,             // same script as a normal platform
1330         SEQ_PLATFORM_SILENCE,
1331         SEQ_PLATFORM_LAVA,
1332         SEQ_PLATFORM_WATER,
1333         SEQ_PLATFORM_ICE,
1334         SEQ_PLATFORM_EARTH,
1335         SEQ_PLATFORM_METAL2,
1336         SEQ_DOOR_STONE,
1337         SEQ_DOOR_HEAVY,
1338         SEQ_DOOR_METAL,
1339         SEQ_DOOR_CREAK,
1340         SEQ_DOOR_SILENCE,
1341         SEQ_DOOR_LAVA,
1342         SEQ_DOOR_WATER,
1343         SEQ_DOOR_ICE,
1344         SEQ_DOOR_EARTH,
1345         SEQ_DOOR_METAL2,
1346         SEQ_ESOUND_WIND,
1347         SEQ_NUMSEQ
1348 };
1349
1350 typedef enum
1351 {
1352         SEQTYPE_STONE,
1353         SEQTYPE_HEAVY,
1354         SEQTYPE_METAL,
1355         SEQTYPE_CREAK,
1356         SEQTYPE_SILENCE,
1357         SEQTYPE_LAVA,
1358         SEQTYPE_WATER,
1359         SEQTYPE_ICE,
1360         SEQTYPE_EARTH,
1361         SEQTYPE_METAL2,
1362         SEQTYPE_NUMSEQ
1363 } seqtype_t;
1364
1365 void SN_InitSequenceScript(void);
1366 void SN_StartSequence(mobj_t *mobj, int sequence);
1367 void SN_StartSequenceName(mobj_t *mobj, char *name);
1368 void SN_StopSequence(mobj_t *mobj);
1369 void SN_UpdateActiveSequences(void);
1370 void SN_StopAllSequences(void);
1371 int SN_GetSequenceOffset(int sequence, int *sequencePtr);
1372 void SN_ChangeNodeData(int nodeNum, int seqOffset, int delayTics, int volume,
1373         int currentSoundID);
1374
1375
1376 typedef struct seqnode_s seqnode_t;
1377 struct seqnode_s
1378 {
1379         int *sequencePtr;
1380         int     sequence;
1381         mobj_t *mobj;
1382         int currentSoundID;
1383         int delayTics;
1384         int volume;
1385         int stopSound;
1386         seqnode_t *prev;
1387         seqnode_t *next;
1388 };
1389
1390 extern int ActiveSequences;
1391 extern seqnode_t *SequenceListHead;
1392
1393 extern boolean nosound;
1394 extern int mouselook;
1395 extern int globheight;
1396 extern int globwidth; 
1397 extern int lu2sux(int x);
1398 extern int lu2suy(int y);
1399 //----------------------
1400 // Interlude (IN_lude.c)
1401 //----------------------
1402
1403 #define MAX_INTRMSN_MESSAGE_SIZE 1024
1404
1405 extern boolean intermission;
1406 extern char ClusterMessage[MAX_INTRMSN_MESSAGE_SIZE];
1407
1408 void IN_Start(void);
1409 void IN_Ticker(void);
1410 void IN_Drawer(void);
1411
1412 //----------------------
1413 // Chat mode (CT_chat.c)
1414 //----------------------
1415
1416 void CT_Init(void);
1417 void CT_Drawer(void);
1418 boolean CT_Responder(event_t *ev);
1419 void CT_Ticker(void);
1420 char CT_dequeueChatChar(void);
1421
1422 extern boolean chatmodeon;
1423
1424 //--------------------
1425 // Finale (F_finale.c)
1426 //--------------------
1427
1428 void F_Drawer(void);
1429 void F_Ticker(void);
1430 void F_StartFinale(void);
1431
1432 //----------------------
1433 // STATUS BAR (SB_bar.c)
1434 //----------------------
1435
1436 extern int inv_ptr;
1437 extern int curpos;
1438 extern int SB_state;
1439 void SB_Init(void);
1440 void SB_SetClassData(void);
1441 boolean SB_Responder(event_t *event);
1442 void SB_Ticker(void);
1443 void SB_Drawer(void);
1444 void Draw_TeleportIcon(void);
1445 void Draw_SaveIcon(void);
1446 void Draw_LoadIcon(void);
1447
1448 //-----------------
1449 // MENU (MN_menu.c)
1450 //-----------------
1451
1452 void MN_Init(void);
1453 void MN_ActivateMenu(void);
1454 void MN_DeactivateMenu(void);
1455 boolean MN_Responder(event_t *event);
1456 void MN_Ticker(void);
1457 void MN_Drawer(void);
1458 void MN_DrTextA(char *text, int x, int y);
1459 void MN_DrTextAYellow(char *text, int x, int y);
1460 int MN_TextAWidth(char *text);
1461 void MN_DrTextB(char *text, int x, int y);
1462 int MN_TextBWidth(char *text);
1463
1464 //------
1465 // VIDEO
1466 //------
1467
1468 extern int dirtybox[4];
1469 extern byte gammatable[5][256];
1470 extern int usegamma;
1471
1472 void V_Init(void); // Allocates buffer screens, call before R_Init
1473 void V_DrawPatch(int x, int y, patch_t *patch);
1474 void V_DrawFuzzPatch(int x, int y, patch_t *patch);
1475 void V_DrawAltFuzzPatch(int x, int y, patch_t *patch);
1476 void V_DrawShadowedPatch(int x, int y, patch_t *patch);
1477 void V_DrawRawScreen(byte *raw);
1478
1479 #include "sounds.h"
1480
1481 #ifdef RENDER3D
1482 #define FIX2FLT(x)      ((float)((x)>>FRACBITS) + (float)((x)&(FRACUNIT-1)) / (float)(FRACUNIT))
1483 #define Q_FIX2FLT(x)    ((float)((x)>>FRACBITS))
1484 #endif
1485
1486 #endif // __H2DEF__
1487