Caelum Engine

Thanks go to Spacebeans for the banner

The Caelum Engine is, in a nutshell, my attempt at making a game engine. Its goal is to support:

  • Any dimension (2D, 3D, both)
  • Most any internal architecture design
  • Any type of game (FPS, RTS, w/e)
  • On any platform (Android, PCs, others)

Currently it is a heavy WIP, and not yet usable for developing a game, but it’ll get there.

Planned features include (For now):

  • Rendering (2D, 3D, with lighting)
  • Physics (2D, 3D, perhaps with Box2D and/or JBullet support)
  • Input (Mouse, keyboard, with room for more)
  • Sound
  • Networking
  • Pretty much anything else a game needs :stuck_out_tongue:

My current To-do list currently consists of:

  • Properly integrating the asset system into the rest of the engine
  • Implementing proper model support
  • Writing a JBullet port; Will mostly consist of refactoring it to use Caelum’s math package
  • Implementing lighting

You can find its GitHub repo right here
There is now an IRC channel: #caelumengine at EsperNet

Documentation, tutorials, etc. are coming soon, so feedback is important.

Will it have physics? If so, Box2D or custom?
Java2D or a opengl port? If openGL, which port?

Supporting all platforms and all game types is ambitious.

Yes, physics are a must for both 2d and 3d, and I might just use Box2d.

Java2d will be supported via a custom game environment, but natively, OpenGL all the way. Because the 3d portion of the engine uses it, I’ll use the programmable pipeline. It’s more difficult to work with, but it beats writing support for two different OpenGL versions.

Yes, yes it is.

How this differ from Unity?

Unity is a full blow commercial game engine with tons of features,
this is a 1 month hobby project. :emo:

9 months, actually; I did a lot of mind changing. :stuck_out_tongue:

But mine is open source, so there’s that.

Hi

I don’t see the interest of creating another engine alone except for pedagogical purposes. LibGDX already does what you claim your engine will do. Good luck.

This is just a what is expected to come now. This isn’t functional yet. When it is, it will do way more than is expected. It has a great potential! I feel this engine will go far with game development. Good job, Elusivehawk.

In part, I did make this to learn more about what goes into programming a game; But personally, I don’t really care that much for LibGDX.


Update: I’m going to put a to-do list in the OP; My current priorities include finishing the asset system, implementing lighting, and creating a JBullet wrapper/port, in that order.

My advice: Don’t wrap for the sake of wrapping.
Provide some new functionality. Don’t just give the user a whole new load of classes to use that simply call a method in some other library.

Secondly, don’t duplicate functionality that already exists. Some of your classes could easily be replaced with already existing ones, even within the libraries which you’re using, yet for some reason you’re providing half-baked implementations. Sometimes it’s nice to have simplicity of course, but if something exists that perfectly does your job, why go and make something that doesn’t and use that instead?

With those two in mind, the following is a bad idea:

Finally, if you’re expecting other people to use your code, stick to standards. Your [icode]SimpleList[/icode] does not fulfill the requirements of the [icode]List[/icode] interface. Note the following:

Replacing it with null is not removing.

Other than those few things, this looks decent. I went into the code expecting some newbie making a library for things they don’t even understand, but was surprised to find you for the most part know what you’re doing. (No offense, but when someone says they’re making a library that supports ‘all types of game’, that turns on warning bells)

The LWJGL package is just a game environment, and as such, is meant to be compartmentalized from the rest of the engine. Also, having my own Matrix and Vector classes enables me to implement features into them on a need-to basis, not to mention LWJGL’s implementations can’t be iterated through.

The reason why I’ll have my port of JBullet use my math package, aside from including it in the above Vector features, is because I encountered a good deal of errors (~1200, IIRC) the last time I gave porting it a shot not that that long ago, and a fair amount of said errors were caused by a lack of a Vector3f class.

Now, things like SimpleList have a flaky implementation, I won’t bother denying it; It’s just that I spend my time in some areas for some time, then move on; As a result, some things have been given a “bandage” implementation. I’ll fix SimpleList in particular ASAP.

None taken; I’ve spent a lot of time working on this engine, so it’s good to know that I did it remotely correct.

With that said, thank you for taking the time to reply; It means a lot to me.

What’s wrong with just including the JBullet libs and then wrapping them for whatever functionality you want to add?

Strictly from a “Making new Vectors to wrap around the different Vector classes libraries X and Y use” stance:

  • It’ll waste memory, on something people already use pooling to help curb.
  • It’ll probably mean more wrapping, or pooling (To keep the new Caelum Vectors consistent)
  • Or, just plain inconvenience on the part of the game programmer.

Now, again, some of this could be mitigated by using pooling, but not only would that be completely inappropriate for certain Caelum Vector features (Looking at you, IVectorListener), but it’ll also be difficult to manage given Vector’s type casting. EDIT: I took out that stupid type casting, but I’m still not pooling my vectors just yet.

Also, it seems that JBullet out of the box is somewhat reliant on LWJGL, which probably won’t end well if you’re using Android.

Ok, that’s what I meant by “pedagogical purposes” but don’t expect tons of developers will use your engine especially if it provides no new feature and if it is less documented than existing engines, that’s why I talked about LibGDX. When I started 3D in Java, I used a 3D engine written by an artist (d3caster) and as far as I know, his source code was under GPL and I was the only guy who used his engine for a public project. Even Ardor3D is used only by at most tens of developers.

I looked at your source code, I agree with most HeroesGraveDev’s remarks and for the moment, there aren’t a lot of comments.

Do you develop a game side by side with the engine ?

Okay, but I’m going to stay optimistic nonetheless.

I used to, to the point where it was in the game’s repository for its first 3 months. Now I’m working on it until it’s in a usable state, afterwards I’m going to do just that once again.

What do you mean exactly? Other famous engines have a lot more very experienced contributors, especially JMonkeyEngine and LibGDX, don’t expect to succeed in competing with them alone especially if you don’t have a lot of experience but you can and you will probably learn tons of things by writing your own engine.

Hey you have this code in [icode]RenderTicket.java#L53[/icode]


vbo = new VertexBufferObject(GLConst.GL_VERTEX_ARRAY, this.buf, GLConst.GL_STREAM_DRAW);

Should that use [icode]GL_ARRAY_BUFFER[/icode] instead of [icode]GL_VERTEX_ARRAY[/icode]?

Just a doubt.

Well, after looking at the relevant code, and OpenGL’s docs, I question how on Earth that constant got there in the first place; I’ve already pushed a commit to fix it, and I thank you for bringing it to light.

This engine has so much to come and it is really amazing. It may not be usable now but when it is, it will be offering a lot. I can see you have put a lot of time making this day after day to make a new type of engine that work well and easy to use. This game engine is just the beginning to an all new gaming experience. Elusivehawk has put crazy amounts of time into this as far as I can tell. He is doing a wonderful job. Great job Elusivehawk!