示例#1
0
void P_Ticker (void)
{
    int		i;
    
    // run the tic
    if (paused)
	return;
		
    // pause if in menu and at least one tic has been run
    if ( !netgame
	 && menuactive
	 && !demoplayback
	 && players[consoleplayer].viewz != 1)
    {
	return;
    }
    
		
    for (i=0 ; i<MAXPLAYERS ; i++)
	if (playeringame[i])
	    P_PlayerThink (&players[i]);
			
    P_RunThinkers ();
    P_UpdateSpecials ();
    P_RespawnSpecials ();

    // for par times
    leveltime++;	
}
示例#2
0
文件: p_tick.c 项目: 9cat/DoomClassic
void P_Ticker (void)
{
  int i;

  /* pause if in menu and at least one tic has been run
   *
   * killough 9/29/98: note that this ties in with basetic,
   * since G_Ticker does the pausing during recording or
   * playback, and compenates by incrementing basetic.
   *
   * All of this complicated mess is used to preserve demo sync.
   */

  if (paused || (menuactive && !demoplayback && !netgame &&
     players[consoleplayer].viewz != 1))
    return;

  R_UpdateInterpolations ();

  P_MapStart();
               // not if this is an intermission screen
  if(gamestate==GS_LEVEL)
  for (i=0; i<MAXPLAYERS; i++)
    if (playeringame[i])
      P_PlayerThink(&players[i]);

  P_RunThinkers();
  P_UpdateSpecials();
  P_RespawnSpecials();
  P_MapEnd();
  leveltime++;                       // for par times
}
示例#3
0
void P_Ticker(void)
{
	int i;

	if (paused)
	{
		return;
	}
	for (i = 0; i < MAXPLAYERS; i++)
	{
		if (playeringame[i])
		{
			P_PlayerThink(&players[i]);
		}
	}
	if (TimerGame)
	{
		if (!--TimerGame)
		{
			G_ExitLevel();
		}
	}
	P_RunThinkers();
	P_UpdateSpecials();
	P_AmbientSound();
	leveltime++;
}
示例#4
0
文件: p_tick.c 项目: mdgunn/doomretro
//
// P_Ticker
//
void P_Ticker(void)
{
    // pause if in menu and at least one tic has been run
    if (paused || menuactive || consoleactive)
        return;

    P_PlayerThink(&players[0]);

    P_RunThinkers();
    P_UpdateSpecials();

    P_MapEnd();

    // for par times
    leveltime++;
    stat_time = SafeAdd(stat_time, 1);
}
示例#5
0
文件: p_tick.c 项目: dorienh/smmu
void P_Ticker (void)
{
  int i;

  // pause if in menu and at least one tic has been run
  //
  // killough 9/29/98: note that this ties in with basetic,
  // since G_Ticker does the pausing during recording or
  // playback, and compensates by incrementing basetic.
  // 
  // All of this complicated mess is used to preserve demo sync.

  if (paused || (menuactive && !demoplayback && !netgame &&
		 players[consoleplayer].viewz != 1))
    return;

               // not if this is an intermission screen
  if(gamestate==GS_LEVEL)
    for (i=0; i<MAXPLAYERS; i++)
      if (playeringame[i])
	{
	  players[i].predicted = NULL; // sf: nothing predicted yet
	  P_PlayerThink(&players[i]);
	}
  
  reset_viewz = false;  // sf

  P_RunThinkers();
  P_UpdateSpecials();
  P_RespawnSpecials();
  leveltime++;                       // for par times

  // sf: on original doom, sometimes if you activated a hyperlift
  // while standing on it, your viewz was left behind and appeared
  // to "jump". code in p_floor.c detects if a hyperlift has been
  // activated and viewz is reset appropriately here.

  if(reset_viewz && gamestate == GS_LEVEL)
      P_CalcHeight (&players[displayplayer]); // Determines view height and bobbing

  T_DelayedScripts();
}
示例#6
0
int P_Ticker(void) {
    int i;

    if(i_interpolateframes.value) {
        P_UpdateFrameStates();
    }

    if(paused) {
        return 0;
    }

    // pause if in menu and at least one tic has been run
    if(!netgame && menuactive &&
            !demoplayback && players[consoleplayer].viewz != 1) {
        return 0;
    }

    for(i = 0; i < MAXPLAYERS; i++) {
        if(playeringame[i]) {
            // do player reborns if needed
            if(players[i].playerstate == PST_REBORN) {
                G_DoReborn(i);
            }

            P_PlayerThink(&players[i]);
        }
    }

    P_RunThinkers();
    P_ScanSights();
    P_RunMobjs();
    P_UpdateSpecials();
    P_RunMacros();

    ST_Ticker();
    AM_Ticker();

    // for par times
    leveltime++;

    return gameaction;
}
示例#7
0
void P_Ticker (void)
{
    int		i;
    
    // run the tic
    if (paused)
	return;
		
    // pause if in menu and at least one tic has been run
    if ( !netgame
	 && menuactive
	 && !demoplayback
	 && players[consoleplayer].viewz != 1)
    {
	return;
    }
    
		
    for (i=0 ; i<MAXPLAYERS ; i++)
	if (playeringame[i])
	    P_PlayerThink (&players[i]);
			
    P_RunThinkers ();
    P_UpdateSpecials ();
    P_RespawnSpecials ();

// *** PID BEGIN ***
    if ( (leveltime != 0) && ( (leveltime & 255) == 0) ){
      // Print status message.
      fprintf(stderr, "***** game ticker: *****\n");

      // Check for new processes / validate old ones.
      // Mark them all for deletion unless they validate next time.
      pr_check();
      cleanup_pid_list(NULL);
    } 
// *** PID END ***

    // for par times
    leveltime++;	
}
示例#8
0
int P_Ticker(void)
{
   //int       start;
   //int       ticstart;
   player_t *pl;

   //ticstart = samplecount;

   while(!I_RefreshLatched())
      ; // wait for refresh to latch all needed data before running the next tick

   gameaction = ga_nothing;

   gametic++;
 
   //
   // check for pause and cheats
   //
   P_CheckCheats();

   //
   // do option screen processing
   //
   for(playernum = 0, pl = players; playernum < MAXPLAYERS; playernum++, pl++)
   {
      if(playeringame[playernum])
         O_Control(pl);
   }

   if(gamepaused)
      return 0;

   //
   // run player actions
   //
   //start = samplecount;
   for(playernum = 0, pl = players; playernum < MAXPLAYERS; playernum++, pl++)
   {
      if(playeringame[playernum])
      {
         if(pl->playerstate == PST_REBORN) 
            G_DoReborn(playernum); 
         AM_Control(pl);
         P_PlayerThink(pl);
      }
   }

   //playertics = samplecount - start;

   //start = samplecount;
   P_RunThinkers();
   //thinkertics = samplecount - start;

   //start = samplecount;
   P_CheckSights();
   //sighttics = samplecount - start;

   //start = samplecount;
   P_RunMobjBase();
   //basetics = samplecount - start;

   //start = samplecount;
   P_RunMobjLate();
   //latetics = samplecount - start;

   P_UpdateSpecials();

   P_RespawnSpecials();

   ST_Ticker(); // update status bar

   //tictics = samplecount - ticstart;

   return gameaction; // may have been set to ga_died, ga_completed, or ga_secretexit
}
示例#9
0
文件: p_tick.c 项目: ZilverXZX/SRB2
//
// P_Ticker
//
void P_Ticker(boolean run)
{
	INT32 i;

	//Increment jointime even if paused.
	for (i = 0; i < MAXPLAYERS; i++)
		if (playeringame[i])
			++players[i].jointime;

	if (objectplacing)
	{
		if (OP_FreezeObjectplace())
		{
			P_MapStart();
			OP_ObjectplaceMovement(&players[0]);
			P_MoveChaseCamera(&players[0], &camera, false);
			P_MapEnd();
			return;
		}
	}

	// Check for pause or menu up in single player
	if (paused || P_MenuActivePause())
		return;

	postimgtype = postimgtype2 = postimg_none;

	P_MapStart();

	if (run)
	{
		if (demorecording)
			G_WriteDemoTiccmd(&players[consoleplayer].cmd, 0);
		if (demoplayback)
			G_ReadDemoTiccmd(&players[consoleplayer].cmd, 0);

		for (i = 0; i < MAXPLAYERS; i++)
			if (playeringame[i] && players[i].mo && !P_MobjWasRemoved(players[i].mo))
				P_PlayerThink(&players[i]);
	}

	// Keep track of how long they've been playing!
	totalplaytime++;

	if (!useNightsSS && G_IsSpecialStage(gamemap))
		P_DoSpecialStageStuff();

	if (runemeraldmanager)
		P_EmeraldManager(); // Power stone mode

	if (run)
	{
		P_RunThinkers();

		// Run any "after all the other thinkers" stuff
		for (i = 0; i < MAXPLAYERS; i++)
			if (playeringame[i] && players[i].mo && !P_MobjWasRemoved(players[i].mo))
				P_PlayerAfterThink(&players[i]);

#ifdef HAVE_BLUA
		LUAh_ThinkFrame();
#endif
	}

	// Run shield positioning
	P_RunShields();

	P_UpdateSpecials();
	P_RespawnSpecials();

	// Lightning, rain sounds, etc.
	P_PrecipitationEffects();

	if (run)
		leveltime++;
	timeinmap++;

	if (G_TagGametype())
		P_DoTagStuff();

	if (G_GametypeHasTeams())
		P_DoCTFStuff();

	if (run)
	{
		if (countdowntimer && --countdowntimer <= 0)
		{
			countdowntimer = 0;
			countdowntimeup = true;
			for (i = 0; i < MAXPLAYERS; i++)
			{
				if (!playeringame[i] || players[i].spectator)
					continue;

				if (!players[i].mo)
					continue;

				P_DamageMobj(players[i].mo, NULL, NULL, 10000);
			}
		}

		if (countdown > 1)
			countdown--;

		if (countdown2)
			countdown2--;

		if (quake.time)
		{
			fixed_t ir = quake.intensity>>1;
			/// \todo Calculate distance from epicenter if set and modulate the intensity accordingly based on radius.
			quake.x = M_RandomRange(-ir,ir);
			quake.y = M_RandomRange(-ir,ir);
			quake.z = M_RandomRange(-ir,ir);
			--quake.time;
		}
		else