Subversion Repositories Games.Prince of Persia

Rev

Rev 1 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1. /*
  2. SDLPoP, a port/conversion of the DOS game Prince of Persia.
  3. Copyright (C) 2013-2018  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 <http://www.gnu.org/licenses/>.
  17.  
  18. The authors of this program may be contacted at http://forum.princed.org
  19. */
  20.  
  21. #ifndef DATA_H
  22. #define DATA_H
  23.  
  24. #ifdef BODY
  25. // If included from data.c: definitions (without extern and with initialization).
  26. #define INIT(...) __VA_ARGS__
  27. #define extern
  28. #else
  29. // Otherwise: just declarations (with extern and without initialization).
  30. #define INIT(...)
  31. #undef extern
  32. #endif
  33.  
  34. // data:5F8A
  35. extern word text_time_remaining;
  36. // data:4C56
  37. extern word text_time_total;
  38. // data:431C
  39. extern word is_show_time;
  40. // data:4C6E
  41. extern word checkpoint;
  42. // data:4E92
  43. extern word upside_down;
  44. // data:3D36
  45. extern word resurrect_time;
  46. // data:42B4
  47. extern word dont_reset_time;
  48. // data:4F7E
  49. extern short rem_min;
  50. // data:4F82
  51. extern word rem_tick;
  52. // data:4608
  53. extern word hitp_beg_lev;
  54. // data:4CAA
  55. extern word need_level1_music;
  56. // data:4380
  57. extern surface_type* offscreen_surface;
  58.  
  59. // data:31E5
  60. extern byte sound_flags INIT(= 0);
  61. // data:295E
  62. extern const rect_type screen_rect INIT(= {0, 0, 200, 320});
  63. // data:3D12
  64. extern word draw_mode;
  65. // data:42B8
  66. extern short start_level INIT(= -1);
  67. // data:4CE6
  68. extern byte * guard_palettes;
  69. // data:4338
  70. extern chtab_type *chtab_addrs[10];
  71.  
  72.  
  73. #ifdef USE_COPYPROT
  74. // data:4356
  75. extern word copyprot_plac;
  76. // data:3D16
  77. extern word copyprot_idx;
  78. // data:01CA
  79. extern const char copyprot_letter[] INIT(= {'A','A','B','B','C','C','D','D','E','F','F','G','H','H','I','I','J','J','K','L','L','M','M','N','O','O','P','P','R','R','S','S','T','T','U','U','V','Y','W','Y'});
  80. // data:4620
  81. extern word cplevel_entr[14];
  82. #endif
  83. // data:46C6
  84. extern dialog_type* copyprot_dialog;
  85. // data:2944
  86. extern dialog_settings_type dialog_settings
  87.         INIT(= {
  88.                 add_dialog_rect,
  89.                 dialog_method_2_frame,
  90.                 4, 4, 4, 4, 3, 4, 1
  91.         });
  92. // data:2B76
  93. extern rect_type dialog_rect_1 INIT(= {60, 56, 124, 264});
  94. // data:2B7E
  95. extern rect_type dialog_rect_2 INIT(= {61, 56, 120, 264});
  96.  
  97. // data:409E
  98. extern word drawn_room;
  99.  
  100.  
  101. // data:4CCD
  102. extern byte curr_tile;
  103. // data:4328
  104. extern byte curr_modifier;
  105.  
  106.  
  107. // data:4CD8
  108. extern tile_and_mod leftroom_[3];
  109. // data:5950
  110. extern tile_and_mod row_below_left_[10];
  111. // data:2274
  112. extern const word tbl_line[] INIT(= {0, 10, 20});
  113.  
  114. // data:5966
  115. extern word loaded_room;
  116. // data:658A
  117. extern byte* curr_room_tiles;
  118. // data:5F88
  119. extern byte* curr_room_modif;
  120. // data:5968
  121. extern word draw_xh;
  122.  
  123. // data:02B2
  124. extern /*const*/ byte tbl_level_type[16] INIT(= {0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 0});
  125. // 1.3
  126. extern /*const*/ word tbl_level_color[16] INIT(= {0, 0, 0, 1, 0, 0, 0, 1, 2, 2, 0, 0, 3, 3, 4, 0});
  127. // data:0F9E
  128. extern word current_level INIT(= -1);
  129. // data:3021
  130. extern byte graphics_mode INIT(= 0);
  131. // data:2BA6
  132. extern rgb_type vga_palette[16] INIT(= {
  133.         {0x00, 0x00, 0x00},
  134.         {0x00, 0x00, 0x2A},
  135.         {0x00, 0x2A, 0x00},
  136.         {0x00, 0x2A, 0x2A},
  137.         {0x2A, 0x00, 0x00},
  138.         {0x2A, 0x00, 0x2A},
  139.         {0x2A, 0x15, 0x00},
  140.         {0x2A, 0x2A, 0x2A},
  141.         {0x15, 0x15, 0x15},
  142.         {0x15, 0x15, 0x3F},
  143.         {0x15, 0x3F, 0x15},
  144.         {0x15, 0x3F, 0x3F},
  145.         {0x3F, 0x15, 0x15},
  146.         {0x3F, 0x15, 0x3F},
  147.         {0x3F, 0x3F, 0x15},
  148.         {0x3F, 0x3F, 0x3F},
  149. });
  150.  
  151. // data:4CC0
  152. extern word room_L;
  153. // data:4CCE
  154. extern word room_R;
  155. // data:4C90
  156. extern word room_A;
  157. // data:4C96
  158. extern word room_B;
  159. // data:461A
  160. extern word room_BR;
  161. // data:43FE
  162. extern word room_BL;
  163. // data:4614
  164. extern word room_AR;
  165. // data:43DE
  166. extern word room_AL;
  167.  
  168. // data:4F84
  169. extern level_type level;
  170.  
  171.  
  172. // data:42AA
  173. extern short table_counts[5];
  174. #define backtable_count table_counts[0]
  175. #define foretable_count table_counts[1]
  176. #define wipetable_count table_counts[2]
  177. #define  midtable_count table_counts[3]
  178. #define  objtable_count table_counts[4]
  179. // data:4D7E
  180. extern short drects_count;
  181. // data:434E
  182. extern short peels_count;
  183.  
  184.  
  185. // data:5FF4
  186. extern back_table_type foretable[200];
  187. // data:463C
  188. extern back_table_type backtable[200];
  189. // data:3D38
  190. extern midtable_type midtable[50];
  191. // data:5F1E
  192. extern peel_type* peels_table[50];
  193. // data:4D9A
  194. extern rect_type drects[30];
  195.  
  196. // data:4CB8
  197. extern sbyte obj_direction;
  198. // data:2588
  199. extern const byte chtab_flip_clip[10] INIT(= {1,0,1,1,1,1,0,0,0,0});
  200. // data:42A6
  201. extern short obj_clip_left;
  202. // data:42C6
  203. extern short obj_clip_top;
  204. // data:42C0
  205. extern short obj_clip_right;
  206. // data:4082
  207. extern short obj_clip_bottom;
  208. // data:34D2
  209. extern wipetable_type wipetable[300];
  210. // data:2592
  211. extern const byte chtab_shift[10] INIT(= {0,1,0,0,0,0,1,1,1,0});
  212. // data:4354
  213. extern word need_drects;
  214. // data:4CC2
  215. extern word is_blind_mode;
  216.  
  217. // data:0F86
  218. extern const rect_type rect_top INIT(= {0, 0, 192, 320});
  219. // data:0F96
  220. extern const rect_type rect_bottom_text INIT(= {193, 70, 202, 250});
  221.  
  222. // data:4CB2
  223. extern word leveldoor_right;
  224. // data:4058
  225. extern word leveldoor_ybottom;
  226.  
  227.  
  228. // data:4CFA
  229. extern byte palace_wall_colors[44*3];
  230.  
  231. // data:2942
  232. extern word seed_was_init INIT(= 0);
  233. // data:4084
  234. extern dword random_seed;
  235.  
  236.  
  237. // data:3010
  238. extern surface_type* current_target_surface INIT(= NULL);
  239.  
  240. // data:4C5C
  241. extern byte* doorlink2_ad;
  242. // data:4C5A
  243. extern byte* doorlink1_ad;
  244.  
  245.  
  246.  
  247. // data:4CC6
  248. extern sbyte control_shift;
  249. // data:461C
  250. extern sbyte control_y;
  251. // data:4612
  252. extern sbyte control_x;
  253.  
  254. #ifdef USE_FADE
  255. // data:4CCA
  256. extern word is_global_fading;
  257. // data:4400
  258. extern palette_fade_type* fade_palette_buffer;
  259. #endif
  260. // data:4358
  261. extern char_type Kid;
  262. // data:295C
  263. extern word is_keyboard_mode INIT(= 0);
  264. // data:4E8A
  265. extern word is_paused;
  266. // data:42D0
  267. extern word is_restart_level;
  268. // data:31E4
  269. extern byte sound_mode INIT(= 0);
  270. // data:42C8
  271. extern word is_joyst_mode;
  272. // data:31E7
  273. extern byte is_sound_on INIT(= 0x0F);
  274. // data:3D18
  275. extern word next_level;
  276. #ifdef USE_COPYPROT
  277. // data:009E
  278. extern word copyprot_level INIT(= 2);
  279. #endif
  280. // data:4C4A
  281. extern short guardhp_delta;
  282. // data:596A
  283. extern word guardhp_curr;
  284. // data:4CC8
  285. extern word next_room;
  286. // data:4C98
  287. extern word hitp_curr;
  288. // data:5FF2
  289. extern word hitp_max;
  290. // data:5FF0
  291. extern short hitp_delta;
  292. // data:4D94
  293. extern word flash_color;
  294. // data:4350
  295. extern word flash_time;
  296. // data:42DC
  297. extern char_type Guard;
  298.  
  299. // data:437E
  300. extern word need_quotes;
  301. // data:4CF8
  302. extern short roomleave_result;
  303. // data:4D96
  304. extern word different_room;
  305. // data:4E94
  306. extern sound_buffer_type* sound_pointers[58];
  307. // data:4C58
  308. extern word guardhp_max;
  309. // data:405C
  310. extern word is_feather_fall;
  311. // data:4CBA
  312. extern chtab_type* chtab_title40;
  313. // data:4CD0
  314. extern chtab_type* chtab_title50;
  315. // data:405E
  316. extern short hof_count;
  317.  
  318.  
  319. // data:009A
  320. extern word demo_mode INIT(= 0);
  321.  
  322. // data:42CA
  323. extern word is_cutscene;
  324.  
  325. // data:0FA0
  326. extern cutscene_ptr_type tbl_cutscenes[16] INIT(= {
  327.         NULL,
  328.         NULL,
  329.         cutscene_2_6,
  330.         NULL,
  331.         cutscene_4,
  332.         NULL,
  333.         cutscene_2_6,
  334.         NULL,
  335.         cutscene_8,
  336.         cutscene_9,
  337.         NULL,
  338.         NULL,
  339.         cutscene_12,
  340.         NULL,
  341.         NULL,
  342.         NULL,
  343. });
  344.  
  345. // data:408C
  346. extern short mobs_count;
  347. // data:4F7A
  348. extern short trobs_count;
  349. // data:4062
  350. extern short next_sound;
  351. // data:34AA
  352. extern word grab_timer;
  353. // data:594C
  354. extern short can_guard_see_kid;
  355. // data:594E
  356. extern word holding_sword;
  357. // data:4E90
  358. extern short united_with_shadow;
  359. // data:409C
  360. extern word leveldoor_open;
  361. // data:4610
  362. extern word demo_index;
  363. // data:4CD4
  364. extern short demo_time;
  365. // data:34A2
  366. extern word have_sword;
  367.  
  368. // data:3D22
  369. extern char_type Char;
  370. // data:4D80
  371. extern char_type Opp;
  372.  
  373.  
  374. // data:42A2
  375. extern short knock;
  376. // data:4370
  377. extern word is_guard_notice;
  378.  
  379. // data:656C
  380. extern byte wipe_frames[30];
  381. // data:4C72
  382. extern sbyte wipe_heights[30];
  383. // data:34AC
  384. extern byte redraw_frames_anim[30];
  385. // data:43E0
  386. extern byte redraw_frames2[30];
  387. // data:4C1A
  388. extern byte redraw_frames_floor_overlay[30];
  389. // data:4064
  390. extern byte redraw_frames_full[30];
  391. // data:5EFE
  392. extern byte redraw_frames_fore[30];
  393. // data:3484
  394. extern byte tile_object_redraw[30];
  395. // data:4C64
  396. extern byte redraw_frames_above[10];
  397. // data:4CE2
  398. extern word need_full_redraw;
  399. // data:588E
  400. extern short n_curr_objs;
  401. // data:5BAC
  402. extern objtable_type objtable[50];
  403. // data:5F8C
  404. extern short curr_objs[50];
  405.  
  406. // data:4607
  407. extern byte obj_xh;
  408. // data:4616
  409. extern byte obj_xl;
  410. // data:4613
  411. extern byte obj_y;
  412. // data:4C9A
  413. extern byte obj_chtab;
  414. // data:42A4
  415. extern byte obj_id;
  416. // data:431E
  417. extern byte obj_tilepos;
  418. // data:4604
  419. extern short obj_x;
  420.  
  421. // data:658C
  422. extern frame_type cur_frame;
  423. // data:5886
  424. extern word seamless;
  425. // data:4CBC
  426. extern trob_type trob;
  427. // data:4382
  428. extern trob_type trobs[30];
  429. // data:431A
  430. extern short redraw_height;
  431. // data:24DA
  432. extern /*const*/ byte sound_interruptible[] INIT(= {0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0});
  433. // data:42ED
  434. extern byte curr_tilepos;
  435. // data:432A
  436. extern short curr_room;
  437. // data:4CAC
  438. extern mob_type curmob;
  439. // data:4BB4
  440. extern mob_type mobs[14];
  441. // data:4332
  442. extern short tile_col;
  443. // data:229C
  444. extern const short y_land[] INIT(= {-8, 55, 118, 181, 244});
  445. // data:03D4
  446. extern /*const*/ short tbl_guard_type[16] INIT(= {0, 0, 0, 2, 0, 0, 1, 0, 0, 0, 0, 0, 4, 3, -1, -1});
  447. // data:0EDA
  448. extern /*const*/ byte tbl_guard_hp[16] INIT(= {4, 3, 3, 3, 3, 4, 5, 4, 4, 5, 5, 5, 4, 6, 0, 0});
  449. // data:5888
  450. extern word curr_guard_color;
  451. // data:288C
  452. extern byte key_states[SDL_NUM_SCANCODES];
  453. // data:24A6
  454. extern const byte x_bump[] INIT(= {-12, 2, 16, 30, 44, 58, 72, 86, 100, 114, 128, 142, 156, 170, 184, 198, 212, 226, 240, 254});
  455. // data:42F4
  456. extern word is_screaming;
  457. // data:42EE
  458. extern word offguard; // name from Apple II source
  459. // data:3D32
  460. extern word droppedout; // name from Apple II source
  461.  
  462. #ifdef USE_COPYPROT
  463. // data:00A2
  464. extern /*const*/ word copyprot_room[] INIT(= {3,  3,  3,  3,  3,  3,  4,  4,  4,  4,  4,  4,  4,  4});
  465. // data:00BE
  466. extern const word copyprot_tile[] INIT(= {1,  5,  7,  9, 11, 21,  1,  3,  7, 11, 17, 21, 25, 27});
  467. #endif
  468.  
  469. // data:5BAA
  470. extern word exit_room_timer;
  471. // data:4372
  472. extern short char_col_right;
  473. // data:5F86
  474. extern short char_col_left;
  475. // data:599C
  476. extern short char_top_row;
  477. // data:434C
  478. extern short prev_char_top_row;
  479. // data:432C
  480. extern short prev_char_col_right;
  481. // data:42CE
  482. extern short prev_char_col_left;
  483. // data:34A4
  484. extern short char_bottom_row;
  485. // data:3D34
  486. extern short guard_notice_timer;
  487. // data:42A0
  488. extern short jumped_through_mirror;
  489. // data:2292
  490. extern const short y_clip[] INIT(= {-60, 3, 66, 129, 192});
  491. // data:42F9
  492. extern byte curr_tile2;
  493. // data:4336
  494. extern short tile_row;
  495.  
  496.  
  497.  
  498.  
  499. // data:5F1C
  500. extern word char_width_half;
  501. // data:4618
  502. extern word char_height;
  503. // data:3D1C
  504. extern short char_x_left;
  505. // data:3D20
  506. extern short char_x_left_coll;
  507. // data:42F6
  508. extern short char_x_right_coll;
  509. // data:3D10
  510. extern short char_x_right;
  511. // data:4D98
  512. extern short char_top_y;
  513. // data:4096
  514. extern byte fall_frame;
  515. // data:4C0E
  516. extern byte through_tile;
  517. // data:5F82
  518. extern sbyte infrontx; // name from Apple II source
  519. // data:228E
  520. extern const sbyte dir_front[] INIT(= {-1, 1});
  521. // data:2290
  522. extern const sbyte dir_behind[] INIT(= {1, -1});
  523. // data:4320
  524. extern word current_sound;
  525. // data:4606
  526. extern sbyte control_shift2;
  527. // data:42A8
  528. extern sbyte control_forward;
  529. // data:4368
  530. extern word guard_skill;
  531. // data:4088
  532. extern sbyte control_backward;
  533. // data:4322
  534. extern sbyte control_up;
  535. // data:409A
  536. extern sbyte control_down;
  537. // data:4CE0
  538. extern sbyte ctrl1_forward;
  539. // data:4CD2
  540. extern sbyte ctrl1_backward;
  541. // data:4D92
  542. extern sbyte ctrl1_up;
  543. // data:4CD6
  544. extern sbyte ctrl1_down;
  545. // data:42F8
  546. extern sbyte ctrl1_shift2;
  547.  
  548. // data:42F0
  549. extern word shadow_initialized;
  550.  
  551. // data:4330
  552. extern word guard_refrac;
  553. // data:4098
  554. extern word kid_sword_strike;
  555.  
  556.  
  557. // data:6591
  558. extern byte edge_type;
  559.  
  560.  
  561.  
  562. // data:596C
  563. extern SDL_Surface* onscreen_surface_;
  564. extern SDL_Renderer* renderer_;
  565. extern SDL_Window* window_;
  566. extern SDL_Texture* sdl_texture_;
  567.  
  568. extern SDL_GameController* sdl_controller_ INIT( = 0 );
  569. extern SDL_Joystick* sdl_joystick_; // in case our joystick is not compatible with SDL_GameController
  570. extern byte using_sdl_joystick_interface;
  571. extern int joy_axis[6]; // hor/ver axes for left/right sticks + left and right triggers (in total 6 axes)
  572. extern int joy_left_stick_states[2]; // horizontal, vertical
  573. extern int joy_right_stick_states[2];
  574. extern int joy_hat_states[2]; // horizontal, vertical
  575. extern int joy_AY_buttons_state;
  576. extern int joy_X_button_state;
  577. extern int joy_B_button_state;
  578. extern SDL_Haptic* sdl_haptic;
  579.  
  580. extern int screen_updates_suspended;
  581.  
  582. #ifdef USE_MIXER
  583. extern char** sound_names;
  584. #endif
  585.  
  586. extern int g_argc;
  587. extern char** g_argv;
  588.  
  589.  
  590. // data:405A
  591. extern sbyte collision_row;
  592. // data:42C2
  593. extern sbyte prev_collision_row;
  594.  
  595. // data:4C10
  596. extern sbyte prev_coll_room[10];
  597. // data:4374
  598. extern sbyte curr_row_coll_room[10];
  599. // data:3D06
  600. extern sbyte below_row_coll_room[10];
  601. // data:42D2
  602. extern sbyte above_row_coll_room[10];
  603. // data:5890
  604. extern byte curr_row_coll_flags[10];
  605. // data:4CEA
  606. extern byte above_row_coll_flags[10];
  607. // data:4C4C
  608. extern byte below_row_coll_flags[10];
  609. // data:5BA0
  610. extern byte prev_coll_flags[10];
  611.  
  612.  
  613. // data:4F80
  614. extern short pickup_obj_type;
  615.  
  616.  
  617. // data:34CA
  618. extern word justblocked; // name from Apple II source
  619.  
  620.  
  621. // data:5F84
  622. extern word last_loose_sound;
  623.  
  624. #ifdef USE_REPLAY
  625. extern byte recording INIT(= 0);
  626. extern byte replaying INIT(= 0);
  627. extern dword num_replay_ticks INIT(= 0);
  628. extern byte need_start_replay INIT(= 0);
  629. extern byte need_replay_cycle INIT(= 0);
  630. extern char replays_folder[POP_MAX_PATH] INIT(= "replays");
  631. extern byte special_move;
  632. extern dword saved_random_seed;
  633. extern dword preserved_seed;
  634. extern sbyte keep_last_seed;
  635. extern byte skipping_replay;
  636. extern byte replay_seek_target;
  637. extern byte is_validate_mode;
  638. #endif // USE_REPLAY
  639.  
  640. extern byte start_fullscreen INIT(= 0);
  641. extern word pop_window_width INIT(= 640);
  642. extern word pop_window_height INIT(= 400);
  643. extern byte use_custom_levelset INIT(= 0);
  644. extern char levelset_name[POP_MAX_PATH];
  645.  
  646. extern byte use_fixes_and_enhancements INIT(= 0);
  647. extern byte enable_copyprot INIT(= 0);
  648. extern byte enable_mixer INIT(= 1);
  649. extern int mixer_volume INIT(= 100);
  650. extern byte enable_fade INIT(= 1);
  651. extern byte enable_flash INIT(= 1);
  652. extern byte enable_text INIT(= 1);
  653. extern byte enable_info_screen INIT(= 1);
  654. extern byte enable_controller_rumble INIT(= 0);
  655. extern byte joystick_only_horizontal INIT(= 0);
  656. extern int joystick_threshold INIT(= 8000);
  657. extern byte enable_quicksave INIT(= 1);
  658. extern byte enable_quicksave_penalty INIT(= 1);
  659. extern byte enable_replay INIT(= 1);
  660. extern byte enable_crouch_after_climbing INIT(= 1);
  661. extern byte enable_freeze_time_during_end_music INIT(= 1);
  662. extern byte fix_gate_sounds INIT(= 1);
  663. extern byte fix_two_coll_bug INIT(= 1);
  664. extern byte fix_infinite_down_bug INIT(= 1);
  665. extern byte fix_gate_drawing_bug INIT(= 0);
  666. extern byte fix_bigpillar_climb INIT(= 0);
  667. extern byte fix_jump_distance_at_edge INIT(= 1);
  668. extern byte fix_edge_distance_check_when_climbing INIT(= 1);
  669. extern byte fix_painless_fall_on_guard INIT(= 1);
  670. extern byte fix_wall_bump_triggers_tile_below INIT(= 1);
  671. extern byte fix_stand_on_thin_air INIT(= 1);
  672. extern byte fix_press_through_closed_gates INIT(= 1);
  673. extern byte fix_grab_falling_speed INIT(= 1);
  674. extern byte fix_skeleton_chomper_blood INIT(= 1);
  675. extern byte fix_move_after_drink INIT(= 1);
  676. extern byte fix_loose_left_of_potion INIT(= 1);
  677. extern byte fix_guard_following_through_closed_gates INIT(= 1);
  678. extern byte fix_safe_landing_on_spikes INIT(= 1);
  679. extern byte use_correct_aspect_ratio INIT(= 0);
  680. extern byte use_integer_scaling INIT(= 0);
  681. extern byte enable_remember_guard_hp INIT(= 1);
  682. extern byte fix_glide_through_wall INIT(= 1);
  683. extern byte fix_drop_through_tapestry INIT(= 1);
  684. extern byte fix_land_against_gate_or_tapestry INIT(= 1);
  685. extern byte fix_unintended_sword_strike INIT(= 1);
  686. extern byte fix_retreat_without_leaving_room INIT(= 1);
  687. extern byte fix_running_jump_through_tapestry INIT(= 1);
  688. extern byte fix_push_guard_into_wall INIT(= 1);
  689. extern byte fix_jump_through_wall_above_gate INIT(= 1);
  690. extern byte fix_chompers_not_starting INIT(= 1);
  691. extern byte fix_feather_interrupted_by_leveldoor INIT(= 1);
  692. extern byte fix_offscreen_guards_disappearing INIT(= 1);
  693. extern byte fix_move_after_sheathe INIT(= 1);
  694. #ifdef USE_LIGHTING
  695. extern byte enable_lighting INIT(= 0);
  696. #endif
  697. extern int filter_level INIT(=1);
  698.  
  699. // Custom Gameplay settings
  700. extern word start_minutes_left INIT(= 60);
  701. extern word start_ticks_left INIT(= 719);
  702. extern word start_hitp INIT(= 3);
  703. extern word max_hitp_allowed INIT(= 10);
  704. extern word saving_allowed_first_level INIT(= 3);
  705. extern word saving_allowed_last_level INIT(= 13);
  706. extern byte start_upside_down INIT(= 0);
  707. extern byte start_in_blind_mode INIT(= 0);
  708. extern byte drawn_tile_top_level_edge INIT(= tiles_1_floor);
  709. extern byte drawn_tile_left_level_edge INIT(= tiles_20_wall);
  710. extern byte level_edge_hit_tile INIT(= tiles_20_wall);
  711. extern byte allow_triggering_any_tile INIT(= 0);
  712. extern byte enable_wda_in_palace INIT(= 0);
  713. extern word first_level INIT(= 1);
  714. extern byte skip_title INIT(= 0);
  715. extern word shift_L_allowed_until_level INIT(= 4);
  716. extern word shift_L_reduced_minutes INIT(= 15);
  717. extern word shift_L_reduced_ticks INIT(= 719);
  718.  
  719. // data:009C
  720. extern word cheats_enabled INIT(= 0);
  721. #ifdef USE_DEBUG_CHEATS
  722. extern byte debug_cheats_enabled INIT(= 0);
  723. extern const rect_type timer_rect INIT(= {1, 2, 8, 55});
  724. extern byte is_timer_displayed INIT(= 0);
  725. #endif
  726.  
  727. // customized cutscene set-up: handled as index into a lookup table (can't rely on function pointers being stable!)
  728. extern byte tbl_cutscenes_by_index[16] INIT(= {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15});
  729. extern cutscene_ptr_type tbl_cutscenes_lookup[16] INIT(= {
  730.         NULL,
  731.         NULL,
  732.         cutscene_2_6,
  733.         NULL,
  734.         cutscene_4,
  735.         NULL,
  736.         cutscene_2_6,
  737.         NULL,
  738.         cutscene_8,
  739.         cutscene_9,
  740.         NULL,
  741.         NULL,
  742.         cutscene_12,
  743.         NULL,
  744.         NULL,
  745.         NULL,
  746. });
  747.  
  748. #undef INIT
  749. #undef extern
  750.  
  751. #endif
  752.