|
|
@@ -89,7 +89,8 @@ function xabina return integer is |
|
|
|
collide : boolean := false; |
|
|
|
end record; |
|
|
|
|
|
|
|
type map_constant_list is array (map_list) of map_constant_type; |
|
|
|
type map_constant_list is array (map_list) of map_constant_type; |
|
|
|
type map_variable_list is array (map_height, map_width) of map_list; |
|
|
|
|
|
|
|
map_constant_data : constant map_constant_list := ( |
|
|
|
(ENTITY_MAP, to_unbounded_string ("Stone Wall"), '#', COLOUR_GREY, EFFECT_BOLD, true), |
|
|
@@ -102,6 +103,19 @@ function xabina return integer is |
|
|
|
(ENTITY_MAP, to_unbounded_string ("Swamp (deep)"), '~', COLOUR_GREEN, EFFECT_BOLD, true) |
|
|
|
); |
|
|
|
|
|
|
|
map_variable_data : map_variable_list; |
|
|
|
|
|
|
|
procedure generate_map is |
|
|
|
begin |
|
|
|
for y in map_height |
|
|
|
loop |
|
|
|
for x in map_width |
|
|
|
loop |
|
|
|
map_variable_data (y, x) := WOODEN_FLOOR; |
|
|
|
end loop; |
|
|
|
end loop; |
|
|
|
end generate_map; |
|
|
|
|
|
|
|
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
|
|
|
-- Item |
|
|
|
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
|
|
@@ -519,7 +533,7 @@ function xabina return integer is |
|
|
|
procedure render_screen_delete is begin put (ESCAPE & "[2J"); end render_screen_delete; |
|
|
|
procedure render_screen_offset is begin put (ESCAPE & "[H"); end render_screen_offset; |
|
|
|
procedure render_cursor_hide is begin put (ESCAPE & "[?25l"); end render_cursor_hide; |
|
|
|
procedure render_cursor_show is begin put (ESCAPE & "[?25l"); end render_cursor_show; |
|
|
|
procedure render_cursor_show is begin put (ESCAPE & "[?25h"); end render_cursor_show; |
|
|
|
procedure render_realignment is begin put (CARRIAGE_RETURN & LINE_FEED); end render_realignment; |
|
|
|
|
|
|
|
procedure render_character (symbol : character := ' '; |
|
|
@@ -557,6 +571,28 @@ function xabina return integer is |
|
|
|
screen_effect (y, x) := effect; |
|
|
|
end insert_character; |
|
|
|
|
|
|
|
procedure insert_map is |
|
|
|
symbol : character := ' '; |
|
|
|
colour : character := COLOUR_WHITE; |
|
|
|
effect : character := EFFECT_NORMAL; |
|
|
|
begin |
|
|
|
for y in screen_height |
|
|
|
loop |
|
|
|
for x in screen_width |
|
|
|
loop |
|
|
|
symbol := map_constant_data (map_variable_data (map_height (y), map_width (x))).symbol; |
|
|
|
colour := map_constant_data (map_variable_data (map_height (y), map_width (x))).colour; |
|
|
|
effect := map_constant_data (map_variable_data (map_height (y), map_width (x))).effect; |
|
|
|
insert_character (symbol, colour, effect, y, x); |
|
|
|
end loop; |
|
|
|
end loop; |
|
|
|
end insert_map; |
|
|
|
|
|
|
|
procedure insert_player is |
|
|
|
begin |
|
|
|
insert_character ('@', COLOUR_CYAN, EFFECT_BOLD, screen_height (player.y), screen_width (player.x)); |
|
|
|
end insert_player; |
|
|
|
|
|
|
|
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
|
|
|
-- Main |
|
|
|
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
|
|
@@ -573,17 +609,13 @@ begin |
|
|
|
render_screen_offset; |
|
|
|
render_cursor_hide; |
|
|
|
|
|
|
|
generate_map; |
|
|
|
|
|
|
|
loop |
|
|
|
exit when active = false; |
|
|
|
signal := CANCEL; |
|
|
|
for y in screen_height |
|
|
|
loop |
|
|
|
for x in screen_width |
|
|
|
loop |
|
|
|
insert_character ('.', COLOUR_GREY, EFFECT_BOLD, y, x); |
|
|
|
end loop; |
|
|
|
end loop; |
|
|
|
insert_character ('@', COLOUR_CYAN, EFFECT_BOLD, screen_height (player.y), screen_width (player.x)); |
|
|
|
insert_map; |
|
|
|
insert_player; |
|
|
|
render_screen; |
|
|
|
get_immediate (signal); |
|
|
|
action_list (character'pos (signal)).all; |
|
|
|