home *** CD-ROM | disk | FTP | other *** search
/ HOT Scene Stuff / hotscenestuffzyklop1996.iso / demos / sunknown / eye.cpp < prev    next >
C/C++ Source or Header  |  1994-04-06  |  4KB  |  247 lines

  1. // EYE.CPP //////////////////////////////////////////////////////////////////
  2.  
  3. // Thomas H.
  4.  
  5. // INCLUDES /////////////////////////////////////////////////////////////////
  6.  
  7. #include <stdio.h>
  8. #include <math.h>
  9. #include <dos.h>
  10. #include <stdlib.h>
  11.  
  12. #include "template.h"
  13. #include "voxel.h"
  14. #include "timer.h"
  15. #include "global.h"
  16. #include "seg.h"
  17. #include "xgraf.h"
  18. #include "voxel.h"
  19.  
  20. // DEFINES //////////////////////////////////////////////////////////////////
  21.  
  22. #define ZMIN    1.252
  23. #define ZMAX        25
  24. #define ZOOMFAC 9
  25.  
  26. #define HITIT  26600
  27.  
  28. #define LOGOX   303
  29. #define LOGOY   19
  30. #define LYPOS   (239l-LOGOY)
  31.  
  32. // EXTERNALS ////////////////////////////////////////////////////////////////
  33.  
  34. // FUNCTIONS
  35.  
  36. extern "C" void asmvox(void);
  37. extern "C" void antialias(void);
  38. extern "C" void asmsky(void);
  39.  
  40. // VARS
  41.  
  42. extern timer_C timer;
  43. extern long far copper_32, far leapright;
  44. extern word far sseg, far hseg, far fseg, far lseg, far voxpos, far voypos;
  45. extern byte far alti,far ofraction, far interlimit;
  46. extern byte *pressed;
  47. extern byte rgb[];
  48. extern ulong musicstart;
  49. extern float zoomfac;
  50. extern int relspeed;
  51.  
  52. // FUNCTIONS ////////////////////////////////////////////////////////////////
  53.  
  54. // ZOOMF
  55.  
  56. float zoomf(float pro)
  57. {
  58.     pro*=1.1;
  59.     if (pro>1)
  60.         pro=1;
  61.     if (pro>0.5)
  62.         pro=1-pro;
  63.     pro=0.5-pro;
  64.     pro*=2;
  65.     pro-=0.5;
  66.     if (pro<0)
  67.         pro=0;
  68.     pro=2*sqrt(0.25-pro*pro);
  69.     pro=pow(pro,0.1);
  70.     pro=ZMAX-(ZMAX-ZMIN)*pro;
  71.     return pro;
  72. }
  73.  
  74. // DRAWTITLE
  75.  
  76. void drawtitle(word sseg, byte *ptr, float pro)
  77. {
  78.     int len=(pro-0.3)*22*LOGOX;
  79.     if (len>LOGOX)
  80.         len=LOGOX;
  81.     if (len<0)
  82.         len=0;
  83.     int xpos=160-len/2;
  84.     byte p=xpos&3;
  85.     word spos=(xpos/4l)+80l*LYPOS;
  86.     int pno=-1;
  87.     long dpos=(long)ptr;
  88.     for (byte plan=p; plan<p+4; plan++)
  89.     {
  90.         pno++;
  91.         byte rp=(plan&3);
  92.         if (plan==4)
  93.             spos++;
  94.  
  95.         asm mov cl,rp
  96.         asm mov ax,0x0100+MAP_MASK
  97.         asm shl ah,cl
  98.         asm mov dx,SC_INDEX
  99.         asm out dx,ax
  100.  
  101.         int ant=(len-pno+3)/4;
  102.         if (!ant)
  103.             goto skipant;
  104.         asm mov es,sseg
  105.         asm mov di,spos
  106.         asm push ds
  107.         asm lds si,dpos
  108.  
  109. moveright:
  110.         asm mov cl,LOGOY
  111.         asm mov ch,ss:[bx]
  112. nextdown:
  113.         asm mov al,[si]
  114.         asm or al,al
  115.         asm jz blank
  116.         asm or al,ch
  117.         asm mov es:[di],al
  118. blank:
  119.         asm inc si
  120.         asm add di,80
  121.         asm dec cl
  122.         asm jnz nextdown
  123.         asm add si,3*LOGOY
  124.         asm add di,1-(80*LOGOY)
  125.  
  126.         asm dec ant
  127.         asm jnz moveright
  128.         asm pop ds
  129. skipant:
  130.         dpos+=LOGOY;
  131.     }
  132. }
  133.  
  134. // EYE
  135.  
  136. void eye(void)
  137. {
  138.     seg_C eye;
  139.     seg_C tittel((long)LOGOX*LOGOY);
  140.  
  141.     setpalette(EYEPAL);
  142.  
  143.     FILE *infile=fopen(EYEBMP,"rb");
  144.     for (long h=0; h<65536l; h++)
  145.     {
  146.         byte temp;
  147.         fread(&temp,1,1,infile);
  148.         if (h&255<20)
  149.             temp=0;
  150.         eye.ptr[h]=temp;
  151.     }
  152.     fclose(infile);
  153.  
  154.     infile=fopen(TITLE,"rb");
  155.     for (int y=0; y<LOGOY; y++)
  156.     for (int x=0; x<LOGOX; x++)
  157.     {
  158.         byte temp;
  159.         fread(&temp,1,1,infile);
  160.         tittel.ptr[y+(LOGOY)*x]=temp;
  161.     }
  162.     fclose(infile);
  163.  
  164.     word screenseg=0xa000+240*5;
  165.  
  166.     float vin=0,dvin=0;
  167.     zoomfac=ZOOMFAC;
  168.     int done=0;
  169.  
  170.     long hold;
  171.     long musek;
  172.  
  173.     do
  174.     {
  175.         hold=timer.readtimer();
  176.         musek=timer.elapsed(musicstart,hold);
  177.     }while (musek<HITIT);
  178.  
  179.     ulong estart=timer.readtimer();
  180.     ulong total=END_EYE-timer.elapsed(musicstart,estart);
  181.     int debframe=0;
  182.  
  183.     do
  184.     {
  185.         debframe++;
  186.         long now=timer.elapsed(estart,timer.readtimer());
  187.         float pro=(float)now/total;
  188.         zoomfac=zoomf(pro);
  189.         vin+=dvin;
  190.         dvin+=
  191.             (pressed[72]-pressed[80])/100.0;
  192.         if (pressed[75])
  193.             zoomfac*=1.01;
  194.         if (pressed[77])
  195.             zoomfac/=1.01;
  196.         vin+=0.02;
  197.         visvox(eye.ptr,vin,screenseg,1);
  198.         drawtitle(screenseg,tittel.ptr,pro);
  199.         yoffset((screenseg-0xa000)/5);
  200.         screenseg+=240*5;
  201.         if (screenseg==240*5*3l+0xa000)
  202.             screenseg=0xa000;
  203.  
  204.         done|=(pro>=1.0);
  205.     }while (!done);
  206.  
  207.     frame();
  208.     int yy=(screenseg-0xa000)/5;
  209.     yoffset(yy);
  210.  
  211.     for (int x=0; x<320; x++)
  212.     for (int y=220; y<240; y++)
  213.     {
  214.         byte temp=getpixel(x,y+yy);
  215.         putpixel(x,y+240,temp);
  216.     }
  217.     yoffset(2*240);
  218.  
  219.     frame();
  220.     outport(SC_INDEX,0x0f02);
  221.  
  222.     asm mov ax,0xa000
  223.     asm mov es,ax
  224.     asm xor ax,ax
  225.     asm xor di,di
  226.     asm mov cx,19200
  227.     asm rep stosb
  228.     asm mov cx,19200
  229.     asm rep stosb
  230.  
  231.     for (int count=0; count<12; count++)
  232.     {
  233.         frame();
  234.         yoffset(2*240-count*2);
  235.     }
  236.  
  237.     frame();
  238.     outport(SC_INDEX,0x0f02);
  239.     asm mov ax,0xa000
  240.     asm mov es,ax
  241.     asm xor ax,ax
  242.     asm xor di,di
  243.     asm mov cx,32768
  244.     asm rep stosb
  245.     asm mov cx,32768
  246.     asm rep stosb
  247. }