Пример #1
0
char singleloop(GameStruct* game)
{
	PlayerStruct singlep;
	MainStruct mains;
	ItemStruct zombie[MAX_ZOMBIES];
	ItemStruct shots[2];

	init(&mains, &singlep, 1, game, zombie, shots);

	for(;; game->frames++)
	{
		WaitVsync(1);

		drawoverlay(game, &singlep);
		gameflags(game);
		playerflags(&singlep);

		singlep.joypad = ReadJoypad(0);

		if(singlep.life <= 0)
		{
			switch(gameovermenu(game, &singlep))
			{
				case 1:
					return 1;
				case 2:
					return 0;
				default:
					break;
			}
		}
		else if(singlep.joypad&BTN_SELECT && game->flagcount >= DEBOUNCE_DELAY)
		{
			game->flagcount = 0;
			if(game->flags & GAMEPAUSED)
				game->flags &= ~GAMEPAUSED;
			else
				game->flags |= GAMEPAUSED;
		}
	
		if(game->flags & GAMEPAUSED)
			continue;
		
		rendermap(&mains, 1);

		screenSections[1].scrollX = mains.x.s;	
		screenSections[1].scrollY = mains.y.s;

		singlemove(&singlep, &mains, shots);
		inputanim(&singlep);

		singlep.gundelay++;
		for(int i = 0; i < 2; i++)
			handleshot(&mains, game, &singlep, &shots[i], zombie);
 
		
		necromancer(zombie, &mains, game, &singlep, 1);

		if(!(singlep.flags & PLAYERHURT) || game->frames&2)
		{
			sprites[1].x = sprites[2].x = singlep.x;
			sprites[1].y = singlep.y;
			sprites[2].y = singlep.y + TILE_HEIGHT;
		}
		else
		{
			sprites[1].x = sprites[2].x = DISABLED_SPRITE;
			sprites[2].y = sprites[1].y = DISABLED_SPRITE;
		}

	}

}
Пример #2
0
char multiloop(GameStruct* game)
{
	PlayerStruct players[2];
	MainStruct mains;
	ItemStruct zombie[MAX_ZOMBIES];
	ItemStruct shots[2][2];

	init(&mains, players, 2, game, zombie, shots);

	for(;;game->frames++)
	{
		WaitVsync(1);

		multidrawoverlay(game, players);
		gameflags(game);

		for(int p = 0; p < 2; p++)
		{
			playerflags(&players[p]);
			players[p].joypad = ReadJoypad(p);
		}

		if(players[0].life <= 0 && players[1].life <= 0)
		{
			switch(gameovermenu(game, &players[0]))
			{
				case 1:
					return 2;
				case 2:
					return 0;
				default:
					break;
			}
		}
		else if((players[0].joypad&BTN_SELECT || players[1].joypad&BTN_SELECT) && game->flagcount >= DEBOUNCE_DELAY)
		{
			game->flagcount = 0;
			if(game->flags & GAMEPAUSED)
				game->flags &= ~GAMEPAUSED;
			else
				game->flags |= GAMEPAUSED;
		}
	
		if(game->flags & GAMEPAUSED)
			continue;

		rendermap(&mains, 2);
		screenSections[1].scrollX = mains.x.s;
		screenSections[1].scrollY = mains.y.s;

		if(players[0].life > 0 && players[1].life > 0)
			multimove(players, &mains, shots);
		else if(players[0].life <= 0)
			singlemove(&(players[1]), &mains, shots[1]);
		else if(players[1].life <= 0)
			singlemove(&(players[0]), &mains, shots[0]);

		necromancer(zombie, &mains, game, players, 2);

		for(int p = 0; p < 2; p++)
		{
			inputanim(&(players[p]));
			players[p].gundelay++; 
			for(int i = 0; i < 2; i++)
				handleshot(&mains, game, &players[p], &shots[p][i], zombie);

			if(!(players[p].flags & PLAYERHURT) || game->frames&2)
			{
				sprites[1 + p * 4].x = sprites[2  + p * 4].x = players[p].x;
				sprites[1  + p * 4].y = players[p].y;
				sprites[2  + p * 4].y = players[p].y + TILE_HEIGHT;
			}
			else
			{
				sprites[1  + p * 4].x = sprites[2  + p * 4].x = DISABLED_SPRITE;
				sprites[2  + p * 4].y = sprites[1  + p * 4].y = DISABLED_SPRITE;
			}
		}


	
	}
}
Пример #3
0
void pregamemenu(void)
  {
  int count,count2;
  int simtimer;
  int simcount;
  int startdelay;

  game.exit=GAMEEXIT_NONE;

  startdelay=0;
  simtimer=SDL_GetTicks();

  resetmenuitems();

  joymenunum=1;

  while (!menuitem[0].active && !windowinfo.shutdown)
    {
    glClearColor(0.0f,0.0f,0.0f,0.0f);
    glClear(GL_COLOR_BUFFER_BIT);

    numofmenuitems=0;
    createmenuitem(TXT_BACK,0,0,16,1.0f,1.0f,1.0f,1.0f);
    setmenuitem(MO_HOTKEY,SCAN_ESC);

    createmenuitem(TXT_START,(320|TEXT_CENTER),320,16,1.0f,1.0f,1.0f,1.0f);
    setmenuitem(MO_HOTKEY,SCAN_S);

    checksystemmessages();
    checkkeyboard();
    checkmouse();
    checkjoystick();
    checkmenuitems();

    setuptextdisplay();

    glColor4f(1.0f,1.0f,1.0f,1.0f);
    displaybackground(540);

    if (game.levelnum<35)
      {
      count=(game.levelnum-1)/7+1;
      count2=(game.levelnum-1)%7+1;
      if (count==1)
        drawbackground(521,(320|TEXT_CENTER),48,192,192,640,480);
      if (count==2)
        drawbackground(522,(320|TEXT_CENTER),48,192,192,640,480);
      if (count==3)
        drawbackground(523,(320|TEXT_CENTER),48,192,192,640,480);
      if (count==4)
        drawbackground(524,(320|TEXT_CENTER),48,192,192,640,480);
      if (count==5)
        drawbackground(525,(320|TEXT_CENTER),48,192,192,640,480);

      drawtext("/i-/i",(320|TEXT_CENTER),256,16,1.0f,1.0f,1.0f,1.0f,count,count2);
      drawtext(TXT_LIVES" /i",(320|TEXT_CENTER),272,16,1.0f,1.0f,1.0f,1.0f,game.numoflives);
      drawtext(TXT_POINTS" /i",(320|TEXT_CENTER),288,16,1.0f,1.0f,1.0f,1.0f,game.totalscore);
      }
    if (game.levelnum==64)
      {
      drawbackground(526,(320|TEXT_CENTER),48,192,192,640,480);
      drawtext(" -1",(320|TEXT_CENTER),256,16,1.0f,1.0f,1.0f,1.0f);
      }
    if (game.levelnum==65)
      {
      drawbackground(526,(320|TEXT_CENTER),48,192,192,640,480);
      drawtext(" -2",(320|TEXT_CENTER),256,16,1.0f,1.0f,1.0f,1.0f);
      }
    if (game.levelnum==66)
      {
      drawbackground(526,(320|TEXT_CENTER),48,192,192,640,480);
      drawtext(" -3",(320|TEXT_CENTER),256,16,1.0f,1.0f,1.0f,1.0f);
      }
    if (game.levelnum==67)
      {
      drawbackground(526,(320|TEXT_CENTER),48,192,192,640,480);
      drawtext(TXT_ISLE_OF_THE,(320|TEXT_CENTER),256,16,1.0f,1.0f,1.0f,1.0f);
      drawtext(TXT_DEAD,(320|TEXT_CENTER),272,16,1.0f,1.0f,1.0f,1.0f);
      }
    if (game.levelnum==68)
      {
      drawbackground(526,(320|TEXT_CENTER),48,192,192,640,480);
      drawtext(TXT_SATANS_LAIR,(320|TEXT_CENTER),256,16,1.0f,1.0f,1.0f,1.0f);
      }

    drawmenuitems();

    drawmousecursor(768+font.cursornum,mouse.x,mouse.y,16,1.0f,1.0f,1.0f,1.0f);

    SDL_GL_SwapBuffers();

    if (menuitem[1].active)// || startdelay>=150)
      {
      loadstorylevel(game.levelnum);

      gameloop();

      if (game.exit==GAMEEXIT_EXITGAME || game.exit==GAMEEXIT_DIED)
      if (game.levelnum<64)
        {
        if (game.numoflives<99)
          game.numoflives--;
        if (game.numoflives<0)
          {
          if (player[playernum].highscore<game.totalscore)
            player[playernum].highscore=game.totalscore;

          game.totalscore=0;
          game.numoflives=5;
          if (game.difficulty==1)
            {
            count2=(game.levelnum-1)%7+1;
            if (count2!=7)
              {
              count=(game.levelnum-1)/7;
              game.levelnum=count*7+1;
              }
            }
          if (game.difficulty>=2)
            game.levelnum=0;

          gameovermenu();

          goto changelevelbypass;
          }
        }

      if (game.levelnum==34)
      if (game.exit==GAMEEXIT_WON || game.exit==GAMEXIT_WARPZONE)
        {
        game.score[0]=10000;
        if (game.levelnum==34 && game.exit==GAMEEXIT_WON)
          game.score[0]+=1;

        game.score[0]+=(object[0].hitpoints/50)*10;
        postgamemenu();
        game.totalscore+=game.score[0];

        endingmenu();
        menuitem[0].active=1;

        game.levelnum=35;

        goto changelevelbypass;
        }

      if (game.exit==GAMEEXIT_WON)
        {
        //if (!game.bosslevel)
        if (game.levelnum!=68 || game.dialog==0)
          {
          if (game.levelnum==6)
            game.score[0]=1000;
          if (game.levelnum==13)
            game.score[0]=2000;
          if (game.levelnum==20)
            game.score[0]=3000;
          if (game.levelnum==27)
            game.score[0]=4000;
          if (game.levelnum==33)
            game.score[0]=5000;
          if (game.levelnum==34)
            game.score[0]=10000;
          if (game.levelnum==68)
            game.score[0]=20000;

          //if (game.levelnum==34 && game.exit==won)
          //  game.score[0]+=10;

          game.oldschool=0;
          game.score[0]+=(object[0].hitpoints/50)*10;
          postgamemenu();
          game.totalscore+=game.score[0];
          if (game.exit==GAMEEXIT_EXITGAME)
            {
            game.exit=GAMEEXIT_WON;
            menuitem[0].active=1;
            }
          }
        if (game.levelnum<35)
          game.levelnum++;
        }
      if (game.levelnum==64)
        {
        game.levelnum=4;
        if (game.over==3)
          game.levelnum=22;
        if (game.over==4)
          game.levelnum=15;
        if (game.over==5)
          game.levelnum=8;

        goto changelevelbypass;
        }
      if (game.levelnum==65)
        {
        game.levelnum=9;

        goto changelevelbypass;
        }
      if (game.levelnum==66)
        {
        game.levelnum=26;

        goto changelevelbypass;
        }
      if (game.levelnum==67)
        {
        if (game.exit==GAMEEXIT_EXITGAME || game.exit==GAMEEXIT_DIED)
          game.levelnum=19;
        else
          game.levelnum=68;

        goto changelevelbypass;
        }
      if (game.levelnum==68)
        {
        game.levelnum=19;

        goto changelevelbypass;
        }
      if (game.exit==GAMEXIT_WARPZONE)
        {
        game.totalscore+=game.score[0];

        if (game.levelnum==3)
          game.levelnum=64;
        if (game.levelnum==4)
          game.levelnum=24;
        if (game.levelnum==8)
          game.levelnum=65;
        if (game.levelnum==18)
          game.levelnum=67;
        if (game.levelnum==25)
          game.levelnum=66;

        goto changelevelbypass;
        }

      changelevelbypass:;

      simtimer=SDL_GetTicks();
      startdelay=0;

      joymenunum=1;
      }

    simcount=0;
    while (SDL_GetTicks()-simtimer>20 && simcount<5)
      {
      simcount++;
      count=SDL_GetTicks()-simtimer-20;
      simtimer=SDL_GetTicks()-count;

      //startdelay++;
      }

    if (game.exit==GAMEEXIT_EXITGAME)
      menuitem[0].active=1;
    }

  resetmenuitems();
  }