Please be aware this project is highly experimental and the API will change rapidly.
Impact.js meet the world of multiplayer! Take the excellent Impact.js framework and expand your game to include multiplayer. I have seen many attempts to transform Impact.js into a multiplayer framework with little success. The main problem being the clients control the game. Impact-crater is an authoritative server meaning the server makes all the moves and the clients are merely controllers sending commands to the server. Game development is basically the same, the largest difference you will notice is the seperation of client and server code, trust me it's still simple and fun.
To get started with impact-crater you need to install the nodejs package.
yum install npm # CentOS
apt-get install nodejs # Debian
brew install nodejs # MacOS X
Next you need to install coffee script for the impact-crater command to run properly.
npm install -g coffee-script
git clone --recursive git@github.com:impact-crater/impact-crater-core.git
--- or ---
git clone git@github.com:impact-crater/impact-crater-core.git
cd impact-crater-core
git submodule update --init
Now run:
cd impact-crater-core
npm link
To make a new impact-crater project run the following:
impact-crater generate path/to/my-mp-game simple-game
This will setup the folder structure needed to use impact-crater. You should see the following structure. I will list the important files.
my-mp-game/
├── impact/
│ ├── lib/
│ │ ├── game/
│ │ ├── plugins/
│ │ │ ├── client.js - The plugins for network access
│ │ │ └── server.js
│ ├── media/
├── public/
│ └── index.ejs --------- HTML file for your game
├── server/
│ ├── config.js --------- Settings for the server
Next unzip your copy of impact.js over the path/to/my-mp-game/impact folder. If the zip file is on your desktop the command will look like this:
cd path/to/my-mp-game
unzip ~/Desktop/impact-1.23.zip
Important: Unzipping impact-1.23.zip will overwrite an important file in the template. We created a side copy at impact/lib/game/main.js.side
. You just need to copy it into place:
cp impact/lib/game/main.js.side impact/lib/game/main.js
Make sure the options in the config file are suitable for your environment.
vim server/config.js
impact-crater start path/to/my-mp-game
---- or ----
cd path/to/my-mp-game
impact-crater start
By default the port is 3000 so visit the following URL in your browser:
http://localhost:3000
and you should see a game screen. The example template will setup a very simple game using the impact-crater classes that allow for network interaction. You will see a player that you can move with WASD keys. The tree entity is just a drone that moves on its own. If you look at the code you will see that none of the movement is being generated on the client. It's receiving all the movement commands from the server. To truly see the network interaction, duplicate your current browser window and you should now see two characters on the screen. Both characters should move independently.
After installation your file structure should look like the following:
my-mp-game/
├── impact/
│ ├── lib/
│ │ ├── game/
│ │ │ ├── entities/
│ │ │ ├── levels/
│ │ │ ├── main.js
│ │ │ └── server/
│ │ │ ├── entities/
│ │ │ └── main.js
│ │ ├── impact/
│ │ ├── plugins/
│ │ └── weltmeister/
│ ├── media/
│ ├── tools/
Notice the server folder under the game folder. This is required by impact-crater to differientiate between your server and client code. As you develop your games for multiplayer you will have to start thinking of entities from two points of view, client-side and server-side.
impact-server start
command