1 2 3
15 16
Emulator Coder, Former player
Joined: 10/2/2005
Posts: 563
Location: Toronto, Ontario
FODA wrote:
If you're looking for a challenge i'm still waiting to see the editor working in real time with the emulator running the movie :) http://img270.imageshack.us/img270/1647/tastoolidea3gq.png
Conceptually, I think that's a great idea, though I have no clue how this would be implemented short of modifying the emulator itself. This poses 2 challenges though: 1) Modification requires a lengthy analysis of the code to gain a better understanding of how it works and where changes need to be made to support the new functionality (and hopefully not f**k anything up) 2) The editing functions would likely have to be incorporated into the emulator itself. Though this isn't necessarily a bad thing, it can bulk up the code and possibly effect performance. I do like the idea and have scanned the source for SNES9x and FCEU, but I'm by no way an authority on how they work or how to effectively change anything. Superstars like Bisqwit and Nitsuja are better able to comment, but I wouldn't expect them to have the time to do this :)
SXL
Joined: 2/7/2005
Posts: 571
well, every emulator coder started one day, so why don't you try it ? ;) a good idea would be to extend the emulators pages on this very site, to document the way (you have found) those emulators are coded, so that even if you don't make it, someone will hopefully finish it one day. but if you're courageous and dedicated enough to start looking into it, that'd still be a great step for the community, and a giant leap for the program :)
I never sleep, 'cause sleep is the cousin of death - NAS
Emulator Coder, Former player
Joined: 10/2/2005
Posts: 563
Location: Toronto, Ontario
Still making progress, though more slowly lately (work and life keep getting in the way of sideprojects and TASing). FCM functionality almost fully implemented, and I started working on GMV as well (when I get frustrated, I define the structure for a new format ... helps blow off steam =P). I've never owned a Genesis or really played much, and though I could likely scower the internet and find the answer, I figure I'll ask here: What are the X,Y,Z modes representative of? Are these additional buttons on 6-button controllers? What's mode (or is it XYZ-mode)? Just a quick question I"m sure almost everyone here can answer :P Edit: Sorry, thought I'd throw a new "quick" question in as well. Creaothceann brought up a good point about virtual lists, so even though I'm going to implement that regardless (makes listview population a shitload faster), should I keep the pagination system intact or just populate the entire movie into one list?
Emulator Coder, Skilled player (1310)
Joined: 12/21/2004
Posts: 2687
There are buttons called X, Y, Z, and Mode on a 6-button Genesis controller (in addition to A, B, C, Start, and the directional buttons). Isn't it no longer a virtual list if you populate the entire list?
Emulator Coder, Former player
Joined: 10/2/2005
Posts: 563
Location: Toronto, Ontario
nitsuja wrote:
Isn't it no longer a virtual list if you populate the entire list?
ummmmmm ... i think you're right. I thought maybe there was a way to bind data to the control without iterating through an array and adding each item individually. I guess I should research further before posting (calling BeginUpdate() and EndUpdate() seems to make a bit of a difference though) ;)
creaothceann
He/Him
Editor
Joined: 4/7/2005
Posts: 1874
Location: Germany
Maximus wrote:
I thought maybe there was a way to bind data to the control without iterating through an array and adding each item individually.
I just use the index provided by the Listview callback to access the array. :)
Editor, Experienced player (734)
Joined: 6/13/2006
Posts: 3300
Location: Massachussetts, USA
I have the SNES movie splicer, what is the best way to take a previous movie's full input of one level, and copy it onto a newly made movie? (barring aside luck manipulation instances.) Whenever I tried in the past it seemed to be off by one frame, even though for the start of splicing I made sure I had the exact frame where both movies had the character in the exact same position. Is v0-4 available for download?
Homepage ☣ Retired
Emulator Coder, Former player
Joined: 10/2/2005
Posts: 563
Location: Toronto, Ontario
comicalflop wrote:
I have the SNES movie splicer, what is the best way to take a previous movie's full input of one level, and copy it onto a newly made movie? (barring aside luck manipulation instances.) Whenever I tried in the past it seemed to be off by one frame, even though for the start of splicing I made sure I had the exact frame where both movies had the character in the exact same position. Is v0-4 available for download?
The first post of the thread is where i update the links to the latest versions (so yes, 0-4 is available). You can splice by range as well now (ie. insert frame sxxx-syyy from source movie into position txxx of the target and have the target's input resume from tyyy). As for being off by one frame ... that's quite possible. I think even when you watch the movies the input is 1 frame behind (nitsuja can correct me if i'm wrong) because I've experienced the same issue.
Editor, Experienced player (734)
Joined: 6/13/2006
Posts: 3300
Location: Massachussetts, USA
Hm, but I remember taking my DKC2 run and trying to copy already optimal levels, and even though, at the mpa to enter levels I try to splice the two movies at the exact same frame (in both cases taking the exact frame # that is shown on the screen) and trying to hex it form there, but it desynchs. I suspect it might have to do with DKC's bad habit of being able to jump and barely land/roll on ledges, which can easily become off by one mere pixel and desynch. I'll download the v0-4 now.
Homepage ☣ Retired
Emulator Coder, Former player
Joined: 10/2/2005
Posts: 563
Location: Toronto, Ontario
It's been about a month in the making, but I've finally got enough improved to merit a release. The big news for today is GMV SUPPORT!!! :) My FCM writer is still buggy, so instead of giving up out of frustration, I figured I'd implement another format in the meantime. A lot of cleanup has been do as well, so though you may not notice, the app should be slightly more efficient.
CURRENT FEATURES:

    VIEW HEADER VIEW INPUT  ADD FRAMES  REMOVE FRAMES   EDIT FRAMES   SPLICE  COMPARE INPUT*
SMV     [x]         [x]         [x]          [x]            [ ]         [x]        [x]
FCM     [x]         [x]         [ ]          [ ]            [ ]         [ ]        [ ]
GMV     [x]         [x]         [x]          [ ]            [x]         [ ]        [ ]
FMV     [ ]         [ ]         [ ]          [ ]            [ ]         [ ]        [ ]

*Compare Input is very, very alpha (ie. it still sucks)

-----------------------------------------------------------------------------------------------
CHANGELOG:

v0-5

- UI::Standardized and unified all the format pagination routines (should be faster)
- UI::Movies can now be closed (reclaim memory and allow tabs to be clicked again)
- UI::Loaded movie name now displayed in status bar
- UI::FrameCount now displayed in status bar as well (this will be used for frame editing)
- UI::Added Frame Editing layout
- UI::Add/Remove frames now a right-click context menu of the Controller Input list
    (not all formats have the related update code though)
- GMV::Initial support added (reads header information)
- GMV::Frame input populates (all controllers work, but XYZ-Mode still not supported)
- GMV::Edits made to frame data can be saved out to file
- FCM::Frame input for multiple controllers 
- SMV::Fixed UID (now displayed as DateTime as opposed to UTC integer)
- SMV::Frame input for multiple controllers now works
The GMV editor still doesn't support removing frames, but adding and editing are available. Also, I haven't implemented the extended controls (XYZ-Mode) as of yet, but that'll be coming soon :) SMV's still do the add/remove frames through the old logic, but this should be fixed by the next release. First post of the thread has been updated to link to the new file. Enjoy
Editor, Reviewer, Experienced player (979)
Joined: 4/17/2004
Posts: 3109
Location: Sweden
Wohoo. Sounds great. I will check out the GMV editing feature. Since the feature set is very different for the movie formats, is every format coded as a special case?
Emulator Coder, Former player
Joined: 10/2/2005
Posts: 563
Location: Toronto, Ontario
Truncated wrote:
Since the feature set is very different for the movie formats, is every format coded as a special case?
Sorta...each format is a class that encapsulates all the necessary properties and methods required to define and interact with the desired format (bad grammar eh?). The main logic attaches cases to the form controls that fire based on what kind of movie file is loaded. The way I've designed this is to have the controller input populate an array, that is then used to populate the listview. Any editing is then applied to the listview, which allows for the same logic to work for all formats (ie. you can add and edit frames for all formats right now, but only the GMV save method exists). The plan here is to make it as easy as possible to implement new features for all supported formats as the need arises.
creaothceann
He/Him
Editor
Joined: 4/7/2005
Posts: 1874
Location: Germany
Maximus wrote:
each format is a class that encapsulates all the necessary properties and methods required to define and interact with the desired format (bad grammar eh?). The main logic attaches cases to the form controls that fire based on what kind of movie file is loaded.
Have you thought about implementing the required functions in the root class? You'd then not have to do case selections in the main code. Or I didn't understand it correctly...
Emulator Coder, Former player
Joined: 10/2/2005
Posts: 563
Location: Toronto, Ontario
creaothceann wrote:
Have you thought about implementing the required functions in the root class? You'd then not have to do case selections in the main code.
The thing is, the required functions are handled differently, depending on which format is loaded. The case selections in the main code are pretty basic though. For example:
                // load an SMV file if it verifies
                if (fn.IsValidSMV(dlgOpen.FileName))
                {
                    movieType = MovieType.SMV;
                    loadSMVFile(dlgOpen.FileName);
                }
                // load an FCM file if it verifies                
                else if (fn.IsValidFCM(dlgOpen.FileName))
                {
                    movieType = MovieType.FCM;
                    loadFCMFile(dlgOpen.FileName);
                }
                // load a GMV file if it verifies
                else if (fn.IsValidGMV(dlgOpen.FileName))
                {
                    movieType = MovieType.GMV;
                    loadGMVFile(dlgOpen.FileName);
                }          
This currently isn't the most efficient way to do things (i know), but this is basically the only kind of code that accompanies the main (root) class.
Former player
Joined: 9/20/2006
Posts: 287
Location: Singapore
Yup, just tried it... pretty nice to have a GUI for once! Hmmm, just some nitpicking with the interface: how about adding a clear frames(not remove frames) function in the right-click drop down, and also allow editing multiple frames at once, ie highlight and change a number of frames to issue the same command. GMV works nicely, though I can't seem to get the "go to frame" function working properly
Truncated wrote:
Truncated is the most fiendish instrument of torture ever devised to bedevil the days of man. -- xoinx
Emulator Coder, Former player
Joined: 10/2/2005
Posts: 563
Location: Toronto, Ontario
:P Goto frames code didn't work properly so I took it out, but it should be fixed shortly. I'll likely be releasing an updated version of 0.5 in the next day or two that includes that feature as well as removing frames. As for additional features, if you think they'd be useful, I'd be happy to implement them.
Former player
Joined: 9/20/2006
Posts: 287
Location: Singapore
They would be for me :) thanks... the first program on the .NET framework I ever managed to get working. WOOT
Truncated wrote:
Truncated is the most fiendish instrument of torture ever devised to bedevil the days of man. -- xoinx
Emulator Coder, Former player
Joined: 10/2/2005
Posts: 563
Location: Toronto, Ontario
xoinx wrote:
how about adding a clear frames(not remove frames) function in the right-click drop down
I'm assuming this is a range clear (not clear ALL frames) you're looking for.
Former player
Joined: 9/20/2006
Posts: 287
Location: Singapore
Maximus wrote:
xoinx wrote:
how about adding a clear frames(not remove frames) function in the right-click drop down
I'm assuming this is a range clear (not clear ALL frames) you're looking for.
Ah, yes. But thinking about it now, being able to edit multiple frames at once would be suffice since I can clear those frames altogether. But still a clear frame would be convenient if not too much hassle
Truncated wrote:
Truncated is the most fiendish instrument of torture ever devised to bedevil the days of man. -- xoinx
Emulator Coder, Former player
Joined: 10/2/2005
Posts: 563
Location: Toronto, Ontario
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.
Editor, Reviewer, Experienced player (979)
Joined: 4/17/2004
Posts: 3109
Location: Sweden
Downloaded and tried this now: "Could not initiate the program correctly (0xc0000135). Click on OK to terminate the program." :( I guess this has something to do with NET framework. (T.i. I don't have it. I think EXE files should be executable anyway.)
Emulator Coder, Former player
Joined: 10/2/2005
Posts: 563
Location: Toronto, Ontario
Truncated wrote:
Downloaded and tried this now: "Could not initiate the program correctly (0xc0000135). Click on OK to terminate the program."
You need the latest version of the .NET framework to use this app. You can grab it from microsoft at http://www.microsoft.com/downloads/details.aspx?FamilyID=0856eacb-4362-4b0d-8edd-aab15c5e04f5&displaylang=en
Editor, Reviewer, Experienced player (979)
Joined: 4/17/2004
Posts: 3109
Location: Sweden
So... I need to install a 280 MB (or is it 610 MB?) system to run a 132 kB program? Pass. :/ Can't you compile it into an EXE file which doesn't need all that? It doesn't matter if it's a few MB itself, but I just can't transfer hundreds of megabytes to my own computer with a flash memory.
Emulator Coder, Former player
Joined: 10/2/2005
Posts: 563
Location: Toronto, Ontario
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 ;)
Former player
Joined: 9/20/2006
Posts: 287
Location: Singapore
Hmmm... the .NET framework I downloaded (for win98) was only 23mb. Hex editing is a hassle, so i think it's worthwhile for me
Truncated wrote:
Truncated is the most fiendish instrument of torture ever devised to bedevil the days of man. -- xoinx
1 2 3
15 16