Skip to main content

Posts

Showing posts with the label Ice Trap

Collecting feedback from mobile game beta testers

Ok, so you've almost finished your game and want to take it for a spin by distributing a beta version. Let's assume that you're quite satisified with the design and functionality, and you have also somehow managed to get a solid amount of testers interested in your game. That's aweseome, but a few big questions still remain unanswered: When are you planning to collect feedback from your testers? How are you going to collect it? What kind of feedback and statistics do you want to collect? These are not easy questions to answer, but if you want to get the most out of your beta testers you need to think about them. Hard. I don't have the knowledge or experience to say what works best, what you should/must do, etcetera. But I did think about this a lot while planning the beta testing for my iOS game Ice Trap recently, and I'll try to explain what I did and why. Let's get started. When to collect feedback When I discuss the issue of when to...

Falling leaves with Corona SDK and transition2

The latest addition to my transition2 library for Corona is the convenience function fallingLeaf() . I was working on my iOS game  Ice Trap , trying to create a "confetti cannon" effect when the player completes a level and achieves three stars. While playing around with the existing transition functions I managed to reach a quite decent result by combining several different transitions. It took me a while to get there, so I realized that it would probably be nice to turn that combination of transitions into its own convencience function. At its simplest use, you only need a few lines of code to create a leaf that falls smoothly towards the bottom of the screen following a seemingly random pattern: local transition2 = require ( "transition2" ) local leaf = display.newImageRect( "leaf-64px.png" , 64 , 64 ) leaf.x, leaf.y = display.contentCenterX, 0 transition2.fallingLeaf(leaf, {}) Simplest possible use of fallingLeaf() Ok, so that l...

Creating iOS App Store screenshots from Corona Simulator on Windows

Not very long ago you had to upload your App Store screenshots in many different resolutions for all the different iOS devices. A real pain. Fortunately, Apple realized this and simplified the screenshot upload process a lot. Now you only need to upload screenshots for the 5.5" iPhone and 12.9" iPad displays, and automatic scaling will be done for remaining devices with lower resolutions. It's recommended to grab your screenshots from a physical device, but what do you do if you don't have a 5.5" iPhone? Well, instead of buying a new device or scaling lower resolution graphics you can use the Corona Simulator to get the high resolution screenshots you're looking for. This is how I do it for my Corona SDK apps on my Windows machine, and my example assumes that your screenshots are taken in portrait mode and that your app is primarily designed for iPhone rather than iPad. You must of course also have a monitor that can handle the resolution of the screensho...

Making an iOS gameplay preview video

Creating an App Store gameplay preview video for your new, cool iOS game might feel like a daunting task at first. But actually it isn't that difficult once you get started thanks to a couple of free, and really powerful tools, provided by Apple. I'm a beginner myself at making videos, but following the workflow described below I managed to put together a gameplay video in just a few hours that I'm quite satisfied with. Let's get started. What you  need : iOS device Mac with OS X QuickTime Player (free) iMovie (free) The workflow: Write a short script. Just a very brief overview of the intended video, divided into a few main sections and how long to spend in each section. Keep it short, remember the 30s limit. Try to focus on what's unique for your game. After watching the trailer, a player who has never seen the game before should hopefully have at least a decent understanding of what the game is all about. Also, try to avoid explanatory texts if poss...

Rewarding players for playing every day in Corona SDK

Rewarding players for coming back and playing your game every day is nothing new, and is probably used in most successful games out there in one way or another. I don't want to miss an opportunity to keep my Ice Trap players for a little longer if possible, so I've implemented a simple daily rewards solution in Corona SDK to handle this. My solution is the simplest possible really: Give the player a reward if he/she plays two days in a row. The reward will be the same every day regardless of the number of consecutive days played. I guess you could make this just as advanced as you like, with increasing rewards after a specific number of days, different rewards on different days and so on. But for the moment I don't see a need for that, and a flat reward will do just fine to start with. Recently I implemented a concept in Ice Trap called level keys, allowing the player to unlock the next level if getting stuck. The player starts the game with a few keys, and can then ea...

Generate app icons using bash script in Windows

Generating an app's icon in all necessary sizes for both Android and iOS can be really time consuming and boring. It would be ok to do this work manually if you'd only have to do it once for each app just before release. Unfortunately that's not the case since the final app icon is most likely something that evolves through iteration. Needless to say, there is time to save by finding an efficient way to automate the icon generation. There are many tools out there that can help out with this. I've tried a couple of them and they've all worked just fine. The problem is that I've found that they don't actually save me that much time in the end. For iOS, you need a completely square icon and iTunes/iOS will handle the rounding of the corners for you. For Android on the other hand, you have complete freedom when designing the shape of your icon. I prefer to have my Android icon look as similar to the iOS icon as possible, which means that I'll have to cre...

Ice Trap is making progress

Lots and lots of new levels have been created for Ice Trap  in the last couple of weeks. Countless types of varied puzzle mechanics and level designs have been tested. Some of them went straight to the trash while many of them ended up in really cool levels sure to give the players loads of tricky puzzles to solve. That's some neatly stacked boxes! Right now I think that I might actually have too many levels for v1.0, so I probably need to sit down and prioritize which levels should make the final game and polish them into perfection. I guess that has to be a lot smarter than creating even more levels just because it's so much fun... The ice bubble seems to do just fine instead of a helmet.

Creating a game video

Yesterday I decided to create a little teaser video for Ice Trap , showing off different ways of dying in the game. I believe that failing in a game should be almost as fun as playing it, so I try to put some extra attention and details into that part of my games. Being primarily a programmer, my expertise when it comes to video editing is - to put it nicely - very limited. I had a clear idea what I wanted to achieve, but no clue which tools to use. Also, my tight budget limits me to use free or very inexpensive tools which heavily reduces the number of available options. What I wanted to do was: Record some actual gameplay sessions where I fail in different ways Trim each session to only a couple of seconds Crop each session, zooming in on the area where the actual dying is going on Compile all the short clips into a single video file Add some sound effects Convert the video file to an animated gif I won't go in to details about all the different approaches I tried....

App icon and landing page for Ice Trap

Ice Trap is getting closer to release. The game engine is almost complete and runs really smooth on all the devices I've tested on so far, including a crappy old Asus Android pad. The number of levels are increasing at a steady pace much thanks to the new level editor, and the graphics are also starting to feel really good and fitting for the overall atmosphere of the game. Some work still remain, such as adding music and sound effects, some social media features, and finalizing the levels design, finding just the perfect overall difficulty curve. Today I felt that it was time to spend some hours on polishing the exterior of the game, so I decided to create a brand new app icon, and also set up a simple landing page allowing people to register for email notifications about important news such as release dates. Ice Trap app icon If you visit the Ice Trap landing page , please let me know what you think about it. Especially if you notice any problems displaying it on you...

Ice Trap level editor

One of the mistakes I made during the creation of my first mobile game Dragonflies was to not spend some time building a level editor. I figured the time it would take to finish the editor would be better spent just implementing the levels the fastest possible way. In my case this meant playing around with pieces of colored paper on a hand-drawn coordinate system, and then manually do the conversion from paper to json files. It actually worked out quite well in the beginning, until I started making more complex levels... Not only did it take a lot more time than expected, but designing levels became so incredibly monotonous and tedious. That's not exactly what you want when you're trying to be creative and come up with cool, new level ideas. Lesson learned. For my upcoming game Ice Trap I started out the same way, by just hand-crafting the level files in json format. But this time I knew it was only going to be temporary. When I got to the point where the gameplay felt soli...

Updated FPS calculator for Corona SDK

A couple of weeks back I wrote this post about how to calculate the actual frame rate of your game rather than just hoping that the target frame rate found in display.fps will be met. Back then I only used it as en experiment, but today I wanted to implement it in my game Ice Trap to be able to reduce or disable some animations on slower running devices. I ended up rewriting the frame rate calculator in an object-oriented fashion to make it cleaner and more reusable. It should be very easy to use. Just create a new instance of the FPSCalculator, passing in a callback function and some optional configuration parameters. In the callback function you'll have access to the current FPS as well as the FPS ratio, i.e (actual_FPS/target_FPS). If none of the optional config parameters are specified the callback will be invoked once every second, regardless of whether there's been a FPS drop or not. Check out the whole source code below, including some example usage code, and make m...

Swiping objects sideways in Corona SDK

Just the other day I needed to create a "swipeable menu" for my next Corona SDK game called Ice Trap, where I want the player to be able to swipe left/right to select among a number of chapters in the level selection scene. Basically, what I wanted to achieve was this: 1. Have a number of display groups, each one representing one of my game's chapters 2. Only one chapter (display group) visible at the screen at a time 3. Allow for the user to swipe left/right to select chapter 4. Prevent swiping too far left or right 5. Use transition effects to slide the chapters into place nicely 6. Display a clickable thumbnail for each chapter, allowing the user to quick jump to any  one chapter. Also highlight the currently selected chapter Here's a simple sketch of the idea: After scanning the Internet for half an hour or so I still hadn't found a complete solution for this, so I decided to roll my own instead. What I did find was this small tutorial from Co...

Corona SDK newRect() vs newImageRect() performance comparison

My next Corona game contains quite a lot of explosion effects in pixel art style, where I basically just scatter a number of single-colored squares in different directions. The squares are all created using display.newRect()  which I figured had to be both the easiest and most efficent way for creating these simple geometrical shapes. Explosion close-up from Ice Trap But then it kind of hit me: What if using newImageRect() with a 1px image scaled to the desired size could actually be faster than newRect() ? Not very likely, but since I have no idea how the Corona SDK graphics engine is implemented I had to try it out with a little sample program. I decided to run three separate tests. Not scientific in any way, but at least it should give me a clue of which function performs best. In each of the tests I just created a bunch of squares of the same size randomized across the screen, and measured the time taken to create them. The three tests had the following setup: 1. Use...