M4KC
Minecraft 4K - C Rewrite
For those who don't know, Minecraft 4K was a stripped down version of Minecraft submitted by Notch to the Java 4K Game Programming Contest, where each submission had to be under 4 kilobytes in size. Its wiki page can be found here.
Being so small, the game proved somewhat easy to de-compile and edit. Multiple people have given this a go, including me.
This project is an attempt to translate the game into C in order to increase its performance, and to provide a platform upon which to add new features.
Bug list
- "Sticky" block collision - this behavior is present in the original version and I have been trying to work out ways to fix it for a while.
- Raycaster breaks at -64 along any axis
- Infinite terrain generation is not fully functional, issues such as chunks flashing in and out of existence are common
Some goals for this project
- Maintaining the original look and feel as closely as possible. ✅️
- Keeping the final executable under 20 KB (on Linux, with the system I have set up in
build.sh) ✅️ - More blocks 🏗️
- Perlin noise terrain generation ✅️ (water, caves, etc) 🏗️
- Infinite worlds, possibly vertically too 🏗️
- Mobs and multiplayer (this would require changing the rendering engine to some degree) 🏗️
- Day/night ✅️
✅️ - got that!
🏗️ - not yet...
Dependencies
Bare minimum to make this code run
- SDL2
- A C compiler, such as gcc or clang
To get it down to a small size, you need
- gzexe
On windows, you will need
- Mingw-w64 installed
Build instructions
Linux, unix, etc
- To just get a binary, run
./build.sh smallor./build.sh all small - To run an uncompressed version, run
./build.shor./build.sh all - To install the program, run
./build.sh install - To uninstall, run
./build.sh uninstall - To clean, run
./build.sh clean
Windows
!!! NOTE !!! This doesn't work anymore. updated Windows build system coming soon.
Run win-build.bat. Inside of the win directory, you will find m4kc.exe and SDL2.dll. In order for m4kc.exe to run, these two must be in the same folder.
Places
There is a forum thread for this project here
I will be uploading binaries here
FAQ
I've either been asked these, or I expect to be at some point.
What's with the cryptic variable names like
f22andi6?
A lot of this code is decompiled from the original java version, and those are names the compiler assigned to the variables.
Why is it so slow?
The game uses a 3D voxel raycaster to render things, which is a lot slower than more traditional methods of rendering. Luckily, C provides more powerful ways to optimize something like this than Java - and optimizations will keep coming.