You can buy a Violin on Amazon for around sixty bucks. According to the user reviews, this instrument is not even bad and you’ll get what you expect: It has four strings, it comes with a bow… it’s working. Still, people pay thousands of dollars for a handcrafted violin and rightfully so: Those instruments are carefully constructed, they sound better and they are more fun to play.
The initial version of Letteral was like a $60 violin: It still needed a lot more craftsmanship and a lot more fine-tuning.
Boosting your luck
In Letteral’s very first prototype, the letters on the board were assigned randomly and all letters were equally likely to appear. Of course, this can lead to games with a lot of Js, Ys and Zs which isn’t a great experience, unless you are into spelling Icelandic mountains or Klingon swear words. So, the very first change I made was to give each letter a weighted probability, the weight being equal to the frequency in which the letter occurred in the game’s language. As I was aiming for an international audience right from the start, I designed the app so that it would be easy to add languages later.
Naturally, by adjusting the frequency, the gameplay became much better instantly. But there was a new problem: In English, for any letter there is a chance of almost 27% of it being a T or an A and only a 0.01% chance for a Z or X. So now, there were lots and lots of Ts and As, all of them demonstrating: Just because something is realistic doesn’t mean that it is also fun.
My first intuition was to reduce the chance of getting the more common letters and to boost the frequency of the more uncommon ones. However, this brings up another concern: Vowels.
Vowels… You can’t form an English (or German or French) word without them and I was wary that this change would leave me with too few of them on the board, especially as the game progresses. As completed hexagons are filled with new letters, there is a chance that players would quickly take over the hexagons with the “easier” letters (aka. vowels) which then would be filled with more uncommon letters, eventually leading to a board with very few vowels and, once again, lots of Klingon swear words.
The solution I came up with is a bit more elaborate: The algorithm that randomly generates letters keeps track of the letters it recently selected. The more recently a letter was generated, the less likely it is to be chosen again. For example, if the list of recent letters is “AMDE” with A being the most recent one, for the next random letter, the chances of getting another A would be reduced by 75%. For M the likelyhood is reduced by 70%, for D by 65%, for E by 60% and so on. That doesn’t mean that you never get two As in a row, it just means that it is much less likely to happen. But as the chances for any given letter “regenerate” over time, it is unlikely to get stuck with a board of unplayable letters.
All in all, this solution works nicely, creating boards that feel natural to their language and still feature a wide variety of different letters.
Not all tiles are created equal
When you play Letteral for a while, you will notice that some tiles are more valuable to you than others.
While the grey tiles are part of just one hexagon, the blue ones belong to two and the orange ones to three hexagons. The orange tiles with a * (aka “Tier 3.5”-tiles) play a very special role: Just by blocking all four of them, players block all hexagons on the board. Since for the first months of development, the game didn’t take this fact into account, these four Tier 3.5 tiles were often randomly filled with letters that are common in the given language (As, Es, Ts…). This made it very easy for one player to block all four of them, essentially preventing his opponent from ever scoring. This could result in long stalemates which obviously aren’t great for anybody.
The solution for this is easy: While Tier 1-tiles can be filled with any letter, Tier 2-tiles will never get the three most frequent letters of the current language. This threshold is increased to six letters for Tier 3 and all the way up to ten for Tier 3.5.
Not including the ten most common letters of the language might seem like a drastic step. However, I started with much smaller numbers and just kept increasing them after months of playtesting. In combination with the previously described weighted randomness, the boards now lead to fun and fluent games. The charm of all of this is, that most players won’t even notice how much is happening under the hood. Or did you?
Except for English, all other languages in Letteral (Spanish, German, French and Danish) feature diacritics like Ä, É or Ø. When implementing the different languages, I had to decide on how to deal with these special characters. The most obvious solution would have been to just incorporate all of these as they are, displaying them with their respective frequency. However, especially for French, this would have increased the alphabet’s size from the regular 26 letters to a whopping 42 letters. With so many different letters, it is much more difficult to find words and, thus, games take longer to complete.
At the end, I opted for different solutions for different languages. With French and Spanish, it is not uncommon to mitigate the diacritics anyway, especially when you are texting. Thus, I replaced all of these characters with their basic latin letters in the underlying dictionaries, reducing the alphabet for these two languages to 26 letters.
For German and Danish, things are a little different. You wouldn’t replace an Ö or an Ø with just an O, the usual replacement, for example in crossword puzzles, is OE. However, the E is already the most common letter in both languages so I didn’t want to make it even more important. Also, selecting two tiles to essentially get a single letter feels out of place for a game like Letteral. Therefore, I decided to incorporate all of these letters (Ä, Ö, Ü für German and Å, Æ, Ø for Danish) into the game’s alphabets. Only for the German ß, I replaced it with an SS since otherwise, I would have to display a capital ß, which most people – even Germans – don’t even know exists. Also, ß is a very infrequent letter and most Germans don’t know when to use it over a double S anyway, so the replacement feels natural. And remember, I’m German, I should know. 🙂
One more thing
The final tweak to the gameplay I introduced only days before submitting Letteral to the App Store. In fact, it is the second last change I made to the code.
For two years of development, the first player in a match had the whole board at his disposal. I always felt that finding a word in 28 letters was a bit overwhelming and the feedback I received during beta testing confirmed that. While I had played with the idea of reducing this number, I was hesitant to do so because I feared yet another rule would make the game more complicated for newer players and ultimately put them off.
Eventually I wrote off these reservations. When you start a new game of Letteral now, the six central Letters will be blocked for the first player. Having played with this for a while, I think the rewards greatly outweigh the risks here. Apart from reducing the number of letters for the first player to “only” 22, this new rules comes with another upside: The first player always had a slight advantage over the second one. He could choose the first (and probably) best word and in some cases, he was able to score before his opponent even got a chance to interact. Blocking the six central tiles greatly reduces this advantage and makes it impossible to score a point in the first turn.
So, that’s all there is to say about gameplay. I took you along on my journey from a rough idea to a polished game. Next week we will be talking visuals. I’ll share with you how I, as somebody who always hated arts classes in school, approached the UX design for Letteral.