Tuesday, 31 December 2019

How long have I really been a games developer?

I'm using my kindle to read some old programming books.
Having got my new "TheC64" for Christmas, I started re-reading some of the old C64 programming books on my Kindle, and this started me thinking about just how long I've actually been programming for.

I originally started to program on the Sinclair ZX81 with my dad back in 1982/83. I mentioned in a previous post how my inspiration for becoming a programmer was playing Attack of The Mutant Camels on a friends Commodore 64. I started to get a magazine called Input that had a few programs in it for various 8-bit machines of the time, and this was my first introduction to programming in BASIC.

Input issue 1
I also had some story books, that could be used with the BBC computers at school, that would teach you how to program, but I mostly stuck to the ZX81 and started working through the ZX81 Basic Programming book that came with the machine. This was a great little book written by Steven Vickers and it was an invaluable resource in the early days. It also helped that it was pretty easy to understand at a beginner level.

ZX81 Basic Programming by Steven Vickers
After a little foray into the world of console gaming with an Atari 2600, I came back to programming around 1986/87 with the Commodore 64. Out of all the computers I've owned, the C64 is my favourite machine, and it's the main reason why I wanted to get the new "TheC64" for Christmas this year. Initially I was just going to use the Commodore 64 for games, but I started to get the programming bug after a couple of months with it and began reading the manual that came with it. Sadly, the manual wasn't as well written as the ZX81 Basic Programming book, and I couldn't get hold of a copy of the C64 Programmers Reference Guide, so I started getting books out of the local library.

Micro Wars was one of the books I got from the library.
Using the books from the library and the stuff that I'd learned previously on the ZX81, I was able to tinker around and get some interesting stuff working on the C64, and I started releasing games for it that I was mostly selling to the other C64 kids at school, until my dad decided to try selling games through mail order. There was also a small computer shop nearby that was willing to buy games from us. You just made a bunch of duplicates and took them over in a box. It certainly was a lot easier to get people to play your games then than it is now, and you could make a bit of cash from it too.

So, I moved on to the Amiga in 1993. By this time I'd been programming for around seven years, that's 1983 to 1993 minus two years of owning an Atari 2600 and another year from 1991 to 1992 when I owned a Sega Mega Drive. My first Amiga was an A500+ that I got from a local shop that was primarily a carpet fitters but had a little side room full of computers, games and peripherals. I traded in my Mega Drive to get a brand new, straight from the manufacturer, Amiga, a machine that I'd wanted for a long time but had never been able to afford before. I wanted one of these things so badly that I could taste it!

Amiga A500+
Sadly, I only programmed on the Amiga for about a year, as Commodore went bankrupt in 1994, so the rest of my time owning one it was used as a games machine. I made a strategy game called Legionus that I wanted to get published, but nobody seemed interested in taking it on. My local publishers were Ocean Software, and they were very supportive, but told me that they were looking more at teams working together for 16-bit consoles rather than solo developers on home computers. I went to a couple of other publishers and was told the same thing... So, I got a bit depressed with it all, quit programming and went to work in a second hand shop called Mike's Old & New. I was 19 when I first started working there and was 34 when I left.

Mike's - it's closed down now and has definitely seen better days.
Mike was pretty big into computers. He wasn't really a gamer, though we did often have games of Arcade Pool against each other on an Amiga CDTV that he kept in the shop, and he used to buy and sell all sorts of things in the shop. In my time there I got access to several PC's, Amiga's, a Neo Geo, Panasonic 3DO, Atari Jaguar, Nintendo 64, Atari Lynx and a whole host of other stuff. He used to buy and sell games too. Mike was also friends with Phillip Allsopp from Digital Image Design, because they'd gone to secondary school together in Oldham. I got quite friendly with Phil when he used to visit the shop in the 90's, and I could have had a job with DID, but I'd kind of fallen out with games development by this time. I stayed at Mike's until he retired and moved to Cyprus.

In 2009 I tried my hand at becoming an actor, and I was just gearing up to appearing in some small productions when my mother fell ill and I had to give up work to look after her. In 2014, as something I could do alongside my carer role, I decided to try games development again after I discovered Game Maker Studio on sale on Steam. In all it's been a bit of an up and down journey, as I've not enjoyed making games as much this time around. I think there's still a bit of baggage from my previous departure from game development and a sense that I didn't really want to do it, but I needed something to do to stop me going insane while I'm in the house looking after my mum 24/7. I am starting to get on with it a lot better now, though, and I'm definitely starting to enjoy it all a lot more. So here I am in 2019 going into a new decade doing something that I'd given up for dead twenty five years previously.

I'd like to be able to say that I'm a veteran games developer, because I started in 1983, but in all honesty most of that time has been spent doing other things. In all, the actual amount of time I've spent as a games developer has been around fifteen years if you take the original nine years on 8 and 16-bit machines and add on the time between 2014 and 2019 on PC. I did get to meet some fellow developers along the way, the Ocean Software guys could often be found in Microbyte, a game shop in the local Arndale Centre, checking out the competitions games. I probably could have made more of an impact if I'd tried to get published sooner and not just gone the easy route of selling games to kids at school and local shops, and maybe if I'd been smarter and hit Phil Allsopp up for a job when he was dropping hints, things would be a lot different. Who knows?

Anyway, none of that matters now. So here's to the 2020's and whatever they may bring for the indie game scene. I'm looking forward to working on some new stuff, and I'll have updates on it all soon.

Friday, 27 December 2019

TheC64 review

The C64 before unboxing on Christmas day.
I got a C64 for Christmas. Not a real one, but one of those full-size "TheC64" emulators that are designed to look and play just like the real thing... almost.

The first thing that struck me was how close to the original box design the new one is. They've obviously tried very hard to keep the retro aesthetic going and tap into the nostalgia for the original machine. And I must say that in my case the nostalgia really worked.
Original box for comparison
Upon getting the thing out of it's box, I was pleasantly surprised to find that the machine has some weight. This is a bit of a cheat, however, as the internal workings of it are very sparse (you can find images of this if you do a search) and the weight is being supplied by a heavy metal plate that is attached to the bottom of the keyboard.

Speaking of the keyboard: It actually feels okay. I don't think it's quite as good as a proper C64 keyboard, but this could just be my old brain playing tricks on me. However, it works nicely and I could see myself sitting down to do some coding with it. I've had a couple of instances where the keys didn't respond instantly when I played a game, most notably when navigating the menu in Nodes of Yesod (more on this game and an issue I found later), but overall it has a nice feel and functions well. It does sound a little hollow compared to an original C64 keyboard, but this is probably due to differences in construction more than anything else.

It really does look nice when it's set up
It was very easy to set up and get running. The machine presents you with some options upon first power up that allow you to set the language, display type between 50hz or 60hz (again, more on this later), and whether or not to want to start in carousel or classic mode. Carousel (pictured below) is the game selection screen where you can choose which of the 64 pre-installed games you want to play, and classic mode loads up the Commodore BASIC screen that you would have got with an original C64. The carousel mode is really easy to use, and starting a game is as simple as navigating to it with the joystick and pressing fire. I had a little mess around with BASIC in classic mode, but I didn't do anything too fancy with it. However, I didn't really have any problems with it and saving my work was nice and easy as the machine creates a blank floppy drive image when you insert a USB stick and you can save all of your stuff to there. Which might be pretty nifty if I fancy swapping between the C64 and WinVICE if I decide to have a go at coding something for it.

Carousel mode
So, the machine is nice. It's a fine recreation of the Commodore 64, it's really easy to get up and running, playing games is a cinch, and adding new games to it is as simple as transferring them from your PC via a USB stick. That being said, there are a couple of small issues...

The first and biggest one for me is the joystick. I was never a fan of the Competition Pro joysticks, and I always thought that they were very overrated pieces of crap, so I wasn't too sure whether I'd like the one on the C64 or not, as it's modelled on one. It's functional, I guess, but I don't really care for it that much. It feels clunky and it's too stiff. There's also been some build issues with it that I've heard about on Twitter and the C64 Facebook group. These haven't happened to me, but I don't have much faith that the thing will stand up to any serious punishment, so no Decathlon for me then.

The second issue I have is with some of the functionality of the machine. Some original C64 games require you to have the joystick in port 1 for them to work, but the TheC64 has all of it's USB ports set to port 2 as standard. You can fix this by taking the game file back to your PC and adding a tag to the name to tell the machine what to do (GAMENAME_J1.D64). J1 tells the machine the game runs on port 1, J2 tells it the game runs in port 2. There's a whole list of different tags that you can add to games to get the machine running in different ways, and you can find out more about them here. I can't help but feel, though, that for swapping ports they could have added a switch to the machine, a keyboard shortcut or an option in the setup menu so you don't have to take it back to your PC to rename the file. Even an option to rename files from TheC64 would be nice. In my house, the C64 and PC are at opposite sides of the room, so changing ports is a bit tiring on the old legs. Also I'm a little worried that plugging in and unplugging USB sticks so often will wear the ports out. Maybe a USB hub is something I need to get.

The third issue is something that I've noticed today, and that's some games are running faster than they should do. I've noticed this most with Nodes of Yesod. NTSC C64's run at 60hz and PAL C64's run at 50Hz, this translates to games running 20% faster at 60hz. Nodes of Yesod seems to be running faster than it should and this is making the game damn near unplayable. I've checked all of the settings for TheC64, I've even factory reset it and gone through the set up process again, and it's telling me I'm running at 50hz with a European 4:3 screen size, but the game still runs too quickly. I tried adding a TP tag to the game file to tell it to run in PAL mode, and it did make it a little slower, but it's still a lot quicker than it should be from what I can tell by watching gameplay videos recorded from real hardware. It's not a deal breaker, as it doesn't affect all games and I may get used to it over time, but it is currently annoying. I managed to complete Raid Over Moscow without losing a single life, so I don't think this speed glitch is a big problem. It would be nice if they fixed it, though.

Raid Over Moscow
The final issue is the lack of any ports or interfaces other than the 4 USB ports, HDMI and power input. This means that you can't connect any hardware to it, unless the people behind it release some sort of USB interface device, and you can't play cartridges. This may put some more serious users off, but if you're just looking for a C64-like machine that you can play games on, that's not going to be a problem for you.

Speaking of games: Overall the games are a mixed bag for me. There are a few classics, like Attack of The Mutant Camels, Impossible Mission 1&2 and Pitstop 2, but there's also a fair few games that left me feeling a bit cold. I'm not overly keen on Battle Valley or AlleyKat for example, and there are a couple of others that aren't really my cup of tea. This isn't a huge issue, though, as adding new games to your collection is very easy and there are still new games being released for the C64, some of which are very good indeed. One of my favourites of the newer bunch is a sequel/remake of the classic Bruce Lee game, which has just the right balance of difficulty and enjoyment to keep me coming back to it. I always liked the original, so it's refreshing to see something new done in the same style. It also has really stunning pixel art on the loading screen!

Bruce Lee!
There are some nice new C64 games on itch.io
So, what do I think overall? Well, TheC64 is a well constructed recreation of a real Commodore 64. It has a couple of minor niggles that need to be addressed, but these aren't enough to ruin the experience. It's a fine addition to the retro gaming scene and should be a good place to go to for older gamers like me who had an original C64, or younger gamers who want a quick and easy way to get into older games without the cost and hassle of keeping an older model in good repair. It's also cheaper than buying everything you need to put an Ultimate64 together.

Overall I'm really happy with it. The only shock to the system was caused by the fact that I'd forgotten just how hard some of these old games were to play. Modern gaming seems to have made me soft. But now I've got my C64 back, it shouldn't take me long to dust off my skills.

Addition: Going back to the Nodes of Yesod issue that I mentioned above, it seems that TheC64 is running the game at the correct speed, but the version of the game that comes installed is a faster version that came on the flip side of the tape or disk when the game was released. So it's not actually an issue with TheC64 itself.

Monday, 9 December 2019

UFO is done... Thank #$&% for that!

UFO is done, and you can download it from my itch.io page through the widget below:

This game has been a monumental pain to develop. I know I said that working in Game Maker tends to feel a bit easy for me, but I've had nothing but nightmares using it to make this game. Perhaps it was the way I was doing things, but I just ended up fighting with one problem after another all the way through the development process.

The first issue was trying to find an convincing way of making the room wrap seamless. Game Maker uses things called rooms to construct the levels and there's a pretty easy way to get something to wrap around the edge and appear on the other side, but it's not seamless. What you get is a jump from one edge to the other and then all the enemies would chase from one end of the level to the other to catch up with you. This wasn't what I wanted, so I came up with the idea of essentially making the UFO stand still in the room, aside from moving a bit to the left of right of the screen, and have everything else controlled by a velocity variable to make them move instead of the player. This was all working fine with the scenery objects and things that don't look like they're moving, like mountains and trees, but the helicopters, tanks and other enemies were a real headache to get working correctly, as you had to deduct their movement speed from their overall velocity to give the impression that they were moving independently of everything else.

I learned later on that I could use the normal room wrap and have a series of "ghosts" for the UFO and enemy objects that could, with the use of views, give the impression of a seamless wrap around when the objects get to the edge of the room. This would have been much easier to do as I'd just need to give everything pretty ordinary movement patterns, but I'd already gotten pretty far with it as it was, and I didn't feel much like re-writing things at that point. Also, my brain was pretty much mashed by the overly complicated way that I'd done it, and the ghosts system was refusing to compute in my head. Thinking about it now, I could have done away with the room wrap altogether and set the game in a valley with hillsides blocking the edges of the room. That would have solved a heck of a lot of problems!

The biggest issue I had with the way I'd done the object movement was with an enemy that I called a Catcher. This enemy, like in Defender, would appear at random points in the room and move down to pick up one of the lifeforms on the ground (people in Defender and Sheep in UFO) it would then move up to the top of the screen and become a mutant. It would work fine in the test level, but when I put it in the game all sorts of screwy stuff would happen with sheep who were not actually being picked up by this object suddenly deciding that they'd fly up into the air all of their own accord, and once they did this you couldn't collect them with your UFO as it was having a weird effect on the collision detection. It was all a bit weird, and I've not managed to find a good fix for it, so the Catcher is currently missing from the game.

So, UFO is out, but I want to add to it. Mainly I want to put back the missing Catcher enemy and tidy up a few of the slightly untidy ends. To do this I'll be releasing an updated version of the game, but I'm not going to be working on it until the new year. I feel a bit drained at the moment, so I'm going to take a break for Christmas, recharge my batteries and come back to it in January/February. I might even get to implement the ghost movement for the enemies and UFO to make the room wrap move a bit better and solve some of the games issues. I also have the updated version of Retr0ids to do, but this is a much, much easier project.

In the meantime, though, version 1.0 of UFO is done, so I hope you enjoy it and I'll see you all in the new year when I'm feeling a bit stronger.

Wednesday, 4 December 2019

Why I make games.

Video games have been a big part of my life for as long as I can remember. My earliest memory of playing games is of myself and my older brother playing Galaxian on a table-styled arcade machine in the local barbers when I was five years old. We also used to play Asteroids in the local supermarket. But games were something that other people made, I had no idea that anyone could make them at home. My vision of the place where video games were made was some massive complex filled with supercomputers and people in white uniforms with electronic clip boards and Star Trek style communicators and robots running around. It sounds silly now, but I was only a very young kid and I had a very fertile imagination.

It wasn't until I was a bit older, and my parents had bought me a Sinclair ZX81, that I started to get some idea that games were made by code that you typed in on a keyboard. I was interested, but I didn't really understand all the strange text that was in the books and magazines I was reading. I'd type something in, and I knew why it worked, but I didn't understand how it worked, or didn't work as the case may be. It also still hadn't fully occurred to me that this stuff could be used to make my own games. That was to change when I went to a friends house and played on his Commodore 64.

My friend was called Dominic and he had a game called Attack of The Mutant Camels. He loaded it up, and I instantly recognised it as being very similar to The Empire Strikes Back on the Atari VCS, as I'd recently played the game with my cousin. However, there was something different about this one. It had camels in it instead of AT-AT's, and I got the impression that this was created by someones imagination and not thought up inside a massive computer complex full of boffins in white uniforms. I still sort of had this idea that somewhere there was a place like this that made all the games that got into the shops, but I quickly learned that this wasn't the case.

I learned that many of the games you could play, especially the ones on home computers like the Commodore 64 and ZX Spectrum, were coded by people from home, some of them not very much older than I was. I became quite interested in finding out who "Camel Man", as Dominic and I came to know him, was, because I wanted to know more about how you made games on computer.

It turned out that he was called Jeff Minter, and he lived at home and made his games from there under the name of Llamasoft. This really shattered my imaginary vision of how games were made, and I thought that I'd like to have a go at it myself. So, I pulled out the ZX81 BASIC Programming manual that came with my computer, and I started to work my way through it during the summer holidays.

I didn't get it at first, and I almost gave up a number of times, but I was able to understand more and more of it over time. My dad would try to help me out with the stuff I was struggling with, and between us we started to work out how things functioned in this strange language of numbers and symbols, so much so that I managed, with much trial and error, to make a functioning Space Invaders clone that I called INVADR. It wasn't very good, but it was my first proper game.

Over the next couple of years I upgraded from a ZX81 to a Commodore 64 of my own and discovered even more Llamasoft games, like Revenge of The Mutant Camels, Batlyx, Ancipital and Sheep in Space. I was always fascinated by his unusual take on games. Where most people were putting planes, space ships, tanks and aliens into their stuff, he was using goats, sheep, camels, llamas and other four-legged beasties. It fired up my imagination to make more of my own stuff.

After I got my Amiga in 1993, I lost sight of Jeff Minter's games (I missed out on Llamatron) and I thought that he'd probably gone the same way as some other bedroom programmers did in the early 90's. It wasn't until I bought an Atari Jaguar from the second hand shop I was working in at the time that I discovered Tempest 2000 and realised that Jeff was still producing games.

Tempest 2000 was a great game. Sadly, though, my own adventure into making games had quietly fizzled out in 1994, and even though I was happy to see that Llamasoft was still around, it wasn't quite enough to get me back to wanting to have another go again. I sold the Atari Jaguar a year or so later and lost track of Llamasoft again, until I got a PC and got it connected to the internet.

I was doing a search for Llamasoft and came across their website. I also found that Jeff had a Twitter account, so I followed that and learned that he did something called Sheep Time where he'd take his mobile phone out into the fields of his farm and feed digestive biscuits to his sheep, donkey's and llamas. Ten year old me never conceived of a future where I could sit down having my breakfast in the morning while using my phone to watch a guy who made some of my favourite games feed digestive biscuits to sheep!

When it came time for me to try my hand at making video games again, I decided to use some influences from Llamasoft in my own stuff. I'm not going to be putting llamas or sheep into everything (the sheep in UFO and the camels in Retr0ids are a one off and I don't want to be trying to rip off someone else's ideas), but I do try to let my games be influenced by some of the visual styling of Llamasoft's early games, with flashing imagery, particles and arcade styled sound effects. I'm not very good at it, but at least I try. I've also recently taken to listening to the music that he shares on Twitter, which he listens to while coding, because I find it's a big help with getting on with my own games. I've had a bit of a problem with getting back to grips with games development, as I quit it under a bit of a cloud and only really wandered back into it to stop myself going stir crazy while being a 24/7 live in carer. I've found that following Jeff's approach of having some cool music pumping away and not taking everything so damned seriously really helps.

So, yeah. I admit that I am a massive Llamasoft fan boy and I probably wouldn't have even tried to create games if I'd not seen Attack of The Mutant Camels way back in 1983. I'm never going to be a big name in games, that boat sailed a long time ago when I didn't jump on the bedroom programmer bandwagon and get a publisher when I could, but at least I can have fun making slightly odd arcade inspired games with my own twist and add a little pinch of Llamasoftie-ness to them here and there.

Monday, 2 December 2019

Let's not upset the apple cart.

Part of the reason I make the games that I do is because I was around in the early days of home computing when people were making Space Invaders, Pong and Defender clones, and I got out in 1994. I'd only ever programmed simple 8-bit, 2d arcade games (with a brief flirtation with the 16-bit Amiga 500, but this was mostly used as a gaming machine), and I had thought about coming back to it several times between the time I quit and 2014, but nothing really came of it until I randomly found Game Maker Studio on Steam.
ZX81 - This is where I spent most of my time as a kid.
I honestly didn't care too much for Game Maker Studio at first, because I mainly felt it was a glorified Shoot-Em-Up Construction kit, and a bit of a cheat way to make games. I'd tried SEUCK in the past and didn't really care for it too much, either, because I preferred "proper coding". So my approach to GMS was to use it for messing around with until I'd plucked up the nerve to see if my "proper coding" skills still functioned. Since my self imposed exile from coding in 1994, I'd not looked at anything even remotely to do with programming aside from a brief course on COBOL (which I hated) when I was unemployed around 1995/96 or so.

SEUCK... I always thought it was a bit rubbish.
I'd spent most of my time as a kid programming on the ZX81 and the C64, so I looked on Game Maker as being a bit of a games development with the training wheels still on sort of thing, and I don't think I've ever really shaken that mindset off fully. To my surprise, however, GMS was actually okay, and I enjoyed using it. So much so that I've not really bothered to use anything else. I'd like to have a try at something a bit more advanced, but there's stuff holding me back, and the biggest one is a lack of time.

The time problem is due to my role as a carer. Development time is at a premium for me, and I typically only spend an hour or two a day working on my games, because the rest of my time is taken up with sorting out medication, meals, hospital appointments and the other things my mother needs during a typical day. Using GMS means that I can get results really quickly and a couple of hours is typically enough to get a pretty well functioning, if simple, game going. Though UFO has proven to be a bit of a pain for various reasons.

I'd like to have a go at developing something in Unity, because I'd like to do a 3d game, but it means sitting down and learning how to program in C#, and I don't know if I'm comfortable with that at the moment. It's taken me nearly six years to get myself into a position where I'm now comfortable with making games again, and I don't really want to unsettle myself with something new.

So, you may be wondering, if I learned to program on the Sinclair ZX81 30-plus years ago, why I'm holding back on learning C#? It should be a breeze, right? It could be. In fact, it probably would be pretty easy for me, but I have a lot of stuff going on with my position as a carer, which includes helping my mother through breast cancer, and life is generally really, really, stressful. I'm finally getting to enjoy making games in Game Maker Studio 2, and games development is a pretty chilled out experience for me at the moment. Occasionally I have an issue or two, mainly when GMS2 decides to screw up in totally illogical ways (there's an example below), but I'm currently in a pretty happy place, so I don't want to rock the boat by adding something new to my already very busy life.

Game Maker Studio 2 oddness - The object o_UFOBomb should destroy itself when it makes contact with o_RadarBase1, but it doesn't. All the other collision events in the list have the same code "instance_destroy();" and they all work, but not the o_RadarBase1 event. This is why working in GMS can sometimes be a real pain!
To give you some idea of how my role as a carer impacts my role as a developer: I started writing this blog post at 9am this morning, while my mother was having her breakfast. It's now 1:42pm and I'm not yet finished writing it. If I'd been able to sit down and just get on with it, I would have had it done in 30 minutes to an hour, but my time has been punctuated with clearing breakfast bowls away, giving out 3 lots of tablets, making sandwiches, numerous toilet calls, changing dressings, answering the door to a wheelchair repair man and setting up the Christmas tree. Aside from the Christmas tree, this is a typical morning for me, so imagine trying to learn something new like C# on top of constantly having to step away from it to do other things. It's not that I dislike looking after my mum, but it can be very stressful when I'm also trying to do other things.

I don't know if I'm ready to sit down and learn something, knowing that the learning would be punctuated with having to do more important things. Also, I may have to break off at a moment where I'm struggling to work something out, which would leave me feeling frustrated (I hate breaking off from something I'm trying to solve when I'm right in the middle of it), and could result in me being a right grumpy git when I'm dealing with my mothers needs. She doesn't need me being a grumpy ass on top of her other issues, so I think it's much easier at the moment to continue with the way things are and maybe do a few minor Unity tutorials one afternoon a week when my mother is sleeping.

So, yeah, there is a sense of wanting to do more than just piddle around with Game Maker Studio, and perhaps have a crack at making my own engine somewhere down the line... but at the moment I think I'd be taking on a whole new level a stress that I could do without.