iwannagooutside/9mm-vita
GitHub: iwannagooutside/9mm-vita
该项目是 Gameloft 的 9mm HD(Android 版)在 PS Vita 上的原生移植包装器,通过加载并修补原始 ARMv7 二进制文件实现在 Vita 上运行。
Stars: 0 | Forks: 0
# 9mm Vita
这是 *9mm HD Android* 移植到 *PS Vita* 的包装器/移植版。
本移植版通过在内存中加载官方 Android ARMv7 可执行文件,使用原生函数解析
其导入并进行修补以使其正常运行。
**本软件不包含游戏的原始代码、可执行文件、资源或其他
不可分发的部分。作者不以任何方式推广或纵容盗版。
要在他们的 PS Vita 设备上启动并运行游戏,用户必须提供
其合法获取的游戏副本,形式为 .apk 文件。**
已在最新的 Android 版本上测试,该版本的 `libCopStory.so` 大小为 11524815
字节。其他版本将拒绝启动而不是出现运行异常,原因请参阅
[构建说明](#build-instructions-for-developers)。
## 开始前需要准备的内容
- 一台运行自定义固件的 Vita 或 PSTV,并安装了 VitaShell。
- `ux0:` 上有大约 1.8 GB 的可用空间。
- 你自己的游戏副本,仍安装在 Android 设备上(或其备份)。你需要 `.apk` 以及**并且**需要游戏首次启动时下载的数据,这些数据占了 1.8 GB 中的大部分。
## 设置说明(面向最终用户)
### 1. 插件
安装 [kubridge](https://github.com/bythos14/kubridge/releases) 和
[FdFix](https://github.com/TheOfficialFloW/FdFix/releases):将 `kubridge.skprx`
和 `fd_fix.skprx` 复制到 `ur0:tai`,然后将它们添加到 `ur0:tai/config.txt` 的
`*KERNEL` 部分下:
```
*KERNEL
ur0:tai/kubridge.skprx
ur0:tai/fd_fix.skprx
```
**注意** 如果你正在使用 rePatch 插件,请不要安装 fd_fix.skprx!
编辑 `config.txt` 后请重启,否则插件不会被加载。
### 2. Shader compiler
如果你还没有安装 `libshacccg.suprx`,请按照
[本指南](https://samilops2.gitbook.io/vita-troubleshooting-guide/shader-compiler/extract-libshacccg.suprx) 进行安装。
它必须来自你自己的主机,没有人可以提供给你。游戏在运行时会编译
其 shaders,因此如果没有它,游戏将卡在黑屏。
### 3. 从 Android 获取游戏文件
需要从已安装游戏并完成下载的设备上获取两样东西:
- **The apk.** Play Store 上的任何 apk 提取器都可以将其提取出来,或者通过 adb 获取。它必须是 ARMv7 版本 (`armeabi-v7a`)。
- **The data folder.** 在设备上位于
`Android/data/com.gameloft.android.ANMP.Gloft9MHM/files/` 并且名为
`Gloft9MHM`。大约 1.7 GB。如果比这小得多,说明游戏尚未
完成下载,你应该在 Android 上启动它并让其完成下载。
### 4. 将它们放到 Vita 上
创建 `ux0:data/9mm/` 并放入以下内容:
- `Gloft9MHM` 文件夹中的所有内容(`.gla` 文件、
`sounds_hi.glza` 等)。放入文件本身,而不是文件夹。
- apk 中的两个文件:apk 是一个 zip 压缩包,因此将副本重命名为 `.zip`,打开它,
并从 `lib/armeabi-v7a/` 中提取 `libCopStory.so` 和 `libStormGLOFT.so`。
最终你应该得到的路径类似于 `ux0:data/9mm/libCopStory.so` 和
`ux0:data/9mm/actors.gla`。
**如何将 1.7 GB 移动到那里。** 选择适合你的方法:
- *SD2Vita / microSD*:拔出存储卡,插入你的 PC,直接复制到其中。
这是目前最快的方法,也是我会选择的方法。
- *USB*:在 VitaShell 中,按下 `Select`,Vita 将作为驱动器显示在你的 PC 上。
- *FTP*:在 VitaShell 中,按下 `Select` 切换到 FTP,使用 FileZilla 或
类似工具连接。工作正常,但 Vita wifi 速度较慢,因此预计需要一些时间。
### 5. 安装 vpk
从 [Releases](../../releases) 页面下载 `.vpk` 并将其复制到 Vita 上的任意位置
(`ux0:` 根目录即可)。在 VitaShell 中,将光标移动到它上面,按下
`X`,然后确认。主屏幕上将出现气泡图标。
### 6. 可选
[PSVshell](https://github.com/Electry/PSVshell/releases) 允许你超频至
500 MHz。有了它,加载过程会轻松得多。
## 控制
| Vita | 动作 |
| --- | --- |
| 左摇杆 | 移动 |
| 右摇杆 | 瞄准 |
| R | 射击 |
| L | 慢动作 |
| 方块键 | 装弹 |
| 叉号键 | 冲刺 |
| 方向键 左 / 右 | 切换武器 |
| Start | 暂停 |
这些按键对应的触摸控件已隐藏,因为实体按键已经覆盖了它们。
触摸 UI 中的其他所有内容仍然有效。
## 已知问题
- 标题屏幕的部分显示异常。这是一个 Scaleform (Flash) 覆盖层,
不影响游戏体验。
- 多人游戏未测试。我认为它已经损坏。
- 如果你将 Android 存档连同数据一起复制了,你将带着
该设备的进度开始,而不是一个全新的游戏。
## 构建说明(面向开发者)
你需要一个使用 **softfp** ABI 构建的 [VitaSDK](https://vitasdk.org/),并且
依赖库也必须以相同的方式重新编译(`-mfloat-abi=softfp`)。
```
git clone --recursive https://github.com/iwannagooutside/9mm-vita
cd 9mm-vita
cmake -Bbuild . && cmake --build build
```
`-DDEV_SHORTCUTS=ON` 会在游戏中添加两个调试快捷键(Select 转储一帧,
Triangle 结束关卡)。默认关闭,对于你分发的任何内容请保持关闭。
如果你打算修改 `source/patch.c`,请注意:这些补丁是针对游戏的某个特定版本的字节偏移量,因此每个补丁都会声明它要覆盖的指令,并首先进行检查。如果获取了不同的版本,你会收到一条提示信息,而不是一个悄悄损坏的二进制文件和在三个函数之外发生的崩溃。
添加补丁意味着也要添加该检查。
里面的大部分内容都是为了解决同一个问题:在渲染和游戏逻辑已经开始运行时,关卡会一个区域接一个区域地流式加载,因此在最初的几帧里,玩家没有区域,并且传送门指向尚未存在的区域。引擎在其中的几个位置注意到了这一点,记录了 null 指针,然后仍然读取了它。Android 以这种方式侥幸运行。
## 许可证
MIT,见 [LICENSE](LICENSE)。
## 免责声明
9mm 是 Gameloft SE 的商标。© Gameloft。保留所有权利。Gameloft 和
Gameloft 标识是 Gameloft 在美国和/或其他国家的商标。
本仓库中呈现的工作不是“官方”的,也非由上述商标的所有者制作或
认可。
可选:使用脚本而不是手动复制文件
如果你有 Python 并且不想手动解压 apk,此操作将为你完成第 3 步和 第 4 步,并检查是否有遗漏: ``` python3 tools/prepare_data.py --apk 9mm-HD.apk --cache Gloft9MHM.zip --out 9mm-data ``` 然后将 `9mm-data/` 中的所有内容复制到 `ux0:data/9mm/` 中。它还会排除 Android 存档,虽然无论哪种方式都无害,但这意味着你将从零开始。标签:Bash脚本, 客户端加密, 逆向工具