(This file is compiled from the ldescent mailing list and the README.Linux of previous versions. I hope all respective authors don't have objections against this. -- Arne de Bruijn) Changed in v0.0.21 - added -ipxnetwork parameter - added XF86VidMode support from Pete Ratzlaff, pratzlaff@cfa.harvard.edu - added -display parameter to specify display for X11 - now editor works with -nobm (with only 1.4 .pig+.hog) - added sound from D1X version (doesn't work with vidmode) - terminal settings are now restored after using svgalib - prevented compilation problem in arch/x11/xlib.c, x11_dga_cleanup - applied main/ warning removal patch from Matthew D. Rench, mdrench@mtu.edu Changed in v0.0.20 (1998-09-11) - sound samplerate fixed (now 11025, was 8000) - now --without-, --disable-, ...=no options to configure work as expected - keyboard repeat in X is now only turned off when ldescent has focus - Kali support in the form of a KaliNix interface is added - included enhanched joystick support from Owen Evans. (this broke FreeBSD joystick support) - fixed DGA detection, made it compile w/o sigcontext and disabled it by default: use -UseDGA to enable it. - fixed number of players in join menu. Changed in v0.0.19 (1998-08-12) - removed support for a commercial ipx over tcp/ip tunneler - changed some dos filename conventions for editor (slash, case) - incoperated patches from Richard Henderson (mostly Alpha support, x11 enhancements, bug fixes) - added get_sig gcc 2.8.x bug workaround - distribution created with make dist (removes most unnecessary files, deps are not created unless you run automake yourself). - used automake 1.3 instead of 1.2 (fixes some build problems) - fixed automap in x11 - removed bogus MEM_LEAKAGE warning - added --enable-p5-tmap and --enable-ppro-tmap configuration options to enable the Pentium resp. PPro optimized texturemappers by Brian Raiter Arne de Bruijn arne@knoware.nl ------------------------------------------------------------------------------ Release notes v0.0.18 (1998-05-10) by Stephen Hocking : This has some code to handle different window sizes for X11, although double uffereing is not yet working, so you'll have to have to fire it up with the nodoublebuffer option if you're running at other than the default resolution. A few people sent me patches to do this. I'm planning on doing the mouse handling next. The second change is based on the work the XFree86 people did to make their assembler code portable, as the various assemblers have different syntax and some systems use an _ prepended to global variable names. I have changed tmap_opt.s and scanline_flat.s to conform to this. The observant will notice that NOPs haver been inserted to take jump targets to multiple of 4 bytes. This was because the FreeBSD version of GAS gets confused when you have multiple .align 4's scattered through the code. After all that work, my nice shiny new K6-233 doesn't see much improvement at all, presumably because of the different rules about what instructions can be paired with what in parallel. Grr. I'll take a look at optimising this stuff for the K6 now I have AMD's guide for doing so. I may also do the later versions of the optimised code that are on the ftp site (tmap_per.s & tmapp_per.s). ------------------------------------------------------------------------------ Release notes v0.0.17 (1998-04-24) by Stephen Hocking : This adds support for FreeBSD, including sound, X11 (of course) and joysticks under FreeBSD. It will also act as a spur for the FreeBSD people to add the additional support for fancy joysticks that linux has (more than 2 axis & 2 buttons). ------------------------------------------------------------------------------ Changed in v0.0.16 (1998-04-14): - X keycode fixed; - new join game menu; - editor compilable with configure --with-editor (currently the editor works only with svgalib); - X/svgalib in one executable (X used when DISPLAY environment variabele present or display argument given). X is compiled in if libraries found, for svgalib you still need to specify --with-svga; - score unreversed; - ipx code should now work with glibc (untested); - fix.c/fvc.c fix to prevent SIGFPE's; - [ the following is modified at 1998-08-09 ] simple server compatible to a commercial ipx over tcp/ip tunneler added. [ this was removed in v0.0.19 ] - SHIFT-F2 & SHIFT-F3 mapped to save/restore too (previously controlled VR things...); - Ctrl-C disabled for svgalib; - bogus arch/linux/svgalib_mouse.c removed. Arne de Bruijn arne@knoware.nl ------------------------------------------------------------------------------ Release notes v0.0.15 (1998-02-23) by Kirk Petersen I added most of the patches I could find and released 0.0.15. I added the editor patches, but didn't want to play with the makefiles right now, so it isn't going to work without some effort on your part. Sorry about that. ------------------------------------------------------------------------------ Changed in v0.0.13: - changed the __u16 and __u32 to u_short and u_long - removed the requirement for both joystick devices to be opened - added the music patch - added the mouse patch README information for ldescent v0.0.1 - v0.0.12: ------------------------------------------------------------------------------ Thu Feb 5 12:51:00 EST 1998 ModeX support is in, with some partial SVGA/VESA support. (gr_svga_bitmap isn't implemented, me in all my slackfulness didn't do anything about it tho) However, page flipping doesn't seem to work: SVGALib segfaults when I try access memory below the 400th line(that's at 32K in the vidram). Had to put a kludge into the automap to make it work, and it makes the automap kind of annoying to look at. But it works. so there. Consciously noted that frametime needed gabbagabbahey, fixed that. Also consciously fixed the loading of player files. HAVE_JOYSTICK became WANT_JOYSTICK. *shrug* -- Patrick McCarthy The .sigless one ------------------------------------------------------------------------------ Mon Feb 2 12:05:29 EST 1998 More work on modex support, added a few new interface things: void int_gr_modex_plane(int plane) Sets the plane for ModeX usage. int int_gr_bm_type(void) Returns the bitmap type(linear/modex/vesa) I suppose it's possible to kludge the automap by having it write everything to a buffer set as BM_LINEAR and then copyplanar it. But that's no fun. Decided I felt like crap, stopped programming to slack, cough, and read for awhile. -- Patrick McCarthy (lowen@home.com) ------------------------------------------------------------------------------ Mon Feb 2 11:33:03 EST 1998 Okay, I made the sound code #ifdef'd. If you don't want it, you don't get it rammed down your throat. =) Tried Hawkins' port of asm_tmap_scanline_flat, in arch/i386/scanline_flat.s. You can #define ASM_SCANLINE_FLAT in includes/dlinux.h and try it if you want, it's kinda fubar though, and not much faster than c_tmap_scanline_flat (which I changed to just a plain ol' memset(), much quicker) Noted that addon missions don't work. Started hunting for this bug. Found it and squashed it in about 3 nanoseconds. missions.c was strcatting ".MSN" instead of ".msn" *doh!* damn case insensitive d'hos... -- Patrick McCarthy (lowen@home.com) ------------------------------------------------------------------------------ Sun Feb 1 19:29:48 EST 1998 Files modified: more than too many Thanks to Peter Hawkins(dph-man@iname.com), the weird shifting tile bug is fixed(yay.). Well, sort of. In ntmap.c there's a choice in interpolation methods. Prior versions used the cheesy forced-linear ones. When set to auto-choose, everything comes out fine, except for a simple problem. Division. The texture mapping code goes slower than hell (frame rate drops DRASTICALLY on my system)... ugh. Anyone wanna get cracking on a real assembly port? =) Until then, PROPER_INTERPOLATION is #define'd in includes/dlinux.h. define/undef it at will. Also added the FRAMETIME cheat code (shows FPS), thanks to Peter as well. I get ~15 FPS with PROPER_INTERPOLATION #defined... on a P200. *chunder* I was about to add Jonathan Allen(jonallen@ns1.ntrnet.net)'s sound patch to this, but I decided against it.. (Is it really still singleprocess? W/o threads available you really do have to fork() or popen() another sound slave to make it not fubar.) If you want it, you can snag it at http://www.ntrnet.net/~jonallen/software.html -- Patrick McCarthy (lowen@home.com) (New e-mail due to sandwich exploding) ------------------------------------------------------------------------------ Sat Jan 31 11:09:19 EST 1998 Files modified: arch/linux/joystick.c main/joydefs.c include/dlinux.h Rehacked joystick.c, made it work. Turned the L7 boss into something resembling stew. Files modified: too damn many Sped up the redraw ALOT, fixed the cockpit(The original PC ibitblt code for the cockpit is REALLY DAMN COOL. look at it. %)) as well. Made some work towards modex-compatibility. (some vesa stuff is already in place) -- Patrick McCarthy (lowen@sandwich.net) ------------------------------------------------------------------------------ Fri Jan 30 18:47:25 EST 1998 Did some work on separating everything. All the header files went into the 'include' directory (which is currently barren), and the separation work in arch/linux/ was started. Get those ggi/x11 drivers crackin'! =) -- Patrick McCarthy (lowen@sandwich.net) ------------------------------------------------------------------------------ Fri Jan 30 14:25:15 MST 1998 The only problem with porting such a great game is that you'd rather play it for hours than fix all the bugs :P Two things have been updated in this version: - Most of the extra files (*.asm, *.inc, etc.) were removed. I might have gotten a little carried away with it, so you should probably keep the original source around. I didn't release this as a patch file since I don't think patch removes files/directories. - Added optimization flags to the Makefiles. This gives a nice boost in speed and makes the ldescent file a little smaller (if you're going for memory conservation instead of speed, change the -O3 in the Makefiles in the 2d and 3d directories to -O2). -- Joel Hardy (deeng@inficad.com, deguan@usa.net) ------------------------------------------------------------------------------ Thu Jan 29 13:21:43 EST 1998 No real updates, did some hunting for the shifting texture bug. I think I know where it is now. The texture block comes out fine if (IF!) the entire block is in view at once. However, if it's not, it starts screwing up due to mismatched start locations. I did some hunting about this and it turned out that compute_dx_dy and compute_du_dy_lin seem to be screwing the restarts somehow. Those led me back to..you guessed it... fixmul! -- Patrick McCarthy (lowen@sandwich.net) ------------------------------------------------------------------------------ Tue Jan 27 20:50:11 EST 1998 Okay, I'm eating my words. But after playing a 2 hour game of Descent without it crashing I felt I needed to fix the bugs so I could have more fun.. PARTICULARLY that &($@#^@$^# reactor wiggle bug =) ** More known bugs/fixes - means it's known, but not fixed / means it's partially fixed % means it's fully fixed. Not in game or in both. % Load game window fubar Problem/Files modified: bios/key.c bios/key.h It was returning a *signed* char instead of an unsigned one. Another Watcom <-> GNU difference. - The windows clip over and don't restore the 'descent' background pic Probably the canvas stuff. % Game font is not seethrough. Problem/Files modified: 2d/font.c 2d/palette.c UGH. It was swapping 0 and 255 around for no apparent reason. I made that not happen unless SWAP_0_255 was #define'd and it worked perfectly fine. I also got rid of an ugly palette kludge in the process(yay!). In game. % Load/save game windows kept console switching Problem/Files modified: main/game.c Now checks for CTRLED as well as ALTED. Ctrl-F2/Ctrl-F3 work fine now. % Save game window doesn't show proper text I don't know how I fixed this. - Cockpit's not properly transparent. I think this has to do with weird canvas management. - Weird shifting of tiles in drawing I don't have the foggiest idea what causes this. Anyone want to tell me? - Full screen graphics mode causes you to get an ULTRA CLOSE UP. I now know this is only caused in full screen mode. With the status bar it doesn't do this. This, of course, makes NO sense whatsoever. It seems to have to do with the point setting(which shouldn't be causing problems), or the render_window buffer. % Ship wiggling on reactor 'splosion is a little, umm, violent Problem/Files modified: bios/pcm.c D'oh. D'oh. D'oh. custom rand() should be 0-32767 (fix 0.5), not 0-65535 (fix 1.0). This fixed a whole shitload of things, mainly the reason the AI seemed fubar to me... -- Patrick McCarthy (lowen@sandwich.net) ------------------------------------------------------------------------------ 01/27/98 ** Foreword and bugs Okay, here's my first attempt at a port of Descent to Linux. It, umm... well, it runs. Sorta. I made this port from a hybrid of the PC and Mac sources (PC has too much code in assembly, and NO not all of it is in C as well, the Mac code has everything in C, so I copied those chunks out and ported 'em..) Here are the known list of bugs/unfinished things, in order of apparent-ness: 1. Graphics looks fubar when you're close to a wall or rotated slightly. This probably has to do with the fixed point stuff, fixmul() notably. 2. Transparency on the game font is fubar as well. Worked fine when I had TRANSPARENCY_COLOR set at 0, but when I set it to 255 so everything *else* came out right, noooooo. transparency on the ship's cockpit is messed as well. 3. Random crashes/core dumps. 4. Engine randomly goes nuts and you get this weirdassed ULTRA CLOSE UP of the wall. You can see this in the descent.dem demo file that comes with Descent v1.5.. It seems to carry over to the next time you run the demo w/o quitting too. I've also had it become uberthin.. boggles the hell outta me. 5. It's so unoptimized in this form it makes Quake look fast. 6. Automap cores it. I do believe this is because I used the Mac 2D code, which does NOT handle annoying VESA-style paging. That and I don't think I supported 320x400 anywhere. 7. Bug I inserted myself into texmerge.c. 'least_recently_used=0;' It's a kludge that will undoubtedly fail at some point, but it prevents a console lockup from happening. Which would you rather have? fubared graphics, or no console? =) Remove it if you dare -- I couldn't figure out an easy way to fix it. 8. Ship "wiggle" when you blow the reactor core is a little too violent.. 9. SVGALib only, and I didn't separate any code, just because I wanted a functional ver, "NOW". =) !!WARNING!!: Your console may lock up if things don't go well, though I haven't had too much of a problem with it recently. 10. No joystick/mouse code. And man, does Descent suck on a keyboard. The Linux joystick code is partially implemented (joyc.c), but I was having some problems with it so I took it out. Errm, I just realized -- you may need linux/joystick.h to compile it. =) 11. No network code. Maybe implement true TCP/IP Descent along with the IPX stuff? 12. Obviously, no modem/serial code. 13. VR Devices got the Boot[tm]. 14. Does the editor code even compile? I haven't even checked. =) ** Building and running: Just run make and try to avoid reading all the bagillions of warnings, for they are deadly to the eyes. Most of them are "warning: data definition has no type or storage class", and the others are just errors as a result of that, which shows that this was, indeed, a quick hack. just add 'int' or 'void' to the beginning of procs in the proper headers. *slack* Once built, copy the resulting 'ldescent' binary somewhere and copy the .hog and .pig files from Descent 1 registered version *1.5*. (IMPORTANT! Prior versions will make it not load!) Run it, and bask in quick-hack LinuxDescent. Now, I suggest the rest of you get to work on cleaning it up now that it runs somewhat. :P ** Things I learned about this code: Static stuff is everywhere. I could hardly find anything dynamic in the code, and everything was ripped directly from the pigfiles without sizechecks. DPMI is Wrong and Evil[tm] and should be destroyed at all costs. GNU C automatically pads structs to 4 byte boundaries.. The load code didn't like this much. (hence the zillions of __attribute__((packed))'s) glob() is a Good Thing[tm] ** Epilogue I'm probably not going to work on this much after this, I just got bored and wanted the base code in Linux for a challenge. But hey, just give me credit somewhere if you work off this base.. even if nestled in a far, dark, corner, in an obscure chunk of code that no one ever dares look at.. -- Patrick McCarthy (lowen@sandwich.net) ------------------------------------------------------------------------------