Monday, October 08, 2012

Gridiron Solitaire #24: In Which I Run Out Of Post Titles

I have to admit, it gets a little discouraging to see these post title numbers rise into the 20s.

Having said that, though, I got quite a bit done last week. For quite a while now, there have been two outstanding bugs, and I finally fixed them both.

The first bug involved visibility of the new drive stopper canvas on the first drive of the second half. If the CPU started the half with the ball, there were times when the drive stopper wouldn't show up on the first play. Rarely, it would be missing for the entire drive.

This didn't crash the game, and it always fixed itself, but it was still annoying. It wasn't working right, and anything not working right drives me crazy.

I've thought about this for at least two months, but in the middle of a highly stressful day last weekend, as I was driving somewhere, the answer came to me. There are two ways in a WPF application to set the visibility of a control ("control" includes any onscreen element, among other things): with the IsVisible property, and via Opacity.

Primarily, IsVisible is what gets used, because it turns visibility on and off. Opacity is more of an analog in terms of visibility, as the control gets more/less visible. However, at 0, the control is transparent.

There are a few cases where I needed a visual transition instead of an on/off switch, and in those special cases I used an animation involving the opacity property to "fade out" the drive stopper canvas. This animation has to be "reversed" at the end of a play; otherwise, the canvas would remain transparent going forward (the property would retain the setting at the end of the original animation). I have a clean-up sub at the end of every play that includes reversing that animation, but on the last play of the half, it wasn't running if there was a text event that ended the play (because a special halftime sub ran in its place).

So when the second half started, the drive stopper canvas was visible in terms of the IsVisible property, but it was transparent, making it not visible to the user (and again, this was inconsistent, because if there wasn't a text event on the last play, there was no problem).

Once I knew what was causing the problem, it was easy to fix.

The second bug involved an early reveal of the outcome of the coin flip that takes place at the start of Overtime. In certain cases, the user would see the play selection buttons (tipping the outcome of the coin toss) before the text event announcing the outcome was completed.

Again, this doesn't crash the game, but it's the kind of amateurish crap that drives me crazy because, well, I AM an amateur. I drive me crazy.

Once the drive stopper canvas bug was fixed, I realized that a text event occurring on the last play of regulation might be causing the overtime bug as well. Sure enough, it was, and once again, it was an easy fix once I knew what was causing the problem.

The beta feedback has consistently been both thorough and helpful.  It's identified problems I didn't even know existed (at certain resolutions with with multi-monitors, for example), identified certain areas that need better/more dynamic help, and there have been some excellent feature suggestions, some of which I'm implementing (not big features, but nice touches).  

This week I'm focusing on two things: adding more dynamic help, and taking a detailed look at the offseason mini-game. Both need improvements, and now that quite a few of the testers have either reached or are nearing the offseason, it's a good use of time to improve that area. Previously, I'd been almost completely focusing on in-game issues, but now there are very few of those remaining, and they're all minor (for now, anyway).

One nice thing about the beta is that it's clear that most of the testers are enjoying and appreciating the personality of the game. After working on it in virtual isolation for such a long time, that's a good feeling.

Site Meter