RetroArch Mirror Mode
-
With a new year comes new challenges. Today I thought it'd be fun to try mirroring a few games that I know forward, but not necessarily backward. The idea comes from the 'Mirror Mode' Sega included in their Mega Drive/Genesis classics collection on Steam and the tutorial to make the magic happen was written by team RetroArch's Hunter K. which can be found here. My personal docket of games to try today are 'Super Mario Bros.', 'Contra' and 'Goonies II'. I've already tried SMB and it really is a trip playing a game this familiar in such an unfamiliar way. Anyway, happy new year and may all your hangovers be fleeting.
-
There wasn't really a wellspring of interest in this, but for the sake of posterity, I should add that for this to work, you may have to replace the
image-adjustment.glsl
file distributed with RetroPie with this alternative for the shader parameters to become available. I had a lot of fun with this today and I'll likely revisit it pretty often to breathe new life into some old favorites. 'Contra' was especially fun and beating it backwards would be great bragging rights. -
Very interested in this. Could you give a few more tips on how to get it working, please? Do you copy and paste the code you pointed to and overwrite the image-adjustment.glsl contents and save? Where do I find that file?
May need this for use in a Space Invaders machine that makes use of a mirror.
-
@OneSwitch said in RetroArch Mirror Mode:
Do you copy and paste the code you pointed to and overwrite the image-adjustment.glsl contents and save?
You can handle it all in the GUI by accesing the 'Shaders' menu from the RetroArch quick menu. You would first change the 'Shader Passes' from '0' to '1' and then select 'shader #0 N/A'. From there, navigate to your newly downloaded
image-adjustment.glsl
and select 'Apply Changes'. For your purposes of only flipping the image, all that's left to do is select 'Shader Parameters' and then set the desired axis flip from the bottom of the resulting menu. You can then go back one menu and save the game preset to make it stick. -
Thanks for getting back. I struggled with the newly downloaded bit....
I found that I need to right-click on the RAW box at this link to save it: https://github.com/libretro/glsl-shaders/blob/master/misc/image-adjustment.glsl. I'm doing that on a Windows PC.
I could then use Filezilla to copy that file across to my Raspberry Pi/RetroPie.... here...
configs\all\retroarch\shaders\presets\
...and with your extra help, working a treat. Thank you so much! Brilliant. Will work in an old Space Invaders machine etc. if I can't get the old hardware working.
-
I have one more question. I'm trying to layer a second shader to give nice scan lines on Space Invaders.
I tried crt-pi-vertical.gls. If I use that as the second shader, it seems to be ignored. If I use it as the first shader, it gives a strange sickly effect. Would love to get both working well together if possible.
-
@OneSwitch said in RetroArch Mirror Mode:
I tried crt-pi-vertical.gls. If I use that as the second shader, it seems to be ignored. If I use it as the first shader, it gives a strange sickly effect. Would love to get both working well together if possible.
I'm afraid I don't have any experience with shader compatibility issues. Perhaps someone else may have some thoughts.
-
Thanks @mediamogul - Best I've manged to get is using...
shader No.0: image-adjustment.glsl
shader No.1:scanline.glsl...the crt-pi-vertical and crt-pi shaders that I'd prefer to be using look nasty when combined with the flipping image-adjustment.glsl shader (and cause quite jerky play too, I assume because of the extra work they cause the RetroPie).
-
Got the issue fixed here: https://github.com/libretro/glsl-shaders/issues/88
Using Notepad++ on a PC, I saved the code below into a file (I called mine "image-adjustment2.glslp").
Then used Filezilla to save it to the path configs\all\retroarch\shaders\presets\
Then I'd load the game, go to shaders... load shader preset (image-adjustment2.glslp) .... apply changes .... shader parameters - flip vertical axis.... play. I believe that should work on a Taito Space Invaders quite nicely. Will try ASAP.
shaders = "2" shader0 = "../misc/image-adjustment.glsl" filter_linear0 = "false" wrap_mode0 = "clamp_to_border" mipmap_input0 = "false" alias0 = "" float_framebuffer0 = "true" srgb_framebuffer0 = "false" scale_type_x0 = "source" scale_x0 = "1.000000" scale_type_y0 = "source" scale_y0 = "1.000000" shader1 = "../crt/shaders/crt-pi.glsl" filter_linear1 = "false" wrap_mode1 = "clamp_to_border" mipmap_input1 = "false" alias1 = "" float_framebuffer1 = "true" srgb_framebuffer1 = "false" parameters = "ia_target_gamma;ia_monitor_gamma;ia_overscan_percent_x;ia_overscan_percent_y;ia_saturation;ia_contrast;ia_luminance;ia_black_level;ia_bright_boost;ia_R;ia_G;ia_B;ia_ZOOM;ia_XPOS;ia_YPOS;ia_TOPMASK;ia_BOTMASK;ia_LMASK;ia_RMASK;ia_GRAIN_STR;ia_SHARPEN;ia_FLIP_HORZ;ia_FLIP_VERT;CURVATURE_X;CURVATURE_Y;MASK_BRIGHTNESS;SCANLINE_WEIGHT;SCANLINE_GAP_BRIGHTNESS;BLOOM_FACTOR;INPUT_GAMMA;OUTPUT_GAMMA" ia_target_gamma = "2.200000" ia_monitor_gamma = "2.200000" ia_overscan_percent_x = "0.000000" ia_overscan_percent_y = "0.000000" ia_saturation = "1.000000" ia_contrast = "1.000000" ia_luminance = "1.000000" ia_black_level = "0.000000" ia_bright_boost = "0.000000" ia_R = "1.000000" ia_G = "1.000000" ia_B = "1.000000" ia_ZOOM = "1.000000" ia_XPOS = "0.000000" ia_YPOS = "0.000000" ia_TOPMASK = "0.000000" ia_BOTMASK = "0.000000" ia_LMASK = "0.000000" ia_RMASK = "0.000000" ia_GRAIN_STR = "0.000000" ia_SHARPEN = "0.000000" ia_FLIP_HORZ = "1.000000" ia_FLIP_VERT = "1.000000" CURVATURE_X = "0.100000" CURVATURE_Y = "0.150000" MASK_BRIGHTNESS = "0.700000" SCANLINE_WEIGHT = "6.000000" SCANLINE_GAP_BRIGHTNESS = "0.120000" BLOOM_FACTOR = "1.500000" INPUT_GAMMA = "2.400000" OUTPUT_GAMMA = "2.200000"
-
Really neat idea. I’m gonna try this later on a few games I know pretty well, and see how far I can throw a controller in rage.
-
One related question... Is it possible to do this sort of thing with Emulation Station? I.e. flip the screen horizontally so that you can play the game in a mirror on a CRT TV (either with Pi2Scart or composite 4:3 output)?
I'm told RecalBox can do this, but I'd love to stick with the RetroPie set-up I know well in comparison.
I've posted here too: ES Github issues
-
@OneSwitch said in RetroArch Mirror Mode:
I'm told RecalBox can do this
How exactly can it do this ?
Emulationstation does not have shader support, so what you're asking is not yet implemented. -
@OneSwitch why is this an ES issue? presumably once you've loaded the game, it's now a game issue. there doesn't seem much point in fixing it in ES if there's no a solution for the games as well. never mind if you load the command prompt/retropie-setup menu...
-
@OneSwitch said in RetroArch Mirror Mode:
I'm told RecalBox can do this
Whoever told you this is probably saying crap. Afaik :
- the only thing you could do to ES is rotate it (by using the rpi firmware
display_rotate
config), which is different from flipping - for flipping you'd need a compatible emulator (i don't think there are many apart from RA + shaders, and it wouldn't even affect RA's menu)
- the only thing you could do to ES is rotate it (by using the rpi firmware
-
@barbudreadmon said in RetroArch Mirror Mode:
the only thing you could do to ES is rotate it (by using the rpi firmware display_rotate config), which is different from flipping
EmulationStation (the RetroPie fork) has a
--screenrotate
option which allows you to rotate it - independent of any RPI configuration - https://github.com/RetroPie/EmulationStation/pull/348.However, it doesn't do flipping (mirroring), that's why I'm curious if the Recalbox ES fork has any additional features like this - or if the mirroring to which @OneSwitch refers is done outside of ES.
EDIT: @OneSwitch there is another option - using Reshade. It's an external application that can apply shaders to DirectX/OpenGL externally. However, it's a Windows only application, so it's not going to work with RetroPie.
-
@dankcushions said in RetroArch Mirror Mode:
is an ES issue? presumably once you've loaded the game, it's now a game issue. there doesn't seem much point in fixing it in ES if there's no a solution for the games as well. never mind if you load the command prompt/retropie-setup menu...
With HDMI, you can flip the screen horizontally (and I think vertically), to give an image of everything that will look the right-way around when viewed in a mirror.
With component/SCART output suitable for a CRT TV, you can use a RetroArch shader to get the image flipped and rotated so it works perfectly in a mirror too (see this forum post). This is good, but obviously, all the menus, the screensaver (easier to fix) and general RetroPie/ES menus are the wrong way around. It would be very nice to find a fix for that last piece of the puzzle.
Contributions to the project are always appreciated, so if you would like to support us with a donation you can do so here.
Hosting provided by Mythic-Beasts. See the Hosting Information page for more information.