Archive for the 'VVVVVV' Category

VVVVVV’s source code is now public, 10 year anniversary jam happening now!


Today is the 10th anniversary of VVVVVV’s release!

Or possibly tomorrow is, depending on who you ask – technically, the game first went live at 3am GMT on the 11th January 2010, after a very, very long day of fixing every last bug I could, making last minute builds, and trying to slowly upload everything on an extremely unreliable internet connection that kept cutting out. But I’ve always gone by “it’s not tomorrow until you wake up” rules, so I still think of January the 10th as the real launch day <3

Gosh, ten years.

VVVVVV is such an important game to me, I barely even know where to start. I wanted to do something special to mark the occasion: so, as of today, I’m releasing the game’s source code!

[VVVVVV Source Code on github]

The repo contains two versions – the desktop version, ported to C++ by Simon Roth in 2011, and later updated and maintained by Ethan Lee – and the mobile version, written in Actionscript for Adobe AIR, based on the original v1.0 flash version of the game.

I wanna give a big big thank you to Ethan Lee, who helped a lot to prepare for this, including getting the repo ready for the public, and organising the reveal on AGDQ (hi speedrunners!)! Thanks Ethan!


A quick overview of the source code

So, I think a fair question to ask here is: “What’s interesting about the VVVVVV source code?”.

I think even a peek of the source code will quickly reveal that VVVVVV is not a technically sophisticated game! Even by the standards of self taught indie devs, it’s kind of a mess.

Some possibly interesting notes/explanations of why things are they way they are:

  • There’s a lot of weird stuff in the C++ version that only really makes sense when you remember that this was made in flash first, and directly ported, warts and all. For example, maybe my worst programming habit is declaring temporary variables like i, j and k as members of each class, so that I didn’t have to declare them inside functions (which is annoying to do in flash for boring reasons). This led to some nasty and difficult to track down bugs, to say the least. In entity collision in particular, several functions will share the same i variable. Infinite loops are possible.
  • If you’re looking for the game’s text, that’s mainly (but not entirely) in the Scripts.cpp and TerminalScripts.cpp classes. These functions basically load data into a very simple script parser that controls cutscene logic. Fun fact: modders reverse engineered this “internal scripting” years later to do amazing things with custom levels that I didn’t even know were possible.
  • Somewhere along the road, I picked up that it was a good habit to separate your code into input, logic and render, and boy did I take that to heart. Most of the critical game code is in three files – input.ccp, logic.cpp, and the incorrectly named titlerender.cpp. Every state in the game is packed into these three files, under functions called things like “teleporterrender” and “towerlogic“. There’s a lot of copy and pasting going on here.
  • All the actual levels in the game are hardcoded in huge arrays that I generated with my own map editor, which exports the levels in source code that I could read in. This is just kind of how it worked when making a flash game in 2009 – accessing external data assets is hard to do, so it just made sense at the time to compile that into the game instead. All the really big files (like Spacestation2.cpp, Finalclass.cpp and so on) were made this way. I’ve uploaded the code for the editor here for completeness, but it’s not really useable anymore to be honest (it requires Allegro and Mingw to compile). I made a similar tool for rearranging the final level layouts!
  • When I was making this, I didn’t really understand how static classes worked, or why they were a good idea. I think I read somewhere that static classes and global variables were BAD in flash, so I tried to avoid using them at all ever. The result? Virtually every function in the game is passing around the following arguments: “Graphics& dwgfx, Game& game, mapclass& map, entityclass& obj, UtilityClass& help”.
  • VVVVVV basically has no temporary objects, and it fills all of its entity arrays (and most of its other data arrays) with hundreds of blank entries when the game is first initialised. It does this because I read somewhere that deleting objects in flash causes weird hiccups as the garbage collector takes over and slows things down, which is actually sort of true. I was still doing this weird thing in new projects until very recently – I finally broke the habit in Dicey Dungeons.
  • One more: as well as the cutscene parser, I had another way to control game logic as you were playing – a monolithic state machine, which had gotten completely out of control by the end of the project! You can find it in Game::updatestate, and I kinda recommend checking this out even if you don’t read anything else! This controls things like triggering the start of more complicated cutscenes, where teleporters send you, the timing of the level completion animation, and other miscellaneous things that I just wanted to kludge in quickly. The states are numbered, and it counts all the way up to 4099, with gaps. When I was developing the game, I kept a notepad nearby with the important numbers written down – 1,000 triggers the collection of a shiny trinket, 3,040 triggers one particular level completion, 3,500 triggers the ending. This dumb system is the underlying cause of this amazing 50.2 second any% speedrun of the game.

I dunno, what can I say? I was young and more interested in getting something on the screen than implementing it properly. Maybe the best thing about VVVVVV’s source code is that is stands as proof of what you can hack together even if you’re not much of a programmer.

Looking back through it myself all these years later, I find it really funny how much of it is basically just the same parts copy and pasted over and over, with the values changed. This basically makes it impossible to read and maintain ten years later, but back when I was in the thick of it, it made it really fast to iterate and add new things. I’ve gained better habits over the past decade, and I’m definitely a better programmer now – but it does seem to take me longer to do things.


Surprise Birthday Party!

Just as I was getting ready to post all this, Sergio Cornaga announced a 10th anniversary game jam for VVVVVV over on glorious trainwrecks!

VVVVVV’s 10th birthday eVVVVVVent!

I am so excited about this, haha – and I love glorious trainwrecks, which hosted the regular Klik of the Month jams that I did regularly around the time I was making VVVVVV. This feels like a perfect home for it!

I’m really, really excited to see what people come up with – once the jam ends, I’ll do a big round up post here on this blog, in the style of the old VVVVVV player level posts I used to write <3

Even before I released the game’s source code, I made the tools to make and play VVVVVV levels available for free in the “Make and Play” edition back in 2014! You can download that from here! If you’re interested in making levels in the VVVVVV editor, this thread is a good place to start! Good luck!


Mushy stuff

Ahhhhh so I’ve talked about how I feel about VVVVVV a little before – just before the first anniversary, I posted about how things were going for me when the game first came out, and how its success changed my life. Then on its firth anniversary, I posted about how VVVVVV felt like a once in a lifetime project – that nothing before or after could come close to.

A decade on, I still feel the same way. I’m incredibly proud of VVVVVV, and grateful for everything. I want to thank everyone who helped me along the way – Magnus for his incredible soundtrack, Ethan and Simon for all their work to bring the game to more people, Bennett for naming the rooms, Stephen for helping me get that mac build out late in launch day. This game is special to me – thank you to everyone who played it and supported me over the past ten years. It’s meant so much. <3

* 36 Comments

Forgot, and never brought to mind

(thanks, HotAndColdAF!)

Sorry I haven’t posted in a while.

Ok, I know that’s a terrible cliché, but I mean it very earnestly! I used to post something about what I was up to as often as once a week. I’m going to try very hard to start doing that again from now on.

I like new year’s resolutions a lot – this time of year has always been important for me to think back on what I’ve made, and to think about what I want to make. This is when I make plans. I rarely stick to them, though – like, in 2012, I was so sure that I wasn’t going to start any new projects – instead, I was going to really focus on finishing one of the half dozen big prototypes I had lying around. That plan didn’t last very long, but, eh, it’s probably for the best.

Reflection of years of new year’s resolutions past reveal that I kinda keep falling into the same traps, and I’m feeling all the same things again this year: I wanna sink my teeth into a big project, but I don’t know which one to pick! I’m sick of making small things, but I have all these small things I wanna finish first! And I rarely finish any of the games I talk about wanting to finish in my new year’s posts – sometimes I don’t even work on them that year.

It really doesn’t feel like a process I understand very well or have much control over. Which is frustrating. I mean, I’ve been indie for over seven years now! Seven! I should be better at this by now!

Today’s an anniversary of a very important project for me – five years ago today, I released VVVVVV. Five years later, VVVVVV remains the game I’m most proud of. I feel incredibly blessed that it’s found the audience it has. Gosh, I don’t even know where to begin talking about how lucky I feel. And its success isn’t the only thing I feel lucky about: VVVVVV was a joy to work on.

Working on VVVVVV was not like working on any other big project that has come along before or since. VVVVVV never felt like hard work – even in the final weeks when I barely slept. It took a little over six months, and I spent most of that time just playing with level ideas and getting little details to feel right. I woke up every day excited to add the next thing, to try out some stupid thing I’d thought up the night before. I loved working on it. I’ve loved working on other games too, but VVVVVV was special for me, and I think it shows in the game.

I think I’ve been looking for another project like that ever since. I’ve gotten close, but nothing has been quite the same.

This year, I think any plan I make about what I want to work on has to be a better acknowledgement of the way I work best. So here it is: I’m not making a plan. I’m just going to work on what I feel like, when I feel like it, and see where that gets me.

Happy new year, everyone.

* 18 Comments

Outer Space

Hey everyone! I have lots of big annoucements about VVVVVV today, so let’s get to it!

map
VVVVVV: Make and Play Edition

Let’s start with what I consider the really important thing – inspired by things like Knytt Stories and DROD: Architect’s Edition, I’m releasing a special build of VVVVVV on Windows, Mac and Linux today. It’s called VVVVVV: Make and Play Edition, and it’s completely free. This version of the game only includes the player levels and the level editor – which means that, from now on, the tools to make and play VVVVVV player levels are completely free.

[VVVVVV: Make and Play Edition]

People have done some really incredible things with the VVVVVV editor. I want to share that work as far and wide as I can!

vios
Lots of new VVVVVV ports

VVVVVV is now available on iPhone, iPad, Android, and OUYA!

These ports have been quite a long time coming! Actually, I originally started the iPhone port before I started Super Hexagon, way back in 2012. So it feels very, very good to finally have it finished, and released. This is something I felt I really had to take on myself – VVVVVV’s important to me, and it was really important to me that this be done right. I wanted the game to be as good as it could be on mobile. I feel very good about how it’s turned out!

You can get it from here:

[VVVVVV for iOS]

[VVVVVV for Android]

[VVVVVV for OUYA]

Nicalis have been working on a Vita port as well – this should be coming out sometime this summmer!

supgrav
Super Gravitron

Surprise! Today I’m also releasing another game on iOS and Android: Super Gravitron. It’s a little minigame that you might remember from the end of VVVVVV!

It’s acting as sort of a demo, but mostly I just think it happens to work really well as it’s own thing on mobile. And it’s completely free! Get it here:

[Super Gravitron for iOS]

[Super Gravitron for Android]

ach
Version 2.2

Thanks to Ethan Lee, VVVVVV on desktop has finally gotten an update! Version 2.2 fixes a bunch of long standing bugs (for example, player level warp lines) and makes the 2.1 changes official (like player maps, coloured text in player levels, editor direct mode, etc).

If you’re on steam, this update also adds achievements! They’re the same ones that VVVVVV always had, except now they’re recognised by steam. If you’ve already got them, log into today and you should get awarded a bunch of them at once, which is extremely satisfying!

mmmmmm
MMMMMM

Finally – remember that amazing Metal Medley of VVVVVV music by @FamilyJules7x? Yeah, both Souleye and I were seriously impressed!

Introducing: MMMMMM! A complete Metal cover of the VVVVVV soundtrack! You can pick it up today directly from Souleye!

The soundtrack comes with a mod, which you can install in your player level directory to play the game with the metal soundtrack instead of the original one!

That’s all, everyone! Thanks for playing!

* 92 Comments

Terry Versus E3

ipad1024x768_2

Announcement time!

Finally! VVVVVV is coming to iOS, Android and OUYA this Thursday, the 12th of June! A Vita version will follow later, at some point in the future!

I’ve also been working on something secret that I’m very excited about, which will also be coming out this Thursday. Ahhh! Ahhhhhhhhhhh!

* 12 Comments

Ports ports ports

Time for a very imPORTant update! Ho ho ho

VVVVVV’s mobile ports are definitely taking a lot longer than anticipated, but things are finally coming to an end. A few days ago, after weeks of testing and fixing bugs and optimising, I finally submitted VVVVVV to the app store! It’ll be in a review for a while, and going live hopefully not too long after that…

So what’s the next step? Well, there’s also the android version (that’s going pretty well too), and the steam update. And one more thing…

vvine

The OUYA version!

I like the OUYA as a thing quite a lot – last year I even ported 10 of my freeware games to it for fun! And it’s really cool to be able to play VVVVVV on it too – this’ll be the first time you can actually sit down with a controller and play VVVVVV on a telly, which is kind of a big deal. It should be out at the same time as the other ports – not quite sure when that is yet, but I’ll announce it as soon as I know 🙂

That’s not all, though.

suphexvine

Surprise! I’m also bringing Super Hexagon to OUYA! And real soon, too. Like, next Tuesday. Ahhhhhhh

* 9 Comments

In a Single Bound

mainmenu

playerlevels

menuscreen

So, update time! I’ve spent the last couple of weeks working on android and iOS ports of VVVVVV. This is a super overdue thing – it’s been like 90% finished for over a year – but I never seemed to be able to find the time to finish it off properly and release it. After GDC, with Nicalis’ PSVita port imminent, it seemed like it was now or never.

And it’s almost done! The last big thing I had to do was update the menus to be more touchscreen friendly, which is now done and works really well. Should be ready to submit any day now.

The big concern that comes up when I talk about this project is controls – is VVVVVV even a game that works well on a touchscreen? And the answer is yes, it does! Mostly, anyway – using a touchpad for this sort of game is just never going to be as good as using a joypad, but the touch controls I’ve got are feeling really nice.

I tried out a bunch of different control ideas – d-pads, virtual analogue sticks, super hexagon style controls where you press both sides of the screen to flip, and these all basically work with varying levels of success.

The one that definitely works the best, though, is swipe and hold to move, which is what I’m using as the defaults. Basically, you put your thumb down on the screen – move it left and you move left, move it right and you move right, let go to stop. It feels super responsive and nice!

Anyhow, time to put up or shut up. Here’s a video of me doing Veni, Vidi, Vici on touch controls:

* 20 Comments

Wanted: Coder for VVVVVV maintenance

Edit 26th March 2014: I’ve now found somebody for this job. Thank you!

Embedded that video mostly because I just wanted another reason to tell people about that medley. OMG, have you seen it? I know, right?

Heads up, this is a job offer post. If you’re not a coder looking for work, it’s probably going to be very boring oh no

I’m just back from GDC, and made a decision to take some time out of my projects to finish up a couple of small jobs that have been hanging around for way too long. One of those jobs is to finally update VVVVVV, which is currently in need of a patch.

The current steam and humble store version of the game is 2.0, which is the first version of Simon Roth’s C++ port. It’s mostly pretty stable, but it does have some issues – time trial scores aren’t saved, for example, a bunch of other small things like that.

There is a version 2.1, but it’s not live on steam – Simon did some work on the rendering code to make it hardware accelerated, which improves the games performance, but caused it to break for other people. I decided that it wasn’t worth the risk to make that version live and potentially break the game for people who’d not have problems with it before. 2.1 fixes most of the 2.0 bugs, and adds some nice new features (like maps in player levels, coloured text in player levels, and some cool new player levels included by default like Dimension 333333). The 3DS version is essentially 2.1.

There’s also an unreleased version 2.2, which adds joypad support and a few other small things.

I’d like to hire someone for a week or two to finish version 2.2 of the game. If you’re an experienced C++ coder familar with Windows, Mac and Linux, available to start now and interested in working on this, I’d like to hear from you!

A broad overview of what’s involved:
– Get familiar with VVVVVV’s terribly messy code, and clean it up where possible.
– Update the rendering code to make it safe and stable on all platforms.
– Finish implementing the 2.2 patch, which includes a couple of half implemented features and a couple of features still to be implemented that we can talk more about.
Mac Specific: Ensure that the game works correctly on the latest versions of OSX, and get the game ready to re-submit to the Mac App Store.
Linux Specific: Ensure that the game runs nicely on the latest multitude of confusing linux systems.
Steam Specific: Implement steamworks support in the game.
– A few other secret things I don’t want to list here.

An ideal candidate for the job is someone who can be on call from here on out to fix issues that crop up. For example, should a mac update cause the game to suddenly stop working (these things happen, especially on mac), then you should be available to sort it out at your usual hourly rate without too much of a delay.

If this sounds like something you’re interested in, get in touch, and we can discuss rates, deadlines, and more about what’s involved. Thanks!

* 13 Comments

Busy making other plans

Hello 2014! Don’t worry, I’m not making any public new year’s resolutions – I never keep em anyway.

I was just thinking that I haven’t been posting much here recently, you know? Actually, it’s been a while since I’ve said much at all about what I’ve been working on. So, here we go: a snapshot of projects I’ve been working on recently, projects I’ve been thinking about working on, and projects I’m planning to come back to:

vandajan
Untitled DarkSoulslike

Last time I mentioned this, I was looking for an artist. Well, I found one! A very talented London based comic artist called Cristian Ortiz, aka CROM, creator of Golden Campaign.

Collaborations have a way of getting a little out of hand, but I’m still hoping that this one will come together as a small, contained world to experience. Realistically, I think it’ll take another month or so.

roundabout
Halting Problem

I took a complete break from this game just before the IGF submission deadline last year. I haven’t worked on it since. I needed some time away from it. Still do. I wanna finish a few small things before I take this on again.

Halting Problem is a big, scary game. There are a few ideas at its heart that I think have potential to be very, very special, if I’m good enough to bring them to life. I haven’t forgotten about this game. It feels the way Super Hexagon did, the way VVVVVV did, and the way At a Distance and Nexus City did – that idea that won’t go away.

When I come back to this game, I don’t want there to be any distractions – I can feel that working on this one is going to be all consuming, that’s it’s going to take everything I have.

7drl5
Untitled Roguelike

I worked on a game for last year’s 7DRL that I still think about a lot. I dunno when I’m going to find time for it. Maybe it’ll resurface at some point, as something else.

isling
NewCity RPG

I moved to London at the end of last year, and spent my first month here making an RPG about it. It’s a game about a place, and mostly about getting across what that place is like – lots of distinct areas with their own personality, based on whatever alien impression a brief visit with them left me with. There’s a shoreditch level, an islington level, a few other places – and an underground system that links it all together.

I’m long enough here now that it doesn’t feel alien to me anymore, so I’m not sure where to take it. Maybe that’ll come to me, as I get to know the city a bit better.

vect
Vector thing

Really, it’s just tech at this point, and an idea. I owe Stephen a fan game…


VVVVVV’s last hurrah

VVVVVV is always going to be really damn important to me. It’s my final fantasy, the game that changed everything for me.

I’ve had an incomplete iOS version of the game working for over a year now, but other projects have kept me from finishing it up. I’d really like to get that out soon, though. Over Christmas I spent a little time finishing up the port, and I’m happy to say that the really hard stuff is done, now. I just need a week or two to sort out the details.

In addition, Nicalis have been porting the 3DS version of the game to PS Vita, and it feels wonderful on it.

So here’s an announcement of sorts, then.

This year, I’m going to release VVVVVV on PS Vita, on iPad, on iPhone, on Android, on Ouya. And, if I can manage it, all at the same time. This will very likely be the last thing I ever do with VVVVVV, and I wanna go out with a bang!

<3

* 27 Comments

Don’t Look Back now available for iOS and Android

About a week ago, I took a day out from working on Super Hexagon stuff to do a fun side thing – I ported one of my old games, Don’t Look Back, to mobile. It’s available now on both iOS and Android. (It was a pretty simple port, thanks to Adobe AIR’s mobile exporter.)

The game initially failed review on the apple app store, for a somewhat bizarre reason (some people are taking this weirdly seriously; I’m not, I think it’s hilarious). Thankfully, it got sorted out pretty quickly.( But yeah, it’s probably worth pointing out that the game is totally free, which is all I was really trying to express with that description.)

Revisiting Don’t Look Back was a pretty strange experience. It’s quite old now – I made it in January 2009 – and I hadn’t actually played it in some time. Despite numerous flaws which are glaringly apparent to me now, it remains a game I’m extremely proud of making.

2009, incidentally, is also the year that I made almost all of VVVVVV. One of the reasons I thought this port might be fun to do is that I’m considering an iOS and Android port for VVVVVV, so I’m seeing it as kind of a “trial run”. I don’t know if it’ll ever happen, and I’m not promising anything – but I’m definitely thinking about it.

* 25 Comments

Please enjoy these repeats

Big news! VVVVVV is now available in the European 3DS eShop!

This morning, I was finally able to open my 3DS and download the game – for me, it’s hard not to think of today as the game’s real 3DS launch. I know, of course, that the game has been available since last Christmas in the USA – but until now, it hasn’t been available for my 3DS.

I’m really happy with this version of the game too – I think Nicalis did an absolutely smashing job with the port. This would never have happened without them – I can’t thank them enough.

Anyway, to everyone out there who buys the game today, thank you! I’m very proud of VVVVVV, and I hope you enjoy playing it. 🙂

* 10 Comments

Next Page »