Author: Min Yong Kim

  • TanksVsJellyfish – Non-colliding Mobs

    It’s weird, but all through my life, productivity always came in spurts. I’m not sure how long this round will last, but this time I’m getting an extra burst of inspiration from my children as they love seeing the updates and get really excited as lots of the ideas are being inspired by them.

    Hopefully, my one or two friends who still follows me enjoys these updates too 😀

    Read the rest

  • Progress on TanksVsJellyfish!

    Well, I’ve decided to conclude my journey with Diggem and mark my first game as completed. I started up my second project and I’ve already taken advantage of so many lessons learned and also implemented some unconventional strategies for game development vs what I’ve read in the industry, but worked pretty well in enterprise software.

    Regardless, here’s a prototypey video of some of what’s in store!

    Read the rest

  • 18 Levels!

    I know many of you have been at the edge of your seat awaiting more gem finding fun! Now there are 18 levels and a scrollable level map! Adding newer levels is going to be simple and I’m in a good place to add more meaningful progression into the game.

    I’m going to spend a little time now figuring out what is going to be next and I imagine it’s going to involve getting some reward for beating levels and something to spend your reward on. I realize I should also make it a goal to keep adding levels at a specific interval. Maybe 18 new levels every month.

    After that I’m going to think of additional twists in puzzle solving. I have a few ideas involving different kinds of bombs, but maybe mashing up other puzzle game elements will come into play.

    As always, thanks for all the friendly support and feedback!… Read the rest

  • Unity TileMap Bug

    I’ve run across a mildly infuriating issue that I finally resolved. If you look carefully at the roof of the windmill in my level selector, you’ll notice that it disappears when I scroll up and reappears when I scroll down.

    I’ve done many a Google / StackOverflow / UnityForum searches to no avail and it wasn’t clear to me how to solve the problem. I originally though it was an issue with me using a ScrollRect with a TileMap, but I took the content out of the ScrollRect, manually moved the camera to still see the same artifact.

    It seems the actual problem is the hidden bounding box/size of the TileMap. In the inspector view of the TileMap, you’ll see no properties allowing you to see or change the size.

    However, I was finally able to identify the actual problem by sheer luck. I randomly inserted another object further from the original tile that I had drawn, delete that same … Read the rest

  • A tutorial feature!

    I’ve finally wrapped up the tutorial feature to Diggem. It seems as though the best way to write a tutorial feature is to also write a “Minesweeper” solver. So due to all the complexity, plus my family duties during the holidays, the tutorial is about 10% of what it could be, but it’s a great start.

    Now I’m going to address some lower hanging fruits like more levels and start the power ups soon! It’s time to build “Mo features!” I’m very appreciative for those of you who are still supporting me. Thanks for the patience!

    Also, if you have any feedback or criticisms, I’m happy to take that input into account!… Read the rest

  • 100 Active devices!

    Another achievement! I’ve managed to make a game that at least 100 people are willing to keep on their phones!

    So subtle humor aside, all of the amazing tools that are available, have really offered an instant gratification model to building games. I’ve recently implemented Unity analytics, which is super easy to implement and definitely helping me know if I’m making the right choices.

    When I first released the game, I noticed that lots of people would play, lose, get an ad and then proceed to uninstall. That was likely due to the original logic that showed an ad in between each game. So I made a tweak of making ads show between games only if 60 seconds passed after the first win. This would give players enough time to warm up to the rules of the game and be rewarded before, presented with an opportunity for an ad.

    I then saw the numbers of uninstalls drop and the number … Read the rest

  • 100 Installs!

    I’m super excited to see that Diggem hit a milestone of reaching 100 installs.

    Thanks to my family and friends that contributed to some of those installs. This is a truly awesome journey. I added a dedicated page to the game, which includes a change log for those curious on the engineering side what’s going on. There are also other really fun aspects of game development that I want to share.

    First, while I’m very happy to reach my first 100 installs, I do recognize there are many other important metrics to track. Currently I’m watching data on retention and a few interactions. I believe that there are still a handful of features to implement to offer a better experience while playing and also more data to guide me.

    Next, besides time, I’ve also put a small investment into visual assets and advertising. What shocked me is how effective the advertisement platforms are. I created a “easy button” campaign using … Read the rest

  • Diggem

    Hello friends! I’ve created a game called Diggem, which is a spin of the classic game, Minesweeper. The goal is to provide an experience that offers the same challenging puzzle with more room for forgiveness and rewards!

    I’m having a blast building this and really look forward to adding more features that players will enjoy! This is an initial iteration, if you enjoy classic Minesweeper, it would be awesome if you could download this game and give me your feedback!

    You can find “Diggem” on the Google Play Store or follow the link to review it on your favorite web browser. the rest

  • EntityFramework – Migrations Gotchas

    Wanting to be a little more thrifty on a side project, I decided to roll with MySQL and EntityFramework. There were a few gotchas, outside of the normal tutorial and I’m just putting this out here to save time for anyone else who may have had to deal with the issues I ran across.

    Data Model defined in a separate library

    Most of the 101 examples have the data model included in the MVC, WebAPI or Console/UI project that is typically the startup project. However, if you have your data model defined in a separate project don’t forget to add the “-StartupProjectName” argument when invoking any of the migration commands.


    enable-migrations -StartupProjectName [DataModelLibName] -ProjectName [DataModelLibName]
    add-migration -StartupProjectName [DataModelLibName] -ProjectName [DataModelLibName]
    update-database -StartupProjectName [DataModelLibName] -ProjectName [DataModelLibName]

    This argument is actually telling the migration command where to look for the configuration of the providers and the target database to migrate. If you have everything configured in the shell startup project, then … Read the rest

  • XamarinForms – Overriding PageRenderer and NavigationService

    After further implementation on my pet project, I realized that my previous solution on the page renderers would cause the NavigationService to fail from going back. So with more experimentation, I’ve discovered a way to preserve that functionality and still allow the page renderers to override the default view functionality.

    using Xamarin.Forms;
    using Xamarin.Forms.Platform.Android;
    [assembly: ExportRenderer(typeof(FooPage), typeof(FooPageRenderer))]
    namespace FooApp.Droid.Renderer
        public class FooPageRenderer : PageRenderer
            private Android.Views.ViewGroup parentView;
            private Android.Views.View origView;
            private Android.Views.View newView;
            protected override void OnElementChanged(ElementChangedEventArgs e)
                var activity = this.Context as MainActivity;
                var newView = activity.FindViewById(;
                parentView = activity.Window.DecorView as ViewGroup;
                origView = parentView.GetChildAt(0);
    		private void Restore()
    			if (origView != null)
    Read the rest