home *** CD-ROM | disk | FTP | other *** search
/ Magazyn Amiga Shareware Floppies / ma24.dms / ma24.adf / WOLF3D / game.c < prev    next >
C/C++ Source or Header  |  1994-02-01  |  5KB  |  193 lines

  1. #include "game.h"
  2. #include "JoyStick.h"
  3. #include "sort.h"
  4. #include "sine.h"
  5.  
  6. /* -------------------------------------------------------------------- */
  7. extern byte walls[8][65][2];
  8.  
  9. word INPUTMETHOD, FIN;
  10.  
  11. struct BLOCKTYPE Level_One[ NbrBlocks+1 ] =
  12. {
  13.     { 1,1,2,1, NORTH,NULL},
  14.     { 0,0,3,1, NORTH,NULL},
  15.     { 0,0,4,1, NORTH,NULL},
  16.     { 1,1,5,2, WEST,NULL},
  17.     { 0,0,5,3, WEST,NULL},
  18.     { 0,0,4,4, WEST|SOUTH|NORTH,NULL},
  19.     { 1,1,5,5, WEST,NULL},
  20.     { 0,0,5,6, WEST,NULL},
  21.     { 0,0,5,7, WEST,NULL},
  22.     { 1,1,4,8, SOUTH,NULL},
  23.     { 0,0,3,7, WEST|EAST|SOUTH,NULL},
  24.     { 0,0,2,8, SOUTH,NULL},
  25.     { 1,1,1,7, EAST,NULL},
  26.     { 0,0,1,6, EAST,NULL},
  27.     { 0,0,1,5, EAST,NULL},
  28.     { 0,1,2,4, EAST|SOUTH|NORTH,NULL},
  29.     { 0,0,1,3, EAST,NULL},
  30.     { 0,0,1,2, EAST,NULL},
  31.     { 1,1,3,4, DOOR|NORTH|SOUTH,NULL},
  32. };
  33.  
  34. struct DOORTYPE myDoor;
  35. struct PLAYER player1 = { 0,0,0,0,0,0 };
  36. struct xBUFFTYPE xBUFFER[ViewRight+1];
  37. word zBUFFER[NbrBlocks + NbrObjects][2];
  38.  
  39.  
  40.  
  41. /* ------------------  I N T E R N A L   R O U T I N E S  ----------------- */
  42.  
  43. void WOLF3D( void );
  44.  
  45. /* ------------------------------------------------------------------------ */
  46.  
  47. void WOLF3D(void)
  48. {
  49.     register word index;
  50.     
  51.     word count;    
  52.     unsigned long frame = 0,start,seconds;
  53.     unsigned int clock[2];
  54.   
  55.     
  56.     /* ------------------------------------------------------------------ */
  57.     /* PRE-GAME INITIALIZATION                                            */
  58.     /* ------------------------------------------------------------------ */
  59.  
  60.     COSINE = &SINE[90*2];
  61.  
  62.     INPUTMETHOD = JOYSTICK;
  63.     FIN = 0;
  64.         
  65.     timer(clock);
  66.     start = clock[0];
  67.  
  68.     /* Initialize level one's blocks to the proper coordinates (i*64) */
  69.         
  70.     for(index = 0; index < NbrBlocks; index++)
  71.     {
  72.     Level_One[index].x *= 64;
  73.     Level_One[index].z *= 64;
  74.     };
  75.  
  76. /* ---------------------------------------- */
  77.     
  78.     /* Setup the playing display. Ie: its initial graphics */
  79.     
  80.     SetAPen(RASTPORT,13);
  81.     RectFill(RASTPORT,0,0,ScreenRight,ScreenBottom);
  82.  
  83.  
  84.     player1.X = (long)(128) << FFPBitSize; /* Set the player start coords at 2,2 */
  85.     player1.Z = (long)(128) << FFPBitSize;
  86.     player1.Xcopy = (word)(player1.X >> FFPBitSize);
  87.     player1.Zcopy = (word)(player1.Z >> FFPBitSize);
  88.     
  89. //  CreateDoorList();
  90. //  CreateNpcList();
  91.  
  92.     /*-------------------------
  93.     Object[0].ShipDefn = &Cube;
  94.     Object[0].center[0] = 192;
  95.     Object[0].center[1] = 0;
  96.     Object[0].center[2] = 64;
  97.     Object[0].attitude = 0;
  98.     -------------------------*/
  99.     
  100.     
  101.     /* ---------------------------------------------------------------- */
  102.     /* MAIN GAME LOOP                            */
  103.     /* ---------------------------------------------------------------- */
  104.  
  105.     while(! FIN  )
  106.     {
  107.     /* ------------------------------------------------------------ */
  108.     /* TRANSFORM WORLD BLOCKS AND OBJECTS                */
  109.     /* ------------------------------------------------------------ */
  110.     
  111.     TransformBlocks( &player1 );
  112. //     TransformObjects( &player1 );
  113.  
  114.     
  115.     /* ------------------------------------------------------------ */
  116.     /* CREATE AND SORT THE ZDEPTHBUFFER                */
  117.     /* ------------------------------------------------------------ */
  118.  
  119.     count = CreateZbuffer();
  120.     SORTWORLD(zBUFFER, count);
  121.  
  122.  
  123.     /* ------------------------------------------------------------ */
  124.     /* CREATE THE XIMAGEBUFFER                    */
  125.     /* ------------------------------------------------------------ */
  126.  
  127.     CreateXbuffer(count);
  128.  
  129.  
  130.     /* ------------------------------------------------------------ */
  131.     /* RENDER THE WORLD AND OBJECTS INTO THE FRAMEBUFFER        */
  132.     /* ------------------------------------------------------------ */
  133.  
  134.     AsmClearFrame((long *)fBUFFER,151587081L,134744072L);
  135.     AsmRenderWorld((long)xBUFFER,(long)fBUFFER);
  136. //    AsmRenderObjects();
  137.  
  138.  
  139.     /* ------------------------------------------------------------ */
  140.     /* COPY THE FRAMEBUFFER TO VIDEO MEMORY                */
  141.     /* ------------------------------------------------------------ */
  142.  
  143.     AsmChunky2Planar((long)fBUFFER,(long)RASTPORT->BitMap->Planes[0]);
  144.  
  145.  
  146.         /* ------------------------------------------------------------ */
  147.         /* FETCH AND EVALUATE PLAYER INPUT                */
  148.         /* ------------------------------------------------------------ */
  149.  
  150.     FetchEvaluateInput( &player1 );
  151.     UpdatePlayerPosition( &player1 );
  152.     // in updateposition also handle collision events
  153.     // collision with: blocks & objects
  154.  
  155. //    UpdateDoorList();
  156. //    UpdateNpcList();    /* NonPlayerCharacters - bad guys */
  157.  
  158.     if(frame++ == 1000) FIN = 27;
  159.     };
  160.  
  161.     timer(clock);
  162.     seconds = clock[0] - start;
  163.     if(! seconds) seconds = 1;
  164.  
  165. //  DestroyDoorList();
  166. //  DestroyNpcList();
  167.     
  168.     printf("Frames: %d & Seconds: %d\n",frame,seconds);
  169.     printf("Est Frames per second:  %d\n",frame/seconds);
  170. }
  171.  
  172. /* -------------------------------------------------------------------------- 
  173.     if(code == ' ')
  174.     {
  175.         myDoor.status = 1;
  176.     };
  177.  
  178.     myDoor.length = myDoor.length + myDoor.XDIR * myDoor.status;
  179.     if( (myDoor.length == 64) && (myDoor.status != 0))
  180.     {
  181.         myDoor.status = 0;
  182.         myDoor.XDIR *= -1;
  183.     }
  184.     else
  185.     if( (myDoor.length == 0) && (myDoor.status != 0))
  186.     {
  187.         myDoor.status = 0;
  188.         myDoor.XDIR *= -1;
  189.     };
  190.     
  191.     Level_One[18].x = myDoor.oldX + myDoor.length;
  192.  
  193. */