diff --git a/combat.js b/combat.js
new file mode 100644
index 0000000..8fefdf7
--- /dev/null
+++ b/combat.js
@@ -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";
+    }
+  };
+}
diff --git a/dialog.js b/dialog.js
index 6459da0..38712fb 100644
--- a/dialog.js
+++ b/dialog.js
@@ -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.";
+  }
+}
diff --git a/feast.html b/feast.html
index ccecf2e..930e758 100644
--- a/feast.html
+++ b/feast.html
@@ -5,6 +5,7 @@
   
   
Feast
   
+  
   
   
   
diff --git a/feast.js b/feast.js
index a911d57..63eab42 100644
--- a/feast.js
+++ b/feast.js
@@ -11,6 +11,10 @@ let newline = " ";
 
 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;
diff --git a/vore.js b/vore.js
index dd1f86b..8100791 100644
--- a/vore.js
+++ b/vore.js
@@ -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") {
diff --git a/world.js b/world.js
index a03b542..0105646 100644
--- a/world.js
+++ b/world.js
@@ -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++) {