Browse Source

Experimental minimal curses implementation...

master
Ognjen Milan Robovic 7 months ago
parent
commit
c8a3be2856
1 changed files with 129 additions and 38 deletions
  1. +129
    -38
      xabina.adb

+ 129
- 38
xabina.adb View File

@@ -14,7 +14,8 @@ with ada.text_io, ada.strings.unbounded;
use ada.text_io, ada.strings.unbounded;

-- Do not use this command below, it's for real-time game...
-- $ gnatmake xabina.adb
-- $ stty raw -echo && ./xabina && stty sane

function xabina return integer is

@@ -294,7 +295,9 @@ function xabina return integer is
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

type weapon_list is (
IRON_SWORD, IRON_GREATSWORD, IRON_AXE, IRON_BATTLEAXE, IRON_SPEAR, IRON_SHIELD, IRON_MACE, IRON_HAMMER
IRON_SWORD, IRON_GREATSWORD, IRON_AXE, IRON_BATTLEAXE, IRON_SPEAR, IRON_SHIELD, IRON_MACE, IRON_HAMMER,
BRONZE_SWORD, BRONZE_GREATSWORD, BRONZE_AXE, BRONZE_BATTLEAXE, BRONZE_SPEAR, BRONZE_SHIELD, BRONZE_MACE, BRONZE_HAMMER,
BRASS_SWORD, BRASS_GREATSWORD, BRASS_AXE, BRASS_BATTLEAXE, BRASS_SPEAR, BRASS_SHIELD, BRASS_MACE, BRASS_HAMMER
);

type weapon_mark is mod 72;
@@ -319,14 +322,30 @@ function xabina return integer is
type weapon_variable_list is array (weapon_mark) of weapon_variable_type;

weapon_constant_data : constant weapon_constant_list := (
(ENTITY_WEAPON, to_unbounded_string ("Iron Sword"), 'l', COLOUR_RED, EFFECT_NORMAL, true, 11, 31, (3, 7), (0, 2), (0, 1)),
(ENTITY_WEAPON, to_unbounded_string ("Iron Greatsword"), 'L', COLOUR_RED, EFFECT_BOLD, false, 23, 67, (5, 11), (1, 3), (0, 2)),
(ENTITY_WEAPON, to_unbounded_string ("Iron Axe"), 'r', COLOUR_RED, EFFECT_NORMAL, true, 13, 43, (1, 7), (0, 2), (0, 1)),
(ENTITY_WEAPON, to_unbounded_string ("Iron Battleaxe"), 'T', COLOUR_RED, EFFECT_BOLD, false, 19, 73, (6, 13), (1, 2), (0, 2)),
(ENTITY_WEAPON, to_unbounded_string ("Iron Spear"), 'I', COLOUR_RED, EFFECT_BOLD, false, 17, 53, (4, 10), (2, 4), (0, 2)),
(ENTITY_WEAPON, to_unbounded_string ("Iron Shield"), 'o', COLOUR_RED, EFFECT_NORMAL, true, 13, 37, (0, 3), (4, 9), (0, 1)),
(ENTITY_WEAPON, to_unbounded_string ("Iron Mace"), 'i', COLOUR_RED, EFFECT_NORMAL, true, 11, 41, (3, 8), (0, 2), (0, 1)),
(ENTITY_WEAPON, to_unbounded_string ("Iron Hammer"), 't', COLOUR_RED, EFFECT_NORMAL, true, 13, 47, (4, 7), (0, 3), (0, 1))
(ENTITY_WEAPON, to_unbounded_string ("Iron Sword"), 'l', COLOUR_RED, EFFECT_NORMAL, true, 11, 31, (3, 7), (0, 2), (0, 1)),
(ENTITY_WEAPON, to_unbounded_string ("Iron Greatsword"), 'L', COLOUR_RED, EFFECT_BOLD, false, 23, 67, (5, 11), (1, 3), (0, 2)),
(ENTITY_WEAPON, to_unbounded_string ("Iron Axe"), 'r', COLOUR_RED, EFFECT_NORMAL, true, 13, 43, (1, 7), (0, 2), (0, 1)),
(ENTITY_WEAPON, to_unbounded_string ("Iron Battleaxe"), 'T', COLOUR_RED, EFFECT_BOLD, false, 19, 73, (6, 13), (1, 2), (0, 2)),
(ENTITY_WEAPON, to_unbounded_string ("Iron Spear"), 'I', COLOUR_RED, EFFECT_BOLD, false, 17, 53, (4, 10), (2, 4), (0, 2)),
(ENTITY_WEAPON, to_unbounded_string ("Iron Shield"), 'o', COLOUR_RED, EFFECT_NORMAL, true, 13, 37, (0, 3), (4, 9), (0, 1)),
(ENTITY_WEAPON, to_unbounded_string ("Iron Mace"), 'i', COLOUR_RED, EFFECT_NORMAL, true, 11, 41, (3, 8), (0, 2), (0, 1)),
(ENTITY_WEAPON, to_unbounded_string ("Iron Hammer"), 't', COLOUR_RED, EFFECT_NORMAL, true, 13, 47, (4, 7), (0, 3), (0, 1)),
(ENTITY_WEAPON, to_unbounded_string ("Bronze Sword"), 'l', COLOUR_RED, EFFECT_NORMAL, true, 11, 31, (3, 7), (0, 2), (0, 1)),
(ENTITY_WEAPON, to_unbounded_string ("Bronze Greatsword"), 'L', COLOUR_RED, EFFECT_BOLD, false, 23, 67, (5, 11), (1, 3), (0, 2)),
(ENTITY_WEAPON, to_unbounded_string ("Bronze Axe"), 'r', COLOUR_RED, EFFECT_NORMAL, true, 13, 43, (1, 7), (0, 2), (0, 1)),
(ENTITY_WEAPON, to_unbounded_string ("Bronze Battleaxe"), 'T', COLOUR_RED, EFFECT_BOLD, false, 19, 73, (6, 13), (1, 2), (0, 2)),
(ENTITY_WEAPON, to_unbounded_string ("Bronze Spear"), 'I', COLOUR_RED, EFFECT_BOLD, false, 17, 53, (4, 10), (2, 4), (0, 2)),
(ENTITY_WEAPON, to_unbounded_string ("Bronze Shield"), 'o', COLOUR_RED, EFFECT_NORMAL, true, 13, 37, (0, 3), (4, 9), (0, 1)),
(ENTITY_WEAPON, to_unbounded_string ("Bronze Mace"), 'i', COLOUR_RED, EFFECT_NORMAL, true, 11, 41, (3, 8), (0, 2), (0, 1)),
(ENTITY_WEAPON, to_unbounded_string ("Bronze Hammer"), 't', COLOUR_RED, EFFECT_NORMAL, true, 13, 47, (4, 7), (0, 3), (0, 1)),
(ENTITY_WEAPON, to_unbounded_string ("Brass Sword"), 'l', COLOUR_RED, EFFECT_NORMAL, true, 11, 31, (3, 7), (0, 2), (0, 1)),
(ENTITY_WEAPON, to_unbounded_string ("Brass Greatsword"), 'L', COLOUR_RED, EFFECT_BOLD, false, 23, 67, (5, 11), (1, 3), (0, 2)),
(ENTITY_WEAPON, to_unbounded_string ("Brass Axe"), 'r', COLOUR_RED, EFFECT_NORMAL, true, 13, 43, (1, 7), (0, 2), (0, 1)),
(ENTITY_WEAPON, to_unbounded_string ("Brass Battleaxe"), 'T', COLOUR_RED, EFFECT_BOLD, false, 19, 73, (6, 13), (1, 2), (0, 2)),
(ENTITY_WEAPON, to_unbounded_string ("Brass Spear"), 'I', COLOUR_RED, EFFECT_BOLD, false, 17, 53, (4, 10), (2, 4), (0, 2)),
(ENTITY_WEAPON, to_unbounded_string ("Brass Shield"), 'o', COLOUR_RED, EFFECT_NORMAL, true, 13, 37, (0, 3), (4, 9), (0, 1)),
(ENTITY_WEAPON, to_unbounded_string ("Brass Mace"), 'i', COLOUR_RED, EFFECT_NORMAL, true, 11, 41, (3, 8), (0, 2), (0, 1)),
(ENTITY_WEAPON, to_unbounded_string ("Brass Hammer"), 't', COLOUR_RED, EFFECT_NORMAL, true, 13, 47, (4, 7), (0, 3), (0, 1))
);

weapon_variable_data : weapon_variable_list;
@@ -470,44 +489,115 @@ function xabina return integer is

x : natural := 0;

begin
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
-- Terminal
-- -- Currently constant, gonna use either my xurses library or <termios.h> C bindings.
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

for this in magic_list
loop
x := x + render_character (magic_constant_data (this).symbol, magic_constant_data (this).colour, magic_constant_data (this).effect);
put_line (" " & to_string (magic_constant_data (this).name));
end loop;
escape : character := character'val (27);

for this in item_list
loop
x := x + render_character (item_constant_data (this).symbol, item_constant_data (this).colour, item_constant_data (this).effect);
put_line (" " & to_string (item_constant_data (this).name));
end loop;
terminal_active : boolean := true;
terminal_signal : character := character'val (0);
terminal_width : natural := 120;
terminal_height : natural := 40;
terminal_buffer : unbounded_string := null_unbounded_string;

for this in ammunition_list
loop
x := x + render_character (ammunition_constant_data (this).symbol, ammunition_constant_data (this).colour, ammunition_constant_data (this).effect);
put_line (" " & to_string (ammunition_constant_data (this).name));
end loop;
function format_symbol (
symbol : character := ' ';
colour : colours := COLOUR_WHITE;
effect : effects := EFFECT_NORMAL
) return string is
format : string (1 .. 12) := escape & "[E;3CmS" & escape & "[0m";
begin
case effect is
when EFFECT_NORMAL => format (3) := '0';
when EFFECT_BOLD => format (3) := '1';
when EFFECT_ITALIC => format (3) := '3';
when EFFECT_UNDERLINE => format (3) := '4';
when EFFECT_BLINK => format (3) := '5';
when EFFECT_REVERSE => format (3) := '7';
end case;
case colour is
when COLOUR_GREY => format (6) := '0';
when COLOUR_RED => format (6) := '1';
when COLOUR_GREEN => format (6) := '2';
when COLOUR_YELLOW => format (6) := '3';
when COLOUR_BLUE => format (6) := '4';
when COLOUR_PINK => format (6) := '5';
when COLOUR_CYAN => format (6) := '6';
when COLOUR_WHITE => format (6) := '7';
end case;
format (8) := symbol;
return format;
end format_symbol;

for this in weapon_list
loop
x := x + render_character (weapon_constant_data (this).symbol, weapon_constant_data (this).colour, weapon_constant_data (this).effect);
put_line (" " & to_string (weapon_constant_data (this).name));
end loop;
procedure terminal_synchronize is
begin
terminal_signal := character'val (0);
put (to_string (terminal_buffer));
get_immediate (terminal_signal);
if terminal_signal = escape then
terminal_active := false;
end if;
end terminal_synchronize;

for this in armour_list
loop
x := x + render_character (armour_constant_data (this).symbol, armour_constant_data (this).colour, armour_constant_data (this).effect);
put_line (" " & to_string (armour_constant_data (this).name));
end loop;
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
-- Main
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
begin

for this in plant_list
loop
x := x + render_character (plant_constant_data (this).symbol, plant_constant_data (this).colour, plant_constant_data (this).effect);
put_line (" " & to_string (plant_constant_data (this).name));
exit when terminal_active = false;
terminal_buffer := to_unbounded_string (escape & "[H");
for y in 1 .. terminal_height
loop
for x in 1 .. terminal_width
loop
terminal_buffer := terminal_buffer & format_symbol ('X', COLOUR_GREY, EFFECT_BOLD);
end loop;
terminal_buffer := terminal_buffer & character'val (13);
terminal_buffer := terminal_buffer & character'val (10);
end loop;
terminal_synchronize;
end loop;

--~for this in magic_list
--~loop
--~x := x + render_character (magic_constant_data (this).symbol, magic_constant_data (this).colour, magic_constant_data (this).effect);
--~put_line (" " & to_string (magic_constant_data (this).name));
--~end loop;

--~for this in item_list
--~loop
--~x := x + render_character (item_constant_data (this).symbol, item_constant_data (this).colour, item_constant_data (this).effect);
--~put_line (" " & to_string (item_constant_data (this).name));
--~end loop;

--~for this in ammunition_list
--~loop
--~x := x + render_character (ammunition_constant_data (this).symbol, ammunition_constant_data (this).colour, ammunition_constant_data (this).effect);
--~put_line (" " & to_string (ammunition_constant_data (this).name));
--~end loop;

--~for this in weapon_list
--~loop
--~x := x + render_character (weapon_constant_data (this).symbol, weapon_constant_data (this).colour, weapon_constant_data (this).effect);
--~put_line (" " & to_string (weapon_constant_data (this).name));
--~end loop;

--~for this in armour_list
--~loop
--~x := x + render_character (armour_constant_data (this).symbol, armour_constant_data (this).colour, armour_constant_data (this).effect);
--~put_line (" " & to_string (armour_constant_data (this).name));
--~end loop;

--~for this in plant_list
--~loop
--~x := x + render_character (plant_constant_data (this).symbol, plant_constant_data (this).colour, plant_constant_data (this).effect);
--~put_line (" " & to_string (plant_constant_data (this).name));
--~end loop;

return 0;

end xabina;

Loading…
Cancel
Save