These are some screenshots from our cRPG game - Post Nuclear, which is inspired
by Fallout 1 / 2 games.

Short descriptions of screenshots and some technical details:

-top: game screenshot. Game engine is tile based (like in Neverwinter Nights) it
means that map is created from square tiles (1 metre x 1 metre) and of top of
them I put 3d objects (everything is very similar to chessboard). This solution
has some advantages and disadvantages. In tile based engine it's very easy to
cull objects and to create good pathfinder - it's enough to use A* algorithm,
which is fast and accurate, also creating new maps is very fast, but they can
look similar, if you don't have many various tiles and objects. Now game uses
DirectX x models (with skeletal animation), but it can also render quake3 md3
models (with animation). We decided not to use md3 models, as they are very
large compared to binary x if you use a lot of animations (in md3 animation is
keyframmed, so every new animation must contain information about all the
polygons of the mesh). Currently lighting is handled by DirectX lights, but
later we'll use per pixel lighting and some stencil shadows.

-bottom left: editor screenshot, creating new map. Map editor is very simple -
some user interface (made with Borland C++ Builder) connected with game.
Connection is made by passing editors window handle as a parameter to games
executable, then the data is exchanged by sending messages to each others
windows. Large data is exchanged using file mapping. Basically in editor you
just place various objects using few clicks. There is an idea to remove tiles
and objects, which are covered by other ones and can't be seen, but we don't
know if we'll add this feature, as we plan to create a fully destroyable
environment.

-bottom right: editor screenshot, creating new dialog. This tool is used for
creating new dialogs and testing them. When you save your dialog game editor
parses it to create a LUA script, which is later used by
the game. It looks something like this:

function n1()
setText("Hey stranger! Hold on!")
addReply("[you turn your head to the side of the speaking voice with surprise]",0,2)
end
function n2()
...

(Tip: it's possible to do it with a single function, but then you have to use
multithreading (or something similar) wich is just a pain-in-the-ass and creates
many bugs)

And in game this script will show a dialog with question "Hey stranger! Hold
on!" and one reply to it: "[you turn your head to the side of the speaking voice
with surprise]".