Making ioquake3 a modern game creation tool

What does ioQuake 3 need to become a good choice for indie developpers ?

  • A Physics Engine support : ODE or Bullet seem quite popular and reliable. Any game engine, in 2014, should have some physics to do make objects and stuff break and fall in a natural way.

  • More fexible system for model animations : The legacy quake 3 character animation convention is obsolete by modern standards (in terms of the use of 3 separated vertex animated models and in the way it is implemented). We need a system that’s easier to understand, and functions that make it easy to blend poses and dynamically modify the angles of the skeleton (ex : to make the head of a character look at something in the scene). With a physics engine around, a process to turn rigged characters / objects into ragdolls is concievable.

  • A particle system : Along with a particle system editor, this kind of tool makes it very efficient to create various effects (smoke, explosion) without having to hard code it in cgame.

  • Implement a mesh collision ray tracer, so that people don’t have to use basic hitboxes or sphere collision.

  • A good quality, structured documentation. I’m going to get the « mod programming for Quake 3 arena book » soon, but It would be excellent if newbies had a tutorial serie that focuses not only on modifying the original Quake 3 but also examples of how it can be possible to create very different types of games (puzzle, platform, fighting / beat’em all). Not a complete tutorial for each kind of game, but some clues about where and how to start.

  • Here comes a problem very specific to quake 3 Arena : it relies too much on external maps for everything. In a lot of games this might do the trick, but for other, the game area can be procedurally generated (for puzzles or strategy for example). I tried to make a first-person Luftrauser clone in 2013, and I strugguled a lot to make the game area « loop » around (giving the feeling it’s infinite)(http://www.youtube.com/watch?v=4nOp1JKbiSE).

  • Therefore, the engine really needs something to take the game coding closer to the level editing. Right now, adding new entities in the code doesn’t make the accessible right away in GtkRadiant. You have to carefully add your new definitions manually.

A good example of what can be done, in terms of toolset, is Unity 3D. That « all in one » package that makes it easy to do a lot of things that we don’t even have in Quake 3 or that right now requires a long time to adapt. Particles, animation management, and more could be presented in a WYSIWYG way. With different rendering technology, levels could also be compiled and run in the game on the fly.

This is just a quick list of thoughts, inspired by my experience of the engine last year.

I know this might not be the objective of the ioQuake3 dev team.

Unity 3D also costs $1500 (if you want things like shadows) and has a team of developers working on it full time.

I’m happy to have improvements, please submit pull requests to our github, but we are never going to be competitive with that kind of package without a significant amount of effort from an influx of new developers interested in the project.

  • Physics: Yes, that would be awesome, but unfortunately that would require modifying the qvm in some way that would break running q3a, or so I was told.

  • Models: IQM support was added, and recently the ability to blend animations was also added so no more need to separate a character model into 3 or more pieces.

  • Particle system: This would be great, especially if it’s integrated with the physics so you can simulate cascading water, like in this demonstration. As for a particle editor, I think Blender would work fine.

  • Ray trace collisions: I think per-bone hitboxes would be more efficient, but hey.

  • Documentation: Yep, q3 is almost 15 years old now or something, so a lot of resources from back in the day have disappeared, and that’s quite a shame.

  • Mapping: Now what you’re describing is known as a scene-graph, and that would require a lot of work to add that feature, however, this would be great, especially if one could still load BSP’s within the scene to keep backwards-compatibility. It’d also be great if radiant was updated to be able to export maps as collada files which can be loaded by other engines/3D editors/etc.

  • That last thingy: Also some sort of scripting environment would be nice, as compiling scripts is a bit of a pain, and not everyone will be able to figure out how to set up the compiler. It’s a lot easier and quicker to just save some code as a text file and run it than to set up some coding environment with an IDE. Perhaps Squirrel or Lua…

ioquake3 does not support blended animations. IQM still requires using 3 separate models. It requires Mod API changes, which insofar ioquake3 hasn’t extended.

I thought someone added that or was working on it?

Xreal supports it for MD5. I don’t remember that anyone was doing it with ioq3+IQM. I’ve tried to get it working in Spearmint+IQM, but have not yet. IQM and it’s confusing matrix math. ._.

from http://sauerbraten.org/iqm/iqm.txt I see that the joints orientation aren encoded with quaternions. I implemented some quaternion math one year ago to make my descent-like camera control (http://www.youtube.com/watch?v=pwdo9AVaaCI). It was indeed very hard, since that 4 float array is always abstract … Here are a few things that helped me : Euclideanspace.com, and Blender, who helped me understand the trick of the euler angles order. Contact me if you have some questions :slight_smile: I’ll be happy to share my experience.

You mean exporting a particle system object from blender ? it could be a good start !

I’m sorry, I meant no offense. Just sharing some thoughts … and Right now I’m quite lost in my personal projects so I can’t offer any help. sorry ):

Yeah, keeping q3a compatible might be tricky. But the client / server separation makes it clear on what you want to do : There are some things that can be always client side, for things that never influence the gameplay, and other things on the server side (if someone wants to add some boxes that the player have to move around for example).

Yeah that system would work for characters, but in the project I had, the player had to shoot planes (http://hpics.li/ef90b08), and one simple hitbox was I think not good enough … Is it possible to combine multiple hitboxes ?

@dmeat. 100 % agree with you dmeat!
Most important thing (personally) is physics engine and IQM support.
If you have the skills (which I do NOT have) than check for idtech2 engines IQM + ragdoll physics (e.g.: here):

http://svn.icculus.org/alienarena/trunk/source/ref_gl/r_ragdoll.c?revision=4094&content-type=text%2Fplain

Although everything works relatively fine there, I was not able to port it to ioquake3 (idtech3).
Maybe this is a good point to get a feel for IQM and ragdolls for you!?

I’m sorry, right now I’m in some sort of depressive state and I can’t even find the will and power to work on jobs other people gave me … and I’m taking a break on programming until I feel a bit better on my art skills (I’m more of an artist).

But I’m really happy to talk with people nonetheless !