home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 5 / Apprentice-Release5.iso / Source Code / C / Games / Arashi 1.1.1 / source code / Game Source / jam src / STCrack.c < prev    next >
Encoding:
C/C++ Source or Header  |  1992-12-19  |  4.2 KB  |  231 lines  |  [TEXT/KAHL]

  1. /*/
  2.      Project Arashi: STCrack.c
  3.      Major release: Version 1.1d2, 9/5/95
  4.  
  5.      Last modification: Saturday, December 19, 1992, 14:39
  6.      Created: Saturday, March 25, 1989, 14:41
  7.  
  8.      Copyright © 1989-1992, Juri Munkki
  9. /*/
  10.  
  11. #include "VA.h"
  12. #include "STORM.h"
  13. #include "STCrack.h"
  14.  
  15. #define    MAXCRACKS    60 /* changed 12-20-92 from 40 */
  16.  
  17. typedef    struct
  18. {    int        x,y;
  19.     int        xv,yv;
  20.     int        size;
  21.     int        color;
  22.     int        partcode;
  23.     int        rotation;
  24.     int        rotspeed;
  25.     int        count;
  26. }    Crack;
  27.  
  28. Crack    *Cracks;
  29. int        numcracks;
  30.  
  31. void    FlipperHalf1(int,int,int,int);
  32. void    FlipperHalf2(int,int,int,int);
  33. void    DrawPulsar(int,int,int,int,int);
  34.  
  35. void    PlayerHalf1(cx,cy,dx,dy)
  36. int        cx,cy,dx,dy;
  37. {
  38.     register    int        x2,y2,x1,y1;
  39.                 int        x4,y4,x8,y8;
  40.     
  41.     x1=cx+dx;                    y1=cy+dy;
  42.     x4=dx>>2;                    y4=dy>>2;
  43.     x8=dx>>3;                    y8=dy>>3;
  44.     
  45.     VAMoveTo(cx,cy);
  46.     x2=(dx>>1)+y4;                y2=(dy>>1)-x4;
  47.  
  48.     VASafeLineTo(cx+x2,cy+y2);
  49.  
  50.     x2=(dx>>1)+y8;                y2=(dy>>1)-x8;
  51.  
  52.     VASafeLineTo(cx+x2,cy+y2);
  53.     VASafeLineTo(cx+x8,cy+y8);
  54.  
  55.     x2=x4-y4;                    y2=y4+x4;
  56.  
  57.     VASafeLineTo(cx+x2,cy+y2);
  58.     VASafeLineTo(cx,cy);
  59. }
  60. void    PlayerHalf2(cx,cy,dx,dy)
  61. int        cx,cy,dx,dy;
  62. {
  63.     register    int        x2,y2,x1,y1;
  64.                 int        x4,y4,x8,y8;
  65.     
  66.     x1=cx+dx;                    y1=cy+dy;
  67.     x4=dx>>2;                    y4=dy>>2;
  68.     x8=dx>>3;                    y8=dy>>3;
  69.     
  70.     VAMoveTo(cx,cy);
  71.     x2=(dx>>1)+y4;                y2=+(dy>>1)-x4;
  72.  
  73.     VASafeLineTo(cx-x2,cy+y2);
  74.  
  75.     x2=(dx>>1)+y8;                y2=(dy>>1)-x8;
  76.  
  77.     VASafeLineTo(cx-x2,cy+y2);
  78.     VASafeLineTo(cx-x8,cy+y8);
  79.  
  80.     x2=x4-y4;                    y2=y4+x4;
  81.  
  82.     VASafeLineTo(cx-x2,cy+y2);
  83.     VASafeLineTo(cx,cy);
  84. }
  85. void    OldPlayerHalf2(cx,cy,dx,dy)
  86. int        cx,cy,dx,dy;
  87. {
  88.     register    int        x2,y2,x1,y1;
  89.                 int        x4,y4,x8,y8;
  90.     
  91.     x1=cx+dx;                    y1=cy+dy;
  92.     x4=dx>>2;                    y4=dy>>2;
  93.     x8=dx>>3;                    y8=dy>>3;
  94.     
  95.     VAMoveTo(x1,y1);
  96.  
  97.     x2=-x4-y4;                    y2=-y4+x4;
  98.  
  99.     VASafeLineTo(x1+x2,y1+y2);
  100.     VASafeLineTo(x1-x8,y1-y8);
  101.  
  102.     x2=(dx>>1)+y8;                y2=(dy>>1)-x8;
  103.  
  104.     VASafeLineTo(cx+x2,cy+y2);
  105.  
  106.     x2=(dx>>1)+y4;                y2=(dy>>1)-x4;
  107.  
  108.     VASafeLineTo(cx+x2,cy+y2);
  109.     VASafeLineTo(x1,y1);
  110. }
  111.  
  112. void    FlipperHalf1(cx,cy,dx,dy)
  113. int        cx,cy,dx,dy;
  114. {
  115.     register    int    x2,y2;
  116.     register    int    dx4,dx8,dy4,dy8;
  117.     
  118.     VA.color=2;
  119.     dx4=dx >> 2;        dy4=dy >> 2;
  120.     dx8=dx >> 3;        dy8=dy >> 3;
  121.  
  122.     VAMoveTo(cx,cy);
  123.     x2=dx/2+dy8;        y2=dy/2-dx8;
  124.     VASafeLineTo(cx+x2,cy+y2);
  125.     x2=dx8+dy4;            y2=dy8-dx4;
  126.     VASafeLineTo(cx+x2,cy+y2);
  127.     x2=dx4+dy8;            y2=dy4-dx8;
  128.     VASafeLineTo(cx+x2,cy+y2);
  129.     VASafeLineTo(cx,cy);
  130. }
  131. void    FlipperHalf2(cx,cy,dx,dy)
  132. int        cx,cy,dx,dy;
  133. {
  134.     register    int    x1,y1,x2,y2;
  135.                 int    dx4,dx8,dy4,dy8;
  136.     
  137.     VA.color=2;
  138.     dx4=dx >> 2;        dy4=dy >> 2;
  139.     dx8=dx >> 3;        dy8=dy >> 3;
  140.     x1=cx+dx;            y1=cy+dy;
  141.  
  142.     VAMoveTo(x1,y1);
  143.     x2=dx/2+dy8;        y2=dy/2-dx8;
  144.     VASafeLineTo(cx+x2,cy+y2);
  145.     x2=dx8-dy4;            y2=dy8+dx4;
  146.     VASafeLineTo(x1-x2,y1-y2);
  147.     x2=dx4-dy8;            y2=dy4+dx8;
  148.     VASafeLineTo(x1-x2,y1-y2);
  149.     VASafeLineTo(x1,y1);
  150. }
  151.  
  152. void    UpdateCracks()
  153. {
  154.                 int        i;
  155.     register    Crack    *cp;
  156.     register    int        dx,dy;
  157.     
  158.     cp=Cracks;
  159.     for(i=0;i<numcracks;i++)
  160.     {    cp->x+=cp->xv;
  161.         cp->y+=cp->yv;
  162.         cp->rotation+=cp->rotspeed;
  163.         while(cp->rotation>=ANGLES)    cp->rotation-=ANGLES;
  164.         while(cp->rotation< 0)        cp->rotation+=ANGLES;
  165.  
  166.         if(!VA.Late)
  167.         {    dx= (cp->size * (long)Cosins[cp->rotation]) >> 8;
  168.             dy= (cp->size * (long)-Sins[cp->rotation]) >> 8;
  169.             VA.color=cp->color;
  170.     
  171.             switch(cp->partcode)
  172.             {    case FlipperLeft:
  173.                     FlipperHalf1(cp->x,cp->y,dx,dy);
  174.                     break;
  175.                 case FlipperRight:
  176.                     FlipperHalf1(cp->x,cp->y,dx,dy);
  177.                     break;
  178.                 case PlayerLeft:
  179.                     PlayerHalf1(cp->x,cp->y,dx,dy);
  180.                     break;
  181.                 case PlayerRight:
  182.                     PlayerHalf2(cp->x,cp->y,dx,dy);
  183.                     break;
  184.                 case PulsarCrack:
  185.                     DrawPulsar(cp->x,cp->y,dx,dy,30-(cp->count*2));
  186.                     break;
  187.                 case FlyingVector:
  188.                     dx>>=1;
  189.                     dy>>=1;
  190.                     VAMoveTo(cp->x-dx,cp->y-dy);
  191.                     VASafeLineTo(cp->x+dx,cp->y+dy);
  192.                     break;
  193.             }
  194.         }
  195.  
  196.         if(--cp->count <= 0)
  197.         {    *cp--=Cracks[--numcracks];
  198.             i--;
  199.         }
  200.         cp++;
  201.     }
  202. }
  203. void    AddCrack(x,y,xv,yv,color,unitsize,part,rot,rotspeed,count)
  204. int        x,y,xv,yv,color,unitsize,part,rot,rotspeed,count;
  205. {
  206.     register    Crack    *cp;
  207.     
  208.     if(numcracks < MAXCRACKS)
  209.     {    cp=Cracks+numcracks++;
  210.         cp->x=x;
  211.         cp->y=y;
  212.         cp->xv=xv;
  213.         cp->yv=yv;
  214.         cp->color=color;
  215.         cp->partcode=part;
  216.         cp->rotation=rot;
  217.         cp->rotspeed=rotspeed;
  218.         cp->size=unitsize;
  219.         cp->count=count;
  220.     }
  221. }
  222. void    AllocCracks()
  223. {
  224.     Cracks=(Crack *)NewPtr(sizeof(Crack)*MAXCRACKS);
  225.     numcracks=0;
  226. }
  227.  
  228. void    InitCracks()
  229. {
  230.     numcracks=0;
  231. }