Ok, well, I'm cleaning this .plan out. Just because you don't see some
previous project listed here doesn't mean it isn't being worked on anymore,
it just means there isn't anything worth noting at the moment. Most will
reappear over time. Also, right now a lot of what I'm working on hasn't
been cleared to mention publically, even though they aren't Big Fancy Top
Secret Projects. Time will change this, too.
But in the meantime...
Don't email me asking for updates. You really just aren't entitled to any.
Sorry if that's rude, but really, so are most of your emails.
2.4.0 for Linux is in beta testing Right This Very Minute. The MacOS version
isn't far behind. I expect the Mac one to go to beta during WWDC, if I can
find somewhere to upload the whole thing. Like Windows, there will be no
patch from 2.3.0, so expect to be downloading the whole thing. There is no
patch because the patch version was basically the same size as 2.4.0's full
install...2.4.0 is the first version based on ut2004's codebase (all the
previous ones were sort of a pre-ut2003/ut2004 potluck thing), so basically
all of the data file formats changed. The next version after 2.4.0 will have
a patch from 2.4.0, for what that's worth. In the meantime, start making
friends with people that own both cable modem and a DVD burner. :)
If you're buying Apocalypse Weekend from gopostal.com and want one CD
that has Mac, Linux, and Windows installers, you have to ask for it (it's
the one labelled "Meal Deal #3: Minority Combo". The other combos are
a Windows-only disc, but here's a 4 megabyte downloadable installer for
MacOS that will work with the Windows disc: http://0day.icculus.org/postal2/postal2aw-macosx-installer.zip
Also, there's a new MacOSX patch for Postal 2 (1409.1): http://0day.icculus.org/postal2/postal2-macosx-1409-1-patch.tar.bz2
The Apocalypse Weekend installer will install the 1409.1 patch if you aren't
patched to at least that version, so you don't need both files if you are
Obviously, you need a retail copy of Postal 2 to use Apocalypse Weekend.
Linux versions of all this coming soon.
Unreal Tournament 2004:
So the latest Nvidia Linux drivers added support for the extension
GL_EXT_framebuffer_object, which, to those not in the know, gives OpenGL
functionality roughly equivalent to Direct3D's concept of render targets...
this is the render-to-texture support that has been sorely needed for several
bits of important functionality: namely, detailed shadows, motion blur,
the Hellbender license plate, and the scoreboard in DM-Morpheus. I have this
roughly working in my codebase already (the extension is sweet
exactly what I've wanted since ut2003 shipped). An hour of effort got me an
upside down license plate and blocky shadows, so this isn't ready for the
public yet, but it looks like you'll have this sooner or later after all. If
the extension shows up in MacOSX, I'll support it there, too.
Screenshots, warts and all:
(ArmyOps 2.4.0) http://icculus.org/~icculus/tmp/shadows.png
Other stuff: Blatant Plug
: Buy Brian Hook's book, "Write Portable Code". I proofread
some earlier drafts, and it's got some really good information for anyone
who's developing software...it's useful even if you're just targeting
Windows, and anyone that's serious about writing quality code should have it
on their bookshelves. http://www.writeportablecode.com/
From the "Fix the Fucking Finder" department:
I am genuinely sick of Launch Services being so overagressive about caching
information. I hate working with icons in an app and having them not show
up without logging out or restarting the machine, or other wierd things, like
trying to launch a program with a broken binary, which Launch Services
obviously can't help, but then when you fix the problem, you still get the
same cryptic failure ('open LSOpenFromURLSpec() returned -10827'...
what the hell?).
So here's a little C code to tell Launch Services to recache an app that
it has bogus information about. Yes, it's really 2005, and we're still
rebuilding the desktop database. How awesome.
* build with:
* gcc -Wall -Os -s -o lsforceregistration lsforceregistration.c -framework Carbon
static void force_reregister(const char *file)
if (realpath(file, fname) == NULL)
printf("realpath(\"%s\" failed on element \"%s\"\n", file, fname);
CFURLRef cfurl = NULL;
const char *urltype = "file://";
size_t len = strlen(fname) + strlen(urltype) + 1;
char *url = (char *) alloca(len);
snprintf(url, len, "%s%s", urltype, fname);
printf("(re)registering %s ... ", url);
cfurl = CFURLCreateWithBytes(NULL, (const UInt8 *) url, len, kCFStringEncodingUTF8, NULL);
if (cfurl == NULL)
printf("URL creation failed...?!\n");
OSStatus rc = LSRegisterURL(cfurl, true);
if (rc == noErr)
printf("failed! (rc==%d)\n", (int) rc);
int main(int argc, char **argv)
for (loop = 1; loop < argc; loop++)
/* end of lsforceregistration.c ... */