It’s always great to be able to study the source code for successful, released, real games.<p>I will note that this is actually the source code of the C++ rewrite! The original game was written in Flash, and this version was apparently written by Simon Roth.<p>My impressions: The source code is a bit of a tangle here. There are magic numbers (<a href="https://wiki.c2.com/?MagicNumber" rel="nofollow">https://wiki.c2.com/?MagicNumber</a>) all over the place, plenty of god classes (<a href="https://wiki.c2.com/?GodClass" rel="nofollow">https://wiki.c2.com/?GodClass</a>), and in general you will have to do a bit too much archaeology to figure out what a particular class or member function is supposed to do (the function and class names don’t give you enough, and there are no comments to help out). There are a few WTFs in here, like the "int i, j, j;" in Script.h.<p>THAT SAID, This is not really out of the ordinary for successful, released, real games. It’s not really different in style from the Celeste Player code.<p><a href="https://github.com/NoelFB/Celeste/blob/master/Source/Player/Player.cs" rel="nofollow">https://github.com/NoelFB/Celeste/blob/master/Source/Player/...</a><p>But if you’re writing a game of this size or complexity, I recommend doing some refactoring work along the way. In my experience, this will reduce the amount of insanity in the project towards the second half of the development cycle.<p>But I am always more impressed by ugly code behind a good game than I am by clean code behind an unreleased, unfinished, or unfun game.
Oh gods.<p>VVVVVV's core mechanic is that you don't so much "jump" as you just flip gravity, and you only get to do so when your feet are firmly on the floor. This leads to some very interesting designs.<p>The stage "Veni Vidi Vici (Doing Things The Hard Way)" is possibly the evilest level I've ever completed in a video game. Just a tiny little block, trivial to jump over, but the lack of a jump button means you have to... do things the hard way.<p><a href="https://www.youtube.com/watch?v=4CtiY5D6HCs" rel="nofollow">https://www.youtube.com/watch?v=4CtiY5D6HCs</a>
Terry Cavanagh is one of the greatest game designers of our time. His simple mechanics and designs often remind me of something like Chess or Go, where a simple ruleset covers a massively deep game, or is used to communicate a story in a very minimalist fashion. Don't Look Back is one of my favorites: <a href="https://terrycavanaghgames.com/dontlookback/" rel="nofollow">https://terrycavanaghgames.com/dontlookback/</a><p>A few years back, he did a beta of a game called Four Letter Word... Though that's not the real title: <a href="http://distractionware.com/blog/2011/11/the-four-letter-word-thing/" rel="nofollow">http://distractionware.com/blog/2011/11/the-four-letter-word...</a> The real title is a set of cryptic non-alphabet characters.<p>It was like an Atari 2600 cartridge from a space alien. It featured 2600-style graphics, a hidden hard-as-nails FPS game, and a buncha hidden 2d content that seems simple at first, but was super intriguing. So crazy non-traditional, and with some obscure mechanics, it was one of my favorite things I've ever played, and he never finished it, sadly. I love cryptic games, and I love simple mechanics taken to extreme conclusions. That's why I adore Terry.
An interesting quote from the build instructions: " In particular, the Windows version absolutely positively must be compiled in Debug mode, with /RTC enabled. If you build in Release mode, or have /RTC disabled, the game behaves dramatically different in ways that were never fully documented (bizarre softlocks, out-of-bounds issues that don't show up in tools like Valgrind, stuff like that)."<p>I wonder if people will spend the time to actually debug this properly now that the source is available.
I appreciate big successes revealing the jank-ness going on behind the scenes. It helps me fight imposter syndrome knowing that everyone is always learning.
Ethan Lee worked on this! Ethan Lee is an awesome person. Ethan is probably the single biggest contributor to gaming on Linux, and he's always worked in the background. Thanks Ethan, you rock, and deserve more credit.
If anyone is looking for a really great game, you should check out Terry's latest, Dicey Dungeons. Incredible variation. Each episode and character has you discovering new strategies and play styles.<p>30% off on Steam right now: <a href="https://store.steampowered.com/app/861540/Dicey_Dungeons/" rel="nofollow">https://store.steampowered.com/app/861540/Dicey_Dungeons/</a>
Quite cool, although the license is quite strict:<p><a href="https://github.com/TerryCavanagh/VVVVVV/blob/master/LICENSE.md" rel="nofollow">https://github.com/TerryCavanagh/VVVVVV/blob/master/LICENSE....</a>
You know, people like to crap on Flash (and there are valid reasons to do so), but I really miss how <i>quick</i> you could get a game built with it, while it still felt like "real" programming.<p>With Flash, I felt like a nice "one-stop-shop" in a lot of ways; you could draw your graphics, animate them, and code them, and you could get a simple game made in an hour or two.<p>I haven't tried Unity or really any other dedicated game engine, so maybe you get that feeling with those, but I will always be nostalgic for Flash; it really helped make programming "fun" for me.
Did they use a transpiler or something for the mobile version? Lot of magic numbers and odd code like this<p><pre><code> if (t == 0) t = 0;
if (t == 1) t = 20;
if (t == 2) t = 14;
if (t == 3) t = 15;
if (t == 4) t = 13;
if (t == 5) t = 16;
</code></pre>
or<p><pre><code> case 17:
blocks[k].prompt = "Press ENTER to activate terminal";
if(mobilemenus) blocks[k].prompt = "Activate terminal";
blocks[k].script = "terminal_warp_1";
setblockcolour(k, "orange");
trig=0;
break;
case 18:
blocks[k].prompt = "Press ENTER to activate terminal";
if(mobilemenus) blocks[k].prompt = "Activate terminal";
blocks[k].script = "terminal_warp_2";
setblockcolour(k, "orange");
trig=0;
break;
case 19:
blocks[k].prompt = "Press ENTER to activate terminal";
if(mobilemenus) blocks[k].prompt = "Activate terminal";
blocks[k].script = "terminal_lab_1";
setblockcolour(k, "orange");
trig=0;
break;
</code></pre>
from <a href="https://github.com/TerryCavanagh/VVVVVV/blob/master/mobile_version/src/entityclass.as" rel="nofollow">https://github.com/TerryCavanagh/VVVVVV/blob/master/mobile_v...</a>
The Awesome Games Done Quick speedrunning marathon [0] ran this game this morning. I didn't get a chance to see it, but I wonder if they mentioned anything about its tenth anniversary? Watch for the video here [1] after today's stream is archived.<p>[0] gamesdonequick.com
[1] <a href="https://www.reddit.com/r/speedrun/comments/ek9zmz/agdq_vod_thread_2020/" rel="nofollow">https://www.reddit.com/r/speedrun/comments/ek9zmz/agdq_vod_t...</a>
I remember getting this game from the first humble bundle and enjoying it, it had very simple gameplay, little to no time to get into and very enjoyable. Going to play it again!
I always love when something closed source goes open.<p>While I never played this game in particular (looks like I've missed something!), I love to study code. It's always interesting to see how other devs tackled a problem or just structured their code.<p>Thanks a lot!
It's helpful/inspiring to see you don't have to be the greatest programmer to create successful video games.<p>Just skimming the code a bit reminded me I probably spend way too much time on elegant interfaces, clean implementations, and good naming, in my own games.
Oh this is really cool! I've been thinking how interesting this could be to backport to NES or C64. I'm guessing there isn't too much in the game happening that couldn't probably happen on those systems with minor modifications.
I've spent days speedrunning this game. Highly recommend it!<p>I also suggest "Don't Look Back" from the same developer. It is a short but touching platformer that fills more like a book than a game without even telling a single word.
The PVS-Studio Team couldn't get past the source code of this game: <a href="https://www.viva64.com/en/b/0707/" rel="nofollow">https://www.viva64.com/en/b/0707/</a>
VVVVVV is probably my favorite game of all time. I've gotten so many great hours out of it, it's very relaxing. Thanks Terry for everything and now for releasing the code as well!
Gosh, this brings back sooo many good memories. If you haven't played it yet, you must! It is an excellent game, with superbly simple gameplay and excellent music!
This is really great! I wish they wouldn't call it "open source", though. It looks like a source-available license:<p><a href="https://github.com/TerryCavanagh/VVVVVV/blob/master/LICENSE.md" rel="nofollow">https://github.com/TerryCavanagh/VVVVVV/blob/master/LICENSE....</a><p>If Terry is reading this, please correct your article. The correct terminology is important! Open source is defined by the OSD, which this license doesn't qualify for:<p><a href="https://opensource.org/osd" rel="nofollow">https://opensource.org/osd</a><p>Kudos for releasing your game's source, though!<p>Edit: I sent Terry an email and he agreed to change it <3 Thank you!<p>Edit 2: Ethan Lee worked on this! Ethan Lee is an awesome person. Ethan is probably the single biggest contributor to gaming on Linux, and he's always worked in the background. Thanks Ethan, you rock, and deserve more credit.
I bought this game for 1 dollar (in the first Humble bundle) and I still consider it as of the most fun games ever. Simple controls, catchy music, interesting mechanics (for its time), nice difficulty, without being "unfair". It has everything. If you like platformers and simple games you should check it out.
It's easier to distract people than to give them traction. I think budgeting software would be the best way for a developer to write software which gives traction.