I thought of another funny thing. I always like to watch the keypresses in movies, but lately I've been falling back to watching the encoded .avi files. It came to mind that perhaps it would be possible to output the keypresses from the emu and use it as subtitles in the avi?
So one can choose to load the keypress subtitles if they want. Not sure if it's a big job to make such output from the emu. Still would be cool though.
I haven't done a whole lotta research into this, but I guess it would be possible to convert input to an SRT. If this is something people want, I'll look into implementing this in the editor. I guess the only downside to this is that, since it's not embedded in the avi, you'd have to distribute/keep track of two files (unless you mux it into an OGM or MKV, but then the fonts tend to look bad) ... just a thought
I hope you don't mind me asking, but I was curious if it is a known bug in gens_20061213 that doing a ram search with the data size set to 2 bytes freezes the program. This usually happens when I try to filter the initial searches.
I know that was a problem in one of the versions, but I thought I released a fix. The build I'm working with right now doesn't do that, let me make a quick update.
Edit: Done, updated the zip file and mirror linked from EmulatorHomePages
How fleeting are all human passions compared with the massive continuity of ducks.
I'm getting an error while trying to run the latest gens_movie_9Z in wine. Any suggestions on this?
The error message reads "Error with lpDD_Back->SetSurfaceDesc "
This is the error output:
wine gens_movie_9Z.exe
fixme:d3d:IWineD3DDeviceImpl_GetAvailableTextureMem (0x170ef8) : stub, simulating 64MB for now, returning 64MB left
fixme:ddraw:IDirectDrawImpl_SetCooperativeLevel (0x170618)->(0x20022,00000008)
err:ddraw:IDirectDrawSurfaceImpl_SetSurfaceDesc Setting the surface memory isn't supported yet
fixme:ddraw:IDirectDrawImpl_SetCooperativeLevel (0x170618)->(0x20022,00000008)
fixme:ddraw:IDirectDrawImpl_SetCooperativeLevel (0x170618)->((nil),00000008)
fixme:d3d:IWineD3DStateBlockImpl_Release Releasing primary stateblock
fixme:win:WIN_CreateWindowEx Parent is HWND_MESSAGE
fixme:aspi:SendASPI32Command ASPI: Partially implemented SC_HA_INQUIRY for adapter 0.
err:aspi:SCSI_GetDeviceName Could not open HKLM\HARDWARE\DEVICEMAP\Scsi\Scsi Port 0\Scsi Bus 0\Target Id 1\Logical Unit Id 0
err:aspi:SCSI_GetDeviceName Could not open HKLM\HARDWARE\DEVICEMAP\Scsi\Scsi Port 0\Scsi Bus 0\Target Id 2\Logical Unit Id 0
err:aspi:SCSI_GetDeviceName Could not open HKLM\HARDWARE\DEVICEMAP\Scsi\Scsi Port 0\Scsi Bus 0\Target Id 3\Logical Unit Id 0
err:aspi:SCSI_GetDeviceName Could not open HKLM\HARDWARE\DEVICEMAP\Scsi\Scsi Port 0\Scsi Bus 0\Target Id 4\Logical Unit Id 0
err:aspi:SCSI_GetDeviceName Could not open HKLM\HARDWARE\DEVICEMAP\Scsi\Scsi Port 0\Scsi Bus 0\Target Id 5\Logical Unit Id 0
err:aspi:SCSI_GetDeviceName Could not open HKLM\HARDWARE\DEVICEMAP\Scsi\Scsi Port 0\Scsi Bus 0\Target Id 6\Logical Unit Id 0
err:aspi:SCSI_GetDeviceName Could not open HKLM\HARDWARE\DEVICEMAP\Scsi\Scsi Port 0\Scsi Bus 0\Target Id 7\Logical Unit Id 0
fixme:aspi:SendASPI32Command ASPI: Partially implemented SC_HA_INQUIRY for adapter 1.
err:aspi:SCSI_GetDeviceName Could not open HKLM\HARDWARE\DEVICEMAP\Scsi\Scsi Port 1\Scsi Bus 0\Target Id 1\Logical Unit Id 0
err:aspi:SCSI_GetDeviceName Could not open HKLM\HARDWARE\DEVICEMAP\Scsi\Scsi Port 1\Scsi Bus 0\Target Id 2\Logical Unit Id 0
err:aspi:SCSI_GetDeviceName Could not open HKLM\HARDWARE\DEVICEMAP\Scsi\Scsi Port 1\Scsi Bus 0\Target Id 3\Logical Unit Id 0
err:aspi:SCSI_GetDeviceName Could not open HKLM\HARDWARE\DEVICEMAP\Scsi\Scsi Port 1\Scsi Bus 0\Target Id 4\Logical Unit Id 0
err:aspi:SCSI_GetDeviceName Could not open HKLM\HARDWARE\DEVICEMAP\Scsi\Scsi Port 1\Scsi Bus 0\Target Id 5\Logical Unit Id 0
err:aspi:SCSI_GetDeviceName Could not open HKLM\HARDWARE\DEVICEMAP\Scsi\Scsi Port 1\Scsi Bus 0\Target Id 6\Logical Unit Id 0
err:aspi:SCSI_GetDeviceName Could not open HKLM\HARDWARE\DEVICEMAP\Scsi\Scsi Port 1\Scsi Bus 0\Target Id 7\Logical Unit Id 0
wine: Unhandled page fault on read access to 0x00000000 at address 0x4e8ac6 (thread 0010), starting debugger...
Unhandled exception: page fault on read access to 0x00000000 in 32-bit code (0x004e8ac6).
Register dump:
CS:0073 SS:007b DS:007b ES:007b FS:0033 GS:003b
EIP:004e8ac6 ESP:0034fdcc EBP:00000001 EFLAGS:00210202( - 00 - -RI1)
EAX:00000000 EBX:00000000 ECX:00000000 EDX:0034fddc
ESI:7eae0f30 EDI:7ee6cbf0
Stack dump:
0x0034fdcc: 00000000 00000000 01000400 0034fddc
0x0034fddc: 00000064 00000000 00000000 00000000
0x0034fdec: 00000000 00000000 00000000 00000000
0x0034fdfc: 00000000 00000000 00000000 00000000
0x0034fe0c: 00000000 00000000 00000000 00000000
0x0034fe1c: 00000000 00000000 00000000 00000000
Backtrace:
=>1 0x004e8ac6 in gens_movie_9z (+0xe8ac6) (0x00000001)
2 0x00000000 (0x00000000)
0x004e8ac6: movl 0x0(%eax),%ecx
Modules:
Module Address Debug info Name (97 modules)
PE 400000-2d17000 Export gens_movie_9z
ELF 7bf00000-7bf03000 Deferred <wine>
ELF 7ce0c000-7ce17000 Deferred libgcc_s.so.1
ELF 7cefc000-7cf7b000 Deferred libglu.so.1
ELF 7cf7c000-7cf95000 Deferred wnaspi32<elf>
\-PE 7cf80000-7cf95000 \ wnaspi32
ELF 7cf95000-7d04f000 Deferred wined3d<elf>
\-PE 7cfa0000-7d04f000 \ wined3d
ELF 7d06f000-7d0a2000 Deferred uxtheme<elf>
\-PE 7d080000-7d0a2000 \ uxtheme
ELF 7d0a2000-7d0de000 Deferred wineoss<elf>
\-PE 7d0b0000-7d0de000 \ wineoss
ELF 7d33a000-7d34f000 Deferred midimap<elf>
\-PE 7d340000-7d34f000 \ midimap
ELF 7d34f000-7d36b000 Deferred imm32<elf>
\-PE 7d360000-7d36b000 \ imm32
ELF 7d36b000-7d36e000 Deferred libxinerama.so.1
PE 7d370000-7d386000 --none-- msacm32
ELF 7d6ae000-7df34000 Deferred libglcore.so.1
ELF 7df34000-7dfc0000 Deferred libgl.so.1
ELF 7dfc1000-7dfc6000 Deferred libxfixes.so.3
ELF 7dfc6000-7dfcf000 Deferred libxcursor.so.1
ELF 7dfcf000-7dfd2000 Deferred libxrandr.so.2
ELF 7dfd2000-7dfda000 Deferred libxrender.so.1
ELF 7dfda000-7e067000 Deferred winex11<elf>
\-PE 7dff0000-7e067000 \ winex11
ELF 7e10b000-7e12b000 Deferred libexpat.so.1
ELF 7e12b000-7e156000 Deferred libfontconfig.so.1
ELF 7e156000-7e16a000 Deferred libz.so.1
ELF 7e16a000-7e1d4000 Deferred libfreetype.so.6
ELF 7e1ee000-7e21a000 Deferred ws2_32<elf>
\-PE 7e200000-7e21a000 \ ws2_32
ELF 7e21a000-7e234000 Deferred wsock32<elf>
\-PE 7e220000-7e234000 \ wsock32
ELF 7e234000-7e2cc000 Deferred oleaut32<elf>
\-PE 7e240000-7e2cc000 \ oleaut32
ELF 7e2cc000-7e315000 Deferred dsound<elf>
\-PE 7e2d0000-7e315000 \ dsound
ELF 7e315000-7e34b000 Deferred dinput<elf>
\-PE 7e320000-7e34b000 \ dinput
ELF 7e34b000-7e350000 Deferred libxdmcp.so.6
ELF 7e350000-7e43c000 Deferred libx11.so.6
ELF 7e43c000-7e44a000 Deferred libxext.so.6
ELF 7e44a000-7e462000 Deferred libice.so.6
ELF 7e462000-7e46b000 Deferred libsm.so.6
ELF 7e46b000-7e4bb000 Deferred ddraw<elf>
\-PE 7e470000-7e4bb000 \ ddraw
ELF 7e4bb000-7e4ed000 Deferred winspool<elf>
\-PE 7e4c0000-7e4ed000 \ winspool
ELF 7e4ed000-7e545000 Deferred shlwapi<elf>
\-PE 7e500000-7e545000 \ shlwapi
ELF 7e545000-7e637000 Deferred shell32<elf>
\-PE 7e560000-7e637000 \ shell32
ELF 7e637000-7e6d7000 Deferred comdlg32<elf>
\-PE 7e640000-7e6d7000 \ comdlg32
ELF 7e6d7000-7e6ea000 Deferred libresolv.so.2
ELF 7e6ea000-7e708000 Deferred iphlpapi<elf>
\-PE 7e6f0000-7e708000 \ iphlpapi
ELF 7e708000-7e75d000 Deferred rpcrt4<elf>
\-PE 7e710000-7e75d000 \ rpcrt4
ELF 7e75d000-7e7f6000 Deferred ole32<elf>
\-PE 7e770000-7e7f6000 \ ole32
ELF 7e7f6000-7e8b7000 Deferred comctl32<elf>
\-PE 7e800000-7e8b7000 \ comctl32
ELF 7e8b7000-7e8de000 Deferred msvfw32<elf>
\-PE 7e8c0000-7e8de000 \ msvfw32
ELF 7e8de000-7e971000 Deferred gdi32<elf>
\-PE 7e8f0000-7e971000 \ gdi32
ELF 7e971000-7eaab000 Deferred user32<elf>
\-PE 7e990000-7eaab000 \ user32
ELF 7eaab000-7eb39000 Deferred winmm<elf>
\-PE 7eac0000-7eb39000 \ winmm
ELF 7eb39000-7eb5f000 Deferred msacm32<elf>
ELF 7eb5f000-7eb99000 Deferred avifil32<elf>
\-PE 7eb70000-7eb99000 \ avifil32
ELF 7eb99000-7ebdf000 Deferred advapi32<elf>
\-PE 7eba0000-7ebdf000 \ advapi32
ELF 7ebdf000-7ebe2000 Deferred iso8859-1.so
ELF 7ede9000-7ef0f000 Deferred kernel32<elf>
\-PE 7ee00000-7ef0f000 \ kernel32
ELF 7ef0f000-7ef1a000 Deferred libnss_files.so.2
ELF 7ef1a000-7ef24000 Deferred libnss_nis.so.2
ELF 7ef24000-7ef2d000 Deferred libnss_compat.so.2
ELF 7ef31000-7ef33000 Deferred libnvidia-tls.so.1
ELF 7ef33000-7ef47000 Deferred oleacc<elf>
\-PE 7ef40000-7ef47000 \ oleacc
ELF 7ef47000-7ef6c000 Deferred libm.so.6
ELF 7ef6c000-7f000000 Deferred ntdll<elf>
\-PE 7ef80000-7f000000 \ ntdll
ELF a7d13000-a7d18000 Deferred libxxf86vm.so.1
ELF a7d19000-a7d1d000 Deferred libdl.so.2
ELF a7d1d000-a7e4e000 Deferred libc.so.6
ELF a7e4e000-a7e60000 Deferred libpthread.so.0
ELF a7e62000-a7e65000 Deferred libxau.so.6
ELF a7e65000-a7e7b000 Deferred libnsl.so.1
ELF a7e7b000-a7f8c000 Deferred libwine.so.1
ELF a7f8e000-a7fa5000 Deferred ld-linux.so.2
Threads:
process tid prio (all id:s are in hex)
00000011
00000012 0
0000000f (D) Z:\mnt\sda3\spel\gens_movie_9Z\gens_movie_9Z.exe
00000013 0
00000010 0 <==
I tried to play around with the winecfg setting different types of emulation for the graphics hardware. Also tried to change the OS. But nothing seems to help. Please help me out so that I can get back to TAS:ing ASAP. :)
There's an SVN server up with the most recent source code which doesn't have broken/partially implemented features.
Here's the thread about it: http://tasvideos.org/forum/viewtopic.php?t=4109
How fleeting are all human passions compared with the massive continuity of ducks.
Feature request: Make the RAM-watch detachable.
I would like to be able to detach the addresses from the RAM-watch and then be able to minimize the large RAM-watch window. Much easier, besides the RAM-watch window is kinda in the way if you ask me. I don't have a screen that can do 1280x1024 for example. Well... It can actually, but it would make my eyes bleed, and I can't afford a new monitor.
K3b has a similar status bar when you burn a compilation. You get a hovering status box which you can move around and place wherever you like. So you don't need the big status window in your eye all the time.
Fixed numerous bugs in Ram search and ram watch. They should now be 100% reliable.
Ram Search and Ram Watch now update immediately upon state load
Added 32 bit color support.
Added "Lag detection" (frame counter flashes red if input was not checked this frame)
Added resetable "Lag counter" -- counts frames that input was not checked. Resets to 0 when Ctrl-R is pressed.
Added Multi-track recording
Ported instruction logging from GensTracer
Ported RAM access logging from GensTracer
Added Volume control dialog
Corrected behavior of Layer 3 toggled full transparency
Added a "Sprites always on top" option.
Input display, frame counter, and lag counter will no longer show up in AVIs
TAB for fast forward is now "Alt-tab" safe
Added a hotkey quickreference to the zip file
[edit]Whoops. I forgot to make the lag counter reset automatically on CPU reset, or game change before I released 9.5.
New version Gens 9.5a. Links updated.
[edit 2]Updated links for 9.5b (see below)
Download it here or here.
For more information on the new trace features, see the readme.txt in Trace Help folder of the zip file.
How fleeting are all human passions compared with the massive continuity of ducks.
These are extremely useful and advanced tools, great (and fast) work, upthorn.
Especially the 32 bit color support, lag detection and sprites on top are a pleasant features (I didn't use multitrack, but it has to be an awesome tool, too).
Loading a state created with this version seems to mess with the graphics of some games for a couple of frames.
Other than that, some very nice additions.
Yeah, that's a partially implemented feature -- you may notice it no longer requires advancing the frame for the screen to display when you load state.
However the working palettes aren't currently saved or loaded, so the colors are a little out of whack.
How fleeting are all human passions compared with the massive continuity of ducks.
One thing... the option "0-9 load, shift+0-9 save" doesn't quite work anymore. Saving is fine, but loading does not take place unless ctrl+0-9 is pressed. Is this intentional? Any way to revert back to the original settings?
EDIT:
I just did a little testing and realised that if I used savestates made using 9Z, the colours look perfect when loaded on 9.5a... but when the states are made using 9.5a, they look bad whether loaded on 0.5a or 9Z. Any reason for this??
Its probally too much to ask but is it possible to have the lag counter not to count frames where there is a black screen since often thats part of a transition screen.
Fixed a bug in Ram search which caused it not to display all un-eliminated results when changing size down to 1, or setting "check misaligned"
Added a manual "Eliminate" button to ram search, for users who know a search result is not what they are looking for.
Added a "Duplicate watch" button to ram watch, to allow for adding several watches based on a template
Made "Clean AVI screeen" optional, and added it to the "Tools->AVI Tools" menu
Fixed immediate screen update on state load to use correct colors. May cause savestate desyncs in very finicky games.
Check mark by "tools->trace tools->trace" now updates properly
Check mark by "tools->trace tools->hook ram" now updates properly
Download it here or here.
That is intentional. It seems to me that any hotkey that alters the emulation state should require a "shift" or "control" to be pressed, so as to avoid accidental activation.
Intended behavior:
0 - 9 select savestate
shift 0 - 9 select savestate, and save
control 0 - 9 select savestate, and load
Yeah, there were more variables dumped in a couple of editions of 9z, but the ones that did not seem to affect sync were removed.
But the pertinent one has been added back in to 9.5b
Yeah, that would be much more difficult to implement. And besides, you can just note the total before transition and hit ctrl-r to reset it to 0 afterwards. Then none of those frames will be counted.
How fleeting are all human passions compared with the massive continuity of ducks.
A few bug fixes/requests-
The trace.log is not "freed" until Gens is closed. Since I am making multiple trace files, it helps to be able to rename it, move it, and start new ones, without having to close Gens
Additionally, the Tracer needs a verbose mode. It currently skips writing a BSR or JSR if it has already encountered it. However, if the Subroutine is executed more than once per frame, it may be impossible to find what happens in some conditional branches that occur within the subroutine. A verbose mode that includes every line executed would help.
The duplicate watch feature is great, it allows for multiple types, but you can't name 2 watches different things. For example, I'm watching FF0EC2 as both a 16 byte hex, and an 8 bit unsigned. However, they both are forced the same name, when I'd like to have them named differently.
A future thing that would be awesome would be to have a window that has all the code displayed that was executed between the current frame and the last frame. That may just be a pipe dream....
Sage advice from a friend of Jim: So put your tinfoil hat back in the closet, open your eyes to the truth, and realize that the government is in fact causing austismal cancer with it's 9/11 fluoride vaccinations of your water supply.
I tried this out, and I find it pretty much unuseable. I understand your reasoning, but "control" is not a viable modifier to use the way Gens has its other hotkeys set up. Here is a typical example of what happens when I load a savestate:
before this change:
- Press Del to pause. Press 5 to load savestate. Hold C to start jumping. Press Del to unpause. Result: The character jumps.
after this change:
- Press Del to pause. Hold Ctrl and press 5 to load savestate. Hold C to start jumping. Press Del to unpause. Result: Gens stops recording and closes the ROM because I didn't let go of Ctrl quite fast enough.
Also, loading a savestate is such a common action when making a TAS that needing to press two buttons at a time for it makes TASing significantly slower, unless you can get away with holding that modifier almost all of the time (which in this case I can't). And it creates some confusion because now there are 2 different modifiers for savestates, making it possible to press the wrong one and load when you meant to save, whereas a single modifier is easier to use consistently.
The hotkeys should really be made configurable (including all savestate save and load button combos), but until that happens, seeing as this is already an optional feature, I would prefer it be turned off by default (if you feel it is unsafe) instead of changed liked this.
I don't know whether the results would be desirable, but that doesn't sound so hard to make an option for... You have access to the rendered pixels, so you can check if any of them have a different value from the first one and not increment the lag counter in the event that none of them do. CPU usage will stay roughly the same during non-loading screens if you early-out as soon as you find a difference, except for some game I have never heard of that has almost the entire screen black during normal gameplay.
I admit that ctrl-0 through 9 has been more difficult for me to get used to than I expected. I just thought of a good way to deal with it so that it's semi-configurable, though. Which'll have to do until I have more time to concentrate on totally rewriting Gens' hotkey handling.
How fleeting are all human passions compared with the massive continuity of ducks.
Can you provide more details about the system you're running it on?
Things like the windows version, and the "color quality" in your display properties would be very helpful.
No worry, it was a bug from a earlier crash of another program causing the confliction, a simple reset fixed it. Post was deleted.
I read that multi-track recording is possible, how is this achieved? It would help because I would like to try do a Chaos Engine recording and this would help greatly.
I suppose I didn't document multi-track recording very well.
the hotkeys are listed in Gens_9.5_QuickRef.txt
and here, for your convenience:
"Ctrl-Shift-0", Record all players
"Ctrl-Shift-1", Record Player 1 only
"Ctrl-Shift-2", Record Player 2 only
"Ctrl-Shift-3", Record Player 3 only
"Ctrl-Shift-4", Record Players 1 and 2
"Ctrl-Shift-5", Record Players 1 and 3
"Ctrl-Shift-6", Record Players 2 and 3
To use it, make a savestate before a segment you plan to record, then hit the hotkey which records the player you wish.
When you are done recording that player, hit the hotkey for one of the other players, and reload the savestate.
Note: I have, as yet, been unable to test multitrack recording extensively, so let me know how it works (or fails) for you.
How fleeting are all human passions compared with the massive continuity of ducks.
It seems to record fine for me however during the preliminary tests, for some reason the unrecorded player (For testing purposes, a Sonic 2 race) after a save-state spams all buttons.
This could be from a change of controls during recording, will investigate.
[Edit]If you contact me by MSN then I can keep you up-to-date on these things rather then having to wait for me to post on the forums, although I will understand if you don't wish to contact me :)
Changing of controls has some effect but does not seem to be the overal issue. It seems you can only go back and record over what you have done, ONCE.[/edit]