Skip to content

Joshyfishy22/ClassiCube-IRIX

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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.

screenshot_n

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 and libopenal
  • Android - 2.3 or later
  • iOS - 10.3 or later
  • Most web browsers (even runs on IE11)
And also runs on:
  • Raspberry Pi - needs libcurl and libopenal
  • FreeBSD - needs libexecinfo, curl and openal-soft packages
  • NetBSD - needs libexecinfo, curl and openal-soft packages
  • OpenBSD - needs libexecinfo, curl and openal packages
  • Solaris - needs curl and openal packages
  • Haiku - needs openal package
  • BeOS - untested on actual hardware
  • IRIX - needs curl and openal packages
  • SerenityOS - needs SDL2
  • 3DS - unfinished, but usable
  • Wii - unfinished, but usable
  • GameCube - unfinished, but usable
  • PSP - unfinished, rendering issues
  • Dreamcast - unfinished, but renders
  • PS Vita - majorly unfinished
  • Xbox - majorly unfinished

You can download ClassiCube from here and the very latest builds from here.

We need your help

ClassiCube strives to support providing an experience identical to the original Minecraft Classic 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)

Information

What ClassiCube is

  • A complete re-implementation of Minecraft Classic 0.30, with optional additions
  • Partially supports some features of Minecraft Classic versions before 0.30
  • 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
  • Runs on Windows, macOS, Linux, Android, iOS, and in a web browser
  • Also runs on OpenBSD, FreeBSD, NetBSD, Solaris, Haiku, IRIX, SerenityOS
  • Although still work in progresses, also runs on various consoles

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)
  • It does not support logging in with Mojang/Minecraft accounts

Note: When running from within VirtualBox, disable Mouse Integration, otherwise the camera will not work properly

Instructions

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.

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.

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)
  1. Use 'Developer Tools for Visual Studio' from Start Menu
  2. Navigate to the directory with ClassiCube's source code
  3. 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/

  1. Install MinGW-W64
  2. Use either Run Terminal from Start Menu or run mingw-w64.bat in the installation folder
  3. Navigate to the directory with ClassiCube's source code
  4. Enter gcc *.c -o ClassiCube.exe -mwindows -lwinmm -limagehlp
Using MinGW

I am assuming you used the installer from https://osdn.net/projects/mingw/

  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.
  3. Navigate to the directory with ClassiCube's source code
  4. Enter gcc *.c -o ClassiCube.exe -mwindows -lwinmm -limagehlp
Using TCC (Tiny C Compiler)

I am assuming you used tcc-0.9.27-win64-bin.zip from https://bellard.org/tcc/

  1. Extract the .zip file
  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

Compiling - Linux

Using gcc/clang

Install appropriate libs as required. For ubuntu these are: libx11-dev, libxi-dev and libgl1-mesa-dev

gcc *.c -o ClassiCube -rdynamic -lm -lpthread -lX11 -lXi -lGL -ldl

Cross compiling for Windows (32 bit):

i686-w64-mingw32-gcc *.c -o ClassiCube.exe -mwindows -lwinmm -limagehlp

Cross compiling for Windows (64 bit):

x86_64-w64-mingw32-gcc *.c -o ClassiCube.exe -mwindows -lwinmm -limagehlp

Raspberry Pi

Although the regular linux compiliation flags will work fine, to take full advantage of the hardware:

gcc *.c -o ClassiCube -DCC_BUILD_RPI -rdynamic -lm -lpthread -lX11 -lXi -lEGL -lGLESv2 -ldl

Compiling - macOS

Using gcc/clang (32 bit)

cc *.c -o ClassiCube -framework Carbon -framework AGL -framework OpenGL -framework IOKit

Using gcc/clang (64 bit)

cc *.c interop_cocoa.m -o ClassiCube -framework Cocoa -framework OpenGL -framework IOKit -lobjc

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

Import ios/CCIOS.xcodeproj project into Xcode (TODO explain more detailed)

Using command line (Xcode)

xcodebuild -sdk iphoneos -configuration Debug (TODO explain more detailed)

Compiling - other desktop OSes

FreeBSD

Install libxi, 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

OpenBSD

Install libexecinfo, curl and openal package if needed

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

NetBSD

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

DragonflyBSD

cc *.c -o ClassiCube -I /usr/local/include -L /usr/local/lib -lm -lpthread -lX11 -lXi -lGL -lexecinfo

Solaris

gcc *.c -o ClassiCube -lm -lsocket -lX11 -lXi -lGL

IRIX

Install Sgug-RSE (https://github.com/sgidevnet/sgug-rse) Install libX11, libgcc, libXau, libXdmcp, libcurl-devel, libGLU, LibGL from SGUG-RSE. Install Nekoware OpenAL (neko_openal-1.1.tardist) for Audio (Can severely impact performace due the lack of .ogg decoding on SGI hardware. Add -DCC_BUILD_NOMUSIC to the build command to exclude music). Use GCC 9.2 from SGUG-RSE shell to compile or MIPS Pro compilation (when using the irix64 plat, default by just about every system capable of running this but the O2).. If you have any issues dm me on discord at joshyfishy22.

gcc *.c -o ClassiCube -Wl,-rpath-link=/usr/lib32 -Wl,-rpath=/usr/lib32:/usr/sgug/lib32 -lX11 -lGL -lGLcore -lGLU -lpthread -Wl,--allow-shlib-undefined -DCC_BUILD_GL11

Haiku

Install openal_devel package if needed

cc *.c interop_BeOS.cpp -o ClassiCube -lm -lGL -lnetwork -lstdc++ -lbe -lgame -ltracker

BeOS

cc *.c Window_Haiku.cpp -o ClassiCube -lm -lexecinfo -lGL -lnetwork -lstdc++ -lbe -lgame -ltracker

SerenityOS

Install SDL2 port if needed

cc *.c -o ClassiCube -lgl -lSDL2

Compiling - other

Web

emcc *.c -s ALLOW_MEMORY_GROWTH=1 --js-library interop_web.js

The generated javascript file has some issues. See here for how to fix

PSP

Run make psp. You'll need pspsdk

NOTE: It is recommended that you install the precompiled pspsdk version from here

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)

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)

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)

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)

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)

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)

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)

Xbox

Run make xbox. You'll need nxdk

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)

Dreamcast

Run make dreamcast. You'll need KallistiOS

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)

Other

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

  • 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
  • libctru - Backend for 3DS
  • citro3D - Rendering backend for 3DS
  • Citra - Emulator used to test 3DS port
  • pspsdk - Backend for PSP
  • PPSSPP - Emulator used to test PSP port
  • vitasdk - Backend for PS Vita
  • Vita3K - Emulator used to test Vita port
  • libogc - Backend for Wii and GameCube
  • libfat - Filesystem backend for Wii/GC
  • Dolphin - Emulator used to test Wii/GC port
  • KallistiOS - Backend for Dreamcast
  • GLdc - Basis of rendering backend for Dreamcast
  • nullDC - Emulator used to test Dreamcast port
  • flycast - Emulator used to test Dreamcast port
  • nxdk - Backend for Xbox
  • xemu - Emulator used to test Xbox port
  • cxbx-reloaded - Emulator used to test Xbox port

Sound Credits

ClassiCube uses sounds from Freesound.org
Full credits are listed in doc/sound-credits.md

About

Custom Minecraft Classic 0.30 / ClassiCube client written in C. Ported to the Silicon graphics operating system, IRIX!!!

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • C 96.8%
  • Objective-C 1.3%
  • JavaScript 0.7%
  • Java 0.5%
  • C++ 0.3%
  • Shell 0.3%
  • Other 0.1%