When I was near the end of high school, my family visited London, and I was thinking about being a game dev. So I sent Terry Cavanagh an email, and to my surprise he completely agreed to get lunch.
He was extremely kind, gave me a lot of interesting life advice. I remember him saying that he got most of his ideas just from playing around with mechanics and experimenting a lot, he was never really one to get grand visions.
Anyways, great fellow, glad he opened source V (as he called it).
> I remember him saying that he got most of his ideas just from playing around with mechanics and experimenting a lot
This is important. Too many people assume that novel ideas come from abstract concepts. Yes they can, but they can equaly arise from playing with the medium.
Playing retro games seems like a good way to get ideas. The VVVVVV gravity mechanic is pretty much Gravity Man from Megaman 5 (I guess Megaman is not the first time it was used either).
Mining retro game mechanics was probably easier at the time VVVVVV was developed as the explosion of indy games has probably reused the best forgotten ones of the 80s/90s. It's getting close the time mechanics from 00s games can be reused though...
Kinda easy to imagine the opposite as well... having some idea and then implementing it and feeling unsatisfied. Especially a game. It may check all the boxes thematically and have the required features but just not feel fun.
Not to say starting with a firm idea is bad... more like it may be hard to avoid playing around and improvising with the medium in any case.
* You can't get a no if you don't ask
* "Never meet your heroes" is a sham and you need to meet a few shitbags before you can really appreciate the realest of people.
Wow, that is cool! Did it help/affect your later choices with your career, did you end up a game developer, or at least try it or so? Always fun with closure! :)
I made a very mediocre platformer in my senior year of high school, published on itch.io. I ended up becoming a software developer, which I enjoy 80% as much, but without any burnout or worrying about the superstar economics of being a game dev. Once the singularity hits, maybe I'll make more games.
Incredibly fun game, I'm not a huge gamer but I remember buying the Humble Bundle just to get this. One of the few games that I've spent the time to finish. Awesome work, Terry, and thank you for the great times!
btw also fuck you for veni vidi vici, jeez that took me a while!
I remember buying the bundle and thinking "I'll just play that lightweight 2D platformer while waiting for the bigger, more interesting games in the bundle to download"...and then spending the entire evening on it.
I finally got it after a good few hundred tries, iirc. Prep for having the patience to finish Final Fantasy XV's Pitioss dungeon.
My boyfriend at the time (who'd bought VVVVVV for me), on the other hand, was attempting a no-death-all-trinket run. I could never understand just how damn good he was at gaming.
Oh, and PPPPPP (the soundtrack) remains a staple. Especially the associated osu! Stream tracks.
void Graphics::print_level_creator(...) {
/* We now display a face instead of "by {author}" for several reasons:
* - "by" may be in a different language than the author and look weird ("por various people")
* - "by" will be longer in different languages and break the limit that levels assume
* - "by" and author may need mutually incompatible fonts, e.g. Japanese level in Korean VVVVVV
* - avoids likely grammar problems: male/female difference, name inflection in user-written text...
* - it makes sense to make it a face
* - if anyone is sad about this decision, the happy face will cheer them up anyway :D */
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.
--- snip ---
This sounds so bad, and confirms my prejudice that gaming code is terrible.
game developers must consider things that people like enterprise developers never concern themselves with, like latency and performance.
these days, at least where I work, everything is dominated by network latency. no matter what you do in your application logic, network latency will always dominate response time. with games, there is no latency unless you are writing a multiplayer server, and there are many ways to solve that, some better than others.
playing a single player factorio game, having huge factories on five planets, robots flying around doing things for you, dozens of ships flying between planets destroying asteroids and picking up the rocks they leave behind, hundreds of thousands of inserters picking up items and putting them onto or removing them from conveyor belts, and updating the status of everything in real time at 60 frames a second kinda hints at what computers can do today if you keep performance a primary concern. corporate developers never have to think about anything even approaching this.
i'm convinced that 2-4 experienced game developers could replace at least 20 traditional business software developers at any business in the US, and probably 50 enterprise software developers anywhere. They aren't 5x-10x as expensive, either. Experienced game developers simply operate on another level than most of us.
That just boils down to the trivial claim that building harder things teaches you more than building simpler things.
Games are one of the hardest things you can build since they have end to end complexity unlike most projects that can be cleanly decomposed into subsystems.
> gaming coders learn more than standard coders do
See the _Taos_ operating system. Based around something that conventional programming knowledge said was impossible. Created by games developers because they could.
All Taos code (except for some core device drivers for booting) is compiled for a nonexistent "Virtual Processor" (VP) and the VP bytecode is compiled to native code on the fly as it's loaded into RAM; the compiler is so efficient that the time delay of reading from hard disk is enough to generate native binaries with no significant delay.
Result: not only is the entire OS above the bootloader not just portable but will execute unmodified on any supported CPU from x86 to Arm to MIPS to PowerPC, but it was possible to have heterogenous SMP.
The Acorn RISC PC was an Arm desktop with an x86 second processor in a slot. Taos could execute on both at once.
Taos evolved into Intent and Elate, and nearly became the next-gen Amiga OS, before Tao Group collapsed. Some of the team used to hang out on HN.
The closest thing in the Unix world is Inferno, which is effectively UNIX 3.0 and is almost unknown today. Inferno embeds a bytecode runtime in the kernel, shared by the whole OS, and rewrites what was effectively Plan 9 2.0 in its own new descendant of C. So all binaries above the bootloader and kernel are cross-platform binaries that can execute directly on any CPU.
I'm not sure if this a new idea, unlikely - but I'll write it out at risk of forgetting later:
Code can be terrible, but fun: interesting bugs created and found in novel ideas.
Code can be wonderful, but boring: a calculator application which is well written, but drab in implementation.
Code can be terrible, and boring: some poorly thought-out B2B product that has hundreds of edge cases, each of which have numerous, similar but distinct bugs.
Code can be wonderful, and interesting: Doom, etc.
I’ll take the chance to reference Super Hexagon by the same author. Incredibly fun and addictive game as well while being super simple. I recall reading somewhere that the author spent only a day or so writing it.
And PPPPPP, the soundtrack for VVVVVV, is neat too!
While on the subject of games from the same author, Dicey Dungeons is an incredible fun game. Similar to a deck building rogue like, but instead of cards, you have dices. There are like six unique characters, multiple challenges per character, the rules keep changing (forcing you to rethink the game), and the game is filled with lots of humor. There's also free DLC and mod content, which I haven't even got to.
I had no idea Super Hexagon was from the same developer! That was so much fun, while being a very different kind of game to VVVVVV.
I always find it interesting when indie developers pivot to an entirely new genre of game after some initial success, some wonderful gems came out that way (such as Fallen London -> Sunless Sea -> Cultist Simulator).
Super Hexagon is my all-time favorite mobile game. I bought it in 2017 and I still play it to this day. I say it's the only game quick enough that you can have fun during an elevator ride.
There was a period of time in my life where I had recently moved to California from Canada and I was desperate for a job. I got a job doing door-to-door sales for Comcast. I hated it. I often sat in my car playing VVVVVV on my phone while shirking my responsibilities. Thank you Terry, for the reprieve.
I think it's pretty charming. Games have so much abstraction these days it feels like there's no way to truly understand what it is they're even doing.
One can spend months agonizing over the true nature of things and how ideas and concepts relate to each other and eventually distill it all into some object oriented organization that implements not just your game but all possible games.
One can also just cycle the game's state machine in a big function, haha switch statement go brrr. Reminds me of the old NES games which would statically allocate memory for game objects, very much in the "structure of arrays" style, they too had game logic just like that.
Also reminds me of old electromechanical pinball machines. You can literally see the machine cycle.
He was extremely kind, gave me a lot of interesting life advice. I remember him saying that he got most of his ideas just from playing around with mechanics and experimenting a lot, he was never really one to get grand visions.
Anyways, great fellow, glad he opened source V (as he called it).
This is important. Too many people assume that novel ideas come from abstract concepts. Yes they can, but they can equaly arise from playing with the medium.
Mining retro game mechanics was probably easier at the time VVVVVV was developed as the explosion of indy games has probably reused the best forgotten ones of the 80s/90s. It's getting close the time mechanics from 00s games can be reused though...
Not to say starting with a firm idea is bad... more like it may be hard to avoid playing around and improvising with the medium in any case.
* You can't get a no if you don't ask * "Never meet your heroes" is a sham and you need to meet a few shitbags before you can really appreciate the realest of people.
https://gallerdude.itch.io/the-journey-east-full
Deleted Comment
What did he say, exactly?
btw also fuck you for veni vidi vici, jeez that took me a while!
https://www.youtube.com/watch?v=4CtiY5D6HCs
And I remember actually enjoying the process! I was playing on my phone though and took many breaks - I liked this game a lot in this setting.
My boyfriend at the time (who'd bought VVVVVV for me), on the other hand, was attempting a no-death-all-trinket run. I could never understand just how damn good he was at gaming.
Oh, and PPPPPP (the soundtrack) remains a staple. Especially the associated osu! Stream tracks.
But great game all around, I should play it again...
Is opening up your source code worth it? Terry Cavanagh thinks it was for VVVVVV - https://news.ycombinator.com/item?id=25727963 - Jan 2021 (16 comments)
Many games are held together by duct tape - https://news.ycombinator.com/item?id=22043156 - Jan 2020 (154 comments)
VVVVVV Source Code Released - https://news.ycombinator.com/item?id=22011465 - Jan 2020 (1 comment)
VVVVVV’s source code is now public, 10 year anniversary jam happening now - https://news.ycombinator.com/item?id=22011358 - Jan 2020 (223 comments)
VVVVVV 60% Off On The Mac App Store This Weekend - https://news.ycombinator.com/item?id=2347676 - March 2011 (1 comment)
--- snip ---
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.
--- snip ---
This sounds so bad, and confirms my prejudice that gaming code is terrible.
game developers must consider things that people like enterprise developers never concern themselves with, like latency and performance.
these days, at least where I work, everything is dominated by network latency. no matter what you do in your application logic, network latency will always dominate response time. with games, there is no latency unless you are writing a multiplayer server, and there are many ways to solve that, some better than others.
playing a single player factorio game, having huge factories on five planets, robots flying around doing things for you, dozens of ships flying between planets destroying asteroids and picking up the rocks they leave behind, hundreds of thousands of inserters picking up items and putting them onto or removing them from conveyor belts, and updating the status of everything in real time at 60 frames a second kinda hints at what computers can do today if you keep performance a primary concern. corporate developers never have to think about anything even approaching this.
i'm convinced that 2-4 experienced game developers could replace at least 20 traditional business software developers at any business in the US, and probably 50 enterprise software developers anywhere. They aren't 5x-10x as expensive, either. Experienced game developers simply operate on another level than most of us.
Games are one of the hardest things you can build since they have end to end complexity unlike most projects that can be cleanly decomposed into subsystems.
See the _Taos_ operating system. Based around something that conventional programming knowledge said was impossible. Created by games developers because they could.
https://sites.google.com/site/dicknewsite/home/computing/byt...
TL;DR
All Taos code (except for some core device drivers for booting) is compiled for a nonexistent "Virtual Processor" (VP) and the VP bytecode is compiled to native code on the fly as it's loaded into RAM; the compiler is so efficient that the time delay of reading from hard disk is enough to generate native binaries with no significant delay.
Result: not only is the entire OS above the bootloader not just portable but will execute unmodified on any supported CPU from x86 to Arm to MIPS to PowerPC, but it was possible to have heterogenous SMP.
The Acorn RISC PC was an Arm desktop with an x86 second processor in a slot. Taos could execute on both at once.
Taos evolved into Intent and Elate, and nearly became the next-gen Amiga OS, before Tao Group collapsed. Some of the team used to hang out on HN.
The closest thing in the Unix world is Inferno, which is effectively UNIX 3.0 and is almost unknown today. Inferno embeds a bytecode runtime in the kernel, shared by the whole OS, and rewrites what was effectively Plan 9 2.0 in its own new descendant of C. So all binaries above the bootloader and kernel are cross-platform binaries that can execute directly on any CPU.
Code can be terrible, but fun: interesting bugs created and found in novel ideas.
Code can be wonderful, but boring: a calculator application which is well written, but drab in implementation.
Code can be terrible, and boring: some poorly thought-out B2B product that has hundreds of edge cases, each of which have numerous, similar but distinct bugs.
Code can be wonderful, and interesting: Doom, etc.
Suddenly having to prefix `this.` in JavaScript to every member bothers me a lot less
And PPPPPP, the soundtrack for VVVVVV, is neat too!
I always find it interesting when indie developers pivot to an entirely new genre of game after some initial success, some wonderful gems came out that way (such as Fallen London -> Sunless Sea -> Cultist Simulator).
It’s a super fun game to learn. It looks impossible to start out but then your brain adapts. It’s like seeing through the matrix.
Also shared it with many people and made them go crazy. I believe I still have 5 or 6 copies in my Steam inventory. Just in case.
Same for V, SMB, Braid and so many others. Sometimes, all you need is a little inspiration and crappy graphics.
One can spend months agonizing over the true nature of things and how ideas and concepts relate to each other and eventually distill it all into some object oriented organization that implements not just your game but all possible games.
One can also just cycle the game's state machine in a big function, haha switch statement go brrr. Reminds me of the old NES games which would statically allocate memory for game objects, very much in the "structure of arrays" style, they too had game logic just like that.
Also reminds me of old electromechanical pinball machines. You can literally see the machine cycle.
https://youtu.be/ue-1JoJQaEg
https://youtu.be/E3p_Cv32tEo
lol!
Also I like that every function starts with:
>jumpheld = true;