home *** CD-ROM | disk | FTP | other *** search
/ Trixter's Scene Collection / trixter.zip / trixter / Demos / KD_DREAM.ZIP / SRC.ZIP / DREAMS.C < prev    next >
C/C++ Source or Header  |  1996-12-30  |  36KB  |  1,339 lines

  1. #include <math.h>
  2. #include <malloc.h>
  3. #include <wgt5.h>
  4. #include <wgtvesa.h>
  5. #include <stdlib.h>
  6. #include <direct.h>
  7. #include <string.h>
  8. #include <pr.h>
  9.  
  10. #include "e:\seal\test\audio\include\audio.h"
  11.  
  12. #ifdef __3DFX__
  13. #include <glide.h>
  14. #include <pr3dfx.h>
  15. #endif
  16.  
  17. /*
  18.    Dreams
  19.    For The Party 6
  20.    Started on Dec. 17/1996
  21.    Finished on Dec. 23/1996
  22.  
  23.    Note that some parts work on the 3Dfx but not all
  24.    (mirrors and motion blur).
  25.  
  26.    Written by Chris Egerter
  27.    egerter@egerter.com            www.egerter.com
  28. */
  29.  
  30.  
  31. PR_DWORD device;                /* Video output device */
  32. PR_DWORD ticks=0;               /* Total number of ticks passed */
  33. PR_DWORD global_ticks=0;
  34. PR_DWORD secret = 0;
  35. PR_DWORD demo_sound;            /* 1 if sound is on */
  36. PR_DWORD sound_config = 0;      /* 1 if manual configuration is used */
  37. PR_DWORD fading = 0;
  38. PR_DWORD song_row, song_patt;   /* Song row and pattern */
  39.  
  40. color fadepal[256];
  41.  
  42.  
  43. PR_DWORD vwidth;                /* Viewport size */
  44. PR_DWORD vheight;
  45. PR_VIEWPORT viewport;           /* Our viewport structure */
  46. PR_VIEWPORT mirrorview;         /* Our mirror viewport */
  47.  
  48. PR_CAMERA *newcam;              /* One camera */
  49. PR_LIGHTLIST userlights;        /* A bunch of lights */
  50.  
  51.  
  52. AUDIOINFO info;
  53. AUDIOCAPS caps;
  54. LPAUDIOMODULE lpModule;
  55. UINT rc, nDevId;
  56.  
  57.  
  58.  
  59. void InitializeSound (void)
  60. /* Loads in the song and wave files */
  61. {
  62. int i;
  63. char szText[80];
  64. PR_DWORD sound_device, sound_bits, sound_mode, sound_rate;
  65.  
  66.  
  67.   /* initialize audio library */
  68.   AInitialize ();
  69.  
  70.   /* open audio device */
  71.   info.nDeviceId = AUDIO_DEVICE_MAPPER;
  72.   info.wFormat = AUDIO_FORMAT_8BITS | AUDIO_FORMAT_MONO;
  73.   info.nSampleRate = 22050;
  74.  
  75.   if (sound_config)
  76.     {
  77.      /* show registered device drivers */
  78.      printf("List of registered devices:\n");
  79.      for (nDevId = 1; nDevId < AGetAudioNumDevs(); nDevId++) {
  80.          AGetAudioDevCaps(nDevId, &caps);
  81.          printf("  %2d. %s\n", nDevId, caps.szProductName);
  82.         }
  83.  
  84.      printf("\n");
  85.      printf ("Choose a sound device: ");
  86.      scanf ("%i", &sound_device);
  87.      info.nDeviceId = sound_device;
  88.  
  89.  
  90.      printf("\n\n");
  91.      printf ("0. 8 bit\n");
  92.      printf ("1. 16 bit\n");
  93.      printf ("Choose the bit quality: ");
  94.      scanf ("%i", &sound_bits);
  95.      if (sound_bits == 1)
  96.        info.wFormat = AUDIO_FORMAT_16BITS;
  97.      else
  98.        info.wFormat = AUDIO_FORMAT_8BITS;
  99.  
  100.      printf("\n\n");
  101.      printf ("0. Mono\n");
  102.      printf ("1. Stereo\n");
  103.      printf ("Choose the mode: ");
  104.      scanf ("%i", &sound_mode);
  105.      if (sound_bits == 1)
  106.        info.wFormat |= AUDIO_FORMAT_STEREO;
  107.      else
  108.        info.wFormat |= AUDIO_FORMAT_MONO;
  109.  
  110.  
  111.      printf("\n\n");
  112.      printf ("0. 16000\n");
  113.      printf ("1. 22050\n");
  114.      printf ("2. 44100\n");
  115.      printf ("Choose the sample rate (22050 recommended): ");
  116.      scanf ("%i", &sound_rate);
  117.      if (sound_rate == 0)
  118.        info.nSampleRate = 16000;
  119.      else if (sound_rate == 2)
  120.        info.nSampleRate = 44100;
  121.      else 
  122.        info.nSampleRate = 22050;
  123.     }
  124.  
  125.  
  126.     if ((rc = AOpenAudio(&info)) != AUDIO_ERROR_NONE) {
  127.         AGetErrorText(rc, szText, sizeof(szText) - 1);
  128.         printf("ERROR: %s\n", szText);
  129.         exit(1);
  130.     }
  131.     else {
  132.         AGetAudioDevCaps(info.nDeviceId, &caps);
  133.         printf("Using %s.\n", caps.szProductName);
  134.         printf("Audio device initialized at %d bits %s %u Hz\n",
  135.             info.wFormat & AUDIO_FORMAT_16BITS ? 16 : 8,
  136.             info.wFormat & AUDIO_FORMAT_STEREO ?
  137.                 "stereo" : "mono", info.nSampleRate);
  138.     }
  139.  
  140.  
  141.   /* load module and waveform file */
  142.   ALoadModuleFile ("bm_green.xm", &lpModule, 0);
  143.  
  144.   /* open voices for module and waveforms */
  145.   AOpenVoices (lpModule->nTracks);
  146.  
  147.   delay (1000);
  148. }
  149.  
  150.  
  151.  
  152. void DeinitSound (void)
  153. /* Stop the music and any waves that are playing, and frees the
  154.    sound data */
  155. {
  156. int i;
  157.  
  158.   /* stop playing the module */
  159.   AStopModule ();
  160.   ACloseVoices ();
  161.  
  162.   /* release the module */
  163.   AFreeModuleFile (lpModule);
  164.  
  165.   /* close audio device */
  166.   ACloseAudio ();
  167. }
  168.  
  169.  
  170.  
  171.  
  172. /* ---------------------------------------------------------------------- */
  173. /* Initialize the video output device */
  174. /* ---------------------------------------------------------------------- */
  175. void InitializeDevices (void)
  176. {
  177.  #ifdef __3DFX__
  178.   if ((device == DEVICE_3DFX) || (device == DEVICE_ANY))
  179.     device = PR_Detect3Dfx ();
  180.  #endif
  181.  
  182.   if ((device == DEVICE_SVGA) || (device == DEVICE_ANY))
  183.     device = PR_DetectSVGA ();   /* Attempt to find the device */
  184.  
  185.   if ((device == DEVICE_VGA) || (device == DEVICE_ANY))
  186.     device = PR_DetectVGA ();   /* Attempt to find the device */
  187.  
  188.  #ifdef __3DFX__
  189.   if (device == DEVICE_3DFX)
  190.     {
  191.      PR_Initialize3Dfx ();
  192.      atexit (PR_Shutdown3Dfx);
  193.     }
  194.  #endif
  195.  
  196.   if (device == DEVICE_SVGA)
  197.     {
  198.      PR_InitializeSVGA ();
  199.      atexit (PR_ShutdownSVGA);
  200.     }
  201.   else if (device == DEVICE_VGA)
  202.     {
  203.      PR_InitializeVGA ();
  204.     }
  205. }
  206.  
  207.  
  208. /* ---------------------------------------------------------------------- */
  209. /* Sets the fade palette to white */
  210. /* ---------------------------------------------------------------------- */
  211. void WhitePalette (void)
  212. {
  213. PR_DWORD i;
  214.  
  215.   for (i = 0; i < 256; i++)
  216.     wsetrgb (i, 63, 63, 63, fadepal);
  217.   wsetpalette (0, 255, fadepal);
  218. }
  219.  
  220. /* ---------------------------------------------------------------------- */
  221. /* Sets the global palette to black */
  222. /* ---------------------------------------------------------------------- */
  223. void BlackPalette (void)
  224. {
  225. PR_DWORD i;
  226.  
  227.   for (i = 0; i < 256; i++)
  228.     wsetrgb (i, 0, 0, 0, global_palette);
  229. }
  230.  
  231. /* ---------------------------------------------------------------------- */
  232. /* Sets the global palette to 4/3 */
  233. /* ---------------------------------------------------------------------- */
  234. void BrightPalette (void)
  235. {
  236. PR_DWORD i;
  237.  
  238.   for (i = 0; i < 256; i++)
  239.     {
  240.      fadepal[i].r = (PR_REAL)global_palette[i].r * 1.5;
  241.      fadepal[i].g = (PR_REAL)global_palette[i].g * 1.5;
  242.      fadepal[i].b = (PR_REAL)global_palette[i].b * 1.5;
  243.  
  244.      if (fadepal[i].r > 63)
  245.        fadepal[i].r = 63;
  246.      if (fadepal[i].g > 63)
  247.        fadepal[i].g = 63;
  248.      if (fadepal[i].b > 63)
  249.        fadepal[i].b = 63;
  250.     }
  251. }
  252.  
  253. /* ---------------------------------------------------------------------- */
  254. /* Decreases each color in fade pal until it reaches the color in */
  255. /* global_palette */
  256. /* ---------------------------------------------------------------------- */
  257. void DecPalette (void)
  258. {
  259. PR_DWORD i;
  260.  
  261.   for (i = 0; i < 256; i++)
  262.     {
  263.      if (fadepal[i].r > global_palette[i].r)
  264.        fadepal[i].r--;
  265.      if (fadepal[i].g > global_palette[i].g)
  266.        fadepal[i].g--;
  267.      if (fadepal[i].b > global_palette[i].b)
  268.        fadepal[i].b--;
  269.     }
  270.   wsetpalette (0, 255, fadepal);
  271. }
  272.  
  273.  
  274. /* ---------------------------------------------------------------------- */
  275. /* Timer Interrupt */
  276. /* ---------------------------------------------------------------------- */
  277. void timerproc (void)
  278. {
  279.   ticks++;
  280.   global_ticks++;
  281.  
  282.   if (fading)
  283.     DecPalette ();
  284.  
  285.   if (demo_sound)
  286.     AUpdateAudio ();
  287. }                
  288.  
  289.  
  290. /* ---------------------------------------------------------------------- */
  291. /* Sets to 320x200 mode */
  292. /* ---------------------------------------------------------------------- */
  293. void SetVideoMode (void)
  294. {
  295.  
  296. #ifdef __3DFX__
  297.   vwidth = 640;
  298.   vheight = 480;
  299. #else
  300.   vwidth = 320;
  301.   vheight = 200;
  302. #endif
  303.  
  304.   PR_SetMode (vwidth, vheight, 60);
  305.  
  306.   PR_OpenViewport (&viewport, 1, 1, vwidth-2, vheight-2, VIEW_PLAIN);
  307.  
  308.   PR_SetViewport (&viewport);
  309.   PRGFX_Clip (active_viewport.topx,
  310.               active_viewport.topy,
  311.               active_viewport.bottomx,
  312.               active_viewport.bottomy);
  313. }
  314.  
  315.  
  316.  
  317.  
  318.  
  319. /* ---------------------------------------------------------------------- */
  320. /* Make a list of lights */
  321. /* ---------------------------------------------------------------------- */
  322. void InitializeLights (void)
  323. {
  324.   /* Initialize the lights */
  325.   PR_AllocLights