/* * CHANGELOG. * * Please do NOT harrass Ken Silverman about any code modifications * (including this file) to BUILD. */ 07112000 - Initial release from icculus. C code compiles, doesn't link, lots of bastard assembly. 07122000 - LOTS of ASM cleanups by Andrew Henderson. 07132000 - Ryan adds some missing functionality: SDL equivalents for most of the VESA functions, filelength(), and some other piddly stuff. 07142000 - Dan Olson cleans up the code a bunch, fills in a bunch of the ASM routines with C equivalents, and puts some VESA replacements in place. Other good stuff. Ryan cleans up some, too, put some more stubs/implementations in place, and continues to flesh out the SDL driver. 07212000 - A BUTTLOAD of updates. "build" links, and segfaults, because I screwed up all the inline ASM that I did. Will be correcting, shortly. "game" doesn't link yet. Haven't looked at it in detail. Moved anything with i/o port calls into dos_driver.c, and put stub equivalents in sdl_driver.c ... The setupmouse() function got commented out because it was getting called before the video got setup, I think. Will check. (never released.) 07272000 - Assembly in pragmas.c was borked (thanks to RYAN.), and is now halfway fixed. Ryan will be fixing this completely Real Soon Now. Other ASM may be screwey, too, if Ryan touched it, but the NASM code that Andrew did is probably fine (mostly because he knows what he's doing... :) ) 07282000 - Fixed borked ASM code. Fixed a text file reading routine that depended on finding DOS-style newlines. Moved some more stuff to sdl_driver.c and dos_driver.c ... 07292000 - Fixes in pragmas.c by Dan Olson, who also knows more about this inline ASM stuff than Ryan. Dan also cleaned up engine.c's ASM. Thanks to Dan and Ryan, game.c now compiles, albeit with a thousand warnings. "game" does not link yet. 07312000 - Thanks to Dan, "game" now links, other minor fixups by Ryan. Broke up CHANGELOG into some standard docs. (README, CREDITS, etc...) 08012000 - Andrew does some graphic porting. Looks like we've got blocks where fonts should be, and a mouse cursor. Huh. Ryan abstracts 0xa0000 addresses to VIDEOBASE define. Under non-DOS platforms, this is currently "surface->pixels". Basic events were hooked up. Added FreeVGA to README. Lots of fun new segfaults. 08042000 - Ryan gets the keyboard working apparently fully, and the mouse sorta. The grid now draws correctly. No more segfaults on exit. You can zoom in and out on the grid with the 'Z' and 'A' keys. Fun, huh? sdl_driver's drawing routines (most notably, drawline16) are MUCH more robust. Some minor structure changes. Other things seem to work within build (space draws a line from a point to the mouse, etc.), but I dunno what any of this means; must find a BUILD HOWTO. Probably other stuff. Timer is hooked up, but SDL won't fire a timer faster than every 10ms, or 100 times a second. BUILD expects this timer to fire every 8.3~ seconds, or 120 times a second. This may be problematic in the game, but it probably won't be a problem in the BUILD editor, where it just handles keyboard updates. An alternate timer system might get swapped in later. Game still links, but aborts on initing the timer, since I need to sync with the editor; Ken saw it fit to commit the mortal sin of cut-and-paste instead of having a unified BUILD_Init() function, so I need to update it to the new structure (using sdl_driver or dos_driver, calling _platform_init(), blah blah blah...) 08052000 - Dan fixed an ASM screwup in getkensmessagecrc(). Ryan fixed the mouse button event code. Added event thread, and some bits of thread safety in sdl_driver.c. Mouse now seems to move okay if the X11 cursor is hidden, and we grab the input. Goes to fullscreen and grabs input by default; export BUILD_WINDOWED=y and BUILD_NO_MOUSE_GRAB=y, respectively, to disable. Got myself a copy of Duke3D Atomic Edition for the data files. Fixed the #pragma packs in build.h. Fixed _platform_init() functions. Improved SDL driver. Commented out a bunch of self-modifying ASM. Dan got the fonts to display. Ryan got the correct palette loaded. Lots of other little cleanups. Good stuff. 08062000 - Ryan fixed clear2dscreen() in SDL driver. It's (hopefully) correct, now. Also, all that missing text should (hopefully) now display. drawline16 is more correct now. Other little cleanups and move-arounds. It seems that "pageoffset" is the big enemy around here today. Hum. 08072000 - Ryan gets the BUILD title text to stop flickering. Prints our names at exit (maybe someone will want to hump OUR legs, too). Added the _idle() function to dos_driver and sdl_driver, and sprinkled some calls through overheadeditor() in build.c ... ideally, we'd eventually want to not have the editor wipe the surface and redraw everything like mad constantly, but rather wipe and draw as needed to choke the processor even less. Added implementation of getfilenames() in build.c...seems to work well enough. Got map loading dialog to appear (in the wrong place), but the arrow keys don't seem to work to test further. Added caption to window's title bar. Dan completely the Herculean effort of cleaning up EVERY compiler warning in the editor. Other tinkering. Adrian Neill and Christian Zander cleaned up all the compile warnings in game.c and multi.c. Christian also supplied a shell script to set the BUILD_* variables for developing. Ryan fixed permissions of map files in saveboard() in engine.c. game.c had a static variable called "sync" that conflicted with unistd.h's sync() function, so the static's been changed to _sync. Fixed more graphic stuff; pageoffset is just blindly set to zero on Unix, now, and that seems to fix some stuff. printext16() was changed to statusbar_printext16() in the appropriate places, so I could remove my ypos += 336 hack in the actual implementation, make this #define to regular printext16 on DOS, and be a one-line function to add 336 to ypos in Unix. sdl_key_filter now has support for extended keys; in init_new_res_vars(), just add keys with values of 0xE0** where "**" is the normal value. This allowed me to add the arrow keys and the keypad enter key. Tried loading Ken's maps, and they WORK. With today's graphic fixes and the arrow keys, you can select a file from the loading menu, and navigate around in 2D mode. Cool. Switching to 3D mode segfaults immediately. :) Changed sdl_driver to NOT double buffer, and the SDL_Flip() call is now a screen-wide SDL_UpdateRect(). Added Ken's maps for his test game to the archive. 08082000 - Added key bindings to sdl_driver: ALT-Enter (or ALT-Return) to toggle between windowed and fullscreen, and CTRL-G to grab/ungrab the mouse pointer. Increased sensitivity of mouse movement. Dan fixed the editor's status bar; it now draws. I think Dan also squashed the rest of the pageoffset annoyances in the editor. Dan tracked down the line drawing problem, and Ryan patched some ASM (clearbufbyte(), specifically), so you can add walls, now. Things are REALLY starting to look good. 08092000 - ASM day. Fixes and fights from Dan and Ryan, with lots of wisdom from Andrew. Realized that we were in violation of Ken Silverman's license by not updating/including his copyright header on all source files. This has been fixed; sorry, Ken. Other video stuff. Tweakage. 3D mode no longer segfaults, but is still garbage. 08112000 - Fixed a bug; ALT-Enter wasn't changing sdl_flags, so next time you changed resolutions, you went back to your original (non)windowed state. Did the same for mouse grab state. Dan converted the ASM for some more engine.c functions, and added a missing key to our SDL scancode table. Hooked up keybindings in the (still not functional) 3D mode. Discovered that we were missing some data files. More sdl_driver tinkering. Moved stuff out of dos_driver's _nextpage(), and back into the abstract engine.c section. I don't know what I changed, but the sprite and vector squares don't draw in the correct place anymore in engine.c's draw2dscreen() ... culprit is something in sdl_driver.c...someone diff this version against the last. Grrr. Generally, I'd fix this before sending out a tarball, but it's 5:00a.m., and I need to get something out the door here. Will fix for tommorow, and it doesn't otherwise impede your use. 08122000 - Turned optimizations back on, and the broken drawing from last night works again. Yikes. Dan stubbed out lots of the missing C functions in a.c (someday, we'll fill really these in, I hope.), and made mad progress on attacking our palette issues. Some compile fixes (incomplete) to allow building without SUPERBUILD defined (for removing voxel support...might be needed for pre-voxel games like Duke3D...) The self-modifying ASM passes function parameters in registers, so I needed to do an inline wrapper. This also now sits in a.c. (Still crashes and otherwise doesn't WORK the same in 3D mode, but still...) Added tiles000.art to the archive from Duke3D shareware's duke3d.GRP file. I hope this doesn't violate anyone's copyrights. 08132000 - (For reference, apparently GCC requires -O2 for inline asm to work. That would explain the drawing barfs...) Dan fixed the status bar (after Ryan broke it again. :) ), and moved krecipasm() into a_linux.asm, since FPU opcodes don't inline correctly. Added Ken's stuff.dat. As a milestone, 3D mode now seems to work a LITTLE. Looking in the wrong place causes a segfault, and generally, what very little draws seems mostly incorrect, but progress is being made. Changed out all the collected data files with Ken's original STUFF.DAT. initgroupfile() now aborts the program if it can't open a data file. (Without stuff.dat, you get a blank surface, and you have to blindly feel your way out of the program.) Dan also started work on the command line tools, like kextract. Those are in a separate tarball on the website. 08152000 - (Stuck at LinuxWorld...sorry for delays.) 3D mode now does not (by default) segfault, and you can stumble around. Some walls seem to render correctly. Lots of things cause segfaults. Disabled the MMX overlays for now, as that is a little less self-modified code in use. Dan fixed some keyboard scancodes (and also independently fixed the same 3D mode things. hah. :) ) 08192000 - Back from LinuxWorld. Added an obnoxious hall of mirrors detector for 3D mode. _asm_slopevlin now returns immediately, which for now stops most 3D mode segfaults. This will have to change, but it helps for now. Put in a hack for checking frames-per-second. Added some new keyboard scancodes. 08212000 - Another keyboard scancode added by Dan. Changed 3D mode to prompt to save changes before dropping out of graphics mode; the stdio thing was pretty obnoxious. Now we are basically waiting on a copy of Watcom C to show up, so I can trace through the original code and verify that I'm getting sane parameters and return values. Needless to say, productivity has dropped off quite a bit. 08232000 - Dan found a screwup in the inlined dmulscale32()'s return value. Consequently, now the hall of mirrors are gone. Cool. Walls seem to render correctly all the time now. Other visual problems, and no floors or ceilings, but this is a BIG win. Thanks, Dan! (A few other ASM functions in pragmas.c had this problem. dmulscale32() was the most noticable fix, though.) 08242000 - Dan added/fixed some more ASM. The SDL parachute is now in place, so we will go back to the correct resolution, and the mouse will ungrab in case of a segfault. A C version (mostly working?) of qinterpolatedown16short() has been added to pragmas.c, and the ASM version had a fix that allows ceilings to show (though they render incorrectly in the correct place, and now certain sprites segfault. Ugh. PageUp/PageDown scancodes now work, so you can raise and lower ceilings and floors. Changed caption in titlebar of windowed mode. 08292000 - Matt Helsley contributed some ASM -> C conversions, and some test code to help with further porting. Cleaned up some cruft in the sdl_driver. Dan nailed another clobber list issue in pragmas.c. Thanks to Nicholas Vining, we now have a copy of Watcom C. Ryan sat down and stepped through the ASM in gdb (NOT fun at all), while Nicholas stepped through the DOS version in parallel. Eventually we stumbled upon some misassembled opcodes; we ended up filling some registers with a pointer, and not what the pointer pointed at! Ryan went through a_linux.asm and fixed all these, and now 3D mode is almost entirely FLAWLESS. This is so cool. Bedtime; I hope you all enjoy this. :) Thanks Nicholas! 08302000 - GAME now works. There was something awful in multi.c, probably memory corruption with a static initializer, so SDL_Init() would die in XOpenDisplay(NULL). Yikes. I've stubbed out what game.c needs for multiplayer and put it in multi_tcpip.c (guess what THAT'S for. :) ). The original multiplayer code is completely modem and COMit based, and is useless anywhere but DOS, so this isn't a big loss. Added some support for building under Cygwin, but not much. Note that distributing binaries of BUILD built with Cygwin violates the GPL, due to newlib's license, so don't do it. But you can try compiling your own local copies. Where the hell did CONTRIB go? Quick rewrite of that file. Minor glitches and sound (and networking?) are the only things pending. 08302000 - Temporary fix; either nsqrtasm() or its tables are not correct (our C rewrite gives exactly the same results as the ASM version, too), so we've replaced it with a call to the C runtime's sqrt() function, which seems to work fine. I hacked at getting better calls to timerhandler(); still not happy with the results. I also fixed some stuff in sdl_driver.c, so you can have resolutions > 320x200 in 3D mode. Use F4 in the game to change modes. Dunno how you change it in the editor, but you'll note that the 3D mode defaults to 640x480 now...this is where the editor SHOULD be, but I had 320, 320 hardcoded in _setgamemode() for some strange reason. Oh, and CONTRIB was lowercased. That's where it went. URL for this project is now listed on Ken's homepage. 09012000 - Happy September. Code tree is now available via CVS, thanks to Matt and "witten". Dan fixed another keysym. port i/o macros were being called when changing to 3D mode in the editor; #ifdef'd to PLATFORM_DOS, now. Misassembled opcode in msqrtasm() is now fixed, so the function operates correctly. Removed the #if 0, so that ASM now gets used. 09032000 - Dan fixed some printext16 calls in 2D mode. Added a BUILD_NOPENTIUM environment variable: if set, it disables PentiumPro/PentiumII/MMX optimizations. The code runs at more than 10fps less without the Pentium overlays on my box (62fps to 50fps in the start of nukeland.map at 640x480). I tried adding all the crazy compiler optimizations I could think of. First, anything above -O2 causes engine.c's compile to fail with a duplicate label from setgotpic. This is an optimizer bug in inline asm. It cuts and pastes it to inline it into each function, despite __volatile__ and the lack of an inline keyword on the function where the ASM exists, and you get a duplicate label. It's dumb. All the other optimizations I threw at it worked, including pentiumpro compilation, -fexpensive-optimizations, and -funroll-loops, but there was absolutely NO increase in frame rate. I imagine most of the time in 3D mode is being spent in a_linux.asm anyhow. If we ever get this converted to C, those optimizations will be more handy, I imagine, but for now, I've not committed the Makefile. Cleaned up the README. After some tinkering, I managed to get build to compile and RUN on Windows 98 with Cygwin. I can't distribute binaries of this, as it would violate the GPL. However, I will be merging the changes back into the main source once I figure out the best way how. Mostly, the inline ASM needed some hacks, but nothing I can cleanly #ifdef. Amazingly, mprotect() worked identically on Linux and Cygwin. The mind boggles. Changes that have made it into the CVS repository for the Cygwin work follow: Removed dependency on the SDL event thread (SDL_Init() fails on Win32 if you request an event thread), and put SDL_PumpEvents() calls into _idle() and _nextpage(). This seems to work fine, but there can be some breakage if there's a keyboard polling loop somewhere that doesn't call either of these functions. Added some %define macros to a_linux.asm to handle C compilers that append an underscore to C identifiers. Updated the Makefile for cygwin and other improvements. 09052000 - Checked if Duke3d maps can be edited. Apparently they can be, but only sorta. Quitting from 2D mode only prompts you to save if you've changed something, now. Fixed the CVS info in README. Added Duke3D and Shadow Warrior data file info to README. Minor cleanups in the Makefile. Moved VIDEOBASE defines to display.h. _platform_init() now takes icon and titlebar titles, and has been updated in all drivers. 02102001 - Someone on the 3DRealms Web Forums finds icculus.org: http://www.3drealms.com/cgi-bin/ultimatebb.cgi?ubb=get_topic&f=5&t=001318 02132001 - (Five months later...ugh.) Dan noticed that my webpage is being discussed on the 3DRealms forums, so I went back into the code and finished the work to get this running under Cygwin. Here's the list of that work: Makefile is now more robust, added a non-__attribute__ version of asm_prohlineasm4() to a.h, moved some #includes in cache1d.c to prevent a double-definition of O_BINARY. Fixed the inline asm in engine.c and pragmas.c to handle C compilers that add underscores to identifiers. Removed the SDL_HWSURFACE flag in sdl_driver.c (didn't realize this is actually slower on most hardware, and it also breaks fullscreen mode in Win32 on my box). Had to #ifndef CYGWIN the fnmatch stuff in build.c until I find a portable, non-GPL solution. 02142001 - Dan Olson nailed an assembly bug that caused segfaults in the 2nd overhead view in Ken's game. After that fix was applied, I tagged the current CVS as "final-non-win32", as I start the effort to make this thing compile as a native win32 executable with (gasp!) Watcom C. Lots of stuff is getting torn around, as assumptions get challenged: PLATFORM_UNIX vs. PLATFORM_DOS? Now there's a PLATFORM_WIN32. unix_compat.h's display stuff has been moved to display.h, and all the files include "platform.h" instead of unix_compat.h, which allows us to choose the correct compatibility header at compile time (win32_compat.h, unix_compat.h, or doscmpat.h). All the platform-specific includes (io.h, and such) have been moved into their respective compat header, which cleaned up a lot of mess. Just to keep it real with Cygwin, the Makefile now autodetects Cygwin, and sets the build properties accordingly. Using a non-Cygwin GCC on Linux doesn't set the Cygwin-related properties. SDL_INC_DIR and SDL_LIB_DIR can be set as environment variables, so you never need to touch the Makefile directly with Cygwin. "make clean" now cleans up various Watcom C output, and vi's annoying "~" backup files. Tons of patches and enhancements and little cleanups just to get this to build on Watcom. Thing builds now, but has lots of problems running, which will be resolved, hopefully, tonight. The Linux version still works fine, and presumably so will the Cygwin version. Overall, the quality of the port's codebase is improving through this effort. I wonder if the DOS version will build now... 02152001 - Did initial work to get a protected mode DOS binary running again. Hey, why not? Not complete (compiles clean, no link). Lots of cleanups, and again, this is improving the quality of the port's codebase. As usual, the Linux, and presumably Cygwin, versions still compile clean and run. Haven't tried Watcom/Win32 tonight. Renamed dos_driver.c to dos_drvr.c, so you can build the DOS bits on a regular FAT filesystem. Added a Makefile.dos for use with Watcom C's wmake (based on Ken's original). Lots of other files touched. Added a "make package" rule to the Makefile, to improve the quality of my own life. Added (har) a FILEID.DIZ file, which is really used for the package's zipfile comment, but I always wanted to have one of those. :) 02182001 - Removed the ENDLINE_CHAR stuff in build.c; that textfile reading code is now able to handle '\n', '\r', and "\r\n" endlines. The findfirst/findnext/whatnot code now works on Linux, Cygwin, and Watcom C (dos, and win32). It's still kludgy, though. More compat header cleanups. Figured out how to get SDL working fully with Watcom C (-ei command line to wcc386.exe, and declare your SDL callbacks as __cdecl, etc.). 02192001 - More Watcom fixes; build.exe's 3D mode is now fully operational. One graphical glitch in 2D mode, still, but otherwise appears fully functional. Put safety checks in a.h. Put a fix in build.c's overheadeditor(), so it doesn't try to reference element -1 in an array when clicking the left mouse button. Other ASM cleanups. Fixed an annoying function declaration in bstub.c. Fixed an incorrect assumption in sdl_driver.c's VBE_setPalette() that was exposed by game.c under Watcom/win32. One quick addition of the keyword "extern" to game.c, and we have a working game.exe under Windows that isn't GPL encumbered. Woohoo! Added a Watcom/win32 Makefile, updated the README, and released win32 binaries. 02202001 - Turned on more optimizations in the Watcom makefile, and cleaned it up/abstracted it for public use. Added an nt_win option to that makefile to make it not pop up a console window when started from an icon. Added README-win32bins.txt to the CVS repository. Fixme note to self added in engine.c, and an incorrect use of ASM in pragmas.h was repaired. Now the drawpixel16 function is working, closing the last bug specific to the Watcom/win32 port. Yay. 02212001 - Fixed the timer bug! It was a one line change in game.c, pointed out by Matt Saettler. Amen. This led to a better abstraction: PLATFORM_TIMER_HZ, defined in platform.h ... Removed the wedged-in call to SDL_PumpEvents() in game.c...not needed anymore. 02222001 - Ported the codebase back to DOS. Point wmake.exe at Makefile.dos. 02262001 - Added code to enable write access to self-modified ASM memory pages so this will work on WinNT and Win2K. Discovered it wasn't needed, and the real problem is that Watcom produces an incorrect PE header in the generated EXE files. Steven Fuller dug up a program that fixes this, and did a ton of debugging. Added him to the CONTRIB file. Fixed Makefile.w32 and changed the default builds to optimized and not debug to make binary distribution easier. Automated the packaging of binary releases in Makefile. 04262001 - EDuke 2.1 goes into private beta. Will it be the last release based on Ken Silverman's original BUILD object code for Duke Nukem 3D? 05102001 - Embedded a Perl interpreter that runs a function in game.pl once per frame into the KenBuild game. This is just a test for a future project, and probably shouldn't be compiled by the average person. Changes to the Makefile, game.c, game.pl, and buildperl.[ch] were added. Changed all occurances of my email address from lokigames.com to linuxgames.com. One or two comment tweaks elsewhere. Updated README with SDL12 CVS instructions. 05192001 - Demands SDL_HWPALETTE, which seems to fix 8bit color targets. Added other debugging info to sdl_driver.c, and put the (commented out) starts of hardware surface/double buffering/page flipping support. Updated TODO. 05222001 - Updated TODO again. Cleaned up engine.c's forward function references. Put together engine.h, so that the engine's exported functionality can be referenced via one header instead of a list of function declarations plugged into every file. Made everything that shouldn't be exported from engine.c static, but this is an error-prone process, so it'll probably get tweaked as other Build related code gets tried with this engine. Similar cleanups in build.c, display.h, and elsewhere. Laid foundation for an OpenGL renderer. No actual rendering is done, just context creation and library setup when _setgamemode() is called on a system that uses the SDL driver. This work may never get finished, but why not try? Flip the "useopengl" flag in the Makefile to use this code. Cleaned out a commented-out printf in maskwallscan(). Moved New static flag in engine.c: initengine_called is set when (surprise) initengine() is called. This is currently just used with the MMX overlay code...now dommxoverlay is no longer exposed; use setmmxoverlay() and getmmxoverlay() instead. Updated build2.txt with this information. Removed global var: cachedebug in engine.c, and put #define BUILD_CACHEDEBUG 0 at the top of the source. Flip it to 1 if you ever need to tinker in the cache code. Removed krecip() from engine.c, since nothing uses it (it just wrapped krecipasm(), which IS used all over the place). Other cleanups were made, along with update in build.txt. Lots of code was touched in ways not appropriate to mention in polite company. 05232001 - Added lookup.dat support code, thanks to TerminX's help. Changed initgroupfile() to not exit() if the groupfile won't open(). instead, we check for failed return values in ExtInit() (bstub.c), like we should have done from the start. Added check in ExtInit() for the environment variable BUILD_GROUPFILE, which will be the groupfile to open if the variable exists. If the variable isn't set, we default to Ken's "stuff.dat". Between this and TerminX's lookup.dat code, we should be able to wander around a Duke3D map without segfaults all over the place. Changed initgroupfile() and kopen4load() to take a (const char *) argument. Should probably show some diligence in adding this elsewhere, too, for the sake of cleanliness and bughunting. Added some more function declarations to engine.h. Updated README with new info on Mapster and Duke3D. 05262001 - Finally unearthed a copy of Watcom 11.0! Fixed up all the GNU inline asm so that the Watcom preprocessor wouldn't puke on it, and built new win32 binaries...apparently Watcom 11, unlike 10.6, can make a PE header that WinNT and Win2000 will accept. Moved the Win32 version up to SDL 1.2.0 from SDL-1.1.8, and added a Watcom __cdecl pragma in display.h for SDL_VideoDriverName(). Updated TODO. 05272001 - Added engine.h to dos_drvr.c to get the DOS binaries to compile. Added README and CHANGELOG to the win32 and dos bin distros, and updated README-dosbins.txt and README-win32bins.txt. Updated README with info on Watcom 10 vs 11, porting to new OSes, etc. Updated TODO, AGAIN. :) Wrote a hopefully-robust function that toggles the screen surface between windowed and full screen without using SDL_WM_ToggleFullScreen(), so that you can use ALT-Enter on Win32. Accordingly, removed references to SDL_WM_ToggleFullScreen() in display.h and sdl_driver.c ... The new fullscreen toggle code throws up on Windows if you destroy the window (via SDL_SetVideoMode()) while in the middle of handling one of its events...we were processing all events via the SDL event filter during the SDL_PumpEvents() call. I've added handle_events() to sdl_driver.c, and replaced all the PumpEvents calls with that. This gets its events via SDL_PollEvent(), and passes them on to our filter manually. That's just generally better practice anyhow. Put hardcoded environment variables in sdl_driver.c into constants. Hall of mirror debugging, and all the BUILDSDL output to stderr is now all compiled in, and trigged by the existence of the BUILD_SDLDEBUG environment variable. Build now always claims to have standard resolutions (up to the largest your system claims to handle) available, and SDL will fake it if they aren't there. This should fix the Win32 F4 problem, and people without other modelines listed in their XF86Config. Also, by setting the environment variable BUILD_SCREENRES, you can add one window of any dimension to the list. For example, "export BUILD_SCREENRES=666x666". 05282001 - Added a maximum screen resolution of 1600x1200. This can be raised or lowered with an environment variable: export BUILD_MAXSCREENRES=1024x768, if you like. Renamed BUILD_NO_MOUSE_GRAB to BUILD_NOMOUSEGRAB for consistency. Renamed BUILD_SCREENRES to BUILD_USERSCREENRES. Rewrote the spaghetti that all this resolution management code had quickly become. The fight with attempt_fullscreen_toggle() continues: gave up, and just called setbrightness() to fix the palettes. Now tries to use SDL_WM_ToggleFullscreen() first before doing it The Hard Way, and just returns if there's no window manager reported by SDL_GetVideoInfo->wm_available. All the debugging output (of which there is still more added today) has been cleaned up and is passed through a function called sdldebug() that is used like fprintf(stderr), but adds the "BUILDSDL: " string to the front, a newline to the end, and prints nothing if debugging is disabled. TODO is, as usual, expanding. Added BUILD_HALLOFMIRRORS environment var, so that it isn't bound to BUILD_SDLDEBUG anymore. The BUILD_SDLDEBUG variable now needs a value: the file to write debug information to. The value can be "-" to write to stdout. This is for that obnoxious win32 platform. :) 05292001 - Added a hack for Windows systems using the "windib" driver. Apparently windib has no way to distinguish between the return key and the keypad enter, and they both come up as the former. Now, if you hold down SHIFT while hitting either return or the keypad enter, sdl_driver.c reports to the engine that the keypad enter was pressed. Now I can get into 3D mode on WinNT 4.0. :) 05302001 - More toggle_fulscreen work. Check to see if the debug output file was opened, and printf() a warning if not. setbuf(..., NULL) was no longer called on stderr and stdout in sdl_driver.c's version of _platform_init(), but the buffer is set to NULL for the debug file now, which may or may not be stdout. Just for a goof, I added vmWare virtual machine detection code, which returns false in the portable C version, and does some lowlevel voodoo in i386 asm. 06012001 - Added sdldebug() output to list the version of SDL we compiled against, and the version we are linked (dynamically) against. 06082001 - It's Neurotic Cleanup Day! Started putting support for compiling with Visual C in place, and found how anal their anal settings can be (does this beat -ansi -pendantic on Linux? Probably not.). Converted all the "//" comments to "/*" (ugh), and added explicit casting where needed. Replaced references to "long long" with "__int64", which is #defined appropriately in the compat headers. Now compiling the codebase with -ansi and -pendantic on Linux and Cygwin. Changed PORTSIG in build.h. Moved the sound stubs out of sdl_driver.c and into a #ifndef PLATFORM_DOS block in game.c; it's KenBuild-specific, and I'm not interested in implementing it cleanly, or at all, for non-DOS platforms. Cleaned up rest of the forward references in game.c and build.c. Cleaned up the OpenGL debugging output (it's now unified with the sdldebug() code). Renamed a_linux.asm to a_nasm.asm, since it's used on Linux and Windows (and probably everywhere else that there's an x86 system that isn't using Watcom). Implemented stricmp() on unix (damned -ansi flag). Updated TODO and README. Changed the display driver function _initkeys into initkeys. This will force a link error in Build games, so they can be updated to call the driver's init function; updated this in build.txt, too. 06122001 - Made mmulti.c compile with -ansi and -pedantic, as that might be needed later. Testing the OpenGL waters again. Added string_dupe() to replace strdup(), and changed a snprintf() call to sprintf() in sdl_driver.c, so I could remove the _GNU_SOURCE define. 06132001 - Changed Unix makefile, so that you can (by setting usedlls=true) compile buildengine.so and buildnet.so, and the game and build binaries only statically link what is absolutely necessary. Setting usedlls=false statically links all the Build code together, although currently external libraries like SDL are still linked dynamically. Platform drivers now need to store _argv and _argc. Commented a few functions in engine.c as I start to grok what each bit of code does. 06232001 - Cleaned up some whitespace issues in pragmas.c. The one SDL dependency in engine.c has been abstracted into _updateScreenRect() and implemented in the display drivers. OpenGL should now always be compiled in unless you can't even build it (and thus, I've officially flipped useopengl to "true" in the Makefile). You can now choose your renderer at runtime by setting the BUILD_RENDERER environment variable: Set it to "software" for the usual drill, "opengl2d" for using OpenGL to move the software-rendered framebuffer to the screen (got this idea from zsnes. cool.), and "opengl3d" to try to render an actual 3D scene in OpenGL. Default is "software". The 3D stuff hasn't even been started, since it'll need an actual implementation in engine.c. The gl2D stuff is an hour's work. After the 3D implementation is in there, I'll be adding Makefile flags and code #ifdefs to prevent compilation of the software renderer, which will end the need for most, if not all, of the assembly, and get us running on different platforms. I know, easier said than done. Other little cleanups and enhancements. 06242001 - Followed through on my threat, and split off most of the OpenGL code into buildgl.c. :) Added more GL func pointers, and tried (failingly) to get OpenGL2D more working. It's way too slow; I guess all that conversion from 8-bit, through the lookup tables, to 32-bit, back to whatever the screen depth is, etc is expensive. Looks like it's just software rendering and full 3D. Sigh. More SDL cleanups. (committed on Aug 1st). 07082001 - Implemented support for PhysicsFS in cache1d.c; this allows you to replace your GRP file with a compressed ZIP file. This is optional, since it's an extra dependency. PhysicsFS is another one of my projects, and information and source for it can be found at: http://www.icculus.org/physfs/ ... (committed on Aug 1st). 07162001 - Moved CVS repository to icculus.org. Updated README. 08012001 - Committed some stuff, fixed a bug in the PhysicsFS code. Flipped the useopengl flag in the Makefile back to false for now. Added PhysicsFS info to README. Changed all occurances of my email address from linuxgames.com to clutteredmind.org. --ryan. (icculus@clutteredmind.org) /* end of CHANGELOG ... */