@@ -22,6 +22,7 @@ uint16_t currentRadius = LIGHT_RADIUS;
22
22
23
23
24
24
void render_scene (const Maze * maze , const Asset * asset , const bool isFOVShown );
25
+ void game_start (Maze * mz , int * _optIdx , int * _mazeIdx );
25
26
void debug_pos (Position pos );
26
27
void update_pos (Position * des , Direction dir );
27
28
void handle_collision (ItemMeta * item , Maze * maze , Player * player );
@@ -97,8 +98,9 @@ void game_enter() {
97
98
char * opts [] = {"Start" , "Choose Level" , "How To Play?" , "Exit" };
98
99
int optSz = sizeof (opts ) / sizeof (opts [0 ]);
99
100
100
- int optIdx = -1 ;
101
+ int optIdx = -1 , mazeIdx = 1 ;
101
102
while (1 ) {
103
+ str_debug_num (optIdx );
102
104
if (optIdx == -1 ) {
103
105
drawMenu (menuPosX , menuPosY , yOffset , opts ,
104
106
optSz , MENU_FOREGND , MENU_BACKGND , true);
@@ -109,11 +111,11 @@ void game_enter() {
109
111
}
110
112
111
113
switch (optIdx ) {
112
- case 0 : //start
113
- game_start (mazes [3 - 1 ], & optIdx );
114
- uart_puts ("> optIdx:" ); uart_dec (optIdx ); uart_puts ("\n" );
114
+ case 0 : {
115
+ game_start (mazes [mazeIdx ], & optIdx , & mazeIdx );
116
+ uart_puts ("> optIdx:" ); uart_dec (optIdx ); uart_puts (", maze level: " ); uart_dec ( mazeIdx ); uart_puts ( " \n" );
115
117
break ;
116
-
118
+ }
117
119
case 1 : //continue
118
120
optIdx = -1 ;
119
121
game_continue ();
@@ -150,7 +152,7 @@ int game_menu_enter() {
150
152
}
151
153
152
154
153
- void game_start (Maze * mz , int * _optIdx ){
155
+ void game_start (Maze * mz , int * _optIdx , int * _mazeIdx ){
154
156
uart_puts ("Starting Game...\n" );
155
157
bool isFOVShown = true;
156
158
Player * pl = mz -> player ;
@@ -164,7 +166,6 @@ void game_start(Maze *mz, int *_optIdx){
164
166
curDarken = 1 ;
165
167
currentRadius = LIGHT_RADIUS ;
166
168
getMazePathColor (mz );
167
- // TODO: reset item status
168
169
for (int i = 0 ; i < mz -> itemMetasSz ; i ++ ){
169
170
ItemMeta * meta = mz -> itemMetas [i ];
170
171
meta -> collided = false;
@@ -197,17 +198,18 @@ void game_start(Maze *mz, int *_optIdx){
197
198
debug_pos (* (pl -> pos ));
198
199
199
200
// DEBUG / screen shading
200
- if (c == 'o' ){
201
- adjustBrightness (mz , pl -> asset , true);
202
- }
203
- else if (c == 'p' ){
204
- adjustBrightness (mz , pl -> asset , false);
205
- }
206
- else if (c == 'k' ) {
207
- isFOVShown = !isFOVShown ;
208
- render_scene (mz , pl -> asset , isFOVShown );
209
- }
210
- else if (c == 27 ) { // game menu
201
+ // if(c == 'o'){
202
+ // adjustBrightness(mz, pl->asset, true);
203
+ // }
204
+ // else if(c == 'p'){
205
+ // adjustBrightness(mz, pl->asset, false);
206
+ // }
207
+ // else if (c == 'k') {
208
+ // isFOVShown = !isFOVShown;
209
+ // render_scene(mz, pl->asset, isFOVShown);
210
+ // }
211
+ if (c == 27 ) {
212
+ // pause menu
211
213
int game_stage = game_menu_enter ();
212
214
switch (game_stage ) {
213
215
case 0 :
@@ -219,9 +221,9 @@ void game_start(Maze *mz, int *_optIdx){
219
221
MENU_BACKGROUND_SIZE , bitmap_menu_background );
220
222
return ;
221
223
}
222
- // str_debug_num(game_stage);
223
224
}
224
225
else if (c == 'q' ){
226
+ // explode wall with bomb
225
227
effect_bomb (mz , pl );
226
228
}
227
229
else {
@@ -250,7 +252,22 @@ void game_start(Maze *mz, int *_optIdx){
250
252
update_pos (pl -> pos , dir );
251
253
ItemMeta * collidedItem = detect_collision (* (pl -> pos ), mz -> itemMetas , mz -> itemMetasSz );
252
254
drawMovement (mz , pl -> asset , dir , collidedItem );
253
-
255
+
256
+ // detect end of maze
257
+ if (pl -> pos -> posX % MAZE_SZ_CELL == MAZE_SZ_CELL - 1 ) {
258
+ str_debug ("end of maze reached!" );
259
+ drawLevelTransitionText (* (_mazeIdx ) + 1 );
260
+ * _optIdx = (* (_mazeIdx ) == 2 ) ? -1 : 0 ;
261
+ * _mazeIdx = (* (_mazeIdx ) + 1 ) % 3 ;
262
+
263
+ while (uart_getc () != '\n' );
264
+ if (* (_mazeIdx ) == 0 ) {
265
+ clearScreen ();
266
+ framebf_drawImg (0 , 0 , MENU_BACKGROUND_SIZE , MENU_BACKGROUND_SIZE , bitmap_menu_background );
267
+ }
268
+ return ;
269
+ }
270
+
254
271
// darken screen interval + game over
255
272
pl -> step += 1 ;
256
273
if (pl -> step % 7 == 0 ) {
@@ -328,12 +345,12 @@ void game_help() {
328
345
void game_exit () {
329
346
clearScreen ();
330
347
uart_puts ("Exiting game...\n" );
331
- font_drawString (150 , 150 , "Ta reng Ta reng Ta reng " , MENU_FOREGND , 2 , 1 );
348
+ font_drawString (150 , 150 , "Thank you for playing <3 " , MENU_FOREGND , 2 , 1 );
332
349
}
333
350
334
351
335
352
void game_over (int * _optIdx ) {
336
- str_debug ("game over :(" );
353
+ str_debug ("Game Over :(" );
337
354
wait_msec (1000000 );
338
355
clearScreen ();
339
356
0 commit comments