Updated July 10, 2005
HOME PAGE > REBEL ACT DEVELOPPERS > CARLOS GARCIA CORDERO
Programmer:
Carlos García Cordero
I studied
Mathematics in the Complutense University of Madrid, when I finished I taught
programming in an academy for other Mathematics students and translated several
books from English to Spanish. This does not mean that I have a good English,
those books were technical ones and their English was very easy to understand.
At that time, about five years ago, I had a friend who knew that Friendware was
forming a development group for creating videogames, I had always liked videogames
a lot (a friend and me did a videogame for the spectrum that was almost
published), and so I got in touch with them.
I
work with two monitors, that's the reason why the image is so wide. In the left
one you can see the game window, i turned on toon render to make it a little
different from most of the screen shots that you can see. Visual C++ is under
it. In the other monitor is the game console and PythonWin that is the editor I
use to edit Python files.
I saw a
demo of an Intel product that did toon rendering and liked it a lot, later I
read an article in game developer about that and decided to implement it in
Blade. The basic algorithm for shading is based in the one that appeared in
game developer, the rest are experiments I did. I'm quite pleased with the
result. It's done at the raster level; the rest of the engine doesn't know
anything about it. This limits a little the information that I can use to
implement different effects; I don't want to slow the normal rendering to
improve toon render. Unfortunately now I have very little spare time, we are
working extra time to finish Blade. I was thinking about implementing a
watercolour look, but this, as well as a line-shading mode that is half done,
will have to wait until Blade is finished.
I don't
know if it will be released. It's only implemented in the OpenGL raster. Blade
has switched to D3D for commercial reasons and as I do this for fun, I'm not
going to port it to D3D. Maybe the OpenGl raster will be released as an
unsupported option (it has other extra stuff also), but I can't promise
anything. It is a little more difficult to play in toon mode because you tend
to look around to see the environment and when an enemy attacks, you are still
looking at it saying "Its very cute!!"
In the
PythonWin window (the right part of the desktop) you can see a tree with the
classes and functions of that file. This file defines the basic behaviour of
the non-player characters. There is a class for every type of enemy, in this
file is one of the most basic classes. These classes define the call-back
functions that are triggered when something happens (the character has been
attacked, has seen another entity etc.), the derived classes refine the
behaviour. For example, the function RespondToHit is called when the characters
have been hit and launches the appropriate hurt animation, decreases the life
etc.
I have
done a lot of things in Blade, after all, I've been here for quite a while.
I've done several tools, including the LED. I did the port to Windows (the
first engine run in DOS) and I've done almost all the Glide raster and all the
OpenGL raster. In the game I've done a lot of internal work. I did the entities
system with their attributes and methods (well, I did the first ones, other
programmers have completed it), added the scripting module with Python and the
first scripts (mostly as examples), several graphic effects... and a couple
extra things that I don't remember or I prefer to forget :).
The LED
must be updated. It was done a long time ago and has only had a couple of bug
fixes since then. The 2D/3D integration must be improved as well as the entity
treatment. When the LED was done, the script system wasn't finished (by the
way, the LED has a script interface, which I did as an example to see how it
worked and if it was adequate for Blade) and the entities system was still in
design. Although it worked very well on my Pentium 90, we have Pentium III
500's and up now, and it could use the extra power.
There are
also a couple of features that have not been tested much, like hierarchical
grouping. There is a Depeche Mode icon to activate the grid, I think that Enric
would like it if I improve this and add an MP3 player to listen to Depeche Mode
music. I think that Prodigy would be OK too :).
We use
Max for the objects, Angel did an exporter to use the objects in the engine. I
did a tool to Pack textures and calculate palettes, which is called BaB. Angel
and me also did a compiler (well almost everything was done by Angel) that
converts the maps that LED produces into the maps that the engine understands.
The scripts are written with any text editor. As you have seen I use PythonWin,
other people in Rebel use Visual C++ or any other one that they prefer.
You can
play Blade in first person, so the engine is not tied to a 3rd person game.
Most of Blade behaviour is done with properties or Python scripts. The engine
is very flexible. I think it has the best physics and lightning system, as well
as a very flexible biped system for animations.
The
engine has several sub-engines. The physics engine is one of them. It uses
mainly the mesh of the object and its mass, but there are also friction
coefficients. The code for the physic engine is in the main executable, as is
the entities system. So maybe we can call them the core. The graphic system is
in separate DLLs. It's possible to write a raster that shows the world in a
completely different way, as the toon render shows. It's possible to write a
raster that uses light maps, for example.
It's also
possible to implement entities behaviour or other things in separate DLLs,
although we do not use this very often. You can use Python as a link to call
any DLL if you want.
The
geometry is tessellated for the distortion effect, but the objects aren't.
Their vertices are moved depending on where they are; this is why you sometimes
can see that their distortion is not the same as the rest of the architecture.
This is done this way to improve the efficiency.
The water
has attributes for setting the level, colour and reflection. You can also
specify a callback function that is called when an entity touches it. There is
also a transparency attribute, but although Angel designed it to have
transparency, he hasn't had the time to implement it.
Blade
does not ask a lot of the graphic card. For example, a GeForce is almost free
to run with full screen anti aliasing. We have tried this and all the cards
work well with Blade.
In short
term, it would be easy to add Radiosity and volumetric fog to the Blade engine
(we almost have volumetric fog already). In a long term, we may add a true
outdoors engine, progressive detail-level, more authentic lightning...we'll
have to wait and see.
I don't
know what we'll be releasing, but to create new models you'll need the MAX
export plugin. Also, you have to define the set of animations by script. If
it's not documented, this will be very difficult. To change the damage that a
weapon produces you only have to put something like this: weapon.Damage=200.
This is not exact, but this is the idea. The weapons have several attributes
that are defined in a script. To change their damage zones, you must define
them in the mesh and use our exporter.