diff --git a/frontend/package-lock.json b/frontend/package-lock.json
index 1c7eb362b0ae683d6f5646d450ad579a522b98c1..0c7da4d35dcb6a7ff428bbba1ee4822e13478a69 100644
--- a/frontend/package-lock.json
+++ b/frontend/package-lock.json
@@ -10,6 +10,7 @@
       "license": "MIT",
       "dependencies": {
         "axios": "^0.26.0",
+        "damerau-levenshtein": "^1.0.8",
         "phaser": "^3.55.2"
       },
       "devDependencies": {
@@ -5090,6 +5091,11 @@
       "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==",
       "dev": true
     },
+    "node_modules/damerau-levenshtein": {
+      "version": "1.0.8",
+      "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz",
+      "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA=="
+    },
     "node_modules/dashdash": {
       "version": "1.14.1",
       "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
@@ -18776,6 +18782,11 @@
         }
       }
     },
+    "damerau-levenshtein": {
+      "version": "1.0.8",
+      "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz",
+      "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA=="
+    },
     "dashdash": {
       "version": "1.14.1",
       "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
diff --git a/frontend/package.json b/frontend/package.json
index 52c559c5799b5a63f31059e041d758a497b2fc0a..4c280c396a51cf7baa5d9f93d8ad54239ea7625a 100644
--- a/frontend/package.json
+++ b/frontend/package.json
@@ -18,6 +18,7 @@
   },
   "dependencies": {
     "axios": "^0.26.0",
+    "damerau-levenshtein": "^1.0.8",
     "phaser": "^3.55.2"
   },
   "devDependencies": {
diff --git a/frontend/src/js/enemy.js b/frontend/src/js/enemy.js
index 468c795a06dce189ece8c59c23a73308d6621f1f..7fe3af9f3f8dd6f21cf40a7249f4fc5c250c23da 100644
--- a/frontend/src/js/enemy.js
+++ b/frontend/src/js/enemy.js
@@ -2,7 +2,7 @@ let enemies = ["bear", "wolf", "deer", "boar"];
 let enemiesSpeed = 50000;
 
 class enemy {
-  refData = null;
+  word = null;
 
   constructor(scene) {
     this.scene = scene;
@@ -19,7 +19,7 @@ class enemy {
       scale = 3;
     }
 
-    let flag = this.scene.add.sprite(400, 300, `WORD-${this.refData.id}`);
+    let flag = this.scene.add.sprite(400, 300, `WORD-${this.word.id}`);
     let enemy = this.scene.physics.add
       .sprite(-100, this.scene.cameras.main.height - 100, randomEnemyType)
       .setScale(scale)
diff --git a/frontend/src/js/fight_scene.js b/frontend/src/js/fight_scene.js
index 6cf0be5e559e78a9ecee10ec25fb17975b67b594..a16cd0c75230604a6ed72654c30409030c2166f3 100644
--- a/frontend/src/js/fight_scene.js
+++ b/frontend/src/js/fight_scene.js
@@ -3,6 +3,8 @@ import Phaser from "phaser";
 import enemy from "./enemy";
 import backend from "./backend";
 
+import levenshtein from "damerau-levenshtein";
+
 const fightScene = new Phaser.Scene("fight");
 
 let onscreenEnemies = [];
@@ -292,21 +294,33 @@ function shootSpear(enemy, hit, scene = fightScene) {
 
 function submitTranscription(transcription) {
   // TODO: guess the enemy if any
-  const enemy = window.onscreenEnemies[0].sprite;
+  let similarity = 0;
+  let match = null;
+  window.onscreenEnemies.forEach((foe) => {
+    const s = levenshtein(
+      transcription.toLowerCase(),
+      foe.word.ocr_transcript.toLowerCase(),
+    ).similarity;
+    if (s <= similarity) return;
+    similarity = s;
+    match = foe;
+  });
 
-  let hit = true;
-  enemy.disableInteractive();
+  console.log(similarity, match.word.ocr_transcript);
+
+  // TODO: we can have near misses depending on similarity!
+  let hit = similarity >= 0.9;
+  let enemy = match;
+  enemy.sprite.disableInteractive();
   // here invoke image
-  enemy.movement.pause();
-  setAnimation(enemy, enemy.typeName + "_idle");
+  enemy.sprite.movement.pause();
+  setAnimation(enemy.sprite, enemy.sprite.typeName + "_idle");
 
   // let beginTime = new Date().getTime();
   // let endTime = new Date().getTime();
   // let deltaTime = endTime - beginTime;
 
-  hit = transcription == "fuffa";
-
-  shootSpear(enemy, hit);
+  shootSpear(enemy.sprite, hit);
 }
 
 function gameStart(scene) {
@@ -321,7 +335,7 @@ function dispatchEnemy(scene) {
   window.onscreenEnemies.push(e);
 
   backend.post("GetImage", {}).then(function (response) {
-    e.refData = response.data;
+    e.word = response.data;
 
     scene.textures.addBase64(`WORD-${response.data.id}`, response.data.image);
     scene.textures.once(