Rev 7 | Rev 10 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 7 | Rev 9 | ||
---|---|---|---|
Line 155... | Line 155... | ||
155 | game_state = INIT_GAME; |
155 | game_state = INIT_GAME; |
156 | 156 | ||
157 | /* main loop */ |
157 | /* main loop */ |
158 | while (game_state != EXIT) |
158 | while (game_state != EXIT) |
159 | { |
159 | { |
- | 160 | // Pierre-Marie Baty -- intro runs faster |
|
160 | if (game_state != INTRO_MAP) |
161 | if (game_state != INTRO_MAP) |
161 | game_period = sysarg_args_period ? sysarg_args_period : GAME_PERIOD; |
162 | game_period = (sysarg_args_period ? sysarg_args_period : GAME_PERIOD); |
162 | else |
163 | else |
163 | game_period = (sysarg_args_period ? sysarg_args_period : GAME_PERIOD) / 2; |
164 | game_period = (sysarg_args_period ? sysarg_args_period : GAME_PERIOD) / 2; |
164 | 165 | ||
165 | /* timer */ |
166 | /* timer */ |
166 | tmx = tm; tm = sys_gettime (); tmx = tm - tmx; |
167 | tmx = tm; tm = sys_gettime (); tmx = tm - tmx; |
Line 184... | Line 185... | ||
184 | /* frame */ |
185 | /* frame */ |
185 | frame (); |
186 | frame (); |
186 | } |
187 | } |
187 | 188 | ||
188 | freedata (); /* free cached data */ |
189 | freedata (); /* free cached data */ |
- | 190 | } |
|
- | 191 | ||
- | 192 | ||
- | 193 | // Pierre-Marie Baty -- addition: sort high scores |
|
- | 194 | int sort_hscores (const void *q1, const void *q2) |
|
- | 195 | { |
|
- | 196 | return (((hscore_t *) q1)->score < ((hscore_t *) q2)->score); |
|
189 | } |
197 | } |
190 | 198 | ||
191 | 199 | ||
192 | /* |
200 | /* |
193 | * Prepare frame |
201 | * Prepare frame |
Line 368... | Line 376... | ||
368 | if (game_map >= 0x04) |
376 | if (game_map >= 0x04) |
369 | { |
377 | { |
370 | /* reached end of game */ |
378 | /* reached end of game */ |
371 | sysarg_args_map = 0; |
379 | sysarg_args_map = 0; |
372 | sysarg_args_submap = 0; |
380 | sysarg_args_submap = 0; |
- | 381 | sysarg_args_score = 0; |
|
373 | game_state = GAMEOVER; |
382 | game_state = GAMEOVER; |
374 | } |
383 | } |
375 | else |
384 | else |
376 | { |
385 | { |
377 | /* initialize game */ |
386 | /* initialize game */ |
Line 507... | Line 516... | ||
507 | while (i < MAP_NBR_CONNECT && (map_connect[i].submap != game_submap || map_connect[i].dir != RIGHT)) |
516 | while (i < MAP_NBR_CONNECT && (map_connect[i].submap != game_submap || map_connect[i].dir != RIGHT)) |
508 | i++; |
517 | i++; |
509 | map_frow = map_connect[i].rowin - 0x10; |
518 | map_frow = map_connect[i].rowin - 0x10; |
510 | ent_ents[1].y = 0x10 << 3; |
519 | ent_ents[1].y = 0x10 << 3; |
511 | } |
520 | } |
- | 521 | ||
- | 522 | // Pierre-Marie Baty -- addition: start score |
|
- | 523 | if (sysarg_args_score != 0) |
|
- | 524 | game_score = sysarg_args_score + 1; |
|
512 | 525 | ||
513 | ent_ents[1].x = map_maps[game_map].x; |
526 | ent_ents[1].x = map_maps[game_map].x; |
514 | ent_ents[1].y = map_maps[game_map].y; |
527 | ent_ents[1].y = map_maps[game_map].y; |
515 | ent_ents[1].w = 0x18; |
528 | ent_ents[1].w = 0x18; |
516 | ent_ents[1].h = 0x15; |
529 | ent_ents[1].h = 0x15; |
Line 570... | Line 583... | ||
570 | game_rects = r; /* take care to cleanup draw_STATUSRECT->next later! */ |
583 | game_rects = r; /* take care to cleanup draw_STATUSRECT->next later! */ |
571 | 584 | ||
572 | if (!E_RICK_STTST (E_RICK_STZOMBIE)) |
585 | if (!E_RICK_STTST (E_RICK_STZOMBIE)) |
573 | { |
586 | { |
574 | /* need to scroll ? */ |
587 | /* need to scroll ? */ |
575 | if (ent_ents[1].y >= |
588 | if (ent_ents[1].y >= 200 + 4) |
576 | { |
589 | { |
577 | game_state = SCROLL_UP; |
590 | game_state = SCROLL_UP; |
578 | return; |
591 | return; |
579 | } |
592 | } |
580 | if (ent_ents[1].y <= |
593 | if (ent_ents[1].y <= 100 - 4) |
581 | { |
594 | { |
582 | game_state = SCROLL_DOWN; |
595 | game_state = SCROLL_DOWN; |
583 | return; |
596 | return; |
584 | } |
597 | } |
585 | } |
598 | } |
Line 592... | Line 605... | ||
592 | * restart |
605 | * restart |
593 | * |
606 | * |
594 | */ |
607 | */ |
595 | static void restart (void) |
608 | static void restart (void) |
596 | { |
609 | { |
597 | E_RICK_STRST (E_RICK_STDEAD |
610 | E_RICK_STRST (/*E_RICK_STDEAD | E_RICK_STZOMBIE*/ 0xff); // Pierre-Marie Baty -- correct sprite position on restart |
598 | 611 | ||
599 | game_bullets = 6; |
612 | game_bullets = 6; |
600 | game_bombs = 6; |
613 | game_bombs = 6; |
601 | 614 | ||
602 | ent_ents[1].n = 1; |
615 | ent_ents[1].n = 1; |
Line 664... | Line 677... | ||
664 | WAV_ENTITY[4] = syssnd_load ("sounds/ent4.wav"); |
677 | WAV_ENTITY[4] = syssnd_load ("sounds/ent4.wav"); |
665 | WAV_ENTITY[5] = syssnd_load ("sounds/ent5.wav"); |
678 | WAV_ENTITY[5] = syssnd_load ("sounds/ent5.wav"); |
666 | WAV_ENTITY[6] = syssnd_load ("sounds/ent6.wav"); |
679 | WAV_ENTITY[6] = syssnd_load ("sounds/ent6.wav"); |
667 | WAV_ENTITY[7] = syssnd_load ("sounds/ent7.wav"); |
680 | WAV_ENTITY[7] = syssnd_load ("sounds/ent7.wav"); |
668 | WAV_ENTITY[8] = syssnd_load ("sounds/ent8.wav"); |
681 | WAV_ENTITY[8] = syssnd_load ("sounds/ent8.wav"); |
- | 682 | ||
- | 683 | // Pierre-Marie Baty -- addition: load high scores |
|
- | 684 | { |
|
- | 685 | char hiscorefile_fullpathname[1024]; |
|
- | 686 | char linebuf[256]; |
|
- | 687 | hscore_t *hscore; |
|
- | 688 | U32 score; |
|
- | 689 | char *ptr; |
|
- | 690 | size_t i, j; |
|
- | 691 | FILE *fp; |
|
- | 692 | sprintf_s (hiscorefile_fullpathname, 1024, "%s/%s", sys_getbasepath (), "hiscores.txt"); |
|
- | 693 | fopen_s (&fp, hiscorefile_fullpathname, "rb"); |
|
- | 694 | if (fp != NULL) |
|
- | 695 | { |
|
- | 696 | for (i = 0; (fgets (linebuf, sizeof (linebuf), fp) != NULL) && (i < 8);) |
|
- | 697 | { |
|
- | 698 | score = strtol (linebuf, &ptr, 10); |
|
- | 699 | if (ptr <= linebuf) |
|
- | 700 | continue; |
|
- | 701 | while ((*ptr == '\t') || (*ptr == ' ')) |
|
- | 702 | ptr++; |
|
- | 703 | hscore = &game_hscores[i++]; |
|
- | 704 | hscore->score = score; |
|
- | 705 | for (j = 0; j < sizeof (hscore->name); j++) |
|
- | 706 | hscore->name[j] = '@'; |
|
- | 707 | for (j = 0; j < sizeof (hscore->name); j++, ptr++) |
|
- | 708 | hscore->name[j] = (((*ptr >= 'A') && (*ptr <= 'Z')) || (*ptr == '.') ? *ptr : '@'); |
|
- | 709 | } |
|
- | 710 | qsort (game_hscores, 8, sizeof (hscore_t), sort_hscores); |
|
- | 711 | fclose (fp); |
|
- | 712 | } |
|
- | 713 | } |
|
669 | } |
714 | } |
670 | 715 | ||
671 | 716 | ||
672 | /* |
717 | /* |
673 | * |
718 | * |
Line 696... | Line 741... | ||
696 | syssnd_free (WAV_ENTITY[4]); |
741 | syssnd_free (WAV_ENTITY[4]); |
697 | syssnd_free (WAV_ENTITY[5]); |
742 | syssnd_free (WAV_ENTITY[5]); |
698 | syssnd_free (WAV_ENTITY[6]); |
743 | syssnd_free (WAV_ENTITY[6]); |
699 | syssnd_free (WAV_ENTITY[7]); |
744 | syssnd_free (WAV_ENTITY[7]); |
700 | syssnd_free (WAV_ENTITY[8]); |
745 | syssnd_free (WAV_ENTITY[8]); |
- | 746 | ||
- | 747 | // Pierre-Marie Baty -- addition: save high scores |
|
- | 748 | { |
|
- | 749 | char hiscorefile_fullpathname[1024]; |
|
- | 750 | size_t i, j; |
|
- | 751 | FILE *fp; |
|
- | 752 | sprintf_s (hiscorefile_fullpathname, 1024, "%s/%s", sys_getbasepath (), "hiscores.txt"); |
|
- | 753 | fopen_s (&fp, hiscorefile_fullpathname, "wb"); |
|
- | 754 | if (fp != NULL) |
|
- | 755 | { |
|
- | 756 | for (i = 0; i < sizeof (game_hscores) / sizeof (game_hscores[0]); i++) |
|
- | 757 | { |
|
- | 758 | fprintf (fp, "%d\t", game_hscores[i].score); |
|
- | 759 | for (j = 0; j < sizeof (game_hscores[i].name); j++) |
|
- | 760 | fputc ((game_hscores[i].name[j] != '@' ? game_hscores[i].name[j] : ' '), fp); |
|
- | 761 | fputc ('\n', fp); |
|
- | 762 | } |
|
- | 763 | fclose (fp); |
|
- | 764 | } |
|
- | 765 | } |
|
701 | } |
766 | } |