NPC 怀孕
Estimated reading time: 13 minutesNPC 怀孕是接入原版怀孕系统的桥。它不会把一个种族伪装成另一个种族,而是让新种族拥有自己的精液记录、受孕生成、周期推进、出生地点、孩子活动、宝宝称呼和转化数据。
这个系统是双向的:
- NPC 可以让 PC 怀孕。
- PC 也可以让 NPC 怀孕。
同一个怀孕种族和同一个生成器会同时服务这两个方向。
两层模型
怀孕注册分为两层:
maplebirch.npc.addPregnancy(type, config)注册怀孕种族。种族决定生成器、剩余天数、出生地点默认值、孩子配置、称呼和转化。maplebirch.npc.Pregnancy.addNpc(npcName, type, config)注册单个 NPC。NPC 决定这个角色是否参与怀孕系统、使用哪个怀孕种族、是否能怀孕或让 PC 怀孕,以及是否覆盖周期和出生地点。
这两层是分开的。一个种族可以被多个 NPC 使用;一个 NPC 也可以使用和自己 npc.type 不同的怀孕种族。
NPC 数据
新增 NPC 可以在注册 NPC 时直接启用 pregnancy.enabled。pregnancy.type 是精液记录和怀孕生成时使用的怀孕种族。
原版 NPC 不需要重新 maplebirch.npc.add(),可以用 maplebirch.npc.Pregnancy.addNpc() 单独接入。
添加种族
只添加种族名时,框架会在怀孕过滤中保留这个类型,但不会凭空生成怀孕数据。
完整注册
完整注册通常需要 generator。其它回调可选,但它们能让剩余天数显示、孩子活动和宝宝称呼正常工作。
单个 NPC 配置
当某个原版或新增 NPC 需要进入怀孕系统时,使用 maplebirch.npc.Pregnancy.addNpc()。
如果 NPC 本身的 pregnancy.type 已经写好了,也可以只传配置:
也可以写在种族注册的 npc 字段里:
注册字段
回调参数
generator(mother, father, fatherKnown, genital)
mother === 'pc' 表示 NPC 使 PC 怀孕。father === 'pc' 表示 PC 使 NPC 怀孕。
返回对象必须包含非空的 fetus 数组。如果需要进入原版出生和孩子系统,请保持结构与原版怀孕对象一致。
eta(pregnancy)
返回剩余天数,或在无法清晰显示时返回 null。
birth
birth 可以是普通对象:
也可以是函数:
框架通过 maplebirch.npc.Pregnancy.birthLocation(type, pregnancy, npcName) 读取注册数据。解析顺序为 NPC 级别 → 种族级别 → 回退为 unknown。
childActivity(childId, child)
child.activity 是此回调的推荐位置。旧式顶层 childActivity 字段在仅需注册活动时仍然有效。
返回字符串以写入 child.localVariables.activity。返回 null、false 或 undefined 表示已处理但不更改活动。
child.defaults
child.defaults 会在原版 <<endNpcPregnancy>> 创建 V.children[childId] 之后执行。它可以是普通对象,也可以是函数。
用于需要在出生后才存在的自定义孩子字段。怀孕期间需要的字段仍应由 generator 在每个 fetus 对象中创建。
child.transform
child.transform 用于兼容原版和框架新增转化。原版孩子特征存在 child.features 中,框架会在出生后写入这些字段。
常用形式是字符串:
这会写入 child.features.maplebirchTransform = 'plant'。
transform 也可以是函数,参数与 child.defaults 相同,当结果取决于父母、位置或 NPC 时使用。
text(pregnancy, count, target)
孩子配置
如果种族生成器已经由其它脚本注册,只想补孩子出生后的字段、转化或活动,可以使用 maplebirch.npc.Pregnancy.addChild()。
运行流程
ELK not loaded. Ensure /elk.bundled.js is loaded before the app.
运行时触点
npcPregnancyCycle() 是原版 time.js / pregnancy.js 中的闭包函数,框架不调用原函数,而是补丁 time.js 调用点以调用框架周期。giveBirthToChildren() 保留在原版中,通过原版 <<endNpcPregnancy>> 宏触发。
原版种族
原版种族和特殊 NPC 行为在框架中作为默认数据存在。自定义模组使用相同的种族级别和 NPC 级别配置路径,而不是添加新的硬编码分支。
