by Karsten-Olaf Laux

The Concept

The development was started with the idea in mind to create an isometric client for Altima. - back in those days, the project had this name - The drawing engine, well in fact it did not deserve this name, was tile based, meaning that all entities were placed on a fixed grid with the possibility of an offset for finer placement. This concept is nice and fast, as long as you stay more or less in one plane; it fails however, if you want to display an environment, which is defined within a three dimensional space. So, meanwhile, uclient has advanced from the grid to a threedimensional coordinate system. This however brings up the problem in which order the entities have to be blitted to the screen; this is still not solved. Uclient is meant to use a screen resolution bigger than 800 x 600 pixels, so a system is needed to decide which parts of the screen have changed and thus need to be updated to the display. If the whole screen would be updated everytime a single entity has moved, it would creep like a turtle. To solve this the display plane is divided into small boxes (about 150 x 100 pixels) and a two dimensional bsp tree decides to which box a given entity belongs. So if an entity moves or changes due to its animation, only the box to which it belongs is updated to the screen. I plan to speed up scrolling similar to this in the near future.

In the beginning different threads seemed to me an easy way to implement independant processes within the client: user interface, database, drawing engine, server agent. However the development shows, that using threads has two major drawbacks. The main point is, that I cannot set different priorities: Why should the userinterface consume as much cpu time as the drawing engine ? The fact, that Windows does not implement threads, is the second drawback. SDL emulates threads under windows, but that does not work very well. So I plan to unify the existing threads; there is no real need for them anymore: the drawing engine has short drawing cycles, user and network input get buffered.

Many ideas have been posted about the functions and appereance of the user interface - this issue deserves it´s own article in the next Chopping Block - but only some ideas have been realized by now. The essence of all discussion is that the user interface should be customizeable in all details in order to adapt the client to the different game worlds. In my eyes the user interface and perhaps other parts of the client as well will be completely defined by configure files at runtime: use this uclient.ini to have an WarForge Client or use that uclient.ini to run a Cyphesis Client. AppConf by Karsten Ballüder & Vadim Zeitlin will do a good job on this.

The Windows Port

Uclient makes heavy use of the Simple DirectMedia Library (SDL) to access any system services, so the windows and the linux version compile both from the same sources. For the moment just different makefiles are needed, but this might be improved in the future, too. For network communication uclient uses netlib from Sam Lantinga (author of SDL), this works under linux and windows as well. The user interface is based upon libu, a c++ widget library, which implements the signal slot concept and thus allows easy coding. As this library features some nice helper classes for points and rectangular screen areas, it is also used within the drawing engine. libu is based on SDL and thus works fine under windows as well.

The Colors of Spring
by Uta Szymanek

Yeah, it's springtime and the artists´ ideas are sprouting like daffodils. The most outstanding development occurred on creating character portraits. We had a longer discussion on the media mailing list about using these portraits and came to a rough consensus to use small images at about 90x70 pixels in the user interface and larger ones in the character dialogues. As an example uclient already uses 90x70 sized images.

Every artist contributed at least one character portrait, which is available as a sketch or as a colored image. Tom Austin focuses on fictive races as there are a big troll, a friendly dwarf, a Katinid elder and an elf drawing.

In contrast the other artists, including me, concentrated during the last weeks on human characters. So we got a big variety of such portraits available now. Johnny Taporg did images of a tough viking and a roguish looking bar maid and recently Homero R. Sanchez III started up by creating a portrait of a young female with a southern touch. Myself portrayed two friends of mine, which came out as a young javelin thrower and a mysterious looking stranger.

For the next time you may expect an orc, done by Tom, a young lady, obviously possessing some magic skills, done by me, and many others...

The character animation for a human male is finished now. Thanks to Johnny, who also was so kind to create a chain mail for his tough hero, so he does not need to stay naked. By the way, it is funny to play "The Invisible man" by letting the trousers run around alone.

Now, back to the roots of our 2D art; development of tiles is still advancing. So Homero is still concentrating on creating plants and vegetation for the semi-arid climate. You should look at his cacti! Furthermore he experiments on the representation of glass and christal objects.

For the mountainous landscape Tom is working on appropriate tiles, like a waterfall, paving and broken stones. We may be curious about the first building for this area. There will be a water mill, a lighthouse and the evil tower, which shall be finalized in the near future.

Because I am still enlarging the equipment for Cambria, new furniture is available. I have made some sketches of shelves, beds, a canopy, a wardrobe, a cabinet and a round table. A simple viking house is also in the oven.. All sketches shall be colored in the next weeks.

Another aspect of our artwork is the general design. For this Tom and I created some backgrounds like parchment, ivy, silk, stone and more. They can be used in several ways, like for the layout of web pages, tables or the user interface of the uclient, which is still on process, too.

The colors of art are flourishing, so enjoy!

Cyphesis Development March 99
by Aloril

Current status

NPCs have simple goals:

Goals consist of time range, fulfilled -function and subgoals.

First check whether now is right time to achieve that goal.

Example: sleeping at nights or seasonal things, etc...

Future: make time more random and if certain conditions are fulfilled: overrule it

Then check whether goal is fulfilled: If it's ok then proceed to next goal. Example: have house

If it's not fulfilled, then process subgoals. Subgoal is either function that returns required actions or another goal.

Example: 'Build home' has 'find place for home' and 'build house' subgoals.

Future: 1) 'or' subgoals: fulfill either of subgoals and order of trying them is based on some criteria (default: random) 2) maybe use Mercury as low level implementation language for high level goal interpreter?

Priorities: Certain goals are checked before other goals. Example: Eating is more important than sleeping.


NPCs remember things like: places they have seen, things they have tried and knowledge about places and things.

Future: remember things about other PC/NPCs and what has been talked.

Mind/Body separation:

Body resides at server. Mind is either NPC script or human player using client. Mind sends intentions to body and body decides what happens. It also filters events from world.

PC/NPC can be remote or local. There is no difference except in how events are passed.


NPCs sometimes get progeny. They teach progeny same goals and knowledge they have.

Future: Parents together teach children and take into account in teaching whether it's boy or girl.

Home page for Cyphesis:


Short time goal is to make NPCs understand some Interlinguish sentences. I think that talking between NPCs is very important in creating 'live world'. This is needed for economy and battles.

For theory about Panlingua by Chaumont Devin see:

Diagrams illustrating Panlingua:

Long time goal: Something that could be called as 'real live virtual world.' ;-)