Motion Controls and Why I’m Not Convinced I Want To Use Them

2 06 2009

A common element of the Big Three’s E3 press conferences this year has been motion controls. It’s been long-rumoured that Microsoft was developing a response to the Wii’s control mechanism, and that Sony would be making an investment a bit more daring than the SIXAXIS controls. With Nintendo’s Wii MotionPlus (announced at last year’s E3, and coming out next week), Microsoft’s Natal and Sony’s EyeToy wands, the console manufacturers are all now committed to providing some form of motion control.

I’m not convinced I want to use any of them.

Nintendo

But first, a quick rundown of my thoughts on each of the solutions offered. I’ll start with Nintendo and the Wii MotionPlus add-on. Flash back to E3 2008 when the Big N unveiled the 4cm, $20 wart that promised to make the Wii remote… more better. My initial thought was, and still is, that this is what the Wii has purported to offer gamers since day one. Instead, the Wii has become known for its “waggle” controls – reacting to movement, if not capturing it for true analysis. The MotionPlus add-on rectifies the remote’s shortcomings, though you can bet it’ll be a hard sale. Good thing Nintendo is wisely bundling it with Wii Sports Resort, among other games that use it.

So there’s a sense of entitlement involved, as the Wii already claimed to have motion controls. Why should the consumer pay for “better” controls? Yes, I am well aware of the technical reasoning and the new ability to distinguish linear movements, but do all consumers think that way (or care)? Setting that aside however, the MotionPlus is actually the cheapest solution of the three offerings, assuming Microsoft and Sony aren’t letting their products go for less than twenty dollars. Nintendo’s is also the first to market, hitting North America in just under a week. Pity the software line-up is nothing to write home about. Two of the three 3rd-party titles at launch are (wait for it)… tennis. Again. Not doing much to alleviate the feeling that you already bought this once.

Microsoft

Microsoft was holding out on committing to motion controls and had, up until yesterday, remained completely uninvolved in the whole thing. That’s not to say they weren’t watching carefully. Nintendo was obviously on to something with the accessibility of the Wii though, and so Microsoft developed Project Natal (pronounced like in Natalie, not like in prenatal). If you haven’t seen it yet, check out the promo video they showed yesterday.

I like the simplicity of the Natal solution: one camera, no controllers. That’s an appealing interface in my mind, though perhaps not for traditional gaming. I really don’t think holding my hands in the air to grasp a pretend-steering-wheel is going to add to my experience; indeed I can only see it detracting from the immersion. And it looks extremely tiring. Did anybody ever play Totemball? It had an achievement for playing the game for 20 minutes straight. If that’s worthy of an achievement, I’m not interested in playing.

I was particularly interested in the skateboarding demo, but that’s probably just personal experience talking. It does thicken the plot for Tony Hawk’s RIDE though (obsolete before it launches?).

Overall though, I’m simply not convinced. The whole video reminded me of other “visionary” Microsoft videos. Great production values and intriguing mock-ups, but you have to take it all with a grain of salt because it’s not an honest-to-goodness product you can buy yet.

Future Vision Montage
Future Vision Montage

I’d be more inclined to write the whole thing off right now except it turns out that Johnny Lee is involved. I’ll leave it at that, but if you haven’t seen his other projects, you should definitely check them out.

Sony

Sony dipped its toe in the water back with the launch of the Playstation 3 by including SIXAXIS controls, which was probably the smallest thing they could have done to allow themselves to tout “motion controls” for the system. Few games have used the accelerometer with any great success, which suggests that you can’t simply shoehorn motion controls into traditional games. Today, however, Sony followed up on their rumoured wand technology by demoing some prototypes of their EyeToy + wand solution (which could really use a name). It was just a technical demo, though they are targeting a launch in Spring 2010.

I’m mixed about the wand solution. Sony had working units on-stage, with some inspiring software (again, just demos). The technology seems sound in terms of functionality, but the implementation is cumbersome right now. After all, the Wii needs one remote. Natal needs one camera. Sony’s solution uses a camera and two remotes. Impressive motion-sensing accuracy and creative software, but overall the whole thing looks like it needs a lot more time in the oven.

The Problem with Motion Controls

So the technology is getting faster and more accurate, and the software is slowly becoming more compelling – but I’m still not convinced I want to use any of them. The problems, as I see them, stem from the idea of gaming providing a different reality for the gamer yet motion sensing pulls things back to the player’s reality.

The first is that accurate sensing of the player’s motions means that the player needs to accurate in his or her motions. The lesser problem here is that games can require the player to be proficient in skills they simply don’t have. How many players are truly good baseball players/swordsmen/etc? If you are terrible at hitting a ball in real life, the game will detect this with punishing accuracy. This is something EA has already spoken about, and the solution is generally to lower the requirements on the player by adding in-game assistance or simply faking part of the simulation.

The bigger problem is that even if you are fantastic at hitting a ball out of the air, it’s difficult to do so with only visual feedback. The speed of the motion tracking has improved greatly, so delay in motions may not be factor anymore. And controllers are now (reportedly) sensing 1:1 motion, so the player should be able to perform an action and have the game accurately detect it in real-time. However, the motion made by the player is only what they believe to be required based on the image on-screen. Depth is an illusion on a television screen – it’s up to the player’s brain to translate the perceived position of a virtual racket to the position of his/her own hand in order to hit the perceived position of the virtual ball. That’s tough to do, skilled or not. Sony’s E3 demo showcased this nicely when the demonstrator couldn’t hit the tennis ball with anything smaller than a stop sign.

But all of this takes a backseat to what I feel is the Achilles heel of motion controls: reconciling the real-world and game realities. If you give a player 1:1 motion controls, you need to remove all limitations on that motion for the in-game avatar. If the player is wielding a sword, it had better be able to cut through everything with no resistance. If not, the situation arises where the player has made a swing in real-life, but the sword has struck a wall in the game. Now the the player’s hand is in a different position than the sword in the game and it’s up to either the player or the game, or both, to resolve this discrepancy. It’s not convincing and it’s certainly not immersive.

The solution until now seems to be to give the player free reign. The tennis ball provides no resistance on the racket – the player can swing right through. Swords? Just make it a lightsabre and it’ll go through everything. There’s no easy way to solve this problem, so developers are opting to make it a non-issue. It’s an acceptable approach for preserving the fun and playability of games, but it’s a serious barrier to making motion controls truly convincing.

Oh and nevermind the fact that if ever one of these motion solution skips a beat, all illusion is broken. Ever wind up a golf swing only to have the game interpret that you were taking the shot? Ugh.





Django: First impressions from a non-web developer

31 01 2009

I write in Java and I don’t do “web stuff”. If you haven’t left already, you might be wondering what a non-web developer is doing looking at Django? I’m hardly their target audience and yet somehow they may have scored a convert.

I got wind of its existence from a talk Leah Culver gave at CUSEC 2009 and realized it could be suitable for a problem I was facing with a project at school. We needed to develop a web frontend, mostly as proof of concept, for a database-backed system we’ve been developing but had been dragging our heels about doing soon. Between the three members of the group, none of us had much experience outside of PHP and we certainly had more important aspects of our system to focus on. The trouble was that without a web frontend, it was going to be difficult to demo our system to our project supervisors. Enter Django.

I’m a self professed “non-web guy”. I don’t know much about “web stuff” (and the use of the term “web stuff” should be telling on its own). To give you some perspective: I hacked a bit with perl and cgi at the start of my undergrad in a fit of boredom at a desk job and the last time I made a website was when frames were in style. So I figured diving into Django should be a good test of how it streamlines the little things for web developers. Thankfully Python is not foreign to me, though my mindset is still partway between Java and C# and thus writing Good Python is still a conscious effort.

After following the tutorial, I had gotten a taste for some of the neat features Django had to offer. I was particularly interested in the object-relational mapping, bullet point #1 on Django’s front page, as this had been a sore point for our project’s development. Paired with the flexible, shiny and virtually automatic admin interface, the solution we sought was staring us in the face.  The problem is that we had our model defined in Java and re-doing it in Python, while quite straightforward, was not an option due to time and project commitments.

Slightly dejected, since Django’s admin interface would be sufficient for our demoing needs, I stumbled across Django’s instructions for integrating with existing databases. Jackpot.

First bump: the MySQLdb module doesn’t work with Python >2.5. Alright, no biggie. After that, the

python manage.py inspectdb 

command went swimmingly. What followed was series of re-arrangements to the models.py file that was generated in order to get the dependencies in line (the table models are simply output alphabetically). A bit tedious, but a breeze compared to some alternatives.

Running the server with the new model was initially unsuccessful. Validation was failing on a field accessor “clashing” with a related field and instructed me to add a “related_name” for the definition. Looking it up in the docs revealed its intended use for when a table needs to reference itself. This, however, wasn’t the case in my model. We simply had two references from TableA to TableB. A little further searching revealed that the prescribed remedy, giving each field a different related_name, was indeed the correct one. I don’t completely understand how this is not a bug, though perhaps there’s simply a default value for related_name (in which case I understand how the clash occurs and why it’s invalid).

The next problem was… actually there was no next problem. It’s working. I can barely believe it. I’m sure part of it is being so ridiculously out of sync with the web development world that even mundane features would impress me, but I’m impressed. A minor version requirement (for a third-party db adaptor) and some fiddling with a generated file and that was it.

I’m off to play with Django admin options to get wrestle the forms into something a bit more useable, but it’s all gravy from here.

Yes, there are alternatives, some of which might be better for what I’m doing (maybe in every way too). But that’s not the point. Django has lowered the barrier for entry to enable clueless folk like myself to create some cool and useful things. And that’s really the important thing – it’s gotten me to step into the web development realm to see what’s possible. Rails, for all its hype, can’t even claim that (for me).





XNA: Makes Games Programming Easier, Not Easy.

29 01 2009

This is in response to the article over at TechRadar.com entitled “How to code games for the PC and Xbox 360” by Paul Hudson (published in PC Format magazine). I’m all for the promotion of the XNA framework but TechRadar’s take on this is completely out of touch with reality. I’m still not convinced it’s not being intentionally sensational (the sub-heading does make a claim of “unlimited riches”) but since the article does seem to go into genuine detail, I’m going to give a genuine response.

To sum it up, the article claims that games programming is suddenly easy thanks to XNA and anybody who tells you otherwise, including those in industry, is a lying idiot. Now maybe you think I’m being sensational here, but in TechRadar’s own words:

We get asked this question a lot: “What’s the best way to start programming?” Some people like to buy books. Some people like to get a computer games programming degree. But they are – and we don’t want to put too fine a point on this – stupid.

The article goes on to say how you can make anything in XNA, mentioning Halo 3 as an example, and have it work on the 360 to boot.

What gets me is the author clearly has done a least a little cursory research in preparing this. He mentions the Xbox 360 having a “curious superset of shader model 3.0″. They don’t print that on the front page of creators.xna.com, so either the author actually does have some experience developing with XNA or else they’ve picked out some choice phrases from someone else who has the experience and is no doubt weeping softly in a corner after reading the resulting article.

Other infuriating excerpts:

[...] we’re not going to explain to you what every line of code does, because, quite frankly, it’s irrelevant.

Don’t worry about debugging for now – a wise man once said that debugging is harder than coding, so if you write your code as cleverly as you possibly can, then you are – by definition – not smart enough to debug it.

The rest of the article goes on to explain how the sample “tutorial” project works, though it’s glossed over to the point where it’s not worth reading. There are so many other better resources out there for learning the basics of XNA, including ziggyware.com and the creators.xna.com website itself (and its forums).

So the article isn’t very helpful; what’s the big deal? There are three main problems:

1. It misrepresents games programming

Contrary to the article, games programming isn’t about stealing code from others, ignoring the debugger, and making the next Halo. It really is as hard as people say to make a AAA game, even with massive budgets and large teams. Comparing the ease of drawing a few sprites on screen with developing a modern real-time engine is a disservice to the industry.

2. It fails to promote XNA properly

How you can have an article devoted to XNA development and completely fail to mention the XNA community at creators.xna.com is baffling. I’ve mentioned it three times already. The article doesn’t even provide any sources of follow-up information for budding developers. The days of developing in a vacuum are long gone. If the intention is to “sell” XNA to readers, why not show them where to get more tutorials, projects, documentation, and community help?

3. It misrepresents XNA

XNA’s great. I love it. But it won’t make a game for you, nor should it. You can’t make a decent game without understanding how to code, nor would you be able to get it onto the Marketplace thanks to peer review. XNA is only a framework and as such, it can’t possibly have everything a budding game designer might want. Texture loading? Sure. Skeletal animation? Not so much.

I can look past the half-hearted jabs at the games industry, forgive the useless tutorial and the lack of any pointers to helpful resources. But I can’t look past encouraging enthusiastic newcomers to ignore learning how to code and making wild claims about the capabilities and ease of the XNA framework. That sort of advice is what sends kids (and adults) off to try it out only to get frustrated and give up once they hit their first roadblock. It can turn them off programming, much less game development, for years, if not forever. Teach them how to do things properly and give them access to they help they need (and they will need it).

Sorry lads. Games programming has gotten easier, but it ain’t easy.





Skate2: Go Get It!

27 01 2009

Skate 2 shipped last week for PS3 and Xbox 360 and so far, it’s been received pretty damn well. I feel some attachment to it since I helped make it and consequently it’s the first game I’ve ever had my name associated with in some way. If you haven’t already, go check out the demo on PSN / Marketplace and try out some of the new features (or just try the mechanics in general if, heaven forbid, you never played the skate.).

For a quick look at what Skate 2 can do, check out this video on Youtube (click High Quality). It’s impressively technical and also pushes the boundaries of the whole ‘movable object’ thing. Cool stuff.

Gamespot has a pretty concise and level-headed review that’s worth watching too.

And if skateboarding isn’t your thing, there’s plenty else going on in Skate 2:

Rumour has it that I opened a shop in San Van. Can you find it?





moved (here)

27 01 2009

Switched wordpress domains to benkane.wordpress.com (you’re already here). Carry on.





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) pownce.com. 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.