⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 p_doors.c

📁 PIXIL is a small footprint operating environment, complete with PDA PIM applications, a browser and
💻 C
📖 第 1 页 / 共 2 页
字号:
// Emacs style mode select   -*- C++ -*- //-----------------------------------------------------------------------------//// $Id: p_doors.c,v 1.2 2003/09/08 22:34:29 jasonk Exp $//// Copyright (C) 1993-1996 by id Software, Inc.//// This source is available for distribution and/or modification// only under the terms of the DOOM Source Code License as// published by id Software. All rights reserved.//// The source is distributed in the hope that it will be useful,// but WITHOUT ANY WARRANTY; without even the implied warranty of// FITNESS FOR A PARTICULAR PURPOSE. See the DOOM Source Code License// for more details.//// $Log: p_doors.c,v $// Revision 1.2  2003/09/08 22:34:29  jasonk// Updated files because this fucker won't build for no fucking good reason.//// Revision 1.1.1.1  2003/09/04 21:08:13  jasonk// Initial import//// Revision 1.1  2000/12/08 21:07:53  jeffw// nxdoom initial entry -- No nxdoom/Makefile so it won't build automatically////// DESCRIPTION: Door animation code (opening/closing)////-----------------------------------------------------------------------------static const charrcsid[] = "$Id: p_doors.c,v 1.2 2003/09/08 22:34:29 jasonk Exp $";#include "z_zone.h"#include "doomdef.h"#include "p_local.h"#include "s_sound.h"// State.#include "doomstat.h"#include "r_state.h"// Data.#include "dstrings.h"#include "sounds.h"#if 0//// Sliding door frame information//slidename_t	slideFrameNames[MAXSLIDEDOORS] ={    {"GDOORF1","GDOORF2","GDOORF3","GDOORF4",	// front     "GDOORB1","GDOORB2","GDOORB3","GDOORB4"},	// back	     {"\0","\0","\0","\0"}};#endif//// VERTICAL DOORS////// T_VerticalDoor//void T_VerticalDoor (vldoor_t* door){    result_e	res;	    switch(door->direction)    {      case 0:	// WAITING	if (!--door->topcountdown)	{	    switch(door->type)	    {	      case blazeRaise:		door->direction = -1; // time to go back down		S_StartSound((mobj_t *)&door->sector->soundorg,			     sfx_bdcls);		break;			      case normal:		door->direction = -1; // time to go back down		S_StartSound((mobj_t *)&door->sector->soundorg,			     sfx_dorcls);		break;			      case close30ThenOpen:		door->direction = 1;		S_StartSound((mobj_t *)&door->sector->soundorg,			     sfx_doropn);		break;			      default:		break;	    }	}	break;	      case 2:	//  INITIAL WAIT	if (!--door->topcountdown)	{	    switch(door->type)	    {	      case raiseIn5Mins:		door->direction = 1;		door->type = normal;		S_StartSound((mobj_t *)&door->sector->soundorg,			     sfx_doropn);		break;			      default:		break;	    }	}	break;	      case -1:	// DOWN	res = T_MovePlane(door->sector,			  door->speed,			  door->sector->floorheight,			  false,1,door->direction);	if (res == pastdest)	{	    switch(door->type)	    {	      case blazeRaise:	      case blazeClose:		door->sector->specialdata = NULL;		P_RemoveThinker (&door->thinker);  // unlink and free		S_StartSound((mobj_t *)&door->sector->soundorg,			     sfx_bdcls);		break;			      case normal:	      case close:		door->sector->specialdata = NULL;		P_RemoveThinker (&door->thinker);  // unlink and free		break;			      case close30ThenOpen:		door->direction = 0;		door->topcountdown = 35*30;		break;			      default:		break;	    }	}	else if (res == crushed)	{	    switch(door->type)	    {	      case blazeClose:	      case close:		// DO NOT GO BACK UP!		break;			      default:		door->direction = 1;		S_StartSound((mobj_t *)&door->sector->soundorg,			     sfx_doropn);		break;	    }	}	break;	      case 1:	// UP	res = T_MovePlane(door->sector,			  door->speed,			  door->topheight,			  false,1,door->direction);		if (res == pastdest)	{	    switch(door->type)	    {	      case blazeRaise:	      case normal:		door->direction = 0; // wait at top		door->topcountdown = door->topwait;		break;			      case close30ThenOpen:	      case blazeOpen:	      case open:		door->sector->specialdata = NULL;		P_RemoveThinker (&door->thinker);  // unlink and free		break;			      default:		break;	    }	}	break;    }}//// EV_DoLockedDoor// Move a locked door up/down//intEV_DoLockedDoor( line_t*	line,  vldoor_e	type,  mobj_t*	thing ){    player_t*	p;	    p = thing->player;	    if (!p)	return 0;		    switch(line->special)    {      case 99:	// Blue Lock      case 133:	if ( !p )	    return 0;	if (!p->cards[it_bluecard] && !p->cards[it_blueskull])	{	    p->message = PD_BLUEO;	    S_StartSound(NULL,sfx_oof);	    return 0;	}	break;	      case 134: // Red Lock      case 135:	if ( !p )	    return 0;	if (!p->cards[it_redcard] && !p->cards[it_redskull])	{	    p->message = PD_REDO;	    S_StartSound(NULL,sfx_oof);	    return 0;	}	break;	      case 136:	// Yellow Lock      case 137:	if ( !p )	    return 0;	if (!p->cards[it_yellowcard] &&	    !p->cards[it_yellowskull])	{	    p->message = PD_YELLOWO;	    S_StartSound(NULL,sfx_oof);	    return 0;	}	break;	    }    return EV_DoDoor(line,type);}intEV_DoDoor( line_t*	line,  vldoor_e	type ){    int		secnum,rtn;    sector_t*	sec;    vldoor_t*	door;	    secnum = -1;    rtn = 0;        while ((secnum = P_FindSectorFromLineTag(line,secnum)) >= 0)    {	sec = &sectors[secnum];	if (sec->specialdata)	    continue;				// new door thinker	rtn = 1;	door = Z_Malloc (sizeof(*door), PU_LEVSPEC, 0);	P_AddThinker (&door->thinker);	sec->specialdata = door;	door->thinker.function.acp1 = (actionf_p1) T_VerticalDoor;	door->sector = sec;	door->type = type;	door->topwait = VDOORWAIT;	door->speed = VDOORSPEED;			switch(type)	{	  case blazeClose:	    door->topheight = P_FindLowestCeilingSurrounding(sec);	    door->topheight -= 4*FRACUNIT;	    door->direction = -1;	    door->speed = VDOORSPEED * 4;	    S_StartSound((mobj_t *)&door->sector->soundorg,			 sfx_bdcls);	    break;	    	  case close:	    door->topheight = P_FindLowestCeilingSurrounding(sec);	    door->topheight -= 4*FRACUNIT;	    door->direction = -1;	    S_StartSound((mobj_t *)&door->sector->soundorg,			 sfx_dorcls);	    break;	    	  case close30ThenOpen:	    door->topheight = sec->ceilingheight;	    door->direction = -1;	    S_StartSound((mobj_t *)&door->sector->soundorg,			 sfx_dorcls);	    break;	    	  case blazeRaise:	  case blazeOpen:	    door->direction = 1;	    door->topheight = P_FindLowestCeilingSurrounding(sec);	    door->topheight -= 4*FRACUNIT;	    door->speed = VDOORSPEED * 4;	    if (door->topheight != sec->ceilingheight)		S_StartSound((mobj_t *)&door->sector->soundorg,			     sfx_bdopn);	    break;	    	  case normal:	  case open:	    door->direction = 1;	    door->topheight = P_FindLowestCeilingSurrounding(sec);	    door->topheight -= 4*FRACUNIT;	    if (door->topheight != sec->ceilingheight)		S_StartSound((mobj_t *)&door->sector->soundorg,			     sfx_doropn);	    break;	    	  default:	    break;	}		    }    return rtn;}//// EV_VerticalDoor : open a door manually, no tag value//voidEV_VerticalDoor( line_t*	line,  mobj_t*	thing ){    player_t*	player;    int		secnum;    sector_t*	sec;    vldoor_t*	door;    int		side;	    side = 0;	// only front sides can be used    //	Check for locks    player = thing->player;		    switch(line->special)    {      case 26: // Blue Lock      case 32:	if ( !player )	    return;		if (!player->cards[it_bluecard] && !player->cards[it_blueskull])	{	    player->message = PD_BLUEK;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -