Well, in case anyone's interested, the weird bug I was running into with digging was caused by a stupid mistake. Here's what happened:
Originally I had a function that looked something like this:
if(exit_progress >= 1)
OpenExit(exit);
which worked fine. Logically, however, it turned into:
if(exit_progress >= 1)
DoStuff();
OpenExit();
Which of course resulted in it only doing stuff if exit_progress is greater than or equal to 1, but always calling OpenExit() regardless of how far along the exit's progress actually was.
So as not to confuse those not familiar with C syntax, the proper code would look like:
if(exit_progress >= 1) {
DoStuff();
OpenExit();
}
Yes, the lack of brackets took me a full day to figure out. I am truly a terrible programmer.
So, anyway, digging is working now. It's a little weird, but I'll figure that out later. The next issue is figuring out how doors might work, given the dynamic nature of the world we're creating.
Also, does anyone have anything to say about ramp-style exits (as mentioned in an earlier post)? If no one complains and/or suggests a better alternative, they're going in. Honestly, the only issue I foresee is with the descriptions... I mean, would it be "A hole opens up in the northup wall" or "A hole opens up in the north wall" (which could be confusing) or "A hole leading up opens up in the north wall"? All of those seem a little clunky to me, though I guess I'll figure it out.