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

6.0 KiB
Raw Permalink Blame History

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。