CobbleStones

Announce new projects or updates of Irrlicht Engine related tools, games, and applications.
Also check the Wiki
Post Reply
Seven
Posts: 1034
Joined: Mon Nov 14, 2005 2:03 pm

CobbleStones

Post by Seven »

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.

Image

Image
Seven
Last edited by Seven on Tue Nov 20, 2007 2:24 am, edited 2 times in total.
Neirda
Posts: 53
Joined: Fri Feb 23, 2007 4:41 pm
Location: Chengdu, China

Post by Neirda »

Absolutely interesting.
I'll follow it carefully !

Do you plan to implement ready-to-use graphic content or letting this task to the user ?
rogerborg
Admin
Posts: 3590
Joined: Mon Oct 09, 2006 9:36 am
Location: Scotland - gonnae no slag aff mah Engleesh
Contact:

Post by rogerborg »

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
Seven
Posts: 1034
Joined: Mon Nov 14, 2005 2:03 pm

Post by Seven »

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.
krama757
Posts: 451
Joined: Sun Nov 06, 2005 12:07 am

Post by krama757 »

You may want to check out the Neverwinter Nigthts (Game) DM tool if you want some more inspiration...its very similar to your idea :)
Seven
Posts: 1034
Joined: Mon Nov 14, 2005 2:03 pm

A few changes

Post by Seven »

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

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.
Dorth
Posts: 931
Joined: Sat May 26, 2007 11:03 pm

Post by Dorth »

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 :)
Last edited by Dorth on Mon Mar 03, 2008 6:13 pm, edited 1 time in total.
greenya
Posts: 1012
Joined: Sun Jan 21, 2007 1:46 pm
Location: Ukraine
Contact:

Post by greenya »

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 :(
christianclavet
Posts: 1638
Joined: Mon Apr 30, 2007 3:24 am
Location: Montreal, CANADA
Contact:

Post by christianclavet »

Hi, you could check my editor source, it could help you in your project.

I have Items moving in all views (include perspective) with the mouse. (Rotation and scale are also supported).
PuG
Posts: 13
Joined: Wed Mar 05, 2008 12:11 pm

Post by PuG »

same here, 0 bytes - but looks good!
Post Reply