Kombatant alpha2.5 release
November 1999 Chris Jang cjang@ix.netcom.com
(It is assumed that Kombatant is installed in /home/auser/kombatant_alpha25)
To build and install Kombatant
(unpacking the zipped tar ball)
1. cd /home/auser 2. gunzip kombatant_alpha25.tar.gz 3. tar xvf kombatant_alpha25.tar
(editing the makefile)
4. cd /home/auser/kombatant_alpha25/src
5. Edit the Makefile, by default the Bttv xcapture application is not
built. If you want to build it, add -DNEED_FRAMEGRABBER to the DEFNS
variable and 'make linux/xcapture.exe'.
(building and installing)
6. cd /home/auser/kombatant_alpha25/src 7. make 8. The binaries are *.exe files in /home/auser/kombatant_alpha2/src/linux
Running Kombatant
The server is invoked with a command like
server.exe
By default the server uses port number 6666. If this is undesirable, edit the #define in Defines.h for macro SERVER_RECEIVE_PORT and make clean; make.
The client is invoked with
client.exe
Instead of specifying the character and server host on the command line, this is now done through the GUI. If Jang is selected, then Jang is your fighter. If either Johnny Cage or Jade are selected, then Shoot is your fighter. What!? Well, this is a patched together hack blend of alpha2 and rewritten alpha3 code. I've been tardy and haven't shot the Johnny Cage and Jade characters although I do have the dolls. Also, when specifying a server host, if it does not exist then the client will core. Sorry about that, I know, it wouldn't be too difficult to check for a valid hostname. If for some reason you want to run the client without sound, then do (in sh, bash, or ksh):
export NO_SOUND=1
If environment variable NO_SOUND is unset, there will be sound. Note that if you try running multiple clients on the same host machine, sound may have problems if all clients are accessing the same sound device. So each client that has sound activated should have it's own sound device.
Playing Kombatant
The key bindings are
left arrow step left, turn
right arrow step right, turn
spacebar jump
C crouch
F punch attack
S stomp attack
T toss attack
P pause screen updating but keep pinging server
0 adjust screen gamma, very handy for my monitor
ESC exit the game
Game play is relatively self explanatory. Move around and beat up anyone else in the game world. Be patient when starting the client and server. It takes a few moments to load the image data.
What's the state of this?
The following state is as of alpha2 and really hasn't changed. Now it's "alpha2.5" (not really alpha3) as this release is a patchwork of old and new code. The only real changes are the title and selection screens in lieu of reading command line arguments and the soundIt library. But otherwise the underlying "domain" hasn't changed.
It needs to be redesigned badly. Xlib graphics, X keyboard input, and UDP/IP networking are stable but the game models fighting characters almost purely as directed graph state machines. This is a fundamentally flawed approach. The right viewpoint is something rather close to the coin-op Mortal Kombat games. (Duh!) Fighting characters do have state machines. But each state machine is not a completely unique directed graph. Modeling characters purely with directed graphs doesn't scale to multiple characters with fighting interactions. Those interactions can quickly scale superlinearly with additional game characters.
As for sound, there needs to be either a thread aware of time or a more traditional audio server process approach. Sound as it stands is just to see if SNDCTL_DSP_SETFRAGMENT works o.k. I am amazed that what is so difficult on Linux is trivial with win32 (playing smooth sound samples).
The next alpha/re-write (I apologize for getting in a series of alphas but I vastly underestimated the level of effort when this started) will be modeled more closely after the coin-op fighting games. Some lessons learned:
- Minimize art production -> use a blue screen!
- **DESIGN** the game world -> state machines do not a character make!
- Design and production issues kill you, not the programming.
Thanks
I'm grateful for the Bttv driver without which grabbing video wouldn't be possible. I've learned a lot by looking at the Linux DOOM source code dump. There's interesting stuff in there about how to do colormapped Xlib graphics and sound. I've also skimmed other code bases too. Wrapping sockets in a proper object with a buffer came from Xpilot. But the UDP client/server protocol and pthread'ed server came from personal experience. I guess I'm also glad that I work in a laid back enough place that I can test out Kombatant over the LAN and not attract attention (although the machines are horrible HPs, strangely HP-UX reminds me a lot of Linux).
Shoot is played by Rhett Guthrie. He was quite frightening at times when shooting his character. When you see the character with both feet in the air, that isn't faked. He was jumping and landing hard on the floor. At times, both of his feet were above the level of his head.
Thanks to Johan Svensson for telling me about Redhat 6.0 build problems. I've a hand patched Linux box with uneven configuration management between system libraries, tools, and kernel while most people run Redhat where all that is done for you. Also, I have problems with the shared library version of pthreads. I need to use to static archive instead. This isn't too surprising given how between 2.0.x (RH 4.x; RH 5.x) and 2.2.x (RH 6.x) the implementation has moved from user to kernel threads. So my guess is that with the need for SMP and kernel threads, that a static archive of multithreaded libc doesn't make sense anymore.
Conditions for free use of source code and media of Kombatant
- May be used for any legal purpose whatsoever
- I retain authorship and copyright of my work
- I am given credit for any code or media re-used in another work
- I am informed of any such usage (please, I would like to know)
Web Home Page
