home *** CD-ROM | disk | FTP | other *** search
/ DOS/V Power Report 1999 February / VPR9902A.BIN / FFILLY / UG / game.tfy < prev    next >
Text File  |  1998-04-30  |  10KB  |  363 lines

  1.  
  2. #define GS_MAIN  0
  3. #define GS_PLAY  1
  4. #define GS_POSE  2
  5. #define GS_DEMO  3
  6. #define GS_BUSY  4
  7. #define GS_END   5
  8.  
  9. #define AN_WAIT      0
  10. #define AN_MOUNT     1
  11. #define AN_MOUNTED   2
  12. #define AN_MOVE_G    3
  13. #define AN_MOVE_B    4
  14. #define AN_PUNCH     5
  15. #define AN_DAMAGE    6
  16. #define AN_KICK      7
  17. #define AN_TUCKLE    8
  18. #define AN_TUCKLED   9
  19. #define AN_MPUNCH   10
  20. #define AN_MPUNCHED 11
  21. #define AN_WIN     100
  22. #define AN_DEF     101
  23.  
  24. #define KM_BASE      0
  25. #define KM_MOVE      1
  26. #define KM_DAMAGE    2
  27. #define KM_PUNCH     3
  28. #define KM_KICK_0    4
  29. #define KM_KICK_1    5
  30. #define KM_TUCKLE    6
  31. #define KM_MOUNT     7
  32. #define KM_MPUNCH    8
  33. #define KM_MOUNTED   9
  34. #define KM_DEF      10
  35.  
  36. #define WV_HIT    0
  37. #define WV_END    1
  38.  
  39.   str prgTitle;
  40.   str dfName, hfName;
  41.  
  42.   int gStatus;
  43.   int trColor;
  44.   int ASX, ASY;
  45.   int ASW, ASH;
  46.   int gageW, gageH;
  47.  
  48.   int buffImage;
  49.   int backImage;
  50.   int backW, backH;
  51.   int blackImage;
  52.  
  53.     // scroll
  54.   int hsVal, vsVal;
  55.   int hsMax, vsMax;
  56.  
  57.   int constX;
  58.   int startX, startY;
  59.  
  60.   int charaSize;
  61.   int C_PW[], C_PH[];
  62.   int winner;
  63.   int isMount;
  64.  
  65.   int objSize;        // painted obj
  66.   int LR;
  67.   int paintOrder[];
  68.   int C_Type[];      //  ...picture index
  69.   int C_Pic[];
  70.   int C_Ene[], C_EneMax[];
  71.   int C_Hakai[];
  72.   int C_AN[];        // current action number
  73.   int C_Koma[];
  74.   int C_X[], C_Y[];
  75.   int C_W[], C_H[];
  76.   int C_sX[], C_sY[];
  77.  
  78.     // koma
  79.   int komaSize;
  80.   int K_sX[], K_sY[];
  81.   int K_W[],  K_H[];
  82.   
  83.     // fkoma
  84.   int F_Pic;
  85.   int fire_On[];
  86.   int F_X[], F_Y[];
  87.   int F_sX[], F_sY[];
  88.   int F_W[], F_H[];
  89.   
  90.   int soundSize;
  91.   int sound[];
  92.   int sound_On;
  93.  
  94.   int device;
  95.  
  96.     // init ---------------------------------------------------------------
  97.   int initGame( int pic ) {
  98.     int i;
  99.     trColor = 0xffffff;
  100.     dfName = "ug.dat";
  101.     readSetting( dfName );
  102.  
  103.     gStatus  = GS_MAIN;
  104.     LR = 0;
  105.     device = 1;
  106.     C_Type[0] = 0; C_Type[1] = 2;
  107.     for ( i = 0; i < 2; i = i + 1 ) {
  108.       F_sX[i] = 0; F_sY[i] = 0; F_W[i] = 70; F_H[i] = 70;
  109.     }
  110.     setFB( 0 );
  111.     winner = 0;
  112.  
  113.     loadRes( pic );
  114.     paintBlackImage( blackImage, ASW, ASH, prgTitle );
  115.   } // method end
  116.  
  117.     // load ---------------------------------------------------------------
  118.   int loadRes( int pic ) {
  119.     int i;
  120.     buffImage  = CreatePic( pic, ASW, ASH );
  121.     backImage  = LoadPic( StrPrint( "back.%s", picExt ) );
  122.     backW      = PicWidth(  backImage );
  123.     backH      = PicHeight( backImage );
  124.     blackImage = CreatePic( pic, ASW, ASH );
  125.     F_Pic      = LoadPic( StrPrint( "beam.%s", picExt ) );
  126.     for ( i = 0; i < soundSize; i = i + 1 ) {
  127.       sound[i] = LoadRsc( StrPrint( "sound%ld.wav", i ) );
  128.     }
  129.   } // method end
  130.  
  131.     // RELEASE ------------------------------------------------------------
  132.   int releaseRes() {
  133.     int i;
  134.     DelPic( buffImage );
  135.     DelPic( backImage );
  136.     DelPic( blackImage );
  137.     DelPic( F_Pic );
  138.     for( i=0; i < soundSize; i=i+1 ){ DelRsc( sound[i] ); }
  139.   } // method end
  140.  
  141.     // bi -----------------------------------------------------------------
  142.   int paintBlackImage( int pic, int w, int h, str string ) {
  143.     int i, j;
  144.     int bx, by, bw, bh;
  145.     int tx, ty;
  146.     bw = w / 10; bh = h / 5;
  147.     SetLineSize(1);
  148.     SetPaintColor( 0x400000 );
  149.     DrawRect( pic, 0, 0, w, h, 0,0 );
  150.     SetPaintColor( 0xffffff );
  151.     for ( i = 0; i < 10; i = i + 1 ) {
  152.       for ( j = 0; j < 5; j = j + 1 ) {
  153.         bx = i * bw + 2; by = j * bh + 2;
  154.         DrawCircle( pic, bx, by, bx + bw - 4, by + bh - 4, 0, 0 );
  155.       }
  156.     }
  157.     tx = ( w / 2 ) - StrLen( string ) * 30 / 2 - 5;
  158.     ty = bh + ( bh / 2 );
  159.     paintBText( pic, tx, ty, 60, 255, 128, 0, string );
  160.   } // method end
  161.  
  162.  
  163.     // start --------------------------------------------------------------
  164.   int startGame( int pic ) {
  165.     int i;
  166.     int c_pic;
  167.     int x, y;
  168.     str string;
  169.  
  170.     gStatus = GS_BUSY;
  171.  
  172.     if ( M_Open == 1 ) { MCI( "play BGM from 0" ); }
  173.       // PICTURE
  174.     for ( i = 0; i < 2; i = i + 1 ) {
  175.       C_Pic[i] = LoadPic( StrPrint( "Chara%ld.%s", C_Type[i], picExt ) );
  176.       C_PW[i]  = PicWidth(  C_Pic[i] );
  177.       C_PH[i]  = PicHeight( C_Pic[i] );
  178.     }
  179.     i = 1;
  180.     c_pic = CreatePic( C_Pic[i], C_PW[i], C_PH[i] );
  181.     ReversePic( C_Pic[i], 0,0, C_PW[i],C_PH[i],  c_pic, 0,0 );
  182.     DelPic( C_Pic[i] ); C_Pic[i] = c_pic;
  183.       // POS
  184.     C_X[0] = backW/2 - ASW/2 + startX;
  185.     C_X[1] = backW/2 + ASW/2 - startX;
  186.     constX = C_X[LR] - ( backW/2 - ASW/2 );
  187.       // INIT PARA
  188.     for ( i = 0; i < 2; i = i + 1 ) {
  189.       readCharaData( dfName, i, C_Type[i] );
  190.       setStandBase( i );
  191.       fire_On[i] = 0;
  192.     }
  193.     objSize = 2; sound_On = -1; winner = -1; isMount = 0;
  194.     updateBI( pic );
  195.     paintGage( pic );
  196.     runGameMes( pic );
  197.  
  198.     string = "KEYDOWN TO START";
  199.     x = ASX + ASW/2 - StrLen( string ) * 15 / 2;
  200.     y = ASY + 30;
  201.     paintBText( pic, x, y, 30, 255,0,0, string );
  202.  
  203.     mes( KEY_DOWN ) {
  204.       mes( TIME ) {  // FOR CLICK INTERVAL
  205.         step( 1 ) { del_us; , gStatus = GS_PLAY; del_me; }
  206.       }
  207.     }
  208.   } // method end
  209.  
  210.     // end ----------------------------------------------------------------
  211.   int endGame( int pic ) {
  212.     int i;
  213.     gStatus = GS_END;
  214.     mes( TIME ) {
  215.       step( 10 ) {
  216.         ,
  217.         for ( i = 0; i < 2; i = i + 1 ){ DelPic( C_Pic[i] ); }
  218.         MovePic( blackImage, 0, 0, ASW, ASH,  pic, ASX, ASY,  2, 20 );
  219.         ,,
  220.         C_Ene[0] = 0; C_Ene[1] = 0;
  221.         paintGage( pic );
  222.         gStatus = GS_MAIN;
  223.         del_me;
  224.       }
  225.     }
  226.   } // method end
  227.  
  228.  
  229.     // engine -------------------------------------------------------------
  230.   int runGameMes( int pic ) {
  231.     int ecn;
  232.     if ( LR == 0 ) { ecn = 1; } else { ecn = 0; }
  233.  
  234.     /*
  235.     mes( LBDOWN ){
  236.       if ( gStatus == GS_PLAY && C_AN[ LR ] <= AN_MOUNT &&
  237.            MesP2 > ASX && MesP2 < ASX + ASW && MesP3 > ASY && MesP3 < ASY + ASH ) {
  238.         MouseDown( LR );
  239.       }
  240.     }
  241.     */
  242.     mes( KEY_DOWN ) {
  243.       if ( gStatus == GS_PLAY && C_AN[ LR ] <= AN_MOUNT ) { KeyDown( LR ); }
  244.     }
  245.  
  246.     runCPU( ecn );
  247.  
  248.     mes( TIME ) {
  249.       if ( gStatus == GS_END || gStatus == GS_DEMO ) { // END ENGINE
  250.         del_us;
  251.         if ( M_Open == 1 ) { MCI( "stop BGM" ); }
  252.         if ( gStatus == GS_DEMO ) { Action_Demo( pic, winner ); } // DEMO
  253.         del_me;
  254.       }
  255.  
  256.       if ( gStatus == GS_PLAY ) { step ( 3 ) { updateBI( pic ); } }
  257.  
  258.       if ( M_Open == 1 ) { // BGM LOOP
  259.         step ( 10 ) { ,
  260.           if ( StrtoInt( StrMCI( "status BGM position" ) ) >= M_length ) {
  261.             MCI( "play BGM from 0" );
  262.           }
  263.         }
  264.       }
  265.     } // mes TIME end
  266.   } // method end
  267.  
  268.  
  269.     // update -------------------------------------------------------------
  270.   int updateBI( int pic ) {
  271.     int i, n;
  272.  
  273.     if ( gStatus != GS_DEMO ) {
  274.       if ( winner == -1 ) { checkBorder(); }
  275.       if ( isMount == 0 ) {
  276.         for ( i = 0; i < objSize; i = i + 1 ) {
  277.           if ( C_AN[i] != AN_WAIT ) { playAction( i, C_AN[i] ); }
  278.         }
  279.       }
  280.       else if ( C_AN[ winner ] != AN_MOUNT ) { playAction( winner, C_AN[ winner ] ); }
  281.     }
  282.  
  283.     setScrollValue( LR );
  284.     MovePic( backImage, hsVal, vsVal, ASW, ASH, buffImage, 0, 0 );
  285.     for ( i = 0; i < objSize; i = i + 1 ) {
  286.       n = paintOrder[i];
  287.       MovePic( C_Pic[n], C_sX[n], C_sY[n], C_W[n], C_H[n],
  288.         buffImage, C_X[n] - hsVal - C_W[n]/2, C_Y[n] - vsVal - C_H[n]/2, 0, trColor );
  289.     }
  290.  
  291.     for ( i = 0; i < 2; i = i + 1 ) {
  292.       if ( fire_On[i] == 1 ) {
  293.         MovePic( F_Pic, F_sX[i], F_sY[i], F_W[i], F_H[i],
  294.           buffImage, F_X[i] - hsVal - F_W[i]/2, F_Y[i] - vsVal - F_H[i]/2, 0, trColor );
  295.       }
  296.       fire_On[i] = 0;
  297.     }
  298.  
  299.     if( sound_On != -1 ){
  300.       paintGage( pic );
  301.       PlayRsc( sound[ sound_On ] );
  302.       sound_On = -1;
  303.     }
  304.  
  305.     MovePic( buffImage, 0, 0, ASW, ASH, pic, ASX, ASY );
  306.   } // method end
  307.  
  308.     // checkBorder --------------------------------------------------------
  309.   int checkBorder() {
  310.     int i;
  311.     if ( C_X[1] - C_X[0] < K_W[ KM_BASE ] * 4 / 5 &&
  312.                           C_AN[0] == AN_WAIT && C_AN[1] == AN_WAIT ) {
  313.       C_AN[0] = AN_MOVE_B; C_AN[1] = AN_MOVE_B;
  314.     }
  315.     if ( C_X[0] < K_W[ KM_BASE ] / 2         && C_AN[0] == AN_WAIT ) {
  316.       C_AN[0] = AN_MOVE_G;
  317.     }
  318.     if ( C_X[1] > backW - K_W[ KM_BASE ] / 2 && C_AN[1] == AN_WAIT ) {
  319.       C_AN[1] = AN_MOVE_G;
  320.     }
  321.   } // method end
  322.  
  323.     // set scroll----------------------------------------------------------
  324.   int setScrollValue( int i ) {
  325.     if ( C_X[i] < constX )                    { hsVal = 0; }
  326.     else if ( constX <= C_X[i] && C_X[i] < backW - ASW + constX )
  327.                                               { hsVal = C_X[i] - constX; }
  328.     else if( backW - ASW + constX <= C_X[i] ) { hsVal = backW - ASW; }
  329.  
  330.     vsVal = 0;
  331.   } // method end
  332.  
  333.     // gage ---------------------------------------------------------------
  334.   int paintGage( int pic ) {
  335.     int elen, x, y; y = 10;
  336.       // LEFT
  337.     if ( C_Ene[0] > 0 ) {
  338.       elen = RealtoInt( InttoReal( C_Ene[0] )
  339.                         / InttoReal( C_EneMax[0] ) * InttoReal( gageW ) );
  340.     }
  341.     else{ elen = 0; }
  342.     if ( elen > gageW ) { elen = gageW; }
  343.     x = ASX;
  344.     paintButton( pic, x + elen,y, gageW - elen, gageH, 0x000000, -2, -2 ); // BLACK
  345.     if ( C_Ene[0] > 0 ){
  346.       paintButton( pic, x,y, elen,gageH, 0xffff00, -2, -2 );
  347.     }
  348.  
  349.      // RIGHT
  350.     if ( C_Ene[1] > 0 ) {
  351.       elen = RealtoInt( InttoReal( C_Ene[1] )
  352.                         / InttoReal( C_EneMax[1] ) * InttoReal( gageW ) );
  353.     }
  354.     else{ elen = 0; }
  355.     if ( elen > gageW ) { elen = gageW; }
  356.     x = ASX +ASW - gageW;
  357.     paintButton( pic, x, y, gageW - elen, gageH, 0x000000, -2, -2 ); // BLACK
  358.     if ( C_Ene[1] > 0 ) {
  359.       paintButton( pic, x + ( gageW-elen ), y, elen, gageH, 0xffff00, -2, -2 );
  360.     }
  361.   } // method end
  362.  
  363.