Six Minutes of Broken Promises

March 20th, 2010 by stephen lavelle

play online now(flash)
download source code (as3/flixel)

Ramping up for iPad: Smiles HD

March 19th, 2010 by Mike K

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!

RainSaver Tech

March 18th, 2010 by Entar

RainSaver is a screensaver for Windows that I made, which warps the desktop as if it were a liquid with raindrops hitting the surface. Here’s a little bit more in-depth information about how the tech behind that works. I used OpenGL for this project, so everything will be from that perspective, but I imagine the same techniques could also be applied in a Direct3D approach.

The first step is to grab an image of the screen to load into video memory as an OpenGL texture, which I won’t go into a whole lot of detail on, except to say that it involves a handy function called BitBlt. Next, I generate a “drop” texture. The drop texture is basically a normal map, where different colors indicate different normals. These colors are later used in the fragment shader to decide how much, and in which direction, to warp the final image. To actually generate it, I set the colors based on sine waves of the coordinates of the pixel relative to the center of the texture, and the alpha based on a sine wave of the distance from the center, setting negative alpha values to 0. It ends up looking a little like this:

// for each pixel in the 256x256 buffer
	dist = sqrt((float)((y-128)*(y-128) + (x-128)*(x-128)));
	dropBuffer[y][x][0] = 128+(x-128)*(sin(dist/2.0f));
	dropBuffer[y][x][1] = 128+(y-128)*(sin(dist/2.0f));
	dropBuffer[y][x][2] = 255;
	// remove inner ring(s)
	if (dist < 90)
		dropBuffer[y][x][3] = 0;
	else
		dropBuffer[y][x][3] = pow(MAX(0.0f, sin(dist/8.0f)), 12)*255.0f;

There’s also a wavy texture that is generated from cosine and sine waves of x and y coordinates, respectively, and smoothed noise for alpha values.

New raindrops are randomly created every so often, and existing ones expand over time. All existing drops are drawn into a frame buffer object (FBO), along with the wavy texture over the whole screen. Finally, a full screen quad is drawn with multitexturing, using the desktop texture and the FBO distortion texture, and the fragment shader takes it from there, using the final colors in the distortion texture as normals to determine distortion and shading. The GLSL for the warping alters the texture coordinates, like so:

vec2 coords = gl_TexCoord[0].st;
coords.s = coords.s + (change.r*2.0 - 1.0)/40.0;
coords.t = coords.t + (change.g*2.0 - 1.0)/40.0;

Mike the Multi-Winner and GDC Champion

March 18th, 2010 by Mike K

So, holy cow! GDC was absolutely insane! I almost don’t know where to start, but lets start from the beginning.

First thing first, I won again!!

Argh! They used that squished photo again! I even sent them a square one!

Argh! They used that squished photo again! I even sent them a square one!

Yes, as if winning a free car wasn’t enough, I also won a free trip to GDC. So Intel ended up covering my flight, putting me up in a fancy hotel, gave me some spending money, treating me to dinner, AND giving me nearly front row seats to a San Jose Sharks hockey game! Whoa!

Left: Good Hotel | Right: Parc 55

The picture above is a comparison of my Hotel last year and this year. Last year I was staying at the Good Hotel (yes, that’s actually its name). It was an enjoyably quirky little establishment that’s also probably the cheapest hotel within walking distance of Moscone. I’m not exactly rolling in the dough, so I need to keep my costs low, splitting rooms and everything. You know, being responsible with my money. :)

Then this year, thanks to Intel, I’m on the top floor (32) of this crazy 4 star hotel just a few blocks from Moscone. Staying in luxury and all that.

Not my photo, but my room looked pretty much like this

Seeing how we were on the upper few floors, we had access to special “club lounge”. Now sure, while hanging out in a classy “lounge” for the social elite would be cool, the part that was really awesome was that the lounge featured free food! A continental breakfast in the morning, then hors d’œuvres and desert in the evening.

Fruit, Yogurt, Croissants, etc. Bagels, juice, coffee were off to the side

So wow, quite exquisite.

Oh, and did I mention? I had a driver! He even had a “Michael Kasprzak” sign with him when he picked me up at the airport!?! Wild.

Even I admit I really look out of place in this photo

But of course, I was down in San Fran for the Game Developers Conference. It’s the one time of the year us game making nerds from all around the world can all get together in one place, discuss our craft, and get drunk together. So yeah, the other thing Intel did for me was give me a better conference pass.

I don't know about you, but I really did have TWICE the GDC as you

Tuesday and Wednesday I spent the majority of my days at the Independent Games Summit. I did sneak in to an Android talk Google was giving, but for the most part I was on the indie side.

The danger of being an indie, other indies might give you gifts!
Photo by Ted Martens of Intuition Games

Thursday and Friday, in between talks and roaming the expo center, I ended up doing a few interviews. Two with Intel (one in their “made just for GDC” mini TV studio), and one with an enthusiast site Netbook News. I’ll post the interviews here once they go live.

Not the best pose to be caught in, but still awesome to have
Photo by Ichiro Lambe of Dejobaan Games

But GDC for me is all about the social. Getting to hang out and chat with your friends and peers you only ever get to speak to via the internet. Real live people! Wow!

Left: Mysterious secret gathering | Right: forums.indiegamer.com dinner

The Ludum Dare Meetup. Wow! I actually helped organize this! Wild!

Jani of Secret Exit is totally awesome (not seen here). He was my next door neighbor exhibiting in the IGF Mobile last year, and brought me along to the VIP area of the IGF Awards this year. You rock Jani! This photo is of the IGF DJ, since it was the best photo I took from the inside.

Indie Art Jam. Yet another shot where I'm making an odd face
Photo by Bekah Saltsman

Just like last year, I left San Fransisco filled with truck-loads of inspiration. The indie games community is such an amazing group of people, words can’t describe it. I’m humbled to be a part of it.

Even though Smiles is a great product (as evident from all the winning), I can’t help but feel that I have to step up my game even more. That I need to create something truly fantastic main competition IGF worthy, just to pay my respects to the community. I leave San Fransisco filled to the brim with excitement for game making, and telling myself “Lets get this business stuff out of the way so I can pay back the awesome with my own awesome”. So very inspiring.

See you all next year.

Blegh, Flash

March 17th, 2010 by Destructo Games Forum - demize
I'm working on rewriting my flash game Clicky. You can find it on Kongregate by looking it up if you want, but it's horrible. I wouldn't recommend finding it until I upload the new version. It used to be Actionscript 2 but I've figured out Actionscript...

Terrain Tuesday #10

March 16th, 2010 by Entar

Just a quick one today, to let you know I’m still around, and that those strange characters from the last post haven’t taken over the blog. I expect they may show up from time to time though, they’re an unpredictable bunch. On to the update! This week, Canyon Terrain Editor got a little polishing of the UI and a bug fix in the terrain loading code. Probably more interesting to you, though, are the plans I have coming up. There should be a release of the editor in some form, before too long. There are a few things I want to do first, which is why I’m not releasing it right now, but rest assured, it will be along.

Stay tuned.


better search engine

March 15th, 2010 by Illume
http://duckduckgo.com/

Priorities

March 15th, 2010 by Mike Hommel
I don't think much is going to get done at Hamumu this month. Mia the dog got to come home two days early! The vet said she was very agitated being trapped in the kennel and they thought she'd just manage better at home even though we can't do all the fancy medical stuff they can. She has definitely been doing better, and is definitely needy.

So we've basically realized after two days of this that she doesn't handle being alone well. Hopefully that's an issue with having been abandoned for a week and will get better quickly (she didn't whine when I went off to the bathroom this morning, that's good!), but for now, it's how she is. She's supposed to be kept imprisoned and slow-moving for six weeks which is crazy considering how much she's already trying to race around. So she needs someone with her at all times. Good thing I work at home! To make this work, and still keep her trapped in small space, I have moved my entire office into the retreat where we have her:

(for the uninitiated, the retreat is a little room off of our bedroom. I think we call it that because we heard the realtor call it that. Don't know what else it is, except as you can tell, board game storage. When I say small, the reason this is two separate pictures is that the room is too small to get far enough back to show both the couch and desk in one shot). It's a messy situation, and I need to go interact with her about every 10 minutes to keep her happy. This isn't conducive to work (or playing WoW! Aiyee!!), but that's priorities.

Speaking of priorities, the big success of Robot Wants Kitty has shifted those too. It's awesome to know that I can make money. It's also awesome to know how to make money (well, it depends on how successful other flash games are, but it seems like it works). I will probably be packing my schedule with lots of flash game development and sort of squeeze the 'real' games in between instead of vice versa. Paying for life is definitely the priority. It helps that I love making these little games too! None of the stress and endless cycle of making the big games. But despite the wild speculation on the forums, Daibaka is not vanishing. That's the current project, then mphrmmphmphmph is next still. But I'm putting more emphasis on getting Space Cruise done (was supposed to do that this weekend, but Mia's first weekend home was a big challenge), and then Robot Wants Puppy. I will be doing both of those simultaneous with Daibaka Max.

More image generation: alienish script

March 15th, 2010 by Tenoch

Just for the sake of amusement, I made another “Lua -> SVG”. This one makes this kind of alien script that you could find in teevee shows such as Stargate.

Each glyph is based on a 2×2 square grid, in which the sides can be on or off. Generating all of them is pretty easy, but somehow I didn’t like how it looked. First I added the corner dots that would increase readability if it was actually a script meant to be read.

And then I added the rule: no “T cross roads” (not sure how to render that in English), and no X either. The T kind occurs only on the middle of the sides of the glyphs, and the X only at the center. I filter these out, and then pick randomly lots of the remaining glyphs into a mystical wall of ancient knowledge.

Coool.

Full source:

isT = function(g)

 return g[1] and g[2] and g[4] or
 g[3] and g[6] and g[8] or
 g[5] and g[7] and g[10] or
 g[9] and g[11] and g[12]

end

isX = function(g)
 local count

 count = (g[4] and 1 or 0) +
 (g[6] and 1 or 0) +
 (g[7] and 1 or 0) +
 (g[9] and 1 or 0)

 return count >= 3
end

int2glyph = function(n)
 local n = n
 local g = {}

 for i = 1,12 do
 g[i] = n % 2 == 1

 n = math.floor(n/2)
 end

 return g
end

pglyph = function(g)
 for i= 1,12 do
 io.write(g[i] and 1 or 0)
 end
 io.write('\n')
end

--[[ Generate and sort ]]
list = {}

for i = 0,2^12-1 do
 local g = int2glyph(i)
 if not isT(g) and not isX(g) then

 table.insert(list,g)
 end
end

print("Total",#list)

--[[ Draw ]]

-- glpyh, scale, offset
gdraw = function(g,s,x,y)
 local FMT = string.format

 str = ""

 ---[[ dots
 for i = 0,2 do
 for j = 0,2 do
 str = str .. FMT('<circle cx="%d" cy="%d" r="%f" fill="black" />\n',i*s+x,j*s+y,s/5)
 end
 end
 --]]

 -- lines
 local pos = {

 {0,0,1,0},
 {1,0,2,0},

 {0,1,0,0},
 {1,1,1,0},
 {2,1,2,0},

 {0,1,1,1},
 {1,1,2,1},

 {0,2,0,1},
 {1,2,1,1},
 {2,2,2,1},

 {0,2,1,2},
 {1,2,2,2}
 }

 for i = 1,12 do
 if g[i] then str = str .. FMT('<line x1="%d" y1="%d" x2="%d" y2="%d" stroke="black" stroke-width="%f" />\n',
 pos[i][1]*s+x,pos[i][2]*s+y,pos[i][3]*s+x,pos[i][4]*s+y,s/2.5) end
 end

 return str
end

write_svg = function(str,path)

 local fp = io.open(path,"w")
 assert(fp)

 fp:write[[
<?xml version="1.0" encoding="utf-8"?>
<svg
 xmlns="http://www.w3.org/2000/svg"
 version="1.1"
 width="1000"
 height="1000">
]]

 fp:write(str)

 fp:write"</svg>\n"

 fp:close()
end

math.randomseed(os.time())

local sc = 10
local sk = 3.5
ax,ay = sc,sc
str = ""

for i = 1,500 do

 str = str .. gdraw(list[math.random(#list)],sc,ax,ay)
 ax = ax + sk*sc

 if ax > 800 then
 ax = sc
 ay = ay + sk*sc
 end

end

write_svg(str,"blah.svg")

Holohoax

March 14th, 2010 by stephen lavelle

Play online (html/flash)
Download source code (flixel/as3)