So far so good, script works just fine.
I did have a tiny look at your script and it looks rather well constructed.
I hope you don't mind me saying this, though:
I am still learning a lot about Delphi and programming in itself, trying to create stuff here and there and doing my best to contribute to KMR. (I do slip mistakes often enough myself.

)
Something I learned rather quickly is that when you create variables it is wise to make it easy for yourself by using the things you have at hand.
The first thing I noticed was this bit:
- Code:
const
preparing = 0;
ready = 1;
playing = 2;
paused = 3;
gameover = 4;
intro = 5;
// Snip
var
// Snip
gameState: Byte;
// Snip
You can do this a bit neater and easier by creating a type like so (might also help when debugging later on):
- Code:
type
TGameState = (
gs_preparing,
gs_ready,
gs_playing,
gs_paused,
gs_gameover,
gs_intro
);
// Snip
var
// Snip
gameState: TGameState;
// Snip
The rest of the code can rather much remain the same that way. (Except for the part that use the "gameState", these simply need a "gs_" in front of them)
Just a friendly advise, I enjoy playing it, though.
