Stayhye
Senior Member
Hi friends. Very new to the PS4 scene, but have a background in software dev.
Trying to figure out if a solution is plausible here.
I'm wanting to create a shared memory card across four specific games. The games are all standalone (not multi-disc), but you migrate your save data at the end of each to the next. The games are Dot Hack Infection, Mutation, Outbreak, and Quarantine.
Using them under a multi-disc doesn't work since none of them prompt or attempt to read from a few disk. That I can see, trying to have them use the same game ID will not work either (they'll install over each other).
The only solution I can see at this point is having the first in sequence be it's own game, untouched, but for the 2, 3, and 4 -- you'd want to symlink their memory cards to the 1's. In that scenario, the games wouldn't really know any better and just naively read from file -- located elsewhere -- and thus, see one another's save files.
Is this within the capabilities of the scene?
This is all that is know as of now in an official config for Jak X
Code:
--=============================================== WBD added 11/9/2017
--[[ MEMORY CARD SAVE GAME DETECTION to unlock stuff
If save games exist for Jak TPL, Jak II, Jak 3 or Ratchet Remastered, the following
drivers are unlocked (respectively)...
Jak One, Jak II, Jak 3 and Ratchet
Whereas the original game scans for other games' folders on the current memory card, this method
uses a Lua function to detect the presence of SaveData for the other games on the PS4.
This scan is initiated when the game starts up.
--]]
local pUnlockBits = 0x284160
local ScanForSaveGames = function()
if (eeObj.GetGpr(gpr.a0) == 1) then
local bits = eeObj.ReadMem32(pUnlockBits) -- location of flags stored by Jak X when one of the 4
-- other games were detected
print(string.format("_NOTE: Scan For Save Games: bits = %x", bits))
if (emuObj.TestSaveDataTransfer(0 , "CUSA02522", "SCUS-97124", "a2e2d012bd77960580db251b88ac61f634c1778775f74f7e57c81a896f707088")) then
print "_NOTE: JAK TPL US found"
bits = bits | 1
elseif (emuObj.TestSaveDataTransfer(0 , "CUSA08427", "SCPS-56003", "346afbbdf1c359ac4dc9387e902df64843881baaad6cb4dda3393bfad1c2fac3")) then
print "_NOTE: JAK TPL KO found"
bits = bits | 1
elseif (emuObj.TestSaveDataTransfer(0 , "CUSA07934", "SCES-50361", "a161e17ccbbc19fd21427dd94e17c67ecd7fa0157e7808d770c25865ba946a74")) then
print "_NOTE: JAK TPL EU found"
bits = bits | 1
elseif (emuObj.TestSaveDataTransfer(0 , "CUSA02541", "SCPS-15021", "84b900dc98fbb829d09b0f0a3695164365760d292d8f15a3dcee1e15afd05ee8")) then
print "_NOTE: JAK TPL JP found"
bits = bits | 1
end
if (emuObj.TestSaveDataTransfer(0 , "CUSA07840", "SCUS-97265", "5564800b707d31cf36d0bfc3624a04b86aab257efad99153f310c4f649933696")) then
print "_NOTE: JAK II US found"
bits = bits | 2
elseif (emuObj.TestSaveDataTransfer(0 , "CUSA07990", "SCES-51608" , "ec0d150721933c7e310eeddbeee04908dce7df1b6e66cbd47f4ddfdf6d197217")) then
print "_NOTE: JAK II EU found"
bits = bits | 2
elseif (emuObj.TestSaveDataTransfer(0 , "CUSA08422", "SCKA-20010", "2518b3a83feee1d0047b022d0f90f5d84899c05d397f912d8a154be8c9f8ef93")) then
print "_NOTE: JAK II KO found"
bits = bits | 2
elseif (emuObj.TestSaveDataTransfer(0 , "CUSA08581", "SCPS-15057", "2ee3e08c465e19891b81ae29ca6d0f0e6fc600a7171ee8e6a5a1d19efe186900")) then
print "_NOTE: JAK II JPv1 found"
bits = bits | 2
elseif (emuObj.TestSaveDataTransfer(0 , "CUSA12345", "SCPS-15057", "2ee3e08c465e19891b81ae29ca6d0f0e6fc600a7171ee8e6a5a1d19efe186900")) then
print "_NOTE: JAK II JPv2 found"
bits = bits | 2
end
if (emuObj.TestSaveDataTransfer(0 , "CUSA07841", "SCUS-97330", "cadc71cbaeece328b9a5b108813af32d30c5dcc2244a2a53ee2261a18b743fb5")) then
print "_NOTE: JAK 3 US found"
bits = bits | 4
elseif (emuObj.TestSaveDataTransfer(0 , "CUSA07991", "SCES-52460" , "32a8025cdd6a6432409ae0efe9e67af3dad84667d5a494ebed4fb7348a2b4be4")) then
print "_NOTE: JAK 3 EU found"
bits = bits | 4
elseif (emuObj.TestSaveDataTransfer(0 , "CUSA08423", "SCKA-20040", "71a4a1188586634b3fe293f1f00f1ef1ac0b1c263bb368a54f6425bf412c710d")) then
print "_NOTE: JAK 3 KO found"
bits = bits | 4
end
if (emuObj.TestSaveDataTransfer(0 , "CUSA01047", "rcps4" , "b81e356bc97bc3fd25254dd8af368ed1d3887d727a3452a240e61a2146c2ed8f")) then
print "_NOTE: RATCHET US found"
bits = bits | 8
elseif (emuObj.TestSaveDataTransfer(0 , "CUSA01073", "rcps4" , "b81e356bc97bc3fd25254dd8af368ed1d3887d727a3452a240e61a2146c2ed8f")) then
print "_NOTE: RATCHET EU found"
bits = bits | 8
elseif (emuObj.TestSaveDataTransfer(0 , "CUSA01686", "rcps4" , "b81e356bc97bc3fd25254dd8af368ed1d3887d727a3452a240e61a2146c2ed8f")) then
print "_NOTE: RATCHET JP found"
bits = bits | 8
elseif (emuObj.TestSaveDataTransfer(0 , "CUSA01928", "rcps4" , "b81e356bc97bc3fd25254dd8af368ed1d3887d727a3452a240e61a2146c2ed8f")) then
print "_NOTE: RATCHET UK found"
bits = bits | 8
elseif (emuObj.TestSaveDataTransfer(0 , "CUSA02020", "rcps4" , "b81e356bc97bc3fd25254dd8af368ed1d3887d727a3452a240e61a2146c2ed8f")) then
print "_NOTE: RATCHET HPv1 found"
bits = bits | 8
elseif (emuObj.TestSaveDataTransfer(0 , "CUSA02772", "rcps4" , "b81e356bc97bc3fd25254dd8af368ed1d3887d727a3452a240e61a2146c2ed8f")) then
print "_NOTE: RATCHET HPv2 found"
bits = bits | 8
end
eeObj.WriteMem32(pUnlockBits, bits)
end
end
--NEW METHOD PSP
--[[ In the original game, connecting to a PSP with Daxter on it caused 4 drivers and a vehicle to
be unlocked. We are replacing that with detecting a save game for The Drake Collection.
The Drake Collection creates save data files with different Dir names for each title in the
collection. Uncharted 1 = SAVEDATA010, Uncharted 2 = SAVEDATA020 and Uncharted 3 = SAVEDATA030
The presence of any one of these save game files will unlock OSMO, TARYN, KAEDEN, XIMON and the
DAXTERMOBILE.
--]]
local ScanForDrakeCollection = function()
print "_NOTE: Testing for Drake Collection"
if (emuObj.TestSaveDataTransfer(0 , "CUSA02320", "SAVEDATA010", "1cd7bb45e022a1963a0c51c4c82fb493a9355c7deb4ff0a98456fc701398cb6a")) then
print "_NOTE: Drake Collection (DC1) US found"
eeObj.SetGpr(gpr.a1, 1) -- this will cause the 4 drivers and daxtermobile to unlock
elseif (emuObj.TestSaveDataTransfer(0 , "CUSA02320", "SAVEDATA020", "1cd7bb45e022a1963a0c51c4c82fb493a9355c7deb4ff0a98456fc701398cb6a")) then
print "_NOTE: Drake Collection (DC2) US found"
eeObj.SetGpr(gpr.a1, 1) -- this will cause the 4 drivers and daxtermobile to unlock
elseif (emuObj.TestSaveDataTransfer(0 , "CUSA02320", "SAVEDATA030", "1cd7bb45e022a1963a0c51c4c82fb493a9355c7deb4ff0a98456fc701398cb6a")) then
print "_NOTE: Drake Collection (DC3) US found"
eeObj.SetGpr(gpr.a1, 1) -- this will cause the 4 drivers and daxtermobile to unlock
elseif (emuObj.TestSaveDataTransfer(0 , "CUSA02343", "SAVEDATA010", "1cd7bb45e022a1963a0c51c4c82fb493a9355c7deb4ff0a98456fc701398cb6a")) then
print "_NOTE: Drake Collection EUv1 (DC1) found"
eeObj.SetGpr(gpr.a1, 1) -- this will cause the 4 drivers and daxtermobile to unlock
elseif (emuObj.TestSaveDataTransfer(0 , "CUSA02343", "SAVEDATA020", "1cd7bb45e022a1963a0c51c4c82fb493a9355c7deb4ff0a98456fc701398cb6a")) then
print "_NOTE: Drake Collection EUv1 (DC2) found"
eeObj.SetGpr(gpr.a1, 1)
elseif (emuObj.TestSaveDataTransfer(0 , "CUSA02343", "SAVEDATA030", "1cd7bb45e022a1963a0c51c4c82fb493a9355c7deb4ff0a98456fc701398cb6a")) then
print "_NOTE: Drake Collection EUv1 (DC3) found"
eeObj.SetGpr(gpr.a1, 1)
elseif (emuObj.TestSaveDataTransfer(0 , "CUSA02344", "SAVEDATA010", "1cd7bb45e022a1963a0c51c4c82fb493a9355c7deb4ff0a98456fc701398cb6a")) then
print "_NOTE: Drake Collection EUv2 (DC1) found"
eeObj.SetGpr(gpr.a1, 1)
elseif (emuObj.TestSaveDataTransfer(0 , "CUSA02344", "SAVEDATA020", "1cd7bb45e022a1963a0c51c4c82fb493a9355c7deb4ff0a98456fc701398cb6a")) then
print "_NOTE: Drake Collection EUv2 (DC2) found"
eeObj.SetGpr(gpr.a1, 1)
elseif (emuObj.TestSaveDataTransfer(0 , "CUSA02344", "SAVEDATA030", "1cd7bb45e022a1963a0c51c4c82fb493a9355c7deb4ff0a98456fc701398cb6a")) then
print "_NOTE: Drake Collection EUv2 (DC3) found"
eeObj.SetGpr(gpr.a1, 1)
elseif (emuObj.TestSaveDataTransfer(0 , "CUSA02826", "SAVEDATA010", "1cd7bb45e022a1963a0c51c4c82fb493a9355c7deb4ff0a98456fc701398cb6a")) then
print "_NOTE: Drake Collection EUv2 (DC1) found"
eeObj.SetGpr(gpr.a1, 1)
elseif (emuObj.TestSaveDataTransfer(0 , "CUSA02826", "SAVEDATA020", "1cd7bb45e022a1963a0c51c4c82fb493a9355c7deb4ff0a98456fc701398cb6a")) then
print "_NOTE: Drake Collection EUv3 (DC2) found" -- this will cause the 4 drivers and daxtermobile to unlock
eeObj.SetGpr(gpr.a1, 1)
elseif (emuObj.TestSaveDataTransfer(0 , "CUSA02826", "SAVEDATA030", "1cd7bb45e022a1963a0c51c4c82fb493a9355c7deb4ff0a98456fc701398cb6a")) then
print "_NOTE: Drake Collection EUv3 (DC3) found"
eeObj.SetGpr(gpr.a1, 1)
elseif (emuObj.TestSaveDataTransfer(0 , "CUSA01399", "SAVEDATA010", "1cd7bb45e022a1963a0c51c4c82fb493a9355c7deb4ff0a98456fc701398cb6a")) then
print "_NOTE: Drake Collection (DC1) KO found"
eeObj.SetGpr(gpr.a1, 1)
elseif (emuObj.TestSaveDataTransfer(0 , "CUSA01399", "SAVEDATA020", "1cd7bb45e022a1963a0c51c4c82fb493a9355c7deb4ff0a98456fc701398cb6a")) then
print "_NOTE: Drake Collection (DC2) KO found"
eeObj.SetGpr(gpr.a1, 1)
elseif (emuObj.TestSaveDataTransfer(0 , "CUSA01399", "SAVEDATA030", "1cd7bb45e022a1963a0c51c4c82fb493a9355c7deb4ff0a98456fc701398cb6a")) then
print "_NOTE: Drake Collection (DC3) KO found"
eeObj.SetGpr(gpr.a1, 1) -- this will cause the 4 drivers and daxtermobile to unlock
elseif (emuObj.TestSaveDataTransfer(0 , "CUSA01398", "SAVEDATA010", "1cd7bb45e022a1963a0c51c4c82fb493a9355c7deb4ff0a98456fc701398cb6a")) then
print "_NOTE: Drake Collection (DC1) JP found"
eeObj.SetGpr(gpr.a1, 1) -- this will cause the 4 drivers and daxtermobile to unlock
elseif (emuObj.TestSaveDataTransfer(0 , "CUSA01398", "SAVEDATA020", "1cd7bb45e022a1963a0c51c4c82fb493a9355c7deb4ff0a98456fc701398cb6a")) then
print "_NOTE: Drake Collection (DC2) JP found"
eeObj.SetGpr(gpr.a1, 1) -- this will cause the 4 drivers and daxtermobile to unlock
elseif (emuObj.TestSaveDataTransfer(0 , "CUSA01398", "SAVEDATA030", "1cd7bb45e022a1963a0c51c4c82fb493a9355c7deb4ff0a98456fc701398cb6a")) then
print "_NOTE: Drake Collection (DC3) JP found"
eeObj.SetGpr(gpr.a1, 1) -- this will cause the 4 drivers and daxtermobile to unlock
end
end
--eeOverlay.AddPostHook("lobby-secrets.main", (0x13e8fd8-0x13e8ef0), 0x7fb20020, ScanForSaveGames)
eeObj.AddHook(0x2714dc, 0xae00014c, ScanForSaveGames)
eeOverlay.AddPostHook("lobby-secrets.main", (0x13e93f0-0x13e8ef0), 0x24030000, ScanForDrakeCollection)
This appears to do something close to what you are asking..