📄 p_spec.h
字号:
//**************************************************************************//**//** p_spec.h : Heretic 2 : Raven Software, Corp.//**//** $RCSfile: p_spec.h,v $//** $Revision: 1.38 $//** $Date: 96/01/06 18:37:35 $//** $Author: bgokey $//**//**************************************************************************extern int *TerrainTypes;//// scrolling line specials//#define MAXLINEANIMS 64extern short numlinespecials;extern line_t *linespeciallist[MAXLINEANIMS];// Define values for map objects#define MO_TELEPORTMAN 14// at game startvoid P_InitTerrainTypes(void);void P_InitLava(void);// at map loadvoid P_SpawnSpecials(void);// every ticvoid P_UpdateSpecials(void);// when neededboolean P_ExecuteLineSpecial(int special, byte *args, line_t *line, int side, mobj_t *mo);boolean P_ActivateLine(line_t *ld, mobj_t *mo, int side, int activationType);//boolean P_UseSpecialLine ( mobj_t *thing, line_t *line);//void P_ShootSpecialLine ( mobj_t *thing, line_t *line);//void P_CrossSpecialLine (int linenum, int side, mobj_t *thing);void P_PlayerInSpecialSector(player_t *player);void P_PlayerOnSpecialFlat(player_t *player, int floorType);//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_FindLowestCeilingSurrounding(sector_t *sec);fixed_t P_FindHighestCeilingSurrounding(sector_t *sec);//int P_FindSectorFromLineTag(line_t *line,int start);int P_FindSectorFromTag(int tag, int start);//int P_FindMinSurroundingLight(sector_t *sector,int max);sector_t *getNextSector(line_t *line,sector_t *sec);line_t *P_FindLine(int lineTag, int *searchPosition);//// SPECIAL////int EV_DoDonut(line_t *line);//-------------------------------// P_anim.c//-------------------------------void P_AnimateSurfaces(void);void P_InitFTAnims(void);void P_InitLightning(void);void P_ForceLightning(void);/*=============================================================================== P_LIGHTS===============================================================================*/typedef enum{ LITE_RAISEBYVALUE, LITE_LOWERBYVALUE, LITE_CHANGETOVALUE, LITE_FADE, LITE_GLOW, LITE_FLICKER, LITE_STROBE} lighttype_t;typedef struct{ thinker_t thinker; sector_t *sector; lighttype_t type; int value1; int value2; int tics1; int tics2; int count;} light_t; typedef struct{ thinker_t thinker; sector_t *sector; int index; int base;} phase_t;#define LIGHT_SEQUENCE_START 2#define LIGHT_SEQUENCE 3#define LIGHT_SEQUENCE_ALT 4void T_Phase(phase_t *phase);void T_Light(light_t *light);void P_SpawnPhasedLight(sector_t *sector, int base, int index);void P_SpawnLightSequence(sector_t *sector, int indexStep);boolean EV_SpawnLight(line_t *line, byte *arg, lighttype_t type);#if 0typedef 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;typedef struct{ thinker_t thinker; sector_t *sector; int index; int base;} phase_t;#define GLOWSPEED 8#define STROBEBRIGHT 5#define FASTDARK 15#define SLOWDARK 35#define LIGHT_SEQUENCE_START 2#define LIGHT_SEQUENCE 3#define LIGHT_SEQUENCE_ALT 4void T_LightFlash (lightflash_t *flash);void P_SpawnLightFlash (sector_t *sector);void T_StrobeFlash (strobe_t *flash);void P_SpawnStrobeFlash (sector_t *sector, int fastOrSlow, int inSync);void EV_StartLightStrobing(line_t *line);void EV_TurnTagLightsOff(line_t *line);void EV_LightTurnOn(line_t *line, int bright);void T_Glow(glow_t *g);void P_SpawnGlowingLight(sector_t *sector);void T_Phase(phase_t *phase);void P_SpawnPhasedLight(sector_t *sector, int base, int index);void P_SpawnLightSequence(sector_t *sector, int indexStep);#endif/*=============================================================================== P_SWITCH===============================================================================*/typedef struct{ char name1[9]; char name2[9]; int soundID;} switchlist_t;typedef enum{ SWTCH_TOP, SWTCH_MIDDLE, SWTCH_BOTTOM} bwhere_e;typedef struct{ line_t *line; bwhere_e where; int btexture; int btimer; mobj_t *soundorg;} button_t;#define MAXSWITCHES 50 // max # of wall switches in a level#define MAXBUTTONS 16 // 4 players, 4 buttons each at once, max.#define BUTTONTIME 35 // 1 secondextern button_t buttonlist[MAXBUTTONS];void P_ChangeSwitchTexture(line_t *line, int useAgain);void P_InitSwitchList(void);/*=============================================================================== P_PLATS===============================================================================*/typedef enum{ PLAT_UP, PLAT_DOWN, PLAT_WAITING,// PLAT_IN_STASIS} plat_e;typedef enum{ PLAT_PERPETUALRAISE, PLAT_DOWNWAITUPSTAY, PLAT_DOWNBYVALUEWAITUPSTAY, PLAT_UPWAITDOWNSTAY, PLAT_UPBYVALUEWAITDOWNSTAY, //PLAT_RAISEANDCHANGE, //PLAT_RAISETONEARESTANDCHANGE} plattype_e;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; int crush; int tag; plattype_e type;} plat_t;#define PLATWAIT 3#define PLATSPEED FRACUNIT#define MAXPLATS 30extern plat_t *activeplats[MAXPLATS];void T_PlatRaise(plat_t *plat);int EV_DoPlat(line_t *line, byte *args, plattype_e type, int amount);void P_AddActivePlat(plat_t *plat);void P_RemoveActivePlat(plat_t *plat);void EV_StopPlat(line_t *line, byte *args);/*=============================================================================== P_DOORS===============================================================================*/typedef enum{ DREV_NORMAL, DREV_CLOSE30THENOPEN, DREV_CLOSE, DREV_OPEN, DREV_RAISEIN5MINS,} vldoor_e;typedef struct{ thinker_t thinker; sector_t *sector; vldoor_e type; fixed_t topheight; fixed_t speed; int direction; // 1 = up, 0 = waiting at top, -1 = down int topwait; // tics to wait at the top (keep in case a door going down is reset) int topcountdown; // when it reaches 0, start going down} vldoor_t;#define VDOORSPEED FRACUNIT*2#define VDOORWAIT 150boolean EV_VerticalDoor(line_t *line, mobj_t *thing);int EV_DoDoor(line_t *line, byte *args, vldoor_e type);void T_VerticalDoor(vldoor_t *door);//void P_SpawnDoorCloseIn30(sector_t *sec);//void P_SpawnDoorRaiseIn5Mins(sector_t *sec, int secnum);/*=============================================================================== P_CEILNG===============================================================================*/typedef enum{ CLEV_LOWERTOFLOOR, CLEV_RAISETOHIGHEST, CLEV_LOWERANDCRUSH, CLEV_CRUSHANDRAISE, CLEV_LOWERBYVALUE, CLEV_RAISEBYVALUE, CLEV_CRUSHRAISEANDSTAY, CLEV_MOVETOVALUETIMES8} ceiling_e;typedef struct{ thinker_t thinker; sector_t *sector; ceiling_e type; fixed_t bottomheight, topheight; fixed_t speed; int crush; int direction; // 1 = up, 0 = waiting, -1 = down int tag; // ID int olddirection;} ceiling_t;#define CEILSPEED FRACUNIT#define CEILWAIT 150#define MAXCEILINGS 30extern ceiling_t *activeceilings[MAXCEILINGS];int EV_DoCeiling(line_t *line, byte *args, ceiling_e type);void T_MoveCeiling(ceiling_t *ceiling);void P_AddActiveCeiling(ceiling_t *c);void P_RemoveActiveCeiling(ceiling_t *c);int EV_CeilingCrushStop(line_t *line, byte *args);/*=============================================================================== P_FLOOR===============================================================================*/typedef enum{ FLEV_LOWERFLOOR, // lower floor to highest surrounding floor FLEV_LOWERFLOORTOLOWEST, // lower floor to lowest surrounding floor FLEV_LOWERFLOORBYVALUE, FLEV_RAISEFLOOR, // raise floor to lowest surrounding CEILING FLEV_RAISEFLOORTONEAREST, // raise floor to next highest surrounding floor FLEV_RAISEFLOORBYVALUE, FLEV_RAISEFLOORCRUSH, FLEV_RAISEBUILDSTEP, // One step of a staircase FLEV_RAISEBYVALUETIMES8, FLEV_LOWERBYVALUETIMES8, FLEV_LOWERTIMES8INSTANT, FLEV_RAISETIMES8INSTANT, FLEV_MOVETOVALUETIMES8} floor_e;typedef struct{ thinker_t thinker; sector_t *sector; floor_e type; int crush; int direction; int newspecial; short texture; fixed_t floordestheight; fixed_t speed; int delayCount; int delayTotal; fixed_t stairsDelayHeight; fixed_t stairsDelayHeightDelta; fixed_t resetHeight; short resetDelay; short resetDelayCount; byte textureChange;} floormove_t;typedef struct{ thinker_t thinker; sector_t *sector; int ceilingSpeed; int floorSpeed; int floordest; int ceilingdest; int direction; int crush;} pillar_t;typedef struct{ thinker_t thinker; sector_t *sector; fixed_t originalHeight; fixed_t accumulator; fixed_t accDelta; fixed_t targetScale; fixed_t scale; fixed_t scaleDelta; int ticker; int state;} floorWaggle_t;#define FLOORSPEED FRACUNITtypedef enum{ RES_OK, RES_CRUSHED, RES_PASTDEST} result_e;typedef enum{ STAIRS_NORMAL, STAIRS_SYNC, STAIRS_PHASED} stairs_e;result_e T_MovePlane(sector_t *sector, fixed_t speed, fixed_t dest, int crush, int floorOrCeiling, int direction);int EV_BuildStairs(line_t *line, byte *args, int direction, stairs_e type);int EV_DoFloor(line_t *line, byte *args, floor_e floortype);void T_MoveFloor(floormove_t *floor);void T_BuildPillar(pillar_t *pillar);void T_FloorWaggle(floorWaggle_t *waggle);int EV_BuildPillar(line_t *line, byte *args, boolean crush);int EV_OpenPillar(line_t *line, byte *args);int EV_DoFloorAndCeiling(line_t *line, byte *args, boolean raise);int EV_FloorCrushStop(line_t *line, byte *args);boolean EV_StartFloorWaggle(int tag, int height, int speed, int offset, int timer);//--------------------------------------------------------------------------//// p_telept////--------------------------------------------------------------------------boolean P_Teleport(mobj_t *thing, fixed_t x, fixed_t y, angle_t angle, boolean useFog);boolean EV_Teleport(int tid, mobj_t *thing, boolean fog);//--------------------------------------------------------------------------//// p_acs////--------------------------------------------------------------------------#define MAX_ACS_SCRIPT_VARS 10#define MAX_ACS_MAP_VARS 32#define MAX_ACS_WORLD_VARS 64#define ACS_STACK_DEPTH 32#define MAX_ACS_STORE 20typedef enum{ ASTE_INACTIVE, ASTE_RUNNING, ASTE_SUSPENDED, ASTE_WAITINGFORTAG, ASTE_WAITINGFORPOLY, ASTE_WAITINGFORSCRIPT, ASTE_TERMINATING} aste_t;typedef struct acs_s acs_t;typedef struct acsInfo_s acsInfo_t;struct acsInfo_s{ int number; int *address; int argCount; aste_t state; int waitValue;};struct acs_s{ thinker_t thinker; mobj_t *activator; line_t *line; int side; int number; int infoIndex; int delayCount; int stack[ACS_STACK_DEPTH]; int stackPtr; int vars[MAX_ACS_SCRIPT_VARS]; int *ip;};typedef struct{ int map; // Target map int script; // Script number on target map byte args[4]; // Padded to 4 for alignment} acsstore_t;void P_LoadACScripts(int lump);boolean P_StartACS(int number, int map, byte *args, mobj_t *activator, line_t *line, int side);boolean P_StartLockedACS(line_t *line, byte *args, mobj_t *mo, int side); boolean P_TerminateACS(int number, int map);boolean P_SuspendACS(int number, int map);void T_InterpretACS(acs_t *script);void P_TagFinished(int tag);void P_PolyobjFinished(int po);void P_ACSInitNewGame(void);void P_CheckACSStore(void);extern int ACScriptCount;extern byte *ActionCodeBase;extern acsInfo_t *ACSInfo;extern int MapVars[MAX_ACS_MAP_VARS];extern int WorldVars[MAX_ACS_WORLD_VARS];extern acsstore_t ACSStore[MAX_ACS_STORE+1]; // +1 for termination marker//--------------------------------------------------------------------------//// p_things////--------------------------------------------------------------------------extern mobjtype_t TranslateThingType[];boolean EV_ThingProjectile(byte *args, boolean gravity);boolean EV_ThingSpawn(byte *args, boolean fog);boolean EV_ThingActivate(int tid);boolean EV_ThingDeactivate(int tid);boolean EV_ThingRemove(int tid);boolean EV_ThingDestroy(int tid);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -