Engine Development
(If you know C++ and you want to help with the Isotope project, you're in
the right place)
Getting the source from CVS
- Windows...
- Anonymously...
- First please consider not being anonymous. We're
nice people. If you send us email you just might find
out that it's more productive to work with us.
Maybe you'll discover that we're already working on the
feature you want. Or maybe we'll like you so much that
we'll offer you a job working on this project. Maybe
not, but it won't hurt to try it the friendly way. If
you still want to do it anonymously, proceed to the next
step.
- Install Tortoise CVS
- Open the folder where you want the source to go.
Right-click, and click on "CVS Checkout"
- Set the Protocol to "Password server (:pserver:)
- Set the Server to "cvs.sourceforge.net"
- Set the Repository Folder to "/cvsroot/isotope"
- set the User name to "anonymous"
- set the Module to "isotope"
- Click OK. Go make yourself a sandwich, this may
take a while.
- The friendly way...
- Become a developer on the project
- Get an account on SourceForge.net
- Send mail to Mike Gashler (or another admin on the
Isotope project), introduce yourself, and ask him to
give you developer access to the Isotope project.
You can do the next few steps while waiting for his
reply.
- Install Tortoise CVS
- I got the installer for Tortoise CVS from
http://www.tortoisecvs.org/download.shtml
- Install it
- Install Putty, PuttyGen, and Pageant. (I got the
installer from
http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html.
Don't just get putty.exe, get the installer because it
installs PuttyGen and Pageant too. You can get them
all individually, but the installer is the easiest way to
go.)
- Make a key using PuttyGen. Here's how it worked
when I last did it:
- Press "Generate"
- Wiggle the mouse for a while, then enter a password
- Save the private key on your machine somewhere.
(Don't close PuttyGen yet until after you do the next
step.)
- Notify SourceForge about your key. Here's how I
did it:
- Copy the public key from the box in PuttyGen.
(It's at the top)
- Go to your account maintenance page (https://sourceforge.net/account/)
- Click on "Edit SSH Keys for Shell/CVS"
- Paste your key in the window and press "Update"
- Wait about 20 minutes for SourceForge to propagate
it. (You can do the next step while you're
waiting)
- Have Pageant serve your key. Here's how it worked
when I last did it:
- Run Pageant
- Press "Add Key"
- Point it to the private key file you saved
- Enter your password
- Press "Close" (Pageant keeps running)
- Check out the Isotope source tree
- Open the folder where you want the source tree to go
- Right-click, and click on "CVS Checkout"
- Choose "Secure Shell (:ext:)" in the Protocol
combo-box
- Enter "cvs.sourceforge.net" in the Server box (don't
include the quotes)
- Enter "/cvsroot/isotope" in the repository folder
box
- Enter your username in the User name box
- Enter "isotope" in the module box
- Hit OK. If a security alert dialog pops up, press
"Yes"
- Enter your password when it asks for it
- When it says "Success, CVS operation completed", hit
OK
- Linux...
- Anonymously...
- First please consider not being anonymous. We're
nice people. If you send us email you just might find
out that it's more productive to work with us.
Maybe you'll discover that we're already working on the
feature you want. Or maybe we'll like you so much that
we'll offer you a job working on this project. Maybe
not, but it won't hurt to try it the friendly way. If
you still want to do it anonymously, proceed to the next
step.
- The most up-to-date instructions will be on the
SourceForge project page under the CVS tab, but I'll copy
them here for convenience...
- Open a shell window and change to the folder where you
want it to go.
- cvs -d:pserver:anonymous@cvs.sourceforge.net:/cvsroot/isotope
login
- cvs -z3 -d:pserver:anonymous@cvs.sourceforge.net:/cvsroot/isotope
co -P isotope
- The friendly way...
- The most up-to-date instructions will be on the
SourceForge project page under the CVS tab. Just look
there.
- Mac OSX...
- I've never really tried getting the source from CVS on Mac.
My guess is that the Linux instructions will work just fine.
If you find out for sure, please send us mail so we can update
this information. Good luck.
Building it
- Windows...
- Visual Studio 6
- open Isotope\src\Isotope\test.dsw
- Set the active configuration to "test -- Release"
- Press F7 to start building
- Visual Studio 7
- open Isotope\src\Isotope\test.sln
- Set the active configuration to "test -- Release"
- Press Ctrl-Shift-B to start building
- Linux...
- GNU Make with G++
- cd Isotope/src/Isotope
- make opt
- KDevelop
- oops, it looks like I accidentally deleted kdevelop
project file. Well, it's easy to make another one.
KDevelop just wraps around make anyway. todo: update
these instructions after you restore the kdevelop project
file and check it in.
- Max OSX...
- I ported Isotope to Mac OSX a long time ago, but I haven't
been maintaining it so it probably doesn't even build on Mac
anymore. I never resolved all of the endian issues.
Hmm, maybe I won't bother now since Mac is moving to the Intel
platform. Well anyway, if you'd like to help us port this
thing to Mac again, we'd really appreciate it.
Code Structure
- Isotope - The game engine. This is the only module that was developed at
EduMetrics. The other modules were all take from existing open source code.
This module contains all the logic specific to Isotope game.
- Model - All the data pertaining to your character, possessions, the
map you are currently visiting, objects on the map, etc.
- Network Connections - This manages communication with the server
It is responsible for keeping the client realm in sync with the
server's realm.
- NRealmProtocol - The language used to communicate with the
server
- NRealmPacket - The base class from which all packets in the
protocol derive
- MGameClient - The model for the client
- MRealmServer - The model for the server
- MRealm - Represents a map/world/game page
- MObject - Wraps an object in the game. Since game objects
are scripted in the Gash language, this class actually wraps a Gash
object.
- MStore - Classes for storing artwork, animations, and sound
files
- MScriptEngine - The glue between Isotope game and the Gash
scripting language. This contains most of the code for calling
from C++ to Gash and from Gash to C++.
- View - All the code for drawing graphics to the screen. The
view is organized as a layered collection of ViewPorts.
- VGame - The main view port for the game
- VMainMenu - The view port for the main pop-up menu
- VServer - The view port that shows server load
- Controller - All the logic for what to do when the user clicks the
mouse, presses a key, etc.
- SDL - Simple DirectMedia Layer. This is a cross-platform library
for directly accessing video memory and input devices. It provides the
basic functionality necessary to develop a video game. It's
distributed under the LGPL license.
- GClasses - A library of generally useful C++ classes.
- GHashTable - a hash table class
- GArray - a dynamic array class
- GEZSocket - a class that makes network communication easy
- GImage - a class for representing an image
- GHttp - a class for transferring files via the http protocol
- GWidgets - classes for various GUI form objects
- etc.
- Gash - The scripting language that we use for scripting the logic of our
game page
- GashEngine - The engine that runs the Gash scripts.
- GVM - The virtual machine that interprets the scripts
- GCompiler - The compiler
- Library - An abstraction of a compiled Gash script
- GObject - The base class from which all Gash objects derive
- EClass - Represents a class in a Gash script
- EMethod - Represents a method in a Gash script
- etc.
- GashLib - A library of generic C++ functions that can be called from
Gash scripts
- GashSDL - C++ functions that can be called from Gash scripts that
call into various functions in the SDL library