Thursday, May 22, 2014

Greetings from Turkey!

On a short break from game development to see family. Development of our 2nd game, Enigmatic, will start in about 1.5 weeks upon my return to Boston. It's already designed and prototyped, all of the core mechanics are written and functional. Enigmatic is a 2D riddle-trivia platformer. If that description makes you go "huh?" or "what?" I don't blame you!

The core idea of the game is players are given a short riddle or piece of trivia before each level, usually with a one-word answer. The answer is the key to playing the corresponding level...more to come soon!





Friday, May 16, 2014

Dev Blog 96 - Post-release

With release comes a big weight off my shoulders - countless hours of work, worrying, and nerves all finally all gone! But that doesn't mean I'm done, or that I don't have anything to do anymore.

First and foremost, today I'll be addressing a few minor issues:
  • Version number in-game is different from build number
  • End of level credits need updating
  • Add a message before Main Menu loads to disable "vertical only" phone settings, don't load game until landscape is enabled.
Next, I'll work on getting cosmetic skins completely working, but that's a bigger issue than I can address today. I'll be hopping on a plane to leave the country and see family late tonight, but I will take care of these simpler issues and continue working while I'm gone (I'm bringing my laptop of course!).

Update: Just completed all of the minor fixes, uploading new builds for all platforms now.

Update 2: All platforms have been updated to the latest version 2.2. Gunna go submit to the iOS App Store to begin the 1-2 week approval process now.



Get it on Google Play




Thursday, May 15, 2014

Dev Blog 95 - Released!

Chromacore has been released across all targeted platforms! Now live on Google Play, Desura, and itch.io:


Get it on Google Play






Chromacore will soon be available via a Humble Store widget, the Bundle Bandits game bundle, and on iOS.

Dev Blog 94 - Release Day!

Today's the day, release! Running builds for Windows, Mac, and Linux now. Everything should be up and ready by 5PM!

Unfortunately it's looking like I'll have to push without the in-game shop completed. I just published one last effort to fix the problem, we'll see how that goes. I wrote all of the equip and unlock functionality last night, but I'm still running into the same issues.

Update 1 @ 2PM: Heh. So I may have fixed the equip bug (it's almost poetic how close to release this occurred). I'm going to go ahead with release and then continue working on the in-game shop. Pending the results of the push I just published, I may temporarily disable the store.

Update 2 @ 4PM: I did make some headway on the equip bug, I think that it's fixed. But some of the functionality for the skins appearing during play isn't there. I've temporarily disabled the skins and started running the release builds to get the game out there. I'll work on cosmetic skin functionality post-release. Didn't want to have to do it, but I simply didn't have enough time between when I actually received the skins and release to get all of the functionality implemented. Maybe if everything worked perfectly the first time it'd be done on time, but that almost never happens.

Wednesday, May 14, 2014

Dev Blog 93 - Last day of development

Today's the last day of serious-crunch-time-development, I plan on spending all of tomorrow running builds, uploading the release versions across multiple websites, and getting the word out. Speaking of which, keep an eye out! Chromacore will be available on IndieCity, itch.io, and the the Bundle Bandit  soon after release.

So, on the last day, what is there to do?

Well, first and foremost fixing the equip bugs. The insight I wrote about last night wasn't correct - I thought perhaps an Update( ) function was failing to run every frame, but that wasn't the case. However, after proving the Update function did run every frame via Time.timeSinceLevelLoad, that actually gave me a clue for a potential fix, which I pushed this morning and will test soon.

Next, implementing some last minute artwork I got this morning.

Next, re-cutting level 6 (or cutting it entirely).

Lastly, cleaning out the project. Deleting old/unused files to reduce file size.

Other than the bug fixes, all of this is straightforward and should be done within an hour or two. I also moved some of the levels around this morning, I switched levels 2 and 4, as well as 3 and 7. Level 4 is a pretty great exemplification of Chromacore's gameplay, and I felt it should be the very next level players try after the tutorial.

Excited for release tomorrow, but fairly nervous about getting the shop bugs fixed in time. I might need to disable the in-game shop and enable it sometime after release once it's fixed. If that's the case I'll probably scrap everything I have and re-write all the code from scratch. It would suck to have to do this, since I pushed back the release date and worked my ass off the past 2 weeks specifically to get an in-game shop done.

Update 1 @ 3PM: All of the straightforward stuff is done - new art added, old files deleted, level 6 and 8 have been cut.

Still working on a the equip bug fix, pretty much the last thing I need to do to be release-ready.

Update 2 @ 8:30PM: Still working on the bug fix, I'm making headway on it. Spent some time contacting dozens of press and youtubers about release. Also fixed up level 20's background transitions, they weren't working properly.

Update 3 @ 10:30PM: Just pushed another update with more debugging code. I've made the decision, I'm going to make a backup of the in-game code and then scrap all of it and re-write everything. I originally wrote this code during the tail-end of an all nighter, so I must have done something wrong that I'm not seeing now. I'll use this last update to better understand what wasn't working (hopefully) and use that to write it better and write it right.

Tuesday, May 13, 2014

Dev Blog 92 - Cutting levels 6, 8

I spent a few hours re-cutting level 8 (in-between debugging the equip code). Boy oh boy did that go awry. The original level 8 wasn't very good, a few notes were mis-timed and the gameplay wasn't very exciting. So I re-cut the parts that were mistimed, and I don't know what I did but it broke the latter half of the whole level.

I ran my automated suite of tools for building the levels just as I always do (and just as I did when I re-cut levels 4 & 5) but somehow Notes 78-90 got mixed up, and placed all over the level, completely out of position and mis-timed. I tried resetting and starting over a few times to no avail.

So this brings me to a tough decision. Release is Thursday. No chance I'm pushing it back, because I've already pushed it back weeks (and I leave the country Thursday night to see family). If I cut the level from release entirely, that leaves me with 19 levels. I don't like the odd number much, and I still have to redo level 6 tomorrow. I'm thinking if level 6 is even remotely a pain in the ass, I'll cut that from release too so it's an even 18 levels upon release.

If I do decide to take this course of action (the decision will come tomorrow night) I plan on re-cutting these 2 levels at some point, and adding them to release later down the line for free. The music and art for these levels are too awesome not to have in the game, it sucks to have to even consider cutting them, but time is a finite resource unfortunately. With release impending, and after working from 8am to 11pm today, I don't have much more of it to spare.

Update 1 @ Midnight: So the workaround I wrote about in the last update of Dev Blog #91 didn't fix everything, but it did give me a small clue. Just wrote some more debug code to see if the insight the workaround gave me is correct - if so I have a fix in mind. Bedtime for now, will see the results in the morning.

Dev Blog 91 - Refacotoring

Spent some time refactoring the equip code, hopefully to fix the functionality problems, but more so to get an idea of where the problem may be.

While I'm waiting for the results to show up on Google Play I'll be re-cutting the earlier levels.

Update 1 @ 1:45PM: So there's been some puzzling progress. The equip functionality code works for Teli, but apparently doesn't work for the 2 other skins. The code is almost identical for both - the only difference is an additional if statement for the other 2 to check if they've been purchased, which I've confirmed is true and should pass the if statement.

I've added additional debug code to find out if what I just said is true, whether or not the if statement passes. If it does pass the if statement, that's actually bad news since I'll truly have no idea why the 2 skins' code behave differently from Teli's. If it fails, that means that the boolean flag for purchase checking must be altered between where I have debug code tell me it's value, and when the if statement checks it.

Update 2 @ 4:30PM: I cut off the last 30 seconds or so of Level 10 to improve the timing, and after re-playing level 8 I actually couldn't find anything wrong with it. My notes say Notes #20-22 and the last 10 notes are off-timed, but I played 8 several times and couldn't reproduce it. About to address level 6, this might be the hardest one. I'm considering re-cutting it entirely; the problem is everything after Note 39 is off (there's 60 total). Re-cutting the only latter half might not do it.

Update 3 @ 5PM: Out of suspicion, I played level 8 again. I dunno why I didn't hear it earlier, but it's actually pretty off-timed starting after Note #22 until the end. Might re-cut this level entirely as well.

Update 4 @ 10PM: This one bug is damn mind boggling. I've narrowed it down to a single if statement, in fact the if statement I was referring to in update #1.

The reason it's so confusing is because I have a debug log in Update( ) showing me the value of the boolean flag checked in this if statement every frame. It returns true, every frame. Yet somehow, right before the if statement is checked, it's false. There are only two places it's set to false, when it's declared as a variable (which only happens once upon initialization) and if the skin isn't purchased (and that code is only run once). Neither of these take place anywhere near the if statement (in terms of order of execution) which is why it makes zero damn sense.

Either there's some black magic going on, the Devil chose today to screw with me, or I'm seriously dense and can't figure this out. As a work-around I changed the if statement, so instead of checking the boolean flag, it checks the text value of the equip buttons. If the text reads "Equip" then it's eligible to be equipped. Additionally I made sure that the text is only set to "Equip" if the skin's been purchased, otherwise it's "Locked". That way, this still functions as the check for "isPurchased" that the boolean flag was supposed to be. Hopefully this work-around will nix it. I still want to figure out the actual bug though.

Monday, May 12, 2014

Dev Blog 90 - Bundle Bandits, Bug Fixes

We're happy to announce Chromacore will be part of the Bundle Bandits game bundle, coming out just a few days after release this Thursday! More info to come!

An update on the in-game store: It's half working now. I say half working because it looks like I've solved the problem of an item purchase being communicated from Google Play to Soomla to my code, which is a big step in the right direction. Now I think the problem is with my own code's logic, which I'm going to run through and check now, hopefully this will all be resolved shortly.

Side note: The bug on the NVIDIA Shield has been fixed, the directional pad and auxiliary joysticks are now disabled, which means they cannot trigger the persistent pause bug either. Hooray!

Update 1 @ 5PM: Just discovered and fixed one bug within my own code. This could potentially fix everything, or there could be more bugs - just pushed to Google Play beta to test. Also added a few more sprites to clarify the ability to switch between skins.

Update 2 @ 8PM: Discovered and fixed yet another small bug. Testing.

Update 3 @ 11PM: Getting closer, rewrote some of the equip code so it's cleaner and simpler, to help identify any bugs I'm not seeing. Also added respawning sprites for the cosmetic skins, as well as one of the animations that was missing.

Sunday, May 11, 2014

Dev Blog 89 - Crunch time

Just finished purchase and equip functionality for the in-game store. Now when skins are purchased, the skins will change accordingly, and players can switch from skin to skin. This functionality has been pushed to the Google Play beta for testing, not yet confirmed to work.

It's officially crunch time! In order to release on the 15th we need to:
  • Make sure the skins are 100% functional 
  • Finish re-cutting levels 6/8/10
  • Fix the thumbpad and directional pad bugs causing persistent pause

Once these 3 things are done, we can officially release on Google Play and Desura, and submit to the iOS App Store for approval and a delayed release.

Update @ 1AM: Ran into a few bugs with the store purchase and equip functionality, worked on fixing these all day. Published the first wave of fixes around 5PM, just published another wave that I'm currently testing.

Update @ 4AM: Decided to pull an all-nighter to address these bugs. After a lot of reading and research I'm not entirely sure what's going wrong. I believe the issue is one of two things:

  • Soomla (the open-source framework I'm using) isn't properly getting or sending the message that a purchase has occurred. Users can make a skin purchase and get charged for it, but nothing changes in-game.
  • If Soomla is working properly, the in-game logic I wrote isn't working properly.
Going to add some debugging code, maybe run the Soomla_debug.jar, try to get an idea of where the problem is.

Also working on re-cutting 6 now.

Saturday, May 10, 2014

Dev Blog 88 - New skins implemented!

New cosmetic skins are finally finished and implemented! These new skins Scarf and Skull Kid, done by artist Jen Tella, are incredibly unique and awesome!

Since we're giving Chromacore away for free, these skins can be bought for $0.99 each, as a way to support the developers. For Desura, since the default lowest price is $1.99, the game comes with both skins unlocked!

Spending the rest of today writing the code to actually unlock and equip these skins, and will probs start re-cutting 6 if I have time.

Friday, May 9, 2014

Deb Blog 87 - Finished feedback, cleaning files

Finished implementing Casper's feedback, the menu screens are much cleaner and consistent now. Also cleaned out a bunch of old and unused mp3 files today to reduce build size. Will begin re-cutting 6, 8, & 10 today, hopefully I can blow through all 3. Once these are done I'll get to work fixing a few bugs I found on the NVIDIA Shield that I *think* are device specific.

Update 1 @ 6PM: Decided the bug fixes were more important - just pushed a fix for them to Android beta test. Disabled all joystick inputs besides XYAB which should resolve 2 bugs. The first was that the thumbpad and directional pads on the NVIDIA Shield were causing pause triggers, and the second was that these would be persistent pauses (as in, you couldn't unpause the game without quitting and restarting).

Update @ 7PM: Also fixed an issue where the death sound FX was playing multiple times during a falling death. This will now only play once or twice before respawn.

Thursday, May 8, 2014

Dev Blog 86 - Level 5 almost done

Level 5 has been re-cut, still in the process of re-implementing the Notes (adjusting their positions, adjusting MasterNotes for proper background transitions). This part is a little slow going since there are now 194 Notes (up from 113) with the new cut, making Level 5 our new record holder for highest amount of notes!

Once 5 is done I'll get started on 6, 8, & 10. About to leave for another meeting with my game designer professor Casper!

Update @ 9PM: Level 5 is finally done. Took forever, but it's done and much much better. I found 2 bugs while working on level 5, one was that some obstacles were throwing NullReferenceExceptions because I wasn't assigning the player character programmatically. The other was the last 10 obstacles' audio clips were double the volume of others, making them inconsistently loud.

I got a handful of awesome feedback from Casper today. I'm gunna switch gears for the rest of the night (to give my brain a light rest) and start implementing his feedback. I just don't have it in me to start re-cutting levels 6/8/10, I'll get to those tomorrow.

Update @ 1:15AM: Implemented most of Casper's feedback, will finish tomorrow. Bedtime!

Wednesday, May 7, 2014

Dev Blog 85 - Recutting

Still recutting level 5's background track (it's an 8 minute level). Once I'm done I plan on taking a look at 6, 8, and 10 to re-cut as well.

The plus side is these 3 aren't complete trash, level 6 is off-time starting after the 39th note, only 2 notes in 8 are off, and the last 2 minutes of 10 (another 8 minute level) so these won't be as time consuming.

Tuesday, May 6, 2014

Dev Blog 84 - Working on Respawn

Working on re-designing and improving the respawn system to both clarify that the player has died and is respawning, as well as lessen the impact/jarring nature of the immediate respawn.




So far I've tried a few different approaches. My first idea was to pause right after respawn, have Teli's alpha fade in and out a few times to denote "respawning", and then unpause. This proved impossible after I discovered that any coroutines or invocations called before a "pause" is triggered, will exit after Time.timeScale is set to 0. So there wasn't a way I could pause, wait for the animation to finish, and then unpause. I tried a few tricks involving Invoke( ) and coroutines, which got me a little closer to what I wanted but ultimately didn't solve the problem.

The solution I will end up implementing (after writing this post) is two-fold:

First, right when death occurs I will have a text exclamation point pop up over Teli's head, paired with the death animation it should make it super clear the player character has died.

Second, after respawn occurs, instead of pausing I will let Teli continue as normal. However, here is where I will mess with the alpha values to fade in & out, to denote that Teli has respawned.

I think that this solution may still be a little jarring, but it's an improvement.

Update 1 @ 3PM: Respawning is done, successfully implemented the above two-fold solution. Also added a death sound effect.

Update 2 @ 8PM: Re-cutting level 4, trying to improve timing

Update 3 @ 9:30PM: Level 4 re-cut and re-implemented, sounds much better, timed perfectly. Re-cutting level 5 now.

Monday, May 5, 2014

Dev Blog 83 - Nothin' New

Not much to report, just grinding away on finishing feedback and re-cutting certain levels that don't sound as good as the latter levels.

Update 1 @ 10:45PM: Got a high-quality version of the complete Chromacore Soundtrack by Whizbang Music Productions up on YouTube and SoundCloud!


Also implemented update checking into the Main Menu. Now when the game loads it'll check a webpage against it's own in-game version number and see if it needs updating. This is targeted for desktop and mobile users that don't have automatic updates enabled. If it's an old version, Main Menu provides a "Update Available!" text link to the proper page (depending on platform) to grab it.


Almost finished with feedback implementation. The very last piece I am going to attempt to implement before release is improving the respawn system so it's less jarring as well as clearer. There are a few more pieces of feedback I haven't implemented, but at this stage I've decided to cut them. I'm setting a hard deadline of May 15th for release on Android and Desktop, with a delayed release on iOS (Apple approval process is 1-2 weeks). With less than 9 days to go, the final things on the docket are:



  • Improve respawning
  • Improve some earlier levels by re-cutting music tracks
  • Implementing last minute artwork
  • Last minute bug fixes (no known & unresolved bugs exist at this time)
  • Publishing on iOS
  • Spreading the word as much as possible

Looking ahead, I've already begun designing future gameplay modes for a Chromacore expansion pack, and have a 2nd separate game prototyped and ready to begin development.

Friday, May 2, 2014

Dev Blog 82 - Up and At 'Em

Despite working late till 3AM, I somehow woke up at a reasonable hour and got working. Just added new background art to levels 8 & 9, will spend the rest of today finishing off feedback implementation and start re-cutting certain levels (such as 4 & 5) that don't sound great at the moment.



Thursday, May 1, 2014

Dev Blog 81 - Late night tutorial improvement, small bug fix

Completely re-worked the tutorial to better convey some information, added a few nifty sprites to help teach the player the basics. Replaced entire soundtrack for tutorial level, and shortened it considerably, simply to teach player basics and jump into level 2.

While doing this work I discovered and fixed a small bug, the tutorial billboard text wasn't being displayed in the right order.

Got some rad new background art pieces, can't wait to implement them tomorrow.

Bed time now though =)



Dev Blog 80 - Implementation of Feedback (success/failure)

Today I fixed the level 9 master notes that were causing proper color transition issues, and pushed out a fix for the in-game shop to resolve the Google Play errors (yet to be tested).

I spent a few hours trying to implement feedback from game design professors and students. Gravity is now a little stronger (increased to 14 from 9.8) to make Teli fall a little hard and faster. I had to bump up his jumping speed from 6 to 7.5 to compensate, so Teli can still jump the same heights but fall down harder. This way I don't have to go through and re-design every level.

I also attempted to implement double jump and hold for extra high jump (separately) based on feedback. Both proved difficult, irritating, and seemingly impossible given the current way movement/gravity is implemented.

These would be straightforward implementations if I knew about them 8 months ago when I first wrote the movement/gravity code. Because I'm using a Character Controller and modifying the movement direction for jumping and gravity, I couldn't figure out a way to implement a double jump or extra jump. I tried dozens of different methods. Online resources proved unhelpful, most leveraged rigidbodies instead of Character Controllers.

I actually did get the "hold for extra jump" working, but in the opposite way it should have. If the player tapped the jump key Teli would jump  higher than if the player held it down (by a negligible and unnoticeable amount).

I decided to scrap both of these pieces of feedback. These would help improve gameplay a little bit, but are not essential. I would have to rewrite the entire movement/gravity system (which the entire game hinges on). Rewriting the system could potentially be very short and simple. Or it could be catastrophic and break everything. I don't intend on finding on which, since I've already sunk hours into this. This late in development, it simply isn't worth the effort. I'll be moving on the other feedback and features.

Update: Just got the chance to test the in-game shop fix, it worked!!! Purchases can now (probably) go through. I say probably because while the Google Play error is gone, I have yet to actually make the purchase to see if it goes through. I have the option to spend money or cancel, so it very likely will. I won't go through with an actual test purchase until I have the actual skins implemented, waiting on artist for that.

Luckily my friend's Android device that I'm using for testing has $1 on it from when I gave him a $5 Google Play gift card I received before interviewing with Google! Funny how that credit comes full circle.