Skip to content

Crasher!

Wow!

So, I decided to see what all of the keys do.  I wrote a loop to use the OS-level DLL, sending 0x00 – 0xFF to the system.

Note:  this will cause ALL SORTS OF INSANITY.

Knowing what I now know, I do not recommend repeating this adventure.  I eventually got my screen un-inverted, and all of my caps/scroll/num locks disabled.  Also, it looks like you can enable both left AND right shift, which will definitely cause unpredictable behavior.

So, I took a step back and stopped looping.  I tied what I thought were a few characters (A, B, X, Y) to buttons on a controller (A, B, X, Y, respectively), and tried to get those to print to the screen.  What I succeeded in doing, however, was crashing my computer so hard that it stopped responding to any and all inputs.

After a few reboots – and more trial and error – I’ve pretty much figured out that my numerical conversions must not be working correctly.  It seems like when I send an base-10 integer (63, let’s say), it’s converting to base-16 integers directly (0x63), rather than to the appropriate hex value.  I’ll have to think about this a little more.

How outrageous!

Fleshing out an interface

I had a nice Indian dinner tonight, and I brainstormed on how I want the UI to hang together.  I think I’ve got it worked out on paper.

I’ve reorganized a few stray methods into classes, and then built a few windows around those classes.  As a complete program, it’s starting to come together:  profiles at the top level, combos attached to each profile, system tray icon to manage the app, etc.

But with all of this in place, it’s making things a little more difficult to troubleshoot smaller issues.  I may need to rip out the input-output conversion classs for a little bit, to test it in a stub.

How violent!

Combo Converter – First Draft

So, after some initial tests at a friend’s house, it looks like SendKeys is too high-level to work in some DirectX games.  I think maybe it’s because it does a press/release cycle too quickly.

There is an OS-level DLL that I could hook into, which would allow me to control my own press/release cycle.  It looks like this is how other people/bots do it, so I assume that’s probably the best way.

I will, of course, have to do more research…

How dull.

New Idea – Combo Converter

I had an interesting idea today (and a difficult few weeks before this idea)!

Fighting games use the concept of combos a lot – there are dozens of moves each character can execute, and a series of button presses triggers each of those moves.  Most other games, however, require parallel button presses to execute commands; Shift, Ctrl, Alt combined with some other key to create a response in the same.

Motion-controlled games are very similar to the series-controlled games, since any physical motion can be described by the states occupied between the start and stop points.

So, we have two different control schemes here.  In the first case, the game becomes easier if you could convert a single button press into a series of button presses.  But in the second case, I began to wonder what it would be like to translate serial actions into parallel actions; converting non-fighter games into something that would feel more like a fighter.

I looked around on the internet, and I didn’t see anyone working on something like this.  So, I’ve decided to try creating an application that will convert serial controller inputs into parallel keyboard outputs.  I should be able to leverage XNA to capture the controller input easily, and then it will just be a matter of using SendKeys to get the output to the keyboard.

Then all that’s left is a serial pattern recognition engine!

How clever!

Revision 44

I’ve been really sick for the last month.  That’s been bad for finishing Unlink.

Tonight, I completed Localization.  Astute readers will note that was never a part of the work to be done.

How shocking.  ;)

Revision 43

Got some new art from the artist – it looks great!

Added that in, plus some code to change the border color based on the type of message being displayed to the end user.

Also, I realized I should add some more functionality for Easy mode:  gameplay hints.  I think I’ll switch that out for the trigger controls.

How scope-creepy!

Revision 42

Been on vacation for a few days, but I got some code changes done over the last few hours.

Mostly, just adjusting the graphics to fit the 80% rule.  Man, that’s a pain in the butt.

Everything looks good now, though, so back to vacationing I go.  The artist hopefully has everything she needs to put together a last bit of awesome.  If so, Unlink will be ready for promotion, and I’ll finally be able to move on to the next game!

Frankly, I’m missing a lot of the features that I thought I wanted to add.  But after putting in a lot of thought, I realized that people would either play the game or they wouldn’t, and that the graphics would hardly matter.

With that, here’s the remaining items in the list:

  • Get final art pieces and integrate into game
  • Create Training screenshots from final art
  • Fix gamer detection so icon shows up
  • Add Community Games trial code (don’t save results during trial games)

How much more?!

Revision 41

I did some work on the graphics tonight.  Everything is much more gray now, in the main menu.  I almost want to make it feel clinical.

Additionally, I removed the background music.  I know, I know – after all that, just to pull it out again.  But the musician has had an accident, so rather than just launch with one song I’ve decided to launch with none.  Also, I noticed some strange behavior when running the audio with MediaPlayer.  I’m not sure what it was, it just seemed weird.  I tracked down something that made me think that maybe MediaPlayer.State doesn’t update very quickly; if so, then that’s probably what it was.

I fixed the bug with the timer; it appears that I was using realtime rather than gametime.  Switching that over fixed everything right up.

Finally, I’ve added the audio capabilities to the story screens.  It’s pretty slick, I must say.  The clips still convert out to wav files because I’m managing them as sound effects currently.  I might get around to fixing that, but I also might not.  It would involve using MediaPlayer, of course, on Song files, so you know – see above.

How lazy.

Revision 40

A little more cleanup done two nights ago; I couldn’t get to the internet to post about it until now.

I decided on how to handle the Tutorial (or should I say, Training).  It won’t be as awesome, but it’ll work:  another type of story screen.  One which takes user input, and can do audio playback.  It actually should turn out to be a pretty nice feat of engineering that’ll be reusable for my next games.

But, before I can put that together, I need to revise the gameplay screen so that it conforms to the “safe display area” rules.  However, that will also require some work from the artist; hopefully she has the time to help me out.

After seeing some of the creations that have made it to Community Games so far, I don’t feel so bad about what I’ve done so far.

How condescending…

Revision 39

Big day today.  Got a lot of cleanup work done, made the code run a little smoother on screen transitions, and did some neat stuff with the way that messageboxes and pausing works.  Also, switched out the AI timer so that when the game is paused, the AI stops running.  I liked the AI-keeps-running design more, but I don’t think it would go over well with players who think they’ve paused their game.

Also, added a controls screen, so new-comers can see what the controls do.  Made a spot for “Tutorial”, too.  Still not sure how I want to come at the Tutorial.  I’ve always like the audio-only idea, but that DOES leave deaf players out.  Anyway, a starter screen is there in the background, ready to go when I decide how I want everything done.

I’m almost wondering if I should worry about the new art down the left side.  After all, the biggest part ahead of me is going to be switching everything to conform to the 80% rule.  And with my deadline coming up, I don’t have a lot of time to really tweak the graphics much anymore.

In making that switch to the AI timer, though, I’ve introduced a bug where – on first startup – the content loading (I think) causes a skip in the timer.  Sometimes it’s just a few seconds, sometimes it’s as many as ten seconds.  I’ve just realized that the issue wouldn’t be noticable if I switched the art.  ;)

How tricky!