Ah-ha! After weeks of no code but filthy Tuesday Fortran 90, I fix the fabled
excido bug. It was a subtle combination of many different areas of code. What
really got me about it was that the key mistake was in the Ufo class - when
sniffing around for stack corruption I gravitate to things like the graphics
and the sound subsystems, which have great big resources to manage, not pissy
little unintelligent enemy classes.
So here's what was going on:
1)Game ends, Ufo linked list destroyed
2)Each Ufo's destructor gets called, sees that Ufo.alive is true, calls Ufo::Die
3)Ufo:Die calls Game:IncScore to reward the player for the apparent Ufo-massacre
that just occured
4)IncScore notices that the score is past the powerup threshold, and tries to
create a nice new PowerUp in poweruplist, which doesn't exist any more,
due to the order in which things get wiped in Game::Happen
5)Memory is no longer containing what everything expects it to contain->
Something segfaults soon after. By pure coincidence, usually the physfs
calls for writing out the scoreboard and configuration
Righteously difficult to reproduce, one way and another. The actual offending
lines were written ages before the bug showed up, and functionally not
directly linked to the new code that 'created' the bug. Truly a proper bug,
if not all that incredibly complicated in the final analysis. Of course, as always
it was my own stupid fault for writing such silly code to begin with. Calling Die on
destruction must have been either very early in the morning or late at night.
Hiking to campus in order to access tEh intarweb. How tiresome. ADSL soon.
Valgrind is pretty cool. British Telecom are /not/ pretty cool.
Today's reason to be cheerful - I can ctrl-z warcraft 3 and do something else
with it in the background not touching the CPU. Very handy.
I continue to frustrate myself. free() fails, malloc() fails, but when I run
with electric fence it all works fine. I hate.
Complements to Game for having sane staff with the freedom to perform
reasonable customer service.
On the other hand, if they had confiscated my copy of Frozen Throne and just
made me sit on the floor and code some cool fortran->C interface framework
then I would be far better off. I'm tempted to blame the nature of the season
for my total lack of productivity.
I return, lazily.
For the benefit of anyone who comes here wondering why I'm so quiet, I'm out
of town for a few days. Bye.
Also, I've found a new sense of okayness about the current rash of excido
problems. I've tested the 0.1.3 release and found it to be stable, which means
that I'm now poring over a diff of 0.1.3 and current. I will find this little
Also, check out stroids3d: http://www.upl.cs.wisc.edu/~anthony/index.php?page=stroids. I haven't tried building it yet, but it looks pretty pretty.
Bah. Continuing with the annoying segfaults. Physfs, SDL and SDL_ttf are
all segfaulting on exit...SOMETIMES! Very, very annoying. I have to sit
there and play for quite a while to actually get the bugs to show themselves.
In other news, Frozen Throne. See you in a week! Actually, I'm not completely
happy about it - the cd I was sold in Game was obviously pre-owned. Stupid
me for not checking it as I walked out of the store. It's fine, apart from
the fact that the whole reason I bought it was for my nice legit battle.net
ID, which I'm now quite suspicious might be someone elses illegit key too :-(
Going to be quite funny taking it back to the store: me taking it back
could be the exact same thing that I'm worrying about - people harvesting keys. The reason I'm pretty convinced that someone would have nabbed the key is that
it couldn't possibly be a legitimate return - anyone who can run War3 can
run frozen throne, and no-one without war3 would have bought frozen throne.
Unfortunately my schedule is a little messed up at the moment. I must make
certain to get back to a Game within 10 days, I think it is.
Euch. Mysterious segfaults galore. Physfs is sometimes segfaulting when
trying to open a file for writing. Seems to depend on how long the game's
been running, bizarrely. There is a FIXME in the physfs function that
execution is in at time of segfault!
On the positive side, excido now has powerups, which pop up at random locations
when you pass certain score thresholds. That's groovy, but I will fix0r these
Lots more jolly excido high jinks today. There was a bug that prevented
compilation with current GCC, now fixed. Another bug has come to my attention
which I'm dealing with at present. More obscure, this one. OpenGL runtime
problem in the menu system. Possibly related to a problem in G400 drivers.
Yay for this morning! Got lots of positive excido feedback. Now I will have
to work more on it.
Right, packaged up 0.1.3 tarball and updated web site appropriately. Also
submitted update to happypenguin.org. Feel a bit unsure about that, since
I'm doing such incremental releases so often. However, I have no other
way to update the info about excido in their database, so I guess if it
keeps excido popping up to the top of the news frontpage, then that's
not my fault. Still, I hear echoing freshmeat jokes every time I do it.
Ghandi followed by A Bridge too Far on the beeb. They sooo wouldn't have
been allowed to screen that combo when we were about to coloni...liberate
iraq. The first film psyches you up to the wonders of pacifism, and the
second reminds you that war is hell.
Why is it so difficult to convince people that computers are not analogous to
washing machines, cars or television? I suspect it's because they've come to
view all electronic goods as consumerist phenomenon. That and raw fear.
Okay, I am now even less happy with these people. They called me up to ask
me to do some work on short notice (like 1 HOUR'S notice), and I said I'd do
it. Then, they call me back 10 minutes later, when I'm in the fscking shower
to cancel. Apparently they kept on calling people, and found someone who
could make it there sooner than I could. Charming. Travail, the employment
agency, are to be avoided. The other agency I've used are not all that nice,
and they're not strictly honest, but they don't screw you over this blatantly.
On the now abandoned Tampa facial recognition camera scheme:
"Police are at a loss to explain why the software wasn't effective, since it
seemed to work fine in controlled testing." - Atlanta Journal-Constitution
On his ditching of microsoft in favour of free software, Ernie Ball said:
"I'm not in this just to get free software. No. 1, I don't think there's
any such thing as free software. I think there's a cost in implementing
all of it." The interview ended at that point, as RMS entered and wouldn't
stop screaming until they promised to replace OpenOffce with emacs...
/Other/ temping agency called me up, then called up 18 hours later to cancel.
I am not happy with these people.
However, I _am_ happy with progress on excido. I've 'let there be light' over
the whole arena, which I hope creates the effect of an eerie glow from the
nebula in the sky. I still don't know exactly what I'm doing with this
lighting lark, but I'm managing.
Done other random bits of eye candy too, like shadows on the menus. Fixed a
couple of insignificant bugs in the menu system. Have one known serious bug,
where the screen goes bright pink and nothing works properly. Work on that
Today has been a day of fixing niggling bugs, and getting to know my code
better by making new bugs and fixing those too. In the name of feature-
expansion, I added a nice green fps meter. Doing this reminded me of the
horrific granularity of SDL_GetTicks() as a way of knowing simulation time-
step size. Must investigate alternatives.
Also, tried out Slickworm . Damn impressive stuff. Intend to poke around
in the source to learn and possibly contribute. Planning to redo my audio
class with an OpenAL backend at some point - current sound implementation in
slickworm appears relatively crude (also OpenAL based), so may see if
developer wants my sound code if I come up with anything remotely elegant.
Slickworm has lovely, lovely terrain rendering, and uses ODE (which I keep
meaning to learn), so the physics is fun too. It has deformable terrain,
however you're deforming a heightmap (imagine what happens if you shoot a
hole in the side of a mountain). I think that if I were writing something
like that, I would make it so that impacts to surfaces beyond a certain level
of steepness just charred, rather than cratering. The vertical extrusion of
the crater when on a mountainside really kills the otherwise slick illusion.
Graphics are nice beyond the terrain, too. Ubiquitous stencil shadows give
a strong feeling of sunlight. Comedy development release quirk - there's a
weapon model (first person view) but no character model. Therefore, when
one looks at the ground, one sees the shadow of a shotgun floating in mid-air.
I have a feeling that slickworm is a sufficiently cool project that it's
worth paying attention just so that one can casually say "Oh, yes, I remember
0.2, the handling was SO much better back then" in years to come :-)
 - slickworm.sourceforge.net
Temping agency called me up. Asked me if I would like to do the shitty job
that I did for a week previously and then gave up, and then told them I didn't
want to do it again a few days after that. When will they learn? I guess they
were hoping that I'd developered a crack habit and had grown desperate.
Yesterday, I accidentally made a flocking algorithm. I say accidentally
because I didn't know what I was doing, so it couldn't possibly have been on
purpose. Anyway, today I'm going to add nodes in the scenery that the AI tries
to avoid, to get away from the situation where they're almost always sliding
along the edges of the buildings to get to me.
Thought of clever way to deal with bug whereby player can escape the arena
through the edges. Then I tried it, found that it didn't work too well,
and fixed it using a one-line solution that I thought of while on the toilet.
Played with having the player modeled as a particle on a spring rather than
having 'fake' bounce in the hover, realised that it wasn't necessary yet
and would involve revamping certain things more than I felt like.
Played with a 'flamethrower' effect yesterday. Seems quite doable, although
would require me to have implemented animated textures to work well. Curse
gray matter for raising the bar so much on that one :-)
Collision detection is relatively functional at present. It's still only ray
poly detection. Sphere-poly today. Then that will be done for the moment
and I will have to find something more worthy to work on.
I've had it highlighted to me how inadequate Config::Load is, so will probably
rewrite that today. I intend to use Standard C++ Library strings, which is
going to be a first for me.
That was scary. I thought it was thursday. Anyhoo, today I will try and make
collision detection work somewhere near properly, paving the way for funky
scenery. You never know, someday in the future we may even get gameplay :-)
In other news, my sister is stuck in Toronto (where the power is out).
Greetings. I arrive on icculus.org, with my fledgling project Excido.
icculus.org/excido. What's currently available shows gameplay in a wide-open
arena. What I'm working on at this time is buildings - suitably cuboidal ones.