CobbleStones
CobbleStones
Have you ever had a dream to create something that you can envision in your mind, and then, after years of learning and practicing, finally feel that you have the ability to create it?
Enter the world of CobbleStones, my dream for the past few years.
CobbleStones is a world editor that allows you to run a small DnD style adventure in real time. It is my goal to create an editor which allows 3 -4 players to join a networked DnD style game in which one of them acts as the Dungeon Master. The players utilize a full screen, Irrlicht driven world in which they wander aimlessly around saving the world, killing some beast, stealing some treasure or the like. In the mean time, the Dungeon Master utilizes a MFC SDI application and has complete control over the world (i.e. insert, delete, modify and pause the game in real time). As the players wander around, the DM can drop in nasty little surprises for them, or he can simply create a predefined level for them to roam. The base editor is in place and I am beginning the addition of content suitable for the game style.
I am interested in working with a few (2?) additional programmers who are interested in creating this type of application. The code base that i am creating uses a unique approach which allows others to create game content in their own style and then easily integrate it into the object system. I can certainly provide details to anyone interested, but will refrain from spouting here too terribly badly
If you are interested in assisting with this project, please feel free to contact me and we can chat. I am very dedicated towards the completion of this app and am willing to dedicate time and resources to it's end.
Thanks for reading my ramblings.......
here are a couple of pictures of the base editor - it is minimally functional at this stage but growing in capability daily. I have a SourceForge project pending approval. As things progress, I will update this posting with screen shots.
Seven
Enter the world of CobbleStones, my dream for the past few years.
CobbleStones is a world editor that allows you to run a small DnD style adventure in real time. It is my goal to create an editor which allows 3 -4 players to join a networked DnD style game in which one of them acts as the Dungeon Master. The players utilize a full screen, Irrlicht driven world in which they wander aimlessly around saving the world, killing some beast, stealing some treasure or the like. In the mean time, the Dungeon Master utilizes a MFC SDI application and has complete control over the world (i.e. insert, delete, modify and pause the game in real time). As the players wander around, the DM can drop in nasty little surprises for them, or he can simply create a predefined level for them to roam. The base editor is in place and I am beginning the addition of content suitable for the game style.
I am interested in working with a few (2?) additional programmers who are interested in creating this type of application. The code base that i am creating uses a unique approach which allows others to create game content in their own style and then easily integrate it into the object system. I can certainly provide details to anyone interested, but will refrain from spouting here too terribly badly
If you are interested in assisting with this project, please feel free to contact me and we can chat. I am very dedicated towards the completion of this app and am willing to dedicate time and resources to it's end.
Thanks for reading my ramblings.......
here are a couple of pictures of the base editor - it is minimally functional at this stage but growing in capability daily. I have a SourceForge project pending approval. As things progress, I will update this posting with screen shots.
Seven
Last edited by Seven on Tue Nov 20, 2007 2:24 am, edited 2 times in total.
-
- Admin
- Posts: 3590
- Joined: Mon Oct 09, 2006 9:36 am
- Location: Scotland - gonnae no slag aff mah Engleesh
- Contact:
Do you have a design for the network architecture and the client and server state machines?
Please upload candidate patches to the tracker.
Need help now? IRC to #irrlicht on irc.freenode.net
How To Ask Questions The Smart Way
Need help now? IRC to #irrlicht on irc.freenode.net
How To Ask Questions The Smart Way
Sorry for the delayed response. It's been a busy couple of days.
The content will be dtermined by the end user. The editor uses an object class that I believe is fairly unique. The objects can be created by the end user and inserted into the editor. The editor in turn can edit the exposed variables. The interesting thing to me is that the objects are not reliant on the editor and can be created independently. I am hoping that the idea catches on and I can create a user following which submits objects to the website for others to use. Difficult to go into detail, but it's a later date item anyways
I do not have the networking setup at this point. The editor is simply a level editor for right now, but the objects are designed to use a network at a later date.
I hope to have a demo ready today for folks to play around with.
The content will be dtermined by the end user. The editor uses an object class that I believe is fairly unique. The objects can be created by the end user and inserted into the editor. The editor in turn can edit the exposed variables. The interesting thing to me is that the objects are not reliant on the editor and can be created independently. I am hoping that the idea catches on and I can create a user following which submits objects to the website for others to use. Difficult to go into detail, but it's a later date item anyways
I do not have the networking setup at this point. The editor is simply a level editor for right now, but the objects are designed to use a network at a later date.
I hope to have a demo ready today for folks to play around with.
A few changes
Update 3-1-2008
Cobblestones is moving along rather well now. The base object class is done, as is the level class. I integrated Irrnewt into it all, so there is now a physics side to things.
CSApp - container for the application
CSEngine - easily create the Irrlicht 'stuff'. Wrapper for gui, driver, device etc...
CSObject - base object class with little data or code. All game objects
derived from it.
CSLevel - container for the object factory. the object factory is pretty cool if I do say so myself. explanation following.
The factory scans the 'objects' directory and creates a list of available objects. These objects are in their own DLL files and the factory looks for a specific function residing in the DLL file. It then builds a list of DLL's and the object classes available in each one (there can be multiple object classes in a single dll file) The objects can then be created by calling the CreateObject(char* objecttype) function in the DLL, added to the factory, and then used in the game. What this allows me to do is create a single application that never needs recompiled. The application simply scans for objects, loads then according to a script and then the objects are completely aware of the world and other objects, but the world is not aware of them. A little hard to explain, but exciting for me none the less.
an example file
to use this object, I can simply do this........
anyhow, enough rambling. If you would like to check it out, feel free to download the demo. It isnt the most stable program in the world, so if you try to break it, I am sure that you will succeed.
http://zedit.wiki.sourceforge.net/space ... esDemo.ace
commands
Cobblestones is moving along rather well now. The base object class is done, as is the level class. I integrated Irrnewt into it all, so there is now a physics side to things.
CSApp - container for the application
CSEngine - easily create the Irrlicht 'stuff'. Wrapper for gui, driver, device etc...
CSObject - base object class with little data or code. All game objects
derived from it.
CSLevel - container for the object factory. the object factory is pretty cool if I do say so myself. explanation following.
The factory scans the 'objects' directory and creates a list of available objects. These objects are in their own DLL files and the factory looks for a specific function residing in the DLL file. It then builds a list of DLL's and the object classes available in each one (there can be multiple object classes in a single dll file) The objects can then be created by calling the CreateObject(char* objecttype) function in the DLL, added to the factory, and then used in the game. What this allows me to do is create a single application that never needs recompiled. The application simply scans for objects, loads then according to a script and then the objects are completely aware of the world and other objects, but the world is not aware of them. A little hard to explain, but exciting for me none the less.
an example file
Code: Select all
// The following ifdef block is the standard way of creating macros which make exporting
// from a DLL simpler. All files within this DLL are compiled with the CSOBJECT_ITEM_EXPORTS
// symbol defined on the command line. this symbol should not be defined on any project
// that uses this DLL. This way any other project whose source files include this file see
// CSOBJECT_ITEM_API functions as being imported from a DLL, whereas this DLL sees symbols
// defined with this macro as being exported.
#ifdef CSOBJECT_ITEM_EXPORTS
#define CSOBJECT_ITEM_API __declspec(dllexport)
#else
#define CSOBJECT_ITEM_API __declspec(dllimport)
#endif
#include "CSApp.h"
// This class is exported from the CSObject_Item.dll
class CSOBJECT_ITEM_API CSObject_Item : public CSObject
{
public:
// class contrcutor / destructor
CSObject_Item::CSObject_Item() { Initialize(); }
virtual CSObject_Item::~CSObject_Item() { Cleanup(); }
// set all variables to a knwon value
virtual void Initialize()
{
// begin the state machine
CSStateMachine::Initialize();
}
// dual creation allows for better error handling
virtual bool Create(CSLevel* level)
{
// create the base class, this assigns an ID to the CSObject
CSObject::Create(level);
SetName("CSObject_Ball");
// grab a few useful pointers
video::IVideoDriver* driver = level->m_App->m_Engine->m_Driver;
scene::ISceneManager* smgr = level->m_Smgr;
scene::ICameraSceneNode* camera = level->m_Camera;
// add a simple sphere
m_Node = smgr->addSphereSceneNode(25);
m_Node->setMaterialFlag(video::EMF_LIGHTING,false);
m_Node->setMaterialTexture(0,driver->getTexture("media/water.jpg"));
m_Node->setID(GetId());
// create the newton body
m_Newton_Body = level->m_NewtonWorld->createCharacterController(
level->m_NewtonWorld->createBody(m_Node));
m_Newton_Body->setUserData((void*)this);
m_Newton_Body->setMaterial(level->Newton_Material_Fireball);
SetGravity(true);
return true;
}
virtual bool Cleanup()
{
Initialize();
return false;
}
virtual void Frame()
{
CSObject::Frame();
}
virtual void Collision()
{
SetState(STATE_COLLISION);
}
virtual bool ProcessStateMachine(CSObjectMessage* msg)
{
BeginStateMachine
// when Entering the state machine, default to idle
OnEnter
SetState(STATE_CREATE)
State(STATE_CREATE)
// nothing special
State(STATE_IDLE)
OnEnter
// set the objects velocity to 0
if (m_Newton_Body)
{
m_Newton_Body->setTorque(vector3df(0,0,0));
m_Newton_Body->setVelocity(vector3df(0,0,0));
}
State(STATE_COLLISION)
OnEnter
State(STATE_DYING)
OnEnter
m_Timer = 0;
OnUpdate
m_Timer++;
SetState(STATE_DEAD);
State(STATE_DEAD)
OnEnter
SetDead(true);
EndStateMachine
}
};
extern "C"
{
CSOBJECT_ITEM_API bool QueryIsCSObject();
CSOBJECT_ITEM_API bool QueryIsObjectType(char* objecttype);
CSOBJECT_ITEM_API void* CreateObject(char* objecttype);
CSOBJECT_ITEM_API char* QueryAllObjectTypes();
CSOBJECT_ITEM_API char* QueryObjectDescription(char* objecttype);
};
Code: Select all
// CSObject_Item.cpp : Defines the entry point for the DLL application.
//
#include "stdafx.h"
#include "CSObject_Item.h"
#ifdef _MANAGED
#pragma managed(push, off)
#endif
BOOL APIENTRY DllMain( HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}
#ifdef _MANAGED
#pragma managed(pop)
#endif
/////////////////////////////////////////////////////////////////////
// these functions MUST be implemented in every game object class
// so that the CSObjectFactory can locate and create the objects
/////////////////////////////////////////////////////////////////////
// simple test to determine if dll holds a CSObject class
bool QueryIsCSObject()
{
return true;
}
// define this for ease of reading
#define OBJECTTYPE "CSObject_Item"
// tell all of the object classes that reside in this dll.
#define ALLOBJECTTYPES "|CSObject_Item|"
// simple function to determine the type of CSObject this dll holds
bool QueryIsObjectType(char* objecttype)
{
return (!stricmp(objecttype,OBJECTTYPE));
}
// simple fucntion to determine the type of CSObject this dll holds
char* QueryAllObjectTypes()
{
return ALLOBJECTTYPES;
}
// create a reference of the object type
void* CreateObject(char* objecttype)
{
if (!stricmp(objecttype,"CSObject_Item"))
{
// temporary variable
CSObject_Item* object = NULL;
// attempt to instantiate the object
object = new CSObject_Item();
// if we succedded
if (object)
{
// return the object we creaed in case someone wants the pointer.
return object;
}
}
// something went wrong
return NULL;
}
// simple function to access a description of the objects in this dll
char* QueryObjectDescription(char* objecttype)
{
if (!stricmp(objecttype,"CSObject_Item"))
{
return "This object is intended to be used as a test pattern\n\
It really serves no purpose except to test the application\n\
The excitement comes from the fact that the\n\
application knows nothing of the object.";
}
return "UNKNOWN";
}
/////////////////////////////////////////////////////////////////////
// end - these functions MUST be implemented in every class
/////////////////////////////////////////////////////////////////////
to use this object, I can simply do this........
Code: Select all
int id = CreateObjectByType("CSObject_Item");
CSObject* b = m_Factory->GetObjectPointer(id);
if (b)
{
b->SetPosition(m_Camera->getPosition());
b->SetRotation(m_Camera->getRotation());
b->AddForwardForce(500);
}
anyhow, enough rambling. If you would like to check it out, feel free to download the demo. It isnt the most stable program in the world, so if you try to break it, I am sure that you will succeed.
http://zedit.wiki.sourceforge.net/space ... esDemo.ace
commands
Code: Select all
ESCAPE always brings you to the top level menu class
Editor - a simple test bed for the editor object.
.... right click toggle mouselook vs selecting
.... tab1 a list of currently created objects - mo interaction
.... tab2 a list of available classes to create
........... feel free to create
.... left click and hold to select object.
........ move left clicked mouse to move object
............. hold shift key to affect 'Y' coordinates of object
Newton Test - looks empty, but is the most powerful
..... right click toggle mouselooks vs selection
..... tab key toggles editor mode (no camera move while in editor mode)
.........same as editor above
if not editor mode, then left click creates ball that interacts with world.
Slideshow - a simple test of the menu system
...... scrollbar determines slideshow speed
Meshviewer - another test of the menu system. nothing special in here yet.
Ah ah a, nice!
I was playing with and had built the basic of a very similar idea myself, to see it realized is nice. My friend had a lots of doubt about it's efficiency, so let me know how it goes
I was playing with and had built the basic of a very similar idea myself, to see it realized is nice. My friend had a lots of doubt about it's efficiency, so let me know how it goes
Last edited by Dorth on Mon Mar 03, 2008 6:13 pm, edited 1 time in total.
Nice idea!
Want to check the demo, but at this url:
http://zedit.wiki.sourceforge.net/space ... esDemo.ace
i getting only file 0 bytes long
Want to check the demo, but at this url:
http://zedit.wiki.sourceforge.net/space ... esDemo.ace
i getting only file 0 bytes long
-
- Posts: 1638
- Joined: Mon Apr 30, 2007 3:24 am
- Location: Montreal, CANADA
- Contact: