Forgot your password?

Journal: Programming tools

Journal by miu
During the holdiday season things have slowed down at work, so I've had some time to try out several programming tools. Most were disappointing, but a couple seem to be so genuinely useful that I'm going to try to introduce them at my work.

The first is The Source-Navigator IDE . I have not used this as a full IDE, I have a variety of tests and Clear Case integration that I don't want to mess with yet, but as a class browser and project analysis tool it is excellent. Written in tcl/tk and C, it seems to be very portable. I'm currently using it on Linux, MacOSX (under X11), and plan to try it out on Solaris on Monday.

The built in editor is a fairly standard programmer's editor, syntax highlighting and browser integration work correctly with my projects so far. The only features I can think of that I'd like to see added are selectable region visibility and vi emulation.

Adding existing code to a project is very simple and fairly fast. The initial 'project view' window has options to list classes, methods, functions, and files. Once you select one of these types and select an item then a new context sensitive browser window appears. The include browser, cross ref browser, and class hierarchy browsers are all very useful. A tab at the top of the window lets you easily switch between views of the item and a drop down select lets you easily switch to different items (with a filter setting with the current type as the default).

Overall I'm very happy with Source-Navigator and I'd suggest it to anyone looking for a great free tool to help manage their C++ projects. The UI is well thought out and seldom clumsy and the functionality and speed are very good.

The other tool that I've been happy with so far is FlexeLint for C/C++ . One thing I should mention right away is that this tool is $1000 for Linux/Unix use, the windows version is $240 and I hope that Gimpel Software will really consider bringing the price of the Linux version down to the same as the Windows price. I've seen some people mention running the windows version under emulation on Linux, I have no idea what Gimpel's take on that configuration might be or how stable it is - so I can't suggest that path for professional use.

The basic idea behind FlexeLint is that there are problems that your compiler does not have enough information to catch because it is divorced from the linker and runtime. This tool is essential a configurable C++ compiler that analyzes the code as it builds it. Rather than producing object or executable files it produces a report of problems and potential problems with the code. This is very different from what a tool like Purify does, and although they both check for some of the same sorts of problems, Purify does some runtime checking that a static analysis tool (like FlexeLint) could never manage.

You have to write (or use) a compiler and build system specific config file to tell the lint tool how to build your project. It did not take me long to realize that I needed to build some scripts as part of my build process to generate these config files at build time, One script adds a lint target for each module that run 'gcc -E' with precompiler options to dump build information about include paths and library paths. A couple more scripts to read those dumps into a format that the lint tool can use. I have several static config files that turn on or off some style checks, such as the Scott Meyers Effective C++/More Effective C++ checks, suspicious indentation, some default warnings I need to modify or turn off, and so on.

I've run into a few problems so far with templates, namespaces, and typedefs, but overall FlexeLint is a very useful tool. If I can convince my employer to spring for a couple copies I want to make it part of the nightly build and checkin process.

If anyone is interested I can grab some of my scripts and configs on Monday and post them here.


Journal: Why do gamers have no loyalty to MMOs?

Journal by miu
In the last 6 months I've started playing massively multiplayer online RPGs. In this time I've noticed that there seems to be some sort of irritant that drives people from one game to the next, looking for something missing in the current game.

The only reason I find the lack of user loyalty a surprise is that people will spend hours (20+) a week playing these games and they don't just quit the current game, they quit the current game and go find another MMO.

I've come up with a list of things I think cause player dissatisfaction with games, as well as some ideas I have on ways to make games better.

Skill "grinds"
Grinding is doing a repetitive task to gain a level or skill point. There is no game purpose, the character is not creating anything valuable, they are powering their way through an unpleasant limited ability level to get to the "good stuff". The terms of service of most games prohibit 3rd party tools that automate the character's actions. The fact that people would consider using such tools says to me that activities that require them probably do not belong in the game.

Star Wars Galaxies had the interesting idea of giving crafting experience when people actually use the items that have been created. The problem remains that the primary source of crafting experience comes from creating tons of useless items that will probably never be used.

My suggestion is that the apprentice and journeyman portion of crafting skill levels be replaced almost entirely with crafting quests. This would give characters some starter recipes to build and introduce new players to crafting in a way that would not send them to web sites looking for how to skip to the good stuff.

Once characters reach higher levels of crafting ability make resource availability the driver behind what they create. Add in some dependancy on custom fitting or an enchanter and you can keep high level crafters involved with other character classes.

Competition for limited content
A couple of the great stories of Fafhrd and the Grey Mouser involved them competing with others for fame or a treasure. The problem is that this does not translate well into online games. Suffering lag or exchanges of "yuo teh suxxor - we was here first!!" because 3 other groups are sitting on a spot is not the stuff of high fantasy (or even an enjoyable evening's distraction).

I understand that a certain amount of competition is necessary to encourage people to create groups and that the game servers cannot waste the memory on unlimited content that is never used. There is also the problem of "good spots" - good content that is placed in such a way that an easy escape or return to town is available nearby and that many people will prefer to play on such spots.

My suggestion on the unlimited content problem and map space is that a lot of it can be generated as needed from templates and then placed as characters enter an area. Major landmarks and terrain features have to be permanent to create the feeling of a continual world and give explorers something to discover (For a discussion of the types of players and the interaction between the types see Players who suit muds by Richard Bartle).

As far as addressing the "sweet spots" it may be that high traffic areas tend to generate either a decrease in monster poplulation, an increase in "inconvenience monsters" (high risk - low payoff monsters like thieves and jackals), a decrease in payoff from camping an area, or some combination. Player traffic could even affect the world in a permanent or semi-permanent way by continually pushing back the frontier as characters "conquer" an area.

Level treadmills
Every MMO starts with a variation on your character getting his stuff and running out to the "newbie area" to kill swarms of bees or rats or whatever happens to infest the surrounding area. As the character advances in power you move on to tougher and tougher areas, killing and leveling as you go - with the occasionaly penalty as you push too far and your character is killed or knocked out or whatever the local game fiction is for non-permanent character death.

I have no real idea on how to accomplish this (a few real tentative ideas so far), but I'd like to see the level treadmill done away with and permanent death (maybe with rare or difficult resurrections) become a feature of games. Permanent death would obviously require some means of correcting unfair deaths due to lag or computer crashes and such systems would be prone to abuse (know your going to die? Run a lag generator or hit the power on your computer), and I'm not sure how suitable it would be for a profit driven game.

This is just a subject I've been thinking about lately and since I have no experience with MUD or MMO design some of the problems that I see may be unavoidable or my suggestions unworkable. I just think that if game designers do not think about how to remove these irritants that we will be doomed to an endless parade of Everquest and SWG clones, and that game companies will continue to see player churn and short lifetimes on their games.
