2023-08-12 07:10:50 -04:00
ClassiCube is a custom Minecraft Classic compatible client written in C that works on Windows, macOS, Linux, iOS, Android, FreeBSD, NetBSD, OpenBSD, Solaris, Haiku, IRIX, SerenityOS, BeOS, 3DS (unfinished), PSP (unfinished), GameCube (unfinished), Wii (unfinished), PS Vita (unfinished), Xbox (unfinished), Dreamcast (unfinished), and in a web browser.< br >
2015-06-30 21:15:53 -04:00
**It is not affiliated with (or supported by) Mojang AB, Minecraft, or Microsoft in any way.**
2017-05-25 05:13:33 -04:00
![screenshot_n ](http://i.imgur.com/FCiwl27.png )
2015-10-28 15:28:23 -04:00
2023-06-09 09:25:21 -04:00
You can download ClassiCube [from here ](https://www.classicube.net/download/ ) and the very latest builds [from here ](https://www.classicube.net/nightlies/ ).
2015-06-30 21:15:53 -04:00
2023-05-11 07:59:12 -04:00
### We need your help
ClassiCube strives to support providing an experience identical to the original Minecraft Classic by **strictly following a [clean room](https://en.wikipedia.org/wiki/Clean_room_design) reverse engineering approach** .
2023-06-09 09:25:21 -04:00
If you're interested in documenting or verifying the behaviour of the original Minecraft Classic, please get in contact with me. (`unknownshadow200` on Discord)
2023-05-11 07:59:12 -04:00
2021-10-18 06:13:17 -04:00
## Information
2019-02-01 21:26:33 -05:00
#### What ClassiCube is
2021-10-14 01:08:45 -04:00
* A complete re-implementation of Minecraft Classic 0.30, with **optional** additions
2023-05-11 07:59:12 -04:00
* Partially supports some features of Minecraft Classic versions before 0.30
2021-10-14 01:08:45 -04:00
* Lightweight, minimal memory usage compared to original Minecraft Classic
* Much better performance than original Minecraft Classic
* Works with effectively all graphics cards that support OpenGL or Direct3D 9
2015-06-30 21:15:53 -04:00
2021-10-14 01:08:45 -04:00
#### What ClassiCube isn't
* It does not work with Minecraft Java or Bedrock edition servers
* It does not have a survival mode (nor will such a mode be added)
2023-05-11 07:59:12 -04:00
* It does not support logging in with Mojang/Minecraft accounts
2015-06-30 21:15:53 -04:00
2021-10-14 01:08:45 -04:00
#### System requirements
2022-06-01 06:18:42 -04:00
* Windows: 95 or later
2021-10-14 01:08:45 -04:00
* macOS: 10.5 or later (can be compiled to work with 10.3/10.4 though)
* Linux: libcurl and libopenal
* Android: 2.3 or later
2015-06-30 21:15:53 -04:00
2021-10-14 01:08:45 -04:00
**Note:** When running from within VirtualBox, disable Mouse Integration, otherwise the camera will not work properly
2020-07-11 19:36:31 -04:00
2015-06-30 21:15:53 -04:00
#### Instructions
2023-05-11 07:59:12 -04:00
Initially, you will need to run ClassiCube.exe to download the required assets from minecraft.net and classicube.net.< br >
2016-01-12 05:53:17 -05:00
Just click 'OK' to the dialog menu that appears when you start the launcher.
2015-06-30 21:15:53 -04:00
2015-09-29 19:10:55 -04:00
**Singleplayer**
2019-02-01 21:26:33 -05:00
Run ClassiCube.exe, then click Singleplayer at the main menu.
2015-06-30 21:15:53 -04:00
2015-09-29 19:10:55 -04:00
**Multiplayer**
2023-05-11 07:59:12 -04:00
Run ClassiCube.exe. You can connect to LAN/locally hosted servers, and classicube.net servers if you have a [ClassiCube account ](https://www.classicube.net/ ).
2015-06-30 21:15:53 -04:00
2023-06-08 08:15:37 -04:00
##### *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.
2021-02-12 10:45:54 -05:00
2023-06-08 08:15:37 -04:00
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 ](http://download.qt.io/development_releases/prebuilt/llvmpipe/windows/ ) for slightly better performance though)
* On other operating systems, you will have to [compile the game yourself ](#Compiling ). Don't forget to add `-DCC_BUILD_GL11` to the compilation command line so that the compiled game supports OpenGL 1.1.
# Compiling
*Note: The various instructions below automatically compile ClassiCube with the recommended defaults for the platform. < br >
If you (not recommended) want to override the defaults (e.g. to compile OpenGL build on Windows), see [here ](doc/overriding-defaults.md ) for details.*
2017-10-22 20:07:33 -04:00
2021-07-23 23:51:30 -04:00
## Compiling - Windows
2019-03-10 12:24:28 -04:00
2020-07-11 19:36:31 -04:00
##### Using Visual Studio
2021-07-22 21:00:27 -04:00
Open ClassiCube.sln *(File -> Open -> Project/Solution)* and compile it *(Build -> Build Solution)* .
2019-03-10 12:24:28 -04:00
2020-06-08 07:14:49 -04:00
If you get a ```The Windows SDK version 5.1 was not found``` compilation error, [see here for how to fix ](doc/compile-fixes.md#visual-studio-unsupported-platform-toolset )
2019-06-27 09:06:17 -04:00
2020-07-11 19:36:31 -04:00
##### Using Visual Studio (command line)
1. Use 'Developer Tools for Visual Studio' from Start Menu
2023-06-09 09:25:21 -04:00
2. Navigate to the directory with ClassiCube's source code
2023-05-11 07:59:12 -04:00
3. Enter `cl.exe *.c /link user32.lib gdi32.lib winmm.lib dbghelp.lib shell32.lib comdlg32.lib /out:ClassiCube.exe`
2020-07-11 19:36:31 -04:00
##### Using MinGW-w64
2019-03-10 12:24:28 -04:00
I am assuming you used the installer from https://sourceforge.net/projects/mingw-w64/
1. Install MinGW-W64
2. Use either *Run Terminal* from Start Menu or run *mingw-w64.bat* in the installation folder
2023-06-10 03:37:22 -04:00
3. Navigate to the directory with ClassiCube's source code
2023-01-17 04:46:25 -05:00
4. Enter `gcc *.c -o ClassiCube.exe -mwindows -lwinmm -limagehlp`
2019-03-10 12:24:28 -04:00
2020-07-11 19:36:31 -04:00
##### Using MinGW
2023-05-11 07:59:12 -04:00
I am assuming you used the installer from https://osdn.net/projects/mingw/
2019-03-23 06:09:51 -04:00
1. Install MinGW. You need mingw32-base-bin and msys-base-bin packages.
2. Run *msys.bat* in the *C:\MinGW\msys\1.0* folder.
2023-06-09 09:25:21 -04:00
2. Navigate to the directory with ClassiCube's source code
2023-01-17 04:46:25 -05:00
4. Enter `gcc *.c -o ClassiCube.exe -mwindows -lwinmm -limagehlp`
2020-07-11 19:36:31 -04:00
2023-07-22 23:53:40 -04:00
##### Using TCC (Tiny C Compiler)
2021-07-23 23:51:30 -04:00
I am assuming you used `tcc-0.9.27-win64-bin.zip` from https://bellard.org/tcc/
1. Extract the .zip file
2023-07-22 23:53:40 -04:00
2. In TCC's `lib/kernel32.def` , add missing `RtlCaptureContext` at line 554 (In between `RtlAddFunctionTable` and `RtlDeleteFunctionTable` )
3. Copy `winapi` folder and `_mingw_dxhelper.h` from `winapi-full-for-0.9.27.zip` into TCC's `include` folder
4. Navigate to the directory with ClassiCube's source code
5. In `ExtMath.c` , change `fabsf` to `fabs` and `sqrtf` to `sqrtf`
6. Enter `tcc.exe -o ClassiCube.exe *.c -lwinmm -limagehlp -lgdi32 -luser32 -lcomdlg32 -lshell32`
2021-07-23 23:51:30 -04:00
## Compiling - Linux
2019-03-23 06:09:51 -04:00
2020-07-11 19:36:31 -04:00
##### Using gcc/clang
2019-02-17 22:30:23 -05:00
2020-05-26 08:06:03 -04:00
Install appropriate libs as required. For ubuntu these are: libx11-dev, libxi-dev and libgl1-mesa-dev
2019-02-17 22:30:23 -05:00
2021-10-18 06:13:17 -04:00
```gcc *.c -o ClassiCube -rdynamic -lm -lpthread -lX11 -lXi -lGL -ldl```
##### Cross compiling for Windows (32 bit):
2022-08-21 06:58:12 -04:00
```i686-w64-mingw32-gcc *.c -o ClassiCube.exe -mwindows -lwinmm -limagehlp```
2019-02-17 22:30:23 -05:00
2021-10-18 06:13:17 -04:00
##### Cross compiling for Windows (64 bit):
2019-02-17 22:30:23 -05:00
2022-08-21 06:58:12 -04:00
```x86_64-w64-mingw32-gcc *.c -o ClassiCube.exe -mwindows -lwinmm -limagehlp```
2019-04-03 02:32:55 -04:00
2021-10-18 06:13:17 -04:00
##### Raspberry Pi
2019-12-14 00:13:37 -05:00
Although the regular linux compiliation flags will work fine, to take full advantage of the hardware:
2022-05-17 06:41:12 -04:00
```gcc *.c -o ClassiCube -DCC_BUILD_RPI -rdynamic -lm -lpthread -lX11 -lXi -lEGL -lGLESv2 -ldl```
2019-12-14 00:13:37 -05:00
2021-07-23 23:51:30 -04:00
## Compiling - macOS
2020-07-11 19:36:31 -04:00
##### Using gcc/clang (32 bit)
2019-04-03 02:32:55 -04:00
2021-01-10 02:52:44 -05:00
```cc *.c -o ClassiCube -framework Carbon -framework AGL -framework OpenGL -framework IOKit```
2019-02-17 22:30:23 -05:00
2020-07-11 19:36:31 -04:00
##### Using gcc/clang (64 bit)
2019-09-29 03:51:27 -04:00
2021-01-22 17:38:26 -05:00
```cc *.c interop_cocoa.m -o ClassiCube -framework Cocoa -framework OpenGL -framework IOKit -lobjc```
2019-09-29 03:51:27 -04:00
2022-08-17 07:17:09 -04:00
## Compiling - for Android
2023-07-14 19:41:40 -04:00
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
2022-08-17 07:17:09 -04:00
##### 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
2023-07-14 19:41:40 -04:00
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
2022-08-17 07:17:09 -04:00
##### Using Xcode GUI
Import `ios/CCIOS.xcodeproj` project into Xcode (TODO explain more detailed)
##### Using command line (Xcode)
`xcodebuild -sdk iphoneos -configuration Debug` (TODO explain more detailed)
2021-07-23 23:51:30 -04:00
## Compiling - other desktop OSes
2020-07-11 19:36:31 -04:00
2019-03-28 19:15:21 -04:00
#### FreeBSD
2019-02-17 22:30:23 -05:00
2023-07-16 02:56:11 -04:00
Install libxi, libexecinfo, curl and openal-soft package if needed
2021-10-18 06:13:17 -04:00
```cc *.c -o ClassiCube -I /usr/local/include -L /usr/local/lib -lm -lpthread -lX11 -lXi -lGL -lexecinfo```
2019-02-17 22:30:23 -05:00
2019-03-03 17:27:53 -05:00
#### OpenBSD
2021-10-18 06:13:17 -04:00
Install libexecinfo, curl and openal package if needed
2019-03-03 17:27:53 -05:00
2020-05-28 09:57:00 -04:00
```cc *.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```
2019-03-03 17:27:53 -05:00
2019-03-08 21:33:08 -05:00
#### NetBSD
2021-10-18 06:13:17 -04:00
Install libexecinfo, curl and openal-soft package if needed
```cc *.c -o ClassiCube -I /usr/X11R7/include -I /usr/pkg/include -L /usr/X11R7/lib -L /usr/pkg/lib -lpthread -lX11 -lXi -lGL -lexecinfo```
2019-03-28 19:15:21 -04:00
2020-05-06 02:36:55 -04:00
#### DragonflyBSD
2021-10-18 06:13:17 -04:00
```cc *.c -o ClassiCube -I /usr/local/include -L /usr/local/lib -lm -lpthread -lX11 -lXi -lGL -lexecinfo```
2020-05-06 02:36:55 -04:00
2019-03-28 19:15:21 -04:00
#### Solaris
2020-05-26 08:06:03 -04:00
```gcc *.c -o ClassiCube -lm -lsocket -lX11 -lXi -lGL```
2019-03-28 19:15:21 -04:00
2020-02-16 23:40:37 -05:00
#### Haiku
2023-07-16 02:56:11 -04:00
Install openal_devel package if needed
2020-02-16 23:40:37 -05:00
2023-07-16 02:56:11 -04:00
```cc *.c interop_BeOS.cpp -o ClassiCube -lm -lGL -lnetwork -lstdc++ -lbe -lgame -ltracker```
2023-07-14 21:30:47 -04:00
#### BeOS
```cc *.c interop_BeOS.cpp -o ClassiCube -lm -lGL -lbe -lgame -ltracker```
2020-02-16 23:40:37 -05:00
2023-05-11 07:59:12 -04:00
#### IRIX
```gcc -lGL -lX11 -lXi -lm -lpthread -ldl```
2022-10-18 06:27:16 -04:00
#### SerenityOS
Install SDL2 port if needed
```cc *.c -o ClassiCube -lgl -lSDL2```
2021-07-23 23:51:30 -04:00
## Compiling - other
2020-07-11 19:36:31 -04:00
2019-04-20 08:21:32 -04:00
#### Web
2022-09-12 06:23:31 -04:00
```emcc *.c -s ALLOW_MEMORY_GROWTH=1 --js-library interop_web.js```
2019-04-20 08:21:32 -04:00
2020-06-05 03:19:57 -04:00
The generated javascript file has some issues. [See here for how to fix ](doc/compile-fixes.md#webclient-patches )
2019-06-27 09:06:17 -04:00
2023-05-11 07:59:12 -04:00
#### PSP
2023-06-30 23:30:39 -04:00
Run `make psp` . You'll need [pspsdk ](https://github.com/pspdev/pspsdk )
2023-05-11 07:59:12 -04:00
2023-07-22 23:53:40 -04:00
**NOTE: It is recommended that you install the precompiled pspsdk version from [here ](https://github.com/pspdev/pspdev/releases )**
2023-06-23 06:42:12 -04:00
The PSP port needs assistance from someone experienced with PSP homebrew development - if you're interested, please get in contact with me. (`unknownshadow200` on Discord)
2023-05-11 07:59:12 -04:00
#### 3DS
2023-06-30 23:30:39 -04:00
Run `make 3ds` . You'll need [libctru ](https://github.com/devkitPro/libctru )
2023-05-11 07:59:12 -04:00
2023-07-22 23:53:40 -04:00
**NOTE: It is highly recommended that you install the precompiled devkitpro packages from [here ](https://devkitpro.org/wiki/Getting_Started ) - you need the `3ds-dev` group)**
2023-06-23 06:42:12 -04:00
The 3DS port needs assistance from someone experienced with 3DS homebrew development - if you're interested, please get in contact with me. (`unknownshadow200` on Discord)
2023-06-30 23:30:39 -04:00
#### Wii
2023-06-23 06:42:12 -04:00
2023-06-30 23:30:39 -04:00
Run `make wii` . You'll need [libogc ](https://github.com/devkitPro/libogc )
2023-06-23 06:42:12 -04:00
2023-07-22 23:53:40 -04:00
**NOTE: It is highly recommended that you install the precompiled devkitpro packages from [here ](https://devkitpro.org/wiki/Getting_Started ) - you need the `wii-dev` group)**
2023-06-30 23:30:39 -04:00
The Wii port needs assistance from someone experienced with Wii homebrew development - if you're interested, please get in contact with me. (`unknownshadow200` on Discord)
2023-06-23 06:42:12 -04:00
2023-06-30 23:30:39 -04:00
#### GameCube
2023-06-23 06:42:12 -04:00
2023-06-30 23:30:39 -04:00
Run `make gamecube` . You'll need [libogc ](https://github.com/devkitPro/libogc )
2023-06-23 06:42:12 -04:00
2023-07-22 23:53:40 -04:00
**NOTE: It is highly recommended that you install the precompiled devkitpro packages from [here ](https://devkitpro.org/wiki/Getting_Started ) - you need the `gamecube-dev` group)**
2023-08-14 08:36:02 -04:00
The GC port needs assistance from someone experienced with GameCube homebrew development - if you're interested, please get in contact with me. (`unknownshadow200` on Discord)
2023-06-23 06:42:12 -04:00
2023-08-12 07:10:50 -04:00
#### Xbox
Run `make xbox` . You'll need [nxdk ](https://github.com/XboxDev/nxdk )
2023-08-14 08:36:02 -04:00
The Xbox port needs assistance from someone experienced with Xbox homebrew development - if you're interested, please get in contact with me. (`unknownshadow200` on Discord)
2023-08-12 07:10:50 -04:00
#### Dreamcast
Run `make dreamcast` . You'll need [KallistiOS ](https://github.com/KallistiOS/KallistiOS )
2023-08-14 08:36:02 -04:00
The Dreamcast port needs assistance from someone experienced with Dreamcast homebrew development - if you're interested, please get in contact with me. (`unknownshadow200` on Discord)
2023-08-12 07:10:50 -04:00
2019-05-29 09:02:42 -04:00
##### Other
2019-03-28 19:15:21 -04:00
2020-06-05 03:19:57 -04:00
You'll have to write the necessary code. You should read portability.md in doc folder.
2019-03-08 21:33:08 -05:00
2021-07-23 23:51:30 -04:00
## Documentation
2019-02-17 22:30:23 -05:00
Functions and variables in .h files are mostly documented.
2023-06-09 09:25:21 -04:00
Further information (e.g. style) for ClassiCube's source code can be found in the doc and misc folders.
2019-12-04 15:39:35 -05:00
2021-07-23 23:51:30 -04:00
#### Known compilation errors
[Fixes for compilation errors when using musl or old glibc for C standard library ](doc/compile-fixes.md#common-compilation-errors )
2019-12-04 15:39:35 -05:00
#### 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>` .
2020-03-10 06:00:30 -04:00
2020-03-11 06:38:18 -04:00
## Open source technologies
2020-03-10 06:00:30 -04:00
2021-05-18 17:27:29 -04:00
* [curl ](https://curl.se/ ) - HTTP/HTTPS for linux and macOS
* [FreeType ](https://www.freetype.org/ ) - Font handling for all platforms
* [GCC ](https://gcc.gnu.org/ ) - Compiles client for linux
* [MinGW-w64 ](http://mingw-w64.org/doku.php ) - Compiles client for windows
* [Clang ](https://clang.llvm.org/ ) - Compiles client for macOS
2021-08-13 08:41:19 -04:00
* [Emscripten ](https://emscripten.org/ ) - Compiles client for web
2023-07-29 06:02:29 -04:00
* [RenderDoc ](https://renderdoc.org/ ) - Graphics debugging
* [libctru ](https://github.com/devkitPro/libctru ) - Backend for 3DS
* [citro3D ](https://github.com/devkitPro/citro3d ) - Rendering backend for 3DS
2023-08-11 19:38:47 -04:00
* [Citra ](https://github.com/citra-emu/citra ) - Emulator used to test 3DS port
2023-07-29 06:02:29 -04:00
* [pspsdk ](https://github.com/pspdev/pspsdk ) - Backend for PSP
2023-08-11 19:38:47 -04:00
* [PPSSPP ](https://github.com/hrydgard/ppsspp ) - Emulator used to test 3DS port
* [libogc ](https://github.com/devkitPro/libogc ) - Backend for Wii and GameCube
2023-08-04 06:11:14 -04:00
* [libfat ](https://github.com/devkitPro/libfat ) - Filesystem backend for Wii/GC
* [Dolphin ](https://github.com/dolphin-emu/dolphin ) - Emulator used to test Wii/GC port
2023-08-11 19:38:47 -04:00
* [KallistiOS ](https://github.com/KallistiOS/KallistiOS ) - Backend for Dreamcast
* [nullDC ](https://github.com/skmp/nulldc ) - Emulator used to test Dreamcast port
* [nxdk ](https://github.com/XboxDev/nxdk ) - Backend for Xbox
* [xemu ](https://github.com/xemu-project/xemu ) - Emulator used to test Xbox port
2021-08-13 08:41:19 -04:00
## Sound Credits
ClassiCube uses sounds from [Freesound.org ](https://freesound.org )< br >
2021-10-14 01:08:45 -04:00
Full credits are listed in [doc/sound-credits.md ](doc/sound-credits.md )