This page looks best with JavaScript enabled

Metal Gear Solid RetroArch Settings

 ·  ☕ 4 min read

I recently played through Death Stranding and loved it so much I decided to check out the rest of Kojima’s famous work. Unfortunately Konami has made it pretty difficult to enjoy the entire Metal Gear series on modern systems. All the games are available, but usually not in the same package, none are on PS4, and the recent GOG PC releases are apparently the original not-great releases. There’s an HD collection on the PS3, that I planned on playing via PS Now (can’t stream PS3 without an HDCP stripper, which I’m not about to buy) but that starts with MGS2 for some reason. So it seems like the best way to play MGS1 today on a PC is to emulate the PlayStation release.

I’m not super duper familiar with PS1 emulation, didn’t have one growing up so haven’t revisited the library too much in adulthood. I had a lot of trouble getting everything working right as these early 3D titles seem to really struggle to look good on modern systems, and there were a ton of visual glitches and artifacts. I’m trying to use RetroArch as much as possible for emulation lately as I really enjoy having everything in one place, and also it’s got a great community and is super configurable. Plus, it’s available on like every platform so it’s easier to keep things together across all my different devices. There are a ton of options though, and many different cores and renderers, but I seemed to have found a way to get the best of all worlds. So here’s my final configuration that seems to have it looking about as best as it can get, and with minimal issues. I have bolded/italicized what I think are the more important compatibility options.

This is for the Beetle PSX HW core, running at 16x internal res with the widescreen hack enabled.

  • beetle_psx_hw_adaptive_smoothing = “disabled”
  • beetle_psx_hw_analog_calibration = “disabled”
  • beetle_psx_hw_analog_toggle = “disabled”
  • beetle_psx_hw_aspect_ratio = “corrected”
  • beetle_psx_hw_cd_access_method = “precache”
  • beetle_psx_hw_cd_fastload = “2x(native)”
  • beetle_psx_hw_core_timing_fps = “force_progressive”
  • beetle_psx_hw_cpu_dynarec = “disabled”
  • beetle_psx_hw_cpu_freq_scale = “100%(native)”
  • beetle_psx_hw_crop_overscan = “disabled”
  • beetle_psx_hw_depth = “32bpp”
  • beetle_psx_hw_display_internal_fps = “disabled”
  • beetle_psx_hw_display_vram = “disabled”
  • beetle_psx_hw_dither_mode = “internal resolution”
  • beetle_psx_hw_dump_textures = “disabled”
  • beetle_psx_hw_dynarec_eventcycles = “128”
  • beetle_psx_hw_dynarec_invalidate = “full”
  • beetle_psx_hw_enable_memcard1 = “enabled”
  • beetle_psx_hw_enable_multitap_port1 = “disabled”
  • beetle_psx_hw_enable_multitap_port2 = “disabled”
  • beetle_psx_hw_filter = “nearest”
  • beetle_psx_hw_filter_exclude_2d_polygon = “disable”
  • beetle_psx_hw_filter_exclude_sprite = “disable”
  • beetle_psx_hw_frame_duping = “disabled”
  • beetle_psx_hw_gpu_overclock = “1x(native)”
  • beetle_psx_hw_gte_overclock = “disabled”
  • beetle_psx_hw_gun_cursor = “cross”
  • beetle_psx_hw_gun_input_mode = “lightgun”
  • beetle_psx_hw_image_crop = “disabled”
  • beetle_psx_hw_image_offset = “disabled”
  • beetle_psx_hw_image_offset_cycles = “0”
  • beetle_psx_hw_initial_scanline = “0”
  • beetle_psx_hw_initial_scanline_pal = “0”
  • beetle_psx_hw_internal_resolution = “16x”
  • beetle_psx_hw_last_scanline = “239”
  • beetle_psx_hw_last_scanline_pal = “287”
  • beetle_psx_hw_line_render = “default”
  • beetle_psx_hw_mdec_yuv = “enabled”
  • beetle_psx_hw_memcard_left_index = “0”
  • beetle_psx_hw_memcard_right_index = “1”
  • beetle_psx_hw_mouse_sensitivity = “100%”
  • beetle_psx_hw_msaa = “1x”
  • beetle_psx_hw_negcon_deadzone = “0%”
  • beetle_psx_hw_negcon_response = “linear”
  • beetle_psx_hw_pal_video_timing_override = “disabled”
  • beetle_psx_hw_pgxp_2d_tol = “disabled”
  • beetle_psx_hw_pgxp_mode = “memory only”
  • beetle_psx_hw_pgxp_nclip = “disabled”
  • beetle_psx_hw_pgxp_texture = “enabled”
  • beetle_psx_hw_pgxp_vertex = “disabled”
  • beetle_psx_hw_renderer = “hardware_vk”
  • beetle_psx_hw_renderer_software_fb = “enabled”
  • beetle_psx_hw_replace_textures = “disabled”
  • beetle_psx_hw_scaled_uv_offset = “enabled”
  • beetle_psx_hw_shared_memory_cards = “disabled”
  • beetle_psx_hw_skip_bios = “disabled”
  • beetle_psx_hw_super_sampling = “disabled”
  • beetle_psx_hw_track_textures = “disabled”
  • beetle_psx_hw_use_mednafen_memcard0_method = “libretro”
  • beetle_psx_hw_widescreen_hack = “enabled”
  • beetle_psx_hw_wireframe = “disabled”

You can either manually set these settings in the RetroArch GUI options menus or plop them all at once into wherever your core config is stored, mine was at
C:\Users\Omar\AppData\Roaming\RetroArch\config\Beetle PSX HW\Beetle PSX HW.opt
or if you’re using ROM specific options, it’s in the same folder but is named ROM-name.opt
Some notes: some of this stuff is to taste, like 16x internal resolution and whether or not you want to use the widescreen hack (it works very well, though!). But the really critical thing is to make sure you’re using the Hardware Vulkan renderer, otherwise you will experience some extremely bad visual bugs whenever there are water effects or motion blur of any kind (as with the OpenGL renderer, see this issue on the core’s github). You should also make sure you have the software framebuffer enabled and have the PGXP mode set to “memory only.” This combination of settings has seemed to eliminate a good amount of the “wobble” of the textures in the game, has seemingly eliminated a weird bug I would get during cutscenes where half of the screen would be checkerboarded, and totally eliminated the water/blur issues. It also looks pretty good at 16x and is performant. I will say that there are some issues with textures on polygons having visible seams that pop in and out but I was not able to solve that with any settings, cores, or renderers other than running the game at native resolution, which I don’t want to do. If you’re having issues with the game, try running with these settings and then once you confirm they work well start changing them one by one until it suits your tastes.

I’ve also heard that the Duckstation core solves some of the problems if you want to try that core, but it required more than 0 effort to get it to start using my existing saves for the game so I didn’t spend any time on it since this config solved my problems.

Share on
Support the author with

omar saleem
WRITTEN BY
omar saleem
Software/DevOps Engineer