Prototype game engine for Heroes of Might & Magic, featuring a gameplay plot-twist...
25'ten fazla konu seçemezsiniz Konular bir harf veya rakamla başlamalı, kısa çizgiler ('-') içerebilir ve en fazla 35 karakter uzunluğunda olabilir.

151 satır
5.8KB

  1. -- Copyright (c) 2024 - Ognjen 'xolatile' Milan Robovic
  2. --
  3. -- GNU General Public Licence (version 3 or later)
  4. with ada.text_io, ada.strings.unbounded;
  5. use ada.text_io, ada.strings.unbounded;
  6. package core is
  7. ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
  8. type echo_status is (
  9. failure, warning, success, comment, import, export
  10. );
  11. type signal_code is (
  12. signal_none, signal_space, signal_0, signal_1, signal_2, signal_3,
  13. signal_4, signal_5, signal_6, signal_7, signal_8, signal_9,
  14. signal_a, signal_b, signal_c, signal_d, signal_e, signal_f,
  15. signal_g, signal_h, signal_i, signal_j, signal_k, signal_l,
  16. signal_m, signal_n, signal_o, signal_p, signal_q, signal_r,
  17. signal_s, signal_t, signal_u, signal_v, signal_w, signal_x,
  18. signal_y, signal_z, signal_grave, signal_escape, signal_enter, signal_tab,
  19. signal_backspace, signal_right, signal_left, signal_down, signal_up, signal_kp_0,
  20. signal_kp_1, signal_kp_2, signal_kp_3, signal_kp_4, signal_kp_5, signal_kp_6,
  21. signal_kp_7, signal_kp_8, signal_kp_9, signal_kp_subtract, signal_kp_add, signal_left_shift,
  22. signal_left_control
  23. );
  24. subtype short_string is string (1 .. 24);
  25. subtype long_string is string (1 .. 72);
  26. type pointer is access procedure;
  27. type vector is record x, y : integer; end record;
  28. type sprite is record index, width, height, frames, states : integer; end record;
  29. type font is record index, scale, space : integer; end record;
  30. type song is record index : integer; end record;
  31. type block is record
  32. x : integer := 0;
  33. y : integer := 0;
  34. width : integer := 0;
  35. height : integer := 0;
  36. mode : integer := 0;
  37. action : access procedure := null;
  38. end record;
  39. type text_box_data is record
  40. data : unbounded_string := null_unbounded_string;
  41. size : vector := (0, 0);
  42. end record;
  43. ------------------------------------------------------------------------------------------
  44. icon : constant natural := 32;
  45. base : constant natural := 16;
  46. gameplay_framerate : constant natural := 60;
  47. animation_framerate : constant natural := 4;
  48. echo_mark : constant array (echo_status) of boolean := (
  49. failure => true,
  50. warning => true,
  51. success => true,
  52. comment => true,
  53. import => true,
  54. export => true
  55. );
  56. engine_active : boolean := false;
  57. cursor : vector := (0, 0);
  58. camera : vector := (0, 0);
  59. cursor_mode : integer := 0;
  60. signal_mode : signal_code := signal_none;
  61. framerate : integer := 0;
  62. global_time : natural := 0;
  63. gameplay_time : natural := 0;
  64. animation_time : natural := 0;
  65. zoom : natural := 1;
  66. block_limit : constant natural := 40;
  67. block_count : natural := 0;
  68. block_array : array (0 .. block_limit - 1) of block := (others => (0, 0, 0, 0, 0, null));
  69. text_box : text_box_data;
  70. ------------------------------------------------------------------------------------------
  71. procedure echo (status : in echo_status; text : in string);
  72. procedure dash;
  73. procedure semi_dash;
  74. function c_string (ada_string : in string) return string;
  75. function random (minimum, maximum : in integer) return integer;
  76. function clip (value, minimum, maximum : in integer) return integer;
  77. function lowercase (text : in string) return string;
  78. function window_width return integer;
  79. function window_height return integer;
  80. function import_sprite (file_path : in string; frames, states : in integer) return sprite;
  81. function import_font (file_path : in string; scale, space : in integer) return font;
  82. function import_song (file_path : in string) return song;
  83. procedure draw (data : in sprite;
  84. x : in integer := 0;
  85. y : in integer := 0;
  86. u : in integer := 0;
  87. v : in integer := 0;
  88. width : in integer := 0;
  89. height : in integer := 0;
  90. state : in integer := 0);
  91. procedure write (text : in string := "";
  92. x : in integer := 0;
  93. y : in integer := 0;
  94. data : in font);
  95. procedure play (index : in integer);
  96. procedure stop (index : in integer);
  97. procedure overlay;
  98. procedure block_queue (data : in block);
  99. function read_text_box return string;
  100. procedure write_text_box (text : in string);
  101. procedure increment (value : in out integer);
  102. procedure decrement (value : in out integer);
  103. procedure idle;
  104. procedure move_camera_up;
  105. procedure move_camera_down;
  106. procedure move_camera_left;
  107. procedure move_camera_right;
  108. procedure initialize;
  109. procedure deinitialize;
  110. procedure synchronize;
  111. ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
  112. end core;