I combined my patch, Dehacked's patch and FabianX's patch and updated the instructions at the
ConvertingSMVToAVIInLinux page.
The patch now has these features, when compared to the standard WIP-1.43 version:
- display frame numbers (hotkey and commandline option)
- toggle movie recording state
- display pressed keys (hotkey and commandline option)
- display movie info (commandline option)
- skip number of frames
- automatically start playing a movie (commandline option)
- automatically quit emulator after given number frames (commandline option)
- movie recording asks for number of players
- movie recording asks whether reset / savestate is wanted
- movie recording allows cancelling
- video stream writing to a pipe (commandline option)
- audio stream writing to a pipe (commandline option)
- emulator no longer gets confused (speedwise) from pausing
Also Dehacked's patch concerning joystick buttons was incorporated.
The audio/video stream recording option allows for a shell command where the audio/video data will be piped to. The defaults are set as to write raw audio to s.log and ffv1-compressed lossless video to test0.avi - but it will not be done unless activated.
The keys are configured as follows:
// player 1: tr,tl, x,a
Define(PLAYING_KEY, 0x00000010, XK_z, XK_w, XK_b);
Define(PLAYING_KEY, 0x00000020, XK_a, XK_q, XK_v);
Define(PLAYING_KEY, 0x00000040, XK_s, XK_e, XK_m);
Define(PLAYING_KEY, 0x00000080, XK_d, XK_t, XK_period);
// player 1: right,left,down,up
Define(PLAYING_KEY, 0x00000100, XK_k, XK_Right);
Define(PLAYING_KEY, 0x00000200, XK_h, XK_Left);
Define(PLAYING_KEY, 0x00000400, XK_j, XK_n, XK_Down);
Define(PLAYING_KEY, 0x00000800, XK_u, XK_Up);
// player 1: start,select, y,b
Define(PLAYING_KEY, 0x00001000, XK_Return);
Define(PLAYING_KEY, 0x00002000, XK_space);
Define(PLAYING_KEY, 0x00004000, XK_x, XK_r, XK_comma);
Define(PLAYING_KEY, 0x00008000, XK_y, XK_c);
// player 2: tr,tl, x,a
Define(PLAYING_KEY, 0x00100000, XK_Delete);
Define(PLAYING_KEY, 0x00200000, XK_Insert);
Define(PLAYING_KEY, 0x00400000, XK_Home);
Define(PLAYING_KEY, 0x00800000, XK_Prior);
// player 2: right,left,down,up
Define(PLAYING_KEY, 0x01000000, XK_KP_4);
Define(PLAYING_KEY, 0x02000000, XK_KP_6);
Define(PLAYING_KEY, 0x04000000, XK_KP_2);
Define(PLAYING_KEY, 0x08000000, XK_KP_8);
// player 2: start,select,y,b
Define(PLAYING_KEY, 0x10000000, XK_KP_Enter);
Define(PLAYING_KEY, 0x20000000, XK_KP_Add);
Define(PLAYING_KEY, 0x40000000, XK_End);
Define(PLAYING_KEY, 0x80000000, XK_Next);
// toggle sound channels
// Careful: alt + f-keys might be bound to the window manager!
Define(TOGGLE_SOUND, 0, Alt(XK_F4), Ctrl(XK_F4));
Define(TOGGLE_SOUND, 1, Alt(XK_F5), Ctrl(XK_F5));
Define(TOGGLE_SOUND, 2, Alt(XK_F6), Ctrl(XK_F6));
Define(TOGGLE_SOUND, 3, Alt(XK_F7), Ctrl(XK_F7));
Define(TOGGLE_SOUND, 4, Alt(XK_F8), Ctrl(XK_F8));
Define(TOGGLE_SOUND, 5, Alt(XK_F9), Ctrl(XK_F9));
Define(TOGGLE_SOUND, 6, Alt(XK_F10), Ctrl(XK_F10));
Define(TOGGLE_SOUND, 7, Alt(XK_F11), Ctrl(XK_F11));
// re-enable all sound channels
Define(TOGGLE_SOUND, 8, Alt(XK_F12), Ctrl(XK_F12));
// numbered quicksaves
Define(WRITE_SAVE_NUM, 0, XK_F1);
Define(WRITE_SAVE_NUM, 1, XK_F2);
Define(WRITE_SAVE_NUM, 2, XK_F3);
Define(WRITE_SAVE_NUM, 3, XK_F4);
Define(WRITE_SAVE_NUM, 4, XK_F5);
Define(WRITE_SAVE_NUM, 5, XK_F6);
Define(WRITE_SAVE_NUM, 6, XK_F7);
Define(WRITE_SAVE_NUM, 7, XK_F8);
Define(WRITE_SAVE_NUM, 8, XK_F9);
Define(WRITE_SAVE_NUM, 9, XK_F10);
Define(LOAD_SAVE_NUM, 0, Shift(XK_F1));
Define(LOAD_SAVE_NUM, 1, Shift(XK_F2));
Define(LOAD_SAVE_NUM, 2, Shift(XK_F3));
Define(LOAD_SAVE_NUM, 3, Shift(XK_F4));
Define(LOAD_SAVE_NUM, 4, Shift(XK_F5));
Define(LOAD_SAVE_NUM, 5, Shift(XK_F6));
Define(LOAD_SAVE_NUM, 6, Shift(XK_F7));
Define(LOAD_SAVE_NUM, 7, Shift(XK_F8));
Define(LOAD_SAVE_NUM, 8, Shift(XK_F9));
Define(LOAD_SAVE_NUM, 9, Shift(XK_F10));
// layer toggles
Define(TOGGLE_LAYER, 0, XK_1);
Define(TOGGLE_LAYER, 1, XK_2);
Define(TOGGLE_LAYER, 2, XK_3);
Define(TOGGLE_LAYER, 3, XK_4);
// sprite layer toggle
Define(TOGGLE_LAYER, 4, XK_5);
// named saves
Define(LOAD_SAVE_ASK, 0, Alt(XK_F2), Ctrl(XK_F2), XK_F11);
Define(WRITE_SAVE_ASK, 0, Alt(XK_F3), Ctrl(XK_F3), XK_F12);
Define(WRITE_SPC_ASK, 0, Alt(XK_F1), Ctrl(XK_F1));
// timings
Define(FRAMETIME_INC, 0, Shift(XK_equal), Shift(XK_plus));
Define(FRAMETIME_DEC, 0, Shift(XK_minus));
Define(FRAMESKIP_INC, 0, XK_equal, XK_plus);
Define(FRAMESKIP_DEC, 0, XK_minus);
// pause
Define(PAUSE, 0, XK_Pause, XK_Break, XK_Scroll_Lock);
Define(FRAME_ADVANCE, 0, XK_backslash, Shift(XK_7));
// misc functions
Define(DGA_FULLSCREEN, 0, Alt(XK_Return));
Define(SCREENSHOT, 0, XK_Print);
Define(SPC7110LOG, 0, XK_Sys_Req);
Define(TOGGLE_HDMA, 0, XK_0);
Define(TOGGLE_JOYSWAP, 0, XK_6);
Define(TOGGLE_GL_CUBE, 0, Shift(XK_6));
Define(TOGGLE_BG_HACK, 0, XK_8);
Define(TOGGLE_TRANSP, 0, XK_9);
Define(TOGGLE_CLIPWIN, 0, XK_BackSpace);
Define(TOGGLE_CONTROLLER, 0, XK_7);
Define(TOGGLE_INTERPSOUND, 0, XK_bracketleft, Alt(XK_8));
Define(TOGGLE_SYNCSOUND, 0, XK_bracketright, Alt(XK_9));
Define(TOGGLE_MODE7INTERP, 0, Shift(XK_9));
Define(TURBO_ENABLE, 0, XK_Tab);
Define(SUPERSCOPE_TURBO, 0, XK_grave, XK_asciitilde, XK_numbersign);
Define(SUPERSCOPE_PAUSE_ENABLE, 0, XK_slash);
// escape from fullscreen, escape from emulator
Define(EXIT, 0, XK_Escape);
// movie functions
Define(WRITE_MOVIE_ASK, 0, Shift(XK_1));
Define(LOAD_MOVIE_ASK, 0, Shift(XK_2));
Define(STOP_MOVIE, 0, Shift(XK_3));
Define(MOVIE_DISPLAY_FRAMES, 0,Shift(XK_4));
Define(MOVIE_REC_STATE, 0, Shift(XK_5));
Define(DISPLAY_PRESSED_KEYS, 0,Shift(XK_8));
Define(SKIP_NUMOF_FRAMES, 0, Shift(XK_0));
There is no manual configuration of keys except for editing the source code in this version.