Balancing Games2020-09-29T15:24:27+00:00https://balancing.games/William Kavanaghcurrently writing2020-09-29T00:00:00+00:00https://balancing.games//2020/09/29/in-progress<p>I have several ideas I’m currently working on all building up to diving into the player data from RPGLite, <a href="rpglite.app">our little game</a>. Sorry it’s taking me a while. I want to talk about cyclical balance (everyone is better than atleast one person and worse than at least one) and orthogonal unit differentiation (everyone doesn’t something different) before I describe the thinking behind the design for RPGLite and what we actually saw happen.</p>
Orthogonal2020-09-28T00:00:00+00:00https://balancing.games//2020/09/28/orthogonal<p>Orthogonal Unit Differentiation or “making sure each piece of game material is unique to all others in some way” is tricky to get right. Without it you run the risk of <strong>strictly dominanted</strong> material, that is some material <em>x</em> which is worse in every way to some other material <em>y</em> . Here’s an illustrative example, let’s design <strong>Very Good Racing Game</strong> as a simple car-racing game. Let’s limit the game material to <strong>cars</strong> and <strong>tracks</strong>. Tracks are represented by simple 2d designs, <strong>cars</strong> have <em>attributes</em> which define them further, let’s use <strong>top speed</strong>, <strong>acceleration</strong> and <strong>handling</strong>, each with a value from 1 to 5. Here are some initial designs.</p>
<p><img src="../public/images/orthog/cars/green.png" alt="green" class="img-responsive right" />
<img src="../public/images/orthog/cars/red.png" alt="red" class="img-responsive left" />
<img src="../public/images/orthog/cars/blue.png" alt="blue" class="img-responsive center" />
<em>You may call them terrible drawings, I call it rapid prototyping</em></p>
<p>Now we have 3 cars each suited to different types of a track. <span style="color:green">Green</span> is best for sharp turns, <span style="color:red">Red</span> is best on long straights and <span style="color:blue">Blue</span> is best for shallow bends or short straights. If a track is designed with all 3 in mind then each will excel at different times, done correctly this will <em>enable the player to make impactful decisions</em> – something all development should strive for.</p>
<p><img src="../public/images/orthog/cars/track_anim.gif" alt="track" />
<em>A simple track</em></p>
<p>In this simple example with only 3 attributes each car can be easily visualised using radars, this helps us to identify the real villain of the piece, <strong>strictly dominated material</strong>. Strictly dominated material would be any material that is entirely contained within another in a radar plot. So let’s add another well vehicle for people to use, a bike.</p>
<p><img src="../public/images/orthog/cars/first-radar.png" alt="radar" />
<em>Basic radar plot</em></p>
<p>One easy way to <em>balance</em> the cars would be to set a total value for all attributes, say 8, and have one car for every possible combination with each attribute having atleast 1. This gives 18 unique combinations of attributes summing to 8</p>
RPGLite2020-09-05T00:00:00+00:00https://balancing.games//2020/09/05/RPGLite<p>My supervisor, <a href="https://www.gla.ac.uk/schools/computing/staff/alicemiller/">Professor Alice Miller</a>, suggested back in September of 2019 that the solution to proving the real-world application of my research was to develop a game myself, balance it with the <strong>clever science methods</strong> I had devised and get people to play it. A sensible suggestion given the alternatives were to either have no proven impact for my research or try and negotiate with a ‘real game company’ to have them let us use their data, map our work onto that game, and then critique the state of balance of their game. Only problem being I had no idea how to develop, promote or publish a game. A year later, having released <a href="rpglite.app">RPGLite</a> on mobile stores, I still don’t.</p>
<blockquote>
<p>“Develop and release a mobile game? Sure I’ll give it a go I suppose, doubt it will take longer than a few weeks. wouldn’t want it to take more though, I need to finish researching so I have stuff to put in the thesis.” – An idiot, September 2019.</p>
</blockquote>
Symmetry2020-09-04T00:00:00+00:00https://balancing.games//2020/09/04/symmetry<p>Say you and I are flipping a coin, heads you win tails I win. This is a symmetric game. If you and I are playing a 2d fighting game, you as a big robot, me as a half-tiger person, each with different moves available to us, then clearly the game is asymmetric.</p>
<p><img src="../public/images/symmetry/tekken_jack_king.jpg" alt="Tekken7" class="img-responsive" />
<em>Tekken 7, PS4, XboxOne, PC, Arcade. 2015.</em></p>
<p>Many traditional board games are symmetric, consider Chess or Draughts. All players have access to the same materials, can find themselves in the same state and have the same actions available to them from those states. A symmetric game where players act simultaneously is balanced by default. With a turn-based game you have to overcome <strong>first-move bias</strong>.</p>
<h3 id="chess-board-game-500-ad-hán-xin">Chess, board game. <em>~500 AD, Hán Xin</em></h3>
<p>Give me a moment to talk about Chess. In Chess, White goes first and, according to many professional players and Chess theorists, has an advantage. Indeed White wins more often than Black historically (the records available date back to 1851). Thrillingly, a large proportion of Chess matches at the highest level end in draws, but I’m a football fan, so I suppose I’m desensitised to that. White wins roughly 40% of games, whereas Black wins about 30%.</p>
<p>But not all players believe White’s advantage to be so strong. A nineteenth century German Chess article described the phonetically beautiful concept of <em>“Zugzwang”</em>, the compulsion to move. The use of the term has changed over the last century, but is often used to describe a position from which neither player benefits from making a move, therefore whoevers turn it is, is at a disadvantage. Scottish Chess player and Philosopher (naturally) Jonathan Rowson introduced the term <em>“Zugzwang Lite”</em> to describe a situation where both players want to react to their opponents move and in this instance White’s <em>extra</em> move is infact a burden.</p>
<p>So maybe first-move advantage isn’t such a problem in Chess? Of course the whole thing is easily solved by playing a series of games and swapping sides, or flipping a coin to decide who plays what. Considered before the coin flip, the game is symmetric.</p>
<p>~~</p>
<p>Tekken isn’t asymmetric of course, I chose it as an example earlier so I could use pictures of King (the Tiger-headed man on the right of the image above). Matches in Tekken are preceeded by <strong>Character Selection</strong>. Here players choose one, or several members from the cast of available fighters, often choosing distinct material from a shared pool. So even if King is more likely to beat Jack (the robot-looking man on the left), the game is balanced because either player could choose them. So that’s it then? Symmetric games are balanced, asymmetric games can include material selection beforehand from a shared pool to become symmetric, therefore all games can be balanced. Job Done. Let’s all just pack up and leave.</p>
<p>Except that’s a view that is empathetic to the players, but not the game material itself. What about poor old Jack doomed to lose to King more often than not? Letting down whatever poor idiot had the misfortune of choosing him? No I want to ensure about balance <strong>between material</strong>.</p>
<p>Here’s a stupid example. A two-player game where one player wins by flipping a coin ten times and rolling ten heads, should they fail their opponent wins, is a terrible game. But if the player who must attempt the flips is decided by a coin flip too, then the odds of either player winning are 50:50, the game is symmetric. Clearly it isn’t balanced.</p>
<p>I’ll write about how we can balance between material another time, for now I want to talk about some games which use their asymetry as a feature, and the attempts to balance the game regardless.</p>
<h3 id="diplomacy-board-game-1959-allan-calhamer">Diplomacy, board game. <em>1959</em>, Allan Calhamer</h3>
<p>Diplomacy takes seven players (don’t be fooled into trying to play with any fewer, it’s much worse) and sends them back to Europe in 1901. There is <a href="http://www.diplomacy-archive.com/resources/calhamer/invention.htm">a great bit of writing</a> by Calhamer himself on his motivations for developing the game and some of his inspirations. How it came from a 1945 article on postwar planning suggesting several <em>great power</em> of equivalent strength would be a good way of guarenteeing peace. Having played Diplomacy several times, I’m not so sure.</p>
<p><img src="../public/images/symmetry/diplomacy.jpg" alt="Diplomacy" class="img-responsive center" />
<em>Diplomacy, board game</em></p>
<p>Players control one of Great Britain, France, Germany, Italy, Austria, Russia or Turkey and push out to gobble up territory. One thing that stands out from the image alone is just how much of the board Russia takes up. This speaks to one of the common reasons assymetry arises in game design – the game is representing some real-world artifact. In the same vein, Russia begins with 4 <em>capitals</em> and 4 units, where-as all other players have only 3. An unfair advantage surely. Except, it isn’t. In tournament play Russia is no more dominant than any other nation. The general sentiment is that Russia starts at a disadvantage as others look at their extra unit and larger physical space on the map (something which has no bearing on the game) and judge them to be the early leaders, so are often ganged up on. The asymmetry in Diplomacy both fits with the game’s setting and provides impetus to the early game which can sometimes be frigid and slow.</p>
<p><em>“Everyone will give the same warning about Diplomacy, that it can lose you friends. Whilst that may be true, it’s hard to argue that it isn’t worth it.”</em></p>
<h3 id="rainbow-six-siege-ps4-xboxone-pc-2015-ubisoft-montreal">Rainbow Six: Siege, PS4, XboxOne, PC. 2015, Ubisoft Montreal.</h3>
<p>Two teams of five shoot it out over several objective-based rounds, taking it in turns to play as Defenders, boarding up doorways, reinforcing walls and protecting the all important <em>Biohazard Container</em>, and Attackers sending in drones to locate the objective and smashing through defenses to secure it. Each player plays a different <em>operator</em>, with different operators available to attackers and defenders. Each operator has unique abilities and different weapons available to them, specialising in different roles. Siege is not the first game to have two separate pools for character selection, but it is done particularly well and I’ve played it a lot so I’m comfortable talking about it.</p>
<p>One of the best things about Siege, to my mind, is the openness with which Ubisoft share their analytics, because it means I can use their data in all of my slides. They appear to base a lot of their insights into character viability on pick-rate, win-rate.</p>
<p><img src="../public/images/symmetry/siege-prwr.png" alt="Siege: pick-rate, win-rate" class="img-responsive" />
<em>Here’s Ubisoft struggling with the axis. Always nice to know the bigger children struggle with the simple stuff too</em></p>
<p>For the uninitiated, the image above shows us one half of the available operators in the game, the Defenders. The x-axis shows how often they are picked, with a line denoting what the expected value would be if they were picked evenly. The y-axis shows how often they win when picked, specifically how their presence affects the teams likelihood of winning. One would expect a simple pattern of f(x) = y, the more effective an operator is, the more often they are chosen. But that doesn’t account for the nuance of the characters themselves. In Siege one of the consistently best performing Attackers is Finka, a big Russian support character who helps her team by using nanobots to heal them, recover them when they’ve been downed and reduce their recoil. However, Finka is rarely picked, she has been in the top-left quadrant labeled <em>underpicked, too strong</em> in most recent seasons. What on earth is going on? The answer, I suspect, is that she isn’t as exciting to play. Her role is to make her allies excel, not to excel herself. So is she unbalanced? If she was, surely she would be being exploited by the community? These are the kind of game balancing questions I love.</p>
<p><img src="../public/images/symmetry/finka.jpg" alt="Siege: Finka" class="img-responsive" />
<em>Finka: “It’s alright, I don’t want to be picked anyway”</em></p>
<h3 id="root-board-game-2018-leder-games">Root, board game. 2018, Leder Games.</h3>
<p>Root is an undeniably beautiful 4-player board game which transposes a unique woodland theme onto a more classical war game. Players play as one of four groups each essentially playing their own game: ‘The Marquise de Cat’, cats who begin with control over much of the board; ‘The Eyrie Dynasties’, birds who start with minimal presence; ‘The Woodland Alliance’, rebels who seek to overthrow the cats, or; ‘The vagabond’, a lone protagonist who can join any side in completing their own secret quest. All players have different starting positions, different rules and different ways to get victory points. These systems designed around asymmetry are ambitious and, when they work, offer a thrilling experience full of satisfying “You can do what?!” moments that some players will love. Some.</p>
<p>The issue with systems like this is they are inevitably complex. In what is at its core a race to acquire victory points, players who don’t know the intricacies of playing as all factions can’t make informed decisions. It should be noted the Riverfolk expansion increases the player and faction size to 6. The other concern is how on earth you balance these games. Root is well thought of, at the time of writing it is the 32nd game of all time according to boardgamegeek.com. I quite like it too, but for the theme and the unique experience rather than the gameplay itself.</p>
<p><img src="../public/images/symmetry/root_figures.jpg" alt="Root" class="img-responsive" />
<em>Root, a work in progress</em></p>
<p>Root is one of a few board games which have been balanced after their release. This is clearly a bold move by the developers and one that sparked no small amount of controversy. Here is an excert from the developer’s FAQ <em>“When we play tested in the office we got to witness hundreds of games. Now that we are witnessing thousands of games we noticed certain patterns emerging and made some balance fixes.”</em> In a smaller setting patterns of play can emerge and a game can appear balanced when it isn’t. Anticipating how players will play your games is hugely difficult. You can now buy a relatively cheap ‘upgrade kit’ for early editions of the game which don’t feature the balance changes.</p>
<p>Given I write a blog called balance.games, you can assume I believe game balance to be fairly important. But I am not a professional game developer, so what do I know. <a href="https://boardgamegeek.com/boardgamedesigner/35585/cole-wehrle">Cole Wehrle</a> is, indeed he developed Root. Here is his take on Root’s balance:</p>
<blockquote>
<p><em>Speaking frankly, the core design of Root was not built for that kind of competitive balance. As far as I was concerned, the game lives in the imbalance between player positions. When one faction loses an important battle, that event has consequences that ripple through all of the player positions. Things can get downright weird. Which is good, because history is weird and I wanted players to feel that kind of discomfort.</em></p>
</blockquote>
<p>And this is a difficult concept to deal with at the end of the first post on a blog about balancing games. <strong>Sometimes imbalance is a game feature.</strong> Root is a good game. It also happens to be an imbalanced game.</p>
The Meta-game: What is it and where did it come from?2019-04-06T00:00:00+00:00https://balancing.games//2019/04/06/metagames-what-and-where<p>I spoke to one of the lecturers I work with and tried to explain what a meta-game is to him once.</p>
<blockquote>
<p>“It’s an abstraction of what ways of playing are popular, a sort of game within a game about what ways of playing are being used and how to best play against them. An ever evolving state of play where what’s popular is defined by what’s good against what was popular in the recent past”</p>
</blockquote>
<p>He was having none of it, to his mind this was neither meta, nor a game.</p>
What's Jekyll?2012-02-09T00:00:00+00:00https://balancing.games//whats-jekyll<p><a href="http://jekyllrb.com">Jekyll</a> is a static site generator, an open-source tool for creating simple yet powerful websites of all shapes and sizes. From <a href="https://github.com/mojombo/jekyll/blob/master/README.markdown">the project’s readme</a>:</p>
<blockquote>
<p>Jekyll is a simple, blog aware, static site generator. It takes a template directory […] and spits out a complete, static website suitable for serving with Apache or your favorite web server. This is also the engine behind GitHub Pages, which you can use to host your project’s page or blog right here from GitHub.</p>
</blockquote>
<p>It’s an immensely useful tool and one we encourage you to use here with Hyde.</p>
<p>Find out more by <a href="https://github.com/mojombo/jekyll">visiting the project on GitHub</a>.</p>
Introducing Hyde2012-02-08T00:00:00+00:00https://balancing.games//draft-introducing-hyde<p>Hyde is a brazen two-column <a href="http://jekyllrb.com">Jekyll</a> theme that pairs a prominent sidebar with uncomplicated content. It’s based on <a href="http://getpoole.com">Poole</a>, the Jekyll butler.</p>
<h3 id="built-on-poole">Built on Poole</h3>
<p>Poole is the Jekyll Butler, serving as an upstanding and effective foundation for Jekyll themes by <a href="https://twitter.com/mdo">@mdo</a>. Poole, and every theme built on it (like Hyde here) includes the following:</p>
<ul>
<li>Complete Jekyll setup included (layouts, config, <a href="/404">404</a>, <a href="/atom.xml">RSS feed</a>, posts, and <a href="/about">example page</a>)</li>
<li>Mobile friendly design and development</li>
<li>Easily scalable text and component sizing with <code class="language-plaintext highlighter-rouge">rem</code> units in the CSS</li>
<li>Support for a wide gamut of HTML elements</li>
<li>Related posts (time-based, because Jekyll) below each post</li>
<li>Syntax highlighting, courtesy Pygments (the Python-based code snippet highlighter)</li>
</ul>
<h3 id="hyde-features">Hyde features</h3>
<p>In addition to the features of Poole, Hyde adds the following:</p>
<ul>
<li>Sidebar includes support for textual modules and a dynamically generated navigation with active link support</li>
<li>Two orientations for content and sidebar, default (left sidebar) and <a href="https://github.com/poole/lanyon#reverse-layout">reverse</a> (right sidebar), available via <code class="language-plaintext highlighter-rouge"><body></code> classes</li>
<li><a href="https://github.com/poole/hyde#themes">Eight optional color schemes</a>, available via <code class="language-plaintext highlighter-rouge"><body></code> classes</li>
</ul>
<p><a href="https://github.com/poole/hyde#readme">Head to the readme</a> to learn more.</p>
<h3 id="browser-support">Browser support</h3>
<p>Hyde is by preference a forward-thinking project. In addition to the latest versions of Chrome, Safari (mobile and desktop), and Firefox, it is only compatible with Internet Explorer 9 and above.</p>
<h3 id="download">Download</h3>
<p>Hyde is developed on and hosted with GitHub. Head to the <a href="https://github.com/poole/hyde">GitHub repository</a> for downloads, bug reports, and features requests.</p>
<p>Thanks!</p>
Example content2012-02-07T00:00:00+00:00https://balancing.games//example-content<div class="message">
Howdy! This is an example blog post that shows several types of HTML content supported in this theme.
</div>
<p>Cum sociis natoque penatibus et magnis <a href="#">dis parturient montes</a>, nascetur ridiculus mus. <em>Aenean eu leo quam.</em> Pellentesque ornare sem lacinia quam venenatis vestibulum. Sed posuere consectetur est at lobortis. Cras mattis consectetur purus sit amet fermentum.</p>
<blockquote>
<p>Curabitur blandit tempus porttitor. Nullam quis risus eget urna mollis ornare vel eu leo. Nullam id dolor id nibh ultricies vehicula ut id elit.</p>
</blockquote>
<p>Etiam porta <strong>sem malesuada magna</strong> mollis euismod. Cras mattis consectetur purus sit amet fermentum. Aenean lacinia bibendum nulla sed consectetur.</p>
<h2 id="inline-html-elements">Inline HTML elements</h2>
<p>HTML defines a long list of available inline tags, a complete list of which can be found on the <a href="https://developer.mozilla.org/en-US/docs/Web/HTML/Element">Mozilla Developer Network</a>.</p>
<ul>
<li><strong>To bold text</strong>, use <code class="language-plaintext highlighter-rouge"><strong></code>.</li>
<li><em>To italicize text</em>, use <code class="language-plaintext highlighter-rouge"><em></code>.</li>
<li>Abbreviations, like <abbr title="HyperText Markup Langage">HTML</abbr> should use <code class="language-plaintext highlighter-rouge"><abbr></code>, with an optional <code class="language-plaintext highlighter-rouge">title</code> attribute for the full phrase.</li>
<li>Citations, like <cite>— Mark otto</cite>, should use <code class="language-plaintext highlighter-rouge"><cite></code>.</li>
<li><del>Deleted</del> text should use <code class="language-plaintext highlighter-rouge"><del></code> and <ins>inserted</ins> text should use <code class="language-plaintext highlighter-rouge"><ins></code>.</li>
<li>Superscript <sup>text</sup> uses <code class="language-plaintext highlighter-rouge"><sup></code> and subscript <sub>text</sub> uses <code class="language-plaintext highlighter-rouge"><sub></code>.</li>
</ul>
<p>Most of these elements are styled by browsers with few modifications on our part.</p>
<h2 id="heading">Heading</h2>
<p>Vivamus sagittis lacus vel augue rutrum faucibus dolor auctor. Duis mollis, est non commodo luctus, nisi erat porttitor ligula, eget lacinia odio sem nec elit. Morbi leo risus, porta ac consectetur ac, vestibulum at eros.</p>
<h3 id="code">Code</h3>
<p>Cum sociis natoque penatibus et magnis dis <code class="language-plaintext highlighter-rouge">code element</code> montes, nascetur ridiculus mus.</p>
<figure class="highlight"><pre><code class="language-js" data-lang="js"><span class="c1">// Example can be run directly in your JavaScript console
</span>
<span class="c1">// Create a function that takes two arguments and returns the sum of those arguments
</span>
<span class="kd">var</span> <span class="nx">adder</span> <span class="o">=</span> <span class="k">new</span> <span class="nb">Function</span><span class="p">(</span><span class="dl">"</span><span class="s2">a</span><span class="dl">"</span><span class="p">,</span> <span class="dl">"</span><span class="s2">b</span><span class="dl">"</span><span class="p">,</span> <span class="dl">"</span><span class="s2">return a + b</span><span class="dl">"</span><span class="p">);</span>
<span class="c1">// Call the function
</span>
<span class="nx">adder</span><span class="p">(</span><span class="mi">2</span><span class="p">,</span> <span class="mi">6</span><span class="p">);</span>
<span class="c1">// > 8</span></code></pre></figure>
<p>Aenean lacinia bibendum nulla sed consectetur. Etiam porta sem malesuada magna mollis euismod. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa.</p>
<h3 id="gists-via-github-pages">Gists via GitHub Pages</h3>
<p>Vestibulum id ligula porta felis euismod semper. Nullam quis risus eget urna mollis ornare vel eu leo. Donec sed odio dui.</p>
<script src="https://gist.github.com/5555251.js?file=gist.md"> </script>
<p>Aenean eu leo quam. Pellentesque ornare sem lacinia quam venenatis vestibulum. Nullam quis risus eget urna mollis ornare vel eu leo. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec sed odio dui. Vestibulum id ligula porta felis euismod semper.</p>
<h3 id="lists">Lists</h3>
<p>Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Aenean lacinia bibendum nulla sed consectetur. Etiam porta sem malesuada magna mollis euismod. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus.</p>
<ul>
<li>Praesent commodo cursus magna, vel scelerisque nisl consectetur et.</li>
<li>Donec id elit non mi porta gravida at eget metus.</li>
<li>Nulla vitae elit libero, a pharetra augue.</li>
</ul>
<p>Donec ullamcorper nulla non metus auctor fringilla. Nulla vitae elit libero, a pharetra augue.</p>
<ol>
<li>Vestibulum id ligula porta felis euismod semper.</li>
<li>Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.</li>
<li>Maecenas sed diam eget risus varius blandit sit amet non magna.</li>
</ol>
<p>Cras mattis consectetur purus sit amet fermentum. Sed posuere consectetur est at lobortis.</p>
<dl>
<dt>HyperText Markup Language (HTML)</dt>
<dd>The language used to describe and define the content of a Web page</dd>
<dt>Cascading Style Sheets (CSS)</dt>
<dd>Used to describe the appearance of Web content</dd>
<dt>JavaScript (JS)</dt>
<dd>The programming language used to build advanced Web sites and applications</dd>
</dl>
<p>Integer posuere erat a ante venenatis dapibus posuere velit aliquet. Morbi leo risus, porta ac consectetur ac, vestibulum at eros. Nullam quis risus eget urna mollis ornare vel eu leo.</p>
<h3 id="images">Images</h3>
<p>Quisque consequat sapien eget quam rhoncus, sit amet laoreet diam tempus. Aliquam aliquam metus erat, a pulvinar turpis suscipit at.</p>
<h3 id="tables">Tables</h3>
<p>Aenean lacinia bibendum nulla sed consectetur. Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>
<table>
<thead>
<tr>
<th>Name</th>
<th>Upvotes</th>
<th>Downvotes</th>
</tr>
</thead>
<tfoot>
<tr>
<td>Totals</td>
<td>21</td>
<td>23</td>
</tr>
</tfoot>
<tbody>
<tr>
<td>Alice</td>
<td>10</td>
<td>11</td>
</tr>
<tr>
<td>Bob</td>
<td>4</td>
<td>3</td>
</tr>
<tr>
<td>Charlie</td>
<td>7</td>
<td>9</td>
</tr>
</tbody>
</table>
<p>Nullam id dolor id nibh ultricies vehicula ut id elit. Sed posuere consectetur est at lobortis. Nullam quis risus eget urna mollis ornare vel eu leo.</p>
<hr />
<p>Want to see something else added? <a href="https://github.com/poole/poole/issues/new">Open an issue.</a></p>