xhads/source/ai.ads
2024-03-24 11:49:29 -04:00

253 lines
23 KiB
Ada

with core;
package ai is
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
type action is (
none, walk, talk, find
);
subtype string_16 is string (1 .. 16);
agent_digit : constant natural := 8;
agent_state : constant natural := 2;
agent_count : constant natural := 4;
type name_limit is mod 400;
type clan_limit is mod 120;
type data_limit is mod agent_state ** agent_digit - 1;
envy : constant data_limit := 2#00000001#;
gluttony : constant data_limit := 2#00000010#;
greed : constant data_limit := 2#00000100#;
lust : constant data_limit := 2#00001000#;
pride : constant data_limit := 2#00010000#;
sloth : constant data_limit := 2#00100000#;
wrath : constant data_limit := 2#01000000#;
thirst : constant data_limit := 2#00000001#;
hunger : constant data_limit := 2#00000010#;
fatigue : constant data_limit := 2#00000100#;
solitude : constant data_limit := 2#00001000#;
health : constant data_limit := 2#00010000#;
joy : constant data_limit := 2#00100000#;
boredom : constant data_limit := 2#01000000#;
-- CONCIOUSNESS
-- UNCONCIOUSNESS
-- COLLECTIVE UNCONCIOUSNESS
--
-- somatic / psychic
--
-- leave legacy
-- -- outlaw - liberation
-- -- magician - power
-- -- hero - mastery
-- pursue connection
-- -- lover - intimacy
-- -- jester - enjoyment
-- -- everyman - belonging
-- provide structure
-- -- caregiver - service
-- -- ruler - control
-- -- creator - innovation
-- explore spirituality
-- -- innocent - safety
-- -- sage - understanding
-- -- explorer - freedom
--
-- I
-- Anima/Animus
-- Shadow
-- Persona
--
-- Trickster ?
type action_data is
record
base : data_limit;
data : core.procedure_pointer;
name : core.short_string;
end record;
type agent_data is
record
name : name_limit;
clan : clan_limit;
soul : data_limit;
mind : data_limit;
work : action;
x : natural;
y : natural;
end record;
------------------------------------------------------------------------------------------
function agent_is_envious (index : in natural) return boolean; -- wtf
function agent_is_glutton (index : in natural) return boolean; -- wtf
function agent_is_greedy (index : in natural) return boolean; -- wtf
function agent_is_slutty (index : in natural) return boolean; -- wtf
function agent_is_proud (index : in natural) return boolean; -- wtf
function agent_is_lazy (index : in natural) return boolean; -- wtf
function agent_is_angry (index : in natural) return boolean; -- wtf
function agent_is_thirsty (index : in natural) return boolean;
function agent_is_hungry (index : in natural) return boolean;
function agent_is_tired (index : in natural) return boolean; -- wtf
function agent_is_lonely (index : in natural) return boolean;
function agent_is_healthy (index : in natural) return boolean;
function agent_is_happy (index : in natural) return boolean; -- wtf
function agent_is_bored (index : in natural) return boolean; -- wtf
procedure action_none;
procedure action_walk;
procedure action_talk;
procedure action_find;
procedure view_agent_state (index : in integer);
agent : array (1 .. agent_count) of agent_data := ((0, 0, 1, 1, walk, 0, 0), others => (0, 0, 3, 3, walk, 0, 0));
action_array : constant array (action) of action_data := (
(2#00000000#, action_none'access, "standing "),
(2#00000000#, action_walk'access, "walking "),
(2#00000000#, action_talk'access, "talking "),
(2#00000000#, action_find'access, "finding ")
);
male_name_array : constant array (name_limit) of string_16 := (
"Unumis ", "Aardappel ", "Aaron ", "Abel ", "Abgar ", "Abiathar ", "Abijah ", "Abraham ",
"Abram ", "Absolom ", "Adam ", "Adonijah ", "Ael ", "Aghasi ", "Aidan ", "Ajnak ",
"Aknunbi ", "Alexan ", "Alishan ", "Alvedos ", "Aman ", "Amaras ", "Amariah ", "Amoz ",
"Amozthel ", "Amurin ", "Amuu ", "Anairiah ", "Anak ", "Andranik ", "Andro ", "Anushavan ",
"Ara ", "Arakel ", "Aram ", "Aramagd ", "Arayik ", "Ardelico ", "Armen ", "Arsen ",
"Artem ", "Arthur ", "Asa ", "Asaph ", "Asher ", "Asnio ", "Aspet ", "Atrushan ",
"Ava ", "Avag ", "Aygek ", "Azariah ", "Azat ", "Aznavur ", "Babken ", "Baelos ",
"Barak ", "Barsegh ", "Baruch ", "Barunak ", "Bashkhi ", "Benaiah ", "Bildad ", "Cain ",
"Calah ", "Caleb ", "Camon ", "Chenon ", "Dan ", "Daniel ", "David ", "Davtak ",
"Delayahu ", "Derenik ", "Dnei ", "Dovin ", "Drastamat ", "Eahenos ", "Ebenezer ", "Eihrul ",
"Elah ", "Eleazar ", "Eli ", "Eliah ", "Elihu ", "Elijah ", "Eliphaz ", "Elisha ",
"Elkanah ", "Elnathan ", "Emmanuel ", "Enoch ", "Ephraim ", "Esau ", "Ethan ", "Ezekiel ",
"Ezubesh ", "Faegal ", "Fairhim ", "Famnah ", "Faneon ", "Farathen ", "Feanel ", "Gabriel ",
"Gale ", "Galust ", "Gamar ", "Garegin ", "Garnik ", "Geanos ", "Gegham ", "Gera ",
"Gerena ", "Gershon ", "Gevorg ", "Gharip ", "Ghazaros ", "Ghevond ", "Ghukas ", "Gideon ",
"Gind ", "Glak ", "Gnel ", "Gor ", "Grigor ", "Haan ", "Hacob ", "Haeden ",
"Haegor ", "Haefel ", "Haffthel ", "Haffroht ", "Haggai ", "Haman ", "Hamazasp ", "Hamlik ",
"Hayastan ", "Haydug ", "Hayk ", "Haykashen ", "Haykazn ", "Hazdan ", "Helden ", "Helg ",
"Helnor ", "Hetum ", "Heviathan ", "Hosea ", "Hovakim ", "Hovik ", "Hovnel ", "Hovsep ",
"Hrand ", "Hrayr ", "Hushai ", "Ira ", "Iradon ", "Ireanok ", "Irenadal ", "Irinei ",
"Irodes ", "Isaac ", "Isaiah ", "Ishmael ", "Ishnil ", "Jacob ", "Jair ", "Janes ",
"Japheth ", "Jason ", "Javan ", "Jeremiah ", "Jesiah ", "Jethera ", "Joab ", "Joash ",
"Job ", "Jogunel ", "Johuna ", "Jonah ", "Jonathan ", "Jordan ", "Joseph ", "Joshua ",
"Judas ", "Kaggen ", "Kagion ", "Kain ", "Kamo ", "Karapet ", "Karen ", "Karin ",
"Kasas ", "Kastag ", "Kattenion ", "Kaytsak ", "Kearni ", "Kemuel ", "Kenan ", "Kenaz ",
"Kerioth ", "Khacheres ", "Khad ", "Khajak ", "Khoren ", "Khosrov ", "Konstandin ", "Koryun ",
"Layin ", "Lazarus ", "Leishin ", "Lemuel ", "Lenoch ", "Lenumin ", "Leon ", "Lepranik ",
"Lernik ", "Levi ", "Levon ", "Liparit ", "Loris ", "Lot ", "Lucian ", "Lynth ",
"Makar ", "Manasseh ", "Margar ", "Martik ", "Mashtots ", "Matthew ", "Matthias ", "Mekhak ",
"Melkon ", "Mesrop ", "Michael ", "Mihran ", "Milrad ", "Minas ", "Mkhitar ", "Movses ",
"Mushegh ", "Myne ", "Nadab ", "Nahum ", "Naphtali ", "Nar ", "Narek ", "Narinth ",
"Nathan ", "Nathanael ", "Natten ", "Naumen ", "Navasard ", "Nazaret ", "Nehemiah ", "Nekoda ",
"Nekudin ", "Neldenah ", "Nelh ", "Nepria ", "Nerses ", "Nev ", "Neven ", "Nevosh ",
"Nikoghos ", "Nimuo ", "Noah ", "Norayr ", "Norik ", "Obadiah ", "Obed ", "Ogsen ",
"Olaph ", "Omar ", "Onnip ", "Ornhul ", "Oshakan ", "Paghtazar ", "Oshin ", "Othniel ",
"Pargev ", "Paruyr ", "Paul ", "Peto ", "Phinehas ", "Raamah ", "Renael ", "Reuben ",
"Rhaman ", "Roderich ", "Rott ", "Sago ", "Sahak ", "Samson ", "Samuel ", "Sanasar ",
"Sargis ", "Saro ", "Sasun ", "Saul ", "Saurkano ", "Sava ", "Savashin ", "Sedah ",
"Sedrak ", "Seth ", "Sevak ", "Shaden ", "Shadrach ", "Shahan ", "Shant ", "Shara ",
"Shem ", "Shnorhali ", "Simeon ", "Sion ", "Sirakan ", "Slak ", "Slaven ", "Slein ",
"Solomon ", "Sora ", "Sukias ", "Tadeos ", "Tagavor ", "Tamnuhl ", "Taron ", "Tatev ",
"Teneshel ", "Tenian ", "Thaddeus ", "Thomas ", "Tiamath ", "Tirayr ", "Tirazan ", "Tirit ",
"Tobiah ", "Tobias ", "Tonapet ", "Tork ", "Tornik ", "Trdat ", "Tukhayr ", "Ulukai ",
"Uldrel ", "Umenok ", "Umiyen ", "Unakan ", "Unearo ", "Uri ", "Uria ", "Uriah ",
"Uriel ", "Uzziah ", "Vagharshak ", "Vahagn ", "Vahan ", "Vahe ", "Vahram ", "Vakhtang ",
"Van ", "Vanakan ", "Vanand ", "Varag ", "Vardan ", "Vardges ", "Vareos ", "Vash ",
"Vazgen ", "Vazrik ", "Veleon ", "Veleshin ", "Vigen ", "Vordi ", "Vorotan ", "Voskan ",
"Vostan ", "Vrej ", "Yaan ", "Yaruga ", "Yashal ", "Ydelen ", "Yeghia ", "Yeghivard ",
"Yenovk ", "Yeprem ", "Yeremia ", "Yerjanik ", "Yeznik ", "Yezr ", "Yiin ", "Zacchaeus ",
"Zachariah ", "Zahn ", "Zareh ", "Zarmayr ", "Zaven ", "Zebadiah ", "Zedekiah ", "Zinthel "
);
female_name_array : constant array (name_limit) of string_16 := (
"Haen ", "Abigail ", "Abishai ", "Adah ", "Adina ", "Adriel ", "Aednat ", "Aelena ",
"Aghavni ", "Aghvor ", "Ai ", "Ailish ", "Alik ", "Alin ", "Amanor ", "Amanthia ",
"Amaroch ", "Amenora ", "Anahit ", "Anea ", "Anelia ", "Angela ", "Angine ", "Ani ",
"Anka ", "Antaram ", "Aoma ", "Aorire ", "Araksi ", "Araz ", "Arevik ", "Ariel ",
"Arman ", "Armenuhi ", "Arpi ", "Arta ", "Arya ", "Atarah ", "Ayovina ", "Azatuhi ",
"Azganush ", "Azniv ", "Bari ", "Bathsheba ", "Bavakan ", "Bekah ", "Beleni ", "Bersare ",
"Bethel ", "Beulah ", "Byurakan ", "Calah ", "Carmel ", "Cenlea ", "Chloe ", "Clement ",
"Cynthia ", "Dalar ", "Damaris ", "Daniela ", "Dapni ", "Daruhi ", "Dayana ", "Deborah ",
"Delilah ", "Devana ", "Dilijan ", "Dosa ", "Ea ", "Eamara ", "Eano ", "Eden ",
"Edna ", "Elint ", "Elisha ", "Eliza ", "Elizabeth ", "Elena ", "Emma ", "Erebuni ",
"Esther ", "Eunice ", "Eva ", "Eve ", "Evelyn ", "Freiya ", "Gadelin ", "Garik ",
"Gayane ", "Geghani ", "Gethetsik ", "Hadassah ", "Hagar ", "Hannah ", "Hasmik ", "Heghine ",
"Heinon ", "Hel ", "Hermine ", "Hia ", "Hian ", "Hieshen ", "Hiina ", "Hiva ",
"Hrut ", "Huldah ", "Ibel ", "Idaa ", "Idena ", "Ignath ", "Igni ", "Inatani ",
"Inaa ", "Inastuni ", "Iskuhi ", "Iskuk ", "Itiona ", "Jaab ", "Jael ", "Java ",
"Javshelin ", "Joanna ", "Jodi ", "Jordan ", "Jovana ", "Judeash ", "Judith ", "Juna ",
"Junith ", "Juno ", "Kabvenia ", "Kac ", "Kadith ", "Kadeash ", "Kaghruhi ", "Kaiga ",
"Kaigashel ", "Kaliya ", "Kami ", "Karen ", "Karine ", "Karun ", "Kasadya ", "Katarina ",
"Katerine ", "Katelia ", "Kathleen ", "Kayona ", "Kerath ", "Khatun ", "Knar ", "Kora ",
"Kristine ", "Labial ", "Lada ", "Lakera ", "Lala ", "Lalik ", "Lasia ", "Lea ",
"Leah ", "Lekshea ", "Lelkja ", "Lena ", "Lerinael ", "Levontin ", "Lila ", "Lili ",
"Lilith ", "Loashin ", "Lois ", "Lorik ", "Luna ", "Lusatsin ", "Luseres ", "Lusine ",
"Lusnak ", "Lusvard ", "Lydia ", "Lyrana ", "Mane ", "Mara ", "Marah ", "Margarit ",
"Mari ", "Maria ", "Mariam ", "Marine ", "Marta ", "Martha ", "Mary ", "Matlen ",
"Meghedi ", "Meline ", "Menik ", "Merina ", "Michal ", "Mina ", "Miriam ", "Mishael ",
"Mod ", "Molhui ", "Morava ", "Morghana ", "Mothai ", "Myra ", "Nada ", "Nain ",
"Naira ", "Nane ", "Naomi ", "Narduhi ", "Narine ", "Nazani ", "Nazeli ", "Nazuk ",
"Nektar ", "Nena ", "Neriah ", "Nevena ", "Nina ", "Nodelia ", "Nonein ", "Nora ",
"Norinai ", "Nova ", "Nouthi ", "Nuritsa ", "Nushik ", "Obea ", "Ocaere ", "Oda ",
"Odnesha ", "Odlish ", "Olia ", "Omniya ", "Oneraa ", "Ophrah ", "Orpah ", "Ovha ",
"Rachel ", "Rebeshi ", "Rebekah ", "Rei ", "Reitheli ", "Rera ", "Rershia ", "Rev ",
"Revesha ", "Rhei ", "Rhoda ", "Rita ", "Rorail ", "Rubel ", "Runa ", "Rupina ",
"Ruth ", "Ruzan ", "Sabbash ", "Sade ", "Sadyush ", "Sai ", "Saigon ", "Saisha ",
"Sanahin ", "Sanan ", "Sara ", "Sarah ", "Sarai ", "Sarine ", "Satenik ", "Seda ",
"Seki ", "Selena ", "Seniya ", "Senkaya ", "Ser ", "Sevan ", "Shahanik ", "Shake ",
"Shamam ", "Sharin ", "Sharmagh ", "Sharon ", "Shev ", "Shina ", "Shoghakat ", "Shoghik ",
"Shonah ", "Shushan ", "Shusho ", "Silva ", "Siranush ", "Siruhi ", "Sokhak ", "Sonia ",
"Sose ", "Spera ", "Sui ", "Suisei ", "Susannah ", "Tabeth ", "Tad ", "Tadeonia ",
"Talin ", "Talita ", "Talitha ", "Tama ", "Tamara ", "Tamashi ", "Tamnuh ", "Tanyuha ",
"Tanyushia ", "Tankagin ", "Taorin ", "Teana ", "Tenchali ", "Terah ", "Tereza ", "Tesil ",
"Tharin ", "Thabetal ", "Thea ", "Theresha ", "Tiruhi ", "Tirzah ", "Titer ", "Tiubahni ",
"Uahara ", "Uani ", "Ubeana ", "Udurin ", "Udeano ", "Uinhel ", "Uknia ", "Ulna ",
"Uniya ", "Unoshea ", "Uriel ", "Urna ", "Usha ", "Uzenia ", "Vabash ", "Vadeni ",
"Valantin ", "Vane ", "Vanuhi ", "Vaoshi ", "Vardanush ", "Vardeni ", "Varderes ", "Vehuhi ",
"Veneanna ", "Venlia ", "Vera ", "Verjin ", "Voguhi ", "Voskeher ", "Vosketel ", "Voski ",
"Xana ", "Xare ", "Xashana ", "Xera ", "Xereanai ", "Xev ", "Xila ", "Xunshi ",
"Yb ", "Ydama ", "Yebeshia ", "Yeda ", "Yeghisabet ", "Yeghnik ", "Yeranik ", "Yeranuhi ",
"Yeraz ", "Yerjanik ", "Yeva ", "Yevgine ", "Yldha ", "Yra ", "Yves ", "Zanath ",
"Zanazan ", "Zapel ", "Zarah ", "Zardar ", "Zarik ", "Zaruhi ", "Zebb ", "Zemira ",
"Zepyur ", "Zilpah ", "Zina ", "Zipporah ", "Zod ", "Zophea ", "Zora ", "Zuanai "
);
clan_name_array : constant array (clan_limit) of string_16 := (
"Aldheln ", "Abedol ", "Adonis ", "Amelin ", "Ankonih ", "Aoshin ", "Ariel ", "Arma ",
"Arthel ", "Ashal ", "Astrid ", "Avdotiya ", "Barkur ", "Bavakiel ", "Bednudan ", "Calarian ",
"Chleayan ", "Cinnkhan ", "Dairin ", "Daok ", "Daudroht ", "Deakan ", "Degerynn ", "Demenokt ",
"Diihakin ", "Dmitriya ", "Dnakad ", "Dnen ", "Duviel ", "Duychand ", "Eahara ", "Echinon ",
"Eighelen ", "Eikyan ", "Enrichnel ", "Erenth ", "Farathenian ", "Fedonakash ", "Fendal ", "Frostgen ",
"Gaelin ", "Garean ", "Greyvor ", "Gvozden ", "Hadaelio ", "Haeril ", "Haetten ", "Hein ",
"Hnael ", "Hnan ", "Iakara ", "Idho ", "Imayno ", "Inroth ", "Ipolith ", "Jablan ",
"Kalev ", "Kanaen ", "Karamin ", "Karthal ", "Kasidh ", "Kathal ", "Keonrynn ", "Koen ",
"Korda ", "Koveln ", "Ledo ", "Lenhan ", "Levanon ", "Liyan ", "Manailo ", "Megalokhan ",
"Michaelin ", "Mnerea ", "Naankiel ", "Narren ", "Naruhel ", "Nerarynn ", "Obstin ", "Odrahast ",
"Oighast ", "Okad ", "Onaadhan ", "Oudhin ", "Paunkiel ", "Pavelin ", "Rashin ", "Ravinon ",
"Reinan ", "Reives ", "Sauerden ", "Shanan ", "Shaymal ", "Sivinon ", "Sneath ", "Sonithel ",
"Steinen ", "Svidrigail ", "Tamokhan ", "Tedeya ", "Temian ", "Tessianik ", "Tettnoch ", "Therea ",
"Uathanel ", "Uberichel ", "Udun ", "Umenoran ", "Uphria ", "Vanashel ", "Varya ", "Velarynn ",
"Velian ", "Verlon ", "Volash ", "Yaad ", "Yarren ", "Zeanash ", "Ziinyakh ", "Zuno "
);
------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------
procedure configure;
procedure synchronize;
procedure review;
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
end ai;