Word War vi is your basic side-scrolling shoot 'em up '80s style arcade game. You pilot your "vi"per craft through core memory, rescuing lost .swp files, avoiding OS defenses, and wiping out those memory hogging emacs processes. When all the lost .swp files are rescued, head for the socket which will take you to the next node in the cluster. Word War vi Word War vi, now with real lasers. Compiled with OPENLASE=1 and projected by a home made laser projector Word War vi running on OpenPandora, circa May, 2011.

Word War vi version 0.23 in "xmas mode," Dec 2008. You might notice some similarity to Defender or Stargate, and perhaps Scramble, or maybe Rescue Raiders, and if you liked those games, you're apt to like this game. There are plenty of differences from those games as well though, some might say it's really "neo-retro," rather than purely retro. It's licensed under the good old GPL v. 2.0, except for the audio files, which are licensed under a couple different Creative Commons licenses (see sounds/Attribution.txt). Word War vi as it appears circa Aug 17, 2008.

.

Screenshots

Word War vi "--bw" mode. The "--retrogreen" option. The "--brightsparks" option.

More Videos

Downloads -- (Just gimme the wordwarvi-x.xx.tar.gz source tarball please!)

If you're using, say, Fedora Core 8 or 9, you can probably just get wordwarvi by using yum, or the Package Manager (select "Applications", then "Add/Remove Software", then click on "Search", and type "wordwarvi")

Likewise, if you're using gentoo, there seems to be some activity to get wordwarvi integrated with portage, so you might try the native gentoo way of getting wordwarvi (emerge, I think it's called -- I'm not a gentoo user, as you might have guessed.). Update, Aug 5, 2008: According to this blog posting, Word War vi is "now present in the official Portage tree!" See also, this bug report.

Last, but not least by any stretch, if you just want the source to compile youself, here's the download link: get wordwarvi.tar.gz from sourceforge The current version is 0.22, current with CVS as of Aug 3, 2008.

Or, you can get it from CVS (which I would recommend). Do the following at the shell prompt:

cvs -d:pserver:anonymous@wordwarvi.cvs.sourceforge.net:/cvsroot/wordwarvi login cvs -z3 -d:pserver:anonymous@wordwarvi.cvs.sourceforge.net:/cvsroot/wordwarvi co -P wordwarvi

cd wordwarvi make

Compiling the game

Compiling is easy, after checking out from CVS as above, just type "make." You'll need the gnome libraries and header files, which you likely already have.

You may need to set a couple environment variables:

export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig export LD_LIBRARY_PATH=/usr/local/lib

(I have that in my ~/.login, so I tend to forget about them.)

You'll also need libsndfile (not needed since 0.09) libvorbisfile (needed since 0.09. It's in the libvorbis rpm on redhat based distros, and the vorbisfile package for debian based systems, iirc).

Portaudio: You will need the portaudio library. You will need version 19, not version 18., which there's a good chance you don't already have. These are easily compiled and installed via the traditional "./configure", "make", and (as root) "make install" commands. Version 18 is five years old, yet this seems to be what debian and gentoo linux distros have by default. You need portaudio v. 19. portaudio v. 18 will not work.

I'm told that on Ubuntu, you can install the portaudio19-dev package, and that this will solve the portaudio problem without you having to compile it yourself. I noticed that there are some instructions for compiling Word War vi for Ubuntu users here. (Thanks Savvy Admin!)

If you're on a distro which uses portaudio v. 18 by default, and you find you need to compile portaudio19 yourself, you may wish to configure v. 19 to install in /usr/local so as not to conflict, and break default apps which depend on v. 18, and use the LD_LIBRARY_PATH variable to get wordwarvi to find the new version in /usr/local/lib. I'm not going to rewrite wordwarvi to use portaudio v. 18, libao, SDL mixer, pulseaudio, etc., so don't ask. There are a zillion linux audio libs. If I was going to allow using another one besides portaudio, it would probably be JACK. But don't count on even that.

If you want to compile without the audio libraries you can do so by typing:

make WITHAUDIO=no

The CVS code also needs oggdec (from the vorbis-tools package) to decode the .ogg files to .wav files, that is, if audio support is enabled (default). Not since v. 0.09.

Other packages you might need:

gtk2-devel

pango-devel

atk-devel

vorbis-tools (for oggdec)

A slackware user writes to tell me that on his system another program ("espeak" in his case) uses a different version of portaudio. He was able to get wordwarvi to peacefully coexist with espeak by configuring the version of portaudio that wordwarvi needs to install in /usr/local/lib (presumably, with "configure --prefix=/usr/local"). Then, presumably, wordwarvi is linked against this via LD_LIBRARY_PATH.

Notes for FreeBSD Users: In v. 0.22, I wrapped the xbox-360 controller rumble code which relies on /usr/include/linux/input.h with "#ifdef __linux__". I don't know if FreeBSD has this support for the xbox-360 controller, but if so, since I doubt __linux__ is defined by gcc on FreeBSD, this code will not get compiled in.

Notes for Mac OS X users: I'm told that this file, /usr/include/linux/input.h was also complained about on the Mac. Maybe with these ifdefs, (as of v. 0.22) somebody can try compiling it and maybe it will work as-is. I am told that the game does compile and run on Mac OS X, but no joystick support. Audio works, I'm told. Also you may have to change <malloc.h> to <malloc/malloc.h> in wordwarvi.c and ogg_to_pcm.c. Robert Daeley has posted a little writeup about building wordwarvi on Mac OS X Leopard on his web site Celsius 1414.

Running the game

Type

./wordwarvi

There are a number of command line options, also settable as defaults via the ~/.wordwarvi/.exrc config file. See the wordwarvi man page for details. If your display resolution is fairly high, which is often the case these days, the game may fail to attain a reasonable frame rate in full screen mode (reasonable = 29.5-ish fps). If you experience this, you might try lowering your display resolution and see if it helps.

Controls

The game is best played with a joystick or gamepad of some sort. The keyboard controls kind of suck. I have used a USB Logitech Dual action rumble pad with good results (left stick controls motion, press the buttons to see what does what. Bombs and laser are on the right hand trigger buttons.)

Joystick and keyboard controls are also reconfigurable via the ~/.wordwarvi/.exrc config file. See the man page for details.

Bugs

There are some bugs...

The screensaver will activate during game play. This is because there is no "one" screensaver, there are at least three screensavers in common use: xscreensaver, gnome-screensaver, and kscreensaver, and they provide their own, different ways for a program like wordwarvi to deactivate them. Screw that shit. So, until these guys get their acts together, you have to disable the screensaver yourself, by whatever means your screensaver provides. Complain to the screensaver guys if you don't like it.

It will segfault occasionally in the code which generates buildings. I think it's overflowing a scratch array when recursion happens to get too deep for the arbitrarily chosen "big enough" value I used. Haven't gotten around to fixing that yet. Haven't seen this in ages, fixed it somewhere along the line..

Haven't seen this in ages, fixed it somewhere along the line.. Missiles confused by chaff are doubly confused when the chaff disappears (they end up chasing a random object, usually a spark coming out of your exhaust, which is very nearly the right thing to do, but purely by accident. And, when the missile does hit the spark, you aren't damaged.

Sometimes a falling humanoid will suddenly disappear and reappear instantly on the ground. Don't know why that happens. (Update, May 5, 2008: Fixed in CVS.)

(Update, May 5, 2008: Fixed in CVS.) May 4, 2008, I noticed that one of the buttons on the USB gamepad I have will cause a segfault (not a button I normally use). Need to debug that one pronto. Update: May 5 -- so far cannot reproduce this bug.

At the end of the game, You sometimes see editor now??? Game Over which is incorrect. (I think this is fixed now though.)

which is incorrect. (I think this is fixed now though.) On higher levels, the game tends to run out of CPU. The game is too aggressive in adjusting parameters to make each level harder than the previous, with no limits, and things get a bit out of control. Needs tuning, and a more sophisticated algorithm. (This is more or less fixed as of 0.14).

Selecting a non-existent sound device with the --sounddevice option causes a segfault. (Fixed in CVS as of May 5, 2008).

I've noticed that if firefox is running, and esp. if there are flash things in the pages firefox is showing (e.g. youtube), performance really sucks. I think it may be whatever audio device sharing stuff (pulseaudio?) is going on behind the scenes. In any case, if you notice performance sucking, stop firefox, and see if that makes performance improve.

Octopi which die by smashing into the ground will corrupt the target list, crashing the game, or making most or all things unshootable. (fixed in CVS as of Jun 19, 2008).

Some things on the ground (laser turrets) have to be hit at the very base before the ships laser has any effect.

Sometimes, after entering a high score, the program doesn't transition back to attract mode right away, but plays all the music through before transitioning. Don't know why.

Entering high scores can be a bit twitchy with a tendency for letters to be entered twice, and no way to backspace.

I have seen recently (July 5, 2008 or so) an unexplained segfault. Was not able to reproduce it.

Three users, one on FreeBSD, one gentoo on x86_64, and one on something else (some kind of linux) have reported the following bug which occurs the instant you press 'q' to insert a quarter: Program received signal SIGABRT, Aborted. [Switching to Thread 0x2ab12bd52240 (LWP 5320)] 0x00002ab12968b3c5 in raise () from /lib/libc.so.6 (gdb) bt #0 0x00002ab12968b3c5 in raise () from /lib/libc.so.6 #1 0x00002ab12968c73e in abort () from /lib/libc.so.6 #2 0x00002ab1296c7acf in ?? () from /lib/libc.so.6 #3 0x00000000004142f2 in start_level () at wordwarvi.c:7943 #4 0x0000000000419c4b in timer_expired () at wordwarvi.c:9383 #5 0x000000000042662b in advance_game (data= ) at wordwarvi.c:9484 #6 0x00002ab1293b822b in ?? () from /usr/lib/libglib-2.0.so.0 #7 0x00002ab1293b7b22 in g_main_context_dispatch () from /usr/lib/libglib-2.0.so.0 #8 0x00002ab1293bada7 in ?? () from /usr/lib/libglib-2.0.so.0 #9 0x00002ab1293bb097 in g_main_loop_run () from /usr/lib/libglib-2.0.so.0 #10 0x00002ab1277331b2 in gtk_main () from /usr/lib/libgtk-x11-2.0.so.0 #11 0x0000000000418630 in main (argc=1, argv=0x7fff842cda88) at wordwarvi.c:12251 The bug can be avoided by commenting out the call to add_buildings() and the code which frees the memory allocated by add_buildings -- at the cost that there are no buildings in the game. So, the bug would appear to be somewhere in add_buildings(), but I have not found it yet. Another hint about this bug, the third user experiencing this found that the bug did not occur if wordwarvi was run as root (not recommended as a solution, but an interesting clue.) Bug still exists as of April, 2009. Any help fixing this properly would be appreciated as I have no clue what's going on, and cannot reproduce the bug myself. Notice also that it's getting SIGABRT, which is unusual.

I'm sure there are others...

Acknowledgements

I would like to thank the following people for helping out with various aspects of this project:

History

I started working on this game on Apr 23, 2007, weekends and nights, just out of boredom. It bears some resemblance to a DOS game I wrote in Turbo Pascal more than 10 years ago, which I've since lost.) I put it on Sourceforge May 7, 2007, about 2 weeks later, so progress was pretty fast. I tried to preserve the commits as they happened, so you can see the program as it evolved from essentially a GTK "hello world" example program to what it is now. I'm just putting this here in case some kid comes along and wants to learn from it. It's not the best programming in the world, but it does show fairly small incremental changes from very very simple beginnings to what is here now. So, feel free to browse through the CVS history: and check out older versions of the program and compile and run them and tinker with them.

I made a few short videos showing a progression of older versions of the program leading up to where it is now (Feb 2, 2008).

Part 1

Part 2

Part 3

Game pads

Note: this information is current as of Jul 19, 2008 and wordwarvi-0.20 or better.

I've used a couple of different game pads with this game.

The permissions on the /dev/input/event* device nodes will be such that only root can use them. I'll leave it up to you how you want to solve that, whether by running the game as root (not such a hot idea) chmod'ding or chown'ing the device nodes, or something else.

You can customize the gamepad controls via the ~/.wordwarvi/.exrc file. (See the man page for details about the syntax.)

Here are some pictures to help you know what the button and axis numbers are:

Above: Logitech Dual Action Rumble, top view.

Above: Logitech Dual Action Rumble, rear view.

Above: Microsoft Xbox 360 controller, top view.

Above: Microsoft Xbox 360 controller, rear view.

Reviews

(These icons are in CVS, in both png and xcf form, so you don't need to laboriously grab them with your browser. They're just here for easy viewing.)

128 x 128 64 x 64 48 x 48 32 x 32 22 x 22 16 x 16

If you want to send me flames or bug reports, or suggestions, or whatever, you can reach me at:

Note: Obviously, emacs is a fine editor and this is all very tongue in cheek, so don't be getting all bent out of shape because you like emacs better than vi, mmm-kay?

(as if there were any doubt.)