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