this is all very much so still in progress, don't run it cuz it'll probably crash on you, i'm still writing code to make this work, so just chill...i'll have an update soon with more info on the status of the build to let everyone know what they can do with it, but for now, just leave it alone, thanks.

brs2001 [2002-06-19 04:28:34]
this is all very much so still in progress, don't run it cuz it'll probably crash on you, i'm still writing code to make this work, so just chill...i'll have an update soon with more info on the status of the build to let everyone know what they can do with it, but for now, just leave it alone, thanks.
-Brett
Filename
client/client94/ClientApp.cpp
client/client94/ClientApp.h
client/client94/ClientEngine.cpp
client/client94/ClientEngine.h
client/client94/ClientEventDefs.h
client/client94/ClientSystemDriver.cpp
client/client94/ClientSystemDriver.h
client/client94/ClientView.h
client/client94/ConsoleWindow.cpp
client/client94/ConsoleWindow.h
client/client94/Coordinator.cpp
client/client94/Coordinator.h
client/client94/DisplayWindow.cpp
client/client94/DisplayWindow.h
client/client94/aseie.dll
client/client94/aws.dll
client/client94/ball.dll
client/client94/ballldr.dll
client/client94/bugplug.dll
client/client94/cal3d.dll
client/client94/client94.sln
client/client94/client94.vcproj
client/client94/clientaws.def
client/client94/core.h
client/client94/crossbld.dll
client/client94/csavi.dll
client/client94/csbmpimg.dll
client/client94/csconin.dll
client/client94/csconout.dll
client/client94/csddraw.dll
client/client94/csfont.dll
client/client94/csgifimg.dll
client/client94/csjpgimg.dll
client/client94/cslexan.dll
client/client94/cslua.dll
client/client94/csparser.dll
client/client94/cspngimg.dll
client/client94/cssgiimg.dll
client/client94/cssocket.dll
client/client94/cssynldr.dll
client/client94/cstgaimg.dll
client/client94/cswalimg.dll
client/client94/emit.dll
client/client94/emitldr.dll
client/client94/engine.dll
client/client94/explo.dll
client/client94/exploldr.dll
client/client94/fancycon.dll
client/client94/fire.dll
client/client94/fireldr.dll
client/client94/fontplex.dll
client/client94/fountain.dll
client/client94/fountldr.dll
client/client94/freefont.dll
client/client94/genmesh.dll
client/client94/gl3d.dll
client/client94/glwin32.dll
client/client94/gmeshldr.dll
client/client94/gtreeldr.dll
client/client94/haze.dll
client/client94/hazeldr.dll
client/client94/ie3ds.dll
client/client94/ieplex.dll
client/client94/imgplex.dll
client/client94/inf3d.dll
client/client94/iso.dll
client/client94/isoload.dll
client/client94/lib3ds-120.dll
client/client94/libjpeg.dll
client/client94/line3d.dll
client/client94/lua.dll
client/client94/lualib.dll
client/client94/main.cpp
client/client94/mballldr.dll
client/client94/md2ie.dll
client/client94/mdlie.dll
client/client94/memory.dll
client/client94/metaball.dll
client/client94/metagen.dll
client/client94/mikmod.dll
client/client94/motion.dll
client/client94/motldr.dll
client/client94/null2d.dll
client/client94/null3d.dll
client/client94/objie.dll
client/client94/odivx.dll
client/client94/ogg.dll
client/client94/perfstat.dll
client/client94/png.dll
client/client94/povie.dll
client/client94/python22_d.dll
client/client94/rain.dll
client/client94/rainldr.dll
client/client94/rapid.dll
client/client94/reporter.dll
client/client94/rlecodec.dll
client/client94/scf.cfg
client/client94/sequence.dll
client/client94/simpcon.dll
client/client94/sndaiff.dll
client/client94/sndau.dll
client/client94/sndiff.dll
client/client94/sndmod.dll
client/client94/sndmp3.dll
client/client94/sndogg.dll
client/client94/sndplex.dll
client/client94/sndrdrds3d.dll
client/client94/sndsoft.dll
client/client94/sndwav.dll
client/client94/sndwaveout.dll
client/client94/snow.dll
client/client94/snowldr.dll
client/client94/soft3d.dll
client/client94/spiral.dll
client/client94/spirldr.dll
client/client94/spr2d.dll
client/client94/spr2dldr.dll
client/client94/spr3d.dll
client/client94/spr3dldr.dll
client/client94/sprie.dll
client/client94/starldr.dll
client/client94/stars.dll
client/client94/stdrep.dll
client/client94/terrfldr.dll
client/client94/terrfunc.dll
client/client94/thing.dll
client/client94/thingldr.dll
client/client94/vfs.cfg
client/client94/vfs.dll
client/client94/vorbis.dll
client/client94/vorbisfile.dll
client/client94/xmlparse.dll
client/client94/zlib.dll
diff --git a/client/client94/ClientApp.cpp b/client/client94/ClientApp.cpp
new file mode 100644
index 0000000..c5a557a
--- /dev/null
+++ b/client/client94/ClientApp.cpp
@@ -0,0 +1,537 @@
+#include "core.h"
+#include "ClientEventDefs.h"
+#include "em/EnvironmentModeler.h"
+
+
+bool ClientHandleEvent( iEvent &event )
+{
+	if( event.Type == csevBroadcast && event.Command.Code == cscmdProcess )
+	{
+		gApp->SetupFrame();
+		return true;
+	}
+	else if( event.Type == csevBroadcast && event.Command.Code == cscmdFinalProcess)
+	{
+		gApp->FinishFrame();
+		return true;
+	}
+	else
+	{
+		return gApp->HandleEvent( event );
+	}
+}
+
+ClientApp::ClientApp( iObjectRegistry *setReg, csSkin &setSkin ): csApp( setReg, setSkin )
+{
+	//set defaults
+	object_reg = setReg;
+
+	//managers
+	plugin_mgr = NULL;
+	graphics2D = NULL;
+	graphics3D = NULL;
+	engine = NULL;
+	VFS = NULL;
+	KeyboardDriver = NULL;
+	vc = NULL;
+	FontServer = NULL;
+	ImageLoader = NULL;
+	texture_mgr = NULL;
+	modelConverter = NULL;
+
+	//menus
+	ka = NULL;
+	menuBar = NULL;
+	clientMenu = NULL;
+	connectItem = NULL;
+	disconnectItem = NULL;
+	videoConfigItem = NULL;
+	exitItem = NULL;
+	windowsMenu = NULL;
+	displayItem = NULL;
+	consoleItem = NULL;
+
+	//windowing
+	nw = NULL;
+	aws = NULL;
+	awsPrefs = NULL;
+	awsCanvas = NULL;
+
+	//config
+	configFile = CLIENT_DEFAULT_CONFIG_PATH;
+
+	//3d view
+	active = false;
+	view = NULL;
+
+	//runtime
+	mode = 0;
+}
+
+ClientApp::~ClientApp( void )
+{
+	//get all the dll's to unload
+	if( graphics2D )
+		graphics2D->DecRef();
+
+	if( graphics3D )
+		graphics3D->DecRef();
+
+	if( engine )
+		engine->DecRef();
+
+	//destroy the application
+//	csInitializer::DestroyApplication( object_reg );
+}
+
+bool ClientApp::Initialize( int argc, char *argv[] )
+{
+	//parse command line
+	parseCommandLine( argc, argv );
+
+	//init our config
+	if( !csInitializer::SetupConfigManager( object_reg, configFile ) )
+	{
+		//LOG
+		return false;
+	}
+
+	//manual load
+	if (!csInitializer::RequestPlugins (object_reg,
+		CS_REQUEST_REPORTER,
+		CS_REQUEST_REPORTERLISTENER,
+		CS_REQUEST_END))
+	{
+		return false;
+	}
+
+	//load plugin manager
+	plugin_mgr = CS_QUERY_REGISTRY( object_reg, iPluginManager );
+	if( !plugin_mgr )
+	{
+		//LOG
+		return false;
+	}
+
+	//get the VFS
+	VFS = CS_QUERY_REGISTRY( object_reg, iVFS );
+	if( !VFS )
+	{
+		//LOG
+		return false;
+	}
+
+	//setup 3D graphics
+	graphics3D = CS_QUERY_REGISTRY( object_reg, iGraphics3D );
+	if( !graphics3D )
+	{
+		//LOG
+		return false;
+	}
+
+	//setup 2D graphics
+	graphics2D = CS_QUERY_REGISTRY( object_reg, iGraphics2D );
+	if( !graphics2D )
+	{
+		//LOG
+		return false;
+	}
+
+	//get the engine
+	engine = CS_QUERY_REGISTRY( object_reg, iEngine );
+	if( !engine )
+	{
+		//LOG
+		return false;
+	}
+
+	//get the font server
+	FontServer = CS_QUERY_REGISTRY( object_reg, iFontServer );
+	if( !FontServer )
+	{
+		//LOG
+		return false;
+	}
+
+	//image loader
+	ImageLoader = CS_QUERY_REGISTRY( object_reg, iImageIO );
+	if( !ImageLoader )
+	{
+		//LOG
+		return false;
+	}
+
+	//load keyboard driver
+	KeyboardDriver = CS_QUERY_REGISTRY( object_reg, iKeyboardDriver );
+	if( !KeyboardDriver )
+	{
+		//LOG
+		return false;
+	}
+
+	//load the virtual clock
+	vc = CS_QUERY_REGISTRY( object_reg, iVirtualClock );
+	if( !vc )
+	{
+		//LOG
+		return false;
+	}
+
+	//load the loader =)
+	loader = CS_QUERY_REGISTRY( object_reg, iLoader );
+	if( !loader )
+	{
+		//LOG
+		return false;
+	}
+
+	// Find the model converter plugin
+	modelConverter = CS_QUERY_REGISTRY( object_reg, iModelConverter );
+	if( !modelConverter )
+	{
+		//LOG
+		return false;
+	}
+
+	//load the cross builder
+	crossBuilder = CS_QUERY_REGISTRY( object_reg, iCrossBuilder );
+	if( !crossBuilder )
+	{
+		//LOG
+		return false;
+	}
+
+	//setup the native window
+	nw = graphics2D->GetNativeWindow();
+	if( nw == NULL )
+	{
+		//LOG
+		return false;
+	}
+
+	nw->SetTitle(CLIENT_NATIVE_WINDOW_TITLE);
+
+	//open the application
+	if( !csInitializer::OpenApplication( object_reg ) )
+	{
+		//LOG
+		return false;
+	}
+
+	//init the base component
+	if( !csApp::Initialize() )
+	{
+		//LOG
+		return false;
+	}
+
+	//get the texture manager
+	texture_mgr = graphics3D->GetTextureManager();
+
+	//set the default palette
+	texture_mgr->SetPalette();
+
+	//init aws
+	aws = CS_LOAD_PLUGIN( plugin_mgr, "crystalspace.window.alternatemanager", iAws );
+	if( !aws )
+	{
+		//LOG
+		return false;
+	}
+
+	awsCanvas = aws->CreateCustomCanvas( graphics2D, graphics3D );
+	aws->SetFlag( AWSF_AlwaysRedrawWindows );
+	aws->SetCanvas( awsCanvas );
+
+	awsPrefs = aws->GetPrefMgr();
+
+	if( !awsPrefs->Load(CLIENT_DEFAULT_AWS_DEFS) )
+	{
+		//LOG
+		return false;
+	}
+
+	awsPrefs->SelectDefaultSkin("Normal Windows");
+
+	//load a random texture
+	loader->LoadTexture ("stone", "/lib/stdtex/misty.jpg");
+
+	//init the camera
+	InitCamera();
+
+	//init engine
+	ClientEngine::initialize( view );
+
+	//create windows
+	InitWindows();
+
+	//create menus
+	InitMenus();
+
+	//init local
+	EnvironmentModeler::initialize();
+
+	//start threads
+
+
+	//prepare the engine
+	engine->Prepare();
+
+	//register event handler now once everything's ready
+	if( !csInitializer::SetupEventHandler( object_reg, ClientHandleEvent ) )
+	{
+		//LOG
+		return false;
+	}
+
+	return true;
+}
+
+void ClientApp::InitCamera( void )
+{
+	//turn of light caching
+	engine->SetLightingCacheMode( false );
+
+	//set ambient light
+	engine->SetAmbientLight(csColor(0.3, 0.3, 0.3));
+
+	view = new csView (engine, graphics3D);
+	//view->SetRectangle( 0, 0, 320, 240 );
+}
+
+void ClientApp::InitMenus( void )
+{
+	//set it to single buffering, much faster
+	GetG2D()->DoubleBuffer( false );
+
+	//setup keyboard accelerators
+	ka = new csKeyboardAccelerator( this );
+
+	//setup the menu bar
+	menuBar = new csMenu( this, csmfsBar, 0 );
+
+	//client menu
+	clientMenu = new csMenu( NULL );
+
+	new csMenuItem( menuBar, "~Client", clientMenu );
+	connectItem = new csMenuItem( clientMenu, "~Connect", CLIENT_MENU_CONNECT );
+	disconnectItem = new csMenuItem( clientMenu, "~Disconnect", CLIENT_MENU_DISCONNECT );
+	new csMenuItem( clientMenu );
+	videoConfigItem = new csMenuItem( clientMenu, "~Video Config", CLIENT_MENU_VIDEO_CONFIG );
+	new csMenuItem( clientMenu );
+	exitItem = new csMenuItem( clientMenu, "~Exit", CLIENT_MENU_EXIT );
+
+	//windows menu
+	windowsMenu = new csMenu( NULL );
+
+	new csMenuItem( menuBar, "~Windows", windowsMenu );
+	displayItem = new csMenuItem( windowsMenu, "~Display", CLIENT_MENU_DISPLAY );
+	consoleItem = new csMenuItem( windowsMenu, "~Console", CLIENT_MENU_CONSOLE );
+
+	//make the menu big
+	menuBar->SetRect( 0, 0, graphics2D->GetWidth(), CLIENT_MENU_HEIGHT );
+}
+
+void ClientApp::InitWindows( void )
+{
+	//display window
+	display = new DisplayWindow( aws, view, graphics2D );
+	display->Move( 160, CLIENT_MENU_HEIGHT+2 );
+	display->Show();
+}
+
+void ClientApp::Start( void )
+{
+	//start the client loop
+	csDefaultRunLoop( object_reg );
+}
+
+void ClientApp::ShutDown( void )
+{
+	//stop all threads
+
+	//shutdown local
+	EnvironmentModeler::shutdown();
+
+	//close the program
+	csApp::ShutDown();
+}
+
+void ClientApp::SetMode( int theMode )
+{
+	mode = theMode;
+}
+
+int ClientApp::GetMode( void )
+{
+	return mode;
+}
+
+void ClientApp::Start3D( void )
+{
+	active = false;
+}
+
+void ClientApp::Stop3D( void )
+{
+	active = true;
+}
+
+void ClientApp::SetupFrame( void )
+{
+	csTicks elapsed_time = vc->GetElapsedTicks ();
+
+	// Now rotate the camera according to keyboard state
+	float speed = (elapsed_time / 1000.0) * (0.03 * 20)*2;
+
+	//handle inputs
+	iCamera* c = view->GetCamera();
+	if (KeyboardDriver->GetKeyState (CSKEY_RIGHT))
+		c->GetTransform ().RotateThis (CS_VEC_ROT_RIGHT, speed);
+	if (KeyboardDriver->GetKeyState (CSKEY_LEFT))
+		c->GetTransform ().RotateThis (CS_VEC_ROT_LEFT, speed);
+	if (KeyboardDriver->GetKeyState (CSKEY_PGUP))
+		c->GetTransform ().RotateThis (CS_VEC_TILT_UP, speed);
+	if (KeyboardDriver->GetKeyState (CSKEY_PGDN))
+		c->GetTransform ().RotateThis (CS_VEC_TILT_DOWN, speed);
+	if (KeyboardDriver->GetKeyState (CSKEY_UP))
+		c->Move(CS_VEC_FORWARD * 4 * speed);
+	if (KeyboardDriver->GetKeyState (CSKEY_DOWN))
+		c->Move(CS_VEC_BACKWARD * 4 * speed);
+
+	//do 2d drawing
+	if( !graphics3D->BeginDraw( CSDRAW_2DGRAPHICS ) )
+		return;
+
+	//clear everything
+	graphics2D->DrawBox( 0, CLIENT_MENU_HEIGHT+2, graphics2D->GetWidth(), graphics2D->GetHeight(), 0x444444 );
+
+	//draw csws stuff
+ 	Redraw();
+
+	//draw windows
+	display->Draw();
+
+	//redraw aws
+	aws->Redraw();
+	aws->Print(graphics3D);
+}
+
+void ClientApp::FinishFrame( void )
+{
+	//push it out to the screen
+	graphics3D->FinishDraw();
+	graphics3D->Print( NULL );
+
+	//invalidate the menu
+	menuBar->Invalidate( true );
+}
+
+iGraphics2D *ClientApp::GetG2D( void )
+{
+	return graphics2D;
+}
+
+iGraphics3D *ClientApp::GetG3D( void )
+{
+	return graphics3D;
+}
+
+iAws *ClientApp::GetAWS( void )
+{
+	return aws;
+}
+
+bool ClientApp::LoadModel( char *file, char *name )
+{
+	iDataBuffer *buf;
+	iModelData *model;
+	iMeshFactoryWrapper *wrap;
+	iMaterialWrapper *defaultMaterial;
+
+	//read in the file
+	buf = VFS->ReadFile( file );
+	if( !buf )
+		return false;
+
+	//load the converter
+	model = modelConverter->Load( buf->GetUint8(), (uint32) buf->GetSize() );
+
+	//clear the buffer
+	buf->DecRef();
+
+	//make it all into one big blob
+	csModelDataTools::SplitObjectsByMaterial( model );
+	csModelDataTools::MergeObjects( model, false );
+
+	//make the sprite factory
+	wrap = crossBuilder->BuildSpriteFactoryHierarchy( model, engine, defaultMaterial );
+
+	//clear the model data
+	model->DecRef();
+
+	//set the name
+	wrap->QueryObject()->SetName( name );
+
+	return true;
+}
+
+bool ClientApp::HandleEvent( iEvent &event )
+{
+	//do interface handling
+	if( aws->HandleEvent( event ) )
+		return true;
+
+	if( csApp::HandleEvent( event ) )
+		return true;
+
+	//find another handler
+	switch( event.Type )
+	{
+		case csevKeyDown:
+			if( event.Key.Char == 'a' )
+			{
+				if( !active )
+				{
+					active = true;
+					EnvironmentModeler::placeRoom( 100, Coords( 100, 50, 10 ), 100 );
+					EnvironmentModeler::setCamera( 100, Coords( 0, 0, 0 ) );
+					view->GetCamera()->GetTransform().LookAt( csVector3( 0, 0, 1 ), csVector3( 0, 1, 0 ) );
+					EnvironmentModeler::placeObject( 200, 100, Coords( 2, 2, 2 ), Coords(20, 20, 5), Coords(0, 0, 0), 200 );
+				}
+			}
+			break;
+
+		case csevCommand:
+			//check the upper 8 bits
+			switch( ( event.Command.Code & 0xFF000000 ) )
+			{
+				case CLIENT_MENU_EVENT:
+					switch( event.Command.Code )
+					{
+						case CLIENT_MENU_EXIT:
+							ShutDown();
+							return true;
+					}
+					return false;
+
+				case CLIENT_DISPLAY_WINDOW_EVENT:
+					return display->HandleEvent( event );
+
+				case CLIENT_CONSOLE_WINDOW_EVENT:
+					//return console->HandleEvent( event );
+					break;
+
+				default:
+					break;
+			}
+			break;
+	}
+
+	return false;
+}
+
+void ClientApp::parseCommandLine( int argc, char *argv[] )
+{
+
+}
\ No newline at end of file
diff --git a/client/client94/ClientApp.h b/client/client94/ClientApp.h
new file mode 100644
index 0000000..aa3252f
--- /dev/null
+++ b/client/client94/ClientApp.h
@@ -0,0 +1,91 @@
+#ifndef __CLIENT_APP_H__
+#define __CLIENT_APP_H__
+
+//dependencies
+#include "DisplayWindow.h"
+#include "ConsoleWindow.h"
+
+//functions
+bool ClientHandleEvent( iEvent &event );
+
+//declaration
+class ClientApp: public csApp
+{
+	public:
+		ClientApp( iObjectRegistry *setReg, csSkin &setSkin );
+		virtual ~ClientApp( void );
+
+		bool Initialize( int argc, char *argv[] );
+
+		void InitCamera( void );
+		void InitWindows( void );
+		void InitMenus( void );
+
+		void Start( void );
+		void ShutDown( void );
+
+		void SetMode( int theMode );
+		int GetMode( void );
+
+		void Start3D( void );
+		void Stop3D( void );
+
+		void SetupFrame( void );
+		void FinishFrame( void );
+
+		iGraphics2D *GetG2D( void );
+		iGraphics3D *GetG3D( void );
+		iAws *GetAWS( void );
+
+		bool LoadModel( char *file, char *name );
+
+		bool HandleEvent( iEvent &event );
+
+	private:
+		void parseCommandLine( int argc, char *argv[] );
+
+		//flow control
+		bool active;
+
+		//windows
+		DisplayWindow *display;
+		ConsoleWindow *console;
+
+		//menus
+		csKeyboardAccelerator *ka;
+		csMenu *menuBar;
+		csMenu *clientMenu;
+		csMenuItem *connectItem;
+		csMenuItem *disconnectItem;
+		csMenuItem *videoConfigItem;
+		csMenuItem *exitItem;
+		csMenu *windowsMenu;
+		csMenuItem *displayItem;
+		csMenuItem *consoleItem;
+
+		//windowing
+		iNativeWindow *nw;
+		iAws *aws;
+		iAwsPrefManager *awsPrefs;
+		iAwsCanvas *awsCanvas;
+
+		//managers
+		iTextureManager* texture_mgr;
+		iGraphics2D *graphics2D;
+		iGraphics3D *graphics3D;
+		iEngine *engine;
+		iLoader *loader;
+		iModelConverter *modelConverter;
+		iCrossBuilder *crossBuilder;
+
+		//config
+		char *configFile;
+
+		//view
+		csView *view;
+
+		//runtime
+		int mode;
+};
+
+#endif
\ No newline at end of file
diff --git a/client/client94/ClientEngine.cpp b/client/client94/ClientEngine.cpp
new file mode 100644
index 0000000..1d30f1d
--- /dev/null
+++ b/client/client94/ClientEngine.cpp
@@ -0,0 +1,369 @@
+#include "core.h"
+
+
+csView *ClientEngine::view = NULL;
+iSector *ClientEngine::defaultRoom = NULL;
+iMeshObjectFactory *ClientEngine::defaultFactory = NULL;
+iEngine *ClientEngine::engine = NULL;
+
+
+void ClientEngine::initialize( csView *setView )
+{
+	iMeshObjectType *t;
+
+	//set defaults
+	view = setView;
+	engine = view->GetEngine();
+
+	//get a meshobject type
+	t = engine->GetThingType();
+
+	//create the factory
+	defaultFactory = t->NewFactory();
+
+	//create an empty starting room
+	defaultRoom = engine->CreateSector( "default" );
+
+	view->GetCamera()->SetSector( defaultRoom );
+}
+
+void ClientEngine::addRoom( EMRoom *room )
+{
+	char buff[50];
+	iSector *tempSector;
+	iMeshWrapper *wrap;
+	iMeshFactoryWrapper *factory;
+	iThingState *tempState;
+	iPolygon3D* p;
+	csVector3 coords[8];
+	Coords dimensions;
+	iMaterialWrapper* tm = engine->GetMaterialList()->FindByName("stone");
+	iStatLight* light;
+
+	//make it a string
+	sprintf( buff, "%d", room->getID() );
+
+	//create a new sector with the room id
+	tempSector = engine->CreateSector( buff );
+
+	//format the model string
+	sprintf( buff, "%d", room->getModel()->getID() );
+
+	//get dimensions
+	dimensions = room->getDimensions();
+
+	//get the factory
+	factory = engine->GetMeshFactories()->FindByName( buff );
+	if( factory )
+	{
+		//now put in the model
+		wrap = engine->CreateMeshWrapper( factory, buff, tempSector );
+
+		wrap->DecRef();
+	}
+	else
+	{
+		//model's not ready, so we'll make the proxy instead
+		wrap = engine->CreateSectorWallsMesh( tempSector, "walls" );
+
+		tempState = SCF_QUERY_INTERFACE( wrap->GetMeshObject(), iThingState );
+
+		//setup coords
+		coords[0].Set( dimensions.x, 0, dimensions.y );
+		coords[1].Set( dimensions.x, 0, 0 );
+		coords[2].Set( 0, 0, 0 );
+		coords[3].Set( 0, 0, dimensions.y );
+
+		coords[4].Set( dimensions.x, dimensions.z, dimensions.y );
+		coords[5].Set( dimensions.x, dimensions.z, 0 );
+		coords[6].Set( 0, dimensions.z, 0 );
+		coords[7].Set( 0, dimensions.z, dimensions.y );
+
+		//floor
+		p = tempState->CreatePolygon();
+		p->SetMaterial(tm);
+		p->CreateVertex( coords[0] );
+		p->CreateVertex( coords[1] );
+		p->CreateVertex( coords[2] );
+		p->CreateVertex( coords[3] );
+		p->SetTextureSpace( p->GetVertex (0), p->GetVertex (1), 3 );
+
+		//ceiling
+		p = tempState->CreatePolygon();
+		p->SetMaterial(tm);
+		p->CreateVertex( coords[7] );
+		p->CreateVertex( coords[6] );
+		p->CreateVertex( coords[5] );
+		p->CreateVertex( coords[4] );
+		p->SetTextureSpace( p->GetVertex (0), p->GetVertex (1), 3 );
+
+		//left wall
+		p = tempState->CreatePolygon();
+		p->SetMaterial(tm);
+		p->CreateVertex( coords[2] );
+		p->CreateVertex( coords[6] );
+		p->CreateVertex( coords[7] );
+		p->CreateVertex( coords[3] );
+		p->SetTextureSpace( p->GetVertex (0), p->GetVertex (1), 3 );
+
+		//right wall
+		p = tempState->CreatePolygon();
+		p->SetMaterial(tm);
+		p->CreateVertex( coords[0] );
+		p->CreateVertex( coords[4] );
+		p->CreateVertex( coords[5] );
+		p->CreateVertex( coords[1] );
+		p->SetTextureSpace( p->GetVertex (0), p->GetVertex (1), 3 );
+
+		//front wall
+		p = tempState->CreatePolygon();
+		p->SetMaterial(tm);
+		p->CreateVertex( coords[3] );
+		p->CreateVertex( coords[7] );
+		p->CreateVertex( coords[4] );
+		p->CreateVertex( coords[0] );
+		p->SetTextureSpace( p->GetVertex (0), p->GetVertex (1), 3 );
+
+		//back wall
+		p = tempState->CreatePolygon();
+		p->SetMaterial(tm);
+		p->CreateVertex( coords[1] );
+		p->CreateVertex( coords[5] );
+		p->CreateVertex( coords[6] );
+		p->CreateVertex( coords[2] );
+		p->SetTextureSpace( p->GetVertex (0), p->GetVertex (1), 3 );
+
+		wrap->DeferUpdateLighting( CS_NLIGHT_STATIC|CS_NLIGHT_DYNAMIC, 10 );
+
+		//get rid of our references
+		tempState->DecRef();
+		wrap->DecRef();
+	}
+
+	//setup lights
+	light = engine->CreateLight( NULL, csVector3( 5, 5, 5 ),
+		20, csColor( 1, 0, 0 ), false );
+	tempSector->GetLights()->Add( light->QueryLight() );
+	light->DecRef();
+
+	//shine lights
+	tempSector->ShineLights();
+
+	//prepare new meshes
+	engine->PrepareMeshes();
+}
+
+void ClientEngine::addDoor( EMDoor *door )
+{
+
+}
+
+void ClientEngine::addObject( EMObject *object )
+{
+	char buff[50];
+	iSector *sector;
+	EMRoom *room;
+	iMeshWrapper *wrap;
+	iMeshFactoryWrapper *factory;
+	iThingState *tempState;
+	iPolygon3D* p;
+	csVector3 coords[8];
+	Coords dimensions;
+	Coords pos;
+	iMaterialWrapper* tm = engine->GetMaterialList()->FindByName("stone");
+
+	//get the room
+	room = object->getRoom();
+
+	//make it a string
+	sprintf( buff, "%d", room->getID() );
+
+	//find the sector that this object should be in
+	sector = engine->FindSector( buff );
+
+	//format the model string
+	sprintf( buff, "%d", object->getModel()->getID() );
+
+	//get dimensions/position
+	dimensions = object->getDimensions();
+	pos = object->getRoomCoords();
+
+	//get the factory
+	factory = engine->GetMeshFactories()->FindByName( buff );
+	if( factory )
+	{
+		//now put in the model
+		//wrap = engine->CreateMeshWrapper( factory, buff, tempSector );
+
+		//wrap->DecRef();
+	}
+	else
+	{
+		//model's not ready, so we'll make the proxy instead
+		sprintf( buff, "%d", object->getID() );
+
+		//make the wrapper object
+		wrap = engine->CreateMeshWrapper( defaultFactory->NewInstance(), buff, sector );
+
+		tempState = SCF_QUERY_INTERFACE( wrap->GetMeshObject(), iThingState );
+		tempState->SetMovingOption( CS_THING_MOVE_OFTEN );
+
+		//setup coords
+		coords[0].Set( dimensions.x/2, -dimensions.z/2, dimensions.y/2 );
+		coords[1].Set( dimensions.x/2, -dimensions.z/2, -dimensions.y/2 );
+		coords[2].Set( -dimensions.x/2, -dimensions.z/2, -dimensions.y/2 );
+		coords[3].Set( -dimensions.x/2, -dimensions.z/2, dimensions.y/2 );
+
+		coords[4].Set( dimensions.x/2, dimensions.z/2, dimensions.y/2 );
+		coords[5].Set( dimensions.x/2, dimensions.z/2, -dimensions.y/2 );
+		coords[6].Set( -dimensions.x/2, dimensions.z/2, -dimensions.y/2 );
+		coords[7].Set( -dimensions.x/2, dimensions.z/2, dimensions.y/2 );
+
+		//floor
+		p = tempState->CreatePolygon();
+		p->SetMaterial(tm);
+		p->CreateVertex( coords[3] );
+		p->CreateVertex( coords[2] );
+		p->CreateVertex( coords[1] );
+		p->CreateVertex( coords[0] );
+		p->SetTextureSpace( p->GetVertex (0), p->GetVertex (1), 3 );
+
+		//ceiling
+		p = tempState->CreatePolygon();
+		p->SetMaterial(tm);
+		p->CreateVertex( coords[4] );
+		p->CreateVertex( coords[5] );
+		p->CreateVertex( coords[6] );
+		p->CreateVertex( coords[7] );
+		p->SetTextureSpace( p->GetVertex (0), p->GetVertex (1), 3 );
+
+		//left wall
+		p = tempState->CreatePolygon();
+		p->SetMaterial(tm);
+		p->CreateVertex( coords[3] );
+		p->CreateVertex( coords[7] );
+		p->CreateVertex( coords[6] );
+		p->CreateVertex( coords[2] );
+		p->SetTextureSpace( p->GetVertex (0), p->GetVertex (1), 3 );
+
+		//right wall
+		p = tempState->CreatePolygon();
+		p->SetMaterial(tm);
+		p->CreateVertex( coords[1] );
+		p->CreateVertex( coords[5] );
+		p->CreateVertex( coords[4] );
+		p->CreateVertex( coords[0] );
+		p->SetTextureSpace( p->GetVertex (0), p->GetVertex (1), 3 );
+
+		//front wall
+		p = tempState->CreatePolygon();
+		p->SetMaterial(tm);
+		p->CreateVertex( coords[0] );
+		p->CreateVertex( coords[4] );
+		p->CreateVertex( coords[7] );
+		p->CreateVertex( coords[3] );
+		p->SetTextureSpace( p->GetVertex (0), p->GetVertex (1), 3 );
+
+		//back wall
+		p = tempState->CreatePolygon();
+		p->SetMaterial(tm);
+		p->CreateVertex( coords[2] );
+		p->CreateVertex( coords[6] );
+		p->CreateVertex( coords[5] );
+		p->CreateVertex( coords[1] );
+		p->SetTextureSpace( p->GetVertex (0), p->GetVertex (1), 3 );
+
+		//set position
+		wrap->GetMovable()->SetPosition( csVector3( 0, 5, 0 ) );
+		wrap->GetMovable()->UpdateMove();
+		wrap->DeferUpdateLighting( CS_NLIGHT_STATIC|CS_NLIGHT_DYNAMIC, 10 );
+
+		//get rid of our references
+		tempState->DecRef();
+		wrap->DecRef();
+	}
+
+	//prepare new meshes
+	engine->PrepareMeshes();
+}
+
+void ClientEngine::addAvatar( EMAvatar *avatar )
+{
+
+}
+
+void ClientEngine::setCamera( float x, float y, float z )
+{
+	iCamera *camera;
+
+	camera = view->GetCamera();
+
+	camera->GetTransform().SetOrigin( csVector3( x, y, z ) );
+}
+
+void ClientEngine::offsetCamera( float x, float y, float z )
+{
+	iCamera *camera;
+
+	camera = view->GetCamera();
+
+	camera->Move( csVector3( x, y, z ) );
+}
+
+void ClientEngine::setCameraRotate( float x, float y, float z )
+{
+	iCamera *camera;
+
+	camera = view->GetCamera();
+
+}
+
+void ClientEngine::offsetCameraRotate( float x, float y, float z )
+{
+	iCamera *camera;
+
+	camera = view->GetCamera();
+
+	camera->GetTransform().RotateThis( csVector3( 1, 0, 0 ), x );
+	camera->GetTransform().RotateThis( csVector3( 0, 1, 0 ), y );
+	camera->GetTransform().RotateThis( csVector3( 0, 0, 1 ), z );
+}
+
+void ClientEngine::setCameraFocus( float x, float y, float z )
+{
+	iCamera *camera;
+
+	camera = view->GetCamera();
+
+	camera->GetTransform().LookAt( csVector3( x, y, z ), csVector3( 0, 1, 0 ) );
+}
+
+void ClientEngine::moveToRoom( EMRoom *room, float x, float y, float z )
+{
+	char buff[50];
+	iSector *tempSector;
+
+	//make the sector name
+	sprintf( buff, "%d", room->getID() );
+
+	//get the sector
+	tempSector = engine->GetSectors()->FindByName( buff );
+
+	//invalid
+	if( tempSector == NULL )
+	{
+		//LOG
+		return;
+	}
+
+	//change rooms
+	view->GetCamera()->SetSector( tempSector );
+
+	//move the camera
+	setCamera( x, y, z );
+}
+
+void ClientEngine::flush( void )
+{
+
+}
\ No newline at end of file
diff --git a/client/client94/ClientEngine.h b/client/client94/ClientEngine.h
new file mode 100644
index 0000000..3940dde
--- /dev/null
+++ b/client/client94/ClientEngine.h
@@ -0,0 +1,34 @@
+#ifndef __CLIENT_ENGINE_H__
+#define __CLIENT_ENGINE_H__
+
+//dependencies
+#include "em/EnvironmentModeler.h"
+
+class ClientEngine
+{
+	public:
+		static void initialize( csView *setView );
+
+		static void addRoom( EMRoom *room );
+		static void addDoor( EMDoor *door );
+		static void addObject( EMObject *object );
+		static void addAvatar( EMAvatar *avatar );
+
+		static void setCamera( float x, float y, float z );
+		static void offsetCamera( float x, float y, float z );
+		static void setCameraRotate( float x, float y, float z );
+		static void offsetCameraRotate( float x, float y, float z );
+		static void setCameraFocus( float x, float y, float z );
+
+		static void moveToRoom( EMRoom *room, float x, float y, float z );
+
+		static void flush( void );
+
+	private:
+		static csView *view;
+		static iEngine *engine;
+		static iSector *defaultRoom;
+		static iMeshObjectFactory *defaultFactory;
+};
+
+#endif
\ No newline at end of file
diff --git a/client/client94/ClientEventDefs.h b/client/client94/ClientEventDefs.h
new file mode 100644
index 0000000..d538645
--- /dev/null
+++ b/client/client94/ClientEventDefs.h
@@ -0,0 +1,19 @@
+#ifndef __CLIENT_EVENTS_DEFS_H__
+#define __CLIENT_EVENTS_DEFS_H__
+
+//window event masks
+#define CLIENT_MENU_EVENT				0x01000000
+#define CLIENT_CONSOLE_WINDOW_EVENT		0x02000000
+#define CLIENT_DISPLAY_WINDOW_EVENT		0x03000000
+
+//client menu
+#define CLIENT_MENU_CONNECT				(CLIENT_MENU_EVENT + 1)
+#define CLIENT_MENU_DISCONNECT			(CLIENT_MENU_EVENT + 2)
+#define CLIENT_MENU_VIDEO_CONFIG		(CLIENT_MENU_EVENT + 3)
+#define CLIENT_MENU_EXIT				(CLIENT_MENU_EVENT + 4)
+
+//windows menu
+#define CLIENT_MENU_DISPLAY				(CLIENT_MENU_EVENT + 5)
+#define CLIENT_MENU_CONSOLE				(CLIENT_MENU_EVENT + 6)
+
+#endif
\ No newline at end of file
diff --git a/client/client94/ClientSystemDriver.cpp b/client/client94/ClientSystemDriver.cpp
new file mode 100644
index 0000000..daa760d
--- /dev/null
+++ b/client/client94/ClientSystemDriver.cpp
@@ -0,0 +1,104 @@
+#include "core.h"
+
+
+ClientSystemDriver::ClientSystemDriver( void )
+{
+	graphics2D = NULL;
+	graphics3D = NULL;
+}
+
+ClientSystemDriver::~ClientSystemDriver( void )
+{
+
+}
+
+bool ClientSystemDriver::Initialize( int argc, char *argv[], char *configFile, iObjectRegistry *setReg )
+{
+	iConfigManager* Config;
+	char *name;
+
+	//set the registry
+	object_reg = setReg;
+
+	//init our config
+	if( !csInitializer::SetupConfigManager( object_reg, configFile ) )
+	{
+		//LOG
+		return false;
+	}
+
+	//manual load
+	if (!csInitializer::RequestPlugins (object_reg,
+  		CS_REQUEST_VFS,
+		CS_REQUEST_SOFTWARE3D,
+		CS_REQUEST_ENGINE,
+		CS_REQUEST_REPORTER,
+		CS_REQUEST_REPORTERLISTENER,
+		CS_REQUEST_END))
+	{
+		return false;
+	}
+
+	//check our config
+	Config = CS_QUERY_REGISTRY (object_reg, iConfigManager);
+	if( !Config )
+	{
+		//LOG
+		return false;
+	}
+
+	name = (char *) Config->GetStr("System.ApplicationID");
+
+	//setup the event handler
+	if( !csInitializer::SetupEventHandler( object_reg, ClientHandleEvent ) )
+	{
+		//LOG
+		return false;
+	}
+
+	//get the VFS
+	vfs = CS_QUERY_REGISTRY( object_reg, iVFS );
+	if( !vfs )
+	{
+		//LOG
+		return false;
+	}
+
+	//setup 3D graphics
+	graphics3D = CS_QUERY_REGISTRY( object_reg, iGraphics3D );
+	if( !graphics3D )
+	{
+		//LOG
+		return false;
+	}
+
+	//setup 2D graphics
+	graphics2D = CS_QUERY_REGISTRY( object_reg, iGraphics2D );
+	if( !graphics2D )
+	{
+		//LOG
+		return false;
+	}
+
+	//get the engine
+	engine = CS_QUERY_REGISTRY( object_reg, iEngine );
+	if( !engine )
+	{
+		//LOG
+		return false;
+	}
+
+
+	//setup the native window
+	nw = graphics2D->GetNativeWindow();
+	if( nw == NULL )
+	{
+		//LOG
+		return false;
+	}
+
+	nw->SetTitle(CLIENT_NATIVE_WINDOW_TITLE);
+
+	//no errors
+	return true;
+}
\ No newline at end of file
diff --git a/client/client94/ClientSystemDriver.h b/client/client94/ClientSystemDriver.h
new file mode 100644
index 0000000..2697f61
--- /dev/null
+++ b/client/client94/ClientSystemDriver.h
@@ -0,0 +1,23 @@
+#ifndef __CLIENT_SYSTEM_DRIVER_H__
+#define __CLIENT_SYSTEM_DRIVER_H__
+
+class ClientSystemDriver
+{
+	public:
+		ClientSystemDriver( void );
+		~ClientSystemDriver( void );
+
+		bool Initialize( int argc, char *argv[], char *configFile, iObjectRegistry *setReg );
+
+	private:
+		iObjectRegistry *object_reg;
+
+		//graphics
+		iGraphics2D *graphics2D;
+		iGraphics3D *graphics3D;
+		iEngine *engine;
+		iVFS *vfs;
+
+};
+
+#endif
\ No newline at end of file
diff --git a/client/client94/ClientView.h b/client/client94/ClientView.h
new file mode 100644
index 0000000..e69de29
diff --git a/client/client94/ConsoleWindow.cpp b/client/client94/ConsoleWindow.cpp
new file mode 100644
index 0000000..824cc5b
--- /dev/null
+++ b/client/client94/ConsoleWindow.cpp
@@ -0,0 +1,36 @@
+#include "core.h"
+
+
+ConsoleWindow::ConsoleWindow( iAws *aws )
+{
+	theWindow = aws->CreateWindowFrom("Console");
+	if( !theWindow )
+	{
+		//LOG
+	}
+}
+
+ConsoleWindow::~ConsoleWindow( void )
+{
+	delete theWindow;
+}
+
+void ConsoleWindow::Show( void )
+{
+	theWindow->Show();
+}
+
+void ConsoleWindow::Hide( void )
+{
+	theWindow->Hide();
+}
+
+void ConsoleWindow::Move( int x, int y )
+{
+	theWindow->Move( x, y );
+}
+
+bool ConsoleWindow::HandleEvent( iEvent &event )
+{
+	return false;
+}
\ No newline at end of file
diff --git a/client/client94/ConsoleWindow.h b/client/client94/ConsoleWindow.h
new file mode 100644
index 0000000..783d2fa
--- /dev/null
+++ b/client/client94/ConsoleWindow.h
@@ -0,0 +1,20 @@
+#ifndef __CONSOLE_WINDOW_H__
+#define __CONSOLE_WINDOW_H__
+
+class ConsoleWindow
+{
+	public:
+		ConsoleWindow( iAws *aws );
+		~ConsoleWindow( void );
+
+		void Show( void );
+		void Hide( void );
+		void Move( int x, int y );
+
+		bool HandleEvent( iEvent &event );
+
+	private:
+		iAwsWindow *theWindow;
+};
+
+#endif
\ No newline at end of file
diff --git a/client/client94/Coordinator.cpp b/client/client94/Coordinator.cpp
new file mode 100644
index 0000000..93d494e
--- /dev/null
+++ b/client/client94/Coordinator.cpp
@@ -0,0 +1,276 @@
+#include <windows.h>
+#include <winsock.h>
+#include "Coordinator.h"
+#include "em/EnvironmentModeler.h"
+
+//local constants
+#define CLIENT_HASH_SIZE 64
+
+//macros
+#define split_number( number, array, start ) \
+			array[start] = (number >> 24) & 0xFF; \
+			array[start+1] = (number >> 16) & 0xFF; \
+			array[start+2] = (number >> 8) & 0xFF; \
+			array[start+3] = (number) & 0xFF
+
+#define join_number( array, start ) \
+			((array[start] << 24) | (array[start+1] << 16) | \
+			 (array[start+2] << 8) | (array[start+3]))
+
+//helper struct
+struct CoClient
+{
+	struct CoClient *next;
+	struct sockaddr_in addr;
+	ChimeID id;
+};
+typedef struct CoClient CoClient;
+
+//local data
+CoClient *clients;
+HANDLE clientsMutex = NULL;
+SOCKET outSock;
+SOCKET inSock;
+ChimeID localID;
+bool active = false;
+
+
+//class definition
+bool Coordinator::initialize( ChimeID myID, int outPort, int inPort )
+{
+	struct sockaddr_in addr;
+
+	//init
+	clients = NULL;
+	clientsMutex = NULL;
+	localID = myID;
+
+	//setup the mutex
+	clientsMutex = CreateMutex( NULL, FALSE, NULL );
+
+	//open the sockets
+	inSock = socket( AF_INET, SOCK_DGRAM, PF_INET );
+	memset( &addr, 0, sizeof(struct sockaddr_in) );
+	addr.sin_addr.s_addr = INADDR_ANY;
+	addr.sin_port = inPort;
+	addr.sin_family = AF_INET;
+
+	if( bind( inSock, (struct sockaddr *) &addr, sizeof( struct sockaddr_in ) ) != 0 )
+	{
+		closesocket( inSock );
+		return false;
+	}
+
+	outSock = socket( AF_INET, SOCK_DGRAM, PF_INET );
+	memset( &addr, 0, sizeof(struct sockaddr_in) );
+	addr.sin_addr.s_addr = INADDR_ANY;
+	addr.sin_port = outPort;
+	addr.sin_family = AF_INET;
+
+	if( bind( outSock, (struct sockaddr *) &addr, sizeof( struct sockaddr_in ) ) != 0 )
+	{
+		closesocket( outSock );
+		closesocket( inSock );
+		return false;
+	}
+
+	//make active
+	active = true;
+
+	//everything's fine
+	return true;
+}
+
+void Coordinator::shutdown( void )
+{
+	CoClient *next;
+
+	//lock the mutex
+	WaitForSingleObject( clientsMutex, INFINITE );
+
+	//make inactive
+	active = false;
+
+	//kill all client sockets
+	while( clients != NULL )
+	{
+		next = clients->next;
+
+		delete clients;
+
+		clients = next;
+	}
+
+	//unlock the mutex
+	ReleaseMutex( clientsMutex );
+
+	//destroy the mutex
+	CloseHandle( clientsMutex );
+
+	//close the socket
+	closesocket( inSock );
+	closesocket( outSock );
+}
+
+void Coordinator::addClient( ChimeID setID, char *address, int port )
+{
+	CoClient *temp;
+
+	temp = new CoClient;
+
+	memset( temp, 0, sizeof(CoClient) );
+
+	temp->addr.sin_addr.s_addr = inet_addr(address);
+	temp->addr.sin_port = htons( port );
+	temp->addr.sin_family = AF_INET;
+
+	//lock
+	WaitForSingleObject( clientsMutex, INFINITE );
+
+	//add to list
+	temp->next = clients;
+	clients = temp;
+
+	//unlock
+	ReleaseMutex( clientsMutex );
+}
+
+void Coordinator::removeClient( ChimeID remID )
+{
+	CoClient *cur;
+	CoClient *found = NULL;
+
+	//lock
+	WaitForSingleObject( clientsMutex, INFINITE );
+
+	//pull it out
+	if( clients->id == remID )
+	{
+		found = clients;
+		clients = found->next;
+	}
+	else
+	{
+		for( cur = clients; cur->next != NULL; cur = cur->next )
+		{
+			if( cur->next->id == remID )
+			{
+				found = cur->next;
+				cur->next = found->next;
+				break;
+			}
+		}
+	}
+
+	//unlock
+	ReleaseMutex( clientsMutex );
+
+	//kill the found one
+	if( found != NULL )
+	{
+		delete found;
+	}
+}
+
+void Coordinator::sendUpdate( float dx, float dy, float dz, float rx, float ry, float rz )
+{
+	char buff[100];
+	CoClient *cur;
+
+	//translation
+	split_number( (int) dx, buff, 0 );
+	split_number( (int) ((float)dx - ((int) dx))*10000, buff, 4 );
+	split_number( (int) dy, buff, 8 );
+	split_number( (int) ((float)dy - ((int) dy))*10000, buff, 12 );
+	split_number( (int) dz, buff, 16 );
+	split_number( (int) ((float)dz - ((int) dz))*10000, buff, 20 );
+
+	//rotation
+	split_number( (int) rx, buff, 24 );
+	split_number( (int) ((float)rx - ((int) rx))*10000, buff, 28 );
+	split_number( (int) ry, buff, 32 );
+	split_number( (int) ((float)ry - ((int) ry))*10000, buff, 36 );
+	split_number( (int) rz, buff, 40 );
+	split_number( (int) ((float)rz - ((int) rz))*10000, buff, 44 );
+
+	//add my id
+	split_number( (int) localID, buff, 48 );
+
+	//lock
+	WaitForSingleObject( clientsMutex, INFINITE );
+
+	//go through them all
+	for( cur = clients; cur != NULL; cur = cur->next )
+	{
+		if( sendto( outSock, buff, 52, 0, (struct sockaddr *) &(cur->addr), sizeof(struct sockaddr_in) ) != 0 )
+		{
+			//LOG
+		}
+	}
+
+	//unlock
+	ReleaseMutex( clientsMutex );
+}
+
+void Coordinator::getUpdates( void )
+{
+	fd_set localSet;
+	struct timeval time;
+	bool done = false;
+	char buff[52];
+	struct sockaddr_in addr;
+	float trans[3];
+	float rotate[3];
+	ChimeID clientID;
+	int fromLen;
+
+	//setup timeval
+	time.tv_sec = 0;
+	time.tv_usec = 1000;
+
+	while( !done )
+	{
+		//setup fdset
+		FD_ZERO(&localSet);
+		FD_SET( inSock, &localSet );
+
+		if( select( (int) inSock, &localSet, NULL, NULL, NULL ) != 0 )
+		{
+			if( FD_ISSET(inSock, &localSet) )
+			{
+				//get the data, up to the packet length
+				if( recvfrom( inSock, buff, 52, 0, (struct sockaddr *) &addr,&fromLen ) != 0 )
+				{
+					//LOG
+				}
+				else
+				{
+					//parse the coords
+					trans[0] = (float) (((int) join_number( buff, 0 )) +
+								(((float) join_number(buff, 4))/10000));
+					trans[1] = (float) (((int) join_number( buff, 8 )) +
+								(((float) join_number(buff, 12))/10000));
+					trans[2] = (float) (((int) join_number( buff, 16 )) +
+								(((float) join_number(buff, 20))/10000));
+
+					//parse the rotation
+					rotate[0] = (float) (((int) join_number( buff, 24 )) +
+								(((float) join_number(buff, 28))/10000));
+					rotate[1] = (float) (((int) join_number( buff, 32 )) +
+								(((float) join_number(buff, 36))/10000));
+					rotate[2] = (float) (((int) join_number( buff, 40 )) +
+								(((float) join_number(buff, 44))/10000));
+
+					//parse the ID
+					clientID = (int) join_number( buff, 48 );
+
+					//do the update
+					EnvironmentModeler::moveAvatar( clientID, Coords( trans[0], trans[1], trans[2] ),
+						Coords( rotate[0], rotate[1], rotate[2] ) );
+				}
+			}
+		}
+		else
+			done = true;
+	}
+}
\ No newline at end of file
diff --git a/client/client94/Coordinator.h b/client/client94/Coordinator.h
new file mode 100644
index 0000000..dfb6f14
--- /dev/null
+++ b/client/client94/Coordinator.h
@@ -0,0 +1,26 @@
+#ifndef __COORDINATOR_H__
+#define __COORDINATOR_H__
+
+//dependencies
+#include "common/ChimeID.h"
+
+
+//declaration
+class Coordinator
+{
+	public:
+		static bool initialize( ChimeID myID, int outPort, int inPort );
+		static void shutdown( void );
+
+		static void addClient( ChimeID setID, char *address, int port );
+		static void removeClient( ChimeID remID );
+
+		static void sendUpdate( float dx, float dy, float dz,
+								float rx, float ry, float rz );
+		static void getUpdates( void );
+
+	private:
+		Coordinator( void );
+};
+
+#endif
\ No newline at end of file
diff --git a/client/client94/DisplayWindow.cpp b/client/client94/DisplayWindow.cpp
new file mode 100644
index 0000000..ffd0170
--- /dev/null
+++ b/client/client94/DisplayWindow.cpp
@@ -0,0 +1,52 @@
+#include "core.h"
+
+
+DisplayWindow::DisplayWindow( iAws *aws, csView *view, iGraphics2D *set2D )
+{
+	graphics2D = set2D;
+
+	theWindow = aws->CreateWindowFrom("Display");
+
+	if( !theWindow )
+	{
+		//LOG
+	}
+
+	//set the window's view to that of the main camera
+	theWindow->SetEngineView( view );
+}
+
+DisplayWindow::~DisplayWindow( void )
+{
+	delete theWindow;
+}
+
+void DisplayWindow::Draw( void )
+{
+	csRect myRect;
+
+	myRect = theWindow->Frame();
+
+	//clear the window frame
+	graphics2D->DrawBox( myRect.xmin, myRect.ymin, myRect.Width(), myRect.Height(), 0 );
+}
+
+void DisplayWindow::Show( void )
+{
+	theWindow->Show();
+}
+
+void DisplayWindow::Hide( void )
+{
+	theWindow->Hide();
+}
+
+void DisplayWindow::Move( int x, int y )
+{
+	theWindow->Move( x, y );
+}
+
+bool DisplayWindow::HandleEvent( iEvent &event )
+{
+	return false;
+}
\ No newline at end of file
diff --git a/client/client94/DisplayWindow.h b/client/client94/DisplayWindow.h
new file mode 100644
index 0000000..bcf3e07
--- /dev/null
+++ b/client/client94/DisplayWindow.h
@@ -0,0 +1,22 @@
+#ifndef __DISPLAY_WINDOW_H__
+#define __DISPLAY_WINDOW_H__
+
+class DisplayWindow
+{
+	public:
+		DisplayWindow( iAws *aws, csView *view, iGraphics2D *set2D );
+		~DisplayWindow( void );
+
+		void Draw( void );
+		void Show( void );
+		void Hide( void );
+		void Move( int x, int y );
+
+		bool HandleEvent( iEvent &event );
+
+	private:
+		iAwsWindow *theWindow;
+		iGraphics2D *graphics2D;
+};
+
+#endif
\ No newline at end of file
diff --git a/client/client94/aseie.dll b/client/client94/aseie.dll
new file mode 100644
index 0000000..7e9585f
Binary files /dev/null and b/client/client94/aseie.dll differ
diff --git a/client/client94/aws.dll b/client/client94/aws.dll
new file mode 100644
index 0000000..87cee0e
Binary files /dev/null and b/client/client94/aws.dll differ
diff --git a/client/client94/ball.dll b/client/client94/ball.dll
new file mode 100644
index 0000000..dd5393b
Binary files /dev/null and b/client/client94/ball.dll differ
diff --git a/client/client94/ballldr.dll b/client/client94/ballldr.dll
new file mode 100644
index 0000000..8a127e8
Binary files /dev/null and b/client/client94/ballldr.dll differ
diff --git a/client/client94/bugplug.dll b/client/client94/bugplug.dll
new file mode 100644
index 0000000..5bd984a
Binary files /dev/null and b/client/client94/bugplug.dll differ
diff --git a/client/client94/cal3d.dll b/client/client94/cal3d.dll
new file mode 100644
index 0000000..267a6a5
Binary files /dev/null and b/client/client94/cal3d.dll differ
diff --git a/client/client94/client94.sln b/client/client94/client94.sln
new file mode 100644
index 0000000..c2a653b
Binary files /dev/null and b/client/client94/client94.sln differ
diff --git a/client/client94/client94.vcproj b/client/client94/client94.vcproj
new file mode 100644
index 0000000..c31f7ca
--- /dev/null
+++ b/client/client94/client94.vcproj
@@ -0,0 +1,158 @@
+<?xml version="1.0" encoding = "Windows-1252"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="7.00"
+	Name="client94"
+	ProjectGUID="{A740DDAB-D0A1-44EA-B492-22A2E31CF34F}"
+	Keyword="Win32Proj">
+	<Platforms>
+		<Platform
+			Name="Win32"/>
+	</Platforms>
+	<Configurations>
+		<Configuration
+			Name="Debug|Win32"
+			OutputDirectory=".\"
+			IntermediateDirectory=".\Debug"
+			ConfigurationType="1"
+			CharacterSet="2">
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="0"
+				AdditionalIncludeDirectories="..\;..\common;crystalspace\include;crystalspace\include\cssys\win32"
+				PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS"
+				MinimalRebuild="TRUE"
+				BasicRuntimeChecks="3"
+				RuntimeLibrary="5"
+				UsePrecompiledHeader="0"
+				WarningLevel="3"
+				Detect64BitPortabilityProblems="TRUE"
+				DebugInformationFormat="4"/>
+			<Tool
+				Name="VCCustomBuildTool"/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="EnvironmentModeler.lib libcsgeom.lib libcsengine.lib libcssys.lib libcsgfx.lib libcsphyzik.lib libcstool.lib libcsutil.lib libcsws.lib dinput.lib dxguid.lib winmm.lib wsock32.lib ddraw.lib"
+				OutputFile="$(OutDir)/client94.exe"
+				LinkIncremental="2"
+				AdditionalLibraryDirectories="..\em;crystalspace\libs"
+				IgnoreAllDefaultLibraries="FALSE"
+				IgnoreDefaultLibraryNames="LIBCMT.lib"
+				GenerateDebugInformation="TRUE"
+				ProgramDatabaseFile="$(OutDir)/client94.pdb"
+				SubSystem="2"
+				EntryPointSymbol=""
+				TargetMachine="1"/>
+			<Tool
+				Name="VCMIDLTool"/>
+			<Tool
+				Name="VCPostBuildEventTool"/>
+			<Tool
+				Name="VCPreBuildEventTool"/>
+			<Tool
+				Name="VCPreLinkEventTool"/>
+			<Tool
+				Name="VCResourceCompilerTool"/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"/>
+			<Tool
+				Name="VCWebDeploymentTool"/>
+		</Configuration>
+		<Configuration
+			Name="Release|Win32"
+			OutputDirectory="Release"
+			IntermediateDirectory="Release"
+			ConfigurationType="1"
+			CharacterSet="2">
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="2"
+				InlineFunctionExpansion="1"
+				OmitFramePointers="TRUE"
+				PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS"
+				StringPooling="TRUE"
+				RuntimeLibrary="4"
+				EnableFunctionLevelLinking="TRUE"
+				UsePrecompiledHeader="3"
+				WarningLevel="3"
+				Detect64BitPortabilityProblems="TRUE"
+				DebugInformationFormat="3"/>
+			<Tool
+				Name="VCCustomBuildTool"/>
+			<Tool
+				Name="VCLinkerTool"
+				OutputFile="$(OutDir)/client94.exe"
+				LinkIncremental="1"
+				GenerateDebugInformation="TRUE"
+				SubSystem="2"
+				OptimizeReferences="2"
+				EnableCOMDATFolding="2"
+				TargetMachine="1"/>
+			<Tool
+				Name="VCMIDLTool"/>
+			<Tool
+				Name="VCPostBuildEventTool"/>
+			<Tool
+				Name="VCPreBuildEventTool"/>
+			<Tool
+				Name="VCPreLinkEventTool"/>
+			<Tool
+				Name="VCResourceCompilerTool"/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"/>
+			<Tool
+				Name="VCWebDeploymentTool"/>
+		</Configuration>
+	</Configurations>
+	<Files>
+		<Filter
+			Name="Source Files"
+			Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm">
+			<File
+				RelativePath="ClientApp.cpp">
+			</File>
+			<File
+				RelativePath="ClientEngine.cpp">
+			</File>
+			<File
+				RelativePath="ConsoleWindow.cpp">
+			</File>
+			<File
+				RelativePath="Coordinator.cpp">
+			</File>
+			<File
+				RelativePath="DisplayWindow.cpp">
+			</File>
+			<File
+				RelativePath="main.cpp">
+			</File>
+		</Filter>
+		<Filter
+			Name="Header Files"
+			Filter="h;hpp;hxx;hm;inl;inc">
+			<File
+				RelativePath="ClientApp.h">
+			</File>
+			<File
+				RelativePath="ClientEngine.h">
+			</File>
+			<File
+				RelativePath="ClientEventDefs.h">
+			</File>
+			<File
+				RelativePath="ConsoleWindow.h">
+			</File>
+			<File
+				RelativePath="Coordinator.h">
+			</File>
+			<File
+				RelativePath="DisplayWindow.h">
+			</File>
+			<File
+				RelativePath="core.h">
+			</File>
+		</Filter>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
diff --git a/client/client94/clientaws.def b/client/client94/clientaws.def
new file mode 100644
index 0000000..ffe5a7a
--- /dev/null
+++ b/client/client94/clientaws.def
@@ -0,0 +1,561 @@
+skin "Normal Windows"
+{
+  Texture: 		"/aws/texture.png"
+  HighlightColor: 		230,230,230
+  ShadowColor:    		60,60,60
+  FillColor:      		200,200,200
+  TextDisabledColor:	128,128,0
+  TextForeColor:		0,0,0
+  TextBackColor:        255,255,255
+  ButtonTextColor:		0,0,192
+  ChartBarColor:		255,0,0
+  OverlayTextureAlpha:	128
+  ScrollBarHeight:	16
+  ScrollBarWidth:	16
+  WindowMin:		"/aws/minimize.png"
+  WindowZoom:		"/aws/zoom.png"
+  WindowClose:		"/aws/close.png"
+  WindowMinAt:		(46, 6) - (46-11, 6+10)
+  WindowZoomAt:		(34, 6) - (34-11, 6+10)
+  WindowCloseAt:	(19, 6) - (19-11, 6+10)
+  CheckBoxUp:		"/aws/chkup.png"
+  CheckBoxDn:		"/aws/chkdn.png"
+  CheckBoxOn:		"/aws/chkon.png"
+  CheckBoxOff:		"/aws/chkoff.png"
+  RadioButtonUp:	"/aws/radup.png"
+  RadioButtonDn:	"/aws/raddn.png"
+  RadioButtonOn:	"/aws/radon.png"
+  RadioButtonOff:	"/aws/radoff.png"
+  TreeCollapsed:	"/aws/treecol.png"
+  TreeExpanded:		"/aws/treeexp.png"
+  TreeCollapsed:	"/aws/treecol.png"
+  TreeVertLine:		"/aws/treevl.png"
+  TreeHorzLine:		"/aws/treehl.png"
+  TreeChkUnmarked:	"/aws/treechke.png"
+  TreeChkMarked:	"/aws/treechkf.png"
+  TreeGrpUnmarked:	"/aws/treegrpe.png"
+  TreeGrpMarked:	"/aws/treegrpf.png"
+  ScrollBarUp:		"/aws/sbup.png"
+  ScrollBarDn:		"/aws/sbdn.png"
+  ScrollBarRt:		"/aws/sbrt.png"
+  ScrollBarLt:		"/aws/sblt.png"
+}
+
+window "Display"
+{
+	Frame: (0,0)-(640,480)
+	Style: wfsNormal
+	Title: "Display"
+}
+
+window "Console"
+{
+	Frame: (0,0)-(200,120)
+	Style: wfsNormal
+	Title: "Console"
+
+	component "ConsoleText" is "Text Box"
+	{
+		Frame: (0, 0)-(200, 120)
+		Style: tbfsNormal
+		Text: "Console"
+	}
+}
+
+window "Video Config"
+{
+	Frame: (100,200)-(400,500)
+	Style: wfsNormal
+	Title: "Video Config"
+	Options: wfoGrip+wfoTitle+wfoClose+wfoMin+wfoZoom+wfoControl
+
+	component "Group1" is "Group Frame"
+	{
+		Frame: (20,25)-(200,200)
+		Layout: "GridBag"
+
+		component "8" is "Radio Button"
+		{
+			Anchor: gbcCenter
+			Fill:   gbcVertical
+			GridHeight: 1
+			GridWidth: 1
+			WeightX: 1
+			WeightY: 1
+			Caption: "8 bit"
+		}
+
+		component "16" is "Radio Button"
+		{
+			Anchor: gbcCenter
+			Fill:   gbcVertical
+			GridHeight: 1
+			GridWidth:  1
+			WeightX: 1
+			WeightY: 1
+			Caption: "16 bit"
+		}
+
+		component "32" is "Radio Button"
+		{
+			Anchor: gbcCenter
+			Fill:   gbcVertical
+			GridHeight: 1
+			GridWidth:  1
+			WeightX: 1
+			WeightY: 1
+			Caption: "32 bit"
+		}
+	}
+}
+
+window "Splash"
+{
+  Frame: (100,200)-(400,300)
+  Style: wfsNormal
+  Options: wfoBeveledBorder
+
+  component "TestLabel" is "Label"
+  {
+    Frame: (20, 5) - (250, 20)
+    Align: lblAlignCenter
+    Caption: "Login to AWSTEST"
+  }
+
+  component "User" is "Label"
+  {
+    Frame: (10, 50) - (75, 70)
+    Align: lblAlignRight
+    Caption: "Username:"
+  }
+
+  component "Pass" is "Label"
+  {
+    Frame: (10, 75) - (75, 95)
+    Align: lblAlignRight
+    Caption: "Password:"
+  }
+
+  component "UserName" is "Text Box"
+  {
+    Frame: (80, 50) - (250, 70)
+    Style: tbfsNormal
+    Text: "Newuser"
+    Disallow: "0123456789 "
+
+    connect
+    {
+      signalTextBoxLostFocus -> testButtonSink::SetUserName
+    }
+  }
+
+  component "Password" is "Text Box"
+  {
+    Frame: (80, 75) - (250, 95)
+    Style: tbfsNormal
+    Masked: Yes
+    MaskChar: "*"
+
+    connect
+    {
+      signalTextBoxLostFocus -> testButtonSink::SetPassword
+    }
+  }
+
+  component "Login" is "Command Button"
+  {
+    Frame: (252, 75) - (295, 95)
+    Style: bfsNormal
+    Caption: "Login"
+
+    connect
+    {
+      signalCmdButtonClicked -> testButtonSink::Login
+    }
+  }
+
+}
+
+window "Another"
+{
+  Frame: (100,100)-(600,440)
+  Style: wfsNormal
+  Title: "A window with lots of stuff"
+
+  component "Red" is "Command Button"
+  {
+    Frame: (20, 30) - (90, 50)
+    Style: bfsNormal
+    Caption: "Red"
+
+    connect
+    {
+      signalCmdButtonClicked -> testButtonSink::RedClicked
+    }
+  }
+
+  component "Green" is "Command Button"
+  {
+    Frame: (20, 60) - (90, 80)
+    Style: bfsNormal
+    Caption: "Green"
+
+    connect
+    {
+      signalCmdButtonClicked -> testButtonSink::GreenClicked
+    }
+  }
+
+  component "Blue" is "Command Button"
+  {
+    Frame: (20, 90) - (90, 110)
+    Style: bfsNormal
+    Toggle: Yes
+    Caption: "Blue"
+
+    connect
+    {
+     signalCmdButtonClicked -> testButtonSink::BlueClicked
+    }
+  }
+
+  component "HideWindow" is "Command Button"
+  {
+    Frame: (100, 30) - (170, 50)
+    Style: bfsNormal
+    Caption: "Close"
+
+    connect
+    {
+      signalCmdButtonClicked -> awsStandardSink::HideWindow
+    }
+  }
+
+  component "Male" is "Radio Button"
+  {
+    Frame: (100, 60) - (170, 70)
+    Caption: "Male"
+  }
+
+  component "Female" is "Radio Button"
+  {
+    Frame: (100, 70) - (170, 81)
+    Caption: "Female"
+    Align: rbAlignRight
+  }
+
+  component "HDWACC" is "Check Box"
+  {
+    Frame: (100, 90) - (300, 100)
+    Caption: "Use hardware acceleration"
+  }
+
+  component "Connection" is "Group Frame"
+  {
+    Frame: (100, 110) - (300, 200)
+    Caption: "Connection Type"
+
+    component "Modem" is "Radio Button"
+    {
+      Frame: (10, 30) - (70, 40)
+      Caption: "Modem"
+    }
+
+    component "DSL" is "Radio Button"
+    {
+      Frame: (10, 41) - (70, 51)
+      Caption: "DSL"
+    }
+
+    component "Cable" is "Radio Button"
+    {
+      Frame: (10, 51) - (70, 61)
+      Caption: "Cable"
+    }
+
+    component "T1" is "Radio Button"
+    {
+      Frame: (10, 61) - (70, 71)
+      Caption: "T1"
+    }
+
+    component "LAN" is "Radio Button"
+    {
+      Frame: (10, 71) - (70, 81)
+      Caption: "LAN"
+    }
+
+  }
+
+  component "Sample" is "Bar Chart"
+  {
+   Frame: (320, 110) - (450, 200)
+   Style: lbfsSunken
+   Options: bcoVerticalChart
+
+
+   connect
+    {
+     signalComponentCreated -> testButtonSink::FillBarChart
+    }
+  }
+
+  component "Users" is "List Box"
+  {
+    Frame: (100, 210) - (385, 300)
+    Style: lbfsSunken
+    Highlight: "/aws/lbhi.png"
+    Columns: 3
+    DefaultSortCOl: 0
+    Column0Width: 90
+    Column0Caption: "Class"
+    Column1Width: 70
+    Column1Caption: "Status"
+    Column2Width: 100
+    Column2Caption: "Name"
+    Column2Align: lbAlignCenter
+
+    connect
+    {
+     signalComponentCreated -> testButtonSink::FillListBox
+    }
+  }
+
+}
+
+window "Engine View"
+{
+  Frame: (10, 10) - (138, 138)
+  Style: wfsNormal
+}
+
+window "Layout Test 2"
+{
+  Style: wfsNormal
+  Options: wfoGrip+wfoTitle+wfoClose+wfoMin+wfoZoom+wfoControl
+  Frame: (0,0) - (460,252)
+  Title: "Form1"
+  Layout: "GridBag"
+  component "PushButton3" is "Command Button"
+  {
+    Anchor: gbcCenter
+    Caption: "PushButton3"
+  }
+  component "PushButton4" is "Command Button"
+  {
+    Anchor: gbcCenter
+	GridWidth: 0
+    Fill: gbcHorizontal
+    Caption: "PushButton4"
+  }
+  component "PushButton5" is "Command Button"
+  {
+    Anchor: gbcCenter
+    Fill: gbcNone
+    Caption: "PushButton5"
+  }
+  component "PushButton1" is "Command Button"
+  {
+    Anchor: gbcCenter
+    Fill: gbcHorizontal
+    Caption: "PushButton1"
+  }
+  component "PushButton2" is "Command Button"
+  {
+    Anchor: gbcCenter
+    GridWidth: 0
+    Fill: gbcBoth
+    Caption: "PushButton2"
+  }
+}
+
+
+window "Layout Test"
+{
+  Frame:  (100,10)-(400,320)
+  Style:  wfsNormal
+  Title:  "Layout Test Window"
+  Layout: "GridBag"
+
+  component "Button1" is "Command Button"
+  {
+    Caption: "Button 1"
+    Anchor: gbcEast
+	Fill:   gbcNone
+	GridHeight: 1
+	GridWidth:  1
+	WeightX: 1
+	WeightY: 0
+  }
+
+  component "Button2" is "Command Button"
+  {
+    Caption: "Button 2"
+    Anchor: gbcCenter
+	Fill:   gbcNone
+	GridHeight: 1
+	GridWidth:  1
+	WeightX: 1
+	WeightY: 0
+  }
+
+  component "Button3" is "Command Button"
+  {
+    Caption: "Button 3"
+    Anchor: gbcWest
+	Fill:   gbcNone
+	GridHeight: 1
+	GridWidth:  0
+	WeightX: 1
+	WeightY: 0
+  }
+
+  component "Group1" is "Group Frame"
+  {
+    Anchor: gbcCenter
+	Fill:   gbcBoth
+	GridHeight: 1
+	GridWidth:  0
+	WeightX: 1
+	WeightY: 1
+
+	Layout: "Border"
+	HorizontalGap: 5
+	VerticalGap: 5
+
+	component "North" is "Command Button"
+	{
+		Caption: "North"
+		Anchor:  blNorth
+
+	}
+
+	component "South" is "Command Button"
+	{
+		Caption: "South"
+		Anchor:  blSouth
+
+	}
+
+	component "East" is "Command Button"
+	{
+		Caption: "East"
+		Anchor:  blEast
+
+	}
+
+	component "West" is "Command Button"
+	{
+		Caption: "West"
+		Anchor:  blWest
+
+	}
+
+	component "Center" is "Command Button"
+	{
+		Caption: "Center"
+		Anchor:  blCenter
+
+	}
+  }
+
+
+  component "Users" is "List Box"
+  {
+    Style: lbfsSunken
+    Highlight: "/aws/lbhi.png"
+    Columns: 3
+    DefaultSortCOl: 0
+    Column0Width: 90
+    Column0Caption: "Class"
+    Column1Width: 70
+    Column1Caption: "Status"
+    Column2Width: 100
+    Column2Caption: "Name"
+    Column2Align: lbAlignCenter
+
+    Anchor: gbcCenter
+	Fill:   gbcBoth
+	GridHeight: 1
+	GridWidth:  0
+	WeightX: 1
+	WeightY: 2
+
+
+    connect
+    {
+     signalComponentCreated -> testButtonSink::FillListBox
+    }
+  }
+}
+
+window "Form1"
+{
+  Style: wfsNormal
+  Options: wfoGrip+wfoTitle+wfoClose+wfoMin+wfoZoom+wfoControl
+  Frame: (0,0) - (460,252)
+  Title: "Form1"
+
+
+  component "Notebook" is "Notebook"
+  {
+    Style: nbfsBump
+    Frame: (40,40) - (200,200)
+    Location: nbTop
+
+    component "Tab1" is "Notebook Page"
+    {
+       Caption: "Tab1"
+
+       component "RB" is "Command Button"
+       {
+         Frame: (30,30) - (90,60)
+         Caption: "Test1"
+         Toggle: 1
+       }
+    }
+
+   component "Tab2" is "Notebook Page"
+   {
+       Caption: "Window2"
+
+       component "RB" is "Command Button"
+       {
+         Frame: (30,30) - (90,60)
+         Caption: "Test2"
+         Toggle: 1
+       }
+    }
+
+   component "Tab3" is "Notebook Page"
+   {
+       Caption: "Win3"
+   }
+
+   component "Tab4" is "Notebook Page"
+   {
+       Caption: "Window4"
+
+       component "RB" is "Command Button"
+       {
+         Frame: (30,30) - (90,60)
+         Caption: "Test3"
+         Toggle: 1
+       }
+   }
+
+   component "Tab5" is "Notebook Page"
+   {
+       Caption: "Window5"
+
+       component "RB" is "Command Button"
+       {
+         Frame: (30,30) - (90,60)
+         Caption: "Test4"
+         Toggle: 1
+       }
+   }
+
+
+  }
+}
diff --git a/client/client94/core.h b/client/client94/core.h
new file mode 100644
index 0000000..d259557
--- /dev/null
+++ b/client/client94/core.h
@@ -0,0 +1,90 @@
+#ifndef __CLIENT_CORE_H__
+#define __CLIENT_CORE_H__
+
+//keeps memory cleanup working
+#define WIN32_VOLATILE
+
+//standard libs
+#include <stdarg.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+//crystal space
+#define CS_SYSDEF_PROVIDE_PATH
+#define CS_SYSDEF_PROVIDE_ACCESS
+#include "cssysdef.h"
+#include "cssys/sysfunc.h"
+#include "csws/csws.h"
+#include "csgeom/math2d.h"
+#include "csgeom/math3d.h"
+#include "csutil/csstrvec.h"
+#include "csutil/cscolor.h"
+#include "csutil/cmdhelp.h"
+#include "csgeom/path.h"
+#include "cstool/csfxscr.h"
+#include "cstool/csview.h"
+#include "cstool/initapp.h"
+#include "ivideo/graph3d.h"
+#include "ivideo/natwin.h"
+#include "ivideo/fontserv.h"
+#include "ivideo/graph2d.h"
+#include "ivideo/txtmgr.h"
+#include "ivaria/conout.h"
+#include "iengine/engine.h"
+#include "iengine/sector.h"
+#include "iengine/light.h"
+#include "iengine/statlght.h"
+#include "iengine/camera.h"
+#include "iengine/mesh.h"
+#include "iengine/movable.h"
+#include "iengine/halo.h"
+#include "iengine/material.h"
+#include "imesh/thing/thing.h"
+#include "imesh/thing/polygon.h"
+#include "imesh/thing/ptextype.h"
+#include "imesh/particle.h"
+#include "imesh/sprite2d.h"
+#include "imesh/sprite3d.h"
+#include "imesh/ball.h"
+#include "imesh/stars.h"
+#include "imesh/object.h"
+#include "imap/reader.h"
+#include "imap/parser.h"
+#include "iutil/strvec.h"
+#include "iutil/comp.h"
+#include "iutil/eventh.h"
+#include "iutil/event.h"
+#include "iutil/eventq.h"
+#include "iutil/objreg.h"
+#include "iutil/virtclk.h"
+#include "iutil/csinput.h"
+#include "iutil/cmdline.h"
+#include "iutil/plugin.h"
+#include "iutil/vfs.h"
+#include "csutil/csstrvec.h"
+#include "igraphic/imageio.h"
+#include "ivaria/reporter.h"
+#include "ivaria/stdrep.h"
+#include "iaws/aws.h"
+#include "iaws/awscnvs.h"
+#include "csws/csapp.h"
+#include "cstool/mdldata.h"
+#include "cstool/mdltool.h"
+#include "imesh/mdlconv.h"
+#include "imesh/crossbld.h"
+
+//main dependencies
+#include "ClientApp.h"
+#include "ClientEngine.h"
+
+//constants
+#define CLIENT_DEFAULT_AWS_DEFS			"/this/clientaws.def"
+#define CLIENT_DEFAULT_CONFIG_PATH		"/config/client.cfg"
+#define CLIENT_NATIVE_WINDOW_TITLE		"Client"
+#define CLIENT_MENU_HEIGHT				20
+
+//global data
+extern ClientApp *gApp;
+
+#endif
diff --git a/client/client94/crossbld.dll b/client/client94/crossbld.dll
new file mode 100644
index 0000000..672f1d6
Binary files /dev/null and b/client/client94/crossbld.dll differ
diff --git a/client/client94/csavi.dll b/client/client94/csavi.dll
new file mode 100644
index 0000000..06d40ab
Binary files /dev/null and b/client/client94/csavi.dll differ
diff --git a/client/client94/csbmpimg.dll b/client/client94/csbmpimg.dll
new file mode 100644
index 0000000..17c1766
Binary files /dev/null and b/client/client94/csbmpimg.dll differ
diff --git a/client/client94/csconin.dll b/client/client94/csconin.dll
new file mode 100644
index 0000000..9bfab79
Binary files /dev/null and b/client/client94/csconin.dll differ
diff --git a/client/client94/csconout.dll b/client/client94/csconout.dll
new file mode 100644
index 0000000..84ea550
Binary files /dev/null and b/client/client94/csconout.dll differ
diff --git a/client/client94/csddraw.dll b/client/client94/csddraw.dll
new file mode 100644
index 0000000..63cb2dd
Binary files /dev/null and b/client/client94/csddraw.dll differ
diff --git a/client/client94/csfont.dll b/client/client94/csfont.dll
new file mode 100644
index 0000000..09ec614
Binary files /dev/null and b/client/client94/csfont.dll differ
diff --git a/client/client94/csgifimg.dll b/client/client94/csgifimg.dll
new file mode 100644
index 0000000..e74d398
Binary files /dev/null and b/client/client94/csgifimg.dll differ
diff --git a/client/client94/csjpgimg.dll b/client/client94/csjpgimg.dll
new file mode 100644
index 0000000..a6aed35
Binary files /dev/null and b/client/client94/csjpgimg.dll differ
diff --git a/client/client94/cslexan.dll b/client/client94/cslexan.dll
new file mode 100644
index 0000000..c4e4915
Binary files /dev/null and b/client/client94/cslexan.dll differ
diff --git a/client/client94/cslua.dll b/client/client94/cslua.dll
new file mode 100644
index 0000000..ca1883b
Binary files /dev/null and b/client/client94/cslua.dll differ
diff --git a/client/client94/csparser.dll b/client/client94/csparser.dll
new file mode 100644
index 0000000..2fbe66a
Binary files /dev/null and b/client/client94/csparser.dll differ
diff --git a/client/client94/cspngimg.dll b/client/client94/cspngimg.dll
new file mode 100644
index 0000000..b736dec
Binary files /dev/null and b/client/client94/cspngimg.dll differ
diff --git a/client/client94/cssgiimg.dll b/client/client94/cssgiimg.dll
new file mode 100644
index 0000000..51e88dd
Binary files /dev/null and b/client/client94/cssgiimg.dll differ
diff --git a/client/client94/cssocket.dll b/client/client94/cssocket.dll
new file mode 100644
index 0000000..16c8f1e
Binary files /dev/null and b/client/client94/cssocket.dll differ
diff --git a/client/client94/cssynldr.dll b/client/client94/cssynldr.dll
new file mode 100644
index 0000000..1c6eb10
Binary files /dev/null and b/client/client94/cssynldr.dll differ
diff --git a/client/client94/cstgaimg.dll b/client/client94/cstgaimg.dll
new file mode 100644
index 0000000..21f1b3a
Binary files /dev/null and b/client/client94/cstgaimg.dll differ
diff --git a/client/client94/cswalimg.dll b/client/client94/cswalimg.dll
new file mode 100644
index 0000000..c65622b
Binary files /dev/null and b/client/client94/cswalimg.dll differ
diff --git a/client/client94/emit.dll b/client/client94/emit.dll
new file mode 100644
index 0000000..c7ba61b
Binary files /dev/null and b/client/client94/emit.dll differ
diff --git a/client/client94/emitldr.dll b/client/client94/emitldr.dll
new file mode 100644
index 0000000..c070e93
Binary files /dev/null and b/client/client94/emitldr.dll differ
diff --git a/client/client94/engine.dll b/client/client94/engine.dll
new file mode 100644
index 0000000..0b2baeb
Binary files /dev/null and b/client/client94/engine.dll differ
diff --git a/client/client94/explo.dll b/client/client94/explo.dll
new file mode 100644
index 0000000..7dea99d
Binary files /dev/null and b/client/client94/explo.dll differ
diff --git a/client/client94/exploldr.dll b/client/client94/exploldr.dll
new file mode 100644
index 0000000..98b967c
Binary files /dev/null and b/client/client94/exploldr.dll differ
diff --git a/client/client94/fancycon.dll b/client/client94/fancycon.dll
new file mode 100644
index 0000000..7ee4440
Binary files /dev/null and b/client/client94/fancycon.dll differ
diff --git a/client/client94/fire.dll b/client/client94/fire.dll
new file mode 100644
index 0000000..72c957f
Binary files /dev/null and b/client/client94/fire.dll differ
diff --git a/client/client94/fireldr.dll b/client/client94/fireldr.dll
new file mode 100644
index 0000000..0839455
Binary files /dev/null and b/client/client94/fireldr.dll differ
diff --git a/client/client94/fontplex.dll b/client/client94/fontplex.dll
new file mode 100644
index 0000000..e38d8d7
Binary files /dev/null and b/client/client94/fontplex.dll differ
diff --git a/client/client94/fountain.dll b/client/client94/fountain.dll
new file mode 100644
index 0000000..f9031d7
Binary files /dev/null and b/client/client94/fountain.dll differ
diff --git a/client/client94/fountldr.dll b/client/client94/fountldr.dll
new file mode 100644
index 0000000..8cf4e23
Binary files /dev/null and b/client/client94/fountldr.dll differ
diff --git a/client/client94/freefont.dll b/client/client94/freefont.dll
new file mode 100644
index 0000000..6a5da45
Binary files /dev/null and b/client/client94/freefont.dll differ
diff --git a/client/client94/genmesh.dll b/client/client94/genmesh.dll
new file mode 100644
index 0000000..1589160
Binary files /dev/null and b/client/client94/genmesh.dll differ
diff --git a/client/client94/gl3d.dll b/client/client94/gl3d.dll
new file mode 100644
index 0000000..2c73fa2
Binary files /dev/null and b/client/client94/gl3d.dll differ
diff --git a/client/client94/glwin32.dll b/client/client94/glwin32.dll
new file mode 100644
index 0000000..94517a8
Binary files /dev/null and b/client/client94/glwin32.dll differ
diff --git a/client/client94/gmeshldr.dll b/client/client94/gmeshldr.dll
new file mode 100644
index 0000000..1072276
Binary files /dev/null and b/client/client94/gmeshldr.dll differ
diff --git a/client/client94/gtreeldr.dll b/client/client94/gtreeldr.dll
new file mode 100644
index 0000000..4a2cd3f
Binary files /dev/null and b/client/client94/gtreeldr.dll differ
diff --git a/client/client94/haze.dll b/client/client94/haze.dll
new file mode 100644
index 0000000..aea8658
Binary files /dev/null and b/client/client94/haze.dll differ
diff --git a/client/client94/hazeldr.dll b/client/client94/hazeldr.dll
new file mode 100644
index 0000000..6af0818
Binary files /dev/null and b/client/client94/hazeldr.dll differ
diff --git a/client/client94/ie3ds.dll b/client/client94/ie3ds.dll
new file mode 100644
index 0000000..0cf81f1
Binary files /dev/null and b/client/client94/ie3ds.dll differ
diff --git a/client/client94/ieplex.dll b/client/client94/ieplex.dll
new file mode 100644
index 0000000..9dd13ab
Binary files /dev/null and b/client/client94/ieplex.dll differ
diff --git a/client/client94/imgplex.dll b/client/client94/imgplex.dll
new file mode 100644
index 0000000..99e033b
Binary files /dev/null and b/client/client94/imgplex.dll differ
diff --git a/client/client94/inf3d.dll b/client/client94/inf3d.dll
new file mode 100644
index 0000000..a46229b
Binary files /dev/null and b/client/client94/inf3d.dll differ
diff --git a/client/client94/iso.dll b/client/client94/iso.dll
new file mode 100644
index 0000000..e642051
Binary files /dev/null and b/client/client94/iso.dll differ
diff --git a/client/client94/isoload.dll b/client/client94/isoload.dll
new file mode 100644
index 0000000..9593b65
Binary files /dev/null and b/client/client94/isoload.dll differ
diff --git a/client/client94/lib3ds-120.dll b/client/client94/lib3ds-120.dll
new file mode 100644
index 0000000..de9a47c
Binary files /dev/null and b/client/client94/lib3ds-120.dll differ
diff --git a/client/client94/libjpeg.dll b/client/client94/libjpeg.dll
new file mode 100644
index 0000000..b6cf285
Binary files /dev/null and b/client/client94/libjpeg.dll differ
diff --git a/client/client94/line3d.dll b/client/client94/line3d.dll
new file mode 100644
index 0000000..15bf105
Binary files /dev/null and b/client/client94/line3d.dll differ
diff --git a/client/client94/lua.dll b/client/client94/lua.dll
new file mode 100644
index 0000000..5f9809d
Binary files /dev/null and b/client/client94/lua.dll differ
diff --git a/client/client94/lualib.dll b/client/client94/lualib.dll
new file mode 100644
index 0000000..ca25ab4
Binary files /dev/null and b/client/client94/lualib.dll differ
diff --git a/client/client94/main.cpp b/client/client94/main.cpp
new file mode 100644
index 0000000..d634a50
--- /dev/null
+++ b/client/client94/main.cpp
@@ -0,0 +1,44 @@
+#include "core.h"
+
+//global data
+ClientApp *gApp = NULL;
+
+// Define the skin for windowing system
+CSWS_SKIN_DECLARE_DEFAULT( DefaultSkin );
+
+//load the engine
+CS_IMPLEMENT_APPLICATION
+
+
+int main( int argc, char *argv[] )
+{
+	iObjectRegistry *object_reg;
+
+	// Initialize the random number generator
+	srand( time (NULL) );
+
+	//create the object registry
+	object_reg = csInitializer::CreateEnvironment( argc, argv );
+	if( !object_reg )
+	{
+		//LOG
+		return -1;
+	}
+
+	//init application
+	gApp = new ClientApp( object_reg, DefaultSkin );
+	if( !gApp->Initialize( argc, argv ) )
+	{
+		//log
+		return -1;
+	}
+
+	//start the main loop
+	gApp->Start();
+
+	//cleanup
+	delete gApp;
+
+	//no errors
+	return 0;
+}
\ No newline at end of file
diff --git a/client/client94/mballldr.dll b/client/client94/mballldr.dll
new file mode 100644
index 0000000..4621f8f
Binary files /dev/null and b/client/client94/mballldr.dll differ
diff --git a/client/client94/md2ie.dll b/client/client94/md2ie.dll
new file mode 100644
index 0000000..0d574fa
Binary files /dev/null and b/client/client94/md2ie.dll differ
diff --git a/client/client94/mdlie.dll b/client/client94/mdlie.dll
new file mode 100644
index 0000000..c7098ed
Binary files /dev/null and b/client/client94/mdlie.dll differ
diff --git a/client/client94/memory.dll b/client/client94/memory.dll
new file mode 100644
index 0000000..9199e1c
Binary files /dev/null and b/client/client94/memory.dll differ
diff --git a/client/client94/metaball.dll b/client/client94/metaball.dll
new file mode 100644
index 0000000..2b2ae53
Binary files /dev/null and b/client/client94/metaball.dll differ
diff --git a/client/client94/metagen.dll b/client/client94/metagen.dll
new file mode 100644
index 0000000..d1afe41
Binary files /dev/null and b/client/client94/metagen.dll differ
diff --git a/client/client94/mikmod.dll b/client/client94/mikmod.dll
new file mode 100644
index 0000000..50ce6e1
Binary files /dev/null and b/client/client94/mikmod.dll differ
diff --git a/client/client94/motion.dll b/client/client94/motion.dll
new file mode 100644
index 0000000..f5679aa
Binary files /dev/null and b/client/client94/motion.dll differ
diff --git a/client/client94/motldr.dll b/client/client94/motldr.dll
new file mode 100644
index 0000000..1553ba5
Binary files /dev/null and b/client/client94/motldr.dll differ
diff --git a/client/client94/null2d.dll b/client/client94/null2d.dll
new file mode 100644
index 0000000..4e3ef44
Binary files /dev/null and b/client/client94/null2d.dll differ
diff --git a/client/client94/null3d.dll b/client/client94/null3d.dll
new file mode 100644
index 0000000..e196253
Binary files /dev/null and b/client/client94/null3d.dll differ
diff --git a/client/client94/objie.dll b/client/client94/objie.dll
new file mode 100644
index 0000000..87845c7
Binary files /dev/null and b/client/client94/objie.dll differ
diff --git a/client/client94/odivx.dll b/client/client94/odivx.dll
new file mode 100644
index 0000000..8b2666f
Binary files /dev/null and b/client/client94/odivx.dll differ
diff --git a/client/client94/ogg.dll b/client/client94/ogg.dll
new file mode 100644
index 0000000..7535e64
Binary files /dev/null and b/client/client94/ogg.dll differ
diff --git a/client/client94/perfstat.dll b/client/client94/perfstat.dll
new file mode 100644
index 0000000..439c49a
Binary files /dev/null and b/client/client94/perfstat.dll differ
diff --git a/client/client94/png.dll b/client/client94/png.dll
new file mode 100644
index 0000000..5121bb5
Binary files /dev/null and b/client/client94/png.dll differ
diff --git a/client/client94/povie.dll b/client/client94/povie.dll
new file mode 100644
index 0000000..3c7e5e0
Binary files /dev/null and b/client/client94/povie.dll differ
diff --git a/client/client94/python22_d.dll b/client/client94/python22_d.dll
new file mode 100644
index 0000000..020d3f8
Binary files /dev/null and b/client/client94/python22_d.dll differ
diff --git a/client/client94/rain.dll b/client/client94/rain.dll
new file mode 100644
index 0000000..10e67de
Binary files /dev/null and b/client/client94/rain.dll differ
diff --git a/client/client94/rainldr.dll b/client/client94/rainldr.dll
new file mode 100644
index 0000000..420fa70
Binary files /dev/null and b/client/client94/rainldr.dll differ
diff --git a/client/client94/rapid.dll b/client/client94/rapid.dll
new file mode 100644
index 0000000..b71fd09
Binary files /dev/null and b/client/client94/rapid.dll differ
diff --git a/client/client94/reporter.dll b/client/client94/reporter.dll
new file mode 100644
index 0000000..3882615
Binary files /dev/null and b/client/client94/reporter.dll differ
diff --git a/client/client94/rlecodec.dll b/client/client94/rlecodec.dll
new file mode 100644
index 0000000..7b8dd5d
Binary files /dev/null and b/client/client94/rlecodec.dll differ
diff --git a/client/client94/scf.cfg b/client/client94/scf.cfg
new file mode 100644
index 0000000..63a7ea2
--- /dev/null
+++ b/client/client94/scf.cfg
@@ -0,0 +1,434 @@
+; --------------------------------------------------------------------------- ;
+; Shared Class Facility configuration file
+; This is a manually maintained file: each time you create a shared class,
+; you have to manually fill entries for all OSes your class works on.
+;
+; The format of this file is pretty simple:
+; <ClassName> = <Shared library filename>
+; --------------------------------------------------------------------------- ;
+
+; -------------------------- Crystal Space Kernel --------------------------- ;
+
+; Crystal Space Virtual File System
+crystalspace.kernel.vfs = vfs
+
+; -------------------------- Crystal Space Engines -------------------------- ;
+
+; Crystal Space 3D Engine
+crystalspace.engine.3d = engine:crystalspace.kernel., crystalspace.graphics3d., crystalspace.graphic.image.io.
+; Crystal Space Isometric Engine
+crystalspace.engine.iso = iso:crystalspace.kernel., crystalspace.graphics3d., crystalspace.graphics2d.
+
+; -------------------------- Video Canvas Plugins --------------------------- ;
+
+; Ascii Art 2D graphics driver for Crystal Space
+crystalspace.graphics2d.asciiart = asciiart:crystalspace.font.server.
+; Crystal Space 2D driver for X-Windows
+crystalspace.graphics2d.x2d = x2d:crystalspace.font.server.
+; X-Windows 2D graphics driver (line3d) for Crystal Space
+crystalspace.graphics2d.linex2d = linex2d:crystalspace.font.server.
+; Crystal Space 2D driver for OpenGL using GL/X
+crystalspace.graphics2d.glx = glx2d:crystalspace.font.server.
+; Crystal Space 2D driver for SVGALib
+crystalspace.graphics2d.svgalib = svga2d:crystalspace.font.server.
+; Crystal Space 2D driver for BeOS
+crystalspace.graphics2d.be = be2d:crystalspace.font.server.
+; Crystal Space 2D driver for OpenGL using GL on BeOS
+crystalspace.graphics2d.glbe = glbe2d:crystalspace.font.server.
+; Crystal Space 2D driver for MacOS/X Server, OpenStep, and NextStep
+crystalspace.graphics2d.next = next2d:crystalspace.font.server.
+; Crystal Space 2D Driver for MacOS X (CoreGraphics)
+crystalspace.graphics2d.coregraphics = cgdriver2d:crystalspace.font.server
+; Crystal Space 2D Driver for MacOS X (OpenGL)
+crystalspace.graphics2d.glosx = glosx2d:crystalspace.font.server
+; OS/2 DIVE 2D graphics driver for Crystal Space
+crystalspace.graphics2d.dive = csdive:crystalspace.font.server.
+; OS/2 OpenGL 2D graphics driver for Crystal Space
+crystalspace.graphics2d.glos2 = glos2:crystalspace.font.server.
+; Crystal Space 2D OpenGL graphics driver for Win32
+crystalspace.graphics2d.glwin32 = glwin32:crystalspace.font.server.
+; Crystal Space 2D DirectDraw driver
+crystalspace.graphics2d.directdraw = csddraw:crystalspace.font.server.
+; SVGA Displaydriver for Crystal Space GL/X
+crystalspace.graphics2d.glx.disp.svga = oglsvga:crystalspace.font.server.
+; Infinite 2D graphics driver for Crystal Space
+crystalspace.graphics2d.infinite = inf3d:crystalspace.font.server.
+; DOS/DJGPP 2D graphics driver for Crystal Space
+crystalspace.graphics2d.dosraw = dosraw:crystalspace.font.server.
+; Simple Direct Media Layer 2D graphics driver for Crystal Space
+crystalspace.graphics2d.sdl2d = sdl2d:crystalspace.font.server.
+; Null 3d graphics driver for Crystal Space
+crystalspace.graphics2d.null2d = null2d:crystalspace.font.server.
+; Crystal Space Image Exporter
+crystalspace.graphics2d.memory = memory:crystalspace.font.server.
+
+; -------------------------- Window Plugins --------------------------------- ;
+; X-Window plugin for Crystal Space
+crystalspace.window.x = xwin
+; X-Window extension shared memory plugin
+crystalspace.window.x.extshm = xextshm
+; X-Window extension video mode plugin
+crystalspace.window.x.extf86vm = xext86vm
+
+; ------------------------- 3D Video Renderer Plugins ----------------------- ;
+
+; Software 3D graphics driver for Crystal Space
+crystalspace.graphics3d.software = soft3d:crystalspace.font.server.
+; Software off screen buffer
+crystalspace.graphics3d.software.offscreen = soft3d
+; Line 3D graphics driver for Crystal Space
+crystalspace.graphics3d.line = line3d:crystalspace.font.server.
+; OpenGL 3D graphics driver for Crystal Space
+crystalspace.graphics3d.opengl = gl3d:crystalspace.font.server.
+; Infinite 3D graphics driver for Crystal Space
+crystalspace.graphics3d.infinite = inf3d:crystalspace.font.server.
+; NULL 3D graphics driver for Crystal Space
+crystalspace.graphics3d.null = null3d:crystalspace.font.server.
+
+; ----------------------------- Network Drivers ----------------------------- ;
+
+; Crystal Space BSD Sockets Network Driver
+crystalspace.network.driver.sockets = cssocket
+
+; ------------------------------- Sound Drivers ----------------------------- ;
+
+; Crystal Space waveOut Sound Driver
+crystalspace.sound.driver.waveout = sndwaveout
+; Crystal Space OSS Sound Driver
+crystalspace.sound.driver.oss = ossdrv
+; Crystal Space CoreAudio Sound driver for MacOS X
+crystalspace.sound.driver.coreaudio = casnddrv
+; Software Sound Renderer for Crystal Space
+crystalspace.sound.render.software = sndsoft
+; Crystal Space DirectSound3D Sound Render
+crystalspace.sound.render.ds3d = sndrdrds3d
+
+; AIFF Sound Loader
+crystalspace.sound.loader.aiff = sndaiff
+; AU Sound Loader
+crystalspace.sound.loader.au = sndau
+; IFF Sound Loader
+crystalspace.sound.loader.iff = sndiff
+; Sound Loader Multiplexer
+crystalspace.sound.loader.multiplexer = sndplex:crystalspace.sound.loader.
+; WAV Sound Loader
+crystalspace.sound.loader.wav = sndwav
+; Ogg Vorbis Sound Loader
+crystalspace.sound.loader.ogg = sndogg
+; Mp3 Sound Loader
+crystalspace.sound.loader.mp3 = sndmp3
+; MikMod Sound Loader
+crystalspace.sound.loader.mod = sndmod
+
+; ------------------------------- Font Servers ------------------------------ ;
+
+; CrystalSpace default font server
+crystalspace.font.server.default = csfont
+; CrystalSpace FreeType font server
+crystalspace.font.server.freetype = freefont
+; Private X-Windows font server for LineX2D canvas
+crystalspace.font.server.linex2d = linex2d
+; Crystal Space font server multiplexor
+crystalspace.font.server.multiplexor = fontplex:crystalspace.font.server.
+
+; ------------------------------ Console Plugins ---------------------------- ;
+
+; Crystal Space standard input console
+crystalspace.console.input.standard = csconin
+; Crystal Space standard output console
+crystalspace.console.output.standard = csconout:crystalspace.kernel., crystalspace.graphics3d., crystalspace.graphics2d.
+; Crystal Space simple output console
+crystalspace.console.output.simple = simpcon:crystalspace.kernel., crystalspace.graphics3d., crystalspace.graphics2d.
+; Crystal Space fancy output console
+crystalspace.console.output.fancy = fancycon:crystalspace.kernel., crystalspace.graphics3d., crystalspace.graphics2d.
+
+; ------------------------------- Mesh Plugins ------------------------------ ;
+
+; Crystal Space Sprite2D Mesh Type
+crystalspace.mesh.object.sprite.2d = spr2d
+; Crystal Space Sprite2D Mesh Factory Loader
+crystalspace.mesh.loader.factory.sprite.2d = spr2dldr
+; Crystal Space Sprite2D Mesh Loader
+crystalspace.mesh.loader.sprite.2d = spr2dldr
+; Crystal Space Sprite2D Mesh Factory Saver
+crystalspace.mesh.saver.factory.sprite.2d = spr2dldr
+; Crystal Space Sprite2D Mesh Saver
+crystalspace.mesh.saver.sprite.2d = spr2dldr
+
+; Crystal Space Sprite3D Mesh Type
+crystalspace.mesh.object.sprite.3d = spr3d
+; Crystal Space Sprite3D Mesh Factory Loader
+crystalspace.mesh.loader.factory.sprite.3d = spr3dldr
+; Crystal Space Sprite3D Mesh Loader
+crystalspace.mesh.loader.sprite.3d = spr3dldr
+; Crystal Space Sprite3D Mesh Factory Saver
+crystalspace.mesh.saver.factory.sprite.3d = spr3dldr
+; Crystal Space Sprite3D Mesh Saver
+crystalspace.mesh.saver.sprite.3d = spr3dldr
+
+; Crystal Space Ball Mesh Type
+crystalspace.mesh.object.ball = ball
+; Crystal Space Ball Factory Loader
+crystalspace.mesh.loader.factory.ball = ballldr
+; Crystal Space Ball Mesh Loader
+crystalspace.mesh.loader.ball = ballldr
+; Crystal Space Ball Factory Saver
+crystalspace.mesh.saver.factory.ball = ballldr
+; Crystal Space Ball Mesh Saver
+crystalspace.mesh.saver.ball = ballldr
+
+; Crystal Space Explosion Mesh Type
+crystalspace.mesh.object.explosion = explo
+; Crystal Space Explosion Factory Loader
+crystalspace.mesh.loader.factory.explosion = exploldr
+; Crystal Space Explosion Mesh Loader
+crystalspace.mesh.loader.explosion = exploldr
+; Crystal Space Explosion Factory Saver
+crystalspace.mesh.saver.factory.explosion = exploldr
+; Crystal Space Explosion Mesh Saver
+crystalspace.mesh.saver.explosion = exploldr
+
+; Crystal Space Fire Mesh Type
+crystalspace.mesh.object.fire = fire
+; Crystal Space Fire Factory Loader
+crystalspace.mesh.loader.factory.fire = fireldr
+; Crystal Space Fire Mesh Loader
+crystalspace.mesh.loader.fire = fireldr
+; Crystal Space Fire Factory Saver
+crystalspace.mesh.saver.factory.fire = fireldr
+; Crystal Space Fire Mesh Saver
+crystalspace.mesh.saver.fire = fireldr
+
+; Crystal Space Fountain Mesh Type
+crystalspace.mesh.object.fountain = fountain
+; Crystal Space Fountain Factory Loader
+crystalspace.mesh.loader.factory.fountain = fountldr
+; Crystal Space Fountain Mesh Loader
+crystalspace.mesh.loader.fountain = fountldr
+; Crystal Space Fountain Factory Saver
+crystalspace.mesh.saver.factory.fountain = fountldr
+; Crystal Space Fountain Mesh Saver
+crystalspace.mesh.saver.fountain = fountldr
+
+; Crystal Space Rain Mesh Type
+crystalspace.mesh.object.rain = rain
+; Crystal Space Rain Factory Loader
+crystalspace.mesh.loader.factory.rain = rainldr
+; Crystal Space Rain Mesh Loader
+crystalspace.mesh.loader.rain = rainldr
+; Crystal Space Rain Factory Saver
+crystalspace.mesh.saver.factory.rain = rainldr
+; Crystal Space Rain Mesh Saver
+crystalspace.mesh.saver.rain = rainldr
+
+; Crystal Space Snow Mesh Type
+crystalspace.mesh.object.snow = snow
+; Crystal Space Snow Factory Loader
+crystalspace.mesh.loader.factory.snow = snowldr
+; Crystal Space Snow Mesh Loader
+crystalspace.mesh.loader.snow = snowldr
+; Crystal Space Snow Factory Saver
+crystalspace.mesh.saver.factory.snow = snowldr
+; Crystal Space Snow Mesh Saver
+crystalspace.mesh.saver.snow = snowldr
+
+; Crystal Space Spiral Mesh Type
+crystalspace.mesh.object.spiral = spiral
+; Crystal Space Spiral Factory Loader
+crystalspace.mesh.loader.factory.spiral = spirldr
+; Crystal Space Spiral Mesh Loader
+crystalspace.mesh.loader.spiral = spirldr
+; Crystal Space Spiral Factory Saver
+crystalspace.mesh.saver.factory.spiral = spirldr
+; Crystal Space Spiral Mesh Saver
+crystalspace.mesh.saver.spiral = spirldr
+
+; Crystal Space Thing Mesh Type
+crystalspace.mesh.object.thing = thing
+; Crystal Space Thing Mesh Factory Loader
+crystalspace.mesh.loader.factory.thing = thingldr
+; Crystal Space Thing Mesh Factory Saver
+crystalspace.mesh.saver.factory.thing = thingldr
+; Crystal Space Thing Mesh Loader
+crystalspace.mesh.loader.thing = thingldr
+; Crystal Space Thing Mesh Saver
+crystalspace.mesh.saver.thing = thingldr
+; Crystal Space Thing Plane Loader
+crystalspace.mesh.loader.thing.plane = thingldr
+; Crystal Space Thing Plane Saver
+crystalspace.mesh.saver.thing.plane = thingldr
+; Crystal Space Thing Bezier Loader
+crystalspace.mesh.loader.thing.bezier = thingldr
+; Crystal Space Thing Bezier Saver
+crystalspace.mesh.saver.thing.bezier = thingldr
+
+; Crystal Space Stars Mesh Type
+crystalspace.mesh.object.stars = stars
+; Crystal Space Star Factory Loader
+crystalspace.mesh.loader.factory.stars = starldr
+; Crystal Space Star Factory Saver
+crystalspace.mesh.saver.factory.stars = starldr
+; Crystal Space Star Mesh Loader
+crystalspace.mesh.loader.stars = starldr
+; Crystal Space Star Mesh Saver
+crystalspace.mesh.saver.stars = starldr
+
+; Crystal Space Haze Mesh Type
+crystalspace.mesh.object.haze = haze
+crystalspace.mesh.loader.factory.haze = hazeldr
+; Crystal Space Haze Factory Saver
+crystalspace.mesh.saver.factory.haze = hazeldr
+; Crystal Space Haze Mesh Loader
+crystalspace.mesh.loader.haze = hazeldr
+; Crystal Space Haze Mesh Saver
+crystalspace.mesh.saver.haze = hazeldr
+
+; Crystal Space Emit Mesh Type
+crystalspace.mesh.object.emit = emit
+; Crystal Space Emit Factory Loader
+crystalspace.mesh.loader.factory.emit = emitldr
+; Crystal Space Emit Factory Saver
+crystalspace.mesh.saver.factory.emit = emitldr
+; Crystal Space Emit Mesh Loader
+crystalspace.mesh.loader.emit = emitldr
+; Crystal Space Emit Mesh Saver
+crystalspace.mesh.saver.emit = emitldr
+
+; Metaball mesh object for crystal space
+crystalspace.mesh.object.metaball = metaball
+; Crystal Space MetaBall Factory Loader
+crystalspace.mesh.loader.factory.metaball = mballldr
+; Crystal Space MetaBall Mesh Loader
+crystalspace.mesh.loader.metaball = mballldr
+; Crystal Space MetaBall Factory Saver
+crystalspace.mesh.saver.factory.metaball = mballldr
+; Crystal Space MetaBall Mesh Saver
+crystalspace.mesh.saver.metaball = mballldr
+
+; MetaGen Mesh factory for crystal space
+crystalspace.mesh.factory.metagen = metagen
+
+; Crystal Space Function Terrain Mesh Type
+crystalspace.mesh.object.terrfunc = terrfunc
+; Crystal Space Function Terrain Factory Loader
+crystalspace.mesh.loader.factory.terrfunc = terrfldr
+; Crystal Space Function Terrain Loader
+crystalspace.mesh.loader.terrfunc = terrfldr
+
+; Crystal Space General Mesh Type
+crystalspace.mesh.object.genmesh = genmesh
+; Crystal Space General Mesh Factory Loader
+crystalspace.mesh.loader.factory.genmesh = gmeshldr
+; Crystal Space General Mesh Factory Saver
+crystalspace.mesh.saver.factory.genmesh = gmeshldr
+; Crystal Space General Mesh Mesh Loader
+crystalspace.mesh.loader.genmesh = gmeshldr
+; Crystal Space General Mesh Mesh Saver
+crystalspace.mesh.saver.genmesh = gmeshldr
+; Crystal Space General/Tree Mesh Factory Loader
+crystalspace.mesh.loader.factory.genmesh.tree = gtreeldr
+
+; ------------------------- Image Loader/Saver Plugins ---------------------- ;
+
+; Image file format multiplex plug-in.
+crystalspace.graphic.image.io.multiplex = imgplex
+; CrystalSpace BMP image format I/O plugin
+crystalspace.graphic.image.io.bmp = csbmpimg
+; CrystalSpace GIF image format I/O plugin
+crystalspace.graphic.image.io.gif = csgifimg
+; CrystalSpace JPG image format I/O plugin
+crystalspace.graphic.image.io.jpg = csjpgimg
+; CrystalSpace PNG image format I/O plugin
+crystalspace.graphic.image.io.png = cspngimg
+; CrystalSpace SGI image format I/O plugin
+crystalspace.graphic.image.io.sgi = cssgiimg
+; CrystalSpace TGA image format I/O plugin
+crystalspace.graphic.image.io.tga = cstgaimg
+; CrystalSpace WAL image format I/O plugin
+crystalspace.graphic.image.io.wal = cswalimg
+
+; ------------------------- Model Converter Plugins ---------------------- ;
+
+; Multiplexer for Model Converters
+crystalspace.modelconverter.multiplexer = ieplex
+; 3ds Model Converter
+crystalspace.modelconverter.3ds = ie3ds
+; ASE Model Converter
+crystalspace.modelconverter.ase = aseie
+; MDL Model Converter
+crystalspace.modelconverter.mdl = mdlie
+; MD2 Model Converter
+crystalspace.modelconverter.md2 = md2ie
+; OBJ Model Converter
+crystalspace.modelconverter.obj = objie
+; POV Model Converter
+crystalspace.modelconverter.pov = povie
+; SPR Model Converter
+crystalspace.modelconverter.spr = sprie
+
+; Modeldata-to-Meshobject cross builder
+crystalspace.mesh.crossbuilder = crossbld
+
+; ---------------------------Video Animation Plugins ----------------------- ;
+
+; CrystalSpace AVI format interface
+crystalspace.video.format.avi = csavi
+; CrystalSpace OpenDivX codec
+crystalspace.video.codec.avi.dvx1 = odivx4
+; CrystalSpace OpenDivX codec
+crystalspace.video.codec.avi.divx = odivx4
+; CrystalSpace RLE codec
+crystalspace.video.codec.avi.rle = rlecodec
+
+; ------------------------------- Other Plugins ----------------------------- ;
+
+; Level and library file loader
+crystalspace.level.loader = csparser:crystalspace.kernel., crystalspace.sound.loader., crystalspace.image.loader, crystalspace.mesh.loader., crystalspace.engine.3d, crystalspace.graphics3d., crystalspace.sound.render., crystalspace.motion.manager., crystalspace.mesh.crossbuilder, crystalspace.modelconverter.
+; Crystal Space loader services for textual CS syntax
+crystalspace.syntax.loader.service.text = cssynldr
+
+; Performance statistics utility
+crystalspace.utilities.perfstat = perfstat
+
+; Debugging utility
+crystalspace.utilities.bugplug = bugplug
+
+; Reporting utility
+crystalspace.utilities.reporter = reporter
+; Standard Reporter Listener
+crystalspace.utilities.stdrep = stdrep:crystalspace.utilities.reporter, crystalspace.console.output.
+
+; Crystal Space Scripting
+crystalspace.script.python = cspython
+crystalspace.script.lua = cslua
+
+; CrystalSpace RAPID CD System
+crystalspace.collisiondetection.rapid = rapid
+
+; Sequence Manager
+crystalspace.utilities.sequence = sequence
+
+; Skeletal Motion Manager for Crystal Space
+crystalspace.motion.manager.default = motion
+; Skeletal MotionLoader for Crystal Space
+crystalspace.motion.loader.default = motldr
+; Skeletal Motion Manager Saver for Crystal Space
+crystalspace.motion.saver.default = motldr
+
+; Crystal Space regular-expression-based scanner
+crystalspace.scanner.regex = cslexan
+
+;Crystal space alternate window manager
+crystalspace.window.alternatemanager = aws
+crystalspace.window.preferencemanager = aws
+crystalspace.window.sinkmanager = aws
+; Crystal Space Joystick plugin for Linux
+crystalspace.device.joystick.linux = csjoylin
+; iso engine level and library loader
+crystalspace.iso.loader = isoload:crystalspace.kernel., crystalspace.mesh.loader., crystalspace.engine.3d, crystalspace.graphics3d., crystalspace.engine.iso, crystalspace.syntax.loader.service.text
+
+
+
+
+
+
diff --git a/client/client94/sequence.dll b/client/client94/sequence.dll
new file mode 100644
index 0000000..e6f115a
Binary files /dev/null and b/client/client94/sequence.dll differ
diff --git a/client/client94/simpcon.dll b/client/client94/simpcon.dll
new file mode 100644
index 0000000..9d27b31
Binary files /dev/null and b/client/client94/simpcon.dll differ
diff --git a/client/client94/sndaiff.dll b/client/client94/sndaiff.dll
new file mode 100644
index 0000000..9a1e9b5
Binary files /dev/null and b/client/client94/sndaiff.dll differ
diff --git a/client/client94/sndau.dll b/client/client94/sndau.dll
new file mode 100644
index 0000000..6c039fa
Binary files /dev/null and b/client/client94/sndau.dll differ
diff --git a/client/client94/sndiff.dll b/client/client94/sndiff.dll
new file mode 100644
index 0000000..3368fdc
Binary files /dev/null and b/client/client94/sndiff.dll differ
diff --git a/client/client94/sndmod.dll b/client/client94/sndmod.dll
new file mode 100644
index 0000000..d7f400a
Binary files /dev/null and b/client/client94/sndmod.dll differ
diff --git a/client/client94/sndmp3.dll b/client/client94/sndmp3.dll
new file mode 100644
index 0000000..e0f5434
Binary files /dev/null and b/client/client94/sndmp3.dll differ
diff --git a/client/client94/sndogg.dll b/client/client94/sndogg.dll
new file mode 100644
index 0000000..512f761
Binary files /dev/null and b/client/client94/sndogg.dll differ
diff --git a/client/client94/sndplex.dll b/client/client94/sndplex.dll
new file mode 100644
index 0000000..a2591af
Binary files /dev/null and b/client/client94/sndplex.dll differ
diff --git a/client/client94/sndrdrds3d.dll b/client/client94/sndrdrds3d.dll
new file mode 100644
index 0000000..f5fe7e7
Binary files /dev/null and b/client/client94/sndrdrds3d.dll differ
diff --git a/client/client94/sndsoft.dll b/client/client94/sndsoft.dll
new file mode 100644
index 0000000..39f36a9
Binary files /dev/null and b/client/client94/sndsoft.dll differ
diff --git a/client/client94/sndwav.dll b/client/client94/sndwav.dll
new file mode 100644
index 0000000..4294102
Binary files /dev/null and b/client/client94/sndwav.dll differ
diff --git a/client/client94/sndwaveout.dll b/client/client94/sndwaveout.dll
new file mode 100644
index 0000000..3558774
Binary files /dev/null and b/client/client94/sndwaveout.dll differ
diff --git a/client/client94/snow.dll b/client/client94/snow.dll
new file mode 100644
index 0000000..17a67d6
Binary files /dev/null and b/client/client94/snow.dll differ
diff --git a/client/client94/snowldr.dll b/client/client94/snowldr.dll
new file mode 100644
index 0000000..d80572d
Binary files /dev/null and b/client/client94/snowldr.dll differ
diff --git a/client/client94/soft3d.dll b/client/client94/soft3d.dll
new file mode 100644
index 0000000..b8ec8a8
Binary files /dev/null and b/client/client94/soft3d.dll differ
diff --git a/client/client94/spiral.dll b/client/client94/spiral.dll
new file mode 100644
index 0000000..ea824e5
Binary files /dev/null and b/client/client94/spiral.dll differ
diff --git a/client/client94/spirldr.dll b/client/client94/spirldr.dll
new file mode 100644
index 0000000..c5a3d08
Binary files /dev/null and b/client/client94/spirldr.dll differ
diff --git a/client/client94/spr2d.dll b/client/client94/spr2d.dll
new file mode 100644
index 0000000..27ac933
Binary files /dev/null and b/client/client94/spr2d.dll differ
diff --git a/client/client94/spr2dldr.dll b/client/client94/spr2dldr.dll
new file mode 100644
index 0000000..fa84eb9
Binary files /dev/null and b/client/client94/spr2dldr.dll differ
diff --git a/client/client94/spr3d.dll b/client/client94/spr3d.dll
new file mode 100644
index 0000000..2cf07af
Binary files /dev/null and b/client/client94/spr3d.dll differ
diff --git a/client/client94/spr3dldr.dll b/client/client94/spr3dldr.dll
new file mode 100644
index 0000000..82d3597
Binary files /dev/null and b/client/client94/spr3dldr.dll differ
diff --git a/client/client94/sprie.dll b/client/client94/sprie.dll
new file mode 100644
index 0000000..a78c593
Binary files /dev/null and b/client/client94/sprie.dll differ
diff --git a/client/client94/starldr.dll b/client/client94/starldr.dll
new file mode 100644
index 0000000..bcadf36
Binary files /dev/null and b/client/client94/starldr.dll differ
diff --git a/client/client94/stars.dll b/client/client94/stars.dll
new file mode 100644
index 0000000..4d35fba
Binary files /dev/null and b/client/client94/stars.dll differ
diff --git a/client/client94/stdrep.dll b/client/client94/stdrep.dll
new file mode 100644
index 0000000..d7c8131
Binary files /dev/null and b/client/client94/stdrep.dll differ
diff --git a/client/client94/terrfldr.dll b/client/client94/terrfldr.dll
new file mode 100644
index 0000000..fd4a50b
Binary files /dev/null and b/client/client94/terrfldr.dll differ
diff --git a/client/client94/terrfunc.dll b/client/client94/terrfunc.dll
new file mode 100644
index 0000000..477c6da
Binary files /dev/null and b/client/client94/terrfunc.dll differ
diff --git a/client/client94/thing.dll b/client/client94/thing.dll
new file mode 100644
index 0000000..5a274a5
Binary files /dev/null and b/client/client94/thing.dll differ
diff --git a/client/client94/thingldr.dll b/client/client94/thingldr.dll
new file mode 100644
index 0000000..b9cc27a
Binary files /dev/null and b/client/client94/thingldr.dll differ
diff --git a/client/client94/vfs.cfg b/client/client94/vfs.cfg
new file mode 100644
index 0000000..16d1fcf
--- /dev/null
+++ b/client/client94/vfs.cfg
@@ -0,0 +1,105 @@
+; Some basic mount points
+VFS.Mount.~ = $(HOME)$/
+VFS.Mount.this = $.$/
+VFS.Mount.cdrom = $(CDROM)$/
+VFS.Mount.tmp = $(TMP)$/
+VFS.Mount.temp = $.$/data$/temp$/
+
+; Configuration repository
+VFS.Mount.config = $@data$/config$/
+; This directory is intended as a repository for common textures
+VFS.Mount.tex = $@data$/tex$/
+; The TTF font library
+VFS.Mount.fonts/ttf   = $@data$/ttf$/, $(TTF_PATH:$.$/)
+
+; Mount all known levels under the /lev/ directory
+VFS.Mount.lev/bezex    = $@data$/bezex.zip
+VFS.Mount.lev/city     = $@data$/city.zip
+VFS.Mount.lev/dmburg   = $@data$/dmburg.zip
+VFS.Mount.lev/flarge   = $@data$/flarge.zip, $@data$/flarge$/
+VFS.Mount.lev/isomap   = $@data$/isomap.zip, $@data$/isomap$/
+VFS.Mount.lev/infinite = $@data$/infinite.zip
+VFS.Mount.lev/large    = $@data$/large.zip
+VFS.Mount.lev/maze     = $@data$/maze.zip
+VFS.Mount.lev/mazedex  = $@data$/mazedex.zip
+VFS.Mount.lev/mdltest  = $@data$/mdltest$/
+VFS.Mount.lev/mirror   = $@data$/mirror.zip
+VFS.Mount.lev/newsky   = $@data$/newsky.zip
+VFS.Mount.lev/partsys  = $@data$/partsys.zip, $@data$/partsys$/
+VFS.Mount.lev/metaball = $@data$/metaball$/metaball.zip, $@data$/metaball$/
+VFS.Mount.lev/perf     = $@data$/perf.zip
+VFS.Mount.lev/rgb      = $@data$/rgb.zip
+VFS.Mount.lev/robot    = $@data$/robot.zip
+VFS.Mount.lev/room     = $@data$/room.zip
+VFS.Mount.lev/sea      = $@data$/sea.zip
+VFS.Mount.lev/simple   = $@data$/simple.zip
+VFS.Mount.lev/sky      = $@data$/sky.zip
+VFS.Mount.lev/sprite   = $@data$/sprite.zip
+VFS.Mount.lev/sydney   = $@data$/sydney.zip
+VFS.Mount.lev/terrain  = $@data$/terrain.zip
+VFS.Mount.lev/terrain2 = $@data$/terrain2.zip
+VFS.Mount.lev/yinan    = $@data$/yinan.zip
+
+; Levels used in Red Eye Entertainment CS Tech Demo
+VFS.Mount.lev/redeye01 = $@data$/redeye01.zip
+VFS.Mount.lev/redeye02 = $@data$/redeye02.zip
+VFS.Mount.lev/redeye03 = $@data$/redeye03.zip
+VFS.Mount.lev/redeye04 = $@data$/redeye04.zip
+
+VFS.Mount.lev/test1    = $@data$/test1$/
+VFS.Mount.lev/test2    = $@data$/test2$/
+VFS.Mount.lev/test3    = $@data$/test3$/
+VFS.Mount.lev/test4    = $@data$/test4$/
+VFS.Mount.lev/test5    = $@data$/test5$/
+
+VFS.Mount.data/blocks   = $@data$/blocks.zip
+
+; Mount all libraries under the /lib/ directory
+VFS.Mount.lib/std      = $@data$/standard.zip
+VFS.Mount.lib/stdtex   = $@data$/stdtex.zip
+VFS.Mount.lib/csws     = $@data$/csws.zip
+
+; Mount for AWS
+VFS.Mount.aws     = $@data$/awsdef.zip
+
+; The following should not change too often...
+; The idea is that everything that should be changed (such as CDROM variable)
+; is set by some sort of setup (installation) program.
+; Note that variables in VFS.Platform. section will override any
+; variables in VFS.PlatformAlias. section.
+VFS.Alias.Solaris = VFS.Unix
+VFS.Alias.Linux = VFS.Unix
+VFS.Alias.FreeBSD = VFS.Unix
+VFS.Alias.NetBSD = VFS.Unix
+VFS.Alias.Irix = VFS.Unix
+VFS.Alias.NextStep = VFS.Unix
+VFS.Alias.OpenStep = VFS.Unix
+VFS.Alias.MacOS/X = VFS.Unix
+VFS.Alias.BeOS = VFS.Unix
+VFS.Alias.DOS = VFS.CP/M
+VFS.Alias.OS/2 = VFS.CP/M
+VFS.Alias.Win32 = VFS.CP/M
+
+; strange key names follow:
+; VFS.Unix.. means key '.' in section VFS.Unix.*
+; VFS.Unix... means key '..' in section VFS.Unix.*
+VFS.Unix.. = .
+VFS.Unix... = ..
+VFS.Unix.CDROM = /mnt/cdrom
+VFS.Unix.TMP = /tmp
+; This is true at least for systems using XFree86
+VFS.Unix.TTF_PATH = /usr/X11R6/lib/X11/fonts/Truetype/
+
+VFS.CP/M.. = .
+VFS.CP/M... = ..
+VFS.CP/M.HOME = $(HOMEDIR:$(HOMEPATH:.))
+VFS.CP/M.CDROM = x:
+VFS.CP/M.TMP = $(TEMP:$(TMP:$(SYSTEMROOT)$/temp))
+
+VFS.Macintosh.. =
+VFS.Macintosh... = ..
+VFS.Macintosh.HOME =
+
+; The standard location of TTF fonts is the X:\Windows\fonts directory
+VFS.Win32.TTF_PATH = $(SYSTEMROOT)$/fonts$/
+
diff --git a/client/client94/vfs.dll b/client/client94/vfs.dll
new file mode 100644
index 0000000..992d14f
Binary files /dev/null and b/client/client94/vfs.dll differ
diff --git a/client/client94/vorbis.dll b/client/client94/vorbis.dll
new file mode 100644
index 0000000..02e3796
Binary files /dev/null and b/client/client94/vorbis.dll differ
diff --git a/client/client94/vorbisfile.dll b/client/client94/vorbisfile.dll
new file mode 100644
index 0000000..fc10d7d
Binary files /dev/null and b/client/client94/vorbisfile.dll differ
diff --git a/client/client94/xmlparse.dll b/client/client94/xmlparse.dll
new file mode 100644
index 0000000..0fe4697
Binary files /dev/null and b/client/client94/xmlparse.dll differ
diff --git a/client/client94/zlib.dll b/client/client94/zlib.dll
new file mode 100644
index 0000000..fd661fa
Binary files /dev/null and b/client/client94/zlib.dll differ