Skip to content

Latest commit

 

History

History
58 lines (42 loc) · 4.88 KB

README.md

File metadata and controls

58 lines (42 loc) · 4.88 KB

gamebase

Introduction

This project is mainly the wscript file which downloads, extracts, and compiles some common C/C++ libraries for building games. It will also build your game and link it with those libraries.

But Why??

gamebase serves a few goals for GameBuilders. The most pressing was the need for a common build system a C++ game-build-a-thon. Unlike, say, Lua+LÖVE or Python+pygame, we could not just double click user submitted C++ games and expect them to run. By having a common build script that everybody must use, we can ensure most submissions would compile. We chose that accepting binaries as submissions was unacceptable because of DLL hell, OS lock-in, and other dependency issues.

This project serves another purpose. That purpose is to allow people to quickly get up and running with game development without having to fight the compiler or the libraries. This often happens with new C++ programmers that had just taken a class on it. They know how to program, but they never really had to deal with the compiler or downloading and building external libraries. It's a valuable lesson to learn, but not when just starting out and definitely not as the first 12 hours of a 24 hour game development competition.

What's in the Box

In addition to these libraries, there is an example game using Box2D and SFML. It is located in example/main.cpp.

Setup

Windows

If you already have gcc 4.8+ and Python 2.7 (not 3) installed and accessible from your PATH you are ready to go and can skip setup. Otherwise, gamebase requires you download and extract a MinGW package into the folder so that setenv.cmd works properly. I recommend this one. You'll need to extract it with 7-Zip. After that is done, double click setenv.cmd to open up a command prompt with the PATH set properly to use the compiler. You'll need to use setenv.cmd for every command prompt you wish to open for game development.

Linux

pkg-config, XRandR, X11, OpenGL, OpenAL, libjpeg, and libsndfile must be installed. This is in addition to Python 2.7 (not 3) and gcc 4.8+ in order to compile. Use your preferred package manager to get these.

OS X

XCode and the Command Line tools must be installed. Your XCode must be recent enough to support C++11.

Compile

Simply run this in a console with the game framework folder as the current working directory:

python waf configure
python waf get_deps
python waf build

The first command checks your system for the required libraries and compilers. The second command downloads and extracts various libraries for static linking (e.g. SFML, freetype, etc...). The last command needs to be redone in order to compile any changes to the project. In case you get some Python exceptions, make sure you are using Python 2. Some distros call the binary python2, which you should replace the above commands with.

Usage and Customization

Build/Run Your Game

By default, the build system will compile every file with extension cpp under the src directory. This will get compiled into build/game (build/game.exe on Windows). If you get errors about missing DLLs on windows, copy the DLL files inside of deps/sfml_src/SFML-2.1/extlibs/bin/x86 into the same folder you run the game from or any place within your PATH.

Customize

If you don't like this directory layout, you can customize things by modifying the wscript file. Look for the line starting with targets = for an array of build targets. You'll see that game globs all the files ending in cpp under src and what source files the example is from. You can add or remove whatever targets you want and where their source is located.

Adding Libraries

There is a list of libraries under the get_deps function inside of wscript. To add one, simply add a new dictionary entry to the list. The hash listed in each entry is the SHA-256 hash of the package at the given URL. The hard part is getting the library to build. All of them are different, so I can not say how. Look at the build function for several examples of building external libraries. Afer that is figured out, don't forget to add the name of the library to the array list by use = near the bottom of the wscript.