home *** CD-ROM | disk | FTP | other *** search
/ DP Tool Club 17 / CD_ASCQ_17_101194.iso / dos / prg / sphinx / examples / vga / fire.c__ < prev    next >
Encoding:
Text File  |  1994-07-07  |  2.3 KB  |  145 lines

  1. /*
  2.    NAME: FIRE.C--
  3.    INFO: Written by Midnight.
  4.          Conversion to C-- (and a little palette messing) by SPHINX.
  5.    DESCRIPTION: This program displays a fire like simulation on a
  6.                 VGA 320x200 256 colour screen.
  7.    RUN FILE SIZE: 457 bytes.
  8. */
  9.  
  10. ?use80386
  11. ?resize FALSE
  12. ?assumeDSSS TRUE
  13.  
  14. ?include "VIDEO.H--"
  15. ?include "VGA.H--"
  16. ?include "RANDOM.H--"
  17. ?include "KEYCODES.H--"
  18.  
  19. byte palette[768];
  20.  
  21. // byte pic = FROM "c--.cut";
  22.  
  23. word F;
  24. word LowLimit;
  25.  
  26.  
  27. void SetCols ()
  28. byte N;
  29. {
  30.  
  31. /*
  32. BX = 0;
  33. do {
  34.     SI = BX+BX+BX;
  35.     palette[SI] = BL >> 2;
  36.     palette[SI+1] = BL >> 3;
  37.     palette[SI+2] = 0;
  38.     BX++;
  39.     } while( BX < 256 );
  40. */
  41.  
  42.  
  43. palette[0]=0;
  44. palette[1]=0;
  45. palette[2]=0;
  46. BX = 0;
  47. do {
  48.     DI = BX+BX+BX;
  49.  
  50.     AX = BX * 64 / 85;
  51.     DL = AL;
  52.     palette[DI+3] = DL;
  53.     palette[DI+3+1] = 0;
  54.     palette[DI+3+2] = 0;
  55.  
  56.     palette[DI+3+85+85+85] = 63;
  57.     palette[DI+3+85+85+85+1] = DL;
  58.     palette[DI+3+85+85+85+2] = 0;
  59.  
  60.     palette[DI+3+85+85+85+85+85+85] = 63;
  61.     palette[DI+3+85+85+85+85+85+85+1] = 63;
  62.     palette[DI+3+85+85+85+85+85+85+2] = DL;
  63.  
  64.     BX++;
  65.     } while( BX < 85 );
  66.  
  67.  
  68. SETVGAPALETTE( ,0,256,#palette);
  69. }
  70.  
  71.  
  72.  
  73. void AddFire (word N)
  74. {
  75. loop(N)
  76.     {
  77.     AX = RAND()%10+1;
  78.     SI = AX+AX;
  79.     AX = RAND()%298 + 64010;
  80.     DI = AX;
  81.     AL = RAND()&127 + 128;
  82.     loop(SI)
  83.     {
  84.     ESBYTE[DI] = AL;
  85.     ESBYTE[DI+640] = AL;
  86.     DI++;
  87.     }
  88.     }
  89. }
  90.  
  91.  
  92. void CopyAvg ()
  93. {
  94. DI = 1280;
  95. do {
  96.     BX = 2;
  97.     do {
  98.     AX = ESBYTE[DI+BX-2] +  ESBYTE[DI+BX+2] + ESBYTE[DI+BX] +
  99.           ESBYTE[DI+BX+640] / 4;
  100.     AX = AX + ESBYTE[DI+BX-640] >> 1;
  101.     IF( AL > 128 )
  102.         AL-=2;
  103.     ELSE IF( AL > 3)
  104.         AL -=4;
  105.     ELSE
  106.         AL = 0;
  107.  
  108.     AH = AL;
  109.     ESWORD[DI+BX-1280] = AX;
  110.     ESWORD[DI+BX-1280+320] = AX;
  111.     BX += 2;
  112.     } while( BX < 318 );
  113.     DI += 640;
  114.     } while( DI < 320*204 );
  115. }
  116.  
  117.  
  118.  
  119. void main ()
  120. {
  121. @ SETVIDEOMODE(byte vid_320x200_256);
  122.  
  123. SetCols();
  124.  
  125. ES = 0xA000;
  126.  
  127. F = 0;
  128. do {
  129.     AddFire(F / 32 + 1);
  130.     CopyAvg();
  131.     IF( F < 512 )
  132.     F++;
  133.     LowLimit = F >> 2 + 128 >> 2;
  134. //    IF( F % 80 == 0 )
  135. //        overimage19(80,90,#pic,0);
  136.     } while( BIOSKEYCHECK() == 0 );
  137.  
  138. do {BIOSREADKEY();
  139.     } while( BIOSKEYCHECK() != 0 );
  140.  
  141. @ SETVIDEOMODE(byte vid_text80c);
  142. }
  143.  
  144.  
  145. /* end of FIRE.C-- */