summaryrefslogtreecommitdiff
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/games/sfcave/sfcave.cpp15
1 files changed, 7 insertions, 8 deletions
diff --git a/noncore/games/sfcave/sfcave.cpp b/noncore/games/sfcave/sfcave.cpp
index 5dca427..d5aa38a 100644
--- a/noncore/games/sfcave/sfcave.cpp
+++ b/noncore/games/sfcave/sfcave.cpp
@@ -1,244 +1,243 @@
1#include <stdio.h> 1#include <stdio.h>
2#include <stdlib.h> 2#include <stdlib.h>
3#include <math.h> 3#include <math.h>
4#include <time.h> 4#include <time.h>
5 5
6#include <opie2/oapplicationfactory.h> 6#include <opie2/oapplicationfactory.h>
7#include <qpe/config.h> 7#include <qpe/config.h>
8#include <qpe/global.h>
8 9
9#include <qapplication.h> 10#include <qapplication.h>
10#include <qdir.h> 11#include <qdir.h>
11 12
12#include "helpwindow.h" 13#include "helpwindow.h"
13#include "sfcave.h" 14#include "sfcave.h"
14 15
15#define CAPTION "SFCave 1.13 by AndyQ" 16#define CAPTION "SFCave 1.13 by AndyQ"
16 17
17#define UP_THRUST 0.6 18#define UP_THRUST 0.6
18#define NO_THRUST 0.8 19#define NO_THRUST 0.8
19#define MAX_DOWN_THRUST 4.0 20#define MAX_DOWN_THRUST 4.0
20#define MAX_UP_THRUST -3.5 21#define MAX_UP_THRUST -3.5
21 22
22// States 23// States
23#define STATE_BOSS 0 24#define STATE_BOSS 0
24#define STATE_RUNNING 1 25#define STATE_RUNNING 1
25#define STATE_CRASHING 2 26#define STATE_CRASHING 2
26#define STATE_CRASHED 3 27#define STATE_CRASHED 3
27#define STATE_NEWGAME 4 28#define STATE_NEWGAME 4
28#define STATE_MENU 5 29#define STATE_MENU 5
29#define STATE_REPLAY 6 30#define STATE_REPLAY 6
30 31
31// Menus 32// Menus
32#define MENU_MAIN_MENU 0 33#define MENU_MAIN_MENU 0
33#define MENU_OPTIONS_MENU 1 34#define MENU_OPTIONS_MENU 1
34#define MENU_REPLAY_MENU 2 35#define MENU_REPLAY_MENU 2
35 36
36// Main Menu Options 37// Main Menu Options
37#define MENU_START_GAME 0 38#define MENU_START_GAME 0
38#define MENU_REPLAY 1 39#define MENU_REPLAY 1
39#define MENU_OPTIONS 2 40#define MENU_OPTIONS 2
40#define MENU_HELP 3 41#define MENU_HELP 3
41#define MENU_QUIT 4 42#define MENU_QUIT 4
42 43
43// Option Menu Options 44// Option Menu Options
44#define MENU_GAME_TYPE 0 45#define MENU_GAME_TYPE 0
45#define MENU_GAME_DIFFICULTY 1 46#define MENU_GAME_DIFFICULTY 1
46#define MENU_CLEAR_HIGHSCORES 2 47#define MENU_CLEAR_HIGHSCORES 2
47#define MENU_BACK 3 48#define MENU_BACK 3
48 49
49// Replay Menu Options 50// Replay Menu Options
50#define MENU_REPLAY_START 0 51#define MENU_REPLAY_START 0
51#define MENU_REPLAY_LOAD 1 52#define MENU_REPLAY_LOAD 1
52#define MENU_REPLAY_SAVE 2 53#define MENU_REPLAY_SAVE 2
53#define MENU_REPLAY_BACK 3 54#define MENU_REPLAY_BACK 3
54 55
55 56
56#define NR_GAME_DIFFICULTIES 3 57#define NR_GAME_DIFFICULTIES 3
57#define NR_GAME_TYPES 3 58#define NR_GAME_TYPES 3
58 59
59#define DIFICULTY_EASY 0 60#define DIFICULTY_EASY 0
60#define DIFICULTY_NORMAL 1 61#define DIFICULTY_NORMAL 1
61#define DIFICULTY_HARD 2 62#define DIFICULTY_HARD 2
62#define EASY "Easy" 63#define EASY "Easy"
63#define NORMAL "Normal" 64#define NORMAL "Normal"
64#define HARD "Hard" 65#define HARD "Hard"
65 66
66#define SFCAVE_GAME_TYPE 0 67#define SFCAVE_GAME_TYPE 0
67#define GATES_GAME_TYPE 1 68#define GATES_GAME_TYPE 1
68#define FLY_GAME_TYPE 2 69#define FLY_GAME_TYPE 2
69#define SFCAVE_GAME "SFCave" 70#define SFCAVE_GAME "SFCave"
70#define GATES_GAME "Gates" 71#define GATES_GAME "Gates"
71#define FLY_GAME "Fly" 72#define FLY_GAME "Fly"
72#define CURRENT_GAME_TYPE gameTypes[currentGameType] 73#define CURRENT_GAME_TYPE gameTypes[currentGameType]
73#define CURRENT_GAME_DIFFICULTY difficultyOption[currentGameDifficulty]; 74#define CURRENT_GAME_DIFFICULTY difficultyOption[currentGameDifficulty];
74 75
75QString SFCave::dificultyOption[] = { EASY, NORMAL, HARD }; 76QString SFCave::dificultyOption[] = { EASY, NORMAL, HARD };
76QString SFCave::gameTypes[] = { SFCAVE_GAME, GATES_GAME, FLY_GAME }; 77QString SFCave::gameTypes[] = { SFCAVE_GAME, GATES_GAME, FLY_GAME };
77 78
78QString SFCave::menuOptions[NR_MENUS][MAX_MENU_OPTIONS] = { { "Start Game", "Replays", "Options", "Help", "Quit", "", "", "" }, 79QString SFCave::menuOptions[NR_MENUS][MAX_MENU_OPTIONS] = { { "Start Game", "Replays", "Options", "Help", "Quit", "", "", "" },
79 { "Game Type - %s", "Game Difficulty - %s", "Clear High Scores for this game", "Back", "", "", "", "" }, 80 { "Game Type - %s", "Game Difficulty - %s", "Clear High Scores for this game", "Back", "", "", "", "" },
80 { "Play Reply", "Load Replay", "Save Replay", "Back", "", "", "", "" } }; 81 { "Play Reply", "Load Replay", "Save Replay", "Back", "", "", "", "" } };
81 82
82int SFCave::nrMenuOptions[NR_MENUS] = { 5, 4, 4 }; 83int SFCave::nrMenuOptions[NR_MENUS] = { 5, 4, 4 };
83int SFCave ::currentMenuOption[NR_MENUS] = { 0, 0, 0 }; 84int SFCave ::currentMenuOption[NR_MENUS] = { 0, 0, 0 };
84 85
85#define UP_THRUST 0.6 86#define UP_THRUST 0.6
86#define NO_THRUST 0.8 87#define NO_THRUST 0.8
87#define MAX_DOWN_THRUST 4.0 88#define MAX_DOWN_THRUST 4.0
88#define MAX_UP_THRUST -3.5 89#define MAX_UP_THRUST -3.5
89double SFCave::UpThrustVals[3][3] = {{ 0.6, 0.6, 0.6 }, // SFCave 90double SFCave::UpThrustVals[3][3] = {{ 0.6, 0.6, 0.6 }, // SFCave
90 { 0.6, 0.6, 0.8 }, // Gates 91 { 0.6, 0.6, 0.8 }, // Gates
91 { 0.4, 0.7, 1.0 } }; // Fly 92 { 0.4, 0.7, 1.0 } }; // Fly
92 93
93double SFCave::DownThrustVals[3][3] = {{ 0.8, 0.8, 0.8 }, // SFCave 94double SFCave::DownThrustVals[3][3] = {{ 0.8, 0.8, 0.8 }, // SFCave
94 { 0.8, 0.8, 1.0 }, // Gates 95 { 0.8, 0.8, 1.0 }, // Gates
95 { 0.4, 0.7, 1.0 } }; // Fly 96 { 0.4, 0.7, 1.0 } }; // Fly
96 97
97double SFCave::MaxUpThrustVals[3][3] = {{ -3.5, -3.5, -3.5 }, // SFCave 98double SFCave::MaxUpThrustVals[3][3] = {{ -3.5, -3.5, -3.5 }, // SFCave
98 { -3.5, -4.0, -5.0 }, // Gates 99 { -3.5, -4.0, -5.0 }, // Gates
99 { -3.5, -4.0, -5.0 } }; // Fly 100 { -3.5, -4.0, -5.0 } }; // Fly
100 101
101double SFCave::MaxDownThrustVals[3][3] = {{ 4.0, 4.0, 4.0 }, // SFCave 102double SFCave::MaxDownThrustVals[3][3] = {{ 4.0, 4.0, 4.0 }, // SFCave
102 { 4.0, 5.0, 5.5 }, // Gates 103 { 4.0, 5.0, 5.5 }, // Gates
103 { 3.5, 4.0, 5.0 } }; // Fly 104 { 3.5, 4.0, 5.0 } }; // Fly
104 105
105int SFCave::flyEasyScores[7][3] = { { 0, 10, 5 }, 106int SFCave::flyEasyScores[7][3] = { { 0, 10, 5 },
106 { 10, 20, 3 }, 107 { 10, 20, 3 },
107 { 20, 30, 2 }, 108 { 20, 30, 2 },
108 { 30, 40, 1 }, 109 { 30, 40, 1 },
109 { 50, 70, -2 }, 110 { 50, 70, -2 },
110 { 70, 300, -5 }, 111 { 70, 300, -5 },
111 { -1, -1, -1 } }; 112 { -1, -1, -1 } };
112int SFCave::flyNormalScores[7][3] = { { 0, 10, 5 }, 113int SFCave::flyNormalScores[7][3] = { { 0, 10, 5 },
113 { 10, 20, 3 }, 114 { 10, 20, 3 },
114 { 20, 30, 2 }, 115 { 20, 30, 2 },
115 { 30, 40, 1 }, 116 { 30, 40, 1 },
116 { 50, 70, -2 }, 117 { 50, 70, -2 },
117 { 70, 300, -5 }, 118 { 70, 300, -5 },
118 { -1, -1, -1 } }; 119 { -1, -1, -1 } };
119int SFCave::flyHardScores[7][3] = { { 0, 20, 5 }, 120int SFCave::flyHardScores[7][3] = { { 0, 20, 5 },
120 { 20, 40, 3 }, 121 { 20, 40, 3 },
121 { 40, 100, 1 }, 122 { 40, 100, 1 },
122 { 100, 150, -2 }, 123 { 100, 150, -2 },
123 { 150, 300, -5 }, 124 { 150, 300, -5 },
124 { -1, -1, -1 } }; 125 { -1, -1, -1 } };
125 126
126int SFCave::initialGateGaps[] = { 75, 50, 25 }; 127int SFCave::initialGateGaps[] = { 75, 50, 25 };
127 128
128 129
129#define FLYSCORES( x, y ) (*(flyScores + ((x)*3) + y)) 130#define FLYSCORES( x, y ) (*(flyScores + ((x)*3) + y))
130bool movel; 131bool movel;
131 132
132 133
133OPIE_EXPORT_APP( Opie::Core::OApplicationFactory<SFCave> ) 134OPIE_EXPORT_APP( Opie::Core::OApplicationFactory<SFCave> )
134 135
135SFCave :: SFCave( QWidget *w, const char *name, WFlags fl ) 136SFCave :: SFCave( QWidget *w, const char *name, WFlags fl )
136 : QMainWindow( w, name, fl ) 137 : QMainWindow( w, name, fl )
137 138
138{ 139{
139 showMaximized(); 140 showMaximized();
140 movel = true; 141 movel = true;
141 int spd = 3; 142 int spd = 3;
142 143
143 144
144 replayIt = 0; 145 replayIt = 0;
145 146
146 replayFile = QDir::home().path(); 147 replayFile = Global::applicationFileName("sfcave", "replay");
147 replayFile += "/sfcave.replay";
148 printf( "%s\n", (const char *)replayFile );
149 148
150 sWidth = width(); 149 sWidth = width();
151 sHeight = height(); 150 sHeight = height();
152 segSize = sWidth/(MAPSIZE-1)+1; 151 segSize = sWidth/(MAPSIZE-1)+1;
153 152
154 currentMenuNr = 0; 153 currentMenuNr = 0;
155 currentGameType = 0; 154 currentGameType = 0;
156 currentGameDifficulty = 0; 155 currentGameDifficulty = 0;
157 156
158 setCaption( CAPTION ); 157 setCaption( CAPTION );
159 showScoreZones = false; 158 showScoreZones = false;
160 159
161#ifdef QWS 160#ifdef QWS
162 Config cfg( "sfcave" ); 161 Config cfg( "sfcave" );
163 cfg.setGroup( "settings" ); 162 cfg.setGroup( "settings" );
164 QString key = "highScore_"; 163 QString key = "highScore_";
165 164
166 for ( int i = 0 ; i < 3 ; ++i ) 165 for ( int i = 0 ; i < 3 ; ++i )
167 { 166 {
168 for ( int j = 0 ; j < 3 ; ++j ) 167 for ( int j = 0 ; j < 3 ; ++j )
169 highestScore[i][j] = cfg.readNumEntry( key + gameTypes[i] + "_" + dificultyOption[j], 0 ); 168 highestScore[i][j] = cfg.readNumEntry( key + gameTypes[i] + "_" + dificultyOption[j], 0 );
170 } 169 }
171 170
172 currentGameType = cfg.readNumEntry( "gameType", 0 ); 171 currentGameType = cfg.readNumEntry( "gameType", 0 );
173 currentGameDifficulty = cfg.readNumEntry( "difficulty", 0 ); 172 currentGameDifficulty = cfg.readNumEntry( "difficulty", 0 );
174#endif 173#endif
175 speed = spd; // Change to 2 for PC 174 speed = spd; // Change to 2 for PC
176 press = false; 175 press = false;
177 showEyeCandy = false; 176 showEyeCandy = false;
178 177
179 offscreen = new QPixmap( sWidth, sHeight ); 178 offscreen = new QPixmap( sWidth, sHeight );
180 offscreen->fill( Qt::black ); 179 offscreen->fill( Qt::black );
181 180
182// setUp(); 181// setUp();
183 crashLineLength = -1; 182 crashLineLength = -1;
184 state = STATE_MENU; 183 state = STATE_MENU;
185 prevState = STATE_MENU; 184 prevState = STATE_MENU;
186 185
187 gameTimer = new QTimer( this, "game timer" ); 186 gameTimer = new QTimer( this, "game timer" );
188 connect( gameTimer, SIGNAL( timeout() ), 187 connect( gameTimer, SIGNAL( timeout() ),
189 this, SLOT( run() ) ); 188 this, SLOT( run() ) );
190 189
191 QTimer::singleShot(0, this, SLOT(start())); 190 QTimer::singleShot(0, this, SLOT(start()));
192} 191}
193 192
194SFCave :: ~SFCave() 193SFCave :: ~SFCave()
195{ 194{
196} 195}
197 196
198void SFCave :: start() 197void SFCave :: start()
199{ 198{
200 gameTimer->start( 10 ); 199 gameTimer->start( 10 );
201 200
202} 201}
203 202
204void SFCave :: setSeed( int seed ) 203void SFCave :: setSeed( int seed )
205{ 204{
206 if ( seed == -1 ) 205 if ( seed == -1 )
207 currentSeed = ((unsigned long) time((time_t *) NULL)); 206 currentSeed = ((unsigned long) time((time_t *) NULL));
208 else 207 else
209 currentSeed = seed; 208 currentSeed = seed;
210 PutSeed( currentSeed ); 209 PutSeed( currentSeed );
211} 210}
212 211
213int SFCave :: nextInt( int range ) 212int SFCave :: nextInt( int range )
214{ 213{
215 int val = (int)(Random( ) * range); 214 int val = (int)(Random( ) * range);
216 215
217 return val; 216 return val;
218 217
219} 218}
220 219
221void SFCave :: setUp() 220void SFCave :: setUp()
222{ 221{
223 score = 0; 222 score = 0;
224 offset = 0; 223 offset = 0;
225 nrFrames = 0; 224 nrFrames = 0;
226 dir = 1; 225 dir = 1;
227 thrust = 0; 226 thrust = 0;
228 startScoring = false; 227 startScoring = false;
229 press = false; 228 press = false;
230 229
231 if ( CURRENT_GAME_TYPE == SFCAVE_GAME ) 230 if ( CURRENT_GAME_TYPE == SFCAVE_GAME )
232 { 231 {
233 thrustUp = UpThrustVals[SFCAVE_GAME_TYPE][currentGameDifficulty];; 232 thrustUp = UpThrustVals[SFCAVE_GAME_TYPE][currentGameDifficulty];;
234 noThrust = DownThrustVals[SFCAVE_GAME_TYPE][currentGameDifficulty];; 233 noThrust = DownThrustVals[SFCAVE_GAME_TYPE][currentGameDifficulty];;
235 maxUpThrust = MaxUpThrustVals[SFCAVE_GAME_TYPE][currentGameDifficulty];; 234 maxUpThrust = MaxUpThrustVals[SFCAVE_GAME_TYPE][currentGameDifficulty];;
236 maxDownThrust = MaxDownThrustVals[SFCAVE_GAME_TYPE][currentGameDifficulty];; 235 maxDownThrust = MaxDownThrustVals[SFCAVE_GAME_TYPE][currentGameDifficulty];;
237 236
238 if ( currentGameDifficulty == DIFICULTY_EASY ) 237 if ( currentGameDifficulty == DIFICULTY_EASY )
239 gateDistance = 100; 238 gateDistance = 100;
240 else if ( currentGameDifficulty == DIFICULTY_NORMAL ) 239 else if ( currentGameDifficulty == DIFICULTY_NORMAL )
241 gateDistance = 60; 240 gateDistance = 60;
242 else 241 else
243 gateDistance = 40; 242 gateDistance = 40;
244 } 243 }
@@ -831,272 +830,272 @@ void SFCave :: keyPressEvent( QKeyEvent *e )
831 state = STATE_NEWGAME; 830 state = STATE_NEWGAME;
832 } 831 }
833 832
834 break; 833 break;
835 case Qt::Key_M: 834 case Qt::Key_M:
836 case Qt::Key_Return: 835 case Qt::Key_Return:
837 case Qt::Key_Enter: 836 case Qt::Key_Enter:
838 if ( state == STATE_CRASHED ) 837 if ( state == STATE_CRASHED )
839 { 838 {
840 state = STATE_MENU; 839 state = STATE_MENU;
841 currentMenuNr = 0; 840 currentMenuNr = 0;
842 currentMenuOption[currentMenuNr] = 0; 841 currentMenuOption[currentMenuNr] = 0;
843 } 842 }
844 break; 843 break;
845 844
846 case Qt::Key_Z: 845 case Qt::Key_Z:
847 showScoreZones = !showScoreZones; 846 showScoreZones = !showScoreZones;
848 break; 847 break;
849 848
850 default: 849 default:
851 e->ignore(); 850 e->ignore();
852 break; 851 break;
853 } 852 }
854 } 853 }
855} 854}
856 855
857void SFCave :: keyReleaseEvent( QKeyEvent *e ) 856void SFCave :: keyReleaseEvent( QKeyEvent *e )
858{ 857{
859 if ( state == STATE_MENU ) 858 if ( state == STATE_MENU )
860 { 859 {
861 } 860 }
862 else 861 else
863 { 862 {
864 switch( e->key() ) 863 switch( e->key() )
865 { 864 {
866 case Qt::Key_F9: 865 case Qt::Key_F9:
867 case Qt::Key_Space: 866 case Qt::Key_Space:
868 case Qt::Key_Up: 867 case Qt::Key_Up:
869 if ( state == STATE_RUNNING ) 868 if ( state == STATE_RUNNING )
870 { 869 {
871 if ( !replay && press ) 870 if ( !replay && press )
872 { 871 {
873 press = false; 872 press = false;
874 replayList.append( new int( nrFrames ) ); 873 replayList.append( new int( nrFrames ) );
875 } 874 }
876 } 875 }
877 break; 876 break;
878 877
879 case Qt::Key_E: 878 case Qt::Key_E:
880 showEyeCandy = !showEyeCandy; 879 showEyeCandy = !showEyeCandy;
881 break; 880 break;
882 881
883 case Qt::Key_R: 882 case Qt::Key_R:
884 if ( state == STATE_CRASHED ) 883 if ( state == STATE_CRASHED )
885 state = STATE_REPLAY; 884 state = STATE_REPLAY;
886 break; 885 break;
887 886
888 case Qt::Key_Down: 887 case Qt::Key_Down:
889 if ( state == STATE_CRASHED ) 888 if ( state == STATE_CRASHED )
890 state = STATE_NEWGAME; 889 state = STATE_NEWGAME;
891 break; 890 break;
892 891
893 case Qt::Key_S: 892 case Qt::Key_S:
894 if ( state == STATE_CRASHED ) 893 if ( state == STATE_CRASHED )
895 saveReplay(); 894 saveReplay();
896 break; 895 break;
897 896
898 case Qt::Key_L: 897 case Qt::Key_L:
899 if ( state == STATE_CRASHED ) 898 if ( state == STATE_CRASHED )
900 loadReplay(); 899 loadReplay();
901 break; 900 break;
902 default: 901 default:
903 e->ignore(); 902 e->ignore();
904 break; 903 break;
905 } 904 }
906 } 905 }
907 906
908} 907}
909 908
910 909
911void SFCave :: saveScore() 910void SFCave :: saveScore()
912{ 911{
913#ifdef QWS 912#ifdef QWS
914 Config cfg( "sfcave" ); 913 Config cfg( "sfcave" );
915 cfg.setGroup( "settings" ); 914 cfg.setGroup( "settings" );
916 QString key = "highScore_"; 915 QString key = "highScore_";
917 916
918 cfg.writeEntry( key + gameTypes[currentGameType] + "_" + dificultyOption[currentGameDifficulty], highestScore[currentGameType][currentGameDifficulty] ); 917 cfg.writeEntry( key + gameTypes[currentGameType] + "_" + dificultyOption[currentGameDifficulty], highestScore[currentGameType][currentGameDifficulty] );
919 key += CURRENT_GAME_TYPE; 918 key += CURRENT_GAME_TYPE;
920 cfg.writeEntry( key, highestScore[currentGameType] ); 919 cfg.writeEntry( key, highestScore[currentGameType] );
921#endif 920#endif
922} 921}
923 922
924void SFCave :: saveReplay() 923void SFCave :: saveReplay()
925{ 924{
926 FILE *out; 925 FILE *out;
927 out = fopen( (const char *)replayFile, "w" ); 926 out = fopen( QFile::encodeName(replayFile).data(), "w" );
928 if ( !out ) 927 if ( !out )
929 { 928 {
930 printf( "Couldn't write to /home/root/sfcave.replay\n" ); 929 printf( "Couldn't write to %s\n", QFile::encodeName(replayFile).data() );
931 return; 930 return;
932 } 931 }
933 932
934 // Build up string of values 933 // Build up string of values
935 // Format is:: <landscape seed> <game type> <difficulty> <framenr> <framenr>....... 934 // Format is:: <landscape seed> <game type> <difficulty> <framenr> <framenr>.......
936 QString val; 935 QString val;
937 val.sprintf( "%d %d %d ", currentSeed, currentGameType, currentGameDifficulty ); 936 val.sprintf( "%d %d %d ", currentSeed, currentGameType, currentGameDifficulty );
938 937
939 QListIterator<int> it( replayList ); 938 QListIterator<int> it( replayList );
940 while( it.current() ) 939 while( it.current() )
941 { 940 {
942 QString tmp; 941 QString tmp;
943 tmp.sprintf( "%d ", (*it.current()) ); 942 tmp.sprintf( "%d ", (*it.current()) );
944 val += tmp; 943 val += tmp;
945 944
946 ++it; 945 ++it;
947 } 946 }
948 val += "\n"; 947 val += "\n";
949 948
950 QString line; 949 QString line;
951 line.sprintf( "%d\n", val.length() ); 950 line.sprintf( "%d\n", val.length() );
952 fwrite( (const char *)line, 1, line.length(), out ); 951 fwrite( (const char *)line, 1, line.length(), out );
953 952
954 fwrite( (const char *)val, 1, val.length(), out ); 953 fwrite( (const char *)val, 1, val.length(), out );
955 954
956 fclose( out ); 955 fclose( out );
957 956
958 printf( "Replay saved to %s\n", (const char *)replayFile ); 957 printf( "Replay saved to %s\n", QFile::encodeName(replayFile).data() );
959 958
960} 959}
961 960
962void SFCave :: loadReplay() 961void SFCave :: loadReplay()
963{ 962{
964 FILE *in = fopen( (const char *)replayFile, "r" ); 963 FILE *in = fopen( QFile::encodeName(replayFile).data() , "r" );
965 964
966 if ( in == 0 ) 965 if ( in == 0 )
967 { 966 {
968 printf( "Couldn't load replay file!\n" ); 967 printf( "Couldn't load replay file!\n" );
969 return; 968 return;
970 } 969 }
971 970
972 // Read next line - contains the size of the options 971 // Read next line - contains the size of the options
973 char line[10+1]; 972 char line[10+1];
974 fgets( line, 10, in ); 973 fgets( line, 10, in );
975 974
976 int length = -1; 975 int length = -1;
977 sscanf( line, "%d", &length ); 976 sscanf( line, "%d", &length );
978 char *data = new char[length+1]; 977 char *data = new char[length+1];
979 978
980 fread( data, 1, length, in ); 979 fread( data, 1, length, in );
981// printf( "data - %s", data ); 980// printf( "data - %s", data );
982 981
983 QString sep = " "; 982 QString sep = " ";
984 QStringList list = QStringList::split( sep, QString( data ) ); 983 QStringList list = QStringList::split( sep, QString( data ) );
985 984
986 // print it out 985 // print it out
987 QStringList::Iterator it = list.begin(); 986 QStringList::Iterator it = list.begin();
988 currentSeed = (*it).toInt(); 987 currentSeed = (*it).toInt();
989 ++it; 988 ++it;
990 currentGameType = (*it).toInt(); 989 currentGameType = (*it).toInt();
991 ++it; 990 ++it;
992 currentGameDifficulty = (*it).toInt(); 991 currentGameDifficulty = (*it).toInt();
993 ++it; 992 ++it;
994 993
995 replayList.clear(); 994 replayList.clear();
996 for ( ; it != list.end(); ++it ) 995 for ( ; it != list.end(); ++it )
997 { 996 {
998 int v = (*it).toInt(); 997 int v = (*it).toInt();
999 replayList.append( new int( v ) ); 998 replayList.append( new int( v ) );
1000 } 999 }
1001 1000
1002 delete data; 1001 delete data;
1003 1002
1004 fclose( in ); 1003 fclose( in );
1005 1004
1006 printf( "Replay loaded from %s\n", (const char *)replayFile ); 1005 printf( "Replay loaded from %s\n", QFile::encodeName(replayFile).data() );
1007} 1006}
1008 1007
1009 1008
1010//--------------- MENU CODE --------------------- 1009//--------------- MENU CODE ---------------------
1011void SFCave :: handleMenuKeys( QKeyEvent *e ) 1010void SFCave :: handleMenuKeys( QKeyEvent *e )
1012{ 1011{
1013 switch( e->key() ) 1012 switch( e->key() )
1014 { 1013 {
1015 case Qt::Key_Down: 1014 case Qt::Key_Down:
1016 currentMenuOption[currentMenuNr] ++; 1015 currentMenuOption[currentMenuNr] ++;
1017 if ( menuOptions[currentMenuNr][currentMenuOption[currentMenuNr]] == "" ) 1016 if ( menuOptions[currentMenuNr][currentMenuOption[currentMenuNr]] == "" )
1018 currentMenuOption[currentMenuNr] = 0; 1017 currentMenuOption[currentMenuNr] = 0;
1019 break; 1018 break;
1020 case Qt::Key_Up: 1019 case Qt::Key_Up:
1021 currentMenuOption[currentMenuNr] --; 1020 currentMenuOption[currentMenuNr] --;
1022 if ( currentMenuOption[currentMenuNr] < 0 ) 1021 if ( currentMenuOption[currentMenuNr] < 0 )
1023 currentMenuOption[currentMenuNr] = nrMenuOptions[currentMenuNr]-1; 1022 currentMenuOption[currentMenuNr] = nrMenuOptions[currentMenuNr]-1;
1024 break; 1023 break;
1025 1024
1026 case Qt::Key_Left: 1025 case Qt::Key_Left:
1027 if ( currentMenuNr == MENU_OPTIONS_MENU ) 1026 if ( currentMenuNr == MENU_OPTIONS_MENU )
1028 { 1027 {
1029 if ( currentMenuOption[currentMenuNr] == MENU_GAME_TYPE ) 1028 if ( currentMenuOption[currentMenuNr] == MENU_GAME_TYPE )
1030 { 1029 {
1031 currentGameType --; 1030 currentGameType --;
1032 if ( currentGameType < 0 ) 1031 if ( currentGameType < 0 )
1033 currentGameType = NR_GAME_TYPES - 1; 1032 currentGameType = NR_GAME_TYPES - 1;
1034 } 1033 }
1035 else if ( currentMenuOption[currentMenuNr] == MENU_GAME_DIFFICULTY ) 1034 else if ( currentMenuOption[currentMenuNr] == MENU_GAME_DIFFICULTY )
1036 { 1035 {
1037 currentGameDifficulty --; 1036 currentGameDifficulty --;
1038 if ( currentGameDifficulty < 0 ) 1037 if ( currentGameDifficulty < 0 )
1039 currentGameDifficulty = NR_GAME_DIFFICULTIES - 1; 1038 currentGameDifficulty = NR_GAME_DIFFICULTIES - 1;
1040 } 1039 }
1041 } 1040 }
1042 break; 1041 break;
1043 1042
1044 case Qt::Key_Right: 1043 case Qt::Key_Right:
1045 if ( currentMenuNr == MENU_OPTIONS_MENU ) 1044 if ( currentMenuNr == MENU_OPTIONS_MENU )
1046 { 1045 {
1047 if ( currentMenuOption[currentMenuNr] == MENU_GAME_TYPE ) 1046 if ( currentMenuOption[currentMenuNr] == MENU_GAME_TYPE )
1048 { 1047 {
1049 currentGameType ++; 1048 currentGameType ++;
1050 if ( currentGameType == NR_GAME_TYPES ) 1049 if ( currentGameType == NR_GAME_TYPES )
1051 currentGameType = 0; 1050 currentGameType = 0;
1052 } 1051 }
1053 else if ( currentMenuOption[currentMenuNr] == MENU_GAME_DIFFICULTY ) 1052 else if ( currentMenuOption[currentMenuNr] == MENU_GAME_DIFFICULTY )
1054 { 1053 {
1055 currentGameDifficulty ++; 1054 currentGameDifficulty ++;
1056 if ( currentGameDifficulty == NR_GAME_DIFFICULTIES ) 1055 if ( currentGameDifficulty == NR_GAME_DIFFICULTIES )
1057 currentGameDifficulty = 0; 1056 currentGameDifficulty = 0;
1058 } 1057 }
1059 } 1058 }
1060 break; 1059 break;
1061 1060
1062 case Qt::Key_Space: 1061 case Qt::Key_Space:
1063 case Qt::Key_Return: 1062 case Qt::Key_Return:
1064 case Qt::Key_Enter: 1063 case Qt::Key_Enter:
1065 dealWithMenuSelection(); 1064 dealWithMenuSelection();
1066 break; 1065 break;
1067 } 1066 }
1068} 1067}
1069 1068
1070void SFCave :: displayMenu() 1069void SFCave :: displayMenu()
1071{ 1070{
1072 offscreen->fill( Qt::black ); 1071 offscreen->fill( Qt::black );
1073 1072
1074 QPainter p( offscreen ); 1073 QPainter p( offscreen );
1075 p.setPen( Qt::white ); 1074 p.setPen( Qt::white );
1076 1075
1077 QFont f( "Helvetica", 16 ); 1076 QFont f( "Helvetica", 16 );
1078 p.setFont( f ); 1077 p.setFont( f );
1079 1078
1080 QFontMetrics fm = p.fontMetrics(); 1079 QFontMetrics fm = p.fontMetrics();
1081 1080
1082 QString text = "SFCave"; 1081 QString text = "SFCave";
1083 p.drawText( (sWidth/2) - (fm.width( text )/2), 60, text ); 1082 p.drawText( (sWidth/2) - (fm.width( text )/2), 60, text );
1084 1083
1085 text = "Written by Andy Qua"; 1084 text = "Written by Andy Qua";
1086 p.drawText( (sWidth/2) - (fm.width( text )/2), 85, text ); 1085 p.drawText( (sWidth/2) - (fm.width( text )/2), 85, text );
1087 1086
1088 // Draw options 1087 // Draw options
1089 int pos = 140; 1088 int pos = 140;
1090 for ( int i = 0 ; menuOptions[currentMenuNr][i] != "" ; ++i, pos += 25 ) 1089 for ( int i = 0 ; menuOptions[currentMenuNr][i] != "" ; ++i, pos += 25 )
1091 { 1090 {
1092 if ( currentMenuOption[currentMenuNr] == i ) 1091 if ( currentMenuOption[currentMenuNr] == i )
1093 p.setPen( Qt::yellow ); 1092 p.setPen( Qt::yellow );
1094 else 1093 else
1095 p.setPen( Qt::white ); 1094 p.setPen( Qt::white );
1096 1095
1097 QString text; 1096 QString text;
1098 if ( menuOptions[currentMenuNr][i].find( "%s" ) != -1 ) 1097 if ( menuOptions[currentMenuNr][i].find( "%s" ) != -1 )
1099 { 1098 {
1100 QString val; 1099 QString val;
1101 if ( i == MENU_GAME_TYPE ) 1100 if ( i == MENU_GAME_TYPE )
1102 val = gameTypes[currentGameType]; 1101 val = gameTypes[currentGameType];