doom

a minimalistic implementation of doom
git clone git://ssnf.xyz/doom
Log | Files | Refs

p_spec.h (7518B)


      1 
      2 
      3 
      4 
      5 
      6 
      7 
      8 
      9 
     10 
     11 
     12 
     13 
     14 
     15 
     16 
     17 
     18 
     19 
     20 
     21 
     22 
     23 
     24 
     25 
     26 #ifndef __P_SPEC__
     27 #define __P_SPEC__
     28 
     29 
     30 
     31 
     32 
     33 extern	boolean levelTimer;
     34 extern	int	levelTimeCount;
     35 
     36 
     37 
     38 #define MO_TELEPORTMAN          14
     39 
     40 
     41 
     42 void    P_InitPicAnims (void);
     43 
     44 
     45 void    P_SpawnSpecials (void);
     46 
     47 
     48 void    P_UpdateSpecials (void);
     49 
     50 
     51 boolean
     52 P_UseSpecialLine
     53 ( mobj_t*	thing,
     54   line_t*	line,
     55   int		side );
     56 
     57 void
     58 P_ShootSpecialLine
     59 ( mobj_t*	thing,
     60   line_t*	line );
     61 
     62 void
     63 P_CrossSpecialLine
     64 ( int		linenum,
     65   int		side,
     66   mobj_t*	thing );
     67 
     68 void    P_PlayerInSpecialSector (player_t* player);
     69 
     70 int
     71 twoSided
     72 ( int		sector,
     73   int		line );
     74 
     75 sector_t*
     76 getSector
     77 ( int		currentSector,
     78   int		line,
     79   int		side );
     80 
     81 side_t*
     82 getSide
     83 ( int		currentSector,
     84   int		line,
     85   int		side );
     86 
     87 fixed_t P_FindLowestFloorSurrounding(sector_t* sec);
     88 fixed_t P_FindHighestFloorSurrounding(sector_t* sec);
     89 
     90 fixed_t
     91 P_FindNextHighestFloor
     92 ( sector_t*	sec,
     93   int		currentheight );
     94 
     95 fixed_t P_FindLowestCeilingSurrounding(sector_t* sec);
     96 fixed_t P_FindHighestCeilingSurrounding(sector_t* sec);
     97 
     98 int
     99 P_FindSectorFromLineTag
    100 ( line_t*	line,
    101   int		start );
    102 
    103 int
    104 P_FindMinSurroundingLight
    105 ( sector_t*	sector,
    106   int		max );
    107 
    108 sector_t*
    109 getNextSector
    110 ( line_t*	line,
    111   sector_t*	sec );
    112 
    113 
    114 
    115 
    116 
    117 int EV_DoDonut(line_t* line);
    118 
    119 
    120 
    121 
    122 
    123 
    124 typedef struct
    125 {
    126     thinker_t	thinker;
    127     sector_t*	sector;
    128     int		count;
    129     int		maxlight;
    130     int		minlight;
    131     
    132 } fireflicker_t;
    133 
    134 
    135 
    136 typedef struct
    137 {
    138     thinker_t	thinker;
    139     sector_t*	sector;
    140     int		count;
    141     int		maxlight;
    142     int		minlight;
    143     int		maxtime;
    144     int		mintime;
    145     
    146 } lightflash_t;
    147 
    148 
    149 
    150 typedef struct
    151 {
    152     thinker_t	thinker;
    153     sector_t*	sector;
    154     int		count;
    155     int		minlight;
    156     int		maxlight;
    157     int		darktime;
    158     int		brighttime;
    159     
    160 } strobe_t;
    161 
    162 
    163 
    164 
    165 typedef struct
    166 {
    167     thinker_t	thinker;
    168     sector_t*	sector;
    169     int		minlight;
    170     int		maxlight;
    171     int		direction;
    172 
    173 } glow_t;
    174 
    175 
    176 #define GLOWSPEED			8
    177 #define STROBEBRIGHT		5
    178 #define FASTDARK			15
    179 #define SLOWDARK			35
    180 
    181 void    P_SpawnFireFlicker (sector_t* sector);
    182 void    T_LightFlash (lightflash_t* flash);
    183 void    P_SpawnLightFlash (sector_t* sector);
    184 void    T_StrobeFlash (strobe_t* flash);
    185 
    186 void
    187 P_SpawnStrobeFlash
    188 ( sector_t*	sector,
    189   int		fastOrSlow,
    190   int		inSync );
    191 
    192 void    EV_StartLightStrobing(line_t* line);
    193 void    EV_TurnTagLightsOff(line_t* line);
    194 
    195 void
    196 EV_LightTurnOn
    197 ( line_t*	line,
    198   int		bright );
    199 
    200 void    T_Glow(glow_t* g);
    201 void    P_SpawnGlowingLight(sector_t* sector);
    202 
    203 
    204 
    205 
    206 
    207 
    208 
    209 typedef struct
    210 {
    211     char	name1[9];
    212     char	name2[9];
    213     short	episode;
    214     
    215 } switchlist_t;
    216 
    217 
    218 typedef enum
    219 {
    220     top,
    221     middle,
    222     bottom
    223 
    224 } bwhere_e;
    225 
    226 
    227 typedef struct
    228 {
    229     line_t*	line;
    230     bwhere_e	where;
    231     int		btexture;
    232     int		btimer;
    233     mobj_t*	soundorg;
    234 
    235 } button_t;
    236 
    237 
    238 
    239 
    240  
    241 #define MAXSWITCHES		50
    242 
    243  
    244 #define MAXBUTTONS		16
    245 
    246  
    247 #define BUTTONTIME      35             
    248 
    249 extern button_t	buttonlist[MAXBUTTONS]; 
    250 
    251 void
    252 P_ChangeSwitchTexture
    253 ( line_t*	line,
    254   int		useAgain );
    255 
    256 void P_InitSwitchList(void);
    257 
    258 
    259 
    260 
    261 
    262 typedef enum
    263 {
    264     up,
    265     down,
    266     waiting,
    267     in_stasis
    268 
    269 } plat_e;
    270 
    271 
    272 
    273 typedef enum
    274 {
    275     perpetualRaise,
    276     downWaitUpStay,
    277     raiseAndChange,
    278     raiseToNearestAndChange,
    279     blazeDWUS
    280 
    281 } plattype_e;
    282 
    283 
    284 
    285 typedef struct
    286 {
    287     thinker_t	thinker;
    288     sector_t*	sector;
    289     fixed_t	speed;
    290     fixed_t	low;
    291     fixed_t	high;
    292     int		wait;
    293     int		count;
    294     plat_e	status;
    295     plat_e	oldstatus;
    296     boolean	crush;
    297     int		tag;
    298     plattype_e	type;
    299     
    300 } plat_t;
    301 
    302 
    303 
    304 #define PLATWAIT		3
    305 #define PLATSPEED		FRACUNIT
    306 #define MAXPLATS		30
    307 
    308 
    309 extern plat_t*	activeplats[MAXPLATS];
    310 
    311 void    T_PlatRaise(plat_t*	plat);
    312 
    313 int
    314 EV_DoPlat
    315 ( line_t*	line,
    316   plattype_e	type,
    317   int		amount );
    318 
    319 void    P_AddActivePlat(plat_t* plat);
    320 void    P_RemoveActivePlat(plat_t* plat);
    321 void    EV_StopPlat(line_t* line);
    322 void    P_ActivateInStasis(int tag);
    323 
    324 
    325 
    326 
    327 
    328 typedef enum
    329 {
    330     normal,
    331     close30ThenOpen,
    332     close,
    333     open,
    334     raiseIn5Mins,
    335     blazeRaise,
    336     blazeOpen,
    337     blazeClose
    338 
    339 } vldoor_e;
    340 
    341 
    342 
    343 typedef struct
    344 {
    345     thinker_t	thinker;
    346     vldoor_e	type;
    347     sector_t*	sector;
    348     fixed_t	topheight;
    349     fixed_t	speed;
    350 
    351     
    352     int             direction;
    353     
    354     
    355     int             topwait;
    356     
    357     
    358     int             topcountdown;
    359     
    360 } vldoor_t;
    361 
    362 
    363 
    364 #define VDOORSPEED		FRACUNIT*2
    365 #define VDOORWAIT		150
    366 
    367 void
    368 EV_VerticalDoor
    369 ( line_t*	line,
    370   mobj_t*	thing );
    371 
    372 int
    373 EV_DoDoor
    374 ( line_t*	line,
    375   vldoor_e	type );
    376 
    377 int
    378 EV_DoLockedDoor
    379 ( line_t*	line,
    380   vldoor_e	type,
    381   mobj_t*	thing );
    382 
    383 void    T_VerticalDoor (vldoor_t* door);
    384 void    P_SpawnDoorCloseIn30 (sector_t* sec);
    385 
    386 void
    387 P_SpawnDoorRaiseIn5Mins
    388 ( sector_t*	sec,
    389   int		secnum );
    390 
    391 
    392 
    393 #if 0 
    394 
    395 
    396 
    397 typedef enum
    398 {
    399     sd_opening,
    400     sd_waiting,
    401     sd_closing
    402 
    403 } sd_e;
    404 
    405 
    406 
    407 typedef enum
    408 {
    409     sdt_openOnly,
    410     sdt_closeOnly,
    411     sdt_openAndClose
    412 
    413 } sdt_e;
    414 
    415 
    416 
    417 
    418 typedef struct
    419 {
    420     thinker_t	thinker;
    421     sdt_e	type;
    422     line_t*	line;
    423     int		frame;
    424     int		whichDoorIndex;
    425     int		timer;
    426     sector_t*	frontsector;
    427     sector_t*	backsector;
    428     sd_e	 status;
    429 
    430 } slidedoor_t;
    431 
    432 
    433 
    434 typedef struct
    435 {
    436     char	frontFrame1[9];
    437     char	frontFrame2[9];
    438     char	frontFrame3[9];
    439     char	frontFrame4[9];
    440     char	backFrame1[9];
    441     char	backFrame2[9];
    442     char	backFrame3[9];
    443     char	backFrame4[9];
    444     
    445 } slidename_t;
    446 
    447 
    448 
    449 typedef struct
    450 {
    451     int             frontFrames[4];
    452     int             backFrames[4];
    453 
    454 } slideframe_t;
    455 
    456 
    457 
    458 
    459 #define SNUMFRAMES		4
    460 
    461 #define SDOORWAIT		35*3
    462 #define SWAITTICS		4
    463 
    464 
    465 #define MAXSLIDEDOORS	5                            
    466 
    467 void P_InitSlidingDoorFrames(void);
    468 
    469 void
    470 EV_SlidingDoor
    471 ( line_t*	line,
    472   mobj_t*	thing );
    473 #endif
    474 
    475 
    476 
    477 
    478 
    479 
    480 typedef enum
    481 {
    482     lowerToFloor,
    483     raiseToHighest,
    484     lowerAndCrush,
    485     crushAndRaise,
    486     fastCrushAndRaise,
    487     silentCrushAndRaise
    488 
    489 } ceiling_e;
    490 
    491 
    492 
    493 typedef struct
    494 {
    495     thinker_t	thinker;
    496     ceiling_e	type;
    497     sector_t*	sector;
    498     fixed_t	bottomheight;
    499     fixed_t	topheight;
    500     fixed_t	speed;
    501     boolean	crush;
    502 
    503     
    504     int		direction;
    505 
    506     
    507     int		tag;                   
    508     int		olddirection;
    509     
    510 } ceiling_t;
    511 
    512 
    513 
    514 
    515 
    516 #define CEILSPEED		FRACUNIT
    517 #define CEILWAIT		150
    518 #define MAXCEILINGS		30
    519 
    520 extern ceiling_t*	activeceilings[MAXCEILINGS];
    521 
    522 int
    523 EV_DoCeiling
    524 ( line_t*	line,
    525   ceiling_e	type );
    526 
    527 void    T_MoveCeiling (ceiling_t* ceiling);
    528 void    P_AddActiveCeiling(ceiling_t* c);
    529 void    P_RemoveActiveCeiling(ceiling_t* c);
    530 int	EV_CeilingCrushStop(line_t* line);
    531 void    P_ActivateInStasisCeiling(line_t* line);
    532 
    533 
    534 
    535 
    536 
    537 typedef enum
    538 {
    539     
    540     lowerFloor,
    541     
    542     
    543     lowerFloorToLowest,
    544     
    545     
    546     turboLower,
    547     
    548     
    549     raiseFloor,
    550     
    551     
    552     raiseFloorToNearest,
    553 
    554     
    555     raiseToTexture,
    556     
    557     
    558     
    559     lowerAndChange,
    560   
    561     raiseFloor24,
    562     raiseFloor24AndChange,
    563     raiseFloorCrush,
    564 
    565      
    566     raiseFloorTurbo,       
    567     donutRaise,
    568     raiseFloor512
    569     
    570 } floor_e;
    571 
    572 
    573 
    574 
    575 typedef enum
    576 {
    577     build8,	
    578     turbo16	
    579     
    580 } stair_e;
    581 
    582 
    583 
    584 typedef struct
    585 {
    586     thinker_t	thinker;
    587     floor_e	type;
    588     boolean	crush;
    589     sector_t*	sector;
    590     int		direction;
    591     int		newspecial;
    592     short	texture;
    593     fixed_t	floordestheight;
    594     fixed_t	speed;
    595 
    596 } floormove_t;
    597 
    598 
    599 
    600 #define FLOORSPEED		FRACUNIT
    601 
    602 typedef enum
    603 {
    604     ok,
    605     crushed,
    606     pastdest
    607     
    608 } result_e;
    609 
    610 result_e
    611 T_MovePlane
    612 ( sector_t*	sector,
    613   fixed_t	speed,
    614   fixed_t	dest,
    615   boolean	crush,
    616   int		floorOrCeiling,
    617   int		direction );
    618 
    619 int
    620 EV_BuildStairs
    621 ( line_t*	line,
    622   stair_e	type );
    623 
    624 int
    625 EV_DoFloor
    626 ( line_t*	line,
    627   floor_e	floortype );
    628 
    629 void T_MoveFloor( floormove_t* floor);
    630 
    631 
    632 
    633 
    634 int
    635 EV_Teleport
    636 ( line_t*	line,
    637   int		side,
    638   mobj_t*	thing );
    639 
    640 #endif
    641 
    642 
    643 
    644 
    645