Topic: Improving game experience on a mobile device
I'm porting neverball to the Nokia N900, and among some technical difficulties with the porting itself, I found some other issues that affect the gameplay (due to screen size and different input: accelerometer and touchscreen). I should say that I just recently found neverball, and I played it only briefly on a desktop; so, it may be that some of the points are also valid for the desktop.
Accelerometer input: when controlling the floor with the accelerometer, it's practically impossible to hold it completely still. As a result, the ball is also always moving, and this causes the gameplay to be extremely difficult. After the 5th level in the easy mode, the gameplay becomes really difficult already.
My initial attempt at solving this issue has been changing the accelerometer input function so that instead of reporting the angle itself, I report a non linear function of it (such as x^3), so that variations of the device angle around the 0 value produce a very little change in the game stage. This helps in having the stage more stable, but the game does not become more playable, because the ball is still very difficult to control.
I think that a better way to solve this is to introduce a friction with the floor (well, I guess it's already there), so that the ball would stop soon when the floor is horizontal -- but we should make it so that high speeds are still possible, by continuing to hold the floor tilted. I believe this should be possible, without preventing any game level from being completed because of this changed physics.
Accelerometer calibration at the beginning of every level: we could add a function to tilt.h which would be called right before a level starts, so that the tilt implementation would save the current values as "horizontal floor". This would allow the player to play the game holding the phone in his favourite position.
Camera: the default camera makes the game very hard to play; as soon as you hit an obstacle the camera might turn, and this causes the accelerometer input to be mostly unpredictable. I'm not sure how to solve this. Maybe a fixed camera would be better, and we could use touchscreen gestures to let the user move it left, right, up and down.
Another option is to have an automated camera similar to the current "chase" mode: it would behave in "chase" mode for high speed, while for lower speeds it would raise (and be almost vertically on top of the ball for low speeds, when most precision is needed).
Easier levels: it would be nice to have some very simple levels where there is little precision involved, just a lot of running. :-)
Bigger GUI elements. Some widgets (as the level selector buttons) are really hard to tap without a stylus.
Better touchscreen support. Without mouse, we don't have the "hover" functionality: therefore, when selecting levels, it's now impossible to see the level screenshot. Maybe a two-phase level selection would do: first you tap on the level number (and this causes the right screenshot to be displayed), and then press a "Start" button to begin the game.
I'll try to address these issues in my N900 port; if you think this can also be beneficial to have in the master branch, please let me know. Comments welcome! :-)