{"id":1315,"date":"2026-09-01T16:39:00","date_gmt":"2026-09-01T20:39:00","guid":{"rendered":"https:\/\/miniquasar.com\/?post_type=product&#038;p=1315"},"modified":"2026-09-15T05:34:06","modified_gmt":"2026-09-15T09:34:06","slug":"little-john","status":"publish","type":"product","link":"https:\/\/miniquasar.com\/us\/product\/little-john\/","title":{"rendered":"Little John \u2013 Bridge Troll"},"content":{"rendered":"<div class=\"tmq-below\">\n<div class=\"tmq-story\">\n<section>\n\t      <span class=\"label\">The full story<\/span><\/p>\n<h2>Little John \u00e2\u20ac\u201c Bridge Troll<\/h2>\n<p>Despite his name, Little John is actually quite large in person. Little John is a troll whose vocation is one born from necessity, rather than malice. His previous attempts to extort goats have been unsuccessful, having devoured them instead. He now relies on extorting wealthy merchants and travellers alike, hoping that they may pay his tolls, so he may later purchase rolls for eating, owing to the fact that he has consumed all goats in the area.<\/p>\n<p>Little John has trolled the Bridge to Avalon for tolls for as long as his troll memory lets him remember. He is its keeper; why he is unsure. No malice is held towards those who attempt to cross, for his post is his job, supposedly. Tolls he collects from those who walk the land, and in exchange for the tolls, Little John exchanges them for rolls. Where and how, is also a mystery. Should he fail to collect tolls, he is instead forced to devour those wishing to cross, in lieu of devouring rolls. Such was the fate of the first three goats who tried to make their way across, citing the greener pastures across the bridge. When the troll realised he had been duped by the three goats, he abandoned his post and instead consumed their flesh, though it was repugnant and raw. A far cry from the warm dough he loved.<\/p>\n<p>Other animals now fear to cross the bridge, and most commonly he halts merchants and travellers. Those who cannot pay are devoured. Those who do pay enjoy a hearty handshake from the troll who sends them on their way, reminding them that the toll only covers one way. This has been his way of life for as long as he can remember, and his simple mind would not wish for anything else.<\/p>\n<\/section>\n<div class=\"tmq-reveal-head\"><span class=\"kicker\">The set<\/span><\/p>\n<p>The Tales Grimm is a campaign set of Grimmvale miniatures. Order the full lineup, or any five, and the digital campaign bundle comes with them.<\/p>\n<\/div>\n<figure class=\"tmq-reveal\"><a class=\"tmq-reveal-card\" href=\"https:\/\/miniquasar.com\/campaigns\/the-tales-grimm\/\"><span class=\"tmq-reveal-frame\"><img fetchpriority=\"high\" decoding=\"async\" class=\"tmq-reveal-a\" loading=\"eager\" width=\"420\" height=\"420\" src=\"https:\/\/miniquasar.com\/wp-content\/uploads\/2026\/09\/grimm-release-tmq.png\" alt=\"The Tales Grimm set\"><img decoding=\"async\" class=\"tmq-reveal-b\" loading=\"eager\" width=\"420\" height=\"420\" src=\"https:\/\/miniquasar.com\/wp-content\/uploads\/2026\/09\/grimm-set-minis.jpg\" alt=\"The Tales Grimm miniatures\"><\/span><\/a><\/figure>\n<div class=\"tmq-reveal-head\"><span class=\"kicker\">The campaign<\/span><\/p>\n<p>A full monthly set from Grimmvale. The sculpts work in any game. Order the full lineup, or any five miniatures, and the digital campaign bundle comes with them.<\/p>\n<\/div>\n<figure class=\"tmq-reveal\"><a class=\"tmq-reveal-card\" href=\"https:\/\/miniquasar.com\/campaigns\/the-tales-grimm\/\"><span class=\"tmq-reveal-frame\"><img decoding=\"async\" class=\"tmq-reveal-a\" loading=\"eager\" width=\"420\" height=\"420\" src=\"https:\/\/miniquasar.com\/wp-content\/uploads\/2026\/09\/campaign-grimm-cover.png\" alt=\"The Tales Grimm campaign\"><img decoding=\"async\" class=\"tmq-reveal-b\" loading=\"eager\" width=\"420\" height=\"420\" src=\"https:\/\/miniquasar.com\/wp-content\/uploads\/2026\/09\/grimm-open-book.png\" alt=\"The Tales Grimm campaign book\"><\/span><\/a><\/figure>\n<\/p><\/div>\n<aside class=\"tmq-details\">\n\t    <span class=\"label\">Details<\/span><\/p>\n<h3>Painting<\/h3>\n<p>We specialize in custom painted miniatures, so if you are interested in painted minis, please send us a message and we will arrange that for you. All miniatures sold are unpainted, unless otherwise specified. If you would like us to add free matte black primer to the prints, you can let us know, and they&#8217;ll be ready to paint right out of the box!<\/p>\n<h3>Shipping<\/h3>\n<p>Our models are shipped assembled if they are not too delicate, but are usually separated from the base. Wings and some other parts may also be detached and need to be put together, especially for larger models. To put the pieces together, you could use epoxy putty, super glue, or any strong glue that works for plastics. This is to ensure that none of the delicate pieces break or get damaged during shipping. If you really need pieces glued together, please let us know and we will do our best to accommodate.<\/p>\n<h3>Free Miniature<\/h3>\n<p>Get a free miniature with your order. No requirements, every order gets one. It will be a random character from our store. If you order multiple minis, you may even get more than one for free! Enjoy.<\/p>\n<h3>Model Scale<\/h3>\n<p>Normal-sized miniatures come in two sizes: 32mm and 75mm, which is the height of the humanoid body, so with the base and other accessories like hats, they will end up being a little taller. 32mm is the standard size if you are playing D&amp;D on a physical battle map.<\/p>\n<p>Larger miniatures are measured by the diameter of their base. Large-sized miniatures usually have a 50mm base, huge-sized ones have a 75mm base, gargantuan ones have a 100-120mm base. For specific measurements on any model, please contact us and we&#8217;ll be happy to give you the exact numbers.<\/p>\n<h3>Creation of Miniatures<\/h3>\n<p>These models are made by the fantastic people at DM Stash, and they make incredible models, so please check them out. We are officially licensed to print and sell their models to you, so you can enjoy them too! We print them with an Elegoo Saturn 4 Ultra resin printer with 16K resolution (the highest quality available). They are printed using Elegoo Standard 3.0 Vanilla coloured resin, an expensive resin that ensures models are strong without compromising on the detail. The supports are cut off, the model is sanded if needed, and inspected to ensure perfection. The model is washed off with pure alcohol, then cured inside an Elegoo ultcuring enclosure, and prepared for printing.<\/p>\n<\/aside><\/div>\n<p>\t<script>\n\tjQuery(function ($) {\n\t  var $sum = $(\"div.product .summary\");\n\t  function tmqMoney(prices) {\n\t    var raw, minor, n, prefix;\n\t    if (!prices) {\n\t      return \"\";\n\t    }\n\t    raw = prices.price;\n\t    minor = prices.currency_minor_unit;\n\t    if (typeof minor === \"undefined\") {\n\t      minor = 2;\n\t    }\n\t    n = Number(raw);\n\t    if (isNaN(n)) {\n\t      return \"\";\n\t    }\n\t    prefix = prices.currency_prefix;\n\t    if (!prefix) {\n\t      prefix = \"$\";\n\t    }\n\t    return prefix + (n \/ Math.pow(10, minor)).toFixed(2);\n\t  }\n\t  function tmqVarName(v) {\n\t    var i, a, attrs, text, idx;\n\t    attrs = v.attributes;\n\t    if (attrs) {\n\t      if (attrs.length) {\n\t        for (i = 0; i !== attrs.length; i++) {\n\t          a = attrs[i];\n\t          if (a.value) {\n\t            return a.value;\n\t          }\n\t          if (a.option) {\n\t            return a.option;\n\t          }\n\t        }\n\t      }\n\t    }\n\t    text = v.variation || \"\";\n\t    idx = text.lastIndexOf(\": \");\n\t    if (idx !== -1) {\n\t      return text.substring(idx + 2);\n\t    }\n\t    if (text) {\n\t      return text;\n\t    }\n\t    return \"\";\n\t  }\n\t  function tmqBlob(im) {\n\t    return ((im.name || \"\") + \" \" + (im.src || \"\") + \" \" + (im.thumbnail || \"\") + \" \" + (im.alt || \"\")).toLowerCase();\n\t  }\n\t  function tmqIsGuide(im) {\n\t    var s = tmqBlob(im);\n\t    if (s.indexOf(\"size-guide\") !== -1) {\n\t      return true;\n\t    }\n\t    if (s.indexOf(\"size_guide\") !== -1) {\n\t      return true;\n\t    }\n\t    if (s.indexOf(\"size guide\") !== -1) {\n\t      return true;\n\t    }\n\t    return false;\n\t  }\n\t  function tmqIsPack(im) {\n\t    var s = tmqBlob(im);\n\t    if (s.indexOf(\"pack-set\") !== -1) {\n\t      return true;\n\t    }\n\t    if (s.indexOf(\"pack_set\") !== -1) {\n\t      return true;\n\t    }\n\t    return false;\n\t  }\n\t  function tmqPickThumbs(imgs) {\n\t    var i, im, others, show;\n\t    others = [];\n\t    for (i = 0; i !== imgs.length; i++) {\n\t      im = imgs[i];\n\t      if (tmqIsGuide(im)) {\n\t        continue;\n\t      }\n\t      if (tmqIsPack(im)) {\n\t        continue;\n\t      }\n\t      others.push(im);\n\t    }\n\t    if (others.length > 4) {\n\t      return others;\n\t    }\n\t    show = [];\n\t    for (i = 0; i !== imgs.length; i++) {\n\t      im = imgs[i];\n\t      if (tmqIsGuide(im)) {\n\t        continue;\n\t      }\n\t      if (imgs.length > 6) {\n\t        if (i === 6) {\n\t          continue;\n\t        }\n\t      }\n\t      show.push(im);\n\t    }\n\t    return show;\n\t  }\n\t  function tmqRenderSizes($p, vars) {\n\t    var i, v, label, price, $rows, $row, $price, $link, list;\n\t    if (!vars) {\n\t      return;\n\t    }\n\t    if (!vars.length) {\n\t      return;\n\t    }\n\t    if ($p.find(\".tmq-size-rows\").length) {\n\t      return;\n\t    }\n\t    list = vars.slice().sort(function (a, b) {\n\t      var na = tmqVarName(a);\n\t      var nb = tmqVarName(b);\n\t      if (nb > na) {\n\t        return -1;\n\t      }\n\t      if (na > nb) {\n\t        return 1;\n\t      }\n\t      return 0;\n\t    });\n\t    $rows = $(document.createElement(\"div\")).addClass(\"tmq-size-rows\");\n\t    for (i = 0; i !== list.length; i++) {\n\t      v = list[i];\n\t      label = tmqVarName(v);\n\t      price = tmqMoney(v.prices);\n\t      if (!label) {\n\t        if (!price) {\n\t          continue;\n\t        }\n\t      }\n\t      $row = $(document.createElement(\"div\")).addClass(\"tmq-size-row\");\n\t      if (label) {\n\t        $row.append($(document.createElement(\"span\")).addClass(\"tmq-size-label\").text(label));\n\t      }\n\t      if (price) {\n\t        $row.append(document.createTextNode(\" \"));\n\t        $row.append($(document.createElement(\"span\")).addClass(\"tmq-size-amt\").text(price));\n\t      }\n\t      $rows.append($row);\n\t    }\n\t    if (!$rows.children().length) {\n\t      return;\n\t    }\n\t    $price = $p.find(\".price\").first();\n\t    $link = $p.find(\"a.woocommerce-LoopProduct-link\").first();\n\t    if ($price.length) {\n\t      $price.addClass(\"tmq-price-hide\");\n\t      $price.hide();\n\t      $price.after($rows);\n\t    } else {\n\t      if ($link.length) {\n\t        $link.after($rows);\n\t      } else {\n\t        $p.append($rows);\n\t      }\n\t    }\n\t  }\n\t  function tmqRenderThumbs($p, imgs) {\n\t    var i, im, show, $img, $photo, $thumbs, $t, thumb, full, origSrc, origSrcset;\n\t    if (!imgs) {\n\t      return;\n\t    }\n\t    if (!imgs.length) {\n\t      return;\n\t    }\n\t    if ($p.find(\".tmq-card-thumbs\").length) {\n\t      return;\n\t    }\n\t    show = tmqPickThumbs(imgs);\n\t    if (!show.length) {\n\t      return;\n\t    }\n\t    $img = $p.find(\"img\").first();\n\t    if (!$img.length) {\n\t      return;\n\t    }\n\t    origSrc = $img.attr(\"src\");\n\t    origSrcset = $img.attr(\"srcset\") || \"\";\n\t    $p.data(\"tmq-orig-src\", origSrc);\n\t    $p.data(\"tmq-orig-srcset\", origSrcset);\n\t    if (!$img.parent().hasClass(\"tmq-card-photo\")) {\n\t      $img.wrap($(document.createElement(\"span\")).addClass(\"tmq-card-photo\"));\n\t    }\n\t    $photo = $img.parent();\n\t    $thumbs = $(document.createElement(\"span\")).addClass(\"tmq-card-thumbs\");\n\t    for (i = 0; i !== show.length; i++) {\n\t      im = show[i];\n\t      thumb = im.thumbnail;\n\t      if (!thumb) {\n\t        thumb = im.src;\n\t      }\n\t      full = im.src;\n\t      if (!full) {\n\t        full = thumb;\n\t      }\n\t      if (!thumb) {\n\t        continue;\n\t      }\n\t      $t = $(document.createElement(\"img\"));\n\t      $t.attr(\"src\", thumb);\n\t      $t.attr(\"data-full\", full);\n\t      $t.attr(\"alt\", im.alt || im.name || \"\");\n\t      $thumbs.append($t);\n\t    }\n\t    $photo.append($thumbs);\n\t    $thumbs.on(\"click\", \"img\", function (e) {\n\t      var next = $(this).attr(\"data-full\");\n\t      e.preventDefault();\n\t      e.stopPropagation();\n\t      if (next) {\n\t        $img.attr(\"src\", next);\n\t        $img.removeAttr(\"srcset\");\n\t        $img.removeAttr(\"sizes\");\n\t      }\n\t      return false;\n\t    });\n\t    $p.on(\"mouseleave\", function () {\n\t      var src = $p.data(\"tmq-orig-src\");\n\t      var srcset = $p.data(\"tmq-orig-srcset\");\n\t      if (src) {\n\t        $img.attr(\"src\", src);\n\t      }\n\t      if (srcset) {\n\t        $img.attr(\"srcset\", srcset);\n\t      }\n\t    });\n\t  }\n\t  function tmqEnhanceCard($p) {\n\t    var cls, m, id;\n\t    if ($p.data(\"tmq-ready\")) {\n\t      return;\n\t    }\n\t    $p.data(\"tmq-ready\", 1);\n\t    cls = $p.attr(\"class\") || \"\";\n\t    m = cls.match(\/post-(\\d+)\/);\n\t    if (!m) {\n\t      return;\n\t    }\n\t    id = m[1];\n\t    $.getJSON(\"https:\/\/miniquasar.com\/wp-json\/wc\/store\/v1\/products\/\" + id, function (data) {\n\t      var vars;\n\t      if (!data) {\n\t        return;\n\t      }\n\t      tmqRenderThumbs($p, data.images || []);\n\t      vars = data.variations;\n\t      if (!vars) {\n\t        return;\n\t      }\n\t      if (!vars.length) {\n\t        return;\n\t      }\n\t      if (vars[0].prices) {\n\t        tmqRenderSizes($p, vars);\n\t        return;\n\t      }\n\t      $.getJSON(\n\t        \"https:\/\/miniquasar.com\/wp-json\/wc\/store\/v1\/products\",\n\t        { type: \"variation\", parent: id },\n\t        function (list) {\n\t          tmqRenderSizes($p, list);\n\t        }\n\t      );\n\t    });\n\t  }\n\t  var $form = $(\"form.variations_form\");\n\t  if ($form.length) {\n\t    var variations = $form.data(\"product_variations\");\n\t    if (!variations) {\n\t      variations = [];\n\t    }\n\t    $form.find(\"select\").each(function () {\n\t      var $sel = $(this);\n\t      var $box, current, usable;\n\t      usable = $sel.find(\"option[value]\").filter(function () {\n\t        return this.value;\n\t      });\n\t      if (!(usable.length >= 1)) {\n\t        return;\n\t      }\n\t      $sel.addClass(\"tmq-size-native\");\n\t      $box = $(document.createElement(\"div\")).addClass(\"tmq-size-picks\").attr(\"role\", \"radiogroup\").attr(\"aria-label\", \"Size\");\n\t      $sel.find(\"option\").each(function () {\n\t        var val = this.value;\n\t        var label, price, priceText, $btn, i, a, k;\n\t        if (!val) {\n\t          return;\n\t        }\n\t        label = (this.text || val).replace(\/^Choose an option\/i, \"\").trim();\n\t        price = \"\";\n\t        for (i = 0; i !== variations.length; i++) {\n\t          a = variations[i].attributes || {};\n\t          for (k in a) {\n\t            if (a[k] === val) {\n\t              if (variations[i].display_price != null) {\n\t                price = variations[i].display_price;\n\t              }\n\t            }\n\t          }\n\t        }\n\t        priceText = \"\";\n\t        if (price !== \"\") {\n\t          priceText = \"$\" + Number(price).toFixed(2);\n\t        }\n\t        $btn = $(document.createElement(\"button\")).attr(\"type\", \"button\").addClass(\"tmq-size-pick\").attr(\"role\", \"radio\").attr(\"aria-checked\", \"false\");\n\t        $btn.attr(\"data-value\", val);\n\t        $btn.append($(document.createElement(\"span\")).addClass(\"tmq-size-name\").text(label));\n\t        if (priceText) {\n\t          $btn.append($(document.createElement(\"span\")).addClass(\"tmq-size-price\").text(priceText));\n\t        }\n\t        $btn.on(\"click\", function () {\n\t          $box.find(\".tmq-size-pick\").removeClass(\"is-on\").attr(\"aria-checked\", \"false\");\n\t          $(this).addClass(\"is-on\").attr(\"aria-checked\", \"true\");\n\t          $sel.val(val).trigger(\"change\");\n\t        });\n\t        $box.append($btn);\n\t      });\n\t      $sel.after($box);\n\t      current = $sel.val();\n\t      if (current) {\n\t        $box.find('[data-value=\"' + current + '\"]').addClass(\"is-on\").attr(\"aria-checked\", \"true\");\n\t      } else {\n\t        $box.find(\".tmq-size-pick\").first().trigger(\"click\");\n\t      }\n\t    });\n\t  }\n\t  var paintHref = \"https:\/\/miniquasar.com\/contact\/\";\n\t  var paintHtml = $(document.createElement(\"a\")).addClass(\"tmq-paint-link\").attr(\"href\", paintHref).text(\"Inquire about Painted Miniatures\");\n\t  var $after;\n\t  if ($sum.length) {\n\t    if (!$sum.find(\".tmq-paint-link\").length) {\n\t      $after = $sum.find(\".tmq-size-picks\").first();\n\t      if ($after.length) {\n\t        $after.after(paintHtml);\n\t      } else {\n\t        $sum.find(\"form.cart\").before(paintHtml);\n\t      }\n\t    }\n\t  }\n\t});\n\t<\/script><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Unpainted 16K resin miniature. Large 50mm base. Made to order in Canada.<\/p>\n<p class=\"tmq-chips\"><span>Monster<\/span><span>Giant<\/span><span>Large<\/span><\/p>\n<div class=\"tmq-set\"><span class=\"label\">Campaign set<\/span><\/p>\n<h3>The Tales Grimm<\/h3>\n<p>This miniature belongs to The Tales Grimm.<\/p>\n<p><a class=\"tmq-set-link\" href=\"https:\/\/miniquasar.com\/campaigns\/the-tales-grimm\/\">View the set<\/a><\/div>\n","protected":false},"featured_media":1318,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_kad_post_transparent":"default","_kad_post_title":"","_kad_post_layout":"default","_kad_post_sidebar_id":"","_kad_post_content_style":"default","_kad_post_vertical_padding":"default","_kad_post_feature":"","_kad_post_feature_position":"","_kad_post_header":false,"_kad_post_footer":false,"_kad_post_classname":""},"product_brand":[],"product_cat":[24,90],"product_tag":[],"class_list":["post-1315","product","type-product","status-publish","has-post-thumbnail","product_cat-individual-minis","product_cat-the-tales-grimm","pa_gender-other","pa_mini-type-monster","pa_race-giant","pa_set-the-tales-grimm","pa_size-large-50mm","pa_tabletop-size-large","first","instock","taxable","shipping-taxable","purchasable","product-type-variable","has-default-attributes","entry","content-bg","loop-entry"],"_links":{"self":[{"href":"https:\/\/miniquasar.com\/us\/wp-json\/wp\/v2\/product\/1315","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/miniquasar.com\/us\/wp-json\/wp\/v2\/product"}],"about":[{"href":"https:\/\/miniquasar.com\/us\/wp-json\/wp\/v2\/types\/product"}],"replies":[{"embeddable":true,"href":"https:\/\/miniquasar.com\/us\/wp-json\/wp\/v2\/comments?post=1315"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/miniquasar.com\/us\/wp-json\/wp\/v2\/media\/1318"}],"wp:attachment":[{"href":"https:\/\/miniquasar.com\/us\/wp-json\/wp\/v2\/media?parent=1315"}],"wp:term":[{"taxonomy":"product_brand","embeddable":true,"href":"https:\/\/miniquasar.com\/us\/wp-json\/wp\/v2\/product_brand?post=1315"},{"taxonomy":"product_cat","embeddable":true,"href":"https:\/\/miniquasar.com\/us\/wp-json\/wp\/v2\/product_cat?post=1315"},{"taxonomy":"product_tag","embeddable":true,"href":"https:\/\/miniquasar.com\/us\/wp-json\/wp\/v2\/product_tag?post=1315"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}