v0.1.0: 仙途家族志 · Chronicle of the Immortal Clan
家族模拟器首版:修仙/经营/战斗/外交/叙事全套系统 - Electron + React + TS + MetonaSqlark(aria+OPFS) - 水墨中国风 UI - 引擎种子随机、确定性可回放 - 19 项单元测试、端到端冒烟验证
This commit is contained in:
@@ -0,0 +1,117 @@
|
||||
import { RealmMajor } from '../types/domain'
|
||||
|
||||
export interface EnemyDef {
|
||||
id: string
|
||||
name: string
|
||||
realm: RealmMajor
|
||||
strength: number
|
||||
icon: string
|
||||
desc: string
|
||||
}
|
||||
|
||||
export const ENEMIES: EnemyDef[] = [
|
||||
{ id: 'e-huiyuan', name: '灰狼王', realm: 'qi', strength: 0.8, icon: '狼', desc: '啸聚山林的妖兽头领,凶性难驯。' },
|
||||
{ id: 'e-tiebei', name: '铁背熊罴', realm: 'qi', strength: 1.1, icon: '熊', desc: '皮糙肉厚的山中猛兽,以力御敌。' },
|
||||
{ id: 'e-muche', name: '赤瞳木魅', realm: 'foundation', strength: 1.0, icon: '木', desc: '千年老树成精,嗜血成性。' },
|
||||
{ id: 'e-baiqi', name: '白骨修士', realm: 'foundation', strength: 1.2, icon: '骨', desc: '枯骨道人的傀儡余孽,邪气森森。' },
|
||||
{ id: 'e-huanhan', name: '幻寒螭', realm: 'core', strength: 1.15, icon: '螭', desc: '远古寒螭之遗种,吐息生霜。' },
|
||||
{ id: 'e-yeshen', name: '夜哭古影', realm: 'core', strength: 1.3, icon: '影', desc: '怨念凝结,闻见其声者神魂惑乱。' },
|
||||
{ id: 'e-jiaoyun', name: '焦云妖鹤', realm: 'nascent', strength: 1.2, icon: '鹤', desc: '焚山煮海的老妖,万兽避让。' },
|
||||
{ id: 'e-kuangzun', name: '堕墟魔尊', realm: 'spirit', strength: 1.5, icon: '魔', desc: '屠戮一族的魔道巨擘,举手投足皆天威。' }
|
||||
]
|
||||
|
||||
export interface MissionStageDef {
|
||||
kind: 'event' | 'combat' | 'resource' | 'boss'
|
||||
months: number
|
||||
title: string
|
||||
text?: { safe?: string; good?: string; bad?: string }
|
||||
enemyId?: string
|
||||
loot?: LootDef
|
||||
}
|
||||
|
||||
export interface LootDef {
|
||||
resources: Record<string, [number, number]>
|
||||
artifactChance: number
|
||||
techniqueChance: number
|
||||
beastcoreChance?: number
|
||||
}
|
||||
|
||||
export interface MissionDef {
|
||||
id: string
|
||||
name: string
|
||||
region: string
|
||||
icon: string
|
||||
desc: string
|
||||
realmHint: RealmMajor
|
||||
minMembers: number
|
||||
maxMembers: number
|
||||
risk: number
|
||||
stages: MissionStageDef[]
|
||||
completionLoot: LootDef
|
||||
}
|
||||
|
||||
export const MISSIONS: MissionDef[] = [
|
||||
{
|
||||
id: 'm-anmoku', name: '暗墨林', region: '祖城西郊', icon: '林',
|
||||
desc: '灵气暗涌的密林,常有低阶妖兽出没,是子弟试炼的好去处。',
|
||||
realmHint: 'qi', minMembers: 1, maxMembers: 4, risk: 0.5,
|
||||
stages: [
|
||||
{ kind: 'event', months: 3, title: '深入林间', text: { safe: '一路无波,采得几株灵草压惊。', bad: '林深迷路,误入瘴气,队伍折损了体力。' } },
|
||||
{ kind: 'combat', months: 2, title: '遭遇袭击', enemyId: 'e-tiebei' },
|
||||
{ kind: 'resource', months: 2, title: '寻获残洞', loot: { resources: { lingcao: [30, 80], beastcore: [1, 3] }, artifactChance: 0.05, techniqueChance: 0.03 } }
|
||||
],
|
||||
completionLoot: { resources: { lingcao: [20, 60], lingkuang: [5, 15] }, artifactChance: 0.08, techniqueChance: 0.03 }
|
||||
},
|
||||
{
|
||||
id: 'm-xuangu', name: '玄冰谷', region: '北境寒渊', icon: '冰',
|
||||
desc: '寒潭彻骨,谷中灵泉可淬骨洗髓,也匿着护泉的凶兽。',
|
||||
realmHint: 'qi', minMembers: 1, maxMembers: 4, risk: 0.65,
|
||||
stages: [
|
||||
{ kind: 'resource', months: 3, title: '踏雪寻泉', loot: { resources: { lingkuang: [20, 50] }, artifactChance: 0.02, techniqueChance: 0.02 } },
|
||||
{ kind: 'combat', months: 2, title: '泉主现身', enemyId: 'e-huiyuan' },
|
||||
{ kind: 'boss', months: 2, title: '冰潭之下', enemyId: 'e-baiqi' }
|
||||
],
|
||||
completionLoot: { resources: { lingkuang: [30, 70], beastcore: [2, 5] }, artifactChance: 0.15, techniqueChance: 0.06 }
|
||||
},
|
||||
{
|
||||
id: 'm-guzhan', name: '古战阵', region: '南陵荒原', icon: '战',
|
||||
desc: '上古两族交兵的战场,杀气千年未散,宝物与凶险兼存。',
|
||||
realmHint: 'foundation', minMembers: 2, maxMembers: 4, risk: 0.75,
|
||||
stages: [
|
||||
{ kind: 'event', months: 3, title: '踏勘阵眼', text: { safe: '寻得阵眼遗骸,得一部残简。', bad: '触动禁制,一行人负伤遁走。' } },
|
||||
{ kind: 'combat', months: 2, title: '怨灵缠身', enemyId: 'e-baiqi' },
|
||||
{ kind: 'combat', months: 2, title: '守阵铁骑', enemyId: 'e-huanhan' },
|
||||
{ kind: 'resource', months: 3, title: '挖开枯井', loot: { resources: { lingkuang: [40, 90], beastcore: [2, 6] }, artifactChance: 0.2, techniqueChance: 0.08 } }
|
||||
],
|
||||
completionLoot: { resources: { lingkuang: [40, 90], beastcore: [2, 8] }, artifactChance: 0.22, techniqueChance: 0.1 }
|
||||
},
|
||||
{
|
||||
id: 'm-lingshan', name: '灵鹫山', region: '东海之滨', icon: '鹫',
|
||||
desc: '孤峰入云,鹫鸣震谷,山腹有灵矿与丹谷仙人遗泽。',
|
||||
realmHint: 'foundation', minMembers: 2, maxMembers: 4, risk: 0.85,
|
||||
stages: [
|
||||
{ kind: 'combat', months: 2, title: '登山遇鹫', enemyId: 'e-muche' },
|
||||
{ kind: 'resource', months: 3, title: '灵鹫巢穴', loot: { resources: { lingkuang: [50, 120], beastcore: [3, 8] }, artifactChance: 0.25, techniqueChance: 0.15 } },
|
||||
{ kind: 'boss', months: 3, title: '丹谷试剑', enemyId: 'e-yeshen' }
|
||||
],
|
||||
completionLoot: { resources: { lingcao: [60, 140], beastcore: [4, 10] }, artifactChance: 0.3, techniqueChance: 0.2 }
|
||||
},
|
||||
{
|
||||
id: 'm-tiankeng', name: '天地秘境', region: '传说天外', icon: '玄',
|
||||
desc: '百年一开的无上秘境,传言其中有登天造化。',
|
||||
realmHint: 'core', minMembers: 3, maxMembers: 5, risk: 1.0,
|
||||
stages: [
|
||||
{ kind: 'event', months: 2, title: '踏入秘境', text: { safe: '奇花异果满目,造化之气扑面。', bad: '紫霄神雷击碎阵法,众人惊魂不定。' } },
|
||||
{ kind: 'combat', months: 2, title: '守宫神兽', enemyId: 'e-huanhan' },
|
||||
{ kind: 'combat', months: 3, title: '天劫傀儡', enemyId: 'e-jiaoyun' },
|
||||
{ kind: 'boss', months: 3, title: '群雄夺宝', enemyId: 'e-kuangzun' }
|
||||
],
|
||||
completionLoot: { resources: { lingcao: [100, 220], lingkuang: [80, 160], beastcore: [10, 22] }, artifactChance: 0.6, techniqueChance: 0.5 }
|
||||
}
|
||||
]
|
||||
|
||||
export function missionById(id: string): MissionDef {
|
||||
const m = MISSIONS.find((x) => x.id === id)
|
||||
if (!m) throw new Error(`mission not found: ${id}`)
|
||||
return m
|
||||
}
|
||||
Reference in New Issue
Block a user