2007-04-17

Scrolling and Bitmasks

Not a great deal done today, just trying to clean up some problems that occurred when the playfield wrapped. I noticed that the scanner was jumping a couple of pixels to the left or right when the environment passed the start point, and the mountains didn’t quite join up properly. The landers jumped about a pixel or so too.

I worked out that it’s something to do with the way I’m wrapping the playfield. I was going for the obvious:

void increaseScroll(u16 scroll) {
    // Add value
    this->scrollX += scroll;

    // Wrap around
    if (this->scrollX > 2047) {
        this->scrollX -= 2047;
    } else if (this->scrollX < 0) {
        this->scrollX += 2047;
    }
}

This was a more efficient solution, though, and it seems to have solved the jitter problem (and removed a significant amount of code):

void increaseScroll(u16 scroll) {
    this->scrollX = (this->scrollX + scroll) & 2047;
}

(A little later)

Heh, realised that the problem with the original was that I was deleting or adding 2047 from the scroll value, when I should have been deleting/adding 2048 (since scroll value is greater than 2047). Duh!

Also started adding the landers to the scanner - the x positions are right, but the y positions are wrong. Need to take into account the y position of the mountains in the playfield and the y position of the mountains in the scanner before that’ll work properly.

Finally, had a quick play with WiFi in PALib. It crashed the DS the first two times I tried it, but the third time it worked fine. Might be something to do with having to acquire an IP address from the DHCP server - first two times the DHCP server was too slow; third time it had already got an address ready when the DS came back on-line. Just a guess, though.

It seems that I was wrong about needing to recompile PALib with a WiFi switch - to enable WiFi support, you just need to alter your makefile. Find this line:

LIBSPA  := -lpa9

Change it to this:

LIBSPA  := -lpa9 -ldswifi9

WiFi now works.