Do yourself a favor and go buy the GroVont Trilogy, by Tim Sandlin.
Skipped Parts, the first book, is like Catcher in the Rye if Holden
had managed to fuck the prostitute in the hotel room. This is a book about
13 year olds having sex (and having babies!) and features a collection of
situations that I've never been through...and yet, I completely understand
every thought that goes through the main character's head. This book speaks
to me in ways that only Salinger had succeeded in previously. Get it.
I'm about 50 pages through Sorrow Floats, the second book, but Sandlin
writes from a 22 year-old mother's perspective as well as he writes from a
13 year-old boy's.
The third book, Social Blunders, picks up with the 13 year-old boy
again, many years later.
These are the funniest books I've read about some seriously unfunny stuff.
They're about 400 pages each in paperback. I read Skipped Parts in
one sitting (and a good portion of it during UT2003 recompiles. :) ).
I also picked up some other books I've been meaning to read forever, but
somehow never managed to. One Flew Over the Cuckoo's Nest, On the Road, and
A Good Man is Hard to Find (yay Flannery O'Connor!).
Book store gift certificates are better than casual sex, I swear to god.

Serious Sam:

Yes, I'm porting it. No, there's no timeframe right now. Email me with
questions, and I'll start a FAQ or something.
Current Status:
I occasionally get an email saying, "hey, where the hell is Serious Sam
for Linux? It's been months, and your .plan has been collecting dust!"
My current favourite response:
Unless hours were cups of sack, and minutes capons, and clocks the
tongues of bawds, and dials the signs of leaping houses, and the
blessed sun himself a fair, hot wench in flame-colored taffeta, I see
no reason why thou shouldst be so superfluous to demand the time of
the day. I wasted time and now doth time waste me.
-- William Shakespeare
That being said, it's still being worked on. I'm so far behind schedule,
it's not even funny, but this is the danger of free work. I need to eat,
so when paying contracts come along, they will always take priority
over charity ports. In the past few months, a lot of Linux and MacOS
game porting work has come my way. Candy Cruncher was one such beast
(which, if you haven't tried it, then you are missing out on an
addictive little game). Other games, plus open source contributions to
SDL and friends, maintaining and improving icculus.org, etc...I'm a
mover and a shaker, apparently...but I'm still plugging away at the code
when I've got time. I can't thank you Linux gamers enough for your patience,
and hope it pays off for you shortly.
In related news, I squashed that motherfucker of a rendering issue. I moved
over to the Intel C++ compiler, since their 6.0 release doesn't suck ass
like version 5.0 did. I might stick with GCC for the final builds, but Intel
C++ has one thing going for it that makes it a great porting tool: it can
grok both GNU and Visual C style inline assembly. This was a godsend,
and fixed at least three major rendering problems. For example, there's
code that looks something like this in the original source base:
__asm
{
fld dword ptr [f]
fist dword ptr [slTmp]
fisubr dword ptr [slTmp]
fstp dword ptr [fDiff]
// ...some other stuff ...
}
I had this for the Linux build:
__asm__ __volatile__
(
flds dword ptr [f]
fists dword ptr [slTmp]
fisubrs dword ptr [slTmp]
fstps dword ptr [fDiff]
// ...some other stuff ...
);
(okay, the operands aren't right in the GNU one, but follow me here...)
Apparently, this is wrong, and created a very subtle rounding error in
the Linux version. I didn't discover this until I got the Intel compiler
to generate an ELF binary with the MSVC inline, and the bug mysteriously
vanished. At that point it was just a matter of compiling each source file
with inline assembly (there's about 10 to 15 of them) with Intel C++,
trying both the GNU and MSVC inline until I found the file that had the
buggy code. When I narrowed it down to that code fragment, I used gdb to
disassemble the MSVC inline version...this spits out assembly in AT&T (GNU
inline) format, and I could compare.
Here's the difference:
What I had: What I should have had:
flds (%%eax) flds (%%eax)
fists (%%ebx) fistl (%%ebx)
fisubrs (%%ebx) fisubrl (%%ebx)
fstps (%%ecx) fstps (%%ecx)
Why I was supposed to know that I needed to specify a different precision
to two of the opcodes and not the other two is beyond me. This is why
everyone thinks inline floating point assembly is broken in gcc. It's not.
Inline assembly in general is broken in gcc. Or rather, it's
braindead. I'm sure there will be people that disagree, but they don't
port games to Linux for a living. I think I'll send Michael Abrash a
love letter and send the Free Software Foundation a photocopy of my ass.
Anyhow, next hurdle is networking, then some polishing, and then (dear
lord), The First Encounter might be ready. Thankfully, the Second
Encounter should be a much smoother ride, since I just need to get the
entities (many of them cut-and-pasted from The First Encounter) compiling.
Again, thank you for sticking around. I'll keep this .plan more updated
in the future.
Those old Screenies.
Keep me and icculus.org going.
--ryan.
(FAQ snipped. Check the archives.)