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

📄 p_spec.c

📁 PIXIL is a small footprint operating environment, complete with PDA PIM applications, a browser and
💻 C
📖 第 1 页 / 共 2 页
字号:
	// EXIT!	G_ExitLevel ();	break;	      case 53:	// Perpetual Platform Raise	EV_DoPlat(line,perpetualRaise,0);	line->special = 0;	break;	      case 54:	// Platform Stop	EV_StopPlat(line);	line->special = 0;	break;      case 56:	// Raise Floor Crush	EV_DoFloor(line,raiseFloorCrush);	line->special = 0;	break;      case 57:	// Ceiling Crush Stop	EV_CeilingCrushStop(line);	line->special = 0;	break;	      case 58:	// Raise Floor 24	EV_DoFloor(line,raiseFloor24);	line->special = 0;	break;      case 59:	// Raise Floor 24 And Change	EV_DoFloor(line,raiseFloor24AndChange);	line->special = 0;	break;	      case 104:	// Turn lights off in sector(tag)	EV_TurnTagLightsOff(line);	line->special = 0;	break;	      case 108:	// Blazing Door Raise (faster than TURBO!)	EV_DoDoor (line,blazeRaise);	line->special = 0;	break;	      case 109:	// Blazing Door Open (faster than TURBO!)	EV_DoDoor (line,blazeOpen);	line->special = 0;	break;	      case 100:	// Build Stairs Turbo 16	EV_BuildStairs(line,turbo16);	line->special = 0;	break;	      case 110:	// Blazing Door Close (faster than TURBO!)	EV_DoDoor (line,blazeClose);	line->special = 0;	break;      case 119:	// Raise floor to nearest surr. floor	EV_DoFloor(line,raiseFloorToNearest);	line->special = 0;	break;	      case 121:	// Blazing PlatDownWaitUpStay	EV_DoPlat(line,blazeDWUS,0);	line->special = 0;	break;	      case 124:	// Secret EXIT	G_SecretExitLevel ();	break;		      case 125:	// TELEPORT MonsterONLY	if (!thing->player)	{	    EV_Teleport( line, side, thing );	    line->special = 0;	}	break;	      case 130:	// Raise Floor Turbo	EV_DoFloor(line,raiseFloorTurbo);	line->special = 0;	break;	      case 141:	// Silent Ceiling Crush & Raise	EV_DoCeiling(line,silentCrushAndRaise);	line->special = 0;	break;		// RETRIGGERS.  All from here till end.      case 72:	// Ceiling Crush	EV_DoCeiling( line, lowerAndCrush );	break;      case 73:	// Ceiling Crush and Raise	EV_DoCeiling(line,crushAndRaise);	break;      case 74:	// Ceiling Crush Stop	EV_CeilingCrushStop(line);	break;	      case 75:	// Close Door	EV_DoDoor(line,close);	break;	      case 76:	// Close Door 30	EV_DoDoor(line,close30ThenOpen);	break;	      case 77:	// Fast Ceiling Crush & Raise	EV_DoCeiling(line,fastCrushAndRaise);	break;	      case 79:	// Lights Very Dark	EV_LightTurnOn(line,35);	break;	      case 80:	// Light Turn On - brightest near	EV_LightTurnOn(line,0);	break;	      case 81:	// Light Turn On 255	EV_LightTurnOn(line,255);	break;	      case 82:	// Lower Floor To Lowest	EV_DoFloor( line, lowerFloorToLowest );	break;	      case 83:	// Lower Floor	EV_DoFloor(line,lowerFloor);	break;      case 84:	// LowerAndChange	EV_DoFloor(line,lowerAndChange);	break;      case 86:	// Open Door	EV_DoDoor(line,open);	break;	      case 87:	// Perpetual Platform Raise	EV_DoPlat(line,perpetualRaise,0);	break;	      case 88:	// PlatDownWaitUp	EV_DoPlat(line,downWaitUpStay,0);	break;	      case 89:	// Platform Stop	EV_StopPlat(line);	break;	      case 90:	// Raise Door	EV_DoDoor(line,normal);	break;	      case 91:	// Raise Floor	EV_DoFloor(line,raiseFloor);	break;	      case 92:	// Raise Floor 24	EV_DoFloor(line,raiseFloor24);	break;	      case 93:	// Raise Floor 24 And Change	EV_DoFloor(line,raiseFloor24AndChange);	break;	      case 94:	// Raise Floor Crush	EV_DoFloor(line,raiseFloorCrush);	break;	      case 95:	// Raise floor to nearest height	// and change texture.	EV_DoPlat(line,raiseToNearestAndChange,0);	break;	      case 96:	// Raise floor to shortest texture height	// on either side of lines.	EV_DoFloor(line,raiseToTexture);	break;	      case 97:	// TELEPORT!	EV_Teleport( line, side, thing );	break;	      case 98:	// Lower Floor (TURBO)	EV_DoFloor(line,turboLower);	break;      case 105:	// Blazing Door Raise (faster than TURBO!)	EV_DoDoor (line,blazeRaise);	break;	      case 106:	// Blazing Door Open (faster than TURBO!)	EV_DoDoor (line,blazeOpen);	break;      case 107:	// Blazing Door Close (faster than TURBO!)	EV_DoDoor (line,blazeClose);	break;      case 120:	// Blazing PlatDownWaitUpStay.	EV_DoPlat(line,blazeDWUS,0);	break;	      case 126:	// TELEPORT MonsterONLY.	if (!thing->player)	    EV_Teleport( line, side, thing );	break;	      case 128:	// Raise To Nearest Floor	EV_DoFloor(line,raiseFloorToNearest);	break;	      case 129:	// Raise Floor Turbo	EV_DoFloor(line,raiseFloorTurbo);	break;    }}//// P_ShootSpecialLine - IMPACT SPECIALS// Called when a thing shoots a special line.//voidP_ShootSpecialLine( mobj_t*	thing,  line_t*	line ){    int		ok;        //	Impacts that other things can activate.    if (!thing->player)    {	ok = 0;	switch(line->special)	{	  case 46:	    // OPEN DOOR IMPACT	    ok = 1;	    break;	}	if (!ok)	    return;    }    switch(line->special)    {      case 24:	// RAISE FLOOR	EV_DoFloor(line,raiseFloor);	P_ChangeSwitchTexture(line,0);	break;	      case 46:	// OPEN DOOR	EV_DoDoor(line,open);	P_ChangeSwitchTexture(line,1);	break;	      case 47:	// RAISE FLOOR NEAR AND CHANGE	EV_DoPlat(line,raiseToNearestAndChange,0);	P_ChangeSwitchTexture(line,0);	break;    }}//// P_PlayerInSpecialSector// Called every tic frame//  that the player origin is in a special sector//void P_PlayerInSpecialSector (player_t* player){    sector_t*	sector;	    sector = player->mo->subsector->sector;    // Falling, not all the way down yet?    if (player->mo->z != sector->floorheight)	return;	    // Has hitten ground.    switch (sector->special)    {      case 5:	// HELLSLIME DAMAGE	if (!player->powers[pw_ironfeet])	    if (!(leveltime&0x1f))		P_DamageMobj (player->mo, NULL, NULL, 10);	break;	      case 7:	// NUKAGE DAMAGE	if (!player->powers[pw_ironfeet])	    if (!(leveltime&0x1f))		P_DamageMobj (player->mo, NULL, NULL, 5);	break;	      case 16:	// SUPER HELLSLIME DAMAGE      case 4:	// STROBE HURT	if (!player->powers[pw_ironfeet]	    || (P_Random()<5) )	{	    if (!(leveltime&0x1f))		P_DamageMobj (player->mo, NULL, NULL, 20);	}	break;			      case 9:	// SECRET SECTOR	player->secretcount++;	sector->special = 0;	break;			      case 11:	// EXIT SUPER DAMAGE! (for E1M8 finale)	player->cheats &= ~CF_GODMODE;	if (!(leveltime&0x1f))	    P_DamageMobj (player->mo, NULL, NULL, 20);	if (player->health <= 10)	    G_ExitLevel();	break;			      default:	I_Error ("P_PlayerInSpecialSector: "		 "unknown special %i",		 sector->special);	break;    };}//// P_UpdateSpecials// Animate planes, scroll walls, etc.//boolean		levelTimer;int		levelTimeCount;void P_UpdateSpecials (void){    anim_t*	anim;    int		pic;    int		i;    line_t*	line;        //	LEVEL TIMER    if (levelTimer == true)    {	levelTimeCount--;	if (!levelTimeCount)	    G_ExitLevel();    }        //	ANIMATE FLATS AND TEXTURES GLOBALLY    for (anim = anims ; anim < lastanim ; anim++)    {	for (i=anim->basepic ; i<anim->basepic+anim->numpics ; i++)	{	    pic = anim->basepic + ( (leveltime/anim->speed + i)%anim->numpics );	    if (anim->istexture)		texturetranslation[i] = pic;	    else		flattranslation[i] = pic;	}    }        //	ANIMATE LINE SPECIALS    for (i = 0; i < numlinespecials; i++)    {	line = linespeciallist[i];	switch(line->special)	{	  case 48:	    // EFFECT FIRSTCOL SCROLL +	    sides[line->sidenum[0]].textureoffset += FRACUNIT;	    break;	}    }        //	DO BUTTONS    for (i = 0; i < MAXBUTTONS; i++)	if (buttonlist[i].btimer)	{	    buttonlist[i].btimer--;	    if (!buttonlist[i].btimer)	    {		switch(buttonlist[i].where)		{		  case top:		    sides[buttonlist[i].line->sidenum[0]].toptexture =			buttonlist[i].btexture;		    break;		    		  case middle:		    sides[buttonlist[i].line->sidenum[0]].midtexture =			buttonlist[i].btexture;		    break;		    		  case bottom:		    sides[buttonlist[i].line->sidenum[0]].bottomtexture =			buttonlist[i].btexture;		    break;		}		S_StartSound((mobj_t *)&buttonlist[i].soundorg,sfx_swtchn);		memset(&buttonlist[i],0,sizeof(button_t));	    }	}	}//// Special Stuff that can not be categorized//int EV_DoDonut(line_t*	line){    sector_t*		s1;    sector_t*		s2;    sector_t*		s3;    int			secnum;    int			rtn;    int			i;    floormove_t*	floor;	    secnum = -1;    rtn = 0;    while ((secnum = P_FindSectorFromLineTag(line,secnum)) >= 0)    {	s1 = &sectors[secnum];			// ALREADY MOVING?  IF SO, KEEP GOING...	if (s1->specialdata)	    continue;				rtn = 1;	s2 = getNextSector(s1->lines[0],s1);	for (i = 0;i < s2->linecount;i++)	{	    if ((!s2->lines[i]->flags & ML_TWOSIDED) ||		(s2->lines[i]->backsector == s1))		continue;	    s3 = s2->lines[i]->backsector;	    	    //	Spawn rising slime	    floor = Z_Malloc (sizeof(*floor), PU_LEVSPEC, 0);	    P_AddThinker (&floor->thinker);	    s2->specialdata = floor;	    floor->thinker.function.acp1 = (actionf_p1) T_MoveFloor;	    floor->type = donutRaise;	    floor->crush = false;	    floor->direction = 1;	    floor->sector = s2;	    floor->speed = FLOORSPEED / 2;	    floor->texture = s3->floorpic;	    floor->newspecial = 0;	    floor->floordestheight = s3->floorheight;	    	    //	Spawn lowering donut-hole	    floor = Z_Malloc (sizeof(*floor), PU_LEVSPEC, 0);	    P_AddThinker (&floor->thinker);	    s1->specialdata = floor;	    floor->thinker.function.acp1 = (actionf_p1) T_MoveFloor;	    floor->type = lowerFloor;	    floor->crush = false;	    floor->direction = -1;	    floor->sector = s1;	    floor->speed = FLOORSPEED / 2;	    floor->floordestheight = s3->floorheight;	    break;	}    }    return rtn;}//// SPECIAL SPAWNING////// P_SpawnSpecials// After the map has been loaded, scan for specials//  that spawn thinkers//short		numlinespecials;line_t*		linespeciallist[MAXLINEANIMS];// Parses command line parameters.void P_SpawnSpecials (void){    sector_t*	sector;    int		i;    int		episode;    episode = 1;    if (W_CheckNumForName("texture2") >= 0)	episode = 2;        // See if -TIMER needs to be used.    levelTimer = false;	    i = M_CheckParm("-avg");    if (i && deathmatch)    {	levelTimer = true;	levelTimeCount = 20 * 60 * 35;    }	    i = M_CheckParm("-timer");    if (i && deathmatch)    {	int	time;	time = atoi(myargv[i+1]) * 60 * 35;	levelTimer = true;	levelTimeCount = time;    }        //	Init special SECTORs.    sector = sectors;    for (i=0 ; i<numsectors ; i++, sector++)    {	if (!sector->special)	    continue;		switch (sector->special)	{	  case 1:	    // FLICKERING LIGHTS	    P_SpawnLightFlash (sector);	    break;	  case 2:	    // STROBE FAST	    P_SpawnStrobeFlash(sector,FASTDARK,0);	    break;	    	  case 3:	    // STROBE SLOW	    P_SpawnStrobeFlash(sector,SLOWDARK,0);	    break;	    	  case 4:	    // STROBE FAST/DEATH SLIME	    P_SpawnStrobeFlash(sector,FASTDARK,0);	    sector->special = 4;	    break;	    	  case 8:	    // GLOWING LIGHT	    P_SpawnGlowingLight(sector);	    break;	  case 9:	    // SECRET SECTOR	    totalsecret++;	    break;	    	  case 10:	    // DOOR CLOSE IN 30 SECONDS	    P_SpawnDoorCloseIn30 (sector);	    break;	    	  case 12:	    // SYNC STROBE SLOW	    P_SpawnStrobeFlash (sector, SLOWDARK, 1);	    break;	  case 13:	    // SYNC STROBE FAST	    P_SpawnStrobeFlash (sector, FASTDARK, 1);	    break;	  case 14:	    // DOOR RAISE IN 5 MINUTES	    P_SpawnDoorRaiseIn5Mins (sector, i);	    break;	    	  case 17:	    P_SpawnFireFlicker(sector);	    break;	}    }        //	Init line EFFECTs    numlinespecials = 0;    for (i = 0;i < numlines; i++)    {	switch(lines[i].special)	{	  case 48:	    // EFFECT FIRSTCOL SCROLL+	    linespeciallist[numlinespecials] = &lines[i];	    numlinespecials++;	    break;	}    }        //	Init other misc stuff    for (i = 0;i < MAXCEILINGS;i++)	activeceilings[i] = NULL;    for (i = 0;i < MAXPLATS;i++)	activeplats[i] = NULL;        for (i = 0;i < MAXBUTTONS;i++)	memset(&buttonlist[i],0,sizeof(button_t));    // UNUSED: no horizonal sliders.    //	P_InitSlidingDoorFrames();}

⌨️ 快捷键说明

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