payday
===[ Enter the Asteroid Smart | April 23rd, 2013 ]===

So I recently bought a Parrot Asteroid Smart (http://www.parrot.com/usa/products/asteroid-range/parrot-asteroid-smart). It's a car stereo; specifically, a double-din head unit that runs Android. Yes, I'm that big a nerd.

In my first MR2, I had a CarPC - an EPIA mini-itx board, running Windows XP, connected to a 7" touchscreen monitor. This was cool but it was a ton of work just to get all the hardware behaving. I finally got things working after many weekends and dead battery close calls. Then I started writing some C# (.net 1.1!) code to play music and drive the navigation software I was using.

Sadly, that MR2 and I parted ways when I moved out to NYC 5 years ago. But now I'm back in Los Angeles, and with a new MR2! So it's time for CarPC v2.0.

I wasn't really looking forward to building a full PC again, though. That was fun the first time because... it was the first time. So,
I was delighted to see that in the 5 years of me not having a car, a French company - Parrot (the same guys who make the AR Drone!) - had created a head unit that's a dream come true for us car PC guys. I was on the fence about it, but after a couple weeks now of having it in the car and working, I have no regrets. Sure, it's not exactly the latest version of Android, but - it's rootable, the UI is fast and responsive, and the hardware just works: a GPS, a couple USB ports, BlueTooth connectivity, and a mic for voice control. I can't wait to start writing code for it.

Install was super easy. If you want it down in front, where a radio normally goes in the MR2, it's easy - grab a harness and you're done. It's very shallow and would fit there with no problem at all.

But, I wanted it up top - my original CarPC's touchscreen was up on top of the dash, and it was great because navigation was easily readable. Fortunately, I had kept my navhood from my first MR2, so I had all the parts.

And even more fortunately - the ASTEROID fits up there! It's really shallow, so it easily fits under the navhood, and no portion of the screen is obscured. The navhood frame fits it perfectly.

This was a huge relief, and wasn't even that difficult to install! I had to extend all the wires of the harness, by roughly 3 feet, but that's not a difficult job, it's just a bunch of soldering and heat-shrink wrapping everything. Then it's just a matter of drilling a hole in the back-left corner of the "pocket" on top of the dash. The hole has to be pretty big so you can wedge the connectors through, but there's nothing remotely near there you have to worry about drilling into.

So... it lives! Photos and more details about the software side coming soon!

===[ mkdir cuttlefish2 | May 16th, 2012 ]===

So - the Cuttlefish Engine is changing direction.

The Cuttlefish Engine and Designer were first conceptualized, years ago, when the iPhone had just come out, Android was a far-off up-and-coming platform, and everyone was expecting Microsoft to also enter the fray at some point. I envisioned a neck-to-neck, 3 horse race - Apple, Google, and Microsoft. Seeing that each company embraced a different language - Objective C, Java, and C# - the best path towards being able to write a game once was to write it in an abstracted scripting language (CuttleScript), and then have a compiler (the Designer) "build" CuttleScript into each platform's native language.

But today, reality is: iOS is where the action is. iOS still accounts for the vast majority of players and revenue. Android takes a small chunk, but game-making on Android is tough because of the varying hardware, and nobody's buying anything on Android anyway. WP7 is similarly forgettable. Today's business model is, release something on iOS, and if it's successful, port it to Android. Then, if it's REALLY successful (like Angry Birds), Microsoft will pay for a port to WP7.

This is not the neck-to-neck race I planned for.

But there's more: the overwhelming feedback I've received tells me that most indie developers don't particularly like huge, all-in-one engines, mainly due to the learning curve. Today's indies are pulling stuff from a wide variety of sources, and they're all working in their native IDEs. They're interested in small, standalone components, running as close to the metal as possible, but with great documentation, and flexibility. They want source code, and they want everything free and open. Box2D is a great example of what indies today really embrace.

It's time for a reboot.

The existing "all-in-one" approach to the Cuttlefish Engine and Designer is over. Those of you who have already purchased have the latest code, and know your support options. If anyone's getting ready to purchase specifically because they LIKE the all-in-one approach - check out GameSalad, or Corona. Personally my money's on Corona to emerge as the victor in that arena, but GameSalad is really great as well and a lot of it just comes down to personal preference. And of course there's Unity if you're looking for something more powerful.

Anyway - from the ashes of the Cuttlefish Engine of today, a new and better engine will emerge: Cuttlefish 2.0, built in C++, atop Cocos2D-X. This new engine will be completely free and open source (though I still reserve the right to charge a few bucks for complex editors). It will be comprised of small, modular, standalone pieces.

Cocos2D-X is a C++ port of Cocos2D. It's very cross platform, supporting many more platforms than just iPhone and Android. Cuttlefish 2.0 will be cross platform "capable," which is marketing-speak for me initially just concentrating on the iOS implmentation of platform-specific features (GameCenter, IAP, etc), but leaving the other platform-specific interfaces stubbed out.

I'll also be blogging about it. As I create key components, I'll throw a few words up here. This is as much for education as it is for future documentation - not only the "what does this method do?" kind of docs, but more meaningfully, why I decided to go this way or that. By following along here, you'll see the pieces go in as they're formed, and watch them evolve over time.

So - here's to the future, and watch for more soon!

===[ Rendering Revamp | June 6th, 2011 ]===

I've been focused on cleaning and streamlining some code, as part of getting the iOS versions of Cuttlefish working. A large part of that effort is in the renderer, which has come a looong way since its beginnings as "a couple of tweaks I wanted to make to cocos2d." Will post an update after these efforts are completed, but it'll be another week or two.

Also - the new HD7s hit AT&T yesterday! The phone is basically the WP7 equivalent to an Evo. It's got a giant screen... and supposedly, Mango! Excited to try Cuttlefish out on Mango.

===[ Cuttlefish @ Barcamp! | May 25th, 2011 ]===

Last weekend I hit Barcamp NYC, and gave a quick demo of the engine, and the Designer. Was meaning to attend both days, but ended up only doing a little bit of Saturday morning - a shame because I usually get a kick out of just going to random presentations. So if you're here because of that presentation... welcome!

On the code side - fixing up crash reports, and doing a bunch of stuff to iron out the code generation process. When I'm done it'll be vastly less irritating to setup engine customizations - the designer will copy the entire source code for the engine into a seperate project, and it'll then reference that project, instead of just copying the DLL and referencing that. Should make it much easier to modify engine code, as well as step through it!

Also fixing a couple of behind the scenes things - pushing an update that adds, say, a new template, is a bit more complicated than I'd like it to be, and while I remember the process right now, I'm sure it's only a matter of time before I forget some critical step and send out some sour update that breaks everyone. So, simplifying all that stuff - doesn't translate into anything that you guys can see, though.

And... iOS building! Getting closer!

===[ Cuttlefish and LD48 | May 1st, 2011 ]===

So, Ludum Dare is in its home stretch... I kinda bowed myself out of the actual compo this morning as I realized my priority was to get a sample game complete for my engine, not necessarily to finish in 48 hours. This morning it came down to "doing things in the fastest possible way" vs "doing things in a way that people can learn from later," and I decided I wanted to go slow and be illustrative. So, I'm going to miss the deadline, but I'll end up with something ultimately more valuable. Fun times though, and I'm very excited to see what games come out!

This makes 2 complete samples almost done. The other sample is breakout, which is in the final stages of documentation now... might be tonight if I'm feeling more like writing instead of coding. Watch for them both to appear here real soon.

On the new features front - just finished work on a whopper. You're now able to "cast" a game object ID directly to a specific game object, and then call public methods on that game object. Say you have a game object named foo, and a method in there called DoSomething(). Assuming m_fooID is a valid ID of a "foo" game object, you can now do: S.foo(m_fooID).DoSomething(). This is way more intuitive, faster, and easier than making a custom event that only foo responds to (though custom events are still very useful in some cases).

Also - player profiles are getting "methodized." Player profiles have until now been just variables, but LD48 really brought out the need to have methods on there as well. For example - say your player profile has variables holding the max HP, max MP, current experience, and experience level. When a character "levels up," you want to increase HP max and MP max, increment experience level, and set current experience back to 0. All easy stuff, but right now there's no good "home" for this code. Soon though, you will be able to make, say, a LevelUp() method of the player profile, and call it via S.LocalPlayer.LevelUp().

To accommodate this, I'm planning on changing the "Vars" tab in the project properties - going to move the global variables to their own tab, move variables of the player profile will go off to the list window, and make it so in the tab you'll be able to create methods. It'll look a lot like editing a script module. Player profiles won't have states but they will have the ability to respond to a few events (Created, ShuttingDown seem like obvious wants).

===[ Cuttlefish Update | April 23rd, 2011 ]===

I've posted an update with a litany (<< awesome word) of bugfixes, plus a new crash reporter tool. If you've already downloaded the designer, just run it and it'll prompt you to install the update. Let it download, and the designer will exit... then wait for the installer to come up, hit next twice, then relaunch the Designer and you'll be on the latest and greatest.

===[ Cuttlefish, T Plus 24. | April 22nd, 2011 ]===

Going forward I want to make a site specific news roll, but for now these will be here...

We're launched! Some of you hit an early bump when going through the tutorial, where it'd crash inside the new project dialog if you chose certain devices. That's been fixed, and if you run the designer again it will auto-update (a good test!). There's also what may be an odd issue where the auto-generated code doesn't compile because it's formatting the physics screen diagonal number using a comma, which in code looks like a call with two arguments to a function that only expects one. Tracking that one. Also added some clearer instructions about what dependencies you need to install - essentially, you need either Visual Studio C# Express or full VS2010, plus the XNA framework, and the Windows Phone Tools. You also need the .NET 4 framework, but I think most systems have that installed already, and that the installer will catch if you don't have it and grab it for you.

In general though - it's on track! Many thanks to all of you that plunged headfirst into the unknown and were kind enough to report back on problems instead of just giving up. They're really valuable and it's really great to see people starting to explore! Please do though use the support center, on the site - I want to keep the issues open and public so that nobody wastes their time reporting a dupe. Also if you've hit something that technically works but was counter-intuitive... I want to hear about those as well. Not just bugs... anything!

Finally - I realized I forgot to hook up any sort of "catch crash, prompt for what happened, send to server" code. I'll definitely be adding that soon.

===[ Cuttlefish Engine Beta One | April 20th, 2011 ]===

Big news today!

I'm excited to announce the first public beta of the Cuttlefish Engine, a completely new approach to cross-platform mobile game development. Cuttlefish writes the code for you, and it can write in several different languages - Objective C for iOS devices (iPhone, iPad, etc), C# for Windows Phone, Java for Android, and more. Cuttlefish takes all these different platforms and languages, and unites them under a single tool: The Cuttlefish Designer. It's your secret weapon for creating games on any platform: mobile, web, and beyond*.

To download, point your browser at http://www.cuttlefishengine.com/content/download.

Today's beta release includes complete support for Windows Phone. You can build a game completely within the Cuttlefish Designer, and release it to the Zune Marketplace. And it's good timing - there's a real lack of games out there for Windows Phone, and that spells opportunity for independent developers. So, even though this is still beta software, there's no better way to test it than to build and sell a game!

The "builders" that output iOS (iPhone and iPad), as well as Android, are forthcoming, but you can start using Cuttlefish now to develop for these platforms - we've included simulators for both. You can work with their native resolutions, and see your game running - just not on the actual devices yet. When the update arrives, you'll be good to go - everything you've done will transfer over. A simple build, and your game's on device.

Also, we're excited to announce that the engine itself is completely open source. This means that, not only will you be able to extend the engine easily to fit your needs, but also, you'll be able to step all the way into engine code in the debugger, and when you build, you get 100% of your game code. You will need a designer subscription to build for devices, but everything else is free.

So give it a shot! This is the fruit of two and half years of active (if quiet!) development, and the passion I have for it is only getting strong. I'm really excited to share it, and I encourage you all to check out the brand new site, give it a download, and fill up the forums with what you think!

===[ Two Posts in One Month?!?! | April 26th, 2010 ]===

something must be going crazy.

Nope - everything here is pretty normal. The Cuttlefish Engine is coming along quite nicely - after all this time (almost a year now) it's exciting to see it all finally come together. Shipping an engine is way different than shipping a game - this is getting to be less and less true, but still, with a game, most of the code you've written you know isn't going to see life beyond the game DVD. With an engine, it's different - with an engine, shipping is the start of the fun, not the end. I'm definitely looking forward to getting your guys' opinions on the engine, and seeing what you're going to create with it.

===[ Off into the wild… | April 9th, 2010 ]===

So, I left KAOS. I went to GDC, got some great feedback on the Cuttlefish Engine, and decided to concentrate full-time on it. I'd been thinking it had some really awesome potential, and was constantly disappointed in the lack of time available for it. After all of the positive feedback at the conference, I quite simply couldn't have lived with myself had I decided not to pursue it wholeheartedly.

I'm staying in NYC (because why would you ever leave?!?!), so if you're local, hit me up for beers or something. I'm going into a bit of a communications blackout, so email's best.