copy from withinbot

Signed-off-by: Xe <me@christine.website>
This commit is contained in:
Cadey Ratio 2022-07-08 16:53:28 +00:00
commit 951c9d83fb
88 changed files with 2252 additions and 0 deletions

782
Miau/README.md Normal file
View File

@ -0,0 +1,782 @@
# Miau
In the desert of Miau, the town of Cihan has been cut off from trade with other towns due to weirdly strong sandstorms after an amulet was stolen from that town by the bandit leader Tol'Kath. Your goal is to venture through the wasteland and the ruins of Ci in order to get the amulet back and add yourselves to the scroll of legends for Cihan.
## Win Condition
Take the Sandstorm Amulet to Cihan Town Square
## Areas
### Miau Wasteland Clearing
A wasteland area.
A clearing in the desert, there is a path to the west that leads towards the city of Cihan.
### Cihan Town Square
A town area.
The town square of Cihan. There is a lot of hustle and bustle with activity as people go about their lives.
### Cell the Armorweaver
A store area.
The foremost armor shop in Cihan. Cell has run this shop for years and his son is his apprentice.
The store is very plain, not messing around. There is room for 4 people to browse around and shop.
## NPCs
#### Cell
A Feline Armorweaver.
Has the following items for sale:
* Sandshoes (15 gold)
* Sand Robe (5 gold)
* Light Armor (40 gold)
Dialogue:
* [if there is a femme player character in the party] My son has been working on some armor you may find useful. You should talk with him and see if he'll part with it. It'll probably do wonders for your charm~ (purr)
#### Cell's son Cial
A Feline Apprentice Armorweaver.
Has the following items for sale:
* Maiden armor (30 gold)
Dialogue:
* I've been learning armorweaving for 5 years. I have a long way to go.
* If you find any enchanted amulets you don't want, let me know. If you can find one that I'm really looking for I will pay a pretty penny.
### The Flying Ombudsman
A town area.
The lively tavern of Cihan, there is a staircase on the northwest side of the building to the town inn.
### Cihan Inn
A town area.
The inn of Cihan, you can stay here for 5 gold per night, or maybe for less if you're lucky.
## Monsters
### Sand Lizard
5 HP (0 armor)
1d4 attack damage
Grants 25 experience on defeat.
### Great Sand Lizard
10 HP (1 armor)
1d6 attack damage
Grants 75 experience on defeat.
Has the following items:
* Iron Dagger
* Shortsword
### Major Sand Lizard
14 HP (2 armor)
1d8 attack damage
Grants 150 experience on defeat.
Has the following items:
* Iron Dagger
* Shortsword
### Boomerang Rat
6 HP (0 armor)
1d4 attack damage
Grants 25 experience on defeat.
Has the following items:
* Boomerang
### Major Boomerang Rat
12 HP (1 armor)
1d6 attack damage
Grants 100 experience on defeat.
Has the following items:
* Super Boomerang drops if 1d6 is greater than or equal to 6
* Boomerang
### Bandit Scout
10 HP (1 armor)
1d6 attack damage
Grants 150 experience on defeat.
Has the following items:
* Amulet of Bandacy drops if 1d6 is greater than or equal to 6
### Bandit Soilder
16 HP (1 armor)
1d8 attack damage
Grants 200 experience on defeat.
Has the following items:
* Amulet of Bandacy drops if 1d6 is greater than or equal to 6
* Longsword
* Greatsword
* Battleaxe
### Tol'kath the Destroyer
22 HP (3 armor)
1d8 attack damage
Grants 400 experience on defeat.
Has the following items:
* Amulet of Bandacy
* Tol'kath's Battleaxe of Destruction
Always drops the following items:
* Sandstorm Amulet
* Amulet of Bandacy
## Items
### Face Mask
Armor
Weight: 1
An enforcer of social distancing.
Grants the following bonuses:
* Grants +1 CHA
Buy price: 40 gold
Unsellable
### Maiden armor
Armor (legendary item)
Weight: 1
Attractive armor for an attractive woman.
Gives you extra charisma in town areas, but it may also make you appear more femme to certain people.
Grants the following bonuses:
* Grants +2 CHA when in town
* Grants -1 DEF
Buy price: 30 gold
Sells for 10 gold.
### Mihari's Armor
Armor (legendary item)
Weight: 1
Armor fit for a goddess. Gives massive bonuses for defense and charisma to felines. Can cause the wearer to be mistaken as high society member.
Grants the following bonuses:
* Grants +2 CHA
* Grants +4 DEF
Buy price: 300 gold
Sells for 250 gold.
### Light Armor
Armor
Weight: 1
Light armor that doesn't constrict movement.
Grants the following bonuses:
* Grants +1 DEF
Buy price: 40 gold
Sells for 20 gold.
### Sand Robe
Armor
Weight: 1
blocks the sand from your body
Buy price: 5 gold
Unsellable
### Sandshoes
Armor
Weight: 1
Shoes that help you walk in the dunes
Grants the following bonuses:
* Grants +1 DEX when in wasteland
Buy price: 15 gold
Sells for 2 gold.
### Bane of Lizards Shortsword
Weapon (legendary item)
Weight: 1
A one-handed sword to hurt bad guys with, with a special talent for hurting lizards.
Grants the following bonuses:
* Grants +1 ATK
Buy price: 70 gold
Sells for 50 gold.
### Battleaxe
Weapon
Weight: 2
A two-handed battleaxe for mauling enemies.
Grants the following bonuses:
* Grants +1 ATK
Buy price: 30 gold
Sells for 7 gold.
### Blessed Dagger of Stabbing
Weapon (legendary item)
Weight: 1
This blessed dagger is said to be once owned by a legendary purple warrior. Can be used in your offhand for a second attack.
Buy price: 60 gold
Sells for 50 gold.
### Boomerang
Weapon
Weight: 1
A boomerang stolen from a Boomerang Rat.
Buy price: 20 gold
Sells for 10 gold.
### Iron Dagger
Weapon
Weight: 1
Can be used in your offhand for a second attack
Buy price: 30 gold
Sells for 5 gold.
### Greatbow
Weapon
Weight: 2
A normal Greatbow to shoot baddies with. Has unlimited arrows.
Grants the following bonuses:
* Grants +1 ATK
Buy price: 70 gold
Sells for 40 gold.
### Greatsword
Weapon
Weight: 2
A standard two-handed greatsword to maul bad guys with.
Grants the following bonuses:
* Grants +12 ATK
Buy price: 30 gold
Sells for 7 gold.
### Longbow
Weapon
Weight: 1
A normal longbow to shoot baddies with. Has unlimited arrows.
Buy price: 50 gold
Sells for 20 gold.
### Longsword
Weapon
Weight: 1
A standard one-handed longsword to maul bad guys with.
Grants the following bonuses:
* Grants +1 ATK
Buy price: 30 gold
Sells for 7 gold.
### Shortsword
Weapon
Weight: 1
A standard one-handed sword to hurt bad guys with.
Buy price: 30 gold
Sells for 7 gold.
### Super Boomerang
Weapon
Weight: 1
A boomerang stolen from a Major Boomerang Rat.
Grants the following bonuses:
* Grants +2 ATK
Buy price: 40 gold
Sells for 20 gold.
### Sword of Two Truths
Weapon (legendary item)
Weight: 1
The legendary Sword of Two Truths, bane of all those who practice deception.
Grants the following bonuses:
* Grants +2 ATK
Buy price: 60 gold
Sells for 45 gold.
### Tol'kath's Battleaxe of Destruction
Weapon (legendary item)
Weight: 3
A two-handed battleaxe for mauling enemies into a fine powder.
Grants the following bonuses:
* Grants +4 ATK
Buy price: 150 gold
Sells for 150 gold.
### Whisperwind
Weapon (legendary item)
Weight: 2
Harness the whispers of the wind wherever you are with this legendary bow.
Grants the following bonuses:
* Grants +4 ATK
Buy price: 150 gold
Sells for 90 gold.
### Iron Shield
Weapon
Weight: 1
A more powerful shield to protect you from damage.
Grants the following bonuses:
* Grants +2 DEF
Buy price: 40 gold
Sells for 20 gold.
### Wooden Shield
Weapon
Weight: 1
A normal shield to protect you from damage.
Grants the following bonuses:
* Grants +1 DEF
Buy price: 25 gold
Sells for 10 gold.
### Cactus Fruit
Consumable
Has a maximum of 1 charges.
Weight: 1
A sweet fruit from a cactus. You can juice them to act as emergency water.
Grants the following bonuses:
* Grants +6 HP
Buy price: 5 gold
Sells for 1 gold.
### Flask
Consumable
Has a maximum of 3 charges.
Weight: 1
A flask of the good stuff.
Grants the following bonuses:
* Grants -2 CHA
* Grants +4 RISK
Buy price: 30 gold
Sells for 10 gold.
### Hydroflask
Consumable
Has a maximum of 5 charges.
Weight: 1
A flask of water.
Grants the following bonuses:
* Grants +2 HP
Buy price: 30 gold
Sells for 10 gold.
### Ration
Consumable
Has a maximum of 1 charges.
Weight: 1
Standard rations to restore HP
Grants the following bonuses:
* GrantsHP if user's level d6
Buy price: 5 gold
Unsellable
### Torch
Gear
Weight: 1
A torch to light dark caves
Grants the following bonuses:
* Grants +2 RISK when in cave
Buy price: 10 gold
Unsellable
### Amulet of Bandacy
Trinket
Weight: 1
An amulet that increases a bandit's natural deterity.
Grants the following bonuses:
* Grants +1 DEX
Buy price: 30 gold
Sells for 4 gold.
### Amulet of Focus
Trinket
Weight: 1
An amulet that increases the ability to focus, boosting intelligence.
Grants the following bonuses:
* Grants +1 INT
Buy price: 30 gold
Sells for 4 gold.
### Amulet of The Old Ones
Trinket
Weight: 1
An amulet imbued with the power of The Old Ones, increasing wisdom.
Grants the following bonuses:
* Grants +1 WIS
Buy price: 30 gold
Sells for 4 gold.
### Gold Amulet
Trinket
Weight: 1
A valuable gold amulet.
Buy price: 100 gold
Sells for 50 gold.
### Mihari's Amulet
Trinket (legendary item)
Weight: 1
An amulet that grants the ability to polymorph into a feline. A blessing of the godess Mihari.
Grants the following bonuses:
* Grants polymorph to Feline
Buy price: 0 gold
Unsellable
### Sandstorm Amulet
Trinket (legendary item)
Weight: 1
An amulet that controls the sandstorms in the area.
Buy price: 0 gold
Unsellable

View File

@ -0,0 +1,38 @@
let camp = ../../package.dhall
let ownerName = "Cell"
in camp.Area::{
, name = "armor_shop"
, humanName = "${ownerName} the Armorweaver"
, description =
''
The foremost armor shop in Cihan. ${ownerName} has run this shop for years and his son is his apprentice.
The store is very plain, not messing around. There is room for 4 people to browse around and shop.''
, links = [ "cihan" ]
, npcs =
[ camp.NPC::{
, name = "${ownerName}"
, job = "Armorweaver"
, sellItems =
[ ../items/sandshoes.dhall
, ../items/sand_robe.dhall
, ../items/light_armor.dhall
]
, dialogue =
[ "[if there is a femme player character in the party] My son has been working on some armor you may find useful. You should talk with him and see if he'll part with it. It'll probably do wonders for your charm~ (purr)"
]
}
, camp.NPC::{
, name = "${ownerName}'s son Cial"
, job = "Apprentice Armorweaver"
, sellItems = [ ../items/maiden_armor.dhall ]
, dialogue =
[ "I've been learning armorweaving for 5 years. I have a long way to go."
, "If you find any enchanted amulets you don't want, let me know. If you can find one that I'm really looking for I will pay a pretty penny."
]
}
]
, kind = "store"
}

11
Miau/areas/cihan.dhall Normal file
View File

@ -0,0 +1,11 @@
let camp = ../../package.dhall
in camp.Area::{
, name = "cihan"
, humanName = "Cihan Town Square"
, description =
"The town square of Cihan. There is a lot of hustle and bustle with activity as people go about their lives."
, links =
[ "start", "palace", "tavern", "armor_shop", "weapon_shop", "market" ]
, kind = "town"
}

10
Miau/areas/inn.dhall Normal file
View File

@ -0,0 +1,10 @@
let camp = ../../package.dhall
in camp.Area::{
, name = "inn"
, humanName = "Cihan Inn"
, description =
"The inn of Cihan, you can stay here for 5 gold per night, or maybe for less if you're lucky."
, links = [ "tavern" ]
, kind = "town"
}

5
Miau/areas/package.dhall Normal file
View File

@ -0,0 +1,5 @@
let town = [ ./cihan.dhall, ./armor_shop.dhall, ./tavern.dhall, ./inn.dhall ]
let wasteland = [ ./start.dhall ]
in wasteland # town

10
Miau/areas/start.dhall Normal file
View File

@ -0,0 +1,10 @@
let camp = ../../package.dhall
in camp.Area::{
, name = "start"
, humanName = "Miau Wasteland Clearing"
, description =
"A clearing in the desert, there is a path to the west that leads towards the city of Cihan."
, links = [ "cihan" ]
, kind = "wasteland"
}

10
Miau/areas/tavern.dhall Normal file
View File

@ -0,0 +1,10 @@
let camp = ../../package.dhall
in camp.Area::{
, name = "tavern"
, humanName = "The Flying Ombudsman"
, description =
"The lively tavern of Cihan, there is a staircase on the northwest side of the building to the town inn."
, links = [ "cihan", "inn" ]
, kind = "town"
}

View File

@ -0,0 +1,9 @@
let camp = ../../package.dhall
in camp.Item::{
, name = "Amulet of Bandacy"
, description = "An amulet that increases a bandit's natural deterity."
, bonuses = [ camp.Bonus::{ amount = Some +1, stat = Some camp.Stat.DEX } ]
, cost = 30
, sellValue = Some 4
}

View File

@ -0,0 +1,10 @@
let camp = ../../package.dhall
in camp.Item::{
, name = "Amulet of Focus"
, description =
"An amulet that increases the ability to focus, boosting intelligence."
, bonuses = [ camp.Bonus::{ amount = Some +1, stat = Some camp.Stat.INT } ]
, cost = 30
, sellValue = Some 4
}

View File

@ -0,0 +1,10 @@
let camp = ../../package.dhall
in camp.Item::{
, name = "Amulet of The Old Ones"
, description =
"An amulet imbued with the power of The Old Ones, increasing wisdom."
, bonuses = [ camp.Bonus::{ amount = Some +1, stat = Some camp.Stat.WIS } ]
, cost = 30
, sellValue = Some 4
}

View File

@ -0,0 +1,12 @@
let camp = ../../package.dhall
in camp.Item::{
, name = "Bane of Lizards Shortsword"
, description =
"A one-handed sword to hurt bad guys with, with a special talent for hurting lizards."
, bonuses = [ camp.Bonus::{ amount = Some +1, stat = Some camp.Stat.ATK } ]
, kind = camp.ItemKind.Weapon
, cost = 70
, sellValue = Some 50
, legendary = True
}

View File

@ -0,0 +1,11 @@
let camp = ../../package.dhall
in camp.Item::{
, name = "Battleaxe"
, description = "A two-handed battleaxe for mauling enemies."
, bonuses = [ camp.Bonus::{ amount = Some +1, stat = Some camp.Stat.ATK } ]
, kind = camp.ItemKind.Weapon
, cost = 30
, weight = 2
, sellValue = Some 7
}

View File

@ -0,0 +1,12 @@
let camp = ../../package.dhall
in camp.Item::{
, name = "Blessed Dagger of Stabbing"
, description =
"This blessed dagger is said to be once owned by a legendary purple warrior. Can be used in your offhand for a second attack."
, weight = 1
, kind = camp.ItemKind.Weapon
, cost = 60
, sellValue = Some 50
, legendary = True
}

View File

@ -0,0 +1,9 @@
let camp = ../../package.dhall
in camp.Item::{
, name = "Boomerang"
, description = "A boomerang stolen from a Boomerang Rat."
, kind = camp.ItemKind.Weapon
, cost = 20
, sellValue = Some 10
}

View File

@ -0,0 +1,12 @@
let camp = ../../package.dhall
in camp.Item::{
, name = "Cactus Fruit"
, description =
"A sweet fruit from a cactus. You can juice them to act as emergency water."
, kind = camp.ItemKind.Consumable
, charges = Some 1
, bonuses = [ camp.Bonus::{ amount = Some +6, stat = Some camp.Stat.HP } ]
, cost = 5
, sellValue = Some 1
}

10
Miau/items/dagger.dhall Normal file
View File

@ -0,0 +1,10 @@
let camp = ../../package.dhall
in camp.Item::{
, name = "Iron Dagger"
, description = "Can be used in your offhand for a second attack"
, weight = 1
, kind = camp.ItemKind.Weapon
, cost = 30
, sellValue = Some 5
}

View File

@ -0,0 +1,10 @@
let camp = ../../package.dhall
in camp.Item::{
, name = "Face Mask"
, description = "An enforcer of social distancing."
, kind = camp.ItemKind.Armor
, bonuses = [ camp.Bonus::{ amount = Some +1, stat = Some camp.Stat.CHA } ]
, cost = 40
, sellValue = None Natural
}

View File

@ -0,0 +1,8 @@
let camp = ../../package.dhall
in camp.Item::{
, name = "Gold Amulet"
, description = "A valuable gold amulet."
, cost = 100
, sellValue = Some 50
}

12
Miau/items/greatbow.dhall Normal file
View File

@ -0,0 +1,12 @@
let camp = ../../package.dhall
in camp.Item::{
, name = "Greatbow"
, description =
"A normal Greatbow to shoot baddies with. Has unlimited arrows."
, bonuses = [ camp.Bonus::{ amount = Some +1, stat = Some camp.Stat.ATK } ]
, weight = 2
, kind = camp.ItemKind.Weapon
, cost = 70
, sellValue = Some 40
}

View File

@ -0,0 +1,11 @@
let camp = ../../package.dhall
in camp.Item::{
, name = "Greatsword"
, description = "A standard two-handed greatsword to maul bad guys with."
, weight = 2
, bonuses = [ camp.Bonus::{ amount = Some +12, stat = Some camp.Stat.ATK } ]
, kind = camp.ItemKind.Weapon
, cost = 30
, sellValue = Some 7
}

View File

@ -0,0 +1,17 @@
let camp = ../../package.dhall
in camp.Item::{
, name = "Iron Shield"
, description = "A more powerful shield to protect you from damage."
, weight = 1
, kind = camp.ItemKind.Weapon
, bonuses =
[ camp.Bonus::{
, amount = Some +2
, area = None Text
, stat = Some camp.Stat.DEF
}
]
, cost = 40
, sellValue = Some 20
}

View File

@ -0,0 +1,16 @@
let camp = ../../package.dhall
in camp.Item::{
, name = "Light Armor"
, description = "Light armor that doesn't constrict movement."
, bonuses =
[ camp.Bonus::{
, amount = Some +1
, area = None Text
, stat = Some camp.Stat.DEF
}
]
, kind = camp.ItemKind.Armor
, cost = 40
, sellValue = Some 20
}

11
Miau/items/longbow.dhall Normal file
View File

@ -0,0 +1,11 @@
let camp = ../../package.dhall
in camp.Item::{
, name = "Longbow"
, description =
"A normal longbow to shoot baddies with. Has unlimited arrows."
, weight = 1
, kind = camp.ItemKind.Weapon
, cost = 50
, sellValue = Some 20
}

View File

@ -0,0 +1,10 @@
let camp = ../../package.dhall
in camp.Item::{
, name = "Longsword"
, description = "A standard one-handed longsword to maul bad guys with."
, bonuses = [ camp.Bonus::{ amount = Some +1, stat = Some camp.Stat.ATK } ]
, kind = camp.ItemKind.Weapon
, cost = 30
, sellValue = Some 7
}

View File

@ -0,0 +1,23 @@
let camp = ../../package.dhall
in camp.Item::{
, name = "Maiden armor"
, description =
''
Attractive armor for an attractive woman.
Gives you extra charisma in town areas, but it may also make you appear more femme to certain people.''
, bonuses =
[ camp.Bonus::{
, amount = Some +2
, area = Some "town"
, stat = Some camp.Stat.CHA
}
, camp.Bonus::{ amount = Some -1, stat = Some camp.Stat.DEF }
]
, weight = 1
, kind = camp.ItemKind.Armor
, cost = 30
, sellValue = Some 10
, legendary = True
}

View File

@ -0,0 +1,10 @@
let camp = ../../package.dhall
in camp.Item::{
, name = "Mihari's Amulet"
, description =
"An amulet that grants the ability to polymorph into a feline. A blessing of the godess Mihari."
, bonuses = [ camp.Bonus::{ polymorph = Some camp.Species.Feline } ]
, cost = 0
, legendary = True
}

View File

@ -0,0 +1,24 @@
let camp = ../../package.dhall
in camp.Item::{
, name = "Mihari's Armor"
, description =
"Armor fit for a goddess. Gives massive bonuses for defense and charisma to felines. Can cause the wearer to be mistaken as high society member."
, bonuses =
[ camp.Bonus::{
, amount = Some +2
, stat = Some camp.Stat.CHA
, species = Some camp.Species.Feline
}
, camp.Bonus::{
, amount = Some +4
, stat = Some camp.Stat.DEF
, species = Some camp.Species.Feline
}
]
, weight = 1
, kind = camp.ItemKind.Armor
, cost = 300
, sellValue = Some 250
, legendary = True
}

44
Miau/items/package.dhall Normal file
View File

@ -0,0 +1,44 @@
let shared = ../../shared/package.dhall
let armor =
[ ./face_mask.dhall
, ./maiden_armor.dhall
, ./mihari_armor.dhall
, ./light_armor.dhall
, ./sand_robe.dhall
, ./sandshoes.dhall
]
let weapons =
[ ./bane_of_lizards_shortsword.dhall
, ./battleaxe.dhall
, ./blessed_dagger_of_stabbing.dhall
, ./boomerang.dhall
, ./dagger.dhall
, ./greatbow.dhall
, ./greatsword.dhall
, ./longbow.dhall
, ./longsword.dhall
, ./shortsword.dhall
, ./super_boomerang.dhall
, ./sword_of_two_truths.dhall
, ./tolkath_battleaxe.dhall
, ./whisperwind.dhall
, ./iron_shield.dhall
, ./shield.dhall
]
let trinkets =
[ ./amulet_of_bandacy.dhall
, ./amulet_of_focus.dhall
, ./amulet_of_the_old_ones.dhall
, ./gold_amulet.dhall
, ./mihari_amulet.dhall
, ./sandstorm_amulet.dhall
]
let consumables = [ ./cactus_fruit.dhall ] # shared.consumables
let gear = [ ./torch.dhall ]
in armor # weapons # consumables # gear # trinkets

View File

@ -0,0 +1,10 @@
let camp = ../../package.dhall
in camp.Item::{
, name = "Sand Robe"
, description = "blocks the sand from your body"
, weight = 1
, kind = camp.ItemKind.Armor
, cost = 5
, sellValue = None Natural
}

View File

@ -0,0 +1,17 @@
let camp = ../../package.dhall
in camp.Item::{
, name = "Sandshoes"
, description = "Shoes that help you walk in the dunes"
, weight = 1
, kind = camp.ItemKind.Armor
, bonuses =
[ camp.Bonus::{
, stat = Some camp.Stat.DEX
, amount = Some +1
, area = Some "wasteland"
}
]
, cost = 15
, sellValue = Some 2
}

View File

@ -0,0 +1,9 @@
let camp = ../../package.dhall
in camp.Item::{
, name = "Sandstorm Amulet"
, description = "An amulet that controls the sandstorms in the area."
, cost = 0
, sellValue = None Natural
, legendary = True
}

17
Miau/items/shield.dhall Normal file
View File

@ -0,0 +1,17 @@
let camp = ../../package.dhall
in camp.Item::{
, name = "Wooden Shield"
, description = "A normal shield to protect you from damage."
, weight = 1
, kind = camp.ItemKind.Weapon
, bonuses =
[ camp.Bonus::{
, amount = Some +1
, area = None Text
, stat = Some camp.Stat.DEF
}
]
, cost = 25
, sellValue = Some 10
}

View File

@ -0,0 +1,9 @@
let camp = ../../package.dhall
in camp.Item::{
, name = "Shortsword"
, description = "A standard one-handed sword to hurt bad guys with."
, kind = camp.ItemKind.Weapon
, cost = 30
, sellValue = Some 7
}

View File

@ -0,0 +1,10 @@
let camp = ../../package.dhall
in camp.Item::{
, name = "Super Boomerang"
, description = "A boomerang stolen from a Major Boomerang Rat."
, kind = camp.ItemKind.Weapon
, bonuses = [ camp.Bonus::{ amount = Some +2, stat = Some camp.Stat.ATK } ]
, cost = 40
, sellValue = Some 20
}

View File

@ -0,0 +1,13 @@
let camp = ../../package.dhall
in camp.Item::{
, name = "Sword of Two Truths"
, description =
"The legendary Sword of Two Truths, bane of all those who practice deception."
, bonuses = [ camp.Bonus::{ amount = Some +2, stat = Some camp.Stat.ATK } ]
, weight = 1
, kind = camp.ItemKind.Weapon
, cost = 60
, sellValue = Some 45
, legendary = True
}

View File

@ -0,0 +1,13 @@
let camp = ../../package.dhall
in camp.Item::{
, name = "Tol'kath's Battleaxe of Destruction"
, description =
"A two-handed battleaxe for mauling enemies into a fine powder."
, bonuses = [ camp.Bonus::{ amount = Some +4, stat = Some camp.Stat.ATK } ]
, kind = camp.ItemKind.Weapon
, cost = 150
, weight = 3
, sellValue = Some 150
, legendary = True
}

16
Miau/items/torch.dhall Normal file
View File

@ -0,0 +1,16 @@
let camp = ../../package.dhall
in camp.Item::{
, name = "Torch"
, description = "A torch to light dark caves"
, weight = 1
, kind = camp.ItemKind.Gear
, bonuses =
[ camp.Bonus::{
, amount = Some +2
, area = Some "cave"
, stat = Some camp.Stat.RISK
}
]
, cost = 10
}

View File

@ -0,0 +1,13 @@
let camp = ../../package.dhall
in camp.Item::{
, name = "Whisperwind"
, description =
"Harness the whispers of the wind wherever you are with this legendary bow."
, bonuses = [ camp.Bonus::{ amount = Some +4, stat = Some camp.Stat.ATK } ]
, weight = 2
, kind = camp.ItemKind.Weapon
, cost = 150
, sellValue = Some 90
, legendary = True
}

1
Miau/md.dhall Normal file
View File

@ -0,0 +1 @@
let toMD = ../types/toMD/campaign.dhall in toMD ./package.dhall

View File

@ -0,0 +1,19 @@
let camp = ../../package.dhall
in camp.Monster::{
, name = "Bandit Scout"
, damage = camp.Roll::{ diceCount = Some 1, diceSides = 6 }
, hp = 10
, armor = 1
, exp = 150
, items =
[ camp.MonsterItem::{
, dice = Some camp.Roll::{
, diceCount = Some 1
, diceSides = 6
, min = Some 6
}
, item = ../items/amulet_of_bandacy.dhall
}
]
}

View File

@ -0,0 +1,22 @@
let camp = ../../package.dhall
in camp.Monster::{
, name = "Bandit Soilder"
, damage = camp.Roll::{ diceCount = Some 1, diceSides = 8 }
, hp = 16
, armor = 1
, exp = 200
, items =
[ camp.MonsterItem::{
, dice = Some camp.Roll::{
, diceCount = Some 1
, diceSides = 6
, min = Some 6
}
, item = ../items/amulet_of_bandacy.dhall
}
, camp.MonsterItem::{ item = ../items/longsword.dhall }
, camp.MonsterItem::{ item = ../items/greatsword.dhall }
, camp.MonsterItem::{ item = ../items/battleaxe.dhall }
]
}

View File

@ -0,0 +1,10 @@
let camp = ../../package.dhall
in camp.Monster::{
, name = "Boomerang Rat"
, damage = camp.Roll::{ diceCount = Some 1, diceSides = 4 }
, hp = 6
, armor = 0
, exp = 25
, items = [ camp.MonsterItem::{ item = ../items/boomerang.dhall } ]
}

View File

@ -0,0 +1,13 @@
let camp = ../../package.dhall
in camp.Monster::{
, name = "Great Sand Lizard"
, damage = camp.Roll::{ diceCount = Some 1, diceSides = 6 }
, hp = 10
, armor = 1
, exp = 75
, items =
[ camp.MonsterItem::{ item = ../items/dagger.dhall }
, camp.MonsterItem::{ item = ../items/shortsword.dhall }
]
}

View File

@ -0,0 +1,20 @@
let camp = ../../package.dhall
in camp.Monster::{
, name = "Major Boomerang Rat"
, damage = camp.Roll::{ diceCount = Some 1, diceSides = 6 }
, hp = 12
, armor = 1
, exp = 100
, items =
[ camp.MonsterItem::{
, dice = Some camp.Roll::{
, diceCount = Some 1
, diceSides = 6
, min = Some 6
}
, item = ../items/super_boomerang.dhall
}
, camp.MonsterItem::{ item = ../items/boomerang.dhall }
]
}

View File

@ -0,0 +1,13 @@
let camp = ../../package.dhall
in camp.Monster::{
, name = "Major Sand Lizard"
, damage = camp.Roll::{ diceCount = Some 1, diceSides = 8 }
, hp = 14
, armor = 2
, exp = 150
, items =
[ camp.MonsterItem::{ item = ../items/dagger.dhall }
, camp.MonsterItem::{ item = ../items/shortsword.dhall }
]
}

View File

@ -0,0 +1,9 @@
[ ./sand_lizard.dhall
, ./great_sand_lizard.dhall
, ./major_sand_lizard.dhall
, ./boomerang_rat.dhall
, ./major_boomerang_rat.dhall
, ./bandit_scout.dhall
, ./bandit_soilder.dhall
, ./tolkath_the_destroyer.dhall
]

View File

@ -0,0 +1,9 @@
let camp = ../../package.dhall
in camp.Monster::{
, name = "Sand Lizard"
, damage = camp.Roll::{ diceCount = Some 1, diceSides = 4 }
, hp = 5
, armor = 0
, exp = 25
}

View File

@ -0,0 +1,15 @@
let camp = ../../package.dhall
in camp.Monster::{
, name = "Tol'kath the Destroyer"
, damage = camp.Roll::{ diceCount = Some 1, diceSides = 8 }
, hp = 22
, armor = 3
, exp = 400
, items =
[ camp.MonsterItem::{ item = ../items/amulet_of_bandacy.dhall }
, camp.MonsterItem::{ item = ../items/tolkath_battleaxe.dhall }
]
, drops =
[ ../items/sandstorm_amulet.dhall, ../items/amulet_of_bandacy.dhall ]
}

113
Miau/oldideas.md Normal file
View File

@ -0,0 +1,113 @@
# Miau Campaign Ideas
A campaign for The Source by Mai.
Goal: return an amulet that controls the sandstorms that have been buffering the
city of Cihan so that trade can be restored and stuff.
Takes place in the desert of Miau, where the cat people have lived in harmony
with the land. Think Gerudo from Breath of the Wild.
## Suggested Characters
* Fighter
* Cleric
* Wizard
* Thief/Wildcard
Cat people have communication bonus of +1 in Cihan due to the citizens trusting
their own kind more. This applies to the shapeshifter's current form too.
## Words
* Ci /tʃi/ - safe, water (archaic)
* Cihan /tʃi.hʌn/ - new-safe
* Lum /lum/ - sand, desert
* Ag /ʌɡ/ - water
* Sivu /si.vu/ - hello
* Miau /miʌu/ - home
* Mihari /mi.hʌ.ri/ - name of a goddess of the desert, usually clad in decorative gold armor
## Locales
### Cihan
Areas:
* Armor shop, light armor suggested
* Sandshoes
* Sand robe
* Light armor
* Maiden armor
* Weapon shop, has rumor of the elemental wand cave
* Iron Dagger
* Sword of two truths
* Shield
* Torch
* Longbow
* Arrows
* Market, be sure to get a hydroflask
* Flask
* Cactus fruit
* Hydroflask
* Rations
* Alleys, more rumors of an elemental cave
### Desert Wasteland
Sandstorms have a 1d6=1 chance of causing damage to everyone, more sandstorms
when you get closer to Bandit's Den or Elemental Cave
Areas:
* Dunes
* Statues of heroes
* Shal'tash
* Tosen
* Ruins of the ancient city of Ci (-han is a suffix for new?)
Items:
* Cactus fruit, found on cactuses randomly, risky to try and take one, sells for
1g
* (Very randomly) treasure chest with any one of the Cihan or Wasteland items,
or a healing item
* Basic Boomerang, +1 damage, 1d6=1 chance of flying away when thrown by a
player, sells for 1g
* Super Boomerang, +2 damage, 1d6=1 chance of flying away when thrown by a
player, sells for 5g
### Ruins of Ci
Open air dungeon, some treasure chests (randomly choose between the legendary
items in this quest)
* Statue of Mihari
* Some fluff text about what Mihari did for the land and a puzzle to get
Mihari's amulet
### Elemental Cave
Items:
* Torch near entrance, without a torch in the party risky moves get -2
* Rocks, 1d4 damage when thrown at an enemy, does not sell
* Elemental wand, +2 damage to matching elemental spells, -1 to any other kind
of elemental spell, 1 gear slot, sells for 15g
* Elemental rod, 1 damage plus elemental effect on a 12, 7 or below has a chance
of breaking it
* *Elemental arrows, +2 damage plus an elemental effect on a 12
* Mihari's armor (legendary), -4 damage to Felines person, 2 gear slots, does
not sell
### Oasis
Areas:
* Shrine to Ma
* Ice water refreshments
* Can refill flasks here
### Bandit's Den
Simple dungeon that has a boss fight and the sandstorm amulet

11
Miau/package.dhall Normal file
View File

@ -0,0 +1,11 @@
let camp = ../package.dhall
in camp.Campaign::{
, name = "Miau"
, description =
"In the desert of Miau, the town of Cihan has been cut off from trade with other towns due to weirdly strong sandstorms after an amulet was stolen from that town by the bandit leader Tol'Kath. Your goal is to venture through the wasteland and the ruins of Ci in order to get the amulet back and add yourselves to the scroll of legends for Cihan."
, areas = ./areas/package.dhall
, monsters = ./monsters/package.dhall
, items = ./items/package.dhall
, winCondition = ./winCondition.dhall
}

6
Miau/winCondition.dhall Normal file
View File

@ -0,0 +1,6 @@
let camp = ../package.dhall
in camp.WinCondition::{
, item = ./items/sandstorm_amulet.dhall
, area = ./areas/cihan.dhall
}

1
Prelude.dhall Normal file
View File

@ -0,0 +1 @@
https://raw.githubusercontent.com/dhall-lang/dhall-lang/v19.0.0/Prelude/package.dhall

11
README.md Normal file
View File

@ -0,0 +1,11 @@
# Campaigns for The Source
This is where we will put our prewritten campaigns/oneshots for [The
Source](https://withinstudios.itch.io/the-source) while they are being written.
They will be shipped as eBooks to Itch. This is the staging ground.
These are also intended to act as inspiration for creating your own adventures.
## Current Campaigns
- [Sands of Miau](./Miau)

1
campaigns.dhall Normal file
View File

@ -0,0 +1 @@
{ Miau = ./Miau/package.dhall }

1
package.dhall Normal file
View File

@ -0,0 +1 @@
./types/package.dhall

View File

@ -0,0 +1,14 @@
let camp = ../../package.dhall
in camp.Item::{
, name = "Flask"
, description = "A flask of the good stuff."
, kind = camp.ItemKind.Consumable
, charges = Some 3
, bonuses =
[ camp.Bonus::{ amount = Some -2, stat = Some camp.Stat.CHA }
, camp.Bonus::{ amount = Some +4, stat = Some camp.Stat.RISK }
]
, cost = 30
, sellValue = Some 10
}

View File

@ -0,0 +1,11 @@
let camp = ../../package.dhall
in camp.Item::{
, name = "Hydroflask"
, description = "A flask of water."
, kind = camp.ItemKind.Consumable
, charges = Some 5
, bonuses = [ camp.Bonus::{ amount = Some +2, stat = Some camp.Stat.HP } ]
, cost = 30
, sellValue = Some 10
}

View File

@ -0,0 +1,5 @@
[
./flask.dhall
, ./hydroflask.dhall
, ./ration.dhall
]

View File

@ -0,0 +1,16 @@
let camp = ../../package.dhall
in camp.Item::{
, name = "Ration"
, description = "Standard rations to restore HP"
, kind = camp.ItemKind.Consumable
, bonuses =
[ camp.Bonus::{
, stat = Some camp.Stat.HP
, when = Some camp.Roll::{ diceSides = 6, level = True }
}
]
, charges = Some 1
, cost = 5
, sellValue = None Natural
}

1
shared/package.dhall Normal file
View File

@ -0,0 +1 @@
{ consumables = ./consumables/package.dhall }

27
types/Area.dhall Normal file
View File

@ -0,0 +1,27 @@
let Monster = ./Monster.dhall
let NPC = ./NPC.dhall
let Item = ./Item.dhall
in { Type =
{ name : Text
, humanName : Text
, description : Text
, links : List Text
, monsters : List Monster.Type
, npcs : List NPC.Type
, items : List Item.Type
, kind : Text
}
, default =
{ name = "unnamed"
, humanName = "unnamed area"
, description = "fill me in please"
, links = [] : List Text
, monsters = [] : List Monster.Type
, npcs = [] : List NPC.Type
, items = [] : List Item.Type
, kind = ""
}
}

23
types/Bonus.dhall Normal file
View File

@ -0,0 +1,23 @@
let Stat = ./Stat.dhall
let Species = ./Species.dhall
let Roll = ./Roll.dhall
in { Type =
{ stat : Optional Stat
, amount : Optional Integer
, area : Optional Text
, when : Optional Roll.Type
, species : Optional Species
, polymorph : Optional Species
}
, default =
{ stat = None Stat
, amount = None Integer
, area = None Text
, when = None Roll.Type
, species = None Species
, polymorph = None Species
}
}

25
types/Campaign.dhall Normal file
View File

@ -0,0 +1,25 @@
let Area = ./Area.dhall
let Monster = ./Monster.dhall
let Item = ./Item.dhall
let WinCondition = ./WinCondition.dhall
in { Type =
{ name : Text
, description : Text
, areas : List Area.Type
, monsters : List Monster.Type
, items : List Item.Type
, winCondition : WinCondition.Type
}
, default =
{ name = "none"
, description = "fill me in"
, areas = [] : List Area.Type
, monsters = [] : List Monster.Type
, items = [] : List Item.Type
, winCondition = WinCondition::{=}
}
}

27
types/Item.dhall Normal file
View File

@ -0,0 +1,27 @@
let Bonus = ./Bonus.dhall
let ItemKind = ./ItemKind.dhall
in { Type =
{ name : Text
, description : Text
, weight : Natural
, kind : ItemKind
, bonuses : List Bonus.Type
, cost : Natural
, sellValue : Optional Natural
, charges : Optional Natural
, legendary : Bool
}
, default =
{ name = "no name"
, description = "no description"
, weight = 1
, kind = ItemKind.Trinket
, bonuses = [] : List Bonus.Type
, cost = 0
, sellValue = None Natural
, charges = None Natural
, legendary = False
}
}

1
types/ItemKind.dhall Normal file
View File

@ -0,0 +1 @@
< Weapon | Armor | Trinket | Gear | Consumable >

27
types/Monster.dhall Normal file
View File

@ -0,0 +1,27 @@
let MonsterItem = ./MonsterItem.dhall
let Item = ./Item.dhall
let Range = ./Range.dhall
let Roll = ./Roll.dhall
in { Type =
{ name : Text
, damage : Roll.Type
, hp : Natural
, armor : Natural
, exp : Natural
, items : List MonsterItem.Type
, drops : List Item.Type
}
, default =
{ name = "unnamed"
, damage = Roll::{=}
, hp = 1
, armor = 0
, exp = 25
, items = [] : List MonsterItem.Type
, drops = [] : List Item.Type
}
}

7
types/MonsterItem.dhall Normal file
View File

@ -0,0 +1,7 @@
let Item = ./Item.dhall
let Roll = ./Roll.dhall
in { Type = { dice : Optional Roll.Type, item : Item.Type }
, default = { dice = None Roll.Type, item = Item::{=} }
}

19
types/NPC.dhall Normal file
View File

@ -0,0 +1,19 @@
let Item = ./Item.dhall
let Species = ./Species.dhall
in { Type =
{ name : Text
, job : Text
, sellItems : List Item.Type
, species : Species
, dialogue : List Text
}
, default =
{ name = "no name"
, job = "no job"
, sellItems = [] : List Item.Type
, species = Species.Feline
, dialogue = [] : List Text
}
}

1
types/Range.dhall Normal file
View File

@ -0,0 +1 @@
{ Type = { low : Natural, high : Natural }, default = { low = 0, high = 0 } }

15
types/Roll.dhall Normal file
View File

@ -0,0 +1,15 @@
{ Type =
{ diceCount : Optional Natural
, diceSides : Natural
, min : Optional Natural
, level : Bool
, plus : Optional Natural
}
, default =
{ diceCount = Some 1
, diceSides = 6
, min = None Natural
, level = False
, plus = None Natural
}
}

1
types/Species.dhall Normal file
View File

@ -0,0 +1 @@
< Human | Feline | Shark | Cetacean >

13
types/Spell.dhall Normal file
View File

@ -0,0 +1,13 @@
let Stat = ./Stat.dhall
let Roll = ./Roll.dhall
in { Type =
{ stat : Stat, name : Text, description : Text, damage : Roll.Type }
, default =
{ stat = Stat.INT
, name = "no name"
, description = "no description"
, damage = Roll::{=}
}
}

1
types/Stat.dhall Normal file
View File

@ -0,0 +1 @@
< STR | DEX | CON | INT | WIS | CHA | ATK | DEF | RISK | HP >

7
types/WinCondition.dhall Normal file
View File

@ -0,0 +1,7 @@
let Item = ./Item.dhall
let Area = ./Area.dhall
in { Type = { item : Item.Type, area : Area.Type }
, default = { item = Item::{=}, area = Area::{=} }
}

15
types/package.dhall Normal file
View File

@ -0,0 +1,15 @@
{ Area = ./Area.dhall
, Bonus = ./Bonus.dhall
, Campaign = ./Campaign.dhall
, Item = ./Item.dhall
, ItemKind = ./ItemKind.dhall
, Monster = ./Monster.dhall
, MonsterItem = ./MonsterItem.dhall
, NPC = ./NPC.dhall
, Range = ./Range.dhall
, Roll = ./Roll.dhall
, Stat = ./Stat.dhall
, Species = ./Species.dhall
, Spell = ./Spell.dhall
, WinCondition = ./WinCondition.dhall
}

84
types/toMD/area.dhall Normal file
View File

@ -0,0 +1,84 @@
let toMD =
{ item = ./item.dhall
, monster = ./monster.dhall
, npc = ./npc.dhall
, roll = ./roll.dhall
}
let Prelude = ../../Prelude.dhall
let Area = ../Area.dhall
let NPC = ../NPC.dhall
let Monster = ../Monster.dhall
let Item = ../Item.dhall
in λ(area : Area.Type) →
let items =
if Prelude.Natural.greaterThan
(List/length Item.Type area.items)
0
then let doer =
λ(i : Item.Type) →
"* ${i.name} (${Natural/show i.cost})"
let showItems = Prelude.Text.concatMapSep "\n" Item.Type doer
in ''
Has the following items out in the open:
${showItems area.items}
''
else ""
let npcs =
if Prelude.Natural.greaterThan (List/length NPC.Type area.npcs) 0
then let showNPCs =
Prelude.Text.concatMapSep "\n\n" NPC.Type toMD.npc
in ''
## NPCs
${showNPCs area.npcs}
''
else ""
let monsters =
if Prelude.Natural.greaterThan
(List/length Monster.Type area.monsters)
0
then let doer =
λ(m : Monster.Type) →
let hp = Natural/show m.hp
let def = Natural/show m.armor
let atk = toMD.roll m.damage
in "* ${m.name} (${hp} HP, ${def} DEF, ${atk} ATK)"
let showMonsters =
Prelude.Text.concatMapSep "\n" Monster.Type doer
in ''
Has the following monsters out in the open:
${showMonsters area.monsters}
''
else ""
in ''
### ${area.humanName}
A ${area.kind} area.
${area.description}
${items}
${npcs}
${monsters}
''

48
types/toMD/bonus.dhall Normal file
View File

@ -0,0 +1,48 @@
let Bonus = ../Bonus.dhall
let Stat = ../Stat.dhall
let Species = ../Species.dhall
let Roll = ../Roll.dhall
let Prelude = ../../Prelude.dhall
let toMD =
{ stat = ./stat.dhall, species = ./species.dhall, roll = ./roll.dhall }
in λ(bonus : Bonus.Type) →
let stat = merge { None = "", Some = toMD.stat } bonus.stat
let amount =
merge
{ None = ""
, Some =
λ(amount : Integer) →
if Prelude.Integer.greaterThan amount +0
then " ${Integer/show amount} "
else " ${Integer/show amount} "
}
bonus.amount
let area =
merge
{ None = "", Some = λ(area : Text) → " when in ${area} " }
bonus.area
let polymorph =
merge
{ None = ""
, Some =
λ(species : Species) → " polymorph to ${toMD.species species}"
}
bonus.polymorph
let condition =
merge
{ None = ""
, Some = λ(roll : Roll.Type) → " if ${toMD.roll roll}"
}
bonus.when
in "Grants${amount}${stat}${area}${polymorph}${condition}"

45
types/toMD/campaign.dhall Normal file
View File

@ -0,0 +1,45 @@
let toMD =
{ area = ./area.dhall
, monster = ./monster.dhall
, item = ./item.dhall
, winCondition = ./winCondition.dhall
}
let Prelude = ../../Prelude.dhall
let Area = ../Area.dhall
let Campaign = ../Campaign.dhall
let Monster = ../Monster.dhall
let Item = ../Item.dhall
in λ(camp : Campaign.Type) →
let areas = Prelude.Text.concatMapSep "\n" Area.Type toMD.area
let monsters = Prelude.Text.concatMapSep "\n" Monster.Type toMD.monster
let items = Prelude.Text.concatMapSep "\n" Item.Type toMD.item
in ''
# ${camp.name}
${camp.description}
## Win Condition
${toMD.winCondition camp.winCondition}
## Areas
${areas camp.areas}
## Monsters
${monsters camp.monsters}
## Items
${items camp.items}
''

61
types/toMD/item.dhall Normal file
View File

@ -0,0 +1,61 @@
let toMD = { itemKind = ./itemKind.dhall, bonus = ./bonus.dhall }
let Prelude = ../../Prelude.dhall
let Item = ../Item.dhall
let Bonus = ../Bonus.dhall
in λ(item : Item.Type) →
let bonuses =
if Prelude.Natural.greaterThan
(List/length Bonus.Type item.bonuses)
0
then let doer = λ(bonus : Bonus.Type) → "* ${toMD.bonus bonus}"
let showItems = Prelude.Text.concatMapSep "\n" Bonus.Type doer
in ''
Grants the following bonuses:
${showItems item.bonuses}
''
else ""
let legendary = if item.legendary then "(legendary item)" else ""
let charges =
merge
{ None = ""
, Some =
λ(charges : Natural) →
''
Has a maximum of ${Natural/show charges} charges.
''
}
item.charges
let sellPrice =
merge
{ None = "Unsellable"
, Some =
λ(price : Natural) → "Sells for ${Natural/show price} gold."
}
item.sellValue
in ''
### ${item.name}
${toMD.itemKind item.kind} ${legendary} ${charges}
Weight: ${Natural/show item.weight}
${item.description}
${bonuses}
Buy price: ${Natural/show item.cost} gold
${sellPrice}
''

14
types/toMD/itemKind.dhall Normal file
View File

@ -0,0 +1,14 @@
let ItemKind = ../ItemKind.dhall
let show =
λ(ik : ItemKind) →
merge
{ Weapon = "Weapon"
, Armor = "Armor"
, Trinket = "Trinket"
, Gear = "Gear"
, Consumable = "Consumable"
}
ik
in show

55
types/toMD/monster.dhall Normal file
View File

@ -0,0 +1,55 @@
let toMD = { roll = ./roll.dhall, monsterItem = ./monsterItem.dhall }
let Prelude = ../../Prelude.dhall
let Monster = ../Monster.dhall
let MonsterItem = ../MonsterItem.dhall
let Item = ../Item.dhall
in λ(monster : Monster.Type) →
let items =
if Prelude.Natural.greaterThan
(List/length MonsterItem.Type monster.items)
0
then let doer =
λ(item : MonsterItem.Type) →
"* ${toMD.monsterItem item}"
let showItems =
Prelude.Text.concatMapSep "\n" MonsterItem.Type doer
in ''
Has the following items:
${showItems monster.items}
''
else ""
let drops =
if Prelude.Natural.greaterThan
(List/length Item.Type monster.drops)
0
then let doer = λ(item : Item.Type) → "* ${item.name}"
let showItems = Prelude.Text.concatMapSep "\n" Item.Type doer
in ''
Always drops the following items:
${showItems monster.drops}
''
else ""
in ''
### ${monster.name}
${Natural/show monster.hp} HP (${Natural/show monster.armor} armor)
${toMD.roll monster.damage} attack damage
Grants ${Natural/show monster.exp} experience on defeat.
${items}
${drops}
''

View File

@ -0,0 +1,15 @@
let toMD = { item = ./item.dhall, roll = ./roll.dhall }
let MonsterItem = ../MonsterItem.dhall
let Roll = ../Roll.dhall
in λ(monsterItem : MonsterItem.Type) →
let roll =
merge
{ None = ""
, Some = λ(dice : Roll.Type) → " drops if ${toMD.roll dice}"
}
monsterItem.dice
in "${monsterItem.item.name}${roll}"

50
types/toMD/npc.dhall Normal file
View File

@ -0,0 +1,50 @@
let toMD = { species = ./species.dhall, item = ./item.dhall }
let Prelude = ../../Prelude.dhall
let NPC = ../NPC.dhall
let Item = ../Item.dhall
in λ(npc : NPC.Type) →
let items =
if Prelude.Natural.greaterThan
(List/length Item.Type npc.sellItems)
0
then let doer =
λ(i : Item.Type) →
"* ${i.name} (${Natural/show i.cost} gold)"
let showItems = Prelude.Text.concatMapSep "\n" Item.Type doer
in ''
Has the following items for sale:
${showItems npc.sellItems}
''
else ""
let dialogue =
if Prelude.Natural.greaterThan (List/length Text npc.dialogue) 0
then let showDia =
Prelude.Text.concatMapSep
"\n"
Text
(λ(t : Text) → "* ${t}")
in ''
Dialogue:
${showDia npc.dialogue}
''
else ""
in ''
#### ${npc.name}
A ${toMD.species npc.species} ${npc.job}.
${items}
${dialogue}
''

23
types/toMD/roll.dhall Normal file
View File

@ -0,0 +1,23 @@
let Roll = ../Roll.dhall
in λ(roll : Roll.Type) →
let diceCount =
if roll.level
then "user's level "
else merge { None = "", Some = Natural/show } roll.diceCount
let plus =
merge
{ None = "", Some = λ(plus : Natural) → "+${Natural/show plus}" }
roll.plus
let minimum =
merge
{ None = ""
, Some =
λ(minus : Natural) →
" is greater than or equal to ${Natural/show minus}"
}
roll.min
in "${diceCount}d${Natural/show roll.diceSides}${plus}${minimum}"

10
types/toMD/species.dhall Normal file
View File

@ -0,0 +1,10 @@
let Species = ../Species.dhall
in λ(species : Species) →
merge
{ Human = "Human"
, Feline = "Feline"
, Shark = "Shark"
, Cetacean = "Cetacean"
}
species

12
types/toMD/spell.dhall Normal file
View File

@ -0,0 +1,12 @@
let toMD = { stat = ./stat.dhall, roll = ./roll.dhall }
let Spell = ../Spell.dhall
in λ(spell : Spell.Type) →
''
### ${spell.name} (${toMD.stat spell.stat})
${spell.description}
Deals ${toMD.roll spell.damage}
''

16
types/toMD/stat.dhall Normal file
View File

@ -0,0 +1,16 @@
let Stat = ../Stat.dhall
in λ(stat : Stat) →
merge
{ STR = "STR"
, DEX = "DEX"
, CON = "CON"
, INT = "INT"
, WIS = "WIS"
, CHA = "CHA"
, ATK = "ATK"
, DEF = "DEF"
, RISK = "RISK"
, HP = "HP"
}
stat

View File

@ -0,0 +1,4 @@
let WinCondition = ../WinCondition.dhall
in λ(winCondition : WinCondition.Type) →
"Take the ${winCondition.item.name} to ${winCondition.area.humanName}"