Gavin Pugh - A Videogame Programming Blog

Using Game Controllers over a Remote Desktop session

3 October, 2018 at 10:22am | Work

Well, it’s been over six years since I last wrote on this blog! The theme could do with updating, it’s screaming “2010” at me.

So, I work from home a fair bit. Be it evenings, weekends, or sometimes during regular work hours. The setup I have for that is much like any other game company: We have a secure VPN into our work network, and we’d use Remote Desktop to control our work PC. My home PC isn’t as beefy as my work PC, so it’s nice to have the power of my work PC when compiling code, or building game data. A PC build of our game runs fine over Remote Desktop, if you size the window down it is pretty decently playable.

We make our game for “the consoles” too, so we’re able to run on those via Remote Desktop, and the platform holders also provide viewing apps to see what’s going on, on said consoles. These work pretty great, and work over a Remote Desktop session. When I’m working at home, I generally don’t find anything lacking about my dev environment (and having no office interruptions is great!). Up until now though, I did have one gripe… Controllers. We can control the PC version of the game with a mouse, but with the console builds over Remote Desktop, you’re stuck with keyboard controls, or other facsimiles of a controller. Being able to use a controller over a Remote Desktop session would be great! I was surprised to find out that it’s possible, but Microsoft for some reason disallow it by default.

Here’s how to get it working…

Read more »

vs-android v0.94 Released

25 July, 2012 at 2:11pm | Android, C++

vs-android MIPS

It’s been a while!

I’ve been pretty busy in recent months. Some of the press about Neversoft last month may give some clues. I’ve been sitting on a new vs-android for a very long time now, which contains some nice improvements. Unfortunately I just never got a block of time together, to finish it up for a release.

As well as it seemingly always stuck at the top of my “TODO” list, what also prompted me to get it done was a breaking update in the r8b NDK. Google like to move around their directory layout, and rename things from time to time. 🙂 The latest NDK also added support for GCC 4.6, as well as the MIPS architecture toolchain. So I implemented functionality in vs-android for all of that.

Read more »

Ludum Dare #22 – Postmortem, Journal, and Time-lapse

21 December, 2011 at 12:20pm | Life, My Games

So, this past weekend I participated in the 22nd Ludum Dare competition. You have just 48 hours over the weekend in which to create a game. The crux of the competition is that you create all code and content within that 48 hour period. No re-used assets at all. Only engine/middleware/framework code is permitted to be prepared beforehand.

I wrote my game with Unity. It’s the first project I’ve ever undertaken in Unity, and I had very little experience of it. I came out of the other side with a very positive impression, I really liked using it. As much as I love C/C++; given the time constraints, it seemed a good idea to go with Unity. The other big upside is that you can deploy the game to be played via a web browser. This was definitely what I wanted. I didn’t want people to have to go to the hassle of a download-and-install, just to play the little toy game I made over a weekend.

Read more »

Developing for the Kindle Fire, on a Windows PC

21 November, 2011 at 10:27am | Android

If you’re a developer and you’ve picked up the Kindle Fire this past week, you may still be in the Honeymoon period with the device. 🙂 If that is starting to wear off by now, you may have the inkling to try writing code for it. If you’ve previously developed software for Android, you’ll be a little worried when you first connect it up. Out of the box, you can’t develop with it right away.

Thankfully, it’s not too complex to get things working. Thanks to some existing blog posts, it was hardly difficult to figure it out. I thought I’d write up my install process, for anyone specifically developing on a Windows machine. I’m sure by now though, a week after launch there’s plenty of info out there. I’m also wanting to flex my blog-writing muscle again, just to get something written and maintain my recent uptick in pace.

Read more »

vs-android v0.93 Released

14 November, 2011 at 10:21am | Android, C++

In an effort to post more often in this blog, I’m writing up a minor vs-android update. I don’t usually write here about the minor version changes, I usually just fire out a tweet when I do those.

I actually started work on this one, the evening after I published XNACPC. I was going to fix some of the issues of vs-android, which were posted to the Google Code page. One of them was related to a new Android SDK (the Java/apk building counterpart to C++’s NDK), which caused issues when building the vs-android samples. So I went and downloaded the new SDK. I also figured I should grab the r6b NDK, which had been out a while now but I hadn’t updated to yet. To my surprise NDK r7 was out! Coincidentally it was posted up the very same day I decided to check it. Spooky.

Read more »

XNACPC: Xbox 360 Amstrad CPC Emulator, released!

11 November, 2011 at 9:44am | XNA / C#

On and off during the last month or so, I’ve worked toward finishing a project I wrote about last year. It’s an Amstrad CPC Emulator, written in C# using the Microsoft XNA library. I’ve written plenty about the background and motivation in the previous blog post. This post is just here to announce the finished product, and touch a little on the things I’ve worked on recently.

The picture above is from Hewson’s “Nebulus”. Now that the emulator has a pretty complete feature set; games like these are very playable now. It makes a world of difference having the audio fully working now, for example. It also is great to finally be able to play at the original, full frame rate on Xbox 360. Surprisingly the 360 had trouble emulating this seemingly primitive machine!

Anyway, after the jump is a video showing the emulator in action on the 360…

Read more »

vs-android: Closing in on v1.0

22 July, 2011 at 10:48am | Android, C++, Life

Microsoft Android

So, it’s been quite a while since I last posted on this blog. I’ve been pretty busy the past few months with various things. At work we had an important milestone during that time, which thankfully passed with flying colors. Outside of work though, I actually got married a couple of months ago! My wife and I eloped to Hawaii, just the two of us, and tied the knot. 🙂

So it’s been quite a busy period recently for me. Starting on vs-android back in January probably wasn’t the best timing. Getting it done wasn’t too bad; it was more the follow-up support email period that was tougher to deal with. More so, given the marriage preparations and what have you, which I was going through at the time. So vs-android got left by the wayside a while, and rightfully so!

A couple of weeks ago though, I picked up the project again. I was determined primarily to fix the dependency issues the previous version had. After looking again at what Microsoft had done with their Win32 toolchain, I decided to massively change my approach. I went from a system that was built primarily with MSBuild, with a little C# to sanitize pathnames and switches. To a system which had almost all of it’s moving parts in C#, with MSBuild just ferrying the project data into it.

That was pretty much the basis for the latest iteration of vs-android. I bolted on a few other things along the way, but for the most part it was just about getting it into a stable and reliable state.

Read more »

vs-android: Developing for Android in Visual Studio

4 February, 2011 at 9:49am | Android, C++

Visual Studio - Android

DISCLAIMER: I tend to waffle on a bit. “Skip to the end” if you just want to find out about vs-android, and where to download it.

About six weeks ago I moved into that club which everyone else seemed to be part of, but not me. I joined the ranks of smartphone owners! No more 90’s flip-phone; I picked up a recent-ish Android handset. I’d never really been too into the whole concept of smartphone, but was starting to feel a little left behind. I must say that after those few weeks I’m sold, these things are pretty cool.

So, what’s a programmer to do? I think I may have actually downloaded the Android SDK before I even received the phone. Yeah, just a little bit eager! It’s actually the second handheld device I’ve tried to code on. The first being the Tapwave Zodiac, also with an arm processor and touchscreen. I never really got anything worthwhile going on it, my excuse being a job hunt and subsequent move to the United States. But nonetheless, it was a fun little handheld to code for. I was certainly looking forward to coding on a much more popular device.

Read more »

XNA/C# – StringBuilder changes in XNA 4.0

21 December, 2010 at 11:00am | XNA / C#


So yeah, this is another post detailing a change made in the latest version of XNA.

This one was inspired by some comments on a previous blog post of mine: “StringBuilder to String with no garbage”. A developer named Matt, who was targeting Windows 7 Phones, pointed out that this particular trick with reflection was not working. He’d get a ‘FieldAccessException’ when attempting to access the internal private System.String object.

I’d just got round to installing the Windows Phone stuff to check this out, and indeed this is the case. I tried various different flags in the GetField() call, but had no luck in getting it to work. I tried setting up a trivial case with my own class containing a private ‘System.String’ and had the exact same problem.

Read more »

XNA/C# – Thread-local storage on Xbox 360

29 November, 2010 at 9:48am | XNA / C#

Thread-local storage


I initially begun writing this particular article back in April. Back then with XNA 3.1 to play with, there was actually a method of ‘thread-local storage’ for Xbox. With the release of XNA 4.0, this last remaining native method was removed. The [ThreadLocal] attribute though was added to the Compact Framework, but it seems to be a stubbed non-functional attribute on Xbox 360.

So, where does that leave us? There is various ways you can manually code up a thread-local storage solution. The whole crux of it is data-retrieval and storage on a per-thread basis. The most immediately obvious way to go is just some sort of associative container, a Dictionary<> of some sort of thread ‘id’ mapped to the data you wish to store.

Read more »