A 1:1 recreation of VVVVVV, the acclaimed platform-puzzle game, in vanilla Minecraft.
This project aims to be an accurate recreation of VVVVVV in vanilla Minecraft using data packs and resource packs. It uses the beet Python library to generate Minecraft functions/assets based on code that's ported from the game's source.
I originally started this project back in 2019, and actually went pretty far into the game's logic (GIF). However, I made a poor design decision at the start, which was to place all rooms in a flat "plane" that was thousands of blocks wide. This meant that all sorts of chunk loading issues would occur when moving across rooms, which were pretty disruptive to the immersive experience I wanted to achieve.
Not only this, but I was relying solely on observation of recorded game footage, along with a decompilation of the Flash version of the game, which meant not everything could be recreated accurately. Ultimately, I decided the project would have to be started from scratch, and left it on hold for a while.
Two things happened since then:
- VVVVV's source code was published, which enabled me to recreate mechanics much more accurately by looking at the source;
- beet was released, which allowed for a much higher level of control over the integration of code-driven parts into Minecraft data packs and resource packs.
With those two things, I figured it was the perfect time to start over the project!
This time, I'm using an approach of hardcoding as much stuff as possible. The idea is to write generators to convert as much of the game's data into a format that's suitable for Minecraft, keeping as much of the game's logic to the generator and not the data pack itself.
For instance, instead of dynamically loading each individual tile for every room like the game does, the code generates static textures containing all the tiles in each room. While this allows for less flexibility (for instance, you can't modify levels on-the-fly with only the data that's exposed to Minecraft), the use of beet allows any change in the source data to be reflected in-game by simply rebuilding the data pack.
Removing this sort of logic from the data pack, making it as simple as possible, can make performance in Minecraft much better, at the cost of having a slightly larger data pack to hold all the precalculated information (it's the old space-time tradeoff).
This project is also an attempt at getting familiarized with as many Minecraft file formats as possible. beet, structure files and even GLSL shaders are planned. Some good practices are also being adopted, like type-hinting and conventional commits (even though I'm not very likely to add CI to this project!)
-
Make sure you have at least Python 3.9 installed.
-
Clone the project:
$ git clone https://github.com/Bentroen/VVVVVV-in-Minecraft.git
-
This project uses poetry to manage dependencies. Make sure to install it, and run:
$ poetry install
-
Clone VVVVVV's repository and place it alongside this repository's folder (not inside it!):
$ git clone https://github.com/TerryCavanagh/VVVVVV.git
-
Download the
data.zip
file and place that file alongside both folders. -
Create a 1.17 superflat Minecraft world with 'The Void' preset.
-
Link the project to your newly created world:
$ beet link VVVVVV-in-Minecraft
-
Build the project:
$ beet build
You're done!
I must admit, this is a crazy project, as much so that I can't even say for sure if I'll ever be able to finish it. However, be assured I still envision being able to play VVVVVV seamlessly in vanilla Minecraft, even if at times it's not a priority project of mine.
That being said, if you are as passionate about both games as I am and want to help this project come closer to a playable state, please open a pull request!