It just sends you back home for now.vintage
| @@ -3,7 +3,7 @@ | |||||
| <Header :version="version" /> | <Header :version="version" /> | ||||
| <div id="main-area"> | <div id="main-area"> | ||||
| <transition name="component-fade" mode='out-in'> | <transition name="component-fade" mode='out-in'> | ||||
| <component @profile="$data.profileOn = true" @exit="$data.profileOn = false" @leave-combat="$data.world.encounter = null" v-bind:is="mode" :world="$data.world" :encounter="$data.world.encounter" /> | |||||
| <component @profile="$data.profileOn = true" @exit="$data.profileOn = false" @give-in="gameOver()" @leave-combat="$data.world.encounter = null" v-bind:is="mode" :world="$data.world" :encounter="$data.world.encounter" /> | |||||
| </transition> | </transition> | ||||
| </div> | </div> | ||||
| </div> | </div> | ||||
| @@ -33,6 +33,7 @@ import { Town } from './game/maps/town' | |||||
| data () { | data () { | ||||
| return { | return { | ||||
| world: null, | world: null, | ||||
| home: null, | |||||
| profileOn: false, | profileOn: false, | ||||
| props: { | props: { | ||||
| Explore: { | Explore: { | ||||
| @@ -74,8 +75,13 @@ export default class App extends Vue { | |||||
| player.items.push(new Items.Mace()) | player.items.push(new Items.Mace()) | ||||
| player.items.push(new Items.Dagger()) | player.items.push(new Items.Dagger()) | ||||
| this.$data.world = new World(player) | this.$data.world = new World(player) | ||||
| this.$data.home = Town() | |||||
| player.location = this.$data.home | |||||
| } | |||||
| player.location = Town() | |||||
| gameOver () { | |||||
| this.$data.world.encounter = null | |||||
| this.$data.world.player.location = this.$data.home | |||||
| } | } | ||||
| } | } | ||||
| </script> | </script> | ||||
| @@ -42,10 +42,13 @@ | |||||
| </div> | </div> | ||||
| <div v-show="actionDescVisible && encounter.winner === null" class="action-description"> | <div v-show="actionDescVisible && encounter.winner === null" class="action-description"> | ||||
| </div> | </div> | ||||
| <button @click="$emit('leave-combat')" v-if="encounter.winner !== null" class="exit-combat"> | |||||
| <button @click="$emit('give-in')" v-if="playerDigested" class="give-in"> | |||||
| Give In | |||||
| </button> | |||||
| <button @click="$emit('leave-combat')" v-if="!playerDigested && encounter.winner !== null" class="exit-combat"> | |||||
| Exit Combat | Exit Combat | ||||
| </button> | </button> | ||||
| <button @click="continuing = true; pickNext()" v-if="encounter.winner !== null && !continuing" class="continue-combat"> | |||||
| <button @click="continuing = true; pickNext()" v-if="!playerDigested && encounter.winner !== null && !continuing" class="continue-combat"> | |||||
| Continue | Continue | ||||
| </button> | </button> | ||||
| </div> | </div> | ||||
| @@ -87,6 +90,10 @@ export default class Combat extends Vue { | |||||
| Side = Side | Side = Side | ||||
| get playerDigested () { | |||||
| return this.world.player.destroyed && this.world.player.containedIn !== null | |||||
| } | |||||
| get running () { | get running () { | ||||
| if (this.encounter.winner === null || (this.$data.continuing === true && this.encounter.totalWinner === null)) { | if (this.encounter.winner === null || (this.$data.continuing === true && this.encounter.totalWinner === null)) { | ||||
| return true | return true | ||||
| @@ -310,7 +317,8 @@ export default class Combat extends Vue { | |||||
| } | } | ||||
| .exit-combat, | .exit-combat, | ||||
| .continue-combat { | |||||
| .continue-combat, | |||||
| .give-in { | |||||
| width: 100%; | width: 100%; | ||||
| padding: 4pt; | padding: 4pt; | ||||
| flex: 0 1; | flex: 0 1; | ||||
| @@ -322,6 +330,9 @@ export default class Combat extends Vue { | |||||
| font-size: 36px; | font-size: 36px; | ||||
| } | } | ||||
| .give-in { | |||||
| grid-area: 2 / main-col-start / main-row-start / main-col-end; | |||||
| } | |||||
| .exit-combat { | .exit-combat { | ||||
| grid-area: 2 / main-col-start / main-row-start / 3; | grid-area: 2 / main-col-start / main-row-start / 3; | ||||
| } | } | ||||
| @@ -1,4 +1,4 @@ | |||||
| import { Wolf } from './creatures/wolf' | |||||
| import { Wolf, DireWolf } from './creatures/wolves' | |||||
| import { Player } from './creatures/player' | import { Player } from './creatures/player' | ||||
| import { Cafat } from './creatures/cafat' | import { Cafat } from './creatures/cafat' | ||||
| import { Human } from './creatures/human' | import { Human } from './creatures/human' | ||||
| @@ -11,4 +11,4 @@ import { Kuro } from './creatures/kuro' | |||||
| import { Geta } from './creatures/geta' | import { Geta } from './creatures/geta' | ||||
| import { Werewolf } from './creatures/werewolf' | import { Werewolf } from './creatures/werewolf' | ||||
| export { Wolf, Player, Cafat, Human, Withers, Kenzie, Dragon, Shingo, Goldeneye, Kuro, Geta, Werewolf } | |||||
| export { Wolf, DireWolf, Player, Cafat, Human, Withers, Kenzie, Dragon, Shingo, Goldeneye, Kuro, Geta, Werewolf } | |||||
| @@ -1,82 +0,0 @@ | |||||
| import { Creature } from "../creature" | |||||
| import { Damage, DamageType, ConstantDamageFormula, Vigor, Side, StatDamageFormula, Stat } from '../combat' | |||||
| import { MalePronouns, ImproperNoun, ProperNoun, ObjectPronouns, FemalePronouns, TheyPronouns, Verb } from '../language' | |||||
| import { VoreType, Stomach, Bowels, Cock, Balls, anyVore, Slit, Womb, biconnectContainers } from '../vore' | |||||
| import { AttackAction, TransferAction, FeedAction } from '../combat/actions' | |||||
| import { Human } from '../creatures' | |||||
| export class Wolf extends Creature { | |||||
| constructor () { | |||||
| super( | |||||
| new ImproperNoun('wolf', 'wolves'), | |||||
| new ImproperNoun('wolf', 'wolves'), | |||||
| [MalePronouns, FemalePronouns, TheyPronouns][Math.floor(Math.random() * 3)], | |||||
| { Toughness: 20, Power: 20, Reflexes: 20, Agility: 20, Willpower: 20, Charm: 20 }, | |||||
| anyVore, | |||||
| anyVore, | |||||
| 25 | |||||
| ) | |||||
| this.actions.push( | |||||
| new AttackAction( | |||||
| new StatDamageFormula([ | |||||
| { fraction: 1, stat: Stat.Power, target: Vigor.Health, type: DamageType.Pierce }, | |||||
| { fraction: 0.5, stat: Stat.Power, target: Vigor.Health, type: DamageType.Crush } | |||||
| ]), | |||||
| new Verb("bite") | |||||
| ) | |||||
| ) | |||||
| this.side = Side.Monsters | |||||
| const stomach = new Stomach(this, 2, new ConstantDamageFormula(new Damage( | |||||
| { amount: 60, type: DamageType.Acid, target: Vigor.Health }, | |||||
| { amount: 30, type: DamageType.Crush, target: Vigor.Stamina }, | |||||
| { amount: 30, type: DamageType.Dominance, target: Vigor.Resolve } | |||||
| ))) | |||||
| this.containers.push(stomach) | |||||
| const bowels = new Bowels(this, 2, new ConstantDamageFormula(new Damage( | |||||
| { amount: 30, type: DamageType.Crush, target: Vigor.Health }, | |||||
| { amount: 60, type: DamageType.Crush, target: Vigor.Stamina }, | |||||
| { amount: 60, type: DamageType.Dominance, target: Vigor.Resolve } | |||||
| ))) | |||||
| this.containers.push(bowels) | |||||
| this.actions.push(new TransferAction(bowels, stomach)) | |||||
| this.otherActions.push(new FeedAction(stomach)) | |||||
| const cock = new Cock(this, 2, new ConstantDamageFormula(new Damage( | |||||
| { amount: 30, type: DamageType.Crush, target: Vigor.Health }, | |||||
| { amount: 60, type: DamageType.Crush, target: Vigor.Stamina }, | |||||
| { amount: 60, type: DamageType.Dominance, target: Vigor.Resolve } | |||||
| ))) | |||||
| const balls = new Balls(this, 2, new ConstantDamageFormula(new Damage( | |||||
| { amount: 30, type: DamageType.Crush, target: Vigor.Health }, | |||||
| { amount: 60, type: DamageType.Crush, target: Vigor.Stamina }, | |||||
| { amount: 60, type: DamageType.Dominance, target: Vigor.Resolve } | |||||
| )), cock) | |||||
| const slit = new Slit(this, 2, new ConstantDamageFormula(new Damage( | |||||
| { amount: 30, type: DamageType.Crush, target: Vigor.Health }, | |||||
| { amount: 60, type: DamageType.Crush, target: Vigor.Stamina }, | |||||
| { amount: 60, type: DamageType.Dominance, target: Vigor.Resolve } | |||||
| ))) | |||||
| const womb = new Womb(this, 2, new ConstantDamageFormula(new Damage( | |||||
| { amount: 30, type: DamageType.Crush, target: Vigor.Health }, | |||||
| { amount: 60, type: DamageType.Crush, target: Vigor.Stamina }, | |||||
| { amount: 60, type: DamageType.Dominance, target: Vigor.Resolve } | |||||
| )), slit) | |||||
| this.containers.push(balls) | |||||
| this.containers.push(cock) | |||||
| this.containers.push(womb) | |||||
| this.containers.push(slit) | |||||
| biconnectContainers(cock, balls) | |||||
| biconnectContainers(slit, womb) | |||||
| } | |||||
| } | |||||
| @@ -0,0 +1,74 @@ | |||||
| import { Creature } from "../creature" | |||||
| import { Damage, DamageType, ConstantDamageFormula, Vigor, Side, StatDamageFormula, Stat } from '../combat' | |||||
| import { MalePronouns, ImproperNoun, FemalePronouns, TheyPronouns, Verb } from '../language' | |||||
| import { Stomach, Bowels, anyVore } from '../vore' | |||||
| import { AttackAction, TransferAction } from '../combat/actions' | |||||
| import { VoreAI } from '../ai' | |||||
| export class Wolf extends Creature { | |||||
| constructor () { | |||||
| super( | |||||
| new ImproperNoun('wolf', 'wolves'), | |||||
| new ImproperNoun('wolf', 'wolves'), | |||||
| [MalePronouns, FemalePronouns, TheyPronouns][Math.floor(Math.random() * 3)], | |||||
| { Toughness: 15, Power: 20, Reflexes: 25, Agility: 25, Willpower: 5, Charm: 10 }, | |||||
| anyVore, | |||||
| anyVore, | |||||
| 25 | |||||
| ) | |||||
| this.side = Side.Monsters | |||||
| this.ai = new VoreAI() | |||||
| this.actions.push( | |||||
| new AttackAction( | |||||
| new StatDamageFormula([ | |||||
| { fraction: 1, stat: Stat.Power, target: Vigor.Health, type: DamageType.Pierce }, | |||||
| { fraction: 1, stat: Stat.Power, target: Vigor.Health, type: DamageType.Crush } | |||||
| ]), | |||||
| new Verb("bite") | |||||
| ) | |||||
| ) | |||||
| const stomach = new Stomach(this, 2, new StatDamageFormula([ | |||||
| { fraction: 3, stat: Stat.Toughness, target: Vigor.Health, type: DamageType.Acid }, | |||||
| { fraction: 2, stat: Stat.Power, target: Vigor.Stamina, type: DamageType.Crush }, | |||||
| { fraction: 1, stat: Stat.Charm, target: Vigor.Resolve, type: DamageType.Dominance } | |||||
| ])) | |||||
| this.containers.push(stomach) | |||||
| } | |||||
| } | |||||
| export class DireWolf extends Creature { | |||||
| constructor () { | |||||
| super( | |||||
| new ImproperNoun('dire wolf', 'dire wolves'), | |||||
| new ImproperNoun('dire wolf', 'dire wolves'), | |||||
| [MalePronouns, FemalePronouns, TheyPronouns][Math.floor(Math.random() * 3)], | |||||
| { Toughness: 25, Power: 40, Reflexes: 35, Agility: 45, Willpower: 15, Charm: 20 }, | |||||
| anyVore, | |||||
| anyVore, | |||||
| 75 | |||||
| ) | |||||
| this.side = Side.Monsters | |||||
| this.ai = new VoreAI() | |||||
| this.actions.push( | |||||
| new AttackAction( | |||||
| new StatDamageFormula([ | |||||
| { fraction: 1, stat: Stat.Power, target: Vigor.Health, type: DamageType.Pierce }, | |||||
| { fraction: 1, stat: Stat.Power, target: Vigor.Health, type: DamageType.Crush } | |||||
| ]), | |||||
| new Verb("bite") | |||||
| ) | |||||
| ) | |||||
| const stomach = new Stomach(this, 2, new StatDamageFormula([ | |||||
| { fraction: 3, stat: Stat.Toughness, target: Vigor.Health, type: DamageType.Acid }, | |||||
| { fraction: 2, stat: Stat.Power, target: Vigor.Stamina, type: DamageType.Crush }, | |||||
| { fraction: 1, stat: Stat.Charm, target: Vigor.Resolve, type: DamageType.Dominance } | |||||
| ])) | |||||
| this.containers.push(stomach) | |||||
| } | |||||
| } | |||||
| @@ -137,6 +137,24 @@ export const Town = (): Place => { | |||||
| ) | ) | ||||
| ) | ) | ||||
| woods.choices.push( | |||||
| new Choice( | |||||
| "Fight a dire wolf", | |||||
| "yolo", | |||||
| (world, executor) => { | |||||
| world.encounter = new Encounter( | |||||
| { | |||||
| name: "You punched a dire wolf", | |||||
| intro: (world: World) => new LogLine(`You punched a dire wolf. The wolf is angry.`) | |||||
| }, | |||||
| [executor, new Creatures.DireWolf()] | |||||
| ) | |||||
| return new LogLine(`FIGHT TIME`) | |||||
| } | |||||
| ) | |||||
| ) | |||||
| woods.choices.push( | woods.choices.push( | ||||
| new Choice( | new Choice( | ||||
| "Fight a werewolf", | "Fight a werewolf", | ||||
| @@ -411,11 +429,11 @@ export const Town = (): Place => { | |||||
| ) | ) | ||||
| home.biconnect(Direction.South, debug) | home.biconnect(Direction.South, debug) | ||||
| debug.biconnect(Direction.South, bosses) | |||||
| home.biconnect(Direction.North, westAve) | home.biconnect(Direction.North, westAve) | ||||
| westAve.biconnect(Direction.West, westRoad) | westAve.biconnect(Direction.West, westRoad) | ||||
| westAve.biconnect(Direction.North, alley) | westAve.biconnect(Direction.North, alley) | ||||
| westRoad.biconnect(Direction.South, woods) | westRoad.biconnect(Direction.South, woods) | ||||
| westRoad.biconnect(Direction.North, bosses) | |||||
| square.biconnect(Direction.East, eastAve) | square.biconnect(Direction.East, eastAve) | ||||
| square.biconnect(Direction.West, westAve) | square.biconnect(Direction.West, westAve) | ||||
| square.biconnect(Direction.North, northAve) | square.biconnect(Direction.North, northAve) | ||||