昨天刚写过它的前作《break_infinity.js》——那是给增量游戏解开水上浮点 1.8×10³⁰⁸ 天花板的 第一把锁。今天这个仓库是同一位作者的第二把锁,故事完全不同:当数字大到连"科学计数法"都装不下的时候,该怎么办?答案不是修修补补,而是给数字盖一座塔。
先解释那个吓人的符号。10^^1e308 里的 ^^ 是"幂塔"(tetration,叠幂):10^^3 = 10^(10^10),三层的塔。塔高到 1e308 层——这个数没有中文名,也没有英文名,因为宇宙里没有任何东西需要用它计数,除了增量游戏玩家的存款。
增量游戏(放置/挂机类)的宿命是数字膨胀。游戏前中期,double 够用;到后期浮点爆了,于是有了 break_infinity.js——它把一个数拆成"尾数 + 指数"两个浮点存,上限推到约 1e9e15,也就是 10 的九千万亿次方。
但头部队列游戏和它们的同人变体,硬是把这条天花板也顶穿了:指数本身大到 9e15 都放不下。这时修"指数"已经没用了,因为"指数的指数"也会爆。break_eternity.js 的解法是换坐标系——每个数记三件套:
直观理解:层数每 +1,相当于把"上一个数字宇宙的全部"压缩成新宇宙里的一粒尘埃。玩家眼里是"数字又变大了",实现上只是 layer+1。常规大小范围会自动退化成普通运算,只有真到了天文层级才动用塔逻辑——所以小数字不吃性能亏。
这个底座的来历值得说一句:社区公认的谱系是,Antimatter Dimensions 这款开山之作自己写了一套 Decimal 实现应付爆表,Patashu 把这套思路拆出来、优化、泛化,先做了 break_infinity,玩家继续膨胀,又做了 break_eternity(据仓库与社区说法)。玩家需求倒逼基础设施升级,一条完整的军备竞赛:
flowchart LR
A["Antimatter Dimensions<br/>自带 Decimal 实现"] --> B["break_infinity.js<br/>上限约 1e9e15"]
B --> C["break_eternity.js<br/>上限约 10^^1e308"]
C --> D["你要做的游戏<br/>数字随便涨,永不溢出"]
这部分才是做游戏的人真正该抄的东西。增量游戏的上头机制,几乎都能在"数字表示法"上找到对应物:
1. 进度感的永动机:直觉饱和了,就换直觉。 人类对数字的直觉在 1e15 附近就饱和了——后面涨到多少,玩家只觉得"更大吧"。这是所有长线数值游戏的死穴。增量游戏社区的解法极其聪明:用"层"重建直觉。层数是玩家能数得清的整数——"我现在第 5 层,大佬在第 7 层",攀比感瞬间回来了。第 5 层到第 6 层的跨度,比从细胞到银河系还夸张,但玩家心理上只觉得"又进一步"。进度条重启,多巴胺重新接管。
2. Prestige(转生)= 官方外挂的"再来一局"。 增量游戏的标志性钩子:主动把辛苦攒的数字归零,换一种永久加成货币。玩家明明"损失"了一切,却抢着点按钮——因为转生后涨速快十倍,很快就能超过旧存档,还带着新能力。这是把"损失厌恶"反向利用的教科书案例。而 break_eternity 把 1e9e15 之后的无穷空间还给设计师:"层"本身可以直接做成玩法——一层一个世界、一套资源、一种机制,"上层"就是新游戏。
3. 即时反馈 + 离线收益,双倍钩子。 增量游戏的 tick 循环一秒跑几十次,每次结算都有数字跳动;关掉游戏再回来,离线收益一次性结算——上线即奖励。存档小到夸张:三个数就是全部状态,同步、分享、做排行榜都轻。
4. 大数即社交货币。 "我的存款是 10 的幂塔七层"——这句话本身就是传播素材。数字大到无法想象,反而是玩家截图炫耀的理由。
flowchart TD
A["玩家上线"] --> B["tick 结算<br/>Decimal 运算永不溢出"]
B --> C["买升级 / 解锁新玩法"]
C --> D["数字指数膨胀"]
D --> E{"当前层顶到了吗"}
E -- "没顶到,继续滚" --> C
E -- "顶到了" --> F["转生 / 上层<br/>数字归零,层 +1"]
F --> G["新层钩子<br/>新资源、新机制、新目标"]
G --> H["离线收益结算<br/>存档就是三件套数字"]
H --> A
表示法。核心是 (sign, layer, magnitude) 三元组。对一个库来说最难的从来不是"表示",而是运算时层层坍缩和展开还能保持精度与性能——幂塔之间的加乘运算要先把高层的塔降一层。这些脏活 break_eternity 全包了,你面对的只是一个 Decimal 类。
API 平滑迁移。Decimal 的方法名和 break_infinity 高度兼容:plus/minus/times/divide/pow/log10/max/min 一套到底,字符串序列化存档也是老格式超集(据 README)。如果你的游戏已经在用 break_infinity,迁到 break_eternity 大概率只是换个 import——这也是它敢号称"一劳永逸"的底气。
选型常识(社区共识,据两库 README):数字上限 1e9e15 以内,用 break_infinity 更省性能;打算做长线、多层转生、或者不想哪天半夜改数值底层,直接上 break_eternity。增量游戏每秒几十次 tick、每次成百上千次 Decimal 运算,性能预算要花在刀刃上——别为用不到的 10^^100 层付税。
可直接复用的组件清单:
- Decimal 类本体:数值计算层,任何前端框架无关,Canvas、React、Godot 导出的网页、微信小游戏都能跑;
- 格式化输出:把大数渲染成 1e15、1.23e1.5e9 或幂塔记法,是增量游戏 UI 的一半体验;
- 存档序列化:一行字符串存下整个游戏状态,配上版本号字段就是完整存档方案;
- 层间换算逻辑:做"层=世界"玩法时直接借用。
工程量判断:这个库单文件、零依赖,读一遍源码一晚上。真正的工作量在数值曲线设计——但那是抄得来的,后面讲。
这个仓库本身没有变现痕迹——MIT 一类的宽松协议,免费开源,作者图的是社区声望(据仓库页面)。但"用它做的游戏"恰恰是独立开发者变现效率最高的品类之一,这条生态位值得细看:
基础设施免费、应用层赚钱——和本栏此前写过的 Ren'Py、godot-card-game-framework 是同一个结构:开源底座降低了品类门槛,变现发生在每一次"有人用底座做出了爆款"。Patashu 们的回报是生态位声望和被游戏致谢,你的回报是拿现成底座两周出游戏。
点子一:境界突破换皮(推荐指数最高)。 把"层"直接翻译成中国玩家最有感觉的体系——修仙境界:炼气、筑基、金丹、元婴……一层一个大境界,突破即转生,灵石产量指数重置但"悟性"永久加成。技术上:break_eternity 管数字,一张数值表管曲线,纯 DOM/Canvas 做 UI,两周可出 MVP。变现走微信小游戏:激励视频"闭关加速",广告位完全复用 Prestige 按钮位置。关键提醒:数值曲线别自创,抄成熟增量游戏的倍率节奏(前快后慢、每层 2-4 小时一个突破点),手感是无数游戏验证过的。
点子二:给存量游戏开"第二世界"。 你手头或社区里已有 break_infinity 底子的放置游戏,迁到 break_eternity,把原本"数字到顶、玩家流失"的终点改造成"上层开启新资料片"的起点。API 兼容让迁移成本控制在一两天试水。变现:新层做成 DLC 或内购,老玩家回流本身就是一波免费召回。
点子三:大数观景台,纯流量玩法。 做一个网页:输入任意大数(或"全宇宙原子数是多少层幂塔"这类问题),用幂塔可视化渲染出来,配一句可截图分享的文案。零游戏逻辑,一周 MVP,本质是给"数字爱好者和增量游戏玩家"这个精准人群的引流入口,底部挂你自己的放置游戏链接。流量生意,和 lifeRestart 的打法同源:工具抓人,游戏收口。
npm install break_eternity.js,或直接引单文件(据仓库 README)一句话收尾:当所有人都以为 1e308 就是尽头,有人把数字盖成了塔;当玩家以为塔就是尽头,聪明的开发者把塔做成了世界。底座已经免费摆在货架上,缺的只是你那层数值表和一个突破按钮。
[!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 等场景全覆盖。
