I now have my rewind functionality working properly, but I have no idea how to use it in an interesting way. The assignment specifies that Braid's rewind is to be implemented, but what I am working on has two players (split screen) moving about a 3D environment in first person. Each player is able to freely move backward in time, forward in time at the "real" rate, or forward in time at twice the "real" rate. As of right now there is a 12 minute window to play with.
Every frame I store each player's position, yaw, and pitch. When players are not on the same timeline as each-other, they see a phantom of the other player doing what that player's input dictates, and they see the "real" player going about their recorded actions...
I have not yet decided what to do with the player that is ahead in the timeline, I might take the most recent velocity of the other player and slow it down to give the forward playeer the sense that they are moving very fast through time.
Here is a screen shot of Red being ahead of Blue in time...Blue sees Red doing what he was doing when he was at Blue's time, and Blue sees Red's phantom obeying player input. Note that Red cannot see any version of himself besides his own timeline.
My first instinct is to give the players guns and let them try to duke it out using time travel...not terribly inventive as far as design is concerned, but I am more focused on the functionality of this for the time being.
I am going to decrease the buffer from 12 minutes to something more reasonable like 45 seconds and give it a "battery" of sorts to limit player's use of it. A smaller buffer will also give me more memory to play with as far as storing player state. I also plan on giving some sort of graphical indication of a phantom's "position" in time.
One challenge that I am not sure how I will tackle is the issue of a player killing another on a "pre-timeline" then having everything the dead player will do in the "post-timeline" get nullified.
This is fun...