This game is © 2025 David Hammerle. All Rights Reserved. You are granted permission to download and play for non-commercial, personal use only. No redistribution or commercial exploitation is permitted. For any other use, please contact davehammerlecoder@gmail.com.
I was actively working on this game from about September of 2005 through February of 2007. I put ~150 hours into it, the equivalent of about 1 month of full-time work. This was a precursor to the other game I worked on more recently in 2023 and 2024, Temporal Survival. Temporal Survival has nicer graphics than this game, but this game is much closer to complete. Similar to Temporal Survival, this game has a rewind feature, allowing the player to rewind back to before they got hit. This game also has some interesting weapons and special abilities, allowing for interesting strategic and tactical decisions. The graphics consist entirely of just circles, lines, and gradients (not even any programmer art), so I doubt it would ever have broad appeal, but I think it's kind of interesting to play and at least a little fun. As with the other games I tried to make, I was hoping to sell this one to make money. I think I put it up on a bunch of shareware sites at some point.
Download the .jar file from here and double-click it to run it. If that doesn't work, try running 'java -jar RewindBlasterBuild.jar' from the command line in the same folder as the .jar file. Running the game will create a 'data.dat' file in the same folder for storing high scores and similar data.
The objective is to kill as many enemies as possible before dying for the last time. As enemies are killed, new enemies will spawn, and more enemies will spawn than the number killed. This way the difficulty level will slowly increase until the player is overwhelmed and dies for the last time. As you kill enemies, you will score points. If you manage to score enough points, you will get a whole bunch of bonus points. After that, you will continue to score additional points the longer you can survive and kill enemies. After you complete a level at one difficulty level, and get the bonus points from it, it is a good idea to increase the difficulty level, and try the same level again, if you want to get as high of a score as possible.
This game has a rewind mechanic. When the player is hit by a shot, if the player has any rewind points available to use, the player will consume one to allow the player to rewind back to before the player was hit. The player will slowly accumulate additional rewind points over time.
Ammo slowly accumulates over time. Use the left mouse button to fire your weapon.
Click the right mouse button to use your secondary item. Secondary items can always be used defensively somehow. Secondary items charge slowly over time. The player will start each game without a secondary item.
All enemies are red circles, with a gray line indicating direction of movement.
Some enemies will have a blue circle in the middle of them. When killed, these enemies will drop 3 different pickups, each moving in a different direction. If the pickups have a red circle around them, they will switch the player's weapon. If the pickups have a green circle around them, they will switch the player's secondary item. The color of the pickup indicates which specific weapon or secondary item it will give the player. The player will heal one health when collecting a pickup.
I made this game using Java and Java's 2D graphics API. It doesn't even have programmer art, it's all just lines and circles and gradients. In order to sell the game successfully, I probably would have at least needed art and sound for it. I may have also needed to use a better graphics engine, although at the time I was working on this game, I probably would not have needed to use a 3D graphics engine.
The most interesting thing about this game is the rewind feature, and it was probably the most difficult part to implement. I built the game, from the beginning, with this feature in mind. I put all the game data for the game as it was running into arrays of integers, each inside an object.
I added methods for the 3 necessary operations:
For each of these methods, I stored whatever data was needed to reverse the operation. Then, in order to rewind the game, I just used the data I had stored to reverse the operations in the reverse order they were applied in.
Looking back on this, it was an unnecessarily complicated way of doing it. It would have been much easier to just make a copy of all the arrays of integers, storing the full game state, and then restoring it later when returning to that point in time. My more complicated implementation may have saved on memory consumption, but I don't think it was worth the extra development time. Also, using arrays of integers was probably a mistake. I should have instead just implemented a method for each type of game object that would save its data to a byte array and another method to restore the data later. That way I could have used any type of data I wanted, rather than just arrays of integers. That method would have been similar to the one I used later for my Temporal Survival game.
A few of the secondary items were also kind of interesting to implement. Similar to the rewind feature, they primarily required some additional record-keeping in the game data.
The Feedback Rocket was interesting to implement because it required keeping track of which shot was fired by which enemy, so that the enemy could be damaged. The Cancel Rocket similarly required keeping track of which shot was fired by which enemy, but also required tracking how much damage each enemy has done to the player, how much healing and shielding has been applied to each enemy by each healer and shielder, and how many additional shots have been fired by each enemy as a result of hasting by each haster.