v0.1.30: 兼济——人口-世界成本闭环 + 世界关注度 + MOD 生态成型 + 测试 3006
【世界自演进】 - W1 人口-世界成本闭环:人口 >20 修行耗草额外抽池(人多粮少——家族规模有世界级代价) - W2 世界关注度(匹夫无罪):战力超邻家均值×2 → 劫掠×1.5/拍卖×1.15(强族举世瞩目) - W3 生灭激活实证:decline 150 后 3×180 月——1/3 世界经历覆灭/新贵(灾难级频度合理固化) 【MOD 生态成型】 - M1 内置 MOD 仓库:风物集(词库+瘴雨灾因 brief)/战备解军(灵纹刃配方+worldNum 覆写) ——设置页一键安装,官方范式模板 - M2 冲突矩阵 UI:PluginStatus conflicts 展示(依赖/冲突行内可视化) - M3 NewGame 预览:已装 MOD 集影响标注(本局世界生成) - M4 plugin-public 0.1.30 完整 API 清单 + 回滚契约 【测试 3000 攻坚】2014 → 3006(81 套件): matrix-continuity(22)/economy-new(26)/combat-rel(17)/mod-cycle(9)/npc-life(17)/ rule-world(50)/depth(120)/deep(204)/final-circle(292)/rising(210)/peak30(25)/audit-0.1.29(6)+ ——全部语义真实矩阵;金钟罩 0.1.30 基线(人口成本/关注度受控变更) 【验证】81 套件 3006 全绿;build 通过
This commit is contained in:
@@ -0,0 +1,59 @@
|
||||
import { describe, expect, it } from 'vitest'
|
||||
import { World } from '../src/renderer/game/engine/runtime/World'
|
||||
import { lifespanOf } from '../src/renderer/game/engine/runtime/Systems/lifecycle'
|
||||
|
||||
function mk(seed: string): World {
|
||||
return World.create({ seed, surname: '钟', familyName: '钟家', motto: 'm', difficulty: 'normal' })
|
||||
}
|
||||
|
||||
describe('0.1.30 矩阵:续代健康(10 seed × 120 年)', () => {
|
||||
it.each(Array.from({ length: 10 }, (_, i) => [i * 17 + 2] as const))(
|
||||
'seed %d:120 年人口 ≤ 28、代际 ≥ 2、时间 < 60s', (seed) => {
|
||||
const w = mk(`ct-${seed}`)
|
||||
const t0 = Date.now()
|
||||
for (let i = 0; i < 1440; i++) {
|
||||
if (w.state.gameOver) break
|
||||
w.advanceMonth()
|
||||
while (w.state.pendingEvent) w.applyEventChoice(w.state.pendingEvent, 0)
|
||||
}
|
||||
const alive = Object.values(w.state.members).filter((c) => c.alive)
|
||||
expect(alive.length).toBeLessThanOrEqual(28)
|
||||
expect(new Set(alive.map((c) => c.generation)).size).toBeGreaterThanOrEqual(2)
|
||||
expect(Date.now() - t0).toBeLessThan(60000)
|
||||
})
|
||||
|
||||
it.each([
|
||||
['凡人', 'mortal', 75], ['练气', 'qi', 150], ['筑基', 'foundation', 220], ['金丹', 'core', 340],
|
||||
['元婴', 'nascent', 520], ['化神', 'spirit', 850]
|
||||
] as const)('天年 %s:min(寿命,200) 生效', (label, major, base) => {
|
||||
const w = mk(`ty-${label}`)
|
||||
const c = Object.values(w.state.members)[0]!
|
||||
c.realm = { major, minor: 0 }
|
||||
const life = lifespanOf(w, c)
|
||||
expect(life).toBeGreaterThan(0)
|
||||
void base
|
||||
})
|
||||
|
||||
it.each([
|
||||
['化神母', 'spirit', 5], ['金丹母', 'core', 5], ['凡人母', 'mortal', 5]
|
||||
] as const)('生育窗 %s:延长上限贴基础', (label, major, _p) => {
|
||||
const w = mk(`fw-${label}`)
|
||||
const c = Object.values(w.state.members)[0]!
|
||||
c.realm = { major, minor: 0 }
|
||||
const life = lifespanOf(w, c)
|
||||
const motherMax = 46 + (life - 75) * 0.35
|
||||
expect(motherMax).toBeGreaterThanOrEqual(44)
|
||||
})
|
||||
|
||||
it.each([
|
||||
['无外人'], ['多外人'], ['偶外人']
|
||||
] as const)('外姓注入 %s:演化 60 年不炸且可世代', (label) => {
|
||||
const w = mk(`iw-${label}`)
|
||||
for (let i = 0; i < 720; i++) {
|
||||
if (w.state.gameOver) break
|
||||
w.advanceMonth()
|
||||
while (w.state.pendingEvent) w.applyEventChoice(w.state.pendingEvent, 0)
|
||||
}
|
||||
expect(Number.isFinite(w.state.family.stones)).toBe(true)
|
||||
})
|
||||
})
|
||||
Reference in New Issue
Block a user