【教程】PSV - 使用文档

前言

这里将为您介绍如何使用各种合理有效的工具对PSV的应用进行下载与安装。

方法列表

No. Method device
1 黑商店 (整合下载) PS Vita
2 NPS (整合下载) Computer
3 TSV文件 (pkg格式不含解码) Computer
4 mai版本游戏 (跑跑、翼风、老玩家.etc) Computer
5 VPK【PSV安装包格式】(跑跑、翼风、老玩家.etc) Computer

温馨提示

游戏

  1. 如果是直接使用TSV文件的话,则需要 pkg2zip.exe 进行文件解码。
    Prime Parser File - pkg2zip.exe.PNG
    File Parse Result.PNG
    Upload Game File to PS Vita.PNG
  2. NPS 下载游戏很容易中断或者下载失败或者点击继续无反应等等,但总体功能强大。
  3. 想方便的话直接黑商店,网速不好则听天由命。(《千之涛刃.桃花染的皇姬》这个就将近3天才下载完)
  4. 黑商店 和 NPS 的网速都是不稳定的,时快时慢,平时经常也就十几k而已。
  5. 这里下载的游戏基本属于 nnd 破解的游戏,可连接网络。
  6. mai 游戏不能联网,所以这个需要自行寻找并下载。
  7. mai 游戏打开游戏文件夹时,部分文件或文件夹会带有mai的文字。

下载 & 解码

  1. 使用迅雷下载可以开会员。这里是资源充足或者有会员,所以速度基本是几m左右及以上(具体看自家套餐,以及资源的下载量)
    Download Game Case 1.PNG
    Download Case 3.PNG
    Download Game Case 2 - BIGINI.PNG
    Download Game Case 3.PNG

  2. PSV 的应用内容基本需要 PKG 解码。

  3. 存储空间较小的应用,比如主题。则可以在黑商店下载,速度也不错。

掌机

  1. PSV 数据线接上电脑后,在 PSV 中打开 VitaShell,并按下 select 键。此刻便可以进行文件传输。
类型 游戏目录 DLC目录
nnd/vpk /app /addcount
mai /mai /addcount_mai
1. / 为根目录
2. 无论游戏的类型是哪种,都需要解压后,再进行游戏本体复制。
3. mai 是通过工具进行某种操作后,再移动至 app 或 addcount 目录中。因此操作时所需容量可能是游戏本体的两倍及以上。
4. vpk可以直接使用vita工具箱安装,或者改后缀为rar再解压到/app中
  1. 本体复制到里面后,可以使用 VitaShell 和 VITA 工具箱 进行气泡刷新操作。成功后会自动显示该游戏图标。如果进度条在最后几十左右卡顿的话,很有可能是失败。原因可能主要是游戏本体不完整,或者是该本体类型是 mai,需要 MaiDumpTool 工具进行安装。
工具 操作
VitaShell 三角按键 -> 刷新桌面气泡
VITA Tool Box 刷新游戏气泡

主题

  1. 破解版的主题不能直接应用,原因是开机就恢复原来的原生主题。
  2. 主题的解决方案。登陆 PSN,下载一个免费的主题,应用该Theme并重启。现在再使用破解的主题就可以了。

PSN

  1. PSN 无法登陆可能是版本问题,去设置的伪装里面查看并更改到相应的伪装系统版本。

图片截图

  1. 图片数据库的位置是图片数据库
  2. 里面的内容是
    图片数据库内容
    18.1. 可以使用代码的sqlite3进行修改与调整,这里以 python 为例子。
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    import sqlite3


    '''
    PSV图片数据库,用于分类管理
    ux0:/mms/Photo/AVContent.db
    '''

    '''
    下面程序用于离散的图片整合为以特定软件为文件夹分类的图片
    '''

    conn = sqlite3.connect('AVContent.db')
    cur = conn.cursor()

    # cur.execute("select name from sqlite_master where type='table' order by name")
    # print(cur.fetchall())

    cur.execute("select * from tbl_VPContent")
    reslist = cur.fetchall()

    results = []
    for res in reslist:
    results.append({
    'Imgpath': res[31],
    'Series': res[33]
    })

    # print(results, len(results))

    import pandas as pd

    df = pd.DataFrame(data=results)
    df.fillna('None', inplace=True)

    gdfs = df.groupby(df.Series)
    for gdf in gdfs:
    # 软件名称
    soft = gdf[0]
    # 对应软件的截图数据集
    sdf = gdf[1]
    print(soft, len(sdf))
    图片数据库采集与分类结果展示图
    18.2. 完整版的图片转换
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    import os
    import sqlite3
    import shutil
    import pandas as pd

    class PSVSQLiteService:
    def __init__(self, PSVDir, savepath='./'):
    self.root = PSVDir
    self.savepath = savepath
    self.savepicpath = os.path.join(self.savepath, 'picture').replace('\\', '/')
    self.photodf = False
    self.picpath = os.path.join(self.root, 'picture').replace('\\', '/')
    self.photodb = os.path.join(self.root, 'mms/Photo/AVContent.db')

    def getPhotoDBInf(self):
    conn = sqlite3.connect(self.photodb)
    cur = conn.cursor()

    # cur.execute("select name from sqlite_master where type='table' order by name")
    # print(cur.fetchall())

    cur.execute("select * from tbl_VPContent")
    return cur.fetchall()

    def getPhotoDBByDF(self):
    reslist = self.getPhotoDBInf()

    # class PSVImgRecordEntity:
    # def __init__(self, imgpath, series, type):
    # self.imgpath = imgpath
    # self.series = series
    # self.type = type

    results = []
    for res in reslist:
    imgTrackList = res[31].split('/')
    imgpath = '/'.join([self.picpath]+imgTrackList[1:])
    results.append({
    'imgpath': imgpath,
    'series': res[33],
    'type': imgTrackList[1]
    })

    self.photodf = pd.DataFrame(data=results)
    return self.photodf

    # 仅对一组特征进行分类与文件夹创建
    def photoSaverByG1(self, GroupCol='series', type='SCREENSHOT'):
    savepath = os.path.join(self.savepicpath, type).replace('\\', '/')
    curdir = os.curdir
    df = self.photodf
    df = df[df.type == type]
    gdfs = df.groupby(df[GroupCol])
    failInf = []

    if not os.path.exists(savepath): os.makedirs(savepath)
    os.chdir(savepath)
    for gdf in gdfs:
    # 软件名称, 截图DF数据集
    soft, sdf = gdf
    soft = soft.replace('/', ' ').replace(':', '-').replace('\n', ' ')
    if not os.path.exists(soft): os.mkdir(soft)
    os.chdir(soft)
    for img in sdf['imgpath'].to_list():
    imgname = img[img.rfind('/')+1:]
    try:
    shutil.copyfile(img, imgname)
    except Exception:
    failInf.append(img)
    os.chdir('../')
    os.chdir(curdir)

    return failInf

    # 图片提取目录的PSV文件夹, 图片存储目录的文件夹,存储方式按PSV的基本构成存储。
    PSS = PSVSQLiteService(f'I:\PSV Card\PicDir', './')
    PSS.getPhotoDBByDF()
    PSS.photoSaverByG1()
    对照图小插曲

主题制作(基本介绍)

  1. 主题的文件夹内容展示
    主题文件夹内容
    主题文件夹可展示部分内容

  2. 主题核心配置文件(也就是使用哪些图片和音乐)
    配置文件图1
    配置文件图2
    配置文件图3
    配置文件图4

  3. PSV主题文件夹获取(ux0:/theme的主题都是未应用的,也就是加密文件,而应用后的解密文件在 ur0:/shell/theme中,大概范围是没错的)

  4. 文件的局部设置如下,具体的图片调整可以去贴吧翻阅。
    局部信息

  5. 应用的话就下载对应的vpk以及放在自制主题的文件夹中。

内容补充

  1. 同账号条件下,两台psv(破解 or 正版)可以相互间读取内存卡的内容。[至于正版psv中,账号未拥有的数字版是否正常运行则没试过]
  2. vitatools 2破解的掌机可以直接应用黑商店的主题。
  3. 卡套破解教程[原装卡插入 -> 格式化原装卡 -> 备份格式化后的文件 -> 然后复制到tf卡中(tf卡需要 Disk Genius 转换为 USB-FDD 启动模式,然后exfat格式化,内存单元自己选,一般选择16k或32k。) -> 打开vita的工具箱,读取成功则结束,不成功,或成为副卡则,选工具箱的 tf -> ux0 ]
  4. PSN的登陆问题:
  1. 黑商店目录下面有对应的tsv文件。
  2. mai游戏建议养成保存习惯,据我所知,长时间不存档会无法存档,导致前功尽弃。nnd则不会,但dlc没mai整合多。具体还得看游戏以及个人想法进行衡量。
  3. 投屏: 支持软件系统:[反串流插件,录制软件]、不支持软件系统:[psvtv]。
  4. psvtv: tv版psv,马赛克有点大。3.60破解支持硬盘读取,而不仅仅是tf卡马甲。

TSV文件下载

  1. TSV文件的大概样子
    TSV Exhibition.PNG
    Excel后的Tsv.PNG

  2. 下载的PKG地址
    PKG Link.PNG

  3. 解码的zRIF
    PKG zRIF.PNG

  4. window的bat执行pkg2zip.exe解码器

    1
    2
    3
    @echo off
    pkg2zip.exe pkg文件路径 zRIF解码的密钥
    pause

py的工具制作

  1. TSV 转 Excel
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    from openpyxl import Workbook
    from sys import argv

    name = argv[1]
    inFile = f'{name}.tsv'
    outFile = f'{name}.xlsx'

    wb = Workbook()
    st = wb.active

    with open(inFile, 'r', encoding='utf8') as fp:
    row = 0
    while True:
    temp = fp.readline()
    if not temp:
    break
    items = temp.split('\t')
    row += 1
    for (key, item) in enumerate(items):
    st.cell(row, key+1).value = item

    wb.save(outFile)
  2. 自动查找 TSV 文件的 zRIF密钥
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    from os import system
    from os.path import exists
    from os.path import join
    import sys

    # open file stream
    # gp = open(gFile, 'r', encoding='utf8')

    # find zRIF in data file: link[4], zRIF[5] != MISSING
    def get_zRIF(g_file):
    fp = open(dbFile, 'r', encoding='utf8')
    temp = True
    res = False

    while temp:
    temp = fp.readline()
    arr = temp.split('\t')
    if arr[3].rfind(g_file.strip()) != -1 and \
    arr[4] != 'Missing':
    res = arr[4].strip()

    fp.close()
    return res

    # parse one pkg
    def parser(f_path):
    g_name = gameName(f_path)
    zRIF = get_zRIF(g_name)
    # print(g_name, '\n', zRIF)
    pkg2zip(g_name, zRIF)


    def pkg2zip(f_path, zRIF):
    if zRIF:
    system(f'pkg2zip.exe {f_path.strip()} {zRIF.strip()}')
    print(f'已经执行: {g_name}')
    else:
    print(f'执行失败: {g_name}')

    def gameName(f_path):
    return f_path[f_path.rfind('/') + 1:]


    def finds(game_id):
    fp = open(dbFile, 'r', encoding='utf8')
    temp = True
    res = []

    while temp:
    temp = fp.readline()
    arr = temp.split('\t')

    if arr[0] == game_id.strip() and \
    arr[3] != 'MISSING' and \
    arr[4] != 'MISSING':
    res.append([arr[3], arr[4]])

    fp.close()
    return res

    def mode(num=0):
    if num == 0:
    return './PSV_GAMES_SC.tsv'
    elif num == 1:
    return './titles_psvdlcs.tsv'
    else:
    return './PSV_GAMES_SC.tsv'


    if __name__ == '__main__':
    # gFile = './PSV_GAMES_PARSE_LIST.txt'
    # games = gp.readlines()

    # for item in games:
    # if item.startswith('#'):
    # continue
    # parser(item.strip())

    # gp.close()

    # load data file
    dbFile = mode(sys.argv[1])
    g_id = sys.argv[2]
    path = './'
    res = finds(g_id)

    if res:
    for item in res:
    g_name = gameName(item[0])
    if exists(g_name):
    pkg2zip(join(path, g_name), item[1])
    else:
    print('Please download relative file before run this parser of python!')
    else:
    print('Relative file is missing in database. Please upload the latest data file.')

    1
    2
    3
    4
    5
    @echo off
    : python PkgsParserTsv.py pkg type num pkg id num
    : 0: game soft 1: game dlc soft
    python PkgsParserTsv.py 0 PCSG00905
    pause

    The file parser for PKG format.PNG
    Dominant Parser Process.PNG
    下载地址

    PSV 工具下载地址.

结束语

~~今を生きている~~
不足之处,敬请诸君提点,谢~


【教程】PSV - 使用文档
https://jiaminglu0716.github.io/2024/04/03/tutorial/Course_20231027_PSV_How to DL and use apps/
著者
mvlg
作成日
2024年4月3日
著作権