FPPS4/ps4_libscenptrophy.pas

196 lines
5.6 KiB
Plaintext
Raw Normal View History

2021-12-08 20:04:07 +00:00
unit ps4_libSceNpTrophy;
{$mode objfpc}{$H+}
interface
uses
ps4_program,
2022-05-31 07:20:10 +00:00
Classes,
SysUtils;
const
SCE_NP_TROPHY_NUM_MAX =(128);
SCE_NP_TROPHY_SCREENSHOT_TARGET_NUM_MAX=(4);
SCE_NP_TROPHY_GAME_TITLE_MAX_SIZE =(128);
SCE_NP_TROPHY_GAME_DESCR_MAX_SIZE =(1024);
SCE_NP_TROPHY_GROUP_TITLE_MAX_SIZE=(128);
SCE_NP_TROPHY_GROUP_DESCR_MAX_SIZE=(1024);
SCE_NP_TROPHY_NAME_MAX_SIZE =(128);
SCE_NP_TROPHY_DESCR_MAX_SIZE =(1024);
// grade
SCE_NP_TROPHY_GRADE_UNKNOWN =(0);
SCE_NP_TROPHY_GRADE_PLATINUM=(1);
SCE_NP_TROPHY_GRADE_GOLD =(2);
SCE_NP_TROPHY_GRADE_SILVER =(3);
SCE_NP_TROPHY_GRADE_BRONZE =(4);
type
SceNpTrophyHandle =Integer;
SceNpTrophyContext =Integer;
SceNpTrophyId =Integer;
SceNpTrophyGroupId =Integer;
SceNpTrophyGrade =Integer;
SceNpTrophyFlagMask=DWORD;
const
SCE_NP_TROPHY_INVALID_HANDLE =(-1);
SCE_NP_TROPHY_INVALID_CONTEXT =(-1);
SCE_NP_TROPHY_INVALID_TROPHY_ID =(-1);
SCE_NP_TROPHY_INVALID_GROUP_ID =(-2);
SCE_NP_TROPHY_BASE_GAME_GROUP_ID=(-1);
// trophy flag array
SCE_NP_TROPHY_FLAG_SETSIZE =(128);
SCE_NP_TROPHY_FLAG_BITS =(sizeof(SceNpTrophyFlagMask) * 8);
SCE_NP_TROPHY_FLAG_BITS_ALL =(High(SceNpTrophyFlagMask));
SCE_NP_TROPHY_FLAG_BITS_SHIFT=(5);
SCE_NP_TROPHY_FLAG_BITS_MASK =(SCE_NP_TROPHY_FLAG_BITS - 1);
SCE_NP_TROPHY_FLAG_BITS_MAX =(SCE_NP_TROPHY_FLAG_SETSIZE - 1);
type
pSceNpTrophyFlagArray=^SceNpTrophyFlagArray;
SceNpTrophyFlagArray=packed record
flagBits:array[0..(SCE_NP_TROPHY_FLAG_SETSIZE shr SCE_NP_TROPHY_FLAG_BITS_SHIFT)-1] of SceNpTrophyFlagMask;
end;
2021-12-08 20:04:07 +00:00
implementation
function ps4_sceNpTrophyCreateContext(context:PInteger;
2022-05-31 07:20:10 +00:00
userId:Integer;
serviceLabel:DWORD;
options:QWORD):Integer; SysV_ABI_CDecl;
2021-12-08 20:04:07 +00:00
begin
2022-06-03 22:23:50 +00:00
Writeln('sceNpTrophyCreateContext');
2021-12-08 20:04:07 +00:00
context^:=543;
Result:=0;
end;
function ps4_sceNpTrophyCreateHandle(handle:PInteger):Integer; SysV_ABI_CDecl;
begin
2022-06-03 22:23:50 +00:00
Writeln('sceNpTrophyCreateHandle');
2021-12-08 20:04:07 +00:00
handle^:=3333;
Result:=0;
end;
2022-05-31 07:20:10 +00:00
function ps4_sceNpTrophyDestroyHandle(handle:Integer):Integer; SysV_ABI_CDecl;
begin
2022-06-03 22:23:50 +00:00
Writeln('sceNpTrophyDestroyHandle:',handle);
2022-05-31 07:20:10 +00:00
Result:=0;
end;
2021-12-08 20:04:07 +00:00
function ps4_sceNpTrophyRegisterContext(context:Integer;
2022-05-31 07:20:10 +00:00
handle:Integer;
options:QWORD):Integer; SysV_ABI_CDecl;
2021-12-08 20:04:07 +00:00
begin
2022-06-03 22:23:50 +00:00
Writeln('sceNpTrophyRegisterContext:',handle);
2021-12-08 20:04:07 +00:00
Result:=0;
end;
2022-05-31 07:20:10 +00:00
function ps4_sceNpTrophyGetTrophyUnlockState(context:Integer;
handle:Integer;
flags:pSceNpTrophyFlagArray;
count:PDWORD):Integer; SysV_ABI_CDecl;
begin
2022-06-03 22:23:50 +00:00
Writeln('sceNpTrophyGetTrophyUnlockState:',handle);
2022-05-31 07:20:10 +00:00
Result:=0;
flags^:=Default(SceNpTrophyFlagArray);
count^:=0;
end;
function ps4_sceNpTrophyUnlockTrophy(context:Integer;
handle:Integer;
trophyId:Integer;
platinumId:PInteger):Integer; SysV_ABI_CDecl;
2021-12-08 20:04:07 +00:00
begin
2022-05-31 07:20:10 +00:00
Writeln('sceNpTrophyUnlockTrophy:',trophyId);
if (platinumId<>nil) then
begin
platinumId^:=SCE_NP_TROPHY_INVALID_TROPHY_ID;
end;
2021-12-08 20:04:07 +00:00
Result:=0;
end;
2022-06-02 19:07:03 +00:00
type
pSceNpTrophyGameDetails=^SceNpTrophyGameDetails;
SceNpTrophyGameDetails=packed record
size:QWORD;
numGroups :DWORD;
numTrophies:DWORD;
numPlatinum:DWORD;
numGold :DWORD;
numSilver :DWORD;
numBronze :DWORD;
title:array[0..SCE_NP_TROPHY_GAME_TITLE_MAX_SIZE-1] of Byte;
description:array[0..SCE_NP_TROPHY_GAME_DESCR_MAX_SIZE-1] of Byte;
end;
pSceNpTrophyGameData=^SceNpTrophyGameData;
SceNpTrophyGameData=packed record
size:QWORD;
unlockedTrophies :DWORD;
unlockedPlatinum :DWORD;
unlockedGold :DWORD;
unlockedSilver :DWORD;
unlockedBronze :DWORD;
progressPercentage:DWORD;
end;
function ps4_sceNpTrophyGetGameInfo(context:Integer;
handle:Integer;
details:pSceNpTrophyGameDetails;
data:pSceNpTrophyGameData):Integer; SysV_ABI_CDecl;
begin
2022-06-03 22:23:50 +00:00
Writeln('sceNpTrophyGetGameInfo:',handle);
if (details<>nil) then
begin
details^.numGroups :=0;
details^.numTrophies:=0;
details^.numPlatinum:=0;
details^.numGold :=0;
details^.numSilver :=0;
details^.numBronze :=0;
FillChar(details^.title,SizeOf(details^.title),0);
FillChar(details^.description,SizeOf(details^.description),0);
end;
2022-06-02 19:07:03 +00:00
Result:=0;
end;
function ps4_sceNpTrophyGetGameIcon(context:Integer;
handle:Integer;
buffer:Pointer;
size:PQWORD):Integer; SysV_ABI_CDecl;
begin
2022-06-03 22:23:50 +00:00
Writeln('sceNpTrophyGetGameIcon:',handle);
size^:=0;
2022-06-02 19:07:03 +00:00
Result:=0;
end;
2021-12-08 20:04:07 +00:00
function Load_libSceNpTrophy(Const name:RawByteString):TElf_node;
var
lib:PLIBRARY;
begin
Result:=TElf_node.Create;
Result.pFileName:=name;
lib:=Result._add_lib('libSceNpTrophy');
lib^.set_proc($5DB9236E86D99426,@ps4_sceNpTrophyCreateContext);
lib^.set_proc($ABB53AB440107FB7,@ps4_sceNpTrophyCreateHandle);
lib^.set_proc($18D705E2889D6346,@ps4_sceNpTrophyDestroyHandle);
2022-05-31 07:20:10 +00:00
lib^.set_proc($4C9080C6DA3D4845,@ps4_sceNpTrophyRegisterContext);
lib^.set_proc($2C7B9298EDD22DDF,@ps4_sceNpTrophyGetTrophyUnlockState);
lib^.set_proc($DBCC6645415AA3AF,@ps4_sceNpTrophyUnlockTrophy);
2022-06-02 19:07:03 +00:00
lib^.set_proc($6183F77F65B4F688,@ps4_sceNpTrophyGetGameInfo);
lib^.set_proc($1CBC33D5F448C9C0,@ps4_sceNpTrophyGetGameIcon);
2021-12-08 20:04:07 +00:00
end;
initialization
ps4_app.RegistredPreLoad('libSceNpTrophy.prx',@Load_libSceNpTrophy);
end.