PS4 [Research]PS2 emulator configuration on PS4

Though it could do with some fixes. Mainly you can dissappear into a wall when you do a strike and can't get out. But still runs full speed besides some of the glitches in game
 
Final fix for Metal Gear Solid 3 Subsistence NTSC(3 discs)
CLI
Code:
--gs-uprender=2x2
--gs-upscale=EdgeSmooth

--ee-context-switch-cycles=2700 #*
--ee-cycle-scalar=0.1

--iop-cycle-scalar=0.1

--vu1-mpg-cycles=700

--framelimiter=1
--framelimit-fps=15.0
--framelimit-scalar=2.1

#emu used=star ocean v2
TXT
Code:
--path-snaps="/tmp/snapshots"
--path-recordings="/tmp/recordings"
--path-vmc="/tmp/vmc"
--path-emulog="/tmp/recordings"
--config-local-lua=""
--load-tooling-lua=0
--path-patches="/app0/patches"
--path-trophydata="/app0/trophy_data"
--path-featuredata="/app0/feature_data"
--path-toolingscript="/app0/patches"
--ps2-title-id=SLUS-21359
--max-disc-num=3       #3 disc collection

--pad-record=0
--host-audio=1
--rom="PS20220WD20050620.crack"
--ps2-lang=system
--verbose-cdvd-reads=0
--host-osd=0
LUA
Code:
-- Metal Gear Solid 3 - Subsistence (SLUS_21359)
-- Widescreen hack by No.47
-- 30 FPS/Speed Fix by applepiejr @PCSX2 Forums
-- ported to PS4 LUA
-- emu used=star ocean v2

local gpr = require("ee-gpr-alias")

apiRequest(1.3)

local eeObj = getEEObject()
local emuObj = getEmuObject()

local patcher = function()
-- Force 30 FPS
eeObj.WriteMem32(0x001D5AD8,0x00000040) -- 40=30fps / 00=60fps / 20=15 or20fps? <camera>
eeObj.WriteMem32(0x001D6DB8,0x00000002) -- 01=60fps / 02=30fps / 3=20fps / 4=16.67fps? <cut-scenes/fmv>
eeObj.WriteMem32(0x001D6DBC,0x00000001) -- 0=double speed / 1=normal speed <gameplay>
-- 480p 512x448
eeObj.WriteMem32(0x201741F4,0x3C050000)
eeObj.WriteMem32(0x201741F8,0xFFB20020)
eeObj.WriteMem32(0x201741FC,0x3C060050)
eeObj.WriteMem32(0x20174200,0xFFB10010)
eeObj.WriteMem32(0x20174204,0x3C070001)
-- REMOVES MOST OF THEM, BUT SOME ARE NOW RED?
-- Remove Black Bars
local code_check = eeObj.ReadMem16(0x25E1CC)
if code_check == 0x0000 then
eeObj.WriteMem32(0x2025E6A4,0x00000000)
end
local code_check = eeObj.ReadMem16(0x20B3FC)
if code_check == 0x0001 then
eeObj.WriteMem32(0x2025E6A4,0x00000000)
end
local code_check = eeObj.ReadMem16(0x214D80)
if code_check == 0x0001 then
eeObj.WriteMem32(0x2025E6A4,0x00000000)
end
local code_check = eeObj.ReadMem16(0x214D70)
if code_check == 0x0001 then
eeObj.WriteMem32(0x2025E6A4,0x00000000)
end
----16:9---//Widescreen water fix
eeObj.WriteMem32(0x202050AC,0x3F400000)

local code_check = eeObj.ReadMem16(0x4CCD42)
if code_check == 0x3F80 then
eeObj.WriteMem32(0x204CCD40,0x3FAB0000)
eeObj.WriteMem32(0x204CCD44,0x3F400000)
eeObj.WriteMem32(0x204CCD4C,0xBFAB0000)
end
local code_check = eeObj.ReadMem16(0x580CE2)
if code_check == 0x3F80 then
eeObj.WriteMem32(0x20580CE0,0x3FAB0000)
eeObj.WriteMem32(0x20580CE4,0x3F400000)
eeObj.WriteMem32(0x20580CEC,0xBFAB0000)
end
local code_check = eeObj.ReadMem16(0x591C72)
if code_check == 0x3F80 then
eeObj.WriteMem32(0x20591C70,0x3FAB0000)
eeObj.WriteMem32(0x20591C74,0x3F400000)
eeObj.WriteMem32(0x20591C7C,0xBFAB0000)
end
local code_check = eeObj.ReadMem16(0x599C12)
if code_check == 0x3F80 then
eeObj.WriteMem32(0x20599C10,0x3FAB0000)
eeObj.WriteMem32(0x20599C14,0x3F400000)
eeObj.WriteMem32(0x20599C1C,0xBFAB0000)
end
local code_check = eeObj.ReadMem16(0x4A14D2)
if code_check == 0x3F80 then
eeObj.WriteMem32(0x204A14D0,0x3FAB0000)
eeObj.WriteMem32(0x204A14D4,0x3F400000)
eeObj.WriteMem32(0x204A14DC,0xBFAB0000)
end
local code_check = eeObj.ReadMem16(0x557CFA)
if code_check == 0x3F80 then
eeObj.WriteMem32(0x20557CF8,0x3FAB0000)
eeObj.WriteMem32(0x20557CFC,0x3F400000)
eeObj.WriteMem32(0x20557D04,0xBFAB0000)
end
local code_check = eeObj.ReadMem16(0x4B7082)
if code_check == 0x3F80 then
eeObj.WriteMem32(0x204B7080,0x3FAB0000)
eeObj.WriteMem32(0x204B7084,0x3F400000)
eeObj.WriteMem32(0x204B708C,0xBFAB0000)
end

emuObj.ThrottleMax()
end

emuObj.AddVsyncHook(patcher)

emuObj.SetDisplayAspectWide()

-- Fix shadow
emuObj.SetGsTitleFix( "forceSimpleFetch", "reserved", { texMode=1  } )

Improved Widescreen code. Supposed to correct water effect when widescreen is applied. Found @PCSX2 forums, converted to LUA. Works great! Added all 3 discs to collection and all work great so far! fPKG is about 10~ GB
Ok, was play it 2 hours and here my total review!
Videos withouth bars cool idea, just have graphical bugs but not much! When u skip cutscenes it was never crash, so u can skip long cutscenes and dont worry about anything! Game runs smoothly. Now bad sides: Micro freezes while gameplay (rare) and cutscenes (most). Game also will give you black screen, but it happen only when snake talk on radio. It happen most time when u try quick skip alot dialogs! So if game show you black screen, that mean u need read all dialogs and dont skip anything! Only once game was crash (at night misson), so looks like rare crashs still will be! Now looks like this version is more stable for play! Later i try check configs by @Kugozx, but i think star ocean better for this game then eternal ring! Hope my review help to someone! Do more saves as you can..

 
Last edited:
Is there a way to remap buttons? In my case I want to remap the annoying touchpad click on the right side to the real start/options button on the DS4. There is this lua "module" pad-and-key.lua that should do the trick. Has anyone succeeded in using a custom pad config?
 
Is there a way to remap buttons? In my case I want to remap the annoying touchpad click on the right side to the real start/options button on the DS4. There is this lua "module" pad-and-key.lua that should do the trick. Has anyone succeeded in using a custom pad config?
i have lua file but only for psx games! It make options button as start, and touch bar as select
 
Is there a way to remap buttons? In my case I want to remap the annoying touchpad click on the right side to the real start/options button on the DS4. There is this lua "module" pad-and-key.lua that should do the trick. Has anyone succeeded in using a custom pad config?
Code:
local pad_bits  = emuObj.GetPad()
  local UP  = pad_bits &  0x0010
  local DOWN  = pad_bits &  0x0040
  local LEFT  = pad_bits &  0x0080
  local RIGHT  = pad_bits &  0x0020
  local Triangle  = pad_bits &  0x1000
  local Cross  = pad_bits &  0x4000
  local Square  = pad_bits &  0x8000
  local Circle  = pad_bits &  0x2000
  local L1  = pad_bits &  0x0400
  local L2  = pad_bits &  0x0100
  local L3  = pad_bits &  0x0002
  local R1  = pad_bits &  0x0800
  local R2  = pad_bits &  0x0200
  local R3  = pad_bits &  0x0004
  local Select  = pad_bits &  0x0001
  local Start  = pad_bits &  0x0008

This can be modified in LUA to give you whatever button maps you want.
 
I've got tested all Games they are:
-ALMOST PERFECT:
  • ACE COMBAT 7
  • Ace lightning
  • Baldurs gate dark alliance
  • Big mutha truckers
  • Cars
  • Cars Mater national championship
  • Dino stalker
  • Driven
  • Hello kitty roller rescue
  • Lord of the rings, The - Return of the King
  • Winter sports
-MINOR ISSUES BUT PLAYABLE:
  • 007 nightfire
  • Alone in the dark 4
  • Pacman world 2 (US/EU)
  • Puyo Pop Fever
-MAJOR ISSUES BUT UNPLAYABLE:
  • Driver 3 (US/EU): Many Graphic Glitches and Heavy Slowdown.
  • Driver 4 - Parallel Lines (US/EU): Many Graphic Glitches and Heavy Slowdown.
  • Pacman world 2 (JP)
-BOOTS BUT YOU'LL FAIL WHILE GETTING INGAME:
  • Barn-Yard
  • Call of duty big red one
  • Driver 3 (JP): Heavy frameskipping. Everytime the game has many glitches that makes this unplayable.
-DOESN'T EVEN BOOT UP:
  • Driver 4 - Parallel Lines (JP): Unhandled PageFault Error Message.
 
@Vika23 how you achieved to go to the open world in Scarface?. I tested many configs but all crashes the game at the final of the first mission
Try this, it fix crash for me
--lopnor-config=1
--vu0-opt-flags=2
--vu1-opt-flags=2
--vu1-mpg-cycles=2000
--vu1-injection=0
--vu0-jr-cache-policy=newprog
--vu0-jalr-cache-policy=newprog
--vu1-jr-cache-policy=newprog
--vu1-jalr-cache-policy=newprog

use lopnor option if u use config from ps3
 
Code:
local pad_bits  = emuObj.GetPad()
  local UP  = pad_bits &  0x0010
  local DOWN  = pad_bits &  0x0040
  local LEFT  = pad_bits &  0x0080
  local RIGHT  = pad_bits &  0x0020
  local Triangle  = pad_bits &  0x1000
  local Cross  = pad_bits &  0x4000
  local Square  = pad_bits &  0x8000
  local Circle  = pad_bits &  0x2000
  local L1  = pad_bits &  0x0400
  local L2  = pad_bits &  0x0100
  local L3  = pad_bits &  0x0002
  local R1  = pad_bits &  0x0800
  local R2  = pad_bits &  0x0200
  local R3  = pad_bits &  0x0004
  local Select  = pad_bits &  0x0001
  local Start  = pad_bits &  0x0008

This can be modified in LUA to give you whatever button maps you want.

Do you have a working config for that? So when Select is pressed it should actually simulate the Start button (0x0008).
You can trigger another function with GetPad() to run cheats and stuff like that when Select (or any other button) is pressed. But I need to trigger or send the corresponding bits of the Start button. Is there a way to achieve this? The only function that seems to do something similar is PadPressureStickRemap().
 
Also my old big test if u are interesting
The blue "textures" of death :hopelessness: I love Scarface, but this just ruins it for me. First I thought it's a mipmapping problem, but I guess I checked every possible config concerning mipmap. Still nothing. We need this game on PS4...
 

Similar threads

Back
Top