2023-06-23 06:42:12 -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, 3DS (unfinished), PSP (unfinished), GameCube (unfinished), Wii (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
2021-07-23 23:51:30 -04:00
##### Using TCC
I am assuming you used `tcc-0.9.27-win64-bin.zip` from https://bellard.org/tcc/
1. Extract the .zip file
2023-06-09 09:25:21 -04:00
2. In `ExtMath.c` , change `fabsf` to `fabs` and `sqrtf` to `sqrtf`
2021-07-23 23:51:30 -04:00
3. In TCC's `include/math.h` , remove the inline definition for `fabs` at around line 217
4. In TCC's `lib/kernel32.def` , add missing `RtlCaptureContext`
5. Add missing include files from `winapi-full-for-0.9.27.zip` as required
6. ???
## 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
##### 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
##### 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
2021-10-18 06:13:17 -04:00
Install libexecinfo, curl and openal-soft package if needed
```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
2022-10-06 08:56:54 -04:00
Install openal_devel and libexecinfo_devel package if needed
2020-02-16 23:40:37 -05:00
2022-10-31 08:42:57 -04:00
```cc *.c Window_Haiku.cpp -o ClassiCube -lm -lexecinfo -lGL -lnetwork -lstdc++ -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
cd into `src` directory, then run `make psp` . You'll need [pspsdk ](https://github.com/pspdev/pspsdk )
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
cd into `src` directory, then run `make 3ds` . You'll need [libctru ](https://github.com/devkitPro/libctru )
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)
#### GameCube
Use a slighly modified standard GameCube makefile. You'll need [libogc ](https://github.com/devkitPro/libogc )
The GC port needs assistance from someone experienced with GC homebrew development - if you're interested, please get in contact with me. (`unknownshadow200` on Discord)
#### Wii
Use a slighly modified standard Wii makefile. You'll need [libogc ](https://github.com/devkitPro/libogc )
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)
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
2021-11-02 04:33:00 -04:00
* [RenderDoc ](https://renderdoc.org/ ) - graphics debugging
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 )