|
- import { Place, Choice, Direction } from '../world'
- import { ProperNoun, ImproperNoun, MalePronouns, FemalePronouns, TheyPronouns } from '../language'
- import { Encounter } from '../combat'
- import * as Creatures from '../creatures'
- import * as Items from '../items'
- import { LogLine, nilLog } from '../interface'
- import { Creature } from '../creature'
- import { DevourAction } from '../combat/actions'
- import { SurrenderEffect } from '../combat/effects'
- import moment from 'moment'
-
- function makeParty (): Creature[] {
- const fighter = new Creatures.Human(new ProperNoun("Redgar"), MalePronouns, {
- stats: {
- Toughness: 20,
- Power: 20,
- Speed: 15,
- Willpower: 15,
- Charm: 10
- }
- })
- fighter.title = "Lv. 6 Fighter"
- fighter.equipment.set(Items.EquipmentSlot.MainHand, new Items.Sword())
- const rogue = new Creatures.Human(new ProperNoun('Lidda'), FemalePronouns, {
- stats: {
- Toughness: 10,
- Power: 15,
- Speed: 20,
- Willpower: 15,
- Charm: 20
- }
- })
- rogue.title = "Lv. 5 Rogue"
- rogue.equipment.set(Items.EquipmentSlot.MainHand, new Items.Dagger())
- const wizard = new Creatures.Human(new ProperNoun('Mialee'), FemalePronouns, {
- stats: {
- Toughness: 10,
- Power: 10,
- Speed: 15,
- Willpower: 20,
- Charm: 25
- }
- })
- wizard.title = "Lv. 6 Wizard"
- wizard.equipment.set(Items.EquipmentSlot.MainHand, new Items.Wand())
- const cleric = new Creatures.Human(new ProperNoun('Jozan'), MalePronouns, {
- stats: {
- Toughness: 15,
- Power: 15,
- Speed: 10,
- Willpower: 20,
- Charm: 15
- }
- })
- cleric.title = "Lv. 5 Cleric"
- cleric.equipment.set(Items.EquipmentSlot.MainHand, new Items.Mace())
-
- return [fighter, cleric, rogue, wizard]
- }
-
- export const Town = (): Place => {
- const home = new Place(
- new ProperNoun('Your home'),
- "A very home-y place"
- )
-
- const westAve = new Place(
- new ImproperNoun('West Avenue'),
- "Streets of Sim City"
- )
-
- const westRoad = new Place(
- new ImproperNoun('road'),
- "West of town"
- )
-
- const woods = new Place(
- new ImproperNoun('woods'),
- "Scary woods"
- )
-
- const bosses = new Place(
- new ProperNoun("BOSS ZONE"),
- "Extra scary"
- )
-
- woods.choices.push(
- new Choice(
- "Fight a wolf",
- "yolo",
- (world, executor) => {
- world.encounter = new Encounter(
- { name: "You punched a wolf" },
- [executor, new Creatures.Wolf()]
- )
-
- return new LogLine(`FIGHT TIME`)
- }
- )
- )
-
- woods.choices.push(
- new Choice(
- "Fight a dragon",
- "yolo",
- (world, executor) => {
- world.encounter = new Encounter(
- { name: "You punched a dragon" },
- [executor, new Creatures.Dragon()]
- )
-
- return new LogLine(`FIGHT TIME`)
- }
- )
- )
-
- const bossEncounters = [
- new Encounter(
- { name: "Withers & Kenzie" },
- makeParty().concat([new Creatures.Withers(), new Creatures.Kenzie()])
- ),
- new Encounter(
- { name: "Goldeneye" },
- makeParty().concat([new Creatures.Goldeneye()])
- ),
- new Encounter(
- { name: "Large Wah" },
- makeParty().concat([new Creatures.Shingo()])
- )
- ]
-
- home.choices.push(
- new Choice(
- "Nap",
- "Zzzzzz",
- (world, executor) => {
- return world.advance(moment.duration(1, "hour"))
- }
- )
- )
- home.choices.push(
- new Choice(
- "Eat someone",
- "Slurp",
- (world, executor) => {
- const snack = new Creatures.Human(new ProperNoun("Snack"), TheyPronouns)
- snack.applyEffect(new SurrenderEffect())
- const options = executor.validActions(snack).filter(action => action instanceof DevourAction)
- return options[Math.floor(options.length * Math.random())].execute(executor, snack)
- }
- )
- )
-
- bossEncounters.forEach(encounter => {
- bosses.choices.push(
- new Choice(
- encounter.desc.name,
- "Boss fight!",
- (world, executor) => {
- world.encounter = encounter
- return nilLog
- }
- )
- )
- })
-
- home.biconnect(Direction.North, westAve)
- westAve.biconnect(Direction.West, westRoad)
- westRoad.biconnect(Direction.South, woods)
- westRoad.biconnect(Direction.North, bosses)
-
- return home
- }
|