OK, I finally got to really play this and I have a few comments.
Thanks for taking the time to play! I'll try not to over-reply to all your comments. In other words, I'll try to be concise.
1. You should really try to improve the artistic aspect of this game.
Heh, I got carried away. Yes, I plan on making my next game a little more subtle on the eyes. I thought Toggles might be overbearing, so I tried to make a way for users to be able to make their own theme. However, that didn't work out too well either.
2. In connection with #1 the font is not good.
I think I started to pick up on this during the last phase of coding. There's only two fonts in the game, the main font and the help font. I think the help font looks quite a bit better then the main font. This is just a matter of practice and trial and error. BTW, I really wish your Font Editor had an undo button.
3. The "how to play" screen explains everything except what the goal of the game actually is.
I thought the quick instructions went over this. Is it just not clear?
4. Scoring could be more balanced.
I wanted the scoring to be complex, so that way people could develop different strategies to play the game. I guess I made it too complex to the point where it doesn't even make sense.
It seems like you don't get a lot of points for finishing a level
Finishing a level, no, getting 100% of the toggles under water does give you a little bonus. 100% of the toggles is worth 100 points times the current level. This was set up for the strategy of not adding rows and columns on the penalty wheel so it's easy to get all the toggles down in the next level. You could get a nice 2000 points in level 20 for getting all 100% of toggles down. However, that's not as much as the 3000 bonus bag (which rarely shows up).
Or do the combos give you extra score?
Yes! Combos are the way to get that 400,000+ scores. If you get X consecutive* toggles down in under three seconds, you get a combo, which gives you a certain amount of points times the current level. The first combo is worth 10 points times the current level if you get 10 consecutive toggles down. The second combo is worth 50 points times the current level if you get 25 consecutive toggles down. Thus, once you get the first combo, you just need to hit 15 more toggles to get the second combo (all within that 3 second timeframe)! The third combo is at 45 consecutive toggles and is worth 500 points and the fourth combo is at 70 consecutive toggles and is worth 1000 points.
For one last example, I managed to get the fourth combo in level 21 for my top score. That means in three seconds I got (10 * 21) + (50 * 21) + (500 * 21) + (1000 * 21) + 70 * 5 = 33,110 points! The parenthesis represents each of the four combos and the 70 * 5 is for the 70 toggles I must have hit to get the fourth combo (each 5 levels the toggles are worth 1 more point, thus when you get to level 20, toggles are worth 5 points). I got to level 30 on that top score.
Does the loading function time out after a while?
Yes, 15 seconds.
In my game I put the server communication code in a separate thread, so everything happens seamlessly in the background...
Threads are new grounds to me, other than what I learned in school. I'll have to learn how to make them portable across linux and windows (or does pthreads work on both OS's?). I'm working on a program now that might require these, so afterwards I might upgrade Toggles as well.
If you get a combo and then immediately loose the game, the word "Combo!!!" stays on the screen.
Gotcha, that'll be an easy fix.
7. The bonus selection wheel shows pixels that are obviously supposed to be magenta but aren't quite pure enough to be skipped by draw_sprite().
It use to show a lot more. Anyway, I'll fix it.
I haven't checked the code, but are you sure you're drawing the cursor in every frame?
That's really odd. If the config is set to 0, right before the buffer is drawn to the screen, the mouse (which is just a bitmap) is drawn to the buffer at mouse_x, mouse_y. Although, I do call poll_mouse() right before...
9. The ultima powerup is useless. If you use it, a green circle starts to appear and then you loose because time runs out. You should freeze time when ultima is used.
This is by design. I wanted ultima to be an automatic win of the current level unless time ran out. However, I suppose I could just make ultima an automatic win.