summaryrefslogtreecommitdiff
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/games/sfcave/sfcave.cpp127
-rw-r--r--noncore/games/sfcave/sfcave.h8
2 files changed, 104 insertions, 31 deletions
diff --git a/noncore/games/sfcave/sfcave.cpp b/noncore/games/sfcave/sfcave.cpp
index c1e4532..d6d28b2 100644
--- a/noncore/games/sfcave/sfcave.cpp
+++ b/noncore/games/sfcave/sfcave.cpp
@@ -15,5 +15,5 @@
15#include "sfcave.h" 15#include "sfcave.h"
16 16
17#define CAPTION "SFCave 1.12 by AndyQ" 17#define CAPTION "SFCave 1.13 by AndyQ"
18 18
19#define UP_THRUST 0.6 19#define UP_THRUST 0.6
@@ -105,4 +105,25 @@ double SFCave::MaxDownThrustVals[3][3] = {{ 4.0, 4.0, 4.0 }, // S
105 { 3.5, 4.0, 5.0 } }; // Fly 105 { 3.5, 4.0, 5.0 } }; // Fly
106 106
107int SFCave::flyEasyScores[7][3] = { { 0, 10, 5 },
108 { 10, 20, 3 },
109 { 20, 30, 2 },
110 { 30, 40, 1 },
111 { 50, 70, -2 },
112 { 70, 300, -5 },
113 { -1, -1, -1 } };
114int SFCave::flyNormalScores[7][3] = { { 0, 10, 5 },
115 { 10, 20, 3 },
116 { 20, 30, 2 },
117 { 30, 40, 1 },
118 { 50, 70, -2 },
119 { 70, 300, -5 },
120 { -1, -1, -1 } };
121int SFCave::flyHardScores[7][3] = { { 0, 20, 5 },
122 { 20, 40, 3 },
123 { 40, 100, 1 },
124 { 100, 150, -2 },
125 { 150, 300, -5 },
126 { -1, -1, -1 } };
127
107int SFCave::initialGateGaps[] = { 75, 50, 25 }; 128int SFCave::initialGateGaps[] = { 75, 50, 25 };
108 129
@@ -179,4 +200,5 @@ SFCave :: SFCave( int spd, QWidget *w, char *name )
179 speed = spd; // Change to 2 for PC 200 speed = spd; // Change to 2 for PC
180 press = false; 201 press = false;
202 showEyeCandy = false;
181 203
182 offscreen = new QPixmap( sWidth, sHeight ); 204 offscreen = new QPixmap( sWidth, sHeight );
@@ -227,4 +249,6 @@ void SFCave :: setUp()
227 dir = 1; 249 dir = 1;
228 thrust = 0; 250 thrust = 0;
251 startScoring = false;
252 press = false;
229 253
230 if ( CURRENT_GAME_TYPE == SFCAVE_GAME ) 254 if ( CURRENT_GAME_TYPE == SFCAVE_GAME )
@@ -237,5 +261,5 @@ void SFCave :: setUp()
237 if ( currentGameDifficulty == DIFICULTY_EASY ) 261 if ( currentGameDifficulty == DIFICULTY_EASY )
238 gateDistance = 100; 262 gateDistance = 100;
239 else if ( currentGameDifficulty == DIFICULTY_EASY ) 263 else if ( currentGameDifficulty == DIFICULTY_NORMAL )
240 gateDistance = 60; 264 gateDistance = 60;
241 else 265 else
@@ -257,4 +281,11 @@ void SFCave :: setUp()
257 maxUpThrust = MaxUpThrustVals[FLY_GAME_TYPE][currentGameDifficulty]; 281 maxUpThrust = MaxUpThrustVals[FLY_GAME_TYPE][currentGameDifficulty];
258 maxDownThrust = MaxDownThrustVals[FLY_GAME_TYPE][currentGameDifficulty]; 282 maxDownThrust = MaxDownThrustVals[FLY_GAME_TYPE][currentGameDifficulty];
283
284 if ( currentGameDifficulty == DIFICULTY_EASY )
285 flyScores = flyEasyScores;
286 else if ( currentGameDifficulty == DIFICULTY_NORMAL )
287 flyScores = flyNormalScores;
288 else
289 flyScores = flyHardScores;
259 } 290 }
260 291
@@ -319,4 +350,5 @@ void SFCave :: run()
319 delete replayIt; 350 delete replayIt;
320 replayIt = new QListIterator<int>( replayList ); 351 replayIt = new QListIterator<int>( replayList );
352 break;
321 case STATE_BOSS: 353 case STATE_BOSS:
322 drawBoss(); 354 drawBoss();
@@ -325,4 +357,5 @@ void SFCave :: run()
325 case STATE_CRASHING: 357 case STATE_CRASHING:
326 case STATE_CRASHED: 358 case STATE_CRASHED:
359 press = false;
327 draw(); 360 draw();
328 break; 361 break;
@@ -433,19 +466,29 @@ void SFCave :: handleGameGates()
433void SFCave :: handleGameFly() 466void SFCave :: handleGameFly()
434{ 467{
468 int diff = mapBottom[10] - user.y();
469
435 if ( nrFrames % 4 == 0 ) 470 if ( nrFrames % 4 == 0 )
436 { 471 {
437 // Update score 472 if ( !startScoring )
438 // get distance between landscape and ship 473 {
439 int diff = mapBottom[10] - user.y(); 474 if ( diff < 40 )
440 475 startScoring = true;
441 // the closer the difference is to 0 means more points 476 }
442 if ( diff < 10 ) 477
443 score += 5; 478 if ( startScoring )
444 else if ( diff < 20 ) 479 {
445 score += 3; 480 // Update score
446 else if ( diff < 30 ) 481 // get distance between landscape and ship
447 score += 2; 482
448 else if ( diff < 40 ) 483 // the closer the difference is to 0 means more points
449 score += 1; 484 for ( int i = 0 ; i < 10 && flyScores[i][0] != -1 ; ++i )
485 {
486 if ( flyScores[i][0] <= diff && flyScores[i][1] > diff )
487 {
488 score += flyScores[i][2];
489 break;
490 }
491 }
492 }
450 } 493 }
451 494
@@ -651,9 +694,13 @@ void SFCave :: draw()
651 if ( CURRENT_GAME_TYPE == FLY_GAME && showScoreZones ) 694 if ( CURRENT_GAME_TYPE == FLY_GAME && showScoreZones )
652 { 695 {
653 p.setPen( Qt::red ); 696 p.setPen( Qt::blue );
654 p.drawLine( (i*segSize) - (offset*speed), mapBottom[i]-10, ((i+1)*segSize)-(offset*speed), mapBottom[i+1]-10 ); 697 for ( int j = 1 ; j < 10 && flyScores[j][0] != -1 ; ++j )
655 p.drawLine( (i*segSize) - (offset*speed), mapBottom[i]-20, ((i+1)*segSize)-(offset*speed), mapBottom[i+1]-20 ); 698 {
656 p.drawLine( (i*segSize) - (offset*speed), mapBottom[i]-30, ((i+1)*segSize)-(offset*speed), mapBottom[i+1]-30 ); 699 if ( flyScores[j][2] < 0 )
657 p.drawLine( (i*segSize) - (offset*speed), mapBottom[i]-40, ((i+1)*segSize)-(offset*speed), mapBottom[i+1]-40 ); 700 p.setPen( Qt::red );
701
702 p.drawLine( (i*segSize) - (offset*speed), mapBottom[i]-flyScores[j][0], ((i+1)*segSize)-(offset*speed), mapBottom[i+1]-flyScores[j][0] );
703 }
704
658 p.setPen( Qt::white ); 705 p.setPen( Qt::white );
659 } 706 }
@@ -671,6 +718,11 @@ void SFCave :: draw()
671 for ( int i = 0 ; i < TRAILSIZE ; ++i ) 718 for ( int i = 0 ; i < TRAILSIZE ; ++i )
672 if ( trail[i].x() >= 0 ) 719 if ( trail[i].x() >= 0 )
720 {
721 if ( showEyeCandy )
722 p.setPen( Qt::white.light((int)(100.0-3*(user.x()/100.0)* (user.x()-trail[i].x())) ) );
673 p.drawRect( trail[i].x(), trail[i].y(), 2, 2 ); 723 p.drawRect( trail[i].x(), trail[i].y(), 2, 2 );
724 }
674 725
726 p.setPen( Qt::white );
675 // Draw blocks 727 // Draw blocks
676 for ( int i = 0 ; i < BLOCKSIZE ; ++i ) 728 for ( int i = 0 ; i < BLOCKSIZE ; ++i )
@@ -789,11 +841,18 @@ void SFCave :: keyPressEvent( QKeyEvent *e )
789 case Qt::Key_F9: 841 case Qt::Key_F9:
790 case Qt::Key_Space: 842 case Qt::Key_Space:
791 if ( state == STATE_RUNNING && !replay && !press ) 843 if ( state == STATE_RUNNING )
792 { 844 {
793 press = true; 845 if ( !replay && !press )
794 replayList.append( new int( nrFrames ) ); 846 {
847 press = true;
848 replayList.append( new int( nrFrames ) );
849 }
795 } 850 }
796 else if ( state == STATE_CRASHED && e->key() == Key_Up ) 851 else if ( state == STATE_CRASHED )
797 state = STATE_NEWGAME; 852 {
853 if ( e->key() == Key_Up )
854 state = STATE_NEWGAME;
855 }
856
798 break; 857 break;
799 case Qt::Key_M: 858 case Qt::Key_M:
@@ -831,15 +890,21 @@ void SFCave :: keyReleaseEvent( QKeyEvent *e )
831 case Qt::Key_Space: 890 case Qt::Key_Space:
832 case Qt::Key_Up: 891 case Qt::Key_Up:
833 press = false; 892 if ( state == STATE_RUNNING )
834 if ( state == STATE_RUNNING && !replay && press ) 893 {
835 replayList.append( new int( nrFrames ) ); 894 if ( !replay && press )
836 895 {
896 press = false;
897 replayList.append( new int( nrFrames ) );
898 }
899 }
837 break; 900 break;
838 901
902 case Qt::Key_E:
903 showEyeCandy = !showEyeCandy;
904 break;
905
839 case Qt::Key_R: 906 case Qt::Key_R:
840 if ( state == STATE_CRASHED ) 907 if ( state == STATE_CRASHED )
841 {
842 state = STATE_REPLAY; 908 state = STATE_REPLAY;
843 }
844 break; 909 break;
845 910
diff --git a/noncore/games/sfcave/sfcave.h b/noncore/games/sfcave/sfcave.h
index 65e5ae4..f95558d 100644
--- a/noncore/games/sfcave/sfcave.h
+++ b/noncore/games/sfcave/sfcave.h
@@ -39,4 +39,6 @@ public:
39 int speed; 39 int speed;
40 int crashLineLength; 40 int crashLineLength;
41 bool startScoring;
42 bool showEyeCandy;
41 43
42 static double UpThrustVals[3][3]; 44 static double UpThrustVals[3][3];
@@ -45,4 +47,10 @@ public:
45 static double MaxDownThrustVals[3][3]; 47 static double MaxDownThrustVals[3][3];
46 static int initialGateGaps[]; 48 static int initialGateGaps[];
49
50 static int flyEasyScores[7][3];
51 static int flyNormalScores[7][3];
52 static int flyHardScores[7][3];
53 int flyScores[7][3];
54
47 55
48 double thrustUp; 56 double thrustUp;