copy from withinbot
Signed-off-by: Xe <me@christine.website>
This commit is contained in:
commit
951c9d83fb
|
@ -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
|
||||
|
|
@ -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"
|
||||
}
|
|
@ -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"
|
||||
}
|
|
@ -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"
|
||||
}
|
|
@ -0,0 +1,5 @@
|
|||
let town = [ ./cihan.dhall, ./armor_shop.dhall, ./tavern.dhall, ./inn.dhall ]
|
||||
|
||||
let wasteland = [ ./start.dhall ]
|
||||
|
||||
in wasteland # town
|
|
@ -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"
|
||||
}
|
|
@ -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"
|
||||
}
|
|
@ -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
|
||||
}
|
|
@ -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
|
||||
}
|
|
@ -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
|
||||
}
|
|
@ -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
|
||||
}
|
|
@ -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
|
||||
}
|
|
@ -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
|
||||
}
|
|
@ -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
|
||||
}
|
|
@ -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
|
||||
}
|
|
@ -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
|
||||
}
|
|
@ -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
|
||||
}
|
|
@ -0,0 +1,8 @@
|
|||
let camp = ../../package.dhall
|
||||
|
||||
in camp.Item::{
|
||||
, name = "Gold Amulet"
|
||||
, description = "A valuable gold amulet."
|
||||
, cost = 100
|
||||
, sellValue = Some 50
|
||||
}
|
|
@ -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
|
||||
}
|
|
@ -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
|
||||
}
|
|
@ -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
|
||||
}
|
|
@ -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
|
||||
}
|
|
@ -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
|
||||
}
|
|
@ -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
|
||||
}
|
|
@ -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
|
||||
}
|
|
@ -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
|
||||
}
|
|
@ -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
|
||||
}
|
|
@ -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
|
|
@ -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
|
||||
}
|
|
@ -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
|
||||
}
|
|
@ -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
|
||||
}
|
|
@ -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
|
||||
}
|
|
@ -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
|
||||
}
|
|
@ -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
|
||||
}
|
|
@ -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
|
||||
}
|
|
@ -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
|
||||
}
|
|
@ -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
|
||||
}
|
|
@ -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
|
||||
}
|
|
@ -0,0 +1 @@
|
|||
let toMD = ../types/toMD/campaign.dhall in toMD ./package.dhall
|
|
@ -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
|
||||
}
|
||||
]
|
||||
}
|
|
@ -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 }
|
||||
]
|
||||
}
|
|
@ -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 } ]
|
||||
}
|
|
@ -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 }
|
||||
]
|
||||
}
|
|
@ -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 }
|
||||
]
|
||||
}
|
|
@ -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 }
|
||||
]
|
||||
}
|
|
@ -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
|
||||
]
|
|
@ -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
|
||||
}
|
|
@ -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 ]
|
||||
}
|
|
@ -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
|
|
@ -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
|
||||
}
|
|
@ -0,0 +1,6 @@
|
|||
let camp = ../package.dhall
|
||||
|
||||
in camp.WinCondition::{
|
||||
, item = ./items/sandstorm_amulet.dhall
|
||||
, area = ./areas/cihan.dhall
|
||||
}
|
|
@ -0,0 +1 @@
|
|||
https://raw.githubusercontent.com/dhall-lang/dhall-lang/v19.0.0/Prelude/package.dhall
|
|
@ -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)
|
|
@ -0,0 +1 @@
|
|||
{ Miau = ./Miau/package.dhall }
|
|
@ -0,0 +1 @@
|
|||
./types/package.dhall
|
|
@ -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
|
||||
}
|
|
@ -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
|
||||
}
|
|
@ -0,0 +1,5 @@
|
|||
[
|
||||
./flask.dhall
|
||||
, ./hydroflask.dhall
|
||||
, ./ration.dhall
|
||||
]
|
|
@ -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
|
||||
}
|
|
@ -0,0 +1 @@
|
|||
{ consumables = ./consumables/package.dhall }
|
|
@ -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 = ""
|
||||
}
|
||||
}
|
|
@ -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
|
||||
}
|
||||
}
|
|
@ -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::{=}
|
||||
}
|
||||
}
|
|
@ -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
|
||||
}
|
||||
}
|
|
@ -0,0 +1 @@
|
|||
< Weapon | Armor | Trinket | Gear | Consumable >
|
|
@ -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
|
||||
}
|
||||
}
|
|
@ -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::{=} }
|
||||
}
|
|
@ -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
|
||||
}
|
||||
}
|
|
@ -0,0 +1 @@
|
|||
{ Type = { low : Natural, high : Natural }, default = { low = 0, high = 0 } }
|
|
@ -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
|
||||
}
|
||||
}
|
|
@ -0,0 +1 @@
|
|||
< Human | Feline | Shark | Cetacean >
|
|
@ -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::{=}
|
||||
}
|
||||
}
|
|
@ -0,0 +1 @@
|
|||
< STR | DEX | CON | INT | WIS | CHA | ATK | DEF | RISK | HP >
|
|
@ -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::{=} }
|
||||
}
|
|
@ -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
|
||||
}
|
|
@ -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}
|
||||
''
|
|
@ -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}"
|
|
@ -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}
|
||||
''
|
|
@ -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}
|
||||
''
|
|
@ -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
|
|
@ -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}
|
||||
''
|
|
@ -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}"
|
|
@ -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}
|
||||
''
|
|
@ -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}"
|
|
@ -0,0 +1,10 @@
|
|||
let Species = ../Species.dhall
|
||||
|
||||
in λ(species : Species) →
|
||||
merge
|
||||
{ Human = "Human"
|
||||
, Feline = "Feline"
|
||||
, Shark = "Shark"
|
||||
, Cetacean = "Cetacean"
|
||||
}
|
||||
species
|
|
@ -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}
|
||||
''
|
|
@ -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
|
|
@ -0,0 +1,4 @@
|
|||
let WinCondition = ../WinCondition.dhall
|
||||
|
||||
in λ(winCondition : WinCondition.Type) →
|
||||
"Take the ${winCondition.item.name} to ${winCondition.area.humanName}"
|
Loading…
Reference in New Issue