diff --git a/README.md b/README.md index b4cfe9e..1293389 100644 --- a/README.md +++ b/README.md @@ -6,3 +6,68 @@ stand in your way. The fate of your empire depends on your ability to master the economy, field a military, influence galactic politics, and learn what you can about the universe. +## What is this? +This repository contains the full source code needed to build Star Ruler 2, and +all secondary scripts, data files and assets required to run it. + +Blind Mind Studios has been inactive for a few years now, so we decided to +open-source the game as a whole and allow anyone interested in how its engine works +to tinker with it. + +## Building the Game +The Star Ruler 2.exe contained in the main folder is just a launcher. To run +the game you will need to build the binary for your platform from source. + +### Building on Windows +You will need Visual Studio 2017 to build Star Ruler 2 on windows. Simply open the +visual studio solution in source/msvc/Star Ruler 2/, and build the "Star Ruler 2" project +in either Debug or Non-Steam Release configuration. + +Please note that while the built exe ends up in the bin/win64/ directory, it expects to be +started with its working directory set to the main direcotry (where the +launcher exe is). So when debugging from visual studio, make sure the 'Working +Directory' configuration property is set to ../.../.. + +### Building on Linux +The equivalent launcher on linux is StarRuler2.sh. To build the binary files on linux, +make sure your working directory is set to the main directory (the one with StarRuler2.sh in it), +then run `make -f source/linux/Makefile compile` to compile the binary. + +Afterward, run the `StarRuler2.sh` shell script to start the game. + +Several dependencies are required to build on linux, including libpng, zlib, +GLEW, GLU, freetype2, libvorbisfile, libvorbis, libogg, libopenal, libbz2, +libXRandR, and libcurl. + + +## Differences with Commercial Version +* The music is not part of the open source release of Star Ruler 2. The data/music/ directory from the commercial + release can be copied directly into the data/ directory of an open-source build. The music will be detected and played. +* All code for accessing the SteamWorks API has been removed. The game platform abstraction layer game\_platform.h has + been kept intact, so other mod-sharing platforms could potentially be integrated into the game. +* Code for the automatic game patcher that is part of the GOG.com release is part of the repository, but the functionality + is disabled, since it relies on delta updates and will not work with modified open source versions. +* While the actual source code is probably still compatible with 32-bit platforms, project files and external dependencies for + 32-bit builds are not included in this repository. + +## FAQ +### Can I Play Multiplayer with Steam/GOG versions? +Yes. The base open source version is multiplayer-compatible with the commercial versions. If you make multiplayer-incompatible +changes to the open source version, please remember to change the MP\_VERSION identifier in scripts/definitions/version.as, +so things do not break from people with incompatible versions trying to join each other. + +### Does this have the Wake of the Heralds DLC Expansion? +Yes. The code has been modified to bypass all DLC checks and unlock it by default. The Wake of the Heralds content +is always available in the open-source version. + +### Is there a Community? +Most Star Ruler 2 community activity is centered around the [Steam Forums](https://steamcommunity.com/app/282590/discussions/) +(it is possible to post without owning the game on steam), and the [Discord Server for Rising Stars](https://discord.gg/9YyXgbh), +one of the largest SR2 mod projects. + +## Licensing +Star Ruler 2 source code is licensed as MIT, art assets are licensed as CC-BY-NC 2.0. + +Some third party code is contained in this repository as dependencies. Licenses for those projects are contained in the appropriate source folders. + +See the COPYING file for more information. diff --git a/StarRuler2.sh b/StarRuler2.sh index e119206..a94968b 100644 --- a/StarRuler2.sh +++ b/StarRuler2.sh @@ -1,21 +1,21 @@ -#!/bin/bash -#Figure out where the script is located -if [[ -L "$0" ]]; then - script_loc="$(readlink "$0")" -else - script_loc="$0" -fi -cd "$(dirname "$script_loc")" - -#Execute the right binary for this architecture -if [ `uname` == "Darwin" ]; then - chmod +x ./bin/osx64/StarRuler2.bin - DYLD_LIBRARY_PATH="./bin/osx64/:$DYLD_LIBRARY_PATH" exec ./bin/osx64/StarRuler2.bin $@ -elif [ `uname -m` = "x86_64" ]; then - chmod +x ./bin/lin64/StarRuler2.bin - LD_LIBRARY_PATH="./bin/lin64/:$LD_LIBRARY_PATH" exec ./bin/lin64/StarRuler2.bin $@ -else - chmod +x ./bin/lin32/StarRuler2.bin - LD_LIBRARY_PATH="./bin/lin32/:$LD_LIBRARY_PATH" exec ./bin/lin32/StarRuler2.bin $@ -fi; -# vim: set ff=unix: +#!/bin/bash +#Figure out where the script is located +if [[ -L "$0" ]]; then + script_loc="$(readlink "$0")" +else + script_loc="$0" +fi +cd "$(dirname "$script_loc")" + +#Execute the right binary for this architecture +if [ `uname` == "Darwin" ]; then + chmod +x ./bin/osx64/StarRuler2.bin + DYLD_LIBRARY_PATH="./bin/osx64/:$DYLD_LIBRARY_PATH" exec ./bin/osx64/StarRuler2.bin $@ +elif [ `uname -m` = "x86_64" ]; then + chmod +x ./bin/lin64/StarRuler2.bin + LD_LIBRARY_PATH="./bin/lin64/:$LD_LIBRARY_PATH" exec ./bin/lin64/StarRuler2.bin $@ +else + chmod +x ./bin/lin32/StarRuler2.bin + LD_LIBRARY_PATH="./bin/lin32/:$LD_LIBRARY_PATH" exec ./bin/lin32/StarRuler2.bin $@ +fi; +# vim: set ff=unix: diff --git a/source/game/os/driver.h b/source/game/os/driver.h index 8172167..7b36ffe 100644 --- a/source/game/os/driver.h +++ b/source/game/os/driver.h @@ -64,11 +64,12 @@ struct DriverCallbacks_2 { } //Removes a callback previously added to the list - void remove(cb func) { + /*void remove(cb func) { callbacks.remove_if([func](cb f) { return func.template target() == f.template target(); }); - } + }*/ + //Calls each callback in order, stopping if true is returned void operator()(Arg0 arg0, Arg1 arg1) { for(auto i = callbacks.begin(), end = callbacks.end(); i != end; ++i) @@ -91,11 +92,11 @@ struct DriverCallbacks_1 { } //Removes a callback previously added to the list - void remove(cb func) { + /*void remove(cb func) { callbacks.remove_if([func](cb f) { return func.template target() == f.template target(); }); - } + }*/ //Calls each callback in order, stopping if true is returned void operator()(Arg0 arg0) { for(auto i = callbacks.begin(), end = callbacks.end(); i != end; ++i) @@ -117,11 +118,11 @@ struct DriverCallbacks { } //Removes a callback previously added to the list - void remove(cb func) { + /*void remove(cb func) { callbacks.remove_if([func](cb f) { return func.template target() == f.template target(); }); - } + }*/ //Calls each callback in order, stopping if true is returned void operator()() { diff --git a/source/linux/Makefile b/source/linux/Makefile index 3b0d65f..a62b60d 100644 --- a/source/linux/Makefile +++ b/source/linux/Makefile @@ -84,11 +84,8 @@ CXXFLAGS += -I./source/libircclient/include CXXFLAGS += -I./source/util/include -I./source/network/include CXXFLAGS += -I./source/rapidjson/include -ifdef NSTEAM - CXXFLAGS += -DNSTEAM -else - CXXFLAGS += -I./source/steam -endif +NSTEAM=1 +CXXFLAGS += -DNSTEAM ifndef GCC48 CXXFLAGS += -fdiagnostics-color=auto @@ -108,8 +105,6 @@ ifeq ($(UNAME), Darwin) CXXFLAGS += -framework OpenGL -framework Cocoa -framework IOKit CXXFLAGS += -framework OpenAL - STEAMLIBDIR = ./source/osx/lib - LDFLAGS += -lcurl else ifndef DEBUG @@ -117,11 +112,6 @@ else endif LDFLAGS += -lGL -lGLU -lX11 -lXrandr -lXxf86vm -lXi -lopenal -lcurl - ifeq ($(ARCH), 32) - STEAMLIBDIR = ./source/linux/lib32 - else - STEAMLIBDIR = ./source/linux/lib64 - endif endif #Libraries @@ -129,10 +119,6 @@ LDFLAGS += -lstdc++ -lGLEW -lpng -lz -lpthread LDFLAGS += -lm -lfreetype LDFLAGS += -lvorbisfile -ifndef NSTEAM - LDFLAGS += -L$(STEAMLIBDIR) -lsteam_api -endif - LIB_FILES += $(LIBDIR)/libangelscript.a LIB_FILES += $(LIBDIR)/libglfw3.a LIB_FILES += $(LIBDIR)/libsound.a @@ -142,7 +128,8 @@ LIB_FILES += $(LIBDIR)/libos.a LIB_FILES += $(LIBDIR)/libnetwork.a LIB_FILES += $(LIBDIR)/libutil.a -ifndef DEBUG +NOCOPYLIBS=1 +ifndef NOCOPYLIBS ifeq ($(UNAME), Darwin) COPY_LIBS += lib/libGLEW.1.10.0.dylib COPY_LIBS += opt/libpng/lib/libpng16.16.dylib @@ -195,7 +182,6 @@ SOURCES = \ main/tick.cpp \ main/console.cpp \ main/save_load.cpp \ - main/steam_platform.cpp \ \ mods/mod_manager.cpp \ \ @@ -334,7 +320,6 @@ $(OBJDIR)/%.o: $(SRCDIR)/%.cpp #Complete binary compile $(BINDIR)/$(BIN): makelibs $(OBJ_FILES) $(LIB_FILES) $(COPY_LIBS) @mkdir -p $(BINDIR) - @cp $(STEAMLIBDIR)/libsteam_api.* $(BINDIR)/ @$(CC) $(CXXFLAGS) $(LDFLAGS) $(OBJ_FILES) $(LIB_FILES) -o $@ makelibs: @@ -361,14 +346,14 @@ patcher: $(LIB_FILES) @$(CC) $(CXXFLAGS) $(LDFLAGS) source/patcher/patcher/patcher.cpp $(LIB_FILES) -o $(BINDIR)/Patcher.bin version: - ./source/linux/build.sh version + bash /source/linux/build.sh version #Library builds $(LIBDIR)/libangelscript.a: - ./source/linux/build.sh $(ARCH) $(BUILDTYPE) angelscript + bash source/linux/build.sh $(ARCH) $(BUILDTYPE) angelscript $(LIBDIR)/libglfw3.a: - ./source/linux/build.sh $(ARCH) $(BUILDTYPE) glfw + bash source/linux/build.sh $(ARCH) $(BUILDTYPE) glfw #$(LIBDIR)/libbreakpad_client.a: #./source/linux/build.sh $(ARCH) $(BUILDTYPE) breakpad @@ -395,12 +380,12 @@ $(LIBDIR)/libutil.a: clean_angelscript: rm -f $(LIBDIR)/libangelscript.a angelscript: clean_angelscript - ./source/linux/build.sh $(ARCH) $(BUILDTYPE) angelscript + bash source/linux/build.sh $(ARCH) $(BUILDTYPE) angelscript clean_glfw: rm -f $(LIBDIR)/libglfw3.a glfw: - ./source/linux/build.sh $(ARCH) $(BUILDTYPE) glfw + bash source/linux/build.sh $(ARCH) $(BUILDTYPE) glfw #clean_breakpad: #rm -f $(LIBDIR)/libbreakpad_client.a