Word Definitions in Desktop Version!

It’s been a while since I’ve posted! I’ve been incredibly busy working on the desktop version of Letter Quest! I’m excited to announce that I’ve managed to get the definitions of about 150,000 of our 180,000 words into the game! This is a feature that we’ve wanted to add since the beginning, and it really takes the game from just a fun word game, to one that can actually teach you a little bit as you play! As you can see in the screenshots (which include some VERY placeholder UI, it will be much prettier soon, we promise!), the last word that you spelled will be shown along with its definition in the panel at the bottom-left. Also, as you spell words, if a valid word is spelled, there will be a little question mark button you can push that will instantly bring up the definition of the word you’re currently spelling. We’re trying very hard to see if it’s possible to cram all of this information into the mobile version, but for now this is a desktop-only feature. We’re doing everything we can to make it work on mobile too, but it’s a challenging problem to figure out! As usual, the bandits will try to work their bacon-infused magic to make it happen! 🙂 Here’s some screenshots showing off this sweet feature! If you like what you see, consider voting for Letter Quest on Steam Greenlight, it would really help us out! Have a great weekend...

read more

“Proper” Android Support

Letter Quest: Grimm’s Journey was just approved by Apple earlier today! Very exciting as it’s our first game. Since submitting to Apple five days ago, I’ve been focusing on getting an Android version working. Overall it’s been pretty straight-forward, although I’m not sure that my approach is the “correct” one (if there is such a thing!). I’ve seen plenty of people talking about dpi, if the device is a tablet or phone, different resolutions, etc. Seeing as our game has quite a lot of art that doesn’t resize very well (we do use 3 and 9slices extensively, but that’s only for component backgrounds, buttons, etc. – doesn’t help with icons, etc.), I ended up going with my own approach. My solution is actually pretty simple. I now have 1x, 1.5x, 2x, 3x, and 4x assets for Android. That might seem crazy, but here’s my reasoning: there are so many odd resolutions that are somewhere between what you would use for 1x or 2x assets, for example 800×480 – the 1x assets are way too small, and the 2x assets are way too big. I tried doing some zooming in/out and scaling up/down of the stage, but it always ended up looking pretty terrible. So now I just check the lower of the two resolution values (from the width and height), and use that to decide on which set of assets I use. Surprisingly, this works out for every resolution I’ve tried! I had to do a bit of custom positioning for a few components in the game, such as the battle buttons and the tileboard, but overall everything just worked. Sure, I now have 5 separate copies of all game artwork, but that’s actually less horrible than you might think – all of the 4x images together only total about 9 MB, so in total for all 5 sets of images it’s sitting around 28 MB, and that’s before any kind of optimizing (PNG crushing, etc.). I can live with that! Here’s a screen shot from a battle at six different resolutions, simulating six very different Android devices, just to show how it ended up looking: 1024×600 (we use 1023×600 in-game) Galaxy S @ 800×480 Galaxy S3 @ 1280×720 Nexus 5 @ 1920×1080 Nexus 7 @ 1200×800 Nexus 7 @...

read more

Source Code Visualization With Wordle

I recently heard about Wordle which is a website that will create word clouds from text that you provide. I figured it might be fun to run that against the full source code for Letter Quest. Letter Quest is currently 45,482 lines of code, 37,329 if you ignore comments and whitespace lines. There really isn’t too much to learn from this image, but it is neat to see the game’s source represented this way. Although you can see from the image that I’ve still got quite a few “TODO”s left, mostly optimization items at this point. Also, “public” is used a whole lot, and that is because ActionScript is still pretty slow at making function calls, so I use public vars in a lot of places instead of getters and...

read more

Letter Quest: Grimm’s Journey Is Almost Done!

Today I realized that it’s been a couple of weeks since our last post – it’s easy to lose track of time when trying to get a game ready for release! We’ve shipped several games in our professional careers, but until now it’s always been at a larger company with many employees. This is our first “on our own” game release! We’re really excited, totally overworked, slightly terrified, and very proud of the game that Letter Quest has become. Over the last couple of weeks, I’ve played the game in its entirety five times. It takes me about four hours to reach and defeat the final boss. For players that haven’t logged hundreds of hours into the game, that time could easily be doubled, if not tripled – we’ve got a ton of content waiting to be discovered. I’m also impressed at just how much time, energy and effort we’ve been putting into polishing the game, making sure everything plays super-awesomely, fine-tuning the costs of everything in the shop, the reward values, monster difficulty, the tutorial text, etc. When we started this game, we set out to make a “pretty simple word game”…after around 10 months, we can safely say that “simple” wasn’t terribly accurate! We’ve now got a super-cool RPG word/puzzle game hybrid that we still enjoy playing, even after a ton of testing – hopefully that’s a really good sign! We should be ready for App Store submission (Android coming soon after!) in early January. Until then, here’s a bunch of screenshots from the current version, to give you an idea of how things are looking. Happy Holidays to everyone! Our new map with the stage details panel, blueprinty awesomeness, and a new layout! One of the special challenge enemies – he’s super-tough! The new bookstore, complete with shopkeeper Apparently “sisses” means to make a buzzing sound…I was just trying to use up some of those Ss! New shopkeeper art and new shop item icons…we couldn’t forget the...

read more

TexturePacker

Today I want to give a quick shout out to TexturePacker, one of the best programs I’ve used while developing Letter Quest. For those who are not aware, when you’re making apps or games that run on the GPU, every time you need to display something from a different texture, it requires an additional “draw call”. Basically this is not the be-all end-all for performance, but certainly having 100+ draw calls due to having 100+ individual images is pretty wasteful. So it becomes a good idea to have as many images as possible in a single texture, so that we can display many images in a single draw call. That’s where a program like TexturePacker comes in. Basically TexturePacker takes one or more source images and combines them into a single texture. Then whatever framework you’re using (or your own if you’ve gone that route!) can pull out rectangular sections of that large texture and display them as images in your app or game. Now you can draw as many things as you want in a single draw call. It’s also quite convenient because it means that your images can be different sizes. In Starling, for example, this is called a TextureAtlas. For more info see the TexturePacker page. They’ve also got several helpful tutorials. Overall this is a really reasonably priced, well-made and superbly useful program! I use it for all of my games and apps now....

read more

The Little Details Do Matter

Art Bandit was playing the game recently and had something unexpected happen – on the first stage of a new save file, he received a tile board that contained no vowels! While I knew that it was statistically possible, it’s highly improbable given how our letter selection works. So I decided it would be a good idea to fix that up. The most obvious solution was to simple analyze the board at the beginning of each stage, count the number of vowels, and if that was below a threshold that we decided upon (3, for the record), then we could randomly change consonant tiles to random vowels until the threshold was met. Of course, nothing is ever that simple. We have some unique challenges in the game that restrict the letters that are available in a given stage. So we also need to make sure that we only add vowels that are allowed in the given stage. It ended up being fairly simple, here’s the code for anyone that’s curious: private function ensureEnoughVowels():void { var minVowels:int = MIN_NUM_STARTING_VOWELS; var numVowels:int = 0; var numTiles:int = mTiles1D.length; var tile:LetterTile; var consonantTiles:Array = []; for (var i:int = 0; i < numTiles; i++) { tile = mTiles1D[i]; if (TileType.IS_VOWEL[tile.tileType] == 1) { numVowels++; } else { consonantTiles.push(tile); } } if (numVowels < minVowels) // not enough vowels, need to randomly change some consonant tiles to vowels { // figure out which vowels are valid - if we're in a challenge some could be restricted var bannedLetterIndexes:Array = Globals.CurrentGameSettings.StageDef.bannedLetterIndexes; var validVowels:Array = []; if (!bannedLetterIndexes[TileType.A]) { validVowels.push(TileType.A); } if (!bannedLetterIndexes[TileType.E]) { validVowels.push(TileType.E); } if (!bannedLetterIndexes[TileType.I]) { validVowels.push(TileType.I); } if (!bannedLetterIndexes[TileType.O]) { validVowels.push(TileType.O); } if (!bannedLetterIndexes[TileType.U]) { validVowels.push(TileType.U); } do { var tileIndex:int = Utils.randomIntFromRange(0, consonantTiles.length); // select a random consonant tile to change to a vowel var vowelIndex:int = Utils.randomIntFromRange(0, validVowels.length); // select a random vowel type tile = consonantTiles[tileIndex]; tile.setTileType(validVowels[vowelIndex]); // change the tile to the selected vowel type numVowels++; consonantTiles.splice(tileIndex, 1); // remove the consonant tile } while (numVowels < minVowels); } } And voila! The player always receives at least 3 vowels when starting a...

read more