I made a new program! It hasn't come up much but yeah, I'm a programmer. Tell me what you think.
Ok, so we've all used AnimGet a million times I bet. I myself was just using it to rip a SNES fighting game someone had asked me to do. Eventually I came to an animation that would always skip several frames when using AnimGet, no matter how many times I tried. So it got me thinking: what if I could make AnimGet go faster, or make it use less memory? It's a great program for sure, but it has some obvious limitations:
- It can only save .BMP files
- It can only take screenshots at the default speed, apparently 10ms
- Moreover, it compares screenshots WHILE it takes them, making it much slower than 10ms in reality
Obviously I don't have access to AnimGet's source code, but I figured, how hard could it be to make a program that takes screenshots super fast? Well, harder than I expected, but nevertheless, here it is!
First, the GUI:
The long gray status bar shows the program's current state: Idle (doing nothing), Recording, and Paused.
The little gray "shots" box shows how many screens are in memory.
Click the red circle (record) and it'll start taking shots as soon as you switch windows. Click it again and it'll pause.
Click the save button (floppy disc) and it'll save all the screens in memory.
Click delete (red X) and it'll clear everything in memory.
If you go File>Config there are options you can set.
You can manually set the frame delay - the default is 32ms.
You can change the file type too, if you prefer BMP to PNG for some reason.
The folder to save screenshots to can be set under File Path.
And the latest feature, Keep Redundant Frames, allows you to save every screen even if it is a duplicate.
The big difference, besides the GUI and added features, is that my app compares the screens AFTER they have been taken. This means it's free to take screens as fast as it wants to without having to worry if they're the same. The screens are compared later, when you click Save. Of course that means saving takes much longer, but you can't have it both ways.
Here are some animated comparisons of what the two are capable of on my PC.
Each of these was taken of a pre-recorded gameplay movie using Visual Boy Advance's movie record feature.
These animated GIFs are made from the first 50 screens captured from the exact same starting point; they are all animated at the same rate.
AnimGet capturing at 10ms
ScreenGet capturing at 10ms
ScreenGet at capturing at 16ms
I hear your protests already: but more stuff happens in the AnimGet example! Exactly, because more frames are being skipped.
The animations capped by my program have more "pointless" frames where it's just a flickering shadow and nothing really happening, but the thing is, AnimGet would capture these too if it could! You can see that even set to 16ms, my app is much faster.
In the interest of fairness, here are the disadvantages of my app.
- Screenshots include the GUI - when you use AnimGet, you only get the game screen. I'll fix this if I can but I have no clue how AnimGet does it.
- Saving is quite slow.
- For many situations, this program is probably overkill.
Download ScreenGet (12kb .zip)
Surprise, you can download it right now and try it out. Obviously you need the .NET framework and it's Windows only.
Try it out. Use it for real, or just mess around with it. Try to break it if you want. If anything doesn't work or seems confusing, let me know.
Also if you have an idea for a better name, please share.
I promise this isn't a virus, but any other problems it causes ain't my fault!
Depending on your system settings, you may have to run as administrator - this program reads, writes, and creates files.
A word of advice: for emulators like VBA, Kawaks, Desmume, etc. where you can manually advance frames there is NO NEED for a program like this.
Yes, the frame counter really is supposed to move that fast!
No, it's not crashing when you click save - let it finish!