Files
HEROLL/docs/2026-08-24_逆向工程-HEROLL小游戏配置-report.md

126 lines
6.0 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# HEROLL 小游戏配置恢复报告
> 分析日期:2026-08-24
> 方式:本地 APK 已提取资源表与 IL2CPP 元数据静态分析;公开资料只做跨版本语义核对
> 结论:三个缺表小游戏的数据已经定位,足够制作 DEMO 模拟;抓娃娃概率解释仍需保守处理。
## 范围与结论
授权、目标和限制见 [case scope](../work/heroll-minigame-config/scope.md)。本次没有安装、修改、重打包或动态 Hook APK,也没有访问游戏账号或实时服务。
“三个配置表小游戏”按本地文件命名可确定为:
| 小游戏 | 原始配置 | 可恢复内容 | DEMO 可用性 |
|---|---|---|---|
| 泡泡射手 | `bubbleshooterminigame.csv` | 6 个地图模板、37 行、空位 `-1`、四色 `0..3` | 可按模板模拟 |
| 抓娃娃 | `clawcraneminigame.csv` | 10 类胶囊、奖励类型/数量、尺寸、`Prob/goodProb` 原值 | 可模拟抓取;概率暂不自行归一化 |
| Hero Body 挖掘 | `herobodyminigame.csv` | 7 种形状、16 行占位掩码、普通/稀有/史诗/传奇四组图 | 可按形状布置模拟 |
## 可直接录入的数据
### 三个缺表小游戏
泡泡射手模板行数为 `6/6/5/7/6/7`,合计 37 行。每行保存一个气泡横排;`-1` 为空,`0..3` 为四种颜色。`newtile.csv` 对事件 166 另有 `values=3,18,0,3,5,10`,但各下标语义未由方法体完全闭合,因此 DEMO 应把数组保持为配置,不给字段擅自命名。
抓娃娃表的 10 类奖励如下:
| tier | 奖励 | 数量 | goodProb | Prob | 尺寸 |
|---:|---|---:|---:|---:|---|
| 6 | empty | 0 | 0 | 40 | 0.5 |
| 6 | point | 1 | 0 | 70 | 0.9 |
| 0 | trash | 1 | 0 | 0 | 1.0–1.2 |
| 0 | potion | 1 | 0 | 14 | 0.8 |
| 1 | normal equipment | 1 | 0 | 40 | 0.8 |
| 2 | rare equipment | 1 | 0 | 0 | 0.8 |
| 3 | epic equipment | 1 | 0 | 0 | 0.8 |
| 4 | legendary equipment | 1 | 1 | 0 | 0.8 |
| 5 | augment | 1 | 0 | 0 | 0.8 |
| 5 | potionAugment | 1 | 0 | 0 | 0.8 |
表头韩文注释说明场上出现 20 个胶囊。由于 `Prob` 总和并非普通百分比总和,且多个高品质行是 0,DEMO 不应把这列直接除以总和。可以用固定场景布局演出并按奖励类型结算,等方法体闭合后再替换抽取器。
Hero Body 的 7 种形状为 `dot`、`small_I`、`boomerang`、`square`、`large_I`、`large_L`、`large_T`;每个形状由若干 `shapeRow` 布尔掩码组成,并绑定四档品质图片。这个表足够生成挖掘形状,不需要再发明形状概率。
### 同批恢复的其他小游戏数值
| 配置 | 已恢复数值 |
|---|---|
| 二十一点 / Dice Battle | 目标和 2..12 的奖励:`0,5,12,20,32,47,64,95,140,200,300` |
| 拆卡包 | 费用 `5/10/15`;四档权重分别 `65/20/10/5`、`60/20/15/5`、`55/20/15/10`;奖励数量分别 `3/4/5/7`、`6/8/10/15`、`8/12/15/25` |
| 骰子机 | 6 种对子、6 种三连与 1 个未匹配,共 13 个结果模式;奖励覆盖点数、普通/稀有装备、免费次数、祝福、地块和丹药 |
| 黄金马车 | 生命阈值 `≤75% / ≤30% / ≤0%`;点数范围 `1–2 / 2–3 / 3–4`,装备最大数 `1/2/3` |
骰子机原始模式使用零基值 `0..5`。对子模式权重/值依次为 `20,25,50,20,30,35`,三连为 `4,4,6,2,4,4`,未匹配为 `50`。这里的 `value` 应原样交给权重选择器,不要当作百分比文案显示。
## Evidence → Finding → Path
### Evidence
| ID | source_ref | hash | 复现 |
|---|---|---|---|
| E-001 | 三个 `*minigame.csv` | 见 [E-001](../work/heroll-minigame-config/evidence/E-001.md) | `Get-FileHash` + 跳过注释/类型行后解析 CSV |
| E-002 | 五个相关事件表 | 见 [E-002](../work/heroll-minigame-config/evidence/E-002.md) | 直接读取 CSV 原始行 |
| E-003 | `04_assembly-csharp.json` | `BA6D…F526` | 搜索四个 View 类与方法名 |
| E-004 | 公开社区资料 | n/a | 仅作跨版本语义核对 |
### Findings
#### F-001
- severity: n/a_re
- category: reverse_algo
- status: validated
- evidence_ids: [E-001, E-002]
- location: extracted CSV configuration
- impact: 三个缺表小游戏与四个相关小游戏可以按配置做确定性 DEMO。
- confidence: high
- remediation: n/a
#### F-002
- severity: n/a_re
- category: reverse_algo
- status: validated
- evidence_ids: [E-001, E-003]
- location: `clawcraneminigame.csv` / `ClawGameView`
- impact: 奖励目录与尺寸可信,但 `Prob/goodProb` 的完整运行时解释没有闭合;错误归一化会改变原作产出。
- confidence: high
- remediation: DEMO 使用固定场景或显式模拟权重,保留原字段以便后续替换。
#### F-003
- severity: n/a_re
- category: other
- status: validated
- evidence_ids: [E-004, E-001]
- location: public wiki vs local 2.0.1 tables
- impact: 社区资料可确认玩法目标,不能覆盖本地版本配置。
- confidence: medium
- remediation: 本地配置优先,社区资料只补 UI 文案与玩法说明。
### P-001(solve)
```mermaid
flowchart LR
A[APK 已提取资源表] -->|E-001/E-002| B[恢复地图、形状、奖励和阈值]
B -->|E-003| C[用 IL2CPP 元数据确认对应 View/结算入口]
C --> D{方法体语义是否闭合}
D -->|是| E[按配置实现]
D -->|否| F[固定模拟并保留原字段]
E --> G[小游戏 DEMO]
F --> G
```
残余风险:抓娃娃概率与 `newtile.values` 下标语义仍不可宣称为原作公式;这不阻塞当前 MVP 模拟。
## 复现与交付
PowerShell 复现示例:
```powershell
$csvRoot = 'HEROLL_APK_REVERSE_ONLY\01_core_reverse_archive\resource-tables\extracted\csv'
$rows = Get-Content -LiteralPath (Join-Path $csvRoot 'bubbleshooterminigame.csv') |
Select-Object -Skip 1 | ConvertFrom-Csv | Select-Object -Skip 1
$rows | Group-Object templateKey | Select-Object Name, Count
```
Case 时间线见 [timeline](../work/heroll-minigame-config/timeline.md),工作项见 [workitems](../work/heroll-minigame-config/workitems.md)。公开资料参见 [HEROLL Tiles](https://heroll.fandom.com/wiki/Tiles) 与 [HEROLL Blessings](https://heroll.fandom.com/wiki/Blessings)。