forked from len0rd/rockbox
		
	git-svn-id: svn://svn.rockbox.org/rockbox/trunk@9323 a1c6a512-1295-4272-9138-f99709370657
		
			
				
	
	
		
			1148 lines
		
	
	
	
		
			22 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			1148 lines
		
	
	
	
		
			22 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| /* Emacs style mode select   -*- C++ -*-
 | |
|  *-----------------------------------------------------------------------------
 | |
|  *
 | |
|  *
 | |
|  *  PrBoom a Doom port merged with LxDoom and LSDLDoom
 | |
|  *  based on BOOM, a modified and improved DOOM engine
 | |
|  *  Copyright (C) 1999 by
 | |
|  *  id Software, Chi Hoang, Lee Killough, Jim Flynn, Rand Phares, Ty Halderman
 | |
|  *  Copyright (C) 1999-2000 by
 | |
|  *  Jess Haas, Nicolas Kalkhof, Colin Phipps, Florian Schulze
 | |
|  *
 | |
|  *  This program is free software; you can redistribute it and/or
 | |
|  *  modify it under the terms of the GNU General Public License
 | |
|  *  as published by the Free Software Foundation; either version 2
 | |
|  *  of the License, or (at your option) any later version.
 | |
|  *
 | |
|  *  This program is distributed in the hope that it will be useful,
 | |
|  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 | |
|  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | |
|  *  GNU General Public License for more details.
 | |
|  *
 | |
|  *  You should have received a copy of the GNU General Public License
 | |
|  *  along with this program; if not, write to the Free Software
 | |
|  *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
 | |
|  *  02111-1307, USA.
 | |
|  *
 | |
|  * DESCRIPTION:  definitions, declarations and prototypes for specials
 | |
|  *
 | |
|  *-----------------------------------------------------------------------------*/
 | |
| 
 | |
| #ifndef __P_SPEC__
 | |
| #define __P_SPEC__
 | |
| 
 | |
| #include "r_defs.h"
 | |
| #include "d_player.h"
 | |
| 
 | |
| //      Define values for map objects
 | |
| #define MO_TELEPORTMAN  14
 | |
| 
 | |
| // p_floor
 | |
| 
 | |
| #define ELEVATORSPEED (FRACUNIT*4)
 | |
| #define FLOORSPEED     FRACUNIT
 | |
| 
 | |
| // p_ceilng
 | |
| 
 | |
| #define CEILSPEED   FRACUNIT
 | |
| #define CEILWAIT    150
 | |
| 
 | |
| // p_doors
 | |
| 
 | |
| #define VDOORSPEED  (FRACUNIT*2)
 | |
| #define VDOORWAIT   150
 | |
| 
 | |
| // p_plats
 | |
| 
 | |
| #define PLATWAIT    3
 | |
| #define PLATSPEED   FRACUNIT
 | |
| 
 | |
| // p_switch
 | |
| 
 | |
| // 4 players, 4 buttons each at once, max.
 | |
| // killough 2/14/98: redefine in terms of MAXPLAYERS
 | |
| #define MAXBUTTONS    (MAXPLAYERS*4)
 | |
| 
 | |
| // 1 second, in ticks.
 | |
| #define BUTTONTIME  TICRATE
 | |
| 
 | |
| // p_lights
 | |
| 
 | |
| #define GLOWSPEED       8
 | |
| #define STROBEBRIGHT    5
 | |
| #define FASTDARK        15
 | |
| #define SLOWDARK        35
 | |
| 
 | |
| //jff 3/14/98 add bits and shifts for generalized sector types
 | |
| 
 | |
| #define DAMAGE_MASK     0x60
 | |
| #define DAMAGE_SHIFT    5
 | |
| #define SECRET_MASK     0x80
 | |
| #define SECRET_SHIFT    7
 | |
| #define FRICTION_MASK   0x100
 | |
| #define FRICTION_SHIFT  8
 | |
| #define PUSH_MASK       0x200
 | |
| #define PUSH_SHIFT      9
 | |
| 
 | |
| //jff 02/04/98 Define masks, shifts, for fields in
 | |
| // generalized linedef types
 | |
| 
 | |
| #define GenEnd                0x8000
 | |
| #define GenFloorBase          0x6000
 | |
| #define GenCeilingBase        0x4000
 | |
| #define GenDoorBase           0x3c00
 | |
| #define GenLockedBase         0x3800
 | |
| #define GenLiftBase           0x3400
 | |
| #define GenStairsBase         0x3000
 | |
| #define GenCrusherBase        0x2F80
 | |
| 
 | |
| #define TriggerType           0x0007
 | |
| #define TriggerTypeShift      0
 | |
| 
 | |
| // define masks and shifts for the floor type fields
 | |
| 
 | |
| #define FloorCrush            0x1000
 | |
| #define FloorChange           0x0c00
 | |
| #define FloorTarget           0x0380
 | |
| #define FloorDirection        0x0040
 | |
| #define FloorModel            0x0020
 | |
| #define FloorSpeed            0x0018
 | |
| 
 | |
| #define FloorCrushShift           12
 | |
| #define FloorChangeShift          10
 | |
| #define FloorTargetShift           7
 | |
| #define FloorDirectionShift        6
 | |
| #define FloorModelShift            5
 | |
| #define FloorSpeedShift            3
 | |
| 
 | |
| // define masks and shifts for the ceiling type fields
 | |
| 
 | |
| #define CeilingCrush          0x1000
 | |
| #define CeilingChange         0x0c00
 | |
| #define CeilingTarget         0x0380
 | |
| #define CeilingDirection      0x0040
 | |
| #define CeilingModel          0x0020
 | |
| #define CeilingSpeed          0x0018
 | |
| 
 | |
| #define CeilingCrushShift         12
 | |
| #define CeilingChangeShift        10
 | |
| #define CeilingTargetShift         7
 | |
| #define CeilingDirectionShift      6
 | |
| #define CeilingModelShift          5
 | |
| #define CeilingSpeedShift          3
 | |
| 
 | |
| // define masks and shifts for the lift type fields
 | |
| 
 | |
| #define LiftTarget            0x0300
 | |
| #define LiftDelay             0x00c0
 | |
| #define LiftMonster           0x0020
 | |
| #define LiftSpeed             0x0018
 | |
| 
 | |
| #define LiftTargetShift            8
 | |
| #define LiftDelayShift             6
 | |
| #define LiftMonsterShift           5
 | |
| #define LiftSpeedShift             3
 | |
| 
 | |
| // define masks and shifts for the stairs type fields
 | |
| 
 | |
| #define StairIgnore           0x0200
 | |
| #define StairDirection        0x0100
 | |
| #define StairStep             0x00c0
 | |
| #define StairMonster          0x0020
 | |
| #define StairSpeed            0x0018
 | |
| 
 | |
| #define StairIgnoreShift           9
 | |
| #define StairDirectionShift        8
 | |
| #define StairStepShift             6
 | |
| #define StairMonsterShift          5
 | |
| #define StairSpeedShift            3
 | |
| 
 | |
| // define masks and shifts for the crusher type fields
 | |
| 
 | |
| #define CrusherSilent         0x0040
 | |
| #define CrusherMonster        0x0020
 | |
| #define CrusherSpeed          0x0018
 | |
| 
 | |
| #define CrusherSilentShift         6
 | |
| #define CrusherMonsterShift        5
 | |
| #define CrusherSpeedShift          3
 | |
| 
 | |
| // define masks and shifts for the door type fields
 | |
| 
 | |
| #define DoorDelay             0x0300
 | |
| #define DoorMonster           0x0080
 | |
| #define DoorKind              0x0060
 | |
| #define DoorSpeed             0x0018
 | |
| 
 | |
| #define DoorDelayShift             8
 | |
| #define DoorMonsterShift           7
 | |
| #define DoorKindShift              5
 | |
| #define DoorSpeedShift             3
 | |
| 
 | |
| // define masks and shifts for the locked door type fields
 | |
| 
 | |
| #define LockedNKeys           0x0200
 | |
| #define LockedKey             0x01c0
 | |
| #define LockedKind            0x0020
 | |
| #define LockedSpeed           0x0018
 | |
| 
 | |
| #define LockedNKeysShift           9
 | |
| #define LockedKeyShift             6
 | |
| #define LockedKindShift            5
 | |
| #define LockedSpeedShift           3
 | |
| 
 | |
| // define names for the TriggerType field of the general linedefs
 | |
| 
 | |
| typedef enum
 | |
| {
 | |
|    WalkOnce,
 | |
|    WalkMany,
 | |
|    SwitchOnce,
 | |
|    SwitchMany,
 | |
|    GunOnce,
 | |
|    GunMany,
 | |
|    PushOnce,
 | |
|    PushMany,
 | |
| } triggertype_e;
 | |
| 
 | |
| // define names for the Speed field of the general linedefs
 | |
| 
 | |
| typedef enum
 | |
| {
 | |
|    SpeedSlow,
 | |
|    SpeedNormal,
 | |
|    SpeedFast,
 | |
|    SpeedTurbo,
 | |
| } motionspeed_e;
 | |
| 
 | |
| // define names for the Target field of the general floor
 | |
| 
 | |
| typedef enum
 | |
| {
 | |
|    FtoHnF,
 | |
|    FtoLnF,
 | |
|    FtoNnF,
 | |
|    FtoLnC,
 | |
|    FtoC,
 | |
|    FbyST,
 | |
|    Fby24,
 | |
|    Fby32,
 | |
| } floortarget_e;
 | |
| 
 | |
| // define names for the Changer Type field of the general floor
 | |
| 
 | |
| typedef enum
 | |
| {
 | |
|    FNoChg,
 | |
|    FChgZero,
 | |
|    FChgTxt,
 | |
|    FChgTyp,
 | |
| } floorchange_e;
 | |
| 
 | |
| // define names for the Change Model field of the general floor
 | |
| 
 | |
| typedef enum
 | |
| {
 | |
|    FTriggerModel,
 | |
|    FNumericModel,
 | |
| } floormodel_t;
 | |
| 
 | |
| // define names for the Target field of the general ceiling
 | |
| 
 | |
| typedef enum
 | |
| {
 | |
|    CtoHnC,
 | |
|    CtoLnC,
 | |
|    CtoNnC,
 | |
|    CtoHnF,
 | |
|    CtoF,
 | |
|    CbyST,
 | |
|    Cby24,
 | |
|    Cby32,
 | |
| } ceilingtarget_e;
 | |
| 
 | |
| // define names for the Changer Type field of the general ceiling
 | |
| 
 | |
| typedef enum
 | |
| {
 | |
|    CNoChg,
 | |
|    CChgZero,
 | |
|    CChgTxt,
 | |
|    CChgTyp,
 | |
| } ceilingchange_e;
 | |
| 
 | |
| // define names for the Change Model field of the general ceiling
 | |
| 
 | |
| typedef enum
 | |
| {
 | |
|    CTriggerModel,
 | |
|    CNumericModel,
 | |
| } ceilingmodel_t;
 | |
| 
 | |
| // define names for the Target field of the general lift
 | |
| 
 | |
| typedef enum
 | |
| {
 | |
|    F2LnF,
 | |
|    F2NnF,
 | |
|    F2LnC,
 | |
|    LnF2HnF,
 | |
| } lifttarget_e;
 | |
| 
 | |
| // define names for the door Kind field of the general ceiling
 | |
| 
 | |
| typedef enum
 | |
| {
 | |
|    OdCDoor,
 | |
|    ODoor,
 | |
|    CdODoor,
 | |
|    CDoor,
 | |
| } doorkind_e;
 | |
| 
 | |
| // define names for the locked door Kind field of the general ceiling
 | |
| 
 | |
| typedef enum
 | |
| {
 | |
|    AnyKey,
 | |
|    RCard,
 | |
|    BCard,
 | |
|    YCard,
 | |
|    RSkull,
 | |
|    BSkull,
 | |
|    YSkull,
 | |
|    AllKeys,
 | |
| } keykind_e;
 | |
| 
 | |
| //////////////////////////////////////////////////////////////////
 | |
| //
 | |
| // enums for classes of linedef triggers
 | |
| //
 | |
| //////////////////////////////////////////////////////////////////
 | |
| 
 | |
| //jff 2/23/98 identify the special classes that can share sectors
 | |
| 
 | |
| typedef enum
 | |
| {
 | |
|    floor_special,
 | |
|    ceiling_special,
 | |
|    lighting_special,
 | |
| } special_e;
 | |
| 
 | |
| //jff 3/15/98 pure texture/type change for better generalized support
 | |
| typedef enum
 | |
| {
 | |
|    trigChangeOnly,
 | |
|    numChangeOnly,
 | |
| } change_e;
 | |
| 
 | |
| // p_plats
 | |
| 
 | |
| typedef enum
 | |
| {
 | |
|    up,
 | |
|    down,
 | |
|    waiting,
 | |
|    in_stasis
 | |
| } plat_e;
 | |
| 
 | |
| typedef enum
 | |
| {
 | |
|    perpetualRaise,
 | |
|    downWaitUpStay,
 | |
|    raiseAndChange,
 | |
|    raiseToNearestAndChange,
 | |
|    blazeDWUS,
 | |
|    genLift,      //jff added to support generalized Plat types
 | |
|    genPerpetual,
 | |
|    toggleUpDn,   //jff 3/14/98 added to support instant toggle type
 | |
| 
 | |
| } plattype_e;
 | |
| 
 | |
| // p_doors
 | |
| 
 | |
| typedef enum
 | |
| {
 | |
|    normal,
 | |
|    close30ThenOpen,
 | |
|    p_close,
 | |
|    p_open,
 | |
|    raiseIn5Mins,
 | |
|    blazeRaise,
 | |
|    blazeOpen,
 | |
|    blazeClose,
 | |
| 
 | |
|    //jff 02/05/98 add generalize door types
 | |
|    genRaise,
 | |
|    genBlazeRaise,
 | |
|    genOpen,
 | |
|    genBlazeOpen,
 | |
|    genClose,
 | |
|    genBlazeClose,
 | |
|    genCdO,
 | |
|    genBlazeCdO,
 | |
| } vldoor_e;
 | |
| 
 | |
| // p_ceilng
 | |
| 
 | |
| typedef enum
 | |
| {
 | |
|    lowerToFloor,
 | |
|    raiseToHighest,
 | |
|    lowerToLowest,
 | |
|    lowerToMaxFloor,
 | |
|    lowerAndCrush,
 | |
|    crushAndRaise,
 | |
|    fastCrushAndRaise,
 | |
|    silentCrushAndRaise,
 | |
| 
 | |
|    //jff 02/04/98 add types for generalized ceiling mover
 | |
|    genCeiling,
 | |
|    genCeilingChg,
 | |
|    genCeilingChg0,
 | |
|    genCeilingChgT,
 | |
| 
 | |
|    //jff 02/05/98 add types for generalized ceiling mover
 | |
|    genCrusher,
 | |
|    genSilentCrusher,
 | |
| 
 | |
| } ceiling_e;
 | |
| 
 | |
| // p_floor
 | |
| 
 | |
| typedef enum
 | |
| {
 | |
|    // lower floor to highest surrounding floor
 | |
|    lowerFloor,
 | |
| 
 | |
|    // lower floor to lowest surrounding floor
 | |
|    lowerFloorToLowest,
 | |
| 
 | |
|    // lower floor to highest surrounding floor VERY FAST
 | |
|    turboLower,
 | |
| 
 | |
|    // raise floor to lowest surrounding CEILING
 | |
|    raiseFloor,
 | |
| 
 | |
|    // raise floor to next highest surrounding floor
 | |
|    raiseFloorToNearest,
 | |
| 
 | |
|    //jff 02/03/98 lower floor to next lowest neighbor
 | |
|    lowerFloorToNearest,
 | |
| 
 | |
|    //jff 02/03/98 lower floor 24 absolute
 | |
|    lowerFloor24,
 | |
| 
 | |
|    //jff 02/03/98 lower floor 32 absolute
 | |
|    lowerFloor32Turbo,
 | |
| 
 | |
|    // raise floor to shortest height texture around it
 | |
|    raiseToTexture,
 | |
| 
 | |
|    // lower floor to lowest surrounding floor
 | |
|    //  and change floorpic
 | |
|    lowerAndChange,
 | |
| 
 | |
|    raiseFloor24,
 | |
| 
 | |
|    //jff 02/03/98 raise floor 32 absolute
 | |
|    raiseFloor32Turbo,
 | |
| 
 | |
|    raiseFloor24AndChange,
 | |
|    raiseFloorCrush,
 | |
| 
 | |
|    // raise to next highest floor, turbo-speed
 | |
|    raiseFloorTurbo,
 | |
|    donutRaise,
 | |
|    raiseFloor512,
 | |
| 
 | |
|    //jff 02/04/98  add types for generalized floor mover
 | |
|    genFloor,
 | |
|    genFloorChg,
 | |
|    genFloorChg0,
 | |
|    genFloorChgT,
 | |
| 
 | |
|    //new types for stair builders
 | |
|    buildStair,
 | |
|    genBuildStair,
 | |
| } floor_e;
 | |
| 
 | |
| typedef enum
 | |
| {
 | |
|    build8, // slowly build by 8
 | |
|    turbo16 // quickly build by 16
 | |
| 
 | |
| } stair_e;
 | |
| 
 | |
| typedef enum
 | |
| {
 | |
|    elevateUp,
 | |
|    elevateDown,
 | |
|    elevateCurrent,
 | |
| } elevator_e;
 | |
| 
 | |
| //////////////////////////////////////////////////////////////////
 | |
| //
 | |
| // general enums
 | |
| //
 | |
| //////////////////////////////////////////////////////////////////
 | |
| 
 | |
| // texture type enum
 | |
| typedef enum
 | |
| {
 | |
|    top,
 | |
|    middle,
 | |
|    bottom
 | |
| 
 | |
| } bwhere_e;
 | |
| 
 | |
| // crush check returns
 | |
| typedef enum
 | |
| {
 | |
|    ok,
 | |
|    crushed,
 | |
|    pastdest
 | |
| } result_e;
 | |
| 
 | |
| //////////////////////////////////////////////////////////////////
 | |
| //
 | |
| // linedef and sector special data types
 | |
| //
 | |
| //////////////////////////////////////////////////////////////////
 | |
| 
 | |
| // p_switch
 | |
| 
 | |
| // switch animation structure type
 | |
| 
 | |
| #if defined(__MWERKS__)
 | |
| #pragma options align=packed
 | |
| #endif
 | |
| 
 | |
| typedef struct
 | |
| {
 | |
|    char name1[9];
 | |
|    char name2[9];
 | |
|    short episode;
 | |
| } PACKEDATTR switchlist_t; //jff 3/23/98 pack to read from memory
 | |
| 
 | |
| #if defined(__MWERKS__)
 | |
| #pragma options align=reset
 | |
| #endif
 | |
| 
 | |
| typedef struct
 | |
| {
 | |
|    line_t* line;
 | |
|    bwhere_e where;
 | |
|    int   btexture;
 | |
|    int   btimer;
 | |
|    mobj_t* soundorg;
 | |
| 
 | |
| } button_t;
 | |
| 
 | |
| // p_lights
 | |
| 
 | |
| typedef struct
 | |
| {
 | |
|    thinker_t thinker;
 | |
|    sector_t* sector;
 | |
|    int count;
 | |
|    int maxlight;
 | |
|    int minlight;
 | |
| 
 | |
| } fireflicker_t;
 | |
| 
 | |
| typedef struct
 | |
| {
 | |
|    thinker_t thinker;
 | |
|    sector_t* sector;
 | |
|    int count;
 | |
|    int maxlight;
 | |
|    int minlight;
 | |
|    int maxtime;
 | |
|    int mintime;
 | |
| 
 | |
| } lightflash_t;
 | |
| 
 | |
| typedef struct
 | |
| {
 | |
|    thinker_t thinker;
 | |
|    sector_t* sector;
 | |
|    int count;
 | |
|    int minlight;
 | |
|    int maxlight;
 | |
|    int darktime;
 | |
|    int brighttime;
 | |
| 
 | |
| } strobe_t;
 | |
| 
 | |
| typedef struct
 | |
| {
 | |
|    thinker_t thinker;
 | |
|    sector_t* sector;
 | |
|    int minlight;
 | |
|    int maxlight;
 | |
|    int direction;
 | |
| 
 | |
| } glow_t;
 | |
| 
 | |
| // p_plats
 | |
| 
 | |
| typedef struct
 | |
| {
 | |
|    thinker_t thinker;
 | |
|    sector_t* sector;
 | |
|    fixed_t speed;
 | |
|    fixed_t low;
 | |
|    fixed_t high;
 | |
|    int wait;
 | |
|    int count;
 | |
|    plat_e status;
 | |
|    plat_e oldstatus;
 | |
|    boolean crush;
 | |
|    int tag;
 | |
|    plattype_e type;
 | |
| 
 | |
|    struct platlist *list;   // killough
 | |
| } plat_t;
 | |
| 
 | |
| // New limit-free plat structure -- killough
 | |
| 
 | |
| typedef struct platlist {
 | |
|    plat_t *plat;
 | |
|    struct platlist *next,**prev;
 | |
| } platlist_t;
 | |
| 
 | |
| // p_ceilng
 | |
| 
 | |
| typedef struct
 | |
| {
 | |
|    thinker_t thinker;
 | |
|    vldoor_e type;
 | |
|    sector_t* sector;
 | |
|    fixed_t topheight;
 | |
|    fixed_t speed;
 | |
| 
 | |
|    // 1 = up, 0 = waiting at top, -1 = down
 | |
|    int direction;
 | |
| 
 | |
|    // tics to wait at the top
 | |
|    int topwait;
 | |
|    // (keep in case a door going down is reset)
 | |
|    // when it reaches 0, start going down
 | |
|    int topcountdown;
 | |
| 
 | |
|    //jff 1/31/98 keep track of line door is triggered by
 | |
|    line_t *line;
 | |
| 
 | |
|    /* killough 10/98: sector tag for gradual lighting effects */
 | |
|    int lighttag;
 | |
| } vldoor_t;
 | |
| 
 | |
| // p_doors
 | |
| 
 | |
| typedef struct
 | |
| {
 | |
|    thinker_t thinker;
 | |
|    ceiling_e type;
 | |
|    sector_t* sector;
 | |
|    fixed_t bottomheight;
 | |
|    fixed_t topheight;
 | |
|    fixed_t speed;
 | |
|    fixed_t oldspeed;
 | |
|    boolean crush;
 | |
| 
 | |
|    //jff 02/04/98 add these to support ceiling changers
 | |
|    int newspecial;
 | |
|    int oldspecial; //jff 3/14/98 add to fix bug in change transfers
 | |
|    short texture;
 | |
| 
 | |
|    // 1 = up, 0 = waiting, -1 = down
 | |
|    int direction;
 | |
| 
 | |
|    // ID
 | |
|    int tag;
 | |
|    int olddirection;
 | |
|    struct ceilinglist *list;   // jff 2/22/98 copied from killough's plats
 | |
| } ceiling_t;
 | |
| 
 | |
| typedef struct ceilinglist {
 | |
|    ceiling_t *ceiling;
 | |
|    struct ceilinglist *next,**prev;
 | |
| } ceilinglist_t;
 | |
| 
 | |
| // p_floor
 | |
| 
 | |
| typedef struct
 | |
| {
 | |
|    thinker_t thinker;
 | |
|    floor_e type;
 | |
|    boolean crush;
 | |
|    sector_t* sector;
 | |
|    int direction;
 | |
|    int newspecial;
 | |
|    int oldspecial;   //jff 3/14/98 add to fix bug in change transfers
 | |
|    short texture;
 | |
|    fixed_t floordestheight;
 | |
|    fixed_t speed;
 | |
| 
 | |
| } floormove_t;
 | |
| 
 | |
| typedef struct
 | |
| {
 | |
|    thinker_t thinker;
 | |
|    elevator_e type;
 | |
|    sector_t* sector;
 | |
|    int direction;
 | |
|    fixed_t floordestheight;
 | |
|    fixed_t ceilingdestheight;
 | |
|    fixed_t speed;
 | |
| } elevator_t;
 | |
| 
 | |
| // p_spec
 | |
| 
 | |
| // killough 3/7/98: Add generalized scroll effects
 | |
| 
 | |
| typedef struct {
 | |
|    thinker_t thinker;   // Thinker structure for scrolling
 | |
|    fixed_t dx, dy;      // (dx,dy) scroll speeds
 | |
|    int affectee;        // Number of affected sidedef, sector, tag, or whatever
 | |
|    int control;         // Control sector (-1 if none) used to control scrolling
 | |
|    fixed_t last_height; // Last known height of control sector
 | |
|    fixed_t vdx, vdy;    // Accumulated velocity if accelerative
 | |
|    int accel;           // Whether it's accelerative
 | |
|    enum
 | |
|    {
 | |
|       sc_side,
 | |
|       sc_floor,
 | |
|       sc_ceiling,
 | |
|       sc_carry,
 | |
|       sc_carry_ceiling,  // killough 4/11/98: carry objects hanging on ceilings
 | |
|    } type;              // Type of scroll effect
 | |
| } scroll_t;
 | |
| 
 | |
| // phares 3/12/98: added new model of friction for ice/sludge effects
 | |
| 
 | |
| typedef struct {
 | |
|    thinker_t thinker;   // Thinker structure for friction
 | |
|    int friction;        // friction value (E800 = normal)
 | |
|    int movefactor;      // inertia factor when adding to momentum
 | |
|    int affectee;        // Number of affected sector
 | |
| } friction_t;
 | |
| 
 | |
| // phares 3/20/98: added new model of Pushers for push/pull effects
 | |
| 
 | |
| typedef struct {
 | |
|    thinker_t thinker;   // Thinker structure for Pusher
 | |
|    enum
 | |
|    {
 | |
|       p_push,
 | |
|       p_pull,
 | |
|       p_wind,
 | |
|       p_current,
 | |
|    } type;
 | |
|    mobj_t* source;      // Point source if point pusher
 | |
|    int x_mag;           // X Strength
 | |
|    int y_mag;           // Y Strength
 | |
|    int magnitude;       // Vector strength for point pusher
 | |
|    int radius;          // Effective radius for point pusher
 | |
|    int x;               // X of point source if point pusher
 | |
|    int y;               // Y of point source if point pusher
 | |
|    int affectee;        // Number of affected sector
 | |
| } pusher_t;
 | |
| 
 | |
| //////////////////////////////////////////////////////////////////
 | |
| //
 | |
| // external data declarations
 | |
| //
 | |
| //////////////////////////////////////////////////////////////////
 | |
| 
 | |
| //
 | |
| // End-level timer (-TIMER option)
 | |
| //
 | |
| extern  boolean levelTimer;
 | |
| extern  int levelTimeCount;
 | |
| 
 | |
| // list of retriggerable buttons active
 | |
| extern button_t buttonlist[MAXBUTTONS];
 | |
| 
 | |
| extern platlist_t *activeplats;        // killough 2/14/98
 | |
| 
 | |
| extern ceilinglist_t *activeceilings;  // jff 2/22/98
 | |
| 
 | |
| ////////////////////////////////////////////////////////////////
 | |
| //
 | |
| // Linedef and sector special utility function prototypes
 | |
| //
 | |
| ////////////////////////////////////////////////////////////////
 | |
| 
 | |
| int twoSided
 | |
| ( int sector,
 | |
|   int line );
 | |
| 
 | |
| sector_t* getSector
 | |
| ( int currentSector,
 | |
|   int line,
 | |
|   int side );
 | |
| 
 | |
| side_t* getSide
 | |
| ( int   currentSector,
 | |
|   int   line,
 | |
|   int   side );
 | |
| 
 | |
| fixed_t P_FindLowestFloorSurrounding
 | |
| ( sector_t* sec );
 | |
| 
 | |
| fixed_t P_FindHighestFloorSurrounding
 | |
| ( sector_t* sec );
 | |
| 
 | |
| fixed_t P_FindNextHighestFloor
 | |
| ( sector_t* sec,
 | |
|   int currentheight );
 | |
| 
 | |
| fixed_t P_FindNextLowestFloor
 | |
| ( sector_t* sec,
 | |
|   int currentheight );
 | |
| 
 | |
| fixed_t P_FindLowestCeilingSurrounding
 | |
| ( sector_t* sec ); // jff 2/04/98
 | |
| 
 | |
| fixed_t P_FindHighestCeilingSurrounding
 | |
| ( sector_t* sec ); // jff 2/04/98
 | |
| 
 | |
| fixed_t P_FindNextLowestCeiling
 | |
| ( sector_t *sec,
 | |
|   int currentheight ); // jff 2/04/98
 | |
| 
 | |
| fixed_t P_FindNextHighestCeiling
 | |
| ( sector_t *sec,
 | |
|   int currentheight ); // jff 2/04/98
 | |
| 
 | |
| fixed_t P_FindShortestTextureAround
 | |
| ( int secnum ); // jff 2/04/98
 | |
| 
 | |
| fixed_t P_FindShortestUpperAround
 | |
| ( int secnum ); // jff 2/04/98
 | |
| 
 | |
| sector_t* P_FindModelFloorSector
 | |
| ( fixed_t floordestheight,
 | |
|   int secnum ); //jff 02/04/98
 | |
| 
 | |
| sector_t* P_FindModelCeilingSector
 | |
| ( fixed_t ceildestheight,
 | |
|   int secnum ); //jff 02/04/98
 | |
| 
 | |
| int P_FindSectorFromLineTag
 | |
| ( const line_t *line,
 | |
|   int start ); // killough 4/17/98
 | |
| 
 | |
| int P_FindLineFromLineTag
 | |
| ( const line_t *line,
 | |
|   int start );   // killough 4/17/98
 | |
| 
 | |
| int P_FindMinSurroundingLight
 | |
| ( sector_t* sector,
 | |
|   int max );
 | |
| 
 | |
| sector_t* getNextSector
 | |
| ( line_t* line,
 | |
|   sector_t* sec );
 | |
| 
 | |
| int P_CheckTag
 | |
| (line_t *line); // jff 2/27/98
 | |
| 
 | |
| boolean P_CanUnlockGenDoor
 | |
| ( line_t* line,
 | |
|   player_t* player);
 | |
| 
 | |
| boolean P_SectorActive
 | |
| ( special_e t,
 | |
|   sector_t* s );
 | |
| 
 | |
| boolean P_IsSecret
 | |
| ( sector_t *sec );
 | |
| 
 | |
| boolean P_WasSecret
 | |
| ( sector_t *sec );
 | |
| 
 | |
| void P_ChangeSwitchTexture
 | |
| ( line_t* line,
 | |
|   int useAgain );
 | |
| 
 | |
| ////////////////////////////////////////////////////////////////
 | |
| //
 | |
| // Linedef and sector special action function prototypes
 | |
| //
 | |
| ////////////////////////////////////////////////////////////////
 | |
| 
 | |
| // p_lights
 | |
| 
 | |
| void T_LightFlash
 | |
| ( lightflash_t* flash );
 | |
| 
 | |
| void T_StrobeFlash
 | |
| ( strobe_t* flash );
 | |
| 
 | |
| // jff 8/8/98 add missing thinker for flicker
 | |
| void T_FireFlicker
 | |
| ( fireflicker_t* flick );
 | |
| 
 | |
| void T_Glow
 | |
| ( glow_t* g );
 | |
| 
 | |
| // p_plats
 | |
| 
 | |
| void T_PlatRaise
 | |
| ( plat_t* plat );
 | |
| 
 | |
| // p_doors
 | |
| 
 | |
| void T_VerticalDoor
 | |
| ( vldoor_t* door );
 | |
| 
 | |
| // p_ceilng
 | |
| 
 | |
| void T_MoveCeiling
 | |
| ( ceiling_t* ceiling );
 | |
| 
 | |
| // p_floor
 | |
| 
 | |
| result_e T_MovePlane
 | |
| ( sector_t* sector,
 | |
|   fixed_t speed,
 | |
|   fixed_t dest,
 | |
|   boolean crush,
 | |
|   int floorOrCeiling,
 | |
|   int direction );
 | |
| 
 | |
| void T_MoveFloor
 | |
| ( floormove_t* floor );
 | |
| 
 | |
| void T_MoveElevator
 | |
| ( elevator_t* elevator );
 | |
| 
 | |
| // p_spec
 | |
| 
 | |
| void T_Scroll
 | |
| ( scroll_t * );      // killough 3/7/98: scroll effect thinker
 | |
| 
 | |
| void T_Friction
 | |
| ( friction_t * );    // phares 3/12/98: friction thinker
 | |
| 
 | |
| void T_Pusher
 | |
| ( pusher_t * );      // phares 3/20/98: Push thinker
 | |
| 
 | |
| ////////////////////////////////////////////////////////////////
 | |
| //
 | |
| // Linedef and sector special handler prototypes
 | |
| //
 | |
| ////////////////////////////////////////////////////////////////
 | |
| 
 | |
| // p_telept
 | |
| 
 | |
| int EV_Teleport
 | |
| ( line_t* line,
 | |
|   int side,
 | |
|   mobj_t* thing );
 | |
| 
 | |
| // killough 2/14/98: Add silent teleporter
 | |
| int EV_SilentTeleport
 | |
| ( line_t* line,
 | |
|   int side,
 | |
|   mobj_t* thing );
 | |
| 
 | |
| // killough 1/31/98: Add silent line teleporter
 | |
| int EV_SilentLineTeleport
 | |
| ( line_t* line,
 | |
|   int side,
 | |
|   mobj_t* thing,
 | |
|   boolean reverse);
 | |
| 
 | |
| // p_floor
 | |
| 
 | |
| int
 | |
| EV_DoElevator
 | |
| ( line_t* line,
 | |
|   elevator_e type );
 | |
| 
 | |
| int EV_BuildStairs
 | |
| ( line_t* line,
 | |
|   stair_e type );
 | |
| 
 | |
| int EV_DoFloor
 | |
| ( line_t* line,
 | |
|   floor_e floortype );
 | |
| 
 | |
| // p_ceilng
 | |
| 
 | |
| int EV_DoCeiling
 | |
| ( line_t* line,
 | |
|   ceiling_e type );
 | |
| 
 | |
| int EV_CeilingCrushStop
 | |
| ( line_t* line );
 | |
| 
 | |
| // p_doors
 | |
| 
 | |
| int EV_VerticalDoor
 | |
| ( line_t* line,
 | |
|   mobj_t* thing );
 | |
| 
 | |
| int EV_DoDoor
 | |
| ( line_t* line,
 | |
|   vldoor_e type );
 | |
| 
 | |
| int EV_DoLockedDoor
 | |
| ( line_t* line,
 | |
|   vldoor_e type,
 | |
|   mobj_t* thing );
 | |
| 
 | |
| // p_lights
 | |
| 
 | |
| int EV_StartLightStrobing
 | |
| ( line_t* line );
 | |
| 
 | |
| int EV_TurnTagLightsOff
 | |
| ( line_t* line );
 | |
| 
 | |
| int EV_LightTurnOn
 | |
| ( line_t* line,
 | |
|   int   bright );
 | |
| 
 | |
| int EV_LightTurnOnPartway(line_t* line, fixed_t level); // killough 10/10/98
 | |
| 
 | |
| // p_floor
 | |
| 
 | |
| int EV_DoChange
 | |
| ( line_t* line,
 | |
|   change_e changetype );
 | |
| 
 | |
| int EV_DoDonut
 | |
| ( line_t* line );
 | |
| 
 | |
| // p_plats
 | |
| 
 | |
| int EV_DoPlat
 | |
| ( line_t* line,
 | |
|   plattype_e  type,
 | |
|   int amount );
 | |
| 
 | |
| int EV_StopPlat
 | |
| ( line_t* line );
 | |
| 
 | |
| // p_genlin
 | |
| 
 | |
| int EV_DoGenFloor
 | |
| ( line_t* line );
 | |
| 
 | |
| int EV_DoGenCeiling
 | |
| ( line_t* line );
 | |
| 
 | |
| int EV_DoGenLift
 | |
| ( line_t* line );
 | |
| 
 | |
| int EV_DoGenStairs
 | |
| ( line_t* line );
 | |
| 
 | |
| int EV_DoGenCrusher
 | |
| ( line_t* line );
 | |
| 
 | |
| int EV_DoGenDoor
 | |
| ( line_t* line );
 | |
| 
 | |
| int EV_DoGenLockedDoor
 | |
| ( line_t* line );
 | |
| 
 | |
| ////////////////////////////////////////////////////////////////
 | |
| //
 | |
| // Linedef and sector special thinker spawning
 | |
| //
 | |
| ////////////////////////////////////////////////////////////////
 | |
| 
 | |
| // at game start
 | |
| void P_InitPicAnims
 | |
| ( void );
 | |
| 
 | |
| void P_InitSwitchList
 | |
| ( void );
 | |
| 
 | |
| // at map load
 | |
| void P_SpawnSpecials
 | |
| ( void );
 | |
| 
 | |
| // every tic
 | |
| void P_UpdateSpecials
 | |
| ( void );
 | |
| 
 | |
| // when needed
 | |
| boolean P_UseSpecialLine
 | |
| ( mobj_t* thing,
 | |
|   line_t* line,
 | |
|   int   side );
 | |
| 
 | |
| void P_ShootSpecialLine
 | |
| ( mobj_t* thing,
 | |
|   line_t* line );
 | |
| 
 | |
| void P_CrossSpecialLine(line_t *line, int side, mobj_t *thing);
 | |
| 
 | |
| void P_PlayerInSpecialSector
 | |
| ( player_t* player );
 | |
| 
 | |
| // p_lights
 | |
| 
 | |
| void P_SpawnFireFlicker
 | |
| ( sector_t* sector );
 | |
| 
 | |
| void P_SpawnLightFlash
 | |
| ( sector_t* sector );
 | |
| 
 | |
| void P_SpawnStrobeFlash
 | |
| ( sector_t* sector,
 | |
|   int fastOrSlow,
 | |
|   int inSync );
 | |
| 
 | |
| void P_SpawnGlowingLight
 | |
| ( sector_t* sector );
 | |
| 
 | |
| // p_plats
 | |
| 
 | |
| void P_AddActivePlat
 | |
| ( plat_t* plat );
 | |
| 
 | |
| void P_RemoveActivePlat
 | |
| ( plat_t* plat );
 | |
| 
 | |
| void P_RemoveAllActivePlats
 | |
| ( void );    // killough
 | |
| 
 | |
| void P_ActivateInStasis
 | |
| ( int tag );
 | |
| 
 | |
| // p_doors
 | |
| 
 | |
| void P_SpawnDoorCloseIn30
 | |
| ( sector_t* sec );
 | |
| 
 | |
| void P_SpawnDoorRaiseIn5Mins
 | |
| ( sector_t* sec,
 | |
|   int secnum );
 | |
| 
 | |
| // p_ceilng
 | |
| 
 | |
| void P_RemoveActiveCeiling
 | |
| ( ceiling_t* ceiling );  //jff 2/22/98
 | |
| 
 | |
| void P_RemoveAllActiveCeilings
 | |
| ( void );                //jff 2/22/98
 | |
| 
 | |
| void P_AddActiveCeiling
 | |
| ( ceiling_t* c );
 | |
| 
 | |
| void P_RemoveActiveCeiling
 | |
| ( ceiling_t* c );
 | |
| 
 | |
| int P_ActivateInStasisCeiling
 | |
| ( line_t* line );
 | |
| 
 | |
| mobj_t* P_GetPushThing(int);                                // phares 3/23/98
 | |
| 
 | |
| #endif
 |