Hello. For my senior project, our team of three programmers wishes to make a top-down arcade shooter. One of the features we wish to implement is a replay feature. This feature would involve capturing input every frame and playing it back.
We know how we'll capture the input pretty easily; toggle bits representing each key and store the result per frame. The question is: how do we replay it? Is there a way to get our program to send orx input as if it were a keyboard? For example, if one of the input strings was interpreted as the player pressing up, left, and fire at the same time, how would we get orx to act as if those buttons are being pressed?
Well, before I can help with that part, let me propose you an alternative and if it doesn't suit you we'll try to find a solution to make it work your way.
As orx has an input abstraction layer I'd suggest we use it. That means that you'd be able to easily record inputs, whether they come from keyboard, mouse or joystick and you'll still be able to allow user input customization (in-game or offline, at your convenience).
If you go down that road, you simply need to register an event handler to listen for the orxEVENT_TYPE_INPUT events.
Then you'll get notified of orxINPUT_EVENT_ON/orxINPUT_EVENT_OFF for all the inputs that you defined.
When you get those notifications you can then store a list of timestamp + input name.
When you want to do the replay all you have to do is to unlink the current physical input (by switching to an empty input set, for example) and activate the inputs yourself over time by calling orxInput_SetPermanentValue()/orxInput_ResetValue(). That should do the trick.
If you still prefer going with storing physical inputs, assuming you're using the orx's input system, you'll then have to look for your physical key and find the matching input and then activate it.
If you're reading directly values from the keyboard module, things will get much more tricky and you'll lose all the flexibility the input module brings you.
Hope this helps!
Question answered. You, sir, rock amazingly.
I should probably add a tutorial for input recording on the wiki. Or maybe, if you feel like it when you've done yours, you could write such a tutorial there (no pressure of course!)?
This is just a feature we'd like to implement, but we won't if we don't have enough time. We're just planning everything we want to so that if we get far enough to implement them.
That, and when I start my own project, I want it to have a replay function.
I was just pointing out that the wiki was there if you wanted to share some of your knowledge at some point.