哈基米每半小时报时一次,并开设《一掷千金》:押上背包里的任意建筑立刻开局,ABCD 选择题一关接一关(题目只私发给玩的人)。答对一题,那件建筑就升一阶(普通→优秀→稀有→史诗→传说),押多少得多少;赢到的由哈基米代收,通关或收手才发放;一题都没答就收手或掉线,押注全额没收。500 题全部是难题,难度分级:大学通识 → 专业课基础 → 研究生级 + 高难推理 → 竞赛风格精确数字 → 教授级偏题与反直觉拐弯,不考任何游戏内容。全部文案走 locale,中文优先。
Mods introducing new content into the game.
===============================================================================
Version: 0.5.0
Date: 2026-10-02
Details:
- **押注必须按品阶**(用户:"押注的东西必须是按品阶押注,否则玩家会用低等品阶的东西答第
一个任务,刷五星产品")。第 N 关只收「阶 N」的物品,一局永远从第 1 关开局 ⇒ 押注只收普通。
旧玩法是「从最低档开始逐档凑」,等于押 N 个普通答完第 1 关就能收手换优秀、再押优秀再答
第 1 关……拿送分题当提款机把普通一路刷成五星。现在想从阶 2 爬到阶 5,必须在**同一局**里
把第 2/3/4 关的难题答过去:第 N 关过关后手上这批正好升到阶 N+1,正好满足下一关的要求,
阶梯天然自洽。取物品从 take_by_quality(逐档凑)换成 take_at_level(只取指定档),
面板押注上限也跟着从「背包总数」改成「满足第 1 关品阶的那一档数量」。
拒绝时会把「这一件的品阶分布」原样念给你听(新增键 bet-tier-required / tier-part)。
- **地狱模式**(用户:"5 阶后可以用 5 阶段的去押注地狱级问答")。第 5 关答对后**不直接结算**,
先问一句「要不要押 1 个传说继续」,面板上多一个按钮(/hq hell 是保底入口);答应就从代收里
拿 1 个传说起注,进入第 6~11 题,押注/奖金按 **1→2→5→10→20→50→100**:
第 6 题 押 1 得 2 / 第 7 题 押 2 得 5 / 第 8 题 押 5 得 10
第 9 题 押 10 得 20 / 第 10 题 押 20 得 50 / 第 11 题 押 50 得 100
每题的奖金正好够下一题的押注。地狱里答错/超时,**桌上那一池 + 落袋的普通代收全部没收**;
收手或通关则「落袋代收 + 地狱池」一次性发放(同一档直接累加)。邀请有 180 秒时限,
过期按「5 星通关」安全结算(不没收),因为玩家那 5 题已经答对了。
- **独立地狱题库 600 题**(tools/gen_hell_bank.mjs 生成 + tools/check_hell_bank.mjs 自检)。
覆盖物流与运筹(EOQ、报童、安全库存、利特尔法则、M/M/1 排队、库存周转、传送带吞吐)、
化学(不饱和度、理想气体、烷烃异构、摩尔粒子数、pH、燃烧配平、质能方程)、
数学(欧拉 φ/τ/σ、卡迈克尔函数、连分数循环节、整数拆分、贝尔/卡特兰/莫兹金数、
黎曼 ζ、特殊积分、伽马函数、魔方群阶、平方和表示数)、生物(密码子总数、染色体组合、
代谢能量、半衰期)、算法(二分查找、popcount、大 O、生日界、旅行商)。75 个题族,
答案是公式/筛法/DP 当场算出来的,干扰项由近似错值构造,不存在手写错答案。
地狱题**只用纯数字与语言无关字符串选项**(连 `=`、反斜杠、换行都做了硬约束),
不引用任何 locale 选项键,因此 600 条题干之外不需要任何额外词条。
- 题库总量 5000 → **5600 题**(普通 5×1000 + 地狱 6×100)。新增键 38 个、中英成对,
并扩了 level-intro-6..11;自检(/hq selftest)的渲染样例同步更新。
- 顺手修掉四个真 bug(都不是"看起来像"的问题,跑起来就炸或算错):
① `bet-quality` 引用了一个不存在的局部变量 start_level —— 押注公告会印出 "nil";
② `status-mine` 把 M.required_level 写成了 g.required_level —— 一调 /hq status 就报错;
③ **15 处 `util.item_text` 应为 `M.item_text`** —— 只要走到地狱邀请或地狱公告就
"attempt to call field 'item_text' (a nil value)";
④ **掉线补发会吞掉玩家答出来的升阶**:0.4.x 的 on_left 写成「bet_count @ start_level +
多出来的份 @ hold_level」,当 hold_count == bet_count(答了几题但还没到顶)时
退化成「本金原样退回」—— 答了 3 题掉线、手里 8 个稀有只还 8 个普通。
现在统一按 hold_count @ hold_level 补发,和「收手」走 payout_list 的结果完全一致。
- **HUD 猫头图标重建 + 去掉按钮外形**(用户反馈:HUD 左边只显示一个橙色方块,看不见猫;
随后又要求"这个按钮直接删除,用那个猫做按钮")。
旧 hajimi-icon.png 抠图抠过头:64×64 里只有 454 个不透明像素,猫脸填充的 alpha 只有 11,
游戏里猫几乎不可见。tools/make_icon.mjs 从 256×256 的 hajimi-mod-icon.png 重新生成:
从四边洪水填充只抠与边缘连通的近白背景(猫脸内部的白色高光保留),边缘 1px 羽化,
预乘面积平均缩到 64×64(不透明像素 454 → 3542)。HUD 按钮首选
`type="sprite-button"`(引擎原生图标按钮),HUD_VERSION 升到 3,老存档的 HUD 会自动重建。
猫两侧还要求"不要按钮外形":按钮 style 换成 `transparent_slot`(vanilla 的透明叠加按钮,
无背景无边框),外层 frame 换成 `invisible_frame`,屏幕上就是一只裸猫头可点。HUD_VERSION → 4。
- **新增换声流水线 tools/make_sounds.mjs**(用户想换成许冠文的原声)。本机原本没有 ffmpeg,
已把 ffmpeg-static 6.1.1 装进隔离的 node workspace(带 libvorbis,能直接出 .ogg)。
脚本按切点表(模板 tools/cuts.example.json)从任意音视频里切 7 个事件短句:
静音掐除 → 可选 FFT 降噪 → loudnorm 到 -16 LUFS → -3dB 余量 → 5ms 淡入淡出 →
单声道 44.1k libvorbis;产出后逐个做 Ogg 二进制校验,防止数据阶段把模组带崩。
已用合成音频端到端跑通(7/7 通过,切点时长误差 <0.1s)。
- tools/apply_050.mjs 现在带三段静态检查(键集 / 占位符 / 跨模块交叉引用),
第 ③ 条就是交叉引用那段抓的;另加 --create 数据阶段与真存档探针端到端验证:
**74 项 PASS / 0 FAIL / 0 报错**(含真玩家真背包跑完「押普通 → 5 关 → 邀请 → 地狱 6 题 →
通关发 119 个传说」全程,以及真 GUI 元素 + 真 on_gui_click 的点击链)。
===============================================================================
Version: 0.4.5
Date: 2026-10-01
Details:
- HUD 入口改成**只有猫头图标**(用户:"这个打开按钮删除,留下那个猫头就可以了"):
「打开」文字按钮删掉,图标本身变成可点按钮。关键点是裸 sprite 元素**不发 on_gui_click**,
所以图标必须挂在 button 上;本机实测 button 接受 sprite=原型名 / icon+icon_size 两种写法,
这台引擎实际走的是 sprite + tool_button(/hq selftest 会打印用的是哪种,观感请你实机看)。
HUD 打上版本号 tags.hud_version=2,老存档里带回来的旧布局(裸 sprite + 文字按钮)
会被 ensure_hud 自动整块重建;鼠标悬停有 tooltip 说明怎么开面板。
- 报时**提醒玩家可以参加活动**(用户:"另外报时的时候提醒玩家可以参加这个活动"):
报时正文在原有联动句(link-1~5,你给的文案,一字未改)之后,再补一句「怎么参加」
(新增键 join-howto:点左上角猫头开面板、挑建筑、填数量、点押上开局)。
只有拍卖开启且 quality 在位时才补这句(开不了局就不画饼);关掉拍卖这句自动消失。
- **修掉一个真 bug:你丢进来的音效从来没响过。**
本机 2.1.20 实测 play_sound 的 path 查的是 **sound 原型名**:
传 "__hajimi_clock_and_auction__/sounds/report.ogg" 一律报 Unknown type
(连 __base__ 自带文件也一样报),传没注册的原型名报 "Unknown sound:"。
0.4.4 及之前只在运行期用 helpers.is_valid_sound_path 探文件(无头/真机都探不到东西),
从没在 data.lua 注册过原型 —— 所以你听到的其实一直是内置乐器兜底,不是你的哈基米原声。
现在 data.lua 按新清单 lib/sound_manifest.lua 把 7 个文件注册成 sound 原型(数据阶段 --create 通过)。
- **音效动机**(用户:"我这音效估计太短"):实测你那 7 条是合法 Ogg Vorbis、单声道 44.1kHz、
0.55~1.25 秒。现在每个事件按音高档位(同一文件不同播放速度)注册 2~3 个原型,
由 lib/sound.lua 按顺序隔几 tick 依次播出:报时/开场/答对/通关上行,答错/放弃下行,
半秒的一声变成一小段动机。新增设置「音效动机」,关掉就是原速播一次;
素材文件缺失时两种情况都退回游戏自带乐器。
顺序(哪一声先响)在 Lua 手里,所以方向感是真的;引擎自带的 aggregation 只会随机重播。
想换更长的原声:拿更长的 .ogg 覆盖 sounds/ 里的同名文件即可,不用改代码。
sounds/README.txt 同步改写(旧版写着"已在 data.lua 注册",其实没注册)。
- 玩家可见文案:只**新增** gui-hud-open-tip 与 join-howto 两个键(中英成对),
原有句子一字未改;hajimi-sound-enabled 那条设置说明里"hajimi.ogg / meow.ogg"的说法
现在已经不适用(改按事件文件名),因为是你的原文,我没动,需要的话你说一声我再改。
- 验证(本机 2.1.20 真玩家存档副本 --benchmark + 临时 dev_probe,**101 项 PASS / 0 项 FAIL**):
新增 21 项 —— 素材清单 7 事件齐全、报时/答错动机声数与原型名、超时复用答错、
动机开关来回切(缓存跟着设置走)、HUD 只剩一个可点按钮且无裸 sprite、
点猫头真的开出面板、旧布局 HUD 自动升级、报时正文含报时池 + link + join-howto、
关掉拍卖后 join-howto 消失;0.4.4 的 80 项(5000 题逐条面板渲染、永不重复九条路径、
全部押注/终局/GUI 回归)全部重跑通过。
数据阶段 --create 单独跑:0 错误(sound 原型与 .ogg 文件都通过校验)。
交付目录(无探针)再跑 300 tick:0 Error / 0 Exception,引擎加载 0.4.5。
离线 check_locale:0.4.5 全绿([hajimi]164 键全部被引用、中英键集一致、引用全有定义)。
现场还原:log / mod-settings.dat / player-data.json / mod-list.json 按 MD5 原样还回,
测试存档副本已删,回退目录(0.4.4/0.4.3/0.4.2/0.4.1/0.3.0)本轮 0 改动。
- 验不了、要你实机看:**声音到底响不响、动机好不好听**(无头没有音频系统,
play_sound 一律报错,只能证明参数形状与原型名被接受);猫头按钮的大小/留白好不好看;
报时那句参加指引的措辞。
===============================================================================
Version: 0.4.4
Date: 2026-10-01
Details:
- 难度阶梯下移(用户口径:「上一版第一二题太难,前面第一题要很容易,这样不会第一条就吓退人,
第二题稍微一点难度,但是,第三题开始上难度」):
第 1 关 极易送分(口算、单位、一眼常识)——0.4.2 那批送分题回来当第 1 关前 100 题
第 2 关 略易(一步应用题、简单科学)
第 3 关 难(大学通识 + 公式计算)——0.4.3 的第 1 关整体下移到这里
第 4 关 很难(专业基础 + 精确数字)——0.4.3 的第 2 关
第 5 关 极难(教授级偏题 + 反直觉 + 数论硬算)——0.4.3 的后三关 300 题
0.4.3 的第 3/4/5 关内容不再出现在低关卡;0.4.2 的生活常识偏难题(旧 lv3~lv5)退出题库,
只留在内容库文件里当回退素材。
- 题量从 500 扩到 **5000(每关正好 1000)**(用户口径:「文案太少了。各1000条。
这样就不会重复了……5000条基本上可以玩到结束了」)。新增生成器 tools/gen_bank.mjs:
计算/推理题由题型族程序算答案(数值参数进题干,所以每题题干唯一),
知识题从事实表 tools/fact_tables_a/b.mjs 展开(元素/首都/常数/纪录/发现/著作/机构/生物医学/数学常识),
每关 = 100 道手写种子 + 900 道补差(第 5 关 300 + 700)。
防「同一句话问 86 遍」的结构性上限:单条问法配额 CAP=60,题干与英文题干双去重,
并且**手写种子已经问过的题干生成器不允许再造第二遍**(实跑挡掉 58 条撞车)。
生成器报告:每关 900/900/900/900/700 正好达标,配额只用到 819 次封顶拒绝。
- 新增设置 `hajimi-never-repeat`(默认开):每个玩家**永不重复题目**,跨局跨天都记账;
某一关的 1000 题全部问完后才重新开一轮,并在私聊里明说一句「这一关问完了,重新开始」
(新增文案键 question-recycled)。关掉就回到旧行为(随机可重复、不记账、不报回收)。
每个玩家记 5000 个题号,实测题号本身约 55 KB 的 storage 键(不写进玩家日志)。
- MOD 图标:新增 graphics/hajimi-mod-icon.png(256×256,已裁掉生成水印),
info.json 加 "icon" 字段;模组列表里不再是默认问号图。
- 玩家可见文案:只**新增**了 question-recycled 与 hajimi-never-repeat 的设置名/说明键,
原有文案一字未改(用户口径:「请他不用改」)。
- 编译链路扩展:tools/build_bank.mjs 现在同时吃「手写种子 + bank_gen_l1..l5 补差」,
题号补零到 4 位(q1-0001…q1-1000),分段头声明每关题数供离线核对;
「中文位其实没有中文」的竖线选项(340|340、sp³|sp3、|r|<1)统一降级成语言无关字面量,
不再挤占 locale 的 [hajimi-opt] 段;REPL 里重编译可用 globalThis.__HAJIMI_RELOAD__ 绕模块缓存。
- 验证(本机 2.1.20 真玩家存档副本 --benchmark + 临时 dev_probe,**80 项 PASS / 0 项 FAIL**):
5000 题 integrity 零问题、每关正好 1000、题号全局唯一、原型引用 0、__1__ 0、每题 4 选项、
含中文的裸文字选项 0;**5000 题逐条走真实面板渲染**(题干键逐个对上 + 4 个按钮文本逐个对上 +
0 渲染报错,覆盖 lv1/lv5 各 1000 次);永不重复链路(抽满 1000 零重复、seen 正好 1000、
第 1001 次 recycled=true 且 used=1000、回收后重新记账、跨五关合计 5000 零重复、
关掉设置后 300 次出现 39 次重复且不记账不误报、私聊确实带上 question-recycled);
外加 0.4.3/0.4.2 全部老链路(品质押注、逐档取物、数量夹取、全押、无次数限制、升阶与代收
不入库、通关 12 个传说、答错/超时全没收、掉线代管两条并补发、封顶 25、0 题收手/掉线没收、
真实 on_gui_click、报时不打断、selftest/gui-test、GUI 可选字段被拒 0 次)。
离线 check_locale:0.4.4 / 0.4.3 / 0.4.2 三份目录全绿(键集一致、无重复键、引用全有定义、
Factorio 专属词命中 0 条;每关题数改由分段头声明核对)。
交付目录(无 dev_probe)再跑一次 --benchmark:0 Error / 0 Exception,
引擎日志确认加载的是最高版本 0.4.4。
- 仍需真人看:5000 题的**观感与难度手感**(第 1 关是否真的送分、第 3 关起是否够难)、
脑筋急转弯式拐弯能否接受、图标在游戏里的显示、音效是否出声、emoji 渲染。
===============================================================================
Version: 0.4.3
Date: 2026-09-30
Details:
- 题库难度整体拉满(用户口径:「全部难度太简单了…我要大学生都答不出那些,还有些要连教授
都不会的」):上一版《十万个为什么》生活常识库全部替换,500 题重新写成五级难度——
第 1 关 大学通识(大一期末级:极小值、定积分、行列式、光电效应、中心法则、1NF…)
第 2 关 专业基础纵深(本科专业课:单摆 T∝√L、sp³ 键角、C4H10 异构体、静息电位 K⁺ 外流、
B+ 树适合范围查询、索洛模型长期增长…)
第 3 关 研究生级 + 高难推理(K5 边数、φ(15)、幂等矩阵特征值、瑞利判据 1.22λ/D、
Hückel 4n+2、SN2 构型翻转、Rice 定理、Brown-Séquard 综合征、NMDA 与 LTP…)
第 4 关 竞赛风格与精确数字(白球不相邻 20 种、被 4 整除的五位数 24 个、1000! 末尾 249 个零、
7^100 个位是 1、东方站 −89.2℃、珠峰 8848.86、本福特定律 30.1%、密率 355/113…)
第 5 关 教授级偏题 + 反直觉拐弯(三门问题换门 2/3、主持人不知情时变 1/2、五门三车 3/5、
两信封悖论错在哪、100 囚犯灯泡、蓝眼睛岛的公共知识、连续统假设独立于 ZFC、
怀尔斯宣布证明费马大定理的年份、113 号 Nihonium 与 117 号 Tennessine 的命名来源…)
- 仍然**零游戏内容**:500 题不引用任何 Factorio 原型(0.4.1 那版有 445 处原型引用,现在 0 处);
离线脚本对中英题干与选项扫「Factorio 专属词」命中 0 条
- 选项新增第三种写法:两份语言通用的**语言无关文字**(2i、1/e、sqrt(2n)、2^(k−1)、log₂n 等),
公式不必硬译成中文;带中文的选项一律走 [hajimi-opt] 双语键(运行期有断言:
含中文的裸文字选项必须为 0 个)
- 内容库拆成 tools/bank_hard_l1.mjs … l5.mjs(每关正好 100 题);build_bank.mjs 的校验同时抓
题干重复、选项重复、正确项越界、题干超长、带中文却没配英文的选项、数字与文字混用,
校验不过整体不落盘
- 重复度:500 条题干零重复;同一问法模板(题干尾缀)最多复用 3 次
(对比 0.4.1 的生成题库:同一尾缀复用多达 86 次)
- 验证:真玩家存档副本 --benchmark + 临时 dev_probe,**58 项检查全 PASS、0 报错**——
含 500 题逐条走真实面板渲染(题干键、4 个选项按钮文本逐个比对、0 渲染错误)、
未答题收手/掉线两条没收路径、0.4.1/0.4.2 的全部升阶与发放分支重验、GUI 可选字段被拒 0 次;
离线 check_locale 对 0.4.1 / 0.4.2 / 0.4.3 三份目录都全绿(键集一致、无重复键、引用全有定义)。
本轮还给 check_locale 加了「按双引号安全切 Lua 参数」:选项文字里合法出现的逗号
("ΔH<0, ΔS<0")以前会被当成选项分隔符,误报成「选项数=6」
- 回退点:0.4.2(生活常识 + 脑筋急转弯)与 0.4.1(游戏内容题库)目录未改动,随时可切回
- 已知边界(照实说):无头读回的 GUI caption 是未解析的键名(实测得到 hajimi.gui-title),
所以运行期只能证明「键接对了、渲染不报错」;句子读起来对不对、
第 5 关个别冷门事实是否存在学界并列说法,仍需你进游戏判断
===============================================================================
Version: 0.4.2
Date: 2026-09-30
Details:
- 题库整本换成《十万个为什么》:500 题全部是生活常识 + 脑筋急转弯,
**游戏内容题一条不剩**(配方/科技前置/产物辨认/堆叠上限/弹匣发数这类
要翻科技树和配方表的题全部删除),玩家不用查任何游戏数据也能答
- 难度分级(每关正好 100 题):第 1 关送分题 → 第 2 关生活常识 →
第 3 关常识进阶 → 第 4 关进阶常识(要懂原理:日食位置、月相周期、潮汐成因、
并联电路、1 度电、粉尘爆炸、左心室、跨经度最广的大洲…)→
第 5 关脑筋急转弯(薪水/海马/田鸡/瀑布/球门 这类词义拐弯 + 追过第二名、
树上还剩几只鸟、时针分针重合 22 次、大象装冰箱 3 步…)
- 第 4 关的构成:旧稿第 3 关写了 174 题,前 100 题留在第 3 关,
后 74 题(光学/声学/辐射/科学史/中国文化与现代科技)自动并入第 4 关,
再加新写的 26 道原理级常识,正好 100
- 新增没收规则(用户要求:必须答满一题才能放弃):
一题都没答就点「收手」→ 押的建筑**全额没收**,不进代管、不返本;
一题都没答就掉线 → 同样没收、不留 pending;
答过一题之后收手 → 照旧按当前阶发放。
收手按钮在未答题时换成说死后果的文案(hajimi.gui-giveup-risk),
答过一题后换回普通文案
- 题库改成了「内容库 → 编译器」的链路,以后加题/改题不用碰 Lua:
tools/bank_l123.mjs + bank_more.mjs + bank_l5.mjs 是内容真源(一行一题,
文字选项写成 中文|English),tools/build_bank.mjs 负责题号 q1-01…q5-100、
每关 100 题校验、题干去重、选项 slug、以及两份 locale 的
[hajimi-question] / [hajimi-opt] 段同步重写
- locale:[hajimi-question] 500 键、[hajimi-opt] 1423 键(旧版 71 个游戏内容
选项键整段换掉),zh-CN / en 键集零差异、段内无重复键;
Lua 里不出现任何硬编码中文(数字选项两份语言通用)
- 自检网再加三条离线检查:Factorio 专属词在题干与选项里命中必须为 0
(中英各扫一遍)、每题必须正好 4 个选项、题库必须是「无 __1__、无原型引用」的
新口径(旧版本目录跑同一脚本会自动跳过这几条)
- 真玩家存档无头验证(--benchmark + 临时 dev_probe):57 项检查全 PASS,包括
500 题**逐条**走真实面板渲染(题干标签每次都是对应题号、每题面板上正好
4 个选项按钮、按钮文本与题库那 4 个逐个对上)、没收规则 4 条路径、
0.4.1 的升阶主链路与品质押注全部重验、GUI 可选字段被引擎拒绝 0 次
- 验证边界(诚实记录):无头读回的 GUI caption 是**未解析的键名**
(实测得到 "hajimi.gui-title" 而不是中文),所以运行期只能证明
「键接对了、渲染不报错」,句子通不通顺、emoji/音效/面板观感仍需真人进游戏看
- 0.4.1 目录保留在 mods 里(仍是旧的游戏内容题库,可回退),0.3.0 未动
- 重复度审计(回应上一轮"太多重复的问题"):500 条题干零重复;按问法模板(题干尾缀)分组,
同一模板最多只出现 2 次("…的能量转化主要是"分别问电动机与发电机),不再有成片的模板题
===============================================================================
Version: 0.4.1
Date: 2026-09-30
Details:
- 修复:带品质的建筑押不动。原因是面板取数量用了 inventory.get_item_count(name),
2.1 实测它不带 quality 时只数普通品质 ⇒ 一背包传说/史诗建筑在列表里算成 0 个。
现在统一逐槽扫描(含品质)统计,选中、上限、提示都按真实总数走
- 押注数量改为**玩家自己填**:选中一行不再把输入框覆盖成"全部"(默认 1),
新增「全押」按钮作为捷径;填超过可押数会夹到上限并说明,填 0/负数/空会被拦下
- 取消所有次数限制:删除 hajimi-daily-max-rounds / hajimi-daily-five-star-limit 两个设置项
与对应判定(老存档里已经存过 6/1 这种值,光改默认值对老档无效,所以整条逻辑拿掉);
今日局数与通关次数仍然统计,只作为战绩显示
- 题库改为**只考游戏里看得到的东西**(用户要求:别逼玩家去翻科技树和配方表):
删除配方原料种数/产物数/配方耗时/原料辨认/产物辨认/科技前置数量/前置科技辨认,
以及 GUI 上不显示的制造速度、采矿速度、传送带速度类题;
保留并新增:堆叠上限、弹匣发数、热值、箱子格数、血量、耗电、蓄电、空载损耗、
炮塔射程、电线杆跨距、供能范围、占地宽长、筛选行数,
以及「哪个血量最高 / 哪个格子最多 / 哪个叠得最多(最少) / 哪个炮塔射程最远」比较题
(比较题保证最大/最小值唯一,不出歧义题)
- 手写题里删掉 9 道需要开配方表/科技树的(组装机制造速度、塑料条石油气、
铜线/铁齿轮产能、电炉石炉速率等);每关仍然正好 100 题、共 500 题
- 出题地基修正:弹匣字段是 magazine_size(1.1 写法 unit.count 作兜底);
弹药/护甲/工具类不在 data.raw["item"] 里但确实是 ItemPrototype 子类,
已并入物品名集合,否则「一匣多少发」一题都出不来
- 干扰项生成规则:优先取同一字段的其它真实取值,凑不满 3 个才用变形值(×2/÷2/±1),
保证每题只有一个正确答案;关卡归属带模板配额(相邻关卡借题优先于放开配额),
避免出现「一关 37 题都在问堆叠上限」
- 文案:新增 gui-bet-all / bet-clamped;押注提示与战绩/状态行改成无限制口径
([hajimi] 159 键、[hajimi-question] 500 键、[hajimi-opt] 71 键,zh/en 键集零差异)
- 自检网加固:离线核对新增「段内重复键」检查(曾把 [mod-description] 段头覆盖掉,
导致 Duplicate key 整个 locale 加载失败);运行期完整性检查同时验证题干主体
- 真玩家无头验证:32 项检查全 PASS(传说/史诗建筑可押、起始阶取最低档、
输入 3 就押 3、999 夹到 5、全押按钮、战绩堆到 90+ 仍连开 8 局、
0 配方类/科技类题目、500 题完整性、代收不入库、通关翻倍发放、GUI 字段 0 拒绝)
===============================================================================
Version: 0.4.0
Date: 2026-09-30
Details:
- 对赌不再换建筑:**答对一题就升「同一件建筑」的品阶**(普通→优秀→稀有→史诗→传说),
押多少得多少;到传说阶后再答对则每次多送一份(数量 = 押注量)
- 新增 lib/quality.lua:阶序沿 LuaQualityPrototype.next 链数出来(2.1.20 实测
LuaQualityPrototype.tier 读不到,返回 nil);显示文字取原型自带的
{"quality-name.xxx"},跟着玩家语言走,不写死中文
- 押注改为「按品质逐档取物」:实测 inventory.remove({name=,count=}) 不带 quality 时
只匹配普通品质(对史诗堆返回 0),不改这里的话高品质建筑根本押不进去;
起始阶 = 被取走那批里的最低档(掺低级货占不到便宜)
- 代收/发放/代管全程带品质;修掉 util.merge_lists 会丢 quality/level 的问题
(史诗本金与传说加份被并成一条并降级发放)
- 题库从每关 20 题扩到 **每关 100 题,共 500 题**:
每关保留 20 道手写题 + 80 道由 tools/gen_questions.mjs 从本机 data.raw 事实生成的题
(堆叠上限、配方原料种数/产物数/耗时、血量、箱子格数、炮塔射程、制造/采矿/抽水速度、
筛选项数、耗电、蓄电、热值、建造半径、供能范围、科技前置、原料/产物/前置科技辨认);
干扰项优先取同一字段的其它真实取值,凑不满 3 个才用变形值,保证只有一个是对的
- 题干支持主体占位 __1__({hajimi-question.qN-MM} + 引擎渲染的原型名),
questions.stem() 统一渲染;离线核对新增「有主体 ⇔ 题干含 __1__」配对检查
- 题目完整性检查扩展到题干主体;生成题里的 4 个不存在原型选项(e:filter、e:smoke、
e:stone-walls、i:satellite)与 replace_rocket 影响的 i:rocket-control-unit 全部换成存在的
- 没装 quality 时不再开局并明确告知(报时照常);0.2.x/0.3.x 存档里在飞的局升级时退回
- 真玩家无头验证:67 项检查全 PASS、0 报错(升阶链、混合品质取物、代收不入库、
通关 2 倍发放、答错/超时全没收、收手按当前阶发放、掉线代管分两条、数量封顶、
真实 on_gui_click 点选、GUI 可选字段被拒次数 0、500 题完整性与每关 100 题)
- locale:[hajimi] 159 键 / [hajimi-question] 500 键 / [hajimi-opt] 71 键,
zh-CN 与 en 键集零差异、全部被代码引用
===============================================================================
Version: 0.3.0
Date: 2026-09-30
Details:
- 玩法整体重做(按用户要求):答题从「聊天打字」改为 **ABCD 选择题按钮点选**;
答完一题立即出下一题;押上就开局,不再有押注窗口
- 多人兼容:每人一局(storage.hajimi.games 一人一份,互不干扰);
题目、代收清单、倒计时只私发给玩家本人,押注与终局结果才公告全场
- 押注池改为「背包里所有建筑」:判据用 2.1.20 实测的 LuaItemPrototype.place_result
(placement_result 在本机全量为 nil;种子 place_result 指向 entity.type=plant,已排除);
材料/弹药/桶一律进不了押注池,被拒时不扣分
- 回本规则改为品阶递增:押注阶 t + 答对第 k 题 ⇒ 代收阶 min(7, t+k) 的同样数量;
阶梯按实测物料成本排序(石炉5 / 钢炉50 / 电炉935 / 组装机3型3666 / 机器人指令平台8100 /
太空平台启动包17020 / 核反应堆90550),分界取相邻两档的比中项,保证「答对一题就拿到上一档」
- 系统代收:赢到的建筑先由哈基米收着(不入背包、无法转移),只在**通关**或**收手**时一次性发放;
**答错或超时 ⇒ 押注 + 全部代收一次性没收**;掉线 ⇒ 本局取消,押注与代收转代管,上线自动补发
- 题库 100 题全部重写为选择题(选项 2~4 个、正确项随机排位、选项文本走原型名或 [hajimi-opt],
不硬编码中文);删除文本判定器 lib/check.lua 与星级奖励表 lib/rewards.lua
- 设置项调整:删 bet-window-seconds / value-rule / reward-tier / reward-build-count /
reward-robot-count / reward-roboport-count;新增 auto-open(出题自动开面板)、
reward-max-count(每种代收数量上限,默认 0 = 不封顶)
- 修复 on_load 崩服隐患:2.1 会校验 on_load 期间 storage 的 CRC,新增 s.games 键导致
"Detected modifications to the 'storage' table ... not save/load stable" 直接崩模组。
现在 on_load 什么都不做,补形状交给 state.* 懒做,迁移只在 on_configuration_changed 做
- 修复 GUI 布局字段:flow.style.horizontal_spacing 只对横向 flow 有效(纵向要 vertical_spacing)、
frame 上没有 spacing 类字段 —— 按本机字段矩阵探针改正,可选字段被引擎拒绝的次数降为 0
- 新增升级退回:从 0.2.x 存档升上来时,把没打完的全场押注原量退回(背包满则进代管)
- /hq 命令更新:bet / answer(备用) / giveup / status / escrow / claim / next / abort / tiers /
gui-test / selftest / reset-seen;旧的 next=开一轮 改为 立刻报时
- 报时不再开关局,改为只播报 + 联动句 + 三成概率的口头禅,答到一半不会再被报时打断
- 真玩家无头验证:58 项检查全 PASS(押注扣分、代收不入库、答错/超时全没收、通关/收手发放、
掉线代管补发、每日上限、面板按钮真实点击、奖励数量封顶、GUI 字段矩阵、100 题完整性)
===============================================================================
Version: 0.2.0
Date: 2026-09-30
Details:
- 不用记快捷键了:左上角倒计时条里加了哈基米小脸图标,点它就开面板;
旁边同时留了一个明确的「打开」按钮(sprite 是否发点击事件要真机确认,双保险)
- 图标资源 graphics/hajimi-icon.png(64×64 RGBA)注册成独立 sprite 原型
(utility-sprites 是单例类型,再建会报 "Only one utility-sprites instance can be defined.");
GUI 引用名实测是裸名 "hajimi-icon","utility/hajimi-icon"、"sprite/hajimi-icon" 都不被认
- 模组更新后旧版 HUD 会随存档带回来 ⇒ ensure_hud 检查缺不缺「打开」按钮,缺了就拆掉重建
- 新增音效层 lib/sound.lua:报时/开场/押注/答对/答错/超时/通关/放弃 各有提示音;
默认用游戏自带乐器采样(钟琴、颤音琴、铃)编的小段旋律,不引入任何第三方音频
- 想要哈基米原声:把 .ogg 丢进模组 sounds/ 目录就自动优先使用,
优先级 report/open/bet/right/wrong/win/giveup.ogg > hajimi.ogg > meow.ogg,见 sounds/README.txt。
抖音那类原声是别人录制的音频,模组不去抓取也不打包
- 新增设置:哈基米音效开关、音量百分比
- /hq selftest 现在会报:每个事件用原声还是内置音序、play_sound 被接受的参数形状、
失败时引擎报错原文、HUD 图标是否建成
- 0.2.0 实测(真玩家存档副本 headless):HUD = [sprite, 打开按钮, 倒计时标签];
手动破坏按钮后能自愈重建;面板/点击/刷新链路 0 报错。
音效在 headless 下 play_sound 一律报 Unknown type "__base__"(没有音频系统),
已做成"静默失败 + selftest 报原文",是否真能出声需你在游戏里确认
===============================================================================
Version: 0.1.1
Date: 2026-09-30
Details:
- 修复真机崩溃:on_player_created 里 build_hud 写了 frame.click_to_move,
2.1.20 的 LuaGuiElement 没有这个字段("LuaGuiElement doesn't contain key click_to_move.")
- 修 2.1 库存 API(这条不修,真人点「押注」会当场报错):
defines.inventory.player_main / player_quickbar 已不存在 ⇒ 改用 character_main,
并优先用 player.get_main_inventory();LuaInventory 的 get_slot_count / get_stack /
find_item_counts 也已被移除 ⇒ 改成 #inventory + inventory[i] 按槽位遍历
- 面板间距样式改用 2.1 真实存在的键 horizontal_spacing(horiz_spacing 不存在)
- HUD 不再尝试拖拽:drag_target 在 2.1 只对 player.gui.screen 里的 frame 有效
- 所有可选 GUI 字段统一走 try_style / try_prop:引擎不认就跳过并记入自检报告,
不会再因为一个字段名把整个面板炸掉;图标确认可用(sprite + "item/名字")
- control.lua 的 GUI 入口(开面板、点击、确认、关闭、HUD、定时刷新)全部包 guard_gui:
面板出问题只在日志报一次,绝不带崩 on_player_created / on_tick 主线
- 新增 /hq gui-test:逐条试探 GUI 元素与字段,✓/✗ 直接打在聊天里
- 用存档副本里的真实 LuaPlayer 做完全链路实测,全部通过、0 报错:
押注真扣物(钢板 100→93)、5 关连对发 5 星(物流机器人 0→50、机器人指令平台 0→2)、
答错押注没收不退回、放弃按答对数发 2 星(钢炉 0→10)、背包满转代管并可 /hq claim
补发、当日 5 星配额用尽后拒绝押注且一件不扣、GUI 点选→填数量→押注→交卷→放弃全程跑通
- 新增 locale 键 gui-selftest-head / done-failed / cmd-gui-test-hint(zh-CN 与 en 同步)
===============================================================================
Version: 0.1.0
Date: 2026-09-30
Details:
- 首个版本:哈基米半小时报时(整点库 8 条 / 半点库 8 条 / 8 个时段库各 5 条)
- 哈基米《一掷千金》:押注背包物品 → 5 关答题 → 按答对关卡数发建筑奖励(1~5 星)
- 100 题题库(5 关 × 20 题),判定为关键词命中 + 数字题 ±5% 容差 + 否决词优先
- 面板与 ALT+H 快捷键(可改键),左上角 HUD 显示倒计时与关卡进度
- 押注估价器(递归物料成本 + 品质倍率),可关闭「必须比上一件值钱」
- 防刷:48 轮为一个「哈基米日」,每日参与轮数与 5 星次数上限可调
- 掉线补发、背包满时代管与 /hq claim
- 全部可见文字走 locale:locale/zh-CN 与 locale/en 键集一一对应
- 数值按 Factorio 2.1.20 本机原型核验:信号灯改为 2 种;物流箱 / 星球 / 机器人指令平台
等改用 2.1 官方中文名并把俗称收进接受词;撤掉 3 道无法核验的键位题
===============================================================================