duke3d/buildengine/CHANGELOG

567 lines
40 KiB
Plaintext
Executable File

/*
* 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.
08232001 - Moved a.c to a_gnu.c and pragmas.c to pragmas_gnu.c. Added
pragmas_visual.c and a_visualc.c, and got everything compiling on
Visual C. Added VisualC.zip. Unzip it and use those files to build
with Visual C. Updated Makefiles, READMEs, etc with the new
*_[gnu|visualc]* files. Cleanups elsewhere. Added a "distclean"
target which just calls "clean". The Visual C project doesn't work
right now; I gave up on it.
06232001 - Fixed a hang when lotagging a wall (closing bugzilla bug #25).
--ryan. (icculus@clutteredmind.org)
/* end of CHANGELOG ... */