void playCrashSound(int player_i, int player_o) {
  float pan, vol, shift;
  if(game->settings->playEffects == 0)
    return;
  getSound3dData(player_i, player_o, &pan, &vol, &shift);
  printf("starting crash sound with volume %.2f\n",  game->settings->fxVolume * (0.5 + vol / 2.0));
  playGameFX(SOUND_CRASH, game->settings->fxVolume * (0.5 + vol / 2.0));
}
Exemple #2
0
void story(tb1_state *game_state)
{
    int i;
    int xtemp,ytemp;
    int thrustcol=0;
    float thrust;
    char tempch;
    int cycles,to_clear;
   
    vmwFont *tb1_font;
   
    tb1_font=game_state->graph_state->default_font;


    vmwLoadPicPacked(0,0,game_state->virtual_2,1,1,
		     tb1_data_file("story/tbsobj.tb1",game_state->path_to_data),
		     game_state->graph_state);
   
       /* Load up the sprites! */
    bigFlame1=vmwGetSprite(0,2,26,18,game_state->virtual_2);
    bigFlame2=vmwGetSprite(0,21,26,18,game_state->virtual_2);
   
    explosion1=vmwGetSprite(127,100,15,18,game_state->virtual_2);
    explosion2=vmwGetSprite(148,100,15,18,game_state->virtual_2);
   
    rent=vmwGetSprite(166,100,15,6,game_state->virtual_2);
    smallFlame1=vmwGetSprite(0,43,3,4,game_state->virtual_2);
    smallFlame2=vmwGetSprite(0,47,3,4,game_state->virtual_2);
    barge=vmwGetSprite(65,100,15,18,game_state->virtual_2);
    truck1=vmwGetSprite(85,100,6,8,game_state->virtual_2);
    truck2=vmwGetSprite(95,100,6,8,game_state->virtual_2);
      
       /******FIRST MESSAGE********/
    vmwClearScreen(game_state->virtual_1,0);
    vmwTextXY("THE STORY SO FAR...",20,20,4,0,0,tb1_font,game_state->virtual_1);
    vmwBlitMemToDisplay(game_state->graph_state,game_state->virtual_1);
    pauseawhile(7);

    vmwClearScreen(game_state->virtual_1,0);
   
    vmwLoadPicPacked(0,0,game_state->virtual_2,1,1,
		     tb1_data_file("story/tbcobj.tb1",game_state->path_to_data),
		     game_state->graph_state);
		     
    vmwArbitraryCrossBlit(game_state->virtual_2,129,56,49,132,
			  game_state->virtual_1,10,10);
    vmwTextXY("YOU ARE TOM BOMBEM,  A STRANGE",80,10,1,0,0,tb1_font,game_state->virtual_1);
    vmwTextXY("    BUT EFFICIENT MEMBER OF",80,20,1,0,0,tb1_font,game_state->virtual_1);
    vmwTextXY("    THE LUNAR SPACE FORCE.",80,30,1,0,0,tb1_font,game_state->virtual_1);
    vmwTextXY("YOU NEVER SAY MUCH AND YOU ARE",80,50,4,0,0,tb1_font,game_state->virtual_1);
    vmwTextXY("    RARELY SEEN OUTSIDE OF",80,60,4,0,0,tb1_font,game_state->virtual_1);
    vmwTextXY("    YOUR BLUE SPACESUIT.",80,70,4,0,0,tb1_font,game_state->virtual_1);
    vmwTextXY("YOU OFTEN GET YOURSELF IN ",80,90,2,0,0,tb1_font,game_state->virtual_1);
    vmwTextXY("    TROUBLE BY SCRATCHING",80,100,2,0,0,tb1_font,game_state->virtual_1);
    vmwTextXY("    YOUR HEAD AT INAPPROPRIATE",80,110,2,0,0,tb1_font,game_state->virtual_1);
    vmwTextXY("    TIMES.",80,120,2,0,0,tb1_font,game_state->virtual_1);
    vmwTextXY("PRESS ANY KEY....",96,185,15,0,0,tb1_font,game_state->virtual_1);
    vmwBlitMemToDisplay(game_state->graph_state,game_state->virtual_1);
    pauseawhile(15);

    vmwClearScreen(game_state->virtual_1,0);
      
    vmwArbitraryCrossBlit(game_state->virtual_2,129,56,49,132,
		        game_state->virtual_1,260,10);
    vmwArbitraryCrossBlit(game_state->virtual_2,99,104,29,81,
			game_state->virtual_1,287,13);

    vmwTextXY("IT IS THE YEAR 2028.",10,10,1,0,0,tb1_font,game_state->virtual_1);
    vmwTextXY("YOU HAVE BEEN SUMMONED BY",10,30,3,0,0,tb1_font,game_state->virtual_1);
    vmwTextXY("    LUNAR DICTATOR-IN-CHIEF",10,40,3,0,0,tb1_font,game_state->virtual_1);
    vmwTextXY("    VINCENT WEAVER ABOUT A",10,50,3,0,0,tb1_font,game_state->virtual_1);
    vmwTextXY("    TOP SECRET THREAT TO ",10,60,3,0,0,tb1_font,game_state->virtual_1);
    vmwTextXY("    INTERPLANETARY SECURITY.",10,70,3,0,0,tb1_font,game_state->virtual_1);
    vmwTextXY("YOU ATTEND THE BRIEFING WITH",10,90,5,0,0,tb1_font,game_state->virtual_1);
    vmwTextXY("    YOUR USUAL CONFUSED",10,100,5,0,0,tb1_font,game_state->virtual_1);
    vmwTextXY("    QUIETNESS.  YOU STILL DO",10,110,5,0,0,tb1_font,game_state->virtual_1);  
    vmwTextXY("    NOT UNDERSTAND YOUR OWN",10,120,5,0,0,tb1_font,game_state->virtual_1);
    vmwTextXY("    SUCCESSFULNESS.",10,130,5,0,0,tb1_font,game_state->virtual_1);
    vmwTextXY("PRESS ANY KEY....",96,185,15,0,0,tb1_font,game_state->virtual_1);
    vmwBlitMemToDisplay(game_state->graph_state,game_state->virtual_1);
    pauseawhile(12);

    vmwLoadPicPacked(0,0,game_state->virtual_1,1,1,
		    tb1_data_file("story/tbchief.tb1",game_state->path_to_data),
		    game_state->graph_state);

      /* Save the area where the error will go */
    vmwArbitraryCrossBlit(game_state->virtual_1,115,55,91,59,
		          game_state->virtual_2,115,255);
    vmwBlitMemToDisplay(game_state->graph_state,game_state->virtual_1);
    pauseawhile(6);
   
    vmwTextXY("Ahhh.... Mr. Bombem.... ",1,1,15,0,0,tb1_font,game_state->virtual_1);  
    vmwBlitMemToDisplay(game_state->graph_state,game_state->virtual_1);
    
    if ((game_state->sound_possible) && (game_state->sound_enabled)) 
       playGameFX(0);

    pauseawhile(6);
   
    if ((game_state->sound_possible) && (game_state->sound_enabled))
       playGameFX(2);
   
      /* Show fake error message */
    vmwArbitraryCrossBlit(game_state->virtual_2,188,14,91,59,
			  game_state->virtual_1,115,55);
   
    vmwBlitMemToDisplay(game_state->graph_state,game_state->virtual_1);
    pauseawhile(6);
   
      /* Restore background where error was */
    vmwArbitraryCrossBlit(game_state->virtual_2,115,255,91,59,
			  game_state->virtual_1,115,55);
 
    vmwTextXY("I'll be brief.                       ",1,1,15,0,1,tb1_font,game_state->virtual_1);
    vmwBlitMemToDisplay(game_state->graph_state,game_state->virtual_1);
    pauseawhile(5);
   
    vmwTextXY("Do you know how this base was founded?",1,1,15,0,1,tb1_font,game_state->virtual_1);
    vmwBlitMemToDisplay(game_state->graph_state,game_state->virtual_1);
    pauseawhile(5);
   
    vmwTextXY("No?  Well watch the screen.           ",1,1,15,0,1,tb1_font,game_state->virtual_1);
    vmwBlitMemToDisplay(game_state->graph_state,game_state->virtual_1);
    pauseawhile(5); 
   
       /* Put picture on screen */
    vmwArbitraryCrossBlit(game_state->virtual_2,210,75,85,60,
			  game_state->virtual_1,210,136);
    vmwBlitMemToDisplay(game_state->graph_state,game_state->virtual_1);
    pauseawhile(4);

       /******BARGE TAKING OFF***********/
   
    vmwClearScreen(game_state->virtual_2,0);
    vmwLoadPicPacked(0,0,game_state->virtual_2,1,1,
		     tb1_data_file("story/tbma1.tb1",game_state->path_to_data),
		     game_state->graph_state);
 
    vmwSmallTextXY("MY WIFE AND I FOUNDED",212,3,14,0,0,tb1_font,game_state->virtual_2);
    vmwSmallTextXY("THIS BASE IN 2008.",212,9,14,0,0,tb1_font,game_state->virtual_2);
    vmwSmallTextXY("THE ONLY WAY TO ",212,16,13,0,0,tb1_font,game_state->virtual_2);
    vmwSmallTextXY("FINANCE IT WAS TO",212,22,13,0,0,tb1_font,game_state->virtual_2);
    vmwSmallTextXY("ENGAGE IN A DUBIOUS",212,28,13,0,0,tb1_font,game_state->virtual_2);
    vmwSmallTextXY("BUSINESS.",212,34,13,0,0,tb1_font,game_state->virtual_2);
    vmwSmallTextXY("WE LAUNCHED EARTH'S",212,41,12,0,0,tb1_font,game_state->virtual_2);
    vmwSmallTextXY("TRASH INTO SPACE",212,47,12,0,0,tb1_font,game_state->virtual_2);
    vmwSmallTextXY("FOR A PROFIT.",212,53,12,0,0,tb1_font,game_state->virtual_2);
    vmwSmallTextXY("HERE IS FOOTAGE FROM",212,60,11,0,0,tb1_font,game_state->virtual_2);
    vmwSmallTextXY("THE LAST LAUNCH EIGHT",212,66,11,0,0,tb1_font,game_state->virtual_2);
    vmwSmallTextXY("YEARS AGO.",212,72,11,0,0,tb1_font,game_state->virtual_2);
 
  
    vmwFlipVirtual(game_state->virtual_1,game_state->virtual_2,320,200);

    vmwLoadPalette(game_state->graph_state,thrustcol*4,0,0,250);

    vmwPutSprite(barge,141,157,game_state->virtual_1);

    
  /*  vmwCrossBlit(game_state->virtual_1,plb_vaddr->read,plb_vis->stride,200);*/
    vmwBlitMemToDisplay(game_state->graph_state,game_state->virtual_1);
    pauseawhile(6);

 
       /* Roll the truck up to the barge */
    for(ytemp=190;ytemp>=164;ytemp--) { 
    
       if (ytemp>=172) 
	  vmwArbitraryCrossBlit(game_state->virtual_2,
				145,ytemp,7,10,
				game_state->virtual_1,145,ytemp);
       else
	  vmwArbitraryCrossBlit(game_state->virtual_2,
				145,172,7,10,
				game_state->virtual_1,145,172);
    
       if (ytemp%2) vmwPutPartialSprite(game_state->virtual_1,
					truck1,145,ytemp,
					0,319,172,199);
       else vmwPutPartialSprite(game_state->virtual_1,
			                truck2,145,ytemp,
			                0,319,172,199);
       
       vmwBlitMemToDisplay(game_state->graph_state,game_state->virtual_1);
       
       usleep(80000);       
    }
    pauseawhile(2);

       /* Have the barge take off */
    vmwFlipVirtual(game_state->virtual_1,game_state->virtual_2,320,200);
   
    vmwPutSprite(barge,141,157,game_state->virtual_1);
    ytemp=157;
    to_clear=0;
    thrust=0;
    while (ytemp> -25) {
       thrust+=0.15;
       if (thrustcol<62) thrustcol++;
       to_clear=ytemp;
       if (ytemp<0) to_clear=0;
       vmwArbitraryCrossBlit(game_state->virtual_2,141,to_clear,30,30,
			     game_state->virtual_1,141,to_clear);
       for(i=1;i<17;i++) { 
          vmwPutPartialSprite(game_state->virtual_1,
			      barge,141,ytemp,
			      0,319,0,199);
       }
       usleep(50000);
       vmwLoadPalette(game_state->graph_state,thrustcol*4,0,0,250);
       ytemp=ytemp-(int)thrust;
       vmwBlitMemToDisplay(game_state->graph_state,game_state->virtual_1);
    }
    pauseawhile(5);


    vmwClearScreen(game_state->virtual_2,0);
   
       /****SECOND CHIEF*******/
    vmwLoadPicPacked(0,0,game_state->virtual_2,1,1,
		    tb1_data_file("story/tbcobj.tb1",game_state->path_to_data),
		     game_state->graph_state);
    vmwLoadPicPacked(0,0,game_state->virtual_1,1,1,
		    tb1_data_file("story/tbchief.tb1",game_state->path_to_data),
		     game_state->graph_state);
    vmwArbitraryCrossBlit(game_state->virtual_2,7,104,90,21,
		    game_state->virtual_1,6,174);
    vmwTextXY("You might wonder why this is important.",
	      1,1,15,0,1,tb1_font,game_state->virtual_1); 
    vmwBlitMemToDisplay(game_state->graph_state,game_state->virtual_1);
    pauseawhile(6);
    vmwTextXY("Last week we received a message.       ",
	      1,1,15,0,1,tb1_font,game_state->virtual_1);
    vmwBlitMemToDisplay(game_state->graph_state,game_state->virtual_1);
    pauseawhile(6);
    vmwTextXY("It is of extra-terrestrial origin.     ",
	      1,1,15,0,1,tb1_font,game_state->virtual_1);
    vmwBlitMemToDisplay(game_state->graph_state,game_state->virtual_1);
    pauseawhile(6);
    vmwTextXY("Watch the screen.                      ",
	      1,1,15,0,1,tb1_font,game_state->virtual_1);
    
    vmwArbitraryCrossBlit(game_state->virtual_2,210,136,85,59,
			  game_state->virtual_1,210,136);
    vmwBlitMemToDisplay(game_state->graph_state,game_state->virtual_1);
    pauseawhile(4);
   
       /******ALIEN DELEGATION*****/
   
    /* Something is not quite right here */
//    vmwLoadPicPacked(0,0,game_state->virtual_2,1,1,
//		    tb1_data_file("story/tbcrash.tb1",
//				  game_state->path_to_data));
    vmwLoadPicPacked(0,0,game_state->virtual_1,1,1,
		     tb1_data_file("story/tbcrash.tb1", 
				   game_state->path_to_data),game_state->graph_state);
    vmwLoadPicPacked(0,0,game_state->virtual_1,1,0,
       	                       tb1_data_file("tbomb1.tb1",
                               game_state->path_to_data),game_state->graph_state);
   
   
    vmwLoadPalette(game_state->graph_state,thrustcol*4,0,0,250);
    vmwFlipVirtual(game_state->virtual_2,game_state->virtual_1,320,200);
//  flipd320(vaddr,vga);
    vmwPutSprite(barge,97,180,game_state->virtual_1);
    xtemp=97;
    ytemp=181;

    while (ytemp>118) {
       vmwArbitraryCrossBlit(game_state->virtual_2,xtemp,ytemp,20,20,
			     game_state->virtual_1,xtemp,ytemp);
       vmwPutSprite(barge,xtemp,ytemp,game_state->virtual_1);
       doflames(game_state);
       ytemp--;
       xtemp++;
       vmwBlitMemToDisplay(game_state->graph_state,game_state->virtual_1);  
       usleep(80000);
    }
    vmwArbitraryCrossBlit(game_state->virtual_2,xtemp,ytemp,30,30,
			  game_state->virtual_1,xtemp,ytemp);
    vmwLoadPalette(game_state->graph_state,0xff,0xff,0xff,0);
    vmwPutSprite(explosion1,160,118,game_state->virtual_1);
    vmwBlitMemToDisplay(game_state->graph_state,game_state->virtual_1);
    vmwLoadPalette(game_state->graph_state,0,0,0,0);
    usleep(80000);
    vmwBlitMemToDisplay(game_state->graph_state,game_state->virtual_1);
   
    if ((game_state->sound_possible) && (game_state->sound_enabled))
       playGameFX(2);
   
    for(xtemp=0;xtemp<10;xtemp++) { 
       vmwPutSprite(explosion2,160,118,game_state->virtual_1);
       doflames(game_state);
       vmwBlitMemToDisplay(game_state->graph_state,game_state->virtual_1);
       usleep(80000);
       vmwPutSprite(explosion1,160,118,game_state->virtual_1);
       doflames(game_state);
       vmwBlitMemToDisplay(game_state->graph_state,game_state->virtual_1);
       usleep(80000);
    }
    vmwArbitraryCrossBlit(game_state->virtual_2,159,114,30,30,
			  game_state->virtual_1,159,114);
    vmwPutSpriteNonTransparent(rent,160,118,game_state->virtual_1);
    vmwBlitMemToDisplay(game_state->graph_state,game_state->virtual_1);
   
    cycles=0;
    while ( ((tempch=vmwGetInput())==0) && cycles<120) {
       doflames(game_state);
       vmwBlitMemToDisplay(game_state->graph_state,game_state->virtual_1);
       cycles++;
       usleep(80000);
    }

       /****ALIEN MESSAGE*****/
    vmwLoadPicPacked(0,0,game_state->virtual_1,1,1,
		     tb1_data_file("story/tbgorg.tb1",game_state->path_to_data),
		     game_state->graph_state);
    vmwTextXY("GREETINGS EARTHLINGS.",0,162,12,0,0,tb1_font,game_state->virtual_1);  
    vmwTextXY("I AM GORGONZOLA THE REPULSIVE.",0,171,12,0,0,tb1_font,game_state->virtual_1);
    vmwTextXY("YOU HAVE MADE A BIG MISTAKE.",0,180,12,0,0,tb1_font,game_state->virtual_1);
    vmwBlitMemToDisplay(game_state->graph_state,game_state->virtual_1);
    pauseawhile(7);
    vmwTextXY("YOUR SHIP FULL OF REFUSE HAS",0,162,12,0,1,tb1_font,game_state->virtual_1);
    vmwTextXY("DAMAGED OUR OFFICIAL PEACE    ",0,171,12,0,1,tb1_font,game_state->virtual_1);
    vmwTextXY("ENVOY.  IT WAS ON ITS WAY TO ",0,180,12,0,1,tb1_font,game_state->virtual_1);
    vmwTextXY("YOUR PLANET.                  ",0,189,12,0,1,tb1_font,game_state->virtual_1);
    vmwBlitMemToDisplay(game_state->graph_state,game_state->virtual_1);
    pauseawhile(7);
    vmwTextXY("IN AN IRONIC FORM OF RETALLIATION",0,162,12,0,1,tb1_font,game_state->virtual_1);
    vmwTextXY("WE HAVE MADE YOUR TRASH EVIL AND",0,171,12,0,1,tb1_font,game_state->virtual_1);
    vmwTextXY("TURNED IT AGAINST YOU.          ",0,180,12,0,1,tb1_font,game_state->virtual_1);
    vmwTextXY("        DIE EARTH SCUM!         ",0,189,12,0,1,tb1_font,game_state->virtual_1);
    vmwBlitMemToDisplay(game_state->graph_state,game_state->virtual_1);
    pauseawhile(7);
 
       /****** THIRD CHIEF *******/
    vmwLoadPicPacked(0,0,game_state->virtual_2,1,1,
		    tb1_data_file("story/tbcobj.tb1",game_state->path_to_data),
		     game_state->graph_state);
    vmwLoadPicPacked(0,0,game_state->virtual_1,1,1,
		    tb1_data_file("story/tbchief.tb1",game_state->path_to_data),
		     game_state->graph_state);
    vmwArbitraryCrossBlit(game_state->virtual_2,7,127,90,21,
		          game_state->virtual_1,6,174);
   
    vmwTextXY("Tom, our radar detects approaching ",1,1,15,0,1,tb1_font,game_state->virtual_1);
    vmwBlitMemToDisplay(game_state->graph_state,game_state->virtual_1);
    pauseawhile(6);
    vmwTextXY("objects.  They are inside the      ",1,1,15,0,1,tb1_font,game_state->virtual_1);
    vmwBlitMemToDisplay(game_state->graph_state,game_state->virtual_1);
    pauseawhile(6);
    vmwTextXY("orbit of Jupiter.                  ",1,1,15,0,1,tb1_font,game_state->virtual_1);
    vmwBlitMemToDisplay(game_state->graph_state,game_state->virtual_1);
    pauseawhile(6);
    vmwTextXY("You are our only hope!             ",1,1,15,0,1,tb1_font,game_state->virtual_1);
    vmwBlitMemToDisplay(game_state->graph_state,game_state->virtual_1);
    pauseawhile(6);
    vmwTextXY("Will you fly our only spaceship    ",1,1,15,0,1,tb1_font,game_state->virtual_1);
    vmwBlitMemToDisplay(game_state->graph_state,game_state->virtual_1);
    pauseawhile(6);
    vmwTextXY("and save the human race?           ",1,1,15,0,1,tb1_font,game_state->virtual_1);
    vmwBlitMemToDisplay(game_state->graph_state,game_state->virtual_1);
    pauseawhile(6);
    vmwArbitraryCrossBlit(game_state->virtual_2,5,16,39,82,
			  game_state->virtual_1,146,59);
    vmwBlitMemToDisplay(game_state->graph_state,game_state->virtual_1);
    usleep(500000);
    vmwArbitraryCrossBlit(game_state->virtual_2,46,16,39,82,
			  game_state->virtual_1,146,59);
    vmwBlitMemToDisplay(game_state->graph_state,game_state->virtual_1);
    usleep(500000);
    vmwArbitraryCrossBlit(game_state->virtual_2,87,16,39,82,
			  game_state->virtual_1,146,59);
    vmwTextXY("Scratch.  Scratch. <Ow that itches>",1,1,9,0,1,tb1_font,game_state->virtual_1);
    vmwBlitMemToDisplay(game_state->graph_state,game_state->virtual_1);
    pauseawhile(5); 
    vmwTextXY("I knew you'd do it.  Good Luck!     ",1,1,15,0,1,tb1_font,game_state->virtual_1);
    vmwBlitMemToDisplay(game_state->graph_state,game_state->virtual_1);
    pauseawhile(6);
    vmwTextXY("<Huh?>                             ",1,1,9,0,1,tb1_font,game_state->virtual_1);
    vmwBlitMemToDisplay(game_state->graph_state,game_state->virtual_1);
    pauseawhile(10);
   
       /* Free the sprites!  End memory leaks! */
    vmwFreeSprite(bigFlame1);
    vmwFreeSprite(bigFlame2);
    vmwFreeSprite(smallFlame1);
    vmwFreeSprite(smallFlame2);
    vmwFreeSprite(rent);
    vmwFreeSprite(truck1);
    vmwFreeSprite(truck2);
    vmwFreeSprite(barge);
    vmwFreeSprite(explosion1);
    vmwFreeSprite(explosion2);

}