I'm a programmer, doing mostly some boring business software stuff. I've always been interested in game development but I do not feel smart enough to do it seriously for business. So I just read game development books, articles and I try to follow the tendencies and try some engines just for fun.
For some years already, I have an idea on my mind but I hesitate to get coding because I foresee the vast amount of work required. At first I thought it would be the best to collect my own engine myself using available libraries like Ogre3D, enet, OpenAL and Bullet physics but then I still need various tools to import files, create maps and game objects etc.
So I tried to find some game engine which is free and does not limit me. There are really just a few free engines and even less engines that provide full source code.
And today I found Cafu. The feature list is pretty impressive - almost everything that any modern game would need, and with various development tools and source code. I guess, Cafu is the best I can get for now.
But still there are some doubts about how my own "game ideas" could be integrated with the Cafu Engine.
Here is my idea of my personal "game".
It is something like SIMS game in a networked sandbox. I intend to have a city with traffic and NPC people wandering around. At first, there will be not much action going on. The game is mostly centered around interaction with NFC and the environment, so there is no need for much action. Just a large collection with various parameters which control how NPCs interact with each other and with my own avatar, when I log on to the server with a 3D client.
So far I guess, Cafu has everything to support my idea (and much more).
But now my implementation ideas:
- the city is simulated on a central game server which runs the simulation, no matter if any client is connected or not (it does renderless simulation if nobody is connected)
- the game state is flushed to a database (most probably I'll go for mysql - I have a good experience with it and I know that even some successful MMORPGs are using SQL databases to store game state. To avoid stalling the game, the state will be saved to the database in a background thread periodically or when the changes in the state reach some certain RAM limit, and also on demand when stopping the server)
- to make game state management, networking and persistence easier, I intend to implement game entities as simple property bags. No behavior at all. The game behavior will be implemented as subsystems where each subsystem subscribes to certain events and also generates certain events. I've heard some people have very positive experience with such architecture and I have some experience with it in browser based PHP/HTML/Javascript games, so I hope it will work fine in a real-time 3D virtual world simulator
- I would like to have a in-game avatar editor, something similar to SIMS, so I could adjust some facial and body features, choose textures and then hit Apply, and then my tweaked mesh parameters get baked into a new avatar mesh, which is stored in a file.
Basically, that's all.
I have two general questions:
- are there any Cafu implementation specific details which could stop me from implementing something the way I need (my pub/sub systems idea and behaviorless game entities)?
- what does Cafu provide for game state storage in SQL databases and editing avatars?
Also a little question about animations: what kind of animations are supported - skeletal or vertex/morph animations or both?
And one confusing thing: Cafu feature list says:
I have already seen somewhere that Cafu has Bullet Engine integrated, so then why is this text in the feature list?In addition, the integration of a physics engine is planned for one of the next releases.