// 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(); }
// 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(); }
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; } } }
// // EV_SectorLightFireFlicker // // Spawns a FireFlickerThinker. // * DOOM: 17 // * Heretic (EE Extension): 17 // * Generalized: (sector->special & 31) == 17 // static void EV_SectorLightFireFlicker(sector_t *sector) { P_SpawnFireFlicker(sector); }
// 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(); }