Wednesday, December 25, 2019

#CSpect V2.12.3

This is a minor update to fix Lowres and ULA scrolling. ULA X scrolling now uses the 2 new NextRegs - $26+$27.
It also fixes an annoying startup issue where if you didn't start in the EXE path, it just wouldn't start properly. This was due to the new plugin system, but should now be fixed. (fingers crossed). I've also added the missing LDWS instruction to SNASM

SNasm 2.0.20
  • Added “LDWS” instruction

#CSpect V2.12.3 changes
  • Lowres scrolling fixed.
  • Added ULA Scrolling registers $26 and $27.
  • Fixed HL being set to $10000 after reading a file at the end of memory...
  • Fixed a command line startup issue when not started in the EXE path

Sunday, December 22, 2019

#CSpect V2.12.2

This update is a little different, as it add's the ability for users to write their own "plugins". These plugins can take over memory read/write actions, port in/out's and Next Register access - or all of the above!
They can also query the Next's memory, ports, Next registers and Z80 registers, making it pretty useful for folk to add new toys, or add things like logging or profiling etc.

#CSpect V2.12.2 changes
  • Changed 320x256 mode to use Y/X orientation (0,0)=$0000, (1,0)=$0100, (2,0)=$0200. (0,1)=$0001,(0,2)=$0002 etc...
  • Plugin system can now get/set Z80 registers
  • A better reset on load of an SNA/Nex file. Should be a complete system reset now...
  • 320x256 Layer 2 screen mode added
  • NextReg $70 added ($10=320x256 mode)
  • NextReg $71 added. MSB of Layer 2 XScroll added
  • Added Port 0x123B extended memory mapping mode added - using bit 4 to select (untested)
  • A new plugin system added, so that folk can add their own toys or support custom hardware. See CSpectReadme.txt

Friday, December 06, 2019

#CSpect V2.11.9

EDIT: Updated to V2.11.10 - Couple of new command line options for the next dev team

This update is really just to release fixes the Next team have had for a while. With all the changes to NextOS, and the hardware changes, I figured I should release this even though 60Hz mode isn't working right. So most things should work fine, but 60hz mode certainly has issues....

SNasm V2.0.19 changes
  • You can now reference a local label. i.e. LD HL,LABEL@LOCAL

#CSpect V2.11.10 changes
  • added -major and -minor to let you set the CORE version number
  • added -emu to force the setting of the emulation bit in nextreg 0
  • added debugger command "nextreg ," so you can set a next register from the debugger

#CSpect V2.11.9 changes
  • Updated audio to be 16bit so DAC isn't squished to oblivion. (should just sound better in general)

#CSpect V2.11.8 changes
  • Fixed "all RAM mode". 2 configurations weren't working right.
  • Core version number updated to 3.0
  • -60 now does proper 60hz, including reduced lines and proper 60hz audio *not working fully yet*
  • -com2=??? added. You can now have a second UART that can be used to send to a real Pi
  • port 0x153b (bit 6) added to switch UARTs from Wifi to Pi
  • Reg $7f now defaults to $FF on power up
  • When no UART2, now returns $FF
  • .ROM files (for OS loading) now come from the same path as the IMG file, rather than program folder
  • Mono "textmode" added
  • CP/M mode now works
  • Proper 60Hz Layer2 and Sprites now working
  • Coms with the Pi (and it not being there), no longer crashes CSpect.
  • null comport now returns 0, as per hardware.
  • Tilemap clip window right edge fix - I think.
  • 1 Bit Tilemaps should now work when tiles are pre-defined in bank 10/11

Saturday, September 14, 2019

#CSpect V2.11.1

This update is to add in (most) of the new hardware/registers that the latest Spectrum Next firmware has added - along with the new OS which uses some of it. There are some amazing advancements in this firmware. 14Mhz CPU speed all the time, 28Mhz copper and 14Mhz DMA, along with things like smooth scrolling the ULA screen. Brilliant update from the Next team.

#CSpect V2.11.1 changes
  • Fixed extra pixel in wrapping scroll of ULA
  • Fixed label on/off
  • Fixed lowres vertex clip "smear"

#CSpect V2.11.0 changes
  • Fixed -tv command line, and made it actually switch off all shader usage
  • if bit 6 in attrib 3 is not set, #CSpect now properly ignores attribute 4
  • Copper now runs at 28Mhz
  • The CPU no longers slows down over the screen
  • ULA can now scroll in 1/2 pixels
  • ULA Shadow screen now works with Layer 2
  • Reg 0x69 added (Layer 2 enable, ULA shadow mirror, and port bits 0-5 goto port 0xFF)
  • Copper Reg 0x63 added
  • DMA is now always 14Mhz...
  • 4 bit lowres mode added (reg 0x6A)
  • Added $123b Read mode
  • Added $123b 48K mapping mode
  • Reg 7 is now R/W, and bits 4/5 now set correctly
  • Window regsiters are now R/W

Friday, August 23, 2019

#CSpect V2.10.1

#CSpect now uses a shader to render, and I have added a TV shader which you can adjust using page up/down and home/end. This gives a nice retro look to games.

#CSpect V2.10.1 changes
  • Fixed a crash in relative sprites where the X coordinate could go negative
  • Added +3 "all ram" mode. (ZX81 games now work on the Next SD card)
  • ay8912.dll no longer obfuscated. Didn't realise this was still getting obfuscated. This means you can now compile the DLL yourself using the supplied source.
  • Fixed the fake UART and Wifi - was ignoring a basic AT command.
  • Added a couple of new AT commands to the UART. AT+CIPSTA? will now return your IP address.
  • AT+CIPDNS_CUR? will return googles DNS server - coz why not.
  • AT+GMR will return n00160901 - which is an older version of the wifi chip I believe - any other preference?
  • Fixed the default MMC path (when you don't specify one) on the Mac/Linux. Now uses .Net Path.PathSeparator...
  • Any unknown UART command is now sent to the LOG file
  • CTRL+F1 now enables/disables the TV shader (-tv on the command line to disable)
  • PageUp+PageDown now makes the TV lines less/more visible
  • Home+End now adjusts the TV shader "blur"
  • Fixed a shader crash on OSX (Probably Linux as well)

Monday, July 15, 2019

#CSpect V2.9.2

Minor update and fixes. I have also added the parallax scrolling demo I've written as a little demo...

#CSpect V2.9.2 changes
  • Added sprite clipping in over border mode (1 = enabled) (bit 5 of reg $15)
  • Composite/Unified mode visibility flag fixed
  • Parallax scrolling demo (and .BAT file to run it) added to CSpect distro.

Sunday, July 14, 2019

#CSpect V2.9.1

Improvements to the CPU timing, and finally added the sprite composite and Unified modes to let you attach sprites together. This is "largely" untested, so I expect fixes to this over time....

#CSpect V2.9.1 changes
  • Fixed a sprite window clipping bug
  • Fixed the esxDOS streaming API emulation

#CSpect V2.9.0 changes
  • Improved the timing of the CPU so it should be much closer to the NEXT
  • 48k timing - along with memory contention should also be much closer to the real thing
  • Fixed the sprite over border clip window - no longer resets the user clip window
  • Sprite "composite" mode added
  • Sprite "Unified" mode added
  • Fixed a screen render issue, where the screen was being stretched 1 pixel too much

Saturday, June 29, 2019

#CSpect V2.8.3

Minor update to fix some issues to 2.8.2

#CSpect V2.8.3 changes
  • Fixed Left control in BASIC key mode.
  • Fixed a bug where setting port $7ffd or port $1ffd would change the +3 ROM offset - even if next roms weren't enabled.
  • .NEX files are now started in 14Mhz mode - same as the real machine
  • Added IFF 1/2 to the debug display
  • Fixed -fullscreen, just wasn't doing anything....
  • Fixed -r when you exit in "fullscreen" mode (ALT+ENTER). Now exits fullscreen before quiting

Friday, June 14, 2019

#CSpect 2.8.2

Minor update to fix some issues to 2.8.1

#CSpect V2.8.1 changes
  • Right shift now works the same as left shift in BASIC key mode
  • Left ALT now releases the mouse, Left and Right Control are now both SymbShift
  • In BASIC key mode if you also disable escape (-esc), escape will bring up the menu allowing you to quit BASIC/re-number etc.
  • Fixed a SD card write, now flushes each sector as it writes so that card is always in a complete state

Reminder that you can now download pre-created SD cards, along with blank ones (which you can now attach to the second card port via

Thursday, June 13, 2019

#CSpect 2.8.1

This version has a special ZXBASIC keyboard mode, mapping your PC keyboard to the Next. This should make writing programs in BASIC much simpler - and more enjoyable. You can either enable this via the command line "-basickeys" or by pressing F10 to toggle that mode. This mode will press multiple keys so it's important to remember when playing a game that the control keys won't just map 5,6,7 and 8 but also SHIFT, so you may need to toggle back and forth.

#CSpect V2.8.1 changes
  • Fixed a crash in SD Card writing.
  • Added -sd2= for attaching a second SD card
  • Added a special ZXBASIC keyboard mode, meaning it'll auto map keys to the spectrum version. (" will map to SYM+P for example)
  • Added PageUp, PageDown, Home & End to ZXBASIC keyboard mode.
  • F10 will toggle between game and ZXBASIC keyboard mode
  • Fixed a bug when setting the sprite index via NextReg and top bit was set, the shap wasn't being offset by $80
  • Added OpenAL install check for windows, if not found sound is disabled. use -sound to bypass check/error dialog

Reminder that you can now download pre-created SD cards, along with blank ones (which you can now attach to the second card port via

Monday, May 27, 2019

#CSpect V2.8.0

EDIT: You can now download pre-created SD Card images

This version has the new ZX Spectrum ROM support, along with the SD Card image emulator. This allows you run the full ZX Spectrum Next ROM and all it's OS features. This allows you to write BASIC programs, DOT commands or just browse the SD card using the built in menus.
There are also a couple of bug fixes, and a couple of new SNasm commands added.

SNasm V2.0.17
  • Fixed “PUSH $1234” opcode (push order wrong)
  • Added “Bank” and “BankOffset” commands to get the physical address of a label.

#CSpect V2.8.0 changes
  • Fixed -esc command line, hadn't been ported from 1.x version
  • Swapped Right Shift for SYMSHIFT to Right Control. Both shifts map to CAPS SHIFT. "," still works as SYMSHIFT
  • Fixed PUSH XXXX opcode in debugger. Was displaying low/high. Now fixed to display high/low.
  • Added "-log_cpu" for tracing the CPU instruction stream
  • Added back in Label "switch" to debugger
  • Missing "LDWS" opcode added to disassembler
  • Fixed bug in ULA off mode where the border was still being drawn
  • Fixed bug in 512 tile mode, where it was always above the ULA screen
  • Added +3 ROM emulation (without RAM only mode)
  • Added divMMC ROM/RAM hardware support via port $E3
  • Added divMMC SD card support via ports $E7 and $EB
  • SD Card SPI commands supported:CMD0,CMD1,CMD8,CMD9,CMD12,CMD13,CMD16,CMD17,CMD24,CMD55,CMD58,ACMD41

SDCARD setup

  • Download the latest SD card from
  • Copy onto an SD card (preferably between 2GB and 16GB as it's your Next HD for all your work - I use a 16GB image)
  • Copy the files "enNextZX.rom" and "enNxtmmc.rom" from this SD Card into the root of the CSpect folder
  • Download Win32DiskImager ( )
  • make an image of the SD card
  • start CSpect with the command line...

    "CSpect.exe -w3 -zxnext -nextrom -mmc=[sd_card_path]\sdcard.img"

I'd also recommend downloading HDFMonkey, which lets you copy files to/from the SD image.
This tool can be used while CSpect is running, meaning you can just reset and remount the image
if you put new files on it - just like the real machine.
This tool also lets you rescue files saved onto the image by CSpect - like a BASIC program
you may have written, or a hiscore file from a game etc.
I found a copy of this tool here:

At some point, I'll allow mapping of the cursor keys to what BASIC would like to save using SHIFT all the time...

Sunday, April 28, 2019

#CSpect V2.7.0

This version has a fix to Timex High res colours - and border, and also has the first test of the built in UART/Wifi adaptor emulator. It's still missing lots of stuff, but for now WILL let you play with NXtel without any hardware for your next or pc. It has been included in the archive along with a batch file to get you going. Be warned, it's very much an initial test!
Hardware UART is still supported via the -com command-line (see readme)

#CSpect V2.7.0 changes

  • Fixed Timex Hires mode when using ULANext
  • Fixed Timex Hires border colour
  • Removed debug text output
  • Initial WiFi/UART support added.
  • NXtel.nex added to archive - see weblink above for the latest versions.

Saturday, April 27, 2019

#CSpect V2.6.3

This version has a rewrite of the rendering to finally fix the transparency issues and allow the 8bit compare with the GlobalTransparency value.

#CSpect V2.6.3 changes

  • Fixed sprite crash when using default sprite transparency value - my bad
  • Fixed fallback colour in screen area

Friday, April 26, 2019

#CSpect V2.6.2

This version has a rewrite of the rendering to finally fix the transparency issues and allow the 8bit compare with the GlobalTransparency value.

#CSpect V2.6.2 changes

  • Rendering rewrite to properly fix transparency.
  • Fixed new sprite rendering
  • Fixed Lighten and Darkening modes
  • Fixed darkening mode - removed debug code
  • Fixed sprites being offset by a 1/2 pixel to the left

Monday, April 15, 2019

#CSpect 2.5.0

Some more dev requested changes, and a fix to ULA transparency.

CSpect V2.5.0 changes

  • Fixed PUSH $1234 to have the right order.
  • Fixed LDWS so that flags are set based on the INC D
  • Fixed BSLA so that it takes bits 4..0 not just bits 3..0
  • Fixed a global colour transparancy issue

SNasm 2.0.16 uppdate
  • Fixed “PUSH $1234” opcode (push order wrong)

Sunday, April 14, 2019

#CSpect V2.4.6

Some dev requested changes, including UART support, and some colour 9-bit transparency fixes.

CSpect V2.4.6 changes

  • Copper will now trap uninitialised memory when trying to execute a program, and enter the debugger.
  • Gamepads will now only use the "first" mapped analogue controller. Sorry. Dpad should work fine.
  • Fixed a bug where creating a new file, then trying to open it would fail.
  • Inital UART spport added via standard windows serial COM ports. Must use "-com" to setup
  • Fixed the Real Time Clock (RTC) APi... was returing in the wrong order.
  • Added "fine" seconds control to RTC API. "H" now holds full seconds.
  • Fixed "HALT" instruction so that it waits for the next IRQ or Reset, and doesn't carry on at VBlank.
  • 9 bit colours (and so 3 bit blues), now use the same colour mapping as Red and Green. 8 Bit colour is as before.
  • HL now gets set properly after an F_READ (address of next byte)
  • 9 bit Layer 2 colour now compares to Global transparency 8 bits correctly.
  • Palette reading added - untested
  • Fixed a transparency issue with ULA colours

Sunday, March 31, 2019

#CSpect 2.3.3

Quick update to fix 512 tiles and ULA ordering. Hardware has changed from what I had, and some in the dev team wanted the update. While I was at it... I've added a couple of other dev requests.

CSpect V2.3.3 changes

  • Fixed 512 tile mode. ULA Disabled bit has moved to Reg 0x68, bit 7
  • Border can now be transparent and will use the fallback colour
  • NEX format file expanded. Default 16k RAM bank at $C000 now set
  • NEX format file can now set the file handle on request
  • Added more window scaling options (-w1 to -w10 now available)
  • Updated 512 tile mode to use NextReg $6B (bits 0 and 1) properly
  • core version now set to 28 (2.0.28)
  • Layer 2 demo code cleaned up a bit - old macros removed

Saturday, March 30, 2019

#CSpect 2.3.2

This version increases the window size to a full 256 high - as some games can now use full overscan, has some fixes to the tilemap engine, 2 player joysticks along with Megadrive buttons, and FSTAT file system additions

CSpect V2.3.2 changes

  • F_FSTAT($A1) and F_STAT($AC) now implemented again
  • -fullscreen added to start in fullscreen mode
  • Fixed loading of NEX files that have pre-set tiles
  • Sprite over border clipping fixed
  • Sprite over border *2 on coords fixed
  • Fixed a rasterline reading issue when read at the bottom of the screen.
  • Screen size changed to 320x256 to allow for full tilemap+sprites display (640x512 actual)
  • Fixed Tiles under ULA screen when in border area (now also under border). Same as H/W
  • Added 2 player Joysticks (first pass)
  • Added MegaDrive joysticks (first pass)

Thursday, February 07, 2019

#CSpect 2.2.4

In this version of CSpect, the number of Sprites has increased to 128, and we have the new tilemap engine to play with.

CSpect V2.2.4 changes:
  • Minor update for tilemap indexing when tile size is 16bit.

CSpect V2.2.3 changes

  • Added Tilemap screen mode
  • Upped sprites to 128 as per new hardware (yum!)
  • Added X and Y scrolling to tilemaps
  • Added ULA scrolling using LowRes scroll registers. Note: X currently byte scrolling only.
  • Fixed a couple of bugs in the streaming API.
  • Fixed USL rendering order - was just buggered. (Layer2 demo was broken)
  • Added a "vsync" mode when using "-60 -sound"
  • Bit 4 of nextreg $09 now locks next sprite regs, and port regs together
  • Fixed regs $75-$79 sprite auto inc

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.