(Seen my glasses? I'm a dork.)
If you want a specific section of my plan, you can use the web interface
Or directly through port 79, if your finger client will let you get away with:
This is part of the new, improved IcculusFinger. Yay.
(This is in no particular order)
- The icculus.org open source incubator.
- The Build Engine.
- Serious Sam.
- various Pyrogon things.
- Other stuff.
I have projects on icculus.org (some are even mine) that are already
abandoned. I will have to figure out what to do with them. If you want to
peek around, look at The CVS Tree.
The iMac RAM that I ordered showed up a few days ago. The chip's a tiny
grasshopper! I'd had never seen 140 pin RAM before, but apparently this is
commonplace in the realm of laptops and flat-panel iMacs.
I ran in to a slight problem when I installed it.
The instructions: http://docs.info.apple.com/article.html?artnum=26239
Reference figure six on that page...see the two clips circled in yellow?
The one on the right is missing in my iMac. Looks like it snapped off.
So I plugged in the chip anyway, and the other clip wouldn't hold it. The
RAM just popped back up to a 45 degree angle, which is no doubt occurs to
make removing the chip easy, but the damned thing just wouldn't stay
down. I kinda coerced the chip to stay in place once, screwed the case
back together, and heard the chip smack against the inside of the computer
when it popped out again, before I even got the system back to my desk.
This was not going very well.
I opened up the case and took a look again.
You can see in figure seven that there's a bit of an indent in the metal
surface where the RAM chip (and AirPort card) go.
I took a floppy disk, split it open and took out the disc and metal parts,
so I had a semi-rigid, and very thin piece of plastic.
I crammed that hunk of plastic under the edge of the indent, so that it
covered the RAM chip. With a little pressure, I managed to screw the case
back on over it. The floppy chunk is now filling the space between the
metal outside case (figure 9) and the RAM, so the RAM is forced to lay
flat. Instead of the clips holding it down, the plastic is pushing it to
that position. Same effect, different angle.
Amazingly, the system booted and found the RAM on the first try. I'm sure
I just voided my warranty, and I'm waiting for the iMac to catch fire. It's
been working like a champ for over a week now.
Yes, I'm porting it. No, there's no timeframe right now. Email me with
questions, and I'll start a FAQ or something.
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:
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:
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.
(FAQ snipped. Check the archives.)
Somewhat immediate TODOs:
- Check for zlib 1.1.3 remnants on icculus.org.
- Yuri's Revenge support in csmhax0r.
- Have csmhax0r flip read-only flag.
- Reburn damaged music disc.
- Read Bernd's Gamasutra article.
- Nag Kent about MindRover again.
- Nag Vince about dedicated server stuff.
- Report compiler issues to Intel.
- CodeHost STB.
- Clean up the damned logfiles.
- Port Serious Sam. ( 9%)
- Rewrite IcculusNews. ( 98%)
- Release SDL_sound v1.0. ( 92%)
- Release PhysicsFS v1.0. ( 95%)
- SDL_mixer rewrite, using non-existant SDL_sound library. ( 0%)
- Toby rewrite #4. Way overdue. ( 20%)
- Documentation for Toby. YEARS overdue. ( 0%)
- Major SMPEG updates. ( 0%)
- Rewrite web interface to mailing list archives. ( 0%)
- Write The Hook Book. ( 0%)
- Read A Beautiful Mind. ( 1%)
- Read On the Road. ( 10%)
Backburnered, but reasonable TODOs: (in no specific order):
- Hook up CVS to IcculusNews.
- Figure out how to monitor exactly how much bandwidth we've used per month.
- Hook up mailing list software to IcculusNews.
- Hook up Bugzilla to IcculusNews.
- Rewrite Toby's parser.
- Finish writing Punk Ass Comedy.
- Finish writing The Street.
- Finish reading The Dragon Book.
- Increase memory/swapspace.
- Remove http://icculus.org/sysinfo/todo.html
- Clean up room.
- Clean up home dir.
- Set up meldrew.
- Get nerf updated for SSL support.
- Put all the header/footer functions for icculus.org in one PHP file.
- Get Dreamcast Linux working.
- SDL OS/2.
- SDL LightPen/tablet support.
- SDL MsgBox API.
- Make BUILD Engine support OpenGL.
- Fix the Linux Realtek drivers.
- Write scratchware.
- Physics engine.
- Get BUILD engine ready for Matt Saettler.
- Get Duke3D/COMMIT net API implemented for modern platforms.
- Get Duke3D sound API implemented for modern platforms.
- Beat Zork III. I will someday, I swear.