<!-- title: 《soonfx-engine》让你上头的不是美术，是公式 -->
<!-- domain: games -->
<!-- repo: soonfx-engine/core -->

# 《soonfx-engine》让你上头的不是美术，是公式

## 仓库档案

| 项目 | 信息 |
|---|---|
| 仓库 | [soonfx-engine/core](https://github.com/soonfx-engine/core) |
| ⭐ Star | 700+（据仓库页面） |
| 语言 | TypeScript |
| 定位 | 面向 RPG 与策略游戏的数值引擎：零依赖、类型安全的公式解析（据仓库描述） |
| 协议/作者 | 本次调研未能抓取仓库页面核实，此处从略；从 owner 形态看是独立仓库，无大厂背景标识 |
| 更新状态 | 未核实 |

一句话定位：**它不做画面、不管音效、没有一张地图，只干一件事——把“你砍我一刀掉多少血、升一级之后强多少、暴击了翻几倍”这套数字规则，做成一个可以直接调用的引擎。**

在这个专栏里它是个异类：前面写过的仓库，tower_game 也好、2048 也好，都是“能玩的游戏”；这个是“能让游戏上头的底层零件”。但正因为它小到只做一件事，才更值得想搞副业的开发者认真看——皮好抄，骨架难抄。你换三套美术素材游戏还是那个游戏，可你把数值曲线换掉，同一个游戏就是三个游戏：一个三天弃坑，一个让人刷到凌晨两点。

## 这东西是什么：游戏的发动机舱

把任何一个上头的小游戏拆开，里面都藏着一个同构的循环：玩家做一个动作 → 系统按公式结算 → 数字跳出来给你看 → 数字汇入成长 → 成长跨过阈值解锁新东西 → 新东西让下一轮结算更爽。这个循环里，**“按公式结算”那一格，就是 soonfx-engine 这类数值引擎的工位**。

```mermaid
flowchart LR
    A["玩家行动<br>点一下/放个技能/收一次菜"] --> B["数值引擎结算<br>公式解析+暴击/掉落判定"]
    B --> C["即时反馈<br>伤害跳字/金币入账/进度条涨一格"]
    C --> D["成长入账<br>等级/资源/战力上涨"]
    D --> E{"跨过阈值?"}
    E -- "没跨过" --> A
    E -- "跨过" --> F["解锁新内容<br>新技能/新怪物/新乘区"]
    F --> G["曲线换挡<br>强度重新拉开差距"]
    G --> A
```

注意中间那个 B 节点：**整条循环里所有让你“爽一下”的瞬间，都要从它这里过账**。伤害跳字好不好看，是渲染问题；跳出来的数字让你想不想再点一下，是公式问题。玩家分不清这两者的区别，但身体很诚实——这就是为什么“数值”值得从游戏里单独拆出来、开一个专门的仓库。

对个人开发者来说，它的价值可以一句话说清：**当你想做第二个、第三个游戏的时候，骨架不用重写**。第一个游戏你把公式引擎调通了，第二个游戏只换题材皮和数值表。

## 为什么上头：六个钩子，全挂在数值上

把常见的“再来一局”机制逐个拆开看，你会发现钩子的尾端几乎都拴着一个公式：

**1. 即时反馈，本质是结算公式够短。** 你点一下，伤害数字 100 毫秒内跳出来。这个反馈环里没有美术什么事——同一张暴击图，跳 3 点伤害和跳 347 点伤害，爽感差一百倍。数值引擎的意义就是把结算做成了一个函数调用：进参数值，出结果事件，快到跟手。

**2. 进度感，本质是成长曲线的形状。** 前十级一小时升一级，后期一天升一级，中间靠什么续命？靠曲线在关键节点“换挡”——每次你以为到顶了，解锁一个新乘区，数字重新起飞。Cookie Clicker 为什么能让人点几万下？它的产量曲线被调成了永远“差一点就翻倍”。**曲线形状就是留存曲线**，这话不夸张。

**3. 随机奖励，本质是概率公式加保底。** 暴击、掉落、抽卡，全是“可变比率强化”——心理学上最耐斯的强化程序：奖励不确定时，行为消退得最慢。而工程上它就是几行代码：`random() < 0.15 ? 伤害*2.5 : 伤害`，再加一个防止脸黑劝退的伪随机保底。公式简单，调参是艺术。

**4. 策略深度，本质是乘区的叠加方式。** 一个游戏有没有构筑深度，看它的数值是加法还是乘法：全加法的游戏，堆数值就赢；有乘区的游戏（攻击×暴伤×元素克制×套装效果），不同乘区怎么组合，就是 build 的乐趣。Vampire Survivors 的武器合成为什么上头？合成出来的每件装备都在改你的乘区结构。

**5. 收集欲，本质是货币分层。** 金币、钻石、碎片、体力——每种货币一条产出公式、一条消耗公式，两条曲线的交点就是“想要”发生的时刻。多货币不是策划拍脑袋，是把一条大曲线拆成几条互相咬合的小曲线。

**6. 社交攀比，本质是把一切压成一个战力数。** 排行榜只需要一个数字，而这个数字是几十项属性加权求和的结果。战力公式怎么加权，玩家就会往哪里卷——**你定的权重，就是玩家的行为准则**。

看明白了吗？这六个钩子里没有一个依赖引擎、美术或联机技术，全部只依赖“公式怎么写、参数怎么调”。所以才有 soonfx-engine 这样的仓库存在——**上头是有工程解的，而且这个解小到一个人维护得过来**。

## 技术拆解

先说能确定的：据仓库描述，它是 TypeScript 写的、零依赖、类型安全的公式解析，目标场景是 RPG 和策略游戏。围绕这个定位，我们把一个数值引擎要做的事摊开：

**第一件事：公式怎么写（解析器）。** 策划的数值表里全是 `攻击*（1+暴伤）*克制系数` 这样的式子，总不能每改一个公式就重发版。所以引擎需要一个公式解析器——把字符串或配置表达式解析成可求值的结构。这就是描述里"formula parser"的含义：数值表变成数据，改表不改码。“类型安全”则是在解析和求值阶段做类型约束，防止策划把百分比填成小数、把伤害填成字符串这种经典事故——**在编译期或加载期就报错，而不是上线后玩家发现 Boss 一刀 999 兆**。

**第二件事：算得快不快（求值性能）。** 一场战斗可能要算几百上千次公式，放置游戏挂机 8 小时还要离线结算。所以这类引擎通常把解析和求值分离：解析一次，缓存成中间结构，之后每次结算只走求值。零依赖的另一个好处在这就显出来了——**没有重量级依赖，求值路径短，塞进网页、小程序、Electron 都不带包袱**，对你做广告变现的小游戏尤其友好：包体每小 100KB，首屏加载就快一分。

```mermaid
flowchart LR
    A["公式引擎<br>管'怎么算'"] --> D["你的游戏<br>RPG/放置/策略"]
    B["大数库<br>管'算多大'<br>break_infinity.js 等"] --> D
    C["数值表与曲线模板<br>管'算成什么样'"] --> D
    D --> E["上头感 → 留存 → 变现"]
```

这张图是我对这条供应链的概括：**公式引擎、大数库、数值表，三件套拼齐，任何放置或 RPG 的骨架就齐了**，而且每一件都有开源轮子。如果你打算自己动手写一个简化版，四件套够了：公式解析器、成长曲线函数族（线性/指数/幂律/分段）、暴击与掉落的随机模型（含伪随机保底）、战力评分函数。这个量级，一个周末出原型，两周能打磨到能用的程度——正好是“个人 1-2 周 MVP”的标配套餐。

## 变现观察

先说行业层面一个不太被讲透的事实：**F2P 游戏的变现设计，绝大部分长在数值曲线上**。首充双倍为什么要放在前三级？因为那是成长曲线最陡的段落，数值增量带来的爽感最强，付费意愿也最强；限时礼包为什么永远卡在卡点之前？因为“卡点”本身就是消耗曲线追上产出曲线的时刻。买量游戏算 LTV，本质是拿数值曲线的留存积分做预测。所以“会调曲线”这门手艺，在游戏行业是有明确价目的岗位——数值策划。

品类案例也现成：放置/挂机品类是网页和小游戏广告变现的常青树，插屏加激励视频的跑法被验证了十几年；Vampire Survivors 证明了“数值构筑+买断制”个人开发也能爆；本专栏写过的 A Dark Room 和 Evolve 则证明纯文字加数值就能做出口碑付费双收的东西。这条路上没有一个环节依赖重资产。

## 给我的灵感

**点子一：周末战力模拟器（工作量约 1 周，网页广告+打赏）。** 公式引擎+一条成长曲线+五个怪物的数值表，做一个“挂机模拟器”：玩家输入自己的等级和装备，页面算出打每个怪的效率和预期掉落，一键生成带数值的分享图。没有画面压力，纯数字流，社交攀比钩子（晒战力）自带传播。这是检验你数值手感的最好练手项目，分享图上的链接就是你的广告位。

**点子二：换皮放置游戏（工作量 2-3 周，广告为主+内购加速为辅）。** 骨架完全用数值引擎，皮换成当下有话题的题材——算力矿场、直播间养成、AI 训练营都行。核心验收标准只有一条：**前 30 分钟，玩家每分钟都要看到一个新的数字在变大**（新货币、新乘区、首次暴击）。放置品类广告变现的门槛极低，接个广告 SDK 就能跑，数值曲线调好了自然有人挂机看广告。

**点子三：卖铲子（持续投入，itch.io 付费或开源+收费模板）。** 把“公式引擎+若干套调好的数值表模板（放置曲线/RPG 战斗/多货币经济）+一个曲线可视化调试面板”打包成“独立游戏数值工作台”，在 itch.io 上以几美元到十几美元的价位卖，或者核心开源、模板收费。附带收益是接外包：小团队最缺的就是能把留存曲线调顺的人，工具就是你的作品集。

## 上手

- 仓库：<https://github.com/soonfx-engine/core>
- 截至本文发出，未核实到官方在线 Demo（据仓库页面）；clone 下来按 README 示例即可跑起来
- 配套邻居：[Patashu/break_infinity.js](https://github.com/Patashu/break_infinity.js)（数值膨胀专用大数库）；想看数值表长什么样的成品，翻翻本专栏写过的 Evolve 的配置文件，一行行全是曲线

最后说句实在的：这个专栏写到现在，写过的每一个上头游戏，拆到最后都是一张公式表。美术决定玩家点不点进来，数值决定玩家留不留下——而留下，才是钱。

> [!tip] 51学通信知识星球
> **星主：爱卫生**（微信：gprshome201101）——公众号「51学通信」创办者，19 年通信行业运维与讲师经验，著有《GPRS网络信令实例详解》《EPC原理与实践》《5G核心网原理与实践》三本纸质书（各大电商平台有售）。
> **星球定位**：深耕 5G 核心网、IMS、NFV/AI、云原生等 ICT 领域，主打运维岗位与信令分析。
> **当前规模**：5200 篇主题 / 990 个回答，198 元/年。
> **加入福利**：加入星球后请加爱卫生微信，拉您进知识星球年度陪伴与答疑群——不限量回复您的各种问题，另有群内分享。
> **AI 加持**：51学通信知识星球已作为 skill 接入 WorkBuddy，使用 deepseek-4-flash 在海量星球帖子中精准找贴、找视频、找 FAQ 和案例，做总结、找文档和 PPT 等场景全覆盖。

![51学通信知识星球海报-扫码加入](https://wiki.500nian.com/images/zhixingqiu_qrcode.png)
