Slam! is a formerly shareware air hockey game for Windows 3.x that has been declared freeware by its author, Robert Epps.
Games Over Messages
There are seven "Game Over" messages which are displayed based on the final score.
|Your score||Computer score||Message|
|0..2||11||I didn't even break a sweat! Let's see if you can do better, OK?|
|3..8||11||Yay! I won!! Want to try again?|
|9,10||11||I won, but it was close! Want to play another game?|
|11||9,10||You won, but it was close! Shall we play again?|
|11||6..8||Congraluations! Shall we play another?|
|11||3..5||Ouch! That wasn't even a close game. Can I try again?|
|11||0..2||You cleaned my clock!! But I am not afraid of you – want to play again?|
There are 21 known variables that can be set in Slam!.
From the Options menu you can only switch between "Use Default Color Scheme" and "Use Default Monochrome Scheme". To set the colors for each variable, right click on the object you want to set while the mouse pointer is not captured by the paddle. It is not possible to change ScoreColor from within the game, but the option appears in wslam.ini after switching between Color and Monochrome schemes, so the variable can be discovered and altered using a text editor.
TopWallColor=[R G B, default=128 0 0, monochrome=51 51 51]
InsideLRWallColor=[R G B, default=64 0 128, monochrome=34 34 34]
InsideRearWallColor=[R G B, default=255 255 0, monochrome=187 187 187]
TableSurfaceColor=[R G B, default=0 128 0, monochrome=68 68 68]
TableEdgeColor=[R G B, default=0 255 64, monochrome=136 136 136]
TableLineColor=[R G B, default=128 255 255, monochrome=238 238 238]
FaceColor=[R G B, default=128 128 0, monochrome=119 119 119]
PuckColor=[R G B, default=128 0 128, monochrome=204 204 204]
PaddleColor=[R G B, default=0 0 255, monochrome=187 187 187]
ScoreColor=[R G B, default=255 255 255, monochrome=255 255 255]
BackgroundColor=[R G B, default=0 0 0, monochrome=0 0 0]
Can't be set from the menu
These variables can't be set from the menu, but the Maximize option appears in wslam.ini the first time the game is maximized, and the WindowWidth and WindowHeight variables appear when the game is un-maximized again. RegisID appears in wslam.ini when the user enters a valid registration code, which could only be acquired by purchasing the registered version of the game.
The following variables are totally undocumented and were only discovered by reading the executable file in a text editor or hex editor. PointsToWin can be any number, but the variable it's saved to is a signed 8-bit integer, so values greater than 32 767 will roll the value over, like an odometer going back to 0. TimeIncrement doesn't appear to do anything.
PointsToWin=[signed 8-bit variable, default=11]
How RegisID Works
Now that Robert Epps has declared the game freeware, there is no harm in giving away the codes that will successfully register Slam!.
The registration code is a 16-digit number. When you enter a registration code, Slam! converts each digit into a variable and then performs the following check:
((1st * 3rd * 6th * 15th) + (2nd * 7th * 12th * 13th) + (4th * 5th * 11th * 14th) + (8th * 9th * 10th * 16th)) mod 500 = 127
There are 10^16 possible codes – that's ten quadrillion possibilities – of which more than a trillion will be valid codes. The smallest valid code is 0001100117800809 and the largest is 9999999999983999.
Bugs and Glitches
Like most games throughout history, up to the present day, Slam! suffers from collision detection limitations. Every so often, the game checks to see if the puck has collided with a paddle or a wall. If the velocity that the puck approaches your paddle is high enough, the puck can be more than half way through your paddle when the collision is detected, causing the puck to shoot backwards out of your paddle.
Puck leaving the table
Due to the fact that collisions are only detected so many times per second, it is possible to slam the puck into a wall so quickly that it passes through the wall before the collision is detected, causing the puck to leave the table. Once off of the table, it stops and the only way to put it back on the table is to start a new game. Knocking the puck off the table is part of air hockey, so instead of writing code to prevent the puck from leaving the table, I propose adding code to check if the puck has left the table and, if so, to put it back on the table!
Robert Epps had ambitious plans for future versions of Slam!. From the help file:
Things I'm planning for future versions:
1. Network multi-player support. I was hoping to have this feature done for the initial release, but it's proving to be more difficult than anticipated, mainly due to the quirkiness of network communications (messages often take ALOT longer to get to their destination than what would seem reasonable!).
2. Computer opponent "personalities". I plan to create more opponent attributes, and allow you to save each computer opponent's profile with a name. So when you want a liesurely game you can play against "Nerdy Ernie", and when it's time for some fiery action you can go up against "Killer Charlie". I'm also looking into ways to make the computer opponent learn as it plays.
3. Optional obstacles on the table, such as bumpers and moving barriers.
4. More and better sound effects.