Files
HEROLL/docs/2026-08-13_gameplay-monetization-heroll-report.md

24 KiB
Raw Permalink Blame History

Heroll : Dice Roguelike 玩法、经济与商业化逆向审计

版本:1.0
日期:2026-08-13
用途:产品立项、系统设计、经济数值、客户端/服务端实现、商业化合规与 QA 验收

1. 执行结论

Heroll 的可确认核心是“公平双骰驱动棋盘推进 + 自动战斗/构筑选择 + 首领与循环成长 + 多层局外养成”。它不是单一抽卡游戏,也不是纯棋盘游戏:骰子提供不确定路线,地块把路线转换为战斗、奖励或事件,装备/遗物/Joker/宠物/坐骑等系统承担长期构筑,体力、票券、AFK、日周任务和赛季内容维持回访。

样本商业模式是高密度混合 F2P:

  • 声明 397 条商品配置,其中 CASH 343、DIA 28、AD_WATCH 22、FREE 4。
  • 现金配置价位 0.99–119.99 美元,中位数 8.99;99 条低于 5 美元,11 条不低于 50 美元,2 条不低于 100 美元。该价格是配置值,不是当前地区商店报价。
  • 23 种抽取动作中有 7 种广告入口、1 种免费入口;样本保底配置含装备 20、强化装备 50、坐骑 400。
  • 同时存在奖励广告、插屏、去广告、体力/票券、抽卡、通行证、订阅/VIP、AFK 加速、猪猪存钱罐、阶段通关礼包和大量宠物/装备/遗物/坐骑成长商品。
  • 部分商品不只是加速,而是影响局内结果:首领防御、监狱脱出、好地块、开局装备和循环点数。

最重要的 GDD 修正是:现有 GDD 中“广告 + 可选抽卡/礼包、避免不可逆战力”的内容属于新项目建议,并不代表 Heroll 样本的实际商业化。样本实际包含直接战力与局内结果控制。后续开发应明确选择“高还原商业模型”或“公平骰子商业模型”,不能把两者混写。

本报告选择后者作为开发基线:付费购买节奏、外观与便利,不购买已生成随机结果的反悔权;所有战力有稳定免费路径;启动期只保留一个通行证、一个月卡和有限 SKU。

2. 证据边界与可信度

2.1 已验证

  • XAPK 静态解包、Android 清单、Unity 资源表、IL2CPP 元数据名称、现有 GDD。
  • 158 张表、13,890 行结构化数据;核心棋盘、骰子、内容、资源、商店、抽卡、保底、AFK、通行证等参数。
  • 桌面 Google Play Games 版本成功启动并进入 Running/前台可见状态。
  • 运行时观察到 Normal 模式、boss_0 对应 Board_Boss001(Clone)、棋盘场景初始化与局内存档事件。
  • AppLovin MAX、奖励广告、插屏、Unity IAP/购买服务完成初始化或加载。

2.2 受限

样本是 Unity 6000.2.15f1、IL2CPP ARM64。受保护/噪声元数据限制,本轮恢复的是可读类型、字段和方法名,以及结构化资源表,不是完整原始 C# 方法体。本文提到“源码入口”时,准确含义是“由 IL2CPP 元数据恢复的方法签名与 Java/Android 包装层”,不是开发者源代码泄露。

桌面控制通道没有暴露可操作窗口,因此没有伪造逐按钮点击记录;本次“试玩”能确认启动、场景与系统初始化,但没有实际付款、广告领取、完整一局结算或逐页面 UI 走查。运行证据与静态结论在文中分开。

2.3 结论标签

标签 含义
Validated 表格、元数据、清单或运行日志直接支持
Inferred 由类型/方法名、字段与多张表联合推断,方法体未恢复
Recommended 面向新项目的设计决策,不宣称原作如此

3. 试玩与运行时观察

观察项 结果 结论级别
启动 包 com.percent.aos.rollinghero 成功启动,标题 Heroll : Dice Roguelike Validated
运行环境 808×1440,60 FPS 上限,前台状态 Running/isVisible Validated
场景 Normal 模式;boss_0 → Board_Boss001(Clone);Board SceneManager Init Complete Validated
局内状态 Time tracking、double stack spawn、Ingame Save 日志出现 Validated
广告 奖励广告与插屏加载完成 Validated;加载不等于展示
购买 Percent.Purchase / Unity IAP 初始化成功 Validated;初始化不等于成交
商品可用性 当前 Google Play Games 会话中多个货币、体力、遗物、通行证、地块包和活动商品 unavailable Validated;不能外推移动端永久状态
稳定性 观察区间内没有致命崩溃 Validated,限当前会话

脱敏运行证据见 ../analysis/gameplay-monetization/evidence/runtime-session-2026-08-13.md。

4. 玩法还原

4.1 核心循环

flowchart LR
    A["消耗体力并创建 run_id"] --> B["投掷两枚骰子"]
    B --> C["提交随机结果与移动路径"]
    C --> D{"落点类型"}
    D -->|战斗| E["Prepare → Spawn → PreBattle → Fight → PostBattle"]
    D -->|奖励/商店/事件| F["获取资源或做构筑选择"]
    D -->|负面/Joker| G["承受或修正规则"]
    E --> H["装备、武器状态、增益与掉落"]
    F --> H
    G --> H
    H --> I{"首领/循环检查"}
    I -->|继续| B
    I -->|首领| J["Boss 战与阶段结算"]
    J --> K["局外成长、商店、任务、AFK"]
    K --> A

元数据入口支持的调用链为 DiceButton.ClickButton/CanAutoRoll → BoardController.ClickDice/RollDice/MoveTile/HandlePlayerTileLanding → BattleController.Prepare/Spawn/PreBattle/Fight/BattleEnd。BoardController 还暴露 BossDiceCounter、AddLoopLevel、UseRevive 和存档/恢复入口。

4.2 骰子与棋盘

  • 骰子表包含 36 个有序结果,每个权重 10,因此在未发现额外修正的基础表层是等概率的;其中 6 个为双骰相同。
  • 棋盘表 777 行:Normal 762、Hard 15;Normal 阶段 0–51,循环层 0–14。
  • 阶段表有 53 个 enabled stage,覆盖 6 个生态/主题区。
  • 地块共 82 个定义,46 个 enabled。地块不仅触发战斗,也承载商店、奖励、负面和特殊规则。
  • JokerEffectController 的方法名显示存在正负规则修正,例如生命损失、破坏增益、双倍掷骰点、按循环扣分、商店进入失败等。具体数值仍应以对应资源表为准。

设计意义:玩家的主决策不是“选骰面”,而是“在不可控移动中管理可控构筑”。因此付费若直接改写已提交骰面或落点,会伤害产品最核心的公平感。

4.3 战斗与构筑

  • 战斗使用 Prepare → Spawn → PreBattle → Fight → PostBattle 五阶段,适合事件总线、可回放日志和明确的结算时点。
  • 样本可确认 202 个敌人、13 种武器状态、58 个 augment(31 enabled)、20 个 relic、65 个 Joker(61 enabled)、35 件 equipment。
  • 首领运行日志可见 boss_0;运行时资源列出 20 个常规首领与 6 个影子首领 prefab。
  • 基础暴击伤害参数为 150。未恢复完整伤害方法体,因此不在此杜撰最终伤害公式。
  • BoardController.UseRevive 证明存在复活链路;复活成本、次数与具体 UI 时机没有方法体或本次点击证据,应作为配置项实现。

推荐实现:所有战斗奖励只在 PostBattle 生成一次事务;动画可以重播,经济发放不可重放。装备、遗物、宠物和坐骑的属性计算必须使用统一 stat snapshot,方便服务端校验、回放和付费优势审计。

4.4 解锁与长期循环

样本表支持以下解锁节奏:

阶段 解锁
1 自动掷骰、AFK/离线收益
2 强化抽取
3 药水战斗
4 无限/日常地牢
5 Raid、Destiny
6 收集系统
第 6 天 坐骑相关内容

这是典型的分层留存设计:首日先让玩家理解掷骰、落点和战斗;随后逐步叠加 AFK、抽取、限次玩法、Raid 和收集。开发时应把解锁表做成数据配置,并用 feature_id + condition_type + condition_value 表达,避免客户端写死。

5. 经济系统还原

5.1 关键参数

系统 样本值 开发含义
开局体力消耗 5 每次开始事务先扣除,技术退出可宽限恢复
体力恢复 600 秒/1 必须使用服务端时间
体力上限 40 约等于满体力 8 局
VIP 体力上限增量 +20 属于付费便利,不应附带战斗属性
每日局内钻石上限 100 UI 应显示剩余额度
药水票上限/恢复 10;3600 秒/1 到上限需通知,避免隐性浪费
连胜保留钻石成本 100 属于损失规避型消费,应慎用
周常地牢广告奖励 +50 奖励广告入口
Raid 广告奖励 +50 奖励广告入口

5.2 资源架构

经济不是简单的金币/钻石双币制,而是:

  1. 软货币:金币、stage_gold 等,承担升级与日常商店。
  2. 硬货币:钻石,连接付费、抽卡、体力与部分局内辅助。
  3. 玩法票券:药水票、Raid 票、坐骑活动票等,分割玩法频次。
  4. 专属兑换币:遗物灵魂、Raid 币、Destiny 币,形成确定性目标。
  5. 进度资源:通行证经验、clearLoop、养成碎片。
  6. 局内辅助:道具 600–604 及其运行时消耗态,连接随机结果与商业化。

开发资源源汇、付费暴露和硬性护栏已经拆成 economy-resource-map.csv。所有资产变化都必须落 economy_flow,字段至少包含 transaction_id、resource_id、delta、balance_after、source_or_sink 和 reason。

5.3 AFK

样本 AFK 参数:

  • 最长离线 1440 分钟。
  • 快速 AFK 等价 360 分钟,每日最多 3 次,消耗 15 体力。
  • 每日最多 1 次广告快速 AFK。
  • 倍率 1.0/1.2/1.5,权重 65/25/10。

推荐保留 24 小时上限和每日一次广告加速,但快速收益不应同时收取体力与现金。领取前显示确定收益;服务器重算时长,本机改时无效。

6. 商业化系统还原

6.1 商品目录

shopproductlist.csv 声明 397 条记录:

支付类型 条数 占比
CASH 343 86.4%
DIA 28 7.1%
AD_WATCH 22 5.5%
FREE 4 1.0%

目录中包含大量永久/历史/季节/触发条目;“声明存在”不等于当前全部上架。当前 Google Play Games 会话确有多项 unavailable,说明目录、平台商品映射和实际可售状态必须分层。

审计脚本按内容物和命名做的启发式分类显示:宠物成长相关 146、钻石 63、阶段触发 45、装备成长 24、季节包 20、通行证 16、体力/票券 15、遗物成长 14、金币/AFK 11、局内结果控制 10、地块成长 10 等。该分类用于评审,不是官方商品 taxonomy。

6.2 抽卡与保底

gachatype.csv 支持 shop/pet、relic、advanced relic、equipment、advanced/enhanced equipment、superball 和 mount 等 23 种动作。7 个动作以广告驱动,1 个免费,其他使用钻石、遗物灵魂、活动票等。

gachaceildata.csv 的样本保底:

池 上限 达保底前是否重置
advanced equipment 20 否
enhanced equipment 50 否
mount 400 是

坐骑 400 抽对新项目过深。推荐启动期硬保底不超过 80,并同时提供重复品转换、定向兑换、概率版本和可见的剩余保底。抽取必须服务端权威,扣费和发奖原子化。

6.3 通行证、订阅与日常消费

样本 normal pass 含 6 个日任务、9 个周任务、3 个挑战任务;普通玩法经验上限 200、高级上限 400;每日 3 次刷新;循环通关给予 10 XP。商品目录还包含普通、Raid、坐骑等多个 pass 家族以及 subscription/VIP。

dailypurchasereward.csv 使用购买点数 0/1/2/4/7/10/13 累进奖励,构成“当日继续消费以追下一档”的刺激层。建议新项目不采用,改为纯玩法活跃里程碑。

6.4 广告与去广告

Android 清单与 SDK 清单支持 AppLovin MAX 及多家聚合网络,Manifest 同时包含广告标识/AdServices 与 Google Play Billing。元数据入口包含:

  • AdvertiseManager.ManagerInitProcessing、CheckInterstitialUser、ShowRewardVideoAsync、AddAdCount。
  • ResultView.ClickADReward、ClickWeekDungeonADReward、GetMultipleReward。
  • AFKView 广告领取与快速领取。
  • PrepareView.ShowADTicketBoost。

这说明广告不是单一结算加倍,而是跨结算、地牢、AFK、入场资源和商店的系统级货币入口。推荐首发只保留四个奖励位:结算加倍、每日体力、AFK 加速、商店刷新;每日完整奖励总上限 6。插屏只在返回大厅后的自然断点,至少 3 局且间隔 10 分钟。

6.5 直接战力与局内结果控制

item.csv 与商品表能对应出以下重点:

功能 样本获取方式 风险
首领防御/闪避 钻石/商品内容物 直接降低局内失败概率
监狱脱出 钻石/商品内容物 付费消除随机惩罚
好地块 钻石、广告、商品 改变落点收益体验
开局装备 钻石、广告、商品 加快单局成型
循环点数 钻石、广告、商品 加速进度/成长
装备、宠物、遗物、坐骑 抽卡和现金礼包 长期直接战力

这是本次审计最关键的 Finding:样本实际商业化跨过“只卖便利”的边界。若新项目保留这些道具,必须改为局前选择、每类单局最多 1、均可游玩获得、排行榜禁用,且不得在玩家看到坏骰子或失败结果后即时售卖。

7. 源码/元数据调用链

flowchart TB
    DB["DiceButton"] --> BC["BoardController"]
    BC --> BT["BattleController"]
    BC --> JE["JokerEffectController"]
    BT --> RV["ResultView"]
    PV["PrepareView"] --> BC

    RV --> AD["AdvertiseManager"]
    AFK["AFKView"] --> AD
    GV["GachaButton"] --> SM["ShopManager / Purchase Service"]
    SP["ShopPage"] --> PC["PurchaseConfirmView"]
    PASS["PassView"] --> PC
    PS["PigBankView"] --> PC
    PC --> SM
    SM --> TX["平台回执校验"]
    TX --> WALLET["Wallet / Entitlement / Save"]
    AD --> WALLET

调用链只证明系统边界和可调用入口。商品价格查找由 ShopManager 承担;PurchaseConfirmView 负责确认;ShopPage 包含阶段通关商品与每日商店刷新;SpecialShopView 包含每日购买点与奖励刷新;ResultView、AFKView 连接奖励广告;GachaButton 检查成本并扣除;PassView 校验商品与发奖。

开发建议把它重构为四个独立域:

  1. GameplayDomain:骰子、棋盘、战斗、构筑、run save。
  2. EconomyDomain:钱包、资源流水、奖励预览、原子发放。
  3. CommerceDomain:目录、可用性、价格、本地化、回执、权益。
  4. AdsDomain:placement、资格、频控、播放证明、奖励事务。

UI 只能发意图,不直接改余额。无论广告还是 IAP,最后都进入统一 GrantReward(transaction_id, reward_bundle)。

8. 与现有 GDD 的差异

主题 现有 GDD 表述/倾向 样本证据 必须做出的开发决定
核心循环 双骰、棋盘、战斗、构筑、首领、局外成长 表格、元数据与运行日志一致 保留,作为产品身份
随机公平 建议 deterministic seed 与可复现 36 结果基础等权;存在改运商品 坚持 seed 提交后不可付费改写
商业模式 倾向广告 + 可选抽卡/礼包 397 商品、多 pass/订阅、直接战力与局内控制 GDD 必须新增“样本现状”和“推荐规则”两列
战力付费 建议不卖不可逆战斗力 装备/宠物/遗物/坐骑现金加速 新项目禁止现金专属属性,战力差设上限
广告 建议可选广告 22 条 AD_WATCH,多个系统级入口,另有插屏 收敛 placement、设置日上限与插屏频控
阶段礼包 GDD 未充分展开 大量 stage clear/trigger 商品 仅成功后大厅展示;禁用失败后即时推销
日购奖励 GDD 未充分展开 0/1/2/4/7/10/13 购买点奖励 启动期移除,改玩法活跃里程碑
平台商品 假设正常上架 当前 GPG 多项 unavailable 目录与平台 availability 分离,空壳 SKU 隐藏

9. 推荐的首发商业模型

9.1 产品原则

  1. 公平骰子:付费不改变已生成骰面和落点。
  2. 卖节奏不卖结局:体力、通行证和养成可加速,但免费玩家能在一个赛季达到所有关键门槛。
  3. 广告自愿:奖励广告关闭不扣基础奖励;插屏只在自然断点。
  4. 少而可懂:首发付费 SKU 不超过 12,一个通行证、一个月卡。
  5. 先展示价值再确认价格:内容、概率、保底、有效期和重复规则均在付款前可见。
  6. 技术可信:回执服务端校验,发货幂等,目录版本化,可恢复购买。

9.2 建议首发 SKU

SKU 类型 数量 建议价位 内容边界
新手支持包 1 0.99 外观 + 少量通用资源;无专属战力
钻石包 5 2.99/4.99/9.99/19.99/49.99 首购加赠只一次,赠送钻分账
去插屏 1 2.99–4.99 永久去强制插屏,保留自愿奖励广告
月卡 1 4.99–6.99 每日钻石、去插屏或便利;无战斗属性
28 日通行证 1 7.99–9.99 外观、便利、确定性资源;单一高级轨
里程碑庆祝包 2–3 2.99–9.99 仅成功后展示一次,无失败倒计时

启动期不启用 99.99/119.99 档、不启用猪猪存钱罐、不启用每日消费阶梯、不销售现金专属宠物/坐骑/装备词条。

9.3 付费优势预算

  • 定义 EffectivePower = 关卡成功率、平均战斗时长和资源获取速度的归一化组合,而不是仅看面板战力。
  • 同等活跃度、同赛季的付费加速组相对免费组,P50 EffectivePower 优势不超过 15%。
  • 首通、竞速、排行榜模式禁用局内辅助道具。
  • 任何现金商品内容物都必须能映射到 free_acquisition_path;CI 检查为空则阻断发布。

10. 开发规格

10.1 事务状态机

购买状态:CatalogAvailable → UserConfirmed → PlatformPending → ReceiptVerified → Granted。失败和取消都不可发货;Granted 对同一 platform_transaction_id 幂等。

广告状态:Eligible → Loaded → Started → CompletedProof → Granted。Loaded 不记完成次数,播放失败不扣资格,CompletedProof 重复回调不重复发奖。

抽卡状态:Quote → CostReserved → ServerRolled → ResultCommitted → RewardGranted。任一步失败要么完整提交,要么完整回滚,禁止扣费成功但结果丢失。

10.2 配置键

配置 默认值
energy.cost_per_run 5
energy.regen_sec 600
energy.base_cap 40
energy.retry_grace_sec 120
ad.rewarded.daily_cap 6
ad.interstitial.min_runs 3
ad.interstitial.cooldown_sec 600
commerce.allow_midroll_offer false
offer.post_failure_disabled true
pass.duration_days 28
pass.premium_tiers 1
store.launch_sku_cap 12
store.price_ceiling_usd 49.99
gacha.pity_hard_cap 80
power.paid_advantage_cap 0.15
purchase.receipt_server_verify true

完整规则与验收条件见 ../design/gameplay-monetization/specs/economy-and-monetization-rules.csv。

10.3 QA 必测

  • 固定 seed 下,付费/非付费账户的骰子序列一致。
  • 掷骰提交后没有购买、广告重掷或落点替换入口。
  • 断线重连不会重复扣体力、重复发结算、重复发广告奖励或重复发 IAP。
  • 拥有去插屏权益后不再请求强制插屏。
  • 商品 unavailable 时 UI 隐藏 SKU,且不留空价格按钮。
  • 概率、保底剩余、重复转换和卡池有效期在付款前两步内可见。
  • 失败后 30 分钟内阶段礼包曝光数为 0。
  • 免费玩家在模拟赛季中可以达到所有玩法门槛;付费组有效战力优势不超过 15%。
  • AFK 由服务端时间计算,修改本机时间不能增加收益。
  • 退款、延迟订单、恢复购买、重复回调、跨设备登录均有自动化用例。

11. Evidence → Finding → Path

11.1 Evidence

ID 证据 SHA-256/状态
E-101 GPG 启动日志:包、标题、显示和 Running 状态 动态日志;脱敏摘录
E-102 广告与购买初始化日志 动态日志;脱敏摘录
E-103 当前平台多商品 unavailable 动态日志;脱敏摘录
E-104 Normal、boss_0、棋盘初始化与存档日志 动态日志;脱敏摘录
E-105 原始 XAPK 439D532704AFCCDBEBA8C01AF7869552387CDE31651963D0A45541F252B94E2F
E-106 confirmed-parameters.json DD99093E21F850C85AA1CE5806F77F9E8ED309F10A38AE17A50D272BE7584B0A
E-107 gameplay-types.csv DC96B51FBFBC1232339A1F56E63513B823FEB7489386297B9072FB9DBD5B1FA9
E-108 shopproductlist.csv 698DED1525EFD8F6CFD87E3FB93818C357DA3016CB2367118A39D2B19B26DD1A
E-109 gachatype.csv DEC5970C27A348DB0674B4E834130317D6B9917B1BF869804AA33BF1055D6D9D
E-110 system-summary.json C29F1ED5039C1CCC88F5FA20B98CCE840FA78957ED8A7D7F60AFB03161269236
E-111 现有 GDD index.md 8C0B05D8F0DB8207F9C1AF19D399A24EA54943530AE26F99468691A402EA6E03
E-112 原逆向报告 FF8D0E0266931CB4C4FAD93A24A04851222B0399631D1F9747203F51DCF3C15A

11.2 Findings

ID Finding 证据 置信度
F-101 双骰—棋盘—战斗—构筑—首领—局外成长是稳定核心循环 E-104/E-106/E-107/E-111 高
F-102 样本采用广告、IAP、硬币、体力/票券、抽卡、通行证和订阅叠加的混合商业架构 E-102/E-106/E-108/E-109 高
F-103 样本存在直接局内结果控制和长期战力付费,与 GDD 的克制建议不同 E-106/E-108/E-111 高
F-104 397 条声明商品、343 条现金项和大量 trigger/pet 商品意味着商店复杂度与运营负担很高 E-108 高
F-105 当前 GPG 购买服务初始化成功,但多项商品 unavailable;需要平台可用性层 E-102/E-103 高,限当前平台会话
F-106 AFK、日周任务、多副本、多个成长线与 pass 共同承担长期留存 E-106/E-107/E-111 高

11.3 Paths

ID Path 对应 Finding
P-101 DiceButton → BoardController → BattleController → ResultView → Meta progression F-101/F-106
P-102 Shop/Gacha/Pass/PigBank → PurchaseConfirm → ShopManager/Purchase → Receipt → Wallet/Entitlement F-102/F-103/F-104/F-105
P-103 Result/AFK/Prepare → AdvertiseManager → CompletedProof → Reward transaction F-102/F-105

12. 交付物

  • 样本商业化标准化目录:../analysis/gameplay-monetization/tables/monetization-products.csv
  • 抽卡动作表:../analysis/gameplay-monetization/tables/gacha-actions.csv
  • 玩法/商业调用入口:../analysis/gameplay-monetization/tables/gameplay-commerce-callflow.csv
  • 统计摘要:../analysis/gameplay-monetization/tables/audit-summary.json
  • 可复现生成脚本:../analysis/gameplay-monetization/scripts/build_design_audit.py
  • 商业规则:../design/gameplay-monetization/specs/economy-and-monetization-rules.csv
  • 付费墙审计:../design/gameplay-monetization/specs/feature-paywall-audit.csv
  • 资源源汇:../design/gameplay-monetization/specs/economy-resource-map.csv
  • 埋点字典:../design/gameplay-monetization/specs/analytics-events.csv
  • 可筛选开发工作簿:../outputs/heroll-gameplay-monetization-20260813/Heroll_Gameplay_Monetization_Development_Pack.xlsx
  • 范围与时间线:../analysis/gameplay-monetization/case/scope.md、../analysis/gameplay-monetization/case/timeline.md

13. 最终产品决策

Heroll 值得借鉴的是“骰子制造局势、构筑解决局势”的张力,以及把短局、循环、首领、AFK 和多成长线串成长期产品的能力。最不应原样照搬的是高 SKU 密度、多个 pass/订阅层、当日购买阶梯,以及在坏随机或失败附近出售结果修正。

新项目的商业化应服从玩法:玩家可以为更多尝试、更快收集、更漂亮的表现和更省时间付费,但不能为撤销刚刚发生的坏骰子付费。这个边界一旦写进随机提交、商品触发和 QA 验收,玩法公平与收入系统才能长期共存。