6.0 KiB
HEROLL 小游戏配置恢复报告
分析日期:2026-08-24
方式:本地 APK 已提取资源表与 IL2CPP 元数据静态分析;公开资料只做跨版本语义核对
结论:三个缺表小游戏的数据已经定位,足够制作 DEMO 模拟;抓娃娃概率解释仍需保守处理。
范围与结论
授权、目标和限制见 case scope。本次没有安装、修改、重打包或动态 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 | Get-FileHash + 跳过注释/类型行后解析 CSV |
| E-002 | 五个相关事件表 | 见 E-002 | 直接读取 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)
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 复现示例:
$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,工作项见 workitems。公开资料参见 HEROLL Tiles 与 HEROLL Blessings。