Browse Source

Basic combat and eating

tags/v0.2.8
Fen Dweller 7 years ago
parent
commit
cb7a641ac2
6 changed files with 127 additions and 15 deletions
  1. +27
    -0
      combat.js
  2. +21
    -0
      dialog.js
  3. +1
    -0
      feast.html
  4. +35
    -0
      feast.js
  5. +4
    -0
      vore.js
  6. +39
    -15
      world.js

+ 27
- 0
combat.js View File

@@ -0,0 +1,27 @@
"use strict";

function attack(attacker, defender, baseDamage) {
let damage = Math.round((Math.random() * 0.5 - 0.25 + 1) * baseDamage);
defender.health -= damage;
return damage;
}

function punchAttack(attacker) {
return {
name: "Punch",
desc: "Punch a nerd",
attack: function(defender) {
return "You punch the " + defender.description() + " for " + attack(attacker, defender, attacker.str) + " damage";
}
};
}

function flankAttack(attacker) {
return {
name: "Flank",
desc: "Be sneaky",
attack: function(defender) {
return "You run around the " + defender.description() + " and attack for " + attack(attacker, defender, attacker.dex) + " damage";
}
};
}

+ 21
- 0
dialog.js View File

@@ -60,3 +60,24 @@ function PhoneCall() {
nodeCrash.hooks.push(function() { potato() });
}
}

function FallenFoe(foe) {
DialogNode.call(this);

this.text = "What do you want to do with your enemy?";

{
let nodeEat = new DialogNode();
this.addChoice("Devour!",nodeEat);
nodeEat.text = "You grab your helpless prey and force them down your gullet.";
nodeEat.hooks.push(function() {
player.stomach.feed(foe);
})
}

{
let nodeSpare = new DialogNode();
this.addChoice("Spare",nodeSpare);
nodeSpare.text = "You decide to leave your foe uneaten.";
}
}

+ 1
- 0
feast.html View File

@@ -5,6 +5,7 @@
<meta charset="utf-8">
<title>Feast</title>
<link rel="stylesheet" href="feast.css">
<script src="combat.js"></script>
<script src="objects.js"></script>
<script src="dialog.js"></script>
<script src="world.js"></script>


+ 35
- 0
feast.js View File

@@ -11,6 +11,10 @@ let newline = "&nbsp;";

let player = new Player();

let attacks = [];

attacks.push(new punchAttack(player));
attacks.push(new flankAttack(player));
function round(number, digits) {
return Math.round(number * Math.pow(10,digits)) / Math.pow(10,digits);
}
@@ -54,7 +58,21 @@ function updateExplore() {
}

function updateCombat() {
let list = document.getElementById("combat");

while(list.firstChild) {
list.removeChild(list.firstChild);
}

for (let i = 0; i < attacks.length; i++) {
let li = document.createElement("li");
let button = document.createElement("button");
button.classList.add("combat-button");
button.innerHTML = attacks[i].name;
button.addEventListener("click", function() { attackClicked(i) });
li.appendChild(button);
list.appendChild(li);
}
}

function updateDialog() {
@@ -142,6 +160,8 @@ function moveTo(room,desc="You go places lol") {
});

update([desc,newline]);

currentRoom.visit();
}

window.addEventListener('load', function(event) {
@@ -165,6 +185,21 @@ function update(lines=[]) {
updateDisplay();
}

function startCombat(opponent) {
mode = "combat";
currentFoe = opponent;
update(["Oh shit it's a " + opponent.description()]);
}

function attackClicked(index) {
update([attacks[index].attack(currentFoe)]);

if (currentFoe.health <= 0) {
update(["The " + currentFoe.description() + " falls to the ground!"]);
startDialog(new FallenFoe(currentFoe));
}
}

function startDialog(dialog) {
mode = "dialog";
currentDialog = dialog;


+ 4
- 0
vore.js View File

@@ -9,6 +9,10 @@ function Creature(name = "Creature") {
this.mass = 80;
this.bowels = new Bowels();
this.stomach = new Stomach(this.bowels);

this.str = 10;
this.dex = 10;
this.con = 10;
}

function Player(name = "Player") {


+ 39
- 15
world.js View File

@@ -34,7 +34,7 @@ let locationsSrc = [
],
"objs": [
Bed
]
],
},
{
"name": "Bathroom",
@@ -88,6 +88,11 @@ let locationsSrc = [
"name": "Crossroads",
"dir": SOUTH,
"desc": "You walk south"
},
{
"name": "DANGER ZONE",
"dir": NORTH,
"desc": "You walk into the DANGER ZONE"
}
],
"objs": [
@@ -108,9 +113,6 @@ let locationsSrc = [
"dir": NORTH,
"desc": "You step into the bar."
}
],
"objs": [

]
},
{
@@ -122,9 +124,6 @@ let locationsSrc = [
"dir": SOUTH,
"desc": "You step out of the bar"
}
],
"objs": [

]
},
{
@@ -141,9 +140,6 @@ let locationsSrc = [
"dir": SOUTH,
"desc": "You walk south"
}
],
"objs": [

]
},
{
@@ -155,9 +151,22 @@ let locationsSrc = [
"dir": NORTH,
"desc": "You walk to the crossroads"
}
]
},
{
"name": "DANGER ZONE",
"desc": "THE DANGER ZONE",
"conn": [
{
"name": "North Street",
"dir": SOUTH,
"desc": "You walk out of the DANGER ZONE"
}
],
"objs": [

"hooks": [
function() {
startCombat(new Anthro());
}
]
}
];
@@ -168,6 +177,13 @@ function Location(name="Nowhere",desc="Nada") {
this.exits = [null,null,null,null,null,null,null,null];
this.exitDescs = [null,null,null,null,null,null,null,null];
this.objects = [];
this.hooks = [];

this.visit = function() {
this.hooks.forEach(function (x) {
x();
});
};
}

function opposite(direction) {
@@ -193,9 +209,17 @@ function createWorld() {
let src = locationsSrc[i];
let location = new Location(src.name,src.desc);
locations[src.name] = location;
src.objs.forEach(function (obj) {
location.objects.push(new obj());
});
if (src.objs != undefined) {
src.objs.forEach(function (obj) {
location.objects.push(new obj());
});
}
if (src.hooks != undefined) {
src.hooks.forEach(function (hook) {
location.hooks.push(hook);
});
}

}

for (let i = 0; i < locationsSrc.length; i++) {


Loading…
Cancel
Save