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

  1. #include "startup.h"
  2. #include <exec/memory.h>
  3.  
  4. extern byte walls[8][65][2];
  5.  
  6. void main() /* MAIN - handles initialization, starting the game, and cleaning up. */
  7. {
  8.     word result;
  9.     
  10.     result = StartUp();
  11.     
  12.     if(result == SUCCESS)
  13.         WOLF3D();
  14.     else
  15.         ERROR_ALERT(result);
  16.     
  17.     CleanUp();
  18. }
  19.  
  20. word StartUp( void )
  21. {
  22.     register word index, x, y, count;
  23.     long result;
  24.     FILE *fp, *fopen();
  25.     
  26.     IntuitionBase = OpenLibrary("intuition.library",37L);
  27.     if(IntuitionBase == NULL) return(1);
  28.     
  29.     GfxBase = OpenLibrary("graphics.library",37L);
  30.     if(GfxBase == NULL) return(2);
  31.  
  32.     MyBMP = (struct BitMap *) AllocMem((long)sizeof(struct BitMap), MEMF_CLEAR);
  33.     if(! MyBMP) return(10);
  34.     
  35.     InitBitMap(MyBMP, ViewDepth, 320L, 200L);
  36.     
  37.     MyBMP->Planes[0] = (PLANEPTR)AllocRaster(320, (200*4));
  38.     if(! MyBMP->Planes[0]) return(11);
  39.  
  40.     for(index = 1; index < ViewDepth; index++)
  41.         MyBMP->Planes[index] = MyBMP->Planes[index-1] + 8000L; // 8000 bytes per plane
  42.  
  43.     MySCR = OpenScreenTags(    NULL,
  44.                     SA_Depth, ViewDepth,
  45.                 SA_Width, 320L,
  46.                 SA_Height, 200L,
  47.                 SA_ShowTitle, FALSE,
  48.                 SA_Title, (char *) "WOLF 3D",
  49.                 SA_SysFont, NULL,
  50.                 SA_Type, CUSTOMSCREEN,
  51.                 SA_BitMap, MyBMP,
  52.                 SA_Quiet, TRUE,
  53.                 SA_DClip, &MyRect,
  54.                 TAG_DONE);
  55.     if(MySCR == NULL) return(3);
  56.     
  57.     
  58.     
  59.     MyWIN = OpenWindowTags(    NULL,
  60.                     WA_IDCMP, IDCMP_RAWKEY|IDCMP_VANILLAKEY,
  61.                     WA_CustomScreen, MySCR,
  62.                 WA_NoCareRefresh, TRUE,
  63.                 WA_Activate, TRUE,
  64.                 WA_Borderless, TRUE,
  65.                 WA_Backdrop, TRUE,
  66.                 WA_RMBTrap, TRUE,
  67.                 WA_SimpleRefresh, TRUE,
  68.                 TAG_DONE);
  69.     if(MyWIN == NULL) return(4);
  70.  
  71.  
  72.     RASTPORT = MyWIN->RPort;
  73.     
  74.     JoyStick1 = AllocateJoystick();
  75.     if(JoyStick1 == NULL) return(5);
  76.  
  77.    
  78.     /* CHANGE SCREEN COLOURS */
  79.     for(index = 0; index < 8; index++)
  80.     SetRGB4(&MyWIN->WScreen->ViewPort, index, (index<<1),index<<1,index<<1);
  81.  
  82.  
  83. /* allocate sound channels, load samples */
  84.  
  85.     /* ALLOCATE MEMORY BUFFERS */
  86.     /* FETCH BITMAP IMAGES */
  87.     /* 1. WALLS */
  88.  
  89. /* ---------------------------------------- */
  90. /* Fetch Bitmap images. (walls)             */
  91. /* ---------------------------------------- */
  92.     for(index = 0; index < NbrWallBMPs; index++)
  93.     {
  94.     Wall[index] = (unsigned char *)malloc(64*64);
  95.     if(! Wall[index]) return(9);
  96.     };
  97.  
  98.     fp = fopen("walls.bmp","r");
  99.     
  100.     if(fp)
  101.     {
  102.     for(index = 0; index < NbrWallBMPs; index++)
  103.     {
  104.         for(y = 0; y < 64; y++)
  105.             for(x = 0; x < 64; x++)
  106.         {
  107.             result = fgetc(fp);
  108.             *(Wall[index]+x*64+y) = (byte) result;
  109.             if(result == -1)
  110.             {
  111.             fclose(fp);
  112.             return(7);
  113.             };
  114.         };
  115.     };
  116.     
  117.     fclose(fp);
  118.     }
  119.     else
  120.     return(6);
  121.  
  122.  
  123.     fBUFFER = (unsigned char *)malloc(fBUFFER_SIZE);
  124.     if(! fBUFFER) return (8);
  125.  
  126.     /* ---------------------------------------------
  127.        Initialize the wall array to contain
  128.        coordinates for all the columns of the walls.
  129.        --------------------------------------------- */
  130.  
  131.     /* north/west wall/door */
  132.  
  133.     count = 0;
  134.     for(index = 32; index >= -32; index--)
  135.     {
  136.     walls[W][count][0] = -32;
  137.     walls[W][count][1] = index;
  138.     walls[DRW][count][0] = 0;
  139.     walls[DRW][count][1] = index;
  140.  
  141.     walls[N][count][0] = index;
  142.     walls[N][count][1] = 32;
  143.     walls[DRN][count][0] = index;
  144.     walls[DRN][count][1] = 0;
  145.     count++;
  146.     };
  147.     
  148.     /* east/south wall/door */
  149.  
  150.     count = 0;
  151.     for(index = -32; index <= 32; index++)
  152.     {
  153.     walls[E][count][0] = 32;
  154.     walls[E][count][1] = index;
  155.     walls[DRE][count][0] = 0;
  156.     walls[DRE][count][1] = index;
  157.  
  158.     walls[S][count][0] = index;
  159.     walls[S][count][1] = -32;
  160.     walls[DRS][count][0] = index;
  161.     walls[DRS][count][1] = 0;
  162.  
  163.     count++;
  164.     };
  165.  
  166.  
  167.     return(SUCCESS);    
  168. }
  169.  
  170.  
  171. void CleanUp( void )
  172. {
  173.     register long index;
  174.  
  175.     for(index = 0; index < NbrWallBMPs; index++)
  176.     if(Wall[index]) free(Wall[index]);
  177.     
  178.     if(fBUFFER) free(fBUFFER);
  179.     if(JoyStick1) DeallocateJoystick();
  180.     if(MyWIN) CloseWindow( MyWIN );
  181.     if(MySCR) CloseScreen( MySCR );
  182.     if(MyBMP->Planes[0]) FreeRaster(MyBMP->Planes[0], 320L, 200L*4);
  183.     if(MyBMP) FreeMem(MyBMP, (long)sizeof(struct BitMap));
  184.     if(GfxBase) CloseLibrary( GfxBase );
  185.     if(IntuitionBase) CloseLibrary( IntuitionBase );
  186.  
  187. }
  188.  
  189.  
  190. void ERROR_ALERT( word result )
  191. {
  192.     fprintf(stderr,"WOLF3D ERROR: %s\n",ErrorMesg[ result ]);
  193. }
  194.  
  195.  
  196.  
  197.