Пример #1
0
//
// EV_SectorLightStrobeHurt
//
// Spawns a StrobeThinker set to FASTDARK, non-synchronized, and 
// sets up 20-per-32 damage with leaky suit. Overrides generalized 
// sector damage properties.
// * DOOM: 4
// * Generalized: (sector->special & 31) == 4
//
static void EV_SectorLightStrobeHurt(sector_t *sector)
{
   // strobe fast/death slime
   P_SpawnStrobeFlash(sector, FASTDARK, STROBEBRIGHT, 0);
   
   // haleyjd 12/31/08: sector damage conversion
   sector->damage       = 20;
   sector->damagemask   = 32;
   sector->damagemod    = MOD_SLIME;
   sector->leakiness    = 5;
}
Пример #2
0
void EV_StartLightStrobing(line_t* line) {
    int            secnum;
    sector_t*    sec;

    secnum = -1;
    while((secnum = P_FindSectorFromLineTag(line, secnum)) >= 0) {
        sec = &sectors[secnum];
        if(sec->specialdata) {
            continue;
        }

        P_SpawnStrobeFlash(sec, SLOWDARK);
    }
}
Пример #3
0
/**
 * Start strobing lights (usually from a trigger)
 */
void EV_StartLightStrobing(Line *line)
{
    iterlist_t *list = P_GetSectorIterListForTag(P_ToXLine(line)->tag, false);
    if(!list) return;

    IterList_SetIteratorDirection(list, ITERLIST_FORWARD);
    IterList_RewindIterator(list);

    Sector *sec;
    while((sec = (Sector *)IterList_MoveIterator(list)))
    {
        if(P_ToXSector(sec)->specialData)
            continue;

        P_SpawnStrobeFlash(sec, SLOWDARK, 0);
    }
}
Пример #4
0
//
// EV_StartLightStrobing()
//
// Start strobing lights (usually from a trigger)
//
// Passed the line that activated the strobing
// Returns true
//
// jff 2/12/98 added int return value, fixed return
//
int EV_StartLightStrobing(line_t* line)
{
  int   secnum;
  sector_t* sec;

  secnum = -1;
  // start lights strobing in all sectors tagged same as line
  while ((secnum = P_FindSectorFromLineTag(line,secnum)) >= 0)
  {
    sec = &sectors[secnum];
    // if already doing a lighting function, don't start a second
    if (P_SectorActive(lighting_special,sec)) //jff 2/22/98
      continue;

    P_SpawnStrobeFlash (sec,SLOWDARK, 0);
  }
  return 1;
}
Пример #5
0
//
// EV_SectorHticScrollEastLavaDamage
//
// Augments DOOM's "strobe hurt/death slime"
// * Heretic: 4
//
static void EV_SectorHticScrollEastLavaDamage(sector_t *sector)
{
   P_SpawnStrobeFlash(sector, FASTDARK, STROBEBRIGHT, 0);

   // custom damage parameters:
   sector->damage       = 5;
   sector->damagemask   = 16;
   sector->damagemod    = MOD_LAVA;
   sector->damageflags |= SDMG_TERRAINHIT;

   // heretic current pusher type:
   sector->hticPushType  = SECTOR_HTIC_CURRENT;
   sector->hticPushAngle = 0;
   sector->hticPushForce = 2048*28;
   
   // scrolls to the east:
   Add_Scroller(ScrollThinker::sc_floor, (-FRACUNIT/2) * 8, 0, -1, eindex(sector - sectors), 0);
}
Пример #6
0
/**
 * Start strobing lights (usually from a trigger).
 */
void EV_StartLightStrobing(linedef_t *line)
{
    sector_t   *sec = NULL;
    iterlist_t *list;

    list = P_GetSectorIterListForTag(P_ToXLine(line)->tag, false);
    if(!list)
        return;

    P_IterListResetIterator(list, true);
    while((sec = P_IterListIterator(list)) != NULL)
    {
        if(P_ToXSector(sec)->specialData)
            continue;

        P_SpawnStrobeFlash(sec, SLOWDARK, 0);
    }
}
Пример #7
0
int EV_StartLightStrobing(line_t *line)
{

    int secnum = -1;
    sector_t* sec;

    while ((secnum = P_FindSectorFromLineTag(line,secnum)) >= 0)
    {

        sec = &sectors[secnum];

        if (P_SectorActive(lighting_special,sec))
            continue;

        P_SpawnStrobeFlash (sec,SLOWDARK, 0);

    }

    return 1;

}
Пример #8
0
void SpawnSpecials(void)
{
	sector_t *sector;
	Word i;

	/* Init special SECTORs */

	PurgeLineSpecials();		/* Make SURE they are gone */
	sector = sectors;
	i = 0;
	do {
		switch(sector->special) {
		case 1:		/* FLICKERING LIGHTS */
			P_SpawnLightFlash(sector);
			break;
		case 2:		/* STROBE FAST */
			P_SpawnStrobeFlash(sector,FASTDARK,FALSE);
			break;
		case 3:		/* STROBE SLOW */
			P_SpawnStrobeFlash(sector,SLOWDARK,FALSE);
			break;
		case 8:		/* GLOWING LIGHT */
			P_SpawnGlowingLight(sector);
			break;
		case 9:		/* SECRET SECTOR */
			++SecretsFoundInLevel;
			break;
		case 10:	/* DOOR CLOSE IN 30 SECONDS */
			P_SpawnDoorCloseIn30(sector);
			break;
		case 12:	/* SYNC STROBE SLOW */
			P_SpawnStrobeFlash(sector,SLOWDARK,TRUE);
			break;
		case 13:	/* SYNC STROBE FAST */
			P_SpawnStrobeFlash(sector,FASTDARK,TRUE);
			break;
		case 14:	/* DOOR RAISE IN 5 MINUTES */
			P_SpawnDoorRaiseIn5Mins(sector);
		}
		++sector;
	} while (++i<numsectors);

	/* Init line EFFECTs, first pass, count the effects detected */

	numlinespecials = 0;		/* No specials found */
	i = numlines;			/* Get the line count */
	if (i) {
		line_t *line;
		line = lines;		/* Traverse the list */
		do {
			if (line->special==48) {		/* EFFECT FIRSTCOL SCROLL+ */
				++numlinespecials;		/* Inc the count */
			}
			++line;
		} while (--i);		/* All done? */
	}
	if (numlinespecials) {		/* Any found? */
		line_t *line;
		line_t **linelist;

		/* Get memory for the list */
        linelist = (line_t **)AllocAPointer(sizeof(line_t*)*numlinespecials);
        linespeciallist = linelist;		/* Save the pointer */
		i = numlines;
		line = lines;		/* Reset the count */
		do {
			if (line->special==48) {		/* EFFECT FIRSTCOL SCROLL+ */
				linelist[0] = line;		/* Store the pointer */
				++linelist;
			}
			++line;		/* Next line to scan */
		} while (--i);
	}
}
Пример #9
0
// Parses command line parameters.
void P_SpawnSpecials (void)
{
    sector_t*	sector;
    int		i;

    // See if -TIMER was specified.

    if (timelimit > 0 && deathmatch)
    {
        levelTimer = true;
        levelTimeCount = timelimit * 60 * TICRATE;
    }
    else
    {
	levelTimer = false;
    }

    //	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:
            if (numlinespecials >= MAXLINEANIMS)
            {
                I_Error("Too many scrolling wall linedefs! "
                        "(Vanilla limit is 64)");
            }
	    // 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();
}
Пример #10
0
void P_SpawnSpecials (void)
{
	sector_t	*sector;
	int		i;
	int		episode;

	episode = 1;
	if (W_CheckNumForName("texture2") >= 0)
		episode = 2;
		
	//
	//	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;
		}
	}
		
	
	//
	//	Init line EFFECTs
	//
	numlinespecials = 0;
	for (i = 0;i < numlines; i++)
		switch(lines[i].special)
		{
			case 48: // Effect_Scroll_Left
			case 99: // Effect_Scroll_Right
				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));
}
Пример #11
0
// Parses command line parameters.
void P_SpawnSpecials (void)
{
    sector_t*	sector;
    int		i;
    
    // See if -TIMER needs to be used.
    levelTimer = false;
	
    i = CmdParameters::M_CheckParm("-avg");
    if (i && deathmatch)
    {
	levelTimer = true;
	levelTimeCount = 20 * 60 * 35;
    }
	
    i = CmdParameters::M_CheckParm("-timer");
    if (i && deathmatch)
    {
	int	time;
	time = atoi(CmdParameters::myargv[i+1].c_str()) * 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();
}
Пример #12
0
//
// EV_SectorLightStrobeSlow
//
// Spawns a StrobeThinker set to SLOWDARK, non-synchronized
// * DOOM: 3
// * Heretic: 3
// * Generalized: (sector->special & 31) == 3
//
static void EV_SectorLightStrobeSlow(sector_t *sector)
{
   // strobe slow
   P_SpawnStrobeFlash(sector, SLOWDARK, STROBEBRIGHT, 0);
}
Пример #13
0
//
// EV_SectorLightStrobeFast
//
// Spawns a StrobeThinker set to FASTDARK, non-synchronized
// * DOOM: 2
// * Heretic: 2
// * Generalized: (sector->special & 31) == 2 
//
static void EV_SectorLightStrobeFast(sector_t *sector)
{
   // strobe fast
   P_SpawnStrobeFlash(sector, FASTDARK, STROBEBRIGHT, 0);
}
Пример #14
0
void P_SpawnSectorSpecialThinkers()
{
    // Clients spawn specials only on the server's instruction.
    if(IS_CLIENT) return;

    for(int i = 0; i < numsectors; ++i)
    {
        Sector *sec     = (Sector *)P_ToPtr(DMU_SECTOR, i);
        xsector_t *xsec = P_ToXSector(sec);

        // XG sector types override the game's built-in types.
        if(xsec->xg) continue;

        // jd64 >
        // DJS - yet more hacks! Why use the tag?
        switch(xsec->tag)
        {
        default:
            break;

        case 10000:
        case 10001:
        case 10002:
        case 10003:
        case 10004:
            P_SpawnGlowingLight(sec);
            break;

        case 11000:
            P_SpawnLightFlash(sec);
            break;

        case 12000:
            P_SpawnFireFlicker(sec);
            break;

        case 13000:
            P_SpawnLightBlink(sec);
            break;

        case 20000:
            P_SpawnGlowingLight(sec);
            break;
        }
        // < d64tc

        switch(xsec->special)
        {
        default:
            break;

        case 1: ///< FLICKERING LIGHTS
            P_SpawnLightFlash(sec);
            break;

        case 2: ///< STROBE FAST
            P_SpawnStrobeFlash(sec, FASTDARK, 0);
            break;

        case 3: ///< STROBE SLOW
            P_SpawnStrobeFlash(sec, SLOWDARK, 0);
            break;

        case 4: ///< STROBE FAST/DEATH SLIME
            P_SpawnStrobeFlash(sec, FASTDARK, 0);
            xsec->special = 4;
            break;

        case 8: ///< GLOWING LIGHT
            P_SpawnGlowingLight(sec);
            break;

        case 10: ///< DOOR CLOSE IN 30 SECONDS
            P_SpawnDoorCloseIn30(sec);
            break;

        case 12: ///< SYNC STROBE SLOW
            P_SpawnStrobeFlash(sec, SLOWDARK, 1);
            break;

        case 13: ///< SYNC STROBE FAST
            P_SpawnStrobeFlash(sec, FASTDARK, 1);
            break;

        case 14: ///< DOOR RAISE IN 5 MINUTES
            P_SpawnDoorRaiseIn5Mins(sec);
            break;

        case 17:
            P_SpawnFireFlicker(sec);
            break;
        }
    }
}
Пример #15
0
// 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.
	::g->levelTimer = false;

	i = M_CheckParm("-avg");
	if (i && ::g->deathmatch)
	{
		::g->levelTimer = true;
		::g->levelTimeCount = 20 * 60 * TICRATE;
	}

	//i = M_CheckParm("-timer");
	//if (i && ::g->deathmatch)
#ifdef ID_ENABLE_DOOM_CLASSIC_NETWORKING
	const int timeLimit = session->GetActingGameStateLobbyBase().GetMatchParms().gameTimeLimit;
#else
	const int timeLimit = 0;
#endif
	if (timeLimit != 0 && g->deathmatch)
	{
		int	time;
		//time = atoi(::g->myargv[i+1]) * 60 * 35;
		time = timeLimit * 60 * TICRATE;
		::g->levelTimer = true;
		::g->levelTimeCount = time;
	}

	//i = M_CheckParm("-fraglimit");
	//if (i && ::g->deathmatch)
#ifdef ID_ENABLE_DOOM_CLASSIC_NETWORKING
	const int fragLimit = gameLocal->GetMatchParms().GetScoreLimit();
#else
	const int fragLimit = 0;
#endif
	if (fragLimit != 0 && ::g->deathmatch)
	{
		//::g->levelFragCount = atoi(::g->myargv[i+1]);
		::g->levelFragCount = fragLimit;
	} else {
		::g->levelFragCount = 0;
	}

	//	Init special SECTORs.
	sector = ::g->sectors;
	for (i=0 ; i < ::g->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
			::g->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
	::g->numlinespecials = 0;
	for (i = 0;i < ::g->numlines; i++)
	{
		switch(::g->lines[i].special)
		{
		case 48:
			// EFFECT FIRSTCOL SCROLL+
			::g->linespeciallist[::g->numlinespecials] = &::g->lines[i];
			::g->numlinespecials++;
			break;
		}
	}


	//	Init other misc stuff
	for (i = 0;i < MAXCEILINGS;i++)
		::g->activeceilings[i] = NULL;

	for (i = 0;i < MAXPLATS;i++)
		::g->activeplats[i] = NULL;

	for (i = 0;i < MAXBUTTONS;i++)
		memset(&::g->buttonlist[i],0,sizeof(button_t));

	// UNUSED: no horizonal sliders.
	//	P_InitSlidingDoorFrames();
}