-- Prisoner of War
-- Widescreen switcher by Stayhye
-- Widescreen codes from PCSX2 forums
-- ported to PS4 lua
-- emu used=psycho v1
apiRequest(1.0)
local gpr = require("ee-gpr-alias")
local emuObj = getEmuObject()
local eeObj = getEEObject()
local iopObj = getIOPObject()
emuObj.SetDisplayAspectWide()
local patcher = function()
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
if (R3 ~= 0 and LEFT ~= 0) then --
--16:9
eeObj.WriteMem32(0x0039c3dc,0x0c1127e8) --3c013f80
eeObj.WriteMem32(0x0039c3e0,0x00000000) --4481a000
eeObj.WriteMem32(0x00449fa0,0x3c013f40) --00000000 hor fov
eeObj.WriteMem32(0x00449fa8,0x4481a000) --00000000
eeObj.WriteMem32(0x00449fac,0x46146b42) --00000000
eeObj.WriteMem32(0x00449fb0,0x4614a503) --00000000
eeObj.WriteMem32(0x00449fb4,0x03e00008) --00000000
eeObj.WriteMem32(0x0013e6fc,0x3c0140c0) --3c013f99 renderfix
eeObj.WriteMem32(0x001a6b60,0x3c013f2b) --3c013f00 renderfix
emuObj.SetDisplayAspectWide()
end
if (R3 ~= 0 and RIGHT ~= 0) then --
--4:3
eeObj.WriteMem32(0x0039c3dc,0x3c013f80) --3c013f80
eeObj.WriteMem32(0x0039c3e0,0x4481a000) --4481a000
eeObj.WriteMem32(0x00449fa0,0x00000000) --00000000 hor fov
eeObj.WriteMem32(0x00449fa8,0x00000000) --00000000
eeObj.WriteMem32(0x00449fac,0x00000000) --00000000
eeObj.WriteMem32(0x00449fb0,0x00000000) --00000000
eeObj.WriteMem32(0x00449fb4,0x00000000) --00000000
eeObj.WriteMem32(0x0013e6fc,0x3c013f99) --3c013f99 renderfix
eeObj.WriteMem32(0x001a6b60,0x3c013f00) --3c013f00 renderfix
emuObj.SetDisplayAspectNormal()
end
if (L3 ~= 0 and RIGHT ~= 0) then --
--4:3 Stretched
eeObj.WriteMem32(0x0039c3dc,0x3c013f80) --3c013f80
eeObj.WriteMem32(0x0039c3e0,0x4481a000) --4481a000
eeObj.WriteMem32(0x00449fa0,0x00000000) --00000000 hor fov
eeObj.WriteMem32(0x00449fa8,0x00000000) --00000000
eeObj.WriteMem32(0x00449fac,0x00000000) --00000000
eeObj.WriteMem32(0x00449fb0,0x00000000) --00000000
eeObj.WriteMem32(0x00449fb4,0x00000000) --00000000
eeObj.WriteMem32(0x0013e6fc,0x3c013f99) --3c013f99 renderfix
eeObj.WriteMem32(0x001a6b60,0x3c013f00) --3c013f00 renderfix
emuObj.SetDisplayAspectWide()
end
if (L3 ~= 0 and LEFT ~= 0) then --
--16:10
eeObj.WriteMem32(0x0039c3dc,0x0c1127e8) --3c013f80
eeObj.WriteMem32(0x0039c3e0,0x00000000) --4481a000
eeObj.WriteMem32(0x00449fa0,0x3c013f55) --00000000 hor fov
eeObj.WriteMem32(0x00449fa4,0x34215555) --00000000
eeObj.WriteMem32(0x00449fa8,0x4481a000) --00000000
eeObj.WriteMem32(0x00449fac,0x46146b42) --00000000
eeObj.WriteMem32(0x00449fb0,0x4614a503) --00000000
eeObj.WriteMem32(0x00449fb4,0x03e00008) --00000000
eeObj.WriteMem32(0x0013e6fc,0x3c0140a0) --3c013f99 renderfix
eeObj.WriteMem32(0x001a6b60,0x3c013f1a) --3c013f00 renderfix
emuObj.SetDisplayAspectWide()
end
--All Secrets by Codejunkies
eeObj.WriteMem32(0x0068DE00,0x00000001) -- 2
eeObj.WriteMem32(0x0068DE04,0x00000001) -- 2
eeObj.WriteMem32(0x0068DE08,0x00000001) -- 2
eeObj.WriteMem32(0x0068DE0C,0x00000001)
eeObj.WriteMem32(0x0068DE10,0x00000001)
eeObj.WriteMem32(0x0068DE14,0x00000001)
--Unlock 2nd Level by Codejunkies
eeObj.WriteMem32(0x00683E11,0x00000003)
--Unlock 3rd Level by Codejunkies
eeObj.WriteMem32(0x00683E7A,0x00000003)
--Unlock 4th Level by Codejunkies
eeObj.WriteMem32(0x00683EE3,0x00000003)
--Unlock 5th Level by Codejunkies
eeObj.WriteMem32(0x00683F4C,0x00000003)
emuObj.ThrottleMax()
end
emuObj.AddVsyncHook(patcher)