diff --git a/ATL/Lugwey/items.atl b/ATL/Lugwey/items.atl new file mode 100644 index 0000000..63b407e --- /dev/null +++ b/ATL/Lugwey/items.atl @@ -0,0 +1,26 @@ +; The Monastery of Lugwey is the first "real" world I am creating with ATL. +; Its purpose (apart from being playable) is to help with the development of +; Atlantis by showing potential deficits, bringing up new ideas, etc. +; +; This file holds all the item descriptions. +; +; @author Daniel Vedder +; @date 09/07/2015 + +define-item "Parchment" + description "Dried animal skins used as paper." + cost 5 + +define-item "Quill" + description "A goose-feather, sharpened at one end to make a pen." + cost 5 + +define-item "Dagger" + description "A long, sharp knife, useful for self defence." + weapon "Yes" + cost 20 + +define-weapon "Dagger" + description "A long, sharp knife, useful for self defence." + type "Knife" + damage 3 \ No newline at end of file diff --git a/ATL/Lugwey/items.atl b/ATL/Lugwey/items.atl new file mode 100644 index 0000000..63b407e --- /dev/null +++ b/ATL/Lugwey/items.atl @@ -0,0 +1,26 @@ +; The Monastery of Lugwey is the first "real" world I am creating with ATL. +; Its purpose (apart from being playable) is to help with the development of +; Atlantis by showing potential deficits, bringing up new ideas, etc. +; +; This file holds all the item descriptions. +; +; @author Daniel Vedder +; @date 09/07/2015 + +define-item "Parchment" + description "Dried animal skins used as paper." + cost 5 + +define-item "Quill" + description "A goose-feather, sharpened at one end to make a pen." + cost 5 + +define-item "Dagger" + description "A long, sharp knife, useful for self defence." + weapon "Yes" + cost 20 + +define-weapon "Dagger" + description "A long, sharp knife, useful for self defence." + type "Knife" + damage 3 \ No newline at end of file diff --git a/ATL/Lugwey/lugwey.atl b/ATL/Lugwey/lugwey.atl new file mode 100644 index 0000000..12f6cd7 --- /dev/null +++ b/ATL/Lugwey/lugwey.atl @@ -0,0 +1,38 @@ +; The Monastery of Lugwey is the first "real" world I am creating with ATL. +; Its purpose (apart from being playable) is to help with the development of +; Atlantis by showing potential deficits, bringing up new ideas, etc. +; +; This is the main world file. +; +; @author Daniel Vedder +; @date 09/07/2015 + +name-world "Lugwey" + +define-player "Start" + money 50 + place "Gate" + max-health 50 + health 50 + +define-race "Human" + description "Errare humanum est" + intelligence-bonus 1 + +define-class "Scholar" + description "Dubio ergo corgito, corgito ergo sum" + special-item "Paper" + special-item "Quill" + +;; DEVELOPMENT +define-player "Leonardo" + race "Human" + class "Scholar" + item "Dagger" + weapon "Dagger" + money 60 + place "Gate" + +load-file "places.atl" +load-file "items.atl" +load-file "npcs.atl" \ No newline at end of file diff --git a/ATL/Lugwey/items.atl b/ATL/Lugwey/items.atl new file mode 100644 index 0000000..63b407e --- /dev/null +++ b/ATL/Lugwey/items.atl @@ -0,0 +1,26 @@ +; The Monastery of Lugwey is the first "real" world I am creating with ATL. +; Its purpose (apart from being playable) is to help with the development of +; Atlantis by showing potential deficits, bringing up new ideas, etc. +; +; This file holds all the item descriptions. +; +; @author Daniel Vedder +; @date 09/07/2015 + +define-item "Parchment" + description "Dried animal skins used as paper." + cost 5 + +define-item "Quill" + description "A goose-feather, sharpened at one end to make a pen." + cost 5 + +define-item "Dagger" + description "A long, sharp knife, useful for self defence." + weapon "Yes" + cost 20 + +define-weapon "Dagger" + description "A long, sharp knife, useful for self defence." + type "Knife" + damage 3 \ No newline at end of file diff --git a/ATL/Lugwey/lugwey.atl b/ATL/Lugwey/lugwey.atl new file mode 100644 index 0000000..12f6cd7 --- /dev/null +++ b/ATL/Lugwey/lugwey.atl @@ -0,0 +1,38 @@ +; The Monastery of Lugwey is the first "real" world I am creating with ATL. +; Its purpose (apart from being playable) is to help with the development of +; Atlantis by showing potential deficits, bringing up new ideas, etc. +; +; This is the main world file. +; +; @author Daniel Vedder +; @date 09/07/2015 + +name-world "Lugwey" + +define-player "Start" + money 50 + place "Gate" + max-health 50 + health 50 + +define-race "Human" + description "Errare humanum est" + intelligence-bonus 1 + +define-class "Scholar" + description "Dubio ergo corgito, corgito ergo sum" + special-item "Paper" + special-item "Quill" + +;; DEVELOPMENT +define-player "Leonardo" + race "Human" + class "Scholar" + item "Dagger" + weapon "Dagger" + money 60 + place "Gate" + +load-file "places.atl" +load-file "items.atl" +load-file "npcs.atl" \ No newline at end of file diff --git a/ATL/Lugwey/npcs.atl b/ATL/Lugwey/npcs.atl new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/ATL/Lugwey/npcs.atl diff --git a/ATL/Lugwey/items.atl b/ATL/Lugwey/items.atl new file mode 100644 index 0000000..63b407e --- /dev/null +++ b/ATL/Lugwey/items.atl @@ -0,0 +1,26 @@ +; The Monastery of Lugwey is the first "real" world I am creating with ATL. +; Its purpose (apart from being playable) is to help with the development of +; Atlantis by showing potential deficits, bringing up new ideas, etc. +; +; This file holds all the item descriptions. +; +; @author Daniel Vedder +; @date 09/07/2015 + +define-item "Parchment" + description "Dried animal skins used as paper." + cost 5 + +define-item "Quill" + description "A goose-feather, sharpened at one end to make a pen." + cost 5 + +define-item "Dagger" + description "A long, sharp knife, useful for self defence." + weapon "Yes" + cost 20 + +define-weapon "Dagger" + description "A long, sharp knife, useful for self defence." + type "Knife" + damage 3 \ No newline at end of file diff --git a/ATL/Lugwey/lugwey.atl b/ATL/Lugwey/lugwey.atl new file mode 100644 index 0000000..12f6cd7 --- /dev/null +++ b/ATL/Lugwey/lugwey.atl @@ -0,0 +1,38 @@ +; The Monastery of Lugwey is the first "real" world I am creating with ATL. +; Its purpose (apart from being playable) is to help with the development of +; Atlantis by showing potential deficits, bringing up new ideas, etc. +; +; This is the main world file. +; +; @author Daniel Vedder +; @date 09/07/2015 + +name-world "Lugwey" + +define-player "Start" + money 50 + place "Gate" + max-health 50 + health 50 + +define-race "Human" + description "Errare humanum est" + intelligence-bonus 1 + +define-class "Scholar" + description "Dubio ergo corgito, corgito ergo sum" + special-item "Paper" + special-item "Quill" + +;; DEVELOPMENT +define-player "Leonardo" + race "Human" + class "Scholar" + item "Dagger" + weapon "Dagger" + money 60 + place "Gate" + +load-file "places.atl" +load-file "items.atl" +load-file "npcs.atl" \ No newline at end of file diff --git a/ATL/Lugwey/npcs.atl b/ATL/Lugwey/npcs.atl new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/ATL/Lugwey/npcs.atl diff --git a/ATL/Lugwey/places.atl b/ATL/Lugwey/places.atl new file mode 100644 index 0000000..c11f1a2 --- /dev/null +++ b/ATL/Lugwey/places.atl @@ -0,0 +1,36 @@ +; The Monastery of Lugwey is the first "real" world I am creating with ATL. +; Its purpose (apart from being playable) is to help with the development of +; Atlantis by showing potential deficits, bringing up new ideas, etc. +; +; This file holds all the place descriptions. +; +; @author Daniel Vedder +; @date 09/07/2015 + +define-place "Gate" + description "An old, partly moss-covered stone wall rises up in front of + you. Set in it, a wooden gate, reinforced with rusty iron strips. + One wing is open, permitting a view into the space beyond. + Behind you, the dusty track leads off into the forest. + + A monk is sitting in the gate house, obviously bored." + neighbour "Forest track" + neighbour "Monastery grounds" + npc "Gatekeeper" + +define-place "Monastery grounds" + description "Paths criss-cross well-kept lawns. Here and there, roses bloom + in a flower bed. On one side stand the monastery buildings with + their calm, ancient dignity. On the other, the gardens, stables + and agricultural outhouses speak of a simple working life." + neighbour "Gate" + neighbour "Chapel" + neighbour "Dormitory" + neighbour "Gardens" + neighbour "Stable" + +define-place "Forest track" + description "A rutted track, scarred by the wheels of many carts, leads + through the forest from the monastery to the village." + neighbour "Gate" + item "Signet ring" \ No newline at end of file diff --git a/ATL/Lugwey/items.atl b/ATL/Lugwey/items.atl new file mode 100644 index 0000000..63b407e --- /dev/null +++ b/ATL/Lugwey/items.atl @@ -0,0 +1,26 @@ +; The Monastery of Lugwey is the first "real" world I am creating with ATL. +; Its purpose (apart from being playable) is to help with the development of +; Atlantis by showing potential deficits, bringing up new ideas, etc. +; +; This file holds all the item descriptions. +; +; @author Daniel Vedder +; @date 09/07/2015 + +define-item "Parchment" + description "Dried animal skins used as paper." + cost 5 + +define-item "Quill" + description "A goose-feather, sharpened at one end to make a pen." + cost 5 + +define-item "Dagger" + description "A long, sharp knife, useful for self defence." + weapon "Yes" + cost 20 + +define-weapon "Dagger" + description "A long, sharp knife, useful for self defence." + type "Knife" + damage 3 \ No newline at end of file diff --git a/ATL/Lugwey/lugwey.atl b/ATL/Lugwey/lugwey.atl new file mode 100644 index 0000000..12f6cd7 --- /dev/null +++ b/ATL/Lugwey/lugwey.atl @@ -0,0 +1,38 @@ +; The Monastery of Lugwey is the first "real" world I am creating with ATL. +; Its purpose (apart from being playable) is to help with the development of +; Atlantis by showing potential deficits, bringing up new ideas, etc. +; +; This is the main world file. +; +; @author Daniel Vedder +; @date 09/07/2015 + +name-world "Lugwey" + +define-player "Start" + money 50 + place "Gate" + max-health 50 + health 50 + +define-race "Human" + description "Errare humanum est" + intelligence-bonus 1 + +define-class "Scholar" + description "Dubio ergo corgito, corgito ergo sum" + special-item "Paper" + special-item "Quill" + +;; DEVELOPMENT +define-player "Leonardo" + race "Human" + class "Scholar" + item "Dagger" + weapon "Dagger" + money 60 + place "Gate" + +load-file "places.atl" +load-file "items.atl" +load-file "npcs.atl" \ No newline at end of file diff --git a/ATL/Lugwey/npcs.atl b/ATL/Lugwey/npcs.atl new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/ATL/Lugwey/npcs.atl diff --git a/ATL/Lugwey/places.atl b/ATL/Lugwey/places.atl new file mode 100644 index 0000000..c11f1a2 --- /dev/null +++ b/ATL/Lugwey/places.atl @@ -0,0 +1,36 @@ +; The Monastery of Lugwey is the first "real" world I am creating with ATL. +; Its purpose (apart from being playable) is to help with the development of +; Atlantis by showing potential deficits, bringing up new ideas, etc. +; +; This file holds all the place descriptions. +; +; @author Daniel Vedder +; @date 09/07/2015 + +define-place "Gate" + description "An old, partly moss-covered stone wall rises up in front of + you. Set in it, a wooden gate, reinforced with rusty iron strips. + One wing is open, permitting a view into the space beyond. + Behind you, the dusty track leads off into the forest. + + A monk is sitting in the gate house, obviously bored." + neighbour "Forest track" + neighbour "Monastery grounds" + npc "Gatekeeper" + +define-place "Monastery grounds" + description "Paths criss-cross well-kept lawns. Here and there, roses bloom + in a flower bed. On one side stand the monastery buildings with + their calm, ancient dignity. On the other, the gardens, stables + and agricultural outhouses speak of a simple working life." + neighbour "Gate" + neighbour "Chapel" + neighbour "Dormitory" + neighbour "Gardens" + neighbour "Stable" + +define-place "Forest track" + description "A rutted track, scarred by the wheels of many carts, leads + through the forest from the monastery to the village." + neighbour "Gate" + item "Signet ring" \ No newline at end of file diff --git a/ATL/conversion/ATL-item-conversion.csv b/ATL/conversion/ATL-item-conversion.csv new file mode 100644 index 0000000..9a50392 --- /dev/null +++ b/ATL/conversion/ATL-item-conversion.csv @@ -0,0 +1,63 @@ +Item, +Name,cost +Rope (20m),5 +Backpack,5 +Knife,10 +Short sword,40 +Long sword,80 +Dagger,20 +Spear,25 +Short bow,30 +Longbow,60 +Slingshot,15 +Throwing knife,15 +Quiver of arrows,20 +Leather armour,60 +Chain mail,120 +Plate armour,200 +Buckler,35 +Full shield,45 +Candles (3x),5 +Matches,1 +Food rations (5x),10 +Grappling hook,15 +Fishing net,25 +Fishing rod,15 +Tent (2 people),30 +Cloak,15 +Hat,10 +Water bottle,5 +Compass,20 +Quill and ink,5 +Parchment,5 +Blanket,5 +Book of Legends,55 +Book of Lore,55 +Medicinal herbs,10 +Bandages (3x),5 +Tea leaves,5 +Sleeping potion,15 +Leather pouch,2 +Face mask,10 +Dye,5 +Cloth,5 +Scissors,15 +Needle and thread,3 +Canvas,8 +String,2 +Hatchet,20 +Map,35 +Pony,100 +Horse,180 +Saddle and bridle,45 +Saddlebag,35 +Handmirror,20 +Magnifying glass,20 +Telescope,40 +Rope ladder,15 +Torches (3x),10 +Staff,10 +Cooking pot,8 +Soap,2 +Towel,5 +Boots,10 diff --git a/ATL/Lugwey/items.atl b/ATL/Lugwey/items.atl new file mode 100644 index 0000000..63b407e --- /dev/null +++ b/ATL/Lugwey/items.atl @@ -0,0 +1,26 @@ +; The Monastery of Lugwey is the first "real" world I am creating with ATL. +; Its purpose (apart from being playable) is to help with the development of +; Atlantis by showing potential deficits, bringing up new ideas, etc. +; +; This file holds all the item descriptions. +; +; @author Daniel Vedder +; @date 09/07/2015 + +define-item "Parchment" + description "Dried animal skins used as paper." + cost 5 + +define-item "Quill" + description "A goose-feather, sharpened at one end to make a pen." + cost 5 + +define-item "Dagger" + description "A long, sharp knife, useful for self defence." + weapon "Yes" + cost 20 + +define-weapon "Dagger" + description "A long, sharp knife, useful for self defence." + type "Knife" + damage 3 \ No newline at end of file diff --git a/ATL/Lugwey/lugwey.atl b/ATL/Lugwey/lugwey.atl new file mode 100644 index 0000000..12f6cd7 --- /dev/null +++ b/ATL/Lugwey/lugwey.atl @@ -0,0 +1,38 @@ +; The Monastery of Lugwey is the first "real" world I am creating with ATL. +; Its purpose (apart from being playable) is to help with the development of +; Atlantis by showing potential deficits, bringing up new ideas, etc. +; +; This is the main world file. +; +; @author Daniel Vedder +; @date 09/07/2015 + +name-world "Lugwey" + +define-player "Start" + money 50 + place "Gate" + max-health 50 + health 50 + +define-race "Human" + description "Errare humanum est" + intelligence-bonus 1 + +define-class "Scholar" + description "Dubio ergo corgito, corgito ergo sum" + special-item "Paper" + special-item "Quill" + +;; DEVELOPMENT +define-player "Leonardo" + race "Human" + class "Scholar" + item "Dagger" + weapon "Dagger" + money 60 + place "Gate" + +load-file "places.atl" +load-file "items.atl" +load-file "npcs.atl" \ No newline at end of file diff --git a/ATL/Lugwey/npcs.atl b/ATL/Lugwey/npcs.atl new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/ATL/Lugwey/npcs.atl diff --git a/ATL/Lugwey/places.atl b/ATL/Lugwey/places.atl new file mode 100644 index 0000000..c11f1a2 --- /dev/null +++ b/ATL/Lugwey/places.atl @@ -0,0 +1,36 @@ +; The Monastery of Lugwey is the first "real" world I am creating with ATL. +; Its purpose (apart from being playable) is to help with the development of +; Atlantis by showing potential deficits, bringing up new ideas, etc. +; +; This file holds all the place descriptions. +; +; @author Daniel Vedder +; @date 09/07/2015 + +define-place "Gate" + description "An old, partly moss-covered stone wall rises up in front of + you. Set in it, a wooden gate, reinforced with rusty iron strips. + One wing is open, permitting a view into the space beyond. + Behind you, the dusty track leads off into the forest. + + A monk is sitting in the gate house, obviously bored." + neighbour "Forest track" + neighbour "Monastery grounds" + npc "Gatekeeper" + +define-place "Monastery grounds" + description "Paths criss-cross well-kept lawns. Here and there, roses bloom + in a flower bed. On one side stand the monastery buildings with + their calm, ancient dignity. On the other, the gardens, stables + and agricultural outhouses speak of a simple working life." + neighbour "Gate" + neighbour "Chapel" + neighbour "Dormitory" + neighbour "Gardens" + neighbour "Stable" + +define-place "Forest track" + description "A rutted track, scarred by the wheels of many carts, leads + through the forest from the monastery to the village." + neighbour "Gate" + item "Signet ring" \ No newline at end of file diff --git a/ATL/conversion/ATL-item-conversion.csv b/ATL/conversion/ATL-item-conversion.csv new file mode 100644 index 0000000..9a50392 --- /dev/null +++ b/ATL/conversion/ATL-item-conversion.csv @@ -0,0 +1,63 @@ +Item, +Name,cost +Rope (20m),5 +Backpack,5 +Knife,10 +Short sword,40 +Long sword,80 +Dagger,20 +Spear,25 +Short bow,30 +Longbow,60 +Slingshot,15 +Throwing knife,15 +Quiver of arrows,20 +Leather armour,60 +Chain mail,120 +Plate armour,200 +Buckler,35 +Full shield,45 +Candles (3x),5 +Matches,1 +Food rations (5x),10 +Grappling hook,15 +Fishing net,25 +Fishing rod,15 +Tent (2 people),30 +Cloak,15 +Hat,10 +Water bottle,5 +Compass,20 +Quill and ink,5 +Parchment,5 +Blanket,5 +Book of Legends,55 +Book of Lore,55 +Medicinal herbs,10 +Bandages (3x),5 +Tea leaves,5 +Sleeping potion,15 +Leather pouch,2 +Face mask,10 +Dye,5 +Cloth,5 +Scissors,15 +Needle and thread,3 +Canvas,8 +String,2 +Hatchet,20 +Map,35 +Pony,100 +Horse,180 +Saddle and bridle,45 +Saddlebag,35 +Handmirror,20 +Magnifying glass,20 +Telescope,40 +Rope ladder,15 +Torches (3x),10 +Staff,10 +Cooking pot,8 +Soap,2 +Towel,5 +Boots,10 diff --git a/ATL/conversion/ATL-item-conversion.ods b/ATL/conversion/ATL-item-conversion.ods new file mode 100644 index 0000000..a5442c2 --- /dev/null +++ b/ATL/conversion/ATL-item-conversion.ods Binary files differ diff --git a/ATL/Lugwey/items.atl b/ATL/Lugwey/items.atl new file mode 100644 index 0000000..63b407e --- /dev/null +++ b/ATL/Lugwey/items.atl @@ -0,0 +1,26 @@ +; The Monastery of Lugwey is the first "real" world I am creating with ATL. +; Its purpose (apart from being playable) is to help with the development of +; Atlantis by showing potential deficits, bringing up new ideas, etc. +; +; This file holds all the item descriptions. +; +; @author Daniel Vedder +; @date 09/07/2015 + +define-item "Parchment" + description "Dried animal skins used as paper." + cost 5 + +define-item "Quill" + description "A goose-feather, sharpened at one end to make a pen." + cost 5 + +define-item "Dagger" + description "A long, sharp knife, useful for self defence." + weapon "Yes" + cost 20 + +define-weapon "Dagger" + description "A long, sharp knife, useful for self defence." + type "Knife" + damage 3 \ No newline at end of file diff --git a/ATL/Lugwey/lugwey.atl b/ATL/Lugwey/lugwey.atl new file mode 100644 index 0000000..12f6cd7 --- /dev/null +++ b/ATL/Lugwey/lugwey.atl @@ -0,0 +1,38 @@ +; The Monastery of Lugwey is the first "real" world I am creating with ATL. +; Its purpose (apart from being playable) is to help with the development of +; Atlantis by showing potential deficits, bringing up new ideas, etc. +; +; This is the main world file. +; +; @author Daniel Vedder +; @date 09/07/2015 + +name-world "Lugwey" + +define-player "Start" + money 50 + place "Gate" + max-health 50 + health 50 + +define-race "Human" + description "Errare humanum est" + intelligence-bonus 1 + +define-class "Scholar" + description "Dubio ergo corgito, corgito ergo sum" + special-item "Paper" + special-item "Quill" + +;; DEVELOPMENT +define-player "Leonardo" + race "Human" + class "Scholar" + item "Dagger" + weapon "Dagger" + money 60 + place "Gate" + +load-file "places.atl" +load-file "items.atl" +load-file "npcs.atl" \ No newline at end of file diff --git a/ATL/Lugwey/npcs.atl b/ATL/Lugwey/npcs.atl new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/ATL/Lugwey/npcs.atl diff --git a/ATL/Lugwey/places.atl b/ATL/Lugwey/places.atl new file mode 100644 index 0000000..c11f1a2 --- /dev/null +++ b/ATL/Lugwey/places.atl @@ -0,0 +1,36 @@ +; The Monastery of Lugwey is the first "real" world I am creating with ATL. +; Its purpose (apart from being playable) is to help with the development of +; Atlantis by showing potential deficits, bringing up new ideas, etc. +; +; This file holds all the place descriptions. +; +; @author Daniel Vedder +; @date 09/07/2015 + +define-place "Gate" + description "An old, partly moss-covered stone wall rises up in front of + you. Set in it, a wooden gate, reinforced with rusty iron strips. + One wing is open, permitting a view into the space beyond. + Behind you, the dusty track leads off into the forest. + + A monk is sitting in the gate house, obviously bored." + neighbour "Forest track" + neighbour "Monastery grounds" + npc "Gatekeeper" + +define-place "Monastery grounds" + description "Paths criss-cross well-kept lawns. Here and there, roses bloom + in a flower bed. On one side stand the monastery buildings with + their calm, ancient dignity. On the other, the gardens, stables + and agricultural outhouses speak of a simple working life." + neighbour "Gate" + neighbour "Chapel" + neighbour "Dormitory" + neighbour "Gardens" + neighbour "Stable" + +define-place "Forest track" + description "A rutted track, scarred by the wheels of many carts, leads + through the forest from the monastery to the village." + neighbour "Gate" + item "Signet ring" \ No newline at end of file diff --git a/ATL/conversion/ATL-item-conversion.csv b/ATL/conversion/ATL-item-conversion.csv new file mode 100644 index 0000000..9a50392 --- /dev/null +++ b/ATL/conversion/ATL-item-conversion.csv @@ -0,0 +1,63 @@ +Item, +Name,cost +Rope (20m),5 +Backpack,5 +Knife,10 +Short sword,40 +Long sword,80 +Dagger,20 +Spear,25 +Short bow,30 +Longbow,60 +Slingshot,15 +Throwing knife,15 +Quiver of arrows,20 +Leather armour,60 +Chain mail,120 +Plate armour,200 +Buckler,35 +Full shield,45 +Candles (3x),5 +Matches,1 +Food rations (5x),10 +Grappling hook,15 +Fishing net,25 +Fishing rod,15 +Tent (2 people),30 +Cloak,15 +Hat,10 +Water bottle,5 +Compass,20 +Quill and ink,5 +Parchment,5 +Blanket,5 +Book of Legends,55 +Book of Lore,55 +Medicinal herbs,10 +Bandages (3x),5 +Tea leaves,5 +Sleeping potion,15 +Leather pouch,2 +Face mask,10 +Dye,5 +Cloth,5 +Scissors,15 +Needle and thread,3 +Canvas,8 +String,2 +Hatchet,20 +Map,35 +Pony,100 +Horse,180 +Saddle and bridle,45 +Saddlebag,35 +Handmirror,20 +Magnifying glass,20 +Telescope,40 +Rope ladder,15 +Torches (3x),10 +Staff,10 +Cooking pot,8 +Soap,2 +Towel,5 +Boots,10 diff --git a/ATL/conversion/ATL-item-conversion.ods b/ATL/conversion/ATL-item-conversion.ods new file mode 100644 index 0000000..a5442c2 --- /dev/null +++ b/ATL/conversion/ATL-item-conversion.ods Binary files differ diff --git a/ATL/conversion/spreadsheet-export b/ATL/conversion/spreadsheet-export new file mode 100644 index 0000000..9228e79 --- /dev/null +++ b/ATL/conversion/spreadsheet-export @@ -0,0 +1,62 @@ +Rope (20m) 5 +Backpack 5 +Knife 10 +Short sword 40 +Long sword 80 +Dagger 20 +Spear 25 +Short bow 30 +Longbow 60 +Slingshot 15 +Throwing knife 15 +Quiver of arrows 20 +Leather armour 60 +Chain mail 120 +Plate armour 200 +Buckler 35 +Full shield 45 +Candles (3x) 5 +Matches 1 +Food rations (5x) 10 +Grappling hook 15 +Fishing net 25 +Fishing rod 15 +Tent (2 people) 30 +Cloak 15 +Hat 10 +Water bottle 5 +Compass 20 +Quill and ink 5 +Parchment 5 +Blanket 5 +Book of Legends 55 +Book of Lore 55 +Medicinal herbs 10 +Bandages (3x) 5 +Tea leaves 5 +Sleeping potion 15 +Leather pouch 2 +Face mask 10 +Dye 5 +Cloth 5 +Scissors 15 +Needle and thread 3 +Canvas 8 +String 2 +Hatchet 20 +Map 35 +Pony 100 +Horse 180 +Saddle and bridle 45 +Saddlebag 35 +Handmirror 20 +Magnifying glass 20 +Telescope 40 +Rope ladder 15 +Torches (3x) 10 +Staff 10 +Cooking pot 8 +Soap 2 +Towel 5 +Boots 10 + diff --git a/ATL/Lugwey/items.atl b/ATL/Lugwey/items.atl new file mode 100644 index 0000000..63b407e --- /dev/null +++ b/ATL/Lugwey/items.atl @@ -0,0 +1,26 @@ +; The Monastery of Lugwey is the first "real" world I am creating with ATL. +; Its purpose (apart from being playable) is to help with the development of +; Atlantis by showing potential deficits, bringing up new ideas, etc. +; +; This file holds all the item descriptions. +; +; @author Daniel Vedder +; @date 09/07/2015 + +define-item "Parchment" + description "Dried animal skins used as paper." + cost 5 + +define-item "Quill" + description "A goose-feather, sharpened at one end to make a pen." + cost 5 + +define-item "Dagger" + description "A long, sharp knife, useful for self defence." + weapon "Yes" + cost 20 + +define-weapon "Dagger" + description "A long, sharp knife, useful for self defence." + type "Knife" + damage 3 \ No newline at end of file diff --git a/ATL/Lugwey/lugwey.atl b/ATL/Lugwey/lugwey.atl new file mode 100644 index 0000000..12f6cd7 --- /dev/null +++ b/ATL/Lugwey/lugwey.atl @@ -0,0 +1,38 @@ +; The Monastery of Lugwey is the first "real" world I am creating with ATL. +; Its purpose (apart from being playable) is to help with the development of +; Atlantis by showing potential deficits, bringing up new ideas, etc. +; +; This is the main world file. +; +; @author Daniel Vedder +; @date 09/07/2015 + +name-world "Lugwey" + +define-player "Start" + money 50 + place "Gate" + max-health 50 + health 50 + +define-race "Human" + description "Errare humanum est" + intelligence-bonus 1 + +define-class "Scholar" + description "Dubio ergo corgito, corgito ergo sum" + special-item "Paper" + special-item "Quill" + +;; DEVELOPMENT +define-player "Leonardo" + race "Human" + class "Scholar" + item "Dagger" + weapon "Dagger" + money 60 + place "Gate" + +load-file "places.atl" +load-file "items.atl" +load-file "npcs.atl" \ No newline at end of file diff --git a/ATL/Lugwey/npcs.atl b/ATL/Lugwey/npcs.atl new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/ATL/Lugwey/npcs.atl diff --git a/ATL/Lugwey/places.atl b/ATL/Lugwey/places.atl new file mode 100644 index 0000000..c11f1a2 --- /dev/null +++ b/ATL/Lugwey/places.atl @@ -0,0 +1,36 @@ +; The Monastery of Lugwey is the first "real" world I am creating with ATL. +; Its purpose (apart from being playable) is to help with the development of +; Atlantis by showing potential deficits, bringing up new ideas, etc. +; +; This file holds all the place descriptions. +; +; @author Daniel Vedder +; @date 09/07/2015 + +define-place "Gate" + description "An old, partly moss-covered stone wall rises up in front of + you. Set in it, a wooden gate, reinforced with rusty iron strips. + One wing is open, permitting a view into the space beyond. + Behind you, the dusty track leads off into the forest. + + A monk is sitting in the gate house, obviously bored." + neighbour "Forest track" + neighbour "Monastery grounds" + npc "Gatekeeper" + +define-place "Monastery grounds" + description "Paths criss-cross well-kept lawns. Here and there, roses bloom + in a flower bed. On one side stand the monastery buildings with + their calm, ancient dignity. On the other, the gardens, stables + and agricultural outhouses speak of a simple working life." + neighbour "Gate" + neighbour "Chapel" + neighbour "Dormitory" + neighbour "Gardens" + neighbour "Stable" + +define-place "Forest track" + description "A rutted track, scarred by the wheels of many carts, leads + through the forest from the monastery to the village." + neighbour "Gate" + item "Signet ring" \ No newline at end of file diff --git a/ATL/conversion/ATL-item-conversion.csv b/ATL/conversion/ATL-item-conversion.csv new file mode 100644 index 0000000..9a50392 --- /dev/null +++ b/ATL/conversion/ATL-item-conversion.csv @@ -0,0 +1,63 @@ +Item, +Name,cost +Rope (20m),5 +Backpack,5 +Knife,10 +Short sword,40 +Long sword,80 +Dagger,20 +Spear,25 +Short bow,30 +Longbow,60 +Slingshot,15 +Throwing knife,15 +Quiver of arrows,20 +Leather armour,60 +Chain mail,120 +Plate armour,200 +Buckler,35 +Full shield,45 +Candles (3x),5 +Matches,1 +Food rations (5x),10 +Grappling hook,15 +Fishing net,25 +Fishing rod,15 +Tent (2 people),30 +Cloak,15 +Hat,10 +Water bottle,5 +Compass,20 +Quill and ink,5 +Parchment,5 +Blanket,5 +Book of Legends,55 +Book of Lore,55 +Medicinal herbs,10 +Bandages (3x),5 +Tea leaves,5 +Sleeping potion,15 +Leather pouch,2 +Face mask,10 +Dye,5 +Cloth,5 +Scissors,15 +Needle and thread,3 +Canvas,8 +String,2 +Hatchet,20 +Map,35 +Pony,100 +Horse,180 +Saddle and bridle,45 +Saddlebag,35 +Handmirror,20 +Magnifying glass,20 +Telescope,40 +Rope ladder,15 +Torches (3x),10 +Staff,10 +Cooking pot,8 +Soap,2 +Towel,5 +Boots,10 diff --git a/ATL/conversion/ATL-item-conversion.ods b/ATL/conversion/ATL-item-conversion.ods new file mode 100644 index 0000000..a5442c2 --- /dev/null +++ b/ATL/conversion/ATL-item-conversion.ods Binary files differ diff --git a/ATL/conversion/spreadsheet-export b/ATL/conversion/spreadsheet-export new file mode 100644 index 0000000..9228e79 --- /dev/null +++ b/ATL/conversion/spreadsheet-export @@ -0,0 +1,62 @@ +Rope (20m) 5 +Backpack 5 +Knife 10 +Short sword 40 +Long sword 80 +Dagger 20 +Spear 25 +Short bow 30 +Longbow 60 +Slingshot 15 +Throwing knife 15 +Quiver of arrows 20 +Leather armour 60 +Chain mail 120 +Plate armour 200 +Buckler 35 +Full shield 45 +Candles (3x) 5 +Matches 1 +Food rations (5x) 10 +Grappling hook 15 +Fishing net 25 +Fishing rod 15 +Tent (2 people) 30 +Cloak 15 +Hat 10 +Water bottle 5 +Compass 20 +Quill and ink 5 +Parchment 5 +Blanket 5 +Book of Legends 55 +Book of Lore 55 +Medicinal herbs 10 +Bandages (3x) 5 +Tea leaves 5 +Sleeping potion 15 +Leather pouch 2 +Face mask 10 +Dye 5 +Cloth 5 +Scissors 15 +Needle and thread 3 +Canvas 8 +String 2 +Hatchet 20 +Map 35 +Pony 100 +Horse 180 +Saddle and bridle 45 +Saddlebag 35 +Handmirror 20 +Magnifying glass 20 +Telescope 40 +Rope ladder 15 +Torches (3x) 10 +Staff 10 +Cooking pot 8 +Soap 2 +Towel 5 +Boots 10 + diff --git a/ATL/name_generator.py b/ATL/name_generator.py new file mode 100644 index 0000000..d34e37d --- /dev/null +++ b/ATL/name_generator.py @@ -0,0 +1,98 @@ +''' +This script is meant to help me write "Crown of the Khadalun". It randomly +combines letters and syllables to suggest new fantasy names. +@author: Daniel Vedder +@version 1.1 +''' + +import random +import sys + +global vowels, consonants +vowels = ("a", "e", "i", "o", "u") +consonants = ("b", "c", "d", "f", "g", "h", "j", "k", "l", "m", "n", "p", "q", "r", "s", "t", "v", "w", "x", "y", "z") + +''' +Create a random syllable between 1 and 3 letters long +''' +def create_syllable(): + global vowels, consonants + length = random.randint(1, 3) + syllable = "" + if length == 1: + syllable = vowels[random.randint(0, 4)] + else: + for l in range(1, length+1, 1): + next_letter = "" + if l == 1 or l == 3: + next_letter = consonants[random.randint(0, 20)] + elif l == 2: + next_letter = vowels[random.randint(0, 4)] + syllable = syllable+next_letter + return syllable + +''' +Join several syllables together to form a word +@param length The number of syllables (0 for random up to 5) +''' +def create_word(length=0): + if length == 0: + length = random.randint(1, 5) + word = "" + for i in range(0, length+1, 1): + next_syllable = create_syllable() + word = word+next_syllable + if word[-1] in vowels and random.randint(0, 1) == 1: + word = word+consonants[random.randint(0, 20)] + word = word[0].upper()+word[1:] + return word + +''' +Interactively suggest a list of names to the user, saving those +he/she chooses to file. +''' +def interactive(): + welcome_text = """ +Welcome! This script will suggest a series of random names to +you. After each name, type 'y' if you want to keep it, otherwise +type 'n' or just hit ENTER. To stop, type 'quit' or 'done'. +'cancel' stops the session without saving anything.""" + print(welcome_text) + names = "" + next_name = create_word() + keep = "" + cancel = ("quit", "done", "exit", "cancel") + while keep not in cancel: + keep = input(">> "+next_name+": ") + if keep == "y" or keep == "Y": + names = names+next_name+"\n" + next_name = create_word() + if keep == "cancel": + print("Script cancelled.") + sys.exit() + try: + name_file = open("suggested_names.txt", "a") + name_file.write(names) + name_file.close() + except: + print("Error saving name list to suggested_names.txt!") + print("Goodbye!") + +''' +Print a list of random names +@param n Number of words, default: 10 +''' +def batch(n=10): + wordlist = create_word() + for n in range(0, n-1, 1): + wordlist = wordlist+", "+create_word() + print(wordlist) + +if __name__ == "__main__": + if "-i" in sys.argv or "--interactive" in sys.argv: + interactive() + elif "-n" in sys.argv: + n = sys.argv[sys.argv.index("-n")+1] + batch(int(n)) + else: + batch() diff --git a/ATL/Lugwey/items.atl b/ATL/Lugwey/items.atl new file mode 100644 index 0000000..63b407e --- /dev/null +++ b/ATL/Lugwey/items.atl @@ -0,0 +1,26 @@ +; The Monastery of Lugwey is the first "real" world I am creating with ATL. +; Its purpose (apart from being playable) is to help with the development of +; Atlantis by showing potential deficits, bringing up new ideas, etc. +; +; This file holds all the item descriptions. +; +; @author Daniel Vedder +; @date 09/07/2015 + +define-item "Parchment" + description "Dried animal skins used as paper." + cost 5 + +define-item "Quill" + description "A goose-feather, sharpened at one end to make a pen." + cost 5 + +define-item "Dagger" + description "A long, sharp knife, useful for self defence." + weapon "Yes" + cost 20 + +define-weapon "Dagger" + description "A long, sharp knife, useful for self defence." + type "Knife" + damage 3 \ No newline at end of file diff --git a/ATL/Lugwey/lugwey.atl b/ATL/Lugwey/lugwey.atl new file mode 100644 index 0000000..12f6cd7 --- /dev/null +++ b/ATL/Lugwey/lugwey.atl @@ -0,0 +1,38 @@ +; The Monastery of Lugwey is the first "real" world I am creating with ATL. +; Its purpose (apart from being playable) is to help with the development of +; Atlantis by showing potential deficits, bringing up new ideas, etc. +; +; This is the main world file. +; +; @author Daniel Vedder +; @date 09/07/2015 + +name-world "Lugwey" + +define-player "Start" + money 50 + place "Gate" + max-health 50 + health 50 + +define-race "Human" + description "Errare humanum est" + intelligence-bonus 1 + +define-class "Scholar" + description "Dubio ergo corgito, corgito ergo sum" + special-item "Paper" + special-item "Quill" + +;; DEVELOPMENT +define-player "Leonardo" + race "Human" + class "Scholar" + item "Dagger" + weapon "Dagger" + money 60 + place "Gate" + +load-file "places.atl" +load-file "items.atl" +load-file "npcs.atl" \ No newline at end of file diff --git a/ATL/Lugwey/npcs.atl b/ATL/Lugwey/npcs.atl new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/ATL/Lugwey/npcs.atl diff --git a/ATL/Lugwey/places.atl b/ATL/Lugwey/places.atl new file mode 100644 index 0000000..c11f1a2 --- /dev/null +++ b/ATL/Lugwey/places.atl @@ -0,0 +1,36 @@ +; The Monastery of Lugwey is the first "real" world I am creating with ATL. +; Its purpose (apart from being playable) is to help with the development of +; Atlantis by showing potential deficits, bringing up new ideas, etc. +; +; This file holds all the place descriptions. +; +; @author Daniel Vedder +; @date 09/07/2015 + +define-place "Gate" + description "An old, partly moss-covered stone wall rises up in front of + you. Set in it, a wooden gate, reinforced with rusty iron strips. + One wing is open, permitting a view into the space beyond. + Behind you, the dusty track leads off into the forest. + + A monk is sitting in the gate house, obviously bored." + neighbour "Forest track" + neighbour "Monastery grounds" + npc "Gatekeeper" + +define-place "Monastery grounds" + description "Paths criss-cross well-kept lawns. Here and there, roses bloom + in a flower bed. On one side stand the monastery buildings with + their calm, ancient dignity. On the other, the gardens, stables + and agricultural outhouses speak of a simple working life." + neighbour "Gate" + neighbour "Chapel" + neighbour "Dormitory" + neighbour "Gardens" + neighbour "Stable" + +define-place "Forest track" + description "A rutted track, scarred by the wheels of many carts, leads + through the forest from the monastery to the village." + neighbour "Gate" + item "Signet ring" \ No newline at end of file diff --git a/ATL/conversion/ATL-item-conversion.csv b/ATL/conversion/ATL-item-conversion.csv new file mode 100644 index 0000000..9a50392 --- /dev/null +++ b/ATL/conversion/ATL-item-conversion.csv @@ -0,0 +1,63 @@ +Item, +Name,cost +Rope (20m),5 +Backpack,5 +Knife,10 +Short sword,40 +Long sword,80 +Dagger,20 +Spear,25 +Short bow,30 +Longbow,60 +Slingshot,15 +Throwing knife,15 +Quiver of arrows,20 +Leather armour,60 +Chain mail,120 +Plate armour,200 +Buckler,35 +Full shield,45 +Candles (3x),5 +Matches,1 +Food rations (5x),10 +Grappling hook,15 +Fishing net,25 +Fishing rod,15 +Tent (2 people),30 +Cloak,15 +Hat,10 +Water bottle,5 +Compass,20 +Quill and ink,5 +Parchment,5 +Blanket,5 +Book of Legends,55 +Book of Lore,55 +Medicinal herbs,10 +Bandages (3x),5 +Tea leaves,5 +Sleeping potion,15 +Leather pouch,2 +Face mask,10 +Dye,5 +Cloth,5 +Scissors,15 +Needle and thread,3 +Canvas,8 +String,2 +Hatchet,20 +Map,35 +Pony,100 +Horse,180 +Saddle and bridle,45 +Saddlebag,35 +Handmirror,20 +Magnifying glass,20 +Telescope,40 +Rope ladder,15 +Torches (3x),10 +Staff,10 +Cooking pot,8 +Soap,2 +Towel,5 +Boots,10 diff --git a/ATL/conversion/ATL-item-conversion.ods b/ATL/conversion/ATL-item-conversion.ods new file mode 100644 index 0000000..a5442c2 --- /dev/null +++ b/ATL/conversion/ATL-item-conversion.ods Binary files differ diff --git a/ATL/conversion/spreadsheet-export b/ATL/conversion/spreadsheet-export new file mode 100644 index 0000000..9228e79 --- /dev/null +++ b/ATL/conversion/spreadsheet-export @@ -0,0 +1,62 @@ +Rope (20m) 5 +Backpack 5 +Knife 10 +Short sword 40 +Long sword 80 +Dagger 20 +Spear 25 +Short bow 30 +Longbow 60 +Slingshot 15 +Throwing knife 15 +Quiver of arrows 20 +Leather armour 60 +Chain mail 120 +Plate armour 200 +Buckler 35 +Full shield 45 +Candles (3x) 5 +Matches 1 +Food rations (5x) 10 +Grappling hook 15 +Fishing net 25 +Fishing rod 15 +Tent (2 people) 30 +Cloak 15 +Hat 10 +Water bottle 5 +Compass 20 +Quill and ink 5 +Parchment 5 +Blanket 5 +Book of Legends 55 +Book of Lore 55 +Medicinal herbs 10 +Bandages (3x) 5 +Tea leaves 5 +Sleeping potion 15 +Leather pouch 2 +Face mask 10 +Dye 5 +Cloth 5 +Scissors 15 +Needle and thread 3 +Canvas 8 +String 2 +Hatchet 20 +Map 35 +Pony 100 +Horse 180 +Saddle and bridle 45 +Saddlebag 35 +Handmirror 20 +Magnifying glass 20 +Telescope 40 +Rope ladder 15 +Torches (3x) 10 +Staff 10 +Cooking pot 8 +Soap 2 +Towel 5 +Boots 10 + diff --git a/ATL/name_generator.py b/ATL/name_generator.py new file mode 100644 index 0000000..d34e37d --- /dev/null +++ b/ATL/name_generator.py @@ -0,0 +1,98 @@ +''' +This script is meant to help me write "Crown of the Khadalun". It randomly +combines letters and syllables to suggest new fantasy names. +@author: Daniel Vedder +@version 1.1 +''' + +import random +import sys + +global vowels, consonants +vowels = ("a", "e", "i", "o", "u") +consonants = ("b", "c", "d", "f", "g", "h", "j", "k", "l", "m", "n", "p", "q", "r", "s", "t", "v", "w", "x", "y", "z") + +''' +Create a random syllable between 1 and 3 letters long +''' +def create_syllable(): + global vowels, consonants + length = random.randint(1, 3) + syllable = "" + if length == 1: + syllable = vowels[random.randint(0, 4)] + else: + for l in range(1, length+1, 1): + next_letter = "" + if l == 1 or l == 3: + next_letter = consonants[random.randint(0, 20)] + elif l == 2: + next_letter = vowels[random.randint(0, 4)] + syllable = syllable+next_letter + return syllable + +''' +Join several syllables together to form a word +@param length The number of syllables (0 for random up to 5) +''' +def create_word(length=0): + if length == 0: + length = random.randint(1, 5) + word = "" + for i in range(0, length+1, 1): + next_syllable = create_syllable() + word = word+next_syllable + if word[-1] in vowels and random.randint(0, 1) == 1: + word = word+consonants[random.randint(0, 20)] + word = word[0].upper()+word[1:] + return word + +''' +Interactively suggest a list of names to the user, saving those +he/she chooses to file. +''' +def interactive(): + welcome_text = """ +Welcome! This script will suggest a series of random names to +you. After each name, type 'y' if you want to keep it, otherwise +type 'n' or just hit ENTER. To stop, type 'quit' or 'done'. +'cancel' stops the session without saving anything.""" + print(welcome_text) + names = "" + next_name = create_word() + keep = "" + cancel = ("quit", "done", "exit", "cancel") + while keep not in cancel: + keep = input(">> "+next_name+": ") + if keep == "y" or keep == "Y": + names = names+next_name+"\n" + next_name = create_word() + if keep == "cancel": + print("Script cancelled.") + sys.exit() + try: + name_file = open("suggested_names.txt", "a") + name_file.write(names) + name_file.close() + except: + print("Error saving name list to suggested_names.txt!") + print("Goodbye!") + +''' +Print a list of random names +@param n Number of words, default: 10 +''' +def batch(n=10): + wordlist = create_word() + for n in range(0, n-1, 1): + wordlist = wordlist+", "+create_word() + print(wordlist) + +if __name__ == "__main__": + if "-i" in sys.argv or "--interactive" in sys.argv: + interactive() + elif "-n" in sys.argv: + n = sys.argv[sys.argv.index("-n")+1] + batch(int(n)) + else: + batch() diff --git a/ATL/suggested_names.txt b/ATL/suggested_names.txt new file mode 100644 index 0000000..4d29d4b --- /dev/null +++ b/ATL/suggested_names.txt @@ -0,0 +1,18 @@ +Icaduwlin +Feloh +Iacud +Himki +Utum +Ceuc +Vebo +Ioalim +Ohuk +Odi +Onad +Ohi +Yucac +Alonda +Busu +Upatranuraf +Ovuk +Fivrihog diff --git a/ATL/Lugwey/items.atl b/ATL/Lugwey/items.atl new file mode 100644 index 0000000..63b407e --- /dev/null +++ b/ATL/Lugwey/items.atl @@ -0,0 +1,26 @@ +; The Monastery of Lugwey is the first "real" world I am creating with ATL. +; Its purpose (apart from being playable) is to help with the development of +; Atlantis by showing potential deficits, bringing up new ideas, etc. +; +; This file holds all the item descriptions. +; +; @author Daniel Vedder +; @date 09/07/2015 + +define-item "Parchment" + description "Dried animal skins used as paper." + cost 5 + +define-item "Quill" + description "A goose-feather, sharpened at one end to make a pen." + cost 5 + +define-item "Dagger" + description "A long, sharp knife, useful for self defence." + weapon "Yes" + cost 20 + +define-weapon "Dagger" + description "A long, sharp knife, useful for self defence." + type "Knife" + damage 3 \ No newline at end of file diff --git a/ATL/Lugwey/lugwey.atl b/ATL/Lugwey/lugwey.atl new file mode 100644 index 0000000..12f6cd7 --- /dev/null +++ b/ATL/Lugwey/lugwey.atl @@ -0,0 +1,38 @@ +; The Monastery of Lugwey is the first "real" world I am creating with ATL. +; Its purpose (apart from being playable) is to help with the development of +; Atlantis by showing potential deficits, bringing up new ideas, etc. +; +; This is the main world file. +; +; @author Daniel Vedder +; @date 09/07/2015 + +name-world "Lugwey" + +define-player "Start" + money 50 + place "Gate" + max-health 50 + health 50 + +define-race "Human" + description "Errare humanum est" + intelligence-bonus 1 + +define-class "Scholar" + description "Dubio ergo corgito, corgito ergo sum" + special-item "Paper" + special-item "Quill" + +;; DEVELOPMENT +define-player "Leonardo" + race "Human" + class "Scholar" + item "Dagger" + weapon "Dagger" + money 60 + place "Gate" + +load-file "places.atl" +load-file "items.atl" +load-file "npcs.atl" \ No newline at end of file diff --git a/ATL/Lugwey/npcs.atl b/ATL/Lugwey/npcs.atl new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/ATL/Lugwey/npcs.atl diff --git a/ATL/Lugwey/places.atl b/ATL/Lugwey/places.atl new file mode 100644 index 0000000..c11f1a2 --- /dev/null +++ b/ATL/Lugwey/places.atl @@ -0,0 +1,36 @@ +; The Monastery of Lugwey is the first "real" world I am creating with ATL. +; Its purpose (apart from being playable) is to help with the development of +; Atlantis by showing potential deficits, bringing up new ideas, etc. +; +; This file holds all the place descriptions. +; +; @author Daniel Vedder +; @date 09/07/2015 + +define-place "Gate" + description "An old, partly moss-covered stone wall rises up in front of + you. Set in it, a wooden gate, reinforced with rusty iron strips. + One wing is open, permitting a view into the space beyond. + Behind you, the dusty track leads off into the forest. + + A monk is sitting in the gate house, obviously bored." + neighbour "Forest track" + neighbour "Monastery grounds" + npc "Gatekeeper" + +define-place "Monastery grounds" + description "Paths criss-cross well-kept lawns. Here and there, roses bloom + in a flower bed. On one side stand the monastery buildings with + their calm, ancient dignity. On the other, the gardens, stables + and agricultural outhouses speak of a simple working life." + neighbour "Gate" + neighbour "Chapel" + neighbour "Dormitory" + neighbour "Gardens" + neighbour "Stable" + +define-place "Forest track" + description "A rutted track, scarred by the wheels of many carts, leads + through the forest from the monastery to the village." + neighbour "Gate" + item "Signet ring" \ No newline at end of file diff --git a/ATL/conversion/ATL-item-conversion.csv b/ATL/conversion/ATL-item-conversion.csv new file mode 100644 index 0000000..9a50392 --- /dev/null +++ b/ATL/conversion/ATL-item-conversion.csv @@ -0,0 +1,63 @@ +Item, +Name,cost +Rope (20m),5 +Backpack,5 +Knife,10 +Short sword,40 +Long sword,80 +Dagger,20 +Spear,25 +Short bow,30 +Longbow,60 +Slingshot,15 +Throwing knife,15 +Quiver of arrows,20 +Leather armour,60 +Chain mail,120 +Plate armour,200 +Buckler,35 +Full shield,45 +Candles (3x),5 +Matches,1 +Food rations (5x),10 +Grappling hook,15 +Fishing net,25 +Fishing rod,15 +Tent (2 people),30 +Cloak,15 +Hat,10 +Water bottle,5 +Compass,20 +Quill and ink,5 +Parchment,5 +Blanket,5 +Book of Legends,55 +Book of Lore,55 +Medicinal herbs,10 +Bandages (3x),5 +Tea leaves,5 +Sleeping potion,15 +Leather pouch,2 +Face mask,10 +Dye,5 +Cloth,5 +Scissors,15 +Needle and thread,3 +Canvas,8 +String,2 +Hatchet,20 +Map,35 +Pony,100 +Horse,180 +Saddle and bridle,45 +Saddlebag,35 +Handmirror,20 +Magnifying glass,20 +Telescope,40 +Rope ladder,15 +Torches (3x),10 +Staff,10 +Cooking pot,8 +Soap,2 +Towel,5 +Boots,10 diff --git a/ATL/conversion/ATL-item-conversion.ods b/ATL/conversion/ATL-item-conversion.ods new file mode 100644 index 0000000..a5442c2 --- /dev/null +++ b/ATL/conversion/ATL-item-conversion.ods Binary files differ diff --git a/ATL/conversion/spreadsheet-export b/ATL/conversion/spreadsheet-export new file mode 100644 index 0000000..9228e79 --- /dev/null +++ b/ATL/conversion/spreadsheet-export @@ -0,0 +1,62 @@ +Rope (20m) 5 +Backpack 5 +Knife 10 +Short sword 40 +Long sword 80 +Dagger 20 +Spear 25 +Short bow 30 +Longbow 60 +Slingshot 15 +Throwing knife 15 +Quiver of arrows 20 +Leather armour 60 +Chain mail 120 +Plate armour 200 +Buckler 35 +Full shield 45 +Candles (3x) 5 +Matches 1 +Food rations (5x) 10 +Grappling hook 15 +Fishing net 25 +Fishing rod 15 +Tent (2 people) 30 +Cloak 15 +Hat 10 +Water bottle 5 +Compass 20 +Quill and ink 5 +Parchment 5 +Blanket 5 +Book of Legends 55 +Book of Lore 55 +Medicinal herbs 10 +Bandages (3x) 5 +Tea leaves 5 +Sleeping potion 15 +Leather pouch 2 +Face mask 10 +Dye 5 +Cloth 5 +Scissors 15 +Needle and thread 3 +Canvas 8 +String 2 +Hatchet 20 +Map 35 +Pony 100 +Horse 180 +Saddle and bridle 45 +Saddlebag 35 +Handmirror 20 +Magnifying glass 20 +Telescope 40 +Rope ladder 15 +Torches (3x) 10 +Staff 10 +Cooking pot 8 +Soap 2 +Towel 5 +Boots 10 + diff --git a/ATL/name_generator.py b/ATL/name_generator.py new file mode 100644 index 0000000..d34e37d --- /dev/null +++ b/ATL/name_generator.py @@ -0,0 +1,98 @@ +''' +This script is meant to help me write "Crown of the Khadalun". It randomly +combines letters and syllables to suggest new fantasy names. +@author: Daniel Vedder +@version 1.1 +''' + +import random +import sys + +global vowels, consonants +vowels = ("a", "e", "i", "o", "u") +consonants = ("b", "c", "d", "f", "g", "h", "j", "k", "l", "m", "n", "p", "q", "r", "s", "t", "v", "w", "x", "y", "z") + +''' +Create a random syllable between 1 and 3 letters long +''' +def create_syllable(): + global vowels, consonants + length = random.randint(1, 3) + syllable = "" + if length == 1: + syllable = vowels[random.randint(0, 4)] + else: + for l in range(1, length+1, 1): + next_letter = "" + if l == 1 or l == 3: + next_letter = consonants[random.randint(0, 20)] + elif l == 2: + next_letter = vowels[random.randint(0, 4)] + syllable = syllable+next_letter + return syllable + +''' +Join several syllables together to form a word +@param length The number of syllables (0 for random up to 5) +''' +def create_word(length=0): + if length == 0: + length = random.randint(1, 5) + word = "" + for i in range(0, length+1, 1): + next_syllable = create_syllable() + word = word+next_syllable + if word[-1] in vowels and random.randint(0, 1) == 1: + word = word+consonants[random.randint(0, 20)] + word = word[0].upper()+word[1:] + return word + +''' +Interactively suggest a list of names to the user, saving those +he/she chooses to file. +''' +def interactive(): + welcome_text = """ +Welcome! This script will suggest a series of random names to +you. After each name, type 'y' if you want to keep it, otherwise +type 'n' or just hit ENTER. To stop, type 'quit' or 'done'. +'cancel' stops the session without saving anything.""" + print(welcome_text) + names = "" + next_name = create_word() + keep = "" + cancel = ("quit", "done", "exit", "cancel") + while keep not in cancel: + keep = input(">> "+next_name+": ") + if keep == "y" or keep == "Y": + names = names+next_name+"\n" + next_name = create_word() + if keep == "cancel": + print("Script cancelled.") + sys.exit() + try: + name_file = open("suggested_names.txt", "a") + name_file.write(names) + name_file.close() + except: + print("Error saving name list to suggested_names.txt!") + print("Goodbye!") + +''' +Print a list of random names +@param n Number of words, default: 10 +''' +def batch(n=10): + wordlist = create_word() + for n in range(0, n-1, 1): + wordlist = wordlist+", "+create_word() + print(wordlist) + +if __name__ == "__main__": + if "-i" in sys.argv or "--interactive" in sys.argv: + interactive() + elif "-n" in sys.argv: + n = sys.argv[sys.argv.index("-n")+1] + batch(int(n)) + else: + batch() diff --git a/ATL/suggested_names.txt b/ATL/suggested_names.txt new file mode 100644 index 0000000..4d29d4b --- /dev/null +++ b/ATL/suggested_names.txt @@ -0,0 +1,18 @@ +Icaduwlin +Feloh +Iacud +Himki +Utum +Ceuc +Vebo +Ioalim +Ohuk +Odi +Onad +Ohi +Yucac +Alonda +Busu +Upatranuraf +Ovuk +Fivrihog diff --git a/ATL/test/creator-test.atl b/ATL/test/creator-test.atl new file mode 100644 index 0000000..6209e7c --- /dev/null +++ b/ATL/test/creator-test.atl @@ -0,0 +1,185 @@ +;; This code has been automatically generated by the +;; Atlantis world creator. + +define-item "Rope (20m)" + cost 5 + +define-item "Backpack" + cost 5 + +define-item "Knife" + cost 10 + +define-item "Short sword" + cost 40 + +define-item "Long sword" + cost 80 + +define-item "Dagger" + cost 20 + +define-item "Spear" + cost 25 + +define-item "Short bow" + cost 30 + +define-item "Longbow" + cost 60 + +define-item "Slingshot" + cost 15 + +define-item "Throwing knife" + cost 15 + +define-item "Quiver of arrows" + cost 20 + +define-item "Leather armour" + cost 60 + +define-item "Chain mail" + cost 120 + +define-item "Plate armour" + cost 200 + +define-item "Buckler" + cost 35 + +define-item "Full shield" + cost 45 + +define-item "Candles (3x)" + cost 5 + +define-item "Matches" + cost 1 + +define-item "Food rations (5x)" + cost 10 + +define-item "Grappling hook" + cost 15 + +define-item "Fishing net" + cost 25 + +define-item "Fishing rod" + cost 15 + +define-item "Tent (2 people)" + cost 30 + +define-item "Cloak" + cost 15 + +define-item "Hat" + cost 10 + +define-item "Water bottle" + cost 5 + +define-item "Compass" + cost 20 + +define-item "Quill and ink" + cost 5 + +define-item "Parchment" + cost 5 + +define-item "Blanket" + cost 5 + +define-item "Book of Legends" + cost 55 + +define-item "Book of Lore" + cost 55 + +define-item "Medicinal herbs" + cost 10 + +define-item "Bandages (3x)" + cost 5 + +define-item "Tea leaves" + cost 5 + +define-item "Sleeping potion" + cost 15 + +define-item "Leather pouch" + cost 2 + +define-item "Face mask" + cost 10 + +define-item "Dye" + cost 5 + +define-item "Cloth" + cost 5 + +define-item "Scissors" + cost 15 + +define-item "Needle and thread" + cost 3 + +define-item "Canvas" + cost 8 + +define-item "String" + cost 2 + +define-item "Hatchet" + cost 20 + +define-item "Map" + cost 35 + +define-item "Pony" + cost 100 + +define-item "Horse" + cost 180 + +define-item "Saddle and bridle" + cost 45 + +define-item "Saddlebag" + cost 35 + +define-item "Handmirror" + cost 20 + +define-item "Magnifying glass" + cost 20 + +define-item "Telescope" + cost 40 + +define-item "Rope ladder" + cost 15 + +define-item "Torches (3x)" + cost 10 + +define-item "Staff" + cost 10 + +define-item "Cooking pot" + cost 8 + +define-item "Soap" + cost 2 + +define-item "Towel" + cost 5 + +define-item "Boots" + cost 10 \ No newline at end of file diff --git a/ATL/Lugwey/items.atl b/ATL/Lugwey/items.atl new file mode 100644 index 0000000..63b407e --- /dev/null +++ b/ATL/Lugwey/items.atl @@ -0,0 +1,26 @@ +; The Monastery of Lugwey is the first "real" world I am creating with ATL. +; Its purpose (apart from being playable) is to help with the development of +; Atlantis by showing potential deficits, bringing up new ideas, etc. +; +; This file holds all the item descriptions. +; +; @author Daniel Vedder +; @date 09/07/2015 + +define-item "Parchment" + description "Dried animal skins used as paper." + cost 5 + +define-item "Quill" + description "A goose-feather, sharpened at one end to make a pen." + cost 5 + +define-item "Dagger" + description "A long, sharp knife, useful for self defence." + weapon "Yes" + cost 20 + +define-weapon "Dagger" + description "A long, sharp knife, useful for self defence." + type "Knife" + damage 3 \ No newline at end of file diff --git a/ATL/Lugwey/lugwey.atl b/ATL/Lugwey/lugwey.atl new file mode 100644 index 0000000..12f6cd7 --- /dev/null +++ b/ATL/Lugwey/lugwey.atl @@ -0,0 +1,38 @@ +; The Monastery of Lugwey is the first "real" world I am creating with ATL. +; Its purpose (apart from being playable) is to help with the development of +; Atlantis by showing potential deficits, bringing up new ideas, etc. +; +; This is the main world file. +; +; @author Daniel Vedder +; @date 09/07/2015 + +name-world "Lugwey" + +define-player "Start" + money 50 + place "Gate" + max-health 50 + health 50 + +define-race "Human" + description "Errare humanum est" + intelligence-bonus 1 + +define-class "Scholar" + description "Dubio ergo corgito, corgito ergo sum" + special-item "Paper" + special-item "Quill" + +;; DEVELOPMENT +define-player "Leonardo" + race "Human" + class "Scholar" + item "Dagger" + weapon "Dagger" + money 60 + place "Gate" + +load-file "places.atl" +load-file "items.atl" +load-file "npcs.atl" \ No newline at end of file diff --git a/ATL/Lugwey/npcs.atl b/ATL/Lugwey/npcs.atl new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/ATL/Lugwey/npcs.atl diff --git a/ATL/Lugwey/places.atl b/ATL/Lugwey/places.atl new file mode 100644 index 0000000..c11f1a2 --- /dev/null +++ b/ATL/Lugwey/places.atl @@ -0,0 +1,36 @@ +; The Monastery of Lugwey is the first "real" world I am creating with ATL. +; Its purpose (apart from being playable) is to help with the development of +; Atlantis by showing potential deficits, bringing up new ideas, etc. +; +; This file holds all the place descriptions. +; +; @author Daniel Vedder +; @date 09/07/2015 + +define-place "Gate" + description "An old, partly moss-covered stone wall rises up in front of + you. Set in it, a wooden gate, reinforced with rusty iron strips. + One wing is open, permitting a view into the space beyond. + Behind you, the dusty track leads off into the forest. + + A monk is sitting in the gate house, obviously bored." + neighbour "Forest track" + neighbour "Monastery grounds" + npc "Gatekeeper" + +define-place "Monastery grounds" + description "Paths criss-cross well-kept lawns. Here and there, roses bloom + in a flower bed. On one side stand the monastery buildings with + their calm, ancient dignity. On the other, the gardens, stables + and agricultural outhouses speak of a simple working life." + neighbour "Gate" + neighbour "Chapel" + neighbour "Dormitory" + neighbour "Gardens" + neighbour "Stable" + +define-place "Forest track" + description "A rutted track, scarred by the wheels of many carts, leads + through the forest from the monastery to the village." + neighbour "Gate" + item "Signet ring" \ No newline at end of file diff --git a/ATL/conversion/ATL-item-conversion.csv b/ATL/conversion/ATL-item-conversion.csv new file mode 100644 index 0000000..9a50392 --- /dev/null +++ b/ATL/conversion/ATL-item-conversion.csv @@ -0,0 +1,63 @@ +Item, +Name,cost +Rope (20m),5 +Backpack,5 +Knife,10 +Short sword,40 +Long sword,80 +Dagger,20 +Spear,25 +Short bow,30 +Longbow,60 +Slingshot,15 +Throwing knife,15 +Quiver of arrows,20 +Leather armour,60 +Chain mail,120 +Plate armour,200 +Buckler,35 +Full shield,45 +Candles (3x),5 +Matches,1 +Food rations (5x),10 +Grappling hook,15 +Fishing net,25 +Fishing rod,15 +Tent (2 people),30 +Cloak,15 +Hat,10 +Water bottle,5 +Compass,20 +Quill and ink,5 +Parchment,5 +Blanket,5 +Book of Legends,55 +Book of Lore,55 +Medicinal herbs,10 +Bandages (3x),5 +Tea leaves,5 +Sleeping potion,15 +Leather pouch,2 +Face mask,10 +Dye,5 +Cloth,5 +Scissors,15 +Needle and thread,3 +Canvas,8 +String,2 +Hatchet,20 +Map,35 +Pony,100 +Horse,180 +Saddle and bridle,45 +Saddlebag,35 +Handmirror,20 +Magnifying glass,20 +Telescope,40 +Rope ladder,15 +Torches (3x),10 +Staff,10 +Cooking pot,8 +Soap,2 +Towel,5 +Boots,10 diff --git a/ATL/conversion/ATL-item-conversion.ods b/ATL/conversion/ATL-item-conversion.ods new file mode 100644 index 0000000..a5442c2 --- /dev/null +++ b/ATL/conversion/ATL-item-conversion.ods Binary files differ diff --git a/ATL/conversion/spreadsheet-export b/ATL/conversion/spreadsheet-export new file mode 100644 index 0000000..9228e79 --- /dev/null +++ b/ATL/conversion/spreadsheet-export @@ -0,0 +1,62 @@ +Rope (20m) 5 +Backpack 5 +Knife 10 +Short sword 40 +Long sword 80 +Dagger 20 +Spear 25 +Short bow 30 +Longbow 60 +Slingshot 15 +Throwing knife 15 +Quiver of arrows 20 +Leather armour 60 +Chain mail 120 +Plate armour 200 +Buckler 35 +Full shield 45 +Candles (3x) 5 +Matches 1 +Food rations (5x) 10 +Grappling hook 15 +Fishing net 25 +Fishing rod 15 +Tent (2 people) 30 +Cloak 15 +Hat 10 +Water bottle 5 +Compass 20 +Quill and ink 5 +Parchment 5 +Blanket 5 +Book of Legends 55 +Book of Lore 55 +Medicinal herbs 10 +Bandages (3x) 5 +Tea leaves 5 +Sleeping potion 15 +Leather pouch 2 +Face mask 10 +Dye 5 +Cloth 5 +Scissors 15 +Needle and thread 3 +Canvas 8 +String 2 +Hatchet 20 +Map 35 +Pony 100 +Horse 180 +Saddle and bridle 45 +Saddlebag 35 +Handmirror 20 +Magnifying glass 20 +Telescope 40 +Rope ladder 15 +Torches (3x) 10 +Staff 10 +Cooking pot 8 +Soap 2 +Towel 5 +Boots 10 + diff --git a/ATL/name_generator.py b/ATL/name_generator.py new file mode 100644 index 0000000..d34e37d --- /dev/null +++ b/ATL/name_generator.py @@ -0,0 +1,98 @@ +''' +This script is meant to help me write "Crown of the Khadalun". It randomly +combines letters and syllables to suggest new fantasy names. +@author: Daniel Vedder +@version 1.1 +''' + +import random +import sys + +global vowels, consonants +vowels = ("a", "e", "i", "o", "u") +consonants = ("b", "c", "d", "f", "g", "h", "j", "k", "l", "m", "n", "p", "q", "r", "s", "t", "v", "w", "x", "y", "z") + +''' +Create a random syllable between 1 and 3 letters long +''' +def create_syllable(): + global vowels, consonants + length = random.randint(1, 3) + syllable = "" + if length == 1: + syllable = vowels[random.randint(0, 4)] + else: + for l in range(1, length+1, 1): + next_letter = "" + if l == 1 or l == 3: + next_letter = consonants[random.randint(0, 20)] + elif l == 2: + next_letter = vowels[random.randint(0, 4)] + syllable = syllable+next_letter + return syllable + +''' +Join several syllables together to form a word +@param length The number of syllables (0 for random up to 5) +''' +def create_word(length=0): + if length == 0: + length = random.randint(1, 5) + word = "" + for i in range(0, length+1, 1): + next_syllable = create_syllable() + word = word+next_syllable + if word[-1] in vowels and random.randint(0, 1) == 1: + word = word+consonants[random.randint(0, 20)] + word = word[0].upper()+word[1:] + return word + +''' +Interactively suggest a list of names to the user, saving those +he/she chooses to file. +''' +def interactive(): + welcome_text = """ +Welcome! This script will suggest a series of random names to +you. After each name, type 'y' if you want to keep it, otherwise +type 'n' or just hit ENTER. To stop, type 'quit' or 'done'. +'cancel' stops the session without saving anything.""" + print(welcome_text) + names = "" + next_name = create_word() + keep = "" + cancel = ("quit", "done", "exit", "cancel") + while keep not in cancel: + keep = input(">> "+next_name+": ") + if keep == "y" or keep == "Y": + names = names+next_name+"\n" + next_name = create_word() + if keep == "cancel": + print("Script cancelled.") + sys.exit() + try: + name_file = open("suggested_names.txt", "a") + name_file.write(names) + name_file.close() + except: + print("Error saving name list to suggested_names.txt!") + print("Goodbye!") + +''' +Print a list of random names +@param n Number of words, default: 10 +''' +def batch(n=10): + wordlist = create_word() + for n in range(0, n-1, 1): + wordlist = wordlist+", "+create_word() + print(wordlist) + +if __name__ == "__main__": + if "-i" in sys.argv or "--interactive" in sys.argv: + interactive() + elif "-n" in sys.argv: + n = sys.argv[sys.argv.index("-n")+1] + batch(int(n)) + else: + batch() diff --git a/ATL/suggested_names.txt b/ATL/suggested_names.txt new file mode 100644 index 0000000..4d29d4b --- /dev/null +++ b/ATL/suggested_names.txt @@ -0,0 +1,18 @@ +Icaduwlin +Feloh +Iacud +Himki +Utum +Ceuc +Vebo +Ioalim +Ohuk +Odi +Onad +Ohi +Yucac +Alonda +Busu +Upatranuraf +Ovuk +Fivrihog diff --git a/ATL/test/creator-test.atl b/ATL/test/creator-test.atl new file mode 100644 index 0000000..6209e7c --- /dev/null +++ b/ATL/test/creator-test.atl @@ -0,0 +1,185 @@ +;; This code has been automatically generated by the +;; Atlantis world creator. + +define-item "Rope (20m)" + cost 5 + +define-item "Backpack" + cost 5 + +define-item "Knife" + cost 10 + +define-item "Short sword" + cost 40 + +define-item "Long sword" + cost 80 + +define-item "Dagger" + cost 20 + +define-item "Spear" + cost 25 + +define-item "Short bow" + cost 30 + +define-item "Longbow" + cost 60 + +define-item "Slingshot" + cost 15 + +define-item "Throwing knife" + cost 15 + +define-item "Quiver of arrows" + cost 20 + +define-item "Leather armour" + cost 60 + +define-item "Chain mail" + cost 120 + +define-item "Plate armour" + cost 200 + +define-item "Buckler" + cost 35 + +define-item "Full shield" + cost 45 + +define-item "Candles (3x)" + cost 5 + +define-item "Matches" + cost 1 + +define-item "Food rations (5x)" + cost 10 + +define-item "Grappling hook" + cost 15 + +define-item "Fishing net" + cost 25 + +define-item "Fishing rod" + cost 15 + +define-item "Tent (2 people)" + cost 30 + +define-item "Cloak" + cost 15 + +define-item "Hat" + cost 10 + +define-item "Water bottle" + cost 5 + +define-item "Compass" + cost 20 + +define-item "Quill and ink" + cost 5 + +define-item "Parchment" + cost 5 + +define-item "Blanket" + cost 5 + +define-item "Book of Legends" + cost 55 + +define-item "Book of Lore" + cost 55 + +define-item "Medicinal herbs" + cost 10 + +define-item "Bandages (3x)" + cost 5 + +define-item "Tea leaves" + cost 5 + +define-item "Sleeping potion" + cost 15 + +define-item "Leather pouch" + cost 2 + +define-item "Face mask" + cost 10 + +define-item "Dye" + cost 5 + +define-item "Cloth" + cost 5 + +define-item "Scissors" + cost 15 + +define-item "Needle and thread" + cost 3 + +define-item "Canvas" + cost 8 + +define-item "String" + cost 2 + +define-item "Hatchet" + cost 20 + +define-item "Map" + cost 35 + +define-item "Pony" + cost 100 + +define-item "Horse" + cost 180 + +define-item "Saddle and bridle" + cost 45 + +define-item "Saddlebag" + cost 35 + +define-item "Handmirror" + cost 20 + +define-item "Magnifying glass" + cost 20 + +define-item "Telescope" + cost 40 + +define-item "Rope ladder" + cost 15 + +define-item "Torches (3x)" + cost 10 + +define-item "Staff" + cost 10 + +define-item "Cooking pot" + cost 8 + +define-item "Soap" + cost 2 + +define-item "Towel" + cost 5 + +define-item "Boots" + cost 10 \ No newline at end of file diff --git a/ATL/test/example.atl b/ATL/test/example.atl new file mode 100644 index 0000000..3101edd --- /dev/null +++ b/ATL/test/example.atl @@ -0,0 +1,72 @@ +# This is an example Atlantis file - I use it to explore what the language +# should end up looking like. + +load races.atl +load classes.atl + + +define-quest Kill hellhound + objective kill hellhound + reward gold 300 + + +define-spell Ray of death + type kill + min-intelligence 12 + success-rate 35 + + +define-npc Hades + say Oh, amazing, you actually got here! Who did you bribe? + sell 30 Ambrosia + quest Kill hellhound + + +define-item Scroll of light + value 80 + add-experience 20 + add-spell Ray of death + +define-item Ambrosia + category Food + add-health 5 + + +define-monster Hellhound + armor-class 8 + strength 10 + melee-weapon 2 claws + experience 50 + spawn 2 + aggression 60 + +define-monster Fury + armor-class 5 + strength 8 + melee-weapon 10 fire whip + experience 74 + spawn 0.8 + aggression 30 + + +define-place Nowhere + description Welcome to Nowhere! You are in the void, the space between \ +the worlds. Around you is black. Black, except for one tiny pin-prick of light \ +to the north. + neighbour Elysium + +define-place Elysium + description Congratulations! You have achieved Elysium! + neighbour Nowhere + neighbour Fields of punishment + npc Hades + item Scroll of light + +define-place Fields of punishment + description You really, really don't want to end up here... + neighbour Elysium + monster Hellhound + monster Fury + + +start-place Elysium \ No newline at end of file diff --git a/ATL/Lugwey/items.atl b/ATL/Lugwey/items.atl new file mode 100644 index 0000000..63b407e --- /dev/null +++ b/ATL/Lugwey/items.atl @@ -0,0 +1,26 @@ +; The Monastery of Lugwey is the first "real" world I am creating with ATL. +; Its purpose (apart from being playable) is to help with the development of +; Atlantis by showing potential deficits, bringing up new ideas, etc. +; +; This file holds all the item descriptions. +; +; @author Daniel Vedder +; @date 09/07/2015 + +define-item "Parchment" + description "Dried animal skins used as paper." + cost 5 + +define-item "Quill" + description "A goose-feather, sharpened at one end to make a pen." + cost 5 + +define-item "Dagger" + description "A long, sharp knife, useful for self defence." + weapon "Yes" + cost 20 + +define-weapon "Dagger" + description "A long, sharp knife, useful for self defence." + type "Knife" + damage 3 \ No newline at end of file diff --git a/ATL/Lugwey/lugwey.atl b/ATL/Lugwey/lugwey.atl new file mode 100644 index 0000000..12f6cd7 --- /dev/null +++ b/ATL/Lugwey/lugwey.atl @@ -0,0 +1,38 @@ +; The Monastery of Lugwey is the first "real" world I am creating with ATL. +; Its purpose (apart from being playable) is to help with the development of +; Atlantis by showing potential deficits, bringing up new ideas, etc. +; +; This is the main world file. +; +; @author Daniel Vedder +; @date 09/07/2015 + +name-world "Lugwey" + +define-player "Start" + money 50 + place "Gate" + max-health 50 + health 50 + +define-race "Human" + description "Errare humanum est" + intelligence-bonus 1 + +define-class "Scholar" + description "Dubio ergo corgito, corgito ergo sum" + special-item "Paper" + special-item "Quill" + +;; DEVELOPMENT +define-player "Leonardo" + race "Human" + class "Scholar" + item "Dagger" + weapon "Dagger" + money 60 + place "Gate" + +load-file "places.atl" +load-file "items.atl" +load-file "npcs.atl" \ No newline at end of file diff --git a/ATL/Lugwey/npcs.atl b/ATL/Lugwey/npcs.atl new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/ATL/Lugwey/npcs.atl diff --git a/ATL/Lugwey/places.atl b/ATL/Lugwey/places.atl new file mode 100644 index 0000000..c11f1a2 --- /dev/null +++ b/ATL/Lugwey/places.atl @@ -0,0 +1,36 @@ +; The Monastery of Lugwey is the first "real" world I am creating with ATL. +; Its purpose (apart from being playable) is to help with the development of +; Atlantis by showing potential deficits, bringing up new ideas, etc. +; +; This file holds all the place descriptions. +; +; @author Daniel Vedder +; @date 09/07/2015 + +define-place "Gate" + description "An old, partly moss-covered stone wall rises up in front of + you. Set in it, a wooden gate, reinforced with rusty iron strips. + One wing is open, permitting a view into the space beyond. + Behind you, the dusty track leads off into the forest. + + A monk is sitting in the gate house, obviously bored." + neighbour "Forest track" + neighbour "Monastery grounds" + npc "Gatekeeper" + +define-place "Monastery grounds" + description "Paths criss-cross well-kept lawns. Here and there, roses bloom + in a flower bed. On one side stand the monastery buildings with + their calm, ancient dignity. On the other, the gardens, stables + and agricultural outhouses speak of a simple working life." + neighbour "Gate" + neighbour "Chapel" + neighbour "Dormitory" + neighbour "Gardens" + neighbour "Stable" + +define-place "Forest track" + description "A rutted track, scarred by the wheels of many carts, leads + through the forest from the monastery to the village." + neighbour "Gate" + item "Signet ring" \ No newline at end of file diff --git a/ATL/conversion/ATL-item-conversion.csv b/ATL/conversion/ATL-item-conversion.csv new file mode 100644 index 0000000..9a50392 --- /dev/null +++ b/ATL/conversion/ATL-item-conversion.csv @@ -0,0 +1,63 @@ +Item, +Name,cost +Rope (20m),5 +Backpack,5 +Knife,10 +Short sword,40 +Long sword,80 +Dagger,20 +Spear,25 +Short bow,30 +Longbow,60 +Slingshot,15 +Throwing knife,15 +Quiver of arrows,20 +Leather armour,60 +Chain mail,120 +Plate armour,200 +Buckler,35 +Full shield,45 +Candles (3x),5 +Matches,1 +Food rations (5x),10 +Grappling hook,15 +Fishing net,25 +Fishing rod,15 +Tent (2 people),30 +Cloak,15 +Hat,10 +Water bottle,5 +Compass,20 +Quill and ink,5 +Parchment,5 +Blanket,5 +Book of Legends,55 +Book of Lore,55 +Medicinal herbs,10 +Bandages (3x),5 +Tea leaves,5 +Sleeping potion,15 +Leather pouch,2 +Face mask,10 +Dye,5 +Cloth,5 +Scissors,15 +Needle and thread,3 +Canvas,8 +String,2 +Hatchet,20 +Map,35 +Pony,100 +Horse,180 +Saddle and bridle,45 +Saddlebag,35 +Handmirror,20 +Magnifying glass,20 +Telescope,40 +Rope ladder,15 +Torches (3x),10 +Staff,10 +Cooking pot,8 +Soap,2 +Towel,5 +Boots,10 diff --git a/ATL/conversion/ATL-item-conversion.ods b/ATL/conversion/ATL-item-conversion.ods new file mode 100644 index 0000000..a5442c2 --- /dev/null +++ b/ATL/conversion/ATL-item-conversion.ods Binary files differ diff --git a/ATL/conversion/spreadsheet-export b/ATL/conversion/spreadsheet-export new file mode 100644 index 0000000..9228e79 --- /dev/null +++ b/ATL/conversion/spreadsheet-export @@ -0,0 +1,62 @@ +Rope (20m) 5 +Backpack 5 +Knife 10 +Short sword 40 +Long sword 80 +Dagger 20 +Spear 25 +Short bow 30 +Longbow 60 +Slingshot 15 +Throwing knife 15 +Quiver of arrows 20 +Leather armour 60 +Chain mail 120 +Plate armour 200 +Buckler 35 +Full shield 45 +Candles (3x) 5 +Matches 1 +Food rations (5x) 10 +Grappling hook 15 +Fishing net 25 +Fishing rod 15 +Tent (2 people) 30 +Cloak 15 +Hat 10 +Water bottle 5 +Compass 20 +Quill and ink 5 +Parchment 5 +Blanket 5 +Book of Legends 55 +Book of Lore 55 +Medicinal herbs 10 +Bandages (3x) 5 +Tea leaves 5 +Sleeping potion 15 +Leather pouch 2 +Face mask 10 +Dye 5 +Cloth 5 +Scissors 15 +Needle and thread 3 +Canvas 8 +String 2 +Hatchet 20 +Map 35 +Pony 100 +Horse 180 +Saddle and bridle 45 +Saddlebag 35 +Handmirror 20 +Magnifying glass 20 +Telescope 40 +Rope ladder 15 +Torches (3x) 10 +Staff 10 +Cooking pot 8 +Soap 2 +Towel 5 +Boots 10 + diff --git a/ATL/name_generator.py b/ATL/name_generator.py new file mode 100644 index 0000000..d34e37d --- /dev/null +++ b/ATL/name_generator.py @@ -0,0 +1,98 @@ +''' +This script is meant to help me write "Crown of the Khadalun". It randomly +combines letters and syllables to suggest new fantasy names. +@author: Daniel Vedder +@version 1.1 +''' + +import random +import sys + +global vowels, consonants +vowels = ("a", "e", "i", "o", "u") +consonants = ("b", "c", "d", "f", "g", "h", "j", "k", "l", "m", "n", "p", "q", "r", "s", "t", "v", "w", "x", "y", "z") + +''' +Create a random syllable between 1 and 3 letters long +''' +def create_syllable(): + global vowels, consonants + length = random.randint(1, 3) + syllable = "" + if length == 1: + syllable = vowels[random.randint(0, 4)] + else: + for l in range(1, length+1, 1): + next_letter = "" + if l == 1 or l == 3: + next_letter = consonants[random.randint(0, 20)] + elif l == 2: + next_letter = vowels[random.randint(0, 4)] + syllable = syllable+next_letter + return syllable + +''' +Join several syllables together to form a word +@param length The number of syllables (0 for random up to 5) +''' +def create_word(length=0): + if length == 0: + length = random.randint(1, 5) + word = "" + for i in range(0, length+1, 1): + next_syllable = create_syllable() + word = word+next_syllable + if word[-1] in vowels and random.randint(0, 1) == 1: + word = word+consonants[random.randint(0, 20)] + word = word[0].upper()+word[1:] + return word + +''' +Interactively suggest a list of names to the user, saving those +he/she chooses to file. +''' +def interactive(): + welcome_text = """ +Welcome! This script will suggest a series of random names to +you. After each name, type 'y' if you want to keep it, otherwise +type 'n' or just hit ENTER. To stop, type 'quit' or 'done'. +'cancel' stops the session without saving anything.""" + print(welcome_text) + names = "" + next_name = create_word() + keep = "" + cancel = ("quit", "done", "exit", "cancel") + while keep not in cancel: + keep = input(">> "+next_name+": ") + if keep == "y" or keep == "Y": + names = names+next_name+"\n" + next_name = create_word() + if keep == "cancel": + print("Script cancelled.") + sys.exit() + try: + name_file = open("suggested_names.txt", "a") + name_file.write(names) + name_file.close() + except: + print("Error saving name list to suggested_names.txt!") + print("Goodbye!") + +''' +Print a list of random names +@param n Number of words, default: 10 +''' +def batch(n=10): + wordlist = create_word() + for n in range(0, n-1, 1): + wordlist = wordlist+", "+create_word() + print(wordlist) + +if __name__ == "__main__": + if "-i" in sys.argv or "--interactive" in sys.argv: + interactive() + elif "-n" in sys.argv: + n = sys.argv[sys.argv.index("-n")+1] + batch(int(n)) + else: + batch() diff --git a/ATL/suggested_names.txt b/ATL/suggested_names.txt new file mode 100644 index 0000000..4d29d4b --- /dev/null +++ b/ATL/suggested_names.txt @@ -0,0 +1,18 @@ +Icaduwlin +Feloh +Iacud +Himki +Utum +Ceuc +Vebo +Ioalim +Ohuk +Odi +Onad +Ohi +Yucac +Alonda +Busu +Upatranuraf +Ovuk +Fivrihog diff --git a/ATL/test/creator-test.atl b/ATL/test/creator-test.atl new file mode 100644 index 0000000..6209e7c --- /dev/null +++ b/ATL/test/creator-test.atl @@ -0,0 +1,185 @@ +;; This code has been automatically generated by the +;; Atlantis world creator. + +define-item "Rope (20m)" + cost 5 + +define-item "Backpack" + cost 5 + +define-item "Knife" + cost 10 + +define-item "Short sword" + cost 40 + +define-item "Long sword" + cost 80 + +define-item "Dagger" + cost 20 + +define-item "Spear" + cost 25 + +define-item "Short bow" + cost 30 + +define-item "Longbow" + cost 60 + +define-item "Slingshot" + cost 15 + +define-item "Throwing knife" + cost 15 + +define-item "Quiver of arrows" + cost 20 + +define-item "Leather armour" + cost 60 + +define-item "Chain mail" + cost 120 + +define-item "Plate armour" + cost 200 + +define-item "Buckler" + cost 35 + +define-item "Full shield" + cost 45 + +define-item "Candles (3x)" + cost 5 + +define-item "Matches" + cost 1 + +define-item "Food rations (5x)" + cost 10 + +define-item "Grappling hook" + cost 15 + +define-item "Fishing net" + cost 25 + +define-item "Fishing rod" + cost 15 + +define-item "Tent (2 people)" + cost 30 + +define-item "Cloak" + cost 15 + +define-item "Hat" + cost 10 + +define-item "Water bottle" + cost 5 + +define-item "Compass" + cost 20 + +define-item "Quill and ink" + cost 5 + +define-item "Parchment" + cost 5 + +define-item "Blanket" + cost 5 + +define-item "Book of Legends" + cost 55 + +define-item "Book of Lore" + cost 55 + +define-item "Medicinal herbs" + cost 10 + +define-item "Bandages (3x)" + cost 5 + +define-item "Tea leaves" + cost 5 + +define-item "Sleeping potion" + cost 15 + +define-item "Leather pouch" + cost 2 + +define-item "Face mask" + cost 10 + +define-item "Dye" + cost 5 + +define-item "Cloth" + cost 5 + +define-item "Scissors" + cost 15 + +define-item "Needle and thread" + cost 3 + +define-item "Canvas" + cost 8 + +define-item "String" + cost 2 + +define-item "Hatchet" + cost 20 + +define-item "Map" + cost 35 + +define-item "Pony" + cost 100 + +define-item "Horse" + cost 180 + +define-item "Saddle and bridle" + cost 45 + +define-item "Saddlebag" + cost 35 + +define-item "Handmirror" + cost 20 + +define-item "Magnifying glass" + cost 20 + +define-item "Telescope" + cost 40 + +define-item "Rope ladder" + cost 15 + +define-item "Torches (3x)" + cost 10 + +define-item "Staff" + cost 10 + +define-item "Cooking pot" + cost 8 + +define-item "Soap" + cost 2 + +define-item "Towel" + cost 5 + +define-item "Boots" + cost 10 \ No newline at end of file diff --git a/ATL/test/example.atl b/ATL/test/example.atl new file mode 100644 index 0000000..3101edd --- /dev/null +++ b/ATL/test/example.atl @@ -0,0 +1,72 @@ +# This is an example Atlantis file - I use it to explore what the language +# should end up looking like. + +load races.atl +load classes.atl + + +define-quest Kill hellhound + objective kill hellhound + reward gold 300 + + +define-spell Ray of death + type kill + min-intelligence 12 + success-rate 35 + + +define-npc Hades + say Oh, amazing, you actually got here! Who did you bribe? + sell 30 Ambrosia + quest Kill hellhound + + +define-item Scroll of light + value 80 + add-experience 20 + add-spell Ray of death + +define-item Ambrosia + category Food + add-health 5 + + +define-monster Hellhound + armor-class 8 + strength 10 + melee-weapon 2 claws + experience 50 + spawn 2 + aggression 60 + +define-monster Fury + armor-class 5 + strength 8 + melee-weapon 10 fire whip + experience 74 + spawn 0.8 + aggression 30 + + +define-place Nowhere + description Welcome to Nowhere! You are in the void, the space between \ +the worlds. Around you is black. Black, except for one tiny pin-prick of light \ +to the north. + neighbour Elysium + +define-place Elysium + description Congratulations! You have achieved Elysium! + neighbour Nowhere + neighbour Fields of punishment + npc Hades + item Scroll of light + +define-place Fields of punishment + description You really, really don't want to end up here... + neighbour Elysium + monster Hellhound + monster Fury + + +start-place Elysium \ No newline at end of file diff --git a/ATL/test/game-objects.atl b/ATL/test/game-objects.atl new file mode 100644 index 0000000..19a648a --- /dev/null +++ b/ATL/test/game-objects.atl @@ -0,0 +1,51 @@ +; This module defines items, NPCs, monsters and weapons for my +; Atlantis test world. +; @author Daniel Vedder +; @date 02/06/2015 + +define-monster "Fury" + description "Hades' messengers, torturers, assassins. Beware!" + health 10 + dexterity 20 + strength 10 + aggression 30 + armour-class 3 + weapon "fire-whip" + +define-weapon "fire-whip" + description "A 10-foot long whip, blazing with magical fire" + type "whip" + damage 2 + +define-item "Anaklusmos" + description "Riptide, a sword for heroes!" + weapon "yes" + +define-item "Lightning bolt" + description "Zeus lightning bolt - the most powerful weapon of the universe!" + weapon "yes" + +define-weapon "Anaklusmos" + description "Riptide, a sword for heroes!" + type "sword" + damage 4 + +define-weapon "Lightning bolt" ; primarily for debugging + description "Zeus lightning bolt - the most powerful weapon of the universe!" + type "magic" + damage 40 + +define-npc "Hades" + description "Hades, Lord of the Dead!" + says "Beware, mortal - do not tempt me!" + +define-npc "Charon" + description "A robe-clad ghoul, dread ferryman of the Styx." + says "..." + +define-npc "Persephone" ;testing the shop system + description "Hades' beautiful wife, bringer of summer." + says "Welcome, my friend from the upper world!" + sells "Sleeping potion" + sells "Handmirror" + sells "Book of Lore" \ No newline at end of file diff --git a/ATL/Lugwey/items.atl b/ATL/Lugwey/items.atl new file mode 100644 index 0000000..63b407e --- /dev/null +++ b/ATL/Lugwey/items.atl @@ -0,0 +1,26 @@ +; The Monastery of Lugwey is the first "real" world I am creating with ATL. +; Its purpose (apart from being playable) is to help with the development of +; Atlantis by showing potential deficits, bringing up new ideas, etc. +; +; This file holds all the item descriptions. +; +; @author Daniel Vedder +; @date 09/07/2015 + +define-item "Parchment" + description "Dried animal skins used as paper." + cost 5 + +define-item "Quill" + description "A goose-feather, sharpened at one end to make a pen." + cost 5 + +define-item "Dagger" + description "A long, sharp knife, useful for self defence." + weapon "Yes" + cost 20 + +define-weapon "Dagger" + description "A long, sharp knife, useful for self defence." + type "Knife" + damage 3 \ No newline at end of file diff --git a/ATL/Lugwey/lugwey.atl b/ATL/Lugwey/lugwey.atl new file mode 100644 index 0000000..12f6cd7 --- /dev/null +++ b/ATL/Lugwey/lugwey.atl @@ -0,0 +1,38 @@ +; The Monastery of Lugwey is the first "real" world I am creating with ATL. +; Its purpose (apart from being playable) is to help with the development of +; Atlantis by showing potential deficits, bringing up new ideas, etc. +; +; This is the main world file. +; +; @author Daniel Vedder +; @date 09/07/2015 + +name-world "Lugwey" + +define-player "Start" + money 50 + place "Gate" + max-health 50 + health 50 + +define-race "Human" + description "Errare humanum est" + intelligence-bonus 1 + +define-class "Scholar" + description "Dubio ergo corgito, corgito ergo sum" + special-item "Paper" + special-item "Quill" + +;; DEVELOPMENT +define-player "Leonardo" + race "Human" + class "Scholar" + item "Dagger" + weapon "Dagger" + money 60 + place "Gate" + +load-file "places.atl" +load-file "items.atl" +load-file "npcs.atl" \ No newline at end of file diff --git a/ATL/Lugwey/npcs.atl b/ATL/Lugwey/npcs.atl new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/ATL/Lugwey/npcs.atl diff --git a/ATL/Lugwey/places.atl b/ATL/Lugwey/places.atl new file mode 100644 index 0000000..c11f1a2 --- /dev/null +++ b/ATL/Lugwey/places.atl @@ -0,0 +1,36 @@ +; The Monastery of Lugwey is the first "real" world I am creating with ATL. +; Its purpose (apart from being playable) is to help with the development of +; Atlantis by showing potential deficits, bringing up new ideas, etc. +; +; This file holds all the place descriptions. +; +; @author Daniel Vedder +; @date 09/07/2015 + +define-place "Gate" + description "An old, partly moss-covered stone wall rises up in front of + you. Set in it, a wooden gate, reinforced with rusty iron strips. + One wing is open, permitting a view into the space beyond. + Behind you, the dusty track leads off into the forest. + + A monk is sitting in the gate house, obviously bored." + neighbour "Forest track" + neighbour "Monastery grounds" + npc "Gatekeeper" + +define-place "Monastery grounds" + description "Paths criss-cross well-kept lawns. Here and there, roses bloom + in a flower bed. On one side stand the monastery buildings with + their calm, ancient dignity. On the other, the gardens, stables + and agricultural outhouses speak of a simple working life." + neighbour "Gate" + neighbour "Chapel" + neighbour "Dormitory" + neighbour "Gardens" + neighbour "Stable" + +define-place "Forest track" + description "A rutted track, scarred by the wheels of many carts, leads + through the forest from the monastery to the village." + neighbour "Gate" + item "Signet ring" \ No newline at end of file diff --git a/ATL/conversion/ATL-item-conversion.csv b/ATL/conversion/ATL-item-conversion.csv new file mode 100644 index 0000000..9a50392 --- /dev/null +++ b/ATL/conversion/ATL-item-conversion.csv @@ -0,0 +1,63 @@ +Item, +Name,cost +Rope (20m),5 +Backpack,5 +Knife,10 +Short sword,40 +Long sword,80 +Dagger,20 +Spear,25 +Short bow,30 +Longbow,60 +Slingshot,15 +Throwing knife,15 +Quiver of arrows,20 +Leather armour,60 +Chain mail,120 +Plate armour,200 +Buckler,35 +Full shield,45 +Candles (3x),5 +Matches,1 +Food rations (5x),10 +Grappling hook,15 +Fishing net,25 +Fishing rod,15 +Tent (2 people),30 +Cloak,15 +Hat,10 +Water bottle,5 +Compass,20 +Quill and ink,5 +Parchment,5 +Blanket,5 +Book of Legends,55 +Book of Lore,55 +Medicinal herbs,10 +Bandages (3x),5 +Tea leaves,5 +Sleeping potion,15 +Leather pouch,2 +Face mask,10 +Dye,5 +Cloth,5 +Scissors,15 +Needle and thread,3 +Canvas,8 +String,2 +Hatchet,20 +Map,35 +Pony,100 +Horse,180 +Saddle and bridle,45 +Saddlebag,35 +Handmirror,20 +Magnifying glass,20 +Telescope,40 +Rope ladder,15 +Torches (3x),10 +Staff,10 +Cooking pot,8 +Soap,2 +Towel,5 +Boots,10 diff --git a/ATL/conversion/ATL-item-conversion.ods b/ATL/conversion/ATL-item-conversion.ods new file mode 100644 index 0000000..a5442c2 --- /dev/null +++ b/ATL/conversion/ATL-item-conversion.ods Binary files differ diff --git a/ATL/conversion/spreadsheet-export b/ATL/conversion/spreadsheet-export new file mode 100644 index 0000000..9228e79 --- /dev/null +++ b/ATL/conversion/spreadsheet-export @@ -0,0 +1,62 @@ +Rope (20m) 5 +Backpack 5 +Knife 10 +Short sword 40 +Long sword 80 +Dagger 20 +Spear 25 +Short bow 30 +Longbow 60 +Slingshot 15 +Throwing knife 15 +Quiver of arrows 20 +Leather armour 60 +Chain mail 120 +Plate armour 200 +Buckler 35 +Full shield 45 +Candles (3x) 5 +Matches 1 +Food rations (5x) 10 +Grappling hook 15 +Fishing net 25 +Fishing rod 15 +Tent (2 people) 30 +Cloak 15 +Hat 10 +Water bottle 5 +Compass 20 +Quill and ink 5 +Parchment 5 +Blanket 5 +Book of Legends 55 +Book of Lore 55 +Medicinal herbs 10 +Bandages (3x) 5 +Tea leaves 5 +Sleeping potion 15 +Leather pouch 2 +Face mask 10 +Dye 5 +Cloth 5 +Scissors 15 +Needle and thread 3 +Canvas 8 +String 2 +Hatchet 20 +Map 35 +Pony 100 +Horse 180 +Saddle and bridle 45 +Saddlebag 35 +Handmirror 20 +Magnifying glass 20 +Telescope 40 +Rope ladder 15 +Torches (3x) 10 +Staff 10 +Cooking pot 8 +Soap 2 +Towel 5 +Boots 10 + diff --git a/ATL/name_generator.py b/ATL/name_generator.py new file mode 100644 index 0000000..d34e37d --- /dev/null +++ b/ATL/name_generator.py @@ -0,0 +1,98 @@ +''' +This script is meant to help me write "Crown of the Khadalun". It randomly +combines letters and syllables to suggest new fantasy names. +@author: Daniel Vedder +@version 1.1 +''' + +import random +import sys + +global vowels, consonants +vowels = ("a", "e", "i", "o", "u") +consonants = ("b", "c", "d", "f", "g", "h", "j", "k", "l", "m", "n", "p", "q", "r", "s", "t", "v", "w", "x", "y", "z") + +''' +Create a random syllable between 1 and 3 letters long +''' +def create_syllable(): + global vowels, consonants + length = random.randint(1, 3) + syllable = "" + if length == 1: + syllable = vowels[random.randint(0, 4)] + else: + for l in range(1, length+1, 1): + next_letter = "" + if l == 1 or l == 3: + next_letter = consonants[random.randint(0, 20)] + elif l == 2: + next_letter = vowels[random.randint(0, 4)] + syllable = syllable+next_letter + return syllable + +''' +Join several syllables together to form a word +@param length The number of syllables (0 for random up to 5) +''' +def create_word(length=0): + if length == 0: + length = random.randint(1, 5) + word = "" + for i in range(0, length+1, 1): + next_syllable = create_syllable() + word = word+next_syllable + if word[-1] in vowels and random.randint(0, 1) == 1: + word = word+consonants[random.randint(0, 20)] + word = word[0].upper()+word[1:] + return word + +''' +Interactively suggest a list of names to the user, saving those +he/she chooses to file. +''' +def interactive(): + welcome_text = """ +Welcome! This script will suggest a series of random names to +you. After each name, type 'y' if you want to keep it, otherwise +type 'n' or just hit ENTER. To stop, type 'quit' or 'done'. +'cancel' stops the session without saving anything.""" + print(welcome_text) + names = "" + next_name = create_word() + keep = "" + cancel = ("quit", "done", "exit", "cancel") + while keep not in cancel: + keep = input(">> "+next_name+": ") + if keep == "y" or keep == "Y": + names = names+next_name+"\n" + next_name = create_word() + if keep == "cancel": + print("Script cancelled.") + sys.exit() + try: + name_file = open("suggested_names.txt", "a") + name_file.write(names) + name_file.close() + except: + print("Error saving name list to suggested_names.txt!") + print("Goodbye!") + +''' +Print a list of random names +@param n Number of words, default: 10 +''' +def batch(n=10): + wordlist = create_word() + for n in range(0, n-1, 1): + wordlist = wordlist+", "+create_word() + print(wordlist) + +if __name__ == "__main__": + if "-i" in sys.argv or "--interactive" in sys.argv: + interactive() + elif "-n" in sys.argv: + n = sys.argv[sys.argv.index("-n")+1] + batch(int(n)) + else: + batch() diff --git a/ATL/suggested_names.txt b/ATL/suggested_names.txt new file mode 100644 index 0000000..4d29d4b --- /dev/null +++ b/ATL/suggested_names.txt @@ -0,0 +1,18 @@ +Icaduwlin +Feloh +Iacud +Himki +Utum +Ceuc +Vebo +Ioalim +Ohuk +Odi +Onad +Ohi +Yucac +Alonda +Busu +Upatranuraf +Ovuk +Fivrihog diff --git a/ATL/test/creator-test.atl b/ATL/test/creator-test.atl new file mode 100644 index 0000000..6209e7c --- /dev/null +++ b/ATL/test/creator-test.atl @@ -0,0 +1,185 @@ +;; This code has been automatically generated by the +;; Atlantis world creator. + +define-item "Rope (20m)" + cost 5 + +define-item "Backpack" + cost 5 + +define-item "Knife" + cost 10 + +define-item "Short sword" + cost 40 + +define-item "Long sword" + cost 80 + +define-item "Dagger" + cost 20 + +define-item "Spear" + cost 25 + +define-item "Short bow" + cost 30 + +define-item "Longbow" + cost 60 + +define-item "Slingshot" + cost 15 + +define-item "Throwing knife" + cost 15 + +define-item "Quiver of arrows" + cost 20 + +define-item "Leather armour" + cost 60 + +define-item "Chain mail" + cost 120 + +define-item "Plate armour" + cost 200 + +define-item "Buckler" + cost 35 + +define-item "Full shield" + cost 45 + +define-item "Candles (3x)" + cost 5 + +define-item "Matches" + cost 1 + +define-item "Food rations (5x)" + cost 10 + +define-item "Grappling hook" + cost 15 + +define-item "Fishing net" + cost 25 + +define-item "Fishing rod" + cost 15 + +define-item "Tent (2 people)" + cost 30 + +define-item "Cloak" + cost 15 + +define-item "Hat" + cost 10 + +define-item "Water bottle" + cost 5 + +define-item "Compass" + cost 20 + +define-item "Quill and ink" + cost 5 + +define-item "Parchment" + cost 5 + +define-item "Blanket" + cost 5 + +define-item "Book of Legends" + cost 55 + +define-item "Book of Lore" + cost 55 + +define-item "Medicinal herbs" + cost 10 + +define-item "Bandages (3x)" + cost 5 + +define-item "Tea leaves" + cost 5 + +define-item "Sleeping potion" + cost 15 + +define-item "Leather pouch" + cost 2 + +define-item "Face mask" + cost 10 + +define-item "Dye" + cost 5 + +define-item "Cloth" + cost 5 + +define-item "Scissors" + cost 15 + +define-item "Needle and thread" + cost 3 + +define-item "Canvas" + cost 8 + +define-item "String" + cost 2 + +define-item "Hatchet" + cost 20 + +define-item "Map" + cost 35 + +define-item "Pony" + cost 100 + +define-item "Horse" + cost 180 + +define-item "Saddle and bridle" + cost 45 + +define-item "Saddlebag" + cost 35 + +define-item "Handmirror" + cost 20 + +define-item "Magnifying glass" + cost 20 + +define-item "Telescope" + cost 40 + +define-item "Rope ladder" + cost 15 + +define-item "Torches (3x)" + cost 10 + +define-item "Staff" + cost 10 + +define-item "Cooking pot" + cost 8 + +define-item "Soap" + cost 2 + +define-item "Towel" + cost 5 + +define-item "Boots" + cost 10 \ No newline at end of file diff --git a/ATL/test/example.atl b/ATL/test/example.atl new file mode 100644 index 0000000..3101edd --- /dev/null +++ b/ATL/test/example.atl @@ -0,0 +1,72 @@ +# This is an example Atlantis file - I use it to explore what the language +# should end up looking like. + +load races.atl +load classes.atl + + +define-quest Kill hellhound + objective kill hellhound + reward gold 300 + + +define-spell Ray of death + type kill + min-intelligence 12 + success-rate 35 + + +define-npc Hades + say Oh, amazing, you actually got here! Who did you bribe? + sell 30 Ambrosia + quest Kill hellhound + + +define-item Scroll of light + value 80 + add-experience 20 + add-spell Ray of death + +define-item Ambrosia + category Food + add-health 5 + + +define-monster Hellhound + armor-class 8 + strength 10 + melee-weapon 2 claws + experience 50 + spawn 2 + aggression 60 + +define-monster Fury + armor-class 5 + strength 8 + melee-weapon 10 fire whip + experience 74 + spawn 0.8 + aggression 30 + + +define-place Nowhere + description Welcome to Nowhere! You are in the void, the space between \ +the worlds. Around you is black. Black, except for one tiny pin-prick of light \ +to the north. + neighbour Elysium + +define-place Elysium + description Congratulations! You have achieved Elysium! + neighbour Nowhere + neighbour Fields of punishment + npc Hades + item Scroll of light + +define-place Fields of punishment + description You really, really don't want to end up here... + neighbour Elysium + monster Hellhound + monster Fury + + +start-place Elysium \ No newline at end of file diff --git a/ATL/test/game-objects.atl b/ATL/test/game-objects.atl new file mode 100644 index 0000000..19a648a --- /dev/null +++ b/ATL/test/game-objects.atl @@ -0,0 +1,51 @@ +; This module defines items, NPCs, monsters and weapons for my +; Atlantis test world. +; @author Daniel Vedder +; @date 02/06/2015 + +define-monster "Fury" + description "Hades' messengers, torturers, assassins. Beware!" + health 10 + dexterity 20 + strength 10 + aggression 30 + armour-class 3 + weapon "fire-whip" + +define-weapon "fire-whip" + description "A 10-foot long whip, blazing with magical fire" + type "whip" + damage 2 + +define-item "Anaklusmos" + description "Riptide, a sword for heroes!" + weapon "yes" + +define-item "Lightning bolt" + description "Zeus lightning bolt - the most powerful weapon of the universe!" + weapon "yes" + +define-weapon "Anaklusmos" + description "Riptide, a sword for heroes!" + type "sword" + damage 4 + +define-weapon "Lightning bolt" ; primarily for debugging + description "Zeus lightning bolt - the most powerful weapon of the universe!" + type "magic" + damage 40 + +define-npc "Hades" + description "Hades, Lord of the Dead!" + says "Beware, mortal - do not tempt me!" + +define-npc "Charon" + description "A robe-clad ghoul, dread ferryman of the Styx." + says "..." + +define-npc "Persephone" ;testing the shop system + description "Hades' beautiful wife, bringer of summer." + says "Welcome, my friend from the upper world!" + sells "Sleeping potion" + sells "Handmirror" + sells "Book of Lore" \ No newline at end of file diff --git a/ATL/test/lisp-test.atl b/ATL/test/lisp-test.atl new file mode 100644 index 0000000..b68d944 --- /dev/null +++ b/ATL/test/lisp-test.atl @@ -0,0 +1,51 @@ +; This is a simple ATL file to test whatever I have implemented so far. +; @author Daniel Vedder +; @date 04/05/2015 + +name-world "Underworld" + +define-player "Start" + money 200 + place "Fields of Punishment" + max-health 50 + health 50 + +define-place "Nowhere" + description "Welcome to Nowhere! +You are in the void, the space between the worlds. Around you is black. +Black, except for one tiny pin-prick of light to the north." + neighbour "Styx" + +define-place "Elysium" + description "This is where you want to be when you are six feet under..." + neighbour "Styx" + neighbour "Fields of Punishment" + neighbour "Fields of Asphodel" + npc "Persephone" + +define-place "Fields of Punishment" + description "Precisely where you do NOT want to end up..." + neighbour "Styx" + neighbour "Elysium" + neighbour "Fields of Asphodel" + monster "Fury" + +define-place "Fields of Asphodel" + description "Nothing special. Really, nothing special at all. +Just a whole load of dead people..." + neighbour "Fields of Punishment" + neighbour "Elysium" + npc "Hades" + +define-place "Styx" + description "The great river that all must cross - but woe to those who do!" + neighbour "Fields of Punishment" + neighbour "Elysium" + neighbour "Nowhere" + item "Anaklusmos" + npc "Charon" + +load-file lisp-test.atl ;Testing whether recursive loading is prevented +load-file races-classes.atl +load-file game-objects.atl +load-file creator-test.atl diff --git a/ATL/Lugwey/items.atl b/ATL/Lugwey/items.atl new file mode 100644 index 0000000..63b407e --- /dev/null +++ b/ATL/Lugwey/items.atl @@ -0,0 +1,26 @@ +; The Monastery of Lugwey is the first "real" world I am creating with ATL. +; Its purpose (apart from being playable) is to help with the development of +; Atlantis by showing potential deficits, bringing up new ideas, etc. +; +; This file holds all the item descriptions. +; +; @author Daniel Vedder +; @date 09/07/2015 + +define-item "Parchment" + description "Dried animal skins used as paper." + cost 5 + +define-item "Quill" + description "A goose-feather, sharpened at one end to make a pen." + cost 5 + +define-item "Dagger" + description "A long, sharp knife, useful for self defence." + weapon "Yes" + cost 20 + +define-weapon "Dagger" + description "A long, sharp knife, useful for self defence." + type "Knife" + damage 3 \ No newline at end of file diff --git a/ATL/Lugwey/lugwey.atl b/ATL/Lugwey/lugwey.atl new file mode 100644 index 0000000..12f6cd7 --- /dev/null +++ b/ATL/Lugwey/lugwey.atl @@ -0,0 +1,38 @@ +; The Monastery of Lugwey is the first "real" world I am creating with ATL. +; Its purpose (apart from being playable) is to help with the development of +; Atlantis by showing potential deficits, bringing up new ideas, etc. +; +; This is the main world file. +; +; @author Daniel Vedder +; @date 09/07/2015 + +name-world "Lugwey" + +define-player "Start" + money 50 + place "Gate" + max-health 50 + health 50 + +define-race "Human" + description "Errare humanum est" + intelligence-bonus 1 + +define-class "Scholar" + description "Dubio ergo corgito, corgito ergo sum" + special-item "Paper" + special-item "Quill" + +;; DEVELOPMENT +define-player "Leonardo" + race "Human" + class "Scholar" + item "Dagger" + weapon "Dagger" + money 60 + place "Gate" + +load-file "places.atl" +load-file "items.atl" +load-file "npcs.atl" \ No newline at end of file diff --git a/ATL/Lugwey/npcs.atl b/ATL/Lugwey/npcs.atl new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/ATL/Lugwey/npcs.atl diff --git a/ATL/Lugwey/places.atl b/ATL/Lugwey/places.atl new file mode 100644 index 0000000..c11f1a2 --- /dev/null +++ b/ATL/Lugwey/places.atl @@ -0,0 +1,36 @@ +; The Monastery of Lugwey is the first "real" world I am creating with ATL. +; Its purpose (apart from being playable) is to help with the development of +; Atlantis by showing potential deficits, bringing up new ideas, etc. +; +; This file holds all the place descriptions. +; +; @author Daniel Vedder +; @date 09/07/2015 + +define-place "Gate" + description "An old, partly moss-covered stone wall rises up in front of + you. Set in it, a wooden gate, reinforced with rusty iron strips. + One wing is open, permitting a view into the space beyond. + Behind you, the dusty track leads off into the forest. + + A monk is sitting in the gate house, obviously bored." + neighbour "Forest track" + neighbour "Monastery grounds" + npc "Gatekeeper" + +define-place "Monastery grounds" + description "Paths criss-cross well-kept lawns. Here and there, roses bloom + in a flower bed. On one side stand the monastery buildings with + their calm, ancient dignity. On the other, the gardens, stables + and agricultural outhouses speak of a simple working life." + neighbour "Gate" + neighbour "Chapel" + neighbour "Dormitory" + neighbour "Gardens" + neighbour "Stable" + +define-place "Forest track" + description "A rutted track, scarred by the wheels of many carts, leads + through the forest from the monastery to the village." + neighbour "Gate" + item "Signet ring" \ No newline at end of file diff --git a/ATL/conversion/ATL-item-conversion.csv b/ATL/conversion/ATL-item-conversion.csv new file mode 100644 index 0000000..9a50392 --- /dev/null +++ b/ATL/conversion/ATL-item-conversion.csv @@ -0,0 +1,63 @@ +Item, +Name,cost +Rope (20m),5 +Backpack,5 +Knife,10 +Short sword,40 +Long sword,80 +Dagger,20 +Spear,25 +Short bow,30 +Longbow,60 +Slingshot,15 +Throwing knife,15 +Quiver of arrows,20 +Leather armour,60 +Chain mail,120 +Plate armour,200 +Buckler,35 +Full shield,45 +Candles (3x),5 +Matches,1 +Food rations (5x),10 +Grappling hook,15 +Fishing net,25 +Fishing rod,15 +Tent (2 people),30 +Cloak,15 +Hat,10 +Water bottle,5 +Compass,20 +Quill and ink,5 +Parchment,5 +Blanket,5 +Book of Legends,55 +Book of Lore,55 +Medicinal herbs,10 +Bandages (3x),5 +Tea leaves,5 +Sleeping potion,15 +Leather pouch,2 +Face mask,10 +Dye,5 +Cloth,5 +Scissors,15 +Needle and thread,3 +Canvas,8 +String,2 +Hatchet,20 +Map,35 +Pony,100 +Horse,180 +Saddle and bridle,45 +Saddlebag,35 +Handmirror,20 +Magnifying glass,20 +Telescope,40 +Rope ladder,15 +Torches (3x),10 +Staff,10 +Cooking pot,8 +Soap,2 +Towel,5 +Boots,10 diff --git a/ATL/conversion/ATL-item-conversion.ods b/ATL/conversion/ATL-item-conversion.ods new file mode 100644 index 0000000..a5442c2 --- /dev/null +++ b/ATL/conversion/ATL-item-conversion.ods Binary files differ diff --git a/ATL/conversion/spreadsheet-export b/ATL/conversion/spreadsheet-export new file mode 100644 index 0000000..9228e79 --- /dev/null +++ b/ATL/conversion/spreadsheet-export @@ -0,0 +1,62 @@ +Rope (20m) 5 +Backpack 5 +Knife 10 +Short sword 40 +Long sword 80 +Dagger 20 +Spear 25 +Short bow 30 +Longbow 60 +Slingshot 15 +Throwing knife 15 +Quiver of arrows 20 +Leather armour 60 +Chain mail 120 +Plate armour 200 +Buckler 35 +Full shield 45 +Candles (3x) 5 +Matches 1 +Food rations (5x) 10 +Grappling hook 15 +Fishing net 25 +Fishing rod 15 +Tent (2 people) 30 +Cloak 15 +Hat 10 +Water bottle 5 +Compass 20 +Quill and ink 5 +Parchment 5 +Blanket 5 +Book of Legends 55 +Book of Lore 55 +Medicinal herbs 10 +Bandages (3x) 5 +Tea leaves 5 +Sleeping potion 15 +Leather pouch 2 +Face mask 10 +Dye 5 +Cloth 5 +Scissors 15 +Needle and thread 3 +Canvas 8 +String 2 +Hatchet 20 +Map 35 +Pony 100 +Horse 180 +Saddle and bridle 45 +Saddlebag 35 +Handmirror 20 +Magnifying glass 20 +Telescope 40 +Rope ladder 15 +Torches (3x) 10 +Staff 10 +Cooking pot 8 +Soap 2 +Towel 5 +Boots 10 + diff --git a/ATL/name_generator.py b/ATL/name_generator.py new file mode 100644 index 0000000..d34e37d --- /dev/null +++ b/ATL/name_generator.py @@ -0,0 +1,98 @@ +''' +This script is meant to help me write "Crown of the Khadalun". It randomly +combines letters and syllables to suggest new fantasy names. +@author: Daniel Vedder +@version 1.1 +''' + +import random +import sys + +global vowels, consonants +vowels = ("a", "e", "i", "o", "u") +consonants = ("b", "c", "d", "f", "g", "h", "j", "k", "l", "m", "n", "p", "q", "r", "s", "t", "v", "w", "x", "y", "z") + +''' +Create a random syllable between 1 and 3 letters long +''' +def create_syllable(): + global vowels, consonants + length = random.randint(1, 3) + syllable = "" + if length == 1: + syllable = vowels[random.randint(0, 4)] + else: + for l in range(1, length+1, 1): + next_letter = "" + if l == 1 or l == 3: + next_letter = consonants[random.randint(0, 20)] + elif l == 2: + next_letter = vowels[random.randint(0, 4)] + syllable = syllable+next_letter + return syllable + +''' +Join several syllables together to form a word +@param length The number of syllables (0 for random up to 5) +''' +def create_word(length=0): + if length == 0: + length = random.randint(1, 5) + word = "" + for i in range(0, length+1, 1): + next_syllable = create_syllable() + word = word+next_syllable + if word[-1] in vowels and random.randint(0, 1) == 1: + word = word+consonants[random.randint(0, 20)] + word = word[0].upper()+word[1:] + return word + +''' +Interactively suggest a list of names to the user, saving those +he/she chooses to file. +''' +def interactive(): + welcome_text = """ +Welcome! This script will suggest a series of random names to +you. After each name, type 'y' if you want to keep it, otherwise +type 'n' or just hit ENTER. To stop, type 'quit' or 'done'. +'cancel' stops the session without saving anything.""" + print(welcome_text) + names = "" + next_name = create_word() + keep = "" + cancel = ("quit", "done", "exit", "cancel") + while keep not in cancel: + keep = input(">> "+next_name+": ") + if keep == "y" or keep == "Y": + names = names+next_name+"\n" + next_name = create_word() + if keep == "cancel": + print("Script cancelled.") + sys.exit() + try: + name_file = open("suggested_names.txt", "a") + name_file.write(names) + name_file.close() + except: + print("Error saving name list to suggested_names.txt!") + print("Goodbye!") + +''' +Print a list of random names +@param n Number of words, default: 10 +''' +def batch(n=10): + wordlist = create_word() + for n in range(0, n-1, 1): + wordlist = wordlist+", "+create_word() + print(wordlist) + +if __name__ == "__main__": + if "-i" in sys.argv or "--interactive" in sys.argv: + interactive() + elif "-n" in sys.argv: + n = sys.argv[sys.argv.index("-n")+1] + batch(int(n)) + else: + batch() diff --git a/ATL/suggested_names.txt b/ATL/suggested_names.txt new file mode 100644 index 0000000..4d29d4b --- /dev/null +++ b/ATL/suggested_names.txt @@ -0,0 +1,18 @@ +Icaduwlin +Feloh +Iacud +Himki +Utum +Ceuc +Vebo +Ioalim +Ohuk +Odi +Onad +Ohi +Yucac +Alonda +Busu +Upatranuraf +Ovuk +Fivrihog diff --git a/ATL/test/creator-test.atl b/ATL/test/creator-test.atl new file mode 100644 index 0000000..6209e7c --- /dev/null +++ b/ATL/test/creator-test.atl @@ -0,0 +1,185 @@ +;; This code has been automatically generated by the +;; Atlantis world creator. + +define-item "Rope (20m)" + cost 5 + +define-item "Backpack" + cost 5 + +define-item "Knife" + cost 10 + +define-item "Short sword" + cost 40 + +define-item "Long sword" + cost 80 + +define-item "Dagger" + cost 20 + +define-item "Spear" + cost 25 + +define-item "Short bow" + cost 30 + +define-item "Longbow" + cost 60 + +define-item "Slingshot" + cost 15 + +define-item "Throwing knife" + cost 15 + +define-item "Quiver of arrows" + cost 20 + +define-item "Leather armour" + cost 60 + +define-item "Chain mail" + cost 120 + +define-item "Plate armour" + cost 200 + +define-item "Buckler" + cost 35 + +define-item "Full shield" + cost 45 + +define-item "Candles (3x)" + cost 5 + +define-item "Matches" + cost 1 + +define-item "Food rations (5x)" + cost 10 + +define-item "Grappling hook" + cost 15 + +define-item "Fishing net" + cost 25 + +define-item "Fishing rod" + cost 15 + +define-item "Tent (2 people)" + cost 30 + +define-item "Cloak" + cost 15 + +define-item "Hat" + cost 10 + +define-item "Water bottle" + cost 5 + +define-item "Compass" + cost 20 + +define-item "Quill and ink" + cost 5 + +define-item "Parchment" + cost 5 + +define-item "Blanket" + cost 5 + +define-item "Book of Legends" + cost 55 + +define-item "Book of Lore" + cost 55 + +define-item "Medicinal herbs" + cost 10 + +define-item "Bandages (3x)" + cost 5 + +define-item "Tea leaves" + cost 5 + +define-item "Sleeping potion" + cost 15 + +define-item "Leather pouch" + cost 2 + +define-item "Face mask" + cost 10 + +define-item "Dye" + cost 5 + +define-item "Cloth" + cost 5 + +define-item "Scissors" + cost 15 + +define-item "Needle and thread" + cost 3 + +define-item "Canvas" + cost 8 + +define-item "String" + cost 2 + +define-item "Hatchet" + cost 20 + +define-item "Map" + cost 35 + +define-item "Pony" + cost 100 + +define-item "Horse" + cost 180 + +define-item "Saddle and bridle" + cost 45 + +define-item "Saddlebag" + cost 35 + +define-item "Handmirror" + cost 20 + +define-item "Magnifying glass" + cost 20 + +define-item "Telescope" + cost 40 + +define-item "Rope ladder" + cost 15 + +define-item "Torches (3x)" + cost 10 + +define-item "Staff" + cost 10 + +define-item "Cooking pot" + cost 8 + +define-item "Soap" + cost 2 + +define-item "Towel" + cost 5 + +define-item "Boots" + cost 10 \ No newline at end of file diff --git a/ATL/test/example.atl b/ATL/test/example.atl new file mode 100644 index 0000000..3101edd --- /dev/null +++ b/ATL/test/example.atl @@ -0,0 +1,72 @@ +# This is an example Atlantis file - I use it to explore what the language +# should end up looking like. + +load races.atl +load classes.atl + + +define-quest Kill hellhound + objective kill hellhound + reward gold 300 + + +define-spell Ray of death + type kill + min-intelligence 12 + success-rate 35 + + +define-npc Hades + say Oh, amazing, you actually got here! Who did you bribe? + sell 30 Ambrosia + quest Kill hellhound + + +define-item Scroll of light + value 80 + add-experience 20 + add-spell Ray of death + +define-item Ambrosia + category Food + add-health 5 + + +define-monster Hellhound + armor-class 8 + strength 10 + melee-weapon 2 claws + experience 50 + spawn 2 + aggression 60 + +define-monster Fury + armor-class 5 + strength 8 + melee-weapon 10 fire whip + experience 74 + spawn 0.8 + aggression 30 + + +define-place Nowhere + description Welcome to Nowhere! You are in the void, the space between \ +the worlds. Around you is black. Black, except for one tiny pin-prick of light \ +to the north. + neighbour Elysium + +define-place Elysium + description Congratulations! You have achieved Elysium! + neighbour Nowhere + neighbour Fields of punishment + npc Hades + item Scroll of light + +define-place Fields of punishment + description You really, really don't want to end up here... + neighbour Elysium + monster Hellhound + monster Fury + + +start-place Elysium \ No newline at end of file diff --git a/ATL/test/game-objects.atl b/ATL/test/game-objects.atl new file mode 100644 index 0000000..19a648a --- /dev/null +++ b/ATL/test/game-objects.atl @@ -0,0 +1,51 @@ +; This module defines items, NPCs, monsters and weapons for my +; Atlantis test world. +; @author Daniel Vedder +; @date 02/06/2015 + +define-monster "Fury" + description "Hades' messengers, torturers, assassins. Beware!" + health 10 + dexterity 20 + strength 10 + aggression 30 + armour-class 3 + weapon "fire-whip" + +define-weapon "fire-whip" + description "A 10-foot long whip, blazing with magical fire" + type "whip" + damage 2 + +define-item "Anaklusmos" + description "Riptide, a sword for heroes!" + weapon "yes" + +define-item "Lightning bolt" + description "Zeus lightning bolt - the most powerful weapon of the universe!" + weapon "yes" + +define-weapon "Anaklusmos" + description "Riptide, a sword for heroes!" + type "sword" + damage 4 + +define-weapon "Lightning bolt" ; primarily for debugging + description "Zeus lightning bolt - the most powerful weapon of the universe!" + type "magic" + damage 40 + +define-npc "Hades" + description "Hades, Lord of the Dead!" + says "Beware, mortal - do not tempt me!" + +define-npc "Charon" + description "A robe-clad ghoul, dread ferryman of the Styx." + says "..." + +define-npc "Persephone" ;testing the shop system + description "Hades' beautiful wife, bringer of summer." + says "Welcome, my friend from the upper world!" + sells "Sleeping potion" + sells "Handmirror" + sells "Book of Lore" \ No newline at end of file diff --git a/ATL/test/lisp-test.atl b/ATL/test/lisp-test.atl new file mode 100644 index 0000000..b68d944 --- /dev/null +++ b/ATL/test/lisp-test.atl @@ -0,0 +1,51 @@ +; This is a simple ATL file to test whatever I have implemented so far. +; @author Daniel Vedder +; @date 04/05/2015 + +name-world "Underworld" + +define-player "Start" + money 200 + place "Fields of Punishment" + max-health 50 + health 50 + +define-place "Nowhere" + description "Welcome to Nowhere! +You are in the void, the space between the worlds. Around you is black. +Black, except for one tiny pin-prick of light to the north." + neighbour "Styx" + +define-place "Elysium" + description "This is where you want to be when you are six feet under..." + neighbour "Styx" + neighbour "Fields of Punishment" + neighbour "Fields of Asphodel" + npc "Persephone" + +define-place "Fields of Punishment" + description "Precisely where you do NOT want to end up..." + neighbour "Styx" + neighbour "Elysium" + neighbour "Fields of Asphodel" + monster "Fury" + +define-place "Fields of Asphodel" + description "Nothing special. Really, nothing special at all. +Just a whole load of dead people..." + neighbour "Fields of Punishment" + neighbour "Elysium" + npc "Hades" + +define-place "Styx" + description "The great river that all must cross - but woe to those who do!" + neighbour "Fields of Punishment" + neighbour "Elysium" + neighbour "Nowhere" + item "Anaklusmos" + npc "Charon" + +load-file lisp-test.atl ;Testing whether recursive loading is prevented +load-file races-classes.atl +load-file game-objects.atl +load-file creator-test.atl diff --git a/ATL/test/races-classes.atl b/ATL/test/races-classes.atl new file mode 100644 index 0000000..659310f --- /dev/null +++ b/ATL/test/races-classes.atl @@ -0,0 +1,40 @@ +; A file to define all the races and character classes in my test world. +; @author Daniel Vedder +; @date 18/05/2015 + +;;; RACES + +define-race "Elf" + description "The oldest and wisest race of Middle Earth" + +define-race "Dwarf" + description "Sons of the Earth, descendants of Durin" + +define-race "Hobbit" + description "Peace-loving and kind, true gentlemen" + +define-race "Human" + description "Boring, exciting, ever-changing, never-changing man..." + + +;;; CLASSES + +define-class "Warrior" + description "Fighting as a passion!" + special-item "Sword" + +define-class "Wizard" + description "Ancient, powerful, keepers of the Knowledge..." + special-item "staff" + +define-class "Burglar" + description "Breaking and entering taken to the max!" + special-item "lockpick" + special-item "torch" + +define-class "Craftsman" + description "Maker of all things beautiful and useful" + special-item "hammer" + +load-file lisp-test.atl ;Again, a test for recursive loading +load-file test-extension.lisp ;Testing whether Lisp extensions are loaded \ No newline at end of file diff --git a/ATL/Lugwey/items.atl b/ATL/Lugwey/items.atl new file mode 100644 index 0000000..63b407e --- /dev/null +++ b/ATL/Lugwey/items.atl @@ -0,0 +1,26 @@ +; The Monastery of Lugwey is the first "real" world I am creating with ATL. +; Its purpose (apart from being playable) is to help with the development of +; Atlantis by showing potential deficits, bringing up new ideas, etc. +; +; This file holds all the item descriptions. +; +; @author Daniel Vedder +; @date 09/07/2015 + +define-item "Parchment" + description "Dried animal skins used as paper." + cost 5 + +define-item "Quill" + description "A goose-feather, sharpened at one end to make a pen." + cost 5 + +define-item "Dagger" + description "A long, sharp knife, useful for self defence." + weapon "Yes" + cost 20 + +define-weapon "Dagger" + description "A long, sharp knife, useful for self defence." + type "Knife" + damage 3 \ No newline at end of file diff --git a/ATL/Lugwey/lugwey.atl b/ATL/Lugwey/lugwey.atl new file mode 100644 index 0000000..12f6cd7 --- /dev/null +++ b/ATL/Lugwey/lugwey.atl @@ -0,0 +1,38 @@ +; The Monastery of Lugwey is the first "real" world I am creating with ATL. +; Its purpose (apart from being playable) is to help with the development of +; Atlantis by showing potential deficits, bringing up new ideas, etc. +; +; This is the main world file. +; +; @author Daniel Vedder +; @date 09/07/2015 + +name-world "Lugwey" + +define-player "Start" + money 50 + place "Gate" + max-health 50 + health 50 + +define-race "Human" + description "Errare humanum est" + intelligence-bonus 1 + +define-class "Scholar" + description "Dubio ergo corgito, corgito ergo sum" + special-item "Paper" + special-item "Quill" + +;; DEVELOPMENT +define-player "Leonardo" + race "Human" + class "Scholar" + item "Dagger" + weapon "Dagger" + money 60 + place "Gate" + +load-file "places.atl" +load-file "items.atl" +load-file "npcs.atl" \ No newline at end of file diff --git a/ATL/Lugwey/npcs.atl b/ATL/Lugwey/npcs.atl new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/ATL/Lugwey/npcs.atl diff --git a/ATL/Lugwey/places.atl b/ATL/Lugwey/places.atl new file mode 100644 index 0000000..c11f1a2 --- /dev/null +++ b/ATL/Lugwey/places.atl @@ -0,0 +1,36 @@ +; The Monastery of Lugwey is the first "real" world I am creating with ATL. +; Its purpose (apart from being playable) is to help with the development of +; Atlantis by showing potential deficits, bringing up new ideas, etc. +; +; This file holds all the place descriptions. +; +; @author Daniel Vedder +; @date 09/07/2015 + +define-place "Gate" + description "An old, partly moss-covered stone wall rises up in front of + you. Set in it, a wooden gate, reinforced with rusty iron strips. + One wing is open, permitting a view into the space beyond. + Behind you, the dusty track leads off into the forest. + + A monk is sitting in the gate house, obviously bored." + neighbour "Forest track" + neighbour "Monastery grounds" + npc "Gatekeeper" + +define-place "Monastery grounds" + description "Paths criss-cross well-kept lawns. Here and there, roses bloom + in a flower bed. On one side stand the monastery buildings with + their calm, ancient dignity. On the other, the gardens, stables + and agricultural outhouses speak of a simple working life." + neighbour "Gate" + neighbour "Chapel" + neighbour "Dormitory" + neighbour "Gardens" + neighbour "Stable" + +define-place "Forest track" + description "A rutted track, scarred by the wheels of many carts, leads + through the forest from the monastery to the village." + neighbour "Gate" + item "Signet ring" \ No newline at end of file diff --git a/ATL/conversion/ATL-item-conversion.csv b/ATL/conversion/ATL-item-conversion.csv new file mode 100644 index 0000000..9a50392 --- /dev/null +++ b/ATL/conversion/ATL-item-conversion.csv @@ -0,0 +1,63 @@ +Item, +Name,cost +Rope (20m),5 +Backpack,5 +Knife,10 +Short sword,40 +Long sword,80 +Dagger,20 +Spear,25 +Short bow,30 +Longbow,60 +Slingshot,15 +Throwing knife,15 +Quiver of arrows,20 +Leather armour,60 +Chain mail,120 +Plate armour,200 +Buckler,35 +Full shield,45 +Candles (3x),5 +Matches,1 +Food rations (5x),10 +Grappling hook,15 +Fishing net,25 +Fishing rod,15 +Tent (2 people),30 +Cloak,15 +Hat,10 +Water bottle,5 +Compass,20 +Quill and ink,5 +Parchment,5 +Blanket,5 +Book of Legends,55 +Book of Lore,55 +Medicinal herbs,10 +Bandages (3x),5 +Tea leaves,5 +Sleeping potion,15 +Leather pouch,2 +Face mask,10 +Dye,5 +Cloth,5 +Scissors,15 +Needle and thread,3 +Canvas,8 +String,2 +Hatchet,20 +Map,35 +Pony,100 +Horse,180 +Saddle and bridle,45 +Saddlebag,35 +Handmirror,20 +Magnifying glass,20 +Telescope,40 +Rope ladder,15 +Torches (3x),10 +Staff,10 +Cooking pot,8 +Soap,2 +Towel,5 +Boots,10 diff --git a/ATL/conversion/ATL-item-conversion.ods b/ATL/conversion/ATL-item-conversion.ods new file mode 100644 index 0000000..a5442c2 --- /dev/null +++ b/ATL/conversion/ATL-item-conversion.ods Binary files differ diff --git a/ATL/conversion/spreadsheet-export b/ATL/conversion/spreadsheet-export new file mode 100644 index 0000000..9228e79 --- /dev/null +++ b/ATL/conversion/spreadsheet-export @@ -0,0 +1,62 @@ +Rope (20m) 5 +Backpack 5 +Knife 10 +Short sword 40 +Long sword 80 +Dagger 20 +Spear 25 +Short bow 30 +Longbow 60 +Slingshot 15 +Throwing knife 15 +Quiver of arrows 20 +Leather armour 60 +Chain mail 120 +Plate armour 200 +Buckler 35 +Full shield 45 +Candles (3x) 5 +Matches 1 +Food rations (5x) 10 +Grappling hook 15 +Fishing net 25 +Fishing rod 15 +Tent (2 people) 30 +Cloak 15 +Hat 10 +Water bottle 5 +Compass 20 +Quill and ink 5 +Parchment 5 +Blanket 5 +Book of Legends 55 +Book of Lore 55 +Medicinal herbs 10 +Bandages (3x) 5 +Tea leaves 5 +Sleeping potion 15 +Leather pouch 2 +Face mask 10 +Dye 5 +Cloth 5 +Scissors 15 +Needle and thread 3 +Canvas 8 +String 2 +Hatchet 20 +Map 35 +Pony 100 +Horse 180 +Saddle and bridle 45 +Saddlebag 35 +Handmirror 20 +Magnifying glass 20 +Telescope 40 +Rope ladder 15 +Torches (3x) 10 +Staff 10 +Cooking pot 8 +Soap 2 +Towel 5 +Boots 10 + diff --git a/ATL/name_generator.py b/ATL/name_generator.py new file mode 100644 index 0000000..d34e37d --- /dev/null +++ b/ATL/name_generator.py @@ -0,0 +1,98 @@ +''' +This script is meant to help me write "Crown of the Khadalun". It randomly +combines letters and syllables to suggest new fantasy names. +@author: Daniel Vedder +@version 1.1 +''' + +import random +import sys + +global vowels, consonants +vowels = ("a", "e", "i", "o", "u") +consonants = ("b", "c", "d", "f", "g", "h", "j", "k", "l", "m", "n", "p", "q", "r", "s", "t", "v", "w", "x", "y", "z") + +''' +Create a random syllable between 1 and 3 letters long +''' +def create_syllable(): + global vowels, consonants + length = random.randint(1, 3) + syllable = "" + if length == 1: + syllable = vowels[random.randint(0, 4)] + else: + for l in range(1, length+1, 1): + next_letter = "" + if l == 1 or l == 3: + next_letter = consonants[random.randint(0, 20)] + elif l == 2: + next_letter = vowels[random.randint(0, 4)] + syllable = syllable+next_letter + return syllable + +''' +Join several syllables together to form a word +@param length The number of syllables (0 for random up to 5) +''' +def create_word(length=0): + if length == 0: + length = random.randint(1, 5) + word = "" + for i in range(0, length+1, 1): + next_syllable = create_syllable() + word = word+next_syllable + if word[-1] in vowels and random.randint(0, 1) == 1: + word = word+consonants[random.randint(0, 20)] + word = word[0].upper()+word[1:] + return word + +''' +Interactively suggest a list of names to the user, saving those +he/she chooses to file. +''' +def interactive(): + welcome_text = """ +Welcome! This script will suggest a series of random names to +you. After each name, type 'y' if you want to keep it, otherwise +type 'n' or just hit ENTER. To stop, type 'quit' or 'done'. +'cancel' stops the session without saving anything.""" + print(welcome_text) + names = "" + next_name = create_word() + keep = "" + cancel = ("quit", "done", "exit", "cancel") + while keep not in cancel: + keep = input(">> "+next_name+": ") + if keep == "y" or keep == "Y": + names = names+next_name+"\n" + next_name = create_word() + if keep == "cancel": + print("Script cancelled.") + sys.exit() + try: + name_file = open("suggested_names.txt", "a") + name_file.write(names) + name_file.close() + except: + print("Error saving name list to suggested_names.txt!") + print("Goodbye!") + +''' +Print a list of random names +@param n Number of words, default: 10 +''' +def batch(n=10): + wordlist = create_word() + for n in range(0, n-1, 1): + wordlist = wordlist+", "+create_word() + print(wordlist) + +if __name__ == "__main__": + if "-i" in sys.argv or "--interactive" in sys.argv: + interactive() + elif "-n" in sys.argv: + n = sys.argv[sys.argv.index("-n")+1] + batch(int(n)) + else: + batch() diff --git a/ATL/suggested_names.txt b/ATL/suggested_names.txt new file mode 100644 index 0000000..4d29d4b --- /dev/null +++ b/ATL/suggested_names.txt @@ -0,0 +1,18 @@ +Icaduwlin +Feloh +Iacud +Himki +Utum +Ceuc +Vebo +Ioalim +Ohuk +Odi +Onad +Ohi +Yucac +Alonda +Busu +Upatranuraf +Ovuk +Fivrihog diff --git a/ATL/test/creator-test.atl b/ATL/test/creator-test.atl new file mode 100644 index 0000000..6209e7c --- /dev/null +++ b/ATL/test/creator-test.atl @@ -0,0 +1,185 @@ +;; This code has been automatically generated by the +;; Atlantis world creator. + +define-item "Rope (20m)" + cost 5 + +define-item "Backpack" + cost 5 + +define-item "Knife" + cost 10 + +define-item "Short sword" + cost 40 + +define-item "Long sword" + cost 80 + +define-item "Dagger" + cost 20 + +define-item "Spear" + cost 25 + +define-item "Short bow" + cost 30 + +define-item "Longbow" + cost 60 + +define-item "Slingshot" + cost 15 + +define-item "Throwing knife" + cost 15 + +define-item "Quiver of arrows" + cost 20 + +define-item "Leather armour" + cost 60 + +define-item "Chain mail" + cost 120 + +define-item "Plate armour" + cost 200 + +define-item "Buckler" + cost 35 + +define-item "Full shield" + cost 45 + +define-item "Candles (3x)" + cost 5 + +define-item "Matches" + cost 1 + +define-item "Food rations (5x)" + cost 10 + +define-item "Grappling hook" + cost 15 + +define-item "Fishing net" + cost 25 + +define-item "Fishing rod" + cost 15 + +define-item "Tent (2 people)" + cost 30 + +define-item "Cloak" + cost 15 + +define-item "Hat" + cost 10 + +define-item "Water bottle" + cost 5 + +define-item "Compass" + cost 20 + +define-item "Quill and ink" + cost 5 + +define-item "Parchment" + cost 5 + +define-item "Blanket" + cost 5 + +define-item "Book of Legends" + cost 55 + +define-item "Book of Lore" + cost 55 + +define-item "Medicinal herbs" + cost 10 + +define-item "Bandages (3x)" + cost 5 + +define-item "Tea leaves" + cost 5 + +define-item "Sleeping potion" + cost 15 + +define-item "Leather pouch" + cost 2 + +define-item "Face mask" + cost 10 + +define-item "Dye" + cost 5 + +define-item "Cloth" + cost 5 + +define-item "Scissors" + cost 15 + +define-item "Needle and thread" + cost 3 + +define-item "Canvas" + cost 8 + +define-item "String" + cost 2 + +define-item "Hatchet" + cost 20 + +define-item "Map" + cost 35 + +define-item "Pony" + cost 100 + +define-item "Horse" + cost 180 + +define-item "Saddle and bridle" + cost 45 + +define-item "Saddlebag" + cost 35 + +define-item "Handmirror" + cost 20 + +define-item "Magnifying glass" + cost 20 + +define-item "Telescope" + cost 40 + +define-item "Rope ladder" + cost 15 + +define-item "Torches (3x)" + cost 10 + +define-item "Staff" + cost 10 + +define-item "Cooking pot" + cost 8 + +define-item "Soap" + cost 2 + +define-item "Towel" + cost 5 + +define-item "Boots" + cost 10 \ No newline at end of file diff --git a/ATL/test/example.atl b/ATL/test/example.atl new file mode 100644 index 0000000..3101edd --- /dev/null +++ b/ATL/test/example.atl @@ -0,0 +1,72 @@ +# This is an example Atlantis file - I use it to explore what the language +# should end up looking like. + +load races.atl +load classes.atl + + +define-quest Kill hellhound + objective kill hellhound + reward gold 300 + + +define-spell Ray of death + type kill + min-intelligence 12 + success-rate 35 + + +define-npc Hades + say Oh, amazing, you actually got here! Who did you bribe? + sell 30 Ambrosia + quest Kill hellhound + + +define-item Scroll of light + value 80 + add-experience 20 + add-spell Ray of death + +define-item Ambrosia + category Food + add-health 5 + + +define-monster Hellhound + armor-class 8 + strength 10 + melee-weapon 2 claws + experience 50 + spawn 2 + aggression 60 + +define-monster Fury + armor-class 5 + strength 8 + melee-weapon 10 fire whip + experience 74 + spawn 0.8 + aggression 30 + + +define-place Nowhere + description Welcome to Nowhere! You are in the void, the space between \ +the worlds. Around you is black. Black, except for one tiny pin-prick of light \ +to the north. + neighbour Elysium + +define-place Elysium + description Congratulations! You have achieved Elysium! + neighbour Nowhere + neighbour Fields of punishment + npc Hades + item Scroll of light + +define-place Fields of punishment + description You really, really don't want to end up here... + neighbour Elysium + monster Hellhound + monster Fury + + +start-place Elysium \ No newline at end of file diff --git a/ATL/test/game-objects.atl b/ATL/test/game-objects.atl new file mode 100644 index 0000000..19a648a --- /dev/null +++ b/ATL/test/game-objects.atl @@ -0,0 +1,51 @@ +; This module defines items, NPCs, monsters and weapons for my +; Atlantis test world. +; @author Daniel Vedder +; @date 02/06/2015 + +define-monster "Fury" + description "Hades' messengers, torturers, assassins. Beware!" + health 10 + dexterity 20 + strength 10 + aggression 30 + armour-class 3 + weapon "fire-whip" + +define-weapon "fire-whip" + description "A 10-foot long whip, blazing with magical fire" + type "whip" + damage 2 + +define-item "Anaklusmos" + description "Riptide, a sword for heroes!" + weapon "yes" + +define-item "Lightning bolt" + description "Zeus lightning bolt - the most powerful weapon of the universe!" + weapon "yes" + +define-weapon "Anaklusmos" + description "Riptide, a sword for heroes!" + type "sword" + damage 4 + +define-weapon "Lightning bolt" ; primarily for debugging + description "Zeus lightning bolt - the most powerful weapon of the universe!" + type "magic" + damage 40 + +define-npc "Hades" + description "Hades, Lord of the Dead!" + says "Beware, mortal - do not tempt me!" + +define-npc "Charon" + description "A robe-clad ghoul, dread ferryman of the Styx." + says "..." + +define-npc "Persephone" ;testing the shop system + description "Hades' beautiful wife, bringer of summer." + says "Welcome, my friend from the upper world!" + sells "Sleeping potion" + sells "Handmirror" + sells "Book of Lore" \ No newline at end of file diff --git a/ATL/test/lisp-test.atl b/ATL/test/lisp-test.atl new file mode 100644 index 0000000..b68d944 --- /dev/null +++ b/ATL/test/lisp-test.atl @@ -0,0 +1,51 @@ +; This is a simple ATL file to test whatever I have implemented so far. +; @author Daniel Vedder +; @date 04/05/2015 + +name-world "Underworld" + +define-player "Start" + money 200 + place "Fields of Punishment" + max-health 50 + health 50 + +define-place "Nowhere" + description "Welcome to Nowhere! +You are in the void, the space between the worlds. Around you is black. +Black, except for one tiny pin-prick of light to the north." + neighbour "Styx" + +define-place "Elysium" + description "This is where you want to be when you are six feet under..." + neighbour "Styx" + neighbour "Fields of Punishment" + neighbour "Fields of Asphodel" + npc "Persephone" + +define-place "Fields of Punishment" + description "Precisely where you do NOT want to end up..." + neighbour "Styx" + neighbour "Elysium" + neighbour "Fields of Asphodel" + monster "Fury" + +define-place "Fields of Asphodel" + description "Nothing special. Really, nothing special at all. +Just a whole load of dead people..." + neighbour "Fields of Punishment" + neighbour "Elysium" + npc "Hades" + +define-place "Styx" + description "The great river that all must cross - but woe to those who do!" + neighbour "Fields of Punishment" + neighbour "Elysium" + neighbour "Nowhere" + item "Anaklusmos" + npc "Charon" + +load-file lisp-test.atl ;Testing whether recursive loading is prevented +load-file races-classes.atl +load-file game-objects.atl +load-file creator-test.atl diff --git a/ATL/test/races-classes.atl b/ATL/test/races-classes.atl new file mode 100644 index 0000000..659310f --- /dev/null +++ b/ATL/test/races-classes.atl @@ -0,0 +1,40 @@ +; A file to define all the races and character classes in my test world. +; @author Daniel Vedder +; @date 18/05/2015 + +;;; RACES + +define-race "Elf" + description "The oldest and wisest race of Middle Earth" + +define-race "Dwarf" + description "Sons of the Earth, descendants of Durin" + +define-race "Hobbit" + description "Peace-loving and kind, true gentlemen" + +define-race "Human" + description "Boring, exciting, ever-changing, never-changing man..." + + +;;; CLASSES + +define-class "Warrior" + description "Fighting as a passion!" + special-item "Sword" + +define-class "Wizard" + description "Ancient, powerful, keepers of the Knowledge..." + special-item "staff" + +define-class "Burglar" + description "Breaking and entering taken to the max!" + special-item "lockpick" + special-item "torch" + +define-class "Craftsman" + description "Maker of all things beautiful and useful" + special-item "hammer" + +load-file lisp-test.atl ;Again, a test for recursive loading +load-file test-extension.lisp ;Testing whether Lisp extensions are loaded \ No newline at end of file diff --git a/ATL/test/test-extension.lisp b/ATL/test/test-extension.lisp new file mode 100644 index 0000000..f01660a --- /dev/null +++ b/ATL/test/test-extension.lisp @@ -0,0 +1,5 @@ +;; This file tests whether the interpreter loads Lisp files correctly. +;; author: Daniel Vedder +;; date: 21/05/2015 + +(debugging "~&Loaded Lisp extension file.") diff --git a/ATL/Lugwey/items.atl b/ATL/Lugwey/items.atl new file mode 100644 index 0000000..63b407e --- /dev/null +++ b/ATL/Lugwey/items.atl @@ -0,0 +1,26 @@ +; The Monastery of Lugwey is the first "real" world I am creating with ATL. +; Its purpose (apart from being playable) is to help with the development of +; Atlantis by showing potential deficits, bringing up new ideas, etc. +; +; This file holds all the item descriptions. +; +; @author Daniel Vedder +; @date 09/07/2015 + +define-item "Parchment" + description "Dried animal skins used as paper." + cost 5 + +define-item "Quill" + description "A goose-feather, sharpened at one end to make a pen." + cost 5 + +define-item "Dagger" + description "A long, sharp knife, useful for self defence." + weapon "Yes" + cost 20 + +define-weapon "Dagger" + description "A long, sharp knife, useful for self defence." + type "Knife" + damage 3 \ No newline at end of file diff --git a/ATL/Lugwey/lugwey.atl b/ATL/Lugwey/lugwey.atl new file mode 100644 index 0000000..12f6cd7 --- /dev/null +++ b/ATL/Lugwey/lugwey.atl @@ -0,0 +1,38 @@ +; The Monastery of Lugwey is the first "real" world I am creating with ATL. +; Its purpose (apart from being playable) is to help with the development of +; Atlantis by showing potential deficits, bringing up new ideas, etc. +; +; This is the main world file. +; +; @author Daniel Vedder +; @date 09/07/2015 + +name-world "Lugwey" + +define-player "Start" + money 50 + place "Gate" + max-health 50 + health 50 + +define-race "Human" + description "Errare humanum est" + intelligence-bonus 1 + +define-class "Scholar" + description "Dubio ergo corgito, corgito ergo sum" + special-item "Paper" + special-item "Quill" + +;; DEVELOPMENT +define-player "Leonardo" + race "Human" + class "Scholar" + item "Dagger" + weapon "Dagger" + money 60 + place "Gate" + +load-file "places.atl" +load-file "items.atl" +load-file "npcs.atl" \ No newline at end of file diff --git a/ATL/Lugwey/npcs.atl b/ATL/Lugwey/npcs.atl new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/ATL/Lugwey/npcs.atl diff --git a/ATL/Lugwey/places.atl b/ATL/Lugwey/places.atl new file mode 100644 index 0000000..c11f1a2 --- /dev/null +++ b/ATL/Lugwey/places.atl @@ -0,0 +1,36 @@ +; The Monastery of Lugwey is the first "real" world I am creating with ATL. +; Its purpose (apart from being playable) is to help with the development of +; Atlantis by showing potential deficits, bringing up new ideas, etc. +; +; This file holds all the place descriptions. +; +; @author Daniel Vedder +; @date 09/07/2015 + +define-place "Gate" + description "An old, partly moss-covered stone wall rises up in front of + you. Set in it, a wooden gate, reinforced with rusty iron strips. + One wing is open, permitting a view into the space beyond. + Behind you, the dusty track leads off into the forest. + + A monk is sitting in the gate house, obviously bored." + neighbour "Forest track" + neighbour "Monastery grounds" + npc "Gatekeeper" + +define-place "Monastery grounds" + description "Paths criss-cross well-kept lawns. Here and there, roses bloom + in a flower bed. On one side stand the monastery buildings with + their calm, ancient dignity. On the other, the gardens, stables + and agricultural outhouses speak of a simple working life." + neighbour "Gate" + neighbour "Chapel" + neighbour "Dormitory" + neighbour "Gardens" + neighbour "Stable" + +define-place "Forest track" + description "A rutted track, scarred by the wheels of many carts, leads + through the forest from the monastery to the village." + neighbour "Gate" + item "Signet ring" \ No newline at end of file diff --git a/ATL/conversion/ATL-item-conversion.csv b/ATL/conversion/ATL-item-conversion.csv new file mode 100644 index 0000000..9a50392 --- /dev/null +++ b/ATL/conversion/ATL-item-conversion.csv @@ -0,0 +1,63 @@ +Item, +Name,cost +Rope (20m),5 +Backpack,5 +Knife,10 +Short sword,40 +Long sword,80 +Dagger,20 +Spear,25 +Short bow,30 +Longbow,60 +Slingshot,15 +Throwing knife,15 +Quiver of arrows,20 +Leather armour,60 +Chain mail,120 +Plate armour,200 +Buckler,35 +Full shield,45 +Candles (3x),5 +Matches,1 +Food rations (5x),10 +Grappling hook,15 +Fishing net,25 +Fishing rod,15 +Tent (2 people),30 +Cloak,15 +Hat,10 +Water bottle,5 +Compass,20 +Quill and ink,5 +Parchment,5 +Blanket,5 +Book of Legends,55 +Book of Lore,55 +Medicinal herbs,10 +Bandages (3x),5 +Tea leaves,5 +Sleeping potion,15 +Leather pouch,2 +Face mask,10 +Dye,5 +Cloth,5 +Scissors,15 +Needle and thread,3 +Canvas,8 +String,2 +Hatchet,20 +Map,35 +Pony,100 +Horse,180 +Saddle and bridle,45 +Saddlebag,35 +Handmirror,20 +Magnifying glass,20 +Telescope,40 +Rope ladder,15 +Torches (3x),10 +Staff,10 +Cooking pot,8 +Soap,2 +Towel,5 +Boots,10 diff --git a/ATL/conversion/ATL-item-conversion.ods b/ATL/conversion/ATL-item-conversion.ods new file mode 100644 index 0000000..a5442c2 --- /dev/null +++ b/ATL/conversion/ATL-item-conversion.ods Binary files differ diff --git a/ATL/conversion/spreadsheet-export b/ATL/conversion/spreadsheet-export new file mode 100644 index 0000000..9228e79 --- /dev/null +++ b/ATL/conversion/spreadsheet-export @@ -0,0 +1,62 @@ +Rope (20m) 5 +Backpack 5 +Knife 10 +Short sword 40 +Long sword 80 +Dagger 20 +Spear 25 +Short bow 30 +Longbow 60 +Slingshot 15 +Throwing knife 15 +Quiver of arrows 20 +Leather armour 60 +Chain mail 120 +Plate armour 200 +Buckler 35 +Full shield 45 +Candles (3x) 5 +Matches 1 +Food rations (5x) 10 +Grappling hook 15 +Fishing net 25 +Fishing rod 15 +Tent (2 people) 30 +Cloak 15 +Hat 10 +Water bottle 5 +Compass 20 +Quill and ink 5 +Parchment 5 +Blanket 5 +Book of Legends 55 +Book of Lore 55 +Medicinal herbs 10 +Bandages (3x) 5 +Tea leaves 5 +Sleeping potion 15 +Leather pouch 2 +Face mask 10 +Dye 5 +Cloth 5 +Scissors 15 +Needle and thread 3 +Canvas 8 +String 2 +Hatchet 20 +Map 35 +Pony 100 +Horse 180 +Saddle and bridle 45 +Saddlebag 35 +Handmirror 20 +Magnifying glass 20 +Telescope 40 +Rope ladder 15 +Torches (3x) 10 +Staff 10 +Cooking pot 8 +Soap 2 +Towel 5 +Boots 10 + diff --git a/ATL/name_generator.py b/ATL/name_generator.py new file mode 100644 index 0000000..d34e37d --- /dev/null +++ b/ATL/name_generator.py @@ -0,0 +1,98 @@ +''' +This script is meant to help me write "Crown of the Khadalun". It randomly +combines letters and syllables to suggest new fantasy names. +@author: Daniel Vedder +@version 1.1 +''' + +import random +import sys + +global vowels, consonants +vowels = ("a", "e", "i", "o", "u") +consonants = ("b", "c", "d", "f", "g", "h", "j", "k", "l", "m", "n", "p", "q", "r", "s", "t", "v", "w", "x", "y", "z") + +''' +Create a random syllable between 1 and 3 letters long +''' +def create_syllable(): + global vowels, consonants + length = random.randint(1, 3) + syllable = "" + if length == 1: + syllable = vowels[random.randint(0, 4)] + else: + for l in range(1, length+1, 1): + next_letter = "" + if l == 1 or l == 3: + next_letter = consonants[random.randint(0, 20)] + elif l == 2: + next_letter = vowels[random.randint(0, 4)] + syllable = syllable+next_letter + return syllable + +''' +Join several syllables together to form a word +@param length The number of syllables (0 for random up to 5) +''' +def create_word(length=0): + if length == 0: + length = random.randint(1, 5) + word = "" + for i in range(0, length+1, 1): + next_syllable = create_syllable() + word = word+next_syllable + if word[-1] in vowels and random.randint(0, 1) == 1: + word = word+consonants[random.randint(0, 20)] + word = word[0].upper()+word[1:] + return word + +''' +Interactively suggest a list of names to the user, saving those +he/she chooses to file. +''' +def interactive(): + welcome_text = """ +Welcome! This script will suggest a series of random names to +you. After each name, type 'y' if you want to keep it, otherwise +type 'n' or just hit ENTER. To stop, type 'quit' or 'done'. +'cancel' stops the session without saving anything.""" + print(welcome_text) + names = "" + next_name = create_word() + keep = "" + cancel = ("quit", "done", "exit", "cancel") + while keep not in cancel: + keep = input(">> "+next_name+": ") + if keep == "y" or keep == "Y": + names = names+next_name+"\n" + next_name = create_word() + if keep == "cancel": + print("Script cancelled.") + sys.exit() + try: + name_file = open("suggested_names.txt", "a") + name_file.write(names) + name_file.close() + except: + print("Error saving name list to suggested_names.txt!") + print("Goodbye!") + +''' +Print a list of random names +@param n Number of words, default: 10 +''' +def batch(n=10): + wordlist = create_word() + for n in range(0, n-1, 1): + wordlist = wordlist+", "+create_word() + print(wordlist) + +if __name__ == "__main__": + if "-i" in sys.argv or "--interactive" in sys.argv: + interactive() + elif "-n" in sys.argv: + n = sys.argv[sys.argv.index("-n")+1] + batch(int(n)) + else: + batch() diff --git a/ATL/suggested_names.txt b/ATL/suggested_names.txt new file mode 100644 index 0000000..4d29d4b --- /dev/null +++ b/ATL/suggested_names.txt @@ -0,0 +1,18 @@ +Icaduwlin +Feloh +Iacud +Himki +Utum +Ceuc +Vebo +Ioalim +Ohuk +Odi +Onad +Ohi +Yucac +Alonda +Busu +Upatranuraf +Ovuk +Fivrihog diff --git a/ATL/test/creator-test.atl b/ATL/test/creator-test.atl new file mode 100644 index 0000000..6209e7c --- /dev/null +++ b/ATL/test/creator-test.atl @@ -0,0 +1,185 @@ +;; This code has been automatically generated by the +;; Atlantis world creator. + +define-item "Rope (20m)" + cost 5 + +define-item "Backpack" + cost 5 + +define-item "Knife" + cost 10 + +define-item "Short sword" + cost 40 + +define-item "Long sword" + cost 80 + +define-item "Dagger" + cost 20 + +define-item "Spear" + cost 25 + +define-item "Short bow" + cost 30 + +define-item "Longbow" + cost 60 + +define-item "Slingshot" + cost 15 + +define-item "Throwing knife" + cost 15 + +define-item "Quiver of arrows" + cost 20 + +define-item "Leather armour" + cost 60 + +define-item "Chain mail" + cost 120 + +define-item "Plate armour" + cost 200 + +define-item "Buckler" + cost 35 + +define-item "Full shield" + cost 45 + +define-item "Candles (3x)" + cost 5 + +define-item "Matches" + cost 1 + +define-item "Food rations (5x)" + cost 10 + +define-item "Grappling hook" + cost 15 + +define-item "Fishing net" + cost 25 + +define-item "Fishing rod" + cost 15 + +define-item "Tent (2 people)" + cost 30 + +define-item "Cloak" + cost 15 + +define-item "Hat" + cost 10 + +define-item "Water bottle" + cost 5 + +define-item "Compass" + cost 20 + +define-item "Quill and ink" + cost 5 + +define-item "Parchment" + cost 5 + +define-item "Blanket" + cost 5 + +define-item "Book of Legends" + cost 55 + +define-item "Book of Lore" + cost 55 + +define-item "Medicinal herbs" + cost 10 + +define-item "Bandages (3x)" + cost 5 + +define-item "Tea leaves" + cost 5 + +define-item "Sleeping potion" + cost 15 + +define-item "Leather pouch" + cost 2 + +define-item "Face mask" + cost 10 + +define-item "Dye" + cost 5 + +define-item "Cloth" + cost 5 + +define-item "Scissors" + cost 15 + +define-item "Needle and thread" + cost 3 + +define-item "Canvas" + cost 8 + +define-item "String" + cost 2 + +define-item "Hatchet" + cost 20 + +define-item "Map" + cost 35 + +define-item "Pony" + cost 100 + +define-item "Horse" + cost 180 + +define-item "Saddle and bridle" + cost 45 + +define-item "Saddlebag" + cost 35 + +define-item "Handmirror" + cost 20 + +define-item "Magnifying glass" + cost 20 + +define-item "Telescope" + cost 40 + +define-item "Rope ladder" + cost 15 + +define-item "Torches (3x)" + cost 10 + +define-item "Staff" + cost 10 + +define-item "Cooking pot" + cost 8 + +define-item "Soap" + cost 2 + +define-item "Towel" + cost 5 + +define-item "Boots" + cost 10 \ No newline at end of file diff --git a/ATL/test/example.atl b/ATL/test/example.atl new file mode 100644 index 0000000..3101edd --- /dev/null +++ b/ATL/test/example.atl @@ -0,0 +1,72 @@ +# This is an example Atlantis file - I use it to explore what the language +# should end up looking like. + +load races.atl +load classes.atl + + +define-quest Kill hellhound + objective kill hellhound + reward gold 300 + + +define-spell Ray of death + type kill + min-intelligence 12 + success-rate 35 + + +define-npc Hades + say Oh, amazing, you actually got here! Who did you bribe? + sell 30 Ambrosia + quest Kill hellhound + + +define-item Scroll of light + value 80 + add-experience 20 + add-spell Ray of death + +define-item Ambrosia + category Food + add-health 5 + + +define-monster Hellhound + armor-class 8 + strength 10 + melee-weapon 2 claws + experience 50 + spawn 2 + aggression 60 + +define-monster Fury + armor-class 5 + strength 8 + melee-weapon 10 fire whip + experience 74 + spawn 0.8 + aggression 30 + + +define-place Nowhere + description Welcome to Nowhere! You are in the void, the space between \ +the worlds. Around you is black. Black, except for one tiny pin-prick of light \ +to the north. + neighbour Elysium + +define-place Elysium + description Congratulations! You have achieved Elysium! + neighbour Nowhere + neighbour Fields of punishment + npc Hades + item Scroll of light + +define-place Fields of punishment + description You really, really don't want to end up here... + neighbour Elysium + monster Hellhound + monster Fury + + +start-place Elysium \ No newline at end of file diff --git a/ATL/test/game-objects.atl b/ATL/test/game-objects.atl new file mode 100644 index 0000000..19a648a --- /dev/null +++ b/ATL/test/game-objects.atl @@ -0,0 +1,51 @@ +; This module defines items, NPCs, monsters and weapons for my +; Atlantis test world. +; @author Daniel Vedder +; @date 02/06/2015 + +define-monster "Fury" + description "Hades' messengers, torturers, assassins. Beware!" + health 10 + dexterity 20 + strength 10 + aggression 30 + armour-class 3 + weapon "fire-whip" + +define-weapon "fire-whip" + description "A 10-foot long whip, blazing with magical fire" + type "whip" + damage 2 + +define-item "Anaklusmos" + description "Riptide, a sword for heroes!" + weapon "yes" + +define-item "Lightning bolt" + description "Zeus lightning bolt - the most powerful weapon of the universe!" + weapon "yes" + +define-weapon "Anaklusmos" + description "Riptide, a sword for heroes!" + type "sword" + damage 4 + +define-weapon "Lightning bolt" ; primarily for debugging + description "Zeus lightning bolt - the most powerful weapon of the universe!" + type "magic" + damage 40 + +define-npc "Hades" + description "Hades, Lord of the Dead!" + says "Beware, mortal - do not tempt me!" + +define-npc "Charon" + description "A robe-clad ghoul, dread ferryman of the Styx." + says "..." + +define-npc "Persephone" ;testing the shop system + description "Hades' beautiful wife, bringer of summer." + says "Welcome, my friend from the upper world!" + sells "Sleeping potion" + sells "Handmirror" + sells "Book of Lore" \ No newline at end of file diff --git a/ATL/test/lisp-test.atl b/ATL/test/lisp-test.atl new file mode 100644 index 0000000..b68d944 --- /dev/null +++ b/ATL/test/lisp-test.atl @@ -0,0 +1,51 @@ +; This is a simple ATL file to test whatever I have implemented so far. +; @author Daniel Vedder +; @date 04/05/2015 + +name-world "Underworld" + +define-player "Start" + money 200 + place "Fields of Punishment" + max-health 50 + health 50 + +define-place "Nowhere" + description "Welcome to Nowhere! +You are in the void, the space between the worlds. Around you is black. +Black, except for one tiny pin-prick of light to the north." + neighbour "Styx" + +define-place "Elysium" + description "This is where you want to be when you are six feet under..." + neighbour "Styx" + neighbour "Fields of Punishment" + neighbour "Fields of Asphodel" + npc "Persephone" + +define-place "Fields of Punishment" + description "Precisely where you do NOT want to end up..." + neighbour "Styx" + neighbour "Elysium" + neighbour "Fields of Asphodel" + monster "Fury" + +define-place "Fields of Asphodel" + description "Nothing special. Really, nothing special at all. +Just a whole load of dead people..." + neighbour "Fields of Punishment" + neighbour "Elysium" + npc "Hades" + +define-place "Styx" + description "The great river that all must cross - but woe to those who do!" + neighbour "Fields of Punishment" + neighbour "Elysium" + neighbour "Nowhere" + item "Anaklusmos" + npc "Charon" + +load-file lisp-test.atl ;Testing whether recursive loading is prevented +load-file races-classes.atl +load-file game-objects.atl +load-file creator-test.atl diff --git a/ATL/test/races-classes.atl b/ATL/test/races-classes.atl new file mode 100644 index 0000000..659310f --- /dev/null +++ b/ATL/test/races-classes.atl @@ -0,0 +1,40 @@ +; A file to define all the races and character classes in my test world. +; @author Daniel Vedder +; @date 18/05/2015 + +;;; RACES + +define-race "Elf" + description "The oldest and wisest race of Middle Earth" + +define-race "Dwarf" + description "Sons of the Earth, descendants of Durin" + +define-race "Hobbit" + description "Peace-loving and kind, true gentlemen" + +define-race "Human" + description "Boring, exciting, ever-changing, never-changing man..." + + +;;; CLASSES + +define-class "Warrior" + description "Fighting as a passion!" + special-item "Sword" + +define-class "Wizard" + description "Ancient, powerful, keepers of the Knowledge..." + special-item "staff" + +define-class "Burglar" + description "Breaking and entering taken to the max!" + special-item "lockpick" + special-item "torch" + +define-class "Craftsman" + description "Maker of all things beautiful and useful" + special-item "hammer" + +load-file lisp-test.atl ;Again, a test for recursive loading +load-file test-extension.lisp ;Testing whether Lisp extensions are loaded \ No newline at end of file diff --git a/ATL/test/test-extension.lisp b/ATL/test/test-extension.lisp new file mode 100644 index 0000000..f01660a --- /dev/null +++ b/ATL/test/test-extension.lisp @@ -0,0 +1,5 @@ +;; This file tests whether the interpreter loads Lisp files correctly. +;; author: Daniel Vedder +;; date: 21/05/2015 + +(debugging "~&Loaded Lisp extension file.") diff --git a/lisp/atlantis.lisp b/lisp/atlantis.lisp index 47d2ccf..cb1958c 100644 --- a/lisp/atlantis.lisp +++ b/lisp/atlantis.lisp @@ -22,7 +22,7 @@ (defun development () "A method to easily test whatever feature I am currently developing" (setf *debugging* T) - (load-file "../ATL/lisp-test.atl") + (load-file "../ATL/test/lisp-test.atl") (let ((player (make-player :name "Bilbo" :race "Hobbit" :class "Burglar" :place "Fields of Punishment" diff --git a/ATL/Lugwey/items.atl b/ATL/Lugwey/items.atl new file mode 100644 index 0000000..63b407e --- /dev/null +++ b/ATL/Lugwey/items.atl @@ -0,0 +1,26 @@ +; The Monastery of Lugwey is the first "real" world I am creating with ATL. +; Its purpose (apart from being playable) is to help with the development of +; Atlantis by showing potential deficits, bringing up new ideas, etc. +; +; This file holds all the item descriptions. +; +; @author Daniel Vedder +; @date 09/07/2015 + +define-item "Parchment" + description "Dried animal skins used as paper." + cost 5 + +define-item "Quill" + description "A goose-feather, sharpened at one end to make a pen." + cost 5 + +define-item "Dagger" + description "A long, sharp knife, useful for self defence." + weapon "Yes" + cost 20 + +define-weapon "Dagger" + description "A long, sharp knife, useful for self defence." + type "Knife" + damage 3 \ No newline at end of file diff --git a/ATL/Lugwey/lugwey.atl b/ATL/Lugwey/lugwey.atl new file mode 100644 index 0000000..12f6cd7 --- /dev/null +++ b/ATL/Lugwey/lugwey.atl @@ -0,0 +1,38 @@ +; The Monastery of Lugwey is the first "real" world I am creating with ATL. +; Its purpose (apart from being playable) is to help with the development of +; Atlantis by showing potential deficits, bringing up new ideas, etc. +; +; This is the main world file. +; +; @author Daniel Vedder +; @date 09/07/2015 + +name-world "Lugwey" + +define-player "Start" + money 50 + place "Gate" + max-health 50 + health 50 + +define-race "Human" + description "Errare humanum est" + intelligence-bonus 1 + +define-class "Scholar" + description "Dubio ergo corgito, corgito ergo sum" + special-item "Paper" + special-item "Quill" + +;; DEVELOPMENT +define-player "Leonardo" + race "Human" + class "Scholar" + item "Dagger" + weapon "Dagger" + money 60 + place "Gate" + +load-file "places.atl" +load-file "items.atl" +load-file "npcs.atl" \ No newline at end of file diff --git a/ATL/Lugwey/npcs.atl b/ATL/Lugwey/npcs.atl new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/ATL/Lugwey/npcs.atl diff --git a/ATL/Lugwey/places.atl b/ATL/Lugwey/places.atl new file mode 100644 index 0000000..c11f1a2 --- /dev/null +++ b/ATL/Lugwey/places.atl @@ -0,0 +1,36 @@ +; The Monastery of Lugwey is the first "real" world I am creating with ATL. +; Its purpose (apart from being playable) is to help with the development of +; Atlantis by showing potential deficits, bringing up new ideas, etc. +; +; This file holds all the place descriptions. +; +; @author Daniel Vedder +; @date 09/07/2015 + +define-place "Gate" + description "An old, partly moss-covered stone wall rises up in front of + you. Set in it, a wooden gate, reinforced with rusty iron strips. + One wing is open, permitting a view into the space beyond. + Behind you, the dusty track leads off into the forest. + + A monk is sitting in the gate house, obviously bored." + neighbour "Forest track" + neighbour "Monastery grounds" + npc "Gatekeeper" + +define-place "Monastery grounds" + description "Paths criss-cross well-kept lawns. Here and there, roses bloom + in a flower bed. On one side stand the monastery buildings with + their calm, ancient dignity. On the other, the gardens, stables + and agricultural outhouses speak of a simple working life." + neighbour "Gate" + neighbour "Chapel" + neighbour "Dormitory" + neighbour "Gardens" + neighbour "Stable" + +define-place "Forest track" + description "A rutted track, scarred by the wheels of many carts, leads + through the forest from the monastery to the village." + neighbour "Gate" + item "Signet ring" \ No newline at end of file diff --git a/ATL/conversion/ATL-item-conversion.csv b/ATL/conversion/ATL-item-conversion.csv new file mode 100644 index 0000000..9a50392 --- /dev/null +++ b/ATL/conversion/ATL-item-conversion.csv @@ -0,0 +1,63 @@ +Item, +Name,cost +Rope (20m),5 +Backpack,5 +Knife,10 +Short sword,40 +Long sword,80 +Dagger,20 +Spear,25 +Short bow,30 +Longbow,60 +Slingshot,15 +Throwing knife,15 +Quiver of arrows,20 +Leather armour,60 +Chain mail,120 +Plate armour,200 +Buckler,35 +Full shield,45 +Candles (3x),5 +Matches,1 +Food rations (5x),10 +Grappling hook,15 +Fishing net,25 +Fishing rod,15 +Tent (2 people),30 +Cloak,15 +Hat,10 +Water bottle,5 +Compass,20 +Quill and ink,5 +Parchment,5 +Blanket,5 +Book of Legends,55 +Book of Lore,55 +Medicinal herbs,10 +Bandages (3x),5 +Tea leaves,5 +Sleeping potion,15 +Leather pouch,2 +Face mask,10 +Dye,5 +Cloth,5 +Scissors,15 +Needle and thread,3 +Canvas,8 +String,2 +Hatchet,20 +Map,35 +Pony,100 +Horse,180 +Saddle and bridle,45 +Saddlebag,35 +Handmirror,20 +Magnifying glass,20 +Telescope,40 +Rope ladder,15 +Torches (3x),10 +Staff,10 +Cooking pot,8 +Soap,2 +Towel,5 +Boots,10 diff --git a/ATL/conversion/ATL-item-conversion.ods b/ATL/conversion/ATL-item-conversion.ods new file mode 100644 index 0000000..a5442c2 --- /dev/null +++ b/ATL/conversion/ATL-item-conversion.ods Binary files differ diff --git a/ATL/conversion/spreadsheet-export b/ATL/conversion/spreadsheet-export new file mode 100644 index 0000000..9228e79 --- /dev/null +++ b/ATL/conversion/spreadsheet-export @@ -0,0 +1,62 @@ +Rope (20m) 5 +Backpack 5 +Knife 10 +Short sword 40 +Long sword 80 +Dagger 20 +Spear 25 +Short bow 30 +Longbow 60 +Slingshot 15 +Throwing knife 15 +Quiver of arrows 20 +Leather armour 60 +Chain mail 120 +Plate armour 200 +Buckler 35 +Full shield 45 +Candles (3x) 5 +Matches 1 +Food rations (5x) 10 +Grappling hook 15 +Fishing net 25 +Fishing rod 15 +Tent (2 people) 30 +Cloak 15 +Hat 10 +Water bottle 5 +Compass 20 +Quill and ink 5 +Parchment 5 +Blanket 5 +Book of Legends 55 +Book of Lore 55 +Medicinal herbs 10 +Bandages (3x) 5 +Tea leaves 5 +Sleeping potion 15 +Leather pouch 2 +Face mask 10 +Dye 5 +Cloth 5 +Scissors 15 +Needle and thread 3 +Canvas 8 +String 2 +Hatchet 20 +Map 35 +Pony 100 +Horse 180 +Saddle and bridle 45 +Saddlebag 35 +Handmirror 20 +Magnifying glass 20 +Telescope 40 +Rope ladder 15 +Torches (3x) 10 +Staff 10 +Cooking pot 8 +Soap 2 +Towel 5 +Boots 10 + diff --git a/ATL/name_generator.py b/ATL/name_generator.py new file mode 100644 index 0000000..d34e37d --- /dev/null +++ b/ATL/name_generator.py @@ -0,0 +1,98 @@ +''' +This script is meant to help me write "Crown of the Khadalun". It randomly +combines letters and syllables to suggest new fantasy names. +@author: Daniel Vedder +@version 1.1 +''' + +import random +import sys + +global vowels, consonants +vowels = ("a", "e", "i", "o", "u") +consonants = ("b", "c", "d", "f", "g", "h", "j", "k", "l", "m", "n", "p", "q", "r", "s", "t", "v", "w", "x", "y", "z") + +''' +Create a random syllable between 1 and 3 letters long +''' +def create_syllable(): + global vowels, consonants + length = random.randint(1, 3) + syllable = "" + if length == 1: + syllable = vowels[random.randint(0, 4)] + else: + for l in range(1, length+1, 1): + next_letter = "" + if l == 1 or l == 3: + next_letter = consonants[random.randint(0, 20)] + elif l == 2: + next_letter = vowels[random.randint(0, 4)] + syllable = syllable+next_letter + return syllable + +''' +Join several syllables together to form a word +@param length The number of syllables (0 for random up to 5) +''' +def create_word(length=0): + if length == 0: + length = random.randint(1, 5) + word = "" + for i in range(0, length+1, 1): + next_syllable = create_syllable() + word = word+next_syllable + if word[-1] in vowels and random.randint(0, 1) == 1: + word = word+consonants[random.randint(0, 20)] + word = word[0].upper()+word[1:] + return word + +''' +Interactively suggest a list of names to the user, saving those +he/she chooses to file. +''' +def interactive(): + welcome_text = """ +Welcome! This script will suggest a series of random names to +you. After each name, type 'y' if you want to keep it, otherwise +type 'n' or just hit ENTER. To stop, type 'quit' or 'done'. +'cancel' stops the session without saving anything.""" + print(welcome_text) + names = "" + next_name = create_word() + keep = "" + cancel = ("quit", "done", "exit", "cancel") + while keep not in cancel: + keep = input(">> "+next_name+": ") + if keep == "y" or keep == "Y": + names = names+next_name+"\n" + next_name = create_word() + if keep == "cancel": + print("Script cancelled.") + sys.exit() + try: + name_file = open("suggested_names.txt", "a") + name_file.write(names) + name_file.close() + except: + print("Error saving name list to suggested_names.txt!") + print("Goodbye!") + +''' +Print a list of random names +@param n Number of words, default: 10 +''' +def batch(n=10): + wordlist = create_word() + for n in range(0, n-1, 1): + wordlist = wordlist+", "+create_word() + print(wordlist) + +if __name__ == "__main__": + if "-i" in sys.argv or "--interactive" in sys.argv: + interactive() + elif "-n" in sys.argv: + n = sys.argv[sys.argv.index("-n")+1] + batch(int(n)) + else: + batch() diff --git a/ATL/suggested_names.txt b/ATL/suggested_names.txt new file mode 100644 index 0000000..4d29d4b --- /dev/null +++ b/ATL/suggested_names.txt @@ -0,0 +1,18 @@ +Icaduwlin +Feloh +Iacud +Himki +Utum +Ceuc +Vebo +Ioalim +Ohuk +Odi +Onad +Ohi +Yucac +Alonda +Busu +Upatranuraf +Ovuk +Fivrihog diff --git a/ATL/test/creator-test.atl b/ATL/test/creator-test.atl new file mode 100644 index 0000000..6209e7c --- /dev/null +++ b/ATL/test/creator-test.atl @@ -0,0 +1,185 @@ +;; This code has been automatically generated by the +;; Atlantis world creator. + +define-item "Rope (20m)" + cost 5 + +define-item "Backpack" + cost 5 + +define-item "Knife" + cost 10 + +define-item "Short sword" + cost 40 + +define-item "Long sword" + cost 80 + +define-item "Dagger" + cost 20 + +define-item "Spear" + cost 25 + +define-item "Short bow" + cost 30 + +define-item "Longbow" + cost 60 + +define-item "Slingshot" + cost 15 + +define-item "Throwing knife" + cost 15 + +define-item "Quiver of arrows" + cost 20 + +define-item "Leather armour" + cost 60 + +define-item "Chain mail" + cost 120 + +define-item "Plate armour" + cost 200 + +define-item "Buckler" + cost 35 + +define-item "Full shield" + cost 45 + +define-item "Candles (3x)" + cost 5 + +define-item "Matches" + cost 1 + +define-item "Food rations (5x)" + cost 10 + +define-item "Grappling hook" + cost 15 + +define-item "Fishing net" + cost 25 + +define-item "Fishing rod" + cost 15 + +define-item "Tent (2 people)" + cost 30 + +define-item "Cloak" + cost 15 + +define-item "Hat" + cost 10 + +define-item "Water bottle" + cost 5 + +define-item "Compass" + cost 20 + +define-item "Quill and ink" + cost 5 + +define-item "Parchment" + cost 5 + +define-item "Blanket" + cost 5 + +define-item "Book of Legends" + cost 55 + +define-item "Book of Lore" + cost 55 + +define-item "Medicinal herbs" + cost 10 + +define-item "Bandages (3x)" + cost 5 + +define-item "Tea leaves" + cost 5 + +define-item "Sleeping potion" + cost 15 + +define-item "Leather pouch" + cost 2 + +define-item "Face mask" + cost 10 + +define-item "Dye" + cost 5 + +define-item "Cloth" + cost 5 + +define-item "Scissors" + cost 15 + +define-item "Needle and thread" + cost 3 + +define-item "Canvas" + cost 8 + +define-item "String" + cost 2 + +define-item "Hatchet" + cost 20 + +define-item "Map" + cost 35 + +define-item "Pony" + cost 100 + +define-item "Horse" + cost 180 + +define-item "Saddle and bridle" + cost 45 + +define-item "Saddlebag" + cost 35 + +define-item "Handmirror" + cost 20 + +define-item "Magnifying glass" + cost 20 + +define-item "Telescope" + cost 40 + +define-item "Rope ladder" + cost 15 + +define-item "Torches (3x)" + cost 10 + +define-item "Staff" + cost 10 + +define-item "Cooking pot" + cost 8 + +define-item "Soap" + cost 2 + +define-item "Towel" + cost 5 + +define-item "Boots" + cost 10 \ No newline at end of file diff --git a/ATL/test/example.atl b/ATL/test/example.atl new file mode 100644 index 0000000..3101edd --- /dev/null +++ b/ATL/test/example.atl @@ -0,0 +1,72 @@ +# This is an example Atlantis file - I use it to explore what the language +# should end up looking like. + +load races.atl +load classes.atl + + +define-quest Kill hellhound + objective kill hellhound + reward gold 300 + + +define-spell Ray of death + type kill + min-intelligence 12 + success-rate 35 + + +define-npc Hades + say Oh, amazing, you actually got here! Who did you bribe? + sell 30 Ambrosia + quest Kill hellhound + + +define-item Scroll of light + value 80 + add-experience 20 + add-spell Ray of death + +define-item Ambrosia + category Food + add-health 5 + + +define-monster Hellhound + armor-class 8 + strength 10 + melee-weapon 2 claws + experience 50 + spawn 2 + aggression 60 + +define-monster Fury + armor-class 5 + strength 8 + melee-weapon 10 fire whip + experience 74 + spawn 0.8 + aggression 30 + + +define-place Nowhere + description Welcome to Nowhere! You are in the void, the space between \ +the worlds. Around you is black. Black, except for one tiny pin-prick of light \ +to the north. + neighbour Elysium + +define-place Elysium + description Congratulations! You have achieved Elysium! + neighbour Nowhere + neighbour Fields of punishment + npc Hades + item Scroll of light + +define-place Fields of punishment + description You really, really don't want to end up here... + neighbour Elysium + monster Hellhound + monster Fury + + +start-place Elysium \ No newline at end of file diff --git a/ATL/test/game-objects.atl b/ATL/test/game-objects.atl new file mode 100644 index 0000000..19a648a --- /dev/null +++ b/ATL/test/game-objects.atl @@ -0,0 +1,51 @@ +; This module defines items, NPCs, monsters and weapons for my +; Atlantis test world. +; @author Daniel Vedder +; @date 02/06/2015 + +define-monster "Fury" + description "Hades' messengers, torturers, assassins. Beware!" + health 10 + dexterity 20 + strength 10 + aggression 30 + armour-class 3 + weapon "fire-whip" + +define-weapon "fire-whip" + description "A 10-foot long whip, blazing with magical fire" + type "whip" + damage 2 + +define-item "Anaklusmos" + description "Riptide, a sword for heroes!" + weapon "yes" + +define-item "Lightning bolt" + description "Zeus lightning bolt - the most powerful weapon of the universe!" + weapon "yes" + +define-weapon "Anaklusmos" + description "Riptide, a sword for heroes!" + type "sword" + damage 4 + +define-weapon "Lightning bolt" ; primarily for debugging + description "Zeus lightning bolt - the most powerful weapon of the universe!" + type "magic" + damage 40 + +define-npc "Hades" + description "Hades, Lord of the Dead!" + says "Beware, mortal - do not tempt me!" + +define-npc "Charon" + description "A robe-clad ghoul, dread ferryman of the Styx." + says "..." + +define-npc "Persephone" ;testing the shop system + description "Hades' beautiful wife, bringer of summer." + says "Welcome, my friend from the upper world!" + sells "Sleeping potion" + sells "Handmirror" + sells "Book of Lore" \ No newline at end of file diff --git a/ATL/test/lisp-test.atl b/ATL/test/lisp-test.atl new file mode 100644 index 0000000..b68d944 --- /dev/null +++ b/ATL/test/lisp-test.atl @@ -0,0 +1,51 @@ +; This is a simple ATL file to test whatever I have implemented so far. +; @author Daniel Vedder +; @date 04/05/2015 + +name-world "Underworld" + +define-player "Start" + money 200 + place "Fields of Punishment" + max-health 50 + health 50 + +define-place "Nowhere" + description "Welcome to Nowhere! +You are in the void, the space between the worlds. Around you is black. +Black, except for one tiny pin-prick of light to the north." + neighbour "Styx" + +define-place "Elysium" + description "This is where you want to be when you are six feet under..." + neighbour "Styx" + neighbour "Fields of Punishment" + neighbour "Fields of Asphodel" + npc "Persephone" + +define-place "Fields of Punishment" + description "Precisely where you do NOT want to end up..." + neighbour "Styx" + neighbour "Elysium" + neighbour "Fields of Asphodel" + monster "Fury" + +define-place "Fields of Asphodel" + description "Nothing special. Really, nothing special at all. +Just a whole load of dead people..." + neighbour "Fields of Punishment" + neighbour "Elysium" + npc "Hades" + +define-place "Styx" + description "The great river that all must cross - but woe to those who do!" + neighbour "Fields of Punishment" + neighbour "Elysium" + neighbour "Nowhere" + item "Anaklusmos" + npc "Charon" + +load-file lisp-test.atl ;Testing whether recursive loading is prevented +load-file races-classes.atl +load-file game-objects.atl +load-file creator-test.atl diff --git a/ATL/test/races-classes.atl b/ATL/test/races-classes.atl new file mode 100644 index 0000000..659310f --- /dev/null +++ b/ATL/test/races-classes.atl @@ -0,0 +1,40 @@ +; A file to define all the races and character classes in my test world. +; @author Daniel Vedder +; @date 18/05/2015 + +;;; RACES + +define-race "Elf" + description "The oldest and wisest race of Middle Earth" + +define-race "Dwarf" + description "Sons of the Earth, descendants of Durin" + +define-race "Hobbit" + description "Peace-loving and kind, true gentlemen" + +define-race "Human" + description "Boring, exciting, ever-changing, never-changing man..." + + +;;; CLASSES + +define-class "Warrior" + description "Fighting as a passion!" + special-item "Sword" + +define-class "Wizard" + description "Ancient, powerful, keepers of the Knowledge..." + special-item "staff" + +define-class "Burglar" + description "Breaking and entering taken to the max!" + special-item "lockpick" + special-item "torch" + +define-class "Craftsman" + description "Maker of all things beautiful and useful" + special-item "hammer" + +load-file lisp-test.atl ;Again, a test for recursive loading +load-file test-extension.lisp ;Testing whether Lisp extensions are loaded \ No newline at end of file diff --git a/ATL/test/test-extension.lisp b/ATL/test/test-extension.lisp new file mode 100644 index 0000000..f01660a --- /dev/null +++ b/ATL/test/test-extension.lisp @@ -0,0 +1,5 @@ +;; This file tests whether the interpreter loads Lisp files correctly. +;; author: Daniel Vedder +;; date: 21/05/2015 + +(debugging "~&Loaded Lisp extension file.") diff --git a/lisp/atlantis.lisp b/lisp/atlantis.lisp index 47d2ccf..cb1958c 100644 --- a/lisp/atlantis.lisp +++ b/lisp/atlantis.lisp @@ -22,7 +22,7 @@ (defun development () "A method to easily test whatever feature I am currently developing" (setf *debugging* T) - (load-file "../ATL/lisp-test.atl") + (load-file "../ATL/test/lisp-test.atl") (let ((player (make-player :name "Bilbo" :race "Hobbit" :class "Burglar" :place "Fields of Punishment" diff --git a/lisp/interpreter.lisp b/lisp/interpreter.lisp index 7adfbb5..bdc3cac 100644 --- a/lisp/interpreter.lisp +++ b/lisp/interpreter.lisp @@ -69,7 +69,8 @@ ;; concatenate string arguments spanning several lines (while (= (count-instances #\" line) 1) (incf line-nr) - (setf line (concatenate 'string line (nth line-nr source)))) + (setf line (concatenate 'string line (to-string #\Newline) + (trim-whitespace (nth line-nr source))))) (cond ((zerop (length line)) (when current-object (add-game-object current-object)) (setf current-object NIL)) diff --git a/ATL/Lugwey/items.atl b/ATL/Lugwey/items.atl new file mode 100644 index 0000000..63b407e --- /dev/null +++ b/ATL/Lugwey/items.atl @@ -0,0 +1,26 @@ +; The Monastery of Lugwey is the first "real" world I am creating with ATL. +; Its purpose (apart from being playable) is to help with the development of +; Atlantis by showing potential deficits, bringing up new ideas, etc. +; +; This file holds all the item descriptions. +; +; @author Daniel Vedder +; @date 09/07/2015 + +define-item "Parchment" + description "Dried animal skins used as paper." + cost 5 + +define-item "Quill" + description "A goose-feather, sharpened at one end to make a pen." + cost 5 + +define-item "Dagger" + description "A long, sharp knife, useful for self defence." + weapon "Yes" + cost 20 + +define-weapon "Dagger" + description "A long, sharp knife, useful for self defence." + type "Knife" + damage 3 \ No newline at end of file diff --git a/ATL/Lugwey/lugwey.atl b/ATL/Lugwey/lugwey.atl new file mode 100644 index 0000000..12f6cd7 --- /dev/null +++ b/ATL/Lugwey/lugwey.atl @@ -0,0 +1,38 @@ +; The Monastery of Lugwey is the first "real" world I am creating with ATL. +; Its purpose (apart from being playable) is to help with the development of +; Atlantis by showing potential deficits, bringing up new ideas, etc. +; +; This is the main world file. +; +; @author Daniel Vedder +; @date 09/07/2015 + +name-world "Lugwey" + +define-player "Start" + money 50 + place "Gate" + max-health 50 + health 50 + +define-race "Human" + description "Errare humanum est" + intelligence-bonus 1 + +define-class "Scholar" + description "Dubio ergo corgito, corgito ergo sum" + special-item "Paper" + special-item "Quill" + +;; DEVELOPMENT +define-player "Leonardo" + race "Human" + class "Scholar" + item "Dagger" + weapon "Dagger" + money 60 + place "Gate" + +load-file "places.atl" +load-file "items.atl" +load-file "npcs.atl" \ No newline at end of file diff --git a/ATL/Lugwey/npcs.atl b/ATL/Lugwey/npcs.atl new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/ATL/Lugwey/npcs.atl diff --git a/ATL/Lugwey/places.atl b/ATL/Lugwey/places.atl new file mode 100644 index 0000000..c11f1a2 --- /dev/null +++ b/ATL/Lugwey/places.atl @@ -0,0 +1,36 @@ +; The Monastery of Lugwey is the first "real" world I am creating with ATL. +; Its purpose (apart from being playable) is to help with the development of +; Atlantis by showing potential deficits, bringing up new ideas, etc. +; +; This file holds all the place descriptions. +; +; @author Daniel Vedder +; @date 09/07/2015 + +define-place "Gate" + description "An old, partly moss-covered stone wall rises up in front of + you. Set in it, a wooden gate, reinforced with rusty iron strips. + One wing is open, permitting a view into the space beyond. + Behind you, the dusty track leads off into the forest. + + A monk is sitting in the gate house, obviously bored." + neighbour "Forest track" + neighbour "Monastery grounds" + npc "Gatekeeper" + +define-place "Monastery grounds" + description "Paths criss-cross well-kept lawns. Here and there, roses bloom + in a flower bed. On one side stand the monastery buildings with + their calm, ancient dignity. On the other, the gardens, stables + and agricultural outhouses speak of a simple working life." + neighbour "Gate" + neighbour "Chapel" + neighbour "Dormitory" + neighbour "Gardens" + neighbour "Stable" + +define-place "Forest track" + description "A rutted track, scarred by the wheels of many carts, leads + through the forest from the monastery to the village." + neighbour "Gate" + item "Signet ring" \ No newline at end of file diff --git a/ATL/conversion/ATL-item-conversion.csv b/ATL/conversion/ATL-item-conversion.csv new file mode 100644 index 0000000..9a50392 --- /dev/null +++ b/ATL/conversion/ATL-item-conversion.csv @@ -0,0 +1,63 @@ +Item, +Name,cost +Rope (20m),5 +Backpack,5 +Knife,10 +Short sword,40 +Long sword,80 +Dagger,20 +Spear,25 +Short bow,30 +Longbow,60 +Slingshot,15 +Throwing knife,15 +Quiver of arrows,20 +Leather armour,60 +Chain mail,120 +Plate armour,200 +Buckler,35 +Full shield,45 +Candles (3x),5 +Matches,1 +Food rations (5x),10 +Grappling hook,15 +Fishing net,25 +Fishing rod,15 +Tent (2 people),30 +Cloak,15 +Hat,10 +Water bottle,5 +Compass,20 +Quill and ink,5 +Parchment,5 +Blanket,5 +Book of Legends,55 +Book of Lore,55 +Medicinal herbs,10 +Bandages (3x),5 +Tea leaves,5 +Sleeping potion,15 +Leather pouch,2 +Face mask,10 +Dye,5 +Cloth,5 +Scissors,15 +Needle and thread,3 +Canvas,8 +String,2 +Hatchet,20 +Map,35 +Pony,100 +Horse,180 +Saddle and bridle,45 +Saddlebag,35 +Handmirror,20 +Magnifying glass,20 +Telescope,40 +Rope ladder,15 +Torches (3x),10 +Staff,10 +Cooking pot,8 +Soap,2 +Towel,5 +Boots,10 diff --git a/ATL/conversion/ATL-item-conversion.ods b/ATL/conversion/ATL-item-conversion.ods new file mode 100644 index 0000000..a5442c2 --- /dev/null +++ b/ATL/conversion/ATL-item-conversion.ods Binary files differ diff --git a/ATL/conversion/spreadsheet-export b/ATL/conversion/spreadsheet-export new file mode 100644 index 0000000..9228e79 --- /dev/null +++ b/ATL/conversion/spreadsheet-export @@ -0,0 +1,62 @@ +Rope (20m) 5 +Backpack 5 +Knife 10 +Short sword 40 +Long sword 80 +Dagger 20 +Spear 25 +Short bow 30 +Longbow 60 +Slingshot 15 +Throwing knife 15 +Quiver of arrows 20 +Leather armour 60 +Chain mail 120 +Plate armour 200 +Buckler 35 +Full shield 45 +Candles (3x) 5 +Matches 1 +Food rations (5x) 10 +Grappling hook 15 +Fishing net 25 +Fishing rod 15 +Tent (2 people) 30 +Cloak 15 +Hat 10 +Water bottle 5 +Compass 20 +Quill and ink 5 +Parchment 5 +Blanket 5 +Book of Legends 55 +Book of Lore 55 +Medicinal herbs 10 +Bandages (3x) 5 +Tea leaves 5 +Sleeping potion 15 +Leather pouch 2 +Face mask 10 +Dye 5 +Cloth 5 +Scissors 15 +Needle and thread 3 +Canvas 8 +String 2 +Hatchet 20 +Map 35 +Pony 100 +Horse 180 +Saddle and bridle 45 +Saddlebag 35 +Handmirror 20 +Magnifying glass 20 +Telescope 40 +Rope ladder 15 +Torches (3x) 10 +Staff 10 +Cooking pot 8 +Soap 2 +Towel 5 +Boots 10 + diff --git a/ATL/name_generator.py b/ATL/name_generator.py new file mode 100644 index 0000000..d34e37d --- /dev/null +++ b/ATL/name_generator.py @@ -0,0 +1,98 @@ +''' +This script is meant to help me write "Crown of the Khadalun". It randomly +combines letters and syllables to suggest new fantasy names. +@author: Daniel Vedder +@version 1.1 +''' + +import random +import sys + +global vowels, consonants +vowels = ("a", "e", "i", "o", "u") +consonants = ("b", "c", "d", "f", "g", "h", "j", "k", "l", "m", "n", "p", "q", "r", "s", "t", "v", "w", "x", "y", "z") + +''' +Create a random syllable between 1 and 3 letters long +''' +def create_syllable(): + global vowels, consonants + length = random.randint(1, 3) + syllable = "" + if length == 1: + syllable = vowels[random.randint(0, 4)] + else: + for l in range(1, length+1, 1): + next_letter = "" + if l == 1 or l == 3: + next_letter = consonants[random.randint(0, 20)] + elif l == 2: + next_letter = vowels[random.randint(0, 4)] + syllable = syllable+next_letter + return syllable + +''' +Join several syllables together to form a word +@param length The number of syllables (0 for random up to 5) +''' +def create_word(length=0): + if length == 0: + length = random.randint(1, 5) + word = "" + for i in range(0, length+1, 1): + next_syllable = create_syllable() + word = word+next_syllable + if word[-1] in vowels and random.randint(0, 1) == 1: + word = word+consonants[random.randint(0, 20)] + word = word[0].upper()+word[1:] + return word + +''' +Interactively suggest a list of names to the user, saving those +he/she chooses to file. +''' +def interactive(): + welcome_text = """ +Welcome! This script will suggest a series of random names to +you. After each name, type 'y' if you want to keep it, otherwise +type 'n' or just hit ENTER. To stop, type 'quit' or 'done'. +'cancel' stops the session without saving anything.""" + print(welcome_text) + names = "" + next_name = create_word() + keep = "" + cancel = ("quit", "done", "exit", "cancel") + while keep not in cancel: + keep = input(">> "+next_name+": ") + if keep == "y" or keep == "Y": + names = names+next_name+"\n" + next_name = create_word() + if keep == "cancel": + print("Script cancelled.") + sys.exit() + try: + name_file = open("suggested_names.txt", "a") + name_file.write(names) + name_file.close() + except: + print("Error saving name list to suggested_names.txt!") + print("Goodbye!") + +''' +Print a list of random names +@param n Number of words, default: 10 +''' +def batch(n=10): + wordlist = create_word() + for n in range(0, n-1, 1): + wordlist = wordlist+", "+create_word() + print(wordlist) + +if __name__ == "__main__": + if "-i" in sys.argv or "--interactive" in sys.argv: + interactive() + elif "-n" in sys.argv: + n = sys.argv[sys.argv.index("-n")+1] + batch(int(n)) + else: + batch() diff --git a/ATL/suggested_names.txt b/ATL/suggested_names.txt new file mode 100644 index 0000000..4d29d4b --- /dev/null +++ b/ATL/suggested_names.txt @@ -0,0 +1,18 @@ +Icaduwlin +Feloh +Iacud +Himki +Utum +Ceuc +Vebo +Ioalim +Ohuk +Odi +Onad +Ohi +Yucac +Alonda +Busu +Upatranuraf +Ovuk +Fivrihog diff --git a/ATL/test/creator-test.atl b/ATL/test/creator-test.atl new file mode 100644 index 0000000..6209e7c --- /dev/null +++ b/ATL/test/creator-test.atl @@ -0,0 +1,185 @@ +;; This code has been automatically generated by the +;; Atlantis world creator. + +define-item "Rope (20m)" + cost 5 + +define-item "Backpack" + cost 5 + +define-item "Knife" + cost 10 + +define-item "Short sword" + cost 40 + +define-item "Long sword" + cost 80 + +define-item "Dagger" + cost 20 + +define-item "Spear" + cost 25 + +define-item "Short bow" + cost 30 + +define-item "Longbow" + cost 60 + +define-item "Slingshot" + cost 15 + +define-item "Throwing knife" + cost 15 + +define-item "Quiver of arrows" + cost 20 + +define-item "Leather armour" + cost 60 + +define-item "Chain mail" + cost 120 + +define-item "Plate armour" + cost 200 + +define-item "Buckler" + cost 35 + +define-item "Full shield" + cost 45 + +define-item "Candles (3x)" + cost 5 + +define-item "Matches" + cost 1 + +define-item "Food rations (5x)" + cost 10 + +define-item "Grappling hook" + cost 15 + +define-item "Fishing net" + cost 25 + +define-item "Fishing rod" + cost 15 + +define-item "Tent (2 people)" + cost 30 + +define-item "Cloak" + cost 15 + +define-item "Hat" + cost 10 + +define-item "Water bottle" + cost 5 + +define-item "Compass" + cost 20 + +define-item "Quill and ink" + cost 5 + +define-item "Parchment" + cost 5 + +define-item "Blanket" + cost 5 + +define-item "Book of Legends" + cost 55 + +define-item "Book of Lore" + cost 55 + +define-item "Medicinal herbs" + cost 10 + +define-item "Bandages (3x)" + cost 5 + +define-item "Tea leaves" + cost 5 + +define-item "Sleeping potion" + cost 15 + +define-item "Leather pouch" + cost 2 + +define-item "Face mask" + cost 10 + +define-item "Dye" + cost 5 + +define-item "Cloth" + cost 5 + +define-item "Scissors" + cost 15 + +define-item "Needle and thread" + cost 3 + +define-item "Canvas" + cost 8 + +define-item "String" + cost 2 + +define-item "Hatchet" + cost 20 + +define-item "Map" + cost 35 + +define-item "Pony" + cost 100 + +define-item "Horse" + cost 180 + +define-item "Saddle and bridle" + cost 45 + +define-item "Saddlebag" + cost 35 + +define-item "Handmirror" + cost 20 + +define-item "Magnifying glass" + cost 20 + +define-item "Telescope" + cost 40 + +define-item "Rope ladder" + cost 15 + +define-item "Torches (3x)" + cost 10 + +define-item "Staff" + cost 10 + +define-item "Cooking pot" + cost 8 + +define-item "Soap" + cost 2 + +define-item "Towel" + cost 5 + +define-item "Boots" + cost 10 \ No newline at end of file diff --git a/ATL/test/example.atl b/ATL/test/example.atl new file mode 100644 index 0000000..3101edd --- /dev/null +++ b/ATL/test/example.atl @@ -0,0 +1,72 @@ +# This is an example Atlantis file - I use it to explore what the language +# should end up looking like. + +load races.atl +load classes.atl + + +define-quest Kill hellhound + objective kill hellhound + reward gold 300 + + +define-spell Ray of death + type kill + min-intelligence 12 + success-rate 35 + + +define-npc Hades + say Oh, amazing, you actually got here! Who did you bribe? + sell 30 Ambrosia + quest Kill hellhound + + +define-item Scroll of light + value 80 + add-experience 20 + add-spell Ray of death + +define-item Ambrosia + category Food + add-health 5 + + +define-monster Hellhound + armor-class 8 + strength 10 + melee-weapon 2 claws + experience 50 + spawn 2 + aggression 60 + +define-monster Fury + armor-class 5 + strength 8 + melee-weapon 10 fire whip + experience 74 + spawn 0.8 + aggression 30 + + +define-place Nowhere + description Welcome to Nowhere! You are in the void, the space between \ +the worlds. Around you is black. Black, except for one tiny pin-prick of light \ +to the north. + neighbour Elysium + +define-place Elysium + description Congratulations! You have achieved Elysium! + neighbour Nowhere + neighbour Fields of punishment + npc Hades + item Scroll of light + +define-place Fields of punishment + description You really, really don't want to end up here... + neighbour Elysium + monster Hellhound + monster Fury + + +start-place Elysium \ No newline at end of file diff --git a/ATL/test/game-objects.atl b/ATL/test/game-objects.atl new file mode 100644 index 0000000..19a648a --- /dev/null +++ b/ATL/test/game-objects.atl @@ -0,0 +1,51 @@ +; This module defines items, NPCs, monsters and weapons for my +; Atlantis test world. +; @author Daniel Vedder +; @date 02/06/2015 + +define-monster "Fury" + description "Hades' messengers, torturers, assassins. Beware!" + health 10 + dexterity 20 + strength 10 + aggression 30 + armour-class 3 + weapon "fire-whip" + +define-weapon "fire-whip" + description "A 10-foot long whip, blazing with magical fire" + type "whip" + damage 2 + +define-item "Anaklusmos" + description "Riptide, a sword for heroes!" + weapon "yes" + +define-item "Lightning bolt" + description "Zeus lightning bolt - the most powerful weapon of the universe!" + weapon "yes" + +define-weapon "Anaklusmos" + description "Riptide, a sword for heroes!" + type "sword" + damage 4 + +define-weapon "Lightning bolt" ; primarily for debugging + description "Zeus lightning bolt - the most powerful weapon of the universe!" + type "magic" + damage 40 + +define-npc "Hades" + description "Hades, Lord of the Dead!" + says "Beware, mortal - do not tempt me!" + +define-npc "Charon" + description "A robe-clad ghoul, dread ferryman of the Styx." + says "..." + +define-npc "Persephone" ;testing the shop system + description "Hades' beautiful wife, bringer of summer." + says "Welcome, my friend from the upper world!" + sells "Sleeping potion" + sells "Handmirror" + sells "Book of Lore" \ No newline at end of file diff --git a/ATL/test/lisp-test.atl b/ATL/test/lisp-test.atl new file mode 100644 index 0000000..b68d944 --- /dev/null +++ b/ATL/test/lisp-test.atl @@ -0,0 +1,51 @@ +; This is a simple ATL file to test whatever I have implemented so far. +; @author Daniel Vedder +; @date 04/05/2015 + +name-world "Underworld" + +define-player "Start" + money 200 + place "Fields of Punishment" + max-health 50 + health 50 + +define-place "Nowhere" + description "Welcome to Nowhere! +You are in the void, the space between the worlds. Around you is black. +Black, except for one tiny pin-prick of light to the north." + neighbour "Styx" + +define-place "Elysium" + description "This is where you want to be when you are six feet under..." + neighbour "Styx" + neighbour "Fields of Punishment" + neighbour "Fields of Asphodel" + npc "Persephone" + +define-place "Fields of Punishment" + description "Precisely where you do NOT want to end up..." + neighbour "Styx" + neighbour "Elysium" + neighbour "Fields of Asphodel" + monster "Fury" + +define-place "Fields of Asphodel" + description "Nothing special. Really, nothing special at all. +Just a whole load of dead people..." + neighbour "Fields of Punishment" + neighbour "Elysium" + npc "Hades" + +define-place "Styx" + description "The great river that all must cross - but woe to those who do!" + neighbour "Fields of Punishment" + neighbour "Elysium" + neighbour "Nowhere" + item "Anaklusmos" + npc "Charon" + +load-file lisp-test.atl ;Testing whether recursive loading is prevented +load-file races-classes.atl +load-file game-objects.atl +load-file creator-test.atl diff --git a/ATL/test/races-classes.atl b/ATL/test/races-classes.atl new file mode 100644 index 0000000..659310f --- /dev/null +++ b/ATL/test/races-classes.atl @@ -0,0 +1,40 @@ +; A file to define all the races and character classes in my test world. +; @author Daniel Vedder +; @date 18/05/2015 + +;;; RACES + +define-race "Elf" + description "The oldest and wisest race of Middle Earth" + +define-race "Dwarf" + description "Sons of the Earth, descendants of Durin" + +define-race "Hobbit" + description "Peace-loving and kind, true gentlemen" + +define-race "Human" + description "Boring, exciting, ever-changing, never-changing man..." + + +;;; CLASSES + +define-class "Warrior" + description "Fighting as a passion!" + special-item "Sword" + +define-class "Wizard" + description "Ancient, powerful, keepers of the Knowledge..." + special-item "staff" + +define-class "Burglar" + description "Breaking and entering taken to the max!" + special-item "lockpick" + special-item "torch" + +define-class "Craftsman" + description "Maker of all things beautiful and useful" + special-item "hammer" + +load-file lisp-test.atl ;Again, a test for recursive loading +load-file test-extension.lisp ;Testing whether Lisp extensions are loaded \ No newline at end of file diff --git a/ATL/test/test-extension.lisp b/ATL/test/test-extension.lisp new file mode 100644 index 0000000..f01660a --- /dev/null +++ b/ATL/test/test-extension.lisp @@ -0,0 +1,5 @@ +;; This file tests whether the interpreter loads Lisp files correctly. +;; author: Daniel Vedder +;; date: 21/05/2015 + +(debugging "~&Loaded Lisp extension file.") diff --git a/lisp/atlantis.lisp b/lisp/atlantis.lisp index 47d2ccf..cb1958c 100644 --- a/lisp/atlantis.lisp +++ b/lisp/atlantis.lisp @@ -22,7 +22,7 @@ (defun development () "A method to easily test whatever feature I am currently developing" (setf *debugging* T) - (load-file "../ATL/lisp-test.atl") + (load-file "../ATL/test/lisp-test.atl") (let ((player (make-player :name "Bilbo" :race "Hobbit" :class "Burglar" :place "Fields of Punishment" diff --git a/lisp/interpreter.lisp b/lisp/interpreter.lisp index 7adfbb5..bdc3cac 100644 --- a/lisp/interpreter.lisp +++ b/lisp/interpreter.lisp @@ -69,7 +69,8 @@ ;; concatenate string arguments spanning several lines (while (= (count-instances #\" line) 1) (incf line-nr) - (setf line (concatenate 'string line (nth line-nr source)))) + (setf line (concatenate 'string line (to-string #\Newline) + (trim-whitespace (nth line-nr source))))) (cond ((zerop (length line)) (when current-object (add-game-object current-object)) (setf current-object NIL)) diff --git a/lugwey.world b/lugwey.world new file mode 100644 index 0000000..8081fc7 --- /dev/null +++ b/lugwey.world @@ -0,0 +1,38 @@ +(0 1 4) +#S(WORLD :NAME "Lugwey" + :PLAYERS + (#S(PLAYER :NAME "Start" :RACE "" :CLASS "" :STRENGTH 0 :DEXTERITY 0 :CONSTITUTION 0 :INTELLIGENCE 0 :MONEY 50 :ITEM NIL :WEAPON "" :ARMOUR-CLASS 0 :PLACE "Gate" + :EXPERIENCE 0 :LEVEL 0 :MAX-HEALTH 50 :HEALTH 50 :GAME-ADMIN NIL) + #S(PLAYER :NAME "Leonardo" :RACE "Human" :CLASS "Scholar" :STRENGTH 0 :DEXTERITY 0 :CONSTITUTION 0 :INTELLIGENCE 0 :MONEY 60 :ITEM ("Dagger") :WEAPON "Dagger" + :ARMOUR-CLASS 0 :PLACE "Gate" :EXPERIENCE 0 :LEVEL 0 :MAX-HEALTH 50 :HEALTH 50 :GAME-ADMIN NIL)) + :CHARACTER-CLASSS (#S(CHARACTER-CLASS :NAME "Scholar" :DESCRIPTION "Dubio ergo corgito, corgito ergo sum" :SPECIAL-ITEM ("Paper" "Quill") :SPECIAL-ABILITY NIL)) + :RACES + (#S(RACE :NAME "Human" :DESCRIPTION "Errare humanum est" :STRENGTH-BONUS 0 :DEXTERITY-BONUS 0 :CONSTITUTION-BONUS 0 :INTELLIGENCE-BONUS 1 :SPECIAL-ABILITY NIL)) + :PLACES + (#S(PLACE :NAME "Gate" + :DESCRIPTION + "An old, partly moss-covered stone wall rises up in front of +you. Set in it, a wooden gate, reinforced with rusty iron strips. +One wing is open, permitting a view into the space beyond. +Behind you, the dusty track leads off into the forest. + +A monk is sitting in the gate house, obviously bored." + :NEIGHBOUR ("Forest track" "Monastery grounds") :PLAYER NIL :ITEM NIL :MONSTER NIL :NPC ("Gatekeeper")) + #S(PLACE :NAME "Monastery grounds" + :DESCRIPTION + "Paths criss-cross well-kept lawns. Here and there, roses bloom +in a flower bed. On one side stand the monastery buildings with +their calm, ancient dignity. On the other, the gardens, stables +and agricultural outhouses speak of a simple working life." + :NEIGHBOUR ("Gate" "Chapel" "Dormitory" "Gardens" "Stable") :PLAYER NIL :ITEM NIL :MONSTER NIL :NPC NIL) + #S(PLACE :NAME "Forest track" + :DESCRIPTION + "A rutted track, scarred by the wheels of many carts, leads +through the forest from the monastery to the village." + :NEIGHBOUR ("Gate") :PLAYER NIL :ITEM ("Signet ring") :MONSTER NIL :NPC NIL)) + :MONSTERS NIL :NPCS NIL + :ITEMS + (#S(ITEM :NAME "Parchment" :DESCRIPTION "Dried animal skins used as paper." :COST 5 :WEAPON "no" :FUNCTION NIL) + #S(ITEM :NAME "Quill" :DESCRIPTION "A goose-feather, sharpened at one end to make a pen." :COST 5 :WEAPON "no" :FUNCTION NIL) + #S(ITEM :NAME "Dagger" :DESCRIPTION "A long, sharp knife, useful for self defence." :COST 20 :WEAPON "Yes" :FUNCTION NIL)) + :WEAPONS (#S(WEAPON :NAME "Dagger" :DESCRIPTION "A long, sharp knife, useful for self defence." :TYPE "Knife" :DAMAGE 3)) :STARTING-PLACE "" :STARTING-MONEY 0)