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