1 /* 2 SDLPoP, a port/conversion of the DOS game Prince of Persia. 3 Copyright (C) 2013-2021 Dávid Nagy 4 5 This program is free software: you can redistribute it and/or modify 6 it under the terms of the GNU General Public License as published by 7 the Free Software Foundation, either version 3 of the License, or 8 (at your option) any later version. 9 10 This program is distributed in the hope that it will be useful, 11 but WITHOUT ANY WARRANTY; without even the implied warranty of 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 GNU General Public License for more details. 14 15 You should have received a copy of the GNU General Public License 16 along with this program. If not, see <https://www.gnu.org/licenses/>. 17 18 The authors of this program may be contacted at https://forum.princed.org 19 */ 20 21 // SEG000.C 22 void far pop_main(); 23 void __pascal far init_game_main(); 24 void __pascal far start_game(); 25 int __pascal far process_key(); 26 void __pascal far play_frame(); 27 void __pascal far draw_game_frame(); 28 void __pascal far anim_tile_modif(); 29 void load_sound_names(); 30 void __pascal far load_sounds(int min_sound,int max_sound); 31 void __pascal far load_opt_sounds(int first,int last); 32 void __pascal far load_lev_spr(int level); 33 void __pascal far load_level(); 34 void reset_level_unused_fields(bool loading_clean_level); 35 int __pascal far play_kid_frame(); 36 void __pascal far play_guard_frame(); 37 void __pascal far check_the_end(); 38 void __pascal far check_fall_flo(); 39 void __pascal far read_joyst_control(); 40 void __pascal far draw_kid_hp(short curr_hp,short max_hp); 41 void __pascal far draw_guard_hp(short curr_hp,short max_hp); 42 void __pascal far add_life(); 43 void __pascal far set_health_life(); 44 void __pascal far draw_hp(); 45 void __pascal far do_delta_hp(); 46 void __pascal far play_sound(int sound_id); 47 void __pascal far play_next_sound(); 48 void __pascal far check_sword_vs_sword(); 49 void __pascal far load_chtab_from_file(int chtab_id,int resource,const char near *filename,int palette_bits); 50 void __pascal far free_all_chtabs_from(int first); 51 void __pascal far load_more_opt_graf(const char *filename); 52 int __pascal far do_paused(); 53 void __pascal far read_keyb_control(); 54 void __pascal far copy_screen_rect(const rect_type far *source_rect_ptr); 55 void __pascal far toggle_upside(); 56 void __pascal far feather_fall(); 57 int __pascal far parse_grmode(); 58 void __pascal far gen_palace_wall_colors(); 59 void __pascal far show_title(); 60 void __pascal far transition_ltr(); 61 void __pascal far release_title_images(); 62 void __pascal far draw_full_image(enum full_image_id id); 63 void __pascal far load_kid_sprite(); 64 void __pascal far save_game(); 65 short __pascal far load_game(); 66 void __pascal far clear_screen_and_sounds(); 67 void __pascal far parse_cmdline_sound(); 68 void __pascal far free_optional_sounds(); 69 void free_all_sounds(); 70 void load_all_sounds(); 71 void __pascal far free_optsnd_chtab(); 72 void __pascal far load_title_images(int bgcolor); 73 void __pascal far show_copyprot(int where); 74 void __pascal far show_loading(); 75 void __pascal far show_quotes(); 76 void show_splash(); 77 #ifdef USE_QUICKSAVE 78 void check_quick_op(); 79 void restore_room_after_quick_load(); 80 #endif // USE_QUICKSAVE 81 82 // SEG001.C 83 int __pascal far proc_cutscene_frame(int wait_frames); 84 void __pascal far play_both_seq(); 85 void __pascal far draw_proom_drects(); 86 void __pascal far play_kid_seq(); 87 void __pascal far play_opp_seq(); 88 void __pascal far draw_princess_room_bg(); 89 void __pascal far seqtbl_offset_shad_char(int seq_index); 90 void __pascal far seqtbl_offset_kid_char(int seq_index); 91 void __pascal far init_mouse_cu8(); 92 void __pascal far init_mouse_go(); 93 void __pascal far princess_crouching(); 94 void __pascal far princess_stand(); 95 void __pascal far init_princess_x156(); 96 void __pascal far princess_lying(); 97 void __pascal far init_princess_right(); 98 void __pascal far init_ending_princess(); 99 void __pascal far init_mouse_1(); 100 void __pascal far init_princess(); 101 void __pascal far init_vizier(); 102 void __pascal far init_ending_kid(); 103 void __pascal far cutscene_8(); 104 void __pascal far cutscene_9(); 105 void __pascal far end_sequence_anim(); 106 void __pascal far time_expired(); 107 void __pascal far cutscene_12(); 108 void __pascal far cutscene_4(); 109 void __pascal far cutscene_2_6(); 110 void __pascal far pv_scene(); 111 void __pascal far set_hourglass_state(int state); 112 int __pascal far hourglass_frame(); 113 void __pascal far princess_room_torch(); 114 void __pascal far draw_hourglass(); 115 void __pascal far reset_cutscene(); 116 void __pascal far do_flash(short color); 117 void delay_ticks(Uint32 ticks); 118 void __pascal far remove_flash(); 119 void __pascal far end_sequence(); 120 void __pascal far expired(); 121 void __pascal far load_intro(int which_imgs,void far (*func)(),int free_sounds); 122 void __pascal far draw_star(int which_star,int mark_dirty); 123 void __pascal far show_hof(); 124 void __pascal far hof_write(); 125 void __pascal far hof_read(); 126 void __pascal far show_hof_text(rect_type far *rect,int x_align,int y_align, const char *text); 127 int __pascal far fade_in_1(); 128 int __pascal far fade_out_1(); 129 130 // SEG002.C 131 void __pascal far do_init_shad(const byte *source,int seq_index); 132 void __pascal far get_guard_hp(); 133 void __pascal far check_shadow(); 134 void __pascal far enter_guard(); 135 void __pascal far check_guard_fallout(); 136 void __pascal far leave_guard(); 137 void __pascal far follow_guard(); 138 void __pascal far exit_room(); 139 int __pascal far goto_other_room(short direction); 140 short __pascal far leave_room(); 141 void __pascal far Jaffar_exit(); 142 void __pascal far level3_set_chkp(); 143 void __pascal far sword_disappears(); 144 void __pascal far meet_Jaffar(); 145 void __pascal far play_mirr_mus(); 146 void __pascal far move_0_nothing(); 147 void __pascal far move_1_forward(); 148 void __pascal far move_2_backward(); 149 void __pascal far move_3_up(); 150 void __pascal far move_4_down(); 151 void __pascal far move_up_back(); 152 void __pascal far move_down_back(); 153 void __pascal far move_down_forw(); 154 void __pascal far move_6_shift(); 155 void __pascal far move_7(); 156 void __pascal far autocontrol_opponent(); 157 void __pascal far autocontrol_mouse(); 158 void __pascal far autocontrol_shadow(); 159 void __pascal far autocontrol_skeleton(); 160 void __pascal far autocontrol_Jaffar(); 161 void __pascal far autocontrol_kid(); 162 void __pascal far autocontrol_guard(); 163 void __pascal far autocontrol_guard_inactive(); 164 void __pascal far autocontrol_guard_active(); 165 void __pascal far autocontrol_guard_kid_far(); 166 void __pascal far guard_follows_kid_down(); 167 void __pascal far autocontrol_guard_kid_in_sight(short distance); 168 void __pascal far autocontrol_guard_kid_armed(short distance); 169 void __pascal far guard_advance(); 170 void __pascal far guard_block(); 171 void __pascal far guard_strike(); 172 void __pascal far hurt_by_sword(); 173 void __pascal far check_sword_hurt(); 174 void __pascal far check_sword_hurting(); 175 void __pascal far check_hurting(); 176 void __pascal far check_skel(); 177 void __pascal far do_auto_moves(const auto_move_type *moves_ptr); 178 void __pascal far autocontrol_shadow_level4(); 179 void __pascal far autocontrol_shadow_level5(); 180 void __pascal far autocontrol_shadow_level6(); 181 void __pascal far autocontrol_shadow_level12(); 182 183 // SEG003.C 184 void __pascal far init_game(int level); 185 void __pascal far play_level(int level_number); 186 void __pascal far do_startpos(); 187 void __pascal far set_start_pos(); 188 void __pascal far find_start_level_door(); 189 void __pascal far draw_level_first(); 190 void __pascal far redraw_screen(int drawing_different_room); 191 int __pascal far play_level_2(); 192 void __pascal far redraw_at_char(); 193 void __pascal far redraw_at_char2(); 194 void __pascal far check_knock(); 195 void __pascal far timers(); 196 void __pascal far check_mirror(); 197 void __pascal far jump_through_mirror(); 198 void __pascal far check_mirror_image(); 199 void __pascal far bump_into_opponent(); 200 void __pascal far pos_guards(); 201 void __pascal far check_can_guard_see_kid(); 202 byte __pascal far get_tile_at_kid(int xpos); 203 void __pascal far do_mouse(); 204 int __pascal far flash_if_hurt(); 205 void __pascal far remove_flash_if_hurt(); 206 207 // SEG004.C 208 void __pascal far check_collisions(); 209 void __pascal far move_coll_to_prev(); 210 void __pascal far get_row_collision_data(short row,sbyte *row_coll_room_ptr,byte *row_coll_flags_ptr); 211 int __pascal far get_left_wall_xpos(int room,int column,int row); 212 int __pascal far get_right_wall_xpos(int room,int column,int row); 213 void __pascal far check_bumped(); 214 void __pascal far check_bumped_look_left(); 215 void __pascal far check_bumped_look_right(); 216 int __pascal far is_obstacle_at_col(int tile_col); 217 int __pascal far is_obstacle(); 218 int __pascal far xpos_in_drawn_room(int xpos); 219 void __pascal far bumped(sbyte delta_x,sbyte direction); 220 void __pascal far bumped_fall(); 221 void __pascal far bumped_floor(sbyte direction); 222 void __pascal far bumped_sound(); 223 void __pascal far clear_coll_rooms(); 224 int __pascal far can_bump_into_gate(); 225 int __pascal far get_edge_distance(); 226 void __pascal far check_chomped_kid(); 227 void __pascal far chomped(); 228 void __pascal far check_gate_push(); 229 void __pascal far check_guard_bumped(); 230 void __pascal far check_chomped_guard(); 231 int __pascal far check_chomped_here(); 232 int __pascal far dist_from_wall_forward(byte tiletype); 233 int __pascal far dist_from_wall_behind(byte tiletype); 234 235 // SEG005.C 236 void __pascal far seqtbl_offset_char(short seq_index); 237 void __pascal far seqtbl_offset_opp(int seq_index); 238 void __pascal far do_fall(); 239 void __pascal far land(); 240 void __pascal far spiked(); 241 void __pascal far control(); 242 void __pascal far control_crouched(); 243 void __pascal far control_standing(); 244 void __pascal far up_pressed(); 245 void __pascal far down_pressed(); 246 void __pascal far go_up_leveldoor(); 247 void __pascal far control_turning(); 248 void __pascal far crouch(); 249 void __pascal far back_pressed(); 250 void __pascal far forward_pressed(); 251 void __pascal far control_running(); 252 void __pascal far safe_step(); 253 int __pascal far check_get_item(); 254 void __pascal far get_item(); 255 void __pascal far control_startrun(); 256 void __pascal far control_jumpup(); 257 void __pascal far standing_jump(); 258 void __pascal far check_jump_up(); 259 void __pascal far jump_up_or_grab(); 260 void __pascal far grab_up_no_floor_behind(); 261 void __pascal far jump_up(); 262 void __pascal far control_hanging(); 263 void __pascal far can_climb_up(); 264 void __pascal far hang_fall(); 265 void __pascal far grab_up_with_floor_behind(); 266 void __pascal far run_jump(); 267 void __pascal far back_with_sword(); 268 void __pascal far forward_with_sword(); 269 void __pascal far draw_sword(); 270 void __pascal far control_with_sword(); 271 void __pascal far swordfight(); 272 void __pascal far sword_strike(); 273 void __pascal far parry(); 274 275 // SEG006.C 276 int __pascal far get_tile(int room,int col,int row); 277 int __pascal far find_room_of_tile(); 278 int __pascal far get_tilepos(int tile_col,int tile_row); 279 int __pascal far get_tilepos_nominus(int tile_col,int tile_row); 280 void __pascal far load_fram_det_col(); 281 void __pascal far determine_col(); 282 void __pascal far load_frame(); 283 short __pascal far dx_weight(); 284 int __pascal far char_dx_forward(int delta_x); 285 int __pascal far obj_dx_forward(int delta_x); 286 void __pascal far play_seq(); 287 int __pascal far get_tile_div_mod_m7(int xpos); 288 int __pascal far get_tile_div_mod(int xpos); 289 int __pascal far sub_70B6(int ypos); 290 int __pascal far y_to_row_mod4(int ypos); 291 void __pascal far loadkid(); 292 void __pascal far savekid(); 293 void __pascal far loadshad(); 294 void __pascal far saveshad(); 295 void __pascal far loadkid_and_opp(); 296 void __pascal far savekid_and_opp(); 297 void __pascal far loadshad_and_opp(); 298 void __pascal far saveshad_and_opp(); 299 void __pascal far reset_obj_clip(); 300 void __pascal far x_to_xh_and_xl(int xpos, sbyte *xh_addr, sbyte *xl_addr); 301 void __pascal far fall_accel(); 302 void __pascal far fall_speed(); 303 void __pascal far check_action(); 304 int __pascal far tile_is_floor(int tiletype); 305 void __pascal far check_spiked(); 306 int __pascal far take_hp(int count); 307 int __pascal far get_tile_at_char(); 308 void __pascal far set_char_collision(); 309 void __pascal far check_on_floor(); 310 void __pascal far start_fall(); 311 void __pascal far check_grab(); 312 int __pascal far can_grab_front_above(); 313 void __pascal far in_wall(); 314 int __pascal far get_tile_infrontof_char(); 315 int __pascal far get_tile_infrontof2_char(); 316 int __pascal far get_tile_behind_char(); 317 int __pascal far distance_to_edge_weight(); 318 int __pascal far distance_to_edge(int xpos); 319 void __pascal far fell_out(); 320 void __pascal far play_kid(); 321 void __pascal far control_kid(); 322 void __pascal far do_demo(); 323 void __pascal far play_guard(); 324 void __pascal far user_control(); 325 void __pascal far flip_control_x(); 326 int __pascal far release_arrows(); 327 void __pascal far save_ctrl_1(); 328 void __pascal far rest_ctrl_1(); 329 void __pascal far clear_saved_ctrl(); 330 void __pascal far read_user_control(); 331 int __pascal far can_grab(); 332 int __pascal far wall_type(byte tiletype); 333 int __pascal far get_tile_above_char(); 334 int __pascal far get_tile_behind_above_char(); 335 int __pascal far get_tile_front_above_char(); 336 int __pascal far back_delta_x(int delta_x); 337 void __pascal far do_pickup(int obj_type); 338 void __pascal far check_press(); 339 void __pascal far check_spike_below(); 340 void __pascal far clip_char(); 341 void __pascal far stuck_lower(); 342 void __pascal far set_objtile_at_char(); 343 void __pascal far proc_get_object(); 344 int __pascal far is_dead(); 345 void __pascal far play_death_music(); 346 void __pascal far on_guard_killed(); 347 void __pascal far clear_char(); 348 void __pascal far save_obj(); 349 void __pascal far load_obj(); 350 void __pascal far draw_hurt_splash(); 351 void __pascal far check_killed_shadow(); 352 void __pascal far add_sword_to_objtable(); 353 void __pascal far control_guard_inactive(); 354 int __pascal far char_opp_dist(); 355 void __pascal far inc_curr_row(); 356 357 // SEG007.C 358 void __pascal far process_trobs(); 359 void __pascal far animate_tile(); 360 short __pascal far is_trob_in_drawn_room(); 361 void __pascal far set_redraw_anim_right(); 362 void __pascal far set_redraw_anim_curr(); 363 void __pascal far redraw_at_trob(); 364 void __pascal far redraw_21h(); 365 void __pascal far redraw_11h(); 366 void __pascal far redraw_20h(); 367 void __pascal far draw_trob(); 368 void __pascal far redraw_tile_height(); 369 short __pascal far get_trob_pos_in_drawn_room(); 370 short __pascal far get_trob_right_pos_in_drawn_room(); 371 short __pascal far get_trob_right_above_pos_in_drawn_room(); 372 void __pascal far animate_torch(); 373 void __pascal far animate_potion(); 374 void __pascal far animate_sword(); 375 void __pascal far animate_chomper(); 376 void __pascal far animate_spike(); 377 void __pascal far animate_door(); 378 void __pascal far gate_stop(); 379 void __pascal far animate_leveldoor(); 380 short __pascal far bubble_next_frame(short curr); 381 short __pascal far get_torch_frame(short curr); 382 void __pascal far set_redraw_anim(short tilepos,byte frames); 383 void __pascal far set_redraw2(short tilepos,byte frames); 384 void __pascal far set_redraw_floor_overlay(short tilepos, byte frames); 385 void __pascal far set_redraw_full(short tilepos,byte frames); 386 void __pascal far set_redraw_fore(short tilepos,byte frames); 387 void __pascal far set_wipe(short tilepos,byte frames); 388 void __pascal far start_anim_torch(short room,short tilepos); 389 void __pascal far start_anim_potion(short room,short tilepos); 390 void __pascal far start_anim_sword(short room,short tilepos); 391 void __pascal far start_anim_chomper(short room,short tilepos, byte modifier); 392 void __pascal far start_anim_spike(short room,short tilepos); 393 short __pascal far trigger_gate(short room,short tilepos,short button_type); 394 short __pascal far trigger_1(short target_type,short room,short tilepos,short button_type); 395 void __pascal far do_trigger_list(short index,short button_type); 396 void __pascal far add_trob(byte room,byte tilepos,sbyte type); 397 short __pascal far find_trob(); 398 void __pascal far clear_tile_wipes(); 399 short __pascal far get_doorlink_timer(short index); 400 short __pascal far set_doorlink_timer(short index,byte value); 401 short __pascal far get_doorlink_tile(short index); 402 short __pascal far get_doorlink_next(short index); 403 short __pascal far get_doorlink_room(short index); 404 void __pascal far trigger_button(int playsound,int button_type,int modifier); 405 void __pascal far died_on_button(); 406 void __pascal far animate_button(); 407 void __pascal far start_level_door(short room,short tilepos); 408 void __pascal far animate_empty(); 409 void __pascal far animate_loose(); 410 void __pascal far loose_shake(int arg_0); 411 int __pascal far remove_loose(int room, int tilepos); 412 void __pascal far make_loose_fall(byte modifier); 413 void __pascal far start_chompers(); 414 int __pascal far next_chomper_timing(byte timing); 415 void __pascal far loose_make_shake(); 416 void __pascal far do_knock(int room,int tile_row); 417 void __pascal far add_mob(); 418 short __pascal far get_curr_tile(short tilepos); 419 void __pascal far do_mobs(); 420 void __pascal far move_mob(); 421 void __pascal far move_loose(); 422 void __pascal far loose_land(); 423 void __pascal far loose_fall(); 424 void __pascal far redraw_at_cur_mob(); 425 void __pascal far mob_down_a_row(); 426 void __pascal far draw_mobs(); 427 void __pascal far draw_mob(); 428 void __pascal far add_mob_to_objtable(int ypos); 429 void __pascal far sub_9A8E(); 430 int __pascal far is_spike_harmful(); 431 void __pascal far check_loose_fall_on_kid(); 432 void __pascal far fell_on_your_head(); 433 void __pascal far play_door_sound_if_visible(int sound_id); 434 435 // SEG008.C 436 void __pascal far redraw_room(); 437 void __pascal far load_room_links(); 438 void __pascal far draw_room(); 439 void __pascal far draw_tile(); 440 void __pascal far draw_tile_aboveroom(); 441 void __pascal far redraw_needed(short tilepos); 442 void __pascal far redraw_needed_above(int column); 443 int __pascal far get_tile_to_draw(int room, int column, int row, byte *ptr_tile, byte *ptr_modifier, byte tile_room0); 444 void __pascal far load_curr_and_left_tile(); 445 void __pascal far load_leftroom(); 446 void __pascal far load_rowbelow(); 447 void __pascal far draw_tile_floorright(); 448 int __pascal far can_see_bottomleft(); 449 void __pascal far draw_tile_topright(); 450 void __pascal far draw_tile_anim_topright(); 451 void __pascal far draw_tile_right(); 452 int __pascal far get_spike_frame(byte modifier); 453 void __pascal far draw_tile_anim_right(); 454 void __pascal far draw_tile_bottom(word arg_0); 455 void __pascal far draw_loose(int arg_0); 456 void __pascal far draw_tile_base(); 457 void __pascal far draw_tile_anim(); 458 void __pascal far draw_tile_fore(); 459 int __pascal far get_loose_frame(byte modifier); 460 int __pascal far add_backtable(short chtab_id, int id, sbyte xh, sbyte xl, int ybottom, int blit, byte peel); 461 int __pascal far add_foretable(short chtab_id, int id, sbyte xh, sbyte xl, int ybottom, int blit, byte peel); 462 int __pascal far add_midtable(short chtab_id, int id, sbyte xh, sbyte xl, int ybottom, int blit, byte peel); 463 void __pascal far add_peel(int left,int right,int top,int height); 464 void __pascal far add_wipetable(sbyte layer,short left,short bottom,sbyte height,short width,sbyte color); 465 void __pascal far draw_table(int which_table); 466 void __pascal far draw_wipes(int which); 467 void __pascal far draw_back_fore(int which_table,int index); 468 void __pascal far draw_mid(int index); 469 void __pascal far draw_image(image_type far *image,image_type far *mask,int xpos,int ypos,int blit); 470 void __pascal far draw_wipe(int index); 471 void __pascal far calc_gate_pos(); 472 void __pascal far draw_gate_back(); 473 void __pascal far draw_gate_fore(); 474 void __pascal far alter_mods_allrm(); 475 void __pascal far load_alter_mod(int tile_ix); 476 void __pascal far draw_moving(); 477 void __pascal far redraw_needed_tiles(); 478 void __pascal far draw_tile_wipe(byte height); 479 void __pascal far draw_tables(); 480 void __pascal far restore_peels(); 481 void __pascal far add_drect(rect_type *source); 482 void __pascal far draw_leveldoor(); 483 void __pascal far get_room_address(int room); 484 void __pascal far draw_floor_overlay(); 485 void __pascal far draw_other_overlay(); 486 void __pascal far draw_tile2(); 487 void __pascal far draw_objtable_items_at_tile(byte tilepos); 488 void __pascal far sort_curr_objs(); 489 int __pascal far compare_curr_objs(int index1,int index2); 490 void __pascal far draw_objtable_item(int index); 491 int __pascal far load_obj_from_objtable(int index); 492 void __pascal far draw_people(); 493 void __pascal far draw_kid(); 494 void __pascal far draw_guard(); 495 void __pascal far add_kid_to_objtable(); 496 void __pascal far add_guard_to_objtable(); 497 void __pascal far add_objtable(byte obj_type); 498 void __pascal far mark_obj_tile_redraw(int index); 499 void __pascal far load_frame_to_obj(); 500 void __pascal far show_time(); 501 void __pascal far show_level(); 502 short __pascal far calc_screen_x_coord(short logical_x); 503 void __pascal far free_peels(); 504 void __pascal far display_text_bottom(const char near *text); 505 void __pascal far erase_bottom_text(int arg_0); 506 void __pascal far wall_pattern(int which_part,int which_table); 507 void __pascal far draw_left_mark (word arg3, word arg2, word arg1); 508 void __pascal far draw_right_mark (word arg2, word arg1); 509 image_type* get_image(short chtab_id, int id); 510 511 // SEG009.C 512 void sdlperror(const char* header); 513 bool file_exists(const char* filename); 514 #define locate_file(filename) locate_file_(filename, alloca(POP_MAX_PATH), POP_MAX_PATH) 515 const char* locate_file_(const char* filename, char* path_buffer, int buffer_size); 516 517 #ifdef _WIN32 518 519 FILE* fopen_UTF8(const char* filename, const char* mode); 520 #define fopen fopen_UTF8 521 522 int chdir_UTF8(const char* path); 523 #define chdir chdir_UTF8 524 525 int mkdir_UTF8(const char* path); 526 #define mkdir mkdir_UTF8 527 528 int access_UTF8(const char* filename_UTF8, int mode); 529 #ifdef access 530 #undef access 531 #endif 532 #define access access_UTF8 533 534 int stat_UTF8(const char *filename_UTF8, struct stat *_Stat); 535 // We define a function-like macro, because `stat` is also the name of the type, and we don't want to redefine that. 536 #define stat(filename_UTF8, _Stat) stat_UTF8(filename_UTF8, _Stat) 537 538 #endif //_WIN32 539 540 directory_listing_type* create_directory_listing_and_find_first_file(const char* directory, const char* extension); 541 char* get_current_filename_from_directory_listing(directory_listing_type* data); 542 bool find_next_file(directory_listing_type* data); 543 void close_directory_listing(directory_listing_type* data); 544 int __pascal far read_key(); 545 void __pascal far clear_kbd_buf(); 546 word __pascal far prandom(word max); 547 int __pascal far round_xpos_to_byte(int xpos,int round_direction); 548 void __pascal far show_dialog(const char *text); 549 void __pascal far quit(int exit_code); 550 void __pascal far restore_stuff(); 551 int __pascal far key_test_quit(); 552 const char* __pascal far check_param(const char *param); 553 int __pascal far pop_wait(int timer_index,int time); 554 dat_type *__pascal open_dat(const char *file,int drive); 555 void __pascal far set_loaded_palette(dat_pal_type far *palette_ptr); 556 chtab_type* __pascal load_sprites_from_file(int resource,int palette_bits, int quit_on_error); 557 void __pascal far free_chtab(chtab_type *chtab_ptr); 558 image_type* decode_image(image_data_type* image_data, dat_pal_type* palette); 559 image_type*far __pascal far load_image(int index, dat_pal_type* palette); 560 void __pascal far draw_image_transp(image_type far *image,image_type far *mask,int xpos,int ypos); 561 int __pascal far set_joy_mode(); 562 surface_type far *__pascal make_offscreen_buffer(const rect_type far *rect); 563 void __pascal far free_surface(surface_type *surface); 564 void __pascal far free_peel(peel_type *peel_ptr); 565 void __pascal far set_hc_pal(); 566 void __pascal far flip_not_ega(byte far *memory,int height,int stride); 567 void __pascal far flip_screen(surface_type far *surface); 568 void __pascal far fade_in_2(surface_type near *source_surface,int which_rows); 569 void __pascal far fade_out_2(int rows); 570 void __pascal far draw_image_transp_vga(image_type far *image,int xpos,int ypos); 571 int __pascal far get_line_width(const char far *text,int length); 572 int __pascal far draw_text_character(byte character); 573 void __pascal far draw_rect(const rect_type far *rect,int color); 574 void draw_rect_with_alpha(const rect_type* rect, byte color, byte alpha); 575 void draw_rect_contours(const rect_type* rect, byte color); 576 surface_type far *__pascal rect_sthg(surface_type *surface,const rect_type far *rect); 577 rect_type far *__pascal shrink2_rect(rect_type far *target_rect,const rect_type far *source_rect,int delta_x,int delta_y); 578 void __pascal far set_curr_pos(int xpos,int ypos); 579 void __pascal far restore_peel(peel_type *peel_ptr); 580 peel_type* __pascal far read_peel_from_screen(const rect_type far *rect); 581 void __pascal far show_text(const rect_type far *rect_ptr,int x_align,int y_align,const char far *text); 582 int __pascal far intersect_rect(rect_type far *output,const rect_type far *input1,const rect_type far *input2); 583 rect_type far * __pascal far union_rect(rect_type far *output,const rect_type far *input1,const rect_type far *input2); 584 void __pascal far stop_sounds(); 585 void init_digi(); 586 void __pascal far play_sound_from_buffer(sound_buffer_type far *buffer); 587 void turn_music_on_off(byte new_state); 588 void __pascal far turn_sound_on_off(byte new_state); 589 int __pascal far check_sound_playing(); 590 void apply_aspect_ratio(); 591 void window_resized(); 592 void __pascal far set_gr_mode(byte grmode); 593 SDL_Surface* get_final_surface(); 594 void update_screen(); 595 void __pascal far set_pal_arr(int start,int count,const rgb_type far *array,int vsync); 596 void __pascal far set_pal(int index,int red,int green,int blue,int vsync); 597 int __pascal far add_palette_bits(byte n_colors); 598 void __pascal far process_palette(void *target,dat_pal_type far *source); 599 int __pascal far find_first_pal_row(int which_rows_mask); 600 int __pascal far get_text_color(int cga_color,int low_half,int high_half_mask); 601 void __pascal far close_dat(dat_type far *pointer); 602 void far *__pascal load_from_opendats_alloc(int resource, const char* extension, data_location* out_result, int* out_size); 603 int __pascal far load_from_opendats_to_area(int resource,void far *area,int length, const char* extension); 604 void rect_to_sdlrect(const rect_type* rect, SDL_Rect* sdlrect); 605 void __pascal far method_1_blit_rect(surface_type near *target_surface,surface_type near *source_surface,const rect_type far *target_rect, const rect_type far *source_rect,int blit); 606 image_type far * __pascal far method_3_blit_mono(image_type far *image,int xpos,int ypos,int blitter,byte color); 607 const rect_type far * __pascal far method_5_rect(const rect_type far *rect,int blit,byte color); 608 void draw_rect_with_alpha(const rect_type* rect, byte color, byte alpha); 609 image_type far * __pascal far method_6_blit_img_to_scr(image_type far *image,int xpos,int ypos,int blit); 610 void reset_timer(int timer_index); 611 double get_ticks_per_sec(int timer_index); 612 void set_timer_length(int timer_index, int length); 613 void __pascal start_timer(int timer_index, int length); 614 int __pascal do_wait(int timer_index); 615 void __pascal far init_timer(int frequency); 616 void __pascal far set_clip_rect(const rect_type far *rect); 617 void __pascal far reset_clip_rect(); 618 void __pascal far set_bg_attr(int vga_pal_index,int hc_pal_index); 619 rect_type far *__pascal offset4_rect_add(rect_type far *dest, const rect_type far *source,int d_left,int d_top,int d_right,int d_bottom); 620 int __pascal far input_str(const rect_type far *rect,char *buffer,int max_length,const char *initial,int has_initial,int arg_4,int color,int bgcolor); 621 rect_type far *__pascal offset2_rect(rect_type far *dest, const rect_type far *source,int delta_x,int delta_y); 622 void __pascal far show_text_with_color(const rect_type far *rect_ptr,int x_align,int y_align, const char far *text,int color); 623 void __pascal do_simple_wait(int timer_index); 624 void process_events(); 625 void idle(); 626 void __pascal far init_copyprot_dialog(); 627 dialog_type * __pascal far make_dialog_info(dialog_settings_type *settings, rect_type *dialog_rect, 628 rect_type *text_rect, peel_type *dialog_peel); 629 void __pascal far calc_dialog_peel_rect(dialog_type*dialog); 630 void __pascal far read_dialog_peel(dialog_type *dialog); 631 void __pascal far draw_dialog_frame(dialog_type *dialog); 632 void __pascal far add_dialog_rect(dialog_type *dialog); 633 void __pascal far dialog_method_2_frame(dialog_type *dialog); 634 #ifdef USE_FADE 635 void __pascal far fade_in_2(surface_type near *source_surface,int which_rows); 636 palette_fade_type far *__pascal make_pal_buffer_fadein(surface_type *source_surface,int which_rows,int wait_time); 637 void __pascal far pal_restore_free_fadein(palette_fade_type far *palette_buffer); 638 int __pascal far fade_in_frame(palette_fade_type far *palette_buffer); 639 void __pascal far fade_out_2(int rows); 640 palette_fade_type far *__pascal make_pal_buffer_fadeout(int which_rows,int wait_time); 641 void __pascal far pal_restore_free_fadeout(palette_fade_type far *palette_buffer); 642 int __pascal far fade_out_frame(palette_fade_type far *palette_buffer); 643 void __pascal far read_palette_256(rgb_type far *target); 644 void __pascal far set_pal_256(rgb_type far *source); 645 #endif 646 void set_chtab_palette(chtab_type* chtab, byte* colors, int n_colors); 647 int has_timer_stopped(int index); 648 sound_buffer_type* load_sound(int index); 649 void free_sound(sound_buffer_type far *buffer); 650 651 // SEQTABLE.C 652 void apply_seqtbl_patches(); 653 #ifdef CHECK_SEQTABLE_MATCHES_ORIGINAL 654 void check_seqtable_matches_original(); 655 #endif 656 657 // OPTIONS.C 658 void turn_fixes_and_enhancements_on_off(byte new_state); 659 void turn_custom_options_on_off(byte new_state); 660 void set_options_to_default(); 661 void load_global_options(); 662 void check_mod_param(); 663 void load_mod_options(); 664 int process_rw_write(SDL_RWops* rw, void* data, size_t data_size); 665 int process_rw_read(SDL_RWops* rw, void* data, size_t data_size); 666 void load_dos_exe_modifications(const char* folder_name); 667 668 // REPLAY.C 669 #ifdef USE_REPLAY 670 void start_with_replay_file(const char *filename); 671 void init_record_replay(); 672 void replay_restore_level(); 673 int restore_savestate_from_buffer(); 674 void start_recording(); 675 void add_replay_move(); 676 void stop_recording(); 677 void start_replay(); 678 void end_replay(); 679 void do_replay_move(); 680 int save_recorded_replay_dialog(); 681 int save_recorded_replay(const char* full_filename); 682 void replay_cycle(); 683 int load_replay(); 684 void key_press_while_recording(int* key_ptr); 685 void key_press_while_replaying(int* key_ptr); 686 #endif 687 688 // lighting.c 689 #ifdef USE_LIGHTING 690 void init_lighting(); 691 void redraw_lighting(); 692 void update_lighting(const rect_type far *source_rect_ptr); 693 #endif 694 695 // screenshot.c 696 #ifdef USE_SCREENSHOT 697 void save_screenshot(); 698 void auto_screenshot(); 699 bool want_auto_screenshot(); 700 void init_screenshot(); 701 void save_level_screenshot(bool want_extras); 702 #endif 703 704 // menu.c 705 #ifdef USE_MENU 706 void init_menu(); 707 void menu_scroll(int y); 708 void draw_menu(); 709 void clear_menu_controls(); 710 void process_additional_menu_input(); 711 int key_test_paused_menu(int key); 712 void load_ingame_settings(); 713 void menu_was_closed(); 714 #endif 715 716 // midi.c 717 void stop_midi(); 718 void init_midi(); 719 void midi_callback(void *userdata, Uint8 *stream, int len); 720 void __pascal far play_midi_sound(sound_buffer_type far *buffer); 721