Sergey Lalov is an experienced Corona SDK developer from Russia that mostly working on contract jobs. As a participant in GIGJam, a 48-hour hackathon, Sergey created a working prototype of Laser Flow. After competing in the hackathon, Sergey decided to polish his game and publish it for both iOS and Android. In his guest piece, Sergey writes on his experience bringing his game prototype to market in just one month.
My name is Sergey (Spiral Code Studio) and I have developed a puzzle game called Laser Flow.
When I first discovered Corona SDK, a 2D framework for iOS and Android, I started making a very complex tower defense game. The game would require a lot of time to achieve the quality I was looking for. After all, quality is the first component of a successful game, while the second component is having enough money for marketing. As I spent most of my day on contract work, I had a tough time completing this initial project.
Fortunately, GlitchGames announced a 48-hour hackathon called GIGJam in Spring 2013. I thought, “What sort of game is both entertaining and easily implemented?” I instantly knew I wanted to create a puzzle game. The theme of the jam was “elements” and I started to think how to incorporate elements into a puzzle game.
As an amateur photographer, when I hear “elements” I think of DSLR lenses because they consist of several elements (individual lenses). From lenses, I started to think about lasers and then mirrors. From those ideas came the root of the game: using mirrors and other elements to deflect laser beams of various colors. In addition to mirrors, I added splitters and filters.
As a gamer, my goal was to make a game that I would enjoy. I started by developing an attractive main screen to create a good first impression with players. I was so happy with my weekend-long project that I decided to polish my game and publish for iOS and Android. You can see the screenshots of the actual gameplay below – the screenshot on the left is the initial version, while the one on the right is a screenshot from the published game.
As you can see, a lot has changed in appearance, but the idea remains the same. The building blocks in my game are rectangles, made by the display.newRect() function – there are only a few images actually. Buttons, tiles, cells, blocks – are all rectangles. Lasers and mirrors are lines. I also like to use vector graphics to the maximum extend possible. It’s amazing how much stuff you can do with vector graphics and how easily they can be adapted to various elements in the game.
One of the coolest and easiest contributions to the game’s look and feel was the animation. I defined a special transition function, which takes an object, scales it down to almost 0% and then transitions it to 100% with an easing function. When I applied it to every object in the game, it started to look way cooler. To do so, I only had to add this function call in every object creation function – and I don’t have many – newImage(), newButton(), newText(), newCell(), newMirror(), newSplitter() and a few more. That was very easy to implement. I should note that it was easy because of a proper OOP implementation. If I had spaghetti code, I would have had to add this function call to a lot of places.
For the GIGJam, I made 23 levels by hand and the remaining 60 levels were generated randomly with grid sizes varying from 5×5 to 7×7. Levels that were larger than 7×7 become really difficult to solve and cell sizes became too small for smartphones.
I was able to finish the game in a month and start to earn some money with the published version. For the final version, I added a lot of things: a level editor, more levels, a random level generator, more music, a “hints” system, in-app purchases, timer and reset buttons, move counter and a hide beams button, scores and GameCenter, and more.
Based on my experience creating Laser Flow, here are seven tips for developers looking to publish their prototype in a short amount of time:
Don’t waste your time
Use a framework, such as Corona SDK to speed up development.
Go cross-platform: making your mobile game run on iOS and Android is a must. Be sure your framework supports this. Developing separate versions of a game for each of the platform takes a lot of time.
Reuse existing code. There are tons of code snippets for popular frameworks and Corona even has a special section called ‘Code Exchange’ where you can easily find and share various code.
Use or even make level editors to speed up content generation. I integrated the editor in the game itself and the level-making process became much faster.
Know your instruments. Study framework API from time to time to be aware of all what’s possible. Use an IDE to help you write the code - my personal choice is ZeroBrane Studio.
Have your own mini-framework. Develop a certain workflow and functions that you find most helpful and use them through entire the project. With time, I have created my own set of functions that help me develop much faster than on a bare Corona API.
Study your rivals. Play a number of similar games and analyze what they do well, and what they lack. Make sure to avoid repeating poor elements of similar games.
Small things attract players the most. It’s a good idea to add “Easter eggs,” secret levels or unusual game behavior. For example, instead of a boring “OK” button for a win dialog at the end of a level, I wrote “I AM AWESOME” and players liked it. Also, I created three secret levels hidden in the menus of Laser Flow.
Add music and sounds that you think are right for the game. I went with electronic and a bit of chip tune music and sounds. My friend made some tracks, while others I found on SoundCloud. Music and sounds are very important for a good impression.
Feel free to add anything you think is important to the game. My title screen could be much simpler, but nevertheless I added fading pixels and roaming lasers to it. I just couldn’t help not making them.
Share your game ideas with friends, ask for advice and accept the criticism.
the dark side some gamedev groups and forums. For me, a huge source of support, encouragement, and idea generation came from our small IRC room on freenode #corona.
Don’t annoy the player
Players hate to wait. Say goodbye to long intros, long tutorials or even long level ending animations. The interface must be responsive - if nothing happens on the screen and the user can’t press anything - that’s no good.
Players don’t like to waste time reading tutorial pages. While I have text for tutorial messages, I also added an animated hand that shows players what to do.
What you think is obvious in the gameplay, might not be obvious to the player. For example, I had to drastically lower the difficulty of starter levels so the game could be more understandable to players from the start. Don’t be afraid to test your game on friends and adjust anything that might not be obvious to an average player.
Don’t bloat your game with ads. I hate ads myself. Ads are an escape route from your game and you want to keep the player in your game as long as possible. Without ads you lose a source of revenue, but the better impression you give players will likely help spread the word about your game.
Don’t over code
While making your game perfect is important, don’t spend too much time trying to achieve that. A finished but not ideal game is still much better than an unfinished project.
Drop functionality that is too hard or takes too much time to implement. I wanted to add in diagonal lasers, but I discovered several bugs that were hard to solve and I decided to drop diagonal lasers as a result.
Procrastination is bad. Developers often postpone their work on a game and never finish it as a result. It's important to spend at least some time on development every single day - even if you’re just working on planning.
After the game is completed, it still might be difficult to set up proper store listings and screenshots. There are many tutorials online that will help you in that process.
Even after your game is published, there is a lot of work to be done on the marketing side. Tell the world what an awesome game you made and use every resource in your arsenal.
Don’t forget about updates such as bug fixes, new levels, and new features.
As you can see, making a finished product from a prototype is a lot of work, but it’s possible. While I discovered that there are similar games on the market, they lack the simplicity of controls and challenging gameplay of Laser Flow. I’m very pleased with my end-result and am thrilled that the game has already averaged a 5-star review on iTunes and Google Play.
Thanks for reading, you are awesome!