diff --git a/combat.js b/combat.js
index 7898bec..f4e34b8 100644
--- a/combat.js
+++ b/combat.js
@@ -131,6 +131,28 @@ function grappleDevour(attacker) {
   };
 }
 
+function grappledDevour(attacker) {
+  return {
+    name: "Devour",
+    desc: "Try to consume your grappling opponent",
+    attackPlayer: function(defender) {
+      let success = statHealthCheck(attacker, defender, "str");
+      if(success) {
+        defender.flags.grappled = false;
+        changeMode("eaten");
+        return [attacker.description("The") + " breaks your pin and crams your upper body into their maw, swallowing you down in seconds."];
+      } else {
+        return [attacker.description("The") + " thrashes at you in an attempt to devour you, but you avoid their jaws."];
+      }
+    }, requirements: [
+      function(attacker, defender) { return isGrappled(attacker) && isNormal(defender) && attacker.flags.shrunk != true; }
+    ], conditions: [
+      function(attacker, defender) { return defender.prefs.prey; }
+    ],
+    priority: 1,
+  };
+}
+
 function grappleAnalVore(attacker) {
   return {
     name: "Anal Vore",
@@ -332,7 +354,7 @@ function devourPlayer(attacker) {
     ],
     attackPlayer: function(defender) {
       changeMode("eaten");
-      return ["The voracious " + attacker.description() + " pins you down and devours you in seconds."];
+      return ["The voracious " + attacker.description() + " pins you down, his slimy maw spreading wide and engulfing your upper body with ease. He swallows and shoves you deeper, cramming your succulent frame into churning, crushing depths in seconds. A lazy, drawn-out belch escapes his gullet, his hunger briefly sated...and your existence now in inescapable peril."];
     },
     priority: 1,
   };
diff --git a/customs.js b/customs.js
index 0b4c6f4..2f77066 100644
--- a/customs.js
+++ b/customs.js
@@ -208,3 +208,32 @@ function GetaDialog() {
     this.addChoice("Leave him be", nodeIgnore);
   }
 }
+
+/* TRANCE */
+
+function Trance() {
+  Creature.call(this, "Trance", 20, 15, 20);
+
+  this.hasName = true;
+
+  this.description = function() { return "Trance"; };
+
+  this.attacks.push(new punchAttack(this));
+
+  this.attacks.push(new grapple(this));
+  this.attacks.push(new grappleDevour(this));
+
+  this.attacks.push(new grappledDevour(this));
+
+  this.backupAttack = new pass(this);
+
+  this.digests = [];
+
+  this.digests.push(new digestPlayerStomach(this,50));
+  this.struggles = [];
+
+  this.struggles.push(new struggle(this));
+
+  this.startCombat = function() { return ["You yelp and turn around as hot breath spills over your shoulder. A massive sergal has crept up on you...and he looks hungry"]; };
+  this.digestFinish = function() { return ["The sergal's crushing guts reduce you to a pool of chyme..."]; };
+}
diff --git a/feast.js b/feast.js
index 3fdfef5..7986846 100644
--- a/feast.js
+++ b/feast.js
@@ -391,7 +391,7 @@ function respawn(respawnRoom) {
 function startCombat(opponent) {
   currentFoe = opponent;
   changeMode("combat");
-  update(["Oh shit it's " + opponent.description("a")]);
+  update(opponent.startCombat());
 }
 
 function attackClicked(index) {
@@ -446,7 +446,7 @@ function struggleClicked(index) {
     update([digest.digest(player)]);
 
     if (player.health <= -100) {
-      update(["You digest in the depths of " + currentFoe.description("the")]);
+      update(currentFoe.finishDigest());
       respawn(respawnRoom);
     }
   }
diff --git a/objects.js b/objects.js
index 1446969..7c100a7 100644
--- a/objects.js
+++ b/objects.js
@@ -138,7 +138,7 @@ function WildernessExplore(natureTrail) {
       if (outcome < 0.25) {
         moveToByName("Nature Trail", "You find your way back");
       } else if (outcome < 0.5) {
-        startCombat(new Anthro());
+        startCombat(new Trance());
       } else {
         update(["You wander around for a bit, but haven't found anything."]);
       }
diff --git a/vore.js b/vore.js
index f1fc282..060f513 100644
--- a/vore.js
+++ b/vore.js
@@ -46,6 +46,12 @@ function Creature(name = "Creature", str=10, dex=10, con=10) {
   };
 
   this.cash = Math.floor(Math.random() * 10 + 5);
+
+  this.text = {};
+
+  this.startCombat = function() { return [this.description("A") + " appears. It's a fight!"]; };
+
+  this.finishDigest = function() { return [this.description("The") + " digests you..."]; };
 }
 
 function Player(name = "Player") {