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
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.
Just out of curiosity: Why do you need .NET to make such an application? It doesn't sound like something which would need such an API.
Would it be really painful to make such an application in a portable language such as Java which would run everywhere? (Personally I'm not very fond of Java as a programming language, but its portability is simply a superb feature.)
- Java GUIs are ugly and a pain to design
- applications are terribly slow (applets too but since it's lightweight, it's more understandable)
- demanding features (graphics, I/O, realtime) suffer of the technical limitations
- users still need to install the lastest, 100 megs environment
but, the main reason is that we would need a dedicated programmer that would actually accept to use Java to translate all of it. we're lucky enough that someone as kind as Maximus spends his freetime for the community's sake, we can't blame him because he picked whatever was most practical for him.
if we were allowed to act in such a way, I'd beat to death every self-proclamed coder here that don't comment his code. that's a bit selfish guys, please think about the others that also want to help ! but I would called (with reason) as a spoiled brat :D
I never sleep, 'cause sleep is the cousin of death - NAS
Nice... a new version is out :) Hmmm, just wondering if any editors could update the Downloads page to list this editor there? Also if you could, update highness' Gen's Movie editor link... there new url can be found at this thread. I am not sure if it still works with the newer GMVs though... and I still can't seem to get it to open any GMVs even if they were made even 1-2 years ago.
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)
Joined: 4/20/2005
Posts: 2161
Location: Norrköping, Sweden
I can't run the program, when I try to run the .exe I get an error that's something like "Can't initiate program correctly (0xc0000135). Click OK to exit the program" (I translated this from Swedish, so it might not be 100% accurate). Do you know why this is?
EDIT: Nevermind, I should have checked the previous posts... Sorry.
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.
I would like a function where 2 different movie files could be opened, and you could copy chunks from one movie and insert it into the other. This would make splicing much easier, since you could work on a separate file without touching your master copy (after all, if this tool was intended to be a replacement to hex editing movies, might as well have this function). I guess with the GUI constrains, it doesn't have to be open 2 movies simultaneously or the screen would just blowup; instead it can be like open first movie, highlight frames to copy, then open the second, and choose where to insert into. That would be cool...
Joined: 4/20/2005
Posts: 2161
Location: Norrköping, Sweden
After fooling around some with this program, I have found some things that at least I think would be really nice features. But first, let me say that this program seems really useful, and these things I've commented on are mainly small things. Mostly, this program works just fine.
Some of these things may have already been mentioned, but I'll explain how I think they could be implemented:
1. The possibility to have two movie-files open at the same time. This isn't anything urgent, but it would be a nice feature. I'm thinking that this could be done pretty much the same way as Mozilla Firefox has "tags" or whatever they're called.
2. The possibility to edit the "Author"-text. Since this won't change the movie itself in any way, I think it could be a fun thing to have. It could also be useful, for example, if you forgot to write anything there when you started recording the movie, and want to have your name there when you submit it this site.
3. The possibility to mark several frames at a time. I'm thinking that this could be done by just dragging a box over the frames you want to mark, or by holding down the "ctrl" key and mark the frames you want. The input you then choose, will be applied to all the frames you have marked. As it is right now, it's quite troublesome to make a "hold down B for 50 frames" input in the program, since you would have to apply the B-input to each and every frame.
4. When you choose "Open", it can open all the files you have. Wouldn't it be nicer if it only opens movie-files? This way, if you have both, say .fcm-files and .zip-files in one folder (like I do), it's a lot easier to see what files you can actually open with the program.
5. The option to see the filename of the file you're currently working on. This could be shown above the "ROM Title" box or something.
6. When you press "Save as", it could be nice if it had the default filename by default. In other words, when you for example press "save as" after editing .jpg you have on your computer in Paint, it has the defualt filename by default. I don't know how to put this in other words.... Sorry for being confusing,. :P
7. A small Help-section would be nice to have. It doesn't have to be big, but just a brief guide on how to use this program.
And now, to some questions:
1. How do you use the "Insert Multiple frames" and "Remove multiple frames" functions?
2. How do you use the "Compare movie input range" function?
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)
>When you click Open, it defaults to all files (*.*), but the dropdown "Files of Type" contains masks for all currently supported formats.
The standard is to have a selection like "All movie files (*.fmv; *.fcm; *.smv ...)" and have this as the default (but Keep "All files (*.*)" as a selection).
That screenshot makes me want to try too.
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.
SWEET! That screen shot makes me drool... now I feel driven to start another project going, if only I can find a nice game :)
EDIT: Ok, this may be useful now that there is a modify multiple frames option...
1) Undo button, since it sucks if you somehow stupidly overwritten some of the existing wanted inputs when trying to modify multiple frames
2) Insert input into every other frame button... useful for adding autofire inputs
3) Is there anyway to modify multiple frames of say player 2 only leaving player 1 input unmodified AND/OR a duplicate player 1 input to player 2 AND/OR copy and paste over player 1 input without screwing player 2 input up. This can aid editing of 2 player movies.
Of these, I would presume (2) being the easiest to implement, (1) shouldn't be too hard I hope (not that I know a lot about coding)... and (3) is potentially the hardest which may require even some UI overhaul to accomplish eg. being able to highlight only player 1 input without player 2's input and vice versa.
Still these are merely some new stuff you could implement to make this a more all-encompassing TAS movie editing tool. Hope you found this feedback useful.
Joined: 4/20/2005
Posts: 2161
Location: Norrköping, Sweden
This new version looks very good. And by the way, I was TAS:ing some yesterday, and I found something that I had forgotten a few levels ago. So instead of redoing all levels after that one, I used your program to copy the input from my first movie, and it worked out great! :)
I agree with xoinx that undo button would be great. Make sure that ctrl+z also works too, please. :)
Now to some comments after taking a look at your version 0-7.
1. A "Recent" tag, under "File", similiar to the "Recent" tag under "File" in FCEU.
2. Perhaps an eaier way to record input. It would be nice to be able to just mark the frames you want, and then press, say, the button "b" on your keyboard to apply the input "b" to those frames. It's perhaps a little troublesome to first mark the frames, then write the input in the controller field, and then click update.
3. A "Game pad buttons" field. This is pretty hard to explain, but I mean that you could have a field of boxes (I mean, a box like the "update" and "go" box that are already in the program) representing all the NES-pad buttons. So if you want to apply, say, "Start" to a few frames, just mark the frames you want to apply "Start" to, and left click on the "Start"-box with your mouse.
4. The "Are you sure you want to paste..." box that pops up when you try to copy frames is in a way good, I can see why you implemented it, but if you were to add a "undo" button this feature could be be removed. If you're copy-pasting a lot, this pop-up can get annoying, and if you have an undo-function, you can just press ctrl+z if you make a mistake.
I see you fixed most of my demands (hehe ;) ), but my tips 1,2 6 and 7 from my previous post still stand. You're probably already working with these, but I wanted to remind you in case you forgot.
Anyway, good luck with the programming! :)
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.
Joined: 4/20/2005
Posts: 2161
Location: Norrköping, Sweden
I found what I think is a rather critical bug. If you don't have a movie-file open and "View copy buffer" and press the "Clear" button, I got an "Unhandled exception" error of some sort. You should check it out.
I also found a very small bug. It's really small, so don't worry too much about it. If you have a .fmv file open, and press "Save as", it doesn't recognize it as the format .fmv by default. To compare, if you press "save as" while having a .fcm open, it recognizes it as the format .fcm.
I'll take a closer look after school, but right now, I really have to go. :)
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.
I was initially skeptical on how this would work with a huge movie file, so I tried opening the largest movie file I could find on the site (ie erokky's FFVI which stands at a whopping 4+ hrs... the SMV was 1.7 mb :S). The outcome... the movie open amazingly quick for its size; only a delay of 1-2 seconds was noted, nothing too much to bother anyone I think. Scrolling up and down was also lagless, which is fantastic! Didn't expect the editor to handle large files like this so well! I'm running win98, and don't have any tools to check CPU/Mem usage of the editor with that SMV open, so maybe you might want to look at it to see if it's being as efficient on resources as you hope. On my side though, no detectable lag => good enough for me :)
Right on Maximus! I can forsee this becoming a lazy TASer's (ie. me) best friend haha... You're extremely productive, don't think I will have to wait long for the next update. Looking forward to it
EDIT: Ok, forgive me for being crazy... but you just might want to know this. I tried copying all of erokky's movie into the buffer (approx 880000 frame), which was fine, but when trying to view it, the editor slowed to a halt. Hmmm, correct me if I am wrong, but the whole movie file is copied to the memory or a buffer as it is loaded am I right (I am guessing since I can delete the movie file without a access violation error...)? It just came across as weird since the main screen managed to handle the whole movie from it's buffer quite well, but the copy buffer doesn't seem to be as efficient and basically forces me to kill the application manually.
Just tried doing 180000, which works since the copy buffer showed after 10 seconds wait. But scrolling down the copy buffer is extremely laggy... sort of what I would have expected for the main edit but it didn't actually happen there
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).
Joined: 4/20/2005
Posts: 2161
Location: Norrköping, Sweden
I think I found a bug in version 0-7: If you go to "Splice Movie" and press "Load" and choose an .fcm-file, it seems that it doesn't load the file I choose; in othe words, the "Source Movie" field is still empty, even after I chose the source movie... You should check this out.
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
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).
Joined: 4/20/2005
Posts: 2161
Location: Norrköping, Sweden
I hate to do this, but I found two bugs. :P
1. If you don't have a moviefile open, and go to "View Copy Buffer", and close the window using the "x" in the top right corner, you get an "Unhandles exception" error.
2. The "Splice movie" function can't load .fmv movies, though it seems to handle the other formats well.
Keep em coming Randil.
The "ViewCopyBuffer" error was actually fixed, and then reintroduced at the last minute because I'm dumb :P (it's fixed and the package linked in the first post is updated).
I actually added the messageboxes for FMV's to the Splice/Save/SaveAs commands because I don't have FMV writing implemented yet (so technically not a bug cause it's there on pupose :P)