A rewrite of CraftOS-PC (Classic) using C++ and a modified version of PUC Lua, as well as SDL for drawing.
Visit the website at https://www.craftos-pc.cc/ for more information, including documentation.
- Supported operating systems:
- Windows Vista x64 or later
- macOS 10.9.5+
- Ubuntu 18.04, 19.10, 20.04
- Arch Linux with AUR helper
- Administrator privileges
- 20 MB free space
- Download CraftOS-PC-Setup.exe from the latest release
- Follow the instructions in the setup program
- Open CraftOS-PC from the Start Menu
$ brew tap MCJack123/CraftOSPC
$ brew install --cask craftos-pc
$ open /Applications/CraftOS-PC.app
- Download CraftOS-PC.dmg from the latest release
- Drag and drop into Applications (or not)
- Double-click CraftOS-PC(.app)
$ sudo add-apt-repository ppa:jackmacwindows/ppa
$ sudo apt update
$ sudo apt install craftos-pc
$ craftos
Install the craftos-pc
package using your chosen AUR helper (e.g. yay -S craftos-pc
).
CraftOS-PC v2.2 moves the save directory to be more appropriate for each platform. Your files are not gone; they're automatically moved over before launching if the old folder is still present. You can find the computer data files at these locations:
- Windows:
%appdata%\CraftOS-PC
(C:\Users\<user>\AppData\Roaming\CraftOS-PC
) - Mac:
~/Library/Application Support/CraftOS-PC
- Linux:
$XDG_DATA_HOME/craftos-pc
or~/.local/share/craftos-pc
- CraftOS ROM package
- Compiler supporting C++14
- Linux: G++ 4.9+, make
- Mac: Xcode CLI tools (xcode-select --install)
- Windows: Visual Studio 2019
- SDL 2.0.8+ (may work on older versions on non-Linux)
- OpenSSL 1.1 (for POCO)
- POCO 1.5.0+: NetSSL & JSON libraries + dependencies
- Foundation
- Util
- Crypto
- XML
- JSON
- Net
- NetSSL
- Windows: dirent.h (install with NuGet OR vcpkg)
- Windows: vcpkg
- libpng 1.6 & png++ 0.2.7+
- Can be disabled with
--without-png
, will save as BMP instead
- Can be disabled with
- libharu/libhpdf
- Can be disabled with
--without-hpdf
,--with-html
or--with-txt
- Can be disabled with
- ncurses or PDCurses
- Can be disabled with
--without-ncurses
, will disable CLI support
- Can be disabled with
- SDL_mixer 2.0+
- Can be disabled with
--without-sdl_mixer
, will disable audio disc and speaker support - For MP3 support, libmpg123 is required
- For FLAC support, libFLAC is required
- For SF2 support, SDL_mixer must be built manually with fluidsynth support
- Can be disabled with
- The path to the ROM package can be changed with
--prefix=<path>
, which will store the ROM at<path>/share/craftos
- Standalone builds can be enabled with
--with-standalone-rom=<fs_standalone.cpp>
, with<fs_standalone.cpp>
referring to the path to the packed standalone ROM file.- The latest packed ROM can be downloaded as an artifact from the latest CI build, found by following the top link here.
You can get all of these dependencies with:
Windows:vcpkg --feature-flags=manifests install --triplet x64-windows
inside the repository directory- Temporarily not working due to a vcpkg bug (microsoft/vcpkg#15087)
Visual Studio will do this for you automatically (as long as vcpkg integration is installed)
- Windows (manual):
vcpkg install sdl2:x64-windows sdl2-mixer[dynamic-load,libflac,mpg123,libmodplug,libvorbis,opusfile,fluidsynth]:x64-windows pngpp:x64-windows libharu:x64-windows poco[netssl]:x64-windows dirent:x64-windows pdcurses:x64-windows
- Mac (Homebrew):
brew install sdl2 sdl2_mixer png++ libharu poco ncurses; git clone https://github.com/MCJack123/craftos2-rom
- Ubuntu:
sudo apt install git build-essential libsdl2-dev libsdl2-mixer-dev libhpdf-dev libpng++-dev libpoco-dev libncurses5-dev; git clone https://github.com/MCJack123/craftos2-rom
- Arch Linux:
sudo pacman -S sdl2 sdl2_mixer png++ libharu poco ncurses
Nightly builds of CraftOS-PC are available on the website. These builds are provided to allow Windows users to test new features without having to build the entire solution and dependencies. New builds are posted at midnight EST, unless there were no changes since the last build. Note that these files are just the raw executable. You must drop the file into a pre-existing CraftOS-PC install directory for it to work properly. Depending on changes made in the latest version, you may also have to download the latest ROM.
- Download Visual Studio 2019 if not already installed
git submodule update --init --recursive
- Open
CraftOS-PC 2.sln
with VS - Build solution
- Copy all files from the ROM into the same directory as the new executable (ex.
craftos2\x64\Release
) - Run solution
The solution has a few different build configurations:
- Debug: for debugging, no optimization
- Release: standard Windows application build with optimization (same as installed
CraftOS-PC.exe
) - ReleaseC: same as Release but with console support (same as installed
CraftOS-PC_console.exe
) - ReleaseStandalone: same as Release but builds a standalone build; requires
fs_standalone.cpp
to be present insrc
- Open a new Terminal window
cd
to the cloned repositorygit submodule update --init --recursive
make -C craftos2-lua macosx
./configure
make macapp
- Open the repository in a new Finder window
- Right click on CraftOS-PC.app => Show Package Contents
- Open Contents -> Resources
- Copy the ROM package inside
- Run CraftOS-PC.app
- Open a new terminal
cd
to the cloned repositorygit submodule update --init --recursive
make -C craftos2-lua linux
./configure
make
sudo mkdir /usr/local/share/craftos
- Copy the ComputerCraft ROM into
/usr/local/share/craftos/
./craftos
ComputerCraft and its assets are licensed under a copyleft license that requires anything using its code to be under the same license. Since I want CraftOS-PC 2 to remain under only the MIT license, I will not be distributing any original ComputerCraft files with the CraftOS-PC 2 source. You can still aquire the ROM separately.
Since the original ComputerCraft code is written in Java, it may seem like a better idea to create an emulator based on the original mod code. But I found that using native C++ lets the emulator run much better than if it was in Java.
1. It runs much faster One of the biggest issues I had with CraftOS-PC Classic was that it ran too slow. The Java VM adds much overhead to the program which, frankly, is unnecessary. As a native program, CraftOS-PC 2 runs 2x faster than CraftOS-Classic. The barebones nature of native code allows this speed boost to exist.
2. It uses less memory Another problem with CraftOS-PC Classic was that it used much more memory than necessary. At startup, CraftOS-PC Classic used well over 150 MB of memory, which could grow to nearly a gigabyte with extensive use. CraftOS-PC 2 only uses 40 MB at startup on Mac (10 on Windows!), and under my testing has never gone over 100 MB. This is due to C++'s manual memory management and the absence of the entire JVM.
3. It's the language Lua's written in Using the same language that Lua uses guarantees compatibility with the base API. LuaJ has many known issues that can hinder development and cause much confusion while writing programs. Writing CraftOS-PC 2 using liblua guarantees that Lua will behave as it should.
4. It doesn't rely on any single platform I wanted to keep CraftOS-PC Classic's wide compatibility in CraftOS-PC 2. Using other languages such as C# or Swift are platform-dependent and are not guaranteed to work on any platform. C++ is a basic language that's always present and maintains a portable library that works on all platforms. I've moved all platform-specific code into the platform_*.cpp files so the rest of the code can remain as independent as possible.