27 01 2009

Go to ! Do it.


CUSEC 2009

26 01 2009

I spent this past weekend in Montreal attending CUSEC 2009. Aside from being in Montreal and ridiculously affordable, it was also a great conference – well-run with a lot of great speakers. I had previously attended CUSEC in 2007 and found it to be hugely motivating – so much so that I had moved to Vancouver for a co-op job by the time CUSEC 2008 rolled around and thus skipped a year. This year’s conference had that effect once more.

CUSEC features a collection of speakers from the corporate and academic world, as well as keynotes known for their research, accomplishments or just plain awesomeness. This year’s list was no slouch, featuring some very entertaining talks, some cool tech demos and even Richard Stallman.

The conference opened with a keynote by Leah Culver, one of the founders of (the now-defunct) While it might seem to send the wrong message with pownce having closed down just last month, it was pretty clear that Leah and the rest of the crew had moved on to greener pastures at SixApart. We actually missed the very beginning of Leah’s talk but for what we saw, she described the life of a sucessful software engineering in a lively and motivating way. Success doesn’t necessarily equate to money and I think she made it clear that you can be successful doing what you love, if you keep your eyes open, head up and just keep coding for fun.

The next keynote was Dan Ingalls, who demoed the Lively Kernel. The abstract claimed “an entire computing environment can be built from scratch entirely in JavaScript”, something we found somewhat curious and borderline laughable. One theme that ran through the entire conference was that JavaScript was on its way back in thanks to the advent of more powerful engines. The Lively Kernel ended up being pretty interesting, if not convincingly useful beyond an educational tool. It definitely impressed with its live code editing and universal treatment of GUI objects. I was particularly surprised that it managed to “run” on my iPod touch (though only conceptually; it was unusable). The coolest part? You can go try it right now.

The Lively Kernel

The next day brought Avi Bryant who delivered “Good Hackers Copy, Great Hackers Steal”. Aside from talking about the resurgence of SmallTalk, including his web framework built using it (called SeaSide), Avi’s main point was about ‘stealing’ research from papers that haven’t been tapped for their end user potential. It was a pretty inspiring talk about the benefits to actually knuckling down and doing some research when faced with a problem. He also demoed a few things, including a small web app that would apply a theme to a page based on a pallette pulled from a logo you provide. In his words, “I really enjoy taking really simple little features and overdoing them.”.

Next up was Giles Bowkett. Giles had a MIDI generator written in Ruby to demo, which was actually pretty sweet and I don’t think the crowd gave him enough credit for it. Music generation is on my list of things to tinker with. Aside from that, Giles didn’t so much have a message to share or an opinion to express so much as he had an entertaining story to tell. I liked it, and the crowd liked it, and it was motivating if nothing else.

Following  Giles was Joey DeVilla, also known as the accordion guy. Joey is one hell of a storyteller. He’s a tech evangelist for Microsoft and he opened his talk by playing “Hit Me Baby One More Time” on his accordion, which alone should tell you he’s a pretty interesting guy. He reminded me of my calculus prof who told us nearly unbelievable stories of his youth during class, which always came as this huge juxtaposition to the subject at hand. Joey’s talk was excellent and the audience ate it up. He made an appearance later on by winning an auction to buy a stuffed gnu from Richard Stallman (see it unfold on his blog).

Joey DeVilla wins a stuffed gnu from Richard Stallman

I’ve stuck to just mentioning the keynotes so far, but the final day of the conference brought on Caitlin Kelleher, an academic speaker from Washington University. She spoke about Storytelling Alice, a programming environment aimed mainly at middle school girls. It can clumsily be described (by me) as a sort of 3D Sims-like machinma maker that focuses on scripting. The scripts are input with a GUI to enforce syntax but in doing so, they also expose students to programming concepts like functions, parameters and loops. I was pretty interested in the whole thing, partly because of the technology involved and partly because of the problem it’s attempting to address (namely, increasing enrollment in computer science from a broader group of people). Its effectiveness in studies is admirable. Yes, the Alice engine is no longer much to look at, but there is apparently a deal in the works to use Sims 2 characters for the next version. I have too many thoughts on the topic to explore them now – perhaps a future post.

Storytelling Alice

Storytelling Alice

The second-last keynote was Francis Hwang. This was another talk about engineering as a profession and how it related to other professional areas. It was different largely because of Francis’ take that software engineering was not at all like art, it didn’t have to be, and it doesn’t suffer for it. He was challenged on this but held his position quite well. A memorable line: “Q: How is a brain surgeon like an artist? A: Why would I want to be an artist? I’m a fucking brain surgeon!”. If nothing else, it seemed like people took from his talk that you should challenge things you disagree with.

Last of all was Richard Stallman. His talk was on “Copyright vs. Community in the Age of Computer Networks”. I’d write a synopsis, but Joey DeVilla has a virtual play-by-play on his blog of another time Stallman gave the speech. This is another topic that I could probably write a lot on, and one I don’t actually want to go near without due diligence and reading Stallman’s essays. You can probably guess that I don’t completely buy Stallman’s arguments. It was a very interesting talk nonetheless, in terms of content rather than delivery.

Phew! So that was CUSEC (well, the conference side of things anyway; Montreal itself breeds adventures). So what did I take away from all of this? Well, few more people to follow on blogs and twitter, and a renewed interest to look into web development that I have avoided up to now with the blanket statement “I don’t know web stuff“. I’m going to be looking into Django and Ruby to see what’s going there. Oh, and I’m going to blog about the things I find out and create. So really, the most valuable thing about CUSEC? Motivation.

Not Dead

24 12 2008

Work continues sporadically on Yet More Tower Defense, though not for lack of interest. Exams, followed by holiday shopping and events, and the sudden realization of impending doom regarding my honour’s project have all come together to thwart my attempts at getting Yet More Tower Defense ready for playtesting. Realistically, progress is going to be severely hindered by my honours project.

However, I took a few minutes to today to flesh out a simple high score system along with saving and loading. It was a snap to do and I’d been putting it off, but now I’m glad I had some low hanging fruit.

I think it’s hugely important to work on a project every day to keep up the momentum, even if it’s just for half an hour. I let this one slip for almost two weeks – I’m not going to let it fade away. That’s one of the reasons I bought a premium membership early: I’m invested now!

What’s on the Menu

8 12 2008

With a few days off before exam preparation really begins, I’ve been able to devote a fair amount of time to Yet More Tower Defense. I spent quite a bit of time working on the menu system but I think given what I’m trying to put in feature-wise, it’s turned out to be a very worthwhile investment. I’ve essentially worked off the Game State Management sample which has proven to be a fairly powerful and extensible concept.

While it always seems like there are dozens of things left to do, my list is finally getting to the point where I can see the end, at least in terms of necessary features. Let’s take a look, if partially for my benefit in combining the many to-do lists scattered around:

  • One more Hud component (showing upcoming wave details)
  • High scores
  • Help screens/instructions*
  • Proper treatment of PlayerIndex
  • Ensure storage best practices are working
  • Full game purchase functionality
  • One more tower type
  • Two more creep types
  • Badges

The “Help screens” item has an asterisk because I think I will tackle this during initial playtesting, rather than before. I’m interested in seeing what people’s initial, unguided intuitions are.

Badges are something I’ve hummed and hawed about because they aren’t at all necessary for the game. I am suspicious of the average consumer’s opinion of unofficial acheivements, as I don’t think they really hold much weight. However, since I’m not making this game with an “effort to marketability” ratio in mind but instead to go through the full process of making a game, I’m going to implement badges. If they add something that consumers consider important, cool. I certainly don’t think they take away from the game.

After that list is finished, I get to start the long process of polishing and balancing. The most important aspect of this is going to be creating/finding some respectable graphics and sound effects. I consider myself somewhat artistically inclined, though in traditional media. I have a few ideas on this front that I’ll look into. I haven’t decided if I’ll throw my game into playtest before it gets final graphics in place. There is a blocking issue of Xbox360 performance, which isn’t quite acceptable at the moment (I develop primarily on PC, where the performance is flawless).

All-text updates are boring! Here’s a screenshot of the new Challenge Select screen:

Select Challenge

Select Challenge

I did find myself playing the game quite a few times over the past few days, despite the fact that the balancing is just placeholder values so the difficulty is all over the map. I consider this a good sign (:

Premium Membership obtained: First impressions

4 12 2008

It’s done! I went and invested in a premium creator’s club membership which means my game will officially be a waste of time and money if I don’t bother to finished it (how’s that for motivation?). Well it wouldn’t be a complete waste, because I’ve learned a lot already, but there’s still much to learn! I’ve been working on it, largely adding to the usability of the menus today, but that’s not what this post is about.

Premium membership entitles you to:

  • Deploy games to your 360*
  • Download premium content
  • Playtest games
  • Review games
  • Submit games

I’d completely forgotten about the premium content bit (now I can look into those premium samples). Okay there are only two, that’s less exciting and a bit disappointing. Maybe I’ll glance into the Robot Game though. The deploying-to-360 functionality was something I already had from my trial membership through Dreamspark.

So, submitting a game is obviously key, but I’m not there yet. That leaves playtesting and reviewing. I took a look at the games in the review queue, only to be a bit disappointed that many of them are just re-submissions of existing games. Regardless, I don’t feel I have a good enough grasp of edge cases to catch the important crashes (storage devices, purchases, extra controllers, etc) and thus I’m going to avoid peer review for the time being.

Playtesting is the real reason why I caved and bought a subscription early. Yes, that’s another thing. There’s very little incentive to buy a subscription before you intend to submit a game. The premium samples are probably the only reason, short of wanting to help the community. In my case, I actually want to do just that, but I wonder how many people are putting off the purchase, and thus their contributions to playtesting/reviewing, for a pretty straightforward financial reason.

Some people are thankfully using playtesting for what I hoped it to be: a place to get feedback on your game, from alpha through to almost release-worthy. I think it’s great to just grab a few games, take note of what the developer is interested in hearing about and then sitting down with the games and a clipboard. I looked over three games tonight,left a bunch of feedback for two of them and look forward to doing it again.

If only there were more games in the playtesting queue…

The sound of button-mashing

2 12 2008

I mentioned I was going to tackle either gamepad input or sound next, but I ended up just doing both. Now that’s not to say they’re finished, but they are functional. One of the mantras I’m developing by is “Keep it playable”. Since day one, Yet More Tower Defense has been playable in some form or another. Now, it hasn’t always been fun, but it’s alway been working. I’m the only one working on it, so there isn’t any time lost for other team members when the game is broken, but I feel that it’s a worthwhile habit regardless (and it does wonders for motivation).

Nothing too earth-shattering or complicated in my input or sound managers, though there is one thing I’d like to point. Given that Yet More Tower Defense is destined for XBLCG, and thus playable by the general populace, best practices are incredibly important. One of these is having intuitive controls that are consistent with what gamers might reasonably expect. That means that Start should pause, A should proceed through menus, B should take you back, etc. For this reason, I felt it was important to have an input manager that could handle things like:

gamepadInputMap.Add(InputAction.Accept, new Buttons[] { Buttons.A, Buttons.Start });

Two buttons mapping to one function. A quick google for input samples seems to come up with a lot of code that only handles a 1:1 mapping, often with a note saying, “this shouldn’t be a problem”. Instead, I’d prefer to easily remap my controls (without looking for a bunch of multipart conditional checks in an IsMenuCancel function) and have a one-to-many relationship for actions and buttons. I think it’s worth doing, if not for your sake in managing control bindings, then for your users who might expect ‘A’ and ‘Start’ to perform the same function in the menus.

And on that note, I’m getting to the point where Yet More Tower Defense is feature complete. It should be just some more content creation (graphics, sounds), polishing and lots of testing and balancing in the near future. I hope to be able to throw it into preliminary Playtest soon. That also means I’ll be able to playtest and review other games, as I’ll finally buy my Premium membership. Sweet.

YMTD work continues

30 11 2008

Managed to get a fair bit of time to work on Yet More Tower Defense this weekend so I was able to make a good bit of progress. I cleaned up some of the stub functionality I’d put in for loading levels from file and put in the functionality to choose your level from the menu. There’s also a nice dynamically generated preview of the level that comes with it, thanks to experimenting with RenderTargets and basically rendering to a texture.

Today I put in one of the key components of the in-game hud: the tower pane! This is where the details of the currently selected tower (for upgrades/selling) are displayed, as well as the details of the tower type selected when building new towers. It’s working pretty well already, and save for some better art and shifting around the position of its elements, I’m pretty happy with it. How ’bout a picture?

Tower Pane (wip)

Tower Pane (wip)

Not much to look at, but all of the data gets updated as it should. It also goes a long way to bridging the gap between “prototype” and “functional game”. Not sure how I feel about the font though. Leave a comment if you have an opinion about it.

The more I work on the HUD, the more I want to add features and functionality. I’m restraining myself from getting too carried away, but I think I will implement a way for this pane to transition away when not in use. Tower defense is often about watching events unfold, so why clutter the action?

Next up: gamepad input. I think. Maybe sound. :)