Archive for the ‘Opinion’ Category

State of the Investigation

Friday, May 10th, 2013

So I’ve done a few scatterbrained posts lately that talk about things. Most of them had rather open ended conclusions, that were followed by wildly out-of-left field follow up posts. Here’s me making sense of that.

Evaluating Middlewares: Unity does good 3D, bad at JS

Unity’s “JavaScript” isn’t JavaScript, it’s better named UnityScript. UnityScript is kinda terrible, essentially being just a different syntaxed less featured C#. But var is allowed, so uhhh… *shrug*.

I still don’t care much for C#, but I think Unity’s 3D workflow is excellent. Fantastic even. I have 3D projects I want to do, and when the time comes, I’ve convinced myself I should do them in Unity.

That’s 3D only though.

Haxe NME is cool, impressive and all, but it seems more a home for Adobe Flash refuges right now. Adobe, I know not what they’re thinking. I’m very confused by what they’re up to anymore, so I’m glad the Flash community has a way out. That said, I’m not particularly attached to the stricter typed Ecmascript language used by Flash/Haxe/Loom. I like JavaScript. I think JavaScript is great. So I don’t entirely feel right with Haxe NME. Highly recommended for Flash devs and people not me. 😉

JavaScript is cool

JavaScript *is* cool. I’ve been working with it more and more lately. I made a game with Derek Laufman of Halfbot using JavaScript for Ludum Dare 26.

Toom09

Time was short during Ludum Dare, but we came up with some neat ideas, so we’re redoing the game. A “Director’s Cut” if you will. It’s still taking place in the one room, but we’re planning to make both the room and the interactions you have inside it way more interesting.

JavaScript is cool, but I’m hitting a limit of HTML5 Canvas 2D now in the latest builds of TOOM. Chrome is fine, but Firefox has seen a significant framedrop after adding a few more Alpha operations. I will be reintroducing frame skipping in to the code, but this doesn’t bode well for the near term “best user experience” of TOOM in the broswer.

That said, I fully intend to finish the TOOM Director’s Cut as an HTML5+JavaScript game. It just may be, before its time, when it comes to Canvas 2D performance. Working in JavaScript has been great, and inspired some really great alternative-to-Unity workflow ideas. I’ll come back to this. First though, what I think of App Packagers for Desktop HTML5 apps.

Packaged HTML5 Apps (Tool): Abandoned

In January 2012, I ported the unreleased Beneath Darkness prototype to some HTML5 packager. The company behind the packager was running a contest, and my intention was to enter the game in that contest. I wasn’t able to finish enough in time though, so I never submitted. That was fine though, as the winning games were definitely better and more complete.

The thing is, I can’t remember what that packager or the company was called.

It doesn’t really matter though. Like the Chrome Store, apps built for this packager were only for their proprietary HTML5 app store. I seem to remember a blue acorn, which may have been their logo. What disappoints me is that packager ran the game perfect. No issues with sound, no issues disabling linear filtering on image scaling, no issues loading files. Yet today, running the same prototype in both AppJS and Node-Webkit fails to load the map file. I’d be fine if Node-Webkit had no issues loading TOOM using PreloadJS, but it does. I might have been able to get NOOK working in Node-Webkit without any changes, but long story short I’m not happy.

Google’s Chrome App Packager stuff sounds like they solve the key issue (XMLHTTPRequest’s locally are okay), but it’s proprietary, and again only available to apps intended for distribution in the Chrome Store.

Even if it’s something that would be best fixed inside PreloadJS itself (support file://), that’s fine, but that’s not working 100% right now. I still have to do all my testing via a mini webserver running locally. My intent was to build a generic editor for a TOOM related project using HTML5, but I’ve decided against it. Building a Tool in HTML5 only saves me time if it works… right now… today.

I’m very unhappy with the state of packaging HTML5 apps as Desktop Apps.

Renstalled Empscripten, Embracing WebGL

NOOK, BEARly SEASONed, and the unreleased Last Gun prototype were made using Emscripten (C++ and JS). TOOM and the unreleased Beneath Darkness prototype were written in pure JavaScript.

I’m glad I went back to pure JavaScript for TOOM though, because HOLY HELL I learned how REALLY GREAT some of the features of JavaScript are. You know JSON right? Well it’s even better in JavaScript. 🙂

/nice-efficiency-things-about-javascript/

But like the headline says, I’ve since reinstalled Emscripten. My post from earlier today details this process, which was notably different than from when I did it 1 year ago. Better… except for the build time (70 minutes to build LLVM+Clang… and I had to do it twice).

/emscripten-2-the-emscripting/

And like the above article mentions, there’s now the AsmJS spec, which is an effort that makes JavaScript code run at only half the speed of native, versus the 6x slower than native I was promised last year.

I’ve been sort-of against WebGL, ironically, being an OpenGL guy. Against is a harsh word. More like, ignoring it. After all, Microsoft will never add it to Internet Explorer… or will they? Yes if the leaked Windows Blue version of Internet Explorer is to be believed, WebGL support is there now, so therefor coming soon.

Good.

What WebGL also brings is some potential Canvas graphics performance improvements. Your render code will have to be ported over to WebGL (OpenGL ES2), but with a little bit of batching, things get nice and quick.

https://www.scirra.com/boosting-mobile-html5-game-performance-with-webgl

Oh and Unreal Engine 3 now runs in the browser, thanks to WebGL and Emscripten.

So alright. If Unreal Engine 3 can do it, surely a WebGL accelerated 2D engine can.

Now for the final piece.

Squirrel! Like JavaScript but Nuttier!

Between work on the TOOM Director’s Cut… actually the other way around, I’ve returned to my Squirrel research in a big way. As far as languages go, Squirrel is very much like JavaScript, but with everything on my JavaScript wishlist already implemented and working great (operator overloading, separate integer and float number types, 32bit, delegates woo woo, etc). Here’s some exploration:

/2013/05/06/squirrely-things-about-squirrel/

My only beef with the language is that I’m comfortable with using var in JavaScript, instead of local like Squirrel uses. That said, they’re not the same, and even var in JavaScript is actually a problem: Such a big problem, that the EcmaScript 6 spec is introducing a new keyword let which works how you’d expect var to work.

Anyways, my mini-project of the day was to get Squirrel building in the browser (using Emscripten), and to build a very basic HTML interface for invoking the compiler and seeing the results. I’m betting that, since Unreal Engine 3 can run in the browser, it’s not unreasonable of me to expect instant execution of small Squirrel scripts. If that’s the case, then if paired WebGL, it may be reasonable to expect 30-60fps performance of a C++ game driven by Squirrel scripts. I’m not exactly interested in developing web games in Squirrel, but I’m investigating whether if I commit to Squirrel as a native game logic language, I can still generate playable web versions of games.

Long story short, I want the advantages I discovered in building TOOM in JavaScript in my Native Game Deving, and I already have proof that they do work.

Regrettably, I haven’t yet finished this Squirrel building project yet. Getting Emscripten working again ate up most of my afternoon (long Clang compiles). Then there was the power outage, and this blog post, so I think I’ve done enough for today.

I may try just compiling Squirrel with Emscripten, then I’m calling it a night.

EDIT: Yep. So far working just fine with NodeJS.

C++11 Support Feature Complete in Clang and GCC soon!

Now this is some awesome news. Clang 3.3 and GCC 4.8.1 are expected to be fully compliant with C++11 in their upcoming next versions.

GCChttp://gcc.gnu.org/projects/cxx0x.html
Clanghttp://clang.llvm.org/cxx_status.html

There’s still the problem of compiler vendors being slow to upgrade their GCC and Clang versions to newer ones, but this milestone should be a good kick-start.

Something also rather neat, Clang is adding C++1y (C++14?) features already. One that caught my eye, BINARY LITERALS! So just like you do 0x10 for the hexadecimal number 16, you’ll be able to do 0b11010011 to write binary. 😀

I have a header file, named Binary.h, that’s literally filled with every 8-bit combination of b0 to b11111111. Looks like I’ll be able to retire it some day. 🙂

End of Report

This post grew rather large ‘eh? Alright then, I’m done.

Conversation: Business and Fear

Wednesday, July 20th, 2011

From Monday, Gianfranco (whom I abbreviate as GB) was concerned that some of the guys might have been fear-mongering after a recent set of very sad sad videos. That catapulted me in to a rant about… well… yeah, it’s actually that way. Indie truths a-plenty.

The first begins on the subject of “big games are extremely risky”, despite doing one myself right now.

I had some upload issues with the prior video, which lead me to watching my video a few more times, and expanding on the subject of indies and failures.

Finally, I explicitly DON’T apologize for fear mongering, because we need it.

And there we have 17 some minutes of rant. I’m left feeling a little worried about some of the things said, but I’m glad to have said them.

Today is Wednesday now, so like I touch upon in that first video, I might have an announcement… or not… CMON YES!!!! I WANNA HAVE GOOD NEWS!!! RRRRRRRR!!!!

Introducing: The Indie Indie Conversation

Tuesday, July 19th, 2011

Hello there! I figured now was a good time to talk about a project I’ve been involved with for the past couple months now. Something we like to call, the Indie Indie Conversation. The conversation is a YouTube channel shared amongst a group of indie game developers where we talk about what we do, the challenges, and the lifestyle of creating games independently for a living.

I’ve personally failed many attempts at starting a regular video log here on my blog, and in retrospect that may have been the uncomfortable feeling of “talking to a wall”. All these attempts seem to lack the personal charm (not to say I’m charming) and comfortable honesty I think they needed to really work.

Mike Hommel, a friend, fellow indie developer, and fellow former co-writer with me on GameTunnel’s Monthly Round-up pitched the idea: Why don’t we try talking to each-other? Hence the conversation was born.

I didn’t announce this right away, as I wasn’t sure we were going to keep it up. Plus, I wanted to be sure and finally comfortable with my … ahem… “performance” in the video. I’m no public speaker, but recently I’ve been doing some of my best improvised recorded video work, and I’d like to start sharing them.

Above is a video where I talk about regrets of the past 6 years, being a full time indie. I think it does a great job capturing what we aim for in the series, and perhaps what’s special about it (honesty, trials, tribulations).

We create A LOT of content though, as the point is it HAS TO BE quick for us to make. As of this writing, we’re nearly at 150 videos, and 12 hours of content. Seeing how this is my blog, I’ll be picking, choosing, and sharing some of my best videos with you here, as I do think they are topical to my reader (hi mom).

If you’re an indie game developer that’s in the mood to burn away a day (or two), I recommend you dive in to the archives. Videos are added to the channel chronologically, and YouTube lets you sort in reverse order by clicking the field names, so make good use of that! Check us out:

http://www.youtube.com/user/indieconversation#p/u

I’ll be back with a few more posts of these, and content specific to me and my own games soon.

Ramping up for iPad: Smiles HD

Friday, March 19th, 2010

Alright! The iPad is coming soon, as is a brand new version of Smiles.

As we speak I’m putting the finishing touches on Smiles HD, the all new higher resolution and slightly redesigned iPhone game coming soon to the iPad.

Now, in the eyes of Apple I’m nobody special. So like many of you, I’ll be heading down to my local Apple store on launch day to pick me up an iPad… with one slight difference.

I’m in Canada.

Why that matters is that only the US is getting them on April 3rd. So in order for Smiles HD to be in the App Store for (nearly) iPad launch, we’re going on a road trip!

Agenda for April 3rd, 2010: 1. Go to the US; 2. Pick up an iPad; 3. Denny's

Using Google’s excellent cartography skills, it looks like my trip to the nearest Apple store in the US will take roughly 2 hours. Not bad, but by “road trip” standards that’s rather light weight. And thanks to Apple’s reservation feature, this trip wont even require camping!

Not my photo, but some friends and I did camp out several hours for the Wii. Again, we're in Canada. It was cold.

So as far as road trips go, this one wont impress any real outdoors-men. But hey, I’m totally going out of my way for it. As I see it, I need one. Not as an Apple fan boy (though I do love gadgets), but for business.

On making a living

Admittedly, my luck lately has been really awesome, but free trips and cars don’t pay the bills. Heh, “Oh no! Poor you! If you need money, go sell your free car!”! Heh, I’d rather not, but I’m also not exactly in financial danger right now. The car is an asset available to me if something does happen. But right now, I’m very optimistic.

I’m an independent game developer, and I work full time on my own games. Being able to say that is really awesome, and it’s something I’m extremely proud of. Self employed, my own boss, earning an income by my rules. You could say I’m “living the dream”. It certainly is mine.

If you follow any other game developers, you’ll note that the majority of them tend to fall in to one of two groups. Creating a big game in a year+, or creating multiple small games in a year. Prior to Smiles, I definitely fell in to the 1st group (2 year project that’s currently shelved). But I don’t exactly fit in to either definition right now. Smiles was a 4 month game, and a year and a half later my news is still Smiles HD this and Smiles that.

What’s the deal?

Smiles is a bizarre success story. As far as describing its success level, I’d call it the perfect middle. Financially it’s done well enough that yes, it’s clear that I can make a living from my own games. My costs are low, and I don’t have a team or family to support, so I can justify any deficiency in profit as being “the first game”. It also has critical acclaim. 5’s, 4’s, 4.5’s, high regard on every notable game site that’s reviewed it. It was a finalist in the IGF Mobile for “Best Mobile Game” in 2009. And this year it rocked Intel’s Atom Developer Challenge scoring 2nd in the early bird contest, and the “Elegance in Design” award. It even nabbed a Bronze in Samsung’s contest too. From all that, yes, I’d say Smiles is a success.

Am I a success? Absolutely.

Is my business a success though? Mmmmm… I’d probably shrug and say “meh” to that.

If you look to the first 3 year since leaving the day job, I earned nothing. Drained the savings a bunch, even threw down a decent chunk of change on outsourcing art. That’s fine though. As far as I was concerned, the money was meant for that. But though my costs are low, that money is still gone.

Smiles is an upward trend. As far as I’m concerned, it’s on the cusp of success in a big way. I really think it just needs to get in front of its audience, and the rest will all fall in to place. Perhaps if I was a month earlier on iPhone, it would have already. But hey, that wouldn’t have been as interesting of a story. 🙂

I am betting on iPad.

I have zero assurance that Apple will do anything for me, but I am ready to make launch. They could very well just ignore me again, but I’ll be there from the beginning this time. I’m hopeful, but we’ll see how this goes.

Actually, I’m betting on a lot of things. Netbooks, I think there’s big potential there in the long term. Other mobile devices, absolutely. A certain portable gaming console I’ve been vaguely hinting at, definitely! As I see it, Smiles will either become a bigger success as a macro product (the sum of all it’s ports), or it will breakout somewhere (which hopefully ripples throughout the entire platform portfolio). As I’ve said, I’m very optimistic, and I’m ready.

I hope the Apple community isn’t offended by my dramatic lack of exclusivity. I do hope it acts to reinforce me and my companies significance, but really, I gotta eat.

I think my direction makes an interesting story. When I get to the end of this platforms blitz, I’ll have a plethora of new targets for my follow up projects (one game I’m expecting to start in the next few months). I sure hope this works out. I’d love to be able to give a talk at GDC some year and be able to say “yes, it worked”. My story is starting to get really good right now, here’s hoping for a happy ending.

Coming up next for Smiles HD

Alright, now that I have that rant out of my system, lets talk details. I have a short term plan for the next few weeks I’m hoping to stick to. It looks something like this.

#1. Next Week: Release a preview/development log video.

As I’ve said, I’m finishing up the game now. I’m hoping to be done my TODO list well before the 3rd, and when I am, I think it’ll be a nice to do a behind the scenes demonstration of the game. A fun look at some of my iPad-less compromises. Essentially, to make my own small contribution to the iPad hype.

#2. Before the 3rd: Make press pack.

Pretty straight forward. I can take and make screenshots now, as well as draft up my sales pitch for the store, write a press release, etc. I suppose I can even release this early… I might just do that.

#3. April 3rd: Pick up iPad.

See above.

#4. ASAP: Submit to Apple.

I imagine Apple will officially allow submissions day 1, so sure, an option would be to just send it once we get the public SDK. Though I’ve played the game a lot, I wouldn’t feel right sending it without a good day of serious device testing. I’m not anticipating any real problems, though there’s always the possibility of being late overall, but even that currently seems unlikely. Best case, sent on Monday.

#5. After that: Make (quick) Trailer

Smiles was originally approved REALLY FAST, in about 2 days. Even more crazy, Smiles Zen took half a day to approve. So what I’ve learned from that is I need to be ready just in case. If I have some spare days, I may do some preparations. Use a proxy device to figure out where/how to hold it, briefly storyboard the trailer, or so on. Just so I’m able to have something for the press once it’s ready. I feel bad that I’m not going to have time to give the press an early look at things, but nobody has iPad’s yet. We’ll all be playing this product launch by ear.

#6. After that: Websites

It’s a real shame, but I probably wont have a chance to redesign the Sykhronics and Smiles websites before launch. I’m hoping I do, but knowing me, that’ll come later. The smiles-game.com website is in dire need of updates, since it’s available for more than just the iPhone, and coming soon to several more devices. Same with the Sykhronics website, it’s still tagged as 2009, and makes no reference to my IGF and Intel success. I’m not even sure I’d have time to delegate the work either (assuming I had someone to delegate it to). It’ll just happen when it happens.

Besides finishing the game itself, I want to be doing everything I can for the press right now. My inbox and blog comments are open. If you have a question, feel free to contact me one of those ways. If I don’t respond to you directly, I’ll try to make some FAQ like posts on my blog here.

E-mail: mike [at] sykhronics [dot] com.

And speaking of serving the press, here’s a new screenshot for you. Click for highres PNG.

'Match Challenge' Drop mode played wide with the 'Blocks' tileset

Want more shots and details? Check out this post.

Lets do this

So wow, Smiles HD is coming. You can follow my twitter for more “as it happens” updates:

twitter.com/mikekasprzak

Smiles also has a dedicated twitter for the big news items (i.e. it’s out, updates).

twitter.com/smilesgame

That’s all I’ve got for now. Stay tuned!

The Development of Smiles, Part 0

Friday, January 2nd, 2009

I know my track record for completing a blog series is pretty lousy, but this one should be easier. I kept a personal log with pictures during the development of Smiles, so most of the work is done for me. I just need need to go through it and regurgitate my notes.

To start, I’m going to give a bit of insight in to what happened when I stopped writing my Engines, Names and Evolution blog series last year.

I apologize, but I am going to skip a significant follow up to that series for now (the Hammer engine), but this series should bring us back up to date.

Here we go.

– – – – – – –

Late 2007 and early 2008 were spent working on libraries, and foundation for my new engine Playground.

Playground was the successor to Hammer (PuffBOMB HD… will talk about this another day), which in turn succeeded Freedom.

– – – – – – –

Before PuffBOMB HD was shelved in late 2007 (Hammer engine), I was working alone on the project. Amicably, but that’s a series for another day.

The core issue with Hammer is that it wasn’t very reusable. As a whole, you could certainly build a new project based on it, but it’s elements were poorly isolated. Triangulation and collision testing code was embedded right in to the physics engine, so I couldn’t use the same code elsewhere without a lot of waste.

I prototype games regularly, and the product of this year of development (2007) wasn’t as useful as it could be.

– – – – – – –

Late 2007, I was at a crossroads. I still had savings left, but only enough to support myself. I needed a break from PuffBOMB HD, so I coined a new project. A suite of libraries and tools I could personally use for prototyping and developing games faster and more efficiently. The end goal may have been to build a Metroidvania derivative, but the core of the project was to build me some tools. If the project was going to fail again, at least I’d have a foundation to try the next thing. This was the Playground project.

Here’s where I get technical.

As mentioned, Playground is a suite of libraries and tools. It started with me collecting what usable parts I could extract from Hammer, and my Ludum Dare games and framework.

I should also mention that by library I’m referring to an element. A directory of files. Either copy the directory in to a project, or set up an SVN External for it. Only a crazy person would compile their work in progress library to a .lib/.a file and install it. If that’s you, you’re crazy! 🙂

One of the first and most useful elements I built was the Data and Serialization library. I decided to finally stop using C++ streams for binary File I/O, but wanted my file reading syntax to be nicer than fopen. The syntax for loading an arbitrary binary file from disk is as follows.

DataBlock* MyData = new_DataBlock( “Data.bin” );

Nice and easy. A DataBlock is an incredibly useful and lightweight basic type. It represents an arbitrary block of memory with a size stored in the first 4 bytes. It’s defined as followed.

struct DataBlock {
    size_t Size;
    char Data[0];
};

Pretty simple. For completion, the Data and Serialization library includes similar calls for normal non DataBlock data, but they’re so lightweight and flexible I use them anyways.

The great part about writing your own I/O wrapper is you can seamlessly integrate things like compression, munging, CRC’s and checksums. For example, load and decompress a file in 3 lines (one cleanup).

DataBlock* Compressed = new_DataBlock( “CompressedFile.zlib” );
DataBlock* Uncompressed = unpack_ZLIB_DataBlock( Compressed );
delete_DataBlock( Compressed );

The library is also written in such a way that, while it supports many compressors/hash methods, they are not required to be built or linked against the project unless explicitly used. In other words, if I don’t use BZIP2, I don’t need the BZIP2 headers or C files. As lightweight as you can make a library.

The vector math library is borrowed right from Hammer, cleaned up and isolated to be vector, scalar, and matrix math only. Types for rectangles and simple primitives are a library. Coding niceties like template types containing a,b,c or r,g,b,a components are a library. Strings, parsing a whitespace delimited file, and debug console logging as well.

Collision tests, and everything you do between primitives is a library of functions. Extremely long names, but they’re now modular in such a way they can be used in a physics engine, in a primitives library or a GUI/Menu system.

if ( Test_Point_Vs_Polygon2D( ... ) ) ...

Where this one returns a boolean value. I wont bother listing the arguments, but it’s a global C-like function. It takes direct types and pointers where appropriate. The functions follow the form “Action_What_Relationship_Who( … );”. Action is the operation, What and Who are the terms being tested, and the Relationship is the rest of grammar required to describe the operation.

Nearest_Point_On_Chain2D( ... );
Nearest_CornerPoint_OnEdgeOf_Polygon3D( ... );

Where the Smiles story begins is the Grid library.

Grid was a library created for a Ludum Dare game Pillar Caterpillar.

Here’s some concept art.

pillarmockup

Pillar Caterpillar wasn’t playable within the compo timeline. It however still featured some great pre-production work, and a useful chunk of code that became it’s own library in Playground. Further work was done on the project, but that mock-up is the coolest looking part.

For the time being, only minor changes were done to Grid.

– – – – – – –

Shortly after the iPhone SDK was official announced in March 2008, I started prototyping some game concepts. The first, Magtraction (since Magnetica was taken, by a game completely unrelated to magnets).

magshot04

A prototyped game concept deemed “too boring“.

The second, Dungeon Legion.

legionshot04

A prototype game concept deemed “too awesome“. Too awesome to finish in a short period of time. 😀

Both of these prototypes were the projects used to get the geometry tests up and working again.

You might hear more about Pillar Caterpillar and/or Dungeon Legion in the coming months (both projects are on my list I’m considering).

For the 3rd prototype, I wanted to revisit Grid.

Sugar Magnet

Friday, February 29th, 2008

February 29th! How could I not say something today.

Just what to say is the question.

Blogging in the past, I’ve noticed the tendency to want to turn the blog in to something. A community, articles and subjects, talk-back, and all that stuff. And that’s great and all, but it’s a lot of work for not much return. Traditionally to make ends meet this way, you plaster your blog with advertisements, or actively soliciting contract work. No thanks.

Any readership I may have either hits me once a month, or watches me via RSS or an aggregator. And hey, that’s great. I’m impressed that I have a readership :) . A project shrouded in half-ass secrecy isn’t great content. Pulling away the curtain entirely isn’t easy to do, at least until the perpetual “later”. So instead, this blog collects occasional rants and the odd picture.

Exciting.

Not really.

I’m not ready to promise a change or anything, but I have a bit of a multi-part rant brewed. I’ve been putting a lot of serious thought and planning in to my next project, and in several ways it’s already started. I want it to be blogged right and from the beginning. That just happens to mean I start now.

So tomorrow, March 1st, I’ll be at least posting part one. I’m not delay it for suspense or anything. The rant I’m staring at is long, technical, and self referential. The type of rant that’s really been holding me back from having more to talk about. For cohesions sake, I just want to sleep on it to be sure it all sounds right. It’s looking like it’ll be between 3 and 5 parts long.

Then, in theory, I can finally start talking in the present. Wow!

I want to start walking through my thought process of architecting “the next“. Where I’ve made mistakes, and so on.

Heavy technical, just like mom used to make.