Wednesday, January 02, 2019

YoYo Games... The good, the bad, the cake.

Now that I've left YoYo Games, and especially after such a long period of time - almost 10 years in fact, I thought I'd take a little trip down memory lane and reminisce a little. I won't be able to talk about everything here, coz that'd be a book....and I'm not ready to write that yet!

Realtime Worlds non-compete waiver
It all began for me in the summer of 2009 while I was at Realtime Worlds, I had been approached for some freelance work by one Sandy Duncan, someone I remembered vaguely from my Visual Science days as running XBox. Strangely enough, I recommended someone else for the gig, but they didn't want to do it, so I started to think about it myself. I happened to be down in London for a family event so arranged to meet with Sandy at his home on the way back to discuss this simple "porting" gig.

Sandy lives in the back end of no where, where post codes and Satnavs don't get along, but I did eventually find my way there, and Sandy and I chatted about things; my experience - and that of Russell Kay who I had persuaded to help me if it came off, and about what the job entailed. YoYo Games had been going for a couple of years at this point and had already acquired Game Maker (note the space in the name!), and he had already gotten it ported to C++, although to be honest, that's being generous. Sandy wanted to get this onto console, more specifically the PlayStation Portable (PSP), so he needed someone to port it from windows to the PSP. Sounds straight forward enough right?

As it turns out, the initial port was very shoddy - probably because it was left to an Intern who simply didn't have the experience to know any better. It was supposed to be the basis of a cross platform port, yet it was based completely around MFC (Microsoft Foundation Class), making it utterly unportable. So we spent several months removing all this and making it actually portable, and using the a PSP homebrew SDK to get something running. In December 2009, we were able to show Skydiver running on a PSP - Sandy was ecstatic.

From here, Sandy decided to open an office up, either in Dundee or Sheffield. If I was interested, then he would open in Dundee, which I was and so he did. He then hired Russell and Myself to work there. Being from Dundee himself, it allowed him to visit relatives while he was here, so it all worked out pretty well. We continued with the PSP version, but then in what become typical Sandy fashion, decided that iOS would be be a nice target. I spent a month or so porting everything over - our work making it all portable paying off here, and we started to look at making Skydiver our first game. This was closely followed by Russell doing an Android port of the Game Maker runner.

As to the PSP port, we did finally get it out, but due to the Sony submission process etc. it took a loooong time, and in the end we only released 2 games there; Karoshi and Green Tech.

The next thing we looked at doing was an update to Game Maker 8.0. Having done (and quite liked) Pascal in the dim and distant past, I took this on while Russell was trying to finish off GM4Mac, a Game Maker 7 port. GM8.1 had the first zooming room editor which I spent quite a bit of time getting fast enough as it was all software rendered, and the first introduction to having "frozen" D3D models, allowing for much faster - and larger, model submission. There really was a massive amount in it, and so it made for a great first dig into Game Maker IDE itself.

After this, we set our sights on HTML5. In 2011 this was a new and emerging technology, and Sandy reckoned we could jump in early and perhaps make a big splash. The biggest issue was that we needed to port whole runner to Javascript, a language neither Russell or I had ever worked in before.
So while Russell started work on the GML to Javascript compiler, I started with a blank sheet or paper and begin a whole new runner. This wasn't nearly as hard as we thought it would be, and did make us think we should have just written the C++ one from scratch, instead of trying to port it. Oh well, never mind... What was pretty amazing, was that in just 2 weeks, we had a couple of games being exported from GM8.1 and running in HTML5. Simple games to be sure - Poker Squares being one of them, and I think Solitaire being the other. We all headed out to Utrecht to meet with Mark Overmars and discuss and plan things, and to get an idea of just how much work this was going to be. We then jumped in with both feet and finished the port, with Chris and I converting a couple of thousand GML functions to Javascript and making Game Maker HTML5. We then headed off to our first conference, GDC Europe, to show it off.

None of us had really been on stands selling stuff like this before, but it's fairly safe to say we loved every minute of it. The big message we got from everyone was; "Yeah, that's really cool... but we really need to be able to export to iOS and Android as well."  Doh! We had this back in the office of course, as this is what we did to make and sell our own games.

So Sandy decided we needed to get all this into an all in one sell-able bundle, and GameMaker: Studio. You'll notice it was at this point, we decided to drop the space from Game Maker. There were a couple of reasons for this, mainly though because we thought "Game Maker" was more a description, while "GameMaker" more of a product name. 

In September, Sandy sent me to Microsoft's BUILD Conference in Anaheim, LA. This was the first time ever that I'd travelled on my own abroad and I was a little nervous to say the least. I managed to upgrade from Economy to Premium Economy on checkin, and Sandy even refunded me that when I got back! I loved this trip, and it's totally set the travel bug alight in me....

To make GameMaker: Studio a reality, took from August to March to get a working version to show off, just in time for GDC 2012 in San Francisco. We had a nice stand right across from Google, so had lots of foot traffic.

This was the first time I'd ever been to San Francisco, not that I'd see very much of it.... Both Russell and I were stuck in Sandy's hotel suite working on the tutorials we were going to be demoing over the next few days. We got a headset and speakers, and we stood there talking through how to make Veg Ninja - a Fruit Ninja clone in just 15 to 20 minutes. All in all, it went quite well I think, and it certainly us on our marketing course for the next few years; get major features ready for shows, then go and sell it to people.

We did go to Develop in Brighton to show things off as well, and attended the Develop Awards for the first time which was fun. Our little stand was right next to a large Unity one, and it was funny seeing all these 2D games people had spent years on. It never took long to convince them that they could have done it all much faster in GMS. It was usually the case they'd been working on it for 6 to 9 months, and thought they'd have another 3 to to go, then 6 for doing a port. In GMS, they could have gotten some of the games down to a few months, with the ports being almost instantaneous.

Develop was also a nice cheap show to attend, as I could flatten my minivan, load it up, and drive down, stopping by Sandy's on the way back to pick up a large filing cabinet. This was a fun trip - even if the drive back was in monsoon conditions!

Shortly after this, we also got an interesting call from Steam, as they were looking for games to put on their new "apps" store (rather than game store). Sandy had previously told them to Sod Off, but that was soon smoothed over, especially when they found out we had the beginnings of a Linux runner than I had been working on in my spare time. They were keep to get both the app store, and more Linux content, and GameMaker seemed like a perfect fit.
I was given the task of integrating things and getting GMS onto Steam - you can read more about it, and 2012 here, it was quite a ride!

We did then of course go back to GDC Europe in 2012 as well, and I gave a talk on HTML5 Dynamic  WebGL rendering, which was fun.

One thing I have loved over the years with YoYo, was being sent out to shows to give talks, or meet up with folk, or to do stands. From hardly travelling, to travelling a lot, I surprised myself by discovering that I loved it! I can't get enough of it in fact, so I usually jumped at the chance to hope around various shows to do talks.

Over the next year we swapped focus from publishing to making GameMaker, as now that people could publish stuff themselves, there seemed less need for us to spend all our time chasing content. We did still make some things, mainly to test the product, something I still believe was vital, and something I'm sad we weren't allowed to continue doing.

Through this time I added shaders, the new primitive building and custom vertex formats, while Russell added YYC - the YoYo Games compiler, making things more secure and faster. At GDC 2013 we demo'd both shaders and the compiler. This was the great thing about doing your own content, we were able to demo things properly. When you release a complex feature like shaders, it takes the community a few years to catch up and make content you want to demo, and for Press stuff you just can't wait that long.

One thing that we didn't like about stands of course, was the standing! It was actually the very first show where Sandy came up with the rule that you weren't allowed to sit down while at the stand - except when doing a demo. This seems a little harsh, but actually it's definitely the right thing to do. The first show we did at GDC Europe, we had a little walk around the stands, and the smaller ones - like ours, usually had one or two people on them, and 9 times out of 10, they were sitting down, face planted in their phones. This is the most unappealing, and unapproachable way to man a stand. Even if you were interested, you just didn't want to approach them, it was so uninviting! But not sitting, this meant you weren't on your phones, and were standing looking out, and it was a far more welcoming stand than many others because of it. When someone came up to the stand, you'd be there, smiling and chatty. Not sitting ignoring them, looking at your phone.
It's certainly hard work - especially on your feet, but it's by far the best way to man a stand. This was especially hard going when later that year, Stuart and I went back to San Francisco to attend Casual Connect, and this one had a 9 or 10 hour day. Normally expos are open from about 10pm to 5pm, so 7 hours, and you'd get a little time for a break at lunch - and there were usually more people on the stand. But here Sandy and Stuart were doing various meetings as well as being on the stand, but for the most part, I was left to man it. This was a looooong day. Stuart and I went for food at night, and we were both falling asleep waiting on it arriving. Hard going.

2013 was also the "year of travel", which you can read more about here, it was mad, and I loved every second!

GDC Europe was our next show, where only 3 of us attending this time, but it was still great fun. This was probably our nicest stand, and lots of other exhibitors came round after to ask where we go it from.

This was also the trip where I was the drunkest I've ever been.... I blame Kristina Rothe (who was at Microsoft at the time), who took us to a GDC party and got me rat-arsed.... was great fun.
(the next day wasn't....)
Over the next year, YoYo FINALLY got into consoles with GameMaker! Sandy finally managed to get deals with both Sony and Microsoft, although the Microsoft announcement got delayed, so the logos were pulled last minute from the stand. But finally showing GameMaker on the PS4 was awesome! We got a stack of games from developers to show off - and to test the new platform. I wrote the initial PS4 port and got a stack of games running on it. GDC 2014 was our biggest stand, and we took a load of staff with us to help man it, and it was great fun again. This was also our last stand.... although we didn't know it yet, the Playtech acquisition was just around the corner....

Developers were ecstatic, they could finally export to console, quickly and easily, and not have to commission full game ports. When you get right down to it, consoles are all about inspiration. Developers WANT to get to console, for many it's been a lifelong desire to get one of their games, onto a console - any console, and now they had a simple route.

Of course, even though the exports were paid for by Sony and Microsoft, they still had to get approval, and sign up to normal console rules. This was sometimes beyond many devs, especially as in the early days you had to be a company, not an individual. This has improved loads over the years, not least because of people like Shahid Ahmad on Sony, and to a lesser extent, Chris Charla on XBox. Shahid, was pushing the new Indie scene like you wouldn't believe, he was also our champion, and the reason GameMaker finally manged to make that leap onto Sony platforms. Indie devs owe a huge amount to Shahid, even when they've never even heard of him.

YoYo was growing a lot at this point, we'd taken on a load more "core tech" people, and with all the other platforms, we were certainly needing the help.

YoYo Games was bought by Playtech in March of 2015, and although the deal had been ongoing for a few months, it was finally signed at the end of March. This meant we couldn't go out to GDC again, so only Stuart, Sandy and Dan - our new Community manager headed out. I really missed not going out that year...

This was also the year we started to focus work on GMS2.0. I was to concentrate on the IDE, while Russell and his team would look after the runner/compiler side, both with 1.x support and any new GMS2 features. In 2014 we'd decided early on that we wanted to host it inside a browser, that way it could be "cloud ready", a big buzz word in 2014, and so that it could run on basically any platform. I spent a few months getting the basic infrastructure up and running, and I had a basic window system running, however... it just wasn't cutting the mustard. We broke the news to Sandy that browsers were just not going to work. We'd used an off the shelve window system, and while nice to look at, just wasn't fast enough. On top of this, the browser was just getting in the way, and even if we moved to WebGL and did everything ourselves, it would stuttering all over the place.

The decision was taken to start again in C#. One of the major goals of GMS2 was to make the IDE as portable as possible, as we really missed not getting GMS onto Mac or Linux, so we didn't want to have the same issues with GM2

We were able to salvage some of the JavaScript work, taking it over to C#, I also got another coder - Claire, to help out which was great. I wrote the whole GMS2 infrastructure, the rendering engine plugin system, message/event system and input manager etc. while Claire ported the Javascript MVC system to C# and then started work on the GUI itself. While I'd done the basic window in window system using a 9 slice rendering system, which I then also then used for buttons, there were a huge number of GUI elements needed, so she started on those. More folk started to come onto the project to help out, Chris helped with the UI and file IO - and eventually took on the OSX version, while Alan started on the code editor and image editor, with Claire moving onto the room editor later. Even more joined as time went on to help fill out the huge number of features GameMaker has.

GMS2 is a massive project, especially when you consider the whole UI rendering layer had to be written first. I'm especially proud of the work the team did on the whole thing. While there are always going to be usability issues, my plan was to get something we liked first, then bounce it off the community and take feedback.

Our first feedback session was in Utrecht some Game Devs, just after we'd been to Develop in Brighton again, hosted by the Dutch Game Garden - who are a great bunch of folk BTW. I'd gathered about 14 developers under NDA to talk through GMS2 with the help of Jan Willem of Vlambeer, to see what they thought. This went pretty well, and devs were especially interested in the new Room editor - which wasn't a surprise really as it was massively improved.

I also took some time in August to go to Utrecht to get Mark Overmars opinion on things, to see what he thought about our changes - and to visit with him, it's always great catching up with Mark, so any excuse really! 

In September 2015, we were summoned to Playtech in Israel to talk over future GMS2 plans. Having never been there, we were excited to go, so we booked our trip and off we went! Playtech were in 2 separate buildings and out unit manager Orel, took us in for a look and nose around, which was cool.
I was shocked at the level of security throughout Tel Aviv, with actual checkpoints dotted around - very odd. It was only for a couple of days, but it was good fun - aside from the utterly splitting headache I got on the last night. Oh well... Lovely place, and lovely folk.

The next one was just a couple of months later at GDC 2016, I had a suite where I met with developers to talk through what we were up to, and how things were going. Feedback from both groups was generally good, although I kept the proviso that as soon as devs got their hands on it, all bets were off.

2016 saw us crack on with things, with an aim to release a beta at the end of the year - although that of course never happened. It was decided that we needed a compatibility plan. We had been saying for years than at some point, we'd just break things so that we could move on, and GMS2 was going to be this break. Our new Playtech managers however thought we should have a much smoother upgrade plan, allowing users half way though projects to upgrade and carry on. This was definitely the right call, and has helped people massively. I think the key to this was not leaving the features in the runner, but emulating them in GML. This meant we could still break most things, but fix them up in GML code if users use that feature or function. This let users upgrade game code at their own pace, and that's pretty cool.

It was about May 2016, that I also started my "game in a day" tests. Although I couldn't say at the time, these were to test out GMS2, and make sure things were actually usable. I cranked out several retro style games in 10 hours or less! Breakout - which became a demo for GMS2, Pole Position, Pac-Man, TLL, Chimera, Gauntlet and Uridium, all done (mostly) in a few hours. TLL to be fair took a little longer, as I got carried away in the new room editor doing the full TLL map - it was great fun, and the new room editor was a pleasure to use.
I still count all this as a missed PR opportunity that I wasn't able to show me doing these games so quickly, but there was a total blackout on GMS2 work. First, because as a public company, we couldn't just leak new products, and second showing how far along GMS2 was, would kill GMS1.x

2016 also saw us finally getting a new Managing Director in the shape of James Cox. This meant James taking all the Playtech meetings, and letting us get on with things. Playtech like any large organisation has it's bureaucracy, and James was left to navigate that on behalf of us all - something we were all very grateful for!

All these changes added a lot of time, pushing release out a few months, so at GDC2017, I again got a room with a sitting area so I could hold some developer meetings, and show not only what the final one was going to be like, but also that we had a Mac version up and running.

My GDC schedule was again totally jam packed, so I saw very little of San Francisco and the show, although I did reserve a couple of hours for running around the expo...

2017 was a big year for YoYo, the launch of GMS2 for Windows and Mac marked a whole new era for us, we even won an award in 2017! But this is also where things started to change for me. I was gradually being pushed into the background, I was no longer asked to do talks, or give interviews. James had a very different way of doing things, and I started to lose the interaction with developers that I loved about the job.

I carried on at home doing cool little GameMaker projects in my spare time to test the engine out, from making a MOD player completely in GML, to doing more "games in a day" - this time I was allowed to stream them, although still under some restrictions. Manic Miner, StarQuake, JetPac, Boulder Dash, Blood Money, even Lemmings, all remade in 10 hours or less.

I even did some more tech blogs, trying to revive them as they'd kind of died off in the previous couple of years....

But around August/September time people were being transferred onto another internal project, and I was starting to get frustrated with the lack of progress on GMS2. James was demanding more and more new features to help sell it, but not giving me the time, or man power to fix things. This meant over the next 9 or 10 months, GMS2 would get a load of new features, but become increasingly buggy.

This in turn started to make me lose interest at home - for the first time in 8 years, I started doing something else in my spare time. It was about here that the ZX Spectrum Next really got a lot of my attention. At the start of 2018, I even started to do some retro shows and talks with the rest of the Next guys - which I love doing.

In March 2018 we headed off to what was my final YoYo Games GDC, this time in a proper meeting room. I was again stuck in this room for the week as the other headed out for biz dev and press meetings - again, I was removed from all press interaction.

At the start of 2018 things had again changed, and people we starting to get transferred back onto GMS2, so we started to try and finish off some of the outstanding features and move into a stabilisation period. This was mainly bug fixing, although these took months and months to appear, the product was finally getting the stability work I was longing for. We spent a lot of time bringing HTML5 up to spec, again something that's annoyed me - it's been the forgotten child for a long time, but finally we were starting to put some real effort into it. We cleared off hundreds of HTML5 bugs, and ran loads of games through it to make them work and make it even more compatible. 

James left YoYo at the end of September, and I hoped things might improve for me at this point, but alas no... if anything, the plans he clearly set in motion carried on and I was sidelined even more.

A few devs left around this time as well,  and I felt a lot of the fun had gone for me. It was a hard choice, but the time had come to move on. It was great fun, and I've probably done more at YoYo the ANY previous job I've had, it was amazing how much stuff we got through. So... here's a little more reminiscing...

Some of the notable things I did, or was part of, while at YoYo

PSP Runner port
Texture page packer
Batching and Hardware T&L
iOS Runner port
Simply Solitaire
Initial Ad implementation for Simply Solitaire
Game Maker 8.1 update
Static 3D Models
New GUI Layer
HTML5 runner port
DX9 Upgrade
GameMaker: Studio
Linux runner port
GameMaker: Studio on Steam
GameMaker Player on Steam
HTML5 WebGL upgrade
Added GMS Networking API
Added GMS Shader support
Added GMS Primitive builder and custom vertex formats
Added GMS Debugger
Updating the GMS draw events
Application Surface
PS4 Runner Port
GameMaker Studio 2 IDE
A stack of Techblogs, including

  • 2D Shadow tutorial
  • Dynamic Rendering Masks
  • Depth based Mouse Collision
  • Creating a C64 emulator series
  • Writing a ZX Spectrum Emulator
  • Manic Miner Binary files series
  • Shader introduction series
  • Networking introduction
  • Introduction to Binary
  • The Hazards Of Precise Collision Detection
  • Seamless Tile Scaling In GameMaker
  • Fast Platform Collisions
A stack of tech demos and Marketplace assets.
  • Isometric demo
  • Platformer demo
  • 3D Cube test
  • Network platformer demo
  • Your World - GTA 1 Engine
  • C64 emulator
  • ZX Spectrum emulator
  • 3 Raspberry pi games
  • ZX Spectrum Colour Clash demo
  • GML MOD Player
  • Ball Breaker Demo (Arkanoid)
  • GMS2 Dungeon Demo
  • Voxel Landscape
  • Bit Streaming library
  • Ball Blaster game demo (Ballistx)
  • Muncher demo (Pac Man)
  • Full Boost demo (Thrust)
  • TLL Shadow demo
  • Alien Attack (Defender)
  • A load of unreleased things... (shader tilemaps, a load of Raspberry Pi stuff, Lighting engine, loads of "games in a day" source etc)
I'm really was only person in the office who did all these little tests/demos/blogs with GameMaker. This isn't to say no one else uses it, loads of them do, but no one really churns things out, or pushes the edges and tries as many different things as I did. I hope one of them starts doing this kind of thing, because I think it really does help push the product on.

Some things I've regretted....

Not getting a Raspberry Pi version out in some shape or form. I tried for about 5 years, almost manged twice. Just never happened, which is a real shame.

The HTML5 version needed more love, but I was never given the time to give it the attention it deserved until much later. Only doing bits at home was I able to try and bring it up to scratch. I'm pleased that in my final few months, I was able to spend time on it, and make it a lot more robust and usable. It's just a shame it took so long.

I'd have loved to get GameMaker more widely used more internally in Playtech.

Not being able to do more games. It was great doing games, not just because we love doing games, but to test the engine with, and I think we lost a lot by not doing this....

All good things...

I've loved my time at YoYo Games, the people I've worked with have been brilliant, funny and made the time go that much faster. I've also done a massive amount of stuff while there, and I'm particularly proud of bringing such a wonderful education tool into mainstream development, and helping many developers make their dreams come true....

okay.... the cake was a lie.


iainbruce said...

Thanks for the insight into your time at YoYo, it's a fascinating read! Thanks for being a big part of GameMaker, i absolutely love it and (until this year) have been teaching it to game design students at college; it's a wonderful tool. Best of luck with the freelance work!

Paul Robson said...

That's a really good read. It's amazing how fast you can produce games with these things. I went through a phase learning Construct 2 (one of GMS's competititors) and wrote a stack of games in a short period I still play Robotron occasionally :)

TheMagician said...

This explains a lot.

I had just opened a thread on Reddit about my strange feeling concerning the current state of GameMaker when I was pointed to your departure from the company and this blog post.

The list of features you've brought to GameMaker cannot be praised enough. Your tech blogs always advanced my undestanding not only of GameMaker but also of programming in general.
And it was always great to have one of my questions answered by you in the tech forums.

I always had the feeling that you put some "old-school" thinking into the implementation of new features, meaning that they were streamlined and efficient.

For me your name was synonymous with the big progress and success that GameMaker had made from GM8 all the way up to GMS 1.4.9999 and then GMS 2.

Thank you very much for your work on the engine and I wish you the best of luck in your future endeavours!

Cristobal said...

I've also been following your steps for a while. It all started with your blog posts about faster collision systems using tile arrays, all with bitwise operators to make things faster and not so readable for non oldscool programmers trained with high level engines, oh I love some much to have been trained with some of your skills. Seriouslly all your work on gamemaker has started (in my opinion) a game dev school that still has interest on the old and fast way for doing thing, creating programmers that have focus on optimization, giving a good perspective of what a great programmer does, even if we started with GameMaker. I will miss you in Gamemaker scene a lot, and I wonder what will happen to Yoyo after this, as this might make it loose its soul, I hope internals figure this out. I guess the good Russell is also out, I would have liked him to writte as much as you did, but he was so distracted trying to figure out where he left his milk shake xp. In any case I would like to point out how hugelly I admirate your persona and work.

@lordoftheyouo said...

What a ride. A brilliant summary. Thanks for everything and good luck for the future Mike.


lemonhead said...

Mike, just wanted to let you know how much I appreciate all of your hard work on GMS and GMS2. As an old guy from the days of the Vic 20, C64, Amiga, and Atari 8 bit and ST computers, I have always enjoyed coding but am happy not to have to deal with ASM and to have a tool as versatile as GMS with all of the available exports, I am in heaven once again. GMS is what it is today because of the love that you and others have put into it and it does sadden me that you had to leave but totally understand your position. My employer has also recently been through the big buyout scenario, so I do get it. You did what you had to do. But please know that I am confident that thousands of others feel as I do, and totally appreciate your blood sweat and tears you have poored into GMS. You have literally enabled the dreams of folks like me to come true. Not to mention that you and Russell Kay have been kind of a hero of mine since the days of DMA, so it's very damn cool to see that you had a huge hand in where GMS is today!!!!

Anonymous said...

Thank you so much for the insight! It really helps to remind me to appreciate the humans behind the software.