Difference between revisions of "ScePaf"
Jump to navigation
Jump to search
Devnoname120 (talk | contribs) (Swapped Module <-> Library, see revision 1.1 under "Revision History" of "Vita SDK specifications" (https://wiki.henkaku.xyz/vita/File:Vita_SDK_specifications.pdf)) |
|||
(31 intermediate revisions by 3 users not shown) | |||
Line 1: | Line 1: | ||
+ | Much of this page is wrong because much of the PAF is written in C++. | ||
+ | |||
+ | But it works as a "function". | ||
+ | |||
== Module == | == Module == | ||
− | + | <code>ScePaf</code> is a C++ runtime. | |
+ | |||
+ | Quick note on reversing. This module has many vtables that point to exported functions. | ||
+ | |||
+ | It would be great to start from marking which function belongs to which vtable. | ||
+ | |||
+ | This way we can restore initial class structure. | ||
+ | |||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
− | ! Version !! Name !! World !! Privilege | + | ! Version !! Name !! World !! Privilege |
|- | |- | ||
− | | 1.69 || ScePaf || Non-secure || User | + | | 1.69-3.73 || ScePaf || Non-secure || User |
|} | |} | ||
Line 16: | Line 27: | ||
|- | |- | ||
! Version !! Name !! World !! Visibility !! NID | ! Version !! Name !! World !! Visibility !! NID | ||
+ | |- | ||
+ | | 3.60 || ScePafLowlayer || Non-secure || User || 0x2342266A | ||
+ | |- | ||
+ | | 3.60 || ScePafStdc || Non-secure || User || 0xA7D28DAE | ||
+ | |- | ||
+ | | 3.60 || ScePafMisc || Non-secure || User || 0x3D643CE8 | ||
+ | |- | ||
+ | | 3.60 || ScePafCommon || Non-secure || User || 0x3C1965CD | ||
+ | |- | ||
+ | | 3.60 || ScePafGraphics || Non-secure || User || 0xA070D6A7 | ||
+ | |- | ||
+ | | 3.60 || ScePafThread || Non-secure || User || 0x54276D19 | ||
+ | |- | ||
+ | | 3.60 || ScePafResource || Non-secure || User || 0x2836DC9B | ||
+ | |- | ||
+ | | 3.60 || ScePafToplevel || Non-secure || User || 0x4D9A9DD0 | ||
+ | |- | ||
+ | | 3.60 || ScePafWidget || Non-secure || User || 0x073F8C68 | ||
+ | |} | ||
+ | |||
+ | == Types == | ||
+ | |||
+ | <source lang="C"> | ||
+ | typedef struct ScePafSha1Context { // size is 0x68 | ||
+ | uint32_t h[5]; | ||
+ | char unk[0x54]; | ||
+ | } ScePafSha1Context; | ||
+ | |||
+ | typedef struct ScePafDateTime { | ||
+ | SceDateTime data; | ||
+ | int data_0x10; | ||
+ | int data_0x14; | ||
+ | } ScePafDateTime; | ||
+ | |||
+ | typedef struct ScePafHeapContext { // size is 0x60 | ||
+ | void *vtable; | ||
+ | void *heap; | ||
+ | void *membase; | ||
+ | SceSize size; | ||
+ | char name[0x20]; | ||
+ | SceBool is_import_membase; | ||
+ | char data_0x30[3]; | ||
+ | int data_0x34; | ||
+ | SceKernelLwMutexWork lw_mtx; | ||
+ | SceUID memblk_id; | ||
+ | int data_0x5C; // ex:1 | ||
+ | } ScePafHeapContext; | ||
+ | |||
+ | typedef struct ScePafHeapOpt { // size is 0x14 | ||
+ | int a1; | ||
+ | int a2; | ||
+ | char a3[4]; | ||
+ | int a4; | ||
+ | int a5; | ||
+ | } ScePafHeapOpt; | ||
+ | </source> | ||
+ | |||
+ | == ScePafMisc == | ||
+ | |||
+ | === scePafGetCurrentClockLocalTime === | ||
+ | {| class="wikitable" | ||
+ | |- | ||
+ | ! Version !! NID | ||
+ | |- | ||
+ | | 3.60 || 0x96345146 | ||
+ | |} | ||
+ | |||
+ | <source lang="C">int scePafGetCurrentClockLocalTime(ScePafDateTime *data);</source> | ||
+ | |||
+ | === scePafCreateHeap === | ||
+ | {| class="wikitable" | ||
+ | |- | ||
+ | ! Version !! NID | ||
+ | |- | ||
+ | | 3.60 || 0xA2B0BF4D | ||
|} | |} | ||
− | [[Category:Modules]] | + | <source lang="C">void scePafCreateHeap(ScePafHeapContext *context, void *membase, SceSize size, const char *name, ScePafHeapOpt *opt);</source> |
− | [[Category: | + | |
+ | === scePafDeleteHeap === | ||
+ | {| class="wikitable" | ||
+ | |- | ||
+ | ! Version !! NID | ||
+ | |- | ||
+ | | 3.60 || 0x25238A3A | ||
+ | |} | ||
+ | |||
+ | <source lang="C">void scePafDeleteHeap(ScePafHeapContext *context);</source> | ||
+ | |||
+ | === scePafMallocWithContext === | ||
+ | {| class="wikitable" | ||
+ | |- | ||
+ | ! Version !! NID | ||
+ | |- | ||
+ | | 3.60 || 0x89A1CE78 | ||
+ | |} | ||
+ | |||
+ | <source lang="C">void *scePafMallocWithContext(ScePafHeapContext *context, SceSize len);</source> | ||
+ | |||
+ | === scePafFreeWithContext === | ||
+ | {| class="wikitable" | ||
+ | |- | ||
+ | ! Version !! NID | ||
+ | |- | ||
+ | | 3.60 || 0xCE97B579 | ||
+ | |} | ||
+ | |||
+ | <source lang="C">void scePafFreeWithContext(ScePafHeapContext *context, void *ptr);</source> | ||
+ | |||
+ | === scePafMallocAlignWithContext === | ||
+ | {| class="wikitable" | ||
+ | |- | ||
+ | ! Version !! NID | ||
+ | |- | ||
+ | | 3.60 || 0x04716F15 | ||
+ | |} | ||
+ | |||
+ | <source lang="C">void *scePafMallocAlignWithContext(ScePafHeapContext *context, SceUInt32 align, SceSize len);</source> | ||
+ | |||
+ | === scePafReallocWithContext === | ||
+ | {| class="wikitable" | ||
+ | |- | ||
+ | ! Version !! NID | ||
+ | |- | ||
+ | | 3.60 || 0x74DB7F5D | ||
+ | |} | ||
+ | |||
+ | <source lang="C">void *scePafReallocWithContext(ScePafHeapContext *context, void *ptr, SceSize len);</source> | ||
+ | |||
+ | === scePafSha1Init === | ||
+ | {| class="wikitable" | ||
+ | |- | ||
+ | ! Version !! NID | ||
+ | |- | ||
+ | | 3.60 || 0xB38C53C0 | ||
+ | |} | ||
+ | |||
+ | <source lang="C">int scePafSha1Init(ScePafSha1Context *context);</source> | ||
+ | |||
+ | === scePafSha1Update === | ||
+ | {| class="wikitable" | ||
+ | |- | ||
+ | ! Version !! NID | ||
+ | |- | ||
+ | | 3.60 || 0xE6BB459E | ||
+ | |} | ||
+ | |||
+ | <source lang="C">int scePafSha1Update(ScePafSha1Context *context, const void *data, SceSize length);</source> | ||
+ | |||
+ | === scePafSha1Result === | ||
+ | {| class="wikitable" | ||
+ | |- | ||
+ | ! Version !! NID | ||
+ | |- | ||
+ | | 3.60 || 0xB3BF59FC | ||
+ | |} | ||
+ | |||
+ | <source lang="C">int scePafSha1Result(ScePafSha1Context *context, void *dst);</source> | ||
+ | |||
+ | == ScePafStdc == | ||
+ | |||
+ | === scePafDefaultHeapInfo === | ||
+ | {| class="wikitable" | ||
+ | |- | ||
+ | ! Version !! NID | ||
+ | |- | ||
+ | | 3.60 || 0x261CAF72 | ||
+ | |} | ||
+ | |||
+ | <source lang="C">void *scePafDefaultHeapInfo(void);</source> | ||
+ | |||
+ | === delete === | ||
+ | {| class="wikitable" | ||
+ | |- | ||
+ | ! Version !! NID | ||
+ | |- | ||
+ | | 3.60 || 0x347AFDD9 | ||
+ | |} | ||
+ | |||
+ | <source lang="C">void delete(void *ptr);</source> | ||
+ | |||
+ | === sce_paf_memalign === | ||
+ | {| class="wikitable" | ||
+ | |- | ||
+ | ! Version !! NID | ||
+ | |- | ||
+ | | 3.60 || 0xAA9952E0 | ||
+ | |} | ||
+ | |||
+ | <source lang="C">void *sce_paf_memalign(SceSize align, SceSize length);</source> | ||
+ | |||
+ | == ScePafResource == | ||
+ | |||
+ | === scePafResourceGetIdByName === | ||
+ | {| class="wikitable" | ||
+ | |- | ||
+ | ! Version !! NID | ||
+ | |- | ||
+ | | 3.60 || 0x5F05DE68 | ||
+ | |} | ||
+ | |||
+ | <source lang="C">unsigned int scePafResourceGetIdByName(void *a1, void *a2);</source> | ||
+ | |||
+ | == ScePafWidget == | ||
+ | |||
+ | === scePafWidgetCreateNewWidget === | ||
+ | {| class="wikitable" | ||
+ | |- | ||
+ | ! Version !! NID | ||
+ | |- | ||
+ | | 3.60 || 0x5C2962E1 | ||
+ | |} | ||
+ | |||
+ | <source lang="C"> | ||
+ | /* | ||
+ | * a2 is maybe parent widget? | ||
+ | */ | ||
+ | void *scePafWidgetCreateNewWidget(void *mem_ptr, void *a2, int a3); | ||
+ | </source> | ||
+ | |||
+ | === scePafWidgetSetColor === | ||
+ | {| class="wikitable" | ||
+ | |- | ||
+ | ! Version !! NID | ||
+ | |- | ||
+ | | 3.60 || 0xCD20EF38 | ||
+ | |} | ||
+ | |||
+ | <source lang="C"> | ||
+ | #define SCE_PAF_WIDGET_COLOR_UNKNOWN_1 (1) | ||
+ | #define SCE_PAF_WIDGET_COLOR_TEXT (2) | ||
+ | #define SCE_PAF_WIDGET_COLOR_TEXT_SHADOW (3) | ||
+ | #define SCE_PAF_WIDGET_COLOR_BACK_BAR (4) | ||
+ | #define SCE_PAF_WIDGET_COLOR_UNKNOWN_5 (5) | ||
+ | |||
+ | typedef struct ScePafWidgetColor { | ||
+ | float red; | ||
+ | float green; | ||
+ | float blue; | ||
+ | float alpha; | ||
+ | } ScePafWidgetColor; | ||
+ | |||
+ | /* | ||
+ | * a2 - set SCE_PAF_WIDGET_COLOR | ||
+ | * a3 - unknow, set 0 | ||
+ | * a4 - unknow, set 0 | ||
+ | */ | ||
+ | int scePafWidgetSetColor(void *pWidget, int a2, int a3, int a4, const ScePafWidgetColor *pColoer); | ||
+ | </source> | ||
+ | |||
+ | === ScePafWidget_DDB0437F === | ||
+ | {| class="wikitable" | ||
+ | |- | ||
+ | ! Version !! NID | ||
+ | |- | ||
+ | | 3.60 || 0xDDB0437F | ||
+ | |} | ||
+ | |||
+ | ??? scePafWidgetSetColorEnd ??? | ||
+ | |||
+ | <source lang="C"> | ||
+ | int ScePafWidget_DDB0437F(void *pWidget); | ||
+ | </source> | ||
+ | |||
+ | === scePafWidgetSetTextOption === | ||
+ | {| class="wikitable" | ||
+ | |- | ||
+ | ! Version !! NID | ||
+ | |- | ||
+ | | 3.60 || 0xF2A2E2E6 | ||
+ | |} | ||
+ | |||
+ | <source lang="C"> | ||
+ | #define SCE_PAF_WIDGET_OPTION_TEXT_BOLD (0x7) | ||
+ | #define SCE_PAF_WIDGET_OPTION_TEXT_SHADOW (0xC) | ||
+ | #define SCE_PAF_WIDGET_OPTION_TEXT_EXTERNAL_LINE (0xD) | ||
+ | |||
+ | /* | ||
+ | * a2 - set SCE_PAF_WIDGET_OPTION_TEXT | ||
+ | * a3 - unknow, set 0 | ||
+ | * a4 - unknow, set 0 | ||
+ | */ | ||
+ | int scePafWidgetSetTextOption(void *pWidget, int a2, int a3, int a4, int enable); | ||
+ | </source> | ||
+ | |||
+ | === scePafWidgetSetTextOption2 === | ||
+ | {| class="wikitable" | ||
+ | |- | ||
+ | ! Version !! NID | ||
+ | |- | ||
+ | | 3.60 || 0xCCD58ACB | ||
+ | |} | ||
+ | |||
+ | <source lang="C"> | ||
+ | int scePafWidgetSetTextOption2(void *pWidget, int a2, int a3, int a4); | ||
+ | |||
+ | Example of use | ||
+ | |||
+ | /* | ||
+ | * Display bar color according to character width? | ||
+ | * If this function is not used, are all character widths treated as lowercase? | ||
+ | */ | ||
+ | scePafWidgetSetTextOption2(p_widget, 2, 2, 0); | ||
+ | </source> | ||
+ | |||
+ | === scePafWidgetTypeButton === | ||
+ | {| class="wikitable" | ||
+ | |- | ||
+ | ! Version !! NID | ||
+ | |- | ||
+ | | 3.60 || 0xB773464D | ||
+ | |} | ||
+ | |||
+ | <source lang="C">const char *scePafWidgetTypeButton(void);</source> | ||
+ | |||
+ | === scePafWidgetTypeText === | ||
+ | {| class="wikitable" | ||
+ | |- | ||
+ | ! Version !! NID | ||
+ | |- | ||
+ | | 3.60 || 0x723F6A4C | ||
+ | |} | ||
+ | |||
+ | <source lang="C">const char *scePafWidgetTypeText(void);</source> | ||
+ | |||
+ | === scePafWidgetTypeText2 === | ||
+ | {| class="wikitable" | ||
+ | |- | ||
+ | ! Version !! NID | ||
+ | |- | ||
+ | | 3.60 || 0x45AA2058 | ||
+ | |} | ||
+ | |||
+ | same to scePafWidgetTypeText | ||
+ | |||
+ | <source lang="C">const char *scePafWidgetTypeText2(void);</source> | ||
+ | |||
+ | === scePafWidgetTypeBusyIndicator1 === | ||
+ | {| class="wikitable" | ||
+ | |- | ||
+ | ! Version !! NID | ||
+ | |- | ||
+ | | 3.60 || 0xDBCC58BB | ||
+ | |} | ||
+ | |||
+ | <source lang="C">const char *scePafWidgetTypeBusyIndicator1(void);</source> | ||
+ | |||
+ | === scePafWidgetTypeBusyIndicator2 === | ||
+ | {| class="wikitable" | ||
+ | |- | ||
+ | ! Version !! NID | ||
+ | |- | ||
+ | | 3.60 || 0x1D1F5BF7 | ||
+ | |} | ||
+ | |||
+ | same to scePafWidgetTypeBusyIndicator1 | ||
+ | |||
+ | <source lang="C">const char *scePafWidgetTypeBusyIndicator2(void);</source> | ||
+ | |||
+ | === scePafWidgetCmpTypeBase === | ||
+ | {| class="wikitable" | ||
+ | |- | ||
+ | ! Version !! NID | ||
+ | |- | ||
+ | | 3.60 || 0x8EDFDE19 | ||
+ | |} | ||
+ | |||
+ | <source lang="C">int scePafWidgetCmpTypeBase(void *pWidget, const char *type);</source> | ||
+ | |||
+ | === scePafWidgetCmpTypeBusyIndicator === | ||
+ | {| class="wikitable" | ||
+ | |- | ||
+ | ! Version !! NID | ||
+ | |- | ||
+ | | 3.60 || 0xB954B379 | ||
+ | |} | ||
+ | |||
+ | <source lang="C">int scePafWidgetCmpTypeBusyIndicator(void *pWidget, const char *type);</source> | ||
+ | |||
+ | === scePafWidgetSetFontSize === | ||
+ | {| class="wikitable" | ||
+ | |- | ||
+ | ! Version !! NID | ||
+ | |- | ||
+ | | 3.60 || 0x39B15B98 | ||
+ | |} | ||
+ | |||
+ | <source lang="C"> | ||
+ | int scePafWidgetSetFontSize(void *pWidget, float size, int unk, SceSize pos, SceSize len); | ||
+ | |||
+ | Example of use | ||
+ | |||
+ | // Set the font size of the entire text | ||
+ | scePafWidgetSetFontSize(p_widget, 22.0f, 1, 0, 0); | ||
+ | |||
+ | // When changing the font size only for the 7th character from the 4th character of the text | ||
+ | scePafWidgetSetFontSize(p_widget, 22.0f, 1, 4, 3); | ||
+ | </source> | ||
+ | |||
+ | === scePafWidgetSetPosition === | ||
+ | {| class="wikitable" | ||
+ | |- | ||
+ | ! Version !! NID | ||
+ | |- | ||
+ | | 3.60 || 0xE29AB31F | ||
+ | |} | ||
+ | |||
+ | Temp name was scePafWidgetAddWidget. | ||
+ | |||
+ | <source lang="C"> | ||
+ | /* | ||
+ | x --------------------------------> | ||
+ | y|---------------------------------| | ||
+ | || | | | ||
+ | || -x.x | +x.x | | ||
+ | || +y.y | +y.y | | ||
+ | || | | | ||
+ | ||----------------0----------------| | ||
+ | || | | | ||
+ | || -x.x | +x.x | | ||
+ | || -y.y | -y.y | | ||
+ | || | | | ||
+ | v|---------------------------------| | ||
+ | */ | ||
+ | |||
+ | typedef struct ScePafWidgetPos { | ||
+ | float x; // Distance from display center | ||
+ | float y; // Distance from display center | ||
+ | float z; | ||
+ | int unk_0x0C; // set 0 | ||
+ | } ScePafWidgetPos; | ||
+ | |||
+ | int scePafWidgetSetPosition(void *pWidget, ScePafWidgetPos *pWidgetPos, float a3, int a4, int a5, int a6, int a7, int a8); | ||
+ | |||
+ | Example of use | ||
+ | |||
+ | ScePafWidgetPos widget_pos; | ||
+ | widget_pos.x = x_pos - (960.0f / 2.0f); | ||
+ | widget_pos.y = (544.0f / 2.0f) - y_pos; | ||
+ | widget_pos.z = 0.0f; | ||
+ | widget_pos.unk_0x08 = 0; | ||
+ | scePafWidgetSetPosition(p_widget, &widget_pos, 0.0f, 0, 0x10000, 0, 0, 0); | ||
+ | </source> | ||
+ | |||
+ | === scePafWidgetSearchWidgetById === | ||
+ | {| class="wikitable" | ||
+ | |- | ||
+ | ! Version !! NID | ||
+ | |- | ||
+ | | 3.60 || 0x9D304F4A | ||
+ | |} | ||
+ | |||
+ | Searches the widget corresponding to a2->id from the group of a1 and returns pWidgetCtx if found | ||
+ | |||
+ | <source lang="C"> | ||
+ | typedef struct ScePafWidgetSearchParam { | ||
+ | void *unk_0; | ||
+ | unsigned int unk_4; | ||
+ | void *unk_8; | ||
+ | unsigned int id; | ||
+ | } ScePafWidgetSearchParam; | ||
+ | |||
+ | void *scePafWidgetSearchWidgetById(void *a1, ScePafWidgetSearchParam *a2, int a3); | ||
+ | </source> | ||
+ | |||
+ | === scePafWidgetShowBusyIndicator === | ||
+ | {| class="wikitable" | ||
+ | |- | ||
+ | ! Version !! NID | ||
+ | |- | ||
+ | | 3.60 || 0x04310E14 | ||
+ | |} | ||
+ | |||
+ | <source lang="C">void scePafWidgetShowBusyIndicator(void *pWidget);</source> | ||
+ | |||
+ | === scePafWidgetHideBusyIndicator === | ||
+ | {| class="wikitable" | ||
+ | |- | ||
+ | ! Version !! NID | ||
+ | |- | ||
+ | | 3.60 || 0x73D27A1B | ||
+ | |} | ||
+ | |||
+ | <source lang="C">void scePafWidgetHideBusyIndicator(void *pWidget);</source> | ||
+ | |||
+ | [[Category:Modules]][[Category:Usermode]] |
Revision as of 09:15, 20 November 2021
Much of this page is wrong because much of the PAF is written in C++.
But it works as a "function".
Module
ScePaf
is a C++ runtime.
Quick note on reversing. This module has many vtables that point to exported functions.
It would be great to start from marking which function belongs to which vtable.
This way we can restore initial class structure.
Version | Name | World | Privilege |
---|---|---|---|
1.69-3.73 | ScePaf | Non-secure | User |
Libraries
Known NIDs
Version | Name | World | Visibility | NID |
---|---|---|---|---|
3.60 | ScePafLowlayer | Non-secure | User | 0x2342266A |
3.60 | ScePafStdc | Non-secure | User | 0xA7D28DAE |
3.60 | ScePafMisc | Non-secure | User | 0x3D643CE8 |
3.60 | ScePafCommon | Non-secure | User | 0x3C1965CD |
3.60 | ScePafGraphics | Non-secure | User | 0xA070D6A7 |
3.60 | ScePafThread | Non-secure | User | 0x54276D19 |
3.60 | ScePafResource | Non-secure | User | 0x2836DC9B |
3.60 | ScePafToplevel | Non-secure | User | 0x4D9A9DD0 |
3.60 | ScePafWidget | Non-secure | User | 0x073F8C68 |
Types
typedef struct ScePafSha1Context { // size is 0x68
uint32_t h[5];
char unk[0x54];
} ScePafSha1Context;
typedef struct ScePafDateTime {
SceDateTime data;
int data_0x10;
int data_0x14;
} ScePafDateTime;
typedef struct ScePafHeapContext { // size is 0x60
void *vtable;
void *heap;
void *membase;
SceSize size;
char name[0x20];
SceBool is_import_membase;
char data_0x30[3];
int data_0x34;
SceKernelLwMutexWork lw_mtx;
SceUID memblk_id;
int data_0x5C; // ex:1
} ScePafHeapContext;
typedef struct ScePafHeapOpt { // size is 0x14
int a1;
int a2;
char a3[4];
int a4;
int a5;
} ScePafHeapOpt;
ScePafMisc
scePafGetCurrentClockLocalTime
Version | NID |
---|---|
3.60 | 0x96345146 |
int scePafGetCurrentClockLocalTime(ScePafDateTime *data);
scePafCreateHeap
Version | NID |
---|---|
3.60 | 0xA2B0BF4D |
void scePafCreateHeap(ScePafHeapContext *context, void *membase, SceSize size, const char *name, ScePafHeapOpt *opt);
scePafDeleteHeap
Version | NID |
---|---|
3.60 | 0x25238A3A |
void scePafDeleteHeap(ScePafHeapContext *context);
scePafMallocWithContext
Version | NID |
---|---|
3.60 | 0x89A1CE78 |
void *scePafMallocWithContext(ScePafHeapContext *context, SceSize len);
scePafFreeWithContext
Version | NID |
---|---|
3.60 | 0xCE97B579 |
void scePafFreeWithContext(ScePafHeapContext *context, void *ptr);
scePafMallocAlignWithContext
Version | NID |
---|---|
3.60 | 0x04716F15 |
void *scePafMallocAlignWithContext(ScePafHeapContext *context, SceUInt32 align, SceSize len);
scePafReallocWithContext
Version | NID |
---|---|
3.60 | 0x74DB7F5D |
void *scePafReallocWithContext(ScePafHeapContext *context, void *ptr, SceSize len);
scePafSha1Init
Version | NID |
---|---|
3.60 | 0xB38C53C0 |
int scePafSha1Init(ScePafSha1Context *context);
scePafSha1Update
Version | NID |
---|---|
3.60 | 0xE6BB459E |
int scePafSha1Update(ScePafSha1Context *context, const void *data, SceSize length);
scePafSha1Result
Version | NID |
---|---|
3.60 | 0xB3BF59FC |
int scePafSha1Result(ScePafSha1Context *context, void *dst);
ScePafStdc
scePafDefaultHeapInfo
Version | NID |
---|---|
3.60 | 0x261CAF72 |
void *scePafDefaultHeapInfo(void);
delete
Version | NID |
---|---|
3.60 | 0x347AFDD9 |
void delete(void *ptr);
sce_paf_memalign
Version | NID |
---|---|
3.60 | 0xAA9952E0 |
void *sce_paf_memalign(SceSize align, SceSize length);
ScePafResource
scePafResourceGetIdByName
Version | NID |
---|---|
3.60 | 0x5F05DE68 |
unsigned int scePafResourceGetIdByName(void *a1, void *a2);
ScePafWidget
scePafWidgetCreateNewWidget
Version | NID |
---|---|
3.60 | 0x5C2962E1 |
/*
* a2 is maybe parent widget?
*/
void *scePafWidgetCreateNewWidget(void *mem_ptr, void *a2, int a3);
scePafWidgetSetColor
Version | NID |
---|---|
3.60 | 0xCD20EF38 |
#define SCE_PAF_WIDGET_COLOR_UNKNOWN_1 (1)
#define SCE_PAF_WIDGET_COLOR_TEXT (2)
#define SCE_PAF_WIDGET_COLOR_TEXT_SHADOW (3)
#define SCE_PAF_WIDGET_COLOR_BACK_BAR (4)
#define SCE_PAF_WIDGET_COLOR_UNKNOWN_5 (5)
typedef struct ScePafWidgetColor {
float red;
float green;
float blue;
float alpha;
} ScePafWidgetColor;
/*
* a2 - set SCE_PAF_WIDGET_COLOR
* a3 - unknow, set 0
* a4 - unknow, set 0
*/
int scePafWidgetSetColor(void *pWidget, int a2, int a3, int a4, const ScePafWidgetColor *pColoer);
ScePafWidget_DDB0437F
Version | NID |
---|---|
3.60 | 0xDDB0437F |
??? scePafWidgetSetColorEnd ???
int ScePafWidget_DDB0437F(void *pWidget);
scePafWidgetSetTextOption
Version | NID |
---|---|
3.60 | 0xF2A2E2E6 |
#define SCE_PAF_WIDGET_OPTION_TEXT_BOLD (0x7)
#define SCE_PAF_WIDGET_OPTION_TEXT_SHADOW (0xC)
#define SCE_PAF_WIDGET_OPTION_TEXT_EXTERNAL_LINE (0xD)
/*
* a2 - set SCE_PAF_WIDGET_OPTION_TEXT
* a3 - unknow, set 0
* a4 - unknow, set 0
*/
int scePafWidgetSetTextOption(void *pWidget, int a2, int a3, int a4, int enable);
scePafWidgetSetTextOption2
Version | NID |
---|---|
3.60 | 0xCCD58ACB |
int scePafWidgetSetTextOption2(void *pWidget, int a2, int a3, int a4);
Example of use
/*
* Display bar color according to character width?
* If this function is not used, are all character widths treated as lowercase?
*/
scePafWidgetSetTextOption2(p_widget, 2, 2, 0);
scePafWidgetTypeButton
Version | NID |
---|---|
3.60 | 0xB773464D |
const char *scePafWidgetTypeButton(void);
scePafWidgetTypeText
Version | NID |
---|---|
3.60 | 0x723F6A4C |
const char *scePafWidgetTypeText(void);
scePafWidgetTypeText2
Version | NID |
---|---|
3.60 | 0x45AA2058 |
same to scePafWidgetTypeText
const char *scePafWidgetTypeText2(void);
scePafWidgetTypeBusyIndicator1
Version | NID |
---|---|
3.60 | 0xDBCC58BB |
const char *scePafWidgetTypeBusyIndicator1(void);
scePafWidgetTypeBusyIndicator2
Version | NID |
---|---|
3.60 | 0x1D1F5BF7 |
same to scePafWidgetTypeBusyIndicator1
const char *scePafWidgetTypeBusyIndicator2(void);
scePafWidgetCmpTypeBase
Version | NID |
---|---|
3.60 | 0x8EDFDE19 |
int scePafWidgetCmpTypeBase(void *pWidget, const char *type);
scePafWidgetCmpTypeBusyIndicator
Version | NID |
---|---|
3.60 | 0xB954B379 |
int scePafWidgetCmpTypeBusyIndicator(void *pWidget, const char *type);
scePafWidgetSetFontSize
Version | NID |
---|---|
3.60 | 0x39B15B98 |
int scePafWidgetSetFontSize(void *pWidget, float size, int unk, SceSize pos, SceSize len);
Example of use
// Set the font size of the entire text
scePafWidgetSetFontSize(p_widget, 22.0f, 1, 0, 0);
// When changing the font size only for the 7th character from the 4th character of the text
scePafWidgetSetFontSize(p_widget, 22.0f, 1, 4, 3);
scePafWidgetSetPosition
Version | NID |
---|---|
3.60 | 0xE29AB31F |
Temp name was scePafWidgetAddWidget.
/*
x -------------------------------->
y|---------------------------------|
|| | |
|| -x.x | +x.x |
|| +y.y | +y.y |
|| | |
||----------------0----------------|
|| | |
|| -x.x | +x.x |
|| -y.y | -y.y |
|| | |
v|---------------------------------|
*/
typedef struct ScePafWidgetPos {
float x; // Distance from display center
float y; // Distance from display center
float z;
int unk_0x0C; // set 0
} ScePafWidgetPos;
int scePafWidgetSetPosition(void *pWidget, ScePafWidgetPos *pWidgetPos, float a3, int a4, int a5, int a6, int a7, int a8);
Example of use
ScePafWidgetPos widget_pos;
widget_pos.x = x_pos - (960.0f / 2.0f);
widget_pos.y = (544.0f / 2.0f) - y_pos;
widget_pos.z = 0.0f;
widget_pos.unk_0x08 = 0;
scePafWidgetSetPosition(p_widget, &widget_pos, 0.0f, 0, 0x10000, 0, 0, 0);
scePafWidgetSearchWidgetById
Version | NID |
---|---|
3.60 | 0x9D304F4A |
Searches the widget corresponding to a2->id from the group of a1 and returns pWidgetCtx if found
typedef struct ScePafWidgetSearchParam {
void *unk_0;
unsigned int unk_4;
void *unk_8;
unsigned int id;
} ScePafWidgetSearchParam;
void *scePafWidgetSearchWidgetById(void *a1, ScePafWidgetSearchParam *a2, int a3);
scePafWidgetShowBusyIndicator
Version | NID |
---|---|
3.60 | 0x04310E14 |
void scePafWidgetShowBusyIndicator(void *pWidget);
scePafWidgetHideBusyIndicator
Version | NID |
---|---|
3.60 | 0x73D27A1B |
void scePafWidgetHideBusyIndicator(void *pWidget);