Ok, this isn't all that exciting, but I figured I'll release an update to address the issues mentionned above that affected performance.
v0-7-1
- UI::Trying to clear an empty buffer was causing an unhandled exception (fixed)
- UI::Buffer ListView now virtual as well (fixes lag issue when copying large blocks)
- UI::Fixed the tab locking when a movie's loaded (the old method was annoying since
the ui would flash if you clicked a tab)
- UI::Fixed a bug in the splicer that wasn't allowing source movies to be loaded
Looking into implementing some new and sexy features for the next release, but life is once again starting to get in the way (apparently my boss all of a sudden thinks that I need to meet deadlines :P) so hopefully this won't fall by the wayside too badly.
EDIT: The method I'm using to pass buffered information between forms and routines for copying has 1 weird bug in it that's preventing the successful pasting of a block of frames more than once. As a result, I'm (for now) clearing the copy buffer after each paste. This was working before, since I was manually cycling through a collection of items and adding them to the array (as opposed to using the current method, which is way faster).
Good eye again :P I'll get this fixed up when I get off work (they don't like it when I work on my own programs instead of their's on company time)
Edit: Fixed. Turns out I screwed up the logic on an attempted optimization and you can't actually load anything as a source file ... sorry :P
Yeah, the buffer viewer doesn't use a virtual list, so adding a large number will kill it. There's really no excuse for this, since it wasn't that difficult to implement in the first place, but I guess it was like 3 in the morning and I was tired ;)
It'll be fixed next version. I think I just wanted to get the copy-pasting version out there to make sure it worked properly (the buffer viewer was actually an afterthought).
Good eye. Fixed (not going to bother releasing an update just for this though)
Seems I got a little lazy there. There's not Save method for FMV files so I should probably disable all the related controls when that format is loaded.
All feedback is useful as it helps steer the application in a direction that's most likely to benefit the community as a whole :) All three of these suggestions are valid, but may be a tad difficult to implement (mostly due to constraints with the ListView control), but I like what you've suggested so I'll look into it. I'm not sure if you can specify highlighting by column (like you can with Delphi TListBox controls if I'm not mistaken). If not though, there's still ways around it, and chances are the input editing fields are going to be overhauled so maybe I'll try a few things out and let you guys pick what works best.
Shouldn't be a problem ;)
To try out some of xoinx's ideas, I'll have to change the input recording UI, so I'll try something new for the next release
I understand what you mean, it's just a matter of making this interface not appear obtrusive to the rest of the program. Also, the controller layouts would be different for each format (obviously :P) and there'd have to be a simple way to indicate which controller you're targeting (hopefully without having to duplicate the interface for each possible controller). Will investigate further though...
Can do, though this may take me a bit of time to get working 100% ;)
Btw, let me know if you find anything busted in here ... I like to think I've tested it thoroughly, but I added a lot of features this time around so something may have slipped through the cracks.
Oh man was I on a roll yesterday. I think I can safely say that this application is officially reaching stable status as an all encompassing TAS movie editor.
GMV, SMV, and FCM are all at 100% functional, plus I managed to crank out a handful of the suggestions that everyone's been providing.
v0-7
- UI::OpenFileDialog now displays a default filter of All Movie Files (as opposed to *.*)
- UI::Frame Data listview now virtual, so all paging functions have been depreciated
- UI::Frame Data alternating rows now coloured (ummmmmmmm, BlanchedAlmond)
- UI::Insertion of Multiple Frames added
- UI::Removal of Multiple Frames added
- UI::Group editing (multiple frames) added
- UI::Copy Input selection to buffer (CTRL+C)
- UI::Pasting copied input from the buffer into the current movie added (CTRL+V)
- UI::View Buffer (CTRL+B)
- UI::Added VisualBoyAdvance layout
- FMV::Header data parsing added
- FMV::Input parsing added
- FCM::Fixed Save bug (wasn't writing the last command properly)
Saving/Loading buffered data isn't in this release, but will likely make its way into the next one.
Metadata editing may also surface next release (I need to tweak all the format Save methods to do this).
VisualBoyAdvance support will also be in the next version.
Glab you like it. Some of the features you've mentionned actually are already in place :)
I was thinking of re-introducing this as a movie comparisson feature (it used to be there before but it wasn't very good)
This will likely be making an appearance soon (possibly v0-8)
This routine is already written, tested and ready to roll (v0-7)
When you click Open, it defaults to all files (*.*), but the dropdown "Files of Type" contains masks for all currently supported formats.
The first entry in the statusbar is the current file you're working on. If this isn't intuitive though I can change it around.
It doesn't provide you with a default filename (yet), but if you enter a name and press save, it applies the default extension for the currently loaded format.
That's a good idea ... I've just been lazy ;)
Insert/Remove Multiple will be in the next release (v0-7). I tend to put grayed out controls in as placeholders for features I want to implement.
Hope that helps. The next version is actually going to be the first in a while that contains almost nothing but new features (as opposed to minor format tweaks) =). Since the groundwork has been laid, it's getting easier and easier to crank out changes (FMV support, multi-frame add/remove/edit and copy/pasting between movies, all said, took about 3 hours to implement).
Just to give you an idea of what's coming, here's a quick screenshot (xoinx, this one's for you :P)
The next release of this should contain a bunch of cleaned up routines, performance optimization and fixes to whatever isn't working 100%.
Before starting on VBM and FMV (I think I can crank them both out relatively quickly), I'm once again looking for ideas for features. My notes for the next release look like this:
v0-7
TODO::Add Group Editing (edit multiple frames)
TODO::Add Insert Multiple Frames
TODO::Add Remove Multiple Frames
TODO::Fix FCM write
TODO::Gens XYZ-Mode read/write
TODO::Convert frame listing to a virtual list
TODO::Start Famtasia
TODO::Start VisualBoy
but i'm always on the lookout for cool features. I'm thinking of possibly revisiting the movie compare module again (hopefully it won't suck balls this time around) but other than that, I'm stymied as far as ideas go.
To the community as a whole, I know there are threads out there regarding dream tools and emulator enhancements, but what I'm wondering is what would you possibly want to do with a movie file in an editor? Any ideas are appreciated.
To tell you the truth, it's because forms design is retardedly simple in .NET (as with most MS IDEs though). The core logic, though not portable as it stands, exists outside the scope of the forms, and uses only core namespaces, so portability later isn't totally out of the question. (ie. no references to anything other than System.Text, System.IO, System.Collections in the data classes ... the last being strictly for the ArrayList type)
I looked into doing this with GTK+, Glade, wxWidgets ... and even went so far as to see if there was anything i could use from SDL or Allegro, but I didn't want to spend all my time designing and debugging the interface.
Honestly, I haven't done any work in Linux since college, so I'm a tad rusty (basically, .NET makes you lazy since you don't really need to understand pointers, references or inheritance), but I'd be willing to give it a go if there's enough demand.
I do comment my code, as you'll see when this is eventually released :P (so please don't beat me)
The Gens_Editor doesn't seem to work with TESTA movies (>=Gens-9f i think)
Happy news today ... after an arduous couple of weeks, I've finally got FCM support at 99% functional. There have also been some complete overhauls in the code, so implementing features across all formats gets easier and easier (case in point, once I got the FCM Save method to work properly, Add/Remove/Edit/Splice were enabled with about 6 lines of code).
v0-6
- UI::Closing a movie didn't clear all Snes9x data (fixed)
- UI::Cleaned and optimized a lot of routines
- UI::Splicing routine re-written
- FCM::Save/SaveAs now work (99% functional -- last byte of input being dropped)
- FCM::Splicing enabled
- FCM::Add/Remove/Edit frame data enabled
- SMV::Edit functions now work from the context menu
(no more seperate menu options to add/remove)
- SMV::Save/SaveAs now work with this format
- GMV::Splicing enabled
I know some people have expressed concern over the need for the .NET framework, but chances are if you're running Windows XP SP2, you've done the upgrade already.
I'm not sure if it's worthwhile to rewrite the majority of the UI in C++ (UI is basically what .NET is used for ... that and ArrayLists :P), so for the time being, Windows users, this one's for you :)
PS. I tried binding the required .NET assemblies to the executable with xenocode in the last release, but I think it's kind of a dumb way to go so that method will no longer be supported.
Wow. I think my mind exploded while trying to keep track of what was going on in each window. Looks great so far, though listening to all the music at once gets annoying after a while, but i was too enthralled to mute it.
Interesting glitch, but Widget seems to move EXTREMELY slowly. I haven't played this game before, but is that the pace of the entire game, or does it pick up later?
Though I like the idea in theory, chances are this would lead to animosity in practice. When I started coming to this site, I found a couple runs that seemed interesting, then would check out that author's other submissions (because I assumed a certain degree of quality in execution would be maintained between runs ... which was usually the case).
The only problem with this is that selecting 10 author's as the "best" is subject to opinion, favouritism and current activity (earlier authors may be overlooked). Also, there's a good chance that other than a few names, no one would be able to agree on who should be considered the best and why.
It would probably be more feasible to rate the top 10 TAS' of all time. It's easier to qualify what should be included, and people can't feel excluded because the terms for judging what is considered "the best" can be easily defined.
Just my 2 cents though (or USD 1.754 cents if you wanna be a dick about it =P)
Should the movie file version info be updated as well now, or does none of this effect compatibility with previous versions of Gens? (I'm assuming not)
sp0n, I actually combed through the technical faq a few times while doing this run. The strategies laid out there as well as the leveling recommendations need not apply to a tas so there's a LOT of time to be saved in completing this game.
Though discouraged, I haven't given up completely. I think I may start again from scratch, seeing as I really never made it more than 10-12 minutes into the run (just past the Rust Stilettos). The problem I foresaw was the run just being boring; no matter how much I loved (and still love) this game, it may not be entertaining to watch me play it.
The problem I've found after the caryards was the pacing of the run. There's no way to get the shotgun without beating the first 7 arena contenders first. Though that would make the rest of the run easier (and faster), no matter how well I can manipulate the guys with standard weapons, automatic weapons just rock me.
Also, my plan was to only get the Freeze spell, and rely on keeping kitsune alive after the rat shaman (since she'll stay indefinitly ... or to the death).
Now ... i've tried to find the RNG values in memory that effect battle damage calculation, but no luck so far. I've found that controller input changes the values, which is why i made it from the start of the game to the back room of the stilettos without taking more than 1 point of damage. Also, depending on which frame you press fire on, you effect Jake's damage RNG on the enemy. If I could find the memory positions I would probably be more willing to finish this run ... but as trial and error, it's just getting tedious :P
Well, I did a little research and found an application that will compile the assembly so it's independant of the frameword (the necessary libraries are built into the executable).
I only have a demo so there's a popup when you launch the program, but it "seems" to work. If you want to try it out, you can get it here:
[link removed because my isp is chinsey with webspace ... pm me if you want this]
PS. Please let me know if this works since I can't test it without messing up my machine :P
PPS. This package is 11megs now, as opposed to 150K, but it's still a vast improvement over downloading and installing the full framework + updates
Good point. I actually find it kind of strange that not everyone has updated their framework seeing as it's been out for a while now. WindowsUpdate (for legit-ish) users should do it for you automatically.
I'm going to look into compiling this differently though ;)
Quick update (technically, these should have been in the last release :P)
v0-5-1
- UI::Jump to Frame fixed
- UI::Removed Compare input (it sucks way too badly right now)
- UI::Re-wrote the add/remove logic (I have no idea why I thought that would work =P)
- UI::Closing a movie didn't clear the Gens data (fixed)
- GMV::Remove Frames implemented
GMV is now fully functional for editing. The only thing not implemented is input filtering (so you can type whatever you want into the edit fields), but the save method only uses valid values, so not too big of a deal.