.github | ||
android | ||
doc | ||
ios | ||
misc | ||
src | ||
third_party | ||
.gitattributes | ||
.gitignore | ||
credits.txt | ||
license.txt | ||
Makefile | ||
readme.md |
ClassiCube is a custom Minecraft Classic compatible client written in C from scratch.
It is not affiliated with (or supported by) Mojang AB, Minecraft, or Microsoft in any way.
What ClassiCube is
ClassiCube aims to replicate the 2009 Minecraft Classic client while offering optional enhancements to improve gameplay. ClassiCube can run on many systems, including desktop, web, mobile, and even some consoles.
Features (click to expand)
- Much better performance and minimal memory usage compared to original Minecraft Classic
- Optional enhancements including custom blocks, models, and environment colors
- Partially supports some features of Minecraft Classic versions before 0.30
- Works with effectively all graphics cards that support OpenGL or Direct3D 9
- Runs on Windows, macOS, Linux, Android, iOS, and in a web browser
- Also runs on OpenBSD, FreeBSD, NetBSD, Solaris, Haiku, IRIX, SerenityOS
- Although in various stages of early development, also runs on various consoles
ClassiCube is not trying to replicate modern Minecraft versions. It will never support survival, logging in with Minecraft accounts or connecting to Minecraft servers.
You can download ClassiCube from here and the very latest builds from here.
We need your help
ClassiCube strives to replicate the original Minecraft Classic experience by strictly following a clean room reverse engineering approach.
If you're interested in documenting or verifying the behaviour of the original Minecraft Classic, please get in contact with me. (unknownshadow200
on Discord)
How to play
Initially, you will need to run ClassiCube.exe to download the required assets from minecraft.net and classicube.net.
Just click 'OK' to the dialog menu that appears when you start the launcher.
Singleplayer Run ClassiCube.exe, then click Singleplayer at the main menu.
Multiplayer Run ClassiCube.exe. You can connect to LAN/locally hosted servers, and classicube.net servers if you have a ClassiCube account.
Note: When running from within VirtualBox, disable Mouse Integration, otherwise the camera will not work properly
Stuck on OpenGL 1.1?
The most common reason for being stuck on OpenGL 1.1 is non-working GPU drivers - so if possible, you should try either installing or updating the drivers for your GPU.
Otherwise:
- On Windows, you can still run the OpenGL build of ClassiCube anyways. (You can try downloading and using the MESA software renderer from here for slightly better performance though)
- On other operating systems, you will have to compile the game yourself. Don't forget to add
-DCC_BUILD_GL11
to the compilation command line so that the compiled game supports OpenGL 1.1.
Supported systems
ClassiCube runs on:
- Windows - 95 and later
- macOS - 10.5 or later (but can be compiled to work with 10.3/10.4 though)
- Linux - needs
libcurl
andlibopenal
- Android - 2.3 or later
- iOS - 8.0 or later
- Most web browsers (even runs on IE11)
And also runs on:
- Raspberry Pi - needs
libcurl
andlibopenal
- FreeBSD - needs
libexecinfo
,curl
andopenal-soft
packages (if you have a GitHub account, can download from here) - NetBSD - needs
libexecinfo
,curl
andopenal-soft
packages (if you have a GitHub account, can download from here) - OpenBSD - needs
libexecinfo
,curl
andopenal
packages - Solaris - needs
curl
andopenal
packages - Haiku - needs
openal
package (if you have a GitHub account, can download from here) - BeOS - untested on actual hardware
- IRIX - needs
curl
andopenal
packages - SerenityOS - needs
SDL2
- Classic Mac OS (System 7 and later)
- Dreamcast - unfinished, but usable (can download from here)
- Saturn - unfinished, major rendering and stability issues (can download from here)
- Switch - unfinished, but usable (can download from here)
- Wii U - unfinished, major issues, broken on real hardware (can download from here)
- Wii - unfinished, but usable (can download from here)
- GameCube - unfinished, but usable (can download from here)
- Nintendo 64 - unfinished, moderate rendering issues (can download from here)
- 3DS - unfinished, but usable (can download from here)
- DS/DSi - unfinished, rendering issues (can download from here)
- PS Vita - unfinished, rendering issues (can download from here)
- PSP - unfinished, rendering issues (can download from here)
- PS3 - unfinished, rendering issues (can download from here)
- PS2 - unfinished, major rendering and stability issues (can download from here)
- PS1 - unfinished, major rendering and stability issues (can download from here)
- Xbox 360 - completely unfinished, broken on real hardware (can download from here)
- Xbox - unfinished, major rendering issues (can download from here)
Compiling
Note: The various instructions below automatically compile ClassiCube with the recommended defaults for the platform.
If you (not recommended) want to override the defaults (e.g. to compile OpenGL build on Windows), see here for details.
Compiling - Windows
Using Visual Studio
Open ClassiCube.sln (File -> Open -> Project/Solution) and compile it (Build -> Build Solution).
If you get a The Windows SDK version 5.1 was not found
compilation error, see here for how to fix
Using Visual Studio (command line)
- Use 'Developer Tools for Visual Studio' from Start Menu
- Navigate to the directory with ClassiCube's source code
- Enter
cl.exe *.c /link user32.lib gdi32.lib winmm.lib dbghelp.lib shell32.lib comdlg32.lib /out:ClassiCube.exe
Using MinGW-w64
I am assuming you used the installer from https://sourceforge.net/projects/mingw-w64/
- Install MinGW-W64
- Use either Run Terminal from Start Menu or run mingw-w64.bat in the installation folder
- Navigate to the directory with ClassiCube's source code
- Enter
gcc -fno-math-errno *.c -o ClassiCube.exe -mwindows -lwinmm
Using MinGW
I am assuming you used the installer from https://osdn.net/projects/mingw/
- Install MinGW. You need mingw32-base-bin and msys-base-bin packages.
- Run msys.bat in the C:\MinGW\msys\1.0 folder.
- Navigate to the directory with ClassiCube's source code
- Enter
gcc -fno-math-errno *.c -o ClassiCube.exe -mwindows -lwinmm
Using TCC (Tiny C Compiler)
Setting up TCC:
- Download and extract
tcc-0.9.27-win64-bin.zip
from https://bellard.org/tcc/ - In TCC's
lib/kernel32.def
, add missingRtlCaptureContext
at line 554 (In betweenRtlAddFunctionTable
andRtlDeleteFunctionTable
) - Download
winapi-full-for-0.9.27.zip
from https://bellard.org/tcc/ - Copy
winapi
folder and_mingw_dxhelper.h
fromwinapi-full-for-0.9.27.zip
into TCC'sinclude
folder
Compiling with TCC:
- Navigate to the directory with ClassiCube's source code
- In
ExtMath.c
, changefabsf
tofabs
andsqrtf
tosqrt
- Enter
tcc.exe -o ClassiCube.exe *.c -lwinmm -lgdi32 -luser32 -lcomdlg32 -lshell32
(Note: You may need to specify the full path totcc.exe
instead of justtcc.exe
)
Compiling - Linux
Using gcc/clang
Install appropriate libs as required. For ubuntu these are: libx11-dev, libxi-dev and libgl1-mesa-dev
gcc -fno-math-errno src/*.c -o ClassiCube -rdynamic -lpthread -lX11 -lXi -lGL -ldl
Cross compiling for Windows (32 bit):
i686-w64-mingw32-gcc -fno-math-errno src/*.c -o ClassiCube.exe -mwindows -lwinmm
Cross compiling for Windows (64 bit):
x86_64-w64-mingw32-gcc -fno-math-errno src/*.c -o ClassiCube.exe -mwindows -lwinmm
Raspberry Pi
Although the regular linux compiliation flags will work fine, to take full advantage of the hardware:
gcc -fno-math-errno src/*.c -o ClassiCube -DCC_BUILD_RPI -rdynamic -lpthread -lX11 -lXi -lEGL -lGLESv2 -ldl
Compiling - macOS
cc -fno-math-errno src/*.c src/*.m -o ClassiCube -framework Cocoa -framework OpenGL -framework IOKit -lobjc
Note: You may need to install Xcode before you can compile ClassiCube
Using Xcode GUI
Open the misc/macOS/CCMAC.xcodeproj
project in Xcode, and then compile it
Compiling - for Android
NOTE: If you are distributing a modified version, please change the package ID from com.classicube.android.client
to something else - otherwise Android users won't be able to have both ClassiCube and your modified version installed at the same time on their Android device
Using Android Studio GUI
Open android
folder in Android Studio (TODO explain more detailed)
Using command line (gradle)
Run gradlew
in android folder (TODO explain more detailed)
Compiling - for iOS
iOS version will have issues as it's incomplete and only tested in iOS Simulator
NOTE: If you are distributing a modified version, please change the bundle ID from com.classicube.ios.client
to something else - otherwise iOS users won't be able to have both ClassiCube and your modified version installed at the same time on their iOS device
Using Xcode GUI
Open the ios/CCIOS.xcodeproj
project in Xcode, and then compile it
Using command line (Xcode)
xcodebuild -sdk iphoneos -configuration Debug
(TODO explain more detailed)
Compiling - webclient
emcc src/*.c -s ALLOW_MEMORY_GROWTH=1 -s TOTAL_STACK=1Mb --js-library interop_web.js
The generated javascript file has some issues. See here for how to fix
For more details on how to integrate into a website, see here
Compiling - consoles
All console ports needs assistance from someone experienced with homebrew development - if you're interested, please get in contact with me. (unknownshadow200
on Discord)
Nintendo consoles (click to expand)
Switch
Run make switch
. You'll need libnx and mesa
NOTE: It is highly recommended that you install the precompiled devkitpro packages from here - you need the switch-dev
group and the switch-mesa switch-glm
packages)
Wii U
Run make wiiu
. You'll need wut
NOTE: It is highly recommended that you install the precompiled devkitpro packages from here - you need the wiiu-dev
group)
3DS
Run make 3ds
. You'll need libctru
NOTE: It is highly recommended that you install the precompiled devkitpro packages from here - you need the 3ds-dev
group)
Wii
Run make wii
. You'll need libogc
NOTE: It is highly recommended that you install the precompiled devkitpro packages from here - you need the wii-dev
group)
GameCube
Run make gamecube
. You'll need libogc
NOTE: It is highly recommended that you install the precompiled devkitpro packages from here - you need the gamecube-dev
group)
Nintendo DS/DSi
Run make ds
. You'll need BlocksDS
Nintendo 64
Run make n64
. You'll need the opengl branch of libdragon
Sony consoles (click to expand)
PlayStation Vita
Run make vita
. You'll need vitasdk
PlayStation Portable
Run make psp
. You'll need pspsdk
NOTE: It is recommended that you install the precompiled pspsdk version from here
PlayStation 3
Run make ps3
. You'll need PSL1GHT
PlayStation 2
Run make ps2
. You'll need ps2sdk
PlayStation 1
Run make ps1
. You'll need PSn00bSDK
Microsoft consoles (click to expand)
Xbox 360
Run make 360
. You'll need libxenon
Xbox (original)
Run make xbox
. You'll need nxdk
SEGA consoles (click to expand)
SEGA consoles
Dreamcast
Run make dreamcast
. You'll need KallistiOS
Saturn
Run make saturn
. You'll need libyaul
Compiling - other platforms (click to expand)
FreeBSD
Install libxi, libexecinfo, curl and openal-soft package if needed
cc src/*.c -o ClassiCube -I /usr/local/include -L /usr/local/lib -lm -lpthread -lX11 -lXi -lGL -lexecinfo
OpenBSD
Install libexecinfo, curl and openal package if needed
cc src/*.c -o ClassiCube -I /usr/X11R6/include -I /usr/local/include -L /usr/X11R6/lib -L /usr/local/lib -lm -lpthread -lX11 -lXi -lGL -lexecinfo
NetBSD
Install libexecinfo, curl and openal-soft package if needed
cc src/*.c -o ClassiCube -I /usr/X11R7/include -I /usr/pkg/include -L /usr/X11R7/lib -L /usr/pkg/lib -lpthread -lX11 -lXi -lGL -lexecinfo
DragonflyBSD
cc src/*.c -o ClassiCube -I /usr/local/include -L /usr/local/lib -lm -lpthread -lX11 -lXi -lGL -lexecinfo
Solaris
gcc -fno-math-errno src/*.c -o ClassiCube -lsocket -lX11 -lXi -lGL
Haiku
Install openal_devel package if needed
cc -fno-math-errno src/*.c interop_BeOS.cpp -o ClassiCube -lGL -lnetwork -lstdc++ -lbe -lgame -ltracker
BeOS
cc -fno-math-errno src/*.c interop_BeOS.cpp -o ClassiCube -lGL -lbe -lgame -ltracker
IRIX
gcc -fno-math-errno -lGL -lX11 -lXi -lpthread -ldl
SerenityOS
Install SDL2 port if needed
cc src/*.c -o ClassiCube -lgl -lSDL2
Classic Mac OS
Install Retro68 to compile (supports both M68k and PowerPC compiling)
make macclassic_68k
or make macclassic_ppc
The PowerPC build will usually perform much better
Other systems
You'll have to write the necessary code. You should read portability.md
in doc folder.
Documentation
Functions and variables in .h files are mostly documented.
Further information (e.g. style) for ClassiCube's source code can be found in the doc and misc folders.
Known compilation errors
Fixes for compilation errors when using musl or old glibc for C standard library
Tips
-
Press escape (after joining a world) or pause to switch to the pause menu.
-
Pause menu -> Options -> Controls lists all of the key combinations used by the client.
-
Note that toggling 'vsync' to on will minimise CPU usage, while off will maximimise chunk loading speed.
-
Press F to cycle view distance. A smaller number of visible chunks can improve performance.
-
If the server has disabled hacks, key combinations such as fly and speed will not do anything.
-
To see the list of built in commands, type
/client
. -
To see help for a given built in command, type
/client help <command name>
.
Open source technologies (click to expand)
- curl - HTTP/HTTPS for linux and macOS
- FreeType - Font handling for all platforms
- GCC - Compiles client for linux
- MinGW-w64 - Compiles client for windows
- Clang - Compiles client for macOS
- Emscripten - Compiles client for web
- RenderDoc - Graphics debugging
- BearSSL - SSL/TLS support on consoles
- libnx - Backend for Switch
- Ryujinx - Emulator used to test Switch port
- wut - Backend for Wii U
- Cemu - Emulator used to test Wii U port
- libctru - Backend for 3DS
- citro3D - Rendering backend for 3DS
- Citra - Emulator used to test 3DS port
- libogc - Backend for Wii and GameCube
- libfat - Filesystem backend for Wii/GC
- Dolphin - Emulator used to test Wii/GC port
- libdragon - Backend for Nintendo 64
- ares - Emulator used to test Nintendo 64 port
- BlocksDS - Backend for Nintendo DS
- melonDS - Emulator used to test Nintendo DS port
- vitasdk - Backend for PS Vita
- Vita3K - Emulator used to test Vita port
- pspsdk - Backend for PSP
- PPSSPP - Emulator used to test PSP port
- PSL1GHT - Backend for PS3
- RPCS3 - Emulator used to test PS3 port
- ps2sdk - Backend for PS2
- PCSX2 - Emulator used to test PS2 port
- PSn00bSDK - Backend for PS1
- duckstation - Emulator used to test PS1 port
- libxenon - Backend for Xbox 360
- nxdk - Backend for Xbox
- xemu - Emulator used to test Xbox port
- cxbx-reloaded - Emulator used to test Xbox port
- KallistiOS - Backend for Dreamcast
- GLdc - Basis of rendering backend for Dreamcast
- flycast - Emulator used to test Dreamcast port
- libyaul - Backend for Saturn
- mednafen - Emulator used to test Saturn port
Sound Credits
ClassiCube uses sounds from Freesound.org
Full credits are listed in doc/sound-credits.md