home *** CD-ROM | disk | FTP | other *** search
/ MacFormat 1996 Christmas / macformat-045.iso / Shareware Plus / Developers / NGL1.5.0E(fat)DEMO / Snow Demo(PPC) / Snow Demo.c < prev    next >
Encoding:
C/C++ Source or Header  |  1996-07-19  |  4.8 KB  |  239 lines  |  [TEXT/CWIE]

  1. /*============================================================
  2.  
  3.                     Snow  demo program
  4.                     
  5. ============================================================*/
  6.  
  7. #include        "N_Library.h"
  8.  
  9. void            Main_Process(void);
  10. void             Key_Process(void);
  11. WindowPtr         CreateWindow(Str255 name);
  12.  
  13. #define            WindowSizeX        640
  14. #define            WindowSizeY        480
  15.  
  16. short            NewWindowX;
  17. short            NewWindowY;
  18. short            Data_Rsrc = 0;
  19. long            routine_step = 0;
  20. long            wait;
  21. short            S1_X[1024];
  22. short            S1_Y[1024];
  23. unsigned short    S1_D[1024];
  24. short            r = 0,rs=1;
  25. short            lx=640;
  26. short            speed  = -3;
  27. Boolean            q = false;
  28. Boolean            kb=false;
  29. EventRecord        theEvent;
  30. short            Snd_List0[]     = {1000,1001,1002,0};
  31. short            Music1[]         = { 1002,-1 };
  32.  
  33. void main(void)
  34. {
  35.     WindowPtr    window;
  36.     short         i;
  37.  
  38.     ToolboxInit();
  39.     ColorCheck();
  40.     HideMenuBar();
  41.     window = CreateWindow("\pPUSH 'Q' TO QUIT");
  42.     HideCursor();
  43.     N_Window_Set(window,NewWindowX,NewWindowY,WindowSizeX,WindowSizeY);
  44.     N_Sp_Make(640,480);
  45.     N_Cel_Make(150000);
  46.     Open_Resource_File(128,1,&Data_Rsrc);
  47. //    Set Kanban Sprites <Sprites & Cel> (Sprite 256)
  48.     Through_Col = 0xff;
  49.     N_Sprite_Set(200,256,216,88,0,1,1,0);                    //wood panel (Sp 256)
  50. //    Set Snow Sprites (Sprite 30-46)
  51.     N_Sprite_Set(404,30,32,32,0,1,1,2);                        //snow (2=zoom out mode,16lev) (Sp 30-46)
  52.     N_Sprite_Set(419,46,8,8,0,1,1,0);
  53.     N_Pict_Draw(131,0,0,(GrafPtr)SP_off,true);                //draw background on SP_Off
  54.     N_Sound_Load(&Snd_List0[0]);                            //set sounds
  55.     Close_Resource_File(&Data_Rsrc);
  56.     N_Music_Set(1,&Music1[0]);                                //set Music 1
  57.     N_Music_Play(1);                                        //play Music 1
  58.  
  59.  
  60.     for (i = 0;i!=1024;i++)
  61.     {
  62.         N_Cel_Kill(i);                                        //kill plane info
  63.         S1_X[i] = GetRandom(0,640*32)-640*16;                //make random points
  64.         S1_Y[i] = GetRandom(0,480*32)-480*16;
  65.         S1_D[i] = GetRandom(1,255);
  66.     }
  67.  
  68.     N_Pict_Effect (131,0,0,3,0,0);
  69.     for (i=0;i!=32;i++)
  70.     {
  71.         Delay(1,&wait);
  72.         N_Pict_Effect (131,0,0,3,1,0);
  73.         N_Pict_Effect (131,0,0,3,1,0);
  74.         N_Pict_Effect (131,0,0,3,1,0);
  75.         N_Pict_Effect (131,0,0,3,1,0);
  76.         N_Pict_Effect (131,0,0,3,1,0);
  77.         N_Pict_Effect (131,0,0,3,1,0);
  78.         N_Pict_Effect (131,0,0,3,1,0);
  79.         N_Pict_Effect (131,0,0,3,1,0);
  80.     }
  81.  
  82.     do
  83.     {
  84.         Main_Process();
  85.     }
  86.     while (q==false);
  87.     N_Music_Out(90);                                        //fade out
  88.     do
  89.     {
  90.     }
  91.     while (FO_Flag == true);
  92.     ShowCursor();
  93.     ShowMenuBar();
  94.     N_Music_Kill();
  95.     N_Sound_Close();                                        //close sound channels
  96.     ColorRevert();
  97.  
  98. }
  99.  
  100. void Main_Process(void)
  101. {
  102.     short                i,x,y,ii,p = 0,dist,bt;
  103.     unsigned short        wrk;
  104.     long                xx,yy;
  105.     char                key;
  106.     Boolean                emp;
  107.     Point                mp;
  108.  
  109.     Key_Process();
  110.     routine_step++;
  111.     if (routine_step<64)                                        //move & put a wood panel
  112.     {
  113.         N_Cel_Put(899,0x80000000+256,212,(short)(routine_step*4-92));
  114.     }
  115.     if (routine_step>=64 && routine_step<192)
  116.     {
  117.         N_Cel_Put(899,0x80000000+256,212,164);
  118.     }        
  119.     if (routine_step>=192 && routine_step <300)
  120.     {
  121.         N_Cel_Put(899,0x80000000+256,212,(short)164+((routine_step-192)*5));
  122.     }
  123.  
  124.     if (routine_step < 300) ii = routine_step;                        //max 300 snows
  125.         else    ii = 300;
  126.  
  127.     for (i = 0;i!=ii;i++)
  128.     {
  129.         x = S1_X[i];
  130.         y = S1_Y[i];
  131.  
  132.         wrk = S1_D[i];
  133.         wrk = wrk / 16;
  134.         wrk = 16-wrk;
  135.  
  136.         if (wrk>14) wrk = 15;
  137.  
  138.         N_Cel_3D_Put(i,0x80000000+30+wrk,x,y,320,240,r,S1_D[i]);        //put a snow
  139.         dist = S1_D[i] + speed;
  140.         if (dist <  0)
  141.         {
  142.             dist = 512+dist;
  143.             N_Cel_Get(i,&emp,&xx,&x,&y);
  144.             N_Sp_Put(0x80000000+46,x-4,y-4);
  145.  
  146.             S1_X[i] = GetRandom(0,640*32)-640*16;
  147.             S1_Y[i] = GetRandom(0,480*32)-480*16;
  148.         }            
  149.  
  150.         if (dist > 255)
  151.         {
  152.             dist = dist -256;            
  153.  
  154.             S1_X[i] = GetRandom(0,640*32)-640*16;
  155.             S1_Y[i] = GetRandom(0,480*32)-480*16;
  156.         }            
  157.  
  158.  
  159.         S1_D[i] = dist;
  160.     }
  161.     r=r+rs;
  162.     N_Cel_Loop(0,0);
  163.  
  164.     bt=N_Button_Check(0);
  165.  
  166.     if (bt==0) q=true;
  167.     if (bt==1) N_Pict_Draw(131,0,0,(GrafPtr)SP_off,true);                    //re-draw background
  168.     if (bt==2)    speed--;
  169.     if (bt==3)    speed++;
  170.     if (bt==4)    rs++;
  171.     if (bt==5)    rs--;
  172. }
  173.  
  174. WindowPtr CreateWindow (Str255 name)
  175. {
  176.     WindowPtr    window;
  177.     short        centerX,centerY;
  178.     short        windowWidth,windowHeight;
  179.  
  180.     window = GetNewWindow (128,nil,(WindowPtr)-1L );
  181.     centerX  = (qd.screenBits.bounds.right -qd.screenBits.bounds.left)/2;
  182.     centerY  = (qd.screenBits.bounds.bottom -qd.screenBits.bounds.top)/2;
  183.     SetWTitle(window,name);
  184.     MoveWindow(window,NewWindowX=centerX-(WindowSizeX/2),NewWindowY=centerY-(WindowSizeY/2),false);
  185.     SizeWindow(window,WindowSizeX,WindowSizeY,TRUE);
  186.  
  187.     ShowWindow(window);
  188.     SetPort((GrafPtr)window );
  189.     return (WindowPtr)window;
  190. }
  191.     
  192. void Key_Process(void)
  193. {
  194.     char        ky;
  195.  
  196.     ky = N_Key_Get();
  197.     if (kb == false)
  198.     {
  199.         if ((ky & 0x01) !=0)
  200.         {
  201.             speed++;
  202.             N_Button_Push(0,3);
  203.             kb = true;
  204.         }    
  205.         if ((ky & 0x02) !=0)
  206.         {
  207.             rs++;
  208.             N_Button_Push(0,4);
  209.             kb = true;
  210.         }
  211.         if ((ky & 0x04) !=0)
  212.         {
  213.             rs--;
  214.             N_Button_Push(0,5);
  215.             kb = true;
  216.         }
  217.         if ((ky & 0x08) !=0)
  218.         {
  219.             speed--;
  220.             N_Button_Push(0,2);
  221.             kb = true;
  222.         }
  223.  
  224.         if ((ky & 0x40) !=0)
  225.         {
  226.             N_Pict_Draw(131,0,0,(GrafPtr)SP_off,true);            //re-draw background
  227.             N_Button_Push(0,1);
  228.             kb = true;
  229.         }
  230.     }
  231.     if ((ky & 0x80) !=0)
  232.     {
  233.         N_Button_Push(0,0);
  234.          q = true;
  235.     }
  236.     if (ky==0) kb = 0;
  237. }
  238.  
  239.