My Unreleased CoronaSDK Plugin

I have 8 games created with CoronaSDK, some going back to 2012. I do revisit them from time to time to add features, fix bugs, and update libraries that I used. For the latter, I have used and purchased several libraries, and I have created a few as well. If I feel that there is a market for them, I release them as Plugins on the Corona Marketplace.

Over the years, I have developed and integrated GBC Data Cabinet, GBC Language Cabinet, and GBC Object Pool into my own projects.

  • GBC Data Cabinet manages your data. You can create storage “cabinets” to read, write, and save data for later use. This eliminates the need for global variables, and makes management of data between scenes much easier. And… it’s FREE.
  • GBC Language Cabinet manages translation within your game or app. You create the text for each language you want to support, and GBC Language Cabinet will handle grabbing the correct text, including the inclusion of any variable data. And… it’s also FREE.
  • GBC Object Pool manages your game objects so they can be reused. Instead of creating and destroying objects repeatedly (bullets or enemies, for example), GBC Object Pool creates game objects and manages them throughout the lifetime of your game. Performance using object pooling via this Plugin is noticeable. It’s not free, but it is a reasonable (I think) $5.00 USD.

I have one (well, actually two; more on that later) plugin that I have not released, GBC Text, which is a bitmapped-text manager.

GBC Text – The Highs

GBC Text started out as a replacement for a once-popular, but no longer sold/support text library that I purchased back in the 2012 time frame. I wanted similar features, since Corona’s text library is very basic, so I decided to write a library. The results are demonstrated in this Proof-Of-Concept video.

As of now, the library can do the following:

  • Allows you to load and use multiple bit-mapped fonts.
  • Displays the fonts in various sizes.
  • Left/right/center alignment.
  • Sets anchors.
  • Flows text.
  • Can change text dynamically, without the need to destroy/recreate.
  • Allows you to animate text as a whole or as individual letters.

I put a lot of time into engineering and developing this library, especially the last 2 features in the list above, and I feel the results are great. I have begun integrating this into all my current games, and will add additional features as needed.

GBC Text – The Lows

After reading thread after thread on the limitations of Corona’s text system, I felt that a plugin like this, at a reasonable price, would be greatly welcome. I posted a message on the Corona Forums showing the proof-of-concept and asked for feedback. I was surprised that there were close to 200 views, but only 2 replies. A bit discouraging, no doubt.

Reason for Not Releasing

This is eerily similar to my experience releasing GBC Object Pool… there was a lot of talk about performance in creating/destroying objects repeatably, and I wanted to develop a method to manage objects easily within Corona. I spent a great deal of time on the library to enhance performance, remove bugs, document, and prepare for Marketplace. The development and engineering, as well as ongoing support, requires time, effort, and money, so I decided to release it for five bucks. Sales in the two years since release are dismal (maybe this plugin is a solution to a problem that does not exist), and I do not want to go through this again with another plugin.

I had high hopes for GBC Text, but based on the lack of responses in the forums, and on Twitter, I am no longer sure if people would pay for an enhanced text library, so for now, this library will remain an internal library for my own use.

“Free” you say? “Open Source” you say? Maybe at some point, but not now.

Oh, My Second Unreleased Plugin?

I also developed another library I have been using for years. It is sort of a game center library to manage the iOS Game Center, Google Play, and Amazon GameCircle (when it was active) plugins. I also spent a lot of time on this library, since Apple and Google enhance their SDKs quite a bit, and each platform has their quirks on how they handle leaderboards and trophies. I also want to add PC and Mac support at some point. I am not sure about releasing this plugin either, since this library requires a lot of maintenance when Game Center and/or Google Play changes something on their end.

Ludum Dare 44: Post Mortem

Another Ludum Dare completed (my ninth!). This one was my toughest one yet for me. Lots of highs, lows, frustration, failures, and success. All of this, and more, will be discussed as I detail the development of my entry, The Wizard of Worth.

Day 1

I had a hard time with this theme. In the days before theme selection, I looked at the possible candidates and wrote down some ideas for each one… except this one. Of course, “Your Life Is Currency” was selected and I spent almost 3 hours thinking of an idea.

Once I got a working idea (my son helped with some suggestions), I decided to create some graphics first, which is something I normally do not do. I knew I had to create graphics at some point, and I wanted to give Aseprite a shot to see if I can handle it.

At this point, its about 2:00am, five hours into the Compo, so I decided to call it a night. At the end of Day 1, I had some graphics created, and a basic game where the enemies chase down the player.

Day 2

I got about 5 hours of sleep, got up, and went back to work. I added some particles, a coin retrieval system, and a player shooting system. After a few rounds of playing this game, I came to the conclusion that its terrible! So discouraging.

I had about 10 hours of solid development time and the game was horrible. I took a couple of breaks during the day and came back to tweak and add/change features, and every time I played my game, I hated it more. No matter what I tried, it was just not fun, and I was so discouraged that I decided to take an extended break.

Day 3

I said I was taking an extended break… how about a 24 hour break? That’s what I did. During that time, I thought about whether I should continue, give up completely, or start with a new idea. After speaking with my wife and son, I got some pretty decent ideas on how to improve the game, and that started the drive to finish and submit this game.

I wanted to add a lot of things… more minions to chase you, different types of minions, multiple weapon types, and more. The problem is that it is now very late on Sunday, and I only have a few hours left.

I improved the player shooting (shooting towards the mouse pointer), added a back-story, sound effects, some additional graphics, and the title and game over screens, and submitted later than usual, but before the deadline. These changes really improved the game, and its much more fun to play.

What Went Well

  • Despite the ups and downs during the event, I did submit an entry.
  • Even though I had very limited experience with Aseprite, I managed to create some graphics (and some crude animation) using that tool.

What Could Have Gone Better

  • The 24 hour period where I “gave up” really put a dent in the time left when I decided to re-enter the compo. I wanted to add different minions and demons, each with a unique strength and weakness, but I ran out of time.

Conclusion

Looking through several of my other LD Post-Mortem posts, it looks like I fall into the same pattern where Day 2 is a bit discouraging, but I always manage to find a way to improve and finish.

This Ludum Dare was no different, but the lows were unprecedented for me; to a point where I walked away knowing I would not come back. If it were not for some encouragement from family, I would of packed it in and regretted the lack of submitting a game for the first time. I am glad I went back and continued.

[divider]

My CoronaSDK Text Manager Proof of Concept

I have been developing a text manager library for use with CoronaSDK. Below is a Proof of Concept video that shows what it can currently do. I am planning on using this library in all my existing (and new) projects.

I am considering releasing it as a plugin in the Corona Marketplace, but I am not sure at this time. I guess it depends on whether there is a demand for this.

[divider]

From Unity To Corona

In 2018 I released a mobile app named Tappy Easter. In 2019 I released an update. Well, not really an update, more of a complete rewrite. Version 1.0 of Tappy Easter was written in C# using Unity. Version 2.0 is written in Lua using CoronaSDK.

This article will document my experience writing the same app using two different languages in two different game engines, and will cover the great and not-so-great of each.

Background

I have been using CoronaSDK since 2012 and have written several apps currently on the iOS and Android play stores. Some time in 2016 I picked up Unity since I wanted to try my hand at a 3D game. I spent a lot of time learning Unity, developing games for game jams, but I wanted to release something to the app store. Even though it was a 2D game, I decided to create Tappy Easter using Unity as a good test case.

Design

The game’s layout is fairly simple: a title screen, a level select screen, and the game screen, and some additional pop-ups and menus to move between the game scenes.

The game scene consists of a series of Easter baskets that are tapped to move a colored egg. The controls are quite standard and very simple from a development perspective.

The level select screen is a bit more complex… it consists of 20 level buttons on two panels. The user can scroll between two panels and can only select levels that have been unlocked. In this scene, the 20 level buttons are built using either a locked or unlocked graphic and if the level is unlocked and previously played, the number of stars that were awarded are also displayed.

Unity Development

Development took approximately four months, and it went very well. The Unity interface makes it easy to lay out your game screens, and I like using C#. Unity UI development is awesome, and the text features of TextMesh Pro give the game extra polish.

In addition to some assets I previously purchased, I also decided to purchase a couple of assets to make development a bit easier for this game. The code I wrote for swiping and tapping screen items was not really working as well as I wanted, so I purchased an asset to handle the mobile gestures. I also purchased an asset to simplify other features found in mobile games such as game services, advertisements, and rating systems. Since these features are platform dependent, using an asset to mange this was a no-brainer.

Development was a breeze… no issues with coding or screen design. It was now time to test on my devices and upload to the app stores.

Time To Compile v1.0

It felt like I spent more time getting the app to compile than I did to develop it, and this was becoming more and more frustrating.

You would think that adding Google Play and Admob would be easy since they are both Google products, but this was an exercise I never want to go through again. These libraries seem to be incompatible with each other since each library includes older versions of files that the other library needs. This caused so many incompatibility issues. After several weeks of research into the issue, it seems trial and error is the only way to get this resolved. Finally, I could get the app to compile and run under Android, but I am not 100% sure how I did it or whether I can do it again.

Now on to the iOS version. I imported the Xcode project generated by Unity which resulted in several hundred “warning” messages and some errors. Reading through tons of support messages, it appears that 200+ warnings can be ignored, but I don’t feel ignoring that many warnings is a great solution. Admob errors were also fussy, and again, I am not sure how I overcame the errors, but I got to a point where it compiled and ads were being displayed.

After more days than I can remember, I now have a working Android and iOS build, so time to put them on the app store!

Working On The Update

A few weeks later, I wanted to tweak a few things and put out an update which seemed a bit more difficult than expected.

I updated all my plugins, including Admob and Google Play (I had to due to some required Google changes), and again there were errors caused by file incompatibilities. This time, no matter what I did, I could not get these 2 plugins to play nice together.

What I also found interesting with the iOS build is that the file size of the v1.0 build was 120mb! Looking at the Unity logs, a lot of unused files and asset demo folders were included during the build, and I could not understand why. Reading through some forum messagess (since my question on the forum went unanswered), it appears that iOS builds do not really exclude everything that is not needed.

At this point, I decided not to update the app, and let it ride in its current behemoth state. Early in 2019 I decided to revisit the update and had the same issues. The frustration level was off the charts, and I convinced myself it would be easier just to start again using Corona… which is exactly what I did.

Corona Time

My previous experience with Corona, and utilizing the sound and image assets created for the Unity version, allowed me to put an improved version of Tappy Easter on the iOS and Android app stores in under 1 month.

Corona is somewhat of an underrated 2D engine, but it is robust and established, and this made development quite easy. There is a lot of things that Corona does that require a bit of work in Unity:

  • I did not have to manage aspect ratios and screen sizes. Just place your images where you want them, and Corona will handle it appropriately, no matter what display.
  • Admob and Google Play actually work without hours of tweaking. Include the plug-ins and start coding.
  • XCode not required!!! Just choose File -> Build and Corona will compile an app to an IPA file without needing a Doctorate in Xcode, and will create an Android APK file without needing to install all the Android libraries.

In order to have really nice fonts in Corona, I had to create images of text. Since this app is English only (at this time), that’s not an issue, but I would have to create text image files for every language I want to support.

As a result, I am currently working on a Corona plugin that will manage fancy text and I am encouraged by my results so far. My free plugin (GBC Language Cabinet) simplifies the management of language support, so utilizing this library with a text library should provide a great solution to multi-language fancy text.

My Unity vs Corona Experience
 UnityCorona
Development Time4 months1 month
File SizeiOS - 120mb
Android - 33mb
iOS - 11mb
Android - 10mb
Additional AssetsFingers Touch Gestures
EasyMobile Pro
none
StrengthsVisual Editor
Text features
3D
"One Button" build
WeaknessesXCode frustrationNo visual editor... images must be coded to screen
Text features
Conclusion

I love working with both Unity and Corona, and it seems that each tool has its strengths and weaknesses. No one tool can do it all.

For 2D mobile development, Corona (to me) is the better choice… it’s a great way to release a game quickly and easily. Tappy Easter is one of those games where Corona was the perfect choice.

For desktop, 3D, or perhaps more complex mobile games, I would consider using Unity. There are some really complex games written with Corona, as well as some desktop games, so the Corona platform would still be a consideration when evaluating my game requirements.

I do wish Unity could build mobile apps more simply, like Corona does.
Building a desktop app with Unity is so simple, so it should be possible to improve building for mobile. Building the app seems more complicated than actually developing it, but maybe I’m just spoiled.

[divider]

My Year-End Game Development Review

Another year in the books… I guess its time for a review of my 2018 game development work, and planning on what I want to do in 2019.

2018 Accomplishments

Looking back, it was a busy year (busier than I thought). Here’s some of the things I accomplished, with links to more detail.

Stuff Still Up In The Air

Will I ever finish SMS: The Next Mission?

Back in 2014, I wrote and released Space Mission Survival for mobile platforms. Back in 2015, I decided that this would make a great PC/Console game, and I started work on porting (actually, re-writing) Space Mission Survival to PC and I added some extra modes to play the game using graphics and sounds available in the 1970s, 1980s, and 1990s.

Over the past 4 years, I stopped and restarted development so many times (seven times, I believe). I get close to completion, but that extra 20% needed to release it always discourages me.

  • Do I add a “Shmup” mode? Remove it?
  • Would people pay money for a game that plays exactly the same in each mode?
  • Based on lack of any feedback, does anyone really care if it is released at all?

In my last post, I said I will finish it to release, and I will at some point. It’s so close to completion at this point. It’s better than sitting on a hard drive.

Same thing for Johnny’s Flip Book Adventures. The Ludum Dare version ended with such a great rating, and it seems to be a favorite of those who played it, but I have serious doubts that it will sell well, let alone be noticed, and that is also discouraging.

2019 Plans… Somewhat Undecided

I am finding that I have some other interests I want to pursue outside of game development. After years of waffling, I decided that I am going to learn to play the piano/keyboard. A wonderful Christmas present from my wife will help move that dream along.

I am also finding that I enjoy woodworking and I have a few projects that I want to start (and finish). I started working on a bench last year, and I also have a couple of things on the “to do” list.

2019 will start my 8th year in game development. As 2018 winded down, I find myself questioning whether I should take some time away from game development to take a breather, and dedicate more time to pursue the other things I mentioned. Right now, I am not sure.

These interests will naturally take away from my development time. Currently, I have these development items on the list:

  • I started on an update to Tappy Easter, and I hope to get it out within the next month. I am currently working on some visual improvements, and I am investigating other monetization options.
  • The re-write of Johnny’s Flip Book Adventures is well underway, and I would like to finish it in 2019, with the goal of a mobile and Nintendo Switch release, but as I mentioned I am having some internal thoughts on its overall success.
  • I am still undecided what to do with Space Mission: Survival. I need to decide once and for all what to do about its release.
  • I am toying around with releasing a new space-themed spelling game (I guess an Alphabeta Asteroids: Mission II).
  • Maybe some minor updates to my Object Pooler library.
Conclusion

What a busy 2018 flying under the gamedev radar! I guess I will see where 2019 takes me and what I feel like working on. Only time will tell.

[divider]

Johnny’s Flip Book Adventures – November Status

I just wanted to post a screen shot of both the classic “Space Mission Survival” mode and the Ludum Dare 42 mode of Johnny’s Flip Book Space Adventure.

Development is going well, and I am happy with the results.  I am currently working on audio, and after that I believe I will be working on a configuration/settings screen.

Keep checking here as well as on itch.io for updates.

 

[divider]

Johnny’s Flipbook Space Adventure – Development Underway!

I decided that my Ludum Dare 42 entry, Johnny’s Flipbook Space Adventure, deserves an official release, so I have been working on a rewrite which will be released on PC, Mac, and hopefully consoles. There are two reasons I decided to continue development.

First, the game was very well received by the Ludum Dare community. After every Ludum Dare, I think about continuing development, but since this game scored so well, I think that this one should be improved so it can be released. I plan to add and tweak a few things to make game play better.

My second reason is that I think the game I was working on, Space Mission Survival: The Next Mission, would make a great add-on. You can read about my on-again, off-again development of SMS:TNM but to summarize: I love that game, I’ve made a lot of progress, but I get waves of doubt and discouragement in developing it since I am unsure of it’s success for various reasons (I still have plans to release that game, but a flip book version fits in well here).

So, Johnny’s Flipbook Space Adventure will have two chapters: an enhanced version of my Ludum Dare entry, and the classic Space Mission Survival game released to mobile years ago, but with the new flip book style. I think this will be a great game, and I am excited about its development. I hope to get a game play video out soon, and I am hopeful that a playable beta can also be released.

[divider]