// seg001:0C94 void __pascal far expired() { if (!demo_mode) { if(offscreen_surface) free_surface(offscreen_surface); // missing in original offscreen_surface = NULL; clear_screen_and_sounds(); offscreen_surface = make_offscreen_buffer(&screen_rect); load_intro(1, &time_expired, 1); } start_level = 0; start_game(); }
// seg000:0358 void __pascal far start_game() { #ifdef USE_COPYPROT word which_entry; word pos; word entry_used[40]; byte letts_used[26]; #endif screen_updates_suspended = 0; // Prevent filling of stack. // start_game is called from many places to restart the game, for example: // process_key, play_frame, draw_game_frame, play_level, control_kid, end_sequence, expired if (first_start) { first_start = 0; setjmp(/*&*/setjmp_buf); } else { draw_rect(&screen_rect, 0); show_quotes(); clear_screen_and_sounds(); longjmp(/*&*/setjmp_buf,-1); } release_title_images(); // added free_optsnd_chtab(); // added #ifdef USE_COPYPROT copyprot_plac = prandom(13); memset(&entry_used, 0, sizeof(entry_used)); memset(&letts_used, 0, sizeof(letts_used)); for (pos = 0; pos < 14; ++pos) { do { if (pos == copyprot_plac) { which_entry = copyprot_idx = prandom(39); } else { which_entry = prandom(39); } } while (entry_used[which_entry] || letts_used[copyprot_letter[which_entry]-'A']); cplevel_entr[pos] = which_entry; entry_used[which_entry] = 1; letts_used[copyprot_letter[which_entry]-'A'] = 1; } #endif if (start_level == 0) { show_title(); } else { init_game(start_level); } }
// seg001:09D7 void __pascal far end_sequence() { peel_type* peel; short bgcolor; short color; rect_type rect; short hof_index; short i; color = 0; bgcolor = 15; load_intro(1, &end_sequence_anim, 1); clear_screen_and_sounds(); load_opt_sounds(sound_56_ending_music, sound_56_ending_music); // winning theme play_sound_from_buffer(sound_pointers[sound_56_ending_music]); // winning theme if(offscreen_surface) free_surface(offscreen_surface); // missing in original offscreen_surface = make_offscreen_buffer(&screen_rect); load_title_images(0); current_target_surface = offscreen_surface; draw_image_2(0 /*story frame*/, chtab_title40, 0, 0, 0); draw_image_2(3 /*The tyrant Jaffar*/, chtab_title40, 24, 25, get_text_color(15, color_15_brightwhite, 0x800)); fade_in_2(offscreen_surface, 0x800); pop_wait(timer_0, 900); start_timer(timer_0, 240); draw_image_2(0 /*main title image*/, chtab_title50, 0, 0, 0); transition_ltr(); do_wait(timer_0); for (hof_index = 0; hof_index < hof_count; ++hof_index) { if (hof[hof_index].min < rem_min || (hof[hof_index].min == rem_min && hof[hof_index].tick < rem_tick) ) break; } if (hof_index < MAX_HOF_COUNT && hof_index <= hof_count) { fade_out_2(0x1000); for (i = 5; hof_index + 1 <= i; --i) { hof[i] = hof[i - 1]; } hof[i].name[0] = 0; hof[i].min = rem_min; hof[i].tick = rem_tick; if (hof_count < MAX_HOF_COUNT) { ++hof_count; } draw_image_2(0 /*story frame*/, chtab_title40, 0, 0, 0); draw_image_2(3 /*Prince Of Persia*/, chtab_title50, 24, 24, blitters_10h_transp); show_hof(); offset4_rect_add(&rect, &hof_rects[hof_index], -4, -1, -40, -1); peel = read_peel_from_screen(&rect); if (graphics_mode == gmMcgaVga) { color = 0xBE; bgcolor = 0xB7; } draw_rect(&rect, bgcolor); fade_in_2(offscreen_surface, 0x1800); current_target_surface = onscreen_surface_; while(input_str(&rect, hof[hof_index].name, 24, "", 0, 4, color, bgcolor) <= 0); restore_peel(peel); show_hof_text(&hof_rects[hof_index], -1, 0, hof[hof_index].name); hof_write(); pop_wait(timer_0, 120); current_target_surface = offscreen_surface; draw_image_2(0 /*main title image*/, chtab_title50, 0, 0, blitters_0_no_transp); transition_ltr(); } while (check_sound_playing() && !key_test_quit()) idle(); fade_out_2(0x1000); start_level = 0; start_game(); }