Added monsters, separately from units for logical reasons...

This commit is contained in:
Ognjen Milan Robovic 2024-06-15 04:54:30 -04:00
parent 8329dffae2
commit bee22e4352
7 changed files with 91 additions and 30 deletions

View File

@ -11,7 +11,9 @@ package effect is
modify_attribute, modify_attribute,
modify_skill, modify_skill,
modify_resource, modify_resource,
modify_material append_material,
append_equipment,
append_monster
); );
------------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------------

View File

@ -42,14 +42,14 @@ package location is
well_of_strength => (new string'("Well of Strength"), true, 4, (effect.modify_attribute, attribute.enumeration'pos (attribute.offense), 2, false, 0)), well_of_strength => (new string'("Well of Strength"), true, 4, (effect.modify_attribute, attribute.enumeration'pos (attribute.offense), 2, false, 0)),
old_dwarven_grave => (new string'("Old Dwarven Grave"), true, 1, (effect.modify_attribute, attribute.enumeration'pos (attribute.defense), 1, false, 0)), old_dwarven_grave => (new string'("Old Dwarven Grave"), true, 1, (effect.modify_attribute, attribute.enumeration'pos (attribute.defense), 1, false, 0)),
huge_ancient_urn => (new string'("Huge Ancient Urn"), true, 1, (effect.modify_attribute, attribute.enumeration'pos (attribute.offense), 1, false, 0)), huge_ancient_urn => (new string'("Huge Ancient Urn"), true, 1, (effect.modify_attribute, attribute.enumeration'pos (attribute.offense), 1, false, 0)),
banana_tree => (new string'("Banana Tree"), true, 4, (effect.modify_material, material.enumeration'pos (material.banana), 4, true, 12)), banana_tree => (new string'("Banana Tree"), true, 4, (effect.append_material, material.enumeration'pos (material.banana), 4, true, 12)),
apple_tree => (new string'("Apple Tree"), true, 4, (effect.modify_material, material.enumeration'pos (material.apple), 6, true, 12)), apple_tree => (new string'("Apple Tree"), true, 4, (effect.append_material, material.enumeration'pos (material.apple), 6, true, 12)),
cherry_tree => (new string'("Cherry Tree"), true, 4, (effect.modify_material, material.enumeration'pos (material.cherry), 6, true, 12)), cherry_tree => (new string'("Cherry Tree"), true, 4, (effect.append_material, material.enumeration'pos (material.cherry), 6, true, 12)),
lemon_tree => (new string'("Lemon Tree"), true, 4, (effect.modify_material, material.enumeration'pos (material.lemon), 6, true, 12)), lemon_tree => (new string'("Lemon Tree"), true, 4, (effect.append_material, material.enumeration'pos (material.lemon), 6, true, 12)),
orange_tree => (new string'("Orange Tree"), true, 4, (effect.modify_material, material.enumeration'pos (material.orange), 6, true, 12)), orange_tree => (new string'("Orange Tree"), true, 4, (effect.append_material, material.enumeration'pos (material.orange), 6, true, 12)),
pear_tree => (new string'("Pear Tree"), true, 4, (effect.modify_material, material.enumeration'pos (material.pear), 6, true, 12)), pear_tree => (new string'("Pear Tree"), true, 4, (effect.append_material, material.enumeration'pos (material.pear), 6, true, 12)),
peach_tree => (new string'("Peach Tree"), true, 4, (effect.modify_material, material.enumeration'pos (material.peach), 6, true, 12)), peach_tree => (new string'("Peach Tree"), true, 4, (effect.append_material, material.enumeration'pos (material.peach), 6, true, 12)),
plum_tree => (new string'("Plum Tree"), true, 4, (effect.modify_material, material.enumeration'pos (material.plum), 6, true, 12)), plum_tree => (new string'("Plum Tree"), true, 4, (effect.append_material, material.enumeration'pos (material.plum), 6, true, 12)),
pillars_of_observation => (new string'("Pillars of Observation"), true, 1, (effect.modify_attribute, attribute.enumeration'pos (attribute.reach), 2, false, 0)) pillars_of_observation => (new string'("Pillars of Observation"), true, 1, (effect.modify_attribute, attribute.enumeration'pos (attribute.reach), 2, false, 0))
); );

View File

@ -34,6 +34,8 @@ package material is
type points is array (limit) of point; type points is array (limit) of point;
type drops is array (natural range <>) of point;
------------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------------
count : constant natural := enumeration'pos (enumeration'last) + 1; count : constant natural := enumeration'pos (enumeration'last) + 1;

58
source/monster.ads Normal file
View File

@ -0,0 +1,58 @@
-- Copyright (c) 2024 - Ognjen 'xolatile' Milan Robovic
--
-- GNU General Public Licence (version 3 or later)
with core, attribute, material, effect;
package monster is
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
type enumeration is (
none,
hill_troll, cave_troll, mountain_troll, swamp_worm, sand_worm, ash_worm
);
------------------------------------------------------------------------------------------
type definition is record
name : access string := new string'("--");
attributes : attribute.bonus := (others => 0);
materials : access material.drops := new material.drops'((material.meat, 1, 1), (material.bone, 1, 1));
evoke : effect.information := effect.none;
end record;
type information is record
index : enumeration := enumeration'first;
state : core.animation := core.idle;
x : integer := 0;
y : integer := 0;
health : core.point := (24, 24);
mana : core.point := (24, 24);
stamina : core.point := (24, 24);
end record;
type informations is array (natural range <>) of information;
------------------------------------------------------------------------------------------
count : constant natural := enumeration'pos (enumeration'last) + 1;
description : constant array (enumeration) of definition := (
none => (others => <>),
--
hill_troll => (new string'("Hill Troll"), (3, 3, 3, 6, 6, 6), new material.drops'((material.meat, 3, 6), (material.skull, 1, 1)), effect.none),
cave_troll => (new string'("Cave Troll"), (3, 3, 3, 6, 6, 6), new material.drops'((material.meat, 3, 6), (material.skull, 1, 1)), effect.none),
mountain_troll => (new string'("Mountain Troll"), (3, 3, 3, 6, 6, 6), new material.drops'((material.meat, 3, 6), (material.skull, 1, 1)), effect.none),
swamp_worm => (new string'("Swamp Worm"), (2, 3, 3, 4, 6, 6), new material.drops'((material.meat, 3, 6), (material.bone, 1, 3)), effect.none),
sand_worm => (new string'("Sand Word"), (2, 3, 3, 4, 6, 6), new material.drops'((material.meat, 3, 6), (material.bone, 1, 3)), effect.none),
ash_worm => (new string'("Ash Worm"), (2, 3, 3, 4, 6, 6), new material.drops'((material.meat, 3, 6), (material.bone, 1, 3)), effect.none)
);
game : array (enumeration) of core.sprite;
icon : array (enumeration) of core.sprite;
view : array (enumeration) of core.sprite;
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
end monster;

View File

@ -20,7 +20,6 @@ package unit is
type definition is record type definition is record
name : access string := new string'("--"); name : access string := new string'("--");
kind : faction.enumeration := faction.neutral; kind : faction.enumeration := faction.neutral;
limit : natural := 0;
attributes : attribute.bonus := (others => 0); attributes : attribute.bonus := (others => 0);
hiring_fee : natural := 0; hiring_fee : natural := 0;
weekly_fee : natural := 0; weekly_fee : natural := 0;
@ -74,50 +73,50 @@ package unit is
description : constant array (enumeration) of definition := ( description : constant array (enumeration) of definition := (
none => (others => <>), none => (others => <>),
-- --
dwarf_villager => (new string'("Villager"), faction.dwarf, 120, (2, 1, 1, 1, 2, 1), 2, 1, 1, ( dwarf_villager => (new string'("Villager"), faction.dwarf, (2, 1, 1, 1, 2, 1), 2, 1, 1, (
equipment.grey_tunic, equipment.none, equipment.none, equipment.none, equipment.grey_tunic, equipment.none, equipment.none, equipment.none,
equipment.none, equipment.none, equipment.club, equipment.none)), equipment.none, equipment.none, equipment.club, equipment.none)),
dwarf_miner => (new string'("Miner"), faction.dwarf, 120, (2, 1, 1, 1, 2, 1), 2, 1, 1, ( dwarf_miner => (new string'("Miner"), faction.dwarf, (2, 1, 1, 1, 2, 1), 2, 1, 1, (
equipment.grey_tunic, equipment.none, equipment.none, equipment.fur_gauntlets, equipment.grey_tunic, equipment.none, equipment.none, equipment.fur_gauntlets,
equipment.fur_greaves, equipment.none, equipment.pickaxe, equipment.none)), equipment.fur_greaves, equipment.none, equipment.pickaxe, equipment.none)),
dwarf_blacksmith => (new string'("Blacksmith"), faction.dwarf, 90, (2, 1, 1, 1, 2, 1), 3, 1, 2, ( dwarf_blacksmith => (new string'("Blacksmith"), faction.dwarf, (2, 1, 1, 1, 2, 1), 3, 1, 2, (
equipment.grey_tunic, equipment.leather_helmet, equipment.none, equipment.leather_gauntlets, equipment.grey_tunic, equipment.leather_helmet, equipment.none, equipment.leather_gauntlets,
equipment.leather_greaves, equipment.none, equipment.sledge_hammer, equipment.none)), equipment.leather_greaves, equipment.none, equipment.sledge_hammer, equipment.none)),
dwarf_hunter => (new string'("Hunter"), faction.dwarf, 90, (2, 1, 1, 1, 2, 1), 3, 2, 2, ( dwarf_hunter => (new string'("Hunter"), faction.dwarf, (2, 1, 1, 1, 2, 1), 3, 2, 2, (
equipment.grey_tunic, equipment.none, equipment.leather_chestplate, equipment.fur_gauntlets, equipment.grey_tunic, equipment.none, equipment.leather_chestplate, equipment.fur_gauntlets,
equipment.fur_greaves, equipment.none, equipment.wooden_bow, equipment.none)), equipment.fur_greaves, equipment.none, equipment.wooden_bow, equipment.none)),
dwarf_bowman => (new string'("Bowman"), faction.dwarf, 90, (2, 1, 1, 1, 2, 1), 5, 3, 2, ( dwarf_bowman => (new string'("Bowman"), faction.dwarf, (2, 1, 1, 1, 2, 1), 5, 3, 2, (
equipment.blue_tunic, equipment.leather_helmet, equipment.iron_chestplate, equipment.none, equipment.blue_tunic, equipment.leather_helmet, equipment.iron_chestplate, equipment.none,
equipment.leather_greaves, equipment.none, equipment.iron_bow, equipment.none)), equipment.leather_greaves, equipment.none, equipment.iron_bow, equipment.none)),
dwarf_warrior => (new string'("Warrior"), faction.dwarf, 120, (2, 1, 1, 1, 2, 1), 7, 3, 3, ( dwarf_warrior => (new string'("Warrior"), faction.dwarf, (2, 1, 1, 1, 2, 1), 7, 3, 3, (
equipment.blue_tunic, equipment.leather_helmet, equipment.iron_chestplate, equipment.leather_gauntlets, equipment.blue_tunic, equipment.leather_helmet, equipment.iron_chestplate, equipment.leather_gauntlets,
equipment.leather_greaves, equipment.none, equipment.iron_mace, equipment.wooden_shield)), equipment.leather_greaves, equipment.none, equipment.iron_mace, equipment.wooden_shield)),
dwarf_axeman => (new string'("Axeman"), faction.dwarf, 120, (2, 1, 1, 1, 2, 1), 7, 3, 3, ( dwarf_axeman => (new string'("Axeman"), faction.dwarf, (2, 1, 1, 1, 2, 1), 7, 3, 3, (
equipment.blue_tunic, equipment.leather_helmet, equipment.iron_chestplate, equipment.leather_gauntlets, equipment.blue_tunic, equipment.leather_helmet, equipment.iron_chestplate, equipment.leather_gauntlets,
equipment.leather_greaves, equipment.none, equipment.iron_axe, equipment.wooden_shield)), equipment.leather_greaves, equipment.none, equipment.iron_axe, equipment.wooden_shield)),
dwarf_crossbowman => (new string'("Crossbowman"), faction.dwarf, 90, (2, 1, 1, 2, 2, 1), 7, 5, 3, ( dwarf_crossbowman => (new string'("Crossbowman"), faction.dwarf, (2, 1, 1, 2, 2, 1), 7, 5, 3, (
equipment.blue_tunic, equipment.iron_helmet, equipment.iron_chestplate, equipment.leather_gauntlets, equipment.blue_tunic, equipment.iron_helmet, equipment.iron_chestplate, equipment.leather_gauntlets,
equipment.leather_greaves, equipment.none, equipment.light_crossbow, equipment.none)), equipment.leather_greaves, equipment.none, equipment.light_crossbow, equipment.none)),
dwarf_berserker => (new string'("Berserker"), faction.dwarf, 120, (3, 2, 1, 3, 3, 1), 7, 3, 5, ( dwarf_berserker => (new string'("Berserker"), faction.dwarf, (3, 2, 1, 3, 3, 1), 7, 3, 5, (
equipment.blue_pants, equipment.none, equipment.none, equipment.leather_gauntlets, equipment.blue_pants, equipment.none, equipment.none, equipment.leather_gauntlets,
equipment.leather_greaves, equipment.none, equipment.iron_axe, equipment.none)), equipment.leather_greaves, equipment.none, equipment.iron_axe, equipment.none)),
dwarf_guard => (new string'("Guard"), faction.dwarf, 90, (2, 3, 1, 3, 2, 1), 17, 5, 3, ( dwarf_guard => (new string'("Guard"), faction.dwarf, (2, 3, 1, 3, 2, 1), 17, 5, 3, (
equipment.cyan_tunic, equipment.iron_helmet, equipment.iron_chestplate, equipment.leather_gauntlets, equipment.cyan_tunic, equipment.iron_helmet, equipment.iron_chestplate, equipment.leather_gauntlets,
equipment.leather_greaves, equipment.none, equipment.iron_spear, equipment.iron_shield)), equipment.leather_greaves, equipment.none, equipment.iron_spear, equipment.iron_shield)),
dwarf_elite_guard => (new string'("Elite Guard"), faction.dwarf, 90, (3, 3, 1, 3, 2, 1), 23, 7, 2, ( dwarf_elite_guard => (new string'("Elite Guard"), faction.dwarf, (3, 3, 1, 3, 2, 1), 23, 7, 2, (
equipment.cyan_tunic, equipment.mithril_helmet, equipment.mithril_chestplate, equipment.steel_gauntlets, equipment.cyan_tunic, equipment.mithril_helmet, equipment.mithril_chestplate, equipment.steel_gauntlets,
equipment.steel_greaves, equipment.none, equipment.mithril_spear, equipment.steel_shield)), equipment.steel_greaves, equipment.none, equipment.mithril_spear, equipment.steel_shield)),
dwarf_war_druid => (new string'("War Druid"), faction.dwarf, 60, (1, 1, 3, 1, 1, 1), 23, 3, 0, ( dwarf_war_druid => (new string'("War Druid"), faction.dwarf, (1, 1, 3, 1, 1, 1), 23, 3, 0, (
equipment.black_robe, equipment.black_hood, equipment.mithril_chestplate, equipment.none, equipment.black_robe, equipment.black_hood, equipment.mithril_chestplate, equipment.none,
equipment.none, equipment.none, equipment.staff_of_earth, equipment.none)), equipment.none, equipment.none, equipment.staff_of_earth, equipment.none)),
dwarf_pig_rider => (new string'("Pig Rider"), faction.dwarf, 30, others => <>), -- todo dwarf_pig_rider => (new string'("Pig Rider"), faction.dwarf, others => <>), -- todo
dwarf_boar_rider => (new string'("Boar Rider"), faction.dwarf, 30, others => <>), -- todo dwarf_boar_rider => (new string'("Boar Rider"), faction.dwarf, others => <>), -- todo
dwarf_giant_mole_rider => (new string'("Giant Mole Rider"), faction.dwarf, 30, others => <>), -- todo dwarf_giant_mole_rider => (new string'("Giant Mole Rider"), faction.dwarf, others => <>), -- todo
dwarf_siegebowman => (new string'("Siegebowman"), faction.dwarf, 60, others => <>), -- todo dwarf_siegebowman => (new string'("Siegebowman"), faction.dwarf, others => <>), -- todo
dwarf_knight => (new string'("Knight"), faction.dwarf, 60, (5, 3, 2, 3, 3, 1), 29, 7, 13, ( -- todo dwarf_knight => (new string'("Knight"), faction.dwarf, (5, 3, 2, 3, 3, 1), 29, 7, 13, ( -- todo
equipment.cyan_robe, equipment.mithril_helmet, equipment.mithril_chestplate, equipment.mithril_gauntlets, equipment.cyan_robe, equipment.mithril_helmet, equipment.mithril_chestplate, equipment.mithril_gauntlets,
equipment.mithril_greaves, equipment.none, equipment.mithril_battleaxe, equipment.mithril_shield)), equipment.mithril_greaves, equipment.none, equipment.mithril_battleaxe, equipment.mithril_shield)),
dwarf_flag_carrier => (new string'("Flag Carrier"), faction.dwarf, 10, (5, 3, 2, 3, 5, 1), 29, 13, 0, ( dwarf_flag_carrier => (new string'("Flag Carrier"), faction.dwarf, (5, 3, 2, 3, 5, 1), 29, 13, 0, (
equipment.cyan_robe, equipment.mithril_helmet, equipment.mithril_chestplate, equipment.mithril_gauntlets, equipment.cyan_robe, equipment.mithril_helmet, equipment.mithril_chestplate, equipment.mithril_gauntlets,
equipment.mithril_greaves, equipment.none, equipment.mithril_mace, equipment.mithril_shield)) equipment.mithril_greaves, equipment.none, equipment.mithril_mace, equipment.mithril_shield))
); );

View File

@ -1294,7 +1294,7 @@ package body world is
ui.echo ("Player " & (if data.amount < 0 then "lost" else "gained") & integer'image (abs data.amount) & " " ui.echo ("Player " & (if data.amount < 0 then "lost" else "gained") & integer'image (abs data.amount) & " "
& resource.description (resource_index).name.all & " resource points."); & resource.description (resource_index).name.all & " resource points.");
-- --
when effect.modify_material => material_index := material.enumeration'val (data.modifier); when effect.append_material => material_index := material.enumeration'val (data.modifier);
-- --
for this in material.limit loop for this in material.limit loop
exit when done; exit when done;

View File

@ -2,7 +2,7 @@
-- --
-- GNU General Public Licence (version 3 or later) -- GNU General Public Licence (version 3 or later)
with core, ui, attribute, skill, resource, material, lore, biome, landmark, location, faction, equipment, magic, deity, unit, construction, chad, effect; with core, ui, attribute, skill, resource, material, lore, biome, landmark, location, faction, equipment, magic, deity, monster, unit, construction, chad, effect;
use type core.cursor_code; use type core.cursor_code;
use type core.signal_code; use type core.signal_code;