Archive for the ‘Breaking Block’ Category

Jan 6

Happy New Year! I hope that all had an enjoyable holiday, and feel re-invigorated for 2018 as I do. Before I talk about progress on Dehoarder 2, there is one piece of business that I need to take care of.

iOS End of Support

Support for Prepare for Warp, Breaking Block, and Vintage Pachinko on iOS devices will end on March 3, 2018. This coincides with the date that my Apple Developer Program membership expires. I am choosing not to review my membership for a number of reasons; there are two main ones that matter.

First, without resources to continue active development (i.e. all my time needs to be focused toward Dehoarder 2), the cost of the Program, including the cost of maintaining Apple hardware exclusively for this purpose, relative to the trickle of revenue that it now generates cannot be justified. The second reason is more personal. The mobile market with its F2P microtransaction nature never really suited me. It made me feel sleazy and uncomfortable and did not reflect my ideals. While Vintage Pachinko is a virtuous app that only charges a small upfront cost, I feel that Prepare for Warp and Breaking Block were cheapened by the application of the F2P model to them.

So what does end-of-support look like? Apple has this to say on the subject of Developer Program expiration (emphasis mine):

If your Apple Developer Program membership expires, your apps will no longer be available for download and you will not be able to submit new apps or updates. You will lose access to pre-release software, Certificates, Identifiers & Profiles, and Technical Support Incidents. However, your apps will still function for users who have already installed or downloaded them, and you will still have access to iTunes Connect and free development resources.

My interpretation of this is that anyone who has already downloaded my apps can continue to enjoy them on the devices that they were downloaded to, but the apps would not be available to install on new devices. I find this unfortunate; I would much rather everyone have access to install apps that they have already licensed on any future devices, however, I do not have control over Apple’s policies.

It seems that there is a way to back up the app package from within iTunes, in order to keep the app to install on any new devices. I have not tried this so I cannot vouch for how well it would work.

Long story short, please download the iOS apps to all devices that you desire them on, and complete any package backups in iTunes before March 3, 2018.

The Android versions of Vintage Pachinko, Prepare for Warp, and Breaking Block will continue to be available for the foreseeable future. These apps currently have zero maintenance cost on the Android platform so there is no incentive to decommission those versions.

Now that that has been handled, back to talking about Dehoarder 2 and progress made in December.

Squashing Bugs and Paying Down Debt

Most existing bugs have been fixed. This includes one particularly ornery bug relating to items spawning from boxes, where items would spawn within a nearby wall and would often get stuck and become non-interactive due to how the game divides up the world into physics zones. It turns out that the spawning volume was unintentionally being offset, and it actually was in the wall!

A lot of technical debt has also been paid down. I was able to fully decommission several old systems that have long been replaced by better designs. Having all of that clutter removed will make the next phase of development much easier.

Engine Enhancements

The next big effort will be a final round of game engine enhancements, mostly centered around supporting more advanced event scripting to meet the demands of the story. These enhancements will also fix the remaining bugs and implement a couple of frequently-requested features that came out of the GDEX 2017 feedback.

After these enhancements are complete and I’ve started adding content around them, I should have a much better idea as to when the game will be ready for alpha.


Whither Prior Games?

posted by Duke
Nov 11

Today I wanted to talk a bit about my plan for my back catalog of games. It’s great to have a history of games, but sometimes measures must be taken to reduce costs and consolidate brand power. If you are a fan of Smiling Cat games, please read as the below may affect how you enjoy those games. My players are important. If you will be negatively impacted, please comment and let me know.

TLDR;

  • EARL’s Warehouse and possibly Chroma Invader to get free Windows releases.
  • Retiring from Kongregate and GameJolt coterminous with these Windows releases.
  • Thrust or Bust and Snowflake support to be discontinued at that time as well (and Chroma Invader invader if it does not get a Windows release).
  • Considering Dropping iOS support.

Web Player Games

Unity Web Player died long ago, a casualty in the war against insecure browser plugin technologies. Unfortunately, I have 4 games that I have released exclusively on the Unity Web Player platform (ordered by how awesome I think the game is):

  1. EARL’s Warehouse
  2. Chroma Invader
  3. Thrust or Bust
  4. Snowflake

EARL’s Warehouse is a project that I’m particularly proud of. This game has a lot going for it, both gameplay-wise with its interesting puzzle mechanics, and technically with its home-rolled voxel engine that actually performs well in Unity. EARL’s Warehouse also highlights what was so awesome about the Unity Web Player’s performance – in some areas (the penultimate level of The Depot specifically) it was pushing over 1 million triangles per frame, through a web browser, in 2013.

Chroma Invader Screenshot 6Chroma Invader was a quick project that was my take on the quarter-eating days of the early “wave progression” arcade games. This was my second game, and it was the first game of mine to earn any sort of recognition, picking up “Browser Pick of the Week” honors from the now-defunct diygamer.com site back in December of 2010.

Thrust or Bust will always hold a special place in my heart as my first game release, back when my doe-y eyed dumb ass thought that all I had to do was build it and they would come. Its flaws are apparent to me today, but it was a very ambitious first effort, much larger than it should have been for my first game.

Snowflake was kind of a psuedo-jam game, created over a long holiday weekend. If you haven’t played it, don’t bother; it’s not particularly good by any measure.

I have Windows builds of all of these games except Snowflake. My current thinking is to release the Windows build of EARL’s Warehouse as a free download in the run-up to the release of Dehoarder 2. I’m not entirely sure about Chroma Invader, but I might release the Windows build of that game, too. Unless there is someone who really MUST have Thrust Or Bust, though, I was going to retire that title. Forget about Snowflake, it is being retired; it would be too much effort to bring the project from what was probably Unity 2 all the way up to Unity 2017 just to create a new build of what I consistently rank as my worst game.

In addition to these Unity Web Player exclusive titles, I also have Unity Web Player versions of my first 4 Ludum Dare entries (Dehoarder, City Beneath the Surface, Dirty Fork, and Werepenguin’s Escape). These have always been available as downloads for Windows, so I have much less concern there.

Most/all browsers now refuse to load Unity Web Player unless you hold your mouth a certain way, if even that. Given that, I think that my game pages on Kongregate and GameJolt aren’t doing anyone much good any more. When the Windows releases of EARL’s Warehouse and Chroma Invader are made available, I will be retiring all Unity Web Player content from Kongregate and GameJolt.

If I have any Mac/Linux users who are still enjoying these games on Kongregate or GameJolt, I want to hear from you! Unless I know that there is some demand for Mac/Linux builds of my current Unity Web Player content, I won’t feel that it is worth my limited time to target these platforms.

Mobile Games

Currently I have 3 titles available on mobile:

Vintage Pachinko
Breaking Block
Prepare for Warp

My biggest problem overall on mobile is iOS. With the release of 64-bit, I do not have 64-bit builds of any of these games anywhere near ready. These titles were all created in the days of Unity 4, so they are several versions behind, and I know at the very least that Vintage Pachinko requires some effort to work with the newest version of Unity. In addition, as someone who lives primarily in the Windows world, developing for iOS is a huge pain. It requires me to maintain a separate Mac computer, which never gets turned on unless I’m creating a iOS build of an app, which means that it always needs hours and hours of updates and upgrades before I can even start being productive.

Prepare for Warp was delisted by Apple earlier this year seemingly because it simply hadn’t had an update in a long time. It didn’t have a history of crashes or any complaints that I received, but I got a nastygram all the same that said update or else without outlining anything that specifically needed to be updated. I’m not happy about that, but nor am I going to create updates for the hell of it when I have nothing of value to deliver, especially for my least popular mobile title. That’s insanity. Breaking Block is probably next.

Also weighing heavily is the fact that iOS sales are not even covering the developer program fee at this point. We’re far enough down the long tail of these titles that the revenue is approaching zero. They were never making me rich, but at least they used to pay to keep themselves going and then a bit more.

Because of issues like these and the distraction that they create for my current development, I’m seriously considering pulling out of the iOS market entirely, though I haven’t come to a final decision on that yet. If I don’t pull out of iOS, I will require a few weeks away from Dehoarder 2 in order to update my entire catalog in one big push. Hearing from those of you who want to continue to see these apps on iOS will certainly sway my decision. My final decision will probably be made in February when my annual tribute of $99 to Apple is due.

If I do let my Developer Program subscription lapse, the net effect is that my apps would no longer be available for download through the AppStore, but would continue to function on devices on which they were already installed.

I have no complaints about the Android environment, and as long as they continue to make my life easy I will maintain the Android/Play Store versions of these apps.

Full Steam Ahead with Dehoarder 2

Of course, my immediate future platform-wise lies with Steam. Dehoarder 2 at the very least will be on Steam, and probably several project after that. The future is difficult to predict, however, as the above clean-up plan shows.

Speaking of Dehoarder 2, I just received the latest batch of models from Arvex, and will be working today to integrate them into the game. With this latest delivery, we have just one more batch to go, and then I think the object set for the game’s release can be finalized.


Aug 8

Laser Frenzy EndA friend and I were discussing recently some of the special physics requirements of block breaker / Breakout / Arkanoid style games. When I put together the physics for Breaking Block, I already had a pretty strong idea of how I wanted the physics to work, though I noticed that the internet had mostly half-answers. I found that many people were asking about Breakout-style physics. Since complete information is so scarce, I’d like to share some lessons that I’ve learned while developing the physics for Breaking Block.

Be Wary of Using Physics Engines for Such a Simple Case

Physics engines are by their nature generalized, and a block breaker game, when implemented properly, has some very specific physics rules. The generalized rules of engines get in the way. Beyond the obvious things like needing to disable gravity and ensuring preservation of kinetic energy, sometimes, no matter what you do, an object takes a weird bounce in an engine-based rigidbody collision, and the angle of deflection is nowhere near acceptable (i.e. ball bounces off corner of block and travels horizontally, killing the game).
You can try to hack around this stuff all you want. At the end of the day, though, just applying movement in script using angle and velocity is cleaner, more performant, and more correct for this case. Using a physics engine for a basic block breaking game is the proverbial “Shooting a fly with an elephant gun”. Consider that the physics rules for the original arcade Breakout weren’t even implemented in a computer program at all; the rules were hard-wired into logic circuits.

Simple Ball Reflection for blocks

Handling deflections off of blocks and walls is trivial if you keep track of your ball’s angle as a direction vector, and keep your blocks orthogonal. On a vertical hit, just invert the y component of the direction vector, and on a horizontal hit, invert the x component. One common question is how to tell whether a hit is vertical or horizontal. You could inspect the collision details and look at surface normals, but with orthogonal blocks, that’s a bit more complex than what is needed. Just take the difference in position (delta) between the ball and block, scale it by the inverse aspect ratio of the block (for example, if the block is twice as long as it is high, divide the x component of the delta by 2), and see which component of the delta is smaller. A smaller y means a vertical hit, and a smaller x means a horizontal hit.
Here’s an example, with an additional Sign check added to make sure the ball is traveling toward the block. That check prevents the ball from destroying two adjacent blocks simultaneously.

var delta = (ball.transform.position - block.transform.position);
// apply aspect ratio via the scaleFactor vector
// For a horizontal block twice a wide as high, use Vector3(0.5f, 1f, 1f)
// For a vertical block twice as high as wide, use Vector3(1f, 0.5f, 1f)
// For a square block, use Vector3(1f, 1f, 1f), and so forth.
delta.Scale(scaleFactor); 
if(Mathf.Abs(delta.x) >= Mathf.Abs(delta.y))
{
    // scaled delta x was larger than delta y. This is a horizontal hit.
    if(Mathf.Sign(-direction.x) == Mathf.Sign(delta.x))
    {
        ballDirection.x = -ballDirection.x;
        ScoreBlockHit();
    }
}
else
{
    // scaled delta y was larger than delta x. This is a vertical hit.
    if(Mathf.Sign(-direction.y) == Mathf.Sign(delta.y))
    {
        ballDirection.y = -ballDirection.y;
        ScoreBlockHit();
    }
}

Keep the Ball In-Bounds, No Matter What

Don’t rely on colliders and other softer barriers to keep the ball in-bounds. For instance, a ball might get stuck between a moving block and a wall and pop through. Things get chaotic. Include a hard bounds check, and reflect the ball in the appropriate direction if it leaves the bounds of play.

if((direction.x > 0f && transform.position.x > fieldMinimumX) ||
    (direction.x < 0f && transform.position.x < fieldMaximumX))
{
    direction.x = -direction.x;
}

if(direction.y > 0f && transform.position.y > fieldMaximumY + 0.1f)
{
    direction.y = -direction.y;
}

Let the Paddle Control the Ball Angle

It is very common for the contact position between the ball and the paddle to govern the angle the ball will take. This is very easy to do using the horizontal difference in position between the ball and the angle. Remember to take into account any change in paddle size if your game allows it. More about that ClampBallAngle() function in a moment.

var newAngle = (
        -(ball.transform.position.x - paddle.transform.position.x) * 60f / enlargeScale
    ) + 90f;
newAngle = ClampBallAngle(newAngle);

Prevent Degenerate Angles

In every FUN block breaking game I’ve played, I’ve never seen the ball travel at an angle that was close to horizontal or close to vertical. Horizontal angles are not fun because inevitably the player winds up waiting for the ball to trolley-car endlessly between the two walls. Vertical angles are not fun because they make it too easy to aim shots and volley balls with minimal effort. Steps need to be taken to prevent the ball from taking one of these angles.
If you are only using reflections to modify the angle everywhere else, then this only needs to be done when the ball is launched or collides with the paddle. This function is written with that in mind, a more general solution would be needed if the angle needs to be fixed in other situations. Note that in this case, it is much more convenient to express the ball angle as an actual angle rather than a direction vector.

private float ClampBallAngle(float angle)
{
    if(angle > 150f)
    {
        return 150f;
    }
    if(angle < 30f)
    {
        return 30f;
    }
    if(angle <= 90f && angle > 75f)
    {
        return 75f;
    }
    if(angle >= 90f && angle < 105f)
    {
        return 105f;
    }
    return angle;
}

Make Sure Your Collisions Happen

One drawback to not using a physics engine for movement is that you lose the engine's ability to do some of the more dynamic collision detection for cases where an object completely passes through another between updates. There are several ways to compensate for this:

  • Use a shorter update loop, and make sure it is a loop with a guaranteed time interval. In Unity I am using FixedUpdate for the really important physics, and have the fixed update rate set at 100fps.
  • Limit your top speeds. Do the math to ensure that an object at its top speed cannot move more than 25% (arbitrary number, adjust as necessary) of the way through another object in a single update frame.
  • Use raycasting. Cast a ray from an object's previous position to its current position to see if it passed through anything. I did not wind up having to take this approach with Breaking Block, but it is viable and I have used it in past games. Unity actually has a very handy SphereCast() function that is like a raycast, but accounts for an object's radius.

Track Dead-Object State to Prevent Incorrect Simultaneous Collisions

This is critical to things like multi-ball play, laser power ups, anything that makes it so that a block can be hit by two separate objects in the same frame. It may not apply to all engines, but in Unity at least, when you request that an object be destroyed, the actual destruction is deferred until the end of the update loop. This causes a situation where a block can be scored as destroyed twice, by two different balls, by a ball and a laser, by a ball and an alien, etc.
To prevent this, the first collision should set a death flag on the block. The collision code should check this flag, and take no action if the block is already dead.

In Conclusion

Hopefully these tips will help you in your quest to build a block breaker game. A block breaker game is a good exercise for any aspiring game developer, with a strongly-defined problem, limited scope, and lots of room for creativity.


Jul 28

Title Screen Breaking Block continues to have strong daily download and engagement numbers. Between both platforms, Breaking Block has been downloaded over 2,500 times, and currently has a 7-day average daily user count of 485. iOS downloads still lead the pack, with Android showing some strengthening over the weekend thanks to a very brief and very interesting ad campaign.

I honestly thought things would have started petering out after the ad campaign ended, but to my pleasant surprise, downloads have started to pick up again, with yesterday being my strongest day since the iOS launch. I’m not sure how much longer the downloading will continue at this pace, so I will enjoy it while I can.

Thank you again to everyone who has downloaded and everyone who continues to play Breaking Block. Please remember to rate the game on your respective platforms!



Planet Level Compared to any of my other game releases, the Breaking Block Appstore release has been amazing.

I had received Appstore approval late Monday night. I got up early the next morning, before any activity had been reported. I had cleared my schedule so that I could spend the day marketing the release for both platforms.

Chartboost usually has the most-frequently updated statistics, so I was using that to monitor the progress throughout the day. The updates started coming in at roughly an hourly rate: 10, 20, 40, 70, 175 – the faster the number grew, the more excited I got. By the time it hit 20, it was already a record for one-day downloads. All prior records quickly became meaningless.

The number was still climbing by the hundreds when I went to bed. Yesterday, I found out that the final, official total for the first day was 980. Nearly a thousand, on Breaking Block’s first day on the Appstore. I think the main factor that fueled this quick rise was Breaking Block’s appearance in the Free list directly on the front page of the Arcade Games section of the iTunes store. It looks to me like all game releases hit this list, but only the newest releases closest to the beginning of the alphabet each day are shown on the front page, as far as I’ve observed. Should this be the case? I’d think it would be better to randomize the front page choices for egalitarian exposure. At any rate, I’m grateful for the exposure I received.

Yesterday, Breaking Block moved into the second day section of the Free list, and predictably, activity slowed considerably. It is still far above the level of traffic I am accustomed to, though. It does not seem that the Apple numbers are official yet, but there were at least 300 new downloads yesterday. Apple’s official numbers for yesterday show an additional 452 downloads. Many players also returned for a second day, according to Chartboost’s “Uniques” metric, which measured that the number of unique devices that ran the game yesterday was far greater than the number of new installs.

Reviews on both Appstore and Google Play have been positive for the most part, with the only actionable negative feedback so far being over my choice of tilt-only controls. If demand from interested players warrants it, I will add a different control scheme, though telling me I’ve already lost you as a customer is not a real motivator for me to do so =P.

I’m not sure where things will go from here. No matter what happens, this is a release I can be proud of, with nearly 1,300 downloads in 2 days. Thank you to everyone who has downloaded, played, and rated the game. I hope you enjoy it for many weeks and months to come!


Wow!

posted by Duke
Jul 22

Laser Frenzy End The iOS launch of Breaking Block is going better than I had dared to hope. Already today, Breaking Block has been installed 376 times according to my Chartboost stats, and the night is still young. I’m absolutely ecstatic!

Breaking Block has now surpassed Vintage Pachinko in total downloads to become king of the Smiling Cat stable of games, with 523 installs across both platforms.

And it is not showing any sign of slowing down – Chartboost’s numbers are slow to update, and there is a bit of ad revenue unaccounted for in the current numbers that suggests these numbers will continue to climb through the evening.

I won’t know until tomorrow how I’m doing with in-app purchases, since that’s when the official numbers from today should come down from Apple.



Pyramid Level Breaking Block is finally available on the Appstore for iOS. Yes, the game that seemed somehow minorly hexed against the Appstore approval process has been thoroughly dehexed and is now in its proper place, thank you very much (three rejections vs. one legitimate yet obscure issue, fixed, with a successful appeal of the third rejection on the 24th day of the process).

On the Android side, Breaking Block keeps doing better and better. With very little post-release marketing, it still is drawing a steady number of downloads per day, and daily game activity keeps increasing. Breaking Block has already surpassed Prepare for Warp in total downloads, and at this rate, it will soon surpass Vintage Pachinko in downloads. Now that the iOS version is out, I am kicking off my post-release marketing campaign for Breaking Block on both platforms starting today.

One thing I could use on both platforms is more ratings. So far, there have been only 7 ratings for 140 downloads. If you already have the game, please take a moment to rate it so that the game continues to receive more exposure. Yes, I know it forces you to join Google+, and that really sucks. Maybe you can find a creative use for the unwanted Google+ account. ¯\_(ツ)_/¯

It’s ironic that what is admittedly my least original mobile game in terms of gameplay is turning out to be my most popular downloaded game so far. I won’t be abandoning my long-term plans to develop original games anytime soon. Knowing it is possible to do a successful iteration of a classic is just another weapon in my arsenal.



City LevelThe good news: Breaking Block has already surpassed the 100 download mark on the Android side, making it my fastest moving mobile launch yet. I’ve not even started marketing in earnest yet since I am still waiting on the iOS launch.

The bad news: Apple found a bug during their review of Breaking Block, forcing another round of submit-and-wait. The bug prevented in-app purchases, but only if you have zero blocks, which is why it was not caught during my testing. It makes sense that in their testing they would make a beeline for the IAP before earning any blocks. The latest binary is in review now, so hopefully on Monday it will be approved.

Lesson learned: If I want to do simultaneous mobile launches in the future, I can’t use my past experience of getting Vintage Pachinko and Prepare for Warp through the approval process the first time as a guide on lead-time. I need to be leaving at least 3 weeks.



Classic Gameplay I just flipped the switch to make Breaking Block live on the Google Play store. It will take a few hours for it to appear in the Google Play Store, so it should be available for download in the wee hours of the US morning.

Unfortunately, it looks like the iOS version is slightly delayed. It seems I did not get my package submitted to Apple in time to get approved for tomorrow’s release. Next time I will try to get that timing better. There is still a chance that it may get turned around tomorrow. I am not counting on it due to the upcoming holiday weekend, so I am stating my mia culpa’s now. Likely it will be approved Monday or Tuesday of next week (7/7 or 7/8).

I hope everyone enjoys my newest game, whether you get to download it tomorrow or early next week.


Breaking Block is RTM

posted by Duke
Jun 28

Planet Level Today I put the last of the finishing touches on Breaking Block, ensured one last time that everything is in good working order on both platforms, and submitted to the Appstore for approval. I’m actually a couple of days late with this, so I’m hoping that since this is my third Appstore game, the approval process will be quick. The Android side of things is all ready to go.

Now, I am at a crossroads. There are several viable projects that I could choose take up next. I still have more ideas for mobile games, however, Steam has also caught my attention and I have a couple of game ideas that would work really well there. Whichever way I go, I’d like to have something to show in time for OGDE in October.

Here is my short list of potential projects, in no particular order:

  • A 2.5D, tiled 3rd-person puzzle game for mobile platforms
  • A vocabulary/word puzzle game for mobile platforms
  • A tycoon-style sim/builder for Steam/PC (including Steam Early Access)
  • Dungeon’s Fortune – An episodic JRPG for Steam/PC with procedurally generated dungeons
  • Dehoarder 2 – First person decluttering mayhem (Yes, I’ve noticed that y’all are still talking about the original game!)

As you can see, this is enough work to keep me busy for at least the next 3 years. If you have any thoughts as to which project I should work on next, please let me know! I’ll be deciding in the next couple of weeks.