Every few months, I return to play this game. It is probably the most memorable game from the beginner's jam 3.
When I first played this game, I was like "what am I playing", but after a few more play sessions, I love this unique little game.
The way the time travel works is through a few scripts:
RecordedPlayerInput: A struct that contains 3 variables - Horizontal Input, Jump Input, Time Travel Input
TimeTravelRecorder: Component on the player. It has a RecordedPlayerInput list. A new element is added to that list every frame in FixedUpdate with the relevant inputs. When the player time travels, the script sends the list to the TimeTravelManager.
TimeTravelManager: Has all the copies of the player inputs and sends them to a player copy in Start.
PlayerCopy: Has a full list of RecordedPlayerInput that was sent from the TimeTravelManager in the Start function. Every fixed frame, the velocity is set according to the input of the current RecordedPlayerInput.
I don't know if I explained that well but hopefully it made a little sense.
The player controller is quite satisfying and the visuals - with its super simple style - are quite clean. The one thing that I wish the game did more of was use the wall phasing mechanic a lot more. It's a really creative mechanic, but it wasn't used to create super unique levels. Otherwise, it's a pretty solid game, well done!
Thank you so much for playing! And yeah I do agree, the movement can feel quite clumsy, I wasn't able to add coyote time and jump buffering because of issues with the past selves (past selves are handled by recording the player input and sending that to a manager which adds the input sequence to the next past self. Jump input was particularly difficult to handle)
Hi, so glad you played!
If you have a bunch of clones running around, it's really hard to tell which one is the present version of you.
Thanks for telling this, we basically just had a green arrow over the present self and the past selves are translucent.
The platforming is pretty clunky and I think that it holds the game back a bit. It was fun racing against my own past self but it became a little frustrating when I missed jumps. This could be solved easily with the traditional coyote time + jump buffering, and maybe some accel/decceleration to make it smoother.
I absolutely agree with this. Before I coded the time travel mechanic, the player controller had jump buffering, coyote time and variable jump height. But this cause so many issues with the "past selves" that I had to regrettably remove it :(
Timing is pretty finicky. I often found myself waiting for a while on buttons just to give my future self an opportunity to walk through gates. Perhaps to solve this you could make it so that clones just sit in place indefinitely after their time runs out, instead of disappearing. Not sure if this would lead to level design issues, but its worth trying. It's also pretty hard to "line up" my actions in time with the past versions. I thought that maybe at the bottom of the screen there could be a timeline that shows each clone's lifespan lined up with each other, as well as showing the key actions that they did and when (like hitting a switch, jumping, rewinding, etc). This would help avoid those failstates that are caused by the player being off just by a second or two. Maybe you could also add a slow-motion mechanic too? So many possibilities
With the clones sitting indefinitely, it cause a variety of problems such as paradoxes in the future (if a past self is standing where a moving platform is and it crushes the past self, you'd cause a paradox) or level design being limited.
A timeline is a great idea! If I'm allowed to, I would add this. Can't believe we didn't think of this lmao
Thanks so much for your feedback and thanks once again for playing!
The movement is very well made. The player being red helped make it stand out. The music and sound design were also amazing, great job to whoever made them. My one issue is that it's quite difficult to move around a corner (like a tile corner) I keep falling off. But otherwise, you did really well, great job!